From 0772c42385c0d005db0ba75ecbcc54d353763282 Mon Sep 17 00:00:00 2001 From: Benjamin Kramer Date: Sat, 13 Feb 2016 13:42:54 +0000 Subject: [PATCH] Reduce the number of implicit StringRef->std::string conversions by threading StringRef through more APIs. No functionality change intended. llvm-svn: 260815 --- clang/include/clang/ASTMatchers/ASTMatchers.h | 5 +++-- .../clang/ASTMatchers/ASTMatchersInternal.h | 2 +- clang/include/clang/Serialization/ASTReader.h | 2 +- .../Core/BugReporter/PathDiagnostic.h | 4 ++-- clang/lib/ASTMatchers/ASTMatchersInternal.cpp | 5 +++-- clang/lib/CodeGen/CGObjCGNU.cpp | 2 +- clang/lib/CodeGen/CGObjCMac.cpp | 6 +++--- clang/lib/CodeGen/CGObjCRuntime.h | 2 +- clang/lib/Frontend/CacheTokens.cpp | 4 ++-- clang/lib/Frontend/CompilerInstance.cpp | 2 +- clang/lib/Frontend/PrintPreprocessedOutput.cpp | 22 ++++++++++------------ clang/lib/Index/CommentToXML.cpp | 5 ++--- clang/lib/Serialization/ASTReader.cpp | 2 +- clang/lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp | 6 +++--- clang/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp | 2 +- clang/tools/driver/driver.cpp | 2 +- 16 files changed, 36 insertions(+), 37 deletions(-) diff --git a/clang/include/clang/ASTMatchers/ASTMatchers.h b/clang/include/clang/ASTMatchers/ASTMatchers.h index ea81028..5192ac3 100644 --- a/clang/include/clang/ASTMatchers/ASTMatchers.h +++ b/clang/include/clang/ASTMatchers/ASTMatchers.h @@ -1844,8 +1844,9 @@ inline internal::Matcher sizeOfExpr( /// \code /// namespace a { namespace b { class X; } } /// \endcode -inline internal::Matcher hasName(const std::string &Name) { - return internal::Matcher(new internal::HasNameMatcher(Name)); +inline internal::Matcher hasName(std::string Name) { + return internal::Matcher( + new internal::HasNameMatcher(std::move(Name))); } /// \brief Matches NamedDecl nodes whose fully qualified names contain diff --git a/clang/include/clang/ASTMatchers/ASTMatchersInternal.h b/clang/include/clang/ASTMatchers/ASTMatchersInternal.h index a8242cc..8600dc5 100644 --- a/clang/include/clang/ASTMatchers/ASTMatchersInternal.h +++ b/clang/include/clang/ASTMatchers/ASTMatchersInternal.h @@ -640,7 +640,7 @@ private: /// See \c hasName() in ASTMatchers.h for details. class HasNameMatcher : public SingleNodeMatcherInterface { public: - explicit HasNameMatcher(StringRef Name); + explicit HasNameMatcher(std::string Name); bool matchesNode(const NamedDecl &Node) const override; diff --git a/clang/include/clang/Serialization/ASTReader.h b/clang/include/clang/Serialization/ASTReader.h index 588a6a9..ca54d8f2 100644 --- a/clang/include/clang/Serialization/ASTReader.h +++ b/clang/include/clang/Serialization/ASTReader.h @@ -1364,7 +1364,7 @@ public: /// \param ClientLoadCapabilities The set of client load-failure /// capabilities, represented as a bitset of the enumerators of /// LoadFailureCapabilities. - ASTReadResult ReadAST(const std::string &FileName, ModuleKind Type, + ASTReadResult ReadAST(StringRef FileName, ModuleKind Type, SourceLocation ImportLoc, unsigned ClientLoadCapabilities); diff --git a/clang/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h b/clang/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h index 35421f9..c34b14c 100644 --- a/clang/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h +++ b/clang/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h @@ -774,8 +774,8 @@ public: void appendToDesc(StringRef S) { if (!ShortDesc.empty()) - ShortDesc.append(S); - VerboseDesc.append(S); + ShortDesc += S; + VerboseDesc += S; } void resetPath() { diff --git a/clang/lib/ASTMatchers/ASTMatchersInternal.cpp b/clang/lib/ASTMatchers/ASTMatchersInternal.cpp index 47054d8..9905f1e 100644 --- a/clang/lib/ASTMatchers/ASTMatchersInternal.cpp +++ b/clang/lib/ASTMatchers/ASTMatchersInternal.cpp @@ -293,8 +293,9 @@ bool AnyOfVariadicOperator(const ast_type_traits::DynTypedNode &DynNode, return false; } -HasNameMatcher::HasNameMatcher(StringRef NameRef) - : UseUnqualifiedMatch(NameRef.find("::") == NameRef.npos), Name(NameRef) { +HasNameMatcher::HasNameMatcher(std::string NameRef) + : UseUnqualifiedMatch(NameRef.find("::") == NameRef.npos), + Name(std::move(NameRef)) { assert(!Name.empty()); } diff --git a/clang/lib/CodeGen/CGObjCGNU.cpp b/clang/lib/CodeGen/CGObjCGNU.cpp index 2ca0f1a..bbe1b8b 100644 --- a/clang/lib/CodeGen/CGObjCGNU.cpp +++ b/clang/lib/CodeGen/CGObjCGNU.cpp @@ -591,7 +591,7 @@ public: return NULLPtr; } - llvm::GlobalVariable *GetClassGlobal(const std::string &Name, + llvm::GlobalVariable *GetClassGlobal(StringRef Name, bool Weak = false) override { return nullptr; } diff --git a/clang/lib/CodeGen/CGObjCMac.cpp b/clang/lib/CodeGen/CGObjCMac.cpp index ebc716e..1f81324 100644 --- a/clang/lib/CodeGen/CGObjCMac.cpp +++ b/clang/lib/CodeGen/CGObjCMac.cpp @@ -1256,7 +1256,7 @@ public: /// GetClassGlobal - Return the global variable for the Objective-C /// class of the given name. - llvm::GlobalVariable *GetClassGlobal(const std::string &Name, + llvm::GlobalVariable *GetClassGlobal(StringRef Name, bool Weak = false) override { llvm_unreachable("CGObjCMac::GetClassGlobal"); } @@ -1358,7 +1358,7 @@ private: /// GetClassGlobal - Return the global variable for the Objective-C /// class of the given name. - llvm::GlobalVariable *GetClassGlobal(const std::string &Name, + llvm::GlobalVariable *GetClassGlobal(StringRef Name, bool Weak = false) override; /// EmitClassRef - Return a Value*, of type ObjCTypes.ClassPtrTy, @@ -6834,7 +6834,7 @@ CGObjCNonFragileABIMac::GenerateMessageSend(CodeGen::CodeGenFunction &CGF, } llvm::GlobalVariable * -CGObjCNonFragileABIMac::GetClassGlobal(const std::string &Name, bool Weak) { +CGObjCNonFragileABIMac::GetClassGlobal(StringRef Name, bool Weak) { llvm::GlobalValue::LinkageTypes L = Weak ? llvm::GlobalValue::ExternalWeakLinkage : llvm::GlobalValue::ExternalLinkage; diff --git a/clang/lib/CodeGen/CGObjCRuntime.h b/clang/lib/CodeGen/CGObjCRuntime.h index 28d88dd..6c33059 100644 --- a/clang/lib/CodeGen/CGObjCRuntime.h +++ b/clang/lib/CodeGen/CGObjCRuntime.h @@ -280,7 +280,7 @@ public: virtual llvm::Constant *BuildByrefLayout(CodeGen::CodeGenModule &CGM, QualType T) = 0; - virtual llvm::GlobalVariable *GetClassGlobal(const std::string &Name, + virtual llvm::GlobalVariable *GetClassGlobal(StringRef Name, bool Weak = false) = 0; struct MessageSendInfo { diff --git a/clang/lib/Frontend/CacheTokens.cpp b/clang/lib/Frontend/CacheTokens.cpp index 87f3d17..15b0ada 100644 --- a/clang/lib/Frontend/CacheTokens.cpp +++ b/clang/lib/Frontend/CacheTokens.cpp @@ -241,7 +241,7 @@ public: : Out(out), PP(pp), idcount(0), CurStrOffset(0) {} PTHMap &getPM() { return PM; } - void GeneratePTH(const std::string &MainFile); + void GeneratePTH(StringRef MainFile); }; } // end anonymous namespace @@ -479,7 +479,7 @@ static void pwrite32le(raw_pwrite_stream &OS, uint32_t Val, uint64_t &Off) { Off += 4; } -void PTHWriter::GeneratePTH(const std::string &MainFile) { +void PTHWriter::GeneratePTH(StringRef MainFile) { // Generate the prologue. Out << "cfe-pth" << '\0'; Emit32(PTHManager::Version); diff --git a/clang/lib/Frontend/CompilerInstance.cpp b/clang/lib/Frontend/CompilerInstance.cpp index 3edcf5d..2b940ce 100644 --- a/clang/lib/Frontend/CompilerInstance.cpp +++ b/clang/lib/Frontend/CompilerInstance.cpp @@ -467,7 +467,7 @@ IntrusiveRefCntPtr CompilerInstance::createPCHExternalASTSource( // Code Completion static bool EnableCodeCompletion(Preprocessor &PP, - const std::string &Filename, + StringRef Filename, unsigned Line, unsigned Column) { // Tell the source manager to chop off the given file at a specific diff --git a/clang/lib/Frontend/PrintPreprocessedOutput.cpp b/clang/lib/Frontend/PrintPreprocessedOutput.cpp index 8a90b56..88262eb 100644 --- a/clang/lib/Frontend/PrintPreprocessedOutput.cpp +++ b/clang/lib/Frontend/PrintPreprocessedOutput.cpp @@ -369,18 +369,16 @@ void PrintPPOutputPPCallbacks::MacroUndefined(const Token &MacroNameTok, setEmittedDirectiveOnThisLine(); } -static void outputPrintable(llvm::raw_ostream& OS, - const std::string &Str) { - for (unsigned i = 0, e = Str.size(); i != e; ++i) { - unsigned char Char = Str[i]; - if (isPrintable(Char) && Char != '\\' && Char != '"') - OS << (char)Char; - else // Output anything hard as an octal escape. - OS << '\\' - << (char)('0'+ ((Char >> 6) & 7)) - << (char)('0'+ ((Char >> 3) & 7)) - << (char)('0'+ ((Char >> 0) & 7)); - } +static void outputPrintable(raw_ostream &OS, StringRef Str) { + for (unsigned char Char : Str) { + if (isPrintable(Char) && Char != '\\' && Char != '"') + OS << (char)Char; + else // Output anything hard as an octal escape. + OS << '\\' + << (char)('0' + ((Char >> 6) & 7)) + << (char)('0' + ((Char >> 3) & 7)) + << (char)('0' + ((Char >> 0) & 7)); + } } void PrintPPOutputPPCallbacks::PragmaMessage(SourceLocation Loc, diff --git a/clang/lib/Index/CommentToXML.cpp b/clang/lib/Index/CommentToXML.cpp index 15f1696..c4beef2 100644 --- a/clang/lib/Index/CommentToXML.cpp +++ b/clang/lib/Index/CommentToXML.cpp @@ -592,9 +592,8 @@ void getSourceTextOfDeclaration(const DeclInfo *ThisDecl, void CommentASTToXMLConverter::formatTextOfDeclaration( const DeclInfo *DI, SmallString<128> &Declaration) { - // FIXME. formatting API expects null terminated input string. - // There might be more efficient way of doing this. - std::string StringDecl = Declaration.str(); + // Formatting API expects null terminated input string. + StringRef StringDecl(Declaration.c_str(), Declaration.size()); // Formatter specific code. // Form a unique in memory buffer name. diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp index ac78da2..82bc92c 100644 --- a/clang/lib/Serialization/ASTReader.cpp +++ b/clang/lib/Serialization/ASTReader.cpp @@ -3483,7 +3483,7 @@ static bool SkipCursorToBlock(BitstreamCursor &Cursor, unsigned BlockID) { } } -ASTReader::ASTReadResult ASTReader::ReadAST(const std::string &FileName, +ASTReader::ASTReadResult ASTReader::ReadAST(StringRef FileName, ModuleKind Type, SourceLocation ImportLoc, unsigned ClientLoadCapabilities) { diff --git a/clang/lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp b/clang/lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp index b3edb85..3a18956 100644 --- a/clang/lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp +++ b/clang/lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp @@ -412,13 +412,13 @@ void HTMLDiagnostics::HandlePiece(Rewriter& R, FileID BugFileID, // Output a maximum size. if (!isa(P)) { // Get the string and determining its maximum substring. - const std::string& Msg = P.getString(); + const auto &Msg = P.getString(); unsigned max_token = 0; unsigned cnt = 0; unsigned len = Msg.size(); - for (std::string::const_iterator I=Msg.begin(), E=Msg.end(); I!=E; ++I) - switch (*I) { + for (char C : Msg) + switch (C) { default: ++cnt; continue; diff --git a/clang/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp b/clang/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp index 55e1222..8ad931a 100644 --- a/clang/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp +++ b/clang/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp @@ -124,7 +124,7 @@ static void ReportControlFlow(raw_ostream &o, --indent; // Output any helper text. - const std::string& s = P.getString(); + const auto &s = P.getString(); if (!s.empty()) { Indent(o, indent) << "alternate"; EmitString(o, s) << '\n'; diff --git a/clang/tools/driver/driver.cpp b/clang/tools/driver/driver.cpp index de14425..bd3c533 100644 --- a/clang/tools/driver/driver.cpp +++ b/clang/tools/driver/driver.cpp @@ -130,7 +130,7 @@ static void ApplyOneQAOverride(raw_ostream &OS, } } } else if (Edit[0] == 'x' || Edit[0] == 'X') { - std::string Option = Edit.substr(1, std::string::npos); + auto Option = Edit.substr(1); for (unsigned i = 1; i < Args.size();) { if (Option == Args[i]) { OS << "### Deleting argument " << Args[i] << '\n'; -- 2.7.4