@@ -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