// RUN: %clang_analyze_cc1 -analyzer-checker=core,alpha -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}}
}
