diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java index f38b7f83502..b54a61fdc1c 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java @@ -1453,7 +1453,7 @@ else if ((sym.kind == TYP || PRIVATE, PUBLIC | PROTECTED) && - checkDisjoint(pos, flags, + checkDisjoint(pos, (flags | implicit), // complain against volatile & implcitly final entities too. FINAL, VOLATILE) && diff --git a/test/langtools/tools/javac/valhalla/lworld-values/NoVolatileFields.java b/test/langtools/tools/javac/valhalla/lworld-values/NoVolatileFields.java new file mode 100644 index 00000000000..9e8261fee0c --- /dev/null +++ b/test/langtools/tools/javac/valhalla/lworld-values/NoVolatileFields.java @@ -0,0 +1,18 @@ +/* + * @test /nodynamiccopyright/ + * @bug 8230082 + * @summary Javac should not allow inline type's fields to be volatile (as they are final) + * @compile/fail/ref=NoVolatileFields.out -XDrawDiagnostics NoVolatileFields.java + */ + +public class NoVolatileFields { + + static class Foo { + volatile final int i = 0; // Error + } + + static inline class Bar { + volatile int i = 0; // Error + } +} + diff --git a/test/langtools/tools/javac/valhalla/lworld-values/NoVolatileFields.out b/test/langtools/tools/javac/valhalla/lworld-values/NoVolatileFields.out new file mode 100644 index 00000000000..58a351dadde --- /dev/null +++ b/test/langtools/tools/javac/valhalla/lworld-values/NoVolatileFields.out @@ -0,0 +1,3 @@ +NoVolatileFields.java:11:28: compiler.err.illegal.combination.of.modifiers: final, volatile +NoVolatileFields.java:15:22: compiler.err.illegal.combination.of.modifiers: final, volatile +2 errors