-Walloc-size-larger-than= とは?

特定のコードを特定のコンパイルオプションをつけてコンパイルするとこんなのが出る

warning: argument 1 value '18446744073709551615' exceeds maximum object size 9223372036854775807 [-Walloc-size-larger-than=]

例えば NetBSD の src/lib/libc/gen/asysctl.c を -O3 で(というか -O2 -fsplit-paths でも)コンパイルすると出る。
通常は -O2 なので出ない。

18446744073709551615 は符号なし64bitの最大値 FFFFFFFFFFFFFFFF
9223372036854775807 は符号あり64bitの最大値 7FFFFFFFFFFFFFFF

何故、最適化で警告が増えるのか?
というか、malloc の引数なんだけど、size_t だから符号なしで問題ないはずでは?

よくわからんけれど、警告を消すだけであれば、

-O3 -Walloc-size-larger-than=18446744073709551615

でいける。

カテゴリーBSD