This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Undefined behavior in genautomata.c?


Daniel Berlin <dberlin@dberlin.org> writes:

| > | 
| > |   Do you suppose the idiom is common enough that VRP could special-case
| > | "arrays of size 1 at the end of a struct" ?
| > 
| > it could be array of size 2, 3, 4, 5, ...
| 
| Except that anything but array of size 1 is not "such a C idomatic
| construct than I would not have expected any "optimizer" to break it."

Well, I've certainly come across many implementation of array like
structures using the aboce trick.  
Consider the following

    struct string_base {
        int size;
        char data[1];
    };

in that structure (assuming an int is 4-byte wide), there are still
room for 3 more char.  So it was written

    struct string_base {
       int size;
       char data[sizeof(int)];
    };

To take advantage of the full sizeof(string_base).  In fact, some
libraries use numbers like 16 of 32 instead of sizeof(int).  Some of
them are even used for the implementation of C++ codes. 

-- Gaby


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]