Skip to content

Instantly share code, notes, and snippets.

@d0k
Created November 23, 2022 18:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save d0k/2bf4e6a4e5642d053c5d84fc66a33c5b to your computer and use it in GitHub Desktop.
Save d0k/2bf4e6a4e5642d053c5d84fc66a33c5b to your computer and use it in GitHub Desktop.
cf624b23bc5d5a6161706d1663def49380ff816a reproducer
// 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