<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <br>
    <div class="moz-cite-prefix">On 11/20/2017 1:33 PM, Guy Steele
      wrote:<br>
    </div>
    <blockquote type="cite"
      cite="mid:3B51BA91-947D-46E2-8004-859EA8AAB81C@oracle.com">
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
      <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>
    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>
    <br>
    <tt>The opposite example is also interesting:<br>
      <br>
          case Foo(int x, int y):<br>
              // A<br>
              // fall through<br>
          case Bar(int x): <br>
              // B<br>
      <br>
      Here, y is in scope in A, but not in B; x is in scope in both A
      and B.  <br>
      <br>
    </tt>
  </body>
</html>