[Patch][pr19848] Produce explicit comdats in clang

Rafael EspĂ­ndola rafael.espindola at gmail.com
Fri Dec 19 12:51:46 PST 2014


There is quiet a bit of history behind this.

The llvm IR until very recently had no support for comdats. This was a
problem when targeting C++ on ELF/COFF as just using weak linkage
would cause quiet a bit of dead bits to remain on the executable
(unless -ffunction-sections, -fdata-sections and --gc-sections were
used).

To fix the problem, llvm's codegen will just assume that any weak or
linkonce that is not in an explicit comdat should be output in one
with the same name as the global.

This unfortunately breaks cases like pr19848 where a weak symbol is
not expected to be part of any comdat.

Now that we have explicit comdats in the IR, we can finally get both
cases right.

This first patch just makes clang give explicit comdats to
GlobalValues where it is allowed to.

A followup patch to llvm will then stop implicitly producing comdats.

Cheers,
Rafael
-------------- next part --------------
A non-text attachment was scrubbed...
Name: t.patch
Type: text/x-patch
Size: 30116 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20141219/d6aee89b/attachment.bin>


More information about the cfe-commits mailing list