Question about C1 exception handling code

Andrew Dinn adinn at redhat.com
Tue Feb 27 15:25:57 UTC 2018


Doh, Prime example of how cut-and-pastoes work! Corrected inline

On 27/02/18 15:23, Andrew Dinn wrote:
> I was looking into a problem that turned up compiling a Graal class
> using jdk9, identified a patch and then found that it had already been
> fixed by Roland in jdk10
> 
>   https://bugs.openjdk.java.net/browse/JDK-8188151
> 
> However, my patch included a change which is not present in Roland's fix
> and still not corrected in jdk/hs. I /think/ an extra tweak is needed
> but am not sure. A second opinion would be welcome.
> 
> The relevant code is in file c1_Compilation.cpp inside method
> Compilation::generate_exception_handler_table whihc can be found at line
> 479. The code looks like this
> 
> void Compilation::generate_exception_handler_table() {
>   // Generate an ExceptionHandlerTable from the exception handler
>   // information accumulated during the compilation.
>   . . .
>   for (int i = 0; i < info_list->length(); i++) {
>     ExceptionInfo* info = info_list->at(i);
>     XHandlers* handlers = info->exception_handlers();
> 
>     . . .
> 
>     for (int i = 0; i < handlers->length(); i++) {
>       XHandler* handler = handlers->handler_at(i);
>       assert(handler->entry_pco() != -1, "must have been generated");
>       assert(handler->scope_count() >= prev_scope, "handlers should be
> sorted by scope");
>         . . .
> 
> 
> The missing bits don't really matter. The important point is that it
> looks as if that inner loop really ought to use a new loop variable
> 
>     for (j = 0; i < handlers->length(); i++) {
>       XHandler* handler = handlers->handler_at(i);
>       . . .

Of course the amended version is meant to be:

      for (j = 0; j < handlers->length(); j++) {
        XHandler* handler = handlers->handler_at(j);
        . . .

> I'll happily acknowledge that I only have a vague overview of how the C1
> code works. Am I missing some clever trick here which requires the inner
> loop to reset the counter for the outer loop to handlers->length() by
> the time it completes? Or is this really just an obvious mistake?
> 
> regards,
> 
> 
> Andrew Dinn
> -----------
> Senior Principal Software Engineer
> Red Hat UK Ltd
> Registered in England and Wales under Company Registration No. 03798903
> Directors: Michael Cunningham, Michael ("Mike") O'Neill, Eric Shander
> 

-- 
regards,


Andrew Dinn
-----------
Senior Principal Software Engineer
Red Hat UK Ltd
Registered in England and Wales under Company Registration No. 03798903
Directors: Michael Cunningham, Michael ("Mike") O'Neill, Eric Shander


More information about the hotspot-compiler-dev mailing list