This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] eliminate most calls to build_function_type in ObjC FE
- From: Nathan Froyd <froydnj at codesourcery dot com>
- To: gcc-patches at gcc dot gnu dot org
- Cc: mikestump at comcast dot net
- Date: Sat, 15 May 2010 18:50:33 -0700
- Subject: [PATCH] eliminate most calls to build_function_type in ObjC FE
The patch below eliminates most calls to build_function_type from the
Fortran FE. The benefit is one less obstacle to getting rid of
TREE_LIST. (TREE_LISTs are still built, but at least their building is
more centralized after the patch.) The remaining calls to
build_function_type will need some more thought and a better interface
to building FUNCTION_TYPEs before they can be eliminated.
Tested on x86_64-unknown-linux-gnu. OK?
-Nathan
* objc-act.c (synth_module_prologue): Use build_function_type_list
and build_varargs_function_type_list instead of build_function_type.
(build_module_initializer_routine): Likewise.
(build_next_objc_exception_stuff): Likewise.
(build_objc_exception_stuff): Likewise.
diff --git a/gcc/objc/objc-act.c b/gcc/objc/objc-act.c
index 465376d..7cbd392 100644
--- a/gcc/objc/objc-act.c
+++ b/gcc/objc/objc-act.c
@@ -1667,10 +1667,10 @@ synth_module_prologue (void)
/* id objc_msgSend_stret (id, SEL, ...); */
/* id objc_msgSendNonNil_stret (id, SEL, ...); */
type
- = build_function_type (objc_object_type,
- tree_cons (NULL_TREE, objc_object_type,
- tree_cons (NULL_TREE, objc_selector_type,
- NULL_TREE)));
+ = build_varargs_function_type_list (objc_object_type,
+ objc_object_type,
+ objc_selector_type,
+ NULL_TREE);
umsg_decl = add_builtin_function (TAG_MSGSEND,
type, 0, NOT_BUILT_IN,
NULL, NULL_TREE);
@@ -1711,10 +1711,10 @@ synth_module_prologue (void)
/* id objc_msgSendSuper (struct objc_super *, SEL, ...); */
/* id objc_msgSendSuper_stret (struct objc_super *, SEL, ...); */
type
- = build_function_type (objc_object_type,
- tree_cons (NULL_TREE, objc_super_type,
- tree_cons (NULL_TREE, objc_selector_type,
- NULL_TREE)));
+ = build_varargs_function_type_list (objc_object_type,
+ objc_super_type,
+ objc_selector_type,
+ NULL_TREE);
umsg_super_decl = add_builtin_function (TAG_MSGSENDSUPER,
type, 0, NOT_BUILT_IN,
NULL, NULL_TREE);
@@ -1729,19 +1729,18 @@ synth_module_prologue (void)
/* GNU runtime messenger entry points. */
/* typedef id (*IMP)(id, SEL, ...); */
- tree IMP_type
- = build_pointer_type
- (build_function_type (objc_object_type,
- tree_cons (NULL_TREE, objc_object_type,
- tree_cons (NULL_TREE, objc_selector_type,
- NULL_TREE))));
+ tree ftype =
+ build_varargs_function_type_list (objc_object_type,
+ objc_object_type,
+ objc_selector_type,
+ NULL_TREE);
+ tree IMP_type = build_pointer_type (ftype);
/* IMP objc_msg_lookup (id, SEL); */
- type
- = build_function_type (IMP_type,
- tree_cons (NULL_TREE, objc_object_type,
- tree_cons (NULL_TREE, objc_selector_type,
- OBJC_VOID_AT_END)));
+ type = build_function_type_list (IMP_type,
+ objc_object_type,
+ objc_selector_type,
+ NULL_TREE);
umsg_decl = add_builtin_function (TAG_MSGSEND,
type, 0, NOT_BUILT_IN,
NULL, NULL_TREE);
@@ -1749,10 +1748,10 @@ synth_module_prologue (void)
/* IMP objc_msg_lookup_super (struct objc_super *, SEL); */
type
- = build_function_type (IMP_type,
- tree_cons (NULL_TREE, objc_super_type,
- tree_cons (NULL_TREE, objc_selector_type,
- OBJC_VOID_AT_END)));
+ = build_function_type_list (IMP_type,
+ objc_super_type,
+ objc_selector_type,
+ NULL_TREE);
umsg_super_decl = add_builtin_function (TAG_MSGSENDSUPER,
type, 0, NOT_BUILT_IN,
NULL, NULL_TREE);
@@ -1763,9 +1762,9 @@ synth_module_prologue (void)
__objc_exec_class (void *); */
type
- = build_function_type (void_type_node,
- tree_cons (NULL_TREE, ptr_type_node,
- OBJC_VOID_AT_END));
+ = build_function_type_list (void_type_node,
+ ptr_type_node,
+ NULL_TREE);
execclass_decl = add_builtin_function (TAG_EXECCLASS,
type, 0, NOT_BUILT_IN,
NULL, NULL_TREE);
@@ -1773,10 +1772,9 @@ synth_module_prologue (void)
/* id objc_getClass (const char *); */
- type = build_function_type (objc_object_type,
- tree_cons (NULL_TREE,
- const_string_type_node,
- OBJC_VOID_AT_END));
+ type = build_function_type_list (objc_object_type,
+ const_string_type_node,
+ NULL_TREE);
objc_get_class_decl
= add_builtin_function (TAG_GETCLASS, type, 0, NOT_BUILT_IN,
@@ -2401,13 +2399,11 @@ build_module_initializer_routine (void)
PARM_DECL, NULL_TREE, void_type_node));
#ifdef OBJCPLUS
objc_start_function (get_identifier (TAG_GNUINIT),
- build_function_type (void_type_node,
- OBJC_VOID_AT_END),
+ build_function_type_list (void_type_node, NULL_TREE),
NULL_TREE, NULL_TREE);
#else
objc_start_function (get_identifier (TAG_GNUINIT),
- build_function_type (void_type_node,
- OBJC_VOID_AT_END),
+ build_function_type_list (void_type_node, NULL_TREE),
NULL_TREE, objc_get_parm_info (0));
#endif
body = c_begin_compound_stmt (true);
@@ -4092,26 +4088,24 @@ build_next_objc_exception_stuff (void)
/* int _setjmp(...); */
/* If the user includes <setjmp.h>, this shall be superseded by
'int _setjmp(jmp_buf);' */
- temp_type = build_function_type (integer_type_node, NULL_TREE);
+ temp_type = build_function_type_list (integer_type_node, NULL_TREE);
objc_setjmp_decl
= add_builtin_function (TAG_SETJMP, temp_type, 0, NOT_BUILT_IN, NULL, NULL_TREE);
/* id objc_exception_extract(struct _objc_exception_data *); */
temp_type
- = build_function_type (objc_object_type,
- tree_cons (NULL_TREE,
- build_pointer_type (objc_exception_data_template),
- OBJC_VOID_AT_END));
+ = build_function_type_list (objc_object_type,
+ build_pointer_type (objc_exception_data_template),
+ NULL_TREE);
objc_exception_extract_decl
= add_builtin_function (TAG_EXCEPTIONEXTRACT, temp_type, 0, NOT_BUILT_IN, NULL,
NULL_TREE);
/* void objc_exception_try_enter(struct _objc_exception_data *); */
/* void objc_exception_try_exit(struct _objc_exception_data *); */
temp_type
- = build_function_type (void_type_node,
- tree_cons (NULL_TREE,
- build_pointer_type (objc_exception_data_template),
- OBJC_VOID_AT_END));
+ = build_function_type_list (void_type_node,
+ build_pointer_type (objc_exception_data_template),
+ NULL_TREE);
objc_exception_try_enter_decl
= add_builtin_function (TAG_EXCEPTIONTRYENTER, temp_type, 0, NOT_BUILT_IN, NULL,
NULL_TREE);
@@ -4121,10 +4115,8 @@ build_next_objc_exception_stuff (void)
/* int objc_exception_match(id, id); */
temp_type
- = build_function_type (integer_type_node,
- tree_cons (NULL_TREE, objc_object_type,
- tree_cons (NULL_TREE, objc_object_type,
- OBJC_VOID_AT_END)));
+ = build_function_type_list (integer_type_node,
+ objc_object_type, objc_object_type, NULL_TREE);
objc_exception_match_decl
= add_builtin_function (TAG_EXCEPTIONMATCH, temp_type, 0, NOT_BUILT_IN, NULL,
NULL_TREE);
@@ -4133,13 +4125,11 @@ build_next_objc_exception_stuff (void)
/* id objc_assign_ivar_Fast (id, id, unsigned int)
__attribute__ ((hard_coded_address (OFFS_ASSIGNIVAR_FAST))); */
temp_type
- = build_function_type (objc_object_type,
- tree_cons
- (NULL_TREE, objc_object_type,
- tree_cons (NULL_TREE, objc_object_type,
- tree_cons (NULL_TREE,
- unsigned_type_node,
- OBJC_VOID_AT_END))));
+ = build_function_type_list (objc_object_type,
+ objc_object_type,
+ objc_object_type,
+ unsigned_type_node,
+ NULL_TREE);
objc_assign_ivar_decl
= add_builtin_function (TAG_ASSIGNIVAR, temp_type, 0, NOT_BUILT_IN,
NULL, NULL_TREE);
@@ -4158,10 +4148,10 @@ build_next_objc_exception_stuff (void)
/* id objc_assign_global (id, id *); */
/* id objc_assign_strongCast (id, id *); */
- temp_type = build_function_type (objc_object_type,
- tree_cons (NULL_TREE, objc_object_type,
- tree_cons (NULL_TREE, build_pointer_type (objc_object_type),
- OBJC_VOID_AT_END)));
+ temp_type = build_function_type_list (objc_object_type,
+ objc_object_type,
+ build_pointer_type (objc_object_type),
+ NULL_TREE);
objc_assign_global_decl
= add_builtin_function (TAG_ASSIGNGLOBAL, temp_type, 0, NOT_BUILT_IN, NULL,
NULL_TREE);
@@ -4181,9 +4171,9 @@ build_objc_exception_stuff (void)
/* void objc_exception_throw(id) __attribute__((noreturn)); */
/* void objc_sync_enter(id); */
/* void objc_sync_exit(id); */
- temp_type = build_function_type (void_type_node,
- tree_cons (NULL_TREE, objc_object_type,
- OBJC_VOID_AT_END));
+ temp_type = build_function_type_list (void_type_node,
+ objc_object_type,
+ NULL_TREE);
objc_exception_throw_decl
= add_builtin_function (TAG_EXCEPTIONTHROW, temp_type, 0, NOT_BUILT_IN, NULL,
noreturn_list);