* 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
(cherry picked from commit 436e1fa5b1)
This commit is contained in:
n5m
2020-10-19 20:25:43 +00:00
committed by narimiran
parent 893dab429e
commit 1d63995896
6 changed files with 35 additions and 9 deletions

View File

@@ -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

View File

@@ -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,
@@ -67,6 +67,9 @@ type
msg*: string
line*, col*: int
ValgrindSpec* = enum
disabled, enabled, leaking
TSpec* = object
action*: TTestAction
file*, cmd*: string
@@ -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
@@ -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

View File

@@ -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

View File

@@ -1,7 +1,7 @@
discard """
output: '''230000'''
cmd: '''nim c --gc:orc -d:useMalloc $file'''
valgrind: "true"
valgrind: "leaks"
"""
# bug #14402

View File

@@ -1,6 +1,6 @@
discard """
cmd: "nim c --gc:orc -d:useMalloc -d:nimStressOrc $file"
valgrind: "true"
valgrind: "leaks"
output: "done"
"""

View File

@@ -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)