<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/136547>136547</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Crashed when use clang to compile with a ir debug location printing pass plugin
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Wakotu
</td>
</tr>
</table>
<pre>
I write a pass plugin like following and use clang to compile with that plugin. And then clang crashed.
### Pass Plugin
My Pass Plugin to print Debug line and column location for each IR Instruction:
```cpp
#include "llvm/IR/DebugLoc.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/Instruction.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/PassManager.h"
#include "llvm/Passes/OptimizationLevel.h"
#include "llvm/Passes/PassBuilder.h"
#include "llvm/Passes/PassPlugin.h"
#include "llvm/Support/Compiler.h"
#include "llvm/Support/raw_ostream.h"
using namespace llvm;
void print_ir_loc(Instruction &Inst, int idx) {
const DebugLoc &DL = Inst.getDebugLoc();
errs() << "Before" << "\n";
unsigned line = DL.getLine();
errs() << "After" << "\n";
unsigned col = DL.getCol();
outs() << "Instruction " << idx << "\n";
outs() << "line: " << line << ", col: " << col << "\n";
outs() << "\n";
}
void print_ir_loc_for_module(Module &M) {
int idx = 0;
for (Function &F : M) {
for (auto &BB : F) {
for (auto &I : BB) {
idx += 1;
print_ir_loc(I, idx);
}
}
}
}
struct MyPass : PassInfoMixin<MyPass> {
PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM) {
print_ir_loc_for_module(M);
return PreservedAnalyses::all();
}
};
extern "C" LLVM_ATTRIBUTE_WEAK ::llvm::PassPluginLibraryInfo
llvmGetPassPluginInfo() {
return {LLVM_PLUGIN_API_VERSION, "MyPass", "v0.1", [](PassBuilder &PB) {
PB.registerOptimizerEarlyEPCallback(
[](ModulePassManager &MPM, OptimizationLevel) {
MPM.addPass(MyPass());
});
}};
}
```
### Terminal Output
Terminal Output as following. Note that the `Before` text was printed while `After` was not, which means clang crashed at `unsigned line = DL.getLine();` .
```text
Before
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0. Program arguments: /usr/lib/llvm-18/bin/clang -cc1 -triple x86_64-pc-linux-gnu -emit-obj -mrelax-all -dumpdir a- -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name hello.c -mrelocation-model pic -pic-level 2 -pic-is-pie -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debug-info-kind=constructor -dwarf-version=5 -debugger-tuning=gdb -fdebug-compilation-dir=/home/yqy/toys/cc/pass_plugin -fcoverage-compilation-dir=/home/yqy/toys/cc/pass_plugin -resource-dir /usr/lib/llvm-18/lib/clang/18 -internal-isystem /usr/lib/llvm-18/lib/clang/18/include -internal-isystem /usr/local/include -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/13/../../../../x86_64-linux-gnu/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -ferror-limit 19 -fgnuc-version=4.2.1 -fskip-odr-check-in-gmf -fcolor-diagnostics -fpass-plugin=MyPass.so -dwarf-debug-flags "/usr/lib/llvm-18/bin/clang -fpass-plugin=MyPass.so -g ./examples/hello.c -dumpdir a-" -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /tmp/hello-7eeb7e.o -x c ./examples/hello.c
1. <eof> parser at end of file
2. Optimizer
#0 0x00007f37089e73ff llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/lib/x86_64-linux-gnu/libLLVM-18.so.18.1+0xda63ff)
#1 0x00007f37089e5539 llvm::sys::RunSignalHandlers() (/lib/x86_64-linux-gnu/libLLVM-18.so.18.1+0xda4539)
#2 0x00007f37089e7b40 (/lib/x86_64-linux-gnu/libLLVM-18.so.18.1+0xda6b40)
#3 0x00007f37077f6330 (/lib/x86_64-linux-gnu/libc.so.6+0x45330)
#4 0x00007f3708ac1f7b llvm::DebugLoc::getLine() const (/lib/x86_64-linux-gnu/libLLVM-18.so.18.1+0xe80f7b)
#5 0x00007f3705345f58 print_ir_loc(llvm::Instruction&, int) (./MyPass.so+0xaf58)
#6 0x00007f3705346123 print_ir_loc_for_module(llvm::Module&) (./MyPass.so+0xb123)
#7 0x00007f370534861c MyPass::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (./MyPass.so+0xd61c)
#8 0x00007f3705348524 llvm::detail::PassModel<llvm::Module, MyPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (./MyPass.so+0xd524)
#9 0x00007f3708b6f341 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/lib/x86_64-linux-gnu/libLLVM-18.so.18.1+0xf2e341)
#10 0x00007f3710e76730 (/usr/lib/llvm-18/lib/libclang-cpp.so.18.1+0x1c1f730)
#11 0x00007f3710e6e093 clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef, llvm::Module*, clang::BackendAction, llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem>, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>, clang::BackendConsumer*) (/usr/lib/llvm-18/lib/libclang-cpp.so.18.1+0x1c17093)
#12 0x00007f37111f6c57 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/usr/lib/llvm-18/lib/libclang-cpp.so.18.1+0x1f9fc57)
#13 0x00007f370fdee546 clang::ParseAST(clang::Sema&, bool, bool) (/usr/lib/llvm-18/lib/libclang-cpp.so.18.1+0xb97546)
#14 0x00007f3711c5dcdc clang::FrontendAction::Execute() (/usr/lib/llvm-18/lib/libclang-cpp.so.18.1+0x2a06cdc)
#15 0x00007f3711bda764 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/usr/lib/llvm-18/lib/libclang-cpp.so.18.1+0x2983764)
#16 0x00007f3711cd9ced clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/usr/lib/llvm-18/lib/libclang-cpp.so.18.1+0x2a82ced)
#17 0x000056378c5003fe cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/usr/lib/llvm-18/bin/clang+0x143fe)
#18 0x000056378c4fd864 (/usr/lib/llvm-18/bin/clang+0x11864)
#19 0x000056378c4fc9f6 clang_main(int, char**, llvm::ToolContext const&) (/usr/lib/llvm-18/bin/clang+0x109f6)
#20 0x000056378c50a353 main (/usr/lib/llvm-18/bin/clang+0x1e353)
#21 0x00007f37077db1ca __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:74:3
#22 0x00007f37077db28b call_init ./csu/../csu/libc-start.c:128:20
#23 0x00007f37077db28b __libc_start_main ./csu/../csu/libc-start.c:347:5
#24 0x000056378c4fa225 _start (/usr/lib/llvm-18/bin/clang+0xe225)
clang: error: unable to execute command: Segmentation fault (core dumped)
clang: error: clang frontend command failed due to signal (use -v to see invocation)
Ubuntu clang version 18.1.8 (++20240731025043+3b5b5c1ec4a3-1~exp1~20240731145144.92)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/lib/llvm-18/bin
clang: note: diagnostic msg:
```
### Source
Source file to compile, named `hello.c`:
```cpp
#include <stdio.h>
#include <stdlib.h>
int add(int a, int b) {
if (a + b < 20) {
return a + b;
} else {
return a - b;
}
}
int main(int argc, char *argv[]) {
if (3 != argc) {
fprintf(stderr, "Usage: %s <a> <b>\n", argv[0]);
exit(1);
}
int a = atoi(argv[1]);
int b = atoi(argv[2]);
add(a, b);
return 0;
}
```
### Attached File
Preprocessed sources:
[hello-1432ad.c.log](https://github.com/user-attachments/files/19831758/hello-1432ad.c.log)
associated run scripts:
[hello-1432ad.sh.log](https://github.com/user-attachments/files/19831766/hello-1432ad.sh.log)
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzMWttzozqT_2uUFxUuEBfjhzxgO56T2uSc1CRzzqNLiAbrG5D4hMhlH76_fUsS2OBcJjOztbVTqbEtWt2_brX6IkG7jlcC4BLFaxRvL2ivD1Jd_kO_S91f5LJ4ubzGT4prwBS3tOtwW_cVF7jm3wGXsq7lExcVpqLAfQeY1VRUWEvMZNPyGvAT1wesD1QPExc4EwXWBxADLVO0O0CxwMjPzB8J3R--M9Lu7CT36PZlOmaEtIoLjbeQ9xWuuQALg8m6bwSuJaOaS4FLqTBQdsDXX_G16LTqmRlHoRWX-O6Pte0RABes7gvAiJC6fmwQ2V1_RWRn5dxItjggQj6k3PXCyvgx5QTQj4lvZdHX8GM6Y6VbKmgF6kNiQwcdIru_Ws0b_t_WXjfwCPXnppkv657XxWflmC9u9T6kv-_bViqNyG7jvOhj9idyRZ_2stMKaHOc4Wd9ZzxU0Aa6ljLAdlq4dg8fJS-cH-252teSIZJOFgUjkpifiGyw8TVePCOywmhppmPMpOgGB7yRzBBvbzAKt9bRFhXo8REiKSIrJxVjUKpzIxiFGxRujDZrKKUCRMhkDMUbYT6Geb2wu7Vwzm7kbG-MlBsu4BMSslKD-pwAJusJ_42s5-xlr1-zn5vtKIUXz-8LfJOR0Q6F2ZTJoPCRC9kYiGdEDvTPSJrRoOX2HZ_Yl1LtG7v7EEndNjSLfTv1hcE9rNn8QaqJPYikYzwwc3bYoJ7NxCMd7bU0NOu1JdrNiV6RXVuq9fqcDDscZG2gBKMB3L9zV7eObZ16SudMMfk22Ga0kFtofPtiA7JBYb5ci1Le8mcuULhxj1B4NSCz7O4UdKAeocgErV866LDqxblFN9j9dDR8jGT2aTa12wcrNFNHge6VeC3cZIAwo_Xct0-ajiECnjUo69Ib42w3N3_f7rOHh6_X628PV_t_rrL_wo6VCyzm2ynQ3fBcUfViTIN8S_EF9OmxHR-8cljBAS5arq2ku5tvX67_3Gd31_u_r77eX__1pzERImSwsNsMiJBHfxGMv2wyRySdRGhjv7upq9ytFwoq3mlQQ_wHdUVV_XJ1t6F1nVP23SAzJhnZuYWZpBe7KHd20V7lkImo27vbBS0KhzcdgVujz_3u9M8swOtnZvS4Mm6hxgR-Xj48gGq4oDX-q9dtr93js0FMu1MNs8B_Sg2uVtEHwCjxh5Cc-FjDs8ZPtHNOBwV-OpjqBiW-C6qJb58KaTPF04GzA26Aim5e5WCqzZzPxfHEx4uphgYD8rMBlJ_d3Vxl91e46_OGa0yxqYIUmFRoaqOD1q11cbJDZFdxfejzBZMmYQ5503x4rZL_AmaSJ--63mZpW0WNadZYwoLHxiG0ogyMhq2CVkkGXQcF7mSv3LCZSbtOMk6NkVQvcMcUb7VR5F5T9h0XfdO62stfuEW9U7JStMFUVX0DQncurO_6ThmUPB-xBikiu5wLRHbOqh5jAfa04m0N-DlN9knktcyrueifvUr02IOGa0_m_8Jeo6Cmzx6ta-wZDAVXmHrYK3hH8xq8UgFgj9VAlUc77eXWzJ7RGkRxorNIHkHxkoOyw4yqwnukdQ-eLTKw11AuvJLXbgAfoK7lgjkMQ1nqNbKAGrecYa_lzKvNlsHE_eCd13LAXlMq2oDXSuNzCoVbi75sqD54oJSQ2CvL1mNSmIXRKNxKgb1SSE_JXhRcVJ6hxV5jCxUTs6XyaM2pib1e2YsnLgpPG8U6FG4J9jRVFWiPtb0xqJdE2NO9ADtQgQBlABemqvG4KKX3nYsChdsJf-wVT1SVxkadrbO38TCjAmWYcVGhcFsVOfZKx8k1C84uBTeKIrI7yAYQ2b38-wWRnZYvxjUZQ2Rn2pD90IZ4JZOPoGgFv8NEgXNhM-99z3O_rechsgtS7NllEbT2ePfSaWg-P9fst2GHfcRFMlp_ktQKqKxuw044bgMjMURkt1i8_u8N2tfSXAZkr6UOpG_w-Xj2z4vAXglKSeXV3ES7YIW9shI9m7hZtCCLAHtl9523niyUxw7AvntceFVTWk-ppfIKTishO82Z2QHGDTznBijcusy06OTow849y5pWnSs7PxOU3mdaYWNyeKZNW9tQe4wMp4hkSgyvpEWhOl5hb7vff9ls9n9kf1_tt_9kX3dkv9ld77P7WxRuA-yZQnCnm3Zk5i0B8iUsJPaeMXtHHvKzYAi-KNyALE2d1lLVgTIZysQ7WWITwJCfkQU-1ge2GiChj_1n3_f9ZRku_XQFy7As8an66V6G2urOJEsb9h9c4khPRJNeDZFk6K9szUBOG-YN76x5buoiL0gXnVwEqSl61v5zQZOwLE3mdBCDM4hxHK7egvi1F_e8ErT-g4qihlPX9IsoojhcnVCQc0Plkf_rCuaRf2IdTlkvl2UShp9hzQzTxHKM4jCcMIxmWCkLymU-sdixk7W_ZsXK0Ab_ml6Q-uUyP8GIpzDiMIrLOD3vWk6opgc6515kfP-4-awsWsbpSVJyJikJSPhBU3ESejsMJe8KygNThI6ClmeC0iRgeGyQ7F6wXdCbAjaTJTjriFC4eTUlvPoIVpEE7AQrPYcVk2girQBNeX3qZ25NwfKWTNOxDSX9FO3rfusXlDF__6cWikl0stBqtiXypAyjAM-7vA8k_b9T9xd2Z0kgjAJnERNVp5E_8GGZLI9R56PCxwQekxw91rYz_oEJM2MUMgKCuYAE_FXoeiin1lXD9drV5ENjR9LJ4-0pu1-JykYoa7MJyR9AC1D3QBU7mMQmTZMm7RnfOelGFvAFxA-oHmzJ_AOiGyqqt0hOC3avFRfVVyjnw-PSZ2cMByNkQ-ybTrkWWvUdf4SvUG6EvtNzz3gsh7Cz4zXc23LLuskGd7pwT3rB_93Dvj2baXJ2a28D9mPmnkwqoKR9rfcF1KDhBxOds7-p0kaKrm9AWZ1Xv-ldS38Vnrxrmo-DICgTFi8_QuAcxlYGD4qKzrUX3wQ_c7vs_mEjhW3Qp7vt10CXq5LFyxPoWaYvC4A4Sqag70zhlt0_zCHdQ0MHH8ulrE-fvwUuXy3jKDlhi2YGZXHBCjbFtlPGLEc3dVv4GVivYVZo_RIYQv2EFSajDbWswxTPMOUFXSbRfFe7SwVTO1DBYIZq3E_p-0r89gqTVRouk8hycZCTuRmLFYNiFvUcuBPyx-EYYQ70lWa_vYMITQmDYgJ1LGbiJFymLPb9sATMWLBvKJ8nrUwp-mLiWbhhB6rGsJeNG382Rjb4UfLiE4gnvZbbL1FYwskj0xm-qCzSJPo5fkE6W5vVGUO2KoftN6psS06nkMWfzcPxg5T1EB0mof8nlfRXZXLm6MQ_WwoaxiE2mH6ONYRxeNKXBPPGosgDRvF-b1xk32mq9J7Rura62_aSdf14mNC9dAW0ptEUra4HvzqftDigMFtGKMzCUSQ5F0nSHNsJXHB9LsV9Naw9y3phepKApCjMiD-yDN9iOdPiLQXeZB1GSxRm8cg5OvMHSkiMHc-fsjsQEg9mH7cwtkcc5ksvaF4D1hKD2_qYyaahwqRafA9VA0IP19sm5xrBTCqwp6vH7fqarTuhKId4NvLEJeU1FLjorcTO9sOGZd8B9h7tGADmk6izOj-vPz--97NveS90P4gcTmmwCSyL1Nlpjcia-CTyl2Hgk9iPQkTWYR7nMQuARTT0gv_Acxv8ZyQKojiIosWKDPq5wsvo9dbZryE4KKAFblznkuFWdvzZPLABsq6h2HL1o9PmmSWF1PZq8nSKhJuuOnuX4Pwq4t6dj9tR992erUxekzABQ9AGCowSfzykSXwL7UcvKYSbThdcmm119dajmufHZ37Ghca0KFzUwnS8185nN5mlvWXEiKxxbrhg4s_vGIc7qoFkvKVByy2GuoO3CL0j2dlVopF-iqOYqoodswMiGVXV43j_tJreJTqQIUYkQOF2mHfEWNo-vkQk7XQBSg13ZN86Wg1Xy3FnNKP2hjLc5MZAw2Uw2eBBqu_Enm6h4NlWfsFk8KiItSO1tzlUS24s6LgEcy7W3G-QkTmZWyS7QPlkeDCof3Zl_a7vZVpTdoAC79xpHvJNY35-d9MNHuxnKF67c8QgCgktFmxRy8rd_n1wo9R3oDxqRbkbHLIzHm4-g1UaBss4PR5Qzhi7tO1nb14avY-qO_zvwEqSc1gDZ7K6KC7DYhWu6AVcBssoJiQmQXxxuIzAX8YRLWjJ_MAPmL9My5CsQhKEyTIl9IJfEhvOSOCnURLHiyJkPkmLPI_LOC3jFYp8aCivFybOLKSqLuzd22UQJnG0vKhpDnVn38giZMgXxjku1KUNTHlfdSjya97p7sRCc13D5Wa4Z3w6gPjghSyKucKFe29qfE_K7hguqulrXhe9qi9__SZxUOjxkvxPAAAA__-BdYIo">