Почему clang-tidy говорит, что vsnprintf имеет неинициализированный аргумент va_list? - PullRequest
5 голосов
/ 02 ноября 2019

В следующей функции я инициализирую args, использую их при вызове va_start, а затем вызываю va_end.

Код выглядит мне правильно, но clang-tidy даетпредупреждение:

tmp2.c:7:11: error: Function 'vsnprintf' is called with an uninitialized va_list argument [clang-analyzer-valist.Uninitialized,-warnings-as-errors] len = vsnprintf((void*)0, 0, format, args);

#include<stdarg.h>
#include<stdio.h>
int f(char *format, ...) {
    int len;
    va_list args;
    va_start(args, format);
    len = vsnprintf((void*)0, 0, format, args);
    va_end(args);
    return len;
}

Еще более странно, что это происходит только тогда, когда я снимаю несколько файлов одновременно, поэтому clang-tidy tmp2.c не выдает предупреждение, но clang-tidy tmp2.c tmp2.cделает!

Это проблема с моим кодом или clang-tidy? Я использую LLVM версии 7.0.0, но предупреждение также появляется с 8.0.0.

1 Ответ

1 голос
/ 03 ноября 2019

Это ошибка в clang-tidy. Она наиболее похожа на эту ошибку , которую вы, видимо, уже видели.

Кроме того, из примечания в комментариях вам не нужно разыгрывать 0 до (void *). Актерский состав уже неявный.

...