Fix corner case in model construction of strings (#3524)
authorAndres Noetzli <andres.noetzli@gmail.com>
Wed, 4 Dec 2019 00:20:13 +0000 (16:20 -0800)
committerGitHub <noreply@github.com>
Wed, 4 Dec 2019 00:20:13 +0000 (16:20 -0800)
commitf3d40cc254026805259c511dd706d87a130c807e
tree5207abb94e80a577a213dd7455e80c56948c9be5
parent48ba9401dd647e737b79f1605dc68c44119e5baf
Fix corner case in model construction of strings (#3524)

This commit fixes a corner case in the model construction of strings:
For a given length, we were assuming that for each equivalence class, we
could always find an initial guess for a constant to assign to it. This
was not always true, however, because a preceding equivalence class
could use up all constants and get assigned the last remaining one, so
we wouldn't have a constant remaining for the current class. This
resulted in an assertion failure (in debug) or a crash (in production).
This commit fixes the issue by checking whether we've run out of
constants before assigning an initial constant for an equivalence class.
src/theory/strings/theory_strings.cpp