aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>2000-08-29 16:23:20 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>2000-08-29 16:23:20 +0000
commit4361b41d838b11e957dfb751d55298bd1d1b1a55 (patch)
treeb04c965157f31a59a49b3963cd4d9793bb84fcf4 /gcc
parent9b1ee05b0e2a948a2612dcc6b9835a91ee855f99 (diff)
downloadgcc-4361b41d838b11e957dfb751d55298bd1d1b1a55.zip
gcc-4361b41d838b11e957dfb751d55298bd1d1b1a55.tar.gz
gcc-4361b41d838b11e957dfb751d55298bd1d1b1a55.tar.bz2
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/calls.c14
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/typeck.c15
-rw-r--r--gcc/expr.c10
-rw-r--r--gcc/tree.h2
6 files changed, 20 insertions, 35 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a12a943..b054ac6 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/calls.c b/gcc/calls.c
index 6784bca..605c5ae 100644
--- a/gcc/calls.c
+++ b/gcc/calls.c
@@ -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;
}
}
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index c9224cf..325872d 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -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.
diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c
index 964993d..015df0e 100644
--- a/gcc/cp/typeck.c
+++ b/gcc/cp/typeck.c
@@ -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:
diff --git a/gcc/expr.c b/gcc/expr.c
index a5c306f..04604e0 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -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);
}
}
diff --git a/gcc/tree.h b/gcc/tree.h
index 80bb787..93a5416 100644
--- a/gcc/tree.h
+++ b/gcc/tree.h
@@ -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));