Turns out you were right that it was spurious.  Sorry for the noise, and thanks 
for rerunning the build.

Pete
On May 11, 2013, at 11:23 AM, Benjamin Kramer <[email protected]> wrote:

> 
> On 11.05.2013, at 19:25, Pete Cooper <[email protected]> wrote:
> 
>> Hi Benjamin
>> 
>> This seems to have broken the buildbot.  Could you please take a look.
>> 
>> http://lab.llvm.org:8013/builders/clang-x86_64-darwin11-DA/builds/2084
>> 
>> Note that you aren’t listed on that build in the commit list, but you are 
>> the only commit on the trigger build:
>> 
>> http://lab.llvm.org:8013/builders/phase2%20-%20living/builds/2845
> 
> I saw the failure and it looks extremely unlikely that it was caused by my 
> commit. The test that failed doesn't even use LLVM codegen and died by being 
> killed with signal 9 (probably run out of time/memory).
> 
> There haven't been any commits today that triggered a rebuild, I expect it to 
> go back to green in the next cycle. I'll keep an eye on it.
> 
> - Ben
> 
>> 
>> Thanks,
>> Pete
>> On May 11, 2013, at 5:45 AM, Benjamin Kramer <[email protected]> 
>> wrote:
>> 
>>> Author: d0k
>>> Date: Sat May 11 07:45:37 2013
>>> New Revision: 181662
>>> 
>>> URL: http://llvm.org/viewvc/llvm-project?rev=181662&view=rev
>>> Log:
>>> CodeGen: Refactor SetLLVMFunctionAttributesForDefinition to use an 
>>> AttrBuilder.
>>> 
>>> Adding attributes to a uniqued set has become expensive, don't do it more 
>>> often
>>> than necessary. No functionality change.
>>> 
>>> Modified:
>>>   cfe/trunk/lib/CodeGen/CodeGenModule.cpp
>>> 
>>> Modified: cfe/trunk/lib/CodeGen/CodeGenModule.cpp
>>> URL: 
>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.cpp?rev=181662&r1=181661&r2=181662&view=diff
>>> ==============================================================================
>>> --- cfe/trunk/lib/CodeGen/CodeGenModule.cpp (original)
>>> +++ cfe/trunk/lib/CodeGen/CodeGenModule.cpp Sat May 11 07:45:37 2013
>>> @@ -598,61 +598,65 @@ static bool hasUnwindExceptions(const La
>>> 
>>> void CodeGenModule::SetLLVMFunctionAttributesForDefinition(const Decl *D,
>>>                                                           llvm::Function 
>>> *F) {
>>> +  llvm::AttrBuilder B;
>>> +
>>>  if (CodeGenOpts.UnwindTables)
>>> -    F->setHasUWTable();
>>> +    B.addAttribute(llvm::Attribute::UWTable);
>>> 
>>>  if (!hasUnwindExceptions(LangOpts))
>>> -    F->addFnAttr(llvm::Attribute::NoUnwind);
>>> +    B.addAttribute(llvm::Attribute::NoUnwind);
>>> 
>>>  if (D->hasAttr<NakedAttr>()) {
>>>    // Naked implies noinline: we should not be inlining such functions.
>>> -    F->addFnAttr(llvm::Attribute::Naked);
>>> -    F->addFnAttr(llvm::Attribute::NoInline);
>>> +    B.addAttribute(llvm::Attribute::Naked);
>>> +    B.addAttribute(llvm::Attribute::NoInline);
>>> +  } else if (D->hasAttr<NoInlineAttr>()) {
>>> +    B.addAttribute(llvm::Attribute::NoInline);
>>> +  } else if ((D->hasAttr<AlwaysInlineAttr>() ||
>>> +              D->hasAttr<ForceInlineAttr>()) &&
>>> +             
>>> !F->getAttributes().hasAttribute(llvm::AttributeSet::FunctionIndex,
>>> +                                              llvm::Attribute::NoInline)) {
>>> +    // (noinline wins over always_inline, and we can't specify both in IR)
>>> +    B.addAttribute(llvm::Attribute::AlwaysInline);
>>>  }
>>> 
>>> -  if (D->hasAttr<NoInlineAttr>())
>>> -    F->addFnAttr(llvm::Attribute::NoInline);
>>> -
>>> -  // (noinline wins over always_inline, and we can't specify both in IR)
>>> -  if ((D->hasAttr<AlwaysInlineAttr>() || D->hasAttr<ForceInlineAttr>()) &&
>>> -      !F->getAttributes().hasAttribute(llvm::AttributeSet::FunctionIndex,
>>> -                                       llvm::Attribute::NoInline))
>>> -    F->addFnAttr(llvm::Attribute::AlwaysInline);
>>> -
>>>  // FIXME: Communicate hot and cold attributes to LLVM more directly.
>>>  if (D->hasAttr<ColdAttr>())
>>> -    F->addFnAttr(llvm::Attribute::OptimizeForSize);
>>> +    B.addAttribute(llvm::Attribute::OptimizeForSize);
>>> 
>>>  if (D->hasAttr<MinSizeAttr>())
>>> -    F->addFnAttr(llvm::Attribute::MinSize);
>>> -
>>> -  if (isa<CXXConstructorDecl>(D) || isa<CXXDestructorDecl>(D))
>>> -    F->setUnnamedAddr(true);
>>> -
>>> -  if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(D))
>>> -    if (MD->isVirtual())
>>> -      F->setUnnamedAddr(true);
>>> +    B.addAttribute(llvm::Attribute::MinSize);
>>> 
>>>  if (LangOpts.getStackProtector() == LangOptions::SSPOn)
>>> -    F->addFnAttr(llvm::Attribute::StackProtect);
>>> +    B.addAttribute(llvm::Attribute::StackProtect);
>>>  else if (LangOpts.getStackProtector() == LangOptions::SSPReq)
>>> -    F->addFnAttr(llvm::Attribute::StackProtectReq);
>>> +    B.addAttribute(llvm::Attribute::StackProtectReq);
>>> 
>>>  // Add sanitizer attributes if function is not blacklisted.
>>>  if (!SanitizerBlacklist.isIn(*F)) {
>>>    // When AddressSanitizer is enabled, set SanitizeAddress attribute
>>>    // unless __attribute__((no_sanitize_address)) is used.
>>>    if (SanOpts.Address && !D->hasAttr<NoSanitizeAddressAttr>())
>>> -      F->addFnAttr(llvm::Attribute::SanitizeAddress);
>>> +      B.addAttribute(llvm::Attribute::SanitizeAddress);
>>>    // Same for ThreadSanitizer and __attribute__((no_sanitize_thread))
>>>    if (SanOpts.Thread && !D->hasAttr<NoSanitizeThreadAttr>()) {
>>> -      F->addFnAttr(llvm::Attribute::SanitizeThread);
>>> +      B.addAttribute(llvm::Attribute::SanitizeThread);
>>>    }
>>>    // Same for MemorySanitizer and __attribute__((no_sanitize_memory))
>>>    if (SanOpts.Memory && !D->hasAttr<NoSanitizeMemoryAttr>())
>>> -      F->addFnAttr(llvm::Attribute::SanitizeMemory);
>>> +      B.addAttribute(llvm::Attribute::SanitizeMemory);
>>>  }
>>> 
>>> +  F->addAttributes(llvm::AttributeSet::FunctionIndex,
>>> +                   llvm::AttributeSet::get(
>>> +                       F->getContext(), llvm::AttributeSet::FunctionIndex, 
>>> B));
>>> +
>>> +  if (isa<CXXConstructorDecl>(D) || isa<CXXDestructorDecl>(D))
>>> +    F->setUnnamedAddr(true);
>>> +  else if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(D))
>>> +    if (MD->isVirtual())
>>> +      F->setUnnamedAddr(true);
>>> +
>>>  unsigned alignment = D->getMaxAlignment() / Context.getCharWidth();
>>>  if (alignment)
>>>    F->setAlignment(alignment);
>>> 
>>> 
>>> _______________________________________________
>>> cfe-commits mailing list
>>> [email protected]
>>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>> 
> 


_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to