------- Comment #2 from jakub at gcc dot gnu dot org  2009-02-02 10:06 -------
I think the bug is in check_asm_operands/asm_operand_ok.
The latter has:
        case '0': case '1': case '2': case '3': case '4':
        case '5': case '6': case '7': case '8': case '9':
          /* For best results, our caller should have given us the
             proper matching constraint, but we can't actually fail
             the check if they didn't.  Indicate that results are
             inconclusive.  */
but the former only handles the simple case:
      if (c[0] == '%')
        c++;
      if (ISDIGIT ((unsigned char) c[0]) && c[1] == '\0')
        c = constraints[c[0] - '0'];
Together this allows combine to combine something that definitely shouldn't be
combined.


-- 

jakub at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
         AssignedTo|unassigned at gcc dot gnu   |jakub at gcc dot gnu dot org
                   |dot org                     |
             Status|UNCONFIRMED                 |ASSIGNED
     Ever Confirmed|0                           |1
   Last reconfirmed|0000-00-00 00:00:00         |2009-02-02 10:06:53
               date|                            |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39058

Reply via email to