<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/57971>57971</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Variable template lambda with constrained call operator converted to function pointer causes Assertion `!isValueDependent() && "Expression evaluator can't be called on a dependent expression."'
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          davidstone
      </td>
    </tr>
</table>

<pre>
    The following valid translation unit

```
template<typename>
concept any = true;

template<typename>
auto f = [](any auto) {
};

using function_ptr = void(*)(int);
function_ptr ptr = f<void>;
```

Causes clang to crash with an assertion failure

```
clang++: /root/llvm-project/clang/lib/AST/ExprConstant.cpp:15157: bool clang::Expr::EvaluateAsConstantExpr(clang::Expr::EvalResult&, const clang::ASTContext&, clang::Expr::ConstantExprKind) const: Assertion `!isValueDependent() && "Expression evaluator can't be called on a dependent expression."' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0.      Program arguments: /opt/compiler-explorer/clang-assertions-trunk/bin/clang++ -gdwarf-4 -g -o /app/output.s -S --gcc-toolchain=/opt/compiler-explorer/gcc-snapshot -fcolor-diagnostics -fno-crash-diagnostics -std=c++2b <source>
1.      <source>:9:27: current parser token ';'
 #0 0x000055d9bc75cce4 PrintStackTraceSignalHandler(void*) Signals.cpp:0:0
 #1 0x000055d9bc75aa8c llvm::sys::CleanupOnSignal(unsigned long) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3f6ea8c)
 #2 0x000055d9bc691a18 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #3 0x00007f58eaa18420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
 #4 0x00007f58ea4e500b raise (/lib/x86_64-linux-gnu/libc.so.6+0x4300b)
 #5 0x00007f58ea4c4859 abort (/lib/x86_64-linux-gnu/libc.so.6+0x22859)
 #6 0x00007f58ea4c4729 (/lib/x86_64-linux-gnu/libc.so.6+0x22729)
 #7 0x00007f58ea4d5fd6 (/lib/x86_64-linux-gnu/libc.so.6+0x33fd6)
 #8 0x000055d9bfd4fc4f (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x7563c4f)
 #9 0x000055d9bef69cc1 clang::ActionResult<clang::Expr*, true> calculateConstraintSatisfaction<calculateConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, clang::SourceLocation, clang::MultiLevelTemplateArgumentList const&, clang::Expr const*, clang::ConstraintSatisfaction&)::'lambda'(clang::Expr const*)>(clang::Sema&, clang::Expr const*, clang::ConstraintSatisfaction&, calculateConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, clang::SourceLocation, clang::MultiLevelTemplateArgumentList const&, clang::Expr const*, clang::ConstraintSatisfaction&)::'lambda'(clang::Expr const*)&&) SemaConcept.cpp:0:0
#10 0x000055d9bef6a362 CheckConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, llvm::ArrayRef<clang::Expr const*>, llvm::SmallVectorImpl<clang::Expr*>&, clang::MultiLevelTemplateArgumentList const&, clang::SourceRange, clang::ConstraintSatisfaction&) SemaConcept.cpp:0:0
#11 0x000055d9bef6a8ae clang::Sema::CheckConstraintSatisfaction(clang::NamedDecl const*, llvm::ArrayRef<clang::Expr const*>, llvm::SmallVectorImpl<clang::Expr*>&, clang::MultiLevelTemplateArgumentList const&, clang::SourceRange, clang::ConstraintSatisfaction&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x677e8ae)
#12 0x000055d9bef6aebb clang::Sema::CheckInstantiatedFunctionTemplateConstraints(clang::SourceLocation, clang::FunctionDecl*, llvm::ArrayRef<clang::TemplateArgument>, clang::ConstraintSatisfaction&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x677eebb)
#13 0x000055d9bf70c05f 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 ()>) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6f2005f)
#14 0x000055d9bf70ccc2 void llvm::function_ref<void ()>::callback_fn<clang::Sema::DeduceTemplateArguments(clang::FunctionTemplateDecl*, clang::QualType, clang::CXXConversionDecl*&, clang::sema::TemplateDeductionInfo&)::'lambda'()>(long) SemaTemplateDeduction.cpp:0:0
#15 0x000055d9bee19be5 clang::Sema::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x662dbe5)
#16 0x000055d9bf70177e clang::Sema::DeduceTemplateArguments(clang::FunctionTemplateDecl*, clang::QualType, clang::CXXConversionDecl*&, clang::sema::TemplateDeductionInfo&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6f1577e)
#17 0x000055d9bf532c13 clang::Sema::AddTemplateConversionCandidate(clang::FunctionTemplateDecl*, clang::DeclAccessPair, clang::CXXRecordDecl*, clang::Expr*, clang::QualType, clang::OverloadCandidateSet&, bool, bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6d46c13)
#18 0x000055d9bf387fb0 TryUserDefinedConversion(clang::Sema&, clang::QualType, clang::InitializationKind const&, clang::Expr*, clang::InitializationSequence&, bool) SemaInit.cpp:0:0
#19 0x000055d9bf39acdf clang::InitializationSequence::InitializeFrom(clang::Sema&, clang::InitializedEntity const&, clang::InitializationKind const&, llvm::MutableArrayRef<clang::Expr*>, bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6baecdf)
#20 0x000055d9bf01e357 clang::Sema::AddInitializerToDecl(clang::Decl*, clang::Expr*, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6832357)
#21 0x000055d9becfa0d6 clang::Parser::ParseDeclarationAfterDeclaratorAndAttributes(clang::Declarator&, clang::Parser::ParsedTemplateInfo const&, clang::Parser::ForRangeInit*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x650e0d6)
#22 0x000055d9bed15880 clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, clang::DeclaratorContext, clang::ParsedAttributes&, clang::SourceLocation*, clang::Parser::ForRangeInit*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6529880)
#23 0x000055d9becd6bb9 clang::Parser::ParseDeclOrFunctionDefInternal(clang::ParsedAttributes&, clang::ParsingDeclSpec&, clang::AccessSpecifier) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x64eabb9)
#24 0x000055d9becd7410 clang::Parser::ParseDeclarationOrFunctionDefinition(clang::ParsedAttributes&, clang::ParsingDeclSpec*, clang::AccessSpecifier) (.part.0) Parser.cpp:0:0
#25 0x000055d9becdcbcb clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, clang::ParsingDeclSpec*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x64f0bcb)
#26 0x000055d9becdda5a clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x64f1a5a)
#27 0x000055d9becd1f0a clang::ParseAST(clang::Sema&, bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x64e5f0a)
#28 0x000055d9bda76058 clang::CodeGenAction::ExecuteAction() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x528a058)
#29 0x000055d9bd30fb99 clang::FrontendAction::Execute() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x4b23b99)
#30 0x000055d9bd29735e clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x4aab35e)
#31 0x000055d9bd3f5143 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x4c09143)
#32 0x000055d9b9c10df4 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x1424df4)
#33 0x000055d9b9c09ed8 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&) driver.cpp:0:0
#34 0x000055d9bd1064a9 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::'lambda'()>(long) Job.cpp:0:0
#35 0x000055d9bc6921ba llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3ea61ba)
#36 0x000055d9bd106cff clang::driver::CC1Command::Execute(llvm::ArrayRef<llvm::Optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (.part.0) Job.cpp:0:0
#37 0x000055d9bd0d0f69 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x48e4f69)
#38 0x000055d9bd0d19ed clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x48e59ed)
#39 0x000055d9bd0db48c clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x48ef48c)
#40 0x000055d9b9c0f1d3 clang_main(int, char**) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x14231d3)
#41 0x00007f58ea4c6083 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x24083)
#42 0x000055d9b9c09ace _start (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x141dace)
clang-16: error: clang frontend command failed with exit code 134 (use -v to see invocation)
Compiler returned: 134
```

See it live: https://godbolt.org/z/8Tdsneahj
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzlW0tz2zgS_jXyBSUX3yIPPiiyPZvdzCYTeWfnpgIBUMKEIrgg6djz67cbJCWCetjJypnaGpcskwTQ6P76CRBOFX--edgIkqk8V19lsSaPNJec1JoWVU5rqQrSFLKeOLcTZ959R073Mbe12JbQU0z8Rf1cioJu4fKubWOqYKKsCS2eycS_BbINNL4bUjs3nDa1IpkZOQnfTcLbiRcjKXw-8RIymfWkZrcjsk2FwmRNwVCGVVlrQ-ZRSQ5EJt4cxsOFLGq86Mda_fsxGbBmxgFbu0lsDNrvBW0qURGWU5gaOGeaVhvyVdYbAIDQqhLaAJpRmTdanMHUkJh47_Djz8nEu9dKAaf3ef64nZZa_S4Y3nb97nOZwvd8-QDfd0-lXqiiqmlRX7OyBAJu6IYzJJQqlbf8wR18sG93BXpvQA3zqh9r2rz4ZO_PompyYCKaeAvCcNCQMvAChGrxtOtxjM5wrn_IgqNSDSlkdr4DDHHxXFn9CjyKWwFWwgUqLjZGgPQj-OMhFVFVOEK04ihNGC0m3qwmqYDLPBecQDMlvKdCxG7UNdCAvkY_gl-3qvj04W6-vCNVk24lGDJJmzXRolS6RhVv6rqsUBbvHj5rUHWTXjO17VR1qDFZVY2o4AJMghNZsLzhgtTggq21pJR9AedjAjEDxmAkA-6A7Uo1un2MI8GaFJOgME50U5CKaVnWHcvLGogQ3mxR9-0jB5qST1qtNd0SqtfNFkSvOttSpbEltS1Bbj0FQHKlhe7ta7qz3GoKDlx8gYZUFnvzQzMl0zX_SnU2DeCKTBXSpWB8QL2py6a-rsh0SabTNWPTGqyQbSiQ8G_PTo-dq4KW1UbVZJoxBQ1TLum6UFUtGZDMCjU1wNmPqxq89Za1rHkpuPGig68PLS4CYj3253A_94yfsEZrtI2SahAdFP1FgBVi2zv8NhTg3neI8-TATxjyJGWzkDERkE8aoorRwQMqcinXBc3_BkrLUai4DUEYf0jbVHVe6pjfHW13RJvSmBFjVMZ1queq86Fc0KIpPxYtNZihKSq4BMvIFaoHXSS-kJrh4zz5WSSAGQycO249i9socakbkwVq5rNg6lHo5zEObei1-3Qh4zggfjfFLAtjQYF-4DlktQLnBT8XK3DIVs42GD7F0SoKprksmqfpumjahrLeaEH5daWuHSOLGwAVS5LAmiYQoeOkRFNZiVfQZ0g5MpQDHwZalEObMgviMCE0Va_ifEDZ82CgRTkaU57ttP5qmjPPpjmzafIw49G30fR9GGLRjIdWkvEgY0F2aeuchZEPZK15k-G8IosSxlwrW5ms32U0fzHOVeiti654ucM0whosWUz2AssAb4dKqcqooYLjX-hhZdWl2NLDHPlPqIP4rWB5lw9bFobDTOD6oBhtSVqNP4Mc8oN4FPlDV17Nu5j_QWKebkkey8unpjslidGv6QGBMafblFOMkAd1w4BugtH2FRB8JzuLFxX0V4ffFEwm_4Dsi7ZEPwy5mIKckd9QP_LIYiPYl0tDu09sc63p82eRHfrhfgAa0HDMcgul3a9QYSn9HgA_7sI4aMzM92mqVf5nuBffoKeX4XbHcMdUkDGg7Tyv1cFfF-0Lp5VoNhOgjl1aQX15Y32JND2jr_ftYsdU7ffdSrMHYi9KNXKic4Gmp4IKfqVqx8h32v0TUQXQLFR9q0iYOcwJs-Oo3stCVpuxRLeCN0c8YYz4UczOmrYhLPhRBI3R7gpvU9ue19TYyqudVHsGOzneF5nqBryS0z1EH7VcS6i7F9AbGDb1yyAQ4IaATXe3BaKN5Zgdg3albeS8vAVkHqg6sywgGFsAY57ZujnNp2nd82m64Hof19OrrDgFT6vSsUarV1vOoNcvDc0fnsuDGPXbb-BQsLip_lftH0_0u3qqX-yhcAdEjueb0IpfwoWv8LingQr_LevNsskyyaTo1rfL0mxUnA9Xr1XZG5hW5HGQyDKtaGRaLgSg4yL_X5nG5b3SDQEZC7qZBV3oewxC9VHo5pwP8lon4AJW_pLjTu93IIhP5wx3wj5RqQ9xxA0EzY-PHSzhXtbJR-A2V5TvuF2KviTpY6X99_LQ8yACZC3o7XWzH8-y1CEP-vlfQPNWZBJyzh7o1xThJ6R_X0goT3L5h_Fe3JE9t1g5BNUevxT_aUSBESIa4oUcYcfjMSmxRU0o49krprDbxL3GPdiXcdiP4HdQmdXPp-R9AZl9kPu5qWmai9N19b6ifmtDSqkA8IaG5FkLusxxhR_OTvrwHhz9oFrfikc-edbb3kqu2PeAbUsue-XEMurwaMjVJ7ORO7hG5qk2ypxnNXpRe6_0vODzutYybWpRHUrcdjo0kIMZdiEQo_QpsxqOulfaLHIQ9m6D-NLIhY5wBltyiJy9huFuGMfOi8j9pFVT2thgmyzW2LosBTsUdQ_e7sXQIRQW9McXgvvaYmx6PxpMLwGsLDB92wx5lKbJi2B-1PvFQfYeoNHtNv43YfMi_G32xDaZSZT38oAEgoK8FiDBCJBZ4L5sXZ1fWrhIjEXj3PYdsIxt5jgs1yXVNb4hSEjL4dFc5YUj6VjK0rPS3T212h1IeQmJ3kCVmQOyWKqMRsJyGtKzwj6o0uz1HGaOjyWFtP2p1uP1dRdZTN48sn-0z04_K97kAha-SuNSpBZvVAYHmQtiWjjMRji4mXOIg3kVf6L8eOu0H4gQWLJ4tupHTmeRE8b2lg8XP4li3r3AaPO4YGCB834n5Q04Db2YAiMWp1b5x30nSxMrgkJhBxESUvQhq2_DZJB6PvAwZNJ-7cu9ZOaHwoaznbbd8Our0zGip6V6E1sOKE2BT0sQ10Y7C93At4s5w_Jensdd8o3PyfsmQSlgTgL8WQJY1UvCXIdnAWHMXW3xeIEXH98N3dCD3W37GTwYvKa_sBxu4AXApiWHb8vhJILHpEd_4T6YUBGf3f07EMoYEdfy8UT68q3kzF0nCmhyyW22du7ORBYuWMkWVtVjnz2qov3DjyVOT3Pr4RLyY7Hu0kSrQHPkA9tWK_b05LrtTUoryVaV6d6BZHXGByvc7MbDMG3ziBwIhzav9KAduwxWOPPhsaXJyzt0f1fpcYVY9QSLEs9N6UAXx45KtC2fm2JJM5E_W3j-6P02X9AIOLYMOxrbGMus5fxfz0ZG9eVJY7DqDO5wJ4uSk8gZ5dGDlNjDaUXr0UDscGp5eqbrfLSrs5PtoiE_FgGIbVlUPMLFhVj5rbgA6NVpUKD14H3kudC7s4MS9yb9xeHbn7M4dsbyQ9AMASwLzWSEZhrE7BTnt4NrqzI4UhKc0sIPRPPyBUgssmBw7g0PizmjxJ25vKug-hKk59-ElfmblRQ-TGxx1td2_ZmwyIl9slrhES0IdhB_DIPfeEosACLWLN64cKFMkJb-5YV0uXnflAwOSU_dCKyACK0x-s67w9dZV0-DWbTm0R7pbc9iiyeJvs0FcaEEwvOSlSDTRzzOWwlB5KDI7Wbq61uiRd3oQqCB4uAzZ8GXSKkmOVgqdh6dE1Y8VXl9rTQe3v4DfuMHXhWCbn6_EjduFAUuKjC64jc-T_yEXtWyzsXNr1RL3Fwm_aF50tYZrVysf2-P8RC8iqhS6PYMtHk3gGeF8Tx9VxWQUkncbIK-5tj6n3Xc-qrR-c33n6MOZ8nMvdrcCCeNAj92PS_yfSriIEocHnEaZYlLMze9ymkq8uqm_UeCK3njOZ7nJF7oRr7jhtdixhh1AuEmIfpSNgkcWLLL_BonRk1d6RvDQ9qsK2jMIUNU-0awYnz1L3r6tKk3St9w-ih5VatCXBmObwy7_wXbpGvS">