| ; RUN: llvm-pdbutil pretty -classes -class-definitions=layout \ | |
| ; RUN: -include-types=SimplePad %p/Inputs/SimplePaddingTest.pdb > %t | |
| ; RUN: FileCheck -input-file=%t %s -check-prefix=NO_PADDING | |
| ; RUN: FileCheck -input-file=%t %s -check-prefix=UNION | |
| ; RUN: FileCheck -input-file=%t %s -check-prefix=NESTED_UNION | |
| ; RUN: FileCheck -input-file=%t %s -check-prefix=PAD_FROM_FIELDS1 | |
| ; RUN: FileCheck -input-file=%t %s -check-prefix=PAD_FROM_FIELDS2 | |
| ; RUN: FileCheck -input-file=%t %s -check-prefix=NO_PAD_IN_BASE | |
| ; RUN: FileCheck -input-file=%t %s -check-prefix=PAD_IN_DERIVED | |
| ; RUN: FileCheck -input-file=%t %s -check-prefix=EMPTY_BASE | |
| ; RUN: FileCheck -input-file=%t %s -check-prefix=VFPTR | |
| ; RUN: FileCheck -input-file=%t %s -check-prefix=MULTIPLE_INHERIT | |
| ; RUN: FileCheck -input-file=%t %s -check-prefix=MULTIPLE_INHERIT2 | |
| ; RUN: FileCheck -input-file=%t %s -check-prefix=DEEP_INHERIT | |
| ; RUN: FileCheck -input-file=%t %s -check-prefix=AGGREGATE | |
| ; NO_PADDING: struct SimplePadNoPadding [sizeof = 8] { | |
| ; NO_PADDING-NEXT: data +0x00 [sizeof=4] int X | |
| ; NO_PADDING-NEXT: data +0x04 [sizeof=4] int Y | |
| ; NO_PADDING-NEXT: } | |
| ; UNION: struct SimplePadUnion [sizeof = 16] { | |
| ; UNION-NEXT: data +0x00 [sizeof=4] int X | |
| ; UNION-NEXT: data +0x00 [sizeof=8] __int64 Y | |
| ; UNION-NEXT: data +0x00 [sizeof=16] SimplePadUnion:: | |
| ; UNION-NEXT: data +0x00 [sizeof=4] int X | |
| ; UNION-NEXT: <padding> (4 bytes) | |
| ; UNION-NEXT: data +0x08 [sizeof=8] __int64 Y | |
| ; UNION-NEXT: } | |
| ; NESTED_UNION: struct {{SimplePadUnion::.*}} [sizeof = 16] { | |
| ; NESTED_UNION-NEXT: data +0x00 [sizeof=4] int X | |
| ; NESTED_UNION-NEXT: <padding> (4 bytes) | |
| ; NESTED_UNION-NEXT: data +0x08 [sizeof=8] __int64 Y | |
| ; NESTED_UNION-NEXT: } | |
| ; PAD_FROM_FIELDS1: struct SimplePadFields1 [sizeof = 4] { | |
| ; PAD_FROM_FIELDS1-NEXT: data +0x00 [sizeof=1] char A | |
| ; PAD_FROM_FIELDS1-NEXT: data +0x01 [sizeof=1] char B | |
| ; PAD_FROM_FIELDS1-NEXT: data +0x02 [sizeof=1] char C | |
| ; PAD_FROM_FIELDS1-NEXT: <padding> (1 bytes) | |
| ; PAD_FROM_FIELDS1-NEXT: } | |
| ; PAD_FROM_FIELDS2: struct SimplePadFields2 [sizeof = 8] { | |
| ; PAD_FROM_FIELDS2-NEXT: data +0x00 [sizeof=4] int Y | |
| ; PAD_FROM_FIELDS2-NEXT: data +0x04 [sizeof=1] char X | |
| ; PAD_FROM_FIELDS2-NEXT: <padding> (3 bytes) | |
| ; PAD_FROM_FIELDS2-NEXT: } | |
| ; NO_PAD_IN_BASE: struct SimplePadBase [sizeof = 4] { | |
| ; NO_PAD_IN_BASE-NEXT: data +0x00 [sizeof=4] int X | |
| ; NO_PAD_IN_BASE-NEXT: } | |
| ; PAD_IN_DERIVED: struct SimplePadDerived [sizeof = 16] | |
| ; PAD_IN_DERIVED-NEXT: : public SimplePadBase { | |
| ; PAD_IN_DERIVED-NEXT: base +0x00 [sizeof=4] SimplePadBase | |
| ; PAD_IN_DERIVED-NEXT: data +0x00 [sizeof=4] int X | |
| ; PAD_IN_DERIVED-NEXT: <padding> (4 bytes) | |
| ; PAD_IN_DERIVED-NEXT: data +0x08 [sizeof=8] __int64 Y | |
| ; PAD_IN_DERIVED-NEXT: } | |
| ; EMPTY_BASE: struct SimplePadEmpty [sizeof = 8] | |
| ; EMPTY_BASE-NEXT: : public SimplePadEmptyBase1 | |
| ; EMPTY_BASE-NEXT: , public SimplePadEmptyBase2 { | |
| ; EMPTY_BASE-NEXT: base +0x00 [sizeof=1] SimplePadEmptyBase1 | |
| ; EMPTY_BASE-NEXT: base +0x01 [sizeof=1] SimplePadEmptyBase2 | |
| ; EMPTY_BASE-NEXT: <padding> (2 bytes) | |
| ; EMPTY_BASE-NEXT: data +0x04 [sizeof=4] int X | |
| ; EMPTY_BASE-NEXT: } | |
| ; VFPTR: struct SimplePadVfptr [sizeof = 8] { | |
| ; VFPTR-NEXT: vfptr +0x00 [sizeof=4] | |
| ; VFPTR-NEXT: data +0x04 [sizeof=4] int X | |
| ; VFPTR-NEXT: } | |
| ; MULTIPLE_INHERIT: struct SimplePadMultiInherit [sizeof = 8] | |
| ; MULTIPLE_INHERIT-NEXT: : public NonEmptyBase1 | |
| ; MULTIPLE_INHERIT-NEXT: , public NonEmptyBase2 { | |
| ; MULTIPLE_INHERIT-NEXT: base +0x00 [sizeof=1] NonEmptyBase1 | |
| ; MULTIPLE_INHERIT-NEXT: data +0x00 [sizeof=1] bool X | |
| ; MULTIPLE_INHERIT-NEXT: base +0x01 [sizeof=1] NonEmptyBase2 | |
| ; MULTIPLE_INHERIT-NEXT: data +0x01 [sizeof=1] bool Y | |
| ; MULTIPLE_INHERIT-NEXT: <padding> (2 bytes) | |
| ; MULTIPLE_INHERIT-NEXT: data +0x04 [sizeof=4] int X | |
| ; MULTIPLE_INHERIT-NEXT: } | |
| ; MULTIPLE_INHERIT2: SimplePadMultiInherit2 [sizeof = 16] | |
| ; MULTIPLE_INHERIT2-NEXT: : public SimplePadFields1 | |
| ; MULTIPLE_INHERIT2-NEXT: , public SimplePadFields2 { | |
| ; MULTIPLE_INHERIT2-NEXT: base +0x00 [sizeof=3] SimplePadFields1 | |
| ; MULTIPLE_INHERIT2-NEXT: data +0x00 [sizeof=1] char A | |
| ; MULTIPLE_INHERIT2-NEXT: data +0x01 [sizeof=1] char B | |
| ; MULTIPLE_INHERIT2-NEXT: data +0x02 [sizeof=1] char C | |
| ; MULTIPLE_INHERIT2-NEXT: <padding> (1 bytes) | |
| ; MULTIPLE_INHERIT2-NEXT: base +0x04 [sizeof=5] SimplePadFields2 | |
| ; MULTIPLE_INHERIT2-NEXT: data +0x04 [sizeof=4] int Y | |
| ; MULTIPLE_INHERIT2-NEXT: data +0x08 [sizeof=1] char X | |
| ; MULTIPLE_INHERIT2-NEXT: <padding> (3 bytes) | |
| ; MULTIPLE_INHERIT2-NEXT: data +0x0c [sizeof=4] int X | |
| ; MULTIPLE_INHERIT2-NEXT: } | |
| ; DEEP_INHERIT: struct SimplePadTwoLevelInherit [sizeof = 16] | |
| ; DEEP_INHERIT-NEXT: : public OneLevelInherit { | |
| ; DEEP_INHERIT-NEXT: base +0x00 [sizeof=4] OneLevelInherit | |
| ; DEEP_INHERIT-NEXT: base +0x00 [sizeof=1] NonEmptyBase1 | |
| ; DEEP_INHERIT-NEXT: data +0x00 [sizeof=1] bool X | |
| ; DEEP_INHERIT-NEXT: <padding> (1 bytes) | |
| ; DEEP_INHERIT-NEXT: data +0x02 [sizeof=2] short Y | |
| ; DEEP_INHERIT-NEXT: <padding> (4 bytes) | |
| ; DEEP_INHERIT-NEXT: data +0x08 [sizeof=8] __int64 Z | |
| ; DEEP_INHERIT-NEXT: } | |
| ; AGGREGATE: struct SimplePadAggregate [sizeof = 12] { | |
| ; AGGREGATE-NEXT: data +0x00 [sizeof=1] NonEmptyBase1 X | |
| ; AGGREGATE-NEXT: data +0x00 [sizeof=1] bool X | |
| ; AGGREGATE-NEXT: <padding> (3 bytes) | |
| ; AGGREGATE-NEXT: data +0x04 [sizeof=4] int Y | |
| ; AGGREGATE-NEXT: data +0x08 [sizeof=4] SimplePadFields1 Fields | |
| ; AGGREGATE-NEXT: data +0x08 [sizeof=1] char A | |
| ; AGGREGATE-NEXT: data +0x09 [sizeof=1] char B | |
| ; AGGREGATE-NEXT: data +0x0a [sizeof=1] char C | |
| ; AGGREGATE-NEXT: <padding> (1 bytes) | |
| ; AGGREGATE-NEXT: } |