diff options
author | Nick Clifton <nickc@redhat.com> | 2005-03-16 18:09:04 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2005-03-16 18:09:04 +0000 |
commit | 199fea98c99205f0fd3d2d3fd1a2670bdfe8a326 (patch) | |
tree | 9ee7f22fce6dbaa8c4b89d10b0d836220646023b /gas/cgen.c | |
parent | 4cfaf6d58110e580bab7c7cfff8ad2892a195492 (diff) | |
download | binutils-gdb-199fea98c99205f0fd3d2d3fd1a2670bdfe8a326.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.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/gas/cgen.c b/gas/cgen.c index ab30778abb9..ec3f6920cc8 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; |