From 65c5367dc1c29d01f00dbc2bcfb574af5f3334fa Mon Sep 17 00:00:00 2001 From: cooldome Date: Mon, 20 Apr 2020 14:57:36 +0100 Subject: [PATCH] Fixes #14014 (#14029) * add test * improve test * progress * fix #14014 * fix bug Co-authored-by: cooldome --- compiler/spawn.nim | 9 +++++++-- tests/parallel/tsysspawn.nim | 35 ++++++++++++++++++++++++++++++++++- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/compiler/spawn.nim b/compiler/spawn.nim index c60dd934c6..8b1f89e15a 100644 --- a/compiler/spawn.nim +++ b/compiler/spawn.nim @@ -201,8 +201,11 @@ proc setupArgsForConcurrency(g: ModuleGraph; n: PNode; objType: PType; # we pick n's type here, which hopefully is 'tyArray' and not # 'tyOpenArray': var argType = n[i].typ.skipTypes(abstractInst) - if i < formals.len and formals[i].typ.kind in {tyVar, tyLent}: - localError(g.config, n[i].info, "'spawn'ed function cannot have a 'var' parameter") + if i < formals.len: + if formals[i].typ.kind in {tyVar, tyLent}: + localError(g.config, n[i].info, "'spawn'ed function cannot have a 'var' parameter") + if formals[i].typ.kind in {tyTypeDesc, tyStatic}: + continue #elif containsTyRef(argType): # localError(n[i].info, "'spawn'ed function cannot refer to 'ref'/closure") @@ -226,6 +229,8 @@ proc setupArgsForParallelism(g: ModuleGraph; n: PNode; objType: PType; # for correctness: These are called 'threadLocal' here. for i in 1..