about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--rust-version2
-rw-r--r--src/shims/intrinsics/mod.rs13
-rw-r--r--tests/pass/pointers.rs4
3 files changed, 8 insertions, 11 deletions
diff --git a/rust-version b/rust-version
index cbec52128d3..56acee2246c 100644
--- a/rust-version
+++ b/rust-version
@@ -1 +1 @@
-e7c7aa7288559f8e5ea7ce3543ff946b09783628
+5197c96c49fc3b7de3ce9a31f7cc62d2cbd1f70c
diff --git a/src/shims/intrinsics/mod.rs b/src/shims/intrinsics/mod.rs
index a930c4a9675..ac1642b0065 100644
--- a/src/shims/intrinsics/mod.rs
+++ b/src/shims/intrinsics/mod.rs
@@ -75,17 +75,14 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
 
         match intrinsic_name {
             // Miri overwriting CTFE intrinsics.
-            "ptr_guaranteed_eq" => {
+            "ptr_guaranteed_cmp" => {
                 let [left, right] = check_arg_count(args)?;
                 let left = this.read_immediate(left)?;
                 let right = this.read_immediate(right)?;
-                this.binop_ignore_overflow(mir::BinOp::Eq, &left, &right, dest)?;
-            }
-            "ptr_guaranteed_ne" => {
-                let [left, right] = check_arg_count(args)?;
-                let left = this.read_immediate(left)?;
-                let right = this.read_immediate(right)?;
-                this.binop_ignore_overflow(mir::BinOp::Ne, &left, &right, dest)?;
+                let (val, _overflowed, _ty) =
+                    this.overflowing_binary_op(mir::BinOp::Eq, &left, &right)?;
+                // We're type punning a bool as an u8 here.
+                this.write_scalar(val, dest)?;
             }
             "const_allocate" => {
                 // For now, for compatibility with the run-time implementation of this, we just return null.
diff --git a/tests/pass/pointers.rs b/tests/pass/pointers.rs
index b2e6f4556fa..d1340a04e04 100644
--- a/tests/pass/pointers.rs
+++ b/tests/pass/pointers.rs
@@ -135,8 +135,8 @@ fn main() {
     // CTFE-specific equality tests, need to also work at runtime.
     let addr = &13 as *const i32;
     let addr2 = (addr as usize).wrapping_add(usize::MAX).wrapping_add(1);
-    assert!(addr.guaranteed_eq(addr2 as *const _));
-    assert!(addr.guaranteed_ne(0x100 as *const _));
+    assert_eq!(addr.guaranteed_eq(addr2 as *const _), Some(true));
+    assert_eq!(addr.guaranteed_ne(0x100 as *const _), Some(true));
 
     wide_ptr_ops();
     metadata_vtable();