]> git.lizzy.rs Git - rust.git/commitdiff
Make float -> int casts actually work
authorAriel Ben-Yehuda <ariel.byd@gmail.com>
Fri, 15 May 2015 08:44:26 +0000 (11:44 +0300)
committerAriel Ben-Yehuda <ariel.byd@gmail.com>
Tue, 19 May 2015 14:42:15 +0000 (17:42 +0300)
src/librustc_trans/trans/consts.rs
src/test/run-pass/cast-rfc0401.rs

index 828e4bcc65c4f7965ef3af7f3d239c5fc2722cb1..5ca14b63bce09ad731e6588f3f8ba664df4d429f 100644 (file)
@@ -660,9 +660,11 @@ fn const_expr_unadjusted<'a, 'tcx>(cx: &CrateContext<'a, 'tcx>,
               (CastTy::Float, CastTy::Float) => {
                 llvm::LLVMConstFPCast(v, llty.to_ref())
               }
+              (CastTy::Float, CastTy::Int(IntTy::I)) => {
+                llvm::LLVMConstFPToSI(v, llty.to_ref())
+              }
               (CastTy::Float, CastTy::Int(_)) => {
-                if ty::type_is_signed(t_expr) { llvm::LLVMConstFPToSI(v, llty.to_ref()) }
-                else { llvm::LLVMConstFPToUI(v, llty.to_ref()) }
+                llvm::LLVMConstFPToUI(v, llty.to_ref())
               }
               (CastTy::Ptr(_), CastTy::Ptr(_)) | (CastTy::FnPtr, CastTy::Ptr(_))
                     | (CastTy::RPtr(_), CastTy::Ptr(_)) => {
index ec4c84a1a6b5edecf7d6f7d44c2c45c290ecb272..7c64c34fae5ce2285544a7a25a2d866c6894a429 100644 (file)
@@ -75,7 +75,6 @@ fn main()
     assert_eq!(9.223372036854775e18f64 as i64, 0x7ffffffffffffc00i64);
     assert_eq!(-9.223372036854776e18f64 as i64, 0x8000000000000000u64 as i64);
 
-
     // addr-ptr-cast/ptr-addr-cast (thin ptr)
     let p: *const [u8; 1] = lsz as *const [u8; 1];
     assert_eq!(p as usize, lsz);