From b172c4a668a30a869a0fd0bd0d033147c1ce56f6 Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Tue, 18 Nov 2008 18:07:57 +0100 Subject: [PATCH] Fix RawVarDecl double codegen bug. Thanks to downs for the testcase. --- gen/llvmhelpers.cpp | 4 ++++ tests/mini/compile_rawvardeclinfinally.d | 1 + 2 files changed, 5 insertions(+) create mode 100644 tests/mini/compile_rawvardeclinfinally.d diff --git a/gen/llvmhelpers.cpp b/gen/llvmhelpers.cpp index 43bf8513..7bb8c899 100644 --- a/gen/llvmhelpers.cpp +++ b/gen/llvmhelpers.cpp @@ -1332,6 +1332,10 @@ LLValue* DtoRawVarDeclaration(VarDeclaration* var) // we don't handle aliases either assert(!var->aliassym); + + // if this already has storage, it must've been handled already + if (var->ir.irLocal && var->ir.irLocal->value) + return var->ir.irLocal->value; // referenced by nested function? #if DMDV2 diff --git a/tests/mini/compile_rawvardeclinfinally.d b/tests/mini/compile_rawvardeclinfinally.d new file mode 100644 index 00000000..7d248002 --- /dev/null +++ b/tests/mini/compile_rawvardeclinfinally.d @@ -0,0 +1 @@ +void foo() { void delegate()[] bar; try {} finally { foreach (dg; bar) dg(); } }