typedef struct {
    unsigned long a;
    unsigned long b;
    unsigned long c;
} data_o;
typedef struct {
    unsigned long c;
    unsigned long gap1;
    unsigned long b;
    unsigned long gap2;
    unsigned long a;
    unsigned long x;
} data_i;

volatile unsigned long gx;
void __attribute__((noipa))
bar(unsigned long x)
{
  gx = x;
}

void __attribute__((noipa))
foo(data_o *o, data_i *i)
{
  o->a = i->a;
  o->b = i->b;
  o->c = i->c;
  bar (i->x);
}

int main()
{
  unsigned long data[9];
  if ((__UINTPTR_TYPE__)data & 15 != 0)
    foo ((data_o *)&data[6], (data_i *)data);
  else
    foo ((data_o *)data, (data_i *)&data[3]);
  return 0;
}
