1// RUN: %check_clang_tidy %s bugprone-chained-comparison %t
2
3void 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
9void 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
15void 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
21void 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
27void 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
33void 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
39void 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
45void 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
55void 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
61void 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
67void properly_chained_1(int x, int y, int z)
68{
69 int result = x < y && y < z;
70}
71
72void properly_chained_2(int x, int y, int z)
73{
74 int result = (x < y) == z;
75}
76
77

source code of clang-tools-extra/test/clang-tidy/checkers/bugprone/chained-comparison.c