c3c
c3c copied to clipboard
Compiler segfault when compiling `@naked` function with optional return at `-O1` and above
fn int main()
{
(void)test();
return 0;
}
fn int! test() @naked
{
return 123;
}
valgrind logs because I was on my phone when I wrote this:
==183562== Thread 5:
==183562== Conditional jump or move depends on uninitialised value(s)
==183562== at 0x152002F: std::__detail::__variant::__gen_vtable_impl<true, std::__detail::__variant::_Multi_array<void (*)(llvm::DwarfCompileUnit::constructVariableDIE(llvm::DbgVariable&, bool)::$_0&&, std::variant<std::monostate, llvm::Loc::Single, llvm::Loc::Multi, llvm::Loc::MMI, llvm::Loc::EntryValue>&)>, std::tuple<std::variant<std::monostate, llvm::Loc::Single, llvm::Loc::Multi, llvm::Loc::MMI, llvm::Loc::EntryValue>&>, std::integer_sequence<unsigned long, 2ul> >::__visit_invoke(llvm::DwarfCompileUnit::constructVariableDIE(llvm::DbgVariable&, bool)::$_0&&, std::variant<std::monostate, llvm::Loc::Single, llvm::Loc::Multi, llvm::Loc::MMI, llvm::Loc::EntryValue>&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x151C818: llvm::DwarfCompileUnit::constructVariableDIE(llvm::DbgVariable&, bool) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x151B4D1: llvm::DwarfCompileUnit::createAndAddScopeChildren(llvm::LexicalScope*, llvm::DIE&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x151D7AB: llvm::DwarfCompileUnit::constructSubprogramScopeDIE(llvm::DISubprogram const*, llvm::LexicalScope*) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x14C0A9E: llvm::DwarfDebug::endFunctionImpl(llvm::MachineFunction const*) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x151464F: llvm::DebugHandlerBase::endFunction(llvm::MachineFunction const*) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x149C3AB: llvm::AsmPrinter::emitFunctionBody() (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0xED38EF: llvm::X86AsmPrinter::runOnMachineFunction(llvm::MachineFunction&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x2C406B3: llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x162B35E: llvm::FPPassManager::runOnFunction(llvm::Function&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x1630C52: llvm::FPPassManager::runOnModule(llvm::Module&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x162BA53: llvm::legacy::PassManagerImpl::run(llvm::Module&) (in /var/home/user/git/c3c/bin/c3c)
==183562==
==183562== Conditional jump or move depends on uninitialised value(s)
==183562== at 0x152002F: std::__detail::__variant::__gen_vtable_impl<true, std::__detail::__variant::_Multi_array<void (*)(llvm::DwarfCompileUnit::constructVariableDIE(llvm::DbgVariable&, bool)::$_0&&, std::variant<std::monostate, llvm::Loc::Single, llvm::Loc::Multi, llvm::Loc::MMI, llvm::Loc::EntryValue>&)>, std::tuple<std::variant<std::monostate, llvm::Loc::Single, llvm::Loc::Multi, llvm::Loc::MMI, llvm::Loc::EntryValue>&>, std::integer_sequence<unsigned long, 2ul> >::__visit_invoke(llvm::DwarfCompileUnit::constructVariableDIE(llvm::DbgVariable&, bool)::$_0&&, std::variant<std::monostate, llvm::Loc::Single, llvm::Loc::Multi, llvm::Loc::MMI, llvm::Loc::EntryValue>&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x151C818: llvm::DwarfCompileUnit::constructVariableDIE(llvm::DbgVariable&, bool) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x151BEF7: llvm::DwarfCompileUnit::createAndAddScopeChildren(llvm::LexicalScope*, llvm::DIE&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x151C08F: llvm::DwarfCompileUnit::createAndAddScopeChildren(llvm::LexicalScope*, llvm::DIE&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x151C186: llvm::DwarfCompileUnit::createAndAddScopeChildren(llvm::LexicalScope*, llvm::DIE&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x151D7AB: llvm::DwarfCompileUnit::constructSubprogramScopeDIE(llvm::DISubprogram const*, llvm::LexicalScope*) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x14C0A9E: llvm::DwarfDebug::endFunctionImpl(llvm::MachineFunction const*) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x151464F: llvm::DebugHandlerBase::endFunction(llvm::MachineFunction const*) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x149C3AB: llvm::AsmPrinter::emitFunctionBody() (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0xED38EF: llvm::X86AsmPrinter::runOnMachineFunction(llvm::MachineFunction&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x2C406B3: llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x162B35E: llvm::FPPassManager::runOnFunction(llvm::Function&) (in /var/home/user/git/c3c/bin/c3c)
==183562==
==183562== Conditional jump or move depends on uninitialised value(s)
==183562== at 0x152002F: std::__detail::__variant::__gen_vtable_impl<true, std::__detail::__variant::_Multi_array<void (*)(llvm::DwarfCompileUnit::constructVariableDIE(llvm::DbgVariable&, bool)::$_0&&, std::variant<std::monostate, llvm::Loc::Single, llvm::Loc::Multi, llvm::Loc::MMI, llvm::Loc::EntryValue>&)>, std::tuple<std::variant<std::monostate, llvm::Loc::Single, llvm::Loc::Multi, llvm::Loc::MMI, llvm::Loc::EntryValue>&>, std::integer_sequence<unsigned long, 2ul> >::__visit_invoke(llvm::DwarfCompileUnit::constructVariableDIE(llvm::DbgVariable&, bool)::$_0&&, std::variant<std::monostate, llvm::Loc::Single, llvm::Loc::Multi, llvm::Loc::MMI, llvm::Loc::EntryValue>&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x151C818: llvm::DwarfCompileUnit::constructVariableDIE(llvm::DbgVariable&, bool) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x151B4D1: llvm::DwarfCompileUnit::createAndAddScopeChildren(llvm::LexicalScope*, llvm::DIE&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x151C08F: llvm::DwarfCompileUnit::createAndAddScopeChildren(llvm::LexicalScope*, llvm::DIE&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x151D7AB: llvm::DwarfCompileUnit::constructSubprogramScopeDIE(llvm::DISubprogram const*, llvm::LexicalScope*) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x14C0A9E: llvm::DwarfDebug::endFunctionImpl(llvm::MachineFunction const*) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x151464F: llvm::DebugHandlerBase::endFunction(llvm::MachineFunction const*) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x149C3AB: llvm::AsmPrinter::emitFunctionBody() (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0xED38EF: llvm::X86AsmPrinter::runOnMachineFunction(llvm::MachineFunction&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x2C406B3: llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x162B35E: llvm::FPPassManager::runOnFunction(llvm::Function&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x1630C52: llvm::FPPassManager::runOnModule(llvm::Module&) (in /var/home/user/git/c3c/bin/c3c)
==183562==
==183562== Conditional jump or move depends on uninitialised value(s)
==183562== at 0x152002F: std::__detail::__variant::__gen_vtable_impl<true, std::__detail::__variant::_Multi_array<void (*)(llvm::DwarfCompileUnit::constructVariableDIE(llvm::DbgVariable&, bool)::$_0&&, std::variant<std::monostate, llvm::Loc::Single, llvm::Loc::Multi, llvm::Loc::MMI, llvm::Loc::EntryValue>&)>, std::tuple<std::variant<std::monostate, llvm::Loc::Single, llvm::Loc::Multi, llvm::Loc::MMI, llvm::Loc::EntryValue>&>, std::integer_sequence<unsigned long, 2ul> >::__visit_invoke(llvm::DwarfCompileUnit::constructVariableDIE(llvm::DbgVariable&, bool)::$_0&&, std::variant<std::monostate, llvm::Loc::Single, llvm::Loc::Multi, llvm::Loc::MMI, llvm::Loc::EntryValue>&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x151C818: llvm::DwarfCompileUnit::constructVariableDIE(llvm::DbgVariable&, bool) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x151BEF7: llvm::DwarfCompileUnit::createAndAddScopeChildren(llvm::LexicalScope*, llvm::DIE&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x151D7AB: llvm::DwarfCompileUnit::constructSubprogramScopeDIE(llvm::DISubprogram const*, llvm::LexicalScope*) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x14C0A9E: llvm::DwarfDebug::endFunctionImpl(llvm::MachineFunction const*) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x151464F: llvm::DebugHandlerBase::endFunction(llvm::MachineFunction const*) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x149C3AB: llvm::AsmPrinter::emitFunctionBody() (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0xED38EF: llvm::X86AsmPrinter::runOnMachineFunction(llvm::MachineFunction&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x2C406B3: llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x162B35E: llvm::FPPassManager::runOnFunction(llvm::Function&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x1630C52: llvm::FPPassManager::runOnModule(llvm::Module&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x162BA53: llvm::legacy::PassManagerImpl::run(llvm::Module&) (in /var/home/user/git/c3c/bin/c3c)
==183562==
==183562== Thread 7:
==183562== Conditional jump or move depends on uninitialised value(s)
==183562== at 0x1019212: llvm::APInt::setLowBits(unsigned int) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x143C649: computeKnownBits(llvm::Value const*, llvm::APInt const&, llvm::KnownBits&, unsigned int, llvm::SimplifyQuery const&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x143C7CB: llvm::computeKnownBits(llvm::Value const*, llvm::KnownBits&, llvm::DataLayout const&, unsigned int, llvm::AssumptionCache*, llvm::Instruction const*, llvm::DominatorTree const*, bool) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x26F0FF5: llvm::SelectionDAG::InferPtrAlign(llvm::SDValue) const (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x25CD0E1: (anonymous namespace)::DAGCombiner::visitLOAD(llvm::SDNode*) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x259B0D0: (anonymous namespace)::DAGCombiner::combine(llvm::SDNode*) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x2598DC1: llvm::SelectionDAG::Combine(llvm::CombineLevel, llvm::AAResults*, llvm::CodeGenOptLevel) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x270169A: llvm::SelectionDAGISel::CodeGenAndEmitDAG() (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x2700851: llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x26FEA0D: llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0xF8319E: (anonymous namespace)::X86DAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x2C406B3: llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (in /var/home/user/git/c3c/bin/c3c)
==183562==
==183562== Thread 2:
==183562== Invalid read of size 1
==183562== at 0x26D68E7: llvm::SelectionDAG::getMemBasePlusOffset(llvm::SDValue, llvm::TypeSize, llvm::SDLoc const&, llvm::SDNodeFlags) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x2675637: llvm::SelectionDAGBuilder::visitStore(llvm::StoreInst const&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x266F331: llvm::SelectionDAGBuilder::visit(llvm::Instruction const&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x27010F5: llvm::SelectionDAGISel::SelectBasicBlock(llvm::ilist_iterator_w_bits<llvm::ilist_detail::node_options<llvm::Instruction, false, false, void, true>, false, true>, llvm::ilist_iterator_w_bits<llvm::ilist_detail::node_options<llvm::Instruction, false, false, void, true>, false, true>, bool&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x2700851: llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x26FEA0D: llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0xF8319E: (anonymous namespace)::X86DAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x2C406B3: llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x162B35E: llvm::FPPassManager::runOnFunction(llvm::Function&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x1630C52: llvm::FPPassManager::runOnModule(llvm::Module&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x162BA53: llvm::legacy::PassManagerImpl::run(llvm::Module&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x186BBE4: LLVMTargetMachineEmit(LLVMOpaqueTargetMachine*, LLVMOpaqueModule*, llvm::raw_pwrite_stream&, LLVMCodeGenFileType, char**) (in /var/home/user/git/c3c/bin/c3c)
==183562== Address 0x4e73b5b30 is not stack'd, malloc'd or (recently) free'd
==183562==
==183562==
==183562== Process terminating with default action of signal 11 (SIGSEGV): dumping core
==183562== Access not within mapped region at address 0x4E73B5B30
==183562== at 0x26D68E7: llvm::SelectionDAG::getMemBasePlusOffset(llvm::SDValue, llvm::TypeSize, llvm::SDLoc const&, llvm::SDNodeFlags) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x2675637: llvm::SelectionDAGBuilder::visitStore(llvm::StoreInst const&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x266F331: llvm::SelectionDAGBuilder::visit(llvm::Instruction const&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x27010F5: llvm::SelectionDAGISel::SelectBasicBlock(llvm::ilist_iterator_w_bits<llvm::ilist_detail::node_options<llvm::Instruction, false, false, void, true>, false, true>, llvm::ilist_iterator_w_bits<llvm::ilist_detail::node_options<llvm::Instruction, false, false, void, true>, false, true>, bool&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x2700851: llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x26FEA0D: llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0xF8319E: (anonymous namespace)::X86DAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x2C406B3: llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x162B35E: llvm::FPPassManager::runOnFunction(llvm::Function&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x1630C52: llvm::FPPassManager::runOnModule(llvm::Module&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x162BA53: llvm::legacy::PassManagerImpl::run(llvm::Module&) (in /var/home/user/git/c3c/bin/c3c)
==183562== by 0x186BBE4: LLVMTargetMachineEmit(LLVMOpaqueTargetMachine*, LLVMOpaqueModule*, llvm::raw_pwrite_stream&, LLVMCodeGenFileType, char**) (in /var/home/user/git/c3c/bin/c3c)
==183562== If you believe this happened as a result of a stack
==183562== overflow in your program's main thread (unlikely but
==183562== possible), you can try to increase the size of the
==183562== main thread stack using the --main-stacksize= flag.
==183562== The main thread stack size used in this run was 8388608.
this doesn't seem very helpful, but maybe you can figure out what it means
As mentioned in #1955 this should not even be allowed under the current rules. So we'll see what will happen with it.
The return is not allowed, but see if you can reproduce something similar now.