From 67f8fd75be8e62aea732f58e337824de85ec7213 Mon Sep 17 00:00:00 2001 From: PiJoules <6019989+PiJoules@users.noreply.github.com> Date: Mon, 16 Jun 2025 16:34:06 -0700 Subject: [PATCH] Revert "[llvm][StackProtector] Add noreturn to __stack_chk_fail call (#143976)" This reverts commit 99e53cb4139eda491f97cb33ee42ea424d352200. --- llvm/lib/CodeGen/StackProtector.cpp | 4 +-- .../cross-dso-cfi-stack-chk-fail.ll | 33 ------------------- .../StackProtector/stack-chk-fail-alias.ll | 21 ------------ 3 files changed, 2 insertions(+), 56 deletions(-) delete mode 100644 llvm/test/Transforms/StackProtector/cross-dso-cfi-stack-chk-fail.ll delete mode 100644 llvm/test/Transforms/StackProtector/stack-chk-fail-alias.ll diff --git a/llvm/lib/CodeGen/StackProtector.cpp b/llvm/lib/CodeGen/StackProtector.cpp index dda392d38b27a..5f866eea7d4e7 100644 --- a/llvm/lib/CodeGen/StackProtector.cpp +++ b/llvm/lib/CodeGen/StackProtector.cpp @@ -725,8 +725,8 @@ BasicBlock *CreateFailBB(Function *F, const Triple &Trip) { StackChkFail = M->getOrInsertFunction("__stack_chk_fail", Type::getVoidTy(Context)); } - CallInst *Call = B.CreateCall(StackChkFail, Args); - Call->addFnAttr(Attribute::NoReturn); + cast(StackChkFail.getCallee())->addFnAttr(Attribute::NoReturn); + B.CreateCall(StackChkFail, Args); B.CreateUnreachable(); return FailBB; } diff --git a/llvm/test/Transforms/StackProtector/cross-dso-cfi-stack-chk-fail.ll b/llvm/test/Transforms/StackProtector/cross-dso-cfi-stack-chk-fail.ll deleted file mode 100644 index af03039813a2e..0000000000000 --- a/llvm/test/Transforms/StackProtector/cross-dso-cfi-stack-chk-fail.ll +++ /dev/null @@ -1,33 +0,0 @@ -;; This is a minimal reproducer that caused StackProtector to crash with a bad cast when -;; CrossDSOCFI is used. This test just needs to not crash. -; RUN: opt -mtriple=x86_64-pc-linux-gnu %s -passes=lowertypetests,cross-dso-cfi,stack-protector - -define hidden void @__stack_chk_fail() !type !1{ - unreachable -} - -define void @store_captures() sspstrong { -entry: - %a = alloca i32, align 4 - %j = alloca ptr, align 8 - store ptr %a, ptr %j, align 8 - ret void -} - -define void @func(ptr %0) { -entry: - %1 = call i1 @llvm.type.test(ptr %0, metadata !"typeid") - br i1 %1, label %cont, label %trap - -trap: ; preds = %entry - call void @llvm.trap() - unreachable - -cont: ; preds = %entry - call void %0() - ret void -} - -!llvm.module.flags = !{!0} -!0 = !{i32 4, !"Cross-DSO CFI", i32 1} -!1 = !{i64 0, !"typeid"} diff --git a/llvm/test/Transforms/StackProtector/stack-chk-fail-alias.ll b/llvm/test/Transforms/StackProtector/stack-chk-fail-alias.ll deleted file mode 100644 index ab0a6e3f455e7..0000000000000 --- a/llvm/test/Transforms/StackProtector/stack-chk-fail-alias.ll +++ /dev/null @@ -1,21 +0,0 @@ -;; __stack_chk_fail should have the noreturn attr even if it is an alias -; RUN: opt -mtriple=x86_64-pc-linux-gnu %s -passes=stack-protector -S | FileCheck %s - -define hidden void @__stack_chk_fail_impl() { - unreachable -} - -@__stack_chk_fail = hidden alias void (), ptr @__stack_chk_fail_impl - -; CHECK-LABEL: @store_captures( -; CHECK: CallStackCheckFailBlk: -; CHECK-NEXT: call void @__stack_chk_fail() [[ATTRS:#.*]] -define void @store_captures() sspstrong { -entry: - %a = alloca i32, align 4 - %j = alloca ptr, align 8 - store ptr %a, ptr %j, align 8 - ret void -} - -; CHECK: attributes [[ATTRS]] = { noreturn }