summaryrefslogtreecommitdiffstats
path: root/clang/lib/AST/ItaniumMangle.cpp
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2014-11-08 05:07:16 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2014-11-08 05:07:16 +0000
commit0f0af19b058151690ec02d781d0039fb1fc38426 (patch)
tree628729499c9190870f32a30ddfea3d8c9db273fd /clang/lib/AST/ItaniumMangle.cpp
parent8f6dd44056ceb2821b7692f1a110f91866b1bf2b (diff)
downloadbcm5719-llvm-0f0af19b058151690ec02d781d0039fb1fc38426.tar.gz
bcm5719-llvm-0f0af19b058151690ec02d781d0039fb1fc38426.zip
[c++1z] N4295: fold-expressions.
This is a new form of expression of the form: (expr op ... op expr) where one of the exprs is a parameter pack. It expands into (expr1 op (expr2onwards op ... op expr)) (and likewise if the pack is on the right). The non-pack operand can be omitted; in that case, an empty pack gives a fallback value or an error, depending on the operator. llvm-svn: 221573
Diffstat (limited to 'clang/lib/AST/ItaniumMangle.cpp')
-rw-r--r--clang/lib/AST/ItaniumMangle.cpp27
1 files changed, 25 insertions, 2 deletions
diff --git a/clang/lib/AST/ItaniumMangle.cpp b/clang/lib/AST/ItaniumMangle.cpp
index e41c664c8f2..d7b82eb56a7 100644
--- a/clang/lib/AST/ItaniumMangle.cpp
+++ b/clang/lib/AST/ItaniumMangle.cpp
@@ -3209,12 +3209,35 @@ recurse:
mangleFunctionParam(cast<ParmVarDecl>(Pack));
break;
}
-
+
case Expr::MaterializeTemporaryExprClass: {
mangleExpression(cast<MaterializeTemporaryExpr>(E)->GetTemporaryExpr());
break;
}
-
+
+ case Expr::CXXFoldExprClass: {
+ auto *FE = cast<CXXFoldExpr>(E);
+ if (!FE->getLHS())
+ Out << "fl";
+ else if (!FE->getRHS())
+ Out << "fr";
+ else
+ Out << "fx";
+
+ if (FE->getOperator() == BO_PtrMemD)
+ Out << "ds";
+ else
+ mangleOperatorName(
+ BinaryOperator::getOverloadedOperator(FE->getOperator()),
+ /*Arity=*/2);
+
+ if (FE->getLHS())
+ mangleExpression(FE->getLHS());
+ if (FE->getRHS())
+ mangleExpression(FE->getRHS());
+ break;
+ }
+
case Expr::CXXThisExprClass:
Out << "fpT";
break;
OpenPOWER on IntegriCloud