adlint-user-ja Mailing List for AdLint
Open source and free source code static analyzer
Brought to you by:
asamiogis
You can subscribe to this list here.
| 2012 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(33) |
Nov
(14) |
Dec
(3) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2013 |
Jan
|
Feb
(3) |
Mar
(1) |
Apr
(2) |
May
(15) |
Jun
(3) |
Jul
(4) |
Aug
(4) |
Sep
|
Oct
(5) |
Nov
|
Dec
|
| 2014 |
Jan
(1) |
Feb
(2) |
Mar
|
Apr
(1) |
May
(4) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2015 |
Jan
(2) |
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2016 |
Jan
|
Feb
|
Mar
(1) |
Apr
(2) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
|
From: 井上 妥 T. D. <Ino...@te...> - 2016-04-14 23:41:58
|
高瀬様
いつもおせわになります。井上です。
あれから別業務を行っていたため、解析作業が停滞しています。
ご指摘いただき、ありがとうございます。
近日中に再開する予定ですので、対応してみます。
文献についても当たってみますが、高価なものですね。
大きい図書館へ行っても見る予定です。
ありがとうございました。
________________________________________
差出人: Ryuichi Takase [r-t...@ai...]
送信日時: 2016年4月8日 8:47
宛先: adl...@li...
件名: [adlint-user-ja:100] Re: オブジェクト変換について
高瀬です。
どなたからも回答がないようなので、少しだけ。
次のコードように、違う型の変数へ代入されているのではないでしょうか。
int main(int argc, char **argv)
{
typedef enum { two, three, four, five, six, seven,
eight, nine, ten, Jack, Queen, King, Ace } rank;
rank card = Ace;
int number = card;
return 0;
}
明示的にint型にキャストすれば、指摘が消えると思います。
しかし、そもそも列挙型はint型ではありません。
この辺りの概念については、下記の文献によくまとまっていると思います。
C.A.R.ホーア. "II データ構造化序論". 構造化プログラミング. サイエンス社, 1975, p.97-196.
On Sat, 26 Mar 2016 05:11:08 +0000
井上 妥 TechnoPro Design <Ino...@te...> wrote:
> いつもお世話になります。v3.2.14を利用しております。
> 今回開発・改修したソースをadlintに通してみました。
> すると、以下のような指摘がありました。
>
> W9003:暗黙的に `enum __adlint__anon_20' 型のオブジェクトが `int' 型のオブジェクトに変換されています。
>
> いろいろと調べてみたのですが、よくわかりません。
> よく他の指摘箇所も見てみると、typedefでenumやらunionのメンバを使用している
> 部分に、上記の指摘があるように見えます。
> この「__adlint_anon_20」とやらについて、ご存じでしたら教えてください。
>
-------------------------------------------------------------------------
高瀬竜一 <r-t...@ai...>
国立研究開発法人 産業技術総合研究所
情報・人間工学領域 知能システム研究部門 マニピュレーション研究グループ
-------------------------------------------------------------------------
------------------------------------------------------------------------------
_______________________________________________
adlint-user-ja mailing list
adl...@li...
https://lists.sourceforge.net/lists/listinfo/adlint-user-ja
________________________________
受信されたメールにお心当たりのない場合は、送信者にご連絡を頂くとともに、本メールは破棄して頂くようお願い致します。
If you receive this message by mistake, please advise the sender immediately and delete this message from your system.
|
|
From: Ryuichi T. <r-t...@ai...> - 2016-04-07 23:47:37
|
高瀬です。
どなたからも回答がないようなので、少しだけ。
次のコードように、違う型の変数へ代入されているのではないでしょうか。
int main(int argc, char **argv)
{
typedef enum { two, three, four, five, six, seven,
eight, nine, ten, Jack, Queen, King, Ace } rank;
rank card = Ace;
int number = card;
return 0;
}
明示的にint型にキャストすれば、指摘が消えると思います。
しかし、そもそも列挙型はint型ではありません。
この辺りの概念については、下記の文献によくまとまっていると思います。
C.A.R.ホーア. "II データ構造化序論". 構造化プログラミング. サイエンス社, 1975, p.97-196.
On Sat, 26 Mar 2016 05:11:08 +0000
井上 妥 TechnoPro Design <Ino...@te...> wrote:
> いつもお世話になります。v3.2.14を利用しております。
> 今回開発・改修したソースをadlintに通してみました。
> すると、以下のような指摘がありました。
>
> W9003:暗黙的に `enum __adlint__anon_20' 型のオブジェクトが `int' 型のオブジェクトに変換されています。
>
> いろいろと調べてみたのですが、よくわかりません。
> よく他の指摘箇所も見てみると、typedefでenumやらunionのメンバを使用している
> 部分に、上記の指摘があるように見えます。
> この「__adlint_anon_20」とやらについて、ご存じでしたら教えてください。
>
-------------------------------------------------------------------------
高瀬竜一 <r-t...@ai...>
国立研究開発法人 産業技術総合研究所
情報・人間工学領域 知能システム研究部門 マニピュレーション研究グループ
-------------------------------------------------------------------------
|
|
From: 井上 妥 T. D. <Ino...@te...> - 2016-03-26 05:37:54
|
いつもお世話になります。v3.2.14を利用しております。 今回開発・改修したソースをadlintに通してみました。 すると、以下のような指摘がありました。 W9003:暗黙的に `enum __adlint__anon_20' 型のオブジェクトが `int' 型のオブジェクトに変換されています。 いろいろと調べてみたのですが、よくわかりません。 よく他の指摘箇所も見てみると、typedefでenumやらunionのメンバを使用している 部分に、上記の指摘があるように見えます。 この「__adlint_anon_20」とやらについて、ご存じでしたら教えてください。 ________________________________ 受信されたメールにお心当たりのない場合は、送信者にご連絡を頂くとともに、本メールは破棄して頂くようお願い致します。 If you receive this message by mistake, please advise the sender immediately and delete this message from your system. |
|
From: <ka...@wh...> - 2015-03-17 09:39:29
|
いつもお世話になっています。 小川清@名古屋市工業研究所です。 Adlintを昨日, Macintosh OSX 10.10.2(16GB memory) にダウンロードして、利 用2日目です。 昨日Webに掲載している例で動作確認しました。 今日は、自分が担当しているオープンソースのTOPPERS/sspを確認しようとして 操作しています。 http://toppers.jp/download.cgi/ssp_cq_frk_fm3_gcc-20140307.tar.gz 作業記録の一部は、 https://researchmap.jp/jo4a9svxt-1778110/#_1778110 に書きかけています。 logファイルに、 failed to parse preprocessed file. というエラーが出て先に進めません。 MLの過去ログを見ても該当する事項がなく、 WEB検索でも出てきませんでした。 ------------------ファイルの記述は、先頭のコメントを除くと、 #ifndef TOPPERS_CHIP_TEST_H #define TOPPERS_CHIP_TEST_H /* * チップで共通な定義 */ #define CPUEXC1 6 /* Usage Fault */ #define RAISE_CPU_EXCEPTION Asm("mcr p15, 0, r1, c2, c0, 0"); #define CANNOT_RETURN_CPUEXC #endif /* TOPPERS_CHIP_TEST_H */ ----------というものです。 このファイルに限らず、一つ前で他にincludeするものがないヘッダファイルを 読み込むと、 同じエラーで終わります。 ファイルのopen,文字コードなどのエラーはなんとか回避しました。 何から手をつけたらいいか、ご教示いただけると幸いです。 ps. Rubyは、昨年の暮れから、文字列処理などで利用しはじめたばかりです。 |
|
From: Yutaka Y. <ya...@us...> - 2015-01-31 10:45:09
|
矢野尾です。 ご報告ありがとうございます。 確かに、現状のコード評価の仕組み上、ご例示いただいたようなコードの場合 flg 変数がとり得る値として 0 のみを仮定してコードチェックするため、 flg == 1 の条件が常に偽であると誤認してしまいます。 この問題を解決するためには、制御が到達しないデッドコードを検知するため の仕組みを見直す必要があります。 が、、、私事ですが、現在対応のための時間を作れそうにありません。 ご報告頂けたにも関わらず申し訳ありませんが、対応までにお時間を頂きたい と思います。 以上 -- 矢野尾 裕 <ya...@us...> |
|
From: 松村悟 <ma...@no...> - 2015-01-28 03:06:11
|
お世話になります。
株式会社ノーリツの松村です。
if、switch文などの式で、変数の値が、その箇所では変更されないもので、他のファイルで、書き換えるような場合、W9001エラーが出ます
(シングルモジュール解析のメトリクス測定結果には、エラーの箇所からの関数コールは無いと判断されています)。
その結果、クロスモジュール解析 で、関数コール数が実際と合わなくなります。
出来るなら改善をお願いします。
例)
下記のfile1.cとfile2.cのような場合、func_int()が、割込みで定期的に実行されているようなソフトの場合、main()のfunc_sub();の行が、W9001エラーになります。
# # file1.c
void main(void){
flg = 0;
for(;;){
if(flg == 1)
func_sub(); ← ここが、実行されないと判断されて、W9001エラーになり、関数コールされていないことになる。
}
}
# # file1.c end
# # file2.c
void func_int(void){
if(flg){
flg = 0;
}else{
flg = 1;
}
}
# # file2.c end
以上、宜しくお願い致します。
|
|
From: Yutaka Y. <ya...@us...> - 2014-05-10 14:53:08
|
矢野尾です。 本日、AdLint 3.2.14 をリリースいたしました。 今回のリリースでは、C99 標準の可変引数マクロに対応しました。 以前のバージョンでは、下記のような可変個の実引数をとる関数形式マクロに 対応していなかったため、解析エラーを回避するために AdLint のトークン置 換機能を使う必要がありました。 #define defun(type, name, ...) extern type my_##name(__VA_ARGS__) defun(int, foo, int); /* extern int my_foo(int); に置換 */ AdLint 3.2.14 からは、可変引数マクロを C99 標準通りに置換できるので、 解析エラー回避のための余分な設定が不要となります。 是非アップデートをお願いいたします。 -- 矢野尾 裕 <ya...@us...> |
|
From: Takashi H. <ta...@ki...> - 2014-05-07 20:57:29
|
矢野尾様: > arbitrary_substitutions: > ...その他の設定... > "define_smartio_variants(__adlint__any);": "" # <- 追加 でエラーがなくなりました。 これを行っても、fprintfに関連した警告はとくに増えていないようです。 対策のご提示ありがとうございました。 堀 (2014/05/07 13:22), Yutaka Yanoh wrote: > 矢野尾です。 > > AdLint 3.2.12 では C99 の可変引数マクロに対応していないのが原因です。 > > かなり乱暴な方法ですが、とりあえずはトークン置換機能を使って、 > define_smartio_variants マクロの呼び出しを削除してみると構文エラーは > 逃げれそうです。 > > adlint_traits.yml ファイルの、arbitrary_substitution: 項目を下記のよう > に変更してお試し下さい。 > > arbitrary_substitutions: > ...その他の設定... > "define_smartio_variants(__adlint__any);": "" # <- 追加 > > この設定により、AdLint 解析中のプリプロセス直後に > define_smartio_variants(任意のトークン); > の部分を削除するようになります。 > > ソースコード中から上記を単純に削除してしまうので、fprintf などの標準 > ライブラリ関数のプロトタイプ宣言が無くなってしまい、余計な警告が増えて > しまうかと思いますが、その部分は無視してください。 > > # やはり、可変引数マクロにもきちんと対応しないとだめですね。。。 > # 時間を見つけて AdLint 3.2.14 でやってみたいと思います。 > > -- > 矢野尾 裕 <ya...@us...> > > > ------------------------------------------------------------------------------ > Is your legacy SCM system holding you back? Join Perforce May 7 to find out: > • 3 signs your SCM is hindering your productivity > • Requirements for releasing software faster > • Expert tips and advice for migrating your SCM now > http://p.sf.net/sfu/perforce > _______________________________________________ > adlint-user-ja mailing list > adl...@li... > https://lists.sourceforge.net/lists/listinfo/adlint-user-ja |
|
From: Yutaka Y. <ya...@us...> - 2014-05-07 04:22:18
|
矢野尾です。
AdLint 3.2.12 では C99 の可変引数マクロに対応していないのが原因です。
かなり乱暴な方法ですが、とりあえずはトークン置換機能を使って、
define_smartio_variants マクロの呼び出しを削除してみると構文エラーは
逃げれそうです。
adlint_traits.yml ファイルの、arbitrary_substitution: 項目を下記のよう
に変更してお試し下さい。
arbitrary_substitutions:
...その他の設定...
"define_smartio_variants(__adlint__any);": "" # <- 追加
この設定により、AdLint 解析中のプリプロセス直後に
define_smartio_variants(任意のトークン);
の部分を削除するようになります。
ソースコード中から上記を単純に削除してしまうので、fprintf などの標準
ライブラリ関数のプロトタイプ宣言が無くなってしまい、余計な警告が増えて
しまうかと思いますが、その部分は無視してください。
# やはり、可変引数マクロにもきちんと対応しないとだめですね。。。
# 時間を見つけて AdLint 3.2.14 でやってみたいと思います。
--
矢野尾 裕 <ya...@us...>
|
|
From: Takashi H. <ta...@ki...> - 2014-05-06 21:01:00
|
堀と申します。はじめまして。 AdLint 3.2.12を使わせて頂いています。 表題の件ですが、Microchip Technology製のコンパイラ「MPLAB XC32 Ver. 1.30」のヘッダファイルが原因で、次のエラーメッセージが表示されます。 > c:\program files\microchip\xc32\v1.30\pic32mx\include\stdio.h|291 col > 32| error:core:E0008:ERR:X99:トークン `, fprintf' で構文エラーを検知し > ました。 その内容は、次のようになっています。 > #if defined(__C32_VERSION__) > define_smartio_variants(int,fprintf,FILE *, const char *, ...); > define_smartio_variants(int, fscanf, FILE *, const char *, ...); > define_smartio_variants(int,vfprintf,FILE *, const char *, va_list); > define_smartio_variants(int, vfscanf, FILE *, const char *, va_list); > #endif さらに、マクロ「define_smartio_variants」は、次のような定義でした。 > #if defined(__C32_VERSION__) > #if !defined(__STRICT_ANSI__) > #define define_smartio_variants(rettype,funcname,...) \ > extern rettype _ ## funcname ## _cdeEfFgGnopsuxX (__VA_ARGS__); \ > extern rettype _ ## funcname ## _cdeEfFgGnopuxX (__VA_ARGS__); \ > extern rettype _ ## funcname ## _cdeEfFnopsuxX (__VA_ARGS__); \ > extern rettype _ ## funcname ## _cdeEfFnopuxX (__VA_ARGS__); \ > extern rettype _ ## funcname ## _cdeEgGnopsuxX (__VA_ARGS__); \ > extern rettype _ ## funcname ## _cdeEgGnopuxX (__VA_ARGS__); \ > extern rettype _ ## funcname ## _cdeEnopsuxX (__VA_ARGS__); \ > extern rettype _ ## funcname ## _cdeEnopuxX (__VA_ARGS__); \ > extern rettype _ ## funcname ## _cdfFgGnopsuxX (__VA_ARGS__); \ > extern rettype _ ## funcname ## _cdfFgGnopuxX (__VA_ARGS__); \ > extern rettype _ ## funcname ## _cdfFnopsuxX (__VA_ARGS__); \ > extern rettype _ ## funcname ## _cdfFnopuxX (__VA_ARGS__); \ > extern rettype _ ## funcname ## _cdgGnopsuxX (__VA_ARGS__); \ > extern rettype _ ## funcname ## _cdgGnopuxX (__VA_ARGS__); \ > extern rettype _ ## funcname ## _cdnopsuxX (__VA_ARGS__); \ > extern rettype _ ## funcname ## _cdnopuxX (__VA_ARGS__); \ > extern rettype _ ## funcname ## _eE (__VA_ARGS__); \ > extern rettype _ ## funcname ## _eEfF (__VA_ARGS__); \ > extern rettype _ ## funcname ## _eEfFgG (__VA_ARGS__); \ > extern rettype _ ## funcname ## _eEfFgGs (__VA_ARGS__); \ > extern rettype _ ## funcname ## _eEfFs (__VA_ARGS__); \ > extern rettype _ ## funcname ## _eEgG (__VA_ARGS__); \ > extern rettype _ ## funcname ## _eEgGs (__VA_ARGS__); \ > extern rettype _ ## funcname ## _eEs (__VA_ARGS__); \ > extern rettype _ ## funcname ## _fF (__VA_ARGS__); \ > extern rettype _ ## funcname ## _fFgG (__VA_ARGS__); \ > extern rettype _ ## funcname ## _fFgGs (__VA_ARGS__); \ > extern rettype _ ## funcname ## _fFs (__VA_ARGS__); \ > extern rettype _ ## funcname ## _gG (__VA_ARGS__); \ > extern rettype _ ## funcname ## _gGs (__VA_ARGS__); \ > extern rettype _ ## funcname ## _s (__VA_ARGS__); \ > extern rettype _ ## funcname (__VA_ARGS__); \ > extern rettype _d ## funcname ## _cdeEfFgGnopsuxX (__VA_ARGS__); \ > extern rettype _d ## funcname ## _cdeEfFgGnopuxX (__VA_ARGS__); \ > extern rettype _d ## funcname ## _cdeEfFnopsuxX (__VA_ARGS__); \ > extern rettype _d ## funcname ## _cdeEfFnopuxX (__VA_ARGS__); \ > extern rettype _d ## funcname ## _cdeEgGnopsuxX (__VA_ARGS__); \ > extern rettype _d ## funcname ## _cdeEgGnopuxX (__VA_ARGS__); \ > extern rettype _d ## funcname ## _cdeEnopsuxX (__VA_ARGS__); \ > extern rettype _d ## funcname ## _cdeEnopuxX (__VA_ARGS__); \ > extern rettype _d ## funcname ## _cdfFgGnopsuxX (__VA_ARGS__); \ > extern rettype _d ## funcname ## _cdfFgGnopuxX (__VA_ARGS__); \ > extern rettype _d ## funcname ## _cdfFnopsuxX (__VA_ARGS__); \ > extern rettype _d ## funcname ## _cdfFnopuxX (__VA_ARGS__); \ > extern rettype _d ## funcname ## _cdgGnopsuxX (__VA_ARGS__); \ > extern rettype _d ## funcname ## _cdgGnopuxX (__VA_ARGS__); \ > extern rettype _d ## funcname ## _cdnopsuxX (__VA_ARGS__); \ > extern rettype _d ## funcname ## _cdnopuxX (__VA_ARGS__); \ > extern rettype _d ## funcname ## _eE (__VA_ARGS__); \ > extern rettype _d ## funcname ## _eEfF (__VA_ARGS__); \ > extern rettype _d ## funcname ## _eEfFgG (__VA_ARGS__); \ > extern rettype _d ## funcname ## _eEfFgGs (__VA_ARGS__); \ > extern rettype _d ## funcname ## _eEfFs (__VA_ARGS__); \ > extern rettype _d ## funcname ## _eEgG (__VA_ARGS__); \ > extern rettype _d ## funcname ## _eEgGs (__VA_ARGS__); \ > extern rettype _d ## funcname ## _eEs (__VA_ARGS__); \ > extern rettype _d ## funcname ## _fF (__VA_ARGS__); \ > extern rettype _d ## funcname ## _fFgG (__VA_ARGS__); \ > extern rettype _d ## funcname ## _fFgGs (__VA_ARGS__); \ > extern rettype _d ## funcname ## _fFs (__VA_ARGS__); \ > extern rettype _d ## funcname ## _gG (__VA_ARGS__); \ > extern rettype _d ## funcname ## _gGs (__VA_ARGS__); \ > extern rettype _d ## funcname ## _s (__VA_ARGS__); \ > extern rettype _d ## funcname (__VA_ARGS__); > #else > #define define_smartio_variants(rettype,funcname,...) > #endif /* STRICT_ANSI */ > #endif /* C32_VERSION */ 私の方で試したのは、次の内容です。 「define_smartio_variants」を空定義しようと、adlint_cinit.hに > #define define_smartio_variants(rettype,funcname,...) を追加 → 効果なし 「__STRICT_ANSI__」を定義すれば、「define_smartio_variants」は定義されな いはず、と考え、 adlint_pinit.hに > #define __STRICT_ANSI__ を追加 → 効果なし 他にどのようにすればこのエラーを解消できるか、お教えいただければありがた いです。 どうぞよろしくお願いいたします。 #もし、メーリングリストの趣旨と合わない内容でしたら、すみません |
|
From: Yutaka Y. <ya...@us...> - 2014-04-12 01:45:10
|
矢野尾です。
本日、AdLint 3.2.12 をリリースいたしました。
今回のリリースでは、AdLint にプラグインできる外部のソースコード検査パ
ッケージを開発しやすくするための改良と、構造体/共用体に関する不具合を
修正しました。
* オプションのソースコード検査パッケージにロード時の処理を記述できるよ
う、検査パッケージの初期化機能を追加
AdLint には、オプションのソースコード検査パッケージをアドオンする機
能があります。
今回の改良により、アドオンしたソースコード検査パッケージをロードした
タイミングで実行したい処理を記述できるようになります。
* オプションのソースコード検査パッケージで独自のメトリクスやコード情報
を出力できるよう、クロスモジュール解析を見直し
オプションのソースコード検査パッケージから独自のメトリクスやコード情
報を .met.csv ファイルに出力すると、クロスモジュール解析が異常終了し
てしまいます。
今回、クロスモジュール解析に関連の無いレコードをスキップするよう仕様
を見直したため、ソースコード検査パッケージが独自の情報を .met.csv フ
ァイルに出力できるようになります。
* 名無しの構造体/共用体メンバを正しく解釈できない不具合を修正
下記の様に union メンバとして名前の無い struct メンバを持つようなコ
ードで、型や変数の情報として名無しメンバが欠損してしまい、正しく解析
できない不具合を修正しました。
union {
struct {
unsigned int i1:1;
unsigned int i2:1;
};
struct {
unsigned int j1:1;
unsigned int j2:1;
};
} foo;
是非アップデートをお願いいたします。
--
矢野尾 裕 <ya...@us...>
|
|
From: Yutaka Y. <ya...@us...> - 2014-02-17 06:05:51
|
矢野尾です。 本日、AdLint 3.2.10 をリリースいたしました。 今回のリリースでは、Microsoft Visual C++ 2010 を C コンパイラとして 使用するプロジェクトを解析できるよう、i686-mswin-msvc_100 ビルド環境を 追加しました。 設定ファイルのテンプレートを生成する時に、 > adlintize -e i686-mswin-msvc_100 ... のように -e オプションを指定することで、Visual C++ 2010 を想定した内容 の adlint_traits.yml と adlint_cinit.h ファイルを作成できます。 プリセットのビルド環境は、下記コマンドで調べることができます。 > adlintize -L i686-cygwin-gcc_4.3.4 i686-devkit-gcc_4.5.2 i686-linux-gcc_4.5.1 i686-mingw-gcc_4.6.1 i686-mswin-msvc_100 x86_64-centos_6.4-gcc_4.4.7 x86_64-ubuntu_12.04-gcc_4.6.3 # 今後もさまざまなビルド環境に対応していきたいと思いますので、お気軽に # リクエストいただけると助かります。 是非アップデートをお願いいたします。 -- 矢野尾 裕 <ya...@us...> |
|
From: Yutaka Y. <ya...@us...> - 2014-02-07 07:39:00
|
矢野尾です。 本日、AdLint 3.2.8 をリリースいたしました。 今回のリリースでは、AdLint PAD <http://adlint-pad.herokuapp.com/> で 報告いただいた、プリプロセッサの不具合を修正しました。 * 関数形式マクロで 16 進整数定数のプレフィックス 0x と、仮引数の数値 本体部分を ## 演算子で連結する場合に、プレフィックスの 0x 部分を 0 と x の二つのトークンに分割してしまう不具合を修正 以前のバージョンでは、下記のようなコードで構文解析エラーとなってい ました。 #define HEX(inHex) (0x##inHex) int main(void) { unsigned long aVarUL; aVarUL = HEX(12345678); /* 0 x12345678 に展開してしまう */ return 0; } 是非アップデートをお願いいたします。 -- 矢野尾 裕 <ya...@us...> |
|
From: Yutaka Y. <ya...@us...> - 2014-01-09 09:30:10
|
矢野尾です。
本日、AdLint 3.2.6 をリリースいたしました。
今回のリリースでは、解析を異常終了させるものを含む、重大な不具合を修正
しました。
* 既に typedef 宣言済みの struct/union/enum 型を、単一の typedef で再
宣言した場合に異常終了する不具合を修正
以前のバージョンでは、下記のようなコードを解析した時に、E0008 エラー
メッセージを出力して解析が失敗していました。
typedef int foo;
typedef struct bar { foo f; } baz, *qux;
typedef struct bar baz, *qux; /* E0008 */
* C0001 メッセージ本文の誤字を修正
* トークン置換機能で、パターンの括弧内に __adlint__any を指定した場合、
__adlint__any の位置に対応するトークンが無いと括弧の対応がくずれる不
具合を修正
特性ファイルの arbitrary_substitutions 項目に、
"__except(__adlint__any) { __adlint__any }": ""
といった置換パターンを設定して、Visual C++ 固有の __except 構文に対
応しようとした場合、ブレース内が空になっているコードを解析すると、
誤って } トークンを削除してしまう不具合がありました。
* プリプロセッサの条件ディレクティブ評価で、スキップする部分に /* を含
む文字列リテラルが現れると、コメントの開始とみなしてしまう不具合を修
正
条件が偽となる #if ディレクティブなどで囲まれた部分に、
printf("/*");
のようなコードが現れた場合、誤って文字列リテラル内の /* をコメントの
開始と判断してしまう不具合がありました。
* 大域スコープでの余分なセミコロンを受け付けるように構文解析器を修正
ISO C 言語標準は、関数定義外に余分なセミコロンは記述できないと規定し
ています。
以前のバージョンでは、余分なセミコロンに対して E0008 エラーメッセー
ジを出力して解析を中断していましたが、新規エラーメッセージ E0018 を
出力して解析を続行できるよう仕様変更しました。
是非アップデートをお願いいたします。
--
矢野尾 裕 <ya...@us...>
|
|
From: satake k. <sat...@se...> - 2013-10-15 04:55:20
|
さたけです。 ちょうど、状況をご連絡しようと 内容をまとめていたところでした。 結果から申しますと、 adlint_cinit.hの編集内容を見直すことで、 うまく解析できるようになりました。 http://sourceforge.net/p/adlint/discussion/support_ja/thread/6df9976f/ の記述を参考にして、以下を実施していたのですが、 をやめて、のみにすることで、うまくいくようになりました。 gcc -v -E -dM の出力結果で、adlint_cinit.hを書き換える gcc コマンドが抱え込んでいる内部関数/マクロを追記する 現在のadlint_cinit.hの内容です。 # cat adlint_cinit.h #define __const const #define __restrict restrict #define __inline inline #define __builtin_va_list void * #define __builtin_va_start(a, b) (0) #define __builtin_va_end(a) (0) #define __builtin_va_arg(ar, t) (0) #define __builtin_va_copy(d, s) (0) #define __builtin_offsetof(type, member) (0) #define __alignof__(type) (0) また、なにかありましたらよろしくお願いします。 以上です。 (2013/10/15 13:16), Yutaka Yanoh wrote: > 矢野尾です。 > > 返信が遅れまして申し訳ありません。 > > こちらで現象を再現できていないので、対象ソース、各種設定ファイル一式を > ya...@us... > 宛に送信いただけますか? > > 今、手元に CentOS 5.9 環境が無いので少し時間がかかるかもしれませんが、 > 是非調査させてください。 > > 以上、よろしくお願いいたします。 > > -- > 矢野尾 裕 <ya...@us...> > >> さたけです。 >> >> アドバイスありがとうございます。 >> >> 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 >> >> 以上です。 > > > ------------------------------------------------------------------------------ > 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=60135031&iu=/4140/ostg.clktrk > _______________________________________________ > adlint-user-ja mailing list > adl...@li... > https://lists.sourceforge.net/lists/listinfo/adlint-user-ja > > -- 佐武 和久 sat...@se... 06-4803-5971 / 8-914-22-3127 |
|
From: Yutaka Y. <ya...@us...> - 2013-10-15 04:17:00
|
矢野尾です。 返信が遅れまして申し訳ありません。 こちらで現象を再現できていないので、対象ソース、各種設定ファイル一式を ya...@us... 宛に送信いただけますか? 今、手元に CentOS 5.9 環境が無いので少し時間がかかるかもしれませんが、 是非調査させてください。 以上、よろしくお願いいたします。 -- 矢野尾 裕 <ya...@us...> > さたけです。 > > アドバイスありがとうございます。 > > 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 > > 以上です。 |
|
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
>
>
|
|
From: Yutaka Y. <ya...@us...> - 2013-10-10 10:15:12
|
矢野尾です。
お問い合わせありがとうございます。
現象からしますと、おそらく、正しい 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' を確認して下さい。
>
> 以上です。
|
|
From: satake k. <sat...@se...> - 2013-10-10 08:49:07
|
さたけと申します。
お世話になります。
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' を確認して下さい。
以上です。
|
|
From: Yutaka Y. <ya...@us...> - 2013-08-28 04:39:25
|
矢野尾です。
本日、AdLint 3.2.0 をリリースいたしました。
今回のリリースでは、新しく「コンテキストトレース機能」を追加しました。
ご報告いただいている不具合の対応は、次回のリリースに盛り込む予定です。
以前のバージョンでは、ゼロ除算などのランタイムエラーの可能性を指摘する
警告は、「ここでゼロ除算の可能性があります」という結論の部分しか出力し
ていませんでした。
コンテキストトレース機能により、現状通りの警告メッセージに続いて、どの
ような文脈で指摘した状況が起こり得るかを、コンテキストメッセージによっ
て補足できるようになりました。
下記は、コンテキストメッセージの出力例です。
1: int foo(int i)
2: {
3: int j = 0;
4:
5: if (i < 0) {
6: j = -i;
7: }
8: else if (i > 0) {
9: j = i;
10: }
11:
12: return 5 / j; /* W0093 ゼロ除算するかも */
13: }
a.c:12:14:warning:W0093:ゼロになることがある値で除算しています。
:::context:C1000:次の実行パスで警告を検知しました。
a.c:3:9:context:C1006:ここで該当変数に値を割り当てました。
a.c:5:11:context:C1002:この制御式を偽として評価しました。
a.c:8:16:context:C1002:この制御式を偽として評価しました。
コンテキストトレース機能は、まだ実験的な機能という位置づけですが、是非
ご利用いただいて、問題がありましたらご報告いただけると助かります。
以上、今後ともよろしくお願いいたします。
--
矢野尾 裕 <ya...@us...>
|
|
From: <tos...@hi...> - 2013-08-08 01:06:56
|
矢野尾様
お世話になります。西田です。
お返事ありがとうございます。
AdLintの仕様としては解析可能とのこと、拝承です。
>AdLint は、C 言語プログラム中の変数それぞれについて、データフロー解析の
>ための多くの付加情報を確保するため、どうしてもメモリを多く必要とします。
これは解析ツールの性でしょうね。
様々な情報の確保とのトレードオフですね。
今後もAdLintを活用していきたいと思っておりますので、
対応版のリリースをお待ちしております。
ご回答ありがとうございました。
---
西田
>送信者: ya...@us...
>主題: [!][adlint-user-ja:80] Re: 多次元配列における解析エラーについて
>受信日: 13/08/08 09:09
>属性: なし
>
>矢野尾です。
>
>ご報告ありがとうございます。
>
>> 仕様上の制限や、必要な設定などありましたらご教示いただけますでしょうか。
>> 宜しくお願いいたします。
>
>AdLint の仕様といたしましては、ご提示いただいたコードをそのまま解析可能
>です。したがって、本件は AdLint の不具合です。
>
>おそらく、AdLint 内部の抽象インタプリタで TestStructure 配列をそのまま確
>保しようとしてメモリを使い果たしているようです。
>
>AdLint は、C 言語プログラム中の変数それぞれについて、データフロー解析の
>ための多くの付加情報を確保するため、どうしてもメモリを多く必要とします。
>
>本質的な解決には、変数ひとつに対応する情報量を減らすことが必要ですが、ま
>ずは TestStructure のような大きな変数については、要素数に上限を設けるこ
>とで対応しようと思います。
>
>現在、次のリリースのための追加機能を実装中でして、対応まで少々お時間をく
>ださい。
>
>以上
>
>--
>矢野尾 裕 <ya...@us...>
>
>
>(2013年08月06日 17:45), tos...@hi... wrote:
>>
>> はじめまして。
>> 西田と申します。
>>
>> 最近、AdLintを使い始めたのですが、
>> 下記のように、比較的大きい多次元配列の定義を含むコードの解析にて、
>> 「failed to allocate memory」が発生し、解析が61%で終了してしまいます。
>>
>> (Sample Code)
>> --------------------------------------------
>> unsigned char TestStructure[200][200][200];
>>
>> int main(int argc, char *argv[])
>> {
>> return 0;
>> }
>> --------------------------------------------
>>
>> 解析中、topコマンドでメモリ使用率を確認すると、
>> 明らかに上昇していく様子が見られ、100%に達すると上記エラーが出ます。
>> (なお、検討PCの搭載メモリは2GBです)
>>
>> 検討環境は以下の通りです。
>>
>> OS : Ubuntu 10.10
>> AdLint Version : 3.0.10 (2013-06-28)
>> Ruby Version : ruby 2.0.0p247 (2013-06-27 revision 41674) [i686-linux]
>>
>> 仕様上の制限や、必要な設定などありましたらご教示いただけますでしょうか。
>> 宜しくお願いいたします。
>
>------------------------------------------------------------------------------
>Get 100% visibility into Java/.NET code with AppDynamics Lite!
>It's a free troubleshooting tool designed for production.
>Get down to code-level detail for bottlenecks, with <2% overhead.
>Download for free and get started troubleshooting in minutes.
>http://pubads.g.doubleclick.net/gampad/clk?id=48897031&iu=/4140/ostg.clktrk
>_______________________________________________
>adlint-user-ja mailing list
>adl...@li...
>https://lists.sourceforge.net/lists/listinfo/adlint-user-ja
>
|
|
From: Yutaka Y. <ya...@us...> - 2013-08-08 00:09:15
|
矢野尾です。
ご報告ありがとうございます。
> 仕様上の制限や、必要な設定などありましたらご教示いただけますでしょうか。
> 宜しくお願いいたします。
AdLint の仕様といたしましては、ご提示いただいたコードをそのまま解析可能
です。したがって、本件は AdLint の不具合です。
おそらく、AdLint 内部の抽象インタプリタで TestStructure 配列をそのまま確
保しようとしてメモリを使い果たしているようです。
AdLint は、C 言語プログラム中の変数それぞれについて、データフロー解析の
ための多くの付加情報を確保するため、どうしてもメモリを多く必要とします。
本質的な解決には、変数ひとつに対応する情報量を減らすことが必要ですが、ま
ずは TestStructure のような大きな変数については、要素数に上限を設けるこ
とで対応しようと思います。
現在、次のリリースのための追加機能を実装中でして、対応まで少々お時間をく
ださい。
以上
--
矢野尾 裕 <ya...@us...>
(2013年08月06日 17:45), tos...@hi... wrote:
>
> はじめまして。
> 西田と申します。
>
> 最近、AdLintを使い始めたのですが、
> 下記のように、比較的大きい多次元配列の定義を含むコードの解析にて、
> 「failed to allocate memory」が発生し、解析が61%で終了してしまいます。
>
> (Sample Code)
> --------------------------------------------
> unsigned char TestStructure[200][200][200];
>
> int main(int argc, char *argv[])
> {
> return 0;
> }
> --------------------------------------------
>
> 解析中、topコマンドでメモリ使用率を確認すると、
> 明らかに上昇していく様子が見られ、100%に達すると上記エラーが出ます。
> (なお、検討PCの搭載メモリは2GBです)
>
> 検討環境は以下の通りです。
>
> OS : Ubuntu 10.10
> AdLint Version : 3.0.10 (2013-06-28)
> Ruby Version : ruby 2.0.0p247 (2013-06-27 revision 41674) [i686-linux]
>
> 仕様上の制限や、必要な設定などありましたらご教示いただけますでしょうか。
> 宜しくお願いいたします。
|
|
From: <tos...@hi...> - 2013-08-06 09:00:13
|
はじめまして。
西田と申します。
最近、AdLintを使い始めたのですが、
下記のように、比較的大きい多次元配列の定義を含むコードの解析にて、
「failed to allocate memory」が発生し、解析が61%で終了してしまいます。
(Sample Code)
--------------------------------------------
unsigned char TestStructure[200][200][200];
int main(int argc, char *argv[])
{
return 0;
}
--------------------------------------------
解析中、topコマンドでメモリ使用率を確認すると、
明らかに上昇していく様子が見られ、100%に達すると上記エラーが出ます。
(なお、検討PCの搭載メモリは2GBです)
検討環境は以下の通りです。
OS : Ubuntu 10.10
AdLint Version : 3.0.10 (2013-06-28)
Ruby Version : ruby 2.0.0p247 (2013-06-27 revision 41674) [i686-linux]
仕様上の制限や、必要な設定などありましたらご教示いただけますでしょうか。
宜しくお願いいたします。
|
|
From: Yutaka Y. <ya...@us...> - 2013-07-13 02:43:25
|
矢野尾です。 ご指摘ありがとうございます。 > 警告 > (.*?):(.*?):(.*?):warning:(.*?):(.*?):(.*?):(.*?):(.*) たしかに、メッセージ本文を切り出す正規表現が * だけになっていました。 > W0059 みたいなのは、行が出力されないので対応が必要かもしれません。 > (.*?)::warning:(.*?):(.*?):(.*?):(.*?):(.*) あ、、そうですね。 実はこれ、私としましてはバグだと認識しています。 行や桁が一意に決まらない場合でも、メッセージのカラム数は常に一定であるべ きです。 TODO として積んではあるのですが、対応が後回しになってしまっています。 申し訳ありません。 -- 矢野尾 裕 <ya...@us...> |
|
From: <yoh...@nt...> - 2013-07-11 11:05:26
|
伊藤です。 > 早速、下記 URL に Eclipse 連携方法のドキュメントを作成しました。 > http://adlint.sourceforge.net/pmwiki/pmwiki.php?n=Main.EclipseIntegration 早速、設定してみました。 当方intro_demo プロジェクトは使わずに、実プロジェクトに適用しました。 「AdLint 用エラーパーサの追加」を適用すれば、シングルモジュール解析の実行 でエラータグジャンプできました。ありがとうございます。 ちょっと気になったところは、Pattern 部分の正規表現です。 以下だと思います。 警告 (.*?):(.*?):(.*?):warning:(.*?):(.*?):(.*?):(.*?):(.*) W0059 みたいなのは、行が出力されないので対応が必要かもしれません。 (.*?)::warning:(.*?):(.*?):(.*?):(.*?):(.*) 情報 (.*?):(.*?):(.*?):context:(.*?):(.*?):(.*?):(.*?):(.*) エラー (.*?):(.*?):(.*?):error:(.*?):(.*?):(.*?):(.*?):(.*) よろしくお願いします。 --- 伊藤 洋一 <yoh...@nt...> 株式会社リコー 研究開発本部 デバイスモジュール技術開発センター 製品開発室 映像モジュール開発グループ |