| // 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 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; |
| } |