[Bug c++/85214] [7/8 Regression] ICE on valid C++17 code on x86_64-linux-gnu: in tsubst_copy, at cp/pt.c:14562
jakub at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Fri Apr 6 10:29:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85214
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Priority|P3 |P2
Status|UNCONFIRMED |NEW
Last reconfirmed| |2018-04-06
CC| |jakub at gcc dot gnu.org,
| |jason at gcc dot gnu.org
Target Milestone|--- |7.4
Summary|ICE on valid C++17 code on |[7/8 Regression] ICE on
|x86_64-linux-gnu: in |valid C++17 code on
|tsubst_copy, at |x86_64-linux-gnu: in
|cp/pt.c:14562 |tsubst_copy, at
| |cp/pt.c:14562
Ever confirmed|0 |1
--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Reduced testcase:
typedef int a;
namespace b {
template <typename c, c d> struct e { static constexpr c f = d; constexpr
operator int() { return f; } };
typedef e<bool, false> g;
template <typename, typename> struct h : g {};
template <typename...> class k;
template <typename c, typename l> constexpr bool m = h<c, l>::f;
template <a> struct n;
template <typename> struct aa;
template <long, typename> struct C;
template <long ab, typename c> using o = typename C<ab, c>::q;
template <typename c, c> struct p {};
template <typename, typename = n<0>> struct F;
template <typename c, a... r> struct F<c, n<r...>> { typedef p<c, r...> ae; };
template <typename c, c> using t = typename F<c>::ae;
template <a... r> using w = p<a, r...>;
template <a ad> using af = t<a, ad>;
template <typename... ag> struct aa<k<ag...>> : e<long, sizeof...(ag)> {};
template <typename c> constexpr a ah = aa<c>::f;
template <typename ai, typename... aj> struct C<0, k<ai, aj...>> { typedef ai
q; };
}
template <typename ak, a... s> void al(ak am, b::w<s...>) { int{(am(b::e<a,
s>{}), 0)...}; }
template <int an, typename ak> void al(ak am) { al(am, b::af<an>()); }
void ao() {
using ap = b::k<double>;
const a aq = b::ah<ap>;
al<aq>([](auto i) {
using ar = b::o<i, ap>;
al<aq>([](auto j) { using as = b::o<j, ap>; if constexpr (b::m<ar, as>) ;
});
});
}
Started to ICE with r239338 when if constexpr has been introduced.
More information about the Gcc-bugs
mailing list