From 19ec5a41ed98df980357a93d6938dc253106fd9d Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Fri, 18 May 2012 19:05:31 -0700 Subject: [PATCH] allow region ptrs to be cast to uints --- src/rustc/middle/trans/base.rs | 15 ++++++++++----- src/test/run-pass/cast-region-to-uint.rs | 4 ++++ 2 files changed, 14 insertions(+), 5 deletions(-) create mode 100644 src/test/run-pass/cast-region-to-uint.rs diff --git a/src/rustc/middle/trans/base.rs b/src/rustc/middle/trans/base.rs index d55f4ae9e509..2e2ad6b826a7 100644 --- a/src/rustc/middle/trans/base.rs +++ b/src/rustc/middle/trans/base.rs @@ -2620,11 +2620,16 @@ fn float_cast(bcx: block, lldsttype: TypeRef, llsrctype: TypeRef, enum cast_kind { cast_pointer, cast_integral, cast_float, cast_enum, cast_other, } fn cast_type_kind(t: ty::t) -> cast_kind { - if ty::type_is_fp(t) { cast_float } - else if ty::type_is_unsafe_ptr(t) { cast_pointer } - else if ty::type_is_integral(t) { cast_integral } - else if ty::type_is_enum(t) { cast_enum } - else { cast_other } + alt ty::get(t).struct { + ty::ty_float(*) {cast_float} + ty::ty_ptr(*) {cast_pointer} + ty::ty_rptr(*) {cast_pointer} + ty::ty_int(*) {cast_integral} + ty::ty_uint(*) {cast_integral} + ty::ty_bool {cast_integral} + ty::ty_enum(*) {cast_enum} + _ {cast_other} + } } diff --git a/src/test/run-pass/cast-region-to-uint.rs b/src/test/run-pass/cast-region-to-uint.rs new file mode 100644 index 000000000000..6cf827838311 --- /dev/null +++ b/src/test/run-pass/cast-region-to-uint.rs @@ -0,0 +1,4 @@ +fn main() { + let x = 3; + #debug["&x=%x", &x as uint]; +} \ No newline at end of file