зеркало из https://github.com/microsoft/clang-1.git
Rebuild builtin_id * as an ObjCObjectPointerType, where builtin_id is the
magic type that 'id' is a pointer to. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@103708 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
8e98ac162a
Коммит
5d7c29a278
|
@ -2445,16 +2445,24 @@ QualType TreeTransform<Derived>::TransformPointerType(TypeLocBuilder &TLB,
|
|||
return QualType();
|
||||
|
||||
QualType Result = TL.getType();
|
||||
if (PointeeType->isObjCInterfaceType()) {
|
||||
if (PointeeType->isObjCInterfaceType() ||
|
||||
PointeeType->isSpecificBuiltinType(BuiltinType::ObjCId)) {
|
||||
// A dependent pointer type 'T *' has is being transformed such
|
||||
// that an Objective-C class type is being replaced for 'T'. The
|
||||
// resulting pointer type is an ObjCObjectPointerType, not a
|
||||
// PointerType.
|
||||
const ObjCInterfaceType *IFace = PointeeType->getAs<ObjCInterfaceType>();
|
||||
ObjCProtocolDecl **Protocols = 0;
|
||||
unsigned NumProtocols = 0;
|
||||
|
||||
if (const ObjCInterfaceType *IFace
|
||||
= PointeeType->getAs<ObjCInterfaceType>()) {
|
||||
Protocols = const_cast<ObjCProtocolDecl**>(IFace->qual_begin());
|
||||
NumProtocols = IFace->getNumProtocols();
|
||||
}
|
||||
|
||||
Result = SemaRef.Context.getObjCObjectPointerType(PointeeType,
|
||||
const_cast<ObjCProtocolDecl **>(
|
||||
IFace->qual_begin()),
|
||||
IFace->getNumProtocols());
|
||||
Protocols,
|
||||
NumProtocols);
|
||||
|
||||
ObjCObjectPointerTypeLoc NewT = TLB.push<ObjCObjectPointerTypeLoc>(Result);
|
||||
NewT.setStarLoc(TL.getSigilLoc());
|
||||
|
|
|
@ -21,4 +21,8 @@ namespace test0 {
|
|||
void test(NSString *S) {
|
||||
RetainPtr<NSString*> ptr(S);
|
||||
}
|
||||
|
||||
void test(id S) {
|
||||
RetainPtr<id> ptr(S);
|
||||
}
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче