llvm-toolchain/debian/patches/bug-49827-revert-recent-change-to-path-2.diff
2021-04-03 23:04:39 +02:00

149 lines
7.5 KiB
Diff

commit 7e0cc45ced230b4ef3a9d8eaedfbe92e75f21916
Author: Sean Perry <perry@ca.ibm.com>
Date: Fri Mar 26 16:37:29 2021 -0400
[SystemZ][z/OS] Save strings for CC_PRINT env vars
The contents of the string returned by getenv() is not guaranteed across calls to getenv(). The code to handle the CC_PRINT etc env vars calls getenv() and saves the results in just a char *. The string returned by getenv() needs to be copied and saved. Switching the type of the strings from char * to std::string will do this and manage the alloated memory.
Differential Revision: https://reviews.llvm.org/D98554
Index: llvm-toolchain-snapshot_13~++20210403105842+b32e76c6d507/clang/include/clang/Driver/Driver.h
===================================================================
--- llvm-toolchain-snapshot_13~++20210403105842+b32e76c6d507.orig/clang/include/clang/Driver/Driver.h
+++ llvm-toolchain-snapshot_13~++20210403105842+b32e76c6d507/clang/include/clang/Driver/Driver.h
@@ -158,16 +158,16 @@ public:
std::string HostBits, HostMachine, HostSystem, HostRelease;
/// The file to log CC_PRINT_PROC_STAT_FILE output to, if enabled.
- std::string CCPrintStatReportFilename;
+ const char *CCPrintStatReportFilename;
/// The file to log CC_PRINT_OPTIONS output to, if enabled.
- std::string CCPrintOptionsFilename;
+ const char *CCPrintOptionsFilename;
/// The file to log CC_PRINT_HEADERS output to, if enabled.
- std::string CCPrintHeadersFilename;
+ const char *CCPrintHeadersFilename;
/// The file to log CC_LOG_DIAGNOSTICS output to, if enabled.
- std::string CCLogDiagnosticsFilename;
+ const char *CCLogDiagnosticsFilename;
/// A list of inputs and their types for the given arguments.
typedef SmallVector<std::pair<types::ID, const llvm::opt::Arg *>, 16>
Index: llvm-toolchain-snapshot_13~++20210403105842+b32e76c6d507/clang/lib/Driver/Compilation.cpp
===================================================================
--- llvm-toolchain-snapshot_13~++20210403105842+b32e76c6d507.orig/clang/lib/Driver/Compilation.cpp
+++ llvm-toolchain-snapshot_13~++20210403105842+b32e76c6d507/clang/lib/Driver/Compilation.cpp
@@ -170,11 +170,10 @@ int Compilation::ExecuteCommand(const Co
// Follow gcc implementation of CC_PRINT_OPTIONS; we could also cache the
// output stream.
- if (getDriver().CCPrintOptions &&
- !getDriver().CCPrintOptionsFilename.empty()) {
+ if (getDriver().CCPrintOptions && getDriver().CCPrintOptionsFilename) {
std::error_code EC;
OwnedStream.reset(new llvm::raw_fd_ostream(
- getDriver().CCPrintOptionsFilename.c_str(), EC,
+ getDriver().CCPrintOptionsFilename, EC,
llvm::sys::fs::OF_Append | llvm::sys::fs::OF_Text));
if (EC) {
getDriver().Diag(diag::err_drv_cc_print_options_failure)
Index: llvm-toolchain-snapshot_13~++20210403105842+b32e76c6d507/clang/lib/Driver/Driver.cpp
===================================================================
--- llvm-toolchain-snapshot_13~++20210403105842+b32e76c6d507.orig/clang/lib/Driver/Driver.cpp
+++ llvm-toolchain-snapshot_13~++20210403105842+b32e76c6d507/clang/lib/Driver/Driver.cpp
@@ -135,13 +135,14 @@ Driver::Driver(StringRef ClangExecutable
: Diags(Diags), VFS(std::move(VFS)), Mode(GCCMode),
SaveTemps(SaveTempsNone), BitcodeEmbed(EmbedNone), LTOMode(LTOK_None),
ClangExecutable(ClangExecutable), SysRoot(DEFAULT_SYSROOT),
- DriverTitle(Title), CCPrintStatReportFilename(), CCPrintOptionsFilename(),
- CCPrintHeadersFilename(), CCLogDiagnosticsFilename(),
- CCCPrintBindings(false), CCPrintOptions(false), CCPrintHeaders(false),
- CCLogDiagnostics(false), CCGenDiagnostics(false),
- CCPrintProcessStats(false), TargetTriple(TargetTriple),
- CCCGenericGCCName(""), Saver(Alloc), CheckInputsExist(true),
- GenReproducer(false), SuppressMissingInputWarning(false) {
+ DriverTitle(Title), CCPrintStatReportFilename(nullptr),
+ CCPrintOptionsFilename(nullptr), CCPrintHeadersFilename(nullptr),
+ CCLogDiagnosticsFilename(nullptr), CCCPrintBindings(false),
+ CCPrintOptions(false), CCPrintHeaders(false), CCLogDiagnostics(false),
+ CCGenDiagnostics(false), CCPrintProcessStats(false),
+ TargetTriple(TargetTriple), CCCGenericGCCName(""), Saver(Alloc),
+ CheckInputsExist(true), GenReproducer(false),
+ SuppressMissingInputWarning(false) {
// Provide a sane fallback if no VFS is specified.
if (!this->VFS)
this->VFS = llvm::vfs::getRealFileSystem();
@@ -4059,7 +4060,7 @@ void Driver::BuildJobs(Compilation &C) c
else
LinkingOutput = getDefaultImageName();
- if (CCPrintStatReportFilename.empty()) {
+ if (!CCPrintStatReportFilename) {
using namespace llvm;
// Human readable output.
outs() << sys::path::filename(Cmd.getExecutable()) << ": "
@@ -4082,7 +4083,7 @@ void Driver::BuildJobs(Compilation &C) c
<< '\n';
Out.flush();
std::error_code EC;
- llvm::raw_fd_ostream OS(CCPrintStatReportFilename.c_str(), EC,
+ llvm::raw_fd_ostream OS(CCPrintStatReportFilename, EC,
llvm::sys::fs::OF_Append |
llvm::sys::fs::OF_Text);
if (EC)
Index: llvm-toolchain-snapshot_13~++20210403105842+b32e76c6d507/clang/tools/driver/driver.cpp
===================================================================
--- llvm-toolchain-snapshot_13~++20210403105842+b32e76c6d507.orig/clang/tools/driver/driver.cpp
+++ llvm-toolchain-snapshot_13~++20210403105842+b32e76c6d507/clang/tools/driver/driver.cpp
@@ -244,28 +244,25 @@ static void getCLEnvVarOptions(std::stri
}
static void SetBackdoorDriverOutputsFromEnvVars(Driver &TheDriver) {
- auto CheckEnvVar = [](const char *EnvOptSet, const char *EnvOptFile,
- std::string &OptFile) {
- bool OptSet = !!::getenv(EnvOptSet);
- if (OptSet) {
- if (const char *Var = ::getenv(EnvOptFile))
- OptFile = Var;
- }
- return OptSet;
- };
+ // Handle CC_PRINT_OPTIONS and CC_PRINT_OPTIONS_FILE.
+ TheDriver.CCPrintOptions = !!::getenv("CC_PRINT_OPTIONS");
+ if (TheDriver.CCPrintOptions)
+ TheDriver.CCPrintOptionsFilename = ::getenv("CC_PRINT_OPTIONS_FILE");
- TheDriver.CCPrintOptions =
- CheckEnvVar("CC_PRINT_OPTIONS", "CC_PRINT_OPTIONS_FILE",
- TheDriver.CCPrintOptionsFilename);
- TheDriver.CCPrintHeaders =
- CheckEnvVar("CC_PRINT_HEADERS", "CC_PRINT_HEADERS_FILE",
- TheDriver.CCPrintHeadersFilename);
- TheDriver.CCLogDiagnostics =
- CheckEnvVar("CC_LOG_DIAGNOSTICS", "CC_LOG_DIAGNOSTICS_FILE",
- TheDriver.CCLogDiagnosticsFilename);
- TheDriver.CCPrintProcessStats =
- CheckEnvVar("CC_PRINT_PROC_STAT", "CC_PRINT_PROC_STAT_FILE",
- TheDriver.CCPrintStatReportFilename);
+ // Handle CC_PRINT_HEADERS and CC_PRINT_HEADERS_FILE.
+ TheDriver.CCPrintHeaders = !!::getenv("CC_PRINT_HEADERS");
+ if (TheDriver.CCPrintHeaders)
+ TheDriver.CCPrintHeadersFilename = ::getenv("CC_PRINT_HEADERS_FILE");
+
+ // Handle CC_LOG_DIAGNOSTICS and CC_LOG_DIAGNOSTICS_FILE.
+ TheDriver.CCLogDiagnostics = !!::getenv("CC_LOG_DIAGNOSTICS");
+ if (TheDriver.CCLogDiagnostics)
+ TheDriver.CCLogDiagnosticsFilename = ::getenv("CC_LOG_DIAGNOSTICS_FILE");
+
+ // Handle CC_PRINT_PROC_STAT and CC_PRINT_PROC_STAT_FILE.
+ TheDriver.CCPrintProcessStats = !!::getenv("CC_PRINT_PROC_STAT");
+ if (TheDriver.CCPrintProcessStats)
+ TheDriver.CCPrintStatReportFilename = ::getenv("CC_PRINT_PROC_STAT_FILE");
}
static void FixupDiagPrefixExeName(TextDiagnosticPrinter *DiagClient,