summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--compiler/aliases.nim9
-rw-r--r--tests/ccgbugs/tobjconstr_bad_aliasing.nim16
2 files changed, 23 insertions, 2 deletions
diff --git a/compiler/aliases.nim b/compiler/aliases.nim
index ef56c5d6c..c5d488463 100644
--- a/compiler/aliases.nim
+++ b/compiler/aliases.nim
@@ -181,9 +181,16 @@ proc isPartOf*(a, b: PNode): TAnalysisResult =
       else: discard
     of nkObjConstr:
       result = arNo
-      for i in 1..<b.len:
+      for i in 1 ..< b.len:
         let res = isPartOf(a, b[i][1])
         if res != arNo:
           result = res
           if res == arYes: break
+    of nkCall:
+      result = arNo
+      for i in 1 ..< b.len:
+        let res = isPartOf(a, b[i])
+        if res != arNo:
+          result = res
+          if res == arYes: break
     else: discard
diff --git a/tests/ccgbugs/tobjconstr_bad_aliasing.nim b/tests/ccgbugs/tobjconstr_bad_aliasing.nim
index 9f6045364..2ac504903 100644
--- a/tests/ccgbugs/tobjconstr_bad_aliasing.nim
+++ b/tests/ccgbugs/tobjconstr_bad_aliasing.nim
@@ -1,5 +1,6 @@
 discard """
-  output: '''(10, (20, ))'''
+  output: '''(10, (20, ))
+42'''
 """
 
 import strutils, sequtils
@@ -23,3 +24,16 @@ proc dosomething(): seq[TThing] =
   result = @[TThing(data: 10, children: result)]
 
 echo($dosomething()[0])
+
+
+# bug #9844
+
+proc f(v: int): int = v
+
+type X = object
+  v: int
+
+var x = X(v: 42)
+
+x = X(v: f(x.v))
+echo x.v