This commit fixes a bug in the `noAlias` function, that failed to detect
two aliasing accesses when the second was writeOnly (so it did not read
memory).
That causes the transfer function of the Available Expression analysis
in SwitchToStatements to wrongly see some expressions as available,
because of the undetected aliasing write that would otherwise overwrite
the available expression.
Introduce the `ImportFiles` pipe which leverages the newly-introduced
`FileStorage` to fetch the required files and store them in the
`BinariesContainer`.
The `serialize` function of `revng::pypeline::Model` erroneously
returned a buffer instead of `bytes`, fix the function so that `bytes`
are returned instead.
Add a helper function that given a `size_t` or a tuple-like type, allows
calling a lambda with the expanded sequence pack. This avoids having to
manually create the index sequence and defining the lambda accepting it.
Some stuff that was before implicitly checked during deserialization
now need explicit checks, those are introduced here.
This also fixes test failures related to the changed serialization
format (which fields can or cannot be omitted when they have
the default value).
Some stuff that was before implicitly checked during deserialization
now need explicit checks, those are introduced here.
This also fixes test failures related to the changed serialization
format (which fields can or cannot be omitted when they have
the default value).
Add the needed infrastructures that allow ephemeral classes (`PipeRun`s)
to be wrapped as a regular pypeline `Pipe` class. These automatically
have their dependencies tracked and propagated to the pypeline.
This commit a non-deterministic bug on ARM's switch-disjoint-ranges
test.
The problem was that we were setting as initial nodes of the monotone
framework all the nodes that are not reachable from the nodes classified
as initial nodes *so far*.
This approach is susceptible to the visit order.
Classifying certain nodes as entry nodes degrades the analysis results
since we associates a top value to them.
Electing initial nodes by traversing a list of nodes sorted by dominance
solves this problem.