Покрытие кода Clang неправильно покрывает строки в #ifdef

#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 должен быть достаточно умен, чтобы понять это. У кого-нибудь есть какие-либо предложения о том, как это исправить?