Commit 28e8f3a0 by Giovanni Bajo Committed by Bernardo Innocenti

re PR c++/2094 (unimplemented: use of `ptrmem_cst' in template type unification)

        PR c++/2094
        * pt.c (unify): Add support for PTRMEM_CST and
        FIELD_DECL unification.

From-SVN: r73577
parent 0f8db53e
2003-11-14 Giovanni Bajo <giovannibajo@libero.it>
PR c++/2094
* pt.c (unify): Add support for PTRMEM_CST and
FIELD_DECL unification.
2003-11-13 Richard Earnshaw <rearnsha@arm.com> 2003-11-13 Richard Earnshaw <rearnsha@arm.com>
* decl.c (grokfndecl): Change OK to type tree. * decl.c (grokfndecl): Change OK to type tree.
......
...@@ -9617,6 +9617,27 @@ unify (tree tparms, tree targs, tree parm, tree arg, int strict) ...@@ -9617,6 +9617,27 @@ unify (tree tparms, tree targs, tree parm, tree arg, int strict)
TREE_VEC_ELT (targs, idx) = arg; TREE_VEC_ELT (targs, idx) = arg;
return 0; return 0;
case PTRMEM_CST:
{
/* A pointer-to-member constant can be unified only with
another constant. */
if (TREE_CODE (arg) != PTRMEM_CST)
return 1;
/* Just unify the class member. It would be useless (and possibly
wrong, depending on the strict flags) to unify also
PTRMEM_CST_CLASS, because we want to be sure that both parm and
arg refer to the same variable, even if through different
classes. For instance:
struct A { int x; };
struct B : A { };
Unification of &A::x and &B::x must succeed. */
return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
PTRMEM_CST_MEMBER (arg), strict);
}
case POINTER_TYPE: case POINTER_TYPE:
{ {
if (TREE_CODE (arg) != POINTER_TYPE) if (TREE_CODE (arg) != POINTER_TYPE)
...@@ -9805,6 +9826,7 @@ unify (tree tparms, tree targs, tree parm, tree arg, int strict) ...@@ -9805,6 +9826,7 @@ unify (tree tparms, tree targs, tree parm, tree arg, int strict)
return 1; return 1;
return 0; return 0;
case FIELD_DECL:
case TEMPLATE_DECL: case TEMPLATE_DECL:
/* Matched cases are handled by the ARG == PARM test above. */ /* Matched cases are handled by the ARG == PARM test above. */
return 1; return 1;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment