adlint 2.6.14 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (401) hide show
  1. data/AUTHORS +1 -3
  2. data/ChangeLog +511 -0
  3. data/INSTALL +1 -1
  4. data/MANIFEST +57 -37
  5. data/NEWS +36 -7
  6. data/README +2 -2
  7. data/Rakefile +6 -6
  8. data/TODO +1 -1
  9. data/bin/adlint +25 -16
  10. data/bin/adlint_chk +22 -12
  11. data/bin/adlint_cma +17 -12
  12. data/bin/adlint_sma +22 -12
  13. data/bin/adlintize +98 -17
  14. data/etc/conf.d/fallback/cinit.erb +1 -1
  15. data/etc/conf.d/fallback/traits.erb +37 -37
  16. data/etc/conf.d/i686-cygwin/cinit-gcc_4.3.4.erb +1 -1
  17. data/etc/conf.d/i686-cygwin/traits-gcc_4.3.4.erb +41 -41
  18. data/etc/conf.d/i686-devkit/cinit-gcc_4.5.2.erb +1 -1
  19. data/etc/conf.d/i686-devkit/traits-gcc_4.5.2.erb +40 -40
  20. data/etc/conf.d/i686-linux/cinit-gcc_4.5.1.erb +1 -1
  21. data/etc/conf.d/i686-linux/traits-gcc_4.5.1.erb +40 -40
  22. data/etc/conf.d/i686-mingw/cinit-gcc_4.6.1.erb +1 -1
  23. data/etc/conf.d/i686-mingw/traits-gcc_4.6.1.erb +40 -40
  24. data/etc/conf.d/noarch/GNUmakefile.erb +1 -1
  25. data/etc/conf.d/noarch/adlint_all_bat.erb +1 -1
  26. data/etc/conf.d/noarch/adlint_all_sh.erb +1 -1
  27. data/etc/conf.d/noarch/pinit.erb +1 -1
  28. data/etc/conf.d/x86_64-ubuntu_12.04/cinit-gcc_4.6.3.erb +1 -1
  29. data/etc/conf.d/x86_64-ubuntu_12.04/traits-gcc_4.6.3.erb +42 -42
  30. data/etc/mesg.d/c_builtin/en_US/messages.yml +33 -33
  31. data/etc/mesg.d/c_builtin/ja_JP/messages.yml +5 -5
  32. data/etc/mesg.d/core/en_US/messages.yml +2 -2
  33. data/etc/mesg.d/core/ja_JP/messages.yml +2 -2
  34. data/features/code_check/W0018.feature +197 -0
  35. data/features/code_check/W0019.feature +79 -0
  36. data/features/code_check/W0021.feature +81 -0
  37. data/features/code_check/W0023.feature +203 -0
  38. data/features/code_check/W0024.feature +226 -0
  39. data/features/code_check/W0025.feature +5 -0
  40. data/features/code_check/W0088.feature +2 -2
  41. data/features/code_check/W0109.feature +2 -2
  42. data/features/code_check/W0477.feature +0 -3
  43. data/features/code_check/W0478.feature +0 -1
  44. data/features/code_check/W0582.feature +3 -3
  45. data/features/code_check/W0583.feature +4 -7
  46. data/features/code_check/W0646.feature +0 -1
  47. data/features/code_check/W0695.feature +0 -1
  48. data/features/code_check/W0705.feature +8 -0
  49. data/features/code_check/W0723.feature +0 -1
  50. data/features/code_check/W0745.feature +1 -0
  51. data/features/code_check/W0781.feature +1 -0
  52. data/features/code_check/W1057.feature +141 -0
  53. data/features/code_check/W1058.feature +93 -0
  54. data/features/code_check/W1059.feature +86 -0
  55. data/features/code_check/W1060.feature +77 -0
  56. data/features/code_check/W1061.feature +143 -0
  57. data/features/code_check/W1062.feature +162 -0
  58. data/features/code_check/W1063.feature +123 -0
  59. data/features/code_check/W1064.feature +83 -0
  60. data/features/code_check/W1065.feature +82 -0
  61. data/features/code_check/W9003.feature +2 -0
  62. data/features/step_definitions/code_check_steps.rb +1 -0
  63. data/features/support/env.rb +16 -13
  64. data/lib/adlint.rb +7 -4
  65. data/lib/adlint/analyzer.rb +131 -157
  66. data/lib/adlint/annot.rb +149 -0
  67. data/lib/adlint/cc1.rb +57 -0
  68. data/lib/adlint/{c → cc1}/branch.rb +74 -62
  69. data/lib/adlint/{c → cc1}/builtin.rb +21 -21
  70. data/lib/adlint/{c → cc1}/const.rb +119 -117
  71. data/lib/adlint/{c → cc1}/conv.rb +76 -78
  72. data/lib/adlint/{c → cc1}/ctrlexpr.rb +69 -86
  73. data/lib/adlint/cc1/domain.rb +8103 -0
  74. data/lib/adlint/{c → cc1}/enum.rb +3 -3
  75. data/lib/adlint/{c → cc1}/environ.rb +21 -21
  76. data/lib/adlint/{c → cc1}/expr.rb +232 -218
  77. data/lib/adlint/{c → cc1}/format.rb +305 -342
  78. data/lib/adlint/{c → cc1}/interp.rb +269 -220
  79. data/lib/adlint/cc1/lexer.rb +246 -0
  80. data/lib/adlint/{c → cc1}/mediator.rb +78 -84
  81. data/lib/adlint/{c → cc1}/object.rb +261 -264
  82. data/lib/adlint/{c → cc1}/operator.rb +7 -7
  83. data/lib/adlint/{c → cc1}/option.rb +4 -3
  84. data/lib/adlint/{c → cc1}/parser.rb +274 -506
  85. data/lib/adlint/{c → cc1}/parser.y +69 -301
  86. data/lib/adlint/cc1/phase.rb +138 -0
  87. data/lib/adlint/{c → cc1}/resolver.rb +66 -78
  88. data/lib/adlint/{c → cc1}/scanner.rb +57 -49
  89. data/lib/adlint/{c → cc1}/scope.rb +3 -3
  90. data/lib/adlint/{c → cc1}/seqp.rb +13 -5
  91. data/lib/adlint/{c → cc1}/syntax.rb +819 -1122
  92. data/lib/adlint/{c → cc1}/type.rb +1498 -1479
  93. data/lib/adlint/{c → cc1}/util.rb +20 -12
  94. data/lib/adlint/{c → cc1}/value.rb +699 -642
  95. data/lib/adlint/code.rb +163 -164
  96. data/lib/adlint/cpp.rb +2 -2
  97. data/lib/adlint/cpp/asm.rb +13 -14
  98. data/lib/adlint/cpp/constexpr.rb +42 -38
  99. data/lib/adlint/cpp/constexpr.y +44 -40
  100. data/lib/adlint/cpp/eval.rb +435 -435
  101. data/lib/adlint/cpp/lexer.rb +343 -340
  102. data/lib/adlint/cpp/macro.rb +188 -190
  103. data/lib/adlint/cpp/phase.rb +66 -45
  104. data/lib/adlint/cpp/scanner.rb +14 -17
  105. data/lib/adlint/cpp/source.rb +49 -55
  106. data/lib/adlint/cpp/subst.rb +65 -65
  107. data/lib/adlint/cpp/syntax.rb +155 -275
  108. data/lib/adlint/cpp/util.rb +22 -19
  109. data/lib/adlint/driver.rb +86 -93
  110. data/lib/adlint/error.rb +33 -52
  111. data/lib/adlint/exam.rb +158 -24
  112. data/lib/adlint/exam/c_builtin.rb +7 -7
  113. data/lib/adlint/exam/c_builtin/cc1_check.rb +20522 -0
  114. data/lib/adlint/exam/c_builtin/cc1_check_shima.rb +957 -0
  115. data/lib/adlint/exam/c_builtin/cc1_code.rb +459 -0
  116. data/lib/adlint/exam/c_builtin/cc1_metric.rb +794 -0
  117. data/lib/adlint/exam/c_builtin/cpp_check.rb +486 -441
  118. data/lib/adlint/exam/c_builtin/cpp_check_shima.rb +36 -39
  119. data/lib/adlint/exam/c_builtin/cpp_code.rb +63 -65
  120. data/lib/adlint/exam/c_builtin/ld_check.rb +136 -129
  121. data/lib/adlint/exam/c_builtin/ld_metric.rb +11 -11
  122. data/lib/adlint/lang.rb +25 -25
  123. data/lib/adlint/ld.rb +2 -2
  124. data/lib/adlint/ld/object.rb +220 -188
  125. data/lib/adlint/ld/phase.rb +94 -63
  126. data/lib/adlint/ld/typedef.rb +22 -11
  127. data/lib/adlint/ld/util.rb +43 -35
  128. data/lib/adlint/lexer.rb +59 -56
  129. data/lib/adlint/location.rb +140 -0
  130. data/lib/adlint/memo.rb +157 -0
  131. data/lib/adlint/message.rb +207 -156
  132. data/lib/adlint/metric.rb +139 -217
  133. data/lib/adlint/monitor.rb +45 -43
  134. data/lib/adlint/phase.rb +56 -29
  135. data/lib/adlint/prelude.rb +66 -54
  136. data/lib/adlint/report.rb +253 -332
  137. data/lib/adlint/source.rb +26 -27
  138. data/lib/adlint/supp.rb +131 -0
  139. data/lib/adlint/symbol.rb +14 -16
  140. data/lib/adlint/token.rb +19 -91
  141. data/lib/adlint/traits.rb +242 -226
  142. data/lib/adlint/util.rb +116 -205
  143. data/lib/adlint/version.rb +8 -8
  144. data/share/HEADER +2 -2
  145. data/share/doc/developers_guide_ja.html +148 -19
  146. data/share/doc/developers_guide_ja.texi +141 -11
  147. data/share/doc/samples/GNUmakefile +1 -1
  148. data/share/doc/samples/adlint_traits.yml +45 -36
  149. data/share/doc/users_guide_en.html +1321 -1252
  150. data/share/doc/users_guide_en.texi +475 -408
  151. data/share/doc/users_guide_ja.html +1932 -1878
  152. data/share/doc/users_guide_ja.texi +324 -273
  153. data/share/sample/bison-2.5/adlint/GNUmakefile +5 -1
  154. data/share/sample/bison-2.5/adlint/adlint_traits.yml +38 -38
  155. data/share/sample/bison-2.5/adlint/lib/GNUmakefile +1 -1
  156. data/share/sample/bison-2.5/adlint/lib/adlint_cinit.h +1 -1
  157. data/share/sample/bison-2.5/adlint/lib/adlint_pinit.h +1 -1
  158. data/share/sample/bison-2.5/adlint/lib/adlint_traits.yml +50 -42
  159. data/share/sample/bison-2.5/adlint/src/GNUmakefile +1 -1
  160. data/share/sample/bison-2.5/adlint/src/adlint_cinit.h +1 -1
  161. data/share/sample/bison-2.5/adlint/src/adlint_pinit.h +1 -1
  162. data/share/sample/bison-2.5/adlint/src/adlint_traits.yml +50 -42
  163. data/share/sample/ctags-5.8/adlint/GNUmakefile +1 -1
  164. data/share/sample/ctags-5.8/adlint/adlint_cinit.h +1 -1
  165. data/share/sample/ctags-5.8/adlint/adlint_pinit.h +1 -1
  166. data/share/sample/ctags-5.8/adlint/adlint_traits.yml +50 -42
  167. data/share/sample/flex-2.5.35/adlint/GNUmakefile +1 -1
  168. data/share/sample/flex-2.5.35/adlint/adlint_cinit.h +1 -1
  169. data/share/sample/flex-2.5.35/adlint/adlint_pinit.h +1 -1
  170. data/share/sample/flex-2.5.35/adlint/adlint_traits.yml +50 -42
  171. data/share/sample/ruby-1.9.3-p0/adlint/GNUmakefile +1 -1
  172. data/share/sample/ruby-1.9.3-p0/adlint/adlint_traits.yml +46 -38
  173. data/share/sample/ruby-1.9.3-p0/adlint/core/GNUmakefile +1 -1
  174. data/share/sample/ruby-1.9.3-p0/adlint/core/adlint_cinit.h +1 -1
  175. data/share/sample/ruby-1.9.3-p0/adlint/core/adlint_pinit.h +1 -1
  176. data/share/sample/ruby-1.9.3-p0/adlint/core/adlint_traits.yml +50 -42
  177. data/share/sample/ruby-1.9.3-p0/adlint/enc-trans/GNUmakefile +1 -1
  178. data/share/sample/ruby-1.9.3-p0/adlint/enc-trans/adlint_cinit.h +1 -1
  179. data/share/sample/ruby-1.9.3-p0/adlint/enc-trans/adlint_pinit.h +1 -1
  180. data/share/sample/ruby-1.9.3-p0/adlint/enc-trans/adlint_traits.yml +50 -42
  181. data/share/sample/ruby-1.9.3-p0/adlint/enc/GNUmakefile +1 -1
  182. data/share/sample/ruby-1.9.3-p0/adlint/enc/adlint_cinit.h +1 -1
  183. data/share/sample/ruby-1.9.3-p0/adlint/enc/adlint_pinit.h +1 -1
  184. data/share/sample/ruby-1.9.3-p0/adlint/enc/adlint_traits.yml +50 -42
  185. data/share/sample/ruby-1.9.3-p0/adlint/ext-bigdecimal/GNUmakefile +1 -1
  186. data/share/sample/ruby-1.9.3-p0/adlint/ext-bigdecimal/adlint_cinit.h +1 -1
  187. data/share/sample/ruby-1.9.3-p0/adlint/ext-bigdecimal/adlint_pinit.h +1 -1
  188. data/share/sample/ruby-1.9.3-p0/adlint/ext-bigdecimal/adlint_traits.yml +50 -42
  189. data/share/sample/ruby-1.9.3-p0/adlint/ext-continuation/GNUmakefile +1 -1
  190. data/share/sample/ruby-1.9.3-p0/adlint/ext-continuation/adlint_cinit.h +1 -1
  191. data/share/sample/ruby-1.9.3-p0/adlint/ext-continuation/adlint_pinit.h +1 -1
  192. data/share/sample/ruby-1.9.3-p0/adlint/ext-continuation/adlint_traits.yml +50 -42
  193. data/share/sample/ruby-1.9.3-p0/adlint/ext-coverage/GNUmakefile +1 -1
  194. data/share/sample/ruby-1.9.3-p0/adlint/ext-coverage/adlint_cinit.h +1 -1
  195. data/share/sample/ruby-1.9.3-p0/adlint/ext-coverage/adlint_pinit.h +1 -1
  196. data/share/sample/ruby-1.9.3-p0/adlint/ext-coverage/adlint_traits.yml +50 -42
  197. data/share/sample/ruby-1.9.3-p0/adlint/ext-curses/GNUmakefile +1 -1
  198. data/share/sample/ruby-1.9.3-p0/adlint/ext-curses/adlint_cinit.h +1 -1
  199. data/share/sample/ruby-1.9.3-p0/adlint/ext-curses/adlint_pinit.h +1 -1
  200. data/share/sample/ruby-1.9.3-p0/adlint/ext-curses/adlint_traits.yml +50 -42
  201. data/share/sample/ruby-1.9.3-p0/adlint/ext-date/GNUmakefile +1 -1
  202. data/share/sample/ruby-1.9.3-p0/adlint/ext-date/adlint_cinit.h +1 -1
  203. data/share/sample/ruby-1.9.3-p0/adlint/ext-date/adlint_pinit.h +1 -1
  204. data/share/sample/ruby-1.9.3-p0/adlint/ext-date/adlint_traits.yml +50 -42
  205. data/share/sample/ruby-1.9.3-p0/adlint/ext-dbm/GNUmakefile +1 -1
  206. data/share/sample/ruby-1.9.3-p0/adlint/ext-dbm/adlint_cinit.h +1 -1
  207. data/share/sample/ruby-1.9.3-p0/adlint/ext-dbm/adlint_pinit.h +1 -1
  208. data/share/sample/ruby-1.9.3-p0/adlint/ext-dbm/adlint_traits.yml +50 -42
  209. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-bubblebabble/GNUmakefile +1 -1
  210. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-bubblebabble/adlint_cinit.h +1 -1
  211. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-bubblebabble/adlint_pinit.h +1 -1
  212. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-bubblebabble/adlint_traits.yml +50 -42
  213. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-md5/GNUmakefile +1 -1
  214. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-md5/adlint_cinit.h +1 -1
  215. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-md5/adlint_pinit.h +1 -1
  216. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-md5/adlint_traits.yml +50 -42
  217. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-rmd160/GNUmakefile +1 -1
  218. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-rmd160/adlint_cinit.h +1 -1
  219. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-rmd160/adlint_pinit.h +1 -1
  220. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-rmd160/adlint_traits.yml +50 -42
  221. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha1/GNUmakefile +1 -1
  222. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha1/adlint_cinit.h +1 -1
  223. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha1/adlint_pinit.h +1 -1
  224. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha1/adlint_traits.yml +50 -42
  225. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha2/GNUmakefile +1 -1
  226. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha2/adlint_cinit.h +1 -1
  227. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha2/adlint_pinit.h +1 -1
  228. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha2/adlint_traits.yml +50 -42
  229. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest/GNUmakefile +1 -1
  230. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest/adlint_cinit.h +1 -1
  231. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest/adlint_pinit.h +1 -1
  232. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest/adlint_traits.yml +50 -42
  233. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl-callback/GNUmakefile +1 -1
  234. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl-callback/adlint_cinit.h +1 -1
  235. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl-callback/adlint_pinit.h +1 -1
  236. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl-callback/adlint_traits.yml +50 -42
  237. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl/GNUmakefile +1 -1
  238. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl/adlint_cinit.h +1 -1
  239. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl/adlint_pinit.h +1 -1
  240. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl/adlint_traits.yml +50 -42
  241. data/share/sample/ruby-1.9.3-p0/adlint/ext-etc/GNUmakefile +1 -1
  242. data/share/sample/ruby-1.9.3-p0/adlint/ext-etc/adlint_cinit.h +1 -1
  243. data/share/sample/ruby-1.9.3-p0/adlint/ext-etc/adlint_pinit.h +1 -1
  244. data/share/sample/ruby-1.9.3-p0/adlint/ext-etc/adlint_traits.yml +50 -42
  245. data/share/sample/ruby-1.9.3-p0/adlint/ext-fcntl/GNUmakefile +1 -1
  246. data/share/sample/ruby-1.9.3-p0/adlint/ext-fcntl/adlint_cinit.h +1 -1
  247. data/share/sample/ruby-1.9.3-p0/adlint/ext-fcntl/adlint_pinit.h +1 -1
  248. data/share/sample/ruby-1.9.3-p0/adlint/ext-fcntl/adlint_traits.yml +50 -42
  249. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiber/GNUmakefile +1 -1
  250. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiber/adlint_cinit.h +1 -1
  251. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiber/adlint_pinit.h +1 -1
  252. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiber/adlint_traits.yml +50 -42
  253. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiddle/GNUmakefile +1 -1
  254. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiddle/adlint_cinit.h +1 -1
  255. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiddle/adlint_pinit.h +1 -1
  256. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiddle/adlint_traits.yml +50 -42
  257. data/share/sample/ruby-1.9.3-p0/adlint/ext-gdbm/GNUmakefile +1 -1
  258. data/share/sample/ruby-1.9.3-p0/adlint/ext-gdbm/adlint_cinit.h +1 -1
  259. data/share/sample/ruby-1.9.3-p0/adlint/ext-gdbm/adlint_pinit.h +1 -1
  260. data/share/sample/ruby-1.9.3-p0/adlint/ext-gdbm/adlint_traits.yml +50 -42
  261. data/share/sample/ruby-1.9.3-p0/adlint/ext-iconv/GNUmakefile +1 -1
  262. data/share/sample/ruby-1.9.3-p0/adlint/ext-iconv/adlint_cinit.h +1 -1
  263. data/share/sample/ruby-1.9.3-p0/adlint/ext-iconv/adlint_pinit.h +1 -1
  264. data/share/sample/ruby-1.9.3-p0/adlint/ext-iconv/adlint_traits.yml +50 -42
  265. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-console/GNUmakefile +1 -1
  266. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-console/adlint_cinit.h +1 -1
  267. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-console/adlint_pinit.h +1 -1
  268. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-console/adlint_traits.yml +50 -42
  269. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-nonblock/GNUmakefile +1 -1
  270. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-nonblock/adlint_cinit.h +1 -1
  271. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-nonblock/adlint_pinit.h +1 -1
  272. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-nonblock/adlint_traits.yml +50 -42
  273. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-wait/GNUmakefile +1 -1
  274. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-wait/adlint_cinit.h +1 -1
  275. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-wait/adlint_pinit.h +1 -1
  276. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-wait/adlint_traits.yml +50 -42
  277. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-generator/GNUmakefile +1 -1
  278. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-generator/adlint_cinit.h +1 -1
  279. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-generator/adlint_pinit.h +1 -1
  280. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-generator/adlint_traits.yml +50 -42
  281. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-parser/GNUmakefile +1 -1
  282. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-parser/adlint_cinit.h +1 -1
  283. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-parser/adlint_pinit.h +1 -1
  284. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-parser/adlint_traits.yml +50 -42
  285. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-complex/GNUmakefile +1 -1
  286. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-complex/adlint_cinit.h +1 -1
  287. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-complex/adlint_pinit.h +1 -1
  288. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-complex/adlint_traits.yml +50 -42
  289. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-rational/GNUmakefile +1 -1
  290. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-rational/adlint_cinit.h +1 -1
  291. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-rational/adlint_pinit.h +1 -1
  292. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-rational/adlint_traits.yml +50 -42
  293. data/share/sample/ruby-1.9.3-p0/adlint/ext-nkf/GNUmakefile +1 -1
  294. data/share/sample/ruby-1.9.3-p0/adlint/ext-nkf/adlint_cinit.h +1 -1
  295. data/share/sample/ruby-1.9.3-p0/adlint/ext-nkf/adlint_pinit.h +1 -1
  296. data/share/sample/ruby-1.9.3-p0/adlint/ext-nkf/adlint_traits.yml +50 -42
  297. data/share/sample/ruby-1.9.3-p0/adlint/ext-openssl/GNUmakefile +1 -1
  298. data/share/sample/ruby-1.9.3-p0/adlint/ext-openssl/adlint_cinit.h +1 -1
  299. data/share/sample/ruby-1.9.3-p0/adlint/ext-openssl/adlint_pinit.h +1 -1
  300. data/share/sample/ruby-1.9.3-p0/adlint/ext-openssl/adlint_traits.yml +50 -42
  301. data/share/sample/ruby-1.9.3-p0/adlint/ext-pathname/GNUmakefile +1 -1
  302. data/share/sample/ruby-1.9.3-p0/adlint/ext-pathname/adlint_cinit.h +1 -1
  303. data/share/sample/ruby-1.9.3-p0/adlint/ext-pathname/adlint_pinit.h +1 -1
  304. data/share/sample/ruby-1.9.3-p0/adlint/ext-pathname/adlint_traits.yml +50 -42
  305. data/share/sample/ruby-1.9.3-p0/adlint/ext-psych/GNUmakefile +1 -1
  306. data/share/sample/ruby-1.9.3-p0/adlint/ext-psych/adlint_cinit.h +1 -1
  307. data/share/sample/ruby-1.9.3-p0/adlint/ext-psych/adlint_pinit.h +1 -1
  308. data/share/sample/ruby-1.9.3-p0/adlint/ext-psych/adlint_traits.yml +50 -42
  309. data/share/sample/ruby-1.9.3-p0/adlint/ext-pty/GNUmakefile +1 -1
  310. data/share/sample/ruby-1.9.3-p0/adlint/ext-pty/adlint_cinit.h +1 -1
  311. data/share/sample/ruby-1.9.3-p0/adlint/ext-pty/adlint_pinit.h +1 -1
  312. data/share/sample/ruby-1.9.3-p0/adlint/ext-pty/adlint_traits.yml +50 -42
  313. data/share/sample/ruby-1.9.3-p0/adlint/ext-racc-cparse/GNUmakefile +1 -1
  314. data/share/sample/ruby-1.9.3-p0/adlint/ext-racc-cparse/adlint_cinit.h +1 -1
  315. data/share/sample/ruby-1.9.3-p0/adlint/ext-racc-cparse/adlint_pinit.h +1 -1
  316. data/share/sample/ruby-1.9.3-p0/adlint/ext-racc-cparse/adlint_traits.yml +50 -42
  317. data/share/sample/ruby-1.9.3-p0/adlint/ext-readline/GNUmakefile +1 -1
  318. data/share/sample/ruby-1.9.3-p0/adlint/ext-readline/adlint_cinit.h +1 -1
  319. data/share/sample/ruby-1.9.3-p0/adlint/ext-readline/adlint_pinit.h +1 -1
  320. data/share/sample/ruby-1.9.3-p0/adlint/ext-readline/adlint_traits.yml +50 -42
  321. data/share/sample/ruby-1.9.3-p0/adlint/ext-ripper/GNUmakefile +1 -1
  322. data/share/sample/ruby-1.9.3-p0/adlint/ext-ripper/adlint_cinit.h +1 -1
  323. data/share/sample/ruby-1.9.3-p0/adlint/ext-ripper/adlint_pinit.h +1 -1
  324. data/share/sample/ruby-1.9.3-p0/adlint/ext-ripper/adlint_traits.yml +50 -42
  325. data/share/sample/ruby-1.9.3-p0/adlint/ext-sdbm/GNUmakefile +1 -1
  326. data/share/sample/ruby-1.9.3-p0/adlint/ext-sdbm/adlint_cinit.h +1 -1
  327. data/share/sample/ruby-1.9.3-p0/adlint/ext-sdbm/adlint_pinit.h +1 -1
  328. data/share/sample/ruby-1.9.3-p0/adlint/ext-sdbm/adlint_traits.yml +50 -42
  329. data/share/sample/ruby-1.9.3-p0/adlint/ext-socket/GNUmakefile +1 -1
  330. data/share/sample/ruby-1.9.3-p0/adlint/ext-socket/adlint_cinit.h +1 -1
  331. data/share/sample/ruby-1.9.3-p0/adlint/ext-socket/adlint_pinit.h +1 -1
  332. data/share/sample/ruby-1.9.3-p0/adlint/ext-socket/adlint_traits.yml +50 -42
  333. data/share/sample/ruby-1.9.3-p0/adlint/ext-stringio/GNUmakefile +1 -1
  334. data/share/sample/ruby-1.9.3-p0/adlint/ext-stringio/adlint_cinit.h +1 -1
  335. data/share/sample/ruby-1.9.3-p0/adlint/ext-stringio/adlint_pinit.h +1 -1
  336. data/share/sample/ruby-1.9.3-p0/adlint/ext-stringio/adlint_traits.yml +50 -42
  337. data/share/sample/ruby-1.9.3-p0/adlint/ext-strscan/GNUmakefile +1 -1
  338. data/share/sample/ruby-1.9.3-p0/adlint/ext-strscan/adlint_cinit.h +1 -1
  339. data/share/sample/ruby-1.9.3-p0/adlint/ext-strscan/adlint_pinit.h +1 -1
  340. data/share/sample/ruby-1.9.3-p0/adlint/ext-strscan/adlint_traits.yml +50 -42
  341. data/share/sample/ruby-1.9.3-p0/adlint/ext-syck/GNUmakefile +1 -1
  342. data/share/sample/ruby-1.9.3-p0/adlint/ext-syck/adlint_cinit.h +1 -1
  343. data/share/sample/ruby-1.9.3-p0/adlint/ext-syck/adlint_pinit.h +1 -1
  344. data/share/sample/ruby-1.9.3-p0/adlint/ext-syck/adlint_traits.yml +50 -42
  345. data/share/sample/ruby-1.9.3-p0/adlint/ext-syslog/GNUmakefile +1 -1
  346. data/share/sample/ruby-1.9.3-p0/adlint/ext-syslog/adlint_cinit.h +1 -1
  347. data/share/sample/ruby-1.9.3-p0/adlint/ext-syslog/adlint_pinit.h +1 -1
  348. data/share/sample/ruby-1.9.3-p0/adlint/ext-syslog/adlint_traits.yml +50 -42
  349. data/share/sample/ruby-1.9.3-p0/adlint/ext-zlib/GNUmakefile +1 -1
  350. data/share/sample/ruby-1.9.3-p0/adlint/ext-zlib/adlint_cinit.h +1 -1
  351. data/share/sample/ruby-1.9.3-p0/adlint/ext-zlib/adlint_pinit.h +1 -1
  352. data/share/sample/ruby-1.9.3-p0/adlint/ext-zlib/adlint_traits.yml +50 -42
  353. data/share/sample/screen-4.0.3/adlint/GNUmakefile +1 -1
  354. data/share/sample/screen-4.0.3/adlint/adlint_cinit.h +1 -1
  355. data/share/sample/screen-4.0.3/adlint/adlint_pinit.h +1 -1
  356. data/share/sample/screen-4.0.3/adlint/adlint_traits.yml +50 -42
  357. data/share/sample/vim-7.3/adlint/vim/GNUmakefile +1 -1
  358. data/share/sample/vim-7.3/adlint/vim/adlint_cinit.h +1 -1
  359. data/share/sample/vim-7.3/adlint/vim/adlint_pinit.h +1 -1
  360. data/share/sample/vim-7.3/adlint/vim/adlint_traits.yml +50 -42
  361. data/share/sample/vim-7.3/adlint/xxd/GNUmakefile +1 -1
  362. data/share/sample/vim-7.3/adlint/xxd/adlint_cinit.h +1 -1
  363. data/share/sample/vim-7.3/adlint/xxd/adlint_pinit.h +1 -1
  364. data/share/sample/vim-7.3/adlint/xxd/adlint_traits.yml +49 -41
  365. data/share/sample/zsh-4.3.15/adlint/GNUmakefile +1 -1
  366. data/share/sample/zsh-4.3.15/adlint/adlint_traits.yml +46 -38
  367. data/share/sample/zsh-4.3.15/adlint/builtins/GNUmakefile +1 -1
  368. data/share/sample/zsh-4.3.15/adlint/builtins/adlint_cinit.h +1 -1
  369. data/share/sample/zsh-4.3.15/adlint/builtins/adlint_pinit.h +1 -1
  370. data/share/sample/zsh-4.3.15/adlint/builtins/adlint_traits.yml +50 -42
  371. data/share/sample/zsh-4.3.15/adlint/core/GNUmakefile +1 -1
  372. data/share/sample/zsh-4.3.15/adlint/core/adlint_cinit.h +1 -1
  373. data/share/sample/zsh-4.3.15/adlint/core/adlint_pinit.h +1 -1
  374. data/share/sample/zsh-4.3.15/adlint/core/adlint_traits.yml +50 -42
  375. data/share/sample/zsh-4.3.15/adlint/modules/GNUmakefile +1 -1
  376. data/share/sample/zsh-4.3.15/adlint/modules/adlint_cinit.h +1 -1
  377. data/share/sample/zsh-4.3.15/adlint/modules/adlint_pinit.h +1 -1
  378. data/share/sample/zsh-4.3.15/adlint/modules/adlint_traits.yml +50 -42
  379. data/share/sample/zsh-4.3.15/adlint/zle/GNUmakefile +1 -1
  380. data/share/sample/zsh-4.3.15/adlint/zle/adlint_cinit.h +1 -1
  381. data/share/sample/zsh-4.3.15/adlint/zle/adlint_pinit.h +1 -1
  382. data/share/sample/zsh-4.3.15/adlint/zle/adlint_traits.yml +50 -42
  383. data/spec/adlint/{c → cc1}/ctrlexpr_spec.rb +51 -49
  384. data/spec/adlint/{c → cc1}/domain_spec.rb +210 -179
  385. data/spec/adlint/{c → cc1}/operator_spec.rb +3 -3
  386. data/spec/adlint/{c → cc1}/syntax_spec.rb +10 -12
  387. data/spec/adlint/{c → cc1}/type_spec.rb +61 -68
  388. data/{lib/adlint/c.rb → spec/adlint/location_spec.rb} +24 -29
  389. data/spec/conf.d/default_traits.yml +38 -37
  390. data/spec/conf.d/empty_cinit.h +1 -1
  391. data/spec/conf.d/empty_pinit.h +1 -1
  392. data/spec/conf.d/project/foo.c +0 -0
  393. data/spec/spec_helper.rb +2 -2
  394. metadata +60 -40
  395. data/lib/adlint/c/domain.rb +0 -7931
  396. data/lib/adlint/c/lexer.rb +0 -252
  397. data/lib/adlint/c/phase.rb +0 -135
  398. data/lib/adlint/exam/c_builtin/c_check.rb +0 -20745
  399. data/lib/adlint/exam/c_builtin/c_check_shima.rb +0 -983
  400. data/lib/adlint/exam/c_builtin/c_code.rb +0 -477
  401. data/lib/adlint/exam/c_builtin/c_metric.rb +0 -818
@@ -13,7 +13,6 @@ Feature: W0723
13
13
  | mesg | line | column |
14
14
  | W0567 | 2 | 25 |
15
15
  | W0167 | 2 | 45 |
16
- | W9003 | 2 | 45 |
17
16
 
18
17
  Scenario: multiplication of two arbitrary `signed short' values
19
18
  Given a target source named "fixture.c" with:
@@ -124,6 +124,7 @@ Feature: W0745
124
124
  | W0118 | 1 | 12 |
125
125
  | W0117 | 3 | 6 |
126
126
  | W9003 | 6 | 11 |
127
+ | W0023 | 6 | 13 |
127
128
  | W9003 | 6 | 19 |
128
129
  | W0024 | 6 | 17 |
129
130
  | W0745 | 6 | 10 |
@@ -88,6 +88,7 @@ Feature: W0781
88
88
  | W0781 | 11 | 9 |
89
89
  | W1070 | 11 | 9 |
90
90
  | W1070 | 7 | 5 |
91
+ | W9001 | 18 | 5 |
91
92
  | W0628 | 1 | 12 |
92
93
 
93
94
  Scenario: `switch' statement which has only two execution paths and the
@@ -0,0 +1,141 @@
1
+ Feature: W1057
2
+
3
+ W1057 detects that a value of enum typed non-constant expression is assigned
4
+ to the inconsistently enum typed variable.
5
+
6
+ Scenario: assigning a value of the consistently enum typed constant
7
+ expression
8
+ Given a target source named "fixture.c" with:
9
+ """
10
+ enum Color { RED, BLUE, GREEN };
11
+ enum Fruit { APPLE, BANANA, ORANGE, GRAPE };
12
+
13
+ static void foo(void)
14
+ {
15
+ enum Color c = RED;
16
+
17
+ c = BLUE; /* OK */
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 | 4 | 13 |
24
+ | W0629 | 4 | 13 |
25
+ | W0628 | 4 | 13 |
26
+
27
+ Scenario: assigning a value of the consistently enum typed non-constant
28
+ expression
29
+ Given a target source named "fixture.c" with:
30
+ """
31
+ enum Color { RED, BLUE, GREEN };
32
+ enum Fruit { APPLE, BANANA, ORANGE, GRAPE };
33
+
34
+ static void foo(const enum Color p)
35
+ {
36
+ enum Color c = RED;
37
+
38
+ c = p; /* OK */
39
+ }
40
+ """
41
+ When I successfully run `adlint fixture.c` on noarch
42
+ Then the output should exactly match with:
43
+ | mesg | line | column |
44
+ | W1076 | 4 | 13 |
45
+ | W0629 | 4 | 13 |
46
+ | W0628 | 4 | 13 |
47
+
48
+ Scenario: assigning a value of the inconsistently enum typed constant
49
+ expression
50
+ Given a target source named "fixture.c" with:
51
+ """
52
+ enum Color { RED, BLUE, GREEN };
53
+ enum Fruit { APPLE, BANANA, ORANGE, GRAPE };
54
+
55
+ static void foo(void)
56
+ {
57
+ enum Color c = RED;
58
+
59
+ c = ORANGE; /* OK but W0729 */
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 | 4 | 13 |
66
+ | W9003 | 8 | 9 |
67
+ | W0729 | 8 | 7 |
68
+ | W0629 | 4 | 13 |
69
+ | W0628 | 4 | 13 |
70
+
71
+ Scenario: assigning a value of the inconsistently enum typed non-constant
72
+ expression
73
+ Given a target source named "fixture.c" with:
74
+ """
75
+ enum Color { RED, BLUE, GREEN };
76
+ enum Fruit { APPLE, BANANA, ORANGE, GRAPE };
77
+
78
+ static void foo(const enum Fruit f)
79
+ {
80
+ enum Color c = RED;
81
+
82
+ c = f; /* W1057 */
83
+ }
84
+ """
85
+ When I successfully run `adlint fixture.c` on noarch
86
+ Then the output should exactly match with:
87
+ | mesg | line | column |
88
+ | W1076 | 4 | 13 |
89
+ | W0727 | 8 | 9 |
90
+ | W9003 | 8 | 9 |
91
+ | W1057 | 8 | 7 |
92
+ | W1062 | 8 | 7 |
93
+ | W0629 | 4 | 13 |
94
+ | W0628 | 4 | 13 |
95
+
96
+ Scenario: assigning a value of `int' typed constant expression
97
+ Given a target source named "fixture.c" with:
98
+ """
99
+ enum Color { RED, BLUE, GREEN };
100
+ enum Fruit { APPLE, BANANA, ORANGE, GRAPE };
101
+
102
+ static void foo(void)
103
+ {
104
+ enum Color c = RED;
105
+
106
+ c = 2; /* OK but W1054 */
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 | 4 | 13 |
113
+ | W9003 | 8 | 9 |
114
+ | W1054 | 8 | 7 |
115
+ | W0629 | 4 | 13 |
116
+ | W0628 | 4 | 13 |
117
+
118
+ Scenario: assigning a value of `int' typed non-constant expression
119
+ Given a target source named "fixture.c" with:
120
+ """
121
+ enum Color { RED, BLUE, GREEN };
122
+ enum Fruit { APPLE, BANANA, ORANGE, GRAPE };
123
+
124
+ static void foo(const int i)
125
+ {
126
+ enum Color c = RED;
127
+
128
+ c = i + 1; /* OK but W1062 */
129
+ }
130
+ """
131
+ When I successfully run `adlint fixture.c` on noarch
132
+ Then the output should exactly match with:
133
+ | mesg | line | column |
134
+ | W1076 | 4 | 13 |
135
+ | W0723 | 8 | 11 |
136
+ | W0727 | 8 | 11 |
137
+ | W9003 | 8 | 11 |
138
+ | W1054 | 8 | 7 |
139
+ | W1062 | 8 | 7 |
140
+ | W0629 | 4 | 13 |
141
+ | W0628 | 4 | 13 |
@@ -0,0 +1,93 @@
1
+ Feature: W1058
2
+
3
+ W1058 detects that a function of enum return type is returning a value of
4
+ inconsistently enum typed non-constant expression.
5
+
6
+ Scenario: returning a value of the consistently enum typed constant
7
+ expression
8
+ Given a target source named "fixture.c" with:
9
+ """
10
+ enum Color { RED, BLUE, GREEN };
11
+ enum Fruit { APPLE, BANANA, ORANGE, GRAPE };
12
+
13
+ static enum Color foo(void)
14
+ {
15
+ return RED + 1; /* OK */
16
+ }
17
+ """
18
+ When I successfully run `adlint fixture.c` on noarch
19
+ Then the output should exactly match with:
20
+ | mesg | line | column |
21
+ | W1076 | 4 | 19 |
22
+ | W9003 | 6 | 18 |
23
+ | W0629 | 4 | 19 |
24
+ | W0628 | 4 | 19 |
25
+
26
+ Scenario: returning a value of the consistently enum typed non-constant
27
+ expression
28
+ Given a target source named "fixture.c" with:
29
+ """
30
+ enum Color { RED, BLUE, GREEN };
31
+ enum Fruit { APPLE, BANANA, ORANGE, GRAPE };
32
+
33
+ static enum Color foo(const enum Color c)
34
+ {
35
+ return c + 1; /* OK */
36
+ }
37
+ """
38
+ When I successfully run `adlint fixture.c` on noarch
39
+ Then the output should exactly match with:
40
+ | mesg | line | column |
41
+ | W1076 | 4 | 19 |
42
+ | W9003 | 6 | 16 |
43
+ | W0723 | 6 | 14 |
44
+ | W0629 | 4 | 19 |
45
+ | W0628 | 4 | 19 |
46
+
47
+ Scenario: returning a value of the inconsistently enum typed constant
48
+ expression
49
+ Given a target source named "fixture.c" with:
50
+ """
51
+ enum Color { RED, BLUE, GREEN };
52
+ enum Fruit { APPLE, BANANA, ORANGE, GRAPE };
53
+
54
+ static enum Color foo(void)
55
+ {
56
+ return ORANGE + 1; /* OK but W0730 */
57
+ }
58
+ """
59
+ When I successfully run `adlint fixture.c` on noarch
60
+ Then the output should exactly match with:
61
+ | mesg | line | column |
62
+ | W1076 | 4 | 19 |
63
+ | W9003 | 6 | 21 |
64
+ | W0727 | 6 | 19 |
65
+ | W9003 | 6 | 19 |
66
+ | W0730 | 6 | 19 |
67
+ | W0629 | 4 | 19 |
68
+ | W0628 | 4 | 19 |
69
+
70
+ Scenario: returning a value of the inconsistently enum typed non-constant
71
+ expression
72
+ Given a target source named "fixture.c" with:
73
+ """
74
+ enum Color { RED, BLUE, GREEN };
75
+ enum Fruit { APPLE, BANANA, ORANGE, GRAPE };
76
+
77
+ static enum Color foo(const enum Fruit f)
78
+ {
79
+ return f + 1; /* W1058 */
80
+ }
81
+ """
82
+ When I successfully run `adlint fixture.c` on noarch
83
+ Then the output should exactly match with:
84
+ | mesg | line | column |
85
+ | W1076 | 4 | 19 |
86
+ | W9003 | 6 | 16 |
87
+ | W0723 | 6 | 14 |
88
+ | W0727 | 6 | 14 |
89
+ | W9003 | 6 | 14 |
90
+ | W1058 | 6 | 14 |
91
+ | W1063 | 6 | 14 |
92
+ | W0629 | 4 | 19 |
93
+ | W0628 | 4 | 19 |
@@ -0,0 +1,86 @@
1
+ Feature: W1059
2
+
3
+ W1059 detects that a value of enum typed expression is passed to a non-enum
4
+ typed parameter.
5
+
6
+ Scenario: passing a value of the enum typed constant expression
7
+ Given a target source named "fixture.c" with:
8
+ """
9
+ enum Color { RED, BLUE, GREEN };
10
+
11
+ extern void foo(int);
12
+
13
+ static void bar(void)
14
+ {
15
+ foo(RED + 1); /* W1059 */
16
+ }
17
+ """
18
+ When I successfully run `adlint fixture.c` on noarch
19
+ Then the output should exactly match with:
20
+ | mesg | line | column |
21
+ | W0118 | 3 | 13 |
22
+ | W1076 | 5 | 13 |
23
+ | W9003 | 7 | 15 |
24
+ | W9003 | 7 | 13 |
25
+ | W1059 | 7 | 13 |
26
+ | W0629 | 5 | 13 |
27
+ | W0628 | 5 | 13 |
28
+
29
+ Scenario: passing a value of the enum typed non-constant expression
30
+ Given a target source named "fixture.c" with:
31
+ """
32
+ enum Color { RED, BLUE, GREEN };
33
+
34
+ extern void foo(int);
35
+
36
+ static void bar(const enum Color c)
37
+ {
38
+ foo(c); /* W1059 */
39
+ }
40
+ """
41
+ When I successfully run `adlint fixture.c` on noarch
42
+ Then the output should exactly match with:
43
+ | mesg | line | column |
44
+ | W0118 | 3 | 13 |
45
+ | W1076 | 5 | 13 |
46
+ | W9003 | 7 | 9 |
47
+ | W1059 | 7 | 9 |
48
+ | W0629 | 5 | 13 |
49
+ | W0628 | 5 | 13 |
50
+
51
+ Scenario: passing a value of consistently typed constant expression
52
+ Given a target source named "fixture.c" with:
53
+ """
54
+ extern void foo(int);
55
+
56
+ static void bar(void)
57
+ {
58
+ foo(1 + 1); /* OK */
59
+ }
60
+ """
61
+ When I successfully run `adlint fixture.c` on noarch
62
+ Then the output should exactly match with:
63
+ | mesg | line | column |
64
+ | W0118 | 1 | 13 |
65
+ | W1076 | 3 | 13 |
66
+ | W0629 | 3 | 13 |
67
+ | W0628 | 3 | 13 |
68
+
69
+ Scenario: passing a value of inconsistently typed constant expression
70
+ Given a target source named "fixture.c" with:
71
+ """
72
+ extern void foo(int);
73
+
74
+ static void bar(void)
75
+ {
76
+ foo(1.0 * .1); /* OK */
77
+ }
78
+ """
79
+ When I successfully run `adlint fixture.c` on noarch
80
+ Then the output should exactly match with:
81
+ | mesg | line | column |
82
+ | W0118 | 1 | 13 |
83
+ | W1076 | 3 | 13 |
84
+ | W0226 | 5 | 13 |
85
+ | W0629 | 3 | 13 |
86
+ | W0628 | 3 | 13 |
@@ -0,0 +1,77 @@
1
+ Feature: W1060
2
+
3
+ W1060 detects that a function of non-enum return type is returning a value of
4
+ enum typed expression.
5
+
6
+ Scenario: returning a value of the enum typed constant expression
7
+ Given a target source named "fixture.c" with:
8
+ """
9
+ enum Color { RED, BLUE, GREEN };
10
+
11
+ static int bar(void)
12
+ {
13
+ return RED + 1; /* W1060 */
14
+ }
15
+ """
16
+ When I successfully run `adlint fixture.c` on noarch
17
+ Then the output should exactly match with:
18
+ | mesg | line | column |
19
+ | W1076 | 3 | 12 |
20
+ | W9003 | 5 | 18 |
21
+ | W9003 | 5 | 16 |
22
+ | W1060 | 5 | 16 |
23
+ | W0629 | 3 | 12 |
24
+ | W0628 | 3 | 12 |
25
+
26
+ Scenario: returning a value of the enum typed non-constant expression
27
+ Given a target source named "fixture.c" with:
28
+ """
29
+ enum Color { RED, BLUE, GREEN };
30
+
31
+ static int bar(const enum Color c)
32
+ {
33
+ return c + 1; /* W1060 */
34
+ }
35
+ """
36
+ When I successfully run `adlint fixture.c` on noarch
37
+ Then the output should exactly match with:
38
+ | mesg | line | column |
39
+ | W1076 | 3 | 12 |
40
+ | W9003 | 5 | 16 |
41
+ | W0723 | 5 | 14 |
42
+ | W9003 | 5 | 14 |
43
+ | W1060 | 5 | 14 |
44
+ | W0629 | 3 | 12 |
45
+ | W0628 | 3 | 12 |
46
+
47
+ Scenario: returning a value of consistently typed constant expression
48
+ Given a target source named "fixture.c" with:
49
+ """
50
+ static int foo(void)
51
+ {
52
+ return 1 + 1; /* OK */
53
+ }
54
+ """
55
+ When I successfully run `adlint fixture.c` on noarch
56
+ Then the output should exactly match with:
57
+ | mesg | line | column |
58
+ | W1076 | 1 | 12 |
59
+ | W0629 | 1 | 12 |
60
+ | W0628 | 1 | 12 |
61
+
62
+ Scenario: returning a value of inconsistently typed constant expression
63
+ Given a target source named "fixture.c" with:
64
+ """
65
+ static int foo(void)
66
+ {
67
+ return 1.0 * .1; /* OK */
68
+ }
69
+ """
70
+ When I successfully run `adlint fixture.c` on noarch
71
+ Then the output should exactly match with:
72
+ | mesg | line | column |
73
+ | W1076 | 1 | 12 |
74
+ | W0226 | 3 | 16 |
75
+ | W0362 | 3 | 5 |
76
+ | W0629 | 1 | 12 |
77
+ | W0628 | 1 | 12 |
@@ -0,0 +1,143 @@
1
+ Feature: W1061
2
+
3
+ W1061 detects that a value of the inconsistently typed non-constant
4
+ expression is passed to a enum typed parameter.
5
+
6
+ Scenario: non-constant `int' typed expression
7
+ Given a target source named "fixture.c" with:
8
+ """
9
+ enum Color { RED, BLUE, GREEN };
10
+ enum Fruit { APPLE, BANANA, ORANGE, GRAPE };
11
+
12
+ extern void foo(enum Color);
13
+
14
+ static void bar(const int i)
15
+ {
16
+ foo(i + 1); /* W1061 */
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
+ | W0118 | 4 | 13 |
23
+ | W1076 | 6 | 13 |
24
+ | W0723 | 8 | 11 |
25
+ | W0727 | 8 | 11 |
26
+ | W9003 | 8 | 11 |
27
+ | W1061 | 8 | 11 |
28
+ | W0629 | 6 | 13 |
29
+ | W0628 | 6 | 13 |
30
+
31
+ Scenario: non-constant consistent enum typed expression
32
+ Given a target source named "fixture.c" with:
33
+ """
34
+ enum Color { RED, BLUE, GREEN };
35
+ enum Fruit { APPLE, BANANA, ORANGE, GRAPE };
36
+
37
+ extern void foo(enum Color);
38
+
39
+ static void bar(const enum Color c)
40
+ {
41
+ foo(c); /* OK */
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
+ | W0118 | 4 | 13 |
48
+ | W1076 | 6 | 13 |
49
+ | W0629 | 6 | 13 |
50
+ | W0628 | 6 | 13 |
51
+
52
+ Scenario: non-constant inconsistent enum typed expression
53
+ Given a target source named "fixture.c" with:
54
+ """
55
+ enum Color { RED, BLUE, GREEN };
56
+ enum Fruit { APPLE, BANANA, ORANGE, GRAPE };
57
+
58
+ extern void foo(enum Color);
59
+
60
+ static void bar(const enum Fruit f)
61
+ {
62
+ foo(f); /* W1061 */
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
+ | W0118 | 4 | 13 |
69
+ | W1076 | 6 | 13 |
70
+ | W0727 | 8 | 9 |
71
+ | W9003 | 8 | 9 |
72
+ | W1056 | 8 | 9 |
73
+ | W1061 | 8 | 9 |
74
+ | W0629 | 6 | 13 |
75
+ | W0628 | 6 | 13 |
76
+
77
+ Scenario: constant consistent `int' typed expression
78
+ Given a target source named "fixture.c" with:
79
+ """
80
+ enum Color { RED, BLUE, GREEN };
81
+
82
+ extern void foo(enum Color);
83
+
84
+ static void bar(void)
85
+ {
86
+ foo(2); /* OK but W1053 */
87
+ }
88
+ """
89
+ When I successfully run `adlint fixture.c` on noarch
90
+ Then the output should exactly match with:
91
+ | mesg | line | column |
92
+ | W0118 | 3 | 13 |
93
+ | W1076 | 5 | 13 |
94
+ | W9003 | 7 | 9 |
95
+ | W1053 | 7 | 9 |
96
+ | W0629 | 5 | 13 |
97
+ | W0628 | 5 | 13 |
98
+
99
+ Scenario: constant consistent enum typed expression
100
+ Given a target source named "fixture.c" with:
101
+ """
102
+ enum Color { RED, BLUE, GREEN };
103
+
104
+ extern void foo(enum Color);
105
+
106
+ static void bar(void)
107
+ {
108
+ foo(RED + 1); /* OK */
109
+ }
110
+ """
111
+ When I successfully run `adlint fixture.c` on noarch
112
+ Then the output should exactly match with:
113
+ | mesg | line | column |
114
+ | W0118 | 3 | 13 |
115
+ | W1076 | 5 | 13 |
116
+ | W9003 | 7 | 15 |
117
+ | W0629 | 5 | 13 |
118
+ | W0628 | 5 | 13 |
119
+
120
+ Scenario: constant inconsistent enum typed expression
121
+ Given a target source named "fixture.c" with:
122
+ """
123
+ enum Color { RED, BLUE, GREEN };
124
+ enum Fruit { APPLE, BANANA, ORANGE, GRAPE };
125
+
126
+ extern void foo(enum Color);
127
+
128
+ static void bar(void)
129
+ {
130
+ foo(ORANGE + 1); /* OK but W0728 */
131
+ }
132
+ """
133
+ When I successfully run `adlint fixture.c` on noarch
134
+ Then the output should exactly match with:
135
+ | mesg | line | column |
136
+ | W0118 | 4 | 13 |
137
+ | W1076 | 6 | 13 |
138
+ | W9003 | 8 | 18 |
139
+ | W0727 | 8 | 16 |
140
+ | W9003 | 8 | 16 |
141
+ | W0728 | 8 | 16 |
142
+ | W0629 | 6 | 13 |
143
+ | W0628 | 6 | 13 |