Merge pull request #8039 from yglukhov/proc-pragmas

Fixed stacktrace/linetrace proc pragmas when appended by macro pragma
This commit is contained in:
Andreas Rumpf 2018-06-16 01:59:06 +02:00 • committed by GitHub
commit ee16e62061
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 144 additions and 66 deletions

View file

@ -1,21 +1,84 @@
discard """
file: "toverflw.nim"
output: "the computation overflowed"
output: "ok"
cmd: "nim $target -d:release $options $file"
"""
# Tests nim's ability to detect overflows
{.push overflowChecks: on.}
var
a, b: int
a = high(int)
b = -2
a = high(int)
b = -2
overflowDetected = false
try:
writeLine(stdout, b - a)
except OverflowError:
writeLine(stdout, "the computation overflowed")
overflowDetected = true
{.pop.} # overflow check
#OUT the computation overflowed
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 OverflowError:
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 OverflowError:
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 OverflowError:
overflowDetected = true
doAssert(not overflowDetected)
echo "ok"