1 /*
   2  * @test /nodynamiccopyright/
   3  * @summary Ensure that scopes arising from conditionalExpressions are handled corrected.
   4  * @compile/fail/ref=BindingsTest2.out -XDrawDiagnostics -XDshould-stop.at=FLOW BindingsTest2.java
   5  */
   6 public class BindingsTest2 {
   7     public static boolean Ktrue() { return true; }
   8     public static void main(String[] args) {
   9         Object o1 = "hello";
  10         Integer in = 42;
  11         Object o2 = in;
  12         Object o3 = "there";
  13 
  14 
  15         if (Ktrue() ? o2 instanceof Integer x : o2 instanceof String x) {
  16             x.intValue();
  17         }
  18         if (Ktrue() ? o2 instanceof Integer x : true) {
  19             x.intValue();
  20         }
  21 
  22         if (o1 instanceof String s ? true : true) {
  23             s.length();
  24         }
  25         if (o1 instanceof String s ? true : o2 instanceof Integer s) {
  26             s.length();
  27         }
  28         if (o1 instanceof String s ? true : o2 instanceof Integer i) {
  29             s.length();
  30         }
  31 
  32         // Test for (e1 ? e2 : e3).T contains intersect(e1.F, e2.T)
  33         if (!(o1 instanceof String s) ? true : true) {
  34             s.length();
  35         }
  36         if (!(o1 instanceof String s) ? (o2 instanceof Integer s) : true) {
  37             s.length();
  38         }
  39         if (!(o1 instanceof String s) ? (o2 instanceof Integer i) : true) {
  40             s.length();
  41             i.intValue();
  42         }
  43         if (!(o1 instanceof String s) ? (o1 instanceof String s2) : true) {
  44             s.length();
  45             s2.length();
  46         }
  47 
  48 
  49         // Test for (e1 ? e2 : e3).F contains intersect(e2.F, e3.F)
  50         if (Ktrue() ? !(o2 instanceof Integer x) : !(o1 instanceof String x)){
  51         } else {
  52             x.intValue();
  53         }
  54         if (Ktrue() ? !(o2 instanceof Integer x) : !(o1 instanceof String s)){
  55         } else {
  56             x.intValue();
  57         }
  58         if (Ktrue() ? !(o2 instanceof Integer x) : !(o2 instanceof Integer x1)){
  59         } else {
  60             x.intValue();
  61             x1.intValue();
  62         }
  63         if (Ktrue() ? !(o2 instanceof Integer x) : false){
  64         } else {
  65             x.intValue();
  66         }
  67 
  68         // Test for (e1 ? e2 : e3).F contains intersect(e1.T, e3.F)
  69         if (o1 instanceof String s ? true : !(o2 instanceof Integer s)){
  70         } else {
  71             s.length();
  72         }
  73         if (o1 instanceof String s ? true : !(o2 instanceof Integer i)){
  74         } else {
  75             s.length();
  76             i.intValue();
  77         }
  78         if (o1 instanceof String s ? true : !(o2 instanceof String s1)){
  79         } else {
  80             s.length();
  81             s1.length();
  82         }
  83         // Test for (e1 ? e2 : e3).F contains intersect(e1.F, e2.F)
  84         if (!(o1 instanceof String s) ? !(o1 instanceof String s1) : true){
  85         } else {
  86             s.length();
  87             s1.length();
  88         }
  89         if (!(o1 instanceof String s) ? !(o2 instanceof Integer s) : true){
  90         } else {
  91             s.length();
  92         }
  93         if (!(o1 instanceof String s) ? !(o2 instanceof Integer i) : true){
  94         } else {
  95             s.length();
  96             i.intValue();
  97         }
  98 
  99         // Test for e1 ? e2: e3 - include e1.T in e2
 100         if (o1 instanceof String s ? false : s.length()>0) {
 101             System.out.println("done");
 102         }
 103         if (o1 instanceof String s ? false : s.intValue!=0) {
 104             System.out.println("done");
 105         }
 106 
 107         // Test for e1 ? e2 : e3 - include e1.F in e3
 108         if (!(o1 instanceof String s) ? s.length()>0 : false){
 109             System.out.println("done");
 110         }
 111         if (!(o1 instanceof String s) ? s.intValue>0 : false){
 112             System.out.println("done");
 113         }
 114 
 115         {
 116             while (!(o1 instanceof String s)) {
 117                 break;
 118             }
 119 
 120             s.length();
 121         }
 122 
 123         {
 124             while (!(o1 instanceof String s)) {
 125                 if (false) break;
 126             }
 127 
 128             s.length();
 129         }
 130 
 131         {
 132             while (!(o1 instanceof String s)) {
 133                 while (true);
 134                 break;
 135             }
 136 
 137             s.length();
 138         }
 139 
 140         {
 141             for (; !(o1 instanceof String s); ) {
 142                 break;
 143             }
 144 
 145             s.length();
 146         }
 147 
 148         {
 149             for (; !(o1 instanceof String s); ) {
 150                 if (false) break;
 151             }
 152 
 153             s.length();
 154         }
 155 
 156         {
 157             for (; !(o1 instanceof String s); ) {
 158                 while (true);
 159                 break;
 160             }
 161 
 162             s.length();
 163         }
 164 
 165         {
 166             do {
 167                 break;
 168             } while (!(o1 instanceof String s));
 169 
 170             s.length();
 171         }
 172 
 173         {
 174             do {
 175                 if (false) break;
 176             } while (!(o1 instanceof String s));
 177 
 178             s.length();
 179         }
 180 
 181         {
 182             do {
 183                 while (true);
 184                 break;
 185             } while (!(o1 instanceof String s));
 186 
 187             s.length();
 188         }
 189     }
 190 }