| /* |
| * 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 |
| // WITH_STDLIB |
| import kotlin.test.* |
| |
| class H(val x: Int) |
| |
| // Note: intentional infinite recursion for F(String). Don't try to execute the code. |
| class F(val s: String) { |
| var g = F("") |
| var h = H(0) |
| } |
| |
| class A { |
| var f = F("qzz") |
| } |
| |
| // ----- Agressive ----- |
| // PointsTo: |
| // P0.f -> P1.g |
| // RET.v@lue -> P1.g.h |
| // Escapes: |
| // ----- Passive ----- |
| // PointsTo: |
| // P0.f -> P1.g |
| // P1.g.h -> D0 |
| // RET.v@lue -> P1.g.h |
| // Escapes: D0 |
| fun foo(a: A, f: F): H { |
| a.f = f.g |
| a.f.h = H(42) |
| return f.g.h |
| } |
| |
| fun box(): String { |
| // When uncommented, execution of the following line would fall into infinite recursion |
| // assertEquals(0, foo(A(), F("zzz")).x) |
| return "OK" |
| } |