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
This commit is contained in:
Joseph Myers 2004-11-15 22:10:16 +00:00 committed by Joseph Myers
parent 9cbee3faac
commit d134f39eeb
4 changed files with 29 additions and 4 deletions

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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;
}