adlint 2.6.2 → 2.6.10

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog CHANGED
@@ -1,3 +1,152 @@
1
+ Thu Nov 8 13:01:03 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
2
+
3
+ * release.ga : 2.6.10
4
+ - Fix code checks so that duplicative messages of the same ID at the
5
+ same location can be unique till the function step-in analysis is
6
+ supported.
7
+ - Fix W1069 detection to output a warning message at correct location
8
+ when an incomplete if-else statements chain appears in a complete
9
+ if-else-statement.
10
+ - Fix W0708 detection not to warn when an address of the controlling
11
+ variable is passes to a function in the controlling part of
12
+ for-statement.
13
+ - Fix W0534, W0585, W0611 and w0708 detections to correctly deduct
14
+ the controlling variable.
15
+ - Add missing notification of the controlling expression value
16
+ reference.
17
+ - Fix W0460 detection to output outermost variable name when the
18
+ referencing variable is an array element or a member of struct or
19
+ union.
20
+
21
+ Wed Nov 7 15:17:28 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
22
+
23
+ * release.rc : 2.6.9
24
+ - Fix W0460 detection to output outermost variable name when the
25
+ referencing variable is an array element or a member of struct or
26
+ union.
27
+ - Add missing notification of the controlling expression value
28
+ reference and sequence-point at the end of the 1st expression
29
+ evaluation in the conditional-expression.
30
+
31
+ Wed Nov 7 14:10:54 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
32
+
33
+ * features/code_check/W0599.feature : Add W0599 specification to
34
+ reproduce a known bug.
35
+
36
+ * lib/adlint/c/interp.rb : Add missing notification of the controlling
37
+ expression value reference and sequence-point at the end of the 1st
38
+ expression evaluation in the conditional-expression.
39
+
40
+ Wed Nov 7 13:37:45 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
41
+
42
+ * lib/adlint/exam/c_builtin/c_check.rb : Fix W0460 detection to output
43
+ outermost variable name when the referencing variable is an array
44
+ element or a member of struct or union.
45
+
46
+ Wed Nov 7 11:19:41 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
47
+
48
+ * release.rc : 2.6.7
49
+ - Move value reference notification of whole controlling expression
50
+ to notification suppressible section.
51
+
52
+ Wed Nov 7 11:15:59 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
53
+
54
+ * features/code_check/W0599.feature : Add W0599 specification to
55
+ reproduce a known bug.
56
+
57
+ * lib/adlint/c/ctrlexpr.rb : Move value reference notification of whole
58
+ controlling expression to notification suppressible section.
59
+
60
+ Wed Nov 7 10:01:25 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
61
+
62
+ * release.rc : 2.6.5
63
+ - Add missing sequence-point notification after referencing value of
64
+ whole controlling expression in the controlling-statement.
65
+
66
+ Wed Nov 7 09:57:52 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
67
+
68
+ * features/code_check/W0599.feature : Add W0599 specification to
69
+ reproduce a known bug.
70
+
71
+ * lib/adlint/c/interp.rb : Add missing sequence-point notification
72
+ after referencing value of whole controlling expression in the
73
+ controlling-statement.
74
+
75
+ Tue Nov 6 16:48:25 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
76
+
77
+ * release.rc : 2.6.3
78
+ - Fix code checks so that duplicative messages of the same ID at the
79
+ same location can be unique till the function step-in analysis is
80
+ supported.
81
+ - Fix W1069 detection to output a warning message at correct location
82
+ when an incomplete if-else statements chain appears in a complete
83
+ if-else-statement.
84
+ - Fix W0708 detection not to warn when an address of the controlling
85
+ variable is passes to a function in the controlling part of
86
+ for-statement.
87
+ - Fix W0534, W0585, W0611 and w0708 detections to correctly deduct
88
+ the controlling variable.
89
+ - Add missing notification of the controlling expression value
90
+ reference.
91
+
92
+ Tue Nov 6 16:17:03 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
93
+
94
+ * features/code_check/W1073.feature : Add W1073 specification to
95
+ reproduce a known bug.
96
+
97
+ * lib/adlint/c/interp.rb : Add missing notification of the controlling
98
+ expression value reference.
99
+ * lib/adlint/c/ctrlexpr.rb : Ditto.
100
+
101
+ Tue Nov 6 13:35:28 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
102
+
103
+ * features/code_check/W0611.feature : Add W0611 specification.
104
+ * MANIFEST : Ditto.
105
+
106
+ * lib/adlint/exam/c_builtin/c_check.rb : Fix W0611 detection to
107
+ correctly deduct controlling variable of the iteration-statement.
108
+
109
+ Tue Nov 6 11:46:49 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
110
+
111
+ * features/code_check/W0534.feature : Add W0534 specification.
112
+ * MANIFEST : Ditto.
113
+
114
+ * lib/adlint/exam/c_builtin/c_check.rb : Fix W0534 detection not to
115
+ warn about const variable appears in the controlling expression.
116
+
117
+ Tue Nov 6 10:57:45 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
118
+
119
+ * features/code_check/W0585.feature : Add W0585 specification.
120
+ * MANIFEST : Ditto.
121
+
122
+ * lib/adlint/exam/c_builtin/c_check.rb : Fix W0585 detection not to
123
+ warn about const variable appears in the controlling expression.
124
+
125
+ Mon Nov 5 15:17:58 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
126
+
127
+ * features/code_check/W0708.feature : Add W0708 specification.
128
+ * MANIFEST : Ditto.
129
+
130
+ * lib/adlint/exam/c_builtin/c_check.rb : Fix W0708 detection not to
131
+ warn when an address of the controlling variable is passes to a
132
+ function in the controlling part of for-statement.
133
+
134
+ Fri Nov 2 17:21:20 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
135
+
136
+ * features/code_check/W1069.feature : Add W1069 specification to
137
+ reproduce a known bug.
138
+
139
+ * lib/adlint/exam/c_builtin/c_check_shima.rb : Fix W1069 detection to
140
+ output a warning message at correct location when an incomplete
141
+ if-else statements chain appears in a complete if-else-statement.
142
+
143
+ Thu Nov 1 17:17:10 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
144
+
145
+ * lib/adlint/exam/c_builtin/c_check.rb : Fix code checks so that
146
+ duplicative messages of the same ID at the same location can be
147
+ unique till the function step-in analysis is supported.
148
+ * lib/adlint/exam/c_builtin/c_check_shima.rb : Ditto.
149
+
1
150
  Wed Oct 31 10:16:44 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
2
151
 
3
152
  * release.ga : 2.6.2
data/MANIFEST CHANGED
@@ -188,6 +188,7 @@ features/code_check/W0254.feature
188
188
  features/code_check/W0425.feature
189
189
  features/code_check/W0431.feature
190
190
  features/code_check/W0432.feature
191
+ features/code_check/W0460.feature
191
192
  features/code_check/W0477.feature
192
193
  features/code_check/W0478.feature
193
194
  features/code_check/W0479.feature
@@ -206,12 +207,15 @@ features/code_check/W0499.feature
206
207
  features/code_check/W0500.feature
207
208
  features/code_check/W0501.feature
208
209
  features/code_check/W0502.feature
210
+ features/code_check/W0534.feature
209
211
  features/code_check/W0573.feature
210
212
  features/code_check/W0582.feature
211
213
  features/code_check/W0583.feature
212
214
  features/code_check/W0584.feature
215
+ features/code_check/W0585.feature
213
216
  features/code_check/W0599.feature
214
217
  features/code_check/W0606.feature
218
+ features/code_check/W0611.feature
215
219
  features/code_check/W0635.feature
216
220
  features/code_check/W0641.feature
217
221
  features/code_check/W0643.feature
@@ -238,6 +242,7 @@ features/code_check/W0700.feature
238
242
  features/code_check/W0703.feature
239
243
  features/code_check/W0705.feature
240
244
  features/code_check/W0707.feature
245
+ features/code_check/W0708.feature
241
246
  features/code_check/W0711.feature
242
247
  features/code_check/W0712.feature
243
248
  features/code_check/W0713.feature
data/NEWS CHANGED
@@ -21,6 +21,26 @@
21
21
 
22
22
  ++
23
23
 
24
+ === \AdLint 2.6.10 is released (2012-11-08)
25
+
26
+ ==== Changes since the 2.6.2 release
27
+
28
+ * Fix code checks so that duplicative messages of the same ID at the same
29
+ location can be unique till the function step-in analysis is supported
30
+ * Fix W1069 detection to output a warning message at correct location when an
31
+ incomplete if-else statements chain appears in a complete if-else-statement
32
+ * Fix W0708 detection not to warn when an address of the controlling variable
33
+ is passes to a function in the controlling part of for-statement
34
+ * Fix W0534, W0585, W0611 and w0708 detections to correctly deduct the
35
+ controlling variable
36
+ * Add missing notification of the controlling expression value reference
37
+ * Fix W0460 detection to output outermost variable name when the referencing
38
+ variable is an array element or a member of struct or union
39
+
40
+ See the file
41
+ {ChangeLog}[http://adlint.sourceforge.net/pmwiki/upload.d/Main/ChangeLog]
42
+ for more details.
43
+
24
44
  === \AdLint 2.6.2 is released (2012-10-31)
25
45
 
26
46
  ==== Changes since the 2.6.0 release
@@ -40,10 +60,6 @@
40
60
  * Fix the interpreter to place sequence-point at the end of the
41
61
  return-statement evaluation
42
62
 
43
- See the file
44
- {ChangeLog}[http://adlint.sourceforge.net/pmwiki/upload.d/Main/ChangeLog]
45
- for more details.
46
-
47
63
  === \AdLint 2.6.0 is released (2012-10-22)
48
64
 
49
65
  ==== Changes since the 2.4.10 release
@@ -49,7 +49,7 @@
49
49
  # - "ERR:X99"
50
50
  # format: "Your custom message for the error of E9999."
51
51
 
52
- version: "2.6.2"
52
+ version: "2.6.10"
53
53
 
54
54
  message_definition:
55
55
  W0001:
@@ -49,7 +49,7 @@
49
49
  # - "ERR:X99"
50
50
  # format: "Your custom message for the error of E9999."
51
51
 
52
- version: "2.6.2"
52
+ version: "2.6.10"
53
53
 
54
54
  message_definition:
55
55
  W0001:
@@ -49,7 +49,7 @@
49
49
  # - "ERR:X99"
50
50
  # format: "Your custom message for the error of E9999."
51
51
 
52
- version: "2.6.2"
52
+ version: "2.6.10"
53
53
 
54
54
  message_definition:
55
55
  X0001:
@@ -49,7 +49,7 @@
49
49
  # - "ERR:X99"
50
50
  # format: "Your custom message for the error of E9999."
51
51
 
52
- version: "2.6.2"
52
+ version: "2.6.10"
53
53
 
54
54
  message_definition:
55
55
  X0001:
@@ -0,0 +1,27 @@
1
+ Feature: W0460
2
+
3
+ W0460 detects that a value of the variable is not possibly initialized.
4
+
5
+ Scenario: array element is not possibly initialized
6
+ Given a target source named "fixture.c" with:
7
+ """
8
+ static int foo(void)
9
+ {
10
+ int a[5];
11
+
12
+ if (a[1] == 0) { /* W0459 */
13
+ a[0] = 0;
14
+ }
15
+
16
+ return a[0]; /* W0460 */
17
+ }
18
+ """
19
+ When I successfully run `adlint fixture.c` on noarch
20
+ Then the output should exactly match with:
21
+ | mesg | line | column |
22
+ | W1076 | 1 | 12 |
23
+ | W0459 | 5 | 14 |
24
+ | W0460 | 9 | 13 |
25
+ | W0629 | 1 | 12 |
26
+ | W0950 | 3 | 11 |
27
+ | W0628 | 1 | 12 |
@@ -0,0 +1,73 @@
1
+ Feature: W0534
2
+
3
+ W0534 detects that a controlling variable of for-statement is not initialized
4
+ in the 1st part of for-statement.
5
+
6
+ Scenario: the 1st part of for-statement does not initialize the controlling
7
+ variable
8
+ Given a target source named "fixture.c" with:
9
+ """
10
+ static int bar(int *);
11
+
12
+ static int foo(const int num)
13
+ {
14
+ int i = 0, j;
15
+ for (j = 0; (bar(&i)) && (i < num); i++) { /* W0534 */
16
+ j++;
17
+ }
18
+ return j;
19
+ }
20
+ """
21
+ When I successfully run `adlint fixture.c` on noarch
22
+ Then the output should exactly match with:
23
+ | mesg | line | column |
24
+ | W1076 | 3 | 12 |
25
+ | W0534 | 6 | 10 |
26
+ | W0629 | 3 | 12 |
27
+ | W0425 | 5 | 16 |
28
+ | W0628 | 3 | 12 |
29
+
30
+ Scenario: the 1st part of for-statement is empty
31
+ Given a target source named "fixture.c" with:
32
+ """
33
+ static int bar(int *);
34
+
35
+ static int foo(const int num)
36
+ {
37
+ int i = 0, j = 0;
38
+ for (; (bar(&i)) && (i < num); i++) { /* W0534 */
39
+ j++;
40
+ }
41
+ return j;
42
+ }
43
+ """
44
+ When I successfully run `adlint fixture.c` on noarch
45
+ Then the output should exactly match with:
46
+ | mesg | line | column |
47
+ | W1076 | 3 | 12 |
48
+ | W0534 | 6 | 10 |
49
+ | W0629 | 3 | 12 |
50
+ | W0425 | 5 | 16 |
51
+ | W0628 | 3 | 12 |
52
+
53
+ Scenario: the 1st part of for-statement initializes the controlling variable
54
+ Given a target source named "fixture.c" with:
55
+ """
56
+ static int bar(int *);
57
+
58
+ static int foo(const int num)
59
+ {
60
+ int i, j = 0;
61
+ for (i = 0; (bar(&i)) && (i < num); i++) { /* OK */
62
+ j++;
63
+ }
64
+ return j;
65
+ }
66
+ """
67
+ When I successfully run `adlint fixture.c` on noarch
68
+ Then the output should exactly match with:
69
+ | mesg | line | column |
70
+ | W1076 | 3 | 12 |
71
+ | W0629 | 3 | 12 |
72
+ | W0425 | 5 | 12 |
73
+ | W0628 | 3 | 12 |
@@ -0,0 +1,135 @@
1
+ Feature: W0585
2
+
3
+ W0585 detects that a controlling variable of for-statement is not updated in
4
+ the 3rd part of for-statement.
5
+
6
+ Scenario: the 3rd part of for-statement does not increment the controlling
7
+ variable
8
+ Given a target source named "fixture.c" with:
9
+ """
10
+ static int bar(int *);
11
+
12
+ static int foo(const int num)
13
+ {
14
+ int i, j = 0;
15
+ for (i = 0; (bar(&i)) && (i < num); j++) { /* W0585 */
16
+ }
17
+ return j;
18
+ }
19
+ """
20
+ When I successfully run `adlint fixture.c` on noarch
21
+ Then the output should exactly match with:
22
+ | mesg | line | column |
23
+ | W1076 | 3 | 12 |
24
+ | W0585 | 6 | 42 |
25
+ | W0629 | 3 | 12 |
26
+ | W0425 | 5 | 12 |
27
+ | W0628 | 3 | 12 |
28
+
29
+ Scenario: the 3rd part of for-statement is empty
30
+ Given a target source named "fixture.c" with:
31
+ """
32
+ static int bar(int *);
33
+
34
+ static int foo(const int num)
35
+ {
36
+ int i, j = 0;
37
+ for (i = 0; (bar(&i)) && (i < num); ) { /* OK */
38
+ j++;
39
+ }
40
+ return j;
41
+ }
42
+ """
43
+ When I successfully run `adlint fixture.c` on noarch
44
+ Then the output should exactly match with:
45
+ | mesg | line | column |
46
+ | W1076 | 3 | 12 |
47
+ | W0629 | 3 | 12 |
48
+ | W0425 | 5 | 12 |
49
+ | W0628 | 3 | 12 |
50
+
51
+ Scenario: the 3rd part of for-statement increments the controlling variable
52
+ Given a target source named "fixture.c" with:
53
+ """
54
+ static int bar(int *);
55
+
56
+ static int foo(const int num)
57
+ {
58
+ int i, j = 0;
59
+ for (i = 0; (bar(&i)) && (i < num); i++) { /* OK */
60
+ j++;
61
+ }
62
+ return j;
63
+ }
64
+ """
65
+ When I successfully run `adlint fixture.c` on noarch
66
+ Then the output should exactly match with:
67
+ | mesg | line | column |
68
+ | W1076 | 3 | 12 |
69
+ | W0629 | 3 | 12 |
70
+ | W0425 | 5 | 12 |
71
+ | W0628 | 3 | 12 |
72
+
73
+ Scenario: the 3rd part of c99-for-statement does not increment the
74
+ controlling variable
75
+ Given a target source named "fixture.c" with:
76
+ """
77
+ static int bar(int *);
78
+
79
+ static int foo(const int num)
80
+ {
81
+ int j = 0;
82
+ for (int i = 0; (bar(&i)) && (i < num); j++) { /* W0585 */
83
+ }
84
+ return j;
85
+ }
86
+ """
87
+ When I successfully run `adlint fixture.c` on noarch
88
+ Then the output should exactly match with:
89
+ | mesg | line | column |
90
+ | W1076 | 3 | 12 |
91
+ | W0585 | 6 | 46 |
92
+ | W0629 | 3 | 12 |
93
+ | W0628 | 3 | 12 |
94
+
95
+ Scenario: the 3rd part of c99-for-statement is empty
96
+ Given a target source named "fixture.c" with:
97
+ """
98
+ static int bar(int *);
99
+
100
+ static int foo(const int num)
101
+ {
102
+ int j = 0;
103
+ for (int i = 0; (bar(&i)) && (i < num); ) { /* OK */
104
+ j++;
105
+ }
106
+ return j;
107
+ }
108
+ """
109
+ When I successfully run `adlint fixture.c` on noarch
110
+ Then the output should exactly match with:
111
+ | mesg | line | column |
112
+ | W1076 | 3 | 12 |
113
+ | W0629 | 3 | 12 |
114
+ | W0628 | 3 | 12 |
115
+
116
+ Scenario: the 3rd part of for-statement increments the controlling variable
117
+ Given a target source named "fixture.c" with:
118
+ """
119
+ static int bar(int *);
120
+
121
+ static int foo(const int num)
122
+ {
123
+ int j = 0;
124
+ for (int i = 0; (bar(&i)) && (i < num); i++) { /* OK */
125
+ j++;
126
+ }
127
+ return j;
128
+ }
129
+ """
130
+ When I successfully run `adlint fixture.c` on noarch
131
+ Then the output should exactly match with:
132
+ | mesg | line | column |
133
+ | W1076 | 3 | 12 |
134
+ | W0629 | 3 | 12 |
135
+ | W0628 | 3 | 12 |
@@ -7,7 +7,7 @@ Feature: W0599
7
7
  Given a target source named "fixture.c" with:
8
8
  """
9
9
  extern void bar(int, int, int);
10
-
10
+
11
11
  static void foo(int a, int b, int *c)
12
12
  {
13
13
  b = (a + 1) + a++; /* W0599 */
@@ -69,3 +69,103 @@ Feature: W0599
69
69
  | W1071 | 1 | 12 |
70
70
  | W0629 | 1 | 12 |
71
71
  | W0628 | 1 | 12 |
72
+
73
+ Scenario: object-specifier as a controlling expression and updating same
74
+ variable in the branch
75
+ Given a target source named "fixture.c" with:
76
+ """
77
+ static void foo(int i)
78
+ {
79
+ if (i) {
80
+ i++; /* OK */
81
+ }
82
+ }
83
+ """
84
+ When I successfully run `adlint fixture.c` on noarch
85
+ Then the output should exactly match with:
86
+ | mesg | line | column |
87
+ | W1076 | 1 | 13 |
88
+ | W0629 | 1 | 13 |
89
+ | W0114 | 3 | 5 |
90
+ | W0628 | 1 | 13 |
91
+
92
+ Scenario: assignment-expression as a controlling expression and updating same
93
+ variable in the branch
94
+ Given a target source named "fixture.c" with:
95
+ """
96
+ extern int bar(void);
97
+
98
+ static void foo(int i)
99
+ {
100
+ while (i = bar()) {
101
+ i++; /* OK */
102
+ }
103
+ }
104
+ """
105
+ When I successfully run `adlint fixture.c` on noarch
106
+ Then the output should exactly match with:
107
+ | mesg | line | column |
108
+ | W0118 | 1 | 12 |
109
+ | W1076 | 3 | 13 |
110
+ | W0629 | 3 | 13 |
111
+ | W0108 | 5 | 14 |
112
+ | W0114 | 5 | 5 |
113
+ | W0628 | 3 | 13 |
114
+
115
+ Scenario: assignment-expression as a controlling expression and updating same
116
+ variable in the branch
117
+ Given a target source named "fixture.c" with:
118
+ """
119
+ extern int bar(int);
120
+
121
+ static void foo(void)
122
+ {
123
+ int i;
124
+ for (i = 0; i = bar(i); ) {
125
+ i++; /* OK */
126
+ }
127
+ i++; /* OK */
128
+ }
129
+ """
130
+ When I successfully run `adlint fixture.c` on noarch
131
+ Then the output should exactly match with:
132
+ | mesg | line | column |
133
+ | W0118 | 1 | 12 |
134
+ | W1076 | 3 | 13 |
135
+ | W0708 | 7 | 10 |
136
+ | W0629 | 3 | 13 |
137
+ | W0108 | 6 | 19 |
138
+ | W0114 | 6 | 5 |
139
+ | W0628 | 3 | 13 |
140
+
141
+ Scenario: updating variable in the 1st expression of conditional-expression
142
+ Given a target source named "fixture.c" with:
143
+ """
144
+ static int foo(int i)
145
+ {
146
+ return i++ ? i : 0; /* OK */
147
+ }
148
+ """
149
+ When I successfully run `adlint fixture.c` on noarch
150
+ Then the output should exactly match with:
151
+ | mesg | line | column |
152
+ | W1076 | 1 | 12 |
153
+ | W0629 | 1 | 12 |
154
+ | W0114 | 3 | 13 |
155
+ | W0628 | 1 | 12 |
156
+
157
+ Scenario: updating variable in the 1st expression of conditional-expression
158
+ Given a target source named "fixture.c" with:
159
+ """
160
+ static int foo(int i)
161
+ {
162
+ return i++ > 0 ? i : 0; /* OK */
163
+ }
164
+ """
165
+ When I successfully run `adlint fixture.c` on noarch
166
+ Then the output should exactly match with:
167
+ | mesg | line | column |
168
+ | W1076 | 1 | 12 |
169
+ | W0629 | 1 | 12 |
170
+ | W0501 | 3 | 20 |
171
+ | W0628 | 1 | 12 |