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

    <tr>
        <th>Summary</th>
        <td>
            [clang] Crash on invalid template deduction guide
        </td>
    </tr>

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

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

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

<pre>
    ```
$ cat /tmp/a.ii
namespace a {
template <class> struct pair;
}
template <class _T2> pair() -> pair<_T2>;

$ clang++ "-cc1" "-triple" "x86_64-unknown-linux-gnu"  "-x" "c++" a.ii -fsyntax-only
a.ii:4:22: error: no template named 'pair'; did you mean 'a::pair'?
    4 | template <class _T2> pair() -> pair<_T2>;
      | ^~~~
      |                      a::pair
a.ii:2:25: note: 'a::pair' declared here
    2 | template <class> struct pair;
 |                         ^
a.ii:4:32: error: no template named 'pair'; did you mean 'a::pair'?
    4 | template <class _T2> pair() -> pair<_T2>;
      |                                ^~~~
      | a::pair
a.ii:2:25: note: 'a::pair' declared here
 2 | template <class> struct pair;
      | ^
a.ii:4:22: error: deduction guide must be declared in the same scope as template 'a::pair'
    4 | template <class _T2> pair() -> pair<_T2>;
 |                      ^
a.ii:2:25: note: template is declared here
 2 | template <class> struct pair;
      | ^

clang++: ../../clang/lib/Sema/SemaDeclCXX.cpp:11468: bool clang::Sema::CheckDeductionGuideDeclarator(Declarator &, QualType &, StorageClass &): Assertion `Qualifiers && "expected QualifiedTemplate"' failed.
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzUVTuP4zgM_jVMQ9iw6XfhIpOMrz7sFNstZJlJdCM_YMlzSTO__SDbmQTzwOJwe8UKhiWKpMiPnx7CGHXsmEtIHiDZb8RkT_1YCp5q0T2bTd03lxLSYP2CPQRboBilsAhU2XYAqoSv1KLqRMtmEJJRIGQPy6TldtDCMkK0k1oYA9EjGjtO0uIg1AjRagjZ_gsP_PFEzms2pxyoQO9NjnaL9rbOLU0tuiPQA9ADApEnZQhE89COatC8Suc8_ZHG3tQ9d_3fnadVN529Yzc59Wx9Xg3lspiTHGr0DubSWXH2-k5flrhzNaJtDNGWCKIt8jj2oxt0Pb4hc5VqEChbIGUQPWCjGrz0E7YsOqcSEG0h2r5ZVEsARMQYIdvhf6wTzs0tBMnj6-vr-9lP231S93gdVEoWmJZd_wEBNiy1GLnBE498i0afg_lqm3ydm8s7efxAQ_S70PCT9jlLv5qQf8vG_Sb62QlouJmkVX2Hx0k1jO1kLNZ8y0N1aE-MRrSMRvYDozB3uXwg4xcz8SUJ77F9LO5baGX-p7Iu_7srzYX1faBq_q2KSqsaqPrGrVi7PUu9-_7dl8MA0TYM4zR3nnXf6_WCnEs6e8yj3Ynl8_5K1R-Oqf2MSNjeVfEmIFAKtMM_J6GfLgNf5W-2H8WRdzMF81zhQm6N4XGmH9LA-aiD4nG1SN39yueBpeUGr9rmaa0YELkdexBKc-OvFbk-TJumjJoiKsSGyzCjJC-KMA82p7LOmYtcZEkSB7IOWUZxktS54CBNDuKQbFRJAcVBERRhSikFfigCyrNEylrKKI1yiANuhdK-1i-t34_HjTJm4jIMsjzPNlrUrM38fBKtFJB7ScfSOXj1dDQQB1oZa25LWGX1_OYuHsked6MwJ-w7VN2L0Kq57ZR3Z2Yzjbo8WTsYRxZVQNVR2dNU-7JvHf365dp5w9j_xdICVXPOBqha034p6Z8AAAD__8EcP20">