adlint 2.6.0 → 2.6.2

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog CHANGED
@@ -1,3 +1,125 @@
1
+ Wed Oct 31 10:16:44 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
2
+
3
+ * release.ga : 2.6.2
4
+ - Fix compound-assignment-expression evaluation not to propagate
5
+ initialization status of the rhs operand.
6
+ - Fix bad traits file parser in order to parse compound pathname
7
+ strings correctly on mswin.
8
+ - Clarify W0082 message text by adding underlying type name of the
9
+ operand.
10
+ - Clarify W0578 and W0579 message texts by adding source and
11
+ destination type names of the conversion.
12
+ - Clarify W0650 message text by adding lhs type name of the
13
+ shift-expression.
14
+ - Clarify W0719 message text by adding lhs underlying type name of
15
+ the shift-expression.
16
+ - Clarify W1051 and W1052 message texts by adding type name of the
17
+ arithmetic expression.
18
+ - Fix the interpreter to place sequence-point at the end of the
19
+ return-statement evaluation.
20
+
21
+ Tue Oct 30 15:08:22 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
22
+
23
+ * release.rc : 2.6.1
24
+ - Fix compound-assignment-expression evaluation not to propagate
25
+ initialization status of the rhs operand.
26
+ - Fix bad traits file parser in order to parse compound pathname
27
+ strings correctly on mswin.
28
+ - Clarify W0082 message text by adding underlying type name of the
29
+ operand.
30
+ - Clarify W0578 and W0579 message texts by adding source and
31
+ destination type names of the conversion.
32
+ - Clarify W0650 message text by adding lhs type name of the
33
+ shift-expression.
34
+ - Clarify W0719 message text by adding lhs underlying type name of
35
+ the shift-expression.
36
+ - Clarify W1051 and W1052 message texts by adding type name of the
37
+ arithmetic expression.
38
+ - Fix the interpreter to place sequence-point at the end of the
39
+ return-statement evaluation.
40
+
41
+ Tue Oct 30 15:05:37 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
42
+
43
+ * features/code_check/W0599.feature : Add W0599 specification.
44
+ * MANIFEST : Ditto.
45
+
46
+ * lib/adlint/c/interp.rb : Fix the interpreter to place sequence-point
47
+ at the end of the return-statement evaluation.
48
+
49
+ Mon Oct 29 19:11:17 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
50
+
51
+ * lib/adlint/exam/c_builtin/c_check.rb : Clarify W1052 message text by
52
+ adding type name of the arithmetic expression.
53
+ * etc/mesg.d/c_builtin/ja_JP/messages.yml : Ditto.
54
+ * etc/mesg.d/c_builtin/en_US/messages.yml : Ditto.
55
+ * share/doc/users_guide_ja.texi : Ditto.
56
+ * share/doc/users_guide_en.texi : Ditto.
57
+
58
+ Mon Oct 29 18:56:58 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
59
+
60
+ * lib/adlint/exam/c_builtin/c_check.rb : Clarify W1051 message text by
61
+ adding type name of the arithmetic expression.
62
+ * etc/mesg.d/c_builtin/ja_JP/messages.yml : Ditto.
63
+ * etc/mesg.d/c_builtin/en_US/messages.yml : Ditto.
64
+ * share/doc/users_guide_ja.texi : Ditto.
65
+ * share/doc/users_guide_en.texi : Ditto.
66
+
67
+ Mon Oct 29 18:46:23 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
68
+
69
+ * lib/adlint/exam/c_builtin/c_check.rb : Clarify W0719 message text by
70
+ adding lhs underlying type name of the shift-expression.
71
+ * etc/mesg.d/c_builtin/ja_JP/messages.yml : Ditto.
72
+ * etc/mesg.d/c_builtin/en_US/messages.yml : Ditto.
73
+ * share/doc/users_guide_ja.texi : Ditto.
74
+ * share/doc/users_guide_en.texi : Ditto.
75
+
76
+ Mon Oct 29 18:34:18 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
77
+
78
+ * lib/adlint/exam/c_builtin/c_check.rb : Clarify W0650 message text by
79
+ adding lhs type name of the shift-expression.
80
+ * etc/mesg.d/c_builtin/ja_JP/messages.yml : Ditto.
81
+ * etc/mesg.d/c_builtin/en_US/messages.yml : Ditto.
82
+ * share/doc/users_guide_ja.texi : Ditto.
83
+ * share/doc/users_guide_en.texi : Ditto.
84
+
85
+ Mon Oct 29 17:59:15 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
86
+
87
+ * lib/adlint/exam/c_builtin/c_check.rb : Clarify W0579 message text by
88
+ adding source and destination type names of the conversion.
89
+ * etc/mesg.d/c_builtin/ja_JP/messages.yml : Ditto.
90
+ * etc/mesg.d/c_builtin/en_US/messages.yml : Ditto.
91
+ * share/doc/users_guide_ja.texi : Ditto.
92
+ * share/doc/users_guide_en.texi : Ditto.
93
+
94
+ Mon Oct 29 17:43:41 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
95
+
96
+ * lib/adlint/exam/c_builtin/c_check.rb : Clarify W0578 message text by
97
+ adding source and destination type names of the conversion.
98
+ * etc/mesg.d/c_builtin/ja_JP/messages.yml : Ditto.
99
+ * etc/mesg.d/c_builtin/en_US/messages.yml : Ditto.
100
+ * share/doc/users_guide_ja.texi : Ditto.
101
+ * share/doc/users_guide_en.texi : Ditto.
102
+
103
+ Mon Oct 29 17:14:25 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
104
+
105
+ * lib/adlint/exam/c_builtin/c_check.rb : Clarify W0082 message text by
106
+ adding underlying type name of the operand.
107
+ * etc/mesg.d/c_builtin/ja_JP/messages.yml : Ditto.
108
+ * etc/mesg.d/c_builtin/en_US/messages.yml : Ditto.
109
+ * share/doc/users_guide_ja.texi : Ditto.
110
+ * share/doc/users_guide_en.texi : Ditto.
111
+
112
+ Mon Oct 29 15:21:18 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
113
+
114
+ * lib/adlint/traits.rb : Fix bad traits file parser in order to parse
115
+ compound pathname strings correctly on mswin.
116
+ * lib/adlint/util.rb : Ditto.
117
+
118
+ Mon Oct 29 14:37:19 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
119
+
120
+ * lib/adlint/c/expr.rb : Fix compound-assignment-expression evaluation
121
+ not to propagate initialization status of the rhs operand.
122
+
1
123
  Mon Oct 22 15:02:29 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
2
124
 
3
125
  * release.ga : 2.6.0
data/MANIFEST CHANGED
@@ -210,6 +210,7 @@ features/code_check/W0573.feature
210
210
  features/code_check/W0582.feature
211
211
  features/code_check/W0583.feature
212
212
  features/code_check/W0584.feature
213
+ features/code_check/W0599.feature
213
214
  features/code_check/W0606.feature
214
215
  features/code_check/W0635.feature
215
216
  features/code_check/W0641.feature
data/NEWS CHANGED
@@ -21,6 +21,29 @@
21
21
 
22
22
  ++
23
23
 
24
+ === \AdLint 2.6.2 is released (2012-10-31)
25
+
26
+ ==== Changes since the 2.6.0 release
27
+
28
+ * Fix compound-assignment-expression evaluation not to propagate initialization
29
+ status of the rhs operand
30
+ * Fix bad traits file parser in order to parse compound pathname strings
31
+ correctly on mswin
32
+ * Clarify W0082 message text by adding underlying type name of the operand
33
+ * Clarify W0578 and W0579 message texts by adding source and destination type
34
+ names of the conversion
35
+ * Clarify W0650 message text by adding lhs type name of the shift-expression
36
+ * Clarify W0719 message text by adding lhs underlying type name of the
37
+ shift-expression
38
+ * Clarify W1051 and W1052 message texts by adding type name of the arithmetic
39
+ expression
40
+ * Fix the interpreter to place sequence-point at the end of the
41
+ return-statement evaluation
42
+
43
+ See the file
44
+ {ChangeLog}[http://adlint.sourceforge.net/pmwiki/upload.d/Main/ChangeLog]
45
+ for more details.
46
+
24
47
  === \AdLint 2.6.0 is released (2012-10-22)
25
48
 
26
49
  ==== Changes since the 2.4.10 release
@@ -36,10 +59,6 @@
36
59
  * Clarify W9003 message text by adding destination type name of the implicit
37
60
  conversion
38
61
 
39
- See the file
40
- {ChangeLog}[http://adlint.sourceforge.net/pmwiki/upload.d/Main/ChangeLog]
41
- for more details.
42
-
43
62
  === \AdLint 2.4.10 is released (2012-10-15)
44
63
 
45
64
  ==== Changes since the 2.4.6 release
data/README CHANGED
@@ -25,7 +25,7 @@
25
25
 
26
26
  \AdLint is a source code static analyzer.
27
27
 
28
- It can point out insecure or nonportable code fragments, and can measure
28
+ It can point out unreliable or nonportable code fragments, and can measure
29
29
  various quality metrics of the source code.
30
30
 
31
31
  It (currently) can analyze source code compliant with ANSI C89 / ISO C90 and
data/Rakefile CHANGED
@@ -46,7 +46,7 @@ AdLint :: Advanced Lint - An open source and free source code static analyzer
46
46
  EOS
47
47
  s.description = <<EOS
48
48
  AdLint is a source code static analyzer.
49
- It can point out insecure or nonportable code fragments, and can measure various quality metrics of the source code.
49
+ It can point out unreliable or nonportable code fragments, and can measure various quality metrics of the source code.
50
50
  It (currently) can analyze source code compliant with ANSI C89 / ISO C90 and partly ISO C99.
51
51
  EOS
52
52
 
@@ -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.0"
52
+ version: "2.6.2"
53
53
 
54
54
  message_definition:
55
55
  W0001:
@@ -295,7 +295,7 @@ message_definition:
295
295
  W0082:
296
296
  classes:
297
297
  - "UNC:X99"
298
- format: "A monadic operator `-' is used operand which the latency type is a unsigned operand."
298
+ format: "Unary operator `-' is applied to an operand whose underlying type `%s' is unsigned."
299
299
  W0084:
300
300
  classes:
301
301
  - "UNC:X99"
@@ -1931,11 +1931,11 @@ message_definition:
1931
1931
  W0578:
1932
1932
  classes:
1933
1933
  - "UNC:X99"
1934
- format: "An implicit type conversion from volatile integer type of compound expression to bigger type."
1934
+ format: "A generic integer value of the compound expression typed `%s' is implicitly converted into a new value of bigger type `%s'."
1935
1935
  W0579:
1936
1936
  classes:
1937
1937
  - "UNC:X99"
1938
- format: "Cast from compound expression of volatile integer type to bigger type."
1938
+ format: "A generic integer value of the compound expression typed `%s' is explicitly converted into a new value of bigger type `%s'."
1939
1939
  W0580:
1940
1940
  classes:
1941
1941
  - "UNC:X99"
@@ -2131,7 +2131,7 @@ message_definition:
2131
2131
  W0650:
2132
2132
  classes:
2133
2133
  - "UNC:X99"
2134
- format: "A right operand value of shift operator is much bigger than the bit size represented in left operand type. This result is undefined."
2134
+ format: "A value of the right operand in a shift expression is bigger than the bit size of the left operand type `%s'. This result is undefined."
2135
2135
  W0653:
2136
2136
  classes:
2137
2137
  - "UNC:X99"
@@ -2379,7 +2379,7 @@ message_definition:
2379
2379
  W0719:
2380
2380
  classes:
2381
2381
  - "UNC:X99"
2382
- format: "A right operand of shift operator is a constant value of the above bit field of latency type."
2382
+ format: "A value of the right operand in a shift expression is bigger than the bit size of the left operand underlying type `%s'."
2383
2383
  W0720:
2384
2384
  classes:
2385
2385
  - "UNC:X99"
@@ -2875,11 +2875,11 @@ message_definition:
2875
2875
  W1051:
2876
2876
  classes:
2877
2877
  - "UNC:X99"
2878
- format: "The result of arithmetic operation in unsigned type is going around 0 by overflow."
2878
+ format: "The result of unsigned arithmetic expression typed `%s' is going around 0 by overflow."
2879
2879
  W1052:
2880
2880
  classes:
2881
2881
  - "UNC:X99"
2882
- format: "The result of arithmetic operation in unsigned type can be going around by overflow."
2882
+ format: "The result of unsigned arithmetic expression typed `%s' can be going around by overflow."
2883
2883
  W1053:
2884
2884
  classes:
2885
2885
  - "UNC:X99"
@@ -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.0"
52
+ version: "2.6.2"
53
53
 
54
54
  message_definition:
55
55
  W0001:
@@ -295,7 +295,7 @@ message_definition:
295
295
  W0082:
296
296
  classes:
297
297
  - "UNC:X99"
298
- format: "単項演算子 `-' を潜在型が符号無しのオペランドに対して使っています。"
298
+ format: "単項演算子 `-' を符号無しの潜在型 `%s' のオペランドに対して使っています。"
299
299
  W0084:
300
300
  classes:
301
301
  - "UNC:X99"
@@ -1931,11 +1931,11 @@ message_definition:
1931
1931
  W0578:
1932
1932
  classes:
1933
1933
  - "UNC:X99"
1934
- format: "暗黙的に汎整数型の複合式からより大きな型に型変換されています。"
1934
+ format: "暗黙的に汎整数型 `%s' の複合式からより大きな型 `%s' に型変換されています。"
1935
1935
  W0579:
1936
1936
  classes:
1937
1937
  - "UNC:X99"
1938
- format: "汎整数型の複合式を、より大きな型にキャストしています。"
1938
+ format: "汎整数型 `%s' の複合式を、より大きな型 `%s' にキャストしています。"
1939
1939
  W0580:
1940
1940
  classes:
1941
1941
  - "UNC:X99"
@@ -2131,7 +2131,7 @@ message_definition:
2131
2131
  W0650:
2132
2132
  classes:
2133
2133
  - "UNC:X99"
2134
- format: "シフト演算子の右オペランドの値が左オペランドの型で表されるビット数に対して大きすぎます。結果は未定義になります。"
2134
+ format: "シフト演算子の右オペランドの値が左オペランドの型 `%s' で表されるビット数に対して大きすぎます。結果は未定義になります。"
2135
2135
  W0653:
2136
2136
  classes:
2137
2137
  - "UNC:X99"
@@ -2379,7 +2379,7 @@ message_definition:
2379
2379
  W0719:
2380
2380
  classes:
2381
2381
  - "UNC:X99"
2382
- format: "シフト演算子の右オペランドが、潜在型のビット幅以上の定数値です。"
2382
+ format: "シフト演算子の右オペランドが、潜在型 `%s' のビット幅以上の定数値です。"
2383
2383
  W0720:
2384
2384
  classes:
2385
2385
  - "UNC:X99"
@@ -2875,11 +2875,11 @@ message_definition:
2875
2875
  W1051:
2876
2876
  classes:
2877
2877
  - "UNC:X99"
2878
- format: "符号無し型での算術演算の結果は、桁あふれによって 0 を回り込みます。"
2878
+ format: "符号無し型 `%s' の算術演算結果は、桁あふれによって 0 を回り込みます。"
2879
2879
  W1052:
2880
2880
  classes:
2881
2881
  - "UNC:X99"
2882
- format: "符号無し型での算術演算の結果は、桁あふれによって 0 を回り込むことがあります。"
2882
+ format: "符号無し型 `%s' の算術演算結果は、桁あふれによって 0 を回り込むことがあります。"
2883
2883
  W1053:
2884
2884
  classes:
2885
2885
  - "UNC:X99"
@@ -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.0"
52
+ version: "2.6.2"
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.0"
52
+ version: "2.6.2"
53
53
 
54
54
  message_definition:
55
55
  X0001:
@@ -0,0 +1,71 @@
1
+ Feature: W0599
2
+
3
+ W0599 detects that value of the variable is referred and updated between
4
+ sequence-points.
5
+
6
+ Scenario: return-expression in a for-statement
7
+ Given a target source named "fixture.c" with:
8
+ """
9
+ extern void bar(int, int, int);
10
+
11
+ static void foo(int a, int b, int *c)
12
+ {
13
+ b = (a + 1) + a++; /* W0599 */
14
+ b = c[a] + c[++a]; /* W0599 */
15
+ bar(a, a++, c[a]); /* W0599 */
16
+ bar(a, a, c[a++]); /* W0599 */
17
+ a = a + b;
18
+ c[a] = a++ + b; /* W0599 */
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
+ | W0118 | 1 | 13 |
25
+ | W1076 | 3 | 13 |
26
+ | W0723 | 5 | 12 |
27
+ | W0723 | 5 | 17 |
28
+ | W0599 | 5 | 7 |
29
+ | W0422 | 6 | 10 |
30
+ | W0422 | 6 | 17 |
31
+ | W0723 | 6 | 14 |
32
+ | W0599 | 6 | 7 |
33
+ | W0422 | 7 | 18 |
34
+ | W0599 | 7 | 8 |
35
+ | W0422 | 8 | 16 |
36
+ | W0723 | 9 | 11 |
37
+ | W0422 | 10 | 6 |
38
+ | W0723 | 10 | 16 |
39
+ | W0599 | 10 | 10 |
40
+ | W0104 | 3 | 36 |
41
+ | W0629 | 3 | 13 |
42
+ | W0512 | 5 | 20 |
43
+ | W0512 | 6 | 18 |
44
+ | W0512 | 7 | 13 |
45
+ | W0512 | 8 | 18 |
46
+ | W0512 | 10 | 13 |
47
+ | W0628 | 3 | 13 |
48
+
49
+ Scenario: return-expression in a for-statement
50
+ Given a target source named "fixture.c" with:
51
+ """
52
+ static int foo(int x, int y, int z)
53
+ {
54
+ for (int i = 0; i < z; i++) { /* OK */
55
+ if (x < y) {
56
+ return i;
57
+ }
58
+ }
59
+ return 0;
60
+ }
61
+ """
62
+ When I successfully run `adlint fixture.c` on noarch
63
+ Then the output should exactly match with:
64
+ | mesg | line | column |
65
+ | W1076 | 1 | 12 |
66
+ | W0104 | 1 | 20 |
67
+ | W0104 | 1 | 27 |
68
+ | W0104 | 1 | 34 |
69
+ | W1071 | 1 | 12 |
70
+ | W0629 | 1 | 12 |
71
+ | W0628 | 1 | 12 |
@@ -49,7 +49,7 @@ module C #:nodoc:
49
49
  end
50
50
 
51
51
  def call(interpreter, funcall_expr, args)
52
- interpreter.temporary_variable(type.return_type)
52
+ interpreter.create_tempvar(type.return_type)
53
53
  end
54
54
  end
55
55