diff options
| author | khyperia <github@khyperia.com> | 2020-08-30 13:38:47 +0200 |
|---|---|---|
| committer | khyperia <github@khyperia.com> | 2020-08-30 13:38:47 +0200 |
| commit | 1663bfba02b7c1545a3c241b6b08cc9d9b97c475 (patch) | |
| tree | 2dfb8838de848b80f5c0a4b81e59a8bc93006388 /src | |
| parent | 81650f485c8cafbb6f06d43e90236f34c53175cf (diff) | |
| download | rust-1663bfba02b7c1545a3c241b6b08cc9d9b97c475.tar.gz rust-1663bfba02b7c1545a3c241b6b08cc9d9b97c475.zip | |
Fix matching on field.abi instead of self.layout.abi
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc_codegen_ssa/mir/operand.rs | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/librustc_codegen_ssa/mir/operand.rs b/src/librustc_codegen_ssa/mir/operand.rs index fb84e914661..bbd004be875 100644 --- a/src/librustc_codegen_ssa/mir/operand.rs +++ b/src/librustc_codegen_ssa/mir/operand.rs @@ -220,7 +220,7 @@ impl<'a, 'tcx, V: CodegenObject> OperandRef<'tcx, V> { _ => bug!("OperandRef::extract_field({:?}): not applicable", self), }; - match (&mut val, &self.layout.abi) { + match (&mut val, &field.abi) { (OperandValue::Immediate(llval), _) => { // Bools in union fields needs to be truncated. *llval = bx.to_immediate(*llval, field); @@ -228,9 +228,11 @@ impl<'a, 'tcx, V: CodegenObject> OperandRef<'tcx, V> { *llval = bx.bitcast(*llval, bx.cx().immediate_backend_type(field)); } (OperandValue::Pair(a, b), Abi::ScalarPair(a_abi, b_abi)) => { + // Bools in union fields needs to be truncated. *a = bx.to_immediate_scalar(*a, a_abi); - *a = bx.bitcast(*a, bx.cx().scalar_pair_element_backend_type(field, 0, true)); *b = bx.to_immediate_scalar(*b, b_abi); + // HACK(eddyb) have to bitcast pointers until LLVM removes pointee types. + *a = bx.bitcast(*a, bx.cx().scalar_pair_element_backend_type(field, 0, true)); *b = bx.bitcast(*b, bx.cx().scalar_pair_element_backend_type(field, 1, true)); } (OperandValue::Pair(..), _) => bug!(), |
