summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2014-06-02 19:03:21 +0200
committerAraq <rumpf_a@web.de>2014-06-02 19:03:21 +0200
commit7303c3292f42be78555f7a7241f0c46634557d37 (patch)
tree575bfc9b6d1228cc61ca1b8b16835304ba1c1305
parentfbadbb399ec8a3d01195d4b50f7f73d1e9e5d31b (diff)
downloadNim-7303c3292f42be78555f7a7241f0c46634557d37.tar.gz
fixed codegen for barriers
-rw-r--r--compiler/lowerings.nim9
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