diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index f2f4e3cb5f0..f9f0eabf1d2 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 b4d8b94feb1..d548f61fa51 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 ade10c74a3c..d42af0ffaa7 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 00000000000..5c0968d8129 --- /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 29d17b84b89..52f22188ddb 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 dfd491d4f04..d4ebad3aa13 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() {