| 1 | // RUN: %check_clang_tidy --extra-arg=-Wno-error=parentheses %s bugprone-chained-comparison %t |
| 2 | |
| 3 | void badly_chained_1(int x, int y, int z) |
| 4 | { |
| 5 | int result = x < y < z; |
| 6 | } |
| 7 | // CHECK-MESSAGES: :[[@LINE-2]]:18: warning: chained comparison 'v0 < v1 < v2' may generate unintended results, use parentheses to specify order of evaluation or a logical operator to separate comparison expressions [bugprone-chained-comparison] |
| 8 | |
| 9 | void badly_chained_2(int x, int y, int z) |
| 10 | { |
| 11 | int result = x <= y <= z; |
| 12 | } |
| 13 | // CHECK-MESSAGES: :[[@LINE-2]]:18: warning: chained comparison 'v0 <= v1 <= v2' may generate unintended results, use parentheses to specify order of evaluation or a logical operator to separate comparison expressions [bugprone-chained-comparison] |
| 14 | |
| 15 | void badly_chained_3(int x, int y, int z) |
| 16 | { |
| 17 | int result = x > y > z; |
| 18 | } |
| 19 | // CHECK-MESSAGES: :[[@LINE-2]]:18: warning: chained comparison 'v0 > v1 > v2' may generate unintended results, use parentheses to specify order of evaluation or a logical operator to separate comparison expressions [bugprone-chained-comparison] |
| 20 | |
| 21 | void badly_chained_4(int x, int y, int z) |
| 22 | { |
| 23 | int result = x >= y >= z; |
| 24 | } |
| 25 | // CHECK-MESSAGES: :[[@LINE-2]]:18: warning: chained comparison 'v0 >= v1 >= v2' may generate unintended results, use parentheses to specify order of evaluation or a logical operator to separate comparison expressions [bugprone-chained-comparison] |
| 26 | |
| 27 | void badly_chained_5(int x, int y, int z) |
| 28 | { |
| 29 | int result = x == y != z; |
| 30 | } |
| 31 | // CHECK-MESSAGES: :[[@LINE-2]]:18: warning: chained comparison 'v0 == v1 != v2' may generate unintended results, use parentheses to specify order of evaluation or a logical operator to separate comparison expressions [bugprone-chained-comparison] |
| 32 | |
| 33 | void badly_chained_6(int x, int y, int z) |
| 34 | { |
| 35 | int result = x != y == z; |
| 36 | } |
| 37 | // CHECK-MESSAGES: :[[@LINE-2]]:18: warning: chained comparison 'v0 != v1 == v2' may generate unintended results, use parentheses to specify order of evaluation or a logical operator to separate comparison expressions [bugprone-chained-comparison] |
| 38 | |
| 39 | void badly_chained_multiple(int a, int b, int c, int d, int e, int f, int g, int h) |
| 40 | { |
| 41 | int result = a == b == c == d == e == f == g == h; |
| 42 | } |
| 43 | // CHECK-MESSAGES: :[[@LINE-2]]:18: warning: chained comparison 'v0 == v1 == v2 == v3 == v4 == v5 == v6 == v7' may generate unintended results, use parentheses to specify order of evaluation or a logical operator to separate comparison expressions [bugprone-chained-comparison] |
| 44 | |
| 45 | void badly_chained_limit(int v[29]) |
| 46 | { |
| 47 | // CHECK-MESSAGES: :[[@LINE+1]]:18: warning: chained comparison 'v0 == v1 == v2 == v3 == v4 == v5 == v6 == v7 == v8 == v9 == v10 == v11 == v12 == v13 == v14 == v15 == v16 == v17 == v18 == v19 == v20 == v21 == v22 == v23 == v24 == v25 == v26 == v27 == v28' may generate unintended results, use parentheses to specify order of evaluation or a logical operator to separate comparison expressions [bugprone-chained-comparison] |
| 48 | int result = v[0] == v[1] == v[2] == v[3] == v[4] == v[5] == v[6] == v[7] == |
| 49 | v[8] == v[9] == v[10] == v[11] == v[12] == v[13] == v[14] == |
| 50 | v[15] == v[16] == v[17] == v[18] == v[19] == v[20] == v[21] == |
| 51 | v[22] == v[23] == v[24] == v[25] == v[26] == v[27] == v[28]; |
| 52 | |
| 53 | } |
| 54 | |
| 55 | void badly_chained_parens2(int x, int y, int z, int t, int a, int b) |
| 56 | { |
| 57 | int result = (x < y) < (z && t) > (a == b); |
| 58 | } |
| 59 | // CHECK-MESSAGES: :[[@LINE-2]]:18: warning: chained comparison 'v0 < v1 > v2' may generate unintended results, use parentheses to specify order of evaluation or a logical operator to separate comparison expressions [bugprone-chained-comparison] |
| 60 | |
| 61 | void badly_chained_inner(int x, int y, int z, int t, int u) |
| 62 | { |
| 63 | int result = x && y < z < t && u; |
| 64 | } |
| 65 | // CHECK-MESSAGES: :[[@LINE-2]]:23: warning: chained comparison 'v0 < v1 < v2' may generate unintended results, use parentheses to specify order of evaluation or a logical operator to separate comparison expressions [bugprone-chained-comparison] |
| 66 | |
| 67 | void properly_chained_1(int x, int y, int z) |
| 68 | { |
| 69 | int result = x < y && y < z; |
| 70 | } |
| 71 | |
| 72 | void properly_chained_2(int x, int y, int z) |
| 73 | { |
| 74 | int result = (x < y) == z; |
| 75 | } |
| 76 | |
| 77 | |