[PATCH] D147177: [FunctionAttrs] allow weak functions to propagate noreturn
Nick Desaulniers via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Mar 29 12:15:16 PDT 2023
nickdesaulniers created this revision.
nickdesaulniers added reviewers: aeubanks, nikic, sstefan1.
Herald added subscribers: ormris, StephenFan, hiraditya.
Herald added a project: All.
nickdesaulniers requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
I noticed that FunctionAttrs would propagate noreturn for various
functions, but stopped unexpectedly for a very simple weak definition.
While functions with weak linkage may be redefined, that should not
prevent us from propagating noreturn for this particular definition.
Link: https://github.com/ClangBuiltLinux/linux/issues/1815
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D147177
Files:
llvm/lib/Transforms/IPO/FunctionAttrs.cpp
llvm/test/Transforms/FunctionAttrs/noreturn.ll
Index: llvm/test/Transforms/FunctionAttrs/noreturn.ll
===================================================================
--- llvm/test/Transforms/FunctionAttrs/noreturn.ll
+++ llvm/test/Transforms/FunctionAttrs/noreturn.ll
@@ -87,3 +87,10 @@
declare token @llvm.coro.id.retcon.once(i32 %size, i32 %align, ptr %buffer, ptr %prototype, ptr %alloc, ptr %free)
declare i1 @llvm.coro.end(ptr, i1)
+
+; CHECK: Function Attrs: {{.*}}noreturn
+; CHECK-NEXT: @weak
+define weak void @weak() {
+ tail call void @noreturn()
+ unreachable
+}
Index: llvm/lib/Transforms/IPO/FunctionAttrs.cpp
===================================================================
--- llvm/lib/Transforms/IPO/FunctionAttrs.cpp
+++ llvm/lib/Transforms/IPO/FunctionAttrs.cpp
@@ -1637,8 +1637,7 @@
static void addNoReturnAttrs(const SCCNodeSet &SCCNodes,
SmallSet<Function *, 8> &Changed) {
for (Function *F : SCCNodes) {
- if (!F || !F->hasExactDefinition() || F->hasFnAttribute(Attribute::Naked) ||
- F->doesNotReturn())
+ if (!F || F->hasFnAttribute(Attribute::Naked) || F->doesNotReturn())
continue;
if (!canReturn(*F)) {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D147177.509438.patch
Type: text/x-patch
Size: 1157 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230329/a73bc1d2/attachment.bin>
More information about the llvm-commits
mailing list