# HG changeset patch # User lindquist # Date 1193865619 -3600 # Node ID 875617f89c51bcbb4421a6079138870ab0a1f4f9 # Parent 2332006e1fa45d74934c9e0e33f617461c0409f6 [svn r83] Fixed: Returning a struct from within the try block of a try-finally was broken. diff -r 2332006e1fa4 -r 875617f89c51 gen/statements.c --- a/gen/statements.c Wed Oct 31 20:50:21 2007 +0100 +++ b/gen/statements.c Wed Oct 31 22:20:19 2007 +0100 @@ -96,7 +96,7 @@ if (fin.empty()) new llvm::ReturnInst(p->scopebb()); else { - new llvm::BranchInst(fin.back().bb); + new llvm::BranchInst(fin.back().bb, p->scopebb()); fin.back().ret = true; } delete e; diff -r 2332006e1fa4 -r 875617f89c51 test/bug44.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/bug44.d Wed Oct 31 22:20:19 2007 +0100 @@ -0,0 +1,21 @@ +module bug44; + +pragma(LLVM_internal, "notypeinfo") +struct rgb +{ + long l; +} + +void foo() +{ +} + +rgb test() { + scope(exit) foo(); + return rgb(); +} + +void main() +{ + rgb r = test(); +}