diff options
| author | Ted Kremenek <kremenek@apple.com> | 2010-02-11 22:41:21 +0000 | 
|---|---|---|
| committer | Ted Kremenek <kremenek@apple.com> | 2010-02-11 22:41:21 +0000 | 
| commit | 2c809308ca66533e05dbbf66caa0e3fd1c7bde39 (patch) | |
| tree | 9b09872eaaa570d7028c27d18349a6892d678886 /clang/lib/Sema | |
| parent | 524138176df588fdd466e66986df08d4d32918bd (diff) | |
| download | bcm5719-llvm-2c809308ca66533e05dbbf66caa0e3fd1c7bde39.tar.gz bcm5719-llvm-2c809308ca66533e05dbbf66caa0e3fd1c7bde39.zip | |
Allocate the SubExprs array in ObjCMessageExpr using the allocator associated with ASTContext.  This fixes yet another leak (<rdar://problem/7639260>).
llvm-svn: 95930
Diffstat (limited to 'clang/lib/Sema')
| -rw-r--r-- | clang/lib/Sema/SemaExpr.cpp | 2 | ||||
| -rw-r--r-- | clang/lib/Sema/SemaExprObjC.cpp | 29 | 
2 files changed, 18 insertions, 13 deletions
| diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index 3ce3c280585..0563428b18a 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -3043,7 +3043,7 @@ Sema::LookupMemberExpr(LookupResult &R, Expr *&BaseExpr,          if (DiagnoseUseOfDecl(OMD, MemberLoc))            return ExprError(); -        return Owned(new (Context) ObjCMessageExpr(BaseExpr, Sel, +        return Owned(new (Context) ObjCMessageExpr(Context, BaseExpr, Sel,                                                     OMD->getResultType(),                                                     OMD, OpLoc, MemberLoc,                                                     NULL, 0)); diff --git a/clang/lib/Sema/SemaExprObjC.cpp b/clang/lib/Sema/SemaExprObjC.cpp index 85956c3e7e0..0c5d8efa288 100644 --- a/clang/lib/Sema/SemaExprObjC.cpp +++ b/clang/lib/Sema/SemaExprObjC.cpp @@ -470,11 +470,13 @@ Sema::ExprResult Sema::ActOnClassMessage(    // now, we simply pass the "super" identifier through (which isn't consistent    // with instance methods.    if (isSuper) -    return new (Context) ObjCMessageExpr(receiverName, Sel, returnType, Method, -                                         lbrac, rbrac, ArgExprs, NumArgs); +    return new (Context) ObjCMessageExpr(Context, receiverName, Sel, returnType, +                                         Method, lbrac, rbrac, ArgExprs, +                                         NumArgs);    else -    return new (Context) ObjCMessageExpr(ClassDecl, Sel, returnType, Method, -                                         lbrac, rbrac, ArgExprs, NumArgs); +    return new (Context) ObjCMessageExpr(Context, ClassDecl, Sel, returnType, +                                         Method, lbrac, rbrac, ArgExprs, +                                         NumArgs);  }  // ActOnInstanceMessage - used for both unary and keyword messages. @@ -521,8 +523,9 @@ Sema::ExprResult Sema::ActOnInstanceMessage(ExprTy *receiver, Selector Sel,        return true;      returnType = returnType.getNonReferenceType(); -    return new (Context) ObjCMessageExpr(RExpr, Sel, returnType, Method, lbrac, -                                         rbrac, ArgExprs, NumArgs); +    return new (Context) ObjCMessageExpr(Context, RExpr, Sel, returnType, +                                         Method, lbrac, rbrac, +                                         ArgExprs, NumArgs);    }    // Handle messages to id. @@ -536,8 +539,9 @@ Sema::ExprResult Sema::ActOnInstanceMessage(ExprTy *receiver, Selector Sel,                                    lbrac, rbrac, returnType))        return true;      returnType = returnType.getNonReferenceType(); -    return new (Context) ObjCMessageExpr(RExpr, Sel, returnType, Method, lbrac, -                                         rbrac, ArgExprs, NumArgs); +    return new (Context) ObjCMessageExpr(Context, RExpr, Sel, returnType, +                                         Method, lbrac, rbrac, +                                         ArgExprs, NumArgs);    }    // Handle messages to Class. @@ -582,8 +586,9 @@ Sema::ExprResult Sema::ActOnInstanceMessage(ExprTy *receiver, Selector Sel,                                    lbrac, rbrac, returnType))        return true;      returnType = returnType.getNonReferenceType(); -    return new (Context) ObjCMessageExpr(RExpr, Sel, returnType, Method, lbrac, -                                         rbrac, ArgExprs, NumArgs); +    return new (Context) ObjCMessageExpr(Context, RExpr, Sel, returnType, +                                         Method, lbrac, rbrac, +                                         ArgExprs, NumArgs);    }    ObjCMethodDecl *Method = 0; @@ -665,7 +670,7 @@ Sema::ExprResult Sema::ActOnInstanceMessage(ExprTy *receiver, Selector Sel,                                  lbrac, rbrac, returnType))      return true;    returnType = returnType.getNonReferenceType(); -  return new (Context) ObjCMessageExpr(RExpr, Sel, returnType, Method, lbrac, -                                       rbrac, ArgExprs, NumArgs); +  return new (Context) ObjCMessageExpr(Context, RExpr, Sel, returnType, Method, +                                       lbrac, rbrac, ArgExprs, NumArgs);  } | 

