diff options
author | Artur Pilipenko <apilipenko@azulsystems.com> | 2015-12-11 16:30:26 +0000 |
---|---|---|
committer | Artur Pilipenko <apilipenko@azulsystems.com> | 2015-12-11 16:30:26 +0000 |
commit | 7ae49ac619ab34710eacd3ee01cec11eb008c0f1 (patch) | |
tree | 834eed8a4f2758184d74e008bee8f54cfbd6fd3c | |
parent | e43482b626b5f8e8fe85aad0c91fd8e637f67cd4 (diff) | |
download | bcm5719-llvm-7ae49ac619ab34710eacd3ee01cec11eb008c0f1.tar.gz bcm5719-llvm-7ae49ac619ab34710eacd3ee01cec11eb008c0f1.zip |
PruneEH pass incorrectly reports that a change was made
Reviewed By: reames
Differential Revision: http://reviews.llvm.org/D14097
llvm-svn: 255343
-rw-r--r-- | llvm/lib/Transforms/IPO/PruneEH.cpp | 19 |
1 files changed, 7 insertions, 12 deletions
diff --git a/llvm/lib/Transforms/IPO/PruneEH.cpp b/llvm/lib/Transforms/IPO/PruneEH.cpp index cd2411ba554..3af4afb903f 100644 --- a/llvm/lib/Transforms/IPO/PruneEH.cpp +++ b/llvm/lib/Transforms/IPO/PruneEH.cpp @@ -153,21 +153,16 @@ bool PruneEH::runOnSCC(CallGraphSCC &SCC) { // If the SCC doesn't unwind or doesn't throw, note this fact. if (!SCCMightUnwind || !SCCMightReturn) for (CallGraphSCC::iterator I = SCC.begin(), E = SCC.end(); I != E; ++I) { - AttrBuilder NewAttributes; - - if (!SCCMightUnwind) - NewAttributes.addAttribute(Attribute::NoUnwind); - if (!SCCMightReturn) - NewAttributes.addAttribute(Attribute::NoReturn); - Function *F = (*I)->getFunction(); - const AttributeSet &PAL = F->getAttributes().getFnAttributes(); - const AttributeSet &NPAL = AttributeSet::get( - F->getContext(), AttributeSet::FunctionIndex, NewAttributes); - if (PAL != NPAL) { + if (!SCCMightUnwind && !F->hasFnAttribute(Attribute::NoUnwind)) { + F->addFnAttr(Attribute::NoUnwind); + MadeChange = true; + } + + if (!SCCMightReturn && !F->hasFnAttribute(Attribute::NoReturn)) { + F->addFnAttr(Attribute::NoReturn); MadeChange = true; - F->addAttributes(AttributeSet::FunctionIndex, NPAL); } } |