[cfe-commits] r132659 - in /cfe/trunk: lib/AST/ItaniumMangle.cpp test/CodeGenCXX/mangle-exprs.cpp

Douglas Gregor dgregor at apple.com
Sat Jun 4 22:27:58 PDT 2011


Author: dgregor
Date: Sun Jun  5 00:27:58 2011
New Revision: 132659

URL: http://llvm.org/viewvc/llvm-project?rev=132659&view=rev
Log:
Add name mangling for expr .* expr. Fixes PR9983 / <rdar://problem/9486332>.

Modified:
    cfe/trunk/lib/AST/ItaniumMangle.cpp
    cfe/trunk/test/CodeGenCXX/mangle-exprs.cpp

Modified: cfe/trunk/lib/AST/ItaniumMangle.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ItaniumMangle.cpp?rev=132659&r1=132658&r2=132659&view=diff
==============================================================================
--- cfe/trunk/lib/AST/ItaniumMangle.cpp (original)
+++ cfe/trunk/lib/AST/ItaniumMangle.cpp Sun Jun  5 00:27:58 2011
@@ -2039,6 +2039,7 @@
   //              ::= <function-param>
   //              ::= sr <type> <unqualified-name>                   # dependent name
   //              ::= sr <type> <unqualified-name> <template-args>   # dependent template-id
+  //              ::= ds <expression> <expression>                   # expr.*expr
   //              ::= sZ <template-param>                            # size of a parameter pack
   //              ::= sZ <function-param>    # size of a function parameter pack
   //              ::= <expr-primary>
@@ -2317,8 +2318,11 @@
   case Expr::CompoundAssignOperatorClass: // fallthrough
   case Expr::BinaryOperatorClass: {
     const BinaryOperator *BO = cast<BinaryOperator>(E);
-    mangleOperatorName(BinaryOperator::getOverloadedOperator(BO->getOpcode()),
-                       /*Arity=*/2);
+    if (BO->getOpcode() == BO_PtrMemD)
+      Out << "ds";
+    else
+      mangleOperatorName(BinaryOperator::getOverloadedOperator(BO->getOpcode()),
+                         /*Arity=*/2);
     mangleExpression(BO->getLHS());
     mangleExpression(BO->getRHS());
     break;

Modified: cfe/trunk/test/CodeGenCXX/mangle-exprs.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/mangle-exprs.cpp?rev=132659&r1=132658&r2=132659&view=diff
==============================================================================
--- cfe/trunk/test/CodeGenCXX/mangle-exprs.cpp (original)
+++ cfe/trunk/test/CodeGenCXX/mangle-exprs.cpp Sun Jun  5 00:27:58 2011
@@ -109,3 +109,19 @@
 
   // CHECK: store float {{.*}}, float* @_ZZN5test21gIPFfvEEEvT_DTclfL0p_EEE8variable,
 }
+
+namespace test3 {
+  template <class T, class U> void a(T x, U y, decltype(x.*y) z) {}  
+
+  struct X {
+    int *member;
+  };
+
+  // CHECK: define void @_ZN5test311instantiateEv
+  void instantiate() {
+    X x;
+    int *ip;
+    // CHECK: call void @_ZN5test31aINS_1XEMS1_PiEEvT_T0_DTdsfL0p_fL0p0_E
+    a(x, &X::member, ip);
+  }
+}





More information about the cfe-commits mailing list