// RUN: %clang_cc1 -w -fdump-record-layouts %s > %t.layouts
// RUN: %clang_cc1 -w -fdump-record-layouts-simple %s > %t.before
// RUN: %clang_cc1 -w -DPACKED= -DALIGNED16= -fdump-record-layouts-simple -foverride-record-layout=%t.layouts %s > %t.after
// RUN: diff %t.before %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);
}
