This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[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);


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]