From: Jason Merrill Date: Wed, 15 Oct 2014 16:46:35 +0000 (-0400) Subject: re PR c++/63455 (decltype of statement expression internal compiler error: in cp_par... X-Git-Tag: releases/gcc-4.8.4~165 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ad45b027b2d6fc5937cd1b39df22df1e5642530f;p=thirdparty%2Fgcc.git re PR c++/63455 (decltype of statement expression internal compiler error: in cp_parser_abort_tentative_parse, at cp/parser.c:25062) PR c++/63455 Revert: * parser.c (cp_parser_abort_tentative_parse): Make sure we haven't committed to this tentative parse. From-SVN: r216277 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 643b5cb74224..917e5cfdd20c 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,10 @@ 2014-10-15 Jason Merrill + PR c++/63455 + Revert: + * parser.c (cp_parser_abort_tentative_parse): Make sure we haven't + committed to this tentative parse. + PR c++/63415 * pt.c (value_dependent_expression_p) [CONSTRUCTOR]: Check the type. (iterative_hash_template_arg): Likewise. diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index affe2df0c471..a84bc59cef22 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -23779,8 +23779,6 @@ cp_parser_commit_to_tentative_parse (cp_parser* parser) static void cp_parser_abort_tentative_parse (cp_parser* parser) { - gcc_assert (parser->context->status != CP_PARSER_STATUS_KIND_COMMITTED - || errorcount > 0); cp_parser_simulate_error (parser); /* Now, pretend that we want to see if the construct was successfully parsed. */ diff --git a/gcc/testsuite/g++.dg/ext/stmtexpr16.C b/gcc/testsuite/g++.dg/ext/stmtexpr16.C new file mode 100644 index 000000000000..ddce40c050dc --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/stmtexpr16.C @@ -0,0 +1,10 @@ +// PR c++/63455 +// { dg-options "-std=gnu++11" } + +int main() +{ + int x = 0; + + // without '+0', gcc 4.6 gives a different error (no ICE though) + decltype(({ int y = x; y; })+0) v1 = 0; +}