<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/151744>151744</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
New dialect flag: -farray-parameters-are-arrays
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
alejandro-colomar
</td>
</tr>
</table>
<pre>
GCC ticket: <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121331>
Cc: @AaronBallman
This is a stronger version of -farray-parameters-are-const, proposed in
<https://github.com/llvm/llvm-project/issues/151526>.
It would make array parameters work as real arrays in every way: sizeof(), typeof(), _Generic(), ...
This would affect the function scope, but not it's callers.
Let's write some examples, to make it clear:
```c
void
f(int size, char buf[size], pid_t pid)
{
if (stprintf(buf, _Countof(buf), "/proc/%d/", pid) == -1)
return;
...
return;
}
char *a = malloc(100);
f(100, a, 0); // Ok; at call site pointers are valid.
void
g(int size, char buf[size], pid_t pid)
{
buf = NULL; // error: assignment to expression with array type
}
void
h(char *buf;
int size, char buf[size], pid_t pid); // error: redeclaration with different type
void
i(char buf[];
int size, char buf[size], pid_t pid); // okay
void
i(char buf[size];
int size, char buf[size], pid_t pid); // okay
```
This is a breaking change, so it must be opt-in.
However, there shouldn't be much code that is relying on the old behavior, as most of it is already diagnosed by default.
---
With this flag enabled, the only difference with real arrays would be that these could be null. Other than that, they'd be real arrays.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJysVU2P2zYQ_TX0ZWBBoix_HHTw2nFaYJFcWvS4GFEjiTFFCiRlx_n1BSlrvWlSFEUWMCyJH--9eUPOoHOy1UQlK55YcVzg6DtjS1T0BXVtzVIYZXq0i8rUt_Lj4QBeijN5lu-B5YfO-8GxfM_4ifFTK0TS6jExtmX8VI3tN6kUMn5ynbm-VGObiFay_CRrlh8znuV5xvIPLN2zdH8QEXKV7tEa_YRK9ahhmvujkw6kAwTnrdEtWbiQddJoMA0sG7QWb8sBLfbkybolWloKo51n_ACDNYNxVIPUAe4H0dJ3Y5UI0zN-UuoyP5aDNV9IeMZP0rmRHOOnrMgKvmb5h2QS9ruHqxlVDT2eCaIMeMiAq7FnQAeWUE2zDqQGupC9wRVvIWInv5FpGN8yvgtq_W347vvlI2myUjxGkiR5Y8vEj01DwoPvCJpRCx-sccIMFDZUowdtPEjP-MaBQKXIujvIM02jVys9gTM9AX3FflAh4AN4M8UmPQhFaINtcR9bp9NPxO_dxch6egvipfYxsgAhOrRQjQ0rnuJQcYxZkfWLD_8hqriPbZ7uL-lONsD41vnBSu0DYNgf3DiYUXvzOhINYZwzfhqsETGjRR0f_M7C-A5YfmT5EZbZgyz-LPnRapY_iGdzfza7Od5DT3cxJsb3GKChR6UC-TZL08Aw72jmoQNg-LtPAkwnDz6fwxf6mBJwIQGDkTqeHbQEF1SyTl5JHxa372BxNTZR_Kc_n5_fiiJrTUgzTKWhJ-3DKaCvgyUX79xV-u5-2MNp_dGdh9CO8e3sVdA3OwPwP-X_TKClmoRCi_5VVS2bhmyUPCv7XpCcBU10geo9NJkz3v6bbQZ6T8b5Gv6zUlaW8Cx1G2B1GwmcCde4H52HisAMfin1_XT9Zq6hKsUb35ElcF2oK5rxTVzcj6IDYWoC36EPDJbULcAbHauOUTVU1OFFmoiCDnrjfKjPMq5HZQnrG9QSWx3LcXWDmhoclb-LWC6X08tfIZU-hNIobIE0VorquzgwWt1eEy1oSvzbEjuVxOqu1XfkCMQ8pkelEoDPIcywQMdVd-wb45u46g1csqjLvN7lO1xQmW2KVbrhWbpbdGVG6Wq9SpFzLHiNKefFelvzRmR8VRPfLGTJU16k2zTLtlmRbhNMdxmtm7RYcRLbNbJVSj1KlYSGE9rmIraaMiuyzWq1UFiRcrE1c67pCnE2lLbiuLBl7FLV2Dq2SpV03j1gvPSKyk90DX6r0BqCk-HS_Eu3nGJdjFaVv9Qeg-xLyf8OAAD__yazjpc">