mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-25 16:24:46 +00:00
Rollup merge of #112990 - JohnTitor:issue-96699, r=TaKO8Ki
Add a regression test for #96699 Closes #96699 r? `@BoxyUwU`
This commit is contained in:
commit
691580f566
87
tests/ui/const-generics/generic_const_exprs/issue-96699.rs
Normal file
87
tests/ui/const-generics/generic_const_exprs/issue-96699.rs
Normal file
@ -0,0 +1,87 @@
|
||||
// check-pass
|
||||
|
||||
#![allow(dead_code, incomplete_features)]
|
||||
#![feature(generic_const_exprs)]
|
||||
|
||||
const fn min(a: usize, b: usize) -> usize {
|
||||
if a < b {
|
||||
a
|
||||
} else {
|
||||
b
|
||||
}
|
||||
}
|
||||
|
||||
trait Trait1<Inner1>
|
||||
where
|
||||
Self: Sized,
|
||||
{
|
||||
fn crash_here()
|
||||
where
|
||||
Inner1: Default,
|
||||
{
|
||||
Inner1::default();
|
||||
}
|
||||
}
|
||||
|
||||
struct Struct1<T>(T);
|
||||
impl<T> Trait1<T> for Struct1<T> {}
|
||||
|
||||
trait Trait2<Inner2>
|
||||
where
|
||||
Self: Sized,
|
||||
{
|
||||
type Assoc: Trait1<Inner2>;
|
||||
|
||||
fn call_crash()
|
||||
where
|
||||
Inner2: Default,
|
||||
{
|
||||
// if Inner2 implements Default, we can call crash_here.
|
||||
Self::Assoc::crash_here();
|
||||
}
|
||||
}
|
||||
|
||||
struct Struct2<const SIZE1: usize, const SIZE2: usize> {}
|
||||
/*
|
||||
where
|
||||
[(); min(SIZE1, SIZE2)]:,
|
||||
{
|
||||
elem: [i32; min(SIZE1, SIZE2)],
|
||||
}
|
||||
*/
|
||||
|
||||
impl<const SIZE1: usize, const SIZE2: usize> Trait2<[i32; min(SIZE1, SIZE2)]>
|
||||
for Struct2<SIZE1, SIZE2>
|
||||
{
|
||||
type Assoc = Struct1<[i32; min(SIZE1, SIZE2)]>;
|
||||
// dose Struct1<[i32; min(SIZE1, SIZE2)]> implement Default?
|
||||
}
|
||||
|
||||
fn main() {
|
||||
pattern2();
|
||||
|
||||
print_fully_name(<Struct2<1, 2> as Trait2<[i32; min(1, 2)]>>::Assoc::crash_here);
|
||||
// <compiler_bug2::Struct1<[i32; 1]> as compiler_bug2::Trait1<[i32; 1]>>::crash_here
|
||||
}
|
||||
|
||||
fn pattern1() {
|
||||
// no crash
|
||||
<Struct2<1, 2> as Trait2<[i32; min(1, 2)]>>::Assoc::crash_here();
|
||||
<Struct2<1, 2> as Trait2<[i32; min(1, 2)]>>::call_crash();
|
||||
}
|
||||
|
||||
fn pattern2() {
|
||||
// crash
|
||||
<Struct2<1, 2> as Trait2<[i32; min(1, 2)]>>::call_crash();
|
||||
|
||||
// undefined reference to `compiler_bug2::Trait1::crash_here'
|
||||
}
|
||||
|
||||
fn pattern3() {
|
||||
// no crash
|
||||
<Struct2<1, 2> as Trait2<[i32; min(1, 2)]>>::Assoc::crash_here();
|
||||
}
|
||||
|
||||
fn print_fully_name<T>(_: T) {
|
||||
let _ = std::any::type_name::<T>();
|
||||
}
|
Loading…
Reference in New Issue
Block a user