diff options
Diffstat (limited to 'lib/Sema/SemaNamedCast.cpp')
-rw-r--r-- | lib/Sema/SemaNamedCast.cpp | 65 |
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. |