mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-12-03 08:44:23 +08:00
langhooks-def.h (LANG_HOOKS_TYPE_MAX_SIZE): New langhook.
* langhooks-def.h (LANG_HOOKS_TYPE_MAX_SIZE): New langhook. * langhooks.h (strct lang_hooks): New field type_max_size. * function.c (assign_temp): Call it. From-SVN: r84053
This commit is contained in:
parent
52c27e16fd
commit
e30bb772cb
@ -1,3 +1,9 @@
|
||||
2004-07-03 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
|
||||
|
||||
* langhooks-def.h (LANG_HOOKS_TYPE_MAX_SIZE): New langhook.
|
||||
* langhooks.h (strct lang_hooks): New field type_max_size.
|
||||
* function.c (assign_temp): Call it.
|
||||
|
||||
2004-07-03 Steven Bosscher <stevenb@suse.de>
|
||||
|
||||
* config/sh/sh.c (sh_use_dfa_interface): Add TARGET_SH1.
|
||||
|
@ -914,6 +914,7 @@ assign_temp (tree type_or_decl, int keep, int memory_required,
|
||||
if (mode == BLKmode || memory_required)
|
||||
{
|
||||
HOST_WIDE_INT size = int_size_in_bytes (type);
|
||||
tree size_tree;
|
||||
rtx tmp;
|
||||
|
||||
/* Zero sized arrays are GNU C extension. Set size to 1 to avoid
|
||||
@ -930,6 +931,13 @@ assign_temp (tree type_or_decl, int keep, int memory_required,
|
||||
&& host_integerp (TYPE_ARRAY_MAX_SIZE (type), 1))
|
||||
size = tree_low_cst (TYPE_ARRAY_MAX_SIZE (type), 1);
|
||||
|
||||
/* If we still haven't been able to get a size, see if the language
|
||||
can compute a maximum size. */
|
||||
if (size == -1
|
||||
&& (size_tree = lang_hooks.type_max_size (type)) != 0
|
||||
&& host_integerp (size_tree, 1))
|
||||
size = tree_low_cst (size_tree, 1);
|
||||
|
||||
/* The size of the temporary may be too large to fit into an integer. */
|
||||
/* ??? Not sure this should happen except for user silliness, so limit
|
||||
this to things that aren't compiler-generated temporaries. The
|
||||
|
@ -127,6 +127,7 @@ extern int lhd_gimplify_expr (tree *, tree *, tree *);
|
||||
#define LANG_HOOKS_DECL_PRINTABLE_NAME lhd_decl_printable_name
|
||||
#define LANG_HOOKS_GET_CALLEE_FNDECL lhd_return_null_tree
|
||||
#define LANG_HOOKS_EXPR_SIZE lhd_expr_size
|
||||
#define LANG_HOOKS_TYPE_MAX_SIZE lhd_return_null_tree
|
||||
#define LANG_HOOKS_TREE_SIZE lhd_tree_size
|
||||
#define LANG_HOOKS_TYPES_COMPATIBLE_P lhd_types_compatible_p
|
||||
#define LANG_HOOKS_UPDATE_DECL_AFTER_SAVING NULL
|
||||
@ -305,6 +306,7 @@ extern tree lhd_make_node (enum tree_code);
|
||||
LANG_HOOKS_GET_CALLEE_FNDECL, \
|
||||
LANG_HOOKS_PRINT_ERROR_FUNCTION, \
|
||||
LANG_HOOKS_EXPR_SIZE, \
|
||||
LANG_HOOKS_TYPE_MAX_SIZE, \
|
||||
LANG_HOOKS_UPDATE_DECL_AFTER_SAVING, \
|
||||
LANG_HOOKS_ATTRIBUTE_TABLE, \
|
||||
LANG_HOOKS_COMMON_ATTRIBUTE_TABLE, \
|
||||
|
@ -390,6 +390,10 @@ struct lang_hooks
|
||||
semantics in cases that it doesn't want to handle specially. */
|
||||
tree (*expr_size) (tree);
|
||||
|
||||
/* Called from assign_temp to return the maximum size, if there is one,
|
||||
for a type. */
|
||||
tree (*type_max_size) PARAMS ((tree));
|
||||
|
||||
/* Update lang specific fields after duplicating function body. */
|
||||
void (*update_decl_after_saving) (tree, void *);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user