RFR: JDK-8234922: No compilation error reported not reported for a binding variable when loop broken with label

Jan Lahoda jan.lahoda at oracle.com
Fri Nov 29 11:25:47 UTC 2019


On 28. 11. 19 19:43, Maurizio Cimadamore wrote:
> Looks good - I wonder if we really need to store all trees from the 
> outer loop down to the break statement.

Thanks.

> 
> Shouldn't we just add trees that could potentially be targets of a 
> break? (e.g. labels, switch and other loops)

We can - updated patch:
http://cr.openjdk.java.net/~jlahoda/8234922/webrev.01/

Thanks,
     Jan

> 
> Maurizio
> 
> On 28/11/2019 15:11, Jan Lahoda wrote:
>> Hi,
>>
>> Bug: https://bugs.openjdk.java.net/browse/JDK-8234922
>>
>> The problem described there is basically:
>> ---
>> public class PatternTest {
>>     public static void test(Object o) {
>>         A:
>>         do {
>>             break A;
>>         } while (!(o instanceof String v));
>>         System.out.println("Got: " + v);
>>     }
>> }
>> ---
>>
>> This should not compile, as "v" should not be in scope for the 
>> System.out.println, but javac fails to detect the break, as the break 
>> breaks to a labeled statement, not to the loop. The proposed patch 
>> solves not only this, but also break to any statement that is not 
>> inside the given loop.
>>
>> Webrev:
>> http://cr.openjdk.java.net/~jlahoda/8234922/webrev.00/
>>
>> How does this look?
>>
>> Thanks,
>>     Jan


More information about the compiler-dev mailing list