cp-tree.h (revert_static_member_fn): Change prototype.
authorMark Mitchell <mark@codesourcery.com>
Mon, 13 Mar 2000 04:54:39 +0000 (04:54 +0000)
committerMark Mitchell <mmitchel@gcc.gnu.org>
Mon, 13 Mar 2000 04:54:39 +0000 (04:54 +0000)
* cp-tree.h (revert_static_member_fn): Change prototype.
* decl.c (grokfndecl): Adjust call to revert_static_member_fn.
(grok_op_properties): Likewise.
(start_function): Likewise.
(revert_static_member_fn): Simplify.
* pt.c (check_explicit_specialization): Adjust call to
revert_static_member_fn.

From-SVN: r32501

gcc/cp/ChangeLog
gcc/cp/cp-tree.h
gcc/cp/decl.c
gcc/cp/pt.c

index 0e4812c607396f088223228d0211ef754621bf27..3313d18c9f2c6d1862ba80c00eea4cd85fe1786b 100644 (file)
@@ -1,3 +1,13 @@
+2000-03-12  Mark Mitchell  <mark@codesourcery.com>
+
+       * cp-tree.h (revert_static_member_fn): Change prototype.
+       * decl.c (grokfndecl): Adjust call to revert_static_member_fn.
+       (grok_op_properties): Likewise.
+       (start_function): Likewise.
+       (revert_static_member_fn): Simplify.
+       * pt.c (check_explicit_specialization): Adjust call to
+       revert_static_member_fn.
+
 2000-03-11  Mark Mitchell  <mark@codesourcery.com>
 
        * cp-tree.h (scope_kind): New type.
index 28f67c072f0777855ed7a243703078631f7146ec..44945120d33830af12edecedf2030c27f5be51aa 100644 (file)
@@ -3826,7 +3826,7 @@ extern void finish_stmt                           PARAMS ((void));
 extern int in_function_p                       PARAMS ((void));
 extern void replace_defarg                     PARAMS ((tree, tree));
 extern void print_other_binding_stack          PARAMS ((struct binding_level *));
-extern void revert_static_member_fn             PARAMS ((tree*, tree*, tree*));
+extern void revert_static_member_fn             PARAMS ((tree));
 extern void fixup_anonymous_aggr                PARAMS ((tree));
 extern int check_static_variable_definition     PARAMS ((tree, tree));
 extern tree compute_array_index_type           PARAMS ((tree, tree));
index 5b6e6a9d8f67b148fbb938654443655f4138a83b..bb8a43e1184a1aa8ad73016a738777cf73a51c9d 100644 (file)
@@ -8814,7 +8814,7 @@ grokfndecl (ctype, type, declarator, orig_declarator, virtualp, flags, quals,
        {
          /* Remove the `this' parm added by grokclassfn.
             XXX Isn't this done in start_function, too?  */
-         revert_static_member_fn (&decl, NULL, NULL);
+         revert_static_member_fn (decl);
          last_function_parms = TREE_CHAIN (last_function_parms);
        }
       if (old_decl && DECL_ARTIFICIAL (old_decl))
@@ -12070,7 +12070,7 @@ grok_op_properties (decl, virtualp, friendp)
       /* When the compiler encounters the definition of A::operator new, it
         doesn't look at the class declaration to find out if it's static.  */
       if (methodp)
-       revert_static_member_fn (&decl, NULL, NULL);
+       revert_static_member_fn (decl);
 
       /* Take care of function decl if we had syntax errors.  */
       if (argtypes == NULL_TREE)
@@ -12085,7 +12085,7 @@ grok_op_properties (decl, virtualp, friendp)
           || name == ansi_opname[(int) VEC_DELETE_EXPR])
     {
       if (methodp)
-       revert_static_member_fn (&decl, NULL, NULL);
+       revert_static_member_fn (decl);
 
       if (argtypes == NULL_TREE)
        TREE_TYPE (decl)
@@ -13204,7 +13204,7 @@ start_function (declspecs, declarator, attrs, flags)
   if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
       && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
     {
-      revert_static_member_fn (&decl1, NULL, NULL);
+      revert_static_member_fn (decl1);
       last_function_parms = TREE_CHAIN (last_function_parms);
       ctype = NULL_TREE;
     }
@@ -14560,20 +14560,16 @@ finish_stmt ()
   last_expr_type = NULL_TREE;
 }
 
-/* Change a static member function definition into a FUNCTION_TYPE, instead
-   of the METHOD_TYPE that we create when it's originally parsed.
-
-   WARNING: DO NOT pass &TREE_TYPE (decl) to FN or &TYPE_ARG_TYPES
-   (TREE_TYPE (decl)) to ARGTYPES, as doing so will corrupt the types of
-   other decls.  Either pass the addresses of local variables or NULL.  */
+/* DECL was originally constructed as a non-static member function,
+   but turned out to be static.  Update it accordingly.  */
 
 void
-revert_static_member_fn (decl, fn, argtypes)
-     tree *decl, *fn, *argtypes;
+revert_static_member_fn (decl)
+     tree decl;
 {
   tree tmp;
-  tree function = fn ? *fn : TREE_TYPE (*decl);
-  tree args = argtypes ? *argtypes : TYPE_ARG_TYPES (function);
+  tree function = TREE_TYPE (decl);
+  tree args = TYPE_ARG_TYPES (function);
 
   if (CP_TYPE_QUALS (TREE_TYPE (TREE_VALUE (args)))
       != TYPE_UNQUALIFIED)
@@ -14585,14 +14581,10 @@ revert_static_member_fn (decl, fn, argtypes)
   tmp = build_qualified_type (tmp, CP_TYPE_QUALS (function));
   tmp = build_exception_variant (tmp,
                                 TYPE_RAISES_EXCEPTIONS (function));
-  TREE_TYPE (*decl) = tmp;
-  if (DECL_ARGUMENTS (*decl))
-    DECL_ARGUMENTS (*decl) = TREE_CHAIN (DECL_ARGUMENTS (*decl));
-  DECL_STATIC_FUNCTION_P (*decl) = 1;
-  if (fn)
-    *fn = tmp;
-  if (argtypes)
-    *argtypes = args;
+  TREE_TYPE (decl) = tmp;
+  if (DECL_ARGUMENTS (decl))
+    DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
+  DECL_STATIC_FUNCTION_P (decl) = 1;
 }
 
 /* Initialize the variables used during compilation of a C++
index 9fef5acd36e3c7e1019abb7d0274b4d55cfc039a..a5da8d2afff0120f2a0af4680d8f79d9628aa757 100644 (file)
@@ -1500,7 +1500,7 @@ check_explicit_specialization (declarator, decl, template_count, flags)
          if (DECL_STATIC_FUNCTION_P (tmpl)
              && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
            {
-             revert_static_member_fn (&decl, 0, 0);
+             revert_static_member_fn (decl);
              last_function_parms = TREE_CHAIN (last_function_parms);
            }