<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/62331>62331</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[clang++] crash when compiling templated method in templated class
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
FerdinandSpitzschnueffler
</td>
</tr>
</table>
<pre>
When compiling the source code below with the command `clang++ essence.cpp`, the compiler crashes with a segmentation fault.
## Affected Versions
clang-15, clang-16, clang-17
## Source code
```cxx
// file essence.cpp
template <typename>
struct SomeImpl {};
template <template <typename> class T1>
class A1 {
public:
template <typename T2>
void b(T1<T2> = T1<T2>());
};
template <>
template <typename T2>
void A1<SomeImpl>::b(SomeImpl<T2>) {}
void bug1() {
A1<SomeImpl> a;
a.b<int>();
//When providing an argument the compiler does not crash.
//a.b<int>(SomeImpl<int>());
}
int main() {}
```
## Crash Report
```
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-17/bin/clang -cc1 -triple x86_64-pc-linux-gnu -emit-obj -mrelax-all -disable-free -clear-ast-before-backend -disable-ll
vm-verifier -discard-value-names -main-file-name essence.cpp -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 -debugger-tuning=gdb -fcoverage-compilation-dir=/home/user/Development/tmp -resource-dir /usr/lib/llvm-17/lib/clang/17 -internal-isystem /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12 -internal-i
system /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/x86_64-linux-gnu/c++/12 -internal-isystem /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../..
/include/c++/12/backward -internal-isystem /usr/lib/llvm-17/lib/clang/17/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_
64-linux-gnu/12/../../../../x86_64-linux-gnu/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-extern
c-isystem /usr/include -fdeprecated-macro -fdebug-compilation-dir=/home/user/Development/tmp -ferror-limit 19 -fgnuc-version=4.2.1 -fcxx-exceptions -f
exceptions -fcolor-diagnostics -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /tmp/essence-6e6535.o -x c++ essence.cpp
1. essence.cpp:18:14: current parser token ')'
2. essence.cpp:16:13: parsing function body 'bug1'
3. essence.cpp:16:13: in compound statement ('{}')
#0 0x00007fb09e422ac6 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/usr/lib/llvm-17/bin/../lib/libLLVM-17.so.1+0xc22ac6)
#1 0x00007fb09e420c60 llvm::sys::RunSignalHandlers() (/usr/lib/llvm-17/bin/../lib/libLLVM-17.so.1+0xc20c60)
#2 0x00007fb09e42315b (/usr/lib/llvm-17/bin/../lib/libLLVM-17.so.1+0xc2315b)
#3 0x00007fb09d042520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
clang++-17: error: unable to execute command: Segmentation fault (core dumped)
clang++-17: error: clang frontend command failed due to signal (use -v to see invocation)
Ubuntu clang version 17.0.0 (++20230417095441+43ac269bdd00-1~exp1~20230417215605.872)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
clang++-17: note: diagnostic msg:
********************
PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang++-17: note: diagnostic msg: /tmp/essence-99723d.cpp
clang++-17: note: diagnostic msg: /tmp/essence-99723d.sh
clang++-17: note: diagnostic msg:
********************
```
## Compile Command
```sh
# Crash reproducer for Ubuntu clang version 17.0.0 (++20230417095441+43ac269bdd00-1~exp1~20230417215605.872)
# Driver args: "--driver-mode=g++" "-c" "essence.cpp" "-emit-llvm" "-Xclang" "-disable-llvm-passes"
# Original command: "/usr/lib/llvm-17/bin/clang" "-cc1" "-triple" "x86_64-pc-linux-gnu" "-emit-llvm-bc" "-emit-llvm-uselists" "-disable-free" "-clear-ast-before-backend" "-disable-llvm-verifier" "-discard-value-names" "-main-file-name" "essence.cpp" "-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" "-debugger-tuning=gdb" "-fcoverage-compilation-dir=/home/user/Development/tmp" "-resource-dir" "/usr/lib/llvm-17/lib/clang/17" "-internal-isystem" "/usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12" "-internal-isystem" "/usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/x86_64-linux-gnu/c++/12" "-internal-isystem" "/usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/backward" "-internal-isystem" "/usr/lib/llvm-17/lib/clang/17/include" "-internal-isystem" "/usr/local/include" "-internal-isystem" "/usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../x86_64-linux-gnu/include" "-internal-externc-isystem" "/usr/include/x86_64-linux-gnu" "-internal-externc-isystem" "/include" "-internal-externc-isystem" "/usr/include" "-fdeprecated-macro" "-fdebug-compilation-dir=/home/user/Development/tmp" "-ferror-limit" "19" "-fgnuc-version=4.2.1" "-fcxx-exceptions" "-fexceptions" "-fcolor-diagnostics" "-disable-llvm-passes" "-faddrsig" "-D__GCC_HAVE_DWARF2_CFI_ASM=1" "-o" "essence.bc" "-x" "c++" "essence.cpp"
"/usr/lib/llvm-17/bin/clang" "-cc1" "-triple" "x86_64-pc-linux-gnu" "-emit-llvm-bc" "-emit-llvm-uselists" "-disable-free" "-clear-ast-before-backend" "-disable-llvm-verifier" "-discard-value-names" "-main-file-name" "essence.cpp" "-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" "-debugger-tuning=gdb" "-fcoverage-compilation-dir=/home/user/Development/tmp" "-fdeprecated-macro" "-fdebug-compilation-dir=/home/user/Development/tmp" "-ferror-limit" "19" "-fgnuc-version=4.2.1" "-fcxx-exceptions" "-fexceptions" "-fcolor-diagnostics" "-disable-llvm-passes" "-faddrsig" "-D__GCC_HAVE_DWARF2_CFI_ASM=1" "-x" "c++" "essence-5c4631.cpp"
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWV1v27jS_jXKDUFDovwRX-TCieNtgezbosnuvncBRY5kbiVSIKnEPRf72w-G-rDsON5s291zDlCgcKQZcuYZfszMU3HnVKEBrqLZdTRbX_DGb4292oCVSnMt72vl_-XEVjeQ5yXYi8zIL1e_bUETYapalUoXxG-BONNYAUQYCSSD0jyTZ-W3QSVMVXEtSTSPRcl1EbHriF0TcA60gImo62geR-ymH1yrEiwRlrstuNYMJw6KCrTnXhlNct6UfhLF6yhedb8sjVhKVnkOwoMkv4J1ymg3HhOc02SGrrrn-eh5ccLe_T6qA-08bv-J3a4fv4nYhuSqhIPAgtJDVZfcA4nSG_-lBs0riNLbVum8bYQn96aC91VdkmhxHS3WUXo9dnhg4bQ1DMM58pAMllvBKgkmg4QQUjdZqUSUrgYJOWWQPLDBDo55MkqSLGKXaP8mKEmUrsn-NWKXEVvivwH62TAG83_mPrheoZ9-jVCVrqJ0hYD2wh7Hsl_DkecWf1MkLcyDJXlhnPABN6r5JIvSG6X9PspB3e57uA-1NU9K4n3gmnBbNHheD8-0NOCINr493JMDG0deRmEdeD5a31GISntScaVHEQ4D-vN64ojfIBTyCWpj_ckz3r5-vLtd3d8S12SV8oTjWhIbJhFvyNb72uGehFAK5bdNNhGmitimLJ_6P7S25ncQPmIb5VwDDq8MZgalRdlIaBcr4Mm4-OwtF4AXtLZQWyPwXsku0aAYZ3LnjFAcr7xtNHHCqrrPDPeei89ENlU9HPd4EsXLj9YUllfDHiFw3ITGWQSqsh5usojYJsMV3YQcQagQCaHeqroEsrucP86ntBa0VLrZ0UI3hEKlPDXZ74RWFkq-o7wsCZXK8awEmlsAQkUJ3FLuPM0gNxYoBgta7seVZXdqK_oEVuUKbFAKbiV94mUDFG-JIxQ3nGLWCYJx6mkRGBEyJq2MhJLUShBaK0FLeIKSsPZFOVorILTKLa-A1kZpDzZK1wF7XnG_pWCtNoTmeU2F0bgzPkrXRhPaIs21odY0Gs8_xRmEVsLoNrkZS3mpuEPAeaOflZbUY6AuSteMUM9tAZ6KusFFpfMpob7REAQFaLAIW0LWFAVYVCldROm6kBmhuTBPYHkBtL1lbbhSIf6IbbamgrC1gHu7xrBNjZsesY2vakIttAcKp7x-CNr3rnptkgWhYY00L6lyX5yHaj-3PTCTyTCtECJim-64DGcF7bB-4NFPdx_QZVssw-Cx0652_J2uT8x6Dc13x9HX1NMLgR64-PzMrTyH4s82cW__rBUjePm2oWfCbiN66yacWKiX7mGHD-IljNe38Pzs11x03cSrjgjNJdQWBKZhWnFhTRBlTfGVlzIHa42lpcJakywJzQvdCMyF2NRF6Xo6YZMEL_9uR2EnoEYHmF1arAciYUpjqVS80MZ5JVDGpbROFYSuHx9_url5fLf69fZx_dvq04Y93mzeP67uf47SdUKoIS2miG263ErnMJ-ls4khdEfEiV42IEiw0Iyl6Sq5xJ8pFhvRWIvNQc2tA0u8-QyaRGwRCnzXh7ITFub4k6IFnImtRt5oEVpi7MvRRNvjdDbSszZU28Nj1ibOcw-hYQntw6LrHlpIfbsQk3gXx3G8yLN4CVPGuJiTUN9DN-a-uPbho1Xah-r70Jbwy_0gy58fjfMWeBWx0H5je4P9Cvo9W4NHF6tU2d3drz_TZDFxZpJE7DreiYBnjDc5whuLeXwK76dG36tC8_Id17IE6_oW6tshocsxJHYEKU1m2ffwg3bGftKxHxlP2YzFnZ_WzIkUU6pMoM15sBmmDCZHxA1xpSsSrig-NBpLOXaBsAPR-IHwofL-BW1DFMJYCI0ZyLd4aJuv3BrtsU3q-WTOVQmSyCY4d2EH0XrjgNCnIAMgSj91TdDg6pes0b7pzHZJhSSLSTzp1ghBsJil8TRZxMvZdIrLPE25YPNlJmUc0-QP2NXJH_0glszm8WxyuWCDk4fQ1CD8E41iN2RrgUsSerNwqY1THZ98r53nZQlyrexBe4rn4ZX10sYD_t2nOlK5Yuh9I_YN_0bEoGMCq4eH1c078vDulmw-3N19-O39__1ENu_vbu_Jw4cgvv7lJ_Lp9uOHTw8Dho-nOvlLh5ft1W5-GGCBhH4WJOF-MPkX1uFlLl8uFyyV-7T9PYy57ddu0PfapnNsr6Wi-Ddc0VOErw9gzw7DrslGgCW5seQfuT_ofW3VE1gkah1HY5TKIAuEBjlA3xayoBXdw7jmdarAzFoy2gr-v9ug9m1PvZCncueQnbI9lA9WFQoTzCi54YA30MYBnEj6x5ZCdm-n8sMxaJqJl7LGQamcd8cxIM0cnL5CNk_G3ZPNkfKYcvaqQ-L5-rK_IKGdolZDQAMh7QRsrGjJ6WDtBEXtdSOiOoiO6eqgOKarg4MTpHWY9IK6Dts5ENj9ltL5dFB3ZLZ77yjtsMiniO3g85vobW9lTHI72V9gSa2NY9pzbOdvo73_EQB_Qn7_CxZloMBvxfJ2Ovxmi4fU-B9clNcJ8gsQR0T3GMy5LX-rpW913V31YxI9UnwtlR5MjAh1J0uWg_IUud4noAOKvTf4UvSCaJ-vre2kjon37-f5eD_KHNWbfXHcdQ_ioC84rEvDf7v_qN4_qvf_QPX-kRjenBjOXn86E9N5mhxkgYH0XMirVC7TJb-Aq2R-ydLZbJGwi-3VYiqmyRJS4FKm80vO4_kiTRcyS_JsIXJ2oa5aFsOQ7MTx5WTGs5xxkSZZkrCMzaNpDBVX5QTDnBhbXISvX1dzlqbJRckzKF34_s6YhmcSlAhwtr6wV236aAoXTeOQLvZWvPJl-HA_YprRbN19QXs--kbffWWVpAK_NZIoPZKFT8UXjS2vvv5LXgjn3wEAAP__J2G1bQ">