diff options
author | ringabout <43030857+ringabout@users.noreply.github.com> | 2023-02-23 03:34:20 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-02-22 20:34:20 +0100 |
commit | 38f876dd484fc1a3ce44788b1ed9601eea8619f6 (patch) | |
tree | beb7be1f217a4d2bf6b315be075052f65868ee08 /tests/overflow/toverflow_reorder.nim | |
parent | fdd75202576634f1fb8c7948d6031e34af9ea67e (diff) | |
download | Nim-38f876dd484fc1a3ce44788b1ed9601eea8619f6.tar.gz |
fixes #19795; fixes #11852; fixes #19974; remove parsing pipeline, Nim now parses the whole module at one time (#21379)
* fixes #19795; remove parse pipeline * isScript * fixes nimscriptapi * don't touch reorder * check script * fixes tests * it seems implicit imports of system cause troubles * access the first child of `nkStmtList` * ignore comments * minor messages * perhaps increases hloLoopDetector * the module is a stmtList, which changes the errors * fixes nimdoc * fixes tlinter * fixes nim secret tests * fixes arc_misc * fixes nim secret tests again * safe; fixes one more test * GlobalError is the root cause too * fixes parsing errors * put emit types to the cfsForwardTypes section * fixes #11852; `{.push checks:off}` now works in procs * disable navigator * fixes nimdoc * add tests for JS * fixes nimsuggest
Diffstat (limited to 'tests/overflow/toverflow_reorder.nim')
-rw-r--r-- | tests/overflow/toverflow_reorder.nim | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/tests/overflow/toverflow_reorder.nim b/tests/overflow/toverflow_reorder.nim new file mode 100644 index 000000000..fcf7b0c82 --- /dev/null +++ b/tests/overflow/toverflow_reorder.nim @@ -0,0 +1,84 @@ +{.experimental: "codeReordering".} + +discard """ + output: "ok" + cmd: "nim $target --overflowChecks:off $options $file" +""" +# Tests nim's ability to detect overflows + +{.push overflowChecks: on.} + +var + a = high(int) + b = -2 + overflowDetected = false + +try: + echo b - a +except OverflowDefect: + overflowDetected = true + +{.pop.} # overflow check + +doAssert(overflowDetected) + +block: # Overflow checks in a proc + var + a = high(int) + b = -2 + overflowDetected = false + + {.push overflowChecks: on.} + proc foo() = + let c = b - a + {.pop.} + + try: + foo() + except OverflowDefect: + overflowDetected = true + + doAssert(overflowDetected) + +block: # Overflow checks in a forward declared proc + var + a = high(int) + b = -2 + overflowDetected = false + + proc foo() + + {.push overflowChecks: on.} + proc foo() = + let c = b - a + {.pop.} + + try: + foo() + except OverflowDefect: + overflowDetected = true + + doAssert(overflowDetected) + +block: # Overflow checks doesn't affect fwd declaration + var + a = high(int) + b = -2 + overflowDetected = false + + {.push overflowChecks: on.} + proc foo() + {.pop.} + + proc foo() = + let c = b - a + + try: + foo() + except OverflowDefect: + overflowDetected = true + + doAssert(not overflowDetected) + + +echo "ok" |