summaryrefslogtreecommitdiff
path: root/gas/cgen.c
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2005-03-16 18:09:04 +0000
committerNick Clifton <nickc@redhat.com>2005-03-16 18:09:04 +0000
commita624bf71caf8b2593fc10bf081ab377b36461684 (patch)
tree62270b7ef3fa0b8064ce6b9db5ba019615154fde /gas/cgen.c
parentac9eaebadfd7adf0724501dd0aa71fcf67763cc1 (diff)
downloadbinutils-redhat-a624bf71caf8b2593fc10bf081ab377b36461684.tar.gz
(gas_cgen_parse_operand): Copy opinfo parameter into a local variable in case
it is clobbered by the setjmp.
Diffstat (limited to 'gas/cgen.c')
-rw-r--r--gas/cgen.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/gas/cgen.c b/gas/cgen.c
index ab30778abb..ec3f6920cc 100644
--- a/gas/cgen.c
+++ b/gas/cgen.c
@@ -320,9 +320,11 @@ gas_cgen_parse_operand (cd, want, strP, opindex, opinfo, resultP, valueP)
/* These are volatile to survive the setjmp. */
char * volatile hold;
enum cgen_parse_operand_result * volatile resultP_1;
+ volatile int opinfo_1;
#else
static char *hold;
static enum cgen_parse_operand_result *resultP_1;
+ int opinfo_1;
#endif
const char *errmsg;
expressionS exp;
@@ -336,6 +338,7 @@ gas_cgen_parse_operand (cd, want, strP, opindex, opinfo, resultP, valueP)
resultP_1 = resultP;
hold = input_line_pointer;
input_line_pointer = (char *) *strP;
+ opinfo_1 = opinfo;
/* We rely on md_operand to longjmp back to us.
This is done via gas_cgen_md_operand. */
@@ -356,7 +359,7 @@ gas_cgen_parse_operand (cd, want, strP, opindex, opinfo, resultP, valueP)
input_line_pointer = hold;
#ifdef TC_CGEN_PARSE_FIX_EXP
- opinfo = TC_CGEN_PARSE_FIX_EXP (opinfo, & exp);
+ opinfo = TC_CGEN_PARSE_FIX_EXP (opinfo_1, & exp);
#endif
/* FIXME: Need to check `want'. */
@@ -383,7 +386,7 @@ gas_cgen_parse_operand (cd, want, strP, opindex, opinfo, resultP, valueP)
break;
de_fault:
default:
- queue_fixup (opindex, opinfo, &exp);
+ queue_fixup (opindex, opinfo_1, &exp);
*valueP = 0;
*resultP = CGEN_PARSE_OPERAND_RESULT_QUEUED;
break;