mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-28 08:54:53 +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>
80 lines
1.5 KiB
Nim
80 lines
1.5 KiB
Nim
discard """
|
|
disabled: i386
|
|
output: '''
|
|
10
|
|
1111
|
|
1222
|
|
3030303
|
|
3060606
|
|
6060606
|
|
6121212
|
|
3030903
|
|
3061206
|
|
3031503
|
|
3061806
|
|
5050505
|
|
5101010
|
|
'''
|
|
"""
|
|
|
|
import typetraits
|
|
|
|
var tls1 {.threadvar.}: int
|
|
var g0: int
|
|
var g1 {.global.}: int
|
|
|
|
proc customInc(x: var int, delta: int) =
|
|
x += delta
|
|
|
|
customInc(tls1, 10)
|
|
echo tls1
|
|
|
|
proc nonGenericProc: int =
|
|
var local: int
|
|
var nonGenericTls {.threadvar.}: int
|
|
var nonGenericGlobal {.global.}: int
|
|
var nonGenericMixedPragmas {.global, threadvar.}: int
|
|
|
|
customInc local, 1000
|
|
customInc nonGenericTls, 1
|
|
customInc nonGenericGlobal, 10
|
|
customInc nonGenericMixedPragmas, 100
|
|
|
|
return local + nonGenericTls + nonGenericGlobal + nonGenericMixedPragmas
|
|
|
|
proc genericProc(T: typedesc): int =
|
|
var local: int
|
|
var genericTls {.threadvar.}: int
|
|
var genericGlobal {.global.}: int
|
|
var genericMixedPragmas {.global, threadvar.}: int
|
|
|
|
customInc local, T.name.len * 1000000
|
|
customInc genericTls, T.name.len * 1
|
|
customInc genericGlobal, T.name.len * 100
|
|
customInc genericMixedPragmas, T.name.len * 10000
|
|
|
|
return local + genericTls + genericGlobal + genericMixedPragmas
|
|
|
|
echo nonGenericProc()
|
|
echo nonGenericProc()
|
|
|
|
echo genericProc(int)
|
|
echo genericProc(int)
|
|
|
|
echo genericProc(string)
|
|
echo genericProc(string)
|
|
|
|
proc echoInThread[T]() {.thread.} =
|
|
echo genericProc(T)
|
|
echo genericProc(T)
|
|
|
|
proc newEchoThread(T: typedesc) =
|
|
var t: Thread[void]
|
|
createThread(t, echoInThread[T])
|
|
joinThreads(t)
|
|
|
|
newEchoThread int
|
|
newEchoThread int
|
|
newEchoThread float
|
|
|