diff options
-rw-r--r-- | include/clang/AST/Type.h | 10 | ||||
-rw-r--r-- | lib/AST/Type.cpp | 12 |
2 files changed, 12 insertions, 10 deletions
diff --git a/include/clang/AST/Type.h b/include/clang/AST/Type.h index b143e4cbe9..4b1f2c6b41 100644 --- a/include/clang/AST/Type.h +++ b/include/clang/AST/Type.h @@ -1020,7 +1020,10 @@ public: // the same address space, and return that. unsigned getAddressSpace() const { return 0; } - static bool classof(const Type *T); + static bool classof(const TagType *T); + static bool classof(const Type *T) { + return isa<TagType>(T) && classof(cast<TagType>(T)); + } static bool classof(const RecordType *) { return true; } }; @@ -1034,7 +1037,10 @@ public: return reinterpret_cast<EnumDecl*>(TagType::getDecl()); } - static bool classof(const Type *T); + static bool classof(const TagType *T); + static bool classof(const Type *T) { + return isa<TagType>(T) && classof(cast<TagType>(T)); + } static bool classof(const EnumType *) { return true; } }; diff --git a/lib/AST/Type.cpp b/lib/AST/Type.cpp index c06b1d9914..c8fb386804 100644 --- a/lib/AST/Type.cpp +++ b/lib/AST/Type.cpp @@ -739,16 +739,12 @@ QualType TypedefType::LookThroughTypedefs() const { } } -bool RecordType::classof(const Type *T) { - if (const TagType *TT = dyn_cast<TagType>(T)) - return isa<RecordDecl>(TT->getDecl()); - return false; +bool RecordType::classof(const TagType *TT) { + return isa<RecordDecl>(TT->getDecl()); } -bool EnumType::classof(const Type *T) { - if (const TagType *TT = dyn_cast<TagType>(T)) - return isa<EnumDecl>(TT->getDecl()); - return false; +bool EnumType::classof(const TagType *TT) { + return isa<EnumDecl>(TT->getDecl()); } |