@zigc/lib 0.17.0-dev.27 → 0.17.0-dev.296

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 (1103) hide show
  1. package/c/fcntl.zig +6 -1
  2. package/c/inttypes.zig +0 -10
  3. package/c/math.zig +52 -112
  4. package/c/pthread.zig +57 -0
  5. package/c/search.zig +1 -27
  6. package/c/stdlib/drand48.zig +0 -57
  7. package/c/stdlib.zig +31 -121
  8. package/c/string.zig +20 -7
  9. package/c/strings.zig +0 -38
  10. package/c/unistd.zig +27 -26
  11. package/c/wchar.zig +10 -0
  12. package/c.zig +2 -2
  13. package/compiler/aro/aro/CodeGen.zig +7 -8
  14. package/compiler/aro/aro/Compilation.zig +17 -17
  15. package/compiler/aro/aro/Driver.zig +14 -13
  16. package/compiler/aro/aro/Parser.zig +20 -15
  17. package/compiler/aro/aro/Pragma.zig +3 -2
  18. package/compiler/aro/aro/Preprocessor.zig +9 -6
  19. package/compiler/aro/aro/pragmas/message.zig +3 -2
  20. package/compiler/aro/aro/text_literal.zig +3 -2
  21. package/compiler/aro/assembly_backend/x86_64.zig +4 -4
  22. package/compiler/build_runner.zig +2 -4
  23. package/compiler/reduce/Walk.zig +8 -13
  24. package/compiler/resinator/compile.zig +1 -1
  25. package/compiler/resinator/cvtres.zig +4 -4
  26. package/compiler/resinator/errors.zig +7 -7
  27. package/compiler/resinator/ico.zig +4 -4
  28. package/compiler/resinator/parse.zig +2 -2
  29. package/compiler/resinator/res.zig +1 -1
  30. package/compiler/std-docs.zig +1 -1
  31. package/compiler/test_runner.zig +1 -1
  32. package/compiler/translate-c/MacroTranslator.zig +1 -1
  33. package/compiler/translate-c/Translator.zig +6 -2
  34. package/compiler/translate-c/ast.zig +16 -23
  35. package/compiler/translate-c/main.zig +1 -1
  36. package/compiler_rt/addf3.zig +1 -1
  37. package/compiler_rt/arm.zig +3 -3
  38. package/compiler_rt/atomics.zig +1 -1
  39. package/compiler_rt/comparef.zig +3 -3
  40. package/compiler_rt/cos.zig +1 -3
  41. package/compiler_rt/count0bits.zig +1 -1
  42. package/compiler_rt/divdf3.zig +2 -2
  43. package/compiler_rt/divsf3.zig +1 -1
  44. package/compiler_rt/divtf3.zig +1 -1
  45. package/compiler_rt/divxf3.zig +1 -1
  46. package/compiler_rt/exp.zig +0 -2
  47. package/compiler_rt/exp2.zig +0 -2
  48. package/compiler_rt/extendf.zig +5 -5
  49. package/compiler_rt/fabs.zig +1 -3
  50. package/compiler_rt/float_from_int.zig +3 -4
  51. package/compiler_rt/fma.zig +0 -2
  52. package/compiler_rt/fmax.zig +1 -3
  53. package/compiler_rt/fmin.zig +1 -3
  54. package/compiler_rt/fmod.zig +2 -4
  55. package/compiler_rt/limb64.zig +3 -2
  56. package/compiler_rt/log.zig +0 -2
  57. package/compiler_rt/log10.zig +0 -2
  58. package/compiler_rt/log2.zig +0 -2
  59. package/compiler_rt/mulf3.zig +2 -2
  60. package/compiler_rt/rem_pio2l.zig +1 -1
  61. package/compiler_rt/round.zig +0 -2
  62. package/compiler_rt/sin.zig +1 -3
  63. package/compiler_rt/sincos.zig +1 -3
  64. package/compiler_rt/sqrt.zig +0 -2
  65. package/compiler_rt/ssp.zig +2 -2
  66. package/compiler_rt/tan.zig +1 -3
  67. package/compiler_rt/trunc.zig +0 -2
  68. package/compiler_rt/truncf.zig +3 -3
  69. package/compiler_rt/trunctfhf2.zig +3 -0
  70. package/compiler_rt.zig +5 -26
  71. package/docs/wasm/Walk.zig +1 -3
  72. package/docs/wasm/html_render.zig +1 -2
  73. package/docs/wasm/markdown/Parser.zig +16 -20
  74. package/fuzzer.zig +2 -0
  75. package/include/__clang_spirv_builtins.h +12 -12
  76. package/include/__float_float.h +176 -0
  77. package/include/__float_header_macro.h +12 -0
  78. package/include/__float_infinity_nan.h +20 -0
  79. package/include/amo.h +131 -0
  80. package/include/amxavx512intrin.h +215 -1
  81. package/include/amxintrin.h +0 -2
  82. package/include/arm_acle.h +37 -27
  83. package/include/arm_neon.h +218 -82
  84. package/include/arm_sme.h +8 -8
  85. package/include/arm_sve.h +4162 -3782
  86. package/include/avx10_2_512bf16intrin.h +19 -12
  87. package/include/avx10_2_512convertintrin.h +1 -1
  88. package/include/avx10_2_512niintrin.h +31 -31
  89. package/include/avx10_2_512satcvtdsintrin.h +1 -1
  90. package/include/avx10_2bf16intrin.h +54 -45
  91. package/include/avx10_2convertintrin.h +2 -2
  92. package/include/avx10_2copyintrin.h +1 -1
  93. package/include/avx10_2niintrin.h +14 -14
  94. package/include/avx10_2satcvtdsintrin.h +2 -2
  95. package/include/avx2intrin.h +275 -377
  96. package/include/avx512bf16intrin.h +25 -16
  97. package/include/avx512bitalgintrin.h +19 -30
  98. package/include/avx512bwintrin.h +386 -505
  99. package/include/avx512cdintrin.h +42 -55
  100. package/include/avx512dqintrin.h +132 -161
  101. package/include/avx512fintrin.h +1015 -1424
  102. package/include/avx512fp16intrin.h +112 -110
  103. package/include/avx512ifmaintrin.h +32 -34
  104. package/include/avx512ifmavlintrin.h +73 -46
  105. package/include/avx512vbmi2intrin.h +43 -32
  106. package/include/avx512vbmiintrin.h +19 -27
  107. package/include/avx512vbmivlintrin.h +35 -49
  108. package/include/avx512vlbf16intrin.h +32 -22
  109. package/include/avx512vlbitalgintrin.h +37 -53
  110. package/include/avx512vlbwintrin.h +470 -573
  111. package/include/avx512vlcdintrin.h +74 -102
  112. package/include/avx512vldqintrin.h +110 -127
  113. package/include/avx512vlfp16intrin.h +130 -111
  114. package/include/avx512vlintrin.h +945 -1299
  115. package/include/avx512vlvbmi2intrin.h +78 -63
  116. package/include/avx512vlvnniintrin.h +21 -18
  117. package/include/avx512vlvp2intersectintrin.h +2 -2
  118. package/include/avx512vnniintrin.h +10 -10
  119. package/include/avx512vp2intersectintrin.h +1 -2
  120. package/include/avx512vpopcntdqintrin.h +8 -10
  121. package/include/avx512vpopcntdqvlintrin.h +17 -15
  122. package/include/avxifmaintrin.h +16 -0
  123. package/include/avxintrin.h +165 -241
  124. package/include/avxvnniint16intrin.h +118 -99
  125. package/include/avxvnniint8intrin.h +56 -32
  126. package/include/avxvnniintrin.h +16 -8
  127. package/include/cpuid.h +101 -4
  128. package/include/emmintrin.h +168 -168
  129. package/include/f16cintrin.h +23 -9
  130. package/include/float.h +16 -155
  131. package/include/fma4intrin.h +98 -96
  132. package/include/fmaintrin.h +96 -66
  133. package/include/gfniintrin.h +21 -16
  134. package/include/hexagon_types.h +23 -20
  135. package/include/hvx_hexagon_protos.h +649 -860
  136. package/include/immintrin.h +0 -12
  137. package/include/intrin.h +4 -0
  138. package/include/lasxintrin.h +113 -0
  139. package/include/llvm_libc_wrappers/assert.h +3 -5
  140. package/include/llvm_libc_wrappers/ctype.h +3 -115
  141. package/include/llvm_libc_wrappers/inttypes.h +3 -5
  142. package/include/llvm_libc_wrappers/stdio.h +10 -38
  143. package/include/llvm_libc_wrappers/stdlib.h +3 -24
  144. package/include/llvm_libc_wrappers/string.h +2 -70
  145. package/include/llvm_libc_wrappers/time.h +4 -10
  146. package/include/mmintrin.h +188 -257
  147. package/include/module.modulemap +23 -4
  148. package/include/movrs_avx10_2_512intrin.h +2 -2
  149. package/include/movrs_avx10_2intrin.h +4 -4
  150. package/include/pmmintrin.h +12 -24
  151. package/include/ptrauth.h +16 -2
  152. package/include/riscv_mips.h +34 -0
  153. package/include/riscv_nds.h +89 -0
  154. package/include/sifive_vector.h +58 -2
  155. package/include/sm4evexintrin.h +2 -2
  156. package/include/smmintrin.h +77 -59
  157. package/include/spirvintrin.h +194 -0
  158. package/include/stddefer.h +19 -0
  159. package/include/tmmintrin.h +116 -147
  160. package/include/vaesintrin.h +1 -2
  161. package/include/xmmintrin.h +44 -70
  162. package/include/xopintrin.h +20 -10
  163. package/libc/include/aarch64-linux-any/asm/hwcap.h +1 -0
  164. package/libc/include/aarch64-linux-any/asm/unistd_64.h +1 -0
  165. package/libc/include/any-linux-any/asm-generic/errno.h +2 -0
  166. package/libc/include/any-linux-any/asm-generic/unistd.h +4 -1
  167. package/libc/include/any-linux-any/drm/amdgpu_drm.h +20 -6
  168. package/libc/include/any-linux-any/drm/amdxdna_accel.h +8 -0
  169. package/libc/include/any-linux-any/drm/drm_fourcc.h +6 -6
  170. package/libc/include/any-linux-any/drm/panfrost_drm.h +75 -1
  171. package/libc/include/any-linux-any/drm/panthor_drm.h +154 -3
  172. package/libc/include/any-linux-any/drm/rocket_accel.h +74 -24
  173. package/libc/include/any-linux-any/drm/xe_drm.h +89 -6
  174. package/libc/include/any-linux-any/linux/android/binder.h +1 -1
  175. package/libc/include/any-linux-any/linux/bpf.h +28 -0
  176. package/libc/include/any-linux-any/linux/btrfs.h +1 -0
  177. package/libc/include/any-linux-any/linux/btrfs_tree.h +32 -2
  178. package/libc/include/any-linux-any/linux/dma-buf.h +1 -0
  179. package/libc/include/any-linux-any/linux/dpll.h +1 -0
  180. package/libc/include/any-linux-any/linux/elf.h +2 -0
  181. package/libc/include/any-linux-any/linux/ethtool.h +21 -5
  182. package/libc/include/any-linux-any/linux/fs.h +1 -0
  183. package/libc/include/any-linux-any/linux/hyperv.h +1 -1
  184. package/libc/include/any-linux-any/linux/idxd.h +134 -134
  185. package/libc/include/any-linux-any/linux/if_alg.h +1 -1
  186. package/libc/include/any-linux-any/linux/if_link.h +1 -0
  187. package/libc/include/any-linux-any/linux/input-event-codes.h +4 -0
  188. package/libc/include/any-linux-any/linux/io_uring/bpf_filter.h +68 -0
  189. package/libc/include/any-linux-any/linux/io_uring/query.h +5 -1
  190. package/libc/include/any-linux-any/linux/io_uring.h +33 -2
  191. package/libc/include/any-linux-any/linux/iommufd.h +39 -0
  192. package/libc/include/any-linux-any/linux/kfd_ioctl.h +13 -3
  193. package/libc/include/any-linux-any/linux/kfd_sysfs.h +2 -1
  194. package/libc/include/any-linux-any/linux/kvm.h +30 -6
  195. package/libc/include/any-linux-any/linux/landlock.h +22 -8
  196. package/libc/include/any-linux-any/linux/magic.h +1 -0
  197. package/libc/include/any-linux-any/linux/mempolicy.h +3 -0
  198. package/libc/include/any-linux-any/linux/mount.h +11 -2
  199. package/libc/include/any-linux-any/linux/mptcp_pm.h +1 -1
  200. package/libc/include/any-linux-any/linux/mshv.h +2 -0
  201. package/libc/include/any-linux-any/linux/netfilter_bridge.h +5 -4
  202. package/libc/include/any-linux-any/linux/netfilter_ipv4.h +4 -5
  203. package/libc/include/any-linux-any/linux/netfilter_ipv6.h +3 -4
  204. package/libc/include/any-linux-any/linux/nfs.h +1 -1
  205. package/libc/include/any-linux-any/linux/nfsd_netlink.h +1 -0
  206. package/libc/include/any-linux-any/linux/nilfs2_api.h +2 -2
  207. package/libc/include/any-linux-any/linux/nilfs2_ondisk.h +97 -66
  208. package/libc/include/any-linux-any/linux/nl80211.h +104 -3
  209. package/libc/include/any-linux-any/linux/pci.h +7 -0
  210. package/libc/include/any-linux-any/linux/pci_regs.h +65 -6
  211. package/libc/include/any-linux-any/linux/pcitest.h +1 -0
  212. package/libc/include/any-linux-any/linux/perf_event.h +24 -3
  213. package/libc/include/any-linux-any/linux/pkt_sched.h +1 -0
  214. package/libc/include/any-linux-any/linux/prctl.h +30 -0
  215. package/libc/include/any-linux-any/linux/rseq.h +62 -5
  216. package/libc/include/any-linux-any/linux/shm.h +0 -1
  217. package/libc/include/any-linux-any/linux/stddef.h +4 -0
  218. package/libc/include/any-linux-any/linux/sysctl.h +1 -2
  219. package/libc/include/any-linux-any/linux/taskstats.h +12 -1
  220. package/libc/include/any-linux-any/linux/tcp.h +23 -3
  221. package/libc/include/any-linux-any/linux/typelimits.h +8 -0
  222. package/libc/include/any-linux-any/linux/ublk_cmd.h +120 -1
  223. package/libc/include/any-linux-any/linux/v4l2-controls.h +63 -0
  224. package/libc/include/any-linux-any/linux/vbox_vmmdev_types.h +2 -2
  225. package/libc/include/any-linux-any/linux/vduse.h +80 -5
  226. package/libc/include/any-linux-any/linux/version.h +3 -3
  227. package/libc/include/any-linux-any/linux/vfio.h +4 -0
  228. package/libc/include/any-linux-any/linux/videodev2.h +3 -0
  229. package/libc/include/any-linux-any/linux/virtio_ring.h +1 -2
  230. package/libc/include/any-linux-any/linux/vmclock-abi.h +20 -0
  231. package/libc/include/any-linux-any/rdma/bnxt_re-abi.h +16 -0
  232. package/libc/include/any-linux-any/rdma/ib_user_ioctl_cmds.h +16 -0
  233. package/libc/include/any-linux-any/rdma/mana-abi.h +3 -0
  234. package/libc/include/any-linux-any/scsi/scsi_bsg_ufs.h +8 -9
  235. package/libc/include/any-linux-any/sound/sof/tokens.h +6 -0
  236. package/libc/include/arc-linux-any/asm/swab.h +0 -63
  237. package/libc/include/arc-linux-any/asm/unistd_32.h +1 -0
  238. package/libc/include/arm-linux-any/asm/ptrace.h +0 -9
  239. package/libc/include/arm-linux-any/asm/unistd-eabi.h +1 -0
  240. package/libc/include/arm-linux-any/asm/unistd-oabi.h +1 -0
  241. package/libc/include/csky-linux-any/asm/unistd_32.h +1 -0
  242. package/libc/include/hexagon-linux-any/asm/unistd_32.h +1 -0
  243. package/libc/include/loongarch-linux-any/asm/hwcap.h +1 -0
  244. package/libc/include/loongarch-linux-any/asm/kvm.h +1 -0
  245. package/libc/include/loongarch-linux-any/asm/kvm_para.h +1 -0
  246. package/libc/include/loongarch-linux-any/asm/unistd_32.h +2 -0
  247. package/libc/include/loongarch-linux-any/asm/unistd_64.h +2 -0
  248. package/libc/include/m68k-linux-any/asm/unistd_32.h +1 -0
  249. package/libc/include/mips-linux-any/asm/errno.h +2 -0
  250. package/libc/include/mips-linux-any/asm/unistd_n32.h +1 -0
  251. package/libc/include/mips-linux-any/asm/unistd_n64.h +1 -0
  252. package/libc/include/mips-linux-any/asm/unistd_o32.h +1 -0
  253. package/libc/include/powerpc-linux-any/asm/unistd_32.h +1 -0
  254. package/libc/include/powerpc-linux-any/asm/unistd_64.h +1 -0
  255. package/libc/include/riscv-linux-any/asm/hwprobe.h +4 -0
  256. package/libc/include/riscv-linux-any/asm/kvm.h +3 -0
  257. package/libc/include/riscv-linux-any/asm/ptrace.h +37 -0
  258. package/libc/include/riscv-linux-any/asm/sigcontext.h +1 -0
  259. package/libc/include/riscv-linux-any/asm/unistd_32.h +1 -0
  260. package/libc/include/riscv-linux-any/asm/unistd_64.h +1 -0
  261. package/libc/include/s390x-linux-any/asm/unistd_64.h +1 -0
  262. package/libc/include/sparc-linux-any/asm/errno.h +2 -0
  263. package/libc/include/sparc-linux-any/asm/ioctls.h +4 -4
  264. package/libc/include/sparc-linux-any/asm/unistd_32.h +2 -0
  265. package/libc/include/sparc-linux-any/asm/unistd_64.h +2 -0
  266. package/libc/include/x86-linux-any/asm/auxvec.h +0 -4
  267. package/libc/include/x86-linux-any/asm/kvm.h +13 -8
  268. package/libc/include/x86-linux-any/asm/svm.h +16 -16
  269. package/libc/include/x86-linux-any/asm/unistd_32.h +1 -0
  270. package/libc/include/x86-linux-any/asm/unistd_64.h +1 -0
  271. package/libc/include/x86-linux-any/asm/unistd_x32.h +1 -0
  272. package/libc/include/xtensa-linux-any/asm/unistd_32.h +1 -0
  273. package/libc/musl/arch/mipsn32/syscall_arch.h +35 -32
  274. package/libcxx/include/__algorithm/all_of.h +11 -5
  275. package/libcxx/include/__algorithm/comp.h +4 -0
  276. package/libcxx/include/__algorithm/copy.h +28 -147
  277. package/libcxx/include/__algorithm/copy_backward.h +9 -24
  278. package/libcxx/include/__algorithm/copy_n.h +50 -16
  279. package/libcxx/include/__algorithm/count.h +2 -2
  280. package/libcxx/include/__algorithm/equal.h +43 -55
  281. package/libcxx/include/__algorithm/fill.h +26 -8
  282. package/libcxx/include/__algorithm/fill_n.h +32 -46
  283. package/libcxx/include/__algorithm/find.h +96 -39
  284. package/libcxx/include/__algorithm/find_end.h +105 -0
  285. package/libcxx/include/__algorithm/for_each.h +18 -24
  286. package/libcxx/include/__algorithm/for_each_n.h +20 -47
  287. package/libcxx/include/__algorithm/for_each_n_segment.h +1 -1
  288. package/libcxx/include/__algorithm/for_each_segment.h +26 -0
  289. package/libcxx/include/__algorithm/generate.h +4 -2
  290. package/libcxx/include/__algorithm/generate_n.h +19 -6
  291. package/libcxx/include/__algorithm/is_permutation.h +4 -4
  292. package/libcxx/include/__algorithm/iterator_operations.h +3 -0
  293. package/libcxx/include/__algorithm/lexicographical_compare.h +2 -2
  294. package/libcxx/include/__algorithm/lexicographical_compare_three_way.h +6 -6
  295. package/libcxx/include/__algorithm/make_heap.h +16 -4
  296. package/libcxx/include/__algorithm/mismatch.h +2 -2
  297. package/libcxx/include/__algorithm/move.h +8 -19
  298. package/libcxx/include/__algorithm/move_backward.h +9 -24
  299. package/libcxx/include/__algorithm/none_of.h +4 -4
  300. package/libcxx/include/__algorithm/partial_sort.h +1 -1
  301. package/libcxx/include/__algorithm/partial_sort_copy.h +1 -1
  302. package/libcxx/include/__algorithm/pstl.h +9 -9
  303. package/libcxx/include/__algorithm/radix_sort.h +27 -25
  304. package/libcxx/include/__algorithm/ranges_copy_n.h +3 -26
  305. package/libcxx/include/__algorithm/ranges_equal.h +17 -26
  306. package/libcxx/include/__algorithm/ranges_fill.h +7 -6
  307. package/libcxx/include/__algorithm/ranges_for_each.h +9 -1
  308. package/libcxx/include/__algorithm/ranges_generate_n.h +2 -6
  309. package/libcxx/include/__algorithm/ranges_search_n.h +2 -2
  310. package/libcxx/include/__algorithm/rotate.h +27 -44
  311. package/libcxx/include/__algorithm/search_n.h +49 -37
  312. package/libcxx/include/__algorithm/sift_down.h +19 -18
  313. package/libcxx/include/__algorithm/simd_utils.h +33 -4
  314. package/libcxx/include/__algorithm/specialized_algorithms.h +54 -0
  315. package/libcxx/include/__algorithm/stable_sort.h +1 -1
  316. package/libcxx/include/__assertion_handler +31 -4
  317. package/libcxx/include/__atomic/atomic.h +36 -60
  318. package/libcxx/include/__atomic/atomic_flag.h +19 -37
  319. package/libcxx/include/__atomic/atomic_ref.h +29 -12
  320. package/libcxx/include/__atomic/atomic_sync.h +127 -55
  321. package/libcxx/include/__atomic/atomic_sync_timed.h +144 -0
  322. package/libcxx/include/__atomic/atomic_waitable_traits.h +103 -0
  323. package/libcxx/include/__atomic/contention_t.h +27 -3
  324. package/libcxx/include/__atomic/floating_point_helper.h +55 -0
  325. package/libcxx/include/__bit/countl.h +1 -2
  326. package/libcxx/include/__bit/countr.h +1 -2
  327. package/libcxx/include/__bit/has_single_bit.h +1 -1
  328. package/libcxx/include/__bit/popcount.h +0 -1
  329. package/libcxx/include/__bit/rotate.h +15 -26
  330. package/libcxx/include/__bit_reference +207 -18
  331. package/libcxx/include/__charconv/from_chars_integral.h +1 -1
  332. package/libcxx/include/__charconv/from_chars_result.h +1 -1
  333. package/libcxx/include/__charconv/to_chars_integral.h +1 -0
  334. package/libcxx/include/__charconv/to_chars_result.h +1 -1
  335. package/libcxx/include/__charconv/traits.h +3 -24
  336. package/libcxx/include/__chrono/day.h +11 -0
  337. package/libcxx/include/__chrono/duration.h +58 -33
  338. package/libcxx/include/__chrono/file_clock.h +4 -2
  339. package/libcxx/include/__chrono/is_clock.h +72 -0
  340. package/libcxx/include/__chrono/leap_second.h +13 -0
  341. package/libcxx/include/__chrono/month.h +13 -0
  342. package/libcxx/include/__chrono/month_weekday.h +22 -0
  343. package/libcxx/include/__chrono/monthday.h +20 -0
  344. package/libcxx/include/__chrono/steady_clock.h +1 -1
  345. package/libcxx/include/__chrono/system_clock.h +3 -3
  346. package/libcxx/include/__chrono/time_point.h +37 -13
  347. package/libcxx/include/__chrono/weekday.h +25 -0
  348. package/libcxx/include/__chrono/year.h +11 -0
  349. package/libcxx/include/__chrono/year_month.h +13 -0
  350. package/libcxx/include/__chrono/year_month_day.h +23 -0
  351. package/libcxx/include/__chrono/year_month_weekday.h +26 -0
  352. package/libcxx/include/__chrono/zoned_time.h +16 -0
  353. package/libcxx/include/__compare/is_eq.h +6 -6
  354. package/libcxx/include/__compare/strong_order.h +12 -30
  355. package/libcxx/include/__compare/three_way_comparable.h +2 -2
  356. package/libcxx/include/__concepts/comparison_common_type.h +40 -0
  357. package/libcxx/include/__concepts/equality_comparable.h +2 -1
  358. package/libcxx/include/__condition_variable/condition_variable.h +1 -1
  359. package/libcxx/include/__config +63 -280
  360. package/libcxx/include/__configuration/abi.h +14 -24
  361. package/libcxx/include/__configuration/availability.h +65 -118
  362. package/libcxx/include/__configuration/compiler.h +6 -6
  363. package/libcxx/include/__configuration/experimental.h +38 -0
  364. package/libcxx/include/__configuration/hardening.h +215 -0
  365. package/libcxx/include/__configuration/language.h +3 -0
  366. package/libcxx/include/__configuration/platform.h +9 -16
  367. package/libcxx/include/__coroutine/coroutine_handle.h +9 -9
  368. package/libcxx/include/__coroutine/noop_coroutine_handle.h +11 -13
  369. package/libcxx/include/__debug_utils/strict_weak_ordering_check.h +1 -1
  370. package/libcxx/include/__exception/exception.h +6 -4
  371. package/libcxx/include/__exception/exception_ptr.h +27 -5
  372. package/libcxx/include/__exception/nested_exception.h +2 -2
  373. package/libcxx/include/__exception/operations.h +5 -5
  374. package/libcxx/include/__expected/bad_expected_access.h +8 -6
  375. package/libcxx/include/__expected/expected.h +62 -64
  376. package/libcxx/include/__expected/unexpected.h +4 -4
  377. package/libcxx/include/__filesystem/copy_options.h +4 -4
  378. package/libcxx/include/__filesystem/directory_entry.h +37 -33
  379. package/libcxx/include/__filesystem/directory_iterator.h +9 -11
  380. package/libcxx/include/__filesystem/directory_options.h +7 -4
  381. package/libcxx/include/__filesystem/file_status.h +3 -3
  382. package/libcxx/include/__filesystem/filesystem_error.h +9 -10
  383. package/libcxx/include/__filesystem/operations.h +97 -66
  384. package/libcxx/include/__filesystem/path.h +68 -64
  385. package/libcxx/include/__filesystem/path_iterator.h +1 -3
  386. package/libcxx/include/__filesystem/perm_options.h +4 -4
  387. package/libcxx/include/__filesystem/perms.h +4 -4
  388. package/libcxx/include/__filesystem/recursive_directory_iterator.h +9 -14
  389. package/libcxx/include/__filesystem/space_info.h +1 -1
  390. package/libcxx/include/__filesystem/u8path.h +12 -14
  391. package/libcxx/include/__flat_map/flat_map.h +88 -71
  392. package/libcxx/include/__flat_map/flat_multimap.h +251 -172
  393. package/libcxx/include/__flat_map/key_value_iterator.h +0 -1
  394. package/libcxx/include/__flat_map/utils.h +1 -0
  395. package/libcxx/include/__flat_set/flat_multiset.h +211 -143
  396. package/libcxx/include/__flat_set/flat_set.h +86 -68
  397. package/libcxx/include/__format/concepts.h +0 -14
  398. package/libcxx/include/__format/extended_grapheme_cluster_table.h +3 -2
  399. package/libcxx/include/__format/fmt_pair_like.h +42 -0
  400. package/libcxx/include/__format/format_arg.h +7 -10
  401. package/libcxx/include/__format/format_args.h +1 -1
  402. package/libcxx/include/__format/format_context.h +5 -5
  403. package/libcxx/include/__format/format_parse_context.h +2 -2
  404. package/libcxx/include/__format/formatter_output.h +30 -34
  405. package/libcxx/include/__format/indic_conjunct_break_table.h +3 -2
  406. package/libcxx/include/__format/range_default_formatter.h +2 -41
  407. package/libcxx/include/__format/range_format.h +71 -0
  408. package/libcxx/include/__format/range_formatter.h +1 -0
  409. package/libcxx/include/__format/width_estimation_table.h +4 -2
  410. package/libcxx/include/__functional/bind.h +10 -15
  411. package/libcxx/include/__functional/bind_back.h +1 -1
  412. package/libcxx/include/__functional/bind_front.h +1 -1
  413. package/libcxx/include/__functional/function.h +57 -75
  414. package/libcxx/include/__functional/hash.h +1 -10
  415. package/libcxx/include/__functional/identity.h +1 -1
  416. package/libcxx/include/__functional/is_transparent.h +8 -0
  417. package/libcxx/include/__functional/mem_fn.h +2 -1
  418. package/libcxx/include/__functional/operations.h +18 -0
  419. package/libcxx/include/__functional/ranges_operations.h +7 -0
  420. package/libcxx/include/__functional/reference_wrapper.h +7 -5
  421. package/libcxx/include/__functional/weak_result_type.h +14 -28
  422. package/libcxx/include/__fwd/ios.h +1 -1
  423. package/libcxx/include/__fwd/tuple.h +14 -0
  424. package/libcxx/include/__hash_table +371 -357
  425. package/libcxx/include/__ios/fpos.h +4 -4
  426. package/libcxx/include/__iterator/back_insert_iterator.h +1 -7
  427. package/libcxx/include/__iterator/bounded_iter.h +7 -8
  428. package/libcxx/include/__iterator/concepts.h +6 -9
  429. package/libcxx/include/__iterator/cpp17_iterator_concepts.h +13 -12
  430. package/libcxx/include/__iterator/distance.h +40 -18
  431. package/libcxx/include/__iterator/front_insert_iterator.h +1 -7
  432. package/libcxx/include/__iterator/insert_iterator.h +1 -7
  433. package/libcxx/include/__iterator/istream_iterator.h +6 -7
  434. package/libcxx/include/__iterator/istreambuf_iterator.h +6 -7
  435. package/libcxx/include/__iterator/iter_move.h +1 -1
  436. package/libcxx/include/__iterator/iterator.h +13 -0
  437. package/libcxx/include/__iterator/iterator_traits.h +13 -14
  438. package/libcxx/include/__iterator/ostream_iterator.h +1 -7
  439. package/libcxx/include/__iterator/ostreambuf_iterator.h +1 -7
  440. package/libcxx/include/__iterator/reverse_iterator.h +8 -13
  441. package/libcxx/include/__iterator/segmented_iterator.h +3 -8
  442. package/libcxx/include/__iterator/static_bounded_iter.h +3 -3
  443. package/libcxx/include/__iterator/wrap_iter.h +8 -6
  444. package/libcxx/include/__locale +3 -10
  445. package/libcxx/include/__locale_dir/locale_base_api/bsd_locale_fallbacks.h +0 -10
  446. package/libcxx/include/__locale_dir/locale_base_api.h +5 -28
  447. package/libcxx/include/__locale_dir/messages.h +1 -1
  448. package/libcxx/include/__locale_dir/money.h +2 -2
  449. package/libcxx/include/__locale_dir/num.h +190 -243
  450. package/libcxx/include/__locale_dir/pad_and_output.h +5 -6
  451. package/libcxx/include/__locale_dir/support/bsd_like.h +0 -20
  452. package/libcxx/include/__locale_dir/support/fuchsia.h +0 -7
  453. package/libcxx/include/__locale_dir/support/linux.h +0 -37
  454. package/libcxx/include/__locale_dir/support/netbsd.h +0 -2
  455. package/libcxx/include/__locale_dir/support/newlib.h +243 -0
  456. package/libcxx/include/__locale_dir/support/no_locale/characters.h +0 -4
  457. package/libcxx/include/__locale_dir/support/no_locale/strtonum.h +0 -9
  458. package/libcxx/include/__locale_dir/support/windows.h +0 -29
  459. package/libcxx/include/__locale_dir/time.h +3 -7
  460. package/libcxx/include/__math/hypot.h +1 -1
  461. package/libcxx/include/__math/logarithms.h +1 -1
  462. package/libcxx/include/__math/traits.h +80 -11
  463. package/libcxx/include/__mdspan/extents.h +7 -4
  464. package/libcxx/include/__mdspan/layout_stride.h +4 -5
  465. package/libcxx/include/__mdspan/mdspan.h +29 -23
  466. package/libcxx/include/__memory/addressof.h +7 -5
  467. package/libcxx/include/__memory/align.h +18 -1
  468. package/libcxx/include/__memory/allocate_at_least.h +15 -10
  469. package/libcxx/include/__memory/allocator.h +14 -26
  470. package/libcxx/include/__memory/allocator_traits.h +6 -4
  471. package/libcxx/include/__memory/compressed_pair.h +15 -9
  472. package/libcxx/include/__memory/construct_at.h +12 -23
  473. package/libcxx/include/__memory/inout_ptr.h +1 -1
  474. package/libcxx/include/__memory/is_sufficiently_aligned.h +1 -1
  475. package/libcxx/include/__memory/out_ptr.h +1 -1
  476. package/libcxx/include/__memory/pointer_traits.h +1 -1
  477. package/libcxx/include/__memory/raw_storage_iterator.h +3 -9
  478. package/libcxx/include/__memory/shared_count.h +9 -30
  479. package/libcxx/include/__memory/shared_ptr.h +100 -145
  480. package/libcxx/include/__memory/temp_value.h +1 -2
  481. package/libcxx/include/__memory/uninitialized_algorithms.h +44 -115
  482. package/libcxx/include/__memory/unique_ptr.h +14 -16
  483. package/libcxx/include/__memory/uses_allocator_construction.h +1 -0
  484. package/libcxx/include/__memory_resource/memory_resource.h +4 -2
  485. package/libcxx/include/__memory_resource/monotonic_buffer_resource.h +1 -1
  486. package/libcxx/include/__memory_resource/polymorphic_allocator.h +13 -8
  487. package/libcxx/include/__memory_resource/pool_options.h +1 -1
  488. package/libcxx/include/__memory_resource/synchronized_pool_resource.h +4 -2
  489. package/libcxx/include/__memory_resource/unsynchronized_pool_resource.h +1 -1
  490. package/libcxx/include/__mutex/mutex.h +2 -2
  491. package/libcxx/include/__mutex/once_flag.h +14 -11
  492. package/libcxx/include/__mutex/tag_types.h +3 -3
  493. package/libcxx/include/__mutex/unique_lock.h +8 -7
  494. package/libcxx/include/__new/align_val_t.h +6 -0
  495. package/libcxx/include/__new/allocate.h +1 -2
  496. package/libcxx/include/__new/exceptions.h +8 -2
  497. package/libcxx/include/__new/global_new_delete.h +4 -11
  498. package/libcxx/include/__new/interference_size.h +0 -4
  499. package/libcxx/include/__new/launder.h +3 -5
  500. package/libcxx/include/__new/nothrow_t.h +1 -1
  501. package/libcxx/include/__numeric/gcd_lcm.h +24 -34
  502. package/libcxx/include/__numeric/midpoint.h +9 -14
  503. package/libcxx/include/__numeric/pstl.h +2 -2
  504. package/libcxx/include/__numeric/saturation_arithmetic.h +13 -5
  505. package/libcxx/include/__ostream/basic_ostream.h +8 -8
  506. package/libcxx/include/__pstl/backends/default.h +14 -14
  507. package/libcxx/include/__pstl/backends/libdispatch.h +2 -2
  508. package/libcxx/include/__pstl/cpu_algos/find_if.h +1 -1
  509. package/libcxx/include/__pstl/cpu_algos/transform.h +5 -6
  510. package/libcxx/include/__pstl/cpu_algos/transform_reduce.h +5 -4
  511. package/libcxx/include/__random/binomial_distribution.h +10 -4
  512. package/libcxx/include/__random/mersenne_twister_engine.h +50 -154
  513. package/libcxx/include/__random/piecewise_constant_distribution.h +3 -2
  514. package/libcxx/include/__random/piecewise_linear_distribution.h +3 -2
  515. package/libcxx/include/__ranges/adjacent_transform_view.h +406 -0
  516. package/libcxx/include/__ranges/adjacent_view.h +419 -0
  517. package/libcxx/include/__ranges/as_rvalue_view.h +9 -9
  518. package/libcxx/include/__ranges/chunk_by_view.h +6 -6
  519. package/libcxx/include/__ranges/common_view.h +7 -7
  520. package/libcxx/include/__ranges/drop_view.h +8 -8
  521. package/libcxx/include/__ranges/drop_while_view.h +5 -5
  522. package/libcxx/include/__ranges/elements_of.h +49 -0
  523. package/libcxx/include/__ranges/empty_view.h +5 -5
  524. package/libcxx/include/__ranges/filter_view.h +10 -10
  525. package/libcxx/include/__ranges/iota_view.h +41 -22
  526. package/libcxx/include/__ranges/owning_view.h +15 -15
  527. package/libcxx/include/__ranges/ref_view.h +6 -6
  528. package/libcxx/include/__ranges/repeat_view.h +17 -10
  529. package/libcxx/include/__ranges/single_view.h +8 -8
  530. package/libcxx/include/__ranges/take_view.h +9 -9
  531. package/libcxx/include/__ranges/transform_view.h +1 -2
  532. package/libcxx/include/__ranges/view_interface.h +10 -10
  533. package/libcxx/include/__ranges/zip_transform_view.h +357 -0
  534. package/libcxx/include/__ranges/zip_view.h +20 -20
  535. package/libcxx/include/__split_buffer +612 -240
  536. package/libcxx/include/__stop_token/atomic_unique_lock.h +1 -1
  537. package/libcxx/include/__stop_token/stop_callback.h +2 -2
  538. package/libcxx/include/__stop_token/stop_source.h +1 -1
  539. package/libcxx/include/__stop_token/stop_state.h +4 -4
  540. package/libcxx/include/__stop_token/stop_token.h +1 -1
  541. package/libcxx/include/__string/char_traits.h +51 -31
  542. package/libcxx/include/__string/constexpr_c_functions.h +5 -5
  543. package/libcxx/include/__support/xlocale/__strtonum_fallback.h +0 -8
  544. package/libcxx/include/__system_error/error_category.h +8 -8
  545. package/libcxx/include/__system_error/error_code.h +5 -5
  546. package/libcxx/include/__system_error/error_condition.h +4 -4
  547. package/libcxx/include/__system_error/system_error.h +1 -1
  548. package/libcxx/include/__thread/id.h +1 -1
  549. package/libcxx/include/__thread/jthread.h +1 -1
  550. package/libcxx/include/__thread/poll_with_backoff.h +27 -8
  551. package/libcxx/include/__thread/support/c11.h +8 -8
  552. package/libcxx/include/__thread/support/pthread.h +8 -8
  553. package/libcxx/include/__thread/support/windows.h +8 -8
  554. package/libcxx/include/__thread/thread.h +13 -8
  555. package/libcxx/include/__thread/timed_backoff_policy.h +3 -2
  556. package/libcxx/include/__tree +849 -701
  557. package/libcxx/include/__tuple/sfinae_helpers.h +1 -44
  558. package/libcxx/include/__tuple/tuple_element.h +0 -12
  559. package/libcxx/include/__tuple/tuple_size.h +0 -4
  560. package/libcxx/include/__tuple/tuple_transform.h +45 -0
  561. package/libcxx/include/__type_traits/aligned_storage.h +13 -40
  562. package/libcxx/include/__type_traits/desugars_to.h +4 -0
  563. package/libcxx/include/__type_traits/invoke.h +8 -0
  564. package/libcxx/include/__type_traits/is_allocator.h +6 -7
  565. package/libcxx/include/__type_traits/is_array.h +26 -0
  566. package/libcxx/include/__type_traits/is_equality_comparable.h +16 -21
  567. package/libcxx/include/__type_traits/is_final.h +1 -1
  568. package/libcxx/include/__type_traits/is_floating_point.h +7 -6
  569. package/libcxx/include/__type_traits/is_generic_transparent_comparator.h +30 -0
  570. package/libcxx/include/__type_traits/is_specialization.h +2 -6
  571. package/libcxx/include/__type_traits/is_within_lifetime.h +29 -0
  572. package/libcxx/include/__type_traits/make_transparent.h +52 -0
  573. package/libcxx/include/__type_traits/reference_constructs_from_temporary.h +1 -7
  574. package/libcxx/include/__type_traits/reference_converts_from_temporary.h +1 -1
  575. package/libcxx/include/__utility/cmp.h +19 -7
  576. package/libcxx/include/__utility/default_three_way_comparator.h +70 -0
  577. package/libcxx/include/__utility/in_place.h +1 -1
  578. package/libcxx/include/__utility/integer_sequence.h +56 -41
  579. package/libcxx/include/__utility/lazy_synth_three_way_comparator.h +120 -0
  580. package/libcxx/include/__utility/pair.h +22 -25
  581. package/libcxx/include/__utility/scope_guard.h +2 -0
  582. package/libcxx/include/__utility/try_key_extraction.h +114 -0
  583. package/libcxx/include/__vector/vector.h +187 -160
  584. package/libcxx/include/__vector/vector_bool.h +76 -83
  585. package/libcxx/include/any +118 -155
  586. package/libcxx/include/array +88 -56
  587. package/libcxx/include/atomic +2 -0
  588. package/libcxx/include/barrier +20 -24
  589. package/libcxx/include/bitset +49 -30
  590. package/libcxx/include/ccomplex +3 -11
  591. package/libcxx/include/chrono +47 -0
  592. package/libcxx/include/ciso646 +3 -6
  593. package/libcxx/include/complex +77 -65
  594. package/libcxx/include/complex.h +10 -10
  595. package/libcxx/include/condition_variable +3 -3
  596. package/libcxx/include/cstdalign +3 -10
  597. package/libcxx/include/cstdbool +3 -10
  598. package/libcxx/include/ctgmath +2 -11
  599. package/libcxx/include/ctype.h +24 -24
  600. package/libcxx/include/cwchar +2 -2
  601. package/libcxx/include/deque +109 -225
  602. package/libcxx/include/errno.h +269 -269
  603. package/libcxx/include/exception +4 -1
  604. package/libcxx/include/ext/hash_map +7 -48
  605. package/libcxx/include/ext/hash_set +2 -8
  606. package/libcxx/include/fenv.h +43 -43
  607. package/libcxx/include/flat_map +663 -11
  608. package/libcxx/include/flat_set +543 -8
  609. package/libcxx/include/float.h +16 -16
  610. package/libcxx/include/forward_list +33 -53
  611. package/libcxx/include/fstream +57 -42
  612. package/libcxx/include/future +41 -51
  613. package/libcxx/include/initializer_list +9 -3
  614. package/libcxx/include/inttypes.h +16 -16
  615. package/libcxx/include/ios +28 -28
  616. package/libcxx/include/istream +19 -13
  617. package/libcxx/include/iterator +10 -0
  618. package/libcxx/include/latch +7 -5
  619. package/libcxx/include/limits +4 -4
  620. package/libcxx/include/list +61 -79
  621. package/libcxx/include/map +386 -274
  622. package/libcxx/include/math.h +19 -0
  623. package/libcxx/include/mdspan +1 -5
  624. package/libcxx/include/mutex +29 -19
  625. package/libcxx/include/optional +644 -149
  626. package/libcxx/include/print +9 -5
  627. package/libcxx/include/queue +39 -37
  628. package/libcxx/include/ranges +48 -0
  629. package/libcxx/include/regex +33 -31
  630. package/libcxx/include/scoped_allocator +16 -11
  631. package/libcxx/include/semaphore +15 -18
  632. package/libcxx/include/set +220 -192
  633. package/libcxx/include/shared_mutex +3 -8
  634. package/libcxx/include/span +53 -37
  635. package/libcxx/include/sstream +34 -28
  636. package/libcxx/include/stack +13 -15
  637. package/libcxx/include/stddef.h +10 -10
  638. package/libcxx/include/stdexcept +2 -2
  639. package/libcxx/include/stdio.h +20 -21
  640. package/libcxx/include/streambuf +59 -19
  641. package/libcxx/include/string +574 -573
  642. package/libcxx/include/string_view +113 -89
  643. package/libcxx/include/strstream +10 -10
  644. package/libcxx/include/syncstream +4 -4
  645. package/libcxx/include/tgmath.h +12 -12
  646. package/libcxx/include/tuple +242 -212
  647. package/libcxx/include/type_traits +8 -2
  648. package/libcxx/include/typeindex +5 -3
  649. package/libcxx/include/typeinfo +92 -89
  650. package/libcxx/include/unordered_map +179 -304
  651. package/libcxx/include/unordered_set +168 -195
  652. package/libcxx/include/utility +12 -0
  653. package/libcxx/include/valarray +106 -161
  654. package/libcxx/include/variant +25 -33
  655. package/libcxx/include/version +41 -24
  656. package/libcxx/include/wctype.h +29 -29
  657. package/libcxx/libc/hdr/errno_macros.h +3 -1
  658. package/libcxx/libc/hdr/stdint_proxy.h +18 -0
  659. package/libcxx/libc/hdr/types/wchar_t.h +23 -0
  660. package/libcxx/libc/hdr/wchar_overlay.h +69 -0
  661. package/libcxx/libc/include/llvm-libc-macros/cfloat128-macros.h +41 -0
  662. package/libcxx/libc/include/llvm-libc-macros/cfloat16-macros.h +20 -0
  663. package/libcxx/libc/include/llvm-libc-macros/wchar-macros.h +18 -0
  664. package/libcxx/libc/include/llvm-libc-types/cfloat128.h +11 -28
  665. package/libcxx/libc/include/llvm-libc-types/cfloat16.h +4 -7
  666. package/libcxx/libc/include/llvm-libc-types/wint_t.h +14 -0
  667. package/libcxx/libc/shared/libc_common.h +5 -0
  668. package/libcxx/libc/src/__support/CPP/bit.h +50 -12
  669. package/libcxx/libc/src/__support/CPP/type_traits/is_complex.h +7 -0
  670. package/libcxx/libc/src/__support/CPP/type_traits/is_destructible.h +2 -1
  671. package/libcxx/libc/src/__support/CPP/type_traits/is_unsigned.h +6 -0
  672. package/libcxx/libc/src/__support/CPP/utility/integer_sequence.h +10 -0
  673. package/libcxx/libc/src/__support/FPUtil/FPBits.h +6 -7
  674. package/libcxx/libc/src/__support/FPUtil/rounding_mode.h +50 -4
  675. package/libcxx/libc/src/__support/big_int.h +14 -14
  676. package/libcxx/libc/src/__support/common.h +3 -2
  677. package/libcxx/libc/src/__support/ctype_utils.h +19 -12
  678. package/libcxx/libc/src/__support/detailed_powers_of_ten.h +1 -2
  679. package/libcxx/libc/src/__support/high_precision_decimal.h +33 -14
  680. package/libcxx/libc/src/__support/libc_assert.h +2 -0
  681. package/libcxx/libc/src/__support/macros/attributes.h +44 -1
  682. package/libcxx/libc/src/__support/macros/config.h +23 -0
  683. package/libcxx/libc/src/__support/macros/null_check.h +1 -2
  684. package/libcxx/libc/src/__support/macros/optimization.h +3 -0
  685. package/libcxx/libc/src/__support/macros/properties/architectures.h +5 -1
  686. package/libcxx/libc/src/__support/macros/properties/compiler.h +8 -3
  687. package/libcxx/libc/src/__support/macros/properties/cpu_features.h +17 -1
  688. package/libcxx/libc/src/__support/macros/properties/types.h +2 -3
  689. package/libcxx/libc/src/__support/macros/sanitizer.h +0 -10
  690. package/libcxx/libc/src/__support/math_extras.h +20 -4
  691. package/libcxx/libc/src/__support/str_to_float.h +98 -125
  692. package/libcxx/libc/src/__support/str_to_integer.h +39 -27
  693. package/libcxx/libc/src/__support/wctype_utils.h +588 -0
  694. package/libcxx/src/any.cpp +4 -0
  695. package/libcxx/src/atomic.cpp +365 -80
  696. package/libcxx/src/barrier.cpp +4 -3
  697. package/libcxx/src/charconv.cpp +6 -3
  698. package/libcxx/src/condition_variable_destructor.cpp +1 -1
  699. package/libcxx/src/error_category.cpp +3 -1
  700. package/libcxx/src/exception.cpp +2 -10
  701. package/libcxx/src/experimental/time_zone.cpp +1 -1
  702. package/libcxx/src/experimental/tzdb.cpp +4 -1
  703. package/libcxx/src/filesystem/error.h +4 -22
  704. package/libcxx/src/filesystem/format_string.h +9 -18
  705. package/libcxx/src/filesystem/int128_builtins.cpp +2 -0
  706. package/libcxx/src/filesystem/operations.cpp +2 -9
  707. package/libcxx/src/filesystem/path.cpp +3 -1
  708. package/libcxx/src/include/aligned_alloc.h +65 -0
  709. package/libcxx/src/include/config_elast.h +1 -1
  710. package/libcxx/src/include/from_chars_floating_point.h +11 -7
  711. package/libcxx/src/include/overridable_function.h +8 -10
  712. package/libcxx/src/iostream.cpp +56 -37
  713. package/libcxx/src/locale.cpp +213 -196
  714. package/libcxx/src/memory.cpp +12 -14
  715. package/libcxx/src/mutex_destructor.cpp +1 -1
  716. package/libcxx/src/new.cpp +5 -5
  717. package/libcxx/src/optional.cpp +4 -0
  718. package/libcxx/src/print.cpp +9 -1
  719. package/libcxx/src/random.cpp +0 -26
  720. package/libcxx/src/string.cpp +10 -25
  721. package/libcxx/src/support/runtime/exception_fallback.ipp +2 -0
  722. package/libcxx/src/support/runtime/exception_glibcxx.ipp +3 -0
  723. package/libcxx/src/support/runtime/exception_libcxxabi.ipp +6 -2
  724. package/libcxx/src/support/runtime/exception_libcxxrt.ipp +2 -0
  725. package/libcxx/src/support/runtime/exception_msvc.ipp +2 -0
  726. package/libcxx/src/support/runtime/exception_pointer_cxxabi.ipp +9 -10
  727. package/libcxx/src/support/runtime/exception_pointer_glibcxx.ipp +2 -0
  728. package/libcxx/src/support/runtime/exception_pointer_msvc.ipp +1 -0
  729. package/libcxx/src/support/runtime/exception_pointer_unimplemented.ipp +1 -0
  730. package/libcxx/src/support/win32/locale_win32.cpp +1 -1
  731. package/libcxx/src/system_error.cpp +2 -0
  732. package/libcxx/src/thread.cpp +1 -3
  733. package/libcxx/src/valarray.cpp +1 -2
  734. package/libcxx/src/vector.cpp +2 -2
  735. package/libcxxabi/include/__cxxabi_config.h +42 -23
  736. package/libcxxabi/src/cxa_exception.cpp +4 -2
  737. package/libcxxabi/src/cxa_exception.h +16 -14
  738. package/libcxxabi/src/cxa_personality.cpp +126 -9
  739. package/libcxxabi/src/cxa_thread_atexit.cpp +2 -1
  740. package/libcxxabi/src/demangle/DemangleConfig.h +4 -0
  741. package/libcxxabi/src/demangle/ItaniumDemangle.h +9 -6
  742. package/libcxxabi/src/demangle/Utility.h +21 -7
  743. package/libcxxabi/src/fallback_malloc.cpp +1 -1
  744. package/libcxxabi/src/private_typeinfo.cpp +6 -0
  745. package/libcxxabi/src/stdlib_new_delete.cpp +5 -5
  746. package/libtsan/LICENSE.TXT +311 -0
  747. package/libtsan/builtins/assembly.h +41 -8
  748. package/libtsan/interception/interception_win.cpp +4 -0
  749. package/libtsan/sanitizer_common/sanitizer_allocator_primary32.h +1 -0
  750. package/libtsan/sanitizer_common/sanitizer_allocator_primary64.h +18 -0
  751. package/libtsan/sanitizer_common/sanitizer_common.h +15 -2
  752. package/libtsan/sanitizer_common/sanitizer_common_interceptors.inc +30 -4
  753. package/libtsan/sanitizer_common/sanitizer_common_interceptors_ioctl.inc +4 -0
  754. package/libtsan/sanitizer_common/sanitizer_common_interceptors_vfork_aarch64.inc.S +2 -1
  755. package/libtsan/sanitizer_common/sanitizer_common_interceptors_vfork_i386.inc.S +2 -0
  756. package/libtsan/sanitizer_common/sanitizer_common_interceptors_vfork_x86_64.inc.S +2 -0
  757. package/libtsan/sanitizer_common/sanitizer_common_syscalls.inc +18 -0
  758. package/libtsan/sanitizer_common/sanitizer_file.cpp +40 -12
  759. package/libtsan/sanitizer_common/sanitizer_file.h +3 -0
  760. package/libtsan/sanitizer_common/sanitizer_flags.inc +7 -0
  761. package/libtsan/sanitizer_common/sanitizer_fuchsia.cpp +30 -3
  762. package/libtsan/sanitizer_common/sanitizer_haiku.cpp +2 -2
  763. package/libtsan/sanitizer_common/sanitizer_internal_defs.h +1 -1
  764. package/libtsan/sanitizer_common/sanitizer_libc.cpp +8 -0
  765. package/libtsan/sanitizer_common/sanitizer_libc.h +1 -0
  766. package/libtsan/sanitizer_common/sanitizer_linux.cpp +15 -7
  767. package/libtsan/sanitizer_common/sanitizer_linux.h +3 -3
  768. package/libtsan/sanitizer_common/sanitizer_linux_libcdep.cpp +1 -0
  769. package/libtsan/sanitizer_common/sanitizer_mac.cpp +255 -104
  770. package/libtsan/sanitizer_common/sanitizer_mac.h +5 -0
  771. package/libtsan/sanitizer_common/sanitizer_netbsd.cpp +2 -2
  772. package/libtsan/sanitizer_common/sanitizer_platform.h +27 -1
  773. package/libtsan/sanitizer_common/sanitizer_platform_interceptors.h +5 -4
  774. package/libtsan/sanitizer_common/sanitizer_platform_limits_posix.cpp +15 -17
  775. package/libtsan/sanitizer_common/sanitizer_platform_limits_posix.h +32 -6
  776. package/libtsan/sanitizer_common/sanitizer_posix.cpp +3 -12
  777. package/libtsan/sanitizer_common/sanitizer_posix.h +2 -1
  778. package/libtsan/sanitizer_common/sanitizer_posix_libcdep.cpp +19 -0
  779. package/libtsan/sanitizer_common/sanitizer_procmaps_mac.cpp +102 -37
  780. package/libtsan/sanitizer_common/sanitizer_redefine_builtins.h +1 -1
  781. package/libtsan/sanitizer_common/sanitizer_signal_interceptors.inc +40 -2
  782. package/libtsan/sanitizer_common/sanitizer_stoptheworld.h +1 -1
  783. package/libtsan/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp +83 -12
  784. package/libtsan/sanitizer_common/sanitizer_stoptheworld_mac.cpp +3 -3
  785. package/libtsan/sanitizer_common/sanitizer_stoptheworld_netbsd_libcdep.cpp +7 -7
  786. package/libtsan/sanitizer_common/sanitizer_stoptheworld_win.cpp +2 -2
  787. package/libtsan/sanitizer_common/sanitizer_symbolizer_internal.h +5 -1
  788. package/libtsan/sanitizer_common/sanitizer_symbolizer_libcdep.cpp +11 -1
  789. package/libtsan/sanitizer_common/sanitizer_symbolizer_mac.cpp +86 -29
  790. package/libtsan/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cpp +27 -16
  791. package/libtsan/sanitizer_common/sanitizer_thread_registry.cpp +5 -4
  792. package/libtsan/sanitizer_common/sanitizer_thread_registry.h +4 -4
  793. package/libtsan/sanitizer_common/sanitizer_win.cpp +1 -3
  794. package/libtsan/tsan_debugging.cpp +2 -2
  795. package/libtsan/tsan_flags.cpp +37 -0
  796. package/libtsan/tsan_flags.h +8 -0
  797. package/libtsan/tsan_flags.inc +12 -0
  798. package/libtsan/tsan_interceptors.h +9 -1
  799. package/libtsan/tsan_interceptors_mac.cpp +19 -0
  800. package/libtsan/tsan_interceptors_posix.cpp +78 -32
  801. package/libtsan/tsan_interface.h +3 -3
  802. package/libtsan/tsan_interface_ann.cpp +23 -9
  803. package/libtsan/tsan_mman.cpp +18 -4
  804. package/libtsan/tsan_platform.h +44 -7
  805. package/libtsan/tsan_platform_linux.cpp +42 -14
  806. package/libtsan/tsan_platform_mac.cpp +16 -3
  807. package/libtsan/tsan_report.h +14 -1
  808. package/libtsan/tsan_rtl.cpp +14 -0
  809. package/libtsan/tsan_rtl.h +7 -2
  810. package/libtsan/tsan_rtl_aarch64.S +3 -5
  811. package/libtsan/tsan_rtl_access.cpp +8 -3
  812. package/libtsan/tsan_rtl_amd64.S +2 -0
  813. package/libtsan/tsan_rtl_mutex.cpp +94 -49
  814. package/libtsan/tsan_rtl_report.cpp +132 -65
  815. package/libtsan/tsan_rtl_thread.cpp +31 -9
  816. package/libtsan/tsan_symbolize.cpp +1 -1
  817. package/libtsan/tsan_symbolize.h +1 -1
  818. package/libtsan/tsan_trace.h +1 -1
  819. package/libunwind/include/__libunwind_config.h +11 -2
  820. package/libunwind/include/libunwind.h +117 -11
  821. package/libunwind/include/unwind_arm_ehabi.h +4 -1
  822. package/libunwind/src/AddressSpace.hpp +42 -20
  823. package/libunwind/src/CompactUnwinder.hpp +16 -5
  824. package/libunwind/src/DwarfInstructions.hpp +24 -13
  825. package/libunwind/src/DwarfParser.hpp +62 -23
  826. package/libunwind/src/EHHeaderParser.hpp +7 -4
  827. package/libunwind/src/Registers.hpp +226 -22
  828. package/libunwind/src/Unwind-seh.cpp +6 -7
  829. package/libunwind/src/Unwind-wasm.c +7 -7
  830. package/libunwind/src/UnwindCursor.hpp +167 -49
  831. package/libunwind/src/UnwindLevel1.c +46 -17
  832. package/libunwind/src/UnwindRegistersRestore.S +46 -5
  833. package/libunwind/src/UnwindRegistersSave.S +86 -2
  834. package/libunwind/src/assembly.h +5 -1
  835. package/libunwind/src/config.h +9 -0
  836. package/libunwind/src/gcc_personality_v0.c +79 -6
  837. package/libunwind/src/libunwind.cpp +104 -4
  838. package/libunwind/src/libunwind_ext.h +7 -1
  839. package/libunwind/src/shadow_stack_unwind.h +2 -2
  840. package/lldb/pretty_printers.py +948 -0
  841. package/package.json +1 -1
  842. package/std/Build/Cache/Path.zig +1 -1
  843. package/std/Build/Cache.zig +6 -6
  844. package/std/Build/Step/Compile.zig +18 -20
  845. package/std/Build/Step/ConfigHeader.zig +1 -1
  846. package/std/Build/Step/Run.zig +15 -8
  847. package/std/Build/Step.zig +3 -7
  848. package/std/Build/Watch/FsEvents.zig +1 -1
  849. package/std/Build/WebServer.zig +2 -2
  850. package/std/Build/abi.zig +1 -1
  851. package/std/Build.zig +0 -3
  852. package/std/Io/Dir.zig +9 -4
  853. package/std/Io/Dispatch.zig +8 -18
  854. package/std/Io/File/Writer.zig +8 -6
  855. package/std/Io/File.zig +0 -9
  856. package/std/Io/Kqueue.zig +3 -3
  857. package/std/Io/Reader.zig +8 -14
  858. package/std/Io/Semaphore.zig +112 -17
  859. package/std/Io/Terminal.zig +1 -1
  860. package/std/Io/Threaded.zig +183 -46
  861. package/std/Io/Uring.zig +18 -20
  862. package/std/Io/Writer.zig +10 -7
  863. package/std/Io/net/HostName.zig +11 -6
  864. package/std/Io/net.zig +11 -11
  865. package/std/Io.zig +104 -38
  866. package/std/Random/ChaCha.zig +2 -2
  867. package/std/Random/benchmark.zig +2 -2
  868. package/std/Random.zig +6 -6
  869. package/std/SemanticVersion.zig +1 -1
  870. package/std/Target/Query.zig +2 -2
  871. package/std/Target/aarch64.zig +620 -77
  872. package/std/Target/amdgcn.zig +421 -21
  873. package/std/Target/arm.zig +40 -6
  874. package/std/Target/bpf.zig +6 -0
  875. package/std/Target/hexagon.zig +41 -6
  876. package/std/Target/loongarch.zig +18 -0
  877. package/std/Target/mips.zig +6 -0
  878. package/std/Target/nvptx.zig +58 -35
  879. package/std/Target/powerpc.zig +27 -19
  880. package/std/Target/riscv.zig +415 -177
  881. package/std/Target/sparc.zig +17 -0
  882. package/std/Target/wasm.zig +7 -0
  883. package/std/Target/x86.zig +200 -31
  884. package/std/Target/xtensa.zig +65 -0
  885. package/std/Target.zig +67 -14
  886. package/std/Thread.zig +5 -2
  887. package/std/array_hash_map.zig +103 -57
  888. package/std/array_list.zig +10 -31
  889. package/std/base64.zig +5 -5
  890. package/std/bit_set.zig +86 -69
  891. package/std/c/haiku.zig +3 -0
  892. package/std/c/serenity.zig +1 -6
  893. package/std/c.zig +123 -32
  894. package/std/compress/flate/Decompress.zig +3 -4
  895. package/std/compress/zstd/Decompress.zig +7 -9
  896. package/std/crypto/25519/curve25519.zig +2 -2
  897. package/std/crypto/25519/edwards25519.zig +3 -3
  898. package/std/crypto/25519/ristretto255.zig +2 -2
  899. package/std/crypto/25519/scalar.zig +6 -6
  900. package/std/crypto/25519/x25519.zig +1 -1
  901. package/std/crypto/Certificate.zig +14 -2
  902. package/std/crypto/Sha1.zig +1 -1
  903. package/std/crypto/aegis.zig +45 -39
  904. package/std/crypto/aes_ccm.zig +22 -22
  905. package/std/crypto/aes_gcm.zig +10 -12
  906. package/std/crypto/aes_ocb.zig +9 -9
  907. package/std/crypto/argon2.zig +15 -15
  908. package/std/crypto/ascon.zig +75 -33
  909. package/std/crypto/bcrypt.zig +20 -10
  910. package/std/crypto/benchmark.zig +7 -7
  911. package/std/crypto/blake2.zig +100 -64
  912. package/std/crypto/cbc_mac.zig +1 -1
  913. package/std/crypto/chacha20.zig +10 -10
  914. package/std/crypto/cmac.zig +3 -3
  915. package/std/crypto/codecs/asn1/Oid.zig +12 -1
  916. package/std/crypto/codecs/asn1/der/Encoder.zig +1 -1
  917. package/std/crypto/codecs/asn1.zig +1 -1
  918. package/std/crypto/codecs/base64_hex_ct.zig +3 -5
  919. package/std/crypto/ecdsa.zig +9 -9
  920. package/std/crypto/ff.zig +4 -5
  921. package/std/crypto/ghash_polyval.zig +4 -4
  922. package/std/crypto/hkdf.zig +1 -1
  923. package/std/crypto/isap.zig +3 -3
  924. package/std/crypto/kangarootwelve.zig +1 -1
  925. package/std/crypto/keccak_p.zig +8 -8
  926. package/std/crypto/md5.zig +1 -1
  927. package/std/crypto/ml_dsa.zig +39 -39
  928. package/std/crypto/ml_kem.zig +12 -34
  929. package/std/crypto/modes.zig +2 -2
  930. package/std/crypto/pbkdf2.zig +1 -1
  931. package/std/crypto/pcurves/common.zig +4 -5
  932. package/std/crypto/pcurves/p256/scalar.zig +3 -3
  933. package/std/crypto/pcurves/p384/scalar.zig +2 -2
  934. package/std/crypto/pcurves/secp256k1/scalar.zig +3 -3
  935. package/std/crypto/pcurves/tests/p256.zig +5 -5
  936. package/std/crypto/pcurves/tests/p384.zig +5 -5
  937. package/std/crypto/pcurves/tests/secp256k1.zig +3 -3
  938. package/std/crypto/salsa20.zig +8 -8
  939. package/std/crypto/sha2.zig +2 -2
  940. package/std/crypto/sha3.zig +2 -2
  941. package/std/crypto/siphash.zig +1 -1
  942. package/std/crypto/timing_safe.zig +10 -9
  943. package/std/crypto/tls/Client.zig +89 -13
  944. package/std/crypto/tls.zig +1 -1
  945. package/std/crypto.zig +4 -3
  946. package/std/debug/Dwarf.zig +15 -12
  947. package/std/debug/Pdb.zig +25 -17
  948. package/std/debug.zig +14 -8
  949. package/std/deque.zig +1 -1
  950. package/std/elf.zig +1 -1
  951. package/std/enums.zig +8 -8
  952. package/std/fmt/parse_float/decimal.zig +1 -1
  953. package/std/fmt/parse_float.zig +1 -1
  954. package/std/fmt.zig +14 -10
  955. package/std/fs/path.zig +7 -5
  956. package/std/hash/Adler32.zig +3 -3
  957. package/std/hash/benchmark.zig +2 -2
  958. package/std/hash/wyhash.zig +2 -2
  959. package/std/hash/xxhash.zig +0 -6
  960. package/std/hash_map.zig +20 -1
  961. package/std/heap/BufferFirstAllocator.zig +165 -0
  962. package/std/heap/debug_allocator.zig +2 -2
  963. package/std/heap/memory_pool.zig +34 -197
  964. package/std/heap.zig +2 -133
  965. package/std/http/Client.zig +21 -24
  966. package/std/http.zig +4 -5
  967. package/std/json/Scanner.zig +2 -2
  968. package/std/json/static.zig +2 -2
  969. package/std/{builtin.zig → lang.zig} +5 -1
  970. package/std/leb128.zig +2 -2
  971. package/std/math/big/int.zig +5 -5
  972. package/std/math/big.zig +4 -4
  973. package/std/math/copysign.zig +1 -1
  974. package/std/math/float.zig +62 -0
  975. package/std/math/frexp.zig +4 -4
  976. package/std/math/ilogb.zig +1 -1
  977. package/std/math/isfinite.zig +1 -1
  978. package/std/math/isinf.zig +1 -1
  979. package/std/math/isnan.zig +1 -2
  980. package/std/math/isnormal.zig +2 -2
  981. package/std/math/iszero.zig +2 -2
  982. package/std/math/ldexp.zig +2 -2
  983. package/std/math/log10.zig +0 -2
  984. package/std/math/modf.zig +1 -2
  985. package/std/math/nextafter.zig +3 -4
  986. package/std/math/pow.zig +1 -1
  987. package/std/math/powi.zig +2 -3
  988. package/std/math/signbit.zig +0 -1
  989. package/std/math.zig +21 -26
  990. package/std/mem/Allocator.zig +0 -6
  991. package/std/mem.zig +31 -31
  992. package/std/meta/trailer_flags.zig +1 -1
  993. package/std/meta.zig +4 -36
  994. package/std/multi_array_list.zig +24 -0
  995. package/std/os/emscripten.zig +7 -6
  996. package/std/os/linux/IoUring.zig +2 -0
  997. package/std/os/linux/aarch64.zig +41 -12
  998. package/std/os/linux/arc.zig +41 -12
  999. package/std/os/linux/arm.zig +41 -12
  1000. package/std/os/linux/bpf.zig +6 -0
  1001. package/std/os/linux/hexagon.zig +33 -11
  1002. package/std/os/linux/ioctl.zig +2 -2
  1003. package/std/os/linux/loongarch32.zig +41 -13
  1004. package/std/os/linux/loongarch64.zig +41 -12
  1005. package/std/os/linux/m68k.zig +41 -13
  1006. package/std/os/linux/mips.zig +67 -36
  1007. package/std/os/linux/mips64.zig +60 -29
  1008. package/std/os/linux/mipsn32.zig +60 -29
  1009. package/std/os/linux/or1k.zig +41 -12
  1010. package/std/os/linux/powerpc.zig +41 -12
  1011. package/std/os/linux/powerpc64.zig +41 -12
  1012. package/std/os/linux/riscv32.zig +41 -12
  1013. package/std/os/linux/riscv64.zig +41 -12
  1014. package/std/os/linux/s390x.zig +44 -7
  1015. package/std/os/linux/sparc64.zig +83 -52
  1016. package/std/os/linux/syscalls.zig +26 -1
  1017. package/std/os/linux/thumb.zig +52 -36
  1018. package/std/os/linux/x32.zig +41 -12
  1019. package/std/os/linux/x86.zig +44 -15
  1020. package/std/os/linux/x86_64.zig +41 -12
  1021. package/std/os/linux.zig +416 -450
  1022. package/std/os/plan9.zig +1 -1
  1023. package/std/os/uefi/hii.zig +1 -1
  1024. package/std/os/uefi/tables/boot_services.zig +9 -8
  1025. package/std/os/uefi/tables/runtime_services.zig +1 -1
  1026. package/std/os/windows.zig +130 -1
  1027. package/std/os.zig +41 -0
  1028. package/std/posix.zig +1 -1
  1029. package/std/process/Environ.zig +1 -1
  1030. package/std/process.zig +5 -4
  1031. package/std/simd.zig +4 -21
  1032. package/std/sort.zig +3 -3
  1033. package/std/start.zig +17 -4
  1034. package/std/std.zig +8 -1
  1035. package/std/tar/Writer.zig +39 -33
  1036. package/std/tar.zig +8 -4
  1037. package/std/testing.zig +2 -2
  1038. package/std/unicode.zig +13 -8
  1039. package/std/zig/Ast/Render.zig +6 -30
  1040. package/std/zig/Ast.zig +12 -37
  1041. package/std/zig/AstGen.zig +175 -332
  1042. package/std/zig/AstRlAnnotate.zig +1 -22
  1043. package/std/zig/AstSmith.zig +5 -11
  1044. package/std/zig/BuiltinFn.zig +0 -32
  1045. package/std/zig/ErrorBundle.zig +6 -2
  1046. package/std/zig/LibCDirs.zig +15 -6
  1047. package/std/zig/LibCInstallation.zig +34 -12
  1048. package/std/zig/Parse.zig +11 -76
  1049. package/std/zig/TokenSmith.zig +0 -6
  1050. package/std/zig/WindowsSdk.zig +18 -18
  1051. package/std/zig/Zir.zig +65 -132
  1052. package/std/zig/ZonGen.zig +19 -27
  1053. package/std/zig/llvm/Builder.zig +39 -33
  1054. package/std/zig/llvm/bitcode_writer.zig +3 -3
  1055. package/std/zig/llvm/ir.zig +8 -8
  1056. package/std/zig/system/arm.zig +56 -2
  1057. package/std/zig/system/windows.zig +34 -1
  1058. package/std/zig/system/x86.zig +60 -16
  1059. package/std/zig/system.zig +0 -10
  1060. package/std/zig/target.zig +1 -4
  1061. package/std/zig/tokenizer.zig +4 -43
  1062. package/std/zig.zig +3 -14
  1063. package/std/zip.zig +5 -5
  1064. package/std/zon/parse.zig +1 -1
  1065. package/zig.h +340 -1
  1066. package/compiler_rt/long_double.zig +0 -37
  1067. package/include/amxbf16transposeintrin.h +0 -94
  1068. package/include/amxcomplextransposeintrin.h +0 -303
  1069. package/include/amxfp16transposeintrin.h +0 -94
  1070. package/include/amxmovrstransposeintrin.h +0 -200
  1071. package/include/amxtf32transposeintrin.h +0 -105
  1072. package/include/amxtransposeintrin.h +0 -248
  1073. package/libc/include/hexagon-linux-any/asm/signal.h +0 -29
  1074. package/libc/include/s390x-linux-any/asm/tape390.h +0 -103
  1075. package/libc/mingw/math/lrintl.c +0 -18
  1076. package/libc/mingw/math/rintl.c +0 -16
  1077. package/libc/mingw/winpthreads/spinlock.c +0 -82
  1078. package/libc/musl/src/linux/tee.c +0 -8
  1079. package/libc/musl/src/math/i386/lrintl.c +0 -8
  1080. package/libc/musl/src/math/i386/rintl.c +0 -7
  1081. package/libc/musl/src/math/lrintl.c +0 -36
  1082. package/libc/musl/src/math/rintl.c +0 -29
  1083. package/libc/musl/src/math/s390x/rintl.c +0 -15
  1084. package/libc/musl/src/math/x32/lrintl.s +0 -7
  1085. package/libc/musl/src/math/x32/rintl.s +0 -6
  1086. package/libc/musl/src/math/x86_64/lrintl.c +0 -8
  1087. package/libc/musl/src/math/x86_64/rintl.c +0 -7
  1088. package/libc/musl/src/string/strdup.c +0 -10
  1089. package/libc/musl/src/string/strndup.c +0 -12
  1090. package/libc/musl/src/string/wcsdup.c +0 -10
  1091. package/libc/musl/src/thread/pthread_spin_destroy.c +0 -6
  1092. package/libc/musl/src/thread/pthread_spin_init.c +0 -6
  1093. package/libc/musl/src/thread/pthread_spin_lock.c +0 -8
  1094. package/libc/musl/src/thread/pthread_spin_trylock.c +0 -7
  1095. package/libc/musl/src/thread/pthread_spin_unlock.c +0 -7
  1096. package/libc/musl/src/unistd/dup2.c +0 -20
  1097. package/libc/musl/src/unistd/dup3.c +0 -26
  1098. package/libc/wasi/thread-stub/pthread_spin_lock.c +0 -8
  1099. package/libc/wasi/thread-stub/pthread_spin_trylock.c +0 -8
  1100. package/libc/wasi/thread-stub/pthread_spin_unlock.c +0 -7
  1101. package/libtsan/sanitizer_common/sanitizer_coverage_interface.inc +0 -43
  1102. package/std/Build/Step/CheckObject.zig +0 -2764
  1103. /package/std/{builtin → lang}/assembly.zig +0 -0
@@ -10,6 +10,7 @@
10
10
  #ifndef _LIBCPP___HASH_TABLE
11
11
  #define _LIBCPP___HASH_TABLE
12
12
 
13
+ #include <__algorithm/fill_n.h>
13
14
  #include <__algorithm/max.h>
14
15
  #include <__algorithm/min.h>
15
16
  #include <__assert>
@@ -28,7 +29,6 @@
28
29
  #include <__memory/swap_allocator.h>
29
30
  #include <__memory/unique_ptr.h>
30
31
  #include <__new/launder.h>
31
- #include <__type_traits/can_extract_key.h>
32
32
  #include <__type_traits/copy_cvref.h>
33
33
  #include <__type_traits/enable_if.h>
34
34
  #include <__type_traits/invoke.h>
@@ -44,7 +44,9 @@
44
44
  #include <__utility/forward.h>
45
45
  #include <__utility/move.h>
46
46
  #include <__utility/pair.h>
47
+ #include <__utility/scope_guard.h>
47
48
  #include <__utility/swap.h>
49
+ #include <__utility/try_key_extraction.h>
48
50
  #include <limits>
49
51
 
50
52
  #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
@@ -81,18 +83,6 @@ struct __hash_node_base {
81
83
  typedef _NodePtr __node_pointer;
82
84
  typedef __node_base_pointer __next_pointer;
83
85
 
84
- // TODO(LLVM 22): Remove this check
85
- #ifndef _LIBCPP_ABI_FIX_UNORDERED_NODE_POINTER_UB
86
- static_assert(sizeof(__node_base_pointer) == sizeof(__node_pointer) && _LIBCPP_ALIGNOF(__node_base_pointer) ==
87
- _LIBCPP_ALIGNOF(__node_pointer),
88
- "It looks like you are using std::__hash_table (an implementation detail for the unordered containers) "
89
- "with a fancy pointer type that thas a different representation depending on whether it points to a "
90
- "__hash_table base pointer or a __hash_table node pointer (both of which are implementation details of "
91
- "the standard library). This means that your ABI is being broken between LLVM 19 and LLVM 20. If you "
92
- "don't care about your ABI being broken, define the _LIBCPP_ABI_TREE_REMOVE_NODE_POINTER_UB macro to "
93
- "silence this diagnostic.");
94
- #endif
95
-
96
86
  __next_pointer __next_;
97
87
 
98
88
  _LIBCPP_HIDE_FROM_ABI __next_pointer __ptr() _NOEXCEPT {
@@ -122,6 +112,19 @@ struct __get_hash_node_value_type<__hash_value_type<_Key, _Tp> > {
122
112
  template <class _Tp>
123
113
  using __get_hash_node_value_type_t _LIBCPP_NODEBUG = typename __get_hash_node_value_type<_Tp>::type;
124
114
 
115
+ template <class _Tp>
116
+ struct __get_hash_node_key_type {
117
+ using type _LIBCPP_NODEBUG = _Tp;
118
+ };
119
+
120
+ template <class _Key, class _Tp>
121
+ struct __get_hash_node_key_type<__hash_value_type<_Key, _Tp> > {
122
+ using type _LIBCPP_NODEBUG = _Key;
123
+ };
124
+
125
+ template <class _Tp>
126
+ using __get_hash_node_key_type_t _LIBCPP_NODEBUG = typename __get_hash_node_key_type<_Tp>::type;
127
+
125
128
  template <class _Tp, class _VoidPtr>
126
129
  struct __hash_node : public __hash_node_base< __rebind_pointer_t<_VoidPtr, __hash_node<_Tp, _VoidPtr> > > {
127
130
  using __node_value_type _LIBCPP_NODEBUG = __get_hash_node_value_type_t<_Tp>;
@@ -152,7 +155,12 @@ public:
152
155
  }
153
156
  #endif
154
157
 
155
- _LIBCPP_HIDE_FROM_ABI explicit __hash_node(__next_pointer __next, size_t __hash) : _Base(__next), __hash_(__hash) {}
158
+ template <class _Alloc, class... _Args>
159
+ _LIBCPP_HIDE_FROM_ABI explicit __hash_node(size_t __hash, _Alloc& __na, _Args&&... __args)
160
+ : _Base(nullptr), __hash_(__hash) {
161
+ allocator_traits<_Alloc>::construct(__na, std::addressof(__get_value()), std::forward<_Args>(__args)...);
162
+ }
163
+
156
164
  _LIBCPP_HIDE_FROM_ABI ~__hash_node() {}
157
165
  };
158
166
 
@@ -182,85 +190,16 @@ class __hash_map_iterator;
182
190
  template <class _HashIterator>
183
191
  class __hash_map_const_iterator;
184
192
 
185
- template <class _Tp>
186
- struct __hash_key_value_types {
187
- static_assert(!is_reference<_Tp>::value && !is_const<_Tp>::value, "");
188
- typedef _Tp key_type;
189
- typedef _Tp __node_value_type;
190
- typedef _Tp __container_value_type;
191
- static const bool __is_map = false;
192
-
193
- _LIBCPP_HIDE_FROM_ABI static key_type const& __get_key(_Tp const& __v) { return __v; }
194
- _LIBCPP_HIDE_FROM_ABI static __container_value_type const& __get_value(__node_value_type const& __v) { return __v; }
195
- _LIBCPP_HIDE_FROM_ABI static __container_value_type* __get_ptr(__node_value_type& __n) { return std::addressof(__n); }
196
- _LIBCPP_HIDE_FROM_ABI static __container_value_type&& __move(__node_value_type& __v) { return std::move(__v); }
197
- };
198
-
199
- template <class _Key, class _Tp>
200
- struct __hash_key_value_types<__hash_value_type<_Key, _Tp> > {
201
- typedef _Key key_type;
202
- typedef _Tp mapped_type;
203
- typedef __hash_value_type<_Key, _Tp> __node_value_type;
204
- typedef pair<const _Key, _Tp> __container_value_type;
205
- typedef __container_value_type __map_value_type;
206
- static const bool __is_map = true;
207
-
208
- _LIBCPP_HIDE_FROM_ABI static key_type const& __get_key(__container_value_type const& __v) { return __v.first; }
209
-
210
- template <class _Up, __enable_if_t<is_same<__remove_cvref_t<_Up>, __node_value_type>::value, int> = 0>
211
- _LIBCPP_HIDE_FROM_ABI static __container_value_type const& __get_value(_Up& __t) {
212
- return __t.__get_value();
213
- }
214
-
215
- template <class _Up, __enable_if_t<is_same<__remove_cvref_t<_Up>, __container_value_type>::value, int> = 0>
216
- _LIBCPP_HIDE_FROM_ABI static __container_value_type const& __get_value(_Up& __t) {
217
- return __t;
218
- }
219
-
220
- _LIBCPP_HIDE_FROM_ABI static __container_value_type* __get_ptr(__container_value_type& __n) {
221
- return std::addressof(__n);
222
- }
223
- _LIBCPP_HIDE_FROM_ABI static pair<key_type&&, mapped_type&&> __move(__node_value_type& __v) { return __v.__move(); }
224
- };
225
-
226
- template <class _Tp, class _AllocPtr, class _KVTypes = __hash_key_value_types<_Tp>, bool = _KVTypes::__is_map>
227
- struct __hash_map_pointer_types {};
228
-
229
- template <class _Tp, class _AllocPtr, class _KVTypes>
230
- struct __hash_map_pointer_types<_Tp, _AllocPtr, _KVTypes, true> {
231
- typedef typename _KVTypes::__map_value_type _Mv;
232
- typedef __rebind_pointer_t<_AllocPtr, _Mv> __map_value_type_pointer;
233
- typedef __rebind_pointer_t<_AllocPtr, const _Mv> __const_map_value_type_pointer;
234
- };
235
-
236
193
  template <class _NodePtr, class _NodeT = typename pointer_traits<_NodePtr>::element_type>
237
194
  struct __hash_node_types;
238
195
 
239
196
  template <class _NodePtr, class _Tp, class _VoidPtr>
240
- struct __hash_node_types<_NodePtr, __hash_node<_Tp, _VoidPtr> >
241
- : public __hash_key_value_types<_Tp>,
242
- __hash_map_pointer_types<_Tp, _VoidPtr>
243
-
244
- {
245
- typedef __hash_key_value_types<_Tp> __base;
246
-
247
- public:
248
- typedef ptrdiff_t difference_type;
249
- typedef size_t size_type;
250
-
251
- typedef __rebind_pointer_t<_NodePtr, void> __void_pointer;
252
-
197
+ struct __hash_node_types<_NodePtr, __hash_node<_Tp, _VoidPtr> > {
253
198
  typedef typename pointer_traits<_NodePtr>::element_type __node_type;
254
- typedef _NodePtr __node_pointer;
255
199
 
256
- typedef __hash_node_base<__node_pointer> __node_base_type;
257
- typedef __rebind_pointer_t<_NodePtr, __node_base_type> __node_base_pointer;
258
-
259
- typedef typename __node_base_type::__next_pointer __next_pointer;
200
+ typedef typename __hash_node_base<_NodePtr>::__next_pointer __next_pointer;
260
201
 
261
202
  using __node_value_type _LIBCPP_NODEBUG = __get_hash_node_value_type_t<_Tp>;
262
- typedef __rebind_pointer_t<_VoidPtr, __node_value_type> __node_value_type_pointer;
263
- typedef __rebind_pointer_t<_VoidPtr, const __node_value_type> __const_node_value_type_pointer;
264
203
 
265
204
  private:
266
205
  static_assert(!is_const<__node_type>::value, "_NodePtr should never be a pointer to const");
@@ -281,13 +220,6 @@ struct __hash_node_types_from_iterator<__hash_local_iterator<_NodePtr> > : __has
281
220
  template <class _NodePtr>
282
221
  struct __hash_node_types_from_iterator<__hash_const_local_iterator<_NodePtr> > : __hash_node_types<_NodePtr> {};
283
222
 
284
- template <class _NodeValueTp, class _VoidPtr>
285
- struct __make_hash_node_types {
286
- typedef __hash_node<_NodeValueTp, _VoidPtr> _NodeTp;
287
- typedef __rebind_pointer_t<_VoidPtr, _NodeTp> _NodePtr;
288
- typedef __hash_node_types<_NodePtr> type;
289
- };
290
-
291
223
  template <class _NodePtr>
292
224
  class __hash_iterator {
293
225
  typedef __hash_node_types<_NodePtr> _NodeTypes;
@@ -299,9 +231,9 @@ class __hash_iterator {
299
231
  public:
300
232
  typedef forward_iterator_tag iterator_category;
301
233
  typedef typename _NodeTypes::__node_value_type value_type;
302
- typedef typename _NodeTypes::difference_type difference_type;
234
+ using difference_type = ptrdiff_t;
303
235
  typedef value_type& reference;
304
- typedef typename _NodeTypes::__node_value_type_pointer pointer;
236
+ using pointer = __rebind_pointer_t<_NodePtr, value_type>;
305
237
 
306
238
  _LIBCPP_HIDE_FROM_ABI __hash_iterator() _NOEXCEPT : __node_(nullptr) {}
307
239
 
@@ -366,9 +298,9 @@ public:
366
298
 
367
299
  typedef forward_iterator_tag iterator_category;
368
300
  typedef typename _NodeTypes::__node_value_type value_type;
369
- typedef typename _NodeTypes::difference_type difference_type;
301
+ using difference_type = ptrdiff_t;
370
302
  typedef const value_type& reference;
371
- typedef typename _NodeTypes::__const_node_value_type_pointer pointer;
303
+ using pointer = __rebind_pointer_t<_NodePtr, const value_type>;
372
304
 
373
305
  _LIBCPP_HIDE_FROM_ABI __hash_const_iterator() _NOEXCEPT : __node_(nullptr) {}
374
306
 
@@ -431,9 +363,9 @@ class __hash_local_iterator {
431
363
  public:
432
364
  typedef forward_iterator_tag iterator_category;
433
365
  typedef typename _NodeTypes::__node_value_type value_type;
434
- typedef typename _NodeTypes::difference_type difference_type;
366
+ using difference_type = ptrdiff_t;
435
367
  typedef value_type& reference;
436
- typedef typename _NodeTypes::__node_value_type_pointer pointer;
368
+ using pointer = __rebind_pointer_t<_NodePtr, value_type>;
437
369
 
438
370
  _LIBCPP_HIDE_FROM_ABI __hash_local_iterator() _NOEXCEPT : __node_(nullptr) {}
439
371
 
@@ -509,9 +441,9 @@ public:
509
441
 
510
442
  typedef forward_iterator_tag iterator_category;
511
443
  typedef typename _NodeTypes::__node_value_type value_type;
512
- typedef typename _NodeTypes::difference_type difference_type;
444
+ using difference_type = ptrdiff_t;
513
445
  typedef const value_type& reference;
514
- typedef typename _NodeTypes::__const_node_value_type_pointer pointer;
446
+ using pointer = __rebind_pointer_t<_ConstNodePtr, const value_type>;
515
447
 
516
448
  _LIBCPP_HIDE_FROM_ABI __hash_const_local_iterator() _NOEXCEPT : __node_(nullptr) {}
517
449
 
@@ -617,8 +549,6 @@ public:
617
549
  typedef typename __alloc_traits::pointer pointer;
618
550
 
619
551
  private:
620
- typedef __hash_node_types<pointer> _NodeTypes;
621
-
622
552
  allocator_type& __na_;
623
553
 
624
554
  public:
@@ -633,7 +563,7 @@ public:
633
563
 
634
564
  _LIBCPP_HIDE_FROM_ABI void operator()(pointer __p) _NOEXCEPT {
635
565
  if (__value_constructed) {
636
- __alloc_traits::destroy(__na_, _NodeTypes::__get_ptr(__p->__get_value()));
566
+ __alloc_traits::destroy(__na_, std::addressof(__p->__get_value()));
637
567
  std::__destroy_at(std::addressof(*__p));
638
568
  }
639
569
  if (__p)
@@ -684,18 +614,16 @@ template <class _Tp, class _Hash, class _Equal, class _Alloc>
684
614
  class __hash_table {
685
615
  public:
686
616
  using value_type = __get_hash_node_value_type_t<_Tp>;
617
+ using key_type = __get_hash_node_key_type_t<_Tp>;
618
+
687
619
  typedef _Hash hasher;
688
620
  typedef _Equal key_equal;
689
621
  typedef _Alloc allocator_type;
690
622
 
691
623
  private:
692
624
  typedef allocator_traits<allocator_type> __alloc_traits;
693
- typedef typename __make_hash_node_types<_Tp, typename __alloc_traits::void_pointer>::type _NodeTypes;
694
625
 
695
626
  public:
696
- typedef typename _NodeTypes::__node_value_type __node_value_type;
697
- typedef typename _NodeTypes::__container_value_type __container_value_type;
698
- typedef typename _NodeTypes::key_type key_type;
699
627
  typedef value_type& reference;
700
628
  typedef const value_type& const_reference;
701
629
  typedef typename __alloc_traits::pointer pointer;
@@ -703,22 +631,23 @@ public:
703
631
  #ifndef _LIBCPP_ABI_FIX_UNORDERED_CONTAINER_SIZE_TYPE
704
632
  typedef typename __alloc_traits::size_type size_type;
705
633
  #else
706
- typedef typename _NodeTypes::size_type size_type;
634
+ using size_type = size_t;
707
635
  #endif
708
- typedef typename _NodeTypes::difference_type difference_type;
636
+ using difference_type = ptrdiff_t;
709
637
 
710
638
  public:
711
639
  // Create __node
712
640
 
713
- typedef typename _NodeTypes::__node_type __node;
714
- typedef __rebind_alloc<__alloc_traits, __node> __node_allocator;
715
- typedef allocator_traits<__node_allocator> __node_traits;
716
- typedef typename _NodeTypes::__void_pointer __void_pointer;
717
- typedef typename _NodeTypes::__node_pointer __node_pointer;
718
- typedef typename _NodeTypes::__node_pointer __node_const_pointer;
719
- typedef typename _NodeTypes::__node_base_type __first_node;
720
- typedef typename _NodeTypes::__node_base_pointer __node_base_pointer;
721
- typedef typename _NodeTypes::__next_pointer __next_pointer;
641
+ using __void_pointer _LIBCPP_NODEBUG = typename __alloc_traits::void_pointer;
642
+
643
+ using __node _LIBCPP_NODEBUG = __hash_node<_Tp, __void_pointer>;
644
+ using __node_allocator _LIBCPP_NODEBUG = __rebind_alloc<__alloc_traits, __node>;
645
+ using __node_traits _LIBCPP_NODEBUG = allocator_traits<__node_allocator>;
646
+ using __node_pointer _LIBCPP_NODEBUG = __rebind_pointer_t<__void_pointer, __node>;
647
+
648
+ using __first_node _LIBCPP_NODEBUG = __hash_node_base<__node_pointer>;
649
+ using __node_base_pointer _LIBCPP_NODEBUG = __rebind_pointer_t<__void_pointer, __first_node>;
650
+ using __next_pointer _LIBCPP_NODEBUG = __node_base_pointer;
722
651
 
723
652
  private:
724
653
  // check for sane allocator pointer rebinding semantics. Rebinding the
@@ -747,6 +676,38 @@ private:
747
676
 
748
677
  _LIBCPP_HIDE_FROM_ABI size_type& size() _NOEXCEPT { return __size_; }
749
678
 
679
+ _LIBCPP_HIDE_FROM_ABI void
680
+ __copy_construct(__next_pointer __other_iter, __next_pointer __own_iter, size_t __current_chash) {
681
+ auto __bucket_count = bucket_count();
682
+
683
+ for (; __other_iter; __other_iter = __other_iter->__next_) {
684
+ __node_holder __new_node = __construct_node_hash(__other_iter->__hash(), __other_iter->__upcast()->__get_value());
685
+
686
+ size_t __new_chash = std::__constrain_hash(__new_node->__hash(), __bucket_count);
687
+ if (__new_chash != __current_chash) {
688
+ __bucket_list_[__new_chash] = __own_iter;
689
+ __current_chash = __new_chash;
690
+ }
691
+
692
+ __own_iter->__next_ = static_cast<__next_pointer>(__new_node.release());
693
+ __own_iter = __own_iter->__next_;
694
+ }
695
+ }
696
+
697
+ _LIBCPP_HIDE_FROM_ABI void __copy_construct(__next_pointer __other_iter) {
698
+ __next_pointer __own_iter = __first_node_.__ptr();
699
+ {
700
+ __node_holder __new_node = __construct_node_hash(__other_iter->__hash(), __other_iter->__upcast()->__get_value());
701
+ __own_iter->__next_ = static_cast<__next_pointer>(__new_node.release());
702
+ }
703
+
704
+ size_t __current_chash = std::__constrain_hash(__own_iter->__next_->__hash(), bucket_count());
705
+ __bucket_list_[__current_chash] = __own_iter;
706
+ __other_iter = __other_iter->__next_;
707
+ __own_iter = __own_iter->__next_;
708
+ __copy_construct(__other_iter, __own_iter, __current_chash);
709
+ }
710
+
750
711
  public:
751
712
  _LIBCPP_HIDE_FROM_ABI size_type size() const _NOEXCEPT { return __size_; }
752
713
 
@@ -811,40 +772,66 @@ public:
811
772
  _LIBCPP_HIDE_FROM_ABI iterator __node_insert_multi(__node_pointer __nd);
812
773
  _LIBCPP_HIDE_FROM_ABI iterator __node_insert_multi(const_iterator __p, __node_pointer __nd);
813
774
 
814
- template <class _Key, class... _Args>
815
- _LIBCPP_HIDE_FROM_ABI pair<iterator, bool> __emplace_unique_key_args(_Key const& __k, _Args&&... __args);
816
-
817
- template <class... _Args>
818
- _LIBCPP_HIDE_FROM_ABI pair<iterator, bool> __emplace_unique_impl(_Args&&... __args);
819
-
820
- template <class _Pp>
821
- _LIBCPP_HIDE_FROM_ABI pair<iterator, bool> __emplace_unique(_Pp&& __x) {
822
- return __emplace_unique_extract_key(std::forward<_Pp>(__x), __can_extract_key<_Pp, key_type>());
823
- }
824
-
825
- template <class _First,
826
- class _Second,
827
- __enable_if_t<__can_extract_map_key<_First, key_type, __container_value_type>::value, int> = 0>
828
- _LIBCPP_HIDE_FROM_ABI pair<iterator, bool> __emplace_unique(_First&& __f, _Second&& __s) {
829
- return __emplace_unique_key_args(__f, std::forward<_First>(__f), std::forward<_Second>(__s));
830
- }
831
-
832
775
  template <class... _Args>
833
776
  _LIBCPP_HIDE_FROM_ABI pair<iterator, bool> __emplace_unique(_Args&&... __args) {
834
- return __emplace_unique_impl(std::forward<_Args>(__args)...);
835
- }
836
-
837
- template <class _Pp>
838
- _LIBCPP_HIDE_FROM_ABI pair<iterator, bool> __emplace_unique_extract_key(_Pp&& __x, __extract_key_fail_tag) {
839
- return __emplace_unique_impl(std::forward<_Pp>(__x));
840
- }
841
- template <class _Pp>
842
- _LIBCPP_HIDE_FROM_ABI pair<iterator, bool> __emplace_unique_extract_key(_Pp&& __x, __extract_key_self_tag) {
843
- return __emplace_unique_key_args(__x, std::forward<_Pp>(__x));
844
- }
845
- template <class _Pp>
846
- _LIBCPP_HIDE_FROM_ABI pair<iterator, bool> __emplace_unique_extract_key(_Pp&& __x, __extract_key_first_tag) {
847
- return __emplace_unique_key_args(__x.first, std::forward<_Pp>(__x));
777
+ return std::__try_key_extraction<key_type>(
778
+ [this](const key_type& __key, _Args&&... __args2) {
779
+ size_t __hash = hash_function()(__key);
780
+ size_type __bc = bucket_count();
781
+ bool __inserted = false;
782
+ __next_pointer __nd;
783
+ size_t __chash;
784
+ if (__bc != 0) {
785
+ __chash = std::__constrain_hash(__hash, __bc);
786
+ __nd = __bucket_list_[__chash];
787
+ if (__nd != nullptr) {
788
+ for (__nd = __nd->__next_;
789
+ __nd != nullptr &&
790
+ (__nd->__hash() == __hash || std::__constrain_hash(__nd->__hash(), __bc) == __chash);
791
+ __nd = __nd->__next_) {
792
+ if ((__nd->__hash() == __hash) && key_eq()(__nd->__upcast()->__get_value(), __key))
793
+ goto __done;
794
+ }
795
+ }
796
+ }
797
+ {
798
+ __node_holder __h = __construct_node_hash(__hash, std::forward<_Args>(__args2)...);
799
+ if (size() + 1 > __bc * max_load_factor()) {
800
+ __rehash_unique(std::max<size_type>(2 * __bc + !std::__is_hash_power2(__bc),
801
+ size_type(__math::ceil(float(size() + 1) / max_load_factor()))));
802
+ __bc = bucket_count();
803
+ __chash = std::__constrain_hash(__hash, __bc);
804
+ }
805
+ // insert_after __bucket_list_[__chash], or __first_node if bucket is null
806
+ __next_pointer __pn = __bucket_list_[__chash];
807
+ if (__pn == nullptr) {
808
+ __pn = __first_node_.__ptr();
809
+ __h->__next_ = __pn->__next_;
810
+ __pn->__next_ = __h.get()->__ptr();
811
+ // fix up __bucket_list_
812
+ __bucket_list_[__chash] = __pn;
813
+ if (__h->__next_ != nullptr)
814
+ __bucket_list_[std::__constrain_hash(__h->__next_->__hash(), __bc)] = __h.get()->__ptr();
815
+ } else {
816
+ __h->__next_ = __pn->__next_;
817
+ __pn->__next_ = static_cast<__next_pointer>(__h.get());
818
+ }
819
+ __nd = static_cast<__next_pointer>(__h.release());
820
+ // increment size
821
+ ++size();
822
+ __inserted = true;
823
+ }
824
+ __done:
825
+ return pair<iterator, bool>(iterator(__nd), __inserted);
826
+ },
827
+ [this](_Args&&... __args2) {
828
+ __node_holder __h = __construct_node(std::forward<_Args>(__args2)...);
829
+ pair<iterator, bool> __r = __node_insert_unique(__h.get());
830
+ if (__r.second)
831
+ __h.release();
832
+ return __r;
833
+ },
834
+ std::forward<_Args>(__args)...);
848
835
  }
849
836
 
850
837
  template <class... _Args>
@@ -854,9 +841,7 @@ public:
854
841
 
855
842
  template <class _ValueT = _Tp, __enable_if_t<__is_hash_value_type<_ValueT>::value, int> = 0>
856
843
  _LIBCPP_HIDE_FROM_ABI void __insert_unique_from_orphaned_node(value_type&& __value) {
857
- using __key_type = typename _NodeTypes::key_type;
858
-
859
- __node_holder __h = __construct_node(const_cast<__key_type&&>(__value.first), std::move(__value.second));
844
+ __node_holder __h = __construct_node(const_cast<key_type&&>(__value.first), std::move(__value.second));
860
845
  __node_insert_unique(__h.get());
861
846
  __h.release();
862
847
  }
@@ -870,9 +855,7 @@ public:
870
855
 
871
856
  template <class _ValueT = _Tp, __enable_if_t<__is_hash_value_type<_ValueT>::value, int> = 0>
872
857
  _LIBCPP_HIDE_FROM_ABI void __insert_multi_from_orphaned_node(value_type&& __value) {
873
- using __key_type = typename _NodeTypes::key_type;
874
-
875
- __node_holder __h = __construct_node(const_cast<__key_type&&>(__value.first), std::move(__value.second));
858
+ __node_holder __h = __construct_node(const_cast<key_type&&>(__value.first), std::move(__value.second));
876
859
  __node_insert_multi(__h.get());
877
860
  __h.release();
878
861
  }
@@ -1017,8 +1000,8 @@ private:
1017
1000
  template <class... _Args>
1018
1001
  _LIBCPP_HIDE_FROM_ABI __node_holder __construct_node(_Args&&... __args);
1019
1002
 
1020
- template <class _First, class... _Rest>
1021
- _LIBCPP_HIDE_FROM_ABI __node_holder __construct_node_hash(size_t __hash, _First&& __f, _Rest&&... __rest);
1003
+ template <class... _Args>
1004
+ _LIBCPP_HIDE_FROM_ABI __node_holder __construct_node_hash(size_t __hash, _Args&&... __args);
1022
1005
 
1023
1006
  _LIBCPP_HIDE_FROM_ABI void __copy_assign_alloc(const __hash_table& __u) {
1024
1007
  __copy_assign_alloc(__u, integral_constant<bool, __node_traits::propagate_on_container_copy_assignment::value>());
@@ -1042,17 +1025,29 @@ private:
1042
1025
  }
1043
1026
  _LIBCPP_HIDE_FROM_ABI void __move_assign_alloc(__hash_table&, false_type) _NOEXCEPT {}
1044
1027
 
1045
- _LIBCPP_HIDE_FROM_ABI void __deallocate_node(__next_pointer __np) _NOEXCEPT;
1028
+ _LIBCPP_HIDE_FROM_ABI void __deallocate_node(__node_pointer __nd) _NOEXCEPT {
1029
+ auto& __alloc = __node_alloc();
1030
+ __node_traits::destroy(__alloc, std::addressof(__nd->__get_value()));
1031
+ std::__destroy_at(std::__to_address(__nd));
1032
+ __node_traits::deallocate(__alloc, __nd, 1);
1033
+ }
1034
+
1035
+ _LIBCPP_HIDE_FROM_ABI void __deallocate_node_list(__next_pointer __np) _NOEXCEPT {
1036
+ while (__np != nullptr) {
1037
+ __next_pointer __next = __np->__next_;
1038
+ __deallocate_node(__np->__upcast());
1039
+ __np = __next;
1040
+ }
1041
+ }
1042
+
1046
1043
  _LIBCPP_HIDE_FROM_ABI __next_pointer __detach() _NOEXCEPT;
1047
1044
 
1048
1045
  template <class _From, class _ValueT = _Tp, __enable_if_t<__is_hash_value_type<_ValueT>::value, int> = 0>
1049
1046
  _LIBCPP_HIDE_FROM_ABI void __assign_value(__get_hash_node_value_type_t<_Tp>& __lhs, _From&& __rhs) {
1050
- using __key_type = typename _NodeTypes::key_type;
1051
-
1052
1047
  // This is technically UB, since the object was constructed as `const`.
1053
1048
  // Clang doesn't optimize on this currently though.
1054
- const_cast<__key_type&>(__lhs.first) = const_cast<__copy_cvref_t<_From, __key_type>&&>(__rhs.first);
1055
- __lhs.second = std::forward<_From>(__rhs).second;
1049
+ const_cast<key_type&>(__lhs.first) = const_cast<__copy_cvref_t<_From, key_type>&&>(__rhs.first);
1050
+ __lhs.second = std::forward<_From>(__rhs).second;
1056
1051
  }
1057
1052
 
1058
1053
  template <class _From, class _ValueT = _Tp, __enable_if_t<!__is_hash_value_type<_ValueT>::value, int> = 0>
@@ -1101,16 +1096,29 @@ __hash_table<_Tp, _Hash, _Equal, _Alloc>::__hash_table(const allocator_type& __a
1101
1096
  __max_load_factor_(1.0f) {}
1102
1097
 
1103
1098
  template <class _Tp, class _Hash, class _Equal, class _Alloc>
1104
- __hash_table<_Tp, _Hash, _Equal, _Alloc>::__hash_table(const __hash_table& __u)
1099
+ __hash_table<_Tp, _Hash, _Equal, _Alloc>::__hash_table(const __hash_table& __other)
1105
1100
  : __bucket_list_(nullptr,
1106
- __bucket_list_deleter(allocator_traits<__pointer_allocator>::select_on_container_copy_construction(
1107
- __u.__bucket_list_.get_deleter().__alloc()),
1101
+ __bucket_list_deleter(__pointer_alloc_traits::select_on_container_copy_construction(
1102
+ __other.__bucket_list_.get_deleter().__alloc()),
1108
1103
  0)),
1109
- __node_alloc_(allocator_traits<__node_allocator>::select_on_container_copy_construction(__u.__node_alloc())),
1104
+ __node_alloc_(__node_traits::select_on_container_copy_construction(__other.__node_alloc())),
1110
1105
  __size_(0),
1111
- __hasher_(__u.hash_function()),
1112
- __max_load_factor_(__u.__max_load_factor_),
1113
- __key_eq_(__u.__key_eq_) {}
1106
+ __hasher_(__other.hash_function()),
1107
+ __max_load_factor_(__other.__max_load_factor_),
1108
+ __key_eq_(__other.__key_eq_) {
1109
+ if (__other.size() == 0)
1110
+ return;
1111
+
1112
+ auto& __bucket_list_del = __bucket_list_.get_deleter();
1113
+ auto __bucket_count = __other.bucket_count();
1114
+ __bucket_list_.reset(__pointer_alloc_traits::allocate(__bucket_list_del.__alloc(), __bucket_count));
1115
+ __bucket_list_del.size() = __bucket_count;
1116
+
1117
+ std::fill_n(__bucket_list_.get(), __bucket_count, nullptr);
1118
+
1119
+ __copy_construct(__other.__first_node_.__next_);
1120
+ __size_ = __other.size();
1121
+ }
1114
1122
 
1115
1123
  template <class _Tp, class _Hash, class _Equal, class _Alloc>
1116
1124
  __hash_table<_Tp, _Hash, _Equal, _Alloc>::__hash_table(const __hash_table& __u, const allocator_type& __a)
@@ -1169,7 +1177,7 @@ __hash_table<_Tp, _Hash, _Equal, _Alloc>::~__hash_table() {
1169
1177
  static_assert(is_copy_constructible<hasher>::value, "Hasher must be copy-constructible.");
1170
1178
  #endif
1171
1179
 
1172
- __deallocate_node(__first_node_.__next_);
1180
+ __deallocate_node_list(__first_node_.__next_);
1173
1181
  }
1174
1182
 
1175
1183
  template <class _Tp, class _Hash, class _Equal, class _Alloc>
@@ -1184,28 +1192,76 @@ void __hash_table<_Tp, _Hash, _Equal, _Alloc>::__copy_assign_alloc(const __hash_
1184
1192
  }
1185
1193
 
1186
1194
  template <class _Tp, class _Hash, class _Equal, class _Alloc>
1187
- __hash_table<_Tp, _Hash, _Equal, _Alloc>& __hash_table<_Tp, _Hash, _Equal, _Alloc>::operator=(const __hash_table& __u) {
1188
- if (this != std::addressof(__u)) {
1189
- __copy_assign_alloc(__u);
1190
- hash_function() = __u.hash_function();
1191
- key_eq() = __u.key_eq();
1192
- max_load_factor() = __u.max_load_factor();
1193
- __assign_multi(__u.begin(), __u.end());
1195
+ __hash_table<_Tp, _Hash, _Equal, _Alloc>&
1196
+ __hash_table<_Tp, _Hash, _Equal, _Alloc>::operator=(const __hash_table& __other) {
1197
+ if (this == std::addressof(__other))
1198
+ return *this;
1199
+
1200
+ __copy_assign_alloc(__other);
1201
+ hash_function() = __other.hash_function();
1202
+ key_eq() = __other.key_eq();
1203
+ max_load_factor() = __other.max_load_factor();
1204
+
1205
+ if (__other.size() == 0) {
1206
+ clear();
1207
+ return *this;
1194
1208
  }
1195
- return *this;
1196
- }
1197
1209
 
1198
- template <class _Tp, class _Hash, class _Equal, class _Alloc>
1199
- void __hash_table<_Tp, _Hash, _Equal, _Alloc>::__deallocate_node(__next_pointer __np) _NOEXCEPT {
1200
- __node_allocator& __na = __node_alloc();
1201
- while (__np != nullptr) {
1202
- __next_pointer __next = __np->__next_;
1203
- __node_pointer __real_np = __np->__upcast();
1204
- __node_traits::destroy(__na, _NodeTypes::__get_ptr(__real_np->__get_value()));
1205
- std::__destroy_at(std::addressof(*__real_np));
1206
- __node_traits::deallocate(__na, __real_np, 1);
1207
- __np = __next;
1210
+ auto __bucket_count = __other.bucket_count();
1211
+ if (__bucket_count != bucket_count()) {
1212
+ auto& __bucket_list_del = __bucket_list_.get_deleter();
1213
+ __bucket_list_.reset(__pointer_alloc_traits::allocate(__bucket_list_del.__alloc(), __bucket_count));
1214
+ __bucket_list_del.size() = __bucket_count;
1215
+ }
1216
+ std::fill_n(__bucket_list_.get(), __bucket_count, nullptr);
1217
+
1218
+ if (!__first_node_.__next_) {
1219
+ __copy_construct(__other.__first_node_.__next_);
1220
+ __size_ = __other.size();
1221
+ return *this;
1222
+ }
1223
+
1224
+ __next_pointer __other_iter = __other.__first_node_.__next_;
1225
+ __next_pointer __own_iter = __first_node_.__ptr();
1226
+ {
1227
+ __node_pointer __next = __own_iter->__next_->__upcast();
1228
+ __assign_value(__next->__get_value(), __other_iter->__upcast()->__get_value());
1229
+ __next->__hash_ = __other_iter->__hash();
1230
+ }
1231
+ size_t __current_chash = std::__constrain_hash(__own_iter->__next_->__hash(), __bucket_count);
1232
+ __bucket_list_[__current_chash] = __own_iter;
1233
+ __other_iter = __other_iter->__next_;
1234
+ __own_iter = __own_iter->__next_;
1235
+
1236
+ // Go through the nodes of the incoming hash table and copy then into the destination hash table, reusing as many
1237
+ // existing nodes as posssible in the destination.
1238
+ while (__other_iter && __own_iter->__next_) {
1239
+ __node_pointer __next = __own_iter->__next_->__upcast();
1240
+ __assign_value(__next->__get_value(), __other_iter->__upcast()->__get_value());
1241
+ __next->__hash_ = __other_iter->__hash();
1242
+
1243
+ size_t __new_chash = std::__constrain_hash(__next->__hash_, __bucket_count);
1244
+ if (__new_chash != __current_chash) {
1245
+ __bucket_list_[__new_chash] = __own_iter;
1246
+ __current_chash = __new_chash;
1247
+ }
1248
+
1249
+ __other_iter = __other_iter->__next_;
1250
+ __own_iter = __own_iter->__next_;
1208
1251
  }
1252
+
1253
+ // At this point we either have consumed the whole incoming hash table, or we don't have any more nodes to reuse in
1254
+ // the destination. Either continue with constructing new nodes, or deallocate the left over nodes.
1255
+ if (__own_iter->__next_) {
1256
+ __deallocate_node_list(__own_iter->__next_);
1257
+ __own_iter->__next_ = nullptr;
1258
+ } else {
1259
+ __copy_construct(__other_iter, __own_iter, __current_chash);
1260
+ }
1261
+
1262
+ __size_ = __other.size();
1263
+
1264
+ return *this;
1209
1265
  }
1210
1266
 
1211
1267
  template <class _Tp, class _Hash, class _Equal, class _Alloc>
@@ -1251,23 +1307,14 @@ void __hash_table<_Tp, _Hash, _Equal, _Alloc>::__move_assign(__hash_table& __u,
1251
1307
  max_load_factor() = __u.max_load_factor();
1252
1308
  if (bucket_count() != 0) {
1253
1309
  __next_pointer __cache = __detach();
1254
- #if _LIBCPP_HAS_EXCEPTIONS
1255
- try {
1256
- #endif // _LIBCPP_HAS_EXCEPTIONS
1257
- const_iterator __i = __u.begin();
1258
- while (__cache != nullptr && __u.size() != 0) {
1259
- __assign_value(__cache->__upcast()->__get_value(), std::move(__u.remove(__i++)->__get_value()));
1260
- __next_pointer __next = __cache->__next_;
1261
- __node_insert_multi(__cache->__upcast());
1262
- __cache = __next;
1263
- }
1264
- #if _LIBCPP_HAS_EXCEPTIONS
1265
- } catch (...) {
1266
- __deallocate_node(__cache);
1267
- throw;
1310
+ auto __guard = std::__make_scope_guard([&] { __deallocate_node_list(__cache); });
1311
+ const_iterator __i = __u.begin();
1312
+ while (__cache != nullptr && __u.size() != 0) {
1313
+ __assign_value(__cache->__upcast()->__get_value(), std::move(__u.remove(__i++)->__get_value()));
1314
+ __next_pointer __next = __cache->__next_;
1315
+ __node_insert_multi(__cache->__upcast());
1316
+ __cache = __next;
1268
1317
  }
1269
- #endif // _LIBCPP_HAS_EXCEPTIONS
1270
- __deallocate_node(__cache);
1271
1318
  }
1272
1319
  const_iterator __i = __u.begin();
1273
1320
  while (__u.size() != 0)
@@ -1290,27 +1337,18 @@ template <class _InputIterator>
1290
1337
  void __hash_table<_Tp, _Hash, _Equal, _Alloc>::__assign_unique(_InputIterator __first, _InputIterator __last) {
1291
1338
  typedef iterator_traits<_InputIterator> _ITraits;
1292
1339
  typedef typename _ITraits::value_type _ItValueType;
1293
- static_assert(is_same<_ItValueType, __container_value_type>::value,
1294
- "__assign_unique may only be called with the containers value type");
1340
+ static_assert(
1341
+ is_same<_ItValueType, value_type>::value, "__assign_unique may only be called with the containers value type");
1295
1342
 
1296
1343
  if (bucket_count() != 0) {
1297
1344
  __next_pointer __cache = __detach();
1298
- #if _LIBCPP_HAS_EXCEPTIONS
1299
- try {
1300
- #endif // _LIBCPP_HAS_EXCEPTIONS
1301
- for (; __cache != nullptr && __first != __last; ++__first) {
1302
- __assign_value(__cache->__upcast()->__get_value(), *__first);
1303
- __next_pointer __next = __cache->__next_;
1304
- __node_insert_unique(__cache->__upcast());
1305
- __cache = __next;
1306
- }
1307
- #if _LIBCPP_HAS_EXCEPTIONS
1308
- } catch (...) {
1309
- __deallocate_node(__cache);
1310
- throw;
1345
+ auto __guard = std::__make_scope_guard([&] { __deallocate_node_list(__cache); });
1346
+ for (; __cache != nullptr && __first != __last; ++__first) {
1347
+ __assign_value(__cache->__upcast()->__get_value(), *__first);
1348
+ __next_pointer __next = __cache->__next_;
1349
+ __node_insert_unique(__cache->__upcast());
1350
+ __cache = __next;
1311
1351
  }
1312
- #endif // _LIBCPP_HAS_EXCEPTIONS
1313
- __deallocate_node(__cache);
1314
1352
  }
1315
1353
  for (; __first != __last; ++__first)
1316
1354
  __emplace_unique(*__first);
@@ -1321,31 +1359,20 @@ template <class _InputIterator>
1321
1359
  void __hash_table<_Tp, _Hash, _Equal, _Alloc>::__assign_multi(_InputIterator __first, _InputIterator __last) {
1322
1360
  typedef iterator_traits<_InputIterator> _ITraits;
1323
1361
  typedef typename _ITraits::value_type _ItValueType;
1324
- static_assert(
1325
- (is_same<_ItValueType, __container_value_type>::value || is_same<_ItValueType, __node_value_type>::value),
1326
- "__assign_multi may only be called with the containers value type"
1327
- " or the nodes value type");
1362
+ static_assert(is_same<_ItValueType, value_type>::value,
1363
+ "__assign_multi may only be called with the containers value type or the nodes value type");
1328
1364
  if (bucket_count() != 0) {
1329
1365
  __next_pointer __cache = __detach();
1330
- #if _LIBCPP_HAS_EXCEPTIONS
1331
- try {
1332
- #endif // _LIBCPP_HAS_EXCEPTIONS
1333
- for (; __cache != nullptr && __first != __last; ++__first) {
1334
- __assign_value(__cache->__upcast()->__get_value(), *__first);
1335
- __next_pointer __next = __cache->__next_;
1336
- __node_insert_multi(__cache->__upcast());
1337
- __cache = __next;
1338
- }
1339
- #if _LIBCPP_HAS_EXCEPTIONS
1340
- } catch (...) {
1341
- __deallocate_node(__cache);
1342
- throw;
1366
+ auto __guard = std::__make_scope_guard([&] { __deallocate_node_list(__cache); });
1367
+ for (; __cache != nullptr && __first != __last; ++__first) {
1368
+ __assign_value(__cache->__upcast()->__get_value(), *__first);
1369
+ __next_pointer __next = __cache->__next_;
1370
+ __node_insert_multi(__cache->__upcast());
1371
+ __cache = __next;
1343
1372
  }
1344
- #endif // _LIBCPP_HAS_EXCEPTIONS
1345
- __deallocate_node(__cache);
1346
1373
  }
1347
1374
  for (; __first != __last; ++__first)
1348
- __emplace_multi(_NodeTypes::__get_value(*__first));
1375
+ __emplace_multi(*__first);
1349
1376
  }
1350
1377
 
1351
1378
  template <class _Tp, class _Hash, class _Equal, class _Alloc>
@@ -1375,7 +1402,7 @@ __hash_table<_Tp, _Hash, _Equal, _Alloc>::end() const _NOEXCEPT {
1375
1402
  template <class _Tp, class _Hash, class _Equal, class _Alloc>
1376
1403
  void __hash_table<_Tp, _Hash, _Equal, _Alloc>::clear() _NOEXCEPT {
1377
1404
  if (size() > 0) {
1378
- __deallocate_node(__first_node_.__next_);
1405
+ __deallocate_node_list(__first_node_.__next_);
1379
1406
  __first_node_.__next_ = nullptr;
1380
1407
  size_type __bc = bucket_count();
1381
1408
  for (size_type __i = 0; __i < __bc; ++__i)
@@ -1561,69 +1588,6 @@ __hash_table<_Tp, _Hash, _Equal, _Alloc>::__node_insert_multi(const_iterator __p
1561
1588
  return __node_insert_multi(__cp);
1562
1589
  }
1563
1590
 
1564
- template <class _Tp, class _Hash, class _Equal, class _Alloc>
1565
- template <class _Key, class... _Args>
1566
- pair<typename __hash_table<_Tp, _Hash, _Equal, _Alloc>::iterator, bool>
1567
- __hash_table<_Tp, _Hash, _Equal, _Alloc>::__emplace_unique_key_args(_Key const& __k, _Args&&... __args) {
1568
- size_t __hash = hash_function()(__k);
1569
- size_type __bc = bucket_count();
1570
- bool __inserted = false;
1571
- __next_pointer __nd;
1572
- size_t __chash;
1573
- if (__bc != 0) {
1574
- __chash = std::__constrain_hash(__hash, __bc);
1575
- __nd = __bucket_list_[__chash];
1576
- if (__nd != nullptr) {
1577
- for (__nd = __nd->__next_;
1578
- __nd != nullptr && (__nd->__hash() == __hash || std::__constrain_hash(__nd->__hash(), __bc) == __chash);
1579
- __nd = __nd->__next_) {
1580
- if ((__nd->__hash() == __hash) && key_eq()(__nd->__upcast()->__get_value(), __k))
1581
- goto __done;
1582
- }
1583
- }
1584
- }
1585
- {
1586
- __node_holder __h = __construct_node_hash(__hash, std::forward<_Args>(__args)...);
1587
- if (size() + 1 > __bc * max_load_factor() || __bc == 0) {
1588
- __rehash_unique(std::max<size_type>(
1589
- 2 * __bc + !std::__is_hash_power2(__bc), size_type(__math::ceil(float(size() + 1) / max_load_factor()))));
1590
- __bc = bucket_count();
1591
- __chash = std::__constrain_hash(__hash, __bc);
1592
- }
1593
- // insert_after __bucket_list_[__chash], or __first_node if bucket is null
1594
- __next_pointer __pn = __bucket_list_[__chash];
1595
- if (__pn == nullptr) {
1596
- __pn = __first_node_.__ptr();
1597
- __h->__next_ = __pn->__next_;
1598
- __pn->__next_ = __h.get()->__ptr();
1599
- // fix up __bucket_list_
1600
- __bucket_list_[__chash] = __pn;
1601
- if (__h->__next_ != nullptr)
1602
- __bucket_list_[std::__constrain_hash(__h->__next_->__hash(), __bc)] = __h.get()->__ptr();
1603
- } else {
1604
- __h->__next_ = __pn->__next_;
1605
- __pn->__next_ = static_cast<__next_pointer>(__h.get());
1606
- }
1607
- __nd = static_cast<__next_pointer>(__h.release());
1608
- // increment size
1609
- ++size();
1610
- __inserted = true;
1611
- }
1612
- __done:
1613
- return pair<iterator, bool>(iterator(__nd), __inserted);
1614
- }
1615
-
1616
- template <class _Tp, class _Hash, class _Equal, class _Alloc>
1617
- template <class... _Args>
1618
- pair<typename __hash_table<_Tp, _Hash, _Equal, _Alloc>::iterator, bool>
1619
- __hash_table<_Tp, _Hash, _Equal, _Alloc>::__emplace_unique_impl(_Args&&... __args) {
1620
- __node_holder __h = __construct_node(std::forward<_Args>(__args)...);
1621
- pair<iterator, bool> __r = __node_insert_unique(__h.get());
1622
- if (__r.second)
1623
- __h.release();
1624
- return __r;
1625
- }
1626
-
1627
1591
  template <class _Tp, class _Hash, class _Equal, class _Alloc>
1628
1592
  template <class... _Args>
1629
1593
  typename __hash_table<_Tp, _Hash, _Equal, _Alloc>::iterator
@@ -1764,41 +1728,45 @@ void __hash_table<_Tp, _Hash, _Equal, _Alloc>::__rehash(size_type __n) _LIBCPP_D
1764
1728
 
1765
1729
  template <class _Tp, class _Hash, class _Equal, class _Alloc>
1766
1730
  template <bool _UniqueKeys>
1767
- void __hash_table<_Tp, _Hash, _Equal, _Alloc>::__do_rehash(size_type __nbc) {
1768
- __pointer_allocator& __npa = __bucket_list_.get_deleter().__alloc();
1769
- __bucket_list_.reset(__nbc > 0 ? __pointer_alloc_traits::allocate(__npa, __nbc) : nullptr);
1770
- __bucket_list_.get_deleter().size() = __nbc;
1771
- if (__nbc > 0) {
1772
- for (size_type __i = 0; __i < __nbc; ++__i)
1773
- __bucket_list_[__i] = nullptr;
1774
- __next_pointer __pp = __first_node_.__ptr();
1775
- __next_pointer __cp = __pp->__next_;
1776
- if (__cp != nullptr) {
1777
- size_type __chash = std::__constrain_hash(__cp->__hash(), __nbc);
1778
- __bucket_list_[__chash] = __pp;
1779
- size_type __phash = __chash;
1780
- for (__pp = __cp, void(), __cp = __cp->__next_; __cp != nullptr; __cp = __pp->__next_) {
1781
- __chash = std::__constrain_hash(__cp->__hash(), __nbc);
1782
- if (__chash == __phash)
1783
- __pp = __cp;
1784
- else {
1785
- if (__bucket_list_[__chash] == nullptr) {
1786
- __bucket_list_[__chash] = __pp;
1787
- __pp = __cp;
1788
- __phash = __chash;
1789
- } else {
1790
- __next_pointer __np = __cp;
1791
- if _LIBCPP_CONSTEXPR_SINCE_CXX17 (!_UniqueKeys) {
1792
- for (; __np->__next_ != nullptr &&
1793
- key_eq()(__cp->__upcast()->__get_value(), __np->__next_->__upcast()->__get_value());
1794
- __np = __np->__next_)
1795
- ;
1796
- }
1797
- __pp->__next_ = __np->__next_;
1798
- __np->__next_ = __bucket_list_[__chash]->__next_;
1799
- __bucket_list_[__chash]->__next_ = __cp;
1800
- }
1731
+ void __hash_table<_Tp, _Hash, _Equal, _Alloc>::__do_rehash(size_type __bucket_count) {
1732
+ __pointer_allocator& __ptr_alloc = __bucket_list_.get_deleter().__alloc();
1733
+ __bucket_list_.reset(__bucket_count > 0 ? __pointer_alloc_traits::allocate(__ptr_alloc, __bucket_count) : nullptr);
1734
+ __bucket_list_.get_deleter().size() = __bucket_count;
1735
+
1736
+ if (__bucket_count == 0)
1737
+ return;
1738
+
1739
+ for (size_type __i = 0; __i < __bucket_count; ++__i)
1740
+ __bucket_list_[__i] = nullptr;
1741
+ __next_pointer __pp = __first_node_.__ptr();
1742
+ __next_pointer __cp = __pp->__next_;
1743
+
1744
+ if (!__cp)
1745
+ return;
1746
+
1747
+ size_type __chash = std::__constrain_hash(__cp->__hash(), __bucket_count);
1748
+ __bucket_list_[__chash] = __pp;
1749
+ size_type __phash = __chash;
1750
+ for (__pp = __cp, void(), __cp = __cp->__next_; __cp != nullptr; __cp = __pp->__next_) {
1751
+ __chash = std::__constrain_hash(__cp->__hash(), __bucket_count);
1752
+ if (__chash == __phash)
1753
+ __pp = __cp;
1754
+ else {
1755
+ if (__bucket_list_[__chash] == nullptr) {
1756
+ __bucket_list_[__chash] = __pp;
1757
+ __pp = __cp;
1758
+ __phash = __chash;
1759
+ } else {
1760
+ __next_pointer __np = __cp;
1761
+ if _LIBCPP_CONSTEXPR (!_UniqueKeys) {
1762
+ for (; __np->__next_ != nullptr &&
1763
+ key_eq()(__cp->__upcast()->__get_value(), __np->__next_->__upcast()->__get_value());
1764
+ __np = __np->__next_)
1765
+ ;
1801
1766
  }
1767
+ __pp->__next_ = __np->__next_;
1768
+ __np->__next_ = __bucket_list_[__chash]->__next_;
1769
+ __bucket_list_[__chash]->__next_ = __cp;
1802
1770
  }
1803
1771
  }
1804
1772
  }
@@ -1854,16 +1822,13 @@ __hash_table<_Tp, _Hash, _Equal, _Alloc>::__construct_node(_Args&&... __args) {
1854
1822
  __node_allocator& __na = __node_alloc();
1855
1823
  __node_holder __h(__node_traits::allocate(__na, 1), _Dp(__na));
1856
1824
 
1857
- // Begin the lifetime of the node itself. Note that this doesn't begin the lifetime of the value
1858
- // held inside the node, since we need to use the allocator's construct() method for that.
1825
+ // Begin the lifetime of the node itself and the value_type contained within.
1859
1826
  //
1860
1827
  // We don't use the allocator's construct() method to construct the node itself since the
1861
1828
  // Cpp17FooInsertable named requirements don't require the allocator's construct() method
1862
1829
  // to work on anything other than the value_type.
1863
- std::__construct_at(std::addressof(*__h), /* next = */ nullptr, /* hash = */ 0);
1830
+ std::__construct_at(std::addressof(*__h), /* hash = */ 0, __na, std::forward<_Args>(__args)...);
1864
1831
 
1865
- // Now construct the value_type using the allocator's construct() method.
1866
- __node_traits::construct(__na, _NodeTypes::__get_ptr(__h->__get_value()), std::forward<_Args>(__args)...);
1867
1832
  __h.get_deleter().__value_constructed = true;
1868
1833
 
1869
1834
  __h->__hash_ = hash_function()(__h->__get_value());
@@ -1871,15 +1836,13 @@ __hash_table<_Tp, _Hash, _Equal, _Alloc>::__construct_node(_Args&&... __args) {
1871
1836
  }
1872
1837
 
1873
1838
  template <class _Tp, class _Hash, class _Equal, class _Alloc>
1874
- template <class _First, class... _Rest>
1839
+ template <class... _Args>
1875
1840
  typename __hash_table<_Tp, _Hash, _Equal, _Alloc>::__node_holder
1876
- __hash_table<_Tp, _Hash, _Equal, _Alloc>::__construct_node_hash(size_t __hash, _First&& __f, _Rest&&... __rest) {
1877
- static_assert(!__is_hash_value_type<_First, _Rest...>::value, "Construct cannot be called with a hash value type");
1841
+ __hash_table<_Tp, _Hash, _Equal, _Alloc>::__construct_node_hash(size_t __hash, _Args&&... __args) {
1842
+ static_assert(!__is_hash_value_type<_Args...>::value, "Construct cannot be called with a hash value type");
1878
1843
  __node_allocator& __na = __node_alloc();
1879
1844
  __node_holder __h(__node_traits::allocate(__na, 1), _Dp(__na));
1880
- std::__construct_at(std::addressof(*__h), /* next = */ nullptr, /* hash = */ __hash);
1881
- __node_traits::construct(
1882
- __na, _NodeTypes::__get_ptr(__h->__get_value()), std::forward<_First>(__f), std::forward<_Rest>(__rest)...);
1845
+ std::__construct_at(std::addressof(*__h), /* hash = */ __hash, __na, std::forward<_Args>(__args)...);
1883
1846
  __h.get_deleter().__value_constructed = true;
1884
1847
  return __h;
1885
1848
  }
@@ -1899,12 +1862,63 @@ __hash_table<_Tp, _Hash, _Equal, _Alloc>::erase(const_iterator __p) {
1899
1862
  template <class _Tp, class _Hash, class _Equal, class _Alloc>
1900
1863
  typename __hash_table<_Tp, _Hash, _Equal, _Alloc>::iterator
1901
1864
  __hash_table<_Tp, _Hash, _Equal, _Alloc>::erase(const_iterator __first, const_iterator __last) {
1902
- for (const_iterator __p = __first; __first != __last; __p = __first) {
1903
- ++__first;
1904
- erase(__p);
1865
+ if (__first == __last)
1866
+ return iterator(__last.__node_);
1867
+
1868
+ // current node
1869
+ __next_pointer __current = __first.__node_;
1870
+ size_type __bucket_count = bucket_count();
1871
+ size_t __chash = std::__constrain_hash(__current->__hash(), __bucket_count);
1872
+ // find previous node
1873
+ __next_pointer __before_first = __bucket_list_[__chash];
1874
+ for (; __before_first->__next_ != __current; __before_first = __before_first->__next_)
1875
+ ;
1876
+
1877
+ __next_pointer __last_node = __last.__node_;
1878
+
1879
+ // If __before_first is in the same bucket (i.e. the first element we erase is not the first in the bucket), clear
1880
+ // this bucket first without re-linking it
1881
+ if (__before_first != __first_node_.__ptr() &&
1882
+ std::__constrain_hash(__before_first->__hash(), __bucket_count) == __chash) {
1883
+ while (__current != __last_node) {
1884
+ auto __next = __current->__next_;
1885
+ __deallocate_node(__current->__upcast());
1886
+ __current = __next;
1887
+ --__size_;
1888
+
1889
+ if (__next) {
1890
+ if (auto __next_chash = std::__constrain_hash(__next->__hash(), __bucket_count); __next_chash != __chash) {
1891
+ __bucket_list_[__next_chash] = __before_first;
1892
+ __chash = __next_chash;
1893
+ break;
1894
+ }
1895
+ }
1896
+ }
1905
1897
  }
1906
- __next_pointer __np = __last.__node_;
1907
- return iterator(__np);
1898
+
1899
+ while (__current != __last_node) {
1900
+ auto __next = __current->__next_;
1901
+ __deallocate_node(__current->__upcast());
1902
+ __current = __next;
1903
+ --__size_;
1904
+
1905
+ // When switching buckets, set the old bucket to be empty and update the next bucket to have __before_first as its
1906
+ // before-first element
1907
+ if (__next) {
1908
+ if (auto __next_chash = std::__constrain_hash(__next->__hash(), __bucket_count); __next_chash != __chash) {
1909
+ __bucket_list_[__chash] = nullptr;
1910
+ __bucket_list_[__next_chash] = __before_first;
1911
+ __chash = __next_chash;
1912
+ }
1913
+ } else { // When __next is a nullptr we've fully erased the last bucket. Update the bucket list accordingly.
1914
+ __bucket_list_[__chash] = nullptr;
1915
+ }
1916
+ }
1917
+
1918
+ // re-link __before_first with __last
1919
+ __before_first->__next_ = __current;
1920
+
1921
+ return iterator(__last.__node_);
1908
1922
  }
1909
1923
 
1910
1924
  template <class _Tp, class _Hash, class _Equal, class _Alloc>