aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/tree.c')
-rw-r--r--gcc/tree.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/gcc/tree.c b/gcc/tree.c
index be89897..48de9cf 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -5254,6 +5254,13 @@ free_lang_data_in_one_sizepos (tree *expr_p)
tree expr = *expr_p;
if (CONTAINS_PLACEHOLDER_P (expr))
*expr_p = build0 (PLACEHOLDER_EXPR, TREE_TYPE (expr));
+ /* ??? We have to reset all non-GIMPLE sizepos because those eventually
+ refer to trees we cannot stream. See for example PR87229 which
+ shows an example with non-gimplified abstract origins in C++.
+ Note this should only happen for abstract copies so setting sizes
+ to NULL is OK (but we cannot easily assert this). */
+ else if (expr && !is_gimple_val (expr))
+ *expr_p = NULL_TREE;
}