diff options
51 files changed, 401 insertions, 369 deletions
diff --git a/include/clang/AST/ExprCXX.h b/include/clang/AST/ExprCXX.h index ccfab7418a..1767866017 100644 --- a/include/clang/AST/ExprCXX.h +++ b/include/clang/AST/ExprCXX.h @@ -711,7 +711,7 @@ public: QualType getAllocatedType() const { assert(getType()->isPointerType()); - return getType()->getAs<PointerType>()->getPointeeType(); + return getType()->getAsPointerType()->getPointeeType(); } FunctionDecl *getOperatorNew() const { return OperatorNew; } diff --git a/include/clang/AST/Type.h b/include/clang/AST/Type.h index 5099c61819..b88cb841e8 100644 --- a/include/clang/AST/Type.h +++ b/include/clang/AST/Type.h @@ -431,6 +431,14 @@ public: const FunctionType *getAsFunctionType() const; const FunctionNoProtoType *getAsFunctionNoProtoType() const; const FunctionProtoType *getAsFunctionProtoType() const; + const PointerType *getAsPointerType() const; + const BlockPointerType *getAsBlockPointerType() const; + const ReferenceType *getAsReferenceType() const; + const LValueReferenceType *getAsLValueReferenceType() const; + const RValueReferenceType *getAsRValueReferenceType() const; + const MemberPointerType *getAsMemberPointerType() const; + const TagType *getAsTagType() const; + const RecordType *getAsRecordType() const; const RecordType *getAsStructureType() const; /// NOTE: getAs*ArrayType are methods on ASTContext. const TypedefType *getAsTypedefType() const; @@ -2099,7 +2107,7 @@ inline bool QualType::isAtLeastAsQualifiedAs(QualType Other) const { /// analysis, the expression designates the object or function /// denoted by the reference, and the expression is an lvalue. inline QualType QualType::getNonReferenceType() const { - if (const ReferenceType *RefType = (*this)->getAs<ReferenceType>()) + if (const ReferenceType *RefType = (*this)->getAsReferenceType()) return RefType->getPointeeType(); else return *this; @@ -2109,7 +2117,7 @@ inline const TypedefType* Type::getAsTypedefType() const { return dyn_cast<TypedefType>(this); } inline const ObjCInterfaceType *Type::getAsPointerToObjCInterfaceType() const { - if (const PointerType *PT = getAs<PointerType>()) + if (const PointerType *PT = getAsPointerType()) return PT->getPointeeType()->getAsObjCInterfaceType(); return 0; } @@ -2138,7 +2146,7 @@ inline bool Type::isRValueReferenceType() const { return isa<RValueReferenceType>(CanonicalType.getUnqualifiedType()); } inline bool Type::isFunctionPointerType() const { - if (const PointerType* T = getAs<PointerType>()) + if (const PointerType* T = getAsPointerType()) return T->getPointeeType()->isFunctionType(); else return false; @@ -2147,7 +2155,7 @@ inline bool Type::isMemberPointerType() const { return isa<MemberPointerType>(CanonicalType.getUnqualifiedType()); } inline bool Type::isMemberFunctionPointerType() const { - if (const MemberPointerType* T = getAs<MemberPointerType>()) + if (const MemberPointerType* T = getAsMemberPointerType()) return T->getPointeeType()->isFunctionType(); else return false; diff --git a/include/clang/Analysis/PathSensitive/MemRegion.h b/include/clang/Analysis/PathSensitive/MemRegion.h index 46d0113422..7f8c5c2903 100644 --- a/include/clang/Analysis/PathSensitive/MemRegion.h +++ b/include/clang/Analysis/PathSensitive/MemRegion.h @@ -357,7 +357,7 @@ public: } QualType getValueType(ASTContext&) const { - const PointerType* PTy = LValueType->getAs<PointerType>(); + const PointerType* PTy = LValueType->getAsPointerType(); assert(PTy); return PTy->getPointeeType(); } diff --git a/lib/AST/ASTContext.cpp b/lib/AST/ASTContext.cpp index f37ffddc12..b43aadb62e 100644 --- a/lib/AST/ASTContext.cpp +++ b/lib/AST/ASTContext.cpp @@ -447,7 +447,7 @@ unsigned ASTContext::getDeclAlignInBytes(const Decl *D) { if (const ValueDecl *VD = dyn_cast<ValueDecl>(D)) { QualType T = VD->getType(); - if (const ReferenceType* RT = T->getAs<ReferenceType>()) { + if (const ReferenceType* RT = T->getAsReferenceType()) { unsigned AS = RT->getPointeeType().getAddressSpace(); Align = Target.getPointerAlign(AS); } else if (!T->isIncompleteType() && !T->isFunctionType()) { @@ -779,7 +779,7 @@ void ASTRecordLayout::LayoutField(const FieldDecl *FD, unsigned FieldNo, FieldSize = 0; const ArrayType* ATy = Context.getAsArrayType(FD->getType()); FieldAlign = Context.getTypeAlign(ATy->getElementType()); - } else if (const ReferenceType *RT = FD->getType()->getAs<ReferenceType>()) { + } else if (const ReferenceType *RT = FD->getType()->getAsReferenceType()) { unsigned AS = RT->getPointeeType().getAddressSpace(); FieldSize = Context.Target.getPointerWidth(AS); FieldAlign = Context.Target.getPointerAlign(AS); @@ -1092,7 +1092,7 @@ QualType ASTContext::getObjCGCQualType(QualType T, return T; if (T->isPointerType()) { - QualType Pointee = T->getAs<PointerType>()->getPointeeType(); + QualType Pointee = T->getAsPointerType()->getPointeeType(); if (Pointee->isAnyPointerType()) { QualType ResultType = getObjCGCQualType(Pointee, GCAttr); return getPointerType(ResultType); @@ -2462,7 +2462,7 @@ QualType ASTContext::getCFConstantStringType() { } void ASTContext::setCFConstantStringType(QualType T) { - const RecordType *Rec = T->getAs<RecordType>(); + const RecordType *Rec = T->getAsRecordType(); assert(Rec && "Invalid CFConstantStringType"); CFConstantStringTypeDecl = Rec->getDecl(); } @@ -2498,7 +2498,7 @@ QualType ASTContext::getObjCFastEnumerationStateType() } void ASTContext::setObjCFastEnumerationStateType(QualType T) { - const RecordType *Rec = T->getAs<RecordType>(); + const RecordType *Rec = T->getAsRecordType(); assert(Rec && "Invalid ObjCFAstEnumerationStateType"); ObjCFastEnumerationStateTypeDecl = Rec->getDecl(); } @@ -2779,7 +2779,7 @@ void ASTContext::getObjCEncodingForTypeImpl(QualType T, std::string& S, return; } - if (const PointerType *PT = T->getAs<PointerType>()) { + if (const PointerType *PT = T->getAsPointerType()) { QualType PointeeTy = PT->getPointeeType(); bool isReadOnly = false; // For historical/compatibility reasons, the read-only qualifier of the @@ -2794,8 +2794,8 @@ void ASTContext::getObjCEncodingForTypeImpl(QualType T, std::string& S, } else if (OutermostType) { QualType P = PointeeTy; - while (P->getAs<PointerType>()) - P = P->getAs<PointerType>()->getPointeeType(); + while (P->getAsPointerType()) + P = P->getAsPointerType()->getPointeeType(); if (P.isConstQualified()) { isReadOnly = true; S += 'r'; @@ -2866,7 +2866,7 @@ void ASTContext::getObjCEncodingForTypeImpl(QualType T, std::string& S, return; } - if (const RecordType *RTy = T->getAs<RecordType>()) { + if (const RecordType *RTy = T->getAsRecordType()) { RecordDecl *RDecl = RTy->getDecl(); S += RDecl->isUnion() ? '(' : '{'; // Anonymous structures print as '?' @@ -3035,7 +3035,7 @@ void ASTContext::setObjCSelType(QualType T) { TypedefDecl *TD = TT->getDecl(); // typedef struct objc_selector *SEL; - const PointerType *ptr = TD->getUnderlyingType()->getAs<PointerType>(); + const PointerType *ptr = TD->getUnderlyingType()->getAsPointerType(); if (!ptr) return; const RecordType *rec = ptr->getPointeeType()->getAsStructureType(); @@ -3159,7 +3159,7 @@ QualType::GCAttrTypes ASTContext::getObjCGCAttrKind(const QualType &Ty) const { if (Ty->isObjCObjectPointerType()) GCAttrs = QualType::Strong; else if (Ty->isPointerType()) - return getObjCGCAttrKind(Ty->getAs<PointerType>()->getPointeeType()); + return getObjCGCAttrKind(Ty->getAsPointerType()->getPointeeType()); } // Non-pointers have none gc'able attribute regardless of the attribute // set on them. @@ -3382,9 +3382,9 @@ QualType ASTContext::mergeTypes(QualType LHS, QualType RHS) { // enough that they should be handled separately. // FIXME: Merging of lvalue and rvalue references is incorrect. C++ *really* // shouldn't be going through here! - if (const ReferenceType *RT = LHS->getAs<ReferenceType>()) + if (const ReferenceType *RT = LHS->getAsReferenceType()) LHS = RT->getPointeeType(); - if (const ReferenceType *RT = RHS->getAs<ReferenceType>()) + if (const ReferenceType *RT = RHS->getAsReferenceType()) RHS = RT->getPointeeType(); QualType LHSCan = getCanonicalType(LHS), @@ -3519,8 +3519,8 @@ QualType ASTContext::mergeTypes(QualType LHS, QualType RHS) { case Type::Pointer: { // Merge two pointer types, while trying to preserve typedef info - QualType LHSPointee = LHS->getAs<PointerType>()->getPointeeType(); - QualType RHSPointee = RHS->getAs<PointerType>()->getPointeeType(); + QualType LHSPointee = LHS->getAsPointerType()->getPointeeType(); + QualType RHSPointee = RHS->getAsPointerType()->getPointeeType(); QualType ResultType = mergeTypes(LHSPointee, RHSPointee); if (ResultType.isNull()) return QualType(); if (getCanonicalType(LHSPointee) == getCanonicalType(ResultType)) @@ -3532,8 +3532,8 @@ QualType ASTContext::mergeTypes(QualType LHS, QualType RHS) { case Type::BlockPointer: { // Merge two block pointer types, while trying to preserve typedef info - QualType LHSPointee = LHS->getAs<BlockPointerType>()->getPointeeType(); - QualType RHSPointee = RHS->getAs<BlockPointerType>()->getPointeeType(); + QualType LHSPointee = LHS->getAsBlockPointerType()->getPointeeType(); + QualType RHSPointee = RHS->getAsBlockPointerType()->getPointeeType(); QualType ResultType = mergeTypes(LHSPointee, RHSPointee); if (ResultType.isNull()) return QualType(); if (getCanonicalType(LHSPointee) == getCanonicalType(ResultType)) diff --git a/lib/AST/Decl.cpp b/lib/AST/Decl.cpp index a9f258146e..728724f1b3 100644 --- a/lib/AST/Decl.cpp +++ b/lib/AST/Decl.cpp @@ -157,7 +157,7 @@ bool FieldDecl::isAnonymousStructOrUnion() const { if (!isImplicit() || getDeclName()) return false; - if (const RecordType *Record = getType()->getAs<RecordType>()) + if (const RecordType *Record = getType()->getAsRecordType()) return Record->getDecl()->isAnonymousStructOrUnion(); return false; @@ -704,24 +704,24 @@ SourceRange TagDecl::getSourceRange() const { } void TagDecl::startDefinition() { - TagType *TagT = const_cast<TagType *>(TypeForDecl->getAs<TagType>()); + TagType *TagT = const_cast<TagType *>(TypeForDecl->getAsTagType()); TagT->decl.setPointer(this); - TagT->getAs<TagType>()->decl.setInt(1); + TagT->getAsTagType()->decl.setInt(1); } void TagDecl::completeDefinition() { assert((!TypeForDecl || - TypeForDecl->getAs<TagType>()->decl.getPointer() == this) && + TypeForDecl->getAsTagType()->decl.getPointer() == this) && "Attempt to redefine a tag definition?"); IsDefinition = true; - TagType *TagT = const_cast<TagType *>(TypeForDecl->getAs<TagType>()); + TagType *TagT = const_cast<TagType *>(TypeForDecl->getAsTagType()); TagT->decl.setPointer(this); TagT->decl.setInt(0); } TagDecl* TagDecl::getDefinition(ASTContext& C) const { QualType T = C.getTypeDeclType(const_cast<TagDecl*>(this)); - TagDecl* D = cast<TagDecl>(T->getAs<TagType>()->getDecl()); + TagDecl* D = cast<TagDecl>(T->getAsTagType()->getDecl()); return D->isDefinition() ? D : 0; } diff --git a/lib/AST/DeclBase.cpp b/lib/AST/DeclBase.cpp index 2d276614f2..96ba19b9a6 100644 --- a/lib/AST/DeclBase.cpp +++ b/lib/AST/DeclBase.cpp @@ -473,7 +473,7 @@ DeclContext *DeclContext::getPrimaryContext() { if (DeclKind >= Decl::TagFirst && DeclKind <= Decl::TagLast) { // If this is a tag type that has a definition or is currently // being defined, that definition is our primary context. - if (const TagType *TagT =cast<TagDecl>(this)->TypeForDecl->getAs<TagType>()) + if (const TagType *TagT =cast<TagDecl>(this)->TypeForDecl->getAsTagType()) if (TagT->isBeingDefined() || (TagT->getDecl() && TagT->getDecl()->isDefinition())) return TagT->getDecl(); diff --git a/lib/AST/DeclCXX.cpp b/lib/AST/DeclCXX.cpp index f420da14e4..57ac611b2c 100644 --- a/lib/AST/DeclCXX.cpp +++ b/lib/AST/DeclCXX.cpp @@ -81,7 +81,7 @@ CXXRecordDecl::setBases(ASTContext &C, if (BaseType->isDependentType()) continue; CXXRecordDecl *BaseClassDecl - = cast<CXXRecordDecl>(BaseType->getAs<RecordType>()->getDecl()); + = cast<CXXRecordDecl>(BaseType->getAsRecordType()->getDecl()); if (Base->isVirtual()) hasDirectVirtualBase = true; for (CXXRecordDecl::base_class_iterator VBase = @@ -125,7 +125,7 @@ CXXRecordDecl::setBases(ASTContext &C, for (int i = 0; i < vbaseCount; i++) { QualType QT = UniqueVbases[i]->getType(); CXXRecordDecl *VBaseClassDecl - = cast<CXXRecordDecl>(QT->getAs<RecordType>()->getDecl()); + = cast<CXXRecordDecl>(QT->getAsRecordType()->getDecl()); this->VBases[i] = *new CXXBaseSpecifier( VBaseClassDecl->getSourceRange(), true, @@ -185,7 +185,7 @@ bool CXXRecordDecl::hasConstCopyAssignment(ASTContext &Context) const { continue; bool AcceptsConst = true; QualType ArgType = FnType->getArgType(0); - if (const LValueReferenceType *Ref = ArgType->getAs<LValueReferenceType>()) { + if (const LValueReferenceType *Ref = ArgType->getAsLValueReferenceType()) { ArgType = Ref->getPointeeType(); // Is it a non-const lvalue reference? if (!ArgType.isConstQualified()) @@ -237,7 +237,7 @@ void CXXRecordDecl::addedAssignmentOperator(ASTContext &Context, assert(FnType && "Overloaded operator has no proto function type."); assert(FnType->getNumArgs() == 1 && !FnType->isVariadic()); QualType ArgType = FnType->getArgType(0); - if (const LValueReferenceType *Ref = ArgType->getAs<LValueReferenceType>()) + if (const LValueReferenceType *Ref = ArgType->getAsLValueReferenceType()) ArgType = Ref->getPointeeType(); ArgType = ArgType.getUnqualifiedType(); @@ -433,7 +433,7 @@ CXXConstructorDecl::isCopyConstructor(ASTContext &Context, // Do we have a reference type? Rvalue references don't count. const LValueReferenceType *ParamRefType = - Param->getType()->getAs<LValueReferenceType>(); + Param->getType()->getAsLValueReferenceType(); if (!ParamRefType) return false; @@ -503,7 +503,7 @@ CXXDestructorDecl::setBaseOrMemberDestructions(ASTContext &C) { while (const ArrayType *AT = C.getAsArrayType(FieldType)) FieldType = AT->getElementType(); - if (FieldType->getAs<RecordType>()) { + if (FieldType->getAsRecordType()) { CXXBaseOrMemberInitializer *Member = new CXXBaseOrMemberInitializer((*Field), 0, 0, SourceLocation()); AllToDestruct.push_back(Member); @@ -535,12 +535,12 @@ CXXConstructorDecl::setBaseOrMemberInitializers( for (CXXRecordDecl::base_class_iterator VBase = ClassDecl->vbases_begin(), E = ClassDecl->vbases_end(); VBase != E; ++VBase) { - const Type * T = VBase->getType()->getAs<RecordType>(); + const Type * T = VBase->getType()->getAsRecordType(); unsigned int i = 0; for (i = 0; i < NumInitializers; i++) { CXXBaseOrMemberInitializer *Member = Initializers[i]; if (Member->isBaseInitializer() && - Member->getBaseClass()->getAs<RecordType>() == T) { + Member->getBaseClass()->getAsRecordType() == T) { AllToInit.push_back(Member); break; } @@ -557,12 +557,12 @@ CXXConstructorDecl::setBaseOrMemberInitializers( // Virtuals are in the virtual base list and already constructed. if (Base->isVirtual()) continue; - const Type * T = Base->getType()->getAs<RecordType>(); + const Type * T = Base->getType()->getAsRecordType(); unsigned int i = 0; for (i = 0; i < NumInitializers; i++) { CXXBaseOrMemberInitializer *Member = Initializers[i]; if (Member->isBaseInitializer() && - Member->getBaseClass()->getAs<RecordType>() == T) { + Member->getBaseClass()->getAsRecordType() == T) { AllToInit.push_back(Member); break; } @@ -589,7 +589,7 @@ CXXConstructorDecl::setBaseOrMemberInitializers( while (const ArrayType *AT = C.getAsArrayType(FieldType)) FieldType = AT->getElementType(); - if (FieldType->getAs<RecordType>()) { + if (FieldType->getAsRecordType()) { CXXBaseOrMemberInitializer *Member = new CXXBaseOrMemberInitializer((*Field), 0, 0, SourceLocation()); AllToInit.push_back(Member); diff --git a/lib/AST/DeclPrinter.cpp b/lib/AST/DeclPrinter.cpp index 1711a7cf56..84ae72977e 100644 --- a/lib/AST/DeclPrinter.cpp +++ b/lib/AST/DeclPrinter.cpp @@ -90,7 +90,7 @@ static QualType GetBaseType(QualType T) { while (!BaseType->isSpecifierType()) { if (isa<TypedefType>(BaseType)) break; - else if (const PointerType* PTy = BaseType->getAs<PointerType>()) + else if (const PointerType* PTy = BaseType->getAsPointerType()) BaseType = PTy->getPointeeType(); else if (const ArrayType* ATy = dyn_cast<ArrayType>(BaseType)) BaseType = ATy->getElementType(); @@ -353,7 +353,7 @@ void DeclPrinter::VisitFunctionDecl(FunctionDecl *D) { } else // FIXME. skip dependent types for now. if (const RecordType *RT = - BMInitializer->getBaseClass()->getAs<RecordType>()) { + BMInitializer->getBaseClass()->getAsRecordType()) { const CXXRecordDecl *BaseDecl = cast<CXXRecordDecl>(RT->getDecl()); Out << BaseDecl->getNameAsString(); @@ -394,7 +394,7 @@ void DeclPrinter::VisitFunctionDecl(FunctionDecl *D) { } else // FIXME. skip dependent types for now. if (const RecordType *RT = - BMInitializer->getBaseClass()->getAs<RecordType>()) { + BMInitializer->getBaseClass()->getAsRecordType()) { const CXXRecordDecl *BaseDecl = cast<CXXRecordDecl>(RT->getDecl()); Proto += "~"; diff --git a/lib/AST/DeclarationName.cpp b/lib/AST/DeclarationName.cpp index a55b363a0d..a17abde777 100644 --- a/lib/AST/DeclarationName.cpp +++ b/lib/AST/DeclarationName.cpp @@ -135,7 +135,7 @@ std::string DeclarationName::getAsString() const { case CXXConstructorName: { QualType ClassType = getCXXNameType(); - if (const RecordType *ClassRec = ClassType->getAs<RecordType>()) + if (const RecordType *ClassRec = ClassType->getAsRecordType()) return ClassRec->getDecl()->getNameAsString(); return ClassType.getAsString(); } @@ -143,7 +143,7 @@ std::string DeclarationName::getAsString() const { case CXXDestructorName: { std::string Result = "~"; QualType Type = getCXXNameType(); - if (const RecordType *Rec = Type->getAs<RecordType>()) + if (const RecordType *Rec = Type->getAsRecordType()) Result += Rec->getDecl()->getNameAsString(); else Result += Type.getAsString(); @@ -170,7 +170,7 @@ std::string DeclarationName::getAsString() const { case CXXConversionFunctionName: { std::string Result = "operator "; QualType Type = getCXXNameType(); - if (const RecordType *Rec = Type->getAs<RecordType>()) + if (const RecordType *Rec = Type->getAsRecordType()) Result += Rec->getDecl()->getNameAsString(); else Result += Type.getAsString(); diff --git a/lib/AST/Expr.cpp b/lib/AST/Expr.cpp index 54739780be..0a6d9fe128 100644 --- a/lib/AST/Expr.cpp +++ b/lib/AST/Expr.cpp @@ -287,9 +287,9 @@ unsigned CallExpr::isBuiltinCall(ASTContext &Context) const { QualType CallExpr::getCallReturnType() const { QualType CalleeType = getCallee()->getType(); - if (const PointerType *FnTypePtr = CalleeType->getAs<PointerType>()) + if (const PointerType *FnTypePtr = CalleeType->getAsPointerType()) CalleeType = FnTypePtr->getPointeeType(); - else if (const BlockPointerType *BPT = CalleeType->getAs<BlockPointerType>()) + else if (const BlockPointerType *BPT = CalleeType->getAsBlockPointerType()) CalleeType = BPT->getPointeeType(); const FunctionType *FnType = CalleeType->getAsFunctionType(); @@ -438,7 +438,7 @@ Expr *InitListExpr::updateInit(unsigned Init, Expr *expr) { /// getFunctionType - Return the underlying function type for this block. /// const FunctionType *BlockExpr::getFunctionType() const { - return getType()->getAs<BlockPointerType>()-> + return getType()->getAsBlockPointerType()-> getPointeeType()->getAsFunctionType(); } @@ -923,7 +923,7 @@ Expr::isModifiableLvalue(ASTContext &Ctx, SourceLocation *Loc) const { if (CT->isIncompleteType()) return MLV_IncompleteType; - if (const RecordType *r = CT->getAs<RecordType>()) { + if (const RecordType *r = CT->getAsRecordType()) { if (r->hasConstFields()) return MLV_ConstQualified; } @@ -999,7 +999,7 @@ bool Expr::isOBJCGCCandidate(ASTContext &Ctx) const { QualType T = VD->getType(); // dereferencing to an object pointer is always a gc'able candidate if (T->isPointerType() && - T->getAs<PointerType>()->getPointeeType()->isObjCObjectPointerType()) + T->getAsPointerType()->getPointeeType()->isObjCObjectPointerType()) return true; } @@ -1427,7 +1427,7 @@ bool Expr::isNullPointerConstant(ASTContext &Ctx) const if (const ExplicitCastExpr *CE = dyn_cast<ExplicitCastExpr>(this)) { if (!Ctx.getLangOptions().CPlusPlus) { // Check that it is a cast to void*. - if (const PointerType *PT = CE->getType()->getAs<PointerType>()) { + if (const PointerType *PT = CE->getType()->getAsPointerType()) { QualType Pointee = PT->getPointeeType(); if (Pointee.getCVRQualifiers() == 0 && Pointee->isVoidType() && // to void* diff --git a/lib/AST/ExprCXX.cpp b/lib/AST/ExprCXX.cpp index d5cfef23f8..399c30255a 100644 --- a/lib/AST/ExprCXX.cpp +++ b/lib/AST/ExprCXX.cpp @@ -219,28 +219,28 @@ bool UnaryTypeTraitExpr::EvaluateTrait() const { case UTT_IsPOD: return QueriedType->isPODType(); case UTT_IsClass: // Fallthrough case UTT_IsUnion: - if (const RecordType *Record = QueriedType->getAs<RecordType>()) { + if (const RecordType *Record = QueriedType->getAsRecordType()) { bool Union = Record->getDecl()->isUnion(); return UTT == UTT_IsUnion ? Union : !Union; } return false; case UTT_IsEnum: return QueriedType->isEnumeralType(); case UTT_IsPolymorphic: - if (const RecordType *Record = QueriedType->getAs<RecordType>()) { + if (const RecordType *Record = QueriedType->getAsRecordType()) { // Type traits are only parsed in C++, so we've got CXXRecords. return cast<CXXRecordDecl>(Record->getDecl())->isPolymorphic(); } return false; case UTT_IsAbstract: - if (const RecordType *RT = QueriedType->getAs<RecordType>()) + if (const RecordType *RT = QueriedType->getAsRecordType()) return cast<CXXRecordDecl>(RT->getDecl())->isAbstract(); return false; case UTT_HasTrivialConstructor: - if (const RecordType *RT = QueriedType->getAs<RecordType>()) + if (const RecordType *RT = QueriedType->getAsRecordType()) return cast<CXXRecordDecl>(RT->getDecl())->hasTrivialConstructor(); return false; case UTT_HasTrivialDestructor: - if (const RecordType *RT = QueriedType->getAs<RecordType>()) + if (const RecordType *RT = QueriedType->getAsRecordType()) return cast<CXXRecordDecl>(RT->getDecl())->hasTrivialDestructor(); return false; } diff --git a/lib/AST/ExprConstant.cpp b/lib/AST/ExprConstant.cpp index d01130372c..2c29347c51 100644 --- a/lib/AST/ExprConstant.cpp +++ b/lib/AST/ExprConstant.cpp @@ -222,7 +222,7 @@ APValue LValueExprEvaluator::VisitMemberExpr(MemberExpr *E) { if (E->isArrow()) { if (!EvaluatePointer(E->getBase(), result, Info)) return APValue(); - Ty = E->getBase()->getType()->getAs<PointerType>()->getPointeeType(); + Ty = E->getBase()->getType()->getAsPointerType()->getPointeeType(); |