aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/Sema/SemaDeclAttr.cpp17
-rw-r--r--lib/Sema/SemaType.cpp5
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;
}