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
@@ -26,7 +26,7 @@ ABSL_NAMESPACE_BEGIN
26
26
 
27
27
  void Notification::Notify() {
28
28
  base_internal::TraceSignal(this, TraceObjectKind());
29
- MutexLock l(&this->mutex_);
29
+ MutexLock l(this->mutex_);
30
30
 
31
31
  #ifndef NDEBUG
32
32
  if (ABSL_PREDICT_FALSE(notified_yet_.load(std::memory_order_relaxed))) {
@@ -43,7 +43,7 @@ void Notification::Notify() {
43
43
  Notification::~Notification() {
44
44
  // Make sure that the thread running Notify() exits before the object is
45
45
  // destructed.
46
- MutexLock l(&this->mutex_);
46
+ MutexLock l(this->mutex_);
47
47
  }
48
48
 
49
49
  void Notification::WaitForNotification() const {
@@ -51,7 +51,7 @@ void Notification::WaitForNotification() const {
51
51
  if (!HasBeenNotifiedInternal(&this->notified_yet_)) {
52
52
  this->mutex_.LockWhen(
53
53
  Condition(&HasBeenNotifiedInternal, &this->notified_yet_));
54
- this->mutex_.Unlock();
54
+ this->mutex_.unlock();
55
55
  }
56
56
  base_internal::TraceContinue(this, TraceObjectKind());
57
57
  }
@@ -63,7 +63,7 @@ bool Notification::WaitForNotificationWithTimeout(
63
63
  if (!notified) {
64
64
  notified = this->mutex_.LockWhenWithTimeout(
65
65
  Condition(&HasBeenNotifiedInternal, &this->notified_yet_), timeout);
66
- this->mutex_.Unlock();
66
+ this->mutex_.unlock();
67
67
  }
68
68
  base_internal::TraceContinue(notified ? this : nullptr, TraceObjectKind());
69
69
  return notified;
@@ -75,7 +75,7 @@ bool Notification::WaitForNotificationWithDeadline(absl::Time deadline) const {
75
75
  if (!notified) {
76
76
  notified = this->mutex_.LockWhenWithDeadline(
77
77
  Condition(&HasBeenNotifiedInternal, &this->notified_yet_), deadline);
78
- this->mutex_.Unlock();
78
+ this->mutex_.unlock();
79
79
  }
80
80
  base_internal::TraceContinue(notified ? this : nullptr, TraceObjectKind());
81
81
  return notified;
@@ -75,7 +75,7 @@ class Notification {
75
75
  // Notification::HasBeenNotified()
76
76
  //
77
77
  // Returns the value of the notification's internal "notified" state.
78
- ABSL_MUST_USE_RESULT bool HasBeenNotified() const {
78
+ [[nodiscard]] bool HasBeenNotified() const {
79
79
  if (HasBeenNotifiedInternal(&this->notified_yet_)) {
80
80
  base_internal::TraceObserved(this, TraceObjectKind());
81
81
  return true;
@@ -34,17 +34,17 @@ class ThreadSafeCounter {
34
34
  ThreadSafeCounter() : count_(0) {}
35
35
 
36
36
  void Increment() {
37
- MutexLock lock(&mutex_);
37
+ MutexLock lock(mutex_);
38
38
  ++count_;
39
39
  }
40
40
 
41
41
  int Get() const {
42
- MutexLock lock(&mutex_);
42
+ MutexLock lock(mutex_);
43
43
  return count_;
44
44
  }
45
45
 
46
46
  void WaitUntilGreaterOrEqual(int n) {
47
- MutexLock lock(&mutex_);
47
+ MutexLock lock(mutex_);
48
48
  auto cond = [this, n]() { return count_ >= n; };
49
49
  mutex_.Await(Condition(&cond));
50
50
  }
@@ -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",
@@ -57,6 +60,7 @@ cc_library(
57
60
  "//absl/base:raw_logging_internal",
58
61
  "//absl/numeric:int128",
59
62
  "//absl/strings",
63
+ "//absl/strings:string_view",
60
64
  "//absl/time/internal/cctz:civil_time",
61
65
  "//absl/time/internal/cctz:time_zone",
62
66
  "//absl/types:optional",
@@ -96,7 +100,9 @@ cc_test(
96
100
  ":time",
97
101
  "//absl/base:config",
98
102
  "//absl/base:core_headers",
103
+ "//absl/hash:hash_testing",
99
104
  "//absl/numeric:int128",
105
+ "//absl/random",
100
106
  "//absl/strings:str_format",
101
107
  "//absl/time/internal/cctz:time_zone",
102
108
  "@googletest//:gtest",
@@ -115,6 +121,7 @@ cc_test(
115
121
  "no_test_android_arm",
116
122
  "no_test_android_arm64",
117
123
  "no_test_android_x86",
124
+ "no_test_ios_sim_arm64",
118
125
  "no_test_ios_x86_64",
119
126
  "no_test_lexan",
120
127
  "no_test_loonix",
@@ -129,8 +136,9 @@ cc_test(
129
136
  ],
130
137
  )
131
138
 
132
- cc_test(
139
+ cc_binary(
133
140
  name = "time_benchmark",
141
+ testonly = True,
134
142
  srcs = [
135
143
  "civil_time_benchmark.cc",
136
144
  "clock_benchmark.cc",
@@ -49,7 +49,7 @@ absl_cc_library(
49
49
  "internal/cctz/include/cctz/civil_time.h"
50
50
  "internal/cctz/include/cctz/civil_time_detail.h"
51
51
  SRCS
52
- "internal/cctz/src/civil_time_detail.cc"
52
+ "internal/cctz/src/civil_time_detail.cc"
53
53
  COPTS
54
54
  ${ABSL_DEFAULT_COPTS}
55
55
  )
@@ -121,6 +121,8 @@ absl_cc_test(
121
121
  absl::time
122
122
  absl::config
123
123
  absl::core_headers
124
+ absl::hash_testing
125
+ absl::random_random
124
126
  absl::strings
125
127
  absl::str_format
126
128
  absl::time_zone
@@ -14,6 +14,7 @@
14
14
 
15
15
  #include "absl/time/civil_time.h"
16
16
 
17
+ #include <cerrno>
17
18
  #include <cstdlib>
18
19
  #include <ostream>
19
20
  #include <string>
@@ -21,6 +21,7 @@
21
21
 
22
22
  #include "gtest/gtest.h"
23
23
  #include "absl/base/macros.h"
24
+ #include "absl/hash/hash_testing.h"
24
25
  #include "absl/strings/str_format.h"
25
26
 
26
27
  namespace {
@@ -1259,4 +1260,137 @@ TEST(CivilTime, DocumentationExample) {
1259
1260
  }
1260
1261
  }
1261
1262
 
1263
+ TEST(CivilTime, SupportsHash) {
1264
+ // To check that every field is used by the hash implementation, test
1265
+ // with values that have all fields the same bar one, for each field.
1266
+
1267
+ EXPECT_TRUE(absl::VerifyTypeImplementsAbslHashCorrectly({
1268
+ absl::CivilYear(2017),
1269
+ absl::CivilYear(2018),
1270
+ }));
1271
+
1272
+ EXPECT_TRUE(absl::VerifyTypeImplementsAbslHashCorrectly({
1273
+ absl::CivilMonth(2017, 1),
1274
+ absl::CivilMonth(2017, 2),
1275
+ absl::CivilMonth(2018, 1),
1276
+ absl::CivilMonth(2018, 2),
1277
+ }));
1278
+
1279
+ EXPECT_TRUE(absl::VerifyTypeImplementsAbslHashCorrectly({
1280
+ absl::CivilDay(2017, 1, 1),
1281
+ absl::CivilDay(2017, 1, 2),
1282
+ absl::CivilDay(2017, 2, 1),
1283
+ absl::CivilDay(2017, 2, 2),
1284
+ absl::CivilDay(2018, 1, 1),
1285
+ absl::CivilDay(2018, 1, 2),
1286
+ absl::CivilDay(2018, 2, 1),
1287
+ absl::CivilDay(2018, 2, 2),
1288
+ }));
1289
+
1290
+ EXPECT_TRUE(absl::VerifyTypeImplementsAbslHashCorrectly({
1291
+ absl::CivilHour(2017, 1, 1, 0),
1292
+ absl::CivilHour(2017, 1, 1, 1),
1293
+ absl::CivilHour(2017, 1, 2, 0),
1294
+ absl::CivilHour(2017, 1, 2, 1),
1295
+ absl::CivilHour(2017, 2, 1, 0),
1296
+ absl::CivilHour(2017, 2, 1, 1),
1297
+ absl::CivilHour(2017, 2, 2, 0),
1298
+ absl::CivilHour(2017, 2, 2, 1),
1299
+ absl::CivilHour(2018, 1, 1, 0),
1300
+ absl::CivilHour(2018, 1, 1, 1),
1301
+ absl::CivilHour(2018, 1, 2, 0),
1302
+ absl::CivilHour(2018, 1, 2, 1),
1303
+ absl::CivilHour(2018, 2, 1, 0),
1304
+ absl::CivilHour(2018, 2, 1, 1),
1305
+ absl::CivilHour(2018, 2, 2, 0),
1306
+ absl::CivilHour(2018, 2, 2, 1),
1307
+ }));
1308
+
1309
+ EXPECT_TRUE(absl::VerifyTypeImplementsAbslHashCorrectly({
1310
+ absl::CivilMinute(2017, 1, 1, 0, 0), absl::CivilMinute(2017, 1, 1, 0, 1),
1311
+ absl::CivilMinute(2017, 1, 1, 1, 0), absl::CivilMinute(2017, 1, 1, 1, 1),
1312
+ absl::CivilMinute(2017, 1, 2, 0, 0), absl::CivilMinute(2017, 1, 2, 0, 1),
1313
+ absl::CivilMinute(2017, 1, 2, 1, 0), absl::CivilMinute(2017, 1, 2, 1, 1),
1314
+ absl::CivilMinute(2017, 2, 1, 0, 0), absl::CivilMinute(2017, 2, 1, 0, 1),
1315
+ absl::CivilMinute(2017, 2, 1, 1, 0), absl::CivilMinute(2017, 2, 1, 1, 1),
1316
+ absl::CivilMinute(2017, 2, 2, 0, 0), absl::CivilMinute(2017, 2, 2, 0, 1),
1317
+ absl::CivilMinute(2017, 2, 2, 1, 0), absl::CivilMinute(2017, 2, 2, 1, 1),
1318
+ absl::CivilMinute(2018, 1, 1, 0, 0), absl::CivilMinute(2018, 1, 1, 0, 1),
1319
+ absl::CivilMinute(2018, 1, 1, 1, 0), absl::CivilMinute(2018, 1, 1, 1, 1),
1320
+ absl::CivilMinute(2018, 1, 2, 0, 0), absl::CivilMinute(2018, 1, 2, 0, 1),
1321
+ absl::CivilMinute(2018, 1, 2, 1, 0), absl::CivilMinute(2018, 1, 2, 1, 1),
1322
+ absl::CivilMinute(2018, 2, 1, 0, 0), absl::CivilMinute(2018, 2, 1, 0, 1),
1323
+ absl::CivilMinute(2018, 2, 1, 1, 0), absl::CivilMinute(2018, 2, 1, 1, 1),
1324
+ absl::CivilMinute(2018, 2, 2, 0, 0), absl::CivilMinute(2018, 2, 2, 0, 1),
1325
+ absl::CivilMinute(2018, 2, 2, 1, 0), absl::CivilMinute(2018, 2, 2, 1, 1),
1326
+ }));
1327
+
1328
+ EXPECT_TRUE(absl::VerifyTypeImplementsAbslHashCorrectly({
1329
+ absl::CivilSecond(2017, 1, 1, 0, 0, 0),
1330
+ absl::CivilSecond(2017, 1, 1, 0, 0, 1),
1331
+ absl::CivilSecond(2017, 1, 1, 0, 1, 0),
1332
+ absl::CivilSecond(2017, 1, 1, 0, 1, 1),
1333
+ absl::CivilSecond(2017, 1, 1, 1, 0, 0),
1334
+ absl::CivilSecond(2017, 1, 1, 1, 0, 1),
1335
+ absl::CivilSecond(2017, 1, 1, 1, 1, 0),
1336
+ absl::CivilSecond(2017, 1, 1, 1, 1, 1),
1337
+ absl::CivilSecond(2017, 1, 2, 0, 0, 0),
1338
+ absl::CivilSecond(2017, 1, 2, 0, 0, 1),
1339
+ absl::CivilSecond(2017, 1, 2, 0, 1, 0),
1340
+ absl::CivilSecond(2017, 1, 2, 0, 1, 1),
1341
+ absl::CivilSecond(2017, 1, 2, 1, 0, 0),
1342
+ absl::CivilSecond(2017, 1, 2, 1, 0, 1),
1343
+ absl::CivilSecond(2017, 1, 2, 1, 1, 0),
1344
+ absl::CivilSecond(2017, 1, 2, 1, 1, 1),
1345
+ absl::CivilSecond(2017, 2, 1, 0, 0, 0),
1346
+ absl::CivilSecond(2017, 2, 1, 0, 0, 1),
1347
+ absl::CivilSecond(2017, 2, 1, 0, 1, 0),
1348
+ absl::CivilSecond(2017, 2, 1, 0, 1, 1),
1349
+ absl::CivilSecond(2017, 2, 1, 1, 0, 0),
1350
+ absl::CivilSecond(2017, 2, 1, 1, 0, 1),
1351
+ absl::CivilSecond(2017, 2, 1, 1, 1, 0),
1352
+ absl::CivilSecond(2017, 2, 1, 1, 1, 1),
1353
+ absl::CivilSecond(2017, 2, 2, 0, 0, 0),
1354
+ absl::CivilSecond(2017, 2, 2, 0, 0, 1),
1355
+ absl::CivilSecond(2017, 2, 2, 0, 1, 0),
1356
+ absl::CivilSecond(2017, 2, 2, 0, 1, 1),
1357
+ absl::CivilSecond(2017, 2, 2, 1, 0, 0),
1358
+ absl::CivilSecond(2017, 2, 2, 1, 0, 1),
1359
+ absl::CivilSecond(2017, 2, 2, 1, 1, 0),
1360
+ absl::CivilSecond(2017, 2, 2, 1, 1, 1),
1361
+ absl::CivilSecond(2018, 1, 1, 0, 0, 0),
1362
+ absl::CivilSecond(2018, 1, 1, 0, 0, 1),
1363
+ absl::CivilSecond(2018, 1, 1, 0, 1, 0),
1364
+ absl::CivilSecond(2018, 1, 1, 0, 1, 1),
1365
+ absl::CivilSecond(2018, 1, 1, 1, 0, 0),
1366
+ absl::CivilSecond(2018, 1, 1, 1, 0, 1),
1367
+ absl::CivilSecond(2018, 1, 1, 1, 1, 0),
1368
+ absl::CivilSecond(2018, 1, 1, 1, 1, 1),
1369
+ absl::CivilSecond(2018, 1, 2, 0, 0, 0),
1370
+ absl::CivilSecond(2018, 1, 2, 0, 0, 1),
1371
+ absl::CivilSecond(2018, 1, 2, 0, 1, 0),
1372
+ absl::CivilSecond(2018, 1, 2, 0, 1, 1),
1373
+ absl::CivilSecond(2018, 1, 2, 1, 0, 0),
1374
+ absl::CivilSecond(2018, 1, 2, 1, 0, 1),
1375
+ absl::CivilSecond(2018, 1, 2, 1, 1, 0),
1376
+ absl::CivilSecond(2018, 1, 2, 1, 1, 1),
1377
+ absl::CivilSecond(2018, 2, 1, 0, 0, 0),
1378
+ absl::CivilSecond(2018, 2, 1, 0, 0, 1),
1379
+ absl::CivilSecond(2018, 2, 1, 0, 1, 0),
1380
+ absl::CivilSecond(2018, 2, 1, 0, 1, 1),
1381
+ absl::CivilSecond(2018, 2, 1, 1, 0, 0),
1382
+ absl::CivilSecond(2018, 2, 1, 1, 0, 1),
1383
+ absl::CivilSecond(2018, 2, 1, 1, 1, 0),
1384
+ absl::CivilSecond(2018, 2, 1, 1, 1, 1),
1385
+ absl::CivilSecond(2018, 2, 2, 0, 0, 0),
1386
+ absl::CivilSecond(2018, 2, 2, 0, 0, 1),
1387
+ absl::CivilSecond(2018, 2, 2, 0, 1, 0),
1388
+ absl::CivilSecond(2018, 2, 2, 0, 1, 1),
1389
+ absl::CivilSecond(2018, 2, 2, 1, 0, 0),
1390
+ absl::CivilSecond(2018, 2, 2, 1, 0, 1),
1391
+ absl::CivilSecond(2018, 2, 2, 1, 1, 0),
1392
+ absl::CivilSecond(2018, 2, 2, 1, 1, 1),
1393
+ }));
1394
+ }
1395
+
1262
1396
  } // namespace
@@ -135,7 +135,7 @@ static inline uint64_t SeqAcquire(std::atomic<uint64_t> *seq) {
135
135
  // fetch_add would be before it, not after.
136
136
  std::atomic_thread_fence(std::memory_order_release);
137
137
 
138
- return x + 2; // original word plus 2
138
+ return x + 2; // original word plus 2
139
139
  }
140
140
 
141
141
  // Release seqlock (*seq) by writing x to it---a value previously returned by
@@ -160,8 +160,8 @@ static const uint64_t kMinNSBetweenSamples = 2000 << 20;
160
160
  // We require that kMinNSBetweenSamples shifted by kScale
161
161
  // have at least a bit left over for 64-bit calculations.
162
162
  static_assert(((kMinNSBetweenSamples << (kScale + 1)) >> (kScale + 1)) ==
163
- kMinNSBetweenSamples,
164
- "cannot represent kMaxBetweenSamplesNSScaled");
163
+ kMinNSBetweenSamples,
164
+ "cannot represent kMaxBetweenSamplesNSScaled");
165
165
 
166
166
  // data from a sample of the kernel's time value
167
167
  struct TimeSampleAtomic {
@@ -206,8 +206,7 @@ struct ABSL_CACHELINE_ALIGNED TimeState {
206
206
 
207
207
  // A reader-writer lock protecting the static locations below.
208
208
  // See SeqAcquire() and SeqRelease() above.
209
- absl::base_internal::SpinLock lock{absl::kConstInit,
210
- base_internal::SCHEDULE_KERNEL_ONLY};
209
+ absl::base_internal::SpinLock lock{base_internal::SCHEDULE_KERNEL_ONLY};
211
210
  };
212
211
  ABSL_CONST_INIT static TimeState time_state;
213
212
 
@@ -416,7 +415,7 @@ static int64_t GetCurrentTimeNanosSlowPath()
416
415
  ABSL_LOCKS_EXCLUDED(time_state.lock) {
417
416
  // Serialize access to slow-path. Fast-path readers are not blocked yet, and
418
417
  // code below must not modify last_sample until the seqlock is acquired.
419
- time_state.lock.Lock();
418
+ base_internal::SpinLockHolder l(time_state.lock);
420
419
 
421
420
  // Sample the kernel time base. This is the definition of
422
421
  // "now" if we take the slow path.
@@ -439,16 +438,14 @@ static int64_t GetCurrentTimeNanosSlowPath()
439
438
  if (delta_cycles < sample.min_cycles_per_sample) {
440
439
  // Another thread updated the sample. This path does not take the seqlock
441
440
  // so that blocked readers can make progress without blocking new readers.
442
- estimated_base_ns = sample.base_ns +
443
- ((delta_cycles * sample.nsscaled_per_cycle) >> kScale);
441
+ estimated_base_ns =
442
+ sample.base_ns + ((delta_cycles * sample.nsscaled_per_cycle) >> kScale);
444
443
  time_state.stats_fast_slow_paths++;
445
444
  } else {
446
445
  estimated_base_ns =
447
446
  UpdateLastSample(now_cycles, now_ns, delta_cycles, &sample);
448
447
  }
449
448
 
450
- time_state.lock.Unlock();
451
-
452
449
  return static_cast<int64_t>(estimated_base_ns);
453
450
  }
454
451
 
@@ -494,8 +491,8 @@ static uint64_t UpdateLastSample(uint64_t now_cycles, uint64_t now_ns,
494
491
  estimated_scaled_ns = (delta_cycles >> s) * sample->nsscaled_per_cycle;
495
492
  } while (estimated_scaled_ns / sample->nsscaled_per_cycle !=
496
493
  (delta_cycles >> s));
497
- estimated_base_ns = sample->base_ns +
498
- (estimated_scaled_ns >> (kScale - s));
494
+ estimated_base_ns =
495
+ sample->base_ns + (estimated_scaled_ns >> (kScale - s));
499
496
  }
500
497
 
501
498
  // Compute the assumed cycle time kMinNSBetweenSamples ns into the future
@@ -522,8 +519,8 @@ static uint64_t UpdateLastSample(uint64_t now_cycles, uint64_t now_ns,
522
519
  diff_ns - (diff_ns / 16));
523
520
  uint64_t new_nsscaled_per_cycle =
524
521
  SafeDivideAndScale(ns, assumed_next_sample_delta_cycles);
525
- if (new_nsscaled_per_cycle != 0 &&
526
- diff_ns < 100 * 1000 * 1000 && -diff_ns < 100 * 1000 * 1000) {
522
+ if (new_nsscaled_per_cycle != 0 && diff_ns < 100 * 1000 * 1000 &&
523
+ -diff_ns < 100 * 1000 * 1000) {
527
524
  // record the cycle time measurement
528
525
  time_state.last_sample.nsscaled_per_cycle.store(
529
526
  new_nsscaled_per_cycle, std::memory_order_relaxed);
@@ -202,7 +202,8 @@ inline bool SafeAddRepHi(double a_hi, double b_hi, Duration* d) {
202
202
  *d = -InfiniteDuration();
203
203
  return false;
204
204
  }
205
- *d = time_internal::MakeDuration(c, time_internal::GetRepLo(*d));
205
+ *d = time_internal::MakeDuration(static_cast<int64_t>(c),
206
+ time_internal::GetRepLo(*d));
206
207
  return true;
207
208
  }
208
209
 
@@ -239,8 +240,8 @@ inline Duration ScaleFixed(Duration d, int64_t r) {
239
240
  template <template <typename> class Operation>
240
241
  inline Duration ScaleDouble(Duration d, double r) {
241
242
  Operation<double> op;
242
- double hi_doub = op(time_internal::GetRepHi(d), r);
243
- double lo_doub = op(time_internal::GetRepLo(d), r);
243
+ double hi_doub = op(static_cast<double>(time_internal::GetRepHi(d)), r);
244
+ double lo_doub = op(static_cast<double>(time_internal::GetRepLo(d)), r);
244
245
 
245
246
  double hi_int = 0;
246
247
  double hi_frac = std::modf(hi_doub, &hi_int);
@@ -253,12 +254,15 @@ inline Duration ScaleDouble(Duration d, double r) {
253
254
  double lo_frac = std::modf(lo_doub, &lo_int);
254
255
 
255
256
  // Rolls lo into hi if necessary.
256
- int64_t lo64 = std::round(lo_frac * kTicksPerSecond);
257
+ int64_t lo64 = static_cast<int64_t>(std::round(lo_frac * kTicksPerSecond));
257
258
 
258
259
  Duration ans;
259
260
  if (!SafeAddRepHi(hi_int, lo_int, &ans)) return ans;
260
261
  int64_t hi64 = time_internal::GetRepHi(ans);
261
- if (!SafeAddRepHi(hi64, lo64 / kTicksPerSecond, &ans)) return ans;
262
+ if (!SafeAddRepHi(static_cast<double>(hi64),
263
+ static_cast<double>(lo64 / kTicksPerSecond), &ans)) {
264
+ return ans;
265
+ }
262
266
  hi64 = time_internal::GetRepHi(ans);
263
267
  lo64 %= kTicksPerSecond;
264
268
  NormalizeTicks(&hi64, &lo64);
@@ -465,7 +469,7 @@ Duration& Duration::operator*=(int64_t r) {
465
469
 
466
470
  Duration& Duration::operator*=(double r) {
467
471
  if (time_internal::IsInfiniteDuration(*this) || !IsFinite(r)) {
468
- const bool is_neg = std::signbit(r) != (rep_hi_.Get() < 0);
472
+ const bool is_neg = std::isnan(r) || std::signbit(r) != (rep_hi_.Get() < 0);
469
473
  return *this = is_neg ? -InfiniteDuration() : InfiniteDuration();
470
474
  }
471
475
  return *this = ScaleDouble<std::multiplies>(*this, r);
@@ -481,7 +485,7 @@ Duration& Duration::operator/=(int64_t r) {
481
485
 
482
486
  Duration& Duration::operator/=(double r) {
483
487
  if (time_internal::IsInfiniteDuration(*this) || !IsValidDivisor(r)) {
484
- const bool is_neg = std::signbit(r) != (rep_hi_.Get() < 0);
488
+ const bool is_neg = std::isnan(r) || std::signbit(r) != (rep_hi_.Get() < 0);
485
489
  return *this = is_neg ? -InfiniteDuration() : InfiniteDuration();
486
490
  }
487
491
  return *this = ScaleDouble<std::divides>(*this, r);
@@ -699,8 +703,9 @@ void AppendNumberUnit(std::string* out, double n, DisplayUnit unit) {
699
703
  char buf[kBufferSize]; // also large enough to hold integer part
700
704
  char* ep = buf + sizeof(buf);
701
705
  double d = 0;
702
- int64_t frac_part = std::round(std::modf(n, &d) * unit.pow10);
703
- int64_t int_part = d;
706
+ int64_t frac_part =
707
+ static_cast<int64_t>(std::round(std::modf(n, &d) * unit.pow10));
708
+ int64_t int_part = static_cast<int64_t>(d);
704
709
  if (int_part != 0 || frac_part != 0) {
705
710
  char* bp = Format64(ep, 0, int_part); // always < 1000
706
711
  out->append(bp, static_cast<size_t>(ep - bp));
@@ -40,6 +40,7 @@
40
40
 
41
41
  #include "gmock/gmock.h"
42
42
  #include "gtest/gtest.h"
43
+ #include "absl/random/random.h"
43
44
  #include "absl/strings/str_format.h"
44
45
  #include "absl/time/time.h"
45
46
 
@@ -840,18 +841,18 @@ TEST(Duration, DivisionByZero) {
840
841
 
841
842
  TEST(Duration, NaN) {
842
843
  // Note that IEEE 754 does not define the behavior of a nan's sign when it is
843
- // copied, so the code below allows for either + or - InfiniteDuration.
844
+ // copied. We return -InfiniteDuration in either case.
844
845
  #define TEST_NAN_HANDLING(NAME, NAN) \
845
846
  do { \
846
847
  const auto inf = absl::InfiniteDuration(); \
847
848
  auto x = NAME(NAN); \
848
- EXPECT_TRUE(x == inf || x == -inf); \
849
+ EXPECT_TRUE(x == -inf); \
849
850
  auto y = NAME(42); \
850
851
  y *= NAN; \
851
- EXPECT_TRUE(y == inf || y == -inf); \
852
+ EXPECT_TRUE(y == -inf); \
852
853
  auto z = NAME(42); \
853
854
  z /= NAN; \
854
- EXPECT_TRUE(z == inf || z == -inf); \
855
+ EXPECT_TRUE(z == -inf); \
855
856
  } while (0)
856
857
 
857
858
  const double nan = std::numeric_limits<double>::quiet_NaN();
@@ -1514,9 +1515,7 @@ TEST(Duration, ToDoubleSecondsCheckEdgeCases) {
1514
1515
  }
1515
1516
 
1516
1517
  TEST(Duration, ToDoubleSecondsCheckRandom) {
1517
- std::random_device rd;
1518
- std::seed_seq seed({rd(), rd(), rd(), rd(), rd(), rd(), rd(), rd()});
1519
- std::mt19937_64 gen(seed);
1518
+ absl::InsecureBitGen gen;
1520
1519
  // We want doubles distributed from 1/8ns up to 2^63, where
1521
1520
  // as many values are tested from 1ns to 2ns as from 1sec to 2sec,
1522
1521
  // so even distribute along a log-scale of those values, and
@@ -12,6 +12,9 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
+ load("@rules_cc//cc:cc_binary.bzl", "cc_binary")
16
+ load("@rules_cc//cc:cc_library.bzl", "cc_library")
17
+ load("@rules_cc//cc:cc_test.bzl", "cc_test")
15
18
  load("//absl:copts/configure_copts.bzl", "ABSL_DEFAULT_COPTS", "ABSL_DEFAULT_LINKOPTS", "ABSL_TEST_COPTS")
16
19
 
17
20
  package(features = [
@@ -80,9 +83,15 @@ cc_library(
80
83
 
81
84
  ### tests
82
85
 
83
- test_suite(
84
- name = "all_tests",
85
- visibility = ["//visibility:public"],
86
+ cc_library(
87
+ name = "test_time_zone_names",
88
+ testonly = True,
89
+ srcs = ["src/test_time_zone_names.cc"],
90
+ hdrs = ["src/test_time_zone_names.h"],
91
+ copts = ABSL_DEFAULT_COPTS,
92
+ linkopts = ABSL_DEFAULT_LINKOPTS,
93
+ visibility = ["//visibility:private"],
94
+ deps = ["//absl/base:config"],
86
95
  )
87
96
 
88
97
  cc_test(
@@ -137,6 +146,7 @@ cc_test(
137
146
  ],
138
147
  deps = [
139
148
  ":civil_time",
149
+ ":test_time_zone_names",
140
150
  ":time_zone",
141
151
  "//absl/base:config",
142
152
  "@googletest//:gtest",
@@ -161,6 +171,7 @@ cc_test(
161
171
  tags = ["benchmark"],
162
172
  deps = [
163
173
  ":civil_time",
174
+ ":test_time_zone_names",
164
175
  ":time_zone",
165
176
  "//absl/base:config",
166
177
  "@google_benchmark//:benchmark_main",
@@ -96,6 +96,18 @@ CONSTEXPR_F int days_per_4years(int yi) noexcept {
96
96
  CONSTEXPR_F int days_per_year(year_t y, month_t m) noexcept {
97
97
  return is_leap_year(y + (m > 2)) ? 366 : 365;
98
98
  }
99
+ // The compiler cannot optimize away the check if we use
100
+ // -fsanitize=array-bounds.
101
+ // m is guaranteed to be in [1:12] in the caller, but the compiler cannot
102
+ // optimize away the check even when this function is inlined into BreakTime.
103
+ // To reduce the overhead, we use no_sanitize to skip the unnecessary
104
+ // -fsanitize=array-bounds check. Remove no_sanitize once the missed
105
+ // optimization is fixed.
106
+ #if defined(__clang__) && defined(__has_cpp_attribute)
107
+ #if __has_cpp_attribute(clang::no_sanitize)
108
+ [[clang::no_sanitize("array-bounds")]]
109
+ #endif
110
+ #endif
99
111
  CONSTEXPR_F int days_per_month(year_t y, month_t m) noexcept {
100
112
  CONSTEXPR_D int k_days_per_month[1 + 12] = {
101
113
  -1, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 // non leap year
@@ -200,7 +200,7 @@ class time_zone {
200
200
  // version() and description() provide additional information about the
201
201
  // time zone. The content of each of the returned strings is unspecified,
202
202
  // however, when the IANA Time Zone Database is the underlying data source
203
- // the version() string will be in the familar form (e.g, "2018e") or
203
+ // the version() string will be in the familiar form (e.g, "2018e") or
204
204
  // empty when unavailable.
205
205
  //
206
206
  // Note: These functions are for informational or testing purposes only.