File tree Expand file tree Collapse file tree 1 file changed +26
-0
lines changed Expand file tree Collapse file tree 1 file changed +26
-0
lines changed Original file line number Diff line number Diff line change 1+ // run-pass
2+ // compile-flags: -O
3+ #![ allow( const_err) ]
4+
5+ // Make sure arithmetic unary/binary ops actually return the right result, even when overflowing.
6+ // We have to put them in `const fn` and turn on optimizations to avoid overflow checks.
7+
8+ const fn add ( x : i8 , y : i8 ) -> i8 { x+y }
9+ const fn sub ( x : i8 , y : i8 ) -> i8 { x-y }
10+ const fn mul ( x : i8 , y : i8 ) -> i8 { x* y }
11+ // div and rem are always checked, so we cannot test their result in case of oveflow.
12+ const fn neg ( x : i8 ) -> i8 { -x }
13+
14+ fn main ( ) {
15+ const ADD_OFLOW : i8 = add ( 100 , 100 ) ;
16+ assert_eq ! ( ADD_OFLOW , -56 ) ;
17+
18+ const SUB_OFLOW : i8 = sub ( 100 , -100 ) ;
19+ assert_eq ! ( SUB_OFLOW , -56 ) ;
20+
21+ const MUL_OFLOW : i8 = mul ( -100 , -2 ) ;
22+ assert_eq ! ( MUL_OFLOW , -56 ) ;
23+
24+ const NEG_OFLOW : i8 = neg ( -128 ) ;
25+ assert_eq ! ( NEG_OFLOW , -128 ) ;
26+ }
You can’t perform that action at this time.
0 commit comments