| /* | |
| * @test /nodynamiccopyright/ | |
| * @bug 8314632 | |
| * @summary Intra-case dominance check fails in the presence of a guard | |
| * @compile/fail/ref=T8314632.out -XDrawDiagnostics T8314632.java | |
| */ | |
| public class T8314632 { | |
| void test1(Object obj) { | |
| switch (obj) { | |
| case Float _ -> {} | |
| case Integer _, CharSequence _, String _ when obj.hashCode() > 0 -> { } // error | |
| default -> throw new IllegalStateException("Unexpected value: " + obj); | |
| } | |
| } | |
| void test2(Object obj) { | |
| switch (obj) { | |
| case Float _ -> {} | |
| case Integer _, CharSequence _, String _ -> { } | |
| default -> throw new IllegalStateException("Unexpected value: " + obj); // error | |
| } | |
| } | |
| void test3(Object obj) { | |
| switch (obj) { | |
| case Float _, CharSequence _ when obj.hashCode() > 0 -> { } // OK | |
| case Integer _, String _ when obj.hashCode() > 0 -> { } // OK, since the previous case is guarded | |
| default -> throw new IllegalStateException("Unexpected value: " + obj); | |
| } | |
| } | |
| void test4(Object obj) { | |
| switch (obj) { | |
| case Float _, CharSequence _ -> { } // OK | |
| case Integer _, String _ when obj.hashCode() > 0 -> { } // error, since the previous case is unguarded | |
| default -> throw new IllegalStateException("Unexpected value: " + obj); | |
| } | |
| } | |
| } |