adlint 1.16.0 → 1.18.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.
Files changed (83) hide show
  1. data/ChangeLog +471 -0
  2. data/MANIFEST +35 -8
  3. data/NEWS +50 -4
  4. data/bin/adlint +7 -7
  5. data/bin/adlint_chk +7 -7
  6. data/bin/adlint_cma +7 -7
  7. data/bin/adlint_sma +7 -7
  8. data/bin/adlintize +5 -5
  9. data/etc/mesg.d/en_US/messages.yml +3 -3
  10. data/etc/mesg.d/ja_JP/messages.yml +3 -3
  11. data/features/message_detection/E0013.feature +34 -0
  12. data/features/message_detection/W0007.feature +2 -0
  13. data/features/message_detection/W0583.feature +1 -2
  14. data/features/message_detection/W0641.feature +132 -0
  15. data/features/message_detection/W0643.feature +1 -1
  16. data/features/message_detection/W0644.feature +529 -0
  17. data/features/message_detection/W0645.feature +1 -1
  18. data/features/message_detection/W0649.feature +277 -0
  19. data/features/message_detection/W0650.feature +208 -0
  20. data/features/message_detection/W0697.feature +6 -0
  21. data/features/message_detection/W0705.feature +350 -0
  22. data/features/message_detection/W0707.feature +223 -0
  23. data/features/message_detection/W0711.feature +113 -0
  24. data/features/message_detection/W0712.feature +113 -0
  25. data/features/message_detection/W0713.feature +110 -0
  26. data/features/message_detection/W0714.feature +118 -0
  27. data/features/message_detection/W0715.feature +118 -0
  28. data/features/message_detection/W0716.feature +1 -0
  29. data/features/message_detection/W0717.feature +1 -0
  30. data/features/message_detection/W0718.feature +1 -0
  31. data/features/message_detection/W0719.feature +154 -0
  32. data/features/message_detection/W0723.feature +1 -2
  33. data/features/message_detection/W0732.feature +3 -0
  34. data/features/message_detection/W0733.feature +3 -0
  35. data/features/message_detection/W0734.feature +4 -0
  36. data/features/message_detection/W0735.feature +4 -0
  37. data/features/message_detection/W0745.feature +132 -0
  38. data/features/message_detection/W0780.feature +68 -0
  39. data/features/message_detection/W0783.feature +95 -0
  40. data/features/message_detection/W0792.feature +124 -0
  41. data/features/message_detection/W0793.feature +153 -0
  42. data/features/message_detection/W0794.feature +90 -0
  43. data/features/message_detection/W0830.feature +65 -0
  44. data/features/message_detection/W0833.feature +220 -0
  45. data/features/message_detection/W0834.feature +189 -0
  46. data/features/message_detection/W1026.feature +105 -0
  47. data/features/message_detection/W1031.feature +17 -34
  48. data/features/message_detection/W1039.feature +268 -0
  49. data/features/message_detection/W1047.feature +163 -0
  50. data/features/message_detection/W1066.feature +1 -0
  51. data/features/message_detection/W1067.feature +1 -0
  52. data/features/message_detection/W1068.feature +1 -0
  53. data/features/message_detection/W1069.feature +5 -0
  54. data/features/message_detection/W1070.feature +5 -0
  55. data/features/message_detection/W1071.feature +83 -0
  56. data/features/message_detection/W1073.feature +3 -2
  57. data/features/message_detection/W9003.feature +7 -12
  58. data/features/step_definitions/message_detection_steps.rb +4 -31
  59. data/features/support/env.rb +117 -2
  60. data/lib/adlint/c/branch.rb +0 -2
  61. data/lib/adlint/c/ctrlexpr.rb +33 -0
  62. data/lib/adlint/c/expr.rb +119 -31
  63. data/lib/adlint/c/interp.rb +44 -3
  64. data/lib/adlint/c/message.rb +1411 -29
  65. data/lib/adlint/c/object.rb +16 -2
  66. data/lib/adlint/c/option.rb +1 -0
  67. data/lib/adlint/c/parser.rb +101 -100
  68. data/lib/adlint/c/parser.y +3 -2
  69. data/lib/adlint/c/phase.rb +18 -0
  70. data/lib/adlint/c/resolver.rb +23 -0
  71. data/lib/adlint/c/syntax.rb +90 -4
  72. data/lib/adlint/c/type.rb +177 -110
  73. data/lib/adlint/cpp/macro.rb +4 -4
  74. data/lib/adlint/version.rb +2 -2
  75. data/share/demo/bad_include/test/"1/".h +0 -0
  76. data/share/doc/developers_guide_ja.html +3 -3
  77. data/share/doc/developers_guide_ja.texi +1 -1
  78. data/share/doc/users_guide_en.html +467 -506
  79. data/share/doc/users_guide_en.texi +95 -125
  80. data/share/doc/users_guide_ja.html +471 -518
  81. data/share/doc/users_guide_ja.texi +95 -133
  82. data/spec/spec_helper.rb +6 -0
  83. metadata +37 -10
@@ -0,0 +1,105 @@
1
+ Feature: W1026
2
+
3
+ W1026 detects that type of an argument is incomplete.
4
+
5
+ Scenario: incomplete struct type as an argument
6
+ Given a target source named "W1026.c" with:
7
+ """
8
+ extern struct st s;
9
+ extern void foo(struct st);
10
+
11
+ void bar(void)
12
+ {
13
+ foo(s); /* W1026 */
14
+ }
15
+ """
16
+ When I successfully run `adlint W1026.c` on noarch
17
+ Then the output should exactly match with:
18
+ | mesg | line | column |
19
+ | W0118 | 1 | 18 |
20
+ | W0118 | 2 | 13 |
21
+ | W0117 | 4 | 6 |
22
+ | W0493 | 6 | 8 |
23
+ | W1026 | 6 | 9 |
24
+ | W0628 | 4 | 6 |
25
+
26
+ Scenario: incomplete typedef-ed struct type as an argument
27
+ Given a target source named "W1026.c" with:
28
+ """
29
+ typedef struct st st_t;
30
+
31
+ extern st_t s;
32
+ extern void foo(st_t);
33
+
34
+ void bar(void)
35
+ {
36
+ foo(s); /* W1026 */
37
+ }
38
+ """
39
+ When I successfully run `adlint W1026.c` on noarch
40
+ Then the output should exactly match with:
41
+ | mesg | line | column |
42
+ | W0118 | 3 | 13 |
43
+ | W0625 | 1 | 19 |
44
+ | W0118 | 4 | 13 |
45
+ | W0117 | 6 | 6 |
46
+ | W0493 | 8 | 8 |
47
+ | W1026 | 8 | 9 |
48
+ | W0628 | 6 | 6 |
49
+
50
+ Scenario: complete struct type as an argument
51
+ Given a target source named "W1026.c" with:
52
+ """
53
+ typedef struct {
54
+ int i;
55
+ } st_t;
56
+
57
+ extern st_t s;
58
+ extern void foo(st_t);
59
+
60
+ void bar(void)
61
+ {
62
+ foo(s); /* OK */
63
+ }
64
+ """
65
+ When I successfully run `adlint W1026.c` on noarch
66
+ Then the output should exactly match with:
67
+ | mesg | line | column |
68
+ | W0118 | 5 | 13 |
69
+ | W0625 | 3 | 3 |
70
+ | W0118 | 6 | 13 |
71
+ | W0117 | 8 | 6 |
72
+ | W0493 | 10 | 8 |
73
+ | W0628 | 8 | 6 |
74
+
75
+ Scenario: multiple incomplete typed arguments
76
+ Given a target source named "W1026.c" with:
77
+ """
78
+ typedef struct st st_t;
79
+ typedef enum en en_t;
80
+
81
+ extern st_t s;
82
+ extern en_t e;
83
+ extern void foo(st_t, int, en_t);
84
+
85
+ void bar(void)
86
+ {
87
+ foo(s, 0, e); /* two W1026 */
88
+ }
89
+ """
90
+ When I successfully run `adlint W1026.c` on noarch
91
+ Then the output should exactly match with:
92
+ | mesg | line | column |
93
+ | W0118 | 4 | 13 |
94
+ | W0625 | 1 | 19 |
95
+ | W0118 | 5 | 13 |
96
+ | W0625 | 2 | 17 |
97
+ | W0737 | 5 | 13 |
98
+ | W0118 | 6 | 13 |
99
+ | W0117 | 8 | 6 |
100
+ | W0493 | 10 | 8 |
101
+ | W1026 | 10 | 9 |
102
+ | W1026 | 10 | 15 |
103
+ | W0628 | 8 | 6 |
104
+
105
+ # vim:ts=2:sw=2:sts=2:et:
@@ -14,8 +14,7 @@ Feature: W1031
14
14
  }
15
15
  """
16
16
  When I successfully run `adlint W1031.c` on noarch
17
- Then the output should not match with /3:.*:W1031/
18
- And the output should exactly match with:
17
+ Then the output should exactly match with:
19
18
  | mesg | line | column |
20
19
  | W1075 | 3 | 5 |
21
20
  | W0104 | 3 | 14 |
@@ -33,8 +32,7 @@ Feature: W1031
33
32
  }
34
33
  """
35
34
  When I successfully run `adlint W1031.c` on noarch
36
- Then the output should not match with /3:.*:W1031/
37
- And the output should exactly match with:
35
+ Then the output should exactly match with:
38
36
  | mesg | line | column |
39
37
  | W0118 | 1 | 12 |
40
38
  | W0104 | 3 | 14 |
@@ -51,8 +49,7 @@ Feature: W1031
51
49
  }
52
50
  """
53
51
  When I successfully run `adlint W1031.c` on noarch
54
- Then the output should not match with /3:.*:W1031/
55
- And the output should exactly match with:
52
+ Then the output should exactly match with:
56
53
  | mesg | line | column |
57
54
  | W0118 | 1 | 5 |
58
55
  | W0104 | 3 | 14 |
@@ -87,8 +84,7 @@ Feature: W1031
87
84
  }
88
85
  """
89
86
  When I successfully run `adlint W1031.c` on noarch
90
- Then the output should not match with /3:.*:W1031/
91
- And the output should exactly match with:
87
+ Then the output should exactly match with:
92
88
  | mesg | line | column |
93
89
  | W0118 | 1 | 5 |
94
90
  | W0104 | 3 | 21 |
@@ -105,8 +101,7 @@ Feature: W1031
105
101
  }
106
102
  """
107
103
  When I successfully run `adlint W1031.c` on noarch
108
- Then the output should match with /3:.*:W1031/
109
- And the output should exactly match with:
104
+ Then the output should exactly match with:
110
105
  | mesg | line | column |
111
106
  | W1031 | 3 | 12 |
112
107
  | W1075 | 3 | 12 |
@@ -125,8 +120,7 @@ Feature: W1031
125
120
  }
126
121
  """
127
122
  When I successfully run `adlint W1031.c` on noarch
128
- Then the output should match with /3:.*:W1031/
129
- And the output should exactly match with:
123
+ Then the output should exactly match with:
130
124
  | mesg | line | column |
131
125
  | W0118 | 1 | 12 |
132
126
  | W1031 | 3 | 12 |
@@ -141,8 +135,7 @@ Feature: W1031
141
135
  int i = 0; /* OK */
142
136
  """
143
137
  When I successfully run `adlint W1031.c` on noarch
144
- Then the output should not match with /2:.*:W1031/
145
- And the output should exactly match with:
138
+ Then the output should exactly match with:
146
139
  | mesg | line | column |
147
140
  | W0118 | 1 | 12 |
148
141
 
@@ -154,8 +147,7 @@ Feature: W1031
154
147
  extern int i; /* OK */
155
148
  """
156
149
  When I successfully run `adlint W1031.c` on noarch
157
- Then the output should not match with /2:.*:W1031/
158
- And the output should exactly match with:
150
+ Then the output should exactly match with:
159
151
  | mesg | line | column |
160
152
  | W0117 | 1 | 5 |
161
153
  | W0118 | 2 | 12 |
@@ -168,8 +160,7 @@ Feature: W1031
168
160
  extern int i = 0; /* W1031 */
169
161
  """
170
162
  When I successfully run `adlint W1031.c` on noarch
171
- Then the output should match with /2:.*:W1031/
172
- And the output should exactly match with:
163
+ Then the output should exactly match with:
173
164
  | mesg | line | column |
174
165
  | W1031 | 2 | 12 |
175
166
  | W1075 | 2 | 12 |
@@ -182,8 +173,7 @@ Feature: W1031
182
173
  static int i = 0; /* W1031 */
183
174
  """
184
175
  When I successfully run `adlint W1031.c` on noarch
185
- Then the output should match with /2:.*:W1031/
186
- And the output should exactly match with:
176
+ Then the output should exactly match with:
187
177
  | mesg | line | column |
188
178
  | W0118 | 1 | 12 |
189
179
  | W1031 | 2 | 12 |
@@ -199,8 +189,7 @@ Feature: W1031
199
189
  int foo(long); /* OK */
200
190
  """
201
191
  When I successfully run `adlint W1031.c` on noarch
202
- Then the output should not match with /5:.*:W1031/
203
- And the output should exactly match with:
192
+ Then the output should exactly match with:
204
193
  | mesg | line | column |
205
194
  | W1076 | 1 | 12 |
206
195
  | W0104 | 1 | 21 |
@@ -220,8 +209,7 @@ Feature: W1031
220
209
  int foo(long); /* OK */
221
210
  """
222
211
  When I successfully run `adlint W1031.c` on noarch
223
- Then the output should not match with /5:.*:W1031/
224
- And the output should exactly match with:
212
+ Then the output should exactly match with:
225
213
  | mesg | line | column |
226
214
  | W0117 | 1 | 12 |
227
215
  | W0104 | 1 | 21 |
@@ -240,8 +228,7 @@ Feature: W1031
240
228
  int foo(long); /* OK */
241
229
  """
242
230
  When I successfully run `adlint W1031.c` on noarch
243
- Then the output should not match with /5:.*:W1031/
244
- And the output should exactly match with:
231
+ Then the output should exactly match with:
245
232
  | mesg | line | column |
246
233
  | W0117 | 1 | 5 |
247
234
  | W0104 | 1 | 14 |
@@ -260,8 +247,7 @@ Feature: W1031
260
247
  static int foo(long); /* W1031 */
261
248
  """
262
249
  When I successfully run `adlint W1031.c` on noarch
263
- Then the output should match with /5:.*:W1031/
264
- And the output should exactly match with:
250
+ Then the output should exactly match with:
265
251
  | mesg | line | column |
266
252
  | W0117 | 1 | 5 |
267
253
  | W0104 | 1 | 14 |
@@ -281,8 +267,7 @@ Feature: W1031
281
267
  extern int foo(long); /* OK */
282
268
  """
283
269
  When I successfully run `adlint W1031.c` on noarch
284
- Then the output should not match with /5:.*:W1031/
285
- And the output should exactly match with:
270
+ Then the output should exactly match with:
286
271
  | mesg | line | column |
287
272
  | W0117 | 1 | 5 |
288
273
  | W0104 | 1 | 14 |
@@ -301,8 +286,7 @@ Feature: W1031
301
286
  extern int foo(long l); /* W1031 */
302
287
  """
303
288
  When I successfully run `adlint W1031.c` on noarch
304
- Then the output should match with /5:.*:W1031/
305
- And the output should exactly match with:
289
+ Then the output should exactly match with:
306
290
  | mesg | line | column |
307
291
  | W1076 | 1 | 12 |
308
292
  | W0104 | 1 | 21 |
@@ -322,8 +306,7 @@ Feature: W1031
322
306
  static int foo(long); /* W1031 */
323
307
  """
324
308
  When I successfully run `adlint W1031.c` on noarch
325
- Then the output should match with /5:.*:W1031/
326
- And the output should exactly match with:
309
+ Then the output should exactly match with:
327
310
  | mesg | line | column |
328
311
  | W0117 | 1 | 12 |
329
312
  | W0104 | 1 | 21 |
@@ -0,0 +1,268 @@
1
+ Feature: W1039
2
+
3
+ W1039 detects that an `ll' length-modifier is found in *printf or *scanf
4
+ function call.
5
+
6
+ Scenario: an `ll' in printf function call
7
+ Given a target source named "W1039.c" with:
8
+ """
9
+ #include <stdio.h>
10
+
11
+ void foo(long long ll)
12
+ {
13
+ printf("%lld", ll); /* W1039 */
14
+ }
15
+ """
16
+ When I successfully run `adlint W1039.c` on noarch
17
+ Then the output should exactly match with:
18
+ | mesg | line | column |
19
+ | W0117 | 3 | 6 |
20
+ | W1039 | 5 | 12 |
21
+ | W0104 | 3 | 20 |
22
+ | W1073 | 5 | 11 |
23
+ | W0834 | 3 | 10 |
24
+ | W0947 | 5 | 12 |
25
+ | W0628 | 3 | 6 |
26
+
27
+ Scenario: an `ll' in scanf function call
28
+ Given a target source named "W1039.c" with:
29
+ """
30
+ #include <stdio.h>
31
+
32
+ void foo(void)
33
+ {
34
+ long long ll = 0;
35
+ scanf("%lld", &ll); /* W1039 */
36
+ }
37
+ """
38
+ When I successfully run `adlint W1039.c` on noarch
39
+ Then the output should exactly match with:
40
+ | mesg | line | column |
41
+ | W0117 | 3 | 6 |
42
+ | W1039 | 6 | 11 |
43
+ | W1073 | 6 | 10 |
44
+ | W0834 | 5 | 5 |
45
+ | W0947 | 6 | 11 |
46
+ | W0628 | 3 | 6 |
47
+
48
+ Scenario: an `ll' with one of conversion-specifiers in printf function call
49
+ Given a target source named "W1039.c" with:
50
+ """
51
+ #include <stdio.h>
52
+
53
+ void foo(int i, long long ll, unsigned long ul)
54
+ {
55
+ printf("%d %lld %lu", i, ll, ul); /* W1039 */
56
+ }
57
+ """
58
+ When I successfully run `adlint W1039.c` on noarch
59
+ Then the output should exactly match with:
60
+ | mesg | line | column |
61
+ | W0117 | 3 | 6 |
62
+ | W1039 | 5 | 12 |
63
+ | W0104 | 3 | 14 |
64
+ | W0104 | 3 | 27 |
65
+ | W0104 | 3 | 45 |
66
+ | W1073 | 5 | 11 |
67
+ | W0834 | 3 | 17 |
68
+ | W0947 | 5 | 12 |
69
+ | W0628 | 3 | 6 |
70
+
71
+ Scenario: an `ll' with one of conversion-specifiers in scanf function call
72
+ Given a target source named "W1039.c" with:
73
+ """
74
+ #include <stdio.h>
75
+
76
+ void foo(void)
77
+ {
78
+ int i = 0;
79
+ long long ll = 0;
80
+ unsigned long ul = 0U;
81
+ scanf("%d %lld %lu", &i, &ll, &ul); /* W1039 */
82
+ }
83
+ """
84
+ When I successfully run `adlint W1039.c` on noarch
85
+ Then the output should exactly match with:
86
+ | mesg | line | column |
87
+ | W0117 | 3 | 6 |
88
+ | W1039 | 8 | 11 |
89
+ | W1073 | 8 | 10 |
90
+ | W0834 | 6 | 5 |
91
+ | W0947 | 8 | 11 |
92
+ | W0628 | 3 | 6 |
93
+
94
+ Scenario: an `ll' with conversion-specifier `i' in printf function call
95
+ Given a target source named "W1039.c" with:
96
+ """
97
+ #include <stdio.h>
98
+
99
+ void foo(long long ll)
100
+ {
101
+ printf("%lli", ll); /* W1039 */
102
+ }
103
+ """
104
+ When I successfully run `adlint W1039.c` on noarch
105
+ Then the output should exactly match with:
106
+ | mesg | line | column |
107
+ | W0117 | 3 | 6 |
108
+ | W1039 | 5 | 12 |
109
+ | W0104 | 3 | 20 |
110
+ | W1073 | 5 | 11 |
111
+ | W0834 | 3 | 10 |
112
+ | W0947 | 5 | 12 |
113
+ | W0628 | 3 | 6 |
114
+
115
+ Scenario: an `ll' with conversion-specifier `o' in printf function call
116
+ Given a target source named "W1039.c" with:
117
+ """
118
+ #include <stdio.h>
119
+
120
+ void foo(unsigned long long ull)
121
+ {
122
+ printf("%llo", ull); /* W1039 */
123
+ }
124
+ """
125
+ When I successfully run `adlint W1039.c` on noarch
126
+ Then the output should exactly match with:
127
+ | mesg | line | column |
128
+ | W0117 | 3 | 6 |
129
+ | W1039 | 5 | 12 |
130
+ | W0104 | 3 | 29 |
131
+ | W1073 | 5 | 11 |
132
+ | W0834 | 3 | 10 |
133
+ | W0947 | 5 | 12 |
134
+ | W0628 | 3 | 6 |
135
+
136
+ Scenario: an `ll' with conversion-specifier `u' in printf function call
137
+ Given a target source named "W1039.c" with:
138
+ """
139
+ #include <stdio.h>
140
+
141
+ void foo(unsigned long long ull)
142
+ {
143
+ printf("%llu", ull); /* W1039 */
144
+ }
145
+ """
146
+ When I successfully run `adlint W1039.c` on noarch
147
+ Then the output should exactly match with:
148
+ | mesg | line | column |
149
+ | W0117 | 3 | 6 |
150
+ | W1039 | 5 | 12 |
151
+ | W0104 | 3 | 29 |
152
+ | W1073 | 5 | 11 |
153
+ | W0834 | 3 | 10 |
154
+ | W0947 | 5 | 12 |
155
+ | W0628 | 3 | 6 |
156
+
157
+ Scenario: an `ll' with conversion-specifier `x' in printf function call
158
+ Given a target source named "W1039.c" with:
159
+ """
160
+ #include <stdio.h>
161
+
162
+ void foo(unsigned long long ull)
163
+ {
164
+ printf("%llx", ull); /* W1039 */
165
+ }
166
+ """
167
+ When I successfully run `adlint W1039.c` on noarch
168
+ Then the output should exactly match with:
169
+ | mesg | line | column |
170
+ | W0117 | 3 | 6 |
171
+ | W1039 | 5 | 12 |
172
+ | W0104 | 3 | 29 |
173
+ | W1073 | 5 | 11 |
174
+ | W0834 | 3 | 10 |
175
+ | W0947 | 5 | 12 |
176
+ | W0628 | 3 | 6 |
177
+
178
+ Scenario: an `ll' with conversion-specifier `X' in printf function call
179
+ Given a target source named "W1039.c" with:
180
+ """
181
+ #include <stdio.h>
182
+
183
+ void foo(unsigned long long ull)
184
+ {
185
+ printf("%llX", ull); /* W1039 */
186
+ }
187
+ """
188
+ When I successfully run `adlint W1039.c` on noarch
189
+ Then the output should exactly match with:
190
+ | mesg | line | column |
191
+ | W0117 | 3 | 6 |
192
+ | W1039 | 5 | 12 |
193
+ | W0104 | 3 | 29 |
194
+ | W1073 | 5 | 11 |
195
+ | W0834 | 3 | 10 |
196
+ | W0947 | 5 | 12 |
197
+ | W0628 | 3 | 6 |
198
+
199
+ Scenario: an `ll' with conversion-specifier `d' in fprintf function call
200
+ Given a target source named "W1039.c" with:
201
+ """
202
+ #include <stdio.h>
203
+
204
+ void foo(long long ll)
205
+ {
206
+ fprintf(stdout, "%lld", ll); /* W1039 */
207
+ }
208
+ """
209
+ When I successfully run `adlint W1039.c` on noarch
210
+ Then the output should exactly match with:
211
+ | mesg | line | column |
212
+ | W0117 | 3 | 6 |
213
+ | W1039 | 5 | 21 |
214
+ | W0104 | 3 | 20 |
215
+ | W1073 | 5 | 12 |
216
+ | W0834 | 3 | 10 |
217
+ | W0947 | 5 | 21 |
218
+ | W0628 | 3 | 6 |
219
+
220
+ Scenario: multiple `ll' in printf function call
221
+ Given a target source named "W1039.c" with:
222
+ """
223
+ #include <stdio.h>
224
+
225
+ void foo(long long ll, unsigned long long ull)
226
+ {
227
+ printf("%lld %llu", ll, ull); /* W1039 */
228
+ }
229
+ """
230
+ When I successfully run `adlint W1039.c` on noarch
231
+ Then the output should exactly match with:
232
+ | mesg | line | column |
233
+ | W0117 | 3 | 6 |
234
+ | W1039 | 5 | 12 |
235
+ | W1039 | 5 | 12 |
236
+ | W0104 | 3 | 20 |
237
+ | W0104 | 3 | 43 |
238
+ | W1073 | 5 | 11 |
239
+ | W0834 | 3 | 10 |
240
+ | W0834 | 3 | 24 |
241
+ | W0947 | 5 | 12 |
242
+ | W0628 | 3 | 6 |
243
+
244
+ Scenario: multiple `ll' in scanf function call
245
+ Given a target source named "W1039.c" with:
246
+ """
247
+ #include <stdio.h>
248
+
249
+ void foo(void)
250
+ {
251
+ long long ll = 0;
252
+ unsigned long long ull = 0U;
253
+ scanf("%lld %llu", &ll, &ull); /* W1039 */
254
+ }
255
+ """
256
+ When I successfully run `adlint W1039.c` on noarch
257
+ Then the output should exactly match with:
258
+ | mesg | line | column |
259
+ | W0117 | 3 | 6 |
260
+ | W1039 | 7 | 11 |
261
+ | W1039 | 7 | 11 |
262
+ | W1073 | 7 | 10 |
263
+ | W0834 | 5 | 5 |
264
+ | W0834 | 6 | 5 |
265
+ | W0947 | 7 | 11 |
266
+ | W0628 | 3 | 6 |
267
+
268
+ # vim:ts=2:sw=2:sts=2:et: