gce: don't ICE on non-local const
diff --git a/compiler/rustc_hir_analysis/src/collect/predicates_of.rs b/compiler/rustc_hir_analysis/src/collect/predicates_of.rs
index c337765..7101d36 100644
--- a/compiler/rustc_hir_analysis/src/collect/predicates_of.rs
+++ b/compiler/rustc_hir_analysis/src/collect/predicates_of.rs
@@ -421,7 +421,9 @@ fn is_const_param_default(tcx: TyCtxt<'_>, def: LocalDefId) -> bool {
impl<'tcx> TypeVisitor<TyCtxt<'tcx>> for ConstCollector<'tcx> {
fn visit_const(&mut self, c: ty::Const<'tcx>) {
if let ty::ConstKind::Unevaluated(uv) = c.kind() {
- if is_const_param_default(self.tcx, uv.def.expect_local()) {
+ if let Some(local) = uv.def.as_local()
+ && is_const_param_default(self.tcx, local)
+ {
// Do not look into const param defaults,
// these get checked when they are actually instantiated.
//
diff --git a/tests/crashes/133808.rs b/tests/crashes/133808.rs
deleted file mode 100644
index 9c6a23d..0000000
--- a/tests/crashes/133808.rs
+++ /dev/null
@@ -1,15 +0,0 @@
-//@ known-bug: #133808
-
-#![feature(generic_const_exprs, transmutability)]
-
-mod assert {
- use std::mem::TransmuteFrom;
-
- pub fn is_transmutable<Src, Dst>()
- where
- Dst: TransmuteFrom<Src>,
- {
- }
-}
-
-pub fn main() {}
diff --git a/tests/ui/const-generics/generic_const_exprs/non-local-const.rs b/tests/ui/const-generics/generic_const_exprs/non-local-const.rs
new file mode 100644
index 0000000..0a30cc3
--- /dev/null
+++ b/tests/ui/const-generics/generic_const_exprs/non-local-const.rs
@@ -0,0 +1,10 @@
+// regression test for #133808.
+
+#![feature(generic_const_exprs)]
+#![feature(min_generic_const_args)]
+#![allow(incomplete_features)]
+#![crate_type = "lib"]
+
+pub trait Foo {}
+impl Foo for [u8; std::path::MAIN_SEPARATOR] {}
+//~^ ERROR the constant `MAIN_SEPARATOR` is not of type `usize`
diff --git a/tests/ui/const-generics/generic_const_exprs/non-local-const.stderr b/tests/ui/const-generics/generic_const_exprs/non-local-const.stderr
new file mode 100644
index 0000000..d8df326
--- /dev/null
+++ b/tests/ui/const-generics/generic_const_exprs/non-local-const.stderr
@@ -0,0 +1,10 @@
+error: the constant `MAIN_SEPARATOR` is not of type `usize`
+ --> $DIR/non-local-const.rs:9:14
+ |
+LL | impl Foo for [u8; std::path::MAIN_SEPARATOR] {}
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `usize`, found `char`
+ |
+ = note: the length of array `[u8; MAIN_SEPARATOR]` must be type `usize`
+
+error: aborting due to 1 previous error
+