Rollup merge of #115591 - djkoloski:issue_115385, r=cuviper
Add regression test for LLVM 17-rc3 miscompile Closes #115385, see that issue for more details.
This commit is contained in:
commit
7a4904cbdb
46
tests/codegen/issues/issue-115385-llvm-jump-threading.rs
Normal file
46
tests/codegen/issues/issue-115385-llvm-jump-threading.rs
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
// compile-flags: -O -Ccodegen-units=1
|
||||||
|
|
||||||
|
#![crate_type = "lib"]
|
||||||
|
|
||||||
|
#[repr(i64)]
|
||||||
|
pub enum Boolean {
|
||||||
|
False = 0,
|
||||||
|
True = 1,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Clone for Boolean {
|
||||||
|
fn clone(&self) -> Self {
|
||||||
|
*self
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Copy for Boolean {}
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
fn set_value(foo: *mut i64);
|
||||||
|
fn bar();
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn foo(x: bool) {
|
||||||
|
let mut foo = core::mem::MaybeUninit::<i64>::uninit();
|
||||||
|
unsafe {
|
||||||
|
set_value(foo.as_mut_ptr());
|
||||||
|
}
|
||||||
|
|
||||||
|
if x {
|
||||||
|
let l1 = unsafe { *foo.as_mut_ptr().cast::<Boolean>() };
|
||||||
|
if matches!(l1, Boolean::False) {
|
||||||
|
unsafe {
|
||||||
|
*foo.as_mut_ptr() = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let l2 = unsafe { *foo.as_mut_ptr() };
|
||||||
|
if l2 == 2 {
|
||||||
|
// CHECK: call void @bar
|
||||||
|
unsafe {
|
||||||
|
bar();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user