parent
203c8765ea
commit
eff76455fd
3 changed files with 131 additions and 1 deletions
|
@ -1607,7 +1607,7 @@ impl<'tcx> InferCtxtPrivExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
|
||||||
| ObligationCauseCode::ObjectCastObligation(..)
|
| ObligationCauseCode::ObjectCastObligation(..)
|
||||||
| ObligationCauseCode::OpaqueType
|
| ObligationCauseCode::OpaqueType
|
||||||
);
|
);
|
||||||
let expected_ty = data.term.ty().unwrap();
|
let expected_ty = data.term.ty().unwrap_or_else(|| self.tcx.ty_error());
|
||||||
|
|
||||||
// constrain inference variables a bit more to nested obligations from normalize so
|
// constrain inference variables a bit more to nested obligations from normalize so
|
||||||
// we can have more helpful errors.
|
// we can have more helpful errors.
|
||||||
|
|
21
src/test/ui/issues/issue-105330.rs
Normal file
21
src/test/ui/issues/issue-105330.rs
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
pub trait TraitWAssocConst {
|
||||||
|
const A: usize;
|
||||||
|
}
|
||||||
|
pub struct Demo {}
|
||||||
|
|
||||||
|
impl TraitWAssocConst for impl Demo { //~ ERROR E0404
|
||||||
|
//~^ ERROR E0562
|
||||||
|
pubconst A: str = 32; //~ ERROR expected one of
|
||||||
|
}
|
||||||
|
|
||||||
|
fn foo<A: TraitWAssocConst<A=32>>() { //~ ERROR E0658
|
||||||
|
foo::<Demo>()(); //~ ERROR E0271
|
||||||
|
//~^ ERROR E0618
|
||||||
|
//~| ERROR E0277
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main<A: TraitWAssocConst<A=32>>() { //~ ERROR E0131
|
||||||
|
//~^ ERROR E0658
|
||||||
|
foo::<Demo>(); //~ ERROR E0277
|
||||||
|
//~^ ERROR E0271
|
||||||
|
}
|
109
src/test/ui/issues/issue-105330.stderr
Normal file
109
src/test/ui/issues/issue-105330.stderr
Normal file
|
@ -0,0 +1,109 @@
|
||||||
|
error: expected one of `!` or `::`, found `A`
|
||||||
|
--> $DIR/issue-105330.rs:8:14
|
||||||
|
|
|
||||||
|
LL | impl TraitWAssocConst for impl Demo {
|
||||||
|
| - while parsing this item list starting here
|
||||||
|
LL |
|
||||||
|
LL | pubconst A: str = 32;
|
||||||
|
| ^ expected one of `!` or `::`
|
||||||
|
LL | }
|
||||||
|
| - the item list ends here
|
||||||
|
|
||||||
|
error[E0404]: expected trait, found struct `Demo`
|
||||||
|
--> $DIR/issue-105330.rs:6:32
|
||||||
|
|
|
||||||
|
LL | impl TraitWAssocConst for impl Demo {
|
||||||
|
| ^^^^ not a trait
|
||||||
|
|
||||||
|
error[E0658]: associated const equality is incomplete
|
||||||
|
--> $DIR/issue-105330.rs:11:28
|
||||||
|
|
|
||||||
|
LL | fn foo<A: TraitWAssocConst<A=32>>() {
|
||||||
|
| ^^^^
|
||||||
|
|
|
||||||
|
= note: see issue #92827 <https://github.com/rust-lang/rust/issues/92827> for more information
|
||||||
|
= help: add `#![feature(associated_const_equality)]` to the crate attributes to enable
|
||||||
|
|
||||||
|
error[E0658]: associated const equality is incomplete
|
||||||
|
--> $DIR/issue-105330.rs:17:29
|
||||||
|
|
|
||||||
|
LL | fn main<A: TraitWAssocConst<A=32>>() {
|
||||||
|
| ^^^^
|
||||||
|
|
|
||||||
|
= note: see issue #92827 <https://github.com/rust-lang/rust/issues/92827> for more information
|
||||||
|
= help: add `#![feature(associated_const_equality)]` to the crate attributes to enable
|
||||||
|
|
||||||
|
error[E0562]: `impl Trait` only allowed in function and inherent method return types, not in type
|
||||||
|
--> $DIR/issue-105330.rs:6:27
|
||||||
|
|
|
||||||
|
LL | impl TraitWAssocConst for impl Demo {
|
||||||
|
| ^^^^^^^^^
|
||||||
|
|
||||||
|
error[E0277]: the trait bound `Demo: TraitWAssocConst` is not satisfied
|
||||||
|
--> $DIR/issue-105330.rs:12:11
|
||||||
|
|
|
||||||
|
LL | foo::<Demo>()();
|
||||||
|
| ^^^^ the trait `TraitWAssocConst` is not implemented for `Demo`
|
||||||
|
|
|
||||||
|
note: required by a bound in `foo`
|
||||||
|
--> $DIR/issue-105330.rs:11:11
|
||||||
|
|
|
||||||
|
LL | fn foo<A: TraitWAssocConst<A=32>>() {
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `foo`
|
||||||
|
|
||||||
|
error[E0271]: type mismatch resolving `<Demo as TraitWAssocConst>::A == 32`
|
||||||
|
--> $DIR/issue-105330.rs:12:11
|
||||||
|
|
|
||||||
|
LL | foo::<Demo>()();
|
||||||
|
| ^^^^ types differ
|
||||||
|
|
|
||||||
|
note: required by a bound in `foo`
|
||||||
|
--> $DIR/issue-105330.rs:11:28
|
||||||
|
|
|
||||||
|
LL | fn foo<A: TraitWAssocConst<A=32>>() {
|
||||||
|
| ^^^^ required by this bound in `foo`
|
||||||
|
|
||||||
|
error[E0618]: expected function, found `()`
|
||||||
|
--> $DIR/issue-105330.rs:12:5
|
||||||
|
|
|
||||||
|
LL | fn foo<A: TraitWAssocConst<A=32>>() {
|
||||||
|
| ----------------------------------- `foo::<Demo>` defined here returns `()`
|
||||||
|
LL | foo::<Demo>()();
|
||||||
|
| ^^^^^^^^^^^^^--
|
||||||
|
| |
|
||||||
|
| call expression requires function
|
||||||
|
|
||||||
|
error[E0277]: the trait bound `Demo: TraitWAssocConst` is not satisfied
|
||||||
|
--> $DIR/issue-105330.rs:19:11
|
||||||
|
|
|
||||||
|
LL | foo::<Demo>();
|
||||||
|
| ^^^^ the trait `TraitWAssocConst` is not implemented for `Demo`
|
||||||
|
|
|
||||||
|
note: required by a bound in `foo`
|
||||||
|
--> $DIR/issue-105330.rs:11:11
|
||||||
|
|
|
||||||
|
LL | fn foo<A: TraitWAssocConst<A=32>>() {
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `foo`
|
||||||
|
|
||||||
|
error[E0271]: type mismatch resolving `<Demo as TraitWAssocConst>::A == 32`
|
||||||
|
--> $DIR/issue-105330.rs:19:11
|
||||||
|
|
|
||||||
|
LL | foo::<Demo>();
|
||||||
|
| ^^^^ types differ
|
||||||
|
|
|
||||||
|
note: required by a bound in `foo`
|
||||||
|
--> $DIR/issue-105330.rs:11:28
|
||||||
|
|
|
||||||
|
LL | fn foo<A: TraitWAssocConst<A=32>>() {
|
||||||
|
| ^^^^ required by this bound in `foo`
|
||||||
|
|
||||||
|
error[E0131]: `main` function is not allowed to have generic parameters
|
||||||
|
--> $DIR/issue-105330.rs:17:8
|
||||||
|
|
|
||||||
|
LL | fn main<A: TraitWAssocConst<A=32>>() {
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ `main` cannot have generic parameters
|
||||||
|
|
||||||
|
error: aborting due to 11 previous errors
|
||||||
|
|
||||||
|
Some errors have detailed explanations: E0131, E0271, E0277, E0404, E0562, E0618, E0658.
|
||||||
|
For more information about an error, try `rustc --explain E0131`.
|
Loading…
Add table
Add a link
Reference in a new issue