/*
 * @test /nodynamiccopyright/
 * @bug 8231827
 * @summary Ensure that scopes arising from conditionalExpressions are handled corrected.
 * @compile/fail/ref=BindingsTest2.out -XDrawDiagnostics -XDshould-stop.at=FLOW BindingsTest2.java
 */
public class BindingsTest2 {
    public static boolean Ktrue() { return true; }
    public static void meth() {
        Object o1 = "hello";
        Integer in = 42;
        Object o2 = in;
        Object o3 = "there";


        if (Ktrue() ? o2 instanceof Integer x : o2 instanceof String x) {
            x.intValue();
        }
        if (Ktrue() ? o2 instanceof Integer x : true) {
            x.intValue();
        }

        if (o1 instanceof String s ? true : true) {
            s.length();
        }
        if (o1 instanceof String s ? true : o2 instanceof Integer s) {
            s.length();
        }
        if (o1 instanceof String s ? true : o2 instanceof Integer i) {
            s.length();
        }

        // Test for (e1 ? e2 : e3).T contains intersect(e1.F, e2.T)
        if (!(o1 instanceof String s) ? true : true) {
            s.length();
        }
        if (!(o1 instanceof String s) ? (o2 instanceof Integer s) : true) {
            s.length();
        }
        if (!(o1 instanceof String s) ? (o2 instanceof Integer i) : true) {
            s.length();
            i.intValue();
        }
        if (!(o1 instanceof String s) ? (o1 instanceof String s2) : true) {
            s.length();
            s2.length();
        }


        // Test for (e1 ? e2 : e3).F contains intersect(e2.F, e3.F)
        if (Ktrue() ? !(o2 instanceof Integer x) : !(o1 instanceof String x)){
        } else {
            x.intValue();
        }
        if (Ktrue() ? !(o2 instanceof Integer x) : !(o1 instanceof String s)){
        } else {
            x.intValue();
        }
        if (Ktrue() ? !(o2 instanceof Integer x) : !(o2 instanceof Integer x1)){
        } else {
            x.intValue();
            x1.intValue();
        }
        if (Ktrue() ? !(o2 instanceof Integer x) : false){
        } else {
            x.intValue();
        }

        // Test for (e1 ? e2 : e3).F contains intersect(e1.T, e3.F)
        if (o1 instanceof String s ? true : !(o2 instanceof Integer s)){
        } else {
            s.length();
        }
        if (o1 instanceof String s ? true : !(o2 instanceof Integer i)){
        } else {
            s.length();
            i.intValue();
        }
        if (o1 instanceof String s ? true : !(o2 instanceof String s1)){
        } else {
            s.length();
            s1.length();
        }
        // Test for (e1 ? e2 : e3).F contains intersect(e1.F, e2.F)
        if (!(o1 instanceof String s) ? !(o1 instanceof String s1) : true){
        } else {
            s.length();
            s1.length();
        }
        if (!(o1 instanceof String s) ? !(o2 instanceof Integer s) : true){
        } else {
            s.length();
        }
        if (!(o1 instanceof String s) ? !(o2 instanceof Integer i) : true){
        } else {
            s.length();
            i.intValue();
        }

        // Test for e1 ? e2: e3 - include e1.T in e2
        if (o1 instanceof String s ? false : s.length()>0) {
            System.out.println("done");
        }
        if (o1 instanceof String s ? false : s.intValue!=0) {
            System.out.println("done");
        }

        // Test for e1 ? e2 : e3 - include e1.F in e3
        if (!(o1 instanceof String s) ? s.length()>0 : false){
            System.out.println("done");
        }
        if (!(o1 instanceof String s) ? s.intValue>0 : false){
            System.out.println("done");
        }

        {
            while (!(o1 instanceof String s)) {
                break;
            }

            s.length();
        }

        {
            while (!(o1 instanceof String s)) {
                if (false) break;
            }

            s.length();
        }

        {
            while (!(o1 instanceof String s)) {
                while (true);
                break;
            }

            s.length();
        }

        {
            for (; !(o1 instanceof String s); ) {
                break;
            }

            s.length();
        }

        {
            for (; !(o1 instanceof String s); ) {
                if (false) break;
            }

            s.length();
        }

        {
            for (; !(o1 instanceof String s); ) {
                while (true);
                break;
            }

            s.length();
        }

        {
            do {
                break;
            } while (!(o1 instanceof String s));

            s.length();
        }

        {
            do {
                if (false) break;
            } while (!(o1 instanceof String s));

            s.length();
        }

        {
            do {
                while (true);
                break;
            } while (!(o1 instanceof String s));

            s.length();
        }

        {
            L: while (!(o1 instanceof String s)) {
                break L;
            }

            s.length();
        }

        {
            L: for (; !(o1 instanceof String s); ) {
                break L;
            }

            s.length();
        }

        {
            L: do {
                break L;
            } while (!(o1 instanceof String s));

            s.length();
        }

        {
            L: {
                while (!(o1 instanceof String s)) {
                    break L;
                }

                s.length();
            }
        }

        {
            L: {
                for (; !(o1 instanceof String s); ) {
                    break L;
                }

                s.length();
            }
        }

        {
            L: {
                do {
                    break L;
                } while (!(o1 instanceof String s));

                s.length();
            }
        }

        {
            if (o1 instanceof final String s) {
                s = "";
            }
        }
        {
            LBL1: LBL2: if (!(o1 instanceof String s)) {
                break LBL1;
            }

            System.err.println(s);
        }
        {
            LBL1: LBL2: if (!(o1 instanceof String s)) {
                break LBL2;
            }

            System.err.println(s);
        }
        {
            LBL1: LBL2: if (o1 instanceof String s) {
            } else {
                break LBL1;
            }

            System.err.println(s);
        }
        {
            LBL1: LBL2: if (o1 instanceof String s) {
            } else {
                break LBL2;
            }

            System.err.println(s);
        }
        {
            switch (0) {
                case 0:
                    if (!(o1 instanceof String s)) {
                        break;
                    }
            }
            s.length();
        }

        {
            int j = 0;
            L: while (j++ < 2)
                   if (!(o1 instanceof String s)) {
                       break L;
                   }
            s.length();
        }

        {
            int j = 0;
            L: for (; j++ < 2; )
                   if (!(o1 instanceof String s)) {
                       break L;
                   }
            s.length();
        }
    }
}