https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91164
Martin Liška <marxin at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords|needs-reduction |
--- Comment #3 from Martin Liška <marxin at gcc dot gnu.org> ---
Reduced test-case:
$ cat ice.ii
inline namespace __cxx11 {
template <typename, typename = int> class basic_string;
}
template <int __v> struct N { static constexpr int value = __v; };
template <bool, typename _Tp> using __enable_if_t = _Tp;
struct C {
template <typename _Up> using rebind = _Up;
};
template <typename, typename _Tp> using __ptr_rebind = C::rebind<_Tp>;
void *operator new(unsigned long, void *);
class L {
public:
L();
};
class I;
template <typename _Facet> _Facet use_facet(I);
struct F {
template <typename> using rebind_alloc = L;
};
namespace __cxx11 {
template <typename, typename> class basic_string {
struct _Alloc_hider : F::rebind_alloc<int> {
_Alloc_hider(int, L = L()) : _M_p() {}
int _M_p;
} _M_dataplus;
void _M_destroy();
public:
basic_string() : _M_dataplus(0) {}
~basic_string() {
bool __trans_tmp_2 = _M_dataplus._M_p == 0;
if (__trans_tmp_2)
_M_destroy();
}
const wchar_t *data();
};
} // namespace __cxx11
class I {};
class _Sp_counted_base {
virtual void _M_get_deleter();
};
struct K {
L _M_a;
};
class O : _Sp_counted_base {
class A {
public:
A(L);
};
public:
O(L p1) : _M_impl(p1) {}
A _M_impl;
};
class J {
public:
template <typename _Tp, typename _Alloc> J(_Tp, _Alloc p2) {
new (0) O(p2._M_a);
}
};
class H {
using element_type = int;
protected:
template <typename _Alloc> H(_Alloc p1) : _M_refcount(_M_ptr, p1) {}
element_type _M_ptr;
J _M_refcount;
};
class P : H {
template <typename _Alloc> P(_Alloc p1) : H(p1) {}
template <typename, typename _Alloc, typename...>
friend P allocate_shared(const _Alloc &);
};
template <typename, typename _Alloc, typename...>
P allocate_shared(const _Alloc &) {
return K{};
}
template <typename> P make_shared() { return allocate_shared<int>(L()); }
struct G {
__ptr_rebind<int, int> _M_cur;
__ptr_rebind<int, int> _M_first;
__ptr_rebind<int, int> _M_last;
};
class D {
G _M_map;
long _M_map_size;
G _M_start;
G _M_finish;
};
class stack {
D c;
public:
stack() : c() {}
};
enum syntax_option_type : int;
syntax_option_type ECMAScript, __compile_nfa___flags;
class _Scanner {
public:
_Scanner(wchar_t *, wchar_t *, syntax_option_type, I);
};
template <typename _TraitsT> class _Compiler {
public:
typedef typename _TraitsT::char_type *_IterT;
_Compiler(_IterT, _IterT, const typename _TraitsT::locale_type &,
syntax_option_type);
syntax_option_type _M_flags;
_Scanner _M_scanner;
P _M_nfa;
typename _TraitsT::string_type _M_value;
stack _M_stack;
int _M_ctype;
};
template <typename, typename>
using __enable_if_contiguous_iter = __enable_if_t<N<false>::value, P>;
template <typename _TraitsT, typename _FwdIter>
__enable_if_contiguous_iter<_FwdIter, _TraitsT> __compile_nfa(_FwdIter) {
typename _TraitsT::locale_type __loc;
auto __cfirst = nullptr;
using _Cmplr = _Compiler<_TraitsT>;
_Cmplr(__cfirst, __cfirst, __loc, __compile_nfa___flags);
}
template <typename _TraitsT>
_Compiler<_TraitsT>::_Compiler(_IterT p1, _IterT p2,
const typename _TraitsT::locale_type &p3,
syntax_option_type)
: _M_scanner(p1, p2, _M_flags, p3), _M_nfa(make_shared<_TraitsT>()),
_M_ctype(use_facet<int>(p3)) {}
namespace __cxx11 {
struct M {
typedef wchar_t char_type;
typedef basic_string<char_type> string_type;
typedef I locale_type;
};
class B {
public:
B();
template <typename _Ch_traits, typename _Alloc>
void assign(basic_string<_Ch_traits, _Alloc> p1) {
const wchar_t __trans_tmp_1 = *p1.data();
B(&__trans_tmp_1, p1.data(), _M_loc, ECMAScript);
}
template <typename _FwdIter>
B(_FwdIter, _FwdIter p2, I, syntax_option_type)
: _M_automaton(__compile_nfa<M>(p2)) {}
I _M_loc;
P _M_automaton;
};
} // namespace __cxx11
void test01() {
basic_string<wchar_t> s;
B re;
re.assign(s);
}