diff options
author | Joseph Myers <joseph@codesourcery.com> | 2007-09-20 23:15:07 +0100 |
---|---|---|
committer | Joseph Myers <jsm28@gcc.gnu.org> | 2007-09-20 23:15:07 +0100 |
commit | 02668aba7ebce73b74ec9e5f9af08637fcedc5a7 (patch) | |
tree | 8ea10ee415e476cfe0b3f1c8340a58cf30831a74 /gcc/testsuite/gcc.dg | |
parent | 9fa6b0af1f0a8ec3d6799f54a7c8feedbbc0d4f9 (diff) | |
download | gcc-02668aba7ebce73b74ec9e5f9af08637fcedc5a7.zip gcc-02668aba7ebce73b74ec9e5f9af08637fcedc5a7.tar.gz gcc-02668aba7ebce73b74ec9e5f9af08637fcedc5a7.tar.bz2 |
c-decl.c (check_bitfield_type_and_width): Don't allow _Bool bit-fields wider than one bit.
* c-decl.c (check_bitfield_type_and_width): Don't allow _Bool
bit-fields wider than one bit.
testsuite:
* gcc.dg/c99-bool-2.c, gcc.dg/c99-bool-3.c: New tests.
From-SVN: r128634
Diffstat (limited to 'gcc/testsuite/gcc.dg')
-rw-r--r-- | gcc/testsuite/gcc.dg/c99-bool-1.c | 14 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/c99-bool-2.c | 14 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/c99-bool-3.c | 33 |
3 files changed, 47 insertions, 14 deletions
diff --git a/gcc/testsuite/gcc.dg/c99-bool-1.c b/gcc/testsuite/gcc.dg/c99-bool-1.c index 7102196..7ec99a7 100644 --- a/gcc/testsuite/gcc.dg/c99-bool-1.c +++ b/gcc/testsuite/gcc.dg/c99-bool-1.c @@ -32,8 +32,6 @@ int c = __bool_true_false_are_defined; struct foo { _Bool a : 1; - _Bool b : 2; - _Bool c : 7; } sf; #define str(x) xstr(x) @@ -242,21 +240,9 @@ main (void) sf.a = 1; if (sf.a != 1) abort (); - sf.b = 1; - if (sf.b != 1) - abort (); - sf.c = 1; - if (sf.c != 1) - abort (); sf.a = 0; if (sf.a != 0) abort (); - sf.b = 0; - if (sf.b != 0) - abort (); - sf.c = 0; - if (sf.c != 0) - abort (); } exit (0); } diff --git a/gcc/testsuite/gcc.dg/c99-bool-2.c b/gcc/testsuite/gcc.dg/c99-bool-2.c new file mode 100644 index 0000000..5a577a4 --- /dev/null +++ b/gcc/testsuite/gcc.dg/c99-bool-2.c @@ -0,0 +1,14 @@ +/* Test for _Bool bit-fields. After TC2, the width of a _Bool + bit-field must not extend the width (number of sign and value bits) + of _Bool, which is implementation-defined but is 1 unless the + implementation defines representations for values greater than 1 in + type _Bool and allows for _Bool objects to have such types, which + GCC does not. */ +/* Origin: Joseph Myers <joseph@codesourcery.com> */ +/* { dg-do compile } */ +/* { dg-options "-std=iso9899:1999 -pedantic-errors" } */ + +struct foo +{ + _Bool b : 2; /* { dg-error "width" } */ +}; diff --git a/gcc/testsuite/gcc.dg/c99-bool-3.c b/gcc/testsuite/gcc.dg/c99-bool-3.c new file mode 100644 index 0000000..f93547a --- /dev/null +++ b/gcc/testsuite/gcc.dg/c99-bool-3.c @@ -0,0 +1,33 @@ +/* Test for _Bool bit-fields. They have the semantics of _Bool, at + least for now (DR#335 Spring 2007 discussion). */ +/* Origin: Joseph Myers <joseph@codesourcery.com> */ +/* { dg-do run } */ +/* { dg-options "-std=iso9899:1999 -pedantic-errors" } */ +struct foo +{ + _Bool a : 1; +} sf; + +extern void abort (void); +extern void exit (int); + +int +main (void) +{ + int i; + for (i = 0; i < sizeof (struct foo); i++) + *((unsigned char *)&sf + i) = (unsigned char) -1; + sf.a = 2; + if (sf.a != 1) + abort (); + sf.a = 0; + if (sf.a != 0) + abort (); + sf.a = 0.2; + if (sf.a != 1) + abort (); + sf.a = &sf; + if (sf.a != 1) + abort (); + exit (0); +} |