https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119686
Bug ID: 119686 Summary: strlen pass gets confused sometimes with stores beforehand Product: gcc Version: 15.0 Status: UNCONFIRMED Keywords: missed-optimization Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: pinskia at gcc dot gnu.org Target Milestone: --- Take (taken from strlenopt-69.c): ``` extern char a4[4]; extern char b4[4]; void clobber (void*, ...); void test_empty_string (void) { *a4 = '\0'; clobber (a4, b4); *a4 = 0; *b4 = 0; if (0 != __builtin_strcmp (a4, b4)) __builtin_abort(); } ``` The strcmp should be optimized away to 0 because the strlen of both a4 and b4 are 0. If you remove the store to a4[0] at the begining of the function, strlen pass works.