Open
Description
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)