зеркало из https://github.com/microsoft/clang-1.git
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
This commit is contained in:
Родитель
e5c5ee1cff
Коммит
0bf29ad534
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче