aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernd Schmidt <bernds@cygnus.co.uk>1999-09-12 14:03:23 +0000
committerBernd Schmidt <crux@gcc.gnu.org>1999-09-12 14:03:23 +0000
commitc2a37c55a60d12c57d149275d78418e02182fd70 (patch)
tree2499c1b8055faf8cd45b7911546f6c4ceca32c7a
parent40c1bf53bbe72205e10d06af612da51d0018c93f (diff)
downloadgcc-c2a37c55a60d12c57d149275d78418e02182fd70.zip
gcc-c2a37c55a60d12c57d149275d78418e02182fd70.tar.gz
gcc-c2a37c55a60d12c57d149275d78418e02182fd70.tar.bz2
define_function cleanup
From-SVN: r29360
-rw-r--r--gcc/cp/ChangeLog9
-rw-r--r--gcc/cp/cp-tree.h8
-rw-r--r--gcc/cp/decl.c48
-rw-r--r--gcc/cp/except.c3
4 files changed, 39 insertions, 29 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index ab9ece6..17c8f16 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,12 @@
+1999-09-12 Bernd Schmidt <bernds@cygnus.co.uk>
+
+ * cp-tree.h (auto_function, define_function): Adjust prototypes.
+ * decl.c (define_function): Lose FUNCTION_CODE arg. All callers
+ changed.
+ (auto_function): Likewise, for CODE arg.
+ Move code to set DECL_BUILT_IN and DECL_FUNCTION_CODE to...
+ (builtin_function): ... here.
+
1999-09-11 Mark Mitchell <mark@codesourcery.com>
* cp-tree.def (CLEANUP_STMT): New node.
diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h
index 5b43829..2cb0574 100644
--- a/gcc/cp/cp-tree.h
+++ b/gcc/cp/cp-tree.h
@@ -3177,12 +3177,12 @@ extern tree namespace_ancestor PROTO((tree, tree));
extern tree unqualified_namespace_lookup PROTO((tree, int, tree *));
extern int lookup_using_namespace PROTO((tree, tree, tree, tree, int, tree *));
extern int qualified_lookup_using_namespace PROTO((tree, tree, tree, int));
-extern tree auto_function PROTO((tree, tree, enum built_in_function));
+extern tree auto_function PROTO((tree, tree));
extern void init_decl_processing PROTO((void));
extern int init_type_desc PROTO((void));
-extern tree define_function
- PROTO((const char *, tree, enum built_in_function,
- void (*) (tree), const char *));
+extern tree define_function PROTO((const char *, tree,
+ void (*) (tree),
+ const char *));
extern tree check_tag_decl PROTO((tree));
extern void shadow_tag PROTO((tree));
extern tree groktypename PROTO((tree));
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index 22e61f0..5cbb8c8 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -5947,12 +5947,12 @@ push_overloaded_decl_1 (x)
__inline
#endif
tree
-auto_function (name, type, code)
+auto_function (name, type)
tree name, type;
- enum built_in_function code;
+ enum built_in_function;
{
return define_function
- (IDENTIFIER_POINTER (name), type, code, push_overloaded_decl_1,
+ (IDENTIFIER_POINTER (name), type, push_overloaded_decl_1,
IDENTIFIER_POINTER (build_decl_overload (name, TYPE_ARG_TYPES (type),
0)));
}
@@ -6309,16 +6309,15 @@ init_decl_processing ()
newtype = build_exception_variant
(ptr_ftype_sizetype, add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1));
deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
- auto_function (ansi_opname[(int) NEW_EXPR], newtype, NOT_BUILT_IN);
- auto_function (ansi_opname[(int) VEC_NEW_EXPR], newtype, NOT_BUILT_IN);
- global_delete_fndecl
- = auto_function (ansi_opname[(int) DELETE_EXPR], deltype, NOT_BUILT_IN);
- auto_function (ansi_opname[(int) VEC_DELETE_EXPR], deltype, NOT_BUILT_IN);
+ auto_function (ansi_opname[(int) NEW_EXPR], newtype);
+ auto_function (ansi_opname[(int) VEC_NEW_EXPR], newtype);
+ global_delete_fndecl = auto_function (ansi_opname[(int) DELETE_EXPR],
+ deltype);
+ auto_function (ansi_opname[(int) VEC_DELETE_EXPR], deltype);
}
abort_fndecl
- = define_function ("__pure_virtual", void_ftype,
- NOT_BUILT_IN, 0, 0);
+ = define_function ("__pure_virtual", void_ftype, 0, 0);
/* Perform other language dependent initializations. */
init_class_processing ();
@@ -6401,17 +6400,14 @@ lang_print_error_function (file)
/* Make a definition for a builtin function named NAME and whose data type
is TYPE. TYPE should be a function type with argument types.
- FUNCTION_CODE tells later passes how to compile calls to this function.
- See tree.h for its possible values.
If LIBRARY_NAME is nonzero, use that for DECL_ASSEMBLER_NAME,
the name to be called if we can't opencode the function. */
tree
-define_function (name, type, function_code, pfn, library_name)
+define_function (name, type, pfn, library_name)
const char *name;
tree type;
- enum built_in_function function_code;
void (*pfn) PROTO((tree));
const char *library_name;
{
@@ -6430,14 +6426,15 @@ define_function (name, type, function_code, pfn, library_name)
if (library_name)
DECL_ASSEMBLER_NAME (decl) = get_identifier (library_name);
make_function_rtl (decl);
- if (function_code != NOT_BUILT_IN)
- {
- DECL_BUILT_IN (decl) = 1;
- DECL_FUNCTION_CODE (decl) = function_code;
- }
return decl;
}
+
+/* Wrapper around define_function, for the benefit of
+ c_common_nodes_and_builtins.
+ FUNCTION_CODE tells later passes how to compile calls to this function.
+ See tree.h for its possible values. */
+
tree
builtin_function (name, type, code, libname)
const char *name;
@@ -6445,7 +6442,14 @@ builtin_function (name, type, code, libname)
enum built_in_function code;
const char *libname;
{
- return define_function (name, type, code, (void (*) PROTO((tree)))pushdecl, libname);
+ tree decl = define_function (name, type, (void (*) PROTO((tree)))pushdecl,
+ libname);
+ if (code != NOT_BUILT_IN)
+ {
+ DECL_BUILT_IN (decl) = 1;
+ DECL_FUNCTION_CODE (decl) = code;
+ }
+ return decl;
}
/* When we call finish_struct for an anonymous union, we create
@@ -7906,9 +7910,7 @@ destroy_local_static (decl)
= define_function ("atexit",
build_function_type (void_type_node,
pfvlist),
- NOT_BUILT_IN,
- /*pfn=*/0,
- NULL_PTR);
+ /*pfn=*/0, NULL_PTR);
mark_used (atexit_fndecl);
atexit_node = default_conversion (atexit_fndecl);
pop_lang_context ();
diff --git a/gcc/cp/except.c b/gcc/cp/except.c
index 821223f..196eaf9 100644
--- a/gcc/cp/except.c
+++ b/gcc/cp/except.c
@@ -164,8 +164,7 @@ init_exception_processing ()
if (flag_honor_std)
push_namespace (get_identifier ("std"));
- terminate_node = auto_function (get_identifier ("terminate"),
- vtype, NOT_BUILT_IN);
+ terminate_node = auto_function (get_identifier ("terminate"), vtype);
TREE_THIS_VOLATILE (terminate_node) = 1;
if (flag_honor_std)
pop_namespace ();