<html><head><meta http-equiv="Content-Type" content="text/html charset=windows-1252"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">Hi Benjamin<div><br></div><div>This seems to have broken the buildbot. Could you please take a look.</div><div><br></div><div><a href="http://lab.llvm.org:8013/builders/clang-x86_64-darwin11-DA/builds/2084">http://lab.llvm.org:8013/builders/clang-x86_64-darwin11-DA/builds/2084</a></div><div><br></div><div>Note that you aren’t listed on that build in the commit list, but you are the only commit on the trigger build:</div><div><br></div><div><a href="http://lab.llvm.org:8013/builders/phase2%20-%20living/builds/2845">http://lab.llvm.org:8013/builders/phase2%20-%20living/builds/2845</a></div><div><br></div><div>Thanks,</div><div>Pete</div><div><div><div>On May 11, 2013, at 5:45 AM, Benjamin Kramer <<a href="mailto:benny.kra@googlemail.com">benny.kra@googlemail.com</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div style="letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;">Author: d0k<br>Date: Sat May 11 07:45:37 2013<br>New Revision: 181662<br><br>URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project?rev=181662&view=rev">http://llvm.org/viewvc/llvm-project?rev=181662&view=rev</a><br>Log:<br>CodeGen: Refactor SetLLVMFunctionAttributesForDefinition to use an AttrBuilder.<br><br>Adding attributes to a uniqued set has become expensive, don't do it more often<br>than necessary. No functionality change.<br><br>Modified:<br> cfe/trunk/lib/CodeGen/CodeGenModule.cpp<br><br>Modified: cfe/trunk/lib/CodeGen/CodeGenModule.cpp<br>URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.cpp?rev=181662&r1=181661&r2=181662&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.cpp?rev=181662&r1=181661&r2=181662&view=diff</a><br>==============================================================================<br>--- cfe/trunk/lib/CodeGen/CodeGenModule.cpp (original)<br>+++ cfe/trunk/lib/CodeGen/CodeGenModule.cpp Sat May 11 07:45:37 2013<br>@@ -598,61 +598,65 @@ static bool hasUnwindExceptions(const La<br><br>void CodeGenModule::SetLLVMFunctionAttributesForDefinition(const Decl *D,<br> llvm::Function *F) {<br>+ llvm::AttrBuilder B;<br>+<br> if (CodeGenOpts.UnwindTables)<br>- F->setHasUWTable();<br>+ B.addAttribute(llvm::Attribute::UWTable);<br><br> if (!hasUnwindExceptions(LangOpts))<br>- F->addFnAttr(llvm::Attribute::NoUnwind);<br>+ B.addAttribute(llvm::Attribute::NoUnwind);<br><br> if (D->hasAttr<NakedAttr>()) {<br> // Naked implies noinline: we should not be inlining such functions.<br>- F->addFnAttr(llvm::Attribute::Naked);<br>- F->addFnAttr(llvm::Attribute::NoInline);<br>+ B.addAttribute(llvm::Attribute::Naked);<br>+ B.addAttribute(llvm::Attribute::NoInline);<br>+ } else if (D->hasAttr<NoInlineAttr>()) {<br>+ B.addAttribute(llvm::Attribute::NoInline);<br>+ } else if ((D->hasAttr<AlwaysInlineAttr>() ||<br>+ D->hasAttr<ForceInlineAttr>()) &&<br>+ !F->getAttributes().hasAttribute(llvm::AttributeSet::FunctionIndex,<br>+ llvm::Attribute::NoInline)) {<br>+ // (noinline wins over always_inline, and we can't specify both in IR)<br>+ B.addAttribute(llvm::Attribute::AlwaysInline);<br> }<br><br>- if (D->hasAttr<NoInlineAttr>())<br>- F->addFnAttr(llvm::Attribute::NoInline);<br>-<br>- // (noinline wins over always_inline, and we can't specify both in IR)<br>- if ((D->hasAttr<AlwaysInlineAttr>() || D->hasAttr<ForceInlineAttr>()) &&<br>- !F->getAttributes().hasAttribute(llvm::AttributeSet::FunctionIndex,<br>- llvm::Attribute::NoInline))<br>- F->addFnAttr(llvm::Attribute::AlwaysInline);<br>-<br> // FIXME: Communicate hot and cold attributes to LLVM more directly.<br> if (D->hasAttr<ColdAttr>())<br>- F->addFnAttr(llvm::Attribute::OptimizeForSize);<br>+ B.addAttribute(llvm::Attribute::OptimizeForSize);<br><br> if (D->hasAttr<MinSizeAttr>())<br>- F->addFnAttr(llvm::Attribute::MinSize);<br>-<br>- if (isa<CXXConstructorDecl>(D) || isa<CXXDestructorDecl>(D))<br>- F->setUnnamedAddr(true);<br>-<br>- if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(D))<br>- if (MD->isVirtual())<br>- F->setUnnamedAddr(true);<br>+ B.addAttribute(llvm::Attribute::MinSize);<br><br> if (LangOpts.getStackProtector() == LangOptions::SSPOn)<br>- F->addFnAttr(llvm::Attribute::StackProtect);<br>+ B.addAttribute(llvm::Attribute::StackProtect);<br> else if (LangOpts.getStackProtector() == LangOptions::SSPReq)<br>- F->addFnAttr(llvm::Attribute::StackProtectReq);<br>+ B.addAttribute(llvm::Attribute::StackProtectReq);<br><br> // Add sanitizer attributes if function is not blacklisted.<br> if (!SanitizerBlacklist.isIn(*F)) {<br> // When AddressSanitizer is enabled, set SanitizeAddress attribute<br> // unless __attribute__((no_sanitize_address)) is used.<br> if (SanOpts.Address && !D->hasAttr<NoSanitizeAddressAttr>())<br>- F->addFnAttr(llvm::Attribute::SanitizeAddress);<br>+ B.addAttribute(llvm::Attribute::SanitizeAddress);<br> // Same for ThreadSanitizer and __attribute__((no_sanitize_thread))<br> if (SanOpts.Thread && !D->hasAttr<NoSanitizeThreadAttr>()) {<br>- F->addFnAttr(llvm::Attribute::SanitizeThread);<br>+ B.addAttribute(llvm::Attribute::SanitizeThread);<br> }<br> // Same for MemorySanitizer and __attribute__((no_sanitize_memory))<br> if (SanOpts.Memory && !D->hasAttr<NoSanitizeMemoryAttr>())<br>- F->addFnAttr(llvm::Attribute::SanitizeMemory);<br>+ B.addAttribute(llvm::Attribute::SanitizeMemory);<br> }<br><br>+ F->addAttributes(llvm::AttributeSet::FunctionIndex,<br>+ llvm::AttributeSet::get(<br>+ F->getContext(), llvm::AttributeSet::FunctionIndex, B));<br>+<br>+ if (isa<CXXConstructorDecl>(D) || isa<CXXDestructorDecl>(D))<br>+ F->setUnnamedAddr(true);<br>+ else if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(D))<br>+ if (MD->isVirtual())<br>+ F->setUnnamedAddr(true);<br>+<br> unsigned alignment = D->getMaxAlignment() / Context.getCharWidth();<br> if (alignment)<br> F->setAlignment(alignment);<br><br><br>_______________________________________________<br>cfe-commits mailing list<br><a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br><a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a></div></blockquote></div><br></div></body></html>