brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.3 KiB · cb77e93 Raw
54 lines · cpp
1// Test that Thread objects are reused.2// RUN: %clangxx_hwasan -mllvm -hwasan-globals=0 -mllvm -hwasan-instrument-stack=0 %s -o %t && %env_hwasan_opts=verbose_threads=1 %run %t 2>&1 | FileCheck %s3 4#include <assert.h>5#include <fcntl.h>6#include <pthread.h>7#include <stdio.h>8#include <stdlib.h>9#include <unistd.h>10 11#include <sanitizer/hwasan_interface.h>12 13pthread_barrier_t bar;14 15void *threadfn(void *) {16  pthread_barrier_wait(&bar);17  return nullptr;18}19 20void start_stop_threads() {21  constexpr int N = 2;22  pthread_t threads[N];23 24  pthread_barrier_init(&bar, nullptr, N + 1);25  for (auto &t : threads)26    pthread_create(&t, nullptr, threadfn, nullptr);27 28  pthread_barrier_wait(&bar);29 30  for (auto &t : threads)31    pthread_join(t, nullptr);32  pthread_barrier_destroy(&bar);33}34 35int main() {36  // Cut off initial threads.37  // CHECK: === test start ===38  fprintf(stderr, "=== test start ===\n");39 40  // CHECK: Creating  : T{{[0-9]+}} [[A:0x[0-9a-f]+]] stack:41  // CHECK: Creating  : T{{[0-9]+}} [[B:0x[0-9a-f]+]] stack:42  start_stop_threads();43 44  // CHECK-DAG: Creating  : T{{[0-9]+}} [[A]] stack:45  // CHECK-DAG: Creating  : T{{[0-9]+}} [[B]] stack:46  start_stop_threads();47 48  // CHECK-DAG: Creating  : T{{[0-9]+}} [[A]] stack:49  // CHECK-DAG: Creating  : T{{[0-9]+}} [[B]] stack:50  start_stop_threads();51 52  return 0;53}54