Commit d1a74aa7 by Jason Merrill Committed by Jason Merrill

tree-inline.c (find_builtin_longjmp_call): Save and restore lineno and input_filename.

        * tree-inline.c (find_builtin_longjmp_call): Save and restore
        lineno and input_filename.
        (find_alloca_call): Likewise.
        (inlinable_function_p): Run the langhook earlier.

        * calls.c (compute_argument_addresses): Give the new MEMs a
        minimum alignment of PARM_BOUNDARY.
cp/
        * decl.c (start_function): Clear DECL_NUM_STMTS.

        * class.c (get_vtable_decl): Use vtbl_type_node.
        (build_primary_vtable): Check for it.

From-SVN: r63733
parent d44cc404
2003-03-03 Jason Merrill <jason@redhat.com>
* tree-inline.c (find_builtin_longjmp_call): Save and restore
lineno and input_filename.
(find_alloca_call): Likewise.
(inlinable_function_p): Run the langhook earlier.
* calls.c (compute_argument_addresses): Give the new MEMs a
minimum alignment of PARM_BOUNDARY.
Mon Mar 3 20:45:25 2003 J"orn Rennecke <joern.rennecke@superh.com> Mon Mar 3 20:45:25 2003 J"orn Rennecke <joern.rennecke@superh.com>
* config/sh/sh.h (EXTRA_SPECS): Add subtarget_asm_relax_spec and * config/sh/sh.h (EXTRA_SPECS): Add subtarget_asm_relax_spec and
......
...@@ -1634,6 +1634,7 @@ compute_argument_addresses (args, argblock, num_actuals) ...@@ -1634,6 +1634,7 @@ compute_argument_addresses (args, argblock, num_actuals)
addr = plus_constant (addr, arg_offset); addr = plus_constant (addr, arg_offset);
args[i].stack = gen_rtx_MEM (args[i].mode, addr); args[i].stack = gen_rtx_MEM (args[i].mode, addr);
set_mem_align (args[i].stack, PARM_BOUNDARY);
set_mem_attributes (args[i].stack, set_mem_attributes (args[i].stack,
TREE_TYPE (args[i].tree_value), 1); TREE_TYPE (args[i].tree_value), 1);
...@@ -1644,6 +1645,7 @@ compute_argument_addresses (args, argblock, num_actuals) ...@@ -1644,6 +1645,7 @@ compute_argument_addresses (args, argblock, num_actuals)
addr = plus_constant (addr, arg_offset); addr = plus_constant (addr, arg_offset);
args[i].stack_slot = gen_rtx_MEM (args[i].mode, addr); args[i].stack_slot = gen_rtx_MEM (args[i].mode, addr);
set_mem_align (args[i].stack_slot, PARM_BOUNDARY);
set_mem_attributes (args[i].stack_slot, set_mem_attributes (args[i].stack_slot,
TREE_TYPE (args[i].tree_value), 1); TREE_TYPE (args[i].tree_value), 1);
...@@ -4578,7 +4580,6 @@ store_one_arg (arg, argblock, flags, variable_size, reg_parm_stack_space) ...@@ -4578,7 +4580,6 @@ store_one_arg (arg, argblock, flags, variable_size, reg_parm_stack_space)
return sibcall_failure; return sibcall_failure;
} }
/* Nonzero if we do not know how to pass TYPE solely in registers. /* Nonzero if we do not know how to pass TYPE solely in registers.
We cannot do so in the following cases: We cannot do so in the following cases:
......
2003-03-03 Jason Merrill <jason@redhat.com>
* decl.c (start_function): Clear DECL_NUM_STMTS.
* class.c (get_vtable_decl): Use vtbl_type_node.
(build_primary_vtable): Check for it.
2003-03-02 Aldy Hernandez <aldyh@redhat.com> 2003-03-02 Aldy Hernandez <aldyh@redhat.com>
* decl.c (check_initializer): Check for vector_opaque_p. * decl.c (check_initializer): Check for vector_opaque_p.
......
...@@ -533,7 +533,7 @@ get_vtable_decl (tree type, int complete) ...@@ -533,7 +533,7 @@ get_vtable_decl (tree type, int complete)
if (CLASSTYPE_VTABLES (type)) if (CLASSTYPE_VTABLES (type))
return CLASSTYPE_VTABLES (type); return CLASSTYPE_VTABLES (type);
decl = build_vtable (type, get_vtable_name (type), void_type_node); decl = build_vtable (type, get_vtable_name (type), vtbl_type_node);
CLASSTYPE_VTABLES (type) = decl; CLASSTYPE_VTABLES (type) = decl;
/* At one time the vtable info was grabbed 2 words at a time. This /* At one time the vtable info was grabbed 2 words at a time. This
...@@ -594,8 +594,7 @@ build_primary_vtable (tree binfo, tree type) ...@@ -594,8 +594,7 @@ build_primary_vtable (tree binfo, tree type)
} }
else else
{ {
my_friendly_assert (TREE_CODE (TREE_TYPE (decl)) == VOID_TYPE, my_friendly_assert (TREE_TYPE (decl) == vtbl_type_node, 20000118);
20000118);
virtuals = NULL_TREE; virtuals = NULL_TREE;
} }
......
...@@ -13554,6 +13554,9 @@ start_function (tree declspecs, tree declarator, tree attrs, int flags) ...@@ -13554,6 +13554,9 @@ start_function (tree declspecs, tree declarator, tree attrs, int flags)
/* Start the statement-tree, start the tree now. */ /* Start the statement-tree, start the tree now. */
begin_stmt_tree (&DECL_SAVED_TREE (decl1)); begin_stmt_tree (&DECL_SAVED_TREE (decl1));
/* Don't double-count statements in templates. */
DECL_NUM_STMTS (decl1) = 0;
/* Let the user know we're compiling this function. */ /* Let the user know we're compiling this function. */
announce_function (decl1); announce_function (decl1);
......
...@@ -895,7 +895,12 @@ static tree ...@@ -895,7 +895,12 @@ static tree
find_alloca_call (exp) find_alloca_call (exp)
tree exp; tree exp;
{ {
return walk_tree (&exp, find_alloca_call_1, NULL, NULL); int line = lineno;
const char *file = input_filename;
tree ret = walk_tree (&exp, find_alloca_call_1, NULL, NULL);
lineno = line;
input_filename = file;
return ret;
} }
static tree static tree
...@@ -921,7 +926,12 @@ static tree ...@@ -921,7 +926,12 @@ static tree
find_builtin_longjmp_call (exp) find_builtin_longjmp_call (exp)
tree exp; tree exp;
{ {
return walk_tree (&exp, find_builtin_longjmp_call_1, NULL, NULL); int line = lineno;
const char *file = input_filename;
tree ret = walk_tree (&exp, find_builtin_longjmp_call_1, NULL, NULL);
lineno = line;
input_filename = file;
return ret;
} }
/* Returns nonzero if FN is a function that can be inlined into the /* Returns nonzero if FN is a function that can be inlined into the
...@@ -942,6 +952,11 @@ inlinable_function_p (fn, id) ...@@ -942,6 +952,11 @@ inlinable_function_p (fn, id)
if (DECL_UNINLINABLE (fn)) if (DECL_UNINLINABLE (fn))
return 0; return 0;
/* Check this now so that we instantiate C++ templates before reading
DECL_NUM_STMTS. */
if ((*lang_hooks.tree_inlining.cannot_inline_tree_fn) (&fn))
return 0;
/* Assume it is not inlinable. */ /* Assume it is not inlinable. */
inlinable = 0; inlinable = 0;
...@@ -1022,9 +1037,6 @@ inlinable_function_p (fn, id) ...@@ -1022,9 +1037,6 @@ inlinable_function_p (fn, id)
} }
} }
if (inlinable && (*lang_hooks.tree_inlining.cannot_inline_tree_fn) (&fn))
inlinable = 0;
/* If we don't have the function body available, we can't inline /* If we don't have the function body available, we can't inline
it. */ it. */
if (! DECL_SAVED_TREE (fn)) if (! DECL_SAVED_TREE (fn))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment