diff options
-rw-r--r-- | lib/Sema/SemaDeclAttr.cpp | 17 | ||||
-rw-r--r-- | lib/Sema/SemaType.cpp | 5 |
2 files changed, 6 insertions, 16 deletions
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<ValueDecl>(D)) { - QualType DT = VD->getType(); - ProcessTypeAttributes(DT, Attrs); - VD->setType(DT); - } else if (TypedefDecl *TD = dyn_cast<TypedefDecl>(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; } |