1*97ccf6b8SFangrui Song // Test that thread local data is handled correctly after forking without exec(). 2*97ccf6b8SFangrui Song // RUN: %clangxx_lsan %s -o %t 3*97ccf6b8SFangrui Song // RUN: %run %t 2>&1 4*97ccf6b8SFangrui Song 5*97ccf6b8SFangrui Song #include <assert.h> 6*97ccf6b8SFangrui Song #include <stdio.h> 7*97ccf6b8SFangrui Song #include <stdlib.h> 8*97ccf6b8SFangrui Song #include <sys/wait.h> 9*97ccf6b8SFangrui Song #include <unistd.h> 10*97ccf6b8SFangrui Song 11*97ccf6b8SFangrui Song __thread void *thread_local_var; 12*97ccf6b8SFangrui Song main()13*97ccf6b8SFangrui Songint main() { 14*97ccf6b8SFangrui Song int status = 0; 15*97ccf6b8SFangrui Song thread_local_var = malloc(1337); 16*97ccf6b8SFangrui Song pid_t pid = fork(); 17*97ccf6b8SFangrui Song assert(pid >= 0); 18*97ccf6b8SFangrui Song if (pid > 0) { 19*97ccf6b8SFangrui Song waitpid(pid, &status, 0); 20*97ccf6b8SFangrui Song assert(WIFEXITED(status)); 21*97ccf6b8SFangrui Song return WEXITSTATUS(status); 22*97ccf6b8SFangrui Song } 23*97ccf6b8SFangrui Song return 0; 24*97ccf6b8SFangrui Song } 25