diff options
| author | varkor <github@varkor.com> | 2018-05-16 00:43:43 +0100 |
|---|---|---|
| committer | varkor <github@varkor.com> | 2018-05-16 00:43:43 +0100 |
| commit | a4224ebe8a22101b3bd4283826aa5a3269ba8f75 (patch) | |
| tree | 00e5f54466b4850dcb885f6a324eefea32421f04 | |
| parent | eca0da59850d4a9eef17c0e6c3795397102d88a3 (diff) | |
| download | rust-a4224ebe8a22101b3bd4283826aa5a3269ba8f75.tar.gz rust-a4224ebe8a22101b3bd4283826aa5a3269ba8f75.zip | |
Fix an ICE when casting a nonexistent const
| -rw-r--r-- | src/librustc_passes/rvalue_promotion.rs | 2 | ||||
| -rw-r--r-- | src/test/ui/issue-50599.rs | 15 | ||||
| -rw-r--r-- | src/test/ui/issue-50599.stderr | 15 |
3 files changed, 31 insertions, 1 deletions
diff --git a/src/librustc_passes/rvalue_promotion.rs b/src/librustc_passes/rvalue_promotion.rs index 3a577341f7e..f20262c1333 100644 --- a/src/librustc_passes/rvalue_promotion.rs +++ b/src/librustc_passes/rvalue_promotion.rs @@ -275,7 +275,7 @@ fn check_expr<'a, 'tcx>(v: &mut CheckCrateVisitor<'a, 'tcx>, e: &hir::Expr, node hir::ExprCast(ref from, _) => { debug!("Checking const cast(id={})", from.id); match v.tables.cast_kinds().get(from.hir_id) { - None => span_bug!(e.span, "no kind for cast"), + None => v.tcx.sess.delay_span_bug(e.span, "no kind for cast"), Some(&CastKind::PtrAddrCast) | Some(&CastKind::FnPtrAddrCast) => { v.promotable = false; } diff --git a/src/test/ui/issue-50599.rs b/src/test/ui/issue-50599.rs new file mode 100644 index 00000000000..f46a562ce7a --- /dev/null +++ b/src/test/ui/issue-50599.rs @@ -0,0 +1,15 @@ +// 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 main() { + const N: u32 = 1_000; + const M: usize = (f64::from(N) * std::f64::LOG10_2) as usize; //~ ERROR cannot find value + let mut digits = [0u32; M]; +} diff --git a/src/test/ui/issue-50599.stderr b/src/test/ui/issue-50599.stderr new file mode 100644 index 00000000000..8337a31ec14 --- /dev/null +++ b/src/test/ui/issue-50599.stderr @@ -0,0 +1,15 @@ +error[E0425]: cannot find value `LOG10_2` in module `std::f64` + --> $DIR/issue-50599.rs:13:48 + | +LL | const M: usize = (f64::from(N) * std::f64::LOG10_2) as usize; //~ ERROR cannot find value + | ^^^^^^^ not found in `std::f64` +help: possible candidates are found in other modules, you can import them into scope + | +LL | use std::f32::consts::LOG10_2; + | +LL | use std::f64::consts::LOG10_2; + | + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0425`. |
