about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAlex Crichton <alex@alexcrichton.com>2016-12-15 09:58:49 -0800
committerGitHub <noreply@github.com>2016-12-15 09:58:49 -0800
commitce61a71a7726aef6b33aa0c9cffff0661d52212c (patch)
tree09e8c41ad67f93a38770a774c55d677f05f51725
parent9911f0e3e1836f2f1738023054a6f25401eb9734 (diff)
parent5a42929111e36f46c25b3bb7b44fb9791bf1338e (diff)
downloadrust-ce61a71a7726aef6b33aa0c9cffff0661d52212c.tar.gz
rust-ce61a71a7726aef6b33aa0c9cffff0661d52212c.zip
Merge pull request #38393 from brson/beta-next
[beta] Work around a borrow surviving too long (fixes #37686)
-rw-r--r--src/librustc_const_eval/pattern.rs3
-rw-r--r--src/test/run-pass/issue-37686.rs16
2 files changed, 18 insertions, 1 deletions
diff --git a/src/librustc_const_eval/pattern.rs b/src/librustc_const_eval/pattern.rs
index 10b2a7625ca..241920f2949 100644
--- a/src/librustc_const_eval/pattern.rs
+++ b/src/librustc_const_eval/pattern.rs
@@ -223,7 +223,8 @@ impl<'a, 'gcx, 'tcx> PatternContext<'a, 'gcx, 'tcx> {
             }
 
             PatKind::Tuple(ref subpatterns, ddpos) => {
-                match self.tcx.tables().node_id_to_type(pat.id).sty {
+                let ty = self.tcx.tables().node_id_to_type(pat.id);
+                match ty.sty {
                     ty::TyTuple(ref tys) => {
                         let subpatterns =
                             subpatterns.iter()
diff --git a/src/test/run-pass/issue-37686.rs b/src/test/run-pass/issue-37686.rs
new file mode 100644
index 00000000000..47881d4d530
--- /dev/null
+++ b/src/test/run-pass/issue-37686.rs
@@ -0,0 +1,16 @@
+// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+fn main() {
+    match (0, 0) {
+        (std::usize::MIN, std::usize::MAX) => {}
+        _ => {}
+    }
+}