/* Test semantics of #pragma pack.
   Contributed by Mike Coleman <mcoleman2@kc.rr.com> */

/* APPLE LOCAL Macintosh alignment 2002-1-22 ff */
/* { dg-do compile { target *-*-linux* *-*-cygwin* powerpc*-*-eabi* *-*-darwin* } } */

/* We only test the alignment of char, short, and int, because these
   are the only ones that are pretty certain to be the same across
   platforms (and maybe not even those).  Mainly we're just testing
   whether pushing and popping seem to be working correctly, and
   verifying the (alignment == 1) case, which is really the only
   reason anyone would use this pragma anyway.
*/

#include <stddef.h>

/* gap in bytes between fields a and b in struct s */
#define gap(s, a, b) (offsetof(struct s, a) - offsetof(struct s, b))
/* generalized compile-time test expression */
#define test(n, expr) int test_##n [(expr) ? 1 : -1]
/* test a gap */
#define testgap(n, a, b, val) test(n, gap(SNAME, a, b) == val)

#define SNAME s0
#include "pack-test-1.h"

/* Save original alignment values.  Can't use const ints because they
   won't be expanded and we'll get bogus errors about variable length
   arrays.  (Possible bug in C front end?)  Use s0, not SNAME, so these
   won't change later.  */
#define al1 gap(s0, f1, f0)
#define al2 gap(s0, f2, f1)
#define al3 gap(s0, f3, f2)
#define al4 gap(s0, f4, f3)
#define al5 gap(s0, f5, f4)
#define al6 gap(s0, f6, f5)
#define al7 gap(s0, f7, f6)

#undef SNAME
#define SNAME s1
#pragma pack(push, p1, 1)
#include "pack-test-1.h"

void SNAME() {
  testgap(0, f1, f0, sizeof(char));
  testgap(1, f3, f2, sizeof(short));
  testgap(2, f5, f4, sizeof(int));
}

#undef SNAME
#define SNAME s2
#pragma pack(push, p2, 2)
#include "pack-test-1.h"

void SNAME() {
  testgap(0, f1, f0, sizeof(short));
  testgap(1, f3, f2, sizeof(short));
  testgap(2, f5, f4, sizeof(int));
}

#undef SNAME
#define SNAME s3
#pragma pack(push, p3, 4)
#include "pack-test-1.h"

void SNAME() {
  testgap(0, f1, f0, sizeof(int));
  testgap(1, f3, f2, sizeof(int));
  testgap(2, f5, f4, sizeof(int));
}

#undef SNAME
#define SNAME s4
#pragma pack(pop)
#include "pack-test-1.h"

void SNAME() {
  testgap(0, f1, f0, sizeof(short));
  testgap(1, f3, f2, sizeof(short));
  testgap(2, f5, f4, sizeof(int));
}

#undef SNAME
#define SNAME s5
#pragma pack(pop, p2)
#include "pack-test-1.h"

void SNAME() {
  testgap(0, f1, f0, sizeof(char));
  testgap(1, f3, f2, sizeof(short));
  testgap(2, f5, f4, sizeof(int));
}

#undef SNAME
#define SNAME s6
#pragma pack(pop, p1)
#include "pack-test-1.h"

void SNAME() {
  testgap(0, f1, f0, al1);
  testgap(1, f3, f2, al3);
  testgap(2, f5, f4, al5);
}

#undef SNAME
#define SNAME s7
#pragma pack(1)
#include "pack-test-1.h"

void SNAME() {
  testgap(0, f1, f0, sizeof(char));
  testgap(1, f3, f2, sizeof(short));
  testgap(2, f5, f4, sizeof(int));
}

#undef SNAME
#define SNAME s8
#pragma pack(push, p2, 2)
#include "pack-test-1.h"

void SNAME() {
  testgap(0, f1, f0, sizeof(short));
  testgap(1, f3, f2, sizeof(short));
  testgap(2, f5, f4, sizeof(int));
}

#undef SNAME
#define SNAME s9
#pragma pack(pop)
#include "pack-test-1.h"

void SNAME() {
  testgap(0, f1, f0, sizeof(char));
  testgap(1, f3, f2, sizeof(short));
  testgap(2, f5, f4, sizeof(int));
}

#undef SNAME
#define SNAME s10
#pragma pack()
#include "pack-test-1.h"

void SNAME() {
  testgap(0, f1, f0, al1);
  testgap(1, f3, f2, al3);
  testgap(2, f5, f4, al5);
}
