diff --git a/compiler/frontend/src/org/jetbrains/kotlin/cfg/JetControlFlowProcessor.java b/compiler/frontend/src/org/jetbrains/kotlin/cfg/JetControlFlowProcessor.java index aa4a32e9156..a4f54e8e520 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/cfg/JetControlFlowProcessor.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/cfg/JetControlFlowProcessor.java @@ -485,7 +485,9 @@ public class JetControlFlowProcessor { if (setResolvedCall == null) { generateArrayAccess(lhs, null); - List arguments = Arrays.asList(getBoundOrUnreachableValue(lhs), rhsDeferredValue.invoke()); + List arguments = KotlinPackage.filterNotNull( + Arrays.asList(getBoundOrUnreachableValue(lhs), rhsDeferredValue.invoke()) + ); builder.magic(parentExpression, parentExpression, arguments, defaultTypeMap(arguments), MagicKind.UNRESOLVED_CALL); return; diff --git a/compiler/testData/cfg/arrays/arraySetNoRHS.instructions b/compiler/testData/cfg/arrays/arraySetNoRHS.instructions new file mode 100644 index 00000000000..4e38d269166 --- /dev/null +++ b/compiler/testData/cfg/arrays/arraySetNoRHS.instructions @@ -0,0 +1,23 @@ +== foo == +fun foo(a: Array) { + a[1] = +} +--------------------- +L0: + 1 + v(a: Array) + magic[FAKE_INITIALIZER](a: Array) -> + w(a|) + 2 mark({ a[1] = }) + mark(a[1]) + magic[UNRESOLVED_CALL](a) -> + r(1) -> + magic[UNRESOLVED_CALL](a[1]|, ) -> + magic[UNRESOLVED_CALL](a[1] =|) -> +L1: + 1 NEXT:[] +error: + PREV:[] +sink: + PREV:[, ] +===================== diff --git a/compiler/testData/cfg/arrays/arraySetNoRHS.kt b/compiler/testData/cfg/arrays/arraySetNoRHS.kt new file mode 100644 index 00000000000..bdb549bc6b2 --- /dev/null +++ b/compiler/testData/cfg/arrays/arraySetNoRHS.kt @@ -0,0 +1,3 @@ +fun foo(a: Array) { + a[1] = +} \ No newline at end of file diff --git a/compiler/testData/cfg/arrays/arraySetNoRHS.values b/compiler/testData/cfg/arrays/arraySetNoRHS.values new file mode 100644 index 00000000000..f3464b94a28 --- /dev/null +++ b/compiler/testData/cfg/arrays/arraySetNoRHS.values @@ -0,0 +1,12 @@ +== foo == +fun foo(a: Array) { + a[1] = +} +--------------------- + : {<: Array} NEW: magic[FAKE_INITIALIZER](a: Array) -> +a : * NEW: magic[UNRESOLVED_CALL](a) -> +1 : * NEW: r(1) -> +a[1] : * NEW: magic[UNRESOLVED_CALL](a[1]|, ) -> +a[1] = : * NEW: magic[UNRESOLVED_CALL](a[1] =|) -> +{ a[1] = } : * COPY +===================== diff --git a/compiler/tests/org/jetbrains/kotlin/cfg/ControlFlowTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/cfg/ControlFlowTestGenerated.java index f7d682edb22..b64e607b845 100644 --- a/compiler/tests/org/jetbrains/kotlin/cfg/ControlFlowTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/cfg/ControlFlowTestGenerated.java @@ -93,6 +93,12 @@ public class ControlFlowTestGenerated extends AbstractControlFlowTest { doTest(fileName); } + @TestMetadata("arraySetNoRHS.kt") + public void testArraySetNoRHS() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/cfg/arrays/arraySetNoRHS.kt"); + doTest(fileName); + } + @TestMetadata("arraySetPlusAssign.kt") public void testArraySetPlusAssign() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/cfg/arrays/arraySetPlusAssign.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/cfg/PseudoValueTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/cfg/PseudoValueTestGenerated.java index fda6ae9a420..a1fec86701d 100644 --- a/compiler/tests/org/jetbrains/kotlin/cfg/PseudoValueTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/cfg/PseudoValueTestGenerated.java @@ -99,6 +99,12 @@ public class PseudoValueTestGenerated extends AbstractPseudoValueTest { doTest(fileName); } + @TestMetadata("arraySetNoRHS.kt") + public void testArraySetNoRHS() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/cfg/arrays/arraySetNoRHS.kt"); + doTest(fileName); + } + @TestMetadata("arraySetPlusAssign.kt") public void testArraySetPlusAssign() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/cfg/arrays/arraySetPlusAssign.kt");