calls.c (expand_call): Don't create a VAR_DECL just to throw it away.

* calls.c (expand_call): Don't create a VAR_DECL just to throw it
	away.
	* expr.c (expand_expr, case TARGET_EXPR): Don't call
	mark_addressable.
	* tree.h (get_file_function_name): Remove two duplicate
	declarations.

	* typeck.c (mark_addressable): Remove code that pokes around in
	RTL.

From-SVN: r36038
This commit is contained in:
Mark Mitchell 2000-08-29 16:23:20 +00:00 committed by Mark Mitchell
parent 9b1ee05b0e
commit 4361b41d83
6 changed files with 20 additions and 35 deletions

View File

@ -1,3 +1,12 @@
2000-08-29 Mark Mitchell <mark@codesourcery.com>
* calls.c (expand_call): Don't create a VAR_DECL just to throw it
away.
* expr.c (expand_expr, case TARGET_EXPR): Don't call
mark_addressable.
* tree.h (get_file_function_name): Remove two duplicate
declarations.
2000-08-28 Kazu Hirata <kazu@hxi.com>
* tree.c: Fix formatting.

View File

@ -2260,8 +2260,7 @@ expand_call (exp, target, ignore)
structure_value_addr = XEXP (target, 0);
else
{
/* Assign a temporary to hold the value. */
tree d;
rtx d;
/* For variable-sized objects, we must be called with a target
specified. If we were to allocate space on the stack here,
@ -2270,14 +2269,9 @@ expand_call (exp, target, ignore)
if (struct_value_size < 0)
abort ();
/* This DECL is just something to feed to mark_addressable;
it doesn't get pushed. */
d = build_decl (VAR_DECL, NULL_TREE, TREE_TYPE (exp));
DECL_RTL (d) = assign_temp (TREE_TYPE (exp), 1, 0, 1);
mark_addressable (d);
mark_temp_addr_taken (DECL_RTL (d));
structure_value_addr = XEXP (DECL_RTL (d), 0);
TREE_USED (d) = 1;
d = assign_temp (TREE_TYPE (exp), 1, 1, 1);
mark_temp_addr_taken (d);
structure_value_addr = XEXP (d, 0);
target = 0;
}
}

View File

@ -1,3 +1,8 @@
2000-08-29 Mark Mitchell <mark@codesourcery.com>
* typeck.c (mark_addressable): Remove code that pokes around in
RTL.
2000-08-28 Jason Merrill <jason@redhat.com>
* lex.c (file_name_nondirectory): Move to toplev.c.

View File

@ -4925,19 +4925,6 @@ mark_addressable (exp)
return 1;
}
case VAR_DECL:
if (TREE_STATIC (x) && TREE_READONLY (x)
&& DECL_RTL (x) != 0
&& ! DECL_IN_MEMORY_P (x))
{
TREE_ASM_WRITTEN (x) = 0;
DECL_RTL (x) = 0;
rest_of_decl_compilation (x, 0,
!DECL_FUNCTION_SCOPE_P (x),
0);
TREE_ADDRESSABLE (x) = 1;
return 1;
}
/* Caller should not be trying to mark initialized
constant fields addressable. */
my_friendly_assert (DECL_LANG_SPECIFIC (x) == 0
@ -4952,8 +4939,6 @@ mark_addressable (exp)
cp_warning ("address requested for `%D', which is declared `register'",
x);
TREE_ADDRESSABLE (x) = 1;
if (cfun && expanding_p)
put_var_into_stack (x);
return 1;
case FUNCTION_DECL:

View File

@ -8104,10 +8104,7 @@ expand_expr (exp, target, tmode, modifier)
preserve_temp_slots (target);
DECL_RTL (slot) = target;
if (TREE_ADDRESSABLE (slot))
{
TREE_ADDRESSABLE (slot) = 0;
mark_addressable (slot);
}
put_var_into_stack (slot);
/* Since SLOT is not known to the called function
to belong to its stack frame, we must build an explicit
@ -8145,10 +8142,7 @@ expand_expr (exp, target, tmode, modifier)
/* If we must have an addressable slot, then make sure that
the RTL that we just stored in slot is OK. */
if (TREE_ADDRESSABLE (slot))
{
TREE_ADDRESSABLE (slot) = 0;
mark_addressable (slot);
}
put_var_into_stack (slot);
}
}

View File

@ -2436,7 +2436,6 @@ extern tree builtin_function PARAMS ((const char *, tree, int,
/* In tree.c */
extern char *perm_calloc PARAMS ((int, long));
extern void clean_symbol_name PARAMS ((char *));
extern tree get_file_function_name PARAMS ((int));
extern tree get_file_function_name_long PARAMS ((const char *));
extern tree get_set_constructor_bits PARAMS ((tree, char *, int));
extern tree get_set_constructor_bytes PARAMS ((tree,
@ -2649,7 +2648,6 @@ extern void preserve_momentary PARAMS ((void));
extern void saveable_allocation PARAMS ((void));
extern void temporary_allocation PARAMS ((void));
extern void resume_temporary_allocation PARAMS ((void));
extern tree get_file_function_name PARAMS ((int));
extern void set_identifier_size PARAMS ((int));
extern int int_fits_type_p PARAMS ((tree, tree));
extern int tree_log2 PARAMS ((tree));