Fix debuginfos for nested ref/out parameters (use llvm.dbg.declare)

llvm.dbg.value() apparently doesn't like GEP + deref, so use
llvm.dbg.declare() & GEP.
This commit is contained in:
Martin 2017-09-07 23:12:07 +02:00
parent 93decabe6c
commit 8cc5ff6e79
6 changed files with 55 additions and 35 deletions

View file

@ -770,8 +770,12 @@ void defineParameters(IrFuncTy &irFty, VarDeclarations &parameters) {
// The debuginfos for captured params are handled later by
// DtoCreateNestedContext().
if (global.params.symdebug && vd->nestedrefs.dim == 0)
gIR->DBuilder.EmitLocalVariable(irparam->value, vd, paramType);
if (global.params.symdebug && vd->nestedrefs.dim == 0) {
// Reference (ref/out) parameters have no storage themselves as they are
// constant pointers, so pass the reference rvalue to EmitLocalVariable().
gIR->DBuilder.EmitLocalVariable(irparam->value, vd, paramType, false,
false, /*isRefRVal=*/true);
}
}
}