diff options
Diffstat (limited to 'lib/AST')
-rw-r--r-- | lib/AST/ASTContext.cpp | 10 | ||||
-rw-r--r-- | lib/AST/Type.cpp | 22 | ||||
-rw-r--r-- | lib/AST/TypeSerialization.cpp | 1 |
3 files changed, 11 insertions, 22 deletions
diff --git a/lib/AST/ASTContext.cpp b/lib/AST/ASTContext.cpp index 702dba2431..749655d871 100644 --- a/lib/AST/ASTContext.cpp +++ b/lib/AST/ASTContext.cpp @@ -448,7 +448,6 @@ ASTContext::getTypeInfo(const Type *T) { break; } case Type::Record: - case Type::CXXRecord: case Type::Enum: { const TagType *TT = cast<TagType>(T); @@ -1231,13 +1230,7 @@ QualType ASTContext::getTypeDeclType(TypeDecl *Decl, TypeDecl* PrevDecl) { } else if (ObjCInterfaceDecl *ObjCInterface = dyn_cast<ObjCInterfaceDecl>(Decl)) return getObjCInterfaceType(ObjCInterface); - if (CXXRecordDecl *CXXRecord = dyn_cast<CXXRecordDecl>(Decl)) { - if (PrevDecl) - Decl->TypeForDecl = PrevDecl->TypeForDecl; - else - Decl->TypeForDecl = new (*this,8) CXXRecordType(CXXRecord); - } - else if (RecordDecl *Record = dyn_cast<RecordDecl>(Decl)) { + if (RecordDecl *Record = dyn_cast<RecordDecl>(Decl)) { if (PrevDecl) Decl->TypeForDecl = PrevDecl->TypeForDecl; else @@ -2841,7 +2834,6 @@ QualType ASTContext::mergeTypes(QualType LHS, QualType RHS) { case Type::FunctionNoProto: return mergeFunctionTypes(LHS, RHS); case Type::Record: - case Type::CXXRecord: case Type::Enum: // FIXME: Why are these compatible? if (isObjCIdStructType(LHS) && isObjCClassStructType(RHS)) return LHS; diff --git a/lib/AST/Type.cpp b/lib/AST/Type.cpp index 06ae9eb4e2..3b06b4ee28 100644 --- a/lib/AST/Type.cpp +++ b/lib/AST/Type.cpp @@ -119,7 +119,6 @@ bool Type::isDerivedType() const { case FunctionNoProto: case Reference: case Record: - case CXXRecord: return true; default: return false; @@ -709,10 +708,13 @@ bool Type::isScalarType() const { /// subsumes the notion of C aggregates (C99 6.2.5p21) because it also /// includes union types. bool Type::isAggregateType() const { - if (const CXXRecordType *CXXClassType = dyn_cast<CXXRecordType>(CanonicalType)) - return CXXClassType->getDecl()->isAggregate(); - if (isa<RecordType>(CanonicalType)) + if (const RecordType *Record = dyn_cast<RecordType>(CanonicalType)) { + if (CXXRecordDecl *ClassDecl = dyn_cast<CXXRecordDecl>(Record->getDecl())) + return ClassDecl->isAggregate(); + return true; + } + if (const ExtQualType *EXTQT = dyn_cast<ExtQualType>(CanonicalType)) return EXTQT->getBaseType()->isAggregateType(); return isa<ArrayType>(CanonicalType); @@ -743,7 +745,6 @@ bool Type::isIncompleteType() const { // be completed. return isVoidType(); case Record: - case CXXRecord: case Enum: // A tagged type (struct/union/enum/class) is incomplete if the decl is a // forward declaration, but not a full definition (C99 6.2.5p22). @@ -784,11 +785,12 @@ bool Type::isPODType() const { return true; case Record: + if (CXXRecordDecl *ClassDecl + = dyn_cast<CXXRecordDecl>(cast<RecordType>(CanonicalType)->getDecl())) + return ClassDecl->isPOD(); + // C struct/union is POD. return true; - - case CXXRecord: - return cast<CXXRecordType>(CanonicalType)->getDecl()->isPOD(); } } @@ -915,10 +917,6 @@ bool RecordType::classof(const TagType *TT) { return isa<RecordDecl>(TT->getDecl()); } -bool CXXRecordType::classof(const TagType *TT) { - return isa<CXXRecordDecl>(TT->getDecl()); -} - bool EnumType::classof(const TagType *TT) { return isa<EnumDecl>(TT->getDecl()); } diff --git a/lib/AST/TypeSerialization.cpp b/lib/AST/TypeSerialization.cpp index 2d052aa270..b7a8f1a366 100644 --- a/lib/AST/TypeSerialization.cpp +++ b/lib/AST/TypeSerialization.cpp @@ -112,7 +112,6 @@ void Type::Create(ASTContext& Context, unsigned i, Deserializer& D) { break; case Type::Record: - case Type::CXXRecord: case Type::Enum: // FIXME: Implement this! assert(false && "Can't deserialize tag types!"); |