https://issues.dlang.org/show_bug.cgi?id=21013
--- Comment #2 from Iain Buclaw <ibuc...@gdcproject.org> --- (In reply to Iain Buclaw from comment #1) > One stable input that could instead be used is the function FQN, or perhaps > better, the hash of it. > Though shortly after sending the last message, I now see that I was thinking only about problem [2], and not what would also work for [1] as well. What instead works for both would be if an internal state were to be updated when entering each try/catch or try/finally region. e.g: --- void bug1513a() { throw new Exception("d"); } void bug1513() { try { /// _d_eh_setContext("bug1513"); /// try { /// _d_eh_setContext("bug1513"); /// bug1513a(); } finally { throw new Exception("f"); } } catch(Exception e) { assert(e.msg == "d"); assert(e.next.msg == "f"); assert(!e.next.next); } } --- void test4() { void throw_catch() { try { /// _d_eh_setContext("test4.throw_catch"); /// throw new MyException; } catch (MyException) { } catch (Exception) { assert(false); } } try { /// _d_eh_setContext("test4"); /// try { /// _d_eh_setContext("test4"); /// throw new Exception("a"); } finally { throw_catch(); } } catch(Exception e) { assert(e.msg == "a"); assert(!e.next); } } --- Which means there's unfortunately going to be a heavy performance penalty for using EH. --