dblaikie added subscribers: JDevlieghere, aprantl. dblaikie added a comment.
Yeah, GCC's debug info for this is... not good. I don't think it's anything we'd need to be inspired by. Here's the tags and names: DW_TAG_compile_unit DW_AT_name ("templ2.cpp") DW_TAG_structure_type DW_AT_name ("type") DW_TAG_variable DW_AT_name ("variable") DW_TAG_base_type DW_AT_name ("int") DW_TAG_variable DW_AT_name ("variable") DW_TAG_base_type DW_AT_name ("float") DW_TAG_subprogram DW_AT_name ("main") DW_TAG_variable DW_AT_name ("t") DW_TAG_variable DW_AT_name ("i") DW_TAG_variable DW_AT_name ("f") The structure_type has no child DIEs and no mention of the variable template instantiations - the global variables are both called "global" but with different types. No mention of the scope they were actually declared in. I guess maybe at least this "works" for free in some ways, but probably makes it impossible to refer to one or the other variable or with the right name. @aprantl @probinson @echristo @JDevlieghere - So my proposal is that the 'right' DWARF for this is: DW_TAG_structure_type DW_AT_name ("type") DW_TAG_member DW_AT_name ("variable<int>") DW_AT_declaration (true) DW_TAG_member DW_AT_name ("variable<float>") DW_AT_declaration (true) DW_TAG_variable DW_AT_specification (0x.... "variable<int>") DW_AT_location DW_AT_linkage_name ("_ZN4type1iE") DW_TAG_base_type DW_AT_name ("int") DW_TAG_variable DW_AT_specification (0x.... "variable<float>") DW_AT_location DW_AT_linkage_name ("_ZN4type1fE") DW_TAG_base_type DW_AT_name ("float") And the LLVM IR should be done the same way as member function templates - never appear in the member list, but appear otherwise the same - a DIGlobalVariable named "variable<int>" for the definition with a 'declaration:' attribute that refers to a DIDerivedType DW_TAG_member for the declaration of "variable<int>" where the 'scope:' attribute of the DW_TAG_member refers to the DW_TAG_structure_type, but that structure_type's member list does not contain this member. (same as functions - DISubprogram definition -declaration-> DISubprogram declaration -scope-> DW_TAG_structure_type but doesn't appear in the member list of the structure_type) Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D70537/new/ https://reviews.llvm.org/D70537 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits