// 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; int f1 (int x) { return x ? a : b; } int f2 (int x) { return x ? c.i : c.j; } int f3 (int x) { return x ? c.i : a; } int f4 (int x) { return x ? c.i : c.k; } int f5 (int x) { return x ? c.l : b; } int main () { a = 17; b = 18; c.i = 19; c.j = 20; c.k = 21; c.l = 22; if (f1 (1) != a) abort (); if (f1 (0) != b) abort (); if (f2 (1) != c.i) abort (); if (f2 (0) != c.j) abort (); if (f3 (1) != c.i) abort (); if (f3 (0) != a) abort (); if (f4 (1) != c.i) abort (); if (f4 (0) != c.k) abort (); if (f5 (1) != c.l) abort (); if (f5 (0) != b) abort (); }