lang.c (flag_hash_synchronization): New global.

* lang.c (flag_hash_synchronization): New global.
	(lang_f_options): Added `hash-synchronization'.
	* lang-options.h: Mention -fhash-synchronization.
	* java-tree.h (flag_hash_synchronization): Declare.
	* expr.c (java_lang_expand_expr): Only push `sync_info' value when
	hash table synchronization is disabled.
	* decl.c (init_decl_processing): Only push `sync_info' value when
	hash table synchronization is disabled.
	* class.c (make_class_data): Only push `sync_info' field when hash
	table synchronization is disabled.  Removed dead code.

From-SVN: r32593
This commit is contained in:
Tom Tromey 2000-03-16 18:32:45 +00:00 committed by Tom Tromey
parent 3c0fca1282
commit 64aa33dd9c
7 changed files with 39 additions and 11 deletions

View File

@ -1,3 +1,16 @@
2000-03-16 Tom Tromey <tromey@cygnus.com>
* lang.c (flag_hash_synchronization): New global.
(lang_f_options): Added `hash-synchronization'.
* lang-options.h: Mention -fhash-synchronization.
* java-tree.h (flag_hash_synchronization): Declare.
* expr.c (java_lang_expand_expr): Only push `sync_info' value when
hash table synchronization is disabled.
* decl.c (init_decl_processing): Only push `sync_info' value when
hash table synchronization is disabled.
* class.c (make_class_data): Only push `sync_info' field when hash
table synchronization is disabled. Removed dead code.
2000-03-16 Tom Tromey <tromey@cygnus.com>
* lang.c (lang_decode_option): Enable -Wunused when -Wall given.

View File

@ -1373,7 +1373,8 @@ make_class_data (type)
START_RECORD_CONSTRUCTOR (temp, object_type_node);
PUSH_FIELD_VALUE (temp, "vtable",
build1 (ADDR_EXPR, dtable_ptr_type, class_dtable_decl));
PUSH_FIELD_VALUE (temp, "sync_info", null_pointer_node);
if (! flag_hash_synchronization)
PUSH_FIELD_VALUE (temp, "sync_info", null_pointer_node);
FINISH_RECORD_CONSTRUCTOR (temp);
START_RECORD_CONSTRUCTOR (cons, class_type_node);
PUSH_SUPER_VALUE (cons, temp);

View File

@ -349,7 +349,8 @@ tree double_zero_node;
tree empty_stmt_node;
/* Nodes for boolean constants TRUE and FALSE. */
tree boolean_true_node, boolean_false_node;
tree boolean_true_node;
tree boolean_false_node;
tree TYPE_identifier_node;
tree init_identifier_node;
@ -413,7 +414,8 @@ push_promoted_type (name, actual_type)
}
/* Nodes for integer constants. */
tree integer_two_node, integer_four_node;
tree integer_two_node;
tree integer_four_node;
tree integer_negative_one_node;
/* Return a definition for a builtin function named NAME and whose data type
@ -629,8 +631,9 @@ init_decl_processing ()
/* This isn't exactly true, but it is what we have in the source.
There is an unresolved issue here, which is whether the vtable
should be marked by the GC. */
PUSH_FIELD (object_type_node, field, "sync_info",
build_pointer_type (object_type_node));
if (! flag_hash_synchronization)
PUSH_FIELD (object_type_node, field, "sync_info",
build_pointer_type (object_type_node));
for (t = TYPE_FIELDS (object_type_node); t != NULL_TREE; t = TREE_CHAIN (t))
FIELD_PRIVATE (t) = 1;
FINISH_RECORD (object_type_node);
@ -1082,6 +1085,7 @@ pushdecl (x)
return x;
}
void
pushdecl_force_head (x)
tree x;
@ -1125,8 +1129,7 @@ getdecls ()
/* Create a new `struct binding_level'. */
static
struct binding_level *
static struct binding_level *
make_binding_level ()
{
/* NOSTRICT */

View File

@ -79,7 +79,7 @@ static tree build_java_throw_out_of_bounds_exception PARAMS ((tree));
static tree build_java_check_indexed_type PARAMS ((tree, tree));
static tree java_array_data_offset PARAMS ((tree));
static tree case_identity PARAMS ((tree, tree));
static tree operand_type[59];
extern struct obstack permanent_obstack;
@ -1996,7 +1996,8 @@ java_lang_expand_expr (exp, target, tmode, modifier)
PUSH_FIELD_VALUE (temp, "vtable",
null_pointer_node /* FIXME */
);
PUSH_FIELD_VALUE (temp, "sync_info", null_pointer_node);
if (! flag_hash_synchronization)
PUSH_FIELD_VALUE (temp, "sync_info", null_pointer_node);
FINISH_RECORD_CONSTRUCTOR (temp);
START_RECORD_CONSTRUCTOR (value, array_type);
PUSH_SUPER_VALUE (value, temp);

View File

@ -155,6 +155,10 @@ extern int flag_use_divide_subroutine;
/* When non zero, generate code for the Boehm GC. */
extern int flag_use_boehm_gc;
/* When non zero, assume the runtime uses a hash table to map an
object to its synchronization structure. */
extern int flag_hash_synchronization;
/* The Java .class file that provides main_class; the main input file. */
extern struct JCF *current_jcf;

View File

@ -1,5 +1,5 @@
/* Switch definitions for the GNU compiler for the Java(TM) language.
Copyright (C) 1998, 1999 Free Software Foundation, Inc.
Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
This file is part of GNU CC.
@ -34,6 +34,7 @@ DEFINE_LANG_NAME ("Java")
{ "-femit-class-file", "" },
{ "-femit-class-files", "Dump class files to <name>.class" },
{ "-fuse-boehm-gc", "Generate code for Boehm GC" },
{ "-fhash-synchronization", "Don't put synchronization structure in each object" },
#if ! USE_CPPLIB
{ "-MD", "Print dependencies to FILE.d" },
{ "-MMD", "Print dependencies to FILE.d" },

View File

@ -113,6 +113,10 @@ int flag_use_divide_subroutine = 1;
/* When non zero, generate code for the Boehm GC. */
int flag_use_boehm_gc = 0;
/* When non zero, assume the runtime uses a hash table to map an
object to its synchronization structure. */
int flag_hash_synchronization;
/* From gcc/flags.h, and indicates if exceptions are turned on or not. */
extern int flag_new_exceptions;
@ -130,7 +134,8 @@ lang_f_options[] =
{"emit-class-file", &flag_emit_class_files, 1},
{"emit-class-files", &flag_emit_class_files, 1},
{"use-divide-subroutine", &flag_use_divide_subroutine, 1},
{"use-boehm-gc", &flag_use_boehm_gc, 1}
{"use-boehm-gc", &flag_use_boehm_gc, 1},
{"hash-synchronization", &flag_hash_synchronization, 1}
};
JCF *current_jcf;