mirror of
https://github.com/ldc-developers/ldc.git
synced 2025-05-05 01:20:51 +03:00
Make sure debug info is only declared once per alloca.
This commit is contained in:
parent
8d01068c9b
commit
04f3c61b97
1 changed files with 17 additions and 6 deletions
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue