[LLVMdev] Incorrect loop optimization when building the Linux kernel

Joerg Sonnenberger joerg at britannica.bec.de
Mon Dec 8 09:06:37 PST 2014


On Mon, Dec 08, 2014 at 02:03:28AM -0800, David Majnemer wrote:
> Nick, consider:
> 
> char a[0];
> char b[0];
> 
> at run-time:
> (gdb) p &a
> $1 = (char (*)[]) 0x60103c
> (gdb) p &b
> $2 = (char (*)[]) 0x60103c
> 
> Even if this is not safe at the C or C++ level, this comparison could
> return equal or not equal depending on what the linker chooses to do.

It is invalid C as is the original code. If you want to play such linker
games, mark one of the objects involved as weak.

Joerg



More information about the llvm-dev mailing list