@@ -263,25 +263,25 @@ module BitfieldFunctor (Ints_t : IntOps.IntOps): Bitfield_SOverflow with type in
263263 else
264264 top_of ik
265265
266- let cast_to ?torg ?(no_ov =false ) ik (z ,o ) =
266+ let cast_to ?from_ik ?(no_ov =false ) ik (z ,o ) =
267267 let (min_ik, max_ik) = Size. range ik in
268- let (underflow, overflow) = match torg with
268+ let (underflow, overflow) = match from_ik with
269269 | None -> (false , false ) (* ik does not change *)
270- | Some ( GoblintCil.Cil. TInt ( old_ik , _ ) | TEnum ( { ekind = old_ik ; _} , _ )) ->
270+ | Some old_ik ->
271271 let underflow = Z. compare (BArith. min old_ik (z,o)) min_ik < 0 in
272272 let overflow = Z. compare max_ik (BArith. max old_ik (z,o)) < 0 in
273273 (underflow, overflow)
274- | _ ->
275- let isPos = z < : Ints_t. zero in
276- let isNeg = o < : Ints_t. zero in
277- let underflow = if GoblintCil. isSigned ik then (((Ints_t. of_bigint min_ik) &: z) <> : Ints_t. zero) && isNeg else isNeg in
278- let overflow = (((! :(Ints_t.of_bigint max_ik )) &: o) <> : Ints_t.zero ) && isPos in
279- (underflow, overflow)
274+ (* | _ -> (* TODO: what is this case? was it always dead? *)
275+ let isPos = z <: Ints_t.zero in
276+ let isNeg = o <: Ints_t.zero in
277+ let underflow = if GoblintCil.isSigned ik then (((Ints_t.of_bigint min_ik) &: z) <>: Ints_t.zero) && isNeg else isNeg in
278+ let overflow = (((!:(Ints_t.of_bigint max_ik)) &: o) <>: Ints_t.zero) && isPos in
279+ (underflow, overflow) * )
280280 in
281281 let overflow_info = {underflow; overflow} in
282282 (norm ~ov: (underflow || overflow) ik (z,o), overflow_info)
283283
284- let cast_to ~kind ?torg ?(no_ov =false ) ik (z ,o ) =
284+ let cast_to ~kind ?from_ik ?(no_ov =false ) ik (z ,o ) =
285285 if ik = GoblintCil. IBool then (
286286 let may_zero =
287287 if Ints_t. equal z BArith. one_mask then (* zero bit may be in every position (one_mask) *)
@@ -298,7 +298,7 @@ module BitfieldFunctor (Ints_t : IntOps.IntOps): Bitfield_SOverflow with type in
298298 (BArith. join may_zero may_one, {underflow= false ; overflow= false })
299299 )
300300 else
301- cast_to ?torg ~no_ov ik (z,o)
301+ cast_to ?from_ik ~no_ov ik (z,o)
302302
303303 let join ik b1 b2 = norm ik @@ (BArith. join b1 b2)
304304
0 commit comments