/* { dg-do compile { target { c } } } */
/* { dg-options "-fdump-tree-original" } */
/* { dg-additional-options "-fno-common" { target hppa*-*-hpux* } } */

typedef char char4[4] __attribute__ ((aligned (4)));
char4 c4[4] __attribute__ ((aligned (16)));

typedef char char16[16] __attribute__ ((aligned (16)));
char16 c16[4] __attribute__ ((aligned (4)));

int f1 (void)
{
  /* 12 */
  return 15 & (__SIZE_TYPE__)&c4[3];
}

int f2 (int i)
{
  /* Indeterminate */
  return 15 & (__SIZE_TYPE__)&c4[i];
}

int f3 (int i)
{
  /* 0 */
  return 3 & (__SIZE_TYPE__)&c4[i];
}

int f4 (int i)
{
  /* Indeterminate */
  return 7 & (__SIZE_TYPE__)&c16[i];
}

int f5 (int i)
{
  /* 0 */
  return 3 & (__SIZE_TYPE__)&c16[i];
}

/* { dg-final { scan-tree-dump-times "return \[^\n0-9\]*12;" 1 "original" } } */
/* { dg-final { scan-tree-dump-times "\& 15" 1 "original" } } */
/* { dg-final { scan-tree-dump-times "return \[^\n0-9\]*0;" 2 "original" } } */
/* { dg-final { scan-tree-dump-times "\& 7" 1 "original" } } */
