<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/104802>104802</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
infinite recursion on invalid class
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang,
crash-on-invalid
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
kadircet
</td>
</tr>
</table>
<pre>
```cpp
$ cat prep.cc
class foo {
foo a;
virtual int c();
};
```
$ ~/repos/llvm/build/bin/clang -xc++ -std=c++20 prep.cc
prep.cc:2:7: error: field has incomplete type 'foo'
2 | foo a;
| ^
prep.cc:1:7: note: definition of 'foo' is not complete until the closing '}'
1 | class foo {
| ^
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/local/google/home/kadircet/repos/llvm/build/bin/clang-20 -cc1 -triple x86_64-unknown-linux-gnu -emit-obj -dumpdir a- -disable-free -clear-ast-before-backend -main-file-name prep.cc -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 -fdebug-compilation-dir=/usr/local/google/home/kadircet/repos/tmp/clangd_crashes/real_inf_Rec -fcoverage-compilation-dir=/usr/local/google/home/kadircet/repos/tmp/clangd_crashes/real_inf_Rec -resource-dir /usr/local/google/home/kadircet/repos/llvm/build/lib/clang/20 -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14 -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/x86_64-linux-gnu/c++/14 -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/backward -internal-isystem /usr/local/google/home/kadircet/repos/llvm/build/lib/clang/20/include -internal-isystem /usr/local/include -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/14/../../../../x86_64-linux-gnu/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -std=c++20 -fdeprecated-macro -ferror-limit 19 -fgnuc-version=4.2.1 -fno-implicit-modules -fskip-odr-check-in-gmf -fcxx-exceptions -fexceptions -fcolor-diagnostics -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /tmp/prep-f2a347.o -x c++ prep.cc
1. prep.cc:4:2: current parser token ';'
2. prep.cc:1:1: parsing struct/union/class body 'foo'
#0 0x0000561ebe915988 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /usr/local/google/home/kadircet/repos/llvm/llvm/lib/Support/Unix/Signals.inc:723:13
#1 0x0000561ebe91355e llvm::sys::RunSignalHandlers() /usr/local/google/home/kadircet/repos/llvm/llvm/lib/Support/Signals.cpp:106:18
#2 0x0000561ebe916038 SignalHandler(int) /usr/local/google/home/kadircet/repos/llvm/llvm/lib/Support/Unix/Signals.inc:413:1
#3 0x00007f29492591a0 (/lib/x86_64-linux-gnu/libc.so.6+0x3d1a0)
#4 0x0000561ec2041d81 AddInteger /usr/local/google/home/kadircet/repos/llvm/llvm/include/llvm/ADT/FoldingSet.h:355:7
#5 0x0000561ec2041d81 AddPointer /usr/local/google/home/kadircet/repos/llvm/llvm/include/llvm/ADT/FoldingSet.h:346:5
#6 0x0000561ec2041d81 Profile /usr/local/google/home/kadircet/repos/llvm/clang/include/clang/AST/DeclarationName.h:69:8
#7 0x0000561ec2041d81 Profile /usr/local/google/home/kadircet/repos/llvm/llvm/include/llvm/ADT/FoldingSet.h:238:7
#8 0x0000561ec2041d81 Equals /usr/local/google/home/kadircet/repos/llvm/llvm/include/llvm/ADT/FoldingSet.h:420:3
#9 0x0000561ec2041d81 llvm::FoldingSet<clang::detail::CXXSpecialNameExtra>::NodeEquals(llvm::FoldingSetBase const*, llvm::FoldingSetBase::Node*, llvm::FoldingSetNodeID const&, unsigned int, llvm::FoldingSetNodeID&) /usr/local/google/home/kadircet/repos/llvm/llvm/include/llvm/ADT/FoldingSet.h:554:12
#10 0x0000561ebe8860bc llvm::FoldingSetBase::FindNodeOrInsertPos(llvm::FoldingSetNodeID const&, void*&, llvm::FoldingSetBase::FoldingSetInfo const&) /usr/local/google/home/kadircet/repos/llvm/llvm/lib/Support/FoldingSet.cpp:288:9
#11 0x0000561ec2040f9e clang::DeclarationNameTable::getCXXDestructorName(clang::CanQual<clang::Type>) /usr/local/google/home/kadircet/repos/llvm/clang/lib/AST/DeclarationName.cpp:327:13
#12 0x0000561ec2055bc7 clang::CXXRecordDecl::getDestructor() const /usr/local/google/home/kadircet/repos/llvm/clang/lib/AST/DeclCXX.cpp:2022:34
#13 0x0000561ec2055a89 clang::CXXRecordDecl::hasConstexprDestructor() const /usr/local/google/home/kadircet/repos/llvm/clang/lib/AST/DeclCXX.cpp:602:10
#14 0x0000561ec13d2ad2 bool clang::Sema::CheckCompletedCXXClass(clang::Scope*, clang::CXXRecordDecl*)::$_0::operator()(clang::CXXMethodDecl*) const::'lambda'(clang::QualType, auto&&)::operator()<'lambda'(clang::QualType, auto&&)&>(clang::QualType, auto&&) const /usr/local/google/home/kadircet/repos/llvm/clang/lib/Sema/SemaDeclCXX.cpp:7056:13
#15 0x0000561ec13d2bb1 bool clang::Sema::CheckCompletedCXXClass(clang::Scope*, clang::CXXRecordDecl*)::$_0::operator()(clang::CXXMethodDecl*) const::'lambda'(clang::QualType, auto&&)::operator()<'lambda'(clang::QualType, auto&&)&>(clang::QualType, auto&&) const /usr/local/google/home/kadircet/repos/llvm/clang/lib/Sema/SemaDeclCXX.cpp:0:16
#16 0x0000561ec13d2bb1 bool clang::Sema::CheckCompletedCXXClass(clang::Scope*, clang::CXXRecordDecl*)::$_0::operator()(clang::CXXMethodDecl*) const::'lambda'(clang::QualType, auto&&)::operator()<'lambda'(clang::QualType, auto&&)&>(clang::QualType, auto&&) const /usr/local/google/home/kadircet/repos/llvm/clang/lib/Sema/SemaDeclCXX.cpp:0:16
#17 0x0000561ec13d2bb1 bool clang::Sema::CheckCompletedCXXClass(clang::Scope*, clang::CXXRecordDecl*)::$_0::operator()(clang::CXXMethodDecl*) const::'lambda'(clang::QualType, auto&&)::operator()<'lambda'(clang::QualType, auto&&)&>(clang::QualType, auto&&) const /usr/local/google/home/kadircet/repos/llvm/clang/lib/Sema/SemaDeclCXX.cpp:0:16
#18 0x0000561ec13d2bb1 bool clang::Sema::CheckCompletedCXXClass(clang::Scope*, clang::CXXRecordDecl*)::$_0::operator()(clang::CXXMethodDecl*) const::'lambda'(clang::QualType, auto&&)::operator()<'lambda'(clang::QualType, auto&&)&>(clang::QualType, auto&&) const /usr/local/google/home/kadircet/repos/llvm/clang/lib/Sema/SemaDeclCXX.cpp:0:16
#19 0x0000561ec13d2bb1 bool clang::Sema::CheckCompletedCXXClass(clang::Scope*, clang::CXXRecordDecl*)::$_0::operator()(clang::CXXMethodDecl*) const::'lambda'(clang::QualType, auto&&)::operator()<'lambda'(clang::QualType, auto&&)&>(clang::QualType, auto&&) const /usr/local/google/home/kadircet/repos/llvm/clang/lib/Sema/SemaDeclCXX.cpp:0:16
#20 0x0000561ec13d2bb1 bool clang::Sema::CheckCompletedCXXClass(clang::Scope*, clang::CXXRecordDecl*)::$_0::operator()(clang::CXXMethodDecl*) const::'lambda'(clang::QualType, auto&&)::operator()<'lambda'(clang::QualType, auto&&)&>(clang::QualType, auto&&) const /usr/local/google/home/kadircet/repos/llvm/clang/lib/Sema/SemaDeclCXX.cpp:0:16
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWktz47gR_jXwBQUVCZKSeNBBlqzsVGU3zniS6KYCgSaFNQgwAOjRXPLbUwD1tmd2dl6pythliyRe_XV_je6mDOacbDTADBW3qFjesN5vjZ09MiEtB39TGfFhhsbJ8Mu7DiVLlMwRzTFnHncWuhHnQyNXzDlcG4PR5HZowvGRoez4_CSt75nCUnvMEZ0iWh570WR5uj_IPAn8D6IrC51xiK6UemoRXVW9VCJcpUZ0xRXTDSY7jugtoreYOC9Qttw_0uQS7uEhm1OUzScom2Ow1thwU0tQAm-Zw1Jz03YKPGD_oQOM6KQ2BtHJQSGMKUaTxTNFw09o398Vd9dS04NUbTyEq4Baauml0djUJ0FYujAEH3H02kuF_RYwV8ZJ3YSxwXbnoNIo_EVKDsiOmO7_ejd_uMOur1rpMcNV3-BgaOuxN3jrfedQNkd0heiqkX7bVyNu2hML4UI6a34H7hFdSed6CCRhpkUwoOoFDHgtc1tcMf7oLeOA6CJSYg0H50BgZ3o7NIeZzDnDJfMgsO01dtzKzo8GyA-e8Ucs-rYLyGJTMsL31jSWtZjZpm9B-wAbI7rqnQ0wDWcqqGBMowDR1da04XJw9s9yL0ITTDhPMfFWdgrwbjrejHPS60dt3muipO53pNE9JtBKT0z1OyYBp5AWM4KJkI5VCkhtATDhCpglzHlSQW0skGAc0AKTlklNaqmAaNbCwXUxaS0ERYKbkNYIULiTHJNOcqLgCRSmw4N0pJOASVtb1gLpjNQeLMqWTClM6pb5LQFrtcGkrjvCjQ6ceJQtjcak1oZY02shdUPCWExabrTztufeWMKUZA4cJnWv30stiA9KOZQtKSae2QY84V0frEPGOSa-1xAbGtBgA2ABVd80YEOX1A3Klo2oMKljOwnOLtWgpZAB9pfQ6NvuwJvYROeLfmmBqY3U9eYtcExqbp7AsgZ-pFALg68HOd_CQ5WsDkIRXQUfjXRrpoh0H5yH9kxKHNtwjuhq771Hr0V0leaIrkaj5x_7nRzkDBE1Dv6-kl6Y9eOEn0sKtmb88T2z4pNCvxmDJySfI-9zhn6hPV4Y-1wa7MINfy7141R-evafF_E83Ydg0lngIYWQlnEbYl3M8UTJkOrSEpO60T0nT2CdNBply3xER-kQAGXbKcmlD3G2VzHauUfZESMs4Vvgj0Rq0rR1iCG7HYEdhy4EjzDw4oEbZSwRkjXaOC95aGNCWCcbTJabzV8Wi80v83_ebZb_mr9d0c1i9WYzf_gVZcsUE4OPQSUkAVJTluWTkcFkhw-VzkVhk46GHH8qNfJ9kYN5by1ojztmHVjszSPoWD1kt8fqgT6bnu7_4rRQbwxpIBCgg9Gi2zqHQ7H4rEBCNEtwskuSJCnGKVRQpkU5neLo_tkcZXP3wQ0391ZqHzP7u6E8mJ4GWfZ-Y5y3wFpEx6FEkNojWn7N1jtc4sZ46LtQ8SC6-oeWu9AgG82UG0kdbDChWbBCdtIqvdIqKwp4Sau3vR6W-oVpocC6oer9DsAPiEOZns3TZBw-pyfE9ArxOMmm-AIbotMfa9Y8jWY9Ycz2GCc1LfOSFmXKEhwttl_whXCkZMVHzozGiN4mu0ykLAmvFftyF9EsP1Oc0yRPxTTFcyHeaA8NfFUC3l9OYW7fMF--Q3S1MipUUA_gR1uUzbOiiEX_UdviI8Duh2rtxwHLg68UJ2Djl4DdWxMK0q9BdchvZ0l23zJ_CLiWwBWzsQT7jbUQwY1LlM3P3HjynbD9KYvRbHpJ5fQlVHf_7plyPwxUTpNA5glU-RKoU4w6TUfZYiAitgvwTKrhfrFeP3TAJVOBkLudtwxld0Pfb0bAoOJFrD4te8sc4PjegOg8BO2PDTqt94mBofvN8rBeTAK9jt9fiCEbfGpanPAt4trnUVEUIemm9CxfXKbB6XScVPwPDLKSWgT4f7NvtAPr783HLP2CbZ6MFNGa4z-2_Kntja7N2TLfIxOcmWpIVXQaNlN5Zqv0ynGTugR85qFXceJdePscehrwi_V6CYdX1dCN6PRs7oLpv_dMXbr8uw8dBL_-OoUPwWzQ-OWQNqichaLrsp6glzoXRcUn5zov1uu3wI0VYcWjsidN93VF5O57KLFYrw98JZTGrHGGPrtGz6blH6DfMrcIYGHX2f-FGuOExjrpTIuLSiHNBGWC4soYda7KA7Rsr1R4C1jsv5gTi_V6EQrhS3d74KY7RLWP2iN0l0MHovkmGW5NB5YdTXLlxev1r-C35mz-ftvuV5ko1laChUr8YmLw_ejtdIFZ703c5uOj-CuZ2eJLVqLjuJc-a_C3ZjqyM1wu6Z4kxfh6zxXXfFdV-sr3_wffwajp-Izs8SvZPw_Zk1eyfx6yp69k_zxkl69k_zRk0-SV7J-C7KtTHzdilokyK9kNzNIJzZMpTdPyZjur-HjKEsGqOq-zvKirbJLWwASDMsuTCbuRM5qE8WmZFnlalCNRJgmrRUHLRIi6ylCeQMukGgWwI2Obm3hgYZYm-TShN4pVoFw8D0PpXhGK6CI8Wea2xGgi9RNTUoSOYnljZ_EARNU3DuWJks6709peegUzqePRDsAWeB__04SNxvtlhlMaN71Vsy8_a7FH_zSj_w0AAP__zV7yeQ">