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