https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98953

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2021-02-04
     Ever confirmed|0                           |1

--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
Confirmed.  The bswap would be the place that detects similar cases but I think
it doesn't consider this case because the number is "incomplete" and because
the pass doesnt' consider PLUS_EXPR or MULT_EXPR AFAIR.  Also it doesn't
handle non-obviously same bases gracefully.

The following works:

#include <stdint.h>
#include <stdlib.h>
int f(uint8_t *read, size_t abs)
{
    return read[0] + (read[1] << 8);
}

Reply via email to