From 2f6c4a04727b2acb67e27cdd21b1f39f0b5815f2 Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Fri, 21 Dec 2018 11:35:28 +0300 Subject: [PATCH] Use original method signature to call accessor for hidden constructor #KT-28855 Fixed Target versions 1.3.30 --- .../kotlin/codegen/ExpressionCodegen.java | 2 +- .../box/inlineClasses/hiddenConstructor/kt28855.kt | 14 ++++++++++++++ .../codegen/BlackBoxCodegenTestGenerated.java | 5 +++++ .../codegen/LightAnalysisModeTestGenerated.java | 5 +++++ .../codegen/ir/IrBlackBoxCodegenTestGenerated.java | 5 +++++ .../semantics/IrJsCodegenBoxTestGenerated.java | 5 +++++ .../test/semantics/JsCodegenBoxTestGenerated.java | 5 +++++ 7 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/codegen/box/inlineClasses/hiddenConstructor/kt28855.kt diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java index 57cba206730..90bb9ccf007 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java @@ -2271,7 +2271,7 @@ public class ExpressionCodegen extends KtVisitor impleme // Constructors with inline class type value parameters should always be called using an accessor. // NB this will require accessors even if the constructor itself is in a different module. return new AccessorForConstructorDescriptor( - (ClassConstructorDescriptor) descriptor, + (ClassConstructorDescriptor) descriptor.getOriginal(), descriptor.getContainingDeclaration(), getSuperCallTarget(resolvedCall.getCall()), AccessorKind.NORMAL diff --git a/compiler/testData/codegen/box/inlineClasses/hiddenConstructor/kt28855.kt b/compiler/testData/codegen/box/inlineClasses/hiddenConstructor/kt28855.kt new file mode 100644 index 00000000000..cd532074e77 --- /dev/null +++ b/compiler/testData/codegen/box/inlineClasses/hiddenConstructor/kt28855.kt @@ -0,0 +1,14 @@ +// !LANGUAGE: +InlineClasses +// IGNORE_BACKEND: JVM_IR +// WITH_RUNTIME + +class C(val x: T, vararg ys: UInt) { + val y0 = ys[0] +} + +fun box(): String { + val c = C("a", 42u) + if (c.y0 != 42u) throw AssertionError() + + return "OK" +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index f8b37bbc1eb..8d7e4494fd7 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -12729,6 +12729,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/inlineClasses/hiddenConstructor/innerClassConstructor.kt"); } + @TestMetadata("kt28855.kt") + public void testKt28855() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/hiddenConstructor/kt28855.kt"); + } + @TestMetadata("primaryConstructor.kt") public void testPrimaryConstructor() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/hiddenConstructor/primaryConstructor.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 75f8e04d472..41c92fd54c7 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -12729,6 +12729,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/inlineClasses/hiddenConstructor/innerClassConstructor.kt"); } + @TestMetadata("kt28855.kt") + public void testKt28855() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/hiddenConstructor/kt28855.kt"); + } + @TestMetadata("primaryConstructor.kt") public void testPrimaryConstructor() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/hiddenConstructor/primaryConstructor.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index 0072ed97b85..c8285d8bf0e 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -12734,6 +12734,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/inlineClasses/hiddenConstructor/innerClassConstructor.kt"); } + @TestMetadata("kt28855.kt") + public void testKt28855() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/hiddenConstructor/kt28855.kt"); + } + @TestMetadata("primaryConstructor.kt") public void testPrimaryConstructor() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/hiddenConstructor/primaryConstructor.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/IrJsCodegenBoxTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/IrJsCodegenBoxTestGenerated.java index 0e5a1f47c81..531eb8c5eae 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/IrJsCodegenBoxTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/IrJsCodegenBoxTestGenerated.java @@ -10309,6 +10309,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/inlineClasses/hiddenConstructor/innerClassConstructor.kt"); } + @TestMetadata("kt28855.kt") + public void testKt28855() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/hiddenConstructor/kt28855.kt"); + } + @TestMetadata("primaryConstructor.kt") public void testPrimaryConstructor() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/hiddenConstructor/primaryConstructor.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java index b7e68ac8627..c73788fd2ca 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java @@ -11354,6 +11354,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/inlineClasses/hiddenConstructor/innerClassConstructor.kt"); } + @TestMetadata("kt28855.kt") + public void testKt28855() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/hiddenConstructor/kt28855.kt"); + } + @TestMetadata("primaryConstructor.kt") public void testPrimaryConstructor() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/hiddenConstructor/primaryConstructor.kt");