diff options
Diffstat (limited to 'gcc/cp/search.c')
-rw-r--r-- | gcc/cp/search.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/gcc/cp/search.c b/gcc/cp/search.c index 5b66000..30dc0d2 100644 --- a/gcc/cp/search.c +++ b/gcc/cp/search.c @@ -2249,7 +2249,16 @@ dfs_unuse_fields (tree binfo, void *data ATTRIBUTE_UNUSED) tree type = TREE_TYPE (binfo); tree fields; - for (fields = TYPE_FIELDS (type); fields; fields = TREE_CHAIN (fields)) + if (TREE_CODE (type) == TYPENAME_TYPE) + fields = TYPENAME_TYPE_FULLNAME (type); + else if (TREE_CODE (type) == TYPEOF_TYPE) + fields = TYPEOF_TYPE_EXPR (type); + else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM) + fields = TEMPLATE_TYPE_PARM_INDEX (type); + else + fields = TYPE_FIELDS (type); + + for (; fields; fields = TREE_CHAIN (fields)) { if (TREE_CODE (fields) != FIELD_DECL || DECL_ARTIFICIAL (fields)) continue; |