// RUN: %clang_dfsan -m64 %s -o %t && %run %t
// RUN: %clang_dfsan -mllvm -dfsan-args-abi -m64 %s -o %t && %run %t

// Tests that labels are propagated through computation and that union labels
// are properly created.

#include <sanitizer/dfsan_interface.h>
#include <assert.h>

int main(void) {
  assert(dfsan_union(0, 0) == 0);

  int i = 1;
  dfsan_label i_label = dfsan_create_label("i", 0);
  dfsan_set_label(i_label, &i, sizeof(i));

  int j = 2;
  dfsan_label j_label = dfsan_create_label("j", 0);
  dfsan_set_label(j_label, &j, sizeof(j));

  int k = 3;
  dfsan_label k_label = dfsan_create_label("k", 0);
  dfsan_set_label(k_label, &k, sizeof(k));

  int k2 = 4;
  dfsan_set_label(k_label, &k2, sizeof(k2));

  dfsan_label ij_label = dfsan_get_label(i + j);
  assert(dfsan_has_label(ij_label, i_label));
  assert(dfsan_has_label(ij_label, j_label));
  assert(!dfsan_has_label(ij_label, k_label));
  // Test uniquing.
  assert(dfsan_union(i_label, j_label) == ij_label);
  assert(dfsan_union(j_label, i_label) == ij_label);

  dfsan_label ijk_label = dfsan_get_label(i + j + k);
  assert(dfsan_has_label(ijk_label, i_label));
  assert(dfsan_has_label(ijk_label, j_label));
  assert(dfsan_has_label(ijk_label, k_label));

  assert(dfsan_get_label(k + k2) == k_label);

  struct { int i, j; } s = { i, j };
  assert(dfsan_read_label(&s, sizeof(s)) == ij_label);

  return 0;
}
