Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Compiler segfault when compiling @naked function with optional return at -O1 and above #1959

Open
Book-reader opened this issue Feb 11, 2025 · 2 comments
Assignees
Labels
Discussion needed This feature needs discussion to iron out details Lower Priority This issue has lower priority for some reason
Milestone

Comments

@Book-reader
Copy link
Contributor

fn int main()
{
  (void)test();
  return 0;
}

fn int! test() @naked
{
  return 123;
}
@Book-reader
Copy link
Contributor Author

Book-reader commented Feb 12, 2025

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

@lerno lerno self-assigned this Feb 12, 2025
@lerno lerno added Lower Priority This issue has lower priority for some reason Discussion needed This feature needs discussion to iron out details labels Feb 12, 2025
@lerno
Copy link
Collaborator

lerno commented Feb 12, 2025

As mentioned in #1955 this should not even be allowed under the current rules. So we'll see what will happen with it.

@lerno lerno added this to the 0.6.8 milestone Feb 13, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Discussion needed This feature needs discussion to iron out details Lower Priority This issue has lower priority for some reason
Projects
None yet
Development

No branches or pull requests

2 participants