diff options
author | Jim Wilson <wilson@redhat.com> | 2002-09-20 19:15:53 +0000 |
---|---|---|
committer | Jim Wilson <wilson@gcc.gnu.org> | 2002-09-20 12:15:53 -0700 |
commit | 66a0dfebeb72645cdabc9661b7cdf2567be23d2a (patch) | |
tree | a46c4de85703bc87397ddc44d8a056e0473daad0 /gcc | |
parent | f51eee6af1e5d1ed24a317d27e67cb3261d68d4e (diff) | |
download | gcc-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/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/config/v850/v850.c | 6 | ||||
-rw-r--r-- | gcc/config/v850/v850.h | 7 |
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) \ |