diff options
Diffstat (limited to 'gcc/java')
-rw-r--r-- | gcc/java/ChangeLog | 35 | ||||
-rw-r--r-- | gcc/java/class.c | 19 | ||||
-rw-r--r-- | gcc/java/constants.c | 9 | ||||
-rw-r--r-- | gcc/java/decl.c | 4 | ||||
-rw-r--r-- | gcc/java/except.c | 2 | ||||
-rw-r--r-- | gcc/java/expr.c | 2 | ||||
-rw-r--r-- | gcc/java/java-tree.h | 22 | ||||
-rw-r--r-- | gcc/java/jcf-parse.c | 9 | ||||
-rw-r--r-- | gcc/java/jcf-reader.c | 4 | ||||
-rw-r--r-- | gcc/java/jcf.h | 2 |
10 files changed, 71 insertions, 37 deletions
diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index 4c73788..f06d420 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,38 @@ +2010-06-08 Laurynas Biveinis <laurynas.biveinis@gmail.com> + + * jcf-reader.c (jcf_parse_constant_pool): Use typed GC allocation. + + * jcf-parse.c (java_parse_file): Likewise. + (process_zip_dir): Likewise. + + * java-tree.h (MAYBE_CREATE_VAR_LANG_DECL_SPECIFIC): Likewise. + (MAYBE_CREATE_TYPE_TYPE_LANG_SPECIFIC): Likewise. + + * expr.c (add_type_assertion): Likewise. + + * decl.c (make_binding_level): Likewise. + (java_dup_lang_specific_decl): Likewise. + + * constants.c (set_constant_entry): Likewise. + (cpool_for_class): Likewise. + + * class.c (add_method_1): Likewise. + (java_treetreehash_new): Likewise. + + * java-tree.h (struct lang_type): Add variable_size GTY option. + (struct lang_decl): Likewise. + + * jch.h (struct cpool_entry): Likewise. + + * java-tree.h (java_treetreehash_create): Remove parameter ggc. + + * except.c (prepare_eh_table_type): Update + java_treetreehash_create call. + + * class.c (add_method_1): Update java_treetreehash_create call. + (java_treetreehash_create): Remove parameter gc. Use + htab_create_ggc. + 2010-06-04 Joseph Myers <joseph@codesourcery.com> * jvspec.c (lang_specific_driver): Use GCC-specific formats in diff --git a/gcc/java/class.c b/gcc/java/class.c index f346ad4..47b721c 100644 --- a/gcc/java/class.c +++ b/gcc/java/class.c @@ -763,13 +763,12 @@ add_method_1 (tree this_class, int access_flags, tree name, tree function_type) DECL_CONTEXT (fndecl) = this_class; DECL_LANG_SPECIFIC (fndecl) - = GGC_CNEW (struct lang_decl); + = ggc_alloc_cleared_lang_decl(sizeof (struct lang_decl)); DECL_LANG_SPECIFIC (fndecl)->desc = LANG_DECL_FUNC; /* Initialize the static initializer test table. */ - - DECL_FUNCTION_INIT_TEST_TABLE (fndecl) = - java_treetreehash_create (10, 1); + + DECL_FUNCTION_INIT_TEST_TABLE (fndecl) = java_treetreehash_create (10); /* Initialize the initialized (static) class table. */ if (access_flags & ACC_STATIC) @@ -3144,7 +3143,7 @@ java_treetreehash_new (htab_t ht, tree t) e = htab_find_slot_with_hash (ht, t, hv, INSERT); if (*e == NULL) { - tthe = (struct treetreehash_entry *) (*ht->alloc_f) (1, sizeof (*tthe)); + tthe = ggc_alloc_cleared_treetreehash_entry (); tthe->key = t; *e = tthe; } @@ -3154,14 +3153,10 @@ java_treetreehash_new (htab_t ht, tree t) } htab_t -java_treetreehash_create (size_t size, int gc) +java_treetreehash_create (size_t size) { - if (gc) - return htab_create_ggc (size, java_treetreehash_hash, - java_treetreehash_compare, NULL); - else - return htab_create_alloc (size, java_treetreehash_hash, - java_treetreehash_compare, free, xcalloc, free); + return htab_create_ggc (size, java_treetreehash_hash, + java_treetreehash_compare, NULL); } /* Break down qualified IDENTIFIER into package and class-name components. diff --git a/gcc/java/constants.c b/gcc/java/constants.c index ca5eb77..f018a70 100644 --- a/gcc/java/constants.c +++ b/gcc/java/constants.c @@ -44,8 +44,11 @@ set_constant_entry (CPool *cpool, int index, int tag, jword value) if (cpool->data == NULL) { cpool->capacity = 100; - cpool->tags = GGC_CNEWVEC (uint8, cpool->capacity); - cpool->data = GGC_CNEWVEC (union cpool_entry, cpool->capacity); + cpool->tags = (uint8 *) ggc_alloc_cleared_atomic (sizeof (uint8) + * cpool->capacity); + cpool->data = ggc_alloc_cleared_vec_cpool_entry (sizeof + (union cpool_entry), + cpool->capacity); cpool->count = 1; } if (index >= cpool->capacity) @@ -333,7 +336,7 @@ cpool_for_class (tree klass) if (cpool == NULL) { - cpool = GGC_CNEW (struct CPool); + cpool = ggc_alloc_cleared_CPool (); TYPE_CPOOL (klass) = cpool; } return cpool; diff --git a/gcc/java/decl.c b/gcc/java/decl.c index f78d683..86ce719 100644 --- a/gcc/java/decl.c +++ b/gcc/java/decl.c @@ -1354,7 +1354,7 @@ static struct binding_level * make_binding_level (void) { /* NOSTRICT */ - return GGC_CNEW (struct binding_level); + return ggc_alloc_cleared_binding_level (); } void @@ -1696,7 +1696,7 @@ java_dup_lang_specific_decl (tree node) return; lang_decl_size = sizeof (struct lang_decl); - x = GGC_NEW (struct lang_decl); + x = ggc_alloc_lang_decl (lang_decl_size); memcpy (x, DECL_LANG_SPECIFIC (node), lang_decl_size); DECL_LANG_SPECIFIC (node) = x; } diff --git a/gcc/java/except.c b/gcc/java/except.c index 03bf4e6..f5a6407 100644 --- a/gcc/java/except.c +++ b/gcc/java/except.c @@ -381,7 +381,7 @@ prepare_eh_table_type (tree type) return NULL_TREE; if (TYPE_TO_RUNTIME_MAP (output_class) == NULL) - TYPE_TO_RUNTIME_MAP (output_class) = java_treetreehash_create (10, 1); + TYPE_TO_RUNTIME_MAP (output_class) = java_treetreehash_create (10); slot = java_treetreehash_new (TYPE_TO_RUNTIME_MAP (output_class), type); if (*slot != NULL) diff --git a/gcc/java/expr.c b/gcc/java/expr.c index 0abcb0d..042ed1b 100644 --- a/gcc/java/expr.c +++ b/gcc/java/expr.c @@ -463,7 +463,7 @@ add_type_assertion (tree klass, int assertion_code, tree op1, tree op2) if (*as_pp) return; - *as_pp = ggc_alloc (sizeof (type_assertion)); + *as_pp = ggc_alloc_type_assertion (); **(type_assertion **)as_pp = as; } diff --git a/gcc/java/java-tree.h b/gcc/java/java-tree.h index f48e421..282b580 100644 --- a/gcc/java/java-tree.h +++ b/gcc/java/java-tree.h @@ -750,11 +750,12 @@ union GTY((desc ("TREE_CODE (&%h.generic) == IDENTIFIER_NODE"), (DECL_LANG_SPECIFIC (NODE)->u.v.vtable) /* Create a DECL_LANG_SPECIFIC if necessary. */ -#define MAYBE_CREATE_VAR_LANG_DECL_SPECIFIC(T) \ - if (DECL_LANG_SPECIFIC (T) == NULL) \ - { \ - DECL_LANG_SPECIFIC ((T)) = GGC_CNEW (struct lang_decl); \ - DECL_LANG_SPECIFIC (T)->desc = LANG_DECL_VAR; \ +#define MAYBE_CREATE_VAR_LANG_DECL_SPECIFIC(T) \ + if (DECL_LANG_SPECIFIC (T) == NULL) \ + { \ + DECL_LANG_SPECIFIC ((T)) \ + = ggc_alloc_cleared_lang_decl (sizeof (struct lang_decl)); \ + DECL_LANG_SPECIFIC (T)->desc = LANG_DECL_VAR; \ } /* A ConstantExpression, after folding and name resolution. */ @@ -840,7 +841,7 @@ typedef struct GTY(()) type_assertion { extern tree java_treetreehash_find (htab_t, tree); extern tree * java_treetreehash_new (htab_t, tree); -extern htab_t java_treetreehash_create (size_t size, int ggc); +extern htab_t java_treetreehash_create (size_t size); /* DECL_LANG_SPECIFIC for VAR_DECL, PARM_DECL and sometimes FIELD_DECL (access methods on outer class fields) and final fields. */ @@ -861,7 +862,7 @@ struct GTY(()) lang_decl_var { enum lang_decl_desc {LANG_DECL_FUNC, LANG_DECL_VAR}; -struct GTY(()) lang_decl { +struct GTY((variable_size)) lang_decl { enum lang_decl_desc desc; union lang_decl_u { @@ -879,7 +880,7 @@ struct GTY(()) lang_decl { #define MAYBE_CREATE_TYPE_TYPE_LANG_SPECIFIC(T) \ if (TYPE_LANG_SPECIFIC ((T)) == NULL) \ TYPE_LANG_SPECIFIC ((T)) \ - = GGC_CNEW (struct lang_type); + = ggc_alloc_cleared_lang_type (sizeof (struct lang_type)); #define TYPE_DUMMY(T) (TYPE_LANG_SPECIFIC(T)->dummy_class) @@ -924,7 +925,10 @@ typedef struct GTY(()) method_entry_d { DEF_VEC_O(method_entry); DEF_VEC_ALLOC_O(method_entry,gc); -struct GTY(()) lang_type { +/* FIXME: the variable_size annotation here is needed because these types are + variable-sized in some other frontends. Due to gengtype deficiency the GTY + options of such types have to agree across all frontends. */ +struct GTY((variable_size)) lang_type { tree signature; struct JCF *jcf; struct CPool *cpool; diff --git a/gcc/java/jcf-parse.c b/gcc/java/jcf-parse.c index eef75aa..37d27b4 100644 --- a/gcc/java/jcf-parse.c +++ b/gcc/java/jcf-parse.c @@ -1906,8 +1906,7 @@ java_parse_file (int set_yydebug ATTRIBUTE_UNUSED) if (magic == 0xcafebabe) { CLASS_FILE_P (node) = 1; - current_jcf = GGC_NEW (JCF); - JCF_ZERO (current_jcf); + current_jcf = ggc_alloc_cleared_JCF (); current_jcf->read_state = finput; current_jcf->filbuf = jcf_filbuf_from_stdio; jcf_parse (current_jcf); @@ -1924,8 +1923,7 @@ java_parse_file (int set_yydebug ATTRIBUTE_UNUSED) } else if (magic == (JCF_u4)ZIPMAGIC) { - main_jcf = GGC_NEW (JCF); - JCF_ZERO (main_jcf); + main_jcf = ggc_alloc_cleared_JCF (); main_jcf->read_state = finput; main_jcf->filbuf = jcf_filbuf_from_stdio; linemap_add (line_table, LC_ENTER, false, filename, 0); @@ -2181,8 +2179,7 @@ process_zip_dir (FILE *finput) class_name = compute_class_name (zdir); file_name = XNEWVEC (char, zdir->filename_length+1); - jcf = GGC_NEW (JCF); - JCF_ZERO (jcf); + jcf = ggc_alloc_cleared_JCF (); strncpy (file_name, class_name_in_zip_dir, zdir->filename_length); file_name [zdir->filename_length] = '\0'; diff --git a/gcc/java/jcf-reader.c b/gcc/java/jcf-reader.c index 8970104..069b29b 100644 --- a/gcc/java/jcf-reader.c +++ b/gcc/java/jcf-reader.c @@ -331,8 +331,8 @@ jcf_parse_constant_pool (JCF* jcf) { int i, n; JPOOL_SIZE (jcf) = (JCF_FILL (jcf, 2), JCF_readu2 (jcf)); - jcf->cpool.tags = GGC_NEWVAR (uint8, JPOOL_SIZE (jcf)); - jcf->cpool.data = GGC_NEWVAR (union cpool_entry, sizeof (jword) * JPOOL_SIZE (jcf)); + jcf->cpool.tags = (uint8 *) ggc_alloc_atomic (JPOOL_SIZE (jcf)); + jcf->cpool.data = ggc_alloc_cpool_entry (sizeof (jword) * JPOOL_SIZE (jcf)); jcf->cpool.tags[0] = 0; #ifdef HANDLE_START_CONSTANT_POOL HANDLE_START_CONSTANT_POOL (JPOOL_SIZE (jcf)); diff --git a/gcc/java/jcf.h b/gcc/java/jcf.h index 7e8d18d..c7a789d 100644 --- a/gcc/java/jcf.h +++ b/gcc/java/jcf.h @@ -66,7 +66,7 @@ jcf_open_exact_case (const char* filename, int oflag); struct JCF; typedef int (*jcf_filbuf_t) (struct JCF*, int needed); -union GTY(()) cpool_entry { +union GTY((variable_size)) cpool_entry { jword GTY ((tag ("0"))) w; tree GTY ((tag ("1"))) t; }; |