Fix AnonConst ICE

Add test

Apply suggestions

Switch to match

Apply cargofmt
This commit is contained in:
threadexception 2021-11-28 10:20:53 +01:00
parent 84826fec95
commit a0fb992433
3 changed files with 44 additions and 4 deletions

View File

@ -172,7 +172,7 @@ pub(super) fn opt_const_param_of(tcx: TyCtxt<'_>, def_id: LocalDefId) -> Option<
// We've encountered an `AnonConst` in some path, so we need to
// figure out which generic parameter it corresponds to and return
// the relevant type.
let (arg_index, segment) = path
let filtered = path
.segments
.iter()
.filter_map(|seg| seg.args.map(|args| (args.args, seg)))
@ -181,10 +181,17 @@ pub(super) fn opt_const_param_of(tcx: TyCtxt<'_>, def_id: LocalDefId) -> Option<
.filter(|arg| arg.is_const())
.position(|arg| arg.id() == hir_id)
.map(|index| (index, seg))
})
.unwrap_or_else(|| {
bug!("no arg matching AnonConst in path");
});
let (arg_index, segment) = match filtered {
None => {
tcx.sess.delay_span_bug(
tcx.def_span(def_id),
"no arg matching AnonConst in path",
);
return None;
}
Some(inner) => inner,
};
// Try to use the segment resolution if it is valid, otherwise we
// default to the path resolution.

View File

@ -0,0 +1,6 @@
fn main() {
0: u8<e<5>=e>
//~^ ERROR: cannot find type `e` in this scope [E0412]
//~| ERROR: associated type bindings are not allowed here [E0229]
//~| ERROR: mismatched types [E0308]
}

View File

@ -0,0 +1,27 @@
error[E0412]: cannot find type `e` in this scope
--> $DIR/issue-91267.rs:2:16
|
LL | 0: u8<e<5>=e>
| ^
| |
| not found in this scope
| help: maybe you meant to write an assignment here: `let e`
error[E0229]: associated type bindings are not allowed here
--> $DIR/issue-91267.rs:2:11
|
LL | 0: u8<e<5>=e>
| ^^^^^^ associated type not allowed here
error[E0308]: mismatched types
--> $DIR/issue-91267.rs:2:5
|
LL | fn main() {
| - expected `()` because of default return type
LL | 0: u8<e<5>=e>
| ^^^^^^^^^^^^^ expected `()`, found `u8`
error: aborting due to 3 previous errors
Some errors have detailed explanations: E0229, E0308, E0412.
For more information about an error, try `rustc --explain E0229`.