rsmith added a comment.

Slightly reduced testcase:

  template<typename T> T f(T u, bool b) {
    T t;
    if (b) return t;
    return u;
  }
  struct X { X(); X(const X&); ~X(); void *data; };
  
  template X f(X, bool);

... which compiles to:

  X f(X u, bool b) {
    X::X(&return-slot);
    if (b) return;
    X::X(&return-slot, u);
    X::~X(&return-slot);
  }

... due to `t` incorrectly being used as an NRVO variable.


Repository:
  rC Clang

https://reviews.llvm.org/D47067



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to