mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-25 10:26:06 +00:00

These tests rely on an unintended behavior that when the driver performs both compilation and linking phases, the .gcno & .gcda files are placed in PWD. The behavior will be fixed to respect -o (match -ftime-trace, -gsplit-dwarf, and GCC). Add -dumpdir ./ so that the tests will work with or without the behavior change, and make it easy to compare the coverage behavior with GCC.
56 lines
1.2 KiB
C
56 lines
1.2 KiB
C
// This test checks that the cycle detection algorithm in llvm-cov is able to
|
|
// handle complex block graphs by skipping zero count cycles.
|
|
//
|
|
// RUN: mkdir -p %t.dir && cd %t.dir
|
|
// RUN: %clang --coverage %s -o %t -dumpdir ./
|
|
// RUN: rm -f gcov-complex-line.gcda && %run %t
|
|
// RUN: llvm-cov gcov -t gcov-complex-line.c | FileCheck %s
|
|
|
|
#define M_0 \
|
|
do { \
|
|
if (x == 0) \
|
|
x = 0; \
|
|
else \
|
|
x = 1; \
|
|
} while (0)
|
|
#define M_1 \
|
|
do { \
|
|
M_0; \
|
|
M_0; \
|
|
M_0; \
|
|
M_0; \
|
|
} while (0)
|
|
#define M_2 \
|
|
do { \
|
|
M_1; \
|
|
M_1; \
|
|
M_1; \
|
|
M_1; \
|
|
} while (0)
|
|
#define M_3 \
|
|
do { \
|
|
M_2; \
|
|
M_2; \
|
|
M_2; \
|
|
M_2; \
|
|
} while (0)
|
|
#define M_4 \
|
|
do { \
|
|
M_3; \
|
|
M_3; \
|
|
M_3; \
|
|
M_3; \
|
|
} while (0)
|
|
#define COMPLEX_LINE \
|
|
do { \
|
|
for (int i = 0; i < 100; ++i) \
|
|
M_4; \
|
|
} while (0)
|
|
|
|
int main() {
|
|
volatile int x = 0;
|
|
// In the following line, the number of cycles in the block graph is at least
|
|
// 2^256, where 256 is the number of expansions of M_0.
|
|
COMPLEX_LINE; // CHECK: 101: [[#@LINE]]: COMPLEX_LINE;
|
|
}
|