From: Joseph Myers Date: Mon, 15 Nov 2004 22:10:16 +0000 (+0000) Subject: re PR c/18498 (gcc allows non-integral bitfield types) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=d134f39eeb50933428755e3c01779aa3991a6ef7;p=gcc.git 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ccb32736fec..6fe91efe770 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2004-11-15 Joseph S. Myers + + PR c/18498 + * c-decl.c (grokdeclarator): Call check_bitfield_type_and_width + after processing the declarator. + 2004-11-15 Aldy Hernandez * config/rs6000/altivec.md ("altivec_vsplth"): Rewrite with diff --git a/gcc/c-decl.c b/gcc/c-decl.c index f5bc6e5db6a..709abed0365 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 c24cf1ba09b..4ea1f12bac5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2004-11-15 Joseph S. Myers + + PR c/18498 + * gcc.dg/bitfld-13.c: New test. + 2004-11-15 Janis Johnson * 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 00000000000..012a3e55a30 --- /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; +}