#include <stdio.h>
#include <setjmp.h>
struct jmp_buf_struct
{
jmp_buf jb;
void* exc_ptr;
};
void may_throw(jmp_buf jb)
{
struct jmp_buf_struct* jbs_ptr = (struct jmp_buf_struct*)jb;
jbs_ptr->exc_ptr = "Exception message!";
}
int main()
{
struct jmp_buf_struct jbs;
{
printf("Threw %p = \"%s\".", jbs.
exc_ptr, (char*)jbs.
exc_ptr); }
else
{
may_throw(jbs.jb);
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzZXRqbXAuaD4KCnN0cnVjdCBqbXBfYnVmX3N0cnVjdAp7CiAgam1wX2J1ZiBqYjsKICB2b2lkKiBleGNfcHRyOwp9OwoKdm9pZCBtYXlfdGhyb3coam1wX2J1ZiBqYikKewogIHN0cnVjdCBqbXBfYnVmX3N0cnVjdCogamJzX3B0ciA9IChzdHJ1Y3Qgam1wX2J1Zl9zdHJ1Y3QqKWpiOwogIGpic19wdHItPmV4Y19wdHIgPSAiRXhjZXB0aW9uIG1lc3NhZ2UhIjsKICBsb25nam1wKGpiLCAxKTsKfQoKaW50IG1haW4oKQp7CiAgc3RydWN0IGptcF9idWZfc3RydWN0IGpiczsKICBpZiAoc2V0am1wKGpicy5qYikpCiAgewogICAgcHJpbnRmKCJUaHJldyAlcCA9IFwiJXNcIi4iLCBqYnMuZXhjX3B0ciwgKGNoYXIqKWpicy5leGNfcHRyKTsKICB9CiAgZWxzZQogIHsKICAgIG1heV90aHJvdyhqYnMuamIpOwogICAgcHV0cygiRGlkbid0IHRocm93LiIpOwogIH0KICByZXR1cm4gMDsKfQo=