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

Reply via email to