From 55639e01eac622ab79569ceb543b43592de177f7 Mon Sep 17 00:00:00 2001 From: Tomas Lindquist Olsen Date: Sat, 2 Aug 2008 17:24:10 +0200 Subject: [PATCH] Fixed inserting an AA entry with 'this' as key. Fixed debug info for aggregate parameters. Only seems to work on byval arguments. --- gen/aa.cpp | 4 ++++ gen/functions.cpp | 5 +++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/gen/aa.cpp b/gen/aa.cpp index 2fd570e9..9e5b4df6 100644 --- a/gen/aa.cpp +++ b/gen/aa.cpp @@ -22,6 +22,10 @@ static LLValue* to_pkey(Loc& loc, DValue* key) if (key->isIm()) { pkey = key->getRVal(); } + else if (key->isThis()) { + pkey = key->getRVal(); + needmem = true; + } else if (DVarValue* var = key->isVar()) { if (var->lval) { pkey = key->getLVal(); diff --git a/gen/functions.cpp b/gen/functions.cpp index 9a4dc539..87d12561 100644 --- a/gen/functions.cpp +++ b/gen/functions.cpp @@ -612,8 +612,9 @@ void DtoDefineFunc(FuncDeclaration* fd) else if (DtoIsPassedByRef(vd->type)) { Logger::println("skipping arg storage for aggregate (%s) %s ", vd->loc.toChars(), vd->toChars()); - if (global.params.symdebug) - DtoDwarfLocalVariable(vd->ir.getIrValue(), vd); + LLValue* vdirval = vd->ir.getIrValue(); + if (global.params.symdebug && !(isaArgument(vdirval) && !isaArgument(vdirval)->hasByValAttr())) + DtoDwarfLocalVariable(vdirval, vd); continue; }