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

    <tr>
        <th>Summary</th>
        <td>
            [clang] Assertion `NewFunction && "Failed to instantiate function template"' failed.
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang:frontend,
            crash,
            generated by fuzzer
      </td>
    </tr>

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

    <tr>
      <th>Reporter</th>
      <td>
          k-arrows
      </td>
    </tr>
</table>

<pre>
    Although it does not reproduce on Godbolt, the following reproducer triggers an assertion failure with the clang I built today.

Reproducer:
```cpp
template <typename T> constexpr int foo(T);

const int i = foo(42);

template <typename T> constexpr int foo(T) { return bar; }
```

Backtrace:
```console
 #0 0x00007a258e3d4257 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) 
 #1 0x00007a258e3d10fe llvm::sys::RunSignalHandlers() 
 #2 0x00007a258e3d2dde llvm::sys::CleanupOnSignal(unsigned long) 
 #3 0x00007a258e2e6f78 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #4 0x00007a258da42520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #5 0x00007a258da969fc __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
 #6 0x00007a258da969fc __pthread_kill_internal ./nptl/pthread_kill.c:78:10
 #7 0x00007a258da969fc pthread_kill ./nptl/pthread_kill.c:89:10
 #8 0x00007a258da42476 gsignal ./signal/../sysdeps/posix/raise.c:27:6
 #9 0x00007a258da287f3 abort ./stdlib/abort.c:81:7
#10 0x00007a258da2871b _nl_load_domain ./intl/loadmsgcat.c:1177:9
#11 0x00007a258da39e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
#12 0x00007a258b07969c clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) 
#13 0x00007a258b07cae7 clang::Sema::PerformPendingInstantiations(bool, bool) 
#14 0x00007a258a711e78 clang::Sema::ActOnEndOfTranslationUnitFragment(clang::TUFragmentKind) 
#15 0x00007a258a7127e6 clang::Sema::ActOnEndOfTranslationUnit() 
#16 0x00007a258d1a49c4 clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) 
#17 0x00007a258d0a9ade clang::ParseAST(clang::Sema&, bool, bool) 
#18 0x00007a2590971346 clang::FrontendAction::Execute() 
#19 0x00007a25908cd2a8 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) 
#20 0x00007a25948ef8b5 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) 
#21 0x000064a5ca072e31 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) 
#22 0x000064a5ca06ef88 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&, llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem>) driver.cpp:0:0
#23 0x000064a5ca071359 int llvm::function_ref<int (llvm::SmallVectorImpl<char const*>&)>::callback_fn<clang_main(int, char**, llvm::ToolContext const&)::$_2>(long, llvm::SmallVectorImpl<char const*>&) driver.cpp:0:0
#24 0x00007a2590cc3259 void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::$_1>(long) Job.cpp:0:0
#25 0x00007a258e2e6c8b llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) 
#26 0x00007a2590cc2537 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const 
#27 0x00007a2590c745b3 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const 
#28 0x00007a2590c748b7 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const 
#29 0x00007a2590c9ce48 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) 
#30 0x000064a5ca06e58c clang_main(int, char**, llvm::ToolContext const&) 
#31 0x000064a5ca07e5cd main 
#32 0x00007a258da29d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#33 0x00007a258da29e40 call_init ./csu/../csu/libc-start.c:128:20
#34 0x00007a258da29e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#35 0x000064a5ca06c8e5 _start 
clang++: error: clang frontend command failed due to signal (use -v to see invocation)
clang version 23.0.0git (https://github.com/llvm/llvm-project.git baa69e929b67543682452e9d9f9ebbd76790ad42)
Target: x86_64-unknown-linux-gnu
Thread model: posix
```

Assertion failure:
```console
llvm-project/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp:6012: void clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl *, bool, bool, bool): Assertion `NewFunction && "Failed to instantiate function template"' failed.
```


</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzkWE9v47oR_zTMhYghUf8POSjO-nW32-5ik9erQYkjmw1NuiTlJO_TFyRlW1LsYLdF36VAAkvizG-G85dDagzfSIA7lN2j7OGG9nar9N3zLdVavZibRrG3u1rYreo3W8wtZgoMlspiDXutWN8CVhL_plijhEVkie0WcKeEUC9cbs5UGlvNNxvQBlOJqTGgLVcSd5SLXgN-4XbreVtB5QZ_xk3PhcVWMfq2QFGNovrHCQsl7h3lUfhr93sU1RZ2e0EtYJQs7dseJN0BfkLJJ9wqaSy87jXm0uJOKUTKJ0QqlNwHZE_gFzlGycNAkpIxza_DY1TcYw221xI3VKPkHqPiYax4QL6n7bPVtIX5tpQ0SgCKaoxIEuHoNYqiqKAkKyFhKckKLMRh57iS2ryZ8PBdc2kfLW2fnzwmKc9Emr6slbEa6A6R3HmLS-s1DTLimYw46uCSjB-9fOQbScVfqGQCtEGkHMGQGQxh7CLMUgCV_f7bAIZI2UsfjgwLJTcjxGSCSCDvihIvNTXbH9CqA-i3iT6IlMPGJjRLJS282oWLl6SO_H_AT8f4jKYkIxH2m1oJ3iCyei3zdZ7eCi7719uN7MNCuzBqkSNyH716FhcvATCbAlZ51bV4vd7brQbK1s9ciDXf7QXsQFrqM2GByErurUBkNSZbtCip0xQldZEP4PnPgEsLWlLxIWxRoqSOj0YoLsGOeT7EKqsxVjk3aFrkeGO8kzyMGVy-Wvi3N8NgbxyuMvwVkZWm3IAHJgVK6uPWqykuKYsuwbRR2gZUy4K__KegV-w26vKKJHH0jj1u8FqKtVCUrZnaUR4cwaXfpfu8M5uWBqw4Lpwy1YAWT9GSCqr816LGs4SocYCTxGmiosqrNhTEkDCPsKPh6bM0lkrLqYVVL1sXQA_QccndEyLlmEn1uoWvqqVhbTlGPDO3ApHarTZKife_PhWdjslMx5ZCcVnH76A7pXffQTIuN2eNuZKuYFzBn6QiLeIYivIyft3ab_KTZN-6J02lER75d8ntStONy6upHZ5-P37_K5dsJDGbSSQF5L8o8Vz_HOA0P2OaVm06BvxOtQlNbHh-UvuvcAARvDBW-tue_quH71ajZDn67Ah_06rf_4AOJZ-GYn5R578p1gv4vNsr7dqCBU980nWa9BGtKIN3utaPT7OYcvBB6BU3jgtAFVVFnKQTo660K8aS1T78wrdPr9D2TsGxMasJUNkyQifxsFS7PRegQ3yFJnqCGtAnus8kj61BxvWhSkvoyiYbCxtgzzIPp7QqP9LJZdZJyLFs5CnNWhoVBJIYt228dtVn0q9rrembd_Gy3VIdThoOzLl8iaffyBIfFGdTWWQqK4euLPFxF8v4yTttJPFxR4X4B7RW6c-7vbgo2Lv9zOIwhs56pJtRfJZW94Yf4Ad0S2lDNJ-XD91wHlhxAY9vxsLOy6kw0_wAetav3baSmQnjJKv86euM2g2Vba29_dzif7LTyj14hpYK0dD2ed3JYzIePeYPG8Ef3vz1z1ioCouIpGvipZXh0DPm_Fklr1sqnaRP2yYkq3ycXDeVXw1J-NHmw0IQPIT9Ml6q3Y5KNs_niyFt7ECn9k46FZOoeLSay81Q30K8nxjW6_b1NY7DS0MNb9fGkw8GmhC7D2urKbfmuDyDo0K4NFZ6tO5IRu3Q51Qw-8lr8dhrFf6imgv2z-Yn17ZsRqa_dD49n7FpB-JtYr6PXXXO-3zmdpIlky79f-e2o2GKqWGKNGuSq4bxZZy-a1BHa01q_ozREUzK4c-R1pOuOtO9nOteNtedekX3L6ox1xX_opqv3Fyr4--r0ckXe8p1qLK_stfBYdd3PG3-bdVCWl5Dfxg9T_r0hQZ9zVJ_4o6PqXoa7E8tOiuHQ_9_116O-PPjBmQtw37QGQjIbCiqWBXh9dpNKmtjqbZrV_3Xp9moNf37uW0YCy8xLbYoqTM_auaDyGQuEtIIewY3wsylhEcHfeuhwyxGHCIZ6ux8gg-Ik01c0v8iclK41pwNwNnMPW0JGQ6QzoDB8eTe_SU1Bq1dPaqHa6xuOGvidgiEjnIBDLMesFV4mIcRKXsD-PbgvwFgPjpXVkch-ADacCUxSRbRItpwf6DZWrv3xyeyQmS14XbbN4tW7dy2XISEn9u9Vv-E1i4cV0NpXkFFqiYvsjTJS5JmBCpWdRU0DSvyooooC7dfUf1E9QZcT8LDNNvLZ6le5GiqjeonfxmAd4qBcKRhin9301XPr_2u3niNlXZ-ClYexuowffifp-FWbjQPu9loaMR5FBOnjm-Tf9ocjT8epJ1CZ0OgPPo7vBzZsU_dHCNCViFSrML8rCM-9n98vI5EhCBSDHG1eG_yG3aXsCqp6A3cxUUZlXGaxPHN9i4rKkq6OKqAlSxNk7SIkjynWRTFBWuz-IbfkYjkUR4VUZ6USbzoKEtSFhdFAylllKA0gh3lYuGctVB6c8ON6cGxxVF-I2gDwviLZUKOpjomhFd76RbcAej0tgEJmlpguHnDXf_HH6DdWvZwo-98SDT9xqA0EtxYc5ZruRX-CjuIyR7-Zwa-6bW4-7WcQ2Tl7eKq5GCawx35dwAAAP__kWscCQ">