Fix a crash involving pointer-to-data-members of boolean type. We were
constructing an LLVM PointerType directly from the "bool"'s LLVM type
(i1), which resulted in unfortunate pointer type i1*. The fix is to
build the LLVM PointerType from the corresponding Clang PointerType,
so that we get i8* in the case of a bool. 

John, please review. I also left a FIXME there because we seem to be
dropping "volatile", which would be rather unfortunate.

llvm-svn: 112819
diff --git a/clang/test/CodeGenCXX/pointers-to-data-members.cpp b/clang/test/CodeGenCXX/pointers-to-data-members.cpp
index 60c1661..38c7d28 100644
--- a/clang/test/CodeGenCXX/pointers-to-data-members.cpp
+++ b/clang/test/CodeGenCXX/pointers-to-data-members.cpp
@@ -189,3 +189,17 @@
 A a;
 
 }
+
+namespace BoolPtrToMember {
+  struct X {
+    bool member;
+  };
+
+  // CHECK: define i8* @_ZN15BoolPtrToMember1fERNS_1XEMS0_b
+  bool &f(X &x, bool X::*member) {
+    // CHECK: {{bitcast.* to i8\*}}
+    // CHECK-NEXT: getelementptr inbounds i8*
+    // CHECK-NEXT: ret i8*
+    return x.*member;
+  }
+}