grpc 1.47.0 → 1.48.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +105 -47
- data/include/grpc/compression.h +1 -1
- data/include/grpc/event_engine/event_engine.h +20 -11
- data/include/grpc/event_engine/slice_buffer.h +8 -2
- data/include/grpc/grpc.h +3 -3
- data/include/grpc/impl/codegen/compression_types.h +2 -1
- data/include/grpc/impl/codegen/connectivity_state.h +2 -1
- data/include/grpc/impl/codegen/gpr_types.h +2 -1
- data/include/grpc/impl/codegen/grpc_types.h +2 -1
- data/include/grpc/impl/codegen/port_platform.h +6 -3
- data/src/core/ext/filters/census/grpc_context.cc +3 -0
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +17 -5
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +16 -0
- data/src/core/ext/filters/channel_idle/idle_filter_state.h +2 -0
- data/src/core/ext/filters/client_channel/backup_poller.cc +3 -1
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +2 -2
- data/src/core/ext/filters/client_channel/client_channel.cc +51 -65
- data/src/core/ext/filters/client_channel/client_channel.h +19 -4
- data/src/core/ext/filters/client_channel/config_selector.h +1 -1
- data/src/core/ext/filters/client_channel/connector.h +1 -1
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +6 -4
- data/src/core/ext/filters/client_channel/dynamic_filters.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +1 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +73 -43
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +0 -1
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +33 -35
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +106 -112
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +91 -42
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +177 -138
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +4 -1
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +47 -44
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +118 -103
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +83 -78
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +57 -67
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -7
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +13 -17
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +3 -3
- data/src/core/ext/filters/client_channel/lb_policy.h +0 -7
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +3 -5
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -1
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +3 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +6 -6
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +5 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +10 -5
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +12 -3
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +5 -5
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +3 -4
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -0
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +24 -15
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +3 -1
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +7 -7
- data/src/core/ext/filters/client_channel/retry_filter.cc +35 -36
- data/src/core/ext/filters/client_channel/retry_filter.h +1 -0
- data/src/core/ext/filters/client_channel/retry_service_config.cc +4 -4
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -1
- data/src/core/ext/filters/client_channel/subchannel.cc +53 -50
- data/src/core/ext/filters/client_channel/subchannel.h +6 -22
- data/src/core/ext/filters/client_channel/subchannel_interface.h +10 -18
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +12 -97
- data/src/core/ext/filters/client_channel/subchannel_stream_client.h +5 -9
- data/src/core/ext/filters/deadline/deadline_filter.cc +12 -7
- data/src/core/ext/filters/deadline/deadline_filter.h +8 -1
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +21 -2
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +8 -3
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +7 -4
- data/src/core/ext/filters/fault_injection/service_config_parser.h +17 -3
- data/src/core/ext/filters/http/client/http_client_filter.cc +16 -5
- data/src/core/ext/filters/http/client/http_client_filter.h +8 -1
- data/src/core/ext/filters/http/client_authority_filter.cc +11 -10
- data/src/core/ext/filters/http/client_authority_filter.h +5 -2
- data/src/core/ext/filters/http/http_filters_plugin.cc +9 -1
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +64 -187
- data/src/core/ext/filters/http/message_compress/message_compress_filter.h +1 -2
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +42 -106
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +1 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +16 -9
- data/src/core/ext/filters/http/server/http_server_filter.h +6 -1
- data/src/core/ext/filters/message_size/message_size_filter.cc +25 -15
- data/src/core/ext/filters/message_size/message_size_filter.h +13 -0
- data/src/core/ext/filters/rbac/rbac_filter.cc +14 -3
- data/src/core/ext/filters/rbac/rbac_filter.h +8 -0
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +13 -2
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +14 -2
- data/src/core/ext/filters/server_config_selector/server_config_selector.cc +1 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +9 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +22 -2
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +1 -0
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +4 -4
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +15 -15
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +196 -476
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -1
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +141 -261
- data/src/core/ext/transport/chttp2/transport/flow_control.h +176 -289
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +57 -215
- data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -36
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +0 -41
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +7 -12
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +7 -6
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +0 -2
- data/src/core/ext/transport/chttp2/transport/internal.h +9 -111
- data/src/core/ext/transport/chttp2/transport/parsing.cc +51 -38
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +0 -4
- data/src/core/ext/transport/chttp2/transport/writing.cc +18 -21
- data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -1
- data/src/core/ext/transport/inproc/inproc_transport.cc +85 -81
- data/src/core/ext/transport/inproc/inproc_transport.h +3 -1
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +52 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +164 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +94 -0
- data/src/core/ext/xds/certificate_provider_factory.h +6 -1
- data/src/core/ext/xds/certificate_provider_registry.cc +8 -8
- data/src/core/ext/xds/certificate_provider_registry.h +3 -1
- data/src/core/ext/xds/certificate_provider_store.cc +2 -0
- data/src/core/ext/xds/certificate_provider_store.h +9 -0
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +9 -0
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +8 -0
- data/src/core/ext/xds/upb_utils.h +1 -2
- data/src/core/ext/xds/xds_api.cc +16 -18
- data/src/core/ext/xds/xds_api.h +12 -5
- data/src/core/ext/xds/xds_bootstrap.cc +37 -24
- data/src/core/ext/xds/xds_bootstrap.h +9 -11
- data/src/core/ext/xds/xds_certificate_provider.cc +12 -3
- data/src/core/ext/xds/xds_certificate_provider.h +16 -1
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +9 -0
- data/src/core/ext/xds/xds_channel_stack_modifier.h +5 -1
- data/src/core/ext/xds/xds_client.cc +71 -22
- data/src/core/ext/xds/xds_client.h +17 -3
- data/src/core/ext/xds/xds_client_stats.cc +3 -4
- data/src/core/ext/xds/xds_client_stats.h +4 -3
- data/src/core/ext/xds/xds_cluster.cc +21 -10
- data/src/core/ext/xds/xds_cluster.h +9 -1
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +16 -7
- data/src/core/ext/xds/xds_cluster_specifier_plugin.h +1 -8
- data/src/core/ext/xds/xds_common_types.cc +36 -22
- data/src/core/ext/xds/xds_common_types.h +12 -4
- data/src/core/ext/xds/xds_endpoint.cc +25 -15
- data/src/core/ext/xds/xds_endpoint.h +13 -5
- data/src/core/ext/xds/xds_http_fault_filter.cc +7 -5
- data/src/core/ext/xds/xds_http_fault_filter.h +3 -1
- data/src/core/ext/xds/xds_http_filters.cc +7 -0
- data/src/core/ext/xds/xds_http_filters.h +3 -3
- data/src/core/ext/xds/xds_http_rbac_filter.cc +16 -0
- data/src/core/ext/xds/xds_http_rbac_filter.h +7 -0
- data/src/core/ext/xds/xds_lb_policy_registry.cc +291 -0
- data/src/core/ext/xds/xds_lb_policy_registry.h +72 -0
- data/src/core/ext/xds/xds_listener.cc +51 -33
- data/src/core/ext/xds/xds_listener.h +10 -1
- data/src/core/ext/xds/xds_resource_type.h +3 -3
- data/src/core/ext/xds/xds_resource_type_impl.h +7 -3
- data/src/core/ext/xds/xds_route_config.cc +56 -28
- data/src/core/ext/xds/xds_route_config.h +11 -2
- data/src/core/ext/xds/xds_routing.cc +16 -0
- data/src/core/ext/xds/xds_routing.h +7 -2
- data/src/core/ext/xds/xds_server_config_fetcher.cc +54 -6
- data/src/core/lib/address_utils/parse_address.cc +5 -8
- data/src/core/lib/address_utils/parse_address.h +3 -2
- data/src/core/lib/address_utils/sockaddr_utils.cc +8 -7
- data/src/core/lib/address_utils/sockaddr_utils.h +2 -0
- data/src/core/lib/avl/avl.h +3 -3
- data/src/core/lib/backoff/backoff.cc +1 -1
- data/src/core/lib/backoff/backoff.h +1 -1
- data/src/core/lib/channel/call_tracer.h +3 -3
- data/src/core/lib/channel/channel_args.h +1 -0
- data/src/core/lib/channel/channel_args_preconditioning.cc +1 -0
- data/src/core/lib/channel/channel_fwd.h +26 -0
- data/src/core/lib/channel/channel_stack.cc +4 -4
- data/src/core/lib/channel/channel_stack.h +1 -11
- data/src/core/lib/channel/channel_stack_builder.h +2 -5
- data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
- data/src/core/lib/channel/channel_stack_builder_impl.h +1 -0
- data/src/core/lib/channel/channelz.cc +2 -1
- data/src/core/lib/channel/channelz.h +2 -3
- data/src/core/lib/channel/channelz_registry.cc +4 -5
- data/src/core/lib/channel/connected_channel.cc +1 -0
- data/src/core/lib/channel/connected_channel.h +1 -0
- data/src/core/lib/channel/promise_based_filter.cc +11 -5
- data/src/core/lib/channel/promise_based_filter.h +2 -0
- data/src/core/lib/compression/compression.cc +6 -1
- data/src/core/lib/compression/compression_internal.cc +3 -6
- data/src/core/lib/compression/compression_internal.h +3 -2
- data/src/core/lib/compression/message_compress.cc +3 -1
- data/src/core/lib/compression/message_compress.h +2 -3
- data/src/core/lib/debug/stats.cc +9 -9
- data/src/core/lib/debug/stats.h +2 -1
- data/src/core/lib/debug/stats_data.cc +2 -1
- data/src/core/lib/debug/stats_data.h +0 -4
- data/src/core/lib/debug/trace.h +13 -12
- data/src/core/lib/event_engine/default_event_engine_factory.cc +1 -1
- data/src/core/lib/event_engine/event_engine.cc +24 -19
- data/src/core/lib/event_engine/event_engine_factory.h +2 -2
- data/src/core/lib/event_engine/{iomgr_engine.cc → iomgr_engine/iomgr_engine.cc} +44 -91
- data/src/core/lib/event_engine/{iomgr_engine.h → iomgr_engine/iomgr_engine.h} +20 -16
- data/src/core/lib/event_engine/iomgr_engine/thread_pool.cc +123 -0
- data/src/core/lib/event_engine/iomgr_engine/thread_pool.h +70 -0
- data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.cc +62 -0
- data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.h +81 -0
- data/src/core/lib/event_engine/iomgr_engine/timer.cc +312 -0
- data/src/core/lib/event_engine/iomgr_engine/timer.h +193 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_heap.cc +107 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_heap.h +56 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_manager.cc +254 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_manager.h +111 -0
- data/src/core/lib/event_engine/promise.h +69 -0
- data/src/core/lib/gpr/time_posix.cc +6 -9
- data/src/core/lib/gpr/time_windows.cc +10 -7
- data/src/core/lib/gprpp/manual_constructor.h +0 -67
- data/src/core/lib/gprpp/status_helper.cc +44 -30
- data/src/core/lib/gprpp/time.cc +8 -0
- data/src/core/lib/gprpp/time.h +4 -0
- data/src/core/lib/http/format_request.cc +5 -4
- data/src/core/lib/http/format_request.h +1 -1
- data/src/core/lib/http/httpcli.cc +18 -12
- data/src/core/lib/http/httpcli.h +19 -3
- data/src/core/lib/http/httpcli_security_connector.cc +16 -4
- data/src/core/lib/http/httpcli_ssl_credentials.h +3 -1
- data/src/core/lib/http/parser.cc +6 -7
- data/src/core/lib/http/parser.h +3 -0
- data/src/core/lib/iomgr/call_combiner.cc +2 -2
- data/src/core/lib/iomgr/endpoint.h +1 -1
- data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -2
- data/src/core/lib/iomgr/error.cc +11 -9
- data/src/core/lib/iomgr/error.h +9 -5
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +57 -18
- data/src/core/lib/iomgr/ev_epoll1_linux.h +1 -1
- data/src/core/lib/iomgr/ev_poll_posix.cc +77 -52
- data/src/core/lib/iomgr/ev_poll_posix.h +2 -2
- data/src/core/lib/iomgr/ev_posix.cc +54 -92
- data/src/core/lib/iomgr/ev_posix.h +5 -3
- data/src/core/lib/iomgr/fork_posix.cc +1 -1
- data/src/core/lib/iomgr/iomgr.cc +7 -0
- data/src/core/lib/iomgr/iomgr_posix.cc +1 -0
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -0
- data/src/core/lib/iomgr/load_file.cc +1 -1
- data/src/core/lib/iomgr/resolve_address_posix.cc +1 -1
- data/src/core/lib/iomgr/resolve_address_windows.cc +1 -1
- data/src/core/lib/iomgr/tcp_client.cc +12 -7
- data/src/core/lib/iomgr/tcp_client.h +24 -13
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +15 -9
- data/src/core/lib/iomgr/tcp_client_posix.cc +143 -25
- data/src/core/lib/iomgr/tcp_client_posix.h +1 -1
- data/src/core/lib/iomgr/tcp_client_windows.cc +14 -10
- data/src/core/lib/iomgr/tcp_posix.cc +91 -29
- data/src/core/lib/iomgr/tcp_server_posix.cc +7 -7
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +12 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +2 -2
- data/src/core/lib/iomgr/tcp_server_windows.cc +7 -7
- data/src/core/lib/iomgr/tcp_windows.cc +5 -5
- data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -2
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +15 -12
- data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -2
- data/src/core/lib/iomgr/work_serializer.h +2 -3
- data/src/core/lib/matchers/matchers.cc +6 -3
- data/src/core/lib/matchers/matchers.h +2 -0
- data/src/core/lib/promise/activity.cc +0 -1
- data/src/core/lib/promise/activity.h +7 -13
- data/src/core/lib/promise/loop.h +1 -0
- data/src/core/lib/promise/promise.h +1 -0
- data/src/core/lib/promise/sleep.cc +36 -31
- data/src/core/lib/promise/sleep.h +25 -25
- data/src/core/lib/resolver/resolver.cc +5 -0
- data/src/core/lib/resolver/resolver.h +3 -0
- data/src/core/lib/resolver/resolver_factory.h +5 -2
- data/src/core/lib/resolver/resolver_registry.cc +2 -9
- data/src/core/lib/resolver/resolver_registry.h +12 -1
- data/src/core/lib/resolver/server_address.cc +8 -0
- data/src/core/lib/resolver/server_address.h +9 -2
- data/src/core/lib/resource_quota/memory_quota.cc +18 -60
- data/src/core/lib/resource_quota/memory_quota.h +11 -25
- data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +4 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +9 -3
- data/src/core/lib/security/authorization/evaluate_args.h +6 -3
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +6 -0
- data/src/core/lib/security/authorization/grpc_authorization_engine.h +7 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +12 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +12 -1
- data/src/core/lib/security/authorization/matchers.cc +9 -1
- data/src/core/lib/security/authorization/matchers.h +7 -0
- data/src/core/lib/security/authorization/rbac_policy.cc +5 -0
- data/src/core/lib/security/authorization/rbac_policy.h +7 -0
- data/src/core/lib/security/context/security_context.cc +5 -2
- data/src/core/lib/security/context/security_context.h +14 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +4 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.h +6 -1
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +1 -3
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -4
- data/src/core/lib/security/credentials/call_creds_util.cc +8 -0
- data/src/core/lib/security/credentials/call_creds_util.h +1 -0
- data/src/core/lib/security/credentials/channel_creds_registry.h +6 -1
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +10 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
- data/src/core/lib/security/credentials/composite/composite_credentials.h +16 -2
- data/src/core/lib/security/credentials/credentials.cc +4 -8
- data/src/core/lib/security/credentials/credentials.h +10 -8
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +28 -10
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +10 -0
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +9 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +24 -9
- data/src/core/lib/security/credentials/external/external_account_credentials.h +11 -0
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +12 -4
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +6 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +20 -4
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +10 -0
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +8 -6
- data/src/core/lib/security/credentials/fake/fake_credentials.h +13 -1
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +27 -10
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +10 -1
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +9 -3
- data/src/core/lib/security/credentials/iam/iam_credentials.h +10 -0
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +4 -0
- data/src/core/lib/security/credentials/insecure/insecure_credentials.h +5 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +5 -2
- data/src/core/lib/security/credentials/jwt/json_token.h +2 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +11 -5
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +14 -0
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +28 -3
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -2
- data/src/core/lib/security/credentials/local/local_credentials.cc +4 -3
- data/src/core/lib/security/credentials/local/local_credentials.h +7 -0
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +26 -13
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +20 -0
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +8 -7
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +24 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +5 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +13 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +6 -6
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +29 -10
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +9 -4
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +9 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +6 -7
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -5
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +7 -2
- data/src/core/lib/security/credentials/tls/tls_credentials.h +5 -1
- data/src/core/lib/security/credentials/tls/tls_utils.cc +2 -0
- data/src/core/lib/security/credentials/tls/tls_utils.h +1 -1
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +8 -1
- data/src/core/lib/security/credentials/xds/xds_credentials.h +14 -0
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +22 -2
- data/src/core/lib/security/security_connector/alts/alts_security_connector.h +6 -3
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +17 -1
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +9 -0
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +17 -2
- data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +5 -3
- data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +27 -19
- data/src/core/lib/security/security_connector/{load_system_roots_linux.h → load_system_roots_supported.h} +5 -5
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +22 -3
- data/src/core/lib/security/security_connector/local/local_security_connector.h +6 -2
- data/src/core/lib/security/security_connector/security_connector.cc +20 -18
- data/src/core/lib/security/security_connector/security_connector.h +18 -6
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +18 -6
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -2
- data/src/core/lib/security/security_connector/ssl_utils.cc +12 -2
- data/src/core/lib/security/security_connector/ssl_utils.h +10 -7
- data/src/core/lib/security/security_connector/ssl_utils_config.h +1 -1
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -13
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +23 -3
- data/src/core/lib/security/transport/auth_filters.h +7 -0
- data/src/core/lib/security/transport/client_auth_filter.cc +18 -9
- data/src/core/lib/security/transport/secure_endpoint.cc +63 -13
- data/src/core/lib/security/transport/secure_endpoint.h +4 -3
- data/src/core/lib/security/transport/security_handshaker.cc +44 -11
- data/src/core/lib/security/transport/security_handshaker.h +4 -0
- data/src/core/lib/security/transport/server_auth_filter.cc +26 -4
- data/src/core/lib/security/util/json_util.cc +3 -2
- data/src/core/lib/security/util/json_util.h +0 -2
- data/src/core/lib/service_config/service_config_call_data.h +2 -1
- data/src/core/lib/service_config/service_config_impl.cc +6 -6
- data/src/core/lib/service_config/service_config_impl.h +1 -3
- data/src/core/lib/service_config/service_config_parser.cc +2 -4
- data/src/core/lib/slice/slice_buffer.cc +30 -1
- data/src/core/lib/slice/slice_buffer.h +37 -6
- data/src/core/lib/slice/slice_string_helpers.cc +0 -20
- data/src/core/lib/slice/slice_string_helpers.h +0 -4
- data/src/core/lib/surface/call.cc +53 -115
- data/src/core/lib/surface/call.h +5 -1
- data/src/core/lib/surface/channel.h +2 -0
- data/src/core/lib/surface/channel_ping.cc +1 -1
- data/src/core/lib/surface/completion_queue.cc +15 -14
- data/src/core/lib/surface/completion_queue.h +2 -1
- data/src/core/lib/surface/init.cc +0 -1
- data/src/core/lib/surface/lame_client.cc +1 -1
- data/src/core/lib/surface/lame_client.h +1 -1
- data/src/core/lib/surface/server.cc +14 -8
- data/src/core/lib/surface/server.h +4 -1
- data/src/core/lib/surface/validate_metadata.cc +1 -1
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/error_utils.cc +13 -7
- data/src/core/lib/transport/handshaker.cc +3 -3
- data/src/core/lib/transport/http_connect_handshaker.cc +4 -4
- data/src/core/lib/transport/tcp_connect_handshaker.cc +2 -2
- data/src/core/lib/transport/transport.cc +0 -3
- data/src/core/lib/transport/transport.h +20 -14
- data/src/core/lib/transport/transport_fwd.h +20 -0
- data/src/core/lib/transport/transport_impl.h +1 -0
- data/src/core/lib/transport/transport_op_string.cc +9 -9
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +9 -1
- data/src/core/tsi/fake_transport_security.cc +13 -1
- data/src/core/tsi/fake_transport_security.h +6 -0
- data/src/core/tsi/ssl_transport_security.cc +1 -1
- data/src/core/tsi/transport_security_grpc.cc +3 -2
- data/src/core/tsi/transport_security_grpc.h +5 -2
- data/src/ruby/ext/grpc/ext-export-truffleruby.clang +2 -0
- data/src/ruby/ext/grpc/ext-export-truffleruby.gcc +7 -0
- data/src/ruby/ext/grpc/ext-export.clang +1 -0
- data/src/ruby/ext/grpc/ext-export.gcc +1 -0
- data/src/ruby/ext/grpc/extconf.rb +49 -18
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
- data/src/ruby/lib/grpc/errors.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
- data/third_party/abseil-cpp/absl/algorithm/container.h +1 -1
- data/third_party/abseil-cpp/absl/base/attributes.h +49 -22
- data/third_party/abseil-cpp/absl/base/casts.h +61 -68
- data/third_party/abseil-cpp/absl/base/config.h +182 -41
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +67 -2
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +3 -3
- data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
- data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
- data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
- data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +29 -22
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +13 -12
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +8 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
- data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
- data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +0 -1
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -3
- data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
- data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
- data/third_party/abseil-cpp/absl/base/optimization.h +19 -11
- data/third_party/abseil-cpp/absl/base/options.h +1 -1
- data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
- data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -0
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +15 -9
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +20 -9
- data/third_party/abseil-cpp/absl/container/internal/common.h +6 -5
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +10 -28
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +68 -20
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +29 -11
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +59 -38
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +4 -0
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +515 -184
- data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +4 -0
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +2 -1
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +20 -18
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +15 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +46 -7
- data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
- data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
- data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +218 -23
- data/third_party/abseil-cpp/absl/numeric/bits.h +2 -1
- data/third_party/abseil-cpp/absl/numeric/int128.cc +4 -2
- data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
- data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +21 -6
- data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
- data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
- data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
- data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +2 -1
- data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
- data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
- data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
- data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
- data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
- data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
- data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
- data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
- data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
- data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
- data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
- data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
- data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +17 -0
- data/third_party/abseil-cpp/absl/status/status.cc +174 -2
- data/third_party/abseil-cpp/absl/status/status.h +22 -12
- data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
- data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
- data/third_party/abseil-cpp/absl/strings/cord.cc +194 -913
- data/third_party/abseil-cpp/absl/strings/cord.h +202 -81
- data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
- data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
- data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
- data/third_party/abseil-cpp/absl/strings/cord_buffer.h +572 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +20 -32
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +123 -88
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +149 -49
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +44 -59
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +3 -1
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +54 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +102 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +11 -38
- data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +1 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +6 -5
- data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +38 -7
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +4 -5
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +5 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
- data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
- data/third_party/abseil-cpp/absl/strings/numbers.cc +8 -8
- data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
- data/third_party/abseil-cpp/absl/strings/str_cat.h +20 -13
- data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
- data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
- data/third_party/abseil-cpp/absl/strings/string_view.cc +2 -13
- data/third_party/abseil-cpp/absl/strings/string_view.h +3 -2
- data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
- data/third_party/abseil-cpp/absl/strings/substitute.h +10 -2
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -25
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -40
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +17 -9
- data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -2
- data/third_party/abseil-cpp/absl/time/duration.cc +5 -4
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
- data/third_party/abseil-cpp/absl/time/time.h +16 -12
- data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
- data/third_party/abseil-cpp/absl/types/internal/variant.h +3 -3
- data/third_party/abseil-cpp/absl/types/optional.h +17 -14
- data/third_party/abseil-cpp/absl/types/span.h +2 -1
- metadata +39 -15
- data/src/core/lib/slice/slice_split.cc +0 -103
- data/src/core/lib/slice/slice_split.h +0 -36
- data/src/core/lib/transport/byte_stream.cc +0 -165
- data/src/core/lib/transport/byte_stream.h +0 -170
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +0 -140
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +0 -100
- data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -20,6 +20,8 @@ bsd = RUBY_PLATFORM =~ /bsd/
|
|
20
20
|
darwin = RUBY_PLATFORM =~ /darwin/
|
21
21
|
linux = RUBY_PLATFORM =~ /linux/
|
22
22
|
cross_compiling = ENV['RCD_HOST_RUBY_VERSION'] # set by rake-compiler-dock in build containers
|
23
|
+
# TruffleRuby uses the Sulong LLVM runtime, which is different from Apple's.
|
24
|
+
apple_toolchain = darwin && RUBY_ENGINE != 'truffleruby'
|
23
25
|
|
24
26
|
grpc_root = File.expand_path(File.join(File.dirname(__FILE__), '../../../..'))
|
25
27
|
|
@@ -27,30 +29,53 @@ grpc_config = ENV['GRPC_CONFIG'] || 'opt'
|
|
27
29
|
|
28
30
|
ENV['MACOSX_DEPLOYMENT_TARGET'] = '10.10'
|
29
31
|
|
30
|
-
|
31
|
-
|
32
|
+
def env_unset?(name)
|
33
|
+
ENV[name].nil? || ENV[name].size == 0
|
32
34
|
end
|
33
|
-
|
34
|
-
|
35
|
+
|
36
|
+
def rbconfig_set?(name)
|
37
|
+
RbConfig::CONFIG[name] && RbConfig::CONFIG[name].size > 0
|
35
38
|
end
|
36
|
-
|
37
|
-
|
39
|
+
|
40
|
+
def inherit_rbconfig(name)
|
41
|
+
ENV[name] = RbConfig::CONFIG[name] if env_unset?(name) && rbconfig_set?(name)
|
38
42
|
end
|
39
|
-
|
40
|
-
|
43
|
+
|
44
|
+
def env_append(name, string)
|
45
|
+
ENV[name] ||= ''
|
46
|
+
ENV[name] += ' ' + string
|
47
|
+
end
|
48
|
+
|
49
|
+
inherit_rbconfig 'AR'
|
50
|
+
inherit_rbconfig 'CC'
|
51
|
+
inherit_rbconfig 'CXX'
|
52
|
+
inherit_rbconfig 'RANLIB'
|
53
|
+
inherit_rbconfig 'STRIP'
|
54
|
+
inherit_rbconfig 'CPPFLAGS'
|
55
|
+
inherit_rbconfig 'LDFLAGS'
|
56
|
+
|
57
|
+
ENV['LD'] = ENV['CC'] if env_unset?('LD')
|
58
|
+
ENV['LDXX'] = ENV['CXX'] if env_unset?('LDXX')
|
59
|
+
|
60
|
+
if RUBY_ENGINE == 'truffleruby'
|
61
|
+
# ensure we can find the system's OpenSSL
|
62
|
+
env_append 'CPPFLAGS', RbConfig::CONFIG['cppflags']
|
41
63
|
end
|
42
64
|
|
43
|
-
if
|
65
|
+
if apple_toolchain && !cross_compiling
|
44
66
|
ENV['AR'] = 'libtool'
|
45
67
|
ENV['ARFLAGS'] = '-o'
|
46
68
|
end
|
47
69
|
|
48
|
-
|
49
|
-
ENV['
|
70
|
+
# Don't embed on TruffleRuby (constant-time crypto is unsafe with Sulong, slow build times)
|
71
|
+
ENV['EMBED_OPENSSL'] = (RUBY_ENGINE != 'truffleruby').to_s
|
72
|
+
# Don't embed on TruffleRuby (the system zlib is already linked for the zlib C extension, slow build times)
|
73
|
+
ENV['EMBED_ZLIB'] = (RUBY_ENGINE != 'truffleruby').to_s
|
74
|
+
|
50
75
|
ENV['EMBED_CARES'] = 'true'
|
51
76
|
|
52
77
|
ENV['ARCH_FLAGS'] = RbConfig::CONFIG['ARCH_FLAG']
|
53
|
-
if
|
78
|
+
if apple_toolchain && !cross_compiling
|
54
79
|
if RUBY_PLATFORM =~ /arm64/
|
55
80
|
ENV['ARCH_FLAGS'] = '-arch arm64'
|
56
81
|
else
|
@@ -58,9 +83,11 @@ if darwin && !cross_compiling
|
|
58
83
|
end
|
59
84
|
end
|
60
85
|
|
61
|
-
|
62
|
-
|
63
|
-
|
86
|
+
env_append 'CPPFLAGS', '-DGPR_BACKWARDS_COMPATIBILITY_MODE'
|
87
|
+
env_append 'CPPFLAGS', '-DGRPC_XDS_USER_AGENT_NAME_SUFFIX="\"RUBY\""'
|
88
|
+
|
89
|
+
require_relative '../../lib/grpc/version'
|
90
|
+
env_append 'CPPFLAGS', '-DGRPC_XDS_USER_AGENT_VERSION_SUFFIX="\"' + GRPC::VERSION + '\""'
|
64
91
|
|
65
92
|
output_dir = File.expand_path(RbConfig::CONFIG['topdir'])
|
66
93
|
grpc_lib_dir = File.join(output_dir, 'libs', grpc_config)
|
@@ -85,8 +112,9 @@ end
|
|
85
112
|
$CFLAGS << ' -I' + File.join(grpc_root, 'include')
|
86
113
|
|
87
114
|
ext_export_file = File.join(grpc_root, 'src', 'ruby', 'ext', 'grpc', 'ext-export')
|
115
|
+
ext_export_file += '-truffleruby' if RUBY_ENGINE == 'truffleruby'
|
88
116
|
$LDFLAGS << ' -Wl,--version-script="' + ext_export_file + '.gcc"' if linux
|
89
|
-
$LDFLAGS << ' -Wl,-exported_symbols_list,"' + ext_export_file + '.clang"' if
|
117
|
+
$LDFLAGS << ' -Wl,-exported_symbols_list,"' + ext_export_file + '.clang"' if apple_toolchain
|
90
118
|
|
91
119
|
$LDFLAGS << ' ' + File.join(grpc_lib_dir, 'libgrpc.a') unless windows
|
92
120
|
if grpc_config == 'gcov'
|
@@ -99,7 +127,10 @@ if grpc_config == 'dbg'
|
|
99
127
|
end
|
100
128
|
|
101
129
|
$LDFLAGS << ' -Wl,-wrap,memcpy' if linux
|
102
|
-
|
130
|
+
# Do not statically link standard libraries on TruffleRuby as this does not work when compiling to bitcode
|
131
|
+
if linux && RUBY_ENGINE != 'truffleruby'
|
132
|
+
$LDFLAGS << ' -static-libgcc -static-libstdc++'
|
133
|
+
end
|
103
134
|
$LDFLAGS << ' -static' if windows
|
104
135
|
|
105
136
|
$CFLAGS << ' -std=c11 '
|
@@ -112,7 +143,7 @@ puts 'Generating Makefile for ' + output
|
|
112
143
|
create_makefile(output)
|
113
144
|
|
114
145
|
strip_tool = RbConfig::CONFIG['STRIP']
|
115
|
-
strip_tool += ' -x' if
|
146
|
+
strip_tool += ' -x' if apple_toolchain
|
116
147
|
|
117
148
|
if grpc_config == 'opt'
|
118
149
|
File.open('Makefile.new', 'w') do |o|
|
@@ -278,7 +278,7 @@ extern grpc_resource_quota_resize_type grpc_resource_quota_resize_import;
|
|
278
278
|
typedef void(*grpc_resource_quota_set_max_threads_type)(grpc_resource_quota* resource_quota, int new_max_threads);
|
279
279
|
extern grpc_resource_quota_set_max_threads_type grpc_resource_quota_set_max_threads_import;
|
280
280
|
#define grpc_resource_quota_set_max_threads grpc_resource_quota_set_max_threads_import
|
281
|
-
typedef grpc_slice(*grpc_dump_xds_configs_type)();
|
281
|
+
typedef grpc_slice(*grpc_dump_xds_configs_type)(void);
|
282
282
|
extern grpc_dump_xds_configs_type grpc_dump_xds_configs_import;
|
283
283
|
#define grpc_dump_xds_configs grpc_dump_xds_configs_import
|
284
284
|
typedef const grpc_arg_pointer_vtable*(*grpc_resource_quota_arg_vtable_type)(void);
|
data/src/ruby/lib/grpc/errors.rb
CHANGED
@@ -43,7 +43,7 @@ module GRPC
|
|
43
43
|
debug_error_string = nil)
|
44
44
|
exception_message = "#{code}:#{details}"
|
45
45
|
if debug_error_string
|
46
|
-
exception_message += ". debug_error_string
|
46
|
+
exception_message += ". debug_error_string:{#{debug_error_string}}"
|
47
47
|
end
|
48
48
|
super(exception_message)
|
49
49
|
@code = code
|
@@ -498,31 +498,10 @@ describe 'ClientStub' do # rubocop:disable Metrics/BlockLength
|
|
498
498
|
/Header values must be of type string or array/)
|
499
499
|
end
|
500
500
|
|
501
|
-
def run_server_streamer_against_client_with_unmarshal_error(
|
502
|
-
expected_input, replys)
|
503
|
-
wakey_thread do |notifier|
|
504
|
-
c = expect_server_to_be_invoked(notifier)
|
505
|
-
expect(c.remote_read).to eq(expected_input)
|
506
|
-
begin
|
507
|
-
replys.each { |r| c.remote_send(r) }
|
508
|
-
rescue GRPC::Core::CallError
|
509
|
-
# An attempt to write to the client might fail. This is ok
|
510
|
-
# because the client call is expected to fail when
|
511
|
-
# unmarshalling the first response, and to cancel the call,
|
512
|
-
# and there is a race as for when the server-side call will
|
513
|
-
# start to fail.
|
514
|
-
p 'remote_send failed (allowed because call expected to cancel)'
|
515
|
-
ensure
|
516
|
-
c.send_status(OK, 'OK', true)
|
517
|
-
close_active_server_call(c)
|
518
|
-
end
|
519
|
-
end
|
520
|
-
end
|
521
|
-
|
522
501
|
it 'the call terminates when there is an unmarshalling error' do
|
523
502
|
server_port = create_test_server
|
524
503
|
host = "localhost:#{server_port}"
|
525
|
-
th =
|
504
|
+
th = run_server_streamer_handle_client_cancellation(
|
526
505
|
@sent_msg, @replys)
|
527
506
|
stub = GRPC::ClientStub.new(host, :this_channel_is_insecure)
|
528
507
|
|
@@ -597,7 +576,8 @@ describe 'ClientStub' do # rubocop:disable Metrics/BlockLength
|
|
597
576
|
it 'raises GRPC::Cancelled after the call has been cancelled' do
|
598
577
|
server_port = create_test_server
|
599
578
|
host = "localhost:#{server_port}"
|
600
|
-
th =
|
579
|
+
th = run_server_streamer_handle_client_cancellation(
|
580
|
+
@sent_msg, @replys)
|
601
581
|
stub = GRPC::ClientStub.new(host, :this_channel_is_insecure)
|
602
582
|
resp = get_responses(stub, run_start_call_first: false)
|
603
583
|
expect(resp.next).to eq('reply_1')
|
@@ -1037,6 +1017,26 @@ describe 'ClientStub' do # rubocop:disable Metrics/BlockLength
|
|
1037
1017
|
end
|
1038
1018
|
end
|
1039
1019
|
|
1020
|
+
def run_server_streamer_handle_client_cancellation(
|
1021
|
+
expected_input, replys)
|
1022
|
+
wakey_thread do |notifier|
|
1023
|
+
c = expect_server_to_be_invoked(notifier)
|
1024
|
+
expect(c.remote_read).to eq(expected_input)
|
1025
|
+
begin
|
1026
|
+
replys.each { |r| c.remote_send(r) }
|
1027
|
+
rescue GRPC::Core::CallError
|
1028
|
+
# An attempt to write to the client might fail. This is ok
|
1029
|
+
# because the client call is expected to cancel the call,
|
1030
|
+
# and there is a race as for when the server-side call will
|
1031
|
+
# start to fail.
|
1032
|
+
p 'remote_send failed (allowed because call expected to cancel)'
|
1033
|
+
ensure
|
1034
|
+
c.send_status(OK, 'OK', true)
|
1035
|
+
close_active_server_call(c)
|
1036
|
+
end
|
1037
|
+
end
|
1038
|
+
end
|
1039
|
+
|
1040
1040
|
def run_request_response(expected_input, resp, status,
|
1041
1041
|
expected_metadata: {},
|
1042
1042
|
server_initial_md: {},
|
@@ -166,7 +166,7 @@ container_algorithm_internal::ContainerDifferenceType<const C> c_distance(
|
|
166
166
|
// c_all_of()
|
167
167
|
//
|
168
168
|
// Container-based version of the <algorithm> `std::all_of()` function to
|
169
|
-
// test
|
169
|
+
// test if all elements within a container satisfy a condition.
|
170
170
|
template <typename C, typename Pred>
|
171
171
|
bool c_all_of(const C& c, Pred&& pred) {
|
172
172
|
return std::all_of(container_algorithm_internal::c_begin(c),
|
@@ -136,9 +136,10 @@
|
|
136
136
|
// for further information.
|
137
137
|
// The MinGW compiler doesn't complain about the weak attribute until the link
|
138
138
|
// step, presumably because Windows doesn't use ELF binaries.
|
139
|
-
#if (ABSL_HAVE_ATTRIBUTE(weak) ||
|
140
|
-
(defined(__GNUC__) && !defined(__clang__))) &&
|
141
|
-
(!defined(_WIN32) || __clang_major__
|
139
|
+
#if (ABSL_HAVE_ATTRIBUTE(weak) || \
|
140
|
+
(defined(__GNUC__) && !defined(__clang__))) && \
|
141
|
+
(!defined(_WIN32) || (defined(__clang__) && __clang_major__ >= 9)) && \
|
142
|
+
!defined(__MINGW32__)
|
142
143
|
#undef ABSL_ATTRIBUTE_WEAK
|
143
144
|
#define ABSL_ATTRIBUTE_WEAK __attribute__((weak))
|
144
145
|
#define ABSL_HAVE_ATTRIBUTE_WEAK 1
|
@@ -212,6 +213,9 @@
|
|
212
213
|
// https://gcc.gnu.org/gcc-4.8/changes.html
|
213
214
|
#if ABSL_HAVE_ATTRIBUTE(no_sanitize_address)
|
214
215
|
#define ABSL_ATTRIBUTE_NO_SANITIZE_ADDRESS __attribute__((no_sanitize_address))
|
216
|
+
#elif defined(_MSC_VER) && _MSC_VER >= 1928
|
217
|
+
// https://docs.microsoft.com/en-us/cpp/cpp/no-sanitize-address
|
218
|
+
#define ABSL_ATTRIBUTE_NO_SANITIZE_ADDRESS __declspec(no_sanitize_address)
|
215
219
|
#else
|
216
220
|
#define ABSL_ATTRIBUTE_NO_SANITIZE_ADDRESS
|
217
221
|
#endif
|
@@ -311,7 +315,6 @@
|
|
311
315
|
__attribute__((section(#name))) __attribute__((noinline))
|
312
316
|
#endif
|
313
317
|
|
314
|
-
|
315
318
|
// ABSL_ATTRIBUTE_SECTION_VARIABLE
|
316
319
|
//
|
317
320
|
// Tells the compiler/linker to put a given variable into a section and define
|
@@ -338,8 +341,8 @@
|
|
338
341
|
// a no-op on ELF but not on Mach-O.
|
339
342
|
//
|
340
343
|
#ifndef ABSL_DECLARE_ATTRIBUTE_SECTION_VARS
|
341
|
-
#define ABSL_DECLARE_ATTRIBUTE_SECTION_VARS(name)
|
342
|
-
extern char __start_##name[] ABSL_ATTRIBUTE_WEAK;
|
344
|
+
#define ABSL_DECLARE_ATTRIBUTE_SECTION_VARS(name) \
|
345
|
+
extern char __start_##name[] ABSL_ATTRIBUTE_WEAK; \
|
343
346
|
extern char __stop_##name[] ABSL_ATTRIBUTE_WEAK
|
344
347
|
#endif
|
345
348
|
#ifndef ABSL_DEFINE_ATTRIBUTE_SECTION_VARS
|
@@ -400,6 +403,9 @@
|
|
400
403
|
//
|
401
404
|
// Tells the compiler to warn about unused results.
|
402
405
|
//
|
406
|
+
// For code or headers that are assured to only build with C++17 and up, prefer
|
407
|
+
// just using the standard `[[nodiscard]]` directly over this macro.
|
408
|
+
//
|
403
409
|
// When annotating a function, it must appear as the first part of the
|
404
410
|
// declaration or definition. The compiler will warn if the return value from
|
405
411
|
// such a function is unused:
|
@@ -426,9 +432,10 @@
|
|
426
432
|
// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66425
|
427
433
|
//
|
428
434
|
// Note: past advice was to place the macro after the argument list.
|
429
|
-
|
430
|
-
|
431
|
-
|
435
|
+
//
|
436
|
+
// TODO(b/176172494): Use ABSL_HAVE_CPP_ATTRIBUTE(nodiscard) when all code is
|
437
|
+
// compliant with the stricter [[nodiscard]].
|
438
|
+
#if defined(__clang__) && ABSL_HAVE_ATTRIBUTE(warn_unused_result)
|
432
439
|
#define ABSL_MUST_USE_RESULT __attribute__((warn_unused_result))
|
433
440
|
#else
|
434
441
|
#define ABSL_MUST_USE_RESULT
|
@@ -498,7 +505,7 @@
|
|
498
505
|
#define ABSL_XRAY_NEVER_INSTRUMENT [[clang::xray_never_instrument]]
|
499
506
|
#if ABSL_HAVE_CPP_ATTRIBUTE(clang::xray_log_args)
|
500
507
|
#define ABSL_XRAY_LOG_ARGS(N) \
|
501
|
-
|
508
|
+
[[clang::xray_always_instrument, clang::xray_log_args(N)]]
|
502
509
|
#else
|
503
510
|
#define ABSL_XRAY_LOG_ARGS(N) [[clang::xray_always_instrument]]
|
504
511
|
#endif
|
@@ -642,6 +649,9 @@
|
|
642
649
|
// declarations. The macro argument is used as a custom diagnostic message (e.g.
|
643
650
|
// suggestion of a better alternative).
|
644
651
|
//
|
652
|
+
// For code or headers that are assured to only build with C++14 and up, prefer
|
653
|
+
// just using the standard `[[deprecated("message")]]` directly over this macro.
|
654
|
+
//
|
645
655
|
// Examples:
|
646
656
|
//
|
647
657
|
// class ABSL_DEPRECATED("Use Bar instead") Foo {...};
|
@@ -652,14 +662,17 @@
|
|
652
662
|
// ABSL_DEPRECATED("Use DoThat() instead")
|
653
663
|
// void DoThis();
|
654
664
|
//
|
665
|
+
// enum FooEnum {
|
666
|
+
// kBar ABSL_DEPRECATED("Use kBaz instead"),
|
667
|
+
// };
|
668
|
+
//
|
655
669
|
// Every usage of a deprecated entity will trigger a warning when compiled with
|
656
|
-
//
|
657
|
-
//
|
658
|
-
|
670
|
+
// GCC/Clang's `-Wdeprecated-declarations` option. Google's production toolchain
|
671
|
+
// turns this warning off by default, instead relying on clang-tidy to report
|
672
|
+
// new uses of deprecated code.
|
673
|
+
#if ABSL_HAVE_ATTRIBUTE(deprecated)
|
659
674
|
#define ABSL_DEPRECATED(message) __attribute__((deprecated(message)))
|
660
|
-
#
|
661
|
-
|
662
|
-
#ifndef ABSL_DEPRECATED
|
675
|
+
#else
|
663
676
|
#define ABSL_DEPRECATED(message)
|
664
677
|
#endif
|
665
678
|
|
@@ -669,9 +682,18 @@
|
|
669
682
|
// not compile (on supported platforms) unless the variable has a constant
|
670
683
|
// initializer. This is useful for variables with static and thread storage
|
671
684
|
// duration, because it guarantees that they will not suffer from the so-called
|
672
|
-
// "static init order fiasco".
|
673
|
-
//
|
674
|
-
//
|
685
|
+
// "static init order fiasco".
|
686
|
+
//
|
687
|
+
// This attribute must be placed on the initializing declaration of the
|
688
|
+
// variable. Some compilers will give a -Wmissing-constinit warning when this
|
689
|
+
// attribute is placed on some other declaration but missing from the
|
690
|
+
// initializing declaration.
|
691
|
+
//
|
692
|
+
// In some cases (notably with thread_local variables), `ABSL_CONST_INIT` can
|
693
|
+
// also be used in a non-initializing declaration to tell the compiler that a
|
694
|
+
// variable is already initialized, reducing overhead that would otherwise be
|
695
|
+
// incurred by a hidden guard variable. Thus annotating all declarations with
|
696
|
+
// this attribute is recommended to potentially enhance optimization.
|
675
697
|
//
|
676
698
|
// Example:
|
677
699
|
//
|
@@ -680,14 +702,19 @@
|
|
680
702
|
// ABSL_CONST_INIT static MyType my_var;
|
681
703
|
// };
|
682
704
|
//
|
683
|
-
// MyType MyClass::my_var = MakeMyType(...);
|
705
|
+
// ABSL_CONST_INIT MyType MyClass::my_var = MakeMyType(...);
|
706
|
+
//
|
707
|
+
// For code or headers that are assured to only build with C++20 and up, prefer
|
708
|
+
// just using the standard `constinit` keyword directly over this macro.
|
684
709
|
//
|
685
710
|
// Note that this attribute is redundant if the variable is declared constexpr.
|
686
|
-
#if
|
711
|
+
#if defined(__cpp_constinit) && __cpp_constinit >= 201907L
|
712
|
+
#define ABSL_CONST_INIT constinit
|
713
|
+
#elif ABSL_HAVE_CPP_ATTRIBUTE(clang::require_constant_initialization)
|
687
714
|
#define ABSL_CONST_INIT [[clang::require_constant_initialization]]
|
688
715
|
#else
|
689
716
|
#define ABSL_CONST_INIT
|
690
|
-
#endif
|
717
|
+
#endif
|
691
718
|
|
692
719
|
// ABSL_ATTRIBUTE_PURE_FUNCTION
|
693
720
|
//
|
@@ -29,6 +29,10 @@
|
|
29
29
|
#include <type_traits>
|
30
30
|
#include <utility>
|
31
31
|
|
32
|
+
#if defined(__cpp_lib_bit_cast) && __cpp_lib_bit_cast >= 201806L
|
33
|
+
#include <bit> // For std::bit_cast.
|
34
|
+
#endif // defined(__cpp_lib_bit_cast) && __cpp_lib_bit_cast >= 201806L
|
35
|
+
|
32
36
|
#include "absl/base/internal/identity.h"
|
33
37
|
#include "absl/base/macros.h"
|
34
38
|
#include "absl/meta/type_traits.h"
|
@@ -36,19 +40,6 @@
|
|
36
40
|
namespace absl {
|
37
41
|
ABSL_NAMESPACE_BEGIN
|
38
42
|
|
39
|
-
namespace internal_casts {
|
40
|
-
|
41
|
-
template <class Dest, class Source>
|
42
|
-
struct is_bitcastable
|
43
|
-
: std::integral_constant<
|
44
|
-
bool,
|
45
|
-
sizeof(Dest) == sizeof(Source) &&
|
46
|
-
type_traits_internal::is_trivially_copyable<Source>::value &&
|
47
|
-
type_traits_internal::is_trivially_copyable<Dest>::value &&
|
48
|
-
std::is_default_constructible<Dest>::value> {};
|
49
|
-
|
50
|
-
} // namespace internal_casts
|
51
|
-
|
52
43
|
// implicit_cast()
|
53
44
|
//
|
54
45
|
// Performs an implicit conversion between types following the language
|
@@ -105,81 +96,83 @@ constexpr To implicit_cast(typename absl::internal::identity_t<To> to) {
|
|
105
96
|
|
106
97
|
// bit_cast()
|
107
98
|
//
|
108
|
-
//
|
109
|
-
//
|
110
|
-
//
|
111
|
-
//
|
112
|
-
//
|
99
|
+
// Creates a value of the new type `Dest` whose representation is the same as
|
100
|
+
// that of the argument, which is of (deduced) type `Source` (a "bitwise cast";
|
101
|
+
// every bit in the value representation of the result is equal to the
|
102
|
+
// corresponding bit in the object representation of the source). Source and
|
103
|
+
// destination types must be of the same size, and both types must be trivially
|
104
|
+
// copyable.
|
113
105
|
//
|
114
|
-
//
|
115
|
-
//
|
116
|
-
//
|
117
|
-
//
|
118
|
-
//
|
119
|
-
// allowed by `reinterpret_cast()` but round-trips cannot occur the other
|
120
|
-
// way).
|
121
|
-
//
|
122
|
-
// Example:
|
106
|
+
// As with most casts, use with caution. A `bit_cast()` might be needed when you
|
107
|
+
// need to treat a value as the value of some other type, for example, to access
|
108
|
+
// the individual bits of an object which are not normally accessible through
|
109
|
+
// the object's type, such as for working with the binary representation of a
|
110
|
+
// floating point value:
|
123
111
|
//
|
124
112
|
// float f = 3.14159265358979;
|
125
|
-
// int i = bit_cast<
|
113
|
+
// int i = bit_cast<int>(f);
|
126
114
|
// // i = 0x40490fdb
|
127
115
|
//
|
128
|
-
//
|
129
|
-
//
|
116
|
+
// Reinterpreting and accessing a value directly as a different type (as shown
|
117
|
+
// below) usually results in undefined behavior.
|
130
118
|
//
|
131
119
|
// Example:
|
132
120
|
//
|
133
121
|
// // WRONG
|
134
|
-
// float f = 3.14159265358979;
|
135
|
-
// int i =
|
122
|
+
// float f = 3.14159265358979;
|
123
|
+
// int i = reinterpret_cast<int&>(f); // Wrong
|
124
|
+
// int j = *reinterpret_cast<int*>(&f); // Equally wrong
|
125
|
+
// int k = *bit_cast<int*>(&f); // Equally wrong
|
136
126
|
//
|
137
|
-
//
|
138
|
-
//
|
139
|
-
//
|
140
|
-
//
|
127
|
+
// Reinterpret-casting results in undefined behavior according to the ISO C++
|
128
|
+
// specification, section [basic.lval]. Roughly, this section says: if an object
|
129
|
+
// in memory has one type, and a program accesses it with a different type, the
|
130
|
+
// result is undefined behavior for most "different type".
|
131
|
+
//
|
132
|
+
// Using bit_cast on a pointer and then dereferencing it is no better than using
|
133
|
+
// reinterpret_cast. You should only use bit_cast on the value itself.
|
141
134
|
//
|
142
135
|
// Such casting results in type punning: holding an object in memory of one type
|
143
136
|
// and reading its bits back using a different type. A `bit_cast()` avoids this
|
144
|
-
// issue by
|
145
|
-
// this undefined behavior
|
146
|
-
//
|
147
|
-
//
|
148
|
-
//
|
149
|
-
//
|
150
|
-
//
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
137
|
+
// issue by copying the object representation to a new value, which avoids
|
138
|
+
// introducing this undefined behavior (since the original value is never
|
139
|
+
// accessed in the wrong way).
|
140
|
+
//
|
141
|
+
// The requirements of `absl::bit_cast` are more strict than that of
|
142
|
+
// `std::bit_cast` unless compiler support is available. Specifically, without
|
143
|
+
// compiler support, this implementation also requires `Dest` to be
|
144
|
+
// default-constructible. In C++20, `absl::bit_cast` is replaced by
|
145
|
+
// `std::bit_cast`.
|
146
|
+
#if defined(__cpp_lib_bit_cast) && __cpp_lib_bit_cast >= 201806L
|
147
|
+
|
148
|
+
using std::bit_cast;
|
149
|
+
|
150
|
+
#else // defined(__cpp_lib_bit_cast) && __cpp_lib_bit_cast >= 201806L
|
151
|
+
|
152
|
+
template <typename Dest, typename Source,
|
153
|
+
typename std::enable_if<
|
154
|
+
sizeof(Dest) == sizeof(Source) &&
|
155
|
+
type_traits_internal::is_trivially_copyable<Source>::value &&
|
156
|
+
type_traits_internal::is_trivially_copyable<Dest>::value
|
157
|
+
#if !ABSL_HAVE_BUILTIN(__builtin_bit_cast)
|
158
|
+
&& std::is_default_constructible<Dest>::value
|
159
|
+
#endif // !ABSL_HAVE_BUILTIN(__builtin_bit_cast)
|
160
|
+
,
|
161
|
+
int>::type = 0>
|
162
|
+
#if ABSL_HAVE_BUILTIN(__builtin_bit_cast)
|
163
|
+
inline constexpr Dest bit_cast(const Source& source) {
|
164
|
+
return __builtin_bit_cast(Dest, source);
|
165
|
+
}
|
166
|
+
#else // ABSL_HAVE_BUILTIN(__builtin_bit_cast)
|
155
167
|
inline Dest bit_cast(const Source& source) {
|
156
168
|
Dest dest;
|
157
169
|
memcpy(static_cast<void*>(std::addressof(dest)),
|
158
170
|
static_cast<const void*>(std::addressof(source)), sizeof(dest));
|
159
171
|
return dest;
|
160
172
|
}
|
173
|
+
#endif // ABSL_HAVE_BUILTIN(__builtin_bit_cast)
|
161
174
|
|
162
|
-
//
|
163
|
-
// not met. It is therefore UB, but is provided temporarily as previous
|
164
|
-
// versions of this function template were unchecked. Do not use this in
|
165
|
-
// new code.
|
166
|
-
template <
|
167
|
-
typename Dest, typename Source,
|
168
|
-
typename std::enable_if<
|
169
|
-
!internal_casts::is_bitcastable<Dest, Source>::value,
|
170
|
-
int>::type = 0>
|
171
|
-
ABSL_DEPRECATED(
|
172
|
-
"absl::bit_cast type requirements were violated. Update the types "
|
173
|
-
"being used such that they are the same size and are both "
|
174
|
-
"TriviallyCopyable.")
|
175
|
-
inline Dest bit_cast(const Source& source) {
|
176
|
-
static_assert(sizeof(Dest) == sizeof(Source),
|
177
|
-
"Source and destination types should have equal sizes.");
|
178
|
-
|
179
|
-
Dest dest;
|
180
|
-
memcpy(&dest, &source, sizeof(dest));
|
181
|
-
return dest;
|
182
|
-
}
|
175
|
+
#endif // defined(__cpp_lib_bit_cast) && __cpp_lib_bit_cast >= 201806L
|
183
176
|
|
184
177
|
ABSL_NAMESPACE_END
|
185
178
|
} // namespace absl
|