adlint 2.6.14 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/AUTHORS +1 -3
- data/ChangeLog +511 -0
- data/INSTALL +1 -1
- data/MANIFEST +57 -37
- data/NEWS +36 -7
- data/README +2 -2
- data/Rakefile +6 -6
- data/TODO +1 -1
- data/bin/adlint +25 -16
- data/bin/adlint_chk +22 -12
- data/bin/adlint_cma +17 -12
- data/bin/adlint_sma +22 -12
- data/bin/adlintize +98 -17
- data/etc/conf.d/fallback/cinit.erb +1 -1
- data/etc/conf.d/fallback/traits.erb +37 -37
- data/etc/conf.d/i686-cygwin/cinit-gcc_4.3.4.erb +1 -1
- data/etc/conf.d/i686-cygwin/traits-gcc_4.3.4.erb +41 -41
- data/etc/conf.d/i686-devkit/cinit-gcc_4.5.2.erb +1 -1
- data/etc/conf.d/i686-devkit/traits-gcc_4.5.2.erb +40 -40
- data/etc/conf.d/i686-linux/cinit-gcc_4.5.1.erb +1 -1
- data/etc/conf.d/i686-linux/traits-gcc_4.5.1.erb +40 -40
- data/etc/conf.d/i686-mingw/cinit-gcc_4.6.1.erb +1 -1
- data/etc/conf.d/i686-mingw/traits-gcc_4.6.1.erb +40 -40
- data/etc/conf.d/noarch/GNUmakefile.erb +1 -1
- data/etc/conf.d/noarch/adlint_all_bat.erb +1 -1
- data/etc/conf.d/noarch/adlint_all_sh.erb +1 -1
- data/etc/conf.d/noarch/pinit.erb +1 -1
- data/etc/conf.d/x86_64-ubuntu_12.04/cinit-gcc_4.6.3.erb +1 -1
- data/etc/conf.d/x86_64-ubuntu_12.04/traits-gcc_4.6.3.erb +42 -42
- data/etc/mesg.d/c_builtin/en_US/messages.yml +33 -33
- data/etc/mesg.d/c_builtin/ja_JP/messages.yml +5 -5
- data/etc/mesg.d/core/en_US/messages.yml +2 -2
- data/etc/mesg.d/core/ja_JP/messages.yml +2 -2
- data/features/code_check/W0018.feature +197 -0
- data/features/code_check/W0019.feature +79 -0
- data/features/code_check/W0021.feature +81 -0
- data/features/code_check/W0023.feature +203 -0
- data/features/code_check/W0024.feature +226 -0
- data/features/code_check/W0025.feature +5 -0
- data/features/code_check/W0088.feature +2 -2
- data/features/code_check/W0109.feature +2 -2
- data/features/code_check/W0477.feature +0 -3
- data/features/code_check/W0478.feature +0 -1
- data/features/code_check/W0582.feature +3 -3
- data/features/code_check/W0583.feature +4 -7
- data/features/code_check/W0646.feature +0 -1
- data/features/code_check/W0695.feature +0 -1
- data/features/code_check/W0705.feature +8 -0
- data/features/code_check/W0723.feature +0 -1
- data/features/code_check/W0745.feature +1 -0
- data/features/code_check/W0781.feature +1 -0
- data/features/code_check/W1057.feature +141 -0
- data/features/code_check/W1058.feature +93 -0
- data/features/code_check/W1059.feature +86 -0
- data/features/code_check/W1060.feature +77 -0
- data/features/code_check/W1061.feature +143 -0
- data/features/code_check/W1062.feature +162 -0
- data/features/code_check/W1063.feature +123 -0
- data/features/code_check/W1064.feature +83 -0
- data/features/code_check/W1065.feature +82 -0
- data/features/code_check/W9003.feature +2 -0
- data/features/step_definitions/code_check_steps.rb +1 -0
- data/features/support/env.rb +16 -13
- data/lib/adlint.rb +7 -4
- data/lib/adlint/analyzer.rb +131 -157
- data/lib/adlint/annot.rb +149 -0
- data/lib/adlint/cc1.rb +57 -0
- data/lib/adlint/{c → cc1}/branch.rb +74 -62
- data/lib/adlint/{c → cc1}/builtin.rb +21 -21
- data/lib/adlint/{c → cc1}/const.rb +119 -117
- data/lib/adlint/{c → cc1}/conv.rb +76 -78
- data/lib/adlint/{c → cc1}/ctrlexpr.rb +69 -86
- data/lib/adlint/cc1/domain.rb +8103 -0
- data/lib/adlint/{c → cc1}/enum.rb +3 -3
- data/lib/adlint/{c → cc1}/environ.rb +21 -21
- data/lib/adlint/{c → cc1}/expr.rb +232 -218
- data/lib/adlint/{c → cc1}/format.rb +305 -342
- data/lib/adlint/{c → cc1}/interp.rb +269 -220
- data/lib/adlint/cc1/lexer.rb +246 -0
- data/lib/adlint/{c → cc1}/mediator.rb +78 -84
- data/lib/adlint/{c → cc1}/object.rb +261 -264
- data/lib/adlint/{c → cc1}/operator.rb +7 -7
- data/lib/adlint/{c → cc1}/option.rb +4 -3
- data/lib/adlint/{c → cc1}/parser.rb +274 -506
- data/lib/adlint/{c → cc1}/parser.y +69 -301
- data/lib/adlint/cc1/phase.rb +138 -0
- data/lib/adlint/{c → cc1}/resolver.rb +66 -78
- data/lib/adlint/{c → cc1}/scanner.rb +57 -49
- data/lib/adlint/{c → cc1}/scope.rb +3 -3
- data/lib/adlint/{c → cc1}/seqp.rb +13 -5
- data/lib/adlint/{c → cc1}/syntax.rb +819 -1122
- data/lib/adlint/{c → cc1}/type.rb +1498 -1479
- data/lib/adlint/{c → cc1}/util.rb +20 -12
- data/lib/adlint/{c → cc1}/value.rb +699 -642
- data/lib/adlint/code.rb +163 -164
- data/lib/adlint/cpp.rb +2 -2
- data/lib/adlint/cpp/asm.rb +13 -14
- data/lib/adlint/cpp/constexpr.rb +42 -38
- data/lib/adlint/cpp/constexpr.y +44 -40
- data/lib/adlint/cpp/eval.rb +435 -435
- data/lib/adlint/cpp/lexer.rb +343 -340
- data/lib/adlint/cpp/macro.rb +188 -190
- data/lib/adlint/cpp/phase.rb +66 -45
- data/lib/adlint/cpp/scanner.rb +14 -17
- data/lib/adlint/cpp/source.rb +49 -55
- data/lib/adlint/cpp/subst.rb +65 -65
- data/lib/adlint/cpp/syntax.rb +155 -275
- data/lib/adlint/cpp/util.rb +22 -19
- data/lib/adlint/driver.rb +86 -93
- data/lib/adlint/error.rb +33 -52
- data/lib/adlint/exam.rb +158 -24
- data/lib/adlint/exam/c_builtin.rb +7 -7
- data/lib/adlint/exam/c_builtin/cc1_check.rb +20522 -0
- data/lib/adlint/exam/c_builtin/cc1_check_shima.rb +957 -0
- data/lib/adlint/exam/c_builtin/cc1_code.rb +459 -0
- data/lib/adlint/exam/c_builtin/cc1_metric.rb +794 -0
- data/lib/adlint/exam/c_builtin/cpp_check.rb +486 -441
- data/lib/adlint/exam/c_builtin/cpp_check_shima.rb +36 -39
- data/lib/adlint/exam/c_builtin/cpp_code.rb +63 -65
- data/lib/adlint/exam/c_builtin/ld_check.rb +136 -129
- data/lib/adlint/exam/c_builtin/ld_metric.rb +11 -11
- data/lib/adlint/lang.rb +25 -25
- data/lib/adlint/ld.rb +2 -2
- data/lib/adlint/ld/object.rb +220 -188
- data/lib/adlint/ld/phase.rb +94 -63
- data/lib/adlint/ld/typedef.rb +22 -11
- data/lib/adlint/ld/util.rb +43 -35
- data/lib/adlint/lexer.rb +59 -56
- data/lib/adlint/location.rb +140 -0
- data/lib/adlint/memo.rb +157 -0
- data/lib/adlint/message.rb +207 -156
- data/lib/adlint/metric.rb +139 -217
- data/lib/adlint/monitor.rb +45 -43
- data/lib/adlint/phase.rb +56 -29
- data/lib/adlint/prelude.rb +66 -54
- data/lib/adlint/report.rb +253 -332
- data/lib/adlint/source.rb +26 -27
- data/lib/adlint/supp.rb +131 -0
- data/lib/adlint/symbol.rb +14 -16
- data/lib/adlint/token.rb +19 -91
- data/lib/adlint/traits.rb +242 -226
- data/lib/adlint/util.rb +116 -205
- data/lib/adlint/version.rb +8 -8
- data/share/HEADER +2 -2
- data/share/doc/developers_guide_ja.html +148 -19
- data/share/doc/developers_guide_ja.texi +141 -11
- data/share/doc/samples/GNUmakefile +1 -1
- data/share/doc/samples/adlint_traits.yml +45 -36
- data/share/doc/users_guide_en.html +1321 -1252
- data/share/doc/users_guide_en.texi +475 -408
- data/share/doc/users_guide_ja.html +1932 -1878
- data/share/doc/users_guide_ja.texi +324 -273
- data/share/sample/bison-2.5/adlint/GNUmakefile +5 -1
- data/share/sample/bison-2.5/adlint/adlint_traits.yml +38 -38
- data/share/sample/bison-2.5/adlint/lib/GNUmakefile +1 -1
- data/share/sample/bison-2.5/adlint/lib/adlint_cinit.h +1 -1
- data/share/sample/bison-2.5/adlint/lib/adlint_pinit.h +1 -1
- data/share/sample/bison-2.5/adlint/lib/adlint_traits.yml +50 -42
- data/share/sample/bison-2.5/adlint/src/GNUmakefile +1 -1
- data/share/sample/bison-2.5/adlint/src/adlint_cinit.h +1 -1
- data/share/sample/bison-2.5/adlint/src/adlint_pinit.h +1 -1
- data/share/sample/bison-2.5/adlint/src/adlint_traits.yml +50 -42
- data/share/sample/ctags-5.8/adlint/GNUmakefile +1 -1
- data/share/sample/ctags-5.8/adlint/adlint_cinit.h +1 -1
- data/share/sample/ctags-5.8/adlint/adlint_pinit.h +1 -1
- data/share/sample/ctags-5.8/adlint/adlint_traits.yml +50 -42
- data/share/sample/flex-2.5.35/adlint/GNUmakefile +1 -1
- data/share/sample/flex-2.5.35/adlint/adlint_cinit.h +1 -1
- data/share/sample/flex-2.5.35/adlint/adlint_pinit.h +1 -1
- data/share/sample/flex-2.5.35/adlint/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/adlint_traits.yml +46 -38
- data/share/sample/ruby-1.9.3-p0/adlint/core/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/core/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/core/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/core/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/enc-trans/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/enc-trans/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/enc-trans/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/enc-trans/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/enc/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/enc/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/enc/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/enc/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-bigdecimal/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-bigdecimal/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-bigdecimal/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-bigdecimal/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-continuation/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-continuation/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-continuation/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-continuation/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-coverage/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-coverage/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-coverage/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-coverage/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-curses/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-curses/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-curses/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-curses/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-date/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-date/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-date/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-date/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-dbm/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-dbm/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-dbm/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-dbm/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-bubblebabble/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-bubblebabble/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-bubblebabble/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-bubblebabble/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-md5/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-md5/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-md5/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-md5/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-rmd160/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-rmd160/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-rmd160/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-rmd160/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha1/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha1/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha1/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha1/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha2/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha2/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha2/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha2/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-dl-callback/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-dl-callback/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-dl-callback/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-dl-callback/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-dl/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-dl/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-dl/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-dl/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-etc/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-etc/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-etc/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-etc/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-fcntl/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-fcntl/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-fcntl/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-fcntl/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-fiber/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-fiber/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-fiber/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-fiber/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-fiddle/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-fiddle/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-fiddle/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-fiddle/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-gdbm/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-gdbm/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-gdbm/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-gdbm/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-iconv/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-iconv/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-iconv/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-iconv/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-io-console/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-io-console/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-io-console/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-io-console/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-io-nonblock/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-io-nonblock/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-io-nonblock/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-io-nonblock/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-io-wait/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-io-wait/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-io-wait/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-io-wait/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-json-generator/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-json-generator/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-json-generator/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-json-generator/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-json-parser/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-json-parser/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-json-parser/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-json-parser/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-complex/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-complex/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-complex/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-complex/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-rational/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-rational/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-rational/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-rational/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-nkf/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-nkf/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-nkf/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-nkf/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-openssl/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-openssl/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-openssl/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-openssl/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-pathname/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-pathname/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-pathname/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-pathname/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-psych/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-psych/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-psych/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-psych/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-pty/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-pty/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-pty/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-pty/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-racc-cparse/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-racc-cparse/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-racc-cparse/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-racc-cparse/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-readline/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-readline/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-readline/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-readline/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-ripper/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-ripper/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-ripper/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-ripper/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-sdbm/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-sdbm/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-sdbm/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-sdbm/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-socket/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-socket/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-socket/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-socket/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-stringio/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-stringio/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-stringio/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-stringio/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-strscan/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-strscan/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-strscan/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-strscan/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-syck/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-syck/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-syck/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-syck/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-syslog/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-syslog/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-syslog/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-syslog/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-zlib/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-zlib/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-zlib/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-zlib/adlint_traits.yml +50 -42
- data/share/sample/screen-4.0.3/adlint/GNUmakefile +1 -1
- data/share/sample/screen-4.0.3/adlint/adlint_cinit.h +1 -1
- data/share/sample/screen-4.0.3/adlint/adlint_pinit.h +1 -1
- data/share/sample/screen-4.0.3/adlint/adlint_traits.yml +50 -42
- data/share/sample/vim-7.3/adlint/vim/GNUmakefile +1 -1
- data/share/sample/vim-7.3/adlint/vim/adlint_cinit.h +1 -1
- data/share/sample/vim-7.3/adlint/vim/adlint_pinit.h +1 -1
- data/share/sample/vim-7.3/adlint/vim/adlint_traits.yml +50 -42
- data/share/sample/vim-7.3/adlint/xxd/GNUmakefile +1 -1
- data/share/sample/vim-7.3/adlint/xxd/adlint_cinit.h +1 -1
- data/share/sample/vim-7.3/adlint/xxd/adlint_pinit.h +1 -1
- data/share/sample/vim-7.3/adlint/xxd/adlint_traits.yml +49 -41
- data/share/sample/zsh-4.3.15/adlint/GNUmakefile +1 -1
- data/share/sample/zsh-4.3.15/adlint/adlint_traits.yml +46 -38
- data/share/sample/zsh-4.3.15/adlint/builtins/GNUmakefile +1 -1
- data/share/sample/zsh-4.3.15/adlint/builtins/adlint_cinit.h +1 -1
- data/share/sample/zsh-4.3.15/adlint/builtins/adlint_pinit.h +1 -1
- data/share/sample/zsh-4.3.15/adlint/builtins/adlint_traits.yml +50 -42
- data/share/sample/zsh-4.3.15/adlint/core/GNUmakefile +1 -1
- data/share/sample/zsh-4.3.15/adlint/core/adlint_cinit.h +1 -1
- data/share/sample/zsh-4.3.15/adlint/core/adlint_pinit.h +1 -1
- data/share/sample/zsh-4.3.15/adlint/core/adlint_traits.yml +50 -42
- data/share/sample/zsh-4.3.15/adlint/modules/GNUmakefile +1 -1
- data/share/sample/zsh-4.3.15/adlint/modules/adlint_cinit.h +1 -1
- data/share/sample/zsh-4.3.15/adlint/modules/adlint_pinit.h +1 -1
- data/share/sample/zsh-4.3.15/adlint/modules/adlint_traits.yml +50 -42
- data/share/sample/zsh-4.3.15/adlint/zle/GNUmakefile +1 -1
- data/share/sample/zsh-4.3.15/adlint/zle/adlint_cinit.h +1 -1
- data/share/sample/zsh-4.3.15/adlint/zle/adlint_pinit.h +1 -1
- data/share/sample/zsh-4.3.15/adlint/zle/adlint_traits.yml +50 -42
- data/spec/adlint/{c → cc1}/ctrlexpr_spec.rb +51 -49
- data/spec/adlint/{c → cc1}/domain_spec.rb +210 -179
- data/spec/adlint/{c → cc1}/operator_spec.rb +3 -3
- data/spec/adlint/{c → cc1}/syntax_spec.rb +10 -12
- data/spec/adlint/{c → cc1}/type_spec.rb +61 -68
- data/{lib/adlint/c.rb → spec/adlint/location_spec.rb} +24 -29
- data/spec/conf.d/default_traits.yml +38 -37
- data/spec/conf.d/empty_cinit.h +1 -1
- data/spec/conf.d/empty_pinit.h +1 -1
- data/spec/conf.d/project/foo.c +0 -0
- data/spec/spec_helper.rb +2 -2
- metadata +60 -40
- data/lib/adlint/c/domain.rb +0 -7931
- data/lib/adlint/c/lexer.rb +0 -252
- data/lib/adlint/c/phase.rb +0 -135
- data/lib/adlint/exam/c_builtin/c_check.rb +0 -20745
- data/lib/adlint/exam/c_builtin/c_check_shima.rb +0 -983
- data/lib/adlint/exam/c_builtin/c_code.rb +0 -477
- data/lib/adlint/exam/c_builtin/c_metric.rb +0 -818
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
Feature: W1062
|
|
2
|
+
|
|
3
|
+
W1062 detects that a value of the inconsistently typed non-constant
|
|
4
|
+
expression is assigned to an enum typed variable.
|
|
5
|
+
|
|
6
|
+
Scenario: non-constant `int' typed expression
|
|
7
|
+
Given a target source named "fixture.c" with:
|
|
8
|
+
"""
|
|
9
|
+
enum Color { RED, BLUE, GREEN };
|
|
10
|
+
enum Fruit { APPLE, BANANA, ORANGE, GRAPE };
|
|
11
|
+
|
|
12
|
+
static enum Color foo(const int i)
|
|
13
|
+
{
|
|
14
|
+
enum Color c;
|
|
15
|
+
|
|
16
|
+
c = i + 1; /* W1062 */
|
|
17
|
+
|
|
18
|
+
return c;
|
|
19
|
+
}
|
|
20
|
+
"""
|
|
21
|
+
When I successfully run `adlint fixture.c` on noarch
|
|
22
|
+
Then the output should exactly match with:
|
|
23
|
+
| mesg | line | column |
|
|
24
|
+
| W1076 | 4 | 19 |
|
|
25
|
+
| W0723 | 8 | 11 |
|
|
26
|
+
| W0727 | 8 | 11 |
|
|
27
|
+
| W9003 | 8 | 11 |
|
|
28
|
+
| W1054 | 8 | 7 |
|
|
29
|
+
| W1062 | 8 | 7 |
|
|
30
|
+
| W0100 | 6 | 16 |
|
|
31
|
+
| W0629 | 4 | 19 |
|
|
32
|
+
| W0628 | 4 | 19 |
|
|
33
|
+
|
|
34
|
+
Scenario: non-constant consistent enum typed expression
|
|
35
|
+
Given a target source named "fixture.c" with:
|
|
36
|
+
"""
|
|
37
|
+
enum Color { RED, BLUE, GREEN };
|
|
38
|
+
enum Fruit { APPLE, BANANA, ORANGE, GRAPE };
|
|
39
|
+
|
|
40
|
+
extern enum Color color(void);
|
|
41
|
+
|
|
42
|
+
static enum Color foo(void)
|
|
43
|
+
{
|
|
44
|
+
enum Color c;
|
|
45
|
+
|
|
46
|
+
c = color(); /* OK */
|
|
47
|
+
|
|
48
|
+
return c;
|
|
49
|
+
}
|
|
50
|
+
"""
|
|
51
|
+
When I successfully run `adlint fixture.c` on noarch
|
|
52
|
+
Then the output should exactly match with:
|
|
53
|
+
| mesg | line | column |
|
|
54
|
+
| W0118 | 4 | 19 |
|
|
55
|
+
| W1076 | 6 | 19 |
|
|
56
|
+
| W0100 | 8 | 16 |
|
|
57
|
+
| W0629 | 6 | 19 |
|
|
58
|
+
| W0628 | 6 | 19 |
|
|
59
|
+
|
|
60
|
+
Scenario: non-constant inconsistent enum typed expression
|
|
61
|
+
Given a target source named "fixture.c" with:
|
|
62
|
+
"""
|
|
63
|
+
enum Color { RED, BLUE, GREEN };
|
|
64
|
+
enum Fruit { APPLE, BANANA, ORANGE, GRAPE };
|
|
65
|
+
|
|
66
|
+
extern enum Fruit fruit(void);
|
|
67
|
+
|
|
68
|
+
static enum Color foo(void)
|
|
69
|
+
{
|
|
70
|
+
enum Color c;
|
|
71
|
+
|
|
72
|
+
c = fruit(); /* W1062 */
|
|
73
|
+
|
|
74
|
+
return c;
|
|
75
|
+
}
|
|
76
|
+
"""
|
|
77
|
+
When I successfully run `adlint fixture.c` on noarch
|
|
78
|
+
Then the output should exactly match with:
|
|
79
|
+
| mesg | line | column |
|
|
80
|
+
| W0118 | 4 | 19 |
|
|
81
|
+
| W1076 | 6 | 19 |
|
|
82
|
+
| W0727 | 10 | 14 |
|
|
83
|
+
| W9003 | 10 | 14 |
|
|
84
|
+
| W1057 | 10 | 7 |
|
|
85
|
+
| W1062 | 10 | 7 |
|
|
86
|
+
| W0100 | 8 | 16 |
|
|
87
|
+
| W0629 | 6 | 19 |
|
|
88
|
+
| W0628 | 6 | 19 |
|
|
89
|
+
|
|
90
|
+
Scenario: constant consistent `int' typed expression
|
|
91
|
+
Given a target source named "fixture.c" with:
|
|
92
|
+
"""
|
|
93
|
+
enum Color { RED, BLUE, GREEN };
|
|
94
|
+
|
|
95
|
+
static enum Color foo(void)
|
|
96
|
+
{
|
|
97
|
+
enum Color c;
|
|
98
|
+
|
|
99
|
+
c = 2; /* OK but W1054 */
|
|
100
|
+
|
|
101
|
+
return c;
|
|
102
|
+
}
|
|
103
|
+
"""
|
|
104
|
+
When I successfully run `adlint fixture.c` on noarch
|
|
105
|
+
Then the output should exactly match with:
|
|
106
|
+
| mesg | line | column |
|
|
107
|
+
| W1076 | 3 | 19 |
|
|
108
|
+
| W9003 | 7 | 9 |
|
|
109
|
+
| W1054 | 7 | 7 |
|
|
110
|
+
| W0100 | 5 | 16 |
|
|
111
|
+
| W0629 | 3 | 19 |
|
|
112
|
+
| W0628 | 3 | 19 |
|
|
113
|
+
|
|
114
|
+
Scenario: constant consistent enum typed expression
|
|
115
|
+
Given a target source named "fixture.c" with:
|
|
116
|
+
"""
|
|
117
|
+
enum Color { RED, BLUE, GREEN };
|
|
118
|
+
|
|
119
|
+
static enum Color foo(void)
|
|
120
|
+
{
|
|
121
|
+
enum Color c;
|
|
122
|
+
|
|
123
|
+
c = RED + 1; /* OK */
|
|
124
|
+
|
|
125
|
+
return c;
|
|
126
|
+
}
|
|
127
|
+
"""
|
|
128
|
+
When I successfully run `adlint fixture.c` on noarch
|
|
129
|
+
Then the output should exactly match with:
|
|
130
|
+
| mesg | line | column |
|
|
131
|
+
| W1076 | 3 | 19 |
|
|
132
|
+
| W9003 | 7 | 15 |
|
|
133
|
+
| W0100 | 5 | 16 |
|
|
134
|
+
| W0629 | 3 | 19 |
|
|
135
|
+
| W0628 | 3 | 19 |
|
|
136
|
+
|
|
137
|
+
Scenario: constant inconsistent enum typed expression
|
|
138
|
+
Given a target source named "fixture.c" with:
|
|
139
|
+
"""
|
|
140
|
+
enum Color { RED, BLUE, GREEN };
|
|
141
|
+
enum Fruit { APPLE, BANANA, ORANGE, GRAPE };
|
|
142
|
+
|
|
143
|
+
static enum Color foo(void)
|
|
144
|
+
{
|
|
145
|
+
enum Color c;
|
|
146
|
+
|
|
147
|
+
c = ORANGE + 1; /* OK but W0729 */
|
|
148
|
+
|
|
149
|
+
return c;
|
|
150
|
+
}
|
|
151
|
+
"""
|
|
152
|
+
When I successfully run `adlint fixture.c` on noarch
|
|
153
|
+
Then the output should exactly match with:
|
|
154
|
+
| mesg | line | column |
|
|
155
|
+
| W1076 | 4 | 19 |
|
|
156
|
+
| W9003 | 8 | 18 |
|
|
157
|
+
| W0727 | 8 | 16 |
|
|
158
|
+
| W9003 | 8 | 16 |
|
|
159
|
+
| W0729 | 8 | 7 |
|
|
160
|
+
| W0100 | 6 | 16 |
|
|
161
|
+
| W0629 | 4 | 19 |
|
|
162
|
+
| W0628 | 4 | 19 |
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
Feature: W1063
|
|
2
|
+
|
|
3
|
+
W1063 detects that a function of enum return type is returning a value of the
|
|
4
|
+
inconsistently typed non-constant expression.
|
|
5
|
+
|
|
6
|
+
Scenario: returning a value of the non-constant `int' typed expression
|
|
7
|
+
Given a target source named "fixture.c" with:
|
|
8
|
+
"""
|
|
9
|
+
enum Color { RED, BLUE, GREEN };
|
|
10
|
+
|
|
11
|
+
static enum Color foo(const enum Color c)
|
|
12
|
+
{
|
|
13
|
+
int i = 0;
|
|
14
|
+
|
|
15
|
+
if (c == RED) {
|
|
16
|
+
i = 2;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
return i + 1; /* W1063 */
|
|
20
|
+
}
|
|
21
|
+
"""
|
|
22
|
+
When I successfully run `adlint fixture.c` on noarch
|
|
23
|
+
Then the output should exactly match with:
|
|
24
|
+
| mesg | line | column |
|
|
25
|
+
| W1076 | 3 | 19 |
|
|
26
|
+
| W9003 | 11 | 14 |
|
|
27
|
+
| W1055 | 11 | 14 |
|
|
28
|
+
| W1063 | 11 | 14 |
|
|
29
|
+
| W0629 | 3 | 19 |
|
|
30
|
+
| W0628 | 3 | 19 |
|
|
31
|
+
|
|
32
|
+
Scenario: returning a value of the non-constant `double' typed expression
|
|
33
|
+
Given a target source named "fixture.c" with:
|
|
34
|
+
"""
|
|
35
|
+
enum Color { RED, BLUE, GREEN };
|
|
36
|
+
|
|
37
|
+
static enum Color foo(const enum Color c)
|
|
38
|
+
{
|
|
39
|
+
double d = .0;
|
|
40
|
+
|
|
41
|
+
if (c == RED) {
|
|
42
|
+
d = .2;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return d + 1.0; /* W1063 */
|
|
46
|
+
}
|
|
47
|
+
"""
|
|
48
|
+
When I successfully run `adlint fixture.c` on noarch
|
|
49
|
+
Then the output should exactly match with:
|
|
50
|
+
| mesg | line | column |
|
|
51
|
+
| W1076 | 3 | 19 |
|
|
52
|
+
| W9003 | 11 | 14 |
|
|
53
|
+
| W1055 | 11 | 14 |
|
|
54
|
+
| W1063 | 11 | 14 |
|
|
55
|
+
| W0629 | 3 | 19 |
|
|
56
|
+
| W0628 | 3 | 19 |
|
|
57
|
+
|
|
58
|
+
Scenario: returning a value of the non-constant same enum typed expression
|
|
59
|
+
Given a target source named "fixture.c" with:
|
|
60
|
+
"""
|
|
61
|
+
enum Color { RED, BLUE, GREEN };
|
|
62
|
+
|
|
63
|
+
extern enum Color foo(void);
|
|
64
|
+
|
|
65
|
+
static enum Color bar(void)
|
|
66
|
+
{
|
|
67
|
+
return foo() + 1; /* OK */
|
|
68
|
+
}
|
|
69
|
+
"""
|
|
70
|
+
When I successfully run `adlint fixture.c` on noarch
|
|
71
|
+
Then the output should exactly match with:
|
|
72
|
+
| mesg | line | column |
|
|
73
|
+
| W0118 | 3 | 19 |
|
|
74
|
+
| W1076 | 5 | 19 |
|
|
75
|
+
| W9003 | 7 | 20 |
|
|
76
|
+
| W0723 | 7 | 18 |
|
|
77
|
+
| W0629 | 5 | 19 |
|
|
78
|
+
| W0628 | 5 | 19 |
|
|
79
|
+
|
|
80
|
+
Scenario: returning a value of the non-constant inconsistent enum typed
|
|
81
|
+
expression
|
|
82
|
+
Given a target source named "fixture.c" with:
|
|
83
|
+
"""
|
|
84
|
+
enum Color { RED, BLUE, GREEN };
|
|
85
|
+
enum Fruit { APPLE, BANANA, ORANGE, GRAPE };
|
|
86
|
+
|
|
87
|
+
extern enum Fruit foo(void);
|
|
88
|
+
|
|
89
|
+
static enum Color bar(void)
|
|
90
|
+
{
|
|
91
|
+
return foo() + 1; /* W1063 */
|
|
92
|
+
}
|
|
93
|
+
"""
|
|
94
|
+
When I successfully run `adlint fixture.c` on noarch
|
|
95
|
+
Then the output should exactly match with:
|
|
96
|
+
| mesg | line | column |
|
|
97
|
+
| W0118 | 4 | 19 |
|
|
98
|
+
| W1076 | 6 | 19 |
|
|
99
|
+
| W9003 | 8 | 20 |
|
|
100
|
+
| W0723 | 8 | 18 |
|
|
101
|
+
| W0727 | 8 | 18 |
|
|
102
|
+
| W9003 | 8 | 18 |
|
|
103
|
+
| W1058 | 8 | 18 |
|
|
104
|
+
| W1063 | 8 | 18 |
|
|
105
|
+
| W0629 | 6 | 19 |
|
|
106
|
+
| W0628 | 6 | 19 |
|
|
107
|
+
|
|
108
|
+
Scenario: returning a value of the constant same enum typed expression
|
|
109
|
+
Given a target source named "fixture.c" with:
|
|
110
|
+
"""
|
|
111
|
+
enum Color { RED, BLUE, GREEN };
|
|
112
|
+
|
|
113
|
+
static enum Color foo(void)
|
|
114
|
+
{
|
|
115
|
+
return BLUE; /* OK */
|
|
116
|
+
}
|
|
117
|
+
"""
|
|
118
|
+
When I successfully run `adlint fixture.c` on noarch
|
|
119
|
+
Then the output should exactly match with:
|
|
120
|
+
| mesg | line | column |
|
|
121
|
+
| W1076 | 3 | 19 |
|
|
122
|
+
| W0629 | 3 | 19 |
|
|
123
|
+
| W0628 | 3 | 19 |
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
Feature: W1064
|
|
2
|
+
|
|
3
|
+
W1064 detects that an integer constant is specified to the case-label in the
|
|
4
|
+
switch-statement with an enum typed controlling variable.
|
|
5
|
+
|
|
6
|
+
Scenario: an integer constant
|
|
7
|
+
Given a target source named "fixture.c" with:
|
|
8
|
+
"""
|
|
9
|
+
enum Color { RED, BLUE, GREEN };
|
|
10
|
+
|
|
11
|
+
static int foo(const enum Color c)
|
|
12
|
+
{
|
|
13
|
+
switch (c) {
|
|
14
|
+
case 0: /* W1064 */
|
|
15
|
+
return 1;
|
|
16
|
+
case 1: /* W1064 */
|
|
17
|
+
return 2;
|
|
18
|
+
default:
|
|
19
|
+
return 0;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
"""
|
|
23
|
+
When I successfully run `adlint fixture.c` on noarch
|
|
24
|
+
Then the output should exactly match with:
|
|
25
|
+
| mesg | line | column |
|
|
26
|
+
| W1076 | 3 | 12 |
|
|
27
|
+
| W1064 | 6 | 10 |
|
|
28
|
+
| W1064 | 8 | 10 |
|
|
29
|
+
| W1071 | 3 | 12 |
|
|
30
|
+
| W0629 | 3 | 12 |
|
|
31
|
+
| W0628 | 3 | 12 |
|
|
32
|
+
|
|
33
|
+
Scenario: enumerator of the same enum type
|
|
34
|
+
Given a target source named "fixture.c" with:
|
|
35
|
+
"""
|
|
36
|
+
enum Color { RED, BLUE, GREEN };
|
|
37
|
+
|
|
38
|
+
static int foo(const enum Color c)
|
|
39
|
+
{
|
|
40
|
+
switch (c) {
|
|
41
|
+
case RED: /* OK */
|
|
42
|
+
return 1;
|
|
43
|
+
case BLUE: /* OK */
|
|
44
|
+
return 2;
|
|
45
|
+
default:
|
|
46
|
+
return 0;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
"""
|
|
50
|
+
When I successfully run `adlint fixture.c` on noarch
|
|
51
|
+
Then the output should exactly match with:
|
|
52
|
+
| mesg | line | column |
|
|
53
|
+
| W1076 | 3 | 12 |
|
|
54
|
+
| W1071 | 3 | 12 |
|
|
55
|
+
| W0629 | 3 | 12 |
|
|
56
|
+
| W0628 | 3 | 12 |
|
|
57
|
+
|
|
58
|
+
Scenario: enum typed variable of the same enum type
|
|
59
|
+
Given a target source named "fixture.c" with:
|
|
60
|
+
"""
|
|
61
|
+
enum Color { RED, BLUE, GREEN };
|
|
62
|
+
|
|
63
|
+
static int foo(const enum Color c)
|
|
64
|
+
{
|
|
65
|
+
const enum Color col = RED;
|
|
66
|
+
|
|
67
|
+
switch (c) {
|
|
68
|
+
case col: /* OK */
|
|
69
|
+
return 1;
|
|
70
|
+
case BLUE: /* OK */
|
|
71
|
+
return 2;
|
|
72
|
+
default:
|
|
73
|
+
return 0;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
"""
|
|
77
|
+
When I successfully run `adlint fixture.c` on noarch
|
|
78
|
+
Then the output should exactly match with:
|
|
79
|
+
| mesg | line | column |
|
|
80
|
+
| W1076 | 3 | 12 |
|
|
81
|
+
| W1071 | 3 | 12 |
|
|
82
|
+
| W0629 | 3 | 12 |
|
|
83
|
+
| W0628 | 3 | 12 |
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
Feature: W1065
|
|
2
|
+
|
|
3
|
+
W1065 detects that an enum type of the case-label's value is different from
|
|
4
|
+
the enum type of controlling variable.
|
|
5
|
+
|
|
6
|
+
Scenario: different enum types
|
|
7
|
+
Given a target source named "fixture.c" with:
|
|
8
|
+
"""
|
|
9
|
+
enum Color { RED, BLUE, GREEN };
|
|
10
|
+
enum Fruit { APPLE, BANANA, ORANGE, GRAPE };
|
|
11
|
+
|
|
12
|
+
static int foo(const enum Color c)
|
|
13
|
+
{
|
|
14
|
+
switch (c) {
|
|
15
|
+
case RED: /* OK */
|
|
16
|
+
return 1;
|
|
17
|
+
case ORANGE: /* W1065 */
|
|
18
|
+
return 2;
|
|
19
|
+
default:
|
|
20
|
+
return 0;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
"""
|
|
24
|
+
When I successfully run `adlint fixture.c` on noarch
|
|
25
|
+
Then the output should exactly match with:
|
|
26
|
+
| mesg | line | column |
|
|
27
|
+
| W1076 | 4 | 12 |
|
|
28
|
+
| W1065 | 9 | 10 |
|
|
29
|
+
| W1071 | 4 | 12 |
|
|
30
|
+
| W0629 | 4 | 12 |
|
|
31
|
+
| W0628 | 4 | 12 |
|
|
32
|
+
|
|
33
|
+
Scenario: same enum types
|
|
34
|
+
Given a target source named "fixture.c" with:
|
|
35
|
+
"""
|
|
36
|
+
enum Color { RED, BLUE, GREEN };
|
|
37
|
+
|
|
38
|
+
static int foo(const enum Color c)
|
|
39
|
+
{
|
|
40
|
+
switch (c) {
|
|
41
|
+
case RED: /* OK */
|
|
42
|
+
return 1;
|
|
43
|
+
case GREEN: /* OK */
|
|
44
|
+
return 2;
|
|
45
|
+
default:
|
|
46
|
+
return 0;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
"""
|
|
50
|
+
When I successfully run `adlint fixture.c` on noarch
|
|
51
|
+
Then the output should exactly match with:
|
|
52
|
+
| mesg | line | column |
|
|
53
|
+
| W1076 | 3 | 12 |
|
|
54
|
+
| W1071 | 3 | 12 |
|
|
55
|
+
| W0629 | 3 | 12 |
|
|
56
|
+
| W0628 | 3 | 12 |
|
|
57
|
+
|
|
58
|
+
Scenario: enum type and `int'
|
|
59
|
+
Given a target source named "fixture.c" with:
|
|
60
|
+
"""
|
|
61
|
+
enum Color { RED, BLUE, GREEN };
|
|
62
|
+
|
|
63
|
+
static int foo(const enum Color c)
|
|
64
|
+
{
|
|
65
|
+
switch (c) {
|
|
66
|
+
case RED: /* OK */
|
|
67
|
+
return 1;
|
|
68
|
+
case 1: /* OK but W1064 */
|
|
69
|
+
return 2;
|
|
70
|
+
default:
|
|
71
|
+
return 0;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
"""
|
|
75
|
+
When I successfully run `adlint fixture.c` on noarch
|
|
76
|
+
Then the output should exactly match with:
|
|
77
|
+
| mesg | line | column |
|
|
78
|
+
| W1076 | 3 | 12 |
|
|
79
|
+
| W1064 | 8 | 10 |
|
|
80
|
+
| W1071 | 3 | 12 |
|
|
81
|
+
| W0629 | 3 | 12 |
|
|
82
|
+
| W0628 | 3 | 12 |
|