| 1 | test "@setRuntimeSafety" { |
| 2 | // The builtin applies to the scope that it is called in. So here, integer overflow |
| 3 | // will not be caught in ReleaseFast and ReleaseSmall modes: |
| 4 | // var x: u8 = 255; |
| 5 | // x += 1; // Unchecked Illegal Behavior in ReleaseFast/ReleaseSmall modes. |
| 6 | { |
| 7 | // However this block has safety enabled, so safety checks happen here, |
| 8 | // even in ReleaseFast and ReleaseSmall modes. |
| 9 | @setRuntimeSafety(true); |
| 10 | var x: u8 = 255; |
| 11 | x += 1; |
| 12 | |
| 13 | { |
| 14 | // The value can be overridden at any scope. So here integer overflow |
| 15 | // would not be caught in any build mode. |
| 16 | @setRuntimeSafety(false); |
| 17 | // var x: u8 = 255; |
| 18 | // x += 1; // Unchecked Illegal Behavior in all build modes. |
| 19 | } |
| 20 | } |
| 21 | } |
| 22 | |
| 23 | // test_safety=integer overflow |
| 24 | // optimize=ReleaseFast |