Fix AnonConst ICE
Add test Apply suggestions Switch to match Apply cargofmt
This commit is contained in:
parent
84826fec95
commit
a0fb992433
3 changed files with 44 additions and 4 deletions
|
@ -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
|
// We've encountered an `AnonConst` in some path, so we need to
|
||||||
// figure out which generic parameter it corresponds to and return
|
// figure out which generic parameter it corresponds to and return
|
||||||
// the relevant type.
|
// the relevant type.
|
||||||
let (arg_index, segment) = path
|
let filtered = path
|
||||||
.segments
|
.segments
|
||||||
.iter()
|
.iter()
|
||||||
.filter_map(|seg| seg.args.map(|args| (args.args, seg)))
|
.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())
|
.filter(|arg| arg.is_const())
|
||||||
.position(|arg| arg.id() == hir_id)
|
.position(|arg| arg.id() == hir_id)
|
||||||
.map(|index| (index, seg))
|
.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
|
// Try to use the segment resolution if it is valid, otherwise we
|
||||||
// default to the path resolution.
|
// default to the path resolution.
|
||||||
|
|
6
src/test/ui/typeck/issue-91267.rs
Normal file
6
src/test/ui/typeck/issue-91267.rs
Normal 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]
|
||||||
|
}
|
27
src/test/ui/typeck/issue-91267.stderr
Normal file
27
src/test/ui/typeck/issue-91267.stderr
Normal 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`.
|
Loading…
Add table
Add a link
Reference in a new issue