This merges the two common tree node creation functions now that all callers are sufficiently close to make frontend pieces obvious.
Pending bootstrap and regtest on x86_64-unknown-linux-gnu, I will commit this tomorrow unless somebody objects by then. Richard. 2011-07-05 Richard Guenther <rguent...@suse.de> * tree.c (build_common_tree_nodes_2): Merge with build_common_tree_nodes. * tree.h (build_common_tree_nodes): Adjust prototype. (build_common_tree_nodes_2): Remove. * doc/tm.texi (lang_hooks.builtin_function): Adjust. c-family/ * c-common.c (c_common_nodes_and_builtins): Merge calls to build_common_tree_nodes and build_common_tree_nodes_2. fortran/ * f95-lang.c (gfc_init_decl_processing): Merge calls to build_common_tree_nodes and build_common_tree_nodes_2. go/ * go-lang.c (go_langhook_init): Merge calls to build_common_tree_nodes and build_common_tree_nodes_2. java/ * decl.c (java_init_decl_processing): Merge calls to build_common_tree_nodes and build_common_tree_nodes_2. lto/ * lto-lang.c (lto_init): Merge calls to build_common_tree_nodes and build_common_tree_nodes_2. ada/ * gcc-interface/misc.c (gnat_init): Merge calls to build_common_tree_nodes and build_common_tree_nodes_2. Index: gcc/tree.c =================================================================== --- gcc/tree.c (revision 175855) +++ gcc/tree.c (working copy) @@ -9167,10 +9167,12 @@ make_or_reuse_accum_type (unsigned size, } /* Create nodes for all integer types (and error_mark_node) using the sizes - of C datatypes. */ + of C datatypes. SIGNED_CHAR specifies whether char is signed, + SHORT_DOUBLE specifies whether double should be of the same precision + as float. */ void -build_common_tree_nodes (bool signed_char) +build_common_tree_nodes (bool signed_char, bool short_double) { error_mark_node = make_node (ERROR_MARK); TREE_TYPE (error_mark_node) = error_mark_node; @@ -9247,14 +9249,7 @@ build_common_tree_nodes (bool signed_cha access_public_node = get_identifier ("public"); access_protected_node = get_identifier ("protected"); access_private_node = get_identifier ("private"); -} - -/* Call this function after calling build_common_tree_nodes. - It will create several other common tree nodes. */ -void -build_common_tree_nodes_2 (int short_double) -{ /* Define these next since types below may used them. */ integer_zero_node = build_int_cst (integer_type_node, 0); integer_one_node = build_int_cst (integer_type_node, 1); Index: gcc/tree.h =================================================================== --- gcc/tree.h (revision 175855) +++ gcc/tree.h (working copy) @@ -5396,8 +5396,7 @@ extern int real_onep (const_tree); extern int real_twop (const_tree); extern int real_minus_onep (const_tree); extern void init_ttree (void); -extern void build_common_tree_nodes (bool); -extern void build_common_tree_nodes_2 (int); +extern void build_common_tree_nodes (bool, bool); extern void build_common_builtin_nodes (void); extern tree build_nonstandard_integer_type (unsigned HOST_WIDE_INT, int); extern tree build_range_type (tree, tree, tree); Index: gcc/c-family/c-common.c =================================================================== --- gcc/c-family/c-common.c (revision 175856) +++ gcc/c-family/c-common.c (working copy) @@ -4576,8 +4576,7 @@ c_common_nodes_and_builtins (void) tree va_list_ref_type_node; tree va_list_arg_type_node; - build_common_tree_nodes (flag_signed_char); - build_common_tree_nodes_2 (flag_short_double); + build_common_tree_nodes (flag_signed_char, flag_short_double); /* Define `int' and `char' first so that dbx will output them first. */ record_builtin_type (RID_INT, NULL, integer_type_node); Index: gcc/fortran/f95-lang.c =================================================================== --- gcc/fortran/f95-lang.c (revision 175855) +++ gcc/fortran/f95-lang.c (working copy) @@ -588,9 +588,8 @@ gfc_init_decl_processing (void) /* Build common tree nodes. char_type_node is unsigned because we only use it for actual characters, not for INTEGER(1). Also, we want double_type_node to actually have double precision. */ - build_common_tree_nodes (false); + build_common_tree_nodes (false, false); - build_common_tree_nodes_2 (0); void_list_node = build_tree_list (NULL_TREE, void_type_node); /* Set up F95 type nodes. */ Index: gcc/go/go-lang.c =================================================================== --- gcc/go/go-lang.c (revision 175855) +++ gcc/go/go-lang.c (working copy) @@ -86,9 +86,7 @@ struct GTY(()) language_function static bool go_langhook_init (void) { - build_common_tree_nodes (false); - - build_common_tree_nodes_2 (0); + build_common_tree_nodes (false, false); /* We must create the gogo IR after calling build_common_tree_nodes (because Gogo::define_builtin_function_trees refers indirectly Index: gcc/java/decl.c =================================================================== --- gcc/java/decl.c (revision 175855) +++ gcc/java/decl.c (working copy) @@ -567,10 +567,7 @@ java_init_decl_processing (void) global_binding_level = current_binding_level; /* Build common tree nodes, Java has an unsigned char. */ - build_common_tree_nodes (false); - - /* Build the rest of the common tree nodes. */ - build_common_tree_nodes_2 (0); + build_common_tree_nodes (false, false); /* ??? Now we continue and override some of the built types again with Java specific types. As the above generated types are Index: gcc/lto/lto-lang.c =================================================================== --- gcc/lto/lto-lang.c (revision 175855) +++ gcc/lto/lto-lang.c (working copy) @@ -1085,7 +1085,7 @@ lto_init (void) linemap_add (line_table, LC_RENAME, 0, NULL, 0); /* Create the basic integer types. */ - build_common_tree_nodes (flag_signed_char); + build_common_tree_nodes (flag_signed_char, /*short_double=*/false); /* The global tree for the main identifier is filled in by language-specific front-end initialization that is not run in the @@ -1102,8 +1102,6 @@ lto_init (void) ptrdiff_type_node = integer_type_node; - /* Create other basic types. */ - build_common_tree_nodes_2 (/*short_double=*/false); lto_build_c_type_nodes (); gcc_assert (va_list_type_node); Index: gcc/ada/gcc-interface/misc.c =================================================================== --- gcc/ada/gcc-interface/misc.c (revision 175855) +++ gcc/ada/gcc-interface/misc.c (working copy) @@ -307,7 +307,7 @@ gnat_init (void) /* Do little here, most of the standard declarations are set up after the front-end has been run. Use the same `char' as C, this doesn't really matter since we'll use the explicit `unsigned char' for Character. */ - build_common_tree_nodes (flag_signed_char); + build_common_tree_nodes (flag_signed_char, false); /* In Ada, we use an unsigned 8-bit type for the default boolean type. */ boolean_type_node = make_unsigned_type (8); @@ -316,7 +316,6 @@ gnat_init (void) build_int_cst (boolean_type_node, 1)); SET_TYPE_RM_SIZE (boolean_type_node, bitsize_int (1)); - build_common_tree_nodes_2 (0); sbitsize_one_node = sbitsize_int (1); sbitsize_unit_node = sbitsize_int (BITS_PER_UNIT); boolean_true_node = TYPE_MAX_VALUE (boolean_type_node); Index: gcc/doc/tm.texi =================================================================== --- gcc/doc/tm.texi (revision 175855) +++ gcc/doc/tm.texi (working copy) @@ -10876,7 +10876,7 @@ instructions or prefetch instructions). To create a built-in function, call the function @code{lang_hooks.builtin_function} which is defined by the language front end. You can use any type nodes set -up by @code{build_common_tree_nodes} and @code{build_common_tree_nodes_2}; +up by @code{build_common_tree_nodes}; only language front ends that use those two functions will call @samp{TARGET_INIT_BUILTINS}. @end deftypefn