[clang] [clang] [Serialization] Introduce noload_redecls (PR #170823)

Alexander Kornienko via cfe-commits cfe-commits at lists.llvm.org
Mon Dec 15 10:18:51 PST 2025


alexfh wrote:

> I ran a build of all of our code with the assertions-enabled clang. So far I'm seeing compilation timeouts on a large number of compilations. I'm trying to figure out whether this is an infinite loop or a superlinear algorithm.

The stack trace after a few minutes of execution looks like this:
```
  * frame #0: 0x000055555ae13b56 clang-checked`clang::ASTDeclMerger::MergeDefinitionData(clang::CXXRecordDecl*, clang::CXXRecordDecl::DefinitionData&&) + 694
    frame #1: 0x000055555ae1734e clang-checked`clang::ASTDeclReader::VisitClassTemplateSpecializationDeclImpl(clang::ClassTemplateSpecializationDecl*) + 1006
    frame #2: 0x000055555ae079f3 clang-checked`clang::declvisitor::Base<std::__u::add_pointer, clang::ASTDeclReader, void>::Visit(clang::Decl*) + 1235
    frame #3: 0x000055555ae071d5 clang-checked`clang::ASTDeclReader::Visit(clang::Decl*) + 21
    frame #4: 0x000055555c29eb8f clang-checked`clang::StackExhaustionHandler::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) + 47
    frame #5: 0x000055555ae2e911 clang-checked`clang::ASTReader::ReadDeclRecord(clang::GlobalDeclID) + 3409
    frame #6: 0x000055555adaa595 clang-checked`clang::ASTReader::GetDecl(clang::GlobalDeclID) + 213
    frame #7: 0x000055555ae37759 clang-checked`clang::DeclContext* clang::ASTReader::ReadDeclAs<clang::DeclContext>(clang::serialization::ModuleFile&, llvm::SmallVectorImpl<unsigned long> const&, unsigned int&) + 25
    frame #8: 0x000055555ae080ab clang-checked`clang::ASTDeclReader::VisitDecl(clang::Decl*) + 1099
    frame #9: 0x000055555ae09ef2 clang-checked`clang::ASTDeclReader::VisitValueDecl(clang::ValueDecl*) + 18
    frame #10: 0x000055555ae0a215 clang-checked`clang::ASTDeclReader::VisitDeclaratorDecl(clang::DeclaratorDecl*) + 21
    frame #11: 0x000055555ae0af0a clang-checked`clang::ASTDeclReader::VisitFunctionDecl(clang::FunctionDecl*) + 2666
    frame #12: 0x000055555ae153d6 clang-checked`clang::ASTDeclReader::VisitCXXMethodDecl(clang::CXXMethodDecl*) + 22
    frame #13: 0x000055555ae071d5 clang-checked`clang::ASTDeclReader::Visit(clang::Decl*) + 21
    frame #14: 0x000055555c29eb8f clang-checked`clang::StackExhaustionHandler::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) + 47
    frame #15: 0x000055555ae2e911 clang-checked`clang::ASTReader::ReadDeclRecord(clang::GlobalDeclID) + 3409
    frame #16: 0x000055555adaa595 clang-checked`clang::ASTReader::GetDecl(clang::GlobalDeclID) + 213
    frame #17: 0x000055555ae4b098 clang-checked`clang::ASTStmtReader::VisitMemberExpr(clang::MemberExpr*) + 152
    frame #18: 0x000055555ae5b3e1 clang-checked`clang::ASTReader::ReadStmtFromStream(clang::serialization::ModuleFile&) + 14081
    frame #19: 0x000055555adb585d clang-checked`clang::ASTReader::GetExternalDeclStmt(unsigned long) + 413
    frame #20: 0x000055555bdf8959 clang-checked`clang::FunctionDecl::getBody(clang::FunctionDecl const*&) const + 217
    frame #21: 0x000055555be05591 clang-checked`clang::FunctionDecl::getBody() const + 17
    frame #22: 0x000055555a12493d clang-checked`clang::CodeGen::CodeGenFunction::GenerateCode(clang::GlobalDecl, llvm::Function*, clang::CodeGen::CGFunctionInfo const&) + 797
    frame #23: 0x000055555a15084c clang-checked`clang::CodeGen::CodeGenModule::EmitGlobalFunctionDefinition(clang::GlobalDecl, llvm::GlobalValue*) + 396
    frame #24: 0x000055555a147ea2 clang-checked`clang::CodeGen::CodeGenModule::EmitGlobalDefinition(clang::GlobalDecl, llvm::GlobalValue*) + 514
    frame #25: 0x000055555a138856 clang-checked`clang::CodeGen::CodeGenModule::EmitDeferred() + 822
    frame #26: 0x000055555a138872 clang-checked`clang::CodeGen::CodeGenModule::EmitDeferred() + 850
    frame #27: 0x000055555a138872 clang-checked`clang::CodeGen::CodeGenModule::EmitDeferred() + 850
    frame #28: 0x000055555a138872 clang-checked`clang::CodeGen::CodeGenModule::EmitDeferred() + 850
    frame #29: 0x000055555a138872 clang-checked`clang::CodeGen::CodeGenModule::EmitDeferred() + 850
    frame #30: 0x000055555a138872 clang-checked`clang::CodeGen::CodeGenModule::EmitDeferred() + 850
    frame #31: 0x000055555a138872 clang-checked`clang::CodeGen::CodeGenModule::EmitDeferred() + 850
    frame #32: 0x000055555a138872 clang-checked`clang::CodeGen::CodeGenModule::EmitDeferred() + 850
    frame #33: 0x000055555a1351ee clang-checked`clang::CodeGen::CodeGenModule::Release() + 78
    frame #34: 0x000055555a27acee clang-checked`(anonymous namespace)::CodeGeneratorImpl::HandleTranslationUnit(clang::ASTContext&) + 46
    frame #35: 0x0000555559dd3b9a clang-checked`clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) + 154
    frame #36: 0x000055555ac77788 clang-checked`clang::ParseAST(clang::Sema&, bool, bool) + 616
    frame #37: 0x000055555a9ad5aa clang-checked`clang::FrontendAction::Execute() + 42
    frame #38: 0x000055555a92145d clang-checked`clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) + 1117
    frame #39: 0x0000555559dd316e clang-checked`clang::ExecuteCompilerInvocation(clang::CompilerInstance*) + 526
    frame #40: 0x0000555559dc65ea clang-checked`cc1_main(llvm::ArrayRef<char const*>, char const*, void*) + 1834
    frame #41: 0x0000555559dc3619 clang-checked`ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&, llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem>) + 377
    frame #42: 0x0000555559dc5dcc clang-checked`int llvm::function_ref<int (llvm::SmallVectorImpl<char const*>&)>::callback_fn<clang_main(int, char**, llvm::ToolContext const&)::$_0>(long, llvm::SmallVectorImpl<char const*>&) + 44
    frame #43: 0x000055555aae291e clang-checked`void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::__u::optional<llvm::StringRef>>, std::__u::basic_string<char, std::__u::char_traits<char>, std::__u::allocator<char>>*, bool*) const::$_0>(long) + 30
    frame #44: 0x000055555fc831dc clang-checked`llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) + 124
    frame #45: 0x000055555aae1e04 clang-checked`clang::driver::CC1Command::Execute(llvm::ArrayRef<std::__u::optional<llvm::StringRef>>, std::__u::basic_string<char, std::__u::char_traits<char>, std::__u::allocator<char>>*, bool*) const + 260
    frame #46: 0x000055555aa9f453 clang-checked`clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const + 595
    frame #47: 0x000055555aa9f6df clang-checked`clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::__u::pair<int, clang::driver::Command const*>>&, bool) const + 127
    frame #48: 0x000055555aab9dc0 clang-checked`clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::__u::pair<int, clang::driver::Command const*>>&) + 352
    frame #49: 0x0000555559dc2c1e clang-checked`clang_main(int, char**, llvm::ToolContext const&) + 6206
```

I can look a bit closer tomorrow.

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


More information about the cfe-commits mailing list