mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-26 16:51:01 +08:00
cpppch.c (reset_ht): Remove.
* cpppch.c (reset_ht): Remove. (cpp_read_state): Remove loop to reset hashtable identifiers. * ggc-common.c (gt_pch_save): Add call to gt_pch_fixup_stringpool after pch file is written. * ggc.h (gt_pch_fixup_stringpool): Declare. * stringpool.c (ht_copy_and_clear): Define. Callback. Copy hashnode's value to another hashtable, then clear the original. (saved_ident_hash): Define. (gt_pch_save_stringpool): Create saved_ident_hash, use it to store definitions in ident_hash, and clear ident_hash. (gt_pch_fixup_stringpool): Define. Restore definitions from saved_ident_hash to ident_hash, then destroy saved_ident_hash. From-SVN: r65215
This commit is contained in:
parent
bcc53e2a94
commit
d24ecd21b3
@ -1,3 +1,18 @@
|
||||
2003-04-03 Matt Austern <austern@apple.com>
|
||||
|
||||
* cpppch.c (reset_ht): Remove.
|
||||
(cpp_read_state): Remove loop to reset hashtable identifiers.
|
||||
* ggc-common.c (gt_pch_save): Add call to gt_pch_fixup_stringpool
|
||||
after pch file is written.
|
||||
* ggc.h (gt_pch_fixup_stringpool): Declare.
|
||||
* stringpool.c (ht_copy_and_clear): Define. Callback. Copy
|
||||
hashnode's value to another hashtable, then clear the original.
|
||||
(saved_ident_hash): Define.
|
||||
(gt_pch_save_stringpool): Create saved_ident_hash, use it to
|
||||
store definitions in ident_hash, and clear ident_hash.
|
||||
(gt_pch_fixup_stringpool): Define. Restore definitions from
|
||||
saved_ident_hash to ident_hash, then destroy saved_ident_hash.
|
||||
|
||||
Thu Apr 3 22:27:40 CEST 2003 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
* cfgrtl.c (update_bb_for_insn): Do not set block for barriers.
|
||||
|
23
gcc/cpppch.c
23
gcc/cpppch.c
@ -34,7 +34,6 @@ static int comp_hashnodes PARAMS ((const void *, const void *));
|
||||
static int collect_ht_nodes PARAMS ((cpp_reader *, cpp_hashnode *, void *));
|
||||
static int write_defs PARAMS ((cpp_reader *, cpp_hashnode *, void *));
|
||||
static int save_macros PARAMS ((cpp_reader *, cpp_hashnode *, void *));
|
||||
static int reset_ht PARAMS ((cpp_reader *, cpp_hashnode *, void *));
|
||||
|
||||
/* This structure represents a macro definition on disk. */
|
||||
struct macrodef_struct
|
||||
@ -628,23 +627,6 @@ cpp_prepare_state (r, data)
|
||||
*data = d;
|
||||
}
|
||||
|
||||
/* Erase all the existing macros and assertions. */
|
||||
|
||||
static int
|
||||
reset_ht (r, h, unused)
|
||||
cpp_reader *r ATTRIBUTE_UNUSED;
|
||||
cpp_hashnode *h;
|
||||
void *unused ATTRIBUTE_UNUSED;
|
||||
{
|
||||
if (h->type != NT_VOID
|
||||
&& (h->flags & NODE_BUILTIN) == 0)
|
||||
{
|
||||
h->type = NT_VOID;
|
||||
memset (&h->value, 0, sizeof (h->value));
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Given a precompiled header that was previously determined to be valid,
|
||||
apply all its definitions (and undefinitions) to the current state.
|
||||
DEPNAME is passed to deps_restore. */
|
||||
@ -664,11 +646,6 @@ cpp_read_state (r, name, f, data)
|
||||
size_t i, mac_count;
|
||||
int saved_line = r->line;
|
||||
|
||||
/* Erase all the existing hashtable entries for macros. At this
|
||||
point, they're all from the PCH file, and their pointers won't be
|
||||
valid. */
|
||||
cpp_forall_identifiers (r, reset_ht, NULL);
|
||||
|
||||
/* Restore spec_nodes, which will be full of references to the old
|
||||
hashtable entries and so will now be invalid. */
|
||||
{
|
||||
|
@ -543,6 +543,7 @@ gt_pch_save (f)
|
||||
memcpy (state.ptrs[i]->obj, this_object, state.ptrs[i]->size);
|
||||
}
|
||||
ggc_pch_finish (state.d, state.f);
|
||||
gt_pch_fixup_stringpool ();
|
||||
|
||||
free (state.ptrs);
|
||||
htab_delete (saving_htab);
|
||||
|
@ -124,6 +124,7 @@ extern void ggc_mark_roots PARAMS ((void));
|
||||
/* Save and restore the string pool entries for PCH. */
|
||||
|
||||
extern void gt_pch_save_stringpool PARAMS ((void));
|
||||
extern void gt_pch_fixup_stringpool PARAMS ((void));
|
||||
extern void gt_pch_restore_stringpool PARAMS ((void));
|
||||
|
||||
/* PCH and GGC handling for strings, mostly trivial. */
|
||||
|
@ -34,6 +34,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
|
||||
#include "ggc.h"
|
||||
#include "tree.h"
|
||||
#include "hashtable.h"
|
||||
#include "cpplib.h"
|
||||
|
||||
/* The "" allocated string. */
|
||||
const char empty_string[] = "";
|
||||
@ -50,6 +51,7 @@ static struct obstack string_stack;
|
||||
|
||||
static hashnode alloc_node PARAMS ((hash_table *));
|
||||
static int mark_ident PARAMS ((struct cpp_reader *, hashnode, const PTR));
|
||||
static int ht_copy_and_clear PARAMS ((struct cpp_reader *, hashnode, const void *));
|
||||
|
||||
/* Initialize the string pool. */
|
||||
void
|
||||
@ -214,6 +216,33 @@ struct string_pool_data GTY(())
|
||||
|
||||
static GTY(()) struct string_pool_data * spd;
|
||||
|
||||
static int
|
||||
ht_copy_and_clear (r, hp, ht2_p)
|
||||
cpp_reader *r ATTRIBUTE_UNUSED;
|
||||
hashnode hp;
|
||||
const void *ht2_p;
|
||||
{
|
||||
cpp_hashnode *h = CPP_HASHNODE (hp);
|
||||
struct ht *ht2 = (struct ht *) ht2_p;
|
||||
|
||||
if (h->type != NT_VOID
|
||||
&& (h->flags & NODE_BUILTIN) == 0)
|
||||
{
|
||||
cpp_hashnode *h2 = CPP_HASHNODE (ht_lookup (ht2,
|
||||
NODE_NAME (h),
|
||||
NODE_LEN (h),
|
||||
HT_ALLOC));
|
||||
h2->type = h->type;
|
||||
memcpy (&h2->value, &h->value, sizeof (h->value));
|
||||
|
||||
h->type = NT_VOID;
|
||||
memset (&h->value, 0, sizeof (h->value));
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static struct ht *saved_ident_hash;
|
||||
|
||||
void
|
||||
gt_pch_save_stringpool ()
|
||||
{
|
||||
@ -228,6 +257,18 @@ gt_pch_save_stringpool ()
|
||||
spd->entries[i] = HT_IDENT_TO_GCC_IDENT (ident_hash->entries[i]);
|
||||
else
|
||||
spd->entries[i] = NULL;
|
||||
|
||||
saved_ident_hash = ht_create (14);
|
||||
saved_ident_hash->alloc_node = alloc_node;
|
||||
ht_forall (ident_hash, ht_copy_and_clear, saved_ident_hash);
|
||||
}
|
||||
|
||||
void
|
||||
gt_pch_fixup_stringpool ()
|
||||
{
|
||||
ht_forall (saved_ident_hash, ht_copy_and_clear, ident_hash);
|
||||
ht_destroy (saved_ident_hash);
|
||||
saved_ident_hash = 0;
|
||||
}
|
||||
|
||||
void
|
||||
|
Loading…
x
Reference in New Issue
Block a user