Fix parser issue with tuple_project operator (#8021)
authormudathirmahgoub <mudathirmahgoub@gmail.com>
Wed, 2 Feb 2022 14:16:26 +0000 (08:16 -0600)
committerGitHub <noreply@github.com>
Wed, 2 Feb 2022 14:16:26 +0000 (08:16 -0600)
The current parser accepts the smtlib code below since it ignores all arguments after z.
This PR fixes this issue by sending all arguments to the operator to be checked.

(set-logic ALL)
(declare-fun z () (Tuple Int Int Int Int Int Int))
(declare-fun f () (Tuple Int Int Int))
(assert (= f ((_ tuple_project 0 1 2) z f f f f f f f f 0 0 0 0 0)))
(check-sat)

src/parser/smt2/smt2.cpp

index a93596633b73536c77580e5a99f0e4880979fe52..62b3d7bf6bcbab0b630ce2680fd82a5b8cd74729 100644 (file)
@@ -1051,7 +1051,7 @@ api::Term Smt2::applyParseOp(ParseOp& p, std::vector<api::Term>& args)
   }
   else if (p.d_kind == api::TUPLE_PROJECT)
   {
-    api::Term ret = d_solver->mkTerm(p.d_op, args[0]);
+    api::Term ret = d_solver->mkTerm(p.d_op, args);
     Debug("parser") << "applyParseOp: return projection " << ret << std::endl;
     return ret;
   }