Reorganize the emission of (unfoldable) constant casts a bit, and
make sure that upcasts of member pointer types are covered as constants.
Fixed rdar://problem/9130221



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@127702 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/test/CodeGenCXX/member-function-pointers.cpp b/test/CodeGenCXX/member-function-pointers.cpp
index 78a571e..011e9cd 100644
--- a/test/CodeGenCXX/member-function-pointers.cpp
+++ b/test/CodeGenCXX/member-function-pointers.cpp
@@ -209,3 +209,26 @@
     return pmf();
   }
 }
+
+namespace test9 {
+  struct A {
+    void foo();
+  };
+  struct B : A {
+    void foo();
+  };
+
+  typedef void (A::*fooptr)();
+
+  struct S {
+    fooptr p;
+  };
+
+  // CHECK:    define void @_ZN5test94testEv(
+  // CHECK:      alloca i32
+  // CHECK-NEXT: ret void
+  void test() {
+    int x;
+    static S array[] = { (fooptr) &B::foo };
+  }
+}