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