aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree.c
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2018-08-30 14:32:45 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2018-08-30 12:32:45 +0000
commit7ee6e37a8e59789aba4dac00f9a08adfdc084bbb (patch)
tree0c1d75879236fcc09f3de54cfb855c84fe86ec75 /gcc/tree.c
parent0c05d45624c68116a6fd82e8977ff8363ff9e4d2 (diff)
downloadgcc-7ee6e37a8e59789aba4dac00f9a08adfdc084bbb.zip
gcc-7ee6e37a8e59789aba4dac00f9a08adfdc084bbb.tar.gz
gcc-7ee6e37a8e59789aba4dac00f9a08adfdc084bbb.tar.bz2
tree.c (find_decls_types_r): Walk also TYPE_NEXT_PTR_TO and TYPE_NEXT_REF_TO.
* tree.c (find_decls_types_r): Walk also TYPE_NEXT_PTR_TO and TYPE_NEXT_REF_TO. From-SVN: r263978
Diffstat (limited to 'gcc/tree.c')
-rw-r--r--gcc/tree.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/gcc/tree.c b/gcc/tree.c
index d1e1b30..c3ac8f3 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -5519,9 +5519,14 @@ find_decls_types_r (tree *tp, int *ws, void *data)
fld_worklist_push (TYPE_POINTER_TO (t), fld);
fld_worklist_push (TYPE_REFERENCE_TO (t), fld);
fld_worklist_push (TYPE_NAME (t), fld);
- /* Do not walk TYPE_NEXT_PTR_TO or TYPE_NEXT_REF_TO. We do not stream
- them and thus do not and want not to reach unused pointer types
- this way. */
+ /* While we do not stream TYPE_POINTER_TO and TYPE_REFERENCE_TO
+ lists, we may look types up in these lists and use them while
+ optimizing the function body. Thus we need to free lang data
+ in them. */
+ if (TREE_CODE (t) == POINTER_TYPE)
+ fld_worklist_push (TYPE_NEXT_PTR_TO (t), fld);
+ if (TREE_CODE (t) == REFERENCE_TYPE)
+ fld_worklist_push (TYPE_NEXT_REF_TO (t), fld);
if (!POINTER_TYPE_P (t))
fld_worklist_push (TYPE_MIN_VALUE_RAW (t), fld);
/* TYPE_MAX_VALUE_RAW is TYPE_BINFO for record types. */