aboutsummaryrefslogtreecommitdiff
path: root/lib/Sema/SemaNamedCast.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Sema/SemaNamedCast.cpp')
-rw-r--r--lib/Sema/SemaNamedCast.cpp65
1 files changed, 25 insertions, 40 deletions
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.getAsString() << OpRange;
+ << "reinterpret_cast" << OrigDestType << OrigSrcType << OpRange;
return;
}
// C++ 5.2.10p2: The reinterpret_cast operator shall not cast away constness.
if (CastsAwayConstness(Self, SrcType, DestType)) {
Self.Diag(OpRange.getBegin(), diag::err_bad_cxx_cast_const_away)
- << "reinterpret_cast" << OrigDestType.getAsString()
- << OrigSrcType.getAsString() << OpRange;
+ << "reinterpret_cast" << OrigDestType << OrigSrcType << OpRange;
return;
}
@@ -467,8 +460,7 @@ CheckStaticCast(Sema &Self, Expr *&SrcExpr, QualType DestType,
// to a const violation.
if (!DestPointee.isAtLeastAsQualifiedAs(SrcPointee)) {
Self.Diag(OpRange.getBegin(), diag::err_bad_cxx_cast_const_away)
- << "static_cast" << DestType.getAsString()
- << OrigSrcType.getAsString() << OpRange;
+ << "static_cast" << DestType << OrigSrcType << OpRange;
}
return;
}
@@ -481,7 +473,7 @@ CheckStaticCast(Sema &Self, Expr *&SrcExpr, QualType DestType,
// why every substep failed and, at the end, select the most specific and
// report that.
Self.Diag(OpRange.getBegin(), diag::err_bad_cxx_cast_generic)
- << "static_cast" << DestType.getAsString() << OrigSrcType.getAsString()
+ << "static_cast" << DestType << OrigSrcType
<< OpRange;
}
@@ -581,8 +573,7 @@ TryStaticDowncast(Sema &Self, QualType SrcType, QualType DestType,
// Must preserve cv, as always.
if (!DestType.isAtLeastAsQualifiedAs(SrcType)) {
Self.Diag(OpRange.getBegin(), diag::err_bad_cxx_cast_const_away)
- << "static_cast" << OrigDestType.getAsString()
- << OrigSrcType.getAsString() << OpRange;
+ << "static_cast" << OrigDestType << OrigSrcType << OpRange;
return TSC_Failed;
}
@@ -610,8 +601,7 @@ TryStaticDowncast(Sema &Self, QualType SrcType, QualType DestType,
}
Self.Diag(OpRange.getBegin(), diag::err_ambiguous_base_to_derived_cast)
- << SrcType.getUnqualifiedType().getAsString()
- << DestType.getUnqualifiedType().getAsString()
+ << SrcType.getUnqualifiedType() << DestType.getUnqualifiedType()
<< PathDisplayStr << OpRange;
return TSC_Failed;
}
@@ -619,8 +609,7 @@ TryStaticDowncast(Sema &Self, QualType SrcType, QualType DestType,
if (Paths.getDetectedVirtual() != 0) {
QualType VirtualBase(Paths.getDetectedVirtual(), 0);
Self.Diag(OpRange.getBegin(), diag::err_static_downcast_via_virtual)
- << OrigSrcType.getAsString() << OrigDestType.getAsString()
- << VirtualBase.getAsString() << OpRange;
+ << OrigSrcType << OrigDestType << VirtualBase << OpRange;
return TSC_Failed;
}
@@ -680,7 +669,7 @@ CheckDynamicCast(Sema &Self, Expr *&SrcExpr, QualType DestType,
DestPointee = DestReference->getPointeeType();
} else {
Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_ref_or_ptr)
- << OrigDestType.getAsString() << DestRange;
+ << OrigDestType << DestRange;
return;
}
@@ -690,12 +679,12 @@ CheckDynamicCast(Sema &Self, Expr *&SrcExpr, QualType DestType,
} else if (DestRecord) {
if (!DestRecord->getDecl()->isDefinition()) {
Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_incomplete)
- << DestPointee.getUnqualifiedType().getAsString() << DestRange;
+ << DestPointee.getUnqualifiedType() << DestRange;
return;
}
} else {
Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_class)
- << DestPointee.getUnqualifiedType().getAsString() << DestRange;
+ << DestPointee.getUnqualifiedType() << DestRange;
return;
}
@@ -710,13 +699,13 @@ CheckDynamicCast(Sema &Self, Expr *&SrcExpr, QualType DestType,
SrcPointee = SrcPointer->getPointeeType();
} else {
Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_ptr)
- << OrigSrcType.getAsString() << SrcExpr->getSourceRange();
+ << OrigSrcType << SrcExpr->getSourceRange();
return;
}
} else {
if (SrcExpr->isLvalue(Self.Context) != Expr::LV_Valid) {
Self.Diag(OpRange.getBegin(), diag::err_bad_cxx_cast_rvalue)
- << "dynamic_cast" << OrigDestType.getAsString() << OpRange;
+ << "dynamic_cast" << OrigDestType << OpRange;
}
SrcPointee = SrcType;
}
@@ -725,14 +714,12 @@ CheckDynamicCast(Sema &Self, Expr *&SrcExpr, QualType DestType,
if (SrcRecord) {
if (!SrcRecord->getDecl()->isDefinition()) {
Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_incomplete)
- << SrcPointee.getUnqualifiedType().getAsString()
- << SrcExpr->getSourceRange();
+ << SrcPointee.getUnqualifiedType() << SrcExpr->getSourceRange();
return;
}
} else {
Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_class)
- << SrcPointee.getUnqualifiedType().getAsString()
- << SrcExpr->getSourceRange();
+ << SrcPointee.getUnqualifiedType() << SrcExpr->getSourceRange();
return;
}
@@ -745,8 +732,7 @@ CheckDynamicCast(Sema &Self, Expr *&SrcExpr, QualType DestType,
// C++ 5.2.7p1: The dynamic_cast operator shall not cast away constness.
if (!DestPointee.isAtLeastAsQualifiedAs(SrcPointee)) {
Self.Diag(OpRange.getBegin(), diag::err_bad_cxx_cast_const_away)
- << "dynamic_cast" << OrigDestType.getAsString()
- << OrigSrcType.getAsString() << OpRange;
+ << "dynamic_cast" << OrigDestType << OrigSrcType << OpRange;
return;
}
@@ -760,7 +746,7 @@ CheckDynamicCast(Sema &Self, Expr *&SrcExpr, QualType DestType,
// Upcasts are resolved statically.
if (DestRecord && Self.IsDerivedFrom(SrcPointee, DestPointee)) {
Self.CheckDerivedToBaseConversion(SrcPointee, DestPointee,
- OpRange.getBegin(), OpRange);
+ OpRange.getBegin(), OpRange);
// Diagnostic already emitted on error.
return;
}
@@ -770,8 +756,7 @@ CheckDynamicCast(Sema &Self, Expr *&SrcExpr, QualType DestType,
assert(SrcDecl && "Definition missing");
if (!cast<CXXRecordDecl>(SrcDecl)->isPolymorphic()) {
Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_polymorphic)
- << SrcPointee.getUnqualifiedType().getAsString()
- << SrcExpr->getSourceRange();
+ << SrcPointee.getUnqualifiedType() << SrcExpr->getSourceRange();
}
// Done. Everything else is run-time checks.