]> git.lizzy.rs Git - rust.git/commitdiff
Fix an ICE when casting a nonexistent const
authorvarkor <github@varkor.com>
Tue, 15 May 2018 23:43:43 +0000 (00:43 +0100)
committervarkor <github@varkor.com>
Tue, 15 May 2018 23:43:43 +0000 (00:43 +0100)
src/librustc_passes/rvalue_promotion.rs
src/test/ui/issue-50599.rs [new file with mode: 0644]
src/test/ui/issue-50599.stderr [new file with mode: 0644]

index 3a577341f7e01b5230494a7bb68d701ddbacaa4e..f20262c133325ca7b20b3f0d77f3808071459856 100644 (file)
@@ -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 (file)
index 0000000..f46a562
--- /dev/null
@@ -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 (file)
index 0000000..8337a31
--- /dev/null
@@ -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`.