diff options
| author | kennytm <kennytm@gmail.com> | 2018-01-13 02:26:45 +0800 |
|---|---|---|
| committer | kennytm <kennytm@gmail.com> | 2018-01-13 03:17:08 +0800 |
| commit | c12eabfb11384dfd45cab87a809aa442203dcc53 (patch) | |
| tree | 0f7929e306da4893a0db5671686f08d4443d8859 | |
| parent | 21ac84e094d0e86f23eae6ed78305f413ee8d3ed (diff) | |
| parent | 42410a96c40790fb050b528cb1a6277743f15d4f (diff) | |
| download | rust-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
| -rw-r--r-- | src/librustc_const_eval/pattern.rs | 3 | ||||
| -rw-r--r-- | src/test/compile-fail/issue-43105.rs | 21 |
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!(), + } +} |
