Make regular options access const (#8754)
authorGereon Kremer <gkremer@cs.stanford.edu>
Thu, 12 May 2022 04:52:31 +0000 (21:52 -0700)
committerGitHub <noreply@github.com>
Thu, 12 May 2022 04:52:31 +0000 (21:52 -0700)
commit97a870f131138662d93299c76ef49865bbc6f546
tree0bc2bd58d7302c293093f60e0240e3ad380687a1
parent9a191a3fae2abfc68be734ca5790024fea93e9f1
Make regular options access const (#8754)

One of the loose ends of the options refactor is that internal code can write to options at will, even when the accessing it via Env::getOptions() which returns a const reference. There are technical reasons for this, C++ does not propagate the constness into reference members.
This PR changes this behaviour by making the references members we use all over the place (options().smt.foo) const references and adding new functions writeSmt() which allow write access -- if you have a non-const handle to the options object.
In order to do that, this PR also changes all places that legitimately change the options (options handlers, set defaults, solver engine and places where we spawn subsolvers) to use the new syntax. After that, only a single place remains: the solver engine attempts to write the filename (from Solver::setInfo("filename", "...");) into the original options (that are restored to the new solver object after a reset. As only the API solver has write access to this, it is moved to the Solver::setInfo() method.

With this PR, all internal code is properly guarded against erroneous (and reckless) changing of options.
Fixes cvc5/cvc5-projects#12.
12 files changed:
src/api/cpp/cvc5.cpp
src/options/README.md
src/options/mkoptions.py
src/options/options_handler.cpp
src/options/options_template.cpp
src/smt/set_defaults.cpp
src/smt/solver_engine.cpp
src/smt/sygus_solver.cpp
src/theory/quantifiers/query_generator_unsat.cpp
src/theory/quantifiers/sygus/synth_verify.cpp
test/unit/node/node_black.cpp
test/unit/theory/theory_arith_coverings_white.cpp