diff options
author | Aaron Ballman <aaron@aaronballman.com> | 2015-04-27 22:31:12 +0000 |
---|---|---|
committer | Aaron Ballman <aaron@aaronballman.com> | 2015-04-27 22:31:12 +0000 |
commit | edc80847514bd598bf8567166561fb8c5928dc5d (patch) | |
tree | b674a2a5aa91d2419942da3eba6a93b2b921276e /clang/lib/Sema/SemaExprCXX.cpp | |
parent | ca5ad5fb6dc7d39cddb687adde1f9bef20b63bd8 (diff) | |
download | bcm5719-llvm-edc80847514bd598bf8567166561fb8c5928dc5d.tar.gz bcm5719-llvm-edc80847514bd598bf8567166561fb8c5928dc5d.zip |
Check whether the operand to a noexcept expression is valid or not. Fixes PR15842.
llvm-svn: 235931
Diffstat (limited to 'clang/lib/Sema/SemaExprCXX.cpp')
-rw-r--r-- | clang/lib/Sema/SemaExprCXX.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp index b050c933044..bb67939ad89 100644 --- a/clang/lib/Sema/SemaExprCXX.cpp +++ b/clang/lib/Sema/SemaExprCXX.cpp @@ -5791,6 +5791,16 @@ ExprResult Sema::BuildCXXMemberCallExpr(Expr *E, NamedDecl *FoundDecl, ExprResult Sema::BuildCXXNoexceptExpr(SourceLocation KeyLoc, Expr *Operand, SourceLocation RParen) { + // If the operand is an unresolved lookup expression, the expression is ill- + // formed per [over.over]p1, because overloaded function names cannot be used + // without arguments except in explicit contexts. + ExprResult R = CheckPlaceholderExpr(Operand); + if (R.isInvalid()) + return R; + + // The operand may have been modified when checking the placeholder type. + Operand = R.get(); + if (ActiveTemplateInstantiations.empty() && Operand->HasSideEffects(Context, false)) { // The expression operand for noexcept is in an unevaluated expression |