expr.c (pop_type_0): Return `Object' if trying to merge two interface types.

* expr.c (pop_type_0): Return `Object' if trying to merge two
	interface types.
	* verify.c (merge_types): Don't return `TYPE_UNKNOWN' for
	interface types; `Object' is always a valid supertype.

From-SVN: r36378
This commit is contained in:
Tom Tromey 2000-09-12 22:31:00 +00:00 committed by Tom Tromey
parent d19cbcb5e3
commit 86e4b1e4fa
3 changed files with 13 additions and 5 deletions

View File

@ -1,3 +1,10 @@
2000-09-12 Tom Tromey <tromey@cygnus.com>
* expr.c (pop_type_0): Return `Object' if trying to merge two
interface types.
* verify.c (merge_types): Don't return `TYPE_UNKNOWN' for
interface types; `Object' is always a valid supertype.
2000-09-12 Tom Tromey <tromey@cygnus.com>
Fix for PR gcj/33:

View File

@ -320,9 +320,8 @@ pop_type_0 (type)
/* This is a kludge, but matches what Sun's verifier does.
It can be tricked, but is safe as long as type errors
(i.e. interface method calls) are caught at run-time. */
else if (CLASS_INTERFACE (TYPE_NAME (TREE_TYPE (type)))
&& t == object_ptr_type_node)
return t;
/* FIXME: this is worse than a kludge, probably. */
return object_ptr_type_node;
}
return NULL_TREE;
}

View File

@ -173,6 +173,8 @@ merge_types (type1, type2)
if (CLASS_INTERFACE (TYPE_NAME (tt1)))
{
/* FIXME: should see if two interfaces have a common
superinterface. */
if (CLASS_INTERFACE (TYPE_NAME (tt2)))
{
/* This is a kludge, but matches what Sun's verifier does.
@ -185,7 +187,7 @@ merge_types (type1, type2)
if (can_widen_reference_to (tt2, tt1))
return type1;
else
return TYPE_UNKNOWN;
return object_ptr_type_node;
}
}
else if (CLASS_INTERFACE (TYPE_NAME (tt2)))
@ -193,7 +195,7 @@ merge_types (type1, type2)
if (can_widen_reference_to (tt1, tt2))
return type2;
else
return TYPE_UNKNOWN;
return object_ptr_type_node;
}
type1 = tt1;