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: What does zero-length array mean at file scope?


Dave Korn wrote:
> Dave Korn wrote:
>> Dave Korn wrote:
>>
>>>   ELF GAS/LD seem happy enough when presented with a ".comm foo,0" directive,
>>> but PE does rather literally what you asked, and gives you no data object,
>>> leading to i0 in the above being an undefined reference at link time.
>>   After a bit further digging, it turns out that this is because PE uses the
>> same representation for an external symbol as would represent a common of size
>> 0, so if you define such a common, it magically becomes an undefined external
>> symbol instead!

I don't see what the big deal is here: just allocate one byte to a statically-
allocated zero-length array.

>   And testing it on Linux, I see that the linker goes ahead and assigns zero
> bytes of the common area to i0, then assigns four bytes of common space to i1
> at the same address, so writing to i0[0] aliases and alters i1.  That
> certainly sounds like undefined behaviour to me!

Sure, but in that case it's clearly the user's fault: they're writing beyond
the bounds of an  array.

Andrew.


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