/* PR target/49504 */
/* { dg-do run { target x32 } } */
/* { dg-options "-O" } */

unsigned long long 
foo (const void* p, unsigned long long q)
{
  unsigned long long a = (((unsigned long long) ((unsigned long) p)) + q) >> 32;
  return a;
}

int
main ()
{
  if (foo (foo, 0x100000000ULL) != 0x1)
    __builtin_abort ();
  return 0;
}
