< prev index next >
src/share/classes/com/sun/tools/javac/jvm/Gen.java
Print this page
rev 3804 : 8067429: java.lang.VerifyError: Inconsistent stackmap frames at branch target
*** 1,7 ****
/*
! * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
--- 1,7 ----
/*
! * Copyright (c) 1999, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
*** 1220,1243 ****
c = items.makeCondItem(goto_);
}
code.resolve(c.jumpTrue(), startpc);
code.resolve(c.falseJumps);
}
! code.resolve(loopEnv.info.exit);
! if (loopEnv.info.exit != null) {
! loopEnv.info.exit.state.defined.excludeFrom(code.nextreg);
}
}
public void visitForeachLoop(JCEnhancedForLoop tree) {
throw new AssertionError(); // should have been removed by Lower.
}
public void visitLabelled(JCLabeledStatement tree) {
Env<GenContext> localEnv = env.dup(tree, new GenContext());
genStat(tree.body, localEnv, CRT_STATEMENT);
! code.resolve(localEnv.info.exit);
}
public void visitSwitch(JCSwitch tree) {
int limit = code.nextreg;
Assert.check(!tree.selector.type.hasTag(CLASS));
--- 1220,1248 ----
c = items.makeCondItem(goto_);
}
code.resolve(c.jumpTrue(), startpc);
code.resolve(c.falseJumps);
}
! Chain exit = loopEnv.info.exit;
! if (exit != null) {
! code.resolve(exit);
! exit.state.defined.excludeFrom(code.nextreg);
}
}
public void visitForeachLoop(JCEnhancedForLoop tree) {
throw new AssertionError(); // should have been removed by Lower.
}
public void visitLabelled(JCLabeledStatement tree) {
Env<GenContext> localEnv = env.dup(tree, new GenContext());
genStat(tree.body, localEnv, CRT_STATEMENT);
! Chain exit = localEnv.info.exit;
! if (exit != null) {
! code.resolve(exit);
! exit.state.defined.excludeFrom(code.nextreg);
! }
}
public void visitSwitch(JCSwitch tree) {
int limit = code.nextreg;
Assert.check(!tree.selector.type.hasTag(CLASS));
*** 1342,1352 ****
// Generate code for the statements in this case.
genStats(c.stats, switchEnv, CRT_FLOW_TARGET);
}
// Resolve all breaks.
! code.resolve(switchEnv.info.exit);
// If we have not set the default offset, we do so now.
if (code.get4(tableBase) == -1) {
code.put4(tableBase, code.entryPoint(stateSwitch) - startpc);
}
--- 1347,1361 ----
// Generate code for the statements in this case.
genStats(c.stats, switchEnv, CRT_FLOW_TARGET);
}
// Resolve all breaks.
! Chain exit = switchEnv.info.exit;
! if (exit != null) {
! code.resolve(exit);
! exit.state.defined.excludeFrom(code.nextreg);
! }
// If we have not set the default offset, we do so now.
if (code.get4(tableBase) == -1) {
code.put4(tableBase, code.entryPoint(stateSwitch) - startpc);
}
< prev index next >