mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 04:02:41 +01:00
CodeGen: Move the SlotIndexes BumpPtrAllocator before the list it allocates
When a `SlotIndexes` is destroyed, `ileAllocator` will currently be destructed before `IndexList`, but all of `IndexList`'s storage has been allocated by `ileAllocator`. This means we'll call destructors on garbage data, which is very bad. This can be avoided by putting the BumpPtrAllocator earlier in the class than anything it allocates. Unfortunately, I don't know how to test this. It depends very much on memory layout, and the only evidence I have that this is actually happening in practice are backtraces that might be explained by this. By inspection though, the code is obviously dangerous/wrong, and this is the right thing to do. I'll follow up later with a patch that calls clearAndLeakNodesUnsafely on the list, since there isn't much point in destructing them when they're allocated in a BPA anyway, but I figured it makes sense to commit the correctness fix separately from that optimization. llvm-svn: 254794
This commit is contained in:
parent
b8bd41122a
commit
6c86c50af0
@ -333,6 +333,8 @@ namespace llvm {
|
||||
/// This pass assigns indexes to each instruction.
|
||||
class SlotIndexes : public MachineFunctionPass {
|
||||
private:
|
||||
// IndexListEntry allocator.
|
||||
BumpPtrAllocator ileAllocator;
|
||||
|
||||
typedef ilist<IndexListEntry> IndexList;
|
||||
IndexList indexList;
|
||||
@ -353,9 +355,6 @@ namespace llvm {
|
||||
/// and MBB id.
|
||||
SmallVector<IdxMBBPair, 8> idx2MBBMap;
|
||||
|
||||
// IndexListEntry allocator.
|
||||
BumpPtrAllocator ileAllocator;
|
||||
|
||||
IndexListEntry* createEntry(MachineInstr *mi, unsigned index) {
|
||||
IndexListEntry *entry =
|
||||
static_cast<IndexListEntry*>(
|
||||
|
Loading…
Reference in New Issue
Block a user