]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR c/57773 (-Wpedantic incorrect warning for enum bit-field)
authorMarek Polacek <polacek@redhat.com>
Mon, 6 Jan 2014 18:53:01 +0000 (18:53 +0000)
committerMarek Polacek <mpolacek@gcc.gnu.org>
Mon, 6 Jan 2014 18:53:01 +0000 (18:53 +0000)
PR c/57773
* doc/implement-c.texi: Mention that other integer types are
permitted as bit-field types in strictly conforming mode.
c/
* c-decl.c (check_bitfield_type_and_width): Warn for implementation
defined bit-field types only in ISO C.
testsuite/
* gcc.dg/pr57773.c: New test.

From-SVN: r206373

gcc/ChangeLog
gcc/c/ChangeLog
gcc/c/c-decl.c
gcc/doc/implement-c.texi
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr57773.c [new file with mode: 0644]

index 5a3e25d1e640ca8d98889d3bc068da3c9e1c1564..2a9dafaa1d00a4a81bc116d0385398424bf41a79 100644 (file)
@@ -1,3 +1,9 @@
+2014-01-06  Marek Polacek  <polacek@redhat.com>
+
+       PR c/57773
+       * doc/implement-c.texi: Mention that other integer types are
+       permitted as bit-field types in strictly conforming mode.
+
 2014-01-02  Felix Yang  <fei.yang0953@gmail.com>
 
        * modulo-sched.c (schedule_reg_moves): Clear distance1_uses if it
index 6cb79c0fa6f33a43d4557cca14b893a7877da2e5..917453b41110a89cedef9e299c6b50175b87ca1c 100644 (file)
@@ -1,3 +1,9 @@
+2014-01-06  Marek Polacek  <polacek@redhat.com>
+
+       PR c/57773
+       * c-decl.c (check_bitfield_type_and_width): Warn for implementation
+       defined bit-field types only in ISO C.
+
 2014-01-02  Richard Sandiford  <rdsandiford@googlemail.com>
 
        Update copyright years
index 21a07e211fe2e7a7eb8dca9e9a554252290b078d..6d4e6a36deacfbc95f566e1b723866800e3c2d37 100644 (file)
@@ -4840,7 +4840,8 @@ check_bitfield_type_and_width (tree *type, tree *width, tree orig_name)
   if (!in_system_header_at (input_location)
       && type_mv != integer_type_node
       && type_mv != unsigned_type_node
-      && type_mv != boolean_type_node)
+      && type_mv != boolean_type_node
+      && !flag_isoc99)
     pedwarn (input_location, OPT_Wpedantic,
             "type of bit-field %qs is a GCC extension", name);
 
index 2ddae637dec530b446f9cd1f165a802d0d8a020a..762ffe018de0b3ce00fbc3ce21a8fee8132ac11b 100644 (file)
@@ -479,9 +479,8 @@ by the @option{-funsigned-bitfields} option.
 @cite{Allowable bit-field types other than @code{_Bool}, @code{signed int},
 and @code{unsigned int} (C99 and C11 6.7.2.1).}
 
-No other types are permitted in strictly conforming mode.
-@c Would it be better to restrict the pedwarn for other types to C90
-@c mode and document the other types for C99/C11 mode?
+Other integer types, such as @code{long int}, and enumerated types are
+permitted even in strictly conforming mode.
 
 @item
 @cite{Whether atomic types are permitted for bit-fields (C11 6.7.2.1).}
index 80113abfdecfffd97bf1fa991ffaf4d118481a39..075e83ede09b775c48d62bcfffe1c08e9205aa68 100644 (file)
@@ -1,3 +1,8 @@
+2014-01-06  Marek Polacek  <polacek@redhat.com>
+
+       PR c/57773
+       * gcc.dg/pr57773.c: New test.
+
 2014-01-06  Adam Butcher  <adam@jessamine.co.uk>
 
        PR c++/59635
diff --git a/gcc/testsuite/gcc.dg/pr57773.c b/gcc/testsuite/gcc.dg/pr57773.c
new file mode 100644 (file)
index 0000000..1c30950
--- /dev/null
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-std=c99 -Wpedantic" } */
+
+enum e { A };
+struct { enum e b: 2; } s1;
+struct { signed char b: 2; } s2;
+struct { unsigned char b: 2; } s3;
+struct { short b: 2; } s4;
+struct { unsigned short b: 2; } s5;
+struct { long int b: 2; } s6;
+struct { unsigned long int b: 2; } s7;
+struct { long long int b: 2; } s8;
+struct { unsigned long long int b: 2; } s9;