Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

clang-18 frontend segfault (tryCaptureVariable) #90669

Closed
mhx opened this issue Apr 30, 2024 · 4 comments · Fixed by #93206
Closed

clang-18 frontend segfault (tryCaptureVariable) #90669

mhx opened this issue Apr 30, 2024 · 4 comments · Fixed by #93206
Labels
c++20 clang:frontend Language frontend issues, e.g. anything involving "Sema" concepts C++20 concepts confirmed Verified by a second party crash Prefer [crash-on-valid] or [crash-on-invalid]

Comments

@mhx
Copy link

mhx commented Apr 30, 2024

Apologies for not providing a shorter test case, but I came across this ICE while working on a project and cvise only managed to get the preprocessed output from 280k to 100kLOC. This is the code that reproduces the crash: scanner-pp.cpp.gz To reproduce:

$ clang++-18 -std=c++20 -c scanner-pp.cpp

The code crashes just about every clang-18 I've tried (gentoo clang-18.1.4, ubuntu clang-18.1.2, every clang-18 / clang-trunk on compiler explorer). It compiles fine with clang-17.

Here's the stack trace from a run on compiler explorer:

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: /opt/compiler-explorer/clang-18.1.0/bin/clang++ -gdwarf-4 -g -o /app/output.s -mllvm --x86-asm-syntax=intel -S --gcc-toolchain=/opt/compiler-explorer/gcc-13.2.0 -fcolor-diagnostics -fno-crash-diagnostics -std=c++20 <source>
1.	<eof> parser at end of file
2.	/usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/type_traits:89286:23: instantiating function definition 'dwarfs::make_unique_logging_object<dwarfs::scanner::impl, dwarfs::scanner_, std::tuple<dwarfs::debug_logger_policy, dwarfs::prod_logger_policy>, dwarfs::worker_group &, std::shared_ptr<dwarfs::segmenter_factory>, std::shared_ptr<dwarfs::entry_factory>, std::shared_ptr<const dwarfs::os_access>, std::shared_ptr<dwarfs::script>, const dwarfs::scanner_options &>'
3.	/usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/type_traits:89264:3: instantiating function definition 'dwarfs::logging_class_factory<dwarfs::scanner_, dwarfs::unique_ptr_policy<dwarfs::scanner::impl>, std::tuple<dwarfs::debug_logger_policy, dwarfs::prod_logger_policy>, 2>::create<dwarfs::worker_group &, std::shared_ptr<dwarfs::segmenter_factory>, std::shared_ptr<dwarfs::entry_factory>, std::shared_ptr<const dwarfs::os_access>, std::shared_ptr<dwarfs::script>, const dwarfs::scanner_options &>'
4.	/usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/type_traits:89247:22: instantiating function definition 'dwarfs::unique_ptr_policy<dwarfs::scanner::impl>::create<dwarfs::scanner_<dwarfs::prod_logger_policy>, dwarfs::logger &, dwarfs::worker_group &, std::shared_ptr<dwarfs::segmenter_factory>, std::shared_ptr<dwarfs::entry_factory>, std::shared_ptr<const dwarfs::os_access>, std::shared_ptr<dwarfs::script>, const dwarfs::scanner_options &>'
5.	/usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/type_traits:27767:7: instantiating function definition 'std::unique_ptr<dwarfs::scanner_<dwarfs::prod_logger_policy>>::~unique_ptr'
6.	/usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/type_traits:27611:7: instantiating function definition 'std::default_delete<dwarfs::scanner_<dwarfs::prod_logger_policy>>::operator()'
7.	/usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/type_traits:99724:30: instantiating function definition 'dwarfs::scanner_<dwarfs::prod_logger_policy>::scan'
8.	/usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/type_traits:53611:6: instantiating function definition 'dwarfs::queued_for_each<dwarfs::sortable_span<const std::shared_ptr<dwarfs::inode>, unsigned int>, (lambda at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/type_traits:99855:11), (lambda at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/type_traits:99888:11)>'
9.	/usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/type_traits:99855:11: instantiating function definition 'dwarfs::scanner_<dwarfs::prod_logger_policy>::scan(filesystem_writer &, const std::filesystem::path &, progress &, std::optional<std::span<const std::filesystem::path>>, std::shared_ptr<const file_access>)::(anonymous class)::operator()()::(anonymous class)::operator()<std::shared_ptr<dwarfs::inode>>'
 #0 0x000000000351ae38 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x351ae38)
 #1 0x0000000003518f84 llvm::sys::CleanupOnSignal(unsigned long) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x3518f84)
 #2 0x0000000003467018 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #3 0x000070661f642520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #4 0x000000000610f721 clang::Sema::tryCaptureVariable(clang::ValueDecl*, clang::SourceLocation, clang::Sema::TryCaptureKind, clang::SourceLocation, bool, clang::QualType&, clang::QualType&, unsigned int const*) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x610f721)
 #5 0x000000000613bbbd clang::Sema::BuildDeclRefExpr(clang::ValueDecl*, clang::QualType, clang::ExprValueKind, clang::DeclarationNameInfo const&, clang::NestedNameSpecifierLoc, clang::NamedDecl*, clang::SourceLocation, clang::TemplateArgumentListInfo const*) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x613bbbd)
 #6 0x000000000613c23c clang::Sema::BuildDeclRefExpr(clang::ValueDecl*, clang::QualType, clang::ExprValueKind, clang::DeclarationNameInfo const&, clang::CXXScopeSpec const*, clang::NamedDecl*, clang::SourceLocation, clang::TemplateArgumentListInfo const*) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x613c23c)
 #7 0x00000000061411f7 clang::Sema::BuildDeclarationNameExpr(clang::CXXScopeSpec const&, clang::DeclarationNameInfo const&, clang::NamedDecl*, clang::NamedDecl*, clang::TemplateArgumentListInfo const*, bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x61411f7)
 #8 0x00000000066cf6f2 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformDeclRefExpr(clang::DeclRefExpr*) SemaTemplateInstantiate.cpp:0:0
 #9 0x00000000066ad7fb clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformExpr(clang::Expr*) SemaTemplateInstantiate.cpp:0:0
#10 0x00000000066d04d5 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCXXDependentScopeMemberExpr(clang::CXXDependentScopeMemberExpr*) SemaTemplateInstantiate.cpp:0:0
#11 0x00000000066ad63f clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformExpr(clang::Expr*) SemaTemplateInstantiate.cpp:0:0
#12 0x00000000066b69e4 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCallExpr(clang::CallExpr*) SemaTemplateInstantiate.cpp:0:0
#13 0x00000000066ad70a clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformExpr(clang::Expr*) SemaTemplateInstantiate.cpp:0:0
#14 0x00000000066b853b clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformBinaryOperator(clang::BinaryOperator*) SemaTemplateInstantiate.cpp:0:0
#15 0x00000000066ad5c9 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformExpr(clang::Expr*) SemaTemplateInstantiate.cpp:0:0
#16 0x00000000066d8acb clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformRequiresExpr(clang::RequiresExpr*) SemaTemplateInstantiate.cpp:0:0
#17 0x00000000066add36 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformExpr(clang::Expr*) SemaTemplateInstantiate.cpp:0:0
#18 0x00000000066b8b6b clang::Sema::SubstConstraintExpr(clang::Expr*, clang::MultiLevelTemplateArgumentList const&) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x66b8b6b)
#19 0x0000000005e64f91 calculateConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, clang::SourceLocation, clang::MultiLevelTemplateArgumentList const&, clang::Expr const*, clang::ConstraintSatisfaction&)::'lambda'(clang::Expr const*)::operator()(clang::Expr const*) const SemaConcept.cpp:0:0
#20 0x0000000005e6638d clang::ActionResult<clang::Expr*, true> calculateConstraintSatisfaction<calculateConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, clang::SourceLocation, clang::MultiLevelTemplateArgumentList const&, clang::Expr const*, clang::ConstraintSatisfaction&)::'lambda'(clang::Expr const*)>(clang::Sema&, clang::Expr const*, clang::ConstraintSatisfaction&, calculateConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, clang::SourceLocation, clang::MultiLevelTemplateArgumentList const&, clang::Expr const*, clang::ConstraintSatisfaction&)::'lambda'(clang::Expr const*)&&) SemaConcept.cpp:0:0
#21 0x0000000005e66d08 CheckConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, llvm::ArrayRef<clang::Expr const*>, llvm::SmallVectorImpl<clang::Expr*>&, clang::MultiLevelTemplateArgumentList const&, clang::SourceRange, clang::ConstraintSatisfaction&) SemaConcept.cpp:0:0
#22 0x0000000005e672a8 clang::Sema::CheckConstraintSatisfaction(clang::NamedDecl const*, llvm::ArrayRef<clang::Expr const*>, llvm::SmallVectorImpl<clang::Expr*>&, clang::MultiLevelTemplateArgumentList const&, clang::SourceRange, clang::ConstraintSatisfaction&) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x5e672a8)
#23 0x0000000005e67f1f clang::Sema::CheckInstantiatedFunctionTemplateConstraints(clang::SourceLocation, clang::FunctionDecl*, llvm::ArrayRef<clang::TemplateArgument>, clang::ConstraintSatisfaction&) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x5e67f1f)
#24 0x000000000666f1ea clang::Sema::FinishTemplateArgumentDeduction(clang::FunctionTemplateDecl*, llvm::SmallVectorImpl<clang::DeducedTemplateArgument>&, unsigned int, clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&, llvm::SmallVectorImpl<clang::Sema::OriginalCallArg> const*, bool, llvm::function_ref<bool ()>) (.constprop.0) SemaTemplateDeduction.cpp:0:0
#25 0x000000000666fd0a void llvm::function_ref<void ()>::callback_fn<clang::Sema::DeduceTemplateArguments(clang::FunctionTemplateDecl*, clang::TemplateArgumentListInfo*, llvm::ArrayRef<clang::Expr*>, clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&, bool, bool, clang::QualType, clang::Expr::Classification, llvm::function_ref<bool (llvm::ArrayRef<clang::QualType>)>)::'lambda1'()>(long) SemaTemplateDeduction.cpp:0:0
#26 0x0000000005cff961 clang::Sema::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x5cff961)
#27 0x000000000668554a clang::Sema::DeduceTemplateArguments(clang::FunctionTemplateDecl*, clang::TemplateArgumentListInfo*, llvm::ArrayRef<clang::Expr*>, clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&, bool, bool, clang::QualType, clang::Expr::Classification, llvm::function_ref<bool (llvm::ArrayRef<clang::QualType>)>) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x668554a)
#28 0x00000000064a057a clang::Sema::AddTemplateOverloadCandidate(clang::FunctionTemplateDecl*, clang::DeclAccessPair, clang::TemplateArgumentListInfo*, llvm::ArrayRef<clang::Expr*>, clang::OverloadCandidateSet&, bool, bool, bool, clang::CallExpr::ADLCallKind, clang::OverloadCandidateParamOrder, bool) (.constprop.1) SemaOverload.cpp:0:0
#29 0x00000000064a1336 clang::Sema::AddArgumentDependentLookupCandidates(clang::DeclarationName, clang::SourceLocation, llvm::ArrayRef<clang::Expr*>, clang::TemplateArgumentListInfo*, clang::OverloadCandidateSet&, bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x64a1336)
#30 0x00000000064a3b0a clang::Sema::LookupOverloadedBinOp(clang::OverloadCandidateSet&, clang::OverloadedOperatorKind, clang::UnresolvedSetImpl const&, llvm::ArrayRef<clang::Expr*>, bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x64a3b0a)
#31 0x00000000064b099b clang::Sema::CreateOverloadedBinOp(clang::SourceLocation, clang::BinaryOperatorKind, clang::UnresolvedSetImpl const&, clang::Expr*, clang::Expr*, bool, bool, clang::FunctionDecl*) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x64b099b)
#32 0x00000000060f87fe BuildOverloadedBinOp(clang::Sema&, clang::Scope*, clang::SourceLocation, clang::BinaryOperatorKind, clang::Expr*, clang::Expr*) SemaExpr.cpp:0:0
#33 0x000000000615ceb7 clang::Sema::BuildBinOp(clang::Scope*, clang::SourceLocation, clang::BinaryOperatorKind, clang::Expr*, clang::Expr*) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x615ceb7)
#34 0x000000000615d2d5 clang::Sema::ActOnBinOp(clang::Scope*, clang::SourceLocation, clang::tok::TokenKind, clang::Expr*, clang::Expr*) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x615d2d5)
#35 0x00000000064e6a17 clang::Sema::BuildCXXForRangeStmt(clang::SourceLocation, clang::SourceLocation, clang::Stmt*, clang::SourceLocation, clang::Stmt*, clang::Stmt*, clang::Stmt*, clang::Expr*, clang::Expr*, clang::Stmt*, clang::SourceLocation, clang::Sema::BuildForRangeKind) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x64e6a17)
#36 0x00000000066ddc01 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCXXForRangeStmt(clang::CXXForRangeStmt*) SemaTemplateInstantiate.cpp:0:0
#37 0x00000000066de27b clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCompoundStmt(clang::CompoundStmt*, bool) SemaTemplateInstantiate.cpp:0:0
#38 0x00000000066e233c clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformIfStmt(clang::IfStmt*) SemaTemplateInstantiate.cpp:0:0
#39 0x00000000066de27b clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCompoundStmt(clang::CompoundStmt*, bool) SemaTemplateInstantiate.cpp:0:0
#40 0x00000000066e32b1 clang::Sema::SubstStmt(clang::Stmt*, clang::MultiLevelTemplateArgumentList const&) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x66e32b1)
#41 0x000000000672bd38 clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672bd38)
#42 0x000000000672a17f clang::Sema::PerformPendingInstantiations(bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672a17f)
#43 0x000000000672be4b clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672be4b)
#44 0x000000000672a17f clang::Sema::PerformPendingInstantiations(bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672a17f)
#45 0x000000000672beff clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672beff)
#46 0x000000000672a17f clang::Sema::PerformPendingInstantiations(bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672a17f)
#47 0x000000000672beff clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672beff)
#48 0x000000000672a17f clang::Sema::PerformPendingInstantiations(bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672a17f)
#49 0x000000000672beff clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672beff)
#50 0x000000000672a17f clang::Sema::PerformPendingInstantiations(bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672a17f)
#51 0x000000000672beff clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672beff)
#52 0x000000000672a17f clang::Sema::PerformPendingInstantiations(bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672a17f)
#53 0x000000000672beff clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672beff)
#54 0x000000000672a17f clang::Sema::PerformPendingInstantiations(bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672a17f)
#55 0x000000000672beff clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672beff)
#56 0x000000000672a17f clang::Sema::PerformPendingInstantiations(bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672a17f)
#57 0x0000000005d21a70 clang::Sema::ActOnEndOfTranslationUnitFragment(clang::Sema::TUFragmentKind) (.part.0) Sema.cpp:0:0
#58 0x0000000005d2213e clang::Sema::ActOnEndOfTranslationUnit() (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x5d2213e)
#59 0x0000000005ba7092 clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x5ba7092)
#60 0x0000000005b963ba clang::ParseAST(clang::Sema&, bool, bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x5b963ba)
#61 0x0000000003d5a725 clang::CodeGenAction::ExecuteAction() (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x3d5a725)
#62 0x0000000003fe2aa1 clang::FrontendAction::Execute() (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x3fe2aa1)
#63 0x0000000003f6010b clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x3f6010b)
#64 0x00000000040c2473 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x40c2473)
#65 0x0000000000c19746 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0xc19746)
#66 0x0000000000c1211d ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#67 0x0000000003da1979 void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::'lambda'()>(long) Job.cpp:0:0
#68 0x0000000003467443 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x3467443)
#69 0x0000000003da1b99 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (.part.0) Job.cpp:0:0
#70 0x0000000003d69d17 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x3d69d17)
#71 0x0000000003d6a6cd clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x3d6a6cd)
#72 0x0000000003d7445c clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x3d7445c)
#73 0x0000000000c16a21 clang_main(int, char**, llvm::ToolContext const&) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0xc16a21)
#74 0x0000000000b0fa84 main (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0xb0fa84)
#75 0x000070661f629d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#76 0x000070661f629e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#77 0x0000000000c1191e _start (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0xc1191e)
clang++: error: clang frontend command failed with exit code 139 (use -v to see invocation)

I'm happy to provide more information if needed.

@EugeneZelenko EugeneZelenko added clang:frontend Language frontend issues, e.g. anything involving "Sema" crash Prefer [crash-on-valid] or [crash-on-invalid] and removed new issue labels Apr 30, 2024
@llvmbot
Copy link
Collaborator

llvmbot commented Apr 30, 2024

@llvm/issue-subscribers-clang-frontend

Author: mhx (mhx)

Apologies for not providing a shorter test case, but I came across this ICE while working on a project and `cvise` only managed to get the preprocessed output from 280k to 100kLOC. This is the code that reproduces the crash: [scanner-pp.cpp.gz](https://github.com/llvm/llvm-project/files/15171070/scanner-pp.cpp.gz) To reproduce:
$ clang++-18 -std=c++20 -c scanner-pp.cpp

The code crashes just about every clang-18 I've tried (gentoo clang-18.1.4, ubuntu clang-18.1.2, every clang-18 / clang-trunk on compiler explorer). It compiles fine with clang-17.

Here's the stack trace from a run on compiler explorer:

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: /opt/compiler-explorer/clang-18.1.0/bin/clang++ -gdwarf-4 -g -o /app/output.s -mllvm --x86-asm-syntax=intel -S --gcc-toolchain=/opt/compiler-explorer/gcc-13.2.0 -fcolor-diagnostics -fno-crash-diagnostics -std=c++20 &lt;source&gt;
1.	&lt;eof&gt; parser at end of file
2.	/usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/type_traits:89286:23: instantiating function definition 'dwarfs::make_unique_logging_object&lt;dwarfs::scanner::impl, dwarfs::scanner_, std::tuple&lt;dwarfs::debug_logger_policy, dwarfs::prod_logger_policy&gt;, dwarfs::worker_group &amp;, std::shared_ptr&lt;dwarfs::segmenter_factory&gt;, std::shared_ptr&lt;dwarfs::entry_factory&gt;, std::shared_ptr&lt;const dwarfs::os_access&gt;, std::shared_ptr&lt;dwarfs::script&gt;, const dwarfs::scanner_options &amp;&gt;'
3.	/usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/type_traits:89264:3: instantiating function definition 'dwarfs::logging_class_factory&lt;dwarfs::scanner_, dwarfs::unique_ptr_policy&lt;dwarfs::scanner::impl&gt;, std::tuple&lt;dwarfs::debug_logger_policy, dwarfs::prod_logger_policy&gt;, 2&gt;::create&lt;dwarfs::worker_group &amp;, std::shared_ptr&lt;dwarfs::segmenter_factory&gt;, std::shared_ptr&lt;dwarfs::entry_factory&gt;, std::shared_ptr&lt;const dwarfs::os_access&gt;, std::shared_ptr&lt;dwarfs::script&gt;, const dwarfs::scanner_options &amp;&gt;'
4.	/usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/type_traits:89247:22: instantiating function definition 'dwarfs::unique_ptr_policy&lt;dwarfs::scanner::impl&gt;::create&lt;dwarfs::scanner_&lt;dwarfs::prod_logger_policy&gt;, dwarfs::logger &amp;, dwarfs::worker_group &amp;, std::shared_ptr&lt;dwarfs::segmenter_factory&gt;, std::shared_ptr&lt;dwarfs::entry_factory&gt;, std::shared_ptr&lt;const dwarfs::os_access&gt;, std::shared_ptr&lt;dwarfs::script&gt;, const dwarfs::scanner_options &amp;&gt;'
5.	/usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/type_traits:27767:7: instantiating function definition 'std::unique_ptr&lt;dwarfs::scanner_&lt;dwarfs::prod_logger_policy&gt;&gt;::~unique_ptr'
6.	/usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/type_traits:27611:7: instantiating function definition 'std::default_delete&lt;dwarfs::scanner_&lt;dwarfs::prod_logger_policy&gt;&gt;::operator()'
7.	/usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/type_traits:99724:30: instantiating function definition 'dwarfs::scanner_&lt;dwarfs::prod_logger_policy&gt;::scan'
8.	/usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/type_traits:53611:6: instantiating function definition 'dwarfs::queued_for_each&lt;dwarfs::sortable_span&lt;const std::shared_ptr&lt;dwarfs::inode&gt;, unsigned int&gt;, (lambda at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/type_traits:99855:11), (lambda at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/type_traits:99888:11)&gt;'
9.	/usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/type_traits:99855:11: instantiating function definition 'dwarfs::scanner_&lt;dwarfs::prod_logger_policy&gt;::scan(filesystem_writer &amp;, const std::filesystem::path &amp;, progress &amp;, std::optional&lt;std::span&lt;const std::filesystem::path&gt;&gt;, std::shared_ptr&lt;const file_access&gt;)::(anonymous class)::operator()()::(anonymous class)::operator()&lt;std::shared_ptr&lt;dwarfs::inode&gt;&gt;'
 #<!-- -->0 0x000000000351ae38 llvm::sys::PrintStackTrace(llvm::raw_ostream&amp;, int) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x351ae38)
 #<!-- -->1 0x0000000003518f84 llvm::sys::CleanupOnSignal(unsigned long) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x3518f84)
 #<!-- -->2 0x0000000003467018 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #<!-- -->3 0x000070661f642520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #<!-- -->4 0x000000000610f721 clang::Sema::tryCaptureVariable(clang::ValueDecl*, clang::SourceLocation, clang::Sema::TryCaptureKind, clang::SourceLocation, bool, clang::QualType&amp;, clang::QualType&amp;, unsigned int const*) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x610f721)
 #<!-- -->5 0x000000000613bbbd clang::Sema::BuildDeclRefExpr(clang::ValueDecl*, clang::QualType, clang::ExprValueKind, clang::DeclarationNameInfo const&amp;, clang::NestedNameSpecifierLoc, clang::NamedDecl*, clang::SourceLocation, clang::TemplateArgumentListInfo const*) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x613bbbd)
 #<!-- -->6 0x000000000613c23c clang::Sema::BuildDeclRefExpr(clang::ValueDecl*, clang::QualType, clang::ExprValueKind, clang::DeclarationNameInfo const&amp;, clang::CXXScopeSpec const*, clang::NamedDecl*, clang::SourceLocation, clang::TemplateArgumentListInfo const*) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x613c23c)
 #<!-- -->7 0x00000000061411f7 clang::Sema::BuildDeclarationNameExpr(clang::CXXScopeSpec const&amp;, clang::DeclarationNameInfo const&amp;, clang::NamedDecl*, clang::NamedDecl*, clang::TemplateArgumentListInfo const*, bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x61411f7)
 #<!-- -->8 0x00000000066cf6f2 clang::TreeTransform&lt;(anonymous namespace)::TemplateInstantiator&gt;::TransformDeclRefExpr(clang::DeclRefExpr*) SemaTemplateInstantiate.cpp:0:0
 #<!-- -->9 0x00000000066ad7fb clang::TreeTransform&lt;(anonymous namespace)::TemplateInstantiator&gt;::TransformExpr(clang::Expr*) SemaTemplateInstantiate.cpp:0:0
#<!-- -->10 0x00000000066d04d5 clang::TreeTransform&lt;(anonymous namespace)::TemplateInstantiator&gt;::TransformCXXDependentScopeMemberExpr(clang::CXXDependentScopeMemberExpr*) SemaTemplateInstantiate.cpp:0:0
#<!-- -->11 0x00000000066ad63f clang::TreeTransform&lt;(anonymous namespace)::TemplateInstantiator&gt;::TransformExpr(clang::Expr*) SemaTemplateInstantiate.cpp:0:0
#<!-- -->12 0x00000000066b69e4 clang::TreeTransform&lt;(anonymous namespace)::TemplateInstantiator&gt;::TransformCallExpr(clang::CallExpr*) SemaTemplateInstantiate.cpp:0:0
#<!-- -->13 0x00000000066ad70a clang::TreeTransform&lt;(anonymous namespace)::TemplateInstantiator&gt;::TransformExpr(clang::Expr*) SemaTemplateInstantiate.cpp:0:0
#<!-- -->14 0x00000000066b853b clang::TreeTransform&lt;(anonymous namespace)::TemplateInstantiator&gt;::TransformBinaryOperator(clang::BinaryOperator*) SemaTemplateInstantiate.cpp:0:0
#<!-- -->15 0x00000000066ad5c9 clang::TreeTransform&lt;(anonymous namespace)::TemplateInstantiator&gt;::TransformExpr(clang::Expr*) SemaTemplateInstantiate.cpp:0:0
#<!-- -->16 0x00000000066d8acb clang::TreeTransform&lt;(anonymous namespace)::TemplateInstantiator&gt;::TransformRequiresExpr(clang::RequiresExpr*) SemaTemplateInstantiate.cpp:0:0
#<!-- -->17 0x00000000066add36 clang::TreeTransform&lt;(anonymous namespace)::TemplateInstantiator&gt;::TransformExpr(clang::Expr*) SemaTemplateInstantiate.cpp:0:0
#<!-- -->18 0x00000000066b8b6b clang::Sema::SubstConstraintExpr(clang::Expr*, clang::MultiLevelTemplateArgumentList const&amp;) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x66b8b6b)
#<!-- -->19 0x0000000005e64f91 calculateConstraintSatisfaction(clang::Sema&amp;, clang::NamedDecl const*, clang::SourceLocation, clang::MultiLevelTemplateArgumentList const&amp;, clang::Expr const*, clang::ConstraintSatisfaction&amp;)::'lambda'(clang::Expr const*)::operator()(clang::Expr const*) const SemaConcept.cpp:0:0
#<!-- -->20 0x0000000005e6638d clang::ActionResult&lt;clang::Expr*, true&gt; calculateConstraintSatisfaction&lt;calculateConstraintSatisfaction(clang::Sema&amp;, clang::NamedDecl const*, clang::SourceLocation, clang::MultiLevelTemplateArgumentList const&amp;, clang::Expr const*, clang::ConstraintSatisfaction&amp;)::'lambda'(clang::Expr const*)&gt;(clang::Sema&amp;, clang::Expr const*, clang::ConstraintSatisfaction&amp;, calculateConstraintSatisfaction(clang::Sema&amp;, clang::NamedDecl const*, clang::SourceLocation, clang::MultiLevelTemplateArgumentList const&amp;, clang::Expr const*, clang::ConstraintSatisfaction&amp;)::'lambda'(clang::Expr const*)&amp;&amp;) SemaConcept.cpp:0:0
#<!-- -->21 0x0000000005e66d08 CheckConstraintSatisfaction(clang::Sema&amp;, clang::NamedDecl const*, llvm::ArrayRef&lt;clang::Expr const*&gt;, llvm::SmallVectorImpl&lt;clang::Expr*&gt;&amp;, clang::MultiLevelTemplateArgumentList const&amp;, clang::SourceRange, clang::ConstraintSatisfaction&amp;) SemaConcept.cpp:0:0
#<!-- -->22 0x0000000005e672a8 clang::Sema::CheckConstraintSatisfaction(clang::NamedDecl const*, llvm::ArrayRef&lt;clang::Expr const*&gt;, llvm::SmallVectorImpl&lt;clang::Expr*&gt;&amp;, clang::MultiLevelTemplateArgumentList const&amp;, clang::SourceRange, clang::ConstraintSatisfaction&amp;) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x5e672a8)
#<!-- -->23 0x0000000005e67f1f clang::Sema::CheckInstantiatedFunctionTemplateConstraints(clang::SourceLocation, clang::FunctionDecl*, llvm::ArrayRef&lt;clang::TemplateArgument&gt;, clang::ConstraintSatisfaction&amp;) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x5e67f1f)
#<!-- -->24 0x000000000666f1ea clang::Sema::FinishTemplateArgumentDeduction(clang::FunctionTemplateDecl*, llvm::SmallVectorImpl&lt;clang::DeducedTemplateArgument&gt;&amp;, unsigned int, clang::FunctionDecl*&amp;, clang::sema::TemplateDeductionInfo&amp;, llvm::SmallVectorImpl&lt;clang::Sema::OriginalCallArg&gt; const*, bool, llvm::function_ref&lt;bool ()&gt;) (.constprop.0) SemaTemplateDeduction.cpp:0:0
#<!-- -->25 0x000000000666fd0a void llvm::function_ref&lt;void ()&gt;::callback_fn&lt;clang::Sema::DeduceTemplateArguments(clang::FunctionTemplateDecl*, clang::TemplateArgumentListInfo*, llvm::ArrayRef&lt;clang::Expr*&gt;, clang::FunctionDecl*&amp;, clang::sema::TemplateDeductionInfo&amp;, bool, bool, clang::QualType, clang::Expr::Classification, llvm::function_ref&lt;bool (llvm::ArrayRef&lt;clang::QualType&gt;)&gt;)::'lambda1'()&gt;(long) SemaTemplateDeduction.cpp:0:0
#<!-- -->26 0x0000000005cff961 clang::Sema::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref&lt;void ()&gt;) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x5cff961)
#<!-- -->27 0x000000000668554a clang::Sema::DeduceTemplateArguments(clang::FunctionTemplateDecl*, clang::TemplateArgumentListInfo*, llvm::ArrayRef&lt;clang::Expr*&gt;, clang::FunctionDecl*&amp;, clang::sema::TemplateDeductionInfo&amp;, bool, bool, clang::QualType, clang::Expr::Classification, llvm::function_ref&lt;bool (llvm::ArrayRef&lt;clang::QualType&gt;)&gt;) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x668554a)
#<!-- -->28 0x00000000064a057a clang::Sema::AddTemplateOverloadCandidate(clang::FunctionTemplateDecl*, clang::DeclAccessPair, clang::TemplateArgumentListInfo*, llvm::ArrayRef&lt;clang::Expr*&gt;, clang::OverloadCandidateSet&amp;, bool, bool, bool, clang::CallExpr::ADLCallKind, clang::OverloadCandidateParamOrder, bool) (.constprop.1) SemaOverload.cpp:0:0
#<!-- -->29 0x00000000064a1336 clang::Sema::AddArgumentDependentLookupCandidates(clang::DeclarationName, clang::SourceLocation, llvm::ArrayRef&lt;clang::Expr*&gt;, clang::TemplateArgumentListInfo*, clang::OverloadCandidateSet&amp;, bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x64a1336)
#<!-- -->30 0x00000000064a3b0a clang::Sema::LookupOverloadedBinOp(clang::OverloadCandidateSet&amp;, clang::OverloadedOperatorKind, clang::UnresolvedSetImpl const&amp;, llvm::ArrayRef&lt;clang::Expr*&gt;, bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x64a3b0a)
#<!-- -->31 0x00000000064b099b clang::Sema::CreateOverloadedBinOp(clang::SourceLocation, clang::BinaryOperatorKind, clang::UnresolvedSetImpl const&amp;, clang::Expr*, clang::Expr*, bool, bool, clang::FunctionDecl*) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x64b099b)
#<!-- -->32 0x00000000060f87fe BuildOverloadedBinOp(clang::Sema&amp;, clang::Scope*, clang::SourceLocation, clang::BinaryOperatorKind, clang::Expr*, clang::Expr*) SemaExpr.cpp:0:0
#<!-- -->33 0x000000000615ceb7 clang::Sema::BuildBinOp(clang::Scope*, clang::SourceLocation, clang::BinaryOperatorKind, clang::Expr*, clang::Expr*) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x615ceb7)
#<!-- -->34 0x000000000615d2d5 clang::Sema::ActOnBinOp(clang::Scope*, clang::SourceLocation, clang::tok::TokenKind, clang::Expr*, clang::Expr*) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x615d2d5)
#<!-- -->35 0x00000000064e6a17 clang::Sema::BuildCXXForRangeStmt(clang::SourceLocation, clang::SourceLocation, clang::Stmt*, clang::SourceLocation, clang::Stmt*, clang::Stmt*, clang::Stmt*, clang::Expr*, clang::Expr*, clang::Stmt*, clang::SourceLocation, clang::Sema::BuildForRangeKind) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x64e6a17)
#<!-- -->36 0x00000000066ddc01 clang::TreeTransform&lt;(anonymous namespace)::TemplateInstantiator&gt;::TransformCXXForRangeStmt(clang::CXXForRangeStmt*) SemaTemplateInstantiate.cpp:0:0
#<!-- -->37 0x00000000066de27b clang::TreeTransform&lt;(anonymous namespace)::TemplateInstantiator&gt;::TransformCompoundStmt(clang::CompoundStmt*, bool) SemaTemplateInstantiate.cpp:0:0
#<!-- -->38 0x00000000066e233c clang::TreeTransform&lt;(anonymous namespace)::TemplateInstantiator&gt;::TransformIfStmt(clang::IfStmt*) SemaTemplateInstantiate.cpp:0:0
#<!-- -->39 0x00000000066de27b clang::TreeTransform&lt;(anonymous namespace)::TemplateInstantiator&gt;::TransformCompoundStmt(clang::CompoundStmt*, bool) SemaTemplateInstantiate.cpp:0:0
#<!-- -->40 0x00000000066e32b1 clang::Sema::SubstStmt(clang::Stmt*, clang::MultiLevelTemplateArgumentList const&amp;) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x66e32b1)
#<!-- -->41 0x000000000672bd38 clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672bd38)
#<!-- -->42 0x000000000672a17f clang::Sema::PerformPendingInstantiations(bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672a17f)
#<!-- -->43 0x000000000672be4b clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672be4b)
#<!-- -->44 0x000000000672a17f clang::Sema::PerformPendingInstantiations(bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672a17f)
#<!-- -->45 0x000000000672beff clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672beff)
#<!-- -->46 0x000000000672a17f clang::Sema::PerformPendingInstantiations(bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672a17f)
#<!-- -->47 0x000000000672beff clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672beff)
#<!-- -->48 0x000000000672a17f clang::Sema::PerformPendingInstantiations(bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672a17f)
#<!-- -->49 0x000000000672beff clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672beff)
#<!-- -->50 0x000000000672a17f clang::Sema::PerformPendingInstantiations(bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672a17f)
#<!-- -->51 0x000000000672beff clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672beff)
#<!-- -->52 0x000000000672a17f clang::Sema::PerformPendingInstantiations(bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672a17f)
#<!-- -->53 0x000000000672beff clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672beff)
#<!-- -->54 0x000000000672a17f clang::Sema::PerformPendingInstantiations(bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672a17f)
#<!-- -->55 0x000000000672beff clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672beff)
#<!-- -->56 0x000000000672a17f clang::Sema::PerformPendingInstantiations(bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672a17f)
#<!-- -->57 0x0000000005d21a70 clang::Sema::ActOnEndOfTranslationUnitFragment(clang::Sema::TUFragmentKind) (.part.0) Sema.cpp:0:0
#<!-- -->58 0x0000000005d2213e clang::Sema::ActOnEndOfTranslationUnit() (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x5d2213e)
#<!-- -->59 0x0000000005ba7092 clang::Parser::ParseTopLevelDecl(clang::OpaquePtr&lt;clang::DeclGroupRef&gt;&amp;, clang::Sema::ModuleImportState&amp;) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x5ba7092)
#<!-- -->60 0x0000000005b963ba clang::ParseAST(clang::Sema&amp;, bool, bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x5b963ba)
#<!-- -->61 0x0000000003d5a725 clang::CodeGenAction::ExecuteAction() (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x3d5a725)
#<!-- -->62 0x0000000003fe2aa1 clang::FrontendAction::Execute() (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x3fe2aa1)
#<!-- -->63 0x0000000003f6010b clang::CompilerInstance::ExecuteAction(clang::FrontendAction&amp;) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x3f6010b)
#<!-- -->64 0x00000000040c2473 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x40c2473)
#<!-- -->65 0x0000000000c19746 cc1_main(llvm::ArrayRef&lt;char const*&gt;, char const*, void*) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0xc19746)
#<!-- -->66 0x0000000000c1211d ExecuteCC1Tool(llvm::SmallVectorImpl&lt;char const*&gt;&amp;, llvm::ToolContext const&amp;) driver.cpp:0:0
#<!-- -->67 0x0000000003da1979 void llvm::function_ref&lt;void ()&gt;::callback_fn&lt;clang::driver::CC1Command::Execute(llvm::ArrayRef&lt;std::optional&lt;llvm::StringRef&gt;&gt;, std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt;&gt;*, bool*) const::'lambda'()&gt;(long) Job.cpp:0:0
#<!-- -->68 0x0000000003467443 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref&lt;void ()&gt;) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x3467443)
#<!-- -->69 0x0000000003da1b99 clang::driver::CC1Command::Execute(llvm::ArrayRef&lt;std::optional&lt;llvm::StringRef&gt;&gt;, std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt;&gt;*, bool*) const (.part.0) Job.cpp:0:0
#<!-- -->70 0x0000000003d69d17 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&amp;, clang::driver::Command const*&amp;, bool) const (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x3d69d17)
#<!-- -->71 0x0000000003d6a6cd clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&amp;, llvm::SmallVectorImpl&lt;std::pair&lt;int, clang::driver::Command const*&gt;&gt;&amp;, bool) const (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x3d6a6cd)
#<!-- -->72 0x0000000003d7445c clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&amp;, llvm::SmallVectorImpl&lt;std::pair&lt;int, clang::driver::Command const*&gt;&gt;&amp;) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x3d7445c)
#<!-- -->73 0x0000000000c16a21 clang_main(int, char**, llvm::ToolContext const&amp;) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0xc16a21)
#<!-- -->74 0x0000000000b0fa84 main (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0xb0fa84)
#<!-- -->75 0x000070661f629d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#<!-- -->76 0x000070661f629e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#<!-- -->77 0x0000000000c1191e _start (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0xc1191e)
clang++: error: clang frontend command failed with exit code 139 (use -v to see invocation)

I'm happy to provide more information if needed.

@shafik shafik added the needs-reduction Large reproducer that should be reduced into a simpler form label Apr 30, 2024
@shafik shafik changed the title clang-18 frontend segfault clang-18 frontend segfault (tryCaptureVariable) Apr 30, 2024
@shafik shafik added the confirmed Verified by a second party label Apr 30, 2024
@zyn0217
Copy link
Contributor

zyn0217 commented Apr 30, 2024

#78598

@zyn0217 zyn0217 added c++20 concepts C++20 concepts labels Apr 30, 2024
@llvmbot
Copy link
Collaborator

llvmbot commented Apr 30, 2024

@llvm/issue-subscribers-c-20

Author: mhx (mhx)

Apologies for not providing a shorter test case, but I came across this ICE while working on a project and `cvise` only managed to get the preprocessed output from 280k to 100kLOC. This is the code that reproduces the crash: [scanner-pp.cpp.gz](https://github.com/llvm/llvm-project/files/15171070/scanner-pp.cpp.gz) To reproduce:
$ clang++-18 -std=c++20 -c scanner-pp.cpp

The code crashes just about every clang-18 I've tried (gentoo clang-18.1.4, ubuntu clang-18.1.2, every clang-18 / clang-trunk on compiler explorer). It compiles fine with clang-17.

Here's the stack trace from a run on compiler explorer:

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: /opt/compiler-explorer/clang-18.1.0/bin/clang++ -gdwarf-4 -g -o /app/output.s -mllvm --x86-asm-syntax=intel -S --gcc-toolchain=/opt/compiler-explorer/gcc-13.2.0 -fcolor-diagnostics -fno-crash-diagnostics -std=c++20 &lt;source&gt;
1.	&lt;eof&gt; parser at end of file
2.	/usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/type_traits:89286:23: instantiating function definition 'dwarfs::make_unique_logging_object&lt;dwarfs::scanner::impl, dwarfs::scanner_, std::tuple&lt;dwarfs::debug_logger_policy, dwarfs::prod_logger_policy&gt;, dwarfs::worker_group &amp;, std::shared_ptr&lt;dwarfs::segmenter_factory&gt;, std::shared_ptr&lt;dwarfs::entry_factory&gt;, std::shared_ptr&lt;const dwarfs::os_access&gt;, std::shared_ptr&lt;dwarfs::script&gt;, const dwarfs::scanner_options &amp;&gt;'
3.	/usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/type_traits:89264:3: instantiating function definition 'dwarfs::logging_class_factory&lt;dwarfs::scanner_, dwarfs::unique_ptr_policy&lt;dwarfs::scanner::impl&gt;, std::tuple&lt;dwarfs::debug_logger_policy, dwarfs::prod_logger_policy&gt;, 2&gt;::create&lt;dwarfs::worker_group &amp;, std::shared_ptr&lt;dwarfs::segmenter_factory&gt;, std::shared_ptr&lt;dwarfs::entry_factory&gt;, std::shared_ptr&lt;const dwarfs::os_access&gt;, std::shared_ptr&lt;dwarfs::script&gt;, const dwarfs::scanner_options &amp;&gt;'
4.	/usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/type_traits:89247:22: instantiating function definition 'dwarfs::unique_ptr_policy&lt;dwarfs::scanner::impl&gt;::create&lt;dwarfs::scanner_&lt;dwarfs::prod_logger_policy&gt;, dwarfs::logger &amp;, dwarfs::worker_group &amp;, std::shared_ptr&lt;dwarfs::segmenter_factory&gt;, std::shared_ptr&lt;dwarfs::entry_factory&gt;, std::shared_ptr&lt;const dwarfs::os_access&gt;, std::shared_ptr&lt;dwarfs::script&gt;, const dwarfs::scanner_options &amp;&gt;'
5.	/usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/type_traits:27767:7: instantiating function definition 'std::unique_ptr&lt;dwarfs::scanner_&lt;dwarfs::prod_logger_policy&gt;&gt;::~unique_ptr'
6.	/usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/type_traits:27611:7: instantiating function definition 'std::default_delete&lt;dwarfs::scanner_&lt;dwarfs::prod_logger_policy&gt;&gt;::operator()'
7.	/usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/type_traits:99724:30: instantiating function definition 'dwarfs::scanner_&lt;dwarfs::prod_logger_policy&gt;::scan'
8.	/usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/type_traits:53611:6: instantiating function definition 'dwarfs::queued_for_each&lt;dwarfs::sortable_span&lt;const std::shared_ptr&lt;dwarfs::inode&gt;, unsigned int&gt;, (lambda at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/type_traits:99855:11), (lambda at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/type_traits:99888:11)&gt;'
9.	/usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/type_traits:99855:11: instantiating function definition 'dwarfs::scanner_&lt;dwarfs::prod_logger_policy&gt;::scan(filesystem_writer &amp;, const std::filesystem::path &amp;, progress &amp;, std::optional&lt;std::span&lt;const std::filesystem::path&gt;&gt;, std::shared_ptr&lt;const file_access&gt;)::(anonymous class)::operator()()::(anonymous class)::operator()&lt;std::shared_ptr&lt;dwarfs::inode&gt;&gt;'
 #<!-- -->0 0x000000000351ae38 llvm::sys::PrintStackTrace(llvm::raw_ostream&amp;, int) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x351ae38)
 #<!-- -->1 0x0000000003518f84 llvm::sys::CleanupOnSignal(unsigned long) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x3518f84)
 #<!-- -->2 0x0000000003467018 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #<!-- -->3 0x000070661f642520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #<!-- -->4 0x000000000610f721 clang::Sema::tryCaptureVariable(clang::ValueDecl*, clang::SourceLocation, clang::Sema::TryCaptureKind, clang::SourceLocation, bool, clang::QualType&amp;, clang::QualType&amp;, unsigned int const*) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x610f721)
 #<!-- -->5 0x000000000613bbbd clang::Sema::BuildDeclRefExpr(clang::ValueDecl*, clang::QualType, clang::ExprValueKind, clang::DeclarationNameInfo const&amp;, clang::NestedNameSpecifierLoc, clang::NamedDecl*, clang::SourceLocation, clang::TemplateArgumentListInfo const*) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x613bbbd)
 #<!-- -->6 0x000000000613c23c clang::Sema::BuildDeclRefExpr(clang::ValueDecl*, clang::QualType, clang::ExprValueKind, clang::DeclarationNameInfo const&amp;, clang::CXXScopeSpec const*, clang::NamedDecl*, clang::SourceLocation, clang::TemplateArgumentListInfo const*) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x613c23c)
 #<!-- -->7 0x00000000061411f7 clang::Sema::BuildDeclarationNameExpr(clang::CXXScopeSpec const&amp;, clang::DeclarationNameInfo const&amp;, clang::NamedDecl*, clang::NamedDecl*, clang::TemplateArgumentListInfo const*, bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x61411f7)
 #<!-- -->8 0x00000000066cf6f2 clang::TreeTransform&lt;(anonymous namespace)::TemplateInstantiator&gt;::TransformDeclRefExpr(clang::DeclRefExpr*) SemaTemplateInstantiate.cpp:0:0
 #<!-- -->9 0x00000000066ad7fb clang::TreeTransform&lt;(anonymous namespace)::TemplateInstantiator&gt;::TransformExpr(clang::Expr*) SemaTemplateInstantiate.cpp:0:0
#<!-- -->10 0x00000000066d04d5 clang::TreeTransform&lt;(anonymous namespace)::TemplateInstantiator&gt;::TransformCXXDependentScopeMemberExpr(clang::CXXDependentScopeMemberExpr*) SemaTemplateInstantiate.cpp:0:0
#<!-- -->11 0x00000000066ad63f clang::TreeTransform&lt;(anonymous namespace)::TemplateInstantiator&gt;::TransformExpr(clang::Expr*) SemaTemplateInstantiate.cpp:0:0
#<!-- -->12 0x00000000066b69e4 clang::TreeTransform&lt;(anonymous namespace)::TemplateInstantiator&gt;::TransformCallExpr(clang::CallExpr*) SemaTemplateInstantiate.cpp:0:0
#<!-- -->13 0x00000000066ad70a clang::TreeTransform&lt;(anonymous namespace)::TemplateInstantiator&gt;::TransformExpr(clang::Expr*) SemaTemplateInstantiate.cpp:0:0
#<!-- -->14 0x00000000066b853b clang::TreeTransform&lt;(anonymous namespace)::TemplateInstantiator&gt;::TransformBinaryOperator(clang::BinaryOperator*) SemaTemplateInstantiate.cpp:0:0
#<!-- -->15 0x00000000066ad5c9 clang::TreeTransform&lt;(anonymous namespace)::TemplateInstantiator&gt;::TransformExpr(clang::Expr*) SemaTemplateInstantiate.cpp:0:0
#<!-- -->16 0x00000000066d8acb clang::TreeTransform&lt;(anonymous namespace)::TemplateInstantiator&gt;::TransformRequiresExpr(clang::RequiresExpr*) SemaTemplateInstantiate.cpp:0:0
#<!-- -->17 0x00000000066add36 clang::TreeTransform&lt;(anonymous namespace)::TemplateInstantiator&gt;::TransformExpr(clang::Expr*) SemaTemplateInstantiate.cpp:0:0
#<!-- -->18 0x00000000066b8b6b clang::Sema::SubstConstraintExpr(clang::Expr*, clang::MultiLevelTemplateArgumentList const&amp;) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x66b8b6b)
#<!-- -->19 0x0000000005e64f91 calculateConstraintSatisfaction(clang::Sema&amp;, clang::NamedDecl const*, clang::SourceLocation, clang::MultiLevelTemplateArgumentList const&amp;, clang::Expr const*, clang::ConstraintSatisfaction&amp;)::'lambda'(clang::Expr const*)::operator()(clang::Expr const*) const SemaConcept.cpp:0:0
#<!-- -->20 0x0000000005e6638d clang::ActionResult&lt;clang::Expr*, true&gt; calculateConstraintSatisfaction&lt;calculateConstraintSatisfaction(clang::Sema&amp;, clang::NamedDecl const*, clang::SourceLocation, clang::MultiLevelTemplateArgumentList const&amp;, clang::Expr const*, clang::ConstraintSatisfaction&amp;)::'lambda'(clang::Expr const*)&gt;(clang::Sema&amp;, clang::Expr const*, clang::ConstraintSatisfaction&amp;, calculateConstraintSatisfaction(clang::Sema&amp;, clang::NamedDecl const*, clang::SourceLocation, clang::MultiLevelTemplateArgumentList const&amp;, clang::Expr const*, clang::ConstraintSatisfaction&amp;)::'lambda'(clang::Expr const*)&amp;&amp;) SemaConcept.cpp:0:0
#<!-- -->21 0x0000000005e66d08 CheckConstraintSatisfaction(clang::Sema&amp;, clang::NamedDecl const*, llvm::ArrayRef&lt;clang::Expr const*&gt;, llvm::SmallVectorImpl&lt;clang::Expr*&gt;&amp;, clang::MultiLevelTemplateArgumentList const&amp;, clang::SourceRange, clang::ConstraintSatisfaction&amp;) SemaConcept.cpp:0:0
#<!-- -->22 0x0000000005e672a8 clang::Sema::CheckConstraintSatisfaction(clang::NamedDecl const*, llvm::ArrayRef&lt;clang::Expr const*&gt;, llvm::SmallVectorImpl&lt;clang::Expr*&gt;&amp;, clang::MultiLevelTemplateArgumentList const&amp;, clang::SourceRange, clang::ConstraintSatisfaction&amp;) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x5e672a8)
#<!-- -->23 0x0000000005e67f1f clang::Sema::CheckInstantiatedFunctionTemplateConstraints(clang::SourceLocation, clang::FunctionDecl*, llvm::ArrayRef&lt;clang::TemplateArgument&gt;, clang::ConstraintSatisfaction&amp;) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x5e67f1f)
#<!-- -->24 0x000000000666f1ea clang::Sema::FinishTemplateArgumentDeduction(clang::FunctionTemplateDecl*, llvm::SmallVectorImpl&lt;clang::DeducedTemplateArgument&gt;&amp;, unsigned int, clang::FunctionDecl*&amp;, clang::sema::TemplateDeductionInfo&amp;, llvm::SmallVectorImpl&lt;clang::Sema::OriginalCallArg&gt; const*, bool, llvm::function_ref&lt;bool ()&gt;) (.constprop.0) SemaTemplateDeduction.cpp:0:0
#<!-- -->25 0x000000000666fd0a void llvm::function_ref&lt;void ()&gt;::callback_fn&lt;clang::Sema::DeduceTemplateArguments(clang::FunctionTemplateDecl*, clang::TemplateArgumentListInfo*, llvm::ArrayRef&lt;clang::Expr*&gt;, clang::FunctionDecl*&amp;, clang::sema::TemplateDeductionInfo&amp;, bool, bool, clang::QualType, clang::Expr::Classification, llvm::function_ref&lt;bool (llvm::ArrayRef&lt;clang::QualType&gt;)&gt;)::'lambda1'()&gt;(long) SemaTemplateDeduction.cpp:0:0
#<!-- -->26 0x0000000005cff961 clang::Sema::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref&lt;void ()&gt;) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x5cff961)
#<!-- -->27 0x000000000668554a clang::Sema::DeduceTemplateArguments(clang::FunctionTemplateDecl*, clang::TemplateArgumentListInfo*, llvm::ArrayRef&lt;clang::Expr*&gt;, clang::FunctionDecl*&amp;, clang::sema::TemplateDeductionInfo&amp;, bool, bool, clang::QualType, clang::Expr::Classification, llvm::function_ref&lt;bool (llvm::ArrayRef&lt;clang::QualType&gt;)&gt;) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x668554a)
#<!-- -->28 0x00000000064a057a clang::Sema::AddTemplateOverloadCandidate(clang::FunctionTemplateDecl*, clang::DeclAccessPair, clang::TemplateArgumentListInfo*, llvm::ArrayRef&lt;clang::Expr*&gt;, clang::OverloadCandidateSet&amp;, bool, bool, bool, clang::CallExpr::ADLCallKind, clang::OverloadCandidateParamOrder, bool) (.constprop.1) SemaOverload.cpp:0:0
#<!-- -->29 0x00000000064a1336 clang::Sema::AddArgumentDependentLookupCandidates(clang::DeclarationName, clang::SourceLocation, llvm::ArrayRef&lt;clang::Expr*&gt;, clang::TemplateArgumentListInfo*, clang::OverloadCandidateSet&amp;, bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x64a1336)
#<!-- -->30 0x00000000064a3b0a clang::Sema::LookupOverloadedBinOp(clang::OverloadCandidateSet&amp;, clang::OverloadedOperatorKind, clang::UnresolvedSetImpl const&amp;, llvm::ArrayRef&lt;clang::Expr*&gt;, bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x64a3b0a)
#<!-- -->31 0x00000000064b099b clang::Sema::CreateOverloadedBinOp(clang::SourceLocation, clang::BinaryOperatorKind, clang::UnresolvedSetImpl const&amp;, clang::Expr*, clang::Expr*, bool, bool, clang::FunctionDecl*) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x64b099b)
#<!-- -->32 0x00000000060f87fe BuildOverloadedBinOp(clang::Sema&amp;, clang::Scope*, clang::SourceLocation, clang::BinaryOperatorKind, clang::Expr*, clang::Expr*) SemaExpr.cpp:0:0
#<!-- -->33 0x000000000615ceb7 clang::Sema::BuildBinOp(clang::Scope*, clang::SourceLocation, clang::BinaryOperatorKind, clang::Expr*, clang::Expr*) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x615ceb7)
#<!-- -->34 0x000000000615d2d5 clang::Sema::ActOnBinOp(clang::Scope*, clang::SourceLocation, clang::tok::TokenKind, clang::Expr*, clang::Expr*) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x615d2d5)
#<!-- -->35 0x00000000064e6a17 clang::Sema::BuildCXXForRangeStmt(clang::SourceLocation, clang::SourceLocation, clang::Stmt*, clang::SourceLocation, clang::Stmt*, clang::Stmt*, clang::Stmt*, clang::Expr*, clang::Expr*, clang::Stmt*, clang::SourceLocation, clang::Sema::BuildForRangeKind) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x64e6a17)
#<!-- -->36 0x00000000066ddc01 clang::TreeTransform&lt;(anonymous namespace)::TemplateInstantiator&gt;::TransformCXXForRangeStmt(clang::CXXForRangeStmt*) SemaTemplateInstantiate.cpp:0:0
#<!-- -->37 0x00000000066de27b clang::TreeTransform&lt;(anonymous namespace)::TemplateInstantiator&gt;::TransformCompoundStmt(clang::CompoundStmt*, bool) SemaTemplateInstantiate.cpp:0:0
#<!-- -->38 0x00000000066e233c clang::TreeTransform&lt;(anonymous namespace)::TemplateInstantiator&gt;::TransformIfStmt(clang::IfStmt*) SemaTemplateInstantiate.cpp:0:0
#<!-- -->39 0x00000000066de27b clang::TreeTransform&lt;(anonymous namespace)::TemplateInstantiator&gt;::TransformCompoundStmt(clang::CompoundStmt*, bool) SemaTemplateInstantiate.cpp:0:0
#<!-- -->40 0x00000000066e32b1 clang::Sema::SubstStmt(clang::Stmt*, clang::MultiLevelTemplateArgumentList const&amp;) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x66e32b1)
#<!-- -->41 0x000000000672bd38 clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672bd38)
#<!-- -->42 0x000000000672a17f clang::Sema::PerformPendingInstantiations(bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672a17f)
#<!-- -->43 0x000000000672be4b clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672be4b)
#<!-- -->44 0x000000000672a17f clang::Sema::PerformPendingInstantiations(bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672a17f)
#<!-- -->45 0x000000000672beff clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672beff)
#<!-- -->46 0x000000000672a17f clang::Sema::PerformPendingInstantiations(bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672a17f)
#<!-- -->47 0x000000000672beff clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672beff)
#<!-- -->48 0x000000000672a17f clang::Sema::PerformPendingInstantiations(bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672a17f)
#<!-- -->49 0x000000000672beff clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672beff)
#<!-- -->50 0x000000000672a17f clang::Sema::PerformPendingInstantiations(bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672a17f)
#<!-- -->51 0x000000000672beff clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672beff)
#<!-- -->52 0x000000000672a17f clang::Sema::PerformPendingInstantiations(bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672a17f)
#<!-- -->53 0x000000000672beff clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672beff)
#<!-- -->54 0x000000000672a17f clang::Sema::PerformPendingInstantiations(bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672a17f)
#<!-- -->55 0x000000000672beff clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672beff)
#<!-- -->56 0x000000000672a17f clang::Sema::PerformPendingInstantiations(bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x672a17f)
#<!-- -->57 0x0000000005d21a70 clang::Sema::ActOnEndOfTranslationUnitFragment(clang::Sema::TUFragmentKind) (.part.0) Sema.cpp:0:0
#<!-- -->58 0x0000000005d2213e clang::Sema::ActOnEndOfTranslationUnit() (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x5d2213e)
#<!-- -->59 0x0000000005ba7092 clang::Parser::ParseTopLevelDecl(clang::OpaquePtr&lt;clang::DeclGroupRef&gt;&amp;, clang::Sema::ModuleImportState&amp;) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x5ba7092)
#<!-- -->60 0x0000000005b963ba clang::ParseAST(clang::Sema&amp;, bool, bool) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x5b963ba)
#<!-- -->61 0x0000000003d5a725 clang::CodeGenAction::ExecuteAction() (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x3d5a725)
#<!-- -->62 0x0000000003fe2aa1 clang::FrontendAction::Execute() (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x3fe2aa1)
#<!-- -->63 0x0000000003f6010b clang::CompilerInstance::ExecuteAction(clang::FrontendAction&amp;) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x3f6010b)
#<!-- -->64 0x00000000040c2473 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x40c2473)
#<!-- -->65 0x0000000000c19746 cc1_main(llvm::ArrayRef&lt;char const*&gt;, char const*, void*) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0xc19746)
#<!-- -->66 0x0000000000c1211d ExecuteCC1Tool(llvm::SmallVectorImpl&lt;char const*&gt;&amp;, llvm::ToolContext const&amp;) driver.cpp:0:0
#<!-- -->67 0x0000000003da1979 void llvm::function_ref&lt;void ()&gt;::callback_fn&lt;clang::driver::CC1Command::Execute(llvm::ArrayRef&lt;std::optional&lt;llvm::StringRef&gt;&gt;, std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt;&gt;*, bool*) const::'lambda'()&gt;(long) Job.cpp:0:0
#<!-- -->68 0x0000000003467443 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref&lt;void ()&gt;) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x3467443)
#<!-- -->69 0x0000000003da1b99 clang::driver::CC1Command::Execute(llvm::ArrayRef&lt;std::optional&lt;llvm::StringRef&gt;&gt;, std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt;&gt;*, bool*) const (.part.0) Job.cpp:0:0
#<!-- -->70 0x0000000003d69d17 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&amp;, clang::driver::Command const*&amp;, bool) const (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x3d69d17)
#<!-- -->71 0x0000000003d6a6cd clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&amp;, llvm::SmallVectorImpl&lt;std::pair&lt;int, clang::driver::Command const*&gt;&gt;&amp;, bool) const (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x3d6a6cd)
#<!-- -->72 0x0000000003d7445c clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&amp;, llvm::SmallVectorImpl&lt;std::pair&lt;int, clang::driver::Command const*&gt;&gt;&amp;) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0x3d7445c)
#<!-- -->73 0x0000000000c16a21 clang_main(int, char**, llvm::ToolContext const&amp;) (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0xc16a21)
#<!-- -->74 0x0000000000b0fa84 main (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0xb0fa84)
#<!-- -->75 0x000070661f629d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#<!-- -->76 0x000070661f629e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#<!-- -->77 0x0000000000c1191e _start (/opt/compiler-explorer/clang-18.1.0/bin/clang+++0xc1191e)
clang++: error: clang frontend command failed with exit code 139 (use -v to see invocation)

I'm happy to provide more information if needed.

@Endilll
Copy link
Contributor

Endilll commented May 5, 2024

Confirmed on 19.0 (trunk): https://godbolt.org/z/4jn36W86E
Reduced by me and C-Reduce:

struct __normal_iterator {};

struct vector {
  __normal_iterator begin();
  int end();
};

template<typename _IteratorR>
bool operator==(_IteratorR __lhs, int) requires requires { __lhs; } {}

template <typename PrepareFunc>
void queued_for_each(PrepareFunc prep) {
  prep(vector{});
}

void scan() {
  queued_for_each(
    [&](auto ino) -> int {
      for (auto e : ino) {};
    }
  );
}

Clang 19.0 stack trace:

clang++: /root/llvm-project/llvm/include/llvm/ADT/SmallVector.h:304:
T& llvm::SmallVectorTemplateCommon<T, <template-parameter-1-2> >::operator[](llvm::SmallVectorTemplateCommon<T, <template-parameter-1-2> >::size_type) [with T = clang::sema::FunctionScopeInfo*; <template-parameter-1-2> = void; llvm::SmallVectorTemplateCommon<T, <template-parameter-1-2> >::reference = clang::sema::FunctionScopeInfo*&; llvm::SmallVectorTemplateCommon<T, <template-parameter-1-2> >::size_type = long unsigned int]:
Assertion `idx < size()' failed.

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: /opt/compiler-explorer/clang-assertions-trunk/bin/clang++ -gdwarf-4 -g -o /app/output.s -mllvm --x86-asm-syntax=intel -S --gcc-toolchain=/opt/compiler-explorer/gcc-snapshot -fcolor-diagnostics -fno-crash-diagnostics -std=c++20 <source>
1.	<eof> parser at end of file
2.	<source>:12:6: instantiating function definition 'queued_for_each<(lambda at <source>:18:5)>'
3.	<source>:18:5: instantiating function definition 'scan()::(anonymous class)::operator()<vector>'
 #0 0x0000000003979978 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3979978)
 #1 0x000000000397765c llvm::sys::CleanupOnSignal(unsigned long) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x397765c)
 #2 0x00000000038c9018 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #3 0x00007d5435e42520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #4 0x00007d5435e969fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
 #5 0x00007d5435e42476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
 #6 0x00007d5435e287f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
 #7 0x00007d5435e2871b (/lib/x86_64-linux-gnu/libc.so.6+0x2871b)
 #8 0x00007d5435e39e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
 #9 0x0000000006815f08 clang::Sema::tryCaptureVariable(clang::ValueDecl*, clang::SourceLocation, clang::Sema::TryCaptureKind, clang::SourceLocation, bool, clang::QualType&, clang::QualType&, unsigned int const*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6815f08)
#10 0x0000000006843816 clang::Sema::BuildDeclRefExpr(clang::ValueDecl*, clang::QualType, clang::ExprValueKind, clang::DeclarationNameInfo const&, clang::NestedNameSpecifierLoc, clang::NamedDecl*, clang::SourceLocation, clang::TemplateArgumentListInfo const*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6843816)
#11 0x000000000684406f clang::Sema::BuildDeclRefExpr(clang::ValueDecl*, clang::QualType, clang::ExprValueKind, clang::DeclarationNameInfo const&, clang::CXXScopeSpec const*, clang::NamedDecl*, clang::SourceLocation, clang::TemplateArgumentListInfo const*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x684406f)
#12 0x000000000684a354 clang::Sema::BuildDeclarationNameExpr(clang::CXXScopeSpec const&, clang::DeclarationNameInfo const&, clang::NamedDecl*, clang::NamedDecl*, clang::TemplateArgumentListInfo const*, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x684a354)
#13 0x0000000006e8a662 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformDeclRefExpr(clang::DeclRefExpr*) SemaTemplateInstantiate.cpp:0:0
#14 0x0000000006e8a86b (anonymous namespace)::TemplateInstantiator::TransformDeclRefExpr(clang::DeclRefExpr*) SemaTemplateInstantiate.cpp:0:0
#15 0x0000000006e64e24 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformExpr(clang::Expr*) SemaTemplateInstantiate.cpp:0:0
#16 0x0000000006e90bee clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformRequiresExpr(clang::RequiresExpr*) SemaTemplateInstantiate.cpp:0:0
#17 0x0000000006e92a1e (anonymous namespace)::TemplateInstantiator::TransformRequiresExpr(clang::RequiresExpr*) SemaTemplateInstantiate.cpp:0:0
#18 0x0000000006e65229 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformExpr(clang::Expr*) SemaTemplateInstantiate.cpp:0:0
#19 0x0000000006e9b394 clang::Sema::SubstConstraintExpr(clang::Expr*, clang::MultiLevelTemplateArgumentList const&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6e9b394)
#20 0x000000000655d633 calculateConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, clang::SourceLocation, clang::MultiLevelTemplateArgumentList const&, clang::Expr const*, clang::ConstraintSatisfaction&)::'lambda'(clang::Expr const*)::operator()(clang::Expr const*) const SemaConcept.cpp:0:0
#21 0x000000000655eeeb clang::ActionResult<clang::Expr*, true> calculateConstraintSatisfaction<calculateConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, clang::SourceLocation, clang::MultiLevelTemplateArgumentList const&, clang::Expr const*, clang::ConstraintSatisfaction&)::'lambda'(clang::Expr const*)>(clang::Sema&, clang::Expr const*, clang::ConstraintSatisfaction&, calculateConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, clang::SourceLocation, clang::MultiLevelTemplateArgumentList const&, clang::Expr const*, clang::ConstraintSatisfaction&)::'lambda'(clang::Expr const*)&&) SemaConcept.cpp:0:0
#22 0x000000000655f852 CheckConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, llvm::ArrayRef<clang::Expr const*>, llvm::SmallVectorImpl<clang::Expr*>&, clang::MultiLevelTemplateArgumentList const&, clang::SourceRange, clang::ConstraintSatisfaction&) SemaConcept.cpp:0:0
#23 0x000000000655fe8a clang::Sema::CheckConstraintSatisfaction(clang::NamedDecl const*, llvm::ArrayRef<clang::Expr const*>, llvm::SmallVectorImpl<clang::Expr*>&, clang::MultiLevelTemplateArgumentList const&, clang::SourceRange, clang::ConstraintSatisfaction&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x655fe8a)
#24 0x0000000006560f4b clang::Sema::CheckInstantiatedFunctionTemplateConstraints(clang::SourceLocation, clang::FunctionDecl*, llvm::ArrayRef<clang::TemplateArgument>, clang::ConstraintSatisfaction&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6560f4b)
#25 0x0000000006e239f7 clang::Sema::FinishTemplateArgumentDeduction(clang::FunctionTemplateDecl*, llvm::SmallVectorImpl<clang::DeducedTemplateArgument>&, unsigned int, clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&, llvm::SmallVectorImpl<clang::Sema::OriginalCallArg> const*, bool, llvm::function_ref<bool ()>) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6e239f7)
#26 0x0000000006e2518a void llvm::function_ref<void ()>::callback_fn<clang::Sema::DeduceTemplateArguments(clang::FunctionTemplateDecl*, clang::TemplateArgumentListInfo*, llvm::ArrayRef<clang::Expr*>, clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&, bool, bool, clang::QualType, clang::Expr::Classification, llvm::function_ref<bool (llvm::ArrayRef<clang::QualType>)>)::'lambda1'()>(long) SemaTemplateDeduction.cpp:0:0
#27 0x00000000063f4431 clang::Sema::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x63f4431)
#28 0x0000000006e2f9f2 clang::Sema::DeduceTemplateArguments(clang::FunctionTemplateDecl*, clang::TemplateArgumentListInfo*, llvm::ArrayRef<clang::Expr*>, clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&, bool, bool, clang::QualType, clang::Expr::Classification, llvm::function_ref<bool (llvm::ArrayRef<clang::QualType>)>) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6e2f9f2)
#29 0x0000000006c11438 clang::Sema::AddTemplateOverloadCandidate(clang::FunctionTemplateDecl*, clang::DeclAccessPair, clang::TemplateArgumentListInfo*, llvm::ArrayRef<clang::Expr*>, clang::OverloadCandidateSet&, bool, bool, bool, clang::CallExpr::ADLCallKind, clang::OverloadCandidateParamOrder, bool) (.constprop.1) SemaOverload.cpp:0:0
#30 0x0000000006c1182d clang::Sema::AddNonMemberOperatorCandidates(clang::UnresolvedSetImpl const&, llvm::ArrayRef<clang::Expr*>, clang::OverloadCandidateSet&, clang::TemplateArgumentListInfo*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6c1182d)
#31 0x0000000006c1448c clang::Sema::LookupOverloadedBinOp(clang::OverloadCandidateSet&, clang::OverloadedOperatorKind, clang::UnresolvedSetImpl const&, llvm::ArrayRef<clang::Expr*>, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6c1448c)
#32 0x0000000006c20378 clang::Sema::CreateOverloadedBinOp(clang::SourceLocation, clang::BinaryOperatorKind, clang::UnresolvedSetImpl const&, clang::Expr*, clang::Expr*, bool, bool, clang::FunctionDecl*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6c20378)
#33 0x00000000067e4b51 BuildOverloadedBinOp(clang::Sema&, clang::Scope*, clang::SourceLocation, clang::BinaryOperatorKind, clang::Expr*, clang::Expr*) SemaExpr.cpp:0:0
#34 0x000000000686b227 clang::Sema::BuildBinOp(clang::Scope*, clang::SourceLocation, clang::BinaryOperatorKind, clang::Expr*, clang::Expr*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x686b227)
#35 0x000000000686b7c3 clang::Sema::ActOnBinOp(clang::Scope*, clang::SourceLocation, clang::tok::TokenKind, clang::Expr*, clang::Expr*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x686b7c3)
#36 0x0000000006c531d8 clang::Sema::BuildCXXForRangeStmt(clang::SourceLocation, clang::SourceLocation, clang::Stmt*, clang::SourceLocation, clang::Stmt*, clang::Stmt*, clang::Stmt*, clang::Expr*, clang::Expr*, clang::Stmt*, clang::SourceLocation, clang::Sema::BuildForRangeKind, llvm::ArrayRef<clang::MaterializeTemporaryExpr*>) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6c531d8)
#37 0x0000000006e55a29 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::RebuildCXXForRangeStmt(clang::SourceLocation, clang::SourceLocation, clang::Stmt*, clang::SourceLocation, clang::Stmt*, clang::Stmt*, clang::Stmt*, clang::Expr*, clang::Expr*, clang::Stmt*, clang::SourceLocation, llvm::ArrayRef<clang::MaterializeTemporaryExpr*>) SemaTemplateInstantiate.cpp:0:0
#38 0x0000000006e9f7f7 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCXXForRangeStmt(clang::CXXForRangeStmt*) SemaTemplateInstantiate.cpp:0:0
#39 0x0000000006e9fe54 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCompoundStmt(clang::CompoundStmt*, bool) SemaTemplateInstantiate.cpp:0:0
#40 0x0000000006ea720a clang::Sema::SubstStmt(clang::Stmt*, clang::MultiLevelTemplateArgumentList const&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6ea720a)
#41 0x0000000006efd7c8 clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6efd7c8)
#42 0x0000000006efba8f clang::Sema::PerformPendingInstantiations(bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6efba8f)
#43 0x0000000006efd23c clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6efd23c)
#44 0x0000000006efba8f clang::Sema::PerformPendingInstantiations(bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6efba8f)
#45 0x0000000006416c2f clang::Sema::ActOnEndOfTranslationUnitFragment(clang::Sema::TUFragmentKind) (.part.0) Sema.cpp:0:0
#46 0x000000000641741a clang::Sema::ActOnEndOfTranslationUnit() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x641741a)
#47 0x000000000629189a clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x629189a)
#48 0x000000000628527a clang::ParseAST(clang::Sema&, bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x628527a)
#49 0x0000000004246e08 clang::CodeGenAction::ExecuteAction() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x4246e08)
#50 0x00000000044c8199 clang::FrontendAction::Execute() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x44c8199)
#51 0x000000000445025e clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x445025e)
#52 0x00000000045aef3e clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x45aef3e)
#53 0x0000000000c4fdec cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xc4fdec)
#54 0x0000000000c4907a ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#55 0x000000000428a649 void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::'lambda'()>(long) Job.cpp:0:0
#56 0x00000000038c94c4 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x38c94c4)
#57 0x000000000428ac3f clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (.part.0) Job.cpp:0:0
#58 0x0000000004250fd5 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x4250fd5)
#59 0x0000000004251a3d clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x4251a3d)
#60 0x00000000042597c5 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x42597c5)
#61 0x0000000000c4d285 clang_main(int, char**, llvm::ToolContext const&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xc4d285)
#62 0x0000000000b2f354 main (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xb2f354)
#63 0x00007d5435e29d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#64 0x00007d5435e29e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#65 0x0000000000c48b6e _start (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xc48b6e)
clang++: error: clang frontend command failed with exit code 134 (use -v to see invocation)
Compiler returned: 134

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
c++20 clang:frontend Language frontend issues, e.g. anything involving "Sema" concepts C++20 concepts confirmed Verified by a second party crash Prefer [crash-on-valid] or [crash-on-invalid]
Projects
Status: Done
Development

Successfully merging a pull request may close this issue.

6 participants