[FIR] Add test for both KT-10240 and KT-19446

This commit is contained in:
Mikhail Glukhikh
2020-10-26 14:09:36 +03:00
parent 382a0bd298
commit e9b51b42f9
5 changed files with 93 additions and 0 deletions
@@ -0,0 +1,36 @@
fun a(): Int {
fun b(): Int {
var c: Int? = null
if (c == null ||
0 < c // FE 1.0: smart cast impossible, see KT-10240
) c = 0
return c ?: 0
}
var c: Int = 0
c = 0
return c
}
fun myRun(f: () -> Unit) {
f()
}
fun println(arg: Int) {}
fun d() {
myRun {
var koko: String? = "Alpha"
while (koko != null) {
println(koko.length)
koko = null
}
}
myRun {
var koko: String? = "Omega"
while (koko != null) {
println(koko.length) // FE 1.0: smart cast impossible, see KT-19446
koko = null
}
}
}
@@ -0,0 +1,42 @@
FILE: kt10240.kt
public final fun a(): R|kotlin/Int| {
local final fun b(): R|kotlin/Int| {
lvar c: R|kotlin/Int?| = Null(null)
when () {
==(R|<local>/c|, Null(null)) || CMP(<, Int(0).R|kotlin/Int.compareTo|(R|<local>/c|)) -> {
R|<local>/c| = Int(0)
}
}
^b R|<local>/c| ?: Int(0)
}
lvar c: R|kotlin/Int| = Int(0)
R|<local>/c| = Int(0)
^a R|<local>/c|
}
public final fun myRun(f: R|() -> kotlin/Unit|): R|kotlin/Unit| {
R|<local>/f|.R|FakeOverride<kotlin/Function0.invoke: R|kotlin/Unit|>|()
}
public final fun println(arg: R|kotlin/Int|): R|kotlin/Unit| {
}
public final fun d(): R|kotlin/Unit| {
R|/myRun|(<L> = myRun@fun <anonymous>(): R|kotlin/Unit| {
lvar koko: R|kotlin/String?| = String(Alpha)
while(!=(R|<local>/koko|, Null(null))) {
R|/println|(R|<local>/koko|.R|kotlin/String.length|)
R|<local>/koko| = Null(null)
}
}
)
R|/myRun|(<L> = myRun@fun <anonymous>(): R|kotlin/Unit| {
lvar koko: R|kotlin/String?| = String(Omega)
while(!=(R|<local>/koko|, Null(null))) {
R|/println|(R|<local>/koko|.R|kotlin/String.length|)
R|<local>/koko| = Null(null)
}
}
)
}
@@ -2259,6 +2259,11 @@ public class FirDiagnosticsTestGenerated extends AbstractFirDiagnosticsTest {
runTest("compiler/fir/analysis-tests/testData/resolve/smartcasts/equalsAndIdentity.kt");
}
@TestMetadata("kt10240.kt")
public void testKt10240() throws Exception {
runTest("compiler/fir/analysis-tests/testData/resolve/smartcasts/kt10240.kt");
}
@TestMetadata("kt37327.kt")
public void testKt37327() throws Exception {
runTest("compiler/fir/analysis-tests/testData/resolve/smartcasts/kt37327.kt");
@@ -2259,6 +2259,11 @@ public class FirDiagnosticsWithLightTreeTestGenerated extends AbstractFirDiagnos
runTest("compiler/fir/analysis-tests/testData/resolve/smartcasts/equalsAndIdentity.kt");
}
@TestMetadata("kt10240.kt")
public void testKt10240() throws Exception {
runTest("compiler/fir/analysis-tests/testData/resolve/smartcasts/kt10240.kt");
}
@TestMetadata("kt37327.kt")
public void testKt37327() throws Exception {
runTest("compiler/fir/analysis-tests/testData/resolve/smartcasts/kt37327.kt");
@@ -2259,6 +2259,11 @@ public class LazyBodyIsNotTouchedTilContractsPhaseTestGenerated extends Abstract
runTest("compiler/fir/analysis-tests/testData/resolve/smartcasts/equalsAndIdentity.kt");
}
@TestMetadata("kt10240.kt")
public void testKt10240() throws Exception {
runTest("compiler/fir/analysis-tests/testData/resolve/smartcasts/kt10240.kt");
}
@TestMetadata("kt37327.kt")
public void testKt37327() throws Exception {
runTest("compiler/fir/analysis-tests/testData/resolve/smartcasts/kt37327.kt");