Skip to content

Commit 82cf1fa

Browse files
authored
fix: rename parent struct member to SUPER in debug-info (#1550)
Changes debug-info generation for struct members, which are internally generated parent-class instances, to simply have the name SUPER instead of __<parent-type>.
1 parent aca5a52 commit 82cf1fa

File tree

2 files changed

+15
-10
lines changed

2 files changed

+15
-10
lines changed

src/codegen/debug.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,7 @@ impl<'ink> DebugBuilder<'ink> {
326326

327327
let mut types = vec![];
328328

329+
let super_ty_name = index.find_pou(name).and_then(|it| it.get_super_class());
329330
for (element_index, (member_name, dt, location, is_constant)) in index_types.iter().enumerate() {
330331
let di_type = self.get_or_create_debug_type(dt, index, types_index)?;
331332
let di_type = self.apply_const_type_if_needed(di_type.into(), *is_constant);
@@ -343,6 +344,10 @@ impl<'ink> DebugBuilder<'ink> {
343344
.map(|offset| offset * 8)
344345
.unwrap_or(0);
345346

347+
let member_name = super_ty_name
348+
.filter(|name| member_name == &format!("__{name}"))
349+
.map_or(*member_name, |_| "SUPER");
350+
346351
// Create the member type with LLVM's calculated offset
347352
types.push(
348353
self.debug_info

src/codegen/tests/oop_tests/debug_tests.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ fn members_from_base_class_are_available_in_subclasses() {
176176
!24 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !25)
177177
!25 = !DICompositeType(tag: DW_TAG_structure_type, name: "bar", scope: !2, file: !2, line: 10, size: 7872, align: 64, flags: DIFlagPublic, elements: !26, identifier: "bar")
178178
!26 = !{!27}
179-
!27 = !DIDerivedType(tag: DW_TAG_member, name: "__foo", scope: !2, file: !2, baseType: !4, size: 7872, align: 64, flags: DIFlagPublic)
179+
!27 = !DIDerivedType(tag: DW_TAG_member, name: "SUPER", scope: !2, file: !2, baseType: !4, size: 7872, align: 64, flags: DIFlagPublic)
180180
!28 = !{i32 2, !"Dwarf Version", i32 5}
181181
!29 = !{i32 2, !"Debug Info Version", i32 3}
182182
!30 = distinct !DICompileUnit(language: DW_LANG_C, file: !2, producer: "RuSTy Structured text Compiler", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, globals: !31, splitDebugInlining: false)
@@ -427,7 +427,7 @@ fn write_to_parent_variable_qualified_access() {
427427
!15 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !16)
428428
!16 = !DICompositeType(tag: DW_TAG_structure_type, name: "fb2", scope: !2, file: !2, line: 9, size: 128, align: 64, flags: DIFlagPublic, elements: !17, identifier: "fb2")
429429
!17 = !{!18}
430-
!18 = !DIDerivedType(tag: DW_TAG_member, name: "__fb", scope: !2, file: !2, baseType: !4, size: 128, align: 64, flags: DIFlagPublic)
430+
!18 = !DIDerivedType(tag: DW_TAG_member, name: "SUPER", scope: !2, file: !2, baseType: !4, size: 128, align: 64, flags: DIFlagPublic)
431431
!19 = !DIGlobalVariableExpression(var: !20, expr: !DIExpression())
432432
!20 = distinct !DIGlobalVariable(name: "__foo__init", scope: !2, file: !2, line: 12, type: !21, isLocal: false, isDefinition: true)
433433
!21 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !22)
@@ -691,7 +691,7 @@ fn write_to_parent_variable_in_instance() {
691691
!18 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !19)
692692
!19 = !DICompositeType(tag: DW_TAG_structure_type, name: "bar", scope: !2, file: !2, line: 11, size: 768, align: 64, flags: DIFlagPublic, elements: !20, identifier: "bar")
693693
!20 = !{!21}
694-
!21 = !DIDerivedType(tag: DW_TAG_member, name: "__foo", scope: !2, file: !2, baseType: !4, size: 768, align: 64, flags: DIFlagPublic)
694+
!21 = !DIDerivedType(tag: DW_TAG_member, name: "SUPER", scope: !2, file: !2, baseType: !4, size: 768, align: 64, flags: DIFlagPublic)
695695
!22 = !{i32 2, !"Dwarf Version", i32 5}
696696
!23 = !{i32 2, !"Debug Info Version", i32 3}
697697
!24 = distinct !DICompileUnit(language: DW_LANG_C, file: !2, producer: "RuSTy Structured text Compiler", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, globals: !25, splitDebugInlining: false)
@@ -1012,7 +1012,7 @@ fn array_in_parent_generated() {
10121012
!18 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !19)
10131013
!19 = !DICompositeType(tag: DW_TAG_structure_type, name: "parent", scope: !2, file: !2, line: 9, size: 384, align: 64, flags: DIFlagPublic, elements: !20, identifier: "parent")
10141014
!20 = !{!21, !22, !26}
1015-
!21 = !DIDerivedType(tag: DW_TAG_member, name: "__grandparent", scope: !2, file: !2, baseType: !4, size: 192, align: 64, flags: DIFlagPublic)
1015+
!21 = !DIDerivedType(tag: DW_TAG_member, name: "SUPER", scope: !2, file: !2, baseType: !4, size: 192, align: 64, flags: DIFlagPublic)
10161016
!22 = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: !2, file: !2, line: 11, baseType: !23, size: 176, align: 16, offset: 192, flags: DIFlagPublic)
10171017
!23 = !DICompositeType(tag: DW_TAG_array_type, baseType: !12, size: 176, align: 16, elements: !24)
10181018
!24 = !{!25}
@@ -1023,7 +1023,7 @@ fn array_in_parent_generated() {
10231023
!29 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !30)
10241024
!30 = !DICompositeType(tag: DW_TAG_structure_type, name: "child", scope: !2, file: !2, line: 16, size: 576, align: 64, flags: DIFlagPublic, elements: !31, identifier: "child")
10251025
!31 = !{!32, !33}
1026-
!32 = !DIDerivedType(tag: DW_TAG_member, name: "__parent", scope: !2, file: !2, baseType: !19, size: 384, align: 64, flags: DIFlagPublic)
1026+
!32 = !DIDerivedType(tag: DW_TAG_member, name: "SUPER", scope: !2, file: !2, baseType: !19, size: 384, align: 64, flags: DIFlagPublic)
10271027
!33 = !DIDerivedType(tag: DW_TAG_member, name: "z", scope: !2, file: !2, line: 18, baseType: !23, size: 176, align: 16, offset: 384, flags: DIFlagPublic)
10281028
!34 = !{i32 2, !"Dwarf Version", i32 5}
10291029
!35 = !{i32 2, !"Debug Info Version", i32 3}
@@ -1324,7 +1324,7 @@ fn complex_array_access_generated() {
13241324
!18 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !19)
13251325
!19 = !DICompositeType(tag: DW_TAG_structure_type, name: "parent", scope: !2, file: !2, line: 9, size: 384, align: 64, flags: DIFlagPublic, elements: !20, identifier: "parent")
13261326
!20 = !{!21, !22, !26}
1327-
!21 = !DIDerivedType(tag: DW_TAG_member, name: "__grandparent", scope: !2, file: !2, baseType: !4, size: 192, align: 64, flags: DIFlagPublic)
1327+
!21 = !DIDerivedType(tag: DW_TAG_member, name: "SUPER", scope: !2, file: !2, baseType: !4, size: 192, align: 64, flags: DIFlagPublic)
13281328
!22 = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: !2, file: !2, line: 11, baseType: !23, size: 176, align: 16, offset: 192, flags: DIFlagPublic)
13291329
!23 = !DICompositeType(tag: DW_TAG_array_type, baseType: !12, size: 176, align: 16, elements: !24)
13301330
!24 = !{!25}
@@ -1335,7 +1335,7 @@ fn complex_array_access_generated() {
13351335
!29 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !30)
13361336
!30 = !DICompositeType(tag: DW_TAG_structure_type, name: "child", scope: !2, file: !2, line: 16, size: 576, align: 64, flags: DIFlagPublic, elements: !31, identifier: "child")
13371337
!31 = !{!32, !33}
1338-
!32 = !DIDerivedType(tag: DW_TAG_member, name: "__parent", scope: !2, file: !2, baseType: !19, size: 384, align: 64, flags: DIFlagPublic)
1338+
!32 = !DIDerivedType(tag: DW_TAG_member, name: "SUPER", scope: !2, file: !2, baseType: !19, size: 384, align: 64, flags: DIFlagPublic)
13391339
!33 = !DIDerivedType(tag: DW_TAG_member, name: "z", scope: !2, file: !2, line: 18, baseType: !23, size: 176, align: 16, offset: 384, flags: DIFlagPublic)
13401340
!34 = !{i32 2, !"Dwarf Version", i32 5}
13411341
!35 = !{i32 2, !"Debug Info Version", i32 3}
@@ -1533,7 +1533,7 @@ fn function_block_method_debug_info() {
15331533
!12 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !13)
15341534
!13 = !DICompositeType(tag: DW_TAG_structure_type, name: "bar", scope: !2, file: !2, line: 7, size: 64, align: 64, flags: DIFlagPublic, elements: !14, identifier: "bar")
15351535
!14 = !{!15}
1536-
!15 = !DIDerivedType(tag: DW_TAG_member, name: "__foo", scope: !2, file: !2, baseType: !4, size: 64, align: 64, flags: DIFlagPublic)
1536+
!15 = !DIDerivedType(tag: DW_TAG_member, name: "SUPER", scope: !2, file: !2, baseType: !4, size: 64, align: 64, flags: DIFlagPublic)
15371537
!16 = !{i32 2, !"Dwarf Version", i32 5}
15381538
!17 = !{i32 2, !"Debug Info Version", i32 3}
15391539
!18 = distinct !DICompileUnit(language: DW_LANG_C, file: !2, producer: "RuSTy Structured text Compiler", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, globals: !19, splitDebugInlining: false)
@@ -1953,14 +1953,14 @@ END_FUNCTION
19531953
!14 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !15)
19541954
!15 = !DICompositeType(tag: DW_TAG_structure_type, name: "child", scope: !2, file: !2, line: 8, size: 192, align: 64, flags: DIFlagPublic, elements: !16, identifier: "child")
19551955
!16 = !{!17, !18}
1956-
!17 = !DIDerivedType(tag: DW_TAG_member, name: "__parent", scope: !2, file: !2, baseType: !4, size: 128, align: 64, flags: DIFlagPublic)
1956+
!17 = !DIDerivedType(tag: DW_TAG_member, name: "SUPER", scope: !2, file: !2, baseType: !4, size: 128, align: 64, flags: DIFlagPublic)
19571957
!18 = !DIDerivedType(tag: DW_TAG_member, name: "b", scope: !2, file: !2, line: 10, baseType: !11, size: 32, align: 32, offset: 128, flags: DIFlagPublic)
19581958
!19 = !DIGlobalVariableExpression(var: !20, expr: !DIExpression())
19591959
!20 = distinct !DIGlobalVariable(name: "__grandchild__init", scope: !2, file: !2, line: 14, type: !21, isLocal: false, isDefinition: true)
19601960
!21 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !22)
19611961
!22 = !DICompositeType(tag: DW_TAG_structure_type, name: "grandchild", scope: !2, file: !2, line: 14, size: 256, align: 64, flags: DIFlagPublic, elements: !23, identifier: "grandchild")
19621962
!23 = !{!24, !25}
1963-
!24 = !DIDerivedType(tag: DW_TAG_member, name: "__child", scope: !2, file: !2, baseType: !15, size: 192, align: 64, flags: DIFlagPublic)
1963+
!24 = !DIDerivedType(tag: DW_TAG_member, name: "SUPER", scope: !2, file: !2, baseType: !15, size: 192, align: 64, flags: DIFlagPublic)
19641964
!25 = !DIDerivedType(tag: DW_TAG_member, name: "c", scope: !2, file: !2, line: 16, baseType: !11, size: 32, align: 32, offset: 192, flags: DIFlagPublic)
19651965
!26 = !{i32 2, !"Dwarf Version", i32 5}
19661966
!27 = !{i32 2, !"Debug Info Version", i32 3}

0 commit comments

Comments
 (0)