Skip to content

Commit 63376c6

Browse files
committed
Improve consistency in LowerIntrinsics.
In some cases `target` and `arg` are obtained fallibly, and in some cases they are obtained infallibly. This commit changes them all to infallible.
1 parent c7fdd43 commit 63376c6

File tree

1 file changed

+63
-62
lines changed

1 file changed

+63
-62
lines changed

compiler/rustc_mir_transform/src/lower_intrinsics.rs

+63-62
Original file line numberDiff line numberDiff line change
@@ -35,20 +35,19 @@ impl<'tcx> MirPass<'tcx> for LowerIntrinsics {
3535
terminator.kind = TerminatorKind::Goto { target };
3636
}
3737
sym::forget => {
38-
if let Some(target) = *target {
39-
block.statements.push(Statement {
40-
source_info: terminator.source_info,
41-
kind: StatementKind::Assign(Box::new((
42-
*destination,
43-
Rvalue::Use(Operand::Constant(Box::new(ConstOperand {
44-
span: terminator.source_info.span,
45-
user_ty: None,
46-
const_: Const::zero_sized(tcx.types.unit),
47-
}))),
48-
))),
49-
});
50-
terminator.kind = TerminatorKind::Goto { target };
51-
}
38+
let target = target.unwrap();
39+
block.statements.push(Statement {
40+
source_info: terminator.source_info,
41+
kind: StatementKind::Assign(Box::new((
42+
*destination,
43+
Rvalue::Use(Operand::Constant(Box::new(ConstOperand {
44+
span: terminator.source_info.span,
45+
user_ty: None,
46+
const_: Const::zero_sized(tcx.types.unit),
47+
}))),
48+
))),
49+
});
50+
terminator.kind = TerminatorKind::Goto { target };
5251
}
5352
sym::copy_nonoverlapping => {
5453
let target = target.unwrap();
@@ -121,43 +120,41 @@ impl<'tcx> MirPass<'tcx> for LowerIntrinsics {
121120
terminator.kind = TerminatorKind::Goto { target };
122121
}
123122
sym::add_with_overflow | sym::sub_with_overflow | sym::mul_with_overflow => {
124-
if let Some(target) = *target {
125-
let Ok([lhs, rhs]) = take_array(args) else {
126-
bug!("Wrong arguments for {} intrinsic", intrinsic.name);
127-
};
128-
let bin_op = match intrinsic.name {
129-
sym::add_with_overflow => BinOp::AddWithOverflow,
130-
sym::sub_with_overflow => BinOp::SubWithOverflow,
131-
sym::mul_with_overflow => BinOp::MulWithOverflow,
132-
_ => bug!("unexpected intrinsic"),
133-
};
134-
block.statements.push(Statement {
135-
source_info: terminator.source_info,
136-
kind: StatementKind::Assign(Box::new((
137-
*destination,
138-
Rvalue::BinaryOp(bin_op, Box::new((lhs.node, rhs.node))),
139-
))),
140-
});
141-
terminator.kind = TerminatorKind::Goto { target };
142-
}
123+
let target = target.unwrap();
124+
let Ok([lhs, rhs]) = take_array(args) else {
125+
bug!("Wrong arguments for {} intrinsic", intrinsic.name);
126+
};
127+
let bin_op = match intrinsic.name {
128+
sym::add_with_overflow => BinOp::AddWithOverflow,
129+
sym::sub_with_overflow => BinOp::SubWithOverflow,
130+
sym::mul_with_overflow => BinOp::MulWithOverflow,
131+
_ => bug!("unexpected intrinsic"),
132+
};
133+
block.statements.push(Statement {
134+
source_info: terminator.source_info,
135+
kind: StatementKind::Assign(Box::new((
136+
*destination,
137+
Rvalue::BinaryOp(bin_op, Box::new((lhs.node, rhs.node))),
138+
))),
139+
});
140+
terminator.kind = TerminatorKind::Goto { target };
143141
}
144142
sym::size_of | sym::min_align_of => {
145-
if let Some(target) = *target {
146-
let tp_ty = generic_args.type_at(0);
147-
let null_op = match intrinsic.name {
148-
sym::size_of => NullOp::SizeOf,
149-
sym::min_align_of => NullOp::AlignOf,
150-
_ => bug!("unexpected intrinsic"),
151-
};
152-
block.statements.push(Statement {
153-
source_info: terminator.source_info,
154-
kind: StatementKind::Assign(Box::new((
155-
*destination,
156-
Rvalue::NullaryOp(null_op, tp_ty),
157-
))),
158-
});
159-
terminator.kind = TerminatorKind::Goto { target };
160-
}
143+
let target = target.unwrap();
144+
let tp_ty = generic_args.type_at(0);
145+
let null_op = match intrinsic.name {
146+
sym::size_of => NullOp::SizeOf,
147+
sym::min_align_of => NullOp::AlignOf,
148+
_ => bug!("unexpected intrinsic"),
149+
};
150+
block.statements.push(Statement {
151+
source_info: terminator.source_info,
152+
kind: StatementKind::Assign(Box::new((
153+
*destination,
154+
Rvalue::NullaryOp(null_op, tp_ty),
155+
))),
156+
});
157+
terminator.kind = TerminatorKind::Goto { target };
161158
}
162159
sym::read_via_copy => {
163160
let Ok([arg]) = take_array(args) else {
@@ -219,17 +216,23 @@ impl<'tcx> MirPass<'tcx> for LowerIntrinsics {
219216
terminator.kind = TerminatorKind::Goto { target };
220217
}
221218
sym::discriminant_value => {
222-
if let (Some(target), Some(arg)) = (*target, args[0].node.place()) {
223-
let arg = tcx.mk_place_deref(arg);
224-
block.statements.push(Statement {
225-
source_info: terminator.source_info,
226-
kind: StatementKind::Assign(Box::new((
227-
*destination,
228-
Rvalue::Discriminant(arg),
229-
))),
230-
});
231-
terminator.kind = TerminatorKind::Goto { target };
232-
}
219+
let target = target.unwrap();
220+
let Ok([arg]) = take_array(args) else {
221+
span_bug!(
222+
terminator.source_info.span,
223+
"Wrong arguments for discriminant_value intrinsic"
224+
);
225+
};
226+
let arg = arg.node.place().unwrap();
227+
let arg = tcx.mk_place_deref(arg);
228+
block.statements.push(Statement {
229+
source_info: terminator.source_info,
230+
kind: StatementKind::Assign(Box::new((
231+
*destination,
232+
Rvalue::Discriminant(arg),
233+
))),
234+
});
235+
terminator.kind = TerminatorKind::Goto { target };
233236
}
234237
sym::offset => {
235238
let target = target.unwrap();
@@ -267,7 +270,6 @@ impl<'tcx> MirPass<'tcx> for LowerIntrinsics {
267270
Rvalue::Cast(CastKind::Transmute, arg.node, dst_ty),
268271
))),
269272
});
270-
271273
if let Some(target) = *target {
272274
terminator.kind = TerminatorKind::Goto { target };
273275
} else {
@@ -299,7 +301,6 @@ impl<'tcx> MirPass<'tcx> for LowerIntrinsics {
299301
Rvalue::Aggregate(Box::new(kind), fields.into()),
300302
))),
301303
});
302-
303304
terminator.kind = TerminatorKind::Goto { target };
304305
}
305306
sym::ptr_metadata => {

0 commit comments

Comments
 (0)