Issue 154417
Summary clang crash: UNREACHABLE executed at SemaDeclCXX.cpp:238
Labels clang
Assignees
Reporter DKLoehr
    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 >:: }
}
```
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to