Mercurial > projects > ldc
diff gen/toir.cpp @ 587:23538d0f0d5b
Fixed a few mini tests issues.
Added 'darwin' and 'Posix' as versions user can't set.
Fixed #80 .
author | Tomas Lindquist Olsen <tomas.l.olsen@gmail.com> |
---|---|
date | Thu, 11 Sep 2008 21:10:15 +0200 |
parents | fbb1a366cfbc |
children | e6bcc4d9e5ff |
line wrap: on
line diff
--- a/gen/toir.cpp Wed Sep 10 12:33:33 2008 -0700 +++ b/gen/toir.cpp Thu Sep 11 21:10:15 2008 +0200 @@ -2156,12 +2156,20 @@ Logger::cout() << (dyn?"dynamic":"static") << " array literal with length " << len << " of D type: '" << arrayType->toChars() << "' has llvm type: '" << *llType << "'\n"; // llvm storage type - const LLType* llStoType = LLArrayType::get(DtoType(elemType), len); + const LLType* llElemType = DtoTypeNotVoid(elemType); + const LLType* llStoType = LLArrayType::get(llElemType, len); Logger::cout() << "llvm storage type: '" << *llStoType << "'\n"; + // don't allocate storage for zero length dynamic array literals + if (dyn && len == 0) + { + // dmd seems to just make them null... + return new DSliceValue(type, DtoConstSize_t(0), getNullPtr(getPtrToType(llElemType))); + } + // dst pointer - LLValue* dstMem = 0; - dstMem = DtoAlloca(llStoType, "arrayliteral"); + // FIXME: dynamic array literals should be allocated with the GC + LLValue* dstMem = DtoAlloca(llStoType, "arrayliteral"); // store elements for (size_t i=0; i<len; ++i)