diff options
author | Giovanni Bajo <giovannibajo@libero.it> | 2003-11-14 05:51:21 +0100 |
---|---|---|
committer | Bernardo Innocenti <bernie@gcc.gnu.org> | 2003-11-14 05:51:21 +0100 |
commit | 28e8f3a00ee4012f8642a68c9b4f4845436b77a4 (patch) | |
tree | 9d20aac67ecb6453b7de3ccbfa5ec78667ee58df /gcc | |
parent | 0f8db53eaf3c743fd891c6a53c2020713d90d53c (diff) | |
download | gcc-28e8f3a00ee4012f8642a68c9b4f4845436b77a4.zip gcc-28e8f3a00ee4012f8642a68c9b4f4845436b77a4.tar.gz gcc-28e8f3a00ee4012f8642a68c9b4f4845436b77a4.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/pt.c | 22 |
2 files changed, 28 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 7f8402d..7e036b3 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -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. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index cd93423..4afe974 100644 --- a/gcc/cp/pt.c +++ b/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; |