> 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

Attachment: smime.p7s
Description: S/MIME cryptographic signature

Reply via email to