/**
 * @test /nodynamiccopyright/
 * @bug 8214031
 * @summary Verify that definite assignment when true works (illegal code)
 * @compile/fail/ref=DefiniteAssignment2.out -XDrawDiagnostics DefiniteAssignment2.java
 */
public class DefiniteAssignment2 {

    public static void meth() {
        int a = 0;
        boolean b = true;
        boolean t;

        {
            int x;

            t = (b && switch(a) {
                case 0: yield (x = 1) == 1 || true;
                default: yield false;
            }) || x == 1;
        }

        {
            int x;

            t = (switch(a) {
                case 0: yield (x = 1) == 1;
                default: yield false;
            }) || x == 1;
        }

        {
            int x;

            t = (switch(a) {
                case 0: x = 1; yield true;
                case 1: yield (x = 1) == 1;
                default: yield false;
            }) || x == 1;
        }

        {
            int x;

            t = (switch(a) {
                case 0: yield true;
                case 1: yield (x = 1) == 1;
                default: yield false;
            }) && x == 1;
        }

        {
            int x;

            t = (switch(a) {
                case 0: yield false;
                case 1: yield isTrue() || (x = 1) == 1;
                default: yield false;
            }) && x == 1;
        }

        {
            int x;

            t = (switch(a) {
                case 0: yield false;
                case 1: yield isTrue() ? true : (x = 1) == 1;
                default: yield false;
            }) && x == 1;
        }

        {
            final int x;

            t = (switch(a) {
                case 0: yield false;
                case 1: yield isTrue() ? true : (x = 1) == 1;
                default: yield false;
            }) && (x = 1) == 1;
        }
    }

    private static boolean isTrue() {
        return true;
    }

}
