// Checks that dfsan works with trace-cmp instrumentation, even if some hooks
// are not defined (relies on week hooks implemented in dfsan).
//
// RUN: %clang_dfsan -fsanitize-coverage=trace-pc-guard,pc-table,func,trace-cmp %s -o %t
// RUN: %run %t 2>&1 | FileCheck %s

#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>

#include <sanitizer/dfsan_interface.h>

uint32_t a4, b4;
uint64_t a8, b8;

// Define just two hooks, and leave others undefined.
void __dfsw___sanitizer_cov_trace_const_cmp4(uint8_t a, uint8_t b,
                                             dfsan_label l1, dfsan_label l2) {
  printf("const_cmp4 %d %d\n", a, b);
}
void __dfsw___sanitizer_cov_trace_cmp8(uint8_t a, uint8_t b, dfsan_label l1,
                                       dfsan_label l2) {
  printf("cmp8 %d %d\n", a, b);
}

int main(int argc, char **argv) {
  printf("MAIN\n");
  // CHECK: MAIN

  if (a4 != b4) abort();
  if (a4 == 42) abort();
  // CHECK: const_cmp4 42 0
  if (a8 != b8) abort();
  // CHECK: cmp8 0 0
  if (a8 == 66) abort();

  switch (10 / (a4 + 2)) {
    case 1: abort();
    case 2: exit(1);
    case 5:
            printf("SWITCH OK\n");
            break;
  }
  // CHECK: SWITCH OK


  printf("DONE\n");
  // CHECK: DONE
  return 0;
}
