OSDN Git Service

IR: Fix memory corruption in MDNode new/delete
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>
Tue, 9 Dec 2014 23:56:39 +0000 (23:56 +0000)
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>
Tue, 9 Dec 2014 23:56:39 +0000 (23:56 +0000)
commitea614a50253ab17cf140fe0ce46d5bb169f45989
tree4f7fb2dc354610358e99cd38dd1f1542b3456640
parentd465762cfd447106da4e57e76fb924cd622c6adf
IR: Fix memory corruption in MDNode new/delete

There were two major problems with `MDNode` memory management.

 1. `MDNode::operator new()` called a placement array constructor for
    `MDOperand`.  What?  Each operand needs to be placed individually.

 2. `MDNode::operator delete()` failed to destruct the `MDOperand`s at
    all.

Frankly it's hard to understand how this worked locally, how this
survived an LTO bootstrap, or how it worked on most of the bots.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@223858 91177308-0d34-0410-b5e6-96231b3b80d8
lib/IR/Metadata.cpp