12d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// Test that preloaded runtime works with unsanitized executables.
22d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines//
32d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: %clangxx %s -o %t
42d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: LD_PRELOAD=%shared_libasan not %run %t 2>&1 | FileCheck %s
52d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
62d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// REQUIRES: asan-dynamic-runtime
786277eb844c4983c81de62d7c050e92fe7155788Stephen Hines
886277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// This way of setting LD_PRELOAD does not work with Android test runner.
986277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// REQUIRES: not-android
102d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
112d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include <stdlib.h>
122d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
1386277eb844c4983c81de62d7c050e92fe7155788Stephen Hinesextern "C" ssize_t write(int fd, const void *buf, size_t count);
142d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
152d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesvoid do_access(void *p) {
162d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  // CHECK: AddressSanitizer: heap-buffer-overflow
1786277eb844c4983c81de62d7c050e92fe7155788Stephen Hines  write(1, p, 2);
182d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines}
192d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
202d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesint main(int argc, char **argv) {
212d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  void *p = malloc(1);
222d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  do_access(p);
232d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  return 0;
242d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines}
25