Я получаю «дамп стека» при попытке запустить программу, использующую API LLVM для генерации кода:
Stack dump:
0. Program arguments: ./llvm-playground
1. Running pass 'Simplify the CFG' on function '@foo'
0 libLLVM.dylib 0x000000010397c1e5 llvm::sys::PrintStackTrace(llvm::raw_ostream&) + 40
1 libLLVM.dylib 0x000000010397c5e8 SignalHandler(int) + 180
2 libsystem_platform.dylib 0x00007fff7d689b5d _sigtramp + 29
3 libsystem_platform.dylib 000000000000000000 _sigtramp + 2190959808
...
25 llvm-playground 0x000000010380591d main + 893
26 libdyld.dylib 0x00007fff7d49e3d5 start + 1
27 libdyld.dylib 0x0000000000000001 start + 2192972845
[1] 14917 segmentation fault ./llvm-playground
Сгенерированный ИК выглядит так:
; ModuleID = 'MyModule'
source_filename = "MyModule"
define i32 @foo(i32 %arg1) #0 {
entry:
%malloccall = tail call i8* @malloc(i64 8)
%0 = bitcast i8* %malloccall to i32*
%1 = getelementptr inbounds i32, i32* %0, i32 1
store i32 5, i32* %1
}
declare noalias i8* @malloc(i32*)
attributes #0 = { "target-cpu"="skylake" }
При компиляции того же кода IR с помощью llc
проблема может быть сразу обнаружена (отсутствует оператор возврата):
error: expected instruction opcode
}
Возможно ли иметь такое же сообщение об ошибке в дампах стека, которые создает LLVM?