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

    <tr>
        <th>Summary</th>
        <td>
            Assertion fails in Sema::tryCaptureVariable when a local variable is used in a lambda's default argument
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    $ cat test.cpp
```
template <class T> bool foo() {
  constexpr float a = 1e-5f;
  constexpr auto lambda = [](float b = a) -> bool {
    return a < 0;
  };

  return lambda();
}

bool b = foo<int>();
```

$ clang++ -std=c++17 -c -o /dev/null test.cpp
Assertion failed: (isa<To>(Val) && "cast<Ty>() argument of incompatible type!"), function cast, file Casting.h, line 579.
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:
1.      <eof> parser at end of file
2.      /Users/ahatanaka/tmp/f57.cpp:1:25: instantiating function definition 'foo<int>'
Stack dump without symbol names (ensure you have llvm-symbolizer in your PATH or set the environment var `LLVM_SYMBOLIZER_PATH` to point to it):
0  clang-16 0x0000000107aba104 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 80
1  clang-16                 0x0000000107aba6a8 PrintStackTraceSignalHandler(void*) + 28
2  clang-16 0x0000000107ab85bc llvm::sys::RunSignalHandlers() + 152
3  clang-16 0x0000000107ab98b4 llvm::sys::CleanupOnSignal(unsigned long) + 116
4  clang-16                 0x0000000107945070 (anonymous namespace)::CrashRecoveryContextImpl::HandleCrash(int, unsigned long) + 192
5  clang-16                 0x0000000107945778 CrashRecoverySignalHandler(int) + 244
6  libsystem_platform.dylib 0x00000001a982b2a4 _sigtramp + 56
7  libsystem_pthread.dylib 0x00000001a97fccec pthread_kill + 288
8  libsystem_c.dylib 0x00000001a97362b8 abort + 180
9  libsystem_c.dylib 0x00000001a9735610 err + 0
10 clang-16                 0x000000010c2c5790 decltype(auto) llvm::cast<clang::sema::CapturingScopeInfo, clang::sema::FunctionScopeInfo>(clang::sema::FunctionScopeInfo*) + 100
11 clang-16                 0x000000010c2c49dc clang::Sema::tryCaptureVariable(clang::ValueDecl*, clang::SourceLocation, clang::Sema::TryCaptureKind, clang::SourceLocation, bool, clang::QualType&, clang::QualType&, unsigned int const*) + 896
12 clang-16 0x000000010c27eba4 clang::Sema::getCapturedDeclRefType(clang::ValueDecl*, clang::SourceLocation) + 144
13 clang-16 0x000000010c27e1a8 clang::Sema::BuildDeclarationNameExpr(clang::CXXScopeSpec const&, clang::DeclarationNameInfo const&, clang::NamedDecl*, clang::NamedDecl*, clang::TemplateArgumentListInfo const*, bool) + 1628
14 clang-16                 0x000000010cc88054 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::RebuildDeclRefExpr(clang::NestedNameSpecifierLoc, clang::ValueDecl*, clang::DeclarationNameInfo const&, clang::NamedDecl*, clang::TemplateArgumentListInfo*) + 124
15 clang-16 0x000000010cc87734 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformDeclRefExpr(clang::DeclRefExpr*) + 1064
16 clang-16                 0x000000010cc774dc (anonymous namespace)::TemplateInstantiator::TransformDeclRefExpr(clang::DeclRefExpr*) + 240
17 clang-16                 0x000000010cc62594 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformExpr(clang::Expr*) + 2828
18 clang-16                 0x000000010cc636e0 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformInitializer(clang::Expr*, bool) + 628
19 clang-16                 0x000000010cc5e044 clang::Sema::SubstInitializer(clang::Expr*, clang::MultiLevelTemplateArgumentList const&, bool) + 124
20 clang-16 0x000000010cc9ffe4 clang::Sema::SubstDefaultArgument(clang::SourceLocation, clang::ParmVarDecl*, clang::MultiLevelTemplateArgumentList const&, bool)::$_1::operator()() const + 52
21 clang-16                 0x000000010cc9ffa4 void llvm::function_ref<void ()>::callback_fn<clang::Sema::SubstDefaultArgument(clang::SourceLocation, clang::ParmVarDecl*, clang::MultiLevelTemplateArgumentList const&, bool)::$_1>(long) + 24
22 clang-16                 0x0000000107944f04 llvm::function_ref<void ()>::operator()() const + 32
23 clang-16 0x000000010bb62860 clang::runWithSufficientStackSpace(llvm::function_ref<void ()>, llvm::function_ref<void ()>) + 88
24 clang-16 0x000000010bb627fc clang::Sema::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) + 96
25 clang-16 0x000000010cc5af7c clang::Sema::SubstDefaultArgument(clang::SourceLocation, clang::ParmVarDecl*, clang::MultiLevelTemplateArgumentList const&, bool) + 828
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzUWF9z27gR_zTQy449JPhXD3qQZWsuU-cujdz02hcPCC4lNBDAAUAn6qfvACRlSSfZumsz09NkYglY7P72t4vFAsxasVaIM5Ldkex-wjq30WbGNswxxb5OKl3vZoSmwJkDh9bd8rYl0T2J5iSPhn_hp8NtK5lDIMmCS2YtPJHkASqtJTRaE1oSOgVS3PXiAFwr6_B7a6CRmjlgQJJ7iPEma0hyRop1ToNk26ruJXvEhJb98ioMMm_kZm_4wByAQdcZFewsIDqwQYr7_a9xbBDu7fXgX2WK-0PhYKk37x1NFkI5kjycLjqma_jfMyuZWhN6R-gd3FhXk-Se9z_jAm443GggdFnjC6FL1Ul5Eoa5tWic0AoaJiTWJJkDoaWwjCSLJ90D-cJkYJ_mhOZAKOXMOj-_2wMFZtbdFpUD3YBQXG9b5kQlEdyuRUJjQqn3hy6g6RQPFoMWPyAkwoJZJ9T6duNHpFAIWTG97UF-enyYrx7AdtVW-EhX3RoMtto4cBo2zrWWJHNCl4Qu18JtuuqW6y2hSylfxj83rdH_Qu4IXQprO7SELoGp2oOVXY3gNgjcMLuBivGvzjCOHkprsDWao7VYg9Wd6Yf9Smat5oI5rMF0Ciw3onUD5JVj_CvU3bb1yMJQfEuiKUkWqBufYS0zFg0wB6hqz5qnoZekQZIu_2bReJzjfmKELt22JXTZZEWIYTKPSTKnmQ-bUNYx5QTzPL6yXGMjlAhfCS2OU6w4BQvfhNvozoHdbSstQbEtWp8QqGxnEHa6gw17QQiU9kLi32hAKD9n4NP86SfQBiy6wCiqF2G0CpnxwgyQPHp8_PLxefWPj3e_PH7458PnZ7-E5JEPZauFCjEVLiT_wFwEfZrfxDlE36P-E0cFq1gcpQGLl03mdmf7L5-MUC649dQHsnwVMuzbs7bOINuGjF6ApyPk9x2UwwaLD0yefk4g5KyEE3srsVZM_sRULdEQWr5oURM6H43QcojzRb_KrOLn_PrcqSPddiyM9A7ijPZqk4tqp2V1lq6FRKa69pdBOaFlp0Jlr0FqX14GC3HeW0ivZGeaZlER-fxhSqvdVne2T6k2BGU6WPe77jNy_YJmt9DK4Xf3YdvKfrb3NMj4wqRCyTgPbzoQkF0PryhKOLJ_GrqD3KBp2uvPAaSo7M463D77Y6vRZntb76SoDvSzaUkrylJ4tmLtDNu2QUs2cFgcKXEbg6w-o6NoOEcOg8DzVyHlkENDEpWHevg5DUlOqxJY5etl4GlM8un7S7M8jgCNCQvHvRFdRS-nPCumEdTIZX8IlP4Q9my-puBwkvSnWJ-UuGVDXrDWdUao9YrrFj-oRvvQnxVdDtXuVTIcTFfKvu7MOBp9jK_1MZ3W_BDUam_ImV3vAn5hRrBK4jGkL0x2eI9cBgBHnq3CQfOoOfNITyf3Fp72Fv4iVP2uDt9qnAj9tWPyKQQnf3tmv-N8hQ5t1QFt5XRI6pieLT2cFlix9LwTa3SDE7Un4zM2vdk_SNUQyHGvxslFRDErzyO664QMWJgJSn9mW3z43ppjTItffw0ptGqRj4yckniixGfbJVE_X5938Y2pp6Fvng_t16Ow7tDK_DXuAzH5ePrE6XUpzssyyo5i92QQnwxT1tc9kizeqe8jxg_7BkUbvz_7Ew2rke3P2PyW5Z_ROqw9A55n0Qg0j5qfsPBGevxvInCJ5sPSQceMy85nHC-LIvlhPO71XGTyaOKg4uUj7vzKfCiKtObvHernwf43SGk61ubiSqA5zaY_nvDf4j8FXu63XHkt8iTH6Icj_-DvBSw08BccOK4dr6VjeqUfGUbphbK_6iq_h95HcDD6sZNOPOILynMb8mhfH9W8cWvS6MLWnDYNvoXzHhvWSTdaO8b65mH9iZntF2bOl5Xf70-_jtD0Oe6_6hZNiG7_XtBfB8LCvtscWmJ6ZT_jmWAp-AvLQZc2XiafDTYkWYTZ8YHiYWzkpPQX5-dGHfdzfwomfbN4eJXYJwy99iaRNkc30SsYeydyyRi58w1MVeW0zI9qhOnU34XbrLqmEVzgcCFdtacX4Lex0cXVbozd33idTS8iLZoLPfLbmN9Mjd-JcmxR6aXjOWNNcQHl_1fm9qTTclLPknqaTNkEZ3FepHERpUkx2cwqjGlcR9OqKquySXKWZEWeM5rWWRPXjE7EjEY0ieJ4ShMaJcVtzQpK6yhrsIybpq5JGuGWCXnrSb7VZj0Jj2azPIqzbCJZhdKGR19KFX6DMEkoJdn9xMzC21DVrS1JIymss69anHASZ8ePjhaEgrduTfBtgwoYSM2ZhJdxVFjobLiQ-LnhpbWwUPdx2r9ITjojZ3_8kTC4_J8AAAD__1Ai4SQ">