[clang] [clang] improve print / dump of anonymous declarations (PR #124605)

Dmitri Gribenko via cfe-commits cfe-commits at lists.llvm.org
Tue Jan 28 08:07:13 PST 2025


gribozavr wrote:

@mizvekov It looks like this PR introduces a crash, I'm going to revert it. Here is a reproducer:

```
$ cat parser_test-42bc8e.cpp
enum a : char;
class b {
public:
  static b c;
  friend bool operator==(b, b) = default;
  a d;
};
void e() {
  b f;
  f == b::c;
}
$ clang  "-cc1" "-triple" "x86_64-grtev4-linux-gnu" "-std=gnu++20"  "-x" "c++" -analyze  -analyzer-checker=debug.DumpCFG parser_test-42bc8e.cpp
parser_test-42bc8e.cpp:10:5: warning: equality comparison result unused [-Wunused-comparison]
   10 |   f == b::c;
      |   ~~^~~~~~~
bool operator==(b, b) noexcept = default
 [B2 (ENTRY)]
   Succs (1): B1

 [B1]
   1: Unhandled anonymous declaration kind
UNREACHABLE executed at [redacted]/llvm-project/clang/lib/AST/StmtPrinter.cpp:1289!
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: [redacted]/bin/clang -cc1 -triple x86_64-grtev4-linux-gnu -std=gnu++20 -x c++ -analyze -analyzer-checker=debug.DumpCFG parser_test-42bc8e.cpp
1.      <eof> parser at end of file
 #0 0x000055f6a75d30c8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) ([redacted]/bin/clang+0x3e1d0c8)
 #1 0x000055f6a75d0c7e llvm::sys::RunSignalHandlers() ([redacted]/bin/clang+0x3e1ac7e)
 #2 0x000055f6a75d3758 SignalHandler(int) Signals.cpp:0:0
 #3 0x00007fcab9e56590 (/lib/x86_64-linux-gnu/libc.so.6+0x3f590)
 #4 0x00007fcab9ea53ac __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
 #5 0x00007fcab9e564f2 raise ./signal/../sysdeps/posix/raise.c:27:6
 #6 0x00007fcab9e3f4ed abort ./stdlib/abort.c:81:7
 #7 0x000055f6a754a360 llvm::install_out_of_memory_new_handler() ([redacted]/bin/clang+0x3d94360)
 #8 0x000055f6aaadd675 ([redacted]/bin/clang+0x7327675)
 #9 0x000055f6aaad49ec clang::Stmt::printPretty(llvm::raw_ostream&, clang::PrinterHelper*, clang::PrintingPolicy const&, unsigned int, llvm::StringRef, clang::ASTContext const*) const ([redacted]/bin/clang
+0x731e9ec)
#10 0x000055f6aa31d7b7 print_elem(llvm::raw_ostream&, (anonymous namespace)::StmtPrinterHelper&, clang::CFGElement const&) CFG.cpp:0:0
#11 0x000055f6aa31f641 print_block(llvm::raw_ostream&, clang::CFG const*, clang::CFGBlock const&, (anonymous namespace)::StmtPrinterHelper&, bool, bool) CFG.cpp:0:0
#12 0x000055f6aa31ebaf clang::CFG::print(llvm::raw_ostream&, clang::LangOptions const&, bool) const ([redacted]/bin/clang+0x6b68baf)
#13 0x000055f6a94d7b01 void clang::ento::check::ASTCodeBody::_checkBody<(anonymous namespace)::CFGDumper>(void*, clang::Decl const*, clang::ento::AnalysisManager&, clang::ento::BugReporter&) DebugCheckers.cpp:0:0
#14 0x000055f6a96dbda1 clang::ento::CheckerManager::runCheckersOnASTBody(clang::Decl const*, clang::ento::AnalysisManager&, clang::ento::BugReporter&) ([redacted]/bin/clang+0x5f25da1)
#15 0x000055f6a9441fa1 (anonymous namespace)::AnalysisConsumer::HandleCode(clang::Decl*, unsigned int, clang::ento::ExprEngine::InliningModes, llvm::DenseSet<clang::Decl const*, llvm::DenseMapInfo<clang::Decl const*, void>>*) AnalysisConsumer.cp
p:0:0
#16 0x000055f6a943f860 (anonymous namespace)::AnalysisConsumer::VisitFunctionDecl(clang::FunctionDecl*) AnalysisConsumer.cpp:0:0
#17 0x000055f6a943fd9a non-virtual thunk to (anonymous namespace)::AnalysisConsumer::VisitFunctionDecl(clang::FunctionDecl*) AnalysisConsumer.cpp:0:0
#18 0x000055f6aa73a9b6 clang::DynamicRecursiveASTVisitor::TraverseFunctionDecl(clang::FunctionDecl*) ([redacted]/bin/clang+0x6f849b6)
#19 0x000055f6aa734fe7 clang::DynamicRecursiveASTVisitor::TraverseDecl(clang::Decl*) ([redacted]/bin/clang+0x6f7efe7)
#20 0x000055f6aa741ba0 clang::DynamicRecursiveASTVisitor::TraverseFriendDecl(clang::FriendDecl*) ([redacted]/bin/clang+0x6f8bba0)
#21 0x000055f6aa735340 clang::DynamicRecursiveASTVisitor::TraverseDecl(clang::Decl*) ([redacted]/bin/clang+0x6f7f340)
#22 0x000055f6aa73e138 clang::DynamicRecursiveASTVisitor::TraverseCXXRecordDecl(clang::CXXRecordDecl*) ([redacted]/bin/clang+0x6f88138)
#23 0x000055f6aa735205 clang::DynamicRecursiveASTVisitor::TraverseDecl(clang::Decl*) ([redacted]/bin/clang+0x6f7f205)
#24 0x000055f6a943e408 (anonymous namespace)::AnalysisConsumer::HandleTranslationUnit(clang::ASTContext&) AnalysisConsumer.cpp:0:0
#25 0x000055f6a9814bb9 clang::ParseAST(clang::Sema&, bool, bool) ([redacted]/bin/clang+0x605ebb9)
#26 0x000055f6a805ed36 clang::FrontendAction::Execute() ([redacted]/bin/clang+0x48a8d36)
#27 0x000055f6a7fcbe3d clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) ([redacted]/bin/clang+0x4815e3d)
#28 0x000055f6a8145ae7 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) ([redacted]/bin/clang+0x498fae7)
#29 0x000055f6a4c88f6a cc1_main(llvm::ArrayRef<char const*>, char const*, void*) ([redacted]/bin/clang+0x14d2f6a)
#30 0x000055f6a4c854ce ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#31 0x000055f6a4c844e6 clang_main(int, char**, llvm::ToolContext const&) ([redacted]/bin/clang+0x14ce4e6)
#32 0x000055f6a4c947b7 main ([redacted]/bin/clang+0x14de7b7)
#33 0x00007fcab9e40c8a __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:74:3
#34 0x00007fcab9e40d45 call_init ./csu/../csu/libc-start.c:128:20
#35 0x00007fcab9e40d45 __libc_start_main ./csu/../csu/libc-start.c:347:5
#36 0x000055f6a4c83031 _start ([redacted]/bin/clang+0x14cd031)
Aborted
``` 

https://github.com/llvm/llvm-project/pull/124605


More information about the cfe-commits mailing list