Merge ^/vendor/lvm-project/release-10.x up to its last change (upstream
commit c4a134a51).
This commit is contained in:
commit
6528635081
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/projects/clang1000-import/; revision=357096
@ -2855,6 +2855,14 @@ def fintegrated_as : Flag<["-"], "fintegrated-as">, Flags<[DriverOption]>,
|
|||||||
def fno_integrated_as : Flag<["-"], "fno-integrated-as">,
|
def fno_integrated_as : Flag<["-"], "fno-integrated-as">,
|
||||||
Flags<[CC1Option, DriverOption]>, Group<f_Group>,
|
Flags<[CC1Option, DriverOption]>, Group<f_Group>,
|
||||||
HelpText<"Disable the integrated assembler">;
|
HelpText<"Disable the integrated assembler">;
|
||||||
|
|
||||||
|
def fintegrated_cc1 : Flag<["-"], "fintegrated-cc1">,
|
||||||
|
Flags<[CoreOption, DriverOption]>, Group<f_Group>,
|
||||||
|
HelpText<"Run cc1 in-process">;
|
||||||
|
def fno_integrated_cc1 : Flag<["-"], "fno-integrated-cc1">,
|
||||||
|
Flags<[CoreOption, DriverOption]>, Group<f_Group>,
|
||||||
|
HelpText<"Spawn a separate process for each cc1">;
|
||||||
|
|
||||||
def : Flag<["-"], "integrated-as">, Alias<fintegrated_as>, Flags<[DriverOption]>;
|
def : Flag<["-"], "integrated-as">, Alias<fintegrated_as>, Flags<[DriverOption]>;
|
||||||
def : Flag<["-"], "no-integrated-as">, Alias<fno_integrated_as>,
|
def : Flag<["-"], "no-integrated-as">, Alias<fno_integrated_as>,
|
||||||
Flags<[CC1Option, DriverOption]>;
|
Flags<[CC1Option, DriverOption]>;
|
||||||
|
@ -1035,6 +1035,10 @@ Compilation *Driver::BuildCompilation(ArrayRef<const char *> ArgList) {
|
|||||||
// -no-canonical-prefixes is used very early in main.
|
// -no-canonical-prefixes is used very early in main.
|
||||||
Args.ClaimAllArgs(options::OPT_no_canonical_prefixes);
|
Args.ClaimAllArgs(options::OPT_no_canonical_prefixes);
|
||||||
|
|
||||||
|
// f(no-)integated-cc1 is also used very early in main.
|
||||||
|
Args.ClaimAllArgs(options::OPT_fintegrated_cc1);
|
||||||
|
Args.ClaimAllArgs(options::OPT_fno_integrated_cc1);
|
||||||
|
|
||||||
// Ignore -pipe.
|
// Ignore -pipe.
|
||||||
Args.ClaimAllArgs(options::OPT_pipe);
|
Args.ClaimAllArgs(options::OPT_pipe);
|
||||||
|
|
||||||
|
@ -258,27 +258,6 @@ static void SetBackdoorDriverOutputsFromEnvVars(Driver &TheDriver) {
|
|||||||
TheDriver.CCLogDiagnostics = !!::getenv("CC_LOG_DIAGNOSTICS");
|
TheDriver.CCLogDiagnostics = !!::getenv("CC_LOG_DIAGNOSTICS");
|
||||||
if (TheDriver.CCLogDiagnostics)
|
if (TheDriver.CCLogDiagnostics)
|
||||||
TheDriver.CCLogDiagnosticsFilename = ::getenv("CC_LOG_DIAGNOSTICS_FILE");
|
TheDriver.CCLogDiagnosticsFilename = ::getenv("CC_LOG_DIAGNOSTICS_FILE");
|
||||||
|
|
||||||
// Whether the cc1 tool should be called inside the current process, or if we
|
|
||||||
// should spawn a new clang process (old behavior).
|
|
||||||
// Not having an additional process saves some execution time of Windows,
|
|
||||||
// and makes debugging easier.
|
|
||||||
bool UseNewCC1Process = CLANG_SPAWN_CC1;
|
|
||||||
|
|
||||||
StringRef SpawnCC1Str = ::getenv("CLANG_SPAWN_CC1");
|
|
||||||
if (!SpawnCC1Str.empty()) {
|
|
||||||
if (SpawnCC1Str != "0" && SpawnCC1Str != "1") {
|
|
||||||
llvm::errs() << "error: the value of the environment variable "
|
|
||||||
"CLANG_SPAWN_CC1 must be either 0 or 1.\n";
|
|
||||||
::exit(1);
|
|
||||||
}
|
|
||||||
UseNewCC1Process = SpawnCC1Str[0] - '0';
|
|
||||||
}
|
|
||||||
if (!UseNewCC1Process) {
|
|
||||||
TheDriver.CC1Main = &ExecuteCC1Tool;
|
|
||||||
// Ensure the CC1Command actually catches cc1 crashes
|
|
||||||
llvm::CrashRecoveryContext::Enable();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void FixupDiagPrefixExeName(TextDiagnosticPrinter *DiagClient,
|
static void FixupDiagPrefixExeName(TextDiagnosticPrinter *DiagClient,
|
||||||
@ -294,7 +273,7 @@ static void FixupDiagPrefixExeName(TextDiagnosticPrinter *DiagClient,
|
|||||||
// This lets us create the DiagnosticsEngine with a properly-filled-out
|
// This lets us create the DiagnosticsEngine with a properly-filled-out
|
||||||
// DiagnosticOptions instance.
|
// DiagnosticOptions instance.
|
||||||
static DiagnosticOptions *
|
static DiagnosticOptions *
|
||||||
CreateAndPopulateDiagOpts(ArrayRef<const char *> argv) {
|
CreateAndPopulateDiagOpts(ArrayRef<const char *> argv, bool &UseNewCC1Process) {
|
||||||
auto *DiagOpts = new DiagnosticOptions;
|
auto *DiagOpts = new DiagnosticOptions;
|
||||||
unsigned MissingArgIndex, MissingArgCount;
|
unsigned MissingArgIndex, MissingArgCount;
|
||||||
InputArgList Args = getDriverOptTable().ParseArgs(
|
InputArgList Args = getDriverOptTable().ParseArgs(
|
||||||
@ -303,6 +282,12 @@ CreateAndPopulateDiagOpts(ArrayRef<const char *> argv) {
|
|||||||
// Any errors that would be diagnosed here will also be diagnosed later,
|
// Any errors that would be diagnosed here will also be diagnosed later,
|
||||||
// when the DiagnosticsEngine actually exists.
|
// when the DiagnosticsEngine actually exists.
|
||||||
(void)ParseDiagnosticArgs(*DiagOpts, Args);
|
(void)ParseDiagnosticArgs(*DiagOpts, Args);
|
||||||
|
|
||||||
|
UseNewCC1Process =
|
||||||
|
Args.hasFlag(clang::driver::options::OPT_fno_integrated_cc1,
|
||||||
|
clang::driver::options::OPT_fintegrated_cc1,
|
||||||
|
/*Default=*/CLANG_SPAWN_CC1);
|
||||||
|
|
||||||
return DiagOpts;
|
return DiagOpts;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -330,7 +315,7 @@ static void SetInstallDir(SmallVectorImpl<const char *> &argv,
|
|||||||
|
|
||||||
static int ExecuteCC1Tool(ArrayRef<const char *> argv) {
|
static int ExecuteCC1Tool(ArrayRef<const char *> argv) {
|
||||||
// If we call the cc1 tool from the clangDriver library (through
|
// If we call the cc1 tool from the clangDriver library (through
|
||||||
// Driver::CC1Main), we need to cleanup the options usage count. The options
|
// Driver::CC1Main), we need to clean up the options usage count. The options
|
||||||
// are currently global, and they might have been used previously by the
|
// are currently global, and they might have been used previously by the
|
||||||
// driver.
|
// driver.
|
||||||
llvm::cl::ResetAllOptionOccurrences();
|
llvm::cl::ResetAllOptionOccurrences();
|
||||||
@ -413,6 +398,8 @@ int main(int argc_, const char **argv_) {
|
|||||||
return ExecuteCC1Tool(argv);
|
return ExecuteCC1Tool(argv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Handle options that need handling before the real command line parsing in
|
||||||
|
// Driver::BuildCompilation()
|
||||||
bool CanonicalPrefixes = true;
|
bool CanonicalPrefixes = true;
|
||||||
for (int i = 1, size = argv.size(); i < size; ++i) {
|
for (int i = 1, size = argv.size(); i < size; ++i) {
|
||||||
// Skip end-of-line response file markers
|
// Skip end-of-line response file markers
|
||||||
@ -457,8 +444,14 @@ int main(int argc_, const char **argv_) {
|
|||||||
|
|
||||||
std::string Path = GetExecutablePath(argv[0], CanonicalPrefixes);
|
std::string Path = GetExecutablePath(argv[0], CanonicalPrefixes);
|
||||||
|
|
||||||
|
// Whether the cc1 tool should be called inside the current process, or if we
|
||||||
|
// should spawn a new clang subprocess (old behavior).
|
||||||
|
// Not having an additional process saves some execution time of Windows,
|
||||||
|
// and makes debugging and profiling easier.
|
||||||
|
bool UseNewCC1Process;
|
||||||
|
|
||||||
IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts =
|
IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts =
|
||||||
CreateAndPopulateDiagOpts(argv);
|
CreateAndPopulateDiagOpts(argv, UseNewCC1Process);
|
||||||
|
|
||||||
TextDiagnosticPrinter *DiagClient
|
TextDiagnosticPrinter *DiagClient
|
||||||
= new TextDiagnosticPrinter(llvm::errs(), &*DiagOpts);
|
= new TextDiagnosticPrinter(llvm::errs(), &*DiagOpts);
|
||||||
@ -486,6 +479,12 @@ int main(int argc_, const char **argv_) {
|
|||||||
|
|
||||||
SetBackdoorDriverOutputsFromEnvVars(TheDriver);
|
SetBackdoorDriverOutputsFromEnvVars(TheDriver);
|
||||||
|
|
||||||
|
if (!UseNewCC1Process) {
|
||||||
|
TheDriver.CC1Main = &ExecuteCC1Tool;
|
||||||
|
// Ensure the CC1Command actually catches cc1 crashes
|
||||||
|
llvm::CrashRecoveryContext::Enable();
|
||||||
|
}
|
||||||
|
|
||||||
std::unique_ptr<Compilation> C(TheDriver.BuildCompilation(argv));
|
std::unique_ptr<Compilation> C(TheDriver.BuildCompilation(argv));
|
||||||
int Res = 1;
|
int Res = 1;
|
||||||
if (C && !C->containsError()) {
|
if (C && !C->containsError()) {
|
||||||
|
Loading…
Reference in New Issue
Block a user