diff options
author | Jan Hubicka <jh@suse.cz> | 2012-10-08 16:04:31 +0000 |
---|---|---|
committer | Jan Hubicka <jh@suse.cz> | 2012-10-08 16:04:31 +0000 |
commit | ba4f42206297ac09bf6ed5f3ea1955eb23fd98a0 (patch) | |
tree | 88f8e127758fe18f6fb4dfd8a141d59f86238060 /gcc/lto | |
parent | 9e2921779f27525748719ef6fdb24777458adb35 (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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/lto/lto.c | 25 |
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 |