[LLVMdev] merging globals
Chris Lattner
clattner at apple.com
Wed Oct 15 22:11:15 PDT 2008
On Oct 15, 2008, at 7:34 PM, Eli Friedman wrote:
> This bug actually manifests itself in two places: one is
> ConstantMerge, the other is the AsmPrinter. It's non-trivial to fix
> because it's really a design bug: we assume that constant==mergeable,
> which simply isn't true. There are a few different ways of fixing
> this; however, I think the only real option is to add a new
> "mergeable" linkage type.
Eli, I don't disagree with you on any specific detail here. I think
there are decent solutions to this if anyone cares enough. My only
point is that this is an existing problem with other compilers. On
darwin, for example, x and y can get the same address, because x and y
end up in the 'cstring' section which is coalesced by the linker:
static const char x[] = "foo";
static const char y[] = "foo";
void *X() { return x; }
void *Y() { return y; }
This is clearly invalid, and a well known problem. I agree that
neither LLVM nor GCC should not do this, however, noone has cared
enough to fix it yet. If anyone cares enough to do so, I'm happy to
help discuss various design points: I don't think this is very
difficult.
-Chris
More information about the llvm-dev
mailing list