| // RUN: %check_clang_tidy %s bugprone-spuriously-wake-up-functions %t -- -- |
| #define NULL 0 |
| |
| struct Node1 { |
| void *Node1; |
| struct Node1 *next; |
| }; |
| |
| typedef struct mtx_t { |
| } mtx_t; |
| typedef struct cnd_t { |
| } cnd_t; |
| struct timespec {}; |
| |
| int cnd_wait(cnd_t *cond, mtx_t *mutex){}; |
| int cnd_timedwait(cnd_t *cond, mtx_t *mutex, |
| const struct timespec *time_point){}; |
| |
| struct Node1 list_c; |
| static mtx_t lock; |
| static cnd_t condition_c; |
| struct timespec ts; |
| |
| void consume_list_element(void) { |
| |
| if (list_c.next == NULL) { |
| if (0 != cnd_wait(&condition_c, &lock)) { |
| // CHECK-MESSAGES: :[[@LINE-1]]:14: warning: 'cnd_wait' should be placed inside a while statement [bugprone-spuriously-wake-up-functions] |
| } |
| } |
| if (list_c.next == NULL) |
| if (0 != cnd_wait(&condition_c, &lock)) |
| // CHECK-MESSAGES: :[[@LINE-1]]:14: warning: 'cnd_wait' should be placed inside a while statement [bugprone-spuriously-wake-up-functions] |
| ; |
| if (list_c.next == NULL && 0 != cnd_wait(&condition_c, &lock)) |
| // CHECK-MESSAGES: :[[@LINE-1]]:35: warning: 'cnd_wait' should be placed inside a while statement [bugprone-spuriously-wake-up-functions] |
| ; |
| while (list_c.next == NULL) { |
| if (0 != cnd_wait(&condition_c, &lock)) { |
| } |
| } |
| while (list_c.next == NULL) |
| if (0 != cnd_wait(&condition_c, &lock)) { |
| } |
| while (list_c.next == NULL) |
| if (0 != cnd_wait(&condition_c, &lock)) |
| ; |
| if (list_c.next == NULL) { |
| cnd_wait(&condition_c, &lock); |
| // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: 'cnd_wait' should be placed inside a while statement [bugprone-spuriously-wake-up-functions] |
| } |
| if (list_c.next == NULL) |
| cnd_wait(&condition_c, &lock); |
| // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: 'cnd_wait' should be placed inside a while statement [bugprone-spuriously-wake-up-functions] |
| while (list_c.next == NULL) { |
| cnd_wait(&condition_c, &lock); |
| } |
| while (list_c.next == NULL) |
| cnd_wait(&condition_c, &lock); |
| |
| do { |
| if (0 != cnd_wait(&condition_c, &lock)) { |
| } |
| } while (list_c.next == NULL); |
| do |
| if (0 != cnd_wait(&condition_c, &lock)) { |
| } |
| while (list_c.next == NULL); |
| do |
| if (0 != cnd_wait(&condition_c, &lock)) |
| ; |
| while (list_c.next == NULL); |
| do { |
| cnd_wait(&condition_c, &lock); |
| } while (list_c.next == NULL); |
| do |
| cnd_wait(&condition_c, &lock); |
| while (list_c.next == NULL); |
| for (;; list_c.next == NULL) { |
| if (0 != cnd_wait(&condition_c, &lock)) { |
| } |
| } |
| for (;; list_c.next == NULL) |
| if (0 != cnd_wait(&condition_c, &lock)) { |
| } |
| for (;; list_c.next == NULL) |
| if (0 != cnd_wait(&condition_c, &lock)) |
| ; |
| for (;; list_c.next == NULL) { |
| cnd_wait(&condition_c, &lock); |
| } |
| for (;; list_c.next == NULL) |
| cnd_wait(&condition_c, &lock); |
| |
| if (list_c.next == NULL) { |
| if (0 != cnd_timedwait(&condition_c, &lock, &ts)) { |
| // CHECK-MESSAGES: :[[@LINE-1]]:14: warning: 'cnd_timedwait' should be placed inside a while statement [bugprone-spuriously-wake-up-functions] |
| } |
| } |
| if (list_c.next == NULL) |
| if (0 != cnd_timedwait(&condition_c, &lock, &ts)) |
| // CHECK-MESSAGES: :[[@LINE-1]]:14: warning: 'cnd_timedwait' should be placed inside a while statement [bugprone-spuriously-wake-up-functions] |
| ; |
| if (list_c.next == NULL && 0 != cnd_timedwait(&condition_c, &lock, &ts)) |
| // CHECK-MESSAGES: :[[@LINE-1]]:35: warning: 'cnd_timedwait' should be placed inside a while statement [bugprone-spuriously-wake-up-functions] |
| ; |
| while (list_c.next == NULL) { |
| if (0 != cnd_timedwait(&condition_c, &lock, &ts)) { |
| } |
| } |
| while (list_c.next == NULL) |
| if (0 != cnd_timedwait(&condition_c, &lock, &ts)) { |
| } |
| while (list_c.next == NULL) |
| if (0 != cnd_timedwait(&condition_c, &lock, &ts)) |
| ; |
| if (list_c.next == NULL) { |
| cnd_timedwait(&condition_c, &lock, &ts); |
| // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: 'cnd_timedwait' should be placed inside a while statement [bugprone-spuriously-wake-up-functions] |
| } |
| if (list_c.next == NULL) |
| cnd_timedwait(&condition_c, &lock, &ts); |
| // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: 'cnd_timedwait' should be placed inside a while statement [bugprone-spuriously-wake-up-functions] |
| while (list_c.next == NULL) { |
| cnd_timedwait(&condition_c, &lock, &ts); |
| } |
| while (list_c.next == NULL) |
| cnd_timedwait(&condition_c, &lock, &ts); |
| |
| do { |
| if (0 != cnd_timedwait(&condition_c, &lock, &ts)) { |
| } |
| } while (list_c.next == NULL); |
| do |
| if (0 != cnd_timedwait(&condition_c, &lock, &ts)) { |
| } |
| while (list_c.next == NULL); |
| do |
| if (0 != cnd_timedwait(&condition_c, &lock, &ts)) |
| ; |
| while (list_c.next == NULL); |
| do { |
| cnd_timedwait(&condition_c, &lock, &ts); |
| } while (list_c.next == NULL); |
| do |
| cnd_timedwait(&condition_c, &lock, &ts); |
| while (list_c.next == NULL); |
| for (;; list_c.next == NULL) { |
| if (0 != cnd_timedwait(&condition_c, &lock, &ts)) { |
| } |
| } |
| for (;; list_c.next == NULL) |
| if (0 != cnd_timedwait(&condition_c, &lock, &ts)) { |
| } |
| for (;; list_c.next == NULL) |
| if (0 != cnd_timedwait(&condition_c, &lock, &ts)) |
| ; |
| for (;; list_c.next == NULL) { |
| cnd_timedwait(&condition_c, &lock, &ts); |
| } |
| for (;; list_c.next == NULL) |
| cnd_timedwait(&condition_c, &lock, &ts); |
| } |
| int main() { return 0; } |