================
@@ -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
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits