================ @@ -1216,6 +1352,24 @@ class Sema; return ConversionSequenceList(Conversions, NumConversions); } + /// Provide storage for any Expr* arg that must be preserved + /// until deferred template candidates are deduced. + /// Typically this should be used for reversed operator arguments + /// and any time the argument array is transformed while adding + /// a template candidate. + llvm::MutableArrayRef<Expr *> getPersistentArgsArray(unsigned N) { + Expr **Exprs = slabAllocate<Expr *>(N); + return llvm::MutableArrayRef<Expr *>(Exprs, N); + } + + template <typename... T> + llvm::MutableArrayRef<Expr *> getPersistentArgsArray(T *...Exprs) { + llvm::MutableArrayRef<Expr *> Arr = + getPersistentArgsArray(sizeof...(Exprs)); + llvm::copy(std::initializer_list<Expr *>{Exprs...}, Arr.data()); ---------------- cor3ntin wrote:
`llvm::uninitialized_copy` does not exist, and `std::uninitialized_copy` takes iterators, so I would have to materialize the list. Given that we are copying pointers I don't think it matters, so I have not applied that piece of feedback. I'm happy to if you feel it's important https://github.com/llvm/llvm-project/pull/133426 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits