diff options
author | Daniel Berlin <dan@cgsoftware.com> | 2001-09-22 15:54:53 +0000 |
---|---|---|
committer | Daniel Berlin <dan@cgsoftware.com> | 2001-09-22 15:54:53 +0000 |
commit | 29f8365f6d260454e3693246e737376620740b4b (patch) | |
tree | cb207757684757484f64664a9f1835fe7830bacf | |
parent | 41a249b5bf32f7d2cff59ad22870a5253f0ee45c (diff) |
Unpickling C trees now works perfectly, excluding DECL_RTL
git-svn-id: https://gcc.gnu.org/svn/gcc/branches/tree-serialize-branch@45755 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/c-decl.c | 25 | ||||
-rw-r--r-- | gcc/tree.c | 8 |
2 files changed, 33 insertions, 0 deletions
diff --git a/gcc/c-decl.c b/gcc/c-decl.c index e617d6c0ce9..5a93d571432 100644 --- a/gcc/c-decl.c +++ b/gcc/c-decl.c @@ -6979,6 +6979,31 @@ lang_unpickle_tree (t) i->error_locus = read_tree (i->error_locus); i->limbo_value = read_tree (i->limbo_value); } + else if (TYPE_P (t) && TYPE_LANG_SPECIFIC (t)) + { + datum key, data; + key.dptr = (char *) &TYPE_LANG_SPECIFIC (t); + key.dsize = sizeof (&TYPE_LANG_SPECIFIC (t)); + data = dbm_fetch (datafile, key); + if (!data.dptr) + abort(); + memcpy (TYPE_LANG_SPECIFIC (t), data.dptr, data.dsize); + } + else if (DECL_P (t) && DECL_LANG_SPECIFIC (t)) + { + struct lang_decl *ld; + datum key, data; + key.dptr = (char *) &DECL_LANG_SPECIFIC (t); + key.dsize = sizeof (&DECL_LANG_SPECIFIC (t)); + data = dbm_fetch (datafile, key); + if (!data.dptr) + abort(); + ld = (struct lang_decl *)ggc_alloc_cleared (sizeof (struct lang_decl)); + memcpy (ld, data.dptr, data.dsize); + DECL_LANG_SPECIFIC (t) = ld; + ld->base.saved_tree = read_tree (ld->base.saved_tree); + ld->pending_sizes = read_tree (ld->pending_sizes); + } } void diff --git a/gcc/tree.c b/gcc/tree.c index f44a896908d..a2af124fbaa 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -5150,6 +5150,12 @@ unpickle_tree (id) DECL_VINDEX (buffer) = read_tree (DECL_VINDEX (buffer)); if (TREE_CODE (buffer) == FIELD_DECL) buffer->decl.u2.t = read_tree (buffer->decl.u2.t); + if (TREE_CODE (buffer) == FUNCTION_DECL + || (TREE_CODE (buffer) == VAR_DECL + && (TREE_STATIC (buffer) + || DECL_EXTERNAL (buffer) + || TREE_PUBLIC (buffer)))) + DECL_ASSEMBLER_NAME (buffer); /*FIXME: if it's PARM_DECL, u2 is an RTL */ /*FIXME: Handle lang specific */ break; @@ -5275,8 +5281,10 @@ pickle_tree (t) DECL_MACHINE_ATTRIBUTES (buffer) = (tree) write_tree (&DECL_MACHINE_ATTRIBUTES (buffer)); DECL_VINDEX (buffer) = (tree) write_tree (&DECL_VINDEX (buffer)); +#if 0 if (DECL_ASSEMBLER_NAME_SET_P (t)) DECL_ASSEMBLER_NAME (buffer) = (tree) write_tree (&DECL_ASSEMBLER_NAME (buffer)); +#endif if (TREE_CODE (buffer) == FIELD_DECL) buffer->decl.u2.t = (tree) write_tree (&buffer->decl.u2.t); lang_pickle_tree (buffer, t); |