提交 ebb21092 编写于 作者: M mcimadamore

6999635: Multicatch: crash while compiling simple code with a multicatch parameter

Summary: missing erasure when computing stackmaps leads to assertion error
Reviewed-by: darcy
上级 7442873d
...@@ -993,7 +993,9 @@ public class ClassWriter extends ClassFile { ...@@ -993,7 +993,9 @@ public class ClassWriter extends ClassFile {
/** Enter an inner class into the `innerClasses' set/queue. /** Enter an inner class into the `innerClasses' set/queue.
*/ */
void enterInner(ClassSymbol c) { void enterInner(ClassSymbol c) {
assert !c.type.isCompound(); if (c.type.isCompound()) {
throw new AssertionError("Unexpected intersection type: " + c.type);
}
try { try {
c.complete(); c.complete();
} catch (CompletionFailure ex) { } catch (CompletionFailure ex) {
......
...@@ -1304,7 +1304,7 @@ public class Code { ...@@ -1304,7 +1304,7 @@ public class Code {
stackCount = 0; stackCount = 0;
for (int i=0; i<state.stacksize; i++) { for (int i=0; i<state.stacksize; i++) {
if (state.stack[i] != null) { if (state.stack[i] != null) {
frame.stack[stackCount++] = state.stack[i]; frame.stack[stackCount++] = types.erasure(state.stack[i]);
} }
} }
......
/*
* Copyright (c) 2010, 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.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 6993963
* @summary Multicatch: crash while compiling simple code with a multicatch parameter
* @compile Pos08.java
*/
class Pos08 {
interface Foo {}
static class X1 extends Exception implements Foo {}
static class X2 extends Exception implements Foo {}
void m(boolean cond) {
try {
if (cond)
throw new X1();
else
throw new X2();
}
catch (final X1 | X2 ex) {}
}
}
/*
* Copyright (c) 2010, 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.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 6993963
* @summary Multicatch: crash while compiling simple code with a multicatch parameter
* @compile Pos08eff_final.java
*/
class Pos08eff_final {
interface Foo {}
static class X1 extends Exception implements Foo {}
static class X2 extends Exception implements Foo {}
void m(boolean cond) {
try {
if (cond)
throw new X1();
else
throw new X2();
}
catch (X1 | X2 ex) {}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册