diff options
Diffstat (limited to 'llvm/lib')
| -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);        }      }  | 

