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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |hubicka at gcc dot gnu.org
   Last reconfirmed|2013-02-05 00:00:00         |2025-2-18

--- Comment #8 from Richard Biener <rguenth at gcc dot gnu.org> ---
ANTIC_OUT[2] := {
{call_expr<strncmp>,addr_expr<";">,addr_expr<&key>,integer_cst<3>}@.MEM_5(D)

that's not simplifed.

We're also not trying to thread anything.

One issue is that 'key' is not promoted read-only because it's passed
to strncmp.

The other issue is that PRE phi-translation (no longer?) simplifies
references.  It did so on GCC 7 but not after (I'm sure it wouldn't have
worked there).  For cases like this this looks relevant.

Adjusted testcase to avoid the readonly issue:

#include <string.h>
#include <stdio.h>

void
f (void)
{
    char *p = ";";
    while (*p) {
        static const char key[] = "abc";
        if (strncmp(p, key, 3) == 0) {
            p += 3;
            printf("%s\n", p);
            return;
        }
        if ((p = strchr(p, ';')) == NULL)
            return;
        p++;
    }
}

Reply via email to