diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 1a3cc6c30a..8fd128ac6f 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2018-10-03 Tom Tromey + + * expression.h (enum exp_opcode): Use uint8_t as base type. + * expprint.c (op_name): Handle invalid opcodes. + 2018-10-03 Tom Tromey * parse.c (prefixify_expression): Add assert. diff --git a/gdb/expprint.c b/gdb/expprint.c index d6ed41253e..e87b3b709b 100644 --- a/gdb/expprint.c +++ b/gdb/expprint.c @@ -687,6 +687,13 @@ static int dump_subexp_body (struct expression *exp, struct ui_file *, int); const char * op_name (struct expression *exp, enum exp_opcode opcode) { + if (opcode >= OP_UNUSED_LAST) + { + char *cell = get_print_cell (); + xsnprintf (cell, PRINT_CELL_SIZE, "unknown opcode: %u", + unsigned (opcode)); + return cell; + } return exp->language_defn->la_exp_desc->op_name (opcode); } diff --git a/gdb/expression.h b/gdb/expression.h index bc7625f984..a5cb4c678e 100644 --- a/gdb/expression.h +++ b/gdb/expression.h @@ -39,7 +39,7 @@ and skip that many. Strings, like numbers, are indicated by the preceding opcode. */ -enum exp_opcode +enum exp_opcode : uint8_t { #define OP(name) name ,