adlint 2.6.14 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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 |