<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/61009>61009</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Segfault in mlir-translate llvmir.mlir on CentOS 7, custom gcc 9.2.0
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
tymcauley
</td>
</tr>
</table>
<pre>
When building [CIRCT](https://github.com/llvm/circt) on a CentOS 7 machine, I get a segfault while running the `ninja check-mlir` tests.
System:
```
$ cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)
```
C compiler (which I built myself from source, since the CentOS-provided GCC is version 4.8.5):
```
$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/opt/gcc/gcc-9.2.0/libexec/gcc/x86_64-pc-linux-gnu/9.2.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: ./configure --prefix=/opt/gcc/gcc-9.2.0 --disable-multilib --enable-languages=c,c++
Thread model: posix
gcc version 9.2.0 (GCC)
```
Setup:
```
CC_HOME=/opt/gcc/gcc-9.2.0
CC=$CC_HOME/bin/gcc
CXX=$CC_HOME/bin/g++
git clone https://github.com/llvm/circt.git
cd circt
git checkout dc8abdf8f6d1b1a0af2f331175b28efdbb06a1d7
git submodule init
git submodule update
mkdir llvm/build
cd llvm/build
cmake -G Ninja ../llvm \
-DLLVM_ENABLE_PROJECTS="mlir" \
-DLLVM_TARGETS_TO_BUILD="host" \
-DLLVM_ENABLE_ASSERTIONS=ON \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
-DCMAKE_C_COMPILER="$CC" \
-DCMAKE_CXX_COMPILER="$CXX" \
-DCMAKE_CXX_LINK_FLAGS="-Wl,-rpath,$CC_HOME/lib64 -L$CC_HOME/lib64"
ninja
ninja check-mlir
```
Right now the `llvm` submodule in `circt` points to LLVM commit bcb8a94503887250d3a818a6b631899e9233080c.
During this last step, I get a segfault, which I can reproduce by running this command:
```
$ ./bin/mlir-translate -mlir-to-llvmir -split-input-file ../mlir/test/Target/LLVMIR/llvmir.mlir
...
!0 = !{i32 2, !"Debug Info Version", i32 3}
; ModuleID = 'LLVMDialectModule'
source_filename = "LLVMDialectModule"
declare ptr @malloc(i64)
declare void @free(ptr)
define void @useInlineAsm(i32 %0) {
call void asm "foo", "r"(i32 %0)
%2 = call i8 asm "foo", "=r,r"(i32 %0)
%3 = call i8 asm "foo", "=r,r,r"(i32 %0, i32 %0)
%4 = call i8 asm sideeffect "foo", "=r,r,r"(i32 %0, i32 %0)
%5 = call i8 asm alignstack "foo", "=r,r,r"(i32 %0, i32 %0)
%6 = call i8 asm inteldialect "foo", "=r,r,r"(i32 %0, i32 %0)
%7 = call { i8, i8 } asm "foo", "=r,=r,r"(i32 %0)
ret void
}
!llvm.module.flags = !{!0}
!0 = !{i32 2, !"Debug Info Version", i32 3}
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: ./bin/mlir-translate -mlir-to-llvmir -split-input-file ../mlir/test/Target/LLVMIR/llvmir.mlir
#0 0x0000000000f51665 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /opt/circt/llvm/llvm/lib/Support/Unix/Signals.inc:565:22
#1 0x0000000000f4f4ec llvm::sys::RunSignalHandlers() /opt/circt/llvm/llvm/lib/Support/Signals.cpp:104:20
#2 0x0000000000f4fded SignalHandler(int) /opt/circt/llvm/llvm/lib/Support/Unix/Signals.inc:400:31
#3 0x00007f224004c630 __restore_rt sigaction.c:0:0
[1] 10887 segmentation fault (core dumped) ./bin/mlir-translate -mlir-to-llvmir -split-input-file
```
When running this under `gdb` I get the following backtrace:
```
$ gdb --args ./bin/mlir-translate -mlir-to-llvmir -split-input-file ../mlir/test/Target/LLVMIR/llvmir.mlir
...
(gdb) run
...
Program received signal SIGSEGV, Segmentation fault.
0x0000000000000000 in ?? ()
...
(gdb) bt
#0 0x0000000000000000 in ?? ()
#1 0x000000000076bd31 in getFastmathFlags (op=...) at /opt/circt/llvm/mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.cpp:49
#2 convertOperationImpl(mlir::Operation&, llvm::IRBuilderBase&, mlir::LLVM::ModuleTranslation&) ()
at /opt/circt/llvm/mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.cpp:145
#3 0x00000000008fcbf3 in mlir::LLVM::ModuleTranslation::convertOperation (this=0x7fffffffbd80, op=..., builder=...)
at /opt/circt/llvm/mlir/include/mlir/IR/Diagnostics.h:388
#4 0x0000000000906a14 in mlir::LLVM::ModuleTranslation::convertBlock(mlir::Block&, bool, llvm::IRBuilderBase&) [clone .localalias] ()
at /opt/circt/llvm/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp:626
#5 0x0000000000909243 in mlir::LLVM::ModuleTranslation::convertOneFunction(mlir::LLVM::LLVMFuncOp) [clone .localalias] ()
at /opt/circt/llvm/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp:871
#6 0x0000000000909d33 in mlir::LLVM::ModuleTranslation::convertFunctions (this=0x7fffffffbd80)
at /opt/circt/llvm/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp:989
#7 0x000000000090d0e3 in mlir::translateModuleToLLVMIR (module=0x1833a30, llvmContext=..., name=...)
at /opt/circt/llvm/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp:1321
#8 0x000000000042ce3a in operator() (__closure=<optimized out>, output=..., op=<optimized out>)
at /opt/gcc/gcc-9.2.0/include/c++/9.2.0/bits/char_traits.h:335
#9 std::_Function_handler<mlir::LogicalResult(mlir::Operation*, llvm::raw_ostream&), mlir::registerToLLVMIRTranslation()::<lambda(mlir::Operation*, llvm::raw_ostream&)> >::_M_invoke(const std::_Any_data &, <unknown type in /opt/circt/llvm/build/bin/mlir-translate, CU 0x2bbd3f, DIE 0x3a3b79>, llvm::raw_ostream &) (__functor=..., __args#0=<optimized out>, __args#1=...) at /opt/gcc/gcc-9.2.0/include/c++/9.2.0/bits/std_function.h:285
#10 0x00000000006ae1b8 in operator() (__args#1=..., __args#0=<optimized out>, this=0x16e5a50)
at /opt/gcc/gcc-9.2.0/include/c++/9.2.0/bits/std_function.h:263
#11 operator() (context=<optimized out>, output=..., sourceMgr=..., __closure=0x16e5a50)
at /opt/circt/llvm/mlir/lib/Tools/mlir-translate/Translation.cpp:153
#12 std::_Function_handler<mlir::LogicalResult(const std::shared_ptr<llvm::SourceMgr>&, llvm::raw_ostream&, mlir::MLIRContext*), mlir::TranslateFromMLIRRegistration::TranslateFromMLIRRegistration(llvm::StringRef, llvm::StringRef, const TranslateFromMLIRFunction&, const DialectRegistrationFunction&)::<lambda(const std::shared_ptr<llvm::SourceMgr>&, llvm::raw_ostream&, mlir::MLIRContext*)> >::_M_invoke(const std::_Any_data &, const std::shared_ptr<llvm::SourceMgr> &, llvm::raw_ostream &, <unknown type in /opt/circt/llvm/build/bin/mlir-translate, CU 0x34176e7, DIE 0x34d0268>) (__functor=..., __args#0=..., __args#1=..., __args#2=<optimized out>)
at /opt/gcc/gcc-9.2.0/include/c++/9.2.0/bits/std_function.h:285
#13 0x00000000006aaf1d in operator() (__args#2=<optimized out>, __args#1=..., __args#0=..., this=0x16e5aa8)
at /opt/gcc/gcc-9.2.0/include/c++/9.2.0/bits/std_function.h:263
#14 operator() (context=0x7fffffffc278, output=..., sourceMgr=..., this=0x16e5aa8)
at /opt/circt/llvm/mlir/include/mlir/Tools/mlir-translate/Translation.h:81
#15 mlir::<lambda(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer> >, llvm::raw_ostream&)>::operator()(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer> >, llvm::raw_ostream &) (ownedBuffer=..., os=..., __closure=<optimized out>)
at /opt/circt/llvm/mlir/lib/Tools/mlir-translate/MlirTranslateMain.cpp:122
#16 0x00000000006ab1ef in llvm::function_ref<mlir::LogicalResult(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer> >, llvm::raw_ostream&)>::callback_fn<mlir::mlirTranslateMain(int, char**, llvm::StringRef)::<lambda(std::unique_ptr<llvm::MemoryBuffer>, llvm::raw_ostream&)> >(intptr_t, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer> >, llvm::raw_ostream &) (callable=<optimized out>, params#0=..., params#1=...)
at /opt/circt/llvm/llvm/include/llvm/ADT/STLFunctionalExtras.h:44
#17 0x00000000006b6354 in operator() (this=<optimized out>, this=<optimized out>, params#1=..., params#0=...)
at /opt/circt/llvm/mlir/lib/Support/ToolUtilities.cpp:88
#18 mlir::<lambda(llvm::StringRef)>::operator()(llvm::StringRef) const (__closure=__closure@entry=0x7fffffffc660, subBuffer=...)
at /opt/circt/llvm/mlir/lib/Support/ToolUtilities.cpp:88
#19 0x00000000006b6e18 in interleave<const llvm::StringRef*, mlir::splitAndProcessBuffer(std::unique_ptr<llvm::MemoryBuffer>, mlir::ChunkBufferHandler, llvm::raw_ostream&, bool, bool)::<lambda(llvm::StringRef)>, llvm::interleave(const Container&, StreamT&, UnaryFunctor, const llvm::StringRef&) [with Container = llvm::SmallVector<llvm::StringRef, 8>; UnaryFunctor = mlir::splitAndProcessBuffer(std::unique_ptr<llvm::MemoryBuffer>, mlir::ChunkBufferHandler, llvm::raw_ostream&, bool, bool)::<lambda(llvm::StringRef)>; StreamT = llvm::raw_ostream; T = llvm::StringRef]::<lambda()> > (between_fn=..., each_fn=..., end=<optimized out>, begin=0x16f9b60)
at /opt/circt/llvm/llvm/include/llvm/Support/raw_ostream.h:219
#20 interleave<llvm::SmallVector<llvm::StringRef, 8>, mlir::splitAndProcessBuffer(std::unique_ptr<llvm::MemoryBuffer>, mlir::ChunkBufferHandler, llvm::raw_ostream&, bool, bool)::<lambda(llvm::StringRef)>, llvm::raw_ostream> (separator=..., each_fn=..., os=..., c=...)
at /opt/circt/llvm/llvm/include/llvm/ADT/STLExtras.h:2088
#21 mlir::splitAndProcessBuffer(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer> >, llvm::function_ref<mlir::LogicalResult (std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer> >, llvm::raw_ostream&)>, llvm::raw_ostream&, bool, bool) (originalBuffer=..., processChunkBuffer=..., os=...,
enableSplitting=<optimized out>, insertMarkerInOutput=insertMarkerInOutput@entry=false)
at /opt/circt/llvm/mlir/lib/Support/ToolUtilities.cpp:91
#22 0x00000000006abc1d in mlir::mlirTranslateMain (argc=<optimized out>, argc@entry=4, argv=<optimized out>, argv@entry=0x7fffffffcd48, toolName=...)
at /opt/circt/llvm/llvm/include/llvm/Support/ToolOutputFile.h:60
#23 0x00000000004076ea in main (argc=4, argv=0x7fffffffcd48) at /opt/gcc/gcc-9.2.0/include/c++/9.2.0/bits/char_traits.h:335
```
Does this point to me setting up my C compiler incorrectly? Let me know if I can provide anything else to help debug this. Thanks!
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzcW1tzozq2_jXKi8ouEDbGD3nwtSdnkk4qdu_d58klQGBNhOBIIpfz66ckgQEb57bTu6fG1R3bYknr_q0lgbGUNOWEXILxHIyXF7hU-1xcqpcswiUjLxdhHr9c_rknHIYlZTHlKQTj-eLqfrEF4yVAwV6pQgJvBtAaoHVK1b4Mh1GeAbRm7FG_RVRECqApzDnEcEG4ut3ACcxwtKecALSAVzAlCmIoSZrgkin4tKeMQFFyrhmqPYHAdzjl_8Iw2pPoYZAxKoDvQEWkkkPgLIEzs383L1KRTAvUGgS-U_2zX9EIRlhBgNZERVpEwlUuB4IwgiWxRJWg15SXz7C6AifD6RA5zhQCFCxyQQCa9nOwS8AozwrKiND0T3sa7eGVMaSC2YskLIGJyDMo81JExhKS8ogYhS37QSHyRxqTGH5bLCCV8JEISXMOR8NgONbc31Q0jSI4eLTff0htTyPAgHIoCxLV1lvcXl-vFtvdt8UCeMs0irrD19vb3Z_3s7u71T3wlgCt80Jpf0eR_TuYDtHQ0U6nIXkm0eHac-Dv_NGgiAZMW3KQ8hKg9YFa5YMngYuCCMtvi0VKFPBmsG-iFSnnCU1LQWL4RNVe0w61D-thOBgUgiT0-RVB4WAQU4lDRgZZyRRlNISDAeFmhGGeljglEnjLCKBFBNBc_7MC7gXBMczymDDNusglfbaXtKVr_1guAAXanq8GyYaosnjdjYvF7h-3N6vXDF_RGZJRTY_WIeUVsSX4-fMMRVvFlCoYsZwT-M7kHqZU2alRDG26NwvpfM1LBeMowGGcBIkfu6GLHZygxPNcdzIOUUCSOAwdH7vxpJkqyzDL45IRSDlVfeNlEWNV5Wv2EFMBK7EMWB1E6hnM8AOBg2_wuwGV4bDSCILxwlJACOFgeX39x81u9X02v17t7u5v_2e12G6MBZFBIIRaEyrq7ez-22q72W1vd_MfV9dLS77PpeqSn6w_22xW99ur2--aw-33zsqLm9k_V3a93fZ_73Qo3BP2J1X7JQmveJL3UK9-3t3eb3eL25u7q-uVfr-ZfV-eLG7ksDMWNbHNcWQCpUfqivrnzx76nz-PrdJQX199_-dufT37Vtlw8CcDaDEQBVZ7gBaduGQ09EdwcH06qBmZtU1BaH1s14bz-XZP072CPH-q64qJDt_phJset4HsO7DIKVcSqhxqd2lMz6iCYRQGeDoaO14QTNDYiT0cuAH2Q99zg-mUTJHnOYETdarTshS2olEJGZYKSkWKvhKox-qCEWEOBSlEHpcRgeFLqzBSacTBPH67EAwP2a4tNFACc8mwInBgv-cDbQkq4EAWjOoCUZRqkOhKbPLDRvxal1yA1hVQo7W2ydV9lT9UDBvzD4e17sh1IPCWECAXTObUQxBpBfVXhJYkLFNogvgPi54mlBZQ03lgsqwW8ebwxvjnalktNtG8lxQzEil7CaAKP2xJ3WnpOc5INQH1TEBts8UkYlgQWCgBwcjJMGN5BFBAddhN-ygfcxpr0kQQAlBQKHFCmFDe0JWSXHFGOZnJTC_sIQjQ2NH9EZjM6yyLMGN2CpaZFjzJ88oqACFhPrbn1vMAGiOjq1mABr3TgbcUAC3OrgLQ2PvAIqcLWdedijY6WVXSmJAkIZH6EgbjEwaY0ZRLhaOHL2HgnzCgXBEW25D6EhaThgWYzCENDGkAwWT5miPecioURJmIqmLzkFZ1hur0HVoAHCYMp7KVsTqBT2f89Zy-u17NNiuDvFSjn54kSJELpdH27e5Dv-kW-V9E7zDWVMqSSIDWEPMYUh6xMrbddCSw3MMQRw9K4IhUuLQxcRGXWdN_OUNoXnciTwXOIBZpmRGuZN1m_q0ICpDnQOfZObySsev7Y9vQeDPgzeSLtB_uBOXKKLTVGgIUNEQCP-1yqQTBGUC-cQM3O7JDO1nt0dp2teUWoPWmLLRHAFr_4PRZD9CUYyaHlEfAm439MfBmBxhFntuVeJSMSNQn8X3J7Ur_wDxmREiAgk8IVUsTFdqLrjPS0hzKnoeOpdGbqQ5fnS5fZ46R4wBv5rkHAbxKgEmC0MhxRpHvOXC3E0SqXJCdUFDSFEeK5nyoF3DMfzt7PHfBeKnj0XWCYKK7Ax2MWBNDu1UGKIhyQUwUk1hr8RfC9JW2yZwBdBqPksd6Y-s7aRzqNsm2MDrbkpyx_MlsNeuMe8c-NdZbMCxS-Vs7lUBrg6Za1aNrNSQIEhH6SGLtN44Z3Fx926y-_aHTanPin2puOwbtyzSZ3hp4a2jj_qwkoWqBAXz3SieZOPHD2HM1dUrUGkuVYbVfW6RHQV4Ab6m5oym0RyO9qVCZ1qbCqWWr3qo9pD9sc_t1W3nSxLrJ19G0lalRzh-JULcFEYbmKisYQIHhaSDjcKWCsQZVru7nendHxBxLUl1t5mnu9pPt-lpyGNppx3I63_5GE7ij8QlY2FeQRGHiaY-9TxUzfGxErZrOV-AtnedJYl9hHJgWpPH6wh7wEXEIg48Yo6q1zUBtipTnUtFIDvcaFYPgoOmoo-lU7_1Hn9N0zvLooRMm1YgJgjDP2VuhMoVgPLcnHkOWR5hhRrHUyPt1YXGiQ-V9H_kHm4yPbDJFo896n5N1ySMb4EHffP1Jk9wWv1f_YNKUSv9Y_9j7pP618vKV6P-lak2DBtgmR2rFDjlS61DhquUqrNDC247ciO8Gnoc9p47mRc4VeVZNAuuN7qey96PKuR5qnBZ0tBuhiHhYa5cbAMrFoasLdruI5bIUWkjgLfJC0Yz-P4lhXirgrQwelaooWyoZfOqlPaPg6YF0A031OW5z_BxSpbcL0R6LnRKYqgqnvAaRp1Cq2HppV0fVbl91jt6iFZp5SiPM7ok0xzf9VWvWhaLjxnzaLVuCpFQqInpqR5WYhgx4C4azMMaf5uqtoDaq1fJmR_lj_kBMZ8nNGVVtgBl_2cVYYViBK_AWJX_g-ROH6qWwB2dnQs0evvb3dXqpxQ_oPKMwjL1Ef11eraDz7GEvnEyr2OhVADb1e7dLtH9y0YTPbqf7Sd04nQ-5A43b3wB9KqKkiq00Oml0SKGgCSm3u6fzMXHD4FzKHAv3PqUOkOf6ZIzH59Hui7TzvUY7t0eP6IBV70x8e353k3ac2cDH24q9inR5zmRPFK57oG7c0gx9FguO8kjusSDxrlB6VhPWm0bn1UmDe7qHb9jdXF_d19VAJ_sRjNRakbXIM017b3BFtMrm6yTts4SNEpSn9yTpitcZtuqerNl0JH5DVbXLbX4duh6M-9ut-Vl4_Lig8DVJfxXqeiN34pNJC3ZHsYP8wNbZ90Dr8VgfWqG3KvkvBl3vCHRx4sZvgO5Zkd9QtWWSLhDj8930LwDi0atA3LTDEZoE78Tgd6vzzm3iu5BYKxY0Dac7biVrGxcOiVZy-n8lOUm0G5Ll4mVeJgkRRr-aPibmrGYXE0YUOT-nwoE3myl7pWv8_wD5Wr1S_sRJXM86NNuyv9h-pP_-VNm9YVQcqsUNpofi2z5V9o_yN3RJovO3UbXOhJ0gyavl-Hc74ihQIsxYiKOHXcI7YmfHZqlPqhdQ71hMcZqdLcM9hfNDer9HfqulFqpQYqc6tvr9Qa7tikP2ynazwAJnR4h9GHM_tpeu3hqIqwZmyy1A6832um5rMFs9K4HtVnM0aiK8e07gh743HvVXqAqGX2_-39LZ7dHZ-QvnB82NEZ3oPxRlVFFS35hpHf25wRkAPxfH5wC1n75qu44OHJrPI4dwJV66JdD3zbmKLMMuKv5SO0yPHU5csw-kXBHBCH7UaWC16VV11m1czc2QGY_vRB4RKesc-0zaN4su9iV_sNcO98te76TrE1f73gND593cWbllhbrV1m05plzLYFhtDN9t9e0Hx-JlXTWqh_a7l1t96PtE1b5Z1dzPbtFnmLE_iO17F2f2OqZL9uYd5mad_ya_ePPa1EcmanPx5vD4crPOeHnKr6khOllDop4I4aYI1rhEcLTvDvD4PLKFJKW86k6Taei_-3DgHHQ3mdzS0_bZbuu-ldNN2M8E0H9zHndixLhaEl1wOtvJE0-3m9Hoiytxq_4ipwXIyP1qL3xVg_O-1hb-R_W2HwsvsysRNKUcs-ONSWFd0Arh3jhpgsM-yL3RHlSUp-chg3JJhLrB4oGIK35bb4B7h5u-IcFMkl_QG0ybTS5Cx9udyB5XvLI90CbEIo3Oq2uuNnqMqrHHV2c89ndM8cgcGqg8Z98_fOPpbcTV9rGGX1NGTK76rad6uqc5I2fiE3PXKevaoa3hsexfcMx__sZR3yM0y5xI--iMeaIYqhxmBEpiYhSWBcxeYOsnI5RHuRAkUuwFeGt4TZQmf-D5E6RJ9Vhw9fMQiPmL2utVCJPEPDtHWAFj8xSe5jiE2z3mDxIg9yK-9OKpN8UX5NL1J5PRCE284GJ_iZN4itDYmXpBgCdj7DiRn0xjRMaO50-S6IJeIgd5DkI-ctxgHAwDHDuJ44TOBI9GxPd0oGSYsqF5ljAX6YV5Iu_Sdx1nesFwSJg0vzRCiJMnaC4ChMB4eSEuzbN8YZlKMHIYlUo2qyiqGLnc1L8OqrKg9VxQ64EemPPDb4xM7SilyjPzKxjjvItSsMvPP1loVPl3AAAA__9TK-q0">