Skip to content

Commit 3327303

Browse files
committed
fix get_size
1 parent 57c9755 commit 3327303

6 files changed

+30
-31
lines changed

src/codegen/tests/oop_tests/debug_tests.rs

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,9 @@ fn members_from_base_class_are_available_in_subclasses() {
9191
!15 = !DISubrange(count: 11, lowerBound: 0)
9292
!16 = !DIGlobalVariableExpression(var: !17, expr: !DIExpression())
9393
!17 = distinct !DIGlobalVariable(name: "__bar__init", scope: !2, file: !2, line: 10, type: !18, isLocal: false, isDefinition: true)
94-
!18 = !DICompositeType(tag: DW_TAG_structure_type, name: "bar", scope: !2, file: !2, line: 10, size: 7128, flags: DIFlagPublic, elements: !19, identifier: "bar")
94+
!18 = !DICompositeType(tag: DW_TAG_structure_type, name: "bar", scope: !2, file: !2, line: 10, size: 7792, flags: DIFlagPublic, elements: !19, identifier: "bar")
9595
!19 = !{!20}
96-
!20 = !DIDerivedType(tag: DW_TAG_member, name: "__foo", scope: !2, file: !2, baseType: !3, size: 7128, flags: DIFlagPublic)
96+
!20 = !DIDerivedType(tag: DW_TAG_member, name: "__foo", scope: !2, file: !2, baseType: !3, size: 7792, flags: DIFlagPublic)
9797
!21 = !{i32 2, !"Dwarf Version", i32 5}
9898
!22 = !{i32 2, !"Debug Info Version", i32 3}
9999
!23 = distinct !DICompileUnit(language: DW_LANG_C, file: !2, producer: "RuSTy Structured text Compiler", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, globals: !24, splitDebugInlining: false)
@@ -216,9 +216,9 @@ fn write_to_parent_variable_qualified_access() {
216216
!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
217217
!1 = distinct !DIGlobalVariable(name: "__fb2__init", scope: !2, file: !2, line: 9, type: !3, isLocal: false, isDefinition: true)
218218
!2 = !DIFile(filename: "<internal>", directory: "")
219-
!3 = !DICompositeType(tag: DW_TAG_structure_type, name: "fb2", scope: !2, file: !2, line: 9, size: 16, flags: DIFlagPublic, elements: !4, identifier: "fb2")
219+
!3 = !DICompositeType(tag: DW_TAG_structure_type, name: "fb2", scope: !2, file: !2, line: 9, size: 32, flags: DIFlagPublic, elements: !4, identifier: "fb2")
220220
!4 = !{!5}
221-
!5 = !DIDerivedType(tag: DW_TAG_member, name: "__fb", scope: !2, file: !2, baseType: !6, size: 16, flags: DIFlagPublic)
221+
!5 = !DIDerivedType(tag: DW_TAG_member, name: "__fb", scope: !2, file: !2, baseType: !6, size: 32, flags: DIFlagPublic)
222222
!6 = !DICompositeType(tag: DW_TAG_structure_type, name: "fb", scope: !2, file: !2, line: 2, size: 32, flags: DIFlagPublic, elements: !7, identifier: "fb")
223223
!7 = !{!8, !10}
224224
!8 = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: !2, file: !2, line: 4, baseType: !9, size: 16, flags: DIFlagPublic)
@@ -228,9 +228,9 @@ fn write_to_parent_variable_qualified_access() {
228228
!12 = distinct !DIGlobalVariable(name: "__fb__init", scope: !2, file: !2, line: 2, type: !6, isLocal: false, isDefinition: true)
229229
!13 = !DIGlobalVariableExpression(var: !14, expr: !DIExpression())
230230
!14 = distinct !DIGlobalVariable(name: "__foo__init", scope: !2, file: !2, line: 12, type: !15, isLocal: false, isDefinition: true)
231-
!15 = !DICompositeType(tag: DW_TAG_structure_type, name: "foo", scope: !2, file: !2, line: 12, size: 16, flags: DIFlagPublic, elements: !16, identifier: "foo")
231+
!15 = !DICompositeType(tag: DW_TAG_structure_type, name: "foo", scope: !2, file: !2, line: 12, size: 32, flags: DIFlagPublic, elements: !16, identifier: "foo")
232232
!16 = !{!17}
233-
!17 = !DIDerivedType(tag: DW_TAG_member, name: "myFb", scope: !2, file: !2, line: 14, baseType: !3, size: 16, flags: DIFlagPublic)
233+
!17 = !DIDerivedType(tag: DW_TAG_member, name: "myFb", scope: !2, file: !2, line: 14, baseType: !3, size: 32, flags: DIFlagPublic)
234234
!18 = !{i32 2, !"Dwarf Version", i32 5}
235235
!19 = !{i32 2, !"Debug Info Version", i32 3}
236236
!20 = distinct !DICompileUnit(language: DW_LANG_C, file: !2, producer: "RuSTy Structured text Compiler", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, globals: !21, splitDebugInlining: false)
@@ -582,12 +582,12 @@ fn array_in_parent_generated() {
582582
!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
583583
!1 = distinct !DIGlobalVariable(name: "__child__init", scope: !2, file: !2, line: 16, type: !3, isLocal: false, isDefinition: true)
584584
!2 = !DIFile(filename: "<internal>", directory: "")
585-
!3 = !DICompositeType(tag: DW_TAG_structure_type, name: "child", scope: !2, file: !2, line: 16, size: 192, flags: DIFlagPublic, elements: !4, identifier: "child")
585+
!3 = !DICompositeType(tag: DW_TAG_structure_type, name: "child", scope: !2, file: !2, line: 16, size: 480, flags: DIFlagPublic, elements: !4, identifier: "child")
586586
!4 = !{!5, !22}
587-
!5 = !DIDerivedType(tag: DW_TAG_member, name: "__parent", scope: !2, file: !2, baseType: !6, size: 16, flags: DIFlagPublic)
588-
!6 = !DICompositeType(tag: DW_TAG_structure_type, name: "parent", scope: !2, file: !2, line: 9, size: 208, flags: DIFlagPublic, elements: !7, identifier: "parent")
587+
!5 = !DIDerivedType(tag: DW_TAG_member, name: "__parent", scope: !2, file: !2, baseType: !6, size: 304, flags: DIFlagPublic)
588+
!6 = !DICompositeType(tag: DW_TAG_structure_type, name: "parent", scope: !2, file: !2, line: 9, size: 304, flags: DIFlagPublic, elements: !7, identifier: "parent")
589589
!7 = !{!8, !17, !21}
590-
!8 = !DIDerivedType(tag: DW_TAG_member, name: "__grandparent", scope: !2, file: !2, baseType: !9, size: 16, flags: DIFlagPublic)
590+
!8 = !DIDerivedType(tag: DW_TAG_member, name: "__grandparent", scope: !2, file: !2, baseType: !9, size: 112, flags: DIFlagPublic)
591591
!9 = !DICompositeType(tag: DW_TAG_structure_type, name: "grandparent", scope: !2, file: !2, line: 2, size: 112, flags: DIFlagPublic, elements: !10, identifier: "grandparent")
592592
!10 = !{!11, !16}
593593
!11 = !DIDerivedType(tag: DW_TAG_member, name: "y", scope: !2, file: !2, line: 4, baseType: !12, size: 96, flags: DIFlagPublic)
@@ -596,12 +596,12 @@ fn array_in_parent_generated() {
596596
!14 = !{!15}
597597
!15 = !DISubrange(count: 6, lowerBound: 0)
598598
!16 = !DIDerivedType(tag: DW_TAG_member, name: "a", scope: !2, file: !2, line: 5, baseType: !13, size: 16, offset: 96, flags: DIFlagPublic)
599-
!17 = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: !2, file: !2, line: 11, baseType: !18, size: 176, offset: 16, flags: DIFlagPublic)
599+
!17 = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: !2, file: !2, line: 11, baseType: !18, size: 176, offset: 112, flags: DIFlagPublic)
600600
!18 = !DICompositeType(tag: DW_TAG_array_type, baseType: !13, size: 176, elements: !19)
601601
!19 = !{!20}
602602
!20 = !DISubrange(count: 11, lowerBound: 0)
603-
!21 = !DIDerivedType(tag: DW_TAG_member, name: "b", scope: !2, file: !2, line: 12, baseType: !13, size: 16, offset: 192, flags: DIFlagPublic)
604-
!22 = !DIDerivedType(tag: DW_TAG_member, name: "z", scope: !2, file: !2, line: 18, baseType: !18, size: 176, offset: 16, flags: DIFlagPublic)
603+
!21 = !DIDerivedType(tag: DW_TAG_member, name: "b", scope: !2, file: !2, line: 12, baseType: !13, size: 16, offset: 288, flags: DIFlagPublic)
604+
!22 = !DIDerivedType(tag: DW_TAG_member, name: "z", scope: !2, file: !2, line: 18, baseType: !18, size: 176, offset: 304, flags: DIFlagPublic)
605605
!23 = !DIGlobalVariableExpression(var: !24, expr: !DIExpression())
606606
!24 = distinct !DIGlobalVariable(name: "__parent__init", scope: !2, file: !2, line: 9, type: !6, isLocal: false, isDefinition: true)
607607
!25 = !DIGlobalVariableExpression(var: !26, expr: !DIExpression())
@@ -630,7 +630,7 @@ fn array_in_parent_generated() {
630630
!48 = !DISubroutineType(flags: DIFlagPublic, types: !49)
631631
!49 = !{null}
632632
!50 = !DILocalVariable(name: "arr", scope: !47, file: !2, line: 24, type: !51)
633-
!51 = !DICompositeType(tag: DW_TAG_array_type, baseType: !3, size: 1936, elements: !19)
633+
!51 = !DICompositeType(tag: DW_TAG_array_type, baseType: !3, size: 5280, elements: !19)
634634
!52 = !DILocation(line: 24, column: 12, scope: !47)
635635
!53 = !DILocation(line: 26, column: 12, scope: !47)
636636
!54 = !DILocation(line: 27, column: 12, scope: !47)
@@ -773,9 +773,9 @@ fn complex_array_access_generated() {
773773
!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
774774
!1 = distinct !DIGlobalVariable(name: "__parent__init", scope: !2, file: !2, line: 9, type: !3, isLocal: false, isDefinition: true)
775775
!2 = !DIFile(filename: "<internal>", directory: "")
776-
!3 = !DICompositeType(tag: DW_TAG_structure_type, name: "parent", scope: !2, file: !2, line: 9, size: 208, flags: DIFlagPublic, elements: !4, identifier: "parent")
776+
!3 = !DICompositeType(tag: DW_TAG_structure_type, name: "parent", scope: !2, file: !2, line: 9, size: 304, flags: DIFlagPublic, elements: !4, identifier: "parent")
777777
!4 = !{!5, !14, !18}
778-
!5 = !DIDerivedType(tag: DW_TAG_member, name: "__grandparent", scope: !2, file: !2, baseType: !6, size: 16, flags: DIFlagPublic)
778+
!5 = !DIDerivedType(tag: DW_TAG_member, name: "__grandparent", scope: !2, file: !2, baseType: !6, size: 112, flags: DIFlagPublic)
779779
!6 = !DICompositeType(tag: DW_TAG_structure_type, name: "grandparent", scope: !2, file: !2, line: 2, size: 112, flags: DIFlagPublic, elements: !7, identifier: "grandparent")
780780
!7 = !{!8, !13}
781781
!8 = !DIDerivedType(tag: DW_TAG_member, name: "y", scope: !2, file: !2, line: 4, baseType: !9, size: 96, flags: DIFlagPublic)
@@ -784,19 +784,19 @@ fn complex_array_access_generated() {
784784
!11 = !{!12}
785785
!12 = !DISubrange(count: 6, lowerBound: 0)
786786
!13 = !DIDerivedType(tag: DW_TAG_member, name: "a", scope: !2, file: !2, line: 5, baseType: !10, size: 16, offset: 96, flags: DIFlagPublic)
787-
!14 = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: !2, file: !2, line: 11, baseType: !15, size: 176, offset: 16, flags: DIFlagPublic)
787+
!14 = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: !2, file: !2, line: 11, baseType: !15, size: 176, offset: 112, flags: DIFlagPublic)
788788
!15 = !DICompositeType(tag: DW_TAG_array_type, baseType: !10, size: 176, elements: !16)
789789
!16 = !{!17}
790790
!17 = !DISubrange(count: 11, lowerBound: 0)
791-
!18 = !DIDerivedType(tag: DW_TAG_member, name: "b", scope: !2, file: !2, line: 12, baseType: !10, size: 16, offset: 192, flags: DIFlagPublic)
791+
!18 = !DIDerivedType(tag: DW_TAG_member, name: "b", scope: !2, file: !2, line: 12, baseType: !10, size: 16, offset: 288, flags: DIFlagPublic)
792792
!19 = !DIGlobalVariableExpression(var: !20, expr: !DIExpression())
793793
!20 = distinct !DIGlobalVariable(name: "__grandparent__init", scope: !2, file: !2, line: 2, type: !6, isLocal: false, isDefinition: true)
794794
!21 = !DIGlobalVariableExpression(var: !22, expr: !DIExpression())
795795
!22 = distinct !DIGlobalVariable(name: "__child__init", scope: !2, file: !2, line: 16, type: !23, isLocal: false, isDefinition: true)
796-
!23 = !DICompositeType(tag: DW_TAG_structure_type, name: "child", scope: !2, file: !2, line: 16, size: 192, flags: DIFlagPublic, elements: !24, identifier: "child")
796+
!23 = !DICompositeType(tag: DW_TAG_structure_type, name: "child", scope: !2, file: !2, line: 16, size: 480, flags: DIFlagPublic, elements: !24, identifier: "child")
797797
!24 = !{!25, !26}
798-
!25 = !DIDerivedType(tag: DW_TAG_member, name: "__parent", scope: !2, file: !2, baseType: !3, size: 16, flags: DIFlagPublic)
799-
!26 = !DIDerivedType(tag: DW_TAG_member, name: "z", scope: !2, file: !2, line: 18, baseType: !15, size: 176, offset: 16, flags: DIFlagPublic)
798+
!25 = !DIDerivedType(tag: DW_TAG_member, name: "__parent", scope: !2, file: !2, baseType: !3, size: 304, flags: DIFlagPublic)
799+
!26 = !DIDerivedType(tag: DW_TAG_member, name: "z", scope: !2, file: !2, line: 18, baseType: !15, size: 176, offset: 304, flags: DIFlagPublic)
800800
!27 = !{i32 2, !"Dwarf Version", i32 5}
801801
!28 = !{i32 2, !"Debug Info Version", i32 3}
802802
!29 = distinct !DICompileUnit(language: DW_LANG_C, file: !2, producer: "RuSTy Structured text Compiler", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, globals: !30, splitDebugInlining: false)

src/codegen/tests/snapshots/rusty__codegen__tests__debug_tests__global_var_nested_struct_added_to_debug_info.snap

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,11 @@ entry:
4242
!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
4343
!1 = distinct !DIGlobalVariable(name: "__myStruct__init", scope: !2, file: !2, line: 2, type: !3, isLocal: false, isDefinition: true)
4444
!2 = !DIFile(filename: "<internal>", directory: "")
45-
!3 = !DICompositeType(tag: DW_TAG_structure_type, name: "myStruct", scope: !2, file: !2, line: 2, size: 96, flags: DIFlagPublic, elements: !4, identifier: "myStruct")
45+
!3 = !DICompositeType(tag: DW_TAG_structure_type, name: "myStruct", scope: !2, file: !2, line: 2, size: 128, flags: DIFlagPublic, elements: !4, identifier: "myStruct")
4646
!4 = !{!5, !7}
4747
!5 = !DIDerivedType(tag: DW_TAG_member, name: "a", scope: !2, file: !2, line: 3, baseType: !6, size: 32, flags: DIFlagPublic)
4848
!6 = !DIBasicType(name: "DINT", size: 32, encoding: DW_ATE_signed, flags: DIFlagPublic)
49-
!7 = !DIDerivedType(tag: DW_TAG_member, name: "b", scope: !2, file: !2, line: 4, baseType: !8, size: 64, offset: 32, flags: DIFlagPublic)
49+
!7 = !DIDerivedType(tag: DW_TAG_member, name: "b", scope: !2, file: !2, line: 4, baseType: !8, size: 96, offset: 32, flags: DIFlagPublic)
5050
!8 = !DICompositeType(tag: DW_TAG_structure_type, name: "mystruct2", scope: !2, file: !2, line: 8, size: 96, flags: DIFlagPublic, elements: !9, identifier: "mystruct2")
5151
!9 = !{!10, !11}
5252
!10 = !DIDerivedType(tag: DW_TAG_member, name: "a", scope: !2, file: !2, line: 9, baseType: !6, size: 32, flags: DIFlagPublic)

src/codegen/tests/snapshots/rusty__codegen__tests__debug_tests__global_var_struct_added_to_debug_info.snap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ entry:
3131
!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
3232
!1 = distinct !DIGlobalVariable(name: "b", scope: !2, file: !2, line: 12, type: !3, isLocal: false, isDefinition: true)
3333
!2 = !DIFile(filename: "<internal>", directory: "")
34-
!3 = !DICompositeType(tag: DW_TAG_array_type, baseType: !4, size: 3872, elements: !12)
34+
!3 = !DICompositeType(tag: DW_TAG_array_type, baseType: !4, size: 4928, elements: !12)
3535
!4 = !DICompositeType(tag: DW_TAG_structure_type, name: "myStruct", scope: !2, file: !2, line: 2, size: 448, flags: DIFlagPublic, elements: !5, identifier: "myStruct")
3636
!5 = !{!6, !8, !10}
3737
!6 = !DIDerivedType(tag: DW_TAG_member, name: "a", scope: !2, file: !2, line: 3, baseType: !7, size: 32, flags: DIFlagPublic)

src/datalayout.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -186,8 +186,7 @@ mod tests {
186186

187187
let struct_type = index.get_effective_type_by_name("MyStruct").unwrap().get_type_information();
188188
// And the struct size takes the alignment into account
189-
// TODO: shouldn't the size be 120 bytes without alignment?
190-
assert_eq!(struct_type.get_size(&index).unwrap().bits(), 64);
189+
assert_eq!(struct_type.get_size(&index).unwrap().bits(), 120);
191190
// TODO: alignment
192191
// assert_eq!(struct_type.get_alignment(&index), Bytes::new(8)) //Struct alignment is 64 by default
193192
}

src/index/tests/index_tests.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2262,7 +2262,7 @@ fn pou_with_two_types_not_considered_recursive() {
22622262
let (_, index) = index(
22632263
"
22642264
FUNCTION_BLOCK fb
2265-
VAR x,y : DINT; END_VAR
2265+
VAR x : DINT; END_VAR
22662266
END_FUNCTION_BLOCK
22672267
PROGRAM p
22682268
VAR
@@ -2274,7 +2274,7 @@ fn pou_with_two_types_not_considered_recursive() {
22742274

22752275
let pou_type = index.find_pou_type("p").unwrap();
22762276
// TODO: why not 64 bytes?
2277-
assert_eq!(pou_type.get_type_information().get_size(&index).unwrap().bits(), 32);
2277+
assert_eq!(pou_type.get_type_information().get_size(&index).unwrap().bits(), 64);
22782278
}
22792279

22802280
#[test]

src/typesystem.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -642,13 +642,13 @@ impl DataTypeInformation {
642642
DataTypeInformation::Struct { members, .. } => members
643643
.iter()
644644
.map(|it| it.get_type_name())
645-
.try_fold(MemoryLocation::new(0), |_, it| {
645+
.try_fold(MemoryLocation::new(0), |prev, it| {
646646
let type_info: &DataTypeInformation = index.get_type_information_or_void(it);
647647
let size = type_info.get_size_recursive(index, seen)?.value();
648648
// TODO: alignment
649649
// let after_align = prev.align_to(type_info.get_alignment(index)).value();
650-
// let res = after_align + size;
651-
Ok(MemoryLocation::new(size))
650+
let res = prev.value() + size;
651+
Ok(MemoryLocation::new(res))
652652
})
653653
.map(Into::into),
654654
DataTypeInformation::Array { inner_type_name, dimensions, .. } => {

0 commit comments

Comments
 (0)