Fix double notify in equality engine (#4036)
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>
Thu, 12 Mar 2020 06:55:18 +0000 (01:55 -0500)
committerGitHub <noreply@github.com>
Thu, 12 Mar 2020 06:55:18 +0000 (23:55 -0700)
commit08431f8a51a62d02e3d3911db2e7754862953320
treea4abd012c53218634d13473da77caf79c1b55239
parent404affc37ba4961220e6ab02ee6175844151f6a9
Fix double notify in equality engine (#4036)

Fixes #3955.

Previously we were getting two calls to notifyNewEqClass from the equality engine for new application nodes, since the notification was being done in an internal call to newNode(...). The proper place to call this is in addTermInternal(...) which is called only once per Node per SAT context.

This bug potentially impacted some performance (due to redundant calls), and also broke the contract that notifyNewEqClass should only be called once per node per SAT context. In most cases, this was being handled in a benign way by theory solvers, although an assertion was failing in EqualityQuery, which is fixed by this PR.

A block of code changed indentation in this commit.
src/theory/uf/equality_engine.cpp
test/regress/CMakeLists.txt
test/regress/regress1/nl/issue3955-ee-double-notify.smt2 [new file with mode: 0644]