summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2008-07-21 04:09:54 +0000
committerChris Lattner <sabre@nondot.org>2008-07-21 04:09:54 +0000
commitc47d930448b031b1bbd89ebe5a579e76ecdb7b2c (patch)
tree5a291fe63a8e055c36532928dca1f6d7e276517c
parent15727f69fa666d62431d26fcec4dc2c512666477 (diff)
downloadbcm5719-llvm-c47d930448b031b1bbd89ebe5a579e76ecdb7b2c.tar.gz
bcm5719-llvm-c47d930448b031b1bbd89ebe5a579e76ecdb7b2c.zip
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
-rw-r--r--clang/lib/Sema/Sema.cpp9
1 files changed, 5 insertions, 4 deletions
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<PointerType*>(type.getTypePtr());
- type = pointerType->getPointeeType();
- }
+ const PointerType *pointerType = type->getAsPointerType();
+ type = pointerType->getPointeeType();
return type->isObjCInterfaceType() || type->isObjCQualifiedIdType();
}
OpenPOWER on IntegriCloud