https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118975
Bug ID: 118975 Summary: -undef is passed to the linker Product: gcc Version: 14.2.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: driver Assignee: unassigned at gcc dot gnu.org Reporter: nate at thatsmathematics dot com Target Milestone: --- When the `-undef` option is given to gcc for a command that involves linking, the option is passed to the linker as well as the compiler. This makes no sense as `-undef` should only affect preprocessing, and it causes the linker to misbehave. When running `gcc -undef -v m.c` for a file `m.c` containing only `int main(void) { }` in my test, the linker command line is: /usr/libexec/gcc/aarch64-unknown-linux-gnu/14/collect2 [...] -undef .../Scrt1.o [...] GNU ld parses this as equivalent to `--undefined=.../Scrt1.o`, so the path `.../Scrt1.o` is treated as a symbol to be undefined, rather than as a file to be linked. I get a message about the `_start` entry point being undefined, and the resulting executable doesn't work. Tested locally with Gentoo's ebuild of 14.2.1_p20241221 p7 on arm64, but also reproducible with all recent versions on godbolt, e.g. https://godbolt.org/z/3s6qGex8o