Author: Tim Gymnich Date: 2026-06-19T17:22:47+02:00 New Revision: 467a5fe378edfce2d495417c1b224cc2967570a2
URL: https://github.com/llvm/llvm-project/commit/467a5fe378edfce2d495417c1b224cc2967570a2 DIFF: https://github.com/llvm/llvm-project/commit/467a5fe378edfce2d495417c1b224cc2967570a2.diff LOG: [clang] Avoid premature Twine .str() materialization (#204830) Several call sites pass `expr.str()` to parameters of type `const llvm::Twine &`, forcing a throwaway heap std::string that is immediately rewrapped into a Twine. Drop the `.str()` and let Twine accept the StringRef/concatenation directly. Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]> Added: Modified: clang/lib/Analysis/FlowSensitive/FormulaSerialization.cpp clang/lib/CodeGen/CGHLSLRuntime.cpp clang/lib/Driver/Driver.cpp clang/lib/Driver/ToolChains/Clang.cpp clang/lib/Format/Format.cpp clang/lib/Frontend/DependencyFile.cpp clang/lib/Parse/ParseOpenMP.cpp clang/lib/Sema/SemaDecl.cpp clang/lib/StaticAnalyzer/Checkers/Yaml.h Removed: ################################################################################ diff --git a/clang/lib/Analysis/FlowSensitive/FormulaSerialization.cpp b/clang/lib/Analysis/FlowSensitive/FormulaSerialization.cpp index 4fe2231b9ff65..5808d6708b44d 100644 --- a/clang/lib/Analysis/FlowSensitive/FormulaSerialization.cpp +++ b/clang/lib/Analysis/FlowSensitive/FormulaSerialization.cpp @@ -203,9 +203,8 @@ parseFormula(llvm::StringRef Str, Arena &A, return F.takeError(); if (!Str.empty()) return llvm::createStringError(llvm::inconvertibleErrorCode(), - ("unexpected suffix of length: " + - llvm::Twine(Str.size() - OriginalSize)) - .str()); + "unexpected suffix of length: " + + llvm::Twine(Str.size() - OriginalSize)); return F; } diff --git a/clang/lib/CodeGen/CGHLSLRuntime.cpp b/clang/lib/CodeGen/CGHLSLRuntime.cpp index 4ecab6ba79553..ab55b2281fd06 100644 --- a/clang/lib/CodeGen/CGHLSLRuntime.cpp +++ b/clang/lib/CodeGen/CGHLSLRuntime.cpp @@ -1522,10 +1522,10 @@ static void initializeBuffer(CodeGenModule &CGM, llvm::GlobalVariable *GV, ArrayRef<llvm::Value *> Args) { LLVMContext &Ctx = CGM.getLLVMContext(); - llvm::Function *InitResFunc = llvm::Function::Create( - llvm::FunctionType::get(CGM.VoidTy, false), - llvm::GlobalValue::InternalLinkage, - ("_init_buffer_" + GV->getName()).str(), CGM.getModule()); + llvm::Function *InitResFunc = + llvm::Function::Create(llvm::FunctionType::get(CGM.VoidTy, false), + llvm::GlobalValue::InternalLinkage, + "_init_buffer_" + GV->getName(), CGM.getModule()); InitResFunc->addFnAttr(llvm::Attribute::AlwaysInline); llvm::BasicBlock *EntryBB = diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 8f189ea189408..d153e99d37280 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -6503,7 +6503,7 @@ const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA, StringRef FcValue = C.getArgs().getLastArgValue(options::OPT_dxc_Fc); // TODO: Should we use `MakeCLOutputFilename` here? If so, we can probably // handle this as part of the SLASH_Fa handling below. - return C.addResultFile(C.getArgs().MakeArgString(FcValue.str()), &JA); + return C.addResultFile(C.getArgs().MakeArgString(FcValue), &JA); } if ((JA.getType() == types::TY_Object && @@ -6519,7 +6519,7 @@ const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA, // that is using Fc or just printing disassembly. if (TC.isLastOutputProducingJob(C.getArgs(), JA.getKind()) && !FoValue.empty()) - return C.addResultFile(C.getArgs().MakeArgString(FoValue.str()), &JA); + return C.addResultFile(C.getArgs().MakeArgString(FoValue), &JA); StringRef Name = llvm::sys::path::filename(BaseInput); std::pair<StringRef, StringRef> Split = Name.split('.'); const char *Suffix = types::getTypeTempSuffix(JA.getType(), true); diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 0cbb1f18809f7..75b98b89a6546 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -1943,7 +1943,7 @@ void Clang::AddPPCTargetArgs(const ArgList &Args, if (Arg *A = Args.getLastArg(options::OPT_mtune_EQ)) { CmdArgs.push_back("-tune-cpu"); StringRef CPU = llvm::PPC::getNormalizedPPCTuneCPU(T, A->getValue()); - CmdArgs.push_back(Args.MakeArgString(CPU.str())); + CmdArgs.push_back(Args.MakeArgString(CPU)); } // Select the ABI to use. diff --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp index a29d62c99bb95..51a976783b589 100644 --- a/clang/lib/Format/Format.cpp +++ b/clang/lib/Format/Format.cpp @@ -4630,7 +4630,7 @@ loadAndParseConfigFile(StringRef ConfigFile, llvm::vfs::FileSystem *FS, llvm::SourceMgr::DiagHandlerTy DiagHandler, bool IsDotHFile) { llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> Text = - FS->getBufferForFile(ConfigFile.str()); + FS->getBufferForFile(ConfigFile); if (auto EC = Text.getError()) return EC; if (auto EC = parseConfiguration(*Text.get(), Style, AllowUnknownOptions, diff --git a/clang/lib/Frontend/DependencyFile.cpp b/clang/lib/Frontend/DependencyFile.cpp index d56e17f14e9bc..00f4a54269cfa 100644 --- a/clang/lib/Frontend/DependencyFile.cpp +++ b/clang/lib/Frontend/DependencyFile.cpp @@ -345,7 +345,7 @@ static void PrintFilename(raw_ostream &OS, StringRef Filename, DependencyOutputFormat OutputFormat) { // Convert filename to platform native path llvm::SmallString<256> NativePath; - llvm::sys::path::native(Filename.str(), NativePath); + llvm::sys::path::native(Filename, NativePath); if (OutputFormat == DependencyOutputFormat::NMake) { // Add quotes if needed. These are the characters listed as "special" to diff --git a/clang/lib/Parse/ParseOpenMP.cpp b/clang/lib/Parse/ParseOpenMP.cpp index 58d6df302d1a7..af52295df2d8b 100644 --- a/clang/lib/Parse/ParseOpenMP.cpp +++ b/clang/lib/Parse/ParseOpenMP.cpp @@ -1283,8 +1283,7 @@ void Parser::parseOMPContextSelectorSet( Diag(Tok.getLocation(), diag::warn_omp_declare_variant_expected) << "=" << ("context set name \"" + getOpenMPContextTraitSetName(TISet.Kind) + - "\"") - .str(); + "\""); // Parse '{'. if (Tok.is(tok::l_brace)) { diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index cddcf3a010279..d45c3eb35094f 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -11418,7 +11418,7 @@ static bool CheckMultiVersionValue(Sema &S, const FunctionDecl *FD) { auto BareFeat = StringRef{Feat}.substr(1); if (Feat[0] == '-') { S.Diag(FD->getLocation(), diag::err_bad_multiversion_option) - << Feature << ("no-" + BareFeat).str(); + << Feature << ("no-" + BareFeat); return true; } diff --git a/clang/lib/StaticAnalyzer/Checkers/Yaml.h b/clang/lib/StaticAnalyzer/Checkers/Yaml.h index ec521cbfcdc8e..4bb54e8aa8c12 100644 --- a/clang/lib/StaticAnalyzer/Checkers/Yaml.h +++ b/clang/lib/StaticAnalyzer/Checkers/Yaml.h @@ -37,7 +37,7 @@ std::optional<T> getConfiguration(CheckerManager &Mgr, Checker *Chk, .getFileManager() .getVirtualFileSystem(); llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> Buffer = - VFS.getBufferForFile(ConfigFile.str()); + VFS.getBufferForFile(ConfigFile); if (Buffer.getError()) { Mgr.reportInvalidCheckerOptionValue(Chk, Option, _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
