diff options
author | Araq <rumpf_a@web.de> | 2014-06-02 19:03:21 +0200 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2014-06-02 19:03:21 +0200 |
commit | 7303c3292f42be78555f7a7241f0c46634557d37 (patch) | |
tree | 575bfc9b6d1228cc61ca1b8b16835304ba1c1305 | |
parent | fbadbb399ec8a3d01195d4b50f7f73d1e9e5d31b (diff) | |
download | Nim-7303c3292f42be78555f7a7241f0c46634557d37.tar.gz |
fixed codegen for barriers
-rw-r--r-- | compiler/lowerings.nim | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/compiler/lowerings.nim b/compiler/lowerings.nim index 2fff4a6f1..af4daf785 100644 --- a/compiler/lowerings.nim +++ b/compiler/lowerings.nim @@ -211,8 +211,13 @@ proc createWrapperProc(f: PNode; threadParam, argsParam: PSym; varSection, call, barrier, prom: PNode; spawnKind: TSpawnResult): PSym = var body = newNodeI(nkStmtList, f.info) + var threadLocalBarrier: PSym if barrier != nil: - body.add callCodeGenProc("barrierEnter", barrier) + var varSection = newNodeI(nkVarSection, barrier.info) + threadLocalBarrier = addLocalVar(varSection, argsParam.owner, + barrier.typ, barrier) + body.add varSection + body.add callCodeGenProc("barrierEnter", threadLocalBarrier.newSymNode) var threadLocalProm: PSym if spawnKind == srByVar: threadLocalProm = addLocalVar(varSection, argsParam.owner, prom.typ, prom) @@ -244,7 +249,7 @@ proc createWrapperProc(f: PNode; threadParam, argsParam: PSym; else: body.add call if barrier != nil: - body.add callCodeGenProc("barrierLeave", barrier) + body.add callCodeGenProc("barrierLeave", threadLocalBarrier.newSymNode) var params = newNodeI(nkFormalParams, f.info) params.add emptyNode |