AsyncGetCallTrace often returns traces that report a 0 bci. The problem is that the logic in is_decipherable_compiled_frame has two tests that look like this:
if (pc_desc != NULL &&
pc_desc->scope_decode_offset() == DebugInformationRecorder::serialized_null) {
that should be:
if (pc_desc == NULL ||
pc_desc->scope_decode_offset() == DebugInformationRecorder::serialized_null) {
The existing logic keeps us from doing searching nearby for valid PcDescs and selecting them as the start of the stack walk. I would have expected vframeStream to assert about this but it apparently does not.