Your commit 103140

Hi Chris, your commit 103140 broke PR397 for llvm-gcc (in LLVM 2.9) and
dragonegg. In the PR, asm renaming creates two linkonce functions with
the same asm name (in the IR they are @"\01lstat64" and "@lstat64". What
used to happen is that they were both output to the assembler file, both
with the name lstat64, exactly like GCC does. The assembler and linker
are perfectly happy about this, presumably because the functions have weak
linkage. What happens now is that compilation fails with "label emitted
multiple times to assembly file".

Do you agree that it is reasonable to support outputting multiple functions
with the same name, as long as they have weak linkage?

Ciao, Duncan.

PS: The alternative is to follow clang and have the front-end take care of
dropping one of the functions, rather than leaving it to the linker.

If you can implement this I think it is better. Having two functions
with the same name can cause problems to libLTO for example. Which
function should it use?

Cheers,
Rafael

Hi Chris, your commit 103140 broke PR397 for llvm-gcc (in LLVM 2.9) and
dragonegg.

Wow, this is an old patch :).

In the PR, asm renaming creates two linkonce functions with
the same asm name (in the IR they are @"\01lstat64" and "@lstat64". What
used to happen is that they were both output to the assembler file, both
with the name lstat64, exactly like GCC does. The assembler and linker
are perfectly happy about this, presumably because the functions have weak
linkage. What happens now is that compilation fails with "label emitted
multiple times to assembly file".

Do you agree that it is reasonable to support outputting multiple functions
with the same name, as long as they have weak linkage?

No, I don't. I think that an IR module should be required to be well defined and obey the rules. For GCC/clang (and any other compilers that support things like asm renaming and USER_LABEL_PREFIX), I think it is best for the frontend to not use the "\01" prefix in a case that conflicts with the normal USER_LABEL_PREFIX. For example, on an _'y system, if asm-renamed to "_foo", the IR name should be just @"foo", not "\01_foo".

-Chris

Hi Chris,