Fix for KT-9828: DX error on MutableMap.MutableEntry<String, Int> deconstruction: attempt to set or access a value of type java.lang.Object using a local variable of type int.
#KT-9828 Fixed
This commit is contained in:
@@ -681,13 +681,14 @@ public class ExpressionCodegen extends KtVisitor<StackValue, StackValue> impleme
|
|||||||
|
|
||||||
@SuppressWarnings("ConstantConditions") final Type componentAsmType = asmType(componentDescriptor.getReturnType());
|
@SuppressWarnings("ConstantConditions") final Type componentAsmType = asmType(componentDescriptor.getReturnType());
|
||||||
final int componentVarIndex = myFrameMap.enter(componentDescriptor, componentAsmType);
|
final int componentVarIndex = myFrameMap.enter(componentDescriptor, componentAsmType);
|
||||||
|
final Label variableStartLabel = new Label();
|
||||||
scheduleLeaveVariable(new Runnable() {
|
scheduleLeaveVariable(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
myFrameMap.leave(componentDescriptor);
|
myFrameMap.leave(componentDescriptor);
|
||||||
v.visitLocalVariable(componentDescriptor.getName().asString(),
|
v.visitLocalVariable(componentDescriptor.getName().asString(),
|
||||||
componentAsmType.getDescriptor(), null,
|
componentAsmType.getDescriptor(), null,
|
||||||
bodyStart, bodyEnd,
|
variableStartLabel, bodyEnd,
|
||||||
componentVarIndex);
|
componentVarIndex);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -698,6 +699,7 @@ public class ExpressionCodegen extends KtVisitor<StackValue, StackValue> impleme
|
|||||||
|
|
||||||
StackValue value = invokeFunction(call, resolvedCall, StackValue.local(loopParameterVar, asmElementType));
|
StackValue value = invokeFunction(call, resolvedCall, StackValue.local(loopParameterVar, asmElementType));
|
||||||
StackValue.local(componentVarIndex, componentAsmType).store(value, v);
|
StackValue.local(componentVarIndex, componentAsmType).store(value, v);
|
||||||
|
v.visitLabel(variableStartLabel);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
import java.util.*
|
||||||
|
|
||||||
|
fun box(): String {
|
||||||
|
val hashMap = HashMap<String, Int>()
|
||||||
|
hashMap.put("one", 1)
|
||||||
|
hashMap.put("two", 2)
|
||||||
|
for ((key, value) in hashMap) {
|
||||||
|
}
|
||||||
|
|
||||||
|
return "OK"
|
||||||
|
}
|
||||||
+6
@@ -2524,6 +2524,12 @@ public class BlackBoxWithStdlibCodegenTestGenerated extends AbstractBlackBoxCode
|
|||||||
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/boxWithStdlib/multiDeclForArray"), Pattern.compile("^(.+)\\.kt$"), true);
|
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/boxWithStdlib/multiDeclForArray"), Pattern.compile("^(.+)\\.kt$"), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("kt9828.kt")
|
||||||
|
public void testKt9828() throws Exception {
|
||||||
|
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/multiDeclForArray/kt9828.kt");
|
||||||
|
doTestWithStdlib(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("MultiDeclFor.kt")
|
@TestMetadata("MultiDeclFor.kt")
|
||||||
public void testMultiDeclFor() throws Exception {
|
public void testMultiDeclFor() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/multiDeclForArray/MultiDeclFor.kt");
|
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/multiDeclForArray/MultiDeclFor.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user