summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>2000-03-13 04:54:39 +0000
committermmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>2000-03-13 04:54:39 +0000
commit11fa026604edfafa754a9806063435686eeb4748 (patch)
tree397cf1b042790910110874d9e4d76289ba00e800
parent623b4a9df1f7635af39fb68659ea1ee9befb5201 (diff)
downloadgcc-11fa026604edfafa754a9806063435686eeb4748.tar.gz
* 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@32501 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/cp/ChangeLog10
-rw-r--r--gcc/cp/cp-tree.h2
-rw-r--r--gcc/cp/decl.c36
-rw-r--r--gcc/cp/pt.c2
4 files changed, 26 insertions, 24 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 0e4812c6073..3313d18c9f2 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -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.
diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h
index 28f67c072f0..44945120d33 100644
--- a/gcc/cp/cp-tree.h
+++ b/gcc/cp/cp-tree.h
@@ -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));
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index 5b6e6a9d8f6..bb8a43e1184 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -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++
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index 9fef5acd36e..a5da8d2afff 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -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);
}