@@ -105,27 +105,27 @@ pub trait EvalContextExt<'tcx>: crate::MiriInterpCxExt<'tcx> {
105
105
}
106
106
107
107
"or" => {
108
- let ord = get_ord_at ( 1 ) ;
108
+ let ord = get_ord_at ( 2 ) ;
109
109
this. atomic_rmw_op ( args, dest, AtomicOp :: MirOp ( BinOp :: BitOr , false ) , rw_ord ( ord) ) ?;
110
110
}
111
111
"xor" => {
112
- let ord = get_ord_at ( 1 ) ;
112
+ let ord = get_ord_at ( 2 ) ;
113
113
this. atomic_rmw_op ( args, dest, AtomicOp :: MirOp ( BinOp :: BitXor , false ) , rw_ord ( ord) ) ?;
114
114
}
115
115
"and" => {
116
- let ord = get_ord_at ( 1 ) ;
116
+ let ord = get_ord_at ( 2 ) ;
117
117
this. atomic_rmw_op ( args, dest, AtomicOp :: MirOp ( BinOp :: BitAnd , false ) , rw_ord ( ord) ) ?;
118
118
}
119
119
"nand" => {
120
- let ord = get_ord_at ( 1 ) ;
120
+ let ord = get_ord_at ( 2 ) ;
121
121
this. atomic_rmw_op ( args, dest, AtomicOp :: MirOp ( BinOp :: BitAnd , true ) , rw_ord ( ord) ) ?;
122
122
}
123
123
"xadd" => {
124
- let ord = get_ord_at ( 1 ) ;
124
+ let ord = get_ord_at ( 2 ) ;
125
125
this. atomic_rmw_op ( args, dest, AtomicOp :: MirOp ( BinOp :: Add , false ) , rw_ord ( ord) ) ?;
126
126
}
127
127
"xsub" => {
128
- let ord = get_ord_at ( 1 ) ;
128
+ let ord = get_ord_at ( 2 ) ;
129
129
this. atomic_rmw_op ( args, dest, AtomicOp :: MirOp ( BinOp :: Sub , false ) , rw_ord ( ord) ) ?;
130
130
}
131
131
"min" => {
@@ -231,15 +231,14 @@ trait EvalContextPrivExt<'tcx>: MiriInterpCxExt<'tcx> {
231
231
let place = this. deref_pointer ( place) ?;
232
232
let rhs = this. read_immediate ( rhs) ?;
233
233
234
- if !place. layout . ty . is_integral ( ) && !place. layout . ty . is_raw_ptr ( ) {
234
+ if !( place. layout . ty . is_integral ( ) || place. layout . ty . is_raw_ptr ( ) )
235
+ || !( rhs. layout . ty . is_integral ( ) || rhs. layout . ty . is_raw_ptr ( ) )
236
+ {
235
237
span_bug ! (
236
238
this. cur_span( ) ,
237
239
"atomic arithmetic operations only work on integer and raw pointer types" ,
238
240
) ;
239
241
}
240
- if rhs. layout . ty != place. layout . ty {
241
- span_bug ! ( this. cur_span( ) , "atomic arithmetic operation type mismatch" ) ;
242
- }
243
242
244
243
let old = match atomic_op {
245
244
AtomicOp :: Min =>
0 commit comments