This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
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.