From cd64be5bcae8c6f0ccf50aac0e0a16f28e23d042 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Thu, 23 Jun 2016 15:04:25 +0000 Subject: [PATCH] * tree-inline.c (remap_decl): Preserve DECL_ORIGINAL_TYPE invariant. From-SVN: r237734 --- gcc/ChangeLog | 4 ++++ gcc/tree-inline.c | 15 ++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9a1f732d259..ffa702a73f6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2016-06-23 Eric Botcazou + + * tree-inline.c (remap_decl): Preserve DECL_ORIGINAL_TYPE invariant. + 2016-06-23 Andi Kleen * Makefile.in: Regenerate. diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c index 07f6a83ff7c..a0d9e934e6d 100644 --- a/gcc/tree-inline.c +++ b/gcc/tree-inline.c @@ -367,7 +367,20 @@ remap_decl (tree decl, copy_body_data *id) /* Remap types, if necessary. */ TREE_TYPE (t) = remap_type (TREE_TYPE (t), id); if (TREE_CODE (t) == TYPE_DECL) - DECL_ORIGINAL_TYPE (t) = remap_type (DECL_ORIGINAL_TYPE (t), id); + { + DECL_ORIGINAL_TYPE (t) = remap_type (DECL_ORIGINAL_TYPE (t), id); + + /* Preserve the invariant that DECL_ORIGINAL_TYPE != TREE_TYPE, + which is enforced in gen_typedef_die when DECL_ABSTRACT_ORIGIN + is not set on the TYPE_DECL, for example in LTO mode. */ + if (DECL_ORIGINAL_TYPE (t) == TREE_TYPE (t)) + { + tree x = build_variant_type_copy (TREE_TYPE (t)); + TYPE_STUB_DECL (x) = TYPE_STUB_DECL (TREE_TYPE (t)); + TYPE_NAME (x) = t; + DECL_ORIGINAL_TYPE (t) = x; + } + } /* Remap sizes as necessary. */ walk_tree (&DECL_SIZE (t), copy_tree_body_r, id, NULL); -- 2.30.2