re PR c++/48166 (ICE on static member function with invalid type qualifier)
authorJason Merrill <jason@redhat.com>
Thu, 17 Mar 2011 16:02:08 +0000 (12:02 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Thu, 17 Mar 2011 16:02:08 +0000 (12:02 -0400)
PR c++/48166
* decl.c (revert_static_member_fn): Strip function-cv-quals.

From-SVN: r171103

gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/parse/memfnquals1.C [new file with mode: 0644]

index 7248c119e7b293530eb0413ac6f176f52aa4b402..38ac06ce7df42c5396ee96fc110a136e50bd8400 100644 (file)
@@ -1,3 +1,8 @@
+2011-03-17  Jason Merrill  <jason@redhat.com>
+
+       PR c++/48166
+       * decl.c (revert_static_member_fn): Strip function-cv-quals.
+
 2011-03-16  Jason Merrill  <jason@redhat.com>
 
        PR c++/48089
index a7da5742a5e2669dc39c58ddff7ca1a0e97d812f..0985749f32a3502438681099c314bd8fc82da2ad 100644 (file)
@@ -13344,10 +13344,14 @@ static_fn_type (tree memfntype)
 void
 revert_static_member_fn (tree decl)
 {
-  TREE_TYPE (decl) = static_fn_type (decl);
+  tree stype = static_fn_type (decl);
 
-  if (cp_type_quals (TREE_TYPE (decl)) != TYPE_UNQUALIFIED)
-    error ("static member function %q#D declared with type qualifiers", decl);
+  if (type_memfn_quals (stype) != TYPE_UNQUALIFIED)
+    {
+      error ("static member function %q#D declared with type qualifiers", decl);
+      stype = apply_memfn_quals (stype, TYPE_UNQUALIFIED);
+    }
+  TREE_TYPE (decl) = stype;
 
   if (DECL_ARGUMENTS (decl))
     DECL_ARGUMENTS (decl) = DECL_CHAIN (DECL_ARGUMENTS (decl));
index 20ba8d6a6a129c81b296fb67b59a46428c7350a1..47cdbc920e11d2a01dd1d057abd1d75709fd66e3 100644 (file)
@@ -1,3 +1,7 @@
+2011-03-17  Jason Merrill  <jason@redhat.com>
+
+       * g++.dg/parse/memfnquals1.C: New.
+
 2011-03-17  Richard Guenther  <rguenther@suse.de>
 
        PR middle-end/48134
diff --git a/gcc/testsuite/g++.dg/parse/memfnquals1.C b/gcc/testsuite/g++.dg/parse/memfnquals1.C
new file mode 100644 (file)
index 0000000..ce8af7b
--- /dev/null
@@ -0,0 +1,6 @@
+// PR c++/48166
+
+struct foo {
+  static void func ();
+};
+void foo::func () const {}     // { dg-error "type qualifiers" }