about summary refs log tree commit diff
path: root/tests/ui/const-generics/generic_const_exprs
diff options
context:
space:
mode:
authorMatthias Krüger <matthias.krueger@famsik.de>2024-05-27 17:58:43 +0200
committerMatthias Krüger <matthias.krueger@famsik.de>2024-05-27 20:41:09 +0200
commitbae945201f72cf548b3b2d8cfd545812cccfae4a (patch)
treec9f2ef8044cac9f6025d32a7cab305c15316cf67 /tests/ui/const-generics/generic_const_exprs
parente5d100363ad5bb72037d56093f794de4e10a99bf (diff)
downloadrust-bae945201f72cf548b3b2d8cfd545812cccfae4a.tar.gz
rust-bae945201f72cf548b3b2d8cfd545812cccfae4a.zip
remove fixed crashes, add fixed crashes to tests, add new cashed found in the meantime
Diffstat (limited to 'tests/ui/const-generics/generic_const_exprs')
-rw-r--r--tests/ui/const-generics/generic_const_exprs/ice-125520-layout-mismatch-mulwithoverflow.rs27
-rw-r--r--tests/ui/const-generics/generic_const_exprs/ice-125520-layout-mismatch-mulwithoverflow.stderr125
2 files changed, 152 insertions, 0 deletions
diff --git a/tests/ui/const-generics/generic_const_exprs/ice-125520-layout-mismatch-mulwithoverflow.rs b/tests/ui/const-generics/generic_const_exprs/ice-125520-layout-mismatch-mulwithoverflow.rs
new file mode 100644
index 00000000000..cd2dc3f4fe8
--- /dev/null
+++ b/tests/ui/const-generics/generic_const_exprs/ice-125520-layout-mismatch-mulwithoverflow.rs
@@ -0,0 +1,27 @@
+// issue: rust-lang/rust#125520
+#![feature(generic_const_exprs)]
+//~^ WARN the feature `generic_const_exprs` is incomplete and may not be safe to use and/or cause compiler crashes
+
+struct Outer<const A: i64, const B: i64>();
+impl<const A: usize, const B: usize> Outer<A, B>
+//~^ ERROR the constant `A` is not of type `i64`
+//~| ERROR the constant `B` is not of type `i64`
+//~| ERROR mismatched types
+//~| ERROR mismatched types
+where
+    [(); A + (B * 2)]:,
+{
+    fn i() -> Self {
+    //~^ ERROR the constant `A` is not of type `i64`
+    //~| ERROR the constant `B` is not of type `i64`
+        Self
+        //~^ ERROR mismatched types
+        //~| ERROR the constant `A` is not of type `i64`
+        //~| ERROR the constant `B` is not of type `i64`
+    }
+}
+
+fn main() {
+    Outer::<1, 1>::o();
+    //~^ ERROR no function or associated item named `o` found for struct `Outer` in the current scope
+}
diff --git a/tests/ui/const-generics/generic_const_exprs/ice-125520-layout-mismatch-mulwithoverflow.stderr b/tests/ui/const-generics/generic_const_exprs/ice-125520-layout-mismatch-mulwithoverflow.stderr
new file mode 100644
index 00000000000..2dbd69fd3bc
--- /dev/null
+++ b/tests/ui/const-generics/generic_const_exprs/ice-125520-layout-mismatch-mulwithoverflow.stderr
@@ -0,0 +1,125 @@
+warning: the feature `generic_const_exprs` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/ice-125520-layout-mismatch-mulwithoverflow.rs:2:12
+   |
+LL | #![feature(generic_const_exprs)]
+   |            ^^^^^^^^^^^^^^^^^^^
+   |
+   = note: see issue #76560 <https://github.com/rust-lang/rust/issues/76560> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
+error: the constant `A` is not of type `i64`
+  --> $DIR/ice-125520-layout-mismatch-mulwithoverflow.rs:6:38
+   |
+LL | impl<const A: usize, const B: usize> Outer<A, B>
+   |                                      ^^^^^^^^^^^ expected `i64`, found `usize`
+   |
+note: required by a bound in `Outer`
+  --> $DIR/ice-125520-layout-mismatch-mulwithoverflow.rs:5:14
+   |
+LL | struct Outer<const A: i64, const B: i64>();
+   |              ^^^^^^^^^^^^ required by this bound in `Outer`
+
+error: the constant `B` is not of type `i64`
+  --> $DIR/ice-125520-layout-mismatch-mulwithoverflow.rs:6:38
+   |
+LL | impl<const A: usize, const B: usize> Outer<A, B>
+   |                                      ^^^^^^^^^^^ expected `i64`, found `usize`
+   |
+note: required by a bound in `Outer`
+  --> $DIR/ice-125520-layout-mismatch-mulwithoverflow.rs:5:28
+   |
+LL | struct Outer<const A: i64, const B: i64>();
+   |                            ^^^^^^^^^^^^ required by this bound in `Outer`
+
+error: the constant `A` is not of type `i64`
+  --> $DIR/ice-125520-layout-mismatch-mulwithoverflow.rs:14:15
+   |
+LL |     fn i() -> Self {
+   |               ^^^^ expected `i64`, found `usize`
+   |
+note: required by a bound in `Outer`
+  --> $DIR/ice-125520-layout-mismatch-mulwithoverflow.rs:5:14
+   |
+LL | struct Outer<const A: i64, const B: i64>();
+   |              ^^^^^^^^^^^^ required by this bound in `Outer`
+
+error: the constant `B` is not of type `i64`
+  --> $DIR/ice-125520-layout-mismatch-mulwithoverflow.rs:14:15
+   |
+LL |     fn i() -> Self {
+   |               ^^^^ expected `i64`, found `usize`
+   |
+note: required by a bound in `Outer`
+  --> $DIR/ice-125520-layout-mismatch-mulwithoverflow.rs:5:28
+   |
+LL | struct Outer<const A: i64, const B: i64>();
+   |                            ^^^^^^^^^^^^ required by this bound in `Outer`
+
+error[E0308]: mismatched types
+  --> $DIR/ice-125520-layout-mismatch-mulwithoverflow.rs:17:9
+   |
+LL | struct Outer<const A: i64, const B: i64>();
+   | ---------------------------------------- `Outer` defines a struct constructor here, which should be called
+...
+LL |     fn i() -> Self {
+   |               ---- expected `Outer<A, B>` because of return type
+...
+LL |         Self
+   |         ^^^^ expected `Outer<A, B>`, found struct constructor
+   |
+   = note:          expected struct `Outer<A, B>`
+           found struct constructor `fn() -> Outer<A, B> {Outer::<A, B>}`
+help: use parentheses to construct this tuple struct
+   |
+LL |         Self()
+   |             ++
+
+error: the constant `A` is not of type `i64`
+  --> $DIR/ice-125520-layout-mismatch-mulwithoverflow.rs:17:9
+   |
+LL |         Self
+   |         ^^^^ expected `i64`, found `usize`
+   |
+note: required by a bound in `Outer`
+  --> $DIR/ice-125520-layout-mismatch-mulwithoverflow.rs:5:14
+   |
+LL | struct Outer<const A: i64, const B: i64>();
+   |              ^^^^^^^^^^^^ required by this bound in `Outer`
+
+error: the constant `B` is not of type `i64`
+  --> $DIR/ice-125520-layout-mismatch-mulwithoverflow.rs:17:9
+   |
+LL |         Self
+   |         ^^^^ expected `i64`, found `usize`
+   |
+note: required by a bound in `Outer`
+  --> $DIR/ice-125520-layout-mismatch-mulwithoverflow.rs:5:28
+   |
+LL | struct Outer<const A: i64, const B: i64>();
+   |                            ^^^^^^^^^^^^ required by this bound in `Outer`
+
+error[E0599]: no function or associated item named `o` found for struct `Outer` in the current scope
+  --> $DIR/ice-125520-layout-mismatch-mulwithoverflow.rs:25:20
+   |
+LL | struct Outer<const A: i64, const B: i64>();
+   | ---------------------------------------- function or associated item `o` not found for this struct
+...
+LL |     Outer::<1, 1>::o();
+   |                    ^ function or associated item not found in `Outer<1, 1>`
+
+error[E0308]: mismatched types
+  --> $DIR/ice-125520-layout-mismatch-mulwithoverflow.rs:6:44
+   |
+LL | impl<const A: usize, const B: usize> Outer<A, B>
+   |                                            ^ expected `i64`, found `usize`
+
+error[E0308]: mismatched types
+  --> $DIR/ice-125520-layout-mismatch-mulwithoverflow.rs:6:47
+   |
+LL | impl<const A: usize, const B: usize> Outer<A, B>
+   |                                               ^ expected `i64`, found `usize`
+
+error: aborting due to 10 previous errors; 1 warning emitted
+
+Some errors have detailed explanations: E0308, E0599.
+For more information about an error, try `rustc --explain E0308`.