C プロジェクト (OpenVPN が問題のプロジェクトで、コミット4029971240b6274b9b30e76ff74c7f689d7d9750 ) では、bool のエミュレーションがありました。
typedef int bool;
#define false 0
#define true 1
C99 bool に切り替えます
#include <stdbool.h>
しかし、プロジェクトには、ブールの不適切な使用法がどこかにあります。std bool の動作が異なることは知っています。例えば
bool t;
t=2;
if ( t == true)
printf("True!\n");
else
printf("False!\n");
True を返します! とstdbool.h
偽!#define
エミュレーションで。
私の質問stdbool とエミュレートされた bool で異なる動作をするこれらのコード部分を見つける方法はありますか? おそらく、私が見落としたいくつかのコンパイラフラグ、または差分をとることができる優れたllvmまたはgcc中間フォーマットですか?
上記の例ほど単純ではありませんが、見にくいものでなければなりません。== true ではないことは間違いありません。
更新: 問題が見つかりました (mbuf_set には int メンバー len があります)。ちょっとばかげていますが、これらをどのようにキャッチするかという問題はまだ残っています。整数オーバーフロー チェックが次のようなものをキャッチしないことに驚いています。
static inline bool
mbuf_len (const struct mbuf_set *ms)
{
return ms->len;
}