Hello Hal: There is memory leak in method ContractNodes (below code is from trunk): 26static void ContractNodes(std::unique_ptr<Matcher> &MatcherPtr, 27 const CodeGenDAGPatterns &CGP) { ... 43 // transform it. 44 if (MoveChildMatcher *MC = dyn_cast<MoveChildMatcher>(N)) { 45 Matcher *New = nullptr; 46 if (RecordMatcher *RM = dyn_cast<RecordMatcher>(MC->getNext())) 47 if (MC->getChildNo() < 8) // Only have RecordChild0...7 48 New = new RecordChildMatcher(MC->getChildNo(), RM->getWhatFor(), 49 RM->getResultNo()); 50 51 if (CheckTypeMatcher *CT = dyn_cast<CheckTypeMatcher>(MC->getNext())) 52 if (MC->getChildNo() < 8 && // Only have CheckChildType0...7 53 CT->getResNo() == 0) // CheckChildType checks res #0 ---> We should delete previous allocated New here! 54 New = new CheckChildTypeMatcher(MC->getChildNo(), CT->getType()); 55 56 if (CheckSameMatcher *CS = dyn_cast<CheckSameMatcher>(MC->getNext())) 57 if (MC->getChildNo() < 4) // Only have CheckChildSame0...3 ---> We should delete previous allocated New here! 58 New = new CheckChildSameMatcher(MC->getChildNo(), CS->getMatchNumber()); 59 60 if (CheckIntegerMatcher *CS = dyn_cast<CheckIntegerMatcher>(MC->getNext())) 61 if (MC->getChildNo() < 5) // Only have CheckChildInteger0...4 ---> We should delete previous allocated New here! 62 New = new CheckChildIntegerMatcher(MC->getChildNo(), CS->getValue()); 63 64 if (New) { 65 // Insert the new node. 66 New->setNext(MatcherPtr.release()); 67 MatcherPtr.reset(New); 68 // Remove the old one. 69 MC->setNext(MC->getNext()->takeNext()); 70 return ContractNodes(MatcherPtr, CGP); 71 } Regards Hui Wu -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20141013/031b98ec/attachment.html>