grpc 1.73.0 → 1.74.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (499) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +38 -17
  3. data/include/grpc/create_channel_from_endpoint.h +54 -0
  4. data/include/grpc/credentials.h +11 -5
  5. data/include/grpc/event_engine/event_engine.h +74 -17
  6. data/include/grpc/grpc_posix.h +20 -1
  7. data/include/grpc/impl/channel_arg_names.h +2 -4
  8. data/include/grpc/module.modulemap +1 -0
  9. data/include/grpc/support/json.h +24 -0
  10. data/src/core/call/interception_chain.h +7 -11
  11. data/src/core/channelz/channel_trace.cc +213 -115
  12. data/src/core/channelz/channel_trace.h +380 -86
  13. data/src/core/channelz/channelz.cc +270 -181
  14. data/src/core/channelz/channelz.h +168 -55
  15. data/src/core/channelz/channelz_registry.cc +2 -1
  16. data/src/core/channelz/channelz_registry.h +24 -0
  17. data/src/core/channelz/property_list.cc +357 -0
  18. data/src/core/channelz/property_list.h +202 -0
  19. data/src/core/channelz/ztrace_collector.h +3 -2
  20. data/src/core/client_channel/backup_poller.cc +17 -2
  21. data/src/core/client_channel/client_channel.cc +17 -28
  22. data/src/core/client_channel/client_channel_filter.cc +19 -29
  23. data/src/core/client_channel/config_selector.h +8 -2
  24. data/src/core/client_channel/dynamic_filters.cc +5 -6
  25. data/src/core/client_channel/dynamic_filters.h +1 -1
  26. data/src/core/client_channel/global_subchannel_pool.cc +4 -1
  27. data/src/core/client_channel/retry_filter.cc +21 -27
  28. data/src/core/client_channel/retry_filter.h +10 -7
  29. data/src/core/client_channel/retry_filter_legacy_call_data.cc +5 -5
  30. data/src/core/client_channel/retry_filter_legacy_call_data.h +1 -1
  31. data/src/core/client_channel/retry_interceptor.cc +30 -44
  32. data/src/core/client_channel/retry_interceptor.h +18 -17
  33. data/src/core/client_channel/retry_throttle.cc +46 -61
  34. data/src/core/client_channel/retry_throttle.h +17 -39
  35. data/src/core/client_channel/subchannel.cc +43 -19
  36. data/src/core/client_channel/subchannel.h +8 -0
  37. data/src/core/config/config_vars.cc +2 -0
  38. data/src/core/config/core_configuration.cc +1 -0
  39. data/src/core/config/core_configuration.h +11 -0
  40. data/src/core/credentials/call/call_creds_registry.h +125 -0
  41. data/src/core/credentials/call/call_creds_registry_init.cc +91 -0
  42. data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.cc +6 -48
  43. data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.cc +86 -0
  44. data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.h +74 -0
  45. data/src/core/credentials/call/jwt_util.cc +70 -0
  46. data/src/core/credentials/call/jwt_util.h +32 -0
  47. data/src/core/credentials/transport/channel_creds_registry_init.cc +1 -1
  48. data/src/core/credentials/transport/google_default/google_default_credentials.cc +72 -4
  49. data/src/core/credentials/transport/ssl/ssl_credentials.cc +0 -1
  50. data/src/core/credentials/transport/tls/load_system_roots_supported.cc +1 -0
  51. data/src/core/credentials/transport/xds/xds_credentials.cc +0 -3
  52. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +8 -8
  53. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +16 -16
  54. data/src/core/ext/filters/http/client_authority_filter.cc +2 -4
  55. data/src/core/ext/filters/http/message_compress/compression_filter.h +25 -22
  56. data/src/core/ext/filters/http/server/http_server_filter.h +12 -11
  57. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +120 -35
  58. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +6 -5
  59. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +162 -115
  60. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +0 -3
  61. data/src/core/ext/transport/chttp2/transport/decode_huff.cc +1239 -3514
  62. data/src/core/ext/transport/chttp2/transport/decode_huff.h +1008 -1486
  63. data/src/core/ext/transport/chttp2/transport/flow_control.h +22 -17
  64. data/src/core/ext/transport/chttp2/transport/frame.cc +10 -0
  65. data/src/core/ext/transport/chttp2/transport/frame.h +2 -2
  66. data/src/core/ext/transport/chttp2/transport/frame_data.cc +1 -1
  67. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +7 -8
  68. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -5
  69. data/src/core/ext/transport/chttp2/transport/header_assembler.h +299 -0
  70. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +1 -1
  71. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +11 -5
  72. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +12 -1
  73. data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +1017 -0
  74. data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +593 -0
  75. data/src/core/ext/transport/chttp2/transport/http2_settings.h +19 -22
  76. data/{third_party/abseil-cpp/absl/strings/cord_buffer.cc → src/core/ext/transport/chttp2/transport/http2_stats_collector.cc} +14 -14
  77. data/src/core/ext/transport/chttp2/transport/http2_stats_collector.h +33 -0
  78. data/src/core/ext/transport/chttp2/transport/http2_status.h +6 -1
  79. data/src/core/ext/transport/chttp2/transport/http2_transport.cc +43 -0
  80. data/src/core/ext/transport/chttp2/transport/http2_transport.h +65 -0
  81. data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +0 -29
  82. data/src/core/ext/transport/chttp2/transport/internal.h +18 -8
  83. data/src/core/ext/transport/chttp2/transport/keepalive.cc +105 -0
  84. data/src/core/ext/transport/chttp2/transport/keepalive.h +138 -0
  85. data/src/core/ext/transport/chttp2/transport/message_assembler.h +185 -0
  86. data/src/core/ext/transport/chttp2/transport/parsing.cc +2 -4
  87. data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +19 -0
  88. data/src/core/ext/transport/chttp2/transport/ping_promise.cc +151 -0
  89. data/src/core/ext/transport/chttp2/transport/ping_promise.h +180 -0
  90. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +5 -9
  91. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.h +11 -0
  92. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +39 -1
  93. data/src/core/ext/transport/chttp2/transport/transport_common.cc +19 -0
  94. data/src/core/ext/transport/chttp2/transport/transport_common.h +27 -0
  95. data/src/core/ext/transport/chttp2/transport/writing.cc +37 -11
  96. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb.h +571 -0
  97. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.c +120 -0
  98. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.h +36 -0
  99. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb.h +1272 -0
  100. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.c +312 -0
  101. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.h +50 -0
  102. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb.h +984 -0
  103. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.c +226 -0
  104. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.h +44 -0
  105. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.c +175 -0
  106. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.h +82 -0
  107. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.c +135 -0
  108. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.h +67 -0
  109. data/src/core/filter/auth/auth_filters.h +0 -25
  110. data/src/core/filter/auth/client_auth_filter.cc +0 -118
  111. data/src/core/filter/filter_args.h +9 -23
  112. data/src/core/handshaker/handshaker.cc +23 -14
  113. data/src/core/handshaker/handshaker.h +3 -0
  114. data/src/core/handshaker/http_connect/http_connect_handshaker.cc +3 -1
  115. data/src/core/handshaker/security/legacy_secure_endpoint.cc +6 -5
  116. data/src/core/handshaker/security/secure_endpoint.cc +70 -25
  117. data/src/core/handshaker/security/security_handshaker.cc +4 -1
  118. data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +7 -1
  119. data/src/core/lib/channel/channel_args.cc +15 -0
  120. data/src/core/lib/channel/channel_args.h +3 -0
  121. data/src/core/lib/channel/channel_stack.cc +22 -23
  122. data/src/core/lib/channel/channel_stack.h +9 -7
  123. data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
  124. data/src/core/lib/channel/channel_stack_builder_impl.h +2 -7
  125. data/src/core/lib/channel/promise_based_filter.h +5 -5
  126. data/src/core/lib/debug/trace_impl.h +0 -1
  127. data/src/core/lib/event_engine/ares_resolver.cc +165 -46
  128. data/src/core/lib/event_engine/ares_resolver.h +48 -2
  129. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +3 -1
  130. data/src/core/lib/event_engine/cf_engine/cf_engine.h +1 -4
  131. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +2 -6
  132. data/src/core/lib/event_engine/endpoint_channel_arg_wrapper.cc +40 -0
  133. data/src/core/lib/event_engine/endpoint_channel_arg_wrapper.h +60 -0
  134. data/src/core/lib/event_engine/event_engine.cc +7 -0
  135. data/src/core/lib/event_engine/extensions/channelz.h +10 -6
  136. data/src/core/lib/event_engine/grpc_polled_fd.h +5 -0
  137. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +130 -162
  138. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +11 -15
  139. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +75 -117
  140. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +7 -9
  141. data/src/core/lib/event_engine/posix_engine/event_poller.h +18 -15
  142. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +0 -18
  143. data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.cc +124 -0
  144. data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.h +243 -0
  145. data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +29 -19
  146. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +6 -2
  147. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +6 -1
  148. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +145 -92
  149. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +9 -19
  150. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +333 -116
  151. data/src/core/lib/event_engine/posix_engine/posix_engine.h +61 -18
  152. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +45 -37
  153. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +6 -4
  154. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +32 -142
  155. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +6 -5
  156. data/src/core/lib/event_engine/posix_engine/posix_interface.h +211 -0
  157. data/src/core/lib/event_engine/posix_engine/posix_interface_posix.cc +1083 -0
  158. data/src/core/lib/event_engine/posix_engine/posix_interface_windows.cc +281 -0
  159. data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.cc +154 -0
  160. data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.h +174 -0
  161. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +3 -719
  162. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +10 -170
  163. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +33 -22
  164. data/src/core/lib/event_engine/posix_engine/timer_manager.h +13 -11
  165. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +117 -151
  166. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +26 -94
  167. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +26 -25
  168. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +6 -2
  169. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +36 -62
  170. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +6 -2
  171. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +7 -6
  172. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +12 -6
  173. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +3 -1
  174. data/src/core/lib/event_engine/shim.cc +9 -0
  175. data/src/core/lib/event_engine/shim.h +3 -0
  176. data/src/core/lib/event_engine/thread_pool/thread_pool.h +7 -3
  177. data/src/core/lib/event_engine/thread_pool/thread_pool_factory.cc +0 -17
  178. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +4 -2
  179. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +3 -2
  180. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +4 -0
  181. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.h +4 -0
  182. data/src/core/lib/event_engine/windows/windows_endpoint.h +2 -6
  183. data/src/core/lib/event_engine/windows/windows_engine.cc +0 -1
  184. data/src/core/lib/event_engine/windows/windows_engine.h +1 -3
  185. data/src/core/lib/event_engine/windows/windows_listener.cc +14 -2
  186. data/src/core/lib/experiments/experiments.cc +45 -93
  187. data/src/core/lib/experiments/experiments.h +21 -51
  188. data/src/core/lib/iomgr/endpoint.cc +4 -3
  189. data/src/core/lib/iomgr/endpoint.h +7 -4
  190. data/src/core/lib/iomgr/endpoint_cfstream.cc +3 -2
  191. data/src/core/lib/iomgr/ev_epoll1_linux.cc +7 -2
  192. data/src/core/lib/iomgr/ev_poll_posix.cc +7 -2
  193. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +4 -6
  194. data/src/core/lib/iomgr/tcp_posix.cc +12 -6
  195. data/src/core/lib/iomgr/tcp_windows.cc +3 -2
  196. data/src/core/lib/promise/activity.h +1 -0
  197. data/src/core/lib/promise/arena_promise.h +23 -7
  198. data/src/core/lib/promise/detail/promise_factory.h +10 -0
  199. data/src/core/lib/promise/detail/promise_like.h +118 -11
  200. data/src/core/lib/promise/detail/promise_variant.h +50 -0
  201. data/src/core/lib/promise/detail/seq_state.h +687 -548
  202. data/src/core/lib/promise/if.h +20 -0
  203. data/src/core/lib/promise/inter_activity_latch.h +147 -0
  204. data/src/core/lib/promise/inter_activity_mutex.h +547 -0
  205. data/src/core/lib/promise/loop.h +65 -3
  206. data/src/core/lib/promise/map.h +24 -0
  207. data/src/core/lib/promise/match_promise.h +103 -0
  208. data/src/core/lib/promise/mpsc.cc +425 -0
  209. data/src/core/lib/promise/mpsc.h +490 -0
  210. data/src/core/lib/promise/party.cc +50 -1
  211. data/src/core/lib/promise/party.h +66 -1
  212. data/src/core/lib/promise/race.h +31 -0
  213. data/src/core/lib/promise/seq.h +4 -1
  214. data/src/core/lib/promise/status_flag.h +7 -0
  215. data/src/core/lib/promise/try_seq.h +4 -1
  216. data/src/core/lib/promise/wait_set.cc +28 -0
  217. data/src/core/lib/promise/wait_set.h +86 -0
  218. data/src/core/lib/resource_quota/arena.h +19 -0
  219. data/src/core/lib/slice/slice.h +5 -0
  220. data/src/core/lib/surface/channel_create.cc +88 -13
  221. data/src/core/lib/surface/channel_create.h +4 -0
  222. data/src/core/lib/surface/channel_init.cc +164 -47
  223. data/src/core/lib/surface/channel_init.h +64 -1
  224. data/src/core/lib/surface/filter_stack_call.cc +18 -9
  225. data/src/core/lib/surface/init.cc +6 -15
  226. data/src/core/lib/surface/legacy_channel.cc +3 -5
  227. data/src/core/lib/surface/legacy_channel.h +3 -1
  228. data/src/core/lib/surface/version.cc +2 -2
  229. data/src/core/lib/transport/promise_endpoint.cc +110 -0
  230. data/src/core/lib/transport/promise_endpoint.h +307 -0
  231. data/src/core/load_balancing/child_policy_handler.cc +2 -4
  232. data/src/core/load_balancing/delegating_helper.h +2 -3
  233. data/src/core/load_balancing/health_check_client.cc +1 -5
  234. data/src/core/load_balancing/lb_policy.h +1 -3
  235. data/src/core/load_balancing/oob_backend_metric.cc +1 -5
  236. data/src/core/load_balancing/pick_first/pick_first.cc +3 -0
  237. data/src/core/load_balancing/xds/cds.cc +10 -1
  238. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
  239. data/src/core/resolver/xds/xds_config.cc +6 -3
  240. data/src/core/resolver/xds/xds_config.h +9 -4
  241. data/src/core/resolver/xds/xds_dependency_manager.cc +21 -6
  242. data/src/core/resolver/xds/xds_dependency_manager.h +2 -1
  243. data/src/core/resolver/xds/xds_resolver.cc +31 -11
  244. data/src/core/server/server.cc +83 -12
  245. data/src/core/server/server.h +21 -2
  246. data/src/core/server/xds_server_config_fetcher.cc +63 -25
  247. data/src/core/service_config/service_config.h +1 -1
  248. data/src/core/service_config/service_config_impl.h +1 -1
  249. data/src/core/telemetry/context_list_entry.cc +38 -0
  250. data/src/core/telemetry/context_list_entry.h +42 -12
  251. data/src/core/telemetry/stats_data.cc +233 -207
  252. data/src/core/telemetry/stats_data.h +250 -153
  253. data/src/core/telemetry/tcp_tracer.h +1 -1
  254. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +11 -3
  255. data/src/core/tsi/fake_transport_security.cc +17 -0
  256. data/src/core/tsi/ssl_transport_security.cc +2 -0
  257. data/src/core/tsi/transport_security_grpc.cc +8 -0
  258. data/src/core/tsi/transport_security_grpc.h +15 -0
  259. data/src/core/util/backoff.cc +1 -5
  260. data/src/core/util/backoff.h +1 -0
  261. data/src/core/util/down_cast.h +1 -1
  262. data/src/core/util/function_signature.h +15 -1
  263. data/src/core/util/http_client/httpcli.cc +12 -5
  264. data/src/core/util/http_client/httpcli.h +4 -1
  265. data/src/core/util/latent_see.h +8 -5
  266. data/src/core/util/log.cc +4 -0
  267. data/src/core/util/memory_usage.h +268 -0
  268. data/src/core/util/per_cpu.cc +2 -0
  269. data/src/core/util/per_cpu.h +7 -0
  270. data/src/core/util/shared_bit_gen.h +20 -0
  271. data/src/core/util/single_set_ptr.h +2 -2
  272. data/src/core/util/upb_utils.h +42 -0
  273. data/src/core/util/uri.cc +3 -2
  274. data/src/core/util/useful.h +53 -2
  275. data/src/core/util/wait_for_single_owner.cc +31 -0
  276. data/src/core/util/wait_for_single_owner.h +24 -0
  277. data/src/core/xds/grpc/xds_bootstrap_grpc.cc +2 -0
  278. data/src/core/xds/grpc/xds_bootstrap_grpc.h +5 -0
  279. data/src/core/xds/grpc/xds_client_grpc.cc +6 -2
  280. data/src/core/xds/grpc/xds_common_types_parser.cc +138 -50
  281. data/src/core/xds/grpc/xds_common_types_parser.h +12 -0
  282. data/src/core/xds/grpc/xds_http_filter.h +7 -0
  283. data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +22 -0
  284. data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +3 -0
  285. data/src/core/xds/grpc/xds_route_config_parser.cc +15 -38
  286. data/src/core/xds/grpc/xds_server_grpc.cc +63 -13
  287. data/src/core/xds/grpc/xds_server_grpc.h +10 -2
  288. data/src/core/xds/grpc/xds_server_grpc_interface.h +4 -0
  289. data/src/core/xds/grpc/xds_transport_grpc.cc +18 -0
  290. data/src/core/xds/xds_client/xds_bootstrap.h +2 -0
  291. data/src/core/xds/xds_client/xds_client.cc +26 -5
  292. data/src/ruby/ext/grpc/extconf.rb +2 -0
  293. data/src/ruby/ext/grpc/rb_call.c +1 -8
  294. data/src/ruby/ext/grpc/rb_channel.c +72 -568
  295. data/src/ruby/ext/grpc/rb_channel.h +0 -3
  296. data/src/ruby/ext/grpc/rb_completion_queue.c +26 -14
  297. data/src/ruby/ext/grpc/rb_completion_queue.h +1 -7
  298. data/src/ruby/ext/grpc/rb_grpc.c +9 -5
  299. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
  300. data/src/ruby/ext/grpc/rb_loader.c +0 -4
  301. data/src/ruby/ext/grpc/rb_server.c +31 -50
  302. data/src/ruby/lib/grpc/generic/client_stub.rb +4 -4
  303. data/src/ruby/lib/grpc/version.rb +1 -1
  304. data/src/ruby/spec/core_spec.rb +22 -0
  305. data/src/ruby/spec/generic/active_call_spec.rb +1 -1
  306. data/third_party/abseil-cpp/absl/algorithm/container.h +2 -19
  307. data/third_party/abseil-cpp/absl/base/attributes.h +76 -7
  308. data/third_party/abseil-cpp/absl/base/call_once.h +11 -12
  309. data/third_party/abseil-cpp/absl/base/config.h +20 -129
  310. data/third_party/abseil-cpp/absl/base/{internal/fast_type_id.h → fast_type_id.h} +11 -16
  311. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +0 -5
  312. data/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +7 -7
  313. data/third_party/abseil-cpp/absl/base/internal/endian.h +34 -38
  314. data/third_party/abseil-cpp/absl/base/internal/iterator_traits.h +71 -0
  315. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +6 -5
  316. data/third_party/abseil-cpp/absl/base/internal/{nullability_impl.h → nullability_deprecated.h} +45 -8
  317. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +0 -9
  318. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +3 -13
  319. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +6 -6
  320. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +8 -3
  321. data/third_party/abseil-cpp/absl/base/no_destructor.h +11 -32
  322. data/third_party/abseil-cpp/absl/base/nullability.h +84 -72
  323. data/third_party/abseil-cpp/absl/base/options.h +3 -80
  324. data/third_party/abseil-cpp/absl/base/policy_checks.h +7 -7
  325. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +1 -3
  326. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -4
  327. data/third_party/abseil-cpp/absl/container/btree_map.h +4 -2
  328. data/third_party/abseil-cpp/absl/container/btree_set.h +4 -2
  329. data/third_party/abseil-cpp/absl/container/fixed_array.h +7 -14
  330. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +5 -0
  331. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +6 -1
  332. data/third_party/abseil-cpp/absl/container/inlined_vector.h +8 -5
  333. data/third_party/abseil-cpp/absl/container/internal/btree.h +132 -29
  334. data/third_party/abseil-cpp/absl/container/internal/btree_container.h +175 -71
  335. data/third_party/abseil-cpp/absl/container/internal/common.h +43 -0
  336. data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -2
  337. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +9 -10
  338. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +1 -8
  339. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +0 -4
  340. data/third_party/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +527 -0
  341. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +20 -4
  342. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +31 -12
  343. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +2 -7
  344. data/third_party/abseil-cpp/absl/container/internal/layout.h +26 -42
  345. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +199 -68
  346. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +1354 -183
  347. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +881 -1424
  348. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +80 -0
  349. data/third_party/abseil-cpp/absl/crc/crc32c.cc +0 -4
  350. data/third_party/abseil-cpp/absl/crc/crc32c.h +7 -5
  351. data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +0 -22
  352. data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +45 -74
  353. data/third_party/abseil-cpp/absl/debugging/internal/addresses.h +57 -0
  354. data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc +1 -1
  355. data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.h +5 -5
  356. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +8 -35
  357. data/third_party/abseil-cpp/absl/debugging/internal/demangle_rust.cc +16 -16
  358. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +40 -37
  359. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +16 -7
  360. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +14 -5
  361. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +10 -4
  362. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +27 -16
  363. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +13 -4
  364. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +4 -3
  365. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +15 -28
  366. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +19 -9
  367. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +144 -27
  368. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +73 -5
  369. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +19 -9
  370. data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +3 -2
  371. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +25 -6
  372. data/third_party/abseil-cpp/absl/flags/commandlineflag.h +2 -2
  373. data/third_party/abseil-cpp/absl/flags/flag.h +4 -3
  374. data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +2 -2
  375. data/third_party/abseil-cpp/absl/flags/internal/flag.cc +2 -1
  376. data/third_party/abseil-cpp/absl/flags/internal/flag.h +7 -6
  377. data/third_party/abseil-cpp/absl/flags/internal/registry.h +4 -3
  378. data/third_party/abseil-cpp/absl/flags/reflection.cc +2 -3
  379. data/third_party/abseil-cpp/absl/functional/any_invocable.h +8 -10
  380. data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -9
  381. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +110 -226
  382. data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +10 -12
  383. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +2 -5
  384. data/third_party/abseil-cpp/absl/hash/hash.h +18 -0
  385. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +1 -5
  386. data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -61
  387. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +25 -68
  388. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +2 -6
  389. data/third_party/abseil-cpp/absl/hash/internal/weakly_mixed_integer.h +38 -0
  390. data/third_party/abseil-cpp/absl/log/check.h +2 -1
  391. data/third_party/abseil-cpp/absl/log/globals.h +4 -5
  392. data/third_party/abseil-cpp/absl/log/internal/append_truncated.h +28 -0
  393. data/third_party/abseil-cpp/absl/log/internal/check_op.cc +22 -22
  394. data/third_party/abseil-cpp/absl/log/internal/check_op.h +65 -62
  395. data/third_party/abseil-cpp/absl/log/internal/conditions.cc +5 -3
  396. data/third_party/abseil-cpp/absl/log/internal/conditions.h +7 -2
  397. data/third_party/abseil-cpp/absl/log/internal/log_message.cc +85 -43
  398. data/third_party/abseil-cpp/absl/log/internal/log_message.h +84 -59
  399. data/third_party/abseil-cpp/absl/log/internal/nullstream.h +1 -0
  400. data/third_party/abseil-cpp/absl/log/internal/proto.cc +3 -2
  401. data/third_party/abseil-cpp/absl/log/internal/proto.h +3 -3
  402. data/third_party/abseil-cpp/absl/log/internal/strip.h +4 -12
  403. data/third_party/abseil-cpp/absl/log/internal/vlog_config.h +8 -6
  404. data/third_party/abseil-cpp/absl/log/internal/voidify.h +10 -4
  405. data/third_party/abseil-cpp/absl/log/log.h +48 -35
  406. data/third_party/abseil-cpp/absl/log/log_sink_registry.h +2 -2
  407. data/third_party/abseil-cpp/absl/meta/type_traits.h +46 -175
  408. data/third_party/abseil-cpp/absl/numeric/bits.h +68 -2
  409. data/third_party/abseil-cpp/absl/numeric/int128.cc +0 -52
  410. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +7 -3
  411. data/third_party/abseil-cpp/absl/profiling/internal/exponential_biased.cc +1 -1
  412. data/third_party/abseil-cpp/absl/random/bit_gen_ref.h +10 -11
  413. data/third_party/abseil-cpp/absl/random/distributions.h +6 -8
  414. data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +1 -1
  415. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +5 -6
  416. data/third_party/abseil-cpp/absl/random/internal/{pool_urbg.cc → entropy_pool.cc} +22 -90
  417. data/third_party/abseil-cpp/absl/random/internal/entropy_pool.h +35 -0
  418. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +5 -6
  419. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +1 -1
  420. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +20 -12
  421. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +5 -5
  422. data/third_party/abseil-cpp/absl/random/random.h +88 -53
  423. data/third_party/abseil-cpp/absl/random/seed_sequences.cc +6 -2
  424. data/third_party/abseil-cpp/absl/status/internal/status_internal.cc +3 -4
  425. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +3 -4
  426. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -3
  427. data/third_party/abseil-cpp/absl/status/status.cc +4 -8
  428. data/third_party/abseil-cpp/absl/status/status.h +8 -8
  429. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +2 -2
  430. data/third_party/abseil-cpp/absl/status/statusor.cc +2 -2
  431. data/third_party/abseil-cpp/absl/status/statusor.h +6 -6
  432. data/third_party/abseil-cpp/absl/strings/ascii.cc +9 -9
  433. data/third_party/abseil-cpp/absl/strings/ascii.h +18 -18
  434. data/third_party/abseil-cpp/absl/strings/charconv.cc +21 -22
  435. data/third_party/abseil-cpp/absl/strings/charconv.h +5 -5
  436. data/third_party/abseil-cpp/absl/strings/cord.cc +54 -58
  437. data/third_party/abseil-cpp/absl/strings/cord.h +94 -83
  438. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +11 -11
  439. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +3 -3
  440. data/third_party/abseil-cpp/absl/strings/escaping.cc +130 -149
  441. data/third_party/abseil-cpp/absl/strings/escaping.h +9 -10
  442. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
  443. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +6 -8
  444. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +0 -4
  445. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +0 -4
  446. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +7 -63
  447. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -11
  448. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +0 -22
  449. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.cc +5 -3
  450. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
  451. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +3 -3
  452. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +0 -5
  453. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +96 -1
  454. data/third_party/abseil-cpp/absl/strings/internal/utf8.h +15 -1
  455. data/third_party/abseil-cpp/absl/strings/numbers.cc +53 -32
  456. data/third_party/abseil-cpp/absl/strings/numbers.h +87 -58
  457. data/third_party/abseil-cpp/absl/strings/str_cat.cc +6 -7
  458. data/third_party/abseil-cpp/absl/strings/str_cat.h +32 -32
  459. data/third_party/abseil-cpp/absl/strings/str_format.h +18 -18
  460. data/third_party/abseil-cpp/absl/strings/str_replace.cc +3 -3
  461. data/third_party/abseil-cpp/absl/strings/str_replace.h +6 -6
  462. data/third_party/abseil-cpp/absl/strings/string_view.cc +4 -9
  463. data/third_party/abseil-cpp/absl/strings/string_view.h +27 -32
  464. data/third_party/abseil-cpp/absl/strings/strip.h +4 -4
  465. data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -4
  466. data/third_party/abseil-cpp/absl/strings/substitute.h +66 -64
  467. data/third_party/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +0 -4
  468. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +0 -5
  469. data/third_party/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +0 -4
  470. data/third_party/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +0 -4
  471. data/third_party/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +0 -4
  472. data/third_party/abseil-cpp/absl/synchronization/internal/waiter_base.cc +0 -4
  473. data/third_party/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +0 -4
  474. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +1 -1
  475. data/third_party/abseil-cpp/absl/synchronization/mutex.h +97 -69
  476. data/third_party/abseil-cpp/absl/synchronization/notification.h +1 -1
  477. data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -0
  478. data/third_party/abseil-cpp/absl/time/duration.cc +12 -7
  479. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +1 -1
  480. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +90 -111
  481. data/third_party/abseil-cpp/absl/time/time.h +20 -15
  482. data/third_party/abseil-cpp/absl/types/optional.h +7 -747
  483. data/third_party/abseil-cpp/absl/types/span.h +13 -11
  484. data/third_party/abseil-cpp/absl/types/variant.h +5 -784
  485. data/third_party/abseil-cpp/absl/utility/utility.h +10 -185
  486. metadata +72 -20
  487. data/src/core/lib/event_engine/forkable.cc +0 -105
  488. data/src/core/lib/event_engine/forkable.h +0 -67
  489. data/src/core/lib/iomgr/python_util.h +0 -46
  490. data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +0 -108
  491. data/third_party/abseil-cpp/absl/base/internal/invoke.h +0 -241
  492. data/third_party/abseil-cpp/absl/log/log_entry.cc +0 -41
  493. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +0 -131
  494. data/third_party/abseil-cpp/absl/types/bad_optional_access.cc +0 -66
  495. data/third_party/abseil-cpp/absl/types/bad_optional_access.h +0 -78
  496. data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +0 -82
  497. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +0 -82
  498. data/third_party/abseil-cpp/absl/types/internal/optional.h +0 -352
  499. data/third_party/abseil-cpp/absl/types/internal/variant.h +0 -1622
@@ -32,6 +32,7 @@
32
32
  #endif
33
33
 
34
34
  #include <cstddef>
35
+ #include <cstdint>
35
36
  #include <cstdlib>
36
37
  #include <cstring>
37
38
  #include <ctime>
@@ -39,6 +40,7 @@
39
40
  #include <string>
40
41
  #include <type_traits>
41
42
 
43
+ #include "absl/base/attributes.h"
42
44
  #include "absl/base/config.h"
43
45
  #include "absl/base/internal/endian.h"
44
46
  #include "absl/base/macros.h"
@@ -60,8 +62,8 @@ ABSL_NAMESPACE_BEGIN
60
62
  // encountered, this function returns `false`, leaving `out` in an unspecified
61
63
  // state.
62
64
  template <typename int_type>
63
- ABSL_MUST_USE_RESULT bool SimpleAtoi(absl::string_view str,
64
- absl::Nonnull<int_type*> out);
65
+ [[nodiscard]] bool SimpleAtoi(absl::string_view str,
66
+ int_type* absl_nonnull out);
65
67
 
66
68
  // SimpleAtof()
67
69
  //
@@ -72,8 +74,7 @@ ABSL_MUST_USE_RESULT bool SimpleAtoi(absl::string_view str,
72
74
  // allowed formats for `str`, except SimpleAtof() is locale-independent and will
73
75
  // always use the "C" locale. If any errors are encountered, this function
74
76
  // returns `false`, leaving `out` in an unspecified state.
75
- ABSL_MUST_USE_RESULT bool SimpleAtof(absl::string_view str,
76
- absl::Nonnull<float*> out);
77
+ [[nodiscard]] bool SimpleAtof(absl::string_view str, float* absl_nonnull out);
77
78
 
78
79
  // SimpleAtod()
79
80
  //
@@ -84,8 +85,7 @@ ABSL_MUST_USE_RESULT bool SimpleAtof(absl::string_view str,
84
85
  // allowed formats for `str`, except SimpleAtod is locale-independent and will
85
86
  // always use the "C" locale. If any errors are encountered, this function
86
87
  // returns `false`, leaving `out` in an unspecified state.
87
- ABSL_MUST_USE_RESULT bool SimpleAtod(absl::string_view str,
88
- absl::Nonnull<double*> out);
88
+ [[nodiscard]] bool SimpleAtod(absl::string_view str, double* absl_nonnull out);
89
89
 
90
90
  // SimpleAtob()
91
91
  //
@@ -95,8 +95,7 @@ ABSL_MUST_USE_RESULT bool SimpleAtod(absl::string_view str,
95
95
  // are interpreted as boolean `false`: "false", "f", "no", "n", "0". If any
96
96
  // errors are encountered, this function returns `false`, leaving `out` in an
97
97
  // unspecified state.
98
- ABSL_MUST_USE_RESULT bool SimpleAtob(absl::string_view str,
99
- absl::Nonnull<bool*> out);
98
+ [[nodiscard]] bool SimpleAtob(absl::string_view str, bool* absl_nonnull out);
100
99
 
101
100
  // SimpleHexAtoi()
102
101
  //
@@ -109,14 +108,14 @@ ABSL_MUST_USE_RESULT bool SimpleAtob(absl::string_view str,
109
108
  // by this function. If any errors are encountered, this function returns
110
109
  // `false`, leaving `out` in an unspecified state.
111
110
  template <typename int_type>
112
- ABSL_MUST_USE_RESULT bool SimpleHexAtoi(absl::string_view str,
113
- absl::Nonnull<int_type*> out);
111
+ [[nodiscard]] bool SimpleHexAtoi(absl::string_view str,
112
+ int_type* absl_nonnull out);
114
113
 
115
114
  // Overloads of SimpleHexAtoi() for 128 bit integers.
116
- ABSL_MUST_USE_RESULT inline bool SimpleHexAtoi(
117
- absl::string_view str, absl::Nonnull<absl::int128*> out);
118
- ABSL_MUST_USE_RESULT inline bool SimpleHexAtoi(
119
- absl::string_view str, absl::Nonnull<absl::uint128*> out);
115
+ [[nodiscard]] inline bool SimpleHexAtoi(absl::string_view str,
116
+ absl::int128* absl_nonnull out);
117
+ [[nodiscard]] inline bool SimpleHexAtoi(absl::string_view str,
118
+ absl::uint128* absl_nonnull out);
120
119
 
121
120
  ABSL_NAMESPACE_END
122
121
  } // namespace absl
@@ -127,6 +126,18 @@ namespace absl {
127
126
  ABSL_NAMESPACE_BEGIN
128
127
  namespace numbers_internal {
129
128
 
129
+ template <typename int_type>
130
+ constexpr bool is_signed() {
131
+ if constexpr (std::is_arithmetic<int_type>::value) {
132
+ // Use std::numeric_limits<T>::is_signed where it's defined to work.
133
+ return std::numeric_limits<int_type>::is_signed;
134
+ }
135
+ // TODO(jorg): This signed-ness check is used because it works correctly
136
+ // with enums, and it also serves to check that int_type is not a pointer.
137
+ // If one day something like std::is_signed<enum E> works, switch to it.
138
+ return static_cast<int_type>(1) - 2 < 0;
139
+ }
140
+
130
141
  // Digit conversion.
131
142
  ABSL_DLL extern const char kHexChar[17]; // 0123456789abcdef
132
143
  ABSL_DLL extern const char
@@ -138,22 +149,30 @@ ABSL_DLL extern const char
138
149
  // PutTwoDigits(42, buf);
139
150
  // // buf[0] == '4'
140
151
  // // buf[1] == '2'
141
- void PutTwoDigits(uint32_t i, absl::Nonnull<char*> buf);
152
+ void PutTwoDigits(uint32_t i, char* absl_nonnull buf);
142
153
 
143
154
  // safe_strto?() functions for implementing SimpleAtoi()
144
155
 
145
- bool safe_strto32_base(absl::string_view text, absl::Nonnull<int32_t*> value,
156
+ bool safe_strto8_base(absl::string_view text, int8_t* absl_nonnull value,
157
+ int base);
158
+ bool safe_strto16_base(absl::string_view text, int16_t* absl_nonnull value,
159
+ int base);
160
+ bool safe_strto32_base(absl::string_view text, int32_t* absl_nonnull value,
146
161
  int base);
147
- bool safe_strto64_base(absl::string_view text, absl::Nonnull<int64_t*> value,
162
+ bool safe_strto64_base(absl::string_view text, int64_t* absl_nonnull value,
148
163
  int base);
149
164
  bool safe_strto128_base(absl::string_view text,
150
- absl::Nonnull<absl::int128*> value, int base);
151
- bool safe_strtou32_base(absl::string_view text, absl::Nonnull<uint32_t*> value,
165
+ absl::int128* absl_nonnull value, int base);
166
+ bool safe_strtou8_base(absl::string_view text, uint8_t* absl_nonnull value,
167
+ int base);
168
+ bool safe_strtou16_base(absl::string_view text, uint16_t* absl_nonnull value,
152
169
  int base);
153
- bool safe_strtou64_base(absl::string_view text, absl::Nonnull<uint64_t*> value,
170
+ bool safe_strtou32_base(absl::string_view text, uint32_t* absl_nonnull value,
171
+ int base);
172
+ bool safe_strtou64_base(absl::string_view text, uint64_t* absl_nonnull value,
154
173
  int base);
155
174
  bool safe_strtou128_base(absl::string_view text,
156
- absl::Nonnull<absl::uint128*> value, int base);
175
+ absl::uint128* absl_nonnull value, int base);
157
176
 
158
177
  static const int kFastToBufferSize = 32;
159
178
  static const int kSixDigitsToBufferSize = 16;
@@ -164,33 +183,30 @@ static const int kSixDigitsToBufferSize = 16;
164
183
  // outside the range 0.0001-999999 are output using scientific notation
165
184
  // (1.23456e+06). This routine is heavily optimized.
166
185
  // Required buffer size is `kSixDigitsToBufferSize`.
167
- size_t SixDigitsToBuffer(double d, absl::Nonnull<char*> buffer);
186
+ size_t SixDigitsToBuffer(double d, char* absl_nonnull buffer);
168
187
 
169
188
  // WARNING: These functions may write more characters than necessary, because
170
189
  // they are intended for speed. All functions take an output buffer
171
190
  // as an argument and return a pointer to the last byte they wrote, which is the
172
191
  // terminating '\0'. At most `kFastToBufferSize` bytes are written.
173
- absl::Nonnull<char*> FastIntToBuffer(int32_t i, absl::Nonnull<char*> buffer)
192
+ char* absl_nonnull FastIntToBuffer(int32_t i, char* absl_nonnull buffer)
174
193
  ABSL_INTERNAL_NEED_MIN_SIZE(buffer, kFastToBufferSize);
175
- absl::Nonnull<char*> FastIntToBuffer(uint32_t n, absl::Nonnull<char*> out_str)
194
+ char* absl_nonnull FastIntToBuffer(uint32_t n, char* absl_nonnull out_str)
176
195
  ABSL_INTERNAL_NEED_MIN_SIZE(out_str, kFastToBufferSize);
177
- absl::Nonnull<char*> FastIntToBuffer(int64_t i, absl::Nonnull<char*> buffer)
196
+ char* absl_nonnull FastIntToBuffer(int64_t i, char* absl_nonnull buffer)
178
197
  ABSL_INTERNAL_NEED_MIN_SIZE(buffer, kFastToBufferSize);
179
- absl::Nonnull<char*> FastIntToBuffer(uint64_t i, absl::Nonnull<char*> buffer)
198
+ char* absl_nonnull FastIntToBuffer(uint64_t i, char* absl_nonnull buffer)
180
199
  ABSL_INTERNAL_NEED_MIN_SIZE(buffer, kFastToBufferSize);
181
200
 
182
201
  // For enums and integer types that are not an exact match for the types above,
183
202
  // use templates to call the appropriate one of the four overloads above.
184
203
  template <typename int_type>
185
- absl::Nonnull<char*> FastIntToBuffer(int_type i, absl::Nonnull<char*> buffer)
204
+ char* absl_nonnull FastIntToBuffer(int_type i, char* absl_nonnull buffer)
186
205
  ABSL_INTERNAL_NEED_MIN_SIZE(buffer, kFastToBufferSize) {
187
206
  static_assert(sizeof(i) <= 64 / 8,
188
207
  "FastIntToBuffer works only with 64-bit-or-less integers.");
189
- // TODO(jorg): This signed-ness check is used because it works correctly
190
- // with enums, and it also serves to check that int_type is not a pointer.
191
- // If one day something like std::is_signed<enum E> works, switch to it.
192
208
  // These conditions are constexpr bools to suppress MSVC warning C4127.
193
- constexpr bool kIsSigned = static_cast<int_type>(1) - 2 < 0;
209
+ constexpr bool kIsSigned = is_signed<int_type>();
194
210
  constexpr bool kUse64Bit = sizeof(i) > 32 / 8;
195
211
  if (kIsSigned) {
196
212
  if (kUse64Bit) {
@@ -210,39 +226,52 @@ absl::Nonnull<char*> FastIntToBuffer(int_type i, absl::Nonnull<char*> buffer)
210
226
  // Implementation of SimpleAtoi, generalized to support arbitrary base (used
211
227
  // with base different from 10 elsewhere in Abseil implementation).
212
228
  template <typename int_type>
213
- ABSL_MUST_USE_RESULT bool safe_strtoi_base(absl::string_view s,
214
- absl::Nonnull<int_type*> out,
215
- int base) {
216
- static_assert(sizeof(*out) == 4 || sizeof(*out) == 8,
217
- "SimpleAtoi works only with 32-bit or 64-bit integers.");
229
+ [[nodiscard]] bool safe_strtoi_base(absl::string_view s,
230
+ int_type* absl_nonnull out, int base) {
231
+ static_assert(sizeof(*out) == 1 || sizeof(*out) == 2 || sizeof(*out) == 4 ||
232
+ sizeof(*out) == 8,
233
+ "SimpleAtoi works only with 8, 16, 32, or 64-bit integers.");
218
234
  static_assert(!std::is_floating_point<int_type>::value,
219
235
  "Use SimpleAtof or SimpleAtod instead.");
220
236
  bool parsed;
221
- // TODO(jorg): This signed-ness check is used because it works correctly
222
- // with enums, and it also serves to check that int_type is not a pointer.
223
- // If one day something like std::is_signed<enum E> works, switch to it.
224
237
  // These conditions are constexpr bools to suppress MSVC warning C4127.
225
- constexpr bool kIsSigned = static_cast<int_type>(1) - 2 < 0;
226
- constexpr bool kUse64Bit = sizeof(*out) == 64 / 8;
238
+ constexpr bool kIsSigned = is_signed<int_type>();
239
+ constexpr int kIntTypeSize = sizeof(*out) * 8;
227
240
  if (kIsSigned) {
228
- if (kUse64Bit) {
241
+ if (kIntTypeSize == 64) {
229
242
  int64_t val;
230
243
  parsed = numbers_internal::safe_strto64_base(s, &val, base);
231
244
  *out = static_cast<int_type>(val);
232
- } else {
245
+ } else if (kIntTypeSize == 32) {
233
246
  int32_t val;
234
247
  parsed = numbers_internal::safe_strto32_base(s, &val, base);
235
248
  *out = static_cast<int_type>(val);
249
+ } else if (kIntTypeSize == 16) {
250
+ int16_t val;
251
+ parsed = numbers_internal::safe_strto16_base(s, &val, base);
252
+ *out = static_cast<int_type>(val);
253
+ } else if (kIntTypeSize == 8) {
254
+ int8_t val;
255
+ parsed = numbers_internal::safe_strto8_base(s, &val, base);
256
+ *out = static_cast<int_type>(val);
236
257
  }
237
258
  } else {
238
- if (kUse64Bit) {
259
+ if (kIntTypeSize == 64) {
239
260
  uint64_t val;
240
261
  parsed = numbers_internal::safe_strtou64_base(s, &val, base);
241
262
  *out = static_cast<int_type>(val);
242
- } else {
263
+ } else if (kIntTypeSize == 32) {
243
264
  uint32_t val;
244
265
  parsed = numbers_internal::safe_strtou32_base(s, &val, base);
245
266
  *out = static_cast<int_type>(val);
267
+ } else if (kIntTypeSize == 16) {
268
+ uint16_t val;
269
+ parsed = numbers_internal::safe_strtou16_base(s, &val, base);
270
+ *out = static_cast<int_type>(val);
271
+ } else if (kIntTypeSize == 8) {
272
+ uint8_t val;
273
+ parsed = numbers_internal::safe_strtou8_base(s, &val, base);
274
+ *out = static_cast<int_type>(val);
246
275
  }
247
276
  }
248
277
  return parsed;
@@ -254,7 +283,7 @@ ABSL_MUST_USE_RESULT bool safe_strtoi_base(absl::string_view s,
254
283
  // without the terminating null character. Thus `out` must be of length >= 16.
255
284
  // Returns the number of non-pad digits of the output (it can never be zero
256
285
  // since 0 has one digit).
257
- inline size_t FastHexToBufferZeroPad16(uint64_t val, absl::Nonnull<char*> out) {
286
+ inline size_t FastHexToBufferZeroPad16(uint64_t val, char* absl_nonnull out) {
258
287
  #ifdef ABSL_INTERNAL_HAVE_SSSE3
259
288
  uint64_t be = absl::big_endian::FromHost64(val);
260
289
  const auto kNibbleMask = _mm_set1_epi8(0xf);
@@ -280,34 +309,34 @@ inline size_t FastHexToBufferZeroPad16(uint64_t val, absl::Nonnull<char*> out) {
280
309
  } // namespace numbers_internal
281
310
 
282
311
  template <typename int_type>
283
- ABSL_MUST_USE_RESULT bool SimpleAtoi(absl::string_view str,
284
- absl::Nonnull<int_type*> out) {
312
+ [[nodiscard]] bool SimpleAtoi(absl::string_view str,
313
+ int_type* absl_nonnull out) {
285
314
  return numbers_internal::safe_strtoi_base(str, out, 10);
286
315
  }
287
316
 
288
- ABSL_MUST_USE_RESULT inline bool SimpleAtoi(absl::string_view str,
289
- absl::Nonnull<absl::int128*> out) {
317
+ [[nodiscard]] inline bool SimpleAtoi(absl::string_view str,
318
+ absl::int128* absl_nonnull out) {
290
319
  return numbers_internal::safe_strto128_base(str, out, 10);
291
320
  }
292
321
 
293
- ABSL_MUST_USE_RESULT inline bool SimpleAtoi(absl::string_view str,
294
- absl::Nonnull<absl::uint128*> out) {
322
+ [[nodiscard]] inline bool SimpleAtoi(absl::string_view str,
323
+ absl::uint128* absl_nonnull out) {
295
324
  return numbers_internal::safe_strtou128_base(str, out, 10);
296
325
  }
297
326
 
298
327
  template <typename int_type>
299
- ABSL_MUST_USE_RESULT bool SimpleHexAtoi(absl::string_view str,
300
- absl::Nonnull<int_type*> out) {
328
+ [[nodiscard]] bool SimpleHexAtoi(absl::string_view str,
329
+ int_type* absl_nonnull out) {
301
330
  return numbers_internal::safe_strtoi_base(str, out, 16);
302
331
  }
303
332
 
304
- ABSL_MUST_USE_RESULT inline bool SimpleHexAtoi(
305
- absl::string_view str, absl::Nonnull<absl::int128*> out) {
333
+ [[nodiscard]] inline bool SimpleHexAtoi(absl::string_view str,
334
+ absl::int128* absl_nonnull out) {
306
335
  return numbers_internal::safe_strto128_base(str, out, 16);
307
336
  }
308
337
 
309
- ABSL_MUST_USE_RESULT inline bool SimpleHexAtoi(
310
- absl::string_view str, absl::Nonnull<absl::uint128*> out) {
338
+ [[nodiscard]] inline bool SimpleHexAtoi(absl::string_view str,
339
+ absl::uint128* absl_nonnull out) {
311
340
  return numbers_internal::safe_strtou128_base(str, out, 16);
312
341
  }
313
342
 
@@ -42,8 +42,7 @@ ABSL_NAMESPACE_BEGIN
42
42
  namespace {
43
43
  // Append is merely a version of memcpy that returns the address of the byte
44
44
  // after the area just overwritten.
45
- inline absl::Nonnull<char*> Append(absl::Nonnull<char*> out,
46
- const AlphaNum& x) {
45
+ inline char* absl_nonnull Append(char* absl_nonnull out, const AlphaNum& x) {
47
46
  // memcpy is allowed to overwrite arbitrary memory, so doing this after the
48
47
  // call would force an extra fetch of x.size().
49
48
  char* after = out + x.size();
@@ -159,7 +158,7 @@ std::string CatPieces(std::initializer_list<absl::string_view> pieces) {
159
158
  assert(((src).size() == 0) || \
160
159
  (uintptr_t((src).data() - (dest).data()) > uintptr_t((dest).size())))
161
160
 
162
- void AppendPieces(absl::Nonnull<std::string*> dest,
161
+ void AppendPieces(std::string* absl_nonnull dest,
163
162
  std::initializer_list<absl::string_view> pieces) {
164
163
  size_t old_size = dest->size();
165
164
  size_t to_append = 0;
@@ -183,7 +182,7 @@ void AppendPieces(absl::Nonnull<std::string*> dest,
183
182
 
184
183
  } // namespace strings_internal
185
184
 
186
- void StrAppend(absl::Nonnull<std::string*> dest, const AlphaNum& a) {
185
+ void StrAppend(std::string* absl_nonnull dest, const AlphaNum& a) {
187
186
  ASSERT_NO_OVERLAP(*dest, a);
188
187
  std::string::size_type old_size = dest->size();
189
188
  STLStringAppendUninitializedAmortized(dest, a.size());
@@ -193,7 +192,7 @@ void StrAppend(absl::Nonnull<std::string*> dest, const AlphaNum& a) {
193
192
  assert(out == begin + dest->size());
194
193
  }
195
194
 
196
- void StrAppend(absl::Nonnull<std::string*> dest, const AlphaNum& a,
195
+ void StrAppend(std::string* absl_nonnull dest, const AlphaNum& a,
197
196
  const AlphaNum& b) {
198
197
  ASSERT_NO_OVERLAP(*dest, a);
199
198
  ASSERT_NO_OVERLAP(*dest, b);
@@ -206,7 +205,7 @@ void StrAppend(absl::Nonnull<std::string*> dest, const AlphaNum& a,
206
205
  assert(out == begin + dest->size());
207
206
  }
208
207
 
209
- void StrAppend(absl::Nonnull<std::string*> dest, const AlphaNum& a,
208
+ void StrAppend(std::string* absl_nonnull dest, const AlphaNum& a,
210
209
  const AlphaNum& b, const AlphaNum& c) {
211
210
  ASSERT_NO_OVERLAP(*dest, a);
212
211
  ASSERT_NO_OVERLAP(*dest, b);
@@ -221,7 +220,7 @@ void StrAppend(absl::Nonnull<std::string*> dest, const AlphaNum& a,
221
220
  assert(out == begin + dest->size());
222
221
  }
223
222
 
224
- void StrAppend(absl::Nonnull<std::string*> dest, const AlphaNum& a,
223
+ void StrAppend(std::string* absl_nonnull dest, const AlphaNum& a,
225
224
  const AlphaNum& b, const AlphaNum& c, const AlphaNum& d) {
226
225
  ASSERT_NO_OVERLAP(*dest, a);
227
226
  ASSERT_NO_OVERLAP(*dest, b);
@@ -111,7 +111,7 @@
111
111
  #include "absl/strings/numbers.h"
112
112
  #include "absl/strings/string_view.h"
113
113
 
114
- #if defined(ABSL_HAVE_STD_STRING_VIEW) && !defined(ABSL_USES_STD_STRING_VIEW)
114
+ #if !defined(ABSL_USES_STD_STRING_VIEW)
115
115
  #include <string_view>
116
116
  #endif
117
117
 
@@ -191,29 +191,29 @@ struct Hex {
191
191
  template <typename Int>
192
192
  explicit Hex(
193
193
  Int v, PadSpec spec = absl::kNoPad,
194
- typename std::enable_if<sizeof(Int) == 1 &&
195
- !std::is_pointer<Int>::value>::type* = nullptr)
194
+ std::enable_if_t<sizeof(Int) == 1 && !std::is_pointer<Int>::value, bool> =
195
+ true)
196
196
  : Hex(spec, static_cast<uint8_t>(v)) {}
197
197
  template <typename Int>
198
198
  explicit Hex(
199
199
  Int v, PadSpec spec = absl::kNoPad,
200
- typename std::enable_if<sizeof(Int) == 2 &&
201
- !std::is_pointer<Int>::value>::type* = nullptr)
200
+ std::enable_if_t<sizeof(Int) == 2 && !std::is_pointer<Int>::value, bool> =
201
+ true)
202
202
  : Hex(spec, static_cast<uint16_t>(v)) {}
203
203
  template <typename Int>
204
204
  explicit Hex(
205
205
  Int v, PadSpec spec = absl::kNoPad,
206
- typename std::enable_if<sizeof(Int) == 4 &&
207
- !std::is_pointer<Int>::value>::type* = nullptr)
206
+ std::enable_if_t<sizeof(Int) == 4 && !std::is_pointer<Int>::value, bool> =
207
+ true)
208
208
  : Hex(spec, static_cast<uint32_t>(v)) {}
209
209
  template <typename Int>
210
210
  explicit Hex(
211
211
  Int v, PadSpec spec = absl::kNoPad,
212
- typename std::enable_if<sizeof(Int) == 8 &&
213
- !std::is_pointer<Int>::value>::type* = nullptr)
212
+ std::enable_if_t<sizeof(Int) == 8 && !std::is_pointer<Int>::value, bool> =
213
+ true)
214
214
  : Hex(spec, static_cast<uint64_t>(v)) {}
215
215
  template <typename Pointee>
216
- explicit Hex(absl::Nullable<Pointee*> v, PadSpec spec = absl::kNoPad)
216
+ explicit Hex(Pointee* absl_nullable v, PadSpec spec = absl::kNoPad)
217
217
  : Hex(spec, reinterpret_cast<uintptr_t>(v)) {}
218
218
 
219
219
  template <typename S>
@@ -262,7 +262,7 @@ struct Dec {
262
262
 
263
263
  template <typename Int>
264
264
  explicit Dec(Int v, PadSpec spec = absl::kNoPad,
265
- typename std::enable_if<(sizeof(Int) <= 8)>::type* = nullptr)
265
+ std::enable_if_t<sizeof(Int) <= 8, bool> = true)
266
266
  : value(v >= 0 ? static_cast<uint64_t>(v)
267
267
  : uint64_t{0} - static_cast<uint64_t>(v)),
268
268
  width(spec == absl::kNoPad ? 1
@@ -359,14 +359,14 @@ class AlphaNum {
359
359
  ABSL_ATTRIBUTE_LIFETIME_BOUND)
360
360
  : piece_(&buf.data[0], buf.size) {}
361
361
 
362
- AlphaNum(absl::Nullable<const char*> c_str // NOLINT(runtime/explicit)
362
+ AlphaNum(const char* absl_nullable c_str // NOLINT(runtime/explicit)
363
363
  ABSL_ATTRIBUTE_LIFETIME_BOUND)
364
364
  : piece_(NullSafeStringView(c_str)) {}
365
365
  AlphaNum(absl::string_view pc // NOLINT(runtime/explicit)
366
366
  ABSL_ATTRIBUTE_LIFETIME_BOUND)
367
367
  : piece_(pc) {}
368
368
 
369
- #if defined(ABSL_HAVE_STD_STRING_VIEW) && !defined(ABSL_USES_STD_STRING_VIEW)
369
+ #if !defined(ABSL_USES_STD_STRING_VIEW)
370
370
  AlphaNum(std::string_view pc // NOLINT(runtime/explicit)
371
371
  ABSL_ATTRIBUTE_LIFETIME_BOUND)
372
372
  : piece_(pc.data(), pc.size()) {}
@@ -392,7 +392,7 @@ class AlphaNum {
392
392
  AlphaNum& operator=(const AlphaNum&) = delete;
393
393
 
394
394
  absl::string_view::size_type size() const { return piece_.size(); }
395
- absl::Nullable<const char*> data() const { return piece_.data(); }
395
+ const char* absl_nullable data() const { return piece_.data(); }
396
396
  absl::string_view Piece() const { return piece_; }
397
397
 
398
398
  // Match unscoped enums. Use integral promotion so that a `char`-backed
@@ -462,7 +462,7 @@ namespace strings_internal {
462
462
 
463
463
  // Do not call directly - this is not part of the public API.
464
464
  std::string CatPieces(std::initializer_list<absl::string_view> pieces);
465
- void AppendPieces(absl::Nonnull<std::string*> dest,
465
+ void AppendPieces(std::string* absl_nonnull dest,
466
466
  std::initializer_list<absl::string_view> pieces);
467
467
 
468
468
  template <typename Integer>
@@ -538,28 +538,28 @@ using EnableIfFastCase = T;
538
538
 
539
539
  } // namespace strings_internal
540
540
 
541
- ABSL_MUST_USE_RESULT inline std::string StrCat() { return std::string(); }
541
+ [[nodiscard]] inline std::string StrCat() { return std::string(); }
542
542
 
543
543
  template <typename T>
544
- ABSL_MUST_USE_RESULT inline std::string StrCat(
544
+ [[nodiscard]] inline std::string StrCat(
545
545
  strings_internal::EnableIfFastCase<T> a) {
546
546
  return strings_internal::SingleArgStrCat(a);
547
547
  }
548
- ABSL_MUST_USE_RESULT inline std::string StrCat(const AlphaNum& a) {
548
+ [[nodiscard]] inline std::string StrCat(const AlphaNum& a) {
549
549
  return std::string(a.data(), a.size());
550
550
  }
551
551
 
552
- ABSL_MUST_USE_RESULT std::string StrCat(const AlphaNum& a, const AlphaNum& b);
553
- ABSL_MUST_USE_RESULT std::string StrCat(const AlphaNum& a, const AlphaNum& b,
554
- const AlphaNum& c);
555
- ABSL_MUST_USE_RESULT std::string StrCat(const AlphaNum& a, const AlphaNum& b,
556
- const AlphaNum& c, const AlphaNum& d);
552
+ [[nodiscard]] std::string StrCat(const AlphaNum& a, const AlphaNum& b);
553
+ [[nodiscard]] std::string StrCat(const AlphaNum& a, const AlphaNum& b,
554
+ const AlphaNum& c);
555
+ [[nodiscard]] std::string StrCat(const AlphaNum& a, const AlphaNum& b,
556
+ const AlphaNum& c, const AlphaNum& d);
557
557
 
558
558
  // Support 5 or more arguments
559
559
  template <typename... AV>
560
- ABSL_MUST_USE_RESULT inline std::string StrCat(
561
- const AlphaNum& a, const AlphaNum& b, const AlphaNum& c, const AlphaNum& d,
562
- const AlphaNum& e, const AV&... args) {
560
+ [[nodiscard]] inline std::string StrCat(const AlphaNum& a, const AlphaNum& b,
561
+ const AlphaNum& c, const AlphaNum& d,
562
+ const AlphaNum& e, const AV&... args) {
563
563
  return strings_internal::CatPieces(
564
564
  {a.Piece(), b.Piece(), c.Piece(), d.Piece(), e.Piece(),
565
565
  static_cast<const AlphaNum&>(args).Piece()...});
@@ -592,18 +592,18 @@ ABSL_MUST_USE_RESULT inline std::string StrCat(
592
592
  // absl::string_view p = s;
593
593
  // StrAppend(&s, p);
594
594
 
595
- inline void StrAppend(absl::Nonnull<std::string*>) {}
596
- void StrAppend(absl::Nonnull<std::string*> dest, const AlphaNum& a);
597
- void StrAppend(absl::Nonnull<std::string*> dest, const AlphaNum& a,
595
+ inline void StrAppend(std::string* absl_nonnull) {}
596
+ void StrAppend(std::string* absl_nonnull dest, const AlphaNum& a);
597
+ void StrAppend(std::string* absl_nonnull dest, const AlphaNum& a,
598
598
  const AlphaNum& b);
599
- void StrAppend(absl::Nonnull<std::string*> dest, const AlphaNum& a,
599
+ void StrAppend(std::string* absl_nonnull dest, const AlphaNum& a,
600
600
  const AlphaNum& b, const AlphaNum& c);
601
- void StrAppend(absl::Nonnull<std::string*> dest, const AlphaNum& a,
601
+ void StrAppend(std::string* absl_nonnull dest, const AlphaNum& a,
602
602
  const AlphaNum& b, const AlphaNum& c, const AlphaNum& d);
603
603
 
604
604
  // Support 5 or more arguments
605
605
  template <typename... AV>
606
- inline void StrAppend(absl::Nonnull<std::string*> dest, const AlphaNum& a,
606
+ inline void StrAppend(std::string* absl_nonnull dest, const AlphaNum& a,
607
607
  const AlphaNum& b, const AlphaNum& c, const AlphaNum& d,
608
608
  const AlphaNum& e, const AV&... args) {
609
609
  strings_internal::AppendPieces(
@@ -112,7 +112,7 @@ class UntypedFormatSpec {
112
112
 
113
113
  protected:
114
114
  explicit UntypedFormatSpec(
115
- absl::Nonnull<const str_format_internal::ParsedFormatBase*> pc)
115
+ const str_format_internal::ParsedFormatBase* absl_nonnull pc)
116
116
  : spec_(pc) {}
117
117
 
118
118
  private:
@@ -152,7 +152,7 @@ str_format_internal::StreamedWrapper<T> FormatStreamed(const T& v) {
152
152
  // EXPECT_EQ(8, n);
153
153
  class FormatCountCapture {
154
154
  public:
155
- explicit FormatCountCapture(absl::Nonnull<int*> p) : p_(p) {}
155
+ explicit FormatCountCapture(int* absl_nonnull p) : p_(p) {}
156
156
 
157
157
  private:
158
158
  // FormatCountCaptureHelper is used to define FormatConvertImpl() for this
@@ -161,8 +161,8 @@ class FormatCountCapture {
161
161
  // Unused() is here because of the false positive from -Wunused-private-field
162
162
  // p_ is used in the templated function of the friend FormatCountCaptureHelper
163
163
  // class.
164
- absl::Nonnull<int*> Unused() { return p_; }
165
- absl::Nonnull<int*> p_;
164
+ int* absl_nonnull Unused() { return p_; }
165
+ int* absl_nonnull p_;
166
166
  };
167
167
 
168
168
  // FormatSpec
@@ -359,8 +359,8 @@ using ParsedFormat = str_format_internal::ExtendedParsedFormat<
359
359
  //
360
360
  // Returns an empty string in case of error.
361
361
  template <typename... Args>
362
- ABSL_MUST_USE_RESULT std::string StrFormat(const FormatSpec<Args...>& format,
363
- const Args&... args) {
362
+ [[nodiscard]] std::string StrFormat(const FormatSpec<Args...>& format,
363
+ const Args&... args) {
364
364
  return str_format_internal::FormatPack(
365
365
  str_format_internal::UntypedFormatSpecImpl::Extract(format),
366
366
  {str_format_internal::FormatArgImpl(args)...});
@@ -377,7 +377,7 @@ ABSL_MUST_USE_RESULT std::string StrFormat(const FormatSpec<Args...>& format,
377
377
  // std::string orig("For example PI is approximately ");
378
378
  // std::cout << StrAppendFormat(&orig, "%12.6f", 3.14);
379
379
  template <typename... Args>
380
- std::string& StrAppendFormat(absl::Nonnull<std::string*> dst,
380
+ std::string& StrAppendFormat(std::string* absl_nonnull dst,
381
381
  const FormatSpec<Args...>& format,
382
382
  const Args&... args) {
383
383
  return str_format_internal::AppendPack(
@@ -396,7 +396,7 @@ std::string& StrAppendFormat(absl::Nonnull<std::string*> dst,
396
396
  //
397
397
  // std::cout << StreamFormat("%12.6f", 3.14);
398
398
  template <typename... Args>
399
- ABSL_MUST_USE_RESULT str_format_internal::Streamable StreamFormat(
399
+ [[nodiscard]] str_format_internal::Streamable StreamFormat(
400
400
  const FormatSpec<Args...>& format, const Args&... args) {
401
401
  return str_format_internal::Streamable(
402
402
  str_format_internal::UntypedFormatSpecImpl::Extract(format),
@@ -437,7 +437,7 @@ int PrintF(const FormatSpec<Args...>& format, const Args&... args) {
437
437
  // Outputs: "The capital of Mongolia is Ulaanbaatar"
438
438
  //
439
439
  template <typename... Args>
440
- int FPrintF(absl::Nonnull<std::FILE*> output, const FormatSpec<Args...>& format,
440
+ int FPrintF(std::FILE* absl_nonnull output, const FormatSpec<Args...>& format,
441
441
  const Args&... args) {
442
442
  return str_format_internal::FprintF(
443
443
  output, str_format_internal::UntypedFormatSpecImpl::Extract(format),
@@ -466,7 +466,7 @@ int FPrintF(absl::Nonnull<std::FILE*> output, const FormatSpec<Args...>& format,
466
466
  // Post-condition: output == "The capital of Mongolia is Ulaanbaatar"
467
467
  //
468
468
  template <typename... Args>
469
- int SNPrintF(absl::Nonnull<char*> output, std::size_t size,
469
+ int SNPrintF(char* absl_nonnull output, std::size_t size,
470
470
  const FormatSpec<Args...>& format, const Args&... args) {
471
471
  return str_format_internal::SnprintF(
472
472
  output, size, str_format_internal::UntypedFormatSpecImpl::Extract(format),
@@ -500,7 +500,7 @@ class FormatRawSink {
500
500
  template <typename T,
501
501
  typename = typename std::enable_if<std::is_constructible<
502
502
  str_format_internal::FormatRawSinkImpl, T*>::value>::type>
503
- FormatRawSink(absl::Nonnull<T*> raw) // NOLINT
503
+ FormatRawSink(T* absl_nonnull raw) // NOLINT
504
504
  : sink_(raw) {}
505
505
 
506
506
  private:
@@ -582,9 +582,9 @@ using FormatArg = str_format_internal::FormatArgImpl;
582
582
  // return std::move(out);
583
583
  // }
584
584
  //
585
- ABSL_MUST_USE_RESULT inline bool FormatUntyped(
586
- FormatRawSink raw_sink, const UntypedFormatSpec& format,
587
- absl::Span<const FormatArg> args) {
585
+ [[nodiscard]] inline bool FormatUntyped(FormatRawSink raw_sink,
586
+ const UntypedFormatSpec& format,
587
+ absl::Span<const FormatArg> args) {
588
588
  return str_format_internal::FormatUntyped(
589
589
  str_format_internal::FormatRawSinkImpl::Extract(raw_sink),
590
590
  str_format_internal::UntypedFormatSpecImpl::Extract(format), args);
@@ -609,7 +609,7 @@ ABSL_MUST_USE_RESULT inline bool FormatUntyped(
609
609
  //
610
610
  // Note that unlike with AbslFormatConvert(), AbslStringify() does not allow
611
611
  // customization of allowed conversion characters. AbslStringify() uses `%v` as
612
- // the underlying conversion specififer. Additionally, AbslStringify() supports
612
+ // the underlying conversion specifier. Additionally, AbslStringify() supports
613
613
  // use with absl::StrCat while AbslFormatConvert() does not.
614
614
  //
615
615
  // Example:
@@ -857,16 +857,16 @@ class FormatSink {
857
857
  }
858
858
 
859
859
  // Support `absl::Format(&sink, format, args...)`.
860
- friend void AbslFormatFlush(absl::Nonnull<FormatSink*> sink,
860
+ friend void AbslFormatFlush(FormatSink* absl_nonnull sink,
861
861
  absl::string_view v) {
862
862
  sink->Append(v);
863
863
  }
864
864
 
865
865
  private:
866
866
  friend str_format_internal::FormatSinkImpl;
867
- explicit FormatSink(absl::Nonnull<str_format_internal::FormatSinkImpl*> s)
867
+ explicit FormatSink(str_format_internal::FormatSinkImpl* absl_nonnull s)
868
868
  : sink_(s) {}
869
- absl::Nonnull<str_format_internal::FormatSinkImpl*> sink_;
869
+ str_format_internal::FormatSinkImpl* absl_nonnull sink_;
870
870
  };
871
871
 
872
872
  // FormatConvertResult
@@ -37,8 +37,8 @@ using FixedMapping =
37
37
  // occurred.
38
38
  int ApplySubstitutions(
39
39
  absl::string_view s,
40
- absl::Nonnull<std::vector<strings_internal::ViableSubstitution>*> subs_ptr,
41
- absl::Nonnull<std::string*> result_ptr) {
40
+ std::vector<strings_internal::ViableSubstitution>* absl_nonnull subs_ptr,
41
+ std::string* absl_nonnull result_ptr) {
42
42
  auto& subs = *subs_ptr;
43
43
  int substitutions = 0;
44
44
  size_t pos = 0;
@@ -83,7 +83,7 @@ std::string StrReplaceAll(absl::string_view s,
83
83
  }
84
84
 
85
85
  int StrReplaceAll(strings_internal::FixedMapping replacements,
86
- absl::Nonnull<std::string*> target) {
86
+ std::string* absl_nonnull target) {
87
87
  return StrReplaceAll<strings_internal::FixedMapping>(replacements, target);
88
88
  }
89
89