S/390 Bootstrap failure due to fixup_eh_region_note

Andrew Pinski pinskia@physics.uc.edu
Tue Sep 6 02:31:00 GMT 2005


On Sep 5, 2005, at 6:39 PM, Richard Henderson wrote:

> On Mon, Sep 05, 2005 at 02:27:54PM +0200, Andreas Krebbel wrote:
>> (insn 31 29 49 5 (set (mem/s/j:SI (plus:SI (reg/v/f:SI 47 [ env ])
>>                 (const_int 4 [0x4])) [0 <variable>.ex+0 S4 A32])
>>         (mem/f:SI (plus:SI (plus:SI (reg:SI 55)
>>                     (reg:SI 56))
>>                 (const_int 4092 [0xffc])) [0 S4 A32]))
>
> Guh.

Actually it looks like the tree EH lowering is not marking something
right as we get one BBs.
The reduced testcase is:
extern "Java" {
   namespace java   {
     namespace lang     {
       class Class;
       class Throwable;
     }
   }
}
typedef class java::lang::Class* jclass;
typedef class java::lang::Throwable* jthrowable;
typedef struct _Jv_JNIEnv JNIEnv;
struct _Jv_JNIEnv {
   jthrowable ex;
};
class java::lang::Throwable {

   static ::java::lang::Class class$;
};
void f(void);
void g (JNIEnv *env)
{
   try     {
     f();
   }
   catch (jthrowable t)     {
     env->ex = t;
   }
}

but we only get one BB containing the env->ex = t:
<L0>:;
   D.1724 = (struct Throwable * *) <<<exception object>>>;
   env->ex = *(D.1724 - 4B);

Which is just wrong.

-- Pinski



More information about the Gcc mailing list