Commit 86e4b1e4 by Tom Tromey Committed by Tom Tromey

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
parent d19cbcb5
2000-09-12 Tom Tromey <tromey@cygnus.com> 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: Fix for PR gcj/33:
* jv-scan.c (help): Document --encoding. * jv-scan.c (help): Document --encoding.
(options): Added `encoding' entry. (options): Added `encoding' entry.
......
...@@ -320,9 +320,8 @@ pop_type_0 (type) ...@@ -320,9 +320,8 @@ pop_type_0 (type)
/* This is a kludge, but matches what Sun's verifier does. /* This is a kludge, but matches what Sun's verifier does.
It can be tricked, but is safe as long as type errors It can be tricked, but is safe as long as type errors
(i.e. interface method calls) are caught at run-time. */ (i.e. interface method calls) are caught at run-time. */
else if (CLASS_INTERFACE (TYPE_NAME (TREE_TYPE (type))) /* FIXME: this is worse than a kludge, probably. */
&& t == object_ptr_type_node) return object_ptr_type_node;
return t;
} }
return NULL_TREE; return NULL_TREE;
} }
......
...@@ -173,6 +173,8 @@ merge_types (type1, type2) ...@@ -173,6 +173,8 @@ merge_types (type1, type2)
if (CLASS_INTERFACE (TYPE_NAME (tt1))) if (CLASS_INTERFACE (TYPE_NAME (tt1)))
{ {
/* FIXME: should see if two interfaces have a common
superinterface. */
if (CLASS_INTERFACE (TYPE_NAME (tt2))) if (CLASS_INTERFACE (TYPE_NAME (tt2)))
{ {
/* This is a kludge, but matches what Sun's verifier does. /* This is a kludge, but matches what Sun's verifier does.
...@@ -185,7 +187,7 @@ merge_types (type1, type2) ...@@ -185,7 +187,7 @@ merge_types (type1, type2)
if (can_widen_reference_to (tt2, tt1)) if (can_widen_reference_to (tt2, tt1))
return type1; return type1;
else else
return TYPE_UNKNOWN; return object_ptr_type_node;
} }
} }
else if (CLASS_INTERFACE (TYPE_NAME (tt2))) else if (CLASS_INTERFACE (TYPE_NAME (tt2)))
...@@ -193,7 +195,7 @@ merge_types (type1, type2) ...@@ -193,7 +195,7 @@ merge_types (type1, type2)
if (can_widen_reference_to (tt1, tt2)) if (can_widen_reference_to (tt1, tt2))
return type2; return type2;
else else
return TYPE_UNKNOWN; return object_ptr_type_node;
} }
type1 = tt1; type1 = tt1;
......
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