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

    <tr>
        <th>Summary</th>
        <td>
            clang crash: UNREACHABLE executed at SemaDeclCXX.cpp:238
        </td>
    </tr>

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

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

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

<pre>
    Found in the wild while messing around. Unfortunately, the original source code didn't compile, so I'm not able to provide a nice tidy repro. The attached file was minimized by cvise, but is still nontrivial. I've tried making it smaller, with minimal success.

Clang build mode was `RelWithDebInfo`, with assertions enabled.

Expected result: compile failure without crashing.

Repro files don't want to upload for some reason, so the minimized example is below. I ran with `clang++ -Wno-everything -std=c++20`.

```
template < int > struct integral_constant;

template < class _Tp >
struct is_move_constructible : integral_constant< __is_constructible(_Tp,  _Tp ) >;

template < template < class >
class _BaseType, class _Tp, _Tp _SequenceSize >
using __make_integer_sequence_impl = __make_integer_seq< _BaseType, _Tp, _SequenceSize >;
    
template < class , _Tp... >
struct __integer_sequence;

template < int _SequenceSize >
using __make_index_sequence =
  __make_integer_sequence_impl< __integer_sequence, int, _SequenceSize >;

template < int >
struct __all;

template < class >
struct __make_tuple_types { using type = int >}

template < class, class... _Tp >
struct __tuple_impl :  _Tp ... {
 template < class _Tuple >
  __tuple_impl(_Tuple &&) noexcept(__all< is_nothrow_constructible<
            typename __make_tuple_types< _Tuple >::type >::
                    type >::value__tuple_leaf0);
};

template < class... _Tp >
struct tuple {
  __tuple_impl< __make_index_sequence< 0 >, _Tp... > __base_;
}

template < class _Tp >
using __optional_sfinae_ctor_base_t = is_move_constructible< _Tp >;

template < class _Tp >
struct optional : __optional_sfinae_assign_base_t< _Tp > template <typename  >

struct TypedStatus { 
  template < typename O >
 struct Or {
    optional< tuple< O > > value_;
  };
};

struct ResolvedSourceString;

struct SubstitutingParser { using ParseInto = ResolvedSourceString; };

template < typename T >
struct Quoted { TypedStatus<int>::Or< T::ParseInto > Parse; }

struct ResolvedSourceString {
  ResolvedSourceString(ResolvedSourceString &) ;
  struct RawStr : SubstitutingParser Parse() { auto Quoted< RawStr >:: }
}
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyMVt1y4jgTfRpx0xXKyAHDBRf8JPWlvqmd3ZCpmTuXbDegHVnySm0I8_Rbkm1-EiezKZJgrD59zukjYeGc3GnEORsv2Xg9EDXtjZ2v___F4N4OMlOc5o-m1gVIDbRHOEpVwHEvFUKJzkm9A2H9giF801tjqdaCUJ0YX4X1xsqd1EKBM7XNEXJTIBSy0IwnBLkpK6nQL3YGnhhPStCGQGQKgQxU1hxkgSBAyxyBZHECi5U1Q3jZIwgike-xgK3ncxQOSqllKX9hAdkJ8oN0ATurCaQDR1Ip0EaTlQcp1DB0PCCQlVhAKX56OZLAlUIptL70KGnfoHoNdZ6jc0MWLVi0WCmhd5DV3pHSy_IE2CR6RvVd0n6N2ZPeGjaJzjjCObQkjXaA2mssWqiH1wpzwgIsuloRixedNbAVUtUWA4CpCXIr3F7qXVv57N0I-h0UpnH1KDR59-pKGVHA1lhwpkSwKJxfEsz2w7m4ha-irBR6lzJU5jiEJ7BCN7TZJMq9VsaXjC_h7rs2d3hAeyJPBO4cFSxe581tHrFJ1JLz2ptXtCAsKyUIgcUrkJqAxQ_gyNY5-UvcWaHS3GhHQhOLlw3CTVWuhHOQvlS-lkWLrtqlpTlgU-w_kT493sMe3BWkqXS3axmfpi-V96UB57PQoJdDD6GGTEtuKRy-nKoQuzNff-GR0w3-U6POcSN_YVtXhz2UpqX4iWkgjDZ17bpUlpUCFq97FgQt1-26Ru-aBCEAAP2GtrXD4fDW1_QdnX5L_DD_g7ICX89AXlLg9JnudlhvOfDQ8ROlH4TtWphQ6rOIvVkdKFJdKUzpVKEDliyhUeevw3y6Jsn6I9RzIrzR70Kctg3agS-aKIaZJGF8vTvBl7Q4cAMRIt3c5ZPwmoE2-JpjRf5e48DK7x1taG_N8c2WiFdtZrofr1SLEnv8CIO6cIkXLF60xrRXb7CuMS-LDkLV2IlQKLYR47N2TMn6k3n1GkoNn8a8W29CrnpS6W9EAeVmR0CaZsJheqHy-6Opy76p_HEvVOq2UgtMczK2QaMmNn1nV-Nn9XGiPzgIu2YhP-97N9_1bferHjfROo-5hb6g-2Om2JCgutkAwdfbs7Gr_dplsi39as-DgDPLUOGH4t-EivDbpKA7sy6Dv0pAi_qMzqgDFpvwZLEhK_Xu7ZpNnTmSVJPUuz-FdWivNm_44EmTCaP4AA4-zN5Z7svtGP6qjf8q932uPGPxyh9bXdi_Wg_x0lxcE3loaHWdfyf4bGwvfT7tr2kOhM7kDl4cN2RDeHpsa1jxaShMliBqMq1Ur-Rc3OrryDd_u-eAQTGPi1k8EwOcj5LxeBLf8ygZ7OdZLuIpTscFYixiTMbTSIzjLc-SvMiKUTaQcx7xcTQdzXg0iqJkeI_JaDyaTQo-nhY8RnYfYSmkGip1KIfG7gbSuRrno_H9_SgZKJGhcuExl_P2aYb7J1479wV3Wb1z7D5S0pG7QJAkhfOwvHnw8sq-_fH8sFj9b7H88gD4inntpy0INliKNeZq9ePHMK8qFi94PB3UVs33RJXzvvBHxh93kvZ1NsxNyfijb9X-u6us-RtzYvwxUHeMP7bsD3P-bwAAAP__BA7Gcw">