Author: rsmith Date: Mon Oct 24 15:29:40 2016 New Revision: 285015 URL: http://llvm.org/viewvc/llvm-project?rev=285015&view=rev Log: Fix mangling of implicit calls to operator-> to only include a single "pt", rather than including an extra one for each level of 'operator->()' invoked.
Modified: cfe/trunk/lib/AST/ItaniumMangle.cpp cfe/trunk/test/CodeGenCXX/mangle.cpp Modified: cfe/trunk/lib/AST/ItaniumMangle.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ItaniumMangle.cpp?rev=285015&r1=285014&r2=285015&view=diff ============================================================================== --- cfe/trunk/lib/AST/ItaniumMangle.cpp (original) +++ cfe/trunk/lib/AST/ItaniumMangle.cpp Mon Oct 24 15:29:40 2016 @@ -3735,7 +3735,10 @@ recurse: case Expr::CXXOperatorCallExprClass: { const CXXOperatorCallExpr *CE = cast<CXXOperatorCallExpr>(E); unsigned NumArgs = CE->getNumArgs(); - mangleOperatorName(CE->getOperator(), /*Arity=*/NumArgs); + // A CXXOperatorCallExpr for OO_Arrow models only semantics, not syntax + // (the enclosing MemberExpr covers the syntactic portion). + if (CE->getOperator() != OO_Arrow) + mangleOperatorName(CE->getOperator(), /*Arity=*/NumArgs); // Mangle the arguments. for (unsigned i = 0; i != NumArgs; ++i) mangleExpression(CE->getArg(i)); Modified: cfe/trunk/test/CodeGenCXX/mangle.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/mangle.cpp?rev=285015&r1=285014&r2=285015&view=diff ============================================================================== --- cfe/trunk/test/CodeGenCXX/mangle.cpp (original) +++ cfe/trunk/test/CodeGenCXX/mangle.cpp Mon Oct 24 15:29:40 2016 @@ -1111,3 +1111,10 @@ void fn(T, __underlying_type(T)) {} template void fn<E>(E, __underlying_type(E)); // CHECK-LABEL: @_ZN6test552fnINS_1EEEEvT_U3eutS2_ } + +namespace test56 { + struct A { A *operator->(); int n; } a; + template<int N> void f(decltype(a->n + N)) {} + // CHECK-LABEL: @_ZN6test561fILi0EEEvDTplptL_ZNS_1aEE1nT_E + template void f<0>(int); +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits