diff options
| author | Ariel Ben-Yehuda <ariel.byd@gmail.com> | 2017-12-24 11:40:54 +0200 |
|---|---|---|
| committer | Ariel Ben-Yehuda <ariel.byd@gmail.com> | 2017-12-24 11:40:54 +0200 |
| commit | 6aca3301491bc11bf403b9abeedcfbd63c2a43fd (patch) | |
| tree | e0c11781f2539617cceeed6a5d2523ae0a2f5718 | |
| parent | ce58d965efda96c97ac92fd61c0da0f3a8e2cb60 (diff) | |
| download | rust-6aca3301491bc11bf403b9abeedcfbd63c2a43fd.tar.gz rust-6aca3301491bc11bf403b9abeedcfbd63c2a43fd.zip | |
Handle casts to integer/float variables
These can happen if prior errors disable defaulting. Fixes #43825.
| -rw-r--r-- | src/librustc/ty/cast.rs | 3 | ||||
| -rw-r--r-- | src/test/ui/cast-errors-issue-43825.rs | 17 | ||||
| -rw-r--r-- | src/test/ui/cast-errors-issue-43825.stderr | 8 |
3 files changed, 28 insertions, 0 deletions
diff --git a/src/librustc/ty/cast.rs b/src/librustc/ty/cast.rs index 0badb85e9e0..c118b7a4692 100644 --- a/src/librustc/ty/cast.rs +++ b/src/librustc/ty/cast.rs @@ -20,6 +20,7 @@ use syntax::ast; pub enum IntTy { U(ast::UintTy), I, + Ivar, CEnum, Bool, Char @@ -63,6 +64,8 @@ impl<'tcx> CastTy<'tcx> { ty::TyBool => Some(CastTy::Int(IntTy::Bool)), ty::TyChar => Some(CastTy::Int(IntTy::Char)), ty::TyInt(_) => Some(CastTy::Int(IntTy::I)), + ty::TyInfer(ty::InferTy::IntVar(_)) => Some(CastTy::Int(IntTy::Ivar)), + ty::TyInfer(ty::InferTy::FloatVar(_)) => Some(CastTy::Float), ty::TyUint(u) => Some(CastTy::Int(IntTy::U(u))), ty::TyFloat(_) => Some(CastTy::Float), ty::TyAdt(d,_) if d.is_enum() && d.is_payloadfree() => diff --git a/src/test/ui/cast-errors-issue-43825.rs b/src/test/ui/cast-errors-issue-43825.rs new file mode 100644 index 00000000000..65b391205e3 --- /dev/null +++ b/src/test/ui/cast-errors-issue-43825.rs @@ -0,0 +1,17 @@ +// Copyright 2017 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() { + let error = error; //~ ERROR cannot find value `error` + + // These used to cause errors. + 0 as f32; + 0.0 as u32; +} diff --git a/src/test/ui/cast-errors-issue-43825.stderr b/src/test/ui/cast-errors-issue-43825.stderr new file mode 100644 index 00000000000..db0a33e927f --- /dev/null +++ b/src/test/ui/cast-errors-issue-43825.stderr @@ -0,0 +1,8 @@ +error[E0425]: cannot find value `error` in this scope + --> $DIR/cast-errors-issue-43825.rs:12:17 + | +12 | let error = error; //~ ERROR cannot find value `error` + | ^^^^^ not found in this scope + +error: aborting due to previous error + |
