Ping: https://gcc.gnu.org/ml/gcc-patches/2018-01/msg01131.html
This was submitted in stage 3 but if fixing xfailed assertions in tests by enhancing optimizations is out of scope for the current stage let me know so I can schedule this change for GCC 9. On 01/12/2018 02:30 PM, Martin Sebor wrote:
A failure in a test for the recently enhanced -Warray-bounds warning exposed an unnecessarily broad restriction in the strlen pass that prevents it from tracking the length of a member string of locally defined and initialized struct: void f (void) { struct { char s[8]; int i } a = { "1234", 5 }; if (strlen (a.s) != 4) // not folded abort (); } IIUC, the restriction was in place to account for writes into an array changing or invalidating the length of a string stored in its initial elements. This would happen if the write either changed the string's terminating nul byte, or if it reset one of the prior non-nul bytes. To reflect just this intent the restriction can be tightened up to improve the pass' ability to track even the lengths of string members of locally initialized aggregates. Besides leading to better code this change also clears up the test failure. Tested on x86_64-linux. Martin