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(); +}