0

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 ビルドからターゲット全体を削除することもできますが、それは非常に手間がかかるようです。

4

1 に答える 1