Skip to content

Commit deebf0f

Browse files
committed
Avoid some boolean argument footguns
1 parent 0442451 commit deebf0f

File tree

1 file changed

+26
-10
lines changed
  • compiler/rustc_codegen_ssa/src/mir

1 file changed

+26
-10
lines changed

compiler/rustc_codegen_ssa/src/mir/block.rs

+26-10
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use crate::MemFlags;
1212
use rustc_ast as ast;
1313
use rustc_ast::{InlineAsmOptions, InlineAsmTemplatePiece};
1414
use rustc_hir::lang_items::LangItem;
15-
use rustc_middle::mir::{self, AssertKind, SwitchTargets, UnwindTerminateReason};
15+
use rustc_middle::mir::{self, AssertKind, BasicBlock, SwitchTargets, UnwindTerminateReason};
1616
use rustc_middle::ty::layout::{HasTyCtxt, LayoutOf, ValidityRequirement};
1717
use rustc_middle::ty::print::{with_no_trimmed_paths, with_no_visible_paths};
1818
use rustc_middle::ty::{self, Instance, Ty};
@@ -824,8 +824,14 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
824824
self.get_caller_location(bx, mir::SourceInfo { span: fn_span, ..source_info });
825825

826826
let mut llargs = Vec::with_capacity(arg_count);
827-
let ret_dest =
828-
self.make_return_dest(bx, destination, &fn_abi.ret, &mut llargs, true, true);
827+
let ret_dest = self.make_return_dest(
828+
bx,
829+
destination,
830+
&fn_abi.ret,
831+
&mut llargs,
832+
intrinsic,
833+
Some(target),
834+
);
829835
assert_eq!(llargs, []);
830836
if let ReturnDest::IndirectOperand(tmp, _) = ret_dest {
831837
location.val.store(bx, tmp);
@@ -846,8 +852,8 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
846852
destination,
847853
&fn_abi.ret,
848854
&mut llargs,
849-
true,
850-
target.is_some(),
855+
Some(intrinsic),
856+
target,
851857
);
852858
let dest = match ret_dest {
853859
_ if fn_abi.ret.is_indirect() => llargs[0],
@@ -911,7 +917,17 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
911917

912918
let mut llargs = Vec::with_capacity(arg_count);
913919
let destination = target.as_ref().map(|&target| {
914-
(self.make_return_dest(bx, destination, &fn_abi.ret, &mut llargs, false, true), target)
920+
(
921+
self.make_return_dest(
922+
bx,
923+
destination,
924+
&fn_abi.ret,
925+
&mut llargs,
926+
None,
927+
Some(target),
928+
),
929+
target,
930+
)
915931
});
916932

917933
// Split the rust-call tupled arguments off.
@@ -1644,10 +1660,10 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
16441660
dest: mir::Place<'tcx>,
16451661
fn_ret: &ArgAbi<'tcx, Ty<'tcx>>,
16461662
llargs: &mut Vec<Bx::Value>,
1647-
is_intrinsic: bool,
1648-
has_target: bool,
1663+
intrinsic: Option<ty::IntrinsicDef>,
1664+
target: Option<BasicBlock>,
16491665
) -> ReturnDest<'tcx, Bx::Value> {
1650-
if !has_target {
1666+
if target.is_none() {
16511667
return ReturnDest::Nothing;
16521668
}
16531669
// If the return is ignored, we can just return a do-nothing `ReturnDest`.
@@ -1668,7 +1684,7 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
16681684
tmp.storage_live(bx);
16691685
llargs.push(tmp.llval);
16701686
ReturnDest::IndirectOperand(tmp, index)
1671-
} else if is_intrinsic {
1687+
} else if intrinsic.is_some() {
16721688
// Currently, intrinsics always need a location to store
16731689
// the result, so we create a temporary `alloca` for the
16741690
// result.

0 commit comments

Comments
 (0)