changeset 2656:226896a30232

PR2832, 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> PR2832, 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/pr2832-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, 01 Apr 2016 05:29:22 +0100
parents 624150627c20
children 548cabd036a9
files ChangeLog Makefile.am NEWS patches/cacao/pr2832-refactoring_error.patch
diffstat 4 files changed, 121 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Fri Apr 01 05:20:52 2016 +0100
+++ b/ChangeLog	Fri Apr 01 05:29:22 2016 +0100
@@ -1,3 +1,14 @@
+2016-03-24  Andrew John Hughes  <gnu.andrew@member.fsf.org>
+
+	PR2832, 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/pr2832-refactoring_error.patch:
+	Backport of refactoring fix from
+	https://bitbucket.org/Ringdingcoder/cacao-staging
+
 2016-03-31  Andrew John Hughes  <gnu_andrew@member.fsf.org>
 
 	PR2775: JamVM lacks JVM_GetResourceLookupCacheURLs
--- a/Makefile.am	Fri Apr 01 05:20:52 2016 +0100
+++ b/Makefile.am	Fri Apr 01 05:29:22 2016 +0100
@@ -349,7 +349,8 @@
 	patches/cacao/pr2032.patch \
 	patches/cacao/pr2035-tempdir.patch \
 	patches/cacao/pr2349.patch \
-	patches/cacao/pr2776-cache_api.patch
+	patches/cacao/pr2776-cache_api.patch \
+	patches/cacao/pr2832-refactoring_error.patch
 else
 if USING_CACAO
 ICEDTEA_PATCHES +=
--- a/NEWS	Fri Apr 01 05:20:52 2016 +0100
+++ b/NEWS	Fri Apr 01 05:29:22 2016 +0100
@@ -207,6 +207,7 @@
   - PR2354: stamps/cacao.stamp tries to touch a file in a directory which doesn't exist
   - PR2355: CACAO build fails to use JRE layout
   - PR2776: CACAO lacks JVM_GetResourceLookupCacheURLs introduced by jdk8u40
+  - PR2832, CA195: typeinfo.cpp: typeinfo_merge_nonarrays: Assertion `dest && result && x.any && y.any' failed
 
 New in release 2.6.3 (2015-11-13):
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/cacao/pr2832-refactoring_error.patch	Fri Apr 01 05:29:22 2016 +0100
@@ -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;