]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR middle-end/79396 (ICE (verify_flow_info failed) with -fnon-call-excep...
authorJakub Jelinek <jakub@redhat.com>
Tue, 30 May 2017 08:05:47 +0000 (10:05 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 30 May 2017 08:05:47 +0000 (10:05 +0200)
Backported from mainline
2017-02-25  Jakub Jelinek  <jakub@redhat.com>

PR middle-end/79396
* tree-eh.c (operation_could_trap_p, stmt_could_throw_1_p): Handle
FMA_EXPR like tcc_binary or tcc_unary.

* g++.dg/opt/pr79396.C: New test.

From-SVN: r248651

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/opt/pr79396.C [new file with mode: 0644]
gcc/tree-eh.c

index 962e7398c53ca34d68167aafd17f8db67ea000c1..29359b73d0d709dcb0f70fe1035553bbe666a86b 100644 (file)
@@ -1,6 +1,12 @@
 2017-05-30  Jakub Jelinek  <jakub@redhat.com>
 
        Backported from mainline
+       2017-02-25  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/79396
+       * tree-eh.c (operation_could_trap_p, stmt_could_throw_1_p): Handle
+       FMA_EXPR like tcc_binary or tcc_unary.
+
        2017-02-21  Jakub Jelinek  <jakub@redhat.com>
 
        PR target/79570
index 910ffe162e5a7985bad5ff98fb5bb4b7ea09ceae..06771821c0d3505961df9b2d06f65de677a544ae 100644 (file)
@@ -1,6 +1,11 @@
 2017-05-30  Jakub Jelinek  <jakub@redhat.com>
 
        Backported from mainline
+       2017-02-25  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/79396
+       * g++.dg/opt/pr79396.C: New test.
+
        2017-02-22  Jakub Jelinek  <jakub@redhat.com>
 
        PR c++/79664
diff --git a/gcc/testsuite/g++.dg/opt/pr79396.C b/gcc/testsuite/g++.dg/opt/pr79396.C
new file mode 100644 (file)
index 0000000..328c271
--- /dev/null
@@ -0,0 +1,13 @@
+// PR middle-end/79396
+// { dg-do compile }
+// { dg-options "-fnon-call-exceptions -O2" }
+// { dg-additional-options "-mfma" { target i?86-*-* x86_64-*-* } }
+
+struct A { A (); ~A (); };
+
+float
+foo (float x)
+{
+  A a;
+  return __builtin_pow (x, 2) + 2;
+}
index a111e9d93ae654a153ede69ac58d3a11838ef753..52597c4540f543c40c39c6d5936bbb979cfa5156 100644 (file)
@@ -2543,7 +2543,8 @@ operation_could_trap_p (enum tree_code op, bool fp_operation, bool honor_trapv,
 
   if (TREE_CODE_CLASS (op) != tcc_comparison
       && TREE_CODE_CLASS (op) != tcc_unary
-      && TREE_CODE_CLASS (op) != tcc_binary)
+      && TREE_CODE_CLASS (op) != tcc_binary
+      && op != FMA_EXPR)
     return false;
 
   return operation_could_trap_helper_p (op, fp_operation, honor_trapv,
@@ -2768,7 +2769,8 @@ stmt_could_throw_1_p (gimple stmt)
 
   if (TREE_CODE_CLASS (code) == tcc_comparison
       || TREE_CODE_CLASS (code) == tcc_unary
-      || TREE_CODE_CLASS (code) == tcc_binary)
+      || TREE_CODE_CLASS (code) == tcc_binary
+      || code == FMA_EXPR)
     {
       if (is_gimple_assign (stmt)
          && TREE_CODE_CLASS (code) == tcc_comparison)