]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
PR 32721, internal error in tc-i386.c:parse_register
authorAlan Modra <amodra@gmail.com>
Thu, 20 Feb 2025 01:19:25 +0000 (11:49 +1030)
committerAlan Modra <amodra@gmail.com>
Thu, 20 Feb 2025 01:32:10 +0000 (12:02 +1030)
pr30117 showed one of the assertions added by 4d1bb7955a8b 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.

gas/config/tc-i386.c

index 9cfc4df1e10f13dd12d3490c9e2a958494c40cb8..53743fb4d7fbd37a90c4fae84cb58e06f5f3cbde 100644 (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);
            }