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 10f0b222684..1faa77e88fd 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 @@ -4777,7 +4777,7 @@ public class Check { new TreeScanner() { @Override public void visitBindingPattern(JCBindingPattern tree) { - bindings[0] = !tree.var.sym.isUnnamedVariable(); + bindings[0] |= !tree.var.sym.isUnnamedVariable(); super.visitBindingPattern(tree); } }.scan(p); diff --git a/test/langtools/tools/javac/patterns/SwitchErrors.java b/test/langtools/tools/javac/patterns/SwitchErrors.java index 6f93dbb192a..607052be583 100644 --- a/test/langtools/tools/javac/patterns/SwitchErrors.java +++ b/test/langtools/tools/javac/patterns/SwitchErrors.java @@ -1,6 +1,6 @@ /* * @test /nodynamiccopyright/ - * @bug 8262891 8269146 8269113 + * @bug 8262891 8269146 8269113 8348928 * @summary Verify errors related to pattern switches. * @compile/fail/ref=SwitchErrors.out -XDrawDiagnostics -XDshould-stop.at=FLOW SwitchErrors.java */ @@ -307,4 +307,22 @@ public class SwitchErrors { break; } } + + void testPatternWithoutBindingCantOverridePatternWithBinding8348928a(Object o) { + record R(int i, String s) {} + switch (o) { + case Integer _, R(int x, String _) -> {} + default -> {} + } + } + + void testPatternWithoutBindingCantOverridePatternWithBinding8348928b(Object o) { + record R(int i, String s) {} + switch (o) { + case Integer _: + case R(int x, String _): + break; + default: + } + } } diff --git a/test/langtools/tools/javac/patterns/SwitchErrors.out b/test/langtools/tools/javac/patterns/SwitchErrors.out index 9eea96ee272..fa2038b29b6 100644 --- a/test/langtools/tools/javac/patterns/SwitchErrors.out +++ b/test/langtools/tools/javac/patterns/SwitchErrors.out @@ -57,6 +57,8 @@ SwitchErrors.java:276:49: compiler.err.cant.resolve.location.args: kindname.meth SwitchErrors.java:278:55: compiler.err.cant.resolve.location.args: kindname.method, length, , , (compiler.misc.location: kindname.class, java.lang.Object, null) SwitchErrors.java:284:26: compiler.err.pattern.type.cannot.infer SwitchErrors.java:299:21: compiler.err.invalid.case.label.combination +SwitchErrors.java:314:29: compiler.err.flows.through.from.pattern +SwitchErrors.java:323:18: compiler.err.flows.through.to.pattern SwitchErrors.java:10:9: compiler.err.not.exhaustive.statement SwitchErrors.java:16:9: compiler.err.not.exhaustive.statement SwitchErrors.java:22:9: compiler.err.not.exhaustive.statement @@ -69,4 +71,4 @@ SwitchErrors.java:98:9: compiler.err.not.exhaustive.statement SwitchErrors.java:105:9: compiler.err.not.exhaustive.statement SwitchErrors.java:153:9: compiler.err.not.exhaustive.statement SwitchErrors.java:226:9: compiler.err.not.exhaustive.statement -71 errors +73 errors