159 lines · cpp
1// RUN: %clang_cc1 -triple powerpc-ibm-aix-xcoff -fdump-record-layouts \2// RUN: -fsyntax-only %s | \3// RUN: FileCheck %s4 5// RUN: %clang_cc1 -triple powerpc64-ibm-aix-xcoff -fdump-record-layouts \6// RUN: -fsyntax-only %s | \7// RUN: FileCheck %s8 9struct Empty {};10 11struct A {12 double d;13};14 15// CHECK: *** Dumping AST Record Layout16// CHECK-NEXT: 0 | struct Empty (empty)17// CHECK-NEXT: | [sizeof=1, dsize=1, align=1, preferredalign=1,18// CHECK-NEXT: | nvsize=1, nvalign=1, preferrednvalign=1]19 20// CHECK: *** Dumping AST Record Layout21// CHECK-NEXT: 0 | struct A22// CHECK-NEXT: 0 | double d23// CHECK-NEXT: | [sizeof=8, dsize=8, align=4, preferredalign=8,24// CHECK-NEXT: | nvsize=8, nvalign=4, preferrednvalign=8]25 26struct B {27 ~B();28 29 Empty emp;30 A a;31 char c;32};33 34struct B1 {35 [[no_unique_address]] B b;36 char ext[7];37};38 39// CHECK: *** Dumping AST Record Layout40// CHECK-NEXT: 0 | struct B41// CHECK-NEXT: 0 | struct Empty emp (empty)42// CHECK-NEXT: 4 | struct A a43// CHECK-NEXT: 4 | double d44// CHECK-NEXT: 12 | char c45// CHECK-NEXT: | [sizeof=16, dsize=13, align=4, preferredalign=4,46// CHECK-NEXT: | nvsize=13, nvalign=4, preferrednvalign=4]47 48// CHECK: *** Dumping AST Record Layout49// CHECK-NEXT: 0 | struct B150// CHECK-NEXT: 0 | struct B b51// CHECK-NEXT: 0 | struct Empty emp (empty)52// CHECK-NEXT: 4 | struct A a53// CHECK-NEXT: 4 | double d54// CHECK-NEXT: 12 | char c55// CHECK-NEXT: 13 | char[7] ext56// CHECK-NEXT: | [sizeof=20, dsize=20, align=4, preferredalign=4,57// CHECK-NEXT: | nvsize=20, nvalign=4, preferrednvalign=4]58 59struct C {60 ~C();61 62 [[no_unique_address]] Empty emp;63 A a;64 char c;65};66 67struct C1 {68 [[no_unique_address]] C c;69 char ext[7];70};71 72// CHECK: *** Dumping AST Record Layout73// CHECK-NEXT: 0 | struct C74// CHECK-NEXT: 0 | struct Empty emp (empty)75// CHECK-NEXT: 0 | struct A a76// CHECK-NEXT: 0 | double d77// CHECK-NEXT: 8 | char c78// CHECK-NEXT: | [sizeof=16, dsize=9, align=4, preferredalign=8,79// CHECK-NEXT: | nvsize=9, nvalign=4, preferrednvalign=8]80 81// CHECK: *** Dumping AST Record Layout82// CHECK-NEXT: 0 | struct C183// CHECK-NEXT: 0 | struct C c84// CHECK-NEXT: 0 | struct Empty emp (empty)85// CHECK-NEXT: 0 | struct A a86// CHECK-NEXT: 0 | double d87// CHECK-NEXT: 8 | char c88// CHECK-NEXT: 9 | char[7] ext89// CHECK-NEXT: | [sizeof=16, dsize=16, align=4, preferredalign=8,90// CHECK-NEXT: | nvsize=16, nvalign=4, preferrednvalign=8]91 92struct D {93 ~D();94 95 [[no_unique_address]] char notEmp;96 A a;97 char c;98};99 100struct D1 {101 [[no_unique_address]] D d;102 char ext[7];103};104 105// CHECK: *** Dumping AST Record Layout106// CHECK-NEXT: 0 | struct D107// CHECK-NEXT: 0 | char notEmp108// CHECK-NEXT: 4 | struct A a109// CHECK-NEXT: 4 | double d110// CHECK-NEXT: 12 | char c111// CHECK-NEXT: | [sizeof=16, dsize=13, align=4, preferredalign=4,112// CHECK-NEXT: | nvsize=13, nvalign=4, preferrednvalign=4]113 114// CHECK: *** Dumping AST Record Layout115// CHECK-NEXT: 0 | struct D1116// CHECK-NEXT: 0 | struct D d117// CHECK-NEXT: 0 | char notEmp118// CHECK-NEXT: 4 | struct A a119// CHECK-NEXT: 4 | double d120// CHECK-NEXT: 12 | char c121// CHECK-NEXT: 13 | char[7] ext122// CHECK-NEXT: | [sizeof=20, dsize=20, align=4, preferredalign=4,123// CHECK-NEXT: | nvsize=20, nvalign=4, preferrednvalign=4]124 125struct E {126 [[no_unique_address]] Empty emp;127 int : 0;128 double d;129};130 131// CHECK: *** Dumping AST Record Layout132// CHECK-NEXT: 0 | struct E133// CHECK-NEXT: 0 | struct Empty emp (empty)134// CHECK-NEXT: 0:- | int135// CHECK-NEXT: 0 | double d136// CHECK-NEXT: | [sizeof=8, dsize=8, align=4, preferredalign=4,137// CHECK-NEXT: | nvsize=8, nvalign=4, preferrednvalign=4]138 139struct F {140 [[no_unique_address]] Empty emp, emp2;141 double d;142};143 144// CHECK: *** Dumping AST Record Layout145// CHECK-NEXT: 0 | struct F146// CHECK-NEXT: 0 | struct Empty emp (empty)147// CHECK-NEXT: 1 | struct Empty emp2 (empty)148// CHECK-NEXT: 0 | double d149// CHECK-NEXT: | [sizeof=8, dsize=8, align=4, preferredalign=8,150// CHECK-NEXT: | nvsize=8, nvalign=4, preferrednvalign=8]151 152int a = sizeof(Empty);153int b = sizeof(A);154int c = sizeof(B1);155int d = sizeof(C1);156int e = sizeof(D1);157int f = sizeof(E);158int g = sizeof(F);159