Bootstrapped and tested on x86_64-unknown-linux-gnu, applied. Richard.
2015-09-29 Richard Biener <rguent...@suse.de> PR tree-optimization/67741 * tree-ssa-math-opts.c (pass_cse_sincos::execute): Only recognize builtin calls with correct signature. * gcc.dg/torture/pr67741.c: New testcase. Index: gcc/tree-ssa-math-opts.c =================================================================== *** gcc/tree-ssa-math-opts.c (revision 228115) --- gcc/tree-ssa-math-opts.c (working copy) *************** pass_cse_sincos::execute (function *fun) *** 1738,1752 **** 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) { tree arg, arg0, arg1, result; HOST_WIDE_INT n; location_t loc; switch (DECL_FUNCTION_CODE (fndecl)) { CASE_FLT_FN (BUILT_IN_COS): --- 1738,1751 ---- of a basic block. */ cleanup_eh = false; ! 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): Index: gcc/testsuite/gcc.dg/torture/pr67741.c =================================================================== *** gcc/testsuite/gcc.dg/torture/pr67741.c (revision 0) --- gcc/testsuite/gcc.dg/torture/pr67741.c (working copy) *************** *** 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); + }