diff options
author | Mike Stump <mrs@gcc.gnu.org> | 1997-06-04 17:31:55 +0000 |
---|---|---|
committer | Mike Stump <mrs@gcc.gnu.org> | 1997-06-04 17:31:55 +0000 |
commit | 013bc8afa0020d91a3c4109250c360b02cb372a6 (patch) | |
tree | 69a9c6bdc17b3a806fb028fa06a95dc4fa3e8c63 /gcc/cp/search.c | |
parent | 6313a654f751f936d313f265849c76e87515b2c4 (diff) | |
download | gcc-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.c | 26 |
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); } |