re PR debug/78363 (ICE in in force_type_die, at dwarf2out.c:24864)
authorRichard Biener <rguenther@suse.de>
Wed, 25 Jan 2017 09:48:10 +0000 (09:48 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Wed, 25 Jan 2017 09:48:10 +0000 (09:48 +0000)
2017-01-25  Richard Biener  <rguenther@suse.de>

PR debug/78363
* omp-expand.c: Include debug.h.
(expand_omp_taskreg): Make sure to generate early debug before
outlining anything from a function.
(expand_omp_target): Likewise.
(grid_expand_target_grid_body): Likewise.

* g++.dg/gomp/pr78363-1.C: New testcase.
* g++.dg/gomp/pr78363-2.C: Likewise.
* g++.dg/gomp/pr78363-3.C: Likewise.

From-SVN: r244892

gcc/ChangeLog
gcc/omp-expand.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/gomp/pr78363-1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/gomp/pr78363-2.C [new file with mode: 0644]
gcc/testsuite/g++.dg/gomp/pr78363-3.C [new file with mode: 0644]

index 6c41705f50c7cbccf90562deb2e0e3e5e677d335..2ca39f06c2695b3cd2aa257b39bde26672f64c15 100644 (file)
@@ -1,3 +1,12 @@
+2017-01-25  Richard Biener  <rguenther@suse.de>
+
+       PR debug/78363
+       * omp-expand.c: Include debug.h.
+       (expand_omp_taskreg): Make sure to generate early debug before
+       outlining anything from a function.
+       (expand_omp_target): Likewise.
+       (grid_expand_target_grid_body): Likewise.
+
 2017-01-25  Maxim Ostapenko  <m.ostapenko@samsung.com>
 
        PR lto/79061
index 1de3cd41a649cf71b157995180a569910edbec2d..327c2e73d915ae3b6e7555310bb9e3c2d63cccb7 100644 (file)
@@ -57,6 +57,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "gomp-constants.h"
 #include "gimple-pretty-print.h"
 #include "hsa-common.h"
+#include "debug.h"
 
 
 /* OMP region information.  Every parallel and workshare
@@ -1305,6 +1306,11 @@ expand_omp_taskreg (struct omp_region *region)
       else
        block = gimple_block (entry_stmt);
 
+      /* Make sure to generate early debug for the function before
+         outlining anything.  */
+      if (! gimple_in_ssa_p (cfun))
+       (*debug_hooks->early_global_decl) (cfun->decl);
+
       new_bb = move_sese_region_to_fn (child_cfun, entry_bb, exit_bb, block);
       if (exit_bb)
        single_succ_edge (new_bb)->flags = EDGE_FALLTHRU;
@@ -7016,6 +7022,11 @@ expand_omp_target (struct omp_region *region)
          gsi_remove (&gsi, true);
        }
 
+      /* Make sure to generate early debug for the function before
+         outlining anything.  */
+      if (! gimple_in_ssa_p (cfun))
+       (*debug_hooks->early_global_decl) (cfun->decl);
+
       /* Move the offloading region into CHILD_CFUN.  */
 
       block = gimple_block (entry_stmt);
@@ -7589,6 +7600,11 @@ grid_expand_target_grid_body (struct omp_region *target)
   init_tree_ssa (cfun);
   pop_cfun ();
 
+  /* Make sure to generate early debug for the function before
+     outlining anything.  */
+  if (! gimple_in_ssa_p (cfun))
+    (*debug_hooks->early_global_decl) (cfun->decl);
+
   tree old_parm_decl = DECL_ARGUMENTS (kern_fndecl);
   gcc_assert (!DECL_CHAIN (old_parm_decl));
   tree new_parm_decl = copy_node (DECL_ARGUMENTS (kern_fndecl));
index d9921e6a4c632649269f19238d7e1e1303cbabe2..65cae6f383742744766d5218b21d3fc51ef77a51 100644 (file)
@@ -1,3 +1,10 @@
+2017-01-25  Richard Biener  <rguenther@suse.de>
+
+       PR debug/78363
+       * g++.dg/gomp/pr78363-1.C: New testcase.
+       * g++.dg/gomp/pr78363-2.C: Likewise.
+       * g++.dg/gomp/pr78363-3.C: Likewise.
+
 2016-01-25  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
 
        * gcc.dg/lto/pr54709_0.c: Require 'shared' effective target.
diff --git a/gcc/testsuite/g++.dg/gomp/pr78363-1.C b/gcc/testsuite/g++.dg/gomp/pr78363-1.C
new file mode 100644 (file)
index 0000000..7d89d0c
--- /dev/null
@@ -0,0 +1,14 @@
+// { dg-do compile }
+// { dg-require-effective-target c++11 }
+// { dg-additional-options "-g" }
+
+int main()
+{
+  int n = 0;
+
+#pragma omp parallel for reduction (+: n)
+  for (int i = [](){ return 3; }(); i < 10; ++i)
+    n++;
+
+  return n;
+}
diff --git a/gcc/testsuite/g++.dg/gomp/pr78363-2.C b/gcc/testsuite/g++.dg/gomp/pr78363-2.C
new file mode 100644 (file)
index 0000000..c04e099
--- /dev/null
@@ -0,0 +1,15 @@
+// { dg-do compile }
+// { dg-require-effective-target c++11 }
+// { dg-additional-options "-g" }
+
+int main()
+{
+  int n = 0;
+#pragma omp target map(tofrom:n)
+#pragma omp for reduction (+: n)
+  for (int i = [](){ return 3; }(); i < 10; ++i)
+    n++;
+  if (n != 7)
+    __builtin_abort ();
+  return 0;
+}
diff --git a/gcc/testsuite/g++.dg/gomp/pr78363-3.C b/gcc/testsuite/g++.dg/gomp/pr78363-3.C
new file mode 100644 (file)
index 0000000..265b937
--- /dev/null
@@ -0,0 +1,14 @@
+// { dg-do compile }
+// { dg-require-effective-target c++11 }
+// { dg-additional-options "-g" }
+
+int main()
+{
+  int n = 0;
+#pragma omp task shared (n)
+  for (int i = [](){ return 3; }(); i < 10; ++i)
+    n = i;
+#pragma omp taskwait
+  if (n != 7)
+    __builtin_abort ();
+}