UndefinedBehaviorSanitizer ビルド ( -fsanitize=undefined
) があり、制御できない外部ライブラリで UB の警告を抑制しようとしています。clang/gcc のドキュメントでは について言及__attribute__((no_sanitize("undefined")))
されていますが、驚いたことに、この属性はサブルーチンからの警告を抑制していないようです。
簡単な例:
//__attribute__((no_sanitize("shift"))) // this correctly suppresses the warning
int bar() {
return 1 << 64;
}
__attribute__((no_sanitize("shift"))) // this does not
int foo() {
return bar();
}
int main() {
foo();
return 0;
}
この属性が機能していないように見えるので、どうすればこの警告を抑制できますか? UBSan ビルドからターゲット全体を削除することもできますが、それは非常に手間がかかるようです。