clang-tidy не проходит проверку на ошибку - PullRequest
1 голос
/ 29 января 2020

Я экспериментирую с clang-tidy, используя следующий файл:

#include <stdio.h>
int main(int argc, char **argv)
{
    int i=2; int j=1;

    if (argc = 5) { return 2; }
    while (i<argc) { j++; }

    return 0;
}

Я стремлюсь обнаружить бесконечное l oop с:

$ clang-tidy -checks=bugprone-infinite-loop main.c

но все, что clang-tidy находит, это = вместо == вещь:

Error while trying to load a compilation database:
Could not auto-detect compilation database for file "main.c"
No compilation database found in /home/oren or any parent directory
fixed-compilation-database: Error while opening fixed database: No such file or directory
json-compilation-database: Error while opening JSON database: No such file or directory
Running without flags.
1 warning generated.
/home/oren/main.c:6:11: warning: using the result of an assignment as a condition without parentheses [clang-diagnostic-parentheses]
        if (argc = 5) { return 2; }
            ~~~~ ^  ~
            (    == )
/home/oren/main.c:6:11: note: place parentheses around the assignment to silence this warning
/home/oren/main.c:6:11: note: use '==' to turn this assignment into an equality comparison

1 Ответ

1 голос
/ 03 февраля 2020

Вы используете функцию из еще не выпущенной версии LLVM (10.0.0).

В моей системе (windows) ваш файл работает должным образом:

>clang-tidy10 -checks=bugprone-infinite-loop infloop.c --
1 warning generated.
\infloop.c:6:5: warning: this loop is infinite; none of its con
dition variables (i, argc) are updated in the loop body [bugprone-infinite-loop]

while (i<argc) { j++; }
^

Единственное изменение, которое я сделал для файла, - удаление ненужного #include. Я также добавил -- (double da sh) к команде, чтобы избавиться от отсутствующих ошибок базы данных компиляции. Я использую предварительно скомпилированный двоичный файл из https://llvm.org/builds/

Мое лучшее предположение здесь состоит в том, что вы используете более старую сборку clang-tidy, где это не обнаружено. Для справки, моя версия 10.0.0-e20a1e486e1, вы можете увидеть свою, запустив:

>clang-tidy --version

Я бы также проверил, действительно ли вы запускаете чеки, которые вы должны выполнить через:

$ clang-tidy -checks=bugprone-infinite-loop main.c --list-checks

PS Сначала вы получили предупреждающее сообщение на основе clang-Diagnostti c, это не имеет ничего общего с clang-tidy, а скорее с компиляцией clang

...