// 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)))
.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.
--- /dev/null
+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]
+}
--- /dev/null
+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`.