Сканирование Coverity не в состоянии построитьс определением _GNU_SOURCE - PullRequest
0 голосов
/ 20 мая 2018

Инструменту сборки Coverity Scan не удается скомпилировать любой файл C, который включает <stdlib.h> в Ubuntu 18.04, когда определено _GNU_SOURCE:

$ cat > main.c
#include <stdlib.h>
int main() {
}
$ 
$ gcc -D_GNU_SOURCE=1 -o main main.c 
$ 
$ /opt/cov-analysis/bin/cov-build --dir cov-int gcc -D_GNU_SOURCE=1 -o main main.c 
Coverity Build Capture (64-bit) version 2017.07 on Linux 4.15.0-20-generic x86_64
...
[WARNING] Emitted 0 C/C++ compilation units (0%) successfully
...
$ 

Та же сборка отлично работает на Ubuntu 16.04 или без _GNU_SOURCE определено:

$ /volatile/local/cov-analysis/bin/cov-build --dir cov-int gcc -o main main.c 
Coverity Build Capture (64-bit) version 2017.07 on Linux 4.15.0-20-generic x86_64
...
Emitted 1 C/C++ compilation units (100%) successfully
...
$ 

Как получить Coverity Scan для создания источников C с _GNU_SOURCE, определенных в Ubuntu 18.04?

Для заинтересованных лиц файл cov-int/build-log.txt можетможно найти здесь:
https://gist.github.com/DimitriPapadopoulos/0dcd9018eed26401cc6095087d9cc1d5

Ответы [ 2 ]

0 голосов
/ 08 мая 2019

Coverity не может определить типы, которые определит GCC, но в любом случае он утверждает, что это GCC.Вот обходной путь: https://gist.github.com/vathpela/0cede6d6eb5b0ec0791c6afc4282c340#file-fix_coverity-h

Только убедитесь, что вы делаете:

#include "fix_coverity.h"

до включения stdlib.h, прямо или косвенно.

0 голосов
/ 22 мая 2018

После обращения в службу поддержки Coverity выясняется, что это известная ошибка.Они предложили мне обойти это, переключившись с компилятора Ubuntu 18.04 по умолчанию (GCC 7) на предыдущую версию (GCC 6):

sudo apt install gcc-6

Действительно _Float32, _Float32x, _Float64, _Float64x и _Float128 были введены в GCC 7 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...