Disallow conversions from function pointers to void*.

Function pointers and member function pointers cannot be converted to void*.
libc++abi incorrectly allows this conversion for function pointers.

Review URL: http://reviews.llvm.org/D8811


git-svn-id: https://llvm.org/svn/llvm-project/libcxxabi/trunk@236299 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/test/catch_function_01.pass.cpp b/test/catch_function_01.pass.cpp
index 33999f2..087fce4 100644
--- a/test/catch_function_01.pass.cpp
+++ b/test/catch_function_01.pass.cpp
@@ -11,11 +11,19 @@
 
 #include <cassert>
 
+template <class Tp>
+bool can_convert(Tp) { return true; }
+
+template <class>
+bool can_convert(...) { return false; }
+
 void f() {}
 
 int main()
 {
     typedef void Function();
+    assert(!can_convert<Function&>(&f));
+    assert(!can_convert<void*>(&f));
     try
     {
         throw f;     // converts to void (*)()
@@ -25,7 +33,15 @@
     {
         assert(false);
     }
+    catch (void*) // can't catch as void*
+    {
+        assert(false);
+    }
+    catch(Function*)
+    {
+    }
     catch (...)
     {
+        assert(false);
     }
 }