This is the mail archive of the
mailing list for the GCC project.
Re: PING [PATCH] warn for strlen of arrays with missing nul (PR 86552, 86711, 86714) )
On 08/02/18 15:26, Bernd Edlinger wrote:
>> /* If the length can be computed at compile-time, return it. */
>> - len = c_strlen (src, 0);
>> + tree array;
>> + tree len = c_strlen (src, 0, &array);
> You know the c_strlen tries to compute wide character sizes,
> but strlen does not do that, strlen (L"abc") should give 1
> (or 0 on a BE machine)
> I wonder if that is correct.
>> static tree
>> -fold_builtin_strlen (location_t loc, tree type, tree arg)
>> +fold_builtin_strlen (location_t loc, tree fndecl, tree type, tree arg)
>> if (!validate_arg (arg, POINTER_TYPE))
>> return NULL_TREE;
>> - tree len = c_strlen (arg, 0);
>> + tree arr = NULL_TREE;
>> + tree len = c_strlen (arg, 0, &arr);
> Is it possible to write a test case where strlen(L"test") reaches this point?
> what will c_strlen return then?
Yes, of course it is:
$ cat y.c
int f(char *x)
int main ()
$ gcc -O3 -S y.c
$ cat y.s
movl $6, %eax
The reason is that c_strlen tries to fold wide chars at all.
I do not know when that was introduced, was that already before your last patches?
Is it possible to revert the last few patches cleanly?