diff options
Diffstat (limited to 'gas')
-rw-r--r-- | gas/ChangeLog | 6 | ||||
-rw-r--r-- | gas/config/tc-aarch64.c | 26 |
2 files changed, 20 insertions, 12 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 56542cd..60a0a6a 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,9 @@ +2014-10-21 Jan Beulich <jbeulich@suse.com> + + * config/tc-aarch64.c (output_operand_error_record): Move down + assertion of idx being non-negative. Use local variables when + available. + 2014-10-18 Alan Modra <amodra@gmail.com> PR 17493 diff --git a/gas/config/tc-aarch64.c b/gas/config/tc-aarch64.c index 03fddd1..3198df8 100644 --- a/gas/config/tc-aarch64.c +++ b/gas/config/tc-aarch64.c @@ -3939,11 +3939,11 @@ output_info (const char *format, ...) static void output_operand_error_record (const operand_error_record *record, char *str) { - int idx = record->detail.index; + const aarch64_operand_error *detail = &record->detail; + int idx = detail->index; const aarch64_opcode *opcode = record->opcode; - enum aarch64_opnd opd_code = (idx != -1 ? opcode->operands[idx] + enum aarch64_opnd opd_code = (idx >= 0 ? opcode->operands[idx] : AARCH64_OPND_NIL); - const aarch64_operand_error *detail = &record->detail; switch (detail->kind) { @@ -3955,20 +3955,22 @@ output_operand_error_record (const operand_error_record *record, char *str) case AARCH64_OPDE_RECOVERABLE: case AARCH64_OPDE_FATAL_SYNTAX_ERROR: case AARCH64_OPDE_OTHER_ERROR: - gas_assert (idx >= 0); /* Use the prepared error message if there is, otherwise use the operand description string to describe the error. */ if (detail->error != NULL) { - if (detail->index == -1) + if (idx < 0) as_bad (_("%s -- `%s'"), detail->error, str); else as_bad (_("%s at operand %d -- `%s'"), - detail->error, detail->index + 1, str); + detail->error, idx + 1, str); } else - as_bad (_("operand %d should be %s -- `%s'"), idx + 1, + { + gas_assert (idx >= 0); + as_bad (_("operand %d should be %s -- `%s'"), idx + 1, aarch64_get_operand_desc (opd_code), str); + } break; case AARCH64_OPDE_INVALID_VARIANT: @@ -4073,28 +4075,28 @@ output_operand_error_record (const operand_error_record *record, char *str) if (detail->data[0] != detail->data[1]) as_bad (_("%s out of range %d to %d at operand %d -- `%s'"), detail->error ? detail->error : _("immediate value"), - detail->data[0], detail->data[1], detail->index + 1, str); + detail->data[0], detail->data[1], idx + 1, str); else as_bad (_("%s expected to be %d at operand %d -- `%s'"), detail->error ? detail->error : _("immediate value"), - detail->data[0], detail->index + 1, str); + detail->data[0], idx + 1, str); break; case AARCH64_OPDE_REG_LIST: if (detail->data[0] == 1) as_bad (_("invalid number of registers in the list; " "only 1 register is expected at operand %d -- `%s'"), - detail->index + 1, str); + idx + 1, str); else as_bad (_("invalid number of registers in the list; " "%d registers are expected at operand %d -- `%s'"), - detail->data[0], detail->index + 1, str); + detail->data[0], idx + 1, str); break; case AARCH64_OPDE_UNALIGNED: as_bad (_("immediate value should be a multiple of " "%d at operand %d -- `%s'"), - detail->data[0], detail->index + 1, str); + detail->data[0], idx + 1, str); break; default: |