From: Jakub Jelinek Date: Tue, 30 May 2017 07:58:55 +0000 (+0200) Subject: backport: re PR c++/79512 (ICE: Segfault in gimple_build_call_1, at gimple.c:218) X-Git-Tag: releases/gcc-5.5.0~269 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=78773fc61156cf85911e9526e04d708d7876772a;p=thirdparty%2Fgcc.git backport: re PR c++/79512 (ICE: Segfault in gimple_build_call_1, at gimple.c:218) Backported from mainline 2017-02-16 Jakub Jelinek PR c++/79512 * c-parser.c (c_parser_omp_target): For -fopenmp-simd ignore #pragma omp target even when not followed by identifier. * parser.c (cp_parser_omp_target): For -fopenmp-simd ignore #pragma omp target even when not followed by identifier. * c-c++-common/gomp/pr79512.c: New test. From-SVN: r248643 --- diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog index caf2a72a8d0c..55d8225bf03b 100644 --- a/gcc/c/ChangeLog +++ b/gcc/c/ChangeLog @@ -1,6 +1,12 @@ 2017-05-30 Jakub Jelinek Backported from mainline + 2017-02-16 Jakub Jelinek + + PR c++/79512 + * c-parser.c (c_parser_omp_target): For -fopenmp-simd + ignore #pragma omp target even when not followed by identifier. + 2016-12-21 Jakub Jelinek PR c/77767 diff --git a/gcc/c/c-parser.c b/gcc/c/c-parser.c index c5378fec81ee..002e6a1bb7b0 100644 --- a/gcc/c/c-parser.c +++ b/gcc/c/c-parser.c @@ -13980,6 +13980,11 @@ c_parser_omp_target (c_parser *parser, enum pragma_context context) } } + if (!flag_openmp) /* flag_openmp_simd */ + { + c_parser_skip_to_pragma_eol (parser, false); + return false; + } tree stmt = make_node (OMP_TARGET); TREE_TYPE (stmt) = void_type_node; diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index fcc94ab31615..28bf37995023 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,6 +1,12 @@ 2017-05-30 Jakub Jelinek Backported from mainline + 2017-02-16 Jakub Jelinek + + PR c++/79512 + * parser.c (cp_parser_omp_target): For -fopenmp-simd + ignore #pragma omp target even when not followed by identifier. + 2017-01-11 Jakub Jelinek PR c++/78341 diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 82b970412402..4239fee3a584 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -31566,6 +31566,11 @@ cp_parser_omp_target (cp_parser *parser, cp_token *pragma_tok, } } + if (!flag_openmp) /* flag_openmp_simd */ + { + cp_parser_skip_to_pragma_eol (parser, pragma_tok); + return false; + } tree stmt = make_node (OMP_TARGET); TREE_TYPE (stmt) = void_type_node; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 59ad05e71a6b..31c5c72c522f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,6 +1,11 @@ 2017-05-30 Jakub Jelinek Backported from mainline + 2017-02-16 Jakub Jelinek + + PR c++/79512 + * c-c++-common/gomp/pr79512.c: New test. + 2017-02-10 Jakub Jelinek PR tree-optimization/79411 diff --git a/gcc/testsuite/c-c++-common/gomp/pr79512.c b/gcc/testsuite/c-c++-common/gomp/pr79512.c new file mode 100644 index 000000000000..19ddfaffc36c --- /dev/null +++ b/gcc/testsuite/c-c++-common/gomp/pr79512.c @@ -0,0 +1,14 @@ +/* PR c++/79512 */ +/* { dg-options "-fopenmp-simd" } */ + +void +foo (void) +{ + #pragma omp target + #pragma omp teams + { + int i; + for (i = 0; i < 10; i++) + ; + } +}