// WITH_STDLIB // IGNORE_BACKEND: WASM // IGNORE_BACKEND_K2: JVM_IR, JS_IR, JS_IR_ES6, NATIVE // FIR status: ARGUMENT_TYPE_MISMATCH at contribute arguments // TARGET_BACKEND: JVM import kotlin.experimental.ExperimentalTypeInference class In { fun contribute(x: K) {} } class Out { fun get(): K = null as K } class Inv { fun get(): K = null as K } interface A class B: A class C: A @OptIn(ExperimentalTypeInference::class) fun build1(@BuilderInference builderAction1: In.() -> Unit, @BuilderInference builderAction2: In.() -> Unit): K = 1 as K @OptIn(ExperimentalTypeInference::class) fun build2(@BuilderInference builderAction1: In.() -> Unit, @BuilderInference builderAction2: In.() -> Unit): K = B() as K @OptIn(ExperimentalTypeInference::class) fun build3(@BuilderInference builderAction1: Out.() -> Unit, @BuilderInference builderAction2: Out.() -> Unit): K = 1 as K @OptIn(ExperimentalTypeInference::class) fun build4(@BuilderInference builderAction1: Out.() -> Unit, @BuilderInference builderAction2: Out.() -> Unit): K = B() as K @OptIn(ExperimentalTypeInference::class) fun build5(@BuilderInference builderAction1: Inv.() -> Unit, @BuilderInference builderAction2: Inv.() -> Unit): K = 1 as K @OptIn(ExperimentalTypeInference::class) fun build6(@BuilderInference builderAction1: Inv.() -> Unit, @BuilderInference builderAction2: Inv.() -> Unit): K = B() as K @OptIn(ExperimentalStdlibApi::class) fun box(): String { val x1 = build1({ contribute(1f) }, { contribute(1.0) }) & Number}")!>x1 val y1 = build2({ contribute(B()) }, { contribute(C()) }) y1 val x2 = build3({ val x: Float = get() }, { val x: Double = get() }) & Number}")!>x2 val y2 = build4({ val x: B = get() }, { val x: C = get() }) y2 val x3 = build5({ val x: Float = get() }, { val x: Double = get() }) & Number}")!>x3 val y3 = build6({ val x: B = get() }, { val x: C = get() }) y3 return "OK" }