summary refs log tree commit diff
path: root/src/librustc_codegen_llvm
diff options
context:
space:
mode:
authorOliver Schneider <github35764891676564198441@oli-obk.de>2018-05-22 10:28:46 +0200
committerOliver Schneider <github35764891676564198441@oli-obk.de>2018-05-24 20:49:37 +0200
commit64a75ecc8014df45b5b875c5820a0406f41ae7bb (patch)
tree3e0a0813fffb2461ae27a48ca0c773d641ccf0bd /src/librustc_codegen_llvm
parent3bbf2fd7159e5be5aee8d5c4e11f855862283d26 (diff)
downloadrust-64a75ecc8014df45b5b875c5820a0406f41ae7bb.tar.gz
rust-64a75ecc8014df45b5b875c5820a0406f41ae7bb.zip
change `Value::Bytes` to `Value::Bits`
Diffstat (limited to 'src/librustc_codegen_llvm')
-rw-r--r--src/librustc_codegen_llvm/mir/constant.rs10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/librustc_codegen_llvm/mir/constant.rs b/src/librustc_codegen_llvm/mir/constant.rs
index b1161a04128..fc3733f1398 100644
--- a/src/librustc_codegen_llvm/mir/constant.rs
+++ b/src/librustc_codegen_llvm/mir/constant.rs
@@ -32,11 +32,13 @@ pub fn primval_to_llvm(cx: &CodegenCx,
                        cv: Scalar,
                        layout: &layout::Scalar,
                        llty: Type) -> ValueRef {
-    let bits = if layout.is_bool() { 1 } else { layout.value.size(cx).bits() };
+    let bitsize = if layout.is_bool() { 1 } else { layout.value.size(cx).bits() };
     match cv {
-        Scalar::Undef => C_undef(Type::ix(cx, bits)),
-        Scalar::Bytes(b) => {
-            let llval = C_uint_big(Type::ix(cx, bits), b);
+        Scalar::Bits { defined, .. } if (defined as u64) < bitsize || defined == 0 => {
+            C_undef(Type::ix(cx, bitsize))
+        },
+        Scalar::Bits { bits, .. } => {
+            let llval = C_uint_big(Type::ix(cx, bitsize), bits);
             if layout.value == layout::Pointer {
                 unsafe { llvm::LLVMConstIntToPtr(llval, llty.to_ref()) }
             } else {