adlint 1.10.0 → 1.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/ChangeLog +197 -4
- data/MANIFEST +17 -0
- data/NEWS +23 -4
- data/etc/mesg.d/en_US/messages.yml +14 -1
- data/etc/mesg.d/ja_JP/messages.yml +14 -1
- data/features/message_detection/W0093.feature +87 -0
- data/features/message_detection/W0687.feature +25 -0
- data/features/message_detection/W0688.feature +63 -0
- data/features/message_detection/W0689.feature +46 -0
- data/features/message_detection/W0690.feature +35 -0
- data/features/message_detection/W0698.feature +3 -2
- data/features/message_detection/W0703.feature +1 -0
- data/features/message_detection/W0723.feature +34 -0
- data/features/message_detection/W0732.feature +158 -0
- data/features/message_detection/W0733.feature +158 -0
- data/features/message_detection/W0734.feature +322 -0
- data/features/message_detection/W0735.feature +322 -0
- data/features/message_detection/W1052.feature +66 -0
- data/features/message_detection/W9001.feature +33 -0
- data/features/message_detection/W9003.feature +131 -0
- data/lib/adlint/c/ctrlexpr.rb +51 -50
- data/lib/adlint/c/domain.rb +237 -223
- data/lib/adlint/c/expr.rb +6 -8
- data/lib/adlint/c/interp.rb +8 -11
- data/lib/adlint/c/message.rb +20 -0
- data/lib/adlint/c/message_shima.rb +63 -0
- data/lib/adlint/c/object.rb +5 -4
- data/lib/adlint/c/operator.rb +99 -0
- data/lib/adlint/c/parser.rb +2 -2
- data/lib/adlint/c/parser.y +2 -2
- data/lib/adlint/c/phase.rb +6 -1
- data/lib/adlint/c/syntax.rb +442 -30
- data/lib/adlint/c/type.rb +449 -363
- data/lib/adlint/c/value.rb +96 -25
- data/lib/adlint/c.rb +1 -0
- data/lib/adlint/prelude.rb +16 -18
- data/lib/adlint/version.rb +2 -2
- data/share/doc/developers_guide_ja.html +11 -5
- data/share/doc/developers_guide_ja.texi +9 -3
- data/share/doc/users_guide_en.html +697 -131
- data/share/doc/users_guide_en.texi +491 -41
- data/share/doc/users_guide_ja.html +709 -139
- data/share/doc/users_guide_ja.texi +499 -45
- data/spec/adlint/c/ctrlexpr_spec.rb +168 -0
- data/spec/adlint/c/domain_spec.rb +835 -0
- data/spec/adlint/c/operator_spec.rb +406 -0
- data/spec/adlint/c/syntax_spec.rb +717 -0
- data/spec/adlint/c/type_spec.rb +55 -30
- metadata +19 -2
@@ -14,5 +14,39 @@ Feature: W0723
|
|
14
14
|
| mesg | line | column |
|
15
15
|
| W0567 | 2 | 25 |
|
16
16
|
| W0167 | 2 | 45 |
|
17
|
+
| W9003 | 2 | 45 |
|
18
|
+
|
19
|
+
Scenario: multiplication of two arbitrary `signed short' values
|
20
|
+
Given a target source named "W0723.c" with:
|
21
|
+
"""
|
22
|
+
static int foo(short a, short b)
|
23
|
+
{
|
24
|
+
return a * b; /* W0723 should not be output */
|
25
|
+
}
|
26
|
+
"""
|
27
|
+
When I successfully run `adlint W0723.c` on noarch
|
28
|
+
Then the output should exactly match with:
|
29
|
+
| mesg | line | column |
|
30
|
+
| W0104 | 1 | 22 |
|
31
|
+
| W0104 | 1 | 31 |
|
32
|
+
| W0629 | 1 | 12 |
|
33
|
+
| W0628 | 1 | 12 |
|
34
|
+
|
35
|
+
Scenario: multiplication of two arbitrary `signed int' values
|
36
|
+
Given a target source named "W0723.c" with:
|
37
|
+
"""
|
38
|
+
static int foo(int a, int b)
|
39
|
+
{
|
40
|
+
return a * b; /* W0723 */
|
41
|
+
}
|
42
|
+
"""
|
43
|
+
When I successfully run `adlint W0723.c` on noarch
|
44
|
+
Then the output should exactly match with:
|
45
|
+
| mesg | line | column |
|
46
|
+
| W0723 | 3 | 14 |
|
47
|
+
| W0104 | 1 | 20 |
|
48
|
+
| W0104 | 1 | 27 |
|
49
|
+
| W0629 | 1 | 12 |
|
50
|
+
| W0628 | 1 | 12 |
|
17
51
|
|
18
52
|
# vim:ts=2:sw=2:sts=2:et:
|
@@ -0,0 +1,158 @@
|
|
1
|
+
Feature: W0732
|
2
|
+
|
3
|
+
W0732 detects that both sides of `&&' operator are bitwise expression or
|
4
|
+
arithmetic expression.
|
5
|
+
|
6
|
+
Scenario: both sides of `&&' operator are arithmetic expressions
|
7
|
+
Given a target source named "W0732.c" with:
|
8
|
+
"""
|
9
|
+
static void func(int a, int b, int c, int d)
|
10
|
+
{
|
11
|
+
int r;
|
12
|
+
|
13
|
+
r = (a + b) && (c + d); /* W0732 */
|
14
|
+
r = (a - b) && (c - d); /* W0732 */
|
15
|
+
r = (a * b) && (c * d); /* W0732 */
|
16
|
+
r = (a / b) && (c / d); /* W0732 */
|
17
|
+
r = (a % b) && (c % d); /* W0732 */
|
18
|
+
|
19
|
+
r = (a += b) && (c -= d); /* W0732 */
|
20
|
+
r = (a *= b) && (c /= d); /* W0732 */
|
21
|
+
}
|
22
|
+
"""
|
23
|
+
When I successfully run `adlint W0732.c` on noarch
|
24
|
+
Then the output should exactly match with:
|
25
|
+
| mesg | line | column |
|
26
|
+
| W0723 | 5 | 12 |
|
27
|
+
| W0723 | 5 | 23 |
|
28
|
+
| W0723 | 6 | 12 |
|
29
|
+
| W0723 | 6 | 23 |
|
30
|
+
| W0723 | 7 | 12 |
|
31
|
+
| W0723 | 7 | 23 |
|
32
|
+
| W0093 | 8 | 12 |
|
33
|
+
| W0093 | 8 | 23 |
|
34
|
+
| W0093 | 9 | 12 |
|
35
|
+
| W0093 | 9 | 23 |
|
36
|
+
| W0093 | 12 | 12 |
|
37
|
+
| W0093 | 12 | 24 |
|
38
|
+
| W0104 | 1 | 29 |
|
39
|
+
| W0104 | 1 | 43 |
|
40
|
+
| W0629 | 1 | 13 |
|
41
|
+
| W0088 | 5 | 17 |
|
42
|
+
| W0732 | 5 | 17 |
|
43
|
+
| W0088 | 6 | 17 |
|
44
|
+
| W0732 | 6 | 17 |
|
45
|
+
| W0088 | 7 | 17 |
|
46
|
+
| W0732 | 7 | 17 |
|
47
|
+
| W0088 | 8 | 17 |
|
48
|
+
| W0732 | 8 | 17 |
|
49
|
+
| W0088 | 9 | 17 |
|
50
|
+
| W0732 | 9 | 17 |
|
51
|
+
| W0508 | 11 | 18 |
|
52
|
+
| W0732 | 11 | 18 |
|
53
|
+
| W0508 | 12 | 18 |
|
54
|
+
| W0732 | 12 | 18 |
|
55
|
+
| W0108 | 11 | 12 |
|
56
|
+
| W0108 | 11 | 24 |
|
57
|
+
| W0108 | 12 | 12 |
|
58
|
+
| W0108 | 12 | 24 |
|
59
|
+
| W0628 | 1 | 13 |
|
60
|
+
|
61
|
+
Scenario: both sides of `&&' operator are bitwise expressions
|
62
|
+
Given a target source named "W0732.c" with:
|
63
|
+
"""
|
64
|
+
static void func(int a, int b, int c, int d)
|
65
|
+
{
|
66
|
+
int r;
|
67
|
+
|
68
|
+
r = (a << b) && (c << d); /* W0732 */
|
69
|
+
r = (a >> b) && (c >> d); /* W0732 */
|
70
|
+
r = (a & b) && (c & d); /* W0732 */
|
71
|
+
r = (a ^ b) && (c ^ d); /* W0732 */
|
72
|
+
r = (a | b) && (c | d); /* W0732 */
|
73
|
+
|
74
|
+
r = (a &= b) && (c ^= d); /* W0732 */
|
75
|
+
r = (a <<= b) && (c >>= d); /* W0732 */
|
76
|
+
}
|
77
|
+
"""
|
78
|
+
When I successfully run `adlint W0732.c` on noarch
|
79
|
+
Then the output should exactly match with:
|
80
|
+
| mesg | line | column |
|
81
|
+
| W0570 | 5 | 12 |
|
82
|
+
| W0572 | 5 | 12 |
|
83
|
+
| W0570 | 5 | 24 |
|
84
|
+
| W0572 | 5 | 24 |
|
85
|
+
| W0571 | 6 | 12 |
|
86
|
+
| W0572 | 6 | 12 |
|
87
|
+
| W0571 | 6 | 24 |
|
88
|
+
| W0572 | 6 | 24 |
|
89
|
+
| W0572 | 7 | 12 |
|
90
|
+
| W0572 | 7 | 23 |
|
91
|
+
| W0572 | 8 | 12 |
|
92
|
+
| W0572 | 8 | 23 |
|
93
|
+
| W0572 | 9 | 12 |
|
94
|
+
| W0572 | 9 | 23 |
|
95
|
+
| W0572 | 11 | 12 |
|
96
|
+
| W0572 | 11 | 24 |
|
97
|
+
| W0570 | 12 | 12 |
|
98
|
+
| W0572 | 12 | 12 |
|
99
|
+
| W0571 | 12 | 25 |
|
100
|
+
| W0572 | 12 | 25 |
|
101
|
+
| W0104 | 1 | 29 |
|
102
|
+
| W0104 | 1 | 43 |
|
103
|
+
| W0629 | 1 | 13 |
|
104
|
+
| W0088 | 5 | 18 |
|
105
|
+
| W0732 | 5 | 18 |
|
106
|
+
| W0088 | 6 | 18 |
|
107
|
+
| W0732 | 6 | 18 |
|
108
|
+
| W0088 | 7 | 17 |
|
109
|
+
| W0732 | 7 | 17 |
|
110
|
+
| W0088 | 8 | 17 |
|
111
|
+
| W0732 | 8 | 17 |
|
112
|
+
| W0088 | 9 | 17 |
|
113
|
+
| W0732 | 9 | 17 |
|
114
|
+
| W0508 | 11 | 18 |
|
115
|
+
| W0732 | 11 | 18 |
|
116
|
+
| W0508 | 12 | 19 |
|
117
|
+
| W0732 | 12 | 19 |
|
118
|
+
| W0108 | 11 | 12 |
|
119
|
+
| W0108 | 11 | 24 |
|
120
|
+
| W0108 | 12 | 12 |
|
121
|
+
| W0108 | 12 | 25 |
|
122
|
+
| W0628 | 1 | 13 |
|
123
|
+
|
124
|
+
Scenario: both sides of `&&' operator are neither arithmetic nor bitwise
|
125
|
+
Given a target source named "W0732.c" with:
|
126
|
+
"""
|
127
|
+
static void func(int a, int b, int c, int d)
|
128
|
+
{
|
129
|
+
int r;
|
130
|
+
|
131
|
+
/* equality expression */
|
132
|
+
r = (a == b) && (c != d); /* OK */
|
133
|
+
|
134
|
+
/* relational expression */
|
135
|
+
r = (a < b) && (c > d); /* OK */
|
136
|
+
r = (a <= b) && (c >= d); /* OK */
|
137
|
+
|
138
|
+
/* logical expression */
|
139
|
+
r = (a && b) && (c && d); /* OK */
|
140
|
+
r = (a || b) && (c || d); /* OK */
|
141
|
+
}
|
142
|
+
"""
|
143
|
+
When I successfully run `adlint W0732.c` on noarch
|
144
|
+
Then the output should exactly match with:
|
145
|
+
| mesg | line | column |
|
146
|
+
| W0104 | 1 | 22 |
|
147
|
+
| W0104 | 1 | 29 |
|
148
|
+
| W0104 | 1 | 36 |
|
149
|
+
| W0104 | 1 | 43 |
|
150
|
+
| W0629 | 1 | 13 |
|
151
|
+
| W0088 | 6 | 18 |
|
152
|
+
| W0088 | 9 | 17 |
|
153
|
+
| W0088 | 10 | 18 |
|
154
|
+
| W0088 | 13 | 18 |
|
155
|
+
| W0088 | 14 | 18 |
|
156
|
+
| W0628 | 1 | 13 |
|
157
|
+
|
158
|
+
# vim:ts=2:sw=2:sts=2:et:
|
@@ -0,0 +1,158 @@
|
|
1
|
+
Feature: W0733
|
2
|
+
|
3
|
+
W0733 detects that both sides of `||' operator are bitwise expression or
|
4
|
+
arithmetic expression.
|
5
|
+
|
6
|
+
Scenario: both sides of `||' operator are arithmetic expressions
|
7
|
+
Given a target source named "W0733.c" with:
|
8
|
+
"""
|
9
|
+
static void func(int a, int b, int c, int d)
|
10
|
+
{
|
11
|
+
int r;
|
12
|
+
|
13
|
+
r = (a + b) || (c + d); /* W0733 */
|
14
|
+
r = (a - b) || (c - d); /* W0733 */
|
15
|
+
r = (a * b) || (c * d); /* W0733 */
|
16
|
+
r = (a / b) || (c / d); /* W0733 */
|
17
|
+
r = (a % b) || (c % d); /* W0733 */
|
18
|
+
|
19
|
+
r = (a += b) || (c -= d); /* W0733 */
|
20
|
+
r = (a *= b) || (c /= d); /* W0733 */
|
21
|
+
}
|
22
|
+
"""
|
23
|
+
When I successfully run `adlint W0733.c` on noarch
|
24
|
+
Then the output should exactly match with:
|
25
|
+
| mesg | line | column |
|
26
|
+
| W0723 | 5 | 12 |
|
27
|
+
| W0723 | 5 | 23 |
|
28
|
+
| W0723 | 6 | 12 |
|
29
|
+
| W0723 | 6 | 23 |
|
30
|
+
| W0723 | 7 | 12 |
|
31
|
+
| W0723 | 7 | 23 |
|
32
|
+
| W0093 | 8 | 12 |
|
33
|
+
| W0093 | 8 | 23 |
|
34
|
+
| W0093 | 9 | 12 |
|
35
|
+
| W0093 | 9 | 23 |
|
36
|
+
| W0093 | 12 | 12 |
|
37
|
+
| W0093 | 12 | 24 |
|
38
|
+
| W0104 | 1 | 29 |
|
39
|
+
| W0104 | 1 | 43 |
|
40
|
+
| W0629 | 1 | 13 |
|
41
|
+
| W0088 | 5 | 17 |
|
42
|
+
| W0733 | 5 | 17 |
|
43
|
+
| W0088 | 6 | 17 |
|
44
|
+
| W0733 | 6 | 17 |
|
45
|
+
| W0088 | 7 | 17 |
|
46
|
+
| W0733 | 7 | 17 |
|
47
|
+
| W0088 | 8 | 17 |
|
48
|
+
| W0733 | 8 | 17 |
|
49
|
+
| W0088 | 9 | 17 |
|
50
|
+
| W0733 | 9 | 17 |
|
51
|
+
| W0508 | 11 | 18 |
|
52
|
+
| W0733 | 11 | 18 |
|
53
|
+
| W0508 | 12 | 18 |
|
54
|
+
| W0733 | 12 | 18 |
|
55
|
+
| W0108 | 11 | 12 |
|
56
|
+
| W0108 | 11 | 24 |
|
57
|
+
| W0108 | 12 | 12 |
|
58
|
+
| W0108 | 12 | 24 |
|
59
|
+
| W0628 | 1 | 13 |
|
60
|
+
|
61
|
+
Scenario: both sides of `&&' operator are bitwise expressions
|
62
|
+
Given a target source named "W0733.c" with:
|
63
|
+
"""
|
64
|
+
static void func(int a, int b, int c, int d)
|
65
|
+
{
|
66
|
+
int r;
|
67
|
+
|
68
|
+
r = (a << b) || (c << d); /* W0733 */
|
69
|
+
r = (a >> b) || (c >> d); /* W0733 */
|
70
|
+
r = (a & b) || (c & d); /* W0733 */
|
71
|
+
r = (a ^ b) || (c ^ d); /* W0733 */
|
72
|
+
r = (a | b) || (c | d); /* W0733 */
|
73
|
+
|
74
|
+
r = (a &= b) || (c ^= d); /* W0733 */
|
75
|
+
r = (a <<= b) || (c >>= d); /* W0733 */
|
76
|
+
}
|
77
|
+
"""
|
78
|
+
When I successfully run `adlint W0733.c` on noarch
|
79
|
+
Then the output should exactly match with:
|
80
|
+
| mesg | line | column |
|
81
|
+
| W0570 | 5 | 12 |
|
82
|
+
| W0572 | 5 | 12 |
|
83
|
+
| W0570 | 5 | 24 |
|
84
|
+
| W0572 | 5 | 24 |
|
85
|
+
| W0571 | 6 | 12 |
|
86
|
+
| W0572 | 6 | 12 |
|
87
|
+
| W0571 | 6 | 24 |
|
88
|
+
| W0572 | 6 | 24 |
|
89
|
+
| W0572 | 7 | 12 |
|
90
|
+
| W0572 | 7 | 23 |
|
91
|
+
| W0572 | 8 | 12 |
|
92
|
+
| W0572 | 8 | 23 |
|
93
|
+
| W0572 | 9 | 12 |
|
94
|
+
| W0572 | 9 | 23 |
|
95
|
+
| W0572 | 11 | 12 |
|
96
|
+
| W0572 | 11 | 24 |
|
97
|
+
| W0570 | 12 | 12 |
|
98
|
+
| W0572 | 12 | 12 |
|
99
|
+
| W0571 | 12 | 25 |
|
100
|
+
| W0572 | 12 | 25 |
|
101
|
+
| W0104 | 1 | 29 |
|
102
|
+
| W0104 | 1 | 43 |
|
103
|
+
| W0629 | 1 | 13 |
|
104
|
+
| W0088 | 5 | 18 |
|
105
|
+
| W0733 | 5 | 18 |
|
106
|
+
| W0088 | 6 | 18 |
|
107
|
+
| W0733 | 6 | 18 |
|
108
|
+
| W0088 | 7 | 17 |
|
109
|
+
| W0733 | 7 | 17 |
|
110
|
+
| W0088 | 8 | 17 |
|
111
|
+
| W0733 | 8 | 17 |
|
112
|
+
| W0088 | 9 | 17 |
|
113
|
+
| W0733 | 9 | 17 |
|
114
|
+
| W0508 | 11 | 18 |
|
115
|
+
| W0733 | 11 | 18 |
|
116
|
+
| W0508 | 12 | 19 |
|
117
|
+
| W0733 | 12 | 19 |
|
118
|
+
| W0108 | 11 | 12 |
|
119
|
+
| W0108 | 11 | 24 |
|
120
|
+
| W0108 | 12 | 12 |
|
121
|
+
| W0108 | 12 | 25 |
|
122
|
+
| W0628 | 1 | 13 |
|
123
|
+
|
124
|
+
Scenario: both sides of `||' operator are neither arithmetic nor bitwise
|
125
|
+
Given a target source named "W0733.c" with:
|
126
|
+
"""
|
127
|
+
static void func(int a, int b, int c, int d)
|
128
|
+
{
|
129
|
+
int r;
|
130
|
+
|
131
|
+
/* equality expression */
|
132
|
+
r = (a == b) || (c != d); /* OK */
|
133
|
+
|
134
|
+
/* relational expression */
|
135
|
+
r = (a < b) || (c > d); /* OK */
|
136
|
+
r = (a <= b) || (c >= d); /* OK */
|
137
|
+
|
138
|
+
/* logical expression */
|
139
|
+
r = (a && b) || (c && d); /* OK */
|
140
|
+
r = (a || b) || (c || d); /* OK */
|
141
|
+
}
|
142
|
+
"""
|
143
|
+
When I successfully run `adlint W0733.c` on noarch
|
144
|
+
Then the output should exactly match with:
|
145
|
+
| mesg | line | column |
|
146
|
+
| W0104 | 1 | 22 |
|
147
|
+
| W0104 | 1 | 29 |
|
148
|
+
| W0104 | 1 | 36 |
|
149
|
+
| W0104 | 1 | 43 |
|
150
|
+
| W0629 | 1 | 13 |
|
151
|
+
| W0088 | 6 | 18 |
|
152
|
+
| W0088 | 9 | 17 |
|
153
|
+
| W0088 | 10 | 18 |
|
154
|
+
| W0088 | 13 | 18 |
|
155
|
+
| W0088 | 14 | 18 |
|
156
|
+
| W0628 | 1 | 13 |
|
157
|
+
|
158
|
+
# vim:ts=2:sw=2:sts=2:et:
|
@@ -0,0 +1,322 @@
|
|
1
|
+
Feature: W0734
|
2
|
+
|
3
|
+
W0734 detects that left side of logical expression is bitwise expression or
|
4
|
+
arithmetic expression.
|
5
|
+
|
6
|
+
Scenario: left side of `&&' operator is an arithmetic expression
|
7
|
+
Given a target source named "W0734.c" with:
|
8
|
+
"""
|
9
|
+
static void func(int a, int b, int c)
|
10
|
+
{
|
11
|
+
int r;
|
12
|
+
|
13
|
+
r = (a + b) && c; /* W0734 */
|
14
|
+
r = (a - b) && c; /* W0734 */
|
15
|
+
r = (a * b) && c; /* W0734 */
|
16
|
+
r = (a / b) && c; /* W0734 */
|
17
|
+
r = (a % b) && c; /* W0734 */
|
18
|
+
}
|
19
|
+
"""
|
20
|
+
When I successfully run `adlint W0734.c` on noarch
|
21
|
+
Then the output should exactly match with:
|
22
|
+
| mesg | line | column |
|
23
|
+
| W0723 | 5 | 12 |
|
24
|
+
| W0723 | 6 | 12 |
|
25
|
+
| W0723 | 7 | 12 |
|
26
|
+
| W0093 | 8 | 12 |
|
27
|
+
| W0093 | 9 | 12 |
|
28
|
+
| W0104 | 1 | 22 |
|
29
|
+
| W0104 | 1 | 29 |
|
30
|
+
| W0104 | 1 | 36 |
|
31
|
+
| W0629 | 1 | 13 |
|
32
|
+
| W0088 | 5 | 17 |
|
33
|
+
| W0734 | 5 | 9 |
|
34
|
+
| W0088 | 6 | 17 |
|
35
|
+
| W0734 | 6 | 9 |
|
36
|
+
| W0088 | 7 | 17 |
|
37
|
+
| W0734 | 7 | 9 |
|
38
|
+
| W0088 | 8 | 17 |
|
39
|
+
| W0734 | 8 | 9 |
|
40
|
+
| W0088 | 9 | 17 |
|
41
|
+
| W0734 | 9 | 9 |
|
42
|
+
| W0628 | 1 | 13 |
|
43
|
+
|
44
|
+
Scenario: left side of `&&' operator is an arithmetic expression
|
45
|
+
Given a target source named "W0734.c" with:
|
46
|
+
"""
|
47
|
+
static void func(int a, int b, int c, int d)
|
48
|
+
{
|
49
|
+
int r;
|
50
|
+
|
51
|
+
r = (a + b) && (c == d); /* W0734 */
|
52
|
+
r = (a - b) && (c = d); /* W0734 */
|
53
|
+
r = (a * b) && (c && d); /* W0734 */
|
54
|
+
r = (a / b) && (c < d); /* W0734 */
|
55
|
+
r = (a / b) && (c != d); /* W0734 */
|
56
|
+
}
|
57
|
+
"""
|
58
|
+
When I successfully run `adlint W0734.c` on noarch
|
59
|
+
Then the output should exactly match with:
|
60
|
+
| mesg | line | column |
|
61
|
+
| W0723 | 5 | 12 |
|
62
|
+
| W0723 | 6 | 12 |
|
63
|
+
| W0723 | 7 | 12 |
|
64
|
+
| W0093 | 8 | 12 |
|
65
|
+
| W0093 | 9 | 12 |
|
66
|
+
| W0104 | 1 | 22 |
|
67
|
+
| W0104 | 1 | 29 |
|
68
|
+
| W0104 | 1 | 43 |
|
69
|
+
| W0629 | 1 | 13 |
|
70
|
+
| W0088 | 5 | 17 |
|
71
|
+
| W0734 | 5 | 9 |
|
72
|
+
| W0508 | 6 | 17 |
|
73
|
+
| W0734 | 6 | 9 |
|
74
|
+
| W0088 | 7 | 17 |
|
75
|
+
| W0734 | 7 | 9 |
|
76
|
+
| W0088 | 8 | 17 |
|
77
|
+
| W0734 | 8 | 9 |
|
78
|
+
| W0088 | 9 | 17 |
|
79
|
+
| W0734 | 9 | 9 |
|
80
|
+
| W0108 | 6 | 23 |
|
81
|
+
| W0628 | 1 | 13 |
|
82
|
+
|
83
|
+
Scenario: left side of `||' operator is an arithmetic expression
|
84
|
+
Given a target source named "W0734.c" with:
|
85
|
+
"""
|
86
|
+
static void func(int a, int b, int c)
|
87
|
+
{
|
88
|
+
int r;
|
89
|
+
|
90
|
+
r = (a + b) || c; /* W0734 */
|
91
|
+
r = (a - b) || c; /* W0734 */
|
92
|
+
r = (a * b) || c; /* W0734 */
|
93
|
+
r = (a / b) || c; /* W0734 */
|
94
|
+
r = (a % b) || c; /* W0734 */
|
95
|
+
}
|
96
|
+
"""
|
97
|
+
When I successfully run `adlint W0734.c` on noarch
|
98
|
+
Then the output should exactly match with:
|
99
|
+
| mesg | line | column |
|
100
|
+
| W0723 | 5 | 12 |
|
101
|
+
| W0723 | 6 | 12 |
|
102
|
+
| W0723 | 7 | 12 |
|
103
|
+
| W0093 | 8 | 12 |
|
104
|
+
| W0093 | 9 | 12 |
|
105
|
+
| W0104 | 1 | 22 |
|
106
|
+
| W0104 | 1 | 29 |
|
107
|
+
| W0104 | 1 | 36 |
|
108
|
+
| W0629 | 1 | 13 |
|
109
|
+
| W0088 | 5 | 17 |
|
110
|
+
| W0734 | 5 | 9 |
|
111
|
+
| W0088 | 6 | 17 |
|
112
|
+
| W0734 | 6 | 9 |
|
113
|
+
| W0088 | 7 | 17 |
|
114
|
+
| W0734 | 7 | 9 |
|
115
|
+
| W0088 | 8 | 17 |
|
116
|
+
| W0734 | 8 | 9 |
|
117
|
+
| W0088 | 9 | 17 |
|
118
|
+
| W0734 | 9 | 9 |
|
119
|
+
| W0628 | 1 | 13 |
|
120
|
+
|
121
|
+
Scenario: left side of `||' operator is an arithmetic expression
|
122
|
+
Given a target source named "W0734.c" with:
|
123
|
+
"""
|
124
|
+
static void func(int a, int b, int c, int d)
|
125
|
+
{
|
126
|
+
int r;
|
127
|
+
|
128
|
+
r = (a + b) || (c == d); /* W0734 */
|
129
|
+
r = (a - b) || (c = d); /* W0734 */
|
130
|
+
r = (a * b) || (c || d); /* W0734 */
|
131
|
+
r = (a / b) || (c < d); /* W0734 */
|
132
|
+
r = (a / b) || (c != d); /* W0734 */
|
133
|
+
}
|
134
|
+
"""
|
135
|
+
When I successfully run `adlint W0734.c` on noarch
|
136
|
+
Then the output should exactly match with:
|
137
|
+
| mesg | line | column |
|
138
|
+
| W0723 | 5 | 12 |
|
139
|
+
| W0723 | 6 | 12 |
|
140
|
+
| W0723 | 7 | 12 |
|
141
|
+
| W0093 | 8 | 12 |
|
142
|
+
| W0093 | 9 | 12 |
|
143
|
+
| W0104 | 1 | 22 |
|
144
|
+
| W0104 | 1 | 29 |
|
145
|
+
| W0104 | 1 | 43 |
|
146
|
+
| W0629 | 1 | 13 |
|
147
|
+
| W0088 | 5 | 17 |
|
148
|
+
| W0734 | 5 | 9 |
|
149
|
+
| W0508 | 6 | 17 |
|
150
|
+
| W0734 | 6 | 9 |
|
151
|
+
| W0088 | 7 | 17 |
|
152
|
+
| W0734 | 7 | 9 |
|
153
|
+
| W0088 | 8 | 17 |
|
154
|
+
| W0734 | 8 | 9 |
|
155
|
+
| W0088 | 9 | 17 |
|
156
|
+
| W0734 | 9 | 9 |
|
157
|
+
| W0108 | 6 | 23 |
|
158
|
+
| W0628 | 1 | 13 |
|
159
|
+
|
160
|
+
Scenario: left side of `&&' operator is a bitwise expression
|
161
|
+
Given a target source named "W0734.c" with:
|
162
|
+
"""
|
163
|
+
static void func(int a, int b, int c)
|
164
|
+
{
|
165
|
+
int r;
|
166
|
+
|
167
|
+
r = (a << b) && c; /* W0734 */
|
168
|
+
r = (a >> b) && c; /* W0734 */
|
169
|
+
r = (a & b) && c; /* W0734 */
|
170
|
+
r = (a ^ b) && c; /* W0734 */
|
171
|
+
r = (a | b) && c; /* W0734 */
|
172
|
+
}
|
173
|
+
"""
|
174
|
+
When I successfully run `adlint W0734.c` on noarch
|
175
|
+
Then the output should exactly match with:
|
176
|
+
| mesg | line | column |
|
177
|
+
| W0570 | 5 | 12 |
|
178
|
+
| W0572 | 5 | 12 |
|
179
|
+
| W0571 | 6 | 12 |
|
180
|
+
| W0572 | 6 | 12 |
|
181
|
+
| W0572 | 7 | 12 |
|
182
|
+
| W0572 | 8 | 12 |
|
183
|
+
| W0572 | 9 | 12 |
|
184
|
+
| W0104 | 1 | 22 |
|
185
|
+
| W0104 | 1 | 29 |
|
186
|
+
| W0104 | 1 | 36 |
|
187
|
+
| W0629 | 1 | 13 |
|
188
|
+
| W0088 | 5 | 18 |
|
189
|
+
| W0734 | 5 | 9 |
|
190
|
+
| W0088 | 6 | 18 |
|
191
|
+
| W0734 | 6 | 9 |
|
192
|
+
| W0088 | 7 | 17 |
|
193
|
+
| W0734 | 7 | 9 |
|
194
|
+
| W0088 | 8 | 17 |
|
195
|
+
| W0734 | 8 | 9 |
|
196
|
+
| W0088 | 9 | 17 |
|
197
|
+
| W0734 | 9 | 9 |
|
198
|
+
| W0628 | 1 | 13 |
|
199
|
+
|
200
|
+
Scenario: left side of `||' operator is a bitwise expression
|
201
|
+
Given a target source named "W0734.c" with:
|
202
|
+
"""
|
203
|
+
static void func(int a, int b, int c)
|
204
|
+
{
|
205
|
+
int r;
|
206
|
+
|
207
|
+
r = (a << b) || c; /* W0734 */
|
208
|
+
r = (a >> b) || c; /* W0734 */
|
209
|
+
r = (a & b) || c; /* W0734 */
|
210
|
+
r = (a ^ b) || c; /* W0734 */
|
211
|
+
r = (a | b) || c; /* W0734 */
|
212
|
+
}
|
213
|
+
"""
|
214
|
+
When I successfully run `adlint W0734.c` on noarch
|
215
|
+
Then the output should exactly match with:
|
216
|
+
| mesg | line | column |
|
217
|
+
| W0570 | 5 | 12 |
|
218
|
+
| W0572 | 5 | 12 |
|
219
|
+
| W0571 | 6 | 12 |
|
220
|
+
| W0572 | 6 | 12 |
|
221
|
+
| W0572 | 7 | 12 |
|
222
|
+
| W0572 | 8 | 12 |
|
223
|
+
| W0572 | 9 | 12 |
|
224
|
+
| W0104 | 1 | 22 |
|
225
|
+
| W0104 | 1 | 29 |
|
226
|
+
| W0104 | 1 | 36 |
|
227
|
+
| W0629 | 1 | 13 |
|
228
|
+
| W0088 | 5 | 18 |
|
229
|
+
| W0734 | 5 | 9 |
|
230
|
+
| W0088 | 6 | 18 |
|
231
|
+
| W0734 | 6 | 9 |
|
232
|
+
| W0088 | 7 | 17 |
|
233
|
+
| W0734 | 7 | 9 |
|
234
|
+
| W0088 | 8 | 17 |
|
235
|
+
| W0734 | 8 | 9 |
|
236
|
+
| W0088 | 9 | 17 |
|
237
|
+
| W0734 | 9 | 9 |
|
238
|
+
| W0628 | 1 | 13 |
|
239
|
+
|
240
|
+
Scenario: left side of `&&' operator is a bitwise expression
|
241
|
+
Given a target source named "W0734.c" with:
|
242
|
+
"""
|
243
|
+
static void func(int a, int b, int c, int d)
|
244
|
+
{
|
245
|
+
int r;
|
246
|
+
|
247
|
+
r = (a << b) && (c == d); /* W0734 */
|
248
|
+
r = (a >> b) && (c = d); /* W0734 */
|
249
|
+
r = (a & b) && (c && d); /* W0734 */
|
250
|
+
r = (a ^ b) && (c < d); /* W0734 */
|
251
|
+
r = (a | b) && (c != d); /* W0734 */
|
252
|
+
}
|
253
|
+
"""
|
254
|
+
When I successfully run `adlint W0734.c` on noarch
|
255
|
+
Then the output should exactly match with:
|
256
|
+
| mesg | line | column |
|
257
|
+
| W0570 | 5 | 12 |
|
258
|
+
| W0572 | 5 | 12 |
|
259
|
+
| W0571 | 6 | 12 |
|
260
|
+
| W0572 | 6 | 12 |
|
261
|
+
| W0572 | 7 | 12 |
|
262
|
+
| W0572 | 8 | 12 |
|
263
|
+
| W0572 | 9 | 12 |
|
264
|
+
| W0104 | 1 | 22 |
|
265
|
+
| W0104 | 1 | 29 |
|
266
|
+
| W0104 | 1 | 43 |
|
267
|
+
| W0629 | 1 | 13 |
|
268
|
+
| W0088 | 5 | 18 |
|
269
|
+
| W0734 | 5 | 9 |
|
270
|
+
| W0508 | 6 | 18 |
|
271
|
+
| W0734 | 6 | 9 |
|
272
|
+
| W0088 | 7 | 17 |
|
273
|
+
| W0734 | 7 | 9 |
|
274
|
+
| W0088 | 8 | 17 |
|
275
|
+
| W0734 | 8 | 9 |
|
276
|
+
| W0088 | 9 | 17 |
|
277
|
+
| W0734 | 9 | 9 |
|
278
|
+
| W0108 | 6 | 24 |
|
279
|
+
| W0628 | 1 | 13 |
|
280
|
+
|
281
|
+
Scenario: left side of `||' operator is a bitwise expression
|
282
|
+
Given a target source named "W0734.c" with:
|
283
|
+
"""
|
284
|
+
static void func(int a, int b, int c, int d)
|
285
|
+
{
|
286
|
+
int r;
|
287
|
+
|
288
|
+
r = (a << b) || (c == d); /* W0734 */
|
289
|
+
r = (a >> b) || (c = d); /* W0734 */
|
290
|
+
r = (a & b) || (c && d); /* W0734 */
|
291
|
+
r = (a ^ b) || (c < d); /* W0734 */
|
292
|
+
r = (a | b) || (c != d); /* W0734 */
|
293
|
+
}
|
294
|
+
"""
|
295
|
+
When I successfully run `adlint W0734.c` on noarch
|
296
|
+
Then the output should exactly match with:
|
297
|
+
| mesg | line | column |
|
298
|
+
| W0570 | 5 | 12 |
|
299
|
+
| W0572 | 5 | 12 |
|
300
|
+
| W0571 | 6 | 12 |
|
301
|
+
| W0572 | 6 | 12 |
|
302
|
+
| W0572 | 7 | 12 |
|
303
|
+
| W0572 | 8 | 12 |
|
304
|
+
| W0572 | 9 | 12 |
|
305
|
+
| W0104 | 1 | 22 |
|
306
|
+
| W0104 | 1 | 29 |
|
307
|
+
| W0104 | 1 | 43 |
|
308
|
+
| W0629 | 1 | 13 |
|
309
|
+
| W0088 | 5 | 18 |
|
310
|
+
| W0734 | 5 | 9 |
|
311
|
+
| W0508 | 6 | 18 |
|
312
|
+
| W0734 | 6 | 9 |
|
313
|
+
| W0088 | 7 | 17 |
|
314
|
+
| W0734 | 7 | 9 |
|
315
|
+
| W0088 | 8 | 17 |
|
316
|
+
| W0734 | 8 | 9 |
|
317
|
+
| W0088 | 9 | 17 |
|
318
|
+
| W0734 | 9 | 9 |
|
319
|
+
| W0108 | 6 | 24 |
|
320
|
+
| W0628 | 1 | 13 |
|
321
|
+
|
322
|
+
# vim:ts=2:sw=2:sts=2:et:
|