1  /* Test -funsigned-bitfields works.  */
       2  /* Origin: Joseph Myers <jsm@polyomino.org.uk> */
       3  /* { dg-do run } */
       4  /* { dg-options "-funsigned-bitfields -fsigned-char -std=gnu89" } */
       5  
       6  typedef char c;
       7  typedef signed char sc;
       8  typedef unsigned char uc;
       9  typedef short s;
      10  typedef signed short ss;
      11  typedef unsigned short us;
      12  typedef n;
      13  typedef int i;
      14  typedef signed int si;
      15  typedef unsigned int ui;
      16  typedef long l;
      17  typedef signed long sl;
      18  typedef unsigned long ul;
      19  typedef long long ll;
      20  typedef signed long long sll;
      21  typedef unsigned long long ull;
      22  
      23  typedef c ct;
      24  typedef sc sct;
      25  typedef uc uct;
      26  typedef s st;
      27  typedef ss sst;
      28  typedef us ust;
      29  typedef n nt;
      30  typedef i it;
      31  typedef si sit;
      32  typedef ui uit;
      33  typedef l lt;
      34  typedef sl slt;
      35  typedef ul ult;
      36  typedef ll llt;
      37  typedef sll sllt;
      38  typedef ull ullt;
      39  
      40  struct foo {
      41    char char0 : 1;
      42    c char1 : 1;
      43    ct char2 : 1;
      44    signed char schar0 : 1;
      45    sc schar1 : 1;
      46    sct schar2 : 1;
      47    unsigned char uchar0 : 1;
      48    uc uchar1 : 1;
      49    uct uchar2 : 1;
      50    short short0 : 1;
      51    s short1 : 1;
      52    st short2 : 1;
      53    signed short sshort0 : 1;
      54    ss sshort1 : 1;
      55    sst sshort2 : 1;
      56    unsigned short ushort0 : 1;
      57    us ushort1 : 1;
      58    ust ushort2 : 1;
      59    __attribute__((dummy)) int0 : 1; /* { dg-warning "attribute directive ignored" } */
      60    n int1 : 1;
      61    nt int2 : 1;
      62    int int3 : 1;
      63    i int4 : 1;
      64    it int5 : 1;
      65    signed int sint0 : 1;
      66    si sint1 : 1;
      67    sit sint2 : 1;
      68    unsigned int uint0 : 1;
      69    ui uint1 : 1;
      70    uit uint2 : 1;
      71    long long0 : 1;
      72    l long1 : 1;
      73    lt long2 : 1;
      74    signed long slong0 : 1;
      75    sl slong1 : 1;
      76    slt slong2 : 1;
      77    unsigned long ulong0 : 1;
      78    ul ulong1 : 1;
      79    ult ulong2 : 1;
      80    long long llong0 : 1;
      81    ll llong1 : 1;
      82    llt llong2 : 1;
      83    signed long long sllong0 : 1;
      84    sll sllong1 : 1;
      85    sllt sllong2 : 1;
      86    unsigned long long ullong0 : 1;
      87    ull ullong1 : 1;
      88    ullt ullong2 : 1;
      89  };
      90  
      91  struct foo x;
      92  
      93  extern void abort (void);
      94  extern void exit (int);
      95  extern void *memset (void *, int, __SIZE_TYPE__);
      96  
      97  int
      98  main (void)
      99  {
     100    memset (&x, (unsigned char)-1, sizeof(x));
     101    if (x.char0 != 1 || x.char1 != 1 || x.char2 != 1
     102        || x.schar0 != -1 || x.schar1 != -1 || x.schar2 != -1
     103        || x.uchar0 != 1 || x.uchar1 != 1 || x.uchar2 != 1
     104        || x.short0 != 1 || x.short1 != 1 || x.short2 != 1
     105        || x.sshort0 != -1 || x.sshort1 != -1 || x.sshort2 != -1
     106        || x.ushort0 != 1 || x.ushort1 != 1 || x.ushort2 != 1
     107        || x.int0 != 1 || x.int1 != 1 || x.int2 != 1
     108        || x.int3 != 1 || x.int4 != 1 || x.int5 != 1
     109        || x.sint0 != -1 || x.sint1 != -1 || x.sint2 != -1
     110        || x.uint0 != 1 || x.uint1 != 1 || x.uint2 != 1
     111        || x.long0 != 1 || x.long1 != 1 || x.long2 != 1
     112        || x.slong0 != -1 || x.slong1 != -1 || x.slong2 != -1
     113        || x.ulong0 != 1 || x.ulong1 != 1 || x.ulong2 != 1
     114        || x.llong0 != 1 || x.llong1 != 1 || x.llong2 != 1
     115        || x.sllong0 != -1 || x.sllong1 != -1 || x.sllong2 != -1
     116        || x.ullong0 != 1 || x.ullong1 != 1 || x.ullong2 != 1)
     117      abort ();
     118    exit (0);
     119  }