-fstrict-volatile-bitfields doesn't work incorrectly in some cases 
when storing into a volatile bit-field. 

Bernd provided a fix here about 1 year ago:
http://gcc.gnu.org/ml/gcc-patches/2010-12/msg00217.html.
But it is pending to trunk. Here are my humble opinions and hopefully 
we can revive it:

1. The fix could have helped lots of those who use volatile bit-fields, 
but has been blocked for 1 year by ABI version 1, a feature that I believe 
no one nowadays is using with latest gcc. Either error out ABI version 1
for some target, or just revising the failed ABI test case is OK for me.

2. This bug impacts all targets, especially target with 
strict-volatile-bitfields default enabled like ARM. The test case Bernd 
provided can be revised to a target independent case.

+++ gcc/testsuite/gcc.dg/volatile-bitfields-4.c (revision 0)
@@ -0,0 +1,15 @@ 
+/* { dg-do run } */
+/* { dg-options "-fstrict-volatile-bitfields" } */
+
+extern void abort(void);
+struct thing {
+  volatile unsigned short a: 8;
+  volatile unsigned short b: 8;
+} t = {1,2};
+
+int main()
+{
+  t.a = 3;
+  if (t.a !=3 || t.b !=2) abort();
+  return 0;
+}










Reply via email to