From 81e1247e8b4e11bf92dcfb04890d67938f4b82a5 Mon Sep 17 00:00:00 2001 From: DianQK Date: Sat, 12 Aug 2023 00:24:25 +0800 Subject: [PATCH 1/2] [beta-1.72] Pre-commit test for issue 114312. We show this miscompilation in this commit. --- tests/codegen/issues/issue-114312.rs | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 tests/codegen/issues/issue-114312.rs diff --git a/tests/codegen/issues/issue-114312.rs b/tests/codegen/issues/issue-114312.rs new file mode 100644 index 0000000000000..65ab74005e304 --- /dev/null +++ b/tests/codegen/issues/issue-114312.rs @@ -0,0 +1,27 @@ +// compile-flags: -O +// min-system-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-SAME: readonly + // CHECK-SAME: byval + // CHECK: bb1: + // CHECK-NEXT: br label %bb1 + match expr { + Expr::Sum => {} + Expr::Sub(_, _) => issue_114312(Expr::Sum), + } +} From e241551f8b04119888c95343faaef2889de35cea Mon Sep 17 00:00:00 2001 From: DianQK Date: Sat, 12 Aug 2023 00:24:43 +0800 Subject: [PATCH 2/2] [beta-1.72] Update LLVM to resolve a miscompilation found in 114312. --- src/llvm-project | 2 +- tests/codegen/issues/issue-114312.rs | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/llvm-project b/src/llvm-project index 06248fa7f3513..c9bca8a6cbed6 160000 --- a/src/llvm-project +++ b/src/llvm-project @@ -1 +1 @@ -Subproject commit 06248fa7f35136f66114b2f82c29abcefd5f1e9b +Subproject commit c9bca8a6cbed64d421b9afb9065769ed64fafcc6 diff --git a/tests/codegen/issues/issue-114312.rs b/tests/codegen/issues/issue-114312.rs index 65ab74005e304..28b029a8bbd86 100644 --- a/tests/codegen/issues/issue-114312.rs +++ b/tests/codegen/issues/issue-114312.rs @@ -16,10 +16,10 @@ pub enum Expr { #[no_mangle] pub extern "C" fn issue_114312(expr: Expr) { // CHECK-LABEL: @issue_114312( - // CHECK-SAME: readonly + // CHECK-NOT: readonly // CHECK-SAME: byval - // CHECK: bb1: - // CHECK-NEXT: br label %bb1 + // CHECK-NEXT: start: + // CHECK-NEXT: ret void match expr { Expr::Sum => {} Expr::Sub(_, _) => issue_114312(Expr::Sum),