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

    <tr>
        <th>Summary</th>
        <td>
            [clang][20.x regression] Crash during code completion when using PCH
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang:frontend,
            regression:20
      </td>
    </tr>

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

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

<pre>
    Given the following files:

`test.h`:
```cpp
#pragma once
class provider_t
{
  public:
    template<class T>
    void emit(T *data)
 {}
};
```

`test.cpp`:
```cpp
#include "test.h"

void test()
{
 provider_t *focus;
    void *data;
 focus->emit(&data);
}
```

Run:

```console
$ clang -cc1 -xc++-header test.h -emit-pch -o test.h.pch
$ clang -cc1 -include-pch test.h.pch -code-completion-at=test.cpp:7:17 test.cpp
```

The second command prints:

```console
Expected valid TemplateArgument
UNREACHABLE executed at llvm/src/clang/lib/Serialization/TemplateArgumentHasher.cpp:68!
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: clang-dev -cc1 -include-pch test.h.pch -code-completion-at=test.cpp:7:17 test.cpp
1.      <eof> parser at end of file
2.      test.cpp:4:1: parsing function body 'test'
3. test.cpp:4:1: in compound statement ('{}')
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  libLLVMSupport.so.21.0git 0x00007fabf087aadd llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 61
1  libLLVMSupport.so.21.0git        0x00007fabf087b05b
2 libLLVMSupport.so.21.0git        0x00007fabf0879056 llvm::sys::RunSignalHandlers() + 134
3  libLLVMSupport.so.21.0git 0x00007fabf087b80d
4  libpthread.so.0                  0x00007fabf9b2b140
5 libc.so.6                        0x00007fabeff6ad51 gsignal + 321
6 libc.so.6                        0x00007fabeff54537 abort + 291
7 libLLVMSupport.so.21.0git        0x00007fabf072fe20 llvm::install_out_of_memory_new_handler() + 0
8 libclangSerialization.so.21.0git 0x00007fabf4a20792
9 libclangSerialization.so.21.0git 0x00007fabf4a20668 clang::serialization::StableHashForTemplateArguments(llvm::ArrayRef<clang::TemplateArgument>) + 248
10 libclangSerialization.so.21.0git 0x00007fabf46c1b97 clang::ASTReader::LoadExternalSpecializationsImpl(llvm::DenseMap<clang::Decl const*, clang::serialization::reader::LazySpecializationInfoLookupTable, llvm::DenseMapInfo<clang::Decl const*, void>, llvm::detail::DenseMapPair<clang::Decl const*, clang::serialization::reader::LazySpecializationInfoLookupTable>>&, clang::Decl const*, llvm::ArrayRef<clang::TemplateArgument>) + 215
11 libclangSerialization.so.21.0git 0x00007fabf46c1d92 clang::ASTReader::LoadExternalSpecializations(clang::Decl const*, llvm::ArrayRef<clang::TemplateArgument>) + 178
12 libclangAST.so.21.0git 0x00007fabecf4f710 clang::RedeclarableTemplateDecl::loadLazySpecializationsImpl(llvm::ArrayRef<clang::TemplateArgument>, clang::TemplateParameterList*) const + 176
13 libclangAST.so.21.0git 0x00007fabecf56335 clang::RedeclarableTemplateDecl::SpecEntryTraits<clang::FunctionTemplateSpecializationInfo>::DeclType* clang::RedeclarableTemplateDecl::findSpecializationImpl<clang::FunctionTemplateSpecializationInfo, llvm::ArrayRef<clang::TemplateArgument>&>(llvm::FoldingSetVector<clang::FunctionTemplateSpecializationInfo, llvm::SmallVector<clang::FunctionTemplateSpecializationInfo*, 8u>>&, void*&, llvm::ArrayRef<clang::TemplateArgument>&) + 117
14 libclangAST.so.21.0git 0x00007fabecf4fa42 clang::FunctionTemplateDecl::findSpecialization(llvm::ArrayRef<clang::TemplateArgument>, void*&) + 66
15 libclangSema.so.21.0git          0x00007fabea9f1fc9 clang::TemplateDeclInstantiator::VisitCXXMethodDecl(clang::CXXMethodDecl*, clang::TemplateParameterList*, clang::TemplateDeclInstantiator::RewriteKind) + 153
16 libclangSema.so.21.0git          0x00007fabea9f79f3 clang::TemplateDeclInstantiator::VisitCXXMethodDecl(clang::CXXMethodDecl*) + 35
17 libclangSema.so.21.0git          0x00007fabea9d4373
18 libclangSema.so.21.0git          0x00007fabeaa7a784
19 libclangSema.so.21.0git          0x00007fabeaa7a755
20 libclangBasic.so.21.0git         0x00007fabf41da089
21 libclangBasic.so.21.0git         0x00007fabf41da29d
22 libclangBasic.so.21.0git         0x00007fabf41da0f0 clang::StackExhaustionHandler::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) + 96
23 libclangSema.so.21.0git 0x00007fabe98a8a98 clang::Sema::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) + 72
24 libclangSema.so.21.0git 0x00007fabea9fdec7 clang::Sema::SubstDecl(clang::Decl*, clang::DeclContext*, clang::MultiLevelTemplateArgumentList const&) + 215
25 libclangSema.so.21.0git          0x00007fabea82c391 clang::Sema::FinishTemplateArgumentDeduction(clang::FunctionTemplateDecl*, llvm::SmallVectorImpl<clang::DeducedTemplateArgument>&, unsigned int, clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&, llvm::SmallVectorImpl<clang::Sema::OriginalCallArg> const*, bool, bool, llvm::function_ref<bool ()>) + 1201
26 libclangSema.so.21.0git 0x00007fabea8ba48c
27 libclangSema.so.21.0git 0x00007fabea8ba395
28 libclangBasic.so.21.0git 0x00007fabf41da089
29 libclangBasic.so.21.0git 0x00007fabf41da29d
30 libclangBasic.so.21.0git         0x00007fabf41da0f0 clang::StackExhaustionHandler::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) + 96
31 libclangSema.so.21.0git 0x00007fabe98a8a98 clang::Sema::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) + 72
32 libclangSema.so.21.0git 0x00007fabea82ec04 clang::Sema::DeduceTemplateArguments(clang::FunctionTemplateDecl*, clang::TemplateArgumentListInfo*, llvm::ArrayRef<clang::Expr*>, clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&, bool, bool, bool, clang::QualType, clang::Expr::Classification, llvm::function_ref<bool (llvm::ArrayRef<clang::QualType>)>) + 3140
33 libclangSema.so.21.0git 0x00007fabea4e6a81
34 libclangSema.so.21.0git          0x00007fabea4e6240 clang::Sema::AddMethodTemplateCandidate(clang::FunctionTemplateDecl*, clang::DeclAccessPair, clang::CXXRecordDecl*, clang::TemplateArgumentListInfo*, clang::QualType, clang::Expr::Classification, llvm::ArrayRef<clang::Expr*>, clang::OverloadCandidateSet&, bool, bool, clang::OverloadCandidateParamOrder) + 352
35 libclangSema.so.21.0git          0x00007fabea4e5cc7 clang::Sema::AddFunctionCandidates(clang::UnresolvedSetImpl const&, llvm::ArrayRef<clang::Expr*>, clang::OverloadCandidateSet&, clang::TemplateArgumentListInfo*, bool, bool, bool) + 823
36 libclangSema.so.21.0git          0x00007fabe9a840a7 clang::SemaCodeCompletion::ProduceCallSignatureHelp(clang::Expr*, llvm::ArrayRef<clang::Expr*>, clang::SourceLocation) + 983
37 libclangParse.so.21.0git         0x00007fabead3ba59
38 libclangParse.so.21.0git         0x00007fabead3e0d5
39 libclangParse.so.21.0git         0x00007fabead3fff9
40 libclangParse.so.21.0git         0x00007fabead3e20a
41 libclangParse.so.21.0git         0x00007fabead2abe0 clang::Parser::ParseAssignmentExpression(clang::TypeCastState) + 128
42 libclangParse.so.21.0git         0x00007fabead3b555 clang::Parser::ParseExpressionList(llvm::SmallVectorImpl<clang::Expr*>&, llvm::function_ref<void ()>, bool, bool) + 277
43 libclangParse.so.21.0git 0x00007fabead2dd9a clang::Parser::ParsePostfixExpressionSuffix(clang::ActionResult<clang::Expr*, true>) + 5354
44 libclangParse.so.21.0git         0x00007fabead33861 clang::Parser::ParseCastExpression(clang::CastParseKind, bool, bool&, clang::TypeCastState, bool, bool*) + 14209
45 libclangParse.so.21.0git 0x00007fabead2c6dc clang::Parser::ParseCastExpression(clang::CastParseKind, bool, clang::TypeCastState, bool, bool*) + 92
46 libclangParse.so.21.0git 0x00007fabead2ac81 clang::Parser::ParseAssignmentExpression(clang::TypeCastState) + 289
47 libclangParse.so.21.0git         0x00007fabead2ab2f clang::Parser::ParseExpression(clang::TypeCastState) + 31
48 libclangParse.so.21.0git         0x00007fabeaddf978 clang::Parser::ParseExprStatement(clang::Parser::ParsedStmtContext) + 88
49 libclangParse.so.21.0git         0x00007fabeadddbeb clang::Parser::ParseStatementOrDeclarationAfterAttributes(llvm::SmallVector<clang::Stmt*, 24u>&, clang::Parser::ParsedStmtContext, clang::SourceLocation*, clang::ParsedAttributes&, clang::ParsedAttributes&) + 1995
50 libclangParse.so.21.0git         0x00007fabeaddd2aa clang::Parser::ParseStatementOrDeclaration(llvm::SmallVector<clang::Stmt*, 24u>&, clang::Parser::ParsedStmtContext, clang::SourceLocation*) + 266
51 libclangParse.so.21.0git         0x00007fabeade7049 clang::Parser::ParseCompoundStatementBody(bool) + 1289
52 libclangParse.so.21.0git         0x00007fabeade8417 clang::Parser::ParseFunctionStatementBody(clang::Decl*, clang::Parser::ParseScope&) + 343
53 libclangParse.so.21.0git 0x00007fabeae12da0 clang::Parser::ParseFunctionDefinition(clang::ParsingDeclarator&, clang::Parser::ParsedTemplateInfo const&, clang::Parser::LateParsedAttrList*) + 4400
54 libclangParse.so.21.0git         0x00007fabeacbf9e5 clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, clang::DeclaratorContext, clang::ParsedAttributes&, clang::Parser::ParsedTemplateInfo&, clang::SourceLocation*, clang::Parser::ForRangeInit*) + 2501
55 libclangParse.so.21.0git 0x00007fabeae11b5c clang::Parser::ParseDeclOrFunctionDefInternal(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec&, clang::AccessSpecifier) + 1916
56 libclangParse.so.21.0git         0x00007fabeae1103e clang::Parser::ParseDeclarationOrFunctionDefinition(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*, clang::AccessSpecifier) + 238
57 libclangParse.so.21.0git         0x00007fabeae108b8 clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*) + 4216
58 libclangParse.so.21.0git         0x00007fabeae0e65b clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) + 2171
59 libclangParse.so.21.0git 0x00007fabeae0dd50 clang::Parser::ParseFirstTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) + 64
60 libclangParse.so.21.0git 0x00007fabeac96011 clang::ParseAST(clang::Sema&, bool, bool) + 513
61 libclangFrontend.so.21.0git      0x00007fabf55084b3 clang::ASTFrontendAction::ExecuteAction() + 307
62 libclangFrontend.so.21.0git      0x00007fabf5507e96 clang::FrontendAction::Execute() + 54
63 libclangFrontend.so.21.0git 0x00007fabf53f6b5e clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) + 974
64 libclangFrontendTool.so.21.0git  0x00007fabf9b0045e clang::ExecuteCompilerInvocation(clang::CompilerInstance*) + 926
65 clang-dev                        0x00005645c5ab9ff0 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) + 1792
66 clang-dev                        0x00005645c5aac512
67 clang-dev 0x00005645c5aab25d clang_main(int, char**, llvm::ToolContext const&) + 765
68 clang-dev                        0x00005645c5ae1c15 main + 101
69 libc.so.6                        0x00007fabeff55d7a __libc_start_main + 234
70 clang-dev                        0x00005645c5aaacea _start + 42
Aborted
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzUW1tT5LiS_jXmRQFhy_cHHkwBpzuW3mYpzuzsvhCylK7SjsvyyjIN8-s3UnZV2XWjzPTMziE6mm5bqfwylVdJZk0jFxXAtRPeOOHtBWvNUunrL3KxnKnVilUCdHCRK_F-_Q_5ChUxSyCFKkv1Q1YLUsgSGsfPHNf-iVwDjblaOpHbP4zc7g-va_wv9WvNFitGVMXBcTNesqYhtVavUoB-MTgmvnHcjJC6zUvJu2kIIcTAqi6ZAcefdVTPjn_Xv3tVUhBYSePQ5Jk4NBPMMIem-Brni2_txLeOfzMENUaNEI_jlhUvWwHEobSXkdKO3jLHZw5NOp69CFuxEFKheNt0ADaQ10i7p3bEpePf9ZI4NFrL0eHuxBijf2qrof571KpqVAkWeUB4yaoFueTcI5dv3KE3Dr25XAIToEknC7lElpc1X5JL1T-7qvnywAS9HuzY7UByyZWAS65WdQlGquqSGce_3ejVz2LHz7yYbJ7sCfK8BNIAV5UgvLM8UmtZmeaUeHdvNXADgryyUgry3NtIphftCio0p3_--9NdNvuS3TzcEXgD3uJoZkhZvq4cet9o7tB7K6BD70uZO_R-DlqyUv7OUBCH3u_O-oU1S9C9XFHiUM9xs8eHu2x-R5o2X0lDGMnbBdFQK22IUWRpTG0FofcOvV9Is2zzK64QQQ8Ef13WWv0PcOPQe9k0LTQOvSeoiLXxofNxzZolyRn_zWjGwaEzUmuoteLQNCBIo1rdPUZK1jSKS4ZC67YiDdeyNleOm80N478R0a7qTr_uFbE_j1otNFsR1guLqDsDuBTw-tONwOvZOv4MVOH4d6RmugGNSwSVIKqwMcZxM9qPHEwX4HSID2lsOGorjowJBizi0Lhzy9hxM__qIKWs0Npq1VaCNIYZQJmJdb64jxw07rx6qzHyQ5qlag1p3le5KknFVtAgEVRNq4G8q5Ys2StYI7vsBsnfQSO3d9Vq8pg9fyFKkwaMXVOoXqVWleX9yjRxIvfh4ZdvL_P_-nbz_eHrf989vSCJE7loTLWSlbUqjBJpv3yElDJHonlbo9VdNeqKelfuQhrivrmu68YFyws3iRkTojN_P3P8rHlvun88ordZIZ87w0q2gzT78aIao4GtHBqhcckKmROH3pAI7d87BaD_GePI3TDHdZ1Kl7phdAj_U1vN5aJi5RdWiRJ008VjC9HzA7SB85WUJ65w3CywFLVZamACR7tk72dAmOY09wIMaCHScaSI9il26aAoIiZCjywaK4CF7NuwEk2cJwxCPyYsx7iDs9AUZ4mn6TimBVB3oGNZNYaV5YtqzYsqXlawUvr9pYIfL8tO1wNVo_SJRY1BYxRLj6g7YNSNU8ym6WS6KEq66NQbwyh020dzw_ISMGbfK70bypuRlWdas_cnKLoSYz3nXlLx79ay0iBB03enwY64l6fxEHY2f36y-bj774Ni4u7NgK5YOa-Bb6dsvq7qcoT5FqoGvrF6jPkWeEkwTRqHZuiup3Wkh8zZ7-9jpl-rQj0o9VtbP6Mqcbp9_jjoAwxY8ljlDekFGCbL8VyPTOq_UB7_zqKKdubd4_lHDMUL0VC8yYYiUvo5Q3Fo8ifJ4sXW6OlGlmz-fFgC4EVQxJ47lOAJBPCSadT8mgmi696Wion9Bdu3-gmgR2u6HvHINFuBAf0ge5WknXp6CSOU0D9LwjDy_fB8CVGyu8ro92fNJFZXQwHu-_plTbZvt9ZY1yv6_F6DQ7PzmReyEjtzomanYvis_UT278Ey3qtSSHQG8wtwo_QfQzJfsbL87ETWK5J2FAxswMI30R8Qee01HlahXnCm17Bg5Pe7Epxa0s87ylDevrSzjhAOwtaKHSgeRkUISwuv4Okht0PYX7GWqIxkdpnw7S-ykWb266_fwCyVsKKNgtfOq934f9ynDw47jOEJfmhp4N9kJTYrFvoofDRV-Dgt_D9T-A6dbxNKPBGcCPzYSpVMI2QxixMsob10OmGIUOm2SLphjeSHKIe5zxPMTbDtot5kQppi7U7pdI7FKFfZZujubcnaBh2r7yv6EqOt_lOa5bwtCskl9J3TvO46p-Ekth9_ULx3zmEgWferL9p6aL8nZHeRtvk2RR-k_lG9D9SdJixh6agixtF_NeIYa3kanIOYpYUAHh9GPG_zxuy7xOEwgE9nqjLwdsD5v7WlkQ_wCuVu6MNgsa6MonG5RifGvYRyP_UOi3IvK9ksd5nfgmh5H7M_iva7ddsg2-0ncTsxiGMpaUbayu77iq6Pnx3KNRuuu4Vxs5FqC7CXo8ul0QSkWxV913IhK1bOWFlmeuH4d6OKNVeqHP4-apM4YN8mPepiJ0yPh_PRUuYsSDiOPx5hd8b7qbWZ5HjQORze0rMJurDmfyKQ_m3Dmu_9q4U1n55nEBS4GxxG3Dnnoa2I82LAiUIOo9mgnv2oDrx7qzUO3euTflIM2PXZ9e_BRP_Rsr6PGT22yLoCqGRNIwt5xrKtPf8jsTc87doOVtjvNu_8s5ItCyBiCQYV_3iqO5goAoho4B42jkyIrt5b63XGKiEFM_AZ-8CnGefQNHZPZfxy9uuvT8CV_qCuPmJbP2sNJ1rm91fQpWJio5Y5mCPWdorKNgvftQC9Laite0_M-QGE_Fj5kgmxXqUN3x0v_2eloVHlK4g5GEyOg1Lkz1HS-Qt82Hk7ZSUUuwh_Wm-UsiRw2Z6yZkrAbHNm1D1_1ApjJJYCdk_ftBq-QFmPtbeW_4-oajcr9MkpsfJtk_8j0w2cTrXAhJ-zEJO6n0wlBFdg-eCnUwmLokCOgTuZI3UZEnoTCSnLYRS7LJke_DuzdwrQolDr0DR7BS4GixlrMFVjXFtXaAnioZN1HobhSTxbFN3OQHJmaTq0mWhSvXDYaWgco4D-cQHHihYiZScFe1SNKeTbVj5bBL2NdZ1ZoE_QtKU5LB-dEaNbGOTB0A-x2Q-CqWvhJ5F3EjKu-jGrwHd2ULcLs6vEvfA1NqLd4ZudEi-grnWR8FzF80jwny_FJ6DbQ7EgOhc348lp7X_SM6ntVIKp0ZCynBZneuYZKHwstYKpkVUUaZx8CGK-Pvof49gbK-ZmZTa7DH0utGFrauAWIof8JK4Npu_6ttvTR0fOCgM6M0bLvO3KiTM2wBF17-k0aA-edn0g6smcuVsPdvRDkAe57Y7o3TW1jXQ4NaEJQdnpcHlYoX8XDfauZnfcw6lJGWI3SE-HrP6Wy0YJN0q8OzQZJiivc_RwagqGJPDik9zXdfAu9w939fYXkStsNDbm4gdYqYVnJlXwqGCnq5dt61vISu5vzj12d43WFqT0OZawLrWxvB6V-EeoHroWpfeRwSElihwErr1iMjE787xI4XSlhEL9Q6u2PiryvAZ--Ki8U8Zhcz8zIBxV2f74s0JQP9-90k-sWsDXSg7VSEO7IxieWRaA5-Xh6bIA1fBdDwzoa9WdzR_IKtPD496Ik0vSdf32ZLCQ2y7XSz0bYE7UFIdsBzzP9eFD4fuQOtLBUSf66SrYtYEjKqA-JuxwYjUDnpvkHxUS3WqPk8tfIHUfFmi3tBMrJHAhCk9XIs-qtmcn-0cx32v2vy08mgPXdWwcsX34gVy53ST5pkRbwtdVrfS63Bscw8TWQ0_UVmNJhAg_CO5SN-b_S5wIe6roRF0zitZp5Hr71Xw2f97Z1UbWh_a_-k7Ow_QYbeuJe40RuhJ7ZjE4MwhDNwlyf-fi0ZqyayjXLaS9UZ2tD7E2WdnFVjeiU9nGkEajfejjPAfcbLMa-SeZDfn4RZSHo2iG1ZEsQXfn8xwOS3cc2HaR09iCCfbAPCtVjqQf3Rt13WCMqOe9Bfa6yXXJKeDD5hHDQRQObm8f-emQhFEQ8pDlaVG4hHPvZcXk8cskS6a3x3P9rtro2fA-yfrimO1no2giIsZDzxLGA8LxiJyGonu5Rr0-11yybo9jZ5cQV6OvVfZOf-MIG5D1xdKzYYLHvZAg-05aW11E6dQLvKGIGXl5QaqXxjBtXjZTUnuLOXan6o9xYKSbrM8UjptludIGxPC7igtx7YvUT9kFXHtxELtekMTexfLaBV_wJGGUFW4cuZHncSg8L_GB5zEIdiGvqUtDN_So64WB710lDESchAkXkMYFj5zAhRWT5RUuwZXSiwv7hcO156dBEl2ULIeysR8hUbo276L3HIdSh84cSjUs1tsFfkZdfB7eXuhre80-bxeNE7ilbEyz5WKkKe3HTd2k4a0T3lD36o0M5gpvycx-VCFaLasF4UoA2X7FQH4soSKt_cDgcfblotXl9ee_5-gFfr2m_xcAAP__Ug2LHA">