<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div class="">Oh, I haven’t understood your idea before pressing reply. Yes, we can match the objects by matching their shape, but it’s also not an exact solution prone to erroneous matches. Especially considering the iteration API does callbacks for the fields out of order - it does primitives, strings, arrays, in that order.</div><div class=""><br class=""></div><div class="">There are also ways to make it fail with Graal that are not related to constant representation. Graal treats allocations as side effect free. So it’s possible to allocate something and then deopt to a point before the allocation and redo the allocation in the interpreter. In this case there are going to be multiple objects on the heap with only one of them being reachable.</div><div class=""><br class=""></div><div class="">
<span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;  ">igor<br class=""><br class=""><br class=""></span>

</div>
<div><br class=""><blockquote type="cite" class=""><div class="">On Nov 28, 2018, at 2:08 PM, Igor Veresov <<a href="mailto:igor.veresov@oracle.com" class="">igor.veresov@oracle.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="Content-Type" content="text/html; charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div class="">I don’t think there is a way to identify an untagged object. There is nothing that is passed in the callback to allow that.</div><br class=""><div class="">
<span class="Apple-style-span" style="border-collapse: separate; font-family: Helvetica; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-position: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; border-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-stroke-width: 0px;">igor<br class=""><br class=""></span>

</div>
<div class=""><br class=""><blockquote type="cite" class=""><div class="">On Nov 28, 2018, at 1:32 PM, <a href="mailto:dean.long@oracle.com" class="">dean.long@oracle.com</a> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="">I'm guessing Graal creates Constant boxes of the individual fields and not of the test objects?  If so, can't we fix the matching so that it checks that all fields of an object match?  I guess that would mean moving the "expected" and "found" counts up from fields[] to objects_info[].<br class=""><br class="">dl<br class=""><br class="">On 11/28/18 1:13 PM, Igor Veresov wrote:<br class=""><blockquote type="cite" class="">When doing heap iteration with JVMTI the way the object identity is tracked is by tagging. This particular test checks if it  can observe an untagged object. Since there is no way to truly track the identity of an untagged object the test validates the identity by checking the value of the fields of such object. When being compiled with Graal there are objects produced (such as Constant boxes) that have field values that are equal to the expected values for the fields in UntaggedClass. During the subsequent heap iteration these objects are reported to the test and are treated as if they were instances of UntaggedClass.<br class=""><br class="">The fix is to relax the test requirement and allow (for the untagged case) the number of the object found during iteration to be more than expected.<br class=""><br class="">Webrev: <a href="http://cr.openjdk.java.net/~iveresov/8193577/webrev.00/" class="">http://cr.openjdk.java.net/~iveresov/8193577/webrev.00/</a><br class="">JBS: <a href="https://bugs.openjdk.java.net/browse/JDK-8193577" class="">https://bugs.openjdk.java.net/browse/JDK-8193577</a><br class=""><br class="">igor<br class=""><br class=""><br class=""><br class=""></blockquote><br class=""></div></div></blockquote></div><br class=""></div></div></blockquote></div><br class=""></body></html>