https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121470
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|REOPENED |RESOLVED Resolution|--- |DUPLICATE --- Comment #6 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Again what is happening is when expanding INTEGER_CST to const_int, the last bit of precision is extended to all of the rest. This is how const_int works and has always worked. PR 85344 is exactly the same issue: ``` void foo (void) { __asm( "%0" :: "I" ((unsigned char) 0x80)); } ``` Notice `unsigned char` there. 0x80 is then extended to 0xffffff80 as expected by the rules of RTL and const_int. *** This bug has been marked as a duplicate of bug 85344 ***