// PR optimization/12926
// This failed on SPARC64 because the assignments to the bit-fields
// were wrongly swapped in the constructor.

// { dg-do run }
// { dg-options "-O2" }

extern "C" void abort(void);

typedef __SIZE_TYPE__ size_t;

void *my_out;

struct A
{
  enum Type {P, U, S};

  int foo1(void *, const char *);
  int foo2(int, const Type);

  A (const size_t size, const Type type): mSize(size), mType(type)
  {
      foo2(foo1(my_out, "type = "), type);
      foo2(foo1(my_out, "mType = "), mType);
  }

  const size_t mSize : 8*sizeof(size_t) - 3;
  Type mType : 2;
};

int i;

int A::foo1(void *ios, const char *str) { }
int A::foo2(int v, const Type t) { i=0; }

int main()
{
  A testa(2, A::S);

  if (testa.mType != A::S)
     abort();

  return 0;
}
