// Test reports dedupication for recovery mode.
//
// RUN: %clang_asan -fsanitize-recover=address %s -o %t
//
// Check for reports dedupication.
// RUN: %env_asan_opts=halt_on_error=false %run %t 2>&1 | FileCheck %s
//
// Check that we die after reaching different reports number threshold.
// RUN: rm -f %t1.log
// RUN: %env_asan_opts=halt_on_error=false not %run %t 1 >> %t1.log 2>&1
// RUN: grep 'ERROR: AddressSanitizer: stack-buffer-overflow' %t1.log | count 25
//
// Check suppress_equal_pcs=true behavior is equal to default one.
// RUN: %env_asan_opts=halt_on_error=false:suppress_equal_pcs=true %run %t 2>&1 | FileCheck %s
//
// Check suppress_equal_pcs=false behavior isn't equal to default one.
// RUN: rm -f %t2.log
// RUN: %env_asan_opts=halt_on_error=false:suppress_equal_pcs=false %run %t >> %t2.log 2>&1
// RUN: grep 'ERROR: AddressSanitizer: stack-buffer-overflow' %t2.log | count 30

#define ACCESS_ARRAY_FIVE_ELEMENTS(array, i)     \
  array[i] = i;                                  \
  array[i + 1] = i + 1;                          \
  array[i + 2] = i + 2;                          \
  array[i + 3] = i + 3;                          \
  array[i + 4] = i + 4;                          \

volatile int ten = 10;
unsigned kNumIterations = 10;

int main(int argc, char **argv) {
  char a[10];
  char b[10];

  if (argc == 1) {
    for (int i = 0; i < kNumIterations; ++i) {
      // CHECK: READ of size 1
      volatile int res = a[ten + i];
      // CHECK: WRITE of size 1
      a[i + ten] = res + 3;
      // CHECK: READ of size 1
      res = a[ten + i];
      // CHECK-NOT: ERROR
    }
  } else {
    for (int i = 0; i < kNumIterations; ++i) {
      ACCESS_ARRAY_FIVE_ELEMENTS(a, ten);
      ACCESS_ARRAY_FIVE_ELEMENTS(a, ten + 5);
      ACCESS_ARRAY_FIVE_ELEMENTS(a, ten + 10);
      ACCESS_ARRAY_FIVE_ELEMENTS(b, ten);
      ACCESS_ARRAY_FIVE_ELEMENTS(b, ten + 5);
      ACCESS_ARRAY_FIVE_ELEMENTS(b, ten + 10);
    }
  }
  return 0;
}

