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

--- Comment #5 from Georg-Johann Lay <gjl at gcc dot gnu.org> ---
Created attachment 54956
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=54956&action=edit
pr109650-2.c: A simpler C test case without assembly.

Again, this testcase triggers with avr-gcc -Os:

typedef _Bool bool;
typedef __UINT8_TYPE__ uint8_t;

static inline __attribute__((__always_inline__))
bool func1 (uint8_t p1, uint8_t p2)
{
    if (p1)
        return p2 <= 8;
    return p2 <= 2;
}

__attribute__((__noinline__, __noclone__))
bool func2 (uint8_t p1, uint8_t p2)
{
    return func1 (p1, p2);
}

int main (void)
{
    if (func1 (0, 1) != func2 (0, 1)) __builtin_abort();
    if (func1 (0, 2) != func2 (0, 2)) __builtin_abort();
    if (func1 (0, 3) != func2 (0, 3)) __builtin_abort();

    if (func1 (1, 7) != func2 (1, 7)) __builtin_abort();
    if (func1 (1, 8) != func2 (1, 8)) __builtin_abort();
    if (func1 (1, 9) != func2 (1, 9)) __builtin_abort();

    __builtin_exit (0);
}

Reply via email to