authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2025-07-16 04:46:03+02:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2025-08-30 06:36:40+02:00
logb7a8c045efab89c0fab0d3d1c678442c2b373066
treead21afbd9d3e92aeabdf5ec0743bf73938ff6822
parent008affa64559487c6886e27075bb5377ca915b4a
signaturebadge-check Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

zig cc: update driver files to LLVM 21


4 files changed, 57 insertions(+), 34 deletions(-)

src/zig_clang_cc1_main.cpp+27-13
......@@ -111,9 +111,10 @@ static void ensureSufficientStack() {}
111111
112112/// Print supported cpus of the given target.
113113static int PrintSupportedCPUs(std::string TargetStr) {
114 llvm::Triple Triple(TargetStr);
114115 std::string Error;
115116 const llvm::Target *TheTarget =
116 llvm::TargetRegistry::lookupTarget(TargetStr, Error);
117 llvm::TargetRegistry::lookupTarget(Triple, Error);
117118 if (!TheTarget) {
118119 llvm::errs() << Error;
119120 return 1;
......@@ -122,15 +123,16 @@ static int PrintSupportedCPUs(std::string TargetStr) {
122123 // the target machine will handle the mcpu printing
123124 llvm::TargetOptions Options;
124125 std::unique_ptr<llvm::TargetMachine> TheTargetMachine(
125 TheTarget->createTargetMachine(TargetStr, "", "+cpuhelp", Options,
126 TheTarget->createTargetMachine(Triple, "", "+cpuhelp", Options,
126127 std::nullopt));
127128 return 0;
128129}
129130
130131static int PrintSupportedExtensions(std::string TargetStr) {
132 llvm::Triple Triple(TargetStr);
131133 std::string Error;
132134 const llvm::Target *TheTarget =
133 llvm::TargetRegistry::lookupTarget(TargetStr, Error);
135 llvm::TargetRegistry::lookupTarget(Triple, Error);
134136 if (!TheTarget) {
135137 llvm::errs() << Error;
136138 return 1;
......@@ -138,7 +140,7 @@ static int PrintSupportedExtensions(std::string TargetStr) {
138140
139141 llvm::TargetOptions Options;
140142 std::unique_ptr<llvm::TargetMachine> TheTargetMachine(
141 TheTarget->createTargetMachine(TargetStr, "", "", Options, std::nullopt));
143 TheTarget->createTargetMachine(Triple, "", "", Options, std::nullopt));
142144 const llvm::Triple &MachineTriple = TheTargetMachine->getTargetTriple();
143145 const llvm::MCSubtargetInfo *MCInfo = TheTargetMachine->getMCSubtargetInfo();
144146 const llvm::ArrayRef<llvm::SubtargetFeatureKV> Features =
......@@ -165,9 +167,10 @@ static int PrintSupportedExtensions(std::string TargetStr) {
165167}
166168
167169static int PrintEnabledExtensions(const TargetOptions& TargetOpts) {
170 llvm::Triple Triple(TargetOpts.Triple);
168171 std::string Error;
169172 const llvm::Target *TheTarget =
170 llvm::TargetRegistry::lookupTarget(TargetOpts.Triple, Error);
173 llvm::TargetRegistry::lookupTarget(Triple, Error);
171174 if (!TheTarget) {
172175 llvm::errs() << Error;
173176 return 1;
......@@ -179,7 +182,8 @@ static int PrintEnabledExtensions(const TargetOptions& TargetOpts) {
179182 llvm::TargetOptions BackendOptions;
180183 std::string FeaturesStr = llvm::join(TargetOpts.FeaturesAsWritten, ",");
181184 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));
183187 const llvm::Triple &MachineTriple = TheTargetMachine->getTargetTriple();
184188 const llvm::MCSubtargetInfo *MCInfo = TheTargetMachine->getMCSubtargetInfo();
185189
......@@ -213,11 +217,10 @@ static int PrintEnabledExtensions(const TargetOptions& TargetOpts) {
213217int cc1_main(ArrayRef<const char *> Argv, const char *Argv0, void *MainAddr) {
214218 ensureSufficientStack();
215219
216 std::unique_ptr<CompilerInstance> Clang(new CompilerInstance());
217220 IntrusiveRefCntPtr<DiagnosticIDs> DiagID(new DiagnosticIDs());
218221
219222 // Register the support for object-file-wrapped Clang modules.
220 auto PCHOps = Clang->getPCHContainerOperations();
223 auto PCHOps = std::make_shared<PCHContainerOperations>();
221224 PCHOps->registerWriter(std::make_unique<ObjectFilePCHContainerWriter>());
222225 PCHOps->registerReader(std::make_unique<ObjectFilePCHContainerReader>());
223226
......@@ -229,17 +232,21 @@ int cc1_main(ArrayRef<const char *> Argv, const char *Argv0, void *MainAddr) {
229232
230233 // Buffer diagnostics from argument parsing so that we can output them using a
231234 // well formed diagnostic object.
232 IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts = new DiagnosticOptions();
235 DiagnosticOptions DiagOpts;
233236 TextDiagnosticBuffer *DiagsBuffer = new TextDiagnosticBuffer;
234 DiagnosticsEngine Diags(DiagID, &*DiagOpts, DiagsBuffer);
237 DiagnosticsEngine Diags(DiagID, DiagOpts, DiagsBuffer);
235238
236239 // Setup round-trip remarks for the DiagnosticsEngine used in CreateFromArgs.
237240 if (find(Argv, StringRef("-Rround-trip-cc1-args")) != Argv.end())
238241 Diags.setSeverity(diag::remark_cc1_round_trip_generated,
239242 diag::Severity::Remark, {});
240243
241 bool Success = CompilerInvocation::CreateFromArgs(Clang->getInvocation(),
242 Argv, Diags, Argv0);
244 auto Invocation = std::make_shared<CompilerInvocation>();
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));
243250
244251 if (!Clang->getFrontendOpts().TimeTracePath.empty()) {
245252 llvm::timeTraceProfilerInitialize(
......@@ -292,7 +299,14 @@ int cc1_main(ArrayRef<const char *> Argv, const char *Argv0, void *MainAddr) {
292299
293300 // If any timers were active but haven't been destroyed yet, print their
294301 // 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 }
296310 llvm::TimerGroup::clearAll();
297311
298312 if (llvm::timeTraceProfilerEnabled()) {
src/zig_clang_cc1as_main.cpp+13-12
......@@ -26,6 +26,7 @@
2626#include "llvm/MC/MCAsmInfo.h"
2727#include "llvm/MC/MCCodeEmitter.h"
2828#include "llvm/MC/MCContext.h"
29#include "llvm/MC/MCInstPrinter.h"
2930#include "llvm/MC/MCInstrInfo.h"
3031#include "llvm/MC/MCObjectFileInfo.h"
3132#include "llvm/MC/MCObjectWriter.h"
......@@ -541,8 +542,8 @@ static bool ExecuteAssemblerImpl(AssemblerInvocation &Opts,
541542
542543 // FIXME: There is a bit of code duplication with addPassesToEmitFile.
543544 if (Opts.OutputType == AssemblerInvocation::FT_Asm) {
544 MCInstPrinter *IP = TheTarget->createMCInstPrinter(
545 llvm::Triple(Opts.Triple), Opts.OutputAsmVariant, *MAI, *MCII, *MRI);
545 std::unique_ptr<MCInstPrinter> IP(TheTarget->createMCInstPrinter(
546 llvm::Triple(Opts.Triple), Opts.OutputAsmVariant, *MAI, *MCII, *MRI));
546547
547548 std::unique_ptr<MCCodeEmitter> CE;
548549 if (Opts.ShowEncoding)
......@@ -551,7 +552,7 @@ static bool ExecuteAssemblerImpl(AssemblerInvocation &Opts,
551552 TheTarget->createMCAsmBackend(*STI, *MRI, MCOptions));
552553
553554 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),
555556 std::move(CE), std::move(MAB)));
556557 } else if (Opts.OutputType == AssemblerInvocation::FT_Null) {
557558 Str.reset(createNullStreamer(Ctx));
......@@ -576,7 +577,7 @@ static bool ExecuteAssemblerImpl(AssemblerInvocation &Opts,
576577 Triple T(Opts.Triple);
577578 Str.reset(TheTarget->createMCObjectStreamer(
578579 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);
580581 if (T.isOSBinFormatMachO() && T.isOSDarwin()) {
581582 Triple *TVT = Opts.DarwinTargetVariantTriple
582583 ? &*Opts.DarwinTargetVariantTriple
......@@ -591,14 +592,14 @@ static bool ExecuteAssemblerImpl(AssemblerInvocation &Opts,
591592 if (Opts.EmbedBitcode && Ctx.getObjectFileType() == MCContext::IsMachO) {
592593 MCSection *AsmLabel = Ctx.getMachOSection(
593594 "__LLVM", "__asm", MachO::S_REGULAR, 4, SectionKind::getReadOnly());
594 Str.get()->switchSection(AsmLabel);
595 Str.get()->emitZeros(1);
595 Str->switchSection(AsmLabel);
596 Str->emitZeros(1);
596597 }
597598
598599 bool Failed = false;
599600
600601 std::unique_ptr<MCAsmParser> Parser(
601 createMCAsmParser(SrcMgr, Ctx, *Str.get(), *MAI));
602 createMCAsmParser(SrcMgr, Ctx, *Str, *MAI));
602603
603604 // FIXME: init MCTargetOptions from sanitizer flags here.
604605 std::unique_ptr<MCTargetAsmParser> TAP(
......@@ -618,7 +619,7 @@ static bool ExecuteAssemblerImpl(AssemblerInvocation &Opts,
618619 }
619620
620621 if (!Failed) {
621 Parser->setTargetParser(*TAP.get());
622 Parser->setTargetParser(*TAP);
622623 Failed = Parser->Run(Opts.NoInitialTextSection);
623624 }
624625
......@@ -657,12 +658,12 @@ int cc1as_main(ArrayRef<const char *> Argv, const char *Argv0, void *MainAddr) {
657658 InitializeAllAsmParsers();
658659
659660 // Construct our diagnostic client.
660 IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts = new DiagnosticOptions();
661 TextDiagnosticPrinter *DiagClient
662 = new TextDiagnosticPrinter(errs(), &*DiagOpts);
661 DiagnosticOptions DiagOpts;
662 TextDiagnosticPrinter *DiagClient =
663 new TextDiagnosticPrinter(errs(), DiagOpts);
663664 DiagClient->setPrefix("clang -cc1as");
664665 IntrusiveRefCntPtr<DiagnosticIDs> DiagID(new DiagnosticIDs());
665 DiagnosticsEngine Diags(DiagID, &*DiagOpts, DiagClient);
666 DiagnosticsEngine Diags(DiagID, DiagOpts, DiagClient);
666667
667668 // Set an error handler, so that any LLVM backend diagnostics go through our
668669 // error handler.
src/zig_clang_driver.cpp+16-8
......@@ -153,6 +153,11 @@ static bool SetBackdoorDriverOutputsFromEnvVars(Driver &TheDriver) {
153153 }
154154
155155 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 }
156161 HeaderIncludeFilteringKind Filtering;
157162 if (!stringToHeaderIncludeFiltering(FilteringStr, Filtering)) {
158163 TheDriver.Diag(clang::diag::err_drv_print_header_env_var)
......@@ -163,7 +168,7 @@ static bool SetBackdoorDriverOutputsFromEnvVars(Driver &TheDriver) {
163168 if ((TheDriver.CCPrintHeadersFormat == HIFMT_Textual &&
164169 Filtering != HIFIL_None) ||
165170 (TheDriver.CCPrintHeadersFormat == HIFMT_JSON &&
166 Filtering != HIFIL_Only_Direct_System)) {
171 Filtering == HIFIL_None)) {
167172 TheDriver.Diag(clang::diag::err_drv_print_header_env_var_combination)
168173 << EnvVar << FilteringStr;
169174 return false;
......@@ -295,7 +300,7 @@ static int clang_main(int Argc, char **Argv, const llvm::ToolContext &ToolContex
295300 if (const char *OverrideStr = ::getenv("CCC_OVERRIDE_OPTIONS")) {
296301 // FIXME: Driver shouldn't take extra initial argument.
297302 driver::applyOverrideOptions(Args, OverrideStr, SavedStrings,
298 &llvm::errs());
303 "CCC_OVERRIDE_OPTIONS", &llvm::errs());
299304 }
300305
301306 std::string Path = GetExecutablePath(ToolContext.Path, CanonicalPrefixes);
......@@ -311,21 +316,24 @@ static int clang_main(int Argc, char **Argv, const llvm::ToolContext &ToolContex
311316 .Case("-fintegrated-cc1", false)
312317 .Default(UseNewCC1Process);
313318
314 IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts =
315 CreateAndPopulateDiagOpts(Args);
319 std::unique_ptr<DiagnosticOptions> DiagOpts = 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();
316324
317 TextDiagnosticPrinter *DiagClient
318 = new TextDiagnosticPrinter(llvm::errs(), &*DiagOpts);
325 TextDiagnosticPrinter *DiagClient =
326 new TextDiagnosticPrinter(llvm::errs(), *DiagOpts);
319327 FixupDiagPrefixExeName(DiagClient, ProgName);
320328
321329 IntrusiveRefCntPtr<DiagnosticIDs> DiagID(new DiagnosticIDs());
322330
323 DiagnosticsEngine Diags(DiagID, &*DiagOpts, DiagClient);
331 DiagnosticsEngine Diags(DiagID, *DiagOpts, DiagClient);
324332
325333 if (!DiagOpts->DiagnosticSerializationFile.empty()) {
326334 auto SerializedConsumer =
327335 clang::serialized_diags::create(DiagOpts->DiagnosticSerializationFile,
328 &*DiagOpts, /*MergeChildRecords=*/true);
336 *DiagOpts, /*MergeChildRecords=*/true);
329337 Diags.setClient(new ChainedDiagnosticConsumer(
330338 Diags.takeClient(), std::move(SerializedConsumer)));
331339 }
src/zig_llvm-ar.cpp+1-1
......@@ -130,7 +130,7 @@ MODIFIERS:
130130 << "USAGE: " + ToolName +
131131 " [options] [-]<operation>[modifiers] [relpos] "
132132 "[count] <archive> [files]\n"
133 << " " + ToolName + " -M [<mri-script]\n\n";
133 << " " + ToolName + " -M [< mri-script]\n\n";
134134
135135 outs() << ArOptions;
136136}