зеркало из https://github.com/microsoft/clang-1.git
Patch to build qualifier on objective-c
pointer types. Fixes radar 7626768. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@97847 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
667514d92a
Коммит
a42286486c
|
@ -621,7 +621,8 @@ public:
|
|||
/// given interface decl and the conforming protocol list.
|
||||
QualType getObjCObjectPointerType(QualType OIT,
|
||||
ObjCProtocolDecl **ProtocolList = 0,
|
||||
unsigned NumProtocols = 0);
|
||||
unsigned NumProtocols = 0,
|
||||
unsigned Quals = 0);
|
||||
|
||||
/// getTypeOfType - GCC extension.
|
||||
QualType getTypeOfExprType(Expr *e);
|
||||
|
|
|
@ -2240,14 +2240,16 @@ static void SortAndUniqueProtocols(ObjCProtocolDecl **Protocols,
|
|||
/// the given interface decl and the conforming protocol list.
|
||||
QualType ASTContext::getObjCObjectPointerType(QualType InterfaceT,
|
||||
ObjCProtocolDecl **Protocols,
|
||||
unsigned NumProtocols) {
|
||||
unsigned NumProtocols,
|
||||
unsigned Quals) {
|
||||
llvm::FoldingSetNodeID ID;
|
||||
ObjCObjectPointerType::Profile(ID, InterfaceT, Protocols, NumProtocols);
|
||||
Qualifiers Qs = Qualifiers::fromCVRMask(Quals);
|
||||
|
||||
void *InsertPos = 0;
|
||||
if (ObjCObjectPointerType *QT =
|
||||
ObjCObjectPointerTypes.FindNodeOrInsertPos(ID, InsertPos))
|
||||
return QualType(QT, 0);
|
||||
return getQualifiedType(QualType(QT, 0), Qs);
|
||||
|
||||
// Sort the protocol list alphabetically to canonicalize it.
|
||||
QualType Canonical;
|
||||
|
@ -2282,7 +2284,7 @@ QualType ASTContext::getObjCObjectPointerType(QualType InterfaceT,
|
|||
|
||||
Types.push_back(QType);
|
||||
ObjCObjectPointerTypes.InsertNode(QType, InsertPos);
|
||||
return QualType(QType, 0);
|
||||
return getQualifiedType(QualType(QType, 0), Qs);
|
||||
}
|
||||
|
||||
/// getObjCInterfaceType - Return the unique reference to the type for the
|
||||
|
|
|
@ -1034,7 +1034,8 @@ QualType Sema::GetTypeForDeclarator(Declarator &D, Scope *S,
|
|||
const ObjCInterfaceType *OIT = T->getAs<ObjCInterfaceType>();
|
||||
T = Context.getObjCObjectPointerType(T,
|
||||
(ObjCProtocolDecl **)OIT->qual_begin(),
|
||||
OIT->getNumProtocols());
|
||||
OIT->getNumProtocols(),
|
||||
DeclType.Ptr.TypeQuals);
|
||||
break;
|
||||
}
|
||||
T = BuildPointerType(T, DeclType.Ptr.TypeQuals, DeclType.Loc, Name);
|
||||
|
|
|
@ -37,3 +37,8 @@ void Gorf() // expected-error {{redefinition of 'Gorf' as different kind of symb
|
|||
|
||||
@interface A(Cat)<P> @end // expected-note {{previous definition is here}}
|
||||
@interface A(Cat)<Q> @end // expected-warning {{duplicate definition of category 'Cat' on interface 'A'}}
|
||||
|
||||
// rdar 7626768
|
||||
@class NSString;
|
||||
NSString * TestBaz; // expected-note {{previous definition is here}}
|
||||
NSString * const TestBaz; // expected-error {{redefinition of 'TestBaz' with a different type}}
|
||||
|
|
Загрузка…
Ссылка в новой задаче