Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8342575

[lworld] Compiler should reject volatile fields in value classes

XMLWordPrintable

      According to JLS,

      It is a compile-time error if a final variable is also declared volatile.

      Fields in value classes are implicitly final, so the compiler should reject volatile keyword in this context.

      However, the following code compiles:

      value class VC {
          volatile int f = 1;
      }

      public void main() {
          new VC();
      }

      And then a ClassFormatError is thrown in runtime:
      Exception in thread "main" java.lang.ClassFormatError: Illegal field modifiers (fields cannot be final and volatile) in class Main$VC: 0x850
      at java.base/java.lang.ClassLoader.defineClass1(Native Method)
      at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1026)
      at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
      at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:862)
      at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:760)
      at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:681)
      at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:639)
      at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
      at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:528)
      at Main.main(Main.java:6)

            vromero Vicente Arturo Romero Zaldivar
            eananeva Ella Ananeva
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: