This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: S/390 Bootstrap failure due to fixup_eh_region_note



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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]