// RUN: %clang_analyze_cc1 -analyzer-checker=core,alpha.core -analyzer-max-loop 2 -analyzer-config widen-loops=true -analyzer-output=text -verify -analyzer-config eagerly-assume=false %s

int *p_a;
int bar();
int flag_a;
int test_for_bug_25609() {
  if (p_a == 0) // expected-note {{Assuming 'p_a' is equal to null}} 
                // expected-note@-1 {{Taking true branch}}
    bar();
  for (int i = 0;  // expected-note {{Loop condition is true.  Entering loop body}}                    
                   // expected-note@-1 {{Loop condition is false. Execution continues on line 16}}
       ++i,        // expected-note {{Value assigned to 'p_a'}} 
       i < flag_a;
       ++i) {}
                                      
  *p_a = 25609; // no-crash expected-warning {{Dereference of null pointer (loaded from variable 'p_a')}}
                // expected-note@-1 {{Dereference of null pointer (loaded from variable 'p_a')}}
  return *p_a;
}

int flag_b;
int while_analyzer_output() {
  flag_b = 100;
  int num = 10;
  while (flag_b-- > 0) { // expected-note {{Loop condition is true.  Entering loop body}} 
                         // expected-note@-1 {{Value assigned to 'num'}} 
                         // expected-note@-2 {{Loop condition is false. Execution continues on line 30}}
    num = flag_b;
  }
  if (num < 0) // expected-note {{Assuming 'num' is >= 0}} 
               // expected-note@-1 {{Taking false branch}}
    flag_b = 0;
  else if (num >= 1) // expected-note {{Assuming 'num' is < 1}} 
                     // expected-note@-1 {{Taking false branch}}
    flag_b = 50;
  else
    flag_b = 100;
  return flag_b / num; // no-crash expected-warning {{Division by zero}} 
                       // expected-note@-1 {{Division by zero}}
}

int flag_c;
int do_while_analyzer_output() {
  int num = 10;
  do {   // expected-note {{Loop condition is true. Execution continues on line 47}} 
         // expected-note@-1 {{Loop condition is false.  Exiting loop}}
    num--;
  } while (flag_c-- > 0); //expected-note {{Value assigned to 'num'}}
  int local = 0;
  if (num == 0)       // expected-note {{Assuming 'num' is equal to 0}} 
                      // expected-note@-1 {{Taking true branch}}
    local = 10 / num; // no-crash expected-warning {{Division by zero}}
                      // expected-note@-1 {{Division by zero}}
  return local;
}

int flag_d;
int test_for_loop() {
  int num = 10;
  for (int i = 0;    // expected-note {{Loop condition is true.  Entering loop body}} 
                     // expected-note@-1 {{Loop condition is false. Execution continues on line 67}}
       new int(10),  // expected-note {{Value assigned to 'num'}}
       i < flag_d;
       ++i) {         
    ++num;
  }
  if (num == 0) // expected-note {{Assuming 'num' is equal to 0}} 
                // expected-note@-1 {{Taking true branch}}
    flag_d += 10;
  return flag_d / num; // no-crash expected-warning {{Division by zero}} 
                       // expected-note@-1 {{Division by zero}}
}
