[llvm-bugs] [Bug 44614] New: Assertion failure with requires clause put after function parameters that mentions any variable

via llvm-bugs llvm-bugs at lists.llvm.org
Tue Jan 21 23:27:32 PST 2020


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

            Bug ID: 44614
           Summary: Assertion failure with requires clause put after
                    function parameters that mentions any variable
           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


constexpr auto value = 0;

template<typename = void>
static constexpr auto f() requires(value, true) {
}

static_assert((f(), true));



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 outputs



clang++: /home/david/llvm/clang/lib/Sema/SemaExpr.cpp:16940: void
DoMarkVarDeclReferenced(clang::Sema &, clang::SourceLocation, clang::VarDecl *,
clang::Expr *): Assertion `(!E || isa<FunctionParmPackExpr>(E)) && "missing
non-odr-use marking for unevaluated decl ref"' failed.
Stack dump:
0.      Program arguments: /home/david/llvm/build/bin/clang++ -std=c++2a -o
/dev/null -c main.cpp 
1.      main.cpp:7:18: current parser token ')'
 #0 0x0000562efdd939d2 PrintStackTraceSignalHandler(void*)
(/home/david/llvm/build/bin/clang+++0x31e49d2)
 #1 0x0000562efdd9133e llvm::sys::RunSignalHandlers()
(/home/david/llvm/build/bin/clang+++0x31e233e)
 #2 0x0000562efdd92a57 llvm::sys::CleanupOnSignal(unsigned long)
(/home/david/llvm/build/bin/clang+++0x31e3a57)
 #3 0x0000562efdd0dc4e (anonymous
namespace)::CrashRecoveryContextImpl::HandleCrash(int, unsigned long)
(/home/david/llvm/build/bin/clang+++0x315ec4e)
 #4 0x0000562efdd0ddf4 CrashRecoverySignalHandler(int)
(/home/david/llvm/build/bin/clang+++0x315edf4)
 #5 0x00007f910abb9930 __restore_rt (/usr/lib/libpthread.so.0+0x14930)
 #6 0x00007f910a634f25 raise (/usr/lib/libc.so.6+0x3bf25)
 #7 0x00007f910a61e897 abort (/usr/lib/libc.so.6+0x25897)
 #8 0x00007f910a61e767 _nl_load_domain.cold (/usr/lib/libc.so.6+0x25767)
 #9 0x00007f910a62d526 (/usr/lib/libc.so.6+0x34526)
#10 0x0000562effd5ab40 DoMarkVarDeclReferenced(clang::Sema&,
clang::SourceLocation, clang::VarDecl*, clang::Expr*)
(/home/david/llvm/build/bin/clang+++0x51abb40)
#11 0x0000562f00157cc0 clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformDeclRefExpr(clang::DeclRefExpr*)
(/home/david/llvm/build/bin/clang+++0x55a8cc0)
#12 0x0000562f00140eee clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformExpr(clang::Expr*)
(/home/david/llvm/build/bin/clang+++0x5591eee)
#13 0x0000562f00146470 clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformBinaryOperator(clang::BinaryOperator*)
(/home/david/llvm/build/bin/clang+++0x5597470)
#14 0x0000562f0013f909 clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformExpr(clang::Expr*)
(/home/david/llvm/build/bin/clang+++0x5590909)
#15 0x0000562f00150f98 clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformParenExpr(clang::ParenExpr*)
(/home/david/llvm/build/bin/clang+++0x55a1f98)
#16 0x0000562f001404b7 clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformExpr(clang::Expr*)
(/home/david/llvm/build/bin/clang+++0x55914b7)
#17 0x0000562f0013743a clang::Sema::SubstExpr(clang::Expr*,
clang::MultiLevelTemplateArgumentList const&)
(/home/david/llvm/build/bin/clang+++0x558843a)
#18 0x0000562f0017e350
clang::TemplateDeclInstantiator::VisitFunctionDecl(clang::FunctionDecl*,
clang::TemplateParameterList*, clang::TemplateDeclInstantiator::RewriteKind)
(/home/david/llvm/build/bin/clang+++0x55cf350)
#19 0x0000562f0018e104 void llvm::function_ref<void
()>::callback_fn<clang::Sema::SubstDecl(clang::Decl*, clang::DeclContext*,
clang::MultiLevelTemplateArgumentList const&)::$_0>(long)
(/home/david/llvm/build/bin/clang+++0x55df104)
#20 0x0000562eff9d41ec
clang::Sema::runWithSufficientStackSpace(clang::SourceLocation,
llvm::function_ref<void ()>) (/home/david/llvm/build/bin/clang+++0x4e251ec)
#21 0x0000562f001875b2 clang::Sema::SubstDecl(clang::Decl*,
clang::DeclContext*, clang::MultiLevelTemplateArgumentList const&)
(/home/david/llvm/build/bin/clang+++0x55d85b2)
#22 0x0000562f000cff2b
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+++0x5520f2b)
#23 0x0000562f000d1cc3
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 0x0000562efff912d0
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 0x0000562efffa774d AddOverloadedCallCandidate(clang::Sema&,
clang::DeclAccessPair, clang::TemplateArgumentListInfo*,
llvm::ArrayRef<clang::Expr*>, clang::OverloadCandidateSet&, bool, bool)
(/home/david/llvm/build/bin/clang+++0x53f874d)
#26 0x0000562efffa754e
clang::Sema::AddOverloadedCallCandidates(clang::UnresolvedLookupExpr*,
llvm::ArrayRef<clang::Expr*>, clang::OverloadCandidateSet&, bool)
(/home/david/llvm/build/bin/clang+++0x53f854e)
#27 0x0000562efffa7a3b 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 0x0000562efffa7e79 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 0x0000562effd002d2 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 0x0000562effd1cd18 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 0x0000562eff941dab
clang::Parser::ParsePostfixExpressionSuffix(clang::ActionResult<clang::Expr*,
true>) (/home/david/llvm/build/bin/clang+++0x4d92dab)
#32 0x0000562eff943538
clang::Parser::ParseCastExpression(clang::Parser::CastParseKind, bool, bool&,
clang::Parser::TypeCastState, bool, bool*)
(/home/david/llvm/build/bin/clang+++0x4d94538)
#33 0x0000562eff93f4b4
clang::Parser::ParseAssignmentExpression(clang::Parser::TypeCastState)
(/home/david/llvm/build/bin/clang+++0x4d904b4)
#34 0x0000562eff9495bf
clang::Parser::ParseParenExpression(clang::Parser::ParenParseOption&, bool,
bool, clang::OpaquePtr<clang::QualType>&, clang::SourceLocation&)
(/home/david/llvm/build/bin/clang+++0x4d9a5bf)
#35 0x0000562eff945306
clang::Parser::ParseCastExpression(clang::Parser::CastParseKind, bool, bool&,
clang::Parser::TypeCastState, bool, bool*)
(/home/david/llvm/build/bin/clang+++0x4d96306)
#36 0x0000562eff9428e3
clang::Parser::ParseConstantExpressionInExprEvalContext(clang::Parser::TypeCastState)
(/home/david/llvm/build/bin/clang+++0x4d938e3)
#37 0x0000562eff8f2eca
clang::Parser::ParseStaticAssertDeclaration(clang::SourceLocation&)
(/home/david/llvm/build/bin/clang+++0x4d43eca)
#38 0x0000562eff9109c4
clang::Parser::ParseDeclaration(clang::DeclaratorContext,
clang::SourceLocation&, clang::Parser::ParsedAttributesWithRange&,
clang::SourceLocation*) (/home/david/llvm/build/bin/clang+++0x4d619c4)
#39 0x0000562eff8e4a3f
clang::Parser::ParseExternalDeclaration(clang::Parser::ParsedAttributesWithRange&,
clang::ParsingDeclSpec*) (/home/david/llvm/build/bin/clang+++0x4d35a3f)
#40 0x0000562eff8e31a9
clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, bool)
(/home/david/llvm/build/bin/clang+++0x4d341a9)
#41 0x0000562eff8de3cd clang::ParseAST(clang::Sema&, bool, bool)
(/home/david/llvm/build/bin/clang+++0x4d2f3cd)
#42 0x0000562efe7c9074 clang::CodeGenAction::ExecuteAction()
(/home/david/llvm/build/bin/clang+++0x3c1a074)
#43 0x0000562efe7091b6 clang::FrontendAction::Execute()
(/home/david/llvm/build/bin/clang+++0x3b5a1b6)
#44 0x0000562efe65c973
clang::CompilerInstance::ExecuteAction(clang::FrontendAction&)
(/home/david/llvm/build/bin/clang+++0x3aad973)
#45 0x0000562efe7c3b58
clang::ExecuteCompilerInvocation(clang::CompilerInstance*)
(/home/david/llvm/build/bin/clang+++0x3c14b58)
#46 0x0000562efcce033f cc1_main(llvm::ArrayRef<char const*>, char const*,
void*) (/home/david/llvm/build/bin/clang+++0x213133f)
#47 0x0000562efe50e748 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)
#48 0x0000562efdd0db9a
llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>)
(/home/david/llvm/build/bin/clang+++0x315eb9a)
#49 0x0000562efe50dba5
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)
#50 0x0000562efe4d843b
clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&,
clang::driver::Command const*&) const
(/home/david/llvm/build/bin/clang+++0x392943b)
#51 0x0000562efe4d888a
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)
#52 0x0000562efe4f0e27
clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&,
llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*> >&)
(/home/david/llvm/build/bin/clang+++0x3941e27)
#53 0x0000562efccddbe7 main (/home/david/llvm/build/bin/clang+++0x212ebe7)
#54 0x00007f910a620153 __libc_start_main (/usr/lib/libc.so.6+0x27153)
#55 0x0000562efccdb02e _start (/home/david/llvm/build/bin/clang+++0x212c02e)
clang-10: error: clang frontend command failed due to signal (use -v to see
invocation)
clang version 11.0.0 
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /home/david/llvm/build/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/main-8539e9.cpp
clang-10: note: diagnostic msg: /tmp/main-8539e9.sh
clang-10: note: diagnostic msg: 

********************



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

-- 
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/34daf17a/attachment-0001.html>


More information about the llvm-bugs mailing list