aganea created this revision. aganea added reviewers: hans, aheejin, jansvoboda11. Herald added a subscriber: dexonsmith. aganea requested review of this revision. Herald added projects: clang, LLVM. Herald added subscribers: llvm-commits, cfe-commits.
As reported in PR52704: https://github.com/llvm/llvm-project/issues/52704 Since the round-tripping generates function-local arguments, before this patch accessing `CodeGenOptions.CommandLineArgs` or `MCTargetOptions.CommandLineArgs` used to keep references on free'd data. +@hans for the `CC1Command` change which otherwise blocks the usage `append_range`. This was unconsistent with how `CommandLineArgs` were passed around in other places (without the terminating `nullptr` element). Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D116011 Files: clang/include/clang/Basic/CodeGenOptions.h clang/lib/Driver/Job.cpp clang/lib/Frontend/CompilerInvocation.cpp llvm/include/llvm/MC/MCTargetOptions.h Index: llvm/include/llvm/MC/MCTargetOptions.h =================================================================== --- llvm/include/llvm/MC/MCTargetOptions.h +++ llvm/include/llvm/MC/MCTargetOptions.h @@ -64,7 +64,7 @@ std::string SplitDwarfFile; const char *Argv0 = nullptr; - ArrayRef<const char *> CommandLineArgs; + ArrayRef<std::string> CommandLineArgs; /// Additional paths to search for `.include` directives when using the /// integrated assembler. Index: clang/lib/Frontend/CompilerInvocation.cpp =================================================================== --- clang/lib/Frontend/CompilerInvocation.cpp +++ clang/lib/Frontend/CompilerInvocation.cpp @@ -4520,7 +4520,7 @@ // Store the command-line for using in the CodeView backend. Res.getCodeGenOpts().Argv0 = Argv0; - Res.getCodeGenOpts().CommandLineArgs = CommandLineArgs; + append_range(Res.getCodeGenOpts().CommandLineArgs, CommandLineArgs); FixupInvocation(Res, Diags, Args, DashX); Index: clang/lib/Driver/Job.cpp =================================================================== --- clang/lib/Driver/Job.cpp +++ clang/lib/Driver/Job.cpp @@ -387,7 +387,6 @@ SmallVector<const char *, 128> Argv; Argv.push_back(getExecutable()); Argv.append(getArguments().begin(), getArguments().end()); - Argv.push_back(nullptr); // This flag simply indicates that the program couldn't start, which isn't // applicable here. Index: clang/include/clang/Basic/CodeGenOptions.h =================================================================== --- clang/include/clang/Basic/CodeGenOptions.h +++ clang/include/clang/Basic/CodeGenOptions.h @@ -395,7 +395,7 @@ /// Executable and command-line used to create a given CompilerInvocation. /// Most of the time this will be the full -cc1 command. const char *Argv0 = nullptr; - ArrayRef<const char *> CommandLineArgs; + std::vector<std::string> CommandLineArgs; /// The minimum hotness value a diagnostic needs in order to be included in /// optimization diagnostics.
Index: llvm/include/llvm/MC/MCTargetOptions.h =================================================================== --- llvm/include/llvm/MC/MCTargetOptions.h +++ llvm/include/llvm/MC/MCTargetOptions.h @@ -64,7 +64,7 @@ std::string SplitDwarfFile; const char *Argv0 = nullptr; - ArrayRef<const char *> CommandLineArgs; + ArrayRef<std::string> CommandLineArgs; /// Additional paths to search for `.include` directives when using the /// integrated assembler. Index: clang/lib/Frontend/CompilerInvocation.cpp =================================================================== --- clang/lib/Frontend/CompilerInvocation.cpp +++ clang/lib/Frontend/CompilerInvocation.cpp @@ -4520,7 +4520,7 @@ // Store the command-line for using in the CodeView backend. Res.getCodeGenOpts().Argv0 = Argv0; - Res.getCodeGenOpts().CommandLineArgs = CommandLineArgs; + append_range(Res.getCodeGenOpts().CommandLineArgs, CommandLineArgs); FixupInvocation(Res, Diags, Args, DashX); Index: clang/lib/Driver/Job.cpp =================================================================== --- clang/lib/Driver/Job.cpp +++ clang/lib/Driver/Job.cpp @@ -387,7 +387,6 @@ SmallVector<const char *, 128> Argv; Argv.push_back(getExecutable()); Argv.append(getArguments().begin(), getArguments().end()); - Argv.push_back(nullptr); // This flag simply indicates that the program couldn't start, which isn't // applicable here. Index: clang/include/clang/Basic/CodeGenOptions.h =================================================================== --- clang/include/clang/Basic/CodeGenOptions.h +++ clang/include/clang/Basic/CodeGenOptions.h @@ -395,7 +395,7 @@ /// Executable and command-line used to create a given CompilerInvocation. /// Most of the time this will be the full -cc1 command. const char *Argv0 = nullptr; - ArrayRef<const char *> CommandLineArgs; + std::vector<std::string> CommandLineArgs; /// The minimum hotness value a diagnostic needs in order to be included in /// optimization diagnostics.
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits