This change adds some verification in the IR verifier around struct path
Other than some basic sanity checks (e.g. we get constant integers where
we expect integers), this checks:
- That by the time an struct access tuple (base-type, offset) is "reduced" to a scalar base type, the offset is 0. For instance, in C++ you can't start from, say ("struct-a", 16), and end up with ("int", 4) -- by the time the base type is "int", the offset better be zero. In particular, a variant of this invariant is needed for llvm::getMostGenericTBAA to be correct.
- That there are no cycles in a struct path.
- That struct type nodes have their offsets listed in an ascending order.
- That when generating the struct access path, you eventually reach the access type listed in the tbaa tag node.