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