> This may work today, but and still break in the future. This
> will not work (possibly) years from now when gcc will start
> doing VRP on math functions like isinf.
>
> MIN_INT <= argc <= MAX_INT falls well into representable
> values of double (assuming 32 bit int or less). This means
> that the compiler may deduce that isinf((double)argc) always
> returns false, without ever calling the function.

You're too clever. :-)

union U {
  int i;
  double d;
};

volatile int a;

int
main (int argc, char *argv[])
{
  union U u;
  u.i = argc;
  a = isinf (u.d);
  return 0;
}

-- 
Eric Botcazou

Reply via email to