https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121331

            Bug ID: 121331
           Summary: New dialect flag: -farray-parameters-are-arrays
           Product: gcc
           Version: 16.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: foss+...@alejandro-colomar.es
  Target Milestone: ---

This is a stronger version of -farray-parameters-are-const, proposed in
<https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121271>.

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:

        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

Reply via email to