Skip to content

LDC build fails when using LTO with GCC #5074

@davispuh

Description

@davispuh

Build LDC with CXXFLAGS="-flto=auto" using GCC and build will fail with:

[141/249] Linking CXX executable bin/ldc2
FAILED: [code=1] bin/ldc2 
: && /usr/bin/c++ -flto=auto -DDMDV2 -Wl,--dependency-file=CMakeFiles/ldc2.dir/link.d obj/ldc2.o -o bin/ldc2  lib/libldc.a  -lLLVM-21  -L/usr/lib  -Wl,--export-dynamic  /usr/lib/ldc_rt.dso.o  -L/usr/lib  -L/usr/lib/llvm20/lib/clang/20/lib/x86_64-pc-linux-gnu  -lphobos2-ldc-shared  -ldruntime-ldc-shared  -Wl,-rpath,/usr/lib  -Wl,--gc-sections  -lrt  -ldl  -lpthread  -lm  -m64  -ldl && :
/usr/bin/ld: /usr/lib/gcc/x86_64-pc-linux-gnu/15.2.1/../../../../lib/Scrt1.o: in function `_start':
(.text+0x1b): undefined reference to `main'
/usr/bin/ld: obj/ldc2.o: in function `D main':
main.d:(.text._Dmain+0x1): undefined reference to `cppmain()'
/usr/bin/ld: obj/ldc2.o: in function `ConfigFile::readConfig(char const*, char const*, char const*)':
main.d:(.text._ZN10ConfigFile10readConfigEPKcS1_S1_+0x15c): undefined reference to `ConfigFile::sectionMatches(char const*, char const*)'
/usr/bin/ld: obj/ldc2.o: in function `dmd.root.string.toCStringThen!(driver.configfile.ConfigFile.readConfig(const(char)*, const(char)*, const(char)*).__lambda_L195_C67).toCStringThen(const(char)[])':
main.d:(.text._D3dmd4root6string__T13toCStringThenS6driver10configfile10ConfigFile10readConfigMRPxaQdQfZ17__lambda_L195_C67ZQDlMFNbAxaZb[_D3dmd4root6string__T13toCStringThenS6driver10configfile10ConfigFile10readConfigMRPxaQdQfZ17__lambda_L195_C67ZQDlMFNbAxaZb]+0x55): undefined reference to `ConfigFile::sectionMatches(char const*, char const*)'
/usr/bin/ld: obj/ldc2.o: in function `extraLDCSpecificSemanticAnalysis(Array<Module*>&)':
main.d:(.text._Z32extraLDCSpecificSemanticAnalysisR5ArrayIP6ModuleE+0x40): undefined reference to `hasComputeAttr'
/usr/bin/ld: main.d:(.text._Z32extraLDCSpecificSemanticAnalysisR5ArrayIP6ModuleE+0x4c): undefined reference to `dcomputeSemanticAnalysis(Module*)'
/usr/bin/ld: main.d:(.text._Z32extraLDCSpecificSemanticAnalysisR5ArrayIP6ModuleE+0x75): undefined reference to `runAllSemanticAnalysisPlugins(Module*)'

I'm guessing it's because of mismatched compiler/linker because if I build with Clang then it works without any issues.
CXX=clang++ - works with LTO.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions