diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2016-10-20 00:55:15 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2016-10-20 00:55:15 +0000 |
commit | d87515fa113269e9c82ec3e60ccceb2114fd13b0 (patch) | |
tree | f48a6ba5e697d4f6fb1be4063b6fc0b9e0229102 /lib/Sema/SemaTemplateVariadic.cpp | |
parent | 0a150c95eaeb53dfcd04639011c06d8a834dccf7 (diff) | |
download | clang-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.cpp | 4 |
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(), "(") |