From: Andrew Pinski <apin...@marvell.com> This testcase used to fail before GCC 6.4.0 due to the wrong type being used for auto when used with bitfields, the C++ front-end was using the "bitfield" type rather than the underlaying type.
Committed the testcase after a quick check. PR c++/71792 gcc/testsuite/ChangeLog: * g++.dg/torture/pr71792.C: New test. --- gcc/testsuite/g++.dg/torture/pr71792.C | 42 ++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 gcc/testsuite/g++.dg/torture/pr71792.C diff --git a/gcc/testsuite/g++.dg/torture/pr71792.C b/gcc/testsuite/g++.dg/torture/pr71792.C new file mode 100644 index 00000000000..607774d755d --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr71792.C @@ -0,0 +1,42 @@ +// { dg-do run { target c++11 } } +// PR C++/71792 + +class some_class +{ +public: + unsigned int np : 4; + unsigned int nc : 8; + unsigned int nc0 : 1; +}; + +template<bool what> +static void test_bug (const some_class &mp) { + if (what) { + int t = 0; + for (auto i = mp.nc0; i < mp.nc; i++) { + if (t != i) __builtin_abort (); + t++; + } + } +} + +static void test_ok (const some_class &mp) { + int t = 0; + for (auto i = mp.nc0; i < mp.nc; i++) { + if (t != i) __builtin_abort (); + t++; + } +} + +int main () +{ + some_class mp; + mp.nc0 = 0; + mp.nc = 9; + mp.np = 3; + + test_bug<true> (mp); + test_ok (mp); + + return 0; +} -- 2.17.1