/* String pool for GCC.
- Copyright (C) 2000-2013 Free Software Foundation, Inc.
+ Copyright (C) 2000-2015 Free Software Foundation, Inc.
This file is part of GCC.
#include "config.h"
#include "system.h"
#include "coretypes.h"
-#include "ggc.h"
#include "ggc-internal.h"
-#include "tree.h"
+#include "alias.h"
#include "symtab.h"
+#include "options.h"
+#include "tree.h"
#include "cpplib.h"
/* The "" allocated string. */
void
init_stringpool (void)
{
+ /* Clean up if we're called more than once.
+ (We can't make this idempotent since identifiers contain state) */
+ if (ident_hash)
+ ht_destroy (ident_hash);
+
/* Create with 16K (2^14) entries. */
ident_hash = ht_create (14);
ident_hash->alloc_node = alloc_node;
nul-terminated string, and the length is calculated using strlen. */
const char *
-ggc_alloc_string_stat (const char *contents, int length MEM_STAT_DECL)
+ggc_alloc_string (const char *contents, int length MEM_STAT_DECL)
{
char *result;
if (length == 1 && ISDIGIT (contents[0]))
return digit_string (contents[0] - '0');
- result = (char *) ggc_alloc_atomic_stat (length + 1 PASS_MEM_STAT);
+ result = (char *) ggc_internal_cleared_alloc (length + 1 PASS_MEM_STAT);
memcpy (result, contents, length);
result[length] = '\0';
return (const char *) result;
gt_pch_n_S (const void *x)
{
gt_pch_note_object (CONST_CAST (void *, x), CONST_CAST (void *, x),
- >_pch_p_S, gt_types_enum_last);
+ >_pch_p_S);
}
void
gt_pch_save_stringpool (void)
{
- spd = ggc_alloc_string_pool_data ();
+ spd = ggc_alloc<string_pool_data> ();
spd->nslots = ident_hash->nslots;
spd->nelements = ident_hash->nelements;
- spd->entries = ggc_alloc_vec_ht_identifier_ptr (spd->nslots);
+ spd->entries = ggc_vec_alloc<ht_identifier_ptr> (spd->nslots);
memcpy (spd->entries, ident_hash->entries,
spd->nslots * sizeof (spd->entries[0]));
}