Skip to content

Fix MSVC-like compile by clang#1613

Open
dimdim1177 wants to merge 1 commit intochriskohlhoff:masterfrom
dimdim1177:clang_msvc_like
Open

Fix MSVC-like compile by clang#1613
dimdim1177 wants to merge 1 commit intochriskohlhoff:masterfrom
dimdim1177:clang_msvc_like

Conversation

@dimdim1177
Copy link
Contributor

When compile in Ubuntu 24.04 LTS in MSVC-like mode by clang-cl 18 this example main.cpp

#include <asio/co_spawn.hpp>
#include <asio/thread_pool.hpp>
#include <asio/use_awaitable.hpp>

using namespace asio;

awaitable<int> CoroTask(thread_pool::executor_type executor) {
    co_return 0;
}

int main(int, char**) {
    thread_pool pool;
    auto _[[maybe_unused]] = co_spawn(pool, CoroTask(pool.executor()), use_awaitable);
    pool.wait();
    return 0;
}

failed with

In file included from /home/dimdim11/arcadia/junk/dimdim11/asio_win/main.cpp:1:
In file included from /home/dimdim11/arcadia/contrib/libs/asio/include/asio/co_spawn.hpp:519:
In file included from /home/dimdim11/arcadia/contrib/libs/asio/include/asio/impl/co_spawn.hpp:27:
In file included from /home/dimdim11/arcadia/contrib/libs/asio/include/asio/use_awaitable.hpp:157:
/home/dimdim11/arcadia/contrib/libs/asio/include/asio/impl/use_awaitable.hpp(180,20): error: binding dereferenced null pointer to reference has undefined behavior [-Werror,-Wnull-dereference]
  180 |   return std::move(*static_cast<T*>(nullptr));
      |                    ^~~~~~~~~~~~~~~~~~~~~~~~~
/home/dimdim11/arcadia/contrib/libs/asio/include/asio/impl/use_awaitable.hpp(223,15): note: in instantiation of function template specialization 'asio::dummy_return<int>' requested here
  223 |     co_return dummy_return<typename return_type::value_type>();
      |               ^
/home/dimdim11/arcadia/contrib/libs/asio/include/asio/async_result.hpp(628,65): note: in instantiation of function template specialization 'asio::async_result<asio::use_awaitable_t<>, void (std::exception_ptr, int)>::initiate<asio::detail::initiate_co_spawn<asio::any_io_executor>, asio::detail::awaitable_as_function<int, asio::any_io_executor>>' requested here
  628 |   return async_result<decay_t<CompletionToken>, Signatures...>::initiate(
      |                                                                 ^
/home/dimdim11/arcadia/contrib/libs/asio/include/asio/impl/co_spawn.hpp(365,10): note: in instantiation of function template specialization 'asio::async_initiate<const asio::use_awaitable_t<> &, void (std::exception_ptr, int), asio::detail::initiate_co_spawn<asio::any_io_executor>, asio::detail::awaitable_as_function<int, asio::any_io_executor>>' requested here
  365 |   return async_initiate<CompletionToken, void(std::exception_ptr, T)>(
      |          ^
1 error generated.

Only if used awaitable<int>, with awaitable<void> no errors:

awaitable<void> CoroTask(thread_pool::executor_type executor) {
    co_return;
}

This patch fix this problem by disable dummy_return during compile by clang

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant