Function dmd.funcsem.traverseIndirections
Performs type-based alias analysis between a newly created value and a pre- existing memory reference:
Assuming that a reference A to a value of type ta was available to the code
that created a reference B to a value of type tb, it returns whether B
might alias memory reachable from A based on the types involved (either
directly or via any number of indirections in either A or B).
This relation is not symmetric in the two arguments. For example, a
a const(int) reference can point to a pre-existing int, but not the other
way round.
Examples
ta, tb, result
const(int), int, false
int, const(int), true
int, immutable(int), false
const(immutable(int)*), immutable(int)*, false // BUG: returns true
Parameters
| Name | Description |
|---|---|
| ta | value type being referred to |
| tb | referred to value type that could be constructed from ta |