PR c++/54526 (again)

/libcpp
2013-01-04  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/54526 (again)
	* lex.c (_cpp_lex_direct): In C++11 mode, implement 2.5 p3, bullet 2.

/gcc/cp
2013-01-04  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/54526 (again)
	* parser.c (cp_parser_template_id): Revert core of previous change
	(keep adjusted inform message).

/gcc/testsuite
2013-01-04  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/54526 (again)
	* g++.dg/cpp0x/parse2.C: Extend.
	* g++.old-deja/g++.other/crash28.C: Adjust.

From-SVN: r194909
This commit is contained in:
Paolo Carlini 2013-01-04 15:30:24 +00:00 committed by Paolo Carlini
parent 361618ec53
commit 1582c67762
7 changed files with 38 additions and 9 deletions

View File

@ -1,3 +1,9 @@
2013-01-04 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/54526 (again)
* parser.c (cp_parser_template_id): Revert core of previous change
(keep adjusted inform message).
2013-01-03 Jason Merrill <jason@redhat.com> 2013-01-03 Jason Merrill <jason@redhat.com>
PR c++/55419 PR c++/55419

View File

@ -1,6 +1,6 @@
/* C++ Parser. /* C++ Parser.
Copyright (C) 2000, 2001, 2002, 2003, 2004, Copyright (C) 2000, 2001, 2002, 2003, 2004,
2005, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. 2005, 2007-2013 Free Software Foundation, Inc.
Written by Mark Mitchell <mark@codesourcery.com>. Written by Mark Mitchell <mark@codesourcery.com>.
This file is part of GCC. This file is part of GCC.
@ -12655,11 +12655,9 @@ cp_parser_template_id (cp_parser *parser,
return error_mark_node; return error_mark_node;
} }
/* Otherwise, emit an error about the invalid digraph, but continue /* Otherwise, emit an error about the invalid digraph, but continue
parsing because we got our argument list. In C++11 do not emit parsing because we got our argument list. */
any error, per 2.5/3. */ if (permerror (next_token->location,
if (cxx_dialect < cxx0x "%<<::%> cannot begin a template-argument list"))
&& permerror (next_token->location,
"%<<::%> cannot begin a template-argument list"))
{ {
static bool hint = false; static bool hint = false;
inform (next_token->location, inform (next_token->location,

View File

@ -1,3 +1,9 @@
2013-01-04 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/54526 (again)
* g++.dg/cpp0x/parse2.C: Extend.
* g++.old-deja/g++.other/crash28.C: Adjust.
2013-01-04 Richard Biener <rguenther@suse.de> 2013-01-04 Richard Biener <rguenther@suse.de>
PR tree-optimization/55862 PR tree-optimization/55862

View File

@ -10,3 +10,6 @@ int main()
{ {
X<::A> x; X<::A> x;
} }
int a;
bool b = 0<::a;

View File

@ -31,5 +31,5 @@ public:
}; };
void foo::x() throw(bar) void foo::x() throw(bar)
{ {
if (!b) throw bar (static_cast<::N::X*>(this)); // { dg-error "lambda expressions|expected" } parse error if (!b) throw bar (static_cast<::N::X*>(this)); // { dg-error "lambda expressions|expected|invalid" } parse error
} }

View File

@ -1,3 +1,8 @@
2013-01-04 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/54526 (again)
* lex.c (_cpp_lex_direct): In C++11 mode, implement 2.5 p3, bullet 2.
2013-01-03 Marc Glisse <marc.glisse@inria.fr> 2013-01-03 Marc Glisse <marc.glisse@inria.fr>
PR bootstrap/50177 PR bootstrap/50177

View File

@ -1,6 +1,6 @@
/* CPP Library - lexical analysis. /* CPP Library - lexical analysis.
Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2007-2013
2011, 2012 Free Software Foundation, Inc. Free Software Foundation, Inc.
Contributed by Per Bothner, 1994-95. Contributed by Per Bothner, 1994-95.
Based on CCCP program by Paul Rubin, June 1986 Based on CCCP program by Paul Rubin, June 1986
Adapted to ANSI C, Richard Stallman, Jan 1987 Adapted to ANSI C, Richard Stallman, Jan 1987
@ -2290,6 +2290,17 @@ _cpp_lex_direct (cpp_reader *pfile)
{ {
if (*buffer->cur == ':') if (*buffer->cur == ':')
{ {
/* C++11 [2.5/3 lex.pptoken], "Otherwise, if the next
three characters are <:: and the subsequent character
is neither : nor >, the < is treated as a preprocessor
token by itself". */
if (CPP_OPTION (pfile, cplusplus)
&& (CPP_OPTION (pfile, lang) == CLK_CXX11
|| CPP_OPTION (pfile, lang) == CLK_GNUCXX11)
&& buffer->cur[1] == ':'
&& buffer->cur[2] != ':' && buffer->cur[2] != '>')
break;
buffer->cur++; buffer->cur++;
result->flags |= DIGRAPH; result->flags |= DIGRAPH;
result->type = CPP_OPEN_SQUARE; result->type = CPP_OPEN_SQUARE;