Fix a crash that can happen when you have typedefs for pointers to
interfaces. Just because they x->isPointerType() doesn't mean it is
valid to just cast to a pointertype. We have to handle typedefs etc
as well.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53819 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/Sema.cpp b/lib/Sema/Sema.cpp
index 52858cb..4d1a053 100644
--- a/lib/Sema/Sema.cpp
+++ b/lib/Sema/Sema.cpp
@@ -35,13 +35,14 @@
if (!type->isPointerType())
return false;
+ // Check to see if this is 'id' or 'Class', both of which are typedefs for
+ // pointer types. This looks for the typedef specifically, not for the
+ // underlying type.
if (type == Context.getObjCIdType() || type == Context.getObjCClassType())
return true;
- if (type->isPointerType()) {
- PointerType *pointerType = static_cast<PointerType*>(type.getTypePtr());
- type = pointerType->getPointeeType();
- }
+ const PointerType *pointerType = type->getAsPointerType();
+ type = pointerType->getPointeeType();
return type->isObjCInterfaceType() || type->isObjCQualifiedIdType();
}