diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java index f963492b20e..3e02d2e26b3 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java @@ -3723,6 +3723,11 @@ public class JavacParser implements Parser { JCExpression pn = qualident(false); if (pn.hasTag(Tag.IDENT) && ((JCIdent)pn).name != names._this) { name = ((JCIdent)pn).name; + } else if (lambdaParameter && type == null) { + // we have a lambda parameter that is not an identifier this is a syntax error + type = pn; + name = names.empty; + reportSyntaxError(pos, Errors.Expected(IDENTIFIER)); } else { if (allowThisIdent) { if ((mods.flags & Flags.VARARGS) != 0) { diff --git a/test/langtools/tools/javac/lambda/8131742/T8131742.java b/test/langtools/tools/javac/lambda/8131742/T8131742.java index 3c39ed884e6..1fe47709ecf 100644 --- a/test/langtools/tools/javac/lambda/8131742/T8131742.java +++ b/test/langtools/tools/javac/lambda/8131742/T8131742.java @@ -1,9 +1,17 @@ /* * @test /nodynamiccopyright/ - * @bug 8131742 + * @bug 8131742 8301374 * @summary Syntactically meaningless code accepted by javac * @compile/fail/ref=T8131742.out -XDrawDiagnostics T8131742.java */ class T8131742 { static Runnable r = (__GAR BAGE__.this) -> { }; + + interface F { + void apply(E e); + } + enum E { + ONE + } + F f = (E.ONE) -> {}; } diff --git a/test/langtools/tools/javac/lambda/8131742/T8131742.out b/test/langtools/tools/javac/lambda/8131742/T8131742.out index efc3c1c97fa..2d13bc46ec9 100644 --- a/test/langtools/tools/javac/lambda/8131742/T8131742.out +++ b/test/langtools/tools/javac/lambda/8131742/T8131742.out @@ -1,2 +1,3 @@ T8131742.java:8:39: compiler.err.this.as.identifier -1 error +T8131742.java:16:12: compiler.err.expected: token.identifier +2 errors