Skip to content

infinite recursion on invalid class #104802

Closed
@kadircet

Description

@kadircet

$ 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    clang:frontendLanguage frontend issues, e.g. anything involving "Sema"confirmedVerified by a second partycrash-on-invalidregression:19Regression in 19 release

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions