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 2890531..9f63c93 100644
--- a/lib/Sema/SemaDeclAttr.cpp
+++ b/lib/Sema/SemaDeclAttr.cpp
@@ -78,23 +78,8 @@
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 bf02339..8fadd80 100644
--- a/lib/Sema/SemaType.cpp
+++ b/lib/Sema/SemaType.cpp
@@ -456,6 +456,11 @@
}
}
+ // 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;
}