From: Jakub Jelinek Date: Tue, 19 Jul 2016 09:14:03 +0000 (+0200) Subject: backport: re PR middle-end/71758 (ICE in verify_gimple_in_cfg, at tree-cfg.c:5212) X-Git-Tag: releases/gcc-4.9.4~66 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=98ad7c9ce056030bddce4021dc31315f0d3f2118;p=thirdparty%2Fgcc.git backport: re PR middle-end/71758 (ICE in verify_gimple_in_cfg, at tree-cfg.c:5212) Backported from mainline 2016-07-11 Jakub Jelinek PR middle-end/71758 * omp-low.c (expand_omp_target): Gimplify device. * c-c++-common/gomp/pr71758.c: New test. * gfortran.dg/gomp/pr71758.f90: New test. From-SVN: r238463 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d87ee9b2fad0..e3e394ea4a7d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2016-07-19 Jakub Jelinek + + Backported from mainline + 2016-07-11 Jakub Jelinek + + PR middle-end/71758 + * omp-low.c (expand_omp_target): Gimplify device. + 2016-07-18 Martin Liska Backported from mainline diff --git a/gcc/omp-low.c b/gcc/omp-low.c index 8b27a4570bdf..6d1218d3f0a6 100644 --- a/gcc/omp-low.c +++ b/gcc/omp-low.c @@ -8234,9 +8234,15 @@ expand_omp_target (struct omp_region *region) make_edge (else_bb, new_bb, EDGE_FALLTHRU); device = tmp_var; + gsi = gsi_last_bb (new_bb); + } + else + { + gsi = gsi_last_bb (new_bb); + device = force_gimple_operand_gsi (&gsi, device, true, NULL_TREE, + true, GSI_SAME_STMT); } - gsi = gsi_last_bb (new_bb); t = gimple_omp_target_data_arg (entry_stmt); if (t == NULL) { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7619157ab8c8..d61db44e0a71 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,12 @@ +2016-07-19 Jakub Jelinek + + Backported from mainline + 2016-07-11 Jakub Jelinek + + PR middle-end/71758 + * c-c++-common/gomp/pr71758.c: New test. + * gfortran.dg/gomp/pr71758.f90: New test. + 2016-07-15 Jerry DeLisle Backport from trunk: diff --git a/gcc/testsuite/c-c++-common/gomp/pr71758.c b/gcc/testsuite/c-c++-common/gomp/pr71758.c new file mode 100644 index 000000000000..d3c86972ef56 --- /dev/null +++ b/gcc/testsuite/c-c++-common/gomp/pr71758.c @@ -0,0 +1,10 @@ +/* PR middle-end/71758 */ + +void +foo (int *p) +{ + long long i = 0; + #pragma omp target device (i) + ; + #pragma omp target update device (i) to (p[0]) +} diff --git a/gcc/testsuite/gfortran.dg/gomp/pr71758.f90 b/gcc/testsuite/gfortran.dg/gomp/pr71758.f90 new file mode 100644 index 000000000000..47215ba5cd92 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/gomp/pr71758.f90 @@ -0,0 +1,10 @@ +! PR middle-end/71758 + +subroutine pr71758 (p) + integer(8) :: i + integer :: p(20) + i = 0 + !$omp target device(i) + !$omp end target + !$omp target update to(p(1:1)) device(i) +end subroutine