[llvm-bugs] [Bug 44613] New: Assertion failure with requires clause that mentions function parameter in class template

via llvm-bugs llvm-bugs at lists.llvm.org
Tue Jan 21 22:21:48 PST 2020


https://bugs.llvm.org/show_bug.cgi?id=44613

            Bug ID: 44613
           Summary: Assertion failure with requires clause that mentions
                    function parameter in class template
           Product: clang
           Version: trunk
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: C++2a
          Assignee: unassignedclangbugs at nondot.org
          Reporter: david at doublewise.net
                CC: blitzrakete at gmail.com, erik.pilkington at gmail.com,
                    llvm-bugs at lists.llvm.org, richard-llvm at metafoo.co.uk

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 at 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>
>, std::__cxx11::basic_string<char, std::char_traits<char>,
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>
>, std::__cxx11::basic_string<char, std::char_traits<char>,
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)

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20200122/46b6c572/attachment.html>


More information about the llvm-bugs mailing list