<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>Hi Anna,<br>
      yes, this looks like a compiler bug.</p>
    <p>Behavior should be the same as:</p>
    <p><Z> Z pick(Z z1, Z z2, Z z3) { .... }<br>
      <br>
      pick(i1, null, i2)</p>
    <p>--> lub(I1, I2) --> I</p>
    <p>Seems like the `null` is tripping javac up</p>
    <p>Maurizio<br>
    </p>
    <div class="moz-cite-prefix">On 30/09/2020 10:50, Anna Kozlova
      wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:CAL5kOaWJfbQ=jL-qTmYybH734=Nz1XJy8EbO+5UvkD713jvkuw@mail.gmail.com">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <div dir="ltr">
        <div dir="ltr">
          <div dir="ltr">
            <div dir="ltr">Hi all,
              <div><br>
              </div>
              <div>The following code doesn't compile (infers i_ to
                Object)</div>
              <div>
                <pre style="color:rgb(8,8,8);font-family:Menlo,monospace;font-size:9pt"><span style="color:rgb(0,51,179)">interface </span><span style="color:rgb(0,0,0)">I </span>{
    <span style="color:rgb(0,51,179)">void </span><span style="color:rgb(0,98,122)">m</span>();
}
<span style="color:rgb(0,51,179)">interface </span><span style="color:rgb(0,0,0)">I1 </span><span style="color:rgb(0,51,179)">extends </span><span style="color:rgb(0,0,0)">I </span>{}
<span style="color:rgb(0,51,179)">interface </span><span style="color:rgb(0,0,0)">I2 </span><span style="color:rgb(0,51,179)">extends </span><span style="color:rgb(0,0,0)">I </span>{}

<span style="color:rgb(0,51,179)">static void </span><span style="color:rgb(0,98,122)">n</span>(<span style="color:rgb(0,0,0)">I1 </span>i1, <span style="color:rgb(0,0,0)">I2 </span>i2, <span style="color:rgb(0,51,179)">int </span>s) {
    <span style="color:rgb(0,51,179)">var </span><span style="color:rgb(0,0,0)">i_ </span>= <span style="color:rgb(0,51,179)">switch </span>(s) {
        <span style="color:rgb(0,51,179)">case </span><span style="color:rgb(23,80,235)">1 </span>-> i1;
        <span style="color:rgb(0,51,179)">case </span><span style="color:rgb(23,80,235)">2 </span>-> <span style="color:rgb(0,51,179)">null</span>;
        <span style="color:rgb(0,51,179)">default </span>-> i2;
    };
    <span style="color:rgb(0,51,179)">if </span>(<span style="color:rgb(0,0,0)">i_ </span>!= <span style="color:rgb(0,51,179)">null</span>) {
        <span style="color:rgb(0,0,0)">i_</span>.m(); //cannot find symbol m()
    }
}</pre>
              </div>
              <div><br>
              </div>
              <div>If you permute "case 1" and "case 2" switch rules,
                the code starts to compile (infers i_ to I). </div>
              <div><br>
              </div>
              <div>Looks like a bug? </div>
              <div><br>
              </div>
              <div>Thanks,</div>
              <div>Anna</div>
            </div>
          </div>
        </div>
      </div>
    </blockquote>
  </body>
</html>