[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
>
>
|