Mercurial > hg > release > icedtea8-3.0
view patches/cacao/pr2832-refactoring_error.patch @ 2653: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 | |
children |
line wrap: on
line source
# 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;