From 9fd43121db8390db1814162688c17339e9a3f396 Mon Sep 17 00:00:00 2001 From: Tomas Lindquist Olsen Date: Thu, 4 Oct 2007 10:22:56 +0200 Subject: [PATCH] [svn r29] * Fixed structs inside struct literals --- gen/toir.c | 7 ++++++- test/structs5.d | 23 +++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 test/structs5.d diff --git a/gen/toir.c b/gen/toir.c index 7f18d5ec..55abf9bc 100644 --- a/gen/toir.c +++ b/gen/toir.c @@ -1378,7 +1378,12 @@ elem* StructLiteralExp::toElem(IRState* p) elem* ve = vx->toElem(p); llvm::Value* val = ve->getValue(); Logger::cout() << *val << " | " << *arrptr << '\n'; - new llvm::StoreInst(val, arrptr, p->scopebb()); + if (vx->type->ty == Tstruct) { + TypeStruct* ts = (TypeStruct*)vx->type; + LLVM_DtoStructCopy(ts,arrptr,val); + } + else + new llvm::StoreInst(val, arrptr, p->scopebb()); delete ve; } else { diff --git a/test/structs5.d b/test/structs5.d new file mode 100644 index 00000000..405871b9 --- /dev/null +++ b/test/structs5.d @@ -0,0 +1,23 @@ +module structs5; + +void main() +{ + {S s = S();} + {T t = T(1);} + {U u = U();} +} + +struct S +{ +} + +struct T +{ + int i; +} + +struct U +{ + S s; + long l; +}