1*89a1d03eSRichard // RUN: %check_clang_tidy %s bugprone-spuriously-wake-up-functions %t -- --
2*89a1d03eSRichard #define NULL 0
3*89a1d03eSRichard
4*89a1d03eSRichard struct Node1 {
5*89a1d03eSRichard void *Node1;
6*89a1d03eSRichard struct Node1 *next;
7*89a1d03eSRichard };
8*89a1d03eSRichard
9*89a1d03eSRichard typedef struct mtx_t {
10*89a1d03eSRichard } mtx_t;
11*89a1d03eSRichard typedef struct cnd_t {
12*89a1d03eSRichard } cnd_t;
13*89a1d03eSRichard struct timespec {};
14*89a1d03eSRichard
cnd_wait(cnd_t * cond,mtx_t * mutex)15*89a1d03eSRichard int cnd_wait(cnd_t *cond, mtx_t *mutex){};
cnd_timedwait(cnd_t * cond,mtx_t * mutex,const struct timespec * time_point)16*89a1d03eSRichard int cnd_timedwait(cnd_t *cond, mtx_t *mutex,
17*89a1d03eSRichard const struct timespec *time_point){};
18*89a1d03eSRichard
19*89a1d03eSRichard struct Node1 list_c;
20*89a1d03eSRichard static mtx_t lock;
21*89a1d03eSRichard static cnd_t condition_c;
22*89a1d03eSRichard struct timespec ts;
23*89a1d03eSRichard
consume_list_element(void)24*89a1d03eSRichard void consume_list_element(void) {
25*89a1d03eSRichard
26*89a1d03eSRichard if (list_c.next == NULL) {
27*89a1d03eSRichard if (0 != cnd_wait(&condition_c, &lock)) {
28*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:14: warning: 'cnd_wait' should be placed inside a while statement [bugprone-spuriously-wake-up-functions]
29*89a1d03eSRichard }
30*89a1d03eSRichard }
31*89a1d03eSRichard if (list_c.next == NULL)
32*89a1d03eSRichard if (0 != cnd_wait(&condition_c, &lock))
33*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:14: warning: 'cnd_wait' should be placed inside a while statement [bugprone-spuriously-wake-up-functions]
34*89a1d03eSRichard ;
35*89a1d03eSRichard if (list_c.next == NULL && 0 != cnd_wait(&condition_c, &lock))
36*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:35: warning: 'cnd_wait' should be placed inside a while statement [bugprone-spuriously-wake-up-functions]
37*89a1d03eSRichard ;
38*89a1d03eSRichard while (list_c.next == NULL) {
39*89a1d03eSRichard if (0 != cnd_wait(&condition_c, &lock)) {
40*89a1d03eSRichard }
41*89a1d03eSRichard }
42*89a1d03eSRichard while (list_c.next == NULL)
43*89a1d03eSRichard if (0 != cnd_wait(&condition_c, &lock)) {
44*89a1d03eSRichard }
45*89a1d03eSRichard while (list_c.next == NULL)
46*89a1d03eSRichard if (0 != cnd_wait(&condition_c, &lock))
47*89a1d03eSRichard ;
48*89a1d03eSRichard if (list_c.next == NULL) {
49*89a1d03eSRichard cnd_wait(&condition_c, &lock);
50*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: 'cnd_wait' should be placed inside a while statement [bugprone-spuriously-wake-up-functions]
51*89a1d03eSRichard }
52*89a1d03eSRichard if (list_c.next == NULL)
53*89a1d03eSRichard cnd_wait(&condition_c, &lock);
54*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: 'cnd_wait' should be placed inside a while statement [bugprone-spuriously-wake-up-functions]
55*89a1d03eSRichard while (list_c.next == NULL) {
56*89a1d03eSRichard cnd_wait(&condition_c, &lock);
57*89a1d03eSRichard }
58*89a1d03eSRichard while (list_c.next == NULL)
59*89a1d03eSRichard cnd_wait(&condition_c, &lock);
60*89a1d03eSRichard
61*89a1d03eSRichard do {
62*89a1d03eSRichard if (0 != cnd_wait(&condition_c, &lock)) {
63*89a1d03eSRichard }
64*89a1d03eSRichard } while (list_c.next == NULL);
65*89a1d03eSRichard do
66*89a1d03eSRichard if (0 != cnd_wait(&condition_c, &lock)) {
67*89a1d03eSRichard }
68*89a1d03eSRichard while (list_c.next == NULL);
69*89a1d03eSRichard do
70*89a1d03eSRichard if (0 != cnd_wait(&condition_c, &lock))
71*89a1d03eSRichard ;
72*89a1d03eSRichard while (list_c.next == NULL);
73*89a1d03eSRichard do {
74*89a1d03eSRichard cnd_wait(&condition_c, &lock);
75*89a1d03eSRichard } while (list_c.next == NULL);
76*89a1d03eSRichard do
77*89a1d03eSRichard cnd_wait(&condition_c, &lock);
78*89a1d03eSRichard while (list_c.next == NULL);
79*89a1d03eSRichard for (;; list_c.next == NULL) {
80*89a1d03eSRichard if (0 != cnd_wait(&condition_c, &lock)) {
81*89a1d03eSRichard }
82*89a1d03eSRichard }
83*89a1d03eSRichard for (;; list_c.next == NULL)
84*89a1d03eSRichard if (0 != cnd_wait(&condition_c, &lock)) {
85*89a1d03eSRichard }
86*89a1d03eSRichard for (;; list_c.next == NULL)
87*89a1d03eSRichard if (0 != cnd_wait(&condition_c, &lock))
88*89a1d03eSRichard ;
89*89a1d03eSRichard for (;; list_c.next == NULL) {
90*89a1d03eSRichard cnd_wait(&condition_c, &lock);
91*89a1d03eSRichard }
92*89a1d03eSRichard for (;; list_c.next == NULL)
93*89a1d03eSRichard cnd_wait(&condition_c, &lock);
94*89a1d03eSRichard
95*89a1d03eSRichard if (list_c.next == NULL) {
96*89a1d03eSRichard if (0 != cnd_timedwait(&condition_c, &lock, &ts)) {
97*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:14: warning: 'cnd_timedwait' should be placed inside a while statement [bugprone-spuriously-wake-up-functions]
98*89a1d03eSRichard }
99*89a1d03eSRichard }
100*89a1d03eSRichard if (list_c.next == NULL)
101*89a1d03eSRichard if (0 != cnd_timedwait(&condition_c, &lock, &ts))
102*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:14: warning: 'cnd_timedwait' should be placed inside a while statement [bugprone-spuriously-wake-up-functions]
103*89a1d03eSRichard ;
104*89a1d03eSRichard if (list_c.next == NULL && 0 != cnd_timedwait(&condition_c, &lock, &ts))
105*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:35: warning: 'cnd_timedwait' should be placed inside a while statement [bugprone-spuriously-wake-up-functions]
106*89a1d03eSRichard ;
107*89a1d03eSRichard while (list_c.next == NULL) {
108*89a1d03eSRichard if (0 != cnd_timedwait(&condition_c, &lock, &ts)) {
109*89a1d03eSRichard }
110*89a1d03eSRichard }
111*89a1d03eSRichard while (list_c.next == NULL)
112*89a1d03eSRichard if (0 != cnd_timedwait(&condition_c, &lock, &ts)) {
113*89a1d03eSRichard }
114*89a1d03eSRichard while (list_c.next == NULL)
115*89a1d03eSRichard if (0 != cnd_timedwait(&condition_c, &lock, &ts))
116*89a1d03eSRichard ;
117*89a1d03eSRichard if (list_c.next == NULL) {
118*89a1d03eSRichard cnd_timedwait(&condition_c, &lock, &ts);
119*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: 'cnd_timedwait' should be placed inside a while statement [bugprone-spuriously-wake-up-functions]
120*89a1d03eSRichard }
121*89a1d03eSRichard if (list_c.next == NULL)
122*89a1d03eSRichard cnd_timedwait(&condition_c, &lock, &ts);
123*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: 'cnd_timedwait' should be placed inside a while statement [bugprone-spuriously-wake-up-functions]
124*89a1d03eSRichard while (list_c.next == NULL) {
125*89a1d03eSRichard cnd_timedwait(&condition_c, &lock, &ts);
126*89a1d03eSRichard }
127*89a1d03eSRichard while (list_c.next == NULL)
128*89a1d03eSRichard cnd_timedwait(&condition_c, &lock, &ts);
129*89a1d03eSRichard
130*89a1d03eSRichard do {
131*89a1d03eSRichard if (0 != cnd_timedwait(&condition_c, &lock, &ts)) {
132*89a1d03eSRichard }
133*89a1d03eSRichard } while (list_c.next == NULL);
134*89a1d03eSRichard do
135*89a1d03eSRichard if (0 != cnd_timedwait(&condition_c, &lock, &ts)) {
136*89a1d03eSRichard }
137*89a1d03eSRichard while (list_c.next == NULL);
138*89a1d03eSRichard do
139*89a1d03eSRichard if (0 != cnd_timedwait(&condition_c, &lock, &ts))
140*89a1d03eSRichard ;
141*89a1d03eSRichard while (list_c.next == NULL);
142*89a1d03eSRichard do {
143*89a1d03eSRichard cnd_timedwait(&condition_c, &lock, &ts);
144*89a1d03eSRichard } while (list_c.next == NULL);
145*89a1d03eSRichard do
146*89a1d03eSRichard cnd_timedwait(&condition_c, &lock, &ts);
147*89a1d03eSRichard while (list_c.next == NULL);
148*89a1d03eSRichard for (;; list_c.next == NULL) {
149*89a1d03eSRichard if (0 != cnd_timedwait(&condition_c, &lock, &ts)) {
150*89a1d03eSRichard }
151*89a1d03eSRichard }
152*89a1d03eSRichard for (;; list_c.next == NULL)
153*89a1d03eSRichard if (0 != cnd_timedwait(&condition_c, &lock, &ts)) {
154*89a1d03eSRichard }
155*89a1d03eSRichard for (;; list_c.next == NULL)
156*89a1d03eSRichard if (0 != cnd_timedwait(&condition_c, &lock, &ts))
157*89a1d03eSRichard ;
158*89a1d03eSRichard for (;; list_c.next == NULL) {
159*89a1d03eSRichard cnd_timedwait(&condition_c, &lock, &ts);
160*89a1d03eSRichard }
161*89a1d03eSRichard for (;; list_c.next == NULL)
162*89a1d03eSRichard cnd_timedwait(&condition_c, &lock, &ts);
163*89a1d03eSRichard }
main(void)164*89a1d03eSRichard int main(void) { return 0; }
165