/*
 * Copyright (c) 2016-present, Programming Research Laboratory (ROPAS)
 *                             Seoul National University, Korea
 * Copyright (c) 2017-present, Facebook, Inc.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */

void while_loop() {
  int i = 0;
  char* a = malloc(10);
  while (*(a + i) && i < 10) /* BUG */
    a[i++] = 1; /* SAFE */
}

struct S {
  struct S* f;
};

void dummy_func(struct S* x) {}

void diverge_on_narrowing() {
  struct S* x;
  while (1) {
    dummy_func(0);
    x = x->f;
  }
}

void join_minmax_with_sum_unsigned_Good(unsigned int x, unsigned int y) {
  char a[x + y + 1];
  int i = 0;
  while (i < x + y) {
    if (i > 5) {
      y = 0;
    }
    i++;
  }
  a[i] = 2;
}

void call_join_minmax_with_sum_unsigned_Good() {
  join_minmax_with_sum_unsigned_Good(15, 50);
}

void join_minmax_with_sum_signed_Good_FP(int x, int y) {
  int s = x + y;
  if (s < 0)
    s = 0;
  char a[s + 1];
  int i = 0;
  while (i < x + y) {
    if (i > 5) {
      y = 0;
    }
    i++;
  }
  a[i] = 2;
}
