Mercurial > projects > ldc
diff gen/functions.cpp @ 254:8187884566fa trunk
[svn r271] Fixed debug info for implicit 'this' param.
Fixed debug info for arguments passed byval (ref and out params still missing).
author | lindquist |
---|---|
date | Thu, 12 Jun 2008 18:04:28 +0200 |
parents | fc9c1a0eabbd |
children | 8dbddae09152 |
line wrap: on
line diff
--- a/gen/functions.cpp Thu Jun 12 17:01:31 2008 +0200 +++ b/gen/functions.cpp Thu Jun 12 18:04:28 2008 +0200 @@ -587,6 +587,17 @@ fd->vresult->ir.irLocal->value = new llvm::AllocaInst(DtoType(fd->vresult->type),"function_vresult",allocaPoint); } + // give 'this' argument debug info (and storage) + if (f->llvmUsesThis && global.params.symdebug) + { + LLValue** thisvar = &fd->ir.irFunc->thisVar; + assert(*thisvar); + LLValue* thismem = new llvm::AllocaInst((*thisvar)->getType(), "newthis", allocaPoint); + DtoDwarfLocalVariable(thismem, fd->vthis); + gIR->ir->CreateStore(*thisvar, thismem); + *thisvar = thismem; + } + // give arguments storage if (fd->parameters) { @@ -597,8 +608,16 @@ VarDeclaration* vd = argsym->isVarDeclaration(); assert(vd); - if (!vd->needsStorage || vd->nestedref || vd->isRef() || vd->isOut() || DtoIsPassedByRef(vd->type)) + // FIXME: llvm seems to want an alloca for debug info + if (!vd->needsStorage || vd->nestedref || vd->isRef() || vd->isOut()) continue; + // debug info for normal aggr params seem to work fine + else if (DtoIsPassedByRef(vd->type)) + { + if (global.params.symdebug) + DtoDwarfLocalVariable(vd->ir.getIrValue(), vd); + continue; + } LLValue* a = vd->ir.irLocal->value; assert(a);