xref: /llvm-project/compiler-rt/test/sanitizer_common/TestCases/Linux/odd_stack_size.cpp (revision 75b0a99668cef7abaf36e09c41bb1eb91234bbf3)
1 // RUN: %clangxx -O1 %s -o %t && %run %t
2 // UNSUPPORTED: android
3 
4 // Fail on powerpc64 bots with:
5 // AddressSanitizer: CHECK failed: asan_thread.cpp:315 "((AddrIsInStack((uptr)&local))) != (0)"
6 // https://lab.llvm.org/buildbot/#/builders/18/builds/8162
7 // UNSUPPORTED: target=powerpc64{{.*}}
8 /// Occasionally fail on loongarch64 machine
9 // UNSUPPORTED: target=loongarch64{{.*}}
10 
11 #include <assert.h>
12 #include <stdlib.h>
13 #include <sys/resource.h>
14 #include <sys/wait.h>
15 #include <unistd.h>
16 
main(int argc,char ** argv)17 int main(int argc, char **argv) {
18   if (getenv("SANITIZER_TEST_REEXECED"))
19     exit(0);
20   struct rlimit rl;
21   assert(!getrlimit(RLIMIT_STACK, &rl));
22   struct rlimit rl_new = rl;
23   rl_new.rlim_cur = 17351;
24   assert(!setrlimit(RLIMIT_STACK, &rl_new));
25   int pid = fork();
26   assert(pid >= 0);
27   if (pid == 0) {
28     const char *envp[] = {"SANITIZER_TEST_REEXECED=1", nullptr};
29     execve(argv[0], argv, const_cast<char **>(envp));
30     assert(false);
31   }
32   int status;
33   while (waitpid(-1, &status, __WALL) != pid) {
34   }
35   assert(WIFEXITED(status) && WEXITSTATUS(status) == 0);
36   return 0;
37 }
38