Skip to content

Commit 677970d

Browse files
Merge pull request #790 from Dudeldu/fix-get-ikind-master
Fix `get_ikind` in `eval_rv_ask_mustbeequal` and `is_safe_cast`
2 parents 4f57a8d + b12015a commit 677970d

File tree

2 files changed

+4
-3
lines changed

2 files changed

+4
-3
lines changed

src/analyses/base.ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -664,7 +664,7 @@ struct
664664
in
665665
let r =
666666
match exp with
667-
| BinOp (op,arg1,arg2,_) -> binop op arg1 arg2
667+
| BinOp (op,arg1,arg2,_) when Cil.isIntegralType (Cilfacade.typeOf exp) -> binop op arg1 arg2
668668
| _ -> eval_next ()
669669
in
670670
if M.tracing then M.traceu "evalint" "base eval_rv_ask_mustbeequal %a -> %a\n" d_exp exp VD.pretty r;

src/cdomains/valueDomain.ml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -259,8 +259,9 @@ struct
259259
| TInt (ik,_), TFloat (fk,_) (* does a1 fit into ik's range? *)
260260
| TFloat (fk,_), TInt (ik,_) (* can a1 be represented as fk? *)
261261
-> false (* TODO precision *)
262-
| _ -> IntDomain.Size.is_cast_injective ~from_type:t1 ~to_type:t2 && bitsSizeOf t2 >= bitsSizeOf t1
263-
(*| _ -> false*)
262+
| (TInt _ | TEnum _ | TPtr _) , (TInt _ | TEnum _ | TPtr _) ->
263+
IntDomain.Size.is_cast_injective ~from_type:t1 ~to_type:t2 && bitsSizeOf t2 >= bitsSizeOf t1
264+
| _ -> false
264265

265266
let ptr_ikind () = match !upointType with TInt (ik,_) -> ik | _ -> assert false
266267

0 commit comments

Comments
 (0)