diff options
| author | Ellen <supbscripter@gmail.com> | 2022-05-05 17:44:54 +0100 |
|---|---|---|
| committer | Ellen <supbscripter@gmail.com> | 2022-05-05 17:45:39 +0100 |
| commit | fea1d765033eada386ffc1684d47c00a48d104f1 (patch) | |
| tree | fef19174b45842ee05a51064217311a101fed588 /src/test/ui/const-generics | |
| parent | 4208c53ed695ddb822b6510e3faa0a46e591060e (diff) | |
| download | rust-fea1d765033eada386ffc1684d47c00a48d104f1.tar.gz rust-fea1d765033eada386ffc1684d47c00a48d104f1.zip | |
make `compare_generic_param_kinds` errors consistent
Diffstat (limited to 'src/test/ui/const-generics')
4 files changed, 84 insertions, 39 deletions
diff --git a/src/test/ui/const-generics/defaults/mismatched_ty_const_in_trait_impl.rs b/src/test/ui/const-generics/defaults/mismatched_ty_const_in_trait_impl.rs index fd57060d5e7..5c9323261a9 100644 --- a/src/test/ui/const-generics/defaults/mismatched_ty_const_in_trait_impl.rs +++ b/src/test/ui/const-generics/defaults/mismatched_ty_const_in_trait_impl.rs @@ -19,7 +19,23 @@ trait Uwu { } impl Uwu for () { fn baz<const N: i32>() {} - //~^ error: method `baz` has an incompatible const parameter type for trait + //~^ error: method `baz` has an incompatible generic parameter for trait +} + +trait Aaaaaa { + fn bbbb<const N: u32, T>() {} +} +impl Aaaaaa for () { + fn bbbb<T, const N: u32>() {} + //~^ error: method `bbbb` has an incompatible generic parameter for trait +} + +trait Names { + fn abcd<T, const N: u32>() {} +} +impl Names for () { + fn abcd<const N: u32, T>() {} + //~^ error: method `abcd` has an incompatible generic parameter for trait } fn main() {} diff --git a/src/test/ui/const-generics/defaults/mismatched_ty_const_in_trait_impl.stderr b/src/test/ui/const-generics/defaults/mismatched_ty_const_in_trait_impl.stderr index cea8f4e50b0..a1ec8adec76 100644 --- a/src/test/ui/const-generics/defaults/mismatched_ty_const_in_trait_impl.stderr +++ b/src/test/ui/const-generics/defaults/mismatched_ty_const_in_trait_impl.stderr @@ -1,39 +1,68 @@ -error[E0053]: method `foo` has an incompatible generic parameter for trait +error[E0053]: method `foo` has an incompatible generic parameter for trait: `Trait` --> $DIR/mismatched_ty_const_in_trait_impl.rs:5:12 | -LL | fn foo<const M: u64>() {} - | ^^^^^^^^^^^^ - | -note: the trait impl specifies `M` is a const parameter of type `u64`, but the declaration in trait `Trait::foo` requires it is a type parameter - --> $DIR/mismatched_ty_const_in_trait_impl.rs:2:12 - | +LL | trait Trait { + | ----- LL | fn foo<U>() {} - | ^ + | - expected type parameter +LL | } +LL | impl Trait for () { + | ----------------- +LL | fn foo<const M: u64>() {} + | ^^^^^^^^^^^^ found const parameter with type `u64` -error[E0053]: method `bar` has an incompatible generic parameter for trait +error[E0053]: method `bar` has an incompatible generic parameter for trait: `Other` --> $DIR/mismatched_ty_const_in_trait_impl.rs:13:12 | -LL | fn bar<T>() {} - | ^ - | -note: the trait impl specifies `T` is a type parameter, but the declaration in trait `Other::bar` requires it is a const parameter of type `u8` - --> $DIR/mismatched_ty_const_in_trait_impl.rs:10:12 - | +LL | trait Other { + | ----- LL | fn bar<const M: u8>() {} - | ^^^^^^^^^^^ + | ----------- expected const parameter with type `u8` +LL | } +LL | impl Other for () { + | ----------------- +LL | fn bar<T>() {} + | ^ found type parameter -error[E0053]: method `baz` has an incompatible const parameter type for trait +error[E0053]: method `baz` has an incompatible generic parameter for trait: `Uwu` --> $DIR/mismatched_ty_const_in_trait_impl.rs:21:12 | +LL | trait Uwu { + | --- +LL | fn baz<const N: u32>() {} + | ------------ expected const parameter with type `u32` +LL | } +LL | impl Uwu for () { + | --------------- LL | fn baz<const N: i32>() {} - | ^^^^^^^^^^^^ + | ^^^^^^^^^^^^ found const parameter with type `i32` + +error[E0053]: method `bbbb` has an incompatible generic parameter for trait: `Aaaaaa` + --> $DIR/mismatched_ty_const_in_trait_impl.rs:29:13 | -note: the const parameter `N` has type `i32`, but the declaration in trait `Uwu::baz` has type `u32` - --> $DIR/mismatched_ty_const_in_trait_impl.rs:18:12 +LL | trait Aaaaaa { + | ------ +LL | fn bbbb<const N: u32, T>() {} + | ------------ expected const parameter with type `u32` +LL | } +LL | impl Aaaaaa for () { + | ------------------ +LL | fn bbbb<T, const N: u32>() {} + | ^ found type parameter + +error[E0053]: method `abcd` has an incompatible generic parameter for trait: `Names` + --> $DIR/mismatched_ty_const_in_trait_impl.rs:37:13 | -LL | fn baz<const N: u32>() {} - | ^^^^^^^^^^^^ +LL | trait Names { + | ----- +LL | fn abcd<T, const N: u32>() {} + | - expected type parameter +LL | } +LL | impl Names for () { + | ----------------- +LL | fn abcd<const N: u32, T>() {} + | ^^^^^^^^^^^^ found const parameter with type `u32` -error: aborting due to 3 previous errors +error: aborting due to 5 previous errors For more information about this error, try `rustc --explain E0053`. diff --git a/src/test/ui/const-generics/issues/issue-86820.rs b/src/test/ui/const-generics/issues/issue-86820.rs index 04650403c6b..9bcb8e1aeed 100644 --- a/src/test/ui/const-generics/issues/issue-86820.rs +++ b/src/test/ui/const-generics/issues/issue-86820.rs @@ -1,6 +1,6 @@ // Regression test for the ICE described in #86820. -#![allow(unused,dead_code)] +#![allow(unused, dead_code)] use std::ops::BitAnd; const C: fn() = || is_set(); @@ -9,13 +9,12 @@ fn is_set() { } trait Bits { - fn bit<const I : u8>(self) -> bool; - //~^ NOTE: the const parameter `I` has type `usize`, but the declaration in trait `Bits::bit` has type `u8` + fn bit<const I: u8>(self) -> bool; } impl Bits for u8 { - fn bit<const I : usize>(self) -> bool { - //~^ ERROR: method `bit` has an incompatible const parameter type for trait [E0053] + fn bit<const I: usize>(self) -> bool { + //~^ ERROR: method `bit` has an incompatible generic parameter for trait: `Bits` [E0053] let i = 1 << I; let mask = u8::from(i); mask & self == mask diff --git a/src/test/ui/const-generics/issues/issue-86820.stderr b/src/test/ui/const-generics/issues/issue-86820.stderr index f7b8d80eeca..4d54d654c12 100644 --- a/src/test/ui/const-generics/issues/issue-86820.stderr +++ b/src/test/ui/const-generics/issues/issue-86820.stderr @@ -1,14 +1,15 @@ -error[E0053]: method `bit` has an incompatible const parameter type for trait - --> $DIR/issue-86820.rs:17:12 +error[E0053]: method `bit` has an incompatible generic parameter for trait: `Bits` + --> $DIR/issue-86820.rs:16:12 | -LL | fn bit<const I : usize>(self) -> bool { - | ^^^^^^^^^^^^^^^ - | -note: the const parameter `I` has type `usize`, but the declaration in trait `Bits::bit` has type `u8` - --> $DIR/issue-86820.rs:12:12 - | -LL | fn bit<const I : u8>(self) -> bool; - | ^^^^^^^^^^^^ +LL | trait Bits { + | ---- +LL | fn bit<const I: u8>(self) -> bool; + | ----------- expected const parameter with type `u8` +... +LL | impl Bits for u8 { + | ---------------- +LL | fn bit<const I: usize>(self) -> bool { + | ^^^^^^^^^^^^^^ found const parameter with type `usize` error: aborting due to previous error |
