From c0ae07e98cb60702d8bb989a57375434abae9275 Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Thu, 18 Sep 2014 19:00:02 +0000 Subject: [PATCH] tsan: fix signal_longjmp test in debug mode In debug mode tsan checks that user accesses access user memory. NULL is not user memory. So the test fails. Allocate real inaccessible memory for the test. llvm-svn: 218069 --- compiler-rt/test/tsan/signal_longjmp.cc | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/compiler-rt/test/tsan/signal_longjmp.cc b/compiler-rt/test/tsan/signal_longjmp.cc index 7991a6f73a82..84b0682dcbaf 100644 --- a/compiler-rt/test/tsan/signal_longjmp.cc +++ b/compiler-rt/test/tsan/signal_longjmp.cc @@ -7,6 +7,7 @@ #include #include #include +#include sigjmp_buf fault_jmp; volatile int fault_expected; @@ -45,9 +46,12 @@ int main() { exit(1); } - MUST_FAULT(((volatile int *volatile)0)[0] = 0); - MUST_FAULT(((volatile int *volatile)0)[1] = 1); - MUST_FAULT(((volatile int *volatile)0)[3] = 1); + void *mem = mmap(0, 4096, PROT_NONE, MAP_PRIVATE | MAP_ANON, + -1, 0); + + MUST_FAULT(((volatile int *volatile)mem)[0] = 0); + MUST_FAULT(((volatile int *volatile)mem)[1] = 1); + MUST_FAULT(((volatile int *volatile)mem)[3] = 1); // Ensure that tsan does not think that we are // in a signal handler. @@ -55,6 +59,8 @@ int main() { ((volatile int*)p)[1] = 1; free((void*)p); + munmap(p, 4096); + fprintf(stderr, "DONE\n"); return 0; }