diff options
| author | Anders Carlsson <andersca@mac.com> | 2010-01-29 18:30:20 +0000 |
|---|---|---|
| committer | Anders Carlsson <andersca@mac.com> | 2010-01-29 18:30:20 +0000 |
| commit | 6f923f89c351a0dcef9a02e0877839e6083bf967 (patch) | |
| tree | e227d65ea6e8df6dae0f6583cd21060a315c4728 /clang/lib | |
| parent | 92e25415995dc21664be78d9a47027792adf1c41 (diff) | |
| download | bcm5719-llvm-6f923f89c351a0dcef9a02e0877839e6083bf967.tar.gz bcm5719-llvm-6f923f89c351a0dcef9a02e0877839e6083bf967.zip | |
Get rid of another old PerformCopyInitialization call.
llvm-svn: 94819
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/Sema/SemaStmt.cpp | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/clang/lib/Sema/SemaStmt.cpp b/clang/lib/Sema/SemaStmt.cpp index ca15de2cf2a..4e3e038144d 100644 --- a/clang/lib/Sema/SemaStmt.cpp +++ b/clang/lib/Sema/SemaStmt.cpp @@ -991,11 +991,19 @@ Sema::ActOnBlockReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp) { // In C++ the return statement is handled via a copy initialization. // the C version of which boils down to CheckSingleAssignmentConstraints. - // FIXME: Leaks RetValExp. - if (PerformCopyInitialization(RetValExp, FnRetType, AA_Returning)) + OwningExprResult Res = PerformCopyInitialization( + InitializedEntity::InitializeResult(ReturnLoc, + FnRetType), + SourceLocation(), + Owned(RetValExp)); + if (Res.isInvalid()) { + // FIXME: Cleanup temporaries here, anyway? return StmtError(); - - if (RetValExp) CheckReturnStackAddr(RetValExp, FnRetType, ReturnLoc); + } + + RetValExp = Res.takeAs<Expr>(); + if (RetValExp) + CheckReturnStackAddr(RetValExp, FnRetType, ReturnLoc); } return Owned(new (Context) ReturnStmt(ReturnLoc, RetValExp)); |

