verification problems

Tom Tromey tromey@redhat.com
Mon Jan 28 16:18:00 GMT 2002


>>>>> "Nic" == Nic Ferrier <nferrier@tapsellferrier.co.uk> writes:

Nic> fatal error: verification failed at PC 264 in gnu.socketserver.Server:serviceSocket(()Z): subroutines merged

Nic> If someone tells me what this error means I'll have a go at
Nic> tracking it down myself.

The JVMS says that two subroutines can't merge their returns to a
single `ret' instruction.  So this is invalid:

	jsr 31
	return
	jsr 25
	return
    25:
	blah
	goto 31
    31: ret

I fixed one bug in this area yesterday.

However, further thought has convinced me to change my mind again --
now I think our approach to handling this situation is incorrect.  We
check this constraint on an instruction-by-instruction basis, while
the JVMS only requires us to do so at a `ret' instruction.  I think
this means that if the subroutine has no `ret' (for instance, suppose
insn 31 above was `return' or `athrow'), then the merging is fine.

Can you send me the `jcf-dump -c' output for the class in question?
I'd like to take a look at it.

Tom



More information about the Java mailing list