diff options
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/pr67741.c | 13 | ||||
-rw-r--r-- | gcc/tree-ssa-math-opts.c | 7 |
4 files changed, 27 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 12de2e1..8fc37ce 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2015-09-29 Richard Biener <rguenther@suse.de> + + PR tree-optimization/67741 + * tree-ssa-math-opts.c (pass_cse_sincos::execute): Only recognize + builtin calls with correct signature. + 2015-09-29 Ilya Enkovich <enkovich.gnu@gmail.com> PR target/65105 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 09a72d9..6582172 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-09-29 Richard Biener <rguenther@suse.de> + + PR tree-optimization/67741 + * gcc.dg/torture/pr67741.c: New testcase. + 2015-09-29 Uros Bizjak <ubizjak@gmail.com> * gcc.dg/tg-tests.h (foo_1) [UNSAFE]: Also check if f and ld are diff --git a/gcc/testsuite/gcc.dg/torture/pr67741.c b/gcc/testsuite/gcc.dg/torture/pr67741.c new file mode 100644 index 0000000..1ffc707 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr67741.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ + +struct singlecomplex { float real, imag ; } ; +struct doublecomplex { double real, imag ; } ; +struct extendedcomplex { long double real, imag ; } ; +extern double cabs(); +float cabsf(fc) + struct singlecomplex fc; /* { dg-warning "doesn't match" } */ +{ + struct doublecomplex dc ; + dc.real=fc.real; dc.imag=fc.imag; + return (float) cabs(dc); +} diff --git a/gcc/tree-ssa-math-opts.c b/gcc/tree-ssa-math-opts.c index 42708ee..9747739 100644 --- a/gcc/tree-ssa-math-opts.c +++ b/gcc/tree-ssa-math-opts.c @@ -1738,15 +1738,14 @@ pass_cse_sincos::execute (function *fun) of a basic block. */ cleanup_eh = false; - if (is_gimple_call (stmt) - && gimple_call_lhs (stmt) - && (fndecl = gimple_call_fndecl (stmt)) - && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL) + if (gimple_call_builtin_p (stmt, BUILT_IN_NORMAL) + && gimple_call_lhs (stmt)) { tree arg, arg0, arg1, result; HOST_WIDE_INT n; location_t loc; + fndecl = gimple_call_fndecl (stmt); switch (DECL_FUNCTION_CODE (fndecl)) { CASE_FLT_FN (BUILT_IN_COS): |