diff --git a/gen/toir.cpp b/gen/toir.cpp index 1a1683cc82..c170cf94d9 100644 --- a/gen/toir.cpp +++ b/gen/toir.cpp @@ -149,17 +149,9 @@ static void write_struct_literal(Loc loc, LLValue *mem, StructDeclaration *sd, DtoAssign(loc, &field, &val, TOKblit); } - offset += vd->type->size(); - - // Also zero out padding bytes counted as being part of the type in DMD - // but not in LLVM; e.g. real/x86_fp80. - int implicitPadding = - vd->type->size() - gDataLayout->getTypeStoreSize(DtoType(vd->type)); - assert(implicitPadding >= 0); - if (implicitPadding > 0) { - IF_LOG Logger::println("zeroing %d padding bytes", implicitPadding); - voidptr = write_zeroes(voidptr, offset - implicitPadding, offset); - } + // Make sure to zero out padding bytes counted as being part of the type in + // DMD but not in LLVM; e.g. real/x86_fp80. + offset += gDataLayout->getTypeStoreSize(DtoType(vd->type)); } // initialize trailing padding diff --git a/ir/iraggr.cpp b/ir/iraggr.cpp index b4da84818e..b268449028 100644 --- a/ir/iraggr.cpp +++ b/ir/iraggr.cpp @@ -284,7 +284,9 @@ void IrAggr::addFieldInitializers( } AggrTypeBuilder b(false, offset); - b.addAggregate(decl, &explicitInitializers, AggrTypeBuilder::Aliases::Skip); + b.addAggregate(decl, + explicitInitializers.empty() ? nullptr : &explicitInitializers, + AggrTypeBuilder::Aliases::Skip); offset = b.currentOffset(); const size_t baseLLFieldIndex = constants.size();