From 44d2104eec0ab76711190e3595575bced859f963 Mon Sep 17 00:00:00 2001 From: Tomas Lindquist Olsen Date: Wed, 31 Oct 2007 22:20:19 +0100 Subject: [PATCH] [svn r83] Fixed: Returning a struct from within the try block of a try-finally was broken. --- gen/statements.c | 2 +- test/bug44.d | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 test/bug44.d diff --git a/gen/statements.c b/gen/statements.c index 51010452..739f4dba 100644 --- a/gen/statements.c +++ b/gen/statements.c @@ -96,7 +96,7 @@ void ReturnStatement::toIR(IRState* p) 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 --git a/test/bug44.d b/test/bug44.d new file mode 100644 index 00000000..8beee7c0 --- /dev/null +++ b/test/bug44.d @@ -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(); +}