summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorReid Kleckner <reid@kleckner.net>2014-12-13 00:53:10 +0000
committerReid Kleckner <reid@kleckner.net>2014-12-13 00:53:10 +0000
commita7fe33e0f6e2ad24bb45e292c51f6cb6e27b377e (patch)
tree58c25564d45c66408ab3ee9aec39e93176b0dfbf /clang/lib
parent17f429f46255230b5b54f4ed947cc88c9f424a62 (diff)
downloadbcm5719-llvm-a7fe33e0f6e2ad24bb45e292c51f6cb6e27b377e.tar.gz
bcm5719-llvm-a7fe33e0f6e2ad24bb45e292c51f6cb6e27b377e.zip
Typo correction: Ignore temporary binding exprs after overload resolution
Transformation of a CallExpr doesn't always result in a new CallExpr. Fixes PR21899. llvm-svn: 224172
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/Sema/SemaExprCXX.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp
index e8be716ea09..554e8c9b8fd 100644
--- a/clang/lib/Sema/SemaExprCXX.cpp
+++ b/clang/lib/Sema/SemaExprCXX.cpp
@@ -6105,8 +6105,13 @@ public:
auto Result = BaseTransform::RebuildCallExpr(Callee, LParenLoc, Args,
RParenLoc, ExecConfig);
if (auto *OE = dyn_cast<OverloadExpr>(Callee)) {
- if (!Result.isInvalid() && Result.get())
- OverloadResolution[OE] = cast<CallExpr>(Result.get())->getCallee();
+ if (!Result.isInvalid() && Result.get()) {
+ Expr *ResultCall = Result.get();
+ if (auto *BE = dyn_cast<CXXBindTemporaryExpr>(ResultCall))
+ ResultCall = BE->getSubExpr();
+ if (auto *CE = dyn_cast<CallExpr>(ResultCall))
+ OverloadResolution[OE] = CE->getCallee();
+ }
}
return Result;
}
OpenPOWER on IntegriCloud