From: Fariborz Jahanian Date: Tue, 13 Jul 2010 00:16:40 +0000 (+0000) Subject: Instantiate attributes when first building an instantiated X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8dd0c5626455cdf94280783e85e413eed6cbf3d9;p=clang Instantiate attributes when first building an instantiated VarDecl. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@108218 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/AST/DeclBase.h b/include/clang/AST/DeclBase.h index cc0124394b..2d2407ffb1 100644 --- a/include/clang/AST/DeclBase.h +++ b/include/clang/AST/DeclBase.h @@ -312,7 +312,6 @@ public: return getAttrsImpl(); // Uncommon case, out of line hash lookup. } void swapAttrs(Decl *D); - void copyAttrs(Decl *D); void invalidateAttrs(); template const T *getAttr() const { diff --git a/lib/AST/DeclBase.cpp b/lib/AST/DeclBase.cpp index ddedc65a1b..d4f997de76 100644 --- a/lib/AST/DeclBase.cpp +++ b/lib/AST/DeclBase.cpp @@ -372,18 +372,6 @@ void Decl::swapAttrs(Decl *RHS) { RHS->HasAttrs = true; } -void Decl::copyAttrs(Decl *SRC) { - if (!SRC->hasAttrs()) - return; - ASTContext &Context = getASTContext(); - for (const Attr *attr = SRC->getAttrs(); attr; attr = attr->getNext()) { - Attr *NewAttr = attr->clone(Context); - addAttr(const_cast(NewAttr)); - } - HasAttrs = true; -} - - void Decl::Destroy(ASTContext &C) { // Free attributes for this decl. if (HasAttrs) { diff --git a/lib/Sema/SemaTemplateInstantiateDecl.cpp b/lib/Sema/SemaTemplateInstantiateDecl.cpp index 3a0e43672d..2fd3528532 100644 --- a/lib/Sema/SemaTemplateInstantiateDecl.cpp +++ b/lib/Sema/SemaTemplateInstantiateDecl.cpp @@ -396,11 +396,11 @@ Decl *TemplateDeclInstantiator::VisitVarDecl(VarDecl *D) { Owner->makeDeclVisibleInContext(Var); } else { Owner->addDecl(Var); - if (Owner->isFunctionOrMethod()) SemaRef.CurrentInstantiationScope->InstantiatedLocal(D, Var); } - + InstantiateAttrs(D, Var); + // Link instantiations of static data members back to the template from // which they were instantiated. if (Var->isStaticDataMember()) @@ -2591,10 +2591,7 @@ NamedDecl *Sema::FindInstantiatedDecl(SourceLocation Loc, NamedDecl *D, ParentDC->isFunctionOrMethod()) { // D is a local of some kind. Look into the map of local // declarations to their instantiations. - NamedDecl *ND = - cast(CurrentInstantiationScope->getInstantiationOf(D)); - ND->copyAttrs(D); - return ND; + return cast(CurrentInstantiationScope->getInstantiationOf(D)); } if (CXXRecordDecl *Record = dyn_cast(D)) {