Fix some const asserts not throwing errors #205
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Currently some assertions that can be statically determined to be false, do not cause a compile time error to be thrown, while some do.
For example,
causes this error to be thrown
whereas this essentially identical program does not
(instead circ happily generates a circuit that always returns false)
Needless to say this can make debugging difficult. Luckily, I believe fixing this is a one line change. The culprit seems to be here:
circ/src/front/zsharp/mod.rs
Line 1254 in 2b54efa
Since
expr_impl
is called withIS_CNST = true
, it returnsErr
in the latter program sincex
is not a const variable. However, as far as I can tell, this check is unnecessary. The relevant matter is whether (after constant folding), the expression evaluates tofalse
which is what the subsequent call toconst_bool
is checking anyway. Hence the solution seems to be to callexpr_impl
withIS_CNST = false
instead.