aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2004-11-15 22:10:16 +0000
committerJoseph Myers <jsm28@gcc.gnu.org>2004-11-15 22:10:16 +0000
commitd134f39eeb50933428755e3c01779aa3991a6ef7 (patch)
tree7a989365c25e771cb6f76f1099eaf88f7b22a0be /gcc
parent9cbee3faacdd44f6a9aae35aa4819a1c5c8305e4 (diff)
downloadgcc-d134f39eeb50933428755e3c01779aa3991a6ef7.zip
gcc-d134f39eeb50933428755e3c01779aa3991a6ef7.tar.gz
gcc-d134f39eeb50933428755e3c01779aa3991a6ef7.tar.bz2
re PR c/18498 (gcc allows non-integral bitfield types)
PR c/18498 * c-decl.c (grokdeclarator): Call check_bitfield_type_and_width after processing the declarator. testsuite: * gcc.dg/bitfld-13.c: New test. From-SVN: r90696
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/c-decl.c8
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/bitfld-13.c14
4 files changed, 29 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ccb3273..6fe91ef 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2004-11-15 Joseph S. Myers <joseph@codesourcery.com>
+
+ PR c/18498
+ * c-decl.c (grokdeclarator): Call check_bitfield_type_and_width
+ after processing the declarator.
+
2004-11-15 Aldy Hernandez <aldyh@redhat.com>
* config/rs6000/altivec.md ("altivec_vsplth"): Rewrite with
diff --git a/gcc/c-decl.c b/gcc/c-decl.c
index f5bc6e5..709abed 100644
--- a/gcc/c-decl.c
+++ b/gcc/c-decl.c
@@ -3809,10 +3809,6 @@ grokdeclarator (const struct c_declarator *declarator,
&& TREE_CODE (type) == INTEGER_TYPE)
type = c_common_unsigned_type (type);
- /* Check the type and width of a bit-field. */
- if (bitfield)
- check_bitfield_type_and_width (&type, width, orig_name);
-
/* Figure out the type qualifiers for the declaration. There are
two ways a declaration can become qualified. One is something
like `const int i' where the `const' is explicit. Another is
@@ -4252,6 +4248,10 @@ grokdeclarator (const struct c_declarator *declarator,
/* Now TYPE has the actual type. */
+ /* Check the type and width of a bit-field. */
+ if (bitfield)
+ check_bitfield_type_and_width (&type, width, orig_name);
+
/* Did array size calculations overflow? */
if (TREE_CODE (type) == ARRAY_TYPE
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index c24cf1b..4ea1f12 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2004-11-15 Joseph S. Myers <joseph@codesourcery.com>
+
+ PR c/18498
+ * gcc.dg/bitfld-13.c: New test.
+
2004-11-15 Janis Johnson <janis187@us.ibm.com>
* gcc.dg/vect/tree-vect.h: (check_vect): Test symbols defined for
diff --git a/gcc/testsuite/gcc.dg/bitfld-13.c b/gcc/testsuite/gcc.dg/bitfld-13.c
new file mode 100644
index 0000000..012a3e5
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/bitfld-13.c
@@ -0,0 +1,14 @@
+/* Test invalid bit-field types: bug 18498. */
+/* { dg-do compile } */
+/* { dg-options "" } */
+
+int
+main(void)
+{
+ struct X {
+ int s[20] : 1; /* { dg-error "error: bit-field 's' has invalid type" } */
+ int *p : 2; /* { dg-error "error: bit-field 'p' has invalid type" } */
+ int (*f)(float) : 3; /* { dg-error "error: bit-field 'f' has invalid type" } */
+ } x;
+ return 0;
+}