3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2026-01-18 16:28:56 +00:00

Revert "Merge pull request #8190 from Z3Prover/copilot/fix-std-format-usage"

This reverts commit d9bdb6b83c, reversing
changes made to 8b188621a5.
This commit is contained in:
Lev Nachmanson 2026-01-13 18:18:07 -10:00
parent 3bf271bb42
commit d5e0216070
7 changed files with 104 additions and 87 deletions

View file

@ -17,7 +17,6 @@ Revision History:
--*/
#include<sstream>
#include<format>
#include "ast/array_decl_plugin.h"
#include "util/warning.h"
#include "ast/ast_pp.h"
@ -140,8 +139,10 @@ func_decl * array_decl_plugin::mk_const(sort * s, unsigned arity, sort * const *
func_decl * array_decl_plugin::mk_map(func_decl* f, unsigned arity, sort* const* domain) {
if (arity != f->get_arity()) {
m_manager->raise_exception(std::format("map expects to take as many arguments as the function being mapped, it was given {} but expects {}",
arity, f->get_arity()));
std::ostringstream buffer;
buffer << "map expects to take as many arguments as the function being mapped, "
<< "it was given " << arity << " but expects " << f->get_arity();
m_manager->raise_exception(buffer.str());
return nullptr;
}
if (arity == 0) {
@ -156,21 +157,32 @@ func_decl * array_decl_plugin::mk_map(func_decl* f, unsigned arity, sort* const*
unsigned dom_arity = get_array_arity(domain[0]);
for (unsigned i = 0; i < arity; ++i) {
if (!is_array_sort(domain[i])) {
m_manager->raise_exception(std::format("map expects an array sort as argument at position {}", i));
std::ostringstream buffer;
buffer << "map expects an array sort as argument at position " << i;
m_manager->raise_exception(buffer.str());
return nullptr;
}
if (get_array_arity(domain[i]) != dom_arity) {
m_manager->raise_exception(std::format("map expects all arguments to have the same array domain, this is not the case for argument {}", i));
std::ostringstream buffer;
buffer << "map expects all arguments to have the same array domain, "
<< "this is not the case for argument " << i;
m_manager->raise_exception(buffer.str());
return nullptr;
}
for (unsigned j = 0; j < dom_arity; ++j) {
if (get_array_domain(domain[i],j) != get_array_domain(domain[0],j)) {
m_manager->raise_exception(std::format("map expects all arguments to have the same array domain, this is not the case for argument {}", i));
std::ostringstream buffer;
buffer << "map expects all arguments to have the same array domain, "
<< "this is not the case for argument " << i;
m_manager->raise_exception(buffer.str());
return nullptr;
}
}
if (get_array_range(domain[i]) != f->get_domain(i)) {
m_manager->raise_exception(std::format("map expects the argument at position {} to have the array range the same as the function", i));
std::ostringstream buffer;
buffer << "map expects the argument at position " << i
<< " to have the array range the same as the function";
m_manager->raise_exception(buffer.str());
return nullptr;
}
}
@ -231,8 +243,9 @@ func_decl* array_decl_plugin::mk_select(unsigned arity, sort * const * domain) {
parameter const* parameters = s->get_parameters();
if (num_parameters != arity) {
m_manager->raise_exception(std::format("select requires {} arguments, but was provided with {} arguments",
num_parameters, arity));
std::stringstream strm;
strm << "select requires " << num_parameters << " arguments, but was provided with " << arity << " arguments";
m_manager->raise_exception(strm.str());
return nullptr;
}
ptr_buffer<sort> new_domain; // we need this because of coercions.
@ -241,9 +254,10 @@ func_decl* array_decl_plugin::mk_select(unsigned arity, sort * const * domain) {
if (!parameters[i].is_ast() ||
!is_sort(parameters[i].get_ast()) ||
!m_manager->compatible_sorts(domain[i+1], to_sort(parameters[i].get_ast()))) {
m_manager->raise_exception(std::format("domain sort {} and parameter {} do not match",
to_string(sort_ref(domain[i+1], *m_manager)),
to_string(parameter_pp(parameters[i], *m_manager))));
std::stringstream strm;
strm << "domain sort " << sort_ref(domain[i+1], *m_manager) << " and parameter ";
strm << parameter_pp(parameters[i], *m_manager) << " do not match";
m_manager->raise_exception(strm.str());
return nullptr;
}
new_domain.push_back(to_sort(parameters[i].get_ast()));
@ -267,8 +281,10 @@ func_decl * array_decl_plugin::mk_store(unsigned arity, sort * const * domain) {
return nullptr;
}
if (arity != num_parameters+1) {
m_manager->raise_exception(std::format("store expects the first argument to be an array taking {}, instead it was passed {} arguments",
num_parameters+1, arity - 1));
std::ostringstream buffer;
buffer << "store expects the first argument to be an array taking " << num_parameters+1
<< ", instead it was passed " << (arity - 1) << "arguments";
m_manager->raise_exception(buffer.str());
UNREACHABLE();
return nullptr;
}
@ -282,9 +298,9 @@ func_decl * array_decl_plugin::mk_store(unsigned arity, sort * const * domain) {
sort* srt1 = to_sort(parameters[i].get_ast());
sort* srt2 = domain[i+1];
if (!m_manager->compatible_sorts(srt1, srt2)) {
m_manager->raise_exception(std::format("domain sort {} and parameter sort {} do not match",
to_string(sort_ref(srt2, *m_manager)),
to_string(sort_ref(srt1, *m_manager))));
std::stringstream strm;
strm << "domain sort " << sort_ref(srt2, *m_manager) << " and parameter sort " << sort_ref(srt1, *m_manager) << " do not match";
m_manager->raise_exception(strm.str());
UNREACHABLE();
return nullptr;
}
@ -317,11 +333,15 @@ func_decl * array_decl_plugin::mk_array_ext(unsigned arity, sort * const * domai
bool array_decl_plugin::check_set_arguments(unsigned arity, sort * const * domain) {
for (unsigned i = 0; i < arity; ++i) {
if (domain[i] != domain[0]) {
m_manager->raise_exception(std::format("arguments {} and {} have different sorts", 1, i+1));
std::ostringstream buffer;
buffer << "arguments " << 1 << " and " << (i+1) << " have different sorts";
m_manager->raise_exception(buffer.str());
return false;
}
if (domain[i]->get_family_id() != m_family_id) {
m_manager->raise_exception(std::format("argument {} is not of array sort", i+1));
std::ostringstream buffer;
buffer << "argument " << (i+1) << " is not of array sort";
m_manager->raise_exception(buffer.str());
return false;
}
}

View file

@ -17,7 +17,6 @@ Revision History:
--*/
#include <sstream>
#include <format>
#include <cstring>
#include "ast/ast.h"
#include "ast/ast_pp.h"
@ -1022,9 +1021,9 @@ sort* basic_decl_plugin::join(sort* s1, sort* s2) {
return s2;
if (s2 == m_bool_sort && s1->get_family_id() == arith_family_id)
return s1;
throw ast_exception(std::format("Sorts {} and {} are incompatible",
to_string(mk_pp(s1, *m_manager)),
to_string(mk_pp(s2, *m_manager))));
std::ostringstream buffer;
buffer << "Sorts " << mk_pp(s1, *m_manager) << " and " << mk_pp(s2, *m_manager) << " are incompatible";
throw ast_exception(buffer.str());
}
@ -1701,8 +1700,10 @@ ast * ast_manager::register_node_core(ast * n) {
SASSERT(contains);
SASSERT(m_ast_table.contains(n));
if (is_func_decl(r) && to_func_decl(r)->get_range() != to_func_decl(n)->get_range()) {
throw ast_exception(std::format("Recycling of declaration for the same name '{}' and domain, but different range type is not permitted",
to_func_decl(r)->get_name().str()));
std::ostringstream buffer;
buffer << "Recycling of declaration for the same name '" << to_func_decl(r)->get_name().str()
<< "' and domain, but different range type is not permitted";
throw ast_exception(buffer.str());
}
deallocate_node(n, ::get_node_size(n));
return r;
@ -2021,11 +2022,11 @@ void ast_manager::check_sort(func_decl const * decl, unsigned num_args, expr * c
for (unsigned i = 0; i < num_args; i++) {
sort * given = args[i]->get_sort();
if (!compatible_sorts(expected, given)) {
throw ast_exception(std::format("invalid function application for {}, sort mismatch on argument at position {}, expected {} but given {}",
to_string(decl->get_name()),
i + 1,
to_string(mk_pp(expected, m)),
to_string(mk_pp(given, m))));
std::ostringstream buff;
buff << "invalid function application for " << decl->get_name() << ", ";
buff << "sort mismatch on argument at position " << (i+1) << ", ";
buff << "expected " << mk_pp(expected, m) << " but given " << mk_pp(given, m);
throw ast_exception(buff.str());
}
}
}
@ -2037,11 +2038,11 @@ void ast_manager::check_sort(func_decl const * decl, unsigned num_args, expr * c
sort * expected = decl->get_domain(i);
sort * given = args[i]->get_sort();
if (!compatible_sorts(expected, given)) {
throw ast_exception(std::format("invalid function application for {}, sort mismatch on argument at position {}, expected {} but given {}",
to_string(decl->get_name()),
i + 1,
to_string(mk_pp(expected, m)),
to_string(mk_pp(given, m))));
std::ostringstream buff;
buff << "invalid function application for " << decl->get_name() << ", ";
buff << "sort mismatch on argument at position " << (i+1) << ", ";
buff << "expected " << mk_pp(expected, m) << " but given " << mk_pp(given, m);
throw ast_exception(buff.str());
}
}
}
@ -2196,10 +2197,12 @@ void ast_manager::check_args(func_decl* f, unsigned n, expr* const* es) {
sort * actual_sort = es[i]->get_sort();
sort * expected_sort = f->is_associative() ? f->get_domain(0) : f->get_domain(i);
if (expected_sort != actual_sort) {
throw ast_exception(std::format("Sort mismatch at argument #{} for function {} supplied sort is {}",
i + 1,
to_string(mk_pp(f, *this)),
to_string(mk_pp(actual_sort, *this))));
std::ostringstream buffer;
buffer << "Sort mismatch at argument #" << (i+1)
<< " for function " << mk_pp(f,*this)
<< " supplied sort is "
<< mk_pp(actual_sort, *this);
throw ast_exception(buffer.str());
}
}
}
@ -2220,13 +2223,12 @@ app * ast_manager::mk_app(func_decl * decl, unsigned num_args, expr * const * ar
decl->get_family_id() == basic_family_id && !decl->is_associative());
if (type_error) {
std::string arg_list;
std::ostringstream buffer;
buffer << "Wrong number of arguments (" << num_args
<< ") passed to function " << mk_pp(decl, *this) << " ";
for (unsigned i = 0; i < num_args; ++i)
arg_list += std::format("\narg: {}\n", to_string(mk_pp(args[i], *this)));
throw ast_exception(std::format("Wrong number of arguments ({}) passed to function {} {}",
num_args,
to_string(mk_pp(decl, *this)),
arg_list));
buffer << "\narg: " << mk_pp(args[i], *this) << "\n";
throw ast_exception(std::move(buffer).str());
}
app * r = nullptr;
if (num_args == 1 && decl->is_chainable() && decl->get_arity() == 2) {

View file

@ -71,11 +71,3 @@ inline std::string& operator+=(std::string& s, mk_pp const& pp) {
return s = s + pp;
}
// Helper function to convert streamable objects (like mk_pp) to strings for use with std::format
template<typename T>
inline std::string to_string(T const& obj) {
std::ostringstream strm;
strm << obj;
return std::move(strm).str();
}

View file

@ -17,7 +17,6 @@ Revision History:
--*/
#include<sstream>
#include<format>
#include "ast/bv_decl_plugin.h"
#include "ast/arith_decl_plugin.h"
#include "util/warning.h"
@ -673,11 +672,9 @@ func_decl * bv_decl_plugin::mk_func_decl(decl_kind k, unsigned num_parameters, p
}
for (unsigned i = 0; i < num_args; ++i) {
if (args[i]->get_sort() != r->get_domain(i)) {
m.raise_exception(std::format("Argument {} at position {} has sort {} it does not match declaration {}",
to_string(mk_pp(args[i], m)),
i,
to_string(mk_pp(args[i]->get_sort(), m)),
to_string(mk_pp(r, m))));
std::ostringstream buffer;
buffer << "Argument " << mk_pp(args[i], m) << " at position " << i << " has sort " << mk_pp(args[i]->get_sort(), m) << " it does not match declaration " << mk_pp(r, m);
m.raise_exception(buffer.str());
return nullptr;
}
}

View file

@ -17,8 +17,6 @@ Revision History:
--*/
#include<sstream>
#include<format>
#include "util/warning.h"
#include "ast/array_decl_plugin.h"
#include "ast/seq_decl_plugin.h"
@ -379,9 +377,10 @@ namespace datatype {
return nullptr;
}
if (rng != domain[1]) {
m.raise_exception(std::format("second argument to field update should be {} instead of {}",
to_string(mk_ismt2_pp(rng, m)),
to_string(mk_ismt2_pp(domain[1], m))));
std::ostringstream buffer;
buffer << "second argument to field update should be " << mk_ismt2_pp(rng, m)
<< " instead of " << mk_ismt2_pp(domain[1], m);
m.raise_exception(buffer.str());
return nullptr;
}
range = domain[0];

View file

@ -17,7 +17,6 @@ Revision History:
--*/
#include<sstream>
#include<format>
#include "ast/ast_pp.h"
#include "ast/array_decl_plugin.h"
@ -53,7 +52,9 @@ namespace datalog {
if (low <= val && val <= up) {
return true;
}
m_manager->raise_exception(std::format("{}, value is not within bound {} <= {} <= {}", msg, low, val, up));
std::ostringstream buffer;
buffer << msg << ", value is not within bound " << low << " <= " << val << " <= " << up;
m_manager->raise_exception(buffer.str());
return false;
}

View file

@ -21,7 +21,6 @@ Revision History:
#include "ast/array_decl_plugin.h"
#include "ast/ast_pp.h"
#include <sstream>
#include <format>
seq_decl_plugin::seq_decl_plugin(): m_init(false),
@ -83,8 +82,10 @@ void seq_decl_plugin::match_assoc(psig& sig, unsigned dsz, sort *const* dom, sor
ptr_vector<sort> binding;
ast_manager& m = *m_manager;
if (dsz == 0) {
m.raise_exception(std::format("Unexpected number of arguments to '{}' at least one argument expected {} given",
sig.m_name.str(), dsz));
std::ostringstream strm;
strm << "Unexpected number of arguments to '" << sig.m_name << "' ";
strm << "at least one argument expected " << dsz << " given";
m.raise_exception(strm.str());
}
bool is_match = true;
for (unsigned i = 0; is_match && i < dsz; ++i) {
@ -95,16 +96,16 @@ void seq_decl_plugin::match_assoc(psig& sig, unsigned dsz, sort *const* dom, sor
is_match = match(binding, range, sig.m_range);
}
if (!is_match) {
std::string domain_str;
std::ostringstream strm;
strm << "Sort of function '" << sig.m_name << "' ";
strm << "does not match the declared type. Given domain: ";
for (unsigned i = 0; i < dsz; ++i) {
domain_str += to_string(mk_pp(dom[i], m)) + " ";
strm << mk_pp(dom[i], m) << " ";
}
std::string range_str;
if (range) {
range_str = std::format(" and range: {}", to_string(mk_pp(range, m)));
strm << " and range: " << mk_pp(range, m);
}
m.raise_exception(std::format("Sort of function '{}' does not match the declared type. Given domain: {}{}",
sig.m_name.str(), domain_str, range_str));
m.raise_exception(strm.str());
}
range_out = apply_binding(binding, sig.m_range);
SASSERT(range_out);
@ -114,8 +115,10 @@ void seq_decl_plugin::match(psig& sig, unsigned dsz, sort *const* dom, sort* ran
m_binding.reset();
ast_manager& m = *m_manager;
if (sig.m_dom.size() != dsz) {
m.raise_exception(std::format("Unexpected number of arguments to '{}' {} arguments expected {} given",
sig.m_name.str(), sig.m_dom.size(), dsz));
std::ostringstream strm;
strm << "Unexpected number of arguments to '" << sig.m_name << "' ";
strm << sig.m_dom.size() << " arguments expected " << dsz << " given";
m.raise_exception(strm.str());
}
bool is_match = true;
for (unsigned i = 0; is_match && i < dsz; ++i) {
@ -125,25 +128,28 @@ void seq_decl_plugin::match(psig& sig, unsigned dsz, sort *const* dom, sort* ran
is_match = match(m_binding, range, sig.m_range);
}
if (!is_match) {
std::string given_domain;
std::ostringstream strm;
strm << "Sort of polymorphic function '" << sig.m_name << "' ";
strm << "does not match the declared type. ";
strm << "\nGiven domain: ";
for (unsigned i = 0; i < dsz; ++i) {
given_domain += to_string(mk_pp(dom[i], m)) + " ";
strm << mk_pp(dom[i], m) << " ";
}
std::string range_str;
if (range) {
range_str = std::format(" and range: {}", to_string(mk_pp(range, m)));
strm << " and range: " << mk_pp(range, m);
}
std::string expected_domain;
strm << "\nExpected domain: ";
for (unsigned i = 0; i < dsz; ++i) {
expected_domain += to_string(mk_pp(sig.m_dom[i].get(), m)) + " ";
strm << mk_pp(sig.m_dom[i].get(), m) << " ";
}
m.raise_exception(std::format("Sort of polymorphic function '{}' does not match the declared type. \nGiven domain: {}{}\nExpected domain: {}",
sig.m_name.str(), given_domain, range_str, expected_domain));
m.raise_exception(strm.str());
}
if (!range && dsz == 0) {
m.raise_exception(std::format("Sort of polymorphic function '{}' is ambiguous. Function takes no arguments and sort of range has not been constrained",
sig.m_name.str()));
std::ostringstream strm;
strm << "Sort of polymorphic function '" << sig.m_name << "' ";
strm << "is ambiguous. Function takes no arguments and sort of range has not been constrained";
m.raise_exception(strm.str());
}
range_out = apply_binding(m_binding, sig.m_range);
SASSERT(range_out);