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