Author: Nathan James Date: 2022-04-20T22:09:05+01:00 New Revision: cfb8169059c807ed5fbfb66b3ed558b7b6eb2833
URL: https://github.com/llvm/llvm-project/commit/cfb8169059c807ed5fbfb66b3ed558b7b6eb2833 DIFF: https://github.com/llvm/llvm-project/commit/cfb8169059c807ed5fbfb66b3ed558b7b6eb2833.diff LOG: [clang] Add a raw_ostream operator<< overload for QualType Under the hood this prints the same as `QualType::getAsString()` but cuts out the middle-man when that string is sent to another raw_ostream. Also cleaned up all the call sites where this occurs. Reviewed By: aaron.ballman Differential Revision: https://reviews.llvm.org/D123926 Added: Modified: clang/include/clang/AST/Type.h clang/include/clang/StaticAnalyzer/Checkers/SValExplainer.h clang/lib/AST/RecordLayoutBuilder.cpp clang/lib/AST/TypePrinter.cpp clang/lib/AST/VTableBuilder.cpp clang/lib/Analysis/AnalysisDeclContext.cpp clang/lib/Analysis/CFG.cpp clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp clang/lib/Sema/CodeCompleteConsumer.cpp clang/lib/Sema/SemaInit.cpp clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp clang/lib/StaticAnalyzer/Checkers/CheckObjCInstMethSignature.cpp clang/lib/StaticAnalyzer/Checkers/CheckSecuritySyntaxOnly.cpp clang/lib/StaticAnalyzer/Checkers/InnerPointerChecker.cpp clang/lib/StaticAnalyzer/Checkers/LLVMConventionsChecker.cpp clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp clang/lib/StaticAnalyzer/Checkers/MallocSizeofChecker.cpp clang/lib/StaticAnalyzer/Checkers/NumberObjectConversionChecker.cpp clang/lib/StaticAnalyzer/Checkers/ObjCContainersASTChecker.cpp clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.cpp clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountDiagnostics.cpp clang/lib/StaticAnalyzer/Checkers/UndefResultChecker.cpp clang/lib/StaticAnalyzer/Core/DynamicType.cpp clang/lib/StaticAnalyzer/Core/MemRegion.cpp clang/lib/StaticAnalyzer/Core/SVals.cpp clang/lib/StaticAnalyzer/Core/SymbolManager.cpp clang/unittests/AST/ASTTraverserTest.cpp Removed: ################################################################################ diff --git a/clang/include/clang/AST/Type.h b/clang/include/clang/AST/Type.h index 56869c17bd5cf..1a8549bedb4f9 100644 --- a/clang/include/clang/AST/Type.h +++ b/clang/include/clang/AST/Type.h @@ -1316,6 +1316,8 @@ class QualType { static bool hasNonTrivialToPrimitiveCopyCUnion(const RecordDecl *RD); }; +raw_ostream &operator<<(raw_ostream &OS, QualType QT); + } // namespace clang namespace llvm { diff --git a/clang/include/clang/StaticAnalyzer/Checkers/SValExplainer.h b/clang/include/clang/StaticAnalyzer/Checkers/SValExplainer.h index 48cd3395e936d..ad64cfc742dca 100644 --- a/clang/include/clang/StaticAnalyzer/Checkers/SValExplainer.h +++ b/clang/include/clang/StaticAnalyzer/Checkers/SValExplainer.h @@ -169,8 +169,7 @@ class SValExplainer : public FullSValVisitor<SValExplainer, std::string> { std::string VisitElementRegion(const ElementRegion *R) { std::string Str; llvm::raw_string_ostream OS(Str); - OS << "element of type '" << R->getElementType().getAsString() - << "' with index "; + OS << "element of type '" << R->getElementType() << "' with index "; // For concrete index: omit type of the index integer. if (auto I = R->getIndex().getAs<nonloc::ConcreteInt>()) OS << I->getValue(); diff --git a/clang/lib/AST/RecordLayoutBuilder.cpp b/clang/lib/AST/RecordLayoutBuilder.cpp index 709e05716a562..202823da7baae 100644 --- a/clang/lib/AST/RecordLayoutBuilder.cpp +++ b/clang/lib/AST/RecordLayoutBuilder.cpp @@ -3545,7 +3545,7 @@ static void DumpRecordLayout(raw_ostream &OS, const RecordDecl *RD, auto CXXRD = dyn_cast<CXXRecordDecl>(RD); PrintOffset(OS, Offset, IndentLevel); - OS << C.getTypeDeclType(const_cast<RecordDecl*>(RD)).getAsString(); + OS << C.getTypeDeclType(const_cast<RecordDecl *>(RD)); if (Description) OS << ' ' << Description; if (CXXRD && CXXRD->isEmpty()) @@ -3630,7 +3630,7 @@ static void DumpRecordLayout(raw_ostream &OS, const RecordDecl *RD, const QualType &FieldType = C.getLangOpts().DumpRecordLayoutsCanonical ? Field.getType().getCanonicalType() : Field.getType(); - OS << FieldType.getAsString() << ' ' << Field << '\n'; + OS << FieldType << ' ' << Field << '\n'; } // Dump virtual bases. @@ -3696,7 +3696,7 @@ void ASTContext::DumpRecordLayout(const RecordDecl *RD, raw_ostream &OS, // in libFrontend. const ASTRecordLayout &Info = getASTRecordLayout(RD); - OS << "Type: " << getTypeDeclType(RD).getAsString() << "\n"; + OS << "Type: " << getTypeDeclType(RD) << "\n"; OS << "\nLayout: "; OS << "<ASTRecordLayout\n"; OS << " Size:" << toBits(Info.getSize()) << "\n"; diff --git a/clang/lib/AST/TypePrinter.cpp b/clang/lib/AST/TypePrinter.cpp index d0f863caa19a1..32ca7643a7603 100644 --- a/clang/lib/AST/TypePrinter.cpp +++ b/clang/lib/AST/TypePrinter.cpp @@ -2307,3 +2307,9 @@ void QualType::getAsStringInternal(const Type *ty, Qualifiers qs, std::string str = std::string(StrOS.str()); buffer.swap(str); } + +raw_ostream &clang::operator<<(raw_ostream &OS, QualType QT) { + SplitQualType S = QT.split(); + TypePrinter(LangOptions()).print(S.Ty, S.Quals, OS, /*PlaceHolder=*/""); + return OS; +} diff --git a/clang/lib/AST/VTableBuilder.cpp b/clang/lib/AST/VTableBuilder.cpp index 12a709884447b..3d64cb17fa9c6 100644 --- a/clang/lib/AST/VTableBuilder.cpp +++ b/clang/lib/AST/VTableBuilder.cpp @@ -3114,8 +3114,7 @@ static void dumpMicrosoftThunkAdjustment(const ThunkInfo &TI, raw_ostream &Out, if (!ContinueFirstLine) Out << LinePrefix; Out << "[return adjustment (to type '" - << TI.Method->getReturnType().getCanonicalType().getAsString() - << "'): "; + << TI.Method->getReturnType().getCanonicalType() << "'): "; if (R.Virtual.Microsoft.VBPtrOffset) Out << "vbptr at offset " << R.Virtual.Microsoft.VBPtrOffset << ", "; if (R.Virtual.Microsoft.VBIndex) diff --git a/clang/lib/Analysis/AnalysisDeclContext.cpp b/clang/lib/Analysis/AnalysisDeclContext.cpp index 06f1f813aeedd..f20924604f649 100644 --- a/clang/lib/Analysis/AnalysisDeclContext.cpp +++ b/clang/lib/Analysis/AnalysisDeclContext.cpp @@ -352,7 +352,7 @@ std::string AnalysisDeclContext::getFunctionName(const Decl *D) { for (const auto &P : FD->parameters()) { if (P != *FD->param_begin()) OS << ", "; - OS << P->getType().getAsString(); + OS << P->getType(); } OS << ')'; } diff --git a/clang/lib/Analysis/CFG.cpp b/clang/lib/Analysis/CFG.cpp index 840a934fd4641..c80e4bcd7e89d 100644 --- a/clang/lib/Analysis/CFG.cpp +++ b/clang/lib/Analysis/CFG.cpp @@ -5610,12 +5610,10 @@ static void print_elem(raw_ostream &OS, StmtPrinterHelper &Helper, if (Optional<CFGConstructor> CE = E.getAs<CFGConstructor>()) { print_construction_context(OS, Helper, CE->getConstructionContext()); } - OS << ", " << CCE->getType().getAsString() << ")"; + OS << ", " << CCE->getType() << ")"; } else if (const CastExpr *CE = dyn_cast<CastExpr>(S)) { - OS << " (" << CE->getStmtClassName() << ", " - << CE->getCastKindName() - << ", " << CE->getType().getAsString() - << ")"; + OS << " (" << CE->getStmtClassName() << ", " << CE->getCastKindName() + << ", " << CE->getType() << ")"; } // Expressions need a newline. diff --git a/clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp b/clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp index 75618fddae444..04bf41605d9d3 100644 --- a/clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp +++ b/clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp @@ -488,8 +488,8 @@ Value *Environment::createValue(QualType Type) { Value *Val = createValueUnlessSelfReferential(Type, Visited, /*Depth=*/0, CreatedValuesCount); if (CreatedValuesCount > MaxCompositeValueSize) { - llvm::errs() << "Attempting to initialize a huge value of type: " - << Type.getAsString() << "\n"; + llvm::errs() << "Attempting to initialize a huge value of type: " << Type + << '\n'; } return Val; } diff --git a/clang/lib/Sema/CodeCompleteConsumer.cpp b/clang/lib/Sema/CodeCompleteConsumer.cpp index fefe20941f179..927b067797275 100644 --- a/clang/lib/Sema/CodeCompleteConsumer.cpp +++ b/clang/lib/Sema/CodeCompleteConsumer.cpp @@ -621,8 +621,7 @@ void PrintingCodeCompleteConsumer::ProcessCodeCompleteResults( std::stable_sort(Results, Results + NumResults); if (!Context.getPreferredType().isNull()) - OS << "PREFERRED-TYPE: " << Context.getPreferredType().getAsString() - << "\n"; + OS << "PREFERRED-TYPE: " << Context.getPreferredType() << '\n'; StringRef Filter = SemaRef.getPreprocessor().getCodeCompletionFilter(); // Print the completions. diff --git a/clang/lib/Sema/SemaInit.cpp b/clang/lib/Sema/SemaInit.cpp index f76fd92d09d3b..2a49627ecf106 100644 --- a/clang/lib/Sema/SemaInit.cpp +++ b/clang/lib/Sema/SemaInit.cpp @@ -3467,7 +3467,7 @@ unsigned InitializedEntity::dumpImpl(raw_ostream &OS) const { D->printQualifiedName(OS); } - OS << " '" << getType().getAsString() << "'\n"; + OS << " '" << getType() << "'\n"; return Depth + 1; } @@ -9800,7 +9800,7 @@ void InitializationSequence::dump(raw_ostream &OS) const { break; } - OS << " [" << S->Type.getAsString() << ']'; + OS << " [" << S->Type << ']'; } OS << '\n'; diff --git a/clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp index dd2185270321e..fbb924550a728 100644 --- a/clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp @@ -1046,23 +1046,20 @@ bool CStringChecker::SummarizeRegion(raw_ostream &os, ASTContext &Ctx, case MemRegion::CXXThisRegionKind: case MemRegion::CXXTempObjectRegionKind: os << "a C++ temp object of type " - << cast<TypedValueRegion>(MR)->getValueType().getAsString(); + << cast<TypedValueRegion>(MR)->getValueType(); return true; case MemRegion::NonParamVarRegionKind: - os << "a variable of type" - << cast<TypedValueRegion>(MR)->getValueType().getAsString(); + os << "a variable of type" << cast<TypedValueRegion>(MR)->getValueType(); return true; case MemRegion::ParamVarRegionKind: - os << "a parameter of type" - << cast<TypedValueRegion>(MR)->getValueType().getAsString(); + os << "a parameter of type" << cast<TypedValueRegion>(MR)->getValueType(); return true; case MemRegion::FieldRegionKind: - os << "a field of type " - << cast<TypedValueRegion>(MR)->getValueType().getAsString(); + os << "a field of type " << cast<TypedValueRegion>(MR)->getValueType(); return true; case MemRegion::ObjCIvarRegionKind: os << "an instance variable of type " - << cast<TypedValueRegion>(MR)->getValueType().getAsString(); + << cast<TypedValueRegion>(MR)->getValueType(); return true; default: return false; diff --git a/clang/lib/StaticAnalyzer/Checkers/CheckObjCInstMethSignature.cpp b/clang/lib/StaticAnalyzer/Checkers/CheckObjCInstMethSignature.cpp index a13de306eac84..c8fe5c2ccf384 100644 --- a/clang/lib/StaticAnalyzer/Checkers/CheckObjCInstMethSignature.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/CheckObjCInstMethSignature.cpp @@ -55,13 +55,11 @@ static void CompareReturnTypes(const ObjCMethodDecl *MethDerived, << *MethAncestor->getClassInterface() << "', defines the instance method '"; MethDerived->getSelector().print(os); - os << "' whose return type is '" - << ResDerived.getAsString() + os << "' whose return type is '" << ResDerived << "'. A method with the same name (same selector) is also defined in " "class '" - << *MethAncestor->getClassInterface() - << "' and has a return type of '" - << ResAncestor.getAsString() + << *MethAncestor->getClassInterface() << "' and has a return type of '" + << ResAncestor << "'. These two types are incompatible, and may result in undefined " "behavior for clients of these classes."; diff --git a/clang/lib/StaticAnalyzer/Checkers/CheckSecuritySyntaxOnly.cpp b/clang/lib/StaticAnalyzer/Checkers/CheckSecuritySyntaxOnly.cpp index 61ff5e59f06dd..ef0965a70d7e7 100644 --- a/clang/lib/StaticAnalyzer/Checkers/CheckSecuritySyntaxOnly.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/CheckSecuritySyntaxOnly.cpp @@ -325,7 +325,7 @@ void WalkAST::checkLoopConditionForFloat(const ForStmt *FS) { llvm::raw_svector_ostream os(sbuf); os << "Variable '" << drCond->getDecl()->getName() - << "' with floating point type '" << drCond->getType().getAsString() + << "' with floating point type '" << drCond->getType() << "' should not be used as a loop counter"; ranges.push_back(drCond->getSourceRange()); diff --git a/clang/lib/StaticAnalyzer/Checkers/InnerPointerChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/InnerPointerChecker.cpp index 6f9867b9607d4..a50674dc70f42 100644 --- a/clang/lib/StaticAnalyzer/Checkers/InnerPointerChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/InnerPointerChecker.cpp @@ -320,8 +320,7 @@ PathDiagnosticPieceRef InnerPointerChecker::InnerPointerBRVisitor::VisitNode( SmallString<256> Buf; llvm::raw_svector_ostream OS(Buf); - OS << "Pointer to inner buffer of '" << ObjTy.getAsString() - << "' obtained here"; + OS << "Pointer to inner buffer of '" << ObjTy << "' obtained here"; PathDiagnosticLocation Pos(S, BRC.getSourceManager(), N->getLocationContext()); return std::make_shared<PathDiagnosticEventPiece>(Pos, OS.str(), true); diff --git a/clang/lib/StaticAnalyzer/Checkers/LLVMConventionsChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/LLVMConventionsChecker.cpp index 1f3d8844d330e..fa51aa80216b4 100644 --- a/clang/lib/StaticAnalyzer/Checkers/LLVMConventionsChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/LLVMConventionsChecker.cpp @@ -273,7 +273,7 @@ void ASTFieldVisitor::ReportError(QualType T) { os << (*I)->getName(); } } - os << " (type " << FieldChain.back()->getType().getAsString() << ")"; + os << " (type " << FieldChain.back()->getType() << ")"; // Note that this will fire for every translation unit that uses this // class. This is suboptimal, but at least scan-build will merge diff --git a/clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp index 790a2fa4059d1..5fdcec47ee267 100644 --- a/clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp @@ -3445,7 +3445,7 @@ PathDiagnosticPieceRef MallocBugVisitor::VisitNode(const ExplodedNode *N, allocation_state::getContainerObjRegion(statePrev, Sym); const auto *TypedRegion = cast<TypedValueRegion>(ObjRegion); QualType ObjTy = TypedRegion->getValueType(); - OS << "Inner buffer of '" << ObjTy.getAsString() << "' "; + OS << "Inner buffer of '" << ObjTy << "' "; if (N->getLocation().getKind() == ProgramPoint::PostImplicitCallKind) { OS << "deallocated by call to destructor"; diff --git a/clang/lib/StaticAnalyzer/Checkers/MallocSizeofChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/MallocSizeofChecker.cpp index 4b5206a102b87..58ba3dac69aba 100644 --- a/clang/lib/StaticAnalyzer/Checkers/MallocSizeofChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/MallocSizeofChecker.cpp @@ -228,9 +228,9 @@ class MallocSizeofChecker : public Checker<check::ASTCodeBody> { OS << '\'' << Callee->getIdentifier()->getName() << '\''; else OS << "call"; - OS << " is converted to a pointer of type '" - << PointeeType.getAsString() << "', which is incompatible with " - << "sizeof operand type '" << SizeofType.getAsString() << "'"; + OS << " is converted to a pointer of type '" << PointeeType + << "', which is incompatible with " + << "sizeof operand type '" << SizeofType << "'"; SmallVector<SourceRange, 4> Ranges; Ranges.push_back(i->AllocCall->getCallee()->getSourceRange()); Ranges.push_back(SFinder.Sizeofs[0]->getSourceRange()); diff --git a/clang/lib/StaticAnalyzer/Checkers/NumberObjectConversionChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/NumberObjectConversionChecker.cpp index df01cc760e7e9..3e9fc696f8e67 100644 --- a/clang/lib/StaticAnalyzer/Checkers/NumberObjectConversionChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/NumberObjectConversionChecker.cpp @@ -143,7 +143,7 @@ void Callback::run(const MatchFinder::MatchResult &Result) { else OS << "Converting "; - OS << "a pointer value of type '" << ObjT.getAsString() << "' to a "; + OS << "a pointer value of type '" << ObjT << "' to a "; std::string EuphemismForPlain = "primitive"; std::string SuggestedApi = IsObjC ? (IsInteger ? "" : "-boolValue") diff --git a/clang/lib/StaticAnalyzer/Checkers/ObjCContainersASTChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/ObjCContainersASTChecker.cpp index 8428b2294ba6f..6688278a7a336 100644 --- a/clang/lib/StaticAnalyzer/Checkers/ObjCContainersASTChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/ObjCContainersASTChecker.cpp @@ -135,9 +135,9 @@ void WalkAST::VisitCallExpr(CallExpr *CE) { llvm::raw_svector_ostream Os(Buf); // Use "second" and "third" since users will expect 1-based indexing // for parameter names when mentioned in prose. - Os << " The "<< ((ArgNum == 1) ? "second" : "third") << " argument to '" - << Name << "' must be a C array of pointer-sized values, not '" - << Arg->getType().getAsString() << "'"; + Os << " The " << ((ArgNum == 1) ? "second" : "third") << " argument to '" + << Name << "' must be a C array of pointer-sized values, not '" + << Arg->getType() << "'"; PathDiagnosticLocation CELoc = PathDiagnosticLocation::createBegin(CE, BR.getSourceManager(), AC); diff --git a/clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.cpp index f43b8d95f0d1f..bee7c468812cd 100644 --- a/clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.cpp @@ -45,7 +45,7 @@ static ProgramStateRef removeRefBinding(ProgramStateRef State, SymbolRef Sym) { void RefVal::print(raw_ostream &Out) const { if (!T.isNull()) - Out << "Tracked " << T.getAsString() << " | "; + Out << "Tracked " << T << " | "; switch (getKind()) { default: llvm_unreachable("Invalid RefVal kind"); diff --git a/clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountDiagnostics.cpp b/clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountDiagnostics.cpp index 41ef45d317cd8..5109ae668686c 100644 --- a/clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountDiagnostics.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountDiagnostics.cpp @@ -261,14 +261,12 @@ static void generateDiagnosticsForCallLike(ProgramStateRef CurrSt, } if (CurrV.getObjKind() == ObjKind::CF) { - os << "a Core Foundation object of type '" - << Sym->getType().getAsString() << "' with a "; + os << "a Core Foundation object of type '" << Sym->getType() << "' with a "; } else if (CurrV.getObjKind() == ObjKind::OS) { os << "an OSObject of type '" << findAllocatedObjectName(S, Sym->getType()) << "' with a "; } else if (CurrV.getObjKind() == ObjKind::Generalized) { - os << "an object of type '" << Sym->getType().getAsString() - << "' with a "; + os << "an object of type '" << Sym->getType() << "' with a "; } else { assert(CurrV.getObjKind() == ObjKind::ObjC); QualType T = Sym->getType(); @@ -276,8 +274,7 @@ static void generateDiagnosticsForCallLike(ProgramStateRef CurrSt, os << "an Objective-C object with a "; } else { const ObjCObjectPointerType *PT = cast<ObjCObjectPointerType>(T); - os << "an instance of " << PT->getPointeeType().getAsString() - << " with a "; + os << "an instance of " << PT->getPointeeType() << " with a "; } } diff --git a/clang/lib/StaticAnalyzer/Checkers/UndefResultChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/UndefResultChecker.cpp index 477d910bc653b..6d49af843b972 100644 --- a/clang/lib/StaticAnalyzer/Checkers/UndefResultChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/UndefResultChecker.cpp @@ -145,7 +145,7 @@ void UndefResultChecker::checkPostStmt(const BinaryOperator *B, OS << '\'' << I->getSExtValue() << "\', which is"; OS << " greater or equal to the width of type '" - << B->getLHS()->getType().getAsString() << "'."; + << B->getLHS()->getType() << "'."; } else if (B->getOpcode() == BinaryOperatorKind::BO_Shl && C.isNegative(B->getLHS())) { OS << "The result of the left shift is undefined because the left " @@ -162,8 +162,7 @@ void UndefResultChecker::checkPostStmt(const BinaryOperator *B, OS << "The result of the left shift is undefined due to shifting \'" << LHS->getSExtValue() << "\' by \'" << RHS->getZExtValue() << "\', which is unrepresentable in the unsigned version of " - << "the return type \'" << B->getLHS()->getType().getAsString() - << "\'"; + << "the return type \'" << B->getLHS()->getType() << "\'"; Ex = B->getLHS(); } else { OS << "The result of the '" diff --git a/clang/lib/StaticAnalyzer/Core/DynamicType.cpp b/clang/lib/StaticAnalyzer/Core/DynamicType.cpp index 9ed915aafcab0..06052cb99fd18 100644 --- a/clang/lib/StaticAnalyzer/Core/DynamicType.cpp +++ b/clang/lib/StaticAnalyzer/Core/DynamicType.cpp @@ -209,7 +209,7 @@ static raw_ostream &printJson(const DynamicTypeInfo &DTI, raw_ostream &Out, if (ToPrint->isAnyPointerType()) ToPrint = ToPrint->getPointeeType(); - Out << '\"' << ToPrint.getAsString() << "\", \"sub_classable\": " + Out << '\"' << ToPrint << "\", \"sub_classable\": " << (DTI.canBeASubClass() ? "true" : "false"); } return Out; @@ -217,9 +217,9 @@ static raw_ostream &printJson(const DynamicTypeInfo &DTI, raw_ostream &Out, static raw_ostream &printJson(const DynamicCastInfo &DCI, raw_ostream &Out, const char *NL, unsigned int Space, bool IsDot) { - return Out << "\"from\": \"" << DCI.from().getAsString() << "\", \"to\": \"" - << DCI.to().getAsString() << "\", \"kind\": \"" - << (DCI.succeeds() ? "success" : "fail") << "\""; + return Out << "\"from\": \"" << DCI.from() << "\", \"to\": \"" << DCI.to() + << "\", \"kind\": \"" << (DCI.succeeds() ? "success" : "fail") + << "\""; } template <class T, class U> diff --git a/clang/lib/StaticAnalyzer/Core/MemRegion.cpp b/clang/lib/StaticAnalyzer/Core/MemRegion.cpp index 18c1a65684abd..c969f2ded104f 100644 --- a/clang/lib/StaticAnalyzer/Core/MemRegion.cpp +++ b/clang/lib/StaticAnalyzer/Core/MemRegion.cpp @@ -480,7 +480,7 @@ void CompoundLiteralRegion::dumpToStream(raw_ostream &os) const { } void CXXTempObjectRegion::dumpToStream(raw_ostream &os) const { - os << "temp_object{" << getValueType().getAsString() << ", " + os << "temp_object{" << getValueType() << ", " << "S" << Ex->getID(getContext()) << '}'; } @@ -497,8 +497,8 @@ void CXXThisRegion::dumpToStream(raw_ostream &os) const { } void ElementRegion::dumpToStream(raw_ostream &os) const { - os << "Element{" << superRegion << ',' - << Index << ',' << getElementType().getAsString() << '}'; + os << "Element{" << superRegion << ',' << Index << ',' << getElementType() + << '}'; } void FieldRegion::dumpToStream(raw_ostream &os) const { diff --git a/clang/lib/StaticAnalyzer/Core/SVals.cpp b/clang/lib/StaticAnalyzer/Core/SVals.cpp index 117546e43b1a1..510d0d2fb6276 100644 --- a/clang/lib/StaticAnalyzer/Core/SVals.cpp +++ b/clang/lib/StaticAnalyzer/Core/SVals.cpp @@ -401,7 +401,7 @@ void NonLoc::dumpToStream(raw_ostream &os) const { else os << ", "; - os << (*I).getType().getAsString(); + os << I->getType(); } os << '}'; diff --git a/clang/lib/StaticAnalyzer/Core/SymbolManager.cpp b/clang/lib/StaticAnalyzer/Core/SymbolManager.cpp index 1ae1f97efd2e4..59964ad5ab3b7 100644 --- a/clang/lib/StaticAnalyzer/Core/SymbolManager.cpp +++ b/clang/lib/StaticAnalyzer/Core/SymbolManager.cpp @@ -65,14 +65,13 @@ void BinarySymExpr::dumpToStreamImpl(raw_ostream &OS, } void SymbolCast::dumpToStream(raw_ostream &os) const { - os << '(' << ToTy.getAsString() << ") ("; + os << '(' << ToTy << ") ("; Operand->dumpToStream(os); os << ')'; } void SymbolConjured::dumpToStream(raw_ostream &os) const { - os << getKindStr() << getSymbolID() << '{' << T.getAsString() << ", LC" - << LCtx->getID(); + os << getKindStr() << getSymbolID() << '{' << T << ", LC" << LCtx->getID(); if (S) os << ", S" << S->getID(LCtx->getDecl()->getASTContext()); else @@ -90,15 +89,13 @@ void SymbolExtent::dumpToStream(raw_ostream &os) const { } void SymbolMetadata::dumpToStream(raw_ostream &os) const { - os << getKindStr() << getSymbolID() << '{' << getRegion() << ',' - << T.getAsString() << '}'; + os << getKindStr() << getSymbolID() << '{' << getRegion() << ',' << T << '}'; } void SymbolData::anchor() {} void SymbolRegionValue::dumpToStream(raw_ostream &os) const { - os << getKindStr() << getSymbolID() << '<' << getType().getAsString() << ' ' - << R << '>'; + os << getKindStr() << getSymbolID() << '<' << getType() << ' ' << R << '>'; } bool SymExpr::symbol_iterator::operator==(const symbol_iterator &X) const { diff --git a/clang/unittests/AST/ASTTraverserTest.cpp b/clang/unittests/AST/ASTTraverserTest.cpp index b8eff747e3b50..9d32a3d4116d1 100644 --- a/clang/unittests/AST/ASTTraverserTest.cpp +++ b/clang/unittests/AST/ASTTraverserTest.cpp @@ -60,7 +60,7 @@ class NodeTreePrinter : public TextTreeStructure { if (const auto *F = Init->getAnyMember()) { OS << " '" << F->getNameAsString() << "'"; } else if (auto const *TSI = Init->getTypeSourceInfo()) { - OS << " '" << TSI->getType().getAsString() << "'"; + OS << " '" << TSI->getType() << "'"; } } @@ -81,7 +81,7 @@ class NodeTreePrinter : public TextTreeStructure { OS << "TemplateArgument"; switch (A.getKind()) { case TemplateArgument::Type: { - OS << " type " << A.getAsType().getAsString(); + OS << " type " << A.getAsType(); break; } default: _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits