diff options
Diffstat (limited to 'gcc/java')
-rw-r--r-- | gcc/java/ChangeLog | 72 | ||||
-rw-r--r-- | gcc/java/Make-lang.in | 4 | ||||
-rw-r--r-- | gcc/java/boehm.c | 49 | ||||
-rw-r--r-- | gcc/java/class.c | 50 | ||||
-rw-r--r-- | gcc/java/constants.c | 9 | ||||
-rw-r--r-- | gcc/java/decl.c | 16 | ||||
-rw-r--r-- | gcc/java/except.c | 34 | ||||
-rw-r--r-- | gcc/java/expr.c | 2 | ||||
-rw-r--r-- | gcc/java/gcj.texi | 4 | ||||
-rw-r--r-- | gcc/java/java-tree.h | 24 | ||||
-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 | ||||
-rw-r--r-- | gcc/java/jvspec.c | 8 | ||||
-rw-r--r-- | gcc/java/lang.c | 1 |
15 files changed, 179 insertions, 109 deletions
diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index f001cfb50e7..e7589638f54 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,75 @@ +2010-06-28 Nathan Froyd <froydnj@codesourcery.com> + + * java-tree.h (struct lang_type) [catch_classes]: Change type to a + VEC. + * except.c (prepare_eh_table_type): Call CONSTRUCTOR_APPEND_ELT + instead of tree_cons. + * class.c (make_class): Add dummy entry to TYPE_CATCH_CLASSES. + (emit_catch_table): Adjust for new type of TYPE_CATCH_CLASSES. + +2010-06-28 Steven Bosscher <steven@gcc.gnu.org> + + * lang.c: Do not include except.h + * except.c: Likewise. + (doing_eh): New, moved from except.c (in gcc/) but removed the + do_warning flag. + (maybe_start_try): Update doing_eh call. + * Make-lang.in: Update dependencies. + +2010-06-23 Anatoly Sokolov <aesok@post.ru> + + * decl.c (java_init_decl_processing): Use double_int_to_tree instead + of build_int_cst_wide. + * boehm.c (set_bit): Remove. + (mark_reference_fields): Use double_int type for 'mask' argument. + Use double_int_setbit instead of set_bit. + (get_boehm_type_descriptor): Use double_int_setbit instead of + set_bit. Use double_int_to_tree instead of build_int_cst_wide. + +2010-06-10 Gerald Pfeifer <gerald@pfeifer.com> + + * gcj.texi: Move to GFDL version 1.3. Fix copyright years. + +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 + diagnostics. + 2010-05-30 Steven Bosscher <steven@gcc.gnu.org> * except.c: Include tm.h. diff --git a/gcc/java/Make-lang.in b/gcc/java/Make-lang.in index 26a81bab79a..5e240ed0743 100644 --- a/gcc/java/Make-lang.in +++ b/gcc/java/Make-lang.in @@ -285,7 +285,7 @@ java/decl.o: java/decl.c $(CONFIG_H) $(JAVA_TREE_H) java/jcf.h \ libfuncs.h java/java-except.h $(GGC_H) $(REAL_H) gt-java-decl.h \ $(TARGET_H) $(CGRAPH_H) langhooks.h java/except.o: java/except.c $(CONFIG_H) $(JAVA_TREE_H) java/jcf.h $(REAL_H) \ - java/javaop.h java/java-opcodes.h except.h java/java-except.h \ + java/javaop.h java/java-opcodes.h java/java-except.h \ toplev.h $(SYSTEM_H) coretypes.h java/expr.o: java/expr.c $(CONFIG_H) $(JAVA_TREE_H) java/jcf.h $(REAL_H) \ java/javaop.h java/java-opcodes.h \ @@ -302,7 +302,7 @@ java/jvgenmain.o: java/jvgenmain.c $(CONFIG_H) $(JAVA_TREE_H) $(SYSTEM_H) \ coretypes.h $(TM_H) intl.h java/lang.o: java/lang.c $(CONFIG_H) $(JAVA_TREE_H) java/jcf.h input.h \ toplev.h $(SYSTEM_H) coretypes.h $(TM_H) $(DIAGNOSTIC_H) \ - langhooks.h $(LANGHOOKS_DEF_H) gt-java-lang.h opts.h options.h $(EXCEPT_H) + langhooks.h $(LANGHOOKS_DEF_H) gt-java-lang.h opts.h options.h java/mangle.o: java/mangle.c $(CONFIG_H) java/jcf.h $(JAVA_TREE_H) $(SYSTEM_H) \ coretypes.h $(TM_H) toplev.h $(GGC_H) gt-java-mangle.h $(LANGHOOKS_DEF_H) java/mangle_name.o: java/mangle_name.c $(CONFIG_H) java/jcf.h $(JAVA_TREE_H) \ diff --git a/gcc/java/boehm.c b/gcc/java/boehm.c index 04af74b5948..35ba68d0fb3 100644 --- a/gcc/java/boehm.c +++ b/gcc/java/boehm.c @@ -27,17 +27,15 @@ The Free Software Foundation is independent of Sun Microsystems, Inc. */ #include "system.h" #include "coretypes.h" +#include "double-int.h" #include "tm.h" #include "tree.h" #include "java-tree.h" #include "parse.h" #include "toplev.h" -static void mark_reference_fields (tree, unsigned HOST_WIDE_INT *, - unsigned HOST_WIDE_INT *, unsigned int, +static void mark_reference_fields (tree, double_int *, unsigned int, int *, int *, int *, HOST_WIDE_INT *); -static void set_bit (unsigned HOST_WIDE_INT *, unsigned HOST_WIDE_INT *, - unsigned int); /* A procedure-based object descriptor. We know that our `kind' is 0, and `env' is likewise 0, so we have a simple @@ -47,30 +45,10 @@ static void set_bit (unsigned HOST_WIDE_INT *, unsigned HOST_WIDE_INT *, Here DS_PROC == 2. */ #define PROCEDURE_OBJECT_DESCRIPTOR 2 -/* Treat two HOST_WIDE_INT's as a contiguous bitmap, with bit 0 being - the least significant. This function sets bit N in the bitmap. */ -static void -set_bit (unsigned HOST_WIDE_INT *low, unsigned HOST_WIDE_INT *high, - unsigned int n) -{ - unsigned HOST_WIDE_INT *which; - - if (n >= HOST_BITS_PER_WIDE_INT) - { - n -= HOST_BITS_PER_WIDE_INT; - which = high; - } - else - which = low; - - *which |= (unsigned HOST_WIDE_INT) 1 << n; -} - /* Recursively mark reference fields. */ static void mark_reference_fields (tree field, - unsigned HOST_WIDE_INT *low, - unsigned HOST_WIDE_INT *high, + double_int *mask, unsigned int ubit, int *pointer_after_end, int *all_bits_set, @@ -81,7 +59,7 @@ mark_reference_fields (tree field, if (DECL_NAME (field) == NULL_TREE) { mark_reference_fields (TYPE_FIELDS (TREE_TYPE (field)), - low, high, ubit, + mask, ubit, pointer_after_end, all_bits_set, last_set_index, last_view_index); field = TREE_CHAIN (field); @@ -130,7 +108,7 @@ mark_reference_fields (tree field, bits for all words in the record. This is conservative, but the size_words != 1 case is impossible in regular java code. */ for (i = 0; i < size_words; ++i) - set_bit (low, high, ubit - count - i - 1); + *mask = double_int_setbit (*mask, ubit - count - i - 1); if (count >= ubit - 2) *pointer_after_end = 1; @@ -159,9 +137,11 @@ get_boehm_type_descriptor (tree type) int last_set_index = 0; HOST_WIDE_INT last_view_index = -1; int pointer_after_end = 0; - unsigned HOST_WIDE_INT low = 0, high = 0; + double_int mask; tree field, value, value_type; + mask = double_int_zero; + /* If the GC wasn't requested, just use a null pointer. */ if (! flag_use_boehm_gc) return null_pointer_node; @@ -192,7 +172,7 @@ get_boehm_type_descriptor (tree type) goto procedure_object_descriptor; field = TYPE_FIELDS (type); - mark_reference_fields (field, &low, &high, ubit, + mark_reference_fields (field, &mask, ubit, &pointer_after_end, &all_bits_set, &last_set_index, &last_view_index); @@ -215,23 +195,22 @@ get_boehm_type_descriptor (tree type) that we don't have to emit reflection data for run time marking. */ count = 0; - low = 0; - high = 0; + mask = double_int_zero; ++last_set_index; while (last_set_index) { if ((last_set_index & 1)) - set_bit (&low, &high, log2_size + count); + mask = double_int_setbit (mask, log2_size + count); last_set_index >>= 1; ++count; } - value = build_int_cst_wide (value_type, low, high); + value = double_int_to_tree (value_type, mask); } else if (! pointer_after_end) { /* Bottom two bits for bitmap mark type are 01. */ - set_bit (&low, &high, 0); - value = build_int_cst_wide (value_type, low, high); + mask = double_int_setbit (mask, 0); + value = double_int_to_tree (value_type, mask); } else { diff --git a/gcc/java/class.c b/gcc/java/class.c index f346ad420f7..7d90a032a81 100644 --- a/gcc/java/class.c +++ b/gcc/java/class.c @@ -382,6 +382,12 @@ make_class (void) loading works. */ TYPE_BINFO (type) = make_tree_binfo (0); MAYBE_CREATE_TYPE_TYPE_LANG_SPECIFIC (type); + TYPE_CATCH_CLASSES (type) = NULL; + /* Push a dummy entry; we can't call make_catch_class_record here + because other infrastructure may not be set up yet. We'll come + back and fill it in later once said infrastructure is + initialized. */ + CONSTRUCTOR_APPEND_ELT (TYPE_CATCH_CLASSES (type), NULL_TREE, NULL_TREE); return type; } @@ -763,13 +769,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) @@ -2961,18 +2966,17 @@ tree emit_catch_table (tree this_class) { tree table, table_size, array_type; - TYPE_CATCH_CLASSES (this_class) = - tree_cons (NULL, - make_catch_class_record (null_pointer_node, null_pointer_node), - TYPE_CATCH_CLASSES (this_class)); - TYPE_CATCH_CLASSES (this_class) = nreverse (TYPE_CATCH_CLASSES (this_class)); - TYPE_CATCH_CLASSES (this_class) = - tree_cons (NULL, - make_catch_class_record (null_pointer_node, null_pointer_node), - TYPE_CATCH_CLASSES (this_class)); - table_size = build_index_type - (build_int_cst (NULL_TREE, - list_length (TYPE_CATCH_CLASSES (this_class)))); + int n_catch_classes; + constructor_elt *e; + /* Fill in the dummy entry that make_class created. */ + e = VEC_index (constructor_elt, TYPE_CATCH_CLASSES (this_class), 0); + e->value = make_catch_class_record (null_pointer_node, null_pointer_node); + CONSTRUCTOR_APPEND_ELT (TYPE_CATCH_CLASSES (this_class), NULL_TREE, + make_catch_class_record (null_pointer_node, + null_pointer_node)); + n_catch_classes = VEC_length (constructor_elt, + TYPE_CATCH_CLASSES (this_class)); + table_size = build_index_type (build_int_cst (NULL_TREE, n_catch_classes)); array_type = build_array_type (TREE_TYPE (TREE_TYPE (TYPE_CTABLE_DECL (this_class))), table_size); @@ -2980,7 +2984,7 @@ emit_catch_table (tree this_class) build_decl (input_location, VAR_DECL, DECL_NAME (TYPE_CTABLE_DECL (this_class)), array_type); DECL_INITIAL (table) = - build_constructor_from_list (array_type, TYPE_CATCH_CLASSES (this_class)); + build_constructor (array_type, TYPE_CATCH_CLASSES (this_class)); TREE_STATIC (table) = 1; TREE_READONLY (table) = 1; DECL_IGNORED_P (table) = 1; @@ -3144,7 +3148,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 +3158,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 ca5eb77ce30..f018a707911 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 f78d68359eb..d3e671067a6 100644 --- a/gcc/java/decl.c +++ b/gcc/java/decl.c @@ -619,15 +619,9 @@ java_init_decl_processing (void) /* A few values used for range checking in the lexer. */ decimal_int_max = build_int_cstu (unsigned_int_type_node, 0x80000000); -#if HOST_BITS_PER_WIDE_INT == 64 - decimal_long_max = build_int_cstu (unsigned_long_type_node, - 0x8000000000000000LL); -#elif HOST_BITS_PER_WIDE_INT == 32 - decimal_long_max = build_int_cst_wide (unsigned_long_type_node, - 0, 0x80000000); -#else - #error "unsupported size" -#endif + decimal_long_max + = double_int_to_tree (unsigned_long_type_node, + double_int_setbit (double_int_zero, 64)); size_zero_node = size_int (0); size_one_node = size_int (1); @@ -1354,7 +1348,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 +1690,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 03bf4e6853b..0033da30653 100644 --- a/gcc/java/except.c +++ b/gcc/java/except.c @@ -31,7 +31,6 @@ The Free Software Foundation is independent of Sun Microsystems, Inc. */ #include "javaop.h" #include "java-opcodes.h" #include "jcf.h" -#include "except.h" /* for doing_eh. */ #include "java-except.h" #include "toplev.h" #include "tree-iterator.h" @@ -381,7 +380,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) @@ -420,9 +419,9 @@ prepare_eh_table_type (tree type) layout_decl (decl, 0); pushdecl (decl); exp = build1 (ADDR_EXPR, build_pointer_type (utf8const_ptr_type), decl); - TYPE_CATCH_CLASSES (output_class) = - tree_cons (NULL, make_catch_class_record (exp, utf8_ref), - TYPE_CATCH_CLASSES (output_class)); + CONSTRUCTOR_APPEND_ELT (TYPE_CATCH_CLASSES (output_class), + NULL_TREE, + make_catch_class_record (exp, utf8_ref)); } exp = convert (ptr_type_node, exp); @@ -565,6 +564,29 @@ check_start_handlers (struct eh_range *range, int pc) } +/* Routine to see if exception handling is turned on. + DO_WARN is nonzero if we want to inform the user that exception + handling is turned off. + + This is used to ensure that -fexceptions has been specified if the + compiler tries to use any exception-specific functions. */ + +static inline int +doing_eh (void) +{ + if (! flag_exceptions) + { + static int warned = 0; + if (! warned) + { + error ("exception handling disabled, use -fexceptions to enable"); + warned = 1; + } + return 0; + } + return 1; +} + static struct eh_range *current_range; /* Emit any start-of-try-range starting at start_pc and ending after @@ -574,7 +596,7 @@ void maybe_start_try (int start_pc, int end_pc) { struct eh_range *range; - if (! doing_eh (1)) + if (! doing_eh ()) return; range = find_handler (start_pc); diff --git a/gcc/java/expr.c b/gcc/java/expr.c index 0abcb0d1de7..042ed1b7297 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/gcj.texi b/gcc/java/gcj.texi index 46b0899e800..01acf4344cb 100644 --- a/gcc/java/gcj.texi +++ b/gcc/java/gcj.texi @@ -17,14 +17,14 @@ @c the word ``Java'. @c When this manual is copyrighted. -@set copyrights-gcj 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 +@set copyrights-gcj 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010 @copying @c man begin COPYRIGHT Copyright @copyright{} @value{copyrights-gcj} Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.2 or +under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, the Front-Cover Texts being (a) (see below), and with the Back-Cover Texts being (b) (see below). diff --git a/gcc/java/java-tree.h b/gcc/java/java-tree.h index f48e4215925..ccaa0e34eb7 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; @@ -948,7 +952,7 @@ struct GTY(()) lang_type { tree ctable_decl; /* The table of classes for the runtime type matcher. */ - tree catch_classes; + VEC(constructor_elt,gc) *catch_classes; htab_t GTY ((param_is (struct treetreehash_entry))) type_to_runtime_map; /* The mapping of classes to exception region diff --git a/gcc/java/jcf-parse.c b/gcc/java/jcf-parse.c index eef75aa2516..37d27b41b43 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 8970104708b..069b29bf277 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 7e8d18d9b3f..c7a789d6f2b 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; }; diff --git a/gcc/java/jvspec.c b/gcc/java/jvspec.c index e197e2854b0..1987138a687 100644 --- a/gcc/java/jvspec.c +++ b/gcc/java/jvspec.c @@ -400,13 +400,13 @@ lang_specific_driver (int *in_argc, const char *const **in_argv, } if (quote) - fatal_error ("argument to '%s' missing\n", quote); + fatal_error ("argument to %qs missing", quote); if (saw_D && ! main_class_name) - fatal_error ("can't specify '-D' without '--main'\n"); + fatal_error ("can't specify %<-D%> without %<--main%>"); if (main_class_name && ! verify_class_name (main_class_name)) - fatal_error ("'%s' is not a valid class name", main_class_name); + fatal_error ("%qs is not a valid class name", main_class_name); num_args = argc + added; if (saw_resource) @@ -582,7 +582,7 @@ lang_specific_driver (int *in_argc, const char *const **in_argv, if (strncmp (argv[i], "-fmain=", 7) == 0) { if (! will_link) - fatal_error ("cannot specify 'main' class when not linking"); + fatal_error ("cannot specify %<main%> class when not linking"); --j; continue; } diff --git a/gcc/java/lang.c b/gcc/java/lang.c index 351952de1a6..6c31947c6a4 100644 --- a/gcc/java/lang.c +++ b/gcc/java/lang.c @@ -43,7 +43,6 @@ The Free Software Foundation is independent of Sun Microsystems, Inc. */ #include "tree-dump.h" #include "opts.h" #include "options.h" -#include "except.h" /* For USING_SJLJ_EXCEPTIONS. */ static bool java_init (void); static void java_finish (void); |