diff options
-rw-r--r-- | compiler/aliases.nim | 2 | ||||
-rw-r--r-- | tests/ccgbugs/tobjconstr_bad_aliasing.nim | 39 |
2 files changed, 39 insertions, 2 deletions
diff --git a/compiler/aliases.nim b/compiler/aliases.nim index c5d488463..42b073495 100644 --- a/compiler/aliases.nim +++ b/compiler/aliases.nim @@ -186,7 +186,7 @@ proc isPartOf*(a, b: PNode): TAnalysisResult = if res != arNo: result = res if res == arYes: break - of nkCall: + of nkCallKinds: result = arNo for i in 1 ..< b.len: let res = isPartOf(a, b[i]) diff --git a/tests/ccgbugs/tobjconstr_bad_aliasing.nim b/tests/ccgbugs/tobjconstr_bad_aliasing.nim index 2ac504903..550f9ab75 100644 --- a/tests/ccgbugs/tobjconstr_bad_aliasing.nim +++ b/tests/ccgbugs/tobjconstr_bad_aliasing.nim @@ -1,6 +1,9 @@ discard """ output: '''(10, (20, )) -42''' +42 +(x: 900.0, y: 900.0) +(x: 900.0, y: 900.0) +(x: 900.0, y: 900.0)''' """ import strutils, sequtils @@ -37,3 +40,37 @@ var x = X(v: 42) x = X(v: f(x.v)) echo x.v + + +# bug #11525 +type + Point[T] = object + x, y: T + +proc adjustPos[T](width, height: int, pos: Point[T]): Point[T] = + result = pos + + result = Point[T]( + x: pos.x - (width / 2), + y: pos.y - (height / 2) + ) + +proc adjustPos2[T](width, height: int, pos: Point[T]): Point[T] = + result = pos + + result = Point[T]( + x: result.x - (width / 2), + y: result.y - (height / 2) + ) + +proc adjustPos3(width, height: int, pos: Point): Point = + result = pos + + result = Point( + x: result.x - (width / 2), + y: result.y - (height / 2) + ) + +echo adjustPos(200, 200, Point[float](x: 1000, y: 1000)) +echo adjustPos2(200, 200, Point[float](x: 1000, y: 1000)) +echo adjustPos3(200, 200, Point[float](x: 1000, y: 1000)) |