Skip to content

Commit 7428de1

Browse files
Rollup merge of #77930 - estebank:ice-77919, r=eddyb
Do not ICE with TraitPredicates containing [type error] Fix #77919.
2 parents 4d72939 + f71e9ed commit 7428de1

File tree

3 files changed

+63
-1
lines changed

3 files changed

+63
-1
lines changed

compiler/rustc_trait_selection/src/traits/codegen.rs

+4-1
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,10 @@ where
121121
// contains unbound type parameters. It could be a slight
122122
// optimization to stop iterating early.
123123
if let Err(errors) = fulfill_cx.select_all_or_error(infcx) {
124-
bug!("Encountered errors `{:?}` resolving bounds after type-checking", errors);
124+
infcx.tcx.sess.delay_span_bug(
125+
rustc_span::DUMMY_SP,
126+
&format!("Encountered errors `{:?}` resolving bounds after type-checking", errors),
127+
);
125128
}
126129

127130
let result = infcx.resolve_vars_if_possible(result);

src/test/ui/issues/issue-77919.rs

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
fn main() {
2+
[1; <Multiply<Five, Five>>::VAL]; //~ ERROR evaluation of constant value failed
3+
}
4+
trait TypeVal<T> {
5+
const VAL: T; //~ ERROR any use of this value will cause an error
6+
}
7+
struct Five;
8+
struct Multiply<N, M> {
9+
_n: PhantomData, //~ ERROR cannot find type `PhantomData` in this scope
10+
}
11+
impl<N, M> TypeVal<usize> for Multiply<N, M> where N: TypeVal<VAL> {}
12+
//~^ ERROR cannot find type `VAL` in this scope
13+
//~| ERROR not all trait items implemented, missing: `VAL`

src/test/ui/issues/issue-77919.stderr

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
error[E0412]: cannot find type `PhantomData` in this scope
2+
--> $DIR/issue-77919.rs:9:9
3+
|
4+
LL | _n: PhantomData,
5+
| ^^^^^^^^^^^ not found in this scope
6+
|
7+
help: consider importing this struct
8+
|
9+
LL | use std::marker::PhantomData;
10+
|
11+
12+
error[E0412]: cannot find type `VAL` in this scope
13+
--> $DIR/issue-77919.rs:11:63
14+
|
15+
LL | impl<N, M> TypeVal<usize> for Multiply<N, M> where N: TypeVal<VAL> {}
16+
| - ^^^ not found in this scope
17+
| |
18+
| help: you might be missing a type parameter: `, VAL`
19+
20+
error[E0046]: not all trait items implemented, missing: `VAL`
21+
--> $DIR/issue-77919.rs:11:1
22+
|
23+
LL | const VAL: T;
24+
| ------------- `VAL` from trait
25+
...
26+
LL | impl<N, M> TypeVal<usize> for Multiply<N, M> where N: TypeVal<VAL> {}
27+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ missing `VAL` in implementation
28+
29+
error: any use of this value will cause an error
30+
--> $DIR/issue-77919.rs:5:5
31+
|
32+
LL | const VAL: T;
33+
| ^^^^^^^^^^^^^ no MIR body is available for DefId(0:7 ~ issue_77919[317d]::TypeVal::VAL)
34+
|
35+
= note: `#[deny(const_err)]` on by default
36+
37+
error[E0080]: evaluation of constant value failed
38+
--> $DIR/issue-77919.rs:2:9
39+
|
40+
LL | [1; <Multiply<Five, Five>>::VAL];
41+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ referenced constant has errors
42+
43+
error: aborting due to 5 previous errors
44+
45+
Some errors have detailed explanations: E0046, E0080, E0412.
46+
For more information about an error, try `rustc --explain E0046`.

0 commit comments

Comments
 (0)