adlint 3.2.0 → 3.2.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (371) hide show
  1. checksums.yaml +7 -0
  2. data/AUTHORS +1 -2
  3. data/ChangeLog +196 -5236
  4. data/INSTALL +1 -1
  5. data/MANIFEST +4 -2
  6. data/NEWS +30 -13
  7. data/README +2 -2
  8. data/Rakefile +2 -2
  9. data/TODO +1 -1
  10. data/bin/adlint +2 -2
  11. data/bin/adlint_chk +2 -2
  12. data/bin/adlint_cma +2 -2
  13. data/bin/adlint_sma +2 -2
  14. data/bin/adlintize +2 -2
  15. data/etc/conf.d/fallback/cinit.erb +1 -1
  16. data/etc/conf.d/fallback/traits.erb +1 -1
  17. data/etc/conf.d/i686-cygwin/cinit-gcc_4.3.4.erb +1 -1
  18. data/etc/conf.d/i686-cygwin/traits-gcc_4.3.4.erb +1 -1
  19. data/etc/conf.d/i686-devkit/cinit-gcc_4.5.2.erb +1 -1
  20. data/etc/conf.d/i686-devkit/traits-gcc_4.5.2.erb +1 -1
  21. data/etc/conf.d/i686-linux/cinit-gcc_4.5.1.erb +1 -1
  22. data/etc/conf.d/i686-linux/traits-gcc_4.5.1.erb +1 -1
  23. data/etc/conf.d/i686-mingw/cinit-gcc_4.6.1.erb +1 -1
  24. data/etc/conf.d/i686-mingw/traits-gcc_4.6.1.erb +1 -1
  25. data/etc/conf.d/noarch/GNUmakefile.erb +1 -1
  26. data/etc/conf.d/noarch/adlint_all_bat.erb +1 -1
  27. data/etc/conf.d/noarch/adlint_all_sh.erb +1 -1
  28. data/etc/conf.d/noarch/pinit.erb +1 -1
  29. data/etc/conf.d/x86_64-centos_6.4/cinit-gcc_4.4.7.erb +150 -0
  30. data/etc/conf.d/x86_64-centos_6.4/traits-gcc_4.4.7.erb +290 -0
  31. data/etc/conf.d/x86_64-ubuntu_12.04/cinit-gcc_4.6.3.erb +1 -1
  32. data/etc/conf.d/x86_64-ubuntu_12.04/traits-gcc_4.6.3.erb +1 -1
  33. data/etc/mesg.d/c_builtin/en_US/messages.yml +2 -2
  34. data/etc/mesg.d/c_builtin/ja_JP/messages.yml +3 -3
  35. data/etc/mesg.d/core/en_US/messages.yml +6 -2
  36. data/etc/mesg.d/core/ja_JP/messages.yml +6 -2
  37. data/features/code_check/E0008.feature +122 -0
  38. data/features/code_check/E0016.feature +49 -0
  39. data/features/code_check/E0018.feature +99 -0
  40. data/features/code_check/W0460.feature +8 -8
  41. data/lib/adlint.rb +2 -2
  42. data/lib/adlint/analyzer.rb +2 -2
  43. data/lib/adlint/annot.rb +2 -2
  44. data/lib/adlint/cc1.rb +2 -2
  45. data/lib/adlint/cc1/branch.rb +2 -2
  46. data/lib/adlint/cc1/builtin.rb +2 -2
  47. data/lib/adlint/cc1/const.rb +2 -2
  48. data/lib/adlint/cc1/conv.rb +2 -2
  49. data/lib/adlint/cc1/ctrlexpr.rb +2 -2
  50. data/lib/adlint/cc1/domain.rb +2 -2
  51. data/lib/adlint/cc1/enum.rb +2 -2
  52. data/lib/adlint/cc1/environ.rb +2 -2
  53. data/lib/adlint/cc1/expr.rb +110 -48
  54. data/lib/adlint/cc1/format.rb +2 -2
  55. data/lib/adlint/cc1/interp.rb +46 -12
  56. data/lib/adlint/cc1/lexer.rb +44 -11
  57. data/lib/adlint/cc1/mediator.rb +16 -2
  58. data/lib/adlint/cc1/object.rb +2 -2
  59. data/lib/adlint/cc1/operator.rb +2 -2
  60. data/lib/adlint/cc1/option.rb +3 -3
  61. data/lib/adlint/cc1/parser.rb +1011 -999
  62. data/lib/adlint/cc1/parser.y +20 -11
  63. data/lib/adlint/cc1/phase.rb +2 -2
  64. data/lib/adlint/cc1/resolver.rb +2 -2
  65. data/lib/adlint/cc1/scanner.rb +2 -2
  66. data/lib/adlint/cc1/scope.rb +2 -2
  67. data/lib/adlint/cc1/seqp.rb +2 -2
  68. data/lib/adlint/cc1/syntax.rb +42 -10
  69. data/lib/adlint/cc1/trace.rb +2 -2
  70. data/lib/adlint/cc1/type.rb +72 -2
  71. data/lib/adlint/cc1/util.rb +2 -2
  72. data/lib/adlint/cc1/value.rb +9 -3
  73. data/lib/adlint/code.rb +2 -2
  74. data/lib/adlint/cpp.rb +2 -2
  75. data/lib/adlint/cpp/asm.rb +2 -2
  76. data/lib/adlint/cpp/constexpr.rb +1 -1
  77. data/lib/adlint/cpp/constexpr.y +2 -2
  78. data/lib/adlint/cpp/eval.rb +2 -2
  79. data/lib/adlint/cpp/lexer.rb +13 -3
  80. data/lib/adlint/cpp/macro.rb +2 -2
  81. data/lib/adlint/cpp/phase.rb +2 -2
  82. data/lib/adlint/cpp/scanner.rb +2 -2
  83. data/lib/adlint/cpp/source.rb +2 -2
  84. data/lib/adlint/cpp/subst.rb +6 -2
  85. data/lib/adlint/cpp/syntax.rb +2 -2
  86. data/lib/adlint/cpp/util.rb +2 -2
  87. data/lib/adlint/driver.rb +2 -2
  88. data/lib/adlint/error.rb +2 -2
  89. data/lib/adlint/exam.rb +20 -8
  90. data/lib/adlint/exam/c_builtin.rb +4 -6
  91. data/lib/adlint/exam/c_builtin/cc1_check.rb +1380 -461
  92. data/lib/adlint/exam/c_builtin/cc1_code.rb +25 -25
  93. data/lib/adlint/exam/c_builtin/cc1_metric.rb +180 -209
  94. data/lib/adlint/exam/c_builtin/cpp_check.rb +211 -50
  95. data/lib/adlint/exam/c_builtin/cpp_code.rb +19 -19
  96. data/lib/adlint/exam/c_builtin/ld_check.rb +2 -2
  97. data/lib/adlint/exam/c_builtin/ld_metric.rb +2 -2
  98. data/lib/adlint/lang.rb +2 -2
  99. data/lib/adlint/ld.rb +2 -2
  100. data/lib/adlint/ld/object.rb +3 -3
  101. data/lib/adlint/ld/phase.rb +2 -2
  102. data/lib/adlint/ld/typedef.rb +2 -2
  103. data/lib/adlint/ld/util.rb +2 -2
  104. data/lib/adlint/lexer.rb +2 -2
  105. data/lib/adlint/location.rb +2 -2
  106. data/lib/adlint/memo.rb +2 -2
  107. data/lib/adlint/message.rb +2 -2
  108. data/lib/adlint/metric.rb +2 -2
  109. data/lib/adlint/monitor.rb +2 -2
  110. data/lib/adlint/phase.rb +2 -2
  111. data/lib/adlint/prelude.rb +2 -2
  112. data/lib/adlint/report.rb +4 -4
  113. data/lib/adlint/source.rb +2 -2
  114. data/lib/adlint/supp.rb +2 -2
  115. data/lib/adlint/symbol.rb +2 -2
  116. data/lib/adlint/token.rb +2 -2
  117. data/lib/adlint/traits.rb +2 -2
  118. data/lib/adlint/util.rb +2 -2
  119. data/lib/adlint/version.rb +6 -6
  120. data/share/HEADER +2 -2
  121. data/share/doc/developers_guide_ja.html +20 -9
  122. data/share/doc/developers_guide_ja.texi +18 -7
  123. data/share/doc/samples/GNUmakefile +1 -1
  124. data/share/doc/samples/adlint_traits.yml +1 -1
  125. data/share/doc/users_guide_en.html +6177 -6138
  126. data/share/doc/users_guide_en.texi +35 -5
  127. data/share/doc/users_guide_ja.html +6192 -6153
  128. data/share/doc/users_guide_ja.texi +35 -5
  129. data/share/sample/bison-2.5/adlint/GNUmakefile +1 -1
  130. data/share/sample/bison-2.5/adlint/adlint_traits.yml +1 -1
  131. data/share/sample/bison-2.5/adlint/lib/GNUmakefile +1 -1
  132. data/share/sample/bison-2.5/adlint/lib/adlint_cinit.h +1 -1
  133. data/share/sample/bison-2.5/adlint/lib/adlint_pinit.h +1 -1
  134. data/share/sample/bison-2.5/adlint/lib/adlint_traits.yml +1 -1
  135. data/share/sample/bison-2.5/adlint/src/GNUmakefile +1 -1
  136. data/share/sample/bison-2.5/adlint/src/adlint_cinit.h +1 -1
  137. data/share/sample/bison-2.5/adlint/src/adlint_pinit.h +1 -1
  138. data/share/sample/bison-2.5/adlint/src/adlint_traits.yml +1 -1
  139. data/share/sample/ctags-5.8/adlint/GNUmakefile +1 -1
  140. data/share/sample/ctags-5.8/adlint/adlint_cinit.h +1 -1
  141. data/share/sample/ctags-5.8/adlint/adlint_pinit.h +1 -1
  142. data/share/sample/ctags-5.8/adlint/adlint_traits.yml +1 -1
  143. data/share/sample/flex-2.5.35/adlint/GNUmakefile +1 -1
  144. data/share/sample/flex-2.5.35/adlint/adlint_cinit.h +1 -1
  145. data/share/sample/flex-2.5.35/adlint/adlint_pinit.h +1 -1
  146. data/share/sample/flex-2.5.35/adlint/adlint_traits.yml +1 -1
  147. data/share/sample/ruby-1.9.3-p0/adlint/GNUmakefile +1 -1
  148. data/share/sample/ruby-1.9.3-p0/adlint/adlint_traits.yml +1 -1
  149. data/share/sample/ruby-1.9.3-p0/adlint/core/GNUmakefile +1 -1
  150. data/share/sample/ruby-1.9.3-p0/adlint/core/adlint_cinit.h +1 -1
  151. data/share/sample/ruby-1.9.3-p0/adlint/core/adlint_pinit.h +1 -1
  152. data/share/sample/ruby-1.9.3-p0/adlint/core/adlint_traits.yml +1 -1
  153. data/share/sample/ruby-1.9.3-p0/adlint/enc-trans/GNUmakefile +1 -1
  154. data/share/sample/ruby-1.9.3-p0/adlint/enc-trans/adlint_cinit.h +1 -1
  155. data/share/sample/ruby-1.9.3-p0/adlint/enc-trans/adlint_pinit.h +1 -1
  156. data/share/sample/ruby-1.9.3-p0/adlint/enc-trans/adlint_traits.yml +1 -1
  157. data/share/sample/ruby-1.9.3-p0/adlint/enc/GNUmakefile +1 -1
  158. data/share/sample/ruby-1.9.3-p0/adlint/enc/adlint_cinit.h +1 -1
  159. data/share/sample/ruby-1.9.3-p0/adlint/enc/adlint_pinit.h +1 -1
  160. data/share/sample/ruby-1.9.3-p0/adlint/enc/adlint_traits.yml +1 -1
  161. data/share/sample/ruby-1.9.3-p0/adlint/ext-bigdecimal/GNUmakefile +1 -1
  162. data/share/sample/ruby-1.9.3-p0/adlint/ext-bigdecimal/adlint_cinit.h +1 -1
  163. data/share/sample/ruby-1.9.3-p0/adlint/ext-bigdecimal/adlint_pinit.h +1 -1
  164. data/share/sample/ruby-1.9.3-p0/adlint/ext-bigdecimal/adlint_traits.yml +1 -1
  165. data/share/sample/ruby-1.9.3-p0/adlint/ext-continuation/GNUmakefile +1 -1
  166. data/share/sample/ruby-1.9.3-p0/adlint/ext-continuation/adlint_cinit.h +1 -1
  167. data/share/sample/ruby-1.9.3-p0/adlint/ext-continuation/adlint_pinit.h +1 -1
  168. data/share/sample/ruby-1.9.3-p0/adlint/ext-continuation/adlint_traits.yml +1 -1
  169. data/share/sample/ruby-1.9.3-p0/adlint/ext-coverage/GNUmakefile +1 -1
  170. data/share/sample/ruby-1.9.3-p0/adlint/ext-coverage/adlint_cinit.h +1 -1
  171. data/share/sample/ruby-1.9.3-p0/adlint/ext-coverage/adlint_pinit.h +1 -1
  172. data/share/sample/ruby-1.9.3-p0/adlint/ext-coverage/adlint_traits.yml +1 -1
  173. data/share/sample/ruby-1.9.3-p0/adlint/ext-curses/GNUmakefile +1 -1
  174. data/share/sample/ruby-1.9.3-p0/adlint/ext-curses/adlint_cinit.h +1 -1
  175. data/share/sample/ruby-1.9.3-p0/adlint/ext-curses/adlint_pinit.h +1 -1
  176. data/share/sample/ruby-1.9.3-p0/adlint/ext-curses/adlint_traits.yml +1 -1
  177. data/share/sample/ruby-1.9.3-p0/adlint/ext-date/GNUmakefile +1 -1
  178. data/share/sample/ruby-1.9.3-p0/adlint/ext-date/adlint_cinit.h +1 -1
  179. data/share/sample/ruby-1.9.3-p0/adlint/ext-date/adlint_pinit.h +1 -1
  180. data/share/sample/ruby-1.9.3-p0/adlint/ext-date/adlint_traits.yml +1 -1
  181. data/share/sample/ruby-1.9.3-p0/adlint/ext-dbm/GNUmakefile +1 -1
  182. data/share/sample/ruby-1.9.3-p0/adlint/ext-dbm/adlint_cinit.h +1 -1
  183. data/share/sample/ruby-1.9.3-p0/adlint/ext-dbm/adlint_pinit.h +1 -1
  184. data/share/sample/ruby-1.9.3-p0/adlint/ext-dbm/adlint_traits.yml +1 -1
  185. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-bubblebabble/GNUmakefile +1 -1
  186. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-bubblebabble/adlint_cinit.h +1 -1
  187. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-bubblebabble/adlint_pinit.h +1 -1
  188. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-bubblebabble/adlint_traits.yml +1 -1
  189. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-md5/GNUmakefile +1 -1
  190. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-md5/adlint_cinit.h +1 -1
  191. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-md5/adlint_pinit.h +1 -1
  192. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-md5/adlint_traits.yml +1 -1
  193. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-rmd160/GNUmakefile +1 -1
  194. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-rmd160/adlint_cinit.h +1 -1
  195. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-rmd160/adlint_pinit.h +1 -1
  196. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-rmd160/adlint_traits.yml +1 -1
  197. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha1/GNUmakefile +1 -1
  198. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha1/adlint_cinit.h +1 -1
  199. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha1/adlint_pinit.h +1 -1
  200. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha1/adlint_traits.yml +1 -1
  201. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha2/GNUmakefile +1 -1
  202. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha2/adlint_cinit.h +1 -1
  203. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha2/adlint_pinit.h +1 -1
  204. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha2/adlint_traits.yml +1 -1
  205. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest/GNUmakefile +1 -1
  206. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest/adlint_cinit.h +1 -1
  207. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest/adlint_pinit.h +1 -1
  208. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest/adlint_traits.yml +1 -1
  209. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl-callback/GNUmakefile +1 -1
  210. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl-callback/adlint_cinit.h +1 -1
  211. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl-callback/adlint_pinit.h +1 -1
  212. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl-callback/adlint_traits.yml +1 -1
  213. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl/GNUmakefile +1 -1
  214. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl/adlint_cinit.h +1 -1
  215. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl/adlint_pinit.h +1 -1
  216. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl/adlint_traits.yml +1 -1
  217. data/share/sample/ruby-1.9.3-p0/adlint/ext-etc/GNUmakefile +1 -1
  218. data/share/sample/ruby-1.9.3-p0/adlint/ext-etc/adlint_cinit.h +1 -1
  219. data/share/sample/ruby-1.9.3-p0/adlint/ext-etc/adlint_pinit.h +1 -1
  220. data/share/sample/ruby-1.9.3-p0/adlint/ext-etc/adlint_traits.yml +1 -1
  221. data/share/sample/ruby-1.9.3-p0/adlint/ext-fcntl/GNUmakefile +1 -1
  222. data/share/sample/ruby-1.9.3-p0/adlint/ext-fcntl/adlint_cinit.h +1 -1
  223. data/share/sample/ruby-1.9.3-p0/adlint/ext-fcntl/adlint_pinit.h +1 -1
  224. data/share/sample/ruby-1.9.3-p0/adlint/ext-fcntl/adlint_traits.yml +1 -1
  225. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiber/GNUmakefile +1 -1
  226. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiber/adlint_cinit.h +1 -1
  227. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiber/adlint_pinit.h +1 -1
  228. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiber/adlint_traits.yml +1 -1
  229. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiddle/GNUmakefile +1 -1
  230. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiddle/adlint_cinit.h +1 -1
  231. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiddle/adlint_pinit.h +1 -1
  232. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiddle/adlint_traits.yml +1 -1
  233. data/share/sample/ruby-1.9.3-p0/adlint/ext-gdbm/GNUmakefile +1 -1
  234. data/share/sample/ruby-1.9.3-p0/adlint/ext-gdbm/adlint_cinit.h +1 -1
  235. data/share/sample/ruby-1.9.3-p0/adlint/ext-gdbm/adlint_pinit.h +1 -1
  236. data/share/sample/ruby-1.9.3-p0/adlint/ext-gdbm/adlint_traits.yml +1 -1
  237. data/share/sample/ruby-1.9.3-p0/adlint/ext-iconv/GNUmakefile +1 -1
  238. data/share/sample/ruby-1.9.3-p0/adlint/ext-iconv/adlint_cinit.h +1 -1
  239. data/share/sample/ruby-1.9.3-p0/adlint/ext-iconv/adlint_pinit.h +1 -1
  240. data/share/sample/ruby-1.9.3-p0/adlint/ext-iconv/adlint_traits.yml +1 -1
  241. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-console/GNUmakefile +1 -1
  242. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-console/adlint_cinit.h +1 -1
  243. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-console/adlint_pinit.h +1 -1
  244. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-console/adlint_traits.yml +1 -1
  245. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-nonblock/GNUmakefile +1 -1
  246. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-nonblock/adlint_cinit.h +1 -1
  247. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-nonblock/adlint_pinit.h +1 -1
  248. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-nonblock/adlint_traits.yml +1 -1
  249. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-wait/GNUmakefile +1 -1
  250. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-wait/adlint_cinit.h +1 -1
  251. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-wait/adlint_pinit.h +1 -1
  252. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-wait/adlint_traits.yml +1 -1
  253. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-generator/GNUmakefile +1 -1
  254. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-generator/adlint_cinit.h +1 -1
  255. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-generator/adlint_pinit.h +1 -1
  256. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-generator/adlint_traits.yml +1 -1
  257. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-parser/GNUmakefile +1 -1
  258. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-parser/adlint_cinit.h +1 -1
  259. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-parser/adlint_pinit.h +1 -1
  260. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-parser/adlint_traits.yml +1 -1
  261. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-complex/GNUmakefile +1 -1
  262. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-complex/adlint_cinit.h +1 -1
  263. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-complex/adlint_pinit.h +1 -1
  264. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-complex/adlint_traits.yml +1 -1
  265. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-rational/GNUmakefile +1 -1
  266. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-rational/adlint_cinit.h +1 -1
  267. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-rational/adlint_pinit.h +1 -1
  268. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-rational/adlint_traits.yml +1 -1
  269. data/share/sample/ruby-1.9.3-p0/adlint/ext-nkf/GNUmakefile +1 -1
  270. data/share/sample/ruby-1.9.3-p0/adlint/ext-nkf/adlint_cinit.h +1 -1
  271. data/share/sample/ruby-1.9.3-p0/adlint/ext-nkf/adlint_pinit.h +1 -1
  272. data/share/sample/ruby-1.9.3-p0/adlint/ext-nkf/adlint_traits.yml +1 -1
  273. data/share/sample/ruby-1.9.3-p0/adlint/ext-openssl/GNUmakefile +1 -1
  274. data/share/sample/ruby-1.9.3-p0/adlint/ext-openssl/adlint_cinit.h +1 -1
  275. data/share/sample/ruby-1.9.3-p0/adlint/ext-openssl/adlint_pinit.h +1 -1
  276. data/share/sample/ruby-1.9.3-p0/adlint/ext-openssl/adlint_traits.yml +1 -1
  277. data/share/sample/ruby-1.9.3-p0/adlint/ext-pathname/GNUmakefile +1 -1
  278. data/share/sample/ruby-1.9.3-p0/adlint/ext-pathname/adlint_cinit.h +1 -1
  279. data/share/sample/ruby-1.9.3-p0/adlint/ext-pathname/adlint_pinit.h +1 -1
  280. data/share/sample/ruby-1.9.3-p0/adlint/ext-pathname/adlint_traits.yml +1 -1
  281. data/share/sample/ruby-1.9.3-p0/adlint/ext-psych/GNUmakefile +1 -1
  282. data/share/sample/ruby-1.9.3-p0/adlint/ext-psych/adlint_cinit.h +1 -1
  283. data/share/sample/ruby-1.9.3-p0/adlint/ext-psych/adlint_pinit.h +1 -1
  284. data/share/sample/ruby-1.9.3-p0/adlint/ext-psych/adlint_traits.yml +1 -1
  285. data/share/sample/ruby-1.9.3-p0/adlint/ext-pty/GNUmakefile +1 -1
  286. data/share/sample/ruby-1.9.3-p0/adlint/ext-pty/adlint_cinit.h +1 -1
  287. data/share/sample/ruby-1.9.3-p0/adlint/ext-pty/adlint_pinit.h +1 -1
  288. data/share/sample/ruby-1.9.3-p0/adlint/ext-pty/adlint_traits.yml +1 -1
  289. data/share/sample/ruby-1.9.3-p0/adlint/ext-racc-cparse/GNUmakefile +1 -1
  290. data/share/sample/ruby-1.9.3-p0/adlint/ext-racc-cparse/adlint_cinit.h +1 -1
  291. data/share/sample/ruby-1.9.3-p0/adlint/ext-racc-cparse/adlint_pinit.h +1 -1
  292. data/share/sample/ruby-1.9.3-p0/adlint/ext-racc-cparse/adlint_traits.yml +1 -1
  293. data/share/sample/ruby-1.9.3-p0/adlint/ext-readline/GNUmakefile +1 -1
  294. data/share/sample/ruby-1.9.3-p0/adlint/ext-readline/adlint_cinit.h +1 -1
  295. data/share/sample/ruby-1.9.3-p0/adlint/ext-readline/adlint_pinit.h +1 -1
  296. data/share/sample/ruby-1.9.3-p0/adlint/ext-readline/adlint_traits.yml +1 -1
  297. data/share/sample/ruby-1.9.3-p0/adlint/ext-ripper/GNUmakefile +1 -1
  298. data/share/sample/ruby-1.9.3-p0/adlint/ext-ripper/adlint_cinit.h +1 -1
  299. data/share/sample/ruby-1.9.3-p0/adlint/ext-ripper/adlint_pinit.h +1 -1
  300. data/share/sample/ruby-1.9.3-p0/adlint/ext-ripper/adlint_traits.yml +1 -1
  301. data/share/sample/ruby-1.9.3-p0/adlint/ext-sdbm/GNUmakefile +1 -1
  302. data/share/sample/ruby-1.9.3-p0/adlint/ext-sdbm/adlint_cinit.h +1 -1
  303. data/share/sample/ruby-1.9.3-p0/adlint/ext-sdbm/adlint_pinit.h +1 -1
  304. data/share/sample/ruby-1.9.3-p0/adlint/ext-sdbm/adlint_traits.yml +1 -1
  305. data/share/sample/ruby-1.9.3-p0/adlint/ext-socket/GNUmakefile +1 -1
  306. data/share/sample/ruby-1.9.3-p0/adlint/ext-socket/adlint_cinit.h +1 -1
  307. data/share/sample/ruby-1.9.3-p0/adlint/ext-socket/adlint_pinit.h +1 -1
  308. data/share/sample/ruby-1.9.3-p0/adlint/ext-socket/adlint_traits.yml +1 -1
  309. data/share/sample/ruby-1.9.3-p0/adlint/ext-stringio/GNUmakefile +1 -1
  310. data/share/sample/ruby-1.9.3-p0/adlint/ext-stringio/adlint_cinit.h +1 -1
  311. data/share/sample/ruby-1.9.3-p0/adlint/ext-stringio/adlint_pinit.h +1 -1
  312. data/share/sample/ruby-1.9.3-p0/adlint/ext-stringio/adlint_traits.yml +1 -1
  313. data/share/sample/ruby-1.9.3-p0/adlint/ext-strscan/GNUmakefile +1 -1
  314. data/share/sample/ruby-1.9.3-p0/adlint/ext-strscan/adlint_cinit.h +1 -1
  315. data/share/sample/ruby-1.9.3-p0/adlint/ext-strscan/adlint_pinit.h +1 -1
  316. data/share/sample/ruby-1.9.3-p0/adlint/ext-strscan/adlint_traits.yml +1 -1
  317. data/share/sample/ruby-1.9.3-p0/adlint/ext-syck/GNUmakefile +1 -1
  318. data/share/sample/ruby-1.9.3-p0/adlint/ext-syck/adlint_cinit.h +1 -1
  319. data/share/sample/ruby-1.9.3-p0/adlint/ext-syck/adlint_pinit.h +1 -1
  320. data/share/sample/ruby-1.9.3-p0/adlint/ext-syck/adlint_traits.yml +1 -1
  321. data/share/sample/ruby-1.9.3-p0/adlint/ext-syslog/GNUmakefile +1 -1
  322. data/share/sample/ruby-1.9.3-p0/adlint/ext-syslog/adlint_cinit.h +1 -1
  323. data/share/sample/ruby-1.9.3-p0/adlint/ext-syslog/adlint_pinit.h +1 -1
  324. data/share/sample/ruby-1.9.3-p0/adlint/ext-syslog/adlint_traits.yml +1 -1
  325. data/share/sample/ruby-1.9.3-p0/adlint/ext-zlib/GNUmakefile +1 -1
  326. data/share/sample/ruby-1.9.3-p0/adlint/ext-zlib/adlint_cinit.h +1 -1
  327. data/share/sample/ruby-1.9.3-p0/adlint/ext-zlib/adlint_pinit.h +1 -1
  328. data/share/sample/ruby-1.9.3-p0/adlint/ext-zlib/adlint_traits.yml +1 -1
  329. data/share/sample/screen-4.0.3/adlint/GNUmakefile +1 -1
  330. data/share/sample/screen-4.0.3/adlint/adlint_cinit.h +1 -1
  331. data/share/sample/screen-4.0.3/adlint/adlint_pinit.h +1 -1
  332. data/share/sample/screen-4.0.3/adlint/adlint_traits.yml +1 -1
  333. data/share/sample/vim-7.3/adlint/vim/GNUmakefile +1 -1
  334. data/share/sample/vim-7.3/adlint/vim/adlint_cinit.h +1 -1
  335. data/share/sample/vim-7.3/adlint/vim/adlint_pinit.h +1 -1
  336. data/share/sample/vim-7.3/adlint/vim/adlint_traits.yml +1 -1
  337. data/share/sample/vim-7.3/adlint/xxd/GNUmakefile +1 -1
  338. data/share/sample/vim-7.3/adlint/xxd/adlint_cinit.h +1 -1
  339. data/share/sample/vim-7.3/adlint/xxd/adlint_pinit.h +1 -1
  340. data/share/sample/vim-7.3/adlint/xxd/adlint_traits.yml +1 -1
  341. data/share/sample/zsh-4.3.15/adlint/GNUmakefile +1 -1
  342. data/share/sample/zsh-4.3.15/adlint/adlint_traits.yml +1 -1
  343. data/share/sample/zsh-4.3.15/adlint/builtins/GNUmakefile +1 -1
  344. data/share/sample/zsh-4.3.15/adlint/builtins/adlint_cinit.h +1 -1
  345. data/share/sample/zsh-4.3.15/adlint/builtins/adlint_pinit.h +1 -1
  346. data/share/sample/zsh-4.3.15/adlint/builtins/adlint_traits.yml +1 -1
  347. data/share/sample/zsh-4.3.15/adlint/core/GNUmakefile +1 -1
  348. data/share/sample/zsh-4.3.15/adlint/core/adlint_cinit.h +1 -1
  349. data/share/sample/zsh-4.3.15/adlint/core/adlint_pinit.h +1 -1
  350. data/share/sample/zsh-4.3.15/adlint/core/adlint_traits.yml +1 -1
  351. data/share/sample/zsh-4.3.15/adlint/modules/GNUmakefile +1 -1
  352. data/share/sample/zsh-4.3.15/adlint/modules/adlint_cinit.h +1 -1
  353. data/share/sample/zsh-4.3.15/adlint/modules/adlint_pinit.h +1 -1
  354. data/share/sample/zsh-4.3.15/adlint/modules/adlint_traits.yml +1 -1
  355. data/share/sample/zsh-4.3.15/adlint/zle/GNUmakefile +1 -1
  356. data/share/sample/zsh-4.3.15/adlint/zle/adlint_cinit.h +1 -1
  357. data/share/sample/zsh-4.3.15/adlint/zle/adlint_pinit.h +1 -1
  358. data/share/sample/zsh-4.3.15/adlint/zle/adlint_traits.yml +1 -1
  359. data/spec/adlint/cc1/ctrlexpr_spec.rb +3 -3
  360. data/spec/adlint/cc1/domain_spec.rb +2 -2
  361. data/spec/adlint/cc1/operator_spec.rb +2 -2
  362. data/spec/adlint/cc1/syntax_spec.rb +4 -4
  363. data/spec/adlint/cc1/type_spec.rb +2 -2
  364. data/spec/adlint/location_spec.rb +2 -2
  365. data/spec/conf.d/default_traits.yml +1 -1
  366. data/spec/conf.d/empty_cinit.h +1 -1
  367. data/spec/conf.d/empty_pinit.h +1 -1
  368. data/spec/spec_helper.rb +2 -2
  369. metadata +29 -28
  370. data/lib/adlint/exam/c_builtin/cc1_check_shima.rb +0 -963
  371. data/lib/adlint/exam/c_builtin/cpp_check_shima.rb +0 -204
@@ -1,7 +1,7 @@
1
1
  # adlint-exam-c_builtin examination package loader.
2
2
  #
3
3
  # Author:: Yutaka Yanoh <mailto:yanoh@users.sourceforge.net>
4
- # Copyright:: Copyright (C) 2010-2013, OGIS-RI Co.,Ltd.
4
+ # Copyright:: Copyright (C) 2010-2014, OGIS-RI Co.,Ltd.
5
5
  # License:: GPLv3+: GNU General Public License version 3 or later
6
6
  #
7
7
  # Owner:: Yutaka Yanoh <mailto:yanoh@users.sourceforge.net>
@@ -11,7 +11,7 @@
11
11
  # / | / _ |/ / / / | / /__ __/ Source Code Static Analyzer
12
12
  # / /| | / / / / / / / |/ / / / AdLint - Advanced Lint
13
13
  # / __ |/ /_/ / /___/ / /| / / /
14
- # /_/ |_|_____/_____/_/_/ |_/ /_/ Copyright (C) 2010-2013, OGIS-RI Co.,Ltd.
14
+ # /_/ |_|_____/_____/_/_/ |_/ /_/ Copyright (C) 2010-2014, OGIS-RI Co.,Ltd.
15
15
  #
16
16
  # This file is part of AdLint.
17
17
  #
@@ -33,11 +33,9 @@ require "adlint"
33
33
 
34
34
  require "adlint/exam/c_builtin/cc1_code"
35
35
  require "adlint/exam/c_builtin/cc1_check"
36
- require "adlint/exam/c_builtin/cc1_check_shima"
37
36
  require "adlint/exam/c_builtin/cc1_metric"
38
37
  require "adlint/exam/c_builtin/cpp_code"
39
38
  require "adlint/exam/c_builtin/cpp_check"
40
- require "adlint/exam/c_builtin/cpp_check_shima"
41
39
  require "adlint/exam/c_builtin/ld_check"
42
40
  require "adlint/exam/c_builtin/ld_metric"
43
41
 
@@ -790,8 +788,8 @@ module CBuiltin #:nodoc:
790
788
  FN_CYCM,
791
789
  FN_CALL,
792
790
 
793
- TypeDeclExtraction,
794
- GVarDeclExtraction,
791
+ TypeDclExtraction,
792
+ GVarDclExtraction,
795
793
  FunDclExtraction,
796
794
  VarDefExtraction,
797
795
  FunDefExtraction,
@@ -1,7 +1,7 @@
1
1
  # Code checkings (cc1-phase) of adlint-exam-c_builtin package.
2
2
  #
3
3
  # Author:: Yutaka Yanoh <mailto:yanoh@users.sourceforge.net>
4
- # Copyright:: Copyright (C) 2010-2013, OGIS-RI Co.,Ltd.
4
+ # Copyright:: Copyright (C) 2010-2014, OGIS-RI Co.,Ltd.
5
5
  # License:: GPLv3+: GNU General Public License version 3 or later
6
6
  #
7
7
  # Owner:: Yutaka Yanoh <mailto:yanoh@users.sourceforge.net>
@@ -11,7 +11,7 @@
11
11
  # / | / _ |/ / / / | / /__ __/ Source Code Static Analyzer
12
12
  # / /| | / / / / / / / |/ / / / AdLint - Advanced Lint
13
13
  # / __ |/ /_/ / /___/ / /| / / /
14
- # /_/ |_|_____/_____/_/_/ |_/ /_/ Copyright (C) 2010-2013, OGIS-RI Co.,Ltd.
14
+ # /_/ |_|_____/_____/_/_/ |_/ /_/ Copyright (C) 2010-2014, OGIS-RI Co.,Ltd.
15
15
  #
16
16
  # This file is part of AdLint.
17
17
  #
@@ -56,9 +56,9 @@ module CBuiltin #:nodoc:
56
56
 
57
57
  def initialize(phase_ctxt)
58
58
  super
59
- traversal = phase_ctxt[:cc1_ast_traversal]
60
- traversal.enter_grouped_expression += T(:enter_grouped_expression)
61
- traversal.leave_grouped_expression += T(:leave_grouped_expression)
59
+ trav = phase_ctxt[:cc1_ast_traversal]
60
+ trav.enter_grouped_expression += T(:enter_grouped_expression)
61
+ trav.leave_grouped_expression += T(:leave_grouped_expression)
62
62
  @group_depth = 0
63
63
  end
64
64
 
@@ -82,8 +82,8 @@ module CBuiltin #:nodoc:
82
82
 
83
83
  def initialize(phase_ctxt)
84
84
  super
85
- traversal = phase_ctxt[:cc1_ast_traversal]
86
- traversal.enter_kandr_function_definition += T(:check)
85
+ trav = phase_ctxt[:cc1_ast_traversal]
86
+ trav.enter_kandr_function_definition += T(:check)
87
87
  end
88
88
 
89
89
  private
@@ -101,8 +101,8 @@ module CBuiltin #:nodoc:
101
101
 
102
102
  def initialize(phase_ctxt)
103
103
  super
104
- traversal = phase_ctxt[:cc1_ast_traversal]
105
- traversal.enter_switch_statement += T(:check)
104
+ trav = phase_ctxt[:cc1_ast_traversal]
105
+ trav.enter_switch_statement += T(:check)
106
106
  end
107
107
 
108
108
  private
@@ -138,8 +138,8 @@ module CBuiltin #:nodoc:
138
138
 
139
139
  def initialize(phase_ctxt)
140
140
  super
141
- traversal = phase_ctxt[:cc1_ast_traversal]
142
- traversal.enter_switch_statement += T(:enter_switch_statement)
141
+ trav = phase_ctxt[:cc1_ast_traversal]
142
+ trav.enter_switch_statement += T(:enter_switch_statement)
143
143
  end
144
144
 
145
145
  private
@@ -199,8 +199,8 @@ module CBuiltin #:nodoc:
199
199
 
200
200
  def initialize(phase_ctxt)
201
201
  super
202
- traversal = phase_ctxt[:cc1_ast_traversal]
203
- traversal.enter_conditional_expression += T(:check)
202
+ trav = phase_ctxt[:cc1_ast_traversal]
203
+ trav.enter_conditional_expression += T(:check)
204
204
  end
205
205
 
206
206
  private
@@ -221,8 +221,8 @@ module CBuiltin #:nodoc:
221
221
 
222
222
  def initialize(phase_ctxt)
223
223
  super
224
- traversal = phase_ctxt[:cc1_ast_traversal]
225
- traversal.enter_continue_statement += T(:check)
224
+ trav = phase_ctxt[:cc1_ast_traversal]
225
+ trav.enter_continue_statement += T(:check)
226
226
  end
227
227
 
228
228
  private
@@ -793,17 +793,17 @@ module CBuiltin #:nodoc:
793
793
 
794
794
  def initialize(phase_ctxt)
795
795
  super
796
- traversal = phase_ctxt[:cc1_ast_traversal]
797
- traversal.enter_init_declarator += T(:check_init_decl)
798
- traversal.enter_struct_declarator += T(:check_struct_decl)
799
- traversal.enter_parameter_declaration += T(:check_parameter_decl)
800
- traversal.enter_kandr_function_definition += T(:check_kandr_fundef)
801
- traversal.enter_ansi_function_definition += T(:check_ansi_fundef)
802
- traversal.enter_type_name += T(:check_type_name)
796
+ trav = phase_ctxt[:cc1_ast_traversal]
797
+ trav.enter_init_declarator += T(:check_init_dcr)
798
+ trav.enter_struct_declarator += T(:check_struct_dcr)
799
+ trav.enter_parameter_declaration += T(:check_parameter_dcl)
800
+ trav.enter_kandr_function_definition += T(:check_kandr_fundef)
801
+ trav.enter_ansi_function_definition += T(:check_ansi_fundef)
802
+ trav.enter_type_name += T(:check_type_name)
803
803
  end
804
804
 
805
805
  private
806
- def check_init_decl(init_dcr)
806
+ def check_init_dcr(init_dcr)
807
807
  dcr_num = DeclaratorCounter.new.tap { |cnt|
808
808
  init_dcr.declarator.accept(cnt)
809
809
  }.result
@@ -811,14 +811,14 @@ module CBuiltin #:nodoc:
811
811
  W(init_dcr.location) if dcr_num > 12
812
812
  end
813
813
 
814
- def check_struct_decl(struct_dcr)
814
+ def check_struct_dcr(struct_dcr)
815
815
  if dcr = struct_dcr.declarator
816
816
  dcr_num = DeclaratorCounter.new.tap { |cnt| dcr.accept(cnt) }.result
817
817
  W(struct_dcr.location) if dcr_num > 12
818
818
  end
819
819
  end
820
820
 
821
- def check_parameter_decl(param_dcl)
821
+ def check_parameter_dcl(param_dcl)
822
822
  if dcr = param_dcl.declarator
823
823
  dcr_num = DeclaratorCounter.new.tap { |cnt| dcr.accept(cnt) }.result
824
824
  W(param_dcl.location) if dcr_num > 12
@@ -921,11 +921,11 @@ module CBuiltin #:nodoc:
921
921
 
922
922
  def initialize(phase_ctxt)
923
923
  super
924
- traversal = phase_ctxt[:cc1_ast_traversal]
925
- traversal.enter_struct_specifier += T(:enter_struct_specifier)
926
- traversal.leave_struct_specifier += T(:leave_struct_specifier)
927
- traversal.enter_union_specifier += T(:enter_union_specifier)
928
- traversal.leave_union_specifier += T(:leave_union_specifier)
924
+ trav = phase_ctxt[:cc1_ast_traversal]
925
+ trav.enter_struct_specifier += T(:enter_struct_specifier)
926
+ trav.leave_struct_specifier += T(:leave_struct_specifier)
927
+ trav.enter_union_specifier += T(:enter_union_specifier)
928
+ trav.leave_union_specifier += T(:leave_union_specifier)
929
929
  @nest_level = 0
930
930
  end
931
931
 
@@ -958,8 +958,8 @@ module CBuiltin #:nodoc:
958
958
 
959
959
  def initialize(phase_ctxt)
960
960
  super
961
- traversal = phase_ctxt[:cc1_ast_traversal]
962
- traversal.enter_variable_definition += T(:check)
961
+ trav = phase_ctxt[:cc1_ast_traversal]
962
+ trav.enter_variable_definition += T(:check)
963
963
  end
964
964
 
965
965
  private
@@ -979,12 +979,12 @@ module CBuiltin #:nodoc:
979
979
 
980
980
  def initialize(phase_ctxt)
981
981
  super
982
- traversal = phase_ctxt[:cc1_ast_traversal]
983
- traversal.enter_compound_statement += T(:enter_block)
984
- traversal.leave_compound_statement += T(:leave_block)
985
- traversal.enter_variable_definition += T(:add_identifier)
986
- traversal.enter_variable_declaration += T(:add_identifier)
987
- traversal.enter_typedef_declaration += T(:add_identifier)
982
+ trav = phase_ctxt[:cc1_ast_traversal]
983
+ trav.enter_compound_statement += T(:enter_block)
984
+ trav.leave_compound_statement += T(:leave_block)
985
+ trav.enter_variable_definition += T(:add_identifier)
986
+ trav.enter_variable_declaration += T(:add_identifier)
987
+ trav.enter_typedef_declaration += T(:add_identifier)
988
988
  @block_stack = [0]
989
989
  end
990
990
 
@@ -1012,16 +1012,16 @@ module CBuiltin #:nodoc:
1012
1012
 
1013
1013
  def initialize(phase_ctxt)
1014
1014
  super
1015
- traversal = phase_ctxt[:cc1_ast_traversal]
1016
- traversal.enter_struct_type_declaration += T(:check)
1017
- traversal.enter_union_type_declaration += T(:check)
1015
+ trav = phase_ctxt[:cc1_ast_traversal]
1016
+ trav.enter_struct_type_declaration += T(:check)
1017
+ trav.enter_union_type_declaration += T(:check)
1018
1018
  end
1019
1019
 
1020
1020
  private
1021
1021
  def check(node)
1022
1022
  node.struct_declarations.each do |struct_dcl|
1023
- struct_dcl.items.each do |memb_decl|
1024
- memb_type = memb_decl.type
1023
+ struct_dcl.items.each do |memb_dcl|
1024
+ memb_type = memb_dcl.type
1025
1025
  next unless memb_type.scalar? && memb_type.integer?
1026
1026
  if memb_type.bitfield? && !memb_type.explicitly_signed?
1027
1027
  W(node.location)
@@ -1041,9 +1041,9 @@ module CBuiltin #:nodoc:
1041
1041
 
1042
1042
  def initialize(phase_ctxt)
1043
1043
  super
1044
- traversal = phase_ctxt[:cc1_ast_traversal]
1045
- traversal.enter_struct_type_declaration += T(:check_struct)
1046
- traversal.enter_union_type_declaration += T(:check_union)
1044
+ trav = phase_ctxt[:cc1_ast_traversal]
1045
+ trav.enter_struct_type_declaration += T(:check_struct)
1046
+ trav.enter_union_type_declaration += T(:check_union)
1047
1047
  end
1048
1048
 
1049
1049
  private
@@ -1073,8 +1073,8 @@ module CBuiltin #:nodoc:
1073
1073
 
1074
1074
  def initialize(phase_ctxt)
1075
1075
  super
1076
- traversal = phase_ctxt[:cc1_ast_traversal]
1077
- traversal.enter_enum_type_declaration += T(:check)
1076
+ trav = phase_ctxt[:cc1_ast_traversal]
1077
+ trav.enter_enum_type_declaration += T(:check)
1078
1078
  end
1079
1079
 
1080
1080
  private
@@ -1094,8 +1094,8 @@ module CBuiltin #:nodoc:
1094
1094
 
1095
1095
  def initialize(phase_ctxt)
1096
1096
  super
1097
- traversal = phase_ctxt[:cc1_ast_traversal]
1098
- traversal.enter_variable_definition += T(:enter_variable_definition)
1097
+ trav = phase_ctxt[:cc1_ast_traversal]
1098
+ trav.enter_variable_definition += T(:enter_variable_definition)
1099
1099
  end
1100
1100
 
1101
1101
  private
@@ -1209,19 +1209,19 @@ module CBuiltin #:nodoc:
1209
1209
 
1210
1210
  def initialize(phase_ctxt)
1211
1211
  super
1212
- traversal = phase_ctxt[:cc1_ast_traversal]
1213
- traversal.enter_if_statement += T(:enter_if_statement)
1214
- traversal.leave_if_statement += T(:leave_if_statement)
1215
- traversal.enter_switch_statement += T(:enter_switch_statement)
1216
- traversal.leave_switch_statement += T(:leave_switch_statement)
1217
- traversal.enter_while_statement += T(:enter_while_statement)
1218
- traversal.leave_while_statement += T(:leave_while_statement)
1219
- traversal.enter_do_statement += T(:enter_do_statement)
1220
- traversal.leave_do_statement += T(:leave_do_statement)
1221
- traversal.enter_for_statement += T(:enter_for_statement)
1222
- traversal.leave_for_statement += T(:leave_for_statement)
1223
- traversal.enter_c99_for_statement += T(:enter_c99_for_statement)
1224
- traversal.leave_c99_for_statement += T(:leave_c99_for_statement)
1212
+ trav = phase_ctxt[:cc1_ast_traversal]
1213
+ trav.enter_if_statement += T(:enter_if_statement)
1214
+ trav.leave_if_statement += T(:leave_if_statement)
1215
+ trav.enter_switch_statement += T(:enter_switch_statement)
1216
+ trav.leave_switch_statement += T(:leave_switch_statement)
1217
+ trav.enter_while_statement += T(:enter_while_statement)
1218
+ trav.leave_while_statement += T(:leave_while_statement)
1219
+ trav.enter_do_statement += T(:enter_do_statement)
1220
+ trav.leave_do_statement += T(:leave_do_statement)
1221
+ trav.enter_for_statement += T(:enter_for_statement)
1222
+ trav.leave_for_statement += T(:leave_for_statement)
1223
+ trav.enter_c99_for_statement += T(:enter_c99_for_statement)
1224
+ trav.leave_c99_for_statement += T(:leave_c99_for_statement)
1225
1225
  @ctrl_stmt_level = 0
1226
1226
  end
1227
1227
 
@@ -1290,10 +1290,10 @@ module CBuiltin #:nodoc:
1290
1290
 
1291
1291
  def initialize(phase_ctxt)
1292
1292
  super
1293
- traversal = phase_ctxt[:cc1_ast_traversal]
1294
- traversal.enter_switch_statement += T(:enter_switch_statement)
1295
- traversal.leave_switch_statement += T(:leave_switch_statement)
1296
- traversal.enter_case_labeled_statement += T(:check)
1293
+ trav = phase_ctxt[:cc1_ast_traversal]
1294
+ trav.enter_switch_statement += T(:enter_switch_statement)
1295
+ trav.leave_switch_statement += T(:leave_switch_statement)
1296
+ trav.enter_case_labeled_statement += T(:check)
1297
1297
  @label_num_stack = []
1298
1298
  end
1299
1299
 
@@ -1428,8 +1428,8 @@ module CBuiltin #:nodoc:
1428
1428
 
1429
1429
  def initialize(phase_ctxt)
1430
1430
  super
1431
- traversal = phase_ctxt[:cc1_ast_traversal]
1432
- traversal.enter_string_literal_specifier += T(:check)
1431
+ trav = phase_ctxt[:cc1_ast_traversal]
1432
+ trav.enter_string_literal_specifier += T(:check)
1433
1433
  end
1434
1434
 
1435
1435
  private
@@ -1449,8 +1449,8 @@ module CBuiltin #:nodoc:
1449
1449
 
1450
1450
  def initialize(phase_ctxt)
1451
1451
  super
1452
- traversal = phase_ctxt[:cc1_ast_traversal]
1453
- traversal.enter_typeof_type_specifier += T(:check)
1452
+ trav = phase_ctxt[:cc1_ast_traversal]
1453
+ trav.enter_typeof_type_specifier += T(:check)
1454
1454
  end
1455
1455
 
1456
1456
  private
@@ -1468,9 +1468,9 @@ module CBuiltin #:nodoc:
1468
1468
 
1469
1469
  def initialize(phase_ctxt)
1470
1470
  super
1471
- traversal = phase_ctxt[:cc1_ast_traversal]
1472
- traversal.enter_alignof_expression += T(:check)
1473
- traversal.enter_alignof_type_expression += T(:check)
1471
+ trav = phase_ctxt[:cc1_ast_traversal]
1472
+ trav.enter_alignof_expression += T(:check)
1473
+ trav.enter_alignof_type_expression += T(:check)
1474
1474
  end
1475
1475
 
1476
1476
  private
@@ -1507,8 +1507,8 @@ module CBuiltin #:nodoc:
1507
1507
 
1508
1508
  def initialize(phase_ctxt)
1509
1509
  super
1510
- traversal = phase_ctxt[:cc1_ast_traversal]
1511
- traversal.enter_simple_assignment_expression += T(:check)
1510
+ trav = phase_ctxt[:cc1_ast_traversal]
1511
+ trav.enter_simple_assignment_expression += T(:check)
1512
1512
  end
1513
1513
 
1514
1514
  private
@@ -1530,9 +1530,9 @@ module CBuiltin #:nodoc:
1530
1530
 
1531
1531
  def initialize(phase_ctxt)
1532
1532
  super
1533
- traversal = phase_ctxt[:cc1_ast_traversal]
1534
- traversal.enter_ansi_function_definition += T(:check_ansi_function)
1535
- traversal.enter_kandr_function_definition += T(:check_kandr_function)
1533
+ trav = phase_ctxt[:cc1_ast_traversal]
1534
+ trav.enter_ansi_function_definition += T(:check_ansi_function)
1535
+ trav.enter_kandr_function_definition += T(:check_kandr_function)
1536
1536
  @interp = phase_ctxt[:cc1_interpreter]
1537
1537
  end
1538
1538
 
@@ -1614,9 +1614,9 @@ module CBuiltin #:nodoc:
1614
1614
 
1615
1615
  def initialize(phase_ctxt)
1616
1616
  super
1617
- traversal = phase_ctxt[:cc1_ast_traversal]
1618
- traversal.enter_bit_access_by_value_expression += T(:check)
1619
- traversal.enter_bit_access_by_pointer_expression += T(:check)
1617
+ trav = phase_ctxt[:cc1_ast_traversal]
1618
+ trav.enter_bit_access_by_value_expression += T(:check)
1619
+ trav.enter_bit_access_by_pointer_expression += T(:check)
1620
1620
  end
1621
1621
 
1622
1622
  private
@@ -1725,8 +1725,8 @@ module CBuiltin #:nodoc:
1725
1725
 
1726
1726
  def initialize(phase_ctxt)
1727
1727
  super
1728
- traversal = phase_ctxt[:cc1_ast_traversal]
1729
- traversal.enter_function_declaration += T(:check)
1728
+ trav = phase_ctxt[:cc1_ast_traversal]
1729
+ trav.enter_function_declaration += T(:check)
1730
1730
  end
1731
1731
 
1732
1732
  private
@@ -1746,8 +1746,8 @@ module CBuiltin #:nodoc:
1746
1746
 
1747
1747
  def initialize(phase_ctxt)
1748
1748
  super
1749
- traversal = phase_ctxt[:cc1_ast_traversal]
1750
- traversal.enter_variable_definition += T(:check)
1749
+ trav = phase_ctxt[:cc1_ast_traversal]
1750
+ trav.enter_variable_definition += T(:check)
1751
1751
  @interp = phase_ctxt[:cc1_interpreter]
1752
1752
  end
1753
1753
 
@@ -1899,8 +1899,8 @@ module CBuiltin #:nodoc:
1899
1899
 
1900
1900
  def initialize(phase_ctxt)
1901
1901
  super
1902
- traversal = phase_ctxt[:cc1_ast_traversal]
1903
- traversal.enter_comma_separated_expression += T(:check)
1902
+ trav = phase_ctxt[:cc1_ast_traversal]
1903
+ trav.enter_comma_separated_expression += T(:check)
1904
1904
  end
1905
1905
 
1906
1906
  private
@@ -1978,8 +1978,8 @@ module CBuiltin #:nodoc:
1978
1978
 
1979
1979
  def initialize(phase_ctxt)
1980
1980
  super
1981
- traversal = phase_ctxt[:cc1_ast_traversal]
1982
- traversal.enter_conditional_expression += T(:check)
1981
+ trav = phase_ctxt[:cc1_ast_traversal]
1982
+ trav.enter_conditional_expression += T(:check)
1983
1983
  end
1984
1984
 
1985
1985
  private
@@ -2002,14 +2002,14 @@ module CBuiltin #:nodoc:
2002
2002
 
2003
2003
  def initialize(phase_ctxt)
2004
2004
  super
2005
- traversal = phase_ctxt[:cc1_ast_traversal]
2006
- traversal.enter_simple_assignment_expression += T(:enter_assignment)
2007
- traversal.leave_simple_assignment_expression += T(:leave_assignment)
2008
- traversal.enter_compound_assignment_expression += T(:enter_assignment)
2009
- traversal.leave_compound_assignment_expression += T(:leave_assignment)
2010
- traversal.enter_function_call_expression += T(:enter_assignment)
2011
- traversal.leave_function_call_expression += T(:leave_assignment)
2012
- traversal.enter_comma_separated_expression += T(:check)
2005
+ trav = phase_ctxt[:cc1_ast_traversal]
2006
+ trav.enter_simple_assignment_expression += T(:enter_assignment)
2007
+ trav.leave_simple_assignment_expression += T(:leave_assignment)
2008
+ trav.enter_compound_assignment_expression += T(:enter_assignment)
2009
+ trav.leave_compound_assignment_expression += T(:leave_assignment)
2010
+ trav.enter_function_call_expression += T(:enter_assignment)
2011
+ trav.leave_function_call_expression += T(:leave_assignment)
2012
+ trav.enter_comma_separated_expression += T(:check)
2013
2013
  @assignment_depth = 0
2014
2014
  end
2015
2015
 
@@ -8207,8 +8207,8 @@ module CBuiltin #:nodoc:
8207
8207
 
8208
8208
  def initialize(phase_ctxt)
8209
8209
  super
8210
- traversal = phase_ctxt[:cc1_ast_traversal]
8211
- traversal.enter_enum_type_declaration += T(:check)
8210
+ trav = phase_ctxt[:cc1_ast_traversal]
8211
+ trav.enter_enum_type_declaration += T(:check)
8212
8212
  end
8213
8213
 
8214
8214
  private
@@ -8232,13 +8232,13 @@ module CBuiltin #:nodoc:
8232
8232
 
8233
8233
  def initialize(phase_ctxt)
8234
8234
  super
8235
- traversal = phase_ctxt[:cc1_ast_traversal]
8236
- traversal.enter_if_statement += T(:check_if_statement)
8237
- traversal.enter_if_else_statement += T(:check_if_else_statement)
8238
- traversal.enter_while_statement += T(:check_while_statement)
8239
- traversal.enter_do_statement += T(:check_do_statement)
8240
- traversal.enter_for_statement += T(:check_for_statement)
8241
- traversal.enter_c99_for_statement += T(:check_for_statement)
8235
+ trav = phase_ctxt[:cc1_ast_traversal]
8236
+ trav.enter_if_statement += T(:check_if_statement)
8237
+ trav.enter_if_else_statement += T(:check_if_else_statement)
8238
+ trav.enter_while_statement += T(:check_while_statement)
8239
+ trav.enter_do_statement += T(:check_do_statement)
8240
+ trav.enter_for_statement += T(:check_for_statement)
8241
+ trav.enter_c99_for_statement += T(:check_for_statement)
8242
8242
  end
8243
8243
 
8244
8244
  private
@@ -8306,13 +8306,13 @@ module CBuiltin #:nodoc:
8306
8306
 
8307
8307
  def initialize(phase_ctxt)
8308
8308
  super
8309
- traversal = phase_ctxt[:cc1_ast_traversal]
8310
- traversal.enter_if_statement += T(:check_if_statement)
8311
- traversal.enter_if_else_statement += T(:check_if_else_statement)
8312
- traversal.enter_while_statement += T(:check_while_statement)
8313
- traversal.enter_do_statement += T(:check_do_statement)
8314
- traversal.enter_for_statement += T(:check_for_statement)
8315
- traversal.enter_c99_for_statement += T(:check_for_statement)
8309
+ trav = phase_ctxt[:cc1_ast_traversal]
8310
+ trav.enter_if_statement += T(:check_if_statement)
8311
+ trav.enter_if_else_statement += T(:check_if_else_statement)
8312
+ trav.enter_while_statement += T(:check_while_statement)
8313
+ trav.enter_do_statement += T(:check_do_statement)
8314
+ trav.enter_for_statement += T(:check_for_statement)
8315
+ trav.enter_c99_for_statement += T(:check_for_statement)
8316
8316
  end
8317
8317
 
8318
8318
  private
@@ -8694,7 +8694,7 @@ module CBuiltin #:nodoc:
8694
8694
 
8695
8695
  def visit_member_declaration(node)
8696
8696
  if node.analysis_target?(traits)
8697
- check_member_decl(node)
8697
+ check_member_dcl(node)
8698
8698
  @lst_memb_dcl_loc = node.location
8699
8699
  end
8700
8700
  end
@@ -8822,7 +8822,7 @@ module CBuiltin #:nodoc:
8822
8822
  end
8823
8823
  end
8824
8824
 
8825
- def check_member_decl(node)
8825
+ def check_member_dcl(node)
8826
8826
  if @lst_memb_dcl_loc.fpath == node.location.fpath &&
8827
8827
  @lst_memb_dcl_loc.line_no == node.location.line_no
8828
8828
  W(node.location)
@@ -9292,8 +9292,8 @@ module CBuiltin #:nodoc:
9292
9292
 
9293
9293
  def initialize(phase_ctxt)
9294
9294
  super
9295
- traversal = phase_ctxt[:cc1_ast_traversal]
9296
- traversal.enter_compound_statement += T(:check)
9295
+ trav = phase_ctxt[:cc1_ast_traversal]
9296
+ trav.enter_compound_statement += T(:check)
9297
9297
  end
9298
9298
 
9299
9299
  private
@@ -9452,12 +9452,12 @@ module CBuiltin #:nodoc:
9452
9452
 
9453
9453
  def initialize(phase_ctxt)
9454
9454
  super
9455
- traversal = phase_ctxt[:cc1_ast_traversal]
9456
- traversal.enter_comma_separated_expression += T(:check)
9457
- traversal.enter_for_statement += T(:enter_for_statement)
9458
- traversal.leave_for_statement += T(:leave_for_statement)
9459
- traversal.enter_c99_for_statement += T(:enter_for_statement)
9460
- traversal.leave_c99_for_statement += T(:leave_for_statement)
9455
+ trav = phase_ctxt[:cc1_ast_traversal]
9456
+ trav.enter_comma_separated_expression += T(:check)
9457
+ trav.enter_for_statement += T(:enter_for_statement)
9458
+ trav.leave_for_statement += T(:leave_for_statement)
9459
+ trav.enter_c99_for_statement += T(:enter_for_statement)
9460
+ trav.leave_c99_for_statement += T(:leave_for_statement)
9461
9461
  @in_for_stmt = false
9462
9462
  end
9463
9463
 
@@ -9517,10 +9517,10 @@ module CBuiltin #:nodoc:
9517
9517
 
9518
9518
  def initialize(phase_ctxt)
9519
9519
  super
9520
- traversal = phase_ctxt[:cc1_ast_traversal]
9521
- traversal.enter_function_declaration += T(:check_function)
9522
- traversal.enter_ansi_function_definition += T(:check_function)
9523
- traversal.enter_kandr_function_definition += T(:check_function)
9520
+ trav = phase_ctxt[:cc1_ast_traversal]
9521
+ trav.enter_function_declaration += T(:check_function)
9522
+ trav.enter_ansi_function_definition += T(:check_function)
9523
+ trav.enter_kandr_function_definition += T(:check_function)
9524
9524
  end
9525
9525
 
9526
9526
  private
@@ -9538,10 +9538,10 @@ module CBuiltin #:nodoc:
9538
9538
 
9539
9539
  def initialize(phase_ctxt)
9540
9540
  super
9541
- traversal = phase_ctxt[:cc1_ast_traversal]
9542
- traversal.enter_variable_declaration += T(:check_variable)
9543
- traversal.enter_variable_definition += T(:check_variable)
9544
- traversal.enter_parameter_definition += T(:check_variable)
9541
+ trav = phase_ctxt[:cc1_ast_traversal]
9542
+ trav.enter_variable_declaration += T(:check_variable)
9543
+ trav.enter_variable_definition += T(:check_variable)
9544
+ trav.enter_parameter_definition += T(:check_variable)
9545
9545
  end
9546
9546
 
9547
9547
  private
@@ -9702,17 +9702,17 @@ module CBuiltin #:nodoc:
9702
9702
 
9703
9703
  def initialize(phase_ctxt)
9704
9704
  super
9705
- traversal = phase_ctxt[:cc1_ast_traversal]
9706
- traversal.enter_initializer += T(:check_initializer)
9707
- traversal.enter_expression_statement += T(:check_expr_statement)
9708
- traversal.enter_if_statement += T(:check_selection_statement)
9709
- traversal.enter_if_else_statement += T(:check_selection_statement)
9710
- traversal.enter_switch_statement += T(:check_selection_statement)
9711
- traversal.enter_while_statement += T(:check_iteration_statement)
9712
- traversal.enter_do_statement += T(:check_iteration_statement)
9713
- traversal.enter_for_statement += T(:check_iteration_statement)
9714
- traversal.enter_c99_for_statement += T(:check_iteration_statement)
9715
- traversal.enter_return_statement += T(:check_return_statement)
9705
+ trav = phase_ctxt[:cc1_ast_traversal]
9706
+ trav.enter_initializer += T(:check_initializer)
9707
+ trav.enter_expression_statement += T(:check_expr_statement)
9708
+ trav.enter_if_statement += T(:check_selection_statement)
9709
+ trav.enter_if_else_statement += T(:check_selection_statement)
9710
+ trav.enter_switch_statement += T(:check_selection_statement)
9711
+ trav.enter_while_statement += T(:check_iteration_statement)
9712
+ trav.enter_do_statement += T(:check_iteration_statement)
9713
+ trav.enter_for_statement += T(:check_iteration_statement)
9714
+ trav.enter_c99_for_statement += T(:check_iteration_statement)
9715
+ trav.enter_return_statement += T(:check_return_statement)
9716
9716
  end
9717
9717
 
9718
9718
  private
@@ -9877,17 +9877,17 @@ module CBuiltin #:nodoc:
9877
9877
 
9878
9878
  def initialize(phase_ctxt)
9879
9879
  super
9880
- traversal = phase_ctxt[:cc1_ast_traversal]
9881
- traversal.enter_initializer += T(:check_initializer)
9882
- traversal.enter_expression_statement += T(:check_expr_statement)
9883
- traversal.enter_if_statement += T(:check_selection_statement)
9884
- traversal.enter_if_else_statement += T(:check_selection_statement)
9885
- traversal.enter_switch_statement += T(:check_selection_statement)
9886
- traversal.enter_while_statement += T(:check_iteration_statement)
9887
- traversal.enter_do_statement += T(:check_iteration_statement)
9888
- traversal.enter_for_statement += T(:check_iteration_statement)
9889
- traversal.enter_c99_for_statement += T(:check_iteration_statement)
9890
- traversal.enter_return_statement += T(:check_return_statement)
9880
+ trav = phase_ctxt[:cc1_ast_traversal]
9881
+ trav.enter_initializer += T(:check_initializer)
9882
+ trav.enter_expression_statement += T(:check_expr_statement)
9883
+ trav.enter_if_statement += T(:check_selection_statement)
9884
+ trav.enter_if_else_statement += T(:check_selection_statement)
9885
+ trav.enter_switch_statement += T(:check_selection_statement)
9886
+ trav.enter_while_statement += T(:check_iteration_statement)
9887
+ trav.enter_do_statement += T(:check_iteration_statement)
9888
+ trav.enter_for_statement += T(:check_iteration_statement)
9889
+ trav.enter_c99_for_statement += T(:check_iteration_statement)
9890
+ trav.enter_return_statement += T(:check_return_statement)
9891
9891
  end
9892
9892
 
9893
9893
  private
@@ -10063,17 +10063,17 @@ module CBuiltin #:nodoc:
10063
10063
 
10064
10064
  def initialize(phase_ctxt)
10065
10065
  super
10066
- traversal = phase_ctxt[:cc1_ast_traversal]
10067
- traversal.enter_initializer += T(:check_initializer)
10068
- traversal.enter_expression_statement += T(:check_expr_statement)
10069
- traversal.enter_if_statement += T(:check_selection_statement)
10070
- traversal.enter_if_else_statement += T(:check_selection_statement)
10071
- traversal.enter_switch_statement += T(:check_selection_statement)
10072
- traversal.enter_while_statement += T(:check_iteration_statement)
10073
- traversal.enter_do_statement += T(:check_iteration_statement)
10074
- traversal.enter_for_statement += T(:check_iteration_statement)
10075
- traversal.enter_c99_for_statement += T(:check_iteration_statement)
10076
- traversal.enter_return_statement += T(:check_return_statement)
10066
+ trav = phase_ctxt[:cc1_ast_traversal]
10067
+ trav.enter_initializer += T(:check_initializer)
10068
+ trav.enter_expression_statement += T(:check_expr_statement)
10069
+ trav.enter_if_statement += T(:check_selection_statement)
10070
+ trav.enter_if_else_statement += T(:check_selection_statement)
10071
+ trav.enter_switch_statement += T(:check_selection_statement)
10072
+ trav.enter_while_statement += T(:check_iteration_statement)
10073
+ trav.enter_do_statement += T(:check_iteration_statement)
10074
+ trav.enter_for_statement += T(:check_iteration_statement)
10075
+ trav.enter_c99_for_statement += T(:check_iteration_statement)
10076
+ trav.enter_return_statement += T(:check_return_statement)
10077
10077
  end
10078
10078
 
10079
10079
  private
@@ -10640,17 +10640,17 @@ module CBuiltin #:nodoc:
10640
10640
 
10641
10641
  def initialize(phase_ctxt)
10642
10642
  super
10643
- traversal = phase_ctxt[:cc1_ast_traversal]
10644
- traversal.enter_initializer += T(:check_initializer)
10645
- traversal.enter_expression_statement += T(:check_expr_statement)
10646
- traversal.enter_if_statement += T(:check_selection_statement)
10647
- traversal.enter_if_else_statement += T(:check_selection_statement)
10648
- traversal.enter_switch_statement += T(:check_selection_statement)
10649
- traversal.enter_while_statement += T(:check_iteration_statement)
10650
- traversal.enter_do_statement += T(:check_iteration_statement)
10651
- traversal.enter_for_statement += T(:check_iteration_statement)
10652
- traversal.enter_c99_for_statement += T(:check_iteration_statement)
10653
- traversal.enter_return_statement += T(:check_return_statement)
10643
+ trav = phase_ctxt[:cc1_ast_traversal]
10644
+ trav.enter_initializer += T(:check_initializer)
10645
+ trav.enter_expression_statement += T(:check_expr_statement)
10646
+ trav.enter_if_statement += T(:check_selection_statement)
10647
+ trav.enter_if_else_statement += T(:check_selection_statement)
10648
+ trav.enter_switch_statement += T(:check_selection_statement)
10649
+ trav.enter_while_statement += T(:check_iteration_statement)
10650
+ trav.enter_do_statement += T(:check_iteration_statement)
10651
+ trav.enter_for_statement += T(:check_iteration_statement)
10652
+ trav.enter_c99_for_statement += T(:check_iteration_statement)
10653
+ trav.enter_return_statement += T(:check_return_statement)
10654
10654
  end
10655
10655
 
10656
10656
  private
@@ -10815,17 +10815,17 @@ module CBuiltin #:nodoc:
10815
10815
 
10816
10816
  def initialize(phase_ctxt)
10817
10817
  super
10818
- traversal = phase_ctxt[:cc1_ast_traversal]
10819
- traversal.enter_initializer += T(:check_initializer)
10820
- traversal.enter_expression_statement += T(:check_expr_statement)
10821
- traversal.enter_if_statement += T(:check_selection_statement)
10822
- traversal.enter_if_else_statement += T(:check_selection_statement)
10823
- traversal.enter_switch_statement += T(:check_selection_statement)
10824
- traversal.enter_while_statement += T(:check_iteration_statement)
10825
- traversal.enter_do_statement += T(:check_iteration_statement)
10826
- traversal.enter_for_statement += T(:check_iteration_statement)
10827
- traversal.enter_c99_for_statement += T(:check_iteration_statement)
10828
- traversal.enter_return_statement += T(:check_return_statement)
10818
+ trav = phase_ctxt[:cc1_ast_traversal]
10819
+ trav.enter_initializer += T(:check_initializer)
10820
+ trav.enter_expression_statement += T(:check_expr_statement)
10821
+ trav.enter_if_statement += T(:check_selection_statement)
10822
+ trav.enter_if_else_statement += T(:check_selection_statement)
10823
+ trav.enter_switch_statement += T(:check_selection_statement)
10824
+ trav.enter_while_statement += T(:check_iteration_statement)
10825
+ trav.enter_do_statement += T(:check_iteration_statement)
10826
+ trav.enter_for_statement += T(:check_iteration_statement)
10827
+ trav.enter_c99_for_statement += T(:check_iteration_statement)
10828
+ trav.enter_return_statement += T(:check_return_statement)
10829
10829
  end
10830
10830
 
10831
10831
  private
@@ -10933,17 +10933,17 @@ module CBuiltin #:nodoc:
10933
10933
 
10934
10934
  def initialize(phase_ctxt)
10935
10935
  super
10936
- traversal = phase_ctxt[:cc1_ast_traversal]
10937
- traversal.enter_initializer += T(:check_initializer)
10938
- traversal.enter_expression_statement += T(:check_expr_statement)
10939
- traversal.enter_if_statement += T(:check_selection_statement)
10940
- traversal.enter_if_else_statement += T(:check_selection_statement)
10941
- traversal.enter_switch_statement += T(:check_selection_statement)
10942
- traversal.enter_while_statement += T(:check_iteration_statement)
10943
- traversal.enter_do_statement += T(:check_iteration_statement)
10944
- traversal.enter_for_statement += T(:check_iteration_statement)
10945
- traversal.enter_c99_for_statement += T(:check_iteration_statement)
10946
- traversal.enter_return_statement += T(:check_return_statement)
10936
+ trav = phase_ctxt[:cc1_ast_traversal]
10937
+ trav.enter_initializer += T(:check_initializer)
10938
+ trav.enter_expression_statement += T(:check_expr_statement)
10939
+ trav.enter_if_statement += T(:check_selection_statement)
10940
+ trav.enter_if_else_statement += T(:check_selection_statement)
10941
+ trav.enter_switch_statement += T(:check_selection_statement)
10942
+ trav.enter_while_statement += T(:check_iteration_statement)
10943
+ trav.enter_do_statement += T(:check_iteration_statement)
10944
+ trav.enter_for_statement += T(:check_iteration_statement)
10945
+ trav.enter_c99_for_statement += T(:check_iteration_statement)
10946
+ trav.enter_return_statement += T(:check_return_statement)
10947
10947
  end
10948
10948
 
10949
10949
  private
@@ -11122,17 +11122,17 @@ module CBuiltin #:nodoc:
11122
11122
 
11123
11123
  def initialize(phase_ctxt)
11124
11124
  super
11125
- traversal = phase_ctxt[:cc1_ast_traversal]
11126
- traversal.enter_initializer += T(:check_initializer)
11127
- traversal.enter_expression_statement += T(:check_expr_statement)
11128
- traversal.enter_if_statement += T(:check_selection_statement)
11129
- traversal.enter_if_else_statement += T(:check_selection_statement)
11130
- traversal.enter_switch_statement += T(:check_selection_statement)
11131
- traversal.enter_while_statement += T(:check_iteration_statement)
11132
- traversal.enter_do_statement += T(:check_iteration_statement)
11133
- traversal.enter_for_statement += T(:check_iteration_statement)
11134
- traversal.enter_c99_for_statement += T(:check_iteration_statement)
11135
- traversal.enter_return_statement += T(:check_return_statement)
11125
+ trav = phase_ctxt[:cc1_ast_traversal]
11126
+ trav.enter_initializer += T(:check_initializer)
11127
+ trav.enter_expression_statement += T(:check_expr_statement)
11128
+ trav.enter_if_statement += T(:check_selection_statement)
11129
+ trav.enter_if_else_statement += T(:check_selection_statement)
11130
+ trav.enter_switch_statement += T(:check_selection_statement)
11131
+ trav.enter_while_statement += T(:check_iteration_statement)
11132
+ trav.enter_do_statement += T(:check_iteration_statement)
11133
+ trav.enter_for_statement += T(:check_iteration_statement)
11134
+ trav.enter_c99_for_statement += T(:check_iteration_statement)
11135
+ trav.enter_return_statement += T(:check_return_statement)
11136
11136
  end
11137
11137
 
11138
11138
  private
@@ -11286,17 +11286,17 @@ module CBuiltin #:nodoc:
11286
11286
 
11287
11287
  def initialize(phase_ctxt)
11288
11288
  super
11289
- traversal = phase_ctxt[:cc1_ast_traversal]
11290
- traversal.enter_initializer += T(:check_initializer)
11291
- traversal.enter_expression_statement += T(:check_expr_statement)
11292
- traversal.enter_if_statement += T(:check_selection_statement)
11293
- traversal.enter_if_else_statement += T(:check_selection_statement)
11294
- traversal.enter_switch_statement += T(:check_selection_statement)
11295
- traversal.enter_while_statement += T(:check_iteration_statement)
11296
- traversal.enter_do_statement += T(:check_iteration_statement)
11297
- traversal.enter_for_statement += T(:check_iteration_statement)
11298
- traversal.enter_c99_for_statement += T(:check_iteration_statement)
11299
- traversal.enter_return_statement += T(:check_return_statement)
11289
+ trav = phase_ctxt[:cc1_ast_traversal]
11290
+ trav.enter_initializer += T(:check_initializer)
11291
+ trav.enter_expression_statement += T(:check_expr_statement)
11292
+ trav.enter_if_statement += T(:check_selection_statement)
11293
+ trav.enter_if_else_statement += T(:check_selection_statement)
11294
+ trav.enter_switch_statement += T(:check_selection_statement)
11295
+ trav.enter_while_statement += T(:check_iteration_statement)
11296
+ trav.enter_do_statement += T(:check_iteration_statement)
11297
+ trav.enter_for_statement += T(:check_iteration_statement)
11298
+ trav.enter_c99_for_statement += T(:check_iteration_statement)
11299
+ trav.enter_return_statement += T(:check_return_statement)
11300
11300
  end
11301
11301
 
11302
11302
  private
@@ -11487,17 +11487,17 @@ module CBuiltin #:nodoc:
11487
11487
 
11488
11488
  def initialize(phase_ctxt)
11489
11489
  super
11490
- traversal = phase_ctxt[:cc1_ast_traversal]
11491
- traversal.enter_initializer += T(:check_initializer)
11492
- traversal.enter_expression_statement += T(:check_expr_statement)
11493
- traversal.enter_if_statement += T(:check_selection_statement)
11494
- traversal.enter_if_else_statement += T(:check_selection_statement)
11495
- traversal.enter_switch_statement += T(:check_selection_statement)
11496
- traversal.enter_while_statement += T(:check_iteration_statement)
11497
- traversal.enter_do_statement += T(:check_iteration_statement)
11498
- traversal.enter_for_statement += T(:check_iteration_statement)
11499
- traversal.enter_c99_for_statement += T(:check_iteration_statement)
11500
- traversal.enter_return_statement += T(:check_return_statement)
11490
+ trav = phase_ctxt[:cc1_ast_traversal]
11491
+ trav.enter_initializer += T(:check_initializer)
11492
+ trav.enter_expression_statement += T(:check_expr_statement)
11493
+ trav.enter_if_statement += T(:check_selection_statement)
11494
+ trav.enter_if_else_statement += T(:check_selection_statement)
11495
+ trav.enter_switch_statement += T(:check_selection_statement)
11496
+ trav.enter_while_statement += T(:check_iteration_statement)
11497
+ trav.enter_do_statement += T(:check_iteration_statement)
11498
+ trav.enter_for_statement += T(:check_iteration_statement)
11499
+ trav.enter_c99_for_statement += T(:check_iteration_statement)
11500
+ trav.enter_return_statement += T(:check_return_statement)
11501
11501
  end
11502
11502
 
11503
11503
  private
@@ -11651,17 +11651,17 @@ module CBuiltin #:nodoc:
11651
11651
 
11652
11652
  def initialize(phase_ctxt)
11653
11653
  super
11654
- traversal = phase_ctxt[:cc1_ast_traversal]
11655
- traversal.enter_initializer += T(:check_initializer)
11656
- traversal.enter_expression_statement += T(:check_expr_statement)
11657
- traversal.enter_if_statement += T(:check_selection_statement)
11658
- traversal.enter_if_else_statement += T(:check_selection_statement)
11659
- traversal.enter_switch_statement += T(:check_selection_statement)
11660
- traversal.enter_while_statement += T(:check_iteration_statement)
11661
- traversal.enter_do_statement += T(:check_iteration_statement)
11662
- traversal.enter_for_statement += T(:check_iteration_statement)
11663
- traversal.enter_c99_for_statement += T(:check_iteration_statement)
11664
- traversal.enter_return_statement += T(:check_return_statement)
11654
+ trav = phase_ctxt[:cc1_ast_traversal]
11655
+ trav.enter_initializer += T(:check_initializer)
11656
+ trav.enter_expression_statement += T(:check_expr_statement)
11657
+ trav.enter_if_statement += T(:check_selection_statement)
11658
+ trav.enter_if_else_statement += T(:check_selection_statement)
11659
+ trav.enter_switch_statement += T(:check_selection_statement)
11660
+ trav.enter_while_statement += T(:check_iteration_statement)
11661
+ trav.enter_do_statement += T(:check_iteration_statement)
11662
+ trav.enter_for_statement += T(:check_iteration_statement)
11663
+ trav.enter_c99_for_statement += T(:check_iteration_statement)
11664
+ trav.enter_return_statement += T(:check_return_statement)
11665
11665
  end
11666
11666
 
11667
11667
  private
@@ -11825,17 +11825,17 @@ module CBuiltin #:nodoc:
11825
11825
 
11826
11826
  def initialize(phase_ctxt)
11827
11827
  super
11828
- traversal = phase_ctxt[:cc1_ast_traversal]
11829
- traversal.enter_initializer += T(:check_initializer)
11830
- traversal.enter_expression_statement += T(:check_expr_statement)
11831
- traversal.enter_if_statement += T(:check_selection_statement)
11832
- traversal.enter_if_else_statement += T(:check_selection_statement)
11833
- traversal.enter_switch_statement += T(:check_selection_statement)
11834
- traversal.enter_while_statement += T(:check_iteration_statement)
11835
- traversal.enter_do_statement += T(:check_iteration_statement)
11836
- traversal.enter_for_statement += T(:check_iteration_statement)
11837
- traversal.enter_c99_for_statement += T(:check_iteration_statement)
11838
- traversal.enter_return_statement += T(:check_return_statement)
11828
+ trav = phase_ctxt[:cc1_ast_traversal]
11829
+ trav.enter_initializer += T(:check_initializer)
11830
+ trav.enter_expression_statement += T(:check_expr_statement)
11831
+ trav.enter_if_statement += T(:check_selection_statement)
11832
+ trav.enter_if_else_statement += T(:check_selection_statement)
11833
+ trav.enter_switch_statement += T(:check_selection_statement)
11834
+ trav.enter_while_statement += T(:check_iteration_statement)
11835
+ trav.enter_do_statement += T(:check_iteration_statement)
11836
+ trav.enter_for_statement += T(:check_iteration_statement)
11837
+ trav.enter_c99_for_statement += T(:check_iteration_statement)
11838
+ trav.enter_return_statement += T(:check_return_statement)
11839
11839
  end
11840
11840
 
11841
11841
  private
@@ -12075,9 +12075,9 @@ module CBuiltin #:nodoc:
12075
12075
 
12076
12076
  def initialize(phase_ctxt)
12077
12077
  super
12078
- traversal = phase_ctxt[:cc1_ast_traversal]
12079
- traversal.enter_logical_and_expression += T(:check)
12080
- traversal.enter_logical_or_expression += T(:check)
12078
+ trav = phase_ctxt[:cc1_ast_traversal]
12079
+ trav.enter_logical_and_expression += T(:check)
12080
+ trav.enter_logical_or_expression += T(:check)
12081
12081
  end
12082
12082
 
12083
12083
  private
@@ -12095,13 +12095,13 @@ module CBuiltin #:nodoc:
12095
12095
 
12096
12096
  def initialize(phase_ctxt)
12097
12097
  super
12098
- traversal = phase_ctxt[:cc1_ast_traversal]
12099
- traversal.enter_expression_statement += T(:enter_expr_stmt)
12100
- traversal.leave_expression_statement += T(:leave_expr_stmt)
12101
- traversal.enter_postfix_increment_expression += T(:check)
12102
- traversal.enter_postfix_decrement_expression += T(:check)
12103
- traversal.enter_prefix_increment_expression += T(:check)
12104
- traversal.enter_prefix_decrement_expression += T(:check)
12098
+ trav = phase_ctxt[:cc1_ast_traversal]
12099
+ trav.enter_expression_statement += T(:enter_expr_stmt)
12100
+ trav.leave_expression_statement += T(:leave_expr_stmt)
12101
+ trav.enter_postfix_increment_expression += T(:check)
12102
+ trav.enter_postfix_decrement_expression += T(:check)
12103
+ trav.enter_prefix_increment_expression += T(:check)
12104
+ trav.enter_prefix_decrement_expression += T(:check)
12105
12105
  @cur_stmt = nil
12106
12106
  end
12107
12107
 
@@ -12132,8 +12132,8 @@ module CBuiltin #:nodoc:
12132
12132
 
12133
12133
  def initialize(phase_ctxt)
12134
12134
  super
12135
- traversal = phase_ctxt[:cc1_ast_traversal]
12136
- traversal.enter_member_declaration += T(:check)
12135
+ trav = phase_ctxt[:cc1_ast_traversal]
12136
+ trav.enter_member_declaration += T(:check)
12137
12137
  end
12138
12138
 
12139
12139
  private
@@ -12154,8 +12154,8 @@ module CBuiltin #:nodoc:
12154
12154
 
12155
12155
  def initialize(phase_ctxt)
12156
12156
  super
12157
- traversal = phase_ctxt[:cc1_ast_traversal]
12158
- traversal.enter_constant_specifier += T(:check)
12157
+ trav = phase_ctxt[:cc1_ast_traversal]
12158
+ trav.enter_constant_specifier += T(:check)
12159
12159
  end
12160
12160
 
12161
12161
  private
@@ -12175,9 +12175,9 @@ module CBuiltin #:nodoc:
12175
12175
 
12176
12176
  def initialize(phase_ctxt)
12177
12177
  super
12178
- traversal = phase_ctxt[:cc1_ast_traversal]
12179
- traversal.enter_constant_specifier += T(:check_constant)
12180
- traversal.enter_string_literal_specifier += T(:check_string_literal)
12178
+ trav = phase_ctxt[:cc1_ast_traversal]
12179
+ trav.enter_constant_specifier += T(:check_constant)
12180
+ trav.enter_string_literal_specifier += T(:check_string_literal)
12181
12181
  end
12182
12182
 
12183
12183
  private
@@ -12203,8 +12203,8 @@ module CBuiltin #:nodoc:
12203
12203
 
12204
12204
  def initialize(phase_ctxt)
12205
12205
  super
12206
- traversal = phase_ctxt[:cc1_ast_traversal]
12207
- traversal.enter_switch_statement += T(:check_switch_statement)
12206
+ trav = phase_ctxt[:cc1_ast_traversal]
12207
+ trav.enter_switch_statement += T(:check_switch_statement)
12208
12208
  end
12209
12209
 
12210
12210
  private
@@ -12329,12 +12329,12 @@ module CBuiltin #:nodoc:
12329
12329
 
12330
12330
  def initialize(phase_ctxt)
12331
12331
  super
12332
- traversal = phase_ctxt[:cc1_ast_traversal]
12333
- traversal.enter_comma_separated_expression += T(:check)
12334
- traversal.enter_for_statement += T(:enter_for_statement)
12335
- traversal.leave_for_statement += T(:leave_for_statement)
12336
- traversal.enter_c99_for_statement += T(:enter_for_statement)
12337
- traversal.leave_c99_for_statement += T(:leave_for_statement)
12332
+ trav = phase_ctxt[:cc1_ast_traversal]
12333
+ trav.enter_comma_separated_expression += T(:check)
12334
+ trav.enter_for_statement += T(:enter_for_statement)
12335
+ trav.leave_for_statement += T(:leave_for_statement)
12336
+ trav.enter_c99_for_statement += T(:enter_for_statement)
12337
+ trav.leave_c99_for_statement += T(:leave_for_statement)
12338
12338
  @in_for_stmt = false
12339
12339
  end
12340
12340
 
@@ -12361,8 +12361,8 @@ module CBuiltin #:nodoc:
12361
12361
 
12362
12362
  def initialize(phase_ctxt)
12363
12363
  super
12364
- traversal = phase_ctxt[:cc1_ast_traversal]
12365
- traversal.enter_switch_statement += T(:check)
12364
+ trav = phase_ctxt[:cc1_ast_traversal]
12365
+ trav.enter_switch_statement += T(:check)
12366
12366
  end
12367
12367
 
12368
12368
  private
@@ -12417,8 +12417,8 @@ module CBuiltin #:nodoc:
12417
12417
 
12418
12418
  def initialize(phase_ctxt)
12419
12419
  super
12420
- traversal = phase_ctxt[:cc1_ast_traversal]
12421
- traversal.enter_ansi_function_definition += T(:check)
12420
+ trav = phase_ctxt[:cc1_ast_traversal]
12421
+ trav.enter_ansi_function_definition += T(:check)
12422
12422
  end
12423
12423
 
12424
12424
  private
@@ -12438,8 +12438,8 @@ module CBuiltin #:nodoc:
12438
12438
 
12439
12439
  def initialize(phase_ctxt)
12440
12440
  super
12441
- traversal = phase_ctxt[:cc1_ast_traversal]
12442
- traversal.enter_function_declaration += T(:check)
12441
+ trav = phase_ctxt[:cc1_ast_traversal]
12442
+ trav.enter_function_declaration += T(:check)
12443
12443
  end
12444
12444
 
12445
12445
  private
@@ -12500,8 +12500,8 @@ module CBuiltin #:nodoc:
12500
12500
 
12501
12501
  def initialize(phase_ctxt)
12502
12502
  super
12503
- traversal = phase_ctxt[:cc1_ast_traversal]
12504
- traversal.enter_ansi_function_definition += T(:check)
12503
+ trav = phase_ctxt[:cc1_ast_traversal]
12504
+ trav.enter_ansi_function_definition += T(:check)
12505
12505
  @interp = phase_ctxt[:cc1_interpreter]
12506
12506
  end
12507
12507
 
@@ -12530,7 +12530,7 @@ module CBuiltin #:nodoc:
12530
12530
  end
12531
12531
 
12532
12532
  def extract_param_names(node)
12533
- collect_identifier_declarators(node).map { |decl| decl.identifier.value }
12533
+ collect_identifier_declarators(node).map { |dcr| dcr.identifier.value }
12534
12534
  end
12535
12535
 
12536
12536
  def interpreter
@@ -12591,8 +12591,8 @@ module CBuiltin #:nodoc:
12591
12591
 
12592
12592
  def initialize(phase_ctxt)
12593
12593
  super
12594
- traversal = phase_ctxt[:cc1_ast_traversal]
12595
- traversal.enter_switch_statement += T(:check)
12594
+ trav = phase_ctxt[:cc1_ast_traversal]
12595
+ trav.enter_switch_statement += T(:check)
12596
12596
  end
12597
12597
 
12598
12598
  private
@@ -12694,8 +12694,8 @@ module CBuiltin #:nodoc:
12694
12694
 
12695
12695
  def initialize(phase_ctxt)
12696
12696
  super
12697
- traversal = phase_ctxt[:cc1_ast_traversal]
12698
- traversal.enter_union_type_declaration += T(:check)
12697
+ trav = phase_ctxt[:cc1_ast_traversal]
12698
+ trav.enter_union_type_declaration += T(:check)
12699
12699
  end
12700
12700
 
12701
12701
  private
@@ -12791,8 +12791,8 @@ module CBuiltin #:nodoc:
12791
12791
 
12792
12792
  def initialize(phase_ctxt)
12793
12793
  super
12794
- traversal = phase_ctxt[:cc1_ast_traversal]
12795
- traversal.enter_unary_arithmetic_expression += T(:check)
12794
+ trav = phase_ctxt[:cc1_ast_traversal]
12795
+ trav.enter_unary_arithmetic_expression += T(:check)
12796
12796
  end
12797
12797
 
12798
12798
  private
@@ -12837,8 +12837,8 @@ module CBuiltin #:nodoc:
12837
12837
 
12838
12838
  def initialize(phase_ctxt)
12839
12839
  super
12840
- traversal = phase_ctxt[:cc1_ast_traversal]
12841
- traversal.enter_unary_arithmetic_expression += T(:check)
12840
+ trav = phase_ctxt[:cc1_ast_traversal]
12841
+ trav.enter_unary_arithmetic_expression += T(:check)
12842
12842
  end
12843
12843
 
12844
12844
  private
@@ -12893,8 +12893,8 @@ module CBuiltin #:nodoc:
12893
12893
 
12894
12894
  def initialize(phase_ctxt)
12895
12895
  super
12896
- traversal = phase_ctxt[:cc1_ast_traversal]
12897
- traversal.enter_expression_statement += T(:check)
12896
+ trav = phase_ctxt[:cc1_ast_traversal]
12897
+ trav.enter_expression_statement += T(:check)
12898
12898
  end
12899
12899
 
12900
12900
  private
@@ -12918,8 +12918,8 @@ module CBuiltin #:nodoc:
12918
12918
 
12919
12919
  def initialize(phase_ctxt)
12920
12920
  super
12921
- traversal = phase_ctxt[:cc1_ast_traversal]
12922
- traversal.enter_variable_definition += T(:check)
12921
+ trav = phase_ctxt[:cc1_ast_traversal]
12922
+ trav.enter_variable_definition += T(:check)
12923
12923
  end
12924
12924
 
12925
12925
  private
@@ -12961,10 +12961,10 @@ module CBuiltin #:nodoc:
12961
12961
 
12962
12962
  def initialize(phase_ctxt)
12963
12963
  super
12964
- traversal = phase_ctxt[:cc1_ast_traversal]
12965
- traversal.enter_compound_statement += T(:enter_block)
12966
- traversal.leave_compound_statement += T(:leave_block)
12967
- traversal.enter_generic_labeled_statement += T(:check)
12964
+ trav = phase_ctxt[:cc1_ast_traversal]
12965
+ trav.enter_compound_statement += T(:enter_block)
12966
+ trav.leave_compound_statement += T(:leave_block)
12967
+ trav.enter_generic_labeled_statement += T(:check)
12968
12968
  @blocks = []
12969
12969
  end
12970
12970
 
@@ -13006,10 +13006,10 @@ module CBuiltin #:nodoc:
13006
13006
 
13007
13007
  def initialize(phase_ctxt)
13008
13008
  super
13009
- traversal = phase_ctxt[:cc1_ast_traversal]
13010
- traversal.enter_compound_statement += T(:enter_block)
13011
- traversal.leave_compound_statement += T(:leave_block)
13012
- traversal.enter_generic_labeled_statement += T(:check)
13009
+ trav = phase_ctxt[:cc1_ast_traversal]
13010
+ trav.enter_compound_statement += T(:enter_block)
13011
+ trav.leave_compound_statement += T(:leave_block)
13012
+ trav.enter_generic_labeled_statement += T(:check)
13013
13013
  @blocks = []
13014
13014
  end
13015
13015
 
@@ -13338,6 +13338,54 @@ module CBuiltin #:nodoc:
13338
13338
  end
13339
13339
  end
13340
13340
 
13341
+ class W0573 < PassiveCodeCheck
13342
+ def_registrant_phase Cc1::Prepare2Phase
13343
+
13344
+ # NOTE: All messages of cc1-phase code check should be unique till function
13345
+ # step-in analysis is supported.
13346
+ mark_as_unique
13347
+
13348
+ def initialize(phase_ctxt)
13349
+ super
13350
+ interp = phase_ctxt[:cc1_interpreter]
13351
+ interp.on_function_call_expr_evaled += T(:check)
13352
+ @environ = interp.environment
13353
+ end
13354
+
13355
+ private
13356
+ def check(funcall_expr, fun, arg_vars, *)
13357
+ if fun.named? && fun.name =~ /\A.*scanf\z/
13358
+ fmt = create_format(funcall_expr, format_str_index_of(funcall_expr),
13359
+ arg_vars, @environ)
13360
+ return unless fmt
13361
+
13362
+ fmt.conversion_specifiers.each do |conv_spec|
13363
+ if conv_spec.scanset && conv_spec.scanset.include?("-")
13364
+ W(fmt.location)
13365
+ break
13366
+ end
13367
+ end
13368
+ end
13369
+ end
13370
+
13371
+ def format_str_index_of(funcall_expr)
13372
+ funcall_expr.argument_expressions.index do |arg_expr|
13373
+ arg_expr.kind_of?(Cc1::StringLiteralSpecifier)
13374
+ end
13375
+ end
13376
+
13377
+ def create_format(funcall_expr, fmt_str_idx, arg_vars, env)
13378
+ if fmt_str_idx
13379
+ fmt_str = funcall_expr.argument_expressions[fmt_str_idx]
13380
+ if fmt_str && fmt_str.literal.value =~ /\AL?"(.*)"\z/i
13381
+ trailing_args = arg_vars[(fmt_str_idx + 1)..-1] || []
13382
+ return Cc1::ScanfFormat.new($1, fmt_str.location, trailing_args, env)
13383
+ end
13384
+ end
13385
+ nil
13386
+ end
13387
+ end
13388
+
13341
13389
  class W0578 < PassiveCodeCheck
13342
13390
  def_registrant_phase Cc1::Prepare2Phase
13343
13391
 
@@ -14035,18 +14083,18 @@ module CBuiltin #:nodoc:
14035
14083
 
14036
14084
  def initialize(phase_ctxt)
14037
14085
  super
14038
- traversal = phase_ctxt[:cc1_ast_traversal]
14039
- traversal.enter_break_statement += T(:check)
14040
- traversal.enter_switch_statement += T(:enter_breakable_statement)
14041
- traversal.leave_switch_statement += T(:leave_breakable_statement)
14042
- traversal.enter_while_statement += T(:enter_breakable_statement)
14043
- traversal.leave_while_statement += T(:leave_breakable_statement)
14044
- traversal.enter_do_statement += T(:enter_breakable_statement)
14045
- traversal.leave_do_statement += T(:leave_breakable_statement)
14046
- traversal.enter_for_statement += T(:enter_breakable_statement)
14047
- traversal.leave_for_statement += T(:leave_breakable_statement)
14048
- traversal.enter_c99_for_statement += T(:enter_breakable_statement)
14049
- traversal.leave_c99_for_statement += T(:leave_breakable_statement)
14086
+ trav = phase_ctxt[:cc1_ast_traversal]
14087
+ trav.enter_break_statement += T(:check)
14088
+ trav.enter_switch_statement += T(:enter_breakable_statement)
14089
+ trav.leave_switch_statement += T(:leave_breakable_statement)
14090
+ trav.enter_while_statement += T(:enter_breakable_statement)
14091
+ trav.leave_while_statement += T(:leave_breakable_statement)
14092
+ trav.enter_do_statement += T(:enter_breakable_statement)
14093
+ trav.leave_do_statement += T(:leave_breakable_statement)
14094
+ trav.enter_for_statement += T(:enter_breakable_statement)
14095
+ trav.leave_for_statement += T(:leave_breakable_statement)
14096
+ trav.enter_c99_for_statement += T(:enter_breakable_statement)
14097
+ trav.leave_c99_for_statement += T(:leave_breakable_statement)
14050
14098
  @breakable_stmts = []
14051
14099
  end
14052
14100
 
@@ -14069,6 +14117,32 @@ module CBuiltin #:nodoc:
14069
14117
  end
14070
14118
  end
14071
14119
 
14120
+ class W0606 < PassiveCodeCheck
14121
+ def_registrant_phase Cc1::Prepare2Phase
14122
+
14123
+ # NOTE: All messages of cc1-phase code check should be unique till function
14124
+ # step-in analysis is supported.
14125
+ mark_as_unique
14126
+
14127
+ def initialize(phase_ctxt)
14128
+ super
14129
+ trav = phase_ctxt[:cc1_ast_traversal]
14130
+ trav.enter_union_type_declaration += T(:check)
14131
+ end
14132
+
14133
+ private
14134
+ def check(node)
14135
+ node.struct_declarations.each do |struct_dcl|
14136
+ struct_dcl.items.each do |memb_dcl|
14137
+ if memb_dcl.type.scalar? && memb_dcl.type.floating?
14138
+ W(node.location)
14139
+ return
14140
+ end
14141
+ end
14142
+ end
14143
+ end
14144
+ end
14145
+
14072
14146
  class W0607 < PassiveCodeCheck
14073
14147
  def_registrant_phase Cc1::Prepare2Phase
14074
14148
 
@@ -14550,9 +14624,9 @@ module CBuiltin #:nodoc:
14550
14624
 
14551
14625
  def initialize(phase_ctxt)
14552
14626
  super
14553
- traversal = phase_ctxt[:cc1_ast_traversal]
14554
- traversal.enter_ansi_function_definition += T(:check)
14555
- traversal.enter_kandr_function_definition += T(:check)
14627
+ trav = phase_ctxt[:cc1_ast_traversal]
14628
+ trav.enter_ansi_function_definition += T(:check)
14629
+ trav.enter_kandr_function_definition += T(:check)
14556
14630
  @dires = collect_define_lines(phase_ctxt[:cpp_ast]) +
14557
14631
  collect_undef_lines(phase_ctxt[:cpp_ast])
14558
14632
  end
@@ -14630,9 +14704,9 @@ module CBuiltin #:nodoc:
14630
14704
 
14631
14705
  def initialize(phase_ctxt)
14632
14706
  super
14633
- traversal = phase_ctxt[:cc1_ast_traversal]
14634
- traversal.enter_constant_specifier += T(:check_constant)
14635
- traversal.enter_string_literal_specifier += T(:check_string_literal)
14707
+ trav = phase_ctxt[:cc1_ast_traversal]
14708
+ trav.enter_constant_specifier += T(:check_constant)
14709
+ trav.enter_string_literal_specifier += T(:check_string_literal)
14636
14710
  end
14637
14711
 
14638
14712
  private
@@ -14654,21 +14728,21 @@ module CBuiltin #:nodoc:
14654
14728
 
14655
14729
  def initialize(phase_ctxt)
14656
14730
  super
14657
- traversal = phase_ctxt[:cc1_ast_traversal]
14658
- traversal.enter_compound_statement += T(:enter_block)
14659
- traversal.leave_compound_statement += T(:leave_block)
14660
- traversal.enter_expression_statement += T(:enter_expression_statement)
14661
- traversal.enter_if_statement += T(:update_last_statement)
14662
- traversal.enter_if_else_statement += T(:update_last_statement)
14663
- traversal.enter_switch_statement += T(:update_last_statement)
14664
- traversal.enter_while_statement += T(:update_last_statement)
14665
- traversal.enter_do_statement += T(:update_last_statement)
14666
- traversal.enter_for_statement += T(:enter_for_statement)
14667
- traversal.enter_c99_for_statement += T(:enter_for_statement)
14668
- traversal.enter_goto_statement += T(:update_last_statement)
14669
- traversal.enter_continue_statement += T(:update_last_statement)
14670
- traversal.enter_break_statement += T(:update_last_statement)
14671
- traversal.enter_return_statement += T(:update_last_statement)
14731
+ trav = phase_ctxt[:cc1_ast_traversal]
14732
+ trav.enter_compound_statement += T(:enter_block)
14733
+ trav.leave_compound_statement += T(:leave_block)
14734
+ trav.enter_expression_statement += T(:enter_expression_statement)
14735
+ trav.enter_if_statement += T(:update_last_statement)
14736
+ trav.enter_if_else_statement += T(:update_last_statement)
14737
+ trav.enter_switch_statement += T(:update_last_statement)
14738
+ trav.enter_while_statement += T(:update_last_statement)
14739
+ trav.enter_do_statement += T(:update_last_statement)
14740
+ trav.enter_for_statement += T(:enter_for_statement)
14741
+ trav.enter_c99_for_statement += T(:enter_for_statement)
14742
+ trav.enter_goto_statement += T(:update_last_statement)
14743
+ trav.enter_continue_statement += T(:update_last_statement)
14744
+ trav.enter_break_statement += T(:update_last_statement)
14745
+ trav.enter_return_statement += T(:update_last_statement)
14672
14746
  @lst_stmts = []
14673
14747
  @expected_stmts = Set.new
14674
14748
  end
@@ -15094,6 +15168,26 @@ module CBuiltin #:nodoc:
15094
15168
  end
15095
15169
  end
15096
15170
 
15171
+ class W0645 < PassiveCodeCheck
15172
+ def_registrant_phase Cc1::Prepare2Phase
15173
+
15174
+ # NOTE: All messages of cc1-phase code check should be unique till function
15175
+ # step-in analysis is supported.
15176
+ mark_as_unique
15177
+
15178
+ def initialize(phase_ctxt)
15179
+ super
15180
+ trav = phase_ctxt[:cc1_ast_traversal]
15181
+ trav.enter_kandr_function_definition += T(:check)
15182
+ end
15183
+
15184
+ def check(node)
15185
+ if node.type.parameter_types.any? { |type| type.void? }
15186
+ W(node.location)
15187
+ end
15188
+ end
15189
+ end
15190
+
15097
15191
  class W0646 < PassiveCodeCheck
15098
15192
  def_registrant_phase Cc1::Prepare1Phase
15099
15193
 
@@ -15868,6 +15962,52 @@ module CBuiltin #:nodoc:
15868
15962
  end
15869
15963
  end
15870
15964
 
15965
+ class W0685 < W0573
15966
+ def_registrant_phase Cc1::Prepare2Phase
15967
+
15968
+ # NOTE: All messages of cc1-phase code check should be unique till function
15969
+ # step-in analysis is supported.
15970
+ mark_as_unique
15971
+
15972
+ def check(funcall_expr, fun, arg_vars, *)
15973
+ if fun.named? && fun.name =~ /\A.*scanf\z/
15974
+ fmt = create_format(funcall_expr, format_str_index_of(funcall_expr),
15975
+ arg_vars, @environ)
15976
+ return unless fmt
15977
+
15978
+ fmt.conversion_specifiers.each do |conv_spec|
15979
+ if conv_spec.scanset
15980
+ conv_spec.scanset.scan(/(.)-(.)/).each do |lhs, rhs|
15981
+ W(fmt.location) if lhs.ord > rhs.ord
15982
+ end
15983
+ end
15984
+ end
15985
+ end
15986
+ end
15987
+ end
15988
+
15989
+ class W0686 < W0573
15990
+ def_registrant_phase Cc1::Prepare2Phase
15991
+
15992
+ # NOTE: All messages of cc1-phase code check should be unique till function
15993
+ # step-in analysis is supported.
15994
+ mark_as_unique
15995
+
15996
+ def check(funcall_expr, fun, arg_vars, *)
15997
+ if fun.named? && fun.name =~ /\A.*scanf\z/
15998
+ fmt = create_format(funcall_expr, format_str_index_of(funcall_expr),
15999
+ arg_vars, @environ)
16000
+ return unless fmt
16001
+
16002
+ fmt.conversion_specifiers.each do |conv_spec|
16003
+ if conv_spec.scanset
16004
+ W(fmt.location) unless conv_spec.valid_scanset?
16005
+ end
16006
+ end
16007
+ end
16008
+ end
16009
+ end
16010
+
15871
16011
  class W0694 < PassiveCodeCheck
15872
16012
  def_registrant_phase Cc1::Prepare2Phase
15873
16013
 
@@ -15887,6 +16027,138 @@ module CBuiltin #:nodoc:
15887
16027
  end
15888
16028
  end
15889
16029
 
16030
+ class W0697 < PassiveCodeCheck
16031
+ def_registrant_phase Cc1::Prepare2Phase
16032
+
16033
+ # NOTE: All messages of cc1-phase code check should be unique till function
16034
+ # step-in analysis is supported.
16035
+ mark_as_unique
16036
+
16037
+ def initialize(phase_ctxt)
16038
+ super
16039
+ interp = phase_ctxt[:cc1_interpreter]
16040
+ interp.on_function_started += T(:start_function)
16041
+ interp.on_function_ended += T(:end_function)
16042
+ interp.on_implicit_return_evaled += M(:check_implicit_return)
16043
+ @cur_fun = nil
16044
+ end
16045
+
16046
+ private
16047
+ def start_function(fun_def, *)
16048
+ @cur_fun = fun_def
16049
+ end
16050
+
16051
+ def end_function(*)
16052
+ @cur_fun = nil
16053
+ end
16054
+
16055
+ def check_implicit_return(loc)
16056
+ if @cur_fun && loc.in_analysis_target?(traits)
16057
+ unless @cur_fun.type.return_type.void?
16058
+ W(@cur_fun.location, @cur_fun.identifier.value)
16059
+ end
16060
+ end
16061
+ end
16062
+ end
16063
+
16064
+ class W0698 < PassiveCodeCheck
16065
+ def_registrant_phase Cc1::Prepare2Phase
16066
+
16067
+ # NOTE: All messages of cc1-phase code check should be unique till function
16068
+ # step-in analysis is supported.
16069
+ mark_as_unique
16070
+
16071
+ def initialize(phase_ctxt)
16072
+ super
16073
+ trav = phase_ctxt[:cc1_ast_traversal]
16074
+ trav.enter_ansi_function_definition += T(:start_function)
16075
+ trav.enter_kandr_function_definition += T(:start_function)
16076
+ trav.leave_ansi_function_definition += T(:end_function)
16077
+ trav.leave_kandr_function_definition += T(:end_function)
16078
+ trav.enter_return_statement += T(:check)
16079
+ @cur_fun = nil
16080
+ end
16081
+
16082
+ private
16083
+ def start_function(fun_def)
16084
+ @cur_fun = fun_def
16085
+ end
16086
+
16087
+ def end_function(*)
16088
+ @cur_fun = nil
16089
+ end
16090
+
16091
+ def check(ret_stmt)
16092
+ return unless @cur_fun.explicitly_typed?
16093
+
16094
+ if ret_type = @cur_fun.type.return_type
16095
+ if !ret_type.void? && ret_stmt.expression.nil?
16096
+ W(ret_stmt.location, @cur_fun.identifier.value)
16097
+ end
16098
+ end
16099
+ end
16100
+ end
16101
+
16102
+ class W0699 < W0698
16103
+ def_registrant_phase Cc1::Prepare2Phase
16104
+
16105
+ # NOTE: All messages of cc1-phase code check should be unique till function
16106
+ # step-in analysis is supported.
16107
+ mark_as_unique
16108
+
16109
+ private
16110
+ def check(ret_stmt)
16111
+ return unless @cur_fun.implicitly_typed?
16112
+
16113
+ if ret_stmt.expression.nil?
16114
+ W(ret_stmt.location, @cur_fun.identifier.value)
16115
+ end
16116
+ end
16117
+ end
16118
+
16119
+ class W0700 < PassiveCodeCheck
16120
+ def_registrant_phase Cc1::Prepare2Phase
16121
+
16122
+ # NOTE: All messages of cc1-phase code check should be unique till function
16123
+ # step-in analysis is supported.
16124
+ mark_as_unique
16125
+
16126
+ def initialize(phase_ctxt)
16127
+ super
16128
+ interp = phase_ctxt[:cc1_interpreter]
16129
+ interp.on_function_started += T(:start_function)
16130
+ interp.on_function_ended += T(:end_function)
16131
+ interp.on_return_stmt_evaled += T(:check_explicit_return)
16132
+ interp.on_implicit_return_evaled += M(:check_implicit_return)
16133
+ @cur_fun = nil
16134
+ end
16135
+
16136
+ private
16137
+ def start_function(fun_def, *)
16138
+ @cur_fun = fun_def
16139
+ end
16140
+
16141
+ def end_function(*)
16142
+ @cur_fun = nil
16143
+ end
16144
+
16145
+ def check_explicit_return(ret_stmt, *)
16146
+ if @cur_fun
16147
+ if @cur_fun.implicitly_typed? && ret_stmt.expression.nil?
16148
+ W(@cur_fun.location, @cur_fun.identifier.value)
16149
+ end
16150
+ end
16151
+ end
16152
+
16153
+ def check_implicit_return(loc)
16154
+ if @cur_fun && loc.in_analysis_target?(traits)
16155
+ if @cur_fun.implicitly_typed?
16156
+ W(@cur_fun.location, @cur_fun.identifier.value)
16157
+ end
16158
+ end
16159
+ end
16160
+ end
16161
+
15890
16162
  class W0703 < PassiveCodeCheck
15891
16163
  def_registrant_phase Cc1::Prepare2Phase
15892
16164
 
@@ -16181,7 +16453,7 @@ module CBuiltin #:nodoc:
16181
16453
  return unless ary
16182
16454
 
16183
16455
  unless constant_expression?(subs_expr)
16184
- subs = interpret(subs_expr, QUIET_WITHOUT_SIDE_EFFECT)
16456
+ subs = interpret(subs_expr, QUIET, WITHOUT_SIDE_EFFECTS)
16185
16457
  warn_array_oob_access(expr.operand, ary, subs)
16186
16458
  end
16187
16459
  end
@@ -16943,65 +17215,215 @@ module CBuiltin #:nodoc:
16943
17215
  private_constant :Visitor
16944
17216
  end
16945
17217
 
16946
- class W0719 < PassiveCodeCheck
17218
+ class W0711 < PassiveCodeCheck
16947
17219
  def_registrant_phase Cc1::Prepare2Phase
16948
17220
 
16949
- include Cc1::InterpreterMediator
16950
-
16951
17221
  # NOTE: All messages of cc1-phase code check should be unique till function
16952
17222
  # step-in analysis is supported.
16953
17223
  mark_as_unique
16954
17224
 
16955
17225
  def initialize(phase_ctxt)
16956
17226
  super
16957
- @interp = phase_ctxt[:cc1_interpreter]
16958
- @interp.on_shift_expr_evaled += T(:check)
17227
+ trav = phase_ctxt[:cc1_ast_traversal]
17228
+ trav.enter_relational_expression += T(:check)
16959
17229
  end
16960
17230
 
16961
17231
  private
16962
- def check(expr, lhs_var, rhs_var, *)
16963
- if constant_expression?(expr.rhs_operand)
16964
- underlying_type = lhs_var.type
16965
- underlying_bit_size = scalar_value_of(underlying_type.bit_size)
16966
- promoted_type = lhs_var.type.integer_promoted_type
16967
- promoted_bit_size = scalar_value_of(promoted_type.bit_size)
16968
-
16969
- rhs_val = rhs_var.value
16970
- if rhs_val.test_must_be_equal_to(underlying_bit_size).true? ||
16971
- rhs_val.test_must_be_greater_than(underlying_bit_size).true? and
16972
- rhs_val.test_must_be_less_than(promoted_bit_size).true?
16973
- W(expr.location, underlying_type.brief_image)
16974
- end
17232
+ def check(expr)
17233
+ if !expr.lhs_operand.logical? && expr.rhs_operand.logical?
17234
+ W(expr.rhs_operand.location)
16975
17235
  end
16976
17236
  end
16977
-
16978
- def interpreter
16979
- @interp
16980
- end
16981
17237
  end
16982
17238
 
16983
- class W0720 < PassiveCodeCheck
17239
+ class W0712 < W0711
16984
17240
  def_registrant_phase Cc1::Prepare2Phase
16985
17241
 
16986
- include Cc1::InterpreterMediator
16987
-
16988
17242
  # NOTE: All messages of cc1-phase code check should be unique till function
16989
17243
  # step-in analysis is supported.
16990
17244
  mark_as_unique
16991
17245
 
16992
- def initialize(phase_ctxt)
16993
- super
16994
- @interp = phase_ctxt[:cc1_interpreter]
16995
- @interp.on_explicit_conv_performed += T(:check)
17246
+ private
17247
+ def check(expr)
17248
+ if expr.lhs_operand.logical? && !expr.rhs_operand.logical?
17249
+ W(expr.lhs_operand.location)
17250
+ end
16996
17251
  end
17252
+ end
16997
17253
 
16998
- private
16999
- def check(expr, orig_var, rslt_var)
17000
- orig_type = orig_var.type
17001
- rslt_type = rslt_var.type
17254
+ class W0713 < W0711
17255
+ def_registrant_phase Cc1::Prepare2Phase
17002
17256
 
17003
- unless orig_type.scalar? && orig_type.floating? &&
17004
- rslt_type.scalar? && rslt_type.integer?
17257
+ # NOTE: All messages of cc1-phase code check should be unique till function
17258
+ # step-in analysis is supported.
17259
+ mark_as_unique
17260
+
17261
+ private
17262
+ def check(expr)
17263
+ if expr.lhs_operand.logical? && expr.rhs_operand.logical?
17264
+ W(expr.location)
17265
+ end
17266
+ end
17267
+ end
17268
+
17269
+ class W0714 < PassiveCodeCheck
17270
+ def_registrant_phase Cc1::Prepare2Phase
17271
+
17272
+ # NOTE: All messages of cc1-phase code check should be unique till function
17273
+ # step-in analysis is supported.
17274
+ mark_as_unique
17275
+
17276
+ def initialize(phase_ctxt)
17277
+ super
17278
+ trav = phase_ctxt[:cc1_ast_traversal]
17279
+ trav.enter_and_expression += T(:check)
17280
+ end
17281
+
17282
+ private
17283
+ def check(expr)
17284
+ if expr.lhs_operand.logical? && expr.rhs_operand.logical?
17285
+ W(expr.location)
17286
+ end
17287
+ end
17288
+ end
17289
+
17290
+ class W0715 < PassiveCodeCheck
17291
+ def_registrant_phase Cc1::Prepare2Phase
17292
+
17293
+ # NOTE: All messages of cc1-phase code check should be unique till function
17294
+ # step-in analysis is supported.
17295
+ mark_as_unique
17296
+
17297
+ def initialize(phase_ctxt)
17298
+ super
17299
+ trav = phase_ctxt[:cc1_ast_traversal]
17300
+ trav.enter_inclusive_or_expression += T(:check)
17301
+ end
17302
+
17303
+ private
17304
+ def check(expr)
17305
+ if expr.lhs_operand.logical? && expr.rhs_operand.logical?
17306
+ W(expr.location)
17307
+ end
17308
+ end
17309
+ end
17310
+
17311
+ class W0716 < PassiveCodeCheck
17312
+ def_registrant_phase Cc1::Prepare2Phase
17313
+
17314
+ # NOTE: All messages of cc1-phase code check should be unique till function
17315
+ # step-in analysis is supported.
17316
+ mark_as_unique
17317
+
17318
+ def initialize(phase_ctxt)
17319
+ super
17320
+ trav = phase_ctxt[:cc1_ast_traversal]
17321
+ trav.enter_additive_expression += T(:check)
17322
+ trav.enter_multiplicative_expression += T(:check)
17323
+ trav.enter_shift_expression += T(:check)
17324
+ trav.enter_and_expression += T(:check)
17325
+ trav.enter_exclusive_or_expression += T(:check)
17326
+ trav.enter_inclusive_or_expression += T(:check)
17327
+ trav.enter_compound_assignment_expression += T(:check)
17328
+ end
17329
+
17330
+ private
17331
+ def check(expr)
17332
+ if expr.lhs_operand.logical? && expr.rhs_operand.logical?
17333
+ W(expr.location)
17334
+ end
17335
+ end
17336
+ end
17337
+
17338
+ class W0717 < W0716
17339
+ def_registrant_phase Cc1::Prepare2Phase
17340
+
17341
+ # NOTE: All messages of cc1-phase code check should be unique till function
17342
+ # step-in analysis is supported.
17343
+ mark_as_unique
17344
+
17345
+ private
17346
+ def check(expr)
17347
+ if expr.lhs_operand.logical? && !expr.rhs_operand.logical?
17348
+ W(expr.lhs_operand.location)
17349
+ end
17350
+ end
17351
+ end
17352
+
17353
+ class W0718 < W0716
17354
+ def_registrant_phase Cc1::Prepare2Phase
17355
+
17356
+ # NOTE: All messages of cc1-phase code check should be unique till function
17357
+ # step-in analysis is supported.
17358
+ mark_as_unique
17359
+
17360
+ private
17361
+ def check(expr)
17362
+ if !expr.lhs_operand.logical? && expr.rhs_operand.logical?
17363
+ W(expr.rhs_operand.location)
17364
+ end
17365
+ end
17366
+ end
17367
+
17368
+ class W0719 < PassiveCodeCheck
17369
+ def_registrant_phase Cc1::Prepare2Phase
17370
+
17371
+ include Cc1::InterpreterMediator
17372
+
17373
+ # NOTE: All messages of cc1-phase code check should be unique till function
17374
+ # step-in analysis is supported.
17375
+ mark_as_unique
17376
+
17377
+ def initialize(phase_ctxt)
17378
+ super
17379
+ @interp = phase_ctxt[:cc1_interpreter]
17380
+ @interp.on_shift_expr_evaled += T(:check)
17381
+ end
17382
+
17383
+ private
17384
+ def check(expr, lhs_var, rhs_var, *)
17385
+ if constant_expression?(expr.rhs_operand)
17386
+ underlying_type = lhs_var.type
17387
+ underlying_bit_size = scalar_value_of(underlying_type.bit_size)
17388
+ promoted_type = lhs_var.type.integer_promoted_type
17389
+ promoted_bit_size = scalar_value_of(promoted_type.bit_size)
17390
+
17391
+ rhs_val = rhs_var.value
17392
+ if rhs_val.test_must_be_equal_to(underlying_bit_size).true? ||
17393
+ rhs_val.test_must_be_greater_than(underlying_bit_size).true? and
17394
+ rhs_val.test_must_be_less_than(promoted_bit_size).true?
17395
+ W(expr.location, underlying_type.brief_image)
17396
+ end
17397
+ end
17398
+ end
17399
+
17400
+ def interpreter
17401
+ @interp
17402
+ end
17403
+ end
17404
+
17405
+ class W0720 < PassiveCodeCheck
17406
+ def_registrant_phase Cc1::Prepare2Phase
17407
+
17408
+ include Cc1::InterpreterMediator
17409
+
17410
+ # NOTE: All messages of cc1-phase code check should be unique till function
17411
+ # step-in analysis is supported.
17412
+ mark_as_unique
17413
+
17414
+ def initialize(phase_ctxt)
17415
+ super
17416
+ @interp = phase_ctxt[:cc1_interpreter]
17417
+ @interp.on_explicit_conv_performed += T(:check)
17418
+ end
17419
+
17420
+ private
17421
+ def check(expr, orig_var, rslt_var)
17422
+ orig_type = orig_var.type
17423
+ rslt_type = rslt_var.type
17424
+
17425
+ unless orig_type.scalar? && orig_type.floating? &&
17426
+ rslt_type.scalar? && rslt_type.integer?
17005
17427
  return
17006
17428
  end
17007
17429
 
@@ -17155,6 +17577,25 @@ module CBuiltin #:nodoc:
17155
17577
  end
17156
17578
  end
17157
17579
 
17580
+ class W0726 < W0698
17581
+ def_registrant_phase Cc1::Prepare2Phase
17582
+
17583
+ # NOTE: All messages of cc1-phase code check should be unique till function
17584
+ # step-in analysis is supported.
17585
+ mark_as_unique
17586
+
17587
+ private
17588
+ def check(ret_stmt)
17589
+ if ret_stmt.expression
17590
+ if ret_type = @cur_fun.type.return_type
17591
+ if ret_type.void? && (ret_type.const? || ret_type.volatile?)
17592
+ W(ret_stmt.location, @cur_fun.identifier.value)
17593
+ end
17594
+ end
17595
+ end
17596
+ end
17597
+ end
17598
+
17158
17599
  class W0727 < PassiveCodeCheck
17159
17600
  def_registrant_phase Cc1::Prepare2Phase
17160
17601
 
@@ -17329,6 +17770,93 @@ module CBuiltin #:nodoc:
17329
17770
  end
17330
17771
  end
17331
17772
 
17773
+ class W0732 < PassiveCodeCheck
17774
+ def_registrant_phase Cc1::Prepare2Phase
17775
+
17776
+ # NOTE: All messages of cc1-phase code check should be unique till function
17777
+ # step-in analysis is supported.
17778
+ mark_as_unique
17779
+
17780
+ def initialize(phase_ctxt)
17781
+ super
17782
+ trav = phase_ctxt[:cc1_ast_traversal]
17783
+ trav.enter_logical_and_expression += T(:check)
17784
+ end
17785
+
17786
+ private
17787
+ def check(expr)
17788
+ if expr.lhs_operand.arithmetic? || expr.lhs_operand.bitwise?
17789
+ if expr.rhs_operand.arithmetic? || expr.rhs_operand.bitwise?
17790
+ W(expr.location)
17791
+ end
17792
+ end
17793
+ end
17794
+ end
17795
+
17796
+ class W0733 < PassiveCodeCheck
17797
+ def_registrant_phase Cc1::Prepare2Phase
17798
+
17799
+ # NOTE: All messages of cc1-phase code check should be unique till function
17800
+ # step-in analysis is supported.
17801
+ mark_as_unique
17802
+
17803
+ def initialize(phase_ctxt)
17804
+ super
17805
+ trav = phase_ctxt[:cc1_ast_traversal]
17806
+ trav.enter_logical_or_expression += T(:check)
17807
+ end
17808
+
17809
+ private
17810
+ def check(expr)
17811
+ if expr.lhs_operand.arithmetic? || expr.lhs_operand.bitwise?
17812
+ if expr.rhs_operand.arithmetic? || expr.rhs_operand.bitwise?
17813
+ W(expr.location)
17814
+ end
17815
+ end
17816
+ end
17817
+ end
17818
+
17819
+ class W0734 < PassiveCodeCheck
17820
+ def_registrant_phase Cc1::Prepare2Phase
17821
+
17822
+ # NOTE: All messages of cc1-phase code check should be unique till function
17823
+ # step-in analysis is supported.
17824
+ mark_as_unique
17825
+
17826
+ def initialize(phase_ctxt)
17827
+ super
17828
+ trav = phase_ctxt[:cc1_ast_traversal]
17829
+ trav.enter_logical_and_expression += T(:check)
17830
+ trav.enter_logical_or_expression += T(:check)
17831
+ end
17832
+
17833
+ private
17834
+ def check(expr)
17835
+ if expr.lhs_operand.arithmetic? || expr.lhs_operand.bitwise?
17836
+ unless expr.rhs_operand.arithmetic? || expr.rhs_operand.bitwise?
17837
+ W(expr.lhs_operand.location)
17838
+ end
17839
+ end
17840
+ end
17841
+ end
17842
+
17843
+ class W0735 < W0734
17844
+ def_registrant_phase Cc1::Prepare2Phase
17845
+
17846
+ # NOTE: All messages of cc1-phase code check should be unique till function
17847
+ # step-in analysis is supported.
17848
+ mark_as_unique
17849
+
17850
+ private
17851
+ def check(expr)
17852
+ if expr.rhs_operand.arithmetic? || expr.rhs_operand.bitwise?
17853
+ unless expr.lhs_operand.arithmetic? || expr.lhs_operand.bitwise?
17854
+ W(expr.rhs_operand.location)
17855
+ end
17856
+ end
17857
+ end
17858
+ end
17859
+
17332
17860
  class W0736 < PassiveCodeCheck
17333
17861
  def_registrant_phase Cc1::Prepare2Phase
17334
17862
 
@@ -17750,7 +18278,7 @@ module CBuiltin #:nodoc:
17750
18278
  return unless ary
17751
18279
 
17752
18280
  unless constant_expression?(subs_expr)
17753
- subs = interpret(subs_expr, QUIET_WITHOUT_SIDE_EFFECT)
18281
+ subs = interpret(subs_expr, QUIET, WITHOUT_SIDE_EFFECTS)
17754
18282
  warn_array_oob_access(expr.operand, ary, subs)
17755
18283
  end
17756
18284
  end
@@ -18665,6 +19193,40 @@ module CBuiltin #:nodoc:
18665
19193
  end
18666
19194
  end
18667
19195
 
19196
+ class W0781 < PassiveCodeCheck
19197
+ def_registrant_phase Cc1::Prepare2Phase
19198
+
19199
+ # NOTE: All messages of cc1-phase code check should be unique till function
19200
+ # step-in analysis is supported.
19201
+ mark_as_unique
19202
+
19203
+ def initialize(phase_ctxt)
19204
+ super
19205
+ trav = phase_ctxt[:cc1_ast_traversal]
19206
+ trav.enter_switch_statement += T(:enter_switch_statement)
19207
+ trav.leave_switch_statement += T(:check)
19208
+ trav.enter_case_labeled_statement += T(:add_exec_path)
19209
+ trav.enter_default_labeled_statement += T(:add_exec_path)
19210
+ @exec_path_nums = []
19211
+ end
19212
+
19213
+ private
19214
+ def enter_switch_statement(*)
19215
+ @exec_path_nums.push(0)
19216
+ end
19217
+
19218
+ def check(node)
19219
+ if exec_path_num = @exec_path_nums.last and exec_path_num < 2
19220
+ W(node.location)
19221
+ end
19222
+ @exec_path_nums.pop
19223
+ end
19224
+
19225
+ def add_exec_path(node)
19226
+ @exec_path_nums[-1] += 1 if node.executed?
19227
+ end
19228
+ end
19229
+
18668
19230
  class W0783 < PassiveCodeCheck
18669
19231
  def_registrant_phase Cc1::Prepare2Phase
18670
19232
 
@@ -18731,9 +19293,9 @@ module CBuiltin #:nodoc:
18731
19293
 
18732
19294
  def initialize(phase_ctxt)
18733
19295
  super
18734
- traversal = phase_ctxt[:cc1_ast_traversal]
18735
- traversal.enter_struct_type_declaration += T(:check)
18736
- traversal.enter_union_type_declaration += T(:check)
19296
+ trav = phase_ctxt[:cc1_ast_traversal]
19297
+ trav.enter_struct_type_declaration += T(:check)
19298
+ trav.enter_union_type_declaration += T(:check)
18737
19299
  @interp = phase_ctxt[:cc1_interpreter]
18738
19300
  end
18739
19301
 
@@ -18769,12 +19331,12 @@ module CBuiltin #:nodoc:
18769
19331
  def initialize(phase_ctxt)
18770
19332
  super
18771
19333
  interp = phase_ctxt[:cc1_interpreter]
18772
- interp.on_variable_declared += T(:check_object_declaration)
18773
- interp.on_variable_defined += T(:check_object_declaration)
18774
- interp.on_explicit_function_declared += T(:check_object_declaration)
18775
- interp.on_explicit_function_defined += T(:check_object_declaration)
18776
- interp.on_typedef_declared += T(:check_typedef_declaration)
18777
- interp.on_enum_declared += T(:check_enum_declaration)
19334
+ interp.on_variable_declared += T(:check_object_dcl)
19335
+ interp.on_variable_defined += T(:check_object_dcl)
19336
+ interp.on_explicit_function_declared += T(:check_object_dcl)
19337
+ interp.on_explicit_function_defined += T(:check_object_dcl)
19338
+ interp.on_typedef_declared += T(:check_typedef_dcl)
19339
+ interp.on_enum_declared += T(:check_enum_dcl)
18778
19340
  interp.on_block_started += T(:enter_scope)
18779
19341
  interp.on_block_ended += T(:leave_scope)
18780
19342
 
@@ -18788,7 +19350,7 @@ module CBuiltin #:nodoc:
18788
19350
  end
18789
19351
 
18790
19352
  private
18791
- def check_object_declaration(obj_dcl, obj)
19353
+ def check_object_dcl(obj_dcl, obj)
18792
19354
  return unless obj.declared_as_extern?
18793
19355
 
18794
19356
  name = obj_dcl.identifier.value
@@ -18807,7 +19369,7 @@ module CBuiltin #:nodoc:
18807
19369
  @obj_dcls.last[name].push(obj_dcl)
18808
19370
  end
18809
19371
 
18810
- def check_typedef_declaration(typedef_dcl)
19372
+ def check_typedef_dcl(typedef_dcl)
18811
19373
  name = typedef_dcl.identifier.value
18812
19374
  type = typedef_dcl.type
18813
19375
 
@@ -18825,7 +19387,7 @@ module CBuiltin #:nodoc:
18825
19387
  @typedef_dcls.last[name].push(typedef_dcl)
18826
19388
  end
18827
19389
 
18828
- def check_enum_declaration(enum_dcl)
19390
+ def check_enum_dcl(enum_dcl)
18829
19391
  enum_dcl.enumerators.each { |enum| check_enumerator(enum) }
18830
19392
  end
18831
19393
 
@@ -18879,12 +19441,12 @@ module CBuiltin #:nodoc:
18879
19441
  def initialize(phase_ctxt)
18880
19442
  super
18881
19443
  interp = phase_ctxt[:cc1_interpreter]
18882
- interp.on_variable_declared += T(:check_object_declaration)
18883
- interp.on_variable_defined += T(:check_object_declaration)
18884
- interp.on_explicit_function_declared += T(:check_object_declaration)
18885
- interp.on_explicit_function_defined += T(:check_object_declaration)
18886
- interp.on_typedef_declared += T(:check_typedef_declaration)
18887
- interp.on_enum_declared += T(:check_enum_declaration)
19444
+ interp.on_variable_declared += T(:check_object_dcl)
19445
+ interp.on_variable_defined += T(:check_object_dcl)
19446
+ interp.on_explicit_function_declared += T(:check_object_dcl)
19447
+ interp.on_explicit_function_defined += T(:check_object_dcl)
19448
+ interp.on_typedef_declared += T(:check_typedef_dcl)
19449
+ interp.on_enum_declared += T(:check_enum_dcl)
18888
19450
  interp.on_block_started += T(:enter_scope)
18889
19451
  interp.on_block_ended += T(:leave_scope)
18890
19452
 
@@ -18894,7 +19456,7 @@ module CBuiltin #:nodoc:
18894
19456
  end
18895
19457
 
18896
19458
  private
18897
- def check_object_declaration(obj_dcl, *)
19459
+ def check_object_dcl(obj_dcl, *)
18898
19460
  name = obj_dcl.identifier.value
18899
19461
  type = obj_dcl.type
18900
19462
 
@@ -18910,7 +19472,7 @@ module CBuiltin #:nodoc:
18910
19472
  @obj_dcls.last[name].push(obj_dcl)
18911
19473
  end
18912
19474
 
18913
- def check_typedef_declaration(typedef_dcl)
19475
+ def check_typedef_dcl(typedef_dcl)
18914
19476
  name = typedef_dcl.identifier.value
18915
19477
  type = typedef_dcl.type
18916
19478
 
@@ -18927,7 +19489,7 @@ module CBuiltin #:nodoc:
18927
19489
  @typedef_dcls.last[name].push(typedef_dcl)
18928
19490
  end
18929
19491
 
18930
- def check_enum_declaration(enum_dcl)
19492
+ def check_enum_dcl(enum_dcl)
18931
19493
  enum_dcl.enumerators.each { |enum| check_enumerator(enum) }
18932
19494
  end
18933
19495
 
@@ -18969,12 +19531,12 @@ module CBuiltin #:nodoc:
18969
19531
  def initialize(phase_ctxt)
18970
19532
  super
18971
19533
  interp = phase_ctxt[:cc1_interpreter]
18972
- interp.on_variable_declared += T(:check_object_declaration)
18973
- interp.on_variable_defined += T(:check_object_declaration)
18974
- interp.on_explicit_function_declared += T(:check_object_declaration)
18975
- interp.on_explicit_function_defined += T(:check_object_declaration)
18976
- interp.on_typedef_declared += T(:check_typedef_declaration)
18977
- interp.on_enum_declared += T(:check_enum_declaration)
19534
+ interp.on_variable_declared += T(:check_object_dcl)
19535
+ interp.on_variable_defined += T(:check_object_dcl)
19536
+ interp.on_explicit_function_declared += T(:check_object_dcl)
19537
+ interp.on_explicit_function_defined += T(:check_object_dcl)
19538
+ interp.on_typedef_declared += T(:check_typedef_dcl)
19539
+ interp.on_enum_declared += T(:check_enum_dcl)
18978
19540
  interp.on_block_started += T(:enter_scope)
18979
19541
  interp.on_block_ended += T(:leave_scope)
18980
19542
 
@@ -18984,7 +19546,7 @@ module CBuiltin #:nodoc:
18984
19546
  end
18985
19547
 
18986
19548
  private
18987
- def check_object_declaration(obj_dcl, *)
19549
+ def check_object_dcl(obj_dcl, *)
18988
19550
  name = obj_dcl.identifier.value
18989
19551
  type = obj_dcl.type
18990
19552
 
@@ -19002,7 +19564,7 @@ module CBuiltin #:nodoc:
19002
19564
  @obj_dcls.last[name].push(obj_dcl)
19003
19565
  end
19004
19566
 
19005
- def check_typedef_declaration(typedef_dcl)
19567
+ def check_typedef_dcl(typedef_dcl)
19006
19568
  name = typedef_dcl.identifier.value
19007
19569
  type = typedef_dcl.type
19008
19570
 
@@ -19020,7 +19582,7 @@ module CBuiltin #:nodoc:
19020
19582
  @typedef_dcls.last[name].push(typedef_dcl)
19021
19583
  end
19022
19584
 
19023
- def check_enum_declaration(enum_dcl)
19585
+ def check_enum_dcl(enum_dcl)
19024
19586
  enum_dcl.enumerators.each { |enum| check_enumerator(enum) }
19025
19587
  end
19026
19588
 
@@ -19391,6 +19953,121 @@ module CBuiltin #:nodoc:
19391
19953
  end
19392
19954
  end
19393
19955
 
19956
+ class W0801 < PassiveCodeCheck
19957
+ def_registrant_phase Cc1::Prepare2Phase
19958
+
19959
+ # NOTE: All messages of cc1-phase code check should be unique till function
19960
+ # step-in analysis is supported.
19961
+ mark_as_unique
19962
+
19963
+ def initialize(phase_ctxt)
19964
+ super
19965
+ trav = phase_ctxt[:cc1_ast_traversal]
19966
+ trav.enter_struct_type_declaration += T(:check)
19967
+ trav.enter_union_type_declaration += T(:check)
19968
+ end
19969
+
19970
+ private
19971
+ def check(node)
19972
+ W(node.location) if node.type.members.empty?
19973
+ end
19974
+ end
19975
+
19976
+ class W0809 < PassiveCodeCheck
19977
+ def_registrant_phase Cc1::Prepare2Phase
19978
+
19979
+ # NOTE: All messages of cc1-phase code check should be unique till function
19980
+ # step-in analysis is supported.
19981
+ mark_as_unique
19982
+
19983
+ def initialize(phase_ctxt)
19984
+ super
19985
+ trav = phase_ctxt[:cc1_ast_traversal]
19986
+ trav.enter_function_declaration += T(:check_function_name)
19987
+ trav.enter_variable_declaration += T(:check_variable_name)
19988
+ trav.enter_variable_definition += T(:check_variable_name)
19989
+ trav.enter_parameter_definition += T(:check_variable_name)
19990
+ trav.enter_typedef_declaration += T(:check_typedef_name)
19991
+ trav.enter_struct_type_declaration += T(:check_tag_name)
19992
+ trav.enter_union_type_declaration += T(:check_tag_name)
19993
+ trav.enter_enum_type_declaration += T(:check_tag_name)
19994
+ trav.enter_enumerator += T(:check_enumerator_name)
19995
+ trav.enter_kandr_function_definition += T(:enter_function)
19996
+ trav.enter_ansi_function_definition += T(:enter_function)
19997
+ trav.leave_kandr_function_definition += T(:leave_function)
19998
+ trav.leave_ansi_function_definition += T(:leave_function)
19999
+ @fun_def_level = 0
20000
+ end
20001
+
20002
+ private
20003
+ def check_function_name(fun_dcl)
20004
+ check_object_name(fun_dcl)
20005
+ end
20006
+
20007
+ def check_variable_name(var_dcl_or_def)
20008
+ check_object_name(var_dcl_or_def)
20009
+ end
20010
+
20011
+ def check_typedef_name(typedef_dcl)
20012
+ if typedef_dcl.identifier
20013
+ case name = typedef_dcl.identifier.value
20014
+ when /\A__/, /\A_[A-Z]/, /\A_/
20015
+ W(typedef_dcl.location, name)
20016
+ end
20017
+ end
20018
+ end
20019
+
20020
+ def check_tag_name(type_dcl)
20021
+ if type_dcl.identifier
20022
+ case name = type_dcl.identifier.value
20023
+ when /\A__adlint/
20024
+ # NOTE: To ignore AdLint internal tag names.
20025
+ when /\A__/, /\A_[A-Z]/, /\A_/
20026
+ W(type_dcl.location, name)
20027
+ end
20028
+ end
20029
+ end
20030
+
20031
+ def check_enumerator_name(enum)
20032
+ if enum.identifier
20033
+ case name = enum.identifier.value
20034
+ when /\A__/, /\A_[A-Z]/, /\A_/
20035
+ W(enum.location, name)
20036
+ end
20037
+ end
20038
+ end
20039
+
20040
+ def enter_function(node)
20041
+ check_object_name(node)
20042
+ @fun_def_level += 1
20043
+ end
20044
+
20045
+ def leave_function(node)
20046
+ @fun_def_level -= 1
20047
+ end
20048
+
20049
+ def check_object_name(dcl_or_def)
20050
+ if dcl_or_def.identifier
20051
+ case name = dcl_or_def.identifier.value
20052
+ when /\A__/, /\A_[A-Z]/
20053
+ W(dcl_or_def.location, name)
20054
+ when /\A_/
20055
+ check_filelocal_object_name(name, dcl_or_def)
20056
+ end
20057
+ end
20058
+ end
20059
+
20060
+ def check_filelocal_object_name(name, dcl_or_def)
20061
+ if @fun_def_level == 0
20062
+ if sc_spec = dcl_or_def.storage_class_specifier
20063
+ if sc_spec.type == :STATIC
20064
+ W(dcl_or_def.location, name)
20065
+ end
20066
+ end
20067
+ end
20068
+ end
20069
+ end
20070
+
19394
20071
  class W0810 < PassiveCodeCheck
19395
20072
  def_registrant_phase Cc1::Prepare2Phase
19396
20073
 
@@ -19400,10 +20077,10 @@ module CBuiltin #:nodoc:
19400
20077
 
19401
20078
  def initialize(phase_ctxt)
19402
20079
  super
19403
- traversal = phase_ctxt[:cc1_ast_traversal]
19404
- traversal.enter_if_statement += T(:enter_outer_if_stmt)
19405
- traversal.leave_if_statement += T(:leave_outer_if_stmt)
19406
- traversal.enter_if_else_statement += T(:check_inner_if_else_stmt)
20080
+ trav = phase_ctxt[:cc1_ast_traversal]
20081
+ trav.enter_if_statement += T(:enter_outer_if_stmt)
20082
+ trav.leave_if_statement += T(:leave_outer_if_stmt)
20083
+ trav.enter_if_else_statement += T(:check_inner_if_else_stmt)
19407
20084
  @if_stmt_stack = []
19408
20085
  end
19409
20086
 
@@ -19433,8 +20110,8 @@ module CBuiltin #:nodoc:
19433
20110
 
19434
20111
  def initialize(phase_ctxt)
19435
20112
  super
19436
- traversal = phase_ctxt[:cc1_ast_traversal]
19437
- traversal.enter_variable_definition += T(:enter_variable_definition)
20113
+ trav = phase_ctxt[:cc1_ast_traversal]
20114
+ trav.enter_variable_definition += T(:enter_variable_definition)
19438
20115
  end
19439
20116
 
19440
20117
  private
@@ -19478,8 +20155,8 @@ module CBuiltin #:nodoc:
19478
20155
 
19479
20156
  def initialize(phase_ctxt)
19480
20157
  super
19481
- traversal = phase_ctxt[:cc1_ast_traversal]
19482
- traversal.enter_variable_definition += T(:enter_variable_definition)
20158
+ trav = phase_ctxt[:cc1_ast_traversal]
20159
+ trav.enter_variable_definition += T(:enter_variable_definition)
19483
20160
  end
19484
20161
 
19485
20162
  private
@@ -19525,8 +20202,8 @@ module CBuiltin #:nodoc:
19525
20202
 
19526
20203
  def initialize(phase_ctxt)
19527
20204
  super
19528
- traversal = phase_ctxt[:cc1_ast_traversal]
19529
- traversal.enter_enum_specifier += T(:check)
20205
+ trav = phase_ctxt[:cc1_ast_traversal]
20206
+ trav.enter_enum_specifier += T(:check)
19530
20207
  end
19531
20208
 
19532
20209
  private
@@ -19568,21 +20245,21 @@ module CBuiltin #:nodoc:
19568
20245
 
19569
20246
  def initialize(phase_ctxt)
19570
20247
  super
19571
- traversal = phase_ctxt[:cc1_ast_traversal]
19572
- traversal.enter_member_declaration += T(:check_member_decl)
19573
- traversal.enter_typedef_declaration += T(:check_declspec_holder)
19574
- traversal.enter_function_declaration += T(:check_declspec_holder)
19575
- traversal.enter_parameter_declaration += T(:check_declspec_holder)
19576
- traversal.enter_variable_declaration += T(:check_declspec_holder)
19577
- traversal.enter_variable_definition += T(:check_declspec_holder)
19578
- traversal.enter_ansi_function_definition += T(:check_declspec_holder)
19579
- traversal.enter_kandr_function_definition += T(:check_declspec_holder)
19580
- traversal.enter_parameter_definition += T(:check_declspec_holder)
19581
- traversal.enter_type_name += T(:check_type_name)
20248
+ trav = phase_ctxt[:cc1_ast_traversal]
20249
+ trav.enter_member_declaration += T(:check_member_dcl)
20250
+ trav.enter_typedef_declaration += T(:check_dcl_spec_holder)
20251
+ trav.enter_function_declaration += T(:check_dcl_spec_holder)
20252
+ trav.enter_parameter_declaration += T(:check_dcl_spec_holder)
20253
+ trav.enter_variable_declaration += T(:check_dcl_spec_holder)
20254
+ trav.enter_variable_definition += T(:check_dcl_spec_holder)
20255
+ trav.enter_ansi_function_definition += T(:check_dcl_spec_holder)
20256
+ trav.enter_kandr_function_definition += T(:check_dcl_spec_holder)
20257
+ trav.enter_parameter_definition += T(:check_dcl_spec_holder)
20258
+ trav.enter_type_name += T(:check_type_name)
19582
20259
  end
19583
20260
 
19584
20261
  private
19585
- def check_member_decl(node)
20262
+ def check_member_dcl(node)
19586
20263
  type_specs = node.specifier_qualifier_list.type_specifiers
19587
20264
  if fst_ts = type_specs.first
19588
20265
  node.type.accept(Visitor.new(@phase_ctxt, fst_ts.location))
@@ -19596,7 +20273,7 @@ module CBuiltin #:nodoc:
19596
20273
  end
19597
20274
  end
19598
20275
 
19599
- def check_declspec_holder(dcl_spec_holder)
20276
+ def check_dcl_spec_holder(dcl_spec_holder)
19600
20277
  type_specs = dcl_spec_holder.type_specifiers
19601
20278
  if fst_ts = type_specs.first
19602
20279
  dcl_spec_holder.type.accept(Visitor.new(@phase_ctxt, fst_ts.location))
@@ -19670,8 +20347,8 @@ module CBuiltin #:nodoc:
19670
20347
 
19671
20348
  def initialize(phase_ctxt)
19672
20349
  super
19673
- traversal = phase_ctxt[:cc1_ast_traversal]
19674
- traversal.enter_string_literal_specifier += T(:check)
20350
+ trav = phase_ctxt[:cc1_ast_traversal]
20351
+ trav.enter_string_literal_specifier += T(:check)
19675
20352
  end
19676
20353
 
19677
20354
  private
@@ -19689,8 +20366,8 @@ module CBuiltin #:nodoc:
19689
20366
 
19690
20367
  def initialize(phase_ctxt)
19691
20368
  super
19692
- traversal = phase_ctxt[:cc1_ast_traversal]
19693
- traversal.enter_constant_specifier += T(:check)
20369
+ trav = phase_ctxt[:cc1_ast_traversal]
20370
+ trav.enter_constant_specifier += T(:check)
19694
20371
  end
19695
20372
 
19696
20373
  private
@@ -19713,8 +20390,8 @@ module CBuiltin #:nodoc:
19713
20390
 
19714
20391
  def initialize(phase_ctxt)
19715
20392
  super
19716
- traversal = phase_ctxt[:cc1_ast_traversal]
19717
- traversal.enter_struct_declarator += T(:check)
20393
+ trav = phase_ctxt[:cc1_ast_traversal]
20394
+ trav.enter_struct_declarator += T(:check)
19718
20395
  @interp = Cc1::Interpreter.new(phase_ctxt[:cc1_type_table])
19719
20396
  end
19720
20397
 
@@ -19754,8 +20431,8 @@ module CBuiltin #:nodoc:
19754
20431
 
19755
20432
  def initialize(phase_ctxt)
19756
20433
  super
19757
- traversal = phase_ctxt[:cc1_ast_traversal]
19758
- traversal.enter_variable_definition += T(:check)
20434
+ trav = phase_ctxt[:cc1_ast_traversal]
20435
+ trav.enter_variable_definition += T(:check)
19759
20436
  end
19760
20437
 
19761
20438
  private
@@ -19872,6 +20549,44 @@ module CBuiltin #:nodoc:
19872
20549
  end
19873
20550
  end
19874
20551
 
20552
+ class W1030 < PassiveCodeCheck
20553
+ def_registrant_phase Cc1::Prepare2Phase
20554
+
20555
+ # NOTE: All messages of cc1-phase code check should be unique till function
20556
+ # step-in analysis is supported.
20557
+ mark_as_unique
20558
+
20559
+ def initialize(phase_ctxt)
20560
+ super
20561
+ trav = phase_ctxt[:cc1_ast_traversal]
20562
+ trav.enter_generic_labeled_statement += T(:check)
20563
+ trav.enter_ansi_function_definition += T(:enter_function)
20564
+ trav.leave_ansi_function_definition += T(:leave_function)
20565
+ trav.enter_kandr_function_definition += T(:enter_function)
20566
+ trav.leave_kandr_function_definition += T(:leave_function)
20567
+ @labels = nil
20568
+ end
20569
+
20570
+ private
20571
+ def check(labeled_stmt)
20572
+ if @labels
20573
+ if @labels.include?(labeled_stmt.label.value)
20574
+ W(labeled_stmt.label.location, labeled_stmt.label.value)
20575
+ else
20576
+ @labels.add(labeled_stmt.label.value)
20577
+ end
20578
+ end
20579
+ end
20580
+
20581
+ def enter_function(*)
20582
+ @labels = Set.new
20583
+ end
20584
+
20585
+ def leave_function(*)
20586
+ @labels = nil
20587
+ end
20588
+ end
20589
+
19875
20590
  class W1031 < PassiveCodeCheck
19876
20591
  def_registrant_phase Cc1::Prepare2Phase
19877
20592
 
@@ -19979,6 +20694,31 @@ module CBuiltin #:nodoc:
19979
20694
  end
19980
20695
  end
19981
20696
 
20697
+ class W1033 < PassiveCodeCheck
20698
+ def_registrant_phase Cc1::Prepare2Phase
20699
+
20700
+ # NOTE: All messages of cc1-phase code check should be unique till function
20701
+ # step-in analysis is supported.
20702
+ mark_as_unique
20703
+
20704
+ def initialize(phase_ctxt)
20705
+ super
20706
+ trav = phase_ctxt[:cc1_ast_traversal]
20707
+ trav.enter_ansi_function_definition += T(:check)
20708
+ trav.enter_kandr_function_definition += T(:check)
20709
+ trav.enter_function_declaration += T(:check)
20710
+ end
20711
+
20712
+ private
20713
+ def check(dcl_or_def)
20714
+ if ret_type = dcl_or_def.type.return_type
20715
+ if ret_type.const? || ret_type.volatile?
20716
+ W(dcl_or_def.location)
20717
+ end
20718
+ end
20719
+ end
20720
+ end
20721
+
19982
20722
  class W1034 < PassiveCodeCheck
19983
20723
  def_registrant_phase Cc1::Prepare2Phase
19984
20724
 
@@ -19988,10 +20728,10 @@ module CBuiltin #:nodoc:
19988
20728
 
19989
20729
  def initialize(phase_ctxt)
19990
20730
  super
19991
- traversal = phase_ctxt[:cc1_ast_traversal]
19992
- traversal.enter_function_declaration += T(:check)
19993
- traversal.enter_compound_statement += T(:enter_block)
19994
- traversal.leave_compound_statement += T(:leave_block)
20731
+ trav = phase_ctxt[:cc1_ast_traversal]
20732
+ trav.enter_function_declaration += T(:check)
20733
+ trav.enter_compound_statement += T(:enter_block)
20734
+ trav.leave_compound_statement += T(:leave_block)
19995
20735
  @block_level = 0
19996
20736
  end
19997
20737
 
@@ -20726,6 +21466,166 @@ module CBuiltin #:nodoc:
20726
21466
  end
20727
21467
  end
20728
21468
 
21469
+ class W1066 < PassiveCodeCheck
21470
+ def_registrant_phase Cc1::Prepare2Phase
21471
+
21472
+ include Cc1::InterpreterMediator
21473
+
21474
+ # NOTE: All messages of cc1-phase code check should be unique till function
21475
+ # step-in analysis is supported.
21476
+ mark_as_unique
21477
+
21478
+ def initialize(phase_ctxt)
21479
+ super
21480
+ @interp = phase_ctxt[:cc1_interpreter]
21481
+ @interp.on_explicit_conv_performed += T(:check)
21482
+ @interp.on_function_started += T(:clear_rvalues)
21483
+ @interp.on_additive_expr_evaled += T(:handle_additive)
21484
+ @interp.on_multiplicative_expr_evaled += T(:handle_multiplicative)
21485
+ @rvalues = nil
21486
+ end
21487
+
21488
+ private
21489
+ def check(*, orig_var, rslt_var)
21490
+ return unless @rvalues && orig_var.type.floating?
21491
+
21492
+ case expr = @rvalues[orig_var]
21493
+ when Cc1::AdditiveExpression, Cc1::MultiplicativeExpression
21494
+ if orig_var.type.same_as?(from_type) && rslt_var.type.same_as?(to_type)
21495
+ W(expr.location)
21496
+ end
21497
+ end
21498
+ end
21499
+
21500
+ def clear_rvalues(*)
21501
+ @rvalues = {}
21502
+ end
21503
+
21504
+ def handle_additive(expr, *, rslt_var)
21505
+ memorize_rvalue_derivation(rslt_var, expr)
21506
+ end
21507
+
21508
+ def handle_multiplicative(expr, *, rslt_var)
21509
+ unless expr.operator.type == "%"
21510
+ memorize_rvalue_derivation(rslt_var, expr)
21511
+ end
21512
+ end
21513
+
21514
+ def memorize_rvalue_derivation(rvalue_holder, expr)
21515
+ @rvalues[rvalue_holder] = expr if @rvalues
21516
+ end
21517
+
21518
+ def from_type
21519
+ float_t
21520
+ end
21521
+
21522
+ def to_type
21523
+ double_t
21524
+ end
21525
+
21526
+ def interpreter
21527
+ @interp
21528
+ end
21529
+ end
21530
+
21531
+ class W1067 < W1066
21532
+ def_registrant_phase Cc1::Prepare2Phase
21533
+
21534
+ # NOTE: All messages of cc1-phase code check should be unique till function
21535
+ # step-in analysis is supported.
21536
+ mark_as_unique
21537
+
21538
+ private
21539
+ def from_type
21540
+ float_t
21541
+ end
21542
+
21543
+ def to_type
21544
+ long_double_t
21545
+ end
21546
+ end
21547
+
21548
+ class W1068 < W1066
21549
+ def_registrant_phase Cc1::Prepare2Phase
21550
+
21551
+ # NOTE: All messages of cc1-phase code check should be unique till function
21552
+ # step-in analysis is supported.
21553
+ mark_as_unique
21554
+
21555
+ private
21556
+ def from_type
21557
+ double_t
21558
+ end
21559
+
21560
+ def to_type
21561
+ long_double_t
21562
+ end
21563
+ end
21564
+
21565
+ class W1069 < PassiveCodeCheck
21566
+ def_registrant_phase Cc1::Prepare2Phase
21567
+
21568
+ # NOTE: All messages of cc1-phase code check should be unique till function
21569
+ # step-in analysis is supported.
21570
+ mark_as_unique
21571
+
21572
+ def initialize(phase_ctxt)
21573
+ super
21574
+ trav = phase_ctxt[:cc1_ast_traversal]
21575
+ trav.enter_ansi_function_definition += T(:enter_function)
21576
+ trav.enter_kandr_function_definition += T(:enter_function)
21577
+ trav.enter_compound_statement += T(:enter_compound_stmt)
21578
+ trav.leave_compound_statement += T(:leave_compound_stmt)
21579
+ trav.enter_if_else_statement += T(:enter_if_else_stmt)
21580
+ trav.leave_if_else_statement += T(:leave_if_else_stmt)
21581
+ @if_else_stmt_chain_stack = []
21582
+ end
21583
+
21584
+ private
21585
+ def enter_function(*)
21586
+ @if_else_stmt_chain_stack = []
21587
+ end
21588
+
21589
+ def enter_compound_stmt(*)
21590
+ @if_else_stmt_chain_stack.push([])
21591
+ end
21592
+
21593
+ def leave_compound_stmt(*)
21594
+ @if_else_stmt_chain_stack.pop
21595
+ end
21596
+
21597
+ def enter_if_else_stmt(node)
21598
+ @if_else_stmt_chain_stack.last.push(node)
21599
+ if node.else_statement.kind_of?(Cc1::IfStatement)
21600
+ W(@if_else_stmt_chain_stack.last.first.location)
21601
+ end
21602
+ end
21603
+
21604
+ def leave_if_else_stmt(*)
21605
+ @if_else_stmt_chain_stack.last.pop
21606
+ end
21607
+ end
21608
+
21609
+ class W1070 < W0781
21610
+ def_registrant_phase Cc1::Prepare2Phase
21611
+
21612
+ # NOTE: All messages of cc1-phase code check should be unique till function
21613
+ # step-in analysis is supported.
21614
+ mark_as_unique
21615
+
21616
+ private
21617
+ def check(node)
21618
+ if exec_path_num = @exec_path_nums.last and exec_path_num == 2
21619
+ W(node.location)
21620
+ end
21621
+ @exec_path_nums.pop
21622
+ end
21623
+
21624
+ def add_exec_path(*)
21625
+ @exec_path_nums[-1] += 1
21626
+ end
21627
+ end
21628
+
20729
21629
  class W1071 < PassiveCodeCheck
20730
21630
  def_registrant_phase Cc1::Prepare2Phase
20731
21631
 
@@ -20768,6 +21668,25 @@ module CBuiltin #:nodoc:
20768
21668
  end
20769
21669
  end
20770
21670
 
21671
+ class W1072 < PassiveCodeCheck
21672
+ def_registrant_phase Cc1::Prepare2Phase
21673
+
21674
+ # NOTE: All messages of cc1-phase code check should be unique till function
21675
+ # step-in analysis is supported.
21676
+ mark_as_unique
21677
+
21678
+ def initialize(phase_ctxt)
21679
+ super
21680
+ trav = phase_ctxt[:cc1_ast_traversal]
21681
+ trav.enter_goto_statement += T(:warn_goto)
21682
+ end
21683
+
21684
+ private
21685
+ def warn_goto(node)
21686
+ W(node.location)
21687
+ end
21688
+ end
21689
+
20771
21690
  class W1073 < PassiveCodeCheck
20772
21691
  def_registrant_phase Cc1::Prepare2Phase
20773
21692
 
@@ -20831,8 +21750,8 @@ module CBuiltin #:nodoc:
20831
21750
 
20832
21751
  def initialize(phase_ctxt)
20833
21752
  super
20834
- traversal = phase_ctxt[:cc1_ast_traversal]
20835
- traversal.enter_sizeof_expression += T(:check)
21753
+ trav = phase_ctxt[:cc1_ast_traversal]
21754
+ trav.enter_sizeof_expression += T(:check)
20836
21755
  end
20837
21756
 
20838
21757
  private
@@ -20968,23 +21887,23 @@ module CBuiltin #:nodoc:
20968
21887
  def initialize(phase_ctxt)
20969
21888
  super
20970
21889
  @fpath = phase_ctxt[:sources].first.fpath
20971
- traversal = phase_ctxt[:cc1_ast_traversal]
20972
- traversal.enter_error_statement += T(:check)
20973
- traversal.enter_generic_labeled_statement += T(:check)
20974
- traversal.enter_case_labeled_statement += T(:check)
20975
- traversal.enter_default_labeled_statement += T(:check)
20976
- traversal.enter_expression_statement += T(:check)
20977
- traversal.enter_if_statement += T(:check)
20978
- traversal.enter_if_else_statement += T(:check)
20979
- traversal.enter_switch_statement += T(:check)
20980
- traversal.enter_while_statement += T(:check)
20981
- traversal.enter_do_statement += T(:check)
20982
- traversal.enter_for_statement += T(:check)
20983
- traversal.enter_c99_for_statement += T(:check)
20984
- traversal.enter_goto_statement += T(:check)
20985
- traversal.enter_continue_statement += T(:check)
20986
- traversal.enter_break_statement += T(:check)
20987
- traversal.enter_return_statement += T(:check)
21890
+ trav = phase_ctxt[:cc1_ast_traversal]
21891
+ trav.enter_error_statement += T(:check)
21892
+ trav.enter_generic_labeled_statement += T(:check)
21893
+ trav.enter_case_labeled_statement += T(:check)
21894
+ trav.enter_default_labeled_statement += T(:check)
21895
+ trav.enter_expression_statement += T(:check)
21896
+ trav.enter_if_statement += T(:check)
21897
+ trav.enter_if_else_statement += T(:check)
21898
+ trav.enter_switch_statement += T(:check)
21899
+ trav.enter_while_statement += T(:check)
21900
+ trav.enter_do_statement += T(:check)
21901
+ trav.enter_for_statement += T(:check)
21902
+ trav.enter_c99_for_statement += T(:check)
21903
+ trav.enter_goto_statement += T(:check)
21904
+ trav.enter_continue_statement += T(:check)
21905
+ trav.enter_break_statement += T(:check)
21906
+ trav.enter_return_statement += T(:check)
20988
21907
  end
20989
21908
 
20990
21909
  private