lto.c (remember_with_vars): Also fixup INTEGER_CST.
authorJan Hubicka <jh@suse.cz>
Mon, 8 Oct 2012 16:04:31 +0000 (18:04 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Mon, 8 Oct 2012 16:04:31 +0000 (16:04 +0000)
* lto/lto.c (remember_with_vars): Also fixup INTEGER_CST.
(fixup_integer_cst): New functoin.
(lto_ft_type): Fixup BASETYPE of methods and offsets.

From-SVN: r192214

gcc/lto/ChangeLog
gcc/lto/lto.c

index 7218f48..3fc7136 100644 (file)
@@ -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;
index d880c8a..81d7fb3 100644 (file)
@@ -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