xref: /llvm-project/compiler-rt/test/tsan/munmap_invalid.cpp (revision 4a5086dce35834bb7143a6b468718974570f0c32)
11b576585SDmitry Vyukov // RUN: %clang_tsan -O1 %s -o %t && %run %t 2>&1 | FileCheck %s
21b576585SDmitry Vyukov 
3*4a5086dcSDmitry Vyukov // Fails on Darwin bots:
4*4a5086dcSDmitry Vyukov // https://green.lab.llvm.org/green//job/clang-stage1-RA/25954/consoleFull
5*4a5086dcSDmitry Vyukov // and on clang-s390x-linux-lnt:
6*4a5086dcSDmitry Vyukov // https://lab.llvm.org/buildbot#builders/45/builds/5224
7*4a5086dcSDmitry Vyukov // Presumably the test is not 100% legal and kernel is allowed
8*4a5086dcSDmitry Vyukov // to unmap part of the range (e.g. .text) and then fail.
9*4a5086dcSDmitry Vyukov // So let's be conservative:
10*4a5086dcSDmitry Vyukov // REQUIRES: linux, x86_64-target-arch
11*4a5086dcSDmitry Vyukov 
121b576585SDmitry Vyukov #include "test.h"
131b576585SDmitry Vyukov #include <sys/mman.h>
141b576585SDmitry Vyukov 
main()151b576585SDmitry Vyukov int main() {
161b576585SDmitry Vyukov   // These bogus munmap's must not crash tsan runtime.
171b576585SDmitry Vyukov   munmap(0, 1);
181b576585SDmitry Vyukov   munmap(0, -1);
191b576585SDmitry Vyukov   munmap((void *)main, -1);
201b576585SDmitry Vyukov   void *p =
211b576585SDmitry Vyukov       mmap(0, 4096, PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0);
221b576585SDmitry Vyukov   munmap(p, (1ull << 60));
231b576585SDmitry Vyukov   munmap(p, -10000);
241b576585SDmitry Vyukov   munmap(p, 0);
251b576585SDmitry Vyukov   fprintf(stderr, "DONE\n");
261b576585SDmitry Vyukov   return 0;
271b576585SDmitry Vyukov }
281b576585SDmitry Vyukov 
291b576585SDmitry Vyukov // CHECK: DONE
30