diff options
| author | Ralf Jung <post@ralfj.de> | 2020-02-10 09:56:17 +0100 |
|---|---|---|
| committer | Ralf Jung <post@ralfj.de> | 2020-02-10 09:56:17 +0100 |
| commit | b434d7ef8ae19c145dd9348b70bb955147dfab70 (patch) | |
| tree | ba51f82347e6699ec2f3baa998d3e804bdc2bcdc /src/test/ui/consts/const-int-arithmetic-overflow.rs | |
| parent | ae23f7020a5cb9a201e83f20f151282368b1f494 (diff) | |
| download | rust-b434d7ef8ae19c145dd9348b70bb955147dfab70.tar.gz rust-b434d7ef8ae19c145dd9348b70bb955147dfab70.zip | |
add test that checks overflows on arithmetic operators
Diffstat (limited to 'src/test/ui/consts/const-int-arithmetic-overflow.rs')
| -rw-r--r-- | src/test/ui/consts/const-int-arithmetic-overflow.rs | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/test/ui/consts/const-int-arithmetic-overflow.rs b/src/test/ui/consts/const-int-arithmetic-overflow.rs new file mode 100644 index 00000000000..75dac812f1e --- /dev/null +++ b/src/test/ui/consts/const-int-arithmetic-overflow.rs @@ -0,0 +1,26 @@ +// run-pass +// compile-flags: -O +#![allow(const_err)] + +// Make sure arithmetic unary/binary ops actually return the right result, even when overflowing. +// We have to put them in `const fn` and turn on optimizations to avoid overflow checks. + +const fn add(x: i8, y: i8) -> i8 { x+y } +const fn sub(x: i8, y: i8) -> i8 { x-y } +const fn mul(x: i8, y: i8) -> i8 { x*y } +// div and rem are always checked, so we cannot test their result in case of oveflow. +const fn neg(x: i8) -> i8 { -x } + +fn main() { + const ADD_OFLOW: i8 = add(100, 100); + assert_eq!(ADD_OFLOW, -56); + + const SUB_OFLOW: i8 = sub(100, -100); + assert_eq!(SUB_OFLOW, -56); + + const MUL_OFLOW: i8 = mul(-100, -2); + assert_eq!(MUL_OFLOW, -56); + + const NEG_OFLOW: i8 = neg(-128); + assert_eq!(NEG_OFLOW, -128); +} |
