diff --git a/llvm/lib/Transforms/IPO/Attributor.cpp b/llvm/lib/Transforms/IPO/Attributor.cpp --- a/llvm/lib/Transforms/IPO/Attributor.cpp +++ b/llvm/lib/Transforms/IPO/Attributor.cpp @@ -1146,6 +1146,9 @@ if (!AssociatedFunction) return false; + if (AssociatedFunction->isDeclaration()) + return false; + // TODO: use the function scope once we have call site AAReturnedValues. const IRPosition &QueryIRP = IRPosition::function(*AssociatedFunction); const auto *LivenessAA = diff --git a/llvm/unittests/Transforms/IPO/AttributorTest.cpp b/llvm/unittests/Transforms/IPO/AttributorTest.cpp --- a/llvm/unittests/Transforms/IPO/AttributorTest.cpp +++ b/llvm/unittests/Transforms/IPO/AttributorTest.cpp @@ -75,8 +75,16 @@ TEST_F(AttributorTestBase, AAReachabilityTest) { const char *ModuleString = R"( - declare void @func4() - declare void @func3() + @x = global i32 0 + define void @func4() { + store i32 0, i32* @x + ret void + } + + define void @func3() { + store i32 0, i32* @x + ret void + } define void @func2() { entry: