DXR is a code search and navigation tool aimed at making sense of large projects. It supports full-text and regex searches as well as structural queries.

Mercurial (cdf352f02ac4)

VCS Links

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
// https://clang.llvm.org/extra/clang-tidy/checks/bugprone-macro-repeated-side-effects.html

#define MACRO_WITHOUT_REPEATED_ARG(x) (x)
#define MACRO_WITH_REPEATED_ARG(x) ((x) + (x))

static int g;

int function_with_side_effects(int i)
{
  g += i;
  return g;
}

void test()
{
  int i;
  i = MACRO_WITHOUT_REPEATED_ARG(1); // OK
  i = MACRO_WITH_REPEATED_ARG(1); // OK

  i = MACRO_WITHOUT_REPEATED_ARG(i); // OK
  i = MACRO_WITH_REPEATED_ARG(i); // OK

  i = MACRO_WITHOUT_REPEATED_ARG(function_with_side_effects(i)); // OK
  i = MACRO_WITH_REPEATED_ARG(function_with_side_effects(i)); // NO WARNING

  i = MACRO_WITHOUT_REPEATED_ARG(i++); // OK
  i = MACRO_WITH_REPEATED_ARG(i++); // WARNING
}