MaskRay added a comment. > [...] all functions with that attribute end up in a single section, defeating > the linker GC.
This can be made preciser. Say we have __attribute__((section("foo"))) void f(i) {} __attribute__((section("foo"))) void g() {} `f` and `g` don't use COMDAT, therefore they are in the same section `foo` in Clang and GCC (coarse-grained). This `foo` section is retained or discarded as a unit. Considering the whole link, a `foo` section in a translation unit can be discarded. I suspect that some people may find the new behavior surprising, so an option is probably needed. Ideally inform GCC about this new toggle as well. I think ThinLTO's `comdat nodeduplicate` handling is great. In D108879 <https://reviews.llvm.org/D108879> I noted an interesting issue related to regular LTO. I haven't tested more scenarios about regular LTO. If you want to use it at scale, consider more testing. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D143745/new/ https://reviews.llvm.org/D143745 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits