adlint 1.16.0 → 1.18.0

Sign up to get free protection for your applications and to get access to all the features.
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: