Skip to content

[clang] clang frontend hangs #113030

@danix800

Description

@danix800

https://godbolt.org/z/fG5ooW4z7

template<typename _Tp, _Tp __v>
struct integral_constant {
	static constexpr _Tp value = __v;
};

template<typename _Tp> struct remove_reference {
	typedef _Tp type;
};

typedef int size_t;

template<typename> struct tuple_size;

template<typename _Tp, _Tp...> struct integer_sequence;

template<typename T> using _t = T;

enum indices_strategy_ { repeat, };

constexpr indices_strategy_ strategy_(size_t cur, size_t) { return repeat; }

template<size_t, typename, indices_strategy_> struct make_indices_;

template<size_t... Is> using index_sequence = integer_sequence<size_t, Is...>;

template<size_t N>
using make_index_sequence = _t<make_indices_<N, index_sequence<0>, strategy_(1, N)>>;

template<size_t End, size_t... Values>
struct make_indices_<End, index_sequence<Values...>, repeat>
	: make_indices_<End, index_sequence<Values..., Values...>, strategy_(2, End)> {
};

template<typename Tup>
using tuple_indices_t = make_index_sequence<tuple_size<typename remove_reference<Tup>::type>::value>;

struct {
	template<typename Fun, typename Tup>
	auto operator()(Fun, Tup) -> decltype(tuple_indices_t<Tup>{});
} tuple_apply;

template<typename...> class tuple {};

template<typename... _Elements>
struct tuple_size<tuple<_Elements...>>: integral_constant<size_t, sizeof...(_Elements)> {};

struct view_closure_base {
	template<typename Rng, typename ViewFn>
	friend auto operator|(Rng rng, ViewFn vw) {
		vw(rng);
	}
};

template<typename ViewFn> struct view_closure: view_closure_base, ViewFn {};

template<typename Fun>
struct iter_zip_with_view {
	template<int>
	struct cursor {
		Fun fun_;
		tuple<> its_;
		auto read() -> decltype(tuple_apply(fun_, its_));
	};

	cursor<false> begin_cursor;
};

template<typename... Rngs>
struct zip_view: iter_zip_with_view<Rngs...> {};

struct {
	template<typename... Rngs>
	zip_view<Rngs...> operator()(Rngs...);
} zip;

template<typename, typename>
struct index_view {};

struct enumerate_fn {
	template<typename Rng> auto operator()(Rng) {
		using D = Rng;
		zip(index_view<int, D>());
	}
};

view_closure<enumerate_fn> enumerate;
void determineInlinableBlocks(int _items) { _items | enumerate; }

Metadata

Metadata

Assignees

No one assigned

    Labels

    clang:frontendLanguage frontend issues, e.g. anything involving "Sema"hangCompiler hang (infinite loop)

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions