From d966b2749cc7addb143788e51b2e3e6ad43fb203 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Tue, 9 Jul 2013 17:52:40 -0400 Subject: [PATCH] re PR c++/57471 (Bizarre error for template parameter pack) PR c++/57471 * parser.c (cp_parser_sizeof_pack): Clear parser scopes. From-SVN: r200852 --- gcc/cp/ChangeLog | 3 +++ gcc/cp/parser.c | 4 ++++ gcc/testsuite/g++.dg/cpp0x/variadic-sizeof2.C | 14 ++++++++++++++ 3 files changed, 21 insertions(+) create mode 100644 gcc/testsuite/g++.dg/cpp0x/variadic-sizeof2.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 88ba7696732..1bc0b6f88c6 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2013-07-09 Jason Merrill + PR c++/57471 + * parser.c (cp_parser_sizeof_pack): Clear parser scopes. + PR c++/57658 * semantics.c (finish_id_expression): Return the id for an unevaluated outer variable. diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 614cf4364b8..4b683bfbace 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -23136,6 +23136,10 @@ cp_parser_sizeof_pack (cp_parser *parser) cp_token *token = cp_lexer_peek_token (parser->lexer); tree name = cp_parser_identifier (parser); + /* The name is not qualified. */ + parser->scope = NULL_TREE; + parser->qualifying_scope = NULL_TREE; + parser->object_scope = NULL_TREE; tree expr = cp_parser_lookup_name_simple (parser, name, token->location); if (expr == error_mark_node) cp_parser_name_lookup_error (parser, name, expr, NLE_NULL, diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic-sizeof2.C b/gcc/testsuite/g++.dg/cpp0x/variadic-sizeof2.C new file mode 100644 index 00000000000..dfc245d1621 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/variadic-sizeof2.C @@ -0,0 +1,14 @@ +// PR c++/57471 +// { dg-require-effective-target c++11 } + +struct A +{ + static constexpr bool value = true; +}; + +template +struct B +{ + static_assert(A::value, ""); + static_assert(sizeof...(Types) == 0, ""); +}; -- 2.30.2