haoNoQ wrote: Yeah great catch. It looks like `RegionAndSymbolInvalidationTraits` isn't the correct data structure for the job. It's better to construct a list of all invalidated regions, together with their respective flags, and then applying them one-by-one. It was never correct to deduplicate those steps by region.
But as a first step this is probably a good fix. You could also hard-erase invalidation flags for the `this` object at the very end (when you're about to commit the invalidation) so that to squash more potential bugs of that nature, given that your reasoning probably still holds. > void opaque(const int* a, int* b); This made me wonder if `memmove()` was broken. Probably not because it's probably putting traits on element regions. And if you're stuffing the exact same pointer into it (`memmove(&x, &x, ...)`) then it is actually correct for it to skip invalidation. Which probably also means that if we fix invalidation conflicts, we may need a better model for `memmove()` in the C string checker to compensate. Because currently it may be running on mutually-cancelling bugs. https://github.com/llvm/llvm-project/pull/170887 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
