diff options
-rw-r--r-- | compiler/aliases.nim | 9 | ||||
-rw-r--r-- | tests/ccgbugs/tobjconstr_bad_aliasing.nim | 16 |
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 |