// RUN: %clang_cc1 -triple powerpc-ibm-aix-xcoff -fdump-record-layouts \ // RUN: -fsyntax-only %s | \ // RUN: FileCheck %s // RUN: %clang_cc1 -triple powerpc64-ibm-aix-xcoff -fdump-record-layouts \ // RUN: -fsyntax-only %s | \ // RUN: FileCheck %s struct Empty {}; struct A { double d; }; // CHECK: *** Dumping AST Record Layout // CHECK-NEXT: 0 | struct Empty (empty) // CHECK-NEXT: | [sizeof=1, dsize=1, align=1, preferredalign=1, // CHECK-NEXT: | nvsize=1, nvalign=1, preferrednvalign=1] // CHECK: *** Dumping AST Record Layout // CHECK-NEXT: 0 | struct A // CHECK-NEXT: 0 | double d // CHECK-NEXT: | [sizeof=8, dsize=8, align=4, preferredalign=8, // CHECK-NEXT: | nvsize=8, nvalign=4, preferrednvalign=8] struct B { ~B(); Empty emp; A a; char c; }; struct B1 { [[no_unique_address]] B b; char ext[7]; }; // CHECK: *** Dumping AST Record Layout // CHECK-NEXT: 0 | struct B // CHECK-NEXT: 0 | struct Empty emp (empty) // CHECK-NEXT: 4 | struct A a // CHECK-NEXT: 4 | double d // CHECK-NEXT: 12 | char c // CHECK-NEXT: | [sizeof=16, dsize=13, align=4, preferredalign=4, // CHECK-NEXT: | nvsize=13, nvalign=4, preferrednvalign=4] // CHECK: *** Dumping AST Record Layout // CHECK-NEXT: 0 | struct B1 // CHECK-NEXT: 0 | struct B b // CHECK-NEXT: 0 | struct Empty emp (empty) // CHECK-NEXT: 4 | struct A a // CHECK-NEXT: 4 | double d // CHECK-NEXT: 12 | char c // CHECK-NEXT: 13 | char [7] ext // CHECK-NEXT: | [sizeof=20, dsize=20, align=4, preferredalign=4, // CHECK-NEXT: | nvsize=20, nvalign=4, preferrednvalign=4] struct C { ~C(); [[no_unique_address]] Empty emp; A a; char c; }; struct C1 { [[no_unique_address]] C c; char ext[7]; }; // CHECK: *** Dumping AST Record Layout // CHECK-NEXT: 0 | struct C // CHECK-NEXT: 0 | struct Empty emp (empty) // CHECK-NEXT: 0 | struct A a // CHECK-NEXT: 0 | double d // CHECK-NEXT: 8 | char c // CHECK-NEXT: | [sizeof=16, dsize=9, align=4, preferredalign=8, // CHECK-NEXT: | nvsize=9, nvalign=4, preferrednvalign=8] // CHECK: *** Dumping AST Record Layout // CHECK-NEXT: 0 | struct C1 // CHECK-NEXT: 0 | struct C c // CHECK-NEXT: 0 | struct Empty emp (empty) // CHECK-NEXT: 0 | struct A a // CHECK-NEXT: 0 | double d // CHECK-NEXT: 8 | char c // CHECK-NEXT: 9 | char [7] ext // CHECK-NEXT: | [sizeof=16, dsize=16, align=4, preferredalign=8, // CHECK-NEXT: | nvsize=16, nvalign=4, preferrednvalign=8] struct D { ~D(); [[no_unique_address]] char notEmp; A a; char c; }; struct D1 { [[no_unique_address]] D d; char ext[7]; }; // CHECK: *** Dumping AST Record Layout // CHECK-NEXT: 0 | struct D // CHECK-NEXT: 0 | char notEmp // CHECK-NEXT: 4 | struct A a // CHECK-NEXT: 4 | double d // CHECK-NEXT: 12 | char c // CHECK-NEXT: | [sizeof=16, dsize=13, align=4, preferredalign=4, // CHECK-NEXT: | nvsize=13, nvalign=4, preferrednvalign=4] // CHECK: *** Dumping AST Record Layout // CHECK-NEXT: 0 | struct D1 // CHECK-NEXT: 0 | struct D d // CHECK-NEXT: 0 | char notEmp // CHECK-NEXT: 4 | struct A a // CHECK-NEXT: 4 | double d // CHECK-NEXT: 12 | char c // CHECK-NEXT: 13 | char [7] ext // CHECK-NEXT: | [sizeof=20, dsize=20, align=4, preferredalign=4, // CHECK-NEXT: | nvsize=20, nvalign=4, preferrednvalign=4] struct E { [[no_unique_address]] Empty emp; int : 0; double d; }; // CHECK: *** Dumping AST Record Layout // CHECK-NEXT: 0 | struct E // CHECK-NEXT: 0 | struct Empty emp (empty) // CHECK-NEXT: 0:- | int // CHECK-NEXT: 0 | double d // CHECK-NEXT: | [sizeof=8, dsize=8, align=4, preferredalign=4, // CHECK-NEXT: | nvsize=8, nvalign=4, preferrednvalign=4] struct F { [[no_unique_address]] Empty emp, emp2; double d; }; // CHECK: *** Dumping AST Record Layout // CHECK-NEXT: 0 | struct F // CHECK-NEXT: 0 | struct Empty emp (empty) // CHECK-NEXT: 1 | struct Empty emp2 (empty) // CHECK-NEXT: 0 | double d // CHECK-NEXT: | [sizeof=8, dsize=8, align=4, preferredalign=8, // CHECK-NEXT: | nvsize=8, nvalign=4, preferrednvalign=8] int a = sizeof(Empty); int b = sizeof(A); int c = sizeof(B1); int d = sizeof(C1); int e = sizeof(D1); int f = sizeof(E); int g = sizeof(F);