[FE 1.0] Always create return value for CallInstruction

This fixes missing `USED_AS_EXPRESSION` recordings
^KT-47527 Fixed
This commit is contained in:
Dmitriy Novozhilov
2021-06-30 16:40:55 +03:00
committed by TeamCityServer
parent b2372ff0b9
commit ae608ea67f
50 changed files with 496 additions and 204 deletions
@@ -16364,6 +16364,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
runTest("compiler/testData/codegen/box/functions/kt47449.kt");
}
@Test
@TestMetadata("kt47527.kt")
public void testKt47527() throws Exception {
runTest("compiler/testData/codegen/box/functions/kt47527.kt");
}
@Test
@TestMetadata("kt785.kt")
public void testKt785() throws Exception {
@@ -458,6 +458,12 @@ public class Fir2IrTextTestGenerated extends AbstractFir2IrTextTest {
runTest("compiler/testData/ir/irText/declarations/kt45308.kt");
}
@Test
@TestMetadata("kt47527.kt")
public void testKt47527() throws Exception {
runTest("compiler/testData/ir/irText/declarations/kt47527.kt");
}
@Test
@TestMetadata("localClassWithOverrides.kt")
public void testLocalClassWithOverrides() throws Exception {
@@ -17,7 +17,6 @@
package org.jetbrains.kotlin.cfg.pseudocode
import com.intellij.util.containers.Stack
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.cfg.*
import org.jetbrains.kotlin.cfg.pseudocode.instructions.BlockScope
import org.jetbrains.kotlin.cfg.pseudocode.instructions.Instruction
@@ -383,14 +382,13 @@ class ControlFlowInstructionsGenerator : ControlFlowBuilderAdapter() {
receiverValues: Map<PseudoValue, ReceiverValue>,
arguments: Map<PseudoValue, ValueParameterDescriptor>
): CallInstruction {
val returnType = resolvedCall.resultingDescriptor.returnType
val instruction = CallInstruction(
valueElement,
currentScope,
resolvedCall,
receiverValues,
arguments,
if (returnType != null && KotlinBuiltIns.isNothing(returnType)) null else valueFactory
valueFactory
)
add(instruction)
return instruction
@@ -52,7 +52,7 @@ L0:
mark({ if (flag) { s.add(it) } else { s.remove(it) } return true })
r({ if (flag) { s.add(it) } else { s.remove(it) } return true }) -> <v3>
mark(let { if (flag) { s.add(it) } else { s.remove(it) } return true })
call(let { if (flag) { s.add(it) } else { s.remove(it) } return true }, let|<v2>, <v3>)
call(let { if (flag) { s.add(it) } else { s.remove(it) } return true }, let|<v2>, <v3>) -> <v4>
L4 [before inlined declaration]:
inlined({ if (flag) { s.add(it) } else { s.remove(it) } return true }) NEXT:[<SINK>]
L3 [result of call]:
@@ -28,8 +28,8 @@ fun test(name: String?, flag: Boolean): Boolean {
<v1>: Boolean NEW: magic[FAKE_INITIALIZER](flag: Boolean) -> <v1>
name <v2>: String NEW: r(name) -> <v2>
{ if (flag) { s.add(it) } else { s.remove(it) } return true } <v3>: {<: (String) -> Nothing} NEW: r({ if (flag) { s.add(it) } else { s.remove(it) } return true }) -> <v3>
let { if (flag) { s.add(it) } else { s.remove(it) } return true } !<v4>: *
name?.let { if (flag) { s.add(it) } else { s.remove(it) } return true } !<v4>: * COPY
let { if (flag) { s.add(it) } else { s.remove(it) } return true } <v4>: * NEW: call(let { if (flag) { s.add(it) } else { s.remove(it) } return true }, let|<v2>, <v3>) -> <v4>
name?.let { if (flag) { s.add(it) } else { s.remove(it) } return true } <v4>: * COPY
false <v5>: Boolean NEW: r(false) -> <v5>
return false !<v6>: *
{ name?.let { if (flag) { s.add(it) } else { s.remove(it) } return true } return false } !<v6>: * COPY
@@ -55,9 +55,9 @@ L0:
L4 [after local declaration]:
r({ if (flag) { s.add(it) } else { s.remove(it) } return true }) -> <v3> PREV:[jmp?(L4)]
mark(let { if (flag) { s.add(it) } else { s.remove(it) } return true })
call(let { if (flag) { s.add(it) } else { s.remove(it) } return true }, let|<v2>, <v3>)
call(let { if (flag) { s.add(it) } else { s.remove(it) } return true }, let|<v2>, <v3>) -> <v4>
L3 [result of call]:
jmp?(L2) NEXT:[mark({ name?.hashCode() }), r(false) -> <v5>] PREV:[jf(L3), call(let { if (flag) { s.add(it) } else { s.remove(it) } return true }, let|<v2>, <v3>)]
jmp?(L2) NEXT:[mark({ name?.hashCode() }), r(false) -> <v5>] PREV:[jf(L3), call(let { if (flag) { s.add(it) } else { s.remove(it) } return true }, let|<v2>, <v3>) -> <v4>]
r(false) -> <v5>
6 mark({ name?.hashCode() })
mark(name?.hashCode())
@@ -28,8 +28,8 @@ fun test(name: String?, flag: Boolean): Boolean {
<v1>: Boolean NEW: magic[FAKE_INITIALIZER](flag: Boolean) -> <v1>
name <v2>: String NEW: r(name) -> <v2>
{ if (flag) { s.add(it) } else { s.remove(it) } return true } <v3>: {<: (String) -> Nothing} NEW: r({ if (flag) { s.add(it) } else { s.remove(it) } return true }) -> <v3>
let { if (flag) { s.add(it) } else { s.remove(it) } return true } !<v4>: *
name?.let { if (flag) { s.add(it) } else { s.remove(it) } return true } !<v4>: * COPY
let { if (flag) { s.add(it) } else { s.remove(it) } return true } <v4>: * NEW: call(let { if (flag) { s.add(it) } else { s.remove(it) } return true }, let|<v2>, <v3>) -> <v4>
name?.let { if (flag) { s.add(it) } else { s.remove(it) } return true } <v4>: * COPY
false <v5>: Boolean NEW: r(false) -> <v5>
return false !<v6>: *
{ name?.let { if (flag) { s.add(it) } else { s.remove(it) } return true } return false } !<v6>: * COPY
@@ -103,13 +103,13 @@ L2 [after local declaration]:
mark({ return })
r({ return }) -> <v1>
mark(let { return })
call(let { return }, let|<v0>, <v1>)
call(let { return }, let|<v0>, <v1>) -> <v2>
L6 [before inlined declaration]:
inlined({ return }) NEXT:[<SINK>]
L5 [result of call]:
L7 [after inlined declaration]:
mark(f(null?.let { return })) PREV:[jf(L5)]
call(f(null?.let { return }), f|!<v2>) -> <v3>
call(f(null?.let { return }), f|<v2>) -> <v3>
mark(doSomething())
call(doSomething(), doSomething) -> <v4>
L1:
@@ -163,28 +163,28 @@ L0:
magic[FAKE_INITIALIZER](x: Any?) -> <v0>
w(x|<v0>)
mark(x?.let { return true })
jf(L2) NEXT:[mark(x?.let { return true } ?: false), r(x) -> <v1>]
jf(L2) NEXT:[mark(x?.let { return true } ?: false), r(x) -> <v1>]
r(x) -> <v1>
mark({ return true })
r({ return true }) -> <v2>
mark(let { return true })
call(let { return true }, let|<v1>, <v2>)
call(let { return true }, let|<v1>, <v2>) -> <v3>
L3 [before inlined declaration]:
inlined({ return true }) NEXT:[<SINK>]
inlined({ return true }) NEXT:[<SINK>]
L2 [result of call]:
L4 [after inlined declaration]:
mark(x?.let { return true } ?: false) PREV:[jf(L2)]
jt(L7|!<v3>) NEXT:[r(false) -> <v4>, merge(x?.let { return true } ?: false|!<v3>, <v4>) -> <v5>]
mark(x?.let { return true } ?: false) PREV:[jf(L2)]
jt(L7|<v3>) NEXT:[r(false) -> <v4>, merge(x?.let { return true } ?: false|<v3>, <v4>) -> <v5>]
r(false) -> <v4>
L7 [after elvis operator]:
merge(x?.let { return true } ?: false|!<v3>, <v4>) -> <v5> PREV:[jt(L7|!<v3>), r(false) -> <v4>]
merge(x?.let { return true } ?: false|<v3>, <v4>) -> <v5> PREV:[jt(L7|<v3>), r(false) -> <v4>]
ret(*|<v5>) L1
L1:
<END> NEXT:[<SINK>] PREV:[ret(*|<v0>) L1, ret(*|<v5>) L1]
<END> NEXT:[<SINK>] PREV:[ret(*|<v0>) L1, ret(*|<v5>) L1]
error:
<ERROR> PREV:[]
<ERROR> PREV:[]
sink:
<SINK> PREV:[<ERROR>, <END>, inlined({ return true })]
<SINK> PREV:[<ERROR>, <END>, inlined({ return true })]
=====================
== inlined anonymous_2 ==
{
+6 -6
View File
@@ -45,9 +45,9 @@ fun test2() {
---------------------
null <v0>: Nothing NEW: r(null) -> <v0>
{ return } <v1>: {<: (Nothing) -> Nothing} NEW: r({ return }) -> <v1>
let { return } !<v2>: *
null?.let { return } !<v2>: * COPY
f(null?.let { return }) <v3>: * NEW: call(f(null?.let { return }), f|!<v2>) -> <v3>
let { return } <v2>: * NEW: call(let { return }, let|<v0>, <v1>) -> <v2>
null?.let { return } <v2>: * COPY
f(null?.let { return }) <v3>: * NEW: call(f(null?.let { return }), f|<v2>) -> <v3>
doSomething() <v4>: * NEW: call(doSomething(), doSomething) -> <v4>
{ fun f(x: Any?) = x f(null?.let { return }) // false unreachable here doSomething() } <v4>: * COPY
=====================
@@ -72,10 +72,10 @@ fun test3(x: Any?): Boolean =
<v0>: * NEW: magic[FAKE_INITIALIZER](x: Any?) -> <v0>
x <v1>: {<: Any} NEW: r(x) -> <v1>
{ return true } <v2>: {<: (Any) -> Nothing} NEW: r({ return true }) -> <v2>
let { return true } !<v3>: *
x?.let { return true } !<v3>: * COPY
let { return true } <v3>: Boolean NEW: call(let { return true }, let|<v1>, <v2>) -> <v3>
x?.let { return true } <v3>: Boolean COPY
false <v4>: Boolean NEW: r(false) -> <v4>
x?.let { return true } ?: false <v5>: Boolean NEW: merge(x?.let { return true } ?: false|!<v3>, <v4>) -> <v5>
x?.let { return true } ?: false <v5>: Boolean NEW: merge(x?.let { return true } ?: false|<v3>, <v4>) -> <v5>
=====================
== inlined anonymous_2 ==
{
@@ -106,10 +106,10 @@ L2 [after local declaration]:
L6 [after local declaration]:
r({ return }) -> <v1> PREV:[jmp?(L6)]
mark(let { return })
call(let { return }, let|<v0>, <v1>)
call(let { return }, let|<v0>, <v1>) -> <v2>
L5 [result of call]:
mark(f(null?.let { return })) PREV:[jf(L5), call(let { return }, let|<v0>, <v1>)]
call(f(null?.let { return }), f|!<v2>) -> <v3>
mark(f(null?.let { return })) PREV:[jf(L5), call(let { return }, let|<v0>, <v1>) -> <v2>]
call(f(null?.let { return }), f|<v2>) -> <v3>
mark(doSomething())
call(doSomething(), doSomething) -> <v4>
L1:
@@ -163,28 +163,28 @@ L0:
magic[FAKE_INITIALIZER](x: Any?) -> <v0>
w(x|<v0>)
mark(x?.let { return true })
jf(L2) NEXT:[mark(x?.let { return true } ?: false), r(x) -> <v1>]
jf(L2) NEXT:[mark(x?.let { return true } ?: false), r(x) -> <v1>]
r(x) -> <v1>
mark({ return true })
jmp?(L3) NEXT:[r({ return true }) -> <v2>, d({ return true })]
d({ return true }) NEXT:[<SINK>]
jmp?(L3) NEXT:[r({ return true }) -> <v2>, d({ return true })]
d({ return true }) NEXT:[<SINK>]
L3 [after local declaration]:
r({ return true }) -> <v2> PREV:[jmp?(L3)]
r({ return true }) -> <v2> PREV:[jmp?(L3)]
mark(let { return true })
call(let { return true }, let|<v1>, <v2>)
call(let { return true }, let|<v1>, <v2>) -> <v3>
L2 [result of call]:
mark(x?.let { return true } ?: false) PREV:[jf(L2), call(let { return true }, let|<v1>, <v2>)]
jt(L6|!<v3>) NEXT:[r(false) -> <v4>, merge(x?.let { return true } ?: false|!<v3>, <v4>) -> <v5>]
mark(x?.let { return true } ?: false) PREV:[jf(L2), call(let { return true }, let|<v1>, <v2>) -> <v3>]
jt(L6|<v3>) NEXT:[r(false) -> <v4>, merge(x?.let { return true } ?: false|<v3>, <v4>) -> <v5>]
r(false) -> <v4>
L6 [after elvis operator]:
merge(x?.let { return true } ?: false|!<v3>, <v4>) -> <v5> PREV:[jt(L6|!<v3>), r(false) -> <v4>]
merge(x?.let { return true } ?: false|<v3>, <v4>) -> <v5> PREV:[jt(L6|<v3>), r(false) -> <v4>]
ret(*|<v5>) L1
L1:
<END> NEXT:[<SINK>] PREV:[ret(*|<v0>) L1, ret(*|<v5>) L1]
<END> NEXT:[<SINK>] PREV:[ret(*|<v0>) L1, ret(*|<v5>) L1]
error:
<ERROR> PREV:[]
<ERROR> PREV:[]
sink:
<SINK> PREV:[<ERROR>, <END>, d({ return true })]
<SINK> PREV:[<ERROR>, <END>, d({ return true })]
=====================
== anonymous_2 ==
{
@@ -45,9 +45,9 @@ fun test2() {
---------------------
null <v0>: Nothing NEW: r(null) -> <v0>
{ return } <v1>: {<: (Nothing) -> Nothing} NEW: r({ return }) -> <v1>
let { return } !<v2>: *
null?.let { return } !<v2>: * COPY
f(null?.let { return }) <v3>: * NEW: call(f(null?.let { return }), f|!<v2>) -> <v3>
let { return } <v2>: * NEW: call(let { return }, let|<v0>, <v1>) -> <v2>
null?.let { return } <v2>: * COPY
f(null?.let { return }) <v3>: * NEW: call(f(null?.let { return }), f|<v2>) -> <v3>
doSomething() <v4>: * NEW: call(doSomething(), doSomething) -> <v4>
{ fun f(x: Any?) = x f(null?.let { return }) // false unreachable here doSomething() } <v4>: * COPY
=====================
@@ -72,10 +72,10 @@ fun test3(x: Any?): Boolean =
<v0>: * NEW: magic[FAKE_INITIALIZER](x: Any?) -> <v0>
x <v1>: {<: Any} NEW: r(x) -> <v1>
{ return true } <v2>: {<: (Any) -> Nothing} NEW: r({ return true }) -> <v2>
let { return true } !<v3>: *
x?.let { return true } !<v3>: * COPY
let { return true } <v3>: Boolean NEW: call(let { return true }, let|<v1>, <v2>) -> <v3>
x?.let { return true } <v3>: Boolean COPY
false <v4>: Boolean NEW: r(false) -> <v4>
x?.let { return true } ?: false <v5>: Boolean NEW: merge(x?.let { return true } ?: false|!<v3>, <v4>) -> <v5>
x?.let { return true } ?: false <v5>: Boolean NEW: merge(x?.let { return true } ?: false|<v3>, <v4>) -> <v5>
=====================
== anonymous_2 ==
{
+7 -7
View File
@@ -52,14 +52,14 @@ L0:
L3 [after local declaration]:
r({ throw Exception() }) -> <v1> PREV:[jmp?(L3)]
mark(let { throw Exception() })
call(let { throw Exception() }, let|<v0>, <v1>)
call(let { throw Exception() }, let|<v0>, <v1>) -> <v2>
L2 [result of call]:
mark(fn()?.let { throw Exception() } ?: "unreachable?") PREV:[jf(L2), call(let { throw Exception() }, let|<v0>, <v1>)]
jt(L6|!<v2>) NEXT:[mark("unreachable?"), merge(fn()?.let { throw Exception() } ?: "unreachable?"|!<v2>, <v3>) -> <v4>]
mark(fn()?.let { throw Exception() } ?: "unreachable?") PREV:[jf(L2), call(let { throw Exception() }, let|<v0>, <v1>) -> <v2>]
jt(L6|<v2>) NEXT:[mark("unreachable?"), merge(fn()?.let { throw Exception() } ?: "unreachable?"|<v2>, <v3>) -> <v4>]
mark("unreachable?")
r("unreachable?") -> <v3>
L6 [after elvis operator]:
merge(fn()?.let { throw Exception() } ?: "unreachable?"|!<v2>, <v3>) -> <v4> PREV:[jt(L6|!<v2>), r("unreachable?") -> <v3>]
merge(fn()?.let { throw Exception() } ?: "unreachable?"|<v2>, <v3>) -> <v4> PREV:[jt(L6|<v2>), r("unreachable?") -> <v3>]
w(x|<v4>)
r(x) -> <v5>
ret(*|<v5>) L1
@@ -119,16 +119,16 @@ L2 [after elvis operator]:
L4 [after local declaration]:
r({ throw Exception() }) -> <v5> PREV:[jmp?(L4)]
mark(let { throw Exception() })
call(let { throw Exception() }, let|<v4>, <v5>)
call(let { throw Exception() }, let|<v4>, <v5>) -> <v6>
jmp(error) NEXT:[<ERROR>]
L3 [result of call]:
jmp(error) NEXT:[<ERROR>] PREV:[jf(L3)]
- mark(x?.let { throw Exception() } ?: "unreachable") PREV:[]
- jt(L7|!<v6>) NEXT:[mark("unreachable"), merge(x?.let { throw Exception() } ?: "unreachable"|!<v6>, <v7>) -> <v8>] PREV:[]
- jt(L7|<v6>) NEXT:[mark("unreachable"), merge(x?.let { throw Exception() } ?: "unreachable"|<v6>, <v7>) -> <v8>] PREV:[]
- mark("unreachable") PREV:[]
- r("unreachable") -> <v7> PREV:[]
L7 [after elvis operator]:
- merge(x?.let { throw Exception() } ?: "unreachable"|!<v6>, <v7>) -> <v8> PREV:[]
- merge(x?.let { throw Exception() } ?: "unreachable"|<v6>, <v7>) -> <v8> PREV:[]
- w(y|<v8>) PREV:[]
- r(y) -> <v9> PREV:[]
- ret(*|<v9>) L1 PREV:[]
+6 -6
View File
@@ -20,10 +20,10 @@ fun foo(): String {
---------------------
fn() <v0>: String NEW: call(fn(), fn) -> <v0>
{ throw Exception() } <v1>: {<: (String) -> Nothing} NEW: r({ throw Exception() }) -> <v1>
let { throw Exception() } !<v2>: *
fn()?.let { throw Exception() } !<v2>: * COPY
let { throw Exception() } <v2>: AND{Boolean, String} NEW: call(let { throw Exception() }, let|<v0>, <v1>) -> <v2>
fn()?.let { throw Exception() } <v2>: AND{Boolean, String} COPY
"unreachable?" <v3>: String NEW: r("unreachable?") -> <v3>
fn()?.let { throw Exception() } ?: "unreachable?" <v4>: String NEW: merge(fn()?.let { throw Exception() } ?: "unreachable?"|!<v2>, <v3>) -> <v4>
fn()?.let { throw Exception() } ?: "unreachable?" <v4>: String NEW: merge(fn()?.let { throw Exception() } ?: "unreachable?"|<v2>, <v3>) -> <v4>
x <v5>: String NEW: r(x) -> <v5>
return x !<v6>: *
{ val x = fn()?.let { throw Exception() } ?: "unreachable?" return x } !<v6>: * COPY
@@ -48,10 +48,10 @@ return ""
fn() ?: return "" <v3>: String NEW: merge(fn() ?: return ""|<v0>, !<v2>) -> <v3>
x <v4>: String NEW: r(x) -> <v4>
{ throw Exception() } <v5>: {<: (String) -> Nothing} NEW: r({ throw Exception() }) -> <v5>
let { throw Exception() } !<v6>: *
x?.let { throw Exception() } !<v6>: * COPY
let { throw Exception() } <v6>: AND{Boolean, String} NEW: call(let { throw Exception() }, let|<v4>, <v5>) -> <v6>
x?.let { throw Exception() } <v6>: AND{Boolean, String} COPY
"unreachable" <v7>: String NEW: r("unreachable") -> <v7>
x?.let { throw Exception() } ?: "unreachable" <v8>: String NEW: merge(x?.let { throw Exception() } ?: "unreachable"|!<v6>, <v7>) -> <v8>
x?.let { throw Exception() } ?: "unreachable" <v8>: String NEW: merge(x?.let { throw Exception() } ?: "unreachable"|<v6>, <v7>) -> <v8>
y <v9>: String NEW: r(y) -> <v9>
return y !<v10>: *
{ val x = fn() ?: return "" val y = x?.let { throw Exception() } ?: "unreachable" return y } !<v10>: * COPY
+3 -3
View File
@@ -45,14 +45,14 @@ L0:
- call(doSomething(), doSomething|<v1>) -> <v2> PREV:[]
- mark(bar().doSomething()) PREV:[]
- mark(bar()) PREV:[]
- call(bar(), bar) PREV:[]
- call(bar(), bar) -> <v3> PREV:[]
- jmp(error) NEXT:[<ERROR>] PREV:[]
- mark(doSomething()) PREV:[]
- call(doSomething(), doSomething|!<v3>) -> <v4> PREV:[]
- call(doSomething(), doSomething|<v3>) -> <v4> PREV:[]
L1:
1 <END> NEXT:[<SINK>] PREV:[]
error:
<ERROR> PREV:[jmp(error)]
sink:
<SINK> PREV:[<ERROR>, <END>]
=====================
=====================
+8 -8
View File
@@ -13,12 +13,12 @@ fun foo() {
bar().doSomething()
}
---------------------
null <v0>: * NEW: r(null) -> <v0>
null!! <v1>: * NEW: magic[NOT_NULL_ASSERTION](null!!|<v0>) -> <v1>
doSomething() <v2>: * NEW: call(doSomething(), doSomething|<v1>) -> <v2>
null!!.doSomething() <v2>: * COPY
bar() !<v3>: *
doSomething() <v4>: * NEW: call(doSomething(), doSomething|!<v3>) -> <v4>
bar().doSomething() <v4>: * COPY
{ null!!.doSomething() bar().doSomething() } <v4>: * COPY
null <v0>: * NEW: r(null) -> <v0>
null!! <v1>: * NEW: magic[NOT_NULL_ASSERTION](null!!|<v0>) -> <v1>
doSomething() <v2>: * NEW: call(doSomething(), doSomething|<v1>) -> <v2>
null!!.doSomething() <v2>: * COPY
bar() <v3>: * NEW: call(bar(), bar) -> <v3>
doSomething() <v4>: * NEW: call(doSomething(), doSomething|<v3>) -> <v4>
bar().doSomething() <v4>: * COPY
{ null!!.doSomething() bar().doSomething() } <v4>: * COPY
=====================
+14
View File
@@ -0,0 +1,14 @@
// ISSUE: KT-47527
// WITH_STDLIB
fun test_1(value: Any?): String? = value?.let { return "O" }
fun test_2(value: Any?): String? = run {
value?.let { return "K" }
}
fun box(): String {
var result = ""
result += test_1(1) ?: return "fail 1"
result += test_2(1) ?: return "fail 2"
return result
}
@@ -0,0 +1,47 @@
fun test_1(value: Any?): String? {
return { // BLOCK
val tmp0_safe_receiver: Any? = value
when {
EQEQ(arg0 = tmp0_safe_receiver, arg1 = null) -> null
else -> tmp0_safe_receiver.let<Any, Nothing>(block = local fun <anonymous>(it: Any): Nothing {
return "O"
}
)
}
}
}
fun test_2(value: Any?): String? {
return run<Nothing?>(block = local fun <anonymous>(): Nothing? {
return { // BLOCK
val tmp1_safe_receiver: Any? = value
when {
EQEQ(arg0 = tmp1_safe_receiver, arg1 = null) -> null
else -> tmp1_safe_receiver.let<Any, Nothing>(block = local fun <anonymous>(it: Any): Nothing {
return "K"
}
)
}
}
}
)
}
fun box(): String {
var result: String = ""
result = result.plus(other = { // BLOCK
val <elvis>: String? = test_1(value = 1)
when {
EQEQ(arg0 = <elvis>, arg1 = null) -> return "fail 1"
else -> <elvis>
}
})
result = result.plus(other = { // BLOCK
val <elvis>: String? = test_2(value = 1)
when {
EQEQ(arg0 = <elvis>, arg1 = null) -> return "fail 2"
else -> <elvis>
}
})
return result
}
@@ -0,0 +1,97 @@
FILE fqName:<root> fileName:/kt47527.kt
FUN name:test_1 visibility:public modality:FINAL <> (value:kotlin.Any?) returnType:kotlin.String?
VALUE_PARAMETER name:value index:0 type:kotlin.Any?
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun test_1 (value: kotlin.Any?): kotlin.String? declared in <root>'
BLOCK type=kotlin.Nothing? origin=SAFE_CALL
VAR IR_TEMPORARY_VARIABLE name:tmp_0 type:kotlin.Any? [val]
GET_VAR 'value: kotlin.Any? declared in <root>.test_1' type=kotlin.Any? origin=null
WHEN type=kotlin.Nothing? origin=null
BRANCH
if: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'val tmp_0: kotlin.Any? [val] declared in <root>.test_1' type=kotlin.Any? origin=null
arg1: CONST Null type=kotlin.Nothing? value=null
then: CONST Null type=kotlin.Nothing? value=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CALL 'public final fun let <T, R> (block: kotlin.Function1<T of kotlin.StandardKt.let, R of kotlin.StandardKt.let>): R of kotlin.StandardKt.let [inline] declared in kotlin.StandardKt' type=kotlin.Nothing origin=null
<T>: kotlin.Any
<R>: kotlin.Nothing
$receiver: GET_VAR 'val tmp_0: kotlin.Any? [val] declared in <root>.test_1' type=kotlin.Any? origin=null
block: FUN_EXPR type=kotlin.Function1<kotlin.Any, kotlin.Nothing> origin=LAMBDA
FUN LOCAL_FUNCTION_FOR_LAMBDA name:<anonymous> visibility:local modality:FINAL <> (it:kotlin.Any) returnType:kotlin.Nothing
VALUE_PARAMETER name:it index:0 type:kotlin.Any
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun test_1 (value: kotlin.Any?): kotlin.String? declared in <root>'
CONST String type=kotlin.String value="O"
FUN name:test_2 visibility:public modality:FINAL <> (value:kotlin.Any?) returnType:kotlin.String?
VALUE_PARAMETER name:value index:0 type:kotlin.Any?
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun test_2 (value: kotlin.Any?): kotlin.String? declared in <root>'
CALL 'public final fun run <R> (block: kotlin.Function0<R of kotlin.StandardKt.run>): R of kotlin.StandardKt.run [inline] declared in kotlin.StandardKt' type=kotlin.Nothing? origin=null
<R>: kotlin.Nothing?
block: FUN_EXPR type=kotlin.Function0<kotlin.Nothing?> origin=LAMBDA
FUN LOCAL_FUNCTION_FOR_LAMBDA name:<anonymous> visibility:local modality:FINAL <> () returnType:kotlin.Nothing?
BLOCK_BODY
RETURN type=kotlin.Nothing from='local final fun <anonymous> (): kotlin.Nothing? declared in <root>.test_2'
BLOCK type=kotlin.Nothing? origin=SAFE_CALL
VAR IR_TEMPORARY_VARIABLE name:tmp_1 type:kotlin.Any? [val]
GET_VAR 'value: kotlin.Any? declared in <root>.test_2' type=kotlin.Any? origin=null
WHEN type=kotlin.Nothing? origin=null
BRANCH
if: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'val tmp_1: kotlin.Any? [val] declared in <root>.test_2.<anonymous>' type=kotlin.Any? origin=null
arg1: CONST Null type=kotlin.Nothing? value=null
then: CONST Null type=kotlin.Nothing? value=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CALL 'public final fun let <T, R> (block: kotlin.Function1<T of kotlin.StandardKt.let, R of kotlin.StandardKt.let>): R of kotlin.StandardKt.let [inline] declared in kotlin.StandardKt' type=kotlin.Nothing origin=null
<T>: kotlin.Any
<R>: kotlin.Nothing
$receiver: GET_VAR 'val tmp_1: kotlin.Any? [val] declared in <root>.test_2.<anonymous>' type=kotlin.Any? origin=null
block: FUN_EXPR type=kotlin.Function1<kotlin.Any, kotlin.Nothing> origin=LAMBDA
FUN LOCAL_FUNCTION_FOR_LAMBDA name:<anonymous> visibility:local modality:FINAL <> (it:kotlin.Any) returnType:kotlin.Nothing
VALUE_PARAMETER name:it index:0 type:kotlin.Any
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun test_2 (value: kotlin.Any?): kotlin.String? declared in <root>'
CONST String type=kotlin.String value="K"
FUN name:box visibility:public modality:FINAL <> () returnType:kotlin.String
BLOCK_BODY
VAR name:result type:kotlin.String [var]
CONST String type=kotlin.String value=""
SET_VAR 'var result: kotlin.String [var] declared in <root>.box' type=kotlin.Unit origin=EQ
CALL 'public final fun plus (other: kotlin.Any?): kotlin.String [operator] declared in kotlin.String' type=kotlin.String origin=null
$this: GET_VAR 'var result: kotlin.String [var] declared in <root>.box' type=kotlin.String origin=null
other: BLOCK type=kotlin.String origin=ELVIS
VAR IR_TEMPORARY_VARIABLE name:tmp_2 type:kotlin.String? [val]
CALL 'public final fun test_1 (value: kotlin.Any?): kotlin.String? declared in <root>' type=kotlin.String? origin=null
value: CONST Int type=kotlin.Int value=1
WHEN type=kotlin.String origin=ELVIS
BRANCH
if: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'val tmp_2: kotlin.String? [val] declared in <root>.box' type=kotlin.String? origin=null
arg1: CONST Null type=kotlin.Nothing? value=null
then: RETURN type=kotlin.Nothing from='public final fun box (): kotlin.String declared in <root>'
CONST String type=kotlin.String value="fail 1"
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: GET_VAR 'val tmp_2: kotlin.String? [val] declared in <root>.box' type=kotlin.String? origin=null
SET_VAR 'var result: kotlin.String [var] declared in <root>.box' type=kotlin.Unit origin=EQ
CALL 'public final fun plus (other: kotlin.Any?): kotlin.String [operator] declared in kotlin.String' type=kotlin.String origin=null
$this: GET_VAR 'var result: kotlin.String [var] declared in <root>.box' type=kotlin.String origin=null
other: BLOCK type=kotlin.String origin=ELVIS
VAR IR_TEMPORARY_VARIABLE name:tmp_3 type:kotlin.String? [val]
CALL 'public final fun test_2 (value: kotlin.Any?): kotlin.String? declared in <root>' type=kotlin.String? origin=null
value: CONST Int type=kotlin.Int value=1
WHEN type=kotlin.String origin=ELVIS
BRANCH
if: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'val tmp_3: kotlin.String? [val] declared in <root>.box' type=kotlin.String? origin=null
arg1: CONST Null type=kotlin.Nothing? value=null
then: RETURN type=kotlin.Nothing from='public final fun box (): kotlin.String declared in <root>'
CONST String type=kotlin.String value="fail 2"
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: GET_VAR 'val tmp_3: kotlin.String? [val] declared in <root>.box' type=kotlin.String? origin=null
RETURN type=kotlin.Nothing from='public final fun box (): kotlin.String declared in <root>'
GET_VAR 'var result: kotlin.String [var] declared in <root>.box' type=kotlin.String origin=null
+14
View File
@@ -0,0 +1,14 @@
// ISSUE: KT-47527
// WITH_STDLIB
fun test_1(value: Any?): String? = value?.let { return "O" }
fun test_2(value: Any?): String? = run {
value?.let { return "K" }
}
fun box(): String {
var result = ""
result += test_1(1) ?: return "fail 1"
result += test_2(1) ?: return "fail 2"
return result
}
+48
View File
@@ -0,0 +1,48 @@
fun test_1(value: Any?): String? {
return { // BLOCK
val tmp0_safe_receiver: Any? = value
when {
EQEQ(arg0 = tmp0_safe_receiver, arg1 = null) -> null
else -> tmp0_safe_receiver.let<Any, Nothing>(block = local fun <anonymous>(it: Any): Nothing {
return "O"
}
)
}
}
}
fun test_2(value: Any?): String? {
return run<Nothing?>(block = local fun <anonymous>(): Nothing? {
return { // BLOCK
val tmp0_safe_receiver: Any? = value
when {
EQEQ(arg0 = tmp0_safe_receiver, arg1 = null) -> null
else -> tmp0_safe_receiver.let<Any, Nothing>(block = local fun <anonymous>(it: Any): Nothing {
return "K"
}
)
}
}
}
)
}
fun box(): String {
var result: String = ""
result = result.plus(other = { // BLOCK
val tmp0_elvis_lhs: String? = test_1(value = 1)
when {
EQEQ(arg0 = tmp0_elvis_lhs, arg1 = null) -> return "fail 1"
else -> tmp0_elvis_lhs
}
})
result = result.plus(other = { // BLOCK
val tmp1_elvis_lhs: String? = test_2(value = 1)
when {
EQEQ(arg0 = tmp1_elvis_lhs, arg1 = null) -> return "fail 2"
else -> tmp1_elvis_lhs
}
})
return result
}
+97
View File
@@ -0,0 +1,97 @@
FILE fqName:<root> fileName:/kt47527.kt
FUN name:test_1 visibility:public modality:FINAL <> (value:kotlin.Any?) returnType:kotlin.String?
VALUE_PARAMETER name:value index:0 type:kotlin.Any?
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun test_1 (value: kotlin.Any?): kotlin.String? declared in <root>'
BLOCK type=kotlin.Nothing? origin=SAFE_CALL
VAR IR_TEMPORARY_VARIABLE name:tmp_0 type:kotlin.Any? [val]
GET_VAR 'value: kotlin.Any? declared in <root>.test_1' type=kotlin.Any? origin=null
WHEN type=kotlin.Nothing? origin=null
BRANCH
if: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'val tmp_0: kotlin.Any? [val] declared in <root>.test_1' type=kotlin.Any? origin=null
arg1: CONST Null type=kotlin.Nothing? value=null
then: CONST Null type=kotlin.Nothing? value=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CALL 'public final fun let <T, R> (block: kotlin.Function1<T of kotlin.StandardKt.let, R of kotlin.StandardKt.let>): R of kotlin.StandardKt.let [inline] declared in kotlin.StandardKt' type=kotlin.Nothing origin=null
<T>: kotlin.Any
<R>: kotlin.Nothing
$receiver: GET_VAR 'val tmp_0: kotlin.Any? [val] declared in <root>.test_1' type=kotlin.Any? origin=null
block: FUN_EXPR type=kotlin.Function1<kotlin.Any, kotlin.Nothing> origin=LAMBDA
FUN LOCAL_FUNCTION_FOR_LAMBDA name:<anonymous> visibility:local modality:FINAL <> (it:kotlin.Any) returnType:kotlin.Nothing
VALUE_PARAMETER name:it index:0 type:kotlin.Any
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun test_1 (value: kotlin.Any?): kotlin.String? declared in <root>'
CONST String type=kotlin.String value="O"
FUN name:test_2 visibility:public modality:FINAL <> (value:kotlin.Any?) returnType:kotlin.String?
VALUE_PARAMETER name:value index:0 type:kotlin.Any?
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun test_2 (value: kotlin.Any?): kotlin.String? declared in <root>'
CALL 'public final fun run <R> (block: kotlin.Function0<R of kotlin.StandardKt.run>): R of kotlin.StandardKt.run [inline] declared in kotlin.StandardKt' type=kotlin.Nothing? origin=null
<R>: kotlin.Nothing?
block: FUN_EXPR type=kotlin.Function0<kotlin.Nothing?> origin=LAMBDA
FUN LOCAL_FUNCTION_FOR_LAMBDA name:<anonymous> visibility:local modality:FINAL <> () returnType:kotlin.Nothing?
BLOCK_BODY
RETURN type=kotlin.Nothing from='local final fun <anonymous> (): kotlin.Nothing? declared in <root>.test_2'
BLOCK type=kotlin.Nothing? origin=SAFE_CALL
VAR IR_TEMPORARY_VARIABLE name:tmp_1 type:kotlin.Any? [val]
GET_VAR 'value: kotlin.Any? declared in <root>.test_2' type=kotlin.Any? origin=null
WHEN type=kotlin.Nothing? origin=null
BRANCH
if: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'val tmp_1: kotlin.Any? [val] declared in <root>.test_2.<anonymous>' type=kotlin.Any? origin=null
arg1: CONST Null type=kotlin.Nothing? value=null
then: CONST Null type=kotlin.Nothing? value=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CALL 'public final fun let <T, R> (block: kotlin.Function1<T of kotlin.StandardKt.let, R of kotlin.StandardKt.let>): R of kotlin.StandardKt.let [inline] declared in kotlin.StandardKt' type=kotlin.Nothing origin=null
<T>: kotlin.Any
<R>: kotlin.Nothing
$receiver: GET_VAR 'val tmp_1: kotlin.Any? [val] declared in <root>.test_2.<anonymous>' type=kotlin.Any? origin=null
block: FUN_EXPR type=kotlin.Function1<kotlin.Any, kotlin.Nothing> origin=LAMBDA
FUN LOCAL_FUNCTION_FOR_LAMBDA name:<anonymous> visibility:local modality:FINAL <> (it:kotlin.Any) returnType:kotlin.Nothing
VALUE_PARAMETER name:it index:0 type:kotlin.Any
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun test_2 (value: kotlin.Any?): kotlin.String? declared in <root>'
CONST String type=kotlin.String value="K"
FUN name:box visibility:public modality:FINAL <> () returnType:kotlin.String
BLOCK_BODY
VAR name:result type:kotlin.String [var]
CONST String type=kotlin.String value=""
SET_VAR 'var result: kotlin.String [var] declared in <root>.box' type=kotlin.Unit origin=PLUSEQ
CALL 'public final fun plus (other: kotlin.Any?): kotlin.String [operator] declared in kotlin.String' type=kotlin.String origin=PLUSEQ
$this: GET_VAR 'var result: kotlin.String [var] declared in <root>.box' type=kotlin.String origin=PLUSEQ
other: BLOCK type=kotlin.String origin=ELVIS
VAR IR_TEMPORARY_VARIABLE name:tmp_2 type:kotlin.String? [val]
CALL 'public final fun test_1 (value: kotlin.Any?): kotlin.String? declared in <root>' type=kotlin.String? origin=null
value: CONST Int type=kotlin.Int value=1
WHEN type=kotlin.String origin=null
BRANCH
if: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'val tmp_2: kotlin.String? [val] declared in <root>.box' type=kotlin.String? origin=null
arg1: CONST Null type=kotlin.Nothing? value=null
then: RETURN type=kotlin.Nothing from='public final fun box (): kotlin.String declared in <root>'
CONST String type=kotlin.String value="fail 1"
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: GET_VAR 'val tmp_2: kotlin.String? [val] declared in <root>.box' type=kotlin.String? origin=null
SET_VAR 'var result: kotlin.String [var] declared in <root>.box' type=kotlin.Unit origin=PLUSEQ
CALL 'public final fun plus (other: kotlin.Any?): kotlin.String [operator] declared in kotlin.String' type=kotlin.String origin=PLUSEQ
$this: GET_VAR 'var result: kotlin.String [var] declared in <root>.box' type=kotlin.String origin=PLUSEQ
other: BLOCK type=kotlin.String origin=ELVIS
VAR IR_TEMPORARY_VARIABLE name:tmp_3 type:kotlin.String? [val]
CALL 'public final fun test_2 (value: kotlin.Any?): kotlin.String? declared in <root>' type=kotlin.String? origin=null
value: CONST Int type=kotlin.Int value=1
WHEN type=kotlin.String origin=null
BRANCH
if: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'val tmp_3: kotlin.String? [val] declared in <root>.box' type=kotlin.String? origin=null
arg1: CONST Null type=kotlin.Nothing? value=null
then: RETURN type=kotlin.Nothing from='public final fun box (): kotlin.String declared in <root>'
CONST String type=kotlin.String value="fail 2"
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: GET_VAR 'val tmp_3: kotlin.String? [val] declared in <root>.box' type=kotlin.String? origin=null
RETURN type=kotlin.Nothing from='public final fun box (): kotlin.String declared in <root>'
GET_VAR 'var result: kotlin.String [var] declared in <root>.box' type=kotlin.String origin=null
@@ -1,11 +0,0 @@
fun <R : Number> Number.convert(): R {
return TODO()
}
fun foo(arg: Number) {
}
fun main(args: Array<String>) {
val x: Int = 0
foo(arg = x.convert<Number>())
}
@@ -1,19 +0,0 @@
FILE fqName:<root> fileName:/argumentMappedWithError.kt
FUN name:convert visibility:public modality:FINAL <R> ($receiver:kotlin.Number) returnType:R of <root>.convert
TYPE_PARAMETER name:R index:0 variance: superTypes:[kotlin.Number]
$receiver: VALUE_PARAMETER name:<this> type:kotlin.Number
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun convert <R> (): R of <root>.convert declared in <root>'
CALL 'public final fun TODO (): kotlin.Nothing [inline] declared in kotlin.StandardKt' type=kotlin.Nothing origin=null
FUN name:foo visibility:public modality:FINAL <> (arg:kotlin.Number) returnType:kotlin.Unit
VALUE_PARAMETER name:arg index:0 type:kotlin.Number
BLOCK_BODY
FUN name:main visibility:public modality:FINAL <> (args:kotlin.Array<kotlin.String>) returnType:kotlin.Unit
VALUE_PARAMETER name:args index:0 type:kotlin.Array<kotlin.String>
BLOCK_BODY
VAR name:x type:kotlin.Int [val]
CONST Int type=kotlin.Int value=0
CALL 'public final fun foo (arg: kotlin.Number): kotlin.Unit declared in <root>' type=kotlin.Unit origin=null
arg: CALL 'public final fun convert <R> (): R of <root>.convert declared in <root>' type=kotlin.Number origin=null
<R>: kotlin.Number
$receiver: GET_VAR 'val x: kotlin.Int [val] declared in <root>.main' type=kotlin.Int origin=null
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
fun <R : Number> Number.convert(): R = TODO()
fun foo(arg: Number) {
@@ -1,5 +1,5 @@
fun <R : Number> Number.convert(): R {
TODO()
return TODO()
}
fun foo(arg: Number) {
@@ -3,7 +3,8 @@ FILE fqName:<root> fileName:/argumentMappedWithError.kt
TYPE_PARAMETER name:R index:0 variance: superTypes:[kotlin.Number]
$receiver: VALUE_PARAMETER name:<this> type:kotlin.Number
BLOCK_BODY
CALL 'public final fun TODO (): kotlin.Nothing [inline] declared in kotlin.StandardKt' type=kotlin.Nothing origin=null
RETURN type=kotlin.Nothing from='public final fun convert <R> (): R of <root>.convert declared in <root>'
CALL 'public final fun TODO (): kotlin.Nothing [inline] declared in kotlin.StandardKt' type=kotlin.Nothing origin=null
FUN name:foo visibility:public modality:FINAL <> (arg:kotlin.Number) returnType:kotlin.Unit
VALUE_PARAMETER name:arg index:0 type:kotlin.Number
BLOCK_BODY
@@ -18,7 +18,7 @@ fun bar(s: String?, t: String?): String {
when {
EQEQ(arg0 = tmp0_safe_receiver, arg1 = null) -> null
else -> tmp0_safe_receiver.let<String, Nothing?>(block = local fun <anonymous>(it: String): Nothing? {
{ // BLOCK
return { // BLOCK
val tmp0_safe_receiver: String? = t
when {
EQEQ(arg0 = tmp0_safe_receiver, arg1 = null) -> null
@@ -27,7 +27,7 @@ fun bar(s: String?, t: String?): String {
}
)
}
} /*~> Unit */
}
}
)
}
@@ -50,7 +50,7 @@ FILE fqName:<root> fileName:/SafeLetWithReturn.kt
FUN LOCAL_FUNCTION_FOR_LAMBDA name:<anonymous> visibility:local modality:FINAL <> (it:kotlin.String) returnType:kotlin.Nothing?
VALUE_PARAMETER name:it index:0 type:kotlin.String
BLOCK_BODY
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
RETURN type=kotlin.Nothing from='local final fun <anonymous> (it: kotlin.String): kotlin.Nothing? declared in <root>.bar'
BLOCK type=kotlin.Nothing? origin=SAFE_CALL
VAR IR_TEMPORARY_VARIABLE name:tmp_2 type:kotlin.String? [val]
GET_VAR 't: kotlin.String? declared in <root>.bar' type=kotlin.String? origin=null
+1 -1
View File
@@ -1,7 +1,7 @@
fun box(): String {
val map: MutableMap<Fun, String> = mutableMapOf<Fun, String>()
val fn: Fun = local fun <anonymous>(it: @FlexibleNullability String?): @FlexibleNullability String? {
TODO()
return TODO()
}
/*-> Fun */
return map.computeIfAbsent(p0 = fn, p1 = local fun <anonymous>(it: @EnhancedNullability Fun): @EnhancedNullability String {
+2 -1
View File
@@ -11,7 +11,8 @@ FILE fqName:<root> fileName:/test.kt
FUN LOCAL_FUNCTION_FOR_LAMBDA name:<anonymous> visibility:local modality:FINAL <> (it:@[FlexibleNullability] kotlin.String?) returnType:@[FlexibleNullability] kotlin.String?
VALUE_PARAMETER name:it index:0 type:@[FlexibleNullability] kotlin.String?
BLOCK_BODY
CALL 'public final fun TODO (): kotlin.Nothing [inline] declared in kotlin.StandardKt' type=kotlin.Nothing origin=null
RETURN type=kotlin.Nothing from='local final fun <anonymous> (it: @[FlexibleNullability] kotlin.String?): @[FlexibleNullability] kotlin.String? declared in <root>.box'
CALL 'public final fun TODO (): kotlin.Nothing [inline] declared in kotlin.StandardKt' type=kotlin.Nothing origin=null
RETURN type=kotlin.Nothing from='public final fun box (): kotlin.String declared in <root>'
TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String
CALL 'public open fun computeIfAbsent (p0: @[EnhancedNullability] K of kotlin.collections.MutableMap, p1: @[EnhancedNullability] java.util.function.Function<in @[EnhancedNullability] K of kotlin.collections.MutableMap, out @[EnhancedNullability] V of kotlin.collections.MutableMap>): @[EnhancedNullability] V of kotlin.collections.MutableMap declared in kotlin.collections.MutableMap' type=@[EnhancedNullability] kotlin.String origin=null
@@ -3,7 +3,7 @@ interface CPointed {
}
inline fun <reified T : CPointed> CPointed.reinterpret(): T {
TODO()
return TODO()
}
class CInt32VarX<T : Any?> : CPointed {
@@ -18,7 +18,7 @@ class CInt32VarX<T : Any?> : CPointed {
typealias CInt32Var = CInt32VarX<Int>
var <T_INT : Int> CInt32VarX<T_INT>.value: T_INT
get(): T_INT {
TODO()
return TODO()
}
set(value: T_INT) {
}
@@ -18,7 +18,8 @@ FILE fqName:<root> fileName:/integerCoercionToT.kt
TYPE_PARAMETER name:T index:0 variance: superTypes:[<root>.CPointed]
$receiver: VALUE_PARAMETER name:<this> type:<root>.CPointed
BLOCK_BODY
CALL 'public final fun TODO (): kotlin.Nothing [inline] declared in kotlin.StandardKt' type=kotlin.Nothing origin=null
RETURN type=kotlin.Nothing from='public final fun reinterpret <T> (): T of <root>.reinterpret [inline] declared in <root>'
CALL 'public final fun TODO (): kotlin.Nothing [inline] declared in kotlin.StandardKt' type=kotlin.Nothing origin=null
CLASS CLASS name:CInt32VarX modality:FINAL visibility:public superTypes:[<root>.CPointed]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.CInt32VarX<T of <root>.CInt32VarX>
TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any?]
@@ -46,7 +47,8 @@ FILE fqName:<root> fileName:/integerCoercionToT.kt
TYPE_PARAMETER name:T_INT index:0 variance: superTypes:[kotlin.Int]
$receiver: VALUE_PARAMETER name:<this> type:<root>.CInt32VarX<T_INT of <root>.<get-value>>
BLOCK_BODY
CALL 'public final fun TODO (): kotlin.Nothing [inline] declared in kotlin.StandardKt' type=kotlin.Nothing origin=null
RETURN type=kotlin.Nothing from='public final fun <get-value> <T_INT> (): T_INT of <root>.<get-value> declared in <root>'
CALL 'public final fun TODO (): kotlin.Nothing [inline] declared in kotlin.StandardKt' type=kotlin.Nothing origin=null
FUN name:<set-value> visibility:public modality:FINAL <T_INT> ($receiver:<root>.CInt32VarX<T_INT of <root>.<set-value>>, value:T_INT of <root>.<set-value>) returnType:kotlin.Unit
correspondingProperty: PROPERTY name:value visibility:public modality:FINAL [var]
TYPE_PARAMETER name:T_INT index:0 variance: superTypes:[kotlin.Int]
@@ -1,20 +0,0 @@
fun <X : Any?, Y : Any?> foo(): Function1<X, Y> {
return TODO()
}
interface Inv2<A : Any?, B : Any?> {
}
fun <T : Any?, R : Any?> check(x: T, y: R, f: Function1<T, R>): Inv2<T, R> {
return TODO()
}
fun test(): Inv2<String, Int> {
return check<String, Int>(x = "", y = 1, f = foo<String, Int>())
}
fun box(): String {
val x: Inv2<String, Int> = test()
return "OK"
}
@@ -1,50 +0,0 @@
FILE fqName:<root> fileName:/fixationOrder1.kt
FUN name:foo visibility:public modality:FINAL <X, Y> () returnType:kotlin.Function1<X of <root>.foo, Y of <root>.foo>
TYPE_PARAMETER name:X index:0 variance: superTypes:[kotlin.Any?]
TYPE_PARAMETER name:Y index:1 variance: superTypes:[kotlin.Any?]
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun foo <X, Y> (): kotlin.Function1<X of <root>.foo, Y of <root>.foo> declared in <root>'
CALL 'public final fun TODO (): kotlin.Nothing [inline] declared in kotlin.StandardKt' type=kotlin.Nothing origin=null
CLASS INTERFACE name:Inv2 modality:ABSTRACT visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.Inv2<A of <root>.Inv2, B of <root>.Inv2>
TYPE_PARAMETER name:A index:0 variance: superTypes:[kotlin.Any?]
TYPE_PARAMETER name:B index:1 variance: superTypes:[kotlin.Any?]
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
overridden:
public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Any
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
overridden:
public open fun hashCode (): kotlin.Int declared in kotlin.Any
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): kotlin.String declared in kotlin.Any
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN name:check visibility:public modality:FINAL <T, R> (x:T of <root>.check, y:R of <root>.check, f:kotlin.Function1<T of <root>.check, R of <root>.check>) returnType:<root>.Inv2<T of <root>.check, R of <root>.check>
TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any?]
TYPE_PARAMETER name:R index:1 variance: superTypes:[kotlin.Any?]
VALUE_PARAMETER name:x index:0 type:T of <root>.check
VALUE_PARAMETER name:y index:1 type:R of <root>.check
VALUE_PARAMETER name:f index:2 type:kotlin.Function1<T of <root>.check, R of <root>.check>
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun check <T, R> (x: T of <root>.check, y: R of <root>.check, f: kotlin.Function1<T of <root>.check, R of <root>.check>): <root>.Inv2<T of <root>.check, R of <root>.check> declared in <root>'
CALL 'public final fun TODO (): kotlin.Nothing [inline] declared in kotlin.StandardKt' type=kotlin.Nothing origin=null
FUN name:test visibility:public modality:FINAL <> () returnType:<root>.Inv2<kotlin.String, kotlin.Int>
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun test (): <root>.Inv2<kotlin.String, kotlin.Int> declared in <root>'
CALL 'public final fun check <T, R> (x: T of <root>.check, y: R of <root>.check, f: kotlin.Function1<T of <root>.check, R of <root>.check>): <root>.Inv2<T of <root>.check, R of <root>.check> declared in <root>' type=<root>.Inv2<kotlin.String, kotlin.Int> origin=null
<T>: kotlin.String
<R>: kotlin.Int
x: CONST String type=kotlin.String value=""
y: CONST Int type=kotlin.Int value=1
f: CALL 'public final fun foo <X, Y> (): kotlin.Function1<X of <root>.foo, Y of <root>.foo> declared in <root>' type=kotlin.Function1<kotlin.String, kotlin.Int> origin=null
<X>: kotlin.String
<Y>: kotlin.Int
FUN name:box visibility:public modality:FINAL <> () returnType:kotlin.String
BLOCK_BODY
VAR name:x type:<root>.Inv2<kotlin.String, kotlin.Int> [val]
CALL 'public final fun test (): <root>.Inv2<kotlin.String, kotlin.Int> declared in <root>' type=<root>.Inv2<kotlin.String, kotlin.Int> origin=null
RETURN type=kotlin.Nothing from='public final fun box (): kotlin.String declared in <root>'
CONST String type=kotlin.String value="OK"
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
fun <X, Y> foo(): (X) -> Y = TODO()
interface Inv2<A, B>
@@ -1,5 +1,5 @@
fun <X : Any?, Y : Any?> foo(): Function1<X, Y> {
TODO()
return TODO()
}
interface Inv2<A : Any?, B : Any?> {
@@ -7,7 +7,7 @@ interface Inv2<A : Any?, B : Any?> {
}
fun <T : Any?, R : Any?> check(x: T, y: R, f: Function1<T, R>): Inv2<T, R> {
TODO()
return TODO()
}
fun test(): Inv2<String, Int> {
@@ -3,7 +3,8 @@ FILE fqName:<root> fileName:/fixationOrder1.kt
TYPE_PARAMETER name:X index:0 variance: superTypes:[kotlin.Any?]
TYPE_PARAMETER name:Y index:1 variance: superTypes:[kotlin.Any?]
BLOCK_BODY
CALL 'public final fun TODO (): kotlin.Nothing [inline] declared in kotlin.StandardKt' type=kotlin.Nothing origin=null
RETURN type=kotlin.Nothing from='public final fun foo <X, Y> (): kotlin.Function1<X of <root>.foo, Y of <root>.foo> declared in <root>'
CALL 'public final fun TODO (): kotlin.Nothing [inline] declared in kotlin.StandardKt' type=kotlin.Nothing origin=null
CLASS INTERFACE name:Inv2 modality:ABSTRACT visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.Inv2<A of <root>.Inv2, B of <root>.Inv2>
TYPE_PARAMETER name:A index:0 variance: superTypes:[kotlin.Any?]
@@ -28,7 +29,8 @@ FILE fqName:<root> fileName:/fixationOrder1.kt
VALUE_PARAMETER name:y index:1 type:R of <root>.check
VALUE_PARAMETER name:f index:2 type:kotlin.Function1<T of <root>.check, R of <root>.check>
BLOCK_BODY
CALL 'public final fun TODO (): kotlin.Nothing [inline] declared in kotlin.StandardKt' type=kotlin.Nothing origin=null
RETURN type=kotlin.Nothing from='public final fun check <T, R> (x: T of <root>.check, y: R of <root>.check, f: kotlin.Function1<T of <root>.check, R of <root>.check>): <root>.Inv2<T of <root>.check, R of <root>.check> declared in <root>'
CALL 'public final fun TODO (): kotlin.Nothing [inline] declared in kotlin.StandardKt' type=kotlin.Nothing origin=null
FUN name:test visibility:public modality:FINAL <> () returnType:<root>.Inv2<kotlin.String, kotlin.Int>
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun test (): <root>.Inv2<kotlin.String, kotlin.Int> declared in <root>'
@@ -23,7 +23,7 @@ suspend fun <T : Any?> FlowCollector<T>.invokeSafely(action: @ExtensionFunctionT
@OptIn(markerClass = [ExperimentalTypeInference::class])
inline fun <T : Any?> unsafeFlow(@BuilderInference crossinline block: @ExtensionFunctionType SuspendFunction1<FlowCollector<T>, Unit>): Flow<T> {
TODO()
return TODO()
}
@Deprecated(message = "binary compatibility with a version w/o FlowCollector receiver", level = DeprecationLevel.HIDDEN)
@@ -85,12 +85,12 @@ class SafeCollector<T : Any?> : FlowCollector<T> {
@OptIn(markerClass = [ExperimentalTypeInference::class])
fun <T : Any?> flow(@BuilderInference block: @ExtensionFunctionType SuspendFunction1<FlowCollector<T>, Unit>): Flow<T> {
TODO()
return TODO()
}
@OptIn(markerClass = [ExperimentalTypeInference::class])
suspend fun <R : Any?> flowScope(@BuilderInference block: @ExtensionFunctionType SuspendFunction1<CoroutineScope, R>): R {
TODO()
return TODO()
}
suspend inline fun <T : Any?> Flow<T>.collect(crossinline action: SuspendFunction1<@ParameterName(name = "value") T, Unit>) {
@@ -128,7 +128,7 @@ interface ReceiveChannel<out E : Any?> {
@OptIn(markerClass = [ExperimentalTypeInference::class])
fun <E : Any?> CoroutineScope.produce(@BuilderInference block: @ExtensionFunctionType SuspendFunction1<ProducerScope<E>, Unit>): ReceiveChannel<E> {
TODO()
return TODO()
}
interface ProducerScope<in E : Any?> : CoroutineScope, SendChannel<E> {
@@ -59,7 +59,8 @@ FILE fqName:<root> fileName:/castsInsideCoroutineInference.kt
annotations:
BuilderInference
BLOCK_BODY
CALL 'public final fun TODO (): kotlin.Nothing [inline] declared in kotlin.StandardKt' type=kotlin.Nothing origin=null
RETURN type=kotlin.Nothing from='public final fun unsafeFlow <T> (block: @[ExtensionFunctionType] kotlin.coroutines.SuspendFunction1<<root>.FlowCollector<T of <root>.unsafeFlow>, kotlin.Unit>): <root>.Flow<T of <root>.unsafeFlow> [inline] declared in <root>'
CALL 'public final fun TODO (): kotlin.Nothing [inline] declared in kotlin.StandardKt' type=kotlin.Nothing origin=null
FUN name:onCompletion visibility:public modality:FINAL <T> ($receiver:<root>.Flow<T of <root>.onCompletion>, action:kotlin.coroutines.SuspendFunction1<@[ParameterName(name = 'cause')] kotlin.Throwable?, kotlin.Unit>) returnType:<root>.Flow<T of <root>.onCompletion>
annotations:
Deprecated(message = 'binary compatibility with a version w/o FlowCollector receiver', replaceWith = <null>, level = GET_ENUM 'ENUM_ENTRY IR_EXTERNAL_DECLARATION_STUB name:HIDDEN' type=kotlin.DeprecationLevel)
@@ -198,7 +199,8 @@ FILE fqName:<root> fileName:/castsInsideCoroutineInference.kt
annotations:
BuilderInference
BLOCK_BODY
CALL 'public final fun TODO (): kotlin.Nothing [inline] declared in kotlin.StandardKt' type=kotlin.Nothing origin=null
RETURN type=kotlin.Nothing from='public final fun flow <T> (block: @[ExtensionFunctionType] kotlin.coroutines.SuspendFunction1<<root>.FlowCollector<T of <root>.flow>, kotlin.Unit>): <root>.Flow<T of <root>.flow> declared in <root>'
CALL 'public final fun TODO (): kotlin.Nothing [inline] declared in kotlin.StandardKt' type=kotlin.Nothing origin=null
FUN name:flowScope visibility:public modality:FINAL <R> (block:@[ExtensionFunctionType] kotlin.coroutines.SuspendFunction1<<root>.CoroutineScope, R of <root>.flowScope>) returnType:R of <root>.flowScope [suspend]
annotations:
OptIn(markerClass = [CLASS_REFERENCE 'CLASS IR_EXTERNAL_DECLARATION_STUB ANNOTATION_CLASS name:ExperimentalTypeInference modality:FINAL visibility:public superTypes:[kotlin.Annotation]' type=kotlin.reflect.KClass<kotlin.experimental.ExperimentalTypeInference>])
@@ -207,7 +209,8 @@ FILE fqName:<root> fileName:/castsInsideCoroutineInference.kt
annotations:
BuilderInference
BLOCK_BODY
CALL 'public final fun TODO (): kotlin.Nothing [inline] declared in kotlin.StandardKt' type=kotlin.Nothing origin=null
RETURN type=kotlin.Nothing from='public final fun flowScope <R> (block: @[ExtensionFunctionType] kotlin.coroutines.SuspendFunction1<<root>.CoroutineScope, R of <root>.flowScope>): R of <root>.flowScope [suspend] declared in <root>'
CALL 'public final fun TODO (): kotlin.Nothing [inline] declared in kotlin.StandardKt' type=kotlin.Nothing origin=null
FUN name:collect visibility:public modality:FINAL <T> ($receiver:<root>.Flow<T of <root>.collect>, action:kotlin.coroutines.SuspendFunction1<@[ParameterName(name = 'value')] T of <root>.collect, kotlin.Unit>) returnType:kotlin.Unit [inline,suspend]
TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any?]
$receiver: VALUE_PARAMETER name:<this> type:<root>.Flow<T of <root>.collect>
@@ -315,7 +318,8 @@ FILE fqName:<root> fileName:/castsInsideCoroutineInference.kt
annotations:
BuilderInference
BLOCK_BODY
CALL 'public final fun TODO (): kotlin.Nothing [inline] declared in kotlin.StandardKt' type=kotlin.Nothing origin=null
RETURN type=kotlin.Nothing from='public final fun produce <E> (block: @[ExtensionFunctionType] kotlin.coroutines.SuspendFunction1<<root>.ProducerScope<E of <root>.produce>, kotlin.Unit>): <root>.ReceiveChannel<E of <root>.produce> declared in <root>'
CALL 'public final fun TODO (): kotlin.Nothing [inline] declared in kotlin.StandardKt' type=kotlin.Nothing origin=null
CLASS INTERFACE name:ProducerScope modality:ABSTRACT visibility:public superTypes:[<root>.CoroutineScope; <root>.SendChannel<E of <root>.ProducerScope>]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.ProducerScope<E of <root>.ProducerScope>
TYPE_PARAMETER name:E index:0 variance:in superTypes:[kotlin.Any?]
@@ -10,23 +10,23 @@ class MySet : Set<String> {
override val size: Int
override get(): Int {
TODO()
return TODO()
}
override operator fun contains(element: String): Boolean {
TODO()
return TODO()
}
override fun containsAll(elements: Collection<String>): Boolean {
TODO()
return TODO()
}
override fun isEmpty(): Boolean {
TODO()
return TODO()
}
override operator fun iterator(): Iterator<String> {
TODO()
return TODO()
}
}
@@ -17,33 +17,38 @@ FILE fqName:<root> fileName:/implicitNotNullOnPlatformType.kt
public abstract fun <get-size> (): kotlin.Int declared in kotlin.collections.Set
$this: VALUE_PARAMETER name:<this> type:<root>.MySet
BLOCK_BODY
CALL 'public final fun TODO (): kotlin.Nothing [inline] declared in kotlin.StandardKt' type=kotlin.Nothing origin=null
RETURN type=kotlin.Nothing from='public open fun <get-size> (): kotlin.Int declared in <root>.MySet'
CALL 'public final fun TODO (): kotlin.Nothing [inline] declared in kotlin.StandardKt' type=kotlin.Nothing origin=null
FUN name:contains visibility:public modality:OPEN <> ($this:<root>.MySet, element:kotlin.String) returnType:kotlin.Boolean [operator]
overridden:
public abstract fun contains (element: E of kotlin.collections.Set): kotlin.Boolean [operator] declared in kotlin.collections.Set
$this: VALUE_PARAMETER name:<this> type:<root>.MySet
VALUE_PARAMETER name:element index:0 type:kotlin.String
BLOCK_BODY
CALL 'public final fun TODO (): kotlin.Nothing [inline] declared in kotlin.StandardKt' type=kotlin.Nothing origin=null
RETURN type=kotlin.Nothing from='public open fun contains (element: kotlin.String): kotlin.Boolean [operator] declared in <root>.MySet'
CALL 'public final fun TODO (): kotlin.Nothing [inline] declared in kotlin.StandardKt' type=kotlin.Nothing origin=null
FUN name:containsAll visibility:public modality:OPEN <> ($this:<root>.MySet, elements:kotlin.collections.Collection<kotlin.String>) returnType:kotlin.Boolean
overridden:
public abstract fun containsAll (elements: kotlin.collections.Collection<E of kotlin.collections.Set>): kotlin.Boolean declared in kotlin.collections.Set
$this: VALUE_PARAMETER name:<this> type:<root>.MySet
VALUE_PARAMETER name:elements index:0 type:kotlin.collections.Collection<kotlin.String>
BLOCK_BODY
CALL 'public final fun TODO (): kotlin.Nothing [inline] declared in kotlin.StandardKt' type=kotlin.Nothing origin=null
RETURN type=kotlin.Nothing from='public open fun containsAll (elements: kotlin.collections.Collection<kotlin.String>): kotlin.Boolean declared in <root>.MySet'
CALL 'public final fun TODO (): kotlin.Nothing [inline] declared in kotlin.StandardKt' type=kotlin.Nothing origin=null
FUN name:isEmpty visibility:public modality:OPEN <> ($this:<root>.MySet) returnType:kotlin.Boolean
overridden:
public abstract fun isEmpty (): kotlin.Boolean declared in kotlin.collections.Set
$this: VALUE_PARAMETER name:<this> type:<root>.MySet
BLOCK_BODY
CALL 'public final fun TODO (): kotlin.Nothing [inline] declared in kotlin.StandardKt' type=kotlin.Nothing origin=null
RETURN type=kotlin.Nothing from='public open fun isEmpty (): kotlin.Boolean declared in <root>.MySet'
CALL 'public final fun TODO (): kotlin.Nothing [inline] declared in kotlin.StandardKt' type=kotlin.Nothing origin=null
FUN name:iterator visibility:public modality:OPEN <> ($this:<root>.MySet) returnType:kotlin.collections.Iterator<kotlin.String> [operator]
overridden:
public abstract fun iterator (): kotlin.collections.Iterator<E of kotlin.collections.Set> [operator] declared in kotlin.collections.Set
$this: VALUE_PARAMETER name:<this> type:<root>.MySet
BLOCK_BODY
CALL 'public final fun TODO (): kotlin.Nothing [inline] declared in kotlin.StandardKt' type=kotlin.Nothing origin=null
RETURN type=kotlin.Nothing from='public open fun iterator (): kotlin.collections.Iterator<kotlin.String> [operator] declared in <root>.MySet'
CALL 'public final fun TODO (): kotlin.Nothing [inline] declared in kotlin.StandardKt' type=kotlin.Nothing origin=null
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
overridden:
public open fun equals (other: kotlin.Any?): kotlin.Boolean [fake_override,operator] declared in kotlin.collections.Set
@@ -16334,6 +16334,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
runTest("compiler/testData/codegen/box/functions/kt47449.kt");
}
@Test
@TestMetadata("kt47527.kt")
public void testKt47527() throws Exception {
runTest("compiler/testData/codegen/box/functions/kt47527.kt");
}
@Test
@TestMetadata("kt785.kt")
public void testKt785() throws Exception {
@@ -16364,6 +16364,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
runTest("compiler/testData/codegen/box/functions/kt47449.kt");
}
@Test
@TestMetadata("kt47527.kt")
public void testKt47527() throws Exception {
runTest("compiler/testData/codegen/box/functions/kt47527.kt");
}
@Test
@TestMetadata("kt785.kt")
public void testKt785() throws Exception {
@@ -458,6 +458,12 @@ public class IrTextTestGenerated extends AbstractIrTextTest {
runTest("compiler/testData/ir/irText/declarations/kt45308.kt");
}
@Test
@TestMetadata("kt47527.kt")
public void testKt47527() throws Exception {
runTest("compiler/testData/ir/irText/declarations/kt47527.kt");
}
@Test
@TestMetadata("localClassWithOverrides.kt")
public void testLocalClassWithOverrides() throws Exception {
@@ -13470,6 +13470,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
runTest("compiler/testData/codegen/box/functions/kt47449.kt");
}
@TestMetadata("kt47527.kt")
public void testKt47527() throws Exception {
runTest("compiler/testData/codegen/box/functions/kt47527.kt");
}
@TestMetadata("kt785.kt")
public void testKt785() throws Exception {
runTest("compiler/testData/codegen/box/functions/kt785.kt");
@@ -355,6 +355,11 @@ public class KlibTextTestCaseGenerated extends AbstractKlibTextTestCase {
runTest("compiler/testData/ir/irText/declarations/kt45308.kt");
}
@TestMetadata("kt47527.kt")
public void testKt47527() throws Exception {
runTest("compiler/testData/ir/irText/declarations/kt47527.kt");
}
@TestMetadata("localClassWithOverrides.kt")
public void testLocalClassWithOverrides() throws Exception {
runTest("compiler/testData/ir/irText/declarations/localClassWithOverrides.kt");
@@ -11869,6 +11869,11 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes
runTest("compiler/testData/codegen/box/functions/kt47449.kt");
}
@TestMetadata("kt47527.kt")
public void testKt47527() throws Exception {
runTest("compiler/testData/codegen/box/functions/kt47527.kt");
}
@TestMetadata("kt785.kt")
public void testKt785() throws Exception {
runTest("compiler/testData/codegen/box/functions/kt785.kt");
@@ -11275,6 +11275,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
runTest("compiler/testData/codegen/box/functions/kt47449.kt");
}
@TestMetadata("kt47527.kt")
public void testKt47527() throws Exception {
runTest("compiler/testData/codegen/box/functions/kt47527.kt");
}
@TestMetadata("kt785.kt")
public void testKt785() throws Exception {
runTest("compiler/testData/codegen/box/functions/kt785.kt");
@@ -11275,6 +11275,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
runTest("compiler/testData/codegen/box/functions/kt47449.kt");
}
@TestMetadata("kt47527.kt")
public void testKt47527() throws Exception {
runTest("compiler/testData/codegen/box/functions/kt47527.kt");
}
@TestMetadata("kt785.kt")
public void testKt785() throws Exception {
runTest("compiler/testData/codegen/box/functions/kt785.kt");
@@ -5765,6 +5765,11 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest
runTest("compiler/testData/codegen/box/functions/kt47449.kt");
}
@TestMetadata("kt47527.kt")
public void testKt47527() throws Exception {
runTest("compiler/testData/codegen/box/functions/kt47527.kt");
}
@TestMetadata("kt785.kt")
public void testKt785() throws Exception {
runTest("compiler/testData/codegen/box/functions/kt785.kt");