]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR target/71910 (ICE on valid OpenMP code)
authorJakub Jelinek <jakub@redhat.com>
Tue, 30 May 2017 07:15:49 +0000 (09:15 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 30 May 2017 07:15:49 +0000 (09:15 +0200)
Backported from mainline
2016-08-16  Jakub Jelinek  <jakub@redhat.com>

PR target/71910
* tree-cfg.c (execute_fixup_cfg): Add node variable, use it.  Before inlining,
add cgraph edge for the added __builtin_unreachable call.

* g++.dg/gomp/pr71910.C: New test.

From-SVN: r248598

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/gomp/pr71910.C [new file with mode: 0644]
gcc/tree-cfg.c

index c6c4f53f734f8017fe38e514470711d193dba312..42f03d60e4e59c9ba823fb5a381d4786fc88a7e2 100644 (file)
@@ -1,6 +1,12 @@
 2017-05-30  Jakub Jelinek  <jakub@redhat.com>
 
        Backported from mainline
+       2016-08-16  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/71910
+       * tree-cfg.c (execute_fixup_cfg): Add node variable, use it.  Before inlining,
+       add cgraph edge for the added __builtin_unreachable call.
+
        2016-08-15  Martin Liska  <mliska@suse.cz>
                    Jakub Jelinek  <jakub@redhat.com>
 
index 2cfd28cf1e4ccafc66991e972035966d2115cf5c..213ce7f0280dede96a4a5270cbbd373756236ef5 100644 (file)
@@ -1,6 +1,11 @@
 2017-05-30  Jakub Jelinek  <jakub@redhat.com>
 
        Backported from mainline
+       2016-08-16  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/71910
+       * g++.dg/gomp/pr71910.C: New test.
+
        2016-08-15  Jakub Jelinek  <jakub@redhat.com>
 
        PR tree-optimization/72824
diff --git a/gcc/testsuite/g++.dg/gomp/pr71910.C b/gcc/testsuite/g++.dg/gomp/pr71910.C
new file mode 100644 (file)
index 0000000..0063be8
--- /dev/null
@@ -0,0 +1,13 @@
+// PR target/71910
+// { dg-do compile }
+// { dg-additional-options "-O2" }
+
+#include <vector>
+
+int
+main ()
+{
+  std::vector<double> vec(10);
+#pragma omp parallel
+  __builtin_exit (0);
+}
index 76654775418baf0148da175fd50404e189cc137d..2a76c41ebf91d2ea1851c6309f600a6105c39e0e 100644 (file)
@@ -8619,16 +8619,14 @@ execute_fixup_cfg (void)
   gcov_type count_scale;
   edge e;
   edge_iterator ei;
+  cgraph_node *node = cgraph_node::get (current_function_decl);
 
   count_scale
-      = GCOV_COMPUTE_SCALE (cgraph_node::get (current_function_decl)->count,
-                           ENTRY_BLOCK_PTR_FOR_FN (cfun)->count);
+    = GCOV_COMPUTE_SCALE (node->count, ENTRY_BLOCK_PTR_FOR_FN (cfun)->count);
 
-  ENTRY_BLOCK_PTR_FOR_FN (cfun)->count =
-                           cgraph_node::get (current_function_decl)->count;
-  EXIT_BLOCK_PTR_FOR_FN (cfun)->count =
-                           apply_scale (EXIT_BLOCK_PTR_FOR_FN (cfun)->count,
-                                       count_scale);
+  ENTRY_BLOCK_PTR_FOR_FN (cfun)->count = node->count;
+  EXIT_BLOCK_PTR_FOR_FN (cfun)->count
+    = apply_scale (EXIT_BLOCK_PTR_FOR_FN (cfun)->count, count_scale);
 
   FOR_EACH_EDGE (e, ei, ENTRY_BLOCK_PTR_FOR_FN (cfun)->succs)
     e->count = apply_scale (e->count, count_scale);
@@ -8721,10 +8719,19 @@ execute_fixup_cfg (void)
            {
              if (stmt && is_gimple_call (stmt))
                gimple_call_set_ctrl_altering (stmt, false);
-             stmt = gimple_build_call
-                 (builtin_decl_implicit (BUILT_IN_UNREACHABLE), 0);
+             tree fndecl = builtin_decl_implicit (BUILT_IN_UNREACHABLE);
+             stmt = gimple_build_call (fndecl, 0);
              gimple_stmt_iterator gsi = gsi_last_bb (bb);
              gsi_insert_after (&gsi, stmt, GSI_NEW_STMT);
+             if (!cfun->after_inlining)
+               {
+                 gcall *call_stmt = dyn_cast <gcall *> (stmt);
+                 int freq
+                   = compute_call_stmt_bb_frequency (current_function_decl,
+                                                     bb);
+                 node->create_edge (cgraph_node::get_create (fndecl),
+                                    call_stmt, bb->count, freq);
+               }
            }
        }
     }