aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@libertysurf.fr>2004-10-07 09:55:39 +0200
committerEric Botcazou <ebotcazou@gcc.gnu.org>2004-10-07 07:55:39 +0000
commit22d66adf5d3947f66386084992dc76ccb4b391d6 (patch)
tree62fdad25d1a48f556e211503301ef2a5bc8cf14a /gcc
parent298321642abf4cd9023e6a2a7481835feef34d95 (diff)
downloadgcc-22d66adf5d3947f66386084992dc76ccb4b391d6.zip
gcc-22d66adf5d3947f66386084992dc76ccb4b391d6.tar.gz
gcc-22d66adf5d3947f66386084992dc76ccb4b391d6.tar.bz2
re PR target/17862 (internal compiler error: in sparc_asm_function_prologue)
PR target/17862 * config/sparc/sparc.c (sparc_output_mi_thunk): Set current_function_uses_only_leaf_regs as well as sparc_leaf_function_p. * config/sparc/sparc.c (sparc_gimplify_va_arg): Pass 'false' instead of 0 as 4th argument to pass_by_reference. Call build_va_arg_indirect_ref instead of build_fold_indirect_ref. From-SVN: r88674
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/config/sparc/sparc.c12
2 files changed, 16 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 783f8e7..b00fad9 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,13 @@
+2004-10-07 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ PR target/17862
+ * config/sparc/sparc.c (sparc_output_mi_thunk): Set
+ current_function_uses_only_leaf_regs as well as sparc_leaf_function_p.
+
+ * config/sparc/sparc.c (sparc_gimplify_va_arg): Pass 'false' instead
+ of 0 as 4th argument to pass_by_reference.
+ Call build_va_arg_indirect_ref instead of build_fold_indirect_ref.
+
2004-10-06 Eric Christopher <echristo@redhat.com>
* config/sh/sh.c (sh_dwarf_calling_convention): Fix renesas dwarf
diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c
index aa1fa09..69a2aaf 100644
--- a/gcc/config/sparc/sparc.c
+++ b/gcc/config/sparc/sparc.c
@@ -6024,7 +6024,7 @@ sparc_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p)
bool indirect;
tree ptrtype = build_pointer_type (type);
- if (pass_by_reference (NULL, TYPE_MODE (type), type, 0))
+ if (pass_by_reference (NULL, TYPE_MODE (type), type, false))
{
indirect = true;
size = rsize = UNITS_PER_WORD;
@@ -6044,7 +6044,7 @@ sparc_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p)
align = 2 * UNITS_PER_WORD;
/* SPARC-V9 ABI states that structures up to 16 bytes in size
- are given whole slots as needed. */
+ are left-justified in their slots. */
if (AGGREGATE_TYPE_P (type))
{
if (size == 0)
@@ -6074,7 +6074,7 @@ sparc_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p)
if (indirect)
{
addr = fold_convert (build_pointer_type (ptrtype), addr);
- addr = build_fold_indirect_ref (addr);
+ addr = build_va_arg_indirect_ref (addr);
}
/* If the address isn't aligned properly for the type,
we may need to copy to a temporary.
@@ -6103,7 +6103,7 @@ sparc_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p)
incr = build2 (MODIFY_EXPR, ptr_type_node, valist, incr);
gimplify_and_add (incr, post_p);
- return build_fold_indirect_ref (addr);
+ return build_va_arg_indirect_ref (addr);
}
/* Return the string to output an unconditional branch to LABEL, which is
@@ -8543,7 +8543,7 @@ sparc_output_mi_thunk (FILE *file, tree thunk_fndecl ATTRIBUTE_UNUSED,
{
/* We will emit a regular sibcall below, so we need to instruct
output_sibcall that we are in a leaf function. */
- sparc_leaf_function_p = 1;
+ sparc_leaf_function_p = current_function_uses_only_leaf_regs = 1;
/* This will cause final.c to invoke leaf_renumber_regs so we
must behave as if we were in a not-yet-leafified function. */
@@ -8553,7 +8553,7 @@ sparc_output_mi_thunk (FILE *file, tree thunk_fndecl ATTRIBUTE_UNUSED,
{
/* We will emit the sibcall manually below, so we will need to
manually spill non-leaf registers. */
- sparc_leaf_function_p = 0;
+ sparc_leaf_function_p = current_function_uses_only_leaf_regs = 0;
/* We really are in a leaf function. */
int_arg_first = SPARC_OUTGOING_INT_ARG_FIRST;