lld-link crashes when linking clang-cl compiled thin-lto library
- Dominant language
- LLVM
- Stars
- 40.5k
- Forks
- 18.7k
- PR merge metrics
- PR metrics pending
Description
Compiler:
clang-cl: 20.1.8
Linker:
lld-link: 20.1.8
System:
Ubuntu 18.04 x64
The issue is triggered, when the static library (ZXing in this case), compiled with thin-lto is linked into a shared library or executable.
lld-link reports: LLVM ERROR: Do not know how to promote this operator's operand!
Stacktrace:
```
0. Running pass 'Function Pass Manager' on module '/cache/p/zxingc557a5da05b6f/p/lib/ZXing.libcore\CMakeFiles\ZXing.dir\src\datamatrix\DMDetector.cpp.obj2891780'.
1. Running pass 'X86 DAG->DAG Instruction Selection' on function '@"?Detect@DataMatrix@ZXing@@YA?AV?$Generator@VDetectorResult@ZXing@@@@AEBVBitMatrix@2@_N11@Z"'
#0 0x000000000174f477 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/usr/bin/lld-link+0x174f477)
#1 0x000000000174d25e llvm::sys::RunSignalHandlers() (/usr/bin/lld-link+0x174d25e)
#2 0x000000000174fdbf SignalHandler(int) Signals.cpp:0:0
#3 0x00007e9816bc4980 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x12980)
#4 0x00007e98154dae87 raise (/lib/x86_64-linux-gnu/libc.so.6+0x3ee87)
#5 0x00007e98154dc7f1 abort (/lib/x86_64-linux-gnu/libc.so.6+0x407f1)
#6 0x00000000016c3dca llvm::report_fatal_error(llvm::Twine const&, bool) (/usr/bin/lld-link+0x16c3dca)
#7 0x00000000016c3c08 (/usr/bin/lld-link+0x16c3c08)
#8 0x000000000283610b (/usr/bin/lld-link+0x283610b)
#9 0x00000000027cdf64 llvm::DAGTypeLegalizer::run() LegalizeTypes.cpp:0:0
#10 0x00000000027d1ebe llvm::SelectionDAG::LegalizeTypes() (/usr/bin/lld-link+0x27d1ebe)
#11 0x00000000027be989 llvm::SelectionDAGISel::CodeGenAndEmitDAG() (/usr/bin/lld-link+0x27be989)
#12 0x00000000027be2a4 llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (/usr/bin/lld-link+0x27be2a4)
#13 0x00000000027bbf0a llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (/usr/bin/lld-link+0x27bbf0a)
#14 0x00000000027ba3c1 llvm::SelectionDAGISelLegacy::runOnMachineFunction(llvm::MachineFunction&) (/usr/bin/lld-link+0x27ba3c1)
#15 0x0000000002c28606 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (/usr/bin/lld-link+0x2c28606)
#16 0x00000000042a23b1 llvm::FPPassManager::runOnFunction(llvm::Function&) (/usr/bin/lld-link+0x42a23b1)
#17 0x00000000042a82c3 llvm::FPPassManager::runOnModule(llvm::Module&) (/usr/bin/lld-link+0x42a82c3)
#18 0x00000000042a2b5f llvm::legacy::PassManagerImpl::run(llvm::Module&) (/usr/bin/lld-link+0x42a2b5f)
#19 0x000000000295ea8a codegen(llvm::lto::Config const&, llvm::TargetMachine*, std::function>> (unsigned int, llvm::Twine const&)>, unsigned int, llvm::Module&, llvm::ModuleSummaryIndex const&) LTOBackend.cpp:0:0
#20 0x000000000295f9a2 llvm::lto::thinBackend(llvm::lto::Config const&, unsigned int, std::function>> (unsigned int, llvm::Twine const&)>, llvm::Module&, llvm::ModuleSummaryIndex const&, llvm::FunctionImporter::ImportMapTy const&, llvm::DenseMap, llvm::detail::DenseMapPair> const&, llvm::MapVector, llvm::detail::DenseMapPair>, llvm::SmallVector, 0u>>*, bool, std::function>> (unsigned int, llvm::Twine const&)>, std::vector> const&)::$_3::operator()(llvm::Module&, llvm::TargetMachine*, std::unique_ptr>) const LTOBackend.cpp:0:0
#21 0x000000000295f7bb llvm::lto::thinBackend(llvm::lto::Config const&, unsigned int, std::function>> (unsigned int, llvm::Twine const&)>, llvm::Module&, llvm::ModuleSummaryIndex const&, llvm::FunctionImporter::ImportMapTy const&, llvm::DenseMap, llvm::detail::DenseMapPair> const&, llvm::MapVector, llvm::detail::DenseMapPair>, llvm::SmallVector, 0u>>*, bool, std::function>> (unsigned int, llvm::Twine const&)>, std::vector> const&) (/usr/bin/lld-link+0x295f7bb)
#22 0x00000000029562fe (anonymous namespace)::InProcessThinBackend::runThinLTOBackendThread(std::function>> (unsigned int, llvm::Twine const&)>, llvm::FileCache, unsigned int, llvm::BitcodeModule, llvm::ModuleSummaryIndex&, llvm::FunctionImporter::ImportMapTy const&, llvm::DenseSet> const&, std::map, std::allocator>> const&, llvm::DenseMap, llvm::detail::DenseMapPair> const&, llvm::MapVector, llvm::detail::DenseMapPair>, llvm::SmallVector, 0u>>&)::'lambda'(std::function>> (unsigned int, llvm::Twine const&)>)::operator()(std::function>> (unsigned int, llvm::Twine const&)>) const LTO.cpp:0:0
#23 0x00000000029557a3 (anonymous namespace)::InProcessThinBackend::runThinLTOBackendThread(std::function>> (unsigned int, llvm::Twine const&)>, llvm::FileCache, unsigned int, llvm::BitcodeModule, llvm::ModuleSummaryIndex&, llvm::FunctionImporter::ImportMapTy const&, llvm::DenseSet> const&, std::map, std::allocator>> const&, llvm::DenseMap, llvm::detail::DenseMapPair> const&, llvm::MapVector, llvm::detail::DenseMapPair>, llvm::SmallVector, 0u>>&) LTO.cpp:0:0
#24 0x0000000002955efe std::_Function_handler> const&, std::map, std::allocator>> const&, llvm::MapVector, llvm::detail::DenseMapPair>, llvm::SmallVector, 0u>>&)::'lambda'(llvm::BitcodeModule, llvm::ModuleSummaryIndex&, llvm::FunctionImporter::ImportMapTy const&, llvm::DenseSet> const&, std::map, std::allocator>> const&, llvm::DenseMap, llvm::detail::DenseMapPair> const&, llvm::MapVector, llvm::detail::DenseMapPair>, llvm::SmallVector, 0u>>&) (llvm::BitcodeModule, std::reference_wrapper, std::reference_wrapper, std::reference_wrapper> const>, std::reference_wrapper, std::allocator>> const>, std::reference_wrapper, llvm::detail::DenseMapPair> const>, std::reference_wrapper, llvm::detail::DenseMapPair>, llvm::SmallVector, 0u>>>)>>::_M_invoke(std::_Any_data const&) LTO.cpp:0:0
#25 0x0000000001b4ae78 std::_Function_handler (), std::__future_base::_Task_setter, std::__future_base::_Result_base::_Deleter>, std::thread::_Invoker>>, void>>::_M_invoke(std::_Any_data const&) BalancedPartitioning.cpp:0:0
#26 0x000000000179e767 std::__future_base::_State_baseV2::_M_do_set(std::function ()>*, bool*) Driver.cpp:0:0
#27 0x00007e9816bc1907 __pthread_once_slow (/lib/x86_64-linux-gnu/libpthread.so.0+0xf907)
#28 0x0000000001b4b30b std::__future_base::_Deferred_state>>, void>::_M_complete_async() BalancedPartitioning.cpp:0:0
#29 0x0000000001b4b435 std::_Function_handler llvm::ThreadPoolInterface::asyncImpl(std::function, llvm::ThreadPoolTaskGroup*)::'lambda'()>::_M_invoke(std::_Any_data const&) BalancedPartitioning.cpp:0:0
#30 0x0000000001b513a5 llvm::StdThreadPool::processTasks(llvm::ThreadPoolTaskGroup*) (/usr/bin/lld-link+0x1b513a5)
#31 0x0000000001b5267e void* llvm::thread::ThreadProxy>(void*) ThreadPool.cpp:0:0
#32 0x00007e9816bb96db start_thread (/lib/x86_64-linux-gnu/libpthread.so.0+0x76db)
#33 0x00007e98155bd61f __clone (/lib/x86_64-linux-gnu/libc.so.6+0x12161f)
```
Contributor guide
Assessment
This issue has not been assessed yet.