From 48d92b9bbca515feb667f852a8da35f7af89712f Mon Sep 17 00:00:00 2001 From: Michael Bogdanov Date: Fri, 4 Jul 2014 13:46:04 +0400 Subject: [PATCH] Analyzer Frame patching cause exception on void non local returns --- .../jet/codegen/inline/MethodInliner.java | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/inline/MethodInliner.java b/compiler/backend/src/org/jetbrains/jet/codegen/inline/MethodInliner.java index 320bae07a19..245df734c73 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/inline/MethodInliner.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/inline/MethodInliner.java @@ -307,7 +307,26 @@ public class MethodInliner { protected MethodNode markPlacesForInlineAndRemoveInlinable(@NotNull MethodNode node) { node = prepareNode(node); - Analyzer analyzer = new Analyzer(new SourceInterpreter()); + Analyzer analyzer = new Analyzer(new SourceInterpreter()) { + @NotNull + @Override + protected Frame newFrame( + int nLocals, int nStack + ) { + return new Frame(nLocals, nStack) { + @Override + public void execute( + @NotNull AbstractInsnNode insn, Interpreter interpreter + ) throws AnalyzerException { + if (insn.getOpcode() == Opcodes.RETURN) { + //there is exception on void non local return in frame + return; + } + super.execute(insn, interpreter); + } + }; + } + }; Frame[] sources; try {