RFR: 8328649: Disallow enclosing instances for local classes in constructor prologues

Archie Cobbs acobbs at openjdk.org
Tue Apr 2 18:18:59 UTC 2024


On Thu, 21 Mar 2024 21:49:27 GMT, Vicente Romero <vromero at openjdk.org> wrote:

>> A local class declared in a static context is not supposed to have an immediately enclosing instance (§15.9.2). That includes local classes declared in constructors prior to `super()` (during the "constructor prologue" in the new lingo).
>> 
>> However, the compiler is allowing code like this to successfully compile:
>> 
>> import java.util.concurrent.atomic.*;
>> public class Test extends AtomicReference<Object> {
>>   
>>     public Test() {
>>         super(switch (0) {
>>           default -> {
>>               class Local { { Test.this.hashCode(); } }   // this should fail
>>               yield null;
>>             }
>>         });
>>     }
>> }
>> 
>> This patch fixes the "leak".
>
> looks good to me

@vicente-romero-oracle, would you (or anyone) mind reviewing the [associated CSR](https://bugs.openjdk.org/browse/JDK-8328706) per @jddarcy's request?

Thanks.

-------------

PR Comment: https://git.openjdk.org/jdk/pull/18416#issuecomment-2032737965


More information about the compiler-dev mailing list