// We need a fixed point iteration to hit the bogus type update // of 'obj' below, so create a loop that updates the type of 'obj'. for (int i = 1; i < 1; i++) {
obj = new Object();
}
if (obj instanceof SuperClass) { // We used to wrongly type obj as an exact SuperClass from this point, // meaning we were statically determining that the following instanceof // would always fail. if (!(obj instanceof ChildClass)) { thrownew Error("Expected a ChildClass, got " + obj.getClass());
}
}
}
/// CHECK-START-{ARM,ARM64}: boolean Main.$noinline$instanceOfString(java.lang.Object) disassembly (after) /// CHECK: InstanceOf check_kind:exact_check // For ARM and ARM64, the marking register (r8 and x20, respectively) can be used in // non-CC configs for any other purpose, so we'd need a config-specific checker test. // TODO: Add the checks when we support config-specific tests. publicstaticboolean $noinline$instanceOfString(Object o) { // String is a final class, so `instanceof String` should use exact check. // String is in the boot image, so we should avoid read barriers. The presence // of the read barrier can be checked in the architecture-specific disassembly. return o instanceof String;
}
publicstaticvoid test2() { if ($noinline$instanceOfString(new Object())) { thrownew Error();
} if (!$noinline$instanceOfString(new String())) { thrownew Error();
}
}
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.13 Sekunden
(vorverarbeitet am 2026-06-29)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.