grpc 1.46.2 → 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.

Files changed (810) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +138 -128
  3. data/include/grpc/compression.h +1 -1
  4. data/include/grpc/event_engine/event_engine.h +62 -18
  5. data/include/grpc/event_engine/memory_allocator.h +0 -15
  6. data/include/grpc/event_engine/port.h +1 -1
  7. data/include/grpc/event_engine/slice.h +286 -0
  8. data/include/grpc/event_engine/slice_buffer.h +118 -0
  9. data/include/grpc/grpc.h +3 -3
  10. data/include/grpc/grpc_security.h +11 -0
  11. data/include/grpc/impl/codegen/compression_types.h +2 -1
  12. data/include/grpc/impl/codegen/connectivity_state.h +2 -1
  13. data/include/grpc/impl/codegen/gpr_types.h +2 -1
  14. data/include/grpc/impl/codegen/grpc_types.h +2 -1
  15. data/include/grpc/impl/codegen/port_platform.h +106 -39
  16. data/include/grpc/impl/codegen/slice.h +1 -1
  17. data/src/core/ext/filters/census/grpc_context.cc +3 -0
  18. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +35 -35
  19. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +20 -1
  20. data/src/core/ext/filters/channel_idle/idle_filter_state.h +2 -0
  21. data/src/core/ext/filters/client_channel/backend_metric.cc +17 -12
  22. data/src/core/ext/filters/client_channel/backend_metric.h +19 -9
  23. data/src/core/ext/filters/client_channel/backup_poller.cc +8 -6
  24. data/src/core/ext/filters/client_channel/backup_poller.h +2 -4
  25. data/src/core/ext/filters/client_channel/channel_connectivity.cc +43 -21
  26. data/src/core/ext/filters/client_channel/client_channel.cc +111 -82
  27. data/src/core/ext/filters/client_channel/client_channel.h +43 -8
  28. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +3 -5
  29. data/src/core/ext/filters/client_channel/client_channel_channelz.h +12 -2
  30. data/src/core/ext/filters/client_channel/client_channel_factory.cc +5 -0
  31. data/src/core/ext/filters/client_channel/client_channel_factory.h +8 -0
  32. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -13
  33. data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
  34. data/src/core/ext/filters/client_channel/config_selector.h +8 -6
  35. data/src/core/ext/filters/client_channel/connector.h +9 -3
  36. data/src/core/ext/filters/client_channel/dynamic_filters.cc +19 -6
  37. data/src/core/ext/filters/client_channel/dynamic_filters.h +12 -2
  38. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +2 -0
  39. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +3 -0
  40. data/src/core/ext/filters/client_channel/health/health_check_client.cc +14 -1
  41. data/src/core/ext/filters/client_channel/health/health_check_client.h +2 -0
  42. data/src/core/ext/filters/client_channel/http_proxy.cc +10 -2
  43. data/src/core/ext/filters/client_channel/http_proxy.h +3 -0
  44. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +6 -2
  45. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +1 -0
  46. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +49 -0
  47. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +12 -0
  48. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +5 -0
  49. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +11 -5
  50. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +1 -0
  51. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +132 -62
  52. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +4 -0
  53. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +6 -0
  54. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +10 -1
  55. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +6 -3
  56. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +407 -0
  57. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +57 -0
  58. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1036 -0
  59. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +54 -0
  60. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +149 -147
  61. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +176 -85
  62. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +303 -203
  63. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +6 -1
  64. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +92 -54
  65. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +240 -214
  66. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +119 -111
  67. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +86 -71
  68. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +101 -25
  69. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +6 -0
  70. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +35 -11
  71. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +36 -20
  72. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +78 -14
  73. data/src/core/ext/filters/client_channel/lb_policy.cc +4 -2
  74. data/src/core/ext/filters/client_channel/lb_policy.h +18 -31
  75. data/src/core/ext/filters/client_channel/lb_policy_factory.h +2 -0
  76. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +11 -6
  77. data/src/core/ext/filters/client_channel/lb_policy_registry.h +6 -1
  78. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +4 -0
  79. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +1 -0
  80. data/src/core/ext/filters/client_channel/proxy_mapper.h +1 -1
  81. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +1 -0
  82. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +5 -0
  83. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +26 -6
  84. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +139 -48
  85. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -1
  86. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +10 -8
  87. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +6 -6
  88. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +36 -14
  89. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +13 -4
  90. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +2 -1
  91. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +2 -0
  92. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +2 -1
  93. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +39 -7
  94. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +18 -19
  95. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +5 -2
  96. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +61 -16
  97. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +14 -2
  98. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +8 -1
  99. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +17 -12
  100. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +111 -46
  101. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +3 -1
  102. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +12 -18
  103. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +11 -5
  104. data/src/core/ext/filters/client_channel/retry_filter.cc +75 -36
  105. data/src/core/ext/filters/client_channel/retry_filter.h +1 -0
  106. data/src/core/ext/filters/client_channel/retry_service_config.cc +12 -13
  107. data/src/core/ext/filters/client_channel/retry_service_config.h +10 -1
  108. data/src/core/ext/filters/client_channel/retry_throttle.cc +1 -8
  109. data/src/core/ext/filters/client_channel/retry_throttle.h +7 -1
  110. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +24 -6
  111. data/src/core/ext/filters/client_channel/subchannel.cc +186 -187
  112. data/src/core/ext/filters/client_channel/subchannel.h +80 -36
  113. data/src/core/ext/filters/client_channel/subchannel_interface.h +51 -41
  114. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +38 -0
  115. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +12 -2
  116. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +6 -3
  117. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +24 -95
  118. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +17 -9
  119. data/src/core/ext/filters/deadline/deadline_filter.cc +18 -9
  120. data/src/core/ext/filters/deadline/deadline_filter.h +8 -1
  121. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +22 -6
  122. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +8 -3
  123. data/src/core/ext/filters/fault_injection/service_config_parser.cc +7 -4
  124. data/src/core/ext/filters/fault_injection/service_config_parser.h +17 -3
  125. data/src/core/ext/filters/http/client/http_client_filter.cc +30 -10
  126. data/src/core/ext/filters/http/client/http_client_filter.h +15 -2
  127. data/src/core/ext/filters/http/client_authority_filter.cc +16 -20
  128. data/src/core/ext/filters/http/client_authority_filter.h +5 -2
  129. data/src/core/ext/filters/http/http_filters_plugin.cc +16 -9
  130. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +65 -187
  131. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +1 -2
  132. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +45 -107
  133. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +1 -0
  134. data/src/core/ext/filters/http/server/http_server_filter.cc +95 -255
  135. data/src/core/ext/filters/http/server/http_server_filter.h +37 -3
  136. data/src/core/ext/filters/message_size/message_size_filter.cc +45 -41
  137. data/src/core/ext/filters/message_size/message_size_filter.h +15 -2
  138. data/src/core/ext/filters/rbac/rbac_filter.cc +15 -3
  139. data/src/core/ext/filters/rbac/rbac_filter.h +8 -0
  140. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +13 -2
  141. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +14 -2
  142. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +1 -0
  143. data/src/core/ext/filters/server_config_selector/server_config_selector.h +9 -0
  144. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +22 -2
  145. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +1 -0
  146. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +104 -138
  147. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +9 -7
  148. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +58 -29
  149. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -0
  150. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +3 -3
  151. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -1
  152. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +1 -0
  153. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +260 -491
  154. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +6 -1
  155. data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -0
  156. data/src/core/ext/transport/chttp2/transport/context_list.h +4 -1
  157. data/src/core/ext/transport/chttp2/transport/flow_control.cc +145 -261
  158. data/src/core/ext/transport/chttp2/transport/flow_control.h +179 -288
  159. data/src/core/ext/transport/chttp2/transport/frame.h +0 -4
  160. data/src/core/ext/transport/chttp2/transport/frame_data.cc +59 -211
  161. data/src/core/ext/transport/chttp2/transport/frame_data.h +13 -36
  162. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +3 -0
  163. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -1
  164. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -0
  165. data/src/core/ext/transport/chttp2/transport/frame_ping.h +3 -0
  166. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +6 -2
  167. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +3 -0
  168. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +10 -42
  169. data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -0
  170. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +10 -12
  171. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +3 -0
  172. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +14 -12
  173. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +15 -2
  174. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +3 -0
  175. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +3 -0
  176. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +32 -13
  177. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +8 -1
  178. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +53 -37
  179. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +38 -21
  180. data/src/core/ext/transport/chttp2/transport/http2_settings.h +0 -1
  181. data/src/core/ext/transport/chttp2/transport/internal.h +31 -112
  182. data/src/core/ext/transport/chttp2/transport/parsing.cc +77 -43
  183. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +11 -11
  184. data/src/core/ext/transport/chttp2/transport/stream_map.cc +1 -1
  185. data/src/core/ext/transport/chttp2/transport/stream_map.h +1 -0
  186. data/src/core/ext/transport/chttp2/transport/varint.h +2 -0
  187. data/src/core/ext/transport/chttp2/transport/writing.cc +54 -21
  188. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -1
  189. data/src/core/ext/transport/inproc/inproc_transport.cc +93 -86
  190. data/src/core/ext/transport/inproc/inproc_transport.h +3 -1
  191. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +52 -0
  192. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +164 -0
  193. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
  194. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +94 -0
  195. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +47 -0
  196. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +109 -0
  197. data/src/core/ext/xds/certificate_provider_factory.h +6 -1
  198. data/src/core/ext/xds/certificate_provider_registry.cc +8 -8
  199. data/src/core/ext/xds/certificate_provider_registry.h +3 -1
  200. data/src/core/ext/xds/certificate_provider_store.cc +6 -2
  201. data/src/core/ext/xds/certificate_provider_store.h +10 -1
  202. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +9 -0
  203. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +8 -0
  204. data/src/core/ext/xds/upb_utils.h +1 -2
  205. data/src/core/ext/xds/xds_api.cc +16 -18
  206. data/src/core/ext/xds/xds_api.h +12 -5
  207. data/src/core/ext/xds/xds_bootstrap.cc +39 -26
  208. data/src/core/ext/xds/xds_bootstrap.h +11 -11
  209. data/src/core/ext/xds/xds_certificate_provider.cc +16 -4
  210. data/src/core/ext/xds/xds_certificate_provider.h +17 -2
  211. data/src/core/ext/xds/xds_channel_stack_modifier.cc +14 -5
  212. data/src/core/ext/xds/xds_channel_stack_modifier.h +5 -1
  213. data/src/core/ext/xds/xds_client.cc +121 -46
  214. data/src/core/ext/xds/xds_client.h +19 -4
  215. data/src/core/ext/xds/xds_client_stats.cc +3 -4
  216. data/src/core/ext/xds/xds_client_stats.h +4 -3
  217. data/src/core/ext/xds/xds_cluster.cc +126 -25
  218. data/src/core/ext/xds/xds_cluster.h +12 -1
  219. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +16 -7
  220. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +1 -8
  221. data/src/core/ext/xds/xds_common_types.cc +36 -22
  222. data/src/core/ext/xds/xds_common_types.h +12 -4
  223. data/src/core/ext/xds/xds_endpoint.cc +25 -15
  224. data/src/core/ext/xds/xds_endpoint.h +13 -5
  225. data/src/core/ext/xds/xds_http_fault_filter.cc +10 -8
  226. data/src/core/ext/xds/xds_http_fault_filter.h +3 -1
  227. data/src/core/ext/xds/xds_http_filters.cc +7 -0
  228. data/src/core/ext/xds/xds_http_filters.h +3 -3
  229. data/src/core/ext/xds/xds_http_rbac_filter.cc +16 -0
  230. data/src/core/ext/xds/xds_http_rbac_filter.h +7 -0
  231. data/src/core/ext/xds/xds_lb_policy_registry.cc +291 -0
  232. data/src/core/ext/xds/xds_lb_policy_registry.h +72 -0
  233. data/src/core/ext/xds/xds_listener.cc +70 -42
  234. data/src/core/ext/xds/xds_listener.h +10 -1
  235. data/src/core/ext/xds/xds_resource_type.h +3 -3
  236. data/src/core/ext/xds/xds_resource_type_impl.h +7 -3
  237. data/src/core/ext/xds/xds_route_config.cc +56 -28
  238. data/src/core/ext/xds/xds_route_config.h +11 -2
  239. data/src/core/ext/xds/xds_routing.cc +16 -0
  240. data/src/core/ext/xds/xds_routing.h +7 -2
  241. data/src/core/ext/xds/xds_server_config_fetcher.cc +56 -7
  242. data/src/core/lib/address_utils/parse_address.cc +5 -8
  243. data/src/core/lib/address_utils/parse_address.h +3 -2
  244. data/src/core/lib/address_utils/sockaddr_utils.cc +60 -26
  245. data/src/core/lib/address_utils/sockaddr_utils.h +9 -4
  246. data/src/core/lib/avl/avl.h +6 -4
  247. data/src/core/lib/backoff/backoff.cc +1 -1
  248. data/src/core/lib/backoff/backoff.h +1 -1
  249. data/src/core/lib/channel/call_finalization.h +4 -0
  250. data/src/core/lib/channel/call_tracer.h +11 -5
  251. data/src/core/lib/channel/channel_args.cc +41 -22
  252. data/src/core/lib/channel/channel_args.h +34 -3
  253. data/src/core/lib/channel/channel_args_preconditioning.cc +4 -3
  254. data/src/core/lib/channel/channel_args_preconditioning.h +3 -2
  255. data/src/core/lib/channel/channel_fwd.h +26 -0
  256. data/src/core/lib/channel/channel_stack.cc +45 -7
  257. data/src/core/lib/channel/channel_stack.h +45 -9
  258. data/src/core/lib/channel/channel_stack_builder.cc +9 -19
  259. data/src/core/lib/channel/channel_stack_builder.h +17 -32
  260. data/src/core/lib/channel/channel_stack_builder_impl.cc +38 -43
  261. data/src/core/lib/channel/channel_stack_builder_impl.h +4 -6
  262. data/src/core/lib/channel/channel_trace.cc +8 -13
  263. data/src/core/lib/channel/channel_trace.h +6 -3
  264. data/src/core/lib/channel/channelz.cc +10 -14
  265. data/src/core/lib/channel/channelz.h +15 -7
  266. data/src/core/lib/channel/channelz_registry.cc +11 -19
  267. data/src/core/lib/channel/channelz_registry.h +10 -9
  268. data/src/core/lib/channel/connected_channel.cc +22 -31
  269. data/src/core/lib/channel/connected_channel.h +2 -0
  270. data/src/core/lib/channel/promise_based_filter.cc +451 -190
  271. data/src/core/lib/channel/promise_based_filter.h +162 -27
  272. data/src/core/lib/channel/status_util.cc +2 -0
  273. data/src/core/lib/channel/status_util.h +0 -3
  274. data/src/core/lib/compression/compression.cc +6 -1
  275. data/src/core/lib/compression/compression_internal.cc +48 -16
  276. data/src/core/lib/compression/compression_internal.h +4 -3
  277. data/src/core/lib/compression/message_compress.cc +3 -1
  278. data/src/core/lib/compression/message_compress.h +2 -3
  279. data/src/core/lib/config/core_configuration.cc +3 -0
  280. data/src/core/lib/config/core_configuration.h +2 -1
  281. data/src/core/lib/debug/stats.cc +9 -9
  282. data/src/core/lib/debug/stats.h +2 -1
  283. data/src/core/lib/debug/stats_data.cc +2 -1
  284. data/src/core/lib/debug/stats_data.h +0 -4
  285. data/src/core/lib/debug/trace.h +13 -12
  286. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +4 -2
  287. data/src/core/lib/event_engine/channel_args_endpoint_config.h +3 -2
  288. data/src/core/lib/event_engine/default_event_engine_factory.cc +8 -2
  289. data/src/core/lib/event_engine/event_engine.cc +29 -14
  290. data/src/core/lib/event_engine/event_engine_factory.h +5 -0
  291. data/src/core/lib/event_engine/handle_containers.h +67 -0
  292. data/src/core/lib/event_engine/iomgr_engine/iomgr_engine.cc +159 -0
  293. data/src/core/lib/event_engine/iomgr_engine/iomgr_engine.h +122 -0
  294. data/src/core/lib/event_engine/iomgr_engine/thread_pool.cc +123 -0
  295. data/src/core/lib/event_engine/iomgr_engine/thread_pool.h +70 -0
  296. data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.cc +62 -0
  297. data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.h +81 -0
  298. data/src/core/lib/event_engine/iomgr_engine/timer.cc +312 -0
  299. data/src/core/lib/event_engine/iomgr_engine/timer.h +193 -0
  300. data/src/core/lib/event_engine/iomgr_engine/timer_heap.cc +107 -0
  301. data/src/core/lib/event_engine/iomgr_engine/timer_heap.h +56 -0
  302. data/src/core/lib/event_engine/iomgr_engine/timer_manager.cc +254 -0
  303. data/src/core/lib/event_engine/iomgr_engine/timer_manager.h +111 -0
  304. data/src/core/lib/event_engine/memory_allocator.cc +12 -4
  305. data/src/core/lib/{iomgr/event_engine → event_engine}/promise.h +27 -9
  306. data/src/core/lib/event_engine/resolved_address.cc +4 -2
  307. data/src/core/lib/event_engine/slice.cc +102 -0
  308. data/src/core/lib/event_engine/slice_buffer.cc +50 -0
  309. data/src/core/lib/{iomgr/event_engine/pollset.h → event_engine/trace.cc} +3 -10
  310. data/src/core/lib/{iomgr/endpoint_pair_event_engine.cc → event_engine/trace.h} +12 -14
  311. data/src/core/lib/gpr/log.cc +5 -0
  312. data/src/core/lib/gpr/time_posix.cc +6 -9
  313. data/src/core/lib/gpr/time_windows.cc +10 -7
  314. data/src/core/lib/gpr/tls.h +3 -5
  315. data/src/core/lib/gprpp/bitset.h +5 -1
  316. data/src/core/lib/gprpp/chunked_vector.h +4 -0
  317. data/src/core/lib/gprpp/construct_destruct.h +1 -0
  318. data/src/core/lib/gprpp/dual_ref_counted.h +1 -4
  319. data/src/core/lib/gprpp/examine_stack.h +0 -1
  320. data/src/core/lib/gprpp/fork.cc +3 -6
  321. data/src/core/lib/gprpp/global_config.h +2 -4
  322. data/src/core/lib/gprpp/global_config_env.cc +3 -2
  323. data/src/core/lib/gprpp/global_config_env.h +3 -1
  324. data/src/core/lib/gprpp/global_config_generic.h +0 -4
  325. data/src/core/lib/gprpp/host_port.cc +2 -0
  326. data/src/core/lib/gprpp/manual_constructor.h +0 -68
  327. data/src/core/lib/gprpp/match.h +2 -0
  328. data/src/core/lib/gprpp/memory.h +1 -5
  329. data/src/core/lib/gprpp/orphanable.h +1 -4
  330. data/src/core/lib/gprpp/ref_counted.h +1 -3
  331. data/src/core/lib/gprpp/ref_counted_ptr.h +1 -1
  332. data/src/core/lib/gprpp/stat.h +0 -2
  333. data/src/core/lib/gprpp/stat_posix.cc +7 -2
  334. data/src/core/lib/gprpp/status_helper.cc +50 -32
  335. data/src/core/lib/gprpp/status_helper.h +4 -0
  336. data/src/core/lib/gprpp/sync.h +3 -1
  337. data/src/core/lib/gprpp/table.h +10 -0
  338. data/src/core/lib/gprpp/thd.h +2 -5
  339. data/src/core/lib/gprpp/thd_posix.cc +4 -2
  340. data/src/core/lib/gprpp/thd_windows.cc +2 -0
  341. data/src/core/lib/gprpp/time.cc +16 -0
  342. data/src/core/lib/gprpp/time.h +10 -1
  343. data/src/core/lib/gprpp/time_util.cc +4 -0
  344. data/src/core/lib/gprpp/time_util.h +1 -1
  345. data/src/core/lib/gprpp/unique_type_name.h +104 -0
  346. data/src/core/lib/http/format_request.cc +34 -4
  347. data/src/core/lib/http/format_request.h +3 -1
  348. data/src/core/lib/http/httpcli.cc +106 -93
  349. data/src/core/lib/http/httpcli.h +58 -10
  350. data/src/core/lib/http/httpcli_security_connector.cc +19 -8
  351. data/src/core/lib/http/httpcli_ssl_credentials.h +3 -1
  352. data/src/core/lib/http/parser.cc +6 -7
  353. data/src/core/lib/http/parser.h +3 -0
  354. data/src/core/lib/iomgr/call_combiner.cc +2 -2
  355. data/src/core/lib/iomgr/endpoint.cc +4 -4
  356. data/src/core/lib/iomgr/endpoint.h +7 -5
  357. data/src/core/lib/iomgr/endpoint_cfstream.cc +9 -6
  358. data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -1
  359. data/src/core/lib/iomgr/error.cc +11 -9
  360. data/src/core/lib/iomgr/error.h +9 -5
  361. data/src/core/lib/iomgr/ev_epoll1_linux.cc +57 -18
  362. data/src/core/lib/iomgr/ev_epoll1_linux.h +1 -1
  363. data/src/core/lib/iomgr/ev_poll_posix.cc +77 -52
  364. data/src/core/lib/iomgr/ev_poll_posix.h +2 -2
  365. data/src/core/lib/iomgr/ev_posix.cc +55 -96
  366. data/src/core/lib/iomgr/ev_posix.h +5 -3
  367. data/src/core/lib/iomgr/exec_ctx.h +1 -2
  368. data/src/core/lib/iomgr/fork_posix.cc +1 -1
  369. data/src/core/lib/iomgr/internal_errqueue.cc +38 -47
  370. data/src/core/lib/iomgr/internal_errqueue.h +1 -6
  371. data/src/core/lib/iomgr/iomgr.cc +7 -1
  372. data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc → lib/iomgr/iomgr_fwd.h} +9 -12
  373. data/src/core/lib/iomgr/iomgr_posix.cc +1 -0
  374. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -0
  375. data/src/core/lib/iomgr/load_file.cc +1 -1
  376. data/src/core/lib/iomgr/pollset_set.h +1 -2
  377. data/src/core/lib/iomgr/port.h +25 -6
  378. data/src/core/lib/iomgr/resolve_address.cc +8 -0
  379. data/src/core/lib/iomgr/resolve_address.h +21 -14
  380. data/src/core/lib/iomgr/resolve_address_impl.h +2 -3
  381. data/src/core/lib/iomgr/resolve_address_posix.cc +9 -15
  382. data/src/core/lib/iomgr/resolve_address_posix.h +5 -2
  383. data/src/core/lib/iomgr/resolve_address_windows.cc +8 -15
  384. data/src/core/lib/iomgr/resolve_address_windows.h +5 -2
  385. data/src/core/lib/iomgr/sockaddr.h +2 -3
  386. data/src/core/lib/iomgr/sockaddr_posix.h +2 -0
  387. data/src/core/lib/iomgr/sockaddr_windows.h +2 -0
  388. data/src/core/lib/iomgr/socket_utils_common_posix.cc +3 -2
  389. data/src/core/lib/iomgr/tcp_client.cc +12 -7
  390. data/src/core/lib/iomgr/tcp_client.h +24 -13
  391. data/src/core/lib/iomgr/tcp_client_cfstream.cc +24 -10
  392. data/src/core/lib/iomgr/tcp_client_posix.cc +154 -29
  393. data/src/core/lib/iomgr/tcp_client_posix.h +1 -1
  394. data/src/core/lib/iomgr/tcp_client_windows.cc +27 -16
  395. data/src/core/lib/iomgr/tcp_posix.cc +96 -52
  396. data/src/core/lib/iomgr/tcp_server_posix.cc +33 -19
  397. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +41 -38
  398. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +9 -6
  399. data/src/core/lib/iomgr/tcp_server_windows.cc +20 -12
  400. data/src/core/lib/iomgr/tcp_windows.cc +12 -9
  401. data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -2
  402. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
  403. data/src/core/lib/iomgr/wakeup_fd_posix.cc +15 -12
  404. data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -2
  405. data/src/core/lib/iomgr/work_serializer.h +2 -3
  406. data/src/core/lib/json/json.h +1 -2
  407. data/src/core/lib/json/json_reader.cc +9 -1
  408. data/src/core/lib/json/json_util.cc +7 -0
  409. data/src/core/lib/json/json_util.h +10 -1
  410. data/src/core/lib/json/json_writer.cc +6 -1
  411. data/src/core/lib/matchers/matchers.cc +6 -3
  412. data/src/core/lib/matchers/matchers.h +2 -0
  413. data/src/core/lib/promise/activity.cc +1 -2
  414. data/src/core/lib/promise/activity.h +13 -19
  415. data/src/core/lib/promise/arena_promise.h +11 -1
  416. data/src/core/lib/promise/call_push_pull.h +4 -0
  417. data/src/core/lib/promise/context.h +1 -1
  418. data/src/core/lib/promise/detail/basic_seq.h +2 -2
  419. data/src/core/lib/promise/detail/promise_factory.h +0 -1
  420. data/src/core/lib/promise/latch.h +0 -1
  421. data/src/core/lib/promise/loop.h +2 -0
  422. data/src/core/lib/promise/promise.h +1 -0
  423. data/src/core/lib/promise/race.h +0 -1
  424. data/src/core/lib/promise/seq.h +0 -2
  425. data/src/core/lib/promise/sleep.cc +38 -31
  426. data/src/core/lib/promise/sleep.h +32 -22
  427. data/src/core/lib/promise/try_seq.h +2 -2
  428. data/src/core/lib/resolver/resolver.cc +5 -0
  429. data/src/core/lib/resolver/resolver.h +3 -0
  430. data/src/core/lib/resolver/resolver_factory.h +6 -4
  431. data/src/core/lib/resolver/resolver_registry.cc +2 -9
  432. data/src/core/lib/resolver/resolver_registry.h +12 -1
  433. data/src/core/lib/resolver/server_address.cc +17 -3
  434. data/src/core/lib/resolver/server_address.h +13 -6
  435. data/src/core/lib/resource_quota/api.cc +14 -1
  436. data/src/core/lib/resource_quota/api.h +4 -1
  437. data/src/core/lib/resource_quota/arena.cc +0 -6
  438. data/src/core/lib/resource_quota/arena.h +1 -2
  439. data/src/core/lib/resource_quota/memory_quota.cc +62 -62
  440. data/src/core/lib/resource_quota/memory_quota.h +35 -30
  441. data/src/core/lib/resource_quota/resource_quota.h +8 -0
  442. data/src/core/lib/resource_quota/thread_quota.cc +2 -0
  443. data/src/core/lib/resource_quota/thread_quota.h +4 -0
  444. data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
  445. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +4 -0
  446. data/src/core/lib/security/authorization/evaluate_args.cc +9 -3
  447. data/src/core/lib/security/authorization/evaluate_args.h +6 -3
  448. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +6 -0
  449. data/src/core/lib/security/authorization/grpc_authorization_engine.h +7 -0
  450. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +15 -0
  451. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +12 -1
  452. data/src/core/lib/security/authorization/matchers.cc +9 -1
  453. data/src/core/lib/security/authorization/matchers.h +7 -0
  454. data/src/core/lib/security/authorization/rbac_policy.cc +5 -0
  455. data/src/core/lib/security/authorization/rbac_policy.h +7 -0
  456. data/src/core/lib/security/context/security_context.cc +5 -2
  457. data/src/core/lib/security/context/security_context.h +14 -2
  458. data/src/core/lib/security/credentials/alts/alts_credentials.cc +12 -4
  459. data/src/core/lib/security/credentials/alts/alts_credentials.h +8 -3
  460. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +1 -3
  461. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -4
  462. data/src/core/lib/security/credentials/call_creds_util.cc +10 -0
  463. data/src/core/lib/security/credentials/call_creds_util.h +1 -0
  464. data/src/core/lib/security/credentials/channel_creds_registry.h +7 -1
  465. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +10 -0
  466. data/src/core/lib/security/credentials/composite/composite_credentials.cc +11 -7
  467. data/src/core/lib/security/credentials/composite/composite_credentials.h +21 -6
  468. data/src/core/lib/security/credentials/credentials.cc +4 -8
  469. data/src/core/lib/security/credentials/credentials.h +27 -18
  470. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +108 -9
  471. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +18 -0
  472. data/src/core/lib/security/credentials/external/aws_request_signer.cc +9 -0
  473. data/src/core/lib/security/credentials/external/external_account_credentials.cc +27 -9
  474. data/src/core/lib/security/credentials/external/external_account_credentials.h +11 -0
  475. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +12 -4
  476. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +6 -0
  477. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +22 -4
  478. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +10 -0
  479. data/src/core/lib/security/credentials/fake/fake_credentials.cc +21 -9
  480. data/src/core/lib/security/credentials/fake/fake_credentials.h +15 -3
  481. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -0
  482. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +51 -24
  483. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +12 -3
  484. data/src/core/lib/security/credentials/iam/iam_credentials.cc +13 -4
  485. data/src/core/lib/security/credentials/iam/iam_credentials.h +12 -2
  486. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +12 -2
  487. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +9 -4
  488. data/src/core/lib/security/credentials/jwt/json_token.cc +5 -2
  489. data/src/core/lib/security/credentials/jwt/json_token.h +2 -2
  490. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +14 -7
  491. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +16 -2
  492. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +28 -3
  493. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -2
  494. data/src/core/lib/security/credentials/local/local_credentials.cc +12 -5
  495. data/src/core/lib/security/credentials/local/local_credentials.h +9 -2
  496. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +36 -19
  497. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +24 -4
  498. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +12 -8
  499. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +25 -1
  500. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +13 -2
  501. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +17 -4
  502. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +6 -6
  503. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -3
  504. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +39 -10
  505. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +14 -11
  506. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +35 -3
  507. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +34 -11
  508. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -5
  509. data/src/core/lib/security/credentials/tls/tls_credentials.cc +17 -2
  510. data/src/core/lib/security/credentials/tls/tls_credentials.h +7 -3
  511. data/src/core/lib/security/credentials/tls/tls_utils.cc +2 -0
  512. data/src/core/lib/security/credentials/tls/tls_utils.h +1 -1
  513. data/src/core/lib/security/credentials/xds/xds_credentials.cc +20 -4
  514. data/src/core/lib/security/credentials/xds/xds_credentials.h +19 -5
  515. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +22 -2
  516. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +6 -3
  517. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +18 -2
  518. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +2 -2
  519. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +9 -0
  520. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +17 -2
  521. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +5 -3
  522. data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +27 -19
  523. data/src/core/lib/security/security_connector/{load_system_roots_linux.h → load_system_roots_supported.h} +5 -5
  524. data/src/core/lib/security/security_connector/local/local_security_connector.cc +22 -3
  525. data/src/core/lib/security/security_connector/local/local_security_connector.h +6 -2
  526. data/src/core/lib/security/security_connector/security_connector.cc +20 -18
  527. data/src/core/lib/security/security_connector/security_connector.h +19 -7
  528. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +19 -7
  529. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -2
  530. data/src/core/lib/security/security_connector/ssl_utils.cc +12 -2
  531. data/src/core/lib/security/security_connector/ssl_utils.h +10 -7
  532. data/src/core/lib/security/security_connector/ssl_utils_config.h +1 -1
  533. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -13
  534. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +23 -3
  535. data/src/core/lib/security/transport/auth_filters.h +7 -0
  536. data/src/core/lib/security/transport/client_auth_filter.cc +24 -17
  537. data/src/core/lib/security/transport/secure_endpoint.cc +81 -20
  538. data/src/core/lib/security/transport/secure_endpoint.h +4 -3
  539. data/src/core/lib/security/transport/security_handshaker.cc +49 -16
  540. data/src/core/lib/security/transport/security_handshaker.h +5 -1
  541. data/src/core/lib/security/transport/server_auth_filter.cc +29 -6
  542. data/src/core/lib/security/util/json_util.cc +3 -2
  543. data/src/core/lib/security/util/json_util.h +0 -2
  544. data/src/core/lib/service_config/service_config.h +4 -8
  545. data/src/core/lib/service_config/service_config_call_data.h +6 -2
  546. data/src/core/lib/service_config/service_config_impl.cc +13 -6
  547. data/src/core/lib/service_config/service_config_impl.h +9 -4
  548. data/src/core/lib/service_config/service_config_parser.cc +8 -2
  549. data/src/core/lib/service_config/service_config_parser.h +7 -0
  550. data/src/core/lib/slice/b64.cc +1 -1
  551. data/src/core/lib/slice/b64.h +2 -0
  552. data/src/core/lib/slice/percent_encoding.cc +4 -1
  553. data/src/core/lib/slice/percent_encoding.h +0 -6
  554. data/src/core/lib/slice/slice.cc +2 -1
  555. data/src/core/lib/slice/slice.h +10 -5
  556. data/src/core/lib/slice/slice_api.cc +1 -1
  557. data/src/core/lib/slice/slice_buffer.cc +79 -23
  558. data/src/core/lib/slice/slice_buffer.h +137 -0
  559. data/src/core/lib/slice/slice_buffer_api.cc +35 -0
  560. data/src/core/lib/slice/slice_internal.h +4 -3
  561. data/src/core/lib/slice/slice_refcount.h +2 -3
  562. data/src/core/lib/slice/slice_refcount_base.h +2 -3
  563. data/src/core/lib/slice/slice_string_helpers.cc +0 -16
  564. data/src/core/lib/slice/slice_string_helpers.h +1 -8
  565. data/src/core/lib/surface/builtins.cc +7 -2
  566. data/src/core/lib/surface/byte_buffer.cc +7 -1
  567. data/src/core/lib/surface/byte_buffer_reader.cc +4 -4
  568. data/src/core/lib/surface/call.cc +90 -137
  569. data/src/core/lib/surface/call.h +21 -3
  570. data/src/core/lib/surface/call_details.cc +4 -4
  571. data/src/core/lib/surface/call_log_batch.cc +7 -1
  572. data/src/core/lib/surface/call_test_only.h +4 -1
  573. data/src/core/lib/surface/channel.cc +179 -242
  574. data/src/core/lib/surface/channel.h +97 -58
  575. data/src/core/lib/surface/channel_init.h +2 -0
  576. data/src/core/lib/surface/channel_ping.cc +8 -2
  577. data/src/core/lib/surface/channel_stack_type.cc +0 -2
  578. data/src/core/lib/surface/channel_stack_type.h +0 -2
  579. data/src/core/lib/surface/completion_queue.cc +29 -20
  580. data/src/core/lib/surface/completion_queue.h +7 -2
  581. data/src/core/lib/surface/completion_queue_factory.cc +1 -0
  582. data/src/core/lib/surface/completion_queue_factory.h +1 -3
  583. data/src/core/lib/surface/event_string.cc +1 -7
  584. data/src/core/lib/surface/event_string.h +1 -1
  585. data/src/core/lib/surface/init.cc +17 -46
  586. data/src/core/lib/surface/init.h +0 -8
  587. data/src/core/lib/surface/lame_client.cc +63 -109
  588. data/src/core/lib/surface/lame_client.h +41 -3
  589. data/src/core/lib/surface/metadata_array.cc +2 -0
  590. data/src/core/lib/surface/server.cc +83 -64
  591. data/src/core/lib/surface/server.h +42 -9
  592. data/src/core/lib/surface/validate_metadata.cc +3 -6
  593. data/src/core/lib/surface/validate_metadata.h +3 -0
  594. data/src/core/lib/surface/version.cc +2 -2
  595. data/src/core/lib/transport/bdp_estimator.cc +3 -1
  596. data/src/core/lib/transport/bdp_estimator.h +2 -3
  597. data/src/core/lib/transport/connectivity_state.cc +6 -4
  598. data/src/core/lib/transport/connectivity_state.h +2 -3
  599. data/src/core/lib/transport/error_utils.cc +16 -8
  600. data/src/core/lib/transport/error_utils.h +5 -1
  601. data/src/core/lib/{channel → transport}/handshaker.cc +12 -7
  602. data/src/core/lib/{channel → transport}/handshaker.h +13 -6
  603. data/src/core/lib/{channel → transport}/handshaker_factory.h +9 -10
  604. data/src/core/lib/{channel → transport}/handshaker_registry.cc +5 -1
  605. data/src/core/lib/{channel → transport}/handshaker_registry.h +5 -4
  606. data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.cc +28 -14
  607. data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.h +3 -3
  608. data/src/core/lib/transport/metadata_batch.cc +287 -0
  609. data/src/core/lib/transport/metadata_batch.h +133 -264
  610. data/src/core/lib/transport/parsed_metadata.cc +2 -0
  611. data/src/core/lib/transport/parsed_metadata.h +10 -3
  612. data/src/core/lib/transport/status_conversion.cc +2 -0
  613. data/src/core/lib/transport/status_conversion.h +2 -2
  614. data/src/core/lib/transport/tcp_connect_handshaker.cc +253 -0
  615. data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
  616. data/src/core/lib/transport/timeout_encoding.cc +2 -6
  617. data/src/core/lib/transport/timeout_encoding.h +5 -1
  618. data/src/core/lib/transport/transport.cc +18 -20
  619. data/src/core/lib/transport/transport.h +48 -16
  620. data/src/core/lib/transport/transport_fwd.h +20 -0
  621. data/src/core/lib/transport/transport_impl.h +11 -0
  622. data/src/core/lib/transport/transport_op_string.cc +17 -18
  623. data/src/core/lib/uri/uri_parser.cc +11 -3
  624. data/src/core/lib/uri/uri_parser.h +0 -2
  625. data/src/core/plugin_registry/grpc_plugin_registry.cc +11 -0
  626. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
  627. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +9 -1
  628. data/src/core/tsi/fake_transport_security.cc +13 -1
  629. data/src/core/tsi/fake_transport_security.h +6 -0
  630. data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -0
  631. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +2 -0
  632. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -0
  633. data/src/core/tsi/ssl_transport_security.cc +1 -1
  634. data/src/core/tsi/transport_security_grpc.cc +3 -2
  635. data/src/core/tsi/transport_security_grpc.h +5 -2
  636. data/src/ruby/ext/grpc/ext-export-truffleruby.clang +2 -0
  637. data/src/ruby/ext/grpc/ext-export-truffleruby.gcc +7 -0
  638. data/src/ruby/ext/grpc/ext-export.clang +1 -0
  639. data/src/ruby/ext/grpc/ext-export.gcc +1 -0
  640. data/src/ruby/ext/grpc/extconf.rb +50 -19
  641. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
  642. data/src/ruby/lib/grpc/errors.rb +1 -1
  643. data/src/ruby/lib/grpc/version.rb +1 -1
  644. data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
  645. data/third_party/abseil-cpp/absl/algorithm/container.h +1 -1
  646. data/third_party/abseil-cpp/absl/base/attributes.h +49 -22
  647. data/third_party/abseil-cpp/absl/base/casts.h +61 -68
  648. data/third_party/abseil-cpp/absl/base/config.h +182 -41
  649. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
  650. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +67 -2
  651. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +3 -3
  652. data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
  653. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
  654. data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
  655. data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
  656. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +29 -22
  657. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +13 -12
  658. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -0
  659. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +8 -0
  660. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
  661. data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
  662. data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
  663. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +0 -1
  664. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
  665. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
  666. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -3
  667. data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
  668. data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
  669. data/third_party/abseil-cpp/absl/base/optimization.h +19 -11
  670. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  671. data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
  672. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -0
  673. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
  674. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +510 -0
  675. data/third_party/abseil-cpp/absl/container/inlined_vector.h +20 -9
  676. data/third_party/abseil-cpp/absl/container/internal/common.h +6 -5
  677. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +10 -28
  678. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +68 -20
  679. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +29 -11
  680. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +59 -38
  681. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +4 -0
  682. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +515 -184
  683. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
  684. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +4 -0
  685. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
  686. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +8 -3
  687. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
  688. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +2 -1
  689. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
  690. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +20 -18
  691. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +8 -3
  692. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +15 -2
  693. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
  694. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +46 -7
  695. data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
  696. data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
  697. data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
  698. data/third_party/abseil-cpp/absl/hash/internal/hash.h +218 -23
  699. data/third_party/abseil-cpp/absl/numeric/bits.h +2 -1
  700. data/third_party/abseil-cpp/absl/numeric/int128.cc +4 -2
  701. data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
  702. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +21 -6
  703. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
  704. data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
  705. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
  706. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +2 -1
  707. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
  708. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
  709. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +1 -1
  710. data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
  711. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
  712. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
  713. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
  714. data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
  715. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
  716. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
  717. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
  718. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
  719. data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
  720. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
  721. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
  722. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
  723. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +17 -0
  724. data/third_party/abseil-cpp/absl/status/status.cc +174 -2
  725. data/third_party/abseil-cpp/absl/status/status.h +22 -12
  726. data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
  727. data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
  728. data/third_party/abseil-cpp/absl/strings/cord.cc +194 -913
  729. data/third_party/abseil-cpp/absl/strings/cord.h +202 -81
  730. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
  731. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
  732. data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
  733. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +572 -0
  734. data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
  735. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +20 -32
  736. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +123 -88
  737. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +149 -49
  738. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +44 -59
  739. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +3 -1
  740. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
  741. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
  742. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
  743. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
  744. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +54 -0
  745. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +102 -0
  746. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
  747. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
  748. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +11 -38
  749. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +1 -0
  750. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
  751. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +6 -5
  752. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +1 -1
  753. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +1 -1
  754. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -1
  755. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +38 -7
  756. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -2
  757. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +4 -5
  758. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +5 -2
  759. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
  760. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
  761. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
  762. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
  763. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
  764. data/third_party/abseil-cpp/absl/strings/numbers.cc +8 -8
  765. data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
  766. data/third_party/abseil-cpp/absl/strings/str_cat.h +20 -13
  767. data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
  768. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
  769. data/third_party/abseil-cpp/absl/strings/string_view.cc +2 -13
  770. data/third_party/abseil-cpp/absl/strings/string_view.h +3 -2
  771. data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
  772. data/third_party/abseil-cpp/absl/strings/substitute.h +10 -2
  773. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
  774. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
  775. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
  776. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
  777. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -25
  778. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
  779. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -40
  780. data/third_party/abseil-cpp/absl/synchronization/mutex.h +17 -9
  781. data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -2
  782. data/third_party/abseil-cpp/absl/time/duration.cc +5 -4
  783. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
  784. data/third_party/abseil-cpp/absl/time/time.h +16 -12
  785. data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
  786. data/third_party/abseil-cpp/absl/types/internal/variant.h +3 -3
  787. data/third_party/abseil-cpp/absl/types/optional.h +17 -14
  788. data/third_party/abseil-cpp/absl/types/span.h +2 -1
  789. metadata +69 -38
  790. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +0 -31
  791. data/src/core/lib/event_engine/sockaddr.cc +0 -40
  792. data/src/core/lib/event_engine/sockaddr.h +0 -44
  793. data/src/core/lib/gprpp/capture.h +0 -76
  794. data/src/core/lib/iomgr/event_engine/closure.cc +0 -77
  795. data/src/core/lib/iomgr/event_engine/closure.h +0 -42
  796. data/src/core/lib/iomgr/event_engine/endpoint.cc +0 -172
  797. data/src/core/lib/iomgr/event_engine/endpoint.h +0 -52
  798. data/src/core/lib/iomgr/event_engine/iomgr.cc +0 -85
  799. data/src/core/lib/iomgr/event_engine/pollset.cc +0 -87
  800. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +0 -47
  801. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +0 -37
  802. data/src/core/lib/iomgr/event_engine/resolver.cc +0 -133
  803. data/src/core/lib/iomgr/event_engine/resolver.h +0 -56
  804. data/src/core/lib/iomgr/event_engine/tcp.cc +0 -296
  805. data/src/core/lib/iomgr/event_engine/timer.cc +0 -62
  806. data/src/core/lib/slice/slice_split.cc +0 -100
  807. data/src/core/lib/slice/slice_split.h +0 -40
  808. data/src/core/lib/transport/byte_stream.cc +0 -164
  809. data/src/core/lib/transport/byte_stream.h +0 -166
  810. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -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__ < 9) && !defined(__MINGW32__)
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
- #if ABSL_HAVE_ATTRIBUTE(nodiscard)
430
- #define ABSL_MUST_USE_RESULT [[nodiscard]]
431
- #elif defined(__clang__) && ABSL_HAVE_ATTRIBUTE(warn_unused_result)
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
- [[clang::xray_always_instrument, clang::xray_log_args(N)]]
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
- // clang's `-Wdeprecated-declarations` option. This option is turned off by
657
- // default, but the warnings will be reported by clang-tidy.
658
- #if defined(__clang__) && defined(__cplusplus) && __cplusplus >= 201103L
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
- #endif
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". Prefer to put this attribute on the most visible
673
- // declaration of the variable, if there's more than one, because code that
674
- // accesses the variable can then use the attribute for optimization.
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 ABSL_HAVE_CPP_ATTRIBUTE(clang::require_constant_initialization)
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 // ABSL_HAVE_CPP_ATTRIBUTE(clang::require_constant_initialization)
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
- // Performs a bitwise cast on a type without changing the underlying bit
109
- // representation of that type's value. The two types must be of the same size
110
- // and both types must be trivially copyable. As with most casts, use with
111
- // caution. A `bit_cast()` might be needed when you need to temporarily treat a
112
- // type as some other type, such as in the following cases:
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
- // * Serialization (casting temporarily to `char *` for those purposes is
115
- // always allowed by the C++ standard)
116
- // * Managing the individual bits of a type within mathematical operations
117
- // that are not normally accessible through that type
118
- // * Casting non-pointer types to pointer types (casting the other way is
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<int32_t>(f);
113
+ // int i = bit_cast<int>(f);
126
114
  // // i = 0x40490fdb
127
115
  //
128
- // Casting non-pointer types to pointer types and then dereferencing them
129
- // traditionally produces undefined behavior.
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; // WRONG
135
- // int i = * reinterpret_cast<int*>(&f); // WRONG
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
- // The address-casting method produces undefined behavior according to the ISO
138
- // C++ specification section [basic.lval]. Roughly, this section says: if an
139
- // object in memory has one type, and a program accesses it with a different
140
- // type, the result is undefined behavior for most values of "different type".
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 implementing its casts using `memcpy()`, which avoids introducing
145
- // this undefined behavior.
146
- //
147
- // NOTE: The requirements here are more strict than the bit_cast of standard
148
- // proposal p0476 due to the need for workarounds and lack of intrinsics.
149
- // Specifically, this implementation also requires `Dest` to be
150
- // default-constructible.
151
- template <
152
- typename Dest, typename Source,
153
- typename std::enable_if<internal_casts::is_bitcastable<Dest, Source>::value,
154
- int>::type = 0>
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
- // NOTE: This overload is only picked if the requirements of bit_cast are
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
@@ -56,6 +56,25 @@
56
56
  #include <cstddef>
57
57
  #endif // __cplusplus
58
58
 
59
+ // ABSL_INTERNAL_CPLUSPLUS_LANG
60
+ //
61
+ // MSVC does not set the value of __cplusplus correctly, but instead uses
62
+ // _MSVC_LANG as a stand-in.
63
+ // https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros
64
+ //
65
+ // However, there are reports that MSVC even sets _MSVC_LANG incorrectly at
66
+ // times, for example:
67
+ // https://github.com/microsoft/vscode-cpptools/issues/1770
68
+ // https://reviews.llvm.org/D70996
69
+ //
70
+ // For this reason, this symbol is considered INTERNAL and code outside of
71
+ // Abseil must not use it.
72
+ #if defined(_MSVC_LANG)
73
+ #define ABSL_INTERNAL_CPLUSPLUS_LANG _MSVC_LANG
74
+ #elif defined(__cplusplus)
75
+ #define ABSL_INTERNAL_CPLUSPLUS_LANG __cplusplus
76
+ #endif
77
+
59
78
  #if defined(__APPLE__)
60
79
  // Included for TARGET_OS_IPHONE, __IPHONE_OS_VERSION_MIN_REQUIRED,
61
80
  // __IPHONE_8_0.
@@ -92,7 +111,7 @@
92
111
  //
93
112
  // LTS releases can be obtained from
94
113
  // https://github.com/abseil/abseil-cpp/releases.
95
- #define ABSL_LTS_RELEASE_VERSION 20211102
114
+ #define ABSL_LTS_RELEASE_VERSION 20220623
96
115
  #define ABSL_LTS_RELEASE_PATCH_LEVEL 0
97
116
 
98
117
  // Helper macro to convert a CPP variable to a string literal.
@@ -183,12 +202,6 @@ static_assert(ABSL_INTERNAL_INLINE_NAMESPACE_STR[0] != 'h' ||
183
202
  #define ABSL_HAVE_BUILTIN(x) 0
184
203
  #endif
185
204
 
186
- #if defined(__is_identifier)
187
- #define ABSL_INTERNAL_HAS_KEYWORD(x) !(__is_identifier(x))
188
- #else
189
- #define ABSL_INTERNAL_HAS_KEYWORD(x) 0
190
- #endif
191
-
192
205
  #ifdef __has_feature
193
206
  #define ABSL_HAVE_FEATURE(f) __has_feature(f)
194
207
  #else
@@ -212,11 +225,12 @@ static_assert(ABSL_INTERNAL_INLINE_NAMESPACE_STR[0] != 'h' ||
212
225
  #endif
213
226
 
214
227
  // ABSL_HAVE_TLS is defined to 1 when __thread should be supported.
215
- // We assume __thread is supported on Linux when compiled with Clang or compiled
216
- // against libstdc++ with _GLIBCXX_HAVE_TLS defined.
228
+ // We assume __thread is supported on Linux or Asylo when compiled with Clang or
229
+ // compiled against libstdc++ with _GLIBCXX_HAVE_TLS defined.
217
230
  #ifdef ABSL_HAVE_TLS
218
231
  #error ABSL_HAVE_TLS cannot be directly set
219
- #elif defined(__linux__) && (defined(__clang__) || defined(_GLIBCXX_HAVE_TLS))
232
+ #elif (defined(__linux__) || defined(__ASYLO__)) && \
233
+ (defined(__clang__) || defined(_GLIBCXX_HAVE_TLS))
220
234
  #define ABSL_HAVE_TLS 1
221
235
  #endif
222
236
 
@@ -259,19 +273,6 @@ static_assert(ABSL_INTERNAL_INLINE_NAMESPACE_STR[0] != 'h' ||
259
273
  #define ABSL_HAVE_STD_IS_TRIVIALLY_ASSIGNABLE 1
260
274
  #endif
261
275
 
262
- // ABSL_HAVE_SOURCE_LOCATION_CURRENT
263
- //
264
- // Indicates whether `absl::SourceLocation::current()` will return useful
265
- // information in some contexts.
266
- #ifndef ABSL_HAVE_SOURCE_LOCATION_CURRENT
267
- #if ABSL_INTERNAL_HAS_KEYWORD(__builtin_LINE) && \
268
- ABSL_INTERNAL_HAS_KEYWORD(__builtin_FILE)
269
- #define ABSL_HAVE_SOURCE_LOCATION_CURRENT 1
270
- #elif ABSL_INTERNAL_HAVE_MIN_GNUC_VERSION(5, 0)
271
- #define ABSL_HAVE_SOURCE_LOCATION_CURRENT 1
272
- #endif
273
- #endif
274
-
275
276
  // ABSL_HAVE_THREAD_LOCAL
276
277
  //
277
278
  // Checks whether C++11's `thread_local` storage duration specifier is
@@ -414,7 +415,8 @@ static_assert(ABSL_INTERNAL_INLINE_NAMESPACE_STR[0] != 'h' ||
414
415
  defined(_AIX) || defined(__ros__) || defined(__native_client__) || \
415
416
  defined(__asmjs__) || defined(__wasm__) || defined(__Fuchsia__) || \
416
417
  defined(__sun) || defined(__ASYLO__) || defined(__myriad2__) || \
417
- defined(__HAIKU__)
418
+ defined(__HAIKU__) || defined(__OpenBSD__) || defined(__NetBSD__) || \
419
+ defined(__QNX__)
418
420
  #define ABSL_HAVE_MMAP 1
419
421
  #endif
420
422
 
@@ -425,7 +427,8 @@ static_assert(ABSL_INTERNAL_INLINE_NAMESPACE_STR[0] != 'h' ||
425
427
  #ifdef ABSL_HAVE_PTHREAD_GETSCHEDPARAM
426
428
  #error ABSL_HAVE_PTHREAD_GETSCHEDPARAM cannot be directly set
427
429
  #elif defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__) || \
428
- defined(_AIX) || defined(__ros__)
430
+ defined(_AIX) || defined(__ros__) || defined(__OpenBSD__) || \
431
+ defined(__NetBSD__)
429
432
  #define ABSL_HAVE_PTHREAD_GETSCHEDPARAM 1
430
433
  #endif
431
434
 
@@ -520,22 +523,41 @@ static_assert(ABSL_INTERNAL_INLINE_NAMESPACE_STR[0] != 'h' ||
520
523
  #error "absl endian detection needs to be set up for your compiler"
521
524
  #endif
522
525
 
523
- // macOS 10.13 and iOS 10.11 don't let you use <any>, <optional>, or <variant>
524
- // even though the headers exist and are publicly noted to work. See
525
- // https://github.com/abseil/abseil-cpp/issues/207 and
526
+ // macOS < 10.13 and iOS < 11 don't let you use <any>, <optional>, or <variant>
527
+ // even though the headers exist and are publicly noted to work, because the
528
+ // libc++ shared library shipped on the system doesn't have the requisite
529
+ // exported symbols. See https://github.com/abseil/abseil-cpp/issues/207 and
526
530
  // https://developer.apple.com/documentation/xcode_release_notes/xcode_10_release_notes
531
+ //
527
532
  // libc++ spells out the availability requirements in the file
528
533
  // llvm-project/libcxx/include/__config via the #define
529
534
  // _LIBCPP_AVAILABILITY_BAD_OPTIONAL_ACCESS.
530
- #if defined(__APPLE__) && defined(_LIBCPP_VERSION) && \
531
- ((defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && \
532
- __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 101400) || \
533
- (defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && \
534
- __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 120000) || \
535
- (defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && \
536
- __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 50000) || \
537
- (defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && \
538
- __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 120000))
535
+ //
536
+ // Unfortunately, Apple initially mis-stated the requirements as macOS < 10.14
537
+ // and iOS < 12 in the libc++ headers. This was corrected by
538
+ // https://github.com/llvm/llvm-project/commit/7fb40e1569dd66292b647f4501b85517e9247953
539
+ // which subsequently made it into the XCode 12.5 release. We need to match the
540
+ // old (incorrect) conditions when built with old XCode, but can use the
541
+ // corrected earlier versions with new XCode.
542
+ #if defined(__APPLE__) && defined(_LIBCPP_VERSION) && \
543
+ ((_LIBCPP_VERSION >= 11000 && /* XCode 12.5 or later: */ \
544
+ ((defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && \
545
+ __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 101300) || \
546
+ (defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && \
547
+ __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 110000) || \
548
+ (defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && \
549
+ __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 40000) || \
550
+ (defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && \
551
+ __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 110000))) || \
552
+ (_LIBCPP_VERSION < 11000 && /* Pre-XCode 12.5: */ \
553
+ ((defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && \
554
+ __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 101400) || \
555
+ (defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && \
556
+ __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 120000) || \
557
+ (defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && \
558
+ __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 50000) || \
559
+ (defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && \
560
+ __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 120000))))
539
561
  #define ABSL_INTERNAL_APPLE_CXX17_TYPES_UNAVAILABLE 1
540
562
  #else
541
563
  #define ABSL_INTERNAL_APPLE_CXX17_TYPES_UNAVAILABLE 0
@@ -705,8 +727,6 @@ static_assert(ABSL_INTERNAL_INLINE_NAMESPACE_STR[0] != 'h' ||
705
727
  #endif
706
728
  #endif
707
729
 
708
- #undef ABSL_INTERNAL_HAS_KEYWORD
709
-
710
730
  // ABSL_DLL
711
731
  //
712
732
  // When building Abseil as a DLL, this macro expands to `__declspec(dllexport)`
@@ -732,8 +752,6 @@ static_assert(ABSL_INTERNAL_INLINE_NAMESPACE_STR[0] != 'h' ||
732
752
  // a compiler instrumentation module and a run-time library.
733
753
  #ifdef ABSL_HAVE_MEMORY_SANITIZER
734
754
  #error "ABSL_HAVE_MEMORY_SANITIZER cannot be directly set."
735
- #elif defined(__SANITIZE_MEMORY__)
736
- #define ABSL_HAVE_MEMORY_SANITIZER 1
737
755
  #elif !defined(__native_client__) && ABSL_HAVE_FEATURE(memory_sanitizer)
738
756
  #define ABSL_HAVE_MEMORY_SANITIZER 1
739
757
  #endif
@@ -760,6 +778,45 @@ static_assert(ABSL_INTERNAL_INLINE_NAMESPACE_STR[0] != 'h' ||
760
778
  #define ABSL_HAVE_ADDRESS_SANITIZER 1
761
779
  #endif
762
780
 
781
+ // ABSL_HAVE_HWADDRESS_SANITIZER
782
+ //
783
+ // Hardware-Assisted AddressSanitizer (or HWASAN) is even faster than asan
784
+ // memory error detector which can use CPU features like ARM TBI, Intel LAM or
785
+ // AMD UAI.
786
+ #ifdef ABSL_HAVE_HWADDRESS_SANITIZER
787
+ #error "ABSL_HAVE_HWADDRESS_SANITIZER cannot be directly set."
788
+ #elif defined(__SANITIZE_HWADDRESS__)
789
+ #define ABSL_HAVE_HWADDRESS_SANITIZER 1
790
+ #elif ABSL_HAVE_FEATURE(hwaddress_sanitizer)
791
+ #define ABSL_HAVE_HWADDRESS_SANITIZER 1
792
+ #endif
793
+
794
+ // ABSL_HAVE_LEAK_SANITIZER
795
+ //
796
+ // LeakSanitizer (or lsan) is a detector of memory leaks.
797
+ // https://clang.llvm.org/docs/LeakSanitizer.html
798
+ // https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer
799
+ //
800
+ // The macro ABSL_HAVE_LEAK_SANITIZER can be used to detect at compile-time
801
+ // whether the LeakSanitizer is potentially available. However, just because the
802
+ // LeakSanitizer is available does not mean it is active. Use the
803
+ // always-available run-time interface in //absl/debugging/leak_check.h for
804
+ // interacting with LeakSanitizer.
805
+ #ifdef ABSL_HAVE_LEAK_SANITIZER
806
+ #error "ABSL_HAVE_LEAK_SANITIZER cannot be directly set."
807
+ #elif defined(LEAK_SANITIZER)
808
+ // GCC provides no method for detecting the presense of the standalone
809
+ // LeakSanitizer (-fsanitize=leak), so GCC users of -fsanitize=leak should also
810
+ // use -DLEAK_SANITIZER.
811
+ #define ABSL_HAVE_LEAK_SANITIZER 1
812
+ // Clang standalone LeakSanitizer (-fsanitize=leak)
813
+ #elif ABSL_HAVE_FEATURE(leak_sanitizer)
814
+ #define ABSL_HAVE_LEAK_SANITIZER 1
815
+ #elif defined(ABSL_HAVE_ADDRESS_SANITIZER)
816
+ // GCC or Clang using the LeakSanitizer integrated into AddressSanitizer.
817
+ #define ABSL_HAVE_LEAK_SANITIZER 1
818
+ #endif
819
+
763
820
  // ABSL_HAVE_CLASS_TEMPLATE_ARGUMENT_DEDUCTION
764
821
  //
765
822
  // Class template argument deduction is a language feature added in C++17.
@@ -769,4 +826,88 @@ static_assert(ABSL_INTERNAL_INLINE_NAMESPACE_STR[0] != 'h' ||
769
826
  #define ABSL_HAVE_CLASS_TEMPLATE_ARGUMENT_DEDUCTION 1
770
827
  #endif
771
828
 
829
+ // ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL
830
+ //
831
+ // Prior to C++17, static constexpr variables defined in classes required a
832
+ // separate definition outside of the class body, for example:
833
+ //
834
+ // class Foo {
835
+ // static constexpr int kBar = 0;
836
+ // };
837
+ // constexpr int Foo::kBar;
838
+ //
839
+ // In C++17, these variables defined in classes are considered inline variables,
840
+ // and the extra declaration is redundant. Since some compilers warn on the
841
+ // extra declarations, ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL can be used
842
+ // conditionally ignore them:
843
+ //
844
+ // #ifdef ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL
845
+ // constexpr int Foo::kBar;
846
+ // #endif
847
+ #if defined(ABSL_INTERNAL_CPLUSPLUS_LANG) && \
848
+ ABSL_INTERNAL_CPLUSPLUS_LANG < 201703L
849
+ #define ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL 1
850
+ #endif
851
+
852
+ // `ABSL_INTERNAL_HAS_RTTI` determines whether abseil is being compiled with
853
+ // RTTI support.
854
+ #ifdef ABSL_INTERNAL_HAS_RTTI
855
+ #error ABSL_INTERNAL_HAS_RTTI cannot be directly set
856
+ #elif !defined(__GNUC__) || defined(__GXX_RTTI)
857
+ #define ABSL_INTERNAL_HAS_RTTI 1
858
+ #endif // !defined(__GNUC__) || defined(__GXX_RTTI)
859
+
860
+ // ABSL_INTERNAL_HAVE_SSE is used for compile-time detection of SSE support.
861
+ // See https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html for an overview of
862
+ // which architectures support the various x86 instruction sets.
863
+ #ifdef ABSL_INTERNAL_HAVE_SSE
864
+ #error ABSL_INTERNAL_HAVE_SSE cannot be directly set
865
+ #elif defined(__SSE__)
866
+ #define ABSL_INTERNAL_HAVE_SSE 1
867
+ #elif defined(_M_X64) || (defined(_M_IX86_FP) && _M_IX86_FP >= 1)
868
+ // MSVC only defines _M_IX86_FP for x86 32-bit code, and _M_IX86_FP >= 1
869
+ // indicates that at least SSE was targeted with the /arch:SSE option.
870
+ // All x86-64 processors support SSE, so support can be assumed.
871
+ // https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros
872
+ #define ABSL_INTERNAL_HAVE_SSE 1
873
+ #endif
874
+
875
+ // ABSL_INTERNAL_HAVE_SSE2 is used for compile-time detection of SSE2 support.
876
+ // See https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html for an overview of
877
+ // which architectures support the various x86 instruction sets.
878
+ #ifdef ABSL_INTERNAL_HAVE_SSE2
879
+ #error ABSL_INTERNAL_HAVE_SSE2 cannot be directly set
880
+ #elif defined(__SSE2__)
881
+ #define ABSL_INTERNAL_HAVE_SSE2 1
882
+ #elif defined(_M_X64) || (defined(_M_IX86_FP) && _M_IX86_FP >= 2)
883
+ // MSVC only defines _M_IX86_FP for x86 32-bit code, and _M_IX86_FP >= 2
884
+ // indicates that at least SSE2 was targeted with the /arch:SSE2 option.
885
+ // All x86-64 processors support SSE2, so support can be assumed.
886
+ // https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros
887
+ #define ABSL_INTERNAL_HAVE_SSE2 1
888
+ #endif
889
+
890
+ // ABSL_INTERNAL_HAVE_SSSE3 is used for compile-time detection of SSSE3 support.
891
+ // See https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html for an overview of
892
+ // which architectures support the various x86 instruction sets.
893
+ //
894
+ // MSVC does not have a mode that targets SSSE3 at compile-time. To use SSSE3
895
+ // with MSVC requires either assuming that the code will only every run on CPUs
896
+ // that support SSSE3, otherwise __cpuid() can be used to detect support at
897
+ // runtime and fallback to a non-SSSE3 implementation when SSSE3 is unsupported
898
+ // by the CPU.
899
+ #ifdef ABSL_INTERNAL_HAVE_SSSE3
900
+ #error ABSL_INTERNAL_HAVE_SSSE3 cannot be directly set
901
+ #elif defined(__SSSE3__)
902
+ #define ABSL_INTERNAL_HAVE_SSSE3 1
903
+ #endif
904
+
905
+ // ABSL_INTERNAL_HAVE_ARM_NEON is used for compile-time detection of NEON (ARM
906
+ // SIMD).
907
+ #ifdef ABSL_INTERNAL_HAVE_ARM_NEON
908
+ #error ABSL_INTERNAL_HAVE_ARM_NEON cannot be directly set
909
+ #elif defined(__ARM_NEON)
910
+ #define ABSL_INTERNAL_HAVE_ARM_NEON 1
911
+ #endif
912
+
772
913
  #endif // ABSL_BASE_CONFIG_H_