Commit 1582c677 by Paolo Carlini Committed by Paolo Carlini

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
parent 361618ec
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
......
/* 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, ...@@ -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,
......
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
......
...@@ -10,3 +10,6 @@ int main() ...@@ -10,3 +10,6 @@ int main()
{ {
X<::A> x; X<::A> x;
} }
int a;
bool b = 0<::a;
...@@ -31,5 +31,5 @@ public: ...@@ -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
} }
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
......
/* 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) ...@@ -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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment