]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Revert "Fix PR c++/37093"
authorDodji Seketeli <dodji@redhat.com>
Wed, 4 Nov 2009 19:23:40 +0000 (19:23 +0000)
committerDodji Seketeli <dodji@gcc.gnu.org>
Wed, 4 Nov 2009 19:23:40 +0000 (20:23 +0100)
This reverts commit 153841 on gcc-4_3-branch.

From-SVN: r153908

gcc/cp/ChangeLog
gcc/cp/pt.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/other/ptrmem10.C [deleted file]
gcc/testsuite/g++.dg/other/ptrmem11.C [deleted file]

index 805c1e12758d12bb5db8e7c3b7cc0f897701d648..3fb5d3f5d6e23322140cbf198d25f620b440b1d9 100644 (file)
@@ -1,3 +1,9 @@
+2009-11-04  Dodji Seketeli  <dodji@redhat.com>
+
+       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  <jason@redhat.com>
 
        PR c++/41876
index 5a87d5d7e5d37c1a3df2a0398f2b0e4504e81cec..46866c030485f20091eda0948066b06e0ae3aaa8 100644 (file)
@@ -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;
index a4d37c41328082d09e95d802ef399b6b1910c95c..fcdd3edcdf077c03c4ccfefa1688c30b50b05ab5 100644 (file)
@@ -1,3 +1,9 @@
+2009-11-04  Dodji Seketeli  <dodji@redhat.com>
+
+       Revert fix for PR c++/37093
+       * g++.dg/other/ptrmem10.C: Revert.
+       * g++.dg/other/ptrmem11.C: Likewise.
+
 2009-10-28  Jason Merrill  <jason@redhat.com>
 
        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 (file)
index 4b8c40a..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-// Contributed by Dodji Seketeli <dodji@redhat.com>
-// Origin PR c++/37093
-
-template <class C, void (C::*M) ()>
-static
-void foo(void *obj)
-{
-  C *p = static_cast<C*>(obj);
-  (p->*M)();
-}
-
-template <class C>
-static void
-bar(C *c, void (C::*m) ())
-{
-  foo<C,m>((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 (file)
index a850c55..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-// Contributed by Dodji Seketeli <dodji@redhat.com>
-// Origin PR c++/37093
-
-struct A {};
-
-template <int A::* p>
-int
-foo(A* q)
-{
-  return q->*p;
-}
-
-template <typename T>
-int
-bar(int T::* p)
-{
-  return foo<p>(0);// { dg-error "(not a valid template arg|no matching func|pointer-to-member)" }
-}
-
-int i = bar<A>(0);
-