18b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov// RUN: %clang_tsan -O1 %s -o %t && %t 2>&1 | FileCheck %s 28b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov#include <stdio.h> 38b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov#include <stdlib.h> 48b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov#include <setjmp.h> 58b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov 68b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukovint foo(sigjmp_buf env) { 78b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov printf("env=%p\n", env); 88b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov siglongjmp(env, 42); 98b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov} 108b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov 118b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukovint main() { 128b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov sigjmp_buf env; 138b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov printf("env=%p\n", env); 148b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov if (sigsetjmp(env, 1) == 42) { 158b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov printf("JUMPED\n"); 168b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov return 0; 178b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov } 188b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov foo(env); 198b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov printf("FAILED\n"); 208b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov return 0; 218b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov} 228b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov 238b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov// CHECK-NOT: FAILED 248b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov// CHECK: JUMPED 25