Bug#845493: g++-6: Internal compiler error in tsubst, at cp/pt.c:13073
Package: g++-6
Version: 6.2.0-13
Severity: minor
While developing a custom implementation of std::make_index_sequence
for compatibility with previous versions of gcc, I ran into an
internal compiler error. I'm attaching the output of creduce on the
source code, which still gives the same ICE.
-- System Information:
Debian Release: stretch/sid
APT prefers testing
APT policy: (500, 'testing')
Architecture: amd64 (x86_64)
Foreign Architectures: i386
Kernel: Linux 4.8.0-1-amd64 (SMP w/8 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
Versions of packages g++-6 depends on:
ii gcc-6 6.2.0-13
ii gcc-6-base 6.2.0-13
ii libc6 2.24-5
ii libgmp10 2:6.1.1+dfsg-1
ii libisl15 0.17.1-1
ii libmpc3 1.0.3-1
ii libmpfr4 3.1.5-1
ii libstdc++-6-dev 6.2.0-13
ii zlib1g 1:1.2.8.dfsg-2+b3
g++-6 recommends no packages.
Versions of packages g++-6 suggests:
pn g++-6-multilib <none>
pn gcc-6-doc <none>
pn libstdc++6-6-dbg <none>
-- no debconf information
typedef long unsigned a;
template <bool, typename> struct b;
template <typename p> struct b<true, p> { typedef p c; };
template <bool d, typename p = void> using e = typename b<d, p>::c;
template <typename f, f...> struct g;
template <typename> struct h;
template <typename f, f... i> struct h<g<f, i...>> { using c = g<f, i...>; };
template <typename> struct j;
template <typename f, f... i> struct j<g<f, i...>> {
using c = g<f, sizeof...(i)>;
};
template <typename f, f, typename = void> struct k;
template <typename f, f l> struct k<f, l, e<l == 0>> { using c = g<f>; };
template <typename f, f l> struct k<f, l, e<l && l % 2 == 0>> {
using c = typename h<typename k<f, l / 2>::c>::c;
};
template <typename f, f l> struct k<f, l, e<l % 2>> {
using c = typename j<typename k<f, l / 2>::c>::c;
};
template <typename f, f l> using m = typename k<f, l>::c;
template <typename> template <a... i> using n = g<unsigned long, i...>;
template <long l> using o = m<unsigned long, l>;
template <a i> void increasing(n<i>) {
increasing(o<10>{});
}
Reply to: