diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/range/forLoop/ForInCharSequenceLoopGenerator.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/range/forLoop/ForInCharSequenceLoopGenerator.kt index 2f4ed0657e5..92f35e808cd 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/range/forLoop/ForInCharSequenceLoopGenerator.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/range/forLoop/ForInCharSequenceLoopGenerator.kt @@ -81,8 +81,8 @@ class ForInCharSequenceLoopGenerator( v.load(charSequenceVar, charSequenceType) v.load(indexVar, Type.INT_TYPE) v.invokeCharSequenceMethod("charAt", "(I)C") - StackValue.onStack(Type.CHAR_TYPE).put(asmElementType, elementType, codegen.v) - v.store(loopParameterVar, asmElementType) + StackValue.onStack(Type.CHAR_TYPE).put(loopParameterType, loopParameterKotlinType, codegen.v) + v.store(loopParameterVar, loopParameterType) } override fun checkPostConditionAndIncrement(loopExit: Label) { diff --git a/compiler/testData/codegen/box/controlStructures/forNullableCharInString.kt b/compiler/testData/codegen/box/controlStructures/forNullableCharInString.kt new file mode 100644 index 00000000000..fc15e3b1bb0 --- /dev/null +++ b/compiler/testData/codegen/box/controlStructures/forNullableCharInString.kt @@ -0,0 +1,12 @@ +// WITH_RUNTIME + +fun box(): String { + val str = "abcd" + var r = "" + for (c: Char? in str) { + r = r + c ?: "?" + } + if (r != "abcd") 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 1ff8ca54214..863955f2840 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -4605,6 +4605,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/controlStructures/forLoopMemberExtensionNext.kt"); } + @TestMetadata("forNullableCharInString.kt") + public void testForNullableCharInString() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forNullableCharInString.kt"); + } + @TestMetadata("forUserType.kt") public void testForUserType() throws Exception { runTest("compiler/testData/codegen/box/controlStructures/forUserType.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 6c1116cddf4..d7c0da62e91 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -4605,6 +4605,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/controlStructures/forLoopMemberExtensionNext.kt"); } + @TestMetadata("forNullableCharInString.kt") + public void testForNullableCharInString() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forNullableCharInString.kt"); + } + @TestMetadata("forUserType.kt") public void testForUserType() throws Exception { runTest("compiler/testData/codegen/box/controlStructures/forUserType.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index ee502b41221..6735de74cc1 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -4605,6 +4605,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/controlStructures/forLoopMemberExtensionNext.kt"); } + @TestMetadata("forNullableCharInString.kt") + public void testForNullableCharInString() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forNullableCharInString.kt"); + } + @TestMetadata("forUserType.kt") public void testForUserType() throws Exception { runTest("compiler/testData/codegen/box/controlStructures/forUserType.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 f08113e89c0..b841fa8a2ad 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 @@ -4275,6 +4275,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/controlStructures/forLoopMemberExtensionNext.kt"); } + @TestMetadata("forNullableCharInString.kt") + public void testForNullableCharInString() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forNullableCharInString.kt"); + } + @TestMetadata("forUserType.kt") public void testForUserType() throws Exception { runTest("compiler/testData/codegen/box/controlStructures/forUserType.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 63272277185..1c709fad860 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 @@ -4305,6 +4305,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/controlStructures/forLoopMemberExtensionNext.kt"); } + @TestMetadata("forNullableCharInString.kt") + public void testForNullableCharInString() throws Exception { + runTest("compiler/testData/codegen/box/controlStructures/forNullableCharInString.kt"); + } + @TestMetadata("forUserType.kt") public void testForUserType() throws Exception { runTest("compiler/testData/codegen/box/controlStructures/forUserType.kt");