RFR 8178427: NPE in Infer$CheckUpperBounds

Maurizio Cimadamore maurizio.cimadamore at oracle.com
Tue Nov 28 18:21:05 UTC 2017


Hi,
please review this patch which fixes a javac crash during inference:

http://cr.openjdk.java.net/~mcimadamore/8178427/

This crash is caused by the fact that we enter in 
PartiallyInferredMethod.check() routine with a result info that has the 
target type set to void.

This is a consequence of the fact that the overloadCheck() method for 
explicit lambdas in ArgumentAttr does not report errors when you have a 
statement lambda and the statement lambda contains a 'return' statement 
that doesn't match the expected target type - more specifically, if it's 
a 'return' w/o expression, the target type must be void; if it's a 
'return E', then the target-type must be non-void.

In JDK8 we used to carry out these checks in Attr.visitReturn (during 
speculative attr), so we never really checked the guts of the return 
expression if the expected type was void, as visitReturn would throw and 
make applicability fail.

The solution is to partially replicate the Attr.visitReturn logic in 
ArgumentAttr, to make sure that we don't end up calling checks where we 
did not use to.

Since I was there, I've simplified the logic a little bit, and made it 
more explicit.

Cheers
Maurizio



More information about the compiler-dev mailing list