From: Bill Wendling Date: Fri, 21 Nov 2008 00:06:32 +0000 (+0000) Subject: If the function being inlined has a higher stack protection level than the X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=commitdiff_plain;h=8c1604e7d617622cb391f1c679ddf70ea03baedc If the function being inlined has a higher stack protection level than the inlining function, then increase the stack protection level on the inlining function. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@59757 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Transforms/IPO/Inliner.cpp b/lib/Transforms/IPO/Inliner.cpp index 418b2b70cb6..bf0925c2e2f 100644 --- a/lib/Transforms/IPO/Inliner.cpp +++ b/lib/Transforms/IPO/Inliner.cpp @@ -56,6 +56,15 @@ static bool InlineCallIfPossible(CallSite CS, CallGraph &CG, Function *Callee = CS.getCalledFunction(); if (!InlineFunction(CS, &CG, &TD)) return false; + // If the inlined function had a higher stack protection level than the + // calling function, then bump up the caller's stack protection level. + Function *Caller = CS.getCaller(); + if (Callee->hasFnAttr(Attribute::StackProtectReq)) + Caller->addFnAttr(Attribute::StackProtectReq); + else if (Callee->hasFnAttr(Attribute::StackProtect) && + !Caller->hasFnAttr(Attribute::StackProtectReq)) + Caller->addFnAttr(Attribute::StackProtect); + // If we inlined the last possible call site to the function, delete the // function body now. if (Callee->use_empty() && Callee->hasInternalLinkage() &&