Skip to content

Segmentation fault while compiling va_arg instruction #61021

Open
@zyedidia

Description

@zyedidia

The following LLVM IR causes a segmentation fault:

; ModuleID = 'test.d'
source_filename = "test.d"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-linux-gnu"

; [#uses = 0]
; Function Attrs: uwtable
define { i64, i8* } @_D4test3fooFPvZAya(i8* %ap_arg) #0 {
  %ap = alloca i8*, align 8                       ; [#uses = 2, size/byte = 8]
  store i8* %ap_arg, i8** %ap, align 8
  %1 = load i8*, i8** %ap, align 8                ; [#uses = 1]
  %2 = va_arg i8* %1, { i64, i8* }                ; [#uses = 1]
  ret { i64, i8* } %2
}

attributes #0 = { uwtable "frame-pointer"="all" "target-cpu"="x86-64" "target-features"="+cx16" }

!llvm.ident = !{!0}

!0 = !{!"ldc version 1.32.0-git-0e9f031"}

This is generated by trying to access a string argument inside a va_list using va_arg. The string type is a struct containing an i64 and an i8*.

Here is the backtrace:

$ llc test.ll
PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash backtrace.
Stack dump:
0.      Program arguments: /usr/bin/llc test.ll
1.      Running pass 'Function Pass Manager' on module 'test.ll'.
2.      Running pass 'X86 DAG->DAG Instruction Selection' on function '@_D4test1xFPvZAya'
 #0 0x00007f6eac497ae3 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/lib/x86_64-linux-gnu/libLLVM-12.so.1+0xbd9ae3)
 #1 0x00007f6eac495df0 llvm::sys::RunSignalHandlers() (/lib/x86_64-linux-gnu/libLLVM-12.so.1+0xbd7df0)
 #2 0x00007f6eac49814a (/lib/x86_64-linux-gnu/libLLVM-12.so.1+0xbda14a)
 #3 0x00007f6eab8b01f0 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x141f0)
 #4 0x00007f6eac427c71 llvm::LLT::print(llvm::raw_ostream&) const (/lib/x86_64-linux-gnu/libLLVM-12.so.1+0xb69c71)
 #5 0x00007f6eacaf1c35 (/lib/x86_64-linux-gnu/libLLVM-12.so.1+0x1233c35)
 #6 0x00007f6eacaf5f54 llvm::SelectionDAGBuilder::visitRet(llvm::ReturnInst const&) (/lib/x86_64-linux-gnu/libLLVM-12.so.1+0x1237f54)
 #7 0x00007f6eacaf41e7 llvm::SelectionDAGBuilder::visit(llvm::Instruction const&) (/lib/x86_64-linux-gnu/libLLVM-12.so.1+0x12361e7)
 #8 0x00007f6eacb82cb9 llvm::SelectionDAGISel::SelectBasicBlock(llvm::ilist_iterator<llvm::ilist_detail::node_options<llvm::Instruction, false, false, void>, false, true>, llvm::ilist_iterator<llvm::ilist_detail::node_options<llvm::Instruction, false, false, void>, false, true>, bool&) (/lib/x86_64-linux-gnu/libLLVM-12.so.1+0x12c4cb9)
 #9 0x00007f6eacb8266a llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (/lib/x86_64-linux-gnu/libLLVM-12.so.1+0x12c466a)
#10 0x00007f6eacb803a6 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (/lib/x86_64-linux-gnu/libLLVM-12.so.1+0x12c23a6)
#11 0x00007f6eae69e515 (/lib/x86_64-linux-gnu/libLLVM-12.so.1+0x2de0515)
#12 0x00007f6eac7a451e llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (/lib/x86_64-linux-gnu/libLLVM-12.so.1+0xee651e)
#13 0x00007f6eac5bf58d llvm::FPPassManager::runOnFunction(llvm::Function&) (/lib/x86_64-linux-gnu/libLLVM-12.so.1+0xd0158d)
#14 0x00007f6eac5c4f73 llvm::FPPassManager::runOnModule(llvm::Module&) (/lib/x86_64-linux-gnu/libLLVM-12.so.1+0xd06f73)
#15 0x00007f6eac5bfbdf llvm::legacy::PassManagerImpl::run(llvm::Module&) (/lib/x86_64-linux-gnu/libLLVM-12.so.1+0xd01bdf)
#16 0x000000000040e724 main (/usr/bin/llc+0x40e724)
#17 0x00007f6eab354565 __libc_start_main ./csu/../csu/libc-start.c:332:16
#18 0x000000000040c1ee _start (/usr/bin/llc+0x40c1ee)
Segmentation fault (core dumped)

Metadata

Metadata

Assignees

No one assigned

    Labels

    crashPrefer [crash-on-valid] or [crash-on-invalid]llvm:codegen

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions