Previously coverage data about header files from the C++ library (in /usr) was
included in the lcov coverage report. We want to exclude these files as we are
only interested in coverage of cprover code and excluding library code also
gives a more accurate percentage of overall coverage.
Correctly set the environment variables VCS_COMMIT_ID and VCS_PULL_REQUEST which
are used by the codecov bash script to commit coverage data to codecov and
associate it with the correct commit/PR.
Lifting lets may add equations to the formula, which would then use
symbols before they had been declared. Thus do not lift lets occurring
within exits/forall expressions.
While at it, also make sure declarations introduced by resolved
quantifiers yield a corresponding "dead" statement to be symbolically
executed.
An intended use case is to find regression tests that need to be adapted when a
loss of coverage in some files is observed when a new feature is merged.
For example, when improving the constant propagator to propagate more
operations, some existing tests that were intended to test the constraint
encoding of those operations might then be solved via constant propagation.
Thus, the existing tests need to be adapted to use non-constants as inputs.
This commit introduces an extra state to the STL scanner in order to
detect if the current identifier is a module name. If it is, the
surrounding quotes are cut. The quotes are syntactically required but do
not contribute to the module names being unique, therefore cutting them
is allowed. Doing so simplifies both the user and the language
interface. Existing regression tests were changed in a way that all
directly refer to the default entry point which was introduced by a
past commit. One test, Function_Call2, is now responsible for checking
the --function flag.
Fixes problem where outer class type parameters take precedence over inner class ones
Previously field would be given the type of the argument assigned to A::T, not B::T.
class A<T> { class B<T> { T field; } }?
This fixes the problem where we tried to unwind stacks in step that are not related, e.g. when a third generic class refers to two mutually recursive generic classes
Instead stacks are created per scope (generic context) and unwound individually
Also fixes problem where self-recursion isn't handled properly
Add test that would have triggered invariant in get_recursively_instantiated_type
Previously the code relied on the fact that class_type is a reference to class_symbol.type and so after a new type got copied assigned into class_symbol.type, class_type became a reference to the new value.