7157165: Regression: code with disjunctive type crashes javac

Fri, 30 Mar 2012 19:19:50 +0100

author
mcimadamore
date
Fri, 30 Mar 2012 19:19:50 +0100
changeset 1241
c94c09f34701
parent 1240
379bc17d9a26
child 1242
01e7924ea479

7157165: Regression: code with disjunctive type crashes javac
Summary: Bad recovery logic in parser code that checks for generic cast
Reviewed-by: jjg

src/share/classes/com/sun/tools/javac/parser/JavacParser.java file | annotate | diff | comparison | revisions
test/tools/javac/parser/7157165/T7157165.java file | annotate | diff | comparison | revisions
test/tools/javac/parser/7157165/T7157165.out file | annotate | diff | comparison | revisions
     1.1 --- a/src/share/classes/com/sun/tools/javac/parser/JavacParser.java	Fri Mar 30 19:19:09 2012 +0100
     1.2 +++ b/src/share/classes/com/sun/tools/javac/parser/JavacParser.java	Fri Mar 30 19:19:50 2012 +0100
     1.3 @@ -983,12 +983,13 @@
     1.4                                  t = lambdaExpressionOrStatement(variableDeclaratorId(mods, t), pos);
     1.5                                  break;
     1.6                              }
     1.7 -                        } else {
     1.8 -                            Assert.check((mode & EXPR) != 0);
     1.9 +                        } else if ((mode & EXPR) != 0) {
    1.10                              mode = EXPR;
    1.11                              JCExpression e = term2Rest(t1, TreeInfo.shiftPrec);
    1.12                              t = F.at(pos1).Binary(op, t, e);
    1.13                              t = termRest(term1Rest(term2Rest(t, TreeInfo.orPrec)));
    1.14 +                        } else {
    1.15 +                            accept(GT);
    1.16                          }
    1.17                      } else if ((mode & TYPE) != 0 &&
    1.18                              (token.kind == IDENTIFIER || token.kind == ELLIPSIS)) {
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/test/tools/javac/parser/7157165/T7157165.java	Fri Mar 30 19:19:50 2012 +0100
     2.3 @@ -0,0 +1,12 @@
     2.4 +/*
     2.5 + * @test /nodynamiccopyright/
     2.6 + * @bug 7157165
     2.7 + *
     2.8 + * @summary Regression: code with disjunctive type crashes javac
     2.9 + * @compile/fail/ref=T7157165.out -XDrawDiagnostics T7157165.java
    2.10 + *
    2.11 + */
    2.12 +
    2.13 +class T7157165 {
    2.14 +    Foo<? extends A|B> foo1 = null;
    2.15 +}
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/test/tools/javac/parser/7157165/T7157165.out	Fri Mar 30 19:19:50 2012 +0100
     3.3 @@ -0,0 +1,4 @@
     3.4 +T7157165.java:11:20: compiler.err.expected: >
     3.5 +T7157165.java:11:21: compiler.err.expected: ';'
     3.6 +T7157165.java:11:22: compiler.err.illegal.start.of.type
     3.7 +3 errors

mercurial