diff options
author | rsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2015-10-19 10:06:56 +0000 |
---|---|---|
committer | rsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2015-10-19 10:06:56 +0000 |
commit | cd5ad70a2a1af200e0087490d30a857a2fa24a36 (patch) | |
tree | 3ed0952d030d6517f61cb3fc788efa74c943489b /gcc | |
parent | e1604eeae14621984aef6b2ac68059676b37be14 (diff) | |
download | gcc-cd5ad70a2a1af200e0087490d30a857a2fa24a36.tar.gz |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@228963 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/builtins-20.c | 6 |
2 files changed, 7 insertions, 3 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 95d68856e3a..380297d91fb 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2015-10-19 Richard Sandiford <richard.sandiford@arm.com> + + * gcc.dg/builtins-20.c: Remove undefined behavior. + 2015-10-18 Mikael Morin <mikael@gcc.gnu.org> PR fortran/67758 diff --git a/gcc/testsuite/gcc.dg/builtins-20.c b/gcc/testsuite/gcc.dg/builtins-20.c index 43aa71b271a..2b634286583 100644 --- a/gcc/testsuite/gcc.dg/builtins-20.c +++ b/gcc/testsuite/gcc.dg/builtins-20.c @@ -122,7 +122,7 @@ void test2(double x, double y) if (cos((y*=3, -x)) != cos((y*=3,x))) link_error (); - if (cos((y*=2, -fabs(tan(x/-y)))) != cos((y*=2,tan(x/y)))) + if (cos(-fabs(tan(x/-y))) != cos(tan(x/y))) link_error (); if (cos(copysign(x,y)) != cos(x)) @@ -350,7 +350,7 @@ void test2f(float x, float y) if (cosf((y*=3, -x)) != cosf((y*=3,x))) link_error (); - if (cosf((y*=2, -fabsf(tanf(x/-y)))) != cosf((y*=2,tanf(x/y)))) + if (cosf(-fabsf(tanf(x/-y))) != cosf(tanf(x/y))) link_error (); if (cosf(copysignf(x,y)) != cosf(x)) @@ -577,7 +577,7 @@ void test2l(long double x, long double y) if (cosl((y*=3, -x)) != cosl((y*=3,x))) link_error (); - if (cosl((y*=2, -fabsl(tanl(x/-y)))) != cosl((y*=2,tanl(x/y)))) + if (cosl(-fabsl(tanl(x/-y))) != cosl(tanl(x/y))) link_error (); if (cosl(copysignl(x,y)) != cosl(x)) |