Skip to content

Commit

Permalink
fix #15631 (#15632)
Browse files Browse the repository at this point in the history
* trigger valgrind failure on memory leak

* remove non-malloc tests

* remove ORC test

is redundant because we already have an ARC test

* only run valgrind tests on 64-bit Linux

* disable freebsd and openbsd

* Remove tleak_refc

As to not test implementation details (or bug)

* Fix test failures by removing redundant test

Since this tests/shoulfail/tvalgrind.nim was specified here to fail this test
itself fails since it will be skipped on non-linux CI

* Remove test, reason detailed in the previous commit

* Remove redundant disables

* Revert removing disables

* Add and use valgrind: leaks

* Fix

Co-authored-by: Clyybber <darkmine956@gmail.com>
Co-authored-by: n5m
  • Loading branch information
n5m and Clyybber authored Oct 19, 2020
1 parent 833035b commit 436e1fa
Show file tree
Hide file tree
Showing 6 changed files with 35 additions and 9 deletions.
5 changes: 5 additions & 0 deletions doc/testament.rst
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,11 @@ Example "template" **to edit** and write a Testament unittest:
target: "c js" # Targets to run the test into (C, C++, JavaScript, etc).
disabled: "bsd" # Disable the test by condition, here BSD is disabled just as an example.
disabled: "win" # Can disable multiple OSes at once
disabled: "32bit" # ...or architectures
disabled: "i386"
disabled: "azure" # ...or pipeline runners
disabled: true # ...or can disable the test entirely
"""
assert true
Expand Down
14 changes: 9 additions & 5 deletions testament/specs.nim
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ type
reFilesDiffer, # expected and given filenames differ
reLinesDiffer, # expected and given line numbers differ
reOutputsDiffer,
reExitcodesDiffer,
reExitcodesDiffer, # exit codes of program or of valgrind differ
reTimeout,
reInvalidPeg,
reCodegenFailure,
Expand All @@ -67,6 +67,9 @@ type
msg*: string
line*, col*: int

ValgrindSpec* = enum
disabled, enabled, leaking

TSpec* = object
action*: TTestAction
file*, cmd*: string
Expand All @@ -92,7 +95,7 @@ type
# whether this test can be batchable via `NIM_TESTAMENT_BATCH`; only very
# few tests are not batchable; the ones that are not could be turned batchable
# by making the dependencies explicit
useValgrind*: bool
useValgrind*: ValgrindSpec
timeout*: float # in seconds, fractions possible,
# but don't rely on much precision
inlineErrors*: seq[InlineError] # line information to error message
Expand Down Expand Up @@ -306,14 +309,15 @@ proc parseSpec*(filename: string): TSpec =
result.unjoinable = not parseCfgBool(e.value)
of "valgrind":
when defined(linux) and sizeof(int) == 8:
result.useValgrind = parseCfgBool(e.value)
result.useValgrind = if e.value.normalize == "leaks": leaking
else: ValgrindSpec(parseCfgBool(e.value))
result.unjoinable = true
if result.useValgrind:
if result.useValgrind != disabled:
result.outputCheck = ocSubstr
else:
# Windows lacks valgrind. Silly OS.
# Valgrind only supports OSX <= 17.x
result.useValgrind = false
result.useValgrind = disabled
of "disabled":
case e.value.normalize
of "y", "yes", "true", "1", "on": result.err = reDisabled
Expand Down
7 changes: 5 additions & 2 deletions testament/testament.nim
Original file line number Diff line number Diff line change
Expand Up @@ -501,8 +501,11 @@ proc testSpecHelper(r: var TResults, test: var TTest, expected: TSpec,
args = concat(@[exeFile], args)
else:
exeCmd = exeFile.dup(normalizeExe)
if expected.useValgrind:
args = @["--error-exitcode=1"] & exeCmd & args
if expected.useValgrind != disabled:
var valgrindOptions = @["--error-exitcode=1"]
if expected.useValgrind != leaking:
valgrindOptions.add "--leak-check=yes"
args = valgrindOptions & exeCmd & args
exeCmd = "valgrind"
var (_, buf, exitCode) = execCmdEx2(exeCmd, args, input = expected.input)
# Treat all failure codes from nodejs as 1. Older versions of nodejs used
Expand Down
2 changes: 1 addition & 1 deletion tests/arc/tasyncorc.nim
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
discard """
output: '''230000'''
cmd: '''nim c --gc:orc -d:useMalloc $file'''
valgrind: "true"
valgrind: "leaks"
"""

# bug #14402
Expand Down
2 changes: 1 addition & 1 deletion tests/arc/thavlak_orc_stress.nim
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
discard """
cmd: "nim c --gc:orc -d:useMalloc -d:nimStressOrc $file"
valgrind: "true"
valgrind: "leaks"
output: "done"
"""

Expand Down
14 changes: 14 additions & 0 deletions tests/valgrind/tleak_arc.nim
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
discard """
valgrind: true
cmd: "nim $target --gc:arc -d:useMalloc $options $file"
exitcode: 1
outputsub: " definitely lost: 7 bytes in 2 blocks"
disabled: "freebsd"
disabled: "macosx"
disabled: "openbsd"
disabled: "windows"
disabled: "32bit"
"""

discard alloc(3)
discard alloc(4)

0 comments on commit 436e1fa

Please sign in to comment.