summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--compiler/parampatterns.nim7
-rw-r--r--tests/varres/twrong_parameter.nim12
2 files changed, 10 insertions, 9 deletions
diff --git a/compiler/parampatterns.nim b/compiler/parampatterns.nim
index 6c37c976a..9ca9f110d 100644
--- a/compiler/parampatterns.nim
+++ b/compiler/parampatterns.nim
@@ -180,14 +180,11 @@ type
 
 proc exprRoot*(n: PNode): PSym =
   var it = n
-  # the sem'check can generate a spurious 'nkHiddenDeref' for some
-  # cases. we skip it here:
-  if it.kind == nkHiddenDeref: it = it[0]
   while true:
     case it.kind
     of nkSym: return it.sym
     of nkDotExpr, nkBracketExpr, nkHiddenAddr,
-       nkObjUpConv, nkObjDownConv, nkCheckedFieldExpr:
+       nkObjUpConv, nkObjDownConv, nkCheckedFieldExpr, nkHiddenDeref:
       it = it[0]
     of nkHiddenStdConv, nkHiddenSubConv, nkConv:
       it = it[1]
@@ -202,7 +199,7 @@ proc exprRoot*(n: PNode): PSym =
       else:
         break
     else:
-      # nkHiddenDeref, nkDerefExpr: assume the 'var T' addresses
+      # nkDerefExpr: assume the 'var T' addresses
       # the heap and so the location is not on the stack.
       break
 
diff --git a/tests/varres/twrong_parameter.nim b/tests/varres/twrong_parameter.nim
index 34b0c7464..8a363dd19 100644
--- a/tests/varres/twrong_parameter.nim
+++ b/tests/varres/twrong_parameter.nim
@@ -1,12 +1,16 @@
 discard """
-  line: 6
-  errormsg: "'x' is not the first parameter; context: 'x'"
+  line: 10
+  errormsg: "'x' is not the first parameter; context: 'x.field[0]'"
 """
 
-proc forward(abc: int; x: var int): var int = result = x
+type
+  MyObject = object
+    field: array[2, int]
+
+proc forward(abc: int; x: var MyObject): var int = result = x.field[0]
 
 proc foo(): var int =
-  var y = 9
+  var y: MyObject
   result = forward(45, y)
 
 echo foo()
v>