Mercurial > projects > ldc
changeset 1401:e2cf1f67ca33
Don't print the entire declaration of the alliassee when `->toChars()` is
called on an `AliasDeclaration`; just printing the name will do. This fixes
#305, which otherwise tries to generate
{{{
class E {
void A() {
alias /* recurse into E->toCBuffer() */ m;
}
}
}}}
by way of an infinite recursion (causing a segfault when the stack runs out).
author | Frits van Bommel <fvbommel wxs.nl> |
---|---|
date | Wed, 20 May 2009 16:20:59 +0200 |
parents | 4100c49b753f |
children | 1311dabc6a1f |
files | dmd/declaration.c gen/toir.cpp tests/mini/compile_bug305.d |
diffstat | 3 files changed, 10 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/dmd/declaration.c Tue May 19 22:35:08 2009 +0200 +++ b/dmd/declaration.c Wed May 20 16:20:59 2009 +0200 @@ -575,7 +575,7 @@ { if (haliassym) { - haliassym->toCBuffer(buf, hgs); + buf->writestring(haliassym->toChars()); buf->writeByte(' '); buf->writestring(ident->toChars()); } @@ -587,7 +587,7 @@ { if (aliassym) { - aliassym->toCBuffer(buf, hgs); + buf->writestring(aliassym->toChars()); buf->writeByte(' '); buf->writestring(ident->toChars()); }
--- a/gen/toir.cpp Tue May 19 22:35:08 2009 +0200 +++ b/gen/toir.cpp Wed May 20 16:20:59 2009 +0200 @@ -1774,7 +1774,7 @@ condty->ty == Tclass && !((TypeClass*)condty)->sym->isInterfaceDeclaration()) { - Logger::print("calling class invariant"); + Logger::println("calling class invariant"); llvm::Function* fn = LLVM_D_GetRuntimeFunction(gIR->module, "_d_invariant"); LLValue* arg = DtoBitCast(cond->getRVal(), fn->getFunctionType()->getParamType(0)); gIR->CreateCallOrInvoke(fn, arg);