================
@@ -802,9 +845,25 @@ InitListChecker::FillInEmptyInitializations(const 
InitializedEntity &Entity,
         }
       }
     } else {
+      InitListExpr *SForm =
+          ILE->isSyntacticForm() ? ILE : ILE->getSyntacticForm();
       // The fields beyond ILE->getNumInits() are default initialized, so in
       // order to leave them uninitialized, the ILE is expanded and the extra
       // fields are then filled with NoInitExpr.
+
+      // Some checks that required for missing fields warning are bound to how
+      // many elements the initializer list originally was provided, perform
+      // them before the list is expanded.
+      bool WarnIfMissingField =
+          !SForm->isIdiomaticZeroInitializer(SemaRef.getLangOpts()) &&
+          ILE->getNumInits();
+
+      // Disable check for missing fields when designators are used in C to
+      // match gcc behaviour.
+      // FIXME: Should we emulate possible gcc warning bug?
+      WarnIfMissingField &=
+          !(!SemaRef.getLangOpts().CPlusPlus && hasAnyDesignatedInits(SForm));
----------------
AaronBallman wrote:

```suggestion
          SemaRef.getLangOpts().CPlusPlus || !hasAnyDesignatedInits(SForm);
```
Applying de Morgan's law helps make this a bit more clear, I think.

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

Reply via email to