aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp/search.c
diff options
context:
space:
mode:
authorMike Stump <mrs@gcc.gnu.org>1997-06-04 17:31:55 +0000
committerMike Stump <mrs@gcc.gnu.org>1997-06-04 17:31:55 +0000
commit013bc8afa0020d91a3c4109250c360b02cb372a6 (patch)
tree69a9c6bdc17b3a806fb028fa06a95dc4fa3e8c63 /gcc/cp/search.c
parent6313a654f751f936d313f265849c76e87515b2c4 (diff)
downloadgcc-013bc8afa0020d91a3c4109250c360b02cb372a6.zip
gcc-013bc8afa0020d91a3c4109250c360b02cb372a6.tar.gz
gcc-013bc8afa0020d91a3c4109250c360b02cb372a6.tar.bz2
91th Cygnus<->FSF quick merge
From-SVN: r14145
Diffstat (limited to 'gcc/cp/search.c')
-rw-r--r--gcc/cp/search.c26
1 files changed, 25 insertions, 1 deletions
diff --git a/gcc/cp/search.c b/gcc/cp/search.c
index fa69754..40a83c1 100644
--- a/gcc/cp/search.c
+++ b/gcc/cp/search.c
@@ -3449,7 +3449,31 @@ push_class_decls (type)
{
tree node = TREE_VALUE (new);
- while (TREE_CODE (node) == TREE_LIST)
+ if (TREE_CODE (node) == TYPE_DECL
+ && DECL_ARTIFICIAL (node)
+ && IS_AGGR_TYPE (TREE_TYPE (node))
+ && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (node)))
+ {
+ tree t = CLASSTYPE_TI_TEMPLATE (TREE_TYPE (node));
+ tree n = new;
+
+ for (; n; n = TREE_CHAIN (n))
+ {
+ tree d = TREE_VALUE (n);
+ if (TREE_CODE (d) == TYPE_DECL
+ && DECL_ARTIFICIAL (node)
+ && IS_AGGR_TYPE (TREE_TYPE (d))
+ && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (d))
+ && CLASSTYPE_TI_TEMPLATE (TREE_TYPE (d)) == t)
+ /* OK */;
+ else
+ break;
+ }
+
+ if (n == NULL_TREE)
+ new = t;
+ }
+ else while (TREE_CODE (node) == TREE_LIST)
node = TREE_VALUE (node);
id = DECL_NAME (node);
}