about summary refs log tree commit diff
diff options
context:
space:
mode:
authorCamille GILLOT <gillot.camille@gmail.com>2023-10-31 11:31:08 +0000
committerCamille GILLOT <gillot.camille@gmail.com>2023-11-01 16:49:18 +0000
commitc2f49e9edf2bae4eaede9af13f5dfb80aacb04d1 (patch)
treed039fb4f2941d8e90f7302c93509c81b7b3651e5
parent146dafa26277c873172f555017b970ef006d302a (diff)
downloadrust-c2f49e9edf2bae4eaede9af13f5dfb80aacb04d1.tar.gz
rust-c2f49e9edf2bae4eaede9af13f5dfb80aacb04d1.zip
Do not assert in op_to_const.
-rw-r--r--compiler/rustc_const_eval/src/const_eval/eval_queries.rs4
-rw-r--r--tests/ui/mir/issue-117368-print-invalid-constant.rs11
2 files changed, 13 insertions, 2 deletions
diff --git a/compiler/rustc_const_eval/src/const_eval/eval_queries.rs b/compiler/rustc_const_eval/src/const_eval/eval_queries.rs
index 669838308a5..cc8b10bd07d 100644
--- a/compiler/rustc_const_eval/src/const_eval/eval_queries.rs
+++ b/compiler/rustc_const_eval/src/const_eval/eval_queries.rs
@@ -132,8 +132,8 @@ pub(super) fn op_to_const<'tcx>(
         // functionality.)
         _ => false,
     };
-    let immediate = if force_as_immediate {
-        Right(ecx.read_immediate(op).expect("normalization works on validated constants"))
+    let immediate = if force_as_immediate && let Ok(imm) = ecx.read_immediate(op) {
+        Right(imm)
     } else {
         op.as_mplace_or_imm()
     };
diff --git a/tests/ui/mir/issue-117368-print-invalid-constant.rs b/tests/ui/mir/issue-117368-print-invalid-constant.rs
new file mode 100644
index 00000000000..d9610391941
--- /dev/null
+++ b/tests/ui/mir/issue-117368-print-invalid-constant.rs
@@ -0,0 +1,11 @@
+// build-pass
+// compile-flags:-Zmir-opt-level=4 --emit=mir
+
+#![feature(allocator_api)]
+
+use std::alloc::{Allocator, Global, Layout};
+
+fn main() {
+    let layout: Layout = None.unwrap();
+    let ptr: *mut u8 = Global.allocate(layout).unwrap().as_ptr() as _;
+}