From 201fbb7f201cd7af4491ce07a7c5b4aa7ee99e22 Mon Sep 17 00:00:00 2001 From: Gabriel Dos Reis Date: Mon, 5 Aug 2002 03:56:16 +0000 Subject: [PATCH] Fix PR/2213 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 | 6 ++++++ gcc/cp/cvt.c | 6 ++++++ gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/g++.dg/other/conversion1.C | 17 +++++++++++++++++ 4 files changed, 33 insertions(+) create mode 100644 gcc/testsuite/g++.dg/other/conversion1.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 4001a17557c..63b8e2d5efd 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2002-08-04 Gabriel Dos Reis + + 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 * cvt.c (ocp_convert): Delete obsolete code. diff --git a/gcc/cp/cvt.c b/gcc/cp/cvt.c index fd4b6b96757..26af72fd900 100644 --- a/gcc/cp/cvt.c +++ b/gcc/cp/cvt.c @@ -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)) { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a3d557865ad..aefecde3874 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2002-08-04 Gabriel Dos Reis + + * g++.dg/other/conversion1.C: New test. + 2002-08-03 Roger Sayle * 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 index 00000000000..580dfd6eede --- /dev/null +++ b/gcc/testsuite/g++.dg/other/conversion1.C @@ -0,0 +1,17 @@ +// PR C++/2213 +// Origin: philippeb@corel.com +// Copyright (C), 2002 Free Software Foundation +// Contributed by Gabriel Dos Reis + +// { dg-do compile } + +class QObject +{ +}; + +int main() +{ + long long m; + + (void (QObject::*)()) m; // { dg-error "invalid conversion" "" } +} -- 2.30.2