+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>
* config/sh/sh.h (EXTRA_SPECS): Add subtarget_asm_relax_spec and
addr = plus_constant (addr, arg_offset);
args[i].stack = gen_rtx_MEM (args[i].mode, addr);
+ set_mem_align (args[i].stack, PARM_BOUNDARY);
set_mem_attributes (args[i].stack,
TREE_TYPE (args[i].tree_value), 1);
addr = plus_constant (addr, arg_offset);
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,
TREE_TYPE (args[i].tree_value), 1);
return sibcall_failure;
}
-
/* Nonzero if we do not know how to pass TYPE solely in registers.
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>
* decl.c (check_initializer): Check for vector_opaque_p.
if (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;
/* At one time the vtable info was grabbed 2 words at a time. This
}
else
{
- my_friendly_assert (TREE_CODE (TREE_TYPE (decl)) == VOID_TYPE,
- 20000118);
+ my_friendly_assert (TREE_TYPE (decl) == vtbl_type_node, 20000118);
virtuals = NULL_TREE;
}
/* Start the statement-tree, start the tree now. */
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. */
announce_function (decl1);
find_alloca_call (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
find_builtin_longjmp_call (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
if (DECL_UNINLINABLE (fn))
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. */
inlinable = 0;
}
}
- 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
it. */
if (! DECL_SAVED_TREE (fn))