Bring gcc-4.4.0 to up-to-date.
[asac-android-toolchain:gcc-linaro.git] / gcc-4.4.0 / gcc / testsuite / g++.dg / thread-ann / thread_annot_lock-44.C
1 // Test the support for releasable scoped lock (e.g std::unique_lock).
2 // This is a good test case. (i.e. There should be no warning emitted by the
3 // compiler.)
4 // { dg-do compile }
5 // { dg-options "-Wthread-safety -O" }
6
7 #include "thread_annot_common.h"
8
9 extern void bar();
10
11 Mutex mu1, mu2;
12 int a GUARDED_BY(mu1);
13
14 void foo(int x) {
15   if (x > 2) {
16     ReleasableMutexLock l(&mu1);
17     if (a < 3) {
18       a = x + 1;
19       l.Release();
20       bar();
21     }
22     else {
23       a = x + 2;
24     }
25   }
26 }
27
28 void func(int x) {
29   ReleasableMutexLock l(&mu1);
30   ReleasableMutexLock m(&mu2);
31   switch (x) {
32     case 1:
33       {
34         a = x + 1;
35         l.Release();
36         bar();
37         break;
38       }
39     case 3:
40       {
41         a = x + 3;
42         m.Release();
43         break;
44       }
45     case 2:
46       {
47         a = x + 2;
48         l.Release();
49         bar();
50         break;
51       }
52     default:
53       {
54         a = x + 3;
55         break;
56       }
57   }
58 }