+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.
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,
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;
}
}
+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.
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
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:
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
/* 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);
}
}
/* 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,
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));