Created
November 23, 2022 18:35
-
-
Save d0k/2bf4e6a4e5642d053c5d84fc66a33c5b to your computer and use it in GitHub Desktop.
cf624b23bc5d5a6161706d1663def49380ff816a reproducer
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// RUN: clang -target aarch64-linux-gnu -O2 crash.cpp | |
template <class d> struct g { using e = d; }; | |
template <bool, class f, class> using aa = g<f>::e; | |
enum { ab }; | |
struct i { | |
enum { ac, h }; | |
}; | |
struct m { | |
enum { j }; | |
}; | |
template <int k> class o { int a[k]; }; | |
template <typename, int> class p; | |
template <typename> class ad; | |
template <typename> class q; | |
template <typename> class r; | |
class s; | |
template <typename ae, typename af> ae ag(ae t, af) { return t; } | |
template <typename ah> class p<ah, ab> { | |
public: | |
template <typename ai> ad<const ah> aj(ai) { return ak(); } | |
aa<m::j, ad<const ah>, ah> al() { | |
ad n = aj(int()); | |
return ag(n, 0); | |
} | |
ah ak() { return *static_cast<ah *>(this); } | |
}; | |
template <typename ah, int = i::h> class p : public p<ah, ab> { | |
public: | |
template <typename am, typename an> q<const ah> ao(am t, an ap) { | |
return q<const ah>(ak(), t, ap); | |
} | |
template <typename aq> r<const ah> ar(aq t) { return r<const ah>(ak(), t); } | |
template <typename l> s as(l); | |
ah ak() { return *static_cast<ah *>(this); } | |
}; | |
template <typename at> class ad { | |
public: | |
ad(at t) : au(t) {} | |
at au; | |
int b; | |
}; | |
template <typename at> class q : public p<q<at>> { | |
public: | |
q(at t, o<1>, o<1>) : au(t), av() {} | |
at au; | |
o<1> aw; | |
o<1> av; | |
}; | |
template <typename at> class r : public p<r<at>> { | |
public: | |
r(at t, o<1>) : au(t), ax() {} | |
at au; | |
o<1> ax; | |
}; | |
class s { | |
public: | |
template <typename ay> void operator=(ay); | |
}; | |
template <int az> class u { | |
public: | |
typedef o<az> ba; | |
}; | |
class bb : public p<bb> { | |
u<4>::ba bc; | |
}; | |
class v { | |
public: | |
template <typename, long> bb bd(); | |
}; | |
class w { | |
public: | |
w(int *(int *)); | |
}; | |
class x { | |
public: | |
x(int *); | |
virtual void be(int *, const v &, unsigned long *, v *); | |
}; | |
class y : x { | |
using x::x; | |
void be(int *t, const v &ap, unsigned long *z, v *bf) { | |
bg<float, float>(t, z, ap, bf); | |
} | |
int bh; | |
template <typename, typename> void bg(int *, unsigned long *, v, v *) { | |
o<1> a, e, f; | |
v b; | |
auto d = b.bd<int, 1>(); | |
d.as(bh) = d.ao(e, a).ar(f).al(); | |
} | |
}; | |
int c = [](int) { | |
w([](int *bi) -> int * { new y(bi); }); | |
return int{}; | |
}(0); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment