// This test is broken with shared libstdc++ / libc++ on Android.
// RUN: %clangxx_hwasan -static-libstdc++ %s -o %t && %run %t 2>&1 | FileCheck %s --check-prefix=GOOD
// RUN: %clangxx_hwasan -static-libstdc++ -DNO_SANITIZE_F %s -o %t && %run %t 2>&1 | FileCheck %s --check-prefix=GOOD
// RUN: %clangxx_hwasan_oldrt -static-libstdc++ %s -o %t && %run %t 2>&1 | FileCheck %s --check-prefix=GOOD
// RUN: %clangxx_hwasan_oldrt -static-libstdc++ %s -mllvm -hwasan-instrument-landing-pads=0 -o %t && not %run %t 2>&1 | FileCheck %s --check-prefix=BAD

// C++ tests on x86_64 require instrumented libc++/libstdc++.
// REQUIRES: aarch64-target-arch

#include <stdexcept>
#include <cstdio>

static void optimization_barrier(void* arg) {
  asm volatile("" : : "r"(arg) : "memory");
}

__attribute__((noinline))
void h() {
  char x[1000];
  optimization_barrier(x);
  throw std::runtime_error("hello");
}

__attribute__((noinline))
void g() {
  char x[1000];
  optimization_barrier(x);
  h();
  optimization_barrier(x);
}

__attribute__((noinline))
void hwasan_read(char *p, int size) {
  char volatile sink;
  for (int i = 0; i < size; ++i)
    sink = p[i];
}

__attribute__((noinline, no_sanitize("hwaddress"))) void after_catch() {
  char x[10000];
  hwasan_read(&x[0], sizeof(x));
}


__attribute__((noinline))
#ifdef NO_SANITIZE_F
__attribute__((no_sanitize("hwaddress")))
#endif
void f() {
  char x[1000];
  try {
    // Put two tagged frames on the stack, throw an exception from the deepest one.
    g();
  } catch (const std::runtime_error &e) {
    // Put an untagged frame on stack, check that it is indeed untagged.
    // This relies on exception support zeroing out stack tags.
    // BAD: tag-mismatch
    after_catch();
    // Check that an in-scope stack allocation is still tagged.
    // This relies on exception support not zeroing too much.
    hwasan_read(&x[0], sizeof(x));
    // GOOD: hello
    printf("%s\n", e.what());
  }
}

int main() {
  f();
}
