From e6a3ce8a794d6946a36f08abc7df2c0decb6d467 Mon Sep 17 00:00:00 2001 From: jakub Date: Mon, 26 Feb 2018 19:51:05 +0000 Subject: [PATCH] PR c++/84557 * parser.c (cp_parser_omp_var_list_no_open): Only call cp_parser_lookup_name_simple on names satisfying identifier_p. (cp_parser_oacc_routine): Likewise. * g++.dg/gomp/pr84557.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258011 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/cp/ChangeLog | 7 +++++++ gcc/cp/parser.c | 9 +++++++-- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/gomp/pr84557.C | 14 ++++++++++++++ 4 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/gomp/pr84557.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index bf995f0e8ef..94f684b041b 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2018-02-26 Jakub Jelinek + + PR c++/84557 + * parser.c (cp_parser_omp_var_list_no_open): Only call + cp_parser_lookup_name_simple on names satisfying identifier_p. + (cp_parser_oacc_routine): Likewise. + 2018-02-26 Jason Merrill PR c++/84551 - ICE with concepts and -g. diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index f305c9c7eba..bcee1214c2f 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -31342,7 +31342,10 @@ cp_parser_omp_var_list_no_open (cp_parser *parser, enum omp_clause_code kind, if (name == error_mark_node) goto skip_comma; - decl = cp_parser_lookup_name_simple (parser, name, token->location); + if (identifier_p (name)) + decl = cp_parser_lookup_name_simple (parser, name, token->location); + else + decl = name; if (decl == error_mark_node) cp_parser_name_lookup_error (parser, name, decl, NLE_NULL, token->location); @@ -37846,7 +37849,9 @@ cp_parser_oacc_routine (cp_parser *parser, cp_token *pragma_tok, /*template_p=*/NULL, /*declarator_p=*/false, /*optional_p=*/false); - tree decl = cp_parser_lookup_name_simple (parser, name, name_loc); + tree decl = (identifier_p (name) + ? cp_parser_lookup_name_simple (parser, name, name_loc) + : name); if (name != error_mark_node && decl == error_mark_node) cp_parser_name_lookup_error (parser, name, decl, NLE_NULL, name_loc); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6fd236cd1af..9ebfd3edd93 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-02-26 Jakub Jelinek + + PR c++/84557 + * g++.dg/gomp/pr84557.C: New test. + 2018-02-26 Marek Polacek PR c++/84325 diff --git a/gcc/testsuite/g++.dg/gomp/pr84557.C b/gcc/testsuite/g++.dg/gomp/pr84557.C new file mode 100644 index 00000000000..cd215901aef --- /dev/null +++ b/gcc/testsuite/g++.dg/gomp/pr84557.C @@ -0,0 +1,14 @@ +// PR c++/84557 +// { dg-do compile } + +template struct A {}; +template struct B {}; + +void +foo () +{ + #pragma omp parallel firstprivate (A) // { dg-error "is not a variable in clause" } + ; + #pragma omp parallel firstprivate (B<0>) // { dg-error "is not a variable in clause" } + ; +} -- 2.11.4.GIT