[cfe-commits] r64145 - in /cfe/trunk: include/clang/AST/Expr.h lib/AST/Expr.cpp lib/AST/StmtSerialization.cpp lib/Sema/SemaExpr.cpp

Ted Kremenek kremenek at apple.com
Mon Feb 9 09:08:15 PST 2009


Author: kremenek
Date: Mon Feb  9 11:08:14 2009
New Revision: 64145

URL: http://llvm.org/viewvc/llvm-project?rev=64145&view=rev
Log:
Allocate the subexpression array for OberloadExpr from ASTContext's allocator.

Modified:
    cfe/trunk/include/clang/AST/Expr.h
    cfe/trunk/lib/AST/Expr.cpp
    cfe/trunk/lib/AST/StmtSerialization.cpp
    cfe/trunk/lib/Sema/SemaExpr.cpp

Modified: cfe/trunk/include/clang/AST/Expr.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/Expr.h?rev=64145&r1=64144&r2=64145&view=diff

==============================================================================
--- cfe/trunk/include/clang/AST/Expr.h (original)
+++ cfe/trunk/include/clang/AST/Expr.h Mon Feb  9 11:08:14 2009
@@ -1533,17 +1533,18 @@
   SourceLocation BuiltinLoc;
   SourceLocation RParenLoc;
 public:
-  OverloadExpr(Expr **args, unsigned nexprs, unsigned idx, QualType t, 
-               SourceLocation bloc, SourceLocation rploc)
+  OverloadExpr(ASTContext& C, Expr **args, unsigned nexprs, unsigned idx,
+               QualType t, SourceLocation bloc, SourceLocation rploc)
     : Expr(OverloadExprClass, t), NumExprs(nexprs), FnIndex(idx),
       BuiltinLoc(bloc), RParenLoc(rploc) {
-    SubExprs = new Stmt*[nexprs];
+    SubExprs = new (C) Stmt*[nexprs];
     for (unsigned i = 0; i != nexprs; ++i)
       SubExprs[i] = args[i];
   }
-  ~OverloadExpr() {
-    delete [] SubExprs;
-  }
+
+  ~OverloadExpr() {}
+  
+  void Destroy(ASTContext& C);
 
   /// arg_begin - Return a pointer to the list of arguments that will be passed
   /// to the matching candidate function, skipping over the initial constant

Modified: cfe/trunk/lib/AST/Expr.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/Expr.cpp?rev=64145&r1=64144&r2=64145&view=diff

==============================================================================
--- cfe/trunk/lib/AST/Expr.cpp (original)
+++ cfe/trunk/lib/AST/Expr.cpp Mon Feb  9 11:08:14 2009
@@ -1410,6 +1410,13 @@
     Expr::Destroy(C);
 }
 
+void OverloadExpr::Destroy(ASTContext& C) {
+  DestroyChildren(C);
+  C.Deallocate(SubExprs);
+  this->~OverloadExpr();
+  C.Deallocate(this);
+}
+
 //===----------------------------------------------------------------------===//
 //  DesignatedInitExpr
 //===----------------------------------------------------------------------===//

Modified: cfe/trunk/lib/AST/StmtSerialization.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/StmtSerialization.cpp?rev=64145&r1=64144&r2=64145&view=diff

==============================================================================
--- cfe/trunk/lib/AST/StmtSerialization.cpp (original)
+++ cfe/trunk/lib/AST/StmtSerialization.cpp Mon Feb  9 11:08:14 2009
@@ -937,7 +937,7 @@
   // FIXME: Avoid extra allocation.
   llvm::SmallVector<Expr*, 4> Exprs(NumExprs);
   D.BatchReadOwnedPtrs(NumExprs, Exprs.begin(), C);
-  return new OverloadExpr(Exprs.begin(), NumExprs, FnIndex, T, BL, RP);
+  return new OverloadExpr(C, Exprs.begin(), NumExprs, FnIndex, T, BL, RP);
 }
 
 void VAArgExpr::EmitImpl(llvm::Serializer& S) const {

Modified: cfe/trunk/lib/Sema/SemaExpr.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=64145&r1=64144&r2=64145&view=diff

==============================================================================
--- cfe/trunk/lib/Sema/SemaExpr.cpp (original)
+++ cfe/trunk/lib/Sema/SemaExpr.cpp Mon Feb  9 11:08:14 2009
@@ -4369,7 +4369,7 @@
           << OE->getFn()->getSourceRange();
       // Remember our match, and continue processing the remaining arguments
       // to catch any errors.
-      OE = new (Context) OverloadExpr(Args, NumArgs, i, 
+      OE = new (Context) OverloadExpr(Context, Args, NumArgs, i, 
                             FnType->getResultType().getNonReferenceType(),
                             BuiltinLoc, RParenLoc);
     }





More information about the cfe-commits mailing list