Hello!<div><br></div><div>I think I might found a memory leak.</div><div><br></div><div>Assume following function and class ASTMutationAction</div><div><br></div><div><div>bool processFile(std::string inFile){</div><div><span class="Apple-tab-span" style="white-space:pre">       </span>auto_ptr<CompilerInstance> compiler(new CompilerInstance);</div>
<div><span class="Apple-tab-span" style="white-space:pre">      </span>compiler->createDiagnostics(0, NULL);</div><div><span class="Apple-tab-span" style="white-space:pre">     </span>assert(compiler->hasDiagnostics());</div>
<div><span class="Apple-tab-span" style="white-space:pre">      </span>const char *args[] =</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>  "-cc1",</div>
<div><span class="Apple-tab-span" style="white-space:pre">      </span>  inFile.c_str()</div><div><span class="Apple-tab-span" style="white-space:pre">     </span>};</div><div><span class="Apple-tab-span" style="white-space:pre">   </span>std::cout << outFile << std::endl;</div>
<div><span class="Apple-tab-span" style="white-space:pre">      </span>clang::CompilerInvocation::CreateFromArgs(</div><div><span class="Apple-tab-span" style="white-space:pre">   </span>  compiler->getInvocation(),</div><div>
<span class="Apple-tab-span" style="white-space:pre"> </span>  args,</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>  args + 2,</div><div><span class="Apple-tab-span" style="white-space:pre">  </span>  compiler->getDiagnostics());</div>
<div><span class="Apple-tab-span" style="white-space:pre">      </span>llvm::OwningPtr<clang::ASTFrontendAction> action(new ASTMutationAction());</div><div><span class="Apple-tab-span" style="white-space:pre">     </span>compiler->ExecuteAction(*action);</div>
<div>}</div></div><div><br></div><div><div>class ASTMutationAction : public ASTFrontendAction {</div><div>protected:</div><div><span class="Apple-tab-span" style="white-space:pre">  </span>virtual ASTConsumer* CreateASTConsumer(CompilerInstance& compiler,</div>
<div><span class="Apple-tab-span" style="white-space:pre">                                                                      </span>       llvm::StringRef){</div><div><span class="Apple-tab-span" style="white-space:pre">             </span>return new ASTConsumer();</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>}</div>
<div>};</div></div><div><br></div><div>In processFile(std::string) each time I pass path to a file. I'm getting paths via directory traversal. So amount of executions of that function is always somewhere between 1000 and 40000 times. Although ASTConsumer class is not implemented the amount of memory used by the process is constantly growing. As soon as line 'compiler->ExecuteAction(*action);' is commented there is no memory leakage.</div>
<div><br></div><div>I though it was somewhere in my code, but even when I deleted all implementation from ASTMutationAction class and left only stub, the memory consumption continued to increase. </div><div><br></div><div>
Is this a bug or I use clang somehow wrong?</div><div><br></div><div>best regards,</div><div>Andrey Tarasevich.</div>