diff --git a/compiler/rustc_hir_analysis/src/hir_ty_lowering/mod.rs b/compiler/rustc_hir_analysis/src/hir_ty_lowering/mod.rs index 1578f098dd953..cc52487189270 100644 --- a/compiler/rustc_hir_analysis/src/hir_ty_lowering/mod.rs +++ b/compiler/rustc_hir_analysis/src/hir_ty_lowering/mod.rs @@ -2465,7 +2465,13 @@ impl<'tcx> dyn HirTyLowerer<'tcx> + '_ { let parent_did = tcx.parent(*def_id); (tcx.adt_def(parent_did), fn_args, parent_did) } - _ => return non_adt_or_variant_res(), + _ => { + let e = self.dcx().span_err( + span, + "complex const arguments must be placed inside of a `const` block", + ); + return Const::new_error(tcx, e); + } }; let variant_def = adt_def.variant_with_id(variant_did); diff --git a/tests/ui/const-generics/mgca/size-of-generic-ptr-in-array-len.rs b/tests/ui/const-generics/mgca/size-of-generic-ptr-in-array-len.rs index 22963b6438c0e..d06ea7a10c745 100644 --- a/tests/ui/const-generics/mgca/size-of-generic-ptr-in-array-len.rs +++ b/tests/ui/const-generics/mgca/size-of-generic-ptr-in-array-len.rs @@ -4,9 +4,10 @@ fn foo() { [0; size_of::<*mut T>()]; - //~^ ERROR: tuple constructor with invalid base path + //~^ ERROR: complex const arguments must be placed inside of a `const` block [0; const { size_of::<*mut T>() }]; //~^ ERROR: generic parameters may not be used in const operations + [0; const { size_of::<*mut i32>() }]; } fn main() {} diff --git a/tests/ui/const-generics/mgca/size-of-generic-ptr-in-array-len.stderr b/tests/ui/const-generics/mgca/size-of-generic-ptr-in-array-len.stderr index 6d8d3b4054d34..61e934380c360 100644 --- a/tests/ui/const-generics/mgca/size-of-generic-ptr-in-array-len.stderr +++ b/tests/ui/const-generics/mgca/size-of-generic-ptr-in-array-len.stderr @@ -1,4 +1,4 @@ -error: tuple constructor with invalid base path +error: complex const arguments must be placed inside of a `const` block --> $DIR/size-of-generic-ptr-in-array-len.rs:6:9 | LL | [0; size_of::<*mut T>()]; diff --git a/tests/ui/const-generics/mgca/tuple_ctor_erroneous.rs b/tests/ui/const-generics/mgca/tuple_ctor_erroneous.rs index 95ee42d93d739..43d0d21fb7361 100644 --- a/tests/ui/const-generics/mgca/tuple_ctor_erroneous.rs +++ b/tests/ui/const-generics/mgca/tuple_ctor_erroneous.rs @@ -32,7 +32,7 @@ fn test_errors() { //~| ERROR tuple constructor with invalid base path accepts_point::<{ non_ctor(N, N) }>(); - //~^ ERROR tuple constructor with invalid base path + //~^ ERROR complex const arguments must be placed inside of a `const` block accepts_point::<{ CONST_ITEM(N, N) }>(); //~^ ERROR tuple constructor with invalid base path diff --git a/tests/ui/const-generics/mgca/tuple_ctor_erroneous.stderr b/tests/ui/const-generics/mgca/tuple_ctor_erroneous.stderr index dc6a700a8e126..ce210b2b3e39a 100644 --- a/tests/ui/const-generics/mgca/tuple_ctor_erroneous.stderr +++ b/tests/ui/const-generics/mgca/tuple_ctor_erroneous.stderr @@ -27,7 +27,7 @@ error: tuple constructor with invalid base path LL | accepts_point::<{ UnresolvedIdent(N, N) }>(); | ^^^^^^^^^^^^^^^^^^^^^ -error: tuple constructor with invalid base path +error: complex const arguments must be placed inside of a `const` block --> $DIR/tuple_ctor_erroneous.rs:34:23 | LL | accepts_point::<{ non_ctor(N, N) }>();