[clang] [llvm] Reland "[DebugMetadata][DwarfDebug] Support function-local types in lexical block scopes (4/7)" (PR #165032)

Jeremy Morse via llvm-commits llvm-commits at lists.llvm.org
Fri Dec 12 06:55:26 PST 2025


================
@@ -703,13 +727,41 @@ class MetadataLoader::MetadataLoaderImpl {
     return Error::success();
   }
 
-  void upgradeDebugInfo(bool ModuleLevel) {
+  /// Specifies which kind of debug info upgrade should be performed.
+  enum class DebugInfoUpgradeMode {
+    /// No debug info upgrade.
+    None,
+    /// Debug info upgrade after loading function-level metadata block.
+    Partial,
+    /// Debug info upgrade after loading module-level metadata block.
+    ModuleLevel,
+  };
+
+  void upgradeDebugInfo(DebugInfoUpgradeMode Mode) {
+    if (Mode == DebugInfoUpgradeMode::None)
+      return;
     upgradeCUSubprograms();
     upgradeCUVariables();
-    if (ModuleLevel)
+    if (Mode == DebugInfoUpgradeMode::ModuleLevel)
       upgradeCULocals();
   }
 
+  /// Prepare loaded metadata nodes to be used by loader clients.
+  void resolveLoadedMetadata(PlaceholderQueue &Placeholders,
+                             DebugInfoUpgradeMode DIUpgradeMode) {
+    resolveForwardRefsAndPlaceholders(Placeholders);
+    upgradeDebugInfo(DIUpgradeMode);
+    DISubprogram::cleanupRetainedNodes(NewDistinctSPs);
+    NewDistinctSPs.clear();
+  }
+
+  void resolveLoadedMetadata(PlaceholderQueue &Placeholders,
+                             bool IsModuleLevelDIUpgrade) {
----------------
jmorse wrote:

As far as I can see this overload is to assist two call-sites that already have a bool? IMO it would be better to sink the selection of `DebugInfoUpgradeMode` into `:MetadataLoaderImpl::parseMetadata` rather than rely on this overload, on the principle of "explicit is better than implicit".

https://github.com/llvm/llvm-project/pull/165032


More information about the llvm-commits mailing list