From 8013e732a1ec00f029893b9963a26006997a22d4 Mon Sep 17 00:00:00 2001 From: jason Date: Wed, 20 Jun 2012 01:18:08 +0000 Subject: [PATCH] * parser.c (cp_parser_direct_declarator): Move virt-specifier parsing after late-specified return type parsing. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@188808 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/cp/ChangeLog | 5 ++++ gcc/cp/parser.c | 5 ++-- gcc/testsuite/ChangeLog | 4 +++ gcc/testsuite/g++.dg/cpp0x/override4.C | 45 ++++++++++++++++++++++++++++++++++ 4 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/cpp0x/override4.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 562f945be43..794b39f7a64 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2012-06-16 Ville Voutilainen + + * parser.c (cp_parser_direct_declarator): Move virt-specifier + parsing after late-specified return type parsing. + 2012-06-14 Jason Merrill PR c++/53651 diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 1691f81e429..6bc6877c325 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -16102,12 +16102,13 @@ cp_parser_direct_declarator (cp_parser* parser, /* And the exception-specification. */ exception_specification = cp_parser_exception_specification_opt (parser); - /* Parse the virt-specifier-seq. */ - virt_specifiers = cp_parser_virt_specifier_seq_opt (parser); late_return = (cp_parser_late_return_type_opt (parser, member_p ? cv_quals : -1)); + /* Parse the virt-specifier-seq. */ + virt_specifiers = cp_parser_virt_specifier_seq_opt (parser); + /* Create the function-declarator. */ declarator = make_call_declarator (declarator, params, diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 07071a933c4..621ee9643ed 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2012-06-16 Ville Voutilainen + + * g++.dg/cpp0x/override4.C: New. + 2012-06-14 Jason Merrill PR c++/53651 diff --git a/gcc/testsuite/g++.dg/cpp0x/override4.C b/gcc/testsuite/g++.dg/cpp0x/override4.C new file mode 100644 index 00000000000..aec5c2cdf35 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/override4.C @@ -0,0 +1,45 @@ +// { dg-options "-std=c++11" } +// { dg-prune-output "expected ';'" } +// { dg-prune-output "expected unqualified-id" } +// { dg-prune-output "declaration does not declare anything" } + +struct B +{ + virtual auto f() -> void final; + virtual auto g() -> void; +}; + +struct B2 +{ + virtual auto f() -> void final {} +}; + +struct B3 +{ + virtual auto f() -> final void; // { dg-error "expected type-specifier" } +}; + +struct B4 +{ + virtual auto f() -> final void {} // { dg-error "expected type-specifier" } +}; + +struct D : B +{ + virtual auto g() -> void override; +}; + +struct D2 : B +{ + virtual auto g() -> void override {} +}; + +struct D3 : B +{ + virtual auto g() -> override void; // { dg-error "expected type-specifier" } +}; + +struct D4 : B +{ + virtual auto g() -> override void {} // { dg-error "expected type-specifier" } +}; -- 2.11.4.GIT