mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-29 09:24:36 +00:00
* test azure * use exit 1 * try again * use useSysAssert * disable i386 * use refc for tlsEmulation on i386 * use refc * disable i386 Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>
77 lines
2.0 KiB
Nim
77 lines
2.0 KiB
Nim
discard """
|
|
disabled: i386
|
|
matrix: "-d:nimTtlsemulationCase1 --threads --tlsEmulation:on; -d:nimTtlsemulationCase2 --threads --tlsEmulation:off; -d:nimTtlsemulationCase3 --threads"
|
|
targets: "c cpp"
|
|
"""
|
|
|
|
#[
|
|
tests for: `.cppNonPod`, `--tlsEmulation`
|
|
]#
|
|
|
|
import std/sugar
|
|
|
|
block:
|
|
# makes sure the logic in config/nim.cfg or testament doesn't interfere with `--tlsEmulation` so we test the right thing.
|
|
when defined(nimTtlsemulationCase1):
|
|
doAssert compileOption("tlsEmulation")
|
|
elif defined(nimTtlsemulationCase2):
|
|
doAssert not compileOption("tlsEmulation")
|
|
elif defined(nimTtlsemulationCase3):
|
|
when defined(osx):
|
|
doAssert not compileOption("tlsEmulation")
|
|
else:
|
|
doAssert false
|
|
|
|
block:
|
|
proc main1(): int =
|
|
var g0 {.threadvar.}: int
|
|
g0.inc
|
|
g0
|
|
let s = collect:
|
|
for i in 0..<3: main1()
|
|
doAssert s == @[1,2,3]
|
|
|
|
when defined(cpp): # bug #16752
|
|
when defined(windows) and defined(nimTtlsemulationCase2):
|
|
discard # xxx this failed with exitCode 1
|
|
else:
|
|
type Foo1 {.importcpp: "Foo1", header: "mtlsemulation.h".} = object
|
|
x: cint
|
|
type Foo2 {.cppNonPod, importcpp: "Foo2", header: "mtlsemulation.h".} = object
|
|
x: cint
|
|
|
|
var ctorCalls {.importcpp.}: cint
|
|
var dtorCalls {.importcpp.}: cint
|
|
type Foo3 {.cppNonPod, importcpp: "Foo3", header: "mtlsemulation.h".} = object
|
|
x: cint
|
|
|
|
proc sub(i: int) =
|
|
var g1 {.threadvar.}: Foo1
|
|
var g2 {.threadvar.}: Foo2
|
|
var g3 {.threadvar.}: Foo3
|
|
discard g1
|
|
discard g2
|
|
|
|
# echo (g3.x, ctorCalls, dtorCalls)
|
|
when compileOption("tlsEmulation"):
|
|
# xxx bug
|
|
discard
|
|
else:
|
|
doAssert g3.x.int == 10 + i
|
|
doAssert ctorCalls == 2
|
|
doAssert dtorCalls == 1
|
|
g3.x.inc
|
|
|
|
proc main() =
|
|
doAssert ctorCalls == 0
|
|
doAssert dtorCalls == 0
|
|
block:
|
|
var f3: Foo3
|
|
doAssert f3.x == 10
|
|
doAssert ctorCalls == 1
|
|
doAssert dtorCalls == 1
|
|
|
|
for i in 0..<3:
|
|
sub(i)
|
|
main()
|