# HG changeset patch # User Andrew John Hughes # Date 1459484962 -3600 # Node ID 226896a3023229c36455443af71afea2320c84c3 # Parent 624150627c20d8c5e931ceb6ba20d79c6644a00f PR2832, CA195: typeinfo.cpp: typeinfo_merge_nonarrays: Assertion `dest && result && x.any && y.any' failed 2016-03-24 Andrew John Hughes 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 diff -r 624150627c20 -r 226896a30232 ChangeLog --- 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 + + 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 PR2775: JamVM lacks JVM_GetResourceLookupCacheURLs diff -r 624150627c20 -r 226896a30232 Makefile.am --- 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 += diff -r 624150627c20 -r 226896a30232 NEWS --- 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): diff -r 624150627c20 -r 226896a30232 patches/cacao/pr2832-refactoring_error.patch --- /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 +# 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;