From: Richard Smith Date: Mon, 6 Feb 2012 02:54:51 +0000 (+0000) Subject: Implement name mangling for scalar value initialization. Reported on IRC by Xeo. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=41576d47d746dacd3d0753d00daf6e47ad4cab5d;p=clang Implement name mangling for scalar value initialization. Reported on IRC by Xeo. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@149854 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/AST/ItaniumMangle.cpp b/lib/AST/ItaniumMangle.cpp index 9c697ed9b1..37ae626683 100644 --- a/lib/AST/ItaniumMangle.cpp +++ b/lib/AST/ItaniumMangle.cpp @@ -2247,7 +2247,6 @@ recurse: case Expr::ImplicitValueInitExprClass: case Expr::InitListExprClass: case Expr::ParenListExprClass: - case Expr::CXXScalarValueInitExprClass: llvm_unreachable("unexpected statement kind"); // FIXME: invent manglings for all these. @@ -2427,6 +2426,12 @@ recurse: break; } + case Expr::CXXScalarValueInitExprClass: + Out <<"cv"; + mangleType(E->getType()); + Out <<"_E"; + break; + case Expr::UnaryExprOrTypeTraitExprClass: { const UnaryExprOrTypeTraitExpr *SAE = cast(E); diff --git a/test/CodeGenCXX/mangle-exprs.cpp b/test/CodeGenCXX/mangle-exprs.cpp index c5f72d83c7..bad564f80f 100644 --- a/test/CodeGenCXX/mangle-exprs.cpp +++ b/test/CodeGenCXX/mangle-exprs.cpp @@ -28,6 +28,10 @@ namespace Casts { void auto_(decltype(new auto(T()))) { } + template< typename T > + void scalar_(decltype(T(), int())) { + } + // FIXME: Test const_cast, reinterpret_cast, dynamic_cast, which are // a bit harder to use in template arguments. template struct T {}; @@ -48,6 +52,9 @@ namespace Casts { // CHECK: define weak_odr void @_ZN5Casts5auto_IiEEvDTnw_DapicvT__EEE( template void auto_(int*); + + // CHECK: define weak_odr void @_ZN5Casts7scalar_IiEEvDTcmcvT__Ecvi_EE( + template void scalar_(int); } namespace test1 {