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
@@ -63,8 +63,9 @@ bool LogEveryNSecState::ShouldLog(double seconds) {
63
63
  // myriad2 does not have 8-byte compare and exchange. Use a racy version that
64
64
  // is "good enough" but will over-log in the face of concurrent logging.
65
65
  if (now_cycles > next_cycles) {
66
- next_log_time_cycles_.store(now_cycles + seconds * CycleClock::Frequency(),
67
- std::memory_order_relaxed);
66
+ next_log_time_cycles_.store(
67
+ static_cast<int64_t>(now_cycles + seconds * CycleClock::Frequency()),
68
+ std::memory_order_relaxed);
68
69
  return true;
69
70
  }
70
71
  return false;
@@ -72,7 +73,8 @@ bool LogEveryNSecState::ShouldLog(double seconds) {
72
73
  do {
73
74
  if (now_cycles <= next_cycles) return false;
74
75
  } while (!next_log_time_cycles_.compare_exchange_weak(
75
- next_cycles, now_cycles + seconds * CycleClock::Frequency(),
76
+ next_cycles,
77
+ static_cast<int64_t>(now_cycles + seconds * CycleClock::Frequency()),
76
78
  std::memory_order_relaxed, std::memory_order_relaxed));
77
79
  return true;
78
80
  #endif
@@ -65,7 +65,7 @@
65
65
  switch (0) \
66
66
  case 0: \
67
67
  default: \
68
- !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
68
+ !(condition) ? (void)0 : ::absl::log_internal::Voidify() &&
69
69
 
70
70
  // `ABSL_LOG_INTERNAL_STATEFUL_CONDITION` applies a condition like
71
71
  // `ABSL_LOG_INTERNAL_STATELESS_CONDITION` but adds to that a series of variable
@@ -96,7 +96,8 @@
96
96
  for (const uint32_t COUNTER ABSL_ATTRIBUTE_UNUSED = \
97
97
  absl_log_internal_stateful_condition_state.counter(); \
98
98
  absl_log_internal_stateful_condition_do_log; \
99
- absl_log_internal_stateful_condition_do_log = false)
99
+ absl_log_internal_stateful_condition_do_log = false) \
100
+ ::absl::log_internal::Voidify() &&
100
101
 
101
102
  // `ABSL_LOG_INTERNAL_CONDITION_*` serve to combine any conditions from the
102
103
  // macro (e.g. `LOG_IF` or `VLOG`) with inherent conditions (e.g.
@@ -117,6 +118,8 @@
117
118
  ABSL_LOG_INTERNAL_##type##_CONDITION( \
118
119
  (condition) && ::absl::LogSeverity::kError >= \
119
120
  static_cast<::absl::LogSeverity>(ABSL_MIN_LOG_LEVEL))
121
+ #define ABSL_LOG_INTERNAL_CONDITION_DO_NOT_SUBMIT(type, condition) \
122
+ ABSL_LOG_INTERNAL_CONDITION_ERROR(type, condition)
120
123
  // NOTE: Use ternary operators instead of short-circuiting to mitigate
121
124
  // https://bugs.llvm.org/show_bug.cgi?id=51928.
122
125
  #define ABSL_LOG_INTERNAL_CONDITION_FATAL(type, condition) \
@@ -168,6 +171,8 @@
168
171
  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
169
172
  #define ABSL_LOG_INTERNAL_CONDITION_ERROR(type, condition) \
170
173
  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
174
+ #define ABSL_LOG_INTERNAL_CONDITION_DO_NOT_SUBMIT(type, condition) \
175
+ ABSL_LOG_INTERNAL_CONDITION_ERROR(type, condition)
171
176
  #define ABSL_LOG_INTERNAL_CONDITION_FATAL(type, condition) \
172
177
  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
173
178
  #define ABSL_LOG_INTERNAL_CONDITION_QFATAL(type, condition) \
@@ -31,6 +31,7 @@
31
31
  #include <memory>
32
32
  #include <ostream>
33
33
  #include <string>
34
+ #include <string_view>
34
35
  #include <tuple>
35
36
 
36
37
  #include "absl/base/attributes.h"
@@ -47,12 +48,14 @@
47
48
  #include "absl/log/internal/globals.h"
48
49
  #include "absl/log/internal/log_format.h"
49
50
  #include "absl/log/internal/log_sink_set.h"
51
+ #include "absl/log/internal/nullguard.h"
50
52
  #include "absl/log/internal/proto.h"
51
53
  #include "absl/log/internal/structured_proto.h"
52
54
  #include "absl/log/log_entry.h"
53
55
  #include "absl/log/log_sink.h"
54
56
  #include "absl/log/log_sink_registry.h"
55
57
  #include "absl/memory/memory.h"
58
+ #include "absl/strings/internal/utf8.h"
56
59
  #include "absl/strings/string_view.h"
57
60
  #include "absl/time/clock.h"
58
61
  #include "absl/time/time.h"
@@ -147,7 +150,7 @@ void WriteToStream(const char* data, void* os) {
147
150
  } // namespace
148
151
 
149
152
  struct LogMessage::LogMessageData final {
150
- LogMessageData(absl::Nonnull<const char*> file, int line,
153
+ LogMessageData(const char* absl_nonnull file, int line,
151
154
  absl::LogSeverity severity, absl::Time timestamp);
152
155
  LogMessageData(const LogMessageData&) = delete;
153
156
  LogMessageData& operator=(const LogMessageData&) = delete;
@@ -163,7 +166,7 @@ struct LogMessage::LogMessageData final {
163
166
  bool is_perror;
164
167
 
165
168
  // Extra `LogSink`s to log to, in addition to `global_sinks`.
166
- absl::InlinedVector<absl::Nonnull<absl::LogSink*>, 16> extra_sinks;
169
+ absl::InlinedVector<absl::LogSink* absl_nonnull, 16> extra_sinks;
167
170
  // If true, log to `extra_sinks` but not to `global_sinks` or hardcoded
168
171
  // non-sink targets (e.g. stderr, log files).
169
172
  bool extra_sinks_only;
@@ -199,7 +202,7 @@ struct LogMessage::LogMessageData final {
199
202
  void FinalizeEncodingAndFormat();
200
203
  };
201
204
 
202
- LogMessage::LogMessageData::LogMessageData(absl::Nonnull<const char*> file,
205
+ LogMessage::LogMessageData::LogMessageData(const char* absl_nonnull file,
203
206
  int line, absl::LogSeverity severity,
204
207
  absl::Time timestamp)
205
208
  : extra_sinks_only(false), manipulated(nullptr) {
@@ -270,7 +273,7 @@ void LogMessage::LogMessageData::FinalizeEncodingAndFormat() {
270
273
  absl::MakeSpan(string_buf).subspan(0, chars_written);
271
274
  }
272
275
 
273
- LogMessage::LogMessage(absl::Nonnull<const char*> file, int line,
276
+ LogMessage::LogMessage(const char* absl_nonnull file, int line,
274
277
  absl::LogSeverity severity)
275
278
  : data_(absl::make_unique<LogMessageData>(file, line, severity,
276
279
  absl::Now())) {
@@ -284,23 +287,15 @@ LogMessage::LogMessage(absl::Nonnull<const char*> file, int line,
284
287
  LogBacktraceIfNeeded();
285
288
  }
286
289
 
287
- LogMessage::LogMessage(absl::Nonnull<const char*> file, int line, InfoTag)
290
+ LogMessage::LogMessage(const char* absl_nonnull file, int line, InfoTag)
288
291
  : LogMessage(file, line, absl::LogSeverity::kInfo) {}
289
- LogMessage::LogMessage(absl::Nonnull<const char*> file, int line, WarningTag)
292
+ LogMessage::LogMessage(const char* absl_nonnull file, int line, WarningTag)
290
293
  : LogMessage(file, line, absl::LogSeverity::kWarning) {}
291
- LogMessage::LogMessage(absl::Nonnull<const char*> file, int line, ErrorTag)
294
+ LogMessage::LogMessage(const char* absl_nonnull file, int line, ErrorTag)
292
295
  : LogMessage(file, line, absl::LogSeverity::kError) {}
293
296
 
294
- LogMessage::~LogMessage() {
295
- #ifdef ABSL_MIN_LOG_LEVEL
296
- if (data_->entry.log_severity() <
297
- static_cast<absl::LogSeverity>(ABSL_MIN_LOG_LEVEL) &&
298
- data_->entry.log_severity() < absl::LogSeverity::kFatal) {
299
- return;
300
- }
301
- #endif
302
- Flush();
303
- }
297
+ // This cannot go in the header since LogMessageData is defined in this file.
298
+ LogMessage::~LogMessage() = default;
304
299
 
305
300
  LogMessage& LogMessage::AtLocation(absl::string_view file, int line) {
306
301
  data_->entry.full_filename_ = file;
@@ -351,13 +346,13 @@ LogMessage& LogMessage::WithPerror() {
351
346
  return *this;
352
347
  }
353
348
 
354
- LogMessage& LogMessage::ToSinkAlso(absl::Nonnull<absl::LogSink*> sink) {
349
+ LogMessage& LogMessage::ToSinkAlso(absl::LogSink* absl_nonnull sink) {
355
350
  ABSL_INTERNAL_CHECK(sink, "null LogSink*");
356
351
  data_->extra_sinks.push_back(sink);
357
352
  return *this;
358
353
  }
359
354
 
360
- LogMessage& LogMessage::ToSinkOnly(absl::Nonnull<absl::LogSink*> sink) {
355
+ LogMessage& LogMessage::ToSinkOnly(absl::LogSink* absl_nonnull sink) {
361
356
  ABSL_INTERNAL_CHECK(sink, "null LogSink*");
362
357
  data_->extra_sinks.clear();
363
358
  data_->extra_sinks.push_back(sink);
@@ -411,6 +406,34 @@ LogMessage& LogMessage::operator<<(absl::string_view v) {
411
406
  CopyToEncodedBuffer<StringType::kNotLiteral>(v);
412
407
  return *this;
413
408
  }
409
+
410
+ LogMessage& LogMessage::operator<<(const std::wstring& v) {
411
+ CopyToEncodedBuffer<StringType::kNotLiteral>(v);
412
+ return *this;
413
+ }
414
+
415
+ LogMessage& LogMessage::operator<<(std::wstring_view v) {
416
+ CopyToEncodedBuffer<StringType::kNotLiteral>(v);
417
+ return *this;
418
+ }
419
+
420
+ template <>
421
+ LogMessage& LogMessage::operator<< <const wchar_t*>(
422
+ const wchar_t* absl_nullable const& v) {
423
+ if (v == nullptr) {
424
+ CopyToEncodedBuffer<StringType::kNotLiteral>(
425
+ absl::string_view(kCharNull.data(), kCharNull.size() - 1));
426
+ } else {
427
+ CopyToEncodedBuffer<StringType::kNotLiteral>(v);
428
+ }
429
+ return *this;
430
+ }
431
+
432
+ LogMessage& LogMessage::operator<<(wchar_t v) {
433
+ CopyToEncodedBuffer<StringType::kNotLiteral>(std::wstring_view(&v, 1));
434
+ return *this;
435
+ }
436
+
414
437
  LogMessage& LogMessage::operator<<(std::ostream& (*m)(std::ostream& os)) {
415
438
  OstreamView view(*data_);
416
439
  data_->manipulated << m;
@@ -633,6 +656,37 @@ template void LogMessage::CopyToEncodedBuffer<LogMessage::StringType::kLiteral>(
633
656
  template void LogMessage::CopyToEncodedBuffer<
634
657
  LogMessage::StringType::kNotLiteral>(char ch, size_t num);
635
658
 
659
+ template <LogMessage::StringType str_type>
660
+ void LogMessage::CopyToEncodedBuffer(std::wstring_view str) {
661
+ auto encoded_remaining_copy = data_->encoded_remaining();
662
+ constexpr uint8_t tag_value = str_type == StringType::kLiteral
663
+ ? ValueTag::kStringLiteral
664
+ : ValueTag::kString;
665
+ size_t max_str_byte_length =
666
+ absl::strings_internal::kMaxEncodedUTF8Size * str.length();
667
+ auto value_start =
668
+ EncodeMessageStart(EventTag::kValue,
669
+ BufferSizeFor(tag_value, WireType::kLengthDelimited) +
670
+ max_str_byte_length,
671
+ &encoded_remaining_copy);
672
+ auto str_start = EncodeMessageStart(tag_value, max_str_byte_length,
673
+ &encoded_remaining_copy);
674
+ if (str_start.data()) {
675
+ log_internal::AppendTruncated(str, encoded_remaining_copy);
676
+ EncodeMessageLength(str_start, &encoded_remaining_copy);
677
+ EncodeMessageLength(value_start, &encoded_remaining_copy);
678
+ data_->encoded_remaining() = encoded_remaining_copy;
679
+ } else {
680
+ // The field header(s) did not fit; zero `encoded_remaining()` so we don't
681
+ // write anything else later.
682
+ data_->encoded_remaining().remove_suffix(data_->encoded_remaining().size());
683
+ }
684
+ }
685
+ template void LogMessage::CopyToEncodedBuffer<LogMessage::StringType::kLiteral>(
686
+ std::wstring_view str);
687
+ template void LogMessage::CopyToEncodedBuffer<
688
+ LogMessage::StringType::kNotLiteral>(std::wstring_view str);
689
+
636
690
  template void LogMessage::CopyToEncodedBufferWithStructuredProtoField<
637
691
  LogMessage::StringType::kLiteral>(StructuredProtoField field,
638
692
  absl::string_view str);
@@ -681,57 +735,45 @@ void LogMessage::CopyToEncodedBufferWithStructuredProtoField(
681
735
  #pragma warning(disable : 4722)
682
736
  #endif
683
737
 
684
- LogMessageFatal::LogMessageFatal(absl::Nonnull<const char*> file, int line)
738
+ LogMessageFatal::LogMessageFatal(const char* absl_nonnull file, int line)
685
739
  : LogMessage(file, line, absl::LogSeverity::kFatal) {}
686
740
 
687
- LogMessageFatal::LogMessageFatal(absl::Nonnull<const char*> file, int line,
688
- absl::Nonnull<const char*> failure_msg)
741
+ LogMessageFatal::LogMessageFatal(const char* absl_nonnull file, int line,
742
+ const char* absl_nonnull failure_msg)
689
743
  : LogMessage(file, line, absl::LogSeverity::kFatal) {
690
744
  *this << "Check failed: " << failure_msg << " ";
691
745
  }
692
746
 
693
- LogMessageFatal::~LogMessageFatal() {
694
- Flush();
695
- FailWithoutStackTrace();
696
- }
747
+ LogMessageFatal::~LogMessageFatal() { FailWithoutStackTrace(); }
697
748
 
698
- LogMessageDebugFatal::LogMessageDebugFatal(absl::Nonnull<const char*> file,
749
+ LogMessageDebugFatal::LogMessageDebugFatal(const char* absl_nonnull file,
699
750
  int line)
700
751
  : LogMessage(file, line, absl::LogSeverity::kFatal) {}
701
752
 
702
- LogMessageDebugFatal::~LogMessageDebugFatal() {
703
- Flush();
704
- FailWithoutStackTrace();
705
- }
753
+ LogMessageDebugFatal::~LogMessageDebugFatal() { FailWithoutStackTrace(); }
706
754
 
707
755
  LogMessageQuietlyDebugFatal::LogMessageQuietlyDebugFatal(
708
- absl::Nonnull<const char*> file, int line)
756
+ const char* absl_nonnull file, int line)
709
757
  : LogMessage(file, line, absl::LogSeverity::kFatal) {
710
758
  SetFailQuietly();
711
759
  }
712
760
 
713
- LogMessageQuietlyDebugFatal::~LogMessageQuietlyDebugFatal() {
714
- Flush();
715
- FailQuietly();
716
- }
761
+ LogMessageQuietlyDebugFatal::~LogMessageQuietlyDebugFatal() { FailQuietly(); }
717
762
 
718
- LogMessageQuietlyFatal::LogMessageQuietlyFatal(absl::Nonnull<const char*> file,
763
+ LogMessageQuietlyFatal::LogMessageQuietlyFatal(const char* absl_nonnull file,
719
764
  int line)
720
765
  : LogMessage(file, line, absl::LogSeverity::kFatal) {
721
766
  SetFailQuietly();
722
767
  }
723
768
 
724
769
  LogMessageQuietlyFatal::LogMessageQuietlyFatal(
725
- absl::Nonnull<const char*> file, int line,
726
- absl::Nonnull<const char*> failure_msg)
770
+ const char* absl_nonnull file, int line,
771
+ const char* absl_nonnull failure_msg)
727
772
  : LogMessageQuietlyFatal(file, line) {
728
773
  *this << "Check failed: " << failure_msg << " ";
729
774
  }
730
775
 
731
- LogMessageQuietlyFatal::~LogMessageQuietlyFatal() {
732
- Flush();
733
- FailQuietly();
734
- }
776
+ LogMessageQuietlyFatal::~LogMessageQuietlyFatal() { FailQuietly(); }
735
777
  #if defined(_MSC_VER) && !defined(__clang__)
736
778
  #pragma warning(pop)
737
779
  #endif
@@ -17,22 +17,25 @@
17
17
  // -----------------------------------------------------------------------------
18
18
  //
19
19
  // This file declares `class absl::log_internal::LogMessage`. This class more or
20
- // less represents a particular log message. LOG/CHECK macros create a
21
- // temporary instance of `LogMessage` and then stream values to it. At the end
22
- // of the LOG/CHECK statement, LogMessage instance goes out of scope and
23
- // `~LogMessage` directs the message to the registered log sinks.
24
- // Heap-allocation of `LogMessage` is unsupported. Construction outside of a
25
- // `LOG` macro is unsupported.
20
+ // less represents a particular log message. LOG/CHECK macros create a temporary
21
+ // instance of `LogMessage` and then stream values to it. At the end of the
22
+ // LOG/CHECK statement, the LogMessage is voidified by operator&&, and `Flush()`
23
+ // directs the message to the registered log sinks. Heap-allocation of
24
+ // `LogMessage` is unsupported. Construction outside of a `LOG` macro is
25
+ // unsupported.
26
26
 
27
27
  #ifndef ABSL_LOG_INTERNAL_LOG_MESSAGE_H_
28
28
  #define ABSL_LOG_INTERNAL_LOG_MESSAGE_H_
29
29
 
30
+ #include <wchar.h>
31
+
30
32
  #include <cstddef>
31
33
  #include <ios>
32
34
  #include <memory>
33
35
  #include <ostream>
34
36
  #include <streambuf>
35
37
  #include <string>
38
+ #include <string_view>
36
39
  #include <type_traits>
37
40
 
38
41
  #include "absl/base/attributes.h"
@@ -62,15 +65,15 @@ class LogMessage {
62
65
  struct ErrorTag {};
63
66
 
64
67
  // Used for `LOG`.
65
- LogMessage(absl::Nonnull<const char*> file, int line,
68
+ LogMessage(const char* absl_nonnull file, int line,
66
69
  absl::LogSeverity severity) ABSL_ATTRIBUTE_COLD;
67
70
  // These constructors are slightly smaller/faster to call; the severity is
68
71
  // curried into the function pointer.
69
- LogMessage(absl::Nonnull<const char*> file, int line,
72
+ LogMessage(const char* absl_nonnull file, int line,
70
73
  InfoTag) ABSL_ATTRIBUTE_COLD ABSL_ATTRIBUTE_NOINLINE;
71
- LogMessage(absl::Nonnull<const char*> file, int line,
74
+ LogMessage(const char* absl_nonnull file, int line,
72
75
  WarningTag) ABSL_ATTRIBUTE_COLD ABSL_ATTRIBUTE_NOINLINE;
73
- LogMessage(absl::Nonnull<const char*> file, int line,
76
+ LogMessage(const char* absl_nonnull file, int line,
74
77
  ErrorTag) ABSL_ATTRIBUTE_COLD ABSL_ATTRIBUTE_NOINLINE;
75
78
  LogMessage(const LogMessage&) = delete;
76
79
  LogMessage& operator=(const LogMessage&) = delete;
@@ -102,9 +105,9 @@ class LogMessage {
102
105
  LogMessage& WithPerror();
103
106
  // Sends this message to `*sink` in addition to whatever other sinks it would
104
107
  // otherwise have been sent to.
105
- LogMessage& ToSinkAlso(absl::Nonnull<absl::LogSink*> sink);
108
+ LogMessage& ToSinkAlso(absl::LogSink* absl_nonnull sink);
106
109
  // Sends this message to `*sink` and no others.
107
- LogMessage& ToSinkOnly(absl::Nonnull<absl::LogSink*> sink);
110
+ LogMessage& ToSinkOnly(absl::LogSink* absl_nonnull sink);
108
111
 
109
112
  // Don't call this method from outside this library.
110
113
  LogMessage& InternalStream() { return *this; }
@@ -141,10 +144,10 @@ class LogMessage {
141
144
  LogMessage& operator<<(unsigned long long v) {
142
145
  return operator<< <unsigned long long>(v);
143
146
  }
144
- LogMessage& operator<<(absl::Nullable<void*> v) {
147
+ LogMessage& operator<<(void* absl_nullable v) {
145
148
  return operator<< <void*>(v);
146
149
  }
147
- LogMessage& operator<<(absl::Nullable<const void*> v) {
150
+ LogMessage& operator<<(const void* absl_nullable v) {
148
151
  return operator<< <const void*>(v);
149
152
  }
150
153
  LogMessage& operator<<(float v) { return operator<< <float>(v); }
@@ -158,10 +161,16 @@ class LogMessage {
158
161
  LogMessage& operator<<(const std::string& v);
159
162
  LogMessage& operator<<(absl::string_view v);
160
163
 
164
+ // Wide string overloads (since std::ostream does not provide them).
165
+ LogMessage& operator<<(const std::wstring& v);
166
+ LogMessage& operator<<(std::wstring_view v);
167
+ // `const wchar_t*` is handled by `operator<< <const wchar_t*>`.
168
+ LogMessage& operator<<(wchar_t* absl_nullable v);
169
+ LogMessage& operator<<(wchar_t v);
170
+
161
171
  // Handle stream manipulators e.g. std::endl.
162
- LogMessage& operator<<(absl::Nonnull<std::ostream& (*)(std::ostream & os)> m);
163
- LogMessage& operator<<(
164
- absl::Nonnull<std::ios_base& (*)(std::ios_base & os)> m);
172
+ LogMessage& operator<<(std::ostream& (*absl_nonnull m)(std::ostream& os));
173
+ LogMessage& operator<<(std::ios_base& (*absl_nonnull m)(std::ios_base& os));
165
174
 
166
175
  // Literal strings. This allows us to record C string literals as literals in
167
176
  // the logging.proto.Value.
@@ -170,31 +179,30 @@ class LogMessage {
170
179
  // this template for every value of `SIZE` encountered in each source code
171
180
  // file. That significantly increases linker input sizes. Inlining is cheap
172
181
  // because the argument to this overload is almost always a string literal so
173
- // the call to `strlen` can be replaced at compile time. The overload for
174
- // `char[]` below should not be inlined. The compiler typically does not have
175
- // the string at compile time and cannot replace the call to `strlen` so
176
- // inlining it increases the binary size. See the discussion on
182
+ // the call to `strlen` can be replaced at compile time. The overloads for
183
+ // `char[]`/`wchar_t[]` below should not be inlined. The compiler typically
184
+ // does not have the string at compile time and cannot replace the call to
185
+ // `strlen` so inlining it increases the binary size. See the discussion on
177
186
  // cl/107527369.
178
187
  template <int SIZE>
179
188
  LogMessage& operator<<(const char (&buf)[SIZE]);
189
+ template <int SIZE>
190
+ LogMessage& operator<<(const wchar_t (&buf)[SIZE]);
180
191
 
181
192
  // This prevents non-const `char[]` arrays from looking like literals.
182
193
  template <int SIZE>
183
194
  LogMessage& operator<<(char (&buf)[SIZE]) ABSL_ATTRIBUTE_NOINLINE;
195
+ // `wchar_t[SIZE]` is handled by `operator<< <const wchar_t*>`.
184
196
 
185
197
  // Types that support `AbslStringify()` are serialized that way.
186
- template <typename T,
187
- typename std::enable_if<absl::HasAbslStringify<T>::value,
188
- int>::type = 0>
189
- LogMessage& operator<<(const T& v) ABSL_ATTRIBUTE_NOINLINE;
190
-
191
198
  // Types that don't support `AbslStringify()` but do support streaming into a
192
199
  // `std::ostream&` are serialized that way.
193
- template <typename T,
194
- typename std::enable_if<!absl::HasAbslStringify<T>::value,
195
- int>::type = 0>
200
+ template <typename T>
196
201
  LogMessage& operator<<(const T& v) ABSL_ATTRIBUTE_NOINLINE;
197
202
 
203
+ // Dispatches the completed `absl::LogEntry` to applicable `absl::LogSink`s.
204
+ void Flush();
205
+
198
206
  // Note: We explicitly do not support `operator<<` for non-const references
199
207
  // because it breaks logging of non-integer bitfield types (i.e., enums).
200
208
 
@@ -207,11 +215,6 @@ class LogMessage {
207
215
  // the process with an error exit code.
208
216
  [[noreturn]] static void FailQuietly();
209
217
 
210
- // Dispatches the completed `absl::LogEntry` to applicable `absl::LogSink`s.
211
- // This might as well be inlined into `~LogMessage` except that
212
- // `~LogMessageFatal` needs to call it early.
213
- void Flush();
214
-
215
218
  // After this is called, failures are done as quiet as possible for this log
216
219
  // message.
217
220
  void SetFailQuietly();
@@ -253,6 +256,8 @@ class LogMessage {
253
256
  void CopyToEncodedBuffer(absl::string_view str) ABSL_ATTRIBUTE_NOINLINE;
254
257
  template <StringType str_type>
255
258
  void CopyToEncodedBuffer(char ch, size_t num) ABSL_ATTRIBUTE_NOINLINE;
259
+ template <StringType str_type>
260
+ void CopyToEncodedBuffer(std::wstring_view str) ABSL_ATTRIBUTE_NOINLINE;
256
261
 
257
262
  // Copies `field` to the encoded buffer, then appends `str` after it
258
263
  // (truncating `str` if necessary to fit).
@@ -280,9 +285,25 @@ class LogMessage {
280
285
 
281
286
  // We keep the data in a separate struct so that each instance of `LogMessage`
282
287
  // uses less stack space.
283
- absl::Nonnull<std::unique_ptr<LogMessageData>> data_;
288
+ absl_nonnull std::unique_ptr<LogMessageData> data_;
284
289
  };
285
290
 
291
+ // Explicitly specializes the generic operator<< for `const wchar_t*`
292
+ // arguments.
293
+ //
294
+ // This method is used instead of a non-template `const wchar_t*` overload,
295
+ // as the latter was found to take precedence over the array template
296
+ // (`operator<<(const wchar_t(&)[SIZE])`) when handling string literals.
297
+ // This specialization ensures the array template now correctly processes
298
+ // literals.
299
+ template <>
300
+ LogMessage& LogMessage::operator<< <const wchar_t*>(
301
+ const wchar_t* absl_nullable const& v);
302
+
303
+ inline LogMessage& LogMessage::operator<<(wchar_t* absl_nullable v) {
304
+ return operator<<(const_cast<const wchar_t*>(v));
305
+ }
306
+
286
307
  // Helper class so that `AbslStringify()` can modify the LogMessage.
287
308
  class StringifySink final {
288
309
  public:
@@ -298,7 +319,7 @@ class StringifySink final {
298
319
  }
299
320
 
300
321
  // For types that implement `AbslStringify` using `absl::Format()`.
301
- friend void AbslFormatFlush(absl::Nonnull<StringifySink*> sink,
322
+ friend void AbslFormatFlush(StringifySink* absl_nonnull sink,
302
323
  absl::string_view v) {
303
324
  sink->Append(v);
304
325
  }
@@ -308,26 +329,27 @@ class StringifySink final {
308
329
  };
309
330
 
310
331
  // Note: the following is declared `ABSL_ATTRIBUTE_NOINLINE`
311
- template <typename T,
312
- typename std::enable_if<absl::HasAbslStringify<T>::value, int>::type>
332
+ template <typename T>
313
333
  LogMessage& LogMessage::operator<<(const T& v) {
314
- StringifySink sink(*this);
315
- // Replace with public API.
316
- AbslStringify(sink, v);
334
+ if constexpr (absl::HasAbslStringify<T>::value) {
335
+ StringifySink sink(*this);
336
+ // Replace with public API.
337
+ AbslStringify(sink, v);
338
+ } else {
339
+ OstreamView view(*data_);
340
+ view.stream() << log_internal::NullGuard<T>().Guard(v);
341
+ }
317
342
  return *this;
318
343
  }
319
344
 
320
- // Note: the following is declared `ABSL_ATTRIBUTE_NOINLINE`
321
- template <typename T,
322
- typename std::enable_if<!absl::HasAbslStringify<T>::value, int>::type>
323
- LogMessage& LogMessage::operator<<(const T& v) {
324
- OstreamView view(*data_);
325
- view.stream() << log_internal::NullGuard<T>().Guard(v);
345
+ template <int SIZE>
346
+ LogMessage& LogMessage::operator<<(const char (&buf)[SIZE]) {
347
+ CopyToEncodedBuffer<StringType::kLiteral>(buf);
326
348
  return *this;
327
349
  }
328
350
 
329
351
  template <int SIZE>
330
- LogMessage& LogMessage::operator<<(const char (&buf)[SIZE]) {
352
+ LogMessage& LogMessage::operator<<(const wchar_t (&buf)[SIZE]) {
331
353
  CopyToEncodedBuffer<StringType::kLiteral>(buf);
332
354
  return *this;
333
355
  }
@@ -355,9 +377,9 @@ extern template LogMessage& LogMessage::operator<<(const unsigned long& v);
355
377
  extern template LogMessage& LogMessage::operator<<(const long long& v);
356
378
  extern template LogMessage& LogMessage::operator<<(const unsigned long long& v);
357
379
  extern template LogMessage& LogMessage::operator<<(
358
- absl::Nullable<void*> const& v);
380
+ void* absl_nullable const& v);
359
381
  extern template LogMessage& LogMessage::operator<<(
360
- absl::Nullable<const void*> const& v);
382
+ const void* absl_nullable const& v);
361
383
  extern template LogMessage& LogMessage::operator<<(const float& v);
362
384
  extern template LogMessage& LogMessage::operator<<(const double& v);
363
385
  extern template LogMessage& LogMessage::operator<<(const bool& v);
@@ -373,15 +395,18 @@ LogMessage::CopyToEncodedBuffer<LogMessage::StringType::kLiteral>(char ch,
373
395
  size_t num);
374
396
  extern template void LogMessage::CopyToEncodedBuffer<
375
397
  LogMessage::StringType::kNotLiteral>(char ch, size_t num);
398
+ extern template void LogMessage::CopyToEncodedBuffer<
399
+ LogMessage::StringType::kLiteral>(std::wstring_view str);
400
+ extern template void LogMessage::CopyToEncodedBuffer<
401
+ LogMessage::StringType::kNotLiteral>(std::wstring_view str);
376
402
 
377
403
  // `LogMessageFatal` ensures the process will exit in failure after logging this
378
404
  // message.
379
405
  class LogMessageFatal final : public LogMessage {
380
406
  public:
381
- LogMessageFatal(absl::Nonnull<const char*> file,
382
- int line) ABSL_ATTRIBUTE_COLD;
383
- LogMessageFatal(absl::Nonnull<const char*> file, int line,
384
- absl::Nonnull<const char*> failure_msg) ABSL_ATTRIBUTE_COLD;
407
+ LogMessageFatal(const char* absl_nonnull file, int line) ABSL_ATTRIBUTE_COLD;
408
+ LogMessageFatal(const char* absl_nonnull file, int line,
409
+ const char* absl_nonnull failure_msg) ABSL_ATTRIBUTE_COLD;
385
410
  [[noreturn]] ~LogMessageFatal();
386
411
  };
387
412
 
@@ -390,7 +415,7 @@ class LogMessageFatal final : public LogMessage {
390
415
  // for DLOG(FATAL) variants.
391
416
  class LogMessageDebugFatal final : public LogMessage {
392
417
  public:
393
- LogMessageDebugFatal(absl::Nonnull<const char*> file,
418
+ LogMessageDebugFatal(const char* absl_nonnull file,
394
419
  int line) ABSL_ATTRIBUTE_COLD;
395
420
  ~LogMessageDebugFatal();
396
421
  };
@@ -400,7 +425,7 @@ class LogMessageQuietlyDebugFatal final : public LogMessage {
400
425
  // DLOG(QFATAL) calls this instead of LogMessageQuietlyFatal to make sure the
401
426
  // destructor is not [[noreturn]] even if this is always FATAL as this is only
402
427
  // invoked when DLOG() is enabled.
403
- LogMessageQuietlyDebugFatal(absl::Nonnull<const char*> file,
428
+ LogMessageQuietlyDebugFatal(const char* absl_nonnull file,
404
429
  int line) ABSL_ATTRIBUTE_COLD;
405
430
  ~LogMessageQuietlyDebugFatal();
406
431
  };
@@ -408,10 +433,10 @@ class LogMessageQuietlyDebugFatal final : public LogMessage {
408
433
  // Used for LOG(QFATAL) to make sure it's properly understood as [[noreturn]].
409
434
  class LogMessageQuietlyFatal final : public LogMessage {
410
435
  public:
411
- LogMessageQuietlyFatal(absl::Nonnull<const char*> file,
436
+ LogMessageQuietlyFatal(const char* absl_nonnull file,
412
437
  int line) ABSL_ATTRIBUTE_COLD;
413
- LogMessageQuietlyFatal(absl::Nonnull<const char*> file, int line,
414
- absl::Nonnull<const char*> failure_msg)
438
+ LogMessageQuietlyFatal(const char* absl_nonnull file, int line,
439
+ const char* absl_nonnull failure_msg)
415
440
  ABSL_ATTRIBUTE_COLD;
416
441
  [[noreturn]] ~LogMessageQuietlyFatal();
417
442
  };
@@ -79,6 +79,7 @@ class NullStream {
79
79
  return *this;
80
80
  }
81
81
  NullStream& InternalStream() { return *this; }
82
+ void Flush() {}
82
83
  };
83
84
  template <typename T>
84
85
  inline NullStream& operator<<(NullStream& str, const T&) {
@@ -123,8 +123,9 @@ bool EncodeBytesTruncate(uint64_t tag, absl::Span<const char> value,
123
123
  return true;
124
124
  }
125
125
 
126
- ABSL_MUST_USE_RESULT absl::Span<char> EncodeMessageStart(
127
- uint64_t tag, uint64_t max_size, absl::Span<char> *buf) {
126
+ [[nodiscard]] absl::Span<char> EncodeMessageStart(uint64_t tag,
127
+ uint64_t max_size,
128
+ absl::Span<char> *buf) {
128
129
  const uint64_t tag_type = MakeTagType(tag, WireType::kLengthDelimited);
129
130
  const size_t tag_type_size = VarintSize(tag_type);
130
131
  max_size = std::min<uint64_t>(max_size, buf->size());
@@ -169,9 +169,9 @@ inline bool EncodeStringTruncate(uint64_t tag, absl::string_view value,
169
169
  // safe to pass to `EncodeMessageLength` but need not be.
170
170
  // Used for string, bytes, message, and packed-repeated field type.
171
171
  // Consumes up to kMaxVarintSize * 2 bytes (20).
172
- ABSL_MUST_USE_RESULT absl::Span<char> EncodeMessageStart(uint64_t tag,
173
- uint64_t max_size,
174
- absl::Span<char> *buf);
172
+ [[nodiscard]] absl::Span<char> EncodeMessageStart(uint64_t tag,
173
+ uint64_t max_size,
174
+ absl::Span<char> *buf);
175
175
 
176
176
  // Finalizes the length field in `msg` so that it encompasses all data encoded
177
177
  // since the call to `EncodeMessageStart` which returned `msg`. Does nothing if