PR 32721, internal error in tc-i386.c:parse_register

pr30117 showed one of the assertions added by 4d1bb7955a was too
strict.  oss-fuzz also found the second assertion to be too strict,
with this testcase distilled from 7k of garbage source:

 A=%eax%%!
 Y=A
 Z=A
 or $6,Z

	PR 32721
	* config/tc-i386.c (parse_register): Move "know" into
	condition.  Simplify.
This commit is contained in:
Alan Modra
2025-02-20 11:49:25 +10:30
parent d08ab84d89
commit 46b9f07dfe

View File

@@ -16838,10 +16838,9 @@ parse_register (const char *reg_string, char **end_op)
{
const expressionS *e = symbol_get_value_expression (symbolP);
if (e->X_op == O_register)
if (e->X_op == O_register
&& (valueT) e->X_add_number < i386_regtab_size)
{
know (e->X_add_number >= 0
&& (valueT) e->X_add_number < i386_regtab_size);
r = i386_regtab + e->X_add_number;
*end_op = (char *) reg_string + (input_line_pointer - buf);
}