[adlint-user-ja:85] Re: extern FILE * で解析処理中断
Open source and free source code static analyzer
Brought to you by:
asamiogis
From: satake k. <sat...@se...> - 2013-10-10 23:36:56
|
さたけです。 アドバイスありがとうございます。 adlint_traits.ymlのfile_search_paths:の編集などを 実施しましたが、結果は同じでした。 引き続きアドバイスいただけますでしょうか。 また、対象ソースやadlint_traits.ymlなどを 添付させていただいてよろしいでしょうか? サイズは、tar.gzにして、10Kバイト程度です。 [環境、対処内容など] ・環境は、CentOS5.9です。 ・ダミーのstdio.hなどは配置していません。 ・gcc -H xx.cの出力結果(本メール下部に記載)から、 file_search_paths: - "/usr/include" - "/usr/lib/gcc/i386-redhat-linux/4.1.2/include" としました。 ・gcc -v -E -dM 1.c 1>1.h 2>1.log cp 1.h adlint_cinit.h を実行し、adlint_cinit.h を書き換えました。 [結果] $ make verbose-all adlint -t adlint_traits.yml -o . -p 1 -v ./1.c ./1.c [prs] |========== | 0.349s! An error was occurred while processing `./1.c'. See `1.c.msg.csv' and `1.c.log' for more details. 1.900s user, 0.050s system, 00:00:01.95 total make: *** [adlint_verbose-all] エラー 4 $ cat 1.c.msg.csv V,3.0.10,2013-10-11 08:11:32 +0900,/home/adlinttest/tmp/adlint/FILE2 E,./1.c,3,8,core,E0008,ERR,X99,トークン `FILE *' で構文エラーを検知しま した。 X,./1.c,3,8,core,X0003,ERR,X99,回復不能なエラーにより解析処理を中断しま した。詳 細は `1.c.msg.csv' 及び `1.c.log' を確認して下さい。 $ cat 1.log Using built-in specs. Target: i386-redhat-linux コンフィグオプション: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-libgcj-multifile --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --disable-plugin --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre --with-cpu=generic --host=i386-redhat-linux スレッドモデル: posix gcc バージョン 4.1.2 20080704 (Red Hat 4.1.2-54) /usr/libexec/gcc/i386-redhat-linux/4.1.2/cc1 -E -quiet -v 1.c -mtune=generic -dM 存在しないディレクトリ "/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../i386-redhat-linux/include" を無視します #include "..." の探索はここから始まります: #include <...> の探索はここから始まります: /usr/local/include /usr/lib/gcc/i386-redhat-linux/4.1.2/include /usr/include 探索リストの終わり [補足情報] gcc -H 1.c . /usr/include/stdio.h .. /usr/include/features.h ... /usr/include/sys/cdefs.h .... /usr/include/bits/wordsize.h ... /usr/include/gnu/stubs.h .... /usr/include/bits/wordsize.h .... /usr/include/gnu/stubs-32.h .. /usr/lib/gcc/i386-redhat-linux/4.1.2/include/stddef.h .. /usr/include/bits/types.h ... /usr/include/bits/wordsize.h ... /usr/lib/gcc/i386-redhat-linux/4.1.2/include/stddef.h ... /usr/include/bits/typesizes.h .. /usr/include/libio.h ... /usr/include/_G_config.h .... /usr/lib/gcc/i386-redhat-linux/4.1.2/include/stddef.h .... /usr/include/wchar.h ..... /usr/lib/gcc/i386-redhat-linux/4.1.2/include/stddef.h ..... /usr/include/bits/wchar.h .... /usr/include/gconv.h ..... /usr/include/wchar.h ...... /usr/lib/gcc/i386-redhat-linux/4.1.2/include/stddef.h ..... /usr/lib/gcc/i386-redhat-linux/4.1.2/include/stddef.h ... /usr/lib/gcc/i386-redhat-linux/4.1.2/include/stdarg.h .. /usr/include/bits/stdio_lim.h .. /usr/include/bits/sys_errlist.h 以上です。 (2013/10/10 18:50), Yutaka Yanoh wrote: > 矢野尾です。 > > お問い合わせありがとうございます。 > > 現象からしますと、おそらく、正しい stdio.h がインクルードできていない > のが原因だと思います。 > 1.c と同じディレクトリにダミーの stdio.h ファイルがあったりしないでし > ょうか? > > > AdLint は、解析するソースコードが #include するファイルを、コンパイラ > と同様に実際にインクルードして解析を行います。 > > 例えば、Fedora14 上の gcc でビルドするソースコードを、同じく Fedora14 > 上で AdLint 解析する場合は、adlintize コマンドを下記のように実行してく > ださい。 > > % adlintize -e i686-linux-gcc_4.5.1 > > この時に作成される adlint_traits.yml ファイルには、 > > ...略... > compiler_traits: > ...略... > file_search_paths: > - "/usr/local/include" > - "/usr/include" > - "/usr/lib/gcc/i686-redhat-linux/4.5.1/include" > > という内容となります。 > > この file_search_paths 項目の設定内容により、ソースコード中に > #include <stdio.h> > が現れた時に、AdLint は > /usr/local/include/stdio.h > /usr/include/stdio.h > /usr/lib/gcc/i686-redhat-linux/4.5.1/include/stdio.h > を検索して、見つかった stdio.h ファイルを実際にインクルードします。 > > コンパイラや OS が提供する正しい stdio.h ファイルには、FILE 型の定義が > あるので、添付いただいた 1.c を解析できるはずです。 > > 以上 > > -- > 矢野尾 裕 <ya...@us...> > > >> さたけと申します。 >> >> お世話になります。 >> AdLintを使い始めたところです。 >> >> 以下のソースで、構文エラーにより解析処理が中断されます。 >> 原因や対処方法など、教えていただけませんでしょうか。 >> >> ソース >> #include <stdio.h> >> >> extern FILE *a; >> >> int main(int argc, char *argv[]) >> { >> FILE *i; >> >> return 1; >> } >> >> .msg.csvの内容 >> E,./1.c,3,1,core,E0008,ERR,X99,トークン `FILE *' で構文エラーを検知しま >> した。 >> X,./1.c,3,1,core,X0003,ERR,X99,回復不能なエラーにより解析処理を中断しま >> した。詳> >> 細は `1.c.msg.csv' 及び `1.c.log' を確認して下さい。 >> >> 以上です。 > > > ------------------------------------------------------------------------------ > October Webinars: Code for Performance > Free Intel webinars can help you accelerate application performance. > Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from > the latest Intel processors and coprocessors. See abstracts and register > > http://pubads.g.doubleclick.net/gampad/clk?id=60134071&iu=/4140/ostg.clktrk > _______________________________________________ > adlint-user-ja mailing list > adl...@li... > https://lists.sourceforge.net/lists/listinfo/adlint-user-ja > > |