[FIR] Add test for both KT-10240 and KT-19446
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
}
|
||||
)
|
||||
}
|
||||
Generated
+5
@@ -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");
|
||||
|
||||
+5
@@ -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");
|
||||
|
||||
+5
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user