From 2e1dc6c7775907ba7efd34ebc4ac10e22c41d511 Mon Sep 17 00:00:00 2001 From: mmitchel Date: Wed, 19 May 1999 04:32:46 +0000 Subject: [PATCH] * tree.c (cp_build_qualified_type): Don't allow qualified function types. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@27021 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/tree.c | 8 +++++++- gcc/testsuite/g++.old-deja/g++.jason/report.C | 2 +- gcc/testsuite/g++.old-deja/g++.other/qual1.C | 17 +++++++++++++++++ 4 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.old-deja/g++.other/qual1.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index fb8c4a1..d3d297a 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +1999-05-19 Mark Mitchell + + * tree.c (cp_build_qualified_type): Don't allow qualified function + types. + Wed May 19 02:50:53 1999 Arvind Sankar * gxxint.texi: Fix typo. diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index bf16fe2..dedfc2f 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -475,7 +475,13 @@ cp_build_qualified_type (type, type_quals) type_quals &= ~TYPE_QUAL_RESTRICT; } - if (TREE_CODE (type) == ARRAY_TYPE) + if (type_quals != TYPE_UNQUALIFIED + && TREE_CODE (type) == FUNCTION_TYPE) + { + cp_error ("`%T' cannot be `const'-, `volatile'-, or `restrict'-qualified", type); + type_quals = TYPE_UNQUALIFIED; + } + else if (TREE_CODE (type) == ARRAY_TYPE) { tree real_main_variant = TYPE_MAIN_VARIANT (type); diff --git a/gcc/testsuite/g++.old-deja/g++.jason/report.C b/gcc/testsuite/g++.old-deja/g++.jason/report.C index d3d3392..e514ae7 100644 --- a/gcc/testsuite/g++.old-deja/g++.jason/report.C +++ b/gcc/testsuite/g++.old-deja/g++.jason/report.C @@ -42,7 +42,7 @@ class X{ }; typedef int const * bart (); -typedef bart const * const * bar2; +typedef bart const * const * bar2; // ERROR - qualifiers bar2 baz (X::Y y) { diff --git a/gcc/testsuite/g++.old-deja/g++.other/qual1.C b/gcc/testsuite/g++.old-deja/g++.other/qual1.C new file mode 100644 index 0000000..6120dae --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/qual1.C @@ -0,0 +1,17 @@ +// Build don't link: +// Origin: Benjamin Pflugmann +// Special g++ Options: -O + +typedef const char *(func_type)(); + +class +{ +public: + func_type *Function; + const func_type* function(void) { return Function; } // ERROR - qualifiers +} action; + +void work(const char *source) +{ + work( action.function()() ); +} -- 2.7.4