title: Why is this match pattern unreachable when using non-literal patterns?
body: <p>The following code (<a href="https://play.rust-lang.org/?gist=c1ee7efa123ed8240557c2d086006479&amp;version=stable&amp;backtrace=0" rel="noreferrer">playground</a>)</p>
  
  <pre><code>let max_column = 7;
  edge = match current_column {
      0 =&gt; Edge::Left,
      max_column =&gt; Edge::Right,
      _ =&gt; Edge::NotAnEdge
  };
  </code></pre>
  
  <p>results in the following warning:</p>
  
  <pre class="lang-none prettyprint-override"><code>warning: unreachable pattern
    --&gt; src/main.rs:10:9
     |
  9  |         max_column =&gt; Edge::Right,
     |         ---------- matches any value
  10 |         _ =&gt; Edge::NotAnEdge
     |         ^ unreachable pattern
     |
     = note: #[warn(unreachable_patterns)] on by default
  </code></pre>
  
  <p>Replacing the variable <code>max_column</code> with the literal works fine:</p>
  
  <pre><code>let max_column = 7;
  edge = match current_column {
      0 =&gt; Edge::Left,
      7 =&gt; Edge::Right,
      _ =&gt; Edge::NotAnEdge
  };
  </code></pre>
  
  <p>Why is <code>_</code> unreachable in the first example when it can be reached for any values where <code>current_column != max_column</code>?</p>