From 142134d54fb20b0669754f439cf0001869c406b5 Mon Sep 17 00:00:00 2001 From: Seiichi Uchida Date: Fri, 12 Jan 2018 19:54:52 +0900 Subject: [PATCH 1/2] Ignore CTFE errors while lowering patterns Closes #43105. --- src/librustc_const_eval/pattern.rs | 2 +- src/test/compile-fail/issue-43105.rs | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 src/test/compile-fail/issue-43105.rs diff --git a/src/librustc_const_eval/pattern.rs b/src/librustc_const_eval/pattern.rs index cfbb9623f7dc9..0f8efa030ea84 100644 --- a/src/librustc_const_eval/pattern.rs +++ b/src/librustc_const_eval/pattern.rs @@ -280,7 +280,7 @@ 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) + debug!("encountered errors lowering pattern: {:?}", pcx.errors) } 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 0000000000000..fb419d751b4e8 --- /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 or the MIT license +// , 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!(), + } +} From 42410a96c40790fb050b528cb1a6277743f15d4f Mon Sep 17 00:00:00 2001 From: Seiichi Uchida Date: Sat, 13 Jan 2018 00:54:56 +0900 Subject: [PATCH 2/2] Use delay_span_bug() over debug!() --- src/librustc_const_eval/pattern.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/librustc_const_eval/pattern.rs b/src/librustc_const_eval/pattern.rs index 0f8efa030ea84..3cfa1d6797d1f 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() { - debug!("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