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

Alejandro Colomar <alx at kernel dot org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |alx at kernel dot org

--- Comment #49 from Alejandro Colomar <alx at kernel dot org> ---
For reading the counted_by value, that is, for reading the number of elements
in the FAM, I'm implementing a __lengthof__ operator, which returns the value
that the typical ARRAY_SIZE() macro returns, but also works with FAMs declared
with this attribute (and I also want to make it work on function parameters
declared as arrays).

Consider that for your design of a builtin for setting the counted_by value,
since you don't need to have a built-in for reading the value.  ;)

<https://inbox.sourceware.org/gcc-patches/p33myw2zqvtysc3ayfygcvarw4ka3wwltycqjyehdgy64wsgug@ewi3uvid6rrb/T/>

That is, __lengthof__ should be useful in all of the following cases:

    #define memberof(T, m)  (((T *) NULL)->m)

    struct s {
        size_t n;
        int fam[] __attribute__((counted_by(n)));
    };

    __attribute__((access(read_only, 3, 4)))
    void
    f(size_t n1, int p[n1], int q[], size_t n2)
    {
        int       a[3];
        size_t    m;
        struct s  *s;

        m = offsetof(struct s, fam) + sizeof(memberof(struct s, fam)[0]) * 7;
        s = malloc(m);

        assert(__lengthof__(a) == 3);
        assert(__lengthof__(p) == n1);
        assert(__lengthof__(q) == n2);
        assert(__lengthof__(memberof(struct s, fam)) == m);
    }

Reply via email to