From: Chris Lattner Date: Mon, 21 Jul 2008 04:09:54 +0000 (+0000) Subject: Fix a crash that can happen when you have typedefs for pointers to X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=17af2a62f31ec9e09c4df20873a717bb5f0ad99e;p=clang 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 52858cb893..4d1a053779 100644 --- a/lib/Sema/Sema.cpp +++ b/lib/Sema/Sema.cpp @@ -35,13 +35,14 @@ bool Sema::isObjCObjectPointerType(QualType type) const { 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(type.getTypePtr()); - type = pointerType->getPointeeType(); - } + const PointerType *pointerType = type->getAsPointerType(); + type = pointerType->getPointeeType(); return type->isObjCInterfaceType() || type->isObjCQualifiedIdType(); }