about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorkennytm <kennytm@gmail.com>2018-01-13 02:26:45 +0800
committerkennytm <kennytm@gmail.com>2018-01-13 03:17:08 +0800
commitc12eabfb11384dfd45cab87a809aa442203dcc53 (patch)
tree0f7929e306da4893a0db5671686f08d4443d8859 /src
parent21ac84e094d0e86f23eae6ed78305f413ee8d3ed (diff)
parent42410a96c40790fb050b528cb1a6277743f15d4f (diff)
downloadrust-c12eabfb11384dfd45cab87a809aa442203dcc53.tar.gz
rust-c12eabfb11384dfd45cab87a809aa442203dcc53.zip
Rollup merge of #47382 - topecongiro:issue-43105, r=eddyb
Ignore CTFE errors while lowering patterns

Closes #43105.

r? @eddyb
Diffstat (limited to 'src')
-rw-r--r--src/librustc_const_eval/pattern.rs3
-rw-r--r--src/test/compile-fail/issue-43105.rs21
2 files changed, 23 insertions, 1 deletions
diff --git a/src/librustc_const_eval/pattern.rs b/src/librustc_const_eval/pattern.rs
index cfbb9623f7d..3cfa1d6797d 100644
--- a/src/librustc_const_eval/pattern.rs
+++ b/src/librustc_const_eval/pattern.rs
@@ -280,7 +280,8 @@ impl<'a, 'tcx> Pattern<'tcx> {
         let mut pcx = PatternContext::new(tcx, param_env_and_substs, tables);
         let result = pcx.lower_pattern(pat);
         if !pcx.errors.is_empty() {
-            span_bug!(pat.span, "encountered errors lowering pattern: {:?}", pcx.errors)
+            let msg = format!("encountered errors lowering pattern: {:?}", pcx.errors);
+            tcx.sess.delay_span_bug(pat.span, &msg);
         }
         debug!("Pattern::from_hir({:?}) = {:?}", pat, result);
         result
diff --git a/src/test/compile-fail/issue-43105.rs b/src/test/compile-fail/issue-43105.rs
new file mode 100644
index 00000000000..fb419d751b4
--- /dev/null
+++ b/src/test/compile-fail/issue-43105.rs
@@ -0,0 +1,21 @@
+// Copyright 2018 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 xyz() -> u8 { 42 }
+
+const NUM: u8 = xyz();
+//~^ ERROR calls in constants are limited to constant functions, struct and enum constructors
+
+fn main() {
+    match 1 {
+        NUM => unimplemented!(),
+        _ => unimplemented!(),
+    }
+}