From: Mark Mitchell Date: Wed, 19 May 1999 04:32:46 +0000 (+0000) Subject: tree.c (cp_build_qualified_type): Don't allow qualified function types. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=777004694d5c8b677cb4bfa3ac457ac838c58618;p=gcc.git tree.c (cp_build_qualified_type): Don't allow qualified function types. * tree.c (cp_build_qualified_type): Don't allow qualified function types. From-SVN: r27021 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index fb8c4a18725..d3d297a441a 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 bf16fe2a0c5..dedfc2ffa74 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 d3d3392e451..e514ae75a6d 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 00000000000..6120dae9873 --- /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()() ); +}