From: Jakub Jelinek Date: Wed, 5 Feb 2014 15:32:01 +0000 (+0100) Subject: re PR c++/58703 (ICE with invalid types in OpenMP declare reduction clause) X-Git-Tag: releases/gcc-4.9.0~1081 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=54e19c00d9a901e0c55f812c2f7f98392976f5b2;p=thirdparty%2Fgcc.git re PR c++/58703 (ICE with invalid types in OpenMP declare reduction clause) PR c++/58703 * parser.c (cp_parser_omp_declare_reduction): Save and free declarator_obstack. * c-c++-common/gomp/pr58703.c: New test. From-SVN: r207511 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 5214d9a91ac4..60651c59f646 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2014-02-05 Jakub Jelinek + + PR c++/58703 + * parser.c (cp_parser_omp_declare_reduction): Save and free + declarator_obstack. + 2014-02-03 Marc Glisse PR c++/53017 diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 57001c65c370..392acf277c56 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -30623,6 +30623,10 @@ cp_parser_omp_declare_reduction (cp_parser *parser, cp_token *pragma_tok, cp_token *first_token; cp_token_cache *cp; int errs; + void *p; + + /* Get the high-water mark for the DECLARATOR_OBSTACK. */ + p = obstack_alloc (&declarator_obstack, 0); if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN)) goto fail; @@ -30731,7 +30735,7 @@ cp_parser_omp_declare_reduction (cp_parser *parser, cp_token *pragma_tok, { fail: cp_parser_skip_to_pragma_eol (parser, pragma_tok); - return; + goto done; } first_token = cp_lexer_peek_token (parser->lexer); @@ -30835,6 +30839,10 @@ cp_parser_omp_declare_reduction (cp_parser *parser, cp_token *pragma_tok, } cp_parser_require_pragma_eol (parser, pragma_tok); + + done: + /* Free any declarators allocated. */ + obstack_free (&declarator_obstack, p); } /* OpenMP 4.0 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 31f27d8c593e..00aca0ae32ca 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-02-05 Jakub Jelinek + + PR c++/58703 + * c-c++-common/gomp/pr58703.c: New test. + 2014-02-05 Richard Biener PR testsuite/60076 diff --git a/gcc/testsuite/c-c++-common/gomp/pr58703.c b/gcc/testsuite/c-c++-common/gomp/pr58703.c new file mode 100644 index 000000000000..6a3a5f505069 --- /dev/null +++ b/gcc/testsuite/c-c++-common/gomp/pr58703.c @@ -0,0 +1,6 @@ +/* PR c++/58703 */ +/* { dg-do compile } */ +/* { dg-options "-fopenmp" } */ + +#pragma omp declare reduction (+ : char[] : omp_out += omp_in) /* { dg-error "function or array type" } */ +#pragma omp declare reduction (+ : char() : omp_out += omp_in) /* { dg-error "function or array type" } */