diff options
| author | Oliver Schneider <github35764891676564198441@oli-obk.de> | 2018-08-02 13:16:53 +0200 |
|---|---|---|
| committer | Oliver Schneider <github35764891676564198441@oli-obk.de> | 2018-08-02 13:16:53 +0200 |
| commit | 37e18e7a304a1c013c59babc69ad9af4f54d8b03 (patch) | |
| tree | 21d43ce693c1724efd24a071507352af63a1a4bc /src/librustc_codegen_llvm | |
| parent | c8e30c429503de90f7bad8a4c336af11ffaa48e6 (diff) | |
Second field of ScalarPair can be undef in some cases
Diffstat (limited to 'src/librustc_codegen_llvm')
| -rw-r--r-- | src/librustc_codegen_llvm/mir/operand.rs | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/src/librustc_codegen_llvm/mir/operand.rs b/src/librustc_codegen_llvm/mir/operand.rs index 1296f5e4b14..f8166ee6491 100644 --- a/src/librustc_codegen_llvm/mir/operand.rs +++ b/src/librustc_codegen_llvm/mir/operand.rs @@ -10,7 +10,7 @@ use rustc::mir::interpret::ConstEvalErr; use rustc::mir; -use rustc::mir::interpret::ConstValue; +use rustc::mir::interpret::{ConstValue, ScalarMaybeUndef}; use rustc::ty; use rustc::ty::layout::{self, Align, LayoutOf, TyLayout}; use rustc_data_structures::indexed_vec::Idx; @@ -110,12 +110,16 @@ impl OperandRef<'ll, 'tcx> { a_scalar, layout.scalar_pair_element_llvm_type(bx.cx, 0, true), ); - let b_llval = scalar_to_llvm( - bx.cx, - b, - b_scalar, - layout.scalar_pair_element_llvm_type(bx.cx, 1, true), - ); + let b_layout = layout.scalar_pair_element_llvm_type(bx.cx, 1, true); + let b_llval = match b { + ScalarMaybeUndef::Scalar(b) => scalar_to_llvm( + bx.cx, + b, + b_scalar, + b_layout, + ), + ScalarMaybeUndef::Undef => C_undef(b_layout), + }; OperandValue::Pair(a_llval, b_llval) }, ConstValue::ByRef(alloc, offset) => { |
