================
@@ -4189,8 +4189,13 @@ llvm::DICompositeType
*CGDebugInfo::CreateLimitedType(const RecordType *Ty) {
llvm::MDNode::replaceWithDistinct(llvm::TempDICompositeType(RealDecl));
break;
}
-
- RegionMap[Ty->getDecl()].reset(RealDecl);
+ if (auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(Ty->getDecl())) {
+ CXXRecordDecl *TemplateDecl =
+ CTSD->getSpecializedTemplate()->getTemplatedDecl();
+ RegionMap[TemplateDecl].reset(RealDecl);
+ } else {
+ RegionMap[Ty->getDecl()].reset(RealDecl);
+ }
----------------
ykhatav wrote:
I don't think it affects typedefs scoped in partial template specialization
since the Typedef Context ends up being partial class specialization instead of
the record decl or the Class specialization stored in the RegionMap:
`
```
0x00000057: DW_TAG_structure_type
DW_AT_calling_convention (DW_CC_pass_by_value)
DW_AT_name ("Y<Foo<int> >")
DW_AT_byte_size (0x04)
DW_AT_decl_file ("/")
DW_AT_decl_line (15)
0x0000005d: DW_TAG_template_type_parameter
DW_AT_type (0x0000006d "Foo<int>")
DW_AT_name ("T")
0x00000063: DW_TAG_member
DW_AT_name ("o")
DW_AT_type (0x0000006f "outside")
DW_AT_decl_file ("/")
DW_AT_decl_line (17)
DW_AT_data_member_location (0x00)
0x0000006c: NULL
0x0000006d: DW_TAG_structure_type
DW_AT_name ("Foo<int>")
DW_AT_declaration (true)
0x0000006f: DW_TAG_typedef
DW_AT_type (0x00000048 "int")
DW_AT_name ("outside")
DW_AT_decl_file ("/")
DW_AT_decl_line (16)
`
```
I think we should be able to address this with the other approach you
suggested.
https://github.com/llvm/llvm-project/pull/146729
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits