From: Chris Lattner Date: Sun, 29 Jun 2008 00:19:33 +0000 (+0000) Subject: handle type attributes when converting types, not when processing decls. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0bf29ad534c381087e89efadbf7aff0579bf259f;p=clang handle type attributes when converting types, not when processing decls. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@52877 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaDeclAttr.cpp b/lib/Sema/SemaDeclAttr.cpp index 28905314ee..9f63c936e9 100644 --- a/lib/Sema/SemaDeclAttr.cpp +++ b/lib/Sema/SemaDeclAttr.cpp @@ -78,23 +78,8 @@ void Sema::ProcessDeclAttributes(Decl *D, const Declarator &PD) { ProcessDeclAttributeList(D, Attrs); // Finally, apply any attributes on the decl itself. - if (const AttributeList *Attrs = PD.getAttributes()) { + if (const AttributeList *Attrs = PD.getAttributes()) ProcessDeclAttributeList(D, Attrs); - - // If there are any type attributes that were in the declarator, apply them to - // its top-level type. - // FIXME: we shouldn't allow type attributes here. :( - if (ValueDecl *VD = dyn_cast(D)) { - QualType DT = VD->getType(); - ProcessTypeAttributes(DT, Attrs); - VD->setType(DT); - } else if (TypedefDecl *TD = dyn_cast(D)) { - QualType DT = TD->getUnderlyingType(); - ProcessTypeAttributes(DT, Attrs); - TD->setUnderlyingType(DT); - } - // FIXME: field decl? - } } /// ProcessDeclAttributeList - Apply all the decl attributes in the specified diff --git a/lib/Sema/SemaType.cpp b/lib/Sema/SemaType.cpp index bf023394f3..8fadd80f8b 100644 --- a/lib/Sema/SemaType.cpp +++ b/lib/Sema/SemaType.cpp @@ -456,6 +456,11 @@ QualType Sema::GetTypeForDeclarator(Declarator &D, Scope *S) { } } + // If there were any type attributes applied to the decl itself (not the + // type, apply the type attribute to the type!) + if (const AttributeList *Attrs = D.getAttributes()) + ProcessTypeAttributes(T, Attrs); + return T; }