aboutsummaryrefslogtreecommitdiff
path: root/lib/Sema
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Sema')
-rw-r--r--lib/Sema/SemaChecking.cpp6
-rw-r--r--lib/Sema/SemaDecl.cpp11
-rw-r--r--lib/Sema/SemaDeclAttr.cpp6
-rw-r--r--lib/Sema/SemaDeclCXX.cpp20
-rw-r--r--lib/Sema/SemaExpr.cpp100
-rw-r--r--lib/Sema/SemaExprCXX.cpp15
-rw-r--r--lib/Sema/SemaExprObjC.cpp2
-rw-r--r--lib/Sema/SemaInherit.cpp2
-rw-r--r--lib/Sema/SemaInit.cpp2
-rw-r--r--lib/Sema/SemaNamedCast.cpp65
-rw-r--r--lib/Sema/SemaOverload.cpp17
-rw-r--r--lib/Sema/SemaStmt.cpp16
-rw-r--r--lib/Sema/SemaType.cpp23
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