Compiler Bug : overwriting definitions in defuse (#2900) #2971
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.
Fixes #2900
Bug in file def_use in method setDefinitionsAt class AllDefinitions
In that method definition in map atPoint is overridden
This happens beacuse there is more than one AsssignStatement with the same id
Pass KeySideEffect is creating those AssignStatements (in method KeySideEffect::doStatement)
This method creates a BlockStatement and inserts AssignStatements from TableInsertions variable and then inserts that block before tbl.apply()
Bug is removed by cloning an AssignStatement before inserting it in a BlockStatement
Backend pass CopyMatchKeysToSingleStruct inherits KeySideEffect
Backend uses this pass to transform tables such that all the Match keys are part of the same header/metadata struct
With cloning two test fail (psa-dpdk-table-key-consolidation-if*) in spec file
This happens because for every assignment DpdkMovStatement is created and inserted in instractions (pass ConvertStatementToDpdk)
There is no need for this new DpdkMovStatements because src is already in dest (it is done the first time we call tbl.apply)
This is fixed by setting SideEffect::doStatement to be virtual and overriding it in class CopyMatchKeysToSingleStruct
In this override there is no cloning