<html>
<head>
<base href="https://bugs.llvm.org/">
</head>
<body><table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Bug ID</th>
<td><a class="bz_bug_link
bz_status_NEW "
title="NEW - Assertion failure with requires clause that mentions function parameter in class template"
href="https://bugs.llvm.org/show_bug.cgi?id=44613">44613</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>Assertion failure with requires clause that mentions function parameter in class template
</td>
</tr>
<tr>
<th>Product</th>
<td>clang
</td>
</tr>
<tr>
<th>Version</th>
<td>trunk
</td>
</tr>
<tr>
<th>Hardware</th>
<td>PC
</td>
</tr>
<tr>
<th>OS</th>
<td>Linux
</td>
</tr>
<tr>
<th>Status</th>
<td>NEW
</td>
</tr>
<tr>
<th>Severity</th>
<td>enhancement
</td>
</tr>
<tr>
<th>Priority</th>
<td>P
</td>
</tr>
<tr>
<th>Component</th>
<td>C++2a
</td>
</tr>
<tr>
<th>Assignee</th>
<td>unassignedclangbugs@nondot.org
</td>
</tr>
<tr>
<th>Reporter</th>
<td>david@doublewise.net
</td>
</tr>
<tr>
<th>CC</th>
<td>blitzrakete@gmail.com, erik.pilkington@gmail.com, llvm-bugs@lists.llvm.org, richard-llvm@metafoo.co.uk
</td>
</tr></table>
<p>
<div>
<pre>The following code
struct type {};
template<typename T>
struct trait {
template<typename U>
static constexpr auto f(U const index) requires(index, true) {
return true;
}
};
static_assert(trait<void>::f(type()));
when compiled with
david@arch-laptop ~/test> /home/david/llvm/build/bin/clang++ -std=c++2a -o
/dev/null -c main.cpp
at revision bb9b964
Crashes with the error:
clang++: /home/david/llvm/clang/lib/Sema/SemaTemplateInstantiate.cpp:3345:
llvm::PointerUnion<Decl *, LocalInstantiationScope::DeclArgumentPack *>
*clang::LocalInstantiationScope::findInstantiationOf(const clang::Decl *):
Assertion `isa<LabelDecl>(D) && "declaration not instantiated in this scope"'
failed.
Stack dump:
0. Program arguments: /home/david/llvm/build/bin/clang++ -std=c++2a -o
/dev/null -c main.cpp
1. main.cpp:11:36: current parser token ')'
#0 0x00005622fc7689d2 PrintStackTraceSignalHandler(void*)
(/home/david/llvm/build/bin/clang+++0x31e49d2)
#1 0x00005622fc76633e llvm::sys::RunSignalHandlers()
(/home/david/llvm/build/bin/clang+++0x31e233e)
#2 0x00005622fc767a57 llvm::sys::CleanupOnSignal(unsigned long)
(/home/david/llvm/build/bin/clang+++0x31e3a57)
#3 0x00005622fc6e2c4e (anonymous
namespace)::CrashRecoveryContextImpl::HandleCrash(int, unsigned long)
(/home/david/llvm/build/bin/clang+++0x315ec4e)
#4 0x00005622fc6e2df4 CrashRecoverySignalHandler(int)
(/home/david/llvm/build/bin/clang+++0x315edf4)
#5 0x00007f654095c930 __restore_rt (/usr/lib/libpthread.so.0+0x14930)
#6 0x00007f65403d7f25 raise (/usr/lib/libc.so.6+0x3bf25)
#7 0x00007f65403c1897 abort (/usr/lib/libc.so.6+0x25897)
#8 0x00007f65403c1767 _nl_load_domain.cold (/usr/lib/libc.so.6+0x25767)
#9 0x00007f65403d0526 (/usr/lib/libc.so.6+0x34526)
#10 0x00005622feb19698
clang::LocalInstantiationScope::findInstantiationOf(clang::Decl const*)
(/home/david/llvm/build/bin/clang+++0x5595698)
#11 0x00005622feb4a1ca clang::Sema::FindInstantiatedDecl(clang::SourceLocation,
clang::NamedDecl*, clang::MultiLevelTemplateArgumentList const&, bool)
(/home/david/llvm/build/bin/clang+++0x55c61ca)
#12 0x00005622feb19ea5 (anonymous
namespace)::TemplateInstantiator::TransformDecl(clang::SourceLocation,
clang::Decl*) (/home/david/llvm/build/bin/clang+++0x5595ea5)
#13 0x00005622feb2cb15 clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformDeclRefExpr(clang::DeclRefExpr*)
(/home/david/llvm/build/bin/clang+++0x55a8b15)
#14 0x00005622feb15eee clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformExpr(clang::Expr*)
(/home/david/llvm/build/bin/clang+++0x5591eee)
#15 0x00005622feb1b470 clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformBinaryOperator(clang::BinaryOperator*)
(/home/david/llvm/build/bin/clang+++0x5597470)
#16 0x00005622feb14909 clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformExpr(clang::Expr*)
(/home/david/llvm/build/bin/clang+++0x5590909)
#17 0x00005622feb0c43a clang::Sema::SubstExpr(clang::Expr*,
clang::MultiLevelTemplateArgumentList const&)
(/home/david/llvm/build/bin/clang+++0x558843a)
#18 0x00005622fe4c0d93 bool
calculateConstraintSatisfaction<clang::TemplateDecl>(clang::Sema&,
clang::TemplateDecl*, llvm::ArrayRef<clang::TemplateArgument>,
clang::SourceLocation, clang::MultiLevelTemplateArgumentList&, clang::Expr
const*, clang::ConstraintSatisfaction&)::'lambda'(clang::Expr
const*)::operator()(clang::Expr const*) const
(/home/david/llvm/build/bin/clang+++0x4f3cd93)
#19 0x00005622fe4c014f bool calculateConstraintSatisfaction<bool
calculateConstraintSatisfaction<clang::TemplateDecl>(clang::Sema&,
clang::TemplateDecl*, llvm::ArrayRef<clang::TemplateArgument>,
clang::SourceLocation, clang::MultiLevelTemplateArgumentList&, clang::Expr
const*, clang::ConstraintSatisfaction&)::'lambda'(clang::Expr
const*)>(clang::Sema&, clang::Expr const*, clang::ConstraintSatisfaction&,
clang::TemplateDecl&&) (/home/david/llvm/build/bin/clang+++0x4f3c14f)
#20 0x00005622fe4ba53a
clang::Sema::CheckConstraintSatisfaction(clang::NamedDecl*,
llvm::ArrayRef<clang::Expr const*>, llvm::ArrayRef<clang::TemplateArgument>,
clang::SourceRange, clang::ConstraintSatisfaction&)
(/home/david/llvm/build/bin/clang+++0x4f3653a)
#21 0x00005622feb5d429
clang::Sema::CheckInstantiatedFunctionTemplateConstraints(clang::SourceLocation,
clang::FunctionDecl*, llvm::ArrayRef<clang::TemplateArgument>,
clang::ConstraintSatisfaction&) (/home/david/llvm/build/bin/clang+++0x55d9429)
#22 0x00005622feaa50c9
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 ()>) (/home/david/llvm/build/bin/clang+++0x55210c9)
#23 0x00005622feaa6cc3
clang::Sema::DeduceTemplateArguments(clang::FunctionTemplateDecl*,
clang::TemplateArgumentListInfo*, llvm::ArrayRef<clang::Expr*>,
clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&, bool,
llvm::function_ref<bool (llvm::ArrayRef<clang::QualType>)>)
(/home/david/llvm/build/bin/clang+++0x5522cc3)
#24 0x00005622fe9662d0
clang::Sema::AddTemplateOverloadCandidate(clang::FunctionTemplateDecl*,
clang::DeclAccessPair, clang::TemplateArgumentListInfo*,
llvm::ArrayRef<clang::Expr*>, clang::OverloadCandidateSet&, bool, bool, bool,
clang::CallExpr::ADLCallKind, clang::OverloadCandidateParamOrder)
(/home/david/llvm/build/bin/clang+++0x53e22d0)
#25 0x00005622fe97c74d AddOverloadedCallCandidate(clang::Sema&,
clang::DeclAccessPair, clang::TemplateArgumentListInfo*,
llvm::ArrayRef<clang::Expr*>, clang::OverloadCandidateSet&, bool, bool)
(/home/david/llvm/build/bin/clang+++0x53f874d)
#26 0x00005622fe97c54e
clang::Sema::AddOverloadedCallCandidates(clang::UnresolvedLookupExpr*,
llvm::ArrayRef<clang::Expr*>, clang::OverloadCandidateSet&, bool)
(/home/david/llvm/build/bin/clang+++0x53f854e)
#27 0x00005622fe97ca3b clang::Sema::buildOverloadedCallSet(clang::Scope*,
clang::Expr*, clang::UnresolvedLookupExpr*,
llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation,
clang::OverloadCandidateSet*, clang::ActionResult<clang::Expr*, true>*)
(/home/david/llvm/build/bin/clang+++0x53f8a3b)
#28 0x00005622fe97ce79 clang::Sema::BuildOverloadedCallExpr(clang::Scope*,
clang::Expr*, clang::UnresolvedLookupExpr*, clang::SourceLocation,
llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool,
bool) (/home/david/llvm/build/bin/clang+++0x53f8e79)
#29 0x00005622fe6d52d2 clang::Sema::BuildCallExpr(clang::Scope*, clang::Expr*,
clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>,
clang::SourceLocation, clang::Expr*, bool)
(/home/david/llvm/build/bin/clang+++0x51512d2)
#30 0x00005622fe6f1d18 clang::Sema::ActOnCallExpr(clang::Scope*, clang::Expr*,
clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>,
clang::SourceLocation, clang::Expr*)
(/home/david/llvm/build/bin/clang+++0x516dd18)
#31 0x00005622fe316dab
clang::Parser::ParsePostfixExpressionSuffix(clang::ActionResult<clang::Expr*,
true>) (/home/david/llvm/build/bin/clang+++0x4d92dab)
#32 0x00005622fe318538
clang::Parser::ParseCastExpression(clang::Parser::CastParseKind, bool, bool&,
clang::Parser::TypeCastState, bool, bool*)
(/home/david/llvm/build/bin/clang+++0x4d94538)
#33 0x00005622fe31a297
clang::Parser::ParseCastExpression(clang::Parser::CastParseKind, bool, bool&,
clang::Parser::TypeCastState, bool, bool*)
(/home/david/llvm/build/bin/clang+++0x4d96297)
#34 0x00005622fe3178e3
clang::Parser::ParseConstantExpressionInExprEvalContext(clang::Parser::TypeCastState)
(/home/david/llvm/build/bin/clang+++0x4d938e3)
#35 0x00005622fe2c7eca
clang::Parser::ParseStaticAssertDeclaration(clang::SourceLocation&)
(/home/david/llvm/build/bin/clang+++0x4d43eca)
#36 0x00005622fe2e59c4
clang::Parser::ParseDeclaration(clang::DeclaratorContext,
clang::SourceLocation&, clang::Parser::ParsedAttributesWithRange&,
clang::SourceLocation*) (/home/david/llvm/build/bin/clang+++0x4d619c4)
#37 0x00005622fe2b9a3f
clang::Parser::ParseExternalDeclaration(clang::Parser::ParsedAttributesWithRange&,
clang::ParsingDeclSpec*) (/home/david/llvm/build/bin/clang+++0x4d35a3f)
#38 0x00005622fe2b81a9
clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, bool)
(/home/david/llvm/build/bin/clang+++0x4d341a9)
#39 0x00005622fe2b33cd clang::ParseAST(clang::Sema&, bool, bool)
(/home/david/llvm/build/bin/clang+++0x4d2f3cd)
#40 0x00005622fd19e074 clang::CodeGenAction::ExecuteAction()
(/home/david/llvm/build/bin/clang+++0x3c1a074)
#41 0x00005622fd0de1b6 clang::FrontendAction::Execute()
(/home/david/llvm/build/bin/clang+++0x3b5a1b6)
#42 0x00005622fd031973
clang::CompilerInstance::ExecuteAction(clang::FrontendAction&)
(/home/david/llvm/build/bin/clang+++0x3aad973)
#43 0x00005622fd198b58
clang::ExecuteCompilerInvocation(clang::CompilerInstance*)
(/home/david/llvm/build/bin/clang+++0x3c14b58)
#44 0x00005622fb6b533f cc1_main(llvm::ArrayRef<char const*>, char const*,
void*) (/home/david/llvm/build/bin/clang+++0x213133f)
#45 0x00005622fcee3748 void llvm::function_ref<void
()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<llvm::Optional<llvm::StringRef>
<span class="quote">>, std::__cxx11::basic_string<char, std::char_traits<char>,</span >
std::allocator<char> >*, bool*) const::$_1>(long)
(/home/david/llvm/build/bin/clang+++0x395f748)
#46 0x00005622fc6e2b9a
llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>)
(/home/david/llvm/build/bin/clang+++0x315eb9a)
#47 0x00005622fcee2ba5
clang::driver::CC1Command::Execute(llvm::ArrayRef<llvm::Optional<llvm::StringRef>
<span class="quote">>, std::__cxx11::basic_string<char, std::char_traits<char>,</span >
std::allocator<char> >*, bool*) const
(/home/david/llvm/build/bin/clang+++0x395eba5)
#48 0x00005622fcead43b
clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&,
clang::driver::Command const*&) const
(/home/david/llvm/build/bin/clang+++0x392943b)
#49 0x00005622fcead88a
clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&,
llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*> >&) const
(/home/david/llvm/build/bin/clang+++0x392988a)
#50 0x00005622fcec5e27
clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&,
llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*> >&)
(/home/david/llvm/build/bin/clang+++0x3941e27)
#51 0x00005622fb6b2be7 main (/home/david/llvm/build/bin/clang+++0x212ebe7)
#52 0x00007f65403c3153 __libc_start_main (/usr/lib/libc.so.6+0x27153)
#53 0x00005622fb6b002e _start (/home/david/llvm/build/bin/clang+++0x212c02e)
clang++: /home/david/llvm/clang/lib/Parse/Parser.cpp:444: virtual
clang::Parser::~Parser(): Assertion `TemplateIds.empty() && "Still alive
TemplateIdAnnotations around?"' failed.
fish: “/home/david/llvm/build/bin/clan…” terminated by signal SIGABRT (Abort)</pre>
</div>
</p>
<hr>
<span>You are receiving this mail because:</span>
<ul>
<li>You are on the CC list for the bug.</li>
</ul>
</body>
</html>