[llvm] [dsymutil] Fix ODR type uniquing for -gsimple-template-names (PR #194501)

Jonas Devlieghere via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 28 07:37:37 PDT 2026


================
@@ -88,10 +146,22 @@ DeclContextTree::getChildDeclContext(DeclContext &Context, const DWARFDie &DIE,
   StringRef NameForUniquing;
   StringRef FileRef;
 
-  if (const char *LinkageName = DIE.getLinkageName())
+  if (const char *LinkageName = DIE.getLinkageName()) {
     NameForUniquing = StringPool.internString(LinkageName);
-  else if (!Name.empty())
-    NameForUniquing = StringPool.internString(Name);
+  } else if (!Name.empty()) {
+    // With -gsimple-template-names, DW_AT_name omits template parameters
+    // ("vector" instead of "vector<int>"). Reconstruct them from child
+    // DW_TAG_template_*_parameter DIEs so different specializations get
+    // distinct uniquing names.
+    // This heuristic would also (incorrectly) match names like "operator>" but
+    // those are subprograms with linkage names handled above.
----------------
JDevlieghere wrote:

Good idea

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


More information about the llvm-commits mailing list