adlint 1.6.0 → 1.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. data/ChangeLog +389 -37
  2. data/INSTALL +3 -0
  3. data/MANIFEST +7 -0
  4. data/NEWS +50 -10
  5. data/etc/conf.d/i686-mingw/cinit-gcc_4.6.1.erb +1 -1
  6. data/etc/mesg.d/en_US/messages.yml +7 -7
  7. data/etc/mesg.d/ja_JP/messages.yml +4 -4
  8. data/lib/adlint/c/branch.rb +4 -4
  9. data/lib/adlint/c/code.rb +11 -13
  10. data/lib/adlint/c/enum.rb +0 -2
  11. data/lib/adlint/c/environ.rb +13 -7
  12. data/lib/adlint/c/expr.rb +5 -1
  13. data/lib/adlint/c/interp.rb +10 -6
  14. data/lib/adlint/c/mediator.rb +1 -0
  15. data/lib/adlint/c/message.rb +294 -111
  16. data/lib/adlint/c/message_shima.rb +63 -0
  17. data/lib/adlint/c/metric.rb +25 -13
  18. data/lib/adlint/c/object.rb +168 -31
  19. data/lib/adlint/c/parser.rb +3 -3
  20. data/lib/adlint/c/phase.rb +20 -3
  21. data/lib/adlint/c/syntax.rb +175 -17
  22. data/lib/adlint/c/value.rb +199 -126
  23. data/lib/adlint/cpp/asm.rb +4 -4
  24. data/lib/adlint/cpp/constexpr.rb +1 -1
  25. data/lib/adlint/cpp/eval.rb +6 -4
  26. data/lib/adlint/cpp/message.rb +100 -7
  27. data/lib/adlint/cpp/phase.rb +12 -1
  28. data/lib/adlint/cpp/source.rb +2 -2
  29. data/lib/adlint/cpp/subst.rb +2 -4
  30. data/lib/adlint/lang.rb +5 -3
  31. data/lib/adlint/ld/metric.rb +1 -1
  32. data/lib/adlint/version.rb +2 -2
  33. data/share/demo/Makefile +5 -0
  34. data/share/demo/bad_include/bad_include.c +13 -0
  35. data/share/demo/bad_include/test'1'.h +0 -0
  36. data/share/demo/bad_include/test'2'.h +0 -0
  37. data/share/demo/incomplete_ifelse/incomplete_ifelse.c +29 -0
  38. data/share/demo/inline_asm/inline_asm.c +25 -0
  39. data/share/demo/invalid_call/invalid_call.c +12 -4
  40. data/share/demo/logical_expr/logical_expr.c +73 -0
  41. data/share/demo/register_vars/register_vars.c +12 -0
  42. data/share/demo/typedef_each_src/typedef_each_src.c +9 -0
  43. data/share/demo/wrap_around/wrap_around.c +17 -0
  44. data/share/doc/developers_guide_ja.html +3 -3
  45. data/share/doc/developers_guide_ja.texi +1 -1
  46. data/share/doc/users_guide_en.html +137 -102
  47. data/share/doc/users_guide_en.texi +121 -86
  48. data/share/doc/users_guide_ja.html +118 -91
  49. data/share/doc/users_guide_ja.texi +103 -76
  50. metadata +10 -3
@@ -2,7 +2,7 @@
2
2
  @setfilename users_guide_en.info
3
3
  @documentlanguage en
4
4
  @documentencoding utf-8
5
- @settitle AdLint 1.6.0 User's Guide
5
+ @settitle AdLint 1.8.0 User's Guide
6
6
 
7
7
  @copying
8
8
  Copyright (C) 2010-2012, OGIS-RI Co.,Ltd.
@@ -2536,7 +2536,7 @@ context_line
2536
2536
  * W0535::A comma operator is used in a 'for' statement.
2537
2537
  * W0538::This 'default' label is not final label in this 'switch' statement.
2538
2538
  * W0540::A function which the blank formal argument list is declared. `void' is omitted.
2539
- * W0541::This function mixed weaves C code with inline assembly code.
2539
+ * W0541::Inline assembly code should be encapsulated by macro.
2540
2540
  * W0542::There are identifiers in the part of formal argument in a function declaration.
2541
2541
  * W0543::The identifier of formal argument in this function declaration is different from the past declaration of it.
2542
2542
  * W0544::The identifier of formal argument in the function declaration is different from the declaration of function pointer.
@@ -2601,8 +2601,8 @@ context_line
2601
2601
  * W0627::There is a dead letter (only `;') in the following other code.
2602
2602
  * W0628::A function `%s' is defined, but this is not used in this project.
2603
2603
  * W0629::A static function `%s()' is not used in this translation unit.
2604
- * W0632::If `'' or `/*' use in `#include <%s>', it will unspecify behavior.
2605
- * W0633::If `'' or `/*' use in `#include "%s"', it will unspecify behavior.
2604
+ * W0632::Using ' or " characters in `#include <%s>' directive makes undefined behavior.
2605
+ * W0633::Using ' character in `#include "%s"' directive makes undefined behavior.
2606
2606
  * W0634::`\' is used in `#include' line. `/' is recommended for the path delimiter.
2607
2607
  * W0635::The type doesn't match with %sth conversion specifier and the corresponding actual argument.
2608
2608
  * W0636::An actual argument doesn't exist correspond to %sth conversion specifier.
@@ -2653,9 +2653,9 @@ context_line
2653
2653
  * W0685::A character preceding the `-' in scanset o `[]' is bigger than a character following the `-'.
2654
2654
  * W0686::The same characters are described in scanset (characters enclosed by `[]').
2655
2655
  * W0687::#undef is using to delete #defined operator.
2656
- * W0688::There is no line number in 1 to 32767 ranges after '#line'.
2657
- * W0689::#line command syntax doesn't match `#line volatile integer constant value "string"'.
2658
- * W0690::This is not line number after '#line' value'.
2656
+ * W0688::There is no line number in 1 to 32767 ranges after #line directive.
2657
+ * W0689::#line directive syntax doesn't match `#line integer constant \"string\"'.
2658
+ * W0690::No line number after #line directive.
2659
2659
  * W0691::The result of `##' operator is not valid preprocessing token.
2660
2660
  * W0692::A function-like macro doesn't given an actual argument.
2661
2661
  * W0693::A function-like macro is called by actual argument which its definition is smaller.
@@ -23620,7 +23620,7 @@ None.
23620
23620
 
23621
23621
  @subsection Message body
23622
23622
 
23623
- This function mixed weaves C code with inline assembly code.
23623
+ Inline assembly code should be encapsulated by macro.
23624
23624
 
23625
23625
  @subsection Content
23626
23626
 
@@ -23629,6 +23629,8 @@ Under construction.
23629
23629
  @subsection Sample code
23630
23630
 
23631
23631
  @verbatim
23632
+ #define ASM_CODE asm("movl %ecx, %eax")
23633
+
23632
23634
  void foo(int arg1, int *arg2, int arg3)
23633
23635
  {
23634
23636
  asm("movl %ecx, %eax"); /* W0541 */
@@ -23638,6 +23640,8 @@ void foo(int arg1, int *arg2, int arg3)
23638
23640
  xorl eax, eax
23639
23641
  }
23640
23642
 
23643
+ ASM_CODE; /* OK */
23644
+
23641
23645
  __asm__ volatile ( /* W0541 */
23642
23646
  "int $0x80"
23643
23647
  : "=a" (r)
@@ -25337,17 +25341,16 @@ An integer expression which the value which the value is minus converted to unsi
25337
25341
 
25338
25342
  @subsection Content
25339
25343
 
25340
- @b{This message will be supported in AdLint 2.0.0}
25341
-
25342
25344
  Under construction.
25343
25345
 
25344
25346
  @subsection Sample code
25345
25347
 
25346
25348
  @verbatim
25347
- int a = func();
25348
-
25349
- if (a < 0) {
25350
- unsigned int b = a; /* W0607 */
25349
+ void func(int a)
25350
+ {
25351
+ if (a < 0) {
25352
+ unsigned int b = (unsigned int) a; /* W0607 */
25353
+ }
25351
25354
  }
25352
25355
  @end verbatim
25353
25356
 
@@ -25359,7 +25362,7 @@ if (a < 0) {
25359
25362
 
25360
25363
  @subsection Since
25361
25364
 
25362
- 2.0.0 (planned)
25365
+ 1.8.0
25363
25366
 
25364
25367
  @node W0608
25365
25368
  @section W0608
@@ -25371,14 +25374,19 @@ An integer expression which the value might be minus converted to unsigned type.
25371
25374
 
25372
25375
  @subsection Content
25373
25376
 
25374
- @b{This message will be supported in AdLint 2.0.0}
25375
-
25376
25377
  Under construction.
25377
25378
 
25378
25379
  @subsection Sample code
25379
25380
 
25380
25381
  @verbatim
25381
- /* will be added */
25382
+ void fuu(int a)
25383
+ {
25384
+ unsigned char b;
25385
+
25386
+ if (a < 256) {
25387
+ b = (unsigned char) a; /* W0608 */
25388
+ }
25389
+ }
25382
25390
  @end verbatim
25383
25391
 
25384
25392
  @subsection Related message
@@ -25389,7 +25397,7 @@ Under construction.
25389
25397
 
25390
25398
  @subsection Since
25391
25399
 
25392
- 2.0.0 (planned)
25400
+ 1.8.0
25393
25401
 
25394
25402
  @node W0609
25395
25403
  @section W0609
@@ -25723,14 +25731,19 @@ None.
25723
25731
 
25724
25732
  @subsection Content
25725
25733
 
25726
- @b{This message will be supported in AdLint 2.0.0}
25727
-
25728
25734
  Under construction.
25729
25735
 
25730
25736
  @subsection Sample code
25731
25737
 
25732
25738
  @verbatim
25733
- /* will be added */
25739
+ typedef int *INT_PTR; /* W0625 */
25740
+
25741
+ extern INT_PTR func(void);
25742
+
25743
+ INT_PTR func(void)
25744
+ {
25745
+ return 0;
25746
+ }
25734
25747
  @end verbatim
25735
25748
 
25736
25749
  @subsection Related message
@@ -25739,7 +25752,7 @@ None.
25739
25752
 
25740
25753
  @subsection Since
25741
25754
 
25742
- 2.0.0 (planned)
25755
+ 1.8.0
25743
25756
 
25744
25757
  @node W0626
25745
25758
  @section W0626
@@ -25885,30 +25898,28 @@ int func2(void)
25885
25898
 
25886
25899
  @subsection Message body
25887
25900
 
25888
- If `'' or `/*' use in `#include <%s>', it will unspecify behavior.
25901
+ Using ' or " characters in `@code{#include <%s>}' directive makes undefined behavior.
25889
25902
 
25890
25903
  @subsection Content
25891
25904
 
25892
- @b{This message will be supported in AdLint 2.0.0}
25893
-
25894
25905
  Under construction.
25895
25906
 
25896
25907
  @subsection Sample code
25897
25908
 
25898
25909
  @verbatim
25899
- /* will be added */
25910
+ #include <NG'_header.h> /* W0632 */
25900
25911
  @end verbatim
25901
25912
 
25902
25913
  @subsection Related message
25903
25914
 
25904
25915
  @itemize
25905
- @item @ref{W0633} If `'' or `/*' use in `#include "%s"', it will unspecify behavior.
25916
+ @item @ref{W0633} Using ' character in `#include "%s"' directive makes undefined behavior.
25906
25917
  @item @ref{W0634} `\' is used in `#include' line. `/' is recommended for the path delimiter.
25907
25918
  @end itemize
25908
25919
 
25909
25920
  @subsection Since
25910
25921
 
25911
- 2.0.0 (planned)
25922
+ 1.8.0
25912
25923
 
25913
25924
  @node W0633
25914
25925
  @section W0633
@@ -25916,30 +25927,28 @@ Under construction.
25916
25927
 
25917
25928
  @subsection Message body
25918
25929
 
25919
- If `'' or `/*' use in `#include \"%s\"', it will unspecify behavior.
25930
+ Using ' character in `@code{#include "%s"}' directive makes undefined behavior.
25920
25931
 
25921
25932
  @subsection Content
25922
25933
 
25923
- @b{This message will be supported in AdLint 2.0.0}
25924
-
25925
25934
  Under construction.
25926
25935
 
25927
25936
  @subsection Sample code
25928
25937
 
25929
25938
  @verbatim
25930
- /* will be added */
25939
+ #include "NG'_header.h" /* W0633 */
25931
25940
  @end verbatim
25932
25941
 
25933
25942
  @subsection Related message
25934
25943
 
25935
25944
  @itemize
25936
- @item @ref{W0632} If `'' or `/*' use in `#include <%s>', it will unspecify behavior.
25945
+ @item @ref{W0632} Using ' or " characters in `#include <%s>' directive makes undefined behavior.
25937
25946
  @item @ref{W0634} `\' is used in `#include' line. `/' is recommended for the path delimiter.
25938
25947
  @end itemize
25939
25948
 
25940
25949
  @subsection Since
25941
25950
 
25942
- 2.0.0 (planned)
25951
+ 1.8.0
25943
25952
 
25944
25953
  @node W0634
25945
25954
  @section W0634
@@ -25951,26 +25960,25 @@ Under construction.
25951
25960
 
25952
25961
  @subsection Content
25953
25962
 
25954
- @b{This message will be supported in AdLint 2.0.0}
25955
-
25956
25963
  Under construction.
25957
25964
 
25958
25965
  @subsection Sample code
25959
25966
 
25960
25967
  @verbatim
25961
- /* will be added */
25968
+ #include "..\ng\header.h" /* W0634 */
25969
+ #include "..\\ng\\header.h" /* W0634 */
25962
25970
  @end verbatim
25963
25971
 
25964
25972
  @subsection Related message
25965
25973
 
25966
25974
  @itemize
25967
- @item @ref{W0632} If `'' or `/*' use in `#include <%s>', it will unspecify behavior.
25968
- @item @ref{W0633} If `'' or `/*' use in `#include "%s"', it will unspecify behavior.
25975
+ @item @ref{W0632} Using ' or " characters in `#include <%s>' directive makes undefined behavior.
25976
+ @item @ref{W0633} Using ' character in `#include "%s"' directive makes undefined behavior.
25969
25977
  @end itemize
25970
25978
 
25971
25979
  @subsection Since
25972
25980
 
25973
- 2.0.0 (planned)
25981
+ 1.8.0
25974
25982
 
25975
25983
  @node W0635
25976
25984
  @section W0635
@@ -26217,15 +26225,18 @@ It is impossible to get the array's address which declared with 'register'.
26217
26225
 
26218
26226
  @subsection Content
26219
26227
 
26220
- @b{This message will be supported in AdLint 2.0.0}
26221
-
26222
26228
  Under construction.
26223
26229
 
26224
26230
  @subsection Sample code
26225
26231
 
26226
26232
  @verbatim
26227
- register int arr1[3]; /* W0642 */
26228
- int* p = arr1;
26233
+ void func(void)
26234
+ {
26235
+ register int a[3];
26236
+
26237
+ int *p1 = a; /* W0642 */
26238
+ int *p2 = &a[1]; /* W0642 */
26239
+ }
26229
26240
  @end verbatim
26230
26241
 
26231
26242
  @subsection Related message
@@ -26239,7 +26250,7 @@ int* p = arr1;
26239
26250
 
26240
26251
  @subsection Since
26241
26252
 
26242
- 2.0.0 (planned)
26253
+ 1.8.0
26243
26254
 
26244
26255
  @node W0643
26245
26256
  @section W0643
@@ -28512,9 +28523,9 @@ Under construction.
28512
28523
  @subsection Related message
28513
28524
 
28514
28525
  @itemize
28515
- @item @ref{W0688} There is no line number in 1 to 32767 ranges after '#line'.
28516
- @item @ref{W0689} #line command syntax doesn't match `#line volatile integer constant value "string"'.
28517
- @item @ref{W0690} This is not line number after '#line' value'.
28526
+ @item @ref{W0688} There is no line number in 1 to 32767 ranges after #line directive.
28527
+ @item @ref{W0689} #line directive syntax doesn't match `#line integer constant \"string\"'.
28528
+ @item @ref{W0690} No line number after #line directive.
28518
28529
  @item @ref{W0691} The result of `##' operator is not valid preprocessing token.
28519
28530
  @end itemize
28520
28531
 
@@ -28528,7 +28539,7 @@ Under construction.
28528
28539
 
28529
28540
  @subsection Message body
28530
28541
 
28531
- There is no line number in 1 to 32767 ranges after '#line'
28542
+ There is no line number in 1 to 32767 ranges after #line directive.
28532
28543
 
28533
28544
  @subsection Content
28534
28545
 
@@ -28544,8 +28555,8 @@ Under construction.
28544
28555
 
28545
28556
  @itemize
28546
28557
  @item @ref{W0687} #undef is using to delete #defined operator.
28547
- @item @ref{W0689} #line command syntax doesn't match `#line volatile integer constant value "string"'.
28548
- @item @ref{W0690} This is not line number after '#line' value'.
28558
+ @item @ref{W0689} #line directive syntax doesn't match `#line integer constant \"string\"'.
28559
+ @item @ref{W0690} No line number after #line directive.
28549
28560
  @item @ref{W0691} The result of `##' operator is not valid preprocessing token.
28550
28561
  @end itemize
28551
28562
 
@@ -28559,7 +28570,7 @@ Under construction.
28559
28570
 
28560
28571
  @subsection Message body
28561
28572
 
28562
- #line command syntax doesn't match `#line volatile integer constant value \"string\"'.
28573
+ #line directive syntax doesn't match `#line integer constant \"string\"'.
28563
28574
 
28564
28575
  @subsection Content
28565
28576
 
@@ -28578,8 +28589,8 @@ Under construction.
28578
28589
 
28579
28590
  @itemize
28580
28591
  @item @ref{W0687} #undef is using to delete #defined operator.
28581
- @item @ref{W0688} There is no line number in 1 to 32767 ranges after '#line'.
28582
- @item @ref{W0690} This is not line number after '#line' value'.
28592
+ @item @ref{W0688} There is no line number in 1 to 32767 ranges after #line directive.
28593
+ @item @ref{W0690} No line number after #line directive.
28583
28594
  @item @ref{W0691} The result of `##' operator is not valid preprocessing token.
28584
28595
  @end itemize
28585
28596
 
@@ -28593,7 +28604,7 @@ Under construction.
28593
28604
 
28594
28605
  @subsection Message body
28595
28606
 
28596
- This is not line number after '#line' value.'
28607
+ No line number after #line directive.
28597
28608
 
28598
28609
  @subsection Content
28599
28610
 
@@ -28610,8 +28621,8 @@ Under construction.
28610
28621
 
28611
28622
  @itemize
28612
28623
  @item @ref{W0687} #undef is using to delete #defined operator.
28613
- @item @ref{W0688} There is no line number in 1 to 32767 ranges after '#line'.
28614
- @item @ref{W0689} #line command syntax doesn't match `#line volatile integer constant value "string"'.
28624
+ @item @ref{W0688} There is no line number in 1 to 32767 ranges after #line directive.
28625
+ @item @ref{W0689} #line directive syntax doesn't match `#line integer constant \"string\"'.
28615
28626
  @item @ref{W0691} The result of `##' operator is not valid preprocessing token.
28616
28627
  @end itemize
28617
28628
 
@@ -28643,9 +28654,9 @@ Under construction.
28643
28654
 
28644
28655
  @itemize
28645
28656
  @item @ref{W0687} #undef is using to delete #defined operator.
28646
- @item @ref{W0688} There is no line number in 1 to 32767 ranges after '#line'.
28647
- @item @ref{W0689} #line command syntax doesn't match `#line volatile integer constant value "string"'.
28648
- @item @ref{W0690} This is not line number after '#line' value'.
28657
+ @item @ref{W0688} There is no line number in 1 to 32767 ranges after #line directive.
28658
+ @item @ref{W0689} #line directive syntax doesn't match `#line integer constant \"string\"'.
28659
+ @item @ref{W0690} No line number after #line directive.
28649
28660
  @end itemize
28650
28661
 
28651
28662
  @subsection Since
@@ -29117,14 +29128,15 @@ Right operand of relational operator is a substantive 'boolean' expression.
29117
29128
 
29118
29129
  @subsection Content
29119
29130
 
29120
- @b{This message will be supported in AdLint 2.0.0}
29121
-
29122
29131
  Under construction.
29123
29132
 
29124
29133
  @subsection Sample code
29125
29134
 
29126
29135
  @verbatim
29127
- x = (a + b) > (c > d); /* W0711 */
29136
+ int func(int a, int b, int c, int d)
29137
+ {
29138
+ return (a + b) > (c > d); /* W0711 */
29139
+ }
29128
29140
  @end verbatim
29129
29141
 
29130
29142
  @subsection Related message
@@ -29136,7 +29148,7 @@ x = (a + b) > (c > d); /* W0711 */
29136
29148
 
29137
29149
  @subsection Since
29138
29150
 
29139
- 2.0.0 (planned)
29151
+ 1.8.0
29140
29152
 
29141
29153
  @node W0712
29142
29154
  @section W0712
@@ -29148,14 +29160,15 @@ Left operand of relational operator is a substantive 'boolean' expression.
29148
29160
 
29149
29161
  @subsection Content
29150
29162
 
29151
- @b{This message will be supported in AdLint 2.0.0}
29152
-
29153
29163
  Under construction.
29154
29164
 
29155
29165
  @subsection Sample code
29156
29166
 
29157
29167
  @verbatim
29158
- x = (a > b) > (c + d); /* W0712 */
29168
+ int func(int a, int b, int c, int d)
29169
+ {
29170
+ return (a > b) > (c + d); /* W0712 */
29171
+ }
29159
29172
  @end verbatim
29160
29173
 
29161
29174
  @subsection Related message
@@ -29167,7 +29180,7 @@ x = (a > b) > (c + d); /* W0712 */
29167
29180
 
29168
29181
  @subsection Since
29169
29182
 
29170
- 2.0.0 (planned)
29183
+ 1.8.0
29171
29184
 
29172
29185
  @node W0713
29173
29186
  @section W0713
@@ -29179,14 +29192,15 @@ Both sides of relational operator is substantive 'boolean' expressions.
29179
29192
 
29180
29193
  @subsection Content
29181
29194
 
29182
- @b{This message will be supported in AdLint 2.0.0}
29183
-
29184
29195
  Under construction.
29185
29196
 
29186
29197
  @subsection Sample code
29187
29198
 
29188
29199
  @verbatim
29189
- x = (a > b) > (c > d); /* W0713 */
29200
+ int func(int a, int b, int c, int d)
29201
+ {
29202
+ return (a > b) > (c > d); /* W0713 */
29203
+ }
29190
29204
  @end verbatim
29191
29205
 
29192
29206
  @subsection Related message
@@ -29198,7 +29212,7 @@ x = (a > b) > (c > d); /* W0713 */
29198
29212
 
29199
29213
  @subsection Since
29200
29214
 
29201
- 2.0.0 (planned)
29215
+ 1.8.0
29202
29216
 
29203
29217
  @node W0714
29204
29218
  @section W0714
@@ -29210,14 +29224,15 @@ Both sides of `&' operator is substantive 'boolean' expressions.
29210
29224
 
29211
29225
  @subsection Content
29212
29226
 
29213
- @b{This message will be supported in AdLint 2.0.0}
29214
-
29215
29227
  Under construction.
29216
29228
 
29217
29229
  @subsection Sample code
29218
29230
 
29219
29231
  @verbatim
29220
- /* will be added */
29232
+ int func(int a, int b, int c, int d)
29233
+ {
29234
+ return (a > b) & (c > d); /* W0714 */
29235
+ }
29221
29236
  @end verbatim
29222
29237
 
29223
29238
  @subsection Related message
@@ -29231,7 +29246,7 @@ Under construction.
29231
29246
 
29232
29247
  @subsection Since
29233
29248
 
29234
- 2.0.0 (planned)
29249
+ 1.8.0
29235
29250
 
29236
29251
  @node W0715
29237
29252
  @section W0715
@@ -29243,14 +29258,15 @@ Both sides of `|' operator is substantive 'boolean' expressions.
29243
29258
 
29244
29259
  @subsection Content
29245
29260
 
29246
- @b{This message will be supported in AdLint 2.0.0}
29247
-
29248
29261
  Under construction.
29249
29262
 
29250
29263
  @subsection Sample code
29251
29264
 
29252
29265
  @verbatim
29253
- /* will be added */
29266
+ int func(int a, int b, int c, int d)
29267
+ {
29268
+ return (a > b) | (c > d); /* W0715 */
29269
+ }
29254
29270
  @end verbatim
29255
29271
 
29256
29272
  @subsection Related message
@@ -29264,7 +29280,7 @@ Under construction.
29264
29280
 
29265
29281
  @subsection Since
29266
29282
 
29267
- 2.0.0 (planned)
29283
+ 1.8.0
29268
29284
 
29269
29285
  @node W0716
29270
29286
  @section W0716
@@ -29688,7 +29704,7 @@ enum Fruits { APPLE, BANANA, ORANGE };
29688
29704
  void func(void)
29689
29705
  {
29690
29706
  enum Color c;
29691
-
29707
+
29692
29708
  c = ORANGE; /* W0729 */
29693
29709
  }
29694
29710
  @end verbatim
@@ -32824,14 +32840,33 @@ An inline assembly syntax is using. This is the language extension. This code wi
32824
32840
 
32825
32841
  @subsection Content
32826
32842
 
32827
- @b{This message will be supported in AdLint 2.0.0}
32828
-
32829
32843
  Under construction.
32830
32844
 
32831
32845
  @subsection Sample code
32832
32846
 
32833
32847
  @verbatim
32834
- /* will be added */
32848
+ #define ASM_CODE asm("movl %ecx, %eax")
32849
+
32850
+ void foo(int arg1, int *arg2, int arg3)
32851
+ {
32852
+ asm("movl %ecx, %eax"); /* W0832 */
32853
+ __asm__("movl %ecx, (%eax)"); /* W0832 */
32854
+
32855
+ asm { /* W0832 */
32856
+ xorl eax, eax
32857
+ }
32858
+
32859
+ ASM_CODE; /* W0832 */
32860
+
32861
+ __asm__ volatile ( /* W0832 */
32862
+ "int $0x80"
32863
+ : "=a" (r)
32864
+ "+b" (arg1),
32865
+ "+c" (arg2),
32866
+ "+d" (arg3)
32867
+ : "a" (128)
32868
+ : "memory", "cc");
32869
+ }
32835
32870
  @end verbatim
32836
32871
 
32837
32872
  @subsection Related message
@@ -32842,7 +32877,7 @@ Under construction.
32842
32877
 
32843
32878
  @subsection Since
32844
32879
 
32845
- 2.0.0 (planned)
32880
+ 1.8.0
32846
32881
 
32847
32882
  @node W0833
32848
32883
  @section W0833