diff options
| author | Sebastian Redl <sebastian.redl@getdesigned.at> | 2012-02-25 22:59:28 +0000 |
|---|---|---|
| committer | Sebastian Redl <sebastian.redl@getdesigned.at> | 2012-02-25 22:59:28 +0000 |
| commit | aeac3ff82a19b508e8e9795e481305ca4d9ccf08 (patch) | |
| tree | 370b113784e8d699974f196c93ac2ed2931f1d5f /clang/lib | |
| parent | 26bba442acb0b1ffca0b21b8815db7aa63fdf123 (diff) | |
| download | bcm5719-llvm-aeac3ff82a19b508e8e9795e481305ca4d9ccf08.tar.gz bcm5719-llvm-aeac3ff82a19b508e8e9795e481305ca4d9ccf08.zip | |
Richard Smith pointed out that there already is a proposal for init list mangling.
llvm-svn: 151462
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/AST/ItaniumMangle.cpp | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/clang/lib/AST/ItaniumMangle.cpp b/clang/lib/AST/ItaniumMangle.cpp index 59e13cbc5eb..48e2a62c887 100644 --- a/clang/lib/AST/ItaniumMangle.cpp +++ b/clang/lib/AST/ItaniumMangle.cpp @@ -2361,7 +2361,6 @@ recurse: llvm_unreachable("unexpected statement kind"); // FIXME: invent manglings for all these. - case Expr::InitListExprClass: case Expr::BlockExprClass: case Expr::CXXPseudoDestructorExprClass: case Expr::ChooseExprClass: @@ -2418,6 +2417,16 @@ recurse: case Expr::OpaqueValueExprClass: llvm_unreachable("cannot mangle opaque value; mangling wrong thing?"); + case Expr::InitListExprClass: { + // Proposal by Jason Merrill, 2012-01-03 + Out << "il"; + const InitListExpr *InitList = cast<InitListExpr>(E); + for (unsigned i = 0, e = InitList->getNumInits(); i != e; ++i) + mangleExpression(InitList->getInit(i)); + Out << "E"; + break; + } + case Expr::CXXDefaultArgExprClass: mangleExpression(cast<CXXDefaultArgExpr>(E)->getExpr(), Arity); break; @@ -2463,12 +2472,9 @@ recurse: Out << '_'; mangleType(New->getAllocatedType()); if (New->hasInitializer()) { - // <initializer> is 'pi <expression>* E' in the current ABI for - // parenthesized initializers, but braced initializers are unspecified. - // We use 'bl <expression>* E' for "braced list". "bi" is too easy to - // confuse. + // Proposal by Jason Merrill, 2012-01-03 if (New->getInitializationStyle() == CXXNewExpr::ListInit) - Out << "bl"; + Out << "il"; else Out << "pi"; const Expr *Init = New->getInitializer(); @@ -2483,7 +2489,7 @@ recurse: mangleExpression(PLE->getExpr(i)); } else if (New->getInitializationStyle() == CXXNewExpr::ListInit && isa<InitListExpr>(Init)) { - // Only take ParenListExprs apart for list-initialization. + // Only take InitListExprs apart for list-initialization. const InitListExpr *InitList = cast<InitListExpr>(Init); for (unsigned i = 0, e = InitList->getNumInits(); i != e; ++i) mangleExpression(InitList->getInit(i)); @@ -2552,7 +2558,11 @@ recurse: const CXXConstructExpr *CE = cast<CXXConstructExpr>(E); unsigned N = CE->getNumArgs(); - Out << "cv"; + // Proposal by Jason Merrill, 2012-01-03 + if (CE->isListInitialization()) + Out << "tl"; + else + Out << "cv"; mangleType(CE->getType()); if (N != 1) Out << '_'; for (unsigned I = 0; I != N; ++I) mangleExpression(CE->getArg(I)); |

