diff options
author | Ben Langmuir <blangmuir@apple.com> | 2025-01-22 16:24:56 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-01-22 16:24:56 -0800 |
commit | 9fbf5cfebcd770fbe0e453f36ee7c74809339f18 (patch) | |
tree | d5c356aa31366787f181148413606d015780bafb /clang/lib/CodeGen/BackendUtil.cpp | |
parent | 96dbd0006c3c4c9de5f1fe4f3bbac3c74acac436 (diff) | |
download | llvm-9fbf5cfebcd770fbe0e453f36ee7c74809339f18.zip llvm-9fbf5cfebcd770fbe0e453f36ee7c74809339f18.tar.gz llvm-9fbf5cfebcd770fbe0e453f36ee7c74809339f18.tar.bz2 |
[clang][modules] Partially revert 48d0eb518 to fix -gmodules output (#124003)
With the changes in 48d0eb518, the CodeGenOptions used to emit .pcm
files with -fmodule-format=obj (-gmodules) were the ones from the
original invocation, rather than the ones specifically crafted for
outputting the pcm. This was causing the pcm to be written with only the
debug info and without the __clangast section in some cases (e.g. -O2).
This unforunately was not covered by existing tests, because compiling
and loading a module within a single compilation load the ast content
from the in-memory module cache rather than reading it from the pcm file
that was written. This broke bootstrapping a build of clang with modules
enabled on Darwin.
rdar://143418834
Diffstat (limited to 'clang/lib/CodeGen/BackendUtil.cpp')
-rw-r--r-- | clang/lib/CodeGen/BackendUtil.cpp | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/clang/lib/CodeGen/BackendUtil.cpp b/clang/lib/CodeGen/BackendUtil.cpp index f60f867..3e65eeb 100644 --- a/clang/lib/CodeGen/BackendUtil.cpp +++ b/clang/lib/CodeGen/BackendUtil.cpp @@ -206,9 +206,10 @@ class EmitAssemblyHelper { } public: - EmitAssemblyHelper(CompilerInstance &CI, llvm::Module *M, + EmitAssemblyHelper(CompilerInstance &CI, CodeGenOptions &CGOpts, + llvm::Module *M, IntrusiveRefCntPtr<llvm::vfs::FileSystem> VFS) - : CI(CI), Diags(CI.getDiagnostics()), CodeGenOpts(CI.getCodeGenOpts()), + : CI(CI), Diags(CI.getDiagnostics()), CodeGenOpts(CGOpts), TargetOpts(CI.getTargetOpts()), LangOpts(CI.getLangOpts()), TheModule(M), VFS(std::move(VFS)), TargetTriple(TheModule->getTargetTriple()) {} @@ -1364,14 +1365,14 @@ runThinLTOBackend(CompilerInstance &CI, ModuleSummaryIndex *CombinedIndex, } } -void clang::emitBackendOutput(CompilerInstance &CI, StringRef TDesc, - llvm::Module *M, BackendAction Action, +void clang::emitBackendOutput(CompilerInstance &CI, CodeGenOptions &CGOpts, + StringRef TDesc, llvm::Module *M, + BackendAction Action, IntrusiveRefCntPtr<llvm::vfs::FileSystem> VFS, std::unique_ptr<raw_pwrite_stream> OS, BackendConsumer *BC) { llvm::TimeTraceScope TimeScope("Backend"); DiagnosticsEngine &Diags = CI.getDiagnostics(); - const auto &CGOpts = CI.getCodeGenOpts(); std::unique_ptr<llvm::Module> EmptyModule; if (!CGOpts.ThinLTOIndexFile.empty()) { @@ -1411,7 +1412,7 @@ void clang::emitBackendOutput(CompilerInstance &CI, StringRef TDesc, } } - EmitAssemblyHelper AsmHelper(CI, M, VFS); + EmitAssemblyHelper AsmHelper(CI, CGOpts, M, VFS); AsmHelper.emitAssembly(Action, std::move(OS), BC); // Verify clang's TargetInfo DataLayout against the LLVM TargetMachine's |