changeset 79:875617f89c51 trunk

[svn r83] Fixed: Returning a struct from within the try block of a try-finally was broken.
author lindquist
date Wed, 31 Oct 2007 22:20:19 +0100
parents 2332006e1fa4
children 7299ff502248
files gen/statements.c test/bug44.d
diffstat 2 files changed, 22 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- 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;
--- /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();
+}