avoid creating unnecessary copies of allocating constants in field fl… #7421
+78
−16
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.
…attening
Fixes #7406
The underlying issue of copying constants that allocate, such as empty record creation
{}
, seems to have always been there in the compiler.fix: avoid creating unnecessary copies of allocating constants in field flattening
The field flattening optimization was creating unnecessary copies of allocating constants (like Const_block and Const_some), which can be inconsistent. This change makes the optimization only flatten fields when the constant doesn't allocate memory.
The original example in #7406 that assigns to a mutable field was losing the assignment to the mutable field entirely. This is probably because a copy of the nested object was made, then the assignment, and since the copy of the object is never exported, it might have been removed as dead code.