[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");
|
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")
|
@TestMetadata("kt37327.kt")
|
||||||
public void testKt37327() throws Exception {
|
public void testKt37327() throws Exception {
|
||||||
runTest("compiler/fir/analysis-tests/testData/resolve/smartcasts/kt37327.kt");
|
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");
|
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")
|
@TestMetadata("kt37327.kt")
|
||||||
public void testKt37327() throws Exception {
|
public void testKt37327() throws Exception {
|
||||||
runTest("compiler/fir/analysis-tests/testData/resolve/smartcasts/kt37327.kt");
|
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");
|
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")
|
@TestMetadata("kt37327.kt")
|
||||||
public void testKt37327() throws Exception {
|
public void testKt37327() throws Exception {
|
||||||
runTest("compiler/fir/analysis-tests/testData/resolve/smartcasts/kt37327.kt");
|
runTest("compiler/fir/analysis-tests/testData/resolve/smartcasts/kt37327.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user