From e5d7eec584e69ef9fad9ff492023927e9dbe824e Mon Sep 17 00:00:00 2001 From: Denis Pronin Date: Wed, 30 Aug 2023 05:51:07 +0300 Subject: [PATCH] [core] fix compilation with clang-16 and libc++/libstdc++ (#33854) ``` [ 7%] Building CXX object CMakeFiles/grpc_unsecure.dir/src/core/ext/filters/channel_idle/idle_filter_state.cc.o In file included from /home/dpronin/.conan2/p/t/grpc7af12e0c3f76b/b/src/src/core/ext/filters/census/grpc_context.cc:26: In file included from /home/dpronin/.conan2/p/t/grpc7af12e0c3f76b/b/src/src/core/lib/debug/trace.h:34: In file included from /home/dpronin/.conan2/p/t/grpc7af12e0c3f76b/b/src/src/core/lib/gprpp/global_config.h:91: In file included from /home/dpronin/.conan2/p/t/grpc7af12e0c3f76b/b/src/src/core/lib/gprpp/global_config_env.h:27: In file included from /home/dpronin/.conan2/p/t/grpc7af12e0c3f76b/b/src/src/core/lib/gprpp/memory.h:24: In file included from /usr/include/c++/v1/memory:898: In file included from /usr/include/c++/v1/__memory/shared_ptr.h:31: /usr/include/c++/v1/__memory/unique_ptr.h:63:19: error: invalid application of 'sizeof' to an incomplete type 'grpc_server_config_fetcher' static_assert(sizeof(_Tp) >= 0, "cannot delete an incomplete type"); ^~~~~~~~~~~ /usr/include/c++/v1/__memory/unique_ptr.h:297:7: note: in instantiation of member function 'std::default_delete::operator()' requested here __ptr_.second()(__tmp); ^ /usr/include/c++/v1/__memory/unique_ptr.h:231:5: note: in instantiation of member function 'std::unique_ptr::reset' requested here reset(__u.release()); ^ /home/dpronin/.conan2/p/t/grpc7af12e0c3f76b/b/src/src/core/lib/surface/server.h:145:21: note: in instantiation of member function 'std::unique_ptr::operator=' requested here config_fetcher_ = std::move(config_fetcher); ^ /home/dpronin/.conan2/p/t/grpc7af12e0c3f76b/b/src/include/grpc/grpc.h:458:16: note: forward declaration of 'grpc_server_config_fetcher' typedef struct grpc_server_config_fetcher grpc_server_config_fetcher; ^ [ 7%] Built target grpc_python_plugin ``` src/core/lib/surface/server.h: Server::set_config_fetcher() function must be defined below the definition of the type 'struct grpc_server_config_fetcher' because std::unique_ptr must know how type looks like at the place where the smart pointer calls a deleter --------- Signed-off-by: Denis Pronin Co-authored-by: Yash Tibrewal --- src/core/lib/surface/server.h | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/core/lib/surface/server.h b/src/core/lib/surface/server.h index fc102945d34..05678146aaf 100644 --- a/src/core/lib/surface/server.h +++ b/src/core/lib/surface/server.h @@ -62,8 +62,6 @@ #include "src/core/lib/transport/transport.h" #include "src/core/lib/transport/transport_fwd.h" -struct grpc_server_config_fetcher; - namespace grpc_core { extern TraceFlag grpc_server_channel_trace; @@ -138,9 +136,7 @@ class Server : public InternallyRefCounted, } void set_config_fetcher( - std::unique_ptr config_fetcher) { - config_fetcher_ = std::move(config_fetcher); - } + std::unique_ptr config_fetcher); bool HasOpenConnections() ABSL_LOCKS_EXCLUDED(mu_global_); @@ -510,4 +506,13 @@ struct grpc_server_config_fetcher { virtual grpc_pollset_set* interested_parties() = 0; }; +namespace grpc_core { + +inline void Server::set_config_fetcher( + std::unique_ptr config_fetcher) { + config_fetcher_ = std::move(config_fetcher); +} + +} // namespace grpc_core + #endif // GRPC_SRC_CORE_LIB_SURFACE_SERVER_H