================
@@ -1748,6 +1771,26 @@ void AggExprEmitter::VisitCXXParenListOrInitListExpr(
         CGF.getTypes().isZeroInitializable(ExprToVisit->getType()))
       break;
 
+    if (ZeroInitPadding) {
+      uint64_t StartBitOffset = Layout.getFieldOffset(field->getFieldIndex());
+      CharUnits StartOffset =
+          CGF.getContext().toCharUnitsFromBits(StartBitOffset);
+      DoZeroInitPadding(SizeSoFar, StartOffset - SizeSoFar);
+      if (!field->isBitField()) {
+        CharUnits FieldSize =
+            CGF.getContext().getTypeSizeInChars(field->getType());
+        SizeSoFar = StartOffset + FieldSize;
+      } else {
+        const CGRecordLayout &RL =
+            CGF.getTypes().getCGRecordLayout(field->getParent());
+        const CGBitFieldInfo &Info = RL.getBitFieldInfo(field);
+        uint64_t EndBitOffset = StartBitOffset + Info.Size;
+        SizeSoFar = CGF.getContext().toCharUnitsFromBits(EndBitOffset);
+        if (EndBitOffset % CGF.getContext().getCharWidth() != 0) {
+          SizeSoFar++;
----------------
efriedma-quic wrote:

I'm not sure this actually initializes everything that needs to be initialized? 
 If you end up with padding between bitfields for whatever reason, nothing 
actually writes those bits, I think.

https://github.com/llvm/llvm-project/pull/110051
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to