#c #clang #llvm #code-coverage #clang
Вопрос:
У меня есть эта версия clang:
clang version 10.0.0
Target: x86_64-unknown-linux-gnu
Thread model: posix
И я попытался создать покрытие для этого test.cpp
:
#define DEBUG 0
#include <iostream>
int main() {
#if DEBUG
std::cout << "IN DEBUGn";
#else
std::cout << "IN NORMALn";
#endif
return 0;
}
Использование команд:
$ clang -fprofile-instr-generate=test.profraw -fcoverage-mapping test.cpp -o test
$ llvm-profdata merge -sparse -instr test.profraw -o test.profdata
$ llvm-cov show ./test -instr-profile=test.profdata
Это и есть результат:
1| |#define DEBUG 0
2| |#include <iostream>
3| 1|int main() {
4| |#if DEBUG
5| | std::cout << "IN DEBUGn";
6| |#else
7| | std::cout << "IN NORMALn";
8| 1|#endif
9| 1| return 0;
10| 1|}
11| |
Разве это не выглядит неправильно? Строка 7 должна быть рассмотрена здесь. Я знаю, что это связано с директивами компилятора, но я предположил, что clang должен быть достаточно умен, чтобы понять это. У кого-нибудь есть какие-либо предложения о том, как это исправить?