title: match expression falling through?
body: <p><strong>Update:</strong> this is an old bug <a href="https://github.com/rust-lang/rust/issues/26251#event-770023973" rel="nofollow">solved</a> in 1.12</p>
  
  <hr>
  
  <p>Here is some contrived but simple pattern matching example <a href="https://play.rust-lang.org/?code=%0A%0Afn%20main%28%29%20%7B%0A%20%20%20%20let%20x%20%3D%20%27a%27%3B%0A%0A%20%20%20%20match%20x%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%27a%27...%27b%27%20if%20false%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20println!%28%22one%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%27a%27%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20println!%28%22two%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%27a%27...%27b%27%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20println!%28%22three%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20_%20%3D%3E%20panic!%28%22what%3F%22%29%0A%20%20%20%20%7D%0A%7D%0A%0A%0A&amp;version=stable" rel="nofollow">(demo)</a>:</p>
  
  <pre><code>fn main() {
      let x = 'a';
  
      match x {
              'a'...'b' if false =&gt; {
                  println!("one");
              },
  
              'a' =&gt; {
                  println!("two");
              },
  
              'a'...'b' =&gt; {
                  println!("three");
              },
  
              _ =&gt; panic!("what?")
      }
  }
  </code></pre>
  
  <p>When I run it, I get <code>three</code> as output. Why is this happening? Shouldn't the second branch match first?</p>