// RUN: %check_clang_tidy %s readability-delete-null-pointer %t

#define NULL 0

void f() {
  int *p = 0;

  // #1
  if (p) { // #2
    delete p;
  } // #3
  // CHECK-MESSAGES: :[[@LINE-3]]:3: warning: 'if' statement is unnecessary; deleting null pointer has no effect [readability-delete-null-pointer]

  // CHECK-FIXES: {{^  }}// #1
  // CHECK-FIXES-NEXT: {{^  }}// #2
  // CHECK-FIXES-NEXT: delete p;
  // CHECK-FIXES-NEXT: {{^  }}// #3

  int *p2 = new int[3];
  // #4
  if (p2) // #5
    delete[] p2;
  // CHECK-MESSAGES: :[[@LINE-2]]:3: warning: 'if' statement is unnecessary;

  // CHECK-FIXES: // #4
  // CHECK-FIXES-NEXT: {{^  }}// #5
  // CHECK-FIXES-NEXT: delete[] p2;

  int *p3 = 0;
  if (NULL != p3) {
    // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'if' statement is unnecessary;
    delete p3;
  }
  // CHECK-FIXES-NOT: if (NULL != p3) {
  // CHECK-FIXES: delete p3;

  int *p4 = nullptr;
  if (p4 != nullptr) {
    // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'if' statement is unnecessary;
    delete p4;
  }
  // CHECK-FIXES-NOT: if (p4 != nullptr) {
  // CHECK-FIXES: delete p4;

  char *c;
  if (c != 0) {
    // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'if' statement is unnecessary;
    delete c;
  }
  // CHECK-FIXES-NOT: if (c != 0) {
  // CHECK-FIXES: delete c;

  char *c2;
  if (c2) {
    // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'if' statement is unnecessary;
    // CHECK-FIXES: } else {
    // CHECK-FIXES: c2 = c;
    delete c2;
  } else {
    c2 = c;
  }
  struct A {
    void foo() {
      if (mp) // #6
        delete mp;
      // CHECK-MESSAGES: :[[@LINE-2]]:7: warning: 'if' statement is unnecessary; deleting null pointer has no effect [readability-delete-null-pointer]
      // CHECK-FIXES: {{^      }}// #6
      // CHECK-FIXES-NEXT: delete mp;
    }
    int *mp;
  };
}

void g() {
  int *p5, *p6;
  if (p5)
    delete p6;

  if (p5 && p6)
    delete p5;

  if (p6) {
    int x = 5;
    delete p6;
  }
}
