[PATCH] D38201: Use a BumpPtrAllocator for Loop objects
Chandler Carruth via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Sep 26 15:30:46 PDT 2017
chandlerc added a comment.
In https://reviews.llvm.org/D38201#880392, @sanjoy wrote:
> There is a problem with this patch -- the legacy pass manager checks if a loop is valid or not by querying `isInvalid`, which is incorrect; since we call the destructor for loop objects to mark them as "invalid" calling `isInvalid` for possibly invalid loop objects has UB. We already have this UB in `User::operator delete` though, and so given that and that the legacy pass manager is going away at some point, perhaps this is okay? Alternatively, I could add a mechanism on the legacy loop pass manager that lets passes denote loop objects to have been deleted (by remembering the pointers in a set) and use that to decide if a Loop object is valid or not (and with that, I can guard `isInvalid` with `#ifndef NDEBUG`).
Sadly, I think this would be problematic. I think it'll trip ASan's use-after-scope or use-after-lifetime checks.... =/ But maybe there is a way around that. Or maybe just implement the solution you suggest. Dunno, but definitely worth checking.
> The asserts are using `isInvalid` correctly, as far as I can tell; they should never have UB in an execution that uses the loop objects correctly.
Cool.
https://reviews.llvm.org/D38201
More information about the llvm-commits
mailing list