[Mono-dev] Problem with regression test of exceptions.exe

Neale Ferguson NealeFerguson at verizon.net
Mon Jul 27 13:37:57 EDT 2009


I¹m having problems with Pastebin at the moment so I was unable to place the
following there and use IRC:

Strange situation running regression test for exceptions.exe. I am crashing
as the following call returns NULL:

                case OP_START_HANDLER: {
                        MonoInst *spvar = mono_find_spvar_for_region (cfg,
bb->region);

I have traced the code and it shows bb->region = 258. I traced
mono_create_spvar_for_region and it shows and entry being placed in the hash
table for region 258. However, in the find routine we have:

        if ((region & (0xf << 4)) == MONO_REGION_TRY) {
                MonoMethodHeader *header = mono_method_get_header
(cfg->method);

                /*
                 * This can happen if a try clause is nested inside a
finally clause.
                 */
                int clause_index = (region >> 8) - 1;
                g_assert (clause_index >= 0 && clause_index <
header->num_clauses);
                region = mono_find_block_region_notry (cfg, header->clauses
[clause_index].try_offs
et);               
        }          

A trace shows that 258 passes the == MONO_REGION_TRY test and so we get a
new region number (530) and when we do a g_hash_table_lookup() using that
region we get null. I see no inserts using that (530) region number.

Also, MONO_REGION_TRY is 0. Is the test supposed to be against this value or
for checking bit 0?

I am confused as to what is happening.

Neale




More information about the Mono-devel-list mailing list