re2 1.22.2 → 1.23.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 (495) hide show
  1. package/README.md +60 -4
  2. package/binding.gyp +5 -1
  3. package/lib/addon.cc +4 -0
  4. package/lib/new.cc +1 -246
  5. package/lib/pattern.cc +252 -0
  6. package/lib/pattern.h +10 -0
  7. package/lib/set.cc +777 -0
  8. package/lib/wrapped_re2_set.h +42 -0
  9. package/package.json +21 -9
  10. package/re2.d.ts +46 -9
  11. package/vendor/abseil-cpp/CMake/AbseilDll.cmake +14 -24
  12. package/vendor/abseil-cpp/CMake/AbseilHelpers.cmake +3 -3
  13. package/vendor/abseil-cpp/CMake/README.md +2 -2
  14. package/vendor/abseil-cpp/CMakeLists.txt +3 -3
  15. package/vendor/abseil-cpp/MODULE.bazel +6 -9
  16. package/vendor/abseil-cpp/README.md +6 -8
  17. package/vendor/abseil-cpp/absl/abseil.podspec.gen.py +6 -4
  18. package/vendor/abseil-cpp/absl/algorithm/BUILD.bazel +3 -0
  19. package/vendor/abseil-cpp/absl/algorithm/CMakeLists.txt +1 -0
  20. package/vendor/abseil-cpp/absl/algorithm/container.h +2 -19
  21. package/vendor/abseil-cpp/absl/algorithm/container_test.cc +4 -11
  22. package/vendor/abseil-cpp/absl/base/BUILD.bazel +60 -45
  23. package/vendor/abseil-cpp/absl/base/CMakeLists.txt +57 -38
  24. package/vendor/abseil-cpp/absl/base/attributes.h +76 -7
  25. package/vendor/abseil-cpp/absl/base/attributes_test.cc +43 -0
  26. package/vendor/abseil-cpp/absl/base/call_once.h +11 -12
  27. package/vendor/abseil-cpp/absl/base/config.h +22 -129
  28. package/vendor/abseil-cpp/absl/base/exception_safety_testing_test.cc +0 -4
  29. package/vendor/abseil-cpp/absl/base/{internal/fast_type_id.h → fast_type_id.h} +11 -16
  30. package/vendor/abseil-cpp/absl/base/{internal/fast_type_id_test.cc → fast_type_id_test.cc} +34 -30
  31. package/vendor/abseil-cpp/absl/base/internal/cycleclock.cc +0 -5
  32. package/vendor/abseil-cpp/absl/base/internal/cycleclock_config.h +7 -7
  33. package/vendor/abseil-cpp/absl/base/internal/endian.h +34 -38
  34. package/vendor/abseil-cpp/absl/base/internal/iterator_traits.h +71 -0
  35. package/vendor/abseil-cpp/absl/base/internal/iterator_traits_test.cc +85 -0
  36. package/vendor/abseil-cpp/absl/base/internal/iterator_traits_test_helper.h +97 -0
  37. package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.cc +39 -9
  38. package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.h +6 -0
  39. package/vendor/abseil-cpp/absl/base/internal/poison.cc +7 -6
  40. package/vendor/abseil-cpp/absl/base/internal/spinlock.cc +15 -28
  41. package/vendor/abseil-cpp/absl/base/internal/spinlock.h +65 -35
  42. package/vendor/abseil-cpp/absl/base/internal/spinlock_benchmark.cc +2 -2
  43. package/vendor/abseil-cpp/absl/base/internal/sysinfo_test.cc +2 -2
  44. package/vendor/abseil-cpp/absl/base/internal/thread_identity_benchmark.cc +1 -1
  45. package/vendor/abseil-cpp/absl/base/internal/thread_identity_test.cc +4 -4
  46. package/vendor/abseil-cpp/absl/base/internal/unaligned_access.h +6 -6
  47. package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +4 -0
  48. package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.h +8 -3
  49. package/vendor/abseil-cpp/absl/base/no_destructor.h +11 -32
  50. package/vendor/abseil-cpp/absl/base/no_destructor_test.cc +0 -4
  51. package/vendor/abseil-cpp/absl/base/nullability.h +83 -72
  52. package/vendor/abseil-cpp/absl/base/nullability_test.cc +25 -64
  53. package/vendor/abseil-cpp/absl/base/options.h +3 -80
  54. package/vendor/abseil-cpp/absl/base/policy_checks.h +7 -7
  55. package/vendor/abseil-cpp/absl/base/raw_logging_test.cc +15 -0
  56. package/vendor/abseil-cpp/absl/base/spinlock_test_common.cc +50 -30
  57. package/vendor/abseil-cpp/absl/cleanup/BUILD.bazel +2 -1
  58. package/vendor/abseil-cpp/absl/cleanup/CMakeLists.txt +0 -1
  59. package/vendor/abseil-cpp/absl/cleanup/cleanup.h +1 -3
  60. package/vendor/abseil-cpp/absl/cleanup/cleanup_test.cc +0 -2
  61. package/vendor/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -4
  62. package/vendor/abseil-cpp/absl/container/BUILD.bazel +74 -1
  63. package/vendor/abseil-cpp/absl/container/CMakeLists.txt +73 -0
  64. package/vendor/abseil-cpp/absl/container/btree_benchmark.cc +51 -9
  65. package/vendor/abseil-cpp/absl/container/btree_map.h +8 -6
  66. package/vendor/abseil-cpp/absl/container/btree_set.h +8 -6
  67. package/vendor/abseil-cpp/absl/container/btree_test.cc +89 -4
  68. package/vendor/abseil-cpp/absl/container/fixed_array.h +7 -15
  69. package/vendor/abseil-cpp/absl/container/fixed_array_test.cc +17 -0
  70. package/vendor/abseil-cpp/absl/container/flat_hash_map.h +20 -15
  71. package/vendor/abseil-cpp/absl/container/flat_hash_map_test.cc +8 -14
  72. package/vendor/abseil-cpp/absl/container/flat_hash_set.h +19 -14
  73. package/vendor/abseil-cpp/absl/container/flat_hash_set_test.cc +46 -0
  74. package/vendor/abseil-cpp/absl/container/inlined_vector.h +7 -6
  75. package/vendor/abseil-cpp/absl/container/inlined_vector_test.cc +28 -0
  76. package/vendor/abseil-cpp/absl/container/internal/btree.h +132 -29
  77. package/vendor/abseil-cpp/absl/container/internal/btree_container.h +175 -71
  78. package/vendor/abseil-cpp/absl/container/internal/common.h +43 -0
  79. package/vendor/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -2
  80. package/vendor/abseil-cpp/absl/container/internal/compressed_tuple.h +28 -24
  81. package/vendor/abseil-cpp/absl/container/internal/compressed_tuple_test.cc +4 -17
  82. package/vendor/abseil-cpp/absl/container/internal/container_memory.h +80 -17
  83. package/vendor/abseil-cpp/absl/container/internal/container_memory_test.cc +32 -2
  84. package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults.h +13 -8
  85. package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults_test.cc +1 -52
  86. package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.cc +9 -31
  87. package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.h +23 -32
  88. package/vendor/abseil-cpp/absl/container/internal/hash_policy_testing.h +5 -1
  89. package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits.h +11 -23
  90. package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits_test.cc +14 -9
  91. package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +516 -0
  92. package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes_test.cc +259 -0
  93. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +23 -6
  94. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.h +32 -13
  95. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc +8 -8
  96. package/vendor/abseil-cpp/absl/container/internal/inlined_vector.h +2 -7
  97. package/vendor/abseil-cpp/absl/container/internal/layout.h +26 -42
  98. package/vendor/abseil-cpp/absl/container/internal/raw_hash_map.h +199 -68
  99. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.cc +1506 -213
  100. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.h +1095 -1658
  101. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_allocator_test.cc +3 -2
  102. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_benchmark.cc +31 -29
  103. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_probe_benchmark.cc +51 -20
  104. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +79 -0
  105. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl_test.cc +66 -0
  106. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_test.cc +707 -363
  107. package/vendor/abseil-cpp/absl/container/node_hash_map.h +20 -15
  108. package/vendor/abseil-cpp/absl/container/node_hash_map_test.cc +0 -3
  109. package/vendor/abseil-cpp/absl/container/node_hash_set.h +18 -13
  110. package/vendor/abseil-cpp/absl/container/sample_element_size_test.cc +3 -8
  111. package/vendor/abseil-cpp/absl/copts/AbseilConfigureCopts.cmake +1 -1
  112. package/vendor/abseil-cpp/absl/copts/GENERATED_AbseilCopts.cmake +9 -20
  113. package/vendor/abseil-cpp/absl/copts/GENERATED_copts.bzl +9 -20
  114. package/vendor/abseil-cpp/absl/copts/copts.py +24 -15
  115. package/vendor/abseil-cpp/absl/crc/BUILD.bazel +3 -0
  116. package/vendor/abseil-cpp/absl/crc/crc32c.cc +0 -4
  117. package/vendor/abseil-cpp/absl/crc/crc32c.h +7 -5
  118. package/vendor/abseil-cpp/absl/crc/crc32c_benchmark.cc +17 -4
  119. package/vendor/abseil-cpp/absl/crc/crc32c_test.cc +30 -0
  120. package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.cc +17 -0
  121. package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.h +7 -1
  122. package/vendor/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +0 -22
  123. package/vendor/abseil-cpp/absl/crc/internal/crc_memcpy_x86_arm_combined.cc +5 -0
  124. package/vendor/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +136 -165
  125. package/vendor/abseil-cpp/absl/crc/internal/gen_crc32c_consts.py +90 -0
  126. package/vendor/abseil-cpp/absl/debugging/BUILD.bazel +7 -0
  127. package/vendor/abseil-cpp/absl/debugging/CMakeLists.txt +4 -0
  128. package/vendor/abseil-cpp/absl/debugging/internal/addresses.h +57 -0
  129. package/vendor/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc +1 -1
  130. package/vendor/abseil-cpp/absl/debugging/internal/decode_rust_punycode.h +5 -5
  131. package/vendor/abseil-cpp/absl/debugging/internal/demangle.cc +8 -35
  132. package/vendor/abseil-cpp/absl/debugging/internal/demangle_rust.cc +16 -16
  133. package/vendor/abseil-cpp/absl/debugging/internal/demangle_test.cc +11 -10
  134. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +40 -37
  135. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +16 -7
  136. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_config.h +6 -5
  137. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +14 -5
  138. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +10 -4
  139. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +27 -16
  140. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +13 -4
  141. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +4 -3
  142. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +15 -28
  143. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +25 -14
  144. package/vendor/abseil-cpp/absl/debugging/internal/vdso_support.cc +4 -0
  145. package/vendor/abseil-cpp/absl/debugging/stacktrace.cc +161 -27
  146. package/vendor/abseil-cpp/absl/debugging/stacktrace.h +73 -5
  147. package/vendor/abseil-cpp/absl/debugging/stacktrace_test.cc +435 -1
  148. package/vendor/abseil-cpp/absl/debugging/symbolize_elf.inc +55 -63
  149. package/vendor/abseil-cpp/absl/debugging/symbolize_emscripten.inc +3 -2
  150. package/vendor/abseil-cpp/absl/debugging/symbolize_win32.inc +25 -6
  151. package/vendor/abseil-cpp/absl/flags/BUILD.bazel +6 -0
  152. package/vendor/abseil-cpp/absl/flags/CMakeLists.txt +3 -0
  153. package/vendor/abseil-cpp/absl/flags/commandlineflag.h +2 -2
  154. package/vendor/abseil-cpp/absl/flags/flag.h +4 -3
  155. package/vendor/abseil-cpp/absl/flags/internal/commandlineflag.h +2 -2
  156. package/vendor/abseil-cpp/absl/flags/internal/flag.cc +14 -13
  157. package/vendor/abseil-cpp/absl/flags/internal/flag.h +34 -34
  158. package/vendor/abseil-cpp/absl/flags/internal/program_name.cc +2 -2
  159. package/vendor/abseil-cpp/absl/flags/internal/registry.h +4 -3
  160. package/vendor/abseil-cpp/absl/flags/internal/usage.cc +2 -2
  161. package/vendor/abseil-cpp/absl/flags/parse.cc +10 -6
  162. package/vendor/abseil-cpp/absl/flags/reflection.cc +9 -7
  163. package/vendor/abseil-cpp/absl/flags/usage.cc +2 -2
  164. package/vendor/abseil-cpp/absl/flags/usage_config.cc +2 -2
  165. package/vendor/abseil-cpp/absl/functional/BUILD.bazel +7 -6
  166. package/vendor/abseil-cpp/absl/functional/CMakeLists.txt +2 -4
  167. package/vendor/abseil-cpp/absl/functional/any_invocable.h +15 -15
  168. package/vendor/abseil-cpp/absl/functional/any_invocable_test.cc +10 -42
  169. package/vendor/abseil-cpp/absl/functional/function_ref.h +2 -9
  170. package/vendor/abseil-cpp/absl/functional/function_ref_test.cc +10 -0
  171. package/vendor/abseil-cpp/absl/functional/function_type_benchmark.cc +1 -1
  172. package/vendor/abseil-cpp/absl/functional/internal/any_invocable.h +112 -227
  173. package/vendor/abseil-cpp/absl/functional/internal/front_binder.h +10 -12
  174. package/vendor/abseil-cpp/absl/functional/internal/function_ref.h +2 -5
  175. package/vendor/abseil-cpp/absl/functional/overload.h +0 -20
  176. package/vendor/abseil-cpp/absl/functional/overload_test.cc +1 -7
  177. package/vendor/abseil-cpp/absl/hash/BUILD.bazel +16 -9
  178. package/vendor/abseil-cpp/absl/hash/CMakeLists.txt +6 -9
  179. package/vendor/abseil-cpp/absl/hash/hash.h +18 -0
  180. package/vendor/abseil-cpp/absl/hash/hash_benchmark.cc +3 -0
  181. package/vendor/abseil-cpp/absl/hash/hash_instantiated_test.cc +1 -1
  182. package/vendor/abseil-cpp/absl/hash/hash_test.cc +131 -30
  183. package/vendor/abseil-cpp/absl/hash/hash_testing.h +20 -20
  184. package/vendor/abseil-cpp/absl/hash/internal/hash.cc +129 -17
  185. package/vendor/abseil-cpp/absl/hash/internal/hash.h +326 -362
  186. package/vendor/abseil-cpp/absl/hash/internal/low_level_hash_test.cc +54 -151
  187. package/vendor/abseil-cpp/absl/hash/internal/spy_hash_state.h +14 -2
  188. package/vendor/abseil-cpp/absl/{strings/cord_buffer.cc → hash/internal/weakly_mixed_integer.h} +14 -6
  189. package/vendor/abseil-cpp/absl/log/BUILD.bazel +4 -0
  190. package/vendor/abseil-cpp/absl/log/CMakeLists.txt +7 -0
  191. package/vendor/abseil-cpp/absl/log/check.h +2 -1
  192. package/vendor/abseil-cpp/absl/log/check_test_impl.inc +308 -14
  193. package/vendor/abseil-cpp/absl/log/die_if_null.h +2 -2
  194. package/vendor/abseil-cpp/absl/log/flags_test.cc +7 -0
  195. package/vendor/abseil-cpp/absl/log/globals.h +4 -5
  196. package/vendor/abseil-cpp/absl/log/internal/BUILD.bazel +13 -9
  197. package/vendor/abseil-cpp/absl/log/internal/append_truncated.h +28 -0
  198. package/vendor/abseil-cpp/absl/log/internal/check_op.cc +24 -22
  199. package/vendor/abseil-cpp/absl/log/internal/check_op.h +149 -94
  200. package/vendor/abseil-cpp/absl/log/internal/conditions.cc +5 -3
  201. package/vendor/abseil-cpp/absl/log/internal/conditions.h +7 -2
  202. package/vendor/abseil-cpp/absl/log/internal/fnmatch_test.cc +1 -0
  203. package/vendor/abseil-cpp/absl/log/internal/log_message.cc +85 -43
  204. package/vendor/abseil-cpp/absl/log/internal/log_message.h +84 -59
  205. package/vendor/abseil-cpp/absl/log/internal/log_sink_set.cc +4 -4
  206. package/vendor/abseil-cpp/absl/log/internal/nullstream.h +1 -0
  207. package/vendor/abseil-cpp/absl/log/internal/proto.cc +3 -2
  208. package/vendor/abseil-cpp/absl/log/internal/proto.h +3 -3
  209. package/vendor/abseil-cpp/absl/log/internal/strip.h +4 -12
  210. package/vendor/abseil-cpp/absl/log/internal/structured.h +3 -7
  211. package/vendor/abseil-cpp/absl/log/internal/vlog_config.cc +9 -9
  212. package/vendor/abseil-cpp/absl/log/internal/vlog_config.h +8 -6
  213. package/vendor/abseil-cpp/absl/log/internal/voidify.h +10 -4
  214. package/vendor/abseil-cpp/absl/log/log.h +48 -35
  215. package/vendor/abseil-cpp/absl/log/log_basic_test_impl.inc +45 -0
  216. package/vendor/abseil-cpp/absl/log/log_entry.cc +241 -19
  217. package/vendor/abseil-cpp/absl/log/log_entry.h +2 -0
  218. package/vendor/abseil-cpp/absl/log/log_format_test.cc +412 -6
  219. package/vendor/abseil-cpp/absl/log/log_modifier_methods_test.cc +20 -0
  220. package/vendor/abseil-cpp/absl/log/log_sink_registry.h +2 -2
  221. package/vendor/abseil-cpp/absl/log/log_streamer_test.cc +15 -2
  222. package/vendor/abseil-cpp/absl/log/scoped_mock_log.h +7 -1
  223. package/vendor/abseil-cpp/absl/log/structured_test.cc +1 -0
  224. package/vendor/abseil-cpp/absl/memory/BUILD.bazel +2 -0
  225. package/vendor/abseil-cpp/absl/meta/BUILD.bazel +2 -0
  226. package/vendor/abseil-cpp/absl/meta/type_traits.h +46 -175
  227. package/vendor/abseil-cpp/absl/meta/type_traits_test.cc +1 -478
  228. package/vendor/abseil-cpp/absl/numeric/BUILD.bazel +7 -3
  229. package/vendor/abseil-cpp/absl/numeric/CMakeLists.txt +2 -0
  230. package/vendor/abseil-cpp/absl/numeric/bits.h +68 -2
  231. package/vendor/abseil-cpp/absl/numeric/bits_benchmark.cc +1 -1
  232. package/vendor/abseil-cpp/absl/numeric/bits_test.cc +83 -0
  233. package/vendor/abseil-cpp/absl/numeric/int128.cc +0 -52
  234. package/vendor/abseil-cpp/absl/numeric/int128_benchmark.cc +14 -15
  235. package/vendor/abseil-cpp/absl/numeric/int128_test.cc +13 -8
  236. package/vendor/abseil-cpp/absl/numeric/internal/bits.h +39 -7
  237. package/vendor/abseil-cpp/absl/profiling/BUILD.bazel +47 -0
  238. package/vendor/abseil-cpp/absl/profiling/CMakeLists.txt +38 -0
  239. package/vendor/abseil-cpp/absl/profiling/hashtable.cc +124 -0
  240. package/vendor/abseil-cpp/absl/profiling/hashtable.h +40 -0
  241. package/vendor/abseil-cpp/absl/profiling/internal/exponential_biased.cc +1 -1
  242. package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.cc +462 -0
  243. package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.h +138 -0
  244. package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder.h +9 -9
  245. package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder_test.cc +7 -3
  246. package/vendor/abseil-cpp/absl/random/BUILD.bazel +6 -4
  247. package/vendor/abseil-cpp/absl/random/CMakeLists.txt +20 -19
  248. package/vendor/abseil-cpp/absl/random/benchmarks.cc +16 -23
  249. package/vendor/abseil-cpp/absl/random/bit_gen_ref.h +10 -11
  250. package/vendor/abseil-cpp/absl/random/bit_gen_ref_test.cc +7 -2
  251. package/vendor/abseil-cpp/absl/random/distributions.h +6 -8
  252. package/vendor/abseil-cpp/absl/random/gaussian_distribution.h +1 -1
  253. package/vendor/abseil-cpp/absl/random/internal/BUILD.bazel +19 -20
  254. package/vendor/abseil-cpp/absl/random/internal/distribution_caller.h +5 -6
  255. package/vendor/abseil-cpp/absl/random/internal/{pool_urbg.cc → entropy_pool.cc} +24 -92
  256. package/vendor/abseil-cpp/absl/{base/inline_variable_test_b.cc → random/internal/entropy_pool.h} +14 -6
  257. package/vendor/abseil-cpp/absl/random/internal/entropy_pool_test.cc +119 -0
  258. package/vendor/abseil-cpp/absl/random/internal/mock_helpers.h +6 -7
  259. package/vendor/abseil-cpp/absl/random/internal/nonsecure_base.h +5 -6
  260. package/vendor/abseil-cpp/absl/random/internal/nonsecure_base_test.cc +39 -0
  261. package/vendor/abseil-cpp/absl/random/internal/randen_benchmarks.cc +8 -6
  262. package/vendor/abseil-cpp/absl/random/internal/randen_detect.cc +1 -1
  263. package/vendor/abseil-cpp/absl/random/internal/seed_material.cc +20 -12
  264. package/vendor/abseil-cpp/absl/random/internal/seed_material.h +5 -5
  265. package/vendor/abseil-cpp/absl/random/internal/seed_material_test.cc +3 -0
  266. package/vendor/abseil-cpp/absl/random/mock_distributions_test.cc +5 -4
  267. package/vendor/abseil-cpp/absl/random/mocking_bit_gen.h +8 -10
  268. package/vendor/abseil-cpp/absl/random/random.h +88 -53
  269. package/vendor/abseil-cpp/absl/random/seed_sequences.cc +6 -2
  270. package/vendor/abseil-cpp/absl/status/BUILD.bazel +26 -0
  271. package/vendor/abseil-cpp/absl/status/internal/status_internal.cc +3 -4
  272. package/vendor/abseil-cpp/absl/status/internal/status_internal.h +3 -4
  273. package/vendor/abseil-cpp/absl/status/internal/status_matchers.cc +4 -3
  274. package/vendor/abseil-cpp/absl/status/internal/statusor_internal.h +194 -32
  275. package/vendor/abseil-cpp/absl/status/status.cc +4 -8
  276. package/vendor/abseil-cpp/absl/status/status.h +8 -8
  277. package/vendor/abseil-cpp/absl/{base/inline_variable_test_a.cc → status/status_benchmark.cc} +20 -10
  278. package/vendor/abseil-cpp/absl/status/status_matchers_test.cc +65 -0
  279. package/vendor/abseil-cpp/absl/status/status_payload_printer.h +2 -2
  280. package/vendor/abseil-cpp/absl/status/statusor.cc +2 -2
  281. package/vendor/abseil-cpp/absl/status/statusor.h +49 -102
  282. package/vendor/abseil-cpp/absl/status/statusor_benchmark.cc +480 -0
  283. package/vendor/abseil-cpp/absl/status/statusor_test.cc +323 -1
  284. package/vendor/abseil-cpp/absl/strings/BUILD.bazel +70 -34
  285. package/vendor/abseil-cpp/absl/strings/CMakeLists.txt +6 -3
  286. package/vendor/abseil-cpp/absl/strings/ascii.cc +9 -9
  287. package/vendor/abseil-cpp/absl/strings/ascii.h +18 -18
  288. package/vendor/abseil-cpp/absl/strings/ascii_benchmark.cc +5 -8
  289. package/vendor/abseil-cpp/absl/strings/charconv.cc +21 -22
  290. package/vendor/abseil-cpp/absl/strings/charconv.h +5 -5
  291. package/vendor/abseil-cpp/absl/strings/charconv_benchmark.cc +1 -2
  292. package/vendor/abseil-cpp/absl/strings/charset_benchmark.cc +1 -1
  293. package/vendor/abseil-cpp/absl/strings/cord.cc +54 -58
  294. package/vendor/abseil-cpp/absl/strings/cord.h +94 -84
  295. package/vendor/abseil-cpp/absl/strings/cord_analysis.cc +11 -11
  296. package/vendor/abseil-cpp/absl/strings/cord_analysis.h +3 -3
  297. package/vendor/abseil-cpp/absl/strings/cord_test.cc +23 -0
  298. package/vendor/abseil-cpp/absl/strings/cordz_test_helpers.h +4 -5
  299. package/vendor/abseil-cpp/absl/strings/escaping.cc +130 -149
  300. package/vendor/abseil-cpp/absl/strings/escaping.h +9 -10
  301. package/vendor/abseil-cpp/absl/strings/escaping_benchmark.cc +2 -3
  302. package/vendor/abseil-cpp/absl/strings/escaping_test.cc +19 -9
  303. package/vendor/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
  304. package/vendor/abseil-cpp/absl/strings/internal/charconv_bigint_test.cc +1 -1
  305. package/vendor/abseil-cpp/absl/strings/internal/cord_internal.h +6 -10
  306. package/vendor/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +0 -4
  307. package/vendor/abseil-cpp/absl/strings/internal/cordz_handle.cc +6 -6
  308. package/vendor/abseil-cpp/absl/strings/internal/cordz_info.cc +5 -9
  309. package/vendor/abseil-cpp/absl/strings/internal/cordz_info.h +2 -4
  310. package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance_benchmark.cc +56 -0
  311. package/vendor/abseil-cpp/absl/strings/internal/memutil_benchmark.cc +2 -3
  312. package/vendor/abseil-cpp/absl/strings/internal/ostringstream_benchmark.cc +1 -2
  313. package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.cc +7 -63
  314. package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -11
  315. package/vendor/abseil-cpp/absl/strings/internal/str_format/convert_test.cc +1 -6
  316. package/vendor/abseil-cpp/absl/strings/internal/str_format/extension.cc +0 -22
  317. package/vendor/abseil-cpp/absl/strings/internal/str_format/extension_test.cc +3 -2
  318. package/vendor/abseil-cpp/absl/strings/internal/str_format/output.cc +5 -3
  319. package/vendor/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
  320. package/vendor/abseil-cpp/absl/strings/internal/str_join_internal.h +3 -3
  321. package/vendor/abseil-cpp/absl/strings/internal/str_split_internal.h +7 -2
  322. package/vendor/abseil-cpp/absl/strings/internal/string_constant.h +0 -5
  323. package/vendor/abseil-cpp/absl/strings/internal/utf8.cc +96 -1
  324. package/vendor/abseil-cpp/absl/strings/internal/utf8.h +15 -1
  325. package/vendor/abseil-cpp/absl/strings/internal/utf8_test.cc +196 -3
  326. package/vendor/abseil-cpp/absl/strings/numbers.cc +53 -32
  327. package/vendor/abseil-cpp/absl/strings/numbers.h +87 -58
  328. package/vendor/abseil-cpp/absl/strings/numbers_benchmark.cc +1 -1
  329. package/vendor/abseil-cpp/absl/strings/numbers_test.cc +634 -120
  330. package/vendor/abseil-cpp/absl/strings/str_cat.cc +6 -7
  331. package/vendor/abseil-cpp/absl/strings/str_cat.h +32 -32
  332. package/vendor/abseil-cpp/absl/strings/str_cat_benchmark.cc +25 -1
  333. package/vendor/abseil-cpp/absl/strings/str_cat_test.cc +2 -7
  334. package/vendor/abseil-cpp/absl/strings/str_format.h +18 -18
  335. package/vendor/abseil-cpp/absl/strings/str_format_test.cc +8 -14
  336. package/vendor/abseil-cpp/absl/strings/str_join_benchmark.cc +2 -3
  337. package/vendor/abseil-cpp/absl/strings/str_replace.cc +3 -3
  338. package/vendor/abseil-cpp/absl/strings/str_replace.h +6 -6
  339. package/vendor/abseil-cpp/absl/strings/str_replace_benchmark.cc +2 -3
  340. package/vendor/abseil-cpp/absl/strings/str_split.h +2 -2
  341. package/vendor/abseil-cpp/absl/strings/str_split_benchmark.cc +2 -3
  342. package/vendor/abseil-cpp/absl/strings/string_view.cc +4 -9
  343. package/vendor/abseil-cpp/absl/strings/string_view.h +38 -39
  344. package/vendor/abseil-cpp/absl/strings/string_view_benchmark.cc +4 -6
  345. package/vendor/abseil-cpp/absl/strings/string_view_test.cc +2 -50
  346. package/vendor/abseil-cpp/absl/strings/strip.h +4 -4
  347. package/vendor/abseil-cpp/absl/strings/substitute.cc +5 -4
  348. package/vendor/abseil-cpp/absl/strings/substitute.h +66 -64
  349. package/vendor/abseil-cpp/absl/strings/substitute_benchmark.cc +158 -0
  350. package/vendor/abseil-cpp/absl/synchronization/BUILD.bazel +6 -1
  351. package/vendor/abseil-cpp/absl/synchronization/CMakeLists.txt +2 -1
  352. package/vendor/abseil-cpp/absl/synchronization/barrier.cc +1 -1
  353. package/vendor/abseil-cpp/absl/synchronization/barrier_test.cc +3 -3
  354. package/vendor/abseil-cpp/absl/synchronization/blocking_counter.cc +2 -2
  355. package/vendor/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +3 -3
  356. package/vendor/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +0 -4
  357. package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles.cc +30 -33
  358. package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles_benchmark.cc +2 -3
  359. package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles_test.cc +6 -5
  360. package/vendor/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +0 -5
  361. package/vendor/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +0 -4
  362. package/vendor/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +0 -4
  363. package/vendor/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +0 -4
  364. package/vendor/abseil-cpp/absl/synchronization/internal/thread_pool.h +3 -3
  365. package/vendor/abseil-cpp/absl/synchronization/internal/waiter_base.cc +0 -4
  366. package/vendor/abseil-cpp/absl/synchronization/internal/waiter_test.cc +12 -3
  367. package/vendor/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +0 -4
  368. package/vendor/abseil-cpp/absl/synchronization/lifetime_test.cc +4 -4
  369. package/vendor/abseil-cpp/absl/synchronization/mutex.cc +27 -29
  370. package/vendor/abseil-cpp/absl/synchronization/mutex.h +205 -126
  371. package/vendor/abseil-cpp/absl/synchronization/mutex_benchmark.cc +13 -31
  372. package/vendor/abseil-cpp/absl/synchronization/mutex_test.cc +183 -169
  373. package/vendor/abseil-cpp/absl/synchronization/notification.cc +5 -5
  374. package/vendor/abseil-cpp/absl/synchronization/notification.h +1 -1
  375. package/vendor/abseil-cpp/absl/synchronization/notification_test.cc +3 -3
  376. package/vendor/abseil-cpp/absl/time/BUILD.bazel +9 -1
  377. package/vendor/abseil-cpp/absl/time/CMakeLists.txt +3 -1
  378. package/vendor/abseil-cpp/absl/time/civil_time.cc +1 -0
  379. package/vendor/abseil-cpp/absl/time/civil_time_test.cc +134 -0
  380. package/vendor/abseil-cpp/absl/time/clock.cc +11 -14
  381. package/vendor/abseil-cpp/absl/time/duration.cc +14 -9
  382. package/vendor/abseil-cpp/absl/time/duration_test.cc +6 -7
  383. package/vendor/abseil-cpp/absl/time/internal/cctz/BUILD.bazel +14 -3
  384. package/vendor/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +12 -0
  385. package/vendor/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +1 -1
  386. package/vendor/abseil-cpp/absl/time/internal/cctz/src/cctz_benchmark.cc +4 -490
  387. package/vendor/abseil-cpp/absl/time/internal/cctz/src/test_time_zone_names.cc +515 -0
  388. package/vendor/abseil-cpp/absl/time/internal/cctz/src/test_time_zone_names.h +33 -0
  389. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +41 -4
  390. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format_test.cc +22 -23
  391. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +90 -111
  392. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup_test.cc +1 -488
  393. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/version +1 -1
  394. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Coyhaique +0 -0
  395. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tehran +0 -0
  396. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Iran +0 -0
  397. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab +2 -1
  398. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab +1 -1
  399. package/vendor/abseil-cpp/absl/time/time.h +24 -18
  400. package/vendor/abseil-cpp/absl/time/time_test.cc +26 -0
  401. package/vendor/abseil-cpp/absl/types/BUILD.bazel +11 -164
  402. package/vendor/abseil-cpp/absl/types/CMakeLists.txt +23 -167
  403. package/vendor/abseil-cpp/absl/types/any.h +9 -484
  404. package/vendor/abseil-cpp/absl/types/optional.h +7 -747
  405. package/vendor/abseil-cpp/absl/types/span.h +46 -19
  406. package/vendor/abseil-cpp/absl/types/span_test.cc +27 -0
  407. package/vendor/abseil-cpp/absl/types/variant.h +5 -784
  408. package/vendor/abseil-cpp/absl/types/variant_test.cc +43 -2597
  409. package/vendor/abseil-cpp/absl/utility/BUILD.bazel +1 -41
  410. package/vendor/abseil-cpp/absl/utility/CMakeLists.txt +0 -40
  411. package/vendor/abseil-cpp/absl/utility/utility.h +10 -185
  412. package/vendor/abseil-cpp/ci/absl_alternate_options.h +2 -3
  413. package/vendor/abseil-cpp/ci/cmake_common.sh +2 -2
  414. package/vendor/abseil-cpp/ci/linux_arm_clang-latest_libcxx_bazel.sh +12 -13
  415. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh +24 -21
  416. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh +12 -12
  417. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh +23 -22
  418. package/vendor/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh +20 -19
  419. package/vendor/abseil-cpp/ci/linux_docker_containers.sh +4 -4
  420. package/vendor/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh +17 -17
  421. package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh +10 -10
  422. package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_cmake.sh +1 -1
  423. package/vendor/abseil-cpp/ci/linux_gcc_alpine_cmake.sh +1 -1
  424. package/vendor/abseil-cpp/ci/macos_xcode_bazel.sh +9 -10
  425. package/vendor/abseil-cpp/ci/macos_xcode_cmake.sh +9 -1
  426. package/vendor/abseil-cpp/ci/windows_clangcl_bazel.bat +14 -6
  427. package/vendor/abseil-cpp/ci/windows_msvc_bazel.bat +14 -6
  428. package/vendor/abseil-cpp/ci/windows_msvc_cmake.bat +1 -1
  429. package/vendor/re2/.bazelrc +4 -4
  430. package/vendor/re2/.bcr/metadata.template.json +16 -0
  431. package/vendor/re2/.bcr/presubmit.yml +57 -0
  432. package/vendor/re2/.bcr/source.template.json +5 -0
  433. package/vendor/re2/.github/bazel.sh +1 -7
  434. package/vendor/re2/.github/workflows/ci-bazel.yml +5 -5
  435. package/vendor/re2/.github/workflows/ci-cmake.yml +4 -4
  436. package/vendor/re2/.github/workflows/ci.yml +5 -6
  437. package/vendor/re2/.github/workflows/pages.yml +3 -3
  438. package/vendor/re2/.github/workflows/python.yml +29 -24
  439. package/vendor/re2/.github/workflows/release-bazel.yml +42 -0
  440. package/vendor/re2/.github/workflows/release.yml +15 -4
  441. package/vendor/re2/BUILD.bazel +25 -0
  442. package/vendor/re2/CMakeLists.txt +100 -85
  443. package/vendor/re2/CONTRIBUTING.md +0 -1
  444. package/vendor/re2/MODULE.bazel +10 -10
  445. package/vendor/re2/Makefile +1 -1
  446. package/vendor/re2/README.md +259 -0
  447. package/vendor/re2/python/BUILD.bazel +8 -0
  448. package/vendor/re2/python/re2.py +1 -1
  449. package/vendor/re2/python/re2_test.py +6 -0
  450. package/vendor/re2/python/setup.py +3 -3
  451. package/vendor/re2/re2/bitmap256.cc +3 -4
  452. package/vendor/re2/re2/bitstate.cc +15 -10
  453. package/vendor/re2/re2/dfa.cc +1 -2
  454. package/vendor/re2/re2/parse.cc +3 -4
  455. package/vendor/re2/re2/prog.cc +1 -2
  456. package/vendor/re2/re2/prog.h +1 -0
  457. package/vendor/re2/re2/re2.cc +5 -0
  458. package/vendor/re2/re2/re2.h +9 -9
  459. package/vendor/re2/re2/set.cc +6 -0
  460. package/vendor/re2/re2/set.h +5 -0
  461. package/vendor/re2/re2/testing/re2_arg_test.cc +3 -3
  462. package/vendor/re2/re2/testing/re2_test.cc +8 -0
  463. package/vendor/re2/re2/testing/set_test.cc +5 -0
  464. package/vendor/re2/re2/walker-inl.h +1 -1
  465. package/vendor/abseil-cpp/WORKSPACE +0 -76
  466. package/vendor/abseil-cpp/WORKSPACE.bzlmod +0 -19
  467. package/vendor/abseil-cpp/absl/base/inline_variable_test.cc +0 -64
  468. package/vendor/abseil-cpp/absl/base/internal/inline_variable.h +0 -108
  469. package/vendor/abseil-cpp/absl/base/internal/inline_variable_testing.h +0 -46
  470. package/vendor/abseil-cpp/absl/base/internal/invoke.h +0 -241
  471. package/vendor/abseil-cpp/absl/base/internal/nullability_impl.h +0 -69
  472. package/vendor/abseil-cpp/absl/base/invoke_test.cc +0 -331
  473. package/vendor/abseil-cpp/absl/hash/internal/low_level_hash.cc +0 -148
  474. package/vendor/abseil-cpp/absl/hash/internal/low_level_hash.h +0 -54
  475. package/vendor/abseil-cpp/absl/random/internal/pool_urbg.h +0 -131
  476. package/vendor/abseil-cpp/absl/random/internal/pool_urbg_test.cc +0 -182
  477. package/vendor/abseil-cpp/absl/types/any_exception_safety_test.cc +0 -173
  478. package/vendor/abseil-cpp/absl/types/any_test.cc +0 -778
  479. package/vendor/abseil-cpp/absl/types/bad_any_cast.cc +0 -64
  480. package/vendor/abseil-cpp/absl/types/bad_any_cast.h +0 -75
  481. package/vendor/abseil-cpp/absl/types/bad_optional_access.cc +0 -66
  482. package/vendor/abseil-cpp/absl/types/bad_optional_access.h +0 -78
  483. package/vendor/abseil-cpp/absl/types/bad_variant_access.cc +0 -82
  484. package/vendor/abseil-cpp/absl/types/bad_variant_access.h +0 -82
  485. package/vendor/abseil-cpp/absl/types/internal/optional.h +0 -352
  486. package/vendor/abseil-cpp/absl/types/internal/variant.h +0 -1622
  487. package/vendor/abseil-cpp/absl/types/optional_exception_safety_test.cc +0 -292
  488. package/vendor/abseil-cpp/absl/types/optional_test.cc +0 -1615
  489. package/vendor/abseil-cpp/absl/types/variant_benchmark.cc +0 -222
  490. package/vendor/abseil-cpp/absl/types/variant_exception_safety_test.cc +0 -532
  491. package/vendor/abseil-cpp/absl/utility/internal/if_constexpr.h +0 -70
  492. package/vendor/abseil-cpp/absl/utility/internal/if_constexpr_test.cc +0 -79
  493. package/vendor/abseil-cpp/absl/utility/utility_test.cc +0 -239
  494. package/vendor/re2/.github/workflows/pr.yml +0 -34
  495. package/vendor/re2/README +0 -47
@@ -125,12 +125,20 @@ namespace {
125
125
  // Some platforms use a special .opd section to store function pointers.
126
126
  const char kOpdSectionName[] = ".opd";
127
127
 
128
- #if (defined(__powerpc__) && !(_CALL_ELF > 1)) || defined(__ia64)
128
+ #if defined(__powerpc64__) && defined(_CALL_ELF)
129
+ #if _CALL_ELF <= 1
130
+ #define ABSL_INTERNAL_HAVE_PPC64_ELFV1_ABI 1
131
+ #endif
132
+ #endif
133
+ #if defined(ABSL_INTERNAL_HAVE_PPC64_ELFV1_ABI) || defined(__ia64)
129
134
  // Use opd section for function descriptors on these platforms, the function
130
135
  // address is the first word of the descriptor.
131
- enum { kPlatformUsesOPDSections = 1 };
132
- #else // not PPC or IA64
133
- enum { kPlatformUsesOPDSections = 0 };
136
+ //
137
+ // https://maskray.me/blog/2023-02-26-linker-notes-on-power-isa notes that
138
+ // opd sections are used on 64-bit PowerPC with the ELFv1 ABI.
139
+ inline constexpr bool kPlatformUsesOPDSections = true;
140
+ #else
141
+ inline constexpr bool kPlatformUsesOPDSections = false;
134
142
  #endif
135
143
 
136
144
  // This works for PowerPC & IA64 only. A function descriptor consist of two
@@ -159,22 +167,22 @@ struct FileMappingHint {
159
167
  // We are using SpinLock and not a Mutex here, because we may be called
160
168
  // from inside Mutex::Lock itself, and it prohibits recursive calls.
161
169
  // This happens in e.g. base/stacktrace_syscall_unittest.
162
- // Moreover, we are using only TryLock(), if the decorator list
170
+ // Moreover, we are using only try_lock(), if the decorator list
163
171
  // is being modified (is busy), we skip all decorators, and possibly
164
172
  // loose some info. Sorry, that's the best we could do.
165
173
  ABSL_CONST_INIT absl::base_internal::SpinLock g_decorators_mu(
166
- absl::kConstInit, absl::base_internal::SCHEDULE_KERNEL_ONLY);
174
+ absl::base_internal::SCHEDULE_KERNEL_ONLY);
167
175
 
168
176
  const int kMaxFileMappingHints = 8;
169
177
  int g_num_file_mapping_hints;
170
178
  FileMappingHint g_file_mapping_hints[kMaxFileMappingHints];
171
179
  // Protects g_file_mapping_hints.
172
180
  ABSL_CONST_INIT absl::base_internal::SpinLock g_file_mapping_mu(
173
- absl::kConstInit, absl::base_internal::SCHEDULE_KERNEL_ONLY);
181
+ absl::base_internal::SCHEDULE_KERNEL_ONLY);
174
182
 
175
183
  // Async-signal-safe function to zero a buffer.
176
184
  // memset() is not guaranteed to be async-signal-safe.
177
- static void SafeMemZero(void* p, size_t size) {
185
+ static void SafeMemZero(void *p, size_t size) {
178
186
  unsigned char *c = static_cast<unsigned char *>(p);
179
187
  while (size--) {
180
188
  *c++ = 0;
@@ -224,29 +232,6 @@ struct SymbolCacheLine {
224
232
  uint32_t age[ASSOCIATIVITY];
225
233
  };
226
234
 
227
- // ---------------------------------------------------------------
228
- // An async-signal-safe arena for LowLevelAlloc
229
- static std::atomic<base_internal::LowLevelAlloc::Arena *> g_sig_safe_arena;
230
-
231
- static base_internal::LowLevelAlloc::Arena *SigSafeArena() {
232
- return g_sig_safe_arena.load(std::memory_order_acquire);
233
- }
234
-
235
- static void InitSigSafeArena() {
236
- if (SigSafeArena() == nullptr) {
237
- base_internal::LowLevelAlloc::Arena *new_arena =
238
- base_internal::LowLevelAlloc::NewArena(
239
- base_internal::LowLevelAlloc::kAsyncSignalSafe);
240
- base_internal::LowLevelAlloc::Arena *old_value = nullptr;
241
- if (!g_sig_safe_arena.compare_exchange_strong(old_value, new_arena,
242
- std::memory_order_release,
243
- std::memory_order_relaxed)) {
244
- // We lost a race to allocate an arena; deallocate.
245
- base_internal::LowLevelAlloc::DeleteArena(new_arena);
246
- }
247
- }
248
- }
249
-
250
235
  // ---------------------------------------------------------------
251
236
  // An AddrMap is a vector of ObjFile, using SigSafeArena() for allocation.
252
237
 
@@ -279,7 +264,7 @@ ObjFile *AddrMap::Add() {
279
264
  size_t new_allocated = allocated_ * 2 + 50;
280
265
  ObjFile *new_obj_ =
281
266
  static_cast<ObjFile *>(base_internal::LowLevelAlloc::AllocWithArena(
282
- new_allocated * sizeof(*new_obj_), SigSafeArena()));
267
+ new_allocated * sizeof(*new_obj_), base_internal::SigSafeArena()));
283
268
  if (obj_) {
284
269
  memcpy(new_obj_, obj_, allocated_ * sizeof(*new_obj_));
285
270
  base_internal::LowLevelAlloc::Free(obj_);
@@ -327,8 +312,9 @@ class Symbolizer {
327
312
  private:
328
313
  char *CopyString(const char *s) {
329
314
  size_t len = strlen(s);
330
- char *dst = static_cast<char *>(
331
- base_internal::LowLevelAlloc::AllocWithArena(len + 1, SigSafeArena()));
315
+ char *dst =
316
+ static_cast<char *>(base_internal::LowLevelAlloc::AllocWithArena(
317
+ len + 1, base_internal::SigSafeArena()));
332
318
  ABSL_RAW_CHECK(dst != nullptr, "out of memory");
333
319
  memcpy(dst, s, len + 1);
334
320
  return dst;
@@ -433,14 +419,14 @@ static size_t SymbolizerSize() {
433
419
  // Return (and set null) g_cached_symbolized_state if it is not null.
434
420
  // Otherwise return a new symbolizer.
435
421
  static Symbolizer *AllocateSymbolizer() {
436
- InitSigSafeArena();
422
+ base_internal::InitSigSafeArena();
437
423
  Symbolizer *symbolizer =
438
424
  g_cached_symbolizer.exchange(nullptr, std::memory_order_acquire);
439
425
  if (symbolizer != nullptr) {
440
426
  return symbolizer;
441
427
  }
442
428
  return new (base_internal::LowLevelAlloc::AllocWithArena(
443
- SymbolizerSize(), SigSafeArena())) Symbolizer();
429
+ SymbolizerSize(), base_internal::SigSafeArena())) Symbolizer();
444
430
  }
445
431
 
446
432
  // Set g_cached_symbolize_state to s if it is null, otherwise
@@ -1451,24 +1437,25 @@ static bool MaybeInitializeObjFile(ObjFile *obj) {
1451
1437
  }
1452
1438
  phoff += phentsize;
1453
1439
 
1454
- #if defined(__powerpc__) && !(_CALL_ELF > 1)
1455
- // On the PowerPC ELF v1 ABI, function pointers actually point to function
1456
- // descriptors. These descriptors are stored in an .opd section, which is
1457
- // mapped read-only. We thus need to look at all readable segments, not
1458
- // just the executable ones.
1440
+ #ifdef ABSL_INTERNAL_HAVE_PPC64_ELFV1_ABI
1441
+ // On the PowerPC 64-bit ELFv1 ABI, function pointers actually point to
1442
+ // function descriptors. These descriptors are stored in an .opd section,
1443
+ // which is mapped read-only. We thus need to look at all readable
1444
+ // segments, not just the executable ones.
1459
1445
  constexpr int interesting = PF_R;
1460
1446
  #else
1461
1447
  constexpr int interesting = PF_X | PF_R;
1462
1448
  #endif
1463
1449
 
1464
- if (phdr.p_type != PT_LOAD
1465
- || (phdr.p_flags & interesting) != interesting) {
1450
+ if (phdr.p_type != PT_LOAD ||
1451
+ (phdr.p_flags & interesting) != interesting) {
1466
1452
  // Not a LOAD segment, not executable code, and not a function
1467
1453
  // descriptor.
1468
1454
  continue;
1469
1455
  }
1470
1456
  if (num_interesting_load_segments < obj->phdr.size()) {
1471
- memcpy(&obj->phdr[num_interesting_load_segments++], &phdr, sizeof(phdr));
1457
+ memcpy(&obj->phdr[num_interesting_load_segments++], &phdr,
1458
+ sizeof(phdr));
1472
1459
  } else {
1473
1460
  ABSL_RAW_LOG(
1474
1461
  WARNING, "%s: too many interesting LOAD segments: %zu >= %zu",
@@ -1517,7 +1504,8 @@ const char *Symbolizer::GetUncachedSymbol(const void *pc) {
1517
1504
  ABSL_RAW_CHECK(p.p_type == PT_NULL, "unexpected p_type");
1518
1505
  break;
1519
1506
  }
1520
- if (pc < reinterpret_cast<void *>(start_addr + p.p_vaddr + p.p_memsz)) {
1507
+ if (pc <
1508
+ reinterpret_cast<void *>(start_addr + p.p_vaddr + p.p_memsz)) {
1521
1509
  phdr = &p;
1522
1510
  break;
1523
1511
  }
@@ -1561,7 +1549,7 @@ const char *Symbolizer::GetUncachedSymbol(const void *pc) {
1561
1549
  #endif
1562
1550
  }
1563
1551
 
1564
- if (g_decorators_mu.TryLock()) {
1552
+ if (g_decorators_mu.try_lock()) {
1565
1553
  if (g_num_decorators > 0) {
1566
1554
  SymbolDecoratorArgs decorator_args = {
1567
1555
  pc, relocation, fd, symbol_buf_, sizeof(symbol_buf_),
@@ -1571,7 +1559,7 @@ const char *Symbolizer::GetUncachedSymbol(const void *pc) {
1571
1559
  g_decorators[i].fn(&decorator_args);
1572
1560
  }
1573
1561
  }
1574
- g_decorators_mu.Unlock();
1562
+ g_decorators_mu.unlock();
1575
1563
  }
1576
1564
  if (symbol_buf_[0] == '\0') {
1577
1565
  return nullptr;
@@ -1617,17 +1605,17 @@ const char *Symbolizer::GetSymbol(const void *pc) {
1617
1605
  }
1618
1606
 
1619
1607
  bool RemoveAllSymbolDecorators(void) {
1620
- if (!g_decorators_mu.TryLock()) {
1608
+ if (!g_decorators_mu.try_lock()) {
1621
1609
  // Someone else is using decorators. Get out.
1622
1610
  return false;
1623
1611
  }
1624
1612
  g_num_decorators = 0;
1625
- g_decorators_mu.Unlock();
1613
+ g_decorators_mu.unlock();
1626
1614
  return true;
1627
1615
  }
1628
1616
 
1629
1617
  bool RemoveSymbolDecorator(int ticket) {
1630
- if (!g_decorators_mu.TryLock()) {
1618
+ if (!g_decorators_mu.try_lock()) {
1631
1619
  // Someone else is using decorators. Get out.
1632
1620
  return false;
1633
1621
  }
@@ -1641,14 +1629,14 @@ bool RemoveSymbolDecorator(int ticket) {
1641
1629
  break;
1642
1630
  }
1643
1631
  }
1644
- g_decorators_mu.Unlock();
1632
+ g_decorators_mu.unlock();
1645
1633
  return true; // Decorator is known to be removed.
1646
1634
  }
1647
1635
 
1648
1636
  int InstallSymbolDecorator(SymbolDecorator decorator, void *arg) {
1649
1637
  static int ticket = 0;
1650
1638
 
1651
- if (!g_decorators_mu.TryLock()) {
1639
+ if (!g_decorators_mu.try_lock()) {
1652
1640
  // Someone else is using decorators. Get out.
1653
1641
  return -2;
1654
1642
  }
@@ -1659,18 +1647,18 @@ int InstallSymbolDecorator(SymbolDecorator decorator, void *arg) {
1659
1647
  g_decorators[g_num_decorators] = {decorator, arg, ticket++};
1660
1648
  ++g_num_decorators;
1661
1649
  }
1662
- g_decorators_mu.Unlock();
1650
+ g_decorators_mu.unlock();
1663
1651
  return ret;
1664
1652
  }
1665
1653
 
1666
- bool RegisterFileMappingHint(const void *start, const void *end, uint64_t offset,
1667
- const char *filename) {
1654
+ bool RegisterFileMappingHint(const void *start, const void *end,
1655
+ uint64_t offset, const char *filename) {
1668
1656
  SAFE_ASSERT(start <= end);
1669
1657
  SAFE_ASSERT(filename != nullptr);
1670
1658
 
1671
- InitSigSafeArena();
1659
+ base_internal::InitSigSafeArena();
1672
1660
 
1673
- if (!g_file_mapping_mu.TryLock()) {
1661
+ if (!g_file_mapping_mu.try_lock()) {
1674
1662
  return false;
1675
1663
  }
1676
1664
 
@@ -1680,8 +1668,9 @@ bool RegisterFileMappingHint(const void *start, const void *end, uint64_t offset
1680
1668
  } else {
1681
1669
  // TODO(ckennelly): Move this into a string copy routine.
1682
1670
  size_t len = strlen(filename);
1683
- char *dst = static_cast<char *>(
1684
- base_internal::LowLevelAlloc::AllocWithArena(len + 1, SigSafeArena()));
1671
+ char *dst =
1672
+ static_cast<char *>(base_internal::LowLevelAlloc::AllocWithArena(
1673
+ len + 1, base_internal::SigSafeArena()));
1685
1674
  ABSL_RAW_CHECK(dst != nullptr, "out of memory");
1686
1675
  memcpy(dst, filename, len + 1);
1687
1676
 
@@ -1692,13 +1681,13 @@ bool RegisterFileMappingHint(const void *start, const void *end, uint64_t offset
1692
1681
  hint.filename = dst;
1693
1682
  }
1694
1683
 
1695
- g_file_mapping_mu.Unlock();
1684
+ g_file_mapping_mu.unlock();
1696
1685
  return ret;
1697
1686
  }
1698
1687
 
1699
1688
  bool GetFileMappingHint(const void **start, const void **end, uint64_t *offset,
1700
1689
  const char **filename) {
1701
- if (!g_file_mapping_mu.TryLock()) {
1690
+ if (!g_file_mapping_mu.try_lock()) {
1702
1691
  return false;
1703
1692
  }
1704
1693
  bool found = false;
@@ -1721,7 +1710,7 @@ bool GetFileMappingHint(const void **start, const void **end, uint64_t *offset,
1721
1710
  break;
1722
1711
  }
1723
1712
  }
1724
- g_file_mapping_mu.Unlock();
1713
+ g_file_mapping_mu.unlock();
1725
1714
  return found;
1726
1715
  }
1727
1716
 
@@ -1757,8 +1746,11 @@ ABSL_NAMESPACE_END
1757
1746
  } // namespace absl
1758
1747
 
1759
1748
  extern "C" bool AbslInternalGetFileMappingHint(const void **start,
1760
- const void **end, uint64_t *offset,
1749
+ const void **end,
1750
+ uint64_t *offset,
1761
1751
  const char **filename) {
1762
1752
  return absl::debugging_internal::GetFileMappingHint(start, end, offset,
1763
1753
  filename);
1764
1754
  }
1755
+
1756
+ #undef ABSL_INTERNAL_HAVE_PPC64_ELFV1_ABI
@@ -58,12 +58,13 @@ bool Symbolize(const void* pc, char* out, int out_size) {
58
58
  return false;
59
59
  }
60
60
 
61
- strncpy(out, func_name, out_size);
61
+ strncpy(out, func_name, static_cast<size_t>(out_size));
62
62
 
63
63
  if (out[out_size - 1] != '\0') {
64
64
  // strncpy() does not '\0' terminate when it truncates.
65
65
  static constexpr char kEllipsis[] = "...";
66
- int ellipsis_size = std::min<int>(sizeof(kEllipsis) - 1, out_size - 1);
66
+ size_t ellipsis_size =
67
+ std::min(sizeof(kEllipsis) - 1, static_cast<size_t>(out_size) - 1);
67
68
  memcpy(out + out_size - ellipsis_size - 1, kEllipsis, ellipsis_size);
68
69
  out[out_size - 1] = '\0';
69
70
  }
@@ -15,7 +15,9 @@
15
15
  // See "Retrieving Symbol Information by Address":
16
16
  // https://msdn.microsoft.com/en-us/library/windows/desktop/ms680578(v=vs.85).aspx
17
17
 
18
+ #include <ntstatus.h>
18
19
  #include <windows.h>
20
+ #include <winternl.h>
19
21
 
20
22
  // MSVC header dbghelp.h has a warning for an ignored typedef.
21
23
  #pragma warning(push)
@@ -45,13 +47,30 @@ void InitializeSymbolizer(const char*) {
45
47
  // symbols be loaded. This is the fastest, most efficient way to use
46
48
  // the symbol handler.
47
49
  SymSetOptions(SYMOPT_DEFERRED_LOADS | SYMOPT_UNDNAME);
48
- if (!SymInitialize(process, nullptr, true)) {
49
- // GetLastError() returns a Win32 DWORD, but we assign to
50
- // unsigned long long to simplify the ABSL_RAW_LOG case below. The uniform
51
- // initialization guarantees this is not a narrowing conversion.
52
- const unsigned long long error{GetLastError()}; // NOLINT(runtime/int)
53
- ABSL_RAW_LOG(FATAL, "SymInitialize() failed: %llu", error);
50
+ DWORD syminitialize_error;
51
+ constexpr int kSymInitializeRetries = 5;
52
+ for (int i = 0; i < kSymInitializeRetries; ++i) {
53
+ if (SymInitialize(process, nullptr, true)) {
54
+ return;
55
+ }
56
+
57
+ // SymInitialize can fail sometimes with a STATUS_INFO_LENGTH_MISMATCH
58
+ // NTSTATUS (0xC0000004), which can happen when a module load occurs during
59
+ // the SymInitialize call. In this case, we should try calling SymInitialize
60
+ // again.
61
+ syminitialize_error = GetLastError();
62
+ // Both NTSTATUS and DWORD are 32-bit numbers, which makes the cast safe.
63
+ if (syminitialize_error !=
64
+ static_cast<DWORD>(STATUS_INFO_LENGTH_MISMATCH)) {
65
+ break;
66
+ }
54
67
  }
68
+
69
+ // GetLastError() returns a Win32 DWORD, but we assign to
70
+ // unsigned long long to simplify the ABSL_RAW_LOG case below. The uniform
71
+ // initialization guarantees this is not a narrowing conversion.
72
+ const unsigned long long error{syminitialize_error};
73
+ ABSL_RAW_LOG(FATAL, "SymInitialize() failed: %llu", error);
55
74
  }
56
75
 
57
76
  bool Symbolize(const void* pc, char* out, int out_size) {
@@ -14,6 +14,9 @@
14
14
  # limitations under the License.
15
15
  #
16
16
 
17
+ load("@rules_cc//cc:cc_binary.bzl", "cc_binary")
18
+ load("@rules_cc//cc:cc_library.bzl", "cc_library")
19
+ load("@rules_cc//cc:cc_test.bzl", "cc_test")
17
20
  load(
18
21
  "//absl:copts/configure_copts.bzl",
19
22
  "ABSL_DEFAULT_COPTS",
@@ -192,6 +195,7 @@ cc_library(
192
195
  ":private_handle_accessor",
193
196
  "//absl/base:config",
194
197
  "//absl/base:core_headers",
198
+ "//absl/base:fast_type_id",
195
199
  "//absl/base:no_destructor",
196
200
  "//absl/container:flat_hash_map",
197
201
  "//absl/strings",
@@ -221,6 +225,7 @@ cc_library(
221
225
  "//absl/base:config",
222
226
  "//absl/base:core_headers",
223
227
  "//absl/base:dynamic_annotations",
228
+ "//absl/base:fast_type_id",
224
229
  "//absl/base:no_destructor",
225
230
  "//absl/memory",
226
231
  "//absl/meta:type_traits",
@@ -245,6 +250,7 @@ cc_library(
245
250
  ":reflection",
246
251
  "//absl/base:config",
247
252
  "//absl/base:core_headers",
253
+ "//absl/base:nullability",
248
254
  "//absl/strings",
249
255
  ],
250
256
  )
@@ -165,6 +165,7 @@ absl_cc_library(
165
165
  ${ABSL_DEFAULT_LINKOPTS}
166
166
  DEPS
167
167
  absl::config
168
+ absl::fast_type_id
168
169
  absl::flags_commandlineflag
169
170
  absl::flags_private_handle_accessor
170
171
  absl::flags_config
@@ -190,6 +191,7 @@ absl_cc_library(
190
191
  DEPS
191
192
  absl::base
192
193
  absl::config
194
+ absl::fast_type_id
193
195
  absl::flags_commandlineflag
194
196
  absl::flags_commandlineflag_internal
195
197
  absl::flags_config
@@ -218,6 +220,7 @@ absl_cc_library(
218
220
  absl::flags_internal
219
221
  absl::flags_reflection
220
222
  absl::core_headers
223
+ absl::nullability
221
224
  absl::strings
222
225
  )
223
226
 
@@ -30,7 +30,7 @@
30
30
  #include <string>
31
31
 
32
32
  #include "absl/base/config.h"
33
- #include "absl/base/internal/fast_type_id.h"
33
+ #include "absl/base/fast_type_id.h"
34
34
  #include "absl/flags/internal/commandlineflag.h"
35
35
  #include "absl/strings/string_view.h"
36
36
  #include "absl/types/optional.h"
@@ -80,7 +80,7 @@ class CommandLineFlag {
80
80
  // Return true iff flag has type T.
81
81
  template <typename T>
82
82
  inline bool IsOfType() const {
83
- return TypeId() == base_internal::FastTypeId<T>();
83
+ return TypeId() == FastTypeId<T>();
84
84
  }
85
85
 
86
86
  // absl::CommandLineFlag::TryGet()
@@ -35,6 +35,7 @@
35
35
 
36
36
  #include "absl/base/attributes.h"
37
37
  #include "absl/base/config.h"
38
+ #include "absl/base/nullability.h"
38
39
  #include "absl/base/optimization.h"
39
40
  #include "absl/flags/commandlineflag.h"
40
41
  #include "absl/flags/config.h"
@@ -94,7 +95,7 @@ using Flag = flags_internal::Flag<T>;
94
95
  // // FLAGS_firstname is a Flag of type `std::string`
95
96
  // std::string first_name = absl::GetFlag(FLAGS_firstname);
96
97
  template <typename T>
97
- ABSL_MUST_USE_RESULT T GetFlag(const absl::Flag<T>& flag) {
98
+ [[nodiscard]] T GetFlag(const absl::Flag<T>& flag) {
98
99
  return flags_internal::FlagImplPeer::InvokeGet<T>(flag);
99
100
  }
100
101
 
@@ -106,7 +107,7 @@ ABSL_MUST_USE_RESULT T GetFlag(const absl::Flag<T>& flag) {
106
107
  // thread-safe, but is potentially expensive. Avoid setting flags in general,
107
108
  // but especially within performance-critical code.
108
109
  template <typename T>
109
- void SetFlag(absl::Flag<T>* flag, const T& v) {
110
+ void SetFlag(absl::Flag<T>* absl_nonnull flag, const T& v) {
110
111
  flags_internal::FlagImplPeer::InvokeSet(*flag, v);
111
112
  }
112
113
 
@@ -114,7 +115,7 @@ void SetFlag(absl::Flag<T>* flag, const T& v) {
114
115
  // convertible to `T`. E.g., use this overload to pass a "const char*" when `T`
115
116
  // is `std::string`.
116
117
  template <typename T, typename V>
117
- void SetFlag(absl::Flag<T>* flag, const V& v) {
118
+ void SetFlag(absl::Flag<T>* absl_nonnull flag, const V& v) {
118
119
  T value(v);
119
120
  flags_internal::FlagImplPeer::InvokeSet(*flag, value);
120
121
  }
@@ -17,7 +17,7 @@
17
17
  #define ABSL_FLAGS_INTERNAL_COMMANDLINEFLAG_H_
18
18
 
19
19
  #include "absl/base/config.h"
20
- #include "absl/base/internal/fast_type_id.h"
20
+ #include "absl/base/fast_type_id.h"
21
21
 
22
22
  namespace absl {
23
23
  ABSL_NAMESPACE_BEGIN
@@ -28,7 +28,7 @@ namespace flags_internal {
28
28
  // cases this id is enough to uniquely identify the flag's value type. In a few
29
29
  // cases we'll have to resort to using actual RTTI implementation if it is
30
30
  // available.
31
- using FlagFastTypeId = absl::base_internal::FastTypeIdType;
31
+ using FlagFastTypeId = absl::FastTypeIdType;
32
32
 
33
33
  // Options that control SetCommandLineOptionWithMode.
34
34
  enum FlagSettingMode {
@@ -34,6 +34,7 @@
34
34
  #include "absl/base/config.h"
35
35
  #include "absl/base/const_init.h"
36
36
  #include "absl/base/dynamic_annotations.h"
37
+ #include "absl/base/fast_type_id.h"
37
38
  #include "absl/base/no_destructor.h"
38
39
  #include "absl/base/optimization.h"
39
40
  #include "absl/base/thread_annotations.h"
@@ -59,7 +60,7 @@ namespace {
59
60
  // Currently we only validate flag values for user-defined flag types.
60
61
  bool ShouldValidateFlagValue(FlagFastTypeId flag_type_id) {
61
62
  #define DONT_VALIDATE(T, _) \
62
- if (flag_type_id == base_internal::FastTypeId<T>()) return false;
63
+ if (flag_type_id == absl::FastTypeId<T>()) return false;
63
64
  ABSL_FLAGS_INTERNAL_SUPPORTED_TYPES(DONT_VALIDATE)
64
65
  #undef DONT_VALIDATE
65
66
 
@@ -72,8 +73,8 @@ bool ShouldValidateFlagValue(FlagFastTypeId flag_type_id) {
72
73
  // need to acquire these locks themselves.
73
74
  class MutexRelock {
74
75
  public:
75
- explicit MutexRelock(absl::Mutex& mu) : mu_(mu) { mu_.Unlock(); }
76
- ~MutexRelock() { mu_.Lock(); }
76
+ explicit MutexRelock(absl::Mutex& mu) : mu_(mu) { mu_.unlock(); }
77
+ ~MutexRelock() { mu_.lock(); }
77
78
 
78
79
  MutexRelock(const MutexRelock&) = delete;
79
80
  MutexRelock& operator=(const MutexRelock&) = delete;
@@ -87,9 +88,9 @@ class MutexRelock {
87
88
  // we move the memory to the freelist where it lives indefinitely, so it can
88
89
  // still be safely accessed. This also prevents leak checkers from complaining
89
90
  // about the leaked memory that can no longer be accessed through any pointer.
90
- absl::Mutex* FreelistMutex() {
91
+ absl::Mutex& FreelistMutex() {
91
92
  static absl::NoDestructor<absl::Mutex> mutex;
92
- return mutex.get();
93
+ return *mutex;
93
94
  }
94
95
  ABSL_CONST_INIT std::vector<void*>* s_freelist ABSL_GUARDED_BY(FreelistMutex())
95
96
  ABSL_PT_GUARDED_BY(FreelistMutex()) = nullptr;
@@ -247,12 +248,12 @@ void FlagImpl::Init() {
247
248
  seq_lock_.MarkInitialized();
248
249
  }
249
250
 
250
- absl::Mutex* FlagImpl::DataGuard() const {
251
+ absl::Mutex& FlagImpl::DataGuard() const {
251
252
  absl::call_once(const_cast<FlagImpl*>(this)->init_control_, &FlagImpl::Init,
252
253
  const_cast<FlagImpl*>(this));
253
254
 
254
255
  // data_guard_ is initialized inside Init.
255
- return reinterpret_cast<absl::Mutex*>(&data_guard_);
256
+ return *reinterpret_cast<absl::Mutex*>(&data_guard_);
256
257
  }
257
258
 
258
259
  void FlagImpl::AssertValidType(FlagFastTypeId rhs_type_id,
@@ -374,7 +375,7 @@ std::string FlagImpl::DefaultValue() const {
374
375
  }
375
376
 
376
377
  std::string FlagImpl::CurrentValue() const {
377
- auto* guard = DataGuard(); // Make sure flag initialized
378
+ auto& guard = DataGuard(); // Make sure flag initialized
378
379
  switch (ValueStorageKind()) {
379
380
  case FlagValueStorageKind::kValueAndInitBit:
380
381
  case FlagValueStorageKind::kOneWordAtomic: {
@@ -428,8 +429,8 @@ void FlagImpl::InvokeCallback() const {
428
429
  // and it also can be different by the time the callback invocation is
429
430
  // completed. Requires that *primary_lock be held in exclusive mode; it may be
430
431
  // released and reacquired by the implementation.
431
- MutexRelock relock(*DataGuard());
432
- absl::MutexLock lock(&callback_->guard);
432
+ MutexRelock relock(DataGuard());
433
+ absl::MutexLock lock(callback_->guard);
433
434
  cb();
434
435
  }
435
436
 
@@ -534,7 +535,7 @@ std::unique_ptr<void, DynValueDeleter> FlagImpl::TryParse(
534
535
  }
535
536
 
536
537
  void FlagImpl::Read(void* dst) const {
537
- auto* guard = DataGuard(); // Make sure flag initialized
538
+ auto& guard = DataGuard(); // Make sure flag initialized
538
539
  switch (ValueStorageKind()) {
539
540
  case FlagValueStorageKind::kValueAndInitBit:
540
541
  case FlagValueStorageKind::kOneWordAtomic: {
@@ -566,14 +567,14 @@ void FlagImpl::Read(void* dst) const {
566
567
  int64_t FlagImpl::ReadOneWord() const {
567
568
  assert(ValueStorageKind() == FlagValueStorageKind::kOneWordAtomic ||
568
569
  ValueStorageKind() == FlagValueStorageKind::kValueAndInitBit);
569
- auto* guard = DataGuard(); // Make sure flag initialized
570
+ auto& guard = DataGuard(); // Make sure flag initialized
570
571
  (void)guard;
571
572
  return OneWordValue().load(std::memory_order_acquire);
572
573
  }
573
574
 
574
575
  bool FlagImpl::ReadOneBool() const {
575
576
  assert(ValueStorageKind() == FlagValueStorageKind::kValueAndInitBit);
576
- auto* guard = DataGuard(); // Make sure flag initialized
577
+ auto& guard = DataGuard(); // Make sure flag initialized
577
578
  (void)guard;
578
579
  return absl::bit_cast<FlagValueAndInitBit<bool>>(
579
580
  OneWordValue().load(std::memory_order_acquire))