// RUN: %clang_analyze_cc1 -std=c99 -Dbool=_Bool -analyzer-checker=core,alpha.core.TestAfterDivZero -analyzer-output=text -verify -analyzer-config eagerly-assume=false %s
// RUN: %clang_analyze_cc1 -x c++ -analyzer-checker=core,alpha.core.TestAfterDivZero -analyzer-output=text -verify -analyzer-config eagerly-assume=false %s

int var;

void err_eq(int x) {
  var = 77 / x; // expected-note {{Division with compared value made here}}
  if (x == 0) { } // expected-warning {{Value being compared against zero has already been used for division}}
} // expected-note@-1 {{Value being compared against zero has already been used for division}}

void err_eq2(int x) {
  var = 77 / x; // expected-note {{Division with compared value made here}}
  if (0 == x) { } // expected-warning {{Value being compared against zero has already been used for division}}
} // expected-note@-1 {{Value being compared against zero has already been used for division}}

void err_ne(int x) {
  var = 77 / x; // expected-note {{Division with compared value made here}}
  if (x != 0) { } // expected-warning {{Value being compared against zero has already been used for division}}
} // expected-note@-1 {{Value being compared against zero has already been used for division}}

void err_ge(int x) {
  var = 77 / x; // expected-note {{Division with compared value made here}}
  if (x >= 0) { } // expected-warning {{Value being compared against zero has already been used for division}}
} // expected-note@-1 {{Value being compared against zero has already been used for division}}

void err_le(int x) {
  var = 77 / x; // expected-note {{Division with compared value made here}}
  if (x <= 0) {} // expected-warning {{Value being compared against zero has already been used for division}}
} // expected-note@-1 {{Value being compared against zero has already been used for division}}

void err_yes(int x) {
  var = 77 / x; // expected-note {{Division with compared value made here}}
  if (x) {} // expected-warning {{Value being compared against zero has already been used for division}}
} // expected-note@-1 {{Value being compared against zero has already been used for division}}
void err_not(int x) {
  var = 77 / x; // expected-note {{Division with compared value made here}}
  if (!x) {} // expected-warning {{Value being compared against zero has already been used for division}}
} // expected-note@-1 {{Value being compared against zero has already been used for division}}

void err_pnot(int x) {
  int *y = &x;
  var = 77 / *y; // expected-note {{Division with compared value made here}}
  if (!x) {} // expected-warning {{Value being compared against zero has already been used for division}}
} // expected-note@-1 {{Value being compared against zero has already been used for division}}

void err_pnot2(int x) {
  int *y = &x;
  var = 77 / x; // expected-note {{Division with compared value made here}}
  if (!*y) {} // expected-warning {{Value being compared against zero has already been used for division}}
} // expected-note@-1 {{Value being compared against zero has already been used for division}}

void err_ppnot(int x) {
  int *y = &x;
  int **z = &y;
  var = 77 / **z; // expected-note {{Division with compared value made here}}
  if (!x) {} // expected-warning {{Value being compared against zero has already been used for division}}
} // expected-note@-1 {{Value being compared against zero has already been used for division}}

void err_orig_checker(int x) {
  if (x != 0) // expected-note {{Assuming 'x' is equal to 0}} expected-note {{Taking false branch}}
    return;
  var = 77 / x; // expected-warning {{Division by zero}} expected-note {{Division by zero}}
  if (!x) {} // no-warning
}

void ok_other(int x, int y) {
  var = 77 / y;
  if (x == 0) {
  }
}

void ok_assign(int x) {
  var = 77 / x;
  x = var / 77; // <- assignment => don't warn
  if (x == 0) {
  }
}

void ok_assign2(int x) {
  var = 77 / x;
  x = var / 77; // <- assignment => don't warn
  if (0 == x) {
  }
}

void ok_dec(int x) {
  var = 77 / x;
  x--; // <- assignment => don't warn
  if (x == 0) {
  }
}

void ok_inc(int x) {
  var = 77 / x;
  x++; // <- assignment => don't warn
  if (x == 0) {
  }
}

void do_something_ptr(int *x);
void ok_callfunc_ptr(int x) {
  var = 77 / x;
  do_something_ptr(&x); // <- pass address of x to function => don't warn
  if (x == 0) {
  }
}

void do_something(int x);
void nok_callfunc(int x) {
  var = 77 / x; // expected-note {{Division with compared value made here}}
  do_something(x);
  if (x == 0) {} // expected-warning {{Value being compared against zero has already been used for division}}
} // expected-note@-1 {{Value being compared against zero has already been used for division}}

void ok_if(int x) {
  if (x > 3)
    var = 77 / x;
  if (x == 0) {
  }
}

void ok_if2(int x) {
  if (x < 3)
    var = 77 / x;
  if (x == 0) {
  } // TODO warn here
}

void ok_pif(int x) {
  int *y = &x;
  if (x < 3)
    var = 77 / *y;
  if (x == 0) {
  } // TODO warn here
}

int getValue(bool *isPositive);
void use(int a);
void foo() {
  bool isPositive;
  int x = getValue(&isPositive);
  if (isPositive) {
    use(5 / x);
  }

  if (x == 0) {
  }
}

int getValue2();
void foo2() {
  int x = getValue2();
  int y = x;

  use(5 / x); // expected-note {{Division with compared value made here}}
  if (y == 0) {} // expected-warning {{Value being compared against zero has already been used for division}}
} // expected-note@-1 {{Value being compared against zero has already been used for division}}

void ok_while(int x) {
  int n = 100 / x;
  while (x != 0) { // <- do not warn
    x--;
  }
}

void err_not2(int x, int y) {
  int v;
  var = 77 / x;

  if (y)
    v = 0;

  if (!x) {
  } // TODO warn here
}

inline void inline_func(int x) {
  var = 77 / x; // expected-note {{Division with compared value made here}}
  if (x == 0) {} // expected-warning {{Value being compared against zero has already been used for division}}
} // expected-note@-1 {{Value being compared against zero has already been used for division}}

void err_inline(int x) {
  var = 77 / x;
  inline_func(x); // expected-note {{Calling 'inline_func'}}
  if (x == 0) {
  }
}

inline void inline_func2(int x) {}

void err_inline2(int x) {
  var = 77 / x; // expected-note {{Division with compared value made here}}
  inline_func2(x);
  if (x == 0) {} // expected-warning {{Value being compared against zero has already been used for division}}
} // expected-note@-1 {{Value being compared against zero has already been used for division}}

inline void inline_func3(int x) {
  var = 77 / x;
}
void ok_inline(int x) {
  var = 77 / x; // expected-note {{Division with compared value made here}}
  inline_func3(x);
  if (x == 0) {} // expected-warning {{Value being compared against zero has already been used for division}}
} // expected-note@-1 {{Value being compared against zero has already been used for division}}
