crash with -Xjcov and union types
Joel Borggren-Franck
joel.franck at oracle.com
Fri Oct 24 12:32:32 UTC 2014
Hi again,
There is a method for visiting a List<JCTree> in CRTable, using that you
can rewrite the method to:
+ @Override
+ public void visitTypeUnion(JCTypeUnion tree) {
+ SourceRange sr = new SourceRange(startPos(tree), endPos(tree));
+ sr.mergeWith(csp(tree.alternatives));
+ result = sr;
+ }
A bit cleaner IMHO and should work the same. Works for you?
cheers
/Joel
On 2014-09-25, Liam Miller-Cushon wrote:
> I'm seeing crashes with -Xjcov enabled while compiling code with union
> types. This seems to affect javac 7 through 9. I've attached a possible
> fix, and a jtreg test for the crash.
>
>
> Repro:
>
>
> === Test.java ===
>
> class Test {
>
> void m() {
>
> try {
>
> return;
>
> } catch (IllegalStateException | IllegalArgumentException e) {
>
> }
>
> }
>
> }
>
> ===
>
>
> $ javac Test.java
>
> ...
>
> An exception has occurred in the compiler (1.8.0_20). Please file a bug at
> the Java Developer Connection (http://java.sun.com/webapps/bugreport)
> after checking the Bug Parade for duplicates. Include your program and the
> following diagnostic in your report. Thank you.
>
> java.lang.AssertionError
>
> at com.sun.tools.javac.util.Assert.error(Assert.java:126)
>
> at
> com.sun.tools.javac.jvm.CRTable$SourceComputer.visitTree(CRTable.java:529)
>
> at com.sun.tools.javac.tree.JCTree$Visitor.visitTypeUnion(JCTree.java:2577)
>
> ...
> # HG changeset patch
> # User cushon <cushon at google.com>
> # Date 1411681109 25200
> # Node ID ea73aee87ad23ecca9eb6c3133ba66807367d790
> # Parent 3c7c7485fab732143c30f4bf71a7ab8411763380
> Fix -Xjcov crash with union types.
>
> diff -r 3c7c7485fab7 -r ea73aee87ad2 src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/CRTable.java
> --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/CRTable.java Thu Sep 25 13:54:45 2014 -0700
> +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/CRTable.java Thu Sep 25 14:38:29 2014 -0700
> @@ -517,6 +517,15 @@
> result = sr;
> }
>
> + @Override
> + public void visitTypeUnion(JCTypeUnion tree) {
> + SourceRange sr = new SourceRange(startPos(tree), endPos(tree));
> + for (JCTree alternative : tree.alternatives) {
> + sr.mergeWith(csp(alternative));
> + }
> + result = sr;
> + }
> +
> public void visitWildcard(JCWildcard tree) {
> result = null;
> }
> diff -r 3c7c7485fab7 -r ea73aee87ad2 test/tools/javac/options/XjcovUnionType.java
> --- /dev/null Thu Jan 01 00:00:00 1970 +0000
> +++ b/test/tools/javac/options/XjcovUnionType.java Thu Sep 25 14:38:29 2014 -0700
> @@ -0,0 +1,38 @@
> +/*
> + * Copyright (c) 2014, 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 1234567
> + * @summary -Xjcov causes crash with union types
> + * @compile -Xjcov XjcovUnionType.java
> + */
> +
> +public class XjcovUnionType {
> + public static void main(String[] args) {
> + try {
> + return;
> + } catch (IllegalStateException | IllegalArgumentException e) {
> + }
> + }
> +}
More information about the compiler-dev
mailing list