| // PR c++/37146 |
| // { dg-do run } |
| |
| extern "C" void abort (); |
| int a, b; |
| struct A { int i:8; int j:8; int k:16; int l:32; } c; |
| |
| void |
| f1 (int x, int y) |
| { |
| (x ? a : b) = y; |
| } |
| |
| void |
| f2 (int x, int y) |
| { |
| (x ? c.i : c.j) = y; |
| } |
| |
| void |
| f3 (int x, int y) |
| { |
| (x ? c.i : a) = y; |
| } |
| |
| void |
| f4 (int x, int y) |
| { |
| (x ? c.i : c.k) = y; |
| } |
| |
| void |
| f5 (int x, int y) |
| { |
| (x ? c.l : b) = y; |
| } |
| |
| #define CHECK(var, exp) \ |
| do \ |
| { \ |
| if (var != exp) \ |
| abort (); \ |
| var = -1; \ |
| if (a != -1 \ |
| || b != -1 \ |
| || c.i != -1 \ |
| || c.j != -1 \ |
| || c.k != -1 \ |
| || c.l != -1) \ |
| abort (); \ |
| } \ |
| while (0) |
| |
| int |
| main () |
| { |
| a = -1; |
| b = -1; |
| c.i = -1; |
| c.j = -1; |
| c.k = -1; |
| c.l = -1; |
| f1 (1, 264); |
| CHECK (a, 264); |
| f1 (0, 264); |
| CHECK (b, 264); |
| f2 (1, 112); |
| CHECK (c.i, 112); |
| f2 (0, 112); |
| CHECK (c.j, 112); |
| f3 (1, 26); |
| CHECK (c.i, 26); |
| f3 (0, 26); |
| CHECK (a, 26); |
| f4 (1, 107); |
| CHECK (c.i, 107); |
| f4 (0, 107); |
| CHECK (c.k, 107); |
| f5 (1, 95); |
| CHECK (c.l, 95); |
| f5 (0, 95); |
| CHECK (b, 95); |
| } |