Skip to content

Commit

Permalink
Fix AnonConst ICE
Browse files Browse the repository at this point in the history
Add test

Apply suggestions

Switch to match

Apply cargofmt
  • Loading branch information
terrarier2111 committed Dec 6, 2021
1 parent 84826fe commit a0fb992
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 4 deletions.
15 changes: 11 additions & 4 deletions compiler/rustc_typeck/src/collect/type_of.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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)))
Expand All @@ -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.
Expand Down
6 changes: 6 additions & 0 deletions src/test/ui/typeck/issue-91267.rs
Original file line number Diff line number Diff line change
@@ -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 changes: 27 additions & 0 deletions src/test/ui/typeck/issue-91267.stderr
Original file line number Diff line number Diff line change
@@ -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`.

0 comments on commit a0fb992

Please sign in to comment.