Skip to content

Commit 69b02ef

Browse files
committed
fix and extend ptr_comparison test
1 parent 828bdc2 commit 69b02ef

File tree

2 files changed

+8
-68
lines changed

2 files changed

+8
-68
lines changed

tests/ui/consts/ptr_comparisons.rs

+8-28
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
// compile-flags: --crate-type=lib
2-
// normalize-stderr-32bit: "8 bytes" -> "$$TWO_WORDS bytes"
3-
// normalize-stderr-64bit: "16 bytes" -> "$$TWO_WORDS bytes"
4-
// normalize-stderr-32bit: "size 4" -> "size $$WORD"
5-
// normalize-stderr-64bit: "size 8" -> "size $$WORD"
2+
// check-pass
63

74
#![feature(
85
core_intrinsics,
@@ -34,30 +31,13 @@ check!(ne, unsafe { (FOO as *const usize as *const u8).offset(3) }, 0);
3431

3532
// We want pointers to be equal to themselves, but aren't checking this yet because
3633
// there are some open questions (e.g. whether function pointers to the same function
37-
// compare equal, they don't necessarily at runtime).
38-
// The case tested here should work eventually, but does not work yet.
34+
// compare equal: they don't necessarily do at runtime).
3935
check!(!, FOO as *const _, FOO as *const _);
4036

37+
// aside from 0, these pointers might end up pretty much anywhere.
38+
check!(!, FOO as *const _, 1); // this one could be `ne` by taking into account alignment
39+
check!(!, FOO as *const _, 1024);
4140

42-
///////////////////////////////////////////////////////////////////////////////
43-
// If any of the below start compiling, make sure to add a `check` test for it.
44-
// These invocations exist as canaries so we don't forget to check that the
45-
// behaviour of `guaranteed_eq` and `guaranteed_ne` is still correct.
46-
// All of these try to obtain an out of bounds pointer in some manner. If we
47-
// can create out of bounds pointers, we can offset a pointer far enough that
48-
// at runtime it would be zero and at compile-time it would not be zero.
49-
50-
const _: *const usize = unsafe { (FOO as *const usize).offset(2) };
51-
52-
const _: *const u8 =
53-
unsafe { std::ptr::addr_of!((*(FOO as *const usize as *const [u8; 1000]))[999]) };
54-
//~^ ERROR evaluation of constant value failed
55-
//~| out-of-bounds
56-
57-
const _: usize = unsafe { std::mem::transmute::<*const usize, usize>(FOO) + 4 };
58-
//~^ ERROR evaluation of constant value failed
59-
//~| unable to turn pointer into raw bytes
60-
61-
const _: usize = unsafe { *std::mem::transmute::<&&usize, &usize>(&FOO) + 4 };
62-
//~^ ERROR evaluation of constant value failed
63-
//~| unable to turn pointer into raw bytes
41+
// When pointers go out-of-bounds, they *might* become null, so these comparions cannot work.
42+
check!(!, unsafe { (FOO as *const usize).wrapping_add(2) }, 0);
43+
check!(!, unsafe { (FOO as *const usize).wrapping_sub(1) }, 0);

tests/ui/consts/ptr_comparisons.stderr

-40
This file was deleted.

0 commit comments

Comments
 (0)