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
