Fix PR/2213
authorGabriel Dos Reis <gdr@nerim.net>
Mon, 5 Aug 2002 03:56:16 +0000 (03:56 +0000)
committerGabriel Dos Reis <gdr@gcc.gnu.org>
Mon, 5 Aug 2002 03:56:16 +0000 (03:56 +0000)
cp/
        Fix PR/2213
        * cvt.c (cp_convert_to_pointer): Reject conversions from integral
        expressions to pointer-to-data-member of pointer-to-member-functions.

testsuite/
        * g++.dg/other/conversion1.C: New test.

From-SVN: r56039

gcc/cp/ChangeLog
gcc/cp/cvt.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/other/conversion1.C [new file with mode: 0644]

index 4001a17557cb4aec5f5e763a12330c15c3b15a40..63b8e2d5efd20b9d1a5dfa4f7535974837ec3de6 100644 (file)
@@ -1,3 +1,9 @@
+2002-08-04  Gabriel Dos Reis  <gdr@nerim.net>
+
+       Fix PR/2213
+       * cvt.c (cp_convert_to_pointer): Reject conversions from integral
+       expressions to pointer-to-data-member of pointer-to-member-functions.
+
 2002-08-04  Geoffrey Keating  <geoffk@redhat.com>
 
        * cvt.c (ocp_convert): Delete obsolete code.
index fd4b6b96757ec49d2680209d45087b3944c8e055..26af72fd9008463057380669102056fe55d416e3 100644 (file)
@@ -256,6 +256,12 @@ cp_convert_to_pointer (type, expr, force)
       force_fit_type (expr, 0);
       return expr;
     }
+  else if ((TYPE_PTRMEM_P (type) || TYPE_PTRMEMFUNC_P (type))
+          && INTEGRAL_CODE_P (form))
+    {
+      error ("invalid conversion from '%T' to '%T'", intype, type);
+      return error_mark_node;
+    }
 
   if (INTEGRAL_CODE_P (form))
     {
index a3d557865ad13d3a7b14622fe14358315b4c98f4..aefecde387479b928825df0027e63cd8642711f6 100644 (file)
@@ -1,3 +1,7 @@
+2002-08-04  Gabriel Dos Reis  <gdr@nerim.net>
+
+       * g++.dg/other/conversion1.C: New test.
+
 2002-08-03  Roger Sayle  <roger@eyesopen.com>
 
        * gcc.dg/builtins-1.c: New testcase.
diff --git a/gcc/testsuite/g++.dg/other/conversion1.C b/gcc/testsuite/g++.dg/other/conversion1.C
new file mode 100644 (file)
index 0000000..580dfd6
--- /dev/null
@@ -0,0 +1,17 @@
+// PR C++/2213
+// Origin: philippeb@corel.com
+// Copyright (C), 2002 Free Software Foundation
+// Contributed by Gabriel Dos Reis <gdr@integrable-solutions.net>
+
+// { dg-do compile } 
+class QObject
+{
+};
+
+int main()
+{
+  long long m;
+  
+  (void (QObject::*)()) m;    // { dg-error "invalid conversion" "" }
+}