// RUN: %clang_cc1 -w -fdump-record-layouts-simple %s > %t.layouts
// RUN: %clang_cc1 -w -DPACKED= -DALIGNED16= -fdump-record-layouts-simple -foverride-record-layout=%t.layouts %s > %t.after
// RUN: diff %t.layouts %t.after
// RUN: FileCheck %s < %t.after

// If not explicitly disabled, set PACKED to the packed attribute.
#ifndef PACKED
#  define PACKED __attribute__((packed))
#endif

// If not explicitly disabled, set ALIGNED16 to 16-byte alignment.
#ifndef ALIGNED16
#  define ALIGNED16 __attribute__((aligned(16)))
#endif

// CHECK: Type: struct X0
struct X0 { 
  int x[6] PACKED; 
};

void use_X0() { struct X0 x0; x0.x[5] = sizeof(struct X0); };

// CHECK: Type: struct X1
struct X1 { 
  char x[13]; 
  struct X0 y; 
} PACKED;

void use_X1() { struct X1 x1; x1.x[5] = sizeof(struct X1); };

// CHECK: Type: struct X2
struct PACKED X2 {
  short x;
  int y;
};

void use_X2() { struct X2 x2; x2.y = sizeof(struct X2); };

// CHECK: Type: struct X3
struct X3 {
  short x PACKED;
  int y;
};

void use_X3() { struct X3 x3; x3.y = sizeof(struct X3); };

#pragma pack(push,2)
// CHECK: Type: struct X4
struct X4 {
  int x;
  int y;
};
#pragma pack(pop)

void use_X4() { struct X4 x4; x4.y = sizeof(struct X4); };

// CHECK: Type: struct X5
struct PACKED X5 { double a[19];  signed char b; };

void use_X5() { struct X5 x5; x5.b = sizeof(struct X5); };

// CHECK: Type: struct X6
struct PACKED X6 { long double a; char b; };

void use_X6() { struct X6 x6; x6.b = sizeof(struct X6); };

// CHECK: Type: struct X7
struct X7 {
        unsigned x;
        unsigned char y;
} PACKED;

void use_X7() { struct X7 x7; x7.y = x7.x = sizeof(struct X7); }

// CHECK: Type: union X8
union X8 {
  struct X7 x;
  unsigned y;
} PACKED;

// CHECK: Type: struct X9
struct X9 {
  unsigned int x[2] PACKED;
  unsigned int y;
  unsigned int z PACKED;
};

// CHECK: Type: struct X10
struct X10 {
  unsigned int x[2] PACKED;
  unsigned int y PACKED;
  unsigned int z PACKED;
};

// CHECK: Type: struct X11
struct PACKED X11 {
  unsigned int x[2];
  unsigned int y;
  unsigned int z;
};

// CHECK: Type: struct X12
struct PACKED X12 {
  int x : 24;
};

// CHECK: Type: struct X13
struct PACKED X13 {
  signed x : 10;
  signed y : 10;
};

// CHECK: Type: union X14
union PACKED X14 {
  unsigned long long x : 3;
};

// CHECK: Type: struct X15
struct X15 {
  unsigned x : 16;
  unsigned y : 28 PACKED;
};

// CHECK: Type: struct X16
struct ALIGNED16 X16 {
  int a, b, c;
  int x : 5;
  int y : 29;
};

void use_structs() {
  union X8 x8;
  typedef int X8array[sizeof(union X8)];
  x8.y = sizeof(union X8);
  x8.x.x = x8.y;

  struct X9 x9;
  typedef int X9array[sizeof(struct X9)];
  x9.y = sizeof(struct X9);

  struct X10 x10;
  typedef int X10array[sizeof(struct X10)];
  x10.y = sizeof(struct X10);

  struct X11 x11;
  typedef int X11array[sizeof(struct X11)];
  x11.y = sizeof(struct X11);

  struct X12 x12;
  x12.x = sizeof(struct X12);

  struct X13 x13;
  x13.x = sizeof(struct X13);

  union X14 x14;
  x14.x = sizeof(union X14);

  struct X15 x15;
  x15.x = sizeof(struct X15);

  struct X16 x16;
  x16.x = sizeof(struct X16);
}
