From 07e3afedf5d382e6c8d51ed90d03b61a8fe360fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Esteban=20K=C3=BCber?= Date: Sun, 1 Nov 2020 15:08:45 -0800 Subject: [PATCH] Do not ICE on invalid const param in an invalid path Fix #78622. --- compiler/rustc_typeck/src/collect/type_of.rs | 8 +++++++- src/test/ui/issues/issue-78622.rs | 5 +++++ src/test/ui/issues/issue-78622.stderr | 9 +++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 src/test/ui/issues/issue-78622.rs create mode 100644 src/test/ui/issues/issue-78622.stderr diff --git a/compiler/rustc_typeck/src/collect/type_of.rs b/compiler/rustc_typeck/src/collect/type_of.rs index a754d4dbac713..98a74cd6c1f43 100644 --- a/compiler/rustc_typeck/src/collect/type_of.rs +++ b/compiler/rustc_typeck/src/collect/type_of.rs @@ -79,7 +79,13 @@ pub(super) fn opt_const_param_of(tcx: TyCtxt<'_>, def_id: LocalDefId) -> Option< let _tables = tcx.typeck(body_owner); &*path } - _ => span_bug!(DUMMY_SP, "unexpected const parent path {:?}", parent_node), + _ => { + tcx.sess.delay_span_bug( + DUMMY_SP, + &format!("unexpected const parent path {:?}", parent_node), + ); + return None; + } }; // We've encountered an `AnonConst` in some path, so we need to diff --git a/src/test/ui/issues/issue-78622.rs b/src/test/ui/issues/issue-78622.rs new file mode 100644 index 0000000000000..7a89faf3c1946 --- /dev/null +++ b/src/test/ui/issues/issue-78622.rs @@ -0,0 +1,5 @@ +struct S; +fn f() { + S::A:: {} //~ ERROR ambiguous associated type +} +fn main() {} diff --git a/src/test/ui/issues/issue-78622.stderr b/src/test/ui/issues/issue-78622.stderr new file mode 100644 index 0000000000000..b86c3a70eb09b --- /dev/null +++ b/src/test/ui/issues/issue-78622.stderr @@ -0,0 +1,9 @@ +error[E0223]: ambiguous associated type + --> $DIR/issue-78622.rs:3:5 + | +LL | S::A:: {} + | ^^^^^^^^^ help: use fully-qualified syntax: `::A` + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0223`.