Mercurial > projects > dstress
changeset 1025:8516fcb66401
Exception handling is broken for delegates on Linux
<mclysenk@mtu.edu>
2006-05-11
news:e3u2au$2l0c$1@digitaldaemon.com
author | thomask |
---|---|
date | Wed, 24 May 2006 16:23:57 +0000 |
parents | adf31c7a5127 |
children | a4b91ec616fa |
files | run/t/throw_07_A.d run/t/throw_07_B.d |
diffstat | 2 files changed, 169 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/t/throw_07_A.d Wed May 24 16:23:57 2006 +0000 @@ -0,0 +1,84 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +// @author@ <mclysenk@mtu.edu> +// @date@ 2006-05-11 +// @uri@ news:e3u2au$2l0c$1@digitaldaemon.com + +module dstress.run.t.throw_07_C; + +int status; + +class XException : Exception{ + this(char[] msg){ + super(msg); + } +} + +class Tester{ + this(void delegate() dg_){ + if(status++ != 0){ + assert(0); + } + dg = dg_; + } + + void delegate() dg; + + void test() { + if(status++ != 1){ + assert(0); + } + dg(); + + assert(0); + } +} + +int main(){ + void foo(){ + try{ + if(status++ != 2){ + assert(0); + } + throw new XException("test2"); + + assert(0); + }catch(XException e){ + if(status++ != 3){ + assert(0); + } + throw e; + assert(0); + }finally{ + if(status++ != 4){ + assert(0); + } + } + assert(0); + } + + Tester t = new Tester(&foo); + + try{ + if(status++ != 5){ + assert(0); + } + t.test(); + assert(0); + }catch(XException e){ + if(status++ != 6){ + assert(0); + } + }finally{ + if(status++ != 7){ + assert(0); + } + } + + if(status != 8){ + assert(0); + } + return 0; +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/t/throw_07_B.d Wed May 24 16:23:57 2006 +0000 @@ -0,0 +1,85 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +// @author@ <mclysenk@mtu.edu> +// @date@ 2006-05-11 +// @uri@ news:e3u2au$2l0c$1@digitaldaemon.com + +module dstress.run.t.throw_07_B; + +int status; + +class XException : Exception{ + this(char[] msg){ + super(msg); + } +} + +class Tester{ + this(void function() dg_){ + if(status++ != 0){ + assert(0); + } + dg = dg_; + } + + void function() dg; + + void test() { + if(status++ != 1){ + assert(0); + } + dg(); + + assert(0); + } +} + +void foo(){ + try{ + if(status++ != 2){ + assert(0); + } + throw new XException("test2"); + + assert(0); + }catch(XException e){ + if(status++ != 3){ + assert(0); + } + throw e; + assert(0); + }finally{ + if(status++ != 4){ + assert(0); + } + } + assert(0); +} + +int main(){ + + Tester t = new Tester(&foo); + + try{ + if(status++ != 5){ + assert(0); + } + t.test(); + assert(0); + }catch(XException e){ + if(status++ != 6){ + assert(0); + } + }finally{ + if(status++ != 7){ + assert(0); + } + } + + if(status != 8){ + assert(0); + } + return 0; +}