オーバーフロー
デバッグモードでコンパイルされていれば整数演算子はオーバーフロー時にパニックする。
-C debug-assertionsと-C overflow-checksコンパイラフラグはこれをより直接的に制御するのに使用できる。以下の事象はオーバーフローとみなされる:
+,*または二項の-で保存先の最大値より大きいか最小値より小さい値を生成。単項の
-の符号付整数型の最負値への適用、ただし演算対象はリテラル式 (または一つ以上のグループ式中に単独で存在するリテラル式) でないとする。
/または%を、左辺項を符号付整数型の最小整数かつ右辺項を-1で使用。これらの検査は歴史的理由から-C overflow-checksが無効でも行われる。
<<または>>を、右辺項が左辺項の型のビット数以上か負で使用。ⓘ 参考
単項演算子
-の背後にあるリテラル式の例外は-128_i8やlet j:i8 = -(128)のような書式は決してパニックせず期待通りの値 -128 となる事を意味する。これらの場合、リテラル式はすでにその型の最負値をすでに持っている (例えば、
128_i8は -128 を持つ) なぜなら整数リテラルは整数リテラル式の説明の通りそれらの型へと切り詰められる。2の補数方式のオーバーフロー規則のためこれらの最負値を否定しても値は変化のないままである。
rustcでは、これらの最負値の式はoverflowing_literalsリントにより無視される。