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