summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2017-10-14 22:34:19 +0200
committerAraq <rumpf_a@web.de>2017-10-14 22:35:20 +0200
commita75f3b36619cf06aee324b80b908fbcdc58b43d8 (patch)
treeda3eddbf1cf895fbdc87f6c5900ae329cd1c33bb
parent9af94803404963ad7cb5969c8321ec0a526939d8 (diff)
downloadNim-a75f3b36619cf06aee324b80b908fbcdc58b43d8.tar.gz
fixes #4910
-rw-r--r--compiler/semexprs.nim11
-rw-r--r--tests/cpp/tget_subsystem.nim8
2 files changed, 15 insertions, 4 deletions
diff --git a/compiler/semexprs.nim b/compiler/semexprs.nim
index 2499c2ab6..180754168 100644
--- a/compiler/semexprs.nim
+++ b/compiler/semexprs.nim
@@ -1296,10 +1296,13 @@ proc takeImplicitAddr(c: PContext, n: PNode): PNode =
 proc asgnToResultVar(c: PContext, n, le, ri: PNode) {.inline.} =
   if le.kind == nkHiddenDeref:
     var x = le.sons[0]
-    if x.typ.kind == tyVar and x.kind == nkSym and x.sym.kind == skResult:
-      n.sons[0] = x # 'result[]' --> 'result'
-      n.sons[1] = takeImplicitAddr(c, ri)
-      x.typ.flags.incl tfVarIsPtr
+    if x.typ.kind == tyVar and x.kind == nkSym:
+      if x.sym.kind == skResult:
+        n.sons[0] = x # 'result[]' --> 'result'
+        n.sons[1] = takeImplicitAddr(c, ri)
+      if x.sym.kind != skParam:
+        # XXX This is hacky. See bug #4910.
+        x.typ.flags.incl tfVarIsPtr
       #echo x.info, " setting it for this type ", typeToString(x.typ), " ", n.info
 
 template resultTypeIsInferrable(typ: PType): untyped =
diff --git a/tests/cpp/tget_subsystem.nim b/tests/cpp/tget_subsystem.nim
index 461914739..81009dd39 100644
--- a/tests/cpp/tget_subsystem.nim
+++ b/tests/cpp/tget_subsystem.nim
@@ -21,3 +21,11 @@ proc getSubsystem*[T](): ptr T {.
 
 let input: ptr Input = getSubsystem[Input]()
 
+
+# bug #4910
+
+proc foo() =
+  var ts: array[10, int]
+  for t in mitems(ts):
+     t = 123
+