| author | |
| committer | |
| log | b7a8c045efab89c0fab0d3d1c678442c2b373066 |
| tree | ad21afbd9d3e92aeabdf5ec0743bf73938ff6822 |
| parent | 008affa64559487c6886e27075bb5377ca915b4a |
| signature |
4 files changed, 57 insertions(+), 34 deletions(-)
src/zig_clang_cc1_main.cpp+27-13| ... | @@ -111,9 +111,10 @@ static void ensureSufficientStack() {} | ... | @@ -111,9 +111,10 @@ static void ensureSufficientStack() {} |
| 111 | 111 | ||
| 112 | /// Print supported cpus of the given target. | 112 | /// Print supported cpus of the given target. |
| 113 | static int PrintSupportedCPUs(std::string TargetStr) { | 113 | static int PrintSupportedCPUs(std::string TargetStr) { |
| 114 | llvm::Triple Triple(TargetStr); | ||
| 114 | std::string Error; | 115 | std::string Error; |
| 115 | const llvm::Target *TheTarget = | 116 | const llvm::Target *TheTarget = |
| 116 | llvm::TargetRegistry::lookupTarget(TargetStr, Error); | 117 | llvm::TargetRegistry::lookupTarget(Triple, Error); |
| 117 | if (!TheTarget) { | 118 | if (!TheTarget) { |
| 118 | llvm::errs() << Error; | 119 | llvm::errs() << Error; |
| 119 | return 1; | 120 | return 1; |
| ... | @@ -122,15 +123,16 @@ static int PrintSupportedCPUs(std::string TargetStr) { | ... | @@ -122,15 +123,16 @@ static int PrintSupportedCPUs(std::string TargetStr) { |
| 122 | // the target machine will handle the mcpu printing | 123 | // the target machine will handle the mcpu printing |
| 123 | llvm::TargetOptions Options; | 124 | llvm::TargetOptions Options; |
| 124 | std::unique_ptr<llvm::TargetMachine> TheTargetMachine( | 125 | std::unique_ptr<llvm::TargetMachine> TheTargetMachine( |
| 125 | TheTarget->createTargetMachine(TargetStr, "", "+cpuhelp", Options, | 126 | TheTarget->createTargetMachine(Triple, "", "+cpuhelp", Options, |
| 126 | std::nullopt)); | 127 | std::nullopt)); |
| 127 | return 0; | 128 | return 0; |
| 128 | } | 129 | } |
| 129 | 130 | ||
| 130 | static int PrintSupportedExtensions(std::string TargetStr) { | 131 | static int PrintSupportedExtensions(std::string TargetStr) { |
| 132 | llvm::Triple Triple(TargetStr); | ||
| 131 | std::string Error; | 133 | std::string Error; |
| 132 | const llvm::Target *TheTarget = | 134 | const llvm::Target *TheTarget = |
| 133 | llvm::TargetRegistry::lookupTarget(TargetStr, Error); | 135 | llvm::TargetRegistry::lookupTarget(Triple, Error); |
| 134 | if (!TheTarget) { | 136 | if (!TheTarget) { |
| 135 | llvm::errs() << Error; | 137 | llvm::errs() << Error; |
| 136 | return 1; | 138 | return 1; |
| ... | @@ -138,7 +140,7 @@ static int PrintSupportedExtensions(std::string TargetStr) { | ... | @@ -138,7 +140,7 @@ static int PrintSupportedExtensions(std::string TargetStr) { |
| 138 | 140 | ||
| 139 | llvm::TargetOptions Options; | 141 | llvm::TargetOptions Options; |
| 140 | std::unique_ptr<llvm::TargetMachine> TheTargetMachine( | 142 | std::unique_ptr<llvm::TargetMachine> TheTargetMachine( |
| 141 | TheTarget->createTargetMachine(TargetStr, "", "", Options, std::nullopt)); | 143 | TheTarget->createTargetMachine(Triple, "", "", Options, std::nullopt)); |
| 142 | const llvm::Triple &MachineTriple = TheTargetMachine->getTargetTriple(); | 144 | const llvm::Triple &MachineTriple = TheTargetMachine->getTargetTriple(); |
| 143 | const llvm::MCSubtargetInfo *MCInfo = TheTargetMachine->getMCSubtargetInfo(); | 145 | const llvm::MCSubtargetInfo *MCInfo = TheTargetMachine->getMCSubtargetInfo(); |
| 144 | const llvm::ArrayRef<llvm::SubtargetFeatureKV> Features = | 146 | const llvm::ArrayRef<llvm::SubtargetFeatureKV> Features = |
| ... | @@ -165,9 +167,10 @@ static int PrintSupportedExtensions(std::string TargetStr) { | ... | @@ -165,9 +167,10 @@ static int PrintSupportedExtensions(std::string TargetStr) { |
| 165 | } | 167 | } |
| 166 | 168 | ||
| 167 | static int PrintEnabledExtensions(const TargetOptions& TargetOpts) { | 169 | static int PrintEnabledExtensions(const TargetOptions& TargetOpts) { |
| 170 | llvm::Triple Triple(TargetOpts.Triple); | ||
| 168 | std::string Error; | 171 | std::string Error; |
| 169 | const llvm::Target *TheTarget = | 172 | const llvm::Target *TheTarget = |
| 170 | llvm::TargetRegistry::lookupTarget(TargetOpts.Triple, Error); | 173 | llvm::TargetRegistry::lookupTarget(Triple, Error); |
| 171 | if (!TheTarget) { | 174 | if (!TheTarget) { |
| 172 | llvm::errs() << Error; | 175 | llvm::errs() << Error; |
| 173 | return 1; | 176 | return 1; |
| ... | @@ -179,7 +182,8 @@ static int PrintEnabledExtensions(const TargetOptions& TargetOpts) { | ... | @@ -179,7 +182,8 @@ static int PrintEnabledExtensions(const TargetOptions& TargetOpts) { |
| 179 | llvm::TargetOptions BackendOptions; | 182 | llvm::TargetOptions BackendOptions; |
| 180 | std::string FeaturesStr = llvm::join(TargetOpts.FeaturesAsWritten, ","); | 183 | std::string FeaturesStr = llvm::join(TargetOpts.FeaturesAsWritten, ","); |
| 181 | std::unique_ptr<llvm::TargetMachine> TheTargetMachine( | 184 | std::unique_ptr<llvm::TargetMachine> TheTargetMachine( |
| 182 | TheTarget->createTargetMachine(TargetOpts.Triple, TargetOpts.CPU, FeaturesStr, BackendOptions, std::nullopt)); | 185 | TheTarget->createTargetMachine(Triple, TargetOpts.CPU, FeaturesStr, |
| 186 | BackendOptions, std::nullopt)); | ||
| 183 | const llvm::Triple &MachineTriple = TheTargetMachine->getTargetTriple(); | 187 | const llvm::Triple &MachineTriple = TheTargetMachine->getTargetTriple(); |
| 184 | const llvm::MCSubtargetInfo *MCInfo = TheTargetMachine->getMCSubtargetInfo(); | 188 | const llvm::MCSubtargetInfo *MCInfo = TheTargetMachine->getMCSubtargetInfo(); |
| 185 | 189 | ||
| ... | @@ -213,11 +217,10 @@ static int PrintEnabledExtensions(const TargetOptions& TargetOpts) { | ... | @@ -213,11 +217,10 @@ static int PrintEnabledExtensions(const TargetOptions& TargetOpts) { |
| 213 | int cc1_main(ArrayRef<const char *> Argv, const char *Argv0, void *MainAddr) { | 217 | int cc1_main(ArrayRef<const char *> Argv, const char *Argv0, void *MainAddr) { |
| 214 | ensureSufficientStack(); | 218 | ensureSufficientStack(); |
| 215 | 219 | ||
| 216 | std::unique_ptr<CompilerInstance> Clang(new CompilerInstance()); | ||
| 217 | IntrusiveRefCntPtr<DiagnosticIDs> DiagID(new DiagnosticIDs()); | 220 | IntrusiveRefCntPtr<DiagnosticIDs> DiagID(new DiagnosticIDs()); |
| 218 | 221 | ||
| 219 | // Register the support for object-file-wrapped Clang modules. | 222 | // Register the support for object-file-wrapped Clang modules. |
| 220 | auto PCHOps = Clang->getPCHContainerOperations(); | 223 | auto PCHOps = std::make_shared<PCHContainerOperations>(); |
| 221 | PCHOps->registerWriter(std::make_unique<ObjectFilePCHContainerWriter>()); | 224 | PCHOps->registerWriter(std::make_unique<ObjectFilePCHContainerWriter>()); |
| 222 | PCHOps->registerReader(std::make_unique<ObjectFilePCHContainerReader>()); | 225 | PCHOps->registerReader(std::make_unique<ObjectFilePCHContainerReader>()); |
| 223 | 226 | ||
| ... | @@ -229,17 +232,21 @@ int cc1_main(ArrayRef<const char *> Argv, const char *Argv0, void *MainAddr) { | ... | @@ -229,17 +232,21 @@ int cc1_main(ArrayRef<const char *> Argv, const char *Argv0, void *MainAddr) { |
| 229 | 232 | ||
| 230 | // Buffer diagnostics from argument parsing so that we can output them using a | 233 | // Buffer diagnostics from argument parsing so that we can output them using a |
| 231 | // well formed diagnostic object. | 234 | // well formed diagnostic object. |
| 232 | IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts = new DiagnosticOptions(); | 235 | DiagnosticOptions DiagOpts; |
| 233 | TextDiagnosticBuffer *DiagsBuffer = new TextDiagnosticBuffer; | 236 | TextDiagnosticBuffer *DiagsBuffer = new TextDiagnosticBuffer; |
| 234 | DiagnosticsEngine Diags(DiagID, &*DiagOpts, DiagsBuffer); | 237 | DiagnosticsEngine Diags(DiagID, DiagOpts, DiagsBuffer); |
| 235 | 238 | ||
| 236 | // Setup round-trip remarks for the DiagnosticsEngine used in CreateFromArgs. | 239 | // Setup round-trip remarks for the DiagnosticsEngine used in CreateFromArgs. |
| 237 | if (find(Argv, StringRef("-Rround-trip-cc1-args")) != Argv.end()) | 240 | if (find(Argv, StringRef("-Rround-trip-cc1-args")) != Argv.end()) |
| 238 | Diags.setSeverity(diag::remark_cc1_round_trip_generated, | 241 | Diags.setSeverity(diag::remark_cc1_round_trip_generated, |
| 239 | diag::Severity::Remark, {}); | 242 | diag::Severity::Remark, {}); |
| 240 | 243 | ||
| 241 | bool Success = CompilerInvocation::CreateFromArgs(Clang->getInvocation(), | 244 | auto Invocation = std::make_shared<CompilerInvocation>(); |
| 242 | Argv, Diags, Argv0); | 245 | bool Success = |
| 246 | CompilerInvocation::CreateFromArgs(*Invocation, Argv, Diags, Argv0); | ||
| 247 | |||
| 248 | auto Clang = std::make_unique<CompilerInstance>(std::move(Invocation), | ||
| 249 | std::move(PCHOps)); | ||
| 243 | 250 | ||
| 244 | if (!Clang->getFrontendOpts().TimeTracePath.empty()) { | 251 | if (!Clang->getFrontendOpts().TimeTracePath.empty()) { |
| 245 | llvm::timeTraceProfilerInitialize( | 252 | llvm::timeTraceProfilerInitialize( |
| ... | @@ -292,7 +299,14 @@ int cc1_main(ArrayRef<const char *> Argv, const char *Argv0, void *MainAddr) { | ... | @@ -292,7 +299,14 @@ int cc1_main(ArrayRef<const char *> Argv, const char *Argv0, void *MainAddr) { |
| 292 | 299 | ||
| 293 | // If any timers were active but haven't been destroyed yet, print their | 300 | // If any timers were active but haven't been destroyed yet, print their |
| 294 | // results now. This happens in -disable-free mode. | 301 | // results now. This happens in -disable-free mode. |
| 295 | llvm::TimerGroup::printAll(llvm::errs()); | 302 | std::unique_ptr<raw_ostream> IOFile = llvm::CreateInfoOutputFile(); |
| 303 | if (Clang->getCodeGenOpts().TimePassesJson) { | ||
| 304 | *IOFile << "{\n"; | ||
| 305 | llvm::TimerGroup::printAllJSONValues(*IOFile, ""); | ||
| 306 | *IOFile << "\n}\n"; | ||
| 307 | } else { | ||
| 308 | llvm::TimerGroup::printAll(*IOFile); | ||
| 309 | } | ||
| 296 | llvm::TimerGroup::clearAll(); | 310 | llvm::TimerGroup::clearAll(); |
| 297 | 311 | ||
| 298 | if (llvm::timeTraceProfilerEnabled()) { | 312 | if (llvm::timeTraceProfilerEnabled()) { |
src/zig_clang_cc1as_main.cpp+13-12| ... | @@ -26,6 +26,7 @@ | ... | @@ -26,6 +26,7 @@ |
| 26 | #include "llvm/MC/MCAsmInfo.h" | 26 | #include "llvm/MC/MCAsmInfo.h" |
| 27 | #include "llvm/MC/MCCodeEmitter.h" | 27 | #include "llvm/MC/MCCodeEmitter.h" |
| 28 | #include "llvm/MC/MCContext.h" | 28 | #include "llvm/MC/MCContext.h" |
| 29 | #include "llvm/MC/MCInstPrinter.h" | ||
| 29 | #include "llvm/MC/MCInstrInfo.h" | 30 | #include "llvm/MC/MCInstrInfo.h" |
| 30 | #include "llvm/MC/MCObjectFileInfo.h" | 31 | #include "llvm/MC/MCObjectFileInfo.h" |
| 31 | #include "llvm/MC/MCObjectWriter.h" | 32 | #include "llvm/MC/MCObjectWriter.h" |
| ... | @@ -541,8 +542,8 @@ static bool ExecuteAssemblerImpl(AssemblerInvocation &Opts, | ... | @@ -541,8 +542,8 @@ static bool ExecuteAssemblerImpl(AssemblerInvocation &Opts, |
| 541 | 542 | ||
| 542 | // FIXME: There is a bit of code duplication with addPassesToEmitFile. | 543 | // FIXME: There is a bit of code duplication with addPassesToEmitFile. |
| 543 | if (Opts.OutputType == AssemblerInvocation::FT_Asm) { | 544 | if (Opts.OutputType == AssemblerInvocation::FT_Asm) { |
| 544 | MCInstPrinter *IP = TheTarget->createMCInstPrinter( | 545 | std::unique_ptr<MCInstPrinter> IP(TheTarget->createMCInstPrinter( |
| 545 | llvm::Triple(Opts.Triple), Opts.OutputAsmVariant, *MAI, *MCII, *MRI); | 546 | llvm::Triple(Opts.Triple), Opts.OutputAsmVariant, *MAI, *MCII, *MRI)); |
| 546 | 547 | ||
| 547 | std::unique_ptr<MCCodeEmitter> CE; | 548 | std::unique_ptr<MCCodeEmitter> CE; |
| 548 | if (Opts.ShowEncoding) | 549 | if (Opts.ShowEncoding) |
| ... | @@ -551,7 +552,7 @@ static bool ExecuteAssemblerImpl(AssemblerInvocation &Opts, | ... | @@ -551,7 +552,7 @@ static bool ExecuteAssemblerImpl(AssemblerInvocation &Opts, |
| 551 | TheTarget->createMCAsmBackend(*STI, *MRI, MCOptions)); | 552 | TheTarget->createMCAsmBackend(*STI, *MRI, MCOptions)); |
| 552 | 553 | ||
| 553 | auto FOut = std::make_unique<formatted_raw_ostream>(*Out); | 554 | auto FOut = std::make_unique<formatted_raw_ostream>(*Out); |
| 554 | Str.reset(TheTarget->createAsmStreamer(Ctx, std::move(FOut), IP, | 555 | Str.reset(TheTarget->createAsmStreamer(Ctx, std::move(FOut), std::move(IP), |
| 555 | std::move(CE), std::move(MAB))); | 556 | std::move(CE), std::move(MAB))); |
| 556 | } else if (Opts.OutputType == AssemblerInvocation::FT_Null) { | 557 | } else if (Opts.OutputType == AssemblerInvocation::FT_Null) { |
| 557 | Str.reset(createNullStreamer(Ctx)); | 558 | Str.reset(createNullStreamer(Ctx)); |
| ... | @@ -576,7 +577,7 @@ static bool ExecuteAssemblerImpl(AssemblerInvocation &Opts, | ... | @@ -576,7 +577,7 @@ static bool ExecuteAssemblerImpl(AssemblerInvocation &Opts, |
| 576 | Triple T(Opts.Triple); | 577 | Triple T(Opts.Triple); |
| 577 | Str.reset(TheTarget->createMCObjectStreamer( | 578 | Str.reset(TheTarget->createMCObjectStreamer( |
| 578 | T, Ctx, std::move(MAB), std::move(OW), std::move(CE), *STI)); | 579 | T, Ctx, std::move(MAB), std::move(OW), std::move(CE), *STI)); |
| 579 | Str.get()->initSections(Opts.NoExecStack, *STI); | 580 | Str->initSections(Opts.NoExecStack, *STI); |
| 580 | if (T.isOSBinFormatMachO() && T.isOSDarwin()) { | 581 | if (T.isOSBinFormatMachO() && T.isOSDarwin()) { |
| 581 | Triple *TVT = Opts.DarwinTargetVariantTriple | 582 | Triple *TVT = Opts.DarwinTargetVariantTriple |
| 582 | ? &*Opts.DarwinTargetVariantTriple | 583 | ? &*Opts.DarwinTargetVariantTriple |
| ... | @@ -591,14 +592,14 @@ static bool ExecuteAssemblerImpl(AssemblerInvocation &Opts, | ... | @@ -591,14 +592,14 @@ static bool ExecuteAssemblerImpl(AssemblerInvocation &Opts, |
| 591 | if (Opts.EmbedBitcode && Ctx.getObjectFileType() == MCContext::IsMachO) { | 592 | if (Opts.EmbedBitcode && Ctx.getObjectFileType() == MCContext::IsMachO) { |
| 592 | MCSection *AsmLabel = Ctx.getMachOSection( | 593 | MCSection *AsmLabel = Ctx.getMachOSection( |
| 593 | "__LLVM", "__asm", MachO::S_REGULAR, 4, SectionKind::getReadOnly()); | 594 | "__LLVM", "__asm", MachO::S_REGULAR, 4, SectionKind::getReadOnly()); |
| 594 | Str.get()->switchSection(AsmLabel); | 595 | Str->switchSection(AsmLabel); |
| 595 | Str.get()->emitZeros(1); | 596 | Str->emitZeros(1); |
| 596 | } | 597 | } |
| 597 | 598 | ||
| 598 | bool Failed = false; | 599 | bool Failed = false; |
| 599 | 600 | ||
| 600 | std::unique_ptr<MCAsmParser> Parser( | 601 | std::unique_ptr<MCAsmParser> Parser( |
| 601 | createMCAsmParser(SrcMgr, Ctx, *Str.get(), *MAI)); | 602 | createMCAsmParser(SrcMgr, Ctx, *Str, *MAI)); |
| 602 | 603 | ||
| 603 | // FIXME: init MCTargetOptions from sanitizer flags here. | 604 | // FIXME: init MCTargetOptions from sanitizer flags here. |
| 604 | std::unique_ptr<MCTargetAsmParser> TAP( | 605 | std::unique_ptr<MCTargetAsmParser> TAP( |
| ... | @@ -618,7 +619,7 @@ static bool ExecuteAssemblerImpl(AssemblerInvocation &Opts, | ... | @@ -618,7 +619,7 @@ static bool ExecuteAssemblerImpl(AssemblerInvocation &Opts, |
| 618 | } | 619 | } |
| 619 | 620 | ||
| 620 | if (!Failed) { | 621 | if (!Failed) { |
| 621 | Parser->setTargetParser(*TAP.get()); | 622 | Parser->setTargetParser(*TAP); |
| 622 | Failed = Parser->Run(Opts.NoInitialTextSection); | 623 | Failed = Parser->Run(Opts.NoInitialTextSection); |
| 623 | } | 624 | } |
| 624 | 625 | ||
| ... | @@ -657,12 +658,12 @@ int cc1as_main(ArrayRef<const char *> Argv, const char *Argv0, void *MainAddr) { | ... | @@ -657,12 +658,12 @@ int cc1as_main(ArrayRef<const char *> Argv, const char *Argv0, void *MainAddr) { |
| 657 | InitializeAllAsmParsers(); | 658 | InitializeAllAsmParsers(); |
| 658 | 659 | ||
| 659 | // Construct our diagnostic client. | 660 | // Construct our diagnostic client. |
| 660 | IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts = new DiagnosticOptions(); | 661 | DiagnosticOptions DiagOpts; |
| 661 | TextDiagnosticPrinter *DiagClient | 662 | TextDiagnosticPrinter *DiagClient = |
| 662 | = new TextDiagnosticPrinter(errs(), &*DiagOpts); | 663 | new TextDiagnosticPrinter(errs(), DiagOpts); |
| 663 | DiagClient->setPrefix("clang -cc1as"); | 664 | DiagClient->setPrefix("clang -cc1as"); |
| 664 | IntrusiveRefCntPtr<DiagnosticIDs> DiagID(new DiagnosticIDs()); | 665 | IntrusiveRefCntPtr<DiagnosticIDs> DiagID(new DiagnosticIDs()); |
| 665 | DiagnosticsEngine Diags(DiagID, &*DiagOpts, DiagClient); | 666 | DiagnosticsEngine Diags(DiagID, DiagOpts, DiagClient); |
| 666 | 667 | ||
| 667 | // Set an error handler, so that any LLVM backend diagnostics go through our | 668 | // Set an error handler, so that any LLVM backend diagnostics go through our |
| 668 | // error handler. | 669 | // error handler. |
src/zig_clang_driver.cpp+16-8| ... | @@ -153,6 +153,11 @@ static bool SetBackdoorDriverOutputsFromEnvVars(Driver &TheDriver) { | ... | @@ -153,6 +153,11 @@ static bool SetBackdoorDriverOutputsFromEnvVars(Driver &TheDriver) { |
| 153 | } | 153 | } |
| 154 | 154 | ||
| 155 | const char *FilteringStr = ::getenv("CC_PRINT_HEADERS_FILTERING"); | 155 | const char *FilteringStr = ::getenv("CC_PRINT_HEADERS_FILTERING"); |
| 156 | if (!FilteringStr) { | ||
| 157 | TheDriver.Diag(clang::diag::err_drv_print_header_env_var_invalid_format) | ||
| 158 | << EnvVar; | ||
| 159 | return false; | ||
| 160 | } | ||
| 156 | HeaderIncludeFilteringKind Filtering; | 161 | HeaderIncludeFilteringKind Filtering; |
| 157 | if (!stringToHeaderIncludeFiltering(FilteringStr, Filtering)) { | 162 | if (!stringToHeaderIncludeFiltering(FilteringStr, Filtering)) { |
| 158 | TheDriver.Diag(clang::diag::err_drv_print_header_env_var) | 163 | TheDriver.Diag(clang::diag::err_drv_print_header_env_var) |
| ... | @@ -163,7 +168,7 @@ static bool SetBackdoorDriverOutputsFromEnvVars(Driver &TheDriver) { | ... | @@ -163,7 +168,7 @@ static bool SetBackdoorDriverOutputsFromEnvVars(Driver &TheDriver) { |
| 163 | if ((TheDriver.CCPrintHeadersFormat == HIFMT_Textual && | 168 | if ((TheDriver.CCPrintHeadersFormat == HIFMT_Textual && |
| 164 | Filtering != HIFIL_None) || | 169 | Filtering != HIFIL_None) || |
| 165 | (TheDriver.CCPrintHeadersFormat == HIFMT_JSON && | 170 | (TheDriver.CCPrintHeadersFormat == HIFMT_JSON && |
| 166 | Filtering != HIFIL_Only_Direct_System)) { | 171 | Filtering == HIFIL_None)) { |
| 167 | TheDriver.Diag(clang::diag::err_drv_print_header_env_var_combination) | 172 | TheDriver.Diag(clang::diag::err_drv_print_header_env_var_combination) |
| 168 | << EnvVar << FilteringStr; | 173 | << EnvVar << FilteringStr; |
| 169 | return false; | 174 | return false; |
| ... | @@ -295,7 +300,7 @@ static int clang_main(int Argc, char **Argv, const llvm::ToolContext &ToolContex | ... | @@ -295,7 +300,7 @@ static int clang_main(int Argc, char **Argv, const llvm::ToolContext &ToolContex |
| 295 | if (const char *OverrideStr = ::getenv("CCC_OVERRIDE_OPTIONS")) { | 300 | if (const char *OverrideStr = ::getenv("CCC_OVERRIDE_OPTIONS")) { |
| 296 | // FIXME: Driver shouldn't take extra initial argument. | 301 | // FIXME: Driver shouldn't take extra initial argument. |
| 297 | driver::applyOverrideOptions(Args, OverrideStr, SavedStrings, | 302 | driver::applyOverrideOptions(Args, OverrideStr, SavedStrings, |
| 298 | &llvm::errs()); | 303 | "CCC_OVERRIDE_OPTIONS", &llvm::errs()); |
| 299 | } | 304 | } |
| 300 | 305 | ||
| 301 | std::string Path = GetExecutablePath(ToolContext.Path, CanonicalPrefixes); | 306 | std::string Path = GetExecutablePath(ToolContext.Path, CanonicalPrefixes); |
| ... | @@ -311,21 +316,24 @@ static int clang_main(int Argc, char **Argv, const llvm::ToolContext &ToolContex | ... | @@ -311,21 +316,24 @@ static int clang_main(int Argc, char **Argv, const llvm::ToolContext &ToolContex |
| 311 | .Case("-fintegrated-cc1", false) | 316 | .Case("-fintegrated-cc1", false) |
| 312 | .Default(UseNewCC1Process); | 317 | .Default(UseNewCC1Process); |
| 313 | 318 | ||
| 314 | IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts = | 319 | std::unique_ptr<DiagnosticOptions> DiagOpts = CreateAndPopulateDiagOpts(Args); |
| 315 | CreateAndPopulateDiagOpts(Args); | 320 | // Driver's diagnostics don't use suppression mappings, so don't bother |
| 321 | // parsing them. CC1 still receives full args, so this doesn't impact other | ||
| 322 | // actions. | ||
| 323 | DiagOpts->DiagnosticSuppressionMappingsFile.clear(); | ||
| 316 | 324 | ||
| 317 | TextDiagnosticPrinter *DiagClient | 325 | TextDiagnosticPrinter *DiagClient = |
| 318 | = new TextDiagnosticPrinter(llvm::errs(), &*DiagOpts); | 326 | new TextDiagnosticPrinter(llvm::errs(), *DiagOpts); |
| 319 | FixupDiagPrefixExeName(DiagClient, ProgName); | 327 | FixupDiagPrefixExeName(DiagClient, ProgName); |
| 320 | 328 | ||
| 321 | IntrusiveRefCntPtr<DiagnosticIDs> DiagID(new DiagnosticIDs()); | 329 | IntrusiveRefCntPtr<DiagnosticIDs> DiagID(new DiagnosticIDs()); |
| 322 | 330 | ||
| 323 | DiagnosticsEngine Diags(DiagID, &*DiagOpts, DiagClient); | 331 | DiagnosticsEngine Diags(DiagID, *DiagOpts, DiagClient); |
| 324 | 332 | ||
| 325 | if (!DiagOpts->DiagnosticSerializationFile.empty()) { | 333 | if (!DiagOpts->DiagnosticSerializationFile.empty()) { |
| 326 | auto SerializedConsumer = | 334 | auto SerializedConsumer = |
| 327 | clang::serialized_diags::create(DiagOpts->DiagnosticSerializationFile, | 335 | clang::serialized_diags::create(DiagOpts->DiagnosticSerializationFile, |
| 328 | &*DiagOpts, /*MergeChildRecords=*/true); | 336 | *DiagOpts, /*MergeChildRecords=*/true); |
| 329 | Diags.setClient(new ChainedDiagnosticConsumer( | 337 | Diags.setClient(new ChainedDiagnosticConsumer( |
| 330 | Diags.takeClient(), std::move(SerializedConsumer))); | 338 | Diags.takeClient(), std::move(SerializedConsumer))); |
| 331 | } | 339 | } |
src/zig_llvm-ar.cpp+1-1| ... | @@ -130,7 +130,7 @@ MODIFIERS: | ... | @@ -130,7 +130,7 @@ MODIFIERS: |
| 130 | << "USAGE: " + ToolName + | 130 | << "USAGE: " + ToolName + |
| 131 | " [options] [-]<operation>[modifiers] [relpos] " | 131 | " [options] [-]<operation>[modifiers] [relpos] " |
| 132 | "[count] <archive> [files]\n" | 132 | "[count] <archive> [files]\n" |
| 133 | << " " + ToolName + " -M [<mri-script]\n\n"; | 133 | << " " + ToolName + " -M [< mri-script]\n\n"; |
| 134 | 134 | ||
| 135 | outs() << ArOptions; | 135 | outs() << ArOptions; |
| 136 | } | 136 | } |