diff options
| author | Eli Friedman <eli.friedman@gmail.com> | 2009-12-24 23:33:34 +0000 |
|---|---|---|
| committer | Eli Friedman <eli.friedman@gmail.com> | 2009-12-24 23:33:34 +0000 |
| commit | fddc26cc641412f7ed4245cb05d11343dc0e0f12 (patch) | |
| tree | a6cdc38c5e52ec4d66aa3833da0a367dfb8c74e8 /clang/lib/Sema/SemaDeclCXX.cpp | |
| parent | dd5044ac55237e68e5de30804fa8ca7548a9bcde (diff) | |
| download | bcm5719-llvm-fddc26cc641412f7ed4245cb05d11343dc0e0f12.tar.gz bcm5719-llvm-fddc26cc641412f7ed4245cb05d11343dc0e0f12.zip | |
Make copy constructor elimination work in more cases; the case in question
here affects clang-on-clang.
llvm-svn: 92151
Diffstat (limited to 'clang/lib/Sema/SemaDeclCXX.cpp')
| -rw-r--r-- | clang/lib/Sema/SemaDeclCXX.cpp | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index b70b0dccb75..f29300e4acb 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -3793,6 +3793,8 @@ Sema::BuildCXXConstructExpr(SourceLocation ConstructLoc, QualType DeclInitType, if (ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(E)) if (ICE->getCastKind() == CastExpr::CK_NoOp) E = ICE->getSubExpr(); + if (CXXFunctionalCastExpr *FCE = dyn_cast<CXXFunctionalCastExpr>(E)) + E = FCE->getSubExpr(); while (CXXBindTemporaryExpr *BE = dyn_cast<CXXBindTemporaryExpr>(E)) E = BE->getSubExpr(); if (ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(E)) @@ -3803,6 +3805,8 @@ Sema::BuildCXXConstructExpr(SourceLocation ConstructLoc, QualType DeclInitType, Elidable = !CE->getCallReturnType()->isReferenceType(); else if (isa<CXXTemporaryObjectExpr>(E)) Elidable = true; + else if (isa<CXXConstructExpr>(E)) + Elidable = true; } return BuildCXXConstructExpr(ConstructLoc, DeclInitType, Constructor, |

