From: paolo Date: Tue, 24 Jun 2014 14:47:42 +0000 (+0000) Subject: /cp X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=acab45ee2dc0bbb9b95059d1448adddde71d3779;p=thirdparty%2Fgcc.git /cp 2014-06-24 Paolo Carlini PR c++/33972 * decl.c (grokdeclarator): Do not early check for operator-function-id as non-function. /testsuite 2014-06-24 Paolo Carlini PR c++/33972 * g++.dg/other/operator3.C: New. * g++.dg/template/operator8.C: Adjust. * g++.dg/template/operator9.C: Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@211944 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index f2f4e3cb5f09..f9f0eabf1d20 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2014-06-24 Paolo Carlini + + PR c++/33972 + * decl.c (grokdeclarator): Do not early check for operator-function-id + as non-function. + 2014-06-24 Trevor Saunders * class.c, semantics.c, tree.c, vtable-class-hierarchy.c: diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index b4d8b94feb1c..d548f61fa518 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -9007,7 +9007,7 @@ grokdeclarator (const cp_declarator *declarator, return error_mark_node; } - if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG) + if (flags == TYPENAME_FLAG && innermost_code != cdk_function && ! (ctype && !declspecs->any_specifiers_p)) { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ade10c74a3c7..d42af0ffaa74 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2014-06-24 Paolo Carlini + + PR c++/33972 + * g++.dg/other/operator3.C: New. + * g++.dg/template/operator8.C: Adjust. + * g++.dg/template/operator9.C: Likewise. + 2014-06-24 Alan Lawrence * gcc.target/aarch64/singleton_intrinsics_1.c: Save temps and cleanup. diff --git a/gcc/testsuite/g++.dg/other/operator3.C b/gcc/testsuite/g++.dg/other/operator3.C new file mode 100644 index 000000000000..5c0968d8129b --- /dev/null +++ b/gcc/testsuite/g++.dg/other/operator3.C @@ -0,0 +1,7 @@ +// PR c++/33972 + +struct s +{ + typedef void f(void); + f operator(); +}; diff --git a/gcc/testsuite/g++.dg/template/operator8.C b/gcc/testsuite/g++.dg/template/operator8.C index 29d17b84b89b..52f22188ddbc 100644 --- a/gcc/testsuite/g++.dg/template/operator8.C +++ b/gcc/testsuite/g++.dg/template/operator8.C @@ -2,5 +2,5 @@ struct A { - template void foo() {} // { dg-error "identifier|non-function|template arguments" } + template void foo() {} // { dg-error "identifier|parameter|template arguments" } }; diff --git a/gcc/testsuite/g++.dg/template/operator9.C b/gcc/testsuite/g++.dg/template/operator9.C index dfd491d4f04b..d4ebad3aa132 100644 --- a/gcc/testsuite/g++.dg/template/operator9.C +++ b/gcc/testsuite/g++.dg/template/operator9.C @@ -1,6 +1,6 @@ //PR c++/27670 -template void foo(); // { dg-error "before|non-function|template" } +template void foo(); // { dg-error "before|parameter|template" } void bar() {