diff options
author | jsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-09-10 23:10:05 +0000 |
---|---|---|
committer | jsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-09-10 23:10:05 +0000 |
commit | 490eec42c79a8ba479de077423c01637480bc80a (patch) | |
tree | ec0adb6f879751a79c5c8f898f00474f72486beb /gcc/testsuite/gcc.dg/bitfld-9.c | |
parent | 1a664318e9152ebd1ca4e99f53b715c4d3e28c04 (diff) | |
download | gcc-490eec42c79a8ba479de077423c01637480bc80a.tar.gz |
* c-tree.h (struct c_declspecs): Remove typedef_decl. Add
typedef_p and typedef_signed_p.
* c-decl.c (shadow_tag_warned): Check typedef_p, not typedef_decl.
(grokdeclarator): Don't use typedef_decl for warn_deprecated_use.
Check typedef_p and typedef_signed_p, not typedef_decl.
(grokfield): Check typedef_p, not typedef_decl.
(build_null_declspecs): Initialize typedef_p and typedef_signed_p,
not typedef_decl.
(declspecs_add_type): Set typedef_p and typedef_signed_p, not
typedef_decl.
testsuite:
* gcc.dg/bitfld-9.c: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@87326 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/testsuite/gcc.dg/bitfld-9.c')
-rw-r--r-- | gcc/testsuite/gcc.dg/bitfld-9.c | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/bitfld-9.c b/gcc/testsuite/gcc.dg/bitfld-9.c new file mode 100644 index 00000000000..d6ae0ac31e8 --- /dev/null +++ b/gcc/testsuite/gcc.dg/bitfld-9.c @@ -0,0 +1,119 @@ +/* Test -funsigned-bitfields works. */ +/* Origin: Joseph Myers <jsm@polyomino.org.uk> */ +/* { dg-do run } */ +/* { dg-options "-funsigned-bitfields -fsigned-char" } */ + +typedef char c; +typedef signed char sc; +typedef unsigned char uc; +typedef short s; +typedef signed short ss; +typedef unsigned short us; +typedef n; +typedef int i; +typedef signed int si; +typedef unsigned int ui; +typedef long l; +typedef signed long sl; +typedef unsigned long ul; +typedef long long ll; +typedef signed long long sll; +typedef unsigned long long ull; + +typedef c ct; +typedef sc sct; +typedef uc uct; +typedef s st; +typedef ss sst; +typedef us ust; +typedef n nt; +typedef i it; +typedef si sit; +typedef ui uit; +typedef l lt; +typedef sl slt; +typedef ul ult; +typedef ll llt; +typedef sll sllt; +typedef ull ullt; + +struct foo { + char char0 : 1; + c char1 : 1; + ct char2 : 1; + signed char schar0 : 1; + sc schar1 : 1; + sct schar2 : 1; + unsigned char uchar0 : 1; + uc uchar1 : 1; + uct uchar2 : 1; + short short0 : 1; + s short1 : 1; + st short2 : 1; + signed short sshort0 : 1; + ss sshort1 : 1; + sst sshort2 : 1; + unsigned short ushort0 : 1; + us ushort1 : 1; + ust ushort2 : 1; + __attribute__((dummy)) int0 : 1; /* { dg-warning "attribute directive ignored" } */ + n int1 : 1; + nt int2 : 1; + int int3 : 1; + i int4 : 1; + it int5 : 1; + signed int sint0 : 1; + si sint1 : 1; + sit sint2 : 1; + unsigned int uint0 : 1; + ui uint1 : 1; + uit uint2 : 1; + long long0 : 1; + l long1 : 1; + lt long2 : 1; + signed long slong0 : 1; + sl slong1 : 1; + slt slong2 : 1; + unsigned long ulong0 : 1; + ul ulong1 : 1; + ult ulong2 : 1; + long long llong0 : 1; + ll llong1 : 1; + llt llong2 : 1; + signed long long sllong0 : 1; + sll sllong1 : 1; + sllt sllong2 : 1; + unsigned long long ullong0 : 1; + ull ullong1 : 1; + ullt ullong2 : 1; +}; + +struct foo x; + +extern void abort (void); +extern void exit (int); +extern void *memset (void *, int, __SIZE_TYPE__); + +int +main (void) +{ + memset (&x, (unsigned char)-1, sizeof(x)); + if (x.char0 != 1 || x.char1 != 1 || x.char2 != 1 + || x.schar0 != -1 || x.schar1 != -1 || x.schar2 != -1 + || x.uchar0 != 1 || x.uchar1 != 1 || x.uchar2 != 1 + || x.short0 != 1 || x.short1 != 1 || x.short2 != 1 + || x.sshort0 != -1 || x.sshort1 != -1 || x.sshort2 != -1 + || x.ushort0 != 1 || x.ushort1 != 1 || x.ushort2 != 1 + || x.int0 != 1 || x.int1 != 1 || x.int2 != 1 + || x.int3 != 1 || x.int4 != 1 || x.int5 != 1 + || x.sint0 != -1 || x.sint1 != -1 || x.sint2 != -1 + || x.uint0 != 1 || x.uint1 != 1 || x.uint2 != 1 + || x.long0 != 1 || x.long1 != 1 || x.long2 != 1 + || x.slong0 != -1 || x.slong1 != -1 || x.slong2 != -1 + || x.ulong0 != 1 || x.ulong1 != 1 || x.ulong2 != 1 + || x.llong0 != 1 || x.llong1 != 1 || x.llong2 != 1 + || x.sllong0 != -1 || x.sllong1 != -1 || x.sllong2 != -1 + || x.ullong0 != 1 || x.ullong1 != 1 || x.ullong2 != 1) + abort (); + exit (0); +} |