Skip to content

Commit

Permalink
[SMTLIB backend] Fix issue when a variable has the same name as a field
Browse files Browse the repository at this point in the history
  • Loading branch information
TDacik committed Oct 25, 2024
1 parent 4fd6511 commit 7d8650d
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 2 deletions.
11 changes: 11 additions & 0 deletions benchmarks/99-regression/02-same_name_var_field.smt2
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
(set-info :source Astral)
(set-info :status sat)

(declare-sort Loc 0)
(declare-heap (Loc Loc))

(declare-const next Loc)

(assert (pto next next))

(check-sat)
4 changes: 2 additions & 2 deletions src/backend/smtlib_backend_builder.ml
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@ module Make (Backend : SMTLIB_BACKEND) = struct
try translate_std_sort translate_sort sort
with NonStandardTerm _ -> Backend.translate_non_std_sort translate_sort sort

let translate_var_decl (SMT.Variable (name, sort)) =
Format.asprintf "(declare-const %s %s)" (Identifier.show name) (translate_sort sort)
let translate_var_decl (SMT.Variable (name, sort) as var) =
Format.asprintf "(declare-const %s %s)" (translate_var_name var) (translate_sort sort)

let translate_sort_decl = function
| Sort.Bool | Sort.Int | Sort.Array _ | Sort.Bitvector _ -> ""
Expand Down
9 changes: 9 additions & 0 deletions src/logics/Sort.ml
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,15 @@ let rec show = function
| Sum sorts -> "(" ^ (String.concat " | " @@ List.map show sorts) ^ ")"
| Uninterpreted name -> name

let rec show_kind = function
| Bool -> "bool"
| Int -> "int"
| Loc name -> "loc_" ^ name
| Finite (name, _) -> "finite_" ^ name
| Array (dom, range) -> "array_" ^ (show_kind dom) ^ "_" ^ (show_kind range)
| Bitvector width -> "bitvector_" ^ string_of_int width
| Uninterpreted name -> "uninterpreted_" ^ name

let get_dom_sort = function
| Set dom_sort -> dom_sort
| Sequence dom_sort -> dom_sort
Expand Down
2 changes: 2 additions & 0 deletions src/logics/Sort.mli
Original file line number Diff line number Diff line change
Expand Up @@ -75,3 +75,5 @@ val is_atomic : t -> bool
val substitute : t -> t -> t -> t
(** [substitute sort pattern target] replaces all occurences of sort pattern by atomic sort
target. *)

val show_kind : t -> string

0 comments on commit 7d8650d

Please sign in to comment.