about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2024-03-10 01:23:54 +0000
committerbors <bors@rust-lang.org>2024-03-10 01:23:54 +0000
commitef862a707b696a4a57f6126ebad7b0cc42af98f0 (patch)
tree98980d63860e4c74a737f5b5bffc30b18bf15672
parent5ec45d3d7a42234a03a1dc681e794ecb6f276725 (diff)
parent127c232050df04a4ae06fc536a428c34e248c5d9 (diff)
Auto merge of #121662 - saethlin:precondition-unification, r=RalfJung
Distinguish between library and lang UB in assert_unsafe_precondition

As described in https://github.com/rust-lang/rust/pull/121583#issuecomment-1963168186, `assert_unsafe_precondition` now explicitly distinguishes between language UB (conditions we explicitly optimize on) and library UB (things we document you shouldn't do, and maybe some library internals assume you don't do).

`debug_assert_nounwind` was originally added to avoid the "only at runtime" aspect of `assert_unsafe_precondition`. Since then the difference between the macros has gotten muddied. This totally revamps the situation.

Now _all_ preconditions shall be checked with `assert_unsafe_precondition`. If you have a precondition that's only checkable at runtime, do a `const_eval_select` hack, as done in this PR.

r? RalfJung
-rw-r--r--src/base.rs2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/base.rs b/src/base.rs
index 1ce920f3bdb..2415c2c90b2 100644
--- a/src/base.rs
+++ b/src/base.rs
@@ -779,7 +779,7 @@ fn codegen_stmt<'tcx>(
                         NullOp::OffsetOf(fields) => {
                             layout.offset_of_subfield(fx, fields.iter()).bytes()
                         }
-                        NullOp::DebugAssertions => {
+                        NullOp::UbCheck(_) => {
                             let val = fx.tcx.sess.opts.debug_assertions;
                             let val = CValue::by_val(
                                 fx.bcx.ins().iconst(types::I8, i64::try_from(val).unwrap()),