Fixed a code gen bug (by fixing the AST) involving user-defined
pointer-to-member type conversion follwed by a pointer-to-member
standard conversion.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@84955 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaExprCXX.cpp b/lib/Sema/SemaExprCXX.cpp
index d4d031f..ee19ff6 100644
--- a/lib/Sema/SemaExprCXX.cpp
+++ b/lib/Sema/SemaExprCXX.cpp
@@ -1139,6 +1139,10 @@
         From = CastArg.takeAs<Expr>();
         return BuildCXXDerivedToBaseExpr(From, CastKind, ICS, Flavor);
       }
+    
+      if (ICS.UserDefined.After.Second == ICK_Pointer_Member &&
+          ToType.getNonReferenceType()->isMemberFunctionPointerType())
+        CastKind = CastExpr::CK_BaseToDerivedMemberPointer;
       
       From = new (Context) ImplicitCastExpr(ToType.getNonReferenceType(),
                                             CastKind, CastArg.takeAs<Expr>(),