/* { dg-do run } */

typedef unsigned short u16;
typedef unsigned int u32;
typedef unsigned long long u64;

u32 a, b, c, d;

u32 foo (u32 f, u32 g, u32 g2, u32 g3, u16 h, u16 i)
{
  (void)g, (void)g2, (void)g3, (void)h;
  d = __builtin_bswap64 (i);
  __builtin_sub_overflow (0, d, &b);
  __builtin_memset (&i, c, 2);
  a = 0;
  return b + f + i + c;
}

int main (void)
{
  u32 x = foo (0, 0, 0, 0, 0, 0);
  asm ("" :: "r" (x));
  return 0;
}