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

    <tr>
        <th>Summary</th>
        <td>
            Clang crashes with code with incomplete type as param of a concept used as return type of a function
        </td>
    </tr>

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

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

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

<pre>
    From my understanding, the code is invalid and an error should be emitted, but instead, it crashes. The point I think is incorrect is in the return type of the function `many`, `std::vector` type is incomplete. Using `std::vector<int>` fails to compile but does not crash.

Original code:
``` C++
#include <string_view>
#include <type_traits>
#include <functional>
#include <vector>

template <typename T>
struct ParsingResult{
    using type_t = T;
};

template <typename T>
concept Parser = requires (T parser, std::string_view sv) {
    { parser(sv) } -> std::same_as<ParsingResult<typename std::invoke_result<T, std::string_view>::type::type_t>>;
};

ParsingResult<std::string> letters(std::string_view) { return {}; }

auto many(Parser auto parser) -> Parser<std::vector> auto {
    return [parser = std::move(parser)](std::string_view sv) {
        auto result = parser(sv);
        return result;
    };
}

int main() {
  auto p = many(many(letters));
  p("");
}
```
Here is a reproducible link on [godbolt](https://godbolt.org/z/dqeG8jr76)

Note this happens on clang-14 onwards.

Stacktrace:
```
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: /usr/lib/llvm-14/bin/clang -cc1 -triple x86_64-pc-linux-gnu -emit-obj -mrelax-all --mrelax-relocations -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name test.cpp.orig -mrelocation-model pic -pic-level 2 -pic-is-pie -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -mllvm -treat-scalable-fixed-error-as-warning -debugger-tuning=gdb -fcoverage-compilation-dir=/home/robert/Documents/consumer/build -resource-dir /usr/lib/llvm-14/lib/clang/14.0.0 -internal-isystem /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11 -internal-isystem /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/x86_64-linux-gnu/c++/11 -internal-isystem /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/backward -internal-isystem /usr/lib/llvm-14/lib/clang/14.0.0/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../x86_64-linux-gnu/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -std=c++20 -fdeprecated-macro -fdebug-compilation-dir=/home/robert/Documents/consumer/build -ferror-limit 19 -fgnuc-version=4.2.1 -fno-implicit-modules -fcxx-exceptions -fexceptions -fcolor-diagnostics -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /tmp/test-bcb5b3.o -x c++ test.cpp.orig
1.      test.cpp.orig:18:59: current parser token '{'
 #0 0x00007fe18efcfd01 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/lib/x86_64-linux-gnu/libLLVM-14.so.1+0xe3fd01)
 #1 0x00007fe18efcda3e llvm::sys::RunSignalHandlers() (/lib/x86_64-linux-gnu/libLLVM-14.so.1+0xe3da3e)
 #2 0x00007fe18efd0236 (/lib/x86_64-linux-gnu/libLLVM-14.so.1+0xe40236)
 #3 0x00007fe18dc77520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #4 0x00007fe18ef0f71a llvm::FoldingSetBase::InsertNode(llvm::FoldingSetBase::Node*, void*, llvm::FoldingSetBase::FoldingSetInfo const&) (/lib/x86_64-linux-gnu/libLLVM-14.so.1+0xd7f71a)
 #5 0x00007fe195559b06 clang::ASTContext::getAutoTypeInternal(clang::QualType, clang::AutoTypeKeyword, bool, bool, clang::ConceptDecl*, llvm::ArrayRef<clang::TemplateArgument>, bool) const (/lib/x86_64-linux-gnu/libclang-cpp.so.14+0xaf7b06)
 #6 0x00007fe195559bea clang::ASTContext::getAutoType(clang::QualType, clang::AutoTypeKeyword, bool, bool, clang::ConceptDecl*, llvm::ArrayRef<clang::TemplateArgument>) const (/lib/x86_64-linux-gnu/libclang-cpp.so.14+0xaf7bea)
 #7 0x00007fe1962a2376 (/lib/x86_64-linux-gnu/libclang-cpp.so.14+0x1840376)
 #8 0x00007fe1962a01ac clang::Sema::GetTypeForDeclarator(clang::Declarator&, clang::Scope*) (/lib/x86_64-linux-gnu/libclang-cpp.so.14+0x183e1ac)
 #9 0x00007fe1962a9b16 clang::Sema::ActOnTypeName(clang::Scope*, clang::Declarator&) (/lib/x86_64-linux-gnu/libclang-cpp.so.14+0x1847b16)
#10 0x00007fe19546e017 clang::Parser::ParseTypeName(clang::SourceRange*, clang::DeclaratorContext, clang::AccessSpecifier, clang::Decl**, clang::ParsedAttributes*) (/lib/x86_64-linux-gnu/libclang-cpp.so.14+0xa0c017)
#11 0x00007fe19548de31 clang::Parser::ParseFunctionDeclarator(clang::Declarator&, clang::ParsedAttributes&, clang::BalancedDelimiterTracker&, bool, bool) (/lib/x86_64-linux-gnu/libclang-cpp.so.14+0xa2be31)
#12 0x00007fe19548ba78 clang::Parser::ParseDirectDeclarator(clang::Declarator&) (/lib/x86_64-linux-gnu/libclang-cpp.so.14+0xa29a78)
#13 0x00007fe195489c16 clang::Parser::ParseDeclaratorInternal(clang::Declarator&, void (clang::Parser::*)(clang::Declarator&)) (/lib/x86_64-linux-gnu/libclang-cpp.so.14+0xa27c16)
#14 0x00007fe19547ec37 clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, clang::DeclaratorContext, clang::SourceLocation*, clang::Parser::ForRangeInit*) (/lib/x86_64-linux-gnu/libclang-cpp.so.14+0xa1cc37)
#15 0x00007fe1955265ab clang::Parser::ParseDeclOrFunctionDefInternal(clang::ParsedAttributesWithRange&, clang::ParsingDeclSpec&, clang::AccessSpecifier) (/lib/x86_64-linux-gnu/libclang-cpp.so.14+0xac45ab)
#16 0x00007fe195526060 clang::Parser::ParseDeclarationOrFunctionDefinition(clang::ParsedAttributesWithRange&, clang::ParsingDeclSpec*, clang::AccessSpecifier) (/lib/x86_64-linux-gnu/libclang-cpp.so.14+0xac4060)
#17 0x00007fe1955254da clang::Parser::ParseExternalDeclaration(clang::ParsedAttributesWithRange&, clang::ParsingDeclSpec*) (/lib/x86_64-linux-gnu/libclang-cpp.so.14+0xac34da)
#18 0x00007fe195523b1d clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, bool) (/lib/x86_64-linux-gnu/libclang-cpp.so.14+0xac1b1d)
#19 0x00007fe1954668ed clang::ParseAST(clang::Sema&, bool, bool) (/lib/x86_64-linux-gnu/libclang-cpp.so.14+0xa048ed)
#20 0x00007fe1965dab71 clang::CodeGenAction::ExecuteAction() (/lib/x86_64-linux-gnu/libclang-cpp.so.14+0x1b78b71)
#21 0x00007fe196f76b57 clang::FrontendAction::Execute() (/lib/x86_64-linux-gnu/libclang-cpp.so.14+0x2514b57)
#22 0x00007fe196ece3a6 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/lib/x86_64-linux-gnu/libclang-cpp.so.14+0x246c3a6)
#23 0x00007fe196ff045b clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/lib/x86_64-linux-gnu/libclang-cpp.so.14+0x258e45b)
#24 0x000000000041328b cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/usr/lib/llvm-14/bin/clang+0x41328b)
#25 0x00000000004114bc (/usr/lib/llvm-14/bin/clang+0x4114bc)
#26 0x0000000000411307 main (/usr/lib/llvm-14/bin/clang+0x411307)
#27 0x00007fe18dc5ed90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#28 0x00007fe18dc5ee40 call_init ./csu/../csu/libc-start.c:128:20
#29 0x00007fe18dc5ee40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#30 0x000000000040e3b5 _start (/usr/lib/llvm-14/bin/clang+0x40e3b5)
clang: error: unable to execute command: Segmentation fault
clang: error: clang frontend command failed due to signal (use -v to see invocation)
Ubuntu clang version 14.0.0-1ubuntu1
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
clang: note: diagnostic msg:
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang: note: diagnostic msg: /tmp/test-4962a8.cpp
clang: note: diagnostic msg: /tmp/test-4962a8.sh
clang: note: diagnostic msg:

********************
```

[creduce'd code](https://godbolt.org/z/f3PTqxn8j):
``` C++
#include <vector>
template <a> concept b = requires {};
         c(b< ::vector > auto
```

[creduce'd code 2 without diagnostic error messages and without header](https://godbolt.org/z/nfas196e6):
``` C++
template <typename T>
struct foo{};

template <typename a> concept b = requires {true;};
c(b< ::foo> auto);
```

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzNWltzozoS_jXOiwoXFwP2Qx6cOM6kNmeSTTxnHl1CCJsZDB4hMs759dstAUbE8TiX2t2UY4OQWl9_anU3kqIifj6fi2JDNs-kymMuSknzOM1XA_eSyDUnrIg5SUuS5k80S2MCT-GfcCEKQcp1UWUxiTjhm1RKHmOrqJJQu5ScqttUEiZoueblkCxA4LZIc0luQHia_9SSWSEEZ1LfqF4Fl5WAy-ctJ0WiipIqZzItcjII7A3Nn-EHxcNPKeOBN4XPEwgpBJTohrXszTbjkg_JtxLUOlTfuwREA-8KGyY0zUoiC4Lt0owrbeKClyQvakWGA3s2sKf6-06kqzSnmeIJpepngE19yOXAvcCPLnY9AJRVwCh0WkoBgJZPKf-NnR-ogVospaCpLF-p0ZBCs1cqNCpedUFLDpxQ2faR0w0ni7YSAKtgNO6pQMYeeFllchDWOhD4qxSTGh3ImGHbRsVwtr8-pTNW5IxvdW9cKGmC_6pSAZQP3PGCbNUDHOp23DrMkfJp4E6IAQ9u2lbj5vmMWNBnRwbAWFLg9dLUswOyrQu2X_zkS9HUWLyGBrVSZShjf7VU1oWfV1nqg-hJR-hgxRLmJ-p0qGvNQjNzkBDVCare7YhWYNxq_rjjmnNV1BA20TzpR10grSXp-gbjTaf-xXY_jG3LTfHEobe2h4E_e0WJQ6OJf6pHTb8SbY5uS2VTvYbTjJdhGjNjEDrEoFfa0DQHqT0Mmh_VcU1c_dOOyMREsVUyXPWZHOiv8Q769gsXyldRALwVRVyxNALHk6F7LBSpqyKOCtBE8baWclsic-4cPvWjYSHAY8__gf_4F78e_xBhgH139PtawBwEp1uSNd2ChZconGU0X1nOCK5_UxGXhm97lJT9BPfDDji22mpvr6aPMKmqCNw_KBBVK1SiEBJdaA9pKtdVNAS_CjdZ9tT8WKDzD7AtuE3LsuJA51xFmcaLqSiEjpdELR6Yf1vFFuNlyWNSFpXQxSo-lWXBUvA5MRFVTkom0q0cdpQicbXZtkrZQ20296JYCbohVKyqDc_R6U7BB82rUiDWNGoQOyO4itBU5opAYjHmEAvsGEIN2Y2DZTCytsyCIax21iqviIXx0SqiH8TaCJ7RnUWzjFjNDXwXjKIjL4kVpyUFA7ASwTlIzjgVFi2lFfGkENxCEjgo2dZTkJ64SJMUZh4WMxhKC8J1xS10ZCATDdtKIJ6pAiJ5KYdsuwWzSVcaUt2_tYE4lpFtyogFX1bGn-DW1TdpCT-AaZMATdxSkRydxEwpk2yoXFuQGOQF3CRbC1w7jhbMwBmYmpXkhSWKSmUXFtYFQVBFR5sCdMxSWiJYCGq_0zy2JKoHgzCD7iUMCpcW21bIrxWMoKjKuSpY8Ry0B8AbpALHgVNpAQuZ5jHd8dhSCQvwaIGd5xi-rJiDua64QEHKxc5WcQS9M3BXgq5AtkoBNC1xinrCgK-LDdgZpEwRF2izs4LVxgLGANrADVpLVKWQGMHAasvE9q-bkr5XpgS_zmhoD21iKXIhsgPtz5BNbfbttekNh23TFWPwXRtea3Uoy2kq9r7qyYXd1hkKVv6vdXqg1f8ER7dTlA1zC_3gsf5PGbx9H0clwZzLTqv6CUofqPuyY77DC_YSwOtDd7z127sglsoMZvXQuDATkhhcPWfo0MFxMFGoIpi9nzFFE-0ZshRDmAPpTwJKMXSoJUgFiaOhO3S0-0ohlU0ZeHLwklWmfBXb7UAlTGG1906MG1ZkIDtO6SovSpkyLKNxDKLBAc2Wy-vLy-WX6d9Xy9n36cPcXV7Ob5bTx7-gV-ixQG4kBCr45hgAWORH3hC035GaHdOT63Dm1OHMfORNnTF8-RMMaqyCFy7Id-psTUJ2C4mGG2LSA986jYEXCZvYOxv-woQ7Y56wJLYdomK3ztyeS31xDxmcVJF1ocPzeF9J0N9L0B18MkT8QL0RwtsWZliYJNXmfMA44cHt7d9_wSQblsUQrPrC3nEPEbSJDUJ0ehBj6vFDEB-q_DFdgQF-gQwh03n0u1FgJwYK10QR264XvEv0CFsaor2u6JiFoQ9T4s-iGQoNlNCRC00MmSMTrp2EDu2QNi8yDNKPXF5ARNZlNzlYivyKb7nd0T1UVVea4lA_FWlcXx5vsy-7yRN8-4a8QJnLu0YoDlEjQ2W_o_LE9_1JZAc6_dUApo-LS8hXwDvpe8g2ppD3L-D17aZ2XQCk0-DfFc3wKerWlVM3-hd__l0IvSBSFFn3t1P7Ur_9zjjLXtA0FYI-P_AEXsI6LRb16_S0TlLxtbKVPdHEnWIeKvFH74CkjRRrNAmBFIO14AVrnJ7I2v8vWx9niZu2FXZZClwKJafM_kPSnfHI9kJzEMY98bZDWZeWR76h-uqaS2RzXgjkiAqKb-zGOHTLgx69j6zY6ol7yqQ7jN7jAM5AP-mhn0ROcBj9lMm7HPF_pZue-eyhGYh72rwf9igEVPsXZggrtmH5o4DbTtjtulkgaa9fAa7S_we4Pwq_mUS92cHw9fZxy5l6tzvQWsnsi1Vw4qmE99GokvhC_YEhpTYDzQ1qHJOaccwhCh-jZl6vUr7HKF8q069xAe954BfiGVc5HBeYg_zkjSzTn7ybBjcCLQ0a3B4NEQ3HR2mYpbjKfSIJ7wc6ARwGUK8HdMLMGfgSaAvlcOh7MV4Y5olZpytUG-BxdT-icch6k3dkahxy5h2fvIjmWhTV9qUSkJXgU5yFL23vTzNYT__benHllakqmhRIKD9xk6fyY1PWYaCvQUgv-3EDn0Z_JORO7CductgS-rPzeyrXtbM7NJGPcvnC271bfzYC9Qz9g77-dmCfNAVAeYOGFAZHjeRnsdC3iM9kwQ5sg4Wwx4I_iulRFq52etA7bHyq5u_XzQPohm7jnm5e5MTH43WxvcXFTR1Gu0rdbemvit9LYeaSrY9QWeaVEV7er4gDOA1FJr3EIxjzl4pA3t3LMzCL-tSAZ4_G3EDmGilR4Mc0Ch0zPY_5Nc-naq7ooqsdZ2AXddGpb9wHc7QoHEN_BiAjEQmSMIh8w83PBTrlPD6A6ENYXN8ZQVcGFiMbCDjjHg1MctR-MkRU3GFn_DA_r4P_SE7gjgIGcAy8nsldYo98IyLUyPawn9ogNj6m1kemteuPOcAwcDahXP-NHM8dA07mLOu9usNvgGsqmjWEaf2GbJZ11yYauH_c59GrKQqCgdHvYQTrYG-UiU0MmUFfpmeHan_yrYKhnSE4NNeTfB5PbLJc4pAsYQyFXDKaZYpeguvGrKyaJeTyuYz5FpdR863M6nHsNxquYSx8XGuEpKztddzvlY8gAGMbjKj9jvQlSreU9CFDcS4Kde290MkhoYYqh7Q4KNwLcWHUb2W3S581_zb3Ip9oqW8bAdWyHYFm6ugDNHhR5bhLhfulXE85PHqyoTnujpNHvsJlCzXxSEJxO_sVMXojMqmdRiNDnWeB-BFXqodSrYAi_qrkxHpSZZzj4Z52dtdAv0VVLqtabL0YTvTuhuVU6qGjay7U1hxiOLDzWVdZC05jovYWseK2KNOdfqQcRwYYZ6nSY9Dd8jB1zQuJbpPsl9PJplR-qB61D3y6RzH0pvZ0sZhefiGLL1dkfnd7e_f95us1md_cXj2SxZ0qvvh2TR6u7u8eFi2G-0Ob0mM8IfD6xnRbQXCitmHhKZWtyD-r39smGOEqyxhX_j8moFy_kf_PGgXzjEH97V8wweMK-QxjfdrqpOMQiXe_-LXLxz_UUYy3nM_qHZ3qnmOieAymObkU9Q4tNSdvzDMpuGMDYcO7JIPOcRrSnKd5m-rEJb8h0y7wbNp-MPSZvA0YH10BEDS4ptYaph9kvycxlie0xBQmOIGx006SJUXRY-VI6z9wCxI5iukI6zGLvTWsdo_fmNyexedePPEm9EymMuPnl8rR1ScVFW-aaXW1P0aoTxbSErfO6AbPJtIWbIWTHh71Di_S9ujiWSWy8_efivF9PwjP1ufOJHYdn3pe6E6SsZu4IfcmPvcT6jqQs4dnGY14Vp6D4cCIn6Xnru26tu-MnfHIdexhZLM4doMxJAfcc7gzgBgFgTIbYsdoCGfiXGGIqlUJD7O0lOX-ITgxCCOcN_KB6HUhzvV2K185wZlCfK7g_gctwtzt">