From c47d930448b031b1bbd89ebe5a579e76ecdb7b2c Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Mon, 21 Jul 2008 04:09:54 +0000 Subject: 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. llvm-svn: 53819 --- clang/lib/Sema/Sema.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'clang/lib/Sema/Sema.cpp') diff --git a/clang/lib/Sema/Sema.cpp b/clang/lib/Sema/Sema.cpp index 52858cb893e..4d1a0537798 100644 --- a/clang/lib/Sema/Sema.cpp +++ b/clang/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(); } -- cgit v1.2.3