grpc 1.37.1 → 1.38.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 (544) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +64 -58
  3. data/include/grpc/event_engine/README.md +38 -0
  4. data/include/grpc/event_engine/channel_args.h +28 -0
  5. data/include/grpc/event_engine/event_engine.h +336 -0
  6. data/include/grpc/event_engine/port.h +39 -0
  7. data/include/grpc/event_engine/slice_allocator.h +81 -0
  8. data/include/grpc/grpc.h +2 -2
  9. data/include/grpc/grpc_security_constants.h +14 -0
  10. data/include/grpc/impl/codegen/grpc_types.h +11 -0
  11. data/include/grpc/impl/codegen/port_platform.h +5 -0
  12. data/include/grpc/module.modulemap +14 -14
  13. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
  14. data/src/core/ext/filters/client_channel/channel_connectivity.cc +177 -202
  15. data/src/core/ext/filters/client_channel/client_channel.cc +628 -3101
  16. data/src/core/ext/filters/client_channel/client_channel.h +489 -55
  17. data/src/core/ext/filters/client_channel/client_channel_channelz.h +1 -1
  18. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -1
  19. data/src/core/ext/filters/client_channel/config_selector.h +1 -1
  20. data/src/core/ext/filters/client_channel/connector.h +1 -1
  21. data/src/core/ext/filters/client_channel/dynamic_filters.cc +9 -10
  22. data/src/core/ext/filters/client_channel/dynamic_filters.h +3 -3
  23. data/src/core/ext/filters/client_channel/health/health_check_client.cc +26 -27
  24. data/src/core/ext/filters/client_channel/health/health_check_client.h +27 -26
  25. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +24 -21
  26. data/src/core/ext/filters/client_channel/lb_policy.cc +1 -1
  27. data/src/core/ext/filters/client_channel/lb_policy.h +4 -4
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -6
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +46 -43
  30. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -1
  31. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -1
  32. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +5 -5
  33. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +14 -12
  34. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +4 -4
  35. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +1 -1
  36. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +15 -15
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +36 -30
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +23 -23
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +31 -46
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +84 -61
  41. data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -1
  42. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -4
  43. data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
  44. data/src/core/ext/filters/client_channel/resolver.h +2 -2
  45. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +23 -15
  46. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -1
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +3 -3
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +14 -14
  50. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +33 -24
  51. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
  52. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
  53. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  54. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +17 -9
  55. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +20 -28
  56. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +7 -5
  57. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +13 -11
  58. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
  59. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +43 -28
  60. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +32 -239
  61. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +20 -49
  62. data/src/core/ext/filters/client_channel/retry_filter.cc +2188 -0
  63. data/src/core/ext/filters/client_channel/retry_filter.h +30 -0
  64. data/src/core/ext/filters/client_channel/retry_service_config.cc +287 -0
  65. data/src/core/ext/filters/client_channel/retry_service_config.h +90 -0
  66. data/src/core/ext/filters/client_channel/server_address.cc +1 -1
  67. data/src/core/ext/filters/client_channel/service_config.cc +15 -14
  68. data/src/core/ext/filters/client_channel/service_config.h +7 -6
  69. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +5 -4
  70. data/src/core/ext/filters/client_channel/service_config_parser.cc +6 -6
  71. data/src/core/ext/filters/client_channel/service_config_parser.h +7 -4
  72. data/src/core/ext/filters/client_channel/subchannel.cc +17 -16
  73. data/src/core/ext/filters/client_channel/subchannel.h +7 -6
  74. data/src/core/ext/filters/client_idle/client_idle_filter.cc +16 -15
  75. data/src/core/ext/filters/deadline/deadline_filter.cc +10 -10
  76. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +19 -18
  77. data/src/core/ext/filters/fault_injection/service_config_parser.cc +5 -5
  78. data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
  79. data/src/core/ext/filters/http/client/http_client_filter.cc +28 -21
  80. data/src/core/ext/filters/http/client_authority_filter.cc +3 -3
  81. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +23 -22
  82. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +21 -21
  83. data/src/core/ext/filters/http/server/http_server_filter.cc +27 -23
  84. data/src/core/ext/filters/max_age/max_age_filter.cc +12 -10
  85. data/src/core/ext/filters/message_size/message_size_filter.cc +14 -11
  86. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  87. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +4 -3
  88. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +7 -7
  89. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +7 -7
  90. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +2 -2
  91. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +1 -1
  92. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +3 -3
  93. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +44 -45
  94. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -2
  95. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -4
  96. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +2 -2
  97. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -4
  98. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +129 -116
  99. data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -5
  100. data/src/core/ext/transport/chttp2/transport/context_list.h +4 -4
  101. data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
  102. data/src/core/ext/transport/chttp2/transport/flow_control.h +8 -8
  103. data/src/core/ext/transport/chttp2/transport/frame_data.cc +8 -8
  104. data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -10
  105. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +7 -8
  106. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +6 -6
  107. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +7 -8
  108. data/src/core/ext/transport/chttp2/transport/frame_ping.h +7 -6
  109. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +7 -7
  110. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +6 -6
  111. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -5
  112. data/src/core/ext/transport/chttp2/transport/frame_settings.h +6 -6
  113. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -6
  114. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +4 -6
  115. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +237 -208
  116. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +10 -10
  117. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +4 -3
  118. data/src/core/ext/transport/chttp2/transport/hpack_table.h +4 -4
  119. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -2
  120. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +2 -2
  121. data/src/core/ext/transport/chttp2/transport/internal.h +31 -27
  122. data/src/core/ext/transport/chttp2/transport/parsing.cc +63 -56
  123. data/src/core/ext/transport/chttp2/transport/writing.cc +7 -3
  124. data/src/core/ext/transport/inproc/inproc_transport.cc +30 -29
  125. data/src/core/ext/xds/certificate_provider_factory.h +1 -1
  126. data/src/core/ext/xds/certificate_provider_store.h +3 -3
  127. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +3 -3
  128. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +2 -2
  129. data/src/core/ext/xds/xds_api.cc +101 -93
  130. data/src/core/ext/xds/xds_api.h +6 -6
  131. data/src/core/ext/xds/xds_bootstrap.cc +97 -159
  132. data/src/core/ext/xds/xds_bootstrap.h +19 -24
  133. data/src/core/ext/xds/xds_certificate_provider.cc +4 -4
  134. data/src/core/ext/xds/xds_certificate_provider.h +4 -4
  135. data/src/core/ext/xds/xds_channel_args.h +5 -2
  136. data/src/core/ext/xds/xds_client.cc +310 -178
  137. data/src/core/ext/xds/xds_client.h +41 -27
  138. data/src/core/ext/xds/xds_client_stats.h +3 -2
  139. data/src/core/ext/xds/xds_server_config_fetcher.cc +34 -20
  140. data/src/core/lib/{iomgr → address_utils}/parse_address.cc +17 -17
  141. data/src/core/lib/{iomgr → address_utils}/parse_address.h +7 -7
  142. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.cc +3 -20
  143. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +6 -11
  144. data/src/core/lib/channel/channel_stack.cc +10 -9
  145. data/src/core/lib/channel/channel_stack.h +10 -9
  146. data/src/core/lib/channel/channel_stack_builder.cc +2 -2
  147. data/src/core/lib/channel/channel_stack_builder.h +1 -1
  148. data/src/core/lib/channel/channelz.cc +21 -13
  149. data/src/core/lib/channel/connected_channel.cc +4 -4
  150. data/src/core/lib/channel/handshaker.cc +7 -6
  151. data/src/core/lib/channel/handshaker.h +5 -5
  152. data/src/core/lib/event_engine/slice_allocator.cc +59 -0
  153. data/src/core/lib/event_engine/sockaddr.cc +38 -0
  154. data/src/core/lib/gprpp/ref_counted.h +28 -14
  155. data/src/core/lib/gprpp/status_helper.cc +407 -0
  156. data/src/core/lib/gprpp/status_helper.h +180 -0
  157. data/src/core/lib/http/httpcli.cc +11 -11
  158. data/src/core/lib/http/httpcli_security_connector.cc +11 -7
  159. data/src/core/lib/http/parser.cc +16 -16
  160. data/src/core/lib/http/parser.h +4 -4
  161. data/src/core/lib/iomgr/buffer_list.cc +7 -9
  162. data/src/core/lib/iomgr/buffer_list.h +4 -5
  163. data/src/core/lib/iomgr/call_combiner.cc +15 -12
  164. data/src/core/lib/iomgr/call_combiner.h +12 -14
  165. data/src/core/lib/iomgr/cfstream_handle.cc +3 -3
  166. data/src/core/lib/iomgr/cfstream_handle.h +1 -1
  167. data/src/core/lib/iomgr/closure.h +7 -6
  168. data/src/core/lib/iomgr/combiner.cc +14 -12
  169. data/src/core/lib/iomgr/combiner.h +2 -2
  170. data/src/core/lib/iomgr/endpoint.cc +1 -1
  171. data/src/core/lib/iomgr/endpoint.h +2 -2
  172. data/src/core/lib/iomgr/endpoint_cfstream.cc +11 -13
  173. data/src/core/lib/iomgr/endpoint_pair_windows.cc +1 -1
  174. data/src/core/lib/iomgr/error.cc +167 -61
  175. data/src/core/lib/iomgr/error.h +217 -106
  176. data/src/core/lib/iomgr/error_cfstream.cc +3 -2
  177. data/src/core/lib/iomgr/error_cfstream.h +2 -2
  178. data/src/core/lib/iomgr/error_internal.h +5 -1
  179. data/src/core/lib/iomgr/ev_apple.cc +5 -5
  180. data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -19
  181. data/src/core/lib/iomgr/ev_epollex_linux.cc +48 -45
  182. data/src/core/lib/iomgr/ev_poll_posix.cc +26 -23
  183. data/src/core/lib/iomgr/ev_posix.cc +9 -8
  184. data/src/core/lib/iomgr/ev_posix.h +9 -9
  185. data/src/core/lib/iomgr/exec_ctx.cc +4 -4
  186. data/src/core/lib/iomgr/exec_ctx.h +1 -1
  187. data/src/core/lib/iomgr/executor.cc +8 -8
  188. data/src/core/lib/iomgr/executor.h +2 -2
  189. data/src/core/lib/iomgr/iomgr.cc +1 -1
  190. data/src/core/lib/iomgr/iomgr.h +1 -1
  191. data/src/core/lib/iomgr/iomgr_custom.cc +1 -1
  192. data/src/core/lib/iomgr/iomgr_internal.cc +2 -2
  193. data/src/core/lib/iomgr/iomgr_internal.h +3 -3
  194. data/src/core/lib/iomgr/iomgr_posix.cc +1 -1
  195. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -2
  196. data/src/core/lib/iomgr/iomgr_windows.cc +1 -1
  197. data/src/core/lib/iomgr/load_file.cc +4 -4
  198. data/src/core/lib/iomgr/load_file.h +2 -2
  199. data/src/core/lib/iomgr/lockfree_event.cc +5 -5
  200. data/src/core/lib/iomgr/lockfree_event.h +1 -1
  201. data/src/core/lib/iomgr/pollset.cc +5 -5
  202. data/src/core/lib/iomgr/pollset.h +9 -9
  203. data/src/core/lib/iomgr/pollset_custom.cc +5 -5
  204. data/src/core/lib/iomgr/pollset_windows.cc +5 -5
  205. data/src/core/lib/iomgr/port.h +1 -1
  206. data/src/core/lib/iomgr/python_util.h +1 -1
  207. data/src/core/lib/iomgr/resolve_address.cc +3 -3
  208. data/src/core/lib/iomgr/resolve_address.h +6 -6
  209. data/src/core/lib/iomgr/resolve_address_custom.cc +10 -9
  210. data/src/core/lib/iomgr/resolve_address_custom.h +3 -3
  211. data/src/core/lib/iomgr/resolve_address_posix.cc +3 -3
  212. data/src/core/lib/iomgr/resolve_address_windows.cc +4 -4
  213. data/src/core/lib/iomgr/resource_quota.cc +11 -10
  214. data/src/core/lib/iomgr/socket_utils_common_posix.cc +22 -20
  215. data/src/core/lib/iomgr/socket_utils_posix.h +20 -20
  216. data/src/core/lib/iomgr/tcp_client_cfstream.cc +4 -4
  217. data/src/core/lib/iomgr/tcp_client_custom.cc +5 -6
  218. data/src/core/lib/iomgr/tcp_client_posix.cc +15 -17
  219. data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
  220. data/src/core/lib/iomgr/tcp_client_windows.cc +5 -5
  221. data/src/core/lib/iomgr/tcp_custom.cc +14 -16
  222. data/src/core/lib/iomgr/tcp_custom.h +13 -12
  223. data/src/core/lib/iomgr/tcp_posix.cc +36 -34
  224. data/src/core/lib/iomgr/tcp_server.cc +6 -6
  225. data/src/core/lib/iomgr/tcp_server.h +12 -11
  226. data/src/core/lib/iomgr/tcp_server_custom.cc +23 -21
  227. data/src/core/lib/iomgr/tcp_server_posix.cc +22 -21
  228. data/src/core/lib/iomgr/tcp_server_utils_posix.h +13 -12
  229. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +19 -17
  230. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +9 -9
  231. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
  232. data/src/core/lib/iomgr/tcp_server_windows.cc +26 -25
  233. data/src/core/lib/iomgr/tcp_uv.cc +25 -23
  234. data/src/core/lib/iomgr/tcp_windows.cc +13 -13
  235. data/src/core/lib/iomgr/tcp_windows.h +2 -2
  236. data/src/core/lib/iomgr/timer_custom.cc +2 -1
  237. data/src/core/lib/iomgr/timer_custom.h +1 -1
  238. data/src/core/lib/iomgr/timer_generic.cc +6 -6
  239. data/src/core/lib/iomgr/udp_server.cc +21 -20
  240. data/src/core/lib/iomgr/unix_sockets_posix.cc +3 -3
  241. data/src/core/lib/iomgr/unix_sockets_posix.h +2 -2
  242. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +10 -7
  243. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
  244. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +4 -4
  245. data/src/core/lib/iomgr/wakeup_fd_posix.cc +3 -3
  246. data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
  247. data/src/core/lib/iomgr/work_serializer.h +17 -1
  248. data/src/core/lib/json/json.h +1 -1
  249. data/src/core/lib/json/json_reader.cc +4 -4
  250. data/src/core/lib/matchers/matchers.cc +39 -39
  251. data/src/core/lib/matchers/matchers.h +28 -28
  252. data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
  253. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
  254. data/src/core/lib/security/credentials/credentials.h +2 -2
  255. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +17 -13
  256. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +13 -11
  257. data/src/core/lib/security/credentials/external/aws_request_signer.cc +2 -1
  258. data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -1
  259. data/src/core/lib/security/credentials/external/external_account_credentials.cc +15 -12
  260. data/src/core/lib/security/credentials/external/external_account_credentials.h +9 -8
  261. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -4
  262. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -3
  263. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +8 -8
  264. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +9 -7
  265. data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -2
  266. data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
  267. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +9 -9
  268. data/src/core/lib/security/credentials/iam/iam_credentials.cc +2 -2
  269. data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
  270. data/src/core/lib/security/credentials/jwt/json_token.cc +2 -2
  271. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -3
  272. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
  273. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +7 -5
  274. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +21 -19
  275. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -5
  276. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +5 -5
  277. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -2
  278. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +8 -7
  279. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -9
  280. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +19 -13
  281. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -0
  282. data/src/core/lib/security/credentials/xds/xds_credentials.cc +3 -3
  283. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -3
  284. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -3
  285. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
  286. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +12 -2
  287. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -1
  288. data/src/core/lib/security/security_connector/local/local_security_connector.cc +14 -4
  289. data/src/core/lib/security/security_connector/security_connector.h +9 -4
  290. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +16 -6
  291. data/src/core/lib/security/security_connector/ssl_utils.cc +22 -4
  292. data/src/core/lib/security/security_connector/ssl_utils.h +4 -4
  293. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +56 -60
  294. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +66 -48
  295. data/src/core/lib/security/transport/client_auth_filter.cc +18 -10
  296. data/src/core/lib/security/transport/secure_endpoint.cc +4 -4
  297. data/src/core/lib/security/transport/security_handshaker.cc +33 -32
  298. data/src/core/lib/security/transport/server_auth_filter.cc +19 -13
  299. data/src/core/lib/security/transport/tsi_error.cc +2 -1
  300. data/src/core/lib/security/transport/tsi_error.h +2 -1
  301. data/src/core/lib/security/util/json_util.cc +2 -2
  302. data/src/core/lib/security/util/json_util.h +1 -1
  303. data/src/core/lib/surface/call.cc +46 -45
  304. data/src/core/lib/surface/call.h +2 -2
  305. data/src/core/lib/surface/channel.cc +6 -6
  306. data/src/core/lib/surface/channel.h +3 -2
  307. data/src/core/lib/surface/channel_ping.cc +1 -1
  308. data/src/core/lib/surface/completion_queue.cc +46 -47
  309. data/src/core/lib/surface/completion_queue.h +2 -1
  310. data/src/core/lib/surface/lame_client.cc +11 -11
  311. data/src/core/lib/surface/lame_client.h +1 -1
  312. data/src/core/lib/surface/server.cc +28 -22
  313. data/src/core/lib/surface/server.h +16 -15
  314. data/src/core/lib/surface/validate_metadata.cc +7 -7
  315. data/src/core/lib/surface/validate_metadata.h +3 -2
  316. data/src/core/lib/surface/version.cc +4 -2
  317. data/src/core/lib/transport/byte_stream.cc +5 -5
  318. data/src/core/lib/transport/byte_stream.h +8 -8
  319. data/src/core/lib/transport/connectivity_state.cc +1 -1
  320. data/src/core/lib/transport/error_utils.cc +19 -8
  321. data/src/core/lib/transport/error_utils.h +11 -5
  322. data/src/core/lib/transport/metadata_batch.cc +37 -37
  323. data/src/core/lib/transport/metadata_batch.h +19 -18
  324. data/src/core/lib/transport/transport.cc +4 -3
  325. data/src/core/lib/transport/transport.h +4 -4
  326. data/src/core/lib/transport/transport_op_string.cc +5 -5
  327. data/src/core/tsi/alts/crypt/gsec.h +4 -0
  328. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +5 -4
  329. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +7 -6
  330. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
  331. data/src/core/tsi/ssl_transport_security.cc +32 -14
  332. data/src/core/tsi/ssl_transport_security.h +3 -4
  333. data/src/ruby/bin/math_services_pb.rb +1 -1
  334. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
  335. data/src/ruby/lib/grpc/version.rb +1 -1
  336. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +1 -1
  337. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +6 -6
  338. data/third_party/abseil-cpp/absl/algorithm/container.h +3 -3
  339. data/third_party/abseil-cpp/absl/base/attributes.h +24 -4
  340. data/third_party/abseil-cpp/absl/base/call_once.h +2 -9
  341. data/third_party/abseil-cpp/absl/base/config.h +37 -9
  342. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +24 -10
  343. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +4 -1
  344. data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
  345. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +2 -3
  346. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +34 -32
  347. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +16 -6
  348. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +11 -2
  349. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +14 -5
  350. data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
  351. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +3 -3
  352. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
  353. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +11 -11
  354. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
  355. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -1
  356. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +5 -2
  357. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +43 -42
  358. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
  359. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
  360. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -3
  361. data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
  362. data/third_party/abseil-cpp/absl/base/macros.h +11 -0
  363. data/third_party/abseil-cpp/absl/base/optimization.h +10 -7
  364. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  365. data/third_party/abseil-cpp/absl/base/port.h +0 -1
  366. data/third_party/abseil-cpp/absl/base/thread_annotations.h +1 -1
  367. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -2
  368. data/third_party/abseil-cpp/absl/container/inlined_vector.h +5 -3
  369. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +1 -1
  370. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +5 -1
  371. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +2 -1
  372. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +2 -1
  373. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +141 -66
  374. data/third_party/abseil-cpp/absl/container/internal/layout.h +4 -4
  375. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -1
  376. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +136 -136
  377. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +16 -12
  378. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +5 -2
  379. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +3 -12
  380. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +6 -1
  381. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +3 -5
  382. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +2 -2
  383. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +2 -2
  384. data/third_party/abseil-cpp/absl/hash/internal/city.cc +15 -12
  385. data/third_party/abseil-cpp/absl/hash/internal/city.h +1 -19
  386. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +25 -10
  387. data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -37
  388. data/third_party/abseil-cpp/absl/hash/internal/wyhash.cc +111 -0
  389. data/third_party/abseil-cpp/absl/hash/internal/wyhash.h +48 -0
  390. data/third_party/abseil-cpp/absl/meta/type_traits.h +16 -2
  391. data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
  392. data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -3
  393. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
  394. data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
  395. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
  396. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -7
  397. data/third_party/abseil-cpp/absl/status/status.cc +29 -22
  398. data/third_party/abseil-cpp/absl/status/status.h +81 -20
  399. data/third_party/abseil-cpp/absl/status/statusor.h +3 -3
  400. data/third_party/abseil-cpp/absl/strings/charconv.cc +5 -5
  401. data/third_party/abseil-cpp/absl/strings/cord.cc +326 -371
  402. data/third_party/abseil-cpp/absl/strings/cord.h +182 -64
  403. data/third_party/abseil-cpp/absl/strings/escaping.cc +4 -4
  404. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +6 -6
  405. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +83 -0
  406. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +387 -17
  407. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
  408. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +897 -0
  409. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +589 -0
  410. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +114 -0
  411. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +14 -0
  412. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -0
  413. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +15 -1
  414. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +19 -4
  415. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +14 -0
  416. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +36 -18
  417. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +14 -0
  418. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +14 -0
  419. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -0
  420. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +15 -40
  421. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
  422. data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
  423. data/third_party/abseil-cpp/absl/strings/match.h +16 -6
  424. data/third_party/abseil-cpp/absl/strings/numbers.cc +132 -4
  425. data/third_party/abseil-cpp/absl/strings/numbers.h +10 -10
  426. data/third_party/abseil-cpp/absl/strings/str_join.h +1 -1
  427. data/third_party/abseil-cpp/absl/strings/str_split.h +38 -4
  428. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
  429. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -1
  430. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +2 -2
  431. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +4 -4
  432. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -65
  433. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -6
  434. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +71 -59
  435. data/third_party/abseil-cpp/absl/synchronization/mutex.h +79 -62
  436. data/third_party/abseil-cpp/absl/time/clock.cc +146 -130
  437. data/third_party/abseil-cpp/absl/time/clock.h +2 -2
  438. data/third_party/abseil-cpp/absl/time/duration.cc +3 -2
  439. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +7 -11
  440. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +7 -1
  441. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +4 -4
  442. data/third_party/abseil-cpp/absl/time/time.cc +4 -3
  443. data/third_party/abseil-cpp/absl/time/time.h +26 -24
  444. data/third_party/abseil-cpp/absl/types/internal/variant.h +1 -1
  445. data/third_party/abseil-cpp/absl/types/variant.h +9 -4
  446. data/third_party/boringssl-with-bazel/err_data.c +477 -461
  447. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +1 -1
  448. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +1 -1
  449. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +18 -8
  450. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -2
  451. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +5 -0
  452. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -1
  453. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +1 -1
  454. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
  455. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +14 -3
  456. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +119 -273
  457. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
  458. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
  459. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +1 -1
  460. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +11 -3
  461. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +25 -2
  462. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +10 -2
  463. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +4 -43
  464. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +4 -0
  465. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +0 -1
  466. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +0 -4
  467. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +104 -93
  468. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
  469. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +43 -46
  470. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +43 -46
  471. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +33 -22
  472. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +9 -8
  473. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +9 -8
  474. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +17 -13
  475. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +1 -22
  476. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -1
  477. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +26 -7
  478. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
  479. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +14 -9
  480. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +45 -48
  481. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +38 -43
  482. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +37 -45
  483. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +103 -42
  484. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +58 -37
  485. data/third_party/boringssl-with-bazel/src/crypto/internal.h +65 -0
  486. data/third_party/boringssl-with-bazel/src/crypto/mem.c +14 -0
  487. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +3 -3
  488. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +1 -1
  489. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +95 -48
  490. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +1 -1
  491. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
  492. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +19 -0
  493. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
  494. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +19 -25
  495. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +3 -2
  496. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +39 -89
  497. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +9 -16
  498. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +1 -1
  499. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -17
  500. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +7 -25
  501. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +5 -0
  502. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +25 -22
  503. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
  504. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -4
  505. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
  506. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -0
  507. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +0 -3
  508. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +120 -41
  509. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +9 -0
  510. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +0 -8
  511. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +24 -4
  512. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +5 -2
  513. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +19 -0
  514. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +3 -2
  515. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +1 -38
  516. data/third_party/boringssl-with-bazel/src/{crypto/x509/x509_r2x.c → include/openssl/evp_errors.h} +41 -58
  517. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +24 -5
  518. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +2 -0
  519. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +9 -1
  520. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +2 -2
  521. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +185 -17
  522. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +1 -0
  523. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +416 -121
  524. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +2 -0
  525. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +5 -0
  526. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +444 -0
  527. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +244 -1
  528. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +43 -12
  529. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +149 -8
  530. data/third_party/boringssl-with-bazel/src/ssl/internal.h +220 -46
  531. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +7 -1
  532. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -6
  533. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +23 -26
  534. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +74 -15
  535. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +98 -64
  536. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +34 -4
  537. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +205 -100
  538. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
  539. metadata +68 -45
  540. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -88
  541. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
  542. data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -219
  543. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +0 -249
  544. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +0 -29
@@ -386,24 +386,28 @@ static bool IsDigit(char c) { return c >= '0' && c <= '9'; }
386
386
  // by GCC 4.5.x and later versions (and our locally-modified version of GCC
387
387
  // 4.4.x) to indicate functions which have been cloned during optimization.
388
388
  // We treat any sequence (.<alpha>+.<digit>+)+ as a function clone suffix.
389
+ // Additionally, '_' is allowed along with the alphanumeric sequence.
389
390
  static bool IsFunctionCloneSuffix(const char *str) {
390
391
  size_t i = 0;
391
392
  while (str[i] != '\0') {
392
- // Consume a single .<alpha>+.<digit>+ sequence.
393
- if (str[i] != '.' || !IsAlpha(str[i + 1])) {
394
- return false;
393
+ bool parsed = false;
394
+ // Consume a single [.<alpha> | _]*[.<digit>]* sequence.
395
+ if (str[i] == '.' && (IsAlpha(str[i + 1]) || str[i + 1] == '_')) {
396
+ parsed = true;
397
+ i += 2;
398
+ while (IsAlpha(str[i]) || str[i] == '_') {
399
+ ++i;
400
+ }
395
401
  }
396
- i += 2;
397
- while (IsAlpha(str[i])) {
398
- ++i;
402
+ if (str[i] == '.' && IsDigit(str[i + 1])) {
403
+ parsed = true;
404
+ i += 2;
405
+ while (IsDigit(str[i])) {
406
+ ++i;
407
+ }
399
408
  }
400
- if (str[i] != '.' || !IsDigit(str[i + 1])) {
409
+ if (!parsed)
401
410
  return false;
402
- }
403
- i += 2;
404
- while (IsDigit(str[i])) {
405
- ++i;
406
- }
407
411
  }
408
412
  return true; // Consumed everything in "str".
409
413
  }
@@ -37,8 +37,11 @@ static const unsigned char* GetKernelRtSigreturnAddress() {
37
37
  absl::debugging_internal::VDSOSupport vdso;
38
38
  if (vdso.IsPresent()) {
39
39
  absl::debugging_internal::VDSOSupport::SymbolInfo symbol_info;
40
- if (!vdso.LookupSymbol("__kernel_rt_sigreturn", "LINUX_2.6.39", STT_FUNC,
41
- &symbol_info) ||
40
+ auto lookup = [&](int type) {
41
+ return vdso.LookupSymbol("__kernel_rt_sigreturn", "LINUX_2.6.39", type,
42
+ &symbol_info);
43
+ };
44
+ if ((!lookup(STT_FUNC) && !lookup(STT_NOTYPE)) ||
42
45
  symbol_info.address == nullptr) {
43
46
  // Unexpected: VDSO is present, yet the expected symbol is missing
44
47
  // or null.
@@ -21,6 +21,8 @@
21
21
  #ifndef ABSL_DEBUGGING_INTERNAL_STACKTRACE_CONFIG_H_
22
22
  #define ABSL_DEBUGGING_INTERNAL_STACKTRACE_CONFIG_H_
23
23
 
24
+ #include "absl/base/config.h"
25
+
24
26
  #if defined(ABSL_STACKTRACE_INL_HEADER)
25
27
  #error ABSL_STACKTRACE_INL_HEADER cannot be directly set
26
28
 
@@ -29,19 +31,8 @@
29
31
  "absl/debugging/internal/stacktrace_win32-inl.inc"
30
32
 
31
33
  #elif defined(__APPLE__)
34
+ #ifdef ABSL_HAVE_THREAD_LOCAL
32
35
  // Thread local support required for UnwindImpl.
33
- // Notes:
34
- // * Xcode's clang did not support `thread_local` until version 8, and
35
- // even then not for all iOS < 9.0.
36
- // * Xcode 9.3 started disallowing `thread_local` for 32-bit iOS simulator
37
- // targeting iOS 9.x.
38
- // * Xcode 10 moves the deployment target check for iOS < 9.0 to link time
39
- // making __has_feature unreliable there.
40
- //
41
- // Otherwise, `__has_feature` is only supported by Clang so it has be inside
42
- // `defined(__APPLE__)` check.
43
- #if __has_feature(cxx_thread_local) && \
44
- !(TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_9_0)
45
36
  #define ABSL_STACKTRACE_INL_HEADER \
46
37
  "absl/debugging/internal/stacktrace_generic-inl.inc"
47
38
  #endif
@@ -131,7 +131,12 @@ static void **NextStackFrame(void **old_sp, const void *uc) {
131
131
  const ucontext_t* signal_context =
132
132
  reinterpret_cast<const ucontext_t*>(uc);
133
133
  void **const sp_before_signal =
134
- reinterpret_cast<void**>(signal_context->uc_mcontext.gp_regs[PT_R1]);
134
+ #if defined(__PPC64__)
135
+ reinterpret_cast<void **>(signal_context->uc_mcontext.gp_regs[PT_R1]);
136
+ #else
137
+ reinterpret_cast<void **>(
138
+ signal_context->uc_mcontext.uc_regs->gregs[PT_R1]);
139
+ #endif
135
140
  // Check that alleged sp before signal is nonnull and is reasonably
136
141
  // aligned.
137
142
  if (sp_before_signal != nullptr &&
@@ -118,16 +118,14 @@ bool RemoveAllSymbolDecorators(void);
118
118
  // filename != nullptr
119
119
  //
120
120
  // Returns true if the file was successfully registered.
121
- bool RegisterFileMappingHint(
122
- const void* start, const void* end, uint64_t offset, const char* filename);
121
+ bool RegisterFileMappingHint(const void* start, const void* end,
122
+ uint64_t offset, const char* filename);
123
123
 
124
124
  // Looks up the file mapping registered by RegisterFileMappingHint for an
125
125
  // address range. If there is one, the file name is stored in *filename and
126
126
  // *start and *end are modified to reflect the registered mapping. Returns
127
127
  // whether any hint was found.
128
- bool GetFileMappingHint(const void** start,
129
- const void** end,
130
- uint64_t * offset,
128
+ bool GetFileMappingHint(const void** start, const void** end, uint64_t* offset,
131
129
  const char** filename);
132
130
 
133
131
  } // namespace debugging_internal
@@ -77,8 +77,8 @@ bool Symbolize(const void* pc, char* out, int out_size) {
77
77
 
78
78
  char tmp_buf[1024];
79
79
  if (debugging_internal::Demangle(symbol.c_str(), tmp_buf, sizeof(tmp_buf))) {
80
- int len = strlen(tmp_buf);
81
- if (len + 1 <= out_size) { // +1 for '\0'
80
+ size_t len = strlen(tmp_buf);
81
+ if (len + 1 <= static_cast<size_t>(out_size)) { // +1 for '\0'
82
82
  assert(len < sizeof(tmp_buf));
83
83
  memmove(out, tmp_buf, len + 1);
84
84
  }
@@ -1281,7 +1281,7 @@ static bool MaybeInitializeObjFile(ObjFile *obj) {
1281
1281
  const int phnum = obj->elf_header.e_phnum;
1282
1282
  const int phentsize = obj->elf_header.e_phentsize;
1283
1283
  size_t phoff = obj->elf_header.e_phoff;
1284
- int num_executable_load_segments = 0;
1284
+ size_t num_executable_load_segments = 0;
1285
1285
  for (int j = 0; j < phnum; j++) {
1286
1286
  ElfW(Phdr) phdr;
1287
1287
  if (!ReadFromOffsetExact(obj->fd, &phdr, sizeof(phdr), phoff)) {
@@ -1342,7 +1342,7 @@ const char *Symbolizer::GetSymbol(const void *const pc) {
1342
1342
  // Note: some binaries have multiple "rx" LOAD segments. We must
1343
1343
  // find the right one.
1344
1344
  ElfW(Phdr) *phdr = nullptr;
1345
- for (int j = 0; j < obj->phdr.size(); j++) {
1345
+ for (size_t j = 0; j < obj->phdr.size(); j++) {
1346
1346
  ElfW(Phdr) &p = obj->phdr[j];
1347
1347
  if (p.p_type != PT_LOAD) {
1348
1348
  // We only expect PT_LOADs. This must be PT_NULL that we didn't
@@ -200,10 +200,6 @@ static uint64_t Rotate(uint64_t val, int shift) {
200
200
 
201
201
  static uint64_t ShiftMix(uint64_t val) { return val ^ (val >> 47); }
202
202
 
203
- static uint64_t HashLen16(uint64_t u, uint64_t v) {
204
- return Hash128to64(uint128(u, v));
205
- }
206
-
207
203
  static uint64_t HashLen16(uint64_t u, uint64_t v, uint64_t mul) {
208
204
  // Murmur-inspired hashing.
209
205
  uint64_t a = (u ^ v) * mul;
@@ -214,6 +210,11 @@ static uint64_t HashLen16(uint64_t u, uint64_t v, uint64_t mul) {
214
210
  return b;
215
211
  }
216
212
 
213
+ static uint64_t HashLen16(uint64_t u, uint64_t v) {
214
+ const uint64_t kMul = 0x9ddfea08eb382d69ULL;
215
+ return HashLen16(u, v, kMul);
216
+ }
217
+
217
218
  static uint64_t HashLen0to16(const char *s, size_t len) {
218
219
  if (len >= 8) {
219
220
  uint64_t mul = k2 + len * 2;
@@ -253,9 +254,8 @@ static uint64_t HashLen17to32(const char *s, size_t len) {
253
254
 
254
255
  // Return a 16-byte hash for 48 bytes. Quick and dirty.
255
256
  // Callers do best to use "random-looking" values for a and b.
256
- static std::pair<uint64_t, uint64_t> WeakHashLen32WithSeeds(uint64_t w, uint64_t x,
257
- uint64_t y, uint64_t z,
258
- uint64_t a, uint64_t b) {
257
+ static std::pair<uint64_t, uint64_t> WeakHashLen32WithSeeds(
258
+ uint64_t w, uint64_t x, uint64_t y, uint64_t z, uint64_t a, uint64_t b) {
259
259
  a += w;
260
260
  b = Rotate(b + a + z, 21);
261
261
  uint64_t c = a;
@@ -266,8 +266,9 @@ static std::pair<uint64_t, uint64_t> WeakHashLen32WithSeeds(uint64_t w, uint64_t
266
266
  }
267
267
 
268
268
  // Return a 16-byte hash for s[0] ... s[31], a, and b. Quick and dirty.
269
- static std::pair<uint64_t, uint64_t> WeakHashLen32WithSeeds(const char *s, uint64_t a,
270
- uint64_t b) {
269
+ static std::pair<uint64_t, uint64_t> WeakHashLen32WithSeeds(const char *s,
270
+ uint64_t a,
271
+ uint64_t b) {
271
272
  return WeakHashLen32WithSeeds(Fetch64(s), Fetch64(s + 8), Fetch64(s + 16),
272
273
  Fetch64(s + 24), a, b);
273
274
  }
@@ -310,8 +311,10 @@ uint64_t CityHash64(const char *s, size_t len) {
310
311
  uint64_t x = Fetch64(s + len - 40);
311
312
  uint64_t y = Fetch64(s + len - 16) + Fetch64(s + len - 56);
312
313
  uint64_t z = HashLen16(Fetch64(s + len - 48) + len, Fetch64(s + len - 24));
313
- std::pair<uint64_t, uint64_t> v = WeakHashLen32WithSeeds(s + len - 64, len, z);
314
- std::pair<uint64_t, uint64_t> w = WeakHashLen32WithSeeds(s + len - 32, y + k1, x);
314
+ std::pair<uint64_t, uint64_t> v =
315
+ WeakHashLen32WithSeeds(s + len - 64, len, z);
316
+ std::pair<uint64_t, uint64_t> w =
317
+ WeakHashLen32WithSeeds(s + len - 32, y + k1, x);
315
318
  x = x * k1 + Fetch64(s);
316
319
 
317
320
  // Decrease len to the nearest multiple of 64, and operate on 64-byte chunks.
@@ -337,7 +340,7 @@ uint64_t CityHash64WithSeed(const char *s, size_t len, uint64_t seed) {
337
340
  }
338
341
 
339
342
  uint64_t CityHash64WithSeeds(const char *s, size_t len, uint64_t seed0,
340
- uint64_t seed1) {
343
+ uint64_t seed1) {
341
344
  return HashLen16(CityHash64(s, len) - seed0, seed1);
342
345
  }
343
346
 
@@ -56,11 +56,6 @@ namespace absl {
56
56
  ABSL_NAMESPACE_BEGIN
57
57
  namespace hash_internal {
58
58
 
59
- typedef std::pair<uint64_t, uint64_t> uint128;
60
-
61
- inline uint64_t Uint128Low64(const uint128 &x) { return x.first; }
62
- inline uint64_t Uint128High64(const uint128 &x) { return x.second; }
63
-
64
59
  // Hash function for a byte array.
65
60
  uint64_t CityHash64(const char *s, size_t len);
66
61
 
@@ -71,24 +66,11 @@ uint64_t CityHash64WithSeed(const char *s, size_t len, uint64_t seed);
71
66
  // Hash function for a byte array. For convenience, two seeds are also
72
67
  // hashed into the result.
73
68
  uint64_t CityHash64WithSeeds(const char *s, size_t len, uint64_t seed0,
74
- uint64_t seed1);
69
+ uint64_t seed1);
75
70
 
76
71
  // Hash function for a byte array. Most useful in 32-bit binaries.
77
72
  uint32_t CityHash32(const char *s, size_t len);
78
73
 
79
- // Hash 128 input bits down to 64 bits of output.
80
- // This is intended to be a reasonably good hash function.
81
- inline uint64_t Hash128to64(const uint128 &x) {
82
- // Murmur-inspired hashing.
83
- const uint64_t kMul = 0x9ddfea08eb382d69ULL;
84
- uint64_t a = (Uint128Low64(x) ^ Uint128High64(x)) * kMul;
85
- a ^= (a >> 47);
86
- uint64_t b = (Uint128High64(x) ^ a) * kMul;
87
- b ^= (b >> 47);
88
- b *= kMul;
89
- return b;
90
- }
91
-
92
74
  } // namespace hash_internal
93
75
  ABSL_NAMESPACE_END
94
76
  } // namespace absl
@@ -18,9 +18,9 @@ namespace absl {
18
18
  ABSL_NAMESPACE_BEGIN
19
19
  namespace hash_internal {
20
20
 
21
- uint64_t CityHashState::CombineLargeContiguousImpl32(uint64_t state,
22
- const unsigned char* first,
23
- size_t len) {
21
+ uint64_t HashState::CombineLargeContiguousImpl32(uint64_t state,
22
+ const unsigned char* first,
23
+ size_t len) {
24
24
  while (len >= PiecewiseChunkSize()) {
25
25
  state =
26
26
  Mix(state, absl::hash_internal::CityHash32(reinterpret_cast<const char*>(first),
@@ -33,13 +33,11 @@ uint64_t CityHashState::CombineLargeContiguousImpl32(uint64_t state,
33
33
  std::integral_constant<int, 4>{});
34
34
  }
35
35
 
36
- uint64_t CityHashState::CombineLargeContiguousImpl64(uint64_t state,
37
- const unsigned char* first,
38
- size_t len) {
36
+ uint64_t HashState::CombineLargeContiguousImpl64(uint64_t state,
37
+ const unsigned char* first,
38
+ size_t len) {
39
39
  while (len >= PiecewiseChunkSize()) {
40
- state =
41
- Mix(state, absl::hash_internal::CityHash64(reinterpret_cast<const char*>(first),
42
- PiecewiseChunkSize()));
40
+ state = Mix(state, Hash64(first, PiecewiseChunkSize()));
43
41
  len -= PiecewiseChunkSize();
44
42
  first += PiecewiseChunkSize();
45
43
  }
@@ -48,7 +46,24 @@ uint64_t CityHashState::CombineLargeContiguousImpl64(uint64_t state,
48
46
  std::integral_constant<int, 8>{});
49
47
  }
50
48
 
51
- ABSL_CONST_INIT const void* const CityHashState::kSeed = &kSeed;
49
+ ABSL_CONST_INIT const void* const HashState::kSeed = &kSeed;
50
+
51
+ // The salt array used by Wyhash. This array is NOT the mechanism used to make
52
+ // absl::Hash non-deterministic between program invocations. See `Seed()` for
53
+ // that mechanism.
54
+ //
55
+ // Any random values are fine. These values are just digits from the decimal
56
+ // part of pi.
57
+ // https://en.wikipedia.org/wiki/Nothing-up-my-sleeve_number
58
+ constexpr uint64_t kWyhashSalt[5] = {
59
+ uint64_t{0x243F6A8885A308D3}, uint64_t{0x13198A2E03707344},
60
+ uint64_t{0xA4093822299F31D0}, uint64_t{0x082EFA98EC4E6C89},
61
+ uint64_t{0x452821E638D01377},
62
+ };
63
+
64
+ uint64_t HashState::WyhashImpl(const unsigned char* data, size_t len) {
65
+ return Wyhash(data, len, Seed(), kWyhashSalt);
66
+ }
52
67
 
53
68
  } // namespace hash_internal
54
69
  ABSL_NAMESPACE_END
@@ -38,9 +38,11 @@
38
38
  #include <utility>
39
39
  #include <vector>
40
40
 
41
- #include "absl/base/internal/endian.h"
41
+ #include "absl/base/config.h"
42
+ #include "absl/base/internal/unaligned_access.h"
42
43
  #include "absl/base/port.h"
43
44
  #include "absl/container/fixed_array.h"
45
+ #include "absl/hash/internal/wyhash.h"
44
46
  #include "absl/meta/type_traits.h"
45
47
  #include "absl/numeric/int128.h"
46
48
  #include "absl/strings/string_view.h"
@@ -712,9 +714,8 @@ template <typename T>
712
714
  struct is_hashable
713
715
  : std::integral_constant<bool, HashSelect::template Apply<T>::value> {};
714
716
 
715
- // CityHashState
716
- class ABSL_DLL CityHashState
717
- : public HashStateBase<CityHashState> {
717
+ // HashState
718
+ class ABSL_DLL HashState : public HashStateBase<HashState> {
718
719
  // absl::uint128 is not an alias or a thin wrapper around the intrinsic.
719
720
  // We use the intrinsic when available to improve performance.
720
721
  #ifdef ABSL_HAVE_INTRINSIC_INT128
@@ -733,23 +734,22 @@ class ABSL_DLL CityHashState
733
734
 
734
735
  public:
735
736
  // Move only
736
- CityHashState(CityHashState&&) = default;
737
- CityHashState& operator=(CityHashState&&) = default;
737
+ HashState(HashState&&) = default;
738
+ HashState& operator=(HashState&&) = default;
738
739
 
739
- // CityHashState::combine_contiguous()
740
+ // HashState::combine_contiguous()
740
741
  //
741
742
  // Fundamental base case for hash recursion: mixes the given range of bytes
742
743
  // into the hash state.
743
- static CityHashState combine_contiguous(CityHashState hash_state,
744
- const unsigned char* first,
745
- size_t size) {
746
- return CityHashState(
744
+ static HashState combine_contiguous(HashState hash_state,
745
+ const unsigned char* first, size_t size) {
746
+ return HashState(
747
747
  CombineContiguousImpl(hash_state.state_, first, size,
748
748
  std::integral_constant<int, sizeof(size_t)>{}));
749
749
  }
750
- using CityHashState::HashStateBase::combine_contiguous;
750
+ using HashState::HashStateBase::combine_contiguous;
751
751
 
752
- // CityHashState::hash()
752
+ // HashState::hash()
753
753
  //
754
754
  // For performance reasons in non-opt mode, we specialize this for
755
755
  // integral types.
@@ -761,24 +761,24 @@ class ABSL_DLL CityHashState
761
761
  return static_cast<size_t>(Mix(Seed(), static_cast<uint64_t>(value)));
762
762
  }
763
763
 
764
- // Overload of CityHashState::hash()
764
+ // Overload of HashState::hash()
765
765
  template <typename T, absl::enable_if_t<!IntegralFastPath<T>::value, int> = 0>
766
766
  static size_t hash(const T& value) {
767
- return static_cast<size_t>(combine(CityHashState{}, value).state_);
767
+ return static_cast<size_t>(combine(HashState{}, value).state_);
768
768
  }
769
769
 
770
770
  private:
771
771
  // Invoked only once for a given argument; that plus the fact that this is
772
772
  // move-only ensures that there is only one non-moved-from object.
773
- CityHashState() : state_(Seed()) {}
773
+ HashState() : state_(Seed()) {}
774
774
 
775
775
  // Workaround for MSVC bug.
776
776
  // We make the type copyable to fix the calling convention, even though we
777
777
  // never actually copy it. Keep it private to not affect the public API of the
778
778
  // type.
779
- CityHashState(const CityHashState&) = default;
779
+ HashState(const HashState&) = default;
780
780
 
781
- explicit CityHashState(uint64_t state) : state_(state) {}
781
+ explicit HashState(uint64_t state) : state_(state) {}
782
782
 
783
783
  // Implementation of the base case for combine_contiguous where we actually
784
784
  // mix the bytes into the state.
@@ -791,7 +791,8 @@ class ABSL_DLL CityHashState
791
791
  static uint64_t CombineContiguousImpl(uint64_t state,
792
792
  const unsigned char* first, size_t len,
793
793
  std::integral_constant<int, 8>
794
- /* sizeof_size_t*/);
794
+ /* sizeof_size_t */);
795
+
795
796
 
796
797
  // Slow dispatch path for calls to CombineContiguousImpl with a size argument
797
798
  // larger than PiecewiseChunkSize(). Has the same effect as calling
@@ -804,26 +805,54 @@ class ABSL_DLL CityHashState
804
805
  size_t len);
805
806
 
806
807
  // Reads 9 to 16 bytes from p.
807
- // The first 8 bytes are in .first, the rest (zero padded) bytes are in
808
- // .second.
808
+ // The least significant 8 bytes are in .first, the rest (zero padded) bytes
809
+ // are in .second.
809
810
  static std::pair<uint64_t, uint64_t> Read9To16(const unsigned char* p,
810
811
  size_t len) {
811
- uint64_t high = little_endian::Load64(p + len - 8);
812
- return {little_endian::Load64(p), high >> (128 - len * 8)};
812
+ uint64_t low_mem = absl::base_internal::UnalignedLoad64(p);
813
+ uint64_t high_mem = absl::base_internal::UnalignedLoad64(p + len - 8);
814
+ #ifdef ABSL_IS_LITTLE_ENDIAN
815
+ uint64_t most_significant = high_mem;
816
+ uint64_t least_significant = low_mem;
817
+ #else
818
+ uint64_t most_significant = low_mem;
819
+ uint64_t least_significant = high_mem;
820
+ #endif
821
+ return {least_significant, most_significant >> (128 - len * 8)};
813
822
  }
814
823
 
815
824
  // Reads 4 to 8 bytes from p. Zero pads to fill uint64_t.
816
825
  static uint64_t Read4To8(const unsigned char* p, size_t len) {
817
- return (static_cast<uint64_t>(little_endian::Load32(p + len - 4))
818
- << (len - 4) * 8) |
819
- little_endian::Load32(p);
826
+ uint32_t low_mem = absl::base_internal::UnalignedLoad32(p);
827
+ uint32_t high_mem = absl::base_internal::UnalignedLoad32(p + len - 4);
828
+ #ifdef ABSL_IS_LITTLE_ENDIAN
829
+ uint32_t most_significant = high_mem;
830
+ uint32_t least_significant = low_mem;
831
+ #else
832
+ uint32_t most_significant = low_mem;
833
+ uint32_t least_significant = high_mem;
834
+ #endif
835
+ return (static_cast<uint64_t>(most_significant) << (len - 4) * 8) |
836
+ least_significant;
820
837
  }
821
838
 
822
839
  // Reads 1 to 3 bytes from p. Zero pads to fill uint32_t.
823
840
  static uint32_t Read1To3(const unsigned char* p, size_t len) {
824
- return static_cast<uint32_t>((p[0]) | //
825
- (p[len / 2] << (len / 2 * 8)) | //
826
- (p[len - 1] << ((len - 1) * 8)));
841
+ unsigned char mem0 = p[0];
842
+ unsigned char mem1 = p[len / 2];
843
+ unsigned char mem2 = p[len - 1];
844
+ #ifdef ABSL_IS_LITTLE_ENDIAN
845
+ unsigned char significant2 = mem2;
846
+ unsigned char significant1 = mem1;
847
+ unsigned char significant0 = mem0;
848
+ #else
849
+ unsigned char significant2 = mem0;
850
+ unsigned char significant1 = mem1;
851
+ unsigned char significant0 = mem2;
852
+ #endif
853
+ return static_cast<uint32_t>(significant0 | //
854
+ (significant1 << (len / 2 * 8)) | //
855
+ (significant2 << ((len - 1) * 8)));
827
856
  }
828
857
 
829
858
  ABSL_ATTRIBUTE_ALWAYS_INLINE static uint64_t Mix(uint64_t state, uint64_t v) {
@@ -838,6 +867,19 @@ class ABSL_DLL CityHashState
838
867
  return static_cast<uint64_t>(m ^ (m >> (sizeof(m) * 8 / 2)));
839
868
  }
840
869
 
870
+ // An extern to avoid bloat on a direct call to Wyhash() with fixed values for
871
+ // both the seed and salt parameters.
872
+ static uint64_t WyhashImpl(const unsigned char* data, size_t len);
873
+
874
+ ABSL_ATTRIBUTE_ALWAYS_INLINE static uint64_t Hash64(const unsigned char* data,
875
+ size_t len) {
876
+ #ifdef ABSL_HAVE_INTRINSIC_INT128
877
+ return WyhashImpl(data, len);
878
+ #else
879
+ return absl::hash_internal::CityHash64(reinterpret_cast<const char*>(data), len);
880
+ #endif
881
+ }
882
+
841
883
  // Seed()
842
884
  //
843
885
  // A non-deterministic seed.
@@ -855,15 +897,22 @@ class ABSL_DLL CityHashState
855
897
  // On other platforms this is still going to be non-deterministic but most
856
898
  // probably per-build and not per-process.
857
899
  ABSL_ATTRIBUTE_ALWAYS_INLINE static uint64_t Seed() {
900
+ #if (!defined(__clang__) || __clang_major__ > 11) && \
901
+ !defined(__apple_build_version__)
902
+ return static_cast<uint64_t>(reinterpret_cast<uintptr_t>(&kSeed));
903
+ #else
904
+ // Workaround the absence of
905
+ // https://github.com/llvm/llvm-project/commit/bc15bf66dcca76cc06fe71fca35b74dc4d521021.
858
906
  return static_cast<uint64_t>(reinterpret_cast<uintptr_t>(kSeed));
907
+ #endif
859
908
  }
860
909
  static const void* const kSeed;
861
910
 
862
911
  uint64_t state_;
863
912
  };
864
913
 
865
- // CityHashState::CombineContiguousImpl()
866
- inline uint64_t CityHashState::CombineContiguousImpl(
914
+ // HashState::CombineContiguousImpl()
915
+ inline uint64_t HashState::CombineContiguousImpl(
867
916
  uint64_t state, const unsigned char* first, size_t len,
868
917
  std::integral_constant<int, 4> /* sizeof_size_t */) {
869
918
  // For large values we use CityHash, for small ones we just use a
@@ -885,18 +934,18 @@ inline uint64_t CityHashState::CombineContiguousImpl(
885
934
  return Mix(state, v);
886
935
  }
887
936
 
888
- // Overload of CityHashState::CombineContiguousImpl()
889
- inline uint64_t CityHashState::CombineContiguousImpl(
937
+ // Overload of HashState::CombineContiguousImpl()
938
+ inline uint64_t HashState::CombineContiguousImpl(
890
939
  uint64_t state, const unsigned char* first, size_t len,
891
940
  std::integral_constant<int, 8> /* sizeof_size_t */) {
892
- // For large values we use CityHash, for small ones we just use a
893
- // multiplicative hash.
941
+ // For large values we use Wyhash or CityHash depending on the platform, for
942
+ // small ones we just use a multiplicative hash.
894
943
  uint64_t v;
895
944
  if (len > 16) {
896
945
  if (ABSL_PREDICT_FALSE(len > PiecewiseChunkSize())) {
897
946
  return CombineLargeContiguousImpl64(state, first, len);
898
947
  }
899
- v = absl::hash_internal::CityHash64(reinterpret_cast<const char*>(first), len);
948
+ v = Hash64(first, len);
900
949
  } else if (len > 8) {
901
950
  auto p = Read9To16(first, len);
902
951
  state = Mix(state, p.first);
@@ -927,7 +976,7 @@ struct PoisonedHash : private AggregateBarrier {
927
976
 
928
977
  template <typename T>
929
978
  struct HashImpl {
930
- size_t operator()(const T& value) const { return CityHashState::hash(value); }
979
+ size_t operator()(const T& value) const { return HashState::hash(value); }
931
980
  };
932
981
 
933
982
  template <typename T>