8269354: javac crashes when processing parenthesized pattern in instanceof
Reviewed-by: vromero
This commit is contained in:
parent
c16d1fc981
commit
a8385feb30
src/jdk.compiler/share/classes/com/sun/tools/javac/comp
test/langtools/tools/javac/patterns
@ -190,6 +190,7 @@ public class TransPatterns extends TreeTranslator {
|
||||
syms.objectType
|
||||
: tree.expr.type;
|
||||
VarSymbol prevCurrentValue = currentValue;
|
||||
bindingContext = new BasicBindingContext();
|
||||
try {
|
||||
JCExpression translatedExpr = translate(tree.expr);
|
||||
Symbol exprSym = TreeInfo.symbol(translatedExpr);
|
||||
@ -206,16 +207,20 @@ public class TransPatterns extends TreeTranslator {
|
||||
}
|
||||
|
||||
Type principalType = principalType((JCPattern) tree.pattern);
|
||||
result = makeBinary(Tag.AND,
|
||||
makeTypeTest(make.Ident(currentValue), make.Type(principalType)),
|
||||
(JCExpression) this.<JCTree>translate(tree.pattern));
|
||||
JCExpression resultExpression=
|
||||
makeBinary(Tag.AND,
|
||||
makeTypeTest(make.Ident(currentValue), make.Type(principalType)),
|
||||
(JCExpression) this.<JCTree>translate(tree.pattern));
|
||||
if (currentValue != exprSym) {
|
||||
result = make.at(tree.pos).LetExpr(make.VarDef(currentValue, translatedExpr),
|
||||
(JCExpression)result).setType(syms.booleanType);
|
||||
((LetExpr) result).needsCond = true;
|
||||
resultExpression =
|
||||
make.at(tree.pos).LetExpr(make.VarDef(currentValue, translatedExpr),
|
||||
resultExpression).setType(syms.booleanType);
|
||||
((LetExpr) resultExpression).needsCond = true;
|
||||
}
|
||||
result = bindingContext.decorateExpression(resultExpression);
|
||||
} finally {
|
||||
currentValue = prevCurrentValue;
|
||||
bindingContext.pop();
|
||||
}
|
||||
} else {
|
||||
super.visitTypeTest(tree);
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 8262891
|
||||
* @bug 8262891 8269354
|
||||
* @summary Test parenthesized pattern
|
||||
* @compile --enable-preview -source ${jdk.version} Parenthesized.java
|
||||
* @run main/othervm --enable-preview Parenthesized
|
||||
@ -46,6 +46,8 @@ public class Parenthesized {
|
||||
if (o instanceof (String s && s.isEmpty())) {
|
||||
System.err.println("OK: " + s);
|
||||
}
|
||||
boolean b1 = o instanceof (String s && s.isEmpty());
|
||||
boolean b2 = o instanceof String s && s.isEmpty();
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user