diff options
| author | Eli Friedman <eli.friedman@gmail.com> | 2011-03-01 00:33:47 +0000 |
|---|---|---|
| committer | Eli Friedman <eli.friedman@gmail.com> | 2011-03-01 00:33:47 +0000 |
| commit | 683bbc16c49fc819f4c1a73571e4f6b8b4976356 (patch) | |
| tree | 4970e26a398e15dc3875439d1285711cd0eea861 | |
| parent | 0c6cb46ac107565b8db848b071071559f0d6688f (diff) | |
| download | bcm5719-llvm-683bbc16c49fc819f4c1a73571e4f6b8b4976356.tar.gz bcm5719-llvm-683bbc16c49fc819f4c1a73571e4f6b8b4976356.zip | |
Add an obvious missing safety check to DAE::RemoveDeadArgumentsFromCallers.
llvm-svn: 126720
| -rw-r--r-- | llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp | 2 | ||||
| -rw-r--r-- | llvm/test/Transforms/DeadArgElim/deadexternal.ll | 13 |
2 files changed, 14 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp b/llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp index b42322116a9..4d1f7abdc32 100644 --- a/llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp +++ b/llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp @@ -294,7 +294,7 @@ bool DAE::DeleteDeadVarargs(Function &Fn) { /// instead. bool DAE::RemoveDeadArgumentsFromCallers(Function &Fn) { - if (Fn.isDeclaration()) + if (Fn.isDeclaration() || Fn.mayBeOverridden()) return false; // Functions with local linkage should already have been handled. diff --git a/llvm/test/Transforms/DeadArgElim/deadexternal.ll b/llvm/test/Transforms/DeadArgElim/deadexternal.ll index 5a80aba6e2d..84092613130 100644 --- a/llvm/test/Transforms/DeadArgElim/deadexternal.ll +++ b/llvm/test/Transforms/DeadArgElim/deadexternal.ll @@ -37,3 +37,16 @@ entry: call void @f(i32 %tmp) ret void } + +; Check that callers are not transformed for weak definitions. +define weak i32 @weak_f(i32 %x) nounwind { +entry: + ret i32 0 +} +define void @weak_f_caller() nounwind { +entry: +; CHECK: call i32 @weak_f(i32 10) + %call = tail call i32 @weak_f(i32 10) + ret void +} + |

