From d9593c7a344d92c0ba917530252dc148597095c3 Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Fri, 24 Aug 2018 17:29:47 +0300 Subject: [PATCH] Add tests for inline class variables captured in closure --- .../inlineClassValueCapturedInInlineLambda.kt | 28 ++++++++++++++++++ ...lineClassValueCapturedInNonInlineLambda.kt | 29 +++++++++++++++++++ .../codegen/BlackBoxCodegenTestGenerated.java | 10 +++++++ .../LightAnalysisModeTestGenerated.java | 10 +++++++ .../ir/IrBlackBoxCodegenTestGenerated.java | 10 +++++++ .../IrJsCodegenBoxTestGenerated.java | 10 +++++++ .../semantics/JsCodegenBoxTestGenerated.java | 10 +++++++ 7 files changed, 107 insertions(+) create mode 100644 compiler/testData/codegen/box/inlineClasses/inlineClassValueCapturedInInlineLambda.kt create mode 100644 compiler/testData/codegen/box/inlineClasses/inlineClassValueCapturedInNonInlineLambda.kt diff --git a/compiler/testData/codegen/box/inlineClasses/inlineClassValueCapturedInInlineLambda.kt b/compiler/testData/codegen/box/inlineClasses/inlineClassValueCapturedInInlineLambda.kt new file mode 100644 index 00000000000..360e3013446 --- /dev/null +++ b/compiler/testData/codegen/box/inlineClasses/inlineClassValueCapturedInInlineLambda.kt @@ -0,0 +1,28 @@ +// !LANGUAGE: +InlineClasses +// IGNORE_BACKEND: JVM_IR + +inline class Z(val int: Int) +inline class L(val long: Long) +inline class Str(val string: String) +inline class Obj(val obj: Any) + +fun box(): String { + var xz = Z(0) + var xl = L(0L) + var xs = Str("") + var xo = Obj("") + + run { + xz = Z(42) + xl = L(1234L) + xs = Str("abc") + xo = Obj("def") + } + + if (xz.int != 42) throw AssertionError() + if (xl.long != 1234L) throw AssertionError() + if (xs.string != "abc") throw AssertionError() + if (xo.obj != "def") throw AssertionError() + + return "OK" +} \ No newline at end of file diff --git a/compiler/testData/codegen/box/inlineClasses/inlineClassValueCapturedInNonInlineLambda.kt b/compiler/testData/codegen/box/inlineClasses/inlineClassValueCapturedInNonInlineLambda.kt new file mode 100644 index 00000000000..f5bd38ba00f --- /dev/null +++ b/compiler/testData/codegen/box/inlineClasses/inlineClassValueCapturedInNonInlineLambda.kt @@ -0,0 +1,29 @@ +// !LANGUAGE: +InlineClasses +// IGNORE_BACKEND: JVM_IR + +inline class Z(val int: Int) +inline class L(val long: Long) +inline class Str(val string: String) +inline class Obj(val obj: Any) + +fun box(): String { + var xz = Z(0) + var xl = L(0L) + var xs = Str("") + var xo = Obj("") + + val fn = { + xz = Z(42) + xl = L(1234L) + xs = Str("abc") + xo = Obj("def") + } + fn() + + if (xz.int != 42) throw AssertionError() + if (xl.long != 1234L) throw AssertionError() + if (xs.string != "abc") throw AssertionError() + if (xo.obj != "def") 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 0155315008f..7905ddc954e 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -11699,6 +11699,16 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/inlineClasses/inlineClassPropertyReferenceGetAndSet.kt"); } + @TestMetadata("inlineClassValueCapturedInInlineLambda.kt") + public void testInlineClassValueCapturedInInlineLambda() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/inlineClassValueCapturedInInlineLambda.kt"); + } + + @TestMetadata("inlineClassValueCapturedInNonInlineLambda.kt") + public void testInlineClassValueCapturedInNonInlineLambda() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/inlineClassValueCapturedInNonInlineLambda.kt"); + } + @TestMetadata("inlineClassValuesInsideStrings.kt") public void testInlineClassValuesInsideStrings() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/inlineClassValuesInsideStrings.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 08dd95d94f7..1d1d347bb94 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -11699,6 +11699,16 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/inlineClasses/inlineClassPropertyReferenceGetAndSet.kt"); } + @TestMetadata("inlineClassValueCapturedInInlineLambda.kt") + public void testInlineClassValueCapturedInInlineLambda() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/inlineClassValueCapturedInInlineLambda.kt"); + } + + @TestMetadata("inlineClassValueCapturedInNonInlineLambda.kt") + public void testInlineClassValueCapturedInNonInlineLambda() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/inlineClassValueCapturedInNonInlineLambda.kt"); + } + @TestMetadata("inlineClassValuesInsideStrings.kt") public void testInlineClassValuesInsideStrings() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/inlineClassValuesInsideStrings.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index 57adfcf9363..3a3b0aa874b 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -11704,6 +11704,16 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/inlineClasses/inlineClassPropertyReferenceGetAndSet.kt"); } + @TestMetadata("inlineClassValueCapturedInInlineLambda.kt") + public void testInlineClassValueCapturedInInlineLambda() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/inlineClassValueCapturedInInlineLambda.kt"); + } + + @TestMetadata("inlineClassValueCapturedInNonInlineLambda.kt") + public void testInlineClassValueCapturedInNonInlineLambda() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/inlineClassValueCapturedInNonInlineLambda.kt"); + } + @TestMetadata("inlineClassValuesInsideStrings.kt") public void testInlineClassValuesInsideStrings() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/inlineClassValuesInsideStrings.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 1afc1c0bf58..392d2698615 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 @@ -10224,6 +10224,16 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/inlineClasses/inlineClassPropertyReferenceGetAndSet.kt"); } + @TestMetadata("inlineClassValueCapturedInInlineLambda.kt") + public void testInlineClassValueCapturedInInlineLambda() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/inlineClassValueCapturedInInlineLambda.kt"); + } + + @TestMetadata("inlineClassValueCapturedInNonInlineLambda.kt") + public void testInlineClassValueCapturedInNonInlineLambda() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/inlineClassValueCapturedInNonInlineLambda.kt"); + } + @TestMetadata("inlineClassValuesInsideStrings.kt") public void testInlineClassValuesInsideStrings() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/inlineClassValuesInsideStrings.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 7c7ea1188d1..3eb6ccb11b5 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 @@ -11284,6 +11284,16 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/inlineClasses/inlineClassPropertyReferenceGetAndSet.kt"); } + @TestMetadata("inlineClassValueCapturedInInlineLambda.kt") + public void testInlineClassValueCapturedInInlineLambda() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/inlineClassValueCapturedInInlineLambda.kt"); + } + + @TestMetadata("inlineClassValueCapturedInNonInlineLambda.kt") + public void testInlineClassValueCapturedInNonInlineLambda() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/inlineClassValueCapturedInNonInlineLambda.kt"); + } + @TestMetadata("inlineClassValuesInsideStrings.kt") public void testInlineClassValuesInsideStrings() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/inlineClassValuesInsideStrings.kt");