summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/TreeTransform.h
diff options
context:
space:
mode:
authorJohn McCall <rjmccall@apple.com>2010-05-13 08:39:13 +0000
committerJohn McCall <rjmccall@apple.com>2010-05-13 08:39:13 +0000
commit01f21ad97cf4d7074dec4401c66bcf43a0360844 (patch)
tree54e56387bfac8ef464a62898c5f9dbeda42e4162 /clang/lib/Sema/TreeTransform.h
parent6e8417c0e5e71b1cb070f401bd593742e655ff51 (diff)
downloadbcm5719-llvm-01f21ad97cf4d7074dec4401c66bcf43a0360844.tar.gz
bcm5719-llvm-01f21ad97cf4d7074dec4401c66bcf43a0360844.zip
Rebuild builtin_id * as an ObjCObjectPointerType, where builtin_id is the
magic type that 'id' is a pointer to. llvm-svn: 103708
Diffstat (limited to 'clang/lib/Sema/TreeTransform.h')
-rw-r--r--clang/lib/Sema/TreeTransform.h18
1 files changed, 13 insertions, 5 deletions
diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h
index 4923480737e..35152617336 100644
--- a/clang/lib/Sema/TreeTransform.h
+++ b/clang/lib/Sema/TreeTransform.h
@@ -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());
OpenPOWER on IntegriCloud