aboutsummaryrefslogtreecommitdiff
path: root/gcc/lto
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2012-10-08 16:04:31 +0000
committerJan Hubicka <jh@suse.cz>2012-10-08 16:04:31 +0000
commitba4f42206297ac09bf6ed5f3ea1955eb23fd98a0 (patch)
tree88f8e127758fe18f6fb4dfd8a141d59f86238060 /gcc/lto
parent9e2921779f27525748719ef6fdb24777458adb35 (diff)
* lto/lto.c (remember_with_vars): Also fixup INTEGER_CST.
(fixup_integer_cst): New functoin. (lto_ft_type): Fixup BASETYPE of methods and offsets. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@192214 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/lto')
-rw-r--r--gcc/lto/ChangeLog6
-rw-r--r--gcc/lto/lto.c25
2 files changed, 31 insertions, 0 deletions
diff --git a/gcc/lto/ChangeLog b/gcc/lto/ChangeLog
index 7218f4873cd..3fc713616ed 100644
--- a/gcc/lto/ChangeLog
+++ b/gcc/lto/ChangeLog
@@ -1,3 +1,9 @@
+2012-10-08 Jan Hubicka <jh@suse.cz>
+
+ * lto/lto.c (remember_with_vars): Also fixup INTEGER_CST.
+ (fixup_integer_cst): New functoin.
+ (lto_ft_type): Fixup BASETYPE of methods and offsets.
+
2012-10-07 Jan Hubicka <jh@suse.cz>
* lto.c (read_cgraph_and_symbols): Release type merging hash early;
diff --git a/gcc/lto/lto.c b/gcc/lto/lto.c
index d880c8a2062..81d7fb3d2e0 100644
--- a/gcc/lto/lto.c
+++ b/gcc/lto/lto.c
@@ -1408,11 +1408,36 @@ remember_with_vars (tree t)
(tt) = GIMPLE_REGISTER_TYPE (tt); \
if (VAR_OR_FUNCTION_DECL_P (tt) && TREE_PUBLIC (tt)) \
remember_with_vars (t); \
+ if (TREE_CODE (tt) == INTEGER_CST) \
+ (tt) = fixup_integer_cst (tt); \
} \
} while (0)
static void lto_fixup_types (tree);
+/* Return integer_cst T with updated type. */
+
+static tree
+fixup_integer_cst (tree t)
+{
+ tree type = GIMPLE_REGISTER_TYPE (TREE_TYPE (t));
+
+ if (type == TREE_TYPE (t))
+ return t;
+
+ /* If overflow was set, streamer_read_integer_cst
+ produced local copy of T. */
+ if (TREE_OVERFLOW (t))
+ {
+ TREE_TYPE (t) = type;
+ return t;
+ }
+ else
+ /* Otherwise produce new shared node for the new type. */
+ return build_int_cst_wide (type, TREE_INT_CST_LOW (t),
+ TREE_INT_CST_HIGH (t));
+}
+
/* Fix up fields of a tree_typed T. */
static void