aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJim Wilson <wilson@redhat.com>2002-09-20 19:15:53 +0000
committerJim Wilson <wilson@gcc.gnu.org>2002-09-20 12:15:53 -0700
commit66a0dfebeb72645cdabc9661b7cdf2567be23d2a (patch)
treea46c4de85703bc87397ddc44d8a056e0473daad0 /gcc
parentf51eee6af1e5d1ed24a317d27e67cb3261d68d4e (diff)
downloadgcc-66a0dfebeb72645cdabc9661b7cdf2567be23d2a.zip
gcc-66a0dfebeb72645cdabc9661b7cdf2567be23d2a.tar.gz
gcc-66a0dfebeb72645cdabc9661b7cdf2567be23d2a.tar.bz2
Fix -O3 stdarg miscompilation.
* config/v850/v850.c (current_function_anonymous_args): Delete. (expand_prologue): Use current_function_args_info.anonymous_args. (expand_epilogue): Delete use of current_function_anonymous_args. * config/v850/v850.h (struct cum_arg): Add anonymous_args field. (INIT_CUMULATIVE_ARGS): Clear anonymous_args field. (current_function_anonymous_args): Delete extern declaration. (SETUP_INCOMING_VARARGS): Set anonymous_args field. From-SVN: r57363
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/config/v850/v850.c6
-rw-r--r--gcc/config/v850/v850.h7
3 files changed, 14 insertions, 9 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 7dfdfa06..b4d1dcb 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,13 @@
+2002-09-20 Jim Wilson <wilson@redhat.com>
+
+ * config/v850/v850.c (current_function_anonymous_args): Delete.
+ (expand_prologue): Use current_function_args_info.anonymous_args.
+ (expand_epilogue): Delete use of current_function_anonymous_args.
+ * config/v850/v850.h (struct cum_arg): Add anonymous_args field.
+ (INIT_CUMULATIVE_ARGS): Clear anonymous_args field.
+ (current_function_anonymous_args): Delete extern declaration.
+ (SETUP_INCOMING_VARARGS): Set anonymous_args field.
+
2002-09-20 Geoffrey Keating <geoffk@apple.com>
* config/rs6000/rs6000.c (rs6000_emit_prologue): Update for change
diff --git a/gcc/config/v850/v850.c b/gcc/config/v850/v850.c
index b14ff1a..8029ecf 100644
--- a/gcc/config/v850/v850.c
+++ b/gcc/config/v850/v850.c
@@ -61,9 +61,6 @@ static void v850_encode_data_area PARAMS ((tree));
static void v850_encode_section_info PARAMS ((tree, int));
static const char *v850_strip_name_encoding PARAMS ((const char *));
-/* True if the current function has anonymous arguments. */
-int current_function_anonymous_args;
-
/* Information about the various small memory areas. */
struct small_memory_info small_memory[ (int)SMALL_MEMORY_max ] =
{
@@ -1656,7 +1653,7 @@ expand_prologue ()
}
/* Save arg registers to the stack if necessary. */
- else if (current_function_anonymous_args)
+ else if (current_function_args_info.anonymous_args)
{
if (TARGET_PROLOG_FUNCTION)
{
@@ -2063,7 +2060,6 @@ Saved %d bytes via epilogue function (%d vs. %d) in function %s\n",
emit_jump_insn (gen_return ());
}
- current_function_anonymous_args = 0;
v850_interrupt_cache_p = FALSE;
v850_interrupt_p = FALSE;
}
diff --git a/gcc/config/v850/v850.h b/gcc/config/v850/v850.h
index 9d5200b..478cd53 100644
--- a/gcc/config/v850/v850.h
+++ b/gcc/config/v850/v850.h
@@ -713,7 +713,7 @@ enum reg_class
such as FUNCTION_ARG to determine where the next arg should go. */
#define CUMULATIVE_ARGS struct cum_arg
-struct cum_arg { int nbytes; };
+struct cum_arg { int nbytes; int anonymous_args; };
/* Define where to put the arguments to a function.
Value is zero to push the argument on the stack,
@@ -739,7 +739,7 @@ struct cum_arg { int nbytes; };
For a library call, FNTYPE is 0. */
#define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT) \
- ((CUM).nbytes = 0)
+ ((CUM).nbytes = 0, (CUM).anonymous_args = 0)
/* Update the data in CUM to advance over an argument
of mode MODE and data type TYPE.
@@ -758,10 +758,9 @@ struct cum_arg { int nbytes; };
space allocated by the caller. */
#define OUTGOING_REG_PARM_STACK_SPACE
-extern int current_function_anonymous_args;
/* Do any setup necessary for varargs/stdargs functions. */
#define SETUP_INCOMING_VARARGS(CUM, MODE, TYPE, PAS, SECOND) \
- current_function_anonymous_args = (!TARGET_GHS ? 1 : 0);
+ (CUM).anonymous_args = (!TARGET_GHS ? 1 : 0);
/* Implement `va_arg'. */
#define EXPAND_BUILTIN_VA_ARG(valist, type) \