Fix extension receiver coercion for inline classes
#KT-27031
This commit is contained in:
@@ -721,7 +721,7 @@ public abstract class StackValue {
|
||||
) {
|
||||
// Coerce 'this' for the case when it is smart cast.
|
||||
// Do not coerce for other cases due to the 'protected' access issues (JVMS 7, 4.9.2 Structural Constraints).
|
||||
boolean coerceType = descriptor.getKind() == ClassKind.INTERFACE || (castReceiver && !isSuper);
|
||||
boolean coerceType = descriptor.getKind() == ClassKind.INTERFACE || descriptor.isInline() || (castReceiver && !isSuper);
|
||||
return new ThisOuter(codegen, descriptor, isSuper, coerceType);
|
||||
}
|
||||
|
||||
|
||||
Vendored
+10
@@ -0,0 +1,10 @@
|
||||
// !LANGUAGE: +InlineClasses
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
|
||||
fun <T> T.runExt(fn: T.() -> String) = fn()
|
||||
|
||||
inline class R(private val r: Int) {
|
||||
fun test() = runExt { "OK" }
|
||||
}
|
||||
|
||||
fun box() = R(0).test()
|
||||
Vendored
+10
@@ -0,0 +1,10 @@
|
||||
// !LANGUAGE: +InlineClasses
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
|
||||
fun <T> T.runExt(fn: T.() -> String) = fn()
|
||||
|
||||
inline class R(private val r: String) {
|
||||
fun test() = runExt { r }
|
||||
}
|
||||
|
||||
fun box() = R("OK").test()
|
||||
Vendored
+10
@@ -0,0 +1,10 @@
|
||||
// !LANGUAGE: +InlineClasses
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
|
||||
inline fun <T> T.runInlineExt(fn: T.() -> String) = fn()
|
||||
|
||||
inline class R(private val r: Int) {
|
||||
fun test() = runInlineExt { "OK" }
|
||||
}
|
||||
|
||||
fun box() = R(0).test()
|
||||
compiler/testData/codegen/box/inlineClasses/contextsAndAccessors/inlineExtLambdaInInlineClassFun2.kt
Vendored
+10
@@ -0,0 +1,10 @@
|
||||
// !LANGUAGE: +InlineClasses
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
|
||||
inline fun <T> T.runInlineExt(fn: T.() -> String) = fn()
|
||||
|
||||
inline class R(private val r: String) {
|
||||
fun test() = runInlineExt { r }
|
||||
}
|
||||
|
||||
fun box() = R("OK").test()
|
||||
Vendored
+10
@@ -0,0 +1,10 @@
|
||||
// !LANGUAGE: +InlineClasses
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
|
||||
inline fun runInline(fn: () -> String) = fn()
|
||||
|
||||
inline class R(private val r: Int) {
|
||||
fun test() = runInline { "OK" }
|
||||
}
|
||||
|
||||
fun box() = R(0).test()
|
||||
+25
@@ -11911,6 +11911,31 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
||||
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/inlineClasses/contextsAndAccessors"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JVM, true);
|
||||
}
|
||||
|
||||
@TestMetadata("extLambdaInInlineClassFun.kt")
|
||||
public void testExtLambdaInInlineClassFun() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/contextsAndAccessors/extLambdaInInlineClassFun.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("extLambdaInInlineClassFun2.kt")
|
||||
public void testExtLambdaInInlineClassFun2() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/contextsAndAccessors/extLambdaInInlineClassFun2.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("inlineExtLambdaInInlineClassFun.kt")
|
||||
public void testInlineExtLambdaInInlineClassFun() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/contextsAndAccessors/inlineExtLambdaInInlineClassFun.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("inlineExtLambdaInInlineClassFun2.kt")
|
||||
public void testInlineExtLambdaInInlineClassFun2() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/contextsAndAccessors/inlineExtLambdaInInlineClassFun2.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("inlineLambdaInInlineClassFun.kt")
|
||||
public void testInlineLambdaInInlineClassFun() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/contextsAndAccessors/inlineLambdaInInlineClassFun.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("lambdaInInlineClassFun.kt")
|
||||
public void testLambdaInInlineClassFun() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/contextsAndAccessors/lambdaInInlineClassFun.kt");
|
||||
|
||||
+25
@@ -11911,6 +11911,31 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
||||
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/inlineClasses/contextsAndAccessors"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JVM, true);
|
||||
}
|
||||
|
||||
@TestMetadata("extLambdaInInlineClassFun.kt")
|
||||
public void testExtLambdaInInlineClassFun() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/contextsAndAccessors/extLambdaInInlineClassFun.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("extLambdaInInlineClassFun2.kt")
|
||||
public void testExtLambdaInInlineClassFun2() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/contextsAndAccessors/extLambdaInInlineClassFun2.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("inlineExtLambdaInInlineClassFun.kt")
|
||||
public void testInlineExtLambdaInInlineClassFun() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/contextsAndAccessors/inlineExtLambdaInInlineClassFun.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("inlineExtLambdaInInlineClassFun2.kt")
|
||||
public void testInlineExtLambdaInInlineClassFun2() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/contextsAndAccessors/inlineExtLambdaInInlineClassFun2.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("inlineLambdaInInlineClassFun.kt")
|
||||
public void testInlineLambdaInInlineClassFun() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/contextsAndAccessors/inlineLambdaInInlineClassFun.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("lambdaInInlineClassFun.kt")
|
||||
public void testLambdaInInlineClassFun() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/contextsAndAccessors/lambdaInInlineClassFun.kt");
|
||||
|
||||
+25
@@ -11916,6 +11916,31 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
||||
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/inlineClasses/contextsAndAccessors"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JVM_IR, true);
|
||||
}
|
||||
|
||||
@TestMetadata("extLambdaInInlineClassFun.kt")
|
||||
public void testExtLambdaInInlineClassFun() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/contextsAndAccessors/extLambdaInInlineClassFun.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("extLambdaInInlineClassFun2.kt")
|
||||
public void testExtLambdaInInlineClassFun2() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/contextsAndAccessors/extLambdaInInlineClassFun2.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("inlineExtLambdaInInlineClassFun.kt")
|
||||
public void testInlineExtLambdaInInlineClassFun() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/contextsAndAccessors/inlineExtLambdaInInlineClassFun.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("inlineExtLambdaInInlineClassFun2.kt")
|
||||
public void testInlineExtLambdaInInlineClassFun2() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/contextsAndAccessors/inlineExtLambdaInInlineClassFun2.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("inlineLambdaInInlineClassFun.kt")
|
||||
public void testInlineLambdaInInlineClassFun() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/contextsAndAccessors/inlineLambdaInInlineClassFun.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("lambdaInInlineClassFun.kt")
|
||||
public void testLambdaInInlineClassFun() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/contextsAndAccessors/lambdaInInlineClassFun.kt");
|
||||
|
||||
+25
@@ -10451,6 +10451,31 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
|
||||
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/inlineClasses/contextsAndAccessors"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JS_IR, true);
|
||||
}
|
||||
|
||||
@TestMetadata("extLambdaInInlineClassFun.kt")
|
||||
public void testExtLambdaInInlineClassFun() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/contextsAndAccessors/extLambdaInInlineClassFun.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("extLambdaInInlineClassFun2.kt")
|
||||
public void testExtLambdaInInlineClassFun2() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/contextsAndAccessors/extLambdaInInlineClassFun2.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("inlineExtLambdaInInlineClassFun.kt")
|
||||
public void testInlineExtLambdaInInlineClassFun() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/contextsAndAccessors/inlineExtLambdaInInlineClassFun.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("inlineExtLambdaInInlineClassFun2.kt")
|
||||
public void testInlineExtLambdaInInlineClassFun2() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/contextsAndAccessors/inlineExtLambdaInInlineClassFun2.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("inlineLambdaInInlineClassFun.kt")
|
||||
public void testInlineLambdaInInlineClassFun() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/contextsAndAccessors/inlineLambdaInInlineClassFun.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("lambdaInInlineClassFun.kt")
|
||||
public void testLambdaInInlineClassFun() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/contextsAndAccessors/lambdaInInlineClassFun.kt");
|
||||
|
||||
+25
@@ -11496,6 +11496,31 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
|
||||
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/inlineClasses/contextsAndAccessors"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JS, true);
|
||||
}
|
||||
|
||||
@TestMetadata("extLambdaInInlineClassFun.kt")
|
||||
public void testExtLambdaInInlineClassFun() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/contextsAndAccessors/extLambdaInInlineClassFun.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("extLambdaInInlineClassFun2.kt")
|
||||
public void testExtLambdaInInlineClassFun2() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/contextsAndAccessors/extLambdaInInlineClassFun2.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("inlineExtLambdaInInlineClassFun.kt")
|
||||
public void testInlineExtLambdaInInlineClassFun() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/contextsAndAccessors/inlineExtLambdaInInlineClassFun.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("inlineExtLambdaInInlineClassFun2.kt")
|
||||
public void testInlineExtLambdaInInlineClassFun2() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/contextsAndAccessors/inlineExtLambdaInInlineClassFun2.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("inlineLambdaInInlineClassFun.kt")
|
||||
public void testInlineLambdaInInlineClassFun() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/contextsAndAccessors/inlineLambdaInInlineClassFun.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("lambdaInInlineClassFun.kt")
|
||||
public void testLambdaInInlineClassFun() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/contextsAndAccessors/lambdaInInlineClassFun.kt");
|
||||
|
||||
Reference in New Issue
Block a user