| /* 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); |
| } |