[PATCH] D136554: Implement CWG2631
Fangrui Song via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Dec 29 00:32:07 PST 2022
MaskRay added a comment.
In D136554#4019135 <https://reviews.llvm.org/D136554#4019135>, @rupprecht wrote:
> [...]
> The undefined symbols before are all provided by libc++, so those are fine. After, the new undefined symbol for the lambda cannot be resolved. Depending on how the linker is invoked, this may or may not be fine -- IIUC the linker can sometimes recognize that it doesn't actually need the undefined symbol, so it doesn't matter if it can't find it.
>
> Here is the build script I'm using, although you will likely need to tweak it for your own environment:
The behavior is expected.
For `/tmp/main.o -Wl,--start-lib /tmp/b.o -Wl,--end-lib`, `b.o` is a lazy object file (with archive semantics) which is not extracted.
The result is as if the linker discards the input file, so its undefined references do not cause a linker error ([[ https://maskray.me/blog/2021-06-13-dependency-related-linker-options#z-defs | `-z defs` ]]: unresolved undefined non-weak symbol from a relocatable object file; an unextracted lazy file is not considered a relocatable object file ).
For `/tmp/main.o /tmp/b.o`, `b.o` is parsed as a relocatable object file. Its undefined reference causes by this patch (experiment locally with `git revert -n 339a7687e1c036a5f91c9d5391523b93e2e76cd3`) leads to a `-z defs` linker error.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D136554/new/
https://reviews.llvm.org/D136554
More information about the cfe-commits
mailing list