// RUN: %check_clang_tidy %s misc-bool-pointer-implicit-conversion %t

bool *SomeFunction();
void SomeOtherFunction(bool*);
bool F();
void G(bool);


template <typename T>
void t(T b) {
  if (b) {
  }
}

void foo() {
  bool *b = SomeFunction();
  if (b) {
// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: dubious check of 'bool *' against 'nullptr'
// CHECK-FIXES: if (*b) {
  }

  if (F() && b) {
// CHECK-MESSAGES: :[[@LINE-1]]:14: warning: dubious check of 'bool *' against 'nullptr'
// CHECK-FIXES: if (F() && *b) {
  }

  // TODO: warn here.
  if (b) {
    G(b);
  }

#define TESTMACRO if (b || F())

  TESTMACRO {
  }

  t(b);

  if (!b) {
    // no-warning
  }

  if (SomeFunction()) {
    // no-warning
  }

  bool *c = SomeFunction();
  if (c) {
    (void)c;
    (void)*c; // no-warning
  }

  if (c) {
    *c = true; // no-warning
  }

  if (c) {
    c[0] = false; // no-warning
  }

  if (c) {
    SomeOtherFunction(c); // no-warning
  }

  if (c) {
    delete[] c; // no-warning
  }

  if (c) {
    *(c) = false; // no-warning
  }

  struct {
    bool *b;
  } d = { SomeFunction() };

  if (d.b)
    (void)*d.b; // no-warning

#define CHECK(b) if (b) {}
  CHECK(c)
}
