From: Paolo Carlini Date: Thu, 12 Jun 2014 01:29:42 +0000 (+0000) Subject: re PR c++/19200 (Friend declaration misinterpreted as constructor) X-Git-Tag: releases/gcc-5.1.0~6932 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e35889871c9e5e6f8ea0d8c10f3d6d9fe2d9c854;p=thirdparty%2Fgcc.git re PR c++/19200 (Friend declaration misinterpreted as constructor) /cp 2014-06-11 Paolo Carlini PR c++/19200 * parser.c (cp_parser_init_declarator): Actually pass friend_p to cp_parser_declarator. /testsuite 2014-06-11 Paolo Carlini PR c++/19200 * g++.dg/parse/friend11.C: New. From-SVN: r211488 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 8bd4a7389d23..70156ebe16ad 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2014-06-11 Paolo Carlini + + PR c++/19200 + * parser.c (cp_parser_init_declarator): Actually pass friend_p + to cp_parser_declarator. + 2014-06-11 Paolo Carlini PR c++/60265 diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 4dff139ff5da..1079832cec22 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -16545,7 +16545,7 @@ cp_parser_init_declarator (cp_parser* parser, bool is_direct_init = false; bool is_non_constant_init; int ctor_dtor_or_conv_p; - bool friend_p; + bool friend_p = cp_parser_friend_p (decl_specifiers); tree pushed_scope = NULL_TREE; bool range_for_decl_p = false; bool saved_default_arg_ok_p = parser->default_arg_ok_p; @@ -16574,7 +16574,7 @@ cp_parser_init_declarator (cp_parser* parser, = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED, &ctor_dtor_or_conv_p, /*parenthesized_p=*/NULL, - member_p, /*friend_p=*/false); + member_p, friend_p); /* Gather up the deferred checks. */ stop_deferring_access_checks (); @@ -16746,9 +16746,6 @@ cp_parser_init_declarator (cp_parser* parser, decl_specifiers->type = integer_type_node; } - /* Check to see whether or not this declaration is a friend. */ - friend_p = cp_parser_friend_p (decl_specifiers); - /* Enter the newly declared entry in the symbol table. If we're processing a declaration in a class-specifier, we wait until after processing the initializer. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2a506f596c9d..3e9239545143 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-06-11 Paolo Carlini + + PR c++/19200 + * g++.dg/parse/friend11.C: New. + 2014-06-11 Paolo Carlini PR c++/60265 diff --git a/gcc/testsuite/g++.dg/parse/friend11.C b/gcc/testsuite/g++.dg/parse/friend11.C new file mode 100644 index 000000000000..61aae4ed63b8 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/friend11.C @@ -0,0 +1,6 @@ +// PR c++/19200 + +struct S { + struct T{}; + template friend void S(T); +};