From 04f3c61b978ff95261db3d52a88da304fa518761 Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Thu, 2 Apr 2009 20:56:39 +0200 Subject: [PATCH] Make sure debug info is only declared once per alloca. --- gen/llvmhelpers.cpp | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/gen/llvmhelpers.cpp b/gen/llvmhelpers.cpp index 93fc9568..0477c433 100644 --- a/gen/llvmhelpers.cpp +++ b/gen/llvmhelpers.cpp @@ -1082,6 +1082,17 @@ LLValue* DtoRawVarDeclaration(VarDeclaration* var, LLValue* addr) // we don't handle aliases either assert(!var->aliassym); + + // alloca if necessary + LLValue* allocaval = NULL; + if (!addr && (!var->ir.irLocal || !var->ir.irLocal->value)) + { + addr = DtoAlloca(DtoType(var->type), var->toChars()); + + // add debug info + if (global.params.symdebug) + DtoDwarfLocalVariable(addr, var); + } // referenced by nested function? #if DMDV2 @@ -1092,7 +1103,10 @@ LLValue* DtoRawVarDeclaration(VarDeclaration* var, LLValue* addr) { assert(var->ir.irLocal); if(!var->ir.irLocal->value) - var->ir.irLocal->value = addr ? addr : DtoAlloca(DtoType(var->type), var->toChars()); + { + assert(addr); + var->ir.irLocal->value = addr; + } else assert(!addr || addr == var->ir.irLocal->value); @@ -1113,14 +1127,11 @@ LLValue* DtoRawVarDeclaration(VarDeclaration* var, LLValue* addr) } assert(!var->ir.isSet()); + assert(addr); var->ir.irLocal = new IrLocal(var); - var->ir.irLocal->value = addr ? addr : DtoAlloca(DtoType(var->type), var->toChars()); + var->ir.irLocal->value = addr; } - // add debug info - if (global.params.symdebug) - DtoDwarfLocalVariable(var->ir.irLocal->value, var); - // return the alloca return var->ir.irLocal->value; }