<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 put after function parameters that mentions any variable"
   href="https://bugs.llvm.org/show_bug.cgi?id=44614">44614</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>Assertion failure with requires clause put after function parameters that mentions any variable
          </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


constexpr auto value = 0;

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

static_assert((f(), true));



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 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>
<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)
#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>
<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)
#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
<a href="https://bugs.llvm.org/">https://bugs.llvm.org/</a> 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: <a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - Assertion failure with requires clause that mentions function parameter in class template"
   href="show_bug.cgi?id=44613">https://bugs.llvm.org/show_bug.cgi?id=44613</a></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>