diff options
Diffstat (limited to 'lib/Sema')
-rw-r--r-- | lib/Sema/SemaChecking.cpp | 6 | ||||
-rw-r--r-- | lib/Sema/SemaDecl.cpp | 11 | ||||
-rw-r--r-- | lib/Sema/SemaDeclAttr.cpp | 6 | ||||
-rw-r--r-- | lib/Sema/SemaDeclCXX.cpp | 20 | ||||
-rw-r--r-- | lib/Sema/SemaExpr.cpp | 100 | ||||
-rw-r--r-- | lib/Sema/SemaExprCXX.cpp | 15 | ||||
-rw-r--r-- | lib/Sema/SemaExprObjC.cpp | 2 | ||||
-rw-r--r-- | lib/Sema/SemaInherit.cpp | 2 | ||||
-rw-r--r-- | lib/Sema/SemaInit.cpp | 2 | ||||
-rw-r--r-- | lib/Sema/SemaNamedCast.cpp | 65 | ||||
-rw-r--r-- | lib/Sema/SemaOverload.cpp | 17 | ||||
-rw-r--r-- | lib/Sema/SemaStmt.cpp | 16 | ||||
-rw-r--r-- | lib/Sema/SemaType.cpp | 23 |
13 files changed, 121 insertions, 164 deletions
diff --git a/lib/Sema/SemaChecking.cpp b/lib/Sema/SemaChecking.cpp index 09f6efb097..bbc50d6bac 100644 --- a/lib/Sema/SemaChecking.cpp +++ b/lib/Sema/SemaChecking.cpp @@ -223,7 +223,7 @@ bool Sema::SemaBuiltinUnorderedCompare(CallExpr *TheCall) { if (!Res->isRealFloatingType()) return Diag(OrigArg0->getLocStart(), diag::err_typecheck_call_invalid_ordered_compare) - << OrigArg0->getType().getAsString() << OrigArg1->getType().getAsString() + << OrigArg0->getType() << OrigArg1->getType() << SourceRange(OrigArg0->getLocStart(), OrigArg1->getLocEnd()); return false; @@ -574,10 +574,10 @@ Sema::CheckPrintfArguments(CallExpr *TheCall, bool HasVAListArg, if (Str[StrIdx-1] == '.') Diag(Loc, diag::warn_printf_asterisk_precision_wrong_type) - << E->getType().getAsString() << E->getSourceRange(); + << E->getType() << E->getSourceRange(); else Diag(Loc, diag::warn_printf_asterisk_width_wrong_type) - << E->getType().getAsString() << E->getSourceRange(); + << E->getType() << E->getSourceRange(); break; } diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index 4f71f068c5..1fc2c992e1 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/lib/Sema/SemaDecl.cpp @@ -336,8 +336,7 @@ TypedefDecl *Sema::MergeTypeDefDecl(TypedefDecl *New, Decl *OldD) { Context.getCanonicalType(Old->getUnderlyingType()) != Context.getCanonicalType(New->getUnderlyingType())) { Diag(New->getLocation(), diag::err_redefinition_different_typedef) - << New->getUnderlyingType().getAsString() - << Old->getUnderlyingType().getAsString(); + << New->getUnderlyingType() << Old->getUnderlyingType(); Diag(Old->getLocation(), diag::note_previous_definition); return Old; } @@ -757,7 +756,7 @@ bool Sema::CheckInitializerTypes(Expr *&Init, QualType &DeclType, const CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(ClassRec->getDecl()); if (!ClassDecl->isAggregate()) return Diag(InitLoc, diag::err_init_non_aggr_init_list) - << DeclType.getAsString() << Init->getSourceRange(); + << DeclType << Init->getSourceRange(); } } @@ -906,8 +905,7 @@ Sema::ActOnDeclarator(Scope *S, Declarator &D, DeclTy *lastDecl) { case DeclSpec::SCS_auto: case DeclSpec::SCS_register: case DeclSpec::SCS_mutable: - Diag(D.getIdentifierLoc(), diag::err_typecheck_sclass_func) - << R.getAsString(); + Diag(D.getIdentifierLoc(), diag::err_typecheck_sclass_func); InvalidDecl = true; break; case DeclSpec::SCS_unspecified: SC = FunctionDecl::None; break; @@ -1186,8 +1184,7 @@ Sema::ActOnDeclarator(Scope *S, Declarator &D, DeclTy *lastDecl) { // C99 6.9p2: The storage-class specifiers auto and register shall not // appear in the declaration specifiers in an external declaration. if (SC == VarDecl::Auto || SC == VarDecl::Register) { - Diag(D.getIdentifierLoc(), diag::err_typecheck_sclass_fscope) - << R.getAsString(); + Diag(D.getIdentifierLoc(), diag::err_typecheck_sclass_fscope); InvalidDecl = true; } } diff --git a/lib/Sema/SemaDeclAttr.cpp b/lib/Sema/SemaDeclAttr.cpp index ce63d13b4d..2e6108cf0a 100644 --- a/lib/Sema/SemaDeclAttr.cpp +++ b/lib/Sema/SemaDeclAttr.cpp @@ -158,8 +158,7 @@ static void HandleExtVectorTypeAttr(Decl *d, const AttributeList &Attr, // unlike gcc's vector_size attribute, we do not allow vectors to be defined // in conjunction with complex types (pointers, arrays, functions, etc.). if (!curType->isIntegerType() && !curType->isRealFloatingType()) { - S.Diag(Attr.getLoc(), diag::err_attribute_invalid_vector_type) - << curType.getAsString(); + S.Diag(Attr.getLoc(), diag::err_attribute_invalid_vector_type) << curType; return; } // unlike gcc's vector_size attribute, the size is specified as the @@ -229,8 +228,7 @@ static void HandleVectorSizeAttr(Decl *D, const AttributeList &Attr, Sema &S) { } // the base type must be integer or float. if (!CurType->isIntegerType() && !CurType->isRealFloatingType()) { - S.Diag(Attr.getLoc(), diag::err_attribute_invalid_vector_type) - << CurType.getAsString(); + S.Diag(Attr.getLoc(), diag::err_attribute_invalid_vector_type) << CurType; return; } unsigned typeSize = static_cast<unsigned>(S.Context.getTypeSize(CurType)); diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp index b99f2e0dc1..ab8ae72427 100644 --- a/lib/Sema/SemaDeclCXX.cpp +++ b/lib/Sema/SemaDeclCXX.cpp @@ -351,7 +351,7 @@ void Sema::ActOnBaseSpecifiers(DeclTy *ClassDecl, BaseTy **Bases, // derived class more than once. Diag(BaseSpecs[idx]->getSourceRange().getBegin(), diag::err_duplicate_base_class) - << KnownBaseTypes[NewBaseType]->getType().getAsString() + << KnownBaseTypes[NewBaseType]->getType() << BaseSpecs[idx]->getSourceRange(); // Delete the duplicate base class specifier; we're going to @@ -1212,13 +1212,13 @@ Sema::DeclTy *Sema::ActOnConversionDeclarator(CXXConversionDecl *Conversion) { ConvType = Context.getCanonicalType(ConvType).getUnqualifiedType(); if (ConvType == ClassType) Diag(Conversion->getLocation(), diag::warn_conv_to_self_not_used) - << ClassType.getAsString(); + << ClassType; else if (IsDerivedFrom(ClassType, ConvType)) Diag(Conversion->getLocation(), diag::warn_conv_to_base_not_used) - << ClassType.getAsString() << ConvType.getAsString(); + << ClassType << ConvType; } else if (ConvType->isVoidType()) { Diag(Conversion->getLocation(), diag::warn_conv_to_void_not_used) - << ClassType.getAsString() << ConvType.getAsString(); + << ClassType << ConvType; } ClassDecl->addConversionFunction(Context, Conversion); @@ -1691,9 +1691,8 @@ Sema::CheckReferenceInit(Expr *&Init, QualType &DeclType, if (!ICS) Diag(Init->getSourceRange().getBegin(), diag::err_not_reference_to_const_init) - << T1.getAsString() - << (InitLvalue != Expr::LV_Valid? "temporary" : "value") - << T2.getAsString() << Init->getSourceRange(); + << T1 << (InitLvalue != Expr::LV_Valid? "temporary" : "value") + << T2 << Init->getSourceRange(); return true; } @@ -1755,9 +1754,8 @@ Sema::CheckReferenceInit(Expr *&Init, QualType &DeclType, if (!ICS) Diag(Init->getSourceRange().getBegin(), diag::err_reference_init_drops_quals) - << T1.getAsString() - << (InitLvalue != Expr::LV_Valid? "temporary" : "value") - << T2.getAsString() << Init->getSourceRange(); + << T1 << (InitLvalue != Expr::LV_Valid? "temporary" : "value") + << T2 << Init->getSourceRange(); return true; } @@ -1915,7 +1913,7 @@ bool Sema::CheckOverloadedOperatorDeclaration(FunctionDecl *FnDecl) { if (!ParamIsInt) return Diag(LastParam->getLocation(), diag::err_operator_overload_post_incdec_must_be_int) - << LastParam->getType().getAsString() << (Op == OO_MinusMinus); + << LastParam->getType() << (Op == OO_MinusMinus); } return false; diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index f81c2b877c..fdd5732cc5 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -700,7 +700,7 @@ bool Sema::CheckSizeOfAlignOfOperand(QualType exprType, else if (exprType->isIncompleteType()) return Diag(OpLoc, isSizeof ? diag::err_sizeof_incomplete_type : diag::err_alignof_incomplete_type) - << exprType.getAsString() << ExprRange; + << exprType << ExprRange; return false; } @@ -747,7 +747,7 @@ QualType Sema::CheckRealImagOperand(Expr *&V, SourceLocation Loc) { return V->getType(); // Reject anything else. - Diag(Loc, diag::err_realimag_invalid_type) << V->getType().getAsString(); + Diag(Loc, diag::err_realimag_invalid_type) << V->getType(); return QualType(); } @@ -999,7 +999,7 @@ ActOnArraySubscriptExpr(Scope *S, ExprTy *Base, SourceLocation LLoc, if (!ResultType->isObjectType()) return Diag(BaseExpr->getLocStart(), diag::err_typecheck_subscript_not_object) - << BaseExpr->getType().getAsString() << BaseExpr->getSourceRange(); + << BaseExpr->getType() << BaseExpr->getSourceRange(); return new ArraySubscriptExpr(LHSExp, RHSExp, ResultType, RLoc); } @@ -1017,7 +1017,7 @@ CheckExtVectorComponent(QualType baseType, SourceLocation OpLoc, const char *compStr = CompName.getName(); if (strlen(compStr) > vecType->getNumElements()) { Diag(OpLoc, diag::err_ext_vector_component_exceeds_length) - << baseType.getAsString() << SourceRange(CompLoc); + << baseType << SourceRange(CompLoc); return QualType(); } @@ -1059,7 +1059,7 @@ CheckExtVectorComponent(QualType baseType, SourceLocation OpLoc, // We didn't get to the end of the string. This means a component accessor // exceeds the number of elements in the vector. Diag(OpLoc, diag::err_ext_vector_component_exceeds_length) - << baseType.getAsString() << SourceRange(CompLoc); + << baseType << SourceRange(CompLoc); return QualType(); } @@ -1068,7 +1068,7 @@ CheckExtVectorComponent(QualType baseType, SourceLocation OpLoc, // the elements. if (SpecialComponent && (vecType->getNumElements() & 1U)) { Diag(OpLoc, diag::err_ext_vector_component_requires_even) - << baseType.getAsString() << SourceRange(CompLoc); + << baseType << SourceRange(CompLoc); return QualType(); } @@ -1127,7 +1127,7 @@ ActOnMemberReferenceExpr(ExprTy *Base, SourceLocation OpLoc, return BuildOverloadedArrowExpr(BaseExpr, OpLoc, MemberLoc, Member); else return Diag(MemberLoc, diag::err_typecheck_member_reference_arrow) - << BaseType.getAsString() << BaseExpr->getSourceRange(); + << BaseType << BaseExpr->getSourceRange(); } // Handle field access to simple records. This also handles access to fields @@ -1263,7 +1263,7 @@ ActOnMemberReferenceExpr(ExprTy *Base, SourceLocation OpLoc, } return Diag(MemberLoc, diag::err_typecheck_member_reference_struct_union) - << BaseType.getAsString() << BaseExpr->getSourceRange(); + << BaseType << BaseExpr->getSourceRange(); } /// ActOnCallExpr - Handle a call to Fn with the specified array of arguments. @@ -1347,7 +1347,7 @@ ActOnCallExpr(ExprTy *fn, SourceLocation LParenLoc, const PointerType *PT = Fn->getType()->getAsPointerType(); if (PT == 0) return Diag(LParenLoc, diag::err_typecheck_call_not_function) - << Fn->getType().getAsString() << Fn->getSourceRange(); + << Fn->getType() << Fn->getSourceRange(); FuncT = PT->getPointeeType()->getAsFunctionType(); } else { // This is a block call. FuncT = Fn->getType()->getAsBlockPointerType()->getPointeeType()-> @@ -1355,7 +1355,7 @@ ActOnCallExpr(ExprTy *fn, SourceLocation LParenLoc, } if (FuncT == 0) return Diag(LParenLoc, diag::err_typecheck_call_not_function) - << Fn->getType().getAsString() << Fn->getSourceRange(); + << Fn->getType() << Fn->getSourceRange(); // We know the result type of the call, set it. TheCall->setType(FuncT->getResultType().getNonReferenceType()); @@ -1499,17 +1499,17 @@ bool Sema::CheckCastTypes(SourceRange TyR, QualType castType, Expr *&castExpr) { (!castType->isStructureType() && !castType->isUnionType())) { // Reject any other conversions to non-scalar types. return Diag(TyR.getBegin(), diag::err_typecheck_cond_expect_scalar) - << castType.getAsString() << castExpr->getSourceRange(); + << castType << castExpr->getSourceRange(); } // accept this, but emit an ext-warn. Diag(TyR.getBegin(), diag::ext_typecheck_cast_nonscalar) - << castType.getAsString() << castExpr->getSourceRange(); + << castType << castExpr->getSourceRange(); } else if (!castExpr->getType()->isScalarType() && !castExpr->getType()->isVectorType()) { return Diag(castExpr->getLocStart(), diag::err_typecheck_expect_scalar_operand) - << castExpr->getType().getAsString() << castExpr->getSourceRange(); + << castExpr->getType() << castExpr->getSourceRange(); } else if (castExpr->getType()->isVectorType()) { if (CheckVectorCast(TyR, castExpr->getType(), castType)) return true; @@ -1529,11 +1529,11 @@ bool Sema::CheckVectorCast(SourceRange R, QualType VectorTy, QualType Ty) { Ty->isVectorType() ? diag::err_invalid_conversion_between_vectors : diag::err_invalid_conversion_between_vector_and_integer) - << VectorTy.getAsString() << Ty.getAsString() << R; + << VectorTy << Ty << R; } else return Diag(R.getBegin(), diag::err_invalid_conversion_between_vector_and_scalar) - << VectorTy.getAsString() << Ty.getAsString() << R; + << VectorTy << Ty << R; return false; } @@ -1564,8 +1564,7 @@ inline QualType Sema::CheckConditionalOperands( // C99 6.5.15 // first, check the condition. if (!condT->isScalarType()) { // C99 6.5.15p2 - Diag(cond->getLocStart(), diag::err_typecheck_cond_expect_scalar) - << condT.getAsString(); + Diag(cond->getLocStart(), diag::err_typecheck_cond_expect_scalar) << condT; return QualType(); } @@ -1684,8 +1683,7 @@ inline QualType Sema::CheckConditionalOperands( // C99 6.5.15 } else if (!Context.typesAreCompatible(lhptee.getUnqualifiedType(), rhptee.getUnqualifiedType())) { Diag(questionLoc, diag::warn_typecheck_cond_incompatible_pointers) - << lexT.getAsString() << rexT.getAsString() - << lex->getSourceRange() << rex->getSourceRange(); + << lexT << rexT << lex->getSourceRange() << rex->getSourceRange(); // In this situation, we assume void* type. No especially good // reason, but this is what gcc does, and we do have to pick // to get a consistent AST. @@ -1738,8 +1736,7 @@ inline QualType Sema::CheckConditionalOperands( // C99 6.5.15 // Otherwise, the operands are not compatible. Diag(questionLoc, diag::err_typecheck_cond_incompatible_operands) - << lexT.getAsString() << rexT.getAsString() - << lex->getSourceRange() << rex->getSourceRange(); + << lexT << rexT << lex->getSourceRange() << rex->getSourceRange(); return QualType(); } @@ -2110,7 +2107,7 @@ inline QualType Sema::CheckVectorOperands(SourceLocation Loc, Expr *&lex, // You cannot convert between vector values of different size. Diag(Loc, diag::err_typecheck_vector_not_convertable) - << lex->getType().getAsString() << rex->getType().getAsString() + << lex->getType() << rex->getType() << lex->getSourceRange() << rex->getSourceRange(); return QualType(); } @@ -2168,7 +2165,7 @@ inline QualType Sema::CheckAdditionOperands( // C99 6.5.6 << lex->getSourceRange() << rex->getSourceRange(); } else { Diag(Loc, diag::err_typecheck_arithmetic_incomplete_type) - << lex->getType().getAsString() << lex->getSourceRange(); + << lex->getType() << lex->getSourceRange(); return QualType(); } } @@ -2205,7 +2202,7 @@ QualType Sema::CheckSubtractionOperands(Expr *&lex, Expr *&rex, << lex->getSourceRange() << rex->getSourceRange(); } else { Diag(Loc, diag::err_typecheck_sub_ptr_object) - << lex->getType().getAsString() << lex->getSourceRange(); + << lex->getType() << lex->getSourceRange(); return QualType(); } } @@ -2227,7 +2224,7 @@ QualType Sema::CheckSubtractionOperands(Expr *&lex, Expr *&rex, << lex->getSourceRange() << rex->getSourceRange(); } else { Diag(Loc, diag::err_typecheck_sub_ptr_object) - << rex->getType().getAsString() << rex->getSourceRange(); + << rex->getType() << rex->getSourceRange(); return QualType(); } } @@ -2237,7 +2234,7 @@ QualType Sema::CheckSubtractionOperands(Expr *&lex, Expr *&rex, Context.getCanonicalType(lpointee).getUnqualifiedType(), Context.getCanonicalType(rpointee).getUnqualifiedType())) { Diag(Loc, diag::err_typecheck_sub_ptr_compatible) - << lex->getType().getAsString() << rex->getType().getAsString() + << lex->getType() << rex->getType() << lex->getSourceRange() << rex->getSourceRange(); return QualType(); } @@ -2342,8 +2339,7 @@ QualType Sema::CheckCompareOperands(Expr *&lex, Expr *&rex, SourceLocation Loc, RCanPointeeTy.getUnqualifiedType()) && !areComparableObjCInterfaces(LCanPointeeTy, RCanPointeeTy, Context)) { Diag(Loc, diag::ext_typecheck_comparison_of_distinct_pointers) - << lType.getAsString() << rType.getAsString() - << lex->getSourceRange() << rex->getSourceRange(); + << lType << rType << lex->getSourceRange() << rex->getSourceRange(); } ImpCastExprToType(rex, lType); // promote the pointer to pointer return ResultTy; @@ -2356,8 +2352,7 @@ QualType Sema::CheckCompareOperands(Expr *&lex, Expr *&rex, SourceLocation Loc, if (!LHSIsNull && !RHSIsNull && !Context.typesAreBlockCompatible(lpointee, rpointee)) { Diag(Loc, diag::err_typecheck_comparison_of_distinct_blocks) - << lType.getAsString() << rType.getAsString() - << lex->getSourceRange() << rex->getSourceRange(); + << lType << rType << lex->getSourceRange() << rex->getSourceRange(); } ImpCastExprToType(rex, lType); // promote the pointer to pointer return ResultTy; @@ -2367,8 +2362,7 @@ QualType Sema::CheckCompareOperands(Expr *&lex, Expr *&rex, SourceLocation Loc, (lType->isPointerType() && rType->isBlockPointerType())) { if (!LHSIsNull && !RHSIsNull) { Diag(Loc, diag::err_typecheck_comparison_of_distinct_blocks) - << lType.getAsString() << rType.getAsString() - << lex->getSourceRange() << rex->getSourceRange(); + << lType << rType << lex->getSourceRange() << rex->getSourceRange(); } ImpCastExprToType(rex, lType); // promote the pointer to pointer return ResultTy; @@ -2386,8 +2380,7 @@ QualType Sema::CheckCompareOperands(Expr *&lex, Expr *&rex, SourceLocation Loc, if (!LPtrToVoid && !RPtrToVoid && !Context.typesAreCompatible(lType, rType)) { Diag(Loc, diag::ext_typecheck_comparison_of_distinct_pointers) - << lType.getAsString() << rType.getAsString() - << lex->getSourceRange() << rex->getSourceRange(); + << lType << rType << lex->getSourceRange() << rex->getSourceRange(); ImpCastExprToType(rex, lType); return ResultTy; } @@ -2410,8 +2403,7 @@ QualType Sema::CheckCompareOperands(Expr *&lex, Expr *&rex, SourceLocation Loc, rType->isIntegerType()) { if (!RHSIsNull) Diag(Loc, diag::ext_typecheck_comparison_of_pointer_integer) - << lType.getAsString() << rType.getAsString() - << lex->getSourceRange() << rex->getSourceRange(); + << lType << rType << lex->getSourceRange() << rex->getSourceRange(); ImpCastExprToType(rex, lType); // promote the integer to pointer return ResultTy; } @@ -2419,8 +2411,7 @@ QualType Sema::CheckCompareOperands(Expr *&lex, Expr *&rex, SourceLocation Loc, (rType->isPointerType() || rType->isObjCQualifiedIdType())) { if (!LHSIsNull) Diag(Loc, diag::ext_typecheck_comparison_of_pointer_integer) - << lType.getAsString() << rType.getAsString() - << lex->getSourceRange() << rex->getSourceRange(); + << lType << rType << lex->getSourceRange() << rex->getSourceRange(); ImpCastExprToType(lex, rType); // promote the integer to pointer return ResultTy; } @@ -2428,16 +2419,14 @@ QualType Sema::CheckCompareOperands(Expr *&lex, Expr *&rex, SourceLocation Loc, if (lType->isBlockPointerType() && rType->isIntegerType()) { if (!RHSIsNull) Diag(Loc, diag::ext_typecheck_comparison_of_pointer_integer) - << lType.getAsString() << rType.getAsString() - << lex->getSourceRange() << rex->getSourceRange(); + << lType << rType << lex->getSourceRange() << rex->getSourceRange(); ImpCastExprToType(rex, lType); // promote the integer to pointer return ResultTy; } if (lType->isIntegerType() && rType->isBlockPointerType()) { if (!LHSIsNull) Diag(Loc, diag::ext_typecheck_comparison_of_pointer_integer) - << lType.getAsString() << rType.getAsString() - << lex->getSourceRange() << rex->getSourceRange(); + << lType << rType << lex->getSourceRange() << rex->getSourceRange(); ImpCastExprToType(lex, rType); // promote the integer to pointer return ResultTy; } @@ -2563,7 +2552,7 @@ static bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) { } if (NeedType) - S.Diag(Loc, Diag) << E->getType().getAsString() << E->getSourceRange(); + S.Diag(Loc, Diag) << E->getType() << E->getSourceRange(); else S.Diag(Loc, Diag) << E->getSourceRange(); return true; @@ -2649,16 +2638,16 @@ QualType Sema::CheckIncrementDecrementOperand(Expr *Op, SourceLocation OpLoc) { Diag(OpLoc, diag::ext_gnu_void_ptr) << Op->getSourceRange(); } else { Diag(OpLoc, diag::err_typecheck_arithmetic_incomplete_type) - << ResType.getAsString() << Op->getSourceRange(); + << ResType << Op->getSourceRange(); return QualType(); } } else if (ResType->isComplexType()) { // C99 does not support ++/-- on complex types, we allow as an extension. Diag(OpLoc, diag::ext_integer_increment_complex) - << ResType.getAsString() << Op->getSourceRange(); + << ResType << Op->getSourceRange(); } else { Diag(OpLoc, diag::err_typecheck_illegal_increment_decrement) - << ResType.getAsString() << Op->getSourceRange(); + << ResType << Op->getSourceRange(); return QualType(); } // At this point, we know we have a real, complex or pointer type. @@ -3196,7 +3185,6 @@ Action::ExprResult Sema::ActOnUnaryOp(Scope *S, SourceLocation OpLoc, // build a built-in operation. } - QualType resultType; switch (Opc) { default: @@ -3227,7 +3215,7 @@ Action::ExprResult Sema::ActOnUnaryOp(Scope *S, SourceLocation OpLoc, break; return Diag(OpLoc, diag::err_typecheck_unary_expr) - << resultType.getAsString(); + << resultType << Input->getSourceRange(); case UnaryOperator::Not: // bitwise complement UsualUnaryConversions(Input); resultType = Input->getType(); @@ -3235,10 +3223,10 @@ Action::ExprResult Sema::ActOnUnaryOp(Scope *S, SourceLocation OpLoc, if (resultType->isComplexType() || resultType->isComplexIntegerType()) // C99 does not support '~' for complex conjugation. Diag(OpLoc, diag::ext_integer_complement_complex) - << resultType.getAsString() << Input->getSourceRange(); + << resultType << Input->getSourceRange(); else if (!resultType->isIntegerType()) return Diag(OpLoc, diag::err_typecheck_unary_expr) - << resultType.getAsString() << Input->getSourceRange(); + << resultType << Input->getSourceRange(); break; case UnaryOperator::LNot: // logical negation // Unlike +/-/~, integer promotions aren't done here (C99 6.5.3.3p5). @@ -3246,7 +3234,7 @@ Action::ExprResult Sema::ActOnUnaryOp(Scope *S, SourceLocation OpLoc, resultType = Input->getType(); if (!resultType->isScalarType()) // C99 6.5.3.3p1 return Diag(OpLoc, diag::err_typecheck_unary_expr) - << resultType.getAsString(); + << resultType << Input->getSourceRange(); // LNot always has type int. C99 6.5.3.3p5. resultType = Context.IntTy; break; @@ -3323,7 +3311,7 @@ Sema::ExprResult Sema::ActOnBuiltinOffsetOf(SourceLocation BuiltinLoc, // one is known to be a field designator. Verify that the ArgTy represents // a struct/union/class. if (!ArgTy->isRecordType()) - return Diag(TypeLoc, diag::err_offsetof_record_type) << ArgTy.getAsString(); + return Diag(TypeLoc, diag::err_offsetof_record_type) << ArgTy; // Otherwise, create a compound literal expression as the base, and // iteratively process the offsetof designators. @@ -3342,8 +3330,7 @@ Sema::ExprResult Sema::ActOnBuiltinOffsetOf(SourceLocation BuiltinLoc, const ArrayType *AT = Context.getAsArrayType(Res->getType()); if (!AT) { delete Res; - return Diag(OC.LocEnd, diag::err_offsetof_array_type) - << Res->getType().getAsString(); + return Diag(OC.LocEnd, diag::err_offsetof_array_type) << Res->getType(); } // FIXME: C++: Verify that operator[] isn't overloaded. @@ -3361,8 +3348,7 @@ Sema::ExprResult Sema::ActOnBuiltinOffsetOf(SourceLocation BuiltinLoc, const RecordType *RC = Res->getType()->getAsRecordType(); if (!RC) { delete Res; - return Diag(OC.LocEnd, diag::err_offsetof_record_type) - << Res->getType().getAsString(); + return Diag(OC.LocEnd, diag::err_offsetof_record_type) << Res->getType(); } // Get the decl corresponding to this. @@ -3632,7 +3618,7 @@ Sema::ExprResult Sema::ActOnVAArg(SourceLocation BuiltinLoc, if (CheckAssignmentConstraints(VaListType, E->getType()) != Compatible) return Diag(E->getLocStart(), diag::err_first_argument_to_va_arg_not_of_type_va_list) - << E->getType().getAsString() << E->getSourceRange(); + << E->getType() << E->getSourceRange(); // FIXME: Warn if a non-POD type is passed in. diff --git a/lib/Sema/SemaExprCXX.cpp b/lib/Sema/SemaExprCXX.cpp index f5f05f243c..3633da89bc 100644 --- a/lib/Sema/SemaExprCXX.cpp +++ b/lib/Sema/SemaExprCXX.cpp @@ -126,7 +126,7 @@ Sema::ActOnCXXTypeConstructExpr(SourceRange TypeRange, TypeTy *TypeRep, // if (!RT->getDecl()->isDefinition()) return Diag(TyBeginLoc, diag::err_invalid_incomplete_type_use) - << Ty.getAsString() << FullRange; + << Ty << FullRange; unsigned DiagID = PP.getDiagnostics().getCustomDiagID(Diagnostic::Error, "class constructors are not supported yet"); @@ -164,7 +164,7 @@ Sema::ActOnCXXTypeConstructExpr(SourceRange TypeRange, TypeTy *TypeRep, return Diag(TyBeginLoc, diag::err_value_init_for_array_type) << FullRange; if (Ty->isIncompleteType() && !Ty->isVoidType()) return Diag(TyBeginLoc, diag::err_invalid_incomplete_type_use) - << Ty.getAsString() << FullRange; + << Ty << FullRange; return new CXXZeroInitValueExpr(Ty, TyBeginLoc, RParenLoc); } @@ -302,7 +302,7 @@ bool Sema::CheckAllocatedType(QualType AllocType, SourceLocation StartLoc, assert(false && "Unexpected type class"); return true; } - Diag(StartLoc, msg) << AllocType.getAsString() << TyR; + Diag(StartLoc, msg) << AllocType << TyR; return true; } @@ -340,18 +340,17 @@ Sema::ActOnCXXDelete(SourceLocation StartLoc, bool UseGlobal, } if (!Type->isPointerType()) { - Diag(StartLoc, diag::err_delete_operand) - << Type.getAsString() << Ex->getSourceRange(); + Diag(StartLoc, diag::err_delete_operand) << Type << Ex->getSourceRange(); return true; } QualType Pointee = Type->getAsPointerType()->getPointeeType(); if (Pointee->isIncompleteType() && !Pointee->isVoidType()) Diag(StartLoc, diag::warn_delete_incomplete) - << Pointee.getAsString() << Ex->getSourceRange(); + << Pointee << Ex->getSourceRange(); else if (!Pointee->isObjectType()) { Diag(StartLoc, diag::err_delete_operand) - << Type.getAsString() << Ex->getSourceRange(); + << Type << Ex->getSourceRange(); return true; } @@ -428,7 +427,7 @@ bool Sema::CheckCXXBooleanCondition(Expr *&CondExpr) { ConvTy = CheckSingleAssignmentConstraints(Context.BoolTy, CondExpr); if (ConvTy == Incompatible) return Diag(CondExpr->getLocStart(), diag::err_typecheck_bool_condition) - << Ty.getAsString() << CondExpr->getSourceRange(); + << Ty << CondExpr->getSourceRange(); return false; } diff --git a/lib/Sema/SemaExprObjC.cpp b/lib/Sema/SemaExprObjC.cpp index 094f3ec460..4dadb65637 100644 --- a/lib/Sema/SemaExprObjC.cpp +++ b/lib/Sema/SemaExprObjC.cpp @@ -388,7 +388,7 @@ Sema::ExprResult Sema::ActOnInstanceMessage(ExprTy *receiver, Selector Sel, << Sel << SourceRange(lbrac, rbrac); } else { Diag(lbrac, diag::error_bad_receiver_type) - << RExpr->getType().getAsString() << RExpr->getSourceRange(); + << RExpr->getType() << RExpr->getSourceRange(); return true; } diff --git a/lib/Sema/SemaInherit.cpp b/lib/Sema/SemaInherit.cpp index 398f388f88..a02dd1edd5 100644 --- a/lib/Sema/SemaInherit.cpp +++ b/lib/Sema/SemaInherit.cpp @@ -205,7 +205,7 @@ Sema::CheckDerivedToBaseConversion(QualType Derived, QualType Base, } Diag(Loc, diag::err_ambiguous_derived_to_base_conv) - << Derived.getAsString() << Base.getAsString() << PathDisplayStr << Range; + << Derived << Base << PathDisplayStr << Range; return true; } diff --git a/lib/Sema/SemaInit.cpp b/lib/Sema/SemaInit.cpp index 1e26c84714..42f9b14085 100644 --- a/lib/Sema/SemaInit.cpp +++ b/lib/Sema/SemaInit.cpp @@ -144,7 +144,7 @@ void InitListChecker::CheckListElementTypes(InitListExpr *IList, // This type is invalid, issue a diagnostic. Index++; SemaRef->Diag(IList->getLocStart(), diag::err_illegal_initializer_type) - << DeclType.getAsString(); + << DeclType; hadError = true; } else { // In C, all types are either scalars or aggregates, but diff --git a/lib/Sema/SemaNamedCast.cpp b/lib/Sema/SemaNamedCast.cpp index c243fac553..af1e2e0008 100644 --- a/lib/Sema/SemaNamedCast.cpp +++ b/lib/Sema/SemaNamedCast.cpp @@ -109,8 +109,7 @@ CheckConstCast(Sema &Self, Expr *&SrcExpr, QualType DestType, if (SrcExpr->isLvalue(Self.Context) != Expr::LV_Valid) { // Cannot cast non-lvalue to reference type. Self.Diag(OpRange.getBegin(), diag::err_bad_cxx_cast_rvalue) - << "const_cast" << OrigDestType.getAsString() - << SrcExpr->getSourceRange(); + << "const_cast" << OrigDestType << SrcExpr->getSourceRange(); return; } @@ -131,7 +130,7 @@ CheckConstCast(Sema &Self, Expr *&SrcExpr, QualType DestType, // was a reference type, we converted it to a pointer above. // C++ 5.2.11p3: For two pointer types [...] Self.Diag(OpRange.getBegin(), diag::err_bad_const_cast_dest) - << OrigDestType.getAsString() << DestRange; + << OrigDestType << DestRange; return; } if (DestType->isFunctionPointerType()) { @@ -139,7 +138,7 @@ CheckConstCast(Sema &Self, Expr *&SrcExpr, QualType DestType, // C++ 5.2.11p2: [...] where T is any object type or the void type [...] // T is the ultimate pointee of source and target type. Self.Diag(OpRange.getBegin(), diag::err_bad_const_cast_dest) - << OrigDestType.getAsString() << DestRange; + << OrigDestType << DestRange; return; } SrcType = Self.Context.getCanonicalType(SrcType); @@ -171,8 +170,7 @@ CheckConstCast(Sema &Self, Expr *&SrcExpr, QualType DestType, if (SrcTypeArr->getSize() != DestTypeArr->getSize()) { // Different array sizes. Self.Diag(OpRange.getBegin(), diag::err_bad_cxx_cast_generic) - << "const_cast" << OrigDestType.getAsString() - << OrigSrcType.getAsString() << OpRange; + << "const_cast" << OrigDestType << OrigSrcType << OpRange; return; } SrcType = SrcTypeArr->getElementType().getUnqualifiedType(); @@ -184,8 +182,7 @@ CheckConstCast(Sema &Self, Expr *&SrcExpr, QualType DestType, if (SrcType != DestType) { // Cast between unrelated types. Self.Diag(OpRange.getBegin(), diag::err_bad_cxx_cast_generic) - << "const_cast" << OrigDestType.getAsString() - << OrigSrcType.getAsString() << OpRange; + << "const_cast" << OrigDestType << OrigSrcType << OpRange; return; } } @@ -207,8 +204,7 @@ CheckReinterpretCast(Sema &Self, Expr *&SrcExpr, QualType DestType, if (SrcExpr->isLvalue(Self.Context) != Expr::LV_Valid) { // Cannot cast non-lvalue to reference type. Self.Diag(OpRange.getBegin(), diag::err_bad_cxx_cast_rvalue) - << "reinterpret_cast" << OrigDestType.getAsString() - << SrcExpr->getSourceRange(); + << "reinterpret_cast" << OrigDestType << SrcExpr->getSourceRange(); return; } @@ -236,8 +232,7 @@ CheckReinterpretCast(Sema &Self, Expr *&SrcExpr, QualType DestType, // lvalue->reference, which is handled above, at least one of the two // arguments must be a pointer. Self.Diag(OpRange.getBegin(), diag::err_bad_cxx_cast_generic) - << "reinterpret_cast" << OrigDestType.getAsString() - << OrigSrcType.getAsString() << OpRange; + << "reinterpret_cast" << OrigDestType << OrigSrcType << OpRange; return; } @@ -260,7 +255,7 @@ CheckReinterpretCast(Sema &Self, Expr *&SrcExpr, QualType DestType, if (Self.Context.getTypeSize(SrcType) > Self.Context.getTypeSize(DestType)) { Self.Diag(OpRange.getBegin(), diag::err_bad_reinterpret_cast_small_int) - << OrigDestType.getAsString() << DestRange; + << OrigDestType << DestRange; } return; } @@ -276,16 +271,14 @@ CheckReinterpretCast(Sema &Self, Expr *&SrcExpr, QualType DestType, // With the valid non-pointer conversions out of the way, we can be even // more stringent. Self.Diag(OpRange.getBegin(), diag::err_bad_cxx_cast_generic) - << "reinterpret_cast" << OrigDestType.getAsString() - << OrigSrcType |