From f6126e7abfa48e346a652b7d15e367031224a878 Mon Sep 17 00:00:00 2001 From: Alexey Prokhin Date: Fri, 27 Jun 2014 19:19:01 +0400 Subject: [PATCH] Fix DMD Issue 3991 - Void initializers in unions considered overlapping --- ir/iraggr.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ir/iraggr.cpp b/ir/iraggr.cpp index 8a525237f1..360a86c7bf 100644 --- a/ir/iraggr.cpp +++ b/ir/iraggr.cpp @@ -87,6 +87,8 @@ llvm::Constant * IrAggr::getDefaultInit() ////////////////////////////////////////////////////////////////////////////// static bool isAligned(llvm::Type* type, size_t offset) { + if (offset == 0) + return true; return gDataLayout->getABITypeAlignment(type) % offset == 0; } @@ -278,6 +280,8 @@ void IrAggr::addFieldInitializers( if (data[i].first) continue; VarDeclaration* vd = decl->fields[i]; + if (vd->init && vd->init->isVoidInitializer()) + continue; unsigned vd_begin = vd->offset; unsigned vd_end = vd_begin + vd->type->size();