Stephan Beyer <s-be...@gmx.net> 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.

Reply via email to