From 598fc2ad32b88d280beff659ded19eb41b145f0c Mon Sep 17 00:00:00 2001
From: tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Wed, 13 Feb 2002 17:12:27 +0000
Subject: [PATCH] 2002-02-13  Todd Stock  <toddastock@yahoo.com>

	Fix for PR libgcj/5671:
	* verify.cc (state::merge): Handle case where we're merging
	against an interface.


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@49735 138bc75d-0d04-0410-961f-82ee72b054a4
---
 libjava/ChangeLog | 6 ++++++
 libjava/verify.cc | 9 +++++++--
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 99a6b9d3f84d..b92b98eed531 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,9 @@
+2002-02-13  Todd Stock  <toddastock@yahoo.com>
+
+	Fix for PR libgcj/5671:
+	* verify.cc (state::merge): Handle case where we're merging
+	against an interface.
+
 2002-02-12  Tom Tromey  <tromey@redhat.com>
 
 	* exception.cc (std::abort): Mark as noreturn.
diff --git a/libjava/verify.cc b/libjava/verify.cc
index 562cfaf5bc3d..38421f46ad63 100644
--- a/libjava/verify.cc
+++ b/libjava/verify.cc
@@ -675,14 +675,19 @@ private:
 		      oldk = oldk->getComponentType ();
 		    }
 
-		  // This loop will end when we hit Object.
-		  while (true)
+		  // Ordinarily this terminates when we hit Object...
+		  while (k != NULL)
 		    {
 		      if (is_assignable_from_slow (k, oldk))
 			break;
 		      k = k->getSuperclass ();
 		      changed = true;
 		    }
+		  // ... but K could have been an interface, in which
+		  // case we'll end up here.  We just convert this
+		  // into Object.
+		  if (k == NULL)
+		    k = &java::lang::Object::class$;
 
 		  if (changed)
 		    {
-- 
GitLab