提交 1663bfba 编写于 作者: K khyperia

Fix matching on field.abi instead of self.layout.abi

上级 81650f48
......@@ -220,7 +220,7 @@ pub fn extract_field<Bx: BuilderMethods<'a, 'tcx, Value = 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 @@ pub fn extract_field<Bx: BuilderMethods<'a, 'tcx, Value = 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!(),
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册