/* APPLE LOCAL file */
/* { dg-do run { target powerpc*-*-darwin* } } */
extern "C" void abort();
typedef struct TestStateNorm
{
    unsigned int fBlah : 7;     //
    unsigned int fUnused : 2;                // Currently Unused
    unsigned int : 0;
    unsigned int fBlah2 : 7;     //
    unsigned int fUnused2: 2;                // Currently Unused
} TestStateNorm;

TestStateNorm v1norm = { 5, 1, 6, 2 };

union u1 {
  TestStateNorm tsn;
  unsigned int raw[2];
} unorm = { 5, 1, 6, 2 };

#pragma reverse_bitfields on
#pragma ms_struct on
typedef struct TestState
{
    unsigned int fBlah : 7;     //
    unsigned int fUnused : 2;                // Currently Unused
    unsigned int : 0;
    unsigned int fBlah2 : 7;     //
    unsigned int fUnused2 : 2;                // Currently Unused
} TestState;

TestState v1 = { 5, 1, 6, 2 };

union u2 {
  TestState ts;
  unsigned int raw[2];
} u = { 5, 1, 6, 2 };

int main(){
  if (v1norm.fBlah != 5) abort ();
  if (v1norm.fUnused != 1) abort ();
  if (v1norm.fBlah2 != 6) abort ();
  if (v1norm.fUnused2 != 2) abort ();

  if (u.ts.fBlah != 5) abort ();
  if (u.ts.fUnused != 1) abort ();
  if (u.ts.fBlah2 != 6) abort ();
  if (u.ts.fUnused2 != 2) abort ();

  if (unorm.tsn.fBlah != 5) abort ();
  if (unorm.tsn.fUnused != 1) abort ();
  if (unorm.tsn.fBlah2 != 6) abort ();
  if (unorm.tsn.fUnused2 != 2) abort ();

  if (v1.fBlah != 5) abort ();
  if (v1.fUnused != 1) abort ();
  if (v1.fBlah2 != 6) abort ();
  if (v1.fUnused2 != 2) abort ();

  if (unorm.raw[0] != 0x0a800000) abort();
  if (unorm.raw[1] != 0x0d000000) abort();
  if (u.raw[0] != 0x00000085) abort();
  if (u.raw[1] != 0x00000106) abort();
  return 0;
}
