From 36a5350e51a6dcfae424332aaa266a1e5bfb8c4f Mon Sep 17 00:00:00 2001 From: Aaron Ballman Date: Thu, 16 Jan 2014 13:03:14 +0000 Subject: Distinguish between attributes explicitly written at the request of the user, and attributes implicitly generated to assist in bookkeeping by the compiler. This is done so by table generating a CreateImplicit method for each attribute. Additionally, remove the optional nature of the spelling list index when creating attributes. This is supported by table generating a Spelling enumeration when the spellings for an attribute are distinct enough to warrant it. llvm-svn: 199378 --- clang/lib/Sema/SemaAttr.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'clang/lib/Sema/SemaAttr.cpp') diff --git a/clang/lib/Sema/SemaAttr.cpp b/clang/lib/Sema/SemaAttr.cpp index 8f9ab32517d..0214ba456c7 100644 --- a/clang/lib/Sema/SemaAttr.cpp +++ b/clang/lib/Sema/SemaAttr.cpp @@ -122,10 +122,9 @@ void Sema::AddAlignmentAttributesForRecord(RecordDecl *RD) { // Otherwise, check to see if we need a max field alignment attribute. if (unsigned Alignment = Stack->getAlignment()) { if (Alignment == PackStackEntry::kMac68kAlignmentSentinel) - RD->addAttr(::new (Context) AlignMac68kAttr(SourceLocation(), Context)); + RD->addAttr(AlignMac68kAttr::CreateImplicit(Context)); else - RD->addAttr(::new (Context) MaxFieldAlignmentAttr(SourceLocation(), - Context, + RD->addAttr(MaxFieldAlignmentAttr::CreateImplicit(Context, Alignment * 8)); } } @@ -133,7 +132,7 @@ void Sema::AddAlignmentAttributesForRecord(RecordDecl *RD) { void Sema::AddMsStructLayoutForRecord(RecordDecl *RD) { if (!MSStructPragmaOn) return; - RD->addAttr(::new (Context) MsStructAttr(SourceLocation(), Context)); + RD->addAttr(MsStructAttr::CreateImplicit(Context)); } void Sema::ActOnPragmaOptionsAlign(PragmaOptionsAlignKind Kind, @@ -312,7 +311,7 @@ void Sema::ActOnPragmaUnused(const Token &IdTok, Scope *curScope, if (VD->isUsed()) Diag(PragmaLoc, diag::warn_used_but_marked_unused) << Name; - VD->addAttr(::new (Context) UnusedAttr(IdTok.getLocation(), Context)); + VD->addAttr(UnusedAttr::CreateImplicit(Context, IdTok.getLocation())); } void Sema::AddCFAuditedAttribute(Decl *D) { @@ -324,7 +323,7 @@ void Sema::AddCFAuditedAttribute(Decl *D) { D->hasAttr()) return; - D->addAttr(::new (Context) CFAuditedTransferAttr(Loc, Context)); + D->addAttr(CFAuditedTransferAttr::CreateImplicit(Context, Loc)); } typedef std::vector > VisStack; @@ -346,7 +345,7 @@ void Sema::AddPushedVisibilityAttribute(Decl *D) { = (VisibilityAttr::VisibilityType) rawType; SourceLocation loc = Stack->back().second; - D->addAttr(::new (Context) VisibilityAttr(loc, Context, type)); + D->addAttr(VisibilityAttr::CreateImplicit(Context, type, loc)); } /// FreeVisContext - Deallocate and null out VisContext. -- cgit v1.2.3