llvm-project/compiler-rt/test/profile/gcov-complex-line.c
Fangrui Song 0f9f247361 [gcov][test] Add -dumpdir ./
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.
2023-05-17 11:54:38 -07:00

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;
}