<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Okay, thanks for this clarification.  I am not a big fan of fall-through, and I think we could live with this example being an error.<div class=""><br class=""></div><div class="">(If it were to work as a natural consequence of whatever theory we finally adopt, I predict that it would get used in exactly this sort of defaulting situation.  On the other hand, it is not a completely general solution to the defaulting problem; consider</div><div class=""><br class=""></div><div class=""><div text="#000000" bgcolor="#FFFFFF" class=""><div class="">switch (x) {</div><div class="">  case Quux(int y):</div><div class=""><span class="Apple-tab-span" style="white-space:pre"> </span>int x = y;</div><div class=""><span class="Apple-tab-span" style="white-space:pre">        </span>// would also like to get to the point after case Bar, but can’t “fall through” into it.</div><div class="">  case Foo(int x):</div><div class=""><span class="Apple-tab-span" style="white-space: pre;"> </span>int y = x;</div><div class=""><span class="Apple-tab-span" style="white-space: pre;"> </span>// fall through</div><div class="">  case Bar(int x, int y):</div><div class=""><span class="Apple-tab-span" style="white-space: pre;"> </span>…</div><div class="">}</div></div><div class=""><div text="#000000" bgcolor="#FFFFFF" class=""><div class=""><br class=""></div><div class="">so perhaps it is just as well that we not encourage it.)</div></div></div><div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Nov 20, 2017, at 1:55 PM, Brian Goetz <<a href="mailto:brian.goetz@oracle.com" class="">brian.goetz@oracle.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class="">
  
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" class="">
  
  <div text="#000000" bgcolor="#FFFFFF" class="">
    <br class="">
    <div class="moz-cite-prefix">On 11/20/2017 1:33 PM, Guy Steele
      wrote:<br class="">
    </div>
    <blockquote type="cite" cite="mid:3B51BA91-947D-46E2-8004-859EA8AAB81C@oracle.com" class="">
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" class="">
      <div class="">I like this.  One question: what does this new
        theory have to say about the situation</div>
      <div class=""><br class="">
      </div>
      <div class="">switch (x) {</div>
      <div class="">  case Foo(int x):</div>
      <div class=""><span class="Apple-tab-span" style="white-space:pre">     </span>int y
        = x;</div>
      <div class=""><span class="Apple-tab-span" style="white-space:pre">     </span>//
        fall through</div>
      <div class="">  case Bar(int x, int y):</div>
      <div class=""><span class="Apple-tab-span" style="white-space:pre">     </span>…</div>
      <div class="">}</div>
    </blockquote>
    <br class="">
    In this case, I would say that the second y is shadowing the first,
    and therefore this is an error.  Trying to merge the ys seems like a
    heroic measure.  Merging the xs, on the other hand, is clean,
    because at the point where the second x is bound, the first x is DU
    (we'd skip over the Bar(int x, int y) binding if we had matched the
    first case.)<br class="">
    <br class="">
    <tt class="">The opposite example is also interesting:<br class="">
      <br class="">
          case Foo(int x, int y):<br class="">
              // A<br class="">
              // fall through<br class="">
          case Bar(int x): <br class="">
              // B<br class="">
      <br class="">
      Here, y is in scope in A, but not in B; x is in scope in both A
      and B.  <br class="">
      <br class="">
    </tt>
  </div>

</div></blockquote></div><br class=""></div></div></body></html>