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]

Re: [PATCH] Use C90-style function pointer calls in fold-const.c


Hi Zack,

On Sat, 13 Mar 2004, Zack Weinberg wrote:
> > The following patch updates calls of the form "(*lang_hooks.foo) (...)"
> > in fold-const.c to use what I believe is the now preferred C90 style,
> > "lang_hooks.foo (...)".
>
> I recall it was agreed that all calls to function pointers should be
> converted to the C90 implicit-dereference syntax.  As such, I say this
> patch is OK, and I say all other patches which just remove explicit (* )
> from calls through function pointers are also OK.

Many thanks for the policy confirmation.  I've committed both my
original patch to fold-const.c and the one below, that updates all other
calls via the lang_hooks function pointers in the gcc/ subdirectory.
Now I'll not be able to cut-n-paste the old style in future patches :>

The following patch was tested on i686-pc-linux-gnu with a complete
"make bootstrap", all languages except treelang, and regression tested
with a top-level "make -k check" with no new failures.  I also confirmed
with Diego before committing that this shouldn't cause problems for
tree-ssa merges.


2004-03-14  Roger Sayle  <roger@eyesopen.com>

	* alias.c (get_alias_set): Replace calls via (*lang_hooks.foo) ()
	with lang_hooks.foo ().
	* builtins.c (expand_builtin_va_arg): Likewise.
	* c-common.c (fname_as_string, c_common_truthvalue_conversion,
	c_common_type_for_mode, c_common_nodes_and_builtins,
	handle_mode_attribute, handle_vector_size_attribute): Likewise.
	* c-convert.c (convert): Likewise.
	* c-format.c (check_format_types): Likewise.
	* c-objc-common.c (c_tree_printer): Likewise.
	* c-typeck.c (build_unary_op, build_conditional_expr,
	build_binary_op): Likewise.
	* calls.c (try_to_integrate, expand_call,
	emit_library_call_value_1): Likewise.
	* cgraph.c (cgraph_node_name, cgraph_function_possibly_inlined_p):
	Likewise.
	* cgraphunit.c (record_call_1, cgraph_analyze_function,
	cgraph_expand_function): Likewise.
	* convert.c (convert_to_pointer, convert_to_integer): Likewise.
	* coverage.c (build_fn_info_type, build_ctr_info_type,
	build_gcov_info, create_coverage): Likewise.
	* dbxout.c (dbxout_init): Likewise.
	* diagnostic.c (diagnostic_report_current_function): Likewise.
	* dojump.c (do_jump): Likewise.
	* dwarf2out.c (dwarf2_name): Likewise.
	* except.c (init_eh): Likewise.
	* explow.c (expr_size, int_expr_size): Likewise.
	* expmed.c (make_tree, const_mult_add_overflow_p, expand_mult_add):
	Likewise.
	* expr.c (store_expr, store_constructor, safe_from_p,
	expand_expr_real, do_store_flag, try_casesi): Likewise.
	* function.c (push_function_context_to, pop_function_context_from,
	free_after_parsing, assign_stack_local_1, assign_stack_temp_for_type,
	put_var_into_stack, allocate_struct_function, current_function_name):
	Likewise.
	* integrate.c (copy_decl_for_inlining, expand_inline_function):
	Likewise.
	* langhooks.c (lhd_clear_binding_stack, write_global_declarations,
	lhd_print_error_function): Likewise.
	* opts.c (handle_option, decode_options): Likewise.
	* passes.c (open_dump_file): Likewise.
	* print-tree.c (print_node): Likewise.
	* stmt.c (expand_fixup, fixup_gotos, expand_asm_operands,
	expand_decl_cleanup, emit_case_nodes): Likewise.
	* stor-layout.c (variable_size): Likewise.
	* toplev.c (announce_function, wrapup_global_declarations,
	check_global_declarations, compile_file, default_tree_printer,
	process_options, lang_dependent_init, finalize): Likewise.
	* tree-dump.c (dequeue_and_dump): Likewise.
	* tree-inline.c (remap_decl, remap_block, copy_body_r,
	initialize_inlined_parameters, declare_return_variable,
	inlinable_function_p, expand_call_inline, optimize_inline_calls,
	walk_tree, copy_tree_r): Likewise.
	* tree-optimize.c (tree_rest_of_compilation): Likewise.
	* tree.c (decl_assembler_name, tree_size, size_in_bytes, staticp,
	unsafe_for_reeval, get_unwidened, get_narrower, get_callee_fndecl,
	variably_modified_type_p, dump_tree_statistics): Likewise.
	* varasm.c (assemble_variable, compare_constant, copy_constant,
	force_const_mem, compute_reloc_for_constant, output_constant,
	output_addressed_constants, initializer_constant_valid_p): Likewise.


Index: alias.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/alias.c,v
retrieving revision 1.217
diff -c -3 -p -r1.217 alias.c
*** alias.c	10 Mar 2004 06:02:49 -0000	1.217
--- alias.c	14 Mar 2004 16:37:38 -0000
*************** get_alias_set (tree t)
*** 486,492 ****
        /* Remove any nops, then give the language a chance to do
  	 something with this tree before we look at it.  */
        STRIP_NOPS (t);
!       set = (*lang_hooks.get_alias_set) (t);
        if (set != -1)
  	return set;

--- 486,492 ----
        /* Remove any nops, then give the language a chance to do
  	 something with this tree before we look at it.  */
        STRIP_NOPS (t);
!       set = lang_hooks.get_alias_set (t);
        if (set != -1)
  	return set;

*************** get_alias_set (tree t)
*** 577,583 ****
      return TYPE_ALIAS_SET (t);

    /* See if the language has special handling for this type.  */
!   set = (*lang_hooks.get_alias_set) (t);
    if (set != -1)
      return set;

--- 577,583 ----
      return TYPE_ALIAS_SET (t);

    /* See if the language has special handling for this type.  */
!   set = lang_hooks.get_alias_set (t);
    if (set != -1)
      return set;

Index: builtins.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/builtins.c,v
retrieving revision 1.292
diff -c -3 -p -r1.292 builtins.c
*** builtins.c	12 Mar 2004 13:33:34 -0000	1.292
--- builtins.c	14 Mar 2004 16:37:41 -0000
*************** expand_builtin_va_arg (tree valist, tree
*** 4090,4096 ****

    /* Generate a diagnostic for requesting data of a type that cannot
       be passed through `...' due to type promotion at the call site.  */
!   else if ((promoted_type = (*lang_hooks.types.type_promotes_to) (type))
  	   != type)
      {
        const char *name = "<anonymous type>", *pname = 0;
--- 4090,4096 ----

    /* Generate a diagnostic for requesting data of a type that cannot
       be passed through `...' due to type promotion at the call site.  */
!   else if ((promoted_type = lang_hooks.types.type_promotes_to (type))
  	   != type)
      {
        const char *name = "<anonymous type>", *pname = 0;
Index: c-common.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/c-common.c,v
retrieving revision 1.487
diff -c -3 -p -r1.487 c-common.c
*** c-common.c	26 Feb 2004 01:24:37 -0000	1.487
--- c-common.c	14 Mar 2004 16:37:42 -0000
*************** fname_as_string (int pretty_p)
*** 1086,1092 ****
      }

    if (current_function_decl)
!     name = (*lang_hooks.decl_printable_name) (current_function_decl, vrb);

    return name;
  }
--- 1086,1092 ----
      }

    if (current_function_decl)
!     name = lang_hooks.decl_printable_name (current_function_decl, vrb);

    return name;
  }
*************** c_common_truthvalue_conversion (tree exp
*** 2646,2660 ****
      case COMPLEX_EXPR:
        return build_binary_op ((TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1))
  			       ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
! 		(*lang_hooks.truthvalue_conversion) (TREE_OPERAND (expr, 0)),
! 		(*lang_hooks.truthvalue_conversion) (TREE_OPERAND (expr, 1)),
  			      0);

      case NEGATE_EXPR:
      case ABS_EXPR:
      case FLOAT_EXPR:
        /* These don't change whether an object is nonzero or zero.  */
!       return (*lang_hooks.truthvalue_conversion) (TREE_OPERAND (expr, 0));

      case LROTATE_EXPR:
      case RROTATE_EXPR:
--- 2646,2660 ----
      case COMPLEX_EXPR:
        return build_binary_op ((TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1))
  			       ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
! 		lang_hooks.truthvalue_conversion (TREE_OPERAND (expr, 0)),
! 		lang_hooks.truthvalue_conversion (TREE_OPERAND (expr, 1)),
  			      0);

      case NEGATE_EXPR:
      case ABS_EXPR:
      case FLOAT_EXPR:
        /* These don't change whether an object is nonzero or zero.  */
!       return lang_hooks.truthvalue_conversion (TREE_OPERAND (expr, 0));

      case LROTATE_EXPR:
      case RROTATE_EXPR:
*************** c_common_truthvalue_conversion (tree exp
*** 2662,2676 ****
  	 we can't ignore them if their second arg has side-effects.  */
        if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1)))
  	return build (COMPOUND_EXPR, truthvalue_type_node, TREE_OPERAND (expr, 1),
! 		      (*lang_hooks.truthvalue_conversion) (TREE_OPERAND (expr, 0)));
        else
! 	return (*lang_hooks.truthvalue_conversion) (TREE_OPERAND (expr, 0));

      case COND_EXPR:
        /* Distribute the conversion into the arms of a COND_EXPR.  */
        return fold (build (COND_EXPR, truthvalue_type_node, TREE_OPERAND (expr, 0),
! 		(*lang_hooks.truthvalue_conversion) (TREE_OPERAND (expr, 1)),
! 		(*lang_hooks.truthvalue_conversion) (TREE_OPERAND (expr, 2))));

      case CONVERT_EXPR:
        /* Don't cancel the effect of a CONVERT_EXPR from a REFERENCE_TYPE,
--- 2662,2676 ----
  	 we can't ignore them if their second arg has side-effects.  */
        if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1)))
  	return build (COMPOUND_EXPR, truthvalue_type_node, TREE_OPERAND (expr, 1),
! 		      lang_hooks.truthvalue_conversion (TREE_OPERAND (expr, 0)));
        else
! 	return lang_hooks.truthvalue_conversion (TREE_OPERAND (expr, 0));

      case COND_EXPR:
        /* Distribute the conversion into the arms of a COND_EXPR.  */
        return fold (build (COND_EXPR, truthvalue_type_node, TREE_OPERAND (expr, 0),
! 		lang_hooks.truthvalue_conversion (TREE_OPERAND (expr, 1)),
! 		lang_hooks.truthvalue_conversion (TREE_OPERAND (expr, 2))));

      case CONVERT_EXPR:
        /* Don't cancel the effect of a CONVERT_EXPR from a REFERENCE_TYPE,
*************** c_common_truthvalue_conversion (tree exp
*** 2683,2689 ****
        /* If this is widening the argument, we can ignore it.  */
        if (TYPE_PRECISION (TREE_TYPE (expr))
  	  >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
! 	return (*lang_hooks.truthvalue_conversion) (TREE_OPERAND (expr, 0));
        break;

      case MINUS_EXPR:
--- 2683,2689 ----
        /* If this is widening the argument, we can ignore it.  */
        if (TYPE_PRECISION (TREE_TYPE (expr))
  	  >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
! 	return lang_hooks.truthvalue_conversion (TREE_OPERAND (expr, 0));
        break;

      case MINUS_EXPR:
*************** c_common_truthvalue_conversion (tree exp
*** 2732,2739 ****
        return (build_binary_op
  	      ((TREE_SIDE_EFFECTS (expr)
  		? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
! 	(*lang_hooks.truthvalue_conversion) (build_unary_op (REALPART_EXPR, t, 0)),
! 	(*lang_hooks.truthvalue_conversion) (build_unary_op (IMAGPART_EXPR, t, 0)),
  	       0));
      }

--- 2732,2739 ----
        return (build_binary_op
  	      ((TREE_SIDE_EFFECTS (expr)
  		? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
! 	lang_hooks.truthvalue_conversion (build_unary_op (REALPART_EXPR, t, 0)),
! 	lang_hooks.truthvalue_conversion (build_unary_op (IMAGPART_EXPR, t, 0)),
  	       0));
      }

*************** c_common_nodes_and_builtins (void)
*** 3099,3141 ****

    /* These are types that c_common_type_for_size and
       c_common_type_for_mode use.  */
!   (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
! 					    intQI_type_node));
!   (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
! 					    intHI_type_node));
!   (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
! 					    intSI_type_node));
!   (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
! 					    intDI_type_node));
  #if HOST_BITS_PER_WIDE_INT >= 64
!   (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
! 					    get_identifier ("__int128_t"),
! 					    intTI_type_node));
  #endif
!   (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
! 					    unsigned_intQI_type_node));
!   (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
! 					    unsigned_intHI_type_node));
!   (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
! 					    unsigned_intSI_type_node));
!   (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
! 					    unsigned_intDI_type_node));
  #if HOST_BITS_PER_WIDE_INT >= 64
!   (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
! 					    get_identifier ("__uint128_t"),
! 					    unsigned_intTI_type_node));
  #endif

    /* Create the widest literal types.  */
    widest_integer_literal_type_node
      = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
!   (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
! 					    widest_integer_literal_type_node));

    widest_unsigned_literal_type_node
      = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
!   (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
! 					    widest_unsigned_literal_type_node));

    /* `unsigned long' is the standard type for sizeof.
       Note that stddef.h uses `unsigned long',
--- 3099,3141 ----

    /* These are types that c_common_type_for_size and
       c_common_type_for_mode use.  */
!   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
! 					 intQI_type_node));
!   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
! 					 intHI_type_node));
!   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
! 					 intSI_type_node));
!   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
! 					 intDI_type_node));
  #if HOST_BITS_PER_WIDE_INT >= 64
!   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
! 					 get_identifier ("__int128_t"),
! 					 intTI_type_node));
  #endif
!   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
! 					 unsigned_intQI_type_node));
!   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
! 					 unsigned_intHI_type_node));
!   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
! 					 unsigned_intSI_type_node));
!   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
! 					 unsigned_intDI_type_node));
  #if HOST_BITS_PER_WIDE_INT >= 64
!   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
! 					 get_identifier ("__uint128_t"),
! 					 unsigned_intTI_type_node));
  #endif

    /* Create the widest literal types.  */
    widest_integer_literal_type_node
      = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
!   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
! 					 widest_integer_literal_type_node));

    widest_unsigned_literal_type_node
      = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
!   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
! 					 widest_unsigned_literal_type_node));

    /* `unsigned long' is the standard type for sizeof.
       Note that stddef.h uses `unsigned long',
*************** c_common_nodes_and_builtins (void)
*** 3151,3166 ****
    record_builtin_type (RID_DOUBLE, NULL, double_type_node);
    record_builtin_type (RID_MAX, "long double", long_double_type_node);

!   (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
! 					    get_identifier ("complex int"),
! 					    complex_integer_type_node));
!   (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
! 					    get_identifier ("complex float"),
! 					    complex_float_type_node));
!   (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
! 					    get_identifier ("complex double"),
! 					    complex_double_type_node));
!   (*lang_hooks.decls.pushdecl)
      (build_decl (TYPE_DECL, get_identifier ("complex long double"),
  		 complex_long_double_type_node));

--- 3151,3166 ----
    record_builtin_type (RID_DOUBLE, NULL, double_type_node);
    record_builtin_type (RID_MAX, "long double", long_double_type_node);

!   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
! 					 get_identifier ("complex int"),
! 					 complex_integer_type_node));
!   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
! 					 get_identifier ("complex float"),
! 					 complex_float_type_node));
!   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
! 					 get_identifier ("complex double"),
! 					 complex_double_type_node));
!   lang_hooks.decls.pushdecl
      (build_decl (TYPE_DECL, get_identifier ("complex long double"),
  		 complex_long_double_type_node));

*************** c_common_nodes_and_builtins (void)
*** 3184,3195 ****

    if (g77_integer_type_node != NULL_TREE)
      {
!       (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
! 						get_identifier ("__g77_integer"),
! 						g77_integer_type_node));
!       (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
! 						get_identifier ("__g77_uinteger"),
! 						g77_uinteger_type_node));
      }

    if (TYPE_PRECISION (float_type_node) * 2
--- 3184,3195 ----

    if (g77_integer_type_node != NULL_TREE)
      {
!       lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
! 					     get_identifier ("__g77_integer"),
! 					     g77_integer_type_node));
!       lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
! 					     get_identifier ("__g77_uinteger"),
! 					     g77_uinteger_type_node));
      }

    if (TYPE_PRECISION (float_type_node) * 2
*************** c_common_nodes_and_builtins (void)
*** 3209,3220 ****

    if (g77_longint_type_node != NULL_TREE)
      {
!       (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
! 						get_identifier ("__g77_longint"),
! 						g77_longint_type_node));
!       (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
! 						get_identifier ("__g77_ulongint"),
! 						g77_ulongint_type_node));
      }

    record_builtin_type (RID_VOID, NULL, void_type_node);
--- 3209,3220 ----

    if (g77_longint_type_node != NULL_TREE)
      {
!       lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
! 					     get_identifier ("__g77_longint"),
! 					     g77_longint_type_node));
!       lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
! 					     get_identifier ("__g77_ulongint"),
! 					     g77_ulongint_type_node));
      }

    record_builtin_type (RID_VOID, NULL, void_type_node);
*************** c_common_nodes_and_builtins (void)
*** 3281,3295 ****
      = TREE_TYPE (identifier_global_value (get_identifier (PTRDIFF_TYPE)));
    unsigned_ptrdiff_type_node = c_common_unsigned_type (ptrdiff_type_node);

!   (*lang_hooks.decls.pushdecl)
      (build_decl (TYPE_DECL, get_identifier ("__builtin_va_list"),
  		 va_list_type_node));

!   (*lang_hooks.decls.pushdecl)
      (build_decl (TYPE_DECL, get_identifier ("__builtin_ptrdiff_t"),
  		 ptrdiff_type_node));

!   (*lang_hooks.decls.pushdecl)
      (build_decl (TYPE_DECL, get_identifier ("__builtin_size_t"),
  		 sizetype));

--- 3281,3295 ----
      = TREE_TYPE (identifier_global_value (get_identifier (PTRDIFF_TYPE)));
    unsigned_ptrdiff_type_node = c_common_unsigned_type (ptrdiff_type_node);

!   lang_hooks.decls.pushdecl
      (build_decl (TYPE_DECL, get_identifier ("__builtin_va_list"),
  		 va_list_type_node));

!   lang_hooks.decls.pushdecl
      (build_decl (TYPE_DECL, get_identifier ("__builtin_ptrdiff_t"),
  		 ptrdiff_type_node));

!   lang_hooks.decls.pushdecl
      (build_decl (TYPE_DECL, get_identifier ("__builtin_size_t"),
  		 sizetype));

*************** handle_mode_attribute (tree *node, tree
*** 4629,4635 ****

        if (mode == VOIDmode)
  	error ("unknown machine mode `%s'", p);
!       else if (0 == (typefm = (*lang_hooks.types.type_for_mode)
  		     (mode, TREE_UNSIGNED (type))))
  	error ("no data type for mode `%s'", p);
        else if ((TREE_CODE (type) == POINTER_TYPE
--- 4629,4635 ----

        if (mode == VOIDmode)
  	error ("unknown machine mode `%s'", p);
!       else if (0 == (typefm = lang_hooks.types.type_for_mode
  		     (mode, TREE_UNSIGNED (type))))
  	error ("no data type for mode `%s'", p);
        else if ((TREE_CODE (type) == POINTER_TYPE
*************** handle_vector_size_attribute (tree *node
*** 5194,5201 ****
      {
        tree index, array, rt, list_node;

!       new_type = (*lang_hooks.types.type_for_mode) (new_mode,
! 						    TREE_UNSIGNED (type));

        if (!new_type)
  	{
--- 5194,5201 ----
      {
        tree index, array, rt, list_node;

!       new_type = lang_hooks.types.type_for_mode (new_mode,
! 						 TREE_UNSIGNED (type));

        if (!new_type)
  	{
Index: c-convert.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/c-convert.c,v
retrieving revision 1.20
diff -c -3 -p -r1.20 c-convert.c
*** c-convert.c	4 Feb 2004 19:15:16 -0000	1.20
--- c-convert.c	14 Mar 2004 16:37:43 -0000
*************** convert (tree type, tree expr)
*** 95,101 ****
      return fold (convert_to_integer (type, e));
    if (code == BOOLEAN_TYPE)
      {
!       tree t = (*lang_hooks.truthvalue_conversion) (expr);
        if (TREE_CODE (t) == ERROR_MARK)
  	return t;

--- 95,101 ----
      return fold (convert_to_integer (type, e));
    if (code == BOOLEAN_TYPE)
      {
!       tree t = lang_hooks.truthvalue_conversion (expr);
        if (TREE_CODE (t) == ERROR_MARK)
  	return t;

Index: c-format.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/c-format.c,v
retrieving revision 1.51
diff -c -3 -p -r1.51 c-format.c
*** c-format.c	20 Dec 2003 00:00:27 -0000	1.51
--- c-format.c	14 Mar 2004 16:37:45 -0000
***************
*** 1,6 ****
  /* Check calls to formatted I/O functions (-Wformat).
     Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
!    2001, 2002, 2003 Free Software Foundation, Inc.

  This file is part of GCC.

--- 1,6 ----
  /* Check calls to formatted I/O functions (-Wformat).
     Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
!    2001, 2002, 2003, 2004 Free Software Foundation, Inc.

  This file is part of GCC.

*************** check_format_types (int *status, format_
*** 2286,2292 ****
  	abort ();

        if (types->pointer_count == 0)
! 	wanted_type = (*lang_hooks.types.type_promotes_to) (wanted_type);

        STRIP_NOPS (cur_param);

--- 2286,2292 ----
  	abort ();

        if (types->pointer_count == 0)
! 	wanted_type = lang_hooks.types.type_promotes_to (wanted_type);

        STRIP_NOPS (cur_param);

Index: c-objc-common.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/c-objc-common.c,v
retrieving revision 1.40
diff -c -3 -p -r1.40 c-objc-common.c
*** c-objc-common.c	12 Feb 2004 21:42:17 -0000	1.40
--- c-objc-common.c	14 Mar 2004 16:37:45 -0000
*************** c_tree_printer (pretty_printer *pp, text
*** 290,303 ****
      case 'D':
      case 'F':
        if (DECL_NAME (t))
! 	n = (*lang_hooks.decl_printable_name) (t, 2);
        break;

      case 'T':
        if (TREE_CODE (t) == TYPE_DECL)
  	{
  	  if (DECL_NAME (t))
! 	    n = (*lang_hooks.decl_printable_name) (t, 2);
  	}
        else
  	{
--- 290,303 ----
      case 'D':
      case 'F':
        if (DECL_NAME (t))
! 	n = lang_hooks.decl_printable_name (t, 2);
        break;

      case 'T':
        if (TREE_CODE (t) == TYPE_DECL)
  	{
  	  if (DECL_NAME (t))
! 	    n = lang_hooks.decl_printable_name (t, 2);
  	}
        else
  	{
Index: c-typeck.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/c-typeck.c,v
retrieving revision 1.286
diff -c -3 -p -r1.286 c-typeck.c
*** c-typeck.c	11 Mar 2004 05:54:23 -0000	1.286
--- c-typeck.c	14 Mar 2004 16:37:50 -0000
*************** build_unary_op (enum tree_code code, tre
*** 2285,2291 ****
  	  error ("wrong type argument to unary exclamation mark");
  	  return error_mark_node;
  	}
!       arg = (*lang_hooks.truthvalue_conversion) (arg);
        return invert_truthvalue (arg);

      case NOP_EXPR:
--- 2285,2291 ----
  	  error ("wrong type argument to unary exclamation mark");
  	  return error_mark_node;
  	}
!       arg = lang_hooks.truthvalue_conversion (arg);
        return invert_truthvalue (arg);

      case NOP_EXPR:
*************** build_conditional_expr (tree ifexp, tree
*** 2658,2664 ****
    tree result_type = NULL;
    tree orig_op1 = op1, orig_op2 = op2;

!   ifexp = (*lang_hooks.truthvalue_conversion) (default_conversion (ifexp));

    /* Promote both alternatives.  */

--- 2658,2664 ----
    tree result_type = NULL;
    tree orig_op1 = op1, orig_op2 = op2;

!   ifexp = lang_hooks.truthvalue_conversion (default_conversion (ifexp));

    /* Promote both alternatives.  */

*************** build_binary_op (enum tree_code code, tr
*** 6566,6573 ****
  	     but that does not mean the operands should be
  	     converted to ints!  */
  	  result_type = integer_type_node;
! 	  op0 = (*lang_hooks.truthvalue_conversion) (op0);
! 	  op1 = (*lang_hooks.truthvalue_conversion) (op1);
  	  converted = 1;
  	}
        break;
--- 6566,6573 ----
  	     but that does not mean the operands should be
  	     converted to ints!  */
  	  result_type = integer_type_node;
! 	  op0 = lang_hooks.truthvalue_conversion (op0);
! 	  op1 = lang_hooks.truthvalue_conversion (op1);
  	  converted = 1;
  	}
        break;
Index: calls.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/calls.c,v
retrieving revision 1.325
diff -c -3 -p -r1.325 calls.c
*** calls.c	12 Mar 2004 10:03:27 -0000	1.325
--- calls.c	14 Mar 2004 16:37:53 -0000
*************** try_to_integrate (tree fndecl, tree actp
*** 1829,1835 ****
        warning ("%Jinlining failed in call to '%F'", fndecl, fndecl);
        warning ("called from here");
      }
!   (*lang_hooks.mark_addressable) (fndecl);
    return (rtx) (size_t) - 1;
  }

--- 1829,1835 ----
        warning ("%Jinlining failed in call to '%F'", fndecl, fndecl);
        warning ("called from here");
      }
!   lang_hooks.mark_addressable (fndecl);
    return (rtx) (size_t) - 1;
  }

*************** expand_call (tree exp, rtx target, int i
*** 2201,2207 ****
  	      warning ("%Jcan't inline call to '%F'", fndecl, fndecl);
  	      warning ("called from here");
  	    }
! 	  (*lang_hooks.mark_addressable) (fndecl);
  	}

        if (ignore
--- 2201,2207 ----
  	      warning ("%Jcan't inline call to '%F'", fndecl, fndecl);
  	      warning ("called from here");
  	    }
! 	  lang_hooks.mark_addressable (fndecl);
  	}

        if (ignore
*************** expand_call (tree exp, rtx target, int i
*** 2284,2290 ****
  	    /* In case this is a static function, note that it has been
  	       used.  */
  	    if (! TREE_ADDRESSABLE (fndecl))
! 	      (*lang_hooks.mark_addressable) (fndecl);
  	    is_integrable = 0;
  	  }
        }
--- 2284,2290 ----
  	    /* In case this is a static function, note that it has been
  	       used.  */
  	    if (! TREE_ADDRESSABLE (fndecl))
! 	      lang_hooks.mark_addressable (fndecl);
  	    is_integrable = 0;
  	  }
        }
*************** expand_call (tree exp, rtx target, int i
*** 2532,2538 ****
  	  != RETURN_POPS_ARGS (current_function_decl,
  			       TREE_TYPE (current_function_decl),
  			       current_function_args_size))
!       || !(*lang_hooks.decls.ok_for_sibcall) (fndecl))
      try_tail_call = 0;

    if (try_tail_call || try_tail_recursion)
--- 2532,2538 ----
  	  != RETURN_POPS_ARGS (current_function_decl,
  			       TREE_TYPE (current_function_decl),
  			       current_function_args_size))
!       || !lang_hooks.decls.ok_for_sibcall (fndecl))
      try_tail_call = 0;

    if (try_tail_call || try_tail_recursion)
*************** emit_library_call_value_1 (int retval, r
*** 3751,3757 ****
       decide where in memory it should come back.  */
    if (outmode != VOIDmode)
      {
!       tfom = (*lang_hooks.types.type_for_mode) (outmode, 0);
        if (aggregate_value_p (tfom, 0))
  	{
  #ifdef PCC_STATIC_STRUCT_RETURN
--- 3751,3757 ----
       decide where in memory it should come back.  */
    if (outmode != VOIDmode)
      {
!       tfom = lang_hooks.types.type_for_mode (outmode, 0);
        if (aggregate_value_p (tfom, 0))
  	{
  #ifdef PCC_STATIC_STRUCT_RETURN
*************** emit_library_call_value_1 (int retval, r
*** 3896,3908 ****
  	    slot = val;
  	  else if (must_copy)
  	    {
! 	      slot = assign_temp ((*lang_hooks.types.type_for_mode) (mode, 0),
  				  0, 1, 1);
  	      emit_move_insn (slot, val);
  	    }
  	  else
  	    {
! 	      tree type = (*lang_hooks.types.type_for_mode) (mode, 0);

  	      slot
  		= gen_rtx_MEM (mode,
--- 3896,3908 ----
  	    slot = val;
  	  else if (must_copy)
  	    {
! 	      slot = assign_temp (lang_hooks.types.type_for_mode (mode, 0),
  				  0, 1, 1);
  	      emit_move_insn (slot, val);
  	    }
  	  else
  	    {
! 	      tree type = lang_hooks.types.type_for_mode (mode, 0);

  	      slot
  		= gen_rtx_MEM (mode,
Index: cgraph.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cgraph.c,v
retrieving revision 1.44
diff -c -3 -p -r1.44 cgraph.c
*** cgraph.c	17 Feb 2004 21:33:32 -0000	1.44
--- cgraph.c	14 Mar 2004 16:38:04 -0000
*************** cgraph_rtl_info (tree decl)
*** 353,359 ****
  const char *
  cgraph_node_name (struct cgraph_node *node)
  {
!   return (*lang_hooks.decl_printable_name) (node->decl, 2);
  }

  /* Dump the callgraph.  */
--- 353,359 ----
  const char *
  cgraph_node_name (struct cgraph_node *node)
  {
!   return lang_hooks.decl_printable_name (node->decl, 2);
  }

  /* Dump the callgraph.  */
*************** cgraph_function_possibly_inlined_p (tree
*** 628,634 ****
    if (!cgraph_global_info_ready)
      return (DECL_INLINE (decl)
  	    && (!flag_really_no_inline
! 		|| (*lang_hooks.tree_inlining.disregard_inline_limits) (decl)));
    return cgraph_node (decl)->global.inlined;
  }

--- 628,634 ----
    if (!cgraph_global_info_ready)
      return (DECL_INLINE (decl)
  	    && (!flag_really_no_inline
! 		|| lang_hooks.tree_inlining.disregard_inline_limits (decl)));
    return cgraph_node (decl)->global.inlined;
  }

Index: cgraphunit.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cgraphunit.c,v
retrieving revision 1.52
diff -c -3 -p -r1.52 cgraphunit.c
*** cgraphunit.c	17 Feb 2004 21:33:32 -0000	1.52
--- cgraphunit.c	14 Mar 2004 16:38:05 -0000
*************** record_call_1 (tree *tp, int *walk_subtr
*** 293,299 ****
  	}

        if ((unsigned int) TREE_CODE (t) >= LAST_AND_UNUSED_TREE_CODE)
! 	return (*lang_hooks.callgraph.analyze_expr) (tp, walk_subtrees, data);
        break;
      }

--- 293,299 ----
  	}

        if ((unsigned int) TREE_CODE (t) >= LAST_AND_UNUSED_TREE_CODE)
! 	return lang_hooks.callgraph.analyze_expr (tp, walk_subtrees, data);
        break;
      }

*************** cgraph_analyze_function (struct cgraph_n
*** 329,338 ****
    node->local.inlinable = tree_inlinable_function_p (decl);
    if (!node->local.self_insns)
      node->local.self_insns
!       = (*lang_hooks.tree_inlining.estimate_num_insns) (decl);
    if (node->local.inlinable)
      node->local.disregard_inline_limits
!       = (*lang_hooks.tree_inlining.disregard_inline_limits) (decl);
    for (e = node->callers; e; e = e->next_caller)
      if (e->inline_failed)
        {
--- 329,338 ----
    node->local.inlinable = tree_inlinable_function_p (decl);
    if (!node->local.self_insns)
      node->local.self_insns
!       = lang_hooks.tree_inlining.estimate_num_insns (decl);
    if (node->local.inlinable)
      node->local.disregard_inline_limits
!       = lang_hooks.tree_inlining.disregard_inline_limits (decl);
    for (e = node->callers; e; e = e->next_caller)
      if (e->inline_failed)
        {
*************** cgraph_expand_function (struct cgraph_no
*** 530,536 ****

    /* Generate RTL for the body of DECL.  Nested functions are expanded
       via lang_expand_decl_stmt.  */
!   (*lang_hooks.callgraph.expand_function) (decl);
    if (DECL_DEFER_OUTPUT (decl))
      abort ();

--- 530,536 ----

    /* Generate RTL for the body of DECL.  Nested functions are expanded
       via lang_expand_decl_stmt.  */
!   lang_hooks.callgraph.expand_function (decl);
    if (DECL_DEFER_OUTPUT (decl))
      abort ();

Index: convert.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/convert.c,v
retrieving revision 1.37
diff -c -3 -p -r1.37 convert.c
*** convert.c	23 Feb 2004 17:02:49 -0000	1.37
--- convert.c	14 Mar 2004 16:38:15 -0000
*************** convert_to_pointer (tree type, tree expr
*** 63,69 ****

        return
  	convert_to_pointer (type,
! 			    convert ((*lang_hooks.types.type_for_size)
  				     (POINTER_SIZE, 0), expr));

      default:
--- 63,69 ----

        return
  	convert_to_pointer (type,
! 			    convert (lang_hooks.types.type_for_size
  				     (POINTER_SIZE, 0), expr));

      default:
*************** convert_to_integer (tree type, tree expr
*** 304,311 ****
        if (integer_zerop (expr))
  	expr = integer_zero_node;
        else
! 	expr = fold (build1 (CONVERT_EXPR, (*lang_hooks.types.type_for_size)
! 			     (POINTER_SIZE, 0), expr));

        return convert_to_integer (type, expr);

--- 304,312 ----
        if (integer_zerop (expr))
  	expr = integer_zero_node;
        else
! 	expr = fold (build1 (CONVERT_EXPR,
! 			     lang_hooks.types.type_for_size (POINTER_SIZE, 0),
! 			     expr));

        return convert_to_integer (type, expr);

*************** convert_to_integer (tree type, tree expr
*** 378,384 ****
        else if (TREE_CODE (type) == ENUMERAL_TYPE
  	       || outprec != GET_MODE_BITSIZE (TYPE_MODE (type)))
  	return build1 (NOP_EXPR, type,
! 		       convert ((*lang_hooks.types.type_for_mode)
  				(TYPE_MODE (type), TREE_UNSIGNED (type)),
  				expr));

--- 379,385 ----
        else if (TREE_CODE (type) == ENUMERAL_TYPE
  	       || outprec != GET_MODE_BITSIZE (TYPE_MODE (type)))
  	return build1 (NOP_EXPR, type,
! 		       convert (lang_hooks.types.type_for_mode
  				(TYPE_MODE (type), TREE_UNSIGNED (type)),
  				expr));

*************** convert_to_integer (tree type, tree expr
*** 490,496 ****
  		/* Can't do arithmetic in enumeral types
  		   so use an integer type that will hold the values.  */
  		if (TREE_CODE (typex) == ENUMERAL_TYPE)
! 		  typex = (*lang_hooks.types.type_for_size)
  		    (TYPE_PRECISION (typex), TREE_UNSIGNED (typex));

  		/* But now perhaps TYPEX is as wide as INPREC.
--- 491,497 ----
  		/* Can't do arithmetic in enumeral types
  		   so use an integer type that will hold the values.  */
  		if (TREE_CODE (typex) == ENUMERAL_TYPE)
! 		  typex = lang_hooks.types.type_for_size
  		    (TYPE_PRECISION (typex), TREE_UNSIGNED (typex));

  		/* But now perhaps TYPEX is as wide as INPREC.
*************** convert_to_integer (tree type, tree expr
*** 517,525 ****
  				|| ex_form == LROTATE_EXPR
  				|| ex_form == RROTATE_EXPR))
  			|| ex_form == LSHIFT_EXPR)
! 		      typex = (*lang_hooks.types.unsigned_type) (typex);
  		    else
! 		      typex = (*lang_hooks.types.signed_type) (typex);
  		    return convert (type,
  				    fold (build (ex_form, typex,
  						 convert (typex, arg0),
--- 518,526 ----
  				|| ex_form == LROTATE_EXPR
  				|| ex_form == RROTATE_EXPR))
  			|| ex_form == LSHIFT_EXPR)
! 		      typex = lang_hooks.types.unsigned_type (typex);
  		    else
! 		      typex = lang_hooks.types.signed_type (typex);
  		    return convert (type,
  				    fold (build (ex_form, typex,
  						 convert (typex, arg0),
*************** convert_to_integer (tree type, tree expr
*** 539,545 ****
  	    /* Can't do arithmetic in enumeral types
  	       so use an integer type that will hold the values.  */
  	    if (TREE_CODE (typex) == ENUMERAL_TYPE)
! 	      typex = (*lang_hooks.types.type_for_size)
  		(TYPE_PRECISION (typex), TREE_UNSIGNED (typex));

  	    /* But now perhaps TYPEX is as wide as INPREC.
--- 540,546 ----
  	    /* Can't do arithmetic in enumeral types
  	       so use an integer type that will hold the values.  */
  	    if (TREE_CODE (typex) == ENUMERAL_TYPE)
! 	      typex = lang_hooks.types.type_for_size
  		(TYPE_PRECISION (typex), TREE_UNSIGNED (typex));

  	    /* But now perhaps TYPEX is as wide as INPREC.
*************** convert_to_integer (tree type, tree expr
*** 550,558 ****
  		/* Don't do unsigned arithmetic where signed was wanted,
  		   or vice versa.  */
  		if (TREE_UNSIGNED (TREE_TYPE (expr)))
! 		  typex = (*lang_hooks.types.unsigned_type) (typex);
  		else
! 		  typex = (*lang_hooks.types.signed_type) (typex);
  		return convert (type,
  				fold (build1 (ex_form, typex,
  					      convert (typex,
--- 551,559 ----
  		/* Don't do unsigned arithmetic where signed was wanted,
  		   or vice versa.  */
  		if (TREE_UNSIGNED (TREE_TYPE (expr)))
! 		  typex = lang_hooks.types.unsigned_type (typex);
  		else
! 		  typex = lang_hooks.types.signed_type (typex);
  		return convert (type,
  				fold (build1 (ex_form, typex,
  					      convert (typex,
Index: coverage.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/coverage.c,v
retrieving revision 1.30
diff -c -3 -p -r1.30 coverage.c
*** coverage.c	3 Mar 2004 00:46:06 -0000	1.30
--- coverage.c	14 Mar 2004 16:38:15 -0000
*************** coverage_end_function (void)
*** 560,566 ****
  static tree
  build_fn_info_type (unsigned int counters)
  {
!   tree type = (*lang_hooks.types.make_type) (RECORD_TYPE);
    tree field, fields;
    tree array_type;

--- 560,566 ----
  static tree
  build_fn_info_type (unsigned int counters)
  {
!   tree type = lang_hooks.types.make_type (RECORD_TYPE);
    tree field, fields;
    tree array_type;

*************** build_fn_info_value (const struct functi
*** 634,640 ****
  static tree
  build_ctr_info_type (void)
  {
!   tree type = (*lang_hooks.types.make_type) (RECORD_TYPE);
    tree field, fields = NULL_TREE;
    tree gcov_ptr_type = build_pointer_type (GCOV_TYPE_NODE);
    tree gcov_merge_fn_type;
--- 634,640 ----
  static tree
  build_ctr_info_type (void)
  {
!   tree type = lang_hooks.types.make_type (RECORD_TYPE);
    tree field, fields = NULL_TREE;
    tree gcov_ptr_type = build_pointer_type (GCOV_TYPE_NODE);
    tree gcov_merge_fn_type;
*************** build_gcov_info (void)
*** 744,750 ****
      if (prg_ctr_mask & (1 << ix))
        n_ctr_types++;

!   type = (*lang_hooks.types.make_type) (RECORD_TYPE);
    const_type = build_qualified_type (type, TYPE_QUAL_CONST);

    /* Version ident */
--- 744,750 ----
      if (prg_ctr_mask & (1 << ix))
        n_ctr_types++;

!   type = lang_hooks.types.make_type (RECORD_TYPE);
    const_type = build_qualified_type (type, TYPE_QUAL_CONST);

    /* Version ident */
*************** create_coverage (void)
*** 902,908 ****
    DECL_RESULT (ctor) = build_decl (RESULT_DECL, NULL_TREE, void_type_node);
    DECL_UNINLINABLE (ctor) = 1;

!   ctor = (*lang_hooks.decls.pushdecl) (ctor);
    rest_of_decl_compilation (ctor, 0, 1, 0);
    announce_function (ctor);
    current_function_decl = ctor;
--- 902,908 ----
    DECL_RESULT (ctor) = build_decl (RESULT_DECL, NULL_TREE, void_type_node);
    DECL_UNINLINABLE (ctor) = 1;

!   ctor = lang_hooks.decls.pushdecl (ctor);
    rest_of_decl_compilation (ctor, 0, 1, 0);
    announce_function (ctor);
    current_function_decl = ctor;
Index: dbxout.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/dbxout.c,v
retrieving revision 1.179
diff -c -3 -p -r1.179 dbxout.c
*** dbxout.c	10 Mar 2004 15:12:10 -0000	1.179
--- dbxout.c	14 Mar 2004 16:38:20 -0000
*************** static void
*** 476,482 ****
  dbxout_init (const char *input_file_name)
  {
    char ltext_label_name[100];
!   tree syms = (*lang_hooks.decls.getdecls) ();

    asmfile = asm_out_file;

--- 476,482 ----
  dbxout_init (const char *input_file_name)
  {
    char ltext_label_name[100];
!   tree syms = lang_hooks.decls.getdecls ();

    asmfile = asm_out_file;

Index: diagnostic.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/diagnostic.c,v
retrieving revision 1.135
diff -c -3 -p -r1.135 diagnostic.c
*** diagnostic.c	27 Feb 2004 14:50:41 -0000	1.135
--- diagnostic.c	14 Mar 2004 16:38:21 -0000
*************** void
*** 293,299 ****
  diagnostic_report_current_function (diagnostic_context *context)
  {
    diagnostic_report_current_module (context);
!   (*lang_hooks.print_error_function) (context, input_filename);
  }

  void
--- 293,299 ----
  diagnostic_report_current_function (diagnostic_context *context)
  {
    diagnostic_report_current_module (context);
!   lang_hooks.print_error_function (context, input_filename);
  }

  void
Index: dojump.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/dojump.c,v
retrieving revision 1.10
diff -c -3 -p -r1.10 dojump.c
*** dojump.c	9 Mar 2004 17:06:23 -0000	1.10
--- dojump.c	14 Mar 2004 16:38:22 -0000
***************
*** 1,6 ****
  /* Convert tree expression to rtl instructions, for GNU compiler.
     Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
!    2000, 2001, 2002, 2003 Free Software Foundation, Inc.

  This file is part of GCC.

--- 1,6 ----
  /* Convert tree expression to rtl instructions, for GNU compiler.
     Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
!    2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.

  This file is part of GCC.

*************** do_jump (tree exp, rtx if_false_label, r
*** 151,157 ****
      case UNSAVE_EXPR:
        do_jump (TREE_OPERAND (exp, 0), if_false_label, if_true_label);
        TREE_OPERAND (exp, 0)
! 	= (*lang_hooks.unsave_expr_now) (TREE_OPERAND (exp, 0));
        break;

      case NOP_EXPR:
--- 151,157 ----
      case UNSAVE_EXPR:
        do_jump (TREE_OPERAND (exp, 0), if_false_label, if_true_label);
        TREE_OPERAND (exp, 0)
! 	= lang_hooks.unsave_expr_now (TREE_OPERAND (exp, 0));
        break;

      case NOP_EXPR:
*************** do_jump (tree exp, rtx if_false_label, r
*** 218,224 ****
            && TYPE_PRECISION (TREE_TYPE (exp)) <= HOST_BITS_PER_WIDE_INT
            && (i = tree_floor_log2 (TREE_OPERAND (exp, 1))) >= 0
            && (mode = mode_for_size (i + 1, MODE_INT, 0)) != BLKmode
!           && (type = (*lang_hooks.types.type_for_mode) (mode, 1)) != 0
            && TYPE_PRECISION (type) < TYPE_PRECISION (TREE_TYPE (exp))
            && (cmp_optab->handlers[(int) TYPE_MODE (type)].insn_code
                != CODE_FOR_nothing))
--- 218,224 ----
            && TYPE_PRECISION (TREE_TYPE (exp)) <= HOST_BITS_PER_WIDE_INT
            && (i = tree_floor_log2 (TREE_OPERAND (exp, 1))) >= 0
            && (mode = mode_for_size (i + 1, MODE_INT, 0)) != BLKmode
!           && (type = lang_hooks.types.type_for_mode (mode, 1)) != 0
            && TYPE_PRECISION (type) < TYPE_PRECISION (TREE_TYPE (exp))
            && (cmp_optab->handlers[(int) TYPE_MODE (type)].insn_code
                != CODE_FOR_nothing))
*************** do_jump (tree exp, rtx if_false_label, r
*** 278,284 ****
          get_inner_reference (exp, &bitsize, &bitpos, &offset, &mode,
                               &unsignedp, &volatilep);

!         type = (*lang_hooks.types.type_for_size) (bitsize, unsignedp);
          if (! SLOW_BYTE_ACCESS
              && type != 0 && bitsize >= 0
              && TYPE_PRECISION (type) < TYPE_PRECISION (TREE_TYPE (exp))
--- 278,284 ----
          get_inner_reference (exp, &bitsize, &bitpos, &offset, &mode,
                               &unsignedp, &volatilep);

!         type = lang_hooks.types.type_for_size (bitsize, unsignedp);
          if (! SLOW_BYTE_ACCESS
              && type != 0 && bitsize >= 0
              && TYPE_PRECISION (type) < TYPE_PRECISION (TREE_TYPE (exp))
Index: dwarf2out.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/dwarf2out.c,v
retrieving revision 1.500
diff -c -3 -p -r1.500 dwarf2out.c
*** dwarf2out.c	12 Mar 2004 17:08:56 -0000	1.500
--- dwarf2out.c	14 Mar 2004 16:38:25 -0000
*************** output_comp_unit (dw_die_ref die, int ou
*** 6983,6989 ****
  static const char *
  dwarf2_name (tree decl, int scope)
  {
!   return (*lang_hooks.decl_printable_name) (decl, scope ? 1 : 0);
  }

  /* Add a new entry to .debug_pubnames if appropriate.  */
--- 6983,6989 ----
  static const char *
  dwarf2_name (tree decl, int scope)
  {
!   return lang_hooks.decl_printable_name (decl, scope ? 1 : 0);
  }

  /* Add a new entry to .debug_pubnames if appropriate.  */
Index: except.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/except.c,v
retrieving revision 1.263
diff -c -3 -p -r1.263 except.c
*** except.c	11 Mar 2004 23:19:51 -0000	1.263
--- except.c	14 Mar 2004 16:38:27 -0000
*************** init_eh (void)
*** 377,383 ****
      {
        tree f_jbuf, f_per, f_lsda, f_prev, f_cs, f_data, tmp;

!       sjlj_fc_type_node = (*lang_hooks.types.make_type) (RECORD_TYPE);

        f_prev = build_decl (FIELD_DECL, get_identifier ("__prev"),
  			   build_pointer_type (sjlj_fc_type_node));
--- 377,383 ----
      {
        tree f_jbuf, f_per, f_lsda, f_prev, f_cs, f_data, tmp;

!       sjlj_fc_type_node = lang_hooks.types.make_type (RECORD_TYPE);

        f_prev = build_decl (FIELD_DECL, get_identifier ("__prev"),
  			   build_pointer_type (sjlj_fc_type_node));
*************** init_eh (void)
*** 388,394 ****
        DECL_FIELD_CONTEXT (f_cs) = sjlj_fc_type_node;

        tmp = build_index_type (build_int_2 (4 - 1, 0));
!       tmp = build_array_type ((*lang_hooks.types.type_for_mode) (word_mode, 1),
  			      tmp);
        f_data = build_decl (FIELD_DECL, get_identifier ("__data"), tmp);
        DECL_FIELD_CONTEXT (f_data) = sjlj_fc_type_node;
--- 388,394 ----
        DECL_FIELD_CONTEXT (f_cs) = sjlj_fc_type_node;

        tmp = build_index_type (build_int_2 (4 - 1, 0));
!       tmp = build_array_type (lang_hooks.types.type_for_mode (word_mode, 1),
  			      tmp);
        f_data = build_decl (FIELD_DECL, get_identifier ("__data"), tmp);
        DECL_FIELD_CONTEXT (f_data) = sjlj_fc_type_node;
Index: explow.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/explow.c,v
retrieving revision 1.120
diff -c -3 -p -r1.120 explow.c
*** explow.c	27 Feb 2004 14:50:41 -0000	1.120
--- explow.c	14 Mar 2004 16:38:27 -0000
*************** eliminate_constant_term (rtx x, rtx *con
*** 240,246 ****
  rtx
  expr_size (tree exp)
  {
!   tree size = (*lang_hooks.expr_size) (exp);

    if (CONTAINS_PLACEHOLDER_P (size))
      size = build (WITH_RECORD_EXPR, sizetype, size, exp);
--- 240,246 ----
  rtx
  expr_size (tree exp)
  {
!   tree size = lang_hooks.expr_size (exp);

    if (CONTAINS_PLACEHOLDER_P (size))
      size = build (WITH_RECORD_EXPR, sizetype, size, exp);
*************** expr_size (tree exp)
*** 254,260 ****
  HOST_WIDE_INT
  int_expr_size (tree exp)
  {
!   tree t = (*lang_hooks.expr_size) (exp);

    if (t == 0
        || TREE_CODE (t) != INTEGER_CST
--- 254,260 ----
  HOST_WIDE_INT
  int_expr_size (tree exp)
  {
!   tree t = lang_hooks.expr_size (exp);

    if (t == 0
        || TREE_CODE (t) != INTEGER_CST
Index: expmed.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/expmed.c,v
retrieving revision 1.150
diff -c -3 -p -r1.150 expmed.c
*** expmed.c	21 Feb 2004 18:41:48 -0000	1.150
--- expmed.c	14 Mar 2004 16:38:28 -0000
*************** make_tree (tree type, rtx x)
*** 4180,4193 ****
  			  make_tree (type, XEXP (x, 1))));

      case LSHIFTRT:
!       t = (*lang_hooks.types.unsigned_type) (type);
        return fold (convert (type,
  			    build (RSHIFT_EXPR, t,
  				   make_tree (t, XEXP (x, 0)),
  				   make_tree (type, XEXP (x, 1)))));

      case ASHIFTRT:
!       t = (*lang_hooks.types.signed_type) (type);
        return fold (convert (type,
  			    build (RSHIFT_EXPR, t,
  				   make_tree (t, XEXP (x, 0)),
--- 4180,4193 ----
  			  make_tree (type, XEXP (x, 1))));

      case LSHIFTRT:
!       t = lang_hooks.types.unsigned_type (type);
        return fold (convert (type,
  			    build (RSHIFT_EXPR, t,
  				   make_tree (t, XEXP (x, 0)),
  				   make_tree (type, XEXP (x, 1)))));

      case ASHIFTRT:
!       t = lang_hooks.types.signed_type (type);
        return fold (convert (type,
  			    build (RSHIFT_EXPR, t,
  				   make_tree (t, XEXP (x, 0)),
*************** make_tree (tree type, rtx x)
*** 4195,4201 ****

      case DIV:
        if (TREE_CODE (type) != REAL_TYPE)
! 	t = (*lang_hooks.types.signed_type) (type);
        else
  	t = type;

--- 4195,4201 ----

      case DIV:
        if (TREE_CODE (type) != REAL_TYPE)
! 	t = lang_hooks.types.signed_type (type);
        else
  	t = type;

*************** make_tree (tree type, rtx x)
*** 4204,4210 ****
  				   make_tree (t, XEXP (x, 0)),
  				   make_tree (t, XEXP (x, 1)))));
      case UDIV:
!       t = (*lang_hooks.types.unsigned_type) (type);
        return fold (convert (type,
  			    build (TRUNC_DIV_EXPR, t,
  				   make_tree (t, XEXP (x, 0)),
--- 4204,4210 ----
  				   make_tree (t, XEXP (x, 0)),
  				   make_tree (t, XEXP (x, 1)))));
      case UDIV:
!       t = lang_hooks.types.unsigned_type (type);
        return fold (convert (type,
  			    build (TRUNC_DIV_EXPR, t,
  				   make_tree (t, XEXP (x, 0)),
*************** make_tree (tree type, rtx x)
*** 4212,4219 ****

      case SIGN_EXTEND:
      case ZERO_EXTEND:
!       t = (*lang_hooks.types.type_for_mode) (GET_MODE (XEXP (x, 0)),
! 					     GET_CODE (x) == ZERO_EXTEND);
        return fold (convert (type, make_tree (t, XEXP (x, 0))));

     default:
--- 4212,4219 ----

      case SIGN_EXTEND:
      case ZERO_EXTEND:
!       t = lang_hooks.types.type_for_mode (GET_MODE (XEXP (x, 0)),
! 					  GET_CODE (x) == ZERO_EXTEND);
        return fold (convert (type, make_tree (t, XEXP (x, 0))));

     default:
*************** const_mult_add_overflow_p (rtx x, rtx mu
*** 4245,4251 ****
  {
    tree type, mult_type, add_type, result;

!   type = (*lang_hooks.types.type_for_mode) (mode, unsignedp);

    /* In order to get a proper overflow indication from an unsigned
       type, we have to pretend that it's a sizetype.  */
--- 4245,4251 ----
  {
    tree type, mult_type, add_type, result;

!   type = lang_hooks.types.type_for_mode (mode, unsignedp);

    /* In order to get a proper overflow indication from an unsigned
       type, we have to pretend that it's a sizetype.  */
*************** const_mult_add_overflow_p (rtx x, rtx mu
*** 4257,4263 ****
      }

    add_type = (GET_MODE (add) == VOIDmode ? mult_type
! 	      : (*lang_hooks.types.type_for_mode) (GET_MODE (add), unsignedp));

    result = fold (build (PLUS_EXPR, mult_type,
  			fold (build (MULT_EXPR, mult_type,
--- 4257,4263 ----
      }

    add_type = (GET_MODE (add) == VOIDmode ? mult_type
! 	      : lang_hooks.types.type_for_mode (GET_MODE (add), unsignedp));

    result = fold (build (PLUS_EXPR, mult_type,
  			fold (build (MULT_EXPR, mult_type,
*************** rtx
*** 4280,4289 ****
  expand_mult_add (rtx x, rtx target, rtx mult, rtx add, enum machine_mode mode,
  		 int unsignedp)
  {
!   tree type = (*lang_hooks.types.type_for_mode) (mode, unsignedp);
    tree add_type = (GET_MODE (add) == VOIDmode
! 		   ? type: (*lang_hooks.types.type_for_mode) (GET_MODE (add),
! 							      unsignedp));
    tree result =  fold (build (PLUS_EXPR, type,
  			      fold (build (MULT_EXPR, type,
  					   make_tree (type, x),
--- 4280,4289 ----
  expand_mult_add (rtx x, rtx target, rtx mult, rtx add, enum machine_mode mode,
  		 int unsignedp)
  {
!   tree type = lang_hooks.types.type_for_mode (mode, unsignedp);
    tree add_type = (GET_MODE (add) == VOIDmode
! 		   ? type: lang_hooks.types.type_for_mode (GET_MODE (add),
! 							   unsignedp));
    tree result =  fold (build (PLUS_EXPR, type,
  			      fold (build (MULT_EXPR, type,
  					   make_tree (type, x),
Index: expr.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/expr.c,v
retrieving revision 1.632
diff -c -3 -p -r1.632 expr.c
*** expr.c	13 Mar 2004 18:16:12 -0000	1.632
--- expr.c	14 Mar 2004 16:38:30 -0000
*************** store_expr (tree exp, rtx target, int wa
*** 4128,4137 ****
  	  if (TREE_UNSIGNED (TREE_TYPE (exp))
  	      != SUBREG_PROMOTED_UNSIGNED_P (target))
  	    exp = convert
! 	      ((*lang_hooks.types.signed_or_unsigned_type)
  	       (SUBREG_PROMOTED_UNSIGNED_P (target), TREE_TYPE (exp)), exp);

! 	  exp = convert ((*lang_hooks.types.type_for_mode)
  			 (GET_MODE (SUBREG_REG (target)),
  			  SUBREG_PROMOTED_UNSIGNED_P (target)),
  			 exp);
--- 4128,4137 ----
  	  if (TREE_UNSIGNED (TREE_TYPE (exp))
  	      != SUBREG_PROMOTED_UNSIGNED_P (target))
  	    exp = convert
! 	      (lang_hooks.types.signed_or_unsigned_type
  	       (SUBREG_PROMOTED_UNSIGNED_P (target), TREE_TYPE (exp)), exp);

! 	  exp = convert (lang_hooks.types.type_for_mode
  			 (GET_MODE (SUBREG_REG (target)),
  			  SUBREG_PROMOTED_UNSIGNED_P (target)),
  			 exp);
*************** store_constructor (tree exp, rtx target,
*** 4655,4661 ****

  	      if (TYPE_PRECISION (type) < BITS_PER_WORD)
  		{
! 		  type = (*lang_hooks.types.type_for_size)
  		    (BITS_PER_WORD, TREE_UNSIGNED (type));
  		  value = convert (type, value);
  		}
--- 4655,4661 ----

  	      if (TYPE_PRECISION (type) < BITS_PER_WORD)
  		{
! 		  type = lang_hooks.types.type_for_size
  		    (BITS_PER_WORD, TREE_UNSIGNED (type));
  		  value = convert (type, value);
  		}
*************** store_constructor (tree exp, rtx target,
*** 5122,5128 ****
  	    {
  	      targetx
  		= assign_temp
! 		  ((build_qualified_type ((*lang_hooks.types.type_for_mode)
  					  (GET_MODE (target), 0),
  					  TYPE_QUAL_CONST)),
  		   0, 1, 1);
--- 5122,5128 ----
  	    {
  	      targetx
  		= assign_temp
! 		  ((build_qualified_type (lang_hooks.types.type_for_mode
  					  (GET_MODE (target), 0),
  					  TYPE_QUAL_CONST)),
  		   0, 1, 1);
*************** safe_from_p (rtx x, tree exp, int top_p)
*** 5937,5943 ****
  	 special handling.  */
        if ((unsigned int) TREE_CODE (exp)
  	  >= (unsigned int) LAST_AND_UNUSED_TREE_CODE
! 	  && !(*lang_hooks.safe_from_p) (x, exp))
  	return 0;
      }

--- 5937,5943 ----
  	 special handling.  */
        if ((unsigned int) TREE_CODE (exp)
  	  >= (unsigned int) LAST_AND_UNUSED_TREE_CODE
! 	  && !lang_hooks.safe_from_p (x, exp))
  	return 0;
      }

*************** expand_expr_real (tree exp, rtx target,
*** 6386,6392 ****
  	  DECL_NONLOCAL (exp) = 1;
  	  if (DECL_NO_STATIC_CHAIN (current_function_decl))
  	    abort ();
! 	  (*lang_hooks.mark_addressable) (exp);
  	  if (GET_CODE (DECL_RTL (exp)) != MEM)
  	    abort ();
  	  addr = XEXP (DECL_RTL (exp), 0);
--- 6386,6392 ----
  	  DECL_NONLOCAL (exp) = 1;
  	  if (DECL_NO_STATIC_CHAIN (current_function_decl))
  	    abort ();
! 	  lang_hooks.mark_addressable (exp);
  	  if (GET_CODE (DECL_RTL (exp)) != MEM)
  	    abort ();
  	  addr = XEXP (DECL_RTL (exp), 0);
*************** expand_expr_real (tree exp, rtx target,
*** 6649,6655 ****
  	rtx temp;
  	temp = expand_expr (TREE_OPERAND (exp, 0), target, tmode, modifier);
  	TREE_OPERAND (exp, 0)
! 	  = (*lang_hooks.unsave_expr_now) (TREE_OPERAND (exp, 0));
  	return temp;
        }

--- 6649,6655 ----
  	rtx temp;
  	temp = expand_expr (TREE_OPERAND (exp, 0), target, tmode, modifier);
  	TREE_OPERAND (exp, 0)
! 	  = lang_hooks.unsave_expr_now (TREE_OPERAND (exp, 0));
  	return temp;
        }

*************** expand_expr_real (tree exp, rtx target,
*** 6724,6730 ****
  	/* Mark the corresponding BLOCK for output in its proper place.  */
  	if (TREE_OPERAND (exp, 2) != 0
  	    && ! TREE_USED (TREE_OPERAND (exp, 2)))
! 	  (*lang_hooks.decls.insert_block) (TREE_OPERAND (exp, 2));

  	/* If VARS have not yet been expanded, expand them now.  */
  	while (vars)
--- 6724,6730 ----
  	/* Mark the corresponding BLOCK for output in its proper place.  */
  	if (TREE_OPERAND (exp, 2) != 0
  	    && ! TREE_USED (TREE_OPERAND (exp, 2)))
! 	  lang_hooks.decls.insert_block (TREE_OPERAND (exp, 2));

  	/* If VARS have not yet been expanded, expand them now.  */
  	while (vars)
*************** expand_expr_real (tree exp, rtx target,
*** 7484,7489 ****
--- 7484,7490 ----
  	{
  	  if (DECL_BUILT_IN_CLASS (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
  	      == BUILT_IN_FRONTEND)
+ 	  /* ??? Use (*fun) form because expand_expr is a macro.  */
  	    return (*lang_hooks.expand_expr) (exp, original_target,
  					      tmode, modifier,
  					      alt_rtl);
*************** expand_expr_real (tree exp, rtx target,
*** 8613,8619 ****

  		if (TREE_OPERAND (exp, 2) == 0)
  		  TREE_OPERAND (exp, 2)
! 		    = (*lang_hooks.maybe_build_cleanup) (slot);
  		cleanups = TREE_OPERAND (exp, 2);
  	      }
  	  }
--- 8614,8620 ----

  		if (TREE_OPERAND (exp, 2) == 0)
  		  TREE_OPERAND (exp, 2)
! 		    = lang_hooks.maybe_build_cleanup (slot);
  		cleanups = TREE_OPERAND (exp, 2);
  	      }
  	  }
*************** expand_expr_real (tree exp, rtx target,
*** 9067,9074 ****
        abort ();

      default:
!       return (*lang_hooks.expand_expr) (exp, original_target, tmode, modifier,
! 					alt_rtl);
      }

    /* Here to do an ordinary binary operator, generating an instruction
--- 9068,9076 ----
        abort ();

      default:
!       /* ??? Use (*fun) form because expand_expr is a macro.  */
!       return (*lang_hooks.expand_expr) (exp, original_target, tmode,
! 					modifier, alt_rtl);
      }

    /* Here to do an ordinary binary operator, generating an instruction
*************** do_store_flag (tree exp, rtx target, enu
*** 9539,9545 ****
        && TREE_CODE (arg0) == BIT_AND_EXPR && integer_zerop (arg1)
        && integer_pow2p (TREE_OPERAND (arg0, 1)))
      {
!       tree type = (*lang_hooks.types.type_for_mode) (mode, unsignedp);
        return expand_expr (fold_single_bit_test (code == NE ? NE_EXPR : EQ_EXPR,
  						arg0, arg1, type),
  			  target, VOIDmode, EXPAND_NORMAL);
--- 9541,9547 ----
        && TREE_CODE (arg0) == BIT_AND_EXPR && integer_zerop (arg1)
        && integer_pow2p (TREE_OPERAND (arg0, 1)))
      {
!       tree type = lang_hooks.types.type_for_mode (mode, unsignedp);
        return expand_expr (fold_single_bit_test (code == NE ? NE_EXPR : EQ_EXPR,
  						arg0, arg1, type),
  			  target, VOIDmode, EXPAND_NORMAL);
*************** try_casesi (tree index_type, tree index_
*** 9683,9689 ****
      {
        if (TYPE_MODE (index_type) != index_mode)
  	{
! 	  index_expr = convert ((*lang_hooks.types.type_for_size)
  				(index_bits, 0), index_expr);
  	  index_type = TREE_TYPE (index_expr);
  	}
--- 9685,9691 ----
      {
        if (TYPE_MODE (index_type) != index_mode)
  	{
! 	  index_expr = convert (lang_hooks.types.type_for_size
  				(index_bits, 0), index_expr);
  	  index_type = TREE_TYPE (index_expr);
  	}
Index: function.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/function.c,v
retrieving revision 1.504
diff -c -3 -p -r1.504 function.c
*** function.c	12 Mar 2004 10:03:27 -0000	1.504
--- function.c	14 Mar 2004 16:38:38 -0000
*************** push_function_context_to (tree context)
*** 345,351 ****
    outer_function_chain = p;
    p->fixup_var_refs_queue = 0;

!   (*lang_hooks.function.enter_nested) (p);

    cfun = 0;
  }
--- 345,351 ----
    outer_function_chain = p;
    p->fixup_var_refs_queue = 0;

!   lang_hooks.function.enter_nested (p);

    cfun = 0;
  }
*************** pop_function_context_from (tree context
*** 373,379 ****

    restore_emit_status (p);

!   (*lang_hooks.function.leave_nested) (p);

    /* Finish doing put_var_into_stack for any of our variables which became
       addressable during the nested function.  If only one entry has to be
--- 373,379 ----

    restore_emit_status (p);

!   lang_hooks.function.leave_nested (p);

    /* Finish doing put_var_into_stack for any of our variables which became
       addressable during the nested function.  If only one entry has to be
*************** free_after_parsing (struct function *f)
*** 425,431 ****
    /* f->varasm is used by code generation.  */
    /* f->eh->eh_return_stub_label is used by code generation.  */

!   (*lang_hooks.function.final) (f);
    f->stmt = NULL;
  }

--- 425,431 ----
    /* f->varasm is used by code generation.  */
    /* f->eh->eh_return_stub_label is used by code generation.  */

!   lang_hooks.function.final (f);
    f->stmt = NULL;
  }

*************** assign_stack_local_1 (enum machine_mode
*** 532,538 ****

        /* Allow the target to (possibly) increase the alignment of this
  	 stack slot.  */
!       type = (*lang_hooks.types.type_for_mode) (mode, 0);
        if (type)
  	alignment = LOCAL_ALIGNMENT (type, alignment);

--- 532,538 ----

        /* Allow the target to (possibly) increase the alignment of this
  	 stack slot.  */
!       type = lang_hooks.types.type_for_mode (mode, 0);
        if (type)
  	alignment = LOCAL_ALIGNMENT (type, alignment);

*************** assign_stack_temp_for_type (enum machine
*** 660,666 ****
      align = GET_MODE_ALIGNMENT (mode);

    if (! type)
!     type = (*lang_hooks.types.type_for_mode) (mode, 0);

    if (type)
      align = LOCAL_ALIGNMENT (type, align);
--- 660,666 ----
      align = GET_MODE_ALIGNMENT (mode);

    if (! type)
!     type = lang_hooks.types.type_for_mode (mode, 0);

    if (type)
      align = LOCAL_ALIGNMENT (type, align);
*************** put_var_into_stack (tree decl, int resca
*** 1375,1381 ****
  	 to the whole CONCAT, lest we do double fixups for the latter
  	 references.  */
        enum machine_mode part_mode = GET_MODE (XEXP (reg, 0));
!       tree part_type = (*lang_hooks.types.type_for_mode) (part_mode, 0);
        rtx lopart = XEXP (reg, 0);
        rtx hipart = XEXP (reg, 1);
  #ifdef FRAME_GROWS_DOWNWARD
--- 1375,1381 ----
  	 to the whole CONCAT, lest we do double fixups for the latter
  	 references.  */
        enum machine_mode part_mode = GET_MODE (XEXP (reg, 0));
!       tree part_type = lang_hooks.types.type_for_mode (part_mode, 0);
        rtx lopart = XEXP (reg, 0);
        rtx hipart = XEXP (reg, 1);
  #ifdef FRAME_GROWS_DOWNWARD
*************** allocate_struct_function (tree fndecl)
*** 6422,6428 ****
    init_stmt_for_function ();
    init_eh_for_function ();

!   (*lang_hooks.function.init) (cfun);
    if (init_machine_status)
      cfun->machine = (*init_machine_status) ();

--- 6422,6428 ----
    init_stmt_for_function ();
    init_eh_for_function ();

!   lang_hooks.function.init (cfun);
    if (init_machine_status)
      cfun->machine = (*init_machine_status) ();

*************** init_function_once (void)
*** 8131,8137 ****
  const char *
  current_function_name (void)
  {
!   return (*lang_hooks.decl_printable_name) (cfun->decl, 2);
  }

  #include "gt-function.h"
--- 8131,8137 ----
  const char *
  current_function_name (void)
  {
!   return lang_hooks.decl_printable_name (cfun->decl, 2);
  }

  #include "gt-function.h"
Index: integrate.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/integrate.c,v
retrieving revision 1.250
diff -c -3 -p -r1.250 integrate.c
*** integrate.c	9 Mar 2004 17:06:23 -0000	1.250
--- integrate.c	14 Mar 2004 16:38:51 -0000
*************** copy_decl_for_inlining (tree decl, tree
*** 373,379 ****
        copy = copy_node (decl);
        /* The COPY is not abstract; it will be generated in TO_FN.  */
        DECL_ABSTRACT (copy) = 0;
!       (*lang_hooks.dup_lang_specific_decl) (copy);

        /* TREE_ADDRESSABLE isn't used to indicate that a label's
  	 address has been taken; it's for internal bookkeeping in
--- 373,379 ----
        copy = copy_node (decl);
        /* The COPY is not abstract; it will be generated in TO_FN.  */
        DECL_ABSTRACT (copy) = 0;
!       lang_hooks.dup_lang_specific_decl (copy);

        /* TREE_ADDRESSABLE isn't used to indicate that a label's
  	 address has been taken; it's for internal bookkeeping in
*************** expand_inline_function (tree fndecl, tre
*** 1256,1262 ****
         this block to the list of blocks at this binding level.  We
         can't do it the way it's done for function-at-a-time mode the
         superblocks have not been created yet.  */
!     (*lang_hooks.decls.insert_block) (block);
    else
      {
        BLOCK_CHAIN (block)
--- 1256,1262 ----
         this block to the list of blocks at this binding level.  We
         can't do it the way it's done for function-at-a-time mode the
         superblocks have not been created yet.  */
!     lang_hooks.decls.insert_block (block);
    else
      {
        BLOCK_CHAIN (block)
Index: langhooks.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/langhooks.c,v
retrieving revision 1.59
diff -c -3 -p -r1.59 langhooks.c
*** langhooks.c	3 Mar 2004 11:25:48 -0000	1.59
--- langhooks.c	14 Mar 2004 16:38:52 -0000
*************** lhd_can_use_bit_fields_p (void)
*** 215,221 ****
  void
  lhd_clear_binding_stack (void)
  {
!   while (! (*lang_hooks.decls.global_bindings_p) ())
      poplevel (0, 0, 0);
  }

--- 215,221 ----
  void
  lhd_clear_binding_stack (void)
  {
!   while (! lang_hooks.decls.global_bindings_p ())
      poplevel (0, 0, 0);
  }

*************** write_global_declarations (void)
*** 495,501 ****
       Really output inline functions that must actually be callable
       and have not been output so far.  */

!   tree globals = (*lang_hooks.decls.getdecls) ();
    int len = list_length (globals);
    tree *vec = xmalloc (sizeof (tree) * len);
    int i;
--- 495,501 ----
       Really output inline functions that must actually be callable
       and have not been output so far.  */

!   tree globals = lang_hooks.decls.getdecls ();
    int len = list_length (globals);
    tree *vec = xmalloc (sizeof (tree) * len);
    int i;
*************** lhd_print_error_function (diagnostic_con
*** 540,550 ****
  	  if (TREE_CODE (TREE_TYPE (current_function_decl)) == METHOD_TYPE)
  	    pp_printf
  	      (context->printer, "In member function `%s':",
! 	       (*lang_hooks.decl_printable_name) (current_function_decl, 2));
  	  else
  	    pp_printf
  	      (context->printer, "In function `%s':",
! 	       (*lang_hooks.decl_printable_name) (current_function_decl, 2));
  	}

        diagnostic_set_last_function (context);
--- 540,550 ----
  	  if (TREE_CODE (TREE_TYPE (current_function_decl)) == METHOD_TYPE)
  	    pp_printf
  	      (context->printer, "In member function `%s':",
! 	       lang_hooks.decl_printable_name (current_function_decl, 2));
  	  else
  	    pp_printf
  	      (context->printer, "In function `%s':",
! 	       lang_hooks.decl_printable_name (current_function_decl, 2));
  	}

        diagnostic_set_last_function (context);
Index: opts.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/opts.c,v
retrieving revision 1.61
diff -c -3 -p -r1.61 opts.c
*** opts.c	10 Mar 2004 06:02:53 -0000	1.61
--- opts.c	14 Mar 2004 16:38:59 -0000
*************** handle_option (const char **argv, unsign
*** 403,409 ****

    if (arg == NULL && (option->flags & (CL_JOINED | CL_SEPARATE)))
      {
!       if (!(*lang_hooks.missing_argument) (opt, opt_index))
  	error ("missing argument to \"%s\"", opt);
        goto done;
      }
--- 403,409 ----

    if (arg == NULL && (option->flags & (CL_JOINED | CL_SEPARATE)))
      {
!       if (!lang_hooks.missing_argument (opt, opt_index))
  	error ("missing argument to \"%s\"", opt);
        goto done;
      }
*************** handle_option (const char **argv, unsign
*** 421,427 ****
      }

    if (option->flags & lang_mask)
!     if ((*lang_hooks.handle_option) (opt_index, arg, value) == 0)
        result = 0;

    if (result && (option->flags & CL_COMMON))
--- 421,427 ----
      }

    if (option->flags & lang_mask)
!     if (lang_hooks.handle_option (opt_index, arg, value) == 0)
        result = 0;

    if (result && (option->flags & CL_COMMON))
*************** decode_options (unsigned int argc, const
*** 483,489 ****
    unsigned int i, lang_mask;

    /* Perform language-specific options initialization.  */
!   lang_mask = (*lang_hooks.init_options) (argc, argv);

    lang_hooks.initialize_diagnostics (global_dc);

--- 483,489 ----
    unsigned int i, lang_mask;

    /* Perform language-specific options initialization.  */
!   lang_mask = lang_hooks.init_options (argc, argv);

    lang_hooks.initialize_diagnostics (global_dc);

Index: passes.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/passes.c,v
retrieving revision 2.3
diff -c -3 -p -r2.3 passes.c
*** passes.c	3 Mar 2004 16:32:38 -0000	2.3
--- passes.c	14 Mar 2004 16:38:59 -0000
*************** open_dump_file (enum dump_file_index ind
*** 270,276 ****

    if (decl)
      fprintf (dump_file, "\n;; Function %s%s\n\n",
! 	     (*lang_hooks.decl_printable_name) (decl, 2),
  	     cfun->function_frequency == FUNCTION_FREQUENCY_HOT
  	     ? " (hot)"
  	     : cfun->function_frequency == FUNCTION_FREQUENCY_UNLIKELY_EXECUTED
--- 270,276 ----

    if (decl)
      fprintf (dump_file, "\n;; Function %s%s\n\n",
! 	     lang_hooks.decl_printable_name (decl, 2),
  	     cfun->function_frequency == FUNCTION_FREQUENCY_HOT
  	     ? " (hot)"
  	     : cfun->function_frequency == FUNCTION_FREQUENCY_UNLIKELY_EXECUTED
Index: print-tree.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/print-tree.c,v
retrieving revision 1.81
diff -c -3 -p -r1.81 print-tree.c
*** print-tree.c	17 Feb 2004 21:33:33 -0000	1.81
--- print-tree.c	14 Mar 2004 16:39:00 -0000
*************** print_node (FILE *file, const char *pref
*** 418,424 ****
        print_node (file, "result", DECL_RESULT_FLD (node), indent + 4);
        print_node_brief (file, "initial", DECL_INITIAL (node), indent + 4);

!       (*lang_hooks.print_decl) (file, node, indent);

        if (DECL_RTL_SET_P (node))
  	{
--- 418,424 ----
        print_node (file, "result", DECL_RESULT_FLD (node), indent + 4);
        print_node_brief (file, "initial", DECL_INITIAL (node), indent + 4);

!       lang_hooks.print_decl (file, node, indent);

        if (DECL_RTL_SET_P (node))
  	{
*************** print_node (FILE *file, const char *pref
*** 549,555 ****
        if (TYPE_CONTEXT (node))
  	print_node_brief (file, "context", TYPE_CONTEXT (node), indent + 4);

!       (*lang_hooks.print_type) (file, node, indent);

        if (TYPE_POINTER_TO (node) || TREE_CHAIN (node))
  	indent_to (file, indent + 3);
--- 549,555 ----
        if (TYPE_CONTEXT (node))
  	print_node_brief (file, "context", TYPE_CONTEXT (node), indent + 4);

!       lang_hooks.print_type (file, node, indent);

        if (TYPE_POINTER_TO (node) || TREE_CHAIN (node))
  	indent_to (file, indent + 3);
*************** print_node (FILE *file, const char *pref
*** 708,714 ****
  	  break;

  	case IDENTIFIER_NODE:
! 	  (*lang_hooks.print_identifier) (file, node, indent);
  	  break;

  	case TREE_LIST:
--- 708,714 ----
  	  break;

  	case IDENTIFIER_NODE:
! 	  lang_hooks.print_identifier (file, node, indent);
  	  break;

  	case TREE_LIST:
*************** print_node (FILE *file, const char *pref
*** 731,737 ****

  	default:
  	  if (TREE_CODE_CLASS (TREE_CODE (node)) == 'x')
! 	    (*lang_hooks.print_xnode) (file, node, indent);
  	  break;
  	}

--- 731,737 ----

  	default:
  	  if (TREE_CODE_CLASS (TREE_CODE (node)) == 'x')
! 	    lang_hooks.print_xnode (file, node, indent);
  	  break;
  	}

Index: stmt.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/stmt.c,v
retrieving revision 1.349
diff -c -3 -p -r1.349 stmt.c
*** stmt.c	3 Mar 2004 23:55:51 -0000	1.349
--- stmt.c	14 Mar 2004 16:39:18 -0000
*************** expand_fixup (tree tree_label, rtx rtl_l
*** 868,874 ****
  	TREE_USED (block) = 1;

  	if (!cfun->x_whole_function_mode_p)
! 	  (*lang_hooks.decls.insert_block) (block);
  	else
  	  {
  	    BLOCK_CHAIN (block)
--- 868,874 ----
  	TREE_USED (block) = 1;

  	if (!cfun->x_whole_function_mode_p)
! 	  lang_hooks.decls.insert_block (block);
  	else
  	  {
  	    BLOCK_CHAIN (block)
*************** fixup_gotos (struct nesting *thisblock,
*** 985,992 ****
  	     logically be inserting the fixup code.  We do this for the
  	     sake of getting the debugging information right.  */

! 	  (*lang_hooks.decls.pushlevel) (0);
! 	  (*lang_hooks.decls.set_block) (f->context);

  	  /* Expand the cleanups for blocks this jump exits.  */
  	  if (f->cleanup_list_list)
--- 985,992 ----
  	     logically be inserting the fixup code.  We do this for the
  	     sake of getting the debugging information right.  */

! 	  lang_hooks.decls.pushlevel (0);
! 	  lang_hooks.decls.set_block (f->context);

  	  /* Expand the cleanups for blocks this jump exits.  */
  	  if (f->cleanup_list_list)
*************** fixup_gotos (struct nesting *thisblock,
*** 1025,1031 ****
  	     destructed are still "in scope".  */

  	  cleanup_insns = get_insns ();
! 	  (*lang_hooks.decls.poplevel) (1, 0, 0);

  	  end_sequence ();
  	  emit_insn_after (cleanup_insns, f->before_jump);
--- 1025,1031 ----
  	     destructed are still "in scope".  */

  	  cleanup_insns = get_insns ();
! 	  lang_hooks.decls.poplevel (1, 0, 0);

  	  end_sequence ();
  	  emit_insn_after (cleanup_insns, f->before_jump);
*************** fixup_gotos (struct nesting *thisblock,
*** 1059,1070 ****
  	  if (TREE_CHAIN (lists) == thisblock->data.block.outer_cleanups)
  	    {
  	      start_sequence ();
! 	      (*lang_hooks.decls.pushlevel) (0);
! 	      (*lang_hooks.decls.set_block) (f->context);
  	      expand_cleanups (TREE_VALUE (lists), 1, 1);
  	      do_pending_stack_adjust ();
  	      cleanup_insns = get_insns ();
! 	      (*lang_hooks.decls.poplevel) (1, 0, 0);
  	      end_sequence ();
  	      if (cleanup_insns != 0)
  		f->before_jump
--- 1059,1070 ----
  	  if (TREE_CHAIN (lists) == thisblock->data.block.outer_cleanups)
  	    {
  	      start_sequence ();
! 	      lang_hooks.decls.pushlevel (0);
! 	      lang_hooks.decls.set_block (f->context);
  	      expand_cleanups (TREE_VALUE (lists), 1, 1);
  	      do_pending_stack_adjust ();
  	      cleanup_insns = get_insns ();
! 	      lang_hooks.decls.poplevel (1, 0, 0);
  	      end_sequence ();
  	      if (cleanup_insns != 0)
  		f->before_jump
*************** expand_asm_operands (tree string, tree o
*** 1552,1558 ****
  	      || (DECL_P (val)
  		  && GET_CODE (DECL_RTL (val)) == REG
  		  && GET_MODE (DECL_RTL (val)) != TYPE_MODE (type))))
! 	(*lang_hooks.mark_addressable) (val);

        if (is_inout)
  	ninout++;
--- 1552,1558 ----
  	      || (DECL_P (val)
  		  && GET_CODE (DECL_RTL (val)) == REG
  		  && GET_MODE (DECL_RTL (val)) != TYPE_MODE (type))))
! 	lang_hooks.mark_addressable (val);

        if (is_inout)
  	ninout++;
*************** expand_asm_operands (tree string, tree o
*** 1581,1587 ****
  	return;

        if (! allows_reg && allows_mem)
! 	(*lang_hooks.mark_addressable) (TREE_VALUE (tail));
      }

    /* Second pass evaluates arguments.  */
--- 1581,1587 ----
  	return;

        if (! allows_reg && allows_mem)
! 	lang_hooks.mark_addressable (TREE_VALUE (tail));
      }

    /* Second pass evaluates arguments.  */
*************** expand_decl_cleanup (tree decl, tree cle
*** 4138,4149 ****
  	  emit_move_insn (flag, const1_rtx);

  	  cond = build_decl (VAR_DECL, NULL_TREE,
! 			     (*lang_hooks.types.type_for_mode) (word_mode, 1));
  	  SET_DECL_RTL (cond, flag);

  	  /* Conditionalize the cleanup.  */
  	  cleanup = build (COND_EXPR, void_type_node,
! 			   (*lang_hooks.truthvalue_conversion) (cond),
  			   cleanup, integer_zero_node);
  	  cleanup = fold (cleanup);

--- 4138,4149 ----
  	  emit_move_insn (flag, const1_rtx);

  	  cond = build_decl (VAR_DECL, NULL_TREE,
! 			     lang_hooks.types.type_for_mode (word_mode, 1));
  	  SET_DECL_RTL (cond, flag);

  	  /* Conditionalize the cleanup.  */
  	  cleanup = build (COND_EXPR, void_type_node,
! 			   lang_hooks.truthvalue_conversion (cond),
  			   cleanup, integer_zero_node);
  	  cleanup = fold (cleanup);

*************** emit_case_nodes (rtx index, case_node_pt
*** 6464,6470 ****
  	  else if (!low_bound && !high_bound)
  	    {
  	      /* Widen LOW and HIGH to the same width as INDEX.  */
! 	      tree type = (*lang_hooks.types.type_for_mode) (mode, unsignedp);
  	      tree low = build1 (CONVERT_EXPR, type, node->low);
  	      tree high = build1 (CONVERT_EXPR, type, node->high);
  	      rtx low_rtx, new_index, new_bound;
--- 6464,6470 ----
  	  else if (!low_bound && !high_bound)
  	    {
  	      /* Widen LOW and HIGH to the same width as INDEX.  */
! 	      tree type = lang_hooks.types.type_for_mode (mode, unsignedp);
  	      tree low = build1 (CONVERT_EXPR, type, node->low);
  	      tree high = build1 (CONVERT_EXPR, type, node->high);
  	      rtx low_rtx, new_index, new_bound;
Index: stor-layout.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/stor-layout.c,v
retrieving revision 1.179
diff -c -3 -p -r1.179 stor-layout.c
*** stor-layout.c	5 Mar 2004 16:19:41 -0000	1.179
--- stor-layout.c	14 Mar 2004 16:39:18 -0000
*************** variable_size (tree size)
*** 142,148 ****
       just return SIZE unchanged.  Likewise for self-referential sizes and
       constant sizes.  */
    if (TREE_CONSTANT (size)
!       || (*lang_hooks.decls.global_bindings_p) () < 0
        || CONTAINS_PLACEHOLDER_P (size))
      return size;

--- 142,148 ----
       just return SIZE unchanged.  Likewise for self-referential sizes and
       constant sizes.  */
    if (TREE_CONSTANT (size)
!       || lang_hooks.decls.global_bindings_p () < 0
        || CONTAINS_PLACEHOLDER_P (size))
      return size;

*************** variable_size (tree size)
*** 164,170 ****
    if (TREE_CODE (save) == SAVE_EXPR)
      SAVE_EXPR_PERSISTENT_P (save) = 1;

!   if ((*lang_hooks.decls.global_bindings_p) ())
      {
        if (TREE_CONSTANT (size))
  	error ("type size can't be explicitly evaluated");
--- 164,170 ----
    if (TREE_CODE (save) == SAVE_EXPR)
      SAVE_EXPR_PERSISTENT_P (save) = 1;

!   if (lang_hooks.decls.global_bindings_p ())
      {
        if (TREE_CONSTANT (size))
  	error ("type size can't be explicitly evaluated");
Index: toplev.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/toplev.c,v
retrieving revision 1.887
diff -c -3 -p -r1.887 toplev.c
*** toplev.c	3 Mar 2004 16:32:38 -0000	1.887
--- toplev.c	14 Mar 2004 16:39:20 -0000
*************** announce_function (tree decl)
*** 1085,1091 ****
        if (rtl_dump_and_exit)
  	verbatim ("%s ", IDENTIFIER_POINTER (DECL_NAME (decl)));
        else
! 	verbatim (" %s", (*lang_hooks.decl_printable_name) (decl, 2));
        fflush (stderr);
        pp_needs_newline (global_dc->printer) = true;
        diagnostic_set_last_function (global_dc);
--- 1085,1091 ----
        if (rtl_dump_and_exit)
  	verbatim ("%s ", IDENTIFIER_POINTER (DECL_NAME (decl)));
        else
! 	verbatim (" %s", lang_hooks.decl_printable_name (decl, 2));
        fflush (stderr);
        pp_needs_newline (global_dc->printer) = true;
        diagnostic_set_last_function (global_dc);
*************** wrapup_global_declarations (tree *vec, i
*** 1322,1328 ****
  	DECL_DEFER_OUTPUT (decl) = 0;

        if (TREE_CODE (decl) == VAR_DECL && DECL_SIZE (decl) == 0)
! 	(*lang_hooks.finish_incomplete_decl) (decl);
      }

    /* Now emit any global variables or functions that we have been
--- 1322,1328 ----
  	DECL_DEFER_OUTPUT (decl) = 0;

        if (TREE_CODE (decl) == VAR_DECL && DECL_SIZE (decl) == 0)
! 	lang_hooks.finish_incomplete_decl (decl);
      }

    /* Now emit any global variables or functions that we have been
*************** check_global_declarations (tree *vec, in
*** 1471,1477 ****
  	  /* Global register variables must be declared to reserve them.  */
  	  && ! (TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
  	  /* Otherwise, ask the language.  */
! 	  && (*lang_hooks.decls.warn_unused_global) (decl))
  	warning ("%J'%D' defined but not used", decl, decl);

        /* Avoid confusing the debug information machinery when there are
--- 1471,1477 ----
  	  /* Global register variables must be declared to reserve them.  */
  	  && ! (TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
  	  /* Otherwise, ask the language.  */
! 	  && lang_hooks.decls.warn_unused_global (decl))
  	warning ("%J'%D' defined but not used", decl, decl);

        /* Avoid confusing the debug information machinery when there are
*************** compile_file (void)
*** 1572,1582 ****

    /* Call the parser, which parses the entire file (calling
       rest_of_compilation for each function).  */
!   (*lang_hooks.parse_file) (set_yydebug);

    /* In case there were missing block closers,
       get us back to the global binding level.  */
!   (*lang_hooks.clear_binding_stack) ();

    /* Compilation is now finished except for writing
       what's left of the symbol table output.  */
--- 1572,1582 ----

    /* Call the parser, which parses the entire file (calling
       rest_of_compilation for each function).  */
!   lang_hooks.parse_file (set_yydebug);

    /* In case there were missing block closers,
       get us back to the global binding level.  */
!   lang_hooks.clear_binding_stack ();

    /* Compilation is now finished except for writing
       what's left of the symbol table output.  */
*************** compile_file (void)
*** 1585,1591 ****
    if (flag_syntax_only)
      return;

!   (*lang_hooks.decls.final_write_globals)();

    cgraph_varpool_assemble_pending_decls ();

--- 1585,1591 ----
    if (flag_syntax_only)
      return;

!   lang_hooks.decls.final_write_globals ();

    cgraph_varpool_assemble_pending_decls ();

*************** default_tree_printer (pretty_printer * p
*** 2115,2121 ****
        {
          tree t = va_arg (*text->args_ptr, tree);
          const char *n = DECL_NAME (t)
!           ? (*lang_hooks.decl_printable_name) (t, 2)
            : "<anonymous>";
          pp_string (pp, n);
        }
--- 2115,2121 ----
        {
          tree t = va_arg (*text->args_ptr, tree);
          const char *n = DECL_NAME (t)
!           ? lang_hooks.decl_printable_name (t, 2)
            : "<anonymous>";
          pp_string (pp, n);
        }
*************** process_options (void)
*** 2200,2206 ****
       initialization based on the command line options.  This hook also
       sets the original filename if appropriate (e.g. foo.i -> foo.c)
       so we can correctly initialize debug output.  */
!   no_backend = (*lang_hooks.post_options) (&main_input_filename);
    input_filename = main_input_filename;

  #ifdef OVERRIDE_OPTIONS
--- 2200,2206 ----
       initialization based on the command line options.  This hook also
       sets the original filename if appropriate (e.g. foo.i -> foo.c)
       so we can correctly initialize debug output.  */
!   no_backend = lang_hooks.post_options (&main_input_filename);
    input_filename = main_input_filename;

  #ifdef OVERRIDE_OPTIONS
*************** lang_dependent_init (const char *name)
*** 2462,2468 ****
      dump_base_name = name ? name : "gccdump";

    /* Other front-end initialization.  */
!   if ((*lang_hooks.init) () == 0)
      return 0;

    init_asm_output (name);
--- 2462,2468 ----
      dump_base_name = name ? name : "gccdump";

    /* Other front-end initialization.  */
!   if (lang_hooks.init () == 0)
      return 0;

    init_asm_output (name);
*************** finalize (void)
*** 2538,2544 ****
    free_reg_info ();

    /* Language-specific end of compilation actions.  */
!   (*lang_hooks.finish) ();
  }

  /* Initialize the compiler, and compile the input file.  */
--- 2538,2544 ----
    free_reg_info ();

    /* Language-specific end of compilation actions.  */
!   lang_hooks.finish ();
  }

  /* Initialize the compiler, and compile the input file.  */
Index: tree-dump.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-dump.c,v
retrieving revision 1.18
diff -c -3 -p -r1.18 tree-dump.c
*** tree-dump.c	18 Dec 2003 20:09:40 -0000	1.18
--- tree-dump.c	14 Mar 2004 16:39:20 -0000
***************
*** 1,5 ****
  /* Tree-dumping functionality for intermediate representation.
!    Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation, Inc.
     Written by Mark Mitchell <mark@codesourcery.com>

  This file is part of GCC.
--- 1,5 ----
  /* Tree-dumping functionality for intermediate representation.
!    Copyright (C) 1999, 2000, 2002, 2003, 2004 Free Software Foundation, Inc.
     Written by Mark Mitchell <mark@codesourcery.com>

  This file is part of GCC.
*************** dequeue_and_dump (dump_info_p di)
*** 346,352 ****
    else if (code_class == 't')
      {
        /* All types have qualifiers.  */
!       int quals = (*lang_hooks.tree_dump.type_quals) (t);

        if (quals != TYPE_UNQUALIFIED)
  	{
--- 346,352 ----
    else if (code_class == 't')
      {
        /* All types have qualifiers.  */
!       int quals = lang_hooks.tree_dump.type_quals (t);

        if (quals != TYPE_UNQUALIFIED)
  	{
*************** dequeue_and_dump (dump_info_p di)
*** 377,383 ****
    /* Give the language-specific code a chance to print something.  If
       it's completely taken care of things, don't bother printing
       anything more ourselves.  */
!   if ((*lang_hooks.tree_dump.dump_tree) (di, t))
      goto done;

    /* Now handle the various kinds of nodes.  */
--- 377,383 ----
    /* Give the language-specific code a chance to print something.  If
       it's completely taken care of things, don't bother printing
       anything more ourselves.  */
!   if (lang_hooks.tree_dump.dump_tree (di, t))
      goto done;

    /* Now handle the various kinds of nodes.  */
Index: tree-inline.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-inline.c,v
retrieving revision 1.96
diff -c -3 -p -r1.96 tree-inline.c
*** tree-inline.c	29 Feb 2004 23:43:21 -0000	1.96
--- tree-inline.c	14 Mar 2004 16:39:20 -0000
*************** remap_decl (tree decl, inline_data *id)
*** 154,160 ****

    /* We only remap local variables in the current function.  */
    fn = VARRAY_TOP_TREE (id->fns);
!   if (! (*lang_hooks.tree_inlining.auto_var_in_fn_p) (decl, fn))
      return NULL_TREE;

    /* See if we have remapped this declaration.  */
--- 154,160 ----

    /* We only remap local variables in the current function.  */
    fn = VARRAY_TOP_TREE (id->fns);
!   if (! lang_hooks.tree_inlining.auto_var_in_fn_p (decl, fn))
      return NULL_TREE;

    /* See if we have remapped this declaration.  */
*************** remap_decl (tree decl, inline_data *id)
*** 183,189 ****

  #ifndef INLINER_FOR_JAVA
        if (! DECL_NAME (t) && TREE_TYPE (t)
! 	  && (*lang_hooks.tree_inlining.anon_aggr_type_p) (TREE_TYPE (t)))
  	{
  	  /* For a VAR_DECL of anonymous type, we must also copy the
  	     member VAR_DECLS here and rechain the DECL_ANON_UNION_ELEMS.  */
--- 183,189 ----

  #ifndef INLINER_FOR_JAVA
        if (! DECL_NAME (t) && TREE_TYPE (t)
! 	  && lang_hooks.tree_inlining.anon_aggr_type_p (TREE_TYPE (t)))
  	{
  	  /* For a VAR_DECL of anonymous type, we must also copy the
  	     member VAR_DECLS here and rechain the DECL_ANON_UNION_ELEMS.  */
*************** remap_block (tree *block, tree decls, in
*** 390,396 ****
  	/* We're building a clone; DECL_INITIAL is still
  	   error_mark_node, and current_binding_level is the parm
  	   binding level.  */
! 	(*lang_hooks.decls.insert_block) (new_block);
        else
  	{
  	  /* Attach this new block after the DECL_INITIAL block for the
--- 390,396 ----
  	/* We're building a clone; DECL_INITIAL is still
  	   error_mark_node, and current_binding_level is the parm
  	   binding level.  */
! 	lang_hooks.decls.insert_block (new_block);
        else
  	{
  	  /* Attach this new block after the DECL_INITIAL block for the
*************** copy_body_r (tree *tp, int *walk_subtree
*** 588,594 ****
       variables.  We don't want to copy static variables; there's only
       one of those, no matter how many times we inline the containing
       function.  */
!   else if ((*lang_hooks.tree_inlining.auto_var_in_fn_p) (*tp, fn))
      {
        tree new_decl;

--- 588,594 ----
       variables.  We don't want to copy static variables; there's only
       one of those, no matter how many times we inline the containing
       function.  */
!   else if (lang_hooks.tree_inlining.auto_var_in_fn_p (*tp, fn))
      {
        tree new_decl;

*************** copy_body_r (tree *tp, int *walk_subtree
*** 648,654 ****
      {
        if (TREE_CODE (*tp) == MODIFY_EXPR
  	  && TREE_OPERAND (*tp, 0) == TREE_OPERAND (*tp, 1)
! 	  && ((*lang_hooks.tree_inlining.auto_var_in_fn_p)
  	      (TREE_OPERAND (*tp, 0), fn)))
  	{
  	  /* Some assignments VAR = VAR; don't generate any rtl code
--- 648,654 ----
      {
        if (TREE_CODE (*tp) == MODIFY_EXPR
  	  && TREE_OPERAND (*tp, 0) == TREE_OPERAND (*tp, 1)
! 	  && (lang_hooks.tree_inlining.auto_var_in_fn_p
  	      (TREE_OPERAND (*tp, 0), fn)))
  	{
  	  /* Some assignments VAR = VAR; don't generate any rtl code
*************** copy_body_r (tree *tp, int *walk_subtree
*** 670,676 ****
  	    }
  	}
        else if (TREE_CODE (*tp) == ADDR_EXPR
! 	       && ((*lang_hooks.tree_inlining.auto_var_in_fn_p)
  		   (TREE_OPERAND (*tp, 0), fn)))
  	{
  	  /* Get rid of &* from inline substitutions.  It can occur when
--- 670,676 ----
  	    }
  	}
        else if (TREE_CODE (*tp) == ADDR_EXPR
! 	       && (lang_hooks.tree_inlining.auto_var_in_fn_p
  		   (TREE_OPERAND (*tp, 0), fn)))
  	{
  	  /* Get rid of &* from inline substitutions.  It can occur when
*************** DECL_ARGUMENTS (fn);
*** 764,770 ****
        ++argnum;

        /* Find the initializer.  */
!       value = (*lang_hooks.tree_inlining.convert_parm_for_inlining)
  	      (p, a ? TREE_VALUE (a) : NULL_TREE, fn, argnum);

        /* If the parameter is never assigned to, we may not need to
--- 764,770 ----
        ++argnum;

        /* Find the initializer.  */
!       value = lang_hooks.tree_inlining.convert_parm_for_inlining
  	      (p, a ? TREE_VALUE (a) : NULL_TREE, fn, argnum);

        /* If the parameter is never assigned to, we may not need to
*************** DECL_ARGUMENTS (fn);
*** 860,866 ****
  	}

        /* See if we need to clean up the declaration.  */
!       cleanup = (*lang_hooks.maybe_build_cleanup) (var);
        if (cleanup)
  	{
  	  tree cleanup_stmt;
--- 860,866 ----
  	}

        /* See if we need to clean up the declaration.  */
!       cleanup = lang_hooks.maybe_build_cleanup (var);
        if (cleanup)
  	{
  	  tree cleanup_stmt;
*************** declare_return_variable (struct inline_d
*** 946,952 ****
      }

  #ifndef INLINER_FOR_JAVA
!   var = ((*lang_hooks.tree_inlining.copy_res_decl_for_inlining)
  	 (result, fn, VARRAY_TREE (id->fns, 0), id->decl_map,
  	  &need_return_decl, return_slot_addr));

--- 946,952 ----
      }

  #ifndef INLINER_FOR_JAVA
!   var = (lang_hooks.tree_inlining.copy_res_decl_for_inlining
  	 (result, fn, VARRAY_TREE (id->fns, 0), id->decl_map,
  	  &need_return_decl, return_slot_addr));

*************** declare_return_variable (struct inline_d
*** 970,976 ****
    if (need_return_decl)
      return build_stmt (DECL_STMT, var);
  #else /* INLINER_FOR_JAVA */
!   *var = ((*lang_hooks.tree_inlining.copy_res_decl_for_inlining)
  	 (result, fn, VARRAY_TREE (id->fns, 0), id->decl_map,
  	  &need_return_decl, return_slot_addr));

--- 970,976 ----
    if (need_return_decl)
      return build_stmt (DECL_STMT, var);
  #else /* INLINER_FOR_JAVA */
!   *var = (lang_hooks.tree_inlining.copy_res_decl_for_inlining
  	 (result, fn, VARRAY_TREE (id->fns, 0), id->decl_map,
  	  &need_return_decl, return_slot_addr));

*************** inlinable_function_p (tree fn)
*** 1170,1176 ****
       in C++ it may result in template instantiation.)
       If the function is not inlinable for language-specific reasons,
       it is left up to the langhook to explain why.  */
!   inlinable = !(*lang_hooks.tree_inlining.cannot_inline_tree_fn) (&fn);

    /* If we don't have the function body available, we can't inline it.
       However, this should not be recorded since we also get here for
--- 1170,1176 ----
       in C++ it may result in template instantiation.)
       If the function is not inlinable for language-specific reasons,
       it is left up to the langhook to explain why.  */
!   inlinable = !lang_hooks.tree_inlining.cannot_inline_tree_fn (&fn);

    /* If we don't have the function body available, we can't inline it.
       However, this should not be recorded since we also get here for
*************** expand_call_inline (tree *tp, int *walk_
*** 1352,1358 ****
        return NULL_TREE;
      }

!   if (! (*lang_hooks.tree_inlining.start_inlining) (fn))
      return NULL_TREE;

    /* Set the current filename and line number to the function we are
--- 1352,1358 ----
        return NULL_TREE;
      }

!   if (! lang_hooks.tree_inlining.start_inlining (fn))
      return NULL_TREE;

    /* Set the current filename and line number to the function we are
*************** expand_call_inline (tree *tp, int *walk_
*** 1592,1598 ****
    /* Don't walk into subtrees.  We've already handled them above.  */
    *walk_subtrees = 0;

!   (*lang_hooks.tree_inlining.end_inlining) (fn);

    /* Keep iterating.  */
    return NULL_TREE;
--- 1592,1598 ----
    /* Don't walk into subtrees.  We've already handled them above.  */
    *walk_subtrees = 0;

!   lang_hooks.tree_inlining.end_inlining (fn);

    /* Keep iterating.  */
    return NULL_TREE;
*************** optimize_inline_calls (tree fn)
*** 1642,1648 ****
        prev_fn = current_function_decl;
      }

!   prev_fn = ((*lang_hooks.tree_inlining.add_pending_fn_decls)
  	     (&id.fns, prev_fn));

    /* Create the list of functions this call will inline.  */
--- 1642,1648 ----
        prev_fn = current_function_decl;
      }

!   prev_fn = (lang_hooks.tree_inlining.add_pending_fn_decls
  	     (&id.fns, prev_fn));

    /* Create the list of functions this call will inline.  */
*************** walk_tree (tree *tp, walk_tree_fn func,
*** 1763,1769 ****
    if (!walk_subtrees)
      {
        if (STATEMENT_CODE_P (code) || code == TREE_LIST
! 	  || (*lang_hooks.tree_inlining.tree_chain_matters_p) (*tp))
  	/* But we still need to check our siblings.  */
  	WALK_SUBTREE_TAIL (TREE_CHAIN (*tp));
        else
--- 1763,1769 ----
    if (!walk_subtrees)
      {
        if (STATEMENT_CODE_P (code) || code == TREE_LIST
! 	  || lang_hooks.tree_inlining.tree_chain_matters_p (*tp))
  	/* But we still need to check our siblings.  */
  	WALK_SUBTREE_TAIL (TREE_CHAIN (*tp));
        else
*************** walk_tree (tree *tp, walk_tree_fn func,
*** 1838,1845 ****
        /* Also examine various special fields, below.  */
      }

!   result = (*lang_hooks.tree_inlining.walk_subtrees) (tp, &walk_subtrees, func,
! 						      data, htab);
    if (result || ! walk_subtrees)
      return result;

--- 1838,1845 ----
        /* Also examine various special fields, below.  */
      }

!   result = lang_hooks.tree_inlining.walk_subtrees (tp, &walk_subtrees, func,
! 						   data, htab);
    if (result || ! walk_subtrees)
      return result;

*************** copy_tree_r (tree *tp, int *walk_subtree
*** 1973,1979 ****
        || TREE_CODE_CLASS (code) == 'c'
        || code == TREE_LIST
        || code == TREE_VEC
!       || (*lang_hooks.tree_inlining.tree_chain_matters_p) (*tp))
      {
        /* Because the chain gets clobbered when we make a copy, we save it
  	 here.  */
--- 1973,1979 ----
        || TREE_CODE_CLASS (code) == 'c'
        || code == TREE_LIST
        || code == TREE_VEC
!       || lang_hooks.tree_inlining.tree_chain_matters_p (*tp))
      {
        /* Because the chain gets clobbered when we make a copy, we save it
  	 here.  */
*************** copy_tree_r (tree *tp, int *walk_subtree
*** 1986,1992 ****
  	 walk_tree to walk into the chain as well.  */
        if (code == PARM_DECL || code == TREE_LIST
  #ifndef INLINER_FOR_JAVA
! 	  || (*lang_hooks.tree_inlining.tree_chain_matters_p) (*tp)
  	  || STATEMENT_CODE_P (code))
  	TREE_CHAIN (*tp) = chain;

--- 1986,1992 ----
  	 walk_tree to walk into the chain as well.  */
        if (code == PARM_DECL || code == TREE_LIST
  #ifndef INLINER_FOR_JAVA
! 	  || lang_hooks.tree_inlining.tree_chain_matters_p (*tp)
  	  || STATEMENT_CODE_P (code))
  	TREE_CHAIN (*tp) = chain;

*************** copy_tree_r (tree *tp, int *walk_subtree
*** 1995,2001 ****
        if (TREE_CODE (*tp) == SCOPE_STMT)
  	SCOPE_STMT_BLOCK (*tp) = NULL_TREE;
  #else /* INLINER_FOR_JAVA */
! 	  || (*lang_hooks.tree_inlining.tree_chain_matters_p) (*tp))
  	TREE_CHAIN (*tp) = chain;
  #endif /* INLINER_FOR_JAVA */
      }
--- 1995,2001 ----
        if (TREE_CODE (*tp) == SCOPE_STMT)
  	SCOPE_STMT_BLOCK (*tp) = NULL_TREE;
  #else /* INLINER_FOR_JAVA */
! 	  || lang_hooks.tree_inlining.tree_chain_matters_p (*tp))
  	TREE_CHAIN (*tp) = chain;
  #endif /* INLINER_FOR_JAVA */
      }
Index: tree-optimize.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-optimize.c,v
retrieving revision 2.12
diff -c -3 -p -r2.12 tree-optimize.c
*** tree-optimize.c	17 Feb 2004 21:33:34 -0000	2.12
--- tree-optimize.c	14 Mar 2004 16:39:20 -0000
*************** tree_rest_of_compilation (tree fndecl, b
*** 131,137 ****
    expand_function_start (fndecl, 0);

    /* Allow language dialects to perform special processing.  */
!   (*lang_hooks.rtl_expand.start) ();

    /* If this function is `main', emit a call to `__main'
       to run global initializers, etc.  */
--- 131,137 ----
    expand_function_start (fndecl, 0);

    /* Allow language dialects to perform special processing.  */
!   lang_hooks.rtl_expand.start ();

    /* If this function is `main', emit a call to `__main'
       to run global initializers, etc.  */
*************** tree_rest_of_compilation (tree fndecl, b
*** 141,147 ****
      expand_main_function ();

    /* Generate the RTL for this function.  */
!   (*lang_hooks.rtl_expand.stmt) (DECL_SAVED_TREE (fndecl));

    /* We hard-wired immediate_size_expand to zero above.
       expand_function_end will decrement this variable.  So, we set the
--- 141,147 ----
      expand_main_function ();

    /* Generate the RTL for this function.  */
!   lang_hooks.rtl_expand.stmt (DECL_SAVED_TREE (fndecl));

    /* We hard-wired immediate_size_expand to zero above.
       expand_function_end will decrement this variable.  So, we set the
*************** tree_rest_of_compilation (tree fndecl, b
*** 150,156 ****
    immediate_size_expand = 1;

    /* Allow language dialects to perform special processing.  */
!   (*lang_hooks.rtl_expand.end) ();

    /* Generate rtl for function exit.  */
    expand_function_end ();
--- 150,156 ----
    immediate_size_expand = 1;

    /* Allow language dialects to perform special processing.  */
!   lang_hooks.rtl_expand.end ();

    /* Generate rtl for function exit.  */
    expand_function_end ();
Index: tree.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree.c,v
retrieving revision 1.352
diff -c -3 -p -r1.352 tree.c
*** tree.c	11 Mar 2004 02:57:49 -0000	1.352
--- tree.c	14 Mar 2004 16:39:21 -0000
*************** tree
*** 131,137 ****
  decl_assembler_name (tree decl)
  {
    if (!DECL_ASSEMBLER_NAME_SET_P (decl))
!     (*lang_hooks.set_decl_assembler_name) (decl);
    return DECL_CHECK (decl)->decl.assembler_name;
  }

--- 131,137 ----
  decl_assembler_name (tree decl)
  {
    if (!DECL_ASSEMBLER_NAME_SET_P (decl))
!     lang_hooks.set_decl_assembler_name (decl);
    return DECL_CHECK (decl)->decl.assembler_name;
  }

*************** tree_size (tree node)
*** 171,177 ****
  	case VECTOR_CST:	return sizeof (struct tree_vector);
  	case STRING_CST:	return sizeof (struct tree_string);
  	default:
! 	  return (*lang_hooks.tree_size) (code);
  	}

      case 'x':  /* something random, like an identifier.  */
--- 171,177 ----
  	case VECTOR_CST:	return sizeof (struct tree_vector);
  	case STRING_CST:	return sizeof (struct tree_string);
  	default:
! 	  return lang_hooks.tree_size (code);
  	}

      case 'x':  /* something random, like an identifier.  */
*************** tree_size (tree node)
*** 187,193 ****
  	case PLACEHOLDER_EXPR:	return sizeof (struct tree_common);

  	default:
! 	  return (*lang_hooks.tree_size) (code);
  	}

      default:
--- 187,193 ----
  	case PLACEHOLDER_EXPR:	return sizeof (struct tree_common);

  	default:
! 	  return lang_hooks.tree_size (code);
  	}

      default:
*************** size_in_bytes (tree type)
*** 1119,1125 ****

    if (t == 0)
      {
!       (*lang_hooks.types.incomplete_type_error) (NULL_TREE, type);
        return size_zero_node;
      }

--- 1119,1125 ----

    if (t == 0)
      {
!       lang_hooks.types.incomplete_type_error (NULL_TREE, type);
        return size_zero_node;
      }

*************** staticp (tree arg)
*** 1313,1319 ****
      default:
        if ((unsigned int) TREE_CODE (arg)
  	  >= (unsigned int) LAST_AND_UNUSED_TREE_CODE)
! 	return (*lang_hooks.staticp) (arg);
        else
  	return 0;
      }
--- 1313,1319 ----
      default:
        if ((unsigned int) TREE_CODE (arg)
  	  >= (unsigned int) LAST_AND_UNUSED_TREE_CODE)
! 	return lang_hooks.staticp (arg);
        else
  	return 0;
      }
*************** unsafe_for_reeval (tree expr)
*** 1653,1659 ****
        return exp ? unsafe_for_reeval (exp) : 0;

      default:
!       tmp = (*lang_hooks.unsafe_for_reeval) (expr);
        if (tmp >= 0)
  	return tmp;
        break;
--- 1653,1659 ----
        return exp ? unsafe_for_reeval (exp) : 0;

      default:
!       tmp = lang_hooks.unsafe_for_reeval (expr);
        if (tmp >= 0)
  	return tmp;
        break;
*************** get_unwidened (tree op, tree for_type)
*** 4290,4296 ****
  	= tree_low_cst (DECL_SIZE (TREE_OPERAND (op, 1)), 1);
        int unsignedp = (TREE_UNSIGNED (TREE_OPERAND (op, 1))
  		       || TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op, 1))));
!       type = (*lang_hooks.types.type_for_size) (innerprec, unsignedp);

        /* We can get this structure field in the narrowest type it fits in.
  	 If FOR_TYPE is 0, do this only for a field that matches the
--- 4290,4296 ----
  	= tree_low_cst (DECL_SIZE (TREE_OPERAND (op, 1)), 1);
        int unsignedp = (TREE_UNSIGNED (TREE_OPERAND (op, 1))
  		       || TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op, 1))));
!       type = lang_hooks.types.type_for_size (innerprec, unsignedp);

        /* We can get this structure field in the narrowest type it fits in.
  	 If FOR_TYPE is 0, do this only for a field that matches the
*************** get_narrower (tree op, int *unsignedp_pt
*** 4375,4381 ****
  	= tree_low_cst (DECL_SIZE (TREE_OPERAND (op, 1)), 1);
        int unsignedp = (TREE_UNSIGNED (TREE_OPERAND (op, 1))
  		       || TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op, 1))));
!       tree type = (*lang_hooks.types.type_for_size) (innerprec, unsignedp);

        /* We can get this structure field in a narrower type that fits it,
  	 but the resulting extension to its nominal type (a fullword type)
--- 4375,4381 ----
  	= tree_low_cst (DECL_SIZE (TREE_OPERAND (op, 1)), 1);
        int unsignedp = (TREE_UNSIGNED (TREE_OPERAND (op, 1))
  		       || TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op, 1))));
!       tree type = lang_hooks.types.type_for_size (innerprec, unsignedp);

        /* We can get this structure field in a narrower type that fits it,
  	 but the resulting extension to its nominal type (a fullword type)
*************** variably_modified_type_p (tree type)
*** 4539,4545 ****

    /* The current language may have other cases to check, but in general,
       all other types are not variably modified.  */
!   return (*lang_hooks.tree_inlining.var_mod_type_p) (type);
  }

  /* Given a DECL or TYPE, return the scope in which it was declared, or
--- 4539,4545 ----

    /* The current language may have other cases to check, but in general,
       all other types are not variably modified.  */
!   return lang_hooks.tree_inlining.var_mod_type_p (type);
  }

  /* Given a DECL or TYPE, return the scope in which it was declared, or
*************** get_callee_fndecl (tree call)
*** 4660,4666 ****

    /* We couldn't figure out what was being called.  Maybe the front
       end has some idea.  */
!   return (*lang_hooks.lang_get_callee_fndecl) (call);
  }

  /* Print debugging information about tree nodes generated during the compile,
--- 4660,4666 ----

    /* We couldn't figure out what was being called.  Maybe the front
       end has some idea.  */
!   return lang_hooks.lang_get_callee_fndecl (call);
  }

  /* Print debugging information about tree nodes generated during the compile,
*************** dump_tree_statistics (void)
*** 4693,4699 ****
    fprintf (stderr, "(No per-node statistics)\n");
  #endif
    print_type_hash_statistics ();
!   (*lang_hooks.print_statistics) ();
  }

  #define FILE_FUNCTION_FORMAT "_GLOBAL__%s_%s"
--- 4693,4699 ----
    fprintf (stderr, "(No per-node statistics)\n");
  #endif
    print_type_hash_statistics ();
!   lang_hooks.print_statistics ();
  }

  #define FILE_FUNCTION_FORMAT "_GLOBAL__%s_%s"
Index: varasm.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/varasm.c,v
retrieving revision 1.414
diff -c -3 -p -r1.414 varasm.c
*** varasm.c	12 Mar 2004 17:08:57 -0000	1.414
--- varasm.c	14 Mar 2004 16:39:26 -0000
*************** assemble_variable (tree decl, int top_le
*** 1297,1303 ****
    rtx decl_rtl;

    if (lang_hooks.decls.prepare_assemble_variable)
!     (*lang_hooks.decls.prepare_assemble_variable) (decl);

    last_assemble_variable_decl = 0;

--- 1297,1303 ----
    rtx decl_rtl;

    if (lang_hooks.decls.prepare_assemble_variable)
!     lang_hooks.decls.prepare_assemble_variable (decl);

    last_assemble_variable_decl = 0;

*************** compare_constant (const tree t1, const t
*** 2250,2257 ****
      default:
        {
  	tree nt1, nt2;
! 	nt1 = (*lang_hooks.expand_constant) (t1);
! 	nt2 = (*lang_hooks.expand_constant) (t2);
  	if (nt1 != t1 || nt2 != t2)
  	  return compare_constant (nt1, nt2);
  	else
--- 2250,2257 ----
      default:
        {
  	tree nt1, nt2;
! 	nt1 = lang_hooks.expand_constant (t1);
! 	nt2 = lang_hooks.expand_constant (t2);
  	if (nt1 != t1 || nt2 != t2)
  	  return compare_constant (nt1, nt2);
  	else
*************** copy_constant (tree exp)
*** 2322,2328 ****
      default:
        {
  	tree t;
! 	t = (*lang_hooks.expand_constant) (exp);
  	if (t != exp)
  	  return copy_constant (t);
  	else
--- 2322,2328 ----
      default:
        {
  	tree t;
! 	t = lang_hooks.expand_constant (exp);
  	if (t != exp)
  	  return copy_constant (t);
  	else
*************** force_const_mem (enum machine_mode mode,
*** 2745,2751 ****
    align = GET_MODE_ALIGNMENT (mode == VOIDmode ? word_mode : mode);
  #ifdef CONSTANT_ALIGNMENT
    {
!     tree type = (*lang_hooks.types.type_for_mode) (mode, 0);
      if (type != NULL_TREE)
        align = CONSTANT_ALIGNMENT (make_tree (type, x), align);
    }
--- 2745,2751 ----
    align = GET_MODE_ALIGNMENT (mode == VOIDmode ? word_mode : mode);
  #ifdef CONSTANT_ALIGNMENT
    {
!     tree type = lang_hooks.types.type_for_mode (mode, 0);
      if (type != NULL_TREE)
        align = CONSTANT_ALIGNMENT (make_tree (type, x), align);
    }
*************** force_const_mem (enum machine_mode mode,
*** 2789,2795 ****

    /* Construct the MEM.  */
    desc->mem = def = gen_rtx_MEM (mode, symbol);
!   set_mem_attributes (def, (*lang_hooks.types.type_for_mode) (mode, 0), 1);
    RTX_UNCHANGING_P (def) = 1;

    /* If we're dropping a label to the constant pool, make sure we
--- 2789,2795 ----

    /* Construct the MEM.  */
    desc->mem = def = gen_rtx_MEM (mode, symbol);
!   set_mem_attributes (def, lang_hooks.types.type_for_mode (mode, 0), 1);
    RTX_UNCHANGING_P (def) = 1;

    /* If we're dropping a label to the constant pool, make sure we
*************** compute_reloc_for_constant (tree exp)
*** 3113,3119 ****

    /* Give the front-end a chance to convert VALUE to something that
       looks more like a constant to the back-end.  */
!   exp = (*lang_hooks.expand_constant) (exp);

    switch (TREE_CODE (exp))
      {
--- 3113,3119 ----

    /* Give the front-end a chance to convert VALUE to something that
       looks more like a constant to the back-end.  */
!   exp = lang_hooks.expand_constant (exp);

    switch (TREE_CODE (exp))
      {
*************** output_addressed_constants (tree exp)
*** 3177,3183 ****

    /* Give the front-end a chance to convert VALUE to something that
       looks more like a constant to the back-end.  */
!   exp = (*lang_hooks.expand_constant) (exp);

    switch (TREE_CODE (exp))
      {
--- 3177,3183 ----

    /* Give the front-end a chance to convert VALUE to something that
       looks more like a constant to the back-end.  */
!   exp = lang_hooks.expand_constant (exp);

    switch (TREE_CODE (exp))
      {
*************** initializer_constant_valid_p (tree value
*** 3233,3239 ****
  {
    /* Give the front-end a chance to convert VALUE to something that
       looks more like a constant to the back-end.  */
!   value = (*lang_hooks.expand_constant) (value);

    switch (TREE_CODE (value))
      {
--- 3233,3239 ----
  {
    /* Give the front-end a chance to convert VALUE to something that
       looks more like a constant to the back-end.  */
!   value = lang_hooks.expand_constant (value);

    switch (TREE_CODE (value))
      {
*************** output_constant (tree exp, unsigned HOST
*** 3461,3467 ****
    /* Some front-ends use constants other than the standard language-independent
       varieties, but which may still be output directly.  Give the front-end a
       chance to convert EXP to a language-independent representation.  */
!   exp = (*lang_hooks.expand_constant) (exp);

    if (size == 0 || flag_syntax_only)
      return;
--- 3461,3467 ----
    /* Some front-ends use constants other than the standard language-independent
       varieties, but which may still be output directly.  Give the front-end a
       chance to convert EXP to a language-independent representation.  */
!   exp = lang_hooks.expand_constant (exp);

    if (size == 0 || flag_syntax_only)
      return;


Roger
--
Roger Sayle,                         E-mail: roger@eyesopen.com
OpenEye Scientific Software,         WWW: http://www.eyesopen.com/
Suite 1107, 3600 Cerrillos Road,     Tel: (+1) 505-473-7385
Santa Fe, New Mexico, 87507.         Fax: (+1) 505-473-0833


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