/* { dg-do run } */
/* { dg-options "-ftrapv" } */

extern void abort (void);
unsigned long
foo (long i, long j)
{
  /* We may not fold this to (unsigned long)(i * j).  */
  return -(unsigned long)(i * -j);
}
int main()
{
  if (foo (-__LONG_MAX__ - 1, -1) != -(unsigned long)(-__LONG_MAX__ - 1))
    abort ();
  return 0;
}