Commit 98a52c2c by Alexandre Petit-Bianco Committed by Alexandre Petit-Bianco

Java: fixes for the PRs gcj/{271,272,275}.

2000-07-01  Alexandre Petit-Bianco  <apbianco@cygnus.com>

	* parse.y (parser_qualified_classname): Removed parameter
	`is_static'.
	(create_interface): Removed first passed parameter to
	parser_qualified_classname.
	(create_class): Likewise. Don't install alias on static
	innerclasses. Fixes gcj/275.

2000-07-01  Alexandre Petit-Bianco  <apbianco@cygnus.com>

	* parse.y (maybe_generate_pre_expand_clinit): Don't build a
	debugable statement with empty_stmt_node. Fixes gcj/272

2000-07-01  Alexandre Petit-Bianco  <apbianco@cygnus.com>

	* expr.c (build_instanceof): Layout type after it's loaded. Fixes
	gcj/271.

(Fix to the PR gcj/271, gcj/272 and gcj/275:
 http://sourceware.cygnus.com/ml/java-prs/2000-q3/msg00000.html
 http://sourceware.cygnus.com/ml/java-prs/2000-q3/msg00002.html
 http://sourceware.cygnus.com/ml/java-prs/2000-q3/msg00001.html )

From-SVN: r34894
parent 24c3c71a
...@@ -16,6 +16,25 @@ ...@@ -16,6 +16,25 @@
argument on the first pass for CNI as well as JNI. argument on the first pass for CNI as well as JNI.
(print_method_info): Set up method name on the first pass only. (print_method_info): Set up method name on the first pass only.
2000-07-01 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (parser_qualified_classname): Removed parameter
`is_static'.
(create_interface): Removed first passed parameter to
parser_qualified_classname.
(create_class): Likewise. Don't install alias on static
innerclasses. Fixes gcj/275.
2000-07-01 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (maybe_generate_pre_expand_clinit): Don't build a
debugable statement with empty_stmt_node. Fixes gcj/272
2000-07-01 Alexandre Petit-Bianco <apbianco@cygnus.com>
* expr.c (build_instanceof): Layout type after it's loaded. Fixes
gcj/271.
2000-06-29 Alexandre Petit-Bianco <apbianco@cygnus.com> 2000-06-29 Alexandre Petit-Bianco <apbianco@cygnus.com>
* jcf-write.c (push_long_const): Appropriately cast short negative * jcf-write.c (push_long_const): Appropriately cast short negative
......
...@@ -1073,6 +1073,7 @@ build_instanceof (value, type) ...@@ -1073,6 +1073,7 @@ build_instanceof (value, type)
if (CLASS_P (type) && ! CLASS_LOADED_P (type)) if (CLASS_P (type) && ! CLASS_LOADED_P (type))
{ {
load_class (type, 1); load_class (type, 1);
safe_layout_class (type);
if (! TYPE_SIZE (type) || TREE_CODE (TYPE_SIZE (type)) == ERROR_MARK) if (! TYPE_SIZE (type) || TREE_CODE (TYPE_SIZE (type)) == ERROR_MARK)
return error_mark_node; return error_mark_node;
} }
......
...@@ -156,7 +156,7 @@ static tree find_field PARAMS ((tree, tree)); ...@@ -156,7 +156,7 @@ static tree find_field PARAMS ((tree, tree));
static tree lookup_field_wrapper PARAMS ((tree, tree)); static tree lookup_field_wrapper PARAMS ((tree, tree));
static int duplicate_declaration_error_p PARAMS ((tree, tree, tree)); static int duplicate_declaration_error_p PARAMS ((tree, tree, tree));
static void register_fields PARAMS ((int, tree, tree)); static void register_fields PARAMS ((int, tree, tree));
static tree parser_qualified_classname PARAMS ((int, tree)); static tree parser_qualified_classname PARAMS ((tree));
static int parser_check_super PARAMS ((tree, tree, tree)); static int parser_check_super PARAMS ((tree, tree, tree));
static int parser_check_super_interface PARAMS ((tree, tree, tree)); static int parser_check_super_interface PARAMS ((tree, tree, tree));
static void check_modifiers_consistency PARAMS ((int)); static void check_modifiers_consistency PARAMS ((int));
...@@ -6347,7 +6347,7 @@ create_interface (flags, id, super) ...@@ -6347,7 +6347,7 @@ create_interface (flags, id, super)
tree id, super; tree id, super;
{ {
tree raw_name = EXPR_WFL_NODE (id); tree raw_name = EXPR_WFL_NODE (id);
tree q_name = parser_qualified_classname (flags & ACC_STATIC, raw_name); tree q_name = parser_qualified_classname (raw_name);
tree decl = IDENTIFIER_CLASS_VALUE (q_name); tree decl = IDENTIFIER_CLASS_VALUE (q_name);
EXPR_WFL_NODE (id) = q_name; /* Keep source location, even if refined. */ EXPR_WFL_NODE (id) = q_name; /* Keep source location, even if refined. */
...@@ -6482,7 +6482,7 @@ create_class (flags, id, super, interfaces) ...@@ -6482,7 +6482,7 @@ create_class (flags, id, super, interfaces)
tree class_id, decl; tree class_id, decl;
tree super_decl_type; tree super_decl_type;
class_id = parser_qualified_classname (0, raw_name); class_id = parser_qualified_classname (raw_name);
decl = IDENTIFIER_CLASS_VALUE (class_id); decl = IDENTIFIER_CLASS_VALUE (class_id);
EXPR_WFL_NODE (id) = class_id; EXPR_WFL_NODE (id) = class_id;
...@@ -6538,13 +6538,6 @@ create_class (flags, id, super, interfaces) ...@@ -6538,13 +6538,6 @@ create_class (flags, id, super, interfaces)
CLASS_COMPLETE_P (decl) = 1; CLASS_COMPLETE_P (decl) = 1;
add_superinterfaces (decl, interfaces); add_superinterfaces (decl, interfaces);
/* If the class is a top level inner class, install an alias. */
if (INNER_CLASS_DECL_P (decl) && CLASS_STATIC (decl))
{
tree alias = parser_qualified_classname (1, raw_name);
IDENTIFIER_GLOBAL_VALUE (alias) = decl;
}
/* Add the private this$<n> field, Replicate final locals still in /* Add the private this$<n> field, Replicate final locals still in
scope as private final fields mangled like val$<local_name>. scope as private final fields mangled like val$<local_name>.
This doesn't not occur for top level (static) inner classes. */ This doesn't not occur for top level (static) inner classes. */
...@@ -7484,14 +7477,12 @@ unresolved_type_p (wfl, returned) ...@@ -7484,14 +7477,12 @@ unresolved_type_p (wfl, returned)
qualification from the current package definition. */ qualification from the current package definition. */
static tree static tree
parser_qualified_classname (is_static, name) parser_qualified_classname (name)
int is_static;
tree name; tree name;
{ {
tree nested_class_name; tree nested_class_name;
if (!is_static if ((nested_class_name = maybe_make_nested_class_name (name)))
&& (nested_class_name = maybe_make_nested_class_name (name)))
return nested_class_name; return nested_class_name;
if (ctxp->package) if (ctxp->package)
...@@ -10159,7 +10150,7 @@ maybe_generate_pre_expand_clinit (class_type) ...@@ -10159,7 +10150,7 @@ maybe_generate_pre_expand_clinit (class_type)
/* We build the assignment expression that will initialize the /* We build the assignment expression that will initialize the
field to its value. There are strict rules on static field to its value. There are strict rules on static
initializers (8.5). FIXME */ initializers (8.5). FIXME */
if (TREE_CODE (stmt) != BLOCK) if (TREE_CODE (stmt) != BLOCK && stmt != empty_stmt_node)
stmt = build_debugable_stmt (EXPR_WFL_LINECOL (stmt), stmt); stmt = build_debugable_stmt (EXPR_WFL_LINECOL (stmt), stmt);
java_method_add_stmt (mdecl, stmt); java_method_add_stmt (mdecl, stmt);
} }
......
...@@ -81,7 +81,7 @@ static tree find_field PARAMS ((tree, tree)); ...@@ -81,7 +81,7 @@ static tree find_field PARAMS ((tree, tree));
static tree lookup_field_wrapper PARAMS ((tree, tree)); static tree lookup_field_wrapper PARAMS ((tree, tree));
static int duplicate_declaration_error_p PARAMS ((tree, tree, tree)); static int duplicate_declaration_error_p PARAMS ((tree, tree, tree));
static void register_fields PARAMS ((int, tree, tree)); static void register_fields PARAMS ((int, tree, tree));
static tree parser_qualified_classname PARAMS ((int, tree)); static tree parser_qualified_classname PARAMS ((tree));
static int parser_check_super PARAMS ((tree, tree, tree)); static int parser_check_super PARAMS ((tree, tree, tree));
static int parser_check_super_interface PARAMS ((tree, tree, tree)); static int parser_check_super_interface PARAMS ((tree, tree, tree));
static void check_modifiers_consistency PARAMS ((int)); static void check_modifiers_consistency PARAMS ((int));
...@@ -3649,7 +3649,7 @@ create_interface (flags, id, super) ...@@ -3649,7 +3649,7 @@ create_interface (flags, id, super)
tree id, super; tree id, super;
{ {
tree raw_name = EXPR_WFL_NODE (id); tree raw_name = EXPR_WFL_NODE (id);
tree q_name = parser_qualified_classname (flags & ACC_STATIC, raw_name); tree q_name = parser_qualified_classname (raw_name);
tree decl = IDENTIFIER_CLASS_VALUE (q_name); tree decl = IDENTIFIER_CLASS_VALUE (q_name);
EXPR_WFL_NODE (id) = q_name; /* Keep source location, even if refined. */ EXPR_WFL_NODE (id) = q_name; /* Keep source location, even if refined. */
...@@ -3784,7 +3784,7 @@ create_class (flags, id, super, interfaces) ...@@ -3784,7 +3784,7 @@ create_class (flags, id, super, interfaces)
tree class_id, decl; tree class_id, decl;
tree super_decl_type; tree super_decl_type;
class_id = parser_qualified_classname (0, raw_name); class_id = parser_qualified_classname (raw_name);
decl = IDENTIFIER_CLASS_VALUE (class_id); decl = IDENTIFIER_CLASS_VALUE (class_id);
EXPR_WFL_NODE (id) = class_id; EXPR_WFL_NODE (id) = class_id;
...@@ -3840,13 +3840,6 @@ create_class (flags, id, super, interfaces) ...@@ -3840,13 +3840,6 @@ create_class (flags, id, super, interfaces)
CLASS_COMPLETE_P (decl) = 1; CLASS_COMPLETE_P (decl) = 1;
add_superinterfaces (decl, interfaces); add_superinterfaces (decl, interfaces);
/* If the class is a top level inner class, install an alias. */
if (INNER_CLASS_DECL_P (decl) && CLASS_STATIC (decl))
{
tree alias = parser_qualified_classname (1, raw_name);
IDENTIFIER_GLOBAL_VALUE (alias) = decl;
}
/* Add the private this$<n> field, Replicate final locals still in /* Add the private this$<n> field, Replicate final locals still in
scope as private final fields mangled like val$<local_name>. scope as private final fields mangled like val$<local_name>.
This doesn't not occur for top level (static) inner classes. */ This doesn't not occur for top level (static) inner classes. */
...@@ -4786,14 +4779,12 @@ unresolved_type_p (wfl, returned) ...@@ -4786,14 +4779,12 @@ unresolved_type_p (wfl, returned)
qualification from the current package definition. */ qualification from the current package definition. */
static tree static tree
parser_qualified_classname (is_static, name) parser_qualified_classname (name)
int is_static;
tree name; tree name;
{ {
tree nested_class_name; tree nested_class_name;
if (!is_static if ((nested_class_name = maybe_make_nested_class_name (name)))
&& (nested_class_name = maybe_make_nested_class_name (name)))
return nested_class_name; return nested_class_name;
if (ctxp->package) if (ctxp->package)
...@@ -7461,7 +7452,7 @@ maybe_generate_pre_expand_clinit (class_type) ...@@ -7461,7 +7452,7 @@ maybe_generate_pre_expand_clinit (class_type)
/* We build the assignment expression that will initialize the /* We build the assignment expression that will initialize the
field to its value. There are strict rules on static field to its value. There are strict rules on static
initializers (8.5). FIXME */ initializers (8.5). FIXME */
if (TREE_CODE (stmt) != BLOCK) if (TREE_CODE (stmt) != BLOCK && stmt != empty_stmt_node)
stmt = build_debugable_stmt (EXPR_WFL_LINECOL (stmt), stmt); stmt = build_debugable_stmt (EXPR_WFL_LINECOL (stmt), stmt);
java_method_add_stmt (mdecl, stmt); java_method_add_stmt (mdecl, stmt);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment