aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2016-01-01 12:55:59 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2016-01-01 12:55:59 +0100
commit942a13194f3efa752dbb1d9b8fbe6ceb9d104e13 (patch)
tree6bbd05fe88d18b607a5a7d9e9d474829afc13197 /gcc
parent10dff63f98807e6b7f65c9c3b9f69623f8f619b3 (diff)
downloadgcc-942a13194f3efa752dbb1d9b8fbe6ceb9d104e13.zip
gcc-942a13194f3efa752dbb1d9b8fbe6ceb9d104e13.tar.gz
gcc-942a13194f3efa752dbb1d9b8fbe6ceb9d104e13.tar.bz2
re PR tree-optimization/69070 (ICE: tree check: expected real_cst, have ssa_name in gimple_expand_builtin_pow, at tree-ssa-math-opts.c:1541 with -fsignaling-nans and powl())
PR tree-optimization/69070 * tree-ssa-math-opts.c (gimple_expand_builtin_pow): Only test REAL_VALUE_ISSIGNALING_NAN on arg0 if arg0 is a REAL_CST. * gcc.dg/pr69070.c: New test. From-SVN: r232025
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/gcc.dg/pr69070.c9
-rw-r--r--gcc/tree-ssa-math-opts.c3
4 files changed, 18 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 8f675939..7d27a83 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,9 @@
2016-01-01 Jakub Jelinek <jakub@redhat.com>
+ PR tree-optimization/69070
+ * tree-ssa-math-opts.c (gimple_expand_builtin_pow): Only test
+ REAL_VALUE_ISSIGNALING_NAN on arg0 if arg0 is a REAL_CST.
+
PR sanitizer/69055
* ubsan.c (ubsan_instrument_float_cast): Call
initialize_sanitizer_builtins.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 3de98fb..e189d4b 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,8 @@
2016-01-01 Jakub Jelinek <jakub@redhat.com>
+ PR tree-optimization/69070
+ * gcc.dg/pr69070.c: New test.
+
PR sanitizer/69055
* gfortran.dg/pr69055.f90: New test.
diff --git a/gcc/testsuite/gcc.dg/pr69070.c b/gcc/testsuite/gcc.dg/pr69070.c
new file mode 100644
index 0000000..f8a82e5
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr69070.c
@@ -0,0 +1,9 @@
+/* PR tree-optimization/69070 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -fsignaling-nans" } */
+
+double
+foo (double d)
+{
+ return __builtin_pow (d, 2);
+}
diff --git a/gcc/tree-ssa-math-opts.c b/gcc/tree-ssa-math-opts.c
index 244cf19..5cb8ba2 100644
--- a/gcc/tree-ssa-math-opts.c
+++ b/gcc/tree-ssa-math-opts.c
@@ -1538,7 +1538,8 @@ gimple_expand_builtin_pow (gimple_stmt_iterator *gsi, location_t loc,
/* Don't perform the operation if flag_signaling_nans is on
and the operand is a signaling NaN. */
if (HONOR_SNANS (TYPE_MODE (TREE_TYPE (arg1)))
- && (REAL_VALUE_ISSIGNALING_NAN (TREE_REAL_CST (arg0))
+ && ((TREE_CODE (arg0) == REAL_CST
+ && REAL_VALUE_ISSIGNALING_NAN (TREE_REAL_CST (arg0)))
|| REAL_VALUE_ISSIGNALING_NAN (TREE_REAL_CST (arg1))))
return NULL_TREE;