forked from OSchip/llvm-project
				
			[TSAN] Make tsan tests more portable (take 3)
Some tests didn't merge stderr with stdout. Patch by Maxim Kuvyrkov. llvm-svn: 266426
This commit is contained in:
		
							parent
							
								
									f8f6ad74a0
								
							
						
					
					
						commit
						1f42286364
					
				| 
						 | 
					@ -8,7 +8,7 @@ extern "C" void __interceptor_free(void *p);
 | 
				
			||||||
extern "C" void *malloc(unsigned long size) {
 | 
					extern "C" void *malloc(unsigned long size) {
 | 
				
			||||||
  static int first = 0;
 | 
					  static int first = 0;
 | 
				
			||||||
  if (__sync_lock_test_and_set(&first, 1) == 0)
 | 
					  if (__sync_lock_test_and_set(&first, 1) == 0)
 | 
				
			||||||
    printf("user malloc\n");
 | 
					    fprintf(stderr, "user malloc\n");
 | 
				
			||||||
  return __interceptor_malloc(size);
 | 
					  return __interceptor_malloc(size);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,4 @@
 | 
				
			||||||
// RUN: %clangxx_tsan -O1 %s -o %t && %deflake %run %t | FileCheck %s
 | 
					// RUN: %clangxx_tsan -O1 %s -o %t && %deflake %run %t 2>&1 | FileCheck %s
 | 
				
			||||||
// Race between an aligned access and an unaligned access, which
 | 
					// Race between an aligned access and an unaligned access, which
 | 
				
			||||||
// touches the same memory region.
 | 
					// touches the same memory region.
 | 
				
			||||||
#include "test.h"
 | 
					#include "test.h"
 | 
				
			||||||
| 
						 | 
					@ -28,7 +28,7 @@ int main() {
 | 
				
			||||||
  pthread_create(&t[1], NULL, Thread2, NULL);
 | 
					  pthread_create(&t[1], NULL, Thread2, NULL);
 | 
				
			||||||
  pthread_join(t[0], NULL);
 | 
					  pthread_join(t[0], NULL);
 | 
				
			||||||
  pthread_join(t[1], NULL);
 | 
					  pthread_join(t[1], NULL);
 | 
				
			||||||
  printf("Pass\n");
 | 
					  fprintf(stderr, "Pass\n");
 | 
				
			||||||
  // CHECK: ThreadSanitizer: data race
 | 
					  // CHECK: ThreadSanitizer: data race
 | 
				
			||||||
  // CHECK: Pass
 | 
					  // CHECK: Pass
 | 
				
			||||||
  return 0;
 | 
					  return 0;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -33,7 +33,7 @@ int main() {
 | 
				
			||||||
  Global = 43;
 | 
					  Global = 43;
 | 
				
			||||||
  WTFGlobal = 143;
 | 
					  WTFGlobal = 143;
 | 
				
			||||||
  pthread_join(t, 0);
 | 
					  pthread_join(t, 0);
 | 
				
			||||||
  printf("OK\n");
 | 
					  fprintf(stderr, "OK\n");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// CHECK-NOT: WARNING: ThreadSanitizer: data race
 | 
					// CHECK-NOT: WARNING: ThreadSanitizer: data race
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -23,7 +23,7 @@ int main() {
 | 
				
			||||||
  pthread_create(&t[1], NULL, Blacklisted_Thread2, NULL);
 | 
					  pthread_create(&t[1], NULL, Blacklisted_Thread2, NULL);
 | 
				
			||||||
  pthread_join(t[0], NULL);
 | 
					  pthread_join(t[0], NULL);
 | 
				
			||||||
  pthread_join(t[1], NULL);
 | 
					  pthread_join(t[1], NULL);
 | 
				
			||||||
  printf("PASS\n");
 | 
					  fprintf(stderr, "PASS\n");
 | 
				
			||||||
  return 0;
 | 
					  return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -44,6 +44,6 @@ int main() {
 | 
				
			||||||
  pthread_create(&t[1], NULL, Blacklisted_Thread2, NULL);
 | 
					  pthread_create(&t[1], NULL, Blacklisted_Thread2, NULL);
 | 
				
			||||||
  pthread_join(t[0], NULL);
 | 
					  pthread_join(t[0], NULL);
 | 
				
			||||||
  pthread_join(t[1], NULL);
 | 
					  pthread_join(t[1], NULL);
 | 
				
			||||||
  printf("PASS\n");
 | 
					  fprintf(stderr, "PASS\n");
 | 
				
			||||||
  return 0;
 | 
					  return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -47,7 +47,7 @@ int main(int argc, char *argv[]) {
 | 
				
			||||||
    dlclose(lib);
 | 
					    dlclose(lib);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  pthread_join(th, 0);
 | 
					  pthread_join(th, 0);
 | 
				
			||||||
  printf("DONE\n");
 | 
					  fprintf(stderr, "DONE\n");
 | 
				
			||||||
  return 0;
 | 
					  return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -25,7 +25,7 @@ int main() {
 | 
				
			||||||
  pthread_create(&t[1], NULL, Thread2, NULL);
 | 
					  pthread_create(&t[1], NULL, Thread2, NULL);
 | 
				
			||||||
  pthread_join(t[0], NULL);
 | 
					  pthread_join(t[0], NULL);
 | 
				
			||||||
  pthread_join(t[1], NULL);
 | 
					  pthread_join(t[1], NULL);
 | 
				
			||||||
  printf("OK\n");
 | 
					  fprintf(stderr, "OK\n");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// CHECK-NOT: WARNING: ThreadSanitizer: data race
 | 
					// CHECK-NOT: WARNING: ThreadSanitizer: data race
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -23,7 +23,7 @@ int main() {
 | 
				
			||||||
  while (write(pipes[1], &t, 1) != 1) {
 | 
					  while (write(pipes[1], &t, 1) != 1) {
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  pthread_join(t, 0);
 | 
					  pthread_join(t, 0);
 | 
				
			||||||
  printf("OK\n");
 | 
					  fprintf(stderr, "OK\n");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// CHECK-NOT: WARNING: ThreadSanitizer: data race
 | 
					// CHECK-NOT: WARNING: ThreadSanitizer: data race
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -28,7 +28,7 @@ int main() {
 | 
				
			||||||
  pthread_create(&t[1], NULL, Thread2, NULL);
 | 
					  pthread_create(&t[1], NULL, Thread2, NULL);
 | 
				
			||||||
  pthread_join(t[0], NULL);
 | 
					  pthread_join(t[0], NULL);
 | 
				
			||||||
  pthread_join(t[1], NULL);
 | 
					  pthread_join(t[1], NULL);
 | 
				
			||||||
  printf("OK\n");
 | 
					  fprintf(stderr, "OK\n");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// CHECK-NOT: WARNING: ThreadSanitizer: data race
 | 
					// CHECK-NOT: WARNING: ThreadSanitizer: data race
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -53,7 +53,7 @@ int main() {
 | 
				
			||||||
    exit(printf("close failed\n"));
 | 
					    exit(printf("close failed\n"));
 | 
				
			||||||
  if (close(fd2) == -1)
 | 
					  if (close(fd2) == -1)
 | 
				
			||||||
    exit(printf("close failed\n"));
 | 
					    exit(printf("close failed\n"));
 | 
				
			||||||
  printf("DONE\n");
 | 
					  fprintf(stderr, "DONE\n");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// CHECK-NOT: WARNING: ThreadSanitizer: data race
 | 
					// CHECK-NOT: WARNING: ThreadSanitizer: data race
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -27,7 +27,7 @@ int main() {
 | 
				
			||||||
    exit(printf("dup2 failed\n"));
 | 
					    exit(printf("dup2 failed\n"));
 | 
				
			||||||
  barrier_wait(&barrier);
 | 
					  barrier_wait(&barrier);
 | 
				
			||||||
  pthread_join(th, 0);
 | 
					  pthread_join(th, 0);
 | 
				
			||||||
  printf("DONE\n");
 | 
					  fprintf(stderr, "DONE\n");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// CHECK: WARNING: ThreadSanitizer: data race
 | 
					// CHECK: WARNING: ThreadSanitizer: data race
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -27,7 +27,7 @@ int main() {
 | 
				
			||||||
  pthread_create(&t[1], NULL, Thread2, NULL);
 | 
					  pthread_create(&t[1], NULL, Thread2, NULL);
 | 
				
			||||||
  pthread_join(t[0], NULL);
 | 
					  pthread_join(t[0], NULL);
 | 
				
			||||||
  pthread_join(t[1], NULL);
 | 
					  pthread_join(t[1], NULL);
 | 
				
			||||||
  printf("OK\n");
 | 
					  fprintf(stderr, "OK\n");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// CHECK-NOT: WARNING: ThreadSanitizer: data race
 | 
					// CHECK-NOT: WARNING: ThreadSanitizer: data race
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -38,7 +38,7 @@ int main() {
 | 
				
			||||||
  pthread_join(t, 0);
 | 
					  pthread_join(t, 0);
 | 
				
			||||||
  close(c);
 | 
					  close(c);
 | 
				
			||||||
  close(s);
 | 
					  close(s);
 | 
				
			||||||
  printf("OK\n");
 | 
					  fprintf(stderr, "OK\n");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// CHECK-NOT: WARNING: ThreadSanitizer: data race
 | 
					// CHECK-NOT: WARNING: ThreadSanitizer: data race
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -45,7 +45,7 @@ int main() {
 | 
				
			||||||
  close(c);
 | 
					  close(c);
 | 
				
			||||||
  close(s);
 | 
					  close(s);
 | 
				
			||||||
  pthread_join(t, 0);
 | 
					  pthread_join(t, 0);
 | 
				
			||||||
  printf("OK\n");
 | 
					  fprintf(stderr, "OK\n");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// CHECK-NOT: WARNING: ThreadSanitizer: data race
 | 
					// CHECK-NOT: WARNING: ThreadSanitizer: data race
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -31,7 +31,7 @@ int main() {
 | 
				
			||||||
  pthread_create(&t[1], NULL, Thread2, NULL);
 | 
					  pthread_create(&t[1], NULL, Thread2, NULL);
 | 
				
			||||||
  pthread_join(t[0], NULL);
 | 
					  pthread_join(t[0], NULL);
 | 
				
			||||||
  pthread_join(t[1], NULL);
 | 
					  pthread_join(t[1], NULL);
 | 
				
			||||||
  printf("OK\n");
 | 
					  fprintf(stderr, "OK\n");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// CHECK-NOT: WARNING: ThreadSanitizer: data race
 | 
					// CHECK-NOT: WARNING: ThreadSanitizer: data race
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -25,7 +25,7 @@ int main() {
 | 
				
			||||||
  barrier_wait(&barrier);
 | 
					  barrier_wait(&barrier);
 | 
				
			||||||
  Global = 43;
 | 
					  Global = 43;
 | 
				
			||||||
  pthread_join(t, 0);
 | 
					  pthread_join(t, 0);
 | 
				
			||||||
  printf("OK\n");
 | 
					  fprintf(stderr, "OK\n");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// CHECK-NOT: WARNING: ThreadSanitizer: data race
 | 
					// CHECK-NOT: WARNING: ThreadSanitizer: data race
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,4 @@
 | 
				
			||||||
// RUN: %clangxx_tsan -O1 %s -o %t && %deflake %run %t | FileCheck %s
 | 
					// RUN: %clangxx_tsan -O1 %s -o %t && %deflake %run %t 2>&1 | FileCheck %s
 | 
				
			||||||
#include "test.h"
 | 
					#include "test.h"
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -24,7 +24,7 @@ int main() {
 | 
				
			||||||
  pthread_create(&t[1], NULL, MemSetThread, x);
 | 
					  pthread_create(&t[1], NULL, MemSetThread, x);
 | 
				
			||||||
  pthread_join(t[0], NULL);
 | 
					  pthread_join(t[0], NULL);
 | 
				
			||||||
  pthread_join(t[1], NULL);
 | 
					  pthread_join(t[1], NULL);
 | 
				
			||||||
  printf("PASS\n");
 | 
					  fprintf(stderr, "PASS\n");
 | 
				
			||||||
  return 0;
 | 
					  return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,4 @@
 | 
				
			||||||
// RUN: %clangxx_tsan -O1 %s -o %t && %deflake %run %t | FileCheck %s
 | 
					// RUN: %clangxx_tsan -O1 %s -o %t && %deflake %run %t 2>&1 | FileCheck %s
 | 
				
			||||||
#include "test.h"
 | 
					#include "test.h"
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -25,7 +25,7 @@ int main() {
 | 
				
			||||||
  pthread_join(t[0], NULL);
 | 
					  pthread_join(t[0], NULL);
 | 
				
			||||||
  pthread_join(t[1], NULL);
 | 
					  pthread_join(t[1], NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  printf("PASS\n");
 | 
					  fprintf(stderr, "PASS\n");
 | 
				
			||||||
  return 0;
 | 
					  return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
// Test that we can include header with TSan atomic interface.
 | 
					// Test that we can include header with TSan atomic interface.
 | 
				
			||||||
// RUN: %clang_tsan %s -o %t && %run %t | FileCheck %s
 | 
					// RUN: %clang_tsan %s -o %t && %run %t 2>&1 | FileCheck %s
 | 
				
			||||||
#include <sanitizer/tsan_interface_atomic.h>
 | 
					#include <sanitizer/tsan_interface_atomic.h>
 | 
				
			||||||
#include <stdio.h>
 | 
					#include <stdio.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -9,7 +9,7 @@ int main() {
 | 
				
			||||||
  int res = __tsan_atomic32_load(&a, __tsan_memory_order_acquire);
 | 
					  int res = __tsan_atomic32_load(&a, __tsan_memory_order_acquire);
 | 
				
			||||||
  if (res == 100) {
 | 
					  if (res == 100) {
 | 
				
			||||||
    // CHECK: PASS
 | 
					    // CHECK: PASS
 | 
				
			||||||
    printf("PASS\n");
 | 
					    fprintf(stderr, "PASS\n");
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  return 1;
 | 
					  return 1;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -26,10 +26,10 @@ int main() {
 | 
				
			||||||
  stress(jheap);
 | 
					  stress(jheap);
 | 
				
			||||||
  pthread_join(th, 0);
 | 
					  pthread_join(th, 0);
 | 
				
			||||||
  if (__tsan_java_fini() != 0) {
 | 
					  if (__tsan_java_fini() != 0) {
 | 
				
			||||||
    printf("FAILED\n");
 | 
					    fprintf(stderr, "FAILED\n");
 | 
				
			||||||
    return 1;
 | 
					    return 1;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  printf("DONE\n");
 | 
					  fprintf(stderr, "DONE\n");
 | 
				
			||||||
  return 0;
 | 
					  return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -20,7 +20,7 @@ int main() {
 | 
				
			||||||
    return printf("second mmap failed with %d\n", errno);
 | 
					    return printf("second mmap failed with %d\n", errno);
 | 
				
			||||||
  __tsan_java_init(jheap, kHeapSize);
 | 
					  __tsan_java_init(jheap, kHeapSize);
 | 
				
			||||||
  __tsan_java_move(jheap + 16, jheap, 16);
 | 
					  __tsan_java_move(jheap + 16, jheap, 16);
 | 
				
			||||||
  printf("DONE\n");
 | 
					  fprintf(stderr, "DONE\n");
 | 
				
			||||||
  return __tsan_java_fini();
 | 
					  return __tsan_java_fini();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -35,7 +35,7 @@ int main() {
 | 
				
			||||||
  barrier_wait(&barrier);
 | 
					  barrier_wait(&barrier);
 | 
				
			||||||
  pthread_join(th, 0);
 | 
					  pthread_join(th, 0);
 | 
				
			||||||
  __tsan_java_free(varaddr2, kBlockSize);
 | 
					  __tsan_java_free(varaddr2, kBlockSize);
 | 
				
			||||||
  printf("DONE\n");
 | 
					  fprintf(stderr, "DONE\n");
 | 
				
			||||||
  return __tsan_java_fini();
 | 
					  return __tsan_java_fini();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -10,14 +10,14 @@ void *Thread(void *p) {
 | 
				
			||||||
  *(int*)varaddr = 42;
 | 
					  *(int*)varaddr = 42;
 | 
				
			||||||
  int rec = __tsan_java_mutex_unlock_rec(lockaddr);
 | 
					  int rec = __tsan_java_mutex_unlock_rec(lockaddr);
 | 
				
			||||||
  if (rec != 2) {
 | 
					  if (rec != 2) {
 | 
				
			||||||
    printf("FAILED 0 rec=%d\n", rec);
 | 
					    fprintf(stderr, "FAILED 0 rec=%d\n", rec);
 | 
				
			||||||
    exit(1);
 | 
					    exit(1);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  barrier_wait(&barrier);
 | 
					  barrier_wait(&barrier);
 | 
				
			||||||
  barrier_wait(&barrier);
 | 
					  barrier_wait(&barrier);
 | 
				
			||||||
  __tsan_java_mutex_lock_rec(lockaddr, rec);
 | 
					  __tsan_java_mutex_lock_rec(lockaddr, rec);
 | 
				
			||||||
  if (*(int*)varaddr != 43) {
 | 
					  if (*(int*)varaddr != 43) {
 | 
				
			||||||
    printf("FAILED 3 var=%d\n", *(int*)varaddr);
 | 
					    fprintf(stderr, "FAILED 3 var=%d\n", *(int*)varaddr);
 | 
				
			||||||
    exit(1);
 | 
					    exit(1);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  __tsan_java_mutex_unlock(lockaddr);
 | 
					  __tsan_java_mutex_unlock(lockaddr);
 | 
				
			||||||
| 
						 | 
					@ -40,7 +40,7 @@ int main() {
 | 
				
			||||||
  barrier_wait(&barrier);
 | 
					  barrier_wait(&barrier);
 | 
				
			||||||
  __tsan_java_mutex_lock(lockaddr);
 | 
					  __tsan_java_mutex_lock(lockaddr);
 | 
				
			||||||
  if (*(int*)varaddr != 42) {
 | 
					  if (*(int*)varaddr != 42) {
 | 
				
			||||||
    printf("FAILED 1 var=%d\n", *(int*)varaddr);
 | 
					    fprintf(stderr, "FAILED 1 var=%d\n", *(int*)varaddr);
 | 
				
			||||||
    exit(1);
 | 
					    exit(1);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  *(int*)varaddr = 43;
 | 
					  *(int*)varaddr = 43;
 | 
				
			||||||
| 
						 | 
					@ -48,7 +48,7 @@ int main() {
 | 
				
			||||||
  barrier_wait(&barrier);
 | 
					  barrier_wait(&barrier);
 | 
				
			||||||
  pthread_join(th, 0);
 | 
					  pthread_join(th, 0);
 | 
				
			||||||
  __tsan_java_free(jheap, kBlockSize);
 | 
					  __tsan_java_free(jheap, kBlockSize);
 | 
				
			||||||
  printf("DONE\n");
 | 
					  fprintf(stderr, "DONE\n");
 | 
				
			||||||
  return __tsan_java_fini();
 | 
					  return __tsan_java_fini();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,4 @@
 | 
				
			||||||
// RUN: %clangxx_tsan -O1 %s -o %t && %deflake %run %t | FileCheck %s
 | 
					// RUN: %clangxx_tsan -O1 %s -o %t && %deflake %run %t 2>&1 | FileCheck %s
 | 
				
			||||||
#include "java.h"
 | 
					#include "java.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
jptr varaddr;
 | 
					jptr varaddr;
 | 
				
			||||||
| 
						 | 
					@ -10,7 +10,7 @@ void *Thread(void *p) {
 | 
				
			||||||
  __tsan_java_mutex_lock(lockaddr);
 | 
					  __tsan_java_mutex_lock(lockaddr);
 | 
				
			||||||
  int rec = __tsan_java_mutex_unlock_rec(lockaddr);
 | 
					  int rec = __tsan_java_mutex_unlock_rec(lockaddr);
 | 
				
			||||||
  if (rec != 3) {
 | 
					  if (rec != 3) {
 | 
				
			||||||
    printf("FAILED 0 rec=%d\n", rec);
 | 
					    fprintf(stderr, "FAILED 0 rec=%d\n", rec);
 | 
				
			||||||
    exit(1);
 | 
					    exit(1);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  *(int*)varaddr = 42;
 | 
					  *(int*)varaddr = 42;
 | 
				
			||||||
| 
						 | 
					@ -42,7 +42,7 @@ int main() {
 | 
				
			||||||
  barrier_wait(&barrier);
 | 
					  barrier_wait(&barrier);
 | 
				
			||||||
  pthread_join(th, 0);
 | 
					  pthread_join(th, 0);
 | 
				
			||||||
  __tsan_java_free(jheap, kBlockSize);
 | 
					  __tsan_java_free(jheap, kBlockSize);
 | 
				
			||||||
  printf("DONE\n");
 | 
					  fprintf(stderr, "DONE\n");
 | 
				
			||||||
  return __tsan_java_fini();
 | 
					  return __tsan_java_fini();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -66,7 +66,7 @@ int main(int argc, char **argv) {
 | 
				
			||||||
  barrier_wait(&barrier);
 | 
					  barrier_wait(&barrier);
 | 
				
			||||||
  pthread_join(th, 0);
 | 
					  pthread_join(th, 0);
 | 
				
			||||||
  __tsan_java_free(varaddr1_new, kBlockSize);
 | 
					  __tsan_java_free(varaddr1_new, kBlockSize);
 | 
				
			||||||
  printf("DONE\n");
 | 
					  fprintf(stderr, "DONE\n");
 | 
				
			||||||
  return __tsan_java_fini();
 | 
					  return __tsan_java_fini();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
// RUN: %clangxx_tsan -O1 %s -o %t
 | 
					// RUN: %clangxx_tsan -O1 %s -o %t
 | 
				
			||||||
// RUN: %deflake %run %t | FileCheck %s
 | 
					// RUN: %deflake %run %t 2>&1 | FileCheck %s
 | 
				
			||||||
// RUN: %deflake %run %t arg | FileCheck %s
 | 
					// RUN: %deflake %run %t arg 2>&1 | FileCheck %s
 | 
				
			||||||
#include "java.h"
 | 
					#include "java.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
jptr varaddr1_old;
 | 
					jptr varaddr1_old;
 | 
				
			||||||
| 
						 | 
					@ -46,7 +46,7 @@ int main(int argc, char **argv) {
 | 
				
			||||||
  barrier_wait(&barrier);
 | 
					  barrier_wait(&barrier);
 | 
				
			||||||
  pthread_join(th, 0);
 | 
					  pthread_join(th, 0);
 | 
				
			||||||
  __tsan_java_free(varaddr1_new, kBlockSize);
 | 
					  __tsan_java_free(varaddr1_new, kBlockSize);
 | 
				
			||||||
  printf("DONE\n");
 | 
					  fprintf(stderr, "DONE\n");
 | 
				
			||||||
  return __tsan_java_fini();
 | 
					  return __tsan_java_fini();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -29,7 +29,7 @@ int main() {
 | 
				
			||||||
  barrier_wait(&barrier);
 | 
					  barrier_wait(&barrier);
 | 
				
			||||||
  pthread_join(th, 0);
 | 
					  pthread_join(th, 0);
 | 
				
			||||||
  __tsan_java_free(jheap, kBlockSize);
 | 
					  __tsan_java_free(jheap, kBlockSize);
 | 
				
			||||||
  printf("DONE\n");
 | 
					  fprintf(stderr, "DONE\n");
 | 
				
			||||||
  return __tsan_java_fini();
 | 
					  return __tsan_java_fini();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -14,11 +14,11 @@ int foo(jmp_buf env) {
 | 
				
			||||||
int main() {
 | 
					int main() {
 | 
				
			||||||
  jmp_buf env;
 | 
					  jmp_buf env;
 | 
				
			||||||
  if (setjmp(env) == 42) {
 | 
					  if (setjmp(env) == 42) {
 | 
				
			||||||
    printf("JUMPED\n");
 | 
					    fprintf(stderr, "JUMPED\n");
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  foo(env);
 | 
					  foo(env);
 | 
				
			||||||
  printf("FAILED\n");
 | 
					  fprintf(stderr, "FAILED\n");
 | 
				
			||||||
  return 0;
 | 
					  return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -16,11 +16,11 @@ int main() {
 | 
				
			||||||
  sigjmp_buf env;
 | 
					  sigjmp_buf env;
 | 
				
			||||||
  printf("env=%p\n", env);
 | 
					  printf("env=%p\n", env);
 | 
				
			||||||
  if (sigsetjmp(env, 1) == 42) {
 | 
					  if (sigsetjmp(env, 1) == 42) {
 | 
				
			||||||
    printf("JUMPED\n");
 | 
					    fprintf(stderr, "JUMPED\n");
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  foo(env);
 | 
					  foo(env);
 | 
				
			||||||
  printf("FAILED\n");
 | 
					  fprintf(stderr, "FAILED\n");
 | 
				
			||||||
  return 0;
 | 
					  return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,4 @@
 | 
				
			||||||
// RUN: %clang_tsan -O1 %s -o %t && %deflake %run %t | FileCheck %s
 | 
					// RUN: %clang_tsan -O1 %s -o %t && %deflake %run %t 2>&1 | FileCheck %s
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Longjmp assembly has not been implemented for mips64 yet
 | 
					// Longjmp assembly has not been implemented for mips64 yet
 | 
				
			||||||
// XFAIL: mips64
 | 
					// XFAIL: mips64
 | 
				
			||||||
| 
						 | 
					@ -34,7 +34,7 @@ void mymain() {
 | 
				
			||||||
    return;
 | 
					    return;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  foo(env);
 | 
					  foo(env);
 | 
				
			||||||
  printf("FAILED\n");
 | 
					  fprintf(stderr, "FAILED\n");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int main() {
 | 
					int main() {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,4 @@
 | 
				
			||||||
// RUN: %clang_tsan -O1 %s -o %t && %deflake %run %t | FileCheck %s
 | 
					// RUN: %clang_tsan -O1 %s -o %t && %deflake %run %t 2>&1 | FileCheck %s
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Longjmp assembly has not been implemented for mips64 yet
 | 
					// Longjmp assembly has not been implemented for mips64 yet
 | 
				
			||||||
// XFAIL: mips64
 | 
					// XFAIL: mips64
 | 
				
			||||||
| 
						 | 
					@ -37,7 +37,7 @@ void mymain() {
 | 
				
			||||||
    return;
 | 
					    return;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  foo(env);
 | 
					  foo(env);
 | 
				
			||||||
  printf("FAILED\n");
 | 
					  fprintf(stderr, "FAILED\n");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int main() {
 | 
					int main() {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,17 +6,17 @@
 | 
				
			||||||
int main() {
 | 
					int main() {
 | 
				
			||||||
  void *p = malloc((size_t)-1);
 | 
					  void *p = malloc((size_t)-1);
 | 
				
			||||||
  if (p != 0)
 | 
					  if (p != 0)
 | 
				
			||||||
    printf("FAIL malloc(-1) = %p\n", p);
 | 
					    fprintf(stderr, "FAIL malloc(-1) = %p\n", p);
 | 
				
			||||||
  p = malloc((size_t)-1 / 2);
 | 
					  p = malloc((size_t)-1 / 2);
 | 
				
			||||||
  if (p != 0)
 | 
					  if (p != 0)
 | 
				
			||||||
    printf("FAIL malloc(-1/2) = %p\n", p);
 | 
					    fprintf(stderr, "FAIL malloc(-1/2) = %p\n", p);
 | 
				
			||||||
  p = calloc((size_t)-1, (size_t)-1);
 | 
					  p = calloc((size_t)-1, (size_t)-1);
 | 
				
			||||||
  if (p != 0)
 | 
					  if (p != 0)
 | 
				
			||||||
    printf("FAIL calloc(-1, -1) = %p\n", p);
 | 
					    fprintf(stderr, "FAIL calloc(-1, -1) = %p\n", p);
 | 
				
			||||||
  p = calloc((size_t)-1 / 2, (size_t)-1 / 2);
 | 
					  p = calloc((size_t)-1 / 2, (size_t)-1 / 2);
 | 
				
			||||||
  if (p != 0)
 | 
					  if (p != 0)
 | 
				
			||||||
    printf("FAIL calloc(-1/2, -1/2) = %p\n", p);
 | 
					    fprintf(stderr, "FAIL calloc(-1/2, -1/2) = %p\n", p);
 | 
				
			||||||
  printf("OK\n");
 | 
					  fprintf(stderr, "OK\n");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// CHECK-NOT: FAIL
 | 
					// CHECK-NOT: FAIL
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,4 @@
 | 
				
			||||||
// RUN: %clangxx_tsan -O1 %s -o %t && %run %t | FileCheck %s
 | 
					// RUN: %clangxx_tsan -O1 %s -o %t && %run %t 2>&1 | FileCheck %s
 | 
				
			||||||
// Regtest for https://github.com/google/sanitizers/issues/447
 | 
					// Regtest for https://github.com/google/sanitizers/issues/447
 | 
				
			||||||
// This is a correct program and tsan should not report a race.
 | 
					// This is a correct program and tsan should not report a race.
 | 
				
			||||||
#include "test.h"
 | 
					#include "test.h"
 | 
				
			||||||
| 
						 | 
					@ -24,7 +24,7 @@ int main() {
 | 
				
			||||||
  g = 1;
 | 
					  g = 1;
 | 
				
			||||||
  barrier_wait(&barrier);
 | 
					  barrier_wait(&barrier);
 | 
				
			||||||
  pthread_join(t, 0);
 | 
					  pthread_join(t, 0);
 | 
				
			||||||
  printf("PASS\n");
 | 
					  fprintf(stderr, "PASS\n");
 | 
				
			||||||
  // CHECK-NOT: ThreadSanitizer: data race
 | 
					  // CHECK-NOT: ThreadSanitizer: data race
 | 
				
			||||||
  // CHECK: PASS
 | 
					  // CHECK: PASS
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -21,7 +21,7 @@ int main() {
 | 
				
			||||||
  pthread_create(&t[1], 0, Thread, 0);
 | 
					  pthread_create(&t[1], 0, Thread, 0);
 | 
				
			||||||
  pthread_join(t[0], 0);
 | 
					  pthread_join(t[0], 0);
 | 
				
			||||||
  pthread_join(t[1], 0);
 | 
					  pthread_join(t[1], 0);
 | 
				
			||||||
  printf("PASS\n");
 | 
					  fprintf(stderr, "PASS\n");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// CHECK-NOT: WARNING: ThreadSanitizer: data race
 | 
					// CHECK-NOT: WARNING: ThreadSanitizer: data race
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -27,7 +27,7 @@ int main() {
 | 
				
			||||||
  pthread_create(&t[1], 0, Thread, 0);
 | 
					  pthread_create(&t[1], 0, Thread, 0);
 | 
				
			||||||
  pthread_join(t[0], 0);
 | 
					  pthread_join(t[0], 0);
 | 
				
			||||||
  pthread_join(t[1], 0);
 | 
					  pthread_join(t[1], 0);
 | 
				
			||||||
  printf("PASS\n");
 | 
					  fprintf(stderr, "PASS\n");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// CHECK-NOT: WARNING: ThreadSanitizer: data race
 | 
					// CHECK-NOT: WARNING: ThreadSanitizer: data race
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -31,7 +31,7 @@ int main() {
 | 
				
			||||||
  pthread_create(&t[1], 0, Thread1, 0);
 | 
					  pthread_create(&t[1], 0, Thread1, 0);
 | 
				
			||||||
  pthread_join(t[0], 0);
 | 
					  pthread_join(t[0], 0);
 | 
				
			||||||
  pthread_join(t[1], 0);
 | 
					  pthread_join(t[1], 0);
 | 
				
			||||||
  printf("PASS\n");
 | 
					  fprintf(stderr, "PASS\n");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// CHECK-NOT: WARNING: ThreadSanitizer: data race
 | 
					// CHECK-NOT: WARNING: ThreadSanitizer: data race
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -36,7 +36,7 @@ int main() {
 | 
				
			||||||
  pthread_create(&t[1], 0, Thread1, 0);
 | 
					  pthread_create(&t[1], 0, Thread1, 0);
 | 
				
			||||||
  pthread_join(t[0], 0);
 | 
					  pthread_join(t[0], 0);
 | 
				
			||||||
  pthread_join(t[1], 0);
 | 
					  pthread_join(t[1], 0);
 | 
				
			||||||
  printf("PASS\n");
 | 
					  fprintf(stderr, "PASS\n");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// CHECK-NOT: WARNING: ThreadSanitizer: data race
 | 
					// CHECK-NOT: WARNING: ThreadSanitizer: data race
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -36,7 +36,7 @@ int main() {
 | 
				
			||||||
  pthread_create(&t[1], 0, Thread1, 0);
 | 
					  pthread_create(&t[1], 0, Thread1, 0);
 | 
				
			||||||
  pthread_join(t[0], 0);
 | 
					  pthread_join(t[0], 0);
 | 
				
			||||||
  pthread_join(t[1], 0);
 | 
					  pthread_join(t[1], 0);
 | 
				
			||||||
  printf("PASS\n");
 | 
					  fprintf(stderr, "PASS\n");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// CHECK-NOT: WARNING: ThreadSanitizer: data race
 | 
					// CHECK-NOT: WARNING: ThreadSanitizer: data race
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,7 +19,7 @@ int main(int argc, char *argv[]) {
 | 
				
			||||||
  pthread_create(&th[1], 0, thr, 0);
 | 
					  pthread_create(&th[1], 0, thr, 0);
 | 
				
			||||||
  pthread_join(th[0], 0);
 | 
					  pthread_join(th[0], 0);
 | 
				
			||||||
  pthread_join(th[1], 0);
 | 
					  pthread_join(th[1], 0);
 | 
				
			||||||
  printf("DONE\n");
 | 
					  fprintf(stderr, "DONE\n");
 | 
				
			||||||
  // CHECK: DONE
 | 
					  // CHECK: DONE
 | 
				
			||||||
  return 0;
 | 
					  return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -20,7 +20,7 @@ int main() {
 | 
				
			||||||
  pthread_create(&t[1], NULL, Thread2, NULL);
 | 
					  pthread_create(&t[1], NULL, Thread2, NULL);
 | 
				
			||||||
  pthread_join(t[0], NULL);
 | 
					  pthread_join(t[0], NULL);
 | 
				
			||||||
  pthread_join(t[1], NULL);
 | 
					  pthread_join(t[1], NULL);
 | 
				
			||||||
  printf("OK\n");
 | 
					  fprintf(stderr, "OK\n");
 | 
				
			||||||
  return 0;
 | 
					  return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -22,7 +22,7 @@ int main() {
 | 
				
			||||||
  pthread_create(&t[1], NULL, Thread2, NULL);
 | 
					  pthread_create(&t[1], NULL, Thread2, NULL);
 | 
				
			||||||
  pthread_join(t[0], NULL);
 | 
					  pthread_join(t[0], NULL);
 | 
				
			||||||
  pthread_join(t[1], NULL);
 | 
					  pthread_join(t[1], NULL);
 | 
				
			||||||
  printf("OK\n");
 | 
					  fprintf(stderr, "OK\n");
 | 
				
			||||||
  return 0;
 | 
					  return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -22,7 +22,7 @@ int main() {
 | 
				
			||||||
  pthread_create(&t[1], NULL, Thread2, NULL);
 | 
					  pthread_create(&t[1], NULL, Thread2, NULL);
 | 
				
			||||||
  pthread_join(t[0], NULL);
 | 
					  pthread_join(t[0], NULL);
 | 
				
			||||||
  pthread_join(t[1], NULL);
 | 
					  pthread_join(t[1], NULL);
 | 
				
			||||||
  printf("OK\n");
 | 
					  fprintf(stderr, "OK\n");
 | 
				
			||||||
  return 0;
 | 
					  return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -12,7 +12,7 @@ int main() {
 | 
				
			||||||
  pthread_create(&t, 0, Thread, 0);
 | 
					  pthread_create(&t, 0, Thread, 0);
 | 
				
			||||||
  barrier_wait(&barrier);
 | 
					  barrier_wait(&barrier);
 | 
				
			||||||
  pthread_detach(t);
 | 
					  pthread_detach(t);
 | 
				
			||||||
  printf("PASS\n");
 | 
					  fprintf(stderr, "PASS\n");
 | 
				
			||||||
  return 0;
 | 
					  return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -20,7 +20,7 @@ int main() {
 | 
				
			||||||
  pthread_create(&t, 0, Thread, 0);
 | 
					  pthread_create(&t, 0, Thread, 0);
 | 
				
			||||||
  pthread_detach(t);
 | 
					  pthread_detach(t);
 | 
				
			||||||
  barrier_wait(&barrier);
 | 
					  barrier_wait(&barrier);
 | 
				
			||||||
  printf("PASS\n");
 | 
					  fprintf(stderr, "PASS\n");
 | 
				
			||||||
  return 0;
 | 
					  return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -10,7 +10,7 @@ int main() {
 | 
				
			||||||
  pthread_t t;
 | 
					  pthread_t t;
 | 
				
			||||||
  pthread_create(&t, 0, Thread, 0);
 | 
					  pthread_create(&t, 0, Thread, 0);
 | 
				
			||||||
  pthread_join(t, 0);
 | 
					  pthread_join(t, 0);
 | 
				
			||||||
  printf("PASS\n");
 | 
					  fprintf(stderr, "PASS\n");
 | 
				
			||||||
  return 0;
 | 
					  return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -10,7 +10,7 @@ int main() {
 | 
				
			||||||
  pthread_t t;
 | 
					  pthread_t t;
 | 
				
			||||||
  pthread_create(&t, 0, Thread, 0);
 | 
					  pthread_create(&t, 0, Thread, 0);
 | 
				
			||||||
  pthread_detach(t);
 | 
					  pthread_detach(t);
 | 
				
			||||||
  printf("PASS\n");
 | 
					  fprintf(stderr, "PASS\n");
 | 
				
			||||||
  return 0;
 | 
					  return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -9,7 +9,7 @@ void *Thread(void *x) {
 | 
				
			||||||
int main() {
 | 
					int main() {
 | 
				
			||||||
  pthread_t t;
 | 
					  pthread_t t;
 | 
				
			||||||
  pthread_create(&t, 0, Thread, 0);
 | 
					  pthread_create(&t, 0, Thread, 0);
 | 
				
			||||||
  printf("DONE\n");
 | 
					  fprintf(stderr, "DONE\n");
 | 
				
			||||||
  return 0;
 | 
					  return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -31,7 +31,7 @@ int main() {
 | 
				
			||||||
  pthread_create(&t[1], NULL, Thread2, NULL);
 | 
					  pthread_create(&t[1], NULL, Thread2, NULL);
 | 
				
			||||||
  pthread_join(t[0], NULL);
 | 
					  pthread_join(t[0], NULL);
 | 
				
			||||||
  pthread_join(t[1], NULL);
 | 
					  pthread_join(t[1], NULL);
 | 
				
			||||||
  printf("PASS\n");
 | 
					  fprintf(stderr, "PASS\n");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// CHECK-NOT: WARNING: ThreadSanitizer: data race
 | 
					// CHECK-NOT: WARNING: ThreadSanitizer: data race
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -77,7 +77,7 @@ int main() {
 | 
				
			||||||
  pthread_create(&th, 0, Thread, 0);
 | 
					  pthread_create(&th, 0, Thread, 0);
 | 
				
			||||||
  Test(true);
 | 
					  Test(true);
 | 
				
			||||||
  pthread_join(th, 0);
 | 
					  pthread_join(th, 0);
 | 
				
			||||||
  printf("OK\n");
 | 
					  fprintf(stderr, "OK\n");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// CHECK-NOT: WARNING: ThreadSanitizer:
 | 
					// CHECK-NOT: WARNING: ThreadSanitizer:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -26,7 +26,7 @@ int main() {
 | 
				
			||||||
  pipe(fds);
 | 
					  pipe(fds);
 | 
				
			||||||
  int pid = vfork();
 | 
					  int pid = vfork();
 | 
				
			||||||
  if (pid < 0) {
 | 
					  if (pid < 0) {
 | 
				
			||||||
    printf("FAIL to vfork\n");
 | 
					    fprintf(stderr, "FAIL to vfork\n");
 | 
				
			||||||
    exit(1);
 | 
					    exit(1);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  if (pid == 0) {  // child
 | 
					  if (pid == 0) {  // child
 | 
				
			||||||
| 
						 | 
					@ -43,7 +43,7 @@ int main() {
 | 
				
			||||||
  pthread_create(&t[1], NULL, Thread2, NULL);
 | 
					  pthread_create(&t[1], NULL, Thread2, NULL);
 | 
				
			||||||
  pthread_join(t[0], NULL);
 | 
					  pthread_join(t[0], NULL);
 | 
				
			||||||
  pthread_join(t[1], NULL);
 | 
					  pthread_join(t[1], NULL);
 | 
				
			||||||
  printf("DONE\n");
 | 
					  fprintf(stderr, "DONE\n");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// CHECK-NOT: WARNING: ThreadSanitizer: data race
 | 
					// CHECK-NOT: WARNING: ThreadSanitizer: data race
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -10,6 +10,6 @@ struct DDD: CCC, BBB { DDD(); };  // NOLINT
 | 
				
			||||||
DDD::DDD()  { }
 | 
					DDD::DDD()  { }
 | 
				
			||||||
int main() {
 | 
					int main() {
 | 
				
			||||||
  DDD d;
 | 
					  DDD d;
 | 
				
			||||||
  printf("OK\n");
 | 
					  fprintf(stderr, "OK\n");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
// CHECK: OK
 | 
					// CHECK: OK
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue