Stephan Beyer <[email protected]> writes:
> diff --git a/t/helper/test-read-cache.c b/t/helper/test-read-cache.c
> index 7e79b555de..ef0963e2f4 100644
> --- a/t/helper/test-read-cache.c
> +++ b/t/helper/test-read-cache.c
> @@ -4,7 +4,7 @@
>
> int cmd__read_cache(int argc, const char **argv)
> {
> - int i, cnt = 1, namelen;
> + int i, cnt = 1, namelen = 0;
> const char *name = NULL;
>
> if (argc > 1 && skip_prefix(argv[1], "--print-and-refresh=", &name)) {
namelen = strlen(name);
The above is the only assignment to namelen in this function, and
namelen is used like so:
if (name) {
...
pos = index_name_pos(&the_index, name, namelen);
So somebody does not realize that skip_prefix() returns true only
when it touches name. But skip_prefix() is inline and visible to
the compiler, and it is quite clear that name is only touched when
the function returns non-zero.
static inline int skip_prefix(const char *str, const char *prefix,
const char **out)
{
do {
if (!*prefix) {
*out = str;
return 1;
}
} while (*str++ == *prefix++);
return 0;
}
So it looks like it is another case of compiler getting confused.