> On 10 Apr 2025, at 19:31, Richard Biener <rguent...@suse.de> wrote: > > External email: Use caution opening links or attachments > > >> Am 10.04.2025 um 17:27 schrieb Jennifer Schmitz <jschm...@nvidia.com>: >> >> This patch adds a test case to the testsuite for PR119706. >> The bug was already fixed by >> https://gcc.gnu.org/pipermail/gcc-patches/2025-April/680573.html. >> >> OK for mainline? > > Ok
Thanks, pushed to trunk: f6e6e6d9ba1d71fdd02a2c570d60217db6c5a31b. Jennifer > > Richard > > >> Signed-off-by: Jennifer Schmitz <jschm...@nvidia.com> >> >> gcc/testsuite/ >> PR tree-optimization/119706 >> * g++.target/aarch64/sve/pr119706.C: New test. >> --- >> .../g++.target/aarch64/sve/pr119706.C | 178 ++++++++++++++++++ >> 1 file changed, 178 insertions(+) >> create mode 100644 gcc/testsuite/g++.target/aarch64/sve/pr119706.C >> >> diff --git a/gcc/testsuite/g++.target/aarch64/sve/pr119706.C >> b/gcc/testsuite/g++.target/aarch64/sve/pr119706.C >> new file mode 100644 >> index 00000000000..443dc50e9d9 >> --- /dev/null >> +++ b/gcc/testsuite/g++.target/aarch64/sve/pr119706.C >> @@ -0,0 +1,178 @@ >> +/* { dg-do compile } */ >> +/* { dg-options "-O3 -mcpu=neoverse-v2 >> --param=aarch64-autovec-preference=sve-only -w" } */ >> + >> +namespace a { >> +typedef long unsigned b; >> +typedef int c; >> +template <bool, typename d> struct e { using f = d; }; >> +template <bool g, typename d = void> using h = typename e<g, d>::f; >> +template <typename aa, typename, template <typename> class> struct i { >> + using f = aa; >> +}; >> +template <typename aa, template <typename> class j> using k = i<aa, void, >> j>; >> +template <typename aa, template <typename> class j> >> +using l = typename k<aa, j>::f; >> +} // namespace a >> +inline void *operator new(a::b, void *ab) { return ab; } >> +namespace a { >> +template <typename> class ac { >> +public: >> + typedef b m; >> + template <typename ad, typename... n> void ae(ad *ab, n... w) { >> + new (ab) ad(w...); >> + } >> +}; >> +template <typename d> using x = ac<d>; >> +template <typename d> class af : public x<d> { >> +public: >> + typedef d o; >> + template <typename> struct ag { typedef af ah; }; >> +}; >> +struct ai {}; >> +struct aj : ai {}; >> +struct ak : aj {}; >> +template <typename> struct al; >> +template <typename d> struct al<d *> { >> + typedef ak an; >> + typedef c ao; >> + typedef d ap; >> +}; >> +template <typename aq> typename aq ::an ar(aq) { return typename aq ::an(); >> } >> +template <typename as> typename as ::ao at(as au, as av, ak) { return av - >> au; } >> +template <typename aw> typename aw ::ao ax(aw au, aw av) { >> + return at(au, av, ar(au)); >> +} >> +template <typename> struct ay { typedef c ao; }; >> +} // namespace a >> +namespace az { >> +template <typename am, typename> class ba { >> + am bb; >> + typedef a::al<am> bc; >> + >> +public: >> + typedef typename bc::an an; >> + typedef typename bc::ao ao; >> + typedef typename bc::ap ap; >> + ba(am bd) : bb(bd) {} >> + ap operator*() { return *bb; } >> + ba operator++() { >> + ++bb; >> + return *this; >> + } >> + am base() { return bb; } >> +}; >> +template <typename be, typename bf, typename bg> >> +bool operator!=(ba<be, bg> bh, ba<bf, bg> p) { >> + return bh.base() != p.base(); >> +} >> +template <typename be, typename bf, typename bg> >> +auto operator-(ba<be, bg> bh, ba<bf, bg> p) { >> + return bh.base() - p.base(); >> +} >> +} // namespace az >> +namespace a { >> +struct bi { >> + template <typename d, typename> struct bj { >> + using f = typename d::ag<d>::ah; >> + }; >> + template <typename> using bk = b; >> + template <typename...> static constexpr bool bl = false; >> + template <typename, typename> static constexpr bool bm = bl<>; >> + template <typename d, typename... n> static constexpr bool bn = bm<d, >> n...>; >> +}; >> +template <typename bo, typename ad> using bp = typename bi::bj<bo, ad>::f; >> +template <typename bo> struct bq : bi { >> + typedef typename bo::o o; >> + using br = l<o *, bk>; >> + template <typename, typename bs> struct bt { using f = typename >> ay<bs>::ao; }; >> + template <typename bu, typename> struct bv { using f = typename bu::m; }; >> + using ao = typename bt<bo, c>::f; >> + using m = typename bv<bo, ao>::f; >> + template <typename d> using bw = bp<bo, d>; >> + static br allocate(bo, m); >> + template <typename d, typename... n> >> + static h<bn<bo, d>> ae(bo ci, d ab, n... w) { >> + ci.ae(ab, w...); >> + } >> +}; >> +template <typename d> struct bx { >> + static bool by(d &bz) try { d(bz.begin(), bz.ca(), bz.cb()); } catch >> (...) { >> + } >> +}; >> +} // namespace a >> +namespace az { >> +template <typename bo> struct cc : a::bq<bo> { >> + typedef a::bq<bo> q; >> + template <typename d> struct ag { typedef typename q::bw<d> ah; }; >> +}; >> +} // namespace az >> +enum cd {}; >> +using ce = double; >> +namespace a { >> +template <typename aw, typename cf, typename cg, typename ch> >> +cg cj(aw au, cf av, cg ck, ch cl) { >> + typedef az::cc<ch> cx; >> + for (; au != av; ++au, ++ck) >> + cx::ae(cl, ck, *au); >> +} >> +template <typename d, typename bo> struct cm { >> + typedef typename az::cc<bo>::ag<d>::ah cn; >> + typedef typename az::cc<cn>::br br; >> + struct co { >> + br db; >> + br cp; >> + }; >> + struct cq : cn, co { >> + cq(cn) {} >> + } typedef cr; >> + cn cs(); >> + cr cb() noexcept; >> + cm(cr ci) : ct(ci) {} >> + cq ct; >> + br cu(b cv) { >> + typedef az::cc<cn> cw; >> + return cv ? cw::allocate(ct, cv) : c(); >> + } >> +}; >> +template <typename d, typename bo = af<d>> class cy : cm<d, bo> { >> + typedef cm<d, bo> cz; >> + >> +public: >> + typedef typename cz::br br; >> + typedef az::ba<br, cy> da; >> + typedef b m; >> + typedef bo cr; >> + cz::cs; >> + template <typename aw> cy(aw au, aw av, cr ci) : cz(ci) { >> + dg(au, av, ar(au)); >> + } >> + cz::cb; >> + da begin() { return this->ct.db; } >> + da ca() { return this->ct.cp; } >> + void r() { s(); } >> + void clear() { t(this->ct.db); } >> + template <typename cg> void dg(cg au, cg av, ai) { y(au, av, ax(au, av)); >> } >> + template <typename am, typename cf> void y(am au, cf av, m cv) { >> + br z = this->cu(dc(cv, cs())); >> + cj(au, av, z, cs()); >> + } >> + bool s(); >> + m dc(m cv, cr) { return cv; } >> + void t(br dd) { >> + if (this->ct.cp - dd) >> + this->ct.cp = dd; >> + } >> +}; >> +template <typename d, typename bo> bool cy<d, bo>::s() { bx<cy>::by(*this); >> } >> +namespace basic { >> +class u { >> + using de = ce; >> + void v(cd, b); >> + cy<de> df; >> +}; >> +void u::v(cd, b) { >> + df.clear(); >> + df.r(); >> +} >> +} // namespace basic >> +} // namespace a >> \ No newline at end of file >> -- >> 2.34.1
smime.p7s
Description: S/MIME cryptographic signature