Auto merge of #114847 - nikic:update-llvm-12, r=cuviper
Update LLVM submodule Merge the current release/17.x branch. Fixes #114691. Fixes #114312. The test for the latter is taken from #114726.
This commit is contained in:
commit
2bc7929138
@ -1 +1 @@
|
|||||||
Subproject commit 7c612e1732f3976fcfe29526ad796cbb6174b829
|
Subproject commit 1833c2be108aefcb5d25f6280cf9763b1feb8005
|
27
tests/codegen/issues/issue-114312.rs
Normal file
27
tests/codegen/issues/issue-114312.rs
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
// compile-flags: -O
|
||||||
|
// min-llvm-version: 17
|
||||||
|
// only-x86_64-unknown-linux-gnu
|
||||||
|
|
||||||
|
// We want to check that this function does not mis-optimize to loop jumping.
|
||||||
|
|
||||||
|
#![crate_type = "lib"]
|
||||||
|
|
||||||
|
#[repr(C)]
|
||||||
|
pub enum Expr {
|
||||||
|
Sum,
|
||||||
|
// must have more than usize data
|
||||||
|
Sub(usize, u8),
|
||||||
|
}
|
||||||
|
|
||||||
|
#[no_mangle]
|
||||||
|
pub extern "C" fn issue_114312(expr: Expr) {
|
||||||
|
// CHECK-LABEL: @issue_114312(
|
||||||
|
// CHECK-NOT: readonly
|
||||||
|
// CHECK-SAME: byval
|
||||||
|
// CHECK-NEXT: start:
|
||||||
|
// CHECK-NEXT: ret void
|
||||||
|
match expr {
|
||||||
|
Expr::Sum => {}
|
||||||
|
Expr::Sub(_, _) => issue_114312(Expr::Sum),
|
||||||
|
}
|
||||||
|
}
|
39
tests/ui/match/issue-114691.rs
Normal file
39
tests/ui/match/issue-114691.rs
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
// run-pass
|
||||||
|
|
||||||
|
// This test used to be miscompiled by LLVM 17.
|
||||||
|
#![allow(dead_code)]
|
||||||
|
|
||||||
|
enum Pass {
|
||||||
|
Opaque {
|
||||||
|
clear_color: [f32; 4],
|
||||||
|
with_depth_pre_pass: bool,
|
||||||
|
},
|
||||||
|
Transparent,
|
||||||
|
}
|
||||||
|
|
||||||
|
enum LoadOp {
|
||||||
|
Clear,
|
||||||
|
Load,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[inline(never)]
|
||||||
|
fn check(x: Option<LoadOp>) {
|
||||||
|
assert!(x.is_none());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[inline(never)]
|
||||||
|
fn test(mode: Pass) {
|
||||||
|
check(match mode {
|
||||||
|
Pass::Opaque {
|
||||||
|
with_depth_pre_pass: true,
|
||||||
|
..
|
||||||
|
}
|
||||||
|
| Pass::Transparent => None,
|
||||||
|
_ => Some(LoadOp::Clear),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
println!("Hello, world!");
|
||||||
|
test(Pass::Transparent);
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user