| /* |
| * Copyright 2010-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license |
| * that can be found in the LICENSE file. |
| */ |
| // TODO: check mentioned debug output of escape analyser |
| |
| class A(val s: String) |
| class B { |
| var f: A = A("OK") |
| } |
| class C { |
| var g: B = B() |
| } |
| |
| // ----- Agressive ----- |
| // PointsTo: |
| // RET.v@lue -> D0 |
| // D0.f -> P0.g.f |
| // Escapes: |
| // ----- Passive ----- |
| // PointsTo: |
| // P0.g.f -> D2 |
| // RET.v@lue -> D0 |
| // D0.f -> P0.g.f |
| // D0.f -> D1 |
| // D1 -> D2 |
| // Escapes: D0 D1 |
| fun foo(c1: C, c2: C): B { |
| val b = B() |
| b.f = c1.g.f |
| return b |
| } |
| |
| fun box(): String = foo(C(), C()).f.s |