Generating an invert operation for boolean xor is invalid in most contexts due to integer promotion #192
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.
The problem with generating
~(boolean_var)
for a 'not' pattern match is that, in the context of an if-statement, this results inif (~(boolean_var))
. However,~
promotes it to an integer. In caseboolean_var
is true, this operation thus results in a value of 111111[...]110, which evaluates to true, not false.This isn't noticeable when the end result is immediately returned from a function as an i1 itself; but in cases where the end result is used in an if-statement it is incorrect.
By removing this pattern match, xor is just used for the code generation, which does work in this case.