sammccall added a comment. In D115187#3471003 <https://reviews.llvm.org/D115187#3471003>, @nridge wrote:
> Without my patch, this compiles fine. With it, I clang gives the following > errors: > > coroutines.cpp:35:9: error: no viable conversion from 'awaitable' to > 'transform_awaitable' > coro<T> await_template(U t) { > ^~~~~~~~~~~~~~ > coroutines.cpp:39:34: note: in instantiation of function template > specialization 'await_template<transform_promise, transform_awaitable>' > requested here > template coro<transform_promise> > await_template<transform_promise>(transform_awaitable); Poked at this a bit locally. From the message we see there's a call to `BuildUnresolvedCoawaitExpr` with an `awaitable` rather than `transform_awaitable`, so the `await_transform` call fails. It turns out this is the `initial_suspend` call (CXXMemberCallExpr). We're not supposed to <https://eel.is/c++draft/expr.await#3.2> transform initial/final suspends, but the code is now doing so. This seems to be a consequence of switching from BuildResolvedCoawaitExpr (which does not apply the transform) to BuildUnresolvedCoawaitExpr (which does) during template instantiation. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D115187/new/ https://reviews.llvm.org/D115187 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits