clang-concepts-monorepo
clang-concepts-monorepo copied to clipboard
ICE parsing deduction guide for class template with constrained constructor
This well-formed TU:
template <class> concept C = true;
template <class T> struct S {
template <C U> S(U) {}
};
template <class T> S(T&) -> S<T>;
ICEs the compiler with diagnostics (from my local debug build):
1. /home/casey/casey/Desktop/repro.cpp:7:33: current parser token ';'
#0 0x00007f81e103c5f3 llvm::sys::PrintStackTrace(llvm::raw_ostream&) /home/casey/repos/clang-concepts/llvm/lib/Support/Unix/Signals.inc:533:22
#1 0x00007f81e103c686 PrintStackTraceSignalHandler(void*) /home/casey/repos/clang-concepts/llvm/lib/Support/Unix/Signals.inc:594:1
#2 0x00007f81e103a574 llvm::sys::RunSignalHandlers() /home/casey/repos/clang-concepts/llvm/lib/Support/Signals.cpp:68:20
#3 0x00007f81e103bfad SignalHandler(int) /home/casey/repos/clang-concepts/llvm/lib/Support/Unix/Signals.inc:385:1
#4 0x00007f81dd1f2890 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x12890)
#5 0x00007f81e43d1cf1 (anonymous namespace)::ConvertConstructorToDeductionGuideTransform::transformTemplateParameter(clang::NamedDecl*, clang::MultiLevelTemplateArgumentList&) /home/casey/repos/clang-concepts/clang/lib/Sema/SemaTemplate.cpp:2028:42
#6 0x00007f81e43d13f9 (anonymous namespace)::ConvertConstructorToDeductionGuideTransform::transformConstructor(clang::FunctionTemplateDecl*, clang::CXXConstructorDecl*) /home/casey/repos/clang-concepts/clang/lib/Sema/SemaTemplate.cpp:1938:69
#7 0x00007f81e43d2e57 clang::Sema::DeclareImplicitDeductionGuides(clang::TemplateDecl*, clang::SourceLocation) /home/casey/repos/clang-concepts/clang/lib/Sema/SemaTemplate.cpp:2262:14
#8 0x00007f81e41e1c07 DeclareImplicitMemberFunctionsWithName(clang::Sema&, clang::DeclarationName, clang::SourceLocation, clang::DeclContext const*) /home/casey/repos/clang-concepts/clang/lib/Sema/SemaLookup.cpp:911:5
#9 0x00007f81e41e1cb3 LookupDirect(clang::Sema&, clang::LookupResult&, clang::DeclContext const*) /home/casey/repos/clang-concepts/clang/lib/Sema/SemaLookup.cpp:929:63
#10 0x00007f81e41e2339 CppNamespaceLookup(clang::Sema&, clang::LookupResult&, clang::ASTContext&, clang::DeclContext*, (anonymous namespace)::UnqualUsingDirectiveSet&) /home/casey/repos/clang-concepts/clang/lib/Sema/SemaLookup.cpp:1028:28
#11 0x00007f81e41e3372 clang::Sema::CppLookupName(clang::LookupResult&, clang::Scope*) /home/casey/repos/clang-concepts/clang/lib/Sema/SemaLookup.cpp:1408:11
#12 0x00007f81e41e4ad0 clang::Sema::LookupName(clang::LookupResult&, clang::Scope*, bool) /home/casey/repos/clang-concepts/clang/lib/Sema/SemaLookup.cpp:1930:5
#13 0x00007f81e3c39e2c clang::Sema::HandleDeclarator(clang::Scope*, clang::Declarator&, llvm::MutableArrayRef<clang::TemplateParameterList*>) /home/casey/repos/clang-concepts/clang/lib/Sema/SemaDecl.cpp:5494:15
#14 0x00007f81e43eb431 clang::Sema::ActOnTemplateDeclarator(clang::Scope*, llvm::MutableArrayRef<clang::TemplateParameterList*>, clang::Declarator&) /home/casey/repos/clang-concepts/clang/lib/Sema/SemaTemplate.cpp:8351:35
#15 0x00007f81e39acf5b clang::Parser::ParseDeclarationAfterDeclaratorAndAttributes(clang::Declarator&, clang::Parser::ParsedTemplateInfo const&, clang::Parser::ForRangeInit*) /home/casey/repos/clang-concepts/clang/lib/Parse/ParseDecl.cpp:2269:14
#16 0x00007f81e39acac7 clang::Parser::ParseDeclarationAfterDeclarator(clang::Declarator&, clang::Parser::ParsedTemplateInfo const&) /home/casey/repos/clang-concepts/clang/lib/Parse/ParseDecl.cpp:2217:70
#17 0x00007f81e3a5d827 clang::Parser::ParseSingleDeclarationAfterTemplate(clang::DeclaratorContext, clang::Parser::ParsedTemplateInfo const&, clang::ParsingDeclRAIIObject&, clang::SourceLocation&, clang::ParsedAttributes&, clang::AccessSpecifier) /home/casey/repos/clang-concepts/clang/lib/Parse/ParseTemplate.cpp:339:51
#18 0x00007f81e3a5ca43 clang::Parser::ParseTemplateDeclarationOrSpecialization(clang::DeclaratorContext, clang::SourceLocation&, clang::ParsedAttributes&, clang::AccessSpecifier) /home/casey/repos/clang-concepts/clang/lib/Parse/ParseTemplate.cpp:162:45
#19 0x00007f81e3a5c4b5 clang::Parser::ParseDeclarationStartingWithTemplate(clang::DeclaratorContext, clang::SourceLocation&, clang::ParsedAttributes&, clang::AccessSpecifier) /home/casey/repos/clang-concepts/clang/lib/Parse/ParseTemplate.cpp:36:50
#20 0x00007f81e39ab1c6 clang::Parser::ParseDeclaration(clang::DeclaratorContext, clang::SourceLocation&, clang::Parser::ParsedAttributesWithRange&) /home/casey/repos/clang-concepts/clang/lib/Parse/ParseDecl.cpp:1740:54
#21 0x00007f81e398d4ad clang::Parser::ParseExternalDeclaration(clang::Parser::ParsedAttributesWithRange&, clang::ParsingDeclSpec*) (.localalias) /home/casey/repos/clang-concepts/clang/lib/Parse/Parser.cpp:865:77
#22 0x00007f81e398ca53 clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, bool) /home/casey/repos/clang-concepts/clang/lib/Parse/Parser.cpp:683:42
#23 0x00007f81e39888d6 clang::ParseAST(clang::Sema&, bool, bool) /home/casey/repos/clang-concepts/clang/lib/Parse/ParseAST.cpp:158:37
#24 0x00007f81e1a8cecd clang::ASTFrontendAction::ExecuteAction() /home/casey/repos/clang-concepts/clang/lib/Frontend/FrontendAction.cpp:1041:11
#25 0x00007f81e2303ba1 clang::CodeGenAction::ExecuteAction() /home/casey/repos/clang-concepts/clang/lib/CodeGen/CodeGenAction.cpp:1060:1
#26 0x00007f81e1a8c830 clang::FrontendAction::Execute() /home/casey/repos/clang-concepts/clang/lib/Frontend/FrontendAction.cpp:938:38
#27 0x00007f81e1a28430 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) /home/casey/repos/clang-concepts/clang/lib/Frontend/CompilerInstance.cpp:944:42
#28 0x00007f81e1bee37b clang::ExecuteCompilerInvocation(clang::CompilerInstance*) /home/casey/repos/clang-concepts/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:291:38 #29 0x00007f81dfa798bf cc1_main(llvm::ArrayRef<char const*>, char const*, void*) /home/casey/repos/clang-concepts/clang/tools/driver/cc1_main.cpp:249:40
#30 0x00007f81dfa6ef0d ExecuteCC1Tool(llvm::ArrayRef<char const*>, llvm::StringRef) /home/casey/repos/clang-concepts/clang/tools/driver/driver.cpp:309:64
#31 0x00007f81dfa6f5eb main /home/casey/repos/clang-concepts/clang/tools/driver/driver.cpp:381:26
#32 0x00007f81dbe01b97 __libc_start_main /build/glibc-OTsEL5/glibc-2.27/csu/../csu/libc-start.c:344:0
#33 0x00007f81dfa6d6fa _start (/home/casey/llvm/bin/clang-10+0x226d6fa)
clang-10: error: unable to execute command: Segmentation fault (core dumped) clang-10: error: clang frontend command failed due to signal (use -v to see invocation) clang version 10.0.0 ([email protected]:saarraz/clang-concepts-monorepo 2b7ef558dc44fa5fe8ef29d5f20eca7b40174129)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /home/casey/llvm/bin
clang-10: note: diagnostic msg: PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash backtrace, preprocessed source, and associated run script. clang-10: note: diagnostic msg:
********************
PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang-10: note: diagnostic msg: /tmp/repro-0c2fd0.cpp clang-10: note: diagnostic msg: /tmp/repro-0c2fd0.sh clang-10: note: diagnostic msg:
********************
This happens only with one of the terse forms. Using a requires clause prevents this.