changeset 2855:dd3689584733

PR2781, CA195: typeinfo.cpp: typeinfo_merge_nonarrays: Assertion `dest && result && x.any && y.any' failed 2016-03-24 Andrew John Hughes <gnu.andrew@member.fsf.org> * Makefile.am: (ICEDTEA_PATCHES): Add new patch. * NEWS: Updated. * patches/cacao/pr2781-refactoring_error.patch: Backport of refactoring fix from https://bitbucket.org/Ringdingcoder/cacao-staging
author Andrew John Hughes <gnu_andrew@member.fsf.org>
date Fri, 25 Mar 2016 00:37:24 +0000
parents 673f09017f15
children 1f1d05d55b81
files ChangeLog Makefile.am NEWS patches/cacao/pr2781-refactoring_error.patch
diffstat 4 files changed, 123 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Mon Jan 25 16:38:42 2016 +0000
+++ b/ChangeLog	Fri Mar 25 00:37:24 2016 +0000
@@ -1,3 +1,14 @@
+2016-03-24  Andrew John Hughes  <gnu.andrew@member.fsf.org>
+
+	PR2781, CA195: typeinfo.cpp: typeinfo_merge_nonarrays:
+	Assertion `dest && result && x.any && y.any' failed
+	* Makefile.am:
+	(ICEDTEA_PATCHES): Add new patch.
+	* NEWS: Updated.
+	* patches/cacao/pr2781-refactoring_error.patch:
+	Backport of refactoring fix from
+	https://bitbucket.org/Ringdingcoder/cacao-staging
+
 2016-01-25  Andrew John Hughes  <gnu.andrew@member.fsf.org>
 
 	* NEWS: Add 2.6.4 release notes.
--- a/Makefile.am	Mon Jan 25 16:38:42 2016 +0000
+++ b/Makefile.am	Fri Mar 25 00:37:24 2016 +0000
@@ -383,7 +383,8 @@
 	patches/cacao/memory.patch \
 	patches/cacao/pr2032.patch \
 	patches/cacao/pr2520-tempdir.patch \
-	patches/cacao/pr2652-classloader.patch
+	patches/cacao/pr2652-classloader.patch \
+	patches/cacao/pr2781-refactoring_error.patch
 else
 if USING_CACAO
 ICEDTEA_PATCHES += \
--- a/NEWS	Mon Jan 25 16:38:42 2016 +0000
+++ b/NEWS	Fri Mar 25 00:37:24 2016 +0000
@@ -14,6 +14,9 @@
 
 New in release 2.7.0 (201X-XX-XX):
 
+* CACAO
+  - PR2781, CA195: typeinfo.cpp: typeinfo_merge_nonarrays: Assertion `dest && result && x.any && y.any' failed
+
 New in release 2.6.4 (2016-01-19):
 
 * Security fixes
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/cacao/pr2781-refactoring_error.patch	Fri Mar 25 00:37:24 2016 +0000
@@ -0,0 +1,107 @@
+# HG changeset patch
+# User Stefan Ring <stefan@complang.tuwien.ac.at>
+# Date 1453933756 -3600
+# Node ID 4982d429274b9498ad2629ea4f28566ed69e4775
+# Parent  1cef439b53ee701662059ae50874d55c7b5302d7
+PR195: Fix some oversights during a large macro cleanup in 1e9787c3484e
+
+diff --git cacao/cacao/src/vm/jit/verify/typecheck-common.cpp cacao/cacao/src/vm/jit/verify/typecheck-common.cpp
+--- cacao/cacao/src/vm/jit/verify/typecheck-common.cpp
++++ cacao/cacao/src/vm/jit/verify/typecheck-common.cpp
+@@ -281,7 +281,7 @@
+ 
+ 		dv->type = sv->type;
+ 		if (dv->type == TYPE_ADR) {
+-			dv->typeinfo = sv->typeinfo;
++			typeinfo_t::clone(sv->typeinfo, dv->typeinfo);
+ 		}
+ 	}
+ 	return true;
+diff --git cacao/cacao/src/vm/jit/verify/typeinfo.cpp cacao/cacao/src/vm/jit/verify/typeinfo.cpp
+--- cacao/cacao/src/vm/jit/verify/typeinfo.cpp
++++ cacao/cacao/src/vm/jit/verify/typeinfo.cpp
+@@ -1674,6 +1674,7 @@
+ 	classref_or_classinfo common;
+ 	classref_or_classinfo elementclass;
+ 	int dimension;
++	ArrayType new_elementtype;
+ 	bool changed;
+ 	typecheck_result r;
+ 
+@@ -1784,23 +1785,23 @@
+          * interpret it as an array (same dim. as x) of Arraystubs. */
+         if (x->dimension < src->dimension) {
+             dimension = x->dimension;
+-            elementtype = ARRAYTYPE_OBJECT;
++            new_elementtype = ARRAYTYPE_OBJECT;
+             elementclass.cls = pseudo_class_Arraystub;
+         }
+         else {
+             dimension    = src->dimension;
+-            elementtype  = src->elementtype;
++            new_elementtype = src->elementtype;
+             elementclass = src->elementclass;
+         }
+         
+         /* {The arrays are of the same dimension.} */
+         
+-        if (x->elementtype != elementtype) {
++        if (x->elementtype != new_elementtype) {
+             /* Different element types are merged, so the resulting array
+              * type has one accessible dimension less. */
+             if (--dimension == 0) {
+                 common.cls       = pseudo_class_Arraystub;
+-                elementtype      = ARRAYTYPE_INT;
++                new_elementtype = ARRAYTYPE_INT;
+                 elementclass.any = NULL;
+             }
+             else {
+@@ -1810,14 +1811,14 @@
+ 					return typecheck_FAIL;
+ 				}
+ 
+-                elementtype      = ARRAYTYPE_OBJECT;
++                new_elementtype = ARRAYTYPE_OBJECT;
+                 elementclass.cls = pseudo_class_Arraystub;
+             }
+         }
+         else {
+             /* {The arrays have the same dimension and elementtype.} */
+ 
+-            if (elementtype == ARRAYTYPE_OBJECT) {
++            if (new_elementtype == ARRAYTYPE_OBJECT) {
+                 /* The elements are references, so their respective
+                  * types must be merged.
+                  */
+@@ -1862,7 +1863,7 @@
+ 		changed |= r;
+ 
+         dimension        = 0;
+-        elementtype      = ARRAYTYPE_INT;
++        new_elementtype = ARRAYTYPE_INT;
+         elementclass.any = NULL;
+     }
+ 
+@@ -1876,8 +1877,8 @@
+         this->dimension = dimension;
+         changed = true;
+     }
+-    if (this->elementtype != elementtype) {
+-        this->elementtype = elementtype;
++    if (elementtype != new_elementtype) {
++        elementtype = new_elementtype;
+         changed = true;
+     }
+     if (this->elementclass.any != elementclass.any) {
+diff --git cacao/cacao/src/vm/resolve.cpp cacao/cacao/src/vm/resolve.cpp
+--- cacao/cacao/src/vm/resolve.cpp
++++ cacao/cacao/src/vm/resolve.cpp
+@@ -703,7 +703,7 @@
+ 
+ 	/* uninitialized objects are illegal here */
+ 
+-	if (subtinfo->is_primitive()) {
++	if (subtinfo->is_newobject()) {
+ 		exceptions_throw_verifyerror(refmethod,
+ 				"Invalid use of uninitialized object");
+ 		return resolveFailed;