about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--tests/crashes/125370.rs16
-rw-r--r--tests/crashes/125432.rs17
-rw-r--r--tests/crashes/125476.rs1
-rw-r--r--tests/crashes/125520.rs16
-rw-r--r--tests/crashes/125553.rs15
-rw-r--r--tests/crashes/125556.rs14
-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
-rw-r--r--tests/ui/const-generics/issues/issue-105821.rs2
9 files changed, 183 insertions, 50 deletions
diff --git a/tests/crashes/125370.rs b/tests/crashes/125370.rs
deleted file mode 100644
index 8640d88a5d7..00000000000
--- a/tests/crashes/125370.rs
+++ /dev/null
@@ -1,16 +0,0 @@
-//@ known-bug: rust-lang/rust#125370
-
-type Field3 = i64;
-
-#[repr(C)]
-union DummyUnion {
-    field3: Field3,
-}
-
-const UNION: DummyUnion = loop {};
-
-const fn read_field2() -> Field2 {
-    const FIELD2: Field2 = loop {
-        UNION.field3
-    };
-}
diff --git a/tests/crashes/125432.rs b/tests/crashes/125432.rs
deleted file mode 100644
index 659bb3ce21d..00000000000
--- a/tests/crashes/125432.rs
+++ /dev/null
@@ -1,17 +0,0 @@
-//@ known-bug: rust-lang/rust#125432
-
-fn separate_arms() {
-    // Here both arms perform assignments, but only one is illegal.
-
-    let mut x = None;
-    match x {
-        None => {
-            // It is ok to reassign x here, because there is in
-            // fact no outstanding loan of x!
-            x = Some(0);
-        }
-        Some(right) => consume(right),
-    }
-}
-
-fn main() {}
diff --git a/tests/crashes/125476.rs b/tests/crashes/125476.rs
index c6cb4db7d23..aa9a081388d 100644
--- a/tests/crashes/125476.rs
+++ b/tests/crashes/125476.rs
@@ -1,3 +1,4 @@
 //@ known-bug: rust-lang/rust#125476
+//@ only-x86_64
 pub struct Data([u8; usize::MAX >> 16]);
 const _: &'static [Data] = &[];
diff --git a/tests/crashes/125520.rs b/tests/crashes/125520.rs
deleted file mode 100644
index c6756053c21..00000000000
--- a/tests/crashes/125520.rs
+++ /dev/null
@@ -1,16 +0,0 @@
-//@ known-bug: #125520
-#![feature(generic_const_exprs)]
-
-struct Outer<const A: i64, const B: i64>();
-impl<const A: usize, const B: usize> Outer<A, B>
-where
-    [(); A + (B * 2)]:,
-{
-    fn i() -> Self {
-        Self
-    }
-}
-
-fn main() {
-    Outer::<1, 1>::o();
-}
diff --git a/tests/crashes/125553.rs b/tests/crashes/125553.rs
new file mode 100644
index 00000000000..142c06775bb
--- /dev/null
+++ b/tests/crashes/125553.rs
@@ -0,0 +1,15 @@
+//@ known-bug: rust-lang/rust#125553
+//@ edition:2021
+
+#[derive(Copy, Clone)]
+struct Foo((u32, u32));
+
+fn main() {
+    type T = impl Copy(Copy, Clone)
+    let foo: T = Foo((1u32, 1u32));
+    let x = move || {
+        let derive = move || {
+        let Foo((a, b)) = foo;
+    };
+    };
+}
diff --git a/tests/crashes/125556.rs b/tests/crashes/125556.rs
new file mode 100644
index 00000000000..f2e2a991b11
--- /dev/null
+++ b/tests/crashes/125556.rs
@@ -0,0 +1,14 @@
+//@ known-bug: rust-lang/rust#125556
+//@ compile-flags: -Znext-solver=coherence
+
+#![feature(generic_const_exprs)]
+
+pub struct A<const z: [usize; x]> {}
+
+impl A<2> {
+    pub const fn B() {}
+}
+
+impl A<2> {
+    pub const fn B() {}
+}
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`.
diff --git a/tests/ui/const-generics/issues/issue-105821.rs b/tests/ui/const-generics/issues/issue-105821.rs
index 282cbe9249d..e55da461605 100644
--- a/tests/ui/const-generics/issues/issue-105821.rs
+++ b/tests/ui/const-generics/issues/issue-105821.rs
@@ -1,5 +1,5 @@
 //@ failure-status: 101
-//@ known-bug: unknown
+//@ known-bug: rust-lang/rust#125451
 //@ normalize-stderr-test "note: .*\n\n" -> ""
 //@ normalize-stderr-test "thread 'rustc' panicked.*\n.*\n" -> ""
 //@ normalize-stderr-test "(error: internal compiler error: [^:]+):\d+:\d+: " -> "$1:LL:CC: "