Linux でレガシー アプリケーションを 64 ビットに移植する作業を行っています。long と int が同じ意味で使用されている場所はたくさんありますが、ソース コードがかなり大きいため、テストですべてを把握することは困難です。コードを静的に分析し、安全でないコードを修正するために使用するプラグインを計画しています。そのようなパターンの1つは
void foo(unsigned long *x){
*x = *x + 1; //x is pointing to a 32-bit space
return;
}
int main(){
unsigned int x = ;
foo(reinterpret_cast<unsigned long*>(&x));
}
アプリケーションのビルドには gcc-4.2.1 を使用します。そして、 -Wall と -Wextra が有効になっていても、これらのタイプのキャストについて警告しません。
-Weverything で clang を実行しようとしましたが、成功しませんでした。これらのタイプの危険な明示的なキャストについて警告するフラグがclangにありますか? そうでない場合、どうすれば追加できますか?