File tree 2 files changed +10
-2
lines changed
2 files changed +10
-2
lines changed Original file line number Diff line number Diff line change @@ -204,6 +204,12 @@ class IRGenDebugInfoImpl : public IRGenDebugInfo {
204
204
IRGenModule &IGM, llvm::Module &M,
205
205
StringRef MainOutputFilenameForDebugInfo,
206
206
StringRef PrivateDiscriminator);
207
+ ~IRGenDebugInfoImpl () {
208
+ // FIXME: SILPassManager sometimes creates an IGM and doesn't finalize it.
209
+ if (!FwdDeclTypes.empty ())
210
+ finalize ();
211
+ assert (FwdDeclTypes.empty () && " finalize() was not called" );
212
+ }
207
213
void finalize ();
208
214
209
215
void setCurrentLoc (IRBuilder &Builder, const SILDebugScope *DS,
@@ -2549,6 +2555,7 @@ void IRGenDebugInfoImpl::finalize() {
2549
2555
finalize (cast<llvm::MDNode>(Ty.second ),
2550
2556
llvm::cast_or_null<llvm::DIType>(DIRefMap.lookup (UID)), UID);
2551
2557
}
2558
+ FwdDeclTypes.clear ();
2552
2559
2553
2560
// Finalize the DIBuilder.
2554
2561
DBuilder.finalize ();
Original file line number Diff line number Diff line change @@ -1948,6 +1948,9 @@ bool IRGenModule::finalize() {
1948
1948
// Finalize clang IR-generation.
1949
1949
finalizeClangCodeGen ();
1950
1950
1951
+ if (DebugInfo)
1952
+ DebugInfo->finalize ();
1953
+
1951
1954
// If that failed, report failure up and skip the final clean-up.
1952
1955
if (!ClangCodeGen->GetModule ())
1953
1956
return false ;
@@ -1956,8 +1959,6 @@ bool IRGenModule::finalize() {
1956
1959
emitAutolinkInfo ();
1957
1960
emitGlobalLists ();
1958
1961
emitUsedConditionals ();
1959
- if (DebugInfo)
1960
- DebugInfo->finalize ();
1961
1962
cleanupClangCodeGenMetadata ();
1962
1963
1963
1964
// Clean up DSOLocal & DLLImport attributes, they cannot be applied together.
You can’t perform that action at this time.
0 commit comments