| 1 | // RUN: %check_clang_tidy %s bugprone-infinite-loop %t -- -- -fblocks -fexceptions |
| 2 | // RUN: %check_clang_tidy %s bugprone-infinite-loop %t -- -- -fblocks -fobjc-arc -fexceptions |
| 3 | |
| 4 | @interface I |
| 5 | + (void)foo; |
| 6 | + (void)bar; |
| 7 | + (void)baz __attribute__((noreturn)); |
| 8 | + (instancetype)alloc; |
| 9 | - (instancetype)init; |
| 10 | @end |
| 11 | |
| 12 | _Noreturn void term(); |
| 13 | |
| 14 | void plainCFunction() { |
| 15 | int i = 0; |
| 16 | int j = 0; |
| 17 | int a[10]; |
| 18 | |
| 19 | while (i < 10) { |
| 20 | // no warning, function term has C noreturn attribute |
| 21 | term(); |
| 22 | } |
| 23 | while (i < 10) { |
| 24 | // no warning, class method baz has noreturn attribute |
| 25 | [I baz]; |
| 26 | } |
| 27 | while (i + j < 10) { |
| 28 | // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: this loop is infinite; none of its condition variables (i, j) are updated in the loop body [bugprone-infinite-loop] |
| 29 | [I foo]; |
| 30 | } |
| 31 | while (i + j < 10) { |
| 32 | [I foo]; |
| 33 | [I baz]; // no warning, class method baz has noreturn attribute |
| 34 | } |
| 35 | |
| 36 | void (^block)() = ^{ |
| 37 | }; |
| 38 | void __attribute__((noreturn)) (^block_nr)(void) = ^void __attribute__((noreturn)) (void) { throw "err" ; }; |
| 39 | |
| 40 | while (i < 10) { |
| 41 | // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: this loop is infinite; none of its condition variables (i) are updated in the loop body [bugprone-infinite-loop] |
| 42 | block(); |
| 43 | } |
| 44 | while (i < 10) { |
| 45 | // no warning, the block has "noreturn" arribute |
| 46 | block_nr(); |
| 47 | } |
| 48 | } |
| 49 | |
| 50 | @implementation I |
| 51 | + (void)bar { |
| 52 | } |
| 53 | |
| 54 | + (void)foo { |
| 55 | static int i = 0; |
| 56 | |
| 57 | while (i < 10) { |
| 58 | // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: this loop is infinite; none of its condition variables (i) are updated in the loop body [bugprone-infinite-loop] |
| 59 | [I bar]; |
| 60 | } |
| 61 | } |
| 62 | @end |
| 63 | |