<div dir="ltr">Supporting the oldest form doesn't seem to be a priority for a warning - if you have a very old codebase, probably not worth building it with warnings enabled. Updating code to use more modern/idiomatic forms is within scope for Clang's warnings, within reason, I think.<br><br>- Dave</div><br><div class="gmail_quote"><div dir="ltr">On Fri, Dec 28, 2018 at 1:26 PM Jay K via cfe-users <<a href="mailto:cfe-users@lists.llvm.org">cfe-users@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">




<div dir="ltr">
<div style="font-family:Calibri,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
<span>This is an old topic:<br>
</span>
<div><br>
</div>
<div><a href="http://clang-developers.42468.n3.nabble.com/Warray-bounds-seems-over-zealous-on-Clang-td3162669.html" target="_blank">http://clang-developers.42468.n3.nabble.com/Warray-bounds-seems-over-zealous-on-Clang-td3162669.html</a><br>
</div>
<div><br>
</div>
<div>But some points were left not covered.<br>
</div>
<div><br>
</div>
<div>1. "code hygiene" I'd say is that, the code should<br>
</div>
<div>just be portable to "all" compilers, and have the same meaning<br>
</div>
<div>with all of them, with a minimum of ifdefs.<br>
</div>
<div><br>
</div>
<div>2. Furthermore, regarding "same meaning" to all of them,<br>
</div>
<div>there are these choices:<br>
</div>
<div><br>
</div>
<div>typedef struct A1 {<br>
</div>
<div>  int a;<br>
</div>
<div>  int b[0];<br>
</div>
<div>} A1;<br>
</div>
<div><br>
</div>
<div>typedef struct A2 {<br>
</div>
<div>  int a;<br>
</div>
<div>  int b[];<br>
</div>
<div>} A2;<br>
</div>
<div><br>
</div>
<div>typedef struct A3 {<br>
</div>
<div>  int a;<br>
</div>
<div>  int b[1];<br>
</div>
<div>} A3;<br>
</div>
<div><br>
</div>
<div>int a1 = sizeof(A1);<br>
</div>
<div>int a2 = sizeof(A2);<br>
</div>
<div>int a3 = sizeof(A3);<br>
</div>
<div><br>
</div>
<div>They are all valid with clang and probably gcc.<br>
</div>
<div>But they are not likely all valid with additional compilers and through time.<br>
</div>
<div>[1] seems like the most portable and oldest form, and might as well just keep using it indefinitely.</div>
<div><br>
</div>
<div>But it gets a warning.</div>
<div>If one were to ifdef clang to avoid it, one would lose interopation across compilers, as</div>
<div>the various forms do not have the same meaning.</div>
<div>Everyone would have to compile with the same compiler/defines.<br>
</div>
<div>Else the types would vary in size.<br>
</div>
<div><br>
</div>
<div>So I come back to believing that the best choices are either:<br>
</div>
<div> - do not warn for size=1 at end of aggregate<br>
</div>
<div> - possibly a separate setting for specifically that<br>
</div>
<div><br>
</div>
<span>That is what gcc does also it appears (both).</span><br>
</div>
<div style="font-family:Calibri,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
<span><br>
</span></div>
<div style="font-family:Calibri,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
<span>I ran across all this exact situation -- ifdef gnuc/clang in some code, with comment that everyone has to compile the same, chosing between 0 and 1 for zero sized array.</span></div>
<div style="font-family:Calibri,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
<br>
</div>
<div style="font-family:Calibri,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
<br>
</div>
<div style="font-family:Calibri,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
<span>Thank you,</span></div>
<div style="font-family:Calibri,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
<span> - Jay</span></div>
</div>

_______________________________________________<br>
cfe-users mailing list<br>
<a href="mailto:cfe-users@lists.llvm.org" target="_blank">cfe-users@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-users" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-users</a><br>
</blockquote></div>