The "missing terminating nul" warning newly issued by GCC 9 is missing inlining context, making it difficult to determine which strlen call is the cause of the problem. $ cat d.c && gcc -O2 -S -Wall -fdump-tree-optimized=/dev/stdout d.c static inline int f (const char *s) { return __builtin_strlen (s); // absent from diagnostic output } const char a[3] = { '1', '2', '3' }; int g (void) { return f (a); } d.c: In function ‘g’: d.c:10:13: warning: ‘strlen’ argument missing terminating nul [-Wstringop-overflow=] 10 | return f (a); | ^ d.c:6:12: note: referenced argument declared here 6 | const char a[3] = { '1', '2', '3' }; | ^ ;; Function g (g, funcdef_no=1, decl_uid=1910, cgraph_uid=2, symbol_order=2) g () { long unsigned int _2; int _3; <bb 2> [local count: 1073741824]: _2 = __builtin_strlen (&a); _3 = (int) _2; return _3; }