Skip to content

clang crash: UNREACHABLE executed at SemaDeclCXX.cpp:238 #154417

@DKLoehr

Description

@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 >:: }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    clang:frontendLanguage frontend issues, e.g. anything involving "Sema"confirmedVerified by a second partycrash-on-invalidregression:19Regression in 19 release

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions