mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-15 22:56:32 +00:00

Original pull request [here](https://github.com/llvm/llvm-project/pull/108385) Fixes issue https://github.com/llvm/llvm-project/issues/105960 If a member in a struct is also a struct, accessing a member partway through this inner struct currently causes a false positive. This is because when checking aliasing, the access offset is seen as greater than the starting offset of the inner struct, so the loop continues one iteration, and believes we are accessing the member after the inner struct. The next member's offset is greater than the offset we are looking for, so when we subtract the next member's offset from what we are looking for, the offset underflows. To fix this, we check if the member we think we are accessing has a greater offset than the offset we are looking for. If so, we take a step back. We cannot do this in the loop, since the loop does not check the final member. This means the penultimate member would still cause false positives.