From: Dodji Seketeli Date: Wed, 4 Nov 2009 19:23:40 +0000 (+0000) Subject: Revert "Fix PR c++/37093" X-Git-Tag: releases/gcc-4.3.5~313 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=87ea014a3faf9ddad4f9a4f9e2142821d6a970ac;p=thirdparty%2Fgcc.git Revert "Fix PR c++/37093" This reverts commit 153841 on gcc-4_3-branch. From-SVN: r153908 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 805c1e12758d..3fb5d3f5d6e2 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2009-11-04 Dodji Seketeli + + Revert fix for PR c++/37093 + * pt.c (check_valid_ptrmem_cst_expr): Revert my previous change. + (convert_nontype_argument): Likewise. + 2009-11-03 Jason Merrill PR c++/41876 diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 5a87d5d7e5d3..46866c030485 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -4298,22 +4298,6 @@ convert_nontype_argument_function (tree type, tree expr) return fn; } -/* Subroutine of convert_nontype_argument. - Check if EXPR of type TYPE is a valid pointer-to-member constant. - Emit an error otherwise. */ - -static bool -check_valid_ptrmem_cst_expr (tree type, tree expr) -{ - STRIP_NOPS (expr); - if (expr && (null_ptr_cst_p (expr) || TREE_CODE (expr) == PTRMEM_CST)) - return true; - error ("%qE is not a valid template argument for type %qT", - expr, type); - error ("it must be a pointer-to-member of the form `&X::Y'"); - return false; -} - /* Attempt to convert the non-type template parameter EXPR to the indicated TYPE. If the conversion is successful, return the converted value. If the conversion is unsuccessful, return @@ -4613,11 +4597,6 @@ convert_nontype_argument (tree type, tree expr) if (expr == error_mark_node) return error_mark_node; - /* [temp.arg.nontype] bullet 1 says the pointer to member - expression must be a pointer-to-member constant. */ - if (!check_valid_ptrmem_cst_expr (type, expr)) - return error_mark_node; - /* There is no way to disable standard conversions in resolve_address_of_overloaded_function (called by instantiate_type). It is possible that the call succeeded by @@ -4644,11 +4623,6 @@ convert_nontype_argument (tree type, tree expr) qualification conversions (_conv.qual_) are applied. */ else if (TYPE_PTRMEM_P (type)) { - /* [temp.arg.nontype] bullet 1 says the pointer to member - expression must be a pointer-to-member constant. */ - if (!check_valid_ptrmem_cst_expr (type, expr)) - return error_mark_node; - expr = perform_qualification_conversions (type, expr); if (expr == error_mark_node) return expr; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a4d37c413280..fcdd3edcdf07 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2009-11-04 Dodji Seketeli + + Revert fix for PR c++/37093 + * g++.dg/other/ptrmem10.C: Revert. + * g++.dg/other/ptrmem11.C: Likewise. + 2009-10-28 Jason Merrill PR c++/41876 diff --git a/gcc/testsuite/g++.dg/other/ptrmem10.C b/gcc/testsuite/g++.dg/other/ptrmem10.C deleted file mode 100644 index 4b8c40ac8ecb..000000000000 --- a/gcc/testsuite/g++.dg/other/ptrmem10.C +++ /dev/null @@ -1,29 +0,0 @@ -// Contributed by Dodji Seketeli -// Origin PR c++/37093 - -template -static -void foo(void *obj) -{ - C *p = static_cast(obj); - (p->*M)(); -} - -template -static void -bar(C *c, void (C::*m) ()) -{ - foo((void *)c);// { dg-error "(not a valid template arg|pointer-to-member|no matching fun)" } -} - -struct S -{ - void baz () {} -}; - -int -main () -{ - S a; - bar(&a, &S::baz); -} diff --git a/gcc/testsuite/g++.dg/other/ptrmem11.C b/gcc/testsuite/g++.dg/other/ptrmem11.C deleted file mode 100644 index a850c55c40a1..000000000000 --- a/gcc/testsuite/g++.dg/other/ptrmem11.C +++ /dev/null @@ -1,21 +0,0 @@ -// Contributed by Dodji Seketeli -// Origin PR c++/37093 - -struct A {}; - -template -int -foo(A* q) -{ - return q->*p; -} - -template -int -bar(int T::* p) -{ - return foo

(0);// { dg-error "(not a valid template arg|no matching func|pointer-to-member)" } -} - -int i = bar(0); -