5131847.c   [plain text]


/* APPLE LOCAL file 5131847 */
/* { dg-do run { target i?86*-*-* } } */
/* { dg-options "" } */
extern void abort ();
union uu {
  struct {
    unsigned int index     : 4;
    unsigned int image     : 4;
    unsigned int unused    : 24;
    unsigned int unused2   : 32;
  } ss;
  unsigned long long token;
};

extern void myFunc (union uu *u, union uu *v, int n);
void myFunc (union uu *u, union uu *v, int n)
{
  int unit;

  for(unit = 0; unit < n; unit++)
  {
    unsigned int index;
    index = u[unit].ss.index;
    u[unit].token    = v->token;
    u[unit].ss.image = unit;
    u[unit].ss.index = index;
  }
}

#define n 4
int main(int argc, char *argv[])
{
  int i;
  union uu u[n] = {};
  union uu v;

  v.token = ~0ULL;
  myFunc (u, &v, n);

#define UPPER1BITS (0xffffffff00000000ULL)

  for(i = 0; i < n; i++)
  {
    if ((u[i].token & UPPER1BITS) != UPPER1BITS)
      abort ();
  }

  return 0;
}