summaryrefslogtreecommitdiff
path: root/lib/Sema/SemaTemplateVariadic.cpp
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2016-10-20 00:55:15 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2016-10-20 00:55:15 +0000
commitd87515fa113269e9c82ec3e60ccceb2114fd13b0 (patch)
treef48a6ba5e697d4f6fb1be4063b6fc0b9e0229102 /lib/Sema/SemaTemplateVariadic.cpp
parent0a150c95eaeb53dfcd04639011c06d8a834dccf7 (diff)
downloadclang-d87515fa113269e9c82ec3e60ccceb2114fd13b0.tar.gz
PR26276: Fix detection of non-cast-expressions as operands of fold-expressions.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@284684 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaTemplateVariadic.cpp')
-rw-r--r--lib/Sema/SemaTemplateVariadic.cpp4
1 files changed, 3 insertions, 1 deletions
diff --git a/lib/Sema/SemaTemplateVariadic.cpp b/lib/Sema/SemaTemplateVariadic.cpp
index b6bd6c03ff..c278639073 100644
--- a/lib/Sema/SemaTemplateVariadic.cpp
+++ b/lib/Sema/SemaTemplateVariadic.cpp
@@ -998,7 +998,9 @@ static void CheckFoldOperand(Sema &S, Expr *E) {
return;
E = E->IgnoreImpCasts();
- if (isa<BinaryOperator>(E) || isa<AbstractConditionalOperator>(E)) {
+ auto *OCE = dyn_cast<CXXOperatorCallExpr>(E);
+ if ((OCE && OCE->isInfixBinaryOp()) || isa<BinaryOperator>(E) ||
+ isa<AbstractConditionalOperator>(E)) {
S.Diag(E->getExprLoc(), diag::err_fold_expression_bad_operand)
<< E->getSourceRange()
<< FixItHint::CreateInsertion(E->getLocStart(), "(")