diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2023-09-11 21:16:21 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-09-11 21:16:21 +0200 |
| commit | 7a4904cbdbb30cd2c2d5fe51ecd0bb3945e4027a (patch) | |
| tree | 3fd2ab260d438e349f82cb1ec8c0dad76bc6e451 /tests/codegen | |
| parent | f3cc59b741b576d4e791e6ae4c5b4811f9935801 (diff) | |
| parent | ddd8878d697ac0006b25000137d457093917ae12 (diff) | |
| download | rust-7a4904cbdbb30cd2c2d5fe51ecd0bb3945e4027a.tar.gz rust-7a4904cbdbb30cd2c2d5fe51ecd0bb3945e4027a.zip | |
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.
Diffstat (limited to 'tests/codegen')
| -rw-r--r-- | tests/codegen/issues/issue-115385-llvm-jump-threading.rs | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/tests/codegen/issues/issue-115385-llvm-jump-threading.rs b/tests/codegen/issues/issue-115385-llvm-jump-threading.rs new file mode 100644 index 00000000000..142e3596d96 --- /dev/null +++ b/tests/codegen/issues/issue-115385-llvm-jump-threading.rs @@ -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(); + } + } +} |
