Remove undefined behaviour from builtins-20.c
authorRichard Sandiford <richard.sandiford@arm.com>
Mon, 19 Oct 2015 10:06:56 +0000 (10:06 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Mon, 19 Oct 2015 10:06:56 +0000 (10:06 +0000)
commit9c99fe750c477ab4408f48d8df2cd186307159ff
tree3ed0952d030d6517f61cb3fc788efa74c943489b
parent613743a2cb9e09a864e0b913cbb7721d96c2079d
Remove undefined behaviour from builtins-20.c

builtins-20.c had:

      if (cos((y*=2, -fabs(tan(x/-y)))) != cos((y*=2,tan(x/y))))
        link_error ();

which is undefined behaviour.  The test expected that y had the same
value in x/y and x/-y, but gimplification actually implements the
"obvious" interpretation, multiplying y by 2, using it for one cos call,
then multiplying it by 2 again and using it for the other cos call.

The file has other (valid) tests that side-effects don't block
optimisation, such as:

      if (cosf((y*=3, -x)) != cosf((y*=3,x)))
        link_error ();

so this patch simply removes this instance.

Tested on x86_64-linux-gnu, aarch64-linux-gnu and arm-linux-gnueabi.

gcc/testsuite/
* gcc.dg/builtins-20.c: Remove undefined behavior.

From-SVN: r228963
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/builtins-20.c