diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2014-06-12 01:29:42 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2014-06-12 01:29:42 +0000 |
commit | e35889871c9e5e6f8ea0d8c10f3d6d9fe2d9c854 (patch) | |
tree | c53368f954ad7ed77eff7d185269bf0ffa326688 /gcc | |
parent | 8c80b86b05b53b77a1837b1295f107c781e339d7 (diff) | |
download | gcc-e35889871c9e5e6f8ea0d8c10f3d6d9fe2d9c854.zip gcc-e35889871c9e5e6f8ea0d8c10f3d6d9fe2d9c854.tar.gz gcc-e35889871c9e5e6f8ea0d8c10f3d6d9fe2d9c854.tar.bz2 |
re PR c++/19200 (Friend declaration misinterpreted as constructor)
/cp
2014-06-11 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/19200
* parser.c (cp_parser_init_declarator): Actually pass friend_p
to cp_parser_declarator.
/testsuite
2014-06-11 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/19200
* g++.dg/parse/friend11.C: New.
From-SVN: r211488
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/parser.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/parse/friend11.C | 6 |
4 files changed, 19 insertions, 5 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 8bd4a73..70156eb 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,11 @@ 2014-06-11 Paolo Carlini <paolo.carlini@oracle.com> + PR c++/19200 + * parser.c (cp_parser_init_declarator): Actually pass friend_p + to cp_parser_declarator. + +2014-06-11 Paolo Carlini <paolo.carlini@oracle.com> + PR c++/60265 * parser.c (cp_parser_using_declaration): Handle unscoped enums. * name-lookup.c (validate_nonmember_using_decl): Adjust error diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 4dff139..1079832 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 2a506f5..3e92395 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2014-06-11 Paolo Carlini <paolo.carlini@oracle.com> + PR c++/19200 + * g++.dg/parse/friend11.C: New. + +2014-06-11 Paolo Carlini <paolo.carlini@oracle.com> + PR c++/60265 * g++.dg/cpp0x/using-enum-1.C: New. * g++.dg/cpp0x/using-enum-2.C: Likewise. diff --git a/gcc/testsuite/g++.dg/parse/friend11.C b/gcc/testsuite/g++.dg/parse/friend11.C new file mode 100644 index 0000000..61aae4e --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/friend11.C @@ -0,0 +1,6 @@ +// PR c++/19200 + +struct S { + struct T{}; + template<typename> friend void S(T); +}; |