Commit 2b536806 by Douglas Gregor Committed by Doug Gregor

re PR c++/33839 (ICE with decltype)

2007-10-26  Douglas Gregor  <doug.gregor@gmail.com>

	PR c++/33839
	* parser.c (cp_parser_decltype): Return ERROR_MARK_NODE if we
	don't see the leading '('. Only lookup names if we get an
	IDENTIFIER_NODE.

2007-10-26  Douglas Gregor  <doug.gregor@gmail.com>

	* g++.dg/cpp0x/pr33839.C: New.

From-SVN: r129656
parent 3f28024c
2007-10-26 Douglas Gregor <doug.gregor@gmail.com>
PR c++/33839
* parser.c (cp_parser_decltype): Return ERROR_MARK_NODE if we
don't see the leading '('. Only lookup names if we get an
IDENTIFIER_NODE.
2007-10-26 Jakub Jelinek <jakub@redhat.com>
PR c++/33744
......
......@@ -8464,7 +8464,8 @@ cp_parser_decltype (cp_parser *parser)
++skip_evaluation;
/* Parse the opening `('. */
cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
return error_mark_node;
/* First, try parsing an id-expression. */
cp_parser_parse_tentatively (parser);
......@@ -8482,14 +8483,15 @@ cp_parser_decltype (cp_parser *parser)
cp_id_kind idk;
const char *error_msg;
/* Lookup the name we got back from the id-expression. */
expr = cp_parser_lookup_name (parser, expr,
none_type,
/*is_template=*/false,
/*is_namespace=*/false,
/*check_dependency=*/true,
/*ambiguous_decls=*/NULL);
if (TREE_CODE (expr) == IDENTIFIER_NODE)
/* Lookup the name we got back from the id-expression. */
expr = cp_parser_lookup_name (parser, expr,
none_type,
/*is_template=*/false,
/*is_namespace=*/false,
/*check_dependency=*/true,
/*ambiguous_decls=*/NULL);
if (expr
&& expr != error_mark_node
&& TREE_CODE (expr) != TEMPLATE_ID_EXPR
......
2007-10-26 Douglas Gregor <doug.gregor@gmail.com>
* g++.dg/cpp0x/pr33839.C: New.
2007-10-26 Jakub Jelinek <jakub@redhat.com>
PR c++/33744
// { dg-options -std=c++0x }
template<int> struct A;
void foo()
{
__decltype A<0>; // { dg-error "invalid declarator" }
__decltype (A<0>); // { dg-error "must be an expression" }
}
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