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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@194909
138bc75d-0d04-0410-961f-
82ee72b054a4
+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>
PR c++/55419
/* C++ Parser.
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>.
This file is part of GCC.
return error_mark_node;
}
/* Otherwise, emit an error about the invalid digraph, but continue
- parsing because we got our argument list. In C++11 do not emit
- any error, per 2.5/3. */
- if (cxx_dialect < cxx0x
- && permerror (next_token->location,
- "%<<::%> cannot begin a template-argument list"))
+ parsing because we got our argument list. */
+ if (permerror (next_token->location,
+ "%<<::%> cannot begin a template-argument list"))
{
static bool hint = false;
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>
PR tree-optimization/55862
{
X<::A> x;
}
+
+int a;
+bool b = 0<::a;
};
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>
PR bootstrap/50177
/* CPP Library - lexical analysis.
- Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010,
- 2011, 2012 Free Software Foundation, Inc.
+ Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2007-2013
+ Free Software Foundation, Inc.
Contributed by Per Bothner, 1994-95.
Based on CCCP program by Paul Rubin, June 1986
Adapted to ANSI C, Richard Stallman, Jan 1987
{
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++;
result->flags |= DIGRAPH;
result->type = CPP_OPEN_SQUARE;