mirror of
https://github.com/ziglang/zig.git
synced 2024-11-27 07:32:44 +00:00
update clang drivers from llvm 10 to 11
This commit is contained in:
parent
c8ea8cf5df
commit
bd121f3af4
@ -359,7 +359,7 @@ endif()
|
|||||||
if(MSVC)
|
if(MSVC)
|
||||||
set(EXE_CFLAGS "${EXE_CFLAGS}")
|
set(EXE_CFLAGS "${EXE_CFLAGS}")
|
||||||
else()
|
else()
|
||||||
set(EXE_CFLAGS "${EXE_CFLAGS} -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -D_GNU_SOURCE -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -Werror=type-limits -Wno-missing-braces")
|
set(EXE_CFLAGS "${EXE_CFLAGS} -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -D_GNU_SOURCE -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -Werror=type-limits -Wno-missing-braces -Wno-comment")
|
||||||
if(MINGW)
|
if(MINGW)
|
||||||
set(EXE_CFLAGS "${EXE_CFLAGS} -Wno-format")
|
set(EXE_CFLAGS "${EXE_CFLAGS} -Wno-format")
|
||||||
endif()
|
endif()
|
||||||
|
@ -177,7 +177,7 @@ static int PrintSupportedCPUs(std::string TargetStr) {
|
|||||||
// the target machine will handle the mcpu printing
|
// the target machine will handle the mcpu printing
|
||||||
llvm::TargetOptions Options;
|
llvm::TargetOptions Options;
|
||||||
std::unique_ptr<llvm::TargetMachine> TheTargetMachine(
|
std::unique_ptr<llvm::TargetMachine> TheTargetMachine(
|
||||||
TheTarget->createTargetMachine(TargetStr, "", "+cpuHelp", Options, None));
|
TheTarget->createTargetMachine(TargetStr, "", "+cpuhelp", Options, None));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -203,8 +203,8 @@ int cc1_main(ArrayRef<const char *> Argv, const char *Argv0, void *MainAddr) {
|
|||||||
IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts = new DiagnosticOptions();
|
IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts = new DiagnosticOptions();
|
||||||
TextDiagnosticBuffer *DiagsBuffer = new TextDiagnosticBuffer;
|
TextDiagnosticBuffer *DiagsBuffer = new TextDiagnosticBuffer;
|
||||||
DiagnosticsEngine Diags(DiagID, &*DiagOpts, DiagsBuffer);
|
DiagnosticsEngine Diags(DiagID, &*DiagOpts, DiagsBuffer);
|
||||||
bool Success =
|
bool Success = CompilerInvocation::CreateFromArgs(Clang->getInvocation(),
|
||||||
CompilerInvocation::CreateFromArgs(Clang->getInvocation(), Argv, Diags);
|
Argv, Diags, Argv0);
|
||||||
|
|
||||||
if (Clang->getFrontendOpts().TimeTrace) {
|
if (Clang->getFrontendOpts().TimeTrace) {
|
||||||
llvm::timeTraceProfilerInitialize(
|
llvm::timeTraceProfilerInitialize(
|
||||||
@ -259,6 +259,7 @@ int cc1_main(ArrayRef<const char *> Argv, const char *Argv0, void *MainAddr) {
|
|||||||
// FIXME(ibiryukov): make profilerOutput flush in destructor instead.
|
// FIXME(ibiryukov): make profilerOutput flush in destructor instead.
|
||||||
profilerOutput->flush();
|
profilerOutput->flush();
|
||||||
llvm::timeTraceProfilerCleanup();
|
llvm::timeTraceProfilerCleanup();
|
||||||
|
Clang->clearOutputFiles(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -207,7 +207,7 @@ bool AssemblerInvocation::CreateFromArgs(AssemblerInvocation &Opts,
|
|||||||
|
|
||||||
// Target Options
|
// Target Options
|
||||||
Opts.Triple = llvm::Triple::normalize(Args.getLastArgValue(OPT_triple));
|
Opts.Triple = llvm::Triple::normalize(Args.getLastArgValue(OPT_triple));
|
||||||
Opts.CPU = Args.getLastArgValue(OPT_target_cpu);
|
Opts.CPU = std::string(Args.getLastArgValue(OPT_target_cpu));
|
||||||
Opts.Features = Args.getAllArgValues(OPT_target_feature);
|
Opts.Features = Args.getAllArgValues(OPT_target_feature);
|
||||||
|
|
||||||
// Use the default target triple if unspecified.
|
// Use the default target triple if unspecified.
|
||||||
@ -238,13 +238,19 @@ bool AssemblerInvocation::CreateFromArgs(AssemblerInvocation &Opts,
|
|||||||
|
|
||||||
Opts.RelaxELFRelocations = Args.hasArg(OPT_mrelax_relocations);
|
Opts.RelaxELFRelocations = Args.hasArg(OPT_mrelax_relocations);
|
||||||
Opts.DwarfVersion = getLastArgIntValue(Args, OPT_dwarf_version_EQ, 2, Diags);
|
Opts.DwarfVersion = getLastArgIntValue(Args, OPT_dwarf_version_EQ, 2, Diags);
|
||||||
Opts.DwarfDebugFlags = Args.getLastArgValue(OPT_dwarf_debug_flags);
|
Opts.DwarfDebugFlags =
|
||||||
Opts.DwarfDebugProducer = Args.getLastArgValue(OPT_dwarf_debug_producer);
|
std::string(Args.getLastArgValue(OPT_dwarf_debug_flags));
|
||||||
Opts.DebugCompilationDir = Args.getLastArgValue(OPT_fdebug_compilation_dir);
|
Opts.DwarfDebugProducer =
|
||||||
Opts.MainFileName = Args.getLastArgValue(OPT_main_file_name);
|
std::string(Args.getLastArgValue(OPT_dwarf_debug_producer));
|
||||||
|
Opts.DebugCompilationDir =
|
||||||
|
std::string(Args.getLastArgValue(OPT_fdebug_compilation_dir));
|
||||||
|
Opts.MainFileName = std::string(Args.getLastArgValue(OPT_main_file_name));
|
||||||
|
|
||||||
for (const auto &Arg : Args.getAllArgValues(OPT_fdebug_prefix_map_EQ))
|
for (const auto &Arg : Args.getAllArgValues(OPT_fdebug_prefix_map_EQ)) {
|
||||||
Opts.DebugPrefixMap.insert(StringRef(Arg).split('='));
|
auto Split = StringRef(Arg).split('=');
|
||||||
|
Opts.DebugPrefixMap.insert(
|
||||||
|
{std::string(Split.first), std::string(Split.second)});
|
||||||
|
}
|
||||||
|
|
||||||
// Frontend Options
|
// Frontend Options
|
||||||
if (Args.hasArg(OPT_INPUT)) {
|
if (Args.hasArg(OPT_INPUT)) {
|
||||||
@ -260,8 +266,9 @@ bool AssemblerInvocation::CreateFromArgs(AssemblerInvocation &Opts,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
Opts.LLVMArgs = Args.getAllArgValues(OPT_mllvm);
|
Opts.LLVMArgs = Args.getAllArgValues(OPT_mllvm);
|
||||||
Opts.OutputPath = Args.getLastArgValue(OPT_o);
|
Opts.OutputPath = std::string(Args.getLastArgValue(OPT_o));
|
||||||
Opts.SplitDwarfOutput = Args.getLastArgValue(OPT_split_dwarf_output);
|
Opts.SplitDwarfOutput =
|
||||||
|
std::string(Args.getLastArgValue(OPT_split_dwarf_output));
|
||||||
if (Arg *A = Args.getLastArg(OPT_filetype)) {
|
if (Arg *A = Args.getLastArg(OPT_filetype)) {
|
||||||
StringRef Name = A->getValue();
|
StringRef Name = A->getValue();
|
||||||
unsigned OutputType = StringSwitch<unsigned>(Name)
|
unsigned OutputType = StringSwitch<unsigned>(Name)
|
||||||
@ -289,8 +296,9 @@ bool AssemblerInvocation::CreateFromArgs(AssemblerInvocation &Opts,
|
|||||||
Opts.NoExecStack = Args.hasArg(OPT_mno_exec_stack);
|
Opts.NoExecStack = Args.hasArg(OPT_mno_exec_stack);
|
||||||
Opts.FatalWarnings = Args.hasArg(OPT_massembler_fatal_warnings);
|
Opts.FatalWarnings = Args.hasArg(OPT_massembler_fatal_warnings);
|
||||||
Opts.NoWarn = Args.hasArg(OPT_massembler_no_warn);
|
Opts.NoWarn = Args.hasArg(OPT_massembler_no_warn);
|
||||||
Opts.RelocationModel = Args.getLastArgValue(OPT_mrelocation_model, "pic");
|
Opts.RelocationModel =
|
||||||
Opts.TargetABI = Args.getLastArgValue(OPT_target_abi);
|
std::string(Args.getLastArgValue(OPT_mrelocation_model, "pic"));
|
||||||
|
Opts.TargetABI = std::string(Args.getLastArgValue(OPT_target_abi));
|
||||||
Opts.IncrementalLinkerCompatible =
|
Opts.IncrementalLinkerCompatible =
|
||||||
Args.hasArg(OPT_mincremental_linker_compatible);
|
Args.hasArg(OPT_mincremental_linker_compatible);
|
||||||
Opts.SymbolDefs = Args.getAllArgValues(OPT_defsym);
|
Opts.SymbolDefs = Args.getAllArgValues(OPT_defsym);
|
||||||
@ -421,12 +429,7 @@ static bool ExecuteAssembler(AssemblerInvocation &Opts,
|
|||||||
SrcMgr.getMemoryBuffer(BufferIndex)->getBuffer());
|
SrcMgr.getMemoryBuffer(BufferIndex)->getBuffer());
|
||||||
|
|
||||||
// Build up the feature string from the target feature list.
|
// Build up the feature string from the target feature list.
|
||||||
std::string FS;
|
std::string FS = llvm::join(Opts.Features, ",");
|
||||||
if (!Opts.Features.empty()) {
|
|
||||||
FS = Opts.Features[0];
|
|
||||||
for (unsigned i = 1, e = Opts.Features.size(); i != e; ++i)
|
|
||||||
FS += "," + Opts.Features[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
std::unique_ptr<MCStreamer> Str;
|
std::unique_ptr<MCStreamer> Str;
|
||||||
|
|
||||||
@ -490,7 +493,7 @@ static bool ExecuteAssembler(AssemblerInvocation &Opts,
|
|||||||
MCSection *AsmLabel = Ctx.getMachOSection(
|
MCSection *AsmLabel = Ctx.getMachOSection(
|
||||||
"__LLVM", "__asm", MachO::S_REGULAR, 4, SectionKind::getReadOnly());
|
"__LLVM", "__asm", MachO::S_REGULAR, 4, SectionKind::getReadOnly());
|
||||||
Str.get()->SwitchSection(AsmLabel);
|
Str.get()->SwitchSection(AsmLabel);
|
||||||
Str.get()->EmitZeros(1);
|
Str.get()->emitZeros(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Assembly to object compilation should leverage assembly info.
|
// Assembly to object compilation should leverage assembly info.
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
#include "llvm/Option/ArgList.h"
|
#include "llvm/Option/ArgList.h"
|
||||||
#include "llvm/Option/OptTable.h"
|
#include "llvm/Option/OptTable.h"
|
||||||
#include "llvm/Option/Option.h"
|
#include "llvm/Option/Option.h"
|
||||||
|
#include "llvm/Support/BuryPointer.h"
|
||||||
#include "llvm/Support/CommandLine.h"
|
#include "llvm/Support/CommandLine.h"
|
||||||
#include "llvm/Support/CrashRecoveryContext.h"
|
#include "llvm/Support/CrashRecoveryContext.h"
|
||||||
#include "llvm/Support/ErrorHandling.h"
|
#include "llvm/Support/ErrorHandling.h"
|
||||||
@ -37,6 +38,7 @@
|
|||||||
#include "llvm/Support/Host.h"
|
#include "llvm/Support/Host.h"
|
||||||
#include "llvm/Support/InitLLVM.h"
|
#include "llvm/Support/InitLLVM.h"
|
||||||
#include "llvm/Support/Path.h"
|
#include "llvm/Support/Path.h"
|
||||||
|
#include "llvm/Support/PrettyStackTrace.h"
|
||||||
#include "llvm/Support/Process.h"
|
#include "llvm/Support/Process.h"
|
||||||
#include "llvm/Support/Program.h"
|
#include "llvm/Support/Program.h"
|
||||||
#include "llvm/Support/Regex.h"
|
#include "llvm/Support/Regex.h"
|
||||||
@ -60,7 +62,7 @@ std::string GetExecutablePath(const char *Argv0, bool CanonicalPrefixes) {
|
|||||||
if (llvm::ErrorOr<std::string> P =
|
if (llvm::ErrorOr<std::string> P =
|
||||||
llvm::sys::findProgramByName(ExecutablePath))
|
llvm::sys::findProgramByName(ExecutablePath))
|
||||||
ExecutablePath = *P;
|
ExecutablePath = *P;
|
||||||
return ExecutablePath.str();
|
return std::string(ExecutablePath.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
// This just needs to be some symbol in the binary; C++ doesn't
|
// This just needs to be some symbol in the binary; C++ doesn't
|
||||||
@ -71,7 +73,7 @@ std::string GetExecutablePath(const char *Argv0, bool CanonicalPrefixes) {
|
|||||||
|
|
||||||
static const char *GetStableCStr(std::set<std::string> &SavedStrings,
|
static const char *GetStableCStr(std::set<std::string> &SavedStrings,
|
||||||
StringRef S) {
|
StringRef S) {
|
||||||
return SavedStrings.insert(S).first->c_str();
|
return SavedStrings.insert(std::string(S)).first->c_str();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// ApplyQAOverride - Apply a list of edits to the input argument lists.
|
/// ApplyQAOverride - Apply a list of edits to the input argument lists.
|
||||||
@ -263,7 +265,7 @@ static void FixupDiagPrefixExeName(TextDiagnosticPrinter *DiagClient,
|
|||||||
StringRef ExeBasename(llvm::sys::path::stem(Path));
|
StringRef ExeBasename(llvm::sys::path::stem(Path));
|
||||||
if (ExeBasename.equals_lower("cl"))
|
if (ExeBasename.equals_lower("cl"))
|
||||||
ExeBasename = "clang-cl";
|
ExeBasename = "clang-cl";
|
||||||
DiagClient->setPrefix(ExeBasename);
|
DiagClient->setPrefix(std::string(ExeBasename));
|
||||||
}
|
}
|
||||||
|
|
||||||
// This lets us create the DiagnosticsEngine with a properly-filled-out
|
// This lets us create the DiagnosticsEngine with a properly-filled-out
|
||||||
@ -323,7 +325,7 @@ static int ExecuteCC1Tool(SmallVectorImpl<const char *> &ArgV) {
|
|||||||
StringRef Tool = ArgV[1];
|
StringRef Tool = ArgV[1];
|
||||||
void *GetExecutablePathVP = (void *)(intptr_t)GetExecutablePath;
|
void *GetExecutablePathVP = (void *)(intptr_t)GetExecutablePath;
|
||||||
if (Tool == "-cc1")
|
if (Tool == "-cc1")
|
||||||
return cc1_main(makeArrayRef(ArgV).slice(2), ArgV[0], GetExecutablePathVP);
|
return cc1_main(makeArrayRef(ArgV).slice(1), ArgV[0], GetExecutablePathVP);
|
||||||
if (Tool == "-cc1as")
|
if (Tool == "-cc1as")
|
||||||
return cc1as_main(makeArrayRef(ArgV).slice(2), ArgV[0],
|
return cc1as_main(makeArrayRef(ArgV).slice(2), ArgV[0],
|
||||||
GetExecutablePathVP);
|
GetExecutablePathVP);
|
||||||
@ -337,6 +339,9 @@ extern "C" int ZigClang_main(int argc_, const char **argv_);
|
|||||||
int ZigClang_main(int argc_, const char **argv_) {
|
int ZigClang_main(int argc_, const char **argv_) {
|
||||||
noteBottomOfStack();
|
noteBottomOfStack();
|
||||||
llvm::InitLLVM X(argc_, argv_);
|
llvm::InitLLVM X(argc_, argv_);
|
||||||
|
llvm::setBugReportMsg("PLEASE submit a bug report to " BUG_REPORT_URL
|
||||||
|
" and include the crash backtrace, preprocessed "
|
||||||
|
"source, and associated run script.\n");
|
||||||
size_t argv_offset = (strcmp(argv_[1], "-cc1") == 0 || strcmp(argv_[1], "-cc1as") == 0) ? 0 : 1;
|
size_t argv_offset = (strcmp(argv_[1], "-cc1") == 0 || strcmp(argv_[1], "-cc1as") == 0) ? 0 : 1;
|
||||||
SmallVector<const char *, 256> argv(argv_ + argv_offset, argv_ + argc_);
|
SmallVector<const char *, 256> argv(argv_ + argv_offset, argv_ + argc_);
|
||||||
|
|
||||||
@ -488,6 +493,7 @@ int ZigClang_main(int argc_, const char **argv_) {
|
|||||||
|
|
||||||
std::unique_ptr<Compilation> C(TheDriver.BuildCompilation(argv));
|
std::unique_ptr<Compilation> C(TheDriver.BuildCompilation(argv));
|
||||||
int Res = 1;
|
int Res = 1;
|
||||||
|
bool IsCrash = false;
|
||||||
if (C && !C->containsError()) {
|
if (C && !C->containsError()) {
|
||||||
SmallVector<std::pair<int, const Command *>, 4> FailingCommands;
|
SmallVector<std::pair<int, const Command *>, 4> FailingCommands;
|
||||||
Res = TheDriver.ExecuteCompilation(*C, FailingCommands);
|
Res = TheDriver.ExecuteCompilation(*C, FailingCommands);
|
||||||
@ -502,6 +508,11 @@ int ZigClang_main(int argc_, const char **argv_) {
|
|||||||
for (const auto &J : C->getJobs())
|
for (const auto &J : C->getJobs())
|
||||||
if (const Command *C = dyn_cast<Command>(&J))
|
if (const Command *C = dyn_cast<Command>(&J))
|
||||||
FailingCommands.push_back(std::make_pair(-1, C));
|
FailingCommands.push_back(std::make_pair(-1, C));
|
||||||
|
|
||||||
|
// Print the bug report message that would be printed if we did actually
|
||||||
|
// crash, but only if we're crashing due to FORCE_CLANG_DIAGNOSTICS_CRASH.
|
||||||
|
if (::getenv("FORCE_CLANG_DIAGNOSTICS_CRASH"))
|
||||||
|
llvm::dbgs() << llvm::getBugReportMsg();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const auto &P : FailingCommands) {
|
for (const auto &P : FailingCommands) {
|
||||||
@ -514,11 +525,11 @@ int ZigClang_main(int argc_, const char **argv_) {
|
|||||||
// If result status is 70, then the driver command reported a fatal error.
|
// If result status is 70, then the driver command reported a fatal error.
|
||||||
// On Windows, abort will return an exit code of 3. In these cases,
|
// On Windows, abort will return an exit code of 3. In these cases,
|
||||||
// generate additional diagnostic information if possible.
|
// generate additional diagnostic information if possible.
|
||||||
bool DiagnoseCrash = CommandRes < 0 || CommandRes == 70;
|
IsCrash = CommandRes < 0 || CommandRes == 70;
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
DiagnoseCrash |= CommandRes == 3;
|
IsCrash |= CommandRes == 3;
|
||||||
#endif
|
#endif
|
||||||
if (DiagnoseCrash) {
|
if (IsCrash) {
|
||||||
TheDriver.generateCompilationDiagnostics(*C, *FailingCommand);
|
TheDriver.generateCompilationDiagnostics(*C, *FailingCommand);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -527,10 +538,16 @@ int ZigClang_main(int argc_, const char **argv_) {
|
|||||||
|
|
||||||
Diags.getClient()->finish();
|
Diags.getClient()->finish();
|
||||||
|
|
||||||
// If any timers were active but haven't been destroyed yet, print their
|
if (!UseNewCC1Process && IsCrash) {
|
||||||
// results now. This happens in -disable-free mode.
|
// When crashing in -fintegrated-cc1 mode, bury the timer pointers, because
|
||||||
llvm::TimerGroup::printAll(llvm::errs());
|
// the internal linked list might point to already released stack frames.
|
||||||
llvm::TimerGroup::clearAll();
|
llvm::BuryPointer(llvm::TimerGroup::aquireDefaultGroup());
|
||||||
|
} else {
|
||||||
|
// If any timers were active but haven't been destroyed yet, print their
|
||||||
|
// results now. This happens in -disable-free mode.
|
||||||
|
llvm::TimerGroup::printAll(llvm::errs());
|
||||||
|
llvm::TimerGroup::clearAll();
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
// Exit status should not be negative on Win32, unless abnormal termination.
|
// Exit status should not be negative on Win32, unless abnormal termination.
|
||||||
|
Loading…
Reference in New Issue
Block a user