[PATCH] D129973: [clang] Pass FoundDecl to DeclRefExpr creator for operator overloads

joanahalili via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Aug 3 10:42:12 PDT 2022

joanahalili added a comment.

In D129973#3696189 <https://reviews.llvm.org/D129973#3696189>, @joanahalili wrote:

> Heads up: This commit causes clang crashes on our end. We are currently working on a reproducer and will post it as soon as its ready.

Here is the reduced code:

  template <class a> struct b {
    template <class c> void ab(c);
    template <class c> void ad(c p1) { ab(d()(p1)); }
    a d();
  template <typename e> struct f {
    using aa = e;
    template <class g> struct j {
      g ag;
      template <class... h> auto operator()(h... p1) -> decltype(ag(p1...));
    using ai = b<j<aa>>;
    template <class c> void ad(c p1) { i.ad(p1); }
    ai i;
  template <typename c, typename> struct l {
    int k(const c &);
    struct n {
      int operator()(const c &) const;
    using m = f<n>;
    m aj;
  template <typename c, typename al> int l<c, al>::k(const c &p1) { aj.ad(p1); }
  template <typename c, typename al>
  int l<c, al>::n::operator()(const c &) const {}
  template class l<int, int>;

This commit causes a compiler crash for this code. It however successfully builds with the previous commit compiler. 
Here is also a link comparing released clang with clang trunk where trunk is crashing and the released version is not: https://godbolt.org/z/fdbo74c54

  rG LLVM Github Monorepo



More information about the cfe-commits mailing list