mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-25 10:30:43 +08:00
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
This commit is contained in:
parent
0f8db53eaf
commit
28e8f3a00e
@ -1,3 +1,9 @@
|
||||
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>
|
||||
|
||||
* decl.c (grokfndecl): Change OK to type tree.
|
||||
|
22
gcc/cp/pt.c
22
gcc/cp/pt.c
@ -9617,6 +9617,27 @@ unify (tree tparms, tree targs, tree parm, tree arg, int strict)
|
||||
TREE_VEC_ELT (targs, idx) = arg;
|
||||
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:
|
||||
{
|
||||
if (TREE_CODE (arg) != POINTER_TYPE)
|
||||
@ -9805,6 +9826,7 @@ unify (tree tparms, tree targs, tree parm, tree arg, int strict)
|
||||
return 1;
|
||||
return 0;
|
||||
|
||||
case FIELD_DECL:
|
||||
case TEMPLATE_DECL:
|
||||
/* Matched cases are handled by the ARG == PARM test above. */
|
||||
return 1;
|
||||
|
Loading…
x
Reference in New Issue
Block a user