Emit cxx interop into DW_AT_APPLE_flags

When compiling with interop enabled, emit the C++ interop compiler flag
into the DW_AT_APPLE_flags, to make it so LLDB can accurately match the
C++ interop mode when initializing its compiler instance.

rdar://97610458
(cherry picked from commit b1dbb0a321)
This commit is contained in:
Augusto Noronha
2023-04-05 15:58:52 -07:00
parent bb2fc82b37
commit dbaf5e53f0
4 changed files with 20 additions and 5 deletions

View File

@@ -560,13 +560,19 @@ public:
return OptMode == OptimizationMode::ForSize;
}
std::string getDebugFlags(StringRef PrivateDiscriminator) const {
std::string getDebugFlags(StringRef PrivateDiscriminator,
bool EnableCXXInterop) const {
std::string Flags = DebugFlags;
if (!PrivateDiscriminator.empty()) {
if (!Flags.empty())
Flags += " ";
Flags += ("-private-discriminator " + PrivateDiscriminator).str();
}
if (EnableCXXInterop) {
if (!Flags.empty())
Flags += " ";
Flags += "-enable-experimental-cxx-interop";
}
return Flags;
}

View File

@@ -2001,9 +2001,11 @@ IRGenDebugInfoImpl::IRGenDebugInfoImpl(const IRGenOptions &Opts,
SDK = *It;
}
bool EnableCXXInterop =
IGM.getSILModule().getASTContext().LangOpts.EnableCXXInterop;
TheCU = DBuilder.createCompileUnit(
Lang, MainFile, Producer, Opts.shouldOptimize(), Opts.getDebugFlags(PD),
MajorRuntimeVersion, SplitName,
Lang, MainFile, Producer, Opts.shouldOptimize(),
Opts.getDebugFlags(PD, EnableCXXInterop), MajorRuntimeVersion, SplitName,
Opts.DebugInfoLevel > IRGenDebugInfoLevel::LineTables
? llvm::DICompileUnit::FullDebug
: llvm::DICompileUnit::LineTablesOnly,

View File

@@ -124,13 +124,15 @@ static clang::CodeGenerator *createClangCodeGenerator(ASTContext &Context,
case IRGenDebugInfoFormat::DWARF:
CGO.DebugCompilationDir = Opts.DebugCompilationDir;
CGO.DwarfVersion = Opts.DWARFVersion;
CGO.DwarfDebugFlags = Opts.getDebugFlags(PD);
CGO.DwarfDebugFlags =
Opts.getDebugFlags(PD, Context.LangOpts.EnableCXXInterop);
break;
case IRGenDebugInfoFormat::CodeView:
CGO.EmitCodeView = true;
CGO.DebugCompilationDir = Opts.DebugCompilationDir;
// This actually contains the debug flags for codeview.
CGO.DwarfDebugFlags = Opts.getDebugFlags(PD);
CGO.DwarfDebugFlags =
Opts.getDebugFlags(PD, Context.LangOpts.EnableCXXInterop);
break;
}
if (!Opts.TrapFuncName.empty()) {

View File

@@ -0,0 +1,5 @@
// Check that the "-enable-experimental-cxx-interop" is stored as a flag in the
// Compile Unit.
// RUN: %target-swift-frontend -emit-ir -enable-experimental-cxx-interop -g %s -o - | %FileCheck %s
// CHECK: !DICompileUnit({{.*}}flags: "-enable-experimental-cxx-interop"