Although using a non-constant array initialized to all non-nul characters where a nul-terminated string is expected doesn't necessarily imply the initializer is what's used, it is an indication that it might be used, and so a warning would be helpful, especially in code that doesn't make use of const. $ cat z.c && gcc -O2 -S -Wall -Wrestrict -fdump-tree-strlen=/dev/stdout z.c char a[4] = { 1, 2, 3, 4 }; int f (void) { return __builtin_strlen (a); } // warn here ;; Function f (f, funcdef_no=0, decl_uid=1932, cgraph_uid=1, symbol_order=1) ;; 1 loops found ;; ;; Loop 0 ;; header 0, latch 1 ;; depth 0, outer -1 ;; nodes: 0 1 2 ;; 2 succs { 1 } f () { long unsigned int _1; int _3; <bb 2> [local count: 1073741824]: _1 = __builtin_strlen (&a); _3 = (int) _1; return _3; }
Confirming as a -Wstringop-overread enhancement.