From 67df4226678216afb5b07f3bbfdf3d687e7fcb18 Mon Sep 17 00:00:00 2001 From: Alexey Prokhin Date: Sun, 22 Apr 2012 12:11:02 +0400 Subject: [PATCH] Fixed a segfault when using opDollar for struct and class indexing operations --- gen/toir.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/gen/toir.cpp b/gen/toir.cpp index 8d2ad0d5..8d2e435e 100644 --- a/gen/toir.cpp +++ b/gen/toir.cpp @@ -151,9 +151,14 @@ DValue* VarExp::toElem(IRState* p) else if (vd->ident == Id::dollar) { Logger::println("Id::dollar"); + LLValue* val = 0; + if (vd->ir.isSet() && (val = vd->ir.getIrValue())) { + // It must be length of a range + return new DVarValue(type, vd, val); + } assert(!p->arrays.empty()); - LLValue* tmp = DtoArrayLen(p->arrays.back()); - return new DImValue(type, tmp); + val = DtoArrayLen(p->arrays.back()); + return new DImValue(type, val); } // classinfo else if (ClassInfoDeclaration* cid = vd->isClassInfoDeclaration())