<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/56628>56628</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
missing-field-initializers warning not reporting missing designated initializers
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
ottojo
</td>
</tr>
</table>
<pre>
In the following code, the `missing-field-initializers` does not produce a warning that `b` is not explicitly initialized.
Changing `CheckForMissingFields` to `True` here:
https://github.com/llvm/llvm-project/blob/a9a60f20e6cc80855864b8f559073bc31f34554b/clang/lib/Sema/SemaInit.cpp#L2167-L2169
seems to produce the expected warning.
The comment suggests
```
// Disable check for missing fields when designators are used.
// This matches gcc behaviour.
```
However, GCC *does* produce the warning in that case.
Comparison with GCC: https://godbolt.org/z/WeYdY11q3
```c++
struct ExampleStruct {
int a;
int b;
};
ExampleStruct buildExampleStruct(int a) {
ExampleStruct e{
.a=a
};
return e;
}
```
Build flags: `-Werror=missing-field-initializers -std=c++20`
Expected behavior:
```
main.cpp:10:5: error: missing field 'b' initializer [-Werror,-Wmissing-field-initializers]
```
matching GCCs
```
<source>:9:5: error: missing initializer for member 'ExampleStruct::b' [-Werror=missing-field-initializers]
```
Actual behavior: Compiles without warning/error.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyVVEtzmzAQ_jX4orEHhAFz4OA4SduZ9tTMZHoUYjFKBXIlEbf99d3lEZtMkpkysGL12P307aM01Z_iS8d8A6w2Wpuz6o5MmgoCfhhmgzRslXM4va4V6GqtOuWV0OovWIeLrDLgWGc8O1lT9RKYYGdhO7LjG-HJQEn71LgLfp-0ksrrP-xiqdoE4W0Q7kd5aER3pPN47NCA_Hlv7LcRwz1BGNx6Q8sPtgfSGrAQxNP5xvuTI43f43tUvunLjTQtKlo_z8Ma8T6B9KiW2pQ4iFykYc1DSKXchbsk2aXbclcnSR5mcSnjqI63SbKlrVIjRDKkSPsOrZiGL3injTydAh5_5VGarUnmIy4H0DoCPjNF_CIfCAKqmbQFEw-4AYG30Hnm-uMRnHfTehpO76gOV2W3yolS4xliDQNq2RQ7NsTOsXMDHavAqWMnvLGOCQusd5cAjHYeGoxWKzzacewoJSuhEc_K9HbzpvvP5gzPYClnPh0OLOB7ygocFled00J1Y2ZI4WCydzDtSVjlTMfOGC-yggFkryJpqtJovzGWqP-L3yP8qH5E0a_4mrQXbDLgN_SO5HvbS8_ufov2pOH7qAXZtMrwUUiyCOJXM-XLTJDdXv4HuTRW9kpXi6mA70ajPF-6Wh6Exdr8bBDLrbjMX7sn3YLvbYeHr_G9mRuDvCF0rNbiSIRS7awfwVpj0cv7Bc7Wzle4Y6KSv7Z6N2fvlCD2pQhfgWiF6oa6iPdRiCIhEJP__TJLMX0yrKrsqj9YFiQ3M15-WD9-0JKSt1kYspl8YGq9U0PxwWGGS2T0DkHl76K8xjXUGLQlQeTZMvpIRbwfbnKF_iO238M-yr30vdDXTDMqG6WxRqloTO_nEsPSGLwtmskoV1URV3mci5XHJgzFB7Gf65XatoWTsZ60mYW5i2Dwr0-tequL_-7AaLOnhnGfpCnfrZqilttcYrvl9RZbLzZlEcqEb5OsijivebbSogTtCmQ24LyDMxtM4D-SuFIFDzkPMx5GPN7F0aaKdjWkaRaneRTHCQ-2ITZrpTeEgxrKyhYDpLLH-tiGWmGnvSwKR3cFGNyhfdEj3bYw3psnsxo8FwPyf48WP1E">