compiler: Fix type inference bug for bit strings #7271
Merged
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 beam_ssa_type pass deduces the type of variables from the result of relational operators. In the true-branch following a
A '=:=' B
, the variablesA
andB
are deduced to be of the typebeam_types:meet(type(A), type(B))
which is not necessarily true for bit strings. Bit strings are special in that nothing about their appendable-status can be deduced from a comparison. The only information gained is the size_unit. The appendable status is unchanged by the comparison.This patch corrects a type inference bug for bit strings where a comparison would falsely set the appendable flag for non-appendable bit strings in the true-branch. The fix special-cases the type inferring following a
=:=
when one or both arguments are appendable by clearing the appendable status, calculating the resulting type and then restoring the appendable-status of the variables.[edited to match updated commit message]