<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>