================
Comment at: include/clang/AST/Decl.h:312
@@ -310,1 +311,3 @@
   LabelStmt *TheStmt;
+  SmallString<16> MSAsmName;
+  bool MSAsmNameResolved;
----------------
ehsan wrote:
> rnk wrote:
> > ehsan wrote:
> > > rnk wrote:
> > > > This will cause a memory leak for names > 16 chars. When the ASTContext 
> > > > is destroyed, it doesn't actually call destructors of individual AST 
> > > > nodes, it merely frees the memory. This should be a StringRef that 
> > > > points to memory from 'new (Context, 1) char[Len]', probably.
> > > Oh, I didn't know that!  What's this 'new (Contex, 1) char[Len]' trick?  
> > > I'm not familiar with it, I don't think...
> > It's an operator new overload declared in ASTContext.h. Basically, it's 
> > equivalent to 'new char[Len]', except it goes calls the 'void* operator 
> > new(size_t Bytes, ASTContext &Context, size_t Alignment)' overload.
> Hmm, who is responsible for freeing this memory?  The comments in 
> ASTContext.h seem to suggest that I should call ASTContext::Deallocate on the 
> pointer, but I'm not sure when I should do that if the destructor is not 
> invoked.  Looking at other parts of the code base, it seems like nobody 
> worries about deleting memory allocated this way...
When the ASTContext gets destroyed, it frees all memory allocated with it. It's 
basically a simple pool allocation scheme. The AST lives until compilation is 
over (i.e. forever). The clang driver even passes a -disable-free flag to 
prevent the -cc1 process from destroying the AST because even that is slower 
than just ending the process.

http://reviews.llvm.org/D4589



_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to