Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / compiler-rt / test / tsan / Darwin / libcxx-shared-ptr.mm
blob057ff22874c9b21b9ea24205498c4b7fb58018eb
1 // RUN: %clangxx_tsan %s -o %t -framework Foundation
2 // RUN: %run %t 2>&1 | FileCheck %s
4 #import <Foundation/Foundation.h>
6 #import <memory>
8 #import "../test.h"
10 long my_global;
12 struct MyStruct {
13   void setGlobal() {
14     my_global = 42;
15   }
16   ~MyStruct() {
17     my_global = 43;
18   }
21 int main(int argc, const char *argv[]) {
22   fprintf(stderr, "Hello world.\n");
23   print_address("addr=", 1, &my_global);
24   barrier_init(&barrier, 2);
26   std::shared_ptr<MyStruct> shared(new MyStruct());
28   dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
30   std::weak_ptr<MyStruct> weak(shared);
31   
32   dispatch_async(q, ^{
33     {
34       std::shared_ptr<MyStruct> strong = weak.lock();
35       if (!strong) exit(1);
37       strong->setGlobal();
38     }
39     barrier_wait(&barrier);
40   });
42   barrier_wait(&barrier);
43   shared.reset();
45   fprintf(stderr, "Done.\n");
48 // CHECK: Hello world.
49 // CHECK: Done.
50 // CHECK-NOT: WARNING: ThreadSanitizer