diff -Nrcpad gcc-16-20260201/ChangeLog gcc-16-20260208/ChangeLog
*** gcc-16-20260201/ChangeLog	Sun Feb  1 22:32:06 2026
--- gcc-16-20260208/ChangeLog	Sun Feb  8 22:32:05 2026
***************
*** 1,3 ****
--- 1,22 ----
+ 2026-02-05  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR d/116975
+ 	* Makefile.in: Regenerate.
+ 	* Makefile.tpl (STAGE[+id+]_GDCFLAGS): New.
+ 	(STAGE2_GDCFLAGS): Add -fno-checking.
+ 	(STAGE3_GDCFLAGS): Add -fchecking=1.
+ 	(BASE_FLAGS_TO_PASS): Pass STAGE[+id+]_GDCFLAGS down.
+ 	(configure-stage[+id+]-[+prefix+][+module+]): Set GDCFLAGS for all gcc
+ 	module stages.
+ 	(all-stage[+id+]-[+prefix+][+module+]): Likewise.
+ 
+ 2026-02-04  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* Makefile.tpl (STAGE1_CONFIGURE_FLAGS, STAGE2_CONFIGURE_FLAGS,
+ 	STAGEprofile_CONFIGURE_FLAGS): Append --disable-libstdcxx-pch if
+ 	target-libstdc++-v3-bootstrap.
+ 	* Makefile.in: Regenerate.
+ 
  2026-01-22  Alejandro Colomar  <alx@kernel.org>
  
  	* MAINTAINERS: Add myself to Write After Approval and DCO
diff -Nrcpad gcc-16-20260201/LAST_UPDATED gcc-16-20260208/LAST_UPDATED
*** gcc-16-20260201/LAST_UPDATED	Sun Feb  1 22:32:21 2026
--- gcc-16-20260208/LAST_UPDATED	Sun Feb  8 22:32:21 2026
***************
*** 1 ****
! Obtained from git: master revision 7eac62572c7955e38760a906debea5cbed846491
--- 1 ----
! Obtained from git: master revision df7f52b3a4ca00b64baf31c57c506fe3afe51c9f
diff -Nrcpad gcc-16-20260201/MD5SUMS gcc-16-20260208/MD5SUMS
*** gcc-16-20260201/MD5SUMS	Sun Feb  1 22:32:26 2026
--- gcc-16-20260208/MD5SUMS	Sun Feb  8 22:32:26 2026
***************
*** 1,5 ****
  # This file contains the MD5 checksums of the files in the
! # gcc-16-20260201.tar.xz tarball.
  #
  # Besides verifying that all files in the tarball were correctly expanded,
  # it also can be used to determine if any files have changed since the
--- 1,5 ----
  # This file contains the MD5 checksums of the files in the
! # gcc-16-20260208.tar.xz tarball.
  #
  # Besides verifying that all files in the tarball were correctly expanded,
  # it also can be used to determine if any files have changed since the
*************** ac5a8807f431d3dab46a7425b96379e4  .gitig
*** 24,38 ****
  fe60d87048567d4fe8c8a0ed2448bcc8  COPYING.RUNTIME
  d32239bcb673463ab874e80d47fae504  COPYING3
  6a6a8e020838b23406c81b19c1d46df6  COPYING3.LIB
! e7934fd1dc002b83ffe40322ac8a4348  ChangeLog
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! c7a54e9606fd1c455fa128286d867200  LAST_UPDATED
  b8fa044b3336d9cc6214e6ff3e9b467d  MAINTAINERS
  af43617880b3cd9c10627c97e639d29e  Makefile.def
! 1ce83cd940f8facbf202979ac1b7b2c4  Makefile.in
! 98d7e10ec29466105ecf01effa809a77  Makefile.tpl
  80d26bc3b1ad4f6969a96a24c9181bf5  README
  7be8773244474bc82211a4726f43c3c8  SECURITY.txt
  a657821f65bab77f4fbf3a75cdee6da9  ar-lib
--- 24,38 ----
  fe60d87048567d4fe8c8a0ed2448bcc8  COPYING.RUNTIME
  d32239bcb673463ab874e80d47fae504  COPYING3
  6a6a8e020838b23406c81b19c1d46df6  COPYING3.LIB
! 21e69cbaf07a5480dd0169a5bbfb6efc  ChangeLog
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! eaa2d546236e66cc8f9d5e549a8c47b0  LAST_UPDATED
  b8fa044b3336d9cc6214e6ff3e9b467d  MAINTAINERS
  af43617880b3cd9c10627c97e639d29e  Makefile.def
! 734342371d8ccc2c81cb2d8b3d040f33  Makefile.in
! bd7a6cf48b6a530442ffaee7ea118c2d  Makefile.tpl
  80d26bc3b1ad4f6969a96a24c9181bf5  README
  7be8773244474bc82211a4726f43c3c8  SECURITY.txt
  a657821f65bab77f4fbf3a75cdee6da9  ar-lib
*************** c5a60ac6626343968c4ef1fdf261bf62  c++too
*** 49,55 ****
  c64564b7c7563dae5ebe016f340c9cd9  config.guess
  040359150cf11493f973a46d8a25b06b  config.rpath
  111d54aa3a3019adbab413c8fb435f22  config.sub
! 9880febd038d40bf6aa0192a3adac1c7  config/ChangeLog
  e8365ab73da09dccff77a6e2ad006a68  config/acinclude.m4
  45979039ae56d255a866095bc20985a4  config/acx.m4
  6b030f5cf640bdd401ea739f54a667f8  config/asmcfi.m4
--- 49,55 ----
  c64564b7c7563dae5ebe016f340c9cd9  config.guess
  040359150cf11493f973a46d8a25b06b  config.rpath
  111d54aa3a3019adbab413c8fb435f22  config.sub
! 9d674ac77e4d53d9dc6398a6f1ac1080  config/ChangeLog
  e8365ab73da09dccff77a6e2ad006a68  config/acinclude.m4
  45979039ae56d255a866095bc20985a4  config/acx.m4
  6b030f5cf640bdd401ea739f54a667f8  config/asmcfi.m4
*************** babb6167c05386834412652e8b27239e  config
*** 72,78 ****
  584327e59bbe42cfcf0b041fed0f4526  config/bootstrap-hwasan.mk
  a3bca109766820001668b4d4f41057c6  config/bootstrap-lto-lean.mk
  368ab20dabf5bad2d11c823374576d75  config/bootstrap-lto-locality-cpp-template.mk
! c848c13e0ea39451f067f8d1404d9982  config/bootstrap-lto-locality.mk
  33768879cdb11bf946d977ab6632d169  config/bootstrap-lto-noplugin.mk
  ece3bc716fac1aca84326d40b97a4b4b  config/bootstrap-lto.mk
  396cc6dfa851e80723ab6ffc37778a6b  config/bootstrap-native.mk
--- 72,78 ----
  584327e59bbe42cfcf0b041fed0f4526  config/bootstrap-hwasan.mk
  a3bca109766820001668b4d4f41057c6  config/bootstrap-lto-lean.mk
  368ab20dabf5bad2d11c823374576d75  config/bootstrap-lto-locality-cpp-template.mk
! 18eac208d85a63afda88fc55d7baac60  config/bootstrap-lto-locality.mk
  33768879cdb11bf946d977ab6632d169  config/bootstrap-lto-noplugin.mk
  ece3bc716fac1aca84326d40b97a4b4b  config/bootstrap-lto.mk
  396cc6dfa851e80723ab6ffc37778a6b  config/bootstrap-native.mk
*************** e2dc6b4fd62b77bff96b7951ef74f78f  config
*** 159,165 ****
  db74a73c3c9c3cc71edec37c2436e082  config/zstd.m4
  a4cf7c1e80a4ca16c7140da014eb6160  configure
  c6c041ed3d45073918c4c65f8b25e93c  configure.ac
! 7a6e3f8796c0c2e0d31adea588bbc109  contrib/ChangeLog
  5fc435c7928f858246df931ea3f3ece7  contrib/ChangeLog.jit
  7af8d2979bf1a7cfa88e30d05fa22be2  contrib/ChangeLog.tree-ssa
  0928ae42250fbb57246cf6e9bff2276b  contrib/analyze_brprob.py
--- 159,165 ----
  db74a73c3c9c3cc71edec37c2436e082  config/zstd.m4
  a4cf7c1e80a4ca16c7140da014eb6160  configure
  c6c041ed3d45073918c4c65f8b25e93c  configure.ac
! adceccddede3cdb302d0b504aa36c667  contrib/ChangeLog
  5fc435c7928f858246df931ea3f3ece7  contrib/ChangeLog.jit
  7af8d2979bf1a7cfa88e30d05fa22be2  contrib/ChangeLog.tree-ssa
  0928ae42250fbb57246cf6e9bff2276b  contrib/analyze_brprob.py
*************** fe0f3407e74565a0439ac210148486ca  contri
*** 167,173 ****
  f32ea8aa594c39765895562afc43e221  contrib/bench-stringop
  0fbcabcb8183944b68d52dd4683c73f8  contrib/check-MAINTAINERS.py
  14d637c1673ab29eb925fc542cf5955c  contrib/check-internal-format-escaping.py
! 5a66a03af83c17aab7701501242248a6  contrib/check-params-in-docs.py
  7718189f09f512492ac48fac60f8ce42  contrib/check_GNU_style.py
  3b3c8f407009373e1539531cbaca4c92  contrib/check_GNU_style.sh
  6fc056aab34be7fd77f0144eb1b63c28  contrib/check_GNU_style_lib.py
--- 167,173 ----
  f32ea8aa594c39765895562afc43e221  contrib/bench-stringop
  0fbcabcb8183944b68d52dd4683c73f8  contrib/check-MAINTAINERS.py
  14d637c1673ab29eb925fc542cf5955c  contrib/check-internal-format-escaping.py
! 71d1b41247c5c74fb047e13edec7e323  contrib/check-params-in-docs.py
  7718189f09f512492ac48fac60f8ce42  contrib/check_GNU_style.py
  3b3c8f407009373e1539531cbaca4c92  contrib/check_GNU_style.sh
  6fc056aab34be7fd77f0144eb1b63c28  contrib/check_GNU_style_lib.py
*************** c3217001bd26d7357f97d76467773e6d  contri
*** 195,201 ****
  4e50fd99a99e20a0c72a4074b767438d  contrib/dg-out-generator.pl
  c453348f88ec592d49be554008473ba8  contrib/dglib.pm
  1a43c19edffafd7cca44c23265ada323  contrib/diffsummary.py
! 7c36bf70dad4f6d7e758fe90265a5f40  contrib/download_prerequisites
  b2b30ad8002f32e2fea7dbe3f1142ae1  contrib/filter-clang-warnings.py
  332fd0835826d637b5b6cf8db14358a5  contrib/filter_gcc_for_doxygen
  db03e57377f9eb202b7b783eb81fe40d  contrib/filter_knr2ansi.pl
--- 195,201 ----
  4e50fd99a99e20a0c72a4074b767438d  contrib/dg-out-generator.pl
  c453348f88ec592d49be554008473ba8  contrib/dglib.pm
  1a43c19edffafd7cca44c23265ada323  contrib/diffsummary.py
! 8dc14393e30704e0fd1913e770ceda5b  contrib/download_prerequisites
  b2b30ad8002f32e2fea7dbe3f1142ae1  contrib/filter-clang-warnings.py
  332fd0835826d637b5b6cf8db14358a5  contrib/filter_gcc_for_doxygen
  db03e57377f9eb202b7b783eb81fe40d  contrib/filter_knr2ansi.pl
*************** f15bc3c5de22eac0bdd4f611502139a0  gcc/AB
*** 520,526 ****
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! fde7f4867799dcd5b4c0bb191aae5331  gcc/ChangeLog
  51281e73aa07fb62394bd72f3c9299ba  gcc/ChangeLog-1997
  f77af8c9ac412064886b00c5506123b5  gcc/ChangeLog-1998
  00a2e4ead1b289bf69bca0196fed6f9f  gcc/ChangeLog-1999
--- 520,526 ----
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! 6d56f190687e488e3ae720164635727b  gcc/ChangeLog
  51281e73aa07fb62394bd72f3c9299ba  gcc/ChangeLog-1997
  f77af8c9ac412064886b00c5506123b5  gcc/ChangeLog-1998
  00a2e4ead1b289bf69bca0196fed6f9f  gcc/ChangeLog-1999
*************** fb3fadb88e1d2b3b640cfaaa5ff11780  gcc/Ch
*** 558,576 ****
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! ba0283137050d8feb04f9801cc212fed  gcc/DATESTAMP
  deb513e591f23901188e22323bd3b1d4  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
  36698274bb69e2ada20f5cc434f3caa5  gcc/FSFChangeLog.11
  a817c5577f2b35f8d2481c787e3ff7e2  gcc/LANGUAGES
! 2ee667f2715e04f707186820f083d854  gcc/Makefile.in
  ec6799501b2eb2923d5de6a66169dbd2  gcc/ONEWS
  c8c9dd1eaee4ffd4d5d9f3ab70fddd4b  gcc/README.Portability
! 868da9a9c47854ff127b79f03744e4f3  gcc/acinclude.m4
  e74733ebf762151e601c9e0aa1461a20  gcc/aclocal.m4
  16a499934b71eb6cf7c0d6899cd6006a  gcc/ada/.gitignore
! a023d4e9557c72473b4f724ba17887d0  gcc/ada/ChangeLog
  c2094c0d3135f9ac89917f162046ee04  gcc/ada/ChangeLog-2001
  fa410b57f5d814d5d3ac3b45f486cdcf  gcc/ada/ChangeLog-2002
  2dbefa7bdc8dc28ec746002028861278  gcc/ada/ChangeLog-2003
--- 558,576 ----
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! 10db6de51241b443d6ab0c3bbedfbb0a  gcc/DATESTAMP
  deb513e591f23901188e22323bd3b1d4  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
  36698274bb69e2ada20f5cc434f3caa5  gcc/FSFChangeLog.11
  a817c5577f2b35f8d2481c787e3ff7e2  gcc/LANGUAGES
! 6e078f7e2aab9137989205977e7a229b  gcc/Makefile.in
  ec6799501b2eb2923d5de6a66169dbd2  gcc/ONEWS
  c8c9dd1eaee4ffd4d5d9f3ab70fddd4b  gcc/README.Portability
! 78a1f6269690344ab8283aef47b01988  gcc/acinclude.m4
  e74733ebf762151e601c9e0aa1461a20  gcc/aclocal.m4
  16a499934b71eb6cf7c0d6899cd6006a  gcc/ada/.gitignore
! 588fde6e22491809566ee15d9dd0572c  gcc/ada/ChangeLog
  c2094c0d3135f9ac89917f162046ee04  gcc/ada/ChangeLog-2001
  fa410b57f5d814d5d3ac3b45f486cdcf  gcc/ada/ChangeLog-2002
  2dbefa7bdc8dc28ec746002028861278  gcc/ada/ChangeLog-2003
*************** c2c2ce0ac85db6276eb58438ed0655a7  gcc/ad
*** 660,666 ****
  4f4e391248e66a4b9cc396f9765ce4f2  gcc/ada/butil.ads
  29d9f902f66fe8415f5b9f300ca23b66  gcc/ada/casing.adb
  25bd0c7e9883d8c218b0ab36b2859de6  gcc/ada/casing.ads
! 71c263de33c7499416e241827179b220  gcc/ada/checks.adb
  718318d8ff137c5dfb3728ef75ba7f59  gcc/ada/checks.ads
  403bc6a6d72b88976a0ccc8ff9459d77  gcc/ada/cio.c
  87a1a7be553e1cbb5ccf25ba67166d4c  gcc/ada/clean.adb
--- 660,666 ----
  4f4e391248e66a4b9cc396f9765ce4f2  gcc/ada/butil.ads
  29d9f902f66fe8415f5b9f300ca23b66  gcc/ada/casing.adb
  25bd0c7e9883d8c218b0ab36b2859de6  gcc/ada/casing.ads
! 08ad91a7d93ff92355dab382fa7ffc78  gcc/ada/checks.adb
  718318d8ff137c5dfb3728ef75ba7f59  gcc/ada/checks.ads
  403bc6a6d72b88976a0ccc8ff9459d77  gcc/ada/cio.c
  87a1a7be553e1cbb5ccf25ba67166d4c  gcc/ada/clean.adb
*************** ace7dfdd53834601d964efef9557e0f4  gcc/ad
*** 770,776 ****
  aec86f795b370fca1379a25f37651fdf  gcc/ada/exp_ch2.ads
  bfede432412bc3d7ee70e14cbda137e3  gcc/ada/exp_ch3.adb
  52ca7939bd6b0e1da9e20d902813d109  gcc/ada/exp_ch3.ads
! 629380143b0e6151369479581deb68ab  gcc/ada/exp_ch4.adb
  2d9cf8b148fdc7a07edde2cf9fbb59f8  gcc/ada/exp_ch4.ads
  14be4614e917c455830a799b3e214921  gcc/ada/exp_ch5.adb
  962c51f1fad8395553b843179ba06b79  gcc/ada/exp_ch5.ads
--- 770,776 ----
  aec86f795b370fca1379a25f37651fdf  gcc/ada/exp_ch2.ads
  bfede432412bc3d7ee70e14cbda137e3  gcc/ada/exp_ch3.adb
  52ca7939bd6b0e1da9e20d902813d109  gcc/ada/exp_ch3.ads
! 87f44483a3d7fa1cf3986bce3e5f16a6  gcc/ada/exp_ch4.adb
  2d9cf8b148fdc7a07edde2cf9fbb59f8  gcc/ada/exp_ch4.ads
  14be4614e917c455830a799b3e214921  gcc/ada/exp_ch5.adb
  962c51f1fad8395553b843179ba06b79  gcc/ada/exp_ch5.ads
*************** c47ba9b98b3b3fcb6b4ff2a07c14b657  gcc/ad
*** 2921,2927 ****
  fdd750bd30c3186d912dfed4717a2c0c  gcc/ada/sem_ch4.ads
  372b91efba4677bbb8b51f4359144013  gcc/ada/sem_ch5.adb
  d3937c73217b5f3ef2540a47e52cbf4a  gcc/ada/sem_ch5.ads
! e0baeb5c3e8c2acb3432fb3e0074e9fb  gcc/ada/sem_ch6.adb
  9ac8c4c57213097618cdb7c0b7b4f47b  gcc/ada/sem_ch6.ads
  6c05670fbd82229849d311d294644670  gcc/ada/sem_ch7.adb
  fb1c349ef07024975dc745e7e7908a34  gcc/ada/sem_ch7.ads
--- 2921,2927 ----
  fdd750bd30c3186d912dfed4717a2c0c  gcc/ada/sem_ch4.ads
  372b91efba4677bbb8b51f4359144013  gcc/ada/sem_ch5.adb
  d3937c73217b5f3ef2540a47e52cbf4a  gcc/ada/sem_ch5.ads
! 5bbd8a73962dff2109bc375d2e1999c0  gcc/ada/sem_ch6.adb
  9ac8c4c57213097618cdb7c0b7b4f47b  gcc/ada/sem_ch6.ads
  6c05670fbd82229849d311d294644670  gcc/ada/sem_ch7.adb
  fb1c349ef07024975dc745e7e7908a34  gcc/ada/sem_ch7.ads
*************** bde96e6a1464ed682c5655d726cdd21a  gcc/ad
*** 2955,2961 ****
  21afb93e10bb9446fcbf7577bbf39c7f  gcc/ada/sem_smem.ads
  b206c38c506b809f66fb07036016356f  gcc/ada/sem_type.adb
  65653b347d1d3f800e49cd916a551d1c  gcc/ada/sem_type.ads
! 16750cf36ad11693048a818ffb8d2b22  gcc/ada/sem_util.adb
  ec5c6d315fe729aab9bd7b8889560f62  gcc/ada/sem_util.ads
  b16d94872ec070685f3ac84b8967f7fe  gcc/ada/sem_warn.adb
  1952fbda97ea4c6506f452eac9934bb4  gcc/ada/sem_warn.ads
--- 2955,2961 ----
  21afb93e10bb9446fcbf7577bbf39c7f  gcc/ada/sem_smem.ads
  b206c38c506b809f66fb07036016356f  gcc/ada/sem_type.adb
  65653b347d1d3f800e49cd916a551d1c  gcc/ada/sem_type.ads
! 03f9cbb4cdca39b0dcb58fa9cd30d37c  gcc/ada/sem_util.adb
  ec5c6d315fe729aab9bd7b8889560f62  gcc/ada/sem_util.ads
  b16d94872ec070685f3ac84b8967f7fe  gcc/ada/sem_warn.adb
  1952fbda97ea4c6506f452eac9934bb4  gcc/ada/sem_warn.ads
*************** d22c314f3748309f812d78f5217dda61  gcc/ad
*** 3061,3088 ****
  06b46bffb1b84e16a6f48b29177f42c4  gcc/ada/xutil.ads
  faeebcb240c1559aceb7d9c18c8e6b89  gcc/addresses.h
  ebe64421041bf4ef9153e26a6dc60532  gcc/adjust-alignment.cc
! 55e8918dfe462fca3ca765cd59322521  gcc/algol68/ChangeLog
! f60acb6e085140c1368b22851361db0e  gcc/algol68/Make-lang.in
  3d3f2f95b917d0f77d57d977f3eb93d8  gcc/algol68/README
  fb43be530798e23528ffc144413b80a9  gcc/algol68/a68-diagnostics.cc
! 5a0aa2bd361bf3a8eef0d814a0d93611  gcc/algol68/a68-exports.cc
  237db35c9725eb65027ad7adf2f0527e  gcc/algol68/a68-imports.cc
  0904dc65c8116eaecb8d99576391c5dc  gcc/algol68/a68-lang.cc
! ff5aa147ff361b3bce9b86c3c7c059c9  gcc/algol68/a68-low-bits.cc
  284cf6c8827f78791575949cc1f634ef  gcc/algol68/a68-low-bools.cc
  421c70a781dc2c00722aa019bc39f683  gcc/algol68/a68-low-builtins.cc
  ade291f272227055db98bddb78ff715f  gcc/algol68/a68-low-chars.cc
! 80f345dde4758df75fe0365d54312b72  gcc/algol68/a68-low-clauses.cc
  b8582dd8bfb1b150fad9cafd7bbaa3c6  gcc/algol68/a68-low-coercions.cc
  5aa76e1c20ed5b89f9d01211f6bb6cc6  gcc/algol68/a68-low-complex.cc
! 0d1ac14bae05c9d3000a860bfd235a51  gcc/algol68/a68-low-decls.cc
  c57bfad420a3fc9e3f36e22e0b61c523  gcc/algol68/a68-low-generator.cc
  49e9c1592266268c752da49a2ef0bbc9  gcc/algol68/a68-low-ints.cc
  949d0f0a5f79da34ba44f79c6ebfe282  gcc/algol68/a68-low-misc.cc
  8e958b50675b076eba75cf460e2332bb  gcc/algol68/a68-low-moids.cc
  1234b64ced731d809a0b56edb4104ead  gcc/algol68/a68-low-multiples.cc
  27c76eb63da6836b08745b3bd22e8c64  gcc/algol68/a68-low-posix.cc
! 330fabf65d0991fd441e559288552da6  gcc/algol68/a68-low-prelude.cc
  b761d3ea5bc6d29640619297fd8a70b6  gcc/algol68/a68-low-procs.cc
  335ffa6c3b75121835fb8d3c30f87b67  gcc/algol68/a68-low-ranges.cc
  4d895047574428a4a2c4f2452766f8ff  gcc/algol68/a68-low-reals.cc
--- 3061,3089 ----
  06b46bffb1b84e16a6f48b29177f42c4  gcc/ada/xutil.ads
  faeebcb240c1559aceb7d9c18c8e6b89  gcc/addresses.h
  ebe64421041bf4ef9153e26a6dc60532  gcc/adjust-alignment.cc
! 71aa4b314a1cb95920aa34eb27988e96  gcc/algol68/ChangeLog
! d02d7b8b2d2659243307a0d247253ec4  gcc/algol68/Make-lang.in
  3d3f2f95b917d0f77d57d977f3eb93d8  gcc/algol68/README
  fb43be530798e23528ffc144413b80a9  gcc/algol68/a68-diagnostics.cc
! 27119d3e1e8fce1677a27ca87cc9de1e  gcc/algol68/a68-exports.cc
  237db35c9725eb65027ad7adf2f0527e  gcc/algol68/a68-imports.cc
  0904dc65c8116eaecb8d99576391c5dc  gcc/algol68/a68-lang.cc
! 88ab6b01017ce2d82f463f024b26245b  gcc/algol68/a68-low-bits.cc
  284cf6c8827f78791575949cc1f634ef  gcc/algol68/a68-low-bools.cc
  421c70a781dc2c00722aa019bc39f683  gcc/algol68/a68-low-builtins.cc
  ade291f272227055db98bddb78ff715f  gcc/algol68/a68-low-chars.cc
! 4a9e0cb255d3e694fb0c5209d63ed476  gcc/algol68/a68-low-clauses.cc
  b8582dd8bfb1b150fad9cafd7bbaa3c6  gcc/algol68/a68-low-coercions.cc
  5aa76e1c20ed5b89f9d01211f6bb6cc6  gcc/algol68/a68-low-complex.cc
! fb2d06e1ab97449a52e96618e292e987  gcc/algol68/a68-low-decls.cc
  c57bfad420a3fc9e3f36e22e0b61c523  gcc/algol68/a68-low-generator.cc
+ c762f8cd72942b6e3d06a3915e13f883  gcc/algol68/a68-low-holes.cc
  49e9c1592266268c752da49a2ef0bbc9  gcc/algol68/a68-low-ints.cc
  949d0f0a5f79da34ba44f79c6ebfe282  gcc/algol68/a68-low-misc.cc
  8e958b50675b076eba75cf460e2332bb  gcc/algol68/a68-low-moids.cc
  1234b64ced731d809a0b56edb4104ead  gcc/algol68/a68-low-multiples.cc
  27c76eb63da6836b08745b3bd22e8c64  gcc/algol68/a68-low-posix.cc
! 5a5cd02060ae884dcf7a9ec6b7c39de0  gcc/algol68/a68-low-prelude.cc
  b761d3ea5bc6d29640619297fd8a70b6  gcc/algol68/a68-low-procs.cc
  335ffa6c3b75121835fb8d3c30f87b67  gcc/algol68/a68-low-ranges.cc
  4d895047574428a4a2c4f2452766f8ff  gcc/algol68/a68-low-reals.cc
*************** aebb4c3b9e607164c25541593333b832  gcc/al
*** 3092,3107 ****
  a3640e0464c9f225e1f6e23c6e1b7a25  gcc/algol68/a68-low-strings.cc
  de4cb485173b396d55860a98e328be5b  gcc/algol68/a68-low-structs.cc
  7675b3dfcea25bedcbe52f98cecdf7e2  gcc/algol68/a68-low-unions.cc
! 6e2abc0aeb32c0385697bad24b0f3637  gcc/algol68/a68-low-units.cc
! 3c528918f475a9a774f20d1fc8e6760b  gcc/algol68/a68-low.cc
  406bb4b4a8736ed19545acebc61effbd  gcc/algol68/a68-moids-diagnostics.cc
! f78fd344dd937e8275e01a56a0bfd210  gcc/algol68/a68-moids-misc.cc
  93ab5a30cda3f697bee77eba313c66d6  gcc/algol68/a68-moids-to-string.cc
  5cba262e501051ca9bc9e3c0cec33e74  gcc/algol68/a68-parser-attrs.def
  ffe54034f666cf5a46987107130cf11d  gcc/algol68/a68-parser-bottom-up.cc
  11c6e7547ee9292410a3b91692ea6ad1  gcc/algol68/a68-parser-brackets.cc
  06167f432b9437d0cc135868d1067782  gcc/algol68/a68-parser-debug.cc
! ecacb7da96af4cd85137e15a6aa3fa6f  gcc/algol68/a68-parser-extract.cc
  fc7ae86022255700f5866b320d5b195d  gcc/algol68/a68-parser-keywords.cc
  233e85e1d109735e63bc9c3367f89a54  gcc/algol68/a68-parser-modes.cc
  1b5ff58c15f9dc7aab0bc4b94d6e492a  gcc/algol68/a68-parser-moids-check.cc
--- 3093,3108 ----
  a3640e0464c9f225e1f6e23c6e1b7a25  gcc/algol68/a68-low-strings.cc
  de4cb485173b396d55860a98e328be5b  gcc/algol68/a68-low-structs.cc
  7675b3dfcea25bedcbe52f98cecdf7e2  gcc/algol68/a68-low-unions.cc
! 19feb8b7c2b4f8f2196bdaecdd51ae36  gcc/algol68/a68-low-units.cc
! 675023fae14be04594a5ff566c4621d9  gcc/algol68/a68-low.cc
  406bb4b4a8736ed19545acebc61effbd  gcc/algol68/a68-moids-diagnostics.cc
! 70c2551ca7ba966a4938331e1d173d4b  gcc/algol68/a68-moids-misc.cc
  93ab5a30cda3f697bee77eba313c66d6  gcc/algol68/a68-moids-to-string.cc
  5cba262e501051ca9bc9e3c0cec33e74  gcc/algol68/a68-parser-attrs.def
  ffe54034f666cf5a46987107130cf11d  gcc/algol68/a68-parser-bottom-up.cc
  11c6e7547ee9292410a3b91692ea6ad1  gcc/algol68/a68-parser-brackets.cc
  06167f432b9437d0cc135868d1067782  gcc/algol68/a68-parser-debug.cc
! e14368c497a718a8ca29ecca4348f3cc  gcc/algol68/a68-parser-extract.cc
  fc7ae86022255700f5866b320d5b195d  gcc/algol68/a68-parser-keywords.cc
  233e85e1d109735e63bc9c3367f89a54  gcc/algol68/a68-parser-modes.cc
  1b5ff58c15f9dc7aab0bc4b94d6e492a  gcc/algol68/a68-parser-moids-check.cc
*************** d259fcdbab02c9c536b330f7111ae7cf  gcc/al
*** 3115,3142 ****
  a9ddec5672076028211732bc7255ace7  gcc/algol68/a68-parser-taxes.cc
  fc36c82bc446f517d1380e1795c8936d  gcc/algol68/a68-parser-top-down.cc
  c54eef49e5d275f325d29b6c54fb4644  gcc/algol68/a68-parser-victal.cc
! 962041c4a7f7c6bba6bd41c7521e1791  gcc/algol68/a68-parser.cc
  bb6a9492686645cd8ede63a3aa41bb2e  gcc/algol68/a68-postulates.cc
  614ee2f3c97cf1910484b4ba1b697352  gcc/algol68/a68-tree.def
! fad4cc97edd0db85ad312f03ccd4fc64  gcc/algol68/a68-types.h
  384e3fcca47f6f61b529f8d95656824a  gcc/algol68/a68-unistr.c
! 5bc121bfb8108e8aa4180b123c348a2c  gcc/algol68/a68.h
  cbc2ddca0589edc81c7df109b1a1927b  gcc/algol68/a68spec.cc
  ca4abac71b91773df74abdea22798551  gcc/algol68/config-lang.in
  bb6b91d4e3b8db4de664e7697a23229d  gcc/algol68/ga68-coding-guidelines.texi
  3944dc558e8139d69cdc73ffdbe90cc7  gcc/algol68/ga68-exports.pk
  f150e2c760036b980e94ec7bb14e1172  gcc/algol68/ga68-internals.texi
! 23271afd5f7350feb53f4fda76fc4b9f  gcc/algol68/ga68.texi
  6e162644e83dbcfbcfbacd36f1e64f3c  gcc/algol68/ga68.vw
  0a91d85c360d5ee3eb6258aecdab4636  gcc/algol68/lang-specs.h
  4dee1792b7542097a5ee3314742a16b4  gcc/algol68/lang.opt
  411f26970a0d93b07c697a1bcfeda50c  gcc/algol68/lang.opt.urls
! 1f802727a4e770bf3f2c903eba8de64b  gcc/alias.cc
  b7dd8bd2dd68f81643704bf0b73553a1  gcc/alias.h
  71901705cb0e11732bae53ff9de25faf  gcc/align.h
  f2345b2fdc9d2d5a75fe90d30444a114  gcc/alloc-pool.cc
  7657598f465321837951c858ab918f57  gcc/alloc-pool.h
! c5039f04545dc04643f87ad7ccf9ea46  gcc/analyzer/ChangeLog
  a53ebffbaabe6bc3664d659c554fedb3  gcc/analyzer/access-diagram.cc
  c41fa6be7ca91f40a15a7b8f03732d25  gcc/analyzer/access-diagram.h
  d97e417faf9694fdbd68f91aee129bd2  gcc/analyzer/ana-state-to-diagnostic-state.cc
--- 3116,3143 ----
  a9ddec5672076028211732bc7255ace7  gcc/algol68/a68-parser-taxes.cc
  fc36c82bc446f517d1380e1795c8936d  gcc/algol68/a68-parser-top-down.cc
  c54eef49e5d275f325d29b6c54fb4644  gcc/algol68/a68-parser-victal.cc
! e6bebfb8dd9bd32b00dc67b48a302f10  gcc/algol68/a68-parser.cc
  bb6a9492686645cd8ede63a3aa41bb2e  gcc/algol68/a68-postulates.cc
  614ee2f3c97cf1910484b4ba1b697352  gcc/algol68/a68-tree.def
! 902bc37d4c1e6f0790867a9a76d446c5  gcc/algol68/a68-types.h
  384e3fcca47f6f61b529f8d95656824a  gcc/algol68/a68-unistr.c
! dace2e26231b41c85b8bce77f17512b7  gcc/algol68/a68.h
  cbc2ddca0589edc81c7df109b1a1927b  gcc/algol68/a68spec.cc
  ca4abac71b91773df74abdea22798551  gcc/algol68/config-lang.in
  bb6b91d4e3b8db4de664e7697a23229d  gcc/algol68/ga68-coding-guidelines.texi
  3944dc558e8139d69cdc73ffdbe90cc7  gcc/algol68/ga68-exports.pk
  f150e2c760036b980e94ec7bb14e1172  gcc/algol68/ga68-internals.texi
! 14663848b61ebf025c7338f59234640e  gcc/algol68/ga68.texi
  6e162644e83dbcfbcfbacd36f1e64f3c  gcc/algol68/ga68.vw
  0a91d85c360d5ee3eb6258aecdab4636  gcc/algol68/lang-specs.h
  4dee1792b7542097a5ee3314742a16b4  gcc/algol68/lang.opt
  411f26970a0d93b07c697a1bcfeda50c  gcc/algol68/lang.opt.urls
! 0dc8a618ee2d3f1aeea3ff47c36d8d83  gcc/alias.cc
  b7dd8bd2dd68f81643704bf0b73553a1  gcc/alias.h
  71901705cb0e11732bae53ff9de25faf  gcc/align.h
  f2345b2fdc9d2d5a75fe90d30444a114  gcc/alloc-pool.cc
  7657598f465321837951c858ab918f57  gcc/alloc-pool.h
! fc22556fe79ea16f052cbc92e7da6efa  gcc/analyzer/ChangeLog
  a53ebffbaabe6bc3664d659c554fedb3  gcc/analyzer/access-diagram.cc
  c41fa6be7ca91f40a15a7b8f03732d25  gcc/analyzer/access-diagram.h
  d97e417faf9694fdbd68f91aee129bd2  gcc/analyzer/ana-state-to-diagnostic-state.cc
*************** bc77cd1e5aec40e5623c49cb8974b3d4  gcc/an
*** 3168,3174 ****
  4bdbe0c472a1b7a39557a9d0073f045b  gcc/analyzer/checker-event.h
  27f8555a4210038eaa81c4f1f66b0d6b  gcc/analyzer/checker-path.cc
  869cacfa0b942d7ed33ff8b774738bb3  gcc/analyzer/checker-path.h
! 4b21663a49a3b9fce26ddbc4c6548d47  gcc/analyzer/common.h
  5ff0274ed0a527fd34bb3ec30c36543f  gcc/analyzer/complexity.cc
  f945a407a1ad45be621e572190f6e11f  gcc/analyzer/complexity.h
  f2a1d7a4677cd4523c0638208513d259  gcc/analyzer/constraint-manager.cc
--- 3169,3175 ----
  4bdbe0c472a1b7a39557a9d0073f045b  gcc/analyzer/checker-event.h
  27f8555a4210038eaa81c4f1f66b0d6b  gcc/analyzer/checker-path.cc
  869cacfa0b942d7ed33ff8b774738bb3  gcc/analyzer/checker-path.h
! 6712495ad4527b26bc77a822585c6ee7  gcc/analyzer/common.h
  5ff0274ed0a527fd34bb3ec30c36543f  gcc/analyzer/complexity.cc
  f945a407a1ad45be621e572190f6e11f  gcc/analyzer/complexity.h
  f2a1d7a4677cd4523c0638208513d259  gcc/analyzer/constraint-manager.cc
*************** f0d253f05a474982aa1e1e4c99a0ff98  gcc/an
*** 3188,3194 ****
  b4cf75f3e9332bcd6b95b1f080c700d8  gcc/analyzer/infinite-recursion.cc
  0a7e1ce7bcc02f6aa0f1660029895b13  gcc/analyzer/inlining-iterator.h
  8af331ea68e39926dae8949ff0e49c24  gcc/analyzer/kf-analyzer.cc
! d5dc5c09dcee6d8ab4accc7a925cf7bc  gcc/analyzer/kf-lang-cp.cc
  a1b024e224c36f32b98b3265e76e36fd  gcc/analyzer/kf.cc
  0652b497ab69835a3ec50cb920b8a973  gcc/analyzer/known-function-manager.cc
  d065f64c3be7da8efff67c73024dd990  gcc/analyzer/known-function-manager.h
--- 3189,3195 ----
  b4cf75f3e9332bcd6b95b1f080c700d8  gcc/analyzer/infinite-recursion.cc
  0a7e1ce7bcc02f6aa0f1660029895b13  gcc/analyzer/inlining-iterator.h
  8af331ea68e39926dae8949ff0e49c24  gcc/analyzer/kf-analyzer.cc
! 8916a9c075a04e691e41ea4601cdb475  gcc/analyzer/kf-lang-cp.cc
  a1b024e224c36f32b98b3265e76e36fd  gcc/analyzer/kf.cc
  0652b497ab69835a3ec50cb920b8a973  gcc/analyzer/known-function-manager.cc
  d065f64c3be7da8efff67c73024dd990  gcc/analyzer/known-function-manager.h
*************** a8c275843686611dd10e89cc7569f89d  gcc/an
*** 3206,3216 ****
  4df6e8532c302bc59b4e417ab38a741a  gcc/analyzer/record-layout.cc
  f93ef89d263e02c779ec129aeead8a28  gcc/analyzer/record-layout.h
  8998fc6abdaaf4914e8f43f86a20d895  gcc/analyzer/region-model-asm.cc
! e00de8d56fc6c1cec16403016173a26a  gcc/analyzer/region-model-manager.cc
  1659367392030852cffeaddae0f5baac  gcc/analyzer/region-model-manager.h
  c24460f53b22bdecc3b9e8af24da1575  gcc/analyzer/region-model-reachability.cc
  93431d9eca086e4c7811afc3a66197ea  gcc/analyzer/region-model-reachability.h
! e616edc58dab106d90d562c455fd713a  gcc/analyzer/region-model.cc
  17f7242ed2e91e694ce2a1fce4e1b4a5  gcc/analyzer/region-model.h
  50ff3eeb08a83ff50dc62d1777c7bc57  gcc/analyzer/region.cc
  7b478bc40e78865e5c23d8a7790c707c  gcc/analyzer/region.h
--- 3207,3217 ----
  4df6e8532c302bc59b4e417ab38a741a  gcc/analyzer/record-layout.cc
  f93ef89d263e02c779ec129aeead8a28  gcc/analyzer/record-layout.h
  8998fc6abdaaf4914e8f43f86a20d895  gcc/analyzer/region-model-asm.cc
! 50e77e4c80ab498c19591fd84861df34  gcc/analyzer/region-model-manager.cc
  1659367392030852cffeaddae0f5baac  gcc/analyzer/region-model-manager.h
  c24460f53b22bdecc3b9e8af24da1575  gcc/analyzer/region-model-reachability.cc
  93431d9eca086e4c7811afc3a66197ea  gcc/analyzer/region-model-reachability.h
! e1a476d44630cf996a4b903f01f086ca  gcc/analyzer/region-model.cc
  17f7242ed2e91e694ce2a1fce4e1b4a5  gcc/analyzer/region-model.h
  50ff3eeb08a83ff50dc62d1777c7bc57  gcc/analyzer/region.cc
  7b478bc40e78865e5c23d8a7790c707c  gcc/analyzer/region.h
*************** ce8b6d3a44b0f46186df88102edf3c2e  gcc/an
*** 3236,3243 ****
  fa9e08e646a34adeb4f02012756b3d74  gcc/analyzer/supergraph-sorting.cc
  a016ed244edf8129b300a1ef13e7f736  gcc/analyzer/supergraph.cc
  e5cf2ee934b248fcec986cf188b85409  gcc/analyzer/supergraph.h
! 5620ff92fa073a6385bf7d8574454084  gcc/analyzer/svalue.cc
! 992bf0306be187e739133fed9070510b  gcc/analyzer/svalue.h
  643152b22a5c7ffccb9633bf2c517f1b  gcc/analyzer/symbol.cc
  bb281e65b69be53cd8eab73e448bb9c1  gcc/analyzer/symbol.h
  f9d4a813f2e42ce32c3296184cdf91a8  gcc/analyzer/trimmed-graph.cc
--- 3237,3244 ----
  fa9e08e646a34adeb4f02012756b3d74  gcc/analyzer/supergraph-sorting.cc
  a016ed244edf8129b300a1ef13e7f736  gcc/analyzer/supergraph.cc
  e5cf2ee934b248fcec986cf188b85409  gcc/analyzer/supergraph.h
! 8ea5e3f69ef61b6efa7500c8e9bc641c  gcc/analyzer/svalue.cc
! e571c2bb60246d3e2426d4b1a282d01b  gcc/analyzer/svalue.h
  643152b22a5c7ffccb9633bf2c517f1b  gcc/analyzer/symbol.cc
  bb281e65b69be53cd8eab73e448bb9c1  gcc/analyzer/symbol.h
  f9d4a813f2e42ce32c3296184cdf91a8  gcc/analyzer/trimmed-graph.cc
*************** ea987115b0f67bce5cc4745e6d5bc4d1  gcc/at
*** 3252,3258 ****
  2d462a57a0a7bbe8bcb22db63f9377ef  gcc/attr-callback.h
  cbe63f3e975481a17ed49898fbbb9d2a  gcc/attr-fnspec.h
  3d7a71537ed817b2c8f0c30cd04c9201  gcc/attr-urls.def
! 3ea409edde3349b724cd812b3e68eb39  gcc/attribs.cc
  feed071e9f711f8ebbc91f8636422f93  gcc/attribs.h
  bd317e24faffad6f2106396f1c3401b1  gcc/auto-inc-dec.cc
  fc353966a860a12cbc161a87f5619b51  gcc/auto-obstack.h
--- 3253,3259 ----
  2d462a57a0a7bbe8bcb22db63f9377ef  gcc/attr-callback.h
  cbe63f3e975481a17ed49898fbbb9d2a  gcc/attr-fnspec.h
  3d7a71537ed817b2c8f0c30cd04c9201  gcc/attr-urls.def
! 5b71b79829c0357c9f49f11450ee17e2  gcc/attribs.cc
  feed071e9f711f8ebbc91f8636422f93  gcc/attribs.h
  bd317e24faffad6f2106396f1c3401b1  gcc/auto-inc-dec.cc
  fc353966a860a12cbc161a87f5619b51  gcc/auto-obstack.h
*************** ebb1ceb69d6cf8ac2cdc227ae45f0eca  gcc/bi
*** 3270,3294 ****
  392eecf8142b4edd3c482f461232166f  gcc/btfout.cc
  6da486aac72d8ac53fc6618dea4dcf2e  gcc/builtin-attrs.def
  4d187b33643d8554f50ad793471e43a2  gcc/builtin-types.def
! 5063344c8646701a891f026a67570182  gcc/builtins.cc
  4dbe6686097ec6c197a24ac373bb9554  gcc/builtins.def
  99d9ddd60ff804d8e24732db43d38bca  gcc/builtins.h
! 816014c976497cf3855d6df39498e7c9  gcc/c-family/ChangeLog
  ea3fa1f4d7390a105fa3caab4f79aaf7  gcc/c-family/ChangeLog.gimple-classes
  aaea141fd41a559841cb76e33800c289  gcc/c-family/c-ada-spec.cc
  f60a13b470e8e51db83383bf9f9f921e  gcc/c-family/c-ada-spec.h
  374e50066ee36fc7f227105c350323f6  gcc/c-family/c-attribs.cc
! 5e55cbd1b8f16d0f2becbaaef489a011  gcc/c-family/c-common.cc
  6522339cd83ff225a1ff9e0eab971eab  gcc/c-family/c-common.def
  81cb275a3cf181ff08d23b453a35d711  gcc/c-family/c-common.h
! 5d6539c5507200bcf1317ef3b4ed7d6a  gcc/c-family/c-cppbuiltin.cc
  0b9194e38297d00cf3fac80365cc07af  gcc/c-family/c-dump.cc
  6ae3bdb693669aee234a91cd79302dcf  gcc/c-family/c-format.cc
  1adde7951b864b565a2b79c5461d43fa  gcc/c-family/c-format.h
! e071c7cca1bf3b1ffda096526fe57a00  gcc/c-family/c-gimplify.cc
  50e638257386d3df7bdf25108fdeb5d1  gcc/c-family/c-indentation.cc
  382fde18b48d137c66c91e21de978037  gcc/c-family/c-indentation.h
! 3405d550814bf29313d29a91146a37bb  gcc/c-family/c-lex.cc
  eb6a10cfada98679dc204a82e929e9e3  gcc/c-family/c-objc.h
  ea297af5bdcb8c784d704a6b99a79c38  gcc/c-family/c-omp.cc
  4b941ed4c4f8ed4c4e6c4622c2f2ecd0  gcc/c-family/c-opts.cc
--- 3271,3295 ----
  392eecf8142b4edd3c482f461232166f  gcc/btfout.cc
  6da486aac72d8ac53fc6618dea4dcf2e  gcc/builtin-attrs.def
  4d187b33643d8554f50ad793471e43a2  gcc/builtin-types.def
! cdcd35bde318b22092b0788986b03a47  gcc/builtins.cc
  4dbe6686097ec6c197a24ac373bb9554  gcc/builtins.def
  99d9ddd60ff804d8e24732db43d38bca  gcc/builtins.h
! 5af1619e4986bf06759ad557ec6f1fed  gcc/c-family/ChangeLog
  ea3fa1f4d7390a105fa3caab4f79aaf7  gcc/c-family/ChangeLog.gimple-classes
  aaea141fd41a559841cb76e33800c289  gcc/c-family/c-ada-spec.cc
  f60a13b470e8e51db83383bf9f9f921e  gcc/c-family/c-ada-spec.h
  374e50066ee36fc7f227105c350323f6  gcc/c-family/c-attribs.cc
! 74c9e7b77d0823f44fc2c4e140154921  gcc/c-family/c-common.cc
  6522339cd83ff225a1ff9e0eab971eab  gcc/c-family/c-common.def
  81cb275a3cf181ff08d23b453a35d711  gcc/c-family/c-common.h
! e1e1df06eba5bbddc37580adfb9356b4  gcc/c-family/c-cppbuiltin.cc
  0b9194e38297d00cf3fac80365cc07af  gcc/c-family/c-dump.cc
  6ae3bdb693669aee234a91cd79302dcf  gcc/c-family/c-format.cc
  1adde7951b864b565a2b79c5461d43fa  gcc/c-family/c-format.h
! 4179a97862f28535be92ef4cab16246e  gcc/c-family/c-gimplify.cc
  50e638257386d3df7bdf25108fdeb5d1  gcc/c-family/c-indentation.cc
  382fde18b48d137c66c91e21de978037  gcc/c-family/c-indentation.h
! 45c8fc8d67953a240dac81ef9fb80c2a  gcc/c-family/c-lex.cc
  eb6a10cfada98679dc204a82e929e9e3  gcc/c-family/c-objc.h
  ea297af5bdcb8c784d704a6b99a79c38  gcc/c-family/c-omp.cc
  4b941ed4c4f8ed4c4e6c4622c2f2ecd0  gcc/c-family/c-opts.cc
*************** ea821c9d267c64dd8b74aad9d0189834  gcc/c-
*** 3316,3337 ****
  377686cbbf62a7d61d251d3f74cddb5b  gcc/c-family/known-headers.h
  431045382c41554804be1959c1596be4  gcc/c-family/name-hint.h
  3bae9e281cc87b35f63e906373f3b446  gcc/c-family/stub-objc.cc
! 598f5cfbba0e4bb473b0952522015ddf  gcc/c/ChangeLog
  0586ab6ff2671f06da9bce04f0604810  gcc/c/Make-lang.in
  3920e3ee16f5b5955d40584fea53c441  gcc/c/c-aux-info.cc
  cd5bab8a4deeaa0369ae59b9403d06a2  gcc/c/c-convert.cc
! e89ce53193092280d00cb0317549ca4d  gcc/c/c-decl.cc
  92707173973fa48fbb8dda88f5af625a  gcc/c/c-errors.cc
  a59a5f126151616976b68fde0c703dd4  gcc/c/c-fold.cc
  817e08cf2d2f4169cb1e5cc26bad1174  gcc/c/c-lang.cc
  62012039da265ed806754029f67a24a9  gcc/c/c-lang.h
! 0edcb3b119c5211635518c4820f27c03  gcc/c/c-objc-common.cc
! 758b8d0dd97c8edc41d5ed80b46e66ba  gcc/c/c-objc-common.h
! d926ea3d2c0d6447d24fb642eacc58b3  gcc/c/c-parser.cc
  f6b634d7c0204c419cf4fb7b48193fad  gcc/c/c-parser.h
  4db955734effe2d0c9aac0379d2e6a8c  gcc/c/c-tree.def
! 76a04f8cce4749dd7af46e1f6a162e7a  gcc/c/c-tree.h
! 92c9e65e5efca1dc0ebb0a34585f44d5  gcc/c/c-typeck.cc
  5804f7ee3eccdfb7c9a64e40b20ccc79  gcc/c/config-lang.in
  58370619d5c4739b7d81d5f899913a0c  gcc/c/gccspec.cc
  3ae90e1d8085765b7e7488ac9673a927  gcc/c/gimple-parser.cc
--- 3317,3338 ----
  377686cbbf62a7d61d251d3f74cddb5b  gcc/c-family/known-headers.h
  431045382c41554804be1959c1596be4  gcc/c-family/name-hint.h
  3bae9e281cc87b35f63e906373f3b446  gcc/c-family/stub-objc.cc
! 6d31e1845aa50667bd65f3c1e9ed2577  gcc/c/ChangeLog
  0586ab6ff2671f06da9bce04f0604810  gcc/c/Make-lang.in
  3920e3ee16f5b5955d40584fea53c441  gcc/c/c-aux-info.cc
  cd5bab8a4deeaa0369ae59b9403d06a2  gcc/c/c-convert.cc
! 215b1087f468e70ae9929c660068504a  gcc/c/c-decl.cc
  92707173973fa48fbb8dda88f5af625a  gcc/c/c-errors.cc
  a59a5f126151616976b68fde0c703dd4  gcc/c/c-fold.cc
  817e08cf2d2f4169cb1e5cc26bad1174  gcc/c/c-lang.cc
  62012039da265ed806754029f67a24a9  gcc/c/c-lang.h
! 1c9369d5b3d8abe53761b5e048d56351  gcc/c/c-objc-common.cc
! cbfdd140f14c43c01a6bdf8b1c24b317  gcc/c/c-objc-common.h
! 9a5c692aff17c3c5eed76edcd09c08ad  gcc/c/c-parser.cc
  f6b634d7c0204c419cf4fb7b48193fad  gcc/c/c-parser.h
  4db955734effe2d0c9aac0379d2e6a8c  gcc/c/c-tree.def
! 13c823cb921888cb458c5573917275ac  gcc/c/c-tree.h
! 414624a4fc71bc91337c7588f3e6ed50  gcc/c/c-typeck.cc
  5804f7ee3eccdfb7c9a64e40b20ccc79  gcc/c/config-lang.in
  58370619d5c4739b7d81d5f899913a0c  gcc/c/gccspec.cc
  3ae90e1d8085765b7e7488ac9673a927  gcc/c/gimple-parser.cc
*************** a2a7ae398fff29279976ba196a37dccb  gcc/cf
*** 3361,3374 ****
  83651ace7d1e40ee81b35f32a6a05179  gcc/cfgloopmanip.h
  e9a1353e830f1ac8eca66727f2911679  gcc/cfgrtl.cc
  c41525a1de6e78cabd4414d6a8c3dac9  gcc/cfgrtl.h
! 219f47766fc5f1a2993a77606da060af  gcc/cgraph.cc
  36c074c6a2c861a5fa311704a308cd61  gcc/cgraph.h
  de90956fd0fa66b3093b818874bbb4f4  gcc/cgraphbuild.cc
  1a06be3556807c21f91d629f5878d022  gcc/cgraphclones.cc
! 47d3701e9292c4ac632243a124a843ed  gcc/cgraphunit.cc
  2a45e3be9216480f88930217fee8fc7b  gcc/channels.h
  931fe41c17df7e7a6074418f8e41f010  gcc/cif-code.def
! d9f0e7f086dd9588d436bea2c6b30225  gcc/cobol/ChangeLog
  56c564c4cfd3395214baa46684218f3d  gcc/cobol/Make-lang.in
  0a84e784d2bc4066654d2377fc6a2930  gcc/cobol/TODO
  27054fd6ae13f617da51f4df0026904e  gcc/cobol/cbldiag.h
--- 3362,3375 ----
  83651ace7d1e40ee81b35f32a6a05179  gcc/cfgloopmanip.h
  e9a1353e830f1ac8eca66727f2911679  gcc/cfgrtl.cc
  c41525a1de6e78cabd4414d6a8c3dac9  gcc/cfgrtl.h
! a4cf104c1468ac0ce60e997a46a44b2e  gcc/cgraph.cc
  36c074c6a2c861a5fa311704a308cd61  gcc/cgraph.h
  de90956fd0fa66b3093b818874bbb4f4  gcc/cgraphbuild.cc
  1a06be3556807c21f91d629f5878d022  gcc/cgraphclones.cc
! e49d05909919035f9ad4633fc056bc56  gcc/cgraphunit.cc
  2a45e3be9216480f88930217fee8fc7b  gcc/channels.h
  931fe41c17df7e7a6074418f8e41f010  gcc/cif-code.def
! 70844684792013e5431c51f27238b34d  gcc/cobol/ChangeLog
  56c564c4cfd3395214baa46684218f3d  gcc/cobol/Make-lang.in
  0a84e784d2bc4066654d2377fc6a2930  gcc/cobol/TODO
  27054fd6ae13f617da51f4df0026904e  gcc/cobol/cbldiag.h
*************** dfdc874741e086c131fcd03117c339cf  gcc/co
*** 3386,3395 ****
  fa5c36c4b4863c8f410d851d2d404869  gcc/cobol/gcobc
  f67634943eb42bf86ec69714cecc53e6  gcc/cobol/gcobol.1
  527925049a81a36c06220d368570f55a  gcc/cobol/gcobol.3
! bb45f2a58867f5547facd31b076fa3f5  gcc/cobol/gcobolspec.cc
! ee1950a6d1b1a2e742627eaea0d9d3c3  gcc/cobol/genapi.cc
  0c4734774af3bdae4d59b55a5c25bda6  gcc/cobol/genapi.h
! 3286fac63d9197d8ec07ca505dbae672  gcc/cobol/gengen.cc
  eeb2d20d7d0d4521acb2468dee246887  gcc/cobol/gengen.h
  f2574a875a5d091597cc2618d3a25852  gcc/cobol/genmath.cc
  d44e8c86d57fb704b6c1fbab3464fb9a  gcc/cobol/genmath.h
--- 3387,3396 ----
  fa5c36c4b4863c8f410d851d2d404869  gcc/cobol/gcobc
  f67634943eb42bf86ec69714cecc53e6  gcc/cobol/gcobol.1
  527925049a81a36c06220d368570f55a  gcc/cobol/gcobol.3
! a0a0120d2e52dd9bbe26a6d64ba9dc64  gcc/cobol/gcobolspec.cc
! d35796688ec8e78d2921652b01e0f103  gcc/cobol/genapi.cc
  0c4734774af3bdae4d59b55a5c25bda6  gcc/cobol/genapi.h
! 7503cee4149ae97fee422f72473aa527  gcc/cobol/gengen.cc
  eeb2d20d7d0d4521acb2468dee246887  gcc/cobol/gengen.h
  f2574a875a5d091597cc2618d3a25852  gcc/cobol/genmath.cc
  d44e8c86d57fb704b6c1fbab3464fb9a  gcc/cobol/genmath.h
*************** c716e3cd5b0166ad4a18c1eca6ab3210  gcc/co
*** 3403,3410 ****
  f25056b154c14dde0fb10a159520eb1b  gcc/cobol/lexio.cc
  5953c820cdc03feb815bfbf28c10730c  gcc/cobol/lexio.h
  d40dcad3e5d2596c1ac4fe4a5d21db61  gcc/cobol/messages.cc
! be6f0881f8bfc7a37d7f3e1c83f0ed2f  gcc/cobol/parse.y
! c05dcae814d5281eb740cbf833009de3  gcc/cobol/parse_ante.h
  e141e23293fb343e7ccbaa2fe6bcef33  gcc/cobol/parse_util.h
  671d08c34c0753b924145233054f8c7c  gcc/cobol/scan.l
  52616f0eace7ada273d249ed8b7e3d49  gcc/cobol/scan_ante.h
--- 3404,3411 ----
  f25056b154c14dde0fb10a159520eb1b  gcc/cobol/lexio.cc
  5953c820cdc03feb815bfbf28c10730c  gcc/cobol/lexio.h
  d40dcad3e5d2596c1ac4fe4a5d21db61  gcc/cobol/messages.cc
! 1599112adb333d195be3bfc539fc9c0d  gcc/cobol/parse.y
! 86d3ebbc7992d38714442c941e2c606a  gcc/cobol/parse_ante.h
  e141e23293fb343e7ccbaa2fe6bcef33  gcc/cobol/parse_util.h
  671d08c34c0753b924145233054f8c7c  gcc/cobol/scan.l
  52616f0eace7ada273d249ed8b7e3d49  gcc/cobol/scan_ante.h
*************** b807722da738ed05d7e57e96dc9b2f1e  gcc/co
*** 3412,3433 ****
  4633d4d89ae923e2fb816c83d5babb05  gcc/cobol/show_parse.h
  4d378cd01e0aa67ff81cbac13cafd094  gcc/cobol/structs.cc
  6a12fdf051ff87867b239b5ae272fd55  gcc/cobol/structs.h
! 547a2c0244e9e228e618fe1cf9510de5  gcc/cobol/symbols.cc
! 46e9939b9c7a3a96903695e3dfd540a6  gcc/cobol/symbols.h
  56876c7f6bf3230239c8142eb049a183  gcc/cobol/symfind.cc
  0b45e8af0c2c2f064b378c02368657f3  gcc/cobol/token_names.h
  434f4899280e27d0717b2e56d5bf12f2  gcc/cobol/udf/stored-char-length.cbl
! 62b07e99537a619077b9ce54c435d014  gcc/cobol/util.cc
  6cc175185e4fa5a6a21bdc88a66d3956  gcc/cobol/util.h
  c1bcbb8330a34acab1f51487c3d5b89f  gcc/collect-utils.cc
  70025ae15b4018e75f6bfcbaa4db4fca  gcc/collect-utils.h
  38716fe5959af2b954c272008e158928  gcc/collect2-aix.cc
  a56f67bf9504f1f91df64d23b9ce6f3b  gcc/collect2-aix.h
! 2ad9fdc0d410ad05bb93fb8d0ba73a61  gcc/collect2.cc
  d48c86bc52a7b8ee38281d6069d3eb6a  gcc/collect2.h
  9b54c6ade2ed5ee11859b498e663936e  gcc/color-macros.h
  903401554d90de06743fb9a836e6a45b  gcc/combine-stack-adj.cc
! 3e1637e8961c0810ea91ca702bb69aa1  gcc/combine.cc
  9f2835a8fa18cfce2249127014eb7edd  gcc/common.md
  4b25af59e1f8a07782dbddb00afc272c  gcc/common.opt
  b555a79a0cb9f4062f9c73e695b6f2cb  gcc/common.opt.urls
--- 3413,3434 ----
  4633d4d89ae923e2fb816c83d5babb05  gcc/cobol/show_parse.h
  4d378cd01e0aa67ff81cbac13cafd094  gcc/cobol/structs.cc
  6a12fdf051ff87867b239b5ae272fd55  gcc/cobol/structs.h
! e628678e4cc51f8198b41105683e4be8  gcc/cobol/symbols.cc
! ee4b331b57f9943ecad0bad580173929  gcc/cobol/symbols.h
  56876c7f6bf3230239c8142eb049a183  gcc/cobol/symfind.cc
  0b45e8af0c2c2f064b378c02368657f3  gcc/cobol/token_names.h
  434f4899280e27d0717b2e56d5bf12f2  gcc/cobol/udf/stored-char-length.cbl
! 6cfbb59a71130a38c2af95a34c8bc13f  gcc/cobol/util.cc
  6cc175185e4fa5a6a21bdc88a66d3956  gcc/cobol/util.h
  c1bcbb8330a34acab1f51487c3d5b89f  gcc/collect-utils.cc
  70025ae15b4018e75f6bfcbaa4db4fca  gcc/collect-utils.h
  38716fe5959af2b954c272008e158928  gcc/collect2-aix.cc
  a56f67bf9504f1f91df64d23b9ce6f3b  gcc/collect2-aix.h
! 705abc3f0adc6b53db161a82f7553855  gcc/collect2.cc
  d48c86bc52a7b8ee38281d6069d3eb6a  gcc/collect2.h
  9b54c6ade2ed5ee11859b498e663936e  gcc/color-macros.h
  903401554d90de06743fb9a836e6a45b  gcc/combine-stack-adj.cc
! af093931f440b1ff2d8eaf64045fbf9b  gcc/combine.cc
  9f2835a8fa18cfce2249127014eb7edd  gcc/common.md
  4b25af59e1f8a07782dbddb00afc272c  gcc/common.opt
  b555a79a0cb9f4062f9c73e695b6f2cb  gcc/common.opt.urls
*************** c116871b1bccc88a0b8f946d6a68d0d0  gcc/co
*** 3488,3511 ****
  a9614075e7c73706d66b5947ee7833e8  gcc/common/config/visium/visium-common.cc
  d3b8ce30c6110489fd0b57d6792f3f29  gcc/common/config/xstormy16/xstormy16-common.cc
  5f57f58fab0281a10ab69169f1a9093a  gcc/common/config/xtensa/xtensa-common.cc
! 084002dad8536fd331b1095b203b12d6  gcc/compare-elim.cc
  6137f3da8f70ec4262acab21bb549148  gcc/conditions.h
  4250c8b8d57bf1315174cf436a74a88b  gcc/config.build
  44f53d3c495e1ff96862a4713260280b  gcc/config.gcc
  d8b0b26795a60b3a991dfbdafe4cd756  gcc/config.host
! 0f37365a87254fc2d1b3e0b970cc2a8e  gcc/config.in
  8e697813dc96ca90f5d0f4c196efe2cc  gcc/config/README
  09ab460c021260083d94d95ece3cdb5d  gcc/config/aarch64/aarch64-abi-ms-protos.h
  c47b4191f7bac0196ab63ca2c66bfa98  gcc/config/aarch64/aarch64-abi-ms.cc
  148fedc3acd410f7a82133d0e78b02df  gcc/config/aarch64/aarch64-abi-ms.h
  9b6ffa67b7e7f7cc2348fa0dc728072e  gcc/config/aarch64/aarch64-arches.def
  c8a924cfcb693679febdcde3a0cc0809  gcc/config/aarch64/aarch64-builtin-pairs.def
! f71747259d211660ba533c6a71fa2504  gcc/config/aarch64/aarch64-builtins.cc
  a1a7d26ecab3d6681a1d3f5c2cb77275  gcc/config/aarch64/aarch64-builtins.h
! 700590c50f17b709a32297930716ab22  gcc/config/aarch64/aarch64-c.cc
  3effce0415a0994753b7865834e56638  gcc/config/aarch64/aarch64-coff.h
! 03957b4f14c24bce5a9481c68f66d495  gcc/config/aarch64/aarch64-cores.def
! bcce5dd39758c850fbdc3654c590eec0  gcc/config/aarch64/aarch64-cost-tables.h
  5d9722001af118d5011d62beba0e3879  gcc/config/aarch64/aarch64-d.cc
  3d35dd7bbc8358248117e8edb6f6895f  gcc/config/aarch64/aarch64-d.h
  1dadac6488184dffdf4b2bf77c8779f8  gcc/config/aarch64/aarch64-early-ra.cc
--- 3489,3512 ----
  a9614075e7c73706d66b5947ee7833e8  gcc/common/config/visium/visium-common.cc
  d3b8ce30c6110489fd0b57d6792f3f29  gcc/common/config/xstormy16/xstormy16-common.cc
  5f57f58fab0281a10ab69169f1a9093a  gcc/common/config/xtensa/xtensa-common.cc
! 88eac990ca6879dcd747cf5113888b1e  gcc/compare-elim.cc
  6137f3da8f70ec4262acab21bb549148  gcc/conditions.h
  4250c8b8d57bf1315174cf436a74a88b  gcc/config.build
  44f53d3c495e1ff96862a4713260280b  gcc/config.gcc
  d8b0b26795a60b3a991dfbdafe4cd756  gcc/config.host
! 17fa94b7b2de84d2f52d3ef2a238ea0e  gcc/config.in
  8e697813dc96ca90f5d0f4c196efe2cc  gcc/config/README
  09ab460c021260083d94d95ece3cdb5d  gcc/config/aarch64/aarch64-abi-ms-protos.h
  c47b4191f7bac0196ab63ca2c66bfa98  gcc/config/aarch64/aarch64-abi-ms.cc
  148fedc3acd410f7a82133d0e78b02df  gcc/config/aarch64/aarch64-abi-ms.h
  9b6ffa67b7e7f7cc2348fa0dc728072e  gcc/config/aarch64/aarch64-arches.def
  c8a924cfcb693679febdcde3a0cc0809  gcc/config/aarch64/aarch64-builtin-pairs.def
! 0ffe2c04e5ec55f9fcbbcb3d24d22c59  gcc/config/aarch64/aarch64-builtins.cc
  a1a7d26ecab3d6681a1d3f5c2cb77275  gcc/config/aarch64/aarch64-builtins.h
! 3d6dccd7b30ae0761819d5d1fdb2f47f  gcc/config/aarch64/aarch64-c.cc
  3effce0415a0994753b7865834e56638  gcc/config/aarch64/aarch64-coff.h
! 39747d119e7ca716e9758944ba9540d8  gcc/config/aarch64/aarch64-cores.def
! cd1537928dd0fadfa53b88b278af0ed2  gcc/config/aarch64/aarch64-cost-tables.h
  5d9722001af118d5011d62beba0e3879  gcc/config/aarch64/aarch64-d.cc
  3d35dd7bbc8358248117e8edb6f6895f  gcc/config/aarch64/aarch64-d.h
  1dadac6488184dffdf4b2bf77c8779f8  gcc/config/aarch64/aarch64-early-ra.cc
*************** e3b84b8c70b76f20a6d8123da2876317  gcc/co
*** 3563,3578 ****
  fcd162fcd7283eef4840616707e697be  gcc/config/aarch64/aarch64-sve.md
  aed1c7a89b093d7a786a6ab457841e24  gcc/config/aarch64/aarch64-sve2.md
  229d0046517455cf526c12527127f3b8  gcc/config/aarch64/aarch64-sys-regs.def
! 33a2011b9d1511f6f2a48135ef9c91dc  gcc/config/aarch64/aarch64-tune.md
  dec4c8fd03ac5636ba08d9523bee06be  gcc/config/aarch64/aarch64-tuning-enums.def
  fb86888a7b4a251db9c62262e379d564  gcc/config/aarch64/aarch64-tuning-flags.def
  b2ed7b4c85a1fa71b919148f60e2984f  gcc/config/aarch64/aarch64-vxworks.h
! 431ad00d3c24ebb903e6c05d73100c77  gcc/config/aarch64/aarch64.cc
  6d08684e5861c8b32845dc6aff2539b8  gcc/config/aarch64/aarch64.h
  c8b74735b920099887b23d3009d7565c  gcc/config/aarch64/aarch64.md
  c5cf87f72305a6ea92d9fd65a668c5f0  gcc/config/aarch64/aarch64.opt
  f8862c1a17df0d9164d1f07fc8288527  gcc/config/aarch64/aarch64.opt.urls
! 82e9259865afd63b716cc9b316e7f2e9  gcc/config/aarch64/arm_acle.h
  e8d32471149337fb86504c9b287a6aef  gcc/config/aarch64/arm_bf16.h
  b156014d3463d59daa50c73ab8e10b54  gcc/config/aarch64/arm_fp16.h
  5853aca7ed1116ecb7cad53e0fe8c73b  gcc/config/aarch64/arm_neon.h
--- 3564,3579 ----
  fcd162fcd7283eef4840616707e697be  gcc/config/aarch64/aarch64-sve.md
  aed1c7a89b093d7a786a6ab457841e24  gcc/config/aarch64/aarch64-sve2.md
  229d0046517455cf526c12527127f3b8  gcc/config/aarch64/aarch64-sys-regs.def
! 2d13f36cfc7398f1eacd20710f90e0ce  gcc/config/aarch64/aarch64-tune.md
  dec4c8fd03ac5636ba08d9523bee06be  gcc/config/aarch64/aarch64-tuning-enums.def
  fb86888a7b4a251db9c62262e379d564  gcc/config/aarch64/aarch64-tuning-flags.def
  b2ed7b4c85a1fa71b919148f60e2984f  gcc/config/aarch64/aarch64-vxworks.h
! 63561bef3c02d8bbffc05b1ed28b3d70  gcc/config/aarch64/aarch64.cc
  6d08684e5861c8b32845dc6aff2539b8  gcc/config/aarch64/aarch64.h
  c8b74735b920099887b23d3009d7565c  gcc/config/aarch64/aarch64.md
  c5cf87f72305a6ea92d9fd65a668c5f0  gcc/config/aarch64/aarch64.opt
  f8862c1a17df0d9164d1f07fc8288527  gcc/config/aarch64/aarch64.opt.urls
! 854a2fd8965d477c5b064388ed354bf1  gcc/config/aarch64/arm_acle.h
  e8d32471149337fb86504c9b287a6aef  gcc/config/aarch64/arm_bf16.h
  b156014d3463d59daa50c73ab8e10b54  gcc/config/aarch64/arm_fp16.h
  5853aca7ed1116ecb7cad53e0fe8c73b  gcc/config/aarch64/arm_neon.h
*************** edb7875ce7bf0af9bc11a475c9fd317a  gcc/co
*** 3626,3631 ****
--- 3627,3633 ----
  74c21f06fcf41dd4e24dd5251f80e058  gcc/config/aarch64/tuning_models/generic.h
  9b0097abf8277055d81338276f8213e7  gcc/config/aarch64/tuning_models/generic_armv8_a.h
  3f17da8180ef70e59accd40a5bd0f02b  gcc/config/aarch64/tuning_models/generic_armv9_a.h
+ dfb41c27b3519cd60a0bf09313b4475f  gcc/config/aarch64/tuning_models/hip12.h
  ee1645bd7e049365c9b52b774f3e8324  gcc/config/aarch64/tuning_models/neoverse512tvb.h
  5a9038f2c5ee1e9612fc82299ccf7132  gcc/config/aarch64/tuning_models/neoversen1.h
  7d27c8a92a1bbd8c601e92fb38b15a56  gcc/config/aarch64/tuning_models/neoversen2.h
*************** b8dda5ab1f67b388debff95f4a66c82c  gcc/co
*** 3746,3752 ****
  555504756e42d516b613cd492f56e83e  gcc/config/arm/arm-tables.opt
  f805d118929dd79f6bd4dc75c77c968b  gcc/config/arm/arm-tables.opt.urls
  b5f7e0b5b33aa917de47ab3bf691f123  gcc/config/arm/arm-tune.md
! 4ded78d80f6c3b11a5523feb2cef6ebe  gcc/config/arm/arm.cc
  fcb5b2782878cf25e12f0da91cb0075b  gcc/config/arm/arm.h
  767223b5c896c68161cd96e931965e70  gcc/config/arm/arm.md
  68b71bf902cc6c9290e847ce76a9fdea  gcc/config/arm/arm.opt
--- 3748,3754 ----
  555504756e42d516b613cd492f56e83e  gcc/config/arm/arm-tables.opt
  f805d118929dd79f6bd4dc75c77c968b  gcc/config/arm/arm-tables.opt.urls
  b5f7e0b5b33aa917de47ab3bf691f123  gcc/config/arm/arm-tune.md
! f504da3e712bd456dbc69f841b237bfc  gcc/config/arm/arm.cc
  fcb5b2782878cf25e12f0da91cb0075b  gcc/config/arm/arm.h
  767223b5c896c68161cd96e931965e70  gcc/config/arm/arm.md
  68b71bf902cc6c9290e847ce76a9fdea  gcc/config/arm/arm.opt
*************** b23d58618656034cd89cc31456567c3a  gcc/co
*** 3911,3917 ****
  fe1ef24a9fba2a2cf70030577495696f  gcc/config/bpf/btfext-out.cc
  53645a8e8ef18334bc04ce2cb5a63c5b  gcc/config/bpf/btfext-out.h
  6a2b2e4c63b3a8475b313e2b2f79242b  gcc/config/bpf/constraints.md
! 333e2bb3cf5969f1f613b320af09174a  gcc/config/bpf/core-builtins.cc
  988e922d069a72cea8291afbd9c40fe5  gcc/config/bpf/core-builtins.h
  64a1d068efe8f1e72d9324e299152bb0  gcc/config/bpf/predicates.md
  3f3bbe48c9291a5679f9d0ecc5c79139  gcc/config/bpf/t-bpf
--- 3913,3919 ----
  fe1ef24a9fba2a2cf70030577495696f  gcc/config/bpf/btfext-out.cc
  53645a8e8ef18334bc04ce2cb5a63c5b  gcc/config/bpf/btfext-out.h
  6a2b2e4c63b3a8475b313e2b2f79242b  gcc/config/bpf/constraints.md
! a6f621ae06db3bcb6a979fd903e4c548  gcc/config/bpf/core-builtins.cc
  988e922d069a72cea8291afbd9c40fe5  gcc/config/bpf/core-builtins.h
  64a1d068efe8f1e72d9324e299152bb0  gcc/config/bpf/predicates.md
  3f3bbe48c9291a5679f9d0ecc5c79139  gcc/config/bpf/t-bpf
*************** e8ba563b7eff9a7c1a380d760e1a30a9  gcc/co
*** 3995,4001 ****
  573bb1297b0b70aac60bf7462cd630fe  gcc/config/darwin-protos.h
  8e7a3be360635581116c45ad4ce9f11a  gcc/config/darwin-rust.cc
  cf8b9e265eb733c7c120218863142390  gcc/config/darwin-sections.def
! 9d8acb6c9358ead72b77fe0f6c52ad36  gcc/config/darwin.cc
  bac21aa0a86c8fcc448f29c200988083  gcc/config/darwin.h
  148592c1bf513e56d281629f94b70d9b  gcc/config/darwin.opt
  fa92b7f7b8bd38472af4bfd5a8254310  gcc/config/darwin.opt.urls
--- 3997,4003 ----
  573bb1297b0b70aac60bf7462cd630fe  gcc/config/darwin-protos.h
  8e7a3be360635581116c45ad4ce9f11a  gcc/config/darwin-rust.cc
  cf8b9e265eb733c7c120218863142390  gcc/config/darwin-sections.def
! 3adffe09b7b438e5a2ecac3454082933  gcc/config/darwin.cc
  bac21aa0a86c8fcc448f29c200988083  gcc/config/darwin.h
  148592c1bf513e56d281629f94b70d9b  gcc/config/darwin.opt
  fa92b7f7b8bd38472af4bfd5a8254310  gcc/config/darwin.opt.urls
*************** eb0b0296efa6a142ee4ee7b4cf09c756  gcc/co
*** 4082,4096 ****
  3d14b349b4f1885e26b37bfd8ce688a3  gcc/config/gcn/gcn-tables.opt
  ca8c1935ac88d760dc3a5b7e97558f28  gcc/config/gcn/gcn-tables.opt.urls
  613817ee55713099d08c4eb310ec3de7  gcc/config/gcn/gcn-tree.cc
! 8ad90c190fcf11440d8d508523bfc449  gcc/config/gcn/gcn-valu.md
  b7b5a2599eb4dbb7ce57457a8feb9f96  gcc/config/gcn/gcn.cc
  d6ff2b8b48b03af27e1fe7fbd9947087  gcc/config/gcn/gcn.h
! 87631c2f921de55fe7e5e67dcdbca024  gcc/config/gcn/gcn.md
  8b501b2f2909b52d8b1fcd7d73dc982a  gcc/config/gcn/gcn.opt
  8316cbfe8905418aa5882486602d17ca  gcc/config/gcn/gcn.opt.urls
  90b23dde7df766a3aeef8e82433ae644  gcc/config/gcn/gen-gcn-device-macros.awk
  bf608ab2f8f8935818839e7c58d3dd5f  gcc/config/gcn/gen-opt-tables.awk
! 9bc0552360bfbd71d81732c04f504d6a  gcc/config/gcn/mkoffload.cc
  5746cdb5b394ac0dc99b78898768aacc  gcc/config/gcn/offload.h
  3cb96661b1869fb7aac55d288bf6248f  gcc/config/gcn/predicates.md
  a3c2585b76667370d90aecdc90a8348a  gcc/config/gcn/t-gcn-hsa
--- 4084,4098 ----
  3d14b349b4f1885e26b37bfd8ce688a3  gcc/config/gcn/gcn-tables.opt
  ca8c1935ac88d760dc3a5b7e97558f28  gcc/config/gcn/gcn-tables.opt.urls
  613817ee55713099d08c4eb310ec3de7  gcc/config/gcn/gcn-tree.cc
! ec8639acb817ec24e7168c186bb486fd  gcc/config/gcn/gcn-valu.md
  b7b5a2599eb4dbb7ce57457a8feb9f96  gcc/config/gcn/gcn.cc
  d6ff2b8b48b03af27e1fe7fbd9947087  gcc/config/gcn/gcn.h
! ea89beb4a488a91786caccbd7480f452  gcc/config/gcn/gcn.md
  8b501b2f2909b52d8b1fcd7d73dc982a  gcc/config/gcn/gcn.opt
  8316cbfe8905418aa5882486602d17ca  gcc/config/gcn/gcn.opt.urls
  90b23dde7df766a3aeef8e82433ae644  gcc/config/gcn/gen-gcn-device-macros.awk
  bf608ab2f8f8935818839e7c58d3dd5f  gcc/config/gcn/gen-opt-tables.awk
! 8bf6c8376637503139b6fb8d70bb55a7  gcc/config/gcn/mkoffload.cc
  5746cdb5b394ac0dc99b78898768aacc  gcc/config/gcn/offload.h
  3cb96661b1869fb7aac55d288bf6248f  gcc/config/gcn/predicates.md
  a3c2585b76667370d90aecdc90a8348a  gcc/config/gcn/t-gcn-hsa
*************** c28514790f4784d421517c5a6b2f7d4f  gcc/co
*** 4289,4295 ****
  5b778b3296ea91dab0ca82338ca6828d  gcc/config/i386/i386-rust-and-jit.inc
  91b8b50cba997aef17a61929b5b55a87  gcc/config/i386/i386-rust.cc
  25b3947a11eb9ca52892133ddb36f3f2  gcc/config/i386/i386-rust.h
! 6054f2632e87ad634387f120d7a12ffa  gcc/config/i386/i386.cc
  483853f45756ffc10a3acbe55d2d0920  gcc/config/i386/i386.h
  89df2a613c67e17ead3c5e21ec133f78  gcc/config/i386/i386.md
  f431cbff6410e63b4e2de0e11adf19fb  gcc/config/i386/i386.opt
--- 4291,4297 ----
  5b778b3296ea91dab0ca82338ca6828d  gcc/config/i386/i386-rust-and-jit.inc
  91b8b50cba997aef17a61929b5b55a87  gcc/config/i386/i386-rust.cc
  25b3947a11eb9ca52892133ddb36f3f2  gcc/config/i386/i386-rust.h
! 84591cd3933284fc068f1ee432f2a81b  gcc/config/i386/i386.cc
  483853f45756ffc10a3acbe55d2d0920  gcc/config/i386/i386.h
  89df2a613c67e17ead3c5e21ec133f78  gcc/config/i386/i386.md
  f431cbff6410e63b4e2de0e11adf19fb  gcc/config/i386/i386.opt
*************** c2cfb83eb28cbbc487a62ee85650286e  gcc/co
*** 4404,4410 ****
  85c166d3b2a25a297e63630cb6017ad2  gcc/config/i386/x86-64.h
  8d184666d13b316783e97eee9de18a3e  gcc/config/i386/x86-tune-costs.h
  c22e895e5b7e6b98c7223b26982a5d20  gcc/config/i386/x86-tune-sched-atom.cc
! 0f7aabe76b19950e5c2ac36e9fec15a0  gcc/config/i386/x86-tune-sched-bd.cc
  864e537089cc92c5002cefd76ede977a  gcc/config/i386/x86-tune-sched-core.cc
  67c586fe54bcfe3f719ae50164d063ca  gcc/config/i386/x86-tune-sched.cc
  bcb5f0c90c9b04c1319d89b59faa0d30  gcc/config/i386/x86-tune.def
--- 4406,4412 ----
  85c166d3b2a25a297e63630cb6017ad2  gcc/config/i386/x86-64.h
  8d184666d13b316783e97eee9de18a3e  gcc/config/i386/x86-tune-costs.h
  c22e895e5b7e6b98c7223b26982a5d20  gcc/config/i386/x86-tune-sched-atom.cc
! 7bfce4f9fdee1dc1db1e668b10d9d8e2  gcc/config/i386/x86-tune-sched-bd.cc
  864e537089cc92c5002cefd76ede977a  gcc/config/i386/x86-tune-sched-core.cc
  67c586fe54bcfe3f719ae50164d063ca  gcc/config/i386/x86-tune-sched.cc
  bcb5f0c90c9b04c1319d89b59faa0d30  gcc/config/i386/x86-tune.def
*************** d4249b59ef5a24b1a2711287b20e508c  gcc/co
*** 4501,4507 ****
  df8b4f4b8dcb89e729d1dd4c0a77e11c  gcc/config/loongarch/gnu-user.h
  ce049501c9736e269332c4a1b19c32ea  gcc/config/loongarch/la464.md
  8ba1f024d7e6687edc35f6a7892f7829  gcc/config/loongarch/larchintrin.h
! 8fd8b25469c1db970309fa5b27f6b7a1  gcc/config/loongarch/lasx.md
  27fce87abf98871f7537919ba724e7ee  gcc/config/loongarch/lasxintrin.h
  787cab00aedf1fc937ded71896742e8d  gcc/config/loongarch/linux.h
  5692851b73184b2e9a81fe327493fd5c  gcc/config/loongarch/loongarch-builtins.cc
--- 4503,4509 ----
  df8b4f4b8dcb89e729d1dd4c0a77e11c  gcc/config/loongarch/gnu-user.h
  ce049501c9736e269332c4a1b19c32ea  gcc/config/loongarch/la464.md
  8ba1f024d7e6687edc35f6a7892f7829  gcc/config/loongarch/larchintrin.h
! ef3570776965c774ceed93c45e031958  gcc/config/loongarch/lasx.md
  27fce87abf98871f7537919ba724e7ee  gcc/config/loongarch/lasxintrin.h
  787cab00aedf1fc937ded71896742e8d  gcc/config/loongarch/linux.h
  5692851b73184b2e9a81fe327493fd5c  gcc/config/loongarch/loongarch-builtins.cc
*************** c7eeb48ab4223ecfdb09fa5e4ce61d71  gcc/co
*** 4526,4541 ****
  dadec2097ca9c4947a49a5766ac8ee89  gcc/config/loongarch/loongarch-str.h
  7ccddf81e7d405d89aab58e4ff863b49  gcc/config/loongarch/loongarch-target-attr.cc
  3cfb174db8bc99a9361e597a3e9bd35e  gcc/config/loongarch/loongarch-tune.h
! bebb396b217212d6444ab23ee428788d  gcc/config/loongarch/loongarch.cc
  57abfb8c653a24903f61e5cf93ac929f  gcc/config/loongarch/loongarch.h
  1b11d059c390458cbbf8e16a8efa5e6f  gcc/config/loongarch/loongarch.md
  62f9bea81246c3dac622d969dabefc1b  gcc/config/loongarch/loongarch.opt
  387011bb9dde5e25493f3602b2fd17bb  gcc/config/loongarch/loongarch.opt.urls
! 8a90e5171c01a3ce4c5a78cf857008c8  gcc/config/loongarch/lsx.md
  c7466e5dbde45f48269999a0ee23e193  gcc/config/loongarch/lsxintrin.h
  fe51977e0ac69b0829287b1c8d3f5060  gcc/config/loongarch/musl.h
! 9b4df8e2a6c0af58754dbed1886d0b62  gcc/config/loongarch/predicates.md
! 9e2d88feabc459739db5e635ed04082d  gcc/config/loongarch/simd.md
  2e69737d13e1bfc019d62d20daa42769  gcc/config/loongarch/sync.md
  70d4362e3209c6d2b4d8ad4c79d65a4c  gcc/config/loongarch/t-linux
  25160036fbe9a14f0cfa6539925bfa8a  gcc/config/loongarch/t-loongarch
--- 4528,4543 ----
  dadec2097ca9c4947a49a5766ac8ee89  gcc/config/loongarch/loongarch-str.h
  7ccddf81e7d405d89aab58e4ff863b49  gcc/config/loongarch/loongarch-target-attr.cc
  3cfb174db8bc99a9361e597a3e9bd35e  gcc/config/loongarch/loongarch-tune.h
! 2581ad6f4e655a110c429071f2821228  gcc/config/loongarch/loongarch.cc
  57abfb8c653a24903f61e5cf93ac929f  gcc/config/loongarch/loongarch.h
  1b11d059c390458cbbf8e16a8efa5e6f  gcc/config/loongarch/loongarch.md
  62f9bea81246c3dac622d969dabefc1b  gcc/config/loongarch/loongarch.opt
  387011bb9dde5e25493f3602b2fd17bb  gcc/config/loongarch/loongarch.opt.urls
! 561a66379ab213d1901626005734b467  gcc/config/loongarch/lsx.md
  c7466e5dbde45f48269999a0ee23e193  gcc/config/loongarch/lsxintrin.h
  fe51977e0ac69b0829287b1c8d3f5060  gcc/config/loongarch/musl.h
! 55f55f0084d1c0ba8a1c1d5015b69af7  gcc/config/loongarch/predicates.md
! f91faa5449d6dd76f5957fa796f00464  gcc/config/loongarch/simd.md
  2e69737d13e1bfc019d62d20daa42769  gcc/config/loongarch/sync.md
  70d4362e3209c6d2b4d8ad4c79d65a4c  gcc/config/loongarch/t-linux
  25160036fbe9a14f0cfa6539925bfa8a  gcc/config/loongarch/t-loongarch
*************** a0561d5189d936a2b3f76e586c0a2aa1  gcc/co
*** 4715,4721 ****
  216c87627424d946f6245f736be7b5f1  gcc/config/mips/mips-tables.opt.urls
  d721b62b45e3d41cf231605ad9646ea0  gcc/config/mips/mips.cc
  c3f89a44da0bb860a7ac949f008546b1  gcc/config/mips/mips.h
! 62c91047998070c0f017a68e2a78fbe7  gcc/config/mips/mips.md
  09db4f2e8c03333595305c1b1c1c0fc7  gcc/config/mips/mips.opt
  e27efa10159c17e2479da7d6f900b631  gcc/config/mips/mips.opt.urls
  79c849472a0f91bdf81cbd76d4f9d348  gcc/config/mips/msa.h
--- 4717,4723 ----
  216c87627424d946f6245f736be7b5f1  gcc/config/mips/mips-tables.opt.urls
  d721b62b45e3d41cf231605ad9646ea0  gcc/config/mips/mips.cc
  c3f89a44da0bb860a7ac949f008546b1  gcc/config/mips/mips.h
! 48a3f7acd754d52b3f1d4e07b31194e3  gcc/config/mips/mips.md
  09db4f2e8c03333595305c1b1c1c0fc7  gcc/config/mips/mips.opt
  e27efa10159c17e2479da7d6f900b631  gcc/config/mips/mips.opt.urls
  79c849472a0f91bdf81cbd76d4f9d348  gcc/config/mips/msa.h
*************** ddd6087651a73d039e839dcd0722283c  gcc/co
*** 4878,4884 ****
  773f9ddb2d6daa9a87367bb5978fb120  gcc/config/nvptx/gen-multilib-matches.sh
  8d99acc8e8841a9482912b9cac4e9211  gcc/config/nvptx/gen-omp-device-properties.sh
  b6c2f348186a23ff9ae8614c94745544  gcc/config/nvptx/gen-opt.sh
! bf6166d877c8e2b8f28a40f285ca0bff  gcc/config/nvptx/mkoffload.cc
  503652934e86bb0ee0adf7b3b5e3f96c  gcc/config/nvptx/nvptx-c.cc
  eaea0887741978fc886e3e6dea81f86d  gcc/config/nvptx/nvptx-gen.h
  1ff3f1d071bd0afd739a4bf26f4bca97  gcc/config/nvptx/nvptx-gen.opt
--- 4880,4886 ----
  773f9ddb2d6daa9a87367bb5978fb120  gcc/config/nvptx/gen-multilib-matches.sh
  8d99acc8e8841a9482912b9cac4e9211  gcc/config/nvptx/gen-omp-device-properties.sh
  b6c2f348186a23ff9ae8614c94745544  gcc/config/nvptx/gen-opt.sh
! 488aef749fee123f498a1af0c59ee6f7  gcc/config/nvptx/mkoffload.cc
  503652934e86bb0ee0adf7b3b5e3f96c  gcc/config/nvptx/nvptx-c.cc
  eaea0887741978fc886e3e6dea81f86d  gcc/config/nvptx/nvptx-gen.h
  1ff3f1d071bd0afd739a4bf26f4bca97  gcc/config/nvptx/nvptx-gen.opt
*************** bbb2a2cf5c79743f967571a1b148fa76  gcc/co
*** 4887,4893 ****
  f24878eb3d78fd9dde9199b2d34bb7c0  gcc/config/nvptx/nvptx-opts.h
  5ffc066c68d4afbfd07cc9455e6c32f8  gcc/config/nvptx/nvptx-protos.h
  e8a3a49db2057340b383556c9f01ca93  gcc/config/nvptx/nvptx-sm.def
! 779052227f234afb9dc19a87dbcd1a47  gcc/config/nvptx/nvptx.cc
  1962ec9fc83ea07e67ce77f805096639  gcc/config/nvptx/nvptx.h
  b73220c606bf6c1705b780468fa1a60b  gcc/config/nvptx/nvptx.md
  66df8efb52c37638c3e5f523adba27cc  gcc/config/nvptx/nvptx.opt
--- 4889,4895 ----
  f24878eb3d78fd9dde9199b2d34bb7c0  gcc/config/nvptx/nvptx-opts.h
  5ffc066c68d4afbfd07cc9455e6c32f8  gcc/config/nvptx/nvptx-protos.h
  e8a3a49db2057340b383556c9f01ca93  gcc/config/nvptx/nvptx-sm.def
! fdff78402fc7629e867c4da7f6b5c242  gcc/config/nvptx/nvptx.cc
  1962ec9fc83ea07e67ce77f805096639  gcc/config/nvptx/nvptx.h
  b73220c606bf6c1705b780468fa1a60b  gcc/config/nvptx/nvptx.md
  66df8efb52c37638c3e5f523adba27cc  gcc/config/nvptx/nvptx.opt
*************** e0b13dc09c4cccdaca5e57fad46b6aef  gcc/co
*** 5020,5026 ****
  90a6f68ec2557b16413f573595ce74d6  gcc/config/riscv/generic.md
  81366d49e01df5540a08a8994ac8e383  gcc/config/riscv/genrvv-type-indexer.cc
  d65916d74c79d1101eb0c17723537421  gcc/config/riscv/gnu.h
! 268c2e98e1fce7fa9bd089da5ce9f3a1  gcc/config/riscv/iterators.md
  72a82b13d5b374c0700be4a9e402884c  gcc/config/riscv/linux.h
  bcda2f5a4a2728d5f6bc53cbbd26f90c  gcc/config/riscv/mips-insn.md
  6952defcc51372547e752ac9f0184fd0  gcc/config/riscv/mips-p8700.md
--- 5022,5028 ----
  90a6f68ec2557b16413f573595ce74d6  gcc/config/riscv/generic.md
  81366d49e01df5540a08a8994ac8e383  gcc/config/riscv/genrvv-type-indexer.cc
  d65916d74c79d1101eb0c17723537421  gcc/config/riscv/gnu.h
! 64842c11599c26681c28f2f2cd3c0b60  gcc/config/riscv/iterators.md
  72a82b13d5b374c0700be4a9e402884c  gcc/config/riscv/linux.h
  bcda2f5a4a2728d5f6bc53cbbd26f90c  gcc/config/riscv/mips-insn.md
  6952defcc51372547e752ac9f0184fd0  gcc/config/riscv/mips-p8700.md
*************** e8af52b8a6f7085bfb664f79b36b11ad  gcc/co
*** 5051,5067 ****
  70f0932c77decbbcedce26f2f38b3a3e  gcc/config/riscv/riscv-ftypes.def
  cd518425f8e69a2250798307d4092126  gcc/config/riscv/riscv-modes.def
  846d400b827fb358869c936715c16c82  gcc/config/riscv/riscv-opt-popretz.cc
! 6db683f2e5214329ee9d4cc3c4e2e194  gcc/config/riscv/riscv-opts.h
  b8f6d36a9d7d3ef28a80c20bec990411  gcc/config/riscv/riscv-passes.def
  8fcaaf812bb193e0fad76d6b5f82f2af  gcc/config/riscv/riscv-profiles.def
! 53701660bfb1a876fe1045b90aa108e1  gcc/config/riscv/riscv-protos.h
  0f5bf394cade69aeff5c57f69d880d00  gcc/config/riscv/riscv-scalar-crypto.def
  c171108cfab16c74097a841489b04298  gcc/config/riscv/riscv-selftests.cc
  41d585e61cee0deacc33bd07c93e79e2  gcc/config/riscv/riscv-shorten-memrefs.cc
  62b31689063eeeca8f0e7ae25da92d0a  gcc/config/riscv/riscv-sr.cc
! daee381b824c8a8cb719d30db0094ae6  gcc/config/riscv/riscv-string.cc
  83bc8b8b85874456078c4c683d82a3e6  gcc/config/riscv/riscv-subset.h
! 51b1afa956c93e4b97d72843aa227d86  gcc/config/riscv/riscv-target-attr.cc
  6c563e0baf9031dcc0a4e26a55330b2e  gcc/config/riscv/riscv-v.cc
  23f9fe60c9f6f052bd55875310c01b0e  gcc/config/riscv/riscv-v.h
  3d17a86fd1ba10efb8809c613d1eb6cf  gcc/config/riscv/riscv-vect-permconst.cc
--- 5053,5069 ----
  70f0932c77decbbcedce26f2f38b3a3e  gcc/config/riscv/riscv-ftypes.def
  cd518425f8e69a2250798307d4092126  gcc/config/riscv/riscv-modes.def
  846d400b827fb358869c936715c16c82  gcc/config/riscv/riscv-opt-popretz.cc
! 82f8cdbc37627ec1514ac6f802e92fcd  gcc/config/riscv/riscv-opts.h
  b8f6d36a9d7d3ef28a80c20bec990411  gcc/config/riscv/riscv-passes.def
  8fcaaf812bb193e0fad76d6b5f82f2af  gcc/config/riscv/riscv-profiles.def
! f609e7a4ee9abac15857e6c779df7ff3  gcc/config/riscv/riscv-protos.h
  0f5bf394cade69aeff5c57f69d880d00  gcc/config/riscv/riscv-scalar-crypto.def
  c171108cfab16c74097a841489b04298  gcc/config/riscv/riscv-selftests.cc
  41d585e61cee0deacc33bd07c93e79e2  gcc/config/riscv/riscv-shorten-memrefs.cc
  62b31689063eeeca8f0e7ae25da92d0a  gcc/config/riscv/riscv-sr.cc
! f57a4d1f0a5a49304e07ae38a6990bc8  gcc/config/riscv/riscv-string.cc
  83bc8b8b85874456078c4c683d82a3e6  gcc/config/riscv/riscv-subset.h
! da26032fa71bbdaccc0766633e3f86bb  gcc/config/riscv/riscv-target-attr.cc
  6c563e0baf9031dcc0a4e26a55330b2e  gcc/config/riscv/riscv-v.cc
  23f9fe60c9f6f052bd55875310c01b0e  gcc/config/riscv/riscv-v.h
  3d17a86fd1ba10efb8809c613d1eb6cf  gcc/config/riscv/riscv-vect-permconst.cc
*************** a6642c27cbc8f18cf3cab4881911ed3f  gcc/co
*** 5074,5089 ****
  2eebb6b1ce2689efdd037d60ed33cc66  gcc/config/riscv/riscv-vector-builtins.cc
  6f087b25674ebed60ebd0e55c4fe30e1  gcc/config/riscv/riscv-vector-builtins.def
  b65281b3d979c9c774d30d65281a07ab  gcc/config/riscv/riscv-vector-builtins.h
! 9c783e57e05c70a808213ceff7299df9  gcc/config/riscv/riscv-vector-costs.cc
  8c1680c1bc7e171e4992d3aa9ea64d18  gcc/config/riscv/riscv-vector-costs.h
  4dd506c7e0c9b67fb2b6c5acdf4f44b7  gcc/config/riscv/riscv-vector-switch.def
  1e7e450b48a1c3bd178cfe23f0da0001  gcc/config/riscv/riscv-vsetvl.cc
  10ae51c30c9b8e6dce66f20016fae344  gcc/config/riscv/riscv-vsetvl.def
  85dee253312a7f85a1d4f8554a601105  gcc/config/riscv/riscv-zicfilp.cc
! f1bc8a048bbc35768f52b5568382daf7  gcc/config/riscv/riscv.cc
  cff2fc59ab1defbd178f75bdcd643bcc  gcc/config/riscv/riscv.h
  69bf57d0406b6ab66b5fd796932171e7  gcc/config/riscv/riscv.md
! 2d23f30f1a22bd9edff8821ece67599e  gcc/config/riscv/riscv.opt
  5347f266751815cd3cb80c0de985c3b8  gcc/config/riscv/riscv.opt.urls
  fab1eef01628cdb4fc6f7a48edf3ff51  gcc/config/riscv/riscv_bitmanip.h
  3458c159fa70b8544ae65132baa36477  gcc/config/riscv/riscv_crypto.h
--- 5076,5091 ----
  2eebb6b1ce2689efdd037d60ed33cc66  gcc/config/riscv/riscv-vector-builtins.cc
  6f087b25674ebed60ebd0e55c4fe30e1  gcc/config/riscv/riscv-vector-builtins.def
  b65281b3d979c9c774d30d65281a07ab  gcc/config/riscv/riscv-vector-builtins.h
! 47eaa02f26ab10731d3808c4008a9998  gcc/config/riscv/riscv-vector-costs.cc
  8c1680c1bc7e171e4992d3aa9ea64d18  gcc/config/riscv/riscv-vector-costs.h
  4dd506c7e0c9b67fb2b6c5acdf4f44b7  gcc/config/riscv/riscv-vector-switch.def
  1e7e450b48a1c3bd178cfe23f0da0001  gcc/config/riscv/riscv-vsetvl.cc
  10ae51c30c9b8e6dce66f20016fae344  gcc/config/riscv/riscv-vsetvl.def
  85dee253312a7f85a1d4f8554a601105  gcc/config/riscv/riscv-zicfilp.cc
! 002259552b08243159a88e63255128e3  gcc/config/riscv/riscv.cc
  cff2fc59ab1defbd178f75bdcd643bcc  gcc/config/riscv/riscv.h
  69bf57d0406b6ab66b5fd796932171e7  gcc/config/riscv/riscv.md
! c721fa1217a74f723ccf84813f721944  gcc/config/riscv/riscv.opt
  5347f266751815cd3cb80c0de985c3b8  gcc/config/riscv/riscv.opt.urls
  fab1eef01628cdb4fc6f7a48edf3ff51  gcc/config/riscv/riscv_bitmanip.h
  3458c159fa70b8544ae65132baa36477  gcc/config/riscv/riscv_crypto.h
*************** a95321fbec5a4da32a9ee8145b8b0c6d  gcc/co
*** 5119,5128 ****
  dcbac9d3c6831ff1cd18effca9c7bb28  gcc/config/riscv/vector-bfloat16.md
  1efc7e76b1f8a6c41de01fba7e0d33b9  gcc/config/riscv/vector-crypto.md
  604805ea8530b1a6391150e8388a63fb  gcc/config/riscv/vector-iterators.md
! bf625c679ac7e93fd590211caaeb9139  gcc/config/riscv/vector.md
  18d213c106fe52eebc74017d5ff892ce  gcc/config/riscv/xiangshan.md
  39ba96197510d4ac114a827d7ffbf806  gcc/config/riscv/zc.md
! e07a4370b20c2e0a34273d5b3c3b77d6  gcc/config/riscv/zicond.md
  d8e5244a78b41071cc1e0cafc3180db3  gcc/config/rl78/constraints.md
  7b7c876420bfc606ea2233644fb6cf39  gcc/config/rl78/predicates.md
  c90cca4dab29ddc6dc57edf9338ad721  gcc/config/rl78/rl78-c.cc
--- 5121,5130 ----
  dcbac9d3c6831ff1cd18effca9c7bb28  gcc/config/riscv/vector-bfloat16.md
  1efc7e76b1f8a6c41de01fba7e0d33b9  gcc/config/riscv/vector-crypto.md
  604805ea8530b1a6391150e8388a63fb  gcc/config/riscv/vector-iterators.md
! adb7144f40e5204cd09fa2881a27ca99  gcc/config/riscv/vector.md
  18d213c106fe52eebc74017d5ff892ce  gcc/config/riscv/xiangshan.md
  39ba96197510d4ac114a827d7ffbf806  gcc/config/riscv/zc.md
! 095b548c0235b063b3b2eda583fcf755  gcc/config/riscv/zicond.md
  d8e5244a78b41071cc1e0cafc3180db3  gcc/config/rl78/constraints.md
  7b7c876420bfc606ea2233644fb6cf39  gcc/config/rl78/predicates.md
  c90cca4dab29ddc6dc57edf9338ad721  gcc/config/rl78/rl78-c.cc
*************** d3a1c98fd13be04e1250b073cb8dcef2  gcc/co
*** 5248,5254 ****
  9e39e759376eb97f2a56ebfc28c8d149  gcc/config/rs6000/rs6000-string.cc
  505106a6c6516140530fe5f55a87e44e  gcc/config/rs6000/rs6000-tables.opt
  ce8de9a27f36b759a69194616c02eb38  gcc/config/rs6000/rs6000-tables.opt.urls
! afbfbc950d6708ec07548eeef4268905  gcc/config/rs6000/rs6000.cc
  838ab0dea9bee1b30cbf4cb875917f74  gcc/config/rs6000/rs6000.h
  a575dd5c5592c7d23a9b53b985c01120  gcc/config/rs6000/rs6000.md
  fc53ceb489fffb4124155c557c54157f  gcc/config/rs6000/rs6000.opt
--- 5250,5256 ----
  9e39e759376eb97f2a56ebfc28c8d149  gcc/config/rs6000/rs6000-string.cc
  505106a6c6516140530fe5f55a87e44e  gcc/config/rs6000/rs6000-tables.opt
  ce8de9a27f36b759a69194616c02eb38  gcc/config/rs6000/rs6000-tables.opt.urls
! 3903942cdca2fa3c10b1ad0ae5356070  gcc/config/rs6000/rs6000.cc
  838ab0dea9bee1b30cbf4cb875917f74  gcc/config/rs6000/rs6000.h
  a575dd5c5592c7d23a9b53b985c01120  gcc/config/rs6000/rs6000.md
  fc53ceb489fffb4124155c557c54157f  gcc/config/rs6000/rs6000.opt
*************** f8b2917f3bac10c9a81564048cb3f9f6  gcc/co
*** 5419,5425 ****
  818ae981defa95f6482131d6f51ac789  gcc/config/sparc/constraints.md
  bc82d702b596981bb91f981bbbc6233c  gcc/config/sparc/cypress.md
  e45de214cf1939cc532d11bc572c1f50  gcc/config/sparc/default64.h
! ec8945a03b75df608d0200a2fab4849e  gcc/config/sparc/driver-sparc.cc
  ec18494fb2f7b84b3cfd91563d0c15f9  gcc/config/sparc/freebsd.h
  76eaed7e11b7466b1d7f3909f63ebbf5  gcc/config/sparc/hypersparc.md
  317a3821a6e057d7e79a896e8aefa285  gcc/config/sparc/leon.md
--- 5421,5427 ----
  818ae981defa95f6482131d6f51ac789  gcc/config/sparc/constraints.md
  bc82d702b596981bb91f981bbbc6233c  gcc/config/sparc/cypress.md
  e45de214cf1939cc532d11bc572c1f50  gcc/config/sparc/default64.h
! 8b68c1fc27e877f16802dfb36e63e963  gcc/config/sparc/driver-sparc.cc
  ec18494fb2f7b84b3cfd91563d0c15f9  gcc/config/sparc/freebsd.h
  76eaed7e11b7466b1d7f3909f63ebbf5  gcc/config/sparc/hypersparc.md
  317a3821a6e057d7e79a896e8aefa285  gcc/config/sparc/leon.md
*************** c60f07bed189e2a8fb8abfe19368e9f9  gcc/co
*** 5617,5624 ****
  2341d28c3ca91d40bbe37ba41a733448  gcc/config/xtensa/xtensa.md
  093588e637649f5260b04ad13fe609e6  gcc/config/xtensa/xtensa.opt
  db57d7603312357e8c0cfb21c32353d1  gcc/config/xtensa/xtensa.opt.urls
! d5b8865fe825e8bfbedd210d04ff98c4  gcc/configure
! 1e7cce041054b20b922a29556b0f6832  gcc/configure.ac
  1f52ef379dc4198df7f2c7ab63c8b70e  gcc/configure.tgt
  8a46839a73059f70ef105be9706c2554  gcc/context.cc
  08023c1005def168a8b675813b95d9f4  gcc/context.h
--- 5619,5626 ----
  2341d28c3ca91d40bbe37ba41a733448  gcc/config/xtensa/xtensa.md
  093588e637649f5260b04ad13fe609e6  gcc/config/xtensa/xtensa.opt
  db57d7603312357e8c0cfb21c32353d1  gcc/config/xtensa/xtensa.opt.urls
! 4c7db784d34258a2fd4e4a869aaa275a  gcc/configure
! 0c2ba2ada8e1af85064384e735757904  gcc/configure.ac
  1f52ef379dc4198df7f2c7ab63c8b70e  gcc/configure.tgt
  8a46839a73059f70ef105be9706c2554  gcc/context.cc
  08023c1005def168a8b675813b95d9f4  gcc/context.h
*************** c5ad0142a191862e3e81ecd3573754b3  gcc/co
*** 5629,5635 ****
  55a33ae415bde0fd2e36ba584894e50b  gcc/coroutine-passes.cc
  7c2ad47e271f9b832badf1740a09c77e  gcc/coverage.cc
  8524318f81a8af8cfaa8d35966d8fdc2  gcc/coverage.h
! 98668a3173e7fb7faf7c3c9a345ef428  gcc/cp/ChangeLog
  70c059f2b75a2fc1bb95a526b21b8cd7  gcc/cp/ChangeLog-1993
  7cbd106e10a0ba7c052bee3fe20671c2  gcc/cp/ChangeLog-1994
  3b1e3ed23ad4363f75e6fd2fbb583dee  gcc/cp/ChangeLog-1995
--- 5631,5637 ----
  55a33ae415bde0fd2e36ba584894e50b  gcc/coroutine-passes.cc
  7c2ad47e271f9b832badf1740a09c77e  gcc/coverage.cc
  8524318f81a8af8cfaa8d35966d8fdc2  gcc/coverage.h
! 9109745bb283f98a733b5cc23f91c054  gcc/cp/ChangeLog
  70c059f2b75a2fc1bb95a526b21b8cd7  gcc/cp/ChangeLog-1993
  7cbd106e10a0ba7c052bee3fe20671c2  gcc/cp/ChangeLog-1994
  3b1e3ed23ad4363f75e6fd2fbb583dee  gcc/cp/ChangeLog-1995
*************** f39635970f98bbc4591f6363fe70504b  gcc/cp
*** 5666,5696 ****
  c1c7801b9b0f379e702a4f6cb83972e7  gcc/cp/ChangeLog.ptr
  9aa3cd9f75c785de9f51446e3f295515  gcc/cp/ChangeLog.tree-ssa
  da351065af25977c46f56d82f11e47f8  gcc/cp/Make-lang.in
! 1d2e1cc8f67dfdbc32f9c3ee3ede59d4  gcc/cp/call.cc
  144dd1ae510a7436b569b007470b62da  gcc/cp/cfns.gperf
  39dd4c5a96c7ea132eb3c7ed039a065e  gcc/cp/cfns.h
  9455033ae8eace23403f6a010e7702a7  gcc/cp/class.cc
  e51f295e858583af5f9cf88b9530adf7  gcc/cp/config-lang.in
! d70ce6b228703d85344edccf5d935ebb  gcc/cp/constexpr.cc
! 695da628b2b27b6a8e2f34609d54da00  gcc/cp/constraint.cc
  99c403ab218e024bcf6d5d2108ad1f3b  gcc/cp/contracts.cc
  e77a681f560f3e9500f126febdc67ef6  gcc/cp/contracts.h
  f31a917ecaa91652f1ddad33816b79d8  gcc/cp/coroutines.cc
  1817def94193f0cfabd4fa5b321af011  gcc/cp/coroutines.h
  3bbda7b539934efbaca409affb67d728  gcc/cp/cp-gimplify.cc
! 9e1ca3d04fdc65b5e7817d5ca8e96146  gcc/cp/cp-lang.cc
  1a3e309babdfdd0ff5e03d09e6b5870d  gcc/cp/cp-name-hint.h
! d6f2be2c3f6c7fa85d49419b90a903e9  gcc/cp/cp-objcp-common.cc
! 1bcfc7131c03e9ba3cec5bfa46543be4  gcc/cp/cp-objcp-common.h
  64fa302e46b7097f7d989f5ab418d244  gcc/cp/cp-trait.def
  bc9b29434f2e35fa68caf656161b5c0f  gcc/cp/cp-tree.def
! 9dda3a082311fad4dbe2eeb6f12e0cba  gcc/cp/cp-tree.h
  e2854dfa428fab45fc41bf58fef71e61  gcc/cp/cp-ubsan.cc
! 450c80eca4c5b1adb25016bc5d9d7a59  gcc/cp/cvt.cc
  f067718cf3d629084d8347c4e017afd4  gcc/cp/cxx-pretty-print.cc
  1d04eec9859d91686ca501e9221f30ac  gcc/cp/cxx-pretty-print.h
  82a41d873e1c90067158c89e6c1bd4bb  gcc/cp/cxxapi-data.csv
! 249c45e0c08893ff854ee7ad27c4bf44  gcc/cp/decl.cc
  6b0c9433f7d3f129a44b59d54babb4eb  gcc/cp/decl.h
  604caef71e607a1c086b5a2fe2908469  gcc/cp/decl2.cc
  12ccd5244973d74a0536adf58261b416  gcc/cp/dump.cc
--- 5668,5698 ----
  c1c7801b9b0f379e702a4f6cb83972e7  gcc/cp/ChangeLog.ptr
  9aa3cd9f75c785de9f51446e3f295515  gcc/cp/ChangeLog.tree-ssa
  da351065af25977c46f56d82f11e47f8  gcc/cp/Make-lang.in
! ffb84b07987ea64b438bd69bc6fa4271  gcc/cp/call.cc
  144dd1ae510a7436b569b007470b62da  gcc/cp/cfns.gperf
  39dd4c5a96c7ea132eb3c7ed039a065e  gcc/cp/cfns.h
  9455033ae8eace23403f6a010e7702a7  gcc/cp/class.cc
  e51f295e858583af5f9cf88b9530adf7  gcc/cp/config-lang.in
! 3b49d417737e6fb30fdab666818d4f84  gcc/cp/constexpr.cc
! c2f2f3e685ad403f20446b400619b7cc  gcc/cp/constraint.cc
  99c403ab218e024bcf6d5d2108ad1f3b  gcc/cp/contracts.cc
  e77a681f560f3e9500f126febdc67ef6  gcc/cp/contracts.h
  f31a917ecaa91652f1ddad33816b79d8  gcc/cp/coroutines.cc
  1817def94193f0cfabd4fa5b321af011  gcc/cp/coroutines.h
  3bbda7b539934efbaca409affb67d728  gcc/cp/cp-gimplify.cc
! 5deb6a9935508ca534b8ee8e84b2a1cc  gcc/cp/cp-lang.cc
  1a3e309babdfdd0ff5e03d09e6b5870d  gcc/cp/cp-name-hint.h
! eba8d8a1725223519fba5d4d69afd5c9  gcc/cp/cp-objcp-common.cc
! 370b42bcdf211125186c37665052c30c  gcc/cp/cp-objcp-common.h
  64fa302e46b7097f7d989f5ab418d244  gcc/cp/cp-trait.def
  bc9b29434f2e35fa68caf656161b5c0f  gcc/cp/cp-tree.def
! a921d8f43c381eacb0ba0ff0a9624481  gcc/cp/cp-tree.h
  e2854dfa428fab45fc41bf58fef71e61  gcc/cp/cp-ubsan.cc
! c91187881e424edf65e35cfe9894b892  gcc/cp/cvt.cc
  f067718cf3d629084d8347c4e017afd4  gcc/cp/cxx-pretty-print.cc
  1d04eec9859d91686ca501e9221f30ac  gcc/cp/cxx-pretty-print.h
  82a41d873e1c90067158c89e6c1bd4bb  gcc/cp/cxxapi-data.csv
! 9c72dccab88d1fdd340b579e25682d95  gcc/cp/decl.cc
  6b0c9433f7d3f129a44b59d54babb4eb  gcc/cp/decl.h
  604caef71e607a1c086b5a2fe2908469  gcc/cp/decl2.cc
  12ccd5244973d74a0536adf58261b416  gcc/cp/dump.cc
*************** f067718cf3d629084d8347c4e017afd4  gcc/cp
*** 5700,5706 ****
  447ddbe59eba62b9a389b9ba11701cfc  gcc/cp/friend.cc
  014d3891b4172014c0ad5386223c4f4c  gcc/cp/g++spec.cc
  a29b3e9192657e81a1574fb99466348d  gcc/cp/gen-cxxapi-file.py
! 5e26ca8cdaa75c6b2e929225fc545870  gcc/cp/init.cc
  b3ff7f1e11444c1a8a1b9471e54c8cdd  gcc/cp/lambda.cc
  bc388fb8287f2de7cdf4d78eb8f5d998  gcc/cp/lang-specs.h
  2c33328276b7ca5633320581eb891129  gcc/cp/lex.cc
--- 5702,5708 ----
  447ddbe59eba62b9a389b9ba11701cfc  gcc/cp/friend.cc
  014d3891b4172014c0ad5386223c4f4c  gcc/cp/g++spec.cc
  a29b3e9192657e81a1574fb99466348d  gcc/cp/gen-cxxapi-file.py
! cf03979ab25f8cdd1610e68c8b722d11  gcc/cp/init.cc
  b3ff7f1e11444c1a8a1b9471e54c8cdd  gcc/cp/lambda.cc
  bc388fb8287f2de7cdf4d78eb8f5d998  gcc/cp/lang-specs.h
  2c33328276b7ca5633320581eb891129  gcc/cp/lex.cc
*************** e4ccdd9cbe95dde4cce27394a7613dd9  gcc/cp
*** 5712,5736 ****
  acc5732b886d522f7c4a9362587d7c8c  gcc/cp/metafns.gperf
  f3f2070329f6fd771c8e7610a97b8153  gcc/cp/metafns.h
  99dcd5706d056d3c446e2d90d8060632  gcc/cp/method.cc
! 73ea6d347913707fcbfad464b90d2f3d  gcc/cp/module.cc
  71a14c7d084dfa4f47828306158ad741  gcc/cp/name-lookup.cc
  2cc34a773d90c2531a10a90b908de661  gcc/cp/name-lookup.h
  b98d31c57aa038618db60991b17e0d35  gcc/cp/operators.def
  9efebf39da56d681d4405dfb9e55e3f5  gcc/cp/optimize.cc
! f360acc7ac480f32ca5db147a3e525b7  gcc/cp/parser.cc
  7973a34c47e3d3c580832655a3a5c3c2  gcc/cp/parser.h
! 92d028261a366427611994fc631cab57  gcc/cp/pt.cc
  25322928eaff39cf167372554c639e02  gcc/cp/ptree.cc
! 5804bee315e500d2adc9da8ea6883466  gcc/cp/reflect.cc
  97df067b24bdcb46ea1a2ca984c26a33  gcc/cp/rtti.cc
  9f7af4d4e940116a4fb0176d09ad180a  gcc/cp/search.cc
! fa38b7868f5962d3e4b22c38cd8b1b09  gcc/cp/semantics.cc
  64c36b2ea66c9f8f477b19d24e06a2cb  gcc/cp/std-name-hint.gperf
  15cc409f13a8952feb90e94d99ecefa2  gcc/cp/std-name-hint.h
! baa5f1a1ac981f3d2ccd6301adda32ae  gcc/cp/tree.cc
  01e9a381e6fcf3d016d0170ee0ad71d7  gcc/cp/type-utils.h
! be58a75c6bcbb6245f1ddd8526101d5a  gcc/cp/typeck.cc
! a4081c9094d5d8e820f5610a0e881a14  gcc/cp/typeck2.cc
  12d19e5abc1e436004b8885cde4765f0  gcc/cp/vtable-class-hierarchy.cc
  556f791fb43a25890d32717884f67cd1  gcc/cppbuiltin.cc
  51b40c4eab2c9321ddb49d1acb80edc3  gcc/cppbuiltin.h
--- 5714,5738 ----
  acc5732b886d522f7c4a9362587d7c8c  gcc/cp/metafns.gperf
  f3f2070329f6fd771c8e7610a97b8153  gcc/cp/metafns.h
  99dcd5706d056d3c446e2d90d8060632  gcc/cp/method.cc
! 1ce8a1013620201b2d0f93434420b69b  gcc/cp/module.cc
  71a14c7d084dfa4f47828306158ad741  gcc/cp/name-lookup.cc
  2cc34a773d90c2531a10a90b908de661  gcc/cp/name-lookup.h
  b98d31c57aa038618db60991b17e0d35  gcc/cp/operators.def
  9efebf39da56d681d4405dfb9e55e3f5  gcc/cp/optimize.cc
! 449f89396eff50fa024acdd5cd21dbfc  gcc/cp/parser.cc
  7973a34c47e3d3c580832655a3a5c3c2  gcc/cp/parser.h
! 68d464353450d9379573163162a4ad26  gcc/cp/pt.cc
  25322928eaff39cf167372554c639e02  gcc/cp/ptree.cc
! 28c9baab92cd8584ac6df805a9c86b74  gcc/cp/reflect.cc
  97df067b24bdcb46ea1a2ca984c26a33  gcc/cp/rtti.cc
  9f7af4d4e940116a4fb0176d09ad180a  gcc/cp/search.cc
! aed64aeae713d5bd3b31a0a2e9efb1c0  gcc/cp/semantics.cc
  64c36b2ea66c9f8f477b19d24e06a2cb  gcc/cp/std-name-hint.gperf
  15cc409f13a8952feb90e94d99ecefa2  gcc/cp/std-name-hint.h
! faa9bfeb82ec3db5d48588049b37fe53  gcc/cp/tree.cc
  01e9a381e6fcf3d016d0170ee0ad71d7  gcc/cp/type-utils.h
! 64d3aa77521f141cc8fe45a240765a11  gcc/cp/typeck.cc
! 4d8031ece24c15d39f0bd84fe2dcf3ab  gcc/cp/typeck2.cc
  12d19e5abc1e436004b8885cde4765f0  gcc/cp/vtable-class-hierarchy.cc
  556f791fb43a25890d32717884f67cd1  gcc/cppbuiltin.cc
  51b40c4eab2c9321ddb49d1acb80edc3  gcc/cppbuiltin.h
*************** a4081c9094d5d8e820f5610a0e881a14  gcc/cp
*** 5739,5749 ****
  39b4704938fb780fdd57ddb7cbb0fdba  gcc/cprop.cc
  bb146ea57855f57a97f23f7c748b05ed  gcc/crc-verification.cc
  b7bf54d1a28938f620902d5d360e7000  gcc/crc-verification.h
! 43c5e4b6068d40d78f91a5f0f65508d1  gcc/cse.cc
  d8e63039ff02f156025e0e64f467b032  gcc/cselib.cc
  f4482f497f6e3a2eae101f16c79b4b27  gcc/cselib.h
  1ded054093de910d9786c62bc4fe8cc6  gcc/cstamp-h.in
! d0c5d6dee248013a4a54657b463ff263  gcc/ctfc.cc
  21aa4df3b0a04c61dfb56d24a5e49e90  gcc/ctfc.h
  3b49d27a12c232bc7df2bf77e4eea817  gcc/ctfout.cc
  c503ae44e590daab467a1996ccce967a  gcc/custom-sarif-properties/cfg.cc
--- 5741,5751 ----
  39b4704938fb780fdd57ddb7cbb0fdba  gcc/cprop.cc
  bb146ea57855f57a97f23f7c748b05ed  gcc/crc-verification.cc
  b7bf54d1a28938f620902d5d360e7000  gcc/crc-verification.h
! 594e1fb873ba1aee8130cefcd7b4b337  gcc/cse.cc
  d8e63039ff02f156025e0e64f467b032  gcc/cselib.cc
  f4482f497f6e3a2eae101f16c79b4b27  gcc/cselib.h
  1ded054093de910d9786c62bc4fe8cc6  gcc/cstamp-h.in
! 4d5ff4ad7f83cad2fff66caccde0780f  gcc/ctfc.cc
  21aa4df3b0a04c61dfb56d24a5e49e90  gcc/ctfc.h
  3b49d27a12c232bc7df2bf77e4eea817  gcc/ctfout.cc
  c503ae44e590daab467a1996ccce967a  gcc/custom-sarif-properties/cfg.cc
*************** c503ae44e590daab467a1996ccce967a  gcc/cu
*** 5752,5758 ****
  86700ca4710faebe1a0dbd2da6bcc75d  gcc/custom-sarif-properties/digraphs.h
  cdc60d179f923c009f0432beb1054e5b  gcc/custom-sarif-properties/state-graphs.cc
  58306e5ac720b353f4c495abf155e8a1  gcc/custom-sarif-properties/state-graphs.h
! c3c7785c715934cbd2fcc046b7994087  gcc/d/ChangeLog
  94dbce564aba342900829d11192f8905  gcc/d/ChangeLog-2006
  1a0536d6571bca334bb5c00dbdf257ab  gcc/d/ChangeLog-2007
  362a026d745031260b2e4dd8eba9becc  gcc/d/ChangeLog-2008
--- 5754,5760 ----
  86700ca4710faebe1a0dbd2da6bcc75d  gcc/custom-sarif-properties/digraphs.h
  cdc60d179f923c009f0432beb1054e5b  gcc/custom-sarif-properties/state-graphs.cc
  58306e5ac720b353f4c495abf155e8a1  gcc/custom-sarif-properties/state-graphs.h
! 3153948ad31d4e4be9f994de0234c705  gcc/d/ChangeLog
  94dbce564aba342900829d11192f8905  gcc/d/ChangeLog-2006
  1a0536d6571bca334bb5c00dbdf257ab  gcc/d/ChangeLog-2007
  362a026d745031260b2e4dd8eba9becc  gcc/d/ChangeLog-2008
*************** e432bfc5c605ae0b1beedf0492ad40d1  gcc/d/
*** 5776,5930 ****
  d916ef405eeaa878b1c2ef9dcf535196  gcc/d/Make-lang.in
  426254b45d40584d0597c63f3fd1f889  gcc/d/README.gcc
  5170dc7fc8ad21399dd35a73673a1b1b  gcc/d/config-lang.in
! 9e39f510891a4f491726675c0efc323c  gcc/d/d-attribs.cc
! 03ab4b5dfdd537bdc840ab95224d060a  gcc/d/d-builtins.cc
! 9b83da3ce937c546cebd8c5610d837a6  gcc/d/d-codegen.cc
! 7e3e1840d6b811828c6e3b2a0caf2eef  gcc/d/d-compiler.cc
! 2b83c5d5a0799c33bd6fc2625d7c2001  gcc/d/d-convert.cc
  62c9322bb6952c891db5089737edce22  gcc/d/d-ctfloat.cc
! 0702f938fb930cf54d0ed1a0620cf839  gcc/d/d-diagnostic.cc
  c5ee2a286608e2d9385816b39f8ae5c5  gcc/d/d-frontend.cc
  bc2edbcb94ab8817426f7e3b458ba478  gcc/d/d-frontend.h
  703fd954a886eae772ae6a46261eb6b5  gcc/d/d-gimplify.cc
! 1550526040df2e081ea18cfc0993b2fa  gcc/d/d-incpath.cc
! efbdd1e29dc0a1044de1b6bbf25ef5e4  gcc/d/d-lang.cc
  d3387225b6b0b4988843166a343aed79  gcc/d/d-longdouble.cc
  1b4f279195786abd8aaf36b97cbe9b5c  gcc/d/d-port.cc
! 1418416a89dc816b826036a01b553171  gcc/d/d-spec.cc
  ff0e8b453455e8497536165eae7c1f31  gcc/d/d-system.h
  5e46b2a1e062794f11ffd6b0844c5883  gcc/d/d-target-def.h
! 661fd46901b62cd9a9ce15a4629779cd  gcc/d/d-target.cc
  1fa6cd16c5a2906d3f842bbcc5297074  gcc/d/d-target.def
  0cbefb1fe5798619dd31fbc791502b11  gcc/d/d-target.h
  96ebb03b303e0c71e962dea84e5154e5  gcc/d/d-tree.def
! 02cdbdf57638633e0d58f820bcf9fc7f  gcc/d/d-tree.h
! 0c43e8bd64df294f87a9fc0dc34a8b8c  gcc/d/decl.cc
! 246c09f9f74bea91c8087ac3a6dc2d25  gcc/d/dmd/MERGE
! a49fe241b8f5613c02449448de72e45b  gcc/d/dmd/README.md
! c4998964d29d4f54378a463f3278b604  gcc/d/dmd/VERSION
  38aadc65e68d4e75b77165f181b78cc5  gcc/d/dmd/access.d
! 1669ac25814e8b48213c679ff7ba8372  gcc/d/dmd/aggregate.d
! 597144cd639019aef8d753ea4ce7c304  gcc/d/dmd/aggregate.h
  e944b3cc5977f3146f04cacf8649d8c0  gcc/d/dmd/aliasthis.d
  21422b359d959535fbad9bf3f51f180b  gcc/d/dmd/aliasthis.h
! 3223b63dea4d7f561a03159288ae9e7c  gcc/d/dmd/arrayop.d
  358e6e9dc1ecd2c86a7aae08dd3aa396  gcc/d/dmd/arraytypes.d
  65bee38915358909d57f9d907f25049b  gcc/d/dmd/arraytypes.h
  01cbde9d907bb77b44dbe04be21a6f71  gcc/d/dmd/ast_node.d
  70f509253981e582b4624b0083ff0168  gcc/d/dmd/ast_node.h
! 57cb6c7031a80421f88153e98afe31f3  gcc/d/dmd/astcodegen.d
! 46e2c9f64c6194c022664e7c7534d3ec  gcc/d/dmd/astenums.d
! 11ba25c0ec007dc3557596d4f00182fe  gcc/d/dmd/attrib.d
  5ea6f705780bed876b445e09d8052e18  gcc/d/dmd/attrib.h
  943555853b7c59e093cd477cd9794ea8  gcc/d/dmd/attribsem.d
! a09656153939f703358bc0a6c41ef21a  gcc/d/dmd/blockexit.d
  e4224ccaecb14d942c71d31bef20d78c  gcc/d/dmd/boostlicense.txt
! ffbb2d95e81b841ff7bac85a068c0112  gcc/d/dmd/builtin.d
! 2f7de6673e57e3265d77fabf5c6f6f83  gcc/d/dmd/canthrow.d
! f06dcabf07ca33abd8042db6230fb74d  gcc/d/dmd/chkformat.d
  6ea1c12bcf71e2d03a559a8bb98b393e  gcc/d/dmd/clone.d
  a439029b15d096cc69638a68c99a808b  gcc/d/dmd/common/README.md
! 130ca8ebce5898b9d08a0931bc114651  gcc/d/dmd/common/bitfields.d
  3628ea219c6c040036b67adfa51494c0  gcc/d/dmd/common/charactertables.d
  6cceed759afed97d547aff75c2c15c79  gcc/d/dmd/common/charactertables.h
! 975edc6df7e6175d4dabacf4ae9d4347  gcc/d/dmd/common/file.d
  8ff83d9e9276172a609feb344d4d66a6  gcc/d/dmd/common/identifiertables.d
  b78e48bcd127669df98a0d76f4164456  gcc/d/dmd/common/outbuffer.d
  293347c6b9d7527810fa8f5be99ef420  gcc/d/dmd/common/outbuffer.h
! 3477544e923a7b650bb698eb226c8257  gcc/d/dmd/common/smallbuffer.d
  6f057b8810015d334068d7cbbf962353  gcc/d/dmd/compiler.d
  fbb0ae262e4dd1a6040c572e7821dc73  gcc/d/dmd/compiler.h
! b242aa2b07ba84c6d8c1d04fe9282917  gcc/d/dmd/cond.d
  fbec442dc6d3871213b7cbbf71d36f22  gcc/d/dmd/cond.h
! e85d84b669948f180e0bc5c8c38de562  gcc/d/dmd/constfold.d
! 19ec2ff301236e4cf5a20cdeba944f75  gcc/d/dmd/cparse.d
  cb8ca96ec048cb51fb90613655fea60b  gcc/d/dmd/ctfe.h
! 9fe1ccdcb05b602bf7a59d0ffcdcbc18  gcc/d/dmd/ctfeexpr.d
  e8058c4a1e43bd8181d63ea36242b7aa  gcc/d/dmd/ctorflow.d
! 7a25cf2f6e3a6ee4b7922e51f8b798f4  gcc/d/dmd/cxxfrontend.d
! 7d356e4ad519d6c051596e87fc76332f  gcc/d/dmd/dcast.d
! 3c9c6b444c5f9f08aff3ed9135f2fdfe  gcc/d/dmd/dclass.d
! 68d5151970acb4aafca90735c91a6e73  gcc/d/dmd/declaration.d
! 861803159a512566caec94c0de24e700  gcc/d/dmd/declaration.h
! a9c8acfcb034fbaac8a873df2b4c11bc  gcc/d/dmd/delegatize.d
! 078a5242dea7835b1a02e6fd2ec520ea  gcc/d/dmd/denum.d
  b7652028ee382a4aaecb375c91e4977e  gcc/d/dmd/deps.d
! aea607afc97eacc73af0ce60e5e19d0d  gcc/d/dmd/dimport.d
! a58640b111d32cecee136ad5f1e8f651  gcc/d/dmd/dinterpret.d
  b3d304f752e7ec702c1dd074f2b48ef7  gcc/d/dmd/dmacro.d
! bba1f1b7dd8779836f494fd94fb03f1f  gcc/d/dmd/dmodule.d
! 2be8ff7f27948129a43b303b576d07ce  gcc/d/dmd/doc.d
  195f1b30a72207fedc96bc6e1f7e659d  gcc/d/dmd/doc.h
! 7259a9d0c0650834e46f31781d8bb8fc  gcc/d/dmd/dscope.d
! 0b8b3bdb7317061879c1a4f32b867970  gcc/d/dmd/dstruct.d
! bc15ecb5016625ff56cbb22ad856870d  gcc/d/dmd/dsymbol.d
! 9f16c7a658b93a4a515ef54cac444094  gcc/d/dmd/dsymbol.h
! 9f54c9673d99f9f850fcca125731984b  gcc/d/dmd/dsymbolsem.d
! 676ea5dc50a877d781cb9ef2197f843a  gcc/d/dmd/dtemplate.d
! 4662835a77551548d96af4e8c6f32c96  gcc/d/dmd/dtoh.d
! a8cd917e0d7faf286a9a965402c6f6cb  gcc/d/dmd/dversion.d
  48b7e8ef8c8fb8f90bf8f5c0109396ba  gcc/d/dmd/entity.d
! 92fab10b8f2516eb309ace256afcd22c  gcc/d/dmd/enum.h
! 04845faf9b1e5a40f4f5123c95bd73bf  gcc/d/dmd/enumsem.d
! 99564ec2089202a4a13cabcb17caecbb  gcc/d/dmd/errors.d
  c11c5cfd4fdd11b63a4352df36a9ef5f  gcc/d/dmd/errors.h
  7e088d325b6d26d2f38488fa13bac5e6  gcc/d/dmd/errorsink.d
! 84824249f04577b3a8072330432dc134  gcc/d/dmd/escape.d
! f0a8d1856255921f64b3f029eb79f2fc  gcc/d/dmd/expression.d
! 9b76b3150aa7b38711c1b3df74124ec1  gcc/d/dmd/expression.h
! df911a8311386ce2107fe58ae1d320dc  gcc/d/dmd/expressionsem.d
! f1ee03e3a2ecedb262ec2acb00cec1fe  gcc/d/dmd/file_manager.d
! 0980ef0301e1eec417dc8827bd7344e3  gcc/d/dmd/func.d
! 2c5c14775dcce5e5866366e6771c0b9b  gcc/d/dmd/funcsem.d
! 36673977685d141f23bd05311dc2d5a3  gcc/d/dmd/globals.d
! 7f9fcb37b827772500f71fd0ec050981  gcc/d/dmd/globals.h
! d89269382d66970dba370032a5d5a6e2  gcc/d/dmd/hdrgen.d
! 28b2f516151b8a169e2ddc3380136d36  gcc/d/dmd/hdrgen.h
! ebc2b8792faa7073835e2e68286431a5  gcc/d/dmd/iasm/gcc.d
  1f224789b07bf27944f15968dcca62ae  gcc/d/dmd/iasm/package.d
! 324aa0598806cb981d6308aa0c6ae7e4  gcc/d/dmd/id.d
  b9968103c21e7625be8785b7233d5458  gcc/d/dmd/id.h
! c5093b16631a844ee943983d8f1cc8b9  gcc/d/dmd/identifier.d
! 361dab90a974e3a1568338b6e038361a  gcc/d/dmd/identifier.h
  69d47c63cbd0c5a1755dc0d9ce0e0f43  gcc/d/dmd/impcnvtab.d
! 8f78c7ba10cb7e92ecb58d48be12612e  gcc/d/dmd/imphint.d
! 98480099777c590dc0216776cb99ef79  gcc/d/dmd/import.h
! 1ba1aa9dd17dd99f413777156b84140d  gcc/d/dmd/importc.d
  ebaa8569b51ce450bf547c517fa32112  gcc/d/dmd/init.d
  b1a67469ba80a1b41c849d88c1b56076  gcc/d/dmd/init.h
! 3e74863433be4a61bd4ade6bf432ec1b  gcc/d/dmd/initsem.d
  ff633e312d7cee2d4d876ad633695f1a  gcc/d/dmd/inline.d
! cca417e92c8a4a90d788db454961363d  gcc/d/dmd/intrange.d
! 5a6abdcc965745ca7057547bcd91f2dd  gcc/d/dmd/json.d
  987273b221dd2deeb71b6c3186560a57  gcc/d/dmd/json.h
! 98262b2f926f919522306e7ac418ce8c  gcc/d/dmd/lambdacomp.d
! 8856eff0f2e897fc65bcb3f3ed16c88f  gcc/d/dmd/lexer.d
  bbe450c0d87dbb29796015b7e2862068  gcc/d/dmd/location.d
  28fa018da64572c2e2dc65eb4df10f79  gcc/d/dmd/mangle.h
  435a784d47452f93ee9b3bf600bfa6c8  gcc/d/dmd/mangle/basic.d
! a25a5c3e565d956209a70ab04aad843b  gcc/d/dmd/mangle/cpp.d
! 22b7f26df845c7c567b222c4e56dda53  gcc/d/dmd/mangle/package.d
! 2518f255e98a5e181f4e6ccaf111a096  gcc/d/dmd/module.h
! 5797eb414b20d21c1c58e949e885f578  gcc/d/dmd/mtype.d
! f6843b219d0751e422985de034202da2  gcc/d/dmd/mtype.h
  29993a83d3593416c9e5a8476b93c34f  gcc/d/dmd/mustuse.d
! 3c248bcd7bedcf1d5d002506fc6893cf  gcc/d/dmd/nogc.d
  f484912afd45dd9a420a7e2942c609c2  gcc/d/dmd/nspace.d
  9fd22735ec5defc239c823bf4cc7dafc  gcc/d/dmd/nspace.h
  5869587fe71c5844e272bb3d342fca3b  gcc/d/dmd/ob.d
! 376f75da96b05a6baebff97b897f60c1  gcc/d/dmd/objc.d
  3d6c6139ccbadbe77a2bbcc1ae115744  gcc/d/dmd/objc.h
! f05896a75756b05966d682c32bf2ee52  gcc/d/dmd/opover.d
! d0c9822528f749d4ce9c48db2a318b4c  gcc/d/dmd/optimize.d
! 37d052bc4000343f32ef23e1b2872224  gcc/d/dmd/parse.d
! 80f0858e0622b90b499915c0ba12f30c  gcc/d/dmd/pragmasem.d
! af8f146f317e2645be528c4cd0c2a2c8  gcc/d/dmd/printast.d
  f38789894c6b0b28bedba3bb9ec03010  gcc/d/dmd/res/default_ddoc_theme.ddoc
  04f57d64eeeaa73285101503465b193b  gcc/d/dmd/root/README.md
  7016ea479a4606b18f1325d8cb8b8dd4  gcc/d/dmd/root/aav.d
! 856889c149983edb6838d9eb6fb92905  gcc/d/dmd/root/array.d
  3a41bdad676b84caeb898e9ad930e5f3  gcc/d/dmd/root/array.h
! 0fa1ced8009674df801797bfc9bad57a  gcc/d/dmd/root/bitarray.d
  c4ef4ae6beb95af2dac84081c2254eb4  gcc/d/dmd/root/bitarray.h
  29b412c675d8c525e044de66f3665708  gcc/d/dmd/root/complex.d
  a16a8a0a72db5419fc4f65cf1e7296f6  gcc/d/dmd/root/complex_t.h
--- 5778,5932 ----
  d916ef405eeaa878b1c2ef9dcf535196  gcc/d/Make-lang.in
  426254b45d40584d0597c63f3fd1f889  gcc/d/README.gcc
  5170dc7fc8ad21399dd35a73673a1b1b  gcc/d/config-lang.in
! e3a6f0edd05f379bdf9c3d094c6b2a78  gcc/d/d-attribs.cc
! b28e281d951471e031670e95fba8014d  gcc/d/d-builtins.cc
! d13c26de2827509dfca9bd878ac12ddf  gcc/d/d-codegen.cc
! f0a6fa18f331a5771005c3b319e1d6d9  gcc/d/d-compiler.cc
! 97457532f0c348f5b93add8aeb0134e1  gcc/d/d-convert.cc
  62c9322bb6952c891db5089737edce22  gcc/d/d-ctfloat.cc
! 7ab9f4bf667a01373d226c80ec78d41e  gcc/d/d-diagnostic.cc
  c5ee2a286608e2d9385816b39f8ae5c5  gcc/d/d-frontend.cc
  bc2edbcb94ab8817426f7e3b458ba478  gcc/d/d-frontend.h
  703fd954a886eae772ae6a46261eb6b5  gcc/d/d-gimplify.cc
! e57c763d71327c092796686484464f5f  gcc/d/d-incpath.cc
! 0abb9ef48cfebc9e3c81580b436c4ecf  gcc/d/d-lang.cc
  d3387225b6b0b4988843166a343aed79  gcc/d/d-longdouble.cc
  1b4f279195786abd8aaf36b97cbe9b5c  gcc/d/d-port.cc
! 1752e16f6e30b87af0e3297a159bed15  gcc/d/d-spec.cc
  ff0e8b453455e8497536165eae7c1f31  gcc/d/d-system.h
  5e46b2a1e062794f11ffd6b0844c5883  gcc/d/d-target-def.h
! 89b65ac69d38cf23bea52ff97cfa31cf  gcc/d/d-target.cc
  1fa6cd16c5a2906d3f842bbcc5297074  gcc/d/d-target.def
  0cbefb1fe5798619dd31fbc791502b11  gcc/d/d-target.h
  96ebb03b303e0c71e962dea84e5154e5  gcc/d/d-tree.def
! 9ac50a388702c4769cf02f0464df5e2d  gcc/d/d-tree.h
! 4ceaaec51430f3934aebbd90b62c497d  gcc/d/decl.cc
! e60fec47bd4c39ec31a066f899fd9083  gcc/d/dmd/MERGE
! 19fa8b50b219a53d3fa7d1c6680ed3e2  gcc/d/dmd/README.md
! fe685aabb62f64dc83d3535c50268a00  gcc/d/dmd/VERSION
  38aadc65e68d4e75b77165f181b78cc5  gcc/d/dmd/access.d
! 0b6b565b85689c4ffec0596fe390480a  gcc/d/dmd/aggregate.d
! 207170f5802ea29faae0ca2837577eff  gcc/d/dmd/aggregate.h
  e944b3cc5977f3146f04cacf8649d8c0  gcc/d/dmd/aliasthis.d
  21422b359d959535fbad9bf3f51f180b  gcc/d/dmd/aliasthis.h
! 50f6728a5b8d4eca1afb9b4dd743ffa7  gcc/d/dmd/arrayop.d
  358e6e9dc1ecd2c86a7aae08dd3aa396  gcc/d/dmd/arraytypes.d
  65bee38915358909d57f9d907f25049b  gcc/d/dmd/arraytypes.h
  01cbde9d907bb77b44dbe04be21a6f71  gcc/d/dmd/ast_node.d
  70f509253981e582b4624b0083ff0168  gcc/d/dmd/ast_node.h
! 630e07d94533dc02b37d18e8910e1edc  gcc/d/dmd/astcodegen.d
! ab77a83f83ba64f1958fe057eea77daf  gcc/d/dmd/astenums.d
! 59da10f604b4a41bc3b04cb65ce68c53  gcc/d/dmd/attrib.d
  5ea6f705780bed876b445e09d8052e18  gcc/d/dmd/attrib.h
  943555853b7c59e093cd477cd9794ea8  gcc/d/dmd/attribsem.d
! 45155359d7bcb34681c13836bacce4ee  gcc/d/dmd/blockexit.d
  e4224ccaecb14d942c71d31bef20d78c  gcc/d/dmd/boostlicense.txt
! 10a4f96d3c0b9e4a62234a66fed4ac95  gcc/d/dmd/builtin.d
! d2e390951e3efbed25d705482ea6b6e4  gcc/d/dmd/canthrow.d
! f22b72c7b6e42c078b93e9aeebeb8745  gcc/d/dmd/chkformat.d
  6ea1c12bcf71e2d03a559a8bb98b393e  gcc/d/dmd/clone.d
  a439029b15d096cc69638a68c99a808b  gcc/d/dmd/common/README.md
! 61d411dcb15d30c83dd9edfa4f3a1c49  gcc/d/dmd/common/bitfields.d
  3628ea219c6c040036b67adfa51494c0  gcc/d/dmd/common/charactertables.d
  6cceed759afed97d547aff75c2c15c79  gcc/d/dmd/common/charactertables.h
! 3823cc8058efa0ebddfdc713d3ad18de  gcc/d/dmd/common/file.d
  8ff83d9e9276172a609feb344d4d66a6  gcc/d/dmd/common/identifiertables.d
  b78e48bcd127669df98a0d76f4164456  gcc/d/dmd/common/outbuffer.d
  293347c6b9d7527810fa8f5be99ef420  gcc/d/dmd/common/outbuffer.h
! d34967808f1c51701172711162e89fa2  gcc/d/dmd/common/smallbuffer.d
  6f057b8810015d334068d7cbbf962353  gcc/d/dmd/compiler.d
  fbb0ae262e4dd1a6040c572e7821dc73  gcc/d/dmd/compiler.h
! 94bb5b2492afc7f86e72cdde6be1ef41  gcc/d/dmd/cond.d
  fbec442dc6d3871213b7cbbf71d36f22  gcc/d/dmd/cond.h
! 4adb0fde64cbce737527490c8e522cab  gcc/d/dmd/constfold.d
! 6218b67862cce733c06bdbf3dcc451f1  gcc/d/dmd/cparse.d
  cb8ca96ec048cb51fb90613655fea60b  gcc/d/dmd/ctfe.h
! 38284e0e1d901c4164adf0a8db244f62  gcc/d/dmd/ctfeexpr.d
  e8058c4a1e43bd8181d63ea36242b7aa  gcc/d/dmd/ctorflow.d
! 5b34b7dd26b98a038aede4db884a169e  gcc/d/dmd/cxxfrontend.d
! b332a39399b6109b21c0d2bc8b50aa92  gcc/d/dmd/dcast.d
! 0b8737112eaa422c5b0c2040c249e936  gcc/d/dmd/dclass.d
! 19a11a8897fc2ac4bddb6174eeafcafb  gcc/d/dmd/declaration.d
! d245159ac348335e70822556f8875fea  gcc/d/dmd/declaration.h
! 45eeb192b0b93becf597bacd6bb4e861  gcc/d/dmd/delegatize.d
! 1c8696c1430fc34abef4ba896417efc5  gcc/d/dmd/denum.d
  b7652028ee382a4aaecb375c91e4977e  gcc/d/dmd/deps.d
! bff18720e23f9c411f44c004f7185d69  gcc/d/dmd/dimport.d
! a7991411d1e913aea857c304385bcacf  gcc/d/dmd/dinterpret.d
  b3d304f752e7ec702c1dd074f2b48ef7  gcc/d/dmd/dmacro.d
! 06758f9946331555feebf5a04ebbb5e4  gcc/d/dmd/dmodule.d
! 65e32390fbe45842ef7ac9f07b2cf741  gcc/d/dmd/doc.d
  195f1b30a72207fedc96bc6e1f7e659d  gcc/d/dmd/doc.h
! a67ec9bb66892c8e82208e0afacf6372  gcc/d/dmd/dscope.d
! 0b6c7634dd6e9bdcf8db9e1b91195d20  gcc/d/dmd/dstruct.d
! 252ebdda2f9384aa2a17022e9ef8d922  gcc/d/dmd/dsymbol.d
! 62c944a599db14bc1b8cc22e703e51b0  gcc/d/dmd/dsymbol.h
! a2e0a7ce8fbb153d400531bb77d7e28a  gcc/d/dmd/dsymbolsem.d
! 8a5de23e1b9661c64e91f756d6b1c408  gcc/d/dmd/dtemplate.d
! d5bb7ce91261a651fcade1cbcbc7c903  gcc/d/dmd/dtoh.d
! 6da03bf90e4fc6cccb188d7cd2e9e8cb  gcc/d/dmd/dversion.d
  48b7e8ef8c8fb8f90bf8f5c0109396ba  gcc/d/dmd/entity.d
! 4355817ae7656e1e229622990f17381c  gcc/d/dmd/enum.h
! 905c516b1f36220789f43abef3a04141  gcc/d/dmd/enumsem.d
! a1279ae425820f30e1fec354fe0fe525  gcc/d/dmd/errors.d
  c11c5cfd4fdd11b63a4352df36a9ef5f  gcc/d/dmd/errors.h
  7e088d325b6d26d2f38488fa13bac5e6  gcc/d/dmd/errorsink.d
! 985faca9d349ccccfb3baae230e5c916  gcc/d/dmd/escape.d
! 259d7d487404d4a5443d3d80ba7fd396  gcc/d/dmd/expression.d
! a11cd1ab7b3b87d475100280c07ac452  gcc/d/dmd/expression.h
! 6937ce3a7eda0eb62ac3e398737aa1ac  gcc/d/dmd/expressionsem.d
! 18f42039c4b02815540d1326a554c1ff  gcc/d/dmd/file_manager.d
! 5ebce63777430c9aa99e00b689febd68  gcc/d/dmd/func.d
! f3173803ba09ef642baa9a72b5512e8e  gcc/d/dmd/funcsem.d
! cc61c52153becc5d7055611971033d0a  gcc/d/dmd/globals.d
! 1f9249dd7da2607b6227378a2893436d  gcc/d/dmd/globals.h
! 17960e40fc468b4fd9be78db5939ebfc  gcc/d/dmd/hdrgen.d
! 9daa4717ef98c1687a1fc311e063a2ff  gcc/d/dmd/hdrgen.h
! 278561340d185054afe540d75d8a020c  gcc/d/dmd/iasm/gcc.d
  1f224789b07bf27944f15968dcca62ae  gcc/d/dmd/iasm/package.d
! 195692d866d6f1d3db55be765648b404  gcc/d/dmd/id.d
  b9968103c21e7625be8785b7233d5458  gcc/d/dmd/id.h
! 644475bd622881c5d776c1780ffd0caf  gcc/d/dmd/identifier.d
! 02a13af5783a113240e505109a37575c  gcc/d/dmd/identifier.h
  69d47c63cbd0c5a1755dc0d9ce0e0f43  gcc/d/dmd/impcnvtab.d
! 3fefdbde222dbfdfa556c45e2e2d8239  gcc/d/dmd/imphint.d
! 8fa8186273418b0ca2b4a5e7ff258259  gcc/d/dmd/import.h
! 5490826e684be8755334ed851a063a81  gcc/d/dmd/importc.d
  ebaa8569b51ce450bf547c517fa32112  gcc/d/dmd/init.d
  b1a67469ba80a1b41c849d88c1b56076  gcc/d/dmd/init.h
! dc91c8168ce48683a54fc28fa2bd959c  gcc/d/dmd/initsem.d
  ff633e312d7cee2d4d876ad633695f1a  gcc/d/dmd/inline.d
! b99b1c906deb253d080333088fd2bb39  gcc/d/dmd/intrange.d
! 7a9906575b61bc21150371ba7c2d8424  gcc/d/dmd/json.d
  987273b221dd2deeb71b6c3186560a57  gcc/d/dmd/json.h
! 6046613479884a0ada105a7fb25f633d  gcc/d/dmd/lambdacomp.d
! 827309d578c9d4bc844c1b9cd307f664  gcc/d/dmd/lexer.d
  bbe450c0d87dbb29796015b7e2862068  gcc/d/dmd/location.d
  28fa018da64572c2e2dc65eb4df10f79  gcc/d/dmd/mangle.h
  435a784d47452f93ee9b3bf600bfa6c8  gcc/d/dmd/mangle/basic.d
! e0fc4558ba7cabf2539a40c71490b8d5  gcc/d/dmd/mangle/cpp.d
! 889ffabfdbba11c830264e8f80df9907  gcc/d/dmd/mangle/package.d
! 3060c3975de808e1fc265423580b9c88  gcc/d/dmd/module.h
! f4af687180d1bff6cabc66dacc8b4bb2  gcc/d/dmd/mtype.d
! b3c625fc458995d46d21d1567c7ec040  gcc/d/dmd/mtype.h
  29993a83d3593416c9e5a8476b93c34f  gcc/d/dmd/mustuse.d
! bae4fc370ed780757bd8eb1985df1898  gcc/d/dmd/nogc.d
  f484912afd45dd9a420a7e2942c609c2  gcc/d/dmd/nspace.d
  9fd22735ec5defc239c823bf4cc7dafc  gcc/d/dmd/nspace.h
  5869587fe71c5844e272bb3d342fca3b  gcc/d/dmd/ob.d
! 67bf4cb8c288635c89c71e505db8c400  gcc/d/dmd/objc.d
  3d6c6139ccbadbe77a2bbcc1ae115744  gcc/d/dmd/objc.h
! 30131b0d8d8bb3595074ee27c6d1c5a8  gcc/d/dmd/opover.d
! 7e6d993f94aad91eab139a4451e723d2  gcc/d/dmd/optimize.d
! c937b3b7303509f65d2cdc56f9935609  gcc/d/dmd/parse.d
! 10c5849745e2ade3c29c2c2e6e263d1e  gcc/d/dmd/pragmasem.d
! 7257c751cbb4f4c24a8997a4e41323dd  gcc/d/dmd/printast.d
  f38789894c6b0b28bedba3bb9ec03010  gcc/d/dmd/res/default_ddoc_theme.ddoc
  04f57d64eeeaa73285101503465b193b  gcc/d/dmd/root/README.md
  7016ea479a4606b18f1325d8cb8b8dd4  gcc/d/dmd/root/aav.d
! d77bdca250dd9bc86f55ad475c27c505  gcc/d/dmd/root/array.d
  3a41bdad676b84caeb898e9ad930e5f3  gcc/d/dmd/root/array.h
! f1ed538ea9f244c7a31079843803f7c5  gcc/d/dmd/root/bitarray.d
  c4ef4ae6beb95af2dac84081c2254eb4  gcc/d/dmd/root/bitarray.h
  29b412c675d8c525e044de66f3665708  gcc/d/dmd/root/complex.d
  a16a8a0a72db5419fc4f65cf1e7296f6  gcc/d/dmd/root/complex_t.h
*************** a16a8a0a72db5419fc4f65cf1e7296f6  gcc/d/
*** 5932,5978 ****
  9dacfdea29663209087516775689ca39  gcc/d/dmd/root/ctfloat.h
  90d7b81f18ef716664525dda431ae045  gcc/d/dmd/root/dcompat.h
  7c536a32ccf522d80e0058c3ef4e8b29  gcc/d/dmd/root/dsystem.h
! 51237492c7a6682d3a0fd602a817f605  gcc/d/dmd/root/file.d
! 3be0f2f6af9b9edf403a8b3d92607ca1  gcc/d/dmd/root/filename.d
  c4f196857093b4920d7e76e2dccfce55  gcc/d/dmd/root/filename.h
! 9e4c2b55c18d8b70866f75f7851e7392  gcc/d/dmd/root/hash.d
  b9c373949801135e1bddbde0e56df358  gcc/d/dmd/root/longdouble.d
  00323e5d7995f24455211f287db2933b  gcc/d/dmd/root/optional.d
  18757675f78f2f0ef44cf35d70708a95  gcc/d/dmd/root/optional.h
  f975c3bc54608b3a33eefc00f171075f  gcc/d/dmd/root/port.d
  614f435a172de91c9a8094be94e18bb0  gcc/d/dmd/root/port.h
! 24ea3bf0ca03a4b0ff0ecc07ce5b6745  gcc/d/dmd/root/region.d
! c2b9df8f9b600a71ea5e5bf20e0311e7  gcc/d/dmd/root/rmem.d
  689a9ecaf1d57bde83bc13e4cadca086  gcc/d/dmd/root/rmem.h
  b9117650575c4354e53bc2c692c5cfe1  gcc/d/dmd/root/speller.d
! 53f0b683ef2c6ef4c1e7d51cd363e9d2  gcc/d/dmd/root/string.d
! 621afdc53c48e845b400be40cd42d7c0  gcc/d/dmd/root/stringtable.d
  18265bb7937a4657c9b8dcca3a08557f  gcc/d/dmd/root/utf.d
! 4aa5e14d4aef6717daa6346b1e22978b  gcc/d/dmd/rootobject.d
! 35bb066b88f98925eafe80f5ce892847  gcc/d/dmd/rootobject.h
! b38eca3b8c5173ead86754f138858f65  gcc/d/dmd/safe.d
! 6cb1695d9cf3f04d0b1e1085c5f2d9f2  gcc/d/dmd/scope.h
! 95333c46e6a7916562d3375de1e2d528  gcc/d/dmd/semantic2.d
! f910700f45aa435cc63b7131a8a96cbe  gcc/d/dmd/semantic3.d
  564c9aa01e32272ea315e2123fe1376d  gcc/d/dmd/sideeffect.d
  7f525aab9fca4912bad3abf43c7b114e  gcc/d/dmd/statement.d
  8e7e95803a6b747d0e046c94e11699e7  gcc/d/dmd/statement.h
! 3d5ee2be7178b94403ace7f517408b48  gcc/d/dmd/statementsem.d
! a7e9cf50e8838033012ebcec68f57592  gcc/d/dmd/staticassert.d
  999cc27e94e3906d8ed37c8c3c20a7fe  gcc/d/dmd/staticassert.h
  134f187402100d2906a774b8ab3427b7  gcc/d/dmd/staticcond.d
  851920b00561bdde300cee788d9492cd  gcc/d/dmd/stmtstate.d
  7b7435ff2e95d0a2c3426dd35f4b4980  gcc/d/dmd/target.d
  de14423883f55275283db320ae89c3e8  gcc/d/dmd/target.h
! 17415a01e2dd7a4abcc9af86c6bae13c  gcc/d/dmd/template.h
! f8585ff2e05dec64066829cf36679520  gcc/d/dmd/templateparamsem.d
! 98f2748faeccbcc723d7126220be72f7  gcc/d/dmd/templatesem.d
! 93c08d197b7750e5b8801132db8b7fe4  gcc/d/dmd/timetrace.d
! 6790d7d97ac383f2fe69e7a1e24defae  gcc/d/dmd/tokens.d
! bc4b3569ee8f00b59569280216e7b102  gcc/d/dmd/tokens.h
! 613f4b298cb8c767fcd103fd6a599bb4  gcc/d/dmd/traits.d
! 54de664b099dfcc8544cac0f4d7ea527  gcc/d/dmd/typesem.d
! a89b84fb0a39f583489d122186c58691  gcc/d/dmd/typinf.d
  f372f14ecea0c837d34ff099f7aef870  gcc/d/dmd/typinf.h
  af456a0015267d13132f5795b031b8c6  gcc/d/dmd/utils.d
  f0862f7d5405cfe64d4c8d0d7618be1b  gcc/d/dmd/version.h
--- 5934,5981 ----
  9dacfdea29663209087516775689ca39  gcc/d/dmd/root/ctfloat.h
  90d7b81f18ef716664525dda431ae045  gcc/d/dmd/root/dcompat.h
  7c536a32ccf522d80e0058c3ef4e8b29  gcc/d/dmd/root/dsystem.h
! d2edbe4538789a6ee21619e2f7f9b85e  gcc/d/dmd/root/file.d
! 898b009778e305227edb630682e4687f  gcc/d/dmd/root/filename.d
  c4f196857093b4920d7e76e2dccfce55  gcc/d/dmd/root/filename.h
! b2d14576a6b40f3e888f3c0fe8bf33dc  gcc/d/dmd/root/hash.d
  b9c373949801135e1bddbde0e56df358  gcc/d/dmd/root/longdouble.d
  00323e5d7995f24455211f287db2933b  gcc/d/dmd/root/optional.d
  18757675f78f2f0ef44cf35d70708a95  gcc/d/dmd/root/optional.h
  f975c3bc54608b3a33eefc00f171075f  gcc/d/dmd/root/port.d
  614f435a172de91c9a8094be94e18bb0  gcc/d/dmd/root/port.h
! c1f36e58511b1683be8a7d9e455d8bcb  gcc/d/dmd/root/region.d
! 08271d8c9fa9ac4b7f3b264f238fd1bd  gcc/d/dmd/root/rmem.d
  689a9ecaf1d57bde83bc13e4cadca086  gcc/d/dmd/root/rmem.h
  b9117650575c4354e53bc2c692c5cfe1  gcc/d/dmd/root/speller.d
! 0fd3f0220cce99d57a05b98a5304023a  gcc/d/dmd/root/string.d
! 374bdac6753a47040717f1174e23a61c  gcc/d/dmd/root/stringtable.d
  18265bb7937a4657c9b8dcca3a08557f  gcc/d/dmd/root/utf.d
! 905d9c0b63ee694bbfc8d00759342b44  gcc/d/dmd/rootobject.d
! 8617ad6e5c794b32e4e8e5102faf7947  gcc/d/dmd/rootobject.h
! fbd7887f2d110d9317a88e89b42603d9  gcc/d/dmd/safe.d
! 2a87924ab1da4a9dec66be9ffb270ca5  gcc/d/dmd/scope.h
! a17761091d3407ad27bbd68653426e9a  gcc/d/dmd/semantic2.d
! 1f8202b4da68724a3ae382395aadb4bf  gcc/d/dmd/semantic3.d
  564c9aa01e32272ea315e2123fe1376d  gcc/d/dmd/sideeffect.d
  7f525aab9fca4912bad3abf43c7b114e  gcc/d/dmd/statement.d
  8e7e95803a6b747d0e046c94e11699e7  gcc/d/dmd/statement.h
! 34c448ad7ec172631e1c7189a56f1ebd  gcc/d/dmd/statementsem.d
! 019d20606bad1372a3957caa49666216  gcc/d/dmd/staticassert.d
  999cc27e94e3906d8ed37c8c3c20a7fe  gcc/d/dmd/staticassert.h
  134f187402100d2906a774b8ab3427b7  gcc/d/dmd/staticcond.d
  851920b00561bdde300cee788d9492cd  gcc/d/dmd/stmtstate.d
  7b7435ff2e95d0a2c3426dd35f4b4980  gcc/d/dmd/target.d
  de14423883f55275283db320ae89c3e8  gcc/d/dmd/target.h
! 95fae74cf84392893d13163e0e1d5960  gcc/d/dmd/targetcompiler.d
! 63fc3348717ad1691da85eaaa861b128  gcc/d/dmd/template.h
! cd42fcbe157c6de095712e8573af3c46  gcc/d/dmd/templateparamsem.d
! b62520f09fc0433e8857cd77b98c3231  gcc/d/dmd/templatesem.d
! e3478e4fd377144880b10626f252de44  gcc/d/dmd/timetrace.d
! 67f722b0343c8c20b65a928da16104f0  gcc/d/dmd/tokens.d
! bb3dfb556d48b4a36a8703a36d0b3620  gcc/d/dmd/tokens.h
! 684c540e6da71c1139eb27c084e7cf2a  gcc/d/dmd/traits.d
! 818f4057f6aa92b6d808b307bc254b27  gcc/d/dmd/typesem.d
! 063c3ee233be8f4cd8c357df1610eaaa  gcc/d/dmd/typinf.d
  f372f14ecea0c837d34ff099f7aef870  gcc/d/dmd/typinf.h
  af456a0015267d13132f5795b031b8c6  gcc/d/dmd/utils.d
  f0862f7d5405cfe64d4c8d0d7618be1b  gcc/d/dmd/version.h
*************** a3cd575b3088ab06aa23c81c93ace7e7  gcc/d/
*** 5984,6005 ****
  9f4b31afc643d000331d393fbdc8bff3  gcc/d/dmd/visitor/postorder.d
  9b22040efac930e873d2a2565a2867da  gcc/d/dmd/visitor/statement_rewrite_walker.d
  1cbd9c1c0ec261f10e9d9443fc16f987  gcc/d/dmd/visitor/transitive.d
! e0a965798a80f5fcc52dc0decb83063a  gcc/d/expr.cc
  ae98ef7253f51b9c2283da08c3df60b1  gcc/d/gdc.texi
  fe75e0460d453b2242165e5b49a6f5dc  gcc/d/implement-d.texi
! 4acffd3a865ffe3456f9be4cb0fd0a51  gcc/d/imports.cc
  f3f7af7813097c4eb0e00abeaa1c93d9  gcc/d/intrinsics.cc
! 64cd87579fb52ccd072a1358f13f2b97  gcc/d/intrinsics.def
  b57c47a44a7c09a7b62838a41eb3723f  gcc/d/lang-specs.h
! ac98f1dd54a2046a375bb109b247c2e9  gcc/d/lang.opt
  47e9096961d9bb77ddbb6c4623d2cc8d  gcc/d/lang.opt.urls
  a84c5c8dc5dd34c74b6c874a99718559  gcc/d/longdouble.h
  315914960c100ee43441bdcb728d419c  gcc/d/modules.cc
! 57d0e5ed4dbe3f57708cbc58bfb514a6  gcc/d/runtime.cc
! e1c0ee6456e9c0e34c3f6e43544b19b1  gcc/d/runtime.def
! e718440c7bcce04d4ab5bf458c766e04  gcc/d/toir.cc
! 9dc91fde485274c7e0ed4032120ebcd5  gcc/d/typeinfo.cc
! e319d2fdd9d192594ed7e3994b7a8594  gcc/d/types.cc
  97d491fba0dd57fe8e4fb67f2c7f8b88  gcc/data-streamer-in.cc
  d1658e0b3a01487789371ee847def1b2  gcc/data-streamer-out.cc
  63245724941a35dfab045b09f88d3ab4  gcc/data-streamer.cc
--- 5987,6008 ----
  9f4b31afc643d000331d393fbdc8bff3  gcc/d/dmd/visitor/postorder.d
  9b22040efac930e873d2a2565a2867da  gcc/d/dmd/visitor/statement_rewrite_walker.d
  1cbd9c1c0ec261f10e9d9443fc16f987  gcc/d/dmd/visitor/transitive.d
! 131464cdc94026dd96c786ebd65ffb45  gcc/d/expr.cc
  ae98ef7253f51b9c2283da08c3df60b1  gcc/d/gdc.texi
  fe75e0460d453b2242165e5b49a6f5dc  gcc/d/implement-d.texi
! a1264deb8aa43914b45e5a16767cc28b  gcc/d/imports.cc
  f3f7af7813097c4eb0e00abeaa1c93d9  gcc/d/intrinsics.cc
! ce172275028d88abdad7fb3302e7017f  gcc/d/intrinsics.def
  b57c47a44a7c09a7b62838a41eb3723f  gcc/d/lang-specs.h
! d926df42786a0b32bc4c04fab4d1cdff  gcc/d/lang.opt
  47e9096961d9bb77ddbb6c4623d2cc8d  gcc/d/lang.opt.urls
  a84c5c8dc5dd34c74b6c874a99718559  gcc/d/longdouble.h
  315914960c100ee43441bdcb728d419c  gcc/d/modules.cc
! 2fc8432bfa0576b0d005fd3d883ea861  gcc/d/runtime.cc
! 2a58a11cea02555c122db5fe3272f8bf  gcc/d/runtime.def
! 8e6ac7d895e5279ce9a5b93f58cd56b7  gcc/d/toir.cc
! affae45493ed4825280855abb52625aa  gcc/d/typeinfo.cc
! 728b071034e9ebd0b358709c62834e38  gcc/d/types.cc
  97d491fba0dd57fe8e4fb67f2c7f8b88  gcc/data-streamer-in.cc
  d1658e0b3a01487789371ee847def1b2  gcc/data-streamer-out.cc
  63245724941a35dfab045b09f88d3ab4  gcc/data-streamer.cc
*************** b8034736dae3f6d654eba555f64e1c26  gcc/di
*** 6075,6081 ****
  009ecd89188fdd51b7313ff581575aa3  gcc/diagnostics/paths-output.cc
  35957f691aa90b1f7b9f489e7da9e720  gcc/diagnostics/paths.cc
  91f77747402437b068da1e7be934adec  gcc/diagnostics/paths.h
! 461f01e3d7507e51625fcceac309c961  gcc/diagnostics/sarif-sink.cc
  2c419fdad8de985a25f5fe60bd707c38  gcc/diagnostics/sarif-sink.h
  04b71f2b22c1f09aaa33b8832fc5272a  gcc/diagnostics/selftest-context.cc
  3dca4c2a57fd5d49cbeeff9b7242c57a  gcc/diagnostics/selftest-context.h
--- 6078,6084 ----
  009ecd89188fdd51b7313ff581575aa3  gcc/diagnostics/paths-output.cc
  35957f691aa90b1f7b9f489e7da9e720  gcc/diagnostics/paths.cc
  91f77747402437b068da1e7be934adec  gcc/diagnostics/paths.h
! e1e8a11c3395d4775d8357ff05483dec  gcc/diagnostics/sarif-sink.cc
  2c419fdad8de985a25f5fe60bd707c38  gcc/diagnostics/sarif-sink.h
  04b71f2b22c1f09aaa33b8832fc5272a  gcc/diagnostics/selftest-context.cc
  3dca4c2a57fd5d49cbeeff9b7242c57a  gcc/diagnostics/selftest-context.h
*************** d8b2becdc7d9c570f256e19e1b1ac4f1  gcc/do
*** 6115,6121 ****
  483a7b956113f0370528460e842ff7b0  gcc/doc/fragments.texi
  7fb1e4199b2e70228fda69b8065d83c4  gcc/doc/frontends.texi
  23b032ef72e5208469d1a736f460b6a1  gcc/doc/gcc.texi
! 254ffd54d0e594940bceae920fe2cd08  gcc/doc/gccint.texi
  c4c2d60b79a670894debcf60da0e71e9  gcc/doc/gcov-dump.texi
  aa98c00cad5e7ccb99b898a166288d0c  gcc/doc/gcov-tool.texi
  8910763f8e2d80436cd2a70891012ad7  gcc/doc/gcov.texi
--- 6118,6124 ----
  483a7b956113f0370528460e842ff7b0  gcc/doc/fragments.texi
  7fb1e4199b2e70228fda69b8065d83c4  gcc/doc/frontends.texi
  23b032ef72e5208469d1a736f460b6a1  gcc/doc/gcc.texi
! 12456fc9951c0396af8774f0f9961a5a  gcc/doc/gccint.texi
  c4c2d60b79a670894debcf60da0e71e9  gcc/doc/gcov-dump.texi
  aa98c00cad5e7ccb99b898a166288d0c  gcc/doc/gcov-tool.texi
  8910763f8e2d80436cd2a70891012ad7  gcc/doc/gcov.texi
*************** f47d236d7ee7e48319a13461771035d6  gcc/do
*** 6135,6141 ****
  e9b8122841fbfbbc30fee8ed6613c399  gcc/doc/include/texinfo.tex
  ea08d2d8f32ef2324985c5220c87a3cd  gcc/doc/install.texi
  30a2209eee0a2bed76e2d9ff3bd646f2  gcc/doc/install.texi2html
! 18d3c2e282c8ddf4f9232b65173060cc  gcc/doc/invoke.texi
  dd9d4097ebfa9e936c41913343807268  gcc/doc/languages.texi
  46d2bbbd37002bb71569d0b1f27d7a5a  gcc/doc/libgcc.texi
  ef4f00c423089323edef1d3cff31a4a2  gcc/doc/libgdiagnostics/Makefile
--- 6138,6144 ----
  e9b8122841fbfbbc30fee8ed6613c399  gcc/doc/include/texinfo.tex
  ea08d2d8f32ef2324985c5220c87a3cd  gcc/doc/install.texi
  30a2209eee0a2bed76e2d9ff3bd646f2  gcc/doc/install.texi2html
! b1e43968df6d6bc0993803fc02404f0e  gcc/doc/invoke.texi
  dd9d4097ebfa9e936c41913343807268  gcc/doc/languages.texi
  46d2bbbd37002bb71569d0b1f27d7a5a  gcc/doc/libgcc.texi
  ef4f00c423089323edef1d3cff31a4a2  gcc/doc/libgdiagnostics/Makefile
*************** f7e932ab983b28cd4bef523021fa9eb0  gcc/do
*** 6177,6182 ****
--- 6180,6186 ----
  afaf0b9b413500a77920c3963dcd3978  gcc/doc/objc.texi
  79e8babebb4a40553fc011874ac21cbb  gcc/doc/optinfo.texi
  3abb75ff788f5434702f351bf7a279c9  gcc/doc/options.texi
+ 56b2b4138ac0f7ae49e83b436c7b9182  gcc/doc/params.texi
  4f849b8e491aa0fa8b80c3cefe9dc5ec  gcc/doc/passes.texi
  e54937e427a2584ac4045286c725fab1  gcc/doc/plugins.texi
  0603ab3940871fa2a55ddbd7c2719eb7  gcc/doc/poly-int.texi
*************** c84360f0ac80eeea4d03d024a7641faf  gcc/do
*** 6203,6209 ****
  f5408da3ae295306d302b711e20589dd  gcc/double-int.h
  3e504c158ca95274231f719168303b88  gcc/dse.cc
  ca6a1fb79f0e812d961d3fcb6398aa54  gcc/dump-context.h
! 3c13b1d08b957d1b4028054cbd6ad8f4  gcc/dumpfile.cc
  92a769cfebe5826f371d353067aa45fa  gcc/dumpfile.h
  47fa43c05c1d54137379611522cdaa28  gcc/dwarf2asm.cc
  3e33ddcae27cd933ce3db85c55b25274  gcc/dwarf2asm.h
--- 6207,6213 ----
  f5408da3ae295306d302b711e20589dd  gcc/double-int.h
  3e504c158ca95274231f719168303b88  gcc/dse.cc
  ca6a1fb79f0e812d961d3fcb6398aa54  gcc/dump-context.h
! 2a26e65e7e022371aacb41a45aafc234  gcc/dumpfile.cc
  92a769cfebe5826f371d353067aa45fa  gcc/dumpfile.h
  47fa43c05c1d54137379611522cdaa28  gcc/dwarf2asm.cc
  3e33ddcae27cd933ce3db85c55b25274  gcc/dwarf2asm.h
*************** e3b758ef604b48f000fb865e38253381  gcc/ex
*** 6229,6235 ****
  9542db78094e70fd18442ce8a2b02264  gcc/explow.h
  82a6eed405414fee082896bb6a2bd1c6  gcc/expmed.cc
  2431f17e1f416ef0b9c38b1b975942a4  gcc/expmed.h
! d9f26a926d640b6eac7ead980aef457f  gcc/expr.cc
  07d490719ee3fa697cd70f3f98183258  gcc/expr.h
  8cca7ee32636f4556dceffe46dc6c948  gcc/ext-dce.cc
  8ca3dbbcb4ffeb7bd2c8f46140869732  gcc/fibonacci_heap.cc
--- 6233,6239 ----
  9542db78094e70fd18442ce8a2b02264  gcc/explow.h
  82a6eed405414fee082896bb6a2bd1c6  gcc/expmed.cc
  2431f17e1f416ef0b9c38b1b975942a4  gcc/expmed.h
! 34be9f3d5e82f9676fad5859c058251e  gcc/expr.cc
  07d490719ee3fa697cd70f3f98183258  gcc/expr.h
  8cca7ee32636f4556dceffe46dc6c948  gcc/ext-dce.cc
  8ca3dbbcb4ffeb7bd2c8f46140869732  gcc/fibonacci_heap.cc
*************** f80b38c70a85f9aeae9688b937b028ba  gcc/fi
*** 6243,6254 ****
  1caa253d024b0e3dcf3e6ba5ca8eeab1  gcc/fixed-value.h
  57d536e4a123ac5161bf8eae17154030  gcc/flag-types.h
  85741de0b8ea9e109ee1355d60bfd397  gcc/flags.h
! 28f732db1eb82dab6b7ec80c73614d44  gcc/fold-const-call.cc
  0b4405bca4b699887c6a47e1d25b216c  gcc/fold-const-call.h
! 9bf2d6d36106157c80bed68f5cf784fc  gcc/fold-const.cc
  0ec02a37dbbe9cb267f0ea1263085ed3  gcc/fold-const.h
  764b231c53a63f6a622c187ac0d381d0  gcc/fold-mem-offsets.cc
! 80a24a68ace837328d381e07a1ce1fee  gcc/fortran/ChangeLog
  083c53fadafdcf3be46713838a51e36c  gcc/fortran/ChangeLog-2002
  2a4ca18d211fb2603139354fd16398ed  gcc/fortran/ChangeLog-2003
  e7462609ebd0dd7c874e0fc00e2833aa  gcc/fortran/ChangeLog-2004
--- 6247,6258 ----
  1caa253d024b0e3dcf3e6ba5ca8eeab1  gcc/fixed-value.h
  57d536e4a123ac5161bf8eae17154030  gcc/flag-types.h
  85741de0b8ea9e109ee1355d60bfd397  gcc/flags.h
! 4c030e20bb385d0d71edd6f9e1b647b0  gcc/fold-const-call.cc
  0b4405bca4b699887c6a47e1d25b216c  gcc/fold-const-call.h
! 3fa5e4f4f738ce63ebed444306c95973  gcc/fold-const.cc
  0ec02a37dbbe9cb267f0ea1263085ed3  gcc/fold-const.h
  764b231c53a63f6a622c187ac0d381d0  gcc/fold-mem-offsets.cc
! 715c61072e0ef6274113ca7b2ecba7d9  gcc/fortran/ChangeLog
  083c53fadafdcf3be46713838a51e36c  gcc/fortran/ChangeLog-2002
  2a4ca18d211fb2603139354fd16398ed  gcc/fortran/ChangeLog-2003
  e7462609ebd0dd7c874e0fc00e2833aa  gcc/fortran/ChangeLog-2004
*************** bcb129d4d143e6ec42b4ddec1fea30b8  gcc/fo
*** 6279,6286 ****
  1f3ee645ab25a3d858b555c00c0327ae  gcc/fortran/arith.h
  b9eb124ac64250ae6b43323a196eb79f  gcc/fortran/array.cc
  bc40e87bca719f86583a020eff2d6a73  gcc/fortran/bbt.cc
! 46445812eae3031e15aec7c4fea31772  gcc/fortran/check.cc
! 11a823a64183cc8fffbce6e17dca0f76  gcc/fortran/class.cc
  040fe6bac50f04e19e3cd79aa910103d  gcc/fortran/coarray.cc
  ee80d28f835ba80db395760139037e11  gcc/fortran/config-lang.in
  8a0026117bea2831adebb2edc422fb55  gcc/fortran/constructor.cc
--- 6283,6290 ----
  1f3ee645ab25a3d858b555c00c0327ae  gcc/fortran/arith.h
  b9eb124ac64250ae6b43323a196eb79f  gcc/fortran/array.cc
  bc40e87bca719f86583a020eff2d6a73  gcc/fortran/bbt.cc
! 7ec41a807233773ca4f5bf54c7308a6e  gcc/fortran/check.cc
! cb187afae869d66ea5e19e55fa945052  gcc/fortran/class.cc
  040fe6bac50f04e19e3cd79aa910103d  gcc/fortran/coarray.cc
  ee80d28f835ba80db395760139037e11  gcc/fortran/config-lang.in
  8a0026117bea2831adebb2edc422fb55  gcc/fortran/constructor.cc
*************** edad5176d72953374d67effefef0a605  gcc/fo
*** 6290,6312 ****
  48e7987762051d8cf68633af2633e50f  gcc/fortran/cpp.h
  213bc611adee1d275a412b3ed4886e79  gcc/fortran/data.cc
  ac7321680382b23989a6637e02dfb80e  gcc/fortran/data.h
! 4aacf7fc1e395d8a2ebfff5ae3a76818  gcc/fortran/decl.cc
  26f9d3cd778f806f891b1ae70cad3305  gcc/fortran/dependency.cc
  b66b99368e3cd17573ae64a38e36c1de  gcc/fortran/dependency.h
! fe0fcd93ad74f370b736a7f318964506  gcc/fortran/dump-parse-tree.cc
  65aa25da09bdeee948cdad39cfc4d960  gcc/fortran/error.cc
  8733cfc2753e62375657a319c4fd1242  gcc/fortran/expr.cc
  354927f6cb797cd538c0ab8ab0e552bb  gcc/fortran/f95-lang.cc
  d162511ebc8080669ebdf414e36c7d62  gcc/fortran/frontend-passes.cc
  c85c9309a4274609c6ff6466621c90f6  gcc/fortran/gfc-diagnostic.def
  afb07146daad7f36a59c52e053f6772f  gcc/fortran/gfc-internals.texi
! 282f1fe7176631b2c0bfc7aba30c2c3b  gcc/fortran/gfortran.h
  4b41c64e656ca5096ae5a265ff7b2116  gcc/fortran/gfortran.texi
  9da0114ccf35340d3035f21f8a0f3325  gcc/fortran/gfortranspec.cc
  e74b62dc22fe7098c12db5035b41ff3a  gcc/fortran/interface.cc
  4793e9c888307d569c02b46f858468a4  gcc/fortran/intrinsic.cc
  ec9496f868f02a839c7e138123458eec  gcc/fortran/intrinsic.h
! c393d50c88b7e4359760b320a2b2717d  gcc/fortran/intrinsic.texi
  312a2ab5d69163ee17f8571a964085b9  gcc/fortran/invoke.texi
  3deea9e38b884bce9d11233d65e4b1f7  gcc/fortran/io.cc
  02af2e093ad4f92649a6370fa6dc3215  gcc/fortran/ioparm.def
--- 6294,6316 ----
  48e7987762051d8cf68633af2633e50f  gcc/fortran/cpp.h
  213bc611adee1d275a412b3ed4886e79  gcc/fortran/data.cc
  ac7321680382b23989a6637e02dfb80e  gcc/fortran/data.h
! 4098460197d5afc4b7ef943dafac5cdb  gcc/fortran/decl.cc
  26f9d3cd778f806f891b1ae70cad3305  gcc/fortran/dependency.cc
  b66b99368e3cd17573ae64a38e36c1de  gcc/fortran/dependency.h
! d159d22a53e7b0f3fc49d23c3a112081  gcc/fortran/dump-parse-tree.cc
  65aa25da09bdeee948cdad39cfc4d960  gcc/fortran/error.cc
  8733cfc2753e62375657a319c4fd1242  gcc/fortran/expr.cc
  354927f6cb797cd538c0ab8ab0e552bb  gcc/fortran/f95-lang.cc
  d162511ebc8080669ebdf414e36c7d62  gcc/fortran/frontend-passes.cc
  c85c9309a4274609c6ff6466621c90f6  gcc/fortran/gfc-diagnostic.def
  afb07146daad7f36a59c52e053f6772f  gcc/fortran/gfc-internals.texi
! fc7d12e03d706219e1c242ee8e6d4095  gcc/fortran/gfortran.h
  4b41c64e656ca5096ae5a265ff7b2116  gcc/fortran/gfortran.texi
  9da0114ccf35340d3035f21f8a0f3325  gcc/fortran/gfortranspec.cc
  e74b62dc22fe7098c12db5035b41ff3a  gcc/fortran/interface.cc
  4793e9c888307d569c02b46f858468a4  gcc/fortran/intrinsic.cc
  ec9496f868f02a839c7e138123458eec  gcc/fortran/intrinsic.h
! fa00f165ecb2b5efbeb6fa4bc6d217a2  gcc/fortran/intrinsic.texi
  312a2ab5d69163ee17f8571a964085b9  gcc/fortran/invoke.texi
  3deea9e38b884bce9d11233d65e4b1f7  gcc/fortran/io.cc
  02af2e093ad4f92649a6370fa6dc3215  gcc/fortran/ioparm.def
*************** f7735c64af748cdef5caffae58a94749  gcc/fo
*** 6322,6339 ****
  bf54232c4c950ed772f4964c4f79629e  gcc/fortran/matchexp.cc
  915f6b30a8c22a5fea18690269a5a4a4  gcc/fortran/mathbuiltins.def
  9687294592a5ccef5d0b8254ab33816b  gcc/fortran/misc.cc
! f86547d523c51df822f6eb16438d46b8  gcc/fortran/module.cc
! 22a81465875ac50bf5f5b33ba24d312c  gcc/fortran/openmp.cc
! b59741c468360dc1ed1ff70bb5b9ffbc  gcc/fortran/options.cc
! 14bfc8cce7689afc9682a2e91f76a037  gcc/fortran/parse.cc
  c97a1f016de974126c688bb9c805f323  gcc/fortran/parse.h
  c5246d76c04dbc669841c906598db57e  gcc/fortran/primary.cc
  e96151804a5a450fc63e85b88f27ef99  gcc/fortran/resolve.cc
! 4b8c563657dd74d2fa1431a1004eb549  gcc/fortran/scanner.cc
  18963b3f6aacca960fd6aa72b429a9d2  gcc/fortran/scanner.h
! 715d95102faf740da2fefc9701cb655c  gcc/fortran/simplify.cc
! eeebf17ef1f12c809de44012289a8ab8  gcc/fortran/st.cc
! 94fc65a2744229e5909ff74d5513a905  gcc/fortran/symbol.cc
  1c6fd4e52d7d8b97d9357ff08b660d49  gcc/fortran/target-memory.cc
  92193b934a673cebed3efed7f74a9cac  gcc/fortran/target-memory.h
  b6b366b7d6617c2dce9a67b7cacccb98  gcc/fortran/trans-array.cc
--- 6326,6343 ----
  bf54232c4c950ed772f4964c4f79629e  gcc/fortran/matchexp.cc
  915f6b30a8c22a5fea18690269a5a4a4  gcc/fortran/mathbuiltins.def
  9687294592a5ccef5d0b8254ab33816b  gcc/fortran/misc.cc
! 25e6aeaf8ad893e5f8ab35f5c786911a  gcc/fortran/module.cc
! 97401542f27518750fdb77a3899d8adf  gcc/fortran/openmp.cc
! 7baca4fc0a6fcd712dcbccab22987c74  gcc/fortran/options.cc
! 51c7efe91d03b1ef05f51f3f1f4c90f6  gcc/fortran/parse.cc
  c97a1f016de974126c688bb9c805f323  gcc/fortran/parse.h
  c5246d76c04dbc669841c906598db57e  gcc/fortran/primary.cc
  e96151804a5a450fc63e85b88f27ef99  gcc/fortran/resolve.cc
! 2c98823b77eb8d1c8818d06dc48f3e0a  gcc/fortran/scanner.cc
  18963b3f6aacca960fd6aa72b429a9d2  gcc/fortran/scanner.h
! cb6be151a06683abd748861c64ae065d  gcc/fortran/simplify.cc
! cbdc87ddd4ad5837f1771e93f704a33e  gcc/fortran/st.cc
! 8eef91fc4cbe53fc467883bff650ef9f  gcc/fortran/symbol.cc
  1c6fd4e52d7d8b97d9357ff08b660d49  gcc/fortran/target-memory.cc
  92193b934a673cebed3efed7f74a9cac  gcc/fortran/target-memory.h
  b6b366b7d6617c2dce9a67b7cacccb98  gcc/fortran/trans-array.cc
*************** a0c40b654df0b5c5213047d26e48e97a  gcc/fo
*** 6341,6349 ****
  d92b6f7feff3882a660f0f7c2c60b7b0  gcc/fortran/trans-common.cc
  98960d7450a15e1ecc9789bd0bde16a7  gcc/fortran/trans-const.cc
  0d5cf4117521dba2aea9c8fd7ac67888  gcc/fortran/trans-const.h
! 15de42985a0c7f55235f61aa3df7115b  gcc/fortran/trans-decl.cc
! 2acb7546a1daed48c8311d8df879cc0c  gcc/fortran/trans-expr.cc
! 811dc438c87b8d4bfc6ef1ed8633da28  gcc/fortran/trans-intrinsic.cc
  8a57cfea30bf3f2ccc14a884e7b0d1da  gcc/fortran/trans-io.cc
  06841cda6c842aae9f09268cec2b1f95  gcc/fortran/trans-openmp.cc
  ee35535420c8c9e229f87598de1bf5eb  gcc/fortran/trans-stmt.cc
--- 6345,6353 ----
  d92b6f7feff3882a660f0f7c2c60b7b0  gcc/fortran/trans-common.cc
  98960d7450a15e1ecc9789bd0bde16a7  gcc/fortran/trans-const.cc
  0d5cf4117521dba2aea9c8fd7ac67888  gcc/fortran/trans-const.h
! 3abb972991494b8a8822ad96886fe26f  gcc/fortran/trans-decl.cc
! e743965d1d422a9979e8ab116e6e5219  gcc/fortran/trans-expr.cc
! dd21e7dc7b5bf0fb841f9cdaab6cbdeb  gcc/fortran/trans-intrinsic.cc
  8a57cfea30bf3f2ccc14a884e7b0d1da  gcc/fortran/trans-io.cc
  06841cda6c842aae9f09268cec2b1f95  gcc/fortran/trans-openmp.cc
  ee35535420c8c9e229f87598de1bf5eb  gcc/fortran/trans-stmt.cc
*************** fe144e1c2a0da30ffc9946e5adab7e6f  gcc/fu
*** 6361,6367 ****
  f2774a60d96892a29e473edce69ca505  gcc/function.cc
  797473d7b92327caaa0bc2b71c14bc0d  gcc/function.h
  96e0cc03035051e1904d130ab24fdfb4  gcc/fwprop.cc
! d705e3338b1c8fc644a83604dd1d0211  gcc/gcc-ar.cc
  03bc1e813e5f46e9869b22d270bd598b  gcc/gcc-attribute-urlifier.cc
  cf42732e466f9de3f3ceb991f007fdf3  gcc/gcc-diagnostic-spec.cc
  b5d3e8bbbb8eaf9e3afad2074381d9b6  gcc/gcc-diagnostic-spec.h
--- 6365,6371 ----
  f2774a60d96892a29e473edce69ca505  gcc/function.cc
  797473d7b92327caaa0bc2b71c14bc0d  gcc/function.h
  96e0cc03035051e1904d130ab24fdfb4  gcc/fwprop.cc
! 32954fca43f23e905ac77e9879653355  gcc/gcc-ar.cc
  03bc1e813e5f46e9869b22d270bd598b  gcc/gcc-attribute-urlifier.cc
  cf42732e466f9de3f3ceb991f007fdf3  gcc/gcc-diagnostic-spec.cc
  b5d3e8bbbb8eaf9e3afad2074381d9b6  gcc/gcc-diagnostic-spec.h
*************** e4981e3b10513f53ed20b58620dfc56f  gcc/gc
*** 6373,6386 ****
  2e5199869e1ce8b2630e4784fbc6e5e6  gcc/gcc-urlifier.cc
  3ba51d67080efcd8791ea2eaf4103d72  gcc/gcc-urlifier.def
  9110b89a48e29f0f75e8c76eca85c6e2  gcc/gcc-urlifier.h
! e4f547de1e5874261fe1cd65ba0af5ce  gcc/gcc.cc
  09d73a192ef597ac58c7300df5ae4eb3  gcc/gcc.h
  1edfbdaab776ee29780fe98d767e67ed  gcc/gcov-counter.def
  5254cb252da1522a0364a1ef41fa47b1  gcc/gcov-dump.cc
  b3c028c9d05ffaa2d3d12afa3b3d6061  gcc/gcov-io.cc
  15293b4de55e6ae02fef2f87d2745ed3  gcc/gcov-io.h
  59c446908bdce0e047d42a7886f3904a  gcc/gcov-tool.cc
! 950dd1ac303deb2d20f37e8e71240870  gcc/gcov.cc
  a03969607849dc4defdd19f2bd8f098b  gcc/gcse-common.cc
  277a0876871bec996d99dc4d7e020460  gcc/gcse-common.h
  a6262b86b3027259364f310d5668e6a3  gcc/gcse.cc
--- 6377,6390 ----
  2e5199869e1ce8b2630e4784fbc6e5e6  gcc/gcc-urlifier.cc
  3ba51d67080efcd8791ea2eaf4103d72  gcc/gcc-urlifier.def
  9110b89a48e29f0f75e8c76eca85c6e2  gcc/gcc-urlifier.h
! 89284c12110936b2425545088b2684dd  gcc/gcc.cc
  09d73a192ef597ac58c7300df5ae4eb3  gcc/gcc.h
  1edfbdaab776ee29780fe98d767e67ed  gcc/gcov-counter.def
  5254cb252da1522a0364a1ef41fa47b1  gcc/gcov-dump.cc
  b3c028c9d05ffaa2d3d12afa3b3d6061  gcc/gcov-io.cc
  15293b4de55e6ae02fef2f87d2745ed3  gcc/gcov-io.h
  59c446908bdce0e047d42a7886f3904a  gcc/gcov-tool.cc
! 0f7759f10a61cc578edbf9c1fa9cec15  gcc/gcov.cc
  a03969607849dc4defdd19f2bd8f098b  gcc/gcse-common.cc
  277a0876871bec996d99dc4d7e020460  gcc/gcse-common.h
  a6262b86b3027259364f310d5668e6a3  gcc/gcse.cc
*************** e6281ed3f4adb00e0c2e8f582901500e  gcc/ge
*** 6408,6416 ****
  fb2d66e9d3218c23bfc681858eeb96d7  gcc/genflags.cc
  3dd21b6d301f9ab68a9ffcf2c9aaa9a7  gcc/gengenrtl.cc
  de4a5ffc62d7e4741e33ab2ab501e601  gcc/gengtype-lex.l
! 1d06864fbc5d95b028b1b0bd910dc266  gcc/gengtype-parse.cc
! 7abed9b2766514c95cdfdb5f95584138  gcc/gengtype-state.cc
! 5dcb84f47353d03891373394fd1d8ecf  gcc/gengtype.cc
  337148b052ea38466fcac0655bce7ffa  gcc/gengtype.h
  7e9bc10948cd198b2cefa5f28d9dc7a9  gcc/genhooks.cc
  9590a53201abdb9f72cef6d94a05db8e  gcc/genmatch.cc
--- 6412,6420 ----
  fb2d66e9d3218c23bfc681858eeb96d7  gcc/genflags.cc
  3dd21b6d301f9ab68a9ffcf2c9aaa9a7  gcc/gengenrtl.cc
  de4a5ffc62d7e4741e33ab2ab501e601  gcc/gengtype-lex.l
! c739e2bedd7d49bc7a7c4ae61fe92df6  gcc/gengtype-parse.cc
! 85a239708d2de94a4c3f6227811ce6b3  gcc/gengtype-state.cc
! 13834fadd1e66741d9f4cfa8ec740173  gcc/gengtype.cc
  337148b052ea38466fcac0655bce7ffa  gcc/gengtype.h
  7e9bc10948cd198b2cefa5f28d9dc7a9  gcc/genhooks.cc
  9590a53201abdb9f72cef6d94a05db8e  gcc/genmatch.cc
*************** e4047cfabe80236af3ae74f11e2d60c6  gcc/ge
*** 6419,6425 ****
  f12cb23213547a0e97f979845e36473a  gcc/genmodes.cc
  1017a97e7d44748a0ead3f1fdf92d676  gcc/genmultilib
  e0e7e5a247e6e2df33948f498b83390f  gcc/genopinit.cc
! 166448b1236d8d99a72cad8ebda6412f  gcc/genoutput.cc
  db35b39aef87d882541f7f9672bfb034  gcc/genpeep.cc
  5302e340f0da37321cf3308d93375099  gcc/genpreds.cc
  089452660c052d5b4b4aaf5e4651335a  gcc/genrecog.cc
--- 6423,6429 ----
  f12cb23213547a0e97f979845e36473a  gcc/genmodes.cc
  1017a97e7d44748a0ead3f1fdf92d676  gcc/genmultilib
  e0e7e5a247e6e2df33948f498b83390f  gcc/genopinit.cc
! 4cfac6c868731075442235977814cbba  gcc/genoutput.cc
  db35b39aef87d882541f7f9672bfb034  gcc/genpeep.cc
  5302e340f0da37321cf3308d93375099  gcc/genpreds.cc
  089452660c052d5b4b4aaf5e4651335a  gcc/genrecog.cc
*************** fe10064deae59dc88000ee5c36a3e689  gcc/ge
*** 6430,6436 ****
  d064c39832a93757f2aaaf28c0f3a34b  gcc/ggc-common.cc
  23e457f7a654cda444388a223e46a148  gcc/ggc-internal.h
  fdac1fc999e94311e86377934b7524b3  gcc/ggc-none.cc
! ea57fe6ee2a1e1ab80f8760a8189190f  gcc/ggc-page.cc
  3926d902b4a543d3419ee67b34f21bc5  gcc/ggc-tests.cc
  af4a387aec960d3e8380f41c5d139097  gcc/ggc.h
  225bd195e5c278c21dbae19043529ac5  gcc/gimple-array-bounds.cc
--- 6434,6440 ----
  d064c39832a93757f2aaaf28c0f3a34b  gcc/ggc-common.cc
  23e457f7a654cda444388a223e46a148  gcc/ggc-internal.h
  fdac1fc999e94311e86377934b7524b3  gcc/ggc-none.cc
! 23b5bd56200b80366927e7b2faf6b7f1  gcc/ggc-page.cc
  3926d902b4a543d3419ee67b34f21bc5  gcc/ggc-tests.cc
  af4a387aec960d3e8380f41c5d139097  gcc/ggc.h
  225bd195e5c278c21dbae19043529ac5  gcc/gimple-array-bounds.cc
*************** af4a387aec960d3e8380f41c5d139097  gcc/gg
*** 6438,6444 ****
  17b0847ee6f3c161fae2a55c78f982ed  gcc/gimple-builder.cc
  e8ef831ecab58724c781ef6c239eb959  gcc/gimple-builder.h
  c786a045909d4b0717a3d5687e24dc62  gcc/gimple-crc-optimization.cc
! f444e5a2c655aa37338677354749ad83  gcc/gimple-expr.cc
  61721564f913cdbebe438f7c378b316e  gcc/gimple-expr.h
  525585d55ec6ef3e4e4ea4e70a30cbd7  gcc/gimple-fold.cc
  d4285bef3fb661843b5d37c21e759c95  gcc/gimple-fold.h
--- 6442,6448 ----
  17b0847ee6f3c161fae2a55c78f982ed  gcc/gimple-builder.cc
  e8ef831ecab58724c781ef6c239eb959  gcc/gimple-builder.h
  c786a045909d4b0717a3d5687e24dc62  gcc/gimple-crc-optimization.cc
! e33888307c479ce11d601ebd8fc8f0af  gcc/gimple-expr.cc
  61721564f913cdbebe438f7c378b316e  gcc/gimple-expr.h
  525585d55ec6ef3e4e4ea4e70a30cbd7  gcc/gimple-fold.cc
  d4285bef3fb661843b5d37c21e759c95  gcc/gimple-fold.h
*************** f1824ea9d0d35fb768daabd8649d44b3  gcc/gi
*** 6454,6460 ****
  b829ca99c85ee53d8741a9e6bd0842cc  gcc/gimple-loop-versioning.cc
  3c3cd33fb8d571f0cf6646b95fd1a87d  gcc/gimple-low.cc
  a6a5de8424eee65e836bba5b21f32a6b  gcc/gimple-low.h
! 66429f6a61ccc2eac30fedfe56dd8919  gcc/gimple-lower-bitint.cc
  0ad30ecd31f0473de43171e203bbed3e  gcc/gimple-lower-bitint.h
  e34c444c462ee07d9e772cc076c6ad83  gcc/gimple-match-exports.cc
  95ab37dd8c1b67f025a463e428c5f21b  gcc/gimple-match-head.cc
--- 6458,6464 ----
  b829ca99c85ee53d8741a9e6bd0842cc  gcc/gimple-loop-versioning.cc
  3c3cd33fb8d571f0cf6646b95fd1a87d  gcc/gimple-low.cc
  a6a5de8424eee65e836bba5b21f32a6b  gcc/gimple-low.h
! 5d26ea438a8470b868bcee7d650f0429  gcc/gimple-lower-bitint.cc
  0ad30ecd31f0473de43171e203bbed3e  gcc/gimple-lower-bitint.h
  e34c444c462ee07d9e772cc076c6ad83  gcc/gimple-match-exports.cc
  95ab37dd8c1b67f025a463e428c5f21b  gcc/gimple-match-head.cc
*************** c84294b3bbebf60858449ae953fae160  gcc/gi
*** 6474,6480 ****
  3f397ecbcf642d6d782fe5e774680054  gcc/gimple-range-gori.h
  871f906e172004d8ff9ab02c90b303c7  gcc/gimple-range-infer.cc
  7b22b6e89d46ee067b182629fcb97a4d  gcc/gimple-range-infer.h
! d537dec8f1813a7f771ac10d751a2cae  gcc/gimple-range-op.cc
  2b35447fc9805b1aa9b1c06450e44a9e  gcc/gimple-range-op.h
  ef9ab4f8d42dd43ff48744090edb54b3  gcc/gimple-range-path.cc
  fd93abee2584b401c93735ddd00e75d1  gcc/gimple-range-path.h
--- 6478,6484 ----
  3f397ecbcf642d6d782fe5e774680054  gcc/gimple-range-gori.h
  871f906e172004d8ff9ab02c90b303c7  gcc/gimple-range-infer.cc
  7b22b6e89d46ee067b182629fcb97a4d  gcc/gimple-range-infer.h
! 7a817f9363ddd6ca4c1690866d425d29  gcc/gimple-range-op.cc
  2b35447fc9805b1aa9b1c06450e44a9e  gcc/gimple-range-op.h
  ef9ab4f8d42dd43ff48744090edb54b3  gcc/gimple-range-path.cc
  fd93abee2584b401c93735ddd00e75d1  gcc/gimple-range-path.h
*************** fd706cd70d2b5c6a514eef109a117112  gcc/gi
*** 6509,6515 ****
  e35a6083f100e687d2e1c31c46aabecd  gcc/gimple-warn-recursion.cc
  4a43f38776337834415600ed88fb9563  gcc/gimple.cc
  208b5a93bd83c9b24330756189d7f056  gcc/gimple.def
! 621f348fd2b3400c467aeaadd07bea7f  gcc/gimple.h
  46bdb18976fdb25accadbfdc07f14a8e  gcc/gimplify-me.cc
  cc5b43d0554c69571cd007e727fbb7d1  gcc/gimplify-me.h
  fbfc4731707cf088946dcdee1db11fc3  gcc/gimplify.cc
--- 6513,6519 ----
  e35a6083f100e687d2e1c31c46aabecd  gcc/gimple-warn-recursion.cc
  4a43f38776337834415600ed88fb9563  gcc/gimple.cc
  208b5a93bd83c9b24330756189d7f056  gcc/gimple.def
! 72589cf8cf38daf58173bae09359bc01  gcc/gimple.h
  46bdb18976fdb25accadbfdc07f14a8e  gcc/gimplify-me.cc
  cc5b43d0554c69571cd007e727fbb7d1  gcc/gimplify-me.h
  fbfc4731707cf088946dcdee1db11fc3  gcc/gimplify.cc
*************** b4fcb26168619862a6f0f95ba175db11  gcc/go
*** 6597,6603 ****
  efc5cf70705a6c22ffe047d96998ee71  gcc/go/lang-specs.h
  6e0652bd7ccdcdb78d376a8205fd39ae  gcc/go/lang.opt
  a34735cec9db2102b6780074cdec10ca  gcc/go/lang.opt.urls
! 81b0c4ee09d9ca5423d724c04c1eae16  gcc/godump.cc
  773d89dbe837c253425c410f32a7ed8d  gcc/graph.cc
  7b97e2f3559cf679fc02c1d088bd405a  gcc/graph.h
  e611633fdebb1228a285c56e1c6d95df  gcc/graphds.cc
--- 6601,6607 ----
  efc5cf70705a6c22ffe047d96998ee71  gcc/go/lang-specs.h
  6e0652bd7ccdcdb78d376a8205fd39ae  gcc/go/lang.opt
  a34735cec9db2102b6780074cdec10ca  gcc/go/lang.opt.urls
! 51fc7243b0eaffea3c48f24b9255c233  gcc/godump.cc
  773d89dbe837c253425c410f32a7ed8d  gcc/graph.cc
  7b97e2f3559cf679fc02c1d088bd405a  gcc/graph.h
  e611633fdebb1228a285c56e1c6d95df  gcc/graphds.cc
*************** f5de8589d497c4d607cadff1ce88dd5c  gcc/hw
*** 6638,6644 ****
  665c1d736f4909ccb17f662f7f060fd7  gcc/hw-doloop.h
  e5e51e93d7d72e1822440531e4d79d1d  gcc/hwint.cc
  b6b1b7e364f00e9287ee1f56254b9be1  gcc/hwint.h
! 20df01b09e24ecfeb31ae96ff000bd02  gcc/ifcvt.cc
  e2229f9ecac43014084b083ddf2d4637  gcc/ifcvt.h
  370b4a8b9decbb822392c32f5fb92a72  gcc/inchash.cc
  bad6404ce4e7f42ff46ce6ae70c77e99  gcc/inchash.h
--- 6642,6648 ----
  665c1d736f4909ccb17f662f7f060fd7  gcc/hw-doloop.h
  e5e51e93d7d72e1822440531e4d79d1d  gcc/hwint.cc
  b6b1b7e364f00e9287ee1f56254b9be1  gcc/hwint.h
! 3aad9c16ebf9c91f521c99262bb1e385  gcc/ifcvt.cc
  e2229f9ecac43014084b083ddf2d4637  gcc/ifcvt.h
  370b4a8b9decbb822392c32f5fb92a72  gcc/inchash.cc
  bad6404ce4e7f42ff46ce6ae70c77e99  gcc/inchash.h
*************** c7c9628cd16fe3e0263939ceb0a865fa  gcc/in
*** 6656,6662 ****
  8a34b6abb2591b8c30c7fb4187261ee3  gcc/intl.cc
  22c5866f6858fea288e5e2f1adc96e40  gcc/intl.h
  920db3effdd509146b3f00be906c0885  gcc/ipa-comdats.cc
! bc26d1c89032a321ada5015cbec7103b  gcc/ipa-cp.cc
  0f1e7b6760c2459ae3d8d6b55d4020cc  gcc/ipa-cp.h
  2db0720673179e23a6e269afc34e1abd  gcc/ipa-devirt.cc
  ae1e2041798741a74dbd720bfa8af4c5  gcc/ipa-fnsummary.cc
--- 6660,6666 ----
  8a34b6abb2591b8c30c7fb4187261ee3  gcc/intl.cc
  22c5866f6858fea288e5e2f1adc96e40  gcc/intl.h
  920db3effdd509146b3f00be906c0885  gcc/ipa-comdats.cc
! 0a29af3edd9aa237ec662481a180014e  gcc/ipa-cp.cc
  0f1e7b6760c2459ae3d8d6b55d4020cc  gcc/ipa-cp.h
  2db0720673179e23a6e269afc34e1abd  gcc/ipa-devirt.cc
  ae1e2041798741a74dbd720bfa8af4c5  gcc/ipa-fnsummary.cc
*************** ba9e8a0870296fd0192e3595d9f582ef  gcc/ip
*** 6674,6680 ****
  e1e331896b86db8a2281657bbb21ac72  gcc/ipa-locality-cloning.h
  4d6a8cf9b93ae2035da4279c028c0746  gcc/ipa-modref-tree.cc
  c546dc75ec27388fb7fe834c0aabd230  gcc/ipa-modref-tree.h
! 3dd311025cec1b6d42c0f11205077ce9  gcc/ipa-modref.cc
  323eab7a20907e08e7d9ca8e513c2259  gcc/ipa-modref.h
  5de2d46c22758bff85e4365ba687f510  gcc/ipa-param-manipulation.cc
  dba11f7340415ca54713db0009a33093  gcc/ipa-param-manipulation.h
--- 6678,6684 ----
  e1e331896b86db8a2281657bbb21ac72  gcc/ipa-locality-cloning.h
  4d6a8cf9b93ae2035da4279c028c0746  gcc/ipa-modref-tree.cc
  c546dc75ec27388fb7fe834c0aabd230  gcc/ipa-modref-tree.h
! 4c1a826bc8d0999042788089027518c3  gcc/ipa-modref.cc
  323eab7a20907e08e7d9ca8e513c2259  gcc/ipa-modref.h
  5de2d46c22758bff85e4365ba687f510  gcc/ipa-param-manipulation.cc
  dba11f7340415ca54713db0009a33093  gcc/ipa-param-manipulation.h
*************** a683bef6f6721b574c76acc1efb5050c  gcc/ji
*** 6805,6813 ****
  cb2c142683e6c45261fcadd4c5e97bdc  gcc/json.cc
  e101169692be7b0591cafd905c476447  gcc/json.h
  598bd9cf01e2b97715ef52af5b0f2241  gcc/jump.cc
! f8d200db506e7264760dc29b26e593b0  gcc/langhooks-def.h
! 6aae55223100f16ce5b96a5ed327d238  gcc/langhooks.cc
! a10771b08830bd53d983947d7831ffad  gcc/langhooks.h
  e5aaf0926ffa1d66709fdc320212070a  gcc/late-combine.cc
  4d0b64200ad1d5cc3dd88026fa268820  gcc/lazily-created.h
  e8cbb0a4e8793ea30337c86b60f8f64a  gcc/lcm.cc
--- 6809,6817 ----
  cb2c142683e6c45261fcadd4c5e97bdc  gcc/json.cc
  e101169692be7b0591cafd905c476447  gcc/json.h
  598bd9cf01e2b97715ef52af5b0f2241  gcc/jump.cc
! db38a11d4dce106f820651752f564683  gcc/langhooks-def.h
! bd54dcceceea2f4e69957be1075e54e8  gcc/langhooks.cc
! 1ad1f65d939a28daa29eab5ed8f2a2d2  gcc/langhooks.h
  e5aaf0926ffa1d66709fdc320212070a  gcc/late-combine.cc
  4d0b64200ad1d5cc3dd88026fa268820  gcc/lazily-created.h
  e8cbb0a4e8793ea30337c86b60f8f64a  gcc/lcm.cc
*************** f706fe94b3a789d30e0800c32f27c242  gcc/lo
*** 6834,6840 ****
  7812914e23c56c8dc2696a2147331691  gcc/loop-unroll.h
  c6ab645f373e1d6e9ddd212bfc3a95ba  gcc/lower-subreg.cc
  d49cf408f9415ef037523414c6e80764  gcc/lower-subreg.h
! 1bd7d17fdacf9c764629a3def0c81b48  gcc/lra-assigns.cc
  5d1aa184ea3e3c5990e02acbdc762f00  gcc/lra-coalesce.cc
  92293dff0fbd1caeedb55625725d74ff  gcc/lra-constraints.cc
  2f34a2e53204408e2578f69fb831b0ac  gcc/lra-eliminations.cc
--- 6838,6844 ----
  7812914e23c56c8dc2696a2147331691  gcc/loop-unroll.h
  c6ab645f373e1d6e9ddd212bfc3a95ba  gcc/lower-subreg.cc
  d49cf408f9415ef037523414c6e80764  gcc/lower-subreg.h
! 841cfef931adce1d98b9755eb3231569  gcc/lra-assigns.cc
  5d1aa184ea3e3c5990e02acbdc762f00  gcc/lra-coalesce.cc
  92293dff0fbd1caeedb55625725d74ff  gcc/lra-constraints.cc
  2f34a2e53204408e2578f69fb831b0ac  gcc/lra-eliminations.cc
*************** c659fc218c745eb22044da66f2424ede  gcc/lt
*** 6850,6864 ****
  a2303b56e4dc322d914b1efe0617e2ba  gcc/lto-ltrans-cache.cc
  3f25ddb84fb557751613b1d2f7123cc8  gcc/lto-ltrans-cache.h
  442399eb6d061d0396c090387026857d  gcc/lto-opts.cc
! a0d040129bec89f4e8e922efb81a3945  gcc/lto-section-in.cc
  194f259575b70213773e1c8c0f8fcb5b  gcc/lto-section-names.h
  fa334f7be97c3e817d1992afa3d08ab9  gcc/lto-section-out.cc
  a7e9e00378501c6078d977c5ea3fabb3  gcc/lto-streamer-in.cc
  09f467bb290592d8fe5a6fb2f07d7ca4  gcc/lto-streamer-out.cc
  6c99c98c397a53a6a56da792d20092b0  gcc/lto-streamer.cc
  2d378e58ffe32f0e50ca9de25f61ef5f  gcc/lto-streamer.h
! 94324166b434227347ae7dfce80321ab  gcc/lto-wrapper.cc
! 306a1f468a1869d6f169dca6b2c1f454  gcc/lto/ChangeLog
  df1dcca39d7c8f8db6cbab8fef4394e3  gcc/lto/Make-lang.in
  107bbf87618e39ff03662c0cd52a3f35  gcc/lto/common.cc
  eb5f3398fbf5d50b50c315e2d5891e25  gcc/lto/common.h
--- 6854,6868 ----
  a2303b56e4dc322d914b1efe0617e2ba  gcc/lto-ltrans-cache.cc
  3f25ddb84fb557751613b1d2f7123cc8  gcc/lto-ltrans-cache.h
  442399eb6d061d0396c090387026857d  gcc/lto-opts.cc
! 83a38b1ef3670762d9336c0229c75127  gcc/lto-section-in.cc
  194f259575b70213773e1c8c0f8fcb5b  gcc/lto-section-names.h
  fa334f7be97c3e817d1992afa3d08ab9  gcc/lto-section-out.cc
  a7e9e00378501c6078d977c5ea3fabb3  gcc/lto-streamer-in.cc
  09f467bb290592d8fe5a6fb2f07d7ca4  gcc/lto-streamer-out.cc
  6c99c98c397a53a6a56da792d20092b0  gcc/lto-streamer.cc
  2d378e58ffe32f0e50ca9de25f61ef5f  gcc/lto-streamer.h
! edfadb86beca8d7718985357731a9913  gcc/lto-wrapper.cc
! 84cf8d9ce7b24fb06e3d611c51596636  gcc/lto/ChangeLog
  df1dcca39d7c8f8db6cbab8fef4394e3  gcc/lto/Make-lang.in
  107bbf87618e39ff03662c0cd52a3f35  gcc/lto/common.cc
  eb5f3398fbf5d50b50c315e2d5891e25  gcc/lto/common.h
*************** eb5f3398fbf5d50b50c315e2d5891e25  gcc/lt
*** 6866,6872 ****
  cf03da3419b3411b1f34eec4bedd9929  gcc/lto/lang-specs.h
  607e203bd47f1482dabbb19305db2bbd  gcc/lto/lang.opt
  e09c982f34fcc53d88fb9b974a77d569  gcc/lto/lang.opt.urls
! 9d299fdc83f32a383fe6f31266101260  gcc/lto/lto-common.cc
  bd162a24ac9bded9022e1bd104c1c013  gcc/lto/lto-common.h
  29453d6e3c86dfa353e934a16aa96ce5  gcc/lto/lto-dump.cc
  a2c3d2b4ff2f28dc5c23ba7c85d4b17d  gcc/lto/lto-lang.cc
--- 6870,6876 ----
  cf03da3419b3411b1f34eec4bedd9929  gcc/lto/lang-specs.h
  607e203bd47f1482dabbb19305db2bbd  gcc/lto/lang.opt
  e09c982f34fcc53d88fb9b974a77d569  gcc/lto/lang.opt.urls
! fd64987e12215fb3f9f156e8e1c06e1f  gcc/lto/lto-common.cc
  bd162a24ac9bded9022e1bd104c1c013  gcc/lto/lto-common.h
  29453d6e3c86dfa353e934a16aa96ce5  gcc/lto/lto-dump.cc
  a2c3d2b4ff2f28dc5c23ba7c85d4b17d  gcc/lto/lto-lang.cc
*************** db1f7cd6893b7714ee173cce1367581b  gcc/lt
*** 6876,6882 ****
  75d42e9af6f85a1550a2f5a279bf3c69  gcc/lto/lto-symtab.cc
  a7092ba7593f4c0f94ce57ebba32641e  gcc/lto/lto-symtab.h
  5d650e8bc18da5b7150e7080f68c9b91  gcc/lto/lto-tree.h
! 76e49537d38bf6051ed9bf6633d2296e  gcc/lto/lto.cc
  e0d99466f393722c3e10caf535614ff7  gcc/lto/lto.h
  41f943bdc734bffe0c6faf690dd66924  gcc/m2/COPYING.FDL
  351e06833ea0ad58238533d76ea0c2cf  gcc/m2/COPYING.RUNTIME
--- 6880,6886 ----
  75d42e9af6f85a1550a2f5a279bf3c69  gcc/lto/lto-symtab.cc
  a7092ba7593f4c0f94ce57ebba32641e  gcc/lto/lto-symtab.h
  5d650e8bc18da5b7150e7080f68c9b91  gcc/lto/lto-tree.h
! f10e2305ef401f9fe9c5cd471948afea  gcc/lto/lto.cc
  e0d99466f393722c3e10caf535614ff7  gcc/lto/lto.h
  41f943bdc734bffe0c6faf690dd66924  gcc/m2/COPYING.FDL
  351e06833ea0ad58238533d76ea0c2cf  gcc/m2/COPYING.RUNTIME
*************** f9608e9005487c369e6c38949ab36fa1  gcc/m2
*** 7857,7863 ****
  2a18164ee5f162ac117e6fedb58158a2  gcc/machmode.def
  0c9209452a934f189aa0860038b3a65c  gcc/machmode.h
  197298337dae14fdd7ab928a1f03bec6  gcc/main.cc
! 3fb491b7bf5537ffe4b377384a94bb2a  gcc/match.pd
  b106a08a1793a5495dd87c412456484b  gcc/mcf.cc
  897c541ca992e145ad451c98941c7647  gcc/mem-stats-traits.h
  4f86eeea7af520ce0b773c1f2e34b5b4  gcc/mem-stats.h
--- 7861,7867 ----
  2a18164ee5f162ac117e6fedb58158a2  gcc/machmode.def
  0c9209452a934f189aa0860038b3a65c  gcc/machmode.h
  197298337dae14fdd7ab928a1f03bec6  gcc/main.cc
! 47470d61d09581dbb6e04498801d9f55  gcc/match.pd
  b106a08a1793a5495dd87c412456484b  gcc/mcf.cc
  897c541ca992e145ad451c98941c7647  gcc/mem-stats-traits.h
  4f86eeea7af520ce0b773c1f2e34b5b4  gcc/mem-stats.h
*************** feefdabfae453daa31c3ebf314bfb55e  gcc/om
*** 7907,7913 ****
  1c84cef0613c186032b0fc0682b72ab8  gcc/omp-low.h
  e15278003e18a529caf759e00fbb8140  gcc/omp-oacc-kernels-decompose.cc
  e46559b06f0c63bac8a2626dcddfb876  gcc/omp-oacc-neuter-broadcast.cc
! 8efefaa305aa41433df23b9b64964ea0  gcc/omp-offload.cc
  138089e40ad5a17f7c22aaf5abfe9743  gcc/omp-offload.h
  8702574bc611ec74396ee89f3a23626b  gcc/omp-selectors.h
  d405908d1384f370ce94c5a2ee472cef  gcc/omp-simd-clone.cc
--- 7911,7917 ----
  1c84cef0613c186032b0fc0682b72ab8  gcc/omp-low.h
  e15278003e18a529caf759e00fbb8140  gcc/omp-oacc-kernels-decompose.cc
  e46559b06f0c63bac8a2626dcddfb876  gcc/omp-oacc-neuter-broadcast.cc
! ee9366bb8cc47c2c1d0afc0557831e4c  gcc/omp-offload.cc
  138089e40ad5a17f7c22aaf5abfe9743  gcc/omp-offload.h
  8702574bc611ec74396ee89f3a23626b  gcc/omp-selectors.h
  d405908d1384f370ce94c5a2ee472cef  gcc/omp-simd-clone.cc
*************** df4d718a9c9934a10272384f58351e0f  gcc/op
*** 7926,7932 ****
  e45c50053d2064312ea73720cdb8e5d9  gcc/optabs-query.h
  0135b6d221cd61d59fecebf7206e304e  gcc/optabs-tree.cc
  201b2569727bf062f908121f208a860f  gcc/optabs-tree.h
! 504fbae79c3570ba260ea6bddbd86041  gcc/optabs.cc
  c5f46ef2e21b33c46222e08c7533480c  gcc/optabs.def
  81371a1b977075ff9a2b9637ac88cfa3  gcc/optabs.h
  10284dae2b1b50618cee778ef473c34c  gcc/optc-gen.awk
--- 7930,7936 ----
  e45c50053d2064312ea73720cdb8e5d9  gcc/optabs-query.h
  0135b6d221cd61d59fecebf7206e304e  gcc/optabs-tree.cc
  201b2569727bf062f908121f208a860f  gcc/optabs-tree.h
! 5d28285bf9e6b64da90f1de2d1d37f29  gcc/optabs.cc
  c5f46ef2e21b33c46222e08c7533480c  gcc/optabs.def
  81371a1b977075ff9a2b9637ac88cfa3  gcc/optabs.h
  10284dae2b1b50618cee778ef473c34c  gcc/optc-gen.awk
*************** a5efbd4e14a4756cdc7ef8e2022b96b6  gcc/op
*** 7938,7972 ****
  7ec7e028f1593086047c8dfc9221321e  gcc/optinfo.h
  1f257e67c4c2e5601e53988fa5cb42d8  gcc/options-urls-cc-gen.awk
  cdbb58e9722acd3ea6e5f46b3fdab810  gcc/opts-common.cc
! ed0b755aea21ac9fcf8c9fdd2988fea0  gcc/opts-diagnostic.cc
! 1ff3e8d6ecd23d2378d1eb4775fa4c48  gcc/opts-diagnostic.h
  2fc49f6281f39f394f1d5c0f4feb929b  gcc/opts-global.cc
  f55f0f0a86a11d13824924aac8c98a68  gcc/opts-jobserver.h
! 9f5b7fb37fa004c20253c9bbb225654c  gcc/opts.cc
! 58f6a6805bc6f13be852596a9aaa2ee0  gcc/opts.h
  413859dddc66f1f7d8ea8078e096c288  gcc/ordered-hash-map-tests.cc
  fef443de1557117f8c2847206a2ea8f5  gcc/ordered-hash-map.h
  7c8d7dc194f39f5b8c69d7f0d05bc335  gcc/output.h
  5f96d548f10507478f5096f298505278  gcc/pair-fusion.cc
  69198894caa672a2294267474e494d8b  gcc/pair-fusion.h
! 948f4850f7e40c5186cdf501b8504bda  gcc/params.opt
  2cc794e23d80a8c9f057a7e402c65fb8  gcc/params.opt.urls
  ce920ed7f2cc74b4a9bc390c39f4cbee  gcc/pass_manager.h
! 1780eb05a432e44c4898abd2e995a024  gcc/passes.cc
  d77f8f9495142a091f02e74420a91a51  gcc/passes.def
  51273d95ed168859744a17468a7b3bda  gcc/path-coverage.cc
  a804a634cdc9dbcb92434c9e03799a1e  gcc/pex.cc
  b2f9b18f946c2e60e4f6cba0ab2df54e  gcc/pex.h
! 5d25ac31d9e5d9515931b16e9f7339f7  gcc/plugin.cc
  af6268dd53154434eb4c4d1c299e0ee2  gcc/plugin.def
  5678cfbc9cf98f9e69bee1118c787a42  gcc/plugin.h
! 57abb1c74788c97687bd92e9ccc2b7af  gcc/po/ChangeLog
  2c2fbc71d2acc1ddfb9fb9501458921b  gcc/po/EXCLUDES
  276b0e994306e3cdb1f62b8de38fa0e9  gcc/po/be.po
  4ce8480a8ed1c6ea96dcee25f16b5030  gcc/po/da.po
  537e98eeb67896ac57d739aeffc9d95c  gcc/po/de.po
  fb211887132af72dd424dd2b31d66047  gcc/po/el.po
! 9b7ec42387221cb5eb618030df69c379  gcc/po/es.po
  7a6d51f7527e21e20156259c98cac705  gcc/po/exgettext
  6bc994ac2cef495e886c17a200067ac8  gcc/po/fi.po
  31fd60289038e7a7968d397f5a4d299f  gcc/po/fr.po
--- 7942,7976 ----
  7ec7e028f1593086047c8dfc9221321e  gcc/optinfo.h
  1f257e67c4c2e5601e53988fa5cb42d8  gcc/options-urls-cc-gen.awk
  cdbb58e9722acd3ea6e5f46b3fdab810  gcc/opts-common.cc
! c9b2e818258f43e0a779e4c3caa8801d  gcc/opts-diagnostic.cc
! 82ce7a42b8d73fdf6acbe463159e9576  gcc/opts-diagnostic.h
  2fc49f6281f39f394f1d5c0f4feb929b  gcc/opts-global.cc
  f55f0f0a86a11d13824924aac8c98a68  gcc/opts-jobserver.h
! 8a62bfda50309410953bc2557a6b995c  gcc/opts.cc
! 616f2783bfb18bfb6cbb11881fb0aeaf  gcc/opts.h
  413859dddc66f1f7d8ea8078e096c288  gcc/ordered-hash-map-tests.cc
  fef443de1557117f8c2847206a2ea8f5  gcc/ordered-hash-map.h
  7c8d7dc194f39f5b8c69d7f0d05bc335  gcc/output.h
  5f96d548f10507478f5096f298505278  gcc/pair-fusion.cc
  69198894caa672a2294267474e494d8b  gcc/pair-fusion.h
! a21dbdbf6fd19c96527af54d3d910ee1  gcc/params.opt
  2cc794e23d80a8c9f057a7e402c65fb8  gcc/params.opt.urls
  ce920ed7f2cc74b4a9bc390c39f4cbee  gcc/pass_manager.h
! 23b3f227e4a3edb6df0c76124df99274  gcc/passes.cc
  d77f8f9495142a091f02e74420a91a51  gcc/passes.def
  51273d95ed168859744a17468a7b3bda  gcc/path-coverage.cc
  a804a634cdc9dbcb92434c9e03799a1e  gcc/pex.cc
  b2f9b18f946c2e60e4f6cba0ab2df54e  gcc/pex.h
! 51380e9db88b682bc96a35cc4bce56a5  gcc/plugin.cc
  af6268dd53154434eb4c4d1c299e0ee2  gcc/plugin.def
  5678cfbc9cf98f9e69bee1118c787a42  gcc/plugin.h
! cd4012e6ac179b8edc352035814dec38  gcc/po/ChangeLog
  2c2fbc71d2acc1ddfb9fb9501458921b  gcc/po/EXCLUDES
  276b0e994306e3cdb1f62b8de38fa0e9  gcc/po/be.po
  4ce8480a8ed1c6ea96dcee25f16b5030  gcc/po/da.po
  537e98eeb67896ac57d739aeffc9d95c  gcc/po/de.po
  fb211887132af72dd424dd2b31d66047  gcc/po/el.po
! 8db2cd09f0527a4cc27a7f190fd26a08  gcc/po/es.po
  7a6d51f7527e21e20156259c98cac705  gcc/po/exgettext
  6bc994ac2cef495e886c17a200067ac8  gcc/po/fi.po
  31fd60289038e7a7968d397f5a4d299f  gcc/po/fr.po
*************** ba4c53fadd2e92e3f30ae3b8a953c340  gcc/po
*** 7993,8008 ****
  bb246998cb5fc94f4652c10de992f722  gcc/predict.cc
  94064e652fd0a138c0dc656a3d96a966  gcc/predict.def
  c6b043ce6b64f82009d2f3763b6360db  gcc/predict.h
! 912fad19a2680ca1455357aeca05abb7  gcc/prefix.cc
  003323b16487203413f2daee66ebd8cf  gcc/prefix.h
  5c43118ee23806d01ac9d248dad17fcb  gcc/pretty-print-format-impl.h
  b1408122718335443829fcfe2d5dbcf3  gcc/pretty-print-markup.h
  598dd697f388001a4fa8f40126a02d7e  gcc/pretty-print-urlifier.h
! 594f9ca88d70a52827e1b254f0735700  gcc/pretty-print.cc
  cfcb5ae7d574d818b280534a26a461bb  gcc/pretty-print.h
  902a3ede86fca66395915f9462f949f2  gcc/prime-paths.cc
  4791763965e448615fab35a2eda1f6bd  gcc/print-rtl-function.cc
! d5f4d51ce4820711109250de99f6a757  gcc/print-rtl.cc
  2cd52b1a67b570ee31c684eb846def0f  gcc/print-rtl.h
  f26f8ff623fefa8bdfe18ead347e914f  gcc/print-tree.cc
  db24d9f938cefb2027e91a5068f5f1d0  gcc/print-tree.h
--- 7997,8012 ----
  bb246998cb5fc94f4652c10de992f722  gcc/predict.cc
  94064e652fd0a138c0dc656a3d96a966  gcc/predict.def
  c6b043ce6b64f82009d2f3763b6360db  gcc/predict.h
! eb92f089fe1cc11940fb41c338d0b6be  gcc/prefix.cc
  003323b16487203413f2daee66ebd8cf  gcc/prefix.h
  5c43118ee23806d01ac9d248dad17fcb  gcc/pretty-print-format-impl.h
  b1408122718335443829fcfe2d5dbcf3  gcc/pretty-print-markup.h
  598dd697f388001a4fa8f40126a02d7e  gcc/pretty-print-urlifier.h
! 413cf96df7e11826c7eccdaa49231cbe  gcc/pretty-print.cc
  cfcb5ae7d574d818b280534a26a461bb  gcc/pretty-print.h
  902a3ede86fca66395915f9462f949f2  gcc/prime-paths.cc
  4791763965e448615fab35a2eda1f6bd  gcc/print-rtl-function.cc
! 740eac6d337d8af112f3f42511132e08  gcc/print-rtl.cc
  2cd52b1a67b570ee31c684eb846def0f  gcc/print-rtl.h
  f26f8ff623fefa8bdfe18ead347e914f  gcc/print-tree.cc
  db24d9f938cefb2027e91a5068f5f1d0  gcc/print-tree.h
*************** cd37b0d675d660c011c9fca8507778b4  gcc/pu
*** 8017,8024 ****
  c31c0520e2804e9ad22ae257d5dd5ea6  gcc/range-op-float.cc
  5b7facbc76df7d457131d6ab875c3b62  gcc/range-op-mixed.h
  f4cba1bfd3b506f536d929e22e20525d  gcc/range-op-ptr.cc
! 13f37ecca76a173e2a5973462be975be  gcc/range-op.cc
! e46c65af9fc4066b204c05a15b0ca903  gcc/range-op.h
  5224210104d440bc7bae81953ca2e7f1  gcc/range.cc
  19ba1dec644467b75ebc4246acf8ff8f  gcc/range.h
  685295910dd30e1779dc47adcdaa7cbb  gcc/read-md.cc
--- 8021,8028 ----
  c31c0520e2804e9ad22ae257d5dd5ea6  gcc/range-op-float.cc
  5b7facbc76df7d457131d6ab875c3b62  gcc/range-op-mixed.h
  f4cba1bfd3b506f536d929e22e20525d  gcc/range-op-ptr.cc
! cf65d64ae38adb74e74e34c58cf68528  gcc/range-op.cc
! 08eea1a2533e737fb45e4cf1818b5d33  gcc/range-op.h
  5224210104d440bc7bae81953ca2e7f1  gcc/range.cc
  19ba1dec644467b75ebc4246acf8ff8f  gcc/range.h
  685295910dd30e1779dc47adcdaa7cbb  gcc/read-md.cc
*************** d1e8f06dfe7f0d64ebabef7c52035296  gcc/re
*** 8030,8036 ****
  45b87c4baefe4e526664defa3b15f968  gcc/real.h
  034d6804511ba5d0c988e1e98ab47d5d  gcc/realmpfr.cc
  5ada18d8279938c02c4d9f3751acf660  gcc/realmpfr.h
! 41943471e7716b2155b13f1b62ba52a3  gcc/recog.cc
  70ff0cfdb2d7d28d6188422d526830c6  gcc/recog.h
  8bff9b4e294312d53b3edc3a5599f0a3  gcc/ree.cc
  cccab40b3ac43a58e799adb120a5dfbf  gcc/reg-notes.def
--- 8034,8040 ----
  45b87c4baefe4e526664defa3b15f968  gcc/real.h
  034d6804511ba5d0c988e1e98ab47d5d  gcc/realmpfr.cc
  5ada18d8279938c02c4d9f3751acf660  gcc/realmpfr.h
! 7fbdfd1ffe1a75841b1fe6694f435364  gcc/recog.cc
  70ff0cfdb2d7d28d6188422d526830c6  gcc/recog.h
  8bff9b4e294312d53b3edc3a5599f0a3  gcc/ree.cc
  cccab40b3ac43a58e799adb120a5dfbf  gcc/reg-notes.def
*************** eab7365dceccf86b8e9a8ccbb365afc3  gcc/rt
*** 8079,8085 ****
  27956813d0124f5b5ec60d5a48840a34  gcc/rtl.cc
  a9ad8cbba3c33e3fbc0b79c6938a0295  gcc/rtl.def
  1ddd2444adb70f3c6e041e2e5bc3bb1c  gcc/rtl.h
! 4f8b2fc85712e3182add8b883b1c77ee  gcc/rtlanal.cc
  57073d447ccb92aa7b0276e4471824df  gcc/rtlanal.h
  9a5e61517f096479200fef046f8b2d35  gcc/rtlhash.cc
  0c917b0591a65e7996befc0d1e294cc3  gcc/rtlhash.h
--- 8083,8089 ----
  27956813d0124f5b5ec60d5a48840a34  gcc/rtl.cc
  a9ad8cbba3c33e3fbc0b79c6938a0295  gcc/rtl.def
  1ddd2444adb70f3c6e041e2e5bc3bb1c  gcc/rtl.h
! 814f2d1848bae3b39272dbd5274755a0  gcc/rtlanal.cc
  57073d447ccb92aa7b0276e4471824df  gcc/rtlanal.h
  9a5e61517f096479200fef046f8b2d35  gcc/rtlhash.cc
  0c917b0591a65e7996befc0d1e294cc3  gcc/rtlhash.h
*************** ff662645190de703b9423727e52d659c  gcc/rt
*** 8090,8096 ****
  92e356710b1aae5aaabc8f47d6977fff  gcc/run-rtl-passes.cc
  f4eae48a3e90b34e88b5789e54f5f29a  gcc/run-rtl-passes.h
  add9bd82fcec23469a4d0f7df03d9589  gcc/rust/CONTRIBUTING.md
! 06e6eb13febc51566b7b2dc4c9bbfa60  gcc/rust/ChangeLog
  89327dc2e4ee3db867f710bb5ba2bcd7  gcc/rust/Make-lang.in
  f3527e161e6e2827d299c1a928ebe1c6  gcc/rust/README.md
  8579ce4df2aa8500c0a48f4cf0765b2c  gcc/rust/ast/rust-ast-builder.cc
--- 8094,8100 ----
  92e356710b1aae5aaabc8f47d6977fff  gcc/run-rtl-passes.cc
  f4eae48a3e90b34e88b5789e54f5f29a  gcc/run-rtl-passes.h
  add9bd82fcec23469a4d0f7df03d9589  gcc/rust/CONTRIBUTING.md
! 9593ece98950c104e46820c1cf307804  gcc/rust/ChangeLog
  89327dc2e4ee3db867f710bb5ba2bcd7  gcc/rust/Make-lang.in
  f3527e161e6e2827d299c1a928ebe1c6  gcc/rust/README.md
  8579ce4df2aa8500c0a48f4cf0765b2c  gcc/rust/ast/rust-ast-builder.cc
*************** fe6f5539b06a5b2b5c8179da42f9cd0d  gcc/ru
*** 8179,8185 ****
  3ff8e3c97c56af610fb789104c385560  gcc/rust/backend/rust-mangle-v0.cc
  3f96bdbc9eba300857511ae861409693  gcc/rust/backend/rust-mangle.cc
  dcbba0779b1eca1b210c23b8ef3dcc5d  gcc/rust/backend/rust-mangle.h
! e1d46ad268bbbe682749bbe806f1f906  gcc/rust/backend/rust-tree.cc
  f6bd4fda68a044019b913ed98bf1523e  gcc/rust/backend/rust-tree.h
  675e019161664f914b95bbc7799e517c  gcc/rust/checks/errors/borrowck/bir-design-notes.md
  eee383c6d924f06fa96c8f58f21fc6af  gcc/rust/checks/errors/borrowck/dev-notes.md
--- 8183,8189 ----
  3ff8e3c97c56af610fb789104c385560  gcc/rust/backend/rust-mangle-v0.cc
  3f96bdbc9eba300857511ae861409693  gcc/rust/backend/rust-mangle.cc
  dcbba0779b1eca1b210c23b8ef3dcc5d  gcc/rust/backend/rust-mangle.h
! 65b098b3400d3263f18f7a28ccec2289  gcc/rust/backend/rust-tree.cc
  f6bd4fda68a044019b913ed98bf1523e  gcc/rust/backend/rust-tree.h
  675e019161664f914b95bbc7799e517c  gcc/rust/checks/errors/borrowck/bir-design-notes.md
  eee383c6d924f06fa96c8f58f21fc6af  gcc/rust/checks/errors/borrowck/dev-notes.md
*************** be3678be2cea5e1beb181ef986ed3e3e  gcc/sa
*** 8605,8617 ****
  a92419791c8e8d842c6ef029d4537463  gcc/sarif-spec-urls.def
  18b1ba21aac735e8b4fac6babbf3724f  gcc/sbitmap.cc
  8956392cfb34e0cb12dad1fc890f7d08  gcc/sbitmap.h
! 708944db7964ca7df502a497c935325c  gcc/sched-deps.cc
  7f3c871d86d0577c88b4dbf4cb7bfde6  gcc/sched-ebb.cc
  da5c82758bbb99130aa6287f7a6c1342  gcc/sched-int.h
  017ab43b4cc0ef03de29f6129f0423e0  gcc/sched-rgn.cc
  9e378364d914a59876b4a6de4497fd39  gcc/sel-sched-dump.cc
  3b84f3b6b449c883935ef347892e770c  gcc/sel-sched-dump.h
! 8ac9df5d73b07c8cf1c06ad0c255eee8  gcc/sel-sched-ir.cc
  291a3a1dd9369c3712c90457c320acad  gcc/sel-sched-ir.h
  f04046c3702a78faced8e75c7064288f  gcc/sel-sched.cc
  c8e14bcadd8fd37034a186ff2eed497c  gcc/sel-sched.h
--- 8609,8621 ----
  a92419791c8e8d842c6ef029d4537463  gcc/sarif-spec-urls.def
  18b1ba21aac735e8b4fac6babbf3724f  gcc/sbitmap.cc
  8956392cfb34e0cb12dad1fc890f7d08  gcc/sbitmap.h
! 026a6787a4094ddd57955fc5a617b1b4  gcc/sched-deps.cc
  7f3c871d86d0577c88b4dbf4cb7bfde6  gcc/sched-ebb.cc
  da5c82758bbb99130aa6287f7a6c1342  gcc/sched-int.h
  017ab43b4cc0ef03de29f6129f0423e0  gcc/sched-rgn.cc
  9e378364d914a59876b4a6de4497fd39  gcc/sel-sched-dump.cc
  3b84f3b6b449c883935ef347892e770c  gcc/sel-sched-dump.h
! ce78ce26a3c148575eb45a6e3b88fb3b  gcc/sel-sched-ir.cc
  291a3a1dd9369c3712c90457c320acad  gcc/sel-sched-ir.h
  f04046c3702a78faced8e75c7064288f  gcc/sel-sched.cc
  c8e14bcadd8fd37034a186ff2eed497c  gcc/sel-sched.h
*************** c8e14bcadd8fd37034a186ff2eed497c  gcc/se
*** 8622,8628 ****
  8166aa40b5d7f4f6fafe135322f69070  gcc/selftest-run-tests.cc
  872212bd817771adf8598f629fe27051  gcc/selftest-tree.h
  fdb979dbe9a110ffa6e78f1d2a5bc11e  gcc/selftest-xml.h
! d6e8bf4839f7806bbc1ff43a1a05350a  gcc/selftest.cc
  40e0fb417bd8b1ffbe434bc0b460d44f  gcc/selftest.h
  1c334344ba785f0a69ca21056f1f847a  gcc/sese.cc
  f7a30cc2e8344fa489739267da2d868b  gcc/sese.h
--- 8626,8632 ----
  8166aa40b5d7f4f6fafe135322f69070  gcc/selftest-run-tests.cc
  872212bd817771adf8598f629fe27051  gcc/selftest-tree.h
  fdb979dbe9a110ffa6e78f1d2a5bc11e  gcc/selftest-xml.h
! 1461067dc9aa772e491ec40e7b0b5d48  gcc/selftest.cc
  40e0fb417bd8b1ffbe434bc0b460d44f  gcc/selftest.h
  1c334344ba785f0a69ca21056f1f847a  gcc/sese.cc
  f7a30cc2e8344fa489739267da2d868b  gcc/sese.h
*************** c5e97158cfb2af3204a5d8562aefaf85  gcc/sh
*** 8632,8638 ****
  3f3d94e6f52cc07f64e195e1a75dc485  gcc/signop.h
  b4c90fe064bba484ce5c18adb1a9e544  gcc/simple-diagnostic-path.cc
  7affe31db6f7cb9c7fc77937feef0758  gcc/simple-diagnostic-path.h
! 33e945d00fc1747c20a290475f31077e  gcc/simplify-rtx.cc
  d1aec926a9488869692e8fe2f61ca75f  gcc/sort.cc
  7daa38cb1d09a2f88958f00a965d40a1  gcc/sparseset.cc
  3883b6ff1845dcec7b2822124018ab05  gcc/sparseset.h
--- 8636,8642 ----
  3f3d94e6f52cc07f64e195e1a75dc485  gcc/signop.h
  b4c90fe064bba484ce5c18adb1a9e544  gcc/simple-diagnostic-path.cc
  7affe31db6f7cb9c7fc77937feef0758  gcc/simple-diagnostic-path.h
! 77599861077f8a8a713192f2cd0feda0  gcc/simplify-rtx.cc
  d1aec926a9488869692e8fe2f61ca75f  gcc/sort.cc
  7daa38cb1d09a2f88958f00a965d40a1  gcc/sparseset.cc
  3883b6ff1845dcec7b2822124018ab05  gcc/sparseset.h
*************** abe561302c75a109ce08cbd323584729  gcc/sr
*** 8648,8654 ****
  2f0c0fc8fdde1ef11f4ea6239681c092  gcc/ssa-iterators.h
  00ff2e898f01bd636cd908ea978b9a66  gcc/ssa.h
  230879235935baa33d6a5cfc7df6f697  gcc/stack-ptr-mod.cc
! 54d0245c9f12863a12bba5c5dca661de  gcc/statistics.cc
  d0c8ce33234bafe2dbc74e49092117d8  gcc/statistics.h
  bae414ca6b1d11488ac29960c5ec8422  gcc/stmt.cc
  bb220250a8f31c99168b5db3e1adb3a7  gcc/stmt.h
--- 8652,8658 ----
  2f0c0fc8fdde1ef11f4ea6239681c092  gcc/ssa-iterators.h
  00ff2e898f01bd636cd908ea978b9a66  gcc/ssa.h
  230879235935baa33d6a5cfc7df6f697  gcc/stack-ptr-mod.cc
! d5fd8b7b90aa51d995dc6cfdadd21279  gcc/statistics.cc
  d0c8ce33234bafe2dbc74e49092117d8  gcc/statistics.h
  bae414ca6b1d11488ac29960c5ec8422  gcc/stmt.cc
  bb220250a8f31c99168b5db3e1adb3a7  gcc/stmt.h
*************** bb220250a8f31c99168b5db3e1adb3a7  gcc/st
*** 8657,8663 ****
  fc736757784bcbda641e40391430fdff  gcc/store-motion.cc
  5265b9b7386dd99944d80d34f6a1f143  gcc/streamer-hooks.cc
  0ad0dd047bfea81859e6033818540690  gcc/streamer-hooks.h
! 900ff8981f9d4f29ab99738d5d755b9c  gcc/stringpool.cc
  cfd45119ce5a4e4285deb2d4e2ad42bf  gcc/stringpool.h
  abe8f31bec859310f8609d28b8c28a68  gcc/substring-locations.cc
  e2888e2a91c1c5acafe55001871be3b8  gcc/substring-locations.h
--- 8661,8667 ----
  fc736757784bcbda641e40391430fdff  gcc/store-motion.cc
  5265b9b7386dd99944d80d34f6a1f143  gcc/streamer-hooks.cc
  0ad0dd047bfea81859e6033818540690  gcc/streamer-hooks.h
! 2fbdaf6bb8705ecf4ec8240759690a85  gcc/stringpool.cc
  cfd45119ce5a4e4285deb2d4e2ad42bf  gcc/stringpool.h
  abe8f31bec859310f8609d28b8c28a68  gcc/substring-locations.cc
  e2888e2a91c1c5acafe55001871be3b8  gcc/substring-locations.h
*************** e1899978827cfd0d1570e61a7c30d94a  gcc/sy
*** 8675,8681 ****
  9f6e7e9cd1feccb68765288812751504  gcc/symtab-thunks.h
  74c8816df6f189cfaf94cca29a845119  gcc/symtab.cc
  aa4c1d56c6974e4059ea89c2e315974f  gcc/sync-builtins.def
! 4dc999314edefadee960693a58318e53  gcc/system.h
  53f5e973b2158c80ba4a144b03350c73  gcc/target-def.h
  d294651bcc46af1abb89e48cd851fd40  gcc/target-globals.cc
  fe7cc01d7dd25103bc61ab1a33dd54dc  gcc/target-globals.h
--- 8679,8685 ----
  9f6e7e9cd1feccb68765288812751504  gcc/symtab-thunks.h
  74c8816df6f189cfaf94cca29a845119  gcc/symtab.cc
  aa4c1d56c6974e4059ea89c2e315974f  gcc/sync-builtins.def
! f3ad4ab6a47ec1756160d39374ae0576  gcc/system.h
  53f5e973b2158c80ba4a144b03350c73  gcc/target-def.h
  d294651bcc46af1abb89e48cd851fd40  gcc/target-globals.cc
  fe7cc01d7dd25103bc61ab1a33dd54dc  gcc/target-globals.h
*************** b21c32de4ac41afaa112df92995fbc7b  gcc/ta
*** 8686,8692 ****
  8125dc2ec6773b874996579f2c7a5a45  gcc/targhooks.cc
  407bffe68a928437a42d3979f89d8c46  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! 54620336fef70d3bff0c55b8a069fa3f  gcc/testsuite/ChangeLog
  47e8e29b649ead73b8a1e4797da470ed  gcc/testsuite/ChangeLog-1993-2007
  35198a9e4fd31b935de8789faabf3351  gcc/testsuite/ChangeLog-2008
  0f19934540750356d1b91595cebfd9a8  gcc/testsuite/ChangeLog-2009
--- 8690,8696 ----
  8125dc2ec6773b874996579f2c7a5a45  gcc/targhooks.cc
  407bffe68a928437a42d3979f89d8c46  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! bb5d055b5e2a0b87a68e9e3e5329d555  gcc/testsuite/ChangeLog
  47e8e29b649ead73b8a1e4797da470ed  gcc/testsuite/ChangeLog-1993-2007
  35198a9e4fd31b935de8789faabf3351  gcc/testsuite/ChangeLog-2008
  0f19934540750356d1b91595cebfd9a8  gcc/testsuite/ChangeLog-2009
*************** d8d90e3ccd49a8c350bb7fa06c23b69e  gcc/te
*** 17010,17022 ****
  d9255b384fd183b33a0f3f1705652aef  gcc/testsuite/algol68/compile/error-mode-stropping-8.a68
  948785683824fa830a45a02ee6ebd9f4  gcc/testsuite/algol68/compile/error-mode-stropping-9.a68
  ed8937b8a485d89ad1b8dc4c0b235b82  gcc/testsuite/algol68/compile/error-module-coercions-1.a68
  b47f251bf682b77a1fcbc0deb10309bb  gcc/testsuite/algol68/compile/error-module-nested-access-1.a68
  c2b0d2946cbab417eebb4d24da1ab5a8  gcc/testsuite/algol68/compile/error-module-not-found-1.a68
  8b0c028ef528ab0ddc26892632812b6e  gcc/testsuite/algol68/compile/error-module-ranges-1.a68
  e4130ae439c4e60fab00ecd165ae835e  gcc/testsuite/algol68/compile/error-nest-1.a68
  befe947eeef79ffe1618a9c101bb008f  gcc/testsuite/algol68/compile/error-nest-2.a68
  13c6f9bd338f2223acbb02d80fbaa6a3  gcc/testsuite/algol68/compile/error-nest-3.a68
! 31a649a34a74377c8a82c76d12302237  gcc/testsuite/algol68/compile/error-nest-4.a68
  fac954b3ace925bc6875ee318be3b810  gcc/testsuite/algol68/compile/error-nest-5.a68
  e74cfe8a318c62621bf56edc50d99212  gcc/testsuite/algol68/compile/error-nestable-comments-1.a68
  819697f82afa8855ae899bae58e61181  gcc/testsuite/algol68/compile/error-nested-comment-1.a68
--- 17014,17028 ----
  d9255b384fd183b33a0f3f1705652aef  gcc/testsuite/algol68/compile/error-mode-stropping-8.a68
  948785683824fa830a45a02ee6ebd9f4  gcc/testsuite/algol68/compile/error-mode-stropping-9.a68
  ed8937b8a485d89ad1b8dc4c0b235b82  gcc/testsuite/algol68/compile/error-module-coercions-1.a68
+ cb7497a92bbe1faa713c5c33adb6ef6f  gcc/testsuite/algol68/compile/error-module-definition-1.a68
+ f014c1edb36efea61731a2d591ca5161  gcc/testsuite/algol68/compile/error-module-definition-2.a68
  b47f251bf682b77a1fcbc0deb10309bb  gcc/testsuite/algol68/compile/error-module-nested-access-1.a68
  c2b0d2946cbab417eebb4d24da1ab5a8  gcc/testsuite/algol68/compile/error-module-not-found-1.a68
  8b0c028ef528ab0ddc26892632812b6e  gcc/testsuite/algol68/compile/error-module-ranges-1.a68
  e4130ae439c4e60fab00ecd165ae835e  gcc/testsuite/algol68/compile/error-nest-1.a68
  befe947eeef79ffe1618a9c101bb008f  gcc/testsuite/algol68/compile/error-nest-2.a68
  13c6f9bd338f2223acbb02d80fbaa6a3  gcc/testsuite/algol68/compile/error-nest-3.a68
! 0c8229200daf5bf718b266d09a98f7d5  gcc/testsuite/algol68/compile/error-nest-4.a68
  fac954b3ace925bc6875ee318be3b810  gcc/testsuite/algol68/compile/error-nest-5.a68
  e74cfe8a318c62621bf56edc50d99212  gcc/testsuite/algol68/compile/error-nestable-comments-1.a68
  819697f82afa8855ae899bae58e61181  gcc/testsuite/algol68/compile/error-nested-comment-1.a68
*************** da2f639d00aef0837f7fe5841659a31e  gcc/te
*** 17214,17222 ****
  ae090482307635cef763b8472c5f9f63  gcc/testsuite/algol68/execute/bin-1.a68
  2b96660f217790ef4d3c30d7967e272b  gcc/testsuite/algol68/execute/bin-negative-1.a68
  136cb319d4afa76d14581fab22962bda  gcc/testsuite/algol68/execute/bin-negative-gnu-1.a68
! 63bc31f858993dc2ed0c150e9b3e0012  gcc/testsuite/algol68/execute/bits-clear-1.a68
! 98da66fca3eebe622d35a0f00de9dc62  gcc/testsuite/algol68/execute/bits-set-1.a68
! 35766fbe63ac2214a1c95a4009877af8  gcc/testsuite/algol68/execute/bits-test-1.a68
  ec8d149dd4b8f99f91e13d231858cfcd  gcc/testsuite/algol68/execute/boolops-1.a68
  f081dd04a0bf5e6ab8d9e46fe1bfefb9  gcc/testsuite/algol68/execute/call-1.a68
  6dbe11ab04e61f6238e7d61772d8ba2f  gcc/testsuite/algol68/execute/call-2.a68
--- 17220,17231 ----
  ae090482307635cef763b8472c5f9f63  gcc/testsuite/algol68/execute/bin-1.a68
  2b96660f217790ef4d3c30d7967e272b  gcc/testsuite/algol68/execute/bin-negative-1.a68
  136cb319d4afa76d14581fab22962bda  gcc/testsuite/algol68/execute/bin-negative-gnu-1.a68
! 05bdda461b233eed5f4c0836020e4da3  gcc/testsuite/algol68/execute/bits-clear-1.a68
! 5fcb820655e1db838273df37eaa32743  gcc/testsuite/algol68/execute/bits-set-1.a68
! e7129df766858f1d3fa7cddc06870e34  gcc/testsuite/algol68/execute/bits-shift-1.a68
! 2106e23f362f111ec6348cd6f382cdec  gcc/testsuite/algol68/execute/bits-shift-2.a68
! 62eb1ffb4baa1314de645f7bc57cec6b  gcc/testsuite/algol68/execute/bits-shift-3.a68
! 42b771eaf2ba3d0c0b83ad6df8905be4  gcc/testsuite/algol68/execute/bits-test-1.a68
  ec8d149dd4b8f99f91e13d231858cfcd  gcc/testsuite/algol68/execute/boolops-1.a68
  f081dd04a0bf5e6ab8d9e46fe1bfefb9  gcc/testsuite/algol68/execute/call-1.a68
  6dbe11ab04e61f6238e7d61772d8ba2f  gcc/testsuite/algol68/execute/call-2.a68
*************** c3cc13dab6d2fade664ad81477406518  gcc/te
*** 18105,18110 ****
--- 18114,18121 ----
  e8c412b9eaf42745a7fc07cc52fd19af  gcc/testsuite/c-c++-common/analyzer/compound-assignment-pr112969.c
  76288e31c6c0d1e9c35771d4cfda7811  gcc/testsuite/c-c++-common/analyzer/computed-goto-1.c
  414c98967b21f8892f6579d63fa90a9e  gcc/testsuite/c-c++-common/analyzer/conditionals-pr111881.c
+ f2131bfa61003086112f4727e3acb289  gcc/testsuite/c-c++-common/analyzer/conditionals-pr98447-1.c
+ 90d538195723afedc20809c0e3299ea3  gcc/testsuite/c-c++-common/analyzer/conditionals-pr98447-2.c
  d7794ed91b592bdaaebd423b3d5d046d  gcc/testsuite/c-c++-common/analyzer/coreutils-cksum-pr108664.c
  41577e8108f61dd2242681d7534b7d2b  gcc/testsuite/c-c++-common/analyzer/coreutils-group_number.c
  cc0f23b2ce68c195b7e03c19c98794a7  gcc/testsuite/c-c++-common/analyzer/coreutils-sum-pr108666.c
*************** fda86ff25535c945555b6fc4c394a45e  gcc/te
*** 18201,18206 ****
--- 18212,18218 ----
  d1c4ddb727ee01350795c09b131c06df  gcc/testsuite/c-c++-common/analyzer/gzio.c
  0c699c7c6658f8a724e0697d1a329a98  gcc/testsuite/c-c++-common/analyzer/hard-reg-1.c
  e1b439caf59bbf930791f644cc2c4443  gcc/testsuite/c-c++-common/analyzer/ice-pr112889.c
+ 1c893eafeb29c04dea0b64d6b91dde87  gcc/testsuite/c-c++-common/analyzer/ice-pr116865.c
  c0d4ffd8d8a9cd0d270016300da5a4d4  gcc/testsuite/c-c++-common/analyzer/imprecise-floating-point-1.c
  41b87104bc61c7bda741b03025c359b4  gcc/testsuite/c-c++-common/analyzer/infinite-loop-2.c
  963be3f26ca424fe0ab634bc2845072c  gcc/testsuite/c-c++-common/analyzer/infinite-loop-4.c
*************** f2ef41567ee028e2c9a0b2dcc93610d5  gcc/te
*** 18325,18331 ****
  61af2386834b57be29eb9039ab3e0c5d  gcc/testsuite/c-c++-common/analyzer/named-constants-via-macros-undef.c
  818fb538b0fb1960bc453bff00d253a2  gcc/testsuite/c-c++-common/analyzer/null-deref-pr108251-smp_fetch_ssl_fc_has_early-O2.c
  9439deaf5e75dd7c66e23468821d5c7f  gcc/testsuite/c-c++-common/analyzer/null-deref-pr108251-smp_fetch_ssl_fc_has_early.c
! f0a9a6e0875069a7bb067e5dac4c9072  gcc/testsuite/c-c++-common/analyzer/null-deref-pr108400-SoftEtherVPN-WebUi.c
  4c86f72d1d3cb536f8d0380e15b986c9  gcc/testsuite/c-c++-common/analyzer/null-deref-pr108806-qemu.c
  32d7a13194f9a5ee03de4c64171f033e  gcc/testsuite/c-c++-common/analyzer/null-deref-pr108830.c
  a256b4df4964505fabaddb133153a201  gcc/testsuite/c-c++-common/analyzer/null-deref-pr110520.c
--- 18337,18343 ----
  61af2386834b57be29eb9039ab3e0c5d  gcc/testsuite/c-c++-common/analyzer/named-constants-via-macros-undef.c
  818fb538b0fb1960bc453bff00d253a2  gcc/testsuite/c-c++-common/analyzer/null-deref-pr108251-smp_fetch_ssl_fc_has_early-O2.c
  9439deaf5e75dd7c66e23468821d5c7f  gcc/testsuite/c-c++-common/analyzer/null-deref-pr108251-smp_fetch_ssl_fc_has_early.c
! 49b84fd114ca228ca9c64a39c122716e  gcc/testsuite/c-c++-common/analyzer/null-deref-pr108400-SoftEtherVPN-WebUi.c
  4c86f72d1d3cb536f8d0380e15b986c9  gcc/testsuite/c-c++-common/analyzer/null-deref-pr108806-qemu.c
  32d7a13194f9a5ee03de4c64171f033e  gcc/testsuite/c-c++-common/analyzer/null-deref-pr108830.c
  a256b4df4964505fabaddb133153a201  gcc/testsuite/c-c++-common/analyzer/null-deref-pr110520.c
*************** a3a25e292815be4474cfe0c8eb665d70  gcc/te
*** 20171,20178 ****
  498ddd8ad30f33954c75dc8c4bb14a15  gcc/testsuite/c-c++-common/patchable_function_entry-error-3.c
  06e40a848186c44f76563561856a3ee3  gcc/testsuite/c-c++-common/pointer-to-fn1.c
  a6ce976933c82e0ff9cfe2bb28e85af5  gcc/testsuite/c-c++-common/pr100785.c
- 280ab2738fa9f4a59440b24de22faee0  gcc/testsuite/c-c++-common/pr101312-1.c
- 1e4a8d2edc5aa23b12908e90b5487800  gcc/testsuite/c-c++-common/pr101312-2.c
  05e5f34e1a745d2204989ec4f256e3c7  gcc/testsuite/c-c++-common/pr101537.c
  8709cca98d2978c94addb154e2c7ae32  gcc/testsuite/c-c++-common/pr102281.c
  24cfa37b3314f819eee358a0281492a7  gcc/testsuite/c-c++-common/pr102285.c
--- 20183,20188 ----
*************** b7f503ea1b7405c820c390c5eba04cb7  gcc/te
*** 20594,20599 ****
--- 20604,20610 ----
  0fa4a0ee5b9d36c2f49914adfda4059b  gcc/testsuite/c-c++-common/toplevel-asm-7.c
  b9e974e2779e4215afe8a7d06bef5993  gcc/testsuite/c-c++-common/toplevel-asm-8.c
  96c0880eb6513d2b016d112d26970588  gcc/testsuite/c-c++-common/toplevel-asm-9.c
+ 2702702014d96e5cdc377c7011894945  gcc/testsuite/c-c++-common/toplevel-extended-asm-1.c
  2a460af511669879d590f5b1a8e1fb2a  gcc/testsuite/c-c++-common/torture/20050113-1.c
  c1e50a7071b6999a8895b383c899231c  gcc/testsuite/c-c++-common/torture/aarch64-vect-lane-1.c
  e71883f492cebf8129478eb15f05b834  gcc/testsuite/c-c++-common/torture/aarch64-vect-lane-2.c
*************** eafad55d1edd46129b380a1d3be7e6ed  gcc/te
*** 22179,22184 ****
--- 22190,22196 ----
  2cf72eec1f43cb24a1e9de6d87368289  gcc/testsuite/g++.dg/analyzer/fanalyzer-show-events-in-system-headers.C
  e000c1d398eb170979b06c1a5a317727  gcc/testsuite/g++.dg/analyzer/fd-bind-pr107783.C
  acd12a34fb1477ca263e7f38269f40d0  gcc/testsuite/g++.dg/analyzer/fno-exception.C
+ 7744e4ee593e6479779dcfc983f35022  gcc/testsuite/g++.dg/analyzer/ice-pr116228.C
  5ada15fa323a1043ed8e9454047ae98f  gcc/testsuite/g++.dg/analyzer/infinite-recursion-1.C
  3ab5a03785e0beb328826ec97a100dfe  gcc/testsuite/g++.dg/analyzer/infinite-recursion-2.C
  6c9235c35035b59cc0a83132c639d00f  gcc/testsuite/g++.dg/analyzer/infinite-recursion-3.C
*************** b4c316ecfeb0a9b078a76b658ed94668  gcc/te
*** 25377,25382 ****
--- 25389,25395 ----
  9598abf127e6826158d64ee6b05b0791  gcc/testsuite/g++.dg/cpp0x/pr122302.C
  dd7f53c1057815c9ecba63c7f4408ec4  gcc/testsuite/g++.dg/cpp0x/pr122465.C
  4891c13c51126851f62b961486e6f9ef  gcc/testsuite/g++.dg/cpp0x/pr123692.C
+ b2f7d7cab4ef6e12f25f82545d59869a  gcc/testsuite/g++.dg/cpp0x/pr123818.C
  26dea799d49ce223a0c4130a3c955271  gcc/testsuite/g++.dg/cpp0x/pr31431-2.C
  4d1da29b669bf3178b3987abce4d58b1  gcc/testsuite/g++.dg/cpp0x/pr31431.C
  d65e06a3830e2b511cc25692b94615a1  gcc/testsuite/g++.dg/cpp0x/pr31432.C
*************** e4eef3325d652767c4b83b6aed8c24b5  gcc/te
*** 27813,27819 ****
  54f4344e911f644cb2cc34417b933914  gcc/testsuite/g++.dg/cpp23/ext-floating7.C
  bc34c96001d8dfdc3193f88b494b97a1  gcc/testsuite/g++.dg/cpp23/ext-floating8.C
  235a8f3c94e9cc7e9180fe31a3d8352b  gcc/testsuite/g++.dg/cpp23/ext-floating9.C
! 41f6b84af959c52c0015d14c364d9a05  gcc/testsuite/g++.dg/cpp23/feat-cxx2b.C
  b2919427c96be25ae3a72933323c8de1  gcc/testsuite/g++.dg/cpp23/init-stmt1.C
  368308646b02bb36cf22014a0d5bbbdb  gcc/testsuite/g++.dg/cpp23/init-stmt2.C
  906bfd9572fea8013b12e8c215392381  gcc/testsuite/g++.dg/cpp23/label1.C
--- 27826,27832 ----
  54f4344e911f644cb2cc34417b933914  gcc/testsuite/g++.dg/cpp23/ext-floating7.C
  bc34c96001d8dfdc3193f88b494b97a1  gcc/testsuite/g++.dg/cpp23/ext-floating8.C
  235a8f3c94e9cc7e9180fe31a3d8352b  gcc/testsuite/g++.dg/cpp23/ext-floating9.C
! cb638f384b69db1073adfb06c1cc5942  gcc/testsuite/g++.dg/cpp23/feat-cxx2b.C
  b2919427c96be25ae3a72933323c8de1  gcc/testsuite/g++.dg/cpp23/init-stmt1.C
  368308646b02bb36cf22014a0d5bbbdb  gcc/testsuite/g++.dg/cpp23/init-stmt2.C
  906bfd9572fea8013b12e8c215392381  gcc/testsuite/g++.dg/cpp23/label1.C
*************** c03cbe0eeea49adccea22e13d8e8abf1  gcc/te
*** 27999,28005 ****
  f3b34592f993c84838b0ef36dad5ed5e  gcc/testsuite/g++.dg/cpp26/expansion-stmt7.C
  68e2c6d50bfacacb8479c70ed9ed0ddc  gcc/testsuite/g++.dg/cpp26/expansion-stmt8.C
  fab75ccc959cbef8fb3183a88990faa8  gcc/testsuite/g++.dg/cpp26/expansion-stmt9.C
! ecc4e011dced560dab638b382ac4b9e1  gcc/testsuite/g++.dg/cpp26/feat-cxx26.C
  e439504634b8fdea668e10d9fc930c63  gcc/testsuite/g++.dg/cpp26/literals1.C
  3572f5ef732defbaed672decde98fc83  gcc/testsuite/g++.dg/cpp26/literals2.C
  8f5e59e0f7c8cbf6a6ab946370b7128b  gcc/testsuite/g++.dg/cpp26/name-independent-decl1.C
--- 28012,28018 ----
  f3b34592f993c84838b0ef36dad5ed5e  gcc/testsuite/g++.dg/cpp26/expansion-stmt7.C
  68e2c6d50bfacacb8479c70ed9ed0ddc  gcc/testsuite/g++.dg/cpp26/expansion-stmt8.C
  fab75ccc959cbef8fb3183a88990faa8  gcc/testsuite/g++.dg/cpp26/expansion-stmt9.C
! 46820e80cc60be5c51c0901dcf4fb55c  gcc/testsuite/g++.dg/cpp26/feat-cxx26.C
  e439504634b8fdea668e10d9fc930c63  gcc/testsuite/g++.dg/cpp26/literals1.C
  3572f5ef732defbaed672decde98fc83  gcc/testsuite/g++.dg/cpp26/literals2.C
  8f5e59e0f7c8cbf6a6ab946370b7128b  gcc/testsuite/g++.dg/cpp26/name-independent-decl1.C
*************** b0f94df77ae1f45f51ea4e2c6bb9691a  gcc/te
*** 28025,28030 ****
--- 28038,28044 ----
  66ff6dfe6ddc544b4653391842e6eae8  gcc/testsuite/g++.dg/cpp26/pack-indexing17.C
  7b55370f3253f2eae6d541ae349b6268  gcc/testsuite/g++.dg/cpp26/pack-indexing17a.C
  dec9cc8d0d460e2cc13f361418bfbd4c  gcc/testsuite/g++.dg/cpp26/pack-indexing18.C
+ 4dfa54f1d3bc2ea91cd06e41813f7f63  gcc/testsuite/g++.dg/cpp26/pack-indexing19.C
  72008855d5af1b25c44e1d4affa19785  gcc/testsuite/g++.dg/cpp26/pack-indexing2.C
  01e2e390b9329b3e619416e0bf8b3684  gcc/testsuite/g++.dg/cpp26/pack-indexing3.C
  8105a5f8078fd0ba5507cadc224b15ad  gcc/testsuite/g++.dg/cpp26/pack-indexing4.C
*************** e5c8f0eb28524b5990c773f0897c9a82  gcc/te
*** 28038,28043 ****
--- 28052,28058 ----
  b9789190917641a7dfa95059b0d37281  gcc/testsuite/g++.dg/cpp26/raw-string2.C
  441c8c40ead9b31d50df30dbe360ef88  gcc/testsuite/g++.dg/cpp26/static_assert1.C
  8aca76565e546c0188e275f568333a7b  gcc/testsuite/g++.dg/cpp26/stdarg1.C
+ b3db20ce38ae1745c8e85ddf5872ba4b  gcc/testsuite/g++.dg/cpp26/stdarg10.C
  94eb4f7ad7a4c857ba7310d896c05e6e  gcc/testsuite/g++.dg/cpp26/stdarg2.C
  b3ab902a4a78ea677d9248bff337be12  gcc/testsuite/g++.dg/cpp26/stdarg3.C
  13235659b1b32147b6aa07fdc9855bca  gcc/testsuite/g++.dg/cpp26/stdarg4.C
*************** ecfa94e705bc436ad699767b1e4c929e  gcc/te
*** 32380,32385 ****
--- 32395,32401 ----
  55ee7bff7cc115f42266bd1d62dda46b  gcc/testsuite/g++.dg/ipa/pr100413.C
  901698e6dabf29dd6ced031811fcf59e  gcc/testsuite/g++.dg/ipa/pr103099.C
  f2ff4523ab9758b8e447b088ac708879  gcc/testsuite/g++.dg/ipa/pr106258.C
+ 4b93844d472e68bdcc050f5ef8ce7079  gcc/testsuite/g++.dg/ipa/pr106260.C
  c43cd4a90674d630795e0323738e0460  gcc/testsuite/g++.dg/ipa/pr107661.C
  7d63c0342d026b9ee4f2ecb03364cefe  gcc/testsuite/g++.dg/ipa/pr108110.C
  9a257f3564fd42fe9d7e00c5567f89d2  gcc/testsuite/g++.dg/ipa/pr108509.C
*************** c00c06950f2ab5091059c09b8c43e900  gcc/te
*** 33511,33516 ****
--- 33527,33533 ----
  14781acb506b320e2bc37afd020463b6  gcc/testsuite/g++.dg/modules/dep-2.C
  cb642b297719a8133fff6a8330998c3d  gcc/testsuite/g++.dg/modules/dep-3.C
  687e578a797b430dd89299946b47eb21  gcc/testsuite/g++.dg/modules/dep-4.H
+ 513d518822a90ec26a35dc6619af4345  gcc/testsuite/g++.dg/modules/dep-5.C
  a523b04ab1811e6a7b5c26428897e155  gcc/testsuite/g++.dg/modules/depflags-f-MD.C
  c8a1eb4ced10a42d80ad249e890f366e  gcc/testsuite/g++.dg/modules/depflags-f.C
  80d9bef84b86ef3877494d9ab5a6045f  gcc/testsuite/g++.dg/modules/depflags-fi.C
*************** f678b424d2148346313809851fbbe611  gcc/te
*** 36795,36800 ****
--- 36812,36818 ----
  adfc90a4ec5f7e6acacbdafc592a2862  gcc/testsuite/g++.dg/pr113673.C
  0d8a07ea8cac23cae017f961577f3b8c  gcc/testsuite/g++.dg/pr114025.C
  6431e5522e8138d482199836afdeb823  gcc/testsuite/g++.dg/pr114501_0.C
+ 17184bd6e6dc1ff12f2c96ef0f2afa52  gcc/testsuite/g++.dg/pr114969.C
  ad9259e6bdf3bdde202871cc62bd27bb  gcc/testsuite/g++.dg/pr115232.C
  d817d87f4590a7694dcb15ea0a0856a3  gcc/testsuite/g++.dg/pr115605.C
  c3ec8c8f271e45e00fd96018adef8585  gcc/testsuite/g++.dg/pr117222.C
*************** fd4d2ba7da42a991ae7f0513e8331f00  gcc/te
*** 37100,37106 ****
  8546621cffce10eaaf19035ce092d690  gcc/testsuite/g++.dg/reflect/crash3.C
  08df10fc9089ca9b7056d12d68c3ef8f  gcc/testsuite/g++.dg/reflect/crash4.C
  dd86fc7e909711154b284147a6956686  gcc/testsuite/g++.dg/reflect/crash5.C
! d7f568645ceb8b10a63daaa599492f93  gcc/testsuite/g++.dg/reflect/crash6.C
  edae344ef3c025f6bb140bdcc41cfbac  gcc/testsuite/g++.dg/reflect/crash7.C
  d7c8a0736148c190a05cdcf0be278b45  gcc/testsuite/g++.dg/reflect/crash8.C
  f1964d85b7740c85c6c38271bf60d85d  gcc/testsuite/g++.dg/reflect/crash9.C
--- 37118,37124 ----
  8546621cffce10eaaf19035ce092d690  gcc/testsuite/g++.dg/reflect/crash3.C
  08df10fc9089ca9b7056d12d68c3ef8f  gcc/testsuite/g++.dg/reflect/crash4.C
  dd86fc7e909711154b284147a6956686  gcc/testsuite/g++.dg/reflect/crash5.C
! bb1f8ef1f398381c552b719d90f00b29  gcc/testsuite/g++.dg/reflect/crash6.C
  edae344ef3c025f6bb140bdcc41cfbac  gcc/testsuite/g++.dg/reflect/crash7.C
  d7c8a0736148c190a05cdcf0be278b45  gcc/testsuite/g++.dg/reflect/crash8.C
  f1964d85b7740c85c6c38271bf60d85d  gcc/testsuite/g++.dg/reflect/crash9.C
*************** c383f7bdf34cc8248e3fb9c61011574a  gcc/te
*** 37153,37158 ****
--- 37171,37177 ----
  04d9a22b5b43c4289de935dbccac2ed6  gcc/testsuite/g++.dg/reflect/error1.C
  30da2651e0378b27ad373e3c60c0aa0f  gcc/testsuite/g++.dg/reflect/error10.C
  2c9f13a2651383956671a08269662579  gcc/testsuite/g++.dg/reflect/error11.C
+ a76cb36f67e4427087e2d9641896eaaf  gcc/testsuite/g++.dg/reflect/error12.C
  69edf1172a90d65c86d8d9bb69b88b21  gcc/testsuite/g++.dg/reflect/error2.C
  eb3f835094fc060a3320066f75665133  gcc/testsuite/g++.dg/reflect/error3.C
  5caf93c84084cbeab5b7f76875d678ae  gcc/testsuite/g++.dg/reflect/error4.C
*************** eb3f835094fc060a3320066f75665133  gcc/te
*** 37160,37165 ****
--- 37179,37185 ----
  6dad71fc45a878bcafd4500cde907505  gcc/testsuite/g++.dg/reflect/error6.C
  b6e5358e929ecce99496e00535aeba9d  gcc/testsuite/g++.dg/reflect/error8.C
  9c8bebf2a51bdac66f56ebcd8d2e79b5  gcc/testsuite/g++.dg/reflect/error9.C
+ b8eb86b029a2ffb0d23c96945ba35e78  gcc/testsuite/g++.dg/reflect/expansion-stmt1.C
  92058e6db958dd512a0f906581bd91a8  gcc/testsuite/g++.dg/reflect/expr1.C
  a8a15705ab8187b001c195f1cec551cf  gcc/testsuite/g++.dg/reflect/expr10.C
  b9523a1696257196719fca0c617d3dc0  gcc/testsuite/g++.dg/reflect/expr11.C
*************** d09ceac0ed381b8e6d87478d7da5ecea  gcc/te
*** 37168,37174 ****
  cb62b6f411eaa0edabe6a10520d7652c  gcc/testsuite/g++.dg/reflect/expr14.C
  7d931bd0fd71d114fa6a17dce607e802  gcc/testsuite/g++.dg/reflect/expr15.C
  8a9b940805893540797936869da281d7  gcc/testsuite/g++.dg/reflect/expr2.C
! 4acc2b0f142d132010d761dd1e262871  gcc/testsuite/g++.dg/reflect/expr3.C
  6db5cf1cb9ce8e043687a3df14680bc3  gcc/testsuite/g++.dg/reflect/expr4.C
  2f5078e222bbbc165f5206961c222ffb  gcc/testsuite/g++.dg/reflect/expr5.C
  7d020fd4ecbc4b1230e2e19a4dd74baf  gcc/testsuite/g++.dg/reflect/expr6.C
--- 37188,37194 ----
  cb62b6f411eaa0edabe6a10520d7652c  gcc/testsuite/g++.dg/reflect/expr14.C
  7d931bd0fd71d114fa6a17dce607e802  gcc/testsuite/g++.dg/reflect/expr15.C
  8a9b940805893540797936869da281d7  gcc/testsuite/g++.dg/reflect/expr2.C
! 95b3847a7998ed78b5a5dab025e53616  gcc/testsuite/g++.dg/reflect/expr3.C
  6db5cf1cb9ce8e043687a3df14680bc3  gcc/testsuite/g++.dg/reflect/expr4.C
  2f5078e222bbbc165f5206961c222ffb  gcc/testsuite/g++.dg/reflect/expr5.C
  7d020fd4ecbc4b1230e2e19a4dd74baf  gcc/testsuite/g++.dg/reflect/expr6.C
*************** a8d56dba67d3e38c69cd73989942b6f9  gcc/te
*** 37185,37191 ****
  90a098a09645b4fdee9a2712e997fdbc  gcc/testsuite/g++.dg/reflect/extract8.C
  dd2227984481efc068df9fad2db70d23  gcc/testsuite/g++.dg/reflect/extract9.C
  7dfdda4e711c624c225fbd179ba39cc5  gcc/testsuite/g++.dg/reflect/feat1.C
! e6669438419d88e4c2b4f1eace854b9c  gcc/testsuite/g++.dg/reflect/feat2.C
  161f0254b359ce954f72124bb202c5a7  gcc/testsuite/g++.dg/reflect/has_c_language_linkage1.C
  15b93d7620d02c60b28beb4fefd6951b  gcc/testsuite/g++.dg/reflect/has_default_argument1.C
  626e46c43bca50953d0c173af0e61317  gcc/testsuite/g++.dg/reflect/has_default_argument2.C
--- 37205,37212 ----
  90a098a09645b4fdee9a2712e997fdbc  gcc/testsuite/g++.dg/reflect/extract8.C
  dd2227984481efc068df9fad2db70d23  gcc/testsuite/g++.dg/reflect/extract9.C
  7dfdda4e711c624c225fbd179ba39cc5  gcc/testsuite/g++.dg/reflect/feat1.C
! 998ba51797c5bdab5bc9cd29e0daaf9d  gcc/testsuite/g++.dg/reflect/feat2.C
! 8f91e065cc58bf28ece4dbed2a10fff5  gcc/testsuite/g++.dg/reflect/feat3.C
  161f0254b359ce954f72124bb202c5a7  gcc/testsuite/g++.dg/reflect/has_c_language_linkage1.C
  15b93d7620d02c60b28beb4fefd6951b  gcc/testsuite/g++.dg/reflect/has_default_argument1.C
  626e46c43bca50953d0c173af0e61317  gcc/testsuite/g++.dg/reflect/has_default_argument2.C
*************** c6a71c4b6f87d8009162c82104ba6ea6  gcc/te
*** 37352,37357 ****
--- 37373,37379 ----
  0213453633af68fab3da41d83281e0be  gcc/testsuite/g++.dg/reflect/null5.C
  ff22c9122c2c0fa7a5a06f539fcb9abe  gcc/testsuite/g++.dg/reflect/object_of1.C
  87988cb2a7a1da0cf4b8c94fa491b634  gcc/testsuite/g++.dg/reflect/object_of2.C
+ 655256ebf0d921eb7e5600d6494c42e0  gcc/testsuite/g++.dg/reflect/object_of3.C
  6f855a2823d74e720da5dd0986bd2163  gcc/testsuite/g++.dg/reflect/odr1.C
  09f2262749d7e8a324ecc271ec93e9ef  gcc/testsuite/g++.dg/reflect/offset_of1.C
  019759857338107cc6359f1fb1e6f013  gcc/testsuite/g++.dg/reflect/operator_of1.C
*************** a50a28893edab692cde4895922fbf011  gcc/te
*** 37377,37383 ****
  483ff485a9eeab292d6f65ad722ac089  gcc/testsuite/g++.dg/reflect/p2996-7.C
  29508caa5267d69f643d177e8e88e1f0  gcc/testsuite/g++.dg/reflect/p2996-8.C
  7aa636eff74b58a4aab107bd1ff7b138  gcc/testsuite/g++.dg/reflect/p2996-9.C
! 23678e784540231c2d9d8f8b014c26aa  gcc/testsuite/g++.dg/reflect/p3394-1.C
  f634f671906a4dd818a3550429747fcf  gcc/testsuite/g++.dg/reflect/p3491-1.C
  4b19aace4fcf0826ec6564807f25c8ea  gcc/testsuite/g++.dg/reflect/p3491-2.C
  2113071ef107b79c5882a0afe32e9a9b  gcc/testsuite/g++.dg/reflect/p3491-3.C
--- 37399,37405 ----
  483ff485a9eeab292d6f65ad722ac089  gcc/testsuite/g++.dg/reflect/p2996-7.C
  29508caa5267d69f643d177e8e88e1f0  gcc/testsuite/g++.dg/reflect/p2996-8.C
  7aa636eff74b58a4aab107bd1ff7b138  gcc/testsuite/g++.dg/reflect/p2996-9.C
! 33f83a94b5f10759ddee0f6d0306ba58  gcc/testsuite/g++.dg/reflect/p3394-1.C
  f634f671906a4dd818a3550429747fcf  gcc/testsuite/g++.dg/reflect/p3491-1.C
  4b19aace4fcf0826ec6564807f25c8ea  gcc/testsuite/g++.dg/reflect/p3491-2.C
  2113071ef107b79c5882a0afe32e9a9b  gcc/testsuite/g++.dg/reflect/p3491-3.C
*************** d769c20d76953f9e88aaec8b648608d2  gcc/te
*** 37388,37398 ****
--- 37410,37428 ----
  902b2d95e4aadaa6d5e76b7c37573d97  gcc/testsuite/g++.dg/reflect/parameters_of4.C
  22cf22648a9e3d3b08f4ff8def822d38  gcc/testsuite/g++.dg/reflect/parameters_of5.C
  27f03672191efb3132b9a4258c69a3fc  gcc/testsuite/g++.dg/reflect/parameters_of6.C
+ a51ba46fac5afc88adb4713e3d136a72  gcc/testsuite/g++.dg/reflect/parameters_of7.C
  d6715d284c87d041e08a5fbebff9821e  gcc/testsuite/g++.dg/reflect/parent_of1.C
  55769fcd329e50bcfdf1c40931b35db5  gcc/testsuite/g++.dg/reflect/parm1.C
  ee2a5065f194d0c1d1360c2d2a8f5d8b  gcc/testsuite/g++.dg/reflect/parm2.C
  20137ba8760da5d42ba55a0ab0d862fe  gcc/testsuite/g++.dg/reflect/parm3.C
  94dc78db487e798fab48a81afe367971  gcc/testsuite/g++.dg/reflect/parm4.C
+ 5c2ff0b11bd0883a8da358feed43b5ee  gcc/testsuite/g++.dg/reflect/parm5.C
+ 45bdac50580e4c40dbd5ec689fbf5f3e  gcc/testsuite/g++.dg/reflect/parse1.C
+ c8112e4afd5ef66c1289210e075fbec4  gcc/testsuite/g++.dg/reflect/parse2.C
+ 8c5ab92d4afd63a2fd45539e6f05de30  gcc/testsuite/g++.dg/reflect/parse3.C
+ a0ed9ab19598e5557df6ce3cd0eb27b5  gcc/testsuite/g++.dg/reflect/parse4.C
+ 5ee820f60af15dc3d5e8520149a79b0d  gcc/testsuite/g++.dg/reflect/parse5.C
+ 8bad4ab31da94f87f0784a0c78e0a153  gcc/testsuite/g++.dg/reflect/parse6.C
  306b4ad2098e8b750ed54e51a41def85  gcc/testsuite/g++.dg/reflect/pr122634-1.C
  e32f838494e975d3bff555da160e533b  gcc/testsuite/g++.dg/reflect/pr122634-2.C
  bcea9ee60707a95dc9fe1a749981578a  gcc/testsuite/g++.dg/reflect/pr123404.C
*************** b54591a1a4cb544aba9831eba6b8174b  gcc/te
*** 37430,37439 ****
  ae74f7e0fcb5cd481ffc4f5cdabaaea7  gcc/testsuite/g++.dg/reflect/splice1.C
  c80b1bac424d9304fac93754834f224e  gcc/testsuite/g++.dg/reflect/splice2.C
  e0d01c0d72438804b2438e81debbc181  gcc/testsuite/g++.dg/reflect/splice3.C
! 16ffa77fee1d5e95704a23459a4b8deb  gcc/testsuite/g++.dg/reflect/splice4.C
  4801bd931beed660ccbf513998eaf76d  gcc/testsuite/g++.dg/reflect/splice5.C
  0badbfd09ec045739bf918587cc70dcf  gcc/testsuite/g++.dg/reflect/splice6.C
  6738eaccb426d5d58c46b54bbd7b4bfb  gcc/testsuite/g++.dg/reflect/splice7.C
  d83516569f96b60f16ca10d6af0c3fdd  gcc/testsuite/g++.dg/reflect/splicing-base1.C
  5b08c4bd5ec55584fe063a1ede09bf93  gcc/testsuite/g++.dg/reflect/splicing-base2.C
  161c6b2b6c32e9474a22d401880f7e25  gcc/testsuite/g++.dg/reflect/splicing-base3.C
--- 37460,37471 ----
  ae74f7e0fcb5cd481ffc4f5cdabaaea7  gcc/testsuite/g++.dg/reflect/splice1.C
  c80b1bac424d9304fac93754834f224e  gcc/testsuite/g++.dg/reflect/splice2.C
  e0d01c0d72438804b2438e81debbc181  gcc/testsuite/g++.dg/reflect/splice3.C
! c900182698e22d48583b4bbd611fe1fb  gcc/testsuite/g++.dg/reflect/splice4.C
  4801bd931beed660ccbf513998eaf76d  gcc/testsuite/g++.dg/reflect/splice5.C
  0badbfd09ec045739bf918587cc70dcf  gcc/testsuite/g++.dg/reflect/splice6.C
  6738eaccb426d5d58c46b54bbd7b4bfb  gcc/testsuite/g++.dg/reflect/splice7.C
+ 52791f318015d99618ee0d3ccfe2de5f  gcc/testsuite/g++.dg/reflect/splice8.C
+ 6ae78eb52f6a9a466d32687acdb99f98  gcc/testsuite/g++.dg/reflect/splice9.C
  d83516569f96b60f16ca10d6af0c3fdd  gcc/testsuite/g++.dg/reflect/splicing-base1.C
  5b08c4bd5ec55584fe063a1ede09bf93  gcc/testsuite/g++.dg/reflect/splicing-base2.C
  161c6b2b6c32e9474a22d401880f7e25  gcc/testsuite/g++.dg/reflect/splicing-base3.C
*************** d8a3c8c16d619e634a0ac785558d78a3  gcc/te
*** 37466,37472 ****
  0d9163acdbee795ad2d759efb9b92ee4  gcc/testsuite/g++.dg/reflect/type8.C
  b3994c20634b7ad733f312406081a255  gcc/testsuite/g++.dg/reflect/type9.C
  a97f51af196e9b66ef9d840989598a75  gcc/testsuite/g++.dg/reflect/type_of1.C
! 151fee0c76d1a7d55ba7f767814c87bd  gcc/testsuite/g++.dg/reflect/type_of2.C
  923b99a2592b5b36ddaef3f2fa7327dd  gcc/testsuite/g++.dg/reflect/type_rels1.C
  9180e7348d8521febdaba8e0dee848e6  gcc/testsuite/g++.dg/reflect/type_trait1.C
  a66e1dc9964c7702e9ecdb5be8553fb5  gcc/testsuite/g++.dg/reflect/type_trait10.C
--- 37498,37505 ----
  0d9163acdbee795ad2d759efb9b92ee4  gcc/testsuite/g++.dg/reflect/type8.C
  b3994c20634b7ad733f312406081a255  gcc/testsuite/g++.dg/reflect/type9.C
  a97f51af196e9b66ef9d840989598a75  gcc/testsuite/g++.dg/reflect/type_of1.C
! 2cbbc76b7de463f6b1d9d308ec90a956  gcc/testsuite/g++.dg/reflect/type_of2.C
! 04ceff367fd1cae985265e6d71d444db  gcc/testsuite/g++.dg/reflect/type_of3.C
  923b99a2592b5b36ddaef3f2fa7327dd  gcc/testsuite/g++.dg/reflect/type_rels1.C
  9180e7348d8521febdaba8e0dee848e6  gcc/testsuite/g++.dg/reflect/type_trait1.C
  a66e1dc9964c7702e9ecdb5be8553fb5  gcc/testsuite/g++.dg/reflect/type_trait10.C
*************** a7a00125ef903c9e5ba25788e8c60eab  gcc/te
*** 39485,39491 ****
  ca9be1f2aa5374ea9f72ea31bc874ec1  gcc/testsuite/g++.dg/torture/pr123040.C
  2fa3f60c4a0ae3a4528024698d6d2c3c  gcc/testsuite/g++.dg/torture/pr123596.C
  fd8e483532e07909315ca8711ef4503b  gcc/testsuite/g++.dg/torture/pr123603.C
! ca7ea9ef86090651fbec9289f32896ab  gcc/testsuite/g++.dg/torture/pr123729.C
  6f13a12612ea67402e5ee7928ab2f956  gcc/testsuite/g++.dg/torture/pr123820-1.C
  161154ed9f6193a2a7da119e068c3f3f  gcc/testsuite/g++.dg/torture/pr27218.C
  a84e9fff95df4801f8e582fbc33303b8  gcc/testsuite/g++.dg/torture/pr30252.C
--- 39518,39524 ----
  ca9be1f2aa5374ea9f72ea31bc874ec1  gcc/testsuite/g++.dg/torture/pr123040.C
  2fa3f60c4a0ae3a4528024698d6d2c3c  gcc/testsuite/g++.dg/torture/pr123596.C
  fd8e483532e07909315ca8711ef4503b  gcc/testsuite/g++.dg/torture/pr123603.C
! 045de4cec99c01bff5389660b8937e19  gcc/testsuite/g++.dg/torture/pr123729.C
  6f13a12612ea67402e5ee7928ab2f956  gcc/testsuite/g++.dg/torture/pr123820-1.C
  161154ed9f6193a2a7da119e068c3f3f  gcc/testsuite/g++.dg/torture/pr27218.C
  a84e9fff95df4801f8e582fbc33303b8  gcc/testsuite/g++.dg/torture/pr30252.C
*************** eeef6240808ffddb8665506b1b3089d3  gcc/te
*** 44823,44828 ****
--- 44856,44862 ----
  74ed4871401ccfa96602343217748d58  gcc/testsuite/g++.target/aarch64/acle/ls64_lto.C
  367010127e0524d4acb1ca0077e6698d  gcc/testsuite/g++.target/aarch64/advsimd-intrinsics/advsimd-intrinsics.exp
  992600153061bcf9c4f34a765c2c8f7e  gcc/testsuite/g++.target/aarch64/advsimd-intrinsics/pr98852.C
+ 47365b148e98b34169cc06e2310a4853  gcc/testsuite/g++.target/aarch64/atomic_store_with_stshh.C
  323c7e5c5fbc1e627c7630bec9c0ce5c  gcc/testsuite/g++.target/aarch64/bfloat_cpp_typecheck.C
  00828ba2141dc2185601894f83428c75  gcc/testsuite/g++.target/aarch64/bitfield-abi-warning-align16-O2-extra.C
  cbb30a4d3c73f183db77e6da8a13e3a9  gcc/testsuite/g++.target/aarch64/bitfield-abi-warning-align16-O2.C
*************** f5a1d06c17cacf90f627c83c8b800a78  gcc/te
*** 45335,45340 ****
--- 45369,45375 ----
  ffbb5e0bd5668625c6d5cef769228118  gcc/testsuite/g++.target/i386/pr122446-amxtile.C
  59940f4c4aa7fabb09c136a75c51dbfc  gcc/testsuite/g++.target/i386/pr122906-1.C
  fe98d8bd643079ebf7d12496d3189d03  gcc/testsuite/g++.target/i386/pr123779.C
+ 359da1e47be4e887387ecc78a9efb8cc  gcc/testsuite/g++.target/i386/pr124002.C
  55fb67abf6517f92b1a0240d2c06b5c5  gcc/testsuite/g++.target/i386/pr35513-1.C
  14dde546e4eefec7aa6d1ac41261cb16  gcc/testsuite/g++.target/i386/pr35513-2.C
  1c706f97b6d93c0124dc4a203c98f6d2  gcc/testsuite/g++.target/i386/pr57362.C
*************** eda2af339f8dd266a02b2d61a5444a03  gcc/te
*** 48941,48946 ****
--- 48976,48982 ----
  529fc2a1e92dc790d3766cd8554fc89c  gcc/testsuite/gcc.c-torture/execute/pr122943.c
  55bc090de1c97a85eaf8103e85c7cb36  gcc/testsuite/gcc.c-torture/execute/pr123753.c
  cb4c82184137c0933c1bae60a7df15bc  gcc/testsuite/gcc.c-torture/execute/pr123864.c
+ 95b7f2d687a5a5e2df1e09fad845a195  gcc/testsuite/gcc.c-torture/execute/pr123978.c
  80c02c70a0b6b91b06942e395c34960f  gcc/testsuite/gcc.c-torture/execute/pr15262-1.c
  987c511633ad57d9f08d352eb9512819  gcc/testsuite/gcc.c-torture/execute/pr15262-2.c
  f7f514cfbd791b0c828e0710493b0910  gcc/testsuite/gcc.c-torture/execute/pr15262.c
*************** cdf915de6aa445e00b8a320d8b7b09dc  gcc/te
*** 50636,50642 ****
  d21405ff7bef57360e2a0ce49f7b6578  gcc/testsuite/gcc.dg/analyzer/conditionals-3.c
  1c0a20304d7da2a80255211819446599  gcc/testsuite/gcc.dg/analyzer/conditionals-notrans.c
  8cfdc88c0b5a96aa0b303a5409085dfc  gcc/testsuite/gcc.dg/analyzer/conditionals-trans.c
! 02e8435d1a63fcd0c0bb3a83f8aa5f5d  gcc/testsuite/gcc.dg/analyzer/data-model-1.c
  fbf171c2475c36b54306b4fa689eee97  gcc/testsuite/gcc.dg/analyzer/data-model-10.c
  01dd89f886f8267655367177e67d8a7f  gcc/testsuite/gcc.dg/analyzer/data-model-13.c
  337c9beb072c81d3286e3a687c8e0abf  gcc/testsuite/gcc.dg/analyzer/data-model-15.c
--- 50672,50678 ----
  d21405ff7bef57360e2a0ce49f7b6578  gcc/testsuite/gcc.dg/analyzer/conditionals-3.c
  1c0a20304d7da2a80255211819446599  gcc/testsuite/gcc.dg/analyzer/conditionals-notrans.c
  8cfdc88c0b5a96aa0b303a5409085dfc  gcc/testsuite/gcc.dg/analyzer/conditionals-trans.c
! a22df4e24cdaae6bb5e5e29c94ed2ad2  gcc/testsuite/gcc.dg/analyzer/data-model-1.c
  fbf171c2475c36b54306b4fa689eee97  gcc/testsuite/gcc.dg/analyzer/data-model-10.c
  01dd89f886f8267655367177e67d8a7f  gcc/testsuite/gcc.dg/analyzer/data-model-13.c
  337c9beb072c81d3286e3a687c8e0abf  gcc/testsuite/gcc.dg/analyzer/data-model-15.c
*************** acc662379756e41ce6873fb8ee91f0b1  gcc/te
*** 50728,50734 ****
  213c59cf6fda65fb41294c9ac6b79be6  gcc/testsuite/gcc.dg/analyzer/named-constants-via-macros.c
  2120bf0a3275d6e161ffd6b3b7cf271e  gcc/testsuite/gcc.dg/analyzer/null-deref-pr102671-1.c
  9cd6217b9db63b38bbf530921833bcee  gcc/testsuite/gcc.dg/analyzer/null-deref-pr102671-2.c
! b49e62432626c0897551e05e4bc5b647  gcc/testsuite/gcc.dg/analyzer/null-deref-pr105755.c
  5c1afdb0e8d48de62c20901771c1c269  gcc/testsuite/gcc.dg/analyzer/null-terminated-strings-1.c
  aaddc4b9a407ce80be75f1c757af9df4  gcc/testsuite/gcc.dg/analyzer/operations.c
  3b27232f5cf255ca8253bb7b23b7a3c0  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-4.c
--- 50764,50770 ----
  213c59cf6fda65fb41294c9ac6b79be6  gcc/testsuite/gcc.dg/analyzer/named-constants-via-macros.c
  2120bf0a3275d6e161ffd6b3b7cf271e  gcc/testsuite/gcc.dg/analyzer/null-deref-pr102671-1.c
  9cd6217b9db63b38bbf530921833bcee  gcc/testsuite/gcc.dg/analyzer/null-deref-pr102671-2.c
! 09490f42f4a9472c51c240f8b680c186  gcc/testsuite/gcc.dg/analyzer/null-deref-pr105755.c
  5c1afdb0e8d48de62c20901771c1c269  gcc/testsuite/gcc.dg/analyzer/null-terminated-strings-1.c
  aaddc4b9a407ce80be75f1c757af9df4  gcc/testsuite/gcc.dg/analyzer/operations.c
  3b27232f5cf255ca8253bb7b23b7a3c0  gcc/testsuite/gcc.dg/analyzer/out-of-bounds-4.c
*************** d31cd9527a48524e11069281c92681ad  gcc/te
*** 50921,50926 ****
--- 50957,50963 ----
  f51fae0e8d61e76c5a00d9a7a8e4a3f3  gcc/testsuite/gcc.dg/analyzer/torture/conftest-1.c
  e85d83557fa692d7016e4622b85ca975  gcc/testsuite/gcc.dg/analyzer/torture/empty-struct-1.c
  2542099bfd1e3067fad9b5ea97b355cb  gcc/testsuite/gcc.dg/analyzer/torture/fold-ptr-arith-pr105784.c
+ bc41fb75b5978c15bb8832df53632d87  gcc/testsuite/gcc.dg/analyzer/torture/ice-pr117491.c
  2a944db68262f05280b26c9c165685c9  gcc/testsuite/gcc.dg/analyzer/torture/intptr_t.c
  fbd2e05a9e1bee211c5fd03bb02f863a  gcc/testsuite/gcc.dg/analyzer/torture/leak-pr102308-1.c
  8f5b6da995738b027bfc202c0abfeb53  gcc/testsuite/gcc.dg/analyzer/torture/leak-pr102308-2.c
*************** d217543f954eb3f31e246355824f653a  gcc/te
*** 51557,51562 ****
--- 51594,51600 ----
  11e6d8eaf7b16f3f8aeaf1c2e626996f  gcc/testsuite/gcc.dg/bitint-124.c
  c446cf331d60d19eea3950d7f444f8b3  gcc/testsuite/gcc.dg/bitint-125.c
  240ade406c4daf5c641e5c4f0bdd5ef5  gcc/testsuite/gcc.dg/bitint-126.c
+ 3fa6e340272f61c5b425b6a54732c94f  gcc/testsuite/gcc.dg/bitint-127.c
  aa6e262f1d508ec048e76ac4af6675a4  gcc/testsuite/gcc.dg/bitint-13.c
  e6db29256563268a3c327706e78c79a4  gcc/testsuite/gcc.dg/bitint-14.c
  c748706240385773f27caba61cbbcbd8  gcc/testsuite/gcc.dg/bitint-15.c
*************** ba60814aadf21741cc3e6781a96f6801  gcc/te
*** 54320,54325 ****
--- 54358,54366 ----
  36d60a18cc2d81c2f3553d9d74463b9e  gcc/testsuite/gcc.dg/enum2.c
  2fced693aa6aaf7f0a1c26e95d86359f  gcc/testsuite/gcc.dg/enum3.c
  01594dd7e5d51839556337bd883f71dc  gcc/testsuite/gcc.dg/errno-1.c
+ e5b6d040e9bb909c04161316f8bacb50  gcc/testsuite/gcc.dg/errno-2.c
+ c56151bd4d3567927d789b07e22c4cb3  gcc/testsuite/gcc.dg/errno-3.c
+ 3204d8ff85b11b9a94ae2cead0f817ba  gcc/testsuite/gcc.dg/errno-4.c
  0584a868861c4b01ea6696ebc6613d03  gcc/testsuite/gcc.dg/ext-elim-1.c
  bbb87d2a73c29d36f6bb6b3dec4a2b02  gcc/testsuite/gcc.dg/extra-semi-1.c
  5ecbeae6593123b1ac9b91979c9faf1b  gcc/testsuite/gcc.dg/extra-semi-2.c
*************** d98596956367fc29b9341da6c0f03f55  gcc/te
*** 57487,57492 ****
--- 57528,57535 ----
  2eebdeb5aef44432de1498de14cbf4e6  gcc/testsuite/gcc.dg/pr101266.c
  a7ea71615239b0d5a09bdb20e483a02f  gcc/testsuite/gcc.dg/pr101285-1.c
  cbe7e390158f186ae3fd0f808bea7563  gcc/testsuite/gcc.dg/pr101294.c
+ 280ab2738fa9f4a59440b24de22faee0  gcc/testsuite/gcc.dg/pr101312-1.c
+ 1e4a8d2edc5aa23b12908e90b5487800  gcc/testsuite/gcc.dg/pr101312-2.c
  2eebc584a5365593600a3822a1b3e97d  gcc/testsuite/gcc.dg/pr101364-1.c
  70303171ed7f5b2cba05e6b98daad2ab  gcc/testsuite/gcc.dg/pr101384.c
  566100ed369cb8ddbb77ca59ac7f4416  gcc/testsuite/gcc.dg/pr101403.c
*************** d2c0f87695635c09b6a893cd2d5c5478  gcc/te
*** 58063,58068 ****
--- 58106,58112 ----
  c0c525eecd2cd89c13015bbfc26de2b7  gcc/testsuite/gcc.dg/pr120929.c
  c57884e34f257e33d206372fc675b716  gcc/testsuite/gcc.dg/pr121035.c
  6382d29706200ffee3fc8c0bb2ec393a  gcc/testsuite/gcc.dg/pr121081.c
+ f67888cb77a175aca5793c68c576187f  gcc/testsuite/gcc.dg/pr121104.c
  d602fec0c129037ce49acd7cccfd6266  gcc/testsuite/gcc.dg/pr121202.c
  942ef1841a793e5e296b868a6cfed912  gcc/testsuite/gcc.dg/pr121216.c
  f3420ae2cec7581a0ad483e1abb174f2  gcc/testsuite/gcc.dg/pr121217.c
*************** afbbdc9160c7bbb463b8a9a0ccecc1ec  gcc/te
*** 58091,58100 ****
  acdecc3711a0a56635d3de4e2064206c  gcc/testsuite/gcc.dg/pr122947.c
  9f4094b7196b5eab8c79608995a96efc  gcc/testsuite/gcc.dg/pr122991.c
  9fcb8913b9a18055b2a811284d59780e  gcc/testsuite/gcc.dg/pr123018.c
! c1faded54c3f4dcf6ef6214623eb5e7a  gcc/testsuite/gcc.dg/pr123109.c
  4bb95b7b27d5cf33c1f6f21056e27c11  gcc/testsuite/gcc.dg/pr123110-1.c
  5e8f304c4d6cec9c5b0a6f0ed430bd96  gcc/testsuite/gcc.dg/pr123114.c
  a7854fc3636527bc932319df4a19bc42  gcc/testsuite/gcc.dg/pr123205.c
  9458a512908504ff59f92077cde8c882  gcc/testsuite/gcc.dg/pr123295-1.c
  5fbcf85870a8e9883872a384e3cf5e12  gcc/testsuite/gcc.dg/pr123300.c
  785eb6e7b2c08f02c9e8a5f33f827f1a  gcc/testsuite/gcc.dg/pr123309.c
--- 58135,58146 ----
  acdecc3711a0a56635d3de4e2064206c  gcc/testsuite/gcc.dg/pr122947.c
  9f4094b7196b5eab8c79608995a96efc  gcc/testsuite/gcc.dg/pr122991.c
  9fcb8913b9a18055b2a811284d59780e  gcc/testsuite/gcc.dg/pr123018.c
! 8d183af1add0c55a02ce4b5c0c03915c  gcc/testsuite/gcc.dg/pr123109-scalar.c
! fd6c60c5d614fb23d302992511d2b983  gcc/testsuite/gcc.dg/pr123109-vector.c
  4bb95b7b27d5cf33c1f6f21056e27c11  gcc/testsuite/gcc.dg/pr123110-1.c
  5e8f304c4d6cec9c5b0a6f0ed430bd96  gcc/testsuite/gcc.dg/pr123114.c
  a7854fc3636527bc932319df4a19bc42  gcc/testsuite/gcc.dg/pr123205.c
+ 3190514d319cec9f570a97df97be613b  gcc/testsuite/gcc.dg/pr123294-1.c
  9458a512908504ff59f92077cde8c882  gcc/testsuite/gcc.dg/pr123295-1.c
  5fbcf85870a8e9883872a384e3cf5e12  gcc/testsuite/gcc.dg/pr123300.c
  785eb6e7b2c08f02c9e8a5f33f827f1a  gcc/testsuite/gcc.dg/pr123309.c
*************** e43dcd43531182c1839bc3842972ef9a  gcc/te
*** 58109,58115 ****
--- 58155,58163 ----
  2e58c4d553f61913c629f0f4e16cef6c  gcc/testsuite/gcc.dg/pr123537.c
  40c720d493fdf466beac8d906dcdb821  gcc/testsuite/gcc.dg/pr123544.c
  b64bff50aa325d3cdf648a6b7fec2e46  gcc/testsuite/gcc.dg/pr123656.c
+ 1d51dc92bcea9d1f45d53070aed9c180  gcc/testsuite/gcc.dg/pr123672.c
  01c4bfafe1ef8627df22f4a8e2581122  gcc/testsuite/gcc.dg/pr123803-1.c
+ 5cd501fa005281d9c622810307478c79  gcc/testsuite/gcc.dg/pr123882.c
  bc5ddfbbc46f4e0cce1629d1b58d3090  gcc/testsuite/gcc.dg/pr12603.c
  72a2fca76cb69617ae36bab93c7ec0d7  gcc/testsuite/gcc.dg/pr12625-1.c
  6f0ef61e5a12db5f11da839b2988c5e1  gcc/testsuite/gcc.dg/pr13519-1.c
*************** ca7c319ae573ff4f2c1fdde105b552b8  gcc/te
*** 59124,59130 ****
  fd5b5565eb3ceb4dc405f80234ea32f5  gcc/testsuite/gcc.dg/pr60866.c
  3ec83a08d3278e16deac219a0e98716f  gcc/testsuite/gcc.dg/pr60915.c
  d2c91f0601aece029dd3340da8167e6d  gcc/testsuite/gcc.dg/pr61045.c
! 84adfd4024a86c81cd70c690727d8f78  gcc/testsuite/gcc.dg/pr61053.c
  fd6d55cfa9bf35d351e1a730e13d5043  gcc/testsuite/gcc.dg/pr61058.c
  e2d94f81ab73335d50800841dbd4b12c  gcc/testsuite/gcc.dg/pr61060.c
  5a9d386362e104a85e47611c5e368830  gcc/testsuite/gcc.dg/pr61077.c
--- 59172,59178 ----
  fd5b5565eb3ceb4dc405f80234ea32f5  gcc/testsuite/gcc.dg/pr60866.c
  3ec83a08d3278e16deac219a0e98716f  gcc/testsuite/gcc.dg/pr60915.c
  d2c91f0601aece029dd3340da8167e6d  gcc/testsuite/gcc.dg/pr61045.c
! 7e8260bbaa56f4b68aa8639ccf340ad4  gcc/testsuite/gcc.dg/pr61053.c
  fd6d55cfa9bf35d351e1a730e13d5043  gcc/testsuite/gcc.dg/pr61058.c
  e2d94f81ab73335d50800841dbd4b12c  gcc/testsuite/gcc.dg/pr61060.c
  5a9d386362e104a85e47611c5e368830  gcc/testsuite/gcc.dg/pr61077.c
*************** bcd4b5d9c82e28d29459255dca15732c  gcc/te
*** 59879,59885 ****
  afa570e1edc03a94c45eb741b09cab0a  gcc/testsuite/gcc.dg/pr90756.c
  a5cf54d159902a526ee7923257cf4b92  gcc/testsuite/gcc.dg/pr90760.c
  5886ac77855adf1bbbf2e48e7c67e8a3  gcc/testsuite/gcc.dg/pr90838-2.c
! beae814e6dc914f051a52e4cc97fc212  gcc/testsuite/gcc.dg/pr90838.c
  e25de604fa47d4cbf21b04eb8d96eedc  gcc/testsuite/gcc.dg/pr90866-2.c
  1e31e24165ead8e639abcd53299950b0  gcc/testsuite/gcc.dg/pr90866.c
  e2ae67eb39b2578af8765a01c6e6dd08  gcc/testsuite/gcc.dg/pr90892.c
--- 59927,59933 ----
  afa570e1edc03a94c45eb741b09cab0a  gcc/testsuite/gcc.dg/pr90756.c
  a5cf54d159902a526ee7923257cf4b92  gcc/testsuite/gcc.dg/pr90760.c
  5886ac77855adf1bbbf2e48e7c67e8a3  gcc/testsuite/gcc.dg/pr90838-2.c
! 8dc65b4ac368efb9857253224f40b65a  gcc/testsuite/gcc.dg/pr90838.c
  e25de604fa47d4cbf21b04eb8d96eedc  gcc/testsuite/gcc.dg/pr90866-2.c
  1e31e24165ead8e639abcd53299950b0  gcc/testsuite/gcc.dg/pr90866.c
  e2ae67eb39b2578af8765a01c6e6dd08  gcc/testsuite/gcc.dg/pr90892.c
*************** bb0f91c384e2b0c10f6a2b569f227ce2  gcc/te
*** 60093,60099 ****
  b31656f3d589501279f9b3957d76e7d8  gcc/testsuite/gcc.dg/pr97725.c
  2cafeb388acee553eacac0843032a2b5  gcc/testsuite/gcc.dg/pr97737.c
  cdfeca036db478839d22133998667f05  gcc/testsuite/gcc.dg/pr97741.c
! bf0c76a76ec33705f98f6dcc11e12f2f  gcc/testsuite/gcc.dg/pr97750.c
  32dbdf99e8be7a3cc9392721bd1d794d  gcc/testsuite/gcc.dg/pr97806.c
  80a600a1ee903c356493886739284c76  gcc/testsuite/gcc.dg/pr97830.c
  ebd05406fb069fea2c49c527155a3864  gcc/testsuite/gcc.dg/pr97860.c
--- 60141,60147 ----
  b31656f3d589501279f9b3957d76e7d8  gcc/testsuite/gcc.dg/pr97725.c
  2cafeb388acee553eacac0843032a2b5  gcc/testsuite/gcc.dg/pr97737.c
  cdfeca036db478839d22133998667f05  gcc/testsuite/gcc.dg/pr97741.c
! 8d11994a1a131620d37960ef3e45bdd2  gcc/testsuite/gcc.dg/pr97750.c
  32dbdf99e8be7a3cc9392721bd1d794d  gcc/testsuite/gcc.dg/pr97806.c
  80a600a1ee903c356493886739284c76  gcc/testsuite/gcc.dg/pr97830.c
  ebd05406fb069fea2c49c527155a3864  gcc/testsuite/gcc.dg/pr97860.c
*************** c06f548f435382c42c50e8e66b702266  gcc/te
*** 61894,61899 ****
--- 61942,61948 ----
  0646579839fceb4f511ae3c6f4122d62  gcc/testsuite/gcc.dg/torture/pr121478-1.c
  f42b1c4e861e4207759994e34bbd715d  gcc/testsuite/gcc.dg/torture/pr121514.c
  65afbddf71e988e03a780ba874f578fb  gcc/testsuite/gcc.dg/torture/pr121656.c
+ ce9e02c12e351b909cd41d27cbe670cc  gcc/testsuite/gcc.dg/torture/pr121661-1.c
  8c70b765139663212d50df6e388155b7  gcc/testsuite/gcc.dg/torture/pr121695-1.c
  0a7fe9f8201216f1c14d41d7e2b3175d  gcc/testsuite/gcc.dg/torture/pr121756.c
  457e3a0b9245c7c5a7794754dce78fe5  gcc/testsuite/gcc.dg/torture/pr121829.c
*************** e03287adad00d313766ecc2e039fb9b5  gcc/te
*** 61933,61938 ****
--- 61982,61988 ----
  11091949fe6774584df4fe838c80617e  gcc/testsuite/gcc.dg/torture/pr123310.c
  696ea16080bb129f974e534dd41b1ac9  gcc/testsuite/gcc.dg/torture/pr123382-1.c
  46a4a57171daf43cca2c2be68546f06a  gcc/testsuite/gcc.dg/torture/pr123382-2.c
+ 0cd9b5f403d655ca4804a15fc23543fd  gcc/testsuite/gcc.dg/torture/pr123416.c
  31008858fedcd65ab763c86127409b2f  gcc/testsuite/gcc.dg/torture/pr123530.c
  7d1a217129f5166f7cde3b004649bea9  gcc/testsuite/gcc.dg/torture/pr123636.c
  ea90221ab80b5c3561ffc7665d2a343a  gcc/testsuite/gcc.dg/torture/pr123645-1.c
*************** d583ad8ec3a0208319ac7ca2a2777572  gcc/te
*** 62161,62166 ****
--- 62211,62218 ----
  9474957971dc73b3f75c66585f78e5ff  gcc/testsuite/gcc.dg/torture/pr49079.c
  d2e8e8ec11a434bb591012dff5dfb3d4  gcc/testsuite/gcc.dg/torture/pr49169.c
  c76a42a4317e797c45b161adab53530a  gcc/testsuite/gcc.dg/torture/pr49217.c
+ c07c91bf8b8b1cd1d6d5f578ceeb15d5  gcc/testsuite/gcc.dg/torture/pr49330-1.c
+ 4be431d88f52bc75e52dc90970ab0a99  gcc/testsuite/gcc.dg/torture/pr49330-2.c
  fe91d9c51239c8d4bb750fa869683aef  gcc/testsuite/gcc.dg/torture/pr49518.c
  31f4b190fadae5b194a73d28988a0c56  gcc/testsuite/gcc.dg/torture/pr49603.c
  3f33f6456a27739e6e648a1b71ea26ff  gcc/testsuite/gcc.dg/torture/pr49651.c
*************** efc5db1b97ea06d470c57048d8966ea1  gcc/te
*** 68191,68196 ****
--- 68243,68249 ----
  1e6309f79486c269225382b2ee7a0a41  gcc/testsuite/gcc.dg/vect/vect-pr123755-2.c
  8d72fe60d77b174c40a9709fbc10c86b  gcc/testsuite/gcc.dg/vect/vect-pr123755.c
  71a5a3f0c2e34ed3e033a36a47f5cf20  gcc/testsuite/gcc.dg/vect/vect-pr123756.c
+ 86a15a6fc01f17ec534cc4e8962c430f  gcc/testsuite/gcc.dg/vect/vect-pr123983.c
  464c872c62ad2fc5d241ed918e0cf5de  gcc/testsuite/gcc.dg/vect/vect-pr61247.c
  4d57df9e3b3522c9f1a6707c05f1da45  gcc/testsuite/gcc.dg/vect/vect-pr69848.c
  3a3a316ff2f2496494ecb0bd77d61aad  gcc/testsuite/gcc.dg/vect/vect-pre-interact.c
*************** b2d6f261b85fc4c40364afc833ecb5e2  gcc/te
*** 69131,69136 ****
--- 69184,69192 ----
  f77736bbbcf7df1596fc2fe18281d585  gcc/testsuite/gcc.target/aarch64/acle/memtag_guard-3.c
  e07b7eca3400e8f64d689f1c10efe2bd  gcc/testsuite/gcc.target/aarch64/acle/memtag_guard-4.c
  1d797526b5b45f0f4e3526be82bb2af3  gcc/testsuite/gcc.target/aarch64/acle/pauth_def.c
+ cb2535b12d22ed2d65b724ad88f45bc4  gcc/testsuite/gcc.target/aarch64/acle/pld_pli.c
+ 7b0a676ffe20810daa88e8d54e62369b  gcc/testsuite/gcc.target/aarch64/acle/pld_pli_illegal.c
+ 0a69bf9729408f6be58df7afb5e98546  gcc/testsuite/gcc.target/aarch64/acle/pldir.c
  4f75ca7b0d38f756a18d8f9574e56fd4  gcc/testsuite/gcc.target/aarch64/acle/pmull64.c
  7891d663249f27cbe3e8c65142207451  gcc/testsuite/gcc.target/aarch64/acle/pr108140.c
  e15fb874d0ae7c74f74b2eb5bd8f8bf3  gcc/testsuite/gcc.target/aarch64/acle/pr110100.c
*************** e7b8ba1ea741c7a9f79ac8356c698d78  gcc/te
*** 69810,69816 ****
  93824c67e68bdb907e2208d5e59a5324  gcc/testsuite/gcc.target/aarch64/atomic-store.c
  54ef40f0c37a67de10bb882fb6956099  gcc/testsuite/gcc.target/aarch64/atomic_cmp_exchange_zero_reg_1.c
  51e5228d8a5c0d375800a8ddb69247ca  gcc/testsuite/gcc.target/aarch64/atomic_cmp_exchange_zero_strong_1.c
! d3abf2069e4fd7220aba6c026f042600  gcc/testsuite/gcc.target/aarch64/atomic_store_with_stshh.c
  07437ce12511a14a25ac0b125b050902  gcc/testsuite/gcc.target/aarch64/attr-aligned.c
  ce18e5026a485a8f7703a20b7d6f26ed  gcc/testsuite/gcc.target/aarch64/auto-init-1.c
  f5b1276588c9d9ba2f92070dd86994a1  gcc/testsuite/gcc.target/aarch64/auto-init-2.c
--- 69866,69872 ----
  93824c67e68bdb907e2208d5e59a5324  gcc/testsuite/gcc.target/aarch64/atomic-store.c
  54ef40f0c37a67de10bb882fb6956099  gcc/testsuite/gcc.target/aarch64/atomic_cmp_exchange_zero_reg_1.c
  51e5228d8a5c0d375800a8ddb69247ca  gcc/testsuite/gcc.target/aarch64/atomic_cmp_exchange_zero_strong_1.c
! d7319fbdbe4b031be6113a2932d0fc2b  gcc/testsuite/gcc.target/aarch64/atomic_store_with_stshh.c
  07437ce12511a14a25ac0b125b050902  gcc/testsuite/gcc.target/aarch64/attr-aligned.c
  ce18e5026a485a8f7703a20b7d6f26ed  gcc/testsuite/gcc.target/aarch64/auto-init-1.c
  f5b1276588c9d9ba2f92070dd86994a1  gcc/testsuite/gcc.target/aarch64/auto-init-2.c
*************** ce0a270d0ab654727a943988b0a3ce49  gcc/te
*** 69904,69911 ****
  82ebc34e179e256a16633eeed8f5931d  gcc/testsuite/gcc.target/aarch64/builtin-bswap-1.c
  33f370cd2a619d45e68ba5747504d94e  gcc/testsuite/gcc.target/aarch64/builtin-bswap-2.c
  ac800c0500abf9ea311dffda98f211fe  gcc/testsuite/gcc.target/aarch64/builtin_apply-1.c
- cb2535b12d22ed2d65b724ad88f45bc4  gcc/testsuite/gcc.target/aarch64/builtin_pld_pli.c
- ebfe61998b217972759700f67918b7b9  gcc/testsuite/gcc.target/aarch64/builtin_pld_pli_illegal.c
  6927a6e9009b152efa44797dcae0c93a  gcc/testsuite/gcc.target/aarch64/builtin_sadd_128.c
  65465f2ba4ff1bba0055376633cc793f  gcc/testsuite/gcc.target/aarch64/builtin_saddl.c
  ca79e3e8e48412cc54e6a8e998f1e0c7  gcc/testsuite/gcc.target/aarch64/builtin_saddll.c
--- 69960,69965 ----
*************** b0a892934f70ddbece003356d1462148  gcc/te
*** 70625,70631 ****
  9e6d61a7e1d89fd31e6be729b592cce9  gcc/testsuite/gcc.target/aarch64/pic-constantpool1.c
  c634a3e3729a1cf014159113aaaa5923  gcc/testsuite/gcc.target/aarch64/pic-small.c
  51e114e92becf6e5484713d42b008f4d  gcc/testsuite/gcc.target/aarch64/pic-symrefplus.c
- 0a69bf9729408f6be58df7afb5e98546  gcc/testsuite/gcc.target/aarch64/pldir.c
  73044733387a8f754915be808c060624  gcc/testsuite/gcc.target/aarch64/pmull_1.c
  4e276a29652236d4788990c081f63787  gcc/testsuite/gcc.target/aarch64/popcnt-eq-1.c
  4d8026dd553c44c1a48ce80a71531b86  gcc/testsuite/gcc.target/aarch64/popcnt-le-1.c
--- 70679,70684 ----
*************** cf174bb4218a2ff6650d0ab674702881  gcc/te
*** 70751,70756 ****
--- 70804,70810 ----
  83ac293146b05a62ec4a19e52751ebd1  gcc/testsuite/gcc.target/aarch64/pr121253.c
  a67b71d65cb6bd7b6c05a378464741e6  gcc/testsuite/gcc.target/aarch64/pr121290_1.c
  892174de9af2227aa0fffc09fa6c5597  gcc/testsuite/gcc.target/aarch64/pr121290_2.c
+ 1f51c0f7dbbc3cc0b583f9d52a21505d  gcc/testsuite/gcc.target/aarch64/pr121290_3.c
  64cb9b1e14577523fd3ff2306b1eaa44  gcc/testsuite/gcc.target/aarch64/pr121300.c
  c34d772e393da040a9ab73442d231d49  gcc/testsuite/gcc.target/aarch64/pr121853_1.c
  bf526d120c538bd714985ac66c46f7bb  gcc/testsuite/gcc.target/aarch64/pr121853_2.c
*************** ec79fa3be7327c757d4abcecfe6afb40  gcc/te
*** 70778,70783 ****
--- 70832,70839 ----
  3c99f5bd7556f75f513af4ccabe65c85  gcc/testsuite/gcc.target/aarch64/pr123017_7.c
  b15614b849a2403ba76800ef1356aab5  gcc/testsuite/gcc.target/aarch64/pr123026.c
  98a4eb67a4078cb117ea1c80d44fee14  gcc/testsuite/gcc.target/aarch64/pr123206.c
+ 3525a5777032197cdd1e39b2aad94c29  gcc/testsuite/gcc.target/aarch64/pr123294-1.c
+ 085f7e2087fb0cf8d5d9a44259bb616c  gcc/testsuite/gcc.target/aarch64/pr123548.c
  d5b3fbe2571cb9f95ff3b80e54a79a15  gcc/testsuite/gcc.target/aarch64/pr123791.c
  0fb432038c1a084913bbbe8d8d8b8bd8  gcc/testsuite/gcc.target/aarch64/pr123792.c
  9adb42733d9f5e2b1f2dbb364b62100d  gcc/testsuite/gcc.target/aarch64/pr37780_1.c
*************** df08a7f1b91a8c0f914aab7f291c95e7  gcc/te
*** 71049,71055 ****
  670855cbe72625722e02671619b6566b  gcc/testsuite/gcc.target/aarch64/simd/lut.c
  490999093edf0ba9bd6941da62d8c8cd  gcc/testsuite/gcc.target/aarch64/simd/mf8_data_1.c
  7a8dbe7357968ea67da61dae6606ebcd  gcc/testsuite/gcc.target/aarch64/simd/mf8_data_2.c
! 2f6c6fee34ced3b932053a03d9906520  gcc/testsuite/gcc.target/aarch64/simd/pr117048.c
  2797bd4410da16b66ebb2f474c595ee5  gcc/testsuite/gcc.target/aarch64/simd/pr117048_2.c
  67e9f00dffaa6f894241ef054cf29a1e  gcc/testsuite/gcc.target/aarch64/simd/pr121749.c
  f2791d55a2c9ed7182a54a406810cf47  gcc/testsuite/gcc.target/aarch64/simd/pr67896.c
--- 71105,71111 ----
  670855cbe72625722e02671619b6566b  gcc/testsuite/gcc.target/aarch64/simd/lut.c
  490999093edf0ba9bd6941da62d8c8cd  gcc/testsuite/gcc.target/aarch64/simd/mf8_data_1.c
  7a8dbe7357968ea67da61dae6606ebcd  gcc/testsuite/gcc.target/aarch64/simd/mf8_data_2.c
! 77bcecb95fea0e774f3b59d6735b0334  gcc/testsuite/gcc.target/aarch64/simd/pr117048.c
  2797bd4410da16b66ebb2f474c595ee5  gcc/testsuite/gcc.target/aarch64/simd/pr117048_2.c
  67e9f00dffaa6f894241ef054cf29a1e  gcc/testsuite/gcc.target/aarch64/simd/pr121749.c
  f2791d55a2c9ed7182a54a406810cf47  gcc/testsuite/gcc.target/aarch64/simd/pr67896.c
*************** fba890ec69e5613e555983284ebab389  gcc/te
*** 75726,75732 ****
  ecd052b8b25dcdd22b9bc9b4afdddf04  gcc/testsuite/gcc.target/aarch64/sve/pr121604_brk.c
  84d53e47a2bd0ee9db70c24448d92f33  gcc/testsuite/gcc.target/aarch64/sve/pr122069_1.c
  f3c32f052e49d3e8c461ebbc88a7bd49  gcc/testsuite/gcc.target/aarch64/sve/pr122069_2.c
! 549e5db6ccf6048f558955802602ec7c  gcc/testsuite/gcc.target/aarch64/sve/pr122103_1.c
  d6acea087a556597ab3449954e06312f  gcc/testsuite/gcc.target/aarch64/sve/pr122103_2.c
  82452ade67914232d12ec034c617682b  gcc/testsuite/gcc.target/aarch64/sve/pr122103_3.c
  a0596bc98ced318afc176ba91f279b2f  gcc/testsuite/gcc.target/aarch64/sve/pr122103_4.c
--- 75782,75788 ----
  ecd052b8b25dcdd22b9bc9b4afdddf04  gcc/testsuite/gcc.target/aarch64/sve/pr121604_brk.c
  84d53e47a2bd0ee9db70c24448d92f33  gcc/testsuite/gcc.target/aarch64/sve/pr122069_1.c
  f3c32f052e49d3e8c461ebbc88a7bd49  gcc/testsuite/gcc.target/aarch64/sve/pr122069_2.c
! 7bfa8eb7f05bafc051b2cd771b750e7e  gcc/testsuite/gcc.target/aarch64/sve/pr122103_1.c
  d6acea087a556597ab3449954e06312f  gcc/testsuite/gcc.target/aarch64/sve/pr122103_2.c
  82452ade67914232d12ec034c617682b  gcc/testsuite/gcc.target/aarch64/sve/pr122103_3.c
  a0596bc98ced318afc176ba91f279b2f  gcc/testsuite/gcc.target/aarch64/sve/pr122103_4.c
*************** d4ac7a84edd49408935038ba429c4a6d  gcc/te
*** 75746,75751 ****
--- 75802,75809 ----
  aab87b2d9daa75eaf07f2f4e47d63c11  gcc/testsuite/gcc.target/aarch64/sve/pr122749_9.c
  806909efa49b7a7a797b079996626314  gcc/testsuite/gcc.target/aarch64/sve/pr123697.c
  8d516514d55b6987b8c79e9e3ce2bdb1  gcc/testsuite/gcc.target/aarch64/sve/pr123767.c
+ 777fa618dc2e814b8354442c6286d350  gcc/testsuite/gcc.target/aarch64/sve/pr123897.c
+ 91a4ca000e76de583f0631d5cb19a12a  gcc/testsuite/gcc.target/aarch64/sve/pr123898.c
  7e2aaf0806edd37415079b5c2e48b66c  gcc/testsuite/gcc.target/aarch64/sve/pr81003.c
  00b752a6e175de8b1a300df08f275461  gcc/testsuite/gcc.target/aarch64/sve/pr87563.c
  c56eeba71ad463673a1bdb30e7a94863  gcc/testsuite/gcc.target/aarch64/sve/pr87815.c
*************** cf400ce94034485f8a16a1cbd287c372  gcc/te
*** 77704,77710 ****
  0585c8051a613504bc26d003f880104b  gcc/testsuite/gcc.target/aarch64/sve2/pr122069_3.c
  fd41242b07a3e957c67e6fe4c4c2bc33  gcc/testsuite/gcc.target/aarch64/sve2/pr122069_4.c
  0cf6f58c25a80144f7412d79b9d48d66  gcc/testsuite/gcc.target/aarch64/sve2/pr123053.c
! f4dd1b504179e0c5f1bcbff8fbfad589  gcc/testsuite/gcc.target/aarch64/sve2/pr123775.c
  3ddfd16fcbf89890fd9785fec8f0c081  gcc/testsuite/gcc.target/aarch64/sve2/shracc_1.c
  8cd4d6e010de57b57d5d8fb325fa79bb  gcc/testsuite/gcc.target/aarch64/sve2/unpred_mul_1.c
  826ee7c8b41bb7da016220e1f67b1306  gcc/testsuite/gcc.target/aarch64/sve2/uzpq_1.c
--- 77762,77768 ----
  0585c8051a613504bc26d003f880104b  gcc/testsuite/gcc.target/aarch64/sve2/pr122069_3.c
  fd41242b07a3e957c67e6fe4c4c2bc33  gcc/testsuite/gcc.target/aarch64/sve2/pr122069_4.c
  0cf6f58c25a80144f7412d79b9d48d66  gcc/testsuite/gcc.target/aarch64/sve2/pr123053.c
! a1e717c0cbeba75388ce3e7b3922fe64  gcc/testsuite/gcc.target/aarch64/sve2/pr123775.c
  3ddfd16fcbf89890fd9785fec8f0c081  gcc/testsuite/gcc.target/aarch64/sve2/shracc_1.c
  8cd4d6e010de57b57d5d8fb325fa79bb  gcc/testsuite/gcc.target/aarch64/sve2/unpred_mul_1.c
  826ee7c8b41bb7da016220e1f67b1306  gcc/testsuite/gcc.target/aarch64/sve2/uzpq_1.c
*************** c53a3d9bef0c2240ee08db4b18471dbd  gcc/te
*** 89279,89285 ****
  52be5e84981a88e5c246ca3d21014b7e  gcc/testsuite/gcc.target/i386/pr109173-1.c
  dc74ed1bf908a060467845b63e837101  gcc/testsuite/gcc.target/i386/pr109174-1.c
  a643678ff500c5823e0dfd6f13a78767  gcc/testsuite/gcc.target/i386/pr109276.c
! 0c97b030ebc254d658a2a94036b21e96  gcc/testsuite/gcc.target/i386/pr109362.c
  53f3c713c5195f8b1c6f3756b973b949  gcc/testsuite/gcc.target/i386/pr109458.c
  3d997ce0e13218819a2d74880f4ade56  gcc/testsuite/gcc.target/i386/pr109504.c
  ca03ac246410edffe018806fae9bc377  gcc/testsuite/gcc.target/i386/pr109520.c
--- 89337,89343 ----
  52be5e84981a88e5c246ca3d21014b7e  gcc/testsuite/gcc.target/i386/pr109173-1.c
  dc74ed1bf908a060467845b63e837101  gcc/testsuite/gcc.target/i386/pr109174-1.c
  a643678ff500c5823e0dfd6f13a78767  gcc/testsuite/gcc.target/i386/pr109276.c
! 2611b03821dc49d72f579ec50f0550c6  gcc/testsuite/gcc.target/i386/pr109362.c
  53f3c713c5195f8b1c6f3756b973b949  gcc/testsuite/gcc.target/i386/pr109458.c
  3d997ce0e13218819a2d74880f4ade56  gcc/testsuite/gcc.target/i386/pr109504.c
  ca03ac246410edffe018806fae9bc377  gcc/testsuite/gcc.target/i386/pr109520.c
*************** b0e272e5b09d7d22e6b9a829085ecef5  gcc/te
*** 89679,89684 ****
--- 89737,89743 ----
  069d9d6f52f424f321e424a7b0cd8cb0  gcc/testsuite/gcc.target/i386/pr121699.c
  e17710962215b2fb5e88ba71ef85c9a1  gcc/testsuite/gcc.target/i386/pr121725-1a.c
  f9eebd6cace65460975a88f37b9e15eb  gcc/testsuite/gcc.target/i386/pr121725-1b.c
+ 671eb6b6dd41d0afefc1347129213f3d  gcc/testsuite/gcc.target/i386/pr121726.c
  5f918da94624837422839151fb9030bf  gcc/testsuite/gcc.target/i386/pr121861-1a.c
  2f572062e15d70ca97f9876842049bc9  gcc/testsuite/gcc.target/i386/pr121861-1b.c
  0424be5958b1e4555f4bc906f8604a14  gcc/testsuite/gcc.target/i386/pr121934-1a.c
*************** fd0c95fcad577a49c3553f21604c3b61  gcc/te
*** 89730,89735 ****
--- 89789,89795 ----
  0c572aee98b871b5098fcc5a78b5d069  gcc/testsuite/gcc.target/i386/pr123523.c
  22075af1d8889b20a319ee5c1ddae745  gcc/testsuite/gcc.target/i386/pr123583.c
  9949ec20bd5dbd25bf3dad6832f9205f  gcc/testsuite/gcc.target/i386/pr123585.c
+ 3b4a91b334d1b19a6101a3fc7575990f  gcc/testsuite/gcc.target/i386/pr123958.c
  8951a1fa31f2d45ef9eacfff6a733f77  gcc/testsuite/gcc.target/i386/pr13366.c
  9a752a4b3b77930d91d3c8b0c8897b90  gcc/testsuite/gcc.target/i386/pr13685.c
  31ead0ee84b382ba03e3561931bc6e40  gcc/testsuite/gcc.target/i386/pr14289-1.c
*************** d411131829e4182bcd0f01c491669453  gcc/te
*** 90361,90367 ****
  50ea06065d2e674f38033361f71fea26  gcc/testsuite/gcc.target/i386/pr63534.c
  30aaae44143ac2a44f16e0db0cec0af6  gcc/testsuite/gcc.target/i386/pr63538.c
  561aeb698494e71bb2a1de5b9848f5f5  gcc/testsuite/gcc.target/i386/pr63542-1.c
! c2179fbbe68a40ce1e3486b98db6a47f  gcc/testsuite/gcc.target/i386/pr63542-2.c
  9c17e1a161d05dcffaa896376c5ecc02  gcc/testsuite/gcc.target/i386/pr63563.c
  2fcd7ee701194c088717496858a15fbc  gcc/testsuite/gcc.target/i386/pr63600.c
  2627f49323472299eefe598c4ad807db  gcc/testsuite/gcc.target/i386/pr63618.c
--- 90421,90427 ----
  50ea06065d2e674f38033361f71fea26  gcc/testsuite/gcc.target/i386/pr63534.c
  30aaae44143ac2a44f16e0db0cec0af6  gcc/testsuite/gcc.target/i386/pr63538.c
  561aeb698494e71bb2a1de5b9848f5f5  gcc/testsuite/gcc.target/i386/pr63542-1.c
! d7b3fe2ae786fa77ccf1a14c1ca16e9f  gcc/testsuite/gcc.target/i386/pr63542-2.c
  9c17e1a161d05dcffaa896376c5ecc02  gcc/testsuite/gcc.target/i386/pr63563.c
  2fcd7ee701194c088717496858a15fbc  gcc/testsuite/gcc.target/i386/pr63600.c
  2627f49323472299eefe598c4ad807db  gcc/testsuite/gcc.target/i386/pr63618.c
*************** f42f0801a44d06285cee316810947fb7  gcc/te
*** 94328,94333 ****
--- 94388,94398 ----
  a5fe054c259b2b857e58ca81fc2ee790  gcc/testsuite/gcc.target/mips/pr104914.c
  06ed58a6932750afce22db3b1b18fd17  gcc/testsuite/gcc.target/mips/pr106462.c
  f4c42702a09deae0e3423bd519f5d2eb  gcc/testsuite/gcc.target/mips/pr113179.c
+ 1680497826ee74fae57dc31abdf1226e  gcc/testsuite/gcc.target/mips/pr118608-1.c
+ 94d7f4c0d84f3c055072ff2af65360ef  gcc/testsuite/gcc.target/mips/pr118608-2.c
+ f249a8f4522a3524f40f4b6a519b2743  gcc/testsuite/gcc.target/mips/pr118608-3.c
+ 218a0cf921b5404775bb3432ea99cc83  gcc/testsuite/gcc.target/mips/pr118608-4.c
+ c3ec6f4af4a37ac4a16cde974111ea0b  gcc/testsuite/gcc.target/mips/pr123833.c
  def76d72ccc4011afcc36f6a1668e0a5  gcc/testsuite/gcc.target/mips/pr26765.c
  a353694197fdff37f4981c3e510c5565  gcc/testsuite/gcc.target/mips/pr33256.c
  10ea730da40444dc72c89d6cde02220c  gcc/testsuite/gcc.target/mips/pr33635-1.c
*************** ed923a0b262a632aa491326cf2743570  gcc/te
*** 94633,94639 ****
  bec4ebf9075051f32e0f840e20717463  gcc/testsuite/gcc.target/nvptx/alloca-3-O1.c
  1e5211832c9ee1a33110e61951220fcb  gcc/testsuite/gcc.target/nvptx/alloca-4-O3.c
  c652bd85742cc68bac3948e781d1516d  gcc/testsuite/gcc.target/nvptx/alloca-4-O3_-mfake-ptx-alloca.c
! 16c2d111782fe4f594489ea0914a1f56  gcc/testsuite/gcc.target/nvptx/alloca-5.c
  9a34d9a28d10c98b31d63c9cf7a875c9  gcc/testsuite/gcc.target/nvptx/ary-init.c
  c238554b3e741519dc76534c85905a5c  gcc/testsuite/gcc.target/nvptx/atomic-bit-bucket-dest.c
  580b43dff8a62c1e469128dbaa6306d8  gcc/testsuite/gcc.target/nvptx/atomic-exchange-1.c
--- 94698,94704 ----
  bec4ebf9075051f32e0f840e20717463  gcc/testsuite/gcc.target/nvptx/alloca-3-O1.c
  1e5211832c9ee1a33110e61951220fcb  gcc/testsuite/gcc.target/nvptx/alloca-4-O3.c
  c652bd85742cc68bac3948e781d1516d  gcc/testsuite/gcc.target/nvptx/alloca-4-O3_-mfake-ptx-alloca.c
! 68a17c8c2a58c8014dee19c2766a4744  gcc/testsuite/gcc.target/nvptx/alloca-5.c
  9a34d9a28d10c98b31d63c9cf7a875c9  gcc/testsuite/gcc.target/nvptx/ary-init.c
  c238554b3e741519dc76534c85905a5c  gcc/testsuite/gcc.target/nvptx/atomic-bit-bucket-dest.c
  580b43dff8a62c1e469128dbaa6306d8  gcc/testsuite/gcc.target/nvptx/atomic-exchange-1.c
*************** ed343c63973b66c0e986170ee496a1bd  gcc/te
*** 94961,94966 ****
--- 95026,95032 ----
  f92704c5f7f462e7f0b0f7a56209b9c1  gcc/testsuite/gcc.target/powerpc/asm-es-1.c
  ab233b59d18c7aa71a26292124ceae27  gcc/testsuite/gcc.target/powerpc/asm-es-2.c
  6ab0c2c5c17e69db0ab917861a4fc5cc  gcc/testsuite/gcc.target/powerpc/asm-hard-reg-1.c
+ 8b94894ab4636e7b86b5f534c2b1dd18  gcc/testsuite/gcc.target/powerpc/asm-hard-reg-2.c
  378c09d3dfb95c75b49eec1d5713dd6b  gcc/testsuite/gcc.target/powerpc/asm-redzone-1.c
  f1f6a9ec080c7f1554b538d5701c21e2  gcc/testsuite/gcc.target/powerpc/asm-y.c
  684c6b7214e8eb80af0a5566f5c6625e  gcc/testsuite/gcc.target/powerpc/atomic-p7.c
*************** fff9d84e7d142a27609a7e87d10bfded  gcc/te
*** 98754,98759 ****
--- 98820,98826 ----
  61858fbf3627a6a698ef76b904f1ab7b  gcc/testsuite/gcc.target/riscv/pr123274.c
  ba319008fc3d471c58bb29fc9d29ccbc  gcc/testsuite/gcc.target/riscv/pr123278.c
  6eca389fe57f7e888581742c60e40dd4  gcc/testsuite/gcc.target/riscv/pr123318.c
+ c5510efb0e85b94c43e177d92c8bfa96  gcc/testsuite/gcc.target/riscv/pr123322.c
  36f2729f33d66359ae39ca96a9075786  gcc/testsuite/gcc.target/riscv/pr123380.c
  37a08389ba95284cc27832767dfc1430  gcc/testsuite/gcc.target/riscv/pr43644.c
  8eba488c3d26a288644785954ea86af2  gcc/testsuite/gcc.target/riscv/pr52345.c
*************** d6f32022613367c165768e009d673ee3  gcc/te
*** 99641,99646 ****
--- 99708,99717 ----
  f975c36225a2f74a7a6020b07ad719f4  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123317-run-4.c
  26832b17589cc511f51734659c1f2c14  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123317-run.h
  c10f8db5df2b65c9fba341cccb30fe9c  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123414.c
+ 3bc5599b02b046096a6eb9e4366940ae  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123910.c
+ 435f94201bb6109ed80f56efab255e18  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123916.c
+ 081d884e59fdb4543c2fe6b2860dada3  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123925.c
+ 7d8cbc2b37ba78b4c9e24546d49e35a9  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123940.c
  ee8bcba5f6876f2027f0f263f81465aa  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/extract_last-1.c
  7ff884bfa2e6cf9bc4c6172466538515  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/extract_last-10.c
  b2792e9264dcd6fa2e88f495d51677e6  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/extract_last-11.c
*************** edb9b4181b2b408a2f578125f885f62d  gcc/te
*** 100729,100735 ****
  9a640025c4ac25d1729c6af8dfb308b4  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_set-4.c
  054d70d79d99c0a2790741e08d57fad2  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_set-run.c
  ecef52e7fa94de8caeee7a3c4f7a9569  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_set-zvfh-run.c
- 0a608435305a7109a92972e2826c6c9f  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/J
  a79dd8e0f15921de3bc7a97a50902d67  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/abs-1.c
  a46e2469358be5cd090ef9c30487d38f  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/abs-2.c
  cd375212683d2e89715f19dd60b794dc  gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/and-1.c
--- 100800,100805 ----
*************** f95d4e0ecca41e722099be6b52b3efe7  gcc/te
*** 101173,101181 ****
  b870c5da78293f9343f0b46b523057fd  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f16.c
  a560ff181b5a7c4464c79b272c360886  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f32.c
  4b36fff36b0dc58ad3ec35bab8e36bdc  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f64.c
! 664b59ca7f58f4f1c76395cc597527c2  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f16.c
! c0f325201d1414abb6902a095ec58fb6  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f32.c
! b9f831ebbca6c301e1fab41aba4975e7  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f64.c
  0f6bae4aaf481ed935efdf93db5f65e3  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f16.c
  1688960ad63b10d019febbd85cca0b74  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f32.c
  0927ecacaf1354fcbbea5b4047c662f8  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f64.c
--- 101243,101251 ----
  b870c5da78293f9343f0b46b523057fd  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f16.c
  a560ff181b5a7c4464c79b272c360886  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f32.c
  4b36fff36b0dc58ad3ec35bab8e36bdc  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f64.c
! 621084b9f3eb457503f7fd9c4b954dc6  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f16.c
! 0e93d5a441ff1a86fd469a33a5c2ae1c  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f32.c
! 4493696b3123503af532e0b11fda6f67  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f64.c
  0f6bae4aaf481ed935efdf93db5f65e3  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f16.c
  1688960ad63b10d019febbd85cca0b74  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f32.c
  0927ecacaf1354fcbbea5b4047c662f8  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f64.c
*************** b9f831ebbca6c301e1fab41aba4975e7  gcc/te
*** 101185,101196 ****
  ab91d46cdc94442ba7a46dd05dbd587e  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-6-f16.c
  23d5f3132dfb8b1cda490dc14948565f  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-6-f32.c
  00a55aacb718a7144743cd350bdd5fd7  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-6-f64.c
! 7b3a2169c603e2ec971c79f015caf396  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-7-f16.c
! 482d903b96506830c0370d35bc581264  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-7-f32.c
! 393357d30bf65dd79fd7e35733fc0fb6  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-7-f64.c
! d7f82e3ac77f7fd1c8d2cc96cb720c0d  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-8-f16.c
! e0e4bf2f9879e7573a6b687ff94a20d4  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-8-f32.c
! 072abc7562c2dcb1ac75e746f40a8965  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-8-f64.c
  47c87bc0103b0e785da83f97943b8f79  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_binop.h
  9af4503c8568347b92545f1553fe6f63  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_binop_data.h
  8defdab5f95bd04f24f032b99346d64f  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_binop_run.h
--- 101255,101266 ----
  ab91d46cdc94442ba7a46dd05dbd587e  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-6-f16.c
  23d5f3132dfb8b1cda490dc14948565f  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-6-f32.c
  00a55aacb718a7144743cd350bdd5fd7  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-6-f64.c
! 42f18d4624b34fc5a92e43a4a5f5efbe  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-7-f16.c
! ad8d4e4a77e528e72a6dfd745564cc02  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-7-f32.c
! cb3628887549e8d62d8882ff985ad2b5  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-7-f64.c
! a6c4dcae709fe1dfda79a57791ed31fd  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-8-f16.c
! 68803e578b8f1626110d92e73abc668d  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-8-f32.c
! 3349c34336ffe1fb89300df7b96bc799  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-8-f64.c
  47c87bc0103b0e785da83f97943b8f79  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_binop.h
  9af4503c8568347b92545f1553fe6f63  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_binop_data.h
  8defdab5f95bd04f24f032b99346d64f  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_binop_run.h
*************** ea70d997fe6a98ff8e4f8c49d0bb66a5  gcc/te
*** 101286,101315 ****
  6a97517d08d68126d9d366db0c63bd70  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c
  a67f9e0eea6695714c9be105d2481a02  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c
  71cbb6b78ff04ce301386e9f130428b4  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u8.c
! ddbdedd0bcd1b2f07c63e57ea3edd7f9  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i16.c
! ecb91086db90af95d3f46740e36b1ce2  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i32.c
! cee911916a71eee6997697cd65895e73  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i64.c
! 676e73f5f7269bbce806bb67d43df4f4  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i8.c
! 8ae03534ce4e0580b787d98d9175438b  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u16.c
! 888c47bb9d6a188b47ae16d2c2fd7661  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u32.c
! b65d0c8c65ac098c68c47c9c31f840b1  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u64.c
! d8a77003df7230de2d47c8306739ba1c  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u8.c
! fc6a14673d6b6c3e9a2652bf7b943bdb  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i16.c
! 6a1023132819a18610d0ac1f581418b0  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i32.c
! f2692bab2cbd827ad0af87d05ac281cf  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i64.c
! 6f78ce6767a8b1fae6ae4ed7f842ea4d  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i8.c
! 7c6a511ddcd2f875b9714e4c7f08d34f  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u16.c
! 1f5709e16dcd5059f91e721f6bb0dd02  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u32.c
! 4b3be9c8d91bc9cb560a4b633927d73e  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u64.c
! cf761dc5201ba29c1fc08de1a8c504b8  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u8.c
! b739b8671227cbef35b372b75579c8b4  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i16.c
! 4bce5138626b8f5db1817af0d9f75194  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i32.c
! b7fde7338f4f35bd2577c5ffa17a8447  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i64.c
! 4a8a8a5bf91712b84f9a104a32a53d30  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i8.c
! 0bbcd03454d52aaf06c01418105ac8c1  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u16.c
! eda170340a4fd9fc2f4b6324ba133193  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u32.c
! 21ec478eb6747aa34fe0ba287ca199d3  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u64.c
! c2a5f067a7409d6ab7382ba66973a597  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u8.c
  ddf54106623ccc30e43522c91db9f08a  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-fixed-vxrm-1-i16.c
  b18681535fd48293e486f41e6c065f37  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-fixed-vxrm-1-i32.c
  fb53469a8a1b87439b25dac95eaf3d1f  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-fixed-vxrm-1-i64.c
--- 101356,101385 ----
  6a97517d08d68126d9d366db0c63bd70  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c
  a67f9e0eea6695714c9be105d2481a02  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c
  71cbb6b78ff04ce301386e9f130428b4  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u8.c
! 120431fe0f19fd18041ebf450a6a4049  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i16.c
! 8994b4fbe26f836304488a11e64f166c  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i32.c
! 078211b180753b98d636d01a52acbc8f  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i64.c
! efa3b3358427b6e92bb3efc1cdeb6f0c  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i8.c
! 25741448765d1c7ed43e519a0de4c169  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u16.c
! a12b21806c0f22dae0f8f473ea6896fa  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u32.c
! ca341fca818cb99083ad58acfecd8c93  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u64.c
! 35d91f854633d6f36be1293e9816502c  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u8.c
! 3065818f8b599805b28d573675c0b3ed  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i16.c
! f78d78e695eb52672b7a5acc1872dc41  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i32.c
! 3361a2d1c4a05c0a142897ea24b047f2  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i64.c
! 383bf3aae639953d66dc67a8bba3d83d  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i8.c
! fdb72943819106aa01860b0a858869a4  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u16.c
! 4df7e42fc12e4c737f42b3859a438190  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u32.c
! 0f50305a4ecff6c53bc2a49d18dc9bc1  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u64.c
! c0d2dc778bdba70e4e594ada64d93971  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u8.c
! b14704a09e7f5609b8c11550cdbedfb6  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i16.c
! 4023d7e0ece1452ad88b1cf9588a43a2  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i32.c
! f372c6788e7aa9ed24e4ebabd3a987a9  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i64.c
! 7acb2ce18c2729ef24ff69c4cdb44596  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i8.c
! c5a422eaee2f9f4bbe8ea2121f35e643  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u16.c
! b3aa0e8cae8271f3f2414adb4228fc36  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u32.c
! e667a6f4e365feca79f2b51e903efd4d  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u64.c
! 4d2978a8ac6194e1d031a04e5df5d63d  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u8.c
  ddf54106623ccc30e43522c91db9f08a  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-fixed-vxrm-1-i16.c
  b18681535fd48293e486f41e6c065f37  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-fixed-vxrm-1-i32.c
  fb53469a8a1b87439b25dac95eaf3d1f  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-fixed-vxrm-1-i64.c
*************** f54b80eb5fffa420f5aabbbf8ddda08b  gcc/te
*** 103431,103437 ****
  97fbf1d8057a6c24e22a238f1b85178f  gcc/testsuite/gcc.target/riscv/rvv/xsfvector/sf_vqmaccus_4x8x4.c
  d5c19f8b7c4f58c65db3d708af55c80e  gcc/testsuite/gcc.target/riscv/rvv/xsfvector/sifive_vector.h
  fc54d12a0cef4c8da27d6f46343e89eb  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector.c
! cbbf5673d8ca63042855a0cd377e13c2  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr114194-rv32.c
  6826c6caa6acfa0940cda65196713c07  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr114194-rv64.c
  3c7db89c35cb6e70949f5d530cb9444d  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr116591.c
  af1bc36c42c7044e45de0c750db8acd5  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr116592.c
--- 103501,103507 ----
  97fbf1d8057a6c24e22a238f1b85178f  gcc/testsuite/gcc.target/riscv/rvv/xsfvector/sf_vqmaccus_4x8x4.c
  d5c19f8b7c4f58c65db3d708af55c80e  gcc/testsuite/gcc.target/riscv/rvv/xsfvector/sifive_vector.h
  fc54d12a0cef4c8da27d6f46343e89eb  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector.c
! 80698f0ea2b45f848a640c6a55351dcc  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr114194-rv32.c
  6826c6caa6acfa0940cda65196713c07  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr114194-rv64.c
  3c7db89c35cb6e70949f5d530cb9444d  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr116591.c
  af1bc36c42c7044e45de0c750db8acd5  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr116592.c
*************** af1bc36c42c7044e45de0c750db8acd5  gcc/te
*** 103439,103444 ****
--- 103509,103516 ----
  610e6f25965c50df94620396565cbba5  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr118601.c
  013ca4446da937590547bb850a947ecf  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr120461.c
  e0096129e78eb7f5e7a4f3231097c187  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr120642.c
+ e8e71b223dd9d7fee839474c55a75e59  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr123969.c
+ 4881cdf86600eb0940a8c82416f44a09  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr123971.c
  3b6f5cabe79dc861ffb53d3e1f5799fb  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/prefix.c
  f0eaf74e1355fb42d801d65c8e79d1c5  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/riscv_th_vector.h
  979e78c5ed1d2ba91a46584480362b26  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/riscv_vector.h
*************** bac0361fb33136b0e86b4e2258eb58d4  gcc/te
*** 104319,104324 ****
--- 104391,104397 ----
  7167903b7814ee3ba6b596da9f29dcbb  gcc/testsuite/gcc.target/riscv/target-attr-bad-08.c
  c0a4bee5eba1cce4e72b7fe92728426b  gcc/testsuite/gcc.target/riscv/target-attr-bad-09.c
  91718cc3607da243b76499107e2fd6c7  gcc/testsuite/gcc.target/riscv/target-attr-bad-10.c
+ 5113a41d84be2ed5d353a55508f13946  gcc/testsuite/gcc.target/riscv/target-attr-bad-11.c
  41294ddc89d13c43941931c990fd176d  gcc/testsuite/gcc.target/riscv/target-attr-norelax.c
  eba52e984a37427da6fa1233257ff6a9  gcc/testsuite/gcc.target/riscv/tls_1.x
  dbe67905fc0f65b7be7d2f96a6c490e6  gcc/testsuite/gcc.target/riscv/tlsdesc.c
*************** e89ebd75d9b162289c929675222e8501  gcc/te
*** 106781,106786 ****
--- 106854,106860 ----
  a45efe7a1d6f8b7f15f7befa3e7b1768  gcc/testsuite/gdc.dg/pr123407b.d
  4e7020df6ad139d4b43104ca5b97d142  gcc/testsuite/gdc.dg/pr123419.d
  56c2a0939424aafd465f15ffdd08847b  gcc/testsuite/gdc.dg/pr123798.d
+ dd315fdb117d70623ce6b07b3cb8adda  gcc/testsuite/gdc.dg/pr123995.d
  d32aa8ed5ea10931be4ddb5bb9e863d8  gcc/testsuite/gdc.dg/pr89017.d
  53fa8db94d4ca3fc9ba83769733dc0e7  gcc/testsuite/gdc.dg/pr89041.d
  6c316b13f71ea31fcada56b58a41ebd1  gcc/testsuite/gdc.dg/pr89042a.d
*************** d32aa8ed5ea10931be4ddb5bb9e863d8  gcc/te
*** 106788,106794 ****
  aa2d8c1877494580482a3ecd53273c14  gcc/testsuite/gdc.dg/pr90136a.d
  8da24faca8bd7e53b1b35f77886e3c00  gcc/testsuite/gdc.dg/pr90136b.d
  2268967ca63a17d4ce6711255dbfe36e  gcc/testsuite/gdc.dg/pr90136c.d
! 8a30d0c28f872107d7f7e74674a11567  gcc/testsuite/gdc.dg/pr90601.d
  8a837e0b3fba99cf4023482b96f88084  gcc/testsuite/gdc.dg/pr90650a.d
  f638c5e447bcee1678d424bc788ce5d9  gcc/testsuite/gdc.dg/pr90650b.d
  1b70c40a24017e49d5474d3553acac65  gcc/testsuite/gdc.dg/pr91238.d
--- 106862,106868 ----
  aa2d8c1877494580482a3ecd53273c14  gcc/testsuite/gdc.dg/pr90136a.d
  8da24faca8bd7e53b1b35f77886e3c00  gcc/testsuite/gdc.dg/pr90136b.d
  2268967ca63a17d4ce6711255dbfe36e  gcc/testsuite/gdc.dg/pr90136c.d
! ec680f8cf881b6b7776810d1af286b7d  gcc/testsuite/gdc.dg/pr90601.d
  8a837e0b3fba99cf4023482b96f88084  gcc/testsuite/gdc.dg/pr90650a.d
  f638c5e447bcee1678d424bc788ce5d9  gcc/testsuite/gdc.dg/pr90650b.d
  1b70c40a24017e49d5474d3553acac65  gcc/testsuite/gdc.dg/pr91238.d
*************** a52533eba0812c3e68f9cebab490d164  gcc/te
*** 106984,106989 ****
--- 107058,107064 ----
  c830eb21b0dd96c9b8d314d8bbdf13b3  gcc/testsuite/gdc.test/compilable/alignment.d
  07983dc221a81489d42ae7308d4bb3b1  gcc/testsuite/gdc.test/compilable/art4769.d
  73a6a9e5ff1b7cf90baa3106b082bbe2  gcc/testsuite/gdc.test/compilable/atomic_loadstore_shared_classes.d
+ c99048f6a48149a74f35c56b60d26739  gcc/testsuite/gdc.test/compilable/autoreflambda.d
  42ddfcff51dacb470df4e5adfdbfd451  gcc/testsuite/gdc.test/compilable/b11118.d
  abab396c9a34d7ffac07eefc356bf0dd  gcc/testsuite/gdc.test/compilable/b12001.d
  788020e690d5a1dd58a8b1f8cc224a0b  gcc/testsuite/gdc.test/compilable/b1215.d
*************** b69be4810e3ae0bc0ca5518561733f11  gcc/te
*** 107050,107056 ****
  dcb6459009e7567342912938e6f5aabf  gcc/testsuite/gdc.test/compilable/cppmangle_abitag.d
  f14da5eed6d94462ca44fdb445eeae9f  gcc/testsuite/gdc.test/compilable/ctfe_math.d
  990a3a93828f5d46956c2d0ae8c2249e  gcc/testsuite/gdc.test/compilable/d_ident_c99.d
! 7293dc73855a72c298049a2fa501bc17  gcc/testsuite/gdc.test/compilable/dbitfield.d
  857dd7cb6020badfa814837f2ed143e0  gcc/testsuite/gdc.test/compilable/ddoc1.d
  a9609bf56f52db363bdf76f9156a2456  gcc/testsuite/gdc.test/compilable/ddoc10.d
  a4d641880023d322fe7b4075bf05eb2e  gcc/testsuite/gdc.test/compilable/ddoc10236.d
--- 107125,107131 ----
  dcb6459009e7567342912938e6f5aabf  gcc/testsuite/gdc.test/compilable/cppmangle_abitag.d
  f14da5eed6d94462ca44fdb445eeae9f  gcc/testsuite/gdc.test/compilable/ctfe_math.d
  990a3a93828f5d46956c2d0ae8c2249e  gcc/testsuite/gdc.test/compilable/d_ident_c99.d
! a5d8a382d6db9bd3b8ca8148660adc72  gcc/testsuite/gdc.test/compilable/dbitfield.d
  857dd7cb6020badfa814837f2ed143e0  gcc/testsuite/gdc.test/compilable/ddoc1.d
  a9609bf56f52db363bdf76f9156a2456  gcc/testsuite/gdc.test/compilable/ddoc10.d
  a4d641880023d322fe7b4075bf05eb2e  gcc/testsuite/gdc.test/compilable/ddoc10236.d
*************** ece3fcebff1c5a8167a5e21587d73d44  gcc/te
*** 107147,107152 ****
--- 107222,107228 ----
  5178e0b9eb9d63604be2885745879bea  gcc/testsuite/gdc.test/compilable/dip22d.d
  27b5feb8c08101bf8d4b6f035f03db6f  gcc/testsuite/gdc.test/compilable/disable_new.d
  19a835fa32d4bda3ea4981962af102e7  gcc/testsuite/gdc.test/compilable/dlangui_crash.d
+ 4624308e8c87fbfed4972f89af8e839b  gcc/testsuite/gdc.test/compilable/dotvar_ref_return.d
  3cc4cd1a406a8079e8364f1e7eef13e6  gcc/testsuite/gdc.test/compilable/dtoh_21217.d
  ab84766be794b9e4852be1779055db33  gcc/testsuite/gdc.test/compilable/dtoh_AliasDeclaration.d
  4f9240c21e3ba5f12c22ab6e2dafeb21  gcc/testsuite/gdc.test/compilable/dtoh_AliasDeclaration_98.d
*************** ef173d2cdbc0bc5a02f0c5d0cbd51949  gcc/te
*** 107228,107233 ****
--- 107304,107310 ----
  6abe6aaad8522f898caca71202655bb2  gcc/testsuite/gdc.test/compilable/extra-files/test21359b.d
  fb236a7127b6d48fe9a40a7cf59bdd47  gcc/testsuite/gdc.test/compilable/extra-files/test23626a.d
  2ce64eff388d8039e70e7c45b5f951a7  gcc/testsuite/gdc.test/compilable/extra-files/test23626b.d
+ c90249f71debdedafd244d316d129d4b  gcc/testsuite/gdc.test/compilable/extra-files/ucn_vars.i
  52dedd0bc0265044807934e4f228636d  gcc/testsuite/gdc.test/compilable/fail137.d
  513a2b1874c3c5a798b1586ac310cc31  gcc/testsuite/gdc.test/compilable/fail260.d
  b552f44c7ef16a065db8c305bc20c029  gcc/testsuite/gdc.test/compilable/fieldwise.d
*************** bdc5603a01b589a3ad148a565edf3bce  gcc/te
*** 107242,107249 ****
  1646038aa524792b66b4e87f78390e1e  gcc/testsuite/gdc.test/compilable/fix21585.d
  856cfe13aa8bb90d5bc353192c47acb3  gcc/testsuite/gdc.test/compilable/fix21647.d
  ee268250692a50def2153c685c32d7ec  gcc/testsuite/gdc.test/compilable/fix21684.d
  9f30e0d0feb7d3b7c285ce54964333ab  gcc/testsuite/gdc.test/compilable/fix22180.d
! 59a3e3196f5ccc5471f94f7cbb5473d2  gcc/testsuite/gdc.test/compilable/fix22291.d
  fed924adf0e40197daeca9f6c66b00c0  gcc/testsuite/gdc.test/compilable/forward1.d
  40eba37e79ec1d15342134ef29a4569a  gcc/testsuite/gdc.test/compilable/futurexf.d
  11f043b3017f6db8f3997272ba117c58  gcc/testsuite/gdc.test/compilable/fwdref21063.d
--- 107319,107328 ----
  1646038aa524792b66b4e87f78390e1e  gcc/testsuite/gdc.test/compilable/fix21585.d
  856cfe13aa8bb90d5bc353192c47acb3  gcc/testsuite/gdc.test/compilable/fix21647.d
  ee268250692a50def2153c685c32d7ec  gcc/testsuite/gdc.test/compilable/fix21684.d
+ 36dd2f69f87075849d4d032b546a566a  gcc/testsuite/gdc.test/compilable/fix21894.d
+ 2498316f7b74aebdc88fcae821e9a27c  gcc/testsuite/gdc.test/compilable/fix21945.d
  9f30e0d0feb7d3b7c285ce54964333ab  gcc/testsuite/gdc.test/compilable/fix22180.d
! 0dc5f3e098cb578a0699e7923a49dd29  gcc/testsuite/gdc.test/compilable/fix22291.d
  fed924adf0e40197daeca9f6c66b00c0  gcc/testsuite/gdc.test/compilable/forward1.d
  40eba37e79ec1d15342134ef29a4569a  gcc/testsuite/gdc.test/compilable/futurexf.d
  11f043b3017f6db8f3997272ba117c58  gcc/testsuite/gdc.test/compilable/fwdref21063.d
*************** ae88d21e8bfd01b05f4afba75f1e9a03  gcc/te
*** 107560,107565 ****
--- 107639,107645 ----
  c0f06c2e74f038183aab3cc3cf221b3e  gcc/testsuite/gdc.test/compilable/issue16044.d
  b910b30d7854e09339dcc3d2fb33a7f1  gcc/testsuite/gdc.test/compilable/issue16472.d
  7bcbdbaec218cd3d09ad98dd4abbe588  gcc/testsuite/gdc.test/compilable/issue18097.d
+ fe44e24d12d83471ac0d96c9207e7023  gcc/testsuite/gdc.test/compilable/issue19163.d
  9233bd62bb2a9f406c9aca87b21e05fc  gcc/testsuite/gdc.test/compilable/issue19925.d
  84569a59fa72cede17db7adb47fece04  gcc/testsuite/gdc.test/compilable/issue20339.d
  daa2c8dffcb01b4cb7fedae1b33794fa  gcc/testsuite/gdc.test/compilable/issue20362.d
*************** d44936b3c2d3be5638fdb042d88ff414  gcc/te
*** 107582,107587 ****
--- 107662,107668 ----
  2d1583b71f98db376391828cdebcd86e  gcc/testsuite/gdc.test/compilable/issue21880.d
  5d3024e94e16444e74e762a86e97ac5a  gcc/testsuite/gdc.test/compilable/issue21882.d
  24aa1bef43803bf7945269f6dbb963db  gcc/testsuite/gdc.test/compilable/issue21905.d
+ 30afcf5d02c0acf54673fe68edc9d66e  gcc/testsuite/gdc.test/compilable/issue21997.d
  4803db4022ac5a18c1ba3362a8d75239  gcc/testsuite/gdc.test/compilable/issue22130.d
  f725ac9468f8266d38b3b800c3de49d5  gcc/testsuite/gdc.test/compilable/issue22646.d
  d709501e56b18dfceb4ac84745302890  gcc/testsuite/gdc.test/compilable/issue22682.d
*************** e48bb3f9b4ce7ea2fd0e40439d3ed734  gcc/te
*** 107599,107604 ****
--- 107680,107686 ----
  e91a92c9c06d7b2d9d69ab65e6d5d8b4  gcc/testsuite/gdc.test/compilable/json.d
  0dbed47c0a9e6379e5441611de2fdd43  gcc/testsuite/gdc.test/compilable/json20742.d
  b250222652a93e5b4bdcc759db2b45ce  gcc/testsuite/gdc.test/compilable/line.d
+ 81194db17fd0569e05c785b06816e85f  gcc/testsuite/gdc.test/compilable/mangle1.d
  ef508e45d854adfd4d46622db5b51b8a  gcc/testsuite/gdc.test/compilable/minimal.d
  4990d90debeabfbce3e25456ea3e80cd  gcc/testsuite/gdc.test/compilable/minimal2.d
  0b7708bb7ff6eae9428be2b56c06e0fd  gcc/testsuite/gdc.test/compilable/minimal3.d
*************** c4083243a17bd2e4109cb8ffdd21aadf  gcc/te
*** 107631,107637 ****
--- 107713,107722 ----
  97cf4856aa8990a0fe28a6aabadd9a23  gcc/testsuite/gdc.test/compilable/pr9374.d
  7d64317f6d15dac75cff6ccb494e7ef9  gcc/testsuite/gdc.test/compilable/pr9383.d
  c87c15c1a87df8b9292800c22fb9d727  gcc/testsuite/gdc.test/compilable/pr9471.d
+ dc3766723ef48e6875b04c61621d2b21  gcc/testsuite/gdc.test/compilable/pragmamangle1.d
+ b2853fbcb6f2e8393dd11467aad098ff  gcc/testsuite/gdc.test/compilable/pragmamangle2.d
  2026505b4c5299ff0ad966add4ef2d4e  gcc/testsuite/gdc.test/compilable/previewin.d
+ cbd1a962c33ae13ce3a77bfe965ba9e7  gcc/testsuite/gdc.test/compilable/profilegc_typename.d
  600189166a802a0fdc956497de7efadd  gcc/testsuite/gdc.test/compilable/protattr.d
  20b93d64c0f1a131967d443511e7bb0c  gcc/testsuite/gdc.test/compilable/protection.d
  cb143d7698f10438d8c8cf1f61f40f48  gcc/testsuite/gdc.test/compilable/protection/aggregate/mod14275.d
*************** b58883b15934c7e71a25e7843fcbd199  gcc/te
*** 107662,107668 ****
  0998e2c567b544e66b07348098329963  gcc/testsuite/gdc.test/compilable/shared.d
  fd1eeff8f6c846eeb29e20921f5da298  gcc/testsuite/gdc.test/compilable/shared_destructor.d
  badf98b7c4bd98928b7900f50021dd58  gcc/testsuite/gdc.test/compilable/sharedopt.d
! 3230850b473df8f6707fd0a9542e8286  gcc/testsuite/gdc.test/compilable/shortened_methods.d
  7c98dcd3fa3508059372d1492d038c01  gcc/testsuite/gdc.test/compilable/sroa.d
  2f48af7a4a278e8af0c7e2a2cb763723  gcc/testsuite/gdc.test/compilable/staticforeach.d
  0e24586f4018f7e6eceb24795ff0b303  gcc/testsuite/gdc.test/compilable/statictemplatethis.d
--- 107747,107753 ----
  0998e2c567b544e66b07348098329963  gcc/testsuite/gdc.test/compilable/shared.d
  fd1eeff8f6c846eeb29e20921f5da298  gcc/testsuite/gdc.test/compilable/shared_destructor.d
  badf98b7c4bd98928b7900f50021dd58  gcc/testsuite/gdc.test/compilable/sharedopt.d
! a5ede992e0b55bb7b82de23ec7a12a16  gcc/testsuite/gdc.test/compilable/shortened_methods.d
  7c98dcd3fa3508059372d1492d038c01  gcc/testsuite/gdc.test/compilable/sroa.d
  2f48af7a4a278e8af0c7e2a2cb763723  gcc/testsuite/gdc.test/compilable/staticforeach.d
  0e24586f4018f7e6eceb24795ff0b303  gcc/testsuite/gdc.test/compilable/statictemplatethis.d
*************** c2783ee4a416f517c72d376739cda631  gcc/te
*** 108000,108006 ****
  0ba90edd374f89515b149c9045f12ad4  gcc/testsuite/gdc.test/compilable/test21299a.d
  0ee42ed10154a17167c5ff263b2f4b76  gcc/testsuite/gdc.test/compilable/test21299b.d
  f7ebbab88f0a4f86e71b06e130f593ee  gcc/testsuite/gdc.test/compilable/test21299c.d
! effd503ab143f07a377f69a6abd2e2ab  gcc/testsuite/gdc.test/compilable/test21299d.d
  35ca710712a0eaa3d821e4f0342671d7  gcc/testsuite/gdc.test/compilable/test21330.d
  fb73df52386a4853f612838bce8363f3  gcc/testsuite/gdc.test/compilable/test21331.sh
  559d7ce3f7f50529f0cf75779d7c9c3f  gcc/testsuite/gdc.test/compilable/test21359.sh
--- 108085,108091 ----
  0ba90edd374f89515b149c9045f12ad4  gcc/testsuite/gdc.test/compilable/test21299a.d
  0ee42ed10154a17167c5ff263b2f4b76  gcc/testsuite/gdc.test/compilable/test21299b.d
  f7ebbab88f0a4f86e71b06e130f593ee  gcc/testsuite/gdc.test/compilable/test21299c.d
! 3593698740c8203726d12fb303bef757  gcc/testsuite/gdc.test/compilable/test21299d.d
  35ca710712a0eaa3d821e4f0342671d7  gcc/testsuite/gdc.test/compilable/test21330.d
  fb73df52386a4853f612838bce8363f3  gcc/testsuite/gdc.test/compilable/test21331.sh
  559d7ce3f7f50529f0cf75779d7c9c3f  gcc/testsuite/gdc.test/compilable/test21359.sh
*************** f7b07a5a3e3bfac17af47439bb8ec413  gcc/te
*** 108012,108018 ****
--- 108097,108106 ----
  ba9fd4b88ca0267441472f1febace9ae  gcc/testsuite/gdc.test/compilable/test21438.d
  3f1b768c6d2a4190f6a0e7e142cea814  gcc/testsuite/gdc.test/compilable/test21464.d
  b131c6442aea98d1e588db16b27a37b5  gcc/testsuite/gdc.test/compilable/test21476.d
+ eb854a5f354773f08ac907a58e7fb559  gcc/testsuite/gdc.test/compilable/test21495.d
  6aae9ab24e30cc1449c46abe03e9439e  gcc/testsuite/gdc.test/compilable/test21501a.d
+ 0954e81cdf17033b2c5e6f676723805b  gcc/testsuite/gdc.test/compilable/test21504a.d
+ 53d9e158cfd176986fa8c4f8f65856f3  gcc/testsuite/gdc.test/compilable/test21504b.d
  efef74ea28668cfb5bd423850b20fc1c  gcc/testsuite/gdc.test/compilable/test21514.d
  9c28314750a684e306e8009cc05f2c6d  gcc/testsuite/gdc.test/compilable/test21591.d
  4b14068114e43c728903370792cda6d8  gcc/testsuite/gdc.test/compilable/test21659.d
*************** a9244fe6f2b8ede1fa5bec2486685adc  gcc/te
*** 108032,108037 ****
--- 108120,108126 ----
  03e154b66e0ed0416386439812111279  gcc/testsuite/gdc.test/compilable/test21830.d
  bc7975fb011749a023500cb1a40cae84  gcc/testsuite/gdc.test/compilable/test21831.d
  7523071ea2543e26e45e5bf23bdd52cc  gcc/testsuite/gdc.test/compilable/test21832.d
+ 1f3a3d73257c7b3480bd26d4d5758810  gcc/testsuite/gdc.test/compilable/test21835.d
  6f5f3be0b3b35cb77d6cade261792f9d  gcc/testsuite/gdc.test/compilable/test21850.d
  031f91ebad1f7a90775adfbea13c93e7  gcc/testsuite/gdc.test/compilable/test21861.d
  9d6857891098eee0f95c918781d462a2  gcc/testsuite/gdc.test/compilable/test21876.d
*************** b6fa7fb8b6be39ac614122daf3b72230  gcc/te
*** 108076,108082 ****
  3ce6d345a8a1370ca8e0335c59ee3e11  gcc/testsuite/gdc.test/compilable/test22859.d
  5045cc574731b81b8e89337c37a97779  gcc/testsuite/gdc.test/compilable/test22860.d
  300c7a5a04905fb4e773274af32f50e9  gcc/testsuite/gdc.test/compilable/test22865.d
! 5e21d274547f621284add858e8815642  gcc/testsuite/gdc.test/compilable/test22916.d
  507222c7ae19a95bd88c720e54c83222  gcc/testsuite/gdc.test/compilable/test22919.d
  bed218d1e903acd1adf1a4db4ee2df53  gcc/testsuite/gdc.test/compilable/test22952.d
  a92fa3d1edefb6370e848a80b53e97ed  gcc/testsuite/gdc.test/compilable/test22988.d
--- 108165,108171 ----
  3ce6d345a8a1370ca8e0335c59ee3e11  gcc/testsuite/gdc.test/compilable/test22859.d
  5045cc574731b81b8e89337c37a97779  gcc/testsuite/gdc.test/compilable/test22860.d
  300c7a5a04905fb4e773274af32f50e9  gcc/testsuite/gdc.test/compilable/test22865.d
! a1b02a88fac5065d7fed350ef81de885  gcc/testsuite/gdc.test/compilable/test22916.d
  507222c7ae19a95bd88c720e54c83222  gcc/testsuite/gdc.test/compilable/test22919.d
  bed218d1e903acd1adf1a4db4ee2df53  gcc/testsuite/gdc.test/compilable/test22952.d
  a92fa3d1edefb6370e848a80b53e97ed  gcc/testsuite/gdc.test/compilable/test22988.d
*************** e4998c6896a3ce1b4036155ac0ec1abc  gcc/te
*** 108273,108279 ****
  7d2819928630a8c04d34107f84d2fe76  gcc/testsuite/gdc.test/compilable/testcstuff3.d
  73df461aee89586871ed2daebd1dd80f  gcc/testsuite/gdc.test/compilable/testdefines.d
  035c837c9828677c99e64cf928df76e6  gcc/testsuite/gdc.test/compilable/testdip1008.d
! a45fff07259b904bd2e0780eb2b4b920  gcc/testsuite/gdc.test/compilable/testexpression.d
  165adaaca3d4cb680db8e8f7bef830af  gcc/testsuite/gdc.test/compilable/testfptr.d
  f8d3fd67e69cbc3faa127c9ea1a7ee45  gcc/testsuite/gdc.test/compilable/testfwdref.d
  6958a8bc2ada5ab898827480fcd22cb0  gcc/testsuite/gdc.test/compilable/testgotoskips.d
--- 108362,108368 ----
  7d2819928630a8c04d34107f84d2fe76  gcc/testsuite/gdc.test/compilable/testcstuff3.d
  73df461aee89586871ed2daebd1dd80f  gcc/testsuite/gdc.test/compilable/testdefines.d
  035c837c9828677c99e64cf928df76e6  gcc/testsuite/gdc.test/compilable/testdip1008.d
! 60b49879d79b161f2ed703dc3f8dc0b5  gcc/testsuite/gdc.test/compilable/testexpression.d
  165adaaca3d4cb680db8e8f7bef830af  gcc/testsuite/gdc.test/compilable/testfptr.d
  f8d3fd67e69cbc3faa127c9ea1a7ee45  gcc/testsuite/gdc.test/compilable/testfwdref.d
  6958a8bc2ada5ab898827480fcd22cb0  gcc/testsuite/gdc.test/compilable/testgotoskips.d
*************** da494213f007c40bec310d7bd2671704  gcc/te
*** 108299,108304 ****
--- 108388,108394 ----
  1b2750dc3092c04117822067f5a9ff94  gcc/testsuite/gdc.test/compilable/traits_getFunctionAttributes.d
  0da951db343407cecaa9f85317fb649d  gcc/testsuite/gdc.test/compilable/transition_in.d
  2a5c3303f2fc00fbaf51ab7e1a392eee  gcc/testsuite/gdc.test/compilable/typeid_name.d
+ 3d0cf08e5cdeddccd0c5b4aa6d06fe03  gcc/testsuite/gdc.test/compilable/ucn.d
  ac9e751e20c95911b8e0c1bc570c6124  gcc/testsuite/gdc.test/compilable/uda.d
  b506100d6c4c03665c3acdb43bf8f992  gcc/testsuite/gdc.test/compilable/uda_lambda.d
  aafbda4aa90d5d90bdd9da02d53073f3  gcc/testsuite/gdc.test/compilable/udamodule1.d
*************** fe9e048bbb7b3d5de97c4d791647288e  gcc/te
*** 108316,108322 ****
  1f7b74cc98b46eee4066e8614f446c78  gcc/testsuite/gdc.test/compilable/vtemplates.d
  fe3fe69f3ba0159a4ec76976ea3bf053  gcc/testsuite/gdc.test/compilable/vtemplates_list.d
  6abb1560fbe9e7a13c92048cd6f7cc17  gcc/testsuite/gdc.test/compilable/warn12809.d
! c690715b588439b2cda295c69dac5e65  gcc/testsuite/gdc.test/compilable/warn3882.d
  3619290d2eaa470d906ed2d6f8b6c204  gcc/testsuite/gdc.test/compilable/zerosize.d
  5dcea90226c0713269c1f867b68c0d33  gcc/testsuite/gdc.test/fail_compilation/aa_assign.d
  0c74ef80707c77da3fffdc3a03c5ab16  gcc/testsuite/gdc.test/fail_compilation/aa_init.d
--- 108406,108412 ----
  1f7b74cc98b46eee4066e8614f446c78  gcc/testsuite/gdc.test/compilable/vtemplates.d
  fe3fe69f3ba0159a4ec76976ea3bf053  gcc/testsuite/gdc.test/compilable/vtemplates_list.d
  6abb1560fbe9e7a13c92048cd6f7cc17  gcc/testsuite/gdc.test/compilable/warn12809.d
! 199c4287b2e3278dce02af3d3e7d64f8  gcc/testsuite/gdc.test/compilable/warn3882.d
  3619290d2eaa470d906ed2d6f8b6c204  gcc/testsuite/gdc.test/compilable/zerosize.d
  5dcea90226c0713269c1f867b68c0d33  gcc/testsuite/gdc.test/fail_compilation/aa_assign.d
  0c74ef80707c77da3fffdc3a03c5ab16  gcc/testsuite/gdc.test/fail_compilation/aa_init.d
*************** b19c540895e68030d7f79aea6ba21213  gcc/te
*** 108352,108369 ****
  365ab715a73fe9c494170233e038c30b  gcc/testsuite/gdc.test/fail_compilation/b20780.d
  82cdbb62978f6d1599220b6ee9f9a92b  gcc/testsuite/gdc.test/fail_compilation/b20875.d
  4379d4e30682494b2969726cbdecc7fb  gcc/testsuite/gdc.test/fail_compilation/b23686.d
! 47c41c40dd4bf706c7dd71dc9350a9c1  gcc/testsuite/gdc.test/fail_compilation/b3841.d
  4f14c24ff5b09173d0eaac42b8afff9e  gcc/testsuite/gdc.test/fail_compilation/b6227.d
! 1803dad8fd943fe1b5364f410f4667b8  gcc/testsuite/gdc.test/fail_compilation/betterc.d
  6c9e7c3fa8a5746db70b4f4968c65b2f  gcc/testsuite/gdc.test/fail_compilation/binexperr.d
! 060a96e4666a8d9b6f850c6d6a06ad46  gcc/testsuite/gdc.test/fail_compilation/biterrors.d
! b3e8a75396df9880ab0e8bc58d7819e0  gcc/testsuite/gdc.test/fail_compilation/biterrors2.d
! 628663847189d9e213df57a88ffdd0ec  gcc/testsuite/gdc.test/fail_compilation/biterrors3.d
! 00b67b941ae50ae57ec98d820dc8a4a7  gcc/testsuite/gdc.test/fail_compilation/biterrors4.d
! 7cebb32914609d8813bf566f3c5a7944  gcc/testsuite/gdc.test/fail_compilation/biterrors5.d
! a086a16419dbf6f3d63957383364a1b2  gcc/testsuite/gdc.test/fail_compilation/bitintro.d
  b78609eaae9e87219c94c7141e00c79d  gcc/testsuite/gdc.test/fail_compilation/bool_cast.d
! 27e3b2b10b6a02aca843ef22bde6fff0  gcc/testsuite/gdc.test/fail_compilation/bug15613.d
  340f5391f34df0ae26180bb672129391  gcc/testsuite/gdc.test/fail_compilation/bug16165.d
  6fdc01527eb87db969507dc657c75baa  gcc/testsuite/gdc.test/fail_compilation/bug18743.d
  90b4cb7f74d75995c16c31b8f217714c  gcc/testsuite/gdc.test/fail_compilation/bug19569.d
--- 108442,108459 ----
  365ab715a73fe9c494170233e038c30b  gcc/testsuite/gdc.test/fail_compilation/b20780.d
  82cdbb62978f6d1599220b6ee9f9a92b  gcc/testsuite/gdc.test/fail_compilation/b20875.d
  4379d4e30682494b2969726cbdecc7fb  gcc/testsuite/gdc.test/fail_compilation/b23686.d
! 9c480ac9a5523a59d7126dd4319a3873  gcc/testsuite/gdc.test/fail_compilation/b3841.d
  4f14c24ff5b09173d0eaac42b8afff9e  gcc/testsuite/gdc.test/fail_compilation/b6227.d
! 0a7a028ccd2159d16b47d139125cdb3b  gcc/testsuite/gdc.test/fail_compilation/betterc.d
  6c9e7c3fa8a5746db70b4f4968c65b2f  gcc/testsuite/gdc.test/fail_compilation/binexperr.d
! 8506da985f6501f53e628f43dcec8944  gcc/testsuite/gdc.test/fail_compilation/biterrors.d
! c9fd5a8b6e4bf3ce38abd2c4bde54aa7  gcc/testsuite/gdc.test/fail_compilation/biterrors2.d
! 3c61ec6819a61d3264c4f7d3c7deefe6  gcc/testsuite/gdc.test/fail_compilation/biterrors3.d
! 47cd22ae55459e423969a9d7911292fd  gcc/testsuite/gdc.test/fail_compilation/biterrors4.d
! 8c26fcda9988b50b78b90f8020555527  gcc/testsuite/gdc.test/fail_compilation/biterrors5.d
! f736032a994fad9391201972bad10ff3  gcc/testsuite/gdc.test/fail_compilation/bitintro.d
  b78609eaae9e87219c94c7141e00c79d  gcc/testsuite/gdc.test/fail_compilation/bool_cast.d
! 5f0d8073eda5526b1b67dabead57de6f  gcc/testsuite/gdc.test/fail_compilation/bug15613.d
  340f5391f34df0ae26180bb672129391  gcc/testsuite/gdc.test/fail_compilation/bug16165.d
  6fdc01527eb87db969507dc657c75baa  gcc/testsuite/gdc.test/fail_compilation/bug18743.d
  90b4cb7f74d75995c16c31b8f217714c  gcc/testsuite/gdc.test/fail_compilation/bug19569.d
*************** e10319cae3a1fe5d89a6e7220f4d3617  gcc/te
*** 108372,108383 ****
  68e9d113721c19252710aced1e3ddae2  gcc/testsuite/gdc.test/fail_compilation/bug5096.d
  dfcfc941a23106dfb4aa633010d25044  gcc/testsuite/gdc.test/fail_compilation/bug5b.d
  6f8846856815fb29b1378e1e5f6d1130  gcc/testsuite/gdc.test/fail_compilation/bug8150a.d
! e40db6207cc66055571f5552ba4dd74e  gcc/testsuite/gdc.test/fail_compilation/bug8150b.d
  a8e4c2d5f03d9351f5d421a208161492  gcc/testsuite/gdc.test/fail_compilation/bug8891.d
  f6fadfb0a65bc332d4cfb40d9311d7fe  gcc/testsuite/gdc.test/fail_compilation/bug9631.d
  841e7b9289bdecfa32b91f46d4d274ba  gcc/testsuite/gdc.test/fail_compilation/call_function_type.d
  147cb65542700f79b0a631920f0323af  gcc/testsuite/gdc.test/fail_compilation/callconst.d
  88036bb5984c4b2620b2bf8d243f738b  gcc/testsuite/gdc.test/fail_compilation/cast_qual.d
  67ff13286b3d3bb060099d604721b4db  gcc/testsuite/gdc.test/fail_compilation/casttuple.d
  26e889aceafb8429694f3505035b149e  gcc/testsuite/gdc.test/fail_compilation/ccast.d
  c6f4e1c23c3f30e355ae3bf161924cdc  gcc/testsuite/gdc.test/fail_compilation/cerrors.d
--- 108462,108474 ----
  68e9d113721c19252710aced1e3ddae2  gcc/testsuite/gdc.test/fail_compilation/bug5096.d
  dfcfc941a23106dfb4aa633010d25044  gcc/testsuite/gdc.test/fail_compilation/bug5b.d
  6f8846856815fb29b1378e1e5f6d1130  gcc/testsuite/gdc.test/fail_compilation/bug8150a.d
! 7fac4a6bebc5ba031815bbe3390774a8  gcc/testsuite/gdc.test/fail_compilation/bug8150b.d
  a8e4c2d5f03d9351f5d421a208161492  gcc/testsuite/gdc.test/fail_compilation/bug8891.d
  f6fadfb0a65bc332d4cfb40d9311d7fe  gcc/testsuite/gdc.test/fail_compilation/bug9631.d
  841e7b9289bdecfa32b91f46d4d274ba  gcc/testsuite/gdc.test/fail_compilation/call_function_type.d
  147cb65542700f79b0a631920f0323af  gcc/testsuite/gdc.test/fail_compilation/callconst.d
  88036bb5984c4b2620b2bf8d243f738b  gcc/testsuite/gdc.test/fail_compilation/cast_qual.d
+ cafe95ffd9c108f7659758d3501d05e1  gcc/testsuite/gdc.test/fail_compilation/cast_system.d
  67ff13286b3d3bb060099d604721b4db  gcc/testsuite/gdc.test/fail_compilation/casttuple.d
  26e889aceafb8429694f3505035b149e  gcc/testsuite/gdc.test/fail_compilation/ccast.d
  c6f4e1c23c3f30e355ae3bf161924cdc  gcc/testsuite/gdc.test/fail_compilation/cerrors.d
*************** c33ee0f46dedb5c9567ef568034758f7  gcc/te
*** 108396,108402 ****
  f1dd188bca733f64851dc2fc4f14ac66  gcc/testsuite/gdc.test/fail_compilation/constraints_func3.d
  29512842d0ee6079821c028b433e10e8  gcc/testsuite/gdc.test/fail_compilation/constraints_func4.d
  73f78e3739143867cb3e2d9147304904  gcc/testsuite/gdc.test/fail_compilation/constraints_tmpl.d
! dfd223ee8e19d86aeb106dce298f3061  gcc/testsuite/gdc.test/fail_compilation/covariant_override.d
  9dc9a69704d40f4f8a848aba9d5118b0  gcc/testsuite/gdc.test/fail_compilation/cpp_abi_tag.d
  65d75f72a7879909e72b5a22c1949602  gcc/testsuite/gdc.test/fail_compilation/cpp_abi_tag2.d
  d5bced259e0562037f603e84900a0529  gcc/testsuite/gdc.test/fail_compilation/cpp_cast.d
--- 108487,108493 ----
  f1dd188bca733f64851dc2fc4f14ac66  gcc/testsuite/gdc.test/fail_compilation/constraints_func3.d
  29512842d0ee6079821c028b433e10e8  gcc/testsuite/gdc.test/fail_compilation/constraints_func4.d
  73f78e3739143867cb3e2d9147304904  gcc/testsuite/gdc.test/fail_compilation/constraints_tmpl.d
! f7ecc0602f63d030e1434d543a799360  gcc/testsuite/gdc.test/fail_compilation/covariant_override.d
  9dc9a69704d40f4f8a848aba9d5118b0  gcc/testsuite/gdc.test/fail_compilation/cpp_abi_tag.d
  65d75f72a7879909e72b5a22c1949602  gcc/testsuite/gdc.test/fail_compilation/cpp_abi_tag2.d
  d5bced259e0562037f603e84900a0529  gcc/testsuite/gdc.test/fail_compilation/cpp_cast.d
*************** db15b40f5c9b739572526640e6de1311  gcc/te
*** 108418,108424 ****
  b0b58282b0fe3f3fe68b280aefebbf28  gcc/testsuite/gdc.test/fail_compilation/ctypes.d
  2cf4b4d38bcfec6baeb522b946354879  gcc/testsuite/gdc.test/fail_compilation/cwords.d
  5efd0a6cfa12666675ce8951076ece70  gcc/testsuite/gdc.test/fail_compilation/dassert.d
! bc1d8807cf854326de1b4c43a31e885b  gcc/testsuite/gdc.test/fail_compilation/dbitfields.d
  dcca7e17c023779b24f628b1c9e3d282  gcc/testsuite/gdc.test/fail_compilation/ddoc_18083.d
  4d924d33cec417a66c755fe3d7769105  gcc/testsuite/gdc.test/fail_compilation/debugCaseDeclaration.d
  391bf2c486ba46a7584758512fc0361d  gcc/testsuite/gdc.test/fail_compilation/dep_d1_ops.d
--- 108509,108515 ----
  b0b58282b0fe3f3fe68b280aefebbf28  gcc/testsuite/gdc.test/fail_compilation/ctypes.d
  2cf4b4d38bcfec6baeb522b946354879  gcc/testsuite/gdc.test/fail_compilation/cwords.d
  5efd0a6cfa12666675ce8951076ece70  gcc/testsuite/gdc.test/fail_compilation/dassert.d
! 3100b8cf87b1bfb0f7f0bc3ededb6d51  gcc/testsuite/gdc.test/fail_compilation/dbitfields.d
  dcca7e17c023779b24f628b1c9e3d282  gcc/testsuite/gdc.test/fail_compilation/ddoc_18083.d
  4d924d33cec417a66c755fe3d7769105  gcc/testsuite/gdc.test/fail_compilation/debugCaseDeclaration.d
  391bf2c486ba46a7584758512fc0361d  gcc/testsuite/gdc.test/fail_compilation/dep_d1_ops.d
*************** e382e1fe742ff323d95980a7b3337beb  gcc/te
*** 108518,108524 ****
  c3638a460a108e562e095fa04d0d60be  gcc/testsuite/gdc.test/fail_compilation/diag20518.d
  28f95cec52787b47b97fe2e541d7b19f  gcc/testsuite/gdc.test/fail_compilation/diag20888.d
  b233b20e604b69dca9939988d5ecf22f  gcc/testsuite/gdc.test/fail_compilation/diag21883.d
! a8a51a979aa2bf112cbe9f389a7f7800  gcc/testsuite/gdc.test/fail_compilation/diag23295.d
  f66e20c29e1a7326b2bb6f3603ba6ec5  gcc/testsuite/gdc.test/fail_compilation/diag23355.d
  62cfcbe2b4669975008759933d624932  gcc/testsuite/gdc.test/fail_compilation/diag23384.d
  9b6cfcbc4b79fcd4610ac7bcb72ffb67  gcc/testsuite/gdc.test/fail_compilation/diag2452.d
--- 108609,108615 ----
  c3638a460a108e562e095fa04d0d60be  gcc/testsuite/gdc.test/fail_compilation/diag20518.d
  28f95cec52787b47b97fe2e541d7b19f  gcc/testsuite/gdc.test/fail_compilation/diag20888.d
  b233b20e604b69dca9939988d5ecf22f  gcc/testsuite/gdc.test/fail_compilation/diag21883.d
! 26e6c715793ca83eabb742a5e695bb89  gcc/testsuite/gdc.test/fail_compilation/diag23295.d
  f66e20c29e1a7326b2bb6f3603ba6ec5  gcc/testsuite/gdc.test/fail_compilation/diag23355.d
  62cfcbe2b4669975008759933d624932  gcc/testsuite/gdc.test/fail_compilation/diag23384.d
  9b6cfcbc4b79fcd4610ac7bcb72ffb67  gcc/testsuite/gdc.test/fail_compilation/diag2452.d
*************** ff3b86a24c6b08b8abda906070e72c91  gcc/te
*** 108569,108575 ****
  883b3aa087c353de52e9d7ef2f1e11d3  gcc/testsuite/gdc.test/fail_compilation/diag8928.d
  af1cb4b4feff9afa7b9413ce3435a35b  gcc/testsuite/gdc.test/fail_compilation/diag9004.d
  1ca0cbaa5486bbb1fca649821e5fd454  gcc/testsuite/gdc.test/fail_compilation/diag9148.d
! bcf18ce030ed62b36660197352b4407b  gcc/testsuite/gdc.test/fail_compilation/diag9191.d
  e9a684b92a19f3209b93cfa703068084  gcc/testsuite/gdc.test/fail_compilation/diag9210a.d
  8460a9ca71067e6480f1127357582fac  gcc/testsuite/gdc.test/fail_compilation/diag9247.d
  87826ac2f6bbb76e4f3765ad1364c54d  gcc/testsuite/gdc.test/fail_compilation/diag9250.d
--- 108660,108666 ----
  883b3aa087c353de52e9d7ef2f1e11d3  gcc/testsuite/gdc.test/fail_compilation/diag8928.d
  af1cb4b4feff9afa7b9413ce3435a35b  gcc/testsuite/gdc.test/fail_compilation/diag9004.d
  1ca0cbaa5486bbb1fca649821e5fd454  gcc/testsuite/gdc.test/fail_compilation/diag9148.d
! 21b94799224cf942d35ba85fc2e3e19b  gcc/testsuite/gdc.test/fail_compilation/diag9191.d
  e9a684b92a19f3209b93cfa703068084  gcc/testsuite/gdc.test/fail_compilation/diag9210a.d
  8460a9ca71067e6480f1127357582fac  gcc/testsuite/gdc.test/fail_compilation/diag9247.d
  87826ac2f6bbb76e4f3765ad1364c54d  gcc/testsuite/gdc.test/fail_compilation/diag9250.d
*************** cc934f60ce92291db90fae9aa247c1cc  gcc/te
*** 108616,108621 ****
--- 108707,108713 ----
  4f130fa0b34093205fd971c815202639  gcc/testsuite/gdc.test/fail_compilation/e15876_6.d
  9c85e4911f1d459b180bb94b53ede6aa  gcc/testsuite/gdc.test/fail_compilation/e7804_1.d
  ebd624415ce51467f6282d2f66d82e6b  gcc/testsuite/gdc.test/fail_compilation/e7804_2.d
+ 21ffa5b30c5fb5220bce04bf5a9158a8  gcc/testsuite/gdc.test/fail_compilation/edition_switch.d
  fdedd24d4e12ed3639529b3e2f51fd8d  gcc/testsuite/gdc.test/fail_compilation/editions.d
  f14af71cec48d47183b3e19b5de6cf58  gcc/testsuite/gdc.test/fail_compilation/empty_statement.d
  bec96d18023efd76c6a9a3f99ff127b5  gcc/testsuite/gdc.test/fail_compilation/enum9921.d
*************** ec1235e210fe787ad9f07dbed709c281  gcc/te
*** 108710,108716 ****
  b93dc74048b99ba0c82a6709839b2ef1  gcc/testsuite/gdc.test/fail_compilation/fail12764.d
  6ff46a21ae637dd20e81ee2ce124ec81  gcc/testsuite/gdc.test/fail_compilation/fail12809.d
  c50f234d5c95d5c23129a75b1d91520e  gcc/testsuite/gdc.test/fail_compilation/fail129.d
- e62523305c859a4769949f7589072795  gcc/testsuite/gdc.test/fail_compilation/fail12901.d
  9d0d90c33c6388b328985f50e7ee84f7  gcc/testsuite/gdc.test/fail_compilation/fail12908.d
  60bcc8832f751f8b7a32f1ecb9c1397c  gcc/testsuite/gdc.test/fail_compilation/fail12932.d
  a1674e1394b35a5df1b3c4aac66f998f  gcc/testsuite/gdc.test/fail_compilation/fail13064.d
--- 108802,108807 ----
*************** f8d46bb7603384631c0a6f26126398b0  gcc/te
*** 108825,108831 ****
  0454c9a1ef7ddc14630b0cf99dda8803  gcc/testsuite/gdc.test/fail_compilation/fail180.d
  309673188eb627a9dd883f8854937fb2  gcc/testsuite/gdc.test/fail_compilation/fail18057.d
  e3408518b8b4c811d02328352ef87de6  gcc/testsuite/gdc.test/fail_compilation/fail18057b.d
! 1bdea03690c85119a465149cfbe90431  gcc/testsuite/gdc.test/fail_compilation/fail18093.d
  56cadbe6e1c6957cb43ae7179c59a572  gcc/testsuite/gdc.test/fail_compilation/fail18143.d
  1b77e14a5215ba3c2c8ee9353abad6a9  gcc/testsuite/gdc.test/fail_compilation/fail18219.d
  b85a8861594c77116c2c1d80342d314b  gcc/testsuite/gdc.test/fail_compilation/fail18228.d
--- 108916,108922 ----
  0454c9a1ef7ddc14630b0cf99dda8803  gcc/testsuite/gdc.test/fail_compilation/fail180.d
  309673188eb627a9dd883f8854937fb2  gcc/testsuite/gdc.test/fail_compilation/fail18057.d
  e3408518b8b4c811d02328352ef87de6  gcc/testsuite/gdc.test/fail_compilation/fail18057b.d
! 3ac2773cb7f4152c6f948f739f7510cd  gcc/testsuite/gdc.test/fail_compilation/fail18093.d
  56cadbe6e1c6957cb43ae7179c59a572  gcc/testsuite/gdc.test/fail_compilation/fail18143.d
  1b77e14a5215ba3c2c8ee9353abad6a9  gcc/testsuite/gdc.test/fail_compilation/fail18219.d
  b85a8861594c77116c2c1d80342d314b  gcc/testsuite/gdc.test/fail_compilation/fail18228.d
*************** a39e0b393e266193ce76af1931c80a84  gcc/te
*** 108883,108889 ****
  780f3b6248e47c31d92b599b12301358  gcc/testsuite/gdc.test/fail_compilation/fail19898a.d
  261252defe5c1323d54bb76d7faa286d  gcc/testsuite/gdc.test/fail_compilation/fail19898b.d
  6dd5bad406278481b7d4badda46d5b83  gcc/testsuite/gdc.test/fail_compilation/fail199.d
! 20732ebad089aa6fc8fd4b82c40d461a  gcc/testsuite/gdc.test/fail_compilation/fail19911a.d
  170403a4dd923340bba9ba4156ebf981  gcc/testsuite/gdc.test/fail_compilation/fail19911b.d
  101b104019651b69a88cfb47215cca16  gcc/testsuite/gdc.test/fail_compilation/fail19911c.d
  a69de6e1a6d36384bc5bf67a94a6c25f  gcc/testsuite/gdc.test/fail_compilation/fail19912a.d
--- 108974,108980 ----
  780f3b6248e47c31d92b599b12301358  gcc/testsuite/gdc.test/fail_compilation/fail19898a.d
  261252defe5c1323d54bb76d7faa286d  gcc/testsuite/gdc.test/fail_compilation/fail19898b.d
  6dd5bad406278481b7d4badda46d5b83  gcc/testsuite/gdc.test/fail_compilation/fail199.d
! e00d8657cfeaa2c5cd98018533b66ce8  gcc/testsuite/gdc.test/fail_compilation/fail19911a.d
  170403a4dd923340bba9ba4156ebf981  gcc/testsuite/gdc.test/fail_compilation/fail19911b.d
  101b104019651b69a88cfb47215cca16  gcc/testsuite/gdc.test/fail_compilation/fail19911c.d
  a69de6e1a6d36384bc5bf67a94a6c25f  gcc/testsuite/gdc.test/fail_compilation/fail19912a.d
*************** b70b339a1dbd5b5807d24c2f37fb9ac3  gcc/te
*** 108993,109002 ****
  9b88e4363da5c8d1e01b4b215b2046e0  gcc/testsuite/gdc.test/fail_compilation/fail22144.d
  cbeb7a9b26aace5d3509bbfc067b4244  gcc/testsuite/gdc.test/fail_compilation/fail22151.d
  4baaa5d9453baf9a29ee72423acbf8ad  gcc/testsuite/gdc.test/fail_compilation/fail22157.d
! a7b0c110feebc80ad33b22cf2532304c  gcc/testsuite/gdc.test/fail_compilation/fail222.d
  00bcf188d7c5b68cf64d99bdb6009bd7  gcc/testsuite/gdc.test/fail_compilation/fail22202.d
  928492c14b5c84fee4c14ddcc7dd2654  gcc/testsuite/gdc.test/fail_compilation/fail223.d
! 17a695cee90e738df660838758034a05  gcc/testsuite/gdc.test/fail_compilation/fail22351.d
  799711bea752be4d7389b8f4f64279d7  gcc/testsuite/gdc.test/fail_compilation/fail22366.d
  3f3c3c715b9b751e293418c6f11a698d  gcc/testsuite/gdc.test/fail_compilation/fail224.d
  c70d7463bfe55bd7cd11bbab0f8523bd  gcc/testsuite/gdc.test/fail_compilation/fail22529.d
--- 109084,109093 ----
  9b88e4363da5c8d1e01b4b215b2046e0  gcc/testsuite/gdc.test/fail_compilation/fail22144.d
  cbeb7a9b26aace5d3509bbfc067b4244  gcc/testsuite/gdc.test/fail_compilation/fail22151.d
  4baaa5d9453baf9a29ee72423acbf8ad  gcc/testsuite/gdc.test/fail_compilation/fail22157.d
! 9b89b06dcffe6e980ba1d09f4a818e5f  gcc/testsuite/gdc.test/fail_compilation/fail222.d
  00bcf188d7c5b68cf64d99bdb6009bd7  gcc/testsuite/gdc.test/fail_compilation/fail22202.d
  928492c14b5c84fee4c14ddcc7dd2654  gcc/testsuite/gdc.test/fail_compilation/fail223.d
! b95dacd100d2b9ac249178878244ca76  gcc/testsuite/gdc.test/fail_compilation/fail22351.d
  799711bea752be4d7389b8f4f64279d7  gcc/testsuite/gdc.test/fail_compilation/fail22366.d
  3f3c3c715b9b751e293418c6f11a698d  gcc/testsuite/gdc.test/fail_compilation/fail224.d
  c70d7463bfe55bd7cd11bbab0f8523bd  gcc/testsuite/gdc.test/fail_compilation/fail22529.d
*************** faf12ba22575387527878d9b8beb717a  gcc/te
*** 109043,109049 ****
  005abf61f1ff8fb547e29dbf781b21b2  gcc/testsuite/gdc.test/fail_compilation/fail24.d
  9d576be84ed81b8a31b6a539bfd3cf7e  gcc/testsuite/gdc.test/fail_compilation/fail240.d
  9415ecf21a39f177b782dad2e58b04bf  gcc/testsuite/gdc.test/fail_compilation/fail241.d
! 26155250b1579a0e86ea27aa9ee1add9  gcc/testsuite/gdc.test/fail_compilation/fail24208.d
  3f3452eb2df7a9dbe45c71d8aa295b39  gcc/testsuite/gdc.test/fail_compilation/fail24212.d
  e58a5d9268bc70681372fdf3502f3b7e  gcc/testsuite/gdc.test/fail_compilation/fail24213.d
  7cef6791f8b6fb10fd4acaf05288fcec  gcc/testsuite/gdc.test/fail_compilation/fail24224.d
--- 109134,109140 ----
  005abf61f1ff8fb547e29dbf781b21b2  gcc/testsuite/gdc.test/fail_compilation/fail24.d
  9d576be84ed81b8a31b6a539bfd3cf7e  gcc/testsuite/gdc.test/fail_compilation/fail240.d
  9415ecf21a39f177b782dad2e58b04bf  gcc/testsuite/gdc.test/fail_compilation/fail241.d
! 58336ed8c5a2497d87e569fb020e6c48  gcc/testsuite/gdc.test/fail_compilation/fail24208.d
  3f3452eb2df7a9dbe45c71d8aa295b39  gcc/testsuite/gdc.test/fail_compilation/fail24212.d
  e58a5d9268bc70681372fdf3502f3b7e  gcc/testsuite/gdc.test/fail_compilation/fail24213.d
  7cef6791f8b6fb10fd4acaf05288fcec  gcc/testsuite/gdc.test/fail_compilation/fail24224.d
*************** bc473ab268cb5e0707cc9686d0c00c23  gcc/te
*** 109054,109060 ****
  4545d906740581bb348ff03962ffdc9c  gcc/testsuite/gdc.test/fail_compilation/fail245.d
  9ecc5bede31ac4ef6386e4f108841600  gcc/testsuite/gdc.test/fail_compilation/fail2450.d
  69ffc2366f4a0508e28232db9d0db704  gcc/testsuite/gdc.test/fail_compilation/fail2456.d
! ce3d4db7da44d83520245251d1c52b86  gcc/testsuite/gdc.test/fail_compilation/fail246.d
  958904cb5cb1e8986e403a18801ebdc8  gcc/testsuite/gdc.test/fail_compilation/fail247.d
  32fcbff00baf822bf2ce671f0392cd07  gcc/testsuite/gdc.test/fail_compilation/fail248.d
  1432abd10178e496542c8711a387ca7e  gcc/testsuite/gdc.test/fail_compilation/fail249.d
--- 109145,109151 ----
  4545d906740581bb348ff03962ffdc9c  gcc/testsuite/gdc.test/fail_compilation/fail245.d
  9ecc5bede31ac4ef6386e4f108841600  gcc/testsuite/gdc.test/fail_compilation/fail2450.d
  69ffc2366f4a0508e28232db9d0db704  gcc/testsuite/gdc.test/fail_compilation/fail2456.d
! 11df68463deaba2e88c7df71d9b7a123  gcc/testsuite/gdc.test/fail_compilation/fail246.d
  958904cb5cb1e8986e403a18801ebdc8  gcc/testsuite/gdc.test/fail_compilation/fail247.d
  32fcbff00baf822bf2ce671f0392cd07  gcc/testsuite/gdc.test/fail_compilation/fail248.d
  1432abd10178e496542c8711a387ca7e  gcc/testsuite/gdc.test/fail_compilation/fail249.d
*************** f1243a2544274acdb7b8aa344b404728  gcc/te
*** 109069,109078 ****
  f53e57a9e89cd741a5c46961166a1f5a  gcc/testsuite/gdc.test/fail_compilation/fail258.d
  d138575c329ecfa57cf9cdef90d6a04a  gcc/testsuite/gdc.test/fail_compilation/fail259.d
  8bdf284f0442d1e350010cdeee56fe59  gcc/testsuite/gdc.test/fail_compilation/fail261.d
! ab516084e0ebe83389b0d25ed5ba9c2c  gcc/testsuite/gdc.test/fail_compilation/fail262.d
  c51491aa0af86210cebf6d968db16751  gcc/testsuite/gdc.test/fail_compilation/fail263.d
  e3aaf70f1ee3ab9d4bdf647065681c97  gcc/testsuite/gdc.test/fail_compilation/fail264.d
! 39db887c3d88309df3aa3250bad00373  gcc/testsuite/gdc.test/fail_compilation/fail265.d
  66755deef86b85fc3267384c4ddaf5f5  gcc/testsuite/gdc.test/fail_compilation/fail2656.d
  6a0bb865f1c8b263df951b6b5e37a617  gcc/testsuite/gdc.test/fail_compilation/fail267.d
  b4f9f353ed280cf239cfd6c89845489d  gcc/testsuite/gdc.test/fail_compilation/fail27.d
--- 109160,109169 ----
  f53e57a9e89cd741a5c46961166a1f5a  gcc/testsuite/gdc.test/fail_compilation/fail258.d
  d138575c329ecfa57cf9cdef90d6a04a  gcc/testsuite/gdc.test/fail_compilation/fail259.d
  8bdf284f0442d1e350010cdeee56fe59  gcc/testsuite/gdc.test/fail_compilation/fail261.d
! d8adcdb0871b13abfcfe4345c8b63c09  gcc/testsuite/gdc.test/fail_compilation/fail262.d
  c51491aa0af86210cebf6d968db16751  gcc/testsuite/gdc.test/fail_compilation/fail263.d
  e3aaf70f1ee3ab9d4bdf647065681c97  gcc/testsuite/gdc.test/fail_compilation/fail264.d
! 8b03dd27970bb07b7e3da04e07a44522  gcc/testsuite/gdc.test/fail_compilation/fail265.d
  66755deef86b85fc3267384c4ddaf5f5  gcc/testsuite/gdc.test/fail_compilation/fail2656.d
  6a0bb865f1c8b263df951b6b5e37a617  gcc/testsuite/gdc.test/fail_compilation/fail267.d
  b4f9f353ed280cf239cfd6c89845489d  gcc/testsuite/gdc.test/fail_compilation/fail27.d
*************** b83368b28a1b737542921912061d84e7  gcc/te
*** 109178,109220 ****
  7e320cba69b1ca1fa0179755e3337cbc  gcc/testsuite/gdc.test/fail_compilation/fail4269f.d
  e2a4b369785e7e5d117aa961f21d213a  gcc/testsuite/gdc.test/fail_compilation/fail4269g.d
  b36f34211c127f9d14b0221649b8a60c  gcc/testsuite/gdc.test/fail_compilation/fail4374.d
! a6a77add0076b5e3ad154a22b0cfa6a4  gcc/testsuite/gdc.test/fail_compilation/fail4375a.d
! 5320abdda0b338c2df13d57990c94119  gcc/testsuite/gdc.test/fail_compilation/fail4375b.d
! 53c848c7a6607038edf0fb69e5964773  gcc/testsuite/gdc.test/fail_compilation/fail4375c.d
! b6dc946ef55f26e5f870c0bbd82c0e3e  gcc/testsuite/gdc.test/fail_compilation/fail4375d.d
! 85326c548f7ab1fc9317e4222c58dde6  gcc/testsuite/gdc.test/fail_compilation/fail4375e.d
! e7dc4809f7c94af0e5c7712ca2348ef1  gcc/testsuite/gdc.test/fail_compilation/fail4375f.d
! df830f99014a154b104125288e65efe1  gcc/testsuite/gdc.test/fail_compilation/fail4375g.d
! ecf5abd857257e5bdd8cb354c7476bc5  gcc/testsuite/gdc.test/fail_compilation/fail4375h.d
! 21ffd8a1dd8654236ebbc77a75c6f3ce  gcc/testsuite/gdc.test/fail_compilation/fail4375i.d
! bdabdda3133911bf92a2a98a2a63267f  gcc/testsuite/gdc.test/fail_compilation/fail4375j.d
! defcf63f8997b8f976d6fdd2e58e68e9  gcc/testsuite/gdc.test/fail_compilation/fail4375k.d
! 9ddfb01d759afbc910f2e88b0bd1478a  gcc/testsuite/gdc.test/fail_compilation/fail4375l.d
! 28cd530b45b084ce3af90d9840c7d9c2  gcc/testsuite/gdc.test/fail_compilation/fail4375m.d
! de747fd099a46f18978e2343e72c77ac  gcc/testsuite/gdc.test/fail_compilation/fail4375o.d
! b2f712af514c9d243b3b3395aca19ac6  gcc/testsuite/gdc.test/fail_compilation/fail4375p.d
! 3fb118810cd7e91a6285517619dc8a72  gcc/testsuite/gdc.test/fail_compilation/fail4375q.d
! e7c20eb9a3f83f9b20154ea2c720d7e1  gcc/testsuite/gdc.test/fail_compilation/fail4375r.d
! 59a945b86d2b000d7ee7eabeb48a415d  gcc/testsuite/gdc.test/fail_compilation/fail4375s.d
! 82a7d1b9f2c635ca9f2e22846c670925  gcc/testsuite/gdc.test/fail_compilation/fail4375t.d
! ba33104491c78e8f9646e3b2adfb0b1c  gcc/testsuite/gdc.test/fail_compilation/fail4375u.d
! e5f5b8c585b71fcb450e00705b24c482  gcc/testsuite/gdc.test/fail_compilation/fail4375v.d
! dfb8698771b62c207148e09fcae46f45  gcc/testsuite/gdc.test/fail_compilation/fail4375w.d
! 3b51f2991c42913dbf9c0e992b55601f  gcc/testsuite/gdc.test/fail_compilation/fail4375x.d
! b215db95df7d2f0a6817d59cadeaf153  gcc/testsuite/gdc.test/fail_compilation/fail4375y.d
  8b5986b1a1adfe08a1003f54c1595998  gcc/testsuite/gdc.test/fail_compilation/fail44.d
  b806712e121f198af2a03b93d188c515  gcc/testsuite/gdc.test/fail_compilation/fail4421.d
  db35e21cac0714ec864d1a43da5f821e  gcc/testsuite/gdc.test/fail_compilation/fail4448.d
  df7ebe1c9154e532f0eb25a288826ccb  gcc/testsuite/gdc.test/fail_compilation/fail45.d
  372cc7df83288c26deec10920b7ff241  gcc/testsuite/gdc.test/fail_compilation/fail4510.d
  a1c72712e50cfccb9828a18700353ddb  gcc/testsuite/gdc.test/fail_compilation/fail4511.d
! 0e713ba168b8da2a75c937cec4d0fc0f  gcc/testsuite/gdc.test/fail_compilation/fail4544.d
  b8da7345fe67d860f5a861a258ed75be  gcc/testsuite/gdc.test/fail_compilation/fail46.d
  12ed1d3ea012b75c6d4c8a938d10aa6b  gcc/testsuite/gdc.test/fail_compilation/fail4611.d
  02f3db206ee272f70f6c94b5621f1724  gcc/testsuite/gdc.test/fail_compilation/fail47.d
  029768f51289e2430d70ddb60913a531  gcc/testsuite/gdc.test/fail_compilation/fail4923.d
  56535cbb92d2cfd2a7cefcad0cb06450  gcc/testsuite/gdc.test/fail_compilation/fail4958.d
! 7cadc743ec6ea6990f3fc43299232b1e  gcc/testsuite/gdc.test/fail_compilation/fail50.d
  533a1731cf53e4f1f14412b77b064ebe  gcc/testsuite/gdc.test/fail_compilation/fail51.d
  e886866695de1f510d706d9a43753164  gcc/testsuite/gdc.test/fail_compilation/fail5153.d
  14fd3593221a20b67cff3c4048c0a10a  gcc/testsuite/gdc.test/fail_compilation/fail52.d
--- 109269,109311 ----
  7e320cba69b1ca1fa0179755e3337cbc  gcc/testsuite/gdc.test/fail_compilation/fail4269f.d
  e2a4b369785e7e5d117aa961f21d213a  gcc/testsuite/gdc.test/fail_compilation/fail4269g.d
  b36f34211c127f9d14b0221649b8a60c  gcc/testsuite/gdc.test/fail_compilation/fail4374.d
! 359774789d38ed1df677ff8721355b47  gcc/testsuite/gdc.test/fail_compilation/fail4375a.d
! 71da7f20768d837863562362eaa8a706  gcc/testsuite/gdc.test/fail_compilation/fail4375b.d
! 21ad01b386952943ad65e5f6e263a56b  gcc/testsuite/gdc.test/fail_compilation/fail4375c.d
! 811babe2da12911f737ef815ac92b84e  gcc/testsuite/gdc.test/fail_compilation/fail4375d.d
! e3f40a7d2a0cf280bf7ebfae447530f6  gcc/testsuite/gdc.test/fail_compilation/fail4375e.d
! 587a1ea9343057110ac3f5cc889728f7  gcc/testsuite/gdc.test/fail_compilation/fail4375f.d
! f80e25e1be08d66ea7fe5f5de3eee442  gcc/testsuite/gdc.test/fail_compilation/fail4375g.d
! 6f9addfbe185a4b39ca583245de13c7f  gcc/testsuite/gdc.test/fail_compilation/fail4375h.d
! d59f07dfa69ef4bcf7fec83371d8f9ad  gcc/testsuite/gdc.test/fail_compilation/fail4375i.d
! d8119bfa266a33676c5ee13370066eac  gcc/testsuite/gdc.test/fail_compilation/fail4375j.d
! 30caa630c31b7c91d8f7155ceb2cf96c  gcc/testsuite/gdc.test/fail_compilation/fail4375k.d
! d4413c09a37176e7ffce197c84c206b6  gcc/testsuite/gdc.test/fail_compilation/fail4375l.d
! d0b51b912d80d1d5c112fd86dee5a3c8  gcc/testsuite/gdc.test/fail_compilation/fail4375m.d
! 18fe44a65861dab2f44449a7ad337eeb  gcc/testsuite/gdc.test/fail_compilation/fail4375o.d
! 8e6163ac41e62d42c828617f0d8ccbfe  gcc/testsuite/gdc.test/fail_compilation/fail4375p.d
! 045ad89558b1defe5e1cdea04d89c202  gcc/testsuite/gdc.test/fail_compilation/fail4375q.d
! 7c95a6cc4cd1e239752a2061a777962b  gcc/testsuite/gdc.test/fail_compilation/fail4375r.d
! eb9bf8ca6a45c8af0af11f79b5ddea56  gcc/testsuite/gdc.test/fail_compilation/fail4375s.d
! 58cea4c3d55d794d57ab5bb43051ce21  gcc/testsuite/gdc.test/fail_compilation/fail4375t.d
! 81d7154e0d990a43b1b9ace4cf48d569  gcc/testsuite/gdc.test/fail_compilation/fail4375u.d
! 8c63fdbde5cd0949753cb10d8b676fdb  gcc/testsuite/gdc.test/fail_compilation/fail4375v.d
! fa3460a1a007f66b8fbd6f5a0d23e3c1  gcc/testsuite/gdc.test/fail_compilation/fail4375w.d
! bd70b8a84d54e6cf8c09e780955734f2  gcc/testsuite/gdc.test/fail_compilation/fail4375x.d
! ceb015af3aaf0e5a0f4c4cdb4b64b3e9  gcc/testsuite/gdc.test/fail_compilation/fail4375y.d
  8b5986b1a1adfe08a1003f54c1595998  gcc/testsuite/gdc.test/fail_compilation/fail44.d
  b806712e121f198af2a03b93d188c515  gcc/testsuite/gdc.test/fail_compilation/fail4421.d
  db35e21cac0714ec864d1a43da5f821e  gcc/testsuite/gdc.test/fail_compilation/fail4448.d
  df7ebe1c9154e532f0eb25a288826ccb  gcc/testsuite/gdc.test/fail_compilation/fail45.d
  372cc7df83288c26deec10920b7ff241  gcc/testsuite/gdc.test/fail_compilation/fail4510.d
  a1c72712e50cfccb9828a18700353ddb  gcc/testsuite/gdc.test/fail_compilation/fail4511.d
! d982e39361afdc509d39ee04e66fb36e  gcc/testsuite/gdc.test/fail_compilation/fail4544.d
  b8da7345fe67d860f5a861a258ed75be  gcc/testsuite/gdc.test/fail_compilation/fail46.d
  12ed1d3ea012b75c6d4c8a938d10aa6b  gcc/testsuite/gdc.test/fail_compilation/fail4611.d
  02f3db206ee272f70f6c94b5621f1724  gcc/testsuite/gdc.test/fail_compilation/fail47.d
  029768f51289e2430d70ddb60913a531  gcc/testsuite/gdc.test/fail_compilation/fail4923.d
  56535cbb92d2cfd2a7cefcad0cb06450  gcc/testsuite/gdc.test/fail_compilation/fail4958.d
! 596bf742ee4af17c2900adebc118bc10  gcc/testsuite/gdc.test/fail_compilation/fail50.d
  533a1731cf53e4f1f14412b77b064ebe  gcc/testsuite/gdc.test/fail_compilation/fail51.d
  e886866695de1f510d706d9a43753164  gcc/testsuite/gdc.test/fail_compilation/fail5153.d
  14fd3593221a20b67cff3c4048c0a10a  gcc/testsuite/gdc.test/fail_compilation/fail52.d
*************** c04bb3b9d9f2c77e67d846ea284d05c6  gcc/te
*** 109242,109248 ****
  f29d15ce0f4c155a9996ad11ee7691bf  gcc/testsuite/gdc.test/fail_compilation/fail6334.d
  0f27e8326540f5faa28936d621dc867b  gcc/testsuite/gdc.test/fail_compilation/fail6453.d
  f6ad81f6c854268ec6aa1653a1d0a713  gcc/testsuite/gdc.test/fail_compilation/fail6458.d
! 46a2608f5e1df13a86ad2188b8102307  gcc/testsuite/gdc.test/fail_compilation/fail6497.d
  611d6b962d4185ffdab95c02bc8df4e4  gcc/testsuite/gdc.test/fail_compilation/fail6561.d
  e572a3337ac147afe10e7c1be4ef0061  gcc/testsuite/gdc.test/fail_compilation/fail66.d
  9e7996a6ce93324b738d224ae2c4c197  gcc/testsuite/gdc.test/fail_compilation/fail6611.d
--- 109333,109339 ----
  f29d15ce0f4c155a9996ad11ee7691bf  gcc/testsuite/gdc.test/fail_compilation/fail6334.d
  0f27e8326540f5faa28936d621dc867b  gcc/testsuite/gdc.test/fail_compilation/fail6453.d
  f6ad81f6c854268ec6aa1653a1d0a713  gcc/testsuite/gdc.test/fail_compilation/fail6458.d
! b0f24838312fb1f983a10eca15fbf01c  gcc/testsuite/gdc.test/fail_compilation/fail6497.d
  611d6b962d4185ffdab95c02bc8df4e4  gcc/testsuite/gdc.test/fail_compilation/fail6561.d
  e572a3337ac147afe10e7c1be4ef0061  gcc/testsuite/gdc.test/fail_compilation/fail66.d
  9e7996a6ce93324b738d224ae2c4c197  gcc/testsuite/gdc.test/fail_compilation/fail6611.d
*************** b6ffbcff6f4f3bfb51ce3457ad1530b4  gcc/te
*** 109298,109304 ****
  56e98ec3743ad68aa077009f3c7f3592  gcc/testsuite/gdc.test/fail_compilation/fail8313.d
  d5a26a01b8c5824d6d0ca5676e9ed23a  gcc/testsuite/gdc.test/fail_compilation/fail8373.d
  ccbf7fe819cf48b189d76874040439fa  gcc/testsuite/gdc.test/fail_compilation/fail86.d
! 6d84ac30cad31ec993f23d912f973326  gcc/testsuite/gdc.test/fail_compilation/fail8631.d
  45ecc1b0f407c1be0cd016bb6d98e64c  gcc/testsuite/gdc.test/fail_compilation/fail8691.d
  8ce73b67eb8c02689f6c74f0c6c4193a  gcc/testsuite/gdc.test/fail_compilation/fail8724.d
  6324239509ea9f6553dfade72674d6d3  gcc/testsuite/gdc.test/fail_compilation/fail9.d
--- 109389,109395 ----
  56e98ec3743ad68aa077009f3c7f3592  gcc/testsuite/gdc.test/fail_compilation/fail8313.d
  d5a26a01b8c5824d6d0ca5676e9ed23a  gcc/testsuite/gdc.test/fail_compilation/fail8373.d
  ccbf7fe819cf48b189d76874040439fa  gcc/testsuite/gdc.test/fail_compilation/fail86.d
! 7d7ed12c71d23f7379d9bc7813c19c5a  gcc/testsuite/gdc.test/fail_compilation/fail8631.d
  45ecc1b0f407c1be0cd016bb6d98e64c  gcc/testsuite/gdc.test/fail_compilation/fail8691.d
  8ce73b67eb8c02689f6c74f0c6c4193a  gcc/testsuite/gdc.test/fail_compilation/fail8724.d
  6324239509ea9f6553dfade72674d6d3  gcc/testsuite/gdc.test/fail_compilation/fail9.d
*************** eecb48546ca01120752958343bb782c7  gcc/te
*** 109353,109367 ****
  f0f98a24874397d29f4f6e59def95d45  gcc/testsuite/gdc.test/fail_compilation/fail_contracts2.d
  2681d65bc25b4e9924747b1bcb620627  gcc/testsuite/gdc.test/fail_compilation/fail_contracts3.d
  2ba3f1515a3ee5a14f9c4466fc8caef3  gcc/testsuite/gdc.test/fail_compilation/fail_contracts4.d
  695faa3012289c1132b755b3a4e17c6b  gcc/testsuite/gdc.test/fail_compilation/fail_isZeroInit.d
  355efac6c9e5d4cfab4abe0ea13e91b5  gcc/testsuite/gdc.test/fail_compilation/fail_opover.d
! e9dc5511da50b00888d9bd3b1b1ee69e  gcc/testsuite/gdc.test/fail_compilation/fail_pretty_errors.d
  2283d23cdf2b6ba522578c516a9457eb  gcc/testsuite/gdc.test/fail_compilation/fail_scope.d
  60c11097cde97ed1a0d56db913d545cd  gcc/testsuite/gdc.test/fail_compilation/fail_typeof.d
  1c155fc73fa20eef8b42028af054656e  gcc/testsuite/gdc.test/fail_compilation/failattr.d
  ace42ed977e08959eda339a9ad9e9397  gcc/testsuite/gdc.test/fail_compilation/failcontracts.d
  ed790d31dcec49050e526f717b7525f2  gcc/testsuite/gdc.test/fail_compilation/faildottypeinfo.d
  acd4dc01e2f625f440ffb85c36b0bdd8  gcc/testsuite/gdc.test/fail_compilation/failescape.d
  572be48d5a0a5235990cd885758cfa21  gcc/testsuite/gdc.test/fail_compilation/failinout1.d
  d10e2cbb7d05c7fc6b72017ac15d0380  gcc/testsuite/gdc.test/fail_compilation/failinout2.d
  903af167e01111a4b04e269bf83653a9  gcc/testsuite/gdc.test/fail_compilation/failob1.d
--- 109444,109463 ----
  f0f98a24874397d29f4f6e59def95d45  gcc/testsuite/gdc.test/fail_compilation/fail_contracts2.d
  2681d65bc25b4e9924747b1bcb620627  gcc/testsuite/gdc.test/fail_compilation/fail_contracts3.d
  2ba3f1515a3ee5a14f9c4466fc8caef3  gcc/testsuite/gdc.test/fail_compilation/fail_contracts4.d
+ 55f8fc64a438163d1c5b893ad4cd60d3  gcc/testsuite/gdc.test/fail_compilation/fail_contracts5.d
  695faa3012289c1132b755b3a4e17c6b  gcc/testsuite/gdc.test/fail_compilation/fail_isZeroInit.d
  355efac6c9e5d4cfab4abe0ea13e91b5  gcc/testsuite/gdc.test/fail_compilation/fail_opover.d
! bfcbfa85e5315ed47bf323f28aba6c7a  gcc/testsuite/gdc.test/fail_compilation/fail_pretty_errors.d
  2283d23cdf2b6ba522578c516a9457eb  gcc/testsuite/gdc.test/fail_compilation/fail_scope.d
  60c11097cde97ed1a0d56db913d545cd  gcc/testsuite/gdc.test/fail_compilation/fail_typeof.d
  1c155fc73fa20eef8b42028af054656e  gcc/testsuite/gdc.test/fail_compilation/failattr.d
  ace42ed977e08959eda339a9ad9e9397  gcc/testsuite/gdc.test/fail_compilation/failcontracts.d
  ed790d31dcec49050e526f717b7525f2  gcc/testsuite/gdc.test/fail_compilation/faildottypeinfo.d
  acd4dc01e2f625f440ffb85c36b0bdd8  gcc/testsuite/gdc.test/fail_compilation/failescape.d
+ af75b79d6d542c788467a2f89d174463  gcc/testsuite/gdc.test/fail_compilation/failexpression1.d
+ d0ab681eebdc006f0e465ef97fea7194  gcc/testsuite/gdc.test/fail_compilation/failexpression2.d
+ 0bbca34b7836256a551b1a0a94e3c820  gcc/testsuite/gdc.test/fail_compilation/failexpression3.d
+ 2e97ac5db0fe0c5e9729fcff58baecc7  gcc/testsuite/gdc.test/fail_compilation/failexpression4.d
  572be48d5a0a5235990cd885758cfa21  gcc/testsuite/gdc.test/fail_compilation/failinout1.d
  d10e2cbb7d05c7fc6b72017ac15d0380  gcc/testsuite/gdc.test/fail_compilation/failinout2.d
  903af167e01111a4b04e269bf83653a9  gcc/testsuite/gdc.test/fail_compilation/failob1.d
*************** f4410cf62c66bd36b26cfd923568793c  gcc/te
*** 109498,109504 ****
  2758dd2a496a5538d3b0f220c968d7c2  gcc/testsuite/gdc.test/fail_compilation/ice13563.d
  e119a3d6ce481c2065b18f9d8e145b75  gcc/testsuite/gdc.test/fail_compilation/ice1358.d
  b473d2ba80b6e6fbd7c11a673e4c822d  gcc/testsuite/gdc.test/fail_compilation/ice13644.d
! 0d9c63a4372887fa2c9ddfabef18be5e  gcc/testsuite/gdc.test/fail_compilation/ice13788.d
  1d17aa4e231fc30eec7c34f0c354d3cc  gcc/testsuite/gdc.test/fail_compilation/ice13816.d
  92a72287950ae5199eac2b586d1aab4a  gcc/testsuite/gdc.test/fail_compilation/ice13835.d
  536656bafa8e999ecd89a1eb9af4e1c9  gcc/testsuite/gdc.test/fail_compilation/ice13921.d
--- 109594,109600 ----
  2758dd2a496a5538d3b0f220c968d7c2  gcc/testsuite/gdc.test/fail_compilation/ice13563.d
  e119a3d6ce481c2065b18f9d8e145b75  gcc/testsuite/gdc.test/fail_compilation/ice1358.d
  b473d2ba80b6e6fbd7c11a673e4c822d  gcc/testsuite/gdc.test/fail_compilation/ice13644.d
! 163f4c71e12d6932e6e547d1f7c8f581  gcc/testsuite/gdc.test/fail_compilation/ice13788.d
  1d17aa4e231fc30eec7c34f0c354d3cc  gcc/testsuite/gdc.test/fail_compilation/ice13816.d
  92a72287950ae5199eac2b586d1aab4a  gcc/testsuite/gdc.test/fail_compilation/ice13835.d
  536656bafa8e999ecd89a1eb9af4e1c9  gcc/testsuite/gdc.test/fail_compilation/ice13921.d
*************** d827a7d6476666f5353bab5882e65beb  gcc/te
*** 109549,109555 ****
  ebda3059f679d68e2bdd1d9fe3e11b64  gcc/testsuite/gdc.test/fail_compilation/ice20545.d
  dae5b57cc66ee7160f7c95b7b14c4e59  gcc/testsuite/gdc.test/fail_compilation/ice20709.d
  1ee2df9e731e72df6ec1774356fb21e5  gcc/testsuite/gdc.test/fail_compilation/ice21060.d
! 40cfc62ac063a12983ebf0b7179dc795  gcc/testsuite/gdc.test/fail_compilation/ice21095.d
  dd03e8f95c7b9f9ded099f36b1b80d2e  gcc/testsuite/gdc.test/fail_compilation/ice22377.d
  53849f1b76fa5b798b4ea5844160c304  gcc/testsuite/gdc.test/fail_compilation/ice22516.d
  1e48f4276f0b7c78ec2ef90c9a2a6409  gcc/testsuite/gdc.test/fail_compilation/ice23097.d
--- 109645,109651 ----
  ebda3059f679d68e2bdd1d9fe3e11b64  gcc/testsuite/gdc.test/fail_compilation/ice20545.d
  dae5b57cc66ee7160f7c95b7b14c4e59  gcc/testsuite/gdc.test/fail_compilation/ice20709.d
  1ee2df9e731e72df6ec1774356fb21e5  gcc/testsuite/gdc.test/fail_compilation/ice21060.d
! f617e48adf4e8a8750523ce202b8c972  gcc/testsuite/gdc.test/fail_compilation/ice21095.d
  dd03e8f95c7b9f9ded099f36b1b80d2e  gcc/testsuite/gdc.test/fail_compilation/ice22377.d
  53849f1b76fa5b798b4ea5844160c304  gcc/testsuite/gdc.test/fail_compilation/ice22516.d
  1e48f4276f0b7c78ec2ef90c9a2a6409  gcc/testsuite/gdc.test/fail_compilation/ice23097.d
*************** f1d18a3fe42974d8d7e5230df6193002  gcc/te
*** 109573,109587 ****
  a72d7818b33e56375506b6e64ac406c5  gcc/testsuite/gdc.test/fail_compilation/ice8630.d
  1599cbd4b0e9add398e1d1051109e7c7  gcc/testsuite/gdc.test/fail_compilation/ice8711.d
  f5ec039f130aa503ee1ebd140f2ceb58  gcc/testsuite/gdc.test/fail_compilation/ice8742.d
! a06acda90b21b73471f1b9fa3563fa57  gcc/testsuite/gdc.test/fail_compilation/ice8795.d
  8f5543f8be1f11d20a7f6886ffbfbf3e  gcc/testsuite/gdc.test/fail_compilation/ice8795b.d
  d4e8397015cc5d6f1e004c0dbd64cd2a  gcc/testsuite/gdc.test/fail_compilation/ice9013.d
  76a05de4307636d40489d0bc2f3cda66  gcc/testsuite/gdc.test/fail_compilation/ice9254a.d
  446455d0c6069f1e8102e7017c0dfd3a  gcc/testsuite/gdc.test/fail_compilation/ice9254b.d
  223503f61ab56f07a89ea8848b5381e8  gcc/testsuite/gdc.test/fail_compilation/ice9254c.d
! c0168cedd088e2e9a5a07f337acc63c3  gcc/testsuite/gdc.test/fail_compilation/ice9273a.d
  c0748d027ca80dcd3c1826ef09692f1e  gcc/testsuite/gdc.test/fail_compilation/ice9273b.d
! 2b7f916901da05be763c61b948b713fc  gcc/testsuite/gdc.test/fail_compilation/ice9284.d
  5c1b7a696de91f0fac6d8de5c8e96d1d  gcc/testsuite/gdc.test/fail_compilation/ice9291.d
  8ee1a73207f2a559dc4eb4319ced5fd5  gcc/testsuite/gdc.test/fail_compilation/ice9338.d
  d9c3d3cfa31c4cd511e7d18c830e4f8e  gcc/testsuite/gdc.test/fail_compilation/ice9406.d
--- 109669,109683 ----
  a72d7818b33e56375506b6e64ac406c5  gcc/testsuite/gdc.test/fail_compilation/ice8630.d
  1599cbd4b0e9add398e1d1051109e7c7  gcc/testsuite/gdc.test/fail_compilation/ice8711.d
  f5ec039f130aa503ee1ebd140f2ceb58  gcc/testsuite/gdc.test/fail_compilation/ice8742.d
! 9c778c87328b2b5dd081d93fd28345ec  gcc/testsuite/gdc.test/fail_compilation/ice8795.d
  8f5543f8be1f11d20a7f6886ffbfbf3e  gcc/testsuite/gdc.test/fail_compilation/ice8795b.d
  d4e8397015cc5d6f1e004c0dbd64cd2a  gcc/testsuite/gdc.test/fail_compilation/ice9013.d
  76a05de4307636d40489d0bc2f3cda66  gcc/testsuite/gdc.test/fail_compilation/ice9254a.d
  446455d0c6069f1e8102e7017c0dfd3a  gcc/testsuite/gdc.test/fail_compilation/ice9254b.d
  223503f61ab56f07a89ea8848b5381e8  gcc/testsuite/gdc.test/fail_compilation/ice9254c.d
! 9cd50131605a0c79c078b5063b323b12  gcc/testsuite/gdc.test/fail_compilation/ice9273a.d
  c0748d027ca80dcd3c1826ef09692f1e  gcc/testsuite/gdc.test/fail_compilation/ice9273b.d
! b95a2aa86672167e417e09fc1726afb7  gcc/testsuite/gdc.test/fail_compilation/ice9284.d
  5c1b7a696de91f0fac6d8de5c8e96d1d  gcc/testsuite/gdc.test/fail_compilation/ice9291.d
  8ee1a73207f2a559dc4eb4319ced5fd5  gcc/testsuite/gdc.test/fail_compilation/ice9338.d
  d9c3d3cfa31c4cd511e7d18c830e4f8e  gcc/testsuite/gdc.test/fail_compilation/ice9406.d
*************** fce681bb0ca8dad5487bd5cf765fcdf5  gcc/te
*** 109775,109786 ****
  07bc74400179127a583ed61d954e6d7e  gcc/testsuite/gdc.test/fail_compilation/issue20422.d
  c8588a8b31371e3131bc1cc2a02c19cd  gcc/testsuite/gdc.test/fail_compilation/issue20627.d
  d2875d10c258a543f59d109b93dab083  gcc/testsuite/gdc.test/fail_compilation/issue20704.d
! 228c0e856fef257f01690c217369e065  gcc/testsuite/gdc.test/fail_compilation/issue21203.d
  e5a789aee346b0176c7893f97233f1f3  gcc/testsuite/gdc.test/fail_compilation/issue21295.d
  aaacbe0abd96d4ce739e14a25d356bbd  gcc/testsuite/gdc.test/fail_compilation/issue21378.d
  854df194f5d491deff843077eca6f69b  gcc/testsuite/gdc.test/fail_compilation/issue21630.d
  5e735bf467996700e9f93b3e9a3cc62a  gcc/testsuite/gdc.test/fail_compilation/issue21685_main.d
! d49468106948994ead5dcae315f26258  gcc/testsuite/gdc.test/fail_compilation/issue22682.d
  05250fe726a80770dd7390818c7b0e6d  gcc/testsuite/gdc.test/fail_compilation/issue22820.d
  7361ba00652a7bb222f77b6d44a96921  gcc/testsuite/gdc.test/fail_compilation/issue22826.d
  ef6df1f550d6df9e01d4ed57c279827c  gcc/testsuite/gdc.test/fail_compilation/issue23947.d
--- 109871,109882 ----
  07bc74400179127a583ed61d954e6d7e  gcc/testsuite/gdc.test/fail_compilation/issue20422.d
  c8588a8b31371e3131bc1cc2a02c19cd  gcc/testsuite/gdc.test/fail_compilation/issue20627.d
  d2875d10c258a543f59d109b93dab083  gcc/testsuite/gdc.test/fail_compilation/issue20704.d
! 4fad08014a2b160718bb257c5432ac34  gcc/testsuite/gdc.test/fail_compilation/issue21203.d
  e5a789aee346b0176c7893f97233f1f3  gcc/testsuite/gdc.test/fail_compilation/issue21295.d
  aaacbe0abd96d4ce739e14a25d356bbd  gcc/testsuite/gdc.test/fail_compilation/issue21378.d
  854df194f5d491deff843077eca6f69b  gcc/testsuite/gdc.test/fail_compilation/issue21630.d
  5e735bf467996700e9f93b3e9a3cc62a  gcc/testsuite/gdc.test/fail_compilation/issue21685_main.d
! 35de435491f03c8d32d42ab649b73de6  gcc/testsuite/gdc.test/fail_compilation/issue22682.d
  05250fe726a80770dd7390818c7b0e6d  gcc/testsuite/gdc.test/fail_compilation/issue22820.d
  7361ba00652a7bb222f77b6d44a96921  gcc/testsuite/gdc.test/fail_compilation/issue22826.d
  ef6df1f550d6df9e01d4ed57c279827c  gcc/testsuite/gdc.test/fail_compilation/issue23947.d
*************** ef6df1f550d6df9e01d4ed57c279827c  gcc/te
*** 109789,109801 ****
  04d180b470676e31d8579754e2e55b77  gcc/testsuite/gdc.test/fail_compilation/issue3827.d
  77a67d4481f814edc69c8149321382ab  gcc/testsuite/gdc.test/fail_compilation/lexer1.d
  a75e40834d3b5aa675ddd5a60e5cd8dc  gcc/testsuite/gdc.test/fail_compilation/lexer2.d
! 55cef34e2e7728b6687fabe1c1a151c6  gcc/testsuite/gdc.test/fail_compilation/lexer23465.d
  1b0ba9e5ad50d6b299ef210908b26e3e  gcc/testsuite/gdc.test/fail_compilation/lexer3.d
  557d677b95a4a0b4e3e7b77d346fa2ff  gcc/testsuite/gdc.test/fail_compilation/lexer4.d
  7584ac4b37f6c87f445085c8ea8c741a  gcc/testsuite/gdc.test/fail_compilation/lookup.d
  7ea7a0f4d8242cca72bdd431719ef39c  gcc/testsuite/gdc.test/fail_compilation/main.d
! 338c9d9e082bb433d33a8ce50efb3e33  gcc/testsuite/gdc.test/fail_compilation/mangle1.d
! be5e933601ad80e3e77222d915fcb11b  gcc/testsuite/gdc.test/fail_compilation/mangle2.d
  aa7959bf4f9e4608cf4df558e66bdc0c  gcc/testsuite/gdc.test/fail_compilation/match_func_ptr.d
  a052c68cea0f592ba39a328c0c0d4890  gcc/testsuite/gdc.test/fail_compilation/misc1.d
  66a8707248a59cc887156f205a1377c7  gcc/testsuite/gdc.test/fail_compilation/misc_parser_err_cov1.d
--- 109885,109897 ----
  04d180b470676e31d8579754e2e55b77  gcc/testsuite/gdc.test/fail_compilation/issue3827.d
  77a67d4481f814edc69c8149321382ab  gcc/testsuite/gdc.test/fail_compilation/lexer1.d
  a75e40834d3b5aa675ddd5a60e5cd8dc  gcc/testsuite/gdc.test/fail_compilation/lexer2.d
! fbd472c25982c3f31c96310ebff7c859  gcc/testsuite/gdc.test/fail_compilation/lexer23465.d
  1b0ba9e5ad50d6b299ef210908b26e3e  gcc/testsuite/gdc.test/fail_compilation/lexer3.d
  557d677b95a4a0b4e3e7b77d346fa2ff  gcc/testsuite/gdc.test/fail_compilation/lexer4.d
  7584ac4b37f6c87f445085c8ea8c741a  gcc/testsuite/gdc.test/fail_compilation/lookup.d
  7ea7a0f4d8242cca72bdd431719ef39c  gcc/testsuite/gdc.test/fail_compilation/main.d
! 3e4f4eaff877cb2b0ece48a4a4e54846  gcc/testsuite/gdc.test/fail_compilation/mangle1.d
! 2e3fda54d38f526771c20e8b22f5b9c3  gcc/testsuite/gdc.test/fail_compilation/mangle2.d
  aa7959bf4f9e4608cf4df558e66bdc0c  gcc/testsuite/gdc.test/fail_compilation/match_func_ptr.d
  a052c68cea0f592ba39a328c0c0d4890  gcc/testsuite/gdc.test/fail_compilation/misc1.d
  66a8707248a59cc887156f205a1377c7  gcc/testsuite/gdc.test/fail_compilation/misc_parser_err_cov1.d
*************** e6f22eab255ad6a3bc7b96076d62384d  gcc/te
*** 109839,109844 ****
--- 109935,109941 ----
  54c3e40c2f577452e4ffde1fb0db393b  gcc/testsuite/gdc.test/fail_compilation/objc_non_objc_base.d
  0dba5247b8f429bf27b0311f558c227b  gcc/testsuite/gdc.test/fail_compilation/obsolete_body.d
  6c4deb58342e6a1a2b351f73fa8c4f97  gcc/testsuite/gdc.test/fail_compilation/onemember_overloads.d
+ fa75c5126db4ae360bb0fd5c121d5b35  gcc/testsuite/gdc.test/fail_compilation/opApply_return.d
  e8a7092a20a82ff75635096eb2e03e45  gcc/testsuite/gdc.test/fail_compilation/opapplyscope.d
  dc1972e145637c533a9fbfda955ca842  gcc/testsuite/gdc.test/fail_compilation/operator_undefined.d
  ac62ca9815f00728734800e1420ea208  gcc/testsuite/gdc.test/fail_compilation/parse12924.d
*************** ee0f98e38d945599e338a3fc8d2939ed  gcc/te
*** 109853,109861 ****
  a24e5adcec9c683ee389ab4bc66da146  gcc/testsuite/gdc.test/fail_compilation/parseStc3.d
  4585f217a5b7f8b8a09b84af0dbe2331  gcc/testsuite/gdc.test/fail_compilation/parseStc4.d
  d5b5218a5830b17dea35dac53b8ca8eb  gcc/testsuite/gdc.test/fail_compilation/parseStc5.d
! 733b6a81eb3284b65aec3404ccf70c49  gcc/testsuite/gdc.test/fail_compilation/placenew.d
  5d8dd901e9476cc938a20da432cdbf5a  gcc/testsuite/gdc.test/fail_compilation/powinline.d
  43ab37c4d5efd97e06d285a38b720f23  gcc/testsuite/gdc.test/fail_compilation/pragmainline.d
  09d77fef387a40a2dc7be60ba6549cd4  gcc/testsuite/gdc.test/fail_compilation/pragmas.d
  7489e6908bbee6fd810934fc7b240c17  gcc/testsuite/gdc.test/fail_compilation/previewin.d
  e9591afbb23d08ca6fcc7528a818e61e  gcc/testsuite/gdc.test/fail_compilation/previewin2.d
--- 109950,109960 ----
  a24e5adcec9c683ee389ab4bc66da146  gcc/testsuite/gdc.test/fail_compilation/parseStc3.d
  4585f217a5b7f8b8a09b84af0dbe2331  gcc/testsuite/gdc.test/fail_compilation/parseStc4.d
  d5b5218a5830b17dea35dac53b8ca8eb  gcc/testsuite/gdc.test/fail_compilation/parseStc5.d
! 358b7cc49af8f089798e26ccab332d38  gcc/testsuite/gdc.test/fail_compilation/placenew.d
  5d8dd901e9476cc938a20da432cdbf5a  gcc/testsuite/gdc.test/fail_compilation/powinline.d
  43ab37c4d5efd97e06d285a38b720f23  gcc/testsuite/gdc.test/fail_compilation/pragmainline.d
+ 9bf141ce98f461f3e65192d250b7f3f5  gcc/testsuite/gdc.test/fail_compilation/pragmamangle1.d
+ 8f583fe0a591f7b88d262d52b1d43783  gcc/testsuite/gdc.test/fail_compilation/pragmamangle2.d
  09d77fef387a40a2dc7be60ba6549cd4  gcc/testsuite/gdc.test/fail_compilation/pragmas.d
  7489e6908bbee6fd810934fc7b240c17  gcc/testsuite/gdc.test/fail_compilation/previewin.d
  e9591afbb23d08ca6fcc7528a818e61e  gcc/testsuite/gdc.test/fail_compilation/previewin2.d
*************** f94f5f9027598b10a0c7aa36cd12574d  gcc/te
*** 109868,109886 ****
  9d01f4975a479fc715251f6173ce5c4c  gcc/testsuite/gdc.test/fail_compilation/protection/subpkg/test3.d
  01e7ae9e272c37e8cd162f3bc68ffc81  gcc/testsuite/gdc.test/fail_compilation/pull12941.d
  3fd870b41855f158c759eee9a2348829  gcc/testsuite/gdc.test/fail_compilation/reg6769.d
! 7b56679ad0770046341daf04b879dc88  gcc/testsuite/gdc.test/fail_compilation/reserved_version.d
! d19555913a2a7f695f98431f21e7a6d4  gcc/testsuite/gdc.test/fail_compilation/reserved_version_switch.d
! d5062e115ef69ab22915d0a248e0cb6d  gcc/testsuite/gdc.test/fail_compilation/retref2.d
! d5ed426f484b4fbc678be7d4de91a7ef  gcc/testsuite/gdc.test/fail_compilation/retscope.d
! 3505419d9912209a0e57c90d2ef39f2b  gcc/testsuite/gdc.test/fail_compilation/retscope2.d
  89e875679059aff5312602341e8390de  gcc/testsuite/gdc.test/fail_compilation/retscope3.d
  c6c07f896e1602e3555f770e5cb6de5e  gcc/testsuite/gdc.test/fail_compilation/retscope4.d
  e55a97e747a3f09f3c5eb297c5565a5d  gcc/testsuite/gdc.test/fail_compilation/retscope5.d
! 7cfac0c66c1c0d8243c0a9f4d5efff94  gcc/testsuite/gdc.test/fail_compilation/retscope6.d
  254594a2581eb8a14c47d11156b50356  gcc/testsuite/gdc.test/fail_compilation/safe_gshared.d
  09cb1c43f1595719bb2f2f59047c6969  gcc/testsuite/gdc.test/fail_compilation/safe_pointer_index.d
  2b37237676e0fa2ce594762f8609768c  gcc/testsuite/gdc.test/fail_compilation/safer.d
  b1afbd31bbf1526499dfe85a03975c14  gcc/testsuite/gdc.test/fail_compilation/scope_class.d
  da54a1d44613ea21dc18df6ca44291ca  gcc/testsuite/gdc.test/fail_compilation/seq_assign.d
  1eaa4eb758f73274cdce250861ba6504  gcc/testsuite/gdc.test/fail_compilation/shared.d
  2527ab167212803bc195b044a6399540  gcc/testsuite/gdc.test/fail_compilation/short_fn.d
--- 109967,109987 ----
  9d01f4975a479fc715251f6173ce5c4c  gcc/testsuite/gdc.test/fail_compilation/protection/subpkg/test3.d
  01e7ae9e272c37e8cd162f3bc68ffc81  gcc/testsuite/gdc.test/fail_compilation/pull12941.d
  3fd870b41855f158c759eee9a2348829  gcc/testsuite/gdc.test/fail_compilation/reg6769.d
! bd2469aa7537fa379eec42b570267b1f  gcc/testsuite/gdc.test/fail_compilation/reserved_version.d
! 8d785aee8c9a7a3be6ac362eecafb236  gcc/testsuite/gdc.test/fail_compilation/reserved_version_switch.d
! e96eff7f9ea26c15a8cb419dae8e0308  gcc/testsuite/gdc.test/fail_compilation/retref2.d
! 5ad6ba415b8dce2c63d1d87499a08c9c  gcc/testsuite/gdc.test/fail_compilation/retscope.d
! 7441e0d6d591b7d658d05962c59bc329  gcc/testsuite/gdc.test/fail_compilation/retscope2.d
  89e875679059aff5312602341e8390de  gcc/testsuite/gdc.test/fail_compilation/retscope3.d
  c6c07f896e1602e3555f770e5cb6de5e  gcc/testsuite/gdc.test/fail_compilation/retscope4.d
  e55a97e747a3f09f3c5eb297c5565a5d  gcc/testsuite/gdc.test/fail_compilation/retscope5.d
! 46866ed78c32675dadbd4c0900888a83  gcc/testsuite/gdc.test/fail_compilation/retscope6.d
  254594a2581eb8a14c47d11156b50356  gcc/testsuite/gdc.test/fail_compilation/safe_gshared.d
  09cb1c43f1595719bb2f2f59047c6969  gcc/testsuite/gdc.test/fail_compilation/safe_pointer_index.d
+ 82caab826341c98cafc0fa9baeb52544  gcc/testsuite/gdc.test/fail_compilation/safeprintf.d
  2b37237676e0fa2ce594762f8609768c  gcc/testsuite/gdc.test/fail_compilation/safer.d
  b1afbd31bbf1526499dfe85a03975c14  gcc/testsuite/gdc.test/fail_compilation/scope_class.d
+ d488d6ef0241ca2d2262296455c8aa00  gcc/testsuite/gdc.test/fail_compilation/scope_infer_diagnostic.d
  da54a1d44613ea21dc18df6ca44291ca  gcc/testsuite/gdc.test/fail_compilation/seq_assign.d
  1eaa4eb758f73274cdce250861ba6504  gcc/testsuite/gdc.test/fail_compilation/shared.d
  2527ab167212803bc195b044a6399540  gcc/testsuite/gdc.test/fail_compilation/short_fn.d
*************** ebf9f85aa55db723285fc238129499dd  gcc/te
*** 109904,109910 ****
  0a97056007b19f0f600780027d668534  gcc/testsuite/gdc.test/fail_compilation/systemvariables_bool_union.d
  4d3bbfb005e11b983f9c9ad6ae801e6a  gcc/testsuite/gdc.test/fail_compilation/systemvariables_deprecation.d
  f82b6da2768bbff9765ed0cafd46e365  gcc/testsuite/gdc.test/fail_compilation/systemvariables_struct.d
! 6903054925e5f74bba6e140adbbed90f  gcc/testsuite/gdc.test/fail_compilation/systemvariables_void_init.d
  06ab513440210a7e6b60cbd7d241bf27  gcc/testsuite/gdc.test/fail_compilation/template_decl.d
  59893c6db292d244f3c5c61865fd8a19  gcc/testsuite/gdc.test/fail_compilation/template_enum_param.d
  1db4effe1e14a05bdf23041766b88914  gcc/testsuite/gdc.test/fail_compilation/templateoverload.d
--- 110005,110011 ----
  0a97056007b19f0f600780027d668534  gcc/testsuite/gdc.test/fail_compilation/systemvariables_bool_union.d
  4d3bbfb005e11b983f9c9ad6ae801e6a  gcc/testsuite/gdc.test/fail_compilation/systemvariables_deprecation.d
  f82b6da2768bbff9765ed0cafd46e365  gcc/testsuite/gdc.test/fail_compilation/systemvariables_struct.d
! 5f4a669fdac0be95ceffec221bd854fb  gcc/testsuite/gdc.test/fail_compilation/systemvariables_void_init.d
  06ab513440210a7e6b60cbd7d241bf27  gcc/testsuite/gdc.test/fail_compilation/template_decl.d
  59893c6db292d244f3c5c61865fd8a19  gcc/testsuite/gdc.test/fail_compilation/template_enum_param.d
  1db4effe1e14a05bdf23041766b88914  gcc/testsuite/gdc.test/fail_compilation/templateoverload.d
*************** b1a863df2965ab06a1e78f8741936e04  gcc/te
*** 109924,109930 ****
  1fe5a5f7acf96de804bfd5372d4b0615  gcc/testsuite/gdc.test/fail_compilation/test13537.d
  eb86a3dc5c2a6e231593c5b6568bbc49  gcc/testsuite/gdc.test/fail_compilation/test13667.d
  d4ead4ef35f8e5970693ce6d9d61e67f  gcc/testsuite/gdc.test/fail_compilation/test13786.d
! dc5f6694b899c5b4017bfc9931164527  gcc/testsuite/gdc.test/fail_compilation/test13867.d
  2be07367077526f2bb6da860b9b81128  gcc/testsuite/gdc.test/fail_compilation/test14064.d
  5c21e42bbfb80c1b4ab9c9a468814413  gcc/testsuite/gdc.test/fail_compilation/test14238.d
  3fd9f21ffc0d2cd25d288f630210d963  gcc/testsuite/gdc.test/fail_compilation/test143.d
--- 110025,110031 ----
  1fe5a5f7acf96de804bfd5372d4b0615  gcc/testsuite/gdc.test/fail_compilation/test13537.d
  eb86a3dc5c2a6e231593c5b6568bbc49  gcc/testsuite/gdc.test/fail_compilation/test13667.d
  d4ead4ef35f8e5970693ce6d9d61e67f  gcc/testsuite/gdc.test/fail_compilation/test13786.d
! f9ff185ff6307e53e8ba9a46a872e1dd  gcc/testsuite/gdc.test/fail_compilation/test13867.d
  2be07367077526f2bb6da860b9b81128  gcc/testsuite/gdc.test/fail_compilation/test14064.d
  5c21e42bbfb80c1b4ab9c9a468814413  gcc/testsuite/gdc.test/fail_compilation/test14238.d
  3fd9f21ffc0d2cd25d288f630210d963  gcc/testsuite/gdc.test/fail_compilation/test143.d
*************** d1333de570b9babff543dfaf034537b6  gcc/te
*** 109949,109955 ****
  354253f1e66ec1fe548eccab81bc5f8a  gcc/testsuite/gdc.test/fail_compilation/test15989.d
  d1adfc9174aa950f68215afdfe2e8b10  gcc/testsuite/gdc.test/fail_compilation/test16095.d
  66fc24a8ca5e79401240720959999b8a  gcc/testsuite/gdc.test/fail_compilation/test16116.d
! 9408875bf389e4228e497737f7f45723  gcc/testsuite/gdc.test/fail_compilation/test16188.d
  6e579f7ca485d44546bbddd452c16d62  gcc/testsuite/gdc.test/fail_compilation/test16193.d
  e5b046140d8851a5d422294abc065485  gcc/testsuite/gdc.test/fail_compilation/test16228.d
  03f0d7df123861dc23fb282e1a4a844f  gcc/testsuite/gdc.test/fail_compilation/test16284.d
--- 110050,110056 ----
  354253f1e66ec1fe548eccab81bc5f8a  gcc/testsuite/gdc.test/fail_compilation/test15989.d
  d1adfc9174aa950f68215afdfe2e8b10  gcc/testsuite/gdc.test/fail_compilation/test16095.d
  66fc24a8ca5e79401240720959999b8a  gcc/testsuite/gdc.test/fail_compilation/test16116.d
! 2898246d056e427aa8055eb50d131a41  gcc/testsuite/gdc.test/fail_compilation/test16188.d
  6e579f7ca485d44546bbddd452c16d62  gcc/testsuite/gdc.test/fail_compilation/test16193.d
  e5b046140d8851a5d422294abc065485  gcc/testsuite/gdc.test/fail_compilation/test16228.d
  03f0d7df123861dc23fb282e1a4a844f  gcc/testsuite/gdc.test/fail_compilation/test16284.d
*************** e0a809992bf27ecb5271695352b3ac48  gcc/te
*** 109961,109972 ****
  7966870826334ea54a59a94ef8dcb091  gcc/testsuite/gdc.test/fail_compilation/test16589.d
  86569ab8185a8567150068a8b7844fd6  gcc/testsuite/gdc.test/fail_compilation/test16694.d
  98abfadab22f6825df1b455b2e0c527c  gcc/testsuite/gdc.test/fail_compilation/test17096.d
! 3b278caf60ea746872cb90ac39fa14ad  gcc/testsuite/gdc.test/fail_compilation/test17284.d
  5a27a426fc0054795467c4c6257ec60a  gcc/testsuite/gdc.test/fail_compilation/test17307.d
  3b214d273aa841f50cc8a1e86597be18  gcc/testsuite/gdc.test/fail_compilation/test17380.d
  0822e934d4c677c1a8e2509f54c3dbf0  gcc/testsuite/gdc.test/fail_compilation/test17380spec.d
! 76c9e8311348b3478225804459e608a3  gcc/testsuite/gdc.test/fail_compilation/test17422.d
! 2830cf192598aecbd7d68586fd16f3ab  gcc/testsuite/gdc.test/fail_compilation/test17423.d
  c0d67198dbf86e2d1c77c70a61959cda  gcc/testsuite/gdc.test/fail_compilation/test17425.d
  d58b557515434087e0e9f710866590a0  gcc/testsuite/gdc.test/fail_compilation/test17450.d
  c393b650cec6437b218d580e31495c49  gcc/testsuite/gdc.test/fail_compilation/test17451.d
--- 110062,110073 ----
  7966870826334ea54a59a94ef8dcb091  gcc/testsuite/gdc.test/fail_compilation/test16589.d
  86569ab8185a8567150068a8b7844fd6  gcc/testsuite/gdc.test/fail_compilation/test16694.d
  98abfadab22f6825df1b455b2e0c527c  gcc/testsuite/gdc.test/fail_compilation/test17096.d
! 9e20216562d1c2ca425260c42f9e2fb4  gcc/testsuite/gdc.test/fail_compilation/test17284.d
  5a27a426fc0054795467c4c6257ec60a  gcc/testsuite/gdc.test/fail_compilation/test17307.d
  3b214d273aa841f50cc8a1e86597be18  gcc/testsuite/gdc.test/fail_compilation/test17380.d
  0822e934d4c677c1a8e2509f54c3dbf0  gcc/testsuite/gdc.test/fail_compilation/test17380spec.d
! d536a638cb08fb0ba0693cfef97dc96e  gcc/testsuite/gdc.test/fail_compilation/test17422.d
! 0b31d5e6d5e319d618fb54101ec5c926  gcc/testsuite/gdc.test/fail_compilation/test17423.d
  c0d67198dbf86e2d1c77c70a61959cda  gcc/testsuite/gdc.test/fail_compilation/test17425.d
  d58b557515434087e0e9f710866590a0  gcc/testsuite/gdc.test/fail_compilation/test17450.d
  c393b650cec6437b218d580e31495c49  gcc/testsuite/gdc.test/fail_compilation/test17451.d
*************** f79ff08f6a4f8c6756261d3e8abd2c0b  gcc/te
*** 109981,109987 ****
  e5254335118841d78547e28e44099554  gcc/testsuite/gdc.test/fail_compilation/test17977.d
  b2935056546224cf8dc2e78a225995a1  gcc/testsuite/gdc.test/fail_compilation/test18127.d
  3dedce972ccebf636e59731359e082a2  gcc/testsuite/gdc.test/fail_compilation/test18130.d
! ed09fce8bd0785289cb6018ddf23a593  gcc/testsuite/gdc.test/fail_compilation/test18282.d
  a7a660644aa3a898b18641bb0128e405  gcc/testsuite/gdc.test/fail_compilation/test18312.d
  3f884432d6887eb6dd7b14e20d0d58a1  gcc/testsuite/gdc.test/fail_compilation/test18385.d
  2ab2cb94449809dd764a0f41a3c8b378  gcc/testsuite/gdc.test/fail_compilation/test18385b.d
--- 110082,110088 ----
  e5254335118841d78547e28e44099554  gcc/testsuite/gdc.test/fail_compilation/test17977.d
  b2935056546224cf8dc2e78a225995a1  gcc/testsuite/gdc.test/fail_compilation/test18127.d
  3dedce972ccebf636e59731359e082a2  gcc/testsuite/gdc.test/fail_compilation/test18130.d
! 97ab2f4ec24ed4d1173832455c5686c0  gcc/testsuite/gdc.test/fail_compilation/test18282.d
  a7a660644aa3a898b18641bb0128e405  gcc/testsuite/gdc.test/fail_compilation/test18312.d
  3f884432d6887eb6dd7b14e20d0d58a1  gcc/testsuite/gdc.test/fail_compilation/test18385.d
  2ab2cb94449809dd764a0f41a3c8b378  gcc/testsuite/gdc.test/fail_compilation/test18385b.d
*************** a7ce5f99b98911510dfe6b0cd43df779  gcc/te
*** 109992,109998 ****
  207dba1fcbad5b8b67427d637010a29d  gcc/testsuite/gdc.test/fail_compilation/test18644.d
  b082b2bf9129db74cd10287209671a96  gcc/testsuite/gdc.test/fail_compilation/test18708.d
  984b16fc115a2ec34207e0d4e75e25df  gcc/testsuite/gdc.test/fail_compilation/test18736.d
! af2f5895d46a70247b181d331bc70a51  gcc/testsuite/gdc.test/fail_compilation/test19097.d
  ab3befb908635ec7c40c188d0dc526c5  gcc/testsuite/gdc.test/fail_compilation/test19107.d
  966a5125951332c08a39ca7ebbd05c02  gcc/testsuite/gdc.test/fail_compilation/test19112.d
  8fe10b91500fba0e91b654fe48dd3d51  gcc/testsuite/gdc.test/fail_compilation/test19176.d
--- 110093,110099 ----
  207dba1fcbad5b8b67427d637010a29d  gcc/testsuite/gdc.test/fail_compilation/test18644.d
  b082b2bf9129db74cd10287209671a96  gcc/testsuite/gdc.test/fail_compilation/test18708.d
  984b16fc115a2ec34207e0d4e75e25df  gcc/testsuite/gdc.test/fail_compilation/test18736.d
! 03169d059200353c337d7578d524561f  gcc/testsuite/gdc.test/fail_compilation/test19097.d
  ab3befb908635ec7c40c188d0dc526c5  gcc/testsuite/gdc.test/fail_compilation/test19107.d
  966a5125951332c08a39ca7ebbd05c02  gcc/testsuite/gdc.test/fail_compilation/test19112.d
  8fe10b91500fba0e91b654fe48dd3d51  gcc/testsuite/gdc.test/fail_compilation/test19176.d
*************** bfb3fe397b78a8c3397961db5e383877  gcc/te
*** 110005,110015 ****
  6cac69b0d7ff56f0fe785a14b5030313  gcc/testsuite/gdc.test/fail_compilation/test20023.d
  bdc93bd17024fd4d46de7909ff405a11  gcc/testsuite/gdc.test/fail_compilation/test20096.d
  989f382db1d361c966fe47d4b8205d23  gcc/testsuite/gdc.test/fail_compilation/test20149.d
! 6018d569e491391d8444e816763ca248  gcc/testsuite/gdc.test/fail_compilation/test20245.d
  710c352c31a4baca536f7bfad2a41d05  gcc/testsuite/gdc.test/fail_compilation/test20267.d
  d5c3623a103182544da82c93b4634f62  gcc/testsuite/gdc.test/fail_compilation/test20324.d
  67055ecd3df8ca389c004a12d2eb7d68  gcc/testsuite/gdc.test/fail_compilation/test20383.d
! 9dafa06fbb1d969d87cd7ce3343b1942  gcc/testsuite/gdc.test/fail_compilation/test20489.d
  384652f7c502f0235624ad7b7ea50a47  gcc/testsuite/gdc.test/fail_compilation/test20515.d
  1a3b469b9f542cf3d9173ca77bd3777a  gcc/testsuite/gdc.test/fail_compilation/test20522.d
  48bcc8fd7476f9cac9ceb53d9556bc32  gcc/testsuite/gdc.test/fail_compilation/test20549.d
--- 110106,110116 ----
  6cac69b0d7ff56f0fe785a14b5030313  gcc/testsuite/gdc.test/fail_compilation/test20023.d
  bdc93bd17024fd4d46de7909ff405a11  gcc/testsuite/gdc.test/fail_compilation/test20096.d
  989f382db1d361c966fe47d4b8205d23  gcc/testsuite/gdc.test/fail_compilation/test20149.d
! 1ec5e00b780611f1a65c85484d4798c4  gcc/testsuite/gdc.test/fail_compilation/test20245.d
  710c352c31a4baca536f7bfad2a41d05  gcc/testsuite/gdc.test/fail_compilation/test20267.d
  d5c3623a103182544da82c93b4634f62  gcc/testsuite/gdc.test/fail_compilation/test20324.d
  67055ecd3df8ca389c004a12d2eb7d68  gcc/testsuite/gdc.test/fail_compilation/test20383.d
! 3c73d219083b0be583561802c8fb2a64  gcc/testsuite/gdc.test/fail_compilation/test20489.d
  384652f7c502f0235624ad7b7ea50a47  gcc/testsuite/gdc.test/fail_compilation/test20515.d
  1a3b469b9f542cf3d9173ca77bd3777a  gcc/testsuite/gdc.test/fail_compilation/test20522.d
  48bcc8fd7476f9cac9ceb53d9556bc32  gcc/testsuite/gdc.test/fail_compilation/test20549.d
*************** c7993efeed291ea587d7d83fec1d1d87  gcc/te
*** 110023,110028 ****
--- 110124,110131 ----
  b7fbc6ef2d8827fa89321f6b49cda686  gcc/testsuite/gdc.test/fail_compilation/test20763.d
  4046e5eb92175bd9041603d05dbb66c5  gcc/testsuite/gdc.test/fail_compilation/test20809.d
  4ce648303e8201e6ae69b7fd48320f74  gcc/testsuite/gdc.test/fail_compilation/test20859.d
+ 9ff190a2097b6271719565c3f478ca3a  gcc/testsuite/gdc.test/fail_compilation/test20863a.d
+ 374a3d15ee3988df93c1e4562e9640c2  gcc/testsuite/gdc.test/fail_compilation/test20863b.d
  db1c38f05e35f891f0f6d09468a2d678  gcc/testsuite/gdc.test/fail_compilation/test20881.d
  b63d81d149ced101cc0047fccfbfbff2  gcc/testsuite/gdc.test/fail_compilation/test20919.d
  ef8589871353bddefe144fc63561412a  gcc/testsuite/gdc.test/fail_compilation/test20998.d
*************** a90917d34352a06426f399bae530c5b1  gcc/te
*** 110035,110041 ****
  1bf038cf6f1ae7975e11d8f3ed7be20b  gcc/testsuite/gdc.test/fail_compilation/test21198.d
  719ac706ce81cfaaa50815be2ec3e7c8  gcc/testsuite/gdc.test/fail_compilation/test21204.d
  c6c3ac32c41e4803c7d5f93bc2ea61d9  gcc/testsuite/gdc.test/fail_compilation/test21215.d
! f0d66ee58e1deca85dd1a5c6be72e0fe  gcc/testsuite/gdc.test/fail_compilation/test21246.d
  33c0c2a0698c5dcdf37e6b3ee829811f  gcc/testsuite/gdc.test/fail_compilation/test21247.d
  bf2fa4b7e9ee0853b263755f0bce0ea6  gcc/testsuite/gdc.test/fail_compilation/test21247b.d
  2fce247ddc6adc1e84f449d7761cc302  gcc/testsuite/gdc.test/fail_compilation/test21259.d
--- 110138,110144 ----
  1bf038cf6f1ae7975e11d8f3ed7be20b  gcc/testsuite/gdc.test/fail_compilation/test21198.d
  719ac706ce81cfaaa50815be2ec3e7c8  gcc/testsuite/gdc.test/fail_compilation/test21204.d
  c6c3ac32c41e4803c7d5f93bc2ea61d9  gcc/testsuite/gdc.test/fail_compilation/test21215.d
! 489ed8ec843fb0fca6b50321caeef8ce  gcc/testsuite/gdc.test/fail_compilation/test21246.d
  33c0c2a0698c5dcdf37e6b3ee829811f  gcc/testsuite/gdc.test/fail_compilation/test21247.d
  bf2fa4b7e9ee0853b263755f0bce0ea6  gcc/testsuite/gdc.test/fail_compilation/test21247b.d
  2fce247ddc6adc1e84f449d7761cc302  gcc/testsuite/gdc.test/fail_compilation/test21259.d
*************** ec3a327e60b99c4b5c8c64c7ec034e09  gcc/te
*** 110050,110055 ****
--- 110153,110159 ----
  03e8bf379a729a626e8bd0ed32364c99  gcc/testsuite/gdc.test/fail_compilation/test21477.d
  d89c86b00de50c0eff1176ba2eac046a  gcc/testsuite/gdc.test/fail_compilation/test21518.d
  d48e82ef6f2dbb5339beb2f0ecf80e3b  gcc/testsuite/gdc.test/fail_compilation/test21546.d
+ ce2d5ddb78f23ecb5df6f79aaacda700  gcc/testsuite/gdc.test/fail_compilation/test21634.d
  71e1aa25aaa777c4eef2e9d4c47f72c0  gcc/testsuite/gdc.test/fail_compilation/test21651.d
  e186de90e8fb487e22d379566570a689  gcc/testsuite/gdc.test/fail_compilation/test21665.d
  134c62157e30891fb9a43a58e55cf004  gcc/testsuite/gdc.test/fail_compilation/test21807.d
*************** ca15912fd7a40502368f8963b289d24b  gcc/te
*** 110077,110085 ****
  145a13e6251be16abdd4eb30d2bbce28  gcc/testsuite/gdc.test/fail_compilation/test22999.d
  f913115e93868e9a78c9fa781674f313  gcc/testsuite/gdc.test/fail_compilation/test23017.d
  476eb7e3c3bacd04660a1c1df9196a85  gcc/testsuite/gdc.test/fail_compilation/test23022.d
! d0e6f216e810bf6a2b090266c9e593bb  gcc/testsuite/gdc.test/fail_compilation/test23073.d
  87ff548a38e50d9b93fa8b5973b82742  gcc/testsuite/gdc.test/fail_compilation/test23112.d
! 0ec75b327b00e3e5424c6dd33ada45ad  gcc/testsuite/gdc.test/fail_compilation/test23159.d
  efcd1e2d29fce54f390a8a2f18491e9c  gcc/testsuite/gdc.test/fail_compilation/test23170.d
  d58332efc531ae33e2a3c63d48550216  gcc/testsuite/gdc.test/fail_compilation/test23216.d
  82b9d1efc70e38367a42d7ba6e74b60c  gcc/testsuite/gdc.test/fail_compilation/test23279.d
--- 110181,110189 ----
  145a13e6251be16abdd4eb30d2bbce28  gcc/testsuite/gdc.test/fail_compilation/test22999.d
  f913115e93868e9a78c9fa781674f313  gcc/testsuite/gdc.test/fail_compilation/test23017.d
  476eb7e3c3bacd04660a1c1df9196a85  gcc/testsuite/gdc.test/fail_compilation/test23022.d
! 870b182f32f19b685a3f24b60985e150  gcc/testsuite/gdc.test/fail_compilation/test23073.d
  87ff548a38e50d9b93fa8b5973b82742  gcc/testsuite/gdc.test/fail_compilation/test23112.d
! c6b791ceecd13f224ff487f8ff51ba8d  gcc/testsuite/gdc.test/fail_compilation/test23159.d
  efcd1e2d29fce54f390a8a2f18491e9c  gcc/testsuite/gdc.test/fail_compilation/test23170.d
  d58332efc531ae33e2a3c63d48550216  gcc/testsuite/gdc.test/fail_compilation/test23216.d
  82b9d1efc70e38367a42d7ba6e74b60c  gcc/testsuite/gdc.test/fail_compilation/test23279.d
*************** f4e89a6307cbf7326a8ff6901235b1ec  gcc/te
*** 110094,110109 ****
  38e2108be478c073ae00746d9a169568  gcc/testsuite/gdc.test/fail_compilation/test23882.d
  1a38affdee4084ec23e995b911bb16a8  gcc/testsuite/gdc.test/fail_compilation/test23905.d
  69b315a59fa922c94a64c3b2186a7d95  gcc/testsuite/gdc.test/fail_compilation/test23968.d
! 2cd0ee33f12ec82ea32ea4995f64a3ae  gcc/testsuite/gdc.test/fail_compilation/test23982.d
  2ed1556a6c6a35e66b0f218a9f3dee67  gcc/testsuite/gdc.test/fail_compilation/test24015.d
  6dc0b1e72b105775cba05b5a365fa6c2  gcc/testsuite/gdc.test/fail_compilation/test24036.d
  4c5b4a85d7b46a69b59e62899aa5add0  gcc/testsuite/gdc.test/fail_compilation/test24065.d
! 705cd9a65a73c5af60239830b92fea91  gcc/testsuite/gdc.test/fail_compilation/test24084.d
  cc41e8d4f1cad67ff1bf2aec36d096da  gcc/testsuite/gdc.test/fail_compilation/test24110.d
  14870badd278a51ab882abb61fdb2fcb  gcc/testsuite/gdc.test/fail_compilation/test24157.d
  6f1c6290717f99af3bff7bd3c0ff19e5  gcc/testsuite/gdc.test/fail_compilation/test24159.d
  66a8d328c153120399b34b9d865012ae  gcc/testsuite/gdc.test/fail_compilation/test24295.d
! 44bf6fb50b02a3e43971867c86d6081b  gcc/testsuite/gdc.test/fail_compilation/test24353.d
  a3ffce63da1daba89c1a287fa30bd6c5  gcc/testsuite/gdc.test/fail_compilation/test24365.d
  afc2b9238633bdf759c114e3ed3dff66  gcc/testsuite/gdc.test/fail_compilation/test24680.d
  bb8810e25c8930588b41b888a42245a4  gcc/testsuite/gdc.test/fail_compilation/test24694.d
--- 110198,110213 ----
  38e2108be478c073ae00746d9a169568  gcc/testsuite/gdc.test/fail_compilation/test23882.d
  1a38affdee4084ec23e995b911bb16a8  gcc/testsuite/gdc.test/fail_compilation/test23905.d
  69b315a59fa922c94a64c3b2186a7d95  gcc/testsuite/gdc.test/fail_compilation/test23968.d
! 16140978adce2d540f9e9ab60bda7abb  gcc/testsuite/gdc.test/fail_compilation/test23982.d
  2ed1556a6c6a35e66b0f218a9f3dee67  gcc/testsuite/gdc.test/fail_compilation/test24015.d
  6dc0b1e72b105775cba05b5a365fa6c2  gcc/testsuite/gdc.test/fail_compilation/test24036.d
  4c5b4a85d7b46a69b59e62899aa5add0  gcc/testsuite/gdc.test/fail_compilation/test24065.d
! 90df0f8e49ad09b6fae9869fc6124ee7  gcc/testsuite/gdc.test/fail_compilation/test24084.d
  cc41e8d4f1cad67ff1bf2aec36d096da  gcc/testsuite/gdc.test/fail_compilation/test24110.d
  14870badd278a51ab882abb61fdb2fcb  gcc/testsuite/gdc.test/fail_compilation/test24157.d
  6f1c6290717f99af3bff7bd3c0ff19e5  gcc/testsuite/gdc.test/fail_compilation/test24159.d
  66a8d328c153120399b34b9d865012ae  gcc/testsuite/gdc.test/fail_compilation/test24295.d
! e5bc904144bb3b39a96a614d2f9101b1  gcc/testsuite/gdc.test/fail_compilation/test24353.d
  a3ffce63da1daba89c1a287fa30bd6c5  gcc/testsuite/gdc.test/fail_compilation/test24365.d
  afc2b9238633bdf759c114e3ed3dff66  gcc/testsuite/gdc.test/fail_compilation/test24680.d
  bb8810e25c8930588b41b888a42245a4  gcc/testsuite/gdc.test/fail_compilation/test24694.d
*************** ec4dab98798d55fe2c57ec7dd6dca969  gcc/te
*** 110131,110137 ****
  bcac533ebb44ae410d3412ec01289528  gcc/testsuite/gdc.test/fail_compilation/testInference.d
  ffb3215e9a258cfd3f1a5da05897df96  gcc/testsuite/gdc.test/fail_compilation/testOpApply.d
  585cd3369b1d02b241f3a50fd0738734  gcc/testsuite/gdc.test/fail_compilation/test_switch_error.d
! 0cf1a5a203282514e36995c784aec2b7  gcc/testsuite/gdc.test/fail_compilation/testrvaluecpctor.d
  9f45e8c9c9f3a0129841f68bfdab000d  gcc/testsuite/gdc.test/fail_compilation/testscopestatic.d
  a19751c69fd3a108ac390db97edce978  gcc/testsuite/gdc.test/fail_compilation/testsemi.d
  816faf898559acd08b5d122dfc17dd89  gcc/testsuite/gdc.test/fail_compilation/throwexp.d
--- 110235,110241 ----
  bcac533ebb44ae410d3412ec01289528  gcc/testsuite/gdc.test/fail_compilation/testInference.d
  ffb3215e9a258cfd3f1a5da05897df96  gcc/testsuite/gdc.test/fail_compilation/testOpApply.d
  585cd3369b1d02b241f3a50fd0738734  gcc/testsuite/gdc.test/fail_compilation/test_switch_error.d
! d85dc340f8e1ad482cf7f4ec2320a01f  gcc/testsuite/gdc.test/fail_compilation/testrvaluecpctor.d
  9f45e8c9c9f3a0129841f68bfdab000d  gcc/testsuite/gdc.test/fail_compilation/testscopestatic.d
  a19751c69fd3a108ac390db97edce978  gcc/testsuite/gdc.test/fail_compilation/testsemi.d
  816faf898559acd08b5d122dfc17dd89  gcc/testsuite/gdc.test/fail_compilation/throwexp.d
*************** a420878da7fa335abc9583e4499d0666  gcc/te
*** 110187,110193 ****
  81eae29e5dcdce2710e97b024a39e9d5  gcc/testsuite/gdc.test/runnable/bench1.d
  c619f23869eb2baf6ff686c8cf48f2d4  gcc/testsuite/gdc.test/runnable/betterc.d
  3d3cfce1b32d3c3367406afbb4f3a671  gcc/testsuite/gdc.test/runnable/bettercUnittest.d
! 8e45523f9840128ea41375c8319e8b33  gcc/testsuite/gdc.test/runnable/bit.d
  370e709a442934770ca5c055271aba94  gcc/testsuite/gdc.test/runnable/bitops.d
  5e171d0543cb3d1795498b099bcc4509  gcc/testsuite/gdc.test/runnable/bug11155.d
  57c36c5c550ccf929d7ef16b40d40d52  gcc/testsuite/gdc.test/runnable/bug12928.d
--- 110291,110297 ----
  81eae29e5dcdce2710e97b024a39e9d5  gcc/testsuite/gdc.test/runnable/bench1.d
  c619f23869eb2baf6ff686c8cf48f2d4  gcc/testsuite/gdc.test/runnable/betterc.d
  3d3cfce1b32d3c3367406afbb4f3a671  gcc/testsuite/gdc.test/runnable/bettercUnittest.d
! 50d37325500eae55d195d3f258196458  gcc/testsuite/gdc.test/runnable/bit.d
  370e709a442934770ca5c055271aba94  gcc/testsuite/gdc.test/runnable/bitops.d
  5e171d0543cb3d1795498b099bcc4509  gcc/testsuite/gdc.test/runnable/bug11155.d
  57c36c5c550ccf929d7ef16b40d40d52  gcc/testsuite/gdc.test/runnable/bug12928.d
*************** af2f95c5ef65b51539eef86ea15fa531  gcc/te
*** 110201,110213 ****
  01d3a2d553dcbd78448c6408c8ceee96  gcc/testsuite/gdc.test/runnable/casting.d
  758ec98959b2e2a7360601dbda5e44bb  gcc/testsuite/gdc.test/runnable/cdcmp.d
  1a404880fefc71429b66061fd57938df  gcc/testsuite/gdc.test/runnable/class_opCmp.d
! e8ff6f3ea6dc635e21038617aaa22d6c  gcc/testsuite/gdc.test/runnable/closure.d
  9856034684b8c1120eedb0ec55938558  gcc/testsuite/gdc.test/runnable/complex.d
  6b5e44de6530379279b7cc0d9eaee155  gcc/testsuite/gdc.test/runnable/complex3.d
  a10f1fbb2f27f7e942cc0670fb3624e4  gcc/testsuite/gdc.test/runnable/constfold.d
  a080e4860261d16428bca6fb30d66159  gcc/testsuite/gdc.test/runnable/cppdtor.d
  2b92f65e8a84b3091a6b268e98f92815  gcc/testsuite/gdc.test/runnable/ctorpowtests.d
! a522e5527885eb8bdc0f385d8a49384c  gcc/testsuite/gdc.test/runnable/dbitfields.d
  84c4e26d482890e8bc49d1ce61bef9a7  gcc/testsuite/gdc.test/runnable/declaration.d
  d0a93167ec0c4b07094d766e9e071292  gcc/testsuite/gdc.test/runnable/delegate.d
  b236e2967e62b1d2e91de78f8c967b0d  gcc/testsuite/gdc.test/runnable/e7804.d
--- 110305,110318 ----
  01d3a2d553dcbd78448c6408c8ceee96  gcc/testsuite/gdc.test/runnable/casting.d
  758ec98959b2e2a7360601dbda5e44bb  gcc/testsuite/gdc.test/runnable/cdcmp.d
  1a404880fefc71429b66061fd57938df  gcc/testsuite/gdc.test/runnable/class_opCmp.d
! e7305d083ae23c32db91322f1e310b23  gcc/testsuite/gdc.test/runnable/closure.d
  9856034684b8c1120eedb0ec55938558  gcc/testsuite/gdc.test/runnable/complex.d
  6b5e44de6530379279b7cc0d9eaee155  gcc/testsuite/gdc.test/runnable/complex3.d
  a10f1fbb2f27f7e942cc0670fb3624e4  gcc/testsuite/gdc.test/runnable/constfold.d
  a080e4860261d16428bca6fb30d66159  gcc/testsuite/gdc.test/runnable/cppdtor.d
  2b92f65e8a84b3091a6b268e98f92815  gcc/testsuite/gdc.test/runnable/ctorpowtests.d
! 3f5f010cdf399eaeff520185c43b37a5  gcc/testsuite/gdc.test/runnable/dbitfields.d
! e35cd88f716fe5b7f8128982b42da4aa  gcc/testsuite/gdc.test/runnable/dbitfieldsdm.d
  84c4e26d482890e8bc49d1ce61bef9a7  gcc/testsuite/gdc.test/runnable/declaration.d
  d0a93167ec0c4b07094d766e9e071292  gcc/testsuite/gdc.test/runnable/delegate.d
  b236e2967e62b1d2e91de78f8c967b0d  gcc/testsuite/gdc.test/runnable/e7804.d
*************** cb452631c311ff185975ed99bde00241  gcc/te
*** 110339,110344 ****
--- 110444,110450 ----
  6448f2440740e1334549739876dd8af1  gcc/testsuite/gdc.test/runnable/imports/module_with_tests.d
  833bf7270986a5b44ab97cb3ff91e5a6  gcc/testsuite/gdc.test/runnable/imports/ovs1528a.d
  7e3d3940b6985eaf7173938ae0aa86ff  gcc/testsuite/gdc.test/runnable/imports/ovs1528b.d
+ 2fb9206e653d58c86868eb9658a12955  gcc/testsuite/gdc.test/runnable/imports/pragmainline_a.d
  5c314ae1e95f9a1f188468e78aafb5c6  gcc/testsuite/gdc.test/runnable/imports/pubprivtmpla.d
  0e5997fe41346867cb8799fa64b9ae10  gcc/testsuite/gdc.test/runnable/imports/standalone_b.d
  61da9b8c6eb2a3e3db927c8bb97c019f  gcc/testsuite/gdc.test/runnable/imports/std11069array.d
*************** bba54e3d289eaaf3f6cd33759ce1ec8f  gcc/te
*** 110362,110367 ****
--- 110468,110474 ----
  20f5158c99342f104346877478f8037d  gcc/testsuite/gdc.test/runnable/imports/template_ovs3.d
  c47eff29f10b58aa41dde3712e983c77  gcc/testsuite/gdc.test/runnable/imports/test10441b.d
  1b90787d82532ef6ecec7c27852069a0  gcc/testsuite/gdc.test/runnable/imports/test10441c.d
+ 28bd60356fa06ebed4721fbb5544e52a  gcc/testsuite/gdc.test/runnable/imports/test10442a.d
  c2936f1e2dfad4952ac027ffb029f917  gcc/testsuite/gdc.test/runnable/imports/test10573a.d
  b0b287b9c1345d279f14a509b9473fe6  gcc/testsuite/gdc.test/runnable/imports/test10736a.d
  16f7ae7a23cb4d90417952d73a918b12  gcc/testsuite/gdc.test/runnable/imports/test10736b.d
*************** c84519b4071a05841382b567953be0b4  gcc/te
*** 110438,110447 ****
--- 110545,110556 ----
  1eb788b52d7a55d4c36cf1adab17983a  gcc/testsuite/gdc.test/runnable/imports/ufcs5c.d
  eca2528a4b2f620d2c38d1abb893652c  gcc/testsuite/gdc.test/runnable/imports/ufcs5d.d
  25e6928fcac8b8805188099fa463c745  gcc/testsuite/gdc.test/runnable/imports/ufcs5e.d
+ c7d3c21b237a99f7cfa6f2802e3e1efa  gcc/testsuite/gdc.test/runnable/imports/你好.d
  6bc98429fb6b456e0a601db6162025c0  gcc/testsuite/gdc.test/runnable/inclusive_incontracts.d
  aaf6f341932e9b3a995159cd37bdc066  gcc/testsuite/gdc.test/runnable/inline.d
  f7d709d852581fa8afa0dd0d20f5b2a3  gcc/testsuite/gdc.test/runnable/inline14560.d
  ee1705daa5f4bdf4268af3e439e38e22  gcc/testsuite/gdc.test/runnable/inline3.d
+ a4a73e9702637fa3cc5e29d4ee206d26  gcc/testsuite/gdc.test/runnable/inline4.d
  d64b5e3f0b00940814668d067bf9aaea  gcc/testsuite/gdc.test/runnable/inline7625.d
  983143edb6966dadb405abd8072847f2  gcc/testsuite/gdc.test/runnable/inner.d
  48cfd849752443e6d9839e935e8143b7  gcc/testsuite/gdc.test/runnable/interface.d
*************** ca24fa67843e9b5f04f6e36b4156cd09  gcc/te
*** 110454,110459 ****
--- 110563,110569 ----
  8e5a2ed2af9dfcc61cdfcfe2e2c82869  gcc/testsuite/gdc.test/runnable/issue11070.d
  34bbbe816cec89b7cf9ad1cf88a3c866  gcc/testsuite/gdc.test/runnable/issue16995.d
  e48c402ca69b796fd05c63bb3760b2a1  gcc/testsuite/gdc.test/runnable/issue18919.d
+ 4f7e9b0792f45584b2b2e919b42801cb  gcc/testsuite/gdc.test/runnable/issue22069.d
  22cd3fa4fa361ef6a17f82ff75cfbf34  gcc/testsuite/gdc.test/runnable/issue22854.d
  39d18e20e5c1d7b9153e30efdfadb6c4  gcc/testsuite/gdc.test/runnable/issue24168.d
  2afa6e0cfd5b3f47cf1ee026309b0a30  gcc/testsuite/gdc.test/runnable/issue24401.d
*************** e041b1e4a58fab7adb641895e58bfae9  gcc/te
*** 110499,110512 ****
  f937e0b38b1fcd4d891537f30945028b  gcc/testsuite/gdc.test/runnable/m1.d
  e9f9b0b614372eb03b080d1810c3f513  gcc/testsuite/gdc.test/runnable/manboy.d
  d24d09db909070bae7a41375df4c3e2b  gcc/testsuite/gdc.test/runnable/mangle.d
! e52f6487ef675bf00dca8cc86b14c86d  gcc/testsuite/gdc.test/runnable/mars1.d
  f5a8b23b5d0c5c59024767c78dcf9071  gcc/testsuite/gdc.test/runnable/minimal.d
  c00ebdf5e3409a5e0d41bc91f1bc7c13  gcc/testsuite/gdc.test/runnable/minimal2.d
  15dc2b4cca078287d66d6822d1363981  gcc/testsuite/gdc.test/runnable/mixin1.d
  abb06b3df362afe29e8eb361582e78d9  gcc/testsuite/gdc.test/runnable/mixin2.d
  17668752a24808140dc9b4f2fe62174d  gcc/testsuite/gdc.test/runnable/mod1.d
  93837ff6a8edd395fed58c76349926d3  gcc/testsuite/gdc.test/runnable/nan.d
! ff83e87b097613a3fe18f1fab4e9685e  gcc/testsuite/gdc.test/runnable/nested.d
  b8f16b2144f8d28d3626e8fa9dafc16f  gcc/testsuite/gdc.test/runnable/newaa.d
  73304a0d87621a815c9f67bc3957e5a3  gcc/testsuite/gdc.test/runnable/newdel.d
  9e9d69e73c462afc25287895fa6999c9  gcc/testsuite/gdc.test/runnable/nogc.d
--- 110609,110622 ----
  f937e0b38b1fcd4d891537f30945028b  gcc/testsuite/gdc.test/runnable/m1.d
  e9f9b0b614372eb03b080d1810c3f513  gcc/testsuite/gdc.test/runnable/manboy.d
  d24d09db909070bae7a41375df4c3e2b  gcc/testsuite/gdc.test/runnable/mangle.d
! 7bbc4ba51d100fa479ded9e3adf89568  gcc/testsuite/gdc.test/runnable/mars1.d
  f5a8b23b5d0c5c59024767c78dcf9071  gcc/testsuite/gdc.test/runnable/minimal.d
  c00ebdf5e3409a5e0d41bc91f1bc7c13  gcc/testsuite/gdc.test/runnable/minimal2.d
  15dc2b4cca078287d66d6822d1363981  gcc/testsuite/gdc.test/runnable/mixin1.d
  abb06b3df362afe29e8eb361582e78d9  gcc/testsuite/gdc.test/runnable/mixin2.d
  17668752a24808140dc9b4f2fe62174d  gcc/testsuite/gdc.test/runnable/mod1.d
  93837ff6a8edd395fed58c76349926d3  gcc/testsuite/gdc.test/runnable/nan.d
! 2e06f16c0f39b3195b4a7860a4cede0a  gcc/testsuite/gdc.test/runnable/nested.d
  b8f16b2144f8d28d3626e8fa9dafc16f  gcc/testsuite/gdc.test/runnable/newaa.d
  73304a0d87621a815c9f67bc3957e5a3  gcc/testsuite/gdc.test/runnable/newdel.d
  9e9d69e73c462afc25287895fa6999c9  gcc/testsuite/gdc.test/runnable/nogc.d
*************** bc244cd860e0a19a225785138b807918  gcc/te
*** 110514,110545 ****
  94740620eb6671658deb17f015ab280e  gcc/testsuite/gdc.test/runnable/noreturn2.d
  4ddffe568a5a604293830865cf0b15b8  gcc/testsuite/gdc.test/runnable/nrvo.d
  03897e35749dc0677dab013ba59cd344  gcc/testsuite/gdc.test/runnable/nulltype.d
  ae6003d98ffb6553fca10defa56d61ca  gcc/testsuite/gdc.test/runnable/opdisp.d
  ec655df78151c45375a7f8b78ae27bcf  gcc/testsuite/gdc.test/runnable/opover.d
  143fe97fc80962b419313f8a9a5ca8c6  gcc/testsuite/gdc.test/runnable/opover2.d
! 9cf6d58bb7e64c71cbc72374f1007933  gcc/testsuite/gdc.test/runnable/opover3.d
! 3f595d4c7a383a431b3773fec062cab9  gcc/testsuite/gdc.test/runnable/overload.d
  c4e996cd3850a6ed5cd0b4537df85ad3  gcc/testsuite/gdc.test/runnable/pi.d
  3eef5c673fa1363f30d1b32894007fa8  gcc/testsuite/gdc.test/runnable/placenew.d
  671e921d7ba20a1141f56c07be62b586  gcc/testsuite/gdc.test/runnable/polysemous.d
  c6a196e97fee14926a01acb9400359e0  gcc/testsuite/gdc.test/runnable/powinline.d
  6bc5534b2826fefdc2676bb4a74dbef9  gcc/testsuite/gdc.test/runnable/previewin.d
  e43ef772308df8da7da44ca398d5ec99  gcc/testsuite/gdc.test/runnable/printargs.d
  0b3b6c33585693f7d9ec1f1c160c5eee  gcc/testsuite/gdc.test/runnable/property.d
  31fe12e44df9411731e4ef3d72fb4ba7  gcc/testsuite/gdc.test/runnable/property2.d
  4ad36392d16823994c6a7ca8d3899c50  gcc/testsuite/gdc.test/runnable/pubprivtmpl.d
  5aa619dac98c65942e48723d4e8c6d88  gcc/testsuite/gdc.test/runnable/runnable.exp
! 97f633e772a00f39bf34b28b7804e960  gcc/testsuite/gdc.test/runnable/rvalue1.d
  8323b83c1399a259f3d262fb199b2205  gcc/testsuite/gdc.test/runnable/s2ir.d
  96d633524d2f75b8d82fcd0a5331a249  gcc/testsuite/gdc.test/runnable/sctor.d
  89fdd86c8139312e4c554792b0cf02be  gcc/testsuite/gdc.test/runnable/sctor2.d
  56961e49f5e5c47ee438cbc20660cc3a  gcc/testsuite/gdc.test/runnable/sdtor.d
  493987b1f414fd9708186d61ca59520a  gcc/testsuite/gdc.test/runnable/standalone_modctor.d
! fbbd46e945d26c4faf1723a1625f17f4  gcc/testsuite/gdc.test/runnable/staticaa.d
  75cf9f0bc1b0762705a8a2b6eb89811e  gcc/testsuite/gdc.test/runnable/staticforeach.d
  f73d5e95eed9a6db4b396ed99ff5b347  gcc/testsuite/gdc.test/runnable/statictor.d
  3b4fa0c8027d36ae9ebdc2e436b4ff04  gcc/testsuite/gdc.test/runnable/stress.d
  63d69507976c1d1d8944e81e01b7e5ed  gcc/testsuite/gdc.test/runnable/structlit.d
  3e3face435bb217d55099a4d3b63ee8e  gcc/testsuite/gdc.test/runnable/template1.d
  415d0f5479b379a2060b96d579202da6  gcc/testsuite/gdc.test/runnable/template13478.d
  69d08426f0323e8fbc44d4d87fa314c4  gcc/testsuite/gdc.test/runnable/template2.d
--- 110624,110659 ----
  94740620eb6671658deb17f015ab280e  gcc/testsuite/gdc.test/runnable/noreturn2.d
  4ddffe568a5a604293830865cf0b15b8  gcc/testsuite/gdc.test/runnable/nrvo.d
  03897e35749dc0677dab013ba59cd344  gcc/testsuite/gdc.test/runnable/nulltype.d
+ a4c66aa01f43edb8b05a90c822de9c26  gcc/testsuite/gdc.test/runnable/opcolon.d
  ae6003d98ffb6553fca10defa56d61ca  gcc/testsuite/gdc.test/runnable/opdisp.d
  ec655df78151c45375a7f8b78ae27bcf  gcc/testsuite/gdc.test/runnable/opover.d
  143fe97fc80962b419313f8a9a5ca8c6  gcc/testsuite/gdc.test/runnable/opover2.d
! b26db2183e8f8ed6f130e648bf843554  gcc/testsuite/gdc.test/runnable/opover3.d
! 295da9b2ced5c402823cbd49efe87e5f  gcc/testsuite/gdc.test/runnable/overload.d
  c4e996cd3850a6ed5cd0b4537df85ad3  gcc/testsuite/gdc.test/runnable/pi.d
  3eef5c673fa1363f30d1b32894007fa8  gcc/testsuite/gdc.test/runnable/placenew.d
  671e921d7ba20a1141f56c07be62b586  gcc/testsuite/gdc.test/runnable/polysemous.d
  c6a196e97fee14926a01acb9400359e0  gcc/testsuite/gdc.test/runnable/powinline.d
+ d683bda2f52dbd1003219e2d583b1d42  gcc/testsuite/gdc.test/runnable/pragmainline.d
  6bc5534b2826fefdc2676bb4a74dbef9  gcc/testsuite/gdc.test/runnable/previewin.d
  e43ef772308df8da7da44ca398d5ec99  gcc/testsuite/gdc.test/runnable/printargs.d
  0b3b6c33585693f7d9ec1f1c160c5eee  gcc/testsuite/gdc.test/runnable/property.d
  31fe12e44df9411731e4ef3d72fb4ba7  gcc/testsuite/gdc.test/runnable/property2.d
  4ad36392d16823994c6a7ca8d3899c50  gcc/testsuite/gdc.test/runnable/pubprivtmpl.d
+ 74ce78d286a1822c05e01a5907b24404  gcc/testsuite/gdc.test/runnable/real_to_float.d
  5aa619dac98c65942e48723d4e8c6d88  gcc/testsuite/gdc.test/runnable/runnable.exp
! f7d7c623dcf67d10a42a25c8505659c8  gcc/testsuite/gdc.test/runnable/rvalue1.d
  8323b83c1399a259f3d262fb199b2205  gcc/testsuite/gdc.test/runnable/s2ir.d
  96d633524d2f75b8d82fcd0a5331a249  gcc/testsuite/gdc.test/runnable/sctor.d
  89fdd86c8139312e4c554792b0cf02be  gcc/testsuite/gdc.test/runnable/sctor2.d
  56961e49f5e5c47ee438cbc20660cc3a  gcc/testsuite/gdc.test/runnable/sdtor.d
  493987b1f414fd9708186d61ca59520a  gcc/testsuite/gdc.test/runnable/standalone_modctor.d
! 4fc7b9d27e31e04834523bd5c0fbf4c7  gcc/testsuite/gdc.test/runnable/staticaa.d
  75cf9f0bc1b0762705a8a2b6eb89811e  gcc/testsuite/gdc.test/runnable/staticforeach.d
  f73d5e95eed9a6db4b396ed99ff5b347  gcc/testsuite/gdc.test/runnable/statictor.d
  3b4fa0c8027d36ae9ebdc2e436b4ff04  gcc/testsuite/gdc.test/runnable/stress.d
  63d69507976c1d1d8944e81e01b7e5ed  gcc/testsuite/gdc.test/runnable/structlit.d
+ 04186ecd6e9b88b75381374fded188cd  gcc/testsuite/gdc.test/runnable/structlit_rvalue.d
  3e3face435bb217d55099a4d3b63ee8e  gcc/testsuite/gdc.test/runnable/template1.d
  415d0f5479b379a2060b96d579202da6  gcc/testsuite/gdc.test/runnable/template13478.d
  69d08426f0323e8fbc44d4d87fa314c4  gcc/testsuite/gdc.test/runnable/template2.d
*************** c67680cbb0418c1b03462bc82e84c512  gcc/te
*** 110547,110556 ****
  5b81345d7ef03f9c02b13172e567dfea  gcc/testsuite/gdc.test/runnable/template3.d
  b264e56ec823b77824223c7435498b7d  gcc/testsuite/gdc.test/runnable/template4.d
  a2b15bcca5ded36d826ccac559bfe9fc  gcc/testsuite/gdc.test/runnable/template8.d
! 3206488f6d7f5436e3da2cac2222d366  gcc/testsuite/gdc.test/runnable/template9.d
  05cefcbd270114fadcde3e36e557c635  gcc/testsuite/gdc.test/runnable/test10.d
  11b39f38ddea4db0c346c184ae043158  gcc/testsuite/gdc.test/runnable/test10378.d
  b3fd0ebdae332c633f7c121f913b9c27  gcc/testsuite/gdc.test/runnable/test10441.d
  e18bc12e62affabc6544f2dbb5151592  gcc/testsuite/gdc.test/runnable/test10573.d
  8e7ea5d0ec3fc33fe73cce78bc3f67f8  gcc/testsuite/gdc.test/runnable/test10619.d
  e4718969afdb09b1a5d8a84122c280ed  gcc/testsuite/gdc.test/runnable/test10736.d
--- 110661,110671 ----
  5b81345d7ef03f9c02b13172e567dfea  gcc/testsuite/gdc.test/runnable/template3.d
  b264e56ec823b77824223c7435498b7d  gcc/testsuite/gdc.test/runnable/template4.d
  a2b15bcca5ded36d826ccac559bfe9fc  gcc/testsuite/gdc.test/runnable/template8.d
! 0c0a207bfe781f9cc35f95f720c494f3  gcc/testsuite/gdc.test/runnable/template9.d
  05cefcbd270114fadcde3e36e557c635  gcc/testsuite/gdc.test/runnable/test10.d
  11b39f38ddea4db0c346c184ae043158  gcc/testsuite/gdc.test/runnable/test10378.d
  b3fd0ebdae332c633f7c121f913b9c27  gcc/testsuite/gdc.test/runnable/test10441.d
+ 110e865073814a75e6d43e14c99601a0  gcc/testsuite/gdc.test/runnable/test10442.d
  e18bc12e62affabc6544f2dbb5151592  gcc/testsuite/gdc.test/runnable/test10573.d
  8e7ea5d0ec3fc33fe73cce78bc3f67f8  gcc/testsuite/gdc.test/runnable/test10619.d
  e4718969afdb09b1a5d8a84122c280ed  gcc/testsuite/gdc.test/runnable/test10736.d
*************** cff02d44bbc8c8bfe6c49cafa1a3e6d4  gcc/te
*** 110653,110658 ****
--- 110768,110775 ----
  f8d0b21a1212e2dd2a2291217b19a6d4  gcc/testsuite/gdc.test/runnable/test20025.d
  afafe1c6791104a920ce60c8d9b7a1d7  gcc/testsuite/gdc.test/runnable/test20036.d
  00bcf9ef4601142dccb9c6258ec13a68  gcc/testsuite/gdc.test/runnable/test20130.d
+ 9015d9bfd919b1f19cd3f4c985a85e79  gcc/testsuite/gdc.test/runnable/test20275.d
+ 9326d594146c6e230c06413dbb82f7a7  gcc/testsuite/gdc.test/runnable/test20301.d
  a48fbfbafa74fe1264728e81e04e18c5  gcc/testsuite/gdc.test/runnable/test20365.d
  934611688c4128ebda7e15cb6381177e  gcc/testsuite/gdc.test/runnable/test20401.d
  bf3d19deaed1c8f0fe61a2fd08ba0c3f  gcc/testsuite/gdc.test/runnable/test20473.d
*************** d65e02fb5c7cae086fa0bf2467a474a6  gcc/te
*** 110679,110694 ****
--- 110796,110815 ----
  684fb8bd8d224295c0126d6852e6b871  gcc/testsuite/gdc.test/runnable/test21424.d
  f708ec1820e736ee42baa851e9190c5d  gcc/testsuite/gdc.test/runnable/test21429.d
  0f0c53d19e9f033b2f0ae674ae2b2ea3  gcc/testsuite/gdc.test/runnable/test21435.d
+ ba6045b23a8a5a77e07fe904d6fc81bb  gcc/testsuite/gdc.test/runnable/test21478a.d
+ 343de45d4717d1336cac2ccbb3ee4bf0  gcc/testsuite/gdc.test/runnable/test21478b.d
  39cc7f7ee06df8b588e510e65fc811d1  gcc/testsuite/gdc.test/runnable/test21479.d
  116b00b8fc3478f501974453de61c5f4  gcc/testsuite/gdc.test/runnable/test21506.d
  3958eb12c59cc6063b2604b011a74128  gcc/testsuite/gdc.test/runnable/test21515.d
  d941ec5e142e2721e810526ac3a6e649  gcc/testsuite/gdc.test/runnable/test21586.d
  dcf9d4faeb5eff7a1042fe032871a776  gcc/testsuite/gdc.test/runnable/test21660.d
+ c5f9db9b9f6ce14db8902a64175721ad  gcc/testsuite/gdc.test/runnable/test21757.d
  b294faec8f737c988ebc5c7803e537f6  gcc/testsuite/gdc.test/runnable/test21772.d
  b891c5d6dc21bffa2578a6c34884d103  gcc/testsuite/gdc.test/runnable/test21821.d
  0696ce7be75b98ed274e814bc15abdf9  gcc/testsuite/gdc.test/runnable/test21822.d
  6bdac6d28c5dd31504f6e1444284463a  gcc/testsuite/gdc.test/runnable/test21833.d
  8372dd352568da47d2662ffb3c04723c  gcc/testsuite/gdc.test/runnable/test22.d
+ 442d267022999ddb638f690edc008d9a  gcc/testsuite/gdc.test/runnable/test22079.d
  23a666ea8d812fe58b4fabc22d2dff49  gcc/testsuite/gdc.test/runnable/test22163.d
  513cf903348b953f1ce7a6d2a644197e  gcc/testsuite/gdc.test/runnable/test22175.d
  8c18bfc2cbf345895aba30706c009647  gcc/testsuite/gdc.test/runnable/test22205.d
*************** a02b38929f80793790180f89ef3156fe  gcc/te
*** 110722,110728 ****
  6888aff994544ace3f7e0ac79dafeeba  gcc/testsuite/gdc.test/runnable/test24819.d
  e43b4cf71ecb19e496e033806a50978e  gcc/testsuite/gdc.test/runnable/test24884.d
  19afe194dcce9c253540c7831e8f23a2  gcc/testsuite/gdc.test/runnable/test27.d
! 907370082d6caa9ac241999ae9143c37  gcc/testsuite/gdc.test/runnable/test28.d
  29e2b1f92dca63b5a1e49cedf1c77026  gcc/testsuite/gdc.test/runnable/test29.d
  a3c22bc745459314253eee2870f757bf  gcc/testsuite/gdc.test/runnable/test3.d
  ffaf83ea8a632fb76a8460f34eb92204  gcc/testsuite/gdc.test/runnable/test30.d
--- 110843,110849 ----
  6888aff994544ace3f7e0ac79dafeeba  gcc/testsuite/gdc.test/runnable/test24819.d
  e43b4cf71ecb19e496e033806a50978e  gcc/testsuite/gdc.test/runnable/test24884.d
  19afe194dcce9c253540c7831e8f23a2  gcc/testsuite/gdc.test/runnable/test27.d
! 9d22b994bb85197a9a7c51e7ee871c5a  gcc/testsuite/gdc.test/runnable/test28.d
  29e2b1f92dca63b5a1e49cedf1c77026  gcc/testsuite/gdc.test/runnable/test29.d
  a3c22bc745459314253eee2870f757bf  gcc/testsuite/gdc.test/runnable/test3.d
  ffaf83ea8a632fb76a8460f34eb92204  gcc/testsuite/gdc.test/runnable/test30.d
*************** fa0fb7940f5997754ddc62b33c7baebd  gcc/te
*** 110739,110745 ****
  dbb7cf02e89580245e392f454e17f2d8  gcc/testsuite/gdc.test/runnable/test4.d
  d445cf99d6bb9f33a8aaaf381e971853  gcc/testsuite/gdc.test/runnable/test40.d
  d506eb18768952fea6d63fd1d70743ce  gcc/testsuite/gdc.test/runnable/test41.d
! 0d9ea5ad6848b5319b1459165516f3e6  gcc/testsuite/gdc.test/runnable/test42.d
  9b2bf264f7de133b083d60a2a96dc8e2  gcc/testsuite/gdc.test/runnable/test42a.d
  b67bb973e1e91f489cd97933211256b9  gcc/testsuite/gdc.test/runnable/test435.d
  851d793586ab17a91e80426908e8a089  gcc/testsuite/gdc.test/runnable/test45.d
--- 110860,110866 ----
  dbb7cf02e89580245e392f454e17f2d8  gcc/testsuite/gdc.test/runnable/test4.d
  d445cf99d6bb9f33a8aaaf381e971853  gcc/testsuite/gdc.test/runnable/test40.d
  d506eb18768952fea6d63fd1d70743ce  gcc/testsuite/gdc.test/runnable/test41.d
! 4685bc14bcebd4311b112dacd195e2ff  gcc/testsuite/gdc.test/runnable/test42.d
  9b2bf264f7de133b083d60a2a96dc8e2  gcc/testsuite/gdc.test/runnable/test42a.d
  b67bb973e1e91f489cd97933211256b9  gcc/testsuite/gdc.test/runnable/test435.d
  851d793586ab17a91e80426908e8a089  gcc/testsuite/gdc.test/runnable/test45.d
*************** b2b82040db73be53e8f83f2298816647  gcc/te
*** 110775,110791 ****
  a36fae813a6f89e1190c485e88612051  gcc/testsuite/gdc.test/runnable/test9495.d
  2abc5225f15f7f14b991388996254323  gcc/testsuite/gdc.test/runnable/testCopyCtor.d
  04d6c9fc22712b82cdfb3e523ac200dd  gcc/testsuite/gdc.test/runnable/testOpApply.d
  260a12227aa14fbfc0f873ac59b4b56e  gcc/testsuite/gdc.test/runnable/test_dip1006.d
  485f2946d7bdaf0ea4b8db7b7d178772  gcc/testsuite/gdc.test/runnable/test_dip1006b.d
  64823d97fc941d462f398d0b7bcbe896  gcc/testsuite/gdc.test/runnable/testaa.d
! 54358bdbbb15a5ea623d42ffcc3a97e4  gcc/testsuite/gdc.test/runnable/testaa2.d
! 46a5468351b8ca42ef40fd4e9e3601dd  gcc/testsuite/gdc.test/runnable/testaa3.d
  3f7c65678e5e6729e1c6bc9fe1965999  gcc/testsuite/gdc.test/runnable/testaliascast.d
  eeb45913ea76b2a0c6255a669d3edb7e  gcc/testsuite/gdc.test/runnable/testappend.d
  8d2dd2e88a1daa40f5a0fe6f0bac44a7  gcc/testsuite/gdc.test/runnable/testarray.d
  728bb57b12620d5afb89fc3a275536d7  gcc/testsuite/gdc.test/runnable/testassert.d
  5c93e14bd7b6c858ef32800173172b43  gcc/testsuite/gdc.test/runnable/testassert_debug.d
! 7496c9ee55b24b40fe9921c1dad615d3  gcc/testsuite/gdc.test/runnable/testassign.d
  b68337b7fabe389fc57cd2fd733b78a9  gcc/testsuite/gdc.test/runnable/testbounds.d
  29912bc8a59c79356e5423ea4b009c91  gcc/testsuite/gdc.test/runnable/testbounds_off.d
  b5d03efe728963696491f3c036bc8f5c  gcc/testsuite/gdc.test/runnable/testbounds_on.d
--- 110896,110914 ----
  a36fae813a6f89e1190c485e88612051  gcc/testsuite/gdc.test/runnable/test9495.d
  2abc5225f15f7f14b991388996254323  gcc/testsuite/gdc.test/runnable/testCopyCtor.d
  04d6c9fc22712b82cdfb3e523ac200dd  gcc/testsuite/gdc.test/runnable/testOpApply.d
+ 2ac708d53ac5b9630517c9b27ac2f7db  gcc/testsuite/gdc.test/runnable/test_delegate_init_in_struct.d
  260a12227aa14fbfc0f873ac59b4b56e  gcc/testsuite/gdc.test/runnable/test_dip1006.d
  485f2946d7bdaf0ea4b8db7b7d178772  gcc/testsuite/gdc.test/runnable/test_dip1006b.d
+ 00a9a8e461bebe7dba1eb3abddb9f6b9  gcc/testsuite/gdc.test/runnable/test_real_array_param.d
  64823d97fc941d462f398d0b7bcbe896  gcc/testsuite/gdc.test/runnable/testaa.d
! 3fc7cc8f16376f13b067ba14c2daf349  gcc/testsuite/gdc.test/runnable/testaa2.d
! e527fa17c4bc49335f6f4cb304b6d275  gcc/testsuite/gdc.test/runnable/testaa3.d
  3f7c65678e5e6729e1c6bc9fe1965999  gcc/testsuite/gdc.test/runnable/testaliascast.d
  eeb45913ea76b2a0c6255a669d3edb7e  gcc/testsuite/gdc.test/runnable/testappend.d
  8d2dd2e88a1daa40f5a0fe6f0bac44a7  gcc/testsuite/gdc.test/runnable/testarray.d
  728bb57b12620d5afb89fc3a275536d7  gcc/testsuite/gdc.test/runnable/testassert.d
  5c93e14bd7b6c858ef32800173172b43  gcc/testsuite/gdc.test/runnable/testassert_debug.d
! f3d8556c56dc5320b4320eb517bc7251  gcc/testsuite/gdc.test/runnable/testassign.d
  b68337b7fabe389fc57cd2fd733b78a9  gcc/testsuite/gdc.test/runnable/testbounds.d
  29912bc8a59c79356e5423ea4b009c91  gcc/testsuite/gdc.test/runnable/testbounds_off.d
  b5d03efe728963696491f3c036bc8f5c  gcc/testsuite/gdc.test/runnable/testbounds_on.d
*************** a057534673f57c614b996fe87140df21  gcc/te
*** 110832,110840 ****
  9be15b72b386165ca16cdf973c293d24  gcc/testsuite/gdc.test/runnable/traits_getPointerBitmap.d
  7b5c0c588a5500319a2ccc41819e3b29  gcc/testsuite/gdc.test/runnable/traits_getUnitTests.d
  91642219e5787400e311db2dee1e8591  gcc/testsuite/gdc.test/runnable/traits_getVirtualIndex.d
! dea7fc25fd89a2df3918f62a896ba033  gcc/testsuite/gdc.test/runnable/traits_initSymbol.d
  f75e70758ecdcd92eb5f200d8337bb7e  gcc/testsuite/gdc.test/runnable/tuple_default_parameters.d
! 76488c99011e2857cfb40345b12f7a84  gcc/testsuite/gdc.test/runnable/uda.d
  ec04e4ea77bac2e91d90b587323bc296  gcc/testsuite/gdc.test/runnable/ufcs.d
  fad5d6afc8ee199fc52c3d0115ff4dc9  gcc/testsuite/gdc.test/runnable/uniformctor.d
  797041b16b4063f65751920488ee39ef  gcc/testsuite/gdc.test/runnable/unique_typeinfo_names.d
--- 110955,110963 ----
  9be15b72b386165ca16cdf973c293d24  gcc/testsuite/gdc.test/runnable/traits_getPointerBitmap.d
  7b5c0c588a5500319a2ccc41819e3b29  gcc/testsuite/gdc.test/runnable/traits_getUnitTests.d
  91642219e5787400e311db2dee1e8591  gcc/testsuite/gdc.test/runnable/traits_getVirtualIndex.d
! cb58b785c37b8dda0770b69beaeaa89d  gcc/testsuite/gdc.test/runnable/traits_initSymbol.d
  f75e70758ecdcd92eb5f200d8337bb7e  gcc/testsuite/gdc.test/runnable/tuple_default_parameters.d
! 261ad7badc3427abdff918056515e1f0  gcc/testsuite/gdc.test/runnable/uda.d
  ec04e4ea77bac2e91d90b587323bc296  gcc/testsuite/gdc.test/runnable/ufcs.d
  fad5d6afc8ee199fc52c3d0115ff4dc9  gcc/testsuite/gdc.test/runnable/uniformctor.d
  797041b16b4063f65751920488ee39ef  gcc/testsuite/gdc.test/runnable/unique_typeinfo_names.d
*************** e3d7c198fc7009b223f98b2e4884b462  gcc/te
*** 112245,112252 ****
  369aef7f75f5b20a85f41e161e1ffb04  gcc/testsuite/gfortran.dg/c_funloc_tests_4_driver.c
  c667584e20b0f824467db7ec4e3b9343  gcc/testsuite/gfortran.dg/c_funloc_tests_5.f03
  65b5cc5ca9373288fd99f49ba472e18f  gcc/testsuite/gfortran.dg/c_funloc_tests_6.f90
! 50f4b315c9bd0e25bc32f9dd348dd475  gcc/testsuite/gfortran.dg/c_funloc_tests_7.f90
  59490e9c85587d64c753922197bc3806  gcc/testsuite/gfortran.dg/c_funloc_tests_8.f90
  f8f8342ffbfc860b3fd25bf3bb1a89b1  gcc/testsuite/gfortran.dg/c_funptr_1.f90
  3fc97d796867c00b63bcdccb04232885  gcc/testsuite/gfortran.dg/c_funptr_1_mod.f90
  4b6d52265411683cdb8530282a8dff39  gcc/testsuite/gfortran.dg/c_kind_int128_test1.f03
--- 112368,112376 ----
  369aef7f75f5b20a85f41e161e1ffb04  gcc/testsuite/gfortran.dg/c_funloc_tests_4_driver.c
  c667584e20b0f824467db7ec4e3b9343  gcc/testsuite/gfortran.dg/c_funloc_tests_5.f03
  65b5cc5ca9373288fd99f49ba472e18f  gcc/testsuite/gfortran.dg/c_funloc_tests_6.f90
! c584b712c310fcef8e2418ef0145cf8a  gcc/testsuite/gfortran.dg/c_funloc_tests_7.f90
  59490e9c85587d64c753922197bc3806  gcc/testsuite/gfortran.dg/c_funloc_tests_8.f90
+ 885a61e43f249cb0957e72eed77a6de3  gcc/testsuite/gfortran.dg/c_funloc_tests_9.f90
  f8f8342ffbfc860b3fd25bf3bb1a89b1  gcc/testsuite/gfortran.dg/c_funptr_1.f90
  3fc97d796867c00b63bcdccb04232885  gcc/testsuite/gfortran.dg/c_funptr_1_mod.f90
  4b6d52265411683cdb8530282a8dff39  gcc/testsuite/gfortran.dg/c_kind_int128_test1.f03
*************** bd5f87ec53f49e6a8981f467e5bb9e41  gcc/te
*** 112573,112578 ****
--- 112697,112703 ----
  d7de9573af1b1b97fe9d86450aa3a0af  gcc/testsuite/gfortran.dg/class_array_21.f03
  91de14bd0e1e34515a91a4245b3da873  gcc/testsuite/gfortran.dg/class_array_22.f03
  ead9e764a198bfb098ed6bc432712080  gcc/testsuite/gfortran.dg/class_array_23.f03
+ 9840782c78dd0706c5345e75fd6e0689  gcc/testsuite/gfortran.dg/class_array_24.f90
  b5fd99d851b46b95300feac81c24ebf1  gcc/testsuite/gfortran.dg/class_array_3.f03
  38a17a95f960b99768a15d9116701526  gcc/testsuite/gfortran.dg/class_array_4.f03
  b4dd99bc2d3d2741e6f3769df3b8d9e0  gcc/testsuite/gfortran.dg/class_array_5.f03
*************** e7b56697ac64f36257ec59b471922aaa  gcc/te
*** 116842,116847 ****
--- 116967,116974 ----
  e21f38a2db39f95405441b61c12cf1e6  gcc/testsuite/gfortran.dg/pdt_8.f03
  50b90d7df8b77f8225042795ce534280  gcc/testsuite/gfortran.dg/pdt_80.f03
  08059a1fb646b56d0e4c4e079cca8ad9  gcc/testsuite/gfortran.dg/pdt_81.f03
+ f6695b4fb594606f02af64d62e1c0b75  gcc/testsuite/gfortran.dg/pdt_82.f03
+ 563711530085cf404f4c3314b360a937  gcc/testsuite/gfortran.dg/pdt_83.f03
  c621629f10feffbfa9fef1441a610e53  gcc/testsuite/gfortran.dg/pdt_9.f03
  ce217e87870d47796b72f99a0b0f46b7  gcc/testsuite/gfortran.dg/pdt_generic_1.f90
  4555f630cb01a40d0eaf421fd7ad9e77  gcc/testsuite/gfortran.dg/pointer_1.f90
*************** a01a62a01e9e7263ce5c3eb6b06e96a7  gcc/te
*** 117163,117172 ****
--- 117290,117301 ----
  6df685f9b4cb8f7874082b4e9d9e61f5  gcc/testsuite/gfortran.dg/pr122513-2.f90
  b6e7e7e8bea9878d7980ddcd5a97c5f5  gcc/testsuite/gfortran.dg/pr122513.f90
  b9c77c8cd78fcd9e57fbfafe732a8c95  gcc/testsuite/gfortran.dg/pr122936.f90
+ a010e074bf1f3f114db1b857bef5511f  gcc/testsuite/gfortran.dg/pr122949.f90
  fa053690c35a7cf0e14a876e94c10140  gcc/testsuite/gfortran.dg/pr122957.f90
  ca5d5af755aea457c1fd083af79f190d  gcc/testsuite/gfortran.dg/pr123375.f90
  fb1e8e16263374f736a90ec7790bb21b  gcc/testsuite/gfortran.dg/pr123772.f03
  f0d9a36dd6cfab9c2393885c55a61dd1  gcc/testsuite/gfortran.dg/pr123868.f90
+ 348d095bf62be63000e464d805a812fb  gcc/testsuite/gfortran.dg/pr123952.f90
  984f8307f36d56a0b48b5acce2dd5eb5  gcc/testsuite/gfortran.dg/pr12884.f
  64075248b9d1bffd6f380bb4e2a6eae0  gcc/testsuite/gfortran.dg/pr15129.f90
  2b5f18b773a5db29b0a2ee2d8cce767c  gcc/testsuite/gfortran.dg/pr15140.f90
*************** a613feb27e8e5adc7cb1fa1ae85d2092  gcc/te
*** 118745,118750 ****
--- 118874,118880 ----
  22ee495f1a896edbc49a08ff4c8ab74f  gcc/testsuite/gfortran.dg/string_length_2.f90
  e963c4744d55ef72757f5498e8f5d24a  gcc/testsuite/gfortran.dg/string_length_3.f90
  20d9ed8c5a22a61701284d70e137fca6  gcc/testsuite/gfortran.dg/string_length_4.f90
+ be89d2f0f47546c791c0aff357215abf  gcc/testsuite/gfortran.dg/string_length_5.f90
  97c8198bad4ee1d737d8dcf71ef53812  gcc/testsuite/gfortran.dg/string_null_compare_1.f
  1580c27fb69ee08df42bbee7b629c607  gcc/testsuite/gfortran.dg/string_pad_trunc.f90
  3194cca2b2581964987280c70f05554a  gcc/testsuite/gfortran.dg/structure_constructor_1.f03
*************** b6cbc2d7f0f983561ecfb1e889cc9564  gcc/te
*** 119328,119333 ****
--- 119458,119464 ----
  82e3d5f4f3c4f37d7f7c646d31ed6168  gcc/testsuite/gfortran.dg/vect/pr115710.f90
  3392d3d67c1af3233bcb1cb1563137c7  gcc/testsuite/gfortran.dg/vect/pr116956.f90
  968b7f70f6ea492d4668938e2d929b2c  gcc/testsuite/gfortran.dg/vect/pr123016.f90
+ 69ce1acd2174b1da669fa0ee2dcfcd74  gcc/testsuite/gfortran.dg/vect/pr123986.f90
  a17cb1ab891a5af3471298da97331dda  gcc/testsuite/gfortran.dg/vect/pr19049.f90
  fdb4a5f5d5eff2fd75822f14875bd776  gcc/testsuite/gfortran.dg/vect/pr32377.f90
  bbb6998ea100c6c2039976c6446a0c10  gcc/testsuite/gfortran.dg/vect/pr32380.f
*************** fb6550ce07cad44a375af2fd3012b578  gcc/te
*** 123201,123206 ****
--- 123332,123341 ----
  efe1ef2c8689ede7a2b3cbc6d7c20ca3  gcc/testsuite/gnat.dg/limited_with7.adb
  cee08c997b095f2bcb58affa1cb7ff08  gcc/testsuite/gnat.dg/limited_with7.ads
  46cb1b8cb1fe997cfdcca60b40e3af0f  gcc/testsuite/gnat.dg/limited_with7_pkg.ads
+ 5573a481ed7753a2f401ae4351e53382  gcc/testsuite/gnat.dg/limited_with8.adb
+ e52e76d9d4bbb46855e6284bf43390a7  gcc/testsuite/gnat.dg/limited_with8_pkg1.ads
+ 7a7cd4138d848b4a7cc74f8932107232  gcc/testsuite/gnat.dg/limited_with8_pkg2.adb
+ e6e20fc582f163fbc92f724038c9ffbd  gcc/testsuite/gnat.dg/limited_with8_pkg2.ads
  bf791540ed27e282888b92614b5bb915  gcc/testsuite/gnat.dg/linkedlist.adb
  40dfe1efcee13ecd8e542eb0c4dbb341  gcc/testsuite/gnat.dg/loop_address.adb
  f0b84a52fd304069c6d2f79acc1c5551  gcc/testsuite/gnat.dg/loop_address2.adb
*************** a0ed36c59884ca42f622cc1d30faff4d  gcc/te
*** 127001,127007 ****
  f137fa2e280bd8fee6a57544dbe520a8  gcc/testsuite/lib/gcc.exp
  c9227c4c135d0c2dda85d1e50917d3d8  gcc/testsuite/lib/gcov.exp
  1ab113b2aab75f691397f0a23c85a675  gcc/testsuite/lib/gdc-dg.exp
! ad266dd5d573dd7822e061f90f03b001  gcc/testsuite/lib/gdc-utils.exp
  659d28254b74bb134c269af0f05ac5d1  gcc/testsuite/lib/gdc.exp
  8275af7d4f065301c60ecc40130d01f6  gcc/testsuite/lib/gfortran-dg.exp
  a1d88f62e82c416786fab3efbde626fa  gcc/testsuite/lib/gfortran.exp
--- 127136,127142 ----
  f137fa2e280bd8fee6a57544dbe520a8  gcc/testsuite/lib/gcc.exp
  c9227c4c135d0c2dda85d1e50917d3d8  gcc/testsuite/lib/gcov.exp
  1ab113b2aab75f691397f0a23c85a675  gcc/testsuite/lib/gdc-dg.exp
! 47d9d384596e60d78772d4cbb578d9fe  gcc/testsuite/lib/gdc-utils.exp
  659d28254b74bb134c269af0f05ac5d1  gcc/testsuite/lib/gdc.exp
  8275af7d4f065301c60ecc40130d01f6  gcc/testsuite/lib/gfortran-dg.exp
  a1d88f62e82c416786fab3efbde626fa  gcc/testsuite/lib/gfortran.exp
*************** af452bfcd099f7ad757c0709565fb6f2  gcc/te
*** 127016,127022 ****
  c0366f2c31a7d5fba486ea04c6f08b9a  gcc/testsuite/lib/go.exp
  569a9bbf0bbca4b3648f90532f4b4b21  gcc/testsuite/lib/htmltest.py
  c0b7997d28c0e4c1e52d9c22fe7612a7  gcc/testsuite/lib/hwasan-dg.exp
! 2adc32b86c2c21fb743eae5b8d216245  gcc/testsuite/lib/lto.exp
  d41da704ebed3a8897cc68ece08ced36  gcc/testsuite/lib/mike-g++.exp
  136cfa716447eedc0072717e30a066af  gcc/testsuite/lib/mike-gcc.exp
  6cae4002752080c9ace9f60df166aefe  gcc/testsuite/lib/modules.exp
--- 127151,127157 ----
  c0366f2c31a7d5fba486ea04c6f08b9a  gcc/testsuite/lib/go.exp
  569a9bbf0bbca4b3648f90532f4b4b21  gcc/testsuite/lib/htmltest.py
  c0b7997d28c0e4c1e52d9c22fe7612a7  gcc/testsuite/lib/hwasan-dg.exp
! d1598d17d16fc7cf6093cc0ceb65e958  gcc/testsuite/lib/lto.exp
  d41da704ebed3a8897cc68ece08ced36  gcc/testsuite/lib/mike-g++.exp
  136cfa716447eedc0072717e30a066af  gcc/testsuite/lib/mike-gcc.exp
  6cae4002752080c9ace9f60df166aefe  gcc/testsuite/lib/modules.exp
*************** de9eeadec9703aff96169206e31a3a22  gcc/te
*** 127054,127060 ****
  275f7eb9618e6b097a58c1fba25cdb9c  gcc/testsuite/lib/scanwpaipa.exp
  9bc4cbcf0cb4f1aa30a8cf3142d157eb  gcc/testsuite/lib/target-libpath.exp
  ba9ca262f3c7ac3b9717ac474fa255b8  gcc/testsuite/lib/target-supports-dg.exp
! 34ecfe8e8b1fe10f2dc851692cdaa74d  gcc/testsuite/lib/target-supports.exp
  b1eb2edcf4941bfb00c200eb000a0a7b  gcc/testsuite/lib/target-utils.exp
  98b890f6c455deafd6ca241993fc5d67  gcc/testsuite/lib/timeout-dg.exp
  0afb0c69501fa44908d13017be208db3  gcc/testsuite/lib/timeout.exp
--- 127189,127195 ----
  275f7eb9618e6b097a58c1fba25cdb9c  gcc/testsuite/lib/scanwpaipa.exp
  9bc4cbcf0cb4f1aa30a8cf3142d157eb  gcc/testsuite/lib/target-libpath.exp
  ba9ca262f3c7ac3b9717ac474fa255b8  gcc/testsuite/lib/target-supports-dg.exp
! 03f6b07c309d54f6d63aa94cecd52e0f  gcc/testsuite/lib/target-supports.exp
  b1eb2edcf4941bfb00c200eb000a0a7b  gcc/testsuite/lib/target-utils.exp
  98b890f6c455deafd6ca241993fc5d67  gcc/testsuite/lib/timeout-dg.exp
  0afb0c69501fa44908d13017be208db3  gcc/testsuite/lib/timeout.exp
*************** cbe90a107fcd179a95684d58982b5779  gcc/te
*** 129730,129738 ****
  ee4165de3d74b0fde5ca55a403c7f37b  gcc/timevar.def
  160bb6626a9562507750456253c82eb4  gcc/timevar.h
  4815aa7e0102f83eef9e638939f57d05  gcc/topics/pass-events.h
! 2a561ff3c13599ceb8bd8423cb38a1fa  gcc/toplev.cc
  4cc76bc48e83cd9bdd4f991959a6f230  gcc/toplev.h
! fcca940e90972a1751b7c59af769d62f  gcc/tracer.cc
  461d12af5a299c303884d0d07511a6a9  gcc/tracer.h
  993a97b28cca7c2e5421ec297455f2ce  gcc/trans-mem.cc
  a4340dde4019e28f9fad54b2a7770c74  gcc/trans-mem.h
--- 129865,129873 ----
  ee4165de3d74b0fde5ca55a403c7f37b  gcc/timevar.def
  160bb6626a9562507750456253c82eb4  gcc/timevar.h
  4815aa7e0102f83eef9e638939f57d05  gcc/topics/pass-events.h
! 69fb7b48ead8734e47ad2a97e00725eb  gcc/toplev.cc
  4cc76bc48e83cd9bdd4f991959a6f230  gcc/toplev.h
! 08a29208cd04c7f3a5f2b43bec77b277  gcc/tracer.cc
  461d12af5a299c303884d0d07511a6a9  gcc/tracer.h
  993a97b28cca7c2e5421ec297455f2ce  gcc/trans-mem.cc
  a4340dde4019e28f9fad54b2a7770c74  gcc/trans-mem.h
*************** a4340dde4019e28f9fad54b2a7770c74  gcc/tr
*** 129740,129752 ****
  ed70c897fa5690940494f2b8b6e27f21  gcc/tree-affine.h
  bc74f92323ee5636997f0c03aec16115  gcc/tree-assume.cc
  a0c02d542dbd50cb44704b2ffce2739c  gcc/tree-call-cdce.cc
! 3027a5d73970ded255e2faa7d643fb1d  gcc/tree-cfg.cc
  809e1f07de4be5a3fc990f66bd6d1105  gcc/tree-cfg.h
  93710abe3578ad27dba111e1d3a1c795  gcc/tree-cfgcleanup.cc
  645c34c74323c655a1d20f8f76e64b27  gcc/tree-cfgcleanup.h
  447f46e51936add5de4aaa77a96039ba  gcc/tree-chrec.cc
  1cf760e3e7aab6f94a5e56897486623d  gcc/tree-chrec.h
! 2ef5259e28d138d053c8a5df2217ec69  gcc/tree-complex.cc
  dea74d5dd62de97a94d9f3e749f5bd06  gcc/tree-core.h
  4a0e32c3f4db8d2b600df44d6f3bfb90  gcc/tree-data-ref.cc
  885e741c83d91ee864f9af2a1a079312  gcc/tree-data-ref.h
--- 129875,129887 ----
  ed70c897fa5690940494f2b8b6e27f21  gcc/tree-affine.h
  bc74f92323ee5636997f0c03aec16115  gcc/tree-assume.cc
  a0c02d542dbd50cb44704b2ffce2739c  gcc/tree-call-cdce.cc
! aeab5516d26c7cf2e149e25f6d1b22d4  gcc/tree-cfg.cc
  809e1f07de4be5a3fc990f66bd6d1105  gcc/tree-cfg.h
  93710abe3578ad27dba111e1d3a1c795  gcc/tree-cfgcleanup.cc
  645c34c74323c655a1d20f8f76e64b27  gcc/tree-cfgcleanup.h
  447f46e51936add5de4aaa77a96039ba  gcc/tree-chrec.cc
  1cf760e3e7aab6f94a5e56897486623d  gcc/tree-chrec.h
! 08408ed9136be16194101b57321b29bb  gcc/tree-complex.cc
  dea74d5dd62de97a94d9f3e749f5bd06  gcc/tree-core.h
  4a0e32c3f4db8d2b600df44d6f3bfb90  gcc/tree-data-ref.cc
  885e741c83d91ee864f9af2a1a079312  gcc/tree-data-ref.h
*************** ffbdc6cd519d8fe2b404591eecafac89  gcc/tr
*** 129775,129784 ****
  baa9585c40c967c058c56f5dab5c1b08  gcc/tree-logical-location.cc
  7fbb6fb1ff5a3c5a77c957e593aa7d49  gcc/tree-logical-location.h
  7232339926988cc760690932854773a6  gcc/tree-loop-distribution.cc
! 3d4956b009a363a235f9f717dec5016b  gcc/tree-nested.cc
  7bdbfccebe0ea4963fd220c0676ad6a2  gcc/tree-nested.h
  d239500c752edeffb49a14623c8a522a  gcc/tree-nrv.cc
! 20a6553b104ca145296d053680c37f92  gcc/tree-object-size.cc
  ceb2c708500ddb7d48dbc25764c96b5d  gcc/tree-object-size.h
  e3ac97ae6e4c501bb7dabaf26cdf8a30  gcc/tree-outof-ssa.cc
  7810fba9c2ee7167c24df41d8458fad3  gcc/tree-outof-ssa.h
--- 129910,129919 ----
  baa9585c40c967c058c56f5dab5c1b08  gcc/tree-logical-location.cc
  7fbb6fb1ff5a3c5a77c957e593aa7d49  gcc/tree-logical-location.h
  7232339926988cc760690932854773a6  gcc/tree-loop-distribution.cc
! b980e97059595b9c229e76799b1309df  gcc/tree-nested.cc
  7bdbfccebe0ea4963fd220c0676ad6a2  gcc/tree-nested.h
  d239500c752edeffb49a14623c8a522a  gcc/tree-nrv.cc
! cc426a8cd04031d2ec180f0d10e2531c  gcc/tree-object-size.cc
  ceb2c708500ddb7d48dbc25764c96b5d  gcc/tree-object-size.h
  e3ac97ae6e4c501bb7dabaf26cdf8a30  gcc/tree-outof-ssa.cc
  7810fba9c2ee7167c24df41d8458fad3  gcc/tree-outof-ssa.h
*************** a24cff30baef257a999b4fac3ca47d5a  gcc/tr
*** 129791,129800 ****
  47856333edaecc32813dad93ecb96fbe  gcc/tree-pretty-print-markup.h
  a915783d6a3d6ec96408624f8773e9b7  gcc/tree-pretty-print.cc
  c021bc7a8aa59f2b8184de8bff6b1d14  gcc/tree-pretty-print.h
! 088c11dc59d7ddfafad885e8514fd394  gcc/tree-profile.cc
  a39e1901dac55b45c25e4542501e20ff  gcc/tree-scalar-evolution.cc
  0ac41331ad8cbe754ee005d5ef9aff94  gcc/tree-scalar-evolution.h
! 8f4507a5b8df81ae6afd20a507352643  gcc/tree-sra.cc
  3c8e89a03a1e2e77a99e5b05bb2976ae  gcc/tree-sra.h
  39f64c2e1c6ae742ac610f096aa9e013  gcc/tree-ssa-address.cc
  2cc8f7ab186c793b91875224ed16edc6  gcc/tree-ssa-address.h
--- 129926,129935 ----
  47856333edaecc32813dad93ecb96fbe  gcc/tree-pretty-print-markup.h
  a915783d6a3d6ec96408624f8773e9b7  gcc/tree-pretty-print.cc
  c021bc7a8aa59f2b8184de8bff6b1d14  gcc/tree-pretty-print.h
! 82882fd59c37488a774ecb1dc5934265  gcc/tree-profile.cc
  a39e1901dac55b45c25e4542501e20ff  gcc/tree-scalar-evolution.cc
  0ac41331ad8cbe754ee005d5ef9aff94  gcc/tree-scalar-evolution.h
! 617f27cfa756460c7223a58f5d1e9c14  gcc/tree-sra.cc
  3c8e89a03a1e2e77a99e5b05bb2976ae  gcc/tree-sra.h
  39f64c2e1c6ae742ac610f096aa9e013  gcc/tree-ssa-address.cc
  2cc8f7ab186c793b91875224ed16edc6  gcc/tree-ssa-address.h
*************** c1c4fe85c3abe80948e72eb9950ff189  gcc/tr
*** 129812,129818 ****
  ec31925fe8431d27258939fc79f1f02e  gcc/tree-ssa-dom.h
  2def3c3d20d186b56fd7b598ee0124be  gcc/tree-ssa-dse.cc
  1df01d660e0f98ade0ae7a3152aa33ed  gcc/tree-ssa-dse.h
! 4e18183d03f996afa6742440588cefbc  gcc/tree-ssa-forwprop.cc
  44658616283db8f7d8bb40eb2c38e605  gcc/tree-ssa-ifcombine.cc
  96b11e029c398aaecd1c642c41c88884  gcc/tree-ssa-live.cc
  7c36b95c9d109be3302936ceed49fb4f  gcc/tree-ssa-live.h
--- 129947,129953 ----
  ec31925fe8431d27258939fc79f1f02e  gcc/tree-ssa-dom.h
  2def3c3d20d186b56fd7b598ee0124be  gcc/tree-ssa-dse.cc
  1df01d660e0f98ade0ae7a3152aa33ed  gcc/tree-ssa-dse.h
! 7d680a8da62539dfc677afa027eb2377  gcc/tree-ssa-forwprop.cc
  44658616283db8f7d8bb40eb2c38e605  gcc/tree-ssa-ifcombine.cc
  96b11e029c398aaecd1c642c41c88884  gcc/tree-ssa-live.cc
  7c36b95c9d109be3302936ceed49fb4f  gcc/tree-ssa-live.h
*************** ad87c41606eb7cb23a85736982ce8b9f  gcc/tr
*** 129830,129836 ****
  7d41277dc2b070fc20de82de11dfe8bc  gcc/tree-ssa-loop-unswitch.cc
  faa18178392bba086edee765e464318c  gcc/tree-ssa-loop.cc
  c1590659dad2b41a69adb7654db65644  gcc/tree-ssa-loop.h
! 388e2a3d7e31bd4eafb64e2ea8c722a8  gcc/tree-ssa-math-opts.cc
  fa83f982a805985b3a3da2ca5e10e43a  gcc/tree-ssa-math-opts.h
  9b5221bc2087b040736afeb799949b04  gcc/tree-ssa-operands.cc
  f83d0b12185538e6f679296bebfe3d2f  gcc/tree-ssa-operands.h
--- 129965,129971 ----
  7d41277dc2b070fc20de82de11dfe8bc  gcc/tree-ssa-loop-unswitch.cc
  faa18178392bba086edee765e464318c  gcc/tree-ssa-loop.cc
  c1590659dad2b41a69adb7654db65644  gcc/tree-ssa-loop.h
! ca4e0e1547f370c2e3e2caa8726dc4d5  gcc/tree-ssa-math-opts.cc
  fa83f982a805985b3a3da2ca5e10e43a  gcc/tree-ssa-math-opts.h
  9b5221bc2087b040736afeb799949b04  gcc/tree-ssa-operands.cc
  f83d0b12185538e6f679296bebfe3d2f  gcc/tree-ssa-operands.h
*************** ad70c411b7d21101dac0ae7123f4d652  gcc/tr
*** 129870,129885 ****
  f8119a019450befbbf3e3e40b010cf74  gcc/tree-streamer-out.cc
  4d591a91fc3bb023839baddd9e66a821  gcc/tree-streamer.cc
  9776b3844a0761f68ee0aca3fd2e74ea  gcc/tree-streamer.h
! d05b6cdafcded128262d93d015eb5396  gcc/tree-switch-conversion.cc
  e316eddfbf9a02433a4ee93e648f3aa4  gcc/tree-switch-conversion.h
  6a0f6268d598b3c59871ad41e01f33c1  gcc/tree-tailcall.cc
  8b778220f046450b620cf0b570927dd3  gcc/tree-vect-data-refs.cc
  a423c268d5ba9ac563732fd6d038c572  gcc/tree-vect-generic.cc
! c1cdefadc1abb9281e2f4868a0bc14ff  gcc/tree-vect-loop-manip.cc
  0978b61fd549f214fdfe75d882a528e0  gcc/tree-vect-loop.cc
  550c845a7dca165130319d9b3d1f4b0f  gcc/tree-vect-patterns.cc
  ef0b51a362b8764cf6b0628ed16b2dde  gcc/tree-vect-slp-patterns.cc
! 11955ffbdc9146f2cd332eb6295f102e  gcc/tree-vect-slp.cc
  08b3e853979fd179b6978d50d0882e85  gcc/tree-vect-stmts.cc
  42032e04f389a2e0f43fbb46ac091dac  gcc/tree-vector-builder.cc
  4a1b4947e64a076fdca46d14aab2181f  gcc/tree-vector-builder.h
--- 130005,130020 ----
  f8119a019450befbbf3e3e40b010cf74  gcc/tree-streamer-out.cc
  4d591a91fc3bb023839baddd9e66a821  gcc/tree-streamer.cc
  9776b3844a0761f68ee0aca3fd2e74ea  gcc/tree-streamer.h
! a276a785e139fcb28cbe71af406290bf  gcc/tree-switch-conversion.cc
  e316eddfbf9a02433a4ee93e648f3aa4  gcc/tree-switch-conversion.h
  6a0f6268d598b3c59871ad41e01f33c1  gcc/tree-tailcall.cc
  8b778220f046450b620cf0b570927dd3  gcc/tree-vect-data-refs.cc
  a423c268d5ba9ac563732fd6d038c572  gcc/tree-vect-generic.cc
! 5945009d0ba922b53aacbb6f724d3caf  gcc/tree-vect-loop-manip.cc
  0978b61fd549f214fdfe75d882a528e0  gcc/tree-vect-loop.cc
  550c845a7dca165130319d9b3d1f4b0f  gcc/tree-vect-patterns.cc
  ef0b51a362b8764cf6b0628ed16b2dde  gcc/tree-vect-slp-patterns.cc
! 0298aeb5a5f9949f82a646703e6bab32  gcc/tree-vect-slp.cc
  08b3e853979fd179b6978d50d0882e85  gcc/tree-vect-stmts.cc
  42032e04f389a2e0f43fbb46ac091dac  gcc/tree-vector-builder.cc
  4a1b4947e64a076fdca46d14aab2181f  gcc/tree-vector-builder.h
*************** ef0b51a362b8764cf6b0628ed16b2dde  gcc/tr
*** 129887,129901 ****
  cfa1038dc37b4524f6e31c0a3fd48158  gcc/tree-vectorizer.h
  366e0ed463591e966ced4d1fd421282d  gcc/tree-vrp.cc
  d7273e63988959e17e61bc75f7f0cf29  gcc/tree-vrp.h
! d18ffa514babe55e8b1ef60efaf54e55  gcc/tree.cc
  f88475a43ca5e7c59112c941875a762c  gcc/tree.def
! 329fce5912fef5bde6ed43043b570dc5  gcc/tree.h
  56652e612288132aa8395fdf720b0146  gcc/treestruct.def
  6c6350469a3dbb37f658f247d16ed872  gcc/tristate.cc
  704359710c2d40a58b6646b2da626443  gcc/tristate.h
  e43734cf1c3363a7a6d250eaa9c6b87b  gcc/tsan.cc
  818c474ed64c58456d895ed7d12be883  gcc/tsan.h
! 336e54342535f496d73e23969adb6b49  gcc/tsystem.h
  c79610c0bd601062663853b8fcae475c  gcc/typeclass.h
  76d55cad7b50e37496d3e8cd7868baa3  gcc/typed-splay-tree.cc
  09689981816eb6cd15fda96e89152291  gcc/typed-splay-tree.h
--- 130022,130036 ----
  cfa1038dc37b4524f6e31c0a3fd48158  gcc/tree-vectorizer.h
  366e0ed463591e966ced4d1fd421282d  gcc/tree-vrp.cc
  d7273e63988959e17e61bc75f7f0cf29  gcc/tree-vrp.h
! 8b42d823466d7303da83e62b8a0eefac  gcc/tree.cc
  f88475a43ca5e7c59112c941875a762c  gcc/tree.def
! ff8f74439866b7db0b25efed0352d02b  gcc/tree.h
  56652e612288132aa8395fdf720b0146  gcc/treestruct.def
  6c6350469a3dbb37f658f247d16ed872  gcc/tristate.cc
  704359710c2d40a58b6646b2da626443  gcc/tristate.h
  e43734cf1c3363a7a6d250eaa9c6b87b  gcc/tsan.cc
  818c474ed64c58456d895ed7d12be883  gcc/tsan.h
! 73cf7e5eef7232575aac45474ed7f03a  gcc/tsystem.h
  c79610c0bd601062663853b8fcae475c  gcc/typeclass.h
  76d55cad7b50e37496d3e8cd7868baa3  gcc/typed-splay-tree.cc
  09689981816eb6cd15fda96e89152291  gcc/typed-splay-tree.h
*************** be1170a025f3c3a0a5977676d6c260f5  gcc/va
*** 129914,129931 ****
  4235b252ca8759d55215ee9cd42e1e93  gcc/value-range-pretty-print.h
  e992c1401c79c9a800a799632e7c3a66  gcc/value-range-storage.cc
  93e35ace3b0e7ef184149d285231fb36  gcc/value-range-storage.h
! 3e90044bf5d9fa0fb620bc07a328c650  gcc/value-range.cc
! 37f3f5b1a02f248b216bf2672c4f294e  gcc/value-range.h
  d8cea5c3e2f91237a9883149d5a0b189  gcc/value-relation.cc
  a5b43b36266e8e9188030eb977b957ea  gcc/value-relation.h
! 83b2f0f57059d42d6a9d2e6cc14dd6c7  gcc/var-tracking.cc
! 14791399467ed24ab33a90132a800c50  gcc/varasm.cc
  183473e8cac5bad9279eb1937e4edda9  gcc/varasm.h
  136dfca78729a02f744f7929df4331c9  gcc/varpool.cc
  1eb1aeaffcea7302f0e479e7e824f742  gcc/vec-perm-indices.cc
  f5d57a9ceb21da232787c72a12a3b597  gcc/vec-perm-indices.h
  0eab6e9da32af1112170f518a116f7cb  gcc/vec.cc
! 1fcff5d945fc0e5865f68942de7c0228  gcc/vec.h
  f2d9db7b65884c657d64eb3ef0099e7e  gcc/vector-builder.h
  5bd2fdb85907c3cd81a94bbb079987db  gcc/vmsdbg.h
  95acf3cb9ab17aea0a6c6f22c2aed8cb  gcc/vmsdbgout.cc
--- 130049,130066 ----
  4235b252ca8759d55215ee9cd42e1e93  gcc/value-range-pretty-print.h
  e992c1401c79c9a800a799632e7c3a66  gcc/value-range-storage.cc
  93e35ace3b0e7ef184149d285231fb36  gcc/value-range-storage.h
! 44450674ee82f7f36311b3b58ea85b33  gcc/value-range.cc
! 54f52d51793d03199259f9706fb0a9a1  gcc/value-range.h
  d8cea5c3e2f91237a9883149d5a0b189  gcc/value-relation.cc
  a5b43b36266e8e9188030eb977b957ea  gcc/value-relation.h
! d6e6c12ad7955457218136e35f5a30d6  gcc/var-tracking.cc
! 1657e0e5b170dd495911d1c2ceeb23da  gcc/varasm.cc
  183473e8cac5bad9279eb1937e4edda9  gcc/varasm.h
  136dfca78729a02f744f7929df4331c9  gcc/varpool.cc
  1eb1aeaffcea7302f0e479e7e824f742  gcc/vec-perm-indices.cc
  f5d57a9ceb21da232787c72a12a3b597  gcc/vec-perm-indices.h
  0eab6e9da32af1112170f518a116f7cb  gcc/vec.cc
! c91273a15934abde46fad0e255ab7a7d  gcc/vec.h
  f2d9db7b65884c657d64eb3ef0099e7e  gcc/vector-builder.h
  5bd2fdb85907c3cd81a94bbb079987db  gcc/vmsdbg.h
  95acf3cb9ab17aea0a6c6f22c2aed8cb  gcc/vmsdbgout.cc
*************** c4e8176c1964a5ebe0a55900f2141299  gotool
*** 129959,129974 ****
  eb2aeb3a6cffe7b26a8f1c8a2da23dcd  gotools/gofmt.1
  59530bdf33659b29e73d4adb9f9f6552  include/COPYING
  d32239bcb673463ab874e80d47fae504  include/COPYING3
! b624bd8e7fb5c6cebcff53e95b2ac4f9  include/ChangeLog
  4263432a72ff47ed8bf420208ee7eea5  include/ChangeLog-9103
  a43d76108493b20da790f953f829c6a5  include/ChangeLog.jit
  e4fcea241d25fd2866c6026dcccbe5bd  include/ansidecl.h
  5bfc078257952b4c6f9300197de8edf4  include/btf.h
  ed012d2e1b2a35d00ee7b147a09713fe  include/collectorAPI.h
  2110ede75cbfd491e2b7bb4deb05b5c3  include/ctf.h
! 49e50136f35b13af981d70b155e754ef  include/cuda/cuda.h
  73105846f80b24f2de5ca33a74c4a3fd  include/demangle.h
! 6e142f7a9baaa19b3bfb1a7a6fd7cba2  include/doubly-linked-list.h
  de08e3c7e21f36ea23bcc1e19ef0d81f  include/dwarf2.def
  e3524ea4cc4a5d0491f3c5e034d8fce9  include/dwarf2.h
  a22fa0998e3b6214e560e27e65108188  include/dyn-string.h
--- 130094,130109 ----
  eb2aeb3a6cffe7b26a8f1c8a2da23dcd  gotools/gofmt.1
  59530bdf33659b29e73d4adb9f9f6552  include/COPYING
  d32239bcb673463ab874e80d47fae504  include/COPYING3
! 7951d14fb62dcd2e310889d7b17da201  include/ChangeLog
  4263432a72ff47ed8bf420208ee7eea5  include/ChangeLog-9103
  a43d76108493b20da790f953f829c6a5  include/ChangeLog.jit
  e4fcea241d25fd2866c6026dcccbe5bd  include/ansidecl.h
  5bfc078257952b4c6f9300197de8edf4  include/btf.h
  ed012d2e1b2a35d00ee7b147a09713fe  include/collectorAPI.h
  2110ede75cbfd491e2b7bb4deb05b5c3  include/ctf.h
! 4a7378da931c05c2172a79e6ed78de02  include/cuda/cuda.h
  73105846f80b24f2de5ca33a74c4a3fd  include/demangle.h
! 622d688e2437daea4f45308fbc4b9825  include/doubly-linked-list.h
  de08e3c7e21f36ea23bcc1e19ef0d81f  include/dwarf2.def
  e3524ea4cc4a5d0491f3c5e034d8fce9  include/dwarf2.h
  a22fa0998e3b6214e560e27e65108188  include/dyn-string.h
*************** ef155d31968dfc48b5571fa874488c26  libga6
*** 130768,130774 ****
  fc49680d0c6e77e437523ea496a6b8c4  libga68/m4/autoconf.m4
  b0d017b83148520411f1c1ebdbf28b58  libga68/sppp.awk
  de04458df73a22c6f12b67294ae6d428  libga68/transput.a68.in
! 45bd4eef48ada61448aaabec0528bf17  libgcc/ChangeLog
  9ce0b8c50fec68eb0555ae800e4e457e  libgcc/Makefile.in
  0dafba01dbe15f4c680f6fe25dd268f1  libgcc/config.host
  46412830a2ee8a02503ccc921912c3cf  libgcc/config.in
--- 130903,130909 ----
  fc49680d0c6e77e437523ea496a6b8c4  libga68/m4/autoconf.m4
  b0d017b83148520411f1c1ebdbf28b58  libga68/sppp.awk
  de04458df73a22c6f12b67294ae6d428  libga68/transput.a68.in
! cd6abb1acc6af03674a3ec3f6faf9598  libgcc/ChangeLog
  9ce0b8c50fec68eb0555ae800e4e457e  libgcc/Makefile.in
  0dafba01dbe15f4c680f6fe25dd268f1  libgcc/config.host
  46412830a2ee8a02503ccc921912c3cf  libgcc/config.in
*************** c34db7eb4a99862947c349878e2c2cd6  libgcc
*** 131123,131129 ****
  2c7e8981b9c1c3734aa4d6c3213e9e12  libgcc/config/i386/gthr-win32-cond.c
  3c5ad2bbc8bd93ebaf6e8857fb15074e  libgcc/config/i386/gthr-win32-thread.c
  398f7a22c3634540f747f1e53afefe9b  libgcc/config/i386/gthr-win32.c
! 7a1f2498c19cfe36f68c611117c0ea81  libgcc/config/i386/gthr-win32.h
  74b4d2fb578bea1c8304a4d83dd1bac4  libgcc/config/i386/heap-trampoline.c
  70f006cce2a22568166d0a3d379d4a87  libgcc/config/i386/i386-asm.h
  43034a3293124235dd63794fee5aa16a  libgcc/config/i386/libgcc-bsd.ver
--- 131258,131264 ----
  2c7e8981b9c1c3734aa4d6c3213e9e12  libgcc/config/i386/gthr-win32-cond.c
  3c5ad2bbc8bd93ebaf6e8857fb15074e  libgcc/config/i386/gthr-win32-thread.c
  398f7a22c3634540f747f1e53afefe9b  libgcc/config/i386/gthr-win32.c
! 282d793208fef5cb75b797e4dad023ea  libgcc/config/i386/gthr-win32.h
  74b4d2fb578bea1c8304a4d83dd1bac4  libgcc/config/i386/heap-trampoline.c
  70f006cce2a22568166d0a3d379d4a87  libgcc/config/i386/i386-asm.h
  43034a3293124235dd63794fee5aa16a  libgcc/config/i386/libgcc-bsd.ver
*************** bb60ec15ea01e2d3f07f2b944b739c6d  libgcc
*** 131764,131770 ****
  dc51b5d6e7fd35fa1156670d20c6464d  libgcc/config/or1k/t-crtstuff
  d8c0cf3327ffe0d187c4b4196a025135  libgcc/config/or1k/t-or1k
  5eaced7c84cef9be377887e46fe16e42  libgcc/config/pa/fptr.c
! 98bd42717eb47d3bb050d4baf768d119  libgcc/config/pa/gthr-dce.h
  14e7d9ffefa5bee28e71d83e08d27f39  libgcc/config/pa/hpux-unwind.h
  7a1f592d3a6ac475266f16c9d21c58b6  libgcc/config/pa/lib2funcs.S
  2abf2516b24fec1f4162ee3f6ea7c490  libgcc/config/pa/linux-atomic.c
--- 131899,131905 ----
  dc51b5d6e7fd35fa1156670d20c6464d  libgcc/config/or1k/t-crtstuff
  d8c0cf3327ffe0d187c4b4196a025135  libgcc/config/or1k/t-or1k
  5eaced7c84cef9be377887e46fe16e42  libgcc/config/pa/fptr.c
! f274e1b54fc3bba9a902b6b0af5b9756  libgcc/config/pa/gthr-dce.h
  14e7d9ffefa5bee28e71d83e08d27f39  libgcc/config/pa/hpux-unwind.h
  7a1f592d3a6ac475266f16c9d21c58b6  libgcc/config/pa/lib2funcs.S
  2abf2516b24fec1f4162ee3f6ea7c490  libgcc/config/pa/linux-atomic.c
*************** b7bdc64c03d62f87f61d3d8a61a75d2d  libgcc
*** 132345,132351 ****
  227525d7193394128a83ce15e7642842  libgcc/vtv_start.c
  23ad2a8d256ba5dca28382d64a20e8f2  libgcc/vtv_start_preinit.c
  e50c29294062dfe571c9c053a8ec217b  libgcobol/.gitignore
! 1a3c7e08e218722d2ccac95daf86d70b  libgcobol/ChangeLog
  b227feb8ac8df349788743a8ade3e840  libgcobol/LICENSE
  04057a81e83131ef0e6ab68dbfab7511  libgcobol/Makefile.am
  32b0df03b8a0a32ad6a44a8623dc0ab2  libgcobol/Makefile.in
--- 132480,132486 ----
  227525d7193394128a83ce15e7642842  libgcc/vtv_start.c
  23ad2a8d256ba5dca28382d64a20e8f2  libgcc/vtv_start_preinit.c
  e50c29294062dfe571c9c053a8ec217b  libgcobol/.gitignore
! b36f1fe5164be3518f6b2b292ae81398  libgcobol/ChangeLog
  b227feb8ac8df349788743a8ade3e840  libgcobol/LICENSE
  04057a81e83131ef0e6ab68dbfab7511  libgcobol/Makefile.am
  32b0df03b8a0a32ad6a44a8623dc0ab2  libgcobol/Makefile.in
*************** d5f038474fd5faad3f79701cbb81bf30  libgco
*** 132417,132423 ****
  0cbcc2fa8aaaeccc8cd28ddd6e3acb0b  libgcobol/posix/udf/posix-write.cbl
  db96b460f17e3ec206617c052da2d651  libgcobol/stringbin.cc
  c9e5ab16fc25ce977c378934b670079e  libgcobol/stringbin.h
! 646189d06f85a933fb4886c34f1d93c8  libgcobol/valconv.cc
  bf52fdaed06effba57a10e8157bc6930  libgcobol/valconv.h
  c87d0834249e4949627ac190796295e9  libgcobol/xmlparse.cc
  17a8b03e153b55840b195304488382aa  libgfortran/ChangeLog
--- 132552,132558 ----
  0cbcc2fa8aaaeccc8cd28ddd6e3acb0b  libgcobol/posix/udf/posix-write.cbl
  db96b460f17e3ec206617c052da2d651  libgcobol/stringbin.cc
  c9e5ab16fc25ce977c378934b670079e  libgcobol/stringbin.h
! 522a20a2bedd2407381ddf3d286b0b94  libgcobol/valconv.cc
  bf52fdaed06effba57a10e8157bc6930  libgcobol/valconv.h
  c87d0834249e4949627ac190796295e9  libgcobol/xmlparse.cc
  17a8b03e153b55840b195304488382aa  libgfortran/ChangeLog
*************** a3a7e9ca6057da9ca42e03e41e1c73f7  libgo/
*** 138985,138991 ****
  dcdf1b680b15b372bdb64cc5107d51b6  libgo/testsuite/libgo-test-support.exp.in
  bf162aa572f7b96b25dbd2b027845d32  libgo/testsuite/libgo.testmain/testmain.exp
  cc9d2a0e34e31ba866a8caf9f46f48f3  libgomp/.gitattributes
! 04cb806581000b570f88c11c50f24665  libgomp/ChangeLog
  0d55aa862aee66efdc5f8d62c94ff8fb  libgomp/ChangeLog.graphite
  714e3b9c0810a61df01246c2a97e825a  libgomp/Makefile.am
  ebb578201b0bfde5d8221fca34ee44c4  libgomp/Makefile.in
--- 139120,139126 ----
  dcdf1b680b15b372bdb64cc5107d51b6  libgo/testsuite/libgo-test-support.exp.in
  bf162aa572f7b96b25dbd2b027845d32  libgo/testsuite/libgo.testmain/testmain.exp
  cc9d2a0e34e31ba866a8caf9f46f48f3  libgomp/.gitattributes
! 931dc94cc90857688923e0234760e0e9  libgomp/ChangeLog
  0d55aa862aee66efdc5f8d62c94ff8fb  libgomp/ChangeLog.graphite
  714e3b9c0810a61df01246c2a97e825a  libgomp/Makefile.am
  ebb578201b0bfde5d8221fca34ee44c4  libgomp/Makefile.in
*************** a4cc1480c8ee441a3ccf2c250c7c0cad  libgom
*** 139124,139134 ****
  e40f7f1dbaf7de3643dec21493aed6b5  libgomp/iter.c
  6d019b48c2311268a20cabe9f65f73ad  libgomp/iter_ull.c
  e59f9d9c4947a5f7d4bdd011da890930  libgomp/libgomp-plugin.c
! 83d58a0b24004ea02d46ebfd81582823  libgomp/libgomp-plugin.h
! 0a91a6e89a05ac9cbc7dd0e6c86fe11a  libgomp/libgomp.h
  cd6a22eaa3c99a58084ad32602f087b4  libgomp/libgomp.map
  8b2aa50aecad82171348a6918309afd6  libgomp/libgomp.spec.in
! 45322ea6c23fd8ff62ed984afe8d4fe8  libgomp/libgomp.texi
  1d54928ce4032885323fb921fd1df788  libgomp/libgomp_f.h.in
  ff283838501e7dccd0306ec2feeb4452  libgomp/libgomp_g.h
  26474764313104462f3252f8ce962c10  libgomp/lock.c
--- 139259,139269 ----
  e40f7f1dbaf7de3643dec21493aed6b5  libgomp/iter.c
  6d019b48c2311268a20cabe9f65f73ad  libgomp/iter_ull.c
  e59f9d9c4947a5f7d4bdd011da890930  libgomp/libgomp-plugin.c
! d766cc495352ae2f48d322e276741b80  libgomp/libgomp-plugin.h
! b2aca0a9ddcb7f277bb3b49a277b30af  libgomp/libgomp.h
  cd6a22eaa3c99a58084ad32602f087b4  libgomp/libgomp.map
  8b2aa50aecad82171348a6918309afd6  libgomp/libgomp.spec.in
! 18c88e74b32bd27d9cfdf231c2a1c2fc  libgomp/libgomp.texi
  1d54928ce4032885323fb921fd1df788  libgomp/libgomp_f.h.in
  ff283838501e7dccd0306ec2feeb4452  libgomp/libgomp_g.h
  26474764313104462f3252f8ce962c10  libgomp/lock.c
*************** da2ae01cd3ee1b82927ed89b489413c4  libgom
*** 139156,139165 ****
  b5ab0a7e2cd4752de8579e6704a905f9  libgomp/plugin/Makefrag.am
  a62dffa247a816d54bad922ce4d47aa0  libgomp/plugin/build-target-indirect-htab.h
  fab10af27c836c7b90303245f3965cb8  libgomp/plugin/configfrag.ac
! 92f97e6738a0b5c4baa390cce2f52809  libgomp/plugin/cuda-lib.def
  d024ec56acbc3411cedc7899b8bbdd02  libgomp/plugin/mutex.c
! 108275c8c0d77a092b0edb23efe89d2e  libgomp/plugin/plugin-gcn.c
! cef0266ef98e1e03eb720f74316aa07f  libgomp/plugin/plugin-nvptx.c
  575940d2b8e2a941f78af850aac28928  libgomp/priority_queue.c
  c88620bad36f9c420348d0508bd4b346  libgomp/priority_queue.h
  20aaa72861afa50254f90e9a0839d451  libgomp/scope.c
--- 139291,139300 ----
  b5ab0a7e2cd4752de8579e6704a905f9  libgomp/plugin/Makefrag.am
  a62dffa247a816d54bad922ce4d47aa0  libgomp/plugin/build-target-indirect-htab.h
  fab10af27c836c7b90303245f3965cb8  libgomp/plugin/configfrag.ac
! 64303d9a5e264784832990b27405c4aa  libgomp/plugin/cuda-lib.def
  d024ec56acbc3411cedc7899b8bbdd02  libgomp/plugin/mutex.c
! 7ec742943e567767512e4e377ef0485a  libgomp/plugin/plugin-gcn.c
! c48f5698d6513fa80e32b3b410f3a9d9  libgomp/plugin/plugin-nvptx.c
  575940d2b8e2a941f78af850aac28928  libgomp/priority_queue.c
  c88620bad36f9c420348d0508bd4b346  libgomp/priority_queue.h
  20aaa72861afa50254f90e9a0839d451  libgomp/scope.c
*************** ed195dc04ac3e252f89029dee0bc9c05  libgom
*** 139171,139177 ****
  bbb8b404de421c08a4468a7c149897e3  libgomp/splay-tree.h
  1775f6ebbed5a9aef1882e66136d9e2b  libgomp/target-cxa-dso-dtor.c
  30bc692f400225cbdf51ebfdb41b44c5  libgomp/target-indirect.c
! 5a12f2fa543dce0007208555f5fd4c46  libgomp/target.c
  61cd7db4cfc942c460e94493b86d69e2  libgomp/task.c
  7f9c7ebe470f1e58806b1136258bd786  libgomp/taskloop.c
  abb5e2202aa84d67c967b7dc176fc937  libgomp/team.c
--- 139306,139312 ----
  bbb8b404de421c08a4468a7c149897e3  libgomp/splay-tree.h
  1775f6ebbed5a9aef1882e66136d9e2b  libgomp/target-cxa-dso-dtor.c
  30bc692f400225cbdf51ebfdb41b44c5  libgomp/target-indirect.c
! daf636ece34560f99e1a4747508e77d9  libgomp/target.c
  61cd7db4cfc942c460e94493b86d69e2  libgomp/task.c
  7f9c7ebe470f1e58806b1136258bd786  libgomp/taskloop.c
  abb5e2202aa84d67c967b7dc176fc937  libgomp/team.c
*************** b27cf8b82a6cfcd0e8dff2a026ce1860  libgom
*** 139904,139910 ****
  ea40a48889ca697d07372802d2a0a4aa  libgomp/testsuite/libgomp.c-c++-common/target-implicit-map-5.c
  c56339bf90ef39856eb55c5e21be0ef6  libgomp/testsuite/libgomp.c-c++-common/target-in-reduction-1.c
  781d8c89676b5f17dfb6a7fbea91d274  libgomp/testsuite/libgomp.c-c++-common/target-in-reduction-2.c
! d2f77283bea52f0c0d6a1356e85496d0  libgomp/testsuite/libgomp.c-c++-common/target-is-accessible-1.c
  69dd12ce5d2a48b7f97153765a590284  libgomp/testsuite/libgomp.c-c++-common/target-is-initial-host-2.c
  9e8fb2b92bd09fc8b76faad9bb3ef464  libgomp/testsuite/libgomp.c-c++-common/target-is-initial-host.c
  d04c3cda0f5d9481f26ad3a000f4b3d3  libgomp/testsuite/libgomp.c-c++-common/target-link-2.c
--- 140039,140049 ----
  ea40a48889ca697d07372802d2a0a4aa  libgomp/testsuite/libgomp.c-c++-common/target-implicit-map-5.c
  c56339bf90ef39856eb55c5e21be0ef6  libgomp/testsuite/libgomp.c-c++-common/target-in-reduction-1.c
  781d8c89676b5f17dfb6a7fbea91d274  libgomp/testsuite/libgomp.c-c++-common/target-in-reduction-2.c
! 889b5911e56339fa702fa5d7f5c9a1c9  libgomp/testsuite/libgomp.c-c++-common/target-is-accessible-1.c
! ee3b74a97c86ca49d1d4285adb171e36  libgomp/testsuite/libgomp.c-c++-common/target-is-accessible-2.c
! ab7fab712938c3ce3aec0814f264d192  libgomp/testsuite/libgomp.c-c++-common/target-is-accessible-3.c
! 961487ad180160a2ba2e101a7eca4f42  libgomp/testsuite/libgomp.c-c++-common/target-is-accessible-4.c
! fdfd72627be1d262fb0a9802b8e5fb61  libgomp/testsuite/libgomp.c-c++-common/target-is-accessible-5.c
  69dd12ce5d2a48b7f97153765a590284  libgomp/testsuite/libgomp.c-c++-common/target-is-initial-host-2.c
  9e8fb2b92bd09fc8b76faad9bb3ef464  libgomp/testsuite/libgomp.c-c++-common/target-is-initial-host.c
  d04c3cda0f5d9481f26ad3a000f4b3d3  libgomp/testsuite/libgomp.c-c++-common/target-link-2.c
*************** e0c7a627e2c061377a19883807aabfe2  libgom
*** 140792,140797 ****
--- 140931,140937 ----
  0240fb14a61ab47fba407a3a8493bfc6  libgomp/testsuite/libgomp.fortran/map-alloc-comp-8.f90
  ff694c77648180b4ecf0d218e61ad029  libgomp/testsuite/libgomp.fortran/map-alloc-comp-9-usm.f90
  11a2994612dda1ea5d074b912ea7e4aa  libgomp/testsuite/libgomp.fortran/map-alloc-comp-9.f90
+ 1f7de76e0f0b19f7151fbc01098b4209  libgomp/testsuite/libgomp.fortran/map-alloc-present-1.f90
  f4ad2acbc3bf213777f658e4581eb805  libgomp/testsuite/libgomp.fortran/map-alloc-ptr-1.f90
  18f729a1444b06169904daaa41adb0f4  libgomp/testsuite/libgomp.fortran/map-alloc-ptr-2.f90
  523668cf7417e7c8cb78a2b394f7329d  libgomp/testsuite/libgomp.fortran/map-subarray-10.f90
*************** c253434fe103910b87d86dea9746db67  libgom
*** 140991,140997 ****
  679a9ebb5fd93d2af75c7a80f49ca7d6  libgomp/testsuite/libgomp.fortran/target-imperfect4.f90
  49908b2e3663c182a2478e5f28929c6d  libgomp/testsuite/libgomp.fortran/target-in-reduction-1.f90
  c604509b615d707812822a4f9559faca  libgomp/testsuite/libgomp.fortran/target-in-reduction-2.f90
! 30887b15bff2ce748c95e1172bc37e43  libgomp/testsuite/libgomp.fortran/target-is-accessible-1.f90
  0a168e5a38556e28478014f8c502669f  libgomp/testsuite/libgomp.fortran/target-is-initial-device-3.f90
  b205f9e12d1bd4e2fa5b8ecd4f50db58  libgomp/testsuite/libgomp.fortran/target-is-initial-host-2.f90
  6859dad56b2334740e8ca2b4290949fe  libgomp/testsuite/libgomp.fortran/target-is-initial-host.f
--- 141131,141137 ----
  679a9ebb5fd93d2af75c7a80f49ca7d6  libgomp/testsuite/libgomp.fortran/target-imperfect4.f90
  49908b2e3663c182a2478e5f28929c6d  libgomp/testsuite/libgomp.fortran/target-in-reduction-1.f90
  c604509b615d707812822a4f9559faca  libgomp/testsuite/libgomp.fortran/target-in-reduction-2.f90
! bf93f552380dcf11254519b53957bd8b  libgomp/testsuite/libgomp.fortran/target-is-accessible-1.f90
  0a168e5a38556e28478014f8c502669f  libgomp/testsuite/libgomp.fortran/target-is-initial-device-3.f90
  b205f9e12d1bd4e2fa5b8ecd4f50db58  libgomp/testsuite/libgomp.fortran/target-is-initial-host-2.f90
  6859dad56b2334740e8ca2b4290949fe  libgomp/testsuite/libgomp.fortran/target-is-initial-host.f
*************** d1c33a8b5e0f3d9a19ffe583f8e72f56  libgru
*** 142586,142592 ****
  c21183b1df7f7afb240d765035277db1  libgrust/rustc-lib/version-info
  99c2e5e712b990ee07be10f53e41f3fb  libiberty/.gitignore
  a916467b91076e631dd8edb7424769c7  libiberty/COPYING.LIB
! 1654efba5db9e1362973aedf94565705  libiberty/ChangeLog
  347c31392973de6a4872d540c1718dc1  libiberty/ChangeLog.jit
  de0b0731d5d06e748df71e896c6078a5  libiberty/Makefile.in
  8b93d0e0369daed24e2260ccfd102eb3  libiberty/README
--- 142726,142732 ----
  c21183b1df7f7afb240d765035277db1  libgrust/rustc-lib/version-info
  99c2e5e712b990ee07be10f53e41f3fb  libiberty/.gitignore
  a916467b91076e631dd8edb7424769c7  libiberty/COPYING.LIB
! 30e247a60b004098ea869722f0619c3d  libiberty/ChangeLog
  347c31392973de6a4872d540c1718dc1  libiberty/ChangeLog.jit
  de0b0731d5d06e748df71e896c6078a5  libiberty/Makefile.in
  8b93d0e0369daed24e2260ccfd102eb3  libiberty/README
*************** c6ed870948e340854930b0cfd9c39b99  libibe
*** 142731,142737 ****
  92b0376cdafc4ac621b2e3ade5bc48ce  libiberty/testsuite/demangler-fuzzer.c
  3a9dd86d23e50ad55b3af57e17c41a44  libiberty/testsuite/rust-demangle-expected
  df2cc8306a1a2d512d0a4e45bfe38734  libiberty/testsuite/test-demangle.c
! 86d489a5709599b300fad980b610128c  libiberty/testsuite/test-doubly-linked-list.c
  3e47cec24b744f5097273a9e6a7ba16e  libiberty/testsuite/test-expandargv.c
  1f6be56b696aa2ff1574742bf0427ce4  libiberty/testsuite/test-pexecute.c
  1022d322768b23863e76501be4742967  libiberty/testsuite/test-strtol.c
--- 142871,142877 ----
  92b0376cdafc4ac621b2e3ade5bc48ce  libiberty/testsuite/demangler-fuzzer.c
  3a9dd86d23e50ad55b3af57e17c41a44  libiberty/testsuite/rust-demangle-expected
  df2cc8306a1a2d512d0a4e45bfe38734  libiberty/testsuite/test-demangle.c
! 0890d886a6a83beb9abcf933e45cd972  libiberty/testsuite/test-doubly-linked-list.c
  3e47cec24b744f5097273a9e6a7ba16e  libiberty/testsuite/test-expandargv.c
  1f6be56b696aa2ff1574742bf0427ce4  libiberty/testsuite/test-pexecute.c
  1022d322768b23863e76501be4742967  libiberty/testsuite/test-strtol.c
*************** db97a70a62d75baf7c6133362b383ccb  libobj
*** 142922,142928 ****
  d1e7c7c92a4c08557a1274ac25bac6e2  libobjc/selector.c
  029b66bb69dc70e347fe3849fc60cfd3  libobjc/sendmsg.c
  e968027639cc91f736aa2aeaee56682c  libobjc/thr.c
! 13ce022b55b3aa72726e526427f21d8a  libphobos/ChangeLog
  958562279744f77373a0c5c9dc43b414  libphobos/Makefile.am
  a4ee57d4fc32508060fff33b4fc4f976  libphobos/Makefile.in
  ee88c20a7744a2305503e1670f3b7889  libphobos/README.gcc
--- 143062,143068 ----
  d1e7c7c92a4c08557a1274ac25bac6e2  libobjc/selector.c
  029b66bb69dc70e347fe3849fc60cfd3  libobjc/sendmsg.c
  e968027639cc91f736aa2aeaee56682c  libobjc/thr.c
! 73cb9be003d37a228ee7af73ce3123c0  libphobos/ChangeLog
  958562279744f77373a0c5c9dc43b414  libphobos/Makefile.am
  a4ee57d4fc32508060fff33b4fc4f976  libphobos/Makefile.in
  ee88c20a7744a2305503e1670f3b7889  libphobos/README.gcc
*************** ee88c20a7744a2305503e1670f3b7889  libpho
*** 142934,142943 ****
  fe4d29c76b2813284a7595bb311d044e  libphobos/configure.tgt
  6bc36d3a1bb57ce2fd265f1abf3faa98  libphobos/d_rules.am
  e4224ccaecb14d942c71d31bef20d78c  libphobos/libdruntime/LICENSE.txt
! 246c09f9f74bea91c8087ac3a6dc2d25  libphobos/libdruntime/MERGE
! 92b619d324e8d6ab9afe4e20ed2c1d43  libphobos/libdruntime/Makefile.am
! 86eebd49f7970290817823f2d180d163  libphobos/libdruntime/Makefile.in
! 18eff990c3f2f99b151070e711027bf8  libphobos/libdruntime/__importc_builtins.di
  56bb01634c256cb5d65c7952ea1c4d67  libphobos/libdruntime/__main.di
  a36852e4bff4b656855a3664d2bc775d  libphobos/libdruntime/config/aarch64/switchcontext.S
  3c347376723731c44bb45f39e805b551  libphobos/libdruntime/config/arm/switchcontext.S
--- 143074,143083 ----
  fe4d29c76b2813284a7595bb311d044e  libphobos/configure.tgt
  6bc36d3a1bb57ce2fd265f1abf3faa98  libphobos/d_rules.am
  e4224ccaecb14d942c71d31bef20d78c  libphobos/libdruntime/LICENSE.txt
! e60fec47bd4c39ec31a066f899fd9083  libphobos/libdruntime/MERGE
! 29b6aeae31b2996a77b9f420f0456458  libphobos/libdruntime/Makefile.am
! 0be46f144a7f91f7852ed248b31ea659  libphobos/libdruntime/Makefile.in
! dac48ca19429515734e720603af5bb50  libphobos/libdruntime/__importc_builtins.di
  56bb01634c256cb5d65c7952ea1c4d67  libphobos/libdruntime/__main.di
  a36852e4bff4b656855a3664d2bc775d  libphobos/libdruntime/config/aarch64/switchcontext.S
  3c347376723731c44bb45f39e805b551  libphobos/libdruntime/config/arm/switchcontext.S
*************** bd1a8dd492733d2ecd7a2a5a4b394800  libpho
*** 142954,143007 ****
  e24e403e904318fd5631db949f475769  libphobos/libdruntime/core/attribute.d
  3fd0a4eb2d172609d8c62bbe3756fc2d  libphobos/libdruntime/core/bitop.d
  e062253645c3da0b62cc738cf9f398da  libphobos/libdruntime/core/builtins.d
! 2f1f8fc06025e1daa8cda0ed65cc5195  libphobos/libdruntime/core/checkedint.d
  80d1d0596eb558e1552c3ec6dcb82f0e  libphobos/libdruntime/core/cpuid.d
  0a882783a15c305d025968dfa221c98c  libphobos/libdruntime/core/demangle.d
! 0dfd7378c6db36bc6ec25cea3ced4038  libphobos/libdruntime/core/exception.d
  456fa1344c86d322f867cb4b1736b33a  libphobos/libdruntime/core/factory.d
  bdfd89919d3c819fa80ff3be0935eb43  libphobos/libdruntime/core/gc/config.d
! d509570f3ccc927f38449db6c180704f  libphobos/libdruntime/core/gc/gcinterface.d
  3af0a86975c9c6f68e861eb366180130  libphobos/libdruntime/core/gc/registry.d
! 9d1e46b7ad0b4060d3448af794bfb5b2  libphobos/libdruntime/core/int128.d
  9b0990e1c273ba37e22e1016a832e50d  libphobos/libdruntime/core/internal/abort.d
! ac84184b2b53f5b11c37d7fe354d6a9f  libphobos/libdruntime/core/internal/array/appending.d
  68baa61f91aaeccba5172391e123900c  libphobos/libdruntime/core/internal/array/arrayassign.d
! 586ae6803d4da353f6d4ca7af6954dae  libphobos/libdruntime/core/internal/array/capacity.d
  cbe4dc09f4613e01a08f6e28d87e28d1  libphobos/libdruntime/core/internal/array/casting.d
  1905da04a68de992ae7b35c7b48368ba  libphobos/libdruntime/core/internal/array/comparison.d
! f06585a96d1e4f72a6ae889cbb4da064  libphobos/libdruntime/core/internal/array/concatenation.d
! 46a8ba35de64d3bd476756a73fb628db  libphobos/libdruntime/core/internal/array/construction.d
  99b9e130db7ff5d36de6e092015b6a9f  libphobos/libdruntime/core/internal/array/duplication.d
! b087ad5347da018345e671b3803f93cb  libphobos/libdruntime/core/internal/array/equality.d
  819931c48dd7002a422cf0408399c556  libphobos/libdruntime/core/internal/array/operations.d
! cb1d03e7a2f678085aef10e507047e5b  libphobos/libdruntime/core/internal/array/utils.d
  aea2a448de5ae93354679fe04200b02e  libphobos/libdruntime/core/internal/atomic.d
  87f5099304bb6fa7f4723eb1c7b3aa7d  libphobos/libdruntime/core/internal/attributes.d
! e01781192b15a285e00843e8eab41d9c  libphobos/libdruntime/core/internal/cast_.d
! 1d80eef1b17b9b4ab7073ddd62d9e422  libphobos/libdruntime/core/internal/container/array.d
  196c764b6fe4523d0c4585b877b4aaa0  libphobos/libdruntime/core/internal/container/common.d
  651bcf61fd888da86b453d8a72d84069  libphobos/libdruntime/core/internal/container/hashtab.d
  f70666bdd80bfb970a17a9ed9be599ba  libphobos/libdruntime/core/internal/container/treap.d
! 6ea7aafb839c951fc9a503dda1fc33e7  libphobos/libdruntime/core/internal/convert.d
  7ebc613824ac7845b1455ffd58392d8c  libphobos/libdruntime/core/internal/dassert.d
  963ea5f13b1323723157e4819d600aa2  libphobos/libdruntime/core/internal/destruction.d
  b7a158acc86998b63150c8e8767fff46  libphobos/libdruntime/core/internal/entrypoint.d
! 70f9d4829a77c3ffdee4e1c117c64265  libphobos/libdruntime/core/internal/gc/bits.d
  8928945a6d4804bce290a013bac6a64d  libphobos/libdruntime/core/internal/gc/blkcache.d
  e3dfc38f8a65bebf4c55f8e9baad6c26  libphobos/libdruntime/core/internal/gc/blockmeta.d
! 46a1bf7207d62f31cc6f74488cc9242f  libphobos/libdruntime/core/internal/gc/impl/conservative/gc.d
  c13d940721e33ddc760ba87658864c05  libphobos/libdruntime/core/internal/gc/impl/manual/gc.d
  ba8495db5f1beaef0f71ba7a1a371bd2  libphobos/libdruntime/core/internal/gc/impl/proto/gc.d
! 2f460ecb63601828cb32f25093590fa3  libphobos/libdruntime/core/internal/gc/os.d
  98ef57307184c4709cd3666b62371006  libphobos/libdruntime/core/internal/gc/pooltable.d
  d8c372fc06927765c514b2a74916948d  libphobos/libdruntime/core/internal/gc/proxy.d
! d565020de574afb0e162d91058993a97  libphobos/libdruntime/core/internal/hash.d
  5cf3fd04327b7b7c41571b23d366adb8  libphobos/libdruntime/core/internal/lifetime.d
  37bd48ea66ddb05259c7995f66a87815  libphobos/libdruntime/core/internal/moving.d
! e5d5bc5813ae61d566b605e92ec31f48  libphobos/libdruntime/core/internal/newaa.d
  3da42716a2bb1df75cc2b61bf90a9b2c  libphobos/libdruntime/core/internal/parseoptions.d
  c4a519a49c6da8005c2078035b344cf7  libphobos/libdruntime/core/internal/postblit.d
! 033d129addd5b23c56c0f4e77446b299  libphobos/libdruntime/core/internal/qsort.d
  eb7626a08581a41afe77af77f3194a7a  libphobos/libdruntime/core/internal/spinlock.d
  ae51deb9af8fd5e2af56c159ecda8af6  libphobos/libdruntime/core/internal/string.d
  0e954400ebc20e538cb0df0607daaeca  libphobos/libdruntime/core/internal/switch_.d
--- 143094,143147 ----
  e24e403e904318fd5631db949f475769  libphobos/libdruntime/core/attribute.d
  3fd0a4eb2d172609d8c62bbe3756fc2d  libphobos/libdruntime/core/bitop.d
  e062253645c3da0b62cc738cf9f398da  libphobos/libdruntime/core/builtins.d
! dbbe9a9902925c0fd63dd364ddc6f0f7  libphobos/libdruntime/core/checkedint.d
  80d1d0596eb558e1552c3ec6dcb82f0e  libphobos/libdruntime/core/cpuid.d
  0a882783a15c305d025968dfa221c98c  libphobos/libdruntime/core/demangle.d
! a2a5e006d2daff3dec136940e98c43a8  libphobos/libdruntime/core/exception.d
  456fa1344c86d322f867cb4b1736b33a  libphobos/libdruntime/core/factory.d
  bdfd89919d3c819fa80ff3be0935eb43  libphobos/libdruntime/core/gc/config.d
! 8aed19cd57a079dd22338fb4ffc260c6  libphobos/libdruntime/core/gc/gcinterface.d
  3af0a86975c9c6f68e861eb366180130  libphobos/libdruntime/core/gc/registry.d
! b9eb7942294479e9772f5e8c600688f0  libphobos/libdruntime/core/int128.d
  9b0990e1c273ba37e22e1016a832e50d  libphobos/libdruntime/core/internal/abort.d
! c6975f69f2ce889f7535220c10e7acd6  libphobos/libdruntime/core/internal/array/appending.d
  68baa61f91aaeccba5172391e123900c  libphobos/libdruntime/core/internal/array/arrayassign.d
! cab83e7e97dacc07bd43778183e7d28b  libphobos/libdruntime/core/internal/array/capacity.d
  cbe4dc09f4613e01a08f6e28d87e28d1  libphobos/libdruntime/core/internal/array/casting.d
  1905da04a68de992ae7b35c7b48368ba  libphobos/libdruntime/core/internal/array/comparison.d
! 8e552bfa7509bf7675af59aa69b2ef87  libphobos/libdruntime/core/internal/array/concatenation.d
! e85d6c697ee70fa9b8de8fda20be9f27  libphobos/libdruntime/core/internal/array/construction.d
  99b9e130db7ff5d36de6e092015b6a9f  libphobos/libdruntime/core/internal/array/duplication.d
! 0209d2077bd2d652778e4852e9c5d8b7  libphobos/libdruntime/core/internal/array/equality.d
  819931c48dd7002a422cf0408399c556  libphobos/libdruntime/core/internal/array/operations.d
! 6db9782fa120975a89091c7418054a89  libphobos/libdruntime/core/internal/array/utils.d
  aea2a448de5ae93354679fe04200b02e  libphobos/libdruntime/core/internal/atomic.d
  87f5099304bb6fa7f4723eb1c7b3aa7d  libphobos/libdruntime/core/internal/attributes.d
! 01f2355fa4f9193b241d7d7946d4ca98  libphobos/libdruntime/core/internal/cast_.d
! c0b05d801ac4cbdaeed663d1383a618c  libphobos/libdruntime/core/internal/container/array.d
  196c764b6fe4523d0c4585b877b4aaa0  libphobos/libdruntime/core/internal/container/common.d
  651bcf61fd888da86b453d8a72d84069  libphobos/libdruntime/core/internal/container/hashtab.d
  f70666bdd80bfb970a17a9ed9be599ba  libphobos/libdruntime/core/internal/container/treap.d
! 43152ff49fc651bf4e493aa7fdf28311  libphobos/libdruntime/core/internal/convert.d
  7ebc613824ac7845b1455ffd58392d8c  libphobos/libdruntime/core/internal/dassert.d
  963ea5f13b1323723157e4819d600aa2  libphobos/libdruntime/core/internal/destruction.d
  b7a158acc86998b63150c8e8767fff46  libphobos/libdruntime/core/internal/entrypoint.d
! c4a33e096d212873af164a059d5a4aa1  libphobos/libdruntime/core/internal/gc/bits.d
  8928945a6d4804bce290a013bac6a64d  libphobos/libdruntime/core/internal/gc/blkcache.d
  e3dfc38f8a65bebf4c55f8e9baad6c26  libphobos/libdruntime/core/internal/gc/blockmeta.d
! f89ad9275e4ca2bf86cadf637ffdd7d7  libphobos/libdruntime/core/internal/gc/impl/conservative/gc.d
  c13d940721e33ddc760ba87658864c05  libphobos/libdruntime/core/internal/gc/impl/manual/gc.d
  ba8495db5f1beaef0f71ba7a1a371bd2  libphobos/libdruntime/core/internal/gc/impl/proto/gc.d
! 02a4c144696df0c8d3346430e5a7d424  libphobos/libdruntime/core/internal/gc/os.d
  98ef57307184c4709cd3666b62371006  libphobos/libdruntime/core/internal/gc/pooltable.d
  d8c372fc06927765c514b2a74916948d  libphobos/libdruntime/core/internal/gc/proxy.d
! 98a05ff6c3ef92a7f537c0f4a6cc7d58  libphobos/libdruntime/core/internal/hash.d
  5cf3fd04327b7b7c41571b23d366adb8  libphobos/libdruntime/core/internal/lifetime.d
  37bd48ea66ddb05259c7995f66a87815  libphobos/libdruntime/core/internal/moving.d
! 03a06cc9f59c0142230a53abec9e70d5  libphobos/libdruntime/core/internal/newaa.d
  3da42716a2bb1df75cc2b61bf90a9b2c  libphobos/libdruntime/core/internal/parseoptions.d
  c4a519a49c6da8005c2078035b344cf7  libphobos/libdruntime/core/internal/postblit.d
! 621df54a1e1f5eaaec23be90f14f7f7d  libphobos/libdruntime/core/internal/qsort.d
  eb7626a08581a41afe77af77f3194a7a  libphobos/libdruntime/core/internal/spinlock.d
  ae51deb9af8fd5e2af56c159ecda8af6  libphobos/libdruntime/core/internal/string.d
  0e954400ebc20e538cb0df0607daaeca  libphobos/libdruntime/core/internal/switch_.d
*************** ae51deb9af8fd5e2af56c159ecda8af6  libpho
*** 143009,143016 ****
  93ec0ce1146bd4851b47fdcecd00ea56  libphobos/libdruntime/core/internal/utf.d
  31c5ef31a034f85a55e0763485479cee  libphobos/libdruntime/core/internal/util/array.d
  233370fbd6246580432384701cb2742a  libphobos/libdruntime/core/internal/util/math.d
  c4d2c8819aacb2a15f08b12dfd19b1cc  libphobos/libdruntime/core/interpolation.d
! 9591e2aa5efad6f205d58ebf1a7d8c25  libphobos/libdruntime/core/lifetime.d
  59a885b29a1d35b8c88198114cea1937  libphobos/libdruntime/core/math.d
  652d52b28cd78e233da8416583b45593  libphobos/libdruntime/core/memory.d
  b9c6840aeaced95051c29d7184e88fa6  libphobos/libdruntime/core/runtime.d
--- 143149,143157 ----
  93ec0ce1146bd4851b47fdcecd00ea56  libphobos/libdruntime/core/internal/utf.d
  31c5ef31a034f85a55e0763485479cee  libphobos/libdruntime/core/internal/util/array.d
  233370fbd6246580432384701cb2742a  libphobos/libdruntime/core/internal/util/math.d
+ 6220c3ffd1408cf9feca8958ad736de3  libphobos/libdruntime/core/internal/vararg/gnu.d
  c4d2c8819aacb2a15f08b12dfd19b1cc  libphobos/libdruntime/core/interpolation.d
! a81232704280b1d9bde44f886c6d76af  libphobos/libdruntime/core/lifetime.d
  59a885b29a1d35b8c88198114cea1937  libphobos/libdruntime/core/math.d
  652d52b28cd78e233da8416583b45593  libphobos/libdruntime/core/memory.d
  b9c6840aeaced95051c29d7184e88fa6  libphobos/libdruntime/core/runtime.d
*************** e1f2c338c5d3317b194cbd1ae717dc7e  libpho
*** 143025,143043 ****
  627bd812c57c65e72ca9360911ec5e37  libphobos/libdruntime/core/stdc/float_.d
  7b0fbc4eebf5b3364fd3541f51608b9a  libphobos/libdruntime/core/stdc/inttypes.d
  cc49d5c291f85a60da360856d321dba7  libphobos/libdruntime/core/stdc/limits.d
! 1ec5e1d4f9cc5f454f6885ae47882e5b  libphobos/libdruntime/core/stdc/locale.d
  fffeb32a619982557b22736580ba45fe  libphobos/libdruntime/core/stdc/math.d
  0527cc19df281c6561cb089ae3887c88  libphobos/libdruntime/core/stdc/signal.d
! 883b080409dac0905df56a729355d996  libphobos/libdruntime/core/stdc/stdarg.d
! 306374fcd5c5628b804dc7b1f320399b  libphobos/libdruntime/core/stdc/stdatomic.d
  bf552e1cf2ceeb05e2231ba9b15a4317  libphobos/libdruntime/core/stdc/stddef.d
  9f5f25dd44bf80a08150cdfbe9d111d4  libphobos/libdruntime/core/stdc/stdint.d
! 250214c008a135b64c56e6d946fd3d46  libphobos/libdruntime/core/stdc/stdio.d
  c1de87fcfd77ed5d18607da3217cdd08  libphobos/libdruntime/core/stdc/stdlib.d
  0552522717140740fe9a502700016f3a  libphobos/libdruntime/core/stdc/string.d
  b1b452c04a088565feada1af815d3ea2  libphobos/libdruntime/core/stdc/tgmath.d
  3f44e53505593c836ad3980244975710  libphobos/libdruntime/core/stdc/time.d
! 05fe40f4e99fbfccd6872b16ff834442  libphobos/libdruntime/core/stdc/wchar_.d
  f270d462b19d597ac106f7c96f99119b  libphobos/libdruntime/core/stdc/wctype.d
  53ec074d589170bbd51af2654a987fda  libphobos/libdruntime/core/stdcpp/allocator.d
  e0c850123380d629cb7d467ed907c628  libphobos/libdruntime/core/stdcpp/array.d
--- 143166,143184 ----
  627bd812c57c65e72ca9360911ec5e37  libphobos/libdruntime/core/stdc/float_.d
  7b0fbc4eebf5b3364fd3541f51608b9a  libphobos/libdruntime/core/stdc/inttypes.d
  cc49d5c291f85a60da360856d321dba7  libphobos/libdruntime/core/stdc/limits.d
! 3c4534c54a06a36ca3d6f26ac224eb4f  libphobos/libdruntime/core/stdc/locale.d
  fffeb32a619982557b22736580ba45fe  libphobos/libdruntime/core/stdc/math.d
  0527cc19df281c6561cb089ae3887c88  libphobos/libdruntime/core/stdc/signal.d
! 0d18509888af2c5ae192110f30f62af9  libphobos/libdruntime/core/stdc/stdarg.d
! 435f59be6c6364a269f5a1b06707c9bf  libphobos/libdruntime/core/stdc/stdatomic.d
  bf552e1cf2ceeb05e2231ba9b15a4317  libphobos/libdruntime/core/stdc/stddef.d
  9f5f25dd44bf80a08150cdfbe9d111d4  libphobos/libdruntime/core/stdc/stdint.d
! 64935fb36e0dc355204d93d5deb9137f  libphobos/libdruntime/core/stdc/stdio.d
  c1de87fcfd77ed5d18607da3217cdd08  libphobos/libdruntime/core/stdc/stdlib.d
  0552522717140740fe9a502700016f3a  libphobos/libdruntime/core/stdc/string.d
  b1b452c04a088565feada1af815d3ea2  libphobos/libdruntime/core/stdc/tgmath.d
  3f44e53505593c836ad3980244975710  libphobos/libdruntime/core/stdc/time.d
! f03d57976ad7244ace2cb15b4d95d975  libphobos/libdruntime/core/stdc/wchar_.d
  f270d462b19d597ac106f7c96f99119b  libphobos/libdruntime/core/stdc/wctype.d
  53ec074d589170bbd51af2654a987fda  libphobos/libdruntime/core/stdcpp/allocator.d
  e0c850123380d629cb7d467ed907c628  libphobos/libdruntime/core/stdcpp/array.d
*************** c4670d2d6c9210cd8b63dd16ea2d4c7e  libpho
*** 143111,143117 ****
  1edd21f71df6ed90f611f5f352b3166c  libphobos/libdruntime/core/sys/dragonflybsd/sys/sysctl.d
  f14294df112fde328fa8d60fe9777a4c  libphobos/libdruntime/core/sys/dragonflybsd/time.d
  d81de96f2f37b7ebcde77ba62486cb0a  libphobos/libdruntime/core/sys/elf/package.d
! bd301144c6d0d322af4d639445a1ea4d  libphobos/libdruntime/core/sys/freebsd/config.d
  fdbaf03147cfe71d5470a4e029044a7c  libphobos/libdruntime/core/sys/freebsd/dlfcn.d
  a80f642410f6fad043f800073395e281  libphobos/libdruntime/core/sys/freebsd/err.d
  380100960f334f1ed62e46fcde0154f3  libphobos/libdruntime/core/sys/freebsd/execinfo.d
--- 143252,143258 ----
  1edd21f71df6ed90f611f5f352b3166c  libphobos/libdruntime/core/sys/dragonflybsd/sys/sysctl.d
  f14294df112fde328fa8d60fe9777a4c  libphobos/libdruntime/core/sys/dragonflybsd/time.d
  d81de96f2f37b7ebcde77ba62486cb0a  libphobos/libdruntime/core/sys/elf/package.d
! 2dfe3ae1228bcdf0e46a719d9ffb8785  libphobos/libdruntime/core/sys/freebsd/config.d
  fdbaf03147cfe71d5470a4e029044a7c  libphobos/libdruntime/core/sys/freebsd/dlfcn.d
  a80f642410f6fad043f800073395e281  libphobos/libdruntime/core/sys/freebsd/err.d
  380100960f334f1ed62e46fcde0154f3  libphobos/libdruntime/core/sys/freebsd/execinfo.d
*************** f81d06b316902cdaa008361232c527e2  libpho
*** 143148,143153 ****
--- 143289,143295 ----
  a56839efe74c71ab60c49ebf16ca7b69  libphobos/libdruntime/core/sys/linux/execinfo.d
  3e71c86a817e8dbe949840fc092ca007  libphobos/libdruntime/core/sys/linux/fcntl.d
  4bac52a5767aca36f84a842fe4c8e497  libphobos/libdruntime/core/sys/linux/fs.d
+ 4997c38c3f23b44a307235d74bfb11f9  libphobos/libdruntime/core/sys/linux/hdlc/ioctl.d
  4927c381a4a9c21cfb5e6bec15ea1e1b  libphobos/libdruntime/core/sys/linux/ifaddrs.d
  56de0e501a71a8f46aaec7901998444b  libphobos/libdruntime/core/sys/linux/input.d
  52df7c34b43031f9c752b55d36015d2a  libphobos/libdruntime/core/sys/linux/input_event_codes.d
*************** a56839efe74c71ab60c49ebf16ca7b69  libpho
*** 143155,143170 ****
  fc261411d8aef7ee816116115d19a256  libphobos/libdruntime/core/sys/linux/link.d
  ef8603d93023778c9a704c8c96f513d7  libphobos/libdruntime/core/sys/linux/linux/if_arp.d
  1c17691ad5f708510ef87daba850b48f  libphobos/libdruntime/core/sys/linux/linux/if_packet.d
  b2dc68341c67721b34498f406b8eb078  libphobos/libdruntime/core/sys/linux/netinet/in_.d
  ef4ca38842cf7000f36294af3547a28a  libphobos/libdruntime/core/sys/linux/netinet/tcp.d
  cf93cb24231cf2c42585d8f3a533a1a7  libphobos/libdruntime/core/sys/linux/perf_event.d
  1cc36a6a81ffb2bfff76bc9a714e6f07  libphobos/libdruntime/core/sys/linux/sched.d
  7931aab43c1ac5e2755373b67d411863  libphobos/libdruntime/core/sys/linux/stdio.d
! 775ca593c155682350352d3e4140fb97  libphobos/libdruntime/core/sys/linux/string.d
  ee7a0de6e2861775d2d754c5ac23bffb  libphobos/libdruntime/core/sys/linux/sys/auxv.d
  0df34c56bc25c8f26c78e08c66d13cf8  libphobos/libdruntime/core/sys/linux/sys/eventfd.d
  d24094280e490194dedf87b353ff18bb  libphobos/libdruntime/core/sys/linux/sys/file.d
! af70036400fa664c14befdea4312799d  libphobos/libdruntime/core/sys/linux/sys/inotify.d
  9a79d98834ca9d0b3bd6199520b99f4d  libphobos/libdruntime/core/sys/linux/sys/mman.d
  b9dff850521a81573032428e4ad6a659  libphobos/libdruntime/core/sys/linux/sys/mount.d
  a4bc2500eb1954b8041afbfdf0c1c624  libphobos/libdruntime/core/sys/linux/sys/prctl.d
--- 143297,143313 ----
  fc261411d8aef7ee816116115d19a256  libphobos/libdruntime/core/sys/linux/link.d
  ef8603d93023778c9a704c8c96f513d7  libphobos/libdruntime/core/sys/linux/linux/if_arp.d
  1c17691ad5f708510ef87daba850b48f  libphobos/libdruntime/core/sys/linux/linux/if_packet.d
+ 40ba317ba0af1509817d887d29b17c5c  libphobos/libdruntime/core/sys/linux/net/if_.d
  b2dc68341c67721b34498f406b8eb078  libphobos/libdruntime/core/sys/linux/netinet/in_.d
  ef4ca38842cf7000f36294af3547a28a  libphobos/libdruntime/core/sys/linux/netinet/tcp.d
  cf93cb24231cf2c42585d8f3a533a1a7  libphobos/libdruntime/core/sys/linux/perf_event.d
  1cc36a6a81ffb2bfff76bc9a714e6f07  libphobos/libdruntime/core/sys/linux/sched.d
  7931aab43c1ac5e2755373b67d411863  libphobos/libdruntime/core/sys/linux/stdio.d
! 5a7620880b0ea588eaccb35817e1a9ad  libphobos/libdruntime/core/sys/linux/string.d
  ee7a0de6e2861775d2d754c5ac23bffb  libphobos/libdruntime/core/sys/linux/sys/auxv.d
  0df34c56bc25c8f26c78e08c66d13cf8  libphobos/libdruntime/core/sys/linux/sys/eventfd.d
  d24094280e490194dedf87b353ff18bb  libphobos/libdruntime/core/sys/linux/sys/file.d
! 716ae9dbd596ac474cbfcb0473f438ae  libphobos/libdruntime/core/sys/linux/sys/inotify.d
  9a79d98834ca9d0b3bd6199520b99f4d  libphobos/libdruntime/core/sys/linux/sys/mman.d
  b9dff850521a81573032428e4ad6a659  libphobos/libdruntime/core/sys/linux/sys/mount.d
  a4bc2500eb1954b8041afbfdf0c1c624  libphobos/libdruntime/core/sys/linux/sys/prctl.d
*************** ed254802fe236c52abe7ec9ebf7f8f79  libpho
*** 143213,143226 ****
  9ef4589d2a7508496db59af7ba4641ab  libphobos/libdruntime/core/sys/openbsd/sys/mman.d
  b4bd052f0e8e57db0716f807263ad759  libphobos/libdruntime/core/sys/openbsd/sys/sysctl.d
  26fdce9d3769cf37bf38b5ada08836f3  libphobos/libdruntime/core/sys/openbsd/time.d
! 85e2e3b07002dd9f07eee83af4369be0  libphobos/libdruntime/core/sys/openbsd/unistd.d
  c19da98e25834b2fc1c764a437973bf8  libphobos/libdruntime/core/sys/posix/aio.d
  d2d580de88e21c5ff2e144828e88cc50  libphobos/libdruntime/core/sys/posix/arpa/inet.d
! 6bd440cdece560ee8908ae48063c14eb  libphobos/libdruntime/core/sys/posix/config.d
  4276089c47374921aa63e17600f11094  libphobos/libdruntime/core/sys/posix/dirent.d
  00b54b99561e0a4fce45c554bc97efe0  libphobos/libdruntime/core/sys/posix/dlfcn.d
  5e0c2084f9a10b2b1e3b186e53b7c751  libphobos/libdruntime/core/sys/posix/endian.d
! bce3cd4d2c5e1f0f0f185fe211625e83  libphobos/libdruntime/core/sys/posix/fcntl.d
  702d6944ce1feced53f524d8c6410bae  libphobos/libdruntime/core/sys/posix/grp.d
  3b65fc6ea1e8b95dbe86c5d20e65f522  libphobos/libdruntime/core/sys/posix/iconv.d
  67f194a897054ed6b4b0ec07e3764a5e  libphobos/libdruntime/core/sys/posix/inttypes.d
--- 143356,143369 ----
  9ef4589d2a7508496db59af7ba4641ab  libphobos/libdruntime/core/sys/openbsd/sys/mman.d
  b4bd052f0e8e57db0716f807263ad759  libphobos/libdruntime/core/sys/openbsd/sys/sysctl.d
  26fdce9d3769cf37bf38b5ada08836f3  libphobos/libdruntime/core/sys/openbsd/time.d
! 1ff5c683e78242fd4e68fb3c850c389c  libphobos/libdruntime/core/sys/openbsd/unistd.d
  c19da98e25834b2fc1c764a437973bf8  libphobos/libdruntime/core/sys/posix/aio.d
  d2d580de88e21c5ff2e144828e88cc50  libphobos/libdruntime/core/sys/posix/arpa/inet.d
! 36e963e86b31e5f7ab6245786aa87c31  libphobos/libdruntime/core/sys/posix/config.d
  4276089c47374921aa63e17600f11094  libphobos/libdruntime/core/sys/posix/dirent.d
  00b54b99561e0a4fce45c554bc97efe0  libphobos/libdruntime/core/sys/posix/dlfcn.d
  5e0c2084f9a10b2b1e3b186e53b7c751  libphobos/libdruntime/core/sys/posix/endian.d
! 6c0229094a5ed25f0202044ec8dbe1db  libphobos/libdruntime/core/sys/posix/fcntl.d
  702d6944ce1feced53f524d8c6410bae  libphobos/libdruntime/core/sys/posix/grp.d
  3b65fc6ea1e8b95dbe86c5d20e65f522  libphobos/libdruntime/core/sys/posix/iconv.d
  67f194a897054ed6b4b0ec07e3764a5e  libphobos/libdruntime/core/sys/posix/inttypes.d
*************** d1504817173a9b7c56c3df5e6a1e19c3  libpho
*** 143232,143246 ****
  a0f9b75bf63080c5ef398197ca556d84  libphobos/libdruntime/core/sys/posix/netinet/in_.d
  e2bed0b739fc017fa2c967cab3adf1ab  libphobos/libdruntime/core/sys/posix/netinet/tcp.d
  5510e426fa4a2a90b0a79841d319e8f4  libphobos/libdruntime/core/sys/posix/poll.d
! dc2efa5751c64d98f883ba967ccdf64d  libphobos/libdruntime/core/sys/posix/pthread.d
  a228203a75c388b65c27a7059185e352  libphobos/libdruntime/core/sys/posix/pwd.d
  4d55d51e90754619f1af9b02860a035b  libphobos/libdruntime/core/sys/posix/sched.d
  0d3f923f59a85545956c41021acd5c5b  libphobos/libdruntime/core/sys/posix/semaphore.d
  754f16078f3f2dc253c170d80d64ace4  libphobos/libdruntime/core/sys/posix/setjmp.d
  717afd2b619a9b6ede6a6df95b72191d  libphobos/libdruntime/core/sys/posix/signal.d
  af88cfa76758ed4a06ed76224d9edb61  libphobos/libdruntime/core/sys/posix/spawn.d
! 59214daa1b5028710de013d36b56eb9b  libphobos/libdruntime/core/sys/posix/stdc/time.d
! eaa387fa09d5ea39cc2d7282dcb7d3f8  libphobos/libdruntime/core/sys/posix/stdio.d
  d3f530d741f609becdc4f8c9e21ea7b3  libphobos/libdruntime/core/sys/posix/stdlib.d
  f8ac1b696e7212c92caf062e9b8b6b8a  libphobos/libdruntime/core/sys/posix/string.d
  0a83f207b25c02c481a61faf3207cb6c  libphobos/libdruntime/core/sys/posix/strings.d
--- 143375,143389 ----
  a0f9b75bf63080c5ef398197ca556d84  libphobos/libdruntime/core/sys/posix/netinet/in_.d
  e2bed0b739fc017fa2c967cab3adf1ab  libphobos/libdruntime/core/sys/posix/netinet/tcp.d
  5510e426fa4a2a90b0a79841d319e8f4  libphobos/libdruntime/core/sys/posix/poll.d
! e23f4396f5bc4f73a7ba20909f911aec  libphobos/libdruntime/core/sys/posix/pthread.d
  a228203a75c388b65c27a7059185e352  libphobos/libdruntime/core/sys/posix/pwd.d
  4d55d51e90754619f1af9b02860a035b  libphobos/libdruntime/core/sys/posix/sched.d
  0d3f923f59a85545956c41021acd5c5b  libphobos/libdruntime/core/sys/posix/semaphore.d
  754f16078f3f2dc253c170d80d64ace4  libphobos/libdruntime/core/sys/posix/setjmp.d
  717afd2b619a9b6ede6a6df95b72191d  libphobos/libdruntime/core/sys/posix/signal.d
  af88cfa76758ed4a06ed76224d9edb61  libphobos/libdruntime/core/sys/posix/spawn.d
! af57576c16f982d9f9cd1ce9c2a78b78  libphobos/libdruntime/core/sys/posix/stdc/time.d
! e2c249c41d51c43b1daf1e4c9539869c  libphobos/libdruntime/core/sys/posix/stdio.d
  d3f530d741f609becdc4f8c9e21ea7b3  libphobos/libdruntime/core/sys/posix/stdlib.d
  f8ac1b696e7212c92caf062e9b8b6b8a  libphobos/libdruntime/core/sys/posix/string.d
  0a83f207b25c02c481a61faf3207cb6c  libphobos/libdruntime/core/sys/posix/strings.d
*************** b925ee7e2e3334ef78aa53486af14a6a  libpho
*** 143252,143273 ****
  1976f620d8e9fe05b793ca4130031dba  libphobos/libdruntime/core/sys/posix/sys/msg.d
  4710c8aa76b800477c154e69ab2b452e  libphobos/libdruntime/core/sys/posix/sys/resource.d
  4413cafb8f90f18928e6bbffa9604ea2  libphobos/libdruntime/core/sys/posix/sys/select.d
! 81d15dd9b6a8d1f517857d304968b834  libphobos/libdruntime/core/sys/posix/sys/shm.d
  850c8afe919c88457484916849f172a7  libphobos/libdruntime/core/sys/posix/sys/socket.d
! 623431374e156ac1b571c80365a0616f  libphobos/libdruntime/core/sys/posix/sys/stat.d
  d4dd4bb2ce19c7f61640dc25dfd39614  libphobos/libdruntime/core/sys/posix/sys/statvfs.d
  ab3f7338ce7949e238728e6631e10e7b  libphobos/libdruntime/core/sys/posix/sys/time.d
  7c741b07659843e1e0332e784c324e3f  libphobos/libdruntime/core/sys/posix/sys/ttycom.d
! 1624217586c95bd2d793bd5bffcaccc8  libphobos/libdruntime/core/sys/posix/sys/types.d
  571b12f57fc1cf1ed69c5fcce8b89de4  libphobos/libdruntime/core/sys/posix/sys/uio.d
  51f7afe07c50617af673fc2dbdf3cf40  libphobos/libdruntime/core/sys/posix/sys/un.d
  cac398e14e045ed42244544f84db5c9a  libphobos/libdruntime/core/sys/posix/sys/utsname.d
  8184d9ab4631dfe9221caad43a9b1490  libphobos/libdruntime/core/sys/posix/sys/wait.d
  63c078cb4f123c4469cc1b2af384767d  libphobos/libdruntime/core/sys/posix/syslog.d
  7f8c41dea7291b93e10e0697c5c192bb  libphobos/libdruntime/core/sys/posix/termios.d
! 5d1c0ca3d818900f2bfffc4a19b3b57a  libphobos/libdruntime/core/sys/posix/time.d
! af71fddd1336ca49dfc7cec95b4ebdf6  libphobos/libdruntime/core/sys/posix/ucontext.d
! 2ec14e511b540a619450501226cae004  libphobos/libdruntime/core/sys/posix/unistd.d
  9414f9f2c6d77b7a1e93b61a9916681c  libphobos/libdruntime/core/sys/posix/utime.d
  30a7c865e2541fe983de69db93f37601  libphobos/libdruntime/core/sys/solaris/dlfcn.d
  e24762f124741eb7164ac6d35f819119  libphobos/libdruntime/core/sys/solaris/elf.d
--- 143395,143416 ----
  1976f620d8e9fe05b793ca4130031dba  libphobos/libdruntime/core/sys/posix/sys/msg.d
  4710c8aa76b800477c154e69ab2b452e  libphobos/libdruntime/core/sys/posix/sys/resource.d
  4413cafb8f90f18928e6bbffa9604ea2  libphobos/libdruntime/core/sys/posix/sys/select.d
! ccb5247385b0353c4c6c3de3bc67daf6  libphobos/libdruntime/core/sys/posix/sys/shm.d
  850c8afe919c88457484916849f172a7  libphobos/libdruntime/core/sys/posix/sys/socket.d
! 64f95ca20656cdf6b65f497c319adff5  libphobos/libdruntime/core/sys/posix/sys/stat.d
  d4dd4bb2ce19c7f61640dc25dfd39614  libphobos/libdruntime/core/sys/posix/sys/statvfs.d
  ab3f7338ce7949e238728e6631e10e7b  libphobos/libdruntime/core/sys/posix/sys/time.d
  7c741b07659843e1e0332e784c324e3f  libphobos/libdruntime/core/sys/posix/sys/ttycom.d
! 582f6e7b9d4c447468bbcdb0896f8d46  libphobos/libdruntime/core/sys/posix/sys/types.d
  571b12f57fc1cf1ed69c5fcce8b89de4  libphobos/libdruntime/core/sys/posix/sys/uio.d
  51f7afe07c50617af673fc2dbdf3cf40  libphobos/libdruntime/core/sys/posix/sys/un.d
  cac398e14e045ed42244544f84db5c9a  libphobos/libdruntime/core/sys/posix/sys/utsname.d
  8184d9ab4631dfe9221caad43a9b1490  libphobos/libdruntime/core/sys/posix/sys/wait.d
  63c078cb4f123c4469cc1b2af384767d  libphobos/libdruntime/core/sys/posix/syslog.d
  7f8c41dea7291b93e10e0697c5c192bb  libphobos/libdruntime/core/sys/posix/termios.d
! e1fd3d9c31c25cca3a6c20e62acbf518  libphobos/libdruntime/core/sys/posix/time.d
! 6f259e3fce69e6ca3af9f167b012f561  libphobos/libdruntime/core/sys/posix/ucontext.d
! 9be53bf9528e0c45f1bc6508f553f864  libphobos/libdruntime/core/sys/posix/unistd.d
  9414f9f2c6d77b7a1e93b61a9916681c  libphobos/libdruntime/core/sys/posix/utime.d
  30a7c865e2541fe983de69db93f37601  libphobos/libdruntime/core/sys/solaris/dlfcn.d
  e24762f124741eb7164ac6d35f819119  libphobos/libdruntime/core/sys/solaris/elf.d
*************** c3b9387d319e17b1825a2b306d1b524d  libpho
*** 143284,143291 ****
--- 143427,143437 ----
  f1f35972178ce37f816175ba4676fc2f  libphobos/libdruntime/core/sys/solaris/sys/elftypes.d
  cf08432132370b23ab8de6e57326066c  libphobos/libdruntime/core/sys/solaris/sys/link.d
  14ec20e79b81a931cf42ef796eee5790  libphobos/libdruntime/core/sys/solaris/sys/priocntl.d
+ 6bd093bf5cc03fe24961aeaa10c47e3c  libphobos/libdruntime/core/sys/solaris/sys/procfs.d
  dc7980a052410dc02ca14cb5e51a13e8  libphobos/libdruntime/core/sys/solaris/sys/procset.d
+ 7797d3971b2308ae180a9546121286d9  libphobos/libdruntime/core/sys/solaris/sys/regset.d
  530fa551e30320295f25931a5025ce4b  libphobos/libdruntime/core/sys/solaris/sys/types.d
+ c903aae07774126e3baf14bd690bbf9f  libphobos/libdruntime/core/sys/solaris/thread.d
  f3220636fa9a34351a43f51401f4186d  libphobos/libdruntime/core/sys/solaris/time.d
  808bc3a894b23f128a067e177eb6ca6c  libphobos/libdruntime/core/sys/windows/accctrl.d
  2bbb1ebc3493cb45672097831b433d17  libphobos/libdruntime/core/sys/windows/aclapi.d
*************** b276dc1b9ec6b033a467b1849662de6a  libpho
*** 143423,143429 ****
  d8933a9af92c9c5a5629e35a6807a3e2  libphobos/libdruntime/core/sys/windows/stacktrace.d
  12f3c3928c5641f1364db587fead7295  libphobos/libdruntime/core/sys/windows/stat.d
  504474997e9ec2d7b220c5798cbd0639  libphobos/libdruntime/core/sys/windows/stdc/malloc.d
! 4c8d906b0fdf92aa1689b344b4f58031  libphobos/libdruntime/core/sys/windows/stdc/time.d
  26d4e6b2dd6a9231368560919fe3fb2f  libphobos/libdruntime/core/sys/windows/subauth.d
  1a3810be05de6a7b6589cb4ab4c2ec36  libphobos/libdruntime/core/sys/windows/threadaux.d
  1c03170e8729fdd1bd3c2afd3155ad1e  libphobos/libdruntime/core/sys/windows/tlhelp32.d
--- 143569,143575 ----
  d8933a9af92c9c5a5629e35a6807a3e2  libphobos/libdruntime/core/sys/windows/stacktrace.d
  12f3c3928c5641f1364db587fead7295  libphobos/libdruntime/core/sys/windows/stat.d
  504474997e9ec2d7b220c5798cbd0639  libphobos/libdruntime/core/sys/windows/stdc/malloc.d
! 56127543c689825ad65cd8b6126f0726  libphobos/libdruntime/core/sys/windows/stdc/time.d
  26d4e6b2dd6a9231368560919fe3fb2f  libphobos/libdruntime/core/sys/windows/subauth.d
  1a3810be05de6a7b6589cb4ab4c2ec36  libphobos/libdruntime/core/sys/windows/threadaux.d
  1c03170e8729fdd1bd3c2afd3155ad1e  libphobos/libdruntime/core/sys/windows/tlhelp32.d
*************** ae4f4a06c25bac1e0369fc09a22f6c33  libpho
*** 143458,143471 ****
  db396938683f7ba1b2f3f8396c452873  libphobos/libdruntime/core/sys/windows/wtypes.d
  9094c28b1e25c7802bae1054ff893274  libphobos/libdruntime/core/thread/context.d
  6cfc0c2485080e923e924b73defa7746  libphobos/libdruntime/core/thread/fiber/base.d
! 465ddbb387156a894b0eb2d80b928aaf  libphobos/libdruntime/core/thread/fiber/package.d
! fccbb1b5fbca419524fda2cd977c96ff  libphobos/libdruntime/core/thread/osthread.d
  cc5f1b5b44f6a26421e39b60a8310c08  libphobos/libdruntime/core/thread/package.d
! edc473c77ce29f43875eb8ca51ce10a4  libphobos/libdruntime/core/thread/threadbase.d
  e56fd11737f2c55b4255fe3d6ac1ef28  libphobos/libdruntime/core/thread/threadgroup.d
  4b62ae0fdc1ad3c3f84e871d1805614e  libphobos/libdruntime/core/thread/types.d
  e64d0d602d45a7d0ff4f2d4918a511c1  libphobos/libdruntime/core/time.d
! dc2476225199a44698695428f73a3562  libphobos/libdruntime/core/vararg.d
  8fd3a62a61def138cfc3fc4cb394edf9  libphobos/libdruntime/core/volatile.d
  064f788d347802e25a84b4176ad920a0  libphobos/libdruntime/etc/valgrind/valgrind.d
  6d8c84f9aadc849a94d832fa65ac8d66  libphobos/libdruntime/etc/valgrind/valgrind_.c
--- 143604,143617 ----
  db396938683f7ba1b2f3f8396c452873  libphobos/libdruntime/core/sys/windows/wtypes.d
  9094c28b1e25c7802bae1054ff893274  libphobos/libdruntime/core/thread/context.d
  6cfc0c2485080e923e924b73defa7746  libphobos/libdruntime/core/thread/fiber/base.d
! f79a7dc44d171d8251e9510c1c74212c  libphobos/libdruntime/core/thread/fiber/package.d
! cfca19aaa353d31513a34cd4714b34db  libphobos/libdruntime/core/thread/osthread.d
  cc5f1b5b44f6a26421e39b60a8310c08  libphobos/libdruntime/core/thread/package.d
! edab932469668c2bb7116aab5d9b76e0  libphobos/libdruntime/core/thread/threadbase.d
  e56fd11737f2c55b4255fe3d6ac1ef28  libphobos/libdruntime/core/thread/threadgroup.d
  4b62ae0fdc1ad3c3f84e871d1805614e  libphobos/libdruntime/core/thread/types.d
  e64d0d602d45a7d0ff4f2d4918a511c1  libphobos/libdruntime/core/time.d
! 3a073c402a4c1ccb2f41a59edaba8e47  libphobos/libdruntime/core/vararg.d
  8fd3a62a61def138cfc3fc4cb394edf9  libphobos/libdruntime/core/volatile.d
  064f788d347802e25a84b4176ad920a0  libphobos/libdruntime/etc/valgrind/valgrind.d
  6d8c84f9aadc849a94d832fa65ac8d66  libphobos/libdruntime/etc/valgrind/valgrind_.c
*************** f2bc5e78abadaa970deff8afc34f58a8  libpho
*** 143491,143497 ****
  371cb9df3a872784efb0e2e66a99f55b  libphobos/libdruntime/gcc/unwind/generic.d
  a65b4ab3edfbd40ae196e2ada43fc39e  libphobos/libdruntime/gcc/unwind/package.d
  df7fcef7caf5f63cafb73bdb2f8f4050  libphobos/libdruntime/gcc/unwind/pe.d
! 008bfe6fe8d2c3ce18ff1cfd7857a041  libphobos/libdruntime/object.d
  d8d516fbbcdaf56dbedecba292ccbbf0  libphobos/libdruntime/rt/aApply.d
  354d74322247f84a028b3aa1a5e7504b  libphobos/libdruntime/rt/aApplyR.d
  b647fb15bc7ed8eeaa50ad59ae9bfe24  libphobos/libdruntime/rt/arraycat.d
--- 143637,143643 ----
  371cb9df3a872784efb0e2e66a99f55b  libphobos/libdruntime/gcc/unwind/generic.d
  a65b4ab3edfbd40ae196e2ada43fc39e  libphobos/libdruntime/gcc/unwind/package.d
  df7fcef7caf5f63cafb73bdb2f8f4050  libphobos/libdruntime/gcc/unwind/pe.d
! 6b10f7d72b42b48d5d6978ff88c208aa  libphobos/libdruntime/object.d
  d8d516fbbcdaf56dbedecba292ccbbf0  libphobos/libdruntime/rt/aApply.d
  354d74322247f84a028b3aa1a5e7504b  libphobos/libdruntime/rt/aApplyR.d
  b647fb15bc7ed8eeaa50ad59ae9bfe24  libphobos/libdruntime/rt/arraycat.d
*************** cdf59405351ba7c7e3d5450b0f0b0e0e  libpho
*** 143509,143515 ****
  bd333879e9738908ba32ef93f52deafc  libphobos/libdruntime/rt/profilegc.d
  1e50d613ef2c1ba6637c9f9dcc750d49  libphobos/libdruntime/rt/sections.d
  f6e3b55cca95e54705af45642c8759a3  libphobos/libdruntime/rt/tlsgc.d
! 730eec8db3cabdb78559e31f556377c3  libphobos/libdruntime/rt/util/typeinfo.d
  b44590c842b754fede38a9a70a5b2d53  libphobos/libdruntime/rt/util/utility.d
  98e21634a122597ed7abb6150c41cdbf  libphobos/m4/autoconf.m4
  cbef578492ab132e253c07ad83e6ee8a  libphobos/m4/druntime.m4
--- 143655,143661 ----
  bd333879e9738908ba32ef93f52deafc  libphobos/libdruntime/rt/profilegc.d
  1e50d613ef2c1ba6637c9f9dcc750d49  libphobos/libdruntime/rt/sections.d
  f6e3b55cca95e54705af45642c8759a3  libphobos/libdruntime/rt/tlsgc.d
! 013e9098f3754477999eab42054b5cc2  libphobos/libdruntime/rt/util/typeinfo.d
  b44590c842b754fede38a9a70a5b2d53  libphobos/libdruntime/rt/util/utility.d
  98e21634a122597ed7abb6150c41cdbf  libphobos/m4/autoconf.m4
  cbef578492ab132e253c07ad83e6ee8a  libphobos/m4/druntime.m4
*************** b3025f8fcdacfcfd19b2f680771e0d5b  libpho
*** 143525,143531 ****
  37831246a7b8e5f71727b7a713352035  libphobos/scripts/gen_phobos_sources.d
  483b5aeff7dae9fe9839ad556013fb2b  libphobos/scripts/tests_extractor.d
  e4224ccaecb14d942c71d31bef20d78c  libphobos/src/LICENSE_1_0.txt
! a91791f734c4be59c06a68cba736248a  libphobos/src/MERGE
  af5b0313377f98414fbf08f809a90254  libphobos/src/Makefile.am
  12d866b1f3b11e05c0876c9009989f67  libphobos/src/Makefile.in
  ff30fe7275b03f69e2a7796e47d142e8  libphobos/src/drtstuff.spec
--- 143671,143677 ----
  37831246a7b8e5f71727b7a713352035  libphobos/scripts/gen_phobos_sources.d
  483b5aeff7dae9fe9839ad556013fb2b  libphobos/scripts/tests_extractor.d
  e4224ccaecb14d942c71d31bef20d78c  libphobos/src/LICENSE_1_0.txt
! 1071ec14081cafc28b5daa4635456f36  libphobos/src/MERGE
  af5b0313377f98414fbf08f809a90254  libphobos/src/Makefile.am
  12d866b1f3b11e05c0876c9009989f67  libphobos/src/Makefile.in
  ff30fe7275b03f69e2a7796e47d142e8  libphobos/src/drtstuff.spec
*************** af47372314d40b7e06fa4d38102fabb9  libpho
*** 143541,143571 ****
  7b80323c83065d7a653fce9728ebac50  libphobos/src/etc/c/zlib.d
  fa25eb1b341e933154b909c87ba2fa4d  libphobos/src/index.dd
  3a1ad66c3c47609c90c1f4d9cf8ddca2  libphobos/src/libgphobos.spec.in
! 0cdefe4e8043166cd0339c34b314777f  libphobos/src/std/algorithm/comparison.d
  694c41f4d2a56ffa1cea9387144617a7  libphobos/src/std/algorithm/internal.d
! efc0d0f7a95d7d2fe3dd53854c69ffec  libphobos/src/std/algorithm/iteration.d
  b38d74994191c451a28bd76b3d2c6dd0  libphobos/src/std/algorithm/mutation.d
  3f649d64367da82fd22630117d39a560  libphobos/src/std/algorithm/package.d
  e2d0704809516eca3359a1cb2a27a08b  libphobos/src/std/algorithm/searching.d
! 0168970ef3ddd4482a1113ab62927465  libphobos/src/std/algorithm/setops.d
  c089a9994eed9a6f284bcecab22792e8  libphobos/src/std/algorithm/sorting.d
! 62e38c28a4b5080469bebe517ff56026  libphobos/src/std/array.d
! 9d2cad1389a3ba0d00b5e5e14f404f89  libphobos/src/std/ascii.d
  4343438cc03cd4133da56302010ceb07  libphobos/src/std/base64.d
  2ed00320c4f6fe0bf39ad5cb882922b8  libphobos/src/std/bigint.d
  0bc946de2143058018a539da33b0b774  libphobos/src/std/bitmanip.d
  d39b906087da34c3c097a9d293bf5278  libphobos/src/std/checkedint.d
  5c954cc53846cbfcfdab57ef4fcb6abc  libphobos/src/std/compiler.d
  5ed079a75eda900fd72b12e2ec90d91e  libphobos/src/std/complex.d
! 075117d1c2173b99d010a1aef0b24927  libphobos/src/std/concurrency.d
  055473876e85cd377596e2eb86de9b41  libphobos/src/std/container/array.d
  b2899537b7218e7ff3c84509f244f1e3  libphobos/src/std/container/binaryheap.d
  21f786eb5ba0ba4d7458c50bfe9c56ce  libphobos/src/std/container/dlist.d
! 65aae32a5b3a4a7f3e4e38bfe613eb94  libphobos/src/std/container/package.d
! f464afcc3757d4e8d441a4891ee559e2  libphobos/src/std/container/rbtree.d
! 8c76a4701d3d87cb96d456a7267f5fa5  libphobos/src/std/container/slist.d
  867341eefe22ccbb576dd75fd0283f0c  libphobos/src/std/container/util.d
! 195bf0c220baced8395ae1828ca3d1d8  libphobos/src/std/conv.d
  169872ce9cf21699f0ef882327c045d9  libphobos/src/std/csv.d
  41fdbc8fc708104faa45bbe031818fce  libphobos/src/std/datetime/date.d
  18ad046c5d9ef5b4e1008f8a1e5c53ba  libphobos/src/std/datetime/interval.d
--- 143687,143717 ----
  7b80323c83065d7a653fce9728ebac50  libphobos/src/etc/c/zlib.d
  fa25eb1b341e933154b909c87ba2fa4d  libphobos/src/index.dd
  3a1ad66c3c47609c90c1f4d9cf8ddca2  libphobos/src/libgphobos.spec.in
! 27f07eb519b41fc132521438c8532430  libphobos/src/std/algorithm/comparison.d
  694c41f4d2a56ffa1cea9387144617a7  libphobos/src/std/algorithm/internal.d
! bfea1f02f1a0048e58bbcf2170cfca9b  libphobos/src/std/algorithm/iteration.d
  b38d74994191c451a28bd76b3d2c6dd0  libphobos/src/std/algorithm/mutation.d
  3f649d64367da82fd22630117d39a560  libphobos/src/std/algorithm/package.d
  e2d0704809516eca3359a1cb2a27a08b  libphobos/src/std/algorithm/searching.d
! d3ead1ba2f3ccbf57c4b8b586aa53d79  libphobos/src/std/algorithm/setops.d
  c089a9994eed9a6f284bcecab22792e8  libphobos/src/std/algorithm/sorting.d
! e22ce47cf698bdd15ca7b112cd94baf9  libphobos/src/std/array.d
! 693e4d61ebf3dd95cd39d68554c90536  libphobos/src/std/ascii.d
  4343438cc03cd4133da56302010ceb07  libphobos/src/std/base64.d
  2ed00320c4f6fe0bf39ad5cb882922b8  libphobos/src/std/bigint.d
  0bc946de2143058018a539da33b0b774  libphobos/src/std/bitmanip.d
  d39b906087da34c3c097a9d293bf5278  libphobos/src/std/checkedint.d
  5c954cc53846cbfcfdab57ef4fcb6abc  libphobos/src/std/compiler.d
  5ed079a75eda900fd72b12e2ec90d91e  libphobos/src/std/complex.d
! 8a27c014446720d00221d6b014348215  libphobos/src/std/concurrency.d
  055473876e85cd377596e2eb86de9b41  libphobos/src/std/container/array.d
  b2899537b7218e7ff3c84509f244f1e3  libphobos/src/std/container/binaryheap.d
  21f786eb5ba0ba4d7458c50bfe9c56ce  libphobos/src/std/container/dlist.d
! 98854bdceed01292da33bdd12c7a7120  libphobos/src/std/container/package.d
! 2fcd0ed02c78e714b9f785476a364bb1  libphobos/src/std/container/rbtree.d
! 80b698261f95d006feca4a1b3907071c  libphobos/src/std/container/slist.d
  867341eefe22ccbb576dd75fd0283f0c  libphobos/src/std/container/util.d
! 3c954b1d9ae72b1b77a170d739adff44  libphobos/src/std/conv.d
  169872ce9cf21699f0ef882327c045d9  libphobos/src/std/csv.d
  41fdbc8fc708104faa45bbe031818fce  libphobos/src/std/datetime/date.d
  18ad046c5d9ef5b4e1008f8a1e5c53ba  libphobos/src/std/datetime/interval.d
*************** b47dbe3911d24e7ed5b66df2f0605ccb  libpho
*** 143585,143591 ****
  40bd5132c4f9aa29a50b0c785523791f  libphobos/src/std/exception.d
  c6b20fb62f7a0f07789137e4e07c65e6  libphobos/src/std/experimental/allocator/building_blocks/affix_allocator.d
  f5a9a6e6207580b72ba6df2195748c52  libphobos/src/std/experimental/allocator/building_blocks/aligned_block_list.d
! 9edf73cd032f7b469607ae2753d13b39  libphobos/src/std/experimental/allocator/building_blocks/allocator_list.d
  54937f37e3907116b80036449560c873  libphobos/src/std/experimental/allocator/building_blocks/ascending_page_allocator.d
  81c04e6daf295821dbdc8654dbcb970e  libphobos/src/std/experimental/allocator/building_blocks/bitmapped_block.d
  aaab7cd4d84a361d433bb44d4301c0af  libphobos/src/std/experimental/allocator/building_blocks/bucketizer.d
--- 143731,143737 ----
  40bd5132c4f9aa29a50b0c785523791f  libphobos/src/std/exception.d
  c6b20fb62f7a0f07789137e4e07c65e6  libphobos/src/std/experimental/allocator/building_blocks/affix_allocator.d
  f5a9a6e6207580b72ba6df2195748c52  libphobos/src/std/experimental/allocator/building_blocks/aligned_block_list.d
! 366f5372c2eac6b155ff8553d01e12fa  libphobos/src/std/experimental/allocator/building_blocks/allocator_list.d
  54937f37e3907116b80036449560c873  libphobos/src/std/experimental/allocator/building_blocks/ascending_page_allocator.d
  81c04e6daf295821dbdc8654dbcb970e  libphobos/src/std/experimental/allocator/building_blocks/bitmapped_block.d
  aaab7cd4d84a361d433bb44d4301c0af  libphobos/src/std/experimental/allocator/building_blocks/bucketizer.d
*************** a6638776c1ae6dbc988632be56630654  libpho
*** 143617,143623 ****
  b33fcc5d233365eca57d47c9d8122bef  libphobos/src/std/file.d
  ed69de5978237426e7bd4ad3c1739056  libphobos/src/std/format/internal/floats.d
  23800e940269aaa2d047e31bdf1ba455  libphobos/src/std/format/internal/read.d
! bfcc8bf8666c2eb0fa777fb48c5dda14  libphobos/src/std/format/internal/write.d
  0b7939a8b36bc1ad7a1b39456a0f2f27  libphobos/src/std/format/package.d
  8b55a2d263807b24820e6e80a2b9cd8a  libphobos/src/std/format/read.d
  5ca6bf9438eb9b805e437decc0d26464  libphobos/src/std/format/spec.d
--- 143763,143769 ----
  b33fcc5d233365eca57d47c9d8122bef  libphobos/src/std/file.d
  ed69de5978237426e7bd4ad3c1739056  libphobos/src/std/format/internal/floats.d
  23800e940269aaa2d047e31bdf1ba455  libphobos/src/std/format/internal/read.d
! 1215657bedf400bf3f24f2b15834843d  libphobos/src/std/format/internal/write.d
  0b7939a8b36bc1ad7a1b39456a0f2f27  libphobos/src/std/format/package.d
  8b55a2d263807b24820e6e80a2b9cd8a  libphobos/src/std/format/read.d
  5ca6bf9438eb9b805e437decc0d26464  libphobos/src/std/format/spec.d
*************** c210167a3b02323e6329c264f61d8641  libpho
*** 143631,143648 ****
  65b2752482c5beafe0d9c3b46fc749bd  libphobos/src/std/internal/math/biguintcore.d
  d3a41b19b71afaad9507ea2b7e63baa1  libphobos/src/std/internal/math/biguintnoasm.d
  8163acdb919296a99cd241f472263b56  libphobos/src/std/internal/math/errorfunction.d
! e6268b8967d003412ab038da4fff8738  libphobos/src/std/internal/math/gammafunction.d
  f25b12bd0896d34a7a63eeccbb71ddd1  libphobos/src/std/internal/memory.d
  b8a0549fa22a82b03b350b02592236a5  libphobos/src/std/internal/scopebuffer.d
  9d04fec81b9805b4cb23cb8c29ade815  libphobos/src/std/internal/test/dummyrange.d
  03e83c05cb658326cc0437a70ecfc70b  libphobos/src/std/internal/test/range.d
  54fe5a81d6c5ad4ef9cd0c8dab69c738  libphobos/src/std/internal/test/sumtype_example_overloads.d
  9d403089f5dfdab0c5fd3b765e0e5e07  libphobos/src/std/internal/test/uda.d
! 80b516164fcc539294e100086040a537  libphobos/src/std/internal/unicode_comp.d
! a81af891d911d203ff8431d130fe121d  libphobos/src/std/internal/unicode_decomp.d
! 86942b7bbf6a8b6c6fad904f336a90ef  libphobos/src/std/internal/unicode_grapheme.d
! 9e85724192d45f8482c5ade6cb407520  libphobos/src/std/internal/unicode_norm.d
! 716c1de066b906a19b3a81fa44d7d30d  libphobos/src/std/internal/unicode_tables.d
  1032174c14b8ed750d026d9e33c0f28d  libphobos/src/std/internal/windows/advapi32.d
  66cc75c0ba4019fcaebc5b3f3f6f6da7  libphobos/src/std/json.d
  929f2919fe4ac3248380ab2ac45c96d3  libphobos/src/std/logger/core.d
--- 143777,143794 ----
  65b2752482c5beafe0d9c3b46fc749bd  libphobos/src/std/internal/math/biguintcore.d
  d3a41b19b71afaad9507ea2b7e63baa1  libphobos/src/std/internal/math/biguintnoasm.d
  8163acdb919296a99cd241f472263b56  libphobos/src/std/internal/math/errorfunction.d
! 2d453742fdd5aa56d4933bdb6d2cc677  libphobos/src/std/internal/math/gammafunction.d
  f25b12bd0896d34a7a63eeccbb71ddd1  libphobos/src/std/internal/memory.d
  b8a0549fa22a82b03b350b02592236a5  libphobos/src/std/internal/scopebuffer.d
  9d04fec81b9805b4cb23cb8c29ade815  libphobos/src/std/internal/test/dummyrange.d
  03e83c05cb658326cc0437a70ecfc70b  libphobos/src/std/internal/test/range.d
  54fe5a81d6c5ad4ef9cd0c8dab69c738  libphobos/src/std/internal/test/sumtype_example_overloads.d
  9d403089f5dfdab0c5fd3b765e0e5e07  libphobos/src/std/internal/test/uda.d
! 6b50effe61dff4e9bcff24bfc04bc8c2  libphobos/src/std/internal/unicode_comp.d
! ed8cb96ec62ebb38895b04d30b8f32f8  libphobos/src/std/internal/unicode_decomp.d
! e48b4ce7bdf9d6c2bf05c0feeb988c8e  libphobos/src/std/internal/unicode_grapheme.d
! e6587609b7d1bb62a631bdf1c3a96600  libphobos/src/std/internal/unicode_norm.d
! e50986d764d488314bf6aa245b5bb157  libphobos/src/std/internal/unicode_tables.d
  1032174c14b8ed750d026d9e33c0f28d  libphobos/src/std/internal/windows/advapi32.d
  66cc75c0ba4019fcaebc5b3f3f6f6da7  libphobos/src/std/json.d
  929f2919fe4ac3248380ab2ac45c96d3  libphobos/src/std/logger/core.d
*************** d8f795902be376414e804c2210e0022a  libpho
*** 143654,143668 ****
  3cee3970cfe6bcde0d4b6c640b9aae04  libphobos/src/std/math/constants.d
  fdcb7091f61f288ffb5fddf180890949  libphobos/src/std/math/exponential.d
  e0c33ea9d408897be690f484f22beb74  libphobos/src/std/math/hardware.d
! 7ed460e316b0032b3afd54cbfaf4c2b9  libphobos/src/std/math/operations.d
  ffd91c7d720a05cc92297bfa00f7150d  libphobos/src/std/math/package.d
  88694133c2ab2068b6250dbc41d3cb48  libphobos/src/std/math/remainder.d
  7d5f60b5115b54dbb62902f440eff6bc  libphobos/src/std/math/rounding.d
  55d099fefe01ba1713d89a88e07604f7  libphobos/src/std/math/traits.d
  bb6782b1bf2a9aaca15560a63e26a8c7  libphobos/src/std/math/trigonometry.d
! 1d01e7e8d56cae738c9bd28dcedf13a4  libphobos/src/std/mathspecial.d
  3fcc7e62612171e7a4e18b8c0053b366  libphobos/src/std/meta.d
! 5204762dc86326245efda7ef0935652e  libphobos/src/std/mmfile.d
  bfce3399bbfb8b0a89d282dd5be0d04e  libphobos/src/std/net/curl.d
  8f6dbfa8c1df10b8e6ef116eb55bbe40  libphobos/src/std/net/isemail.d
  bc2c3810ea01d879e9408dc7d301693d  libphobos/src/std/numeric.d
--- 143800,143814 ----
  3cee3970cfe6bcde0d4b6c640b9aae04  libphobos/src/std/math/constants.d
  fdcb7091f61f288ffb5fddf180890949  libphobos/src/std/math/exponential.d
  e0c33ea9d408897be690f484f22beb74  libphobos/src/std/math/hardware.d
! 2fc8b0285eab81bd86ec173718b442d0  libphobos/src/std/math/operations.d
  ffd91c7d720a05cc92297bfa00f7150d  libphobos/src/std/math/package.d
  88694133c2ab2068b6250dbc41d3cb48  libphobos/src/std/math/remainder.d
  7d5f60b5115b54dbb62902f440eff6bc  libphobos/src/std/math/rounding.d
  55d099fefe01ba1713d89a88e07604f7  libphobos/src/std/math/traits.d
  bb6782b1bf2a9aaca15560a63e26a8c7  libphobos/src/std/math/trigonometry.d
! 3475e5203590049af8ca79a7b2dd9504  libphobos/src/std/mathspecial.d
  3fcc7e62612171e7a4e18b8c0053b366  libphobos/src/std/meta.d
! fdadf3112706335f55e6a193d9a86b0e  libphobos/src/std/mmfile.d
  bfce3399bbfb8b0a89d282dd5be0d04e  libphobos/src/std/net/curl.d
  8f6dbfa8c1df10b8e6ef116eb55bbe40  libphobos/src/std/net/isemail.d
  bc2c3810ea01d879e9408dc7d301693d  libphobos/src/std/numeric.d
*************** bc2c3810ea01d879e9408dc7d301693d  libpho
*** 143670,143679 ****
  f0acf0010f4a57e539c9ce4e9d0f5755  libphobos/src/std/package.d
  fb97c6706a8ec3eeff9a08855dbbc191  libphobos/src/std/parallelism.d
  ce1fe5d48bc66d2758b1c8b3de1d0184  libphobos/src/std/path.d
! 9f451091ebf983a7ebbc657afdd2033c  libphobos/src/std/process.d
! 9fc77ecccca136b32c53d6d411e57e47  libphobos/src/std/random.d
  9aefa68666e3b2384142dd9837b4d2af  libphobos/src/std/range/interfaces.d
! 5ae74fc76ea8338eb7ec54cd5ce8da14  libphobos/src/std/range/package.d
  ae94d782479273704d5fc6db0ddc4610  libphobos/src/std/range/primitives.d
  4ca1f589b5a11920b25b46baeec8699a  libphobos/src/std/regex/internal/backtracking.d
  44883eb43e246b6b244c1ff51ebf2822  libphobos/src/std/regex/internal/generator.d
--- 143816,143825 ----
  f0acf0010f4a57e539c9ce4e9d0f5755  libphobos/src/std/package.d
  fb97c6706a8ec3eeff9a08855dbbc191  libphobos/src/std/parallelism.d
  ce1fe5d48bc66d2758b1c8b3de1d0184  libphobos/src/std/path.d
! 22cade572817362e73a494298c994d0f  libphobos/src/std/process.d
! 7df935be2fb92ec96132af2742fa8ed1  libphobos/src/std/random.d
  9aefa68666e3b2384142dd9837b4d2af  libphobos/src/std/range/interfaces.d
! 54eb6e6bd2b6e600e226dbd1016087bb  libphobos/src/std/range/package.d
  ae94d782479273704d5fc6db0ddc4610  libphobos/src/std/range/primitives.d
  4ca1f589b5a11920b25b46baeec8699a  libphobos/src/std/regex/internal/backtracking.d
  44883eb43e246b6b244c1ff51ebf2822  libphobos/src/std/regex/internal/generator.d
*************** ac0a9a606c95c4c1632599630d77cac4  libpho
*** 143685,143703 ****
  4c2dab023ef251a6ae3c3e03c1831614  libphobos/src/std/regex/internal/thompson.d
  9d5ca0299241cbf15f55dba32d14fedc  libphobos/src/std/regex/package.d
  86f746e01b6b2e0e808ade6f5dd08299  libphobos/src/std/signals.d
! f1e5d9632198af0ed951b9298581129e  libphobos/src/std/socket.d
  65fa3f6f1125566206c3a4ac3e8adfe3  libphobos/src/std/stdint.d
  ba9b15fc7c0dacd4465cd8ac35bb1737  libphobos/src/std/stdio.d
  3ce8af7c2852c1265dec0a87dcae7842  libphobos/src/std/string.d
! 50aac7e49f4e9f183cf6d8139f052561  libphobos/src/std/sumtype.d
! fe0985971c6aad99d6e99e55e8705f09  libphobos/src/std/system.d
! 40044e6203b6543c2a40ef7de9c98151  libphobos/src/std/traits.d
! 809a4871f261845dc9c0db1310a1ac7b  libphobos/src/std/typecons.d
  8592c7afe7a1de32c25d04e3fa0f2bca  libphobos/src/std/typetuple.d
  88046575f79aa525d347b8652fd2b9ba  libphobos/src/std/uni/package.d
  c2ff190df1f5298cbcc40494150b1d48  libphobos/src/std/uri.d
  6925d1c023c389c0e8f51b64ef03a335  libphobos/src/std/utf.d
! ccb0bf5b4db227ed3ce4406469008d1f  libphobos/src/std/uuid.d
  28786b956eb7d3fc1856c675c46bdbde  libphobos/src/std/variant.d
  fb2675bdcc716cb272a59ab642e3b40b  libphobos/src/std/windows/charset.d
  dd46a2873cda836b4a607e35ac2a3835  libphobos/src/std/windows/registry.d
--- 143831,143849 ----
  4c2dab023ef251a6ae3c3e03c1831614  libphobos/src/std/regex/internal/thompson.d
  9d5ca0299241cbf15f55dba32d14fedc  libphobos/src/std/regex/package.d
  86f746e01b6b2e0e808ade6f5dd08299  libphobos/src/std/signals.d
! 56052fcda79384ae2c8a378fc96a4edd  libphobos/src/std/socket.d
  65fa3f6f1125566206c3a4ac3e8adfe3  libphobos/src/std/stdint.d
  ba9b15fc7c0dacd4465cd8ac35bb1737  libphobos/src/std/stdio.d
  3ce8af7c2852c1265dec0a87dcae7842  libphobos/src/std/string.d
! 9b80bbfee054d3854a90be0cbb1a703b  libphobos/src/std/sumtype.d
! 7a5ed6243cd12ca20962a32ebdf89def  libphobos/src/std/system.d
! 1762165fa07be5e4fc9f02b7ed439148  libphobos/src/std/traits.d
! 8a93e1487e34371b60807d4f3ea2e1f4  libphobos/src/std/typecons.d
  8592c7afe7a1de32c25d04e3fa0f2bca  libphobos/src/std/typetuple.d
  88046575f79aa525d347b8652fd2b9ba  libphobos/src/std/uni/package.d
  c2ff190df1f5298cbcc40494150b1d48  libphobos/src/std/uri.d
  6925d1c023c389c0e8f51b64ef03a335  libphobos/src/std/utf.d
! b797e38f3d3e541dec33b391ba3f0cbf  libphobos/src/std/uuid.d
  28786b956eb7d3fc1856c675c46bdbde  libphobos/src/std/variant.d
  fb2675bdcc716cb272a59ab642e3b40b  libphobos/src/std/windows/charset.d
  dd46a2873cda836b4a607e35ac2a3835  libphobos/src/std/windows/registry.d
*************** c345e0c58342f032fbeb00c63fdb3340  libpho
*** 143710,143716 ****
  aa70b4cf24946de203c671b652c53970  libphobos/testsuite/lib/libphobos-dg.exp
  58de7a7537cc7fc649654206ea43f0ee  libphobos/testsuite/lib/libphobos.exp
  cbb0b94d3f71fbf479418214a976a34d  libphobos/testsuite/libphobos.aa/aa.exp
! 937d7b2264e909d3515b1b6604e7c622  libphobos/testsuite/libphobos.aa/test_aa.d
  d86b969dda21cc9af1483872e4a3dcc8  libphobos/testsuite/libphobos.allocations/alloc_from_assert.d
  ef2bd4a0583795c33a64a5f146f0dfb9  libphobos/testsuite/libphobos.allocations/allocations.exp
  7dfee0831ce08cfd971056dee5ce8519  libphobos/testsuite/libphobos.allocations/overflow_from_existing.d
--- 143856,143862 ----
  aa70b4cf24946de203c671b652c53970  libphobos/testsuite/lib/libphobos-dg.exp
  58de7a7537cc7fc649654206ea43f0ee  libphobos/testsuite/lib/libphobos.exp
  cbb0b94d3f71fbf479418214a976a34d  libphobos/testsuite/libphobos.aa/aa.exp
! 05636b845bfe58a8262ea1c7e28d1c3c  libphobos/testsuite/libphobos.aa/test_aa.d
  d86b969dda21cc9af1483872e4a3dcc8  libphobos/testsuite/libphobos.allocations/alloc_from_assert.d
  ef2bd4a0583795c33a64a5f146f0dfb9  libphobos/testsuite/libphobos.allocations/allocations.exp
  7dfee0831ce08cfd971056dee5ce8519  libphobos/testsuite/libphobos.allocations/overflow_from_existing.d
*************** d0b0d163e054a715940a0b8c19fc84a2  libpho
*** 143754,143760 ****
  68b182a855dd5d72a6c0afd27961c698  libphobos/testsuite/libphobos.exceptions/unknown_gc.d
  b6ebfcdaf3a8630eae6d2fea0200d718  libphobos/testsuite/libphobos.gc/attributes.d
  27d5233a2f2f88a9c968da002a89f585  libphobos/testsuite/libphobos.gc/forkgc.d
- df3ff72b86d93171f71ffc809fb04d95  libphobos/testsuite/libphobos.gc/forkgc2.d
  c7f93c2b045d9c2a3c5df2fb48207974  libphobos/testsuite/libphobos.gc/gc.exp
  3c24ec9d3e8f2608213d6879c1ee28bd  libphobos/testsuite/libphobos.gc/issue22843.d
  0cf45bd3741c0d5bed6c685e04bca300  libphobos/testsuite/libphobos.gc/nocollect.d
--- 143900,143905 ----
*************** d3c9a66f75a4c0e9517bb616aa64dbf0  libpho
*** 143901,143906 ****
--- 144046,144053 ----
  b7e4b1c3f60731cf4ff7cf627c1e34d8  libphobos/testsuite/libphobos.shared/shared.exp
  97e03d8104ae4e9dceccbc2133bfa4bc  libphobos/testsuite/libphobos.thread/external_threads.d
  8d802a80fc3114c071c927e9c19be7b2  libphobos/testsuite/libphobos.thread/fiber_guard_page.d
+ 80cc5df043e0d890c8aae43ee5608948  libphobos/testsuite/libphobos.thread/filterthrownglobal.d
+ daaa8b7f73517f4ce1608c0d3c74552c  libphobos/testsuite/libphobos.thread/filterthrownmethod.d
  3e309c288aff9749089ac68af091756f  libphobos/testsuite/libphobos.thread/join_detach.d
  42d85aa4daa1f572a3dd573c6b4a7b79  libphobos/testsuite/libphobos.thread/test_import.d
  ef2bd4a0583795c33a64a5f146f0dfb9  libphobos/testsuite/libphobos.thread/thread.exp
*************** a73d560a3ba317c5ad0a7919d87b4b6d  libssp
*** 144583,144589 ****
  7d75fa0d30318408fe4cd91d9cbe3ac7  libssp/vsnprintf-chk.c
  e9ff0f4bdd1be75a507480ed1267459d  libssp/vsprintf-chk.c
  9e2de2e1f20ab0ffa2201164de02824f  libstdc++-v3/.editorconfig
! ae6dfd3c5d360f896125c44755edec2a  libstdc++-v3/ChangeLog
  7aa6c40440a44fcf5ec94c066160c2f8  libstdc++-v3/ChangeLog-1998
  7aff86600b6a1ed3fa87305075a92db0  libstdc++-v3/ChangeLog-1999
  a6f28e8fc9bb07696a9e068b439a3a87  libstdc++-v3/ChangeLog-2000
--- 144730,144736 ----
  7d75fa0d30318408fe4cd91d9cbe3ac7  libssp/vsnprintf-chk.c
  e9ff0f4bdd1be75a507480ed1267459d  libssp/vsprintf-chk.c
  9e2de2e1f20ab0ffa2201164de02824f  libstdc++-v3/.editorconfig
! 6acfff71a052bd3557e5f6947cbf6ad0  libstdc++-v3/ChangeLog
  7aa6c40440a44fcf5ec94c066160c2f8  libstdc++-v3/ChangeLog-1998
  7aff86600b6a1ed3fa87305075a92db0  libstdc++-v3/ChangeLog-1999
  a6f28e8fc9bb07696a9e068b439a3a87  libstdc++-v3/ChangeLog-2000
*************** a94321c8d0dbbc71741ebf0f1cc9828c  libstd
*** 144615,144621 ****
  026f5fc52a4e1dfb7a455574200258c2  libstdc++-v3/Makefile.am
  4f2ea793c6b34934133e8e7e01601c7e  libstdc++-v3/Makefile.in
  f372af73db4ac0ad88e43199e1f29e08  libstdc++-v3/README
! cf91e318c4c1bc11ac5f4ecb0b01294e  libstdc++-v3/acinclude.m4
  66d9ad645fa12cd3028e72df3375d9a6  libstdc++-v3/aclocal.m4
  99a3cff2df96180120774fefa11f050e  libstdc++-v3/config.h.in
  2345fca717fc01f8c1494241d6a88e94  libstdc++-v3/config/abi/compatibility.h
--- 144762,144768 ----
  026f5fc52a4e1dfb7a455574200258c2  libstdc++-v3/Makefile.am
  4f2ea793c6b34934133e8e7e01601c7e  libstdc++-v3/Makefile.in
  f372af73db4ac0ad88e43199e1f29e08  libstdc++-v3/README
! 81d842b8de8e587a7d5fb793e0ee7373  libstdc++-v3/acinclude.m4
  66d9ad645fa12cd3028e72df3375d9a6  libstdc++-v3/aclocal.m4
  99a3cff2df96180120774fefa11f050e  libstdc++-v3/config.h.in
  2345fca717fc01f8c1494241d6a88e94  libstdc++-v3/config/abi/compatibility.h
*************** a144795bdde388f89eb6222f0c2e4932  libstd
*** 144811,144817 ****
  53df82982400fd3d426f3fd0e0c37b54  libstdc++-v3/config/os/vxworks/ctype_configure_char.cc
  a3f907fa7f71dc9eb08755c9c438accc  libstdc++-v3/config/os/vxworks/ctype_inline.h
  309bdcfd61ec9ca44671057524c081f1  libstdc++-v3/config/os/vxworks/os_defines.h
! 88fb52d225e592c25e062b7d25f79d90  libstdc++-v3/configure
  ef7d4ee8dfc656b2511fdab05020e10d  libstdc++-v3/configure.ac
  bfcbc1fdbf99aa57e07470ca81fd7627  libstdc++-v3/configure.host
  450cc52f6f6f0abf59940662504c450e  libstdc++-v3/crossconfig.m4
--- 144958,144964 ----
  53df82982400fd3d426f3fd0e0c37b54  libstdc++-v3/config/os/vxworks/ctype_configure_char.cc
  a3f907fa7f71dc9eb08755c9c438accc  libstdc++-v3/config/os/vxworks/ctype_inline.h
  309bdcfd61ec9ca44671057524c081f1  libstdc++-v3/config/os/vxworks/os_defines.h
! c51771137f2cb160f9c70d9e9da2905d  libstdc++-v3/configure
  ef7d4ee8dfc656b2511fdab05020e10d  libstdc++-v3/configure.ac
  bfcbc1fdbf99aa57e07470ca81fd7627  libstdc++-v3/configure.host
  450cc52f6f6f0abf59940662504c450e  libstdc++-v3/crossconfig.m4
*************** e77032281bd301430e499d5bb46db4a1  libstd
*** 145301,145307 ****
  af850f4d123435b088d5b30aa97508d5  libstdc++-v3/include/bits/funcwrap.h
  a437a10ba7525a3935bec765a5604a4f  libstdc++-v3/include/bits/gslice.h
  39aca2727a08f07f0043ee164eaa09a4  libstdc++-v3/include/bits/gslice_array.h
! d209b8063483aa0b8623963ca5d039a2  libstdc++-v3/include/bits/hashtable.h
  36aca6e3e79dd2db864e8df1b15f002d  libstdc++-v3/include/bits/hashtable_policy.h
  95eb0b92d5c9a8ddf313e412fee97770  libstdc++-v3/include/bits/indirect.h
  286812f00b93c6b48c444cf624dc6983  libstdc++-v3/include/bits/indirect_array.h
--- 145448,145454 ----
  af850f4d123435b088d5b30aa97508d5  libstdc++-v3/include/bits/funcwrap.h
  a437a10ba7525a3935bec765a5604a4f  libstdc++-v3/include/bits/gslice.h
  39aca2727a08f07f0043ee164eaa09a4  libstdc++-v3/include/bits/gslice_array.h
! 1773f2cf2b816c5909a3f4540395f895  libstdc++-v3/include/bits/hashtable.h
  36aca6e3e79dd2db864e8df1b15f002d  libstdc++-v3/include/bits/hashtable_policy.h
  95eb0b92d5c9a8ddf313e412fee97770  libstdc++-v3/include/bits/indirect.h
  286812f00b93c6b48c444cf624dc6983  libstdc++-v3/include/bits/indirect_array.h
*************** ba88833f52a0518e73f3f865cd474fcd  libstd
*** 145326,145332 ****
  3cdf6345e89c49a55bd7c9be035d3729  libstdc++-v3/include/bits/mofunc_impl.h
  4169d644c2ef24f0668b2a257a0a5e54  libstdc++-v3/include/bits/monostate.h
  d6ef81b077325dc3d96b5c3b851f7c9a  libstdc++-v3/include/bits/move.h
! d3f8aa7f3e724ad9216f2bc3f1e269aa  libstdc++-v3/include/bits/new_allocator.h
  1b9f1c577b18d8325e7de09b66b12c27  libstdc++-v3/include/bits/new_except.h
  30068e814005895587eb706ab7c5c00c  libstdc++-v3/include/bits/new_throw.h
  ab1a2667b1fb6a0843b439656cb56a71  libstdc++-v3/include/bits/node_handle.h
--- 145473,145479 ----
  3cdf6345e89c49a55bd7c9be035d3729  libstdc++-v3/include/bits/mofunc_impl.h
  4169d644c2ef24f0668b2a257a0a5e54  libstdc++-v3/include/bits/monostate.h
  d6ef81b077325dc3d96b5c3b851f7c9a  libstdc++-v3/include/bits/move.h
! cfd37a44f2a01dabf40fc5b04678b973  libstdc++-v3/include/bits/new_allocator.h
  1b9f1c577b18d8325e7de09b66b12c27  libstdc++-v3/include/bits/new_except.h
  30068e814005895587eb706ab7c5c00c  libstdc++-v3/include/bits/new_throw.h
  ab1a2667b1fb6a0843b439656cb56a71  libstdc++-v3/include/bits/node_handle.h
*************** c04d8e83343df391a348af7cf384e792  libstd
*** 145350,145356 ****
  1e16e9219782b5cd7f75c9d3e4611b1b  libstdc++-v3/include/bits/ranges_util.h
  eba2c9ee0f0d650f6223eb4f40e83b02  libstdc++-v3/include/bits/refwrap.h
  6764b39d51cbc4f39fddde947d8fe251  libstdc++-v3/include/bits/regex.h
! 746950b080d4cbb1e202307e888a93c3  libstdc++-v3/include/bits/regex.tcc
  d62176e59366818434c2a0ad6ef3b77b  libstdc++-v3/include/bits/regex_automaton.h
  7f7a38e87eaa1a1df665e82e34676187  libstdc++-v3/include/bits/regex_automaton.tcc
  1bcc93fd798e3cfceb03153cece2319c  libstdc++-v3/include/bits/regex_compiler.h
--- 145497,145503 ----
  1e16e9219782b5cd7f75c9d3e4611b1b  libstdc++-v3/include/bits/ranges_util.h
  eba2c9ee0f0d650f6223eb4f40e83b02  libstdc++-v3/include/bits/refwrap.h
  6764b39d51cbc4f39fddde947d8fe251  libstdc++-v3/include/bits/regex.h
! b4589bd660254929ec7e928696be5ea9  libstdc++-v3/include/bits/regex.tcc
  d62176e59366818434c2a0ad6ef3b77b  libstdc++-v3/include/bits/regex_automaton.h
  7f7a38e87eaa1a1df665e82e34676187  libstdc++-v3/include/bits/regex_automaton.tcc
  1bcc93fd798e3cfceb03153cece2319c  libstdc++-v3/include/bits/regex_compiler.h
*************** d62176e59366818434c2a0ad6ef3b77b  libstd
*** 145358,145364 ****
  d3f233b7eec1704a8dbae3ba302cd591  libstdc++-v3/include/bits/regex_constants.h
  50ec2de0a344b64a276e732b37641aae  libstdc++-v3/include/bits/regex_error.h
  6c8ff0bed217343128e9191134ee89f6  libstdc++-v3/include/bits/regex_executor.h
! 5d5c2c9d7afbd50070738d21addc8520  libstdc++-v3/include/bits/regex_executor.tcc
  fc20035df7d49f1eceffb4cb72ad6814  libstdc++-v3/include/bits/regex_scanner.h
  cbd44f9447b308b0901004443db53e93  libstdc++-v3/include/bits/regex_scanner.tcc
  22a9676313472917eaaccc27ddfb10f4  libstdc++-v3/include/bits/requires_hosted.h
--- 145505,145511 ----
  d3f233b7eec1704a8dbae3ba302cd591  libstdc++-v3/include/bits/regex_constants.h
  50ec2de0a344b64a276e732b37641aae  libstdc++-v3/include/bits/regex_error.h
  6c8ff0bed217343128e9191134ee89f6  libstdc++-v3/include/bits/regex_executor.h
! 2593e27e95598e22f913fc37cd89f781  libstdc++-v3/include/bits/regex_executor.tcc
  fc20035df7d49f1eceffb4cb72ad6814  libstdc++-v3/include/bits/regex_scanner.h
  cbd44f9447b308b0901004443db53e93  libstdc++-v3/include/bits/regex_scanner.tcc
  22a9676313472917eaaccc27ddfb10f4  libstdc++-v3/include/bits/requires_hosted.h
*************** f5291a41594cbc2cfdc8240cb611d8b1  libstd
*** 145383,145406 ****
  4e5a06e505381e0b1af562ff59670f89  libstdc++-v3/include/bits/stl_bvector.h
  c53878727e94c56c0b362d17dfe0fca2  libstdc++-v3/include/bits/stl_construct.h
  c56a5e22a7aa2899e57a689ddfa64b43  libstdc++-v3/include/bits/stl_deque.h
! 9af6cb03c92b477c32566b478b597033  libstdc++-v3/include/bits/stl_function.h
  4af65d6cfcd3e9943b1da341c9fa26ad  libstdc++-v3/include/bits/stl_heap.h
  bd2e27c602ee02023df28ac89c0ad816  libstdc++-v3/include/bits/stl_iterator.h
  08f3002267b4b29c0a28c75c6da5cf82  libstdc++-v3/include/bits/stl_iterator_base_funcs.h
  e8556ffa25de8ce12d02235826b7f595  libstdc++-v3/include/bits/stl_iterator_base_types.h
  0b716dbdfa551e19bc190dc3329971b4  libstdc++-v3/include/bits/stl_list.h
! 04b559081004730d603aced8509f6f03  libstdc++-v3/include/bits/stl_map.h
! df6d77cd72f5cbaa72e7052bdec543a8  libstdc++-v3/include/bits/stl_multimap.h
! 64d18b9a1711310c61a8df1029ba5c39  libstdc++-v3/include/bits/stl_multiset.h
  a6a59bb1a7d77735fcea0ae5adfd387a  libstdc++-v3/include/bits/stl_numeric.h
  20b95f09fe61e717a33e63cc82d31237  libstdc++-v3/include/bits/stl_pair.h
  fbc48edc025e7c818e5275b166c99273  libstdc++-v3/include/bits/stl_queue.h
  c5fe27c6f3b2737405f15913f248aa5f  libstdc++-v3/include/bits/stl_raw_storage_iter.h
  c786caa278e3160f3daa8327ee1002a1  libstdc++-v3/include/bits/stl_relops.h
! 04d27f6cf3ff382dc6effb147e5c1c26  libstdc++-v3/include/bits/stl_set.h
  2e947ba181d169443bd32dfa77c0e138  libstdc++-v3/include/bits/stl_stack.h
  ab35557852793a413e25819ddee53990  libstdc++-v3/include/bits/stl_tempbuf.h
! d38969cd7a2e3667c3f7aa1c6c72dc67  libstdc++-v3/include/bits/stl_tree.h
  7335f212f65e8e6b7a27886bc7ea7c4e  libstdc++-v3/include/bits/stl_uninitialized.h
  fa6a2197d9927c61c24b530816008594  libstdc++-v3/include/bits/stl_vector.h
  96570e9668a903cd69d5febdf0595994  libstdc++-v3/include/bits/stream_iterator.h
--- 145530,145553 ----
  4e5a06e505381e0b1af562ff59670f89  libstdc++-v3/include/bits/stl_bvector.h
  c53878727e94c56c0b362d17dfe0fca2  libstdc++-v3/include/bits/stl_construct.h
  c56a5e22a7aa2899e57a689ddfa64b43  libstdc++-v3/include/bits/stl_deque.h
! 3c041a3276d992f962f81fa4a73dca6b  libstdc++-v3/include/bits/stl_function.h
  4af65d6cfcd3e9943b1da341c9fa26ad  libstdc++-v3/include/bits/stl_heap.h
  bd2e27c602ee02023df28ac89c0ad816  libstdc++-v3/include/bits/stl_iterator.h
  08f3002267b4b29c0a28c75c6da5cf82  libstdc++-v3/include/bits/stl_iterator_base_funcs.h
  e8556ffa25de8ce12d02235826b7f595  libstdc++-v3/include/bits/stl_iterator_base_types.h
  0b716dbdfa551e19bc190dc3329971b4  libstdc++-v3/include/bits/stl_list.h
! f0dfe5e9bcfea27b41b1eb6c72204ac7  libstdc++-v3/include/bits/stl_map.h
! ffa344f61cf489be8d6b4b4c50bf5043  libstdc++-v3/include/bits/stl_multimap.h
! 0c8e2dae6126ed4fad55da6b9aa553bc  libstdc++-v3/include/bits/stl_multiset.h
  a6a59bb1a7d77735fcea0ae5adfd387a  libstdc++-v3/include/bits/stl_numeric.h
  20b95f09fe61e717a33e63cc82d31237  libstdc++-v3/include/bits/stl_pair.h
  fbc48edc025e7c818e5275b166c99273  libstdc++-v3/include/bits/stl_queue.h
  c5fe27c6f3b2737405f15913f248aa5f  libstdc++-v3/include/bits/stl_raw_storage_iter.h
  c786caa278e3160f3daa8327ee1002a1  libstdc++-v3/include/bits/stl_relops.h
! 2e309a117b1fec85cdcd81e28d207748  libstdc++-v3/include/bits/stl_set.h
  2e947ba181d169443bd32dfa77c0e138  libstdc++-v3/include/bits/stl_stack.h
  ab35557852793a413e25819ddee53990  libstdc++-v3/include/bits/stl_tempbuf.h
! ac9eb66129112ec11bcc7c7ed83d7313  libstdc++-v3/include/bits/stl_tree.h
  7335f212f65e8e6b7a27886bc7ea7c4e  libstdc++-v3/include/bits/stl_uninitialized.h
  fa6a2197d9927c61c24b530816008594  libstdc++-v3/include/bits/stl_vector.h
  96570e9668a903cd69d5febdf0595994  libstdc++-v3/include/bits/stream_iterator.h
*************** a315f61009849bba79498b388f94c177  libstd
*** 145415,145422 ****
  3d2b88f1657e6f77a55d546f589e7415  libstdc++-v3/include/bits/uniform_int_dist.h
  966bb21f0f44c4b2b6e713e62aeb90ae  libstdc++-v3/include/bits/unique_lock.h
  a911e8012ebb64890a0e12c16e4345ed  libstdc++-v3/include/bits/unique_ptr.h
! f348d3aba0b31018ec67f6c05abd564f  libstdc++-v3/include/bits/unordered_map.h
! 27efedbb099e4a650be01b72837bd2cb  libstdc++-v3/include/bits/unordered_set.h
  4fbbeaf99e17abfaf62cec53ac3c9193  libstdc++-v3/include/bits/uses_allocator.h
  9d01cfbd90824dde5e36d65c0c160ad5  libstdc++-v3/include/bits/uses_allocator_args.h
  cc888ad11b5889a85843f6fa7a0611f5  libstdc++-v3/include/bits/utility.h
--- 145562,145569 ----
  3d2b88f1657e6f77a55d546f589e7415  libstdc++-v3/include/bits/uniform_int_dist.h
  966bb21f0f44c4b2b6e713e62aeb90ae  libstdc++-v3/include/bits/unique_lock.h
  a911e8012ebb64890a0e12c16e4345ed  libstdc++-v3/include/bits/unique_ptr.h
! 6d7c0d0c0e03883b31759b97046758e8  libstdc++-v3/include/bits/unordered_map.h
! 70fbe494b0eb57905d4ae41e2ba3a8b8  libstdc++-v3/include/bits/unordered_set.h
  4fbbeaf99e17abfaf62cec53ac3c9193  libstdc++-v3/include/bits/uses_allocator.h
  9d01cfbd90824dde5e36d65c0c160ad5  libstdc++-v3/include/bits/uses_allocator_args.h
  cc888ad11b5889a85843f6fa7a0611f5  libstdc++-v3/include/bits/utility.h
*************** d1cf5a35c4ad3820cb023d8f84762cc7  libstd
*** 145425,145432 ****
  ddd4bdc2fa29f8f2aa3386cead9ebcb2  libstdc++-v3/include/bits/valarray_array.tcc
  16c6db3f5b1e7b3e37c3febbf4dc4e8c  libstdc++-v3/include/bits/valarray_before.h
  5a7dd3eca21d4650e654ea51da466c59  libstdc++-v3/include/bits/vector.tcc
! db60147851e09e1376cd4a0514c74409  libstdc++-v3/include/bits/version.def
! 71086b5f0aa4277dd3f0819ca2f8eab9  libstdc++-v3/include/bits/version.h
  f92789aa59d1ed5207e13c936667059d  libstdc++-v3/include/bits/version.tpl
  d99b1b69e5f87e5a631c8a881d053766  libstdc++-v3/include/c/cassert
  7f5b12607c4d7cbbcf705b672613447b  libstdc++-v3/include/c/cctype
--- 145572,145579 ----
  ddd4bdc2fa29f8f2aa3386cead9ebcb2  libstdc++-v3/include/bits/valarray_array.tcc
  16c6db3f5b1e7b3e37c3febbf4dc4e8c  libstdc++-v3/include/bits/valarray_before.h
  5a7dd3eca21d4650e654ea51da466c59  libstdc++-v3/include/bits/vector.tcc
! e9e2232855d4f5a7d1d0d4259a9872eb  libstdc++-v3/include/bits/version.def
! b8139bb074633a30613651f4600acedd  libstdc++-v3/include/bits/version.h
  f92789aa59d1ed5207e13c936667059d  libstdc++-v3/include/bits/version.tpl
  d99b1b69e5f87e5a631c8a881d053766  libstdc++-v3/include/c/cassert
  7f5b12607c4d7cbbcf705b672613447b  libstdc++-v3/include/c/cctype
*************** f626b898ff7fcaf45e839e0aaaf8b995  libstd
*** 145985,145991 ****
  841a79fbef033cbe8ca8c554dc66d5b9  libstdc++-v3/include/std/complex
  d2be6ad28181eee2feab5cac0a1cf141  libstdc++-v3/include/std/concepts
  6a29620511421350fff096067c3ca0da  libstdc++-v3/include/std/condition_variable
! 06b11a1e5cc0c972b2dd8f609c556cec  libstdc++-v3/include/std/contracts
  30926456f62b01c212f18e128fa8f543  libstdc++-v3/include/std/coroutine
  f945d16289e71c13744e7d9177de9ccc  libstdc++-v3/include/std/debugging
  7d736af3f0c3ef350561362e2e73c5a6  libstdc++-v3/include/std/deque
--- 146132,146138 ----
  841a79fbef033cbe8ca8c554dc66d5b9  libstdc++-v3/include/std/complex
  d2be6ad28181eee2feab5cac0a1cf141  libstdc++-v3/include/std/concepts
  6a29620511421350fff096067c3ca0da  libstdc++-v3/include/std/condition_variable
! eaba00749e45860b0ef18ff847c1a79d  libstdc++-v3/include/std/contracts
  30926456f62b01c212f18e128fa8f543  libstdc++-v3/include/std/coroutine
  f945d16289e71c13744e7d9177de9ccc  libstdc++-v3/include/std/debugging
  7d736af3f0c3ef350561362e2e73c5a6  libstdc++-v3/include/std/deque
*************** b33d9f7d5e6dae4596b350ebc5fd6b8f  libstd
*** 146011,146021 ****
  be169e901166777d5be3e557682b7af2  libstdc++-v3/include/std/limits
  2f3eb4865a149d33afc45095dfd51d15  libstdc++-v3/include/std/list
  979d756bd9149a01a697b92c921e75a0  libstdc++-v3/include/std/locale
! 9ab9c09bfe69b8870dbce7624525a83b  libstdc++-v3/include/std/map
  0ad5b6c8098cd5eba2a4160a431f554d  libstdc++-v3/include/std/mdspan
  78c1d1dab9dcd12a4cb99d5911d27568  libstdc++-v3/include/std/memory
  ea0d67f29f1a73f1ccdade0115646a1c  libstdc++-v3/include/std/memory_resource
! 6e451bc77cd2f67e1f0ab00b66f4f43f  libstdc++-v3/include/std/meta
  6042ceb95043702de02a8354f2507317  libstdc++-v3/include/std/mutex
  98a3e25011c5fb2383b3824b1c349d43  libstdc++-v3/include/std/numbers
  6a44514a47e24df75405dc1d397afc69  libstdc++-v3/include/std/numeric
--- 146158,146168 ----
  be169e901166777d5be3e557682b7af2  libstdc++-v3/include/std/limits
  2f3eb4865a149d33afc45095dfd51d15  libstdc++-v3/include/std/list
  979d756bd9149a01a697b92c921e75a0  libstdc++-v3/include/std/locale
! fbe9390cea7dfde51f9f111ed20c727d  libstdc++-v3/include/std/map
  0ad5b6c8098cd5eba2a4160a431f554d  libstdc++-v3/include/std/mdspan
  78c1d1dab9dcd12a4cb99d5911d27568  libstdc++-v3/include/std/memory
  ea0d67f29f1a73f1ccdade0115646a1c  libstdc++-v3/include/std/memory_resource
! 835ab4aae71198c529ee0ec064e78d8a  libstdc++-v3/include/std/meta
  6042ceb95043702de02a8354f2507317  libstdc++-v3/include/std/mutex
  98a3e25011c5fb2383b3824b1c349d43  libstdc++-v3/include/std/numbers
  6a44514a47e24df75405dc1d397afc69  libstdc++-v3/include/std/numeric
*************** ee576f89ae347224177df91fe86d905d  libstd
*** 146029,146037 ****
  a5c4f3df840ba7c3fbc9b7b9d5567ef2  libstdc++-v3/include/std/regex
  8e6ef0834acfc88dd03f5eae2990e41a  libstdc++-v3/include/std/scoped_allocator
  a53d359dd7618cc0d3f2447f5f60fff3  libstdc++-v3/include/std/semaphore
! 8c7c0f73062baca94fefcd7643a3f699  libstdc++-v3/include/std/set
  d9b30ac9f13a2d342a56ff319aca749e  libstdc++-v3/include/std/shared_mutex
! 587b98001ea4db3cac03e009eec4700d  libstdc++-v3/include/std/source_location
  b5619289ac9c606b19a5eaf5008fe7df  libstdc++-v3/include/std/span
  efdde6d8d883a91854d4ae616b627e53  libstdc++-v3/include/std/spanstream
  f00ff992c96a4a6422d964aad9315664  libstdc++-v3/include/std/sstream
--- 146176,146184 ----
  a5c4f3df840ba7c3fbc9b7b9d5567ef2  libstdc++-v3/include/std/regex
  8e6ef0834acfc88dd03f5eae2990e41a  libstdc++-v3/include/std/scoped_allocator
  a53d359dd7618cc0d3f2447f5f60fff3  libstdc++-v3/include/std/semaphore
! 68ab8a6e31a5c6d6520b39be081a44e3  libstdc++-v3/include/std/set
  d9b30ac9f13a2d342a56ff319aca749e  libstdc++-v3/include/std/shared_mutex
! b3171714703fcfc5d8fe69ffe22d9cc8  libstdc++-v3/include/std/source_location
  b5619289ac9c606b19a5eaf5008fe7df  libstdc++-v3/include/std/span
  efdde6d8d883a91854d4ae616b627e53  libstdc++-v3/include/std/spanstream
  f00ff992c96a4a6422d964aad9315664  libstdc++-v3/include/std/sstream
*************** f5a5ebc7b6133572f8f361cde93ec52f  libstd
*** 146050,146057 ****
  18066f87725dc5e14297a90730d89f30  libstdc++-v3/include/std/tuple
  e465f9065fdc0cd37abb571a528cdc3d  libstdc++-v3/include/std/type_traits
  66a7939bfcb3a6f5966552f3fb49a384  libstdc++-v3/include/std/typeindex
! aa868d9d23e147f967b0a5b8b7c9ac8a  libstdc++-v3/include/std/unordered_map
! 1b1014723055b617dd77c223092a09c8  libstdc++-v3/include/std/unordered_set
  7f92a82eac9afc94cc840349f66fb7c8  libstdc++-v3/include/std/utility
  bd07fa105994eb5d05ee66c7c9f10b7d  libstdc++-v3/include/std/valarray
  f4935a7b92bee0179976443347292535  libstdc++-v3/include/std/variant
--- 146197,146204 ----
  18066f87725dc5e14297a90730d89f30  libstdc++-v3/include/std/tuple
  e465f9065fdc0cd37abb571a528cdc3d  libstdc++-v3/include/std/type_traits
  66a7939bfcb3a6f5966552f3fb49a384  libstdc++-v3/include/std/typeindex
! c7f5e5532f97d423c06bfcf8f5e5346f  libstdc++-v3/include/std/unordered_map
! ee4e96cfeb6f951ca642e8d6c4c12ee7  libstdc++-v3/include/std/unordered_set
  7f92a82eac9afc94cc840349f66fb7c8  libstdc++-v3/include/std/utility
  bd07fa105994eb5d05ee66c7c9f10b7d  libstdc++-v3/include/std/valarray
  f4935a7b92bee0179976443347292535  libstdc++-v3/include/std/variant
*************** b543e8338c70f9c51d69b22f6e57859e  libstd
*** 146222,146228 ****
  1c37dd242e9d4dc84fddd039c7935dae  libstdc++-v3/python/hook.in
  68b329da9893e34099c7d8ad5cb9c940  libstdc++-v3/python/libstdcxx/__init__.py
  3759fb926a7736f99a99a4fa25b747c9  libstdc++-v3/python/libstdcxx/v6/__init__.py
! 99952b5b7788d3956820045703e8c2c4  libstdc++-v3/python/libstdcxx/v6/printers.py
  bbd304c6c3f96d550228583e74e330d3  libstdc++-v3/python/libstdcxx/v6/xmethods.py
  cdac7363b91e7d57b85f7b560f62f033  libstdc++-v3/scripts/check_compile
  87c30a72c1d3ec2a203894ac24d78005  libstdc++-v3/scripts/check_performance
--- 146369,146375 ----
  1c37dd242e9d4dc84fddd039c7935dae  libstdc++-v3/python/hook.in
  68b329da9893e34099c7d8ad5cb9c940  libstdc++-v3/python/libstdcxx/__init__.py
  3759fb926a7736f99a99a4fa25b747c9  libstdc++-v3/python/libstdcxx/v6/__init__.py
! de882facfd33a3a4d4ed924ea04cc30e  libstdc++-v3/python/libstdcxx/v6/printers.py
  bbd304c6c3f96d550228583e74e330d3  libstdc++-v3/python/libstdcxx/v6/xmethods.py
  cdac7363b91e7d57b85f7b560f62f033  libstdc++-v3/scripts/check_compile
  87c30a72c1d3ec2a203894ac24d78005  libstdc++-v3/scripts/check_performance
*************** c10fe70e48c9fa9c48a817108d290629  libstd
*** 146497,146505 ****
  bdd469026d3bc77ddbe9761819df1999  libstdc++-v3/testsuite/18_support/comparisons/object/93479.cc
  7b45b0d874b32588521fd2729eccc3cf  libstdc++-v3/testsuite/18_support/comparisons/object/lwg3530.cc
  c25441430dc4aeccff157f8fd0f6bfad  libstdc++-v3/testsuite/18_support/comparisons/type_order/1.cc
- 34d57c1d9a8be936f81aab528468a98b  libstdc++-v3/testsuite/18_support/contracts/includes.cc
  2a26a0a0e6856b66827cceaf8257e9b6  libstdc++-v3/testsuite/18_support/contracts/invoke_default_cvh.cc
  a48259cf2dc7fdce0dd213702cb38485  libstdc++-v3/testsuite/18_support/contracts/invoke_default_cvh2.cc
  d0a24cdda56dca4acc05b4d194c731e3  libstdc++-v3/testsuite/18_support/coroutines/95917.cc
  783af524f848615e0b0b76d03bcc9e9c  libstdc++-v3/testsuite/18_support/coroutines/hash.cc
  74c121e0875645b9d2f8ff1bed2655c1  libstdc++-v3/testsuite/18_support/coroutines/lwg3460.cc
--- 146644,146652 ----
  bdd469026d3bc77ddbe9761819df1999  libstdc++-v3/testsuite/18_support/comparisons/object/93479.cc
  7b45b0d874b32588521fd2729eccc3cf  libstdc++-v3/testsuite/18_support/comparisons/object/lwg3530.cc
  c25441430dc4aeccff157f8fd0f6bfad  libstdc++-v3/testsuite/18_support/comparisons/type_order/1.cc
  2a26a0a0e6856b66827cceaf8257e9b6  libstdc++-v3/testsuite/18_support/contracts/invoke_default_cvh.cc
  a48259cf2dc7fdce0dd213702cb38485  libstdc++-v3/testsuite/18_support/contracts/invoke_default_cvh2.cc
+ 88624522d42417c5a095e9854856eecb  libstdc++-v3/testsuite/18_support/contracts/srcloc.cc
  d0a24cdda56dca4acc05b4d194c731e3  libstdc++-v3/testsuite/18_support/coroutines/95917.cc
  783af524f848615e0b0b76d03bcc9e9c  libstdc++-v3/testsuite/18_support/coroutines/hash.cc
  74c121e0875645b9d2f8ff1bed2655c1  libstdc++-v3/testsuite/18_support/coroutines/lwg3460.cc
*************** dee24f2d89f9cfeda5a21b7232d9fccd  libstd
*** 150008,150013 ****
--- 150155,150161 ----
  898e854a7d9fcbcc2feb2bf6bec7d4ce  libstdc++-v3/testsuite/23_containers/map/modifiers/erase/dr130-linkage-check.cc
  00acf96e02908db04479269a066646d8  libstdc++-v3/testsuite/23_containers/map/modifiers/erase/end_neg.cc
  eb1848935192587eebbfdc1a32f69b82  libstdc++-v3/testsuite/23_containers/map/modifiers/extract.cc
+ fa970dcd0b8af7bf3761f9cc8585fcde  libstdc++-v3/testsuite/23_containers/map/modifiers/hetero/erase.cc
  9b3c828026424d5d1038ae3d7609f4c7  libstdc++-v3/testsuite/23_containers/map/modifiers/insert/1.cc
  2272bcb8df0f8105aa55b890bc92e701  libstdc++-v3/testsuite/23_containers/map/modifiers/insert/16813.cc
  ba2cdcb5b5eca69b7b8ab683a22f1e04  libstdc++-v3/testsuite/23_containers/map/modifiers/insert/2.cc
*************** c443b6c761521cb6ce34e95ca88bc291  libstd
*** 150142,150147 ****
--- 150290,150296 ----
  691774450bc3311619f388de2497b1c5  libstdc++-v3/testsuite/23_containers/multimap/modifiers/erase/abi_tag.cc
  e61a9683ddff14ba8c65152b9dd28c8e  libstdc++-v3/testsuite/23_containers/multimap/modifiers/erase/dr130-linkage-check.cc
  c7ae9c1cf76a403090fd65f16459413d  libstdc++-v3/testsuite/23_containers/multimap/modifiers/extract.cc
+ cfc6f17db25a12c8c106fdb82aca377c  libstdc++-v3/testsuite/23_containers/multimap/modifiers/hetero/erase.cc
  cba2fb5ccb140db11938b469499dd9ab  libstdc++-v3/testsuite/23_containers/multimap/modifiers/insert/1.cc
  0d6e30cf6317033ef2e7976dfca68f9c  libstdc++-v3/testsuite/23_containers/multimap/modifiers/insert/2.cc
  dd17999a6d77ce0ffd8a3b979c0eba4b  libstdc++-v3/testsuite/23_containers/multimap/modifiers/insert/22102.cc
*************** eb8318c1385174a39fea7ba8ac760cf3  libstd
*** 150223,150228 ****
--- 150372,150378 ----
  8c3da0caed551c3df75ab21ffa286776  libstdc++-v3/testsuite/23_containers/multiset/modifiers/erase/abi_tag.cc
  f7d19184d5eb60590e31a2ebb8b35558  libstdc++-v3/testsuite/23_containers/multiset/modifiers/erase/dr130-linkage-check.cc
  a2ba2119469540457b1de5afeb17427e  libstdc++-v3/testsuite/23_containers/multiset/modifiers/extract.cc
+ 5ebc5ef9dbb1bdd1561176a842f60705  libstdc++-v3/testsuite/23_containers/multiset/modifiers/hetero/erase.cc
  4d1248eb129018789f36125c2e67c8a1  libstdc++-v3/testsuite/23_containers/multiset/modifiers/insert/1.cc
  4f94e7ac1e8b8eee0d7a103d803bb309  libstdc++-v3/testsuite/23_containers/multiset/modifiers/insert/2.cc
  dda45230d8a15b54c6cacaba9bb0470a  libstdc++-v3/testsuite/23_containers/multiset/modifiers/insert/22102.cc
*************** c94cfb2ed1f4b7fe8f7ab5c07c4745eb  libstd
*** 150349,150354 ****
--- 150499,150505 ----
  60ca465bc3c6a84ec54abf4625ff6a91  libstdc++-v3/testsuite/23_containers/set/modifiers/erase/abi_tag.cc
  84eebae90487c486688f7475d7fd38e6  libstdc++-v3/testsuite/23_containers/set/modifiers/erase/dr130-linkage-check.cc
  687ddfea02b6a32f9bdc9eadee224ad7  libstdc++-v3/testsuite/23_containers/set/modifiers/extract.cc
+ 32adda000df6b1f75de5e23a71362f41  libstdc++-v3/testsuite/23_containers/set/modifiers/hetero/erase.cc
  43403bc296bfbcffaf9c1f499f7a9ae9  libstdc++-v3/testsuite/23_containers/set/modifiers/insert/1.cc
  776c7765eefe362400581db5981b8827  libstdc++-v3/testsuite/23_containers/set/modifiers/insert/2.cc
  55f68bf8edaeebdd286409ff2b4ae308  libstdc++-v3/testsuite/23_containers/set/modifiers/insert/3.cc
*************** bf96d509f3bb8a68f0b9483fc182b6b3  libstd
*** 150533,150538 ****
--- 150684,150690 ----
  1f26c0848f40a9383cb31c785af455e3  libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/92878_92947.cc
  60a22af06f9a1e7ae34fbf9396f6eb1c  libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/emplace.cc
  0f27bf6cc675b69645ffab40177c6138  libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/extract.cc
+ 160db1cfa3c5d86e97017b0f287d814b  libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/hetero/erase.cc
  626219b7a3efc1844d9ebfbc2c950095  libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/insert_or_assign.cc
  ad01e00eff3c7f80c31b6f90669ad326  libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/insert_range.cc
  0b43e5aebdcd6c568bbccb3f7301b63a  libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/merge.cc
*************** feb562b7d2d9e460578a47c159de61aa  libstd
*** 150649,150654 ****
--- 150801,150807 ----
  b62ff9c81cb7a5d385fec58522e77ed0  libstdc++-v3/testsuite/23_containers/unordered_multimap/modifiers/92878_92947.cc
  ed1023af0886cb8732ad2d3ea5aa938c  libstdc++-v3/testsuite/23_containers/unordered_multimap/modifiers/emplace.cc
  034792d8ac3479ee830894edb7c33e5f  libstdc++-v3/testsuite/23_containers/unordered_multimap/modifiers/extract.cc
+ 8f18eb4e240741bda6417bc25408406b  libstdc++-v3/testsuite/23_containers/unordered_multimap/modifiers/hetero/erase.cc
  73d0c8e42401f6cf69f1f0af0ff90e3a  libstdc++-v3/testsuite/23_containers/unordered_multimap/modifiers/insert_range.cc
  2621d79726565a771366536a36d830ad  libstdc++-v3/testsuite/23_containers/unordered_multimap/modifiers/merge.cc
  1857554ce78bdf0c0a5813031b42f41e  libstdc++-v3/testsuite/23_containers/unordered_multimap/modifiers/reserve.cc
*************** c899f5b982928adbe31126282ddb1599  libstd
*** 150751,150756 ****
--- 150904,150910 ----
  853d817847dac729bede8a216887e25b  libstdc++-v3/testsuite/23_containers/unordered_multiset/modifiers/92878_92947.cc
  96b28ee79dc5972c013bcd8ae40c587e  libstdc++-v3/testsuite/23_containers/unordered_multiset/modifiers/emplace.cc
  4366d356c83e4ed113a7195c6b96a46b  libstdc++-v3/testsuite/23_containers/unordered_multiset/modifiers/extract.cc
+ be50715ad11bd926a96072389178a81f  libstdc++-v3/testsuite/23_containers/unordered_multiset/modifiers/hetero/erase.cc
  c0e606fdb83ff823f737ea8ed1a87a92  libstdc++-v3/testsuite/23_containers/unordered_multiset/modifiers/insert_range.cc
  6bfddae70b47bed9c4d395bdfc0a4247  libstdc++-v3/testsuite/23_containers/unordered_multiset/modifiers/merge.cc
  20204aaa16168b1dadf98180f21f1678  libstdc++-v3/testsuite/23_containers/unordered_multiset/modifiers/reserve.cc
*************** dd25f6c395534aed6d7360bf474438bd  libstd
*** 150877,150882 ****
--- 151031,151037 ----
  9b2b2bcb3688dfb5a97e86825f8c7139  libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/92878_92947.cc
  bb5e26a4cf39bfbd43ea6a4290218495  libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/emplace.cc
  7b3ab6fe39cf60211bfd1c7d0f373a55  libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/extract.cc
+ 3d66fb2dbd65a3afc5ebf6e47c05255f  libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/hetero/erase.cc
  c79e310a57e8ab117853a33fda2f3806  libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/insert.cc
  0d6ba2efbfbcb910de8b5c5a7482640b  libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/insert_range.cc
  3e58cc18025c358982881a419b57461f  libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/merge.cc
*************** ff8186ed755a146b3f6e6f31e2832abd  libstd
*** 153920,153926 ****
  9a4cddcf7e246c4099b7d502a2a8efb0  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/extended/string_range_01_03.cc
  107cdfceea0386b72d540f51e476f588  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/extended/string_range_02_03.cc
  ead32a639132135e4ffd8de7ecb756d3  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/extended/wstring_locale.cc
! db02735ade67a1d60149a05b457a3349  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/multiline.cc
  2b65ead41cca6c486af5b12cb9181709  libstdc++-v3/testsuite/28_regex/algorithms/regex_replace/char/103664.cc
  2287f1b0c155a03f47a46cd61c619cbf  libstdc++-v3/testsuite/28_regex/algorithms/regex_replace/char/51711.cc
  aa6f2e27dffbd6aa41612e0405ac209a  libstdc++-v3/testsuite/28_regex/algorithms/regex_replace/char/basic_replace.cc
--- 154075,154081 ----
  9a4cddcf7e246c4099b7d502a2a8efb0  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/extended/string_range_01_03.cc
  107cdfceea0386b72d540f51e476f588  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/extended/string_range_02_03.cc
  ead32a639132135e4ffd8de7ecb756d3  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/extended/wstring_locale.cc
! 8beaa615f92e0d44a092f3447fad68e7  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/multiline.cc
  2b65ead41cca6c486af5b12cb9181709  libstdc++-v3/testsuite/28_regex/algorithms/regex_replace/char/103664.cc
  2287f1b0c155a03f47a46cd61c619cbf  libstdc++-v3/testsuite/28_regex/algorithms/regex_replace/char/51711.cc
  aa6f2e27dffbd6aa41612e0405ac209a  libstdc++-v3/testsuite/28_regex/algorithms/regex_replace/char/basic_replace.cc
*************** f9d1843758692fe5f3c4c8efe224a7a4  libstd
*** 154033,154039 ****
  f943d4bf2aed6ea9c7b6b2f70190ae22  libstdc++-v3/testsuite/28_regex/sub_match/compare_c++20.cc
  66d50b1720cf2bde62c1e14ca9a96a8f  libstdc++-v3/testsuite/28_regex/sub_match/embedded_zeros_cmp.cc
  016b68348314c7e54774c1927b0a4963  libstdc++-v3/testsuite/28_regex/sub_match/length.cc
! 491895502310c40d3c4fac8105f3662c  libstdc++-v3/testsuite/28_regex/sub_match/lwg3204.cc
  240fa498a5f067f9ed7020c9f6baa0c4  libstdc++-v3/testsuite/28_regex/sub_match/typedefs.cc
  0f598b7f8373b9c8a7880da1fa53f9d9  libstdc++-v3/testsuite/28_regex/traits/char/ctor.cc
  a7abcd80901c6251df12c79fc0fb0fee  libstdc++-v3/testsuite/28_regex/traits/char/icase.cc
--- 154188,154194 ----
  f943d4bf2aed6ea9c7b6b2f70190ae22  libstdc++-v3/testsuite/28_regex/sub_match/compare_c++20.cc
  66d50b1720cf2bde62c1e14ca9a96a8f  libstdc++-v3/testsuite/28_regex/sub_match/embedded_zeros_cmp.cc
  016b68348314c7e54774c1927b0a4963  libstdc++-v3/testsuite/28_regex/sub_match/length.cc
! b34e1f836c2e9c15a0bb611fed5e31a6  libstdc++-v3/testsuite/28_regex/sub_match/lwg3204.cc
  240fa498a5f067f9ed7020c9f6baa0c4  libstdc++-v3/testsuite/28_regex/sub_match/typedefs.cc
  0f598b7f8373b9c8a7880da1fa53f9d9  libstdc++-v3/testsuite/28_regex/traits/char/ctor.cc
  a7abcd80901c6251df12c79fc0fb0fee  libstdc++-v3/testsuite/28_regex/traits/char/icase.cc
*************** c66303f8ebf7dc28e865bdb5f8571d02  libstd
*** 154563,154570 ****
  90821f98ebb49cc12bee588580c22951  libstdc++-v3/testsuite/30_threads/unique_lock/modifiers/1.cc
  7b46acab6e702713ff51f2460d9b3b0c  libstdc++-v3/testsuite/30_threads/unique_lock/requirements/explicit_instantiation.cc
  d8b5c135838490a5dcd51a698dc08200  libstdc++-v3/testsuite/30_threads/unique_lock/requirements/typedefs.cc
! 207dfc59cd69de846abbc5d50778119b  libstdc++-v3/testsuite/Makefile.am
! a552305abaedd1f9743996828eb1e761  libstdc++-v3/testsuite/Makefile.in
  1d22b44f3b4aa9c7d62458767123c3ba  libstdc++-v3/testsuite/abi/30586.cc
  27472a7da5d420df6eceb879beb16116  libstdc++-v3/testsuite/abi/aligned_buffers.cc
  84dd54b62d5865cc47a78cc88655c9e7  libstdc++-v3/testsuite/abi/cxx_runtime_only_linkage.cc
--- 154718,154725 ----
  90821f98ebb49cc12bee588580c22951  libstdc++-v3/testsuite/30_threads/unique_lock/modifiers/1.cc
  7b46acab6e702713ff51f2460d9b3b0c  libstdc++-v3/testsuite/30_threads/unique_lock/requirements/explicit_instantiation.cc
  d8b5c135838490a5dcd51a698dc08200  libstdc++-v3/testsuite/30_threads/unique_lock/requirements/typedefs.cc
! 35ca934eefc5afeedad83cdc8194685c  libstdc++-v3/testsuite/Makefile.am
! 3f358f62ec6c0c939c6b51794f816c1f  libstdc++-v3/testsuite/Makefile.in
  1d22b44f3b4aa9c7d62458767123c3ba  libstdc++-v3/testsuite/abi/30586.cc
  27472a7da5d420df6eceb879beb16116  libstdc++-v3/testsuite/abi/aligned_buffers.cc
  84dd54b62d5865cc47a78cc88655c9e7  libstdc++-v3/testsuite/abi/cxx_runtime_only_linkage.cc
*************** f1cd73733d4194e548c0fee71129753c  libstd
*** 155520,155526 ****
  8557164e0a6fc6f5803771c54b07ed92  libstdc++-v3/testsuite/libstdc++-prettyprinters/80276.cc
  49e551e8c18348803255c1cb966ef782  libstdc++-v3/testsuite/libstdc++-prettyprinters/91997.cc
  d7c372bf46cc2da8c3399d8fdc2381dc  libstdc++-v3/testsuite/libstdc++-prettyprinters/chrono.cc
! aef78c245dcb87270918866fd5faee3d  libstdc++-v3/testsuite/libstdc++-prettyprinters/compat.cc
  094af99382da8721f6ab7d18d917c0f8  libstdc++-v3/testsuite/libstdc++-prettyprinters/cxx11.cc
  cbe4966842e55d9b3662341172b9ff66  libstdc++-v3/testsuite/libstdc++-prettyprinters/cxx17.cc
  7ab6e4c196222351246edfdf02bd79b8  libstdc++-v3/testsuite/libstdc++-prettyprinters/cxx20.cc
--- 155675,155681 ----
  8557164e0a6fc6f5803771c54b07ed92  libstdc++-v3/testsuite/libstdc++-prettyprinters/80276.cc
  49e551e8c18348803255c1cb966ef782  libstdc++-v3/testsuite/libstdc++-prettyprinters/91997.cc
  d7c372bf46cc2da8c3399d8fdc2381dc  libstdc++-v3/testsuite/libstdc++-prettyprinters/chrono.cc
! 10e18429ad520393bae5c1714a94dbc6  libstdc++-v3/testsuite/libstdc++-prettyprinters/compat.cc
  094af99382da8721f6ab7d18d917c0f8  libstdc++-v3/testsuite/libstdc++-prettyprinters/cxx11.cc
  cbe4966842e55d9b3662341172b9ff66  libstdc++-v3/testsuite/libstdc++-prettyprinters/cxx17.cc
  7ab6e4c196222351246edfdf02bd79b8  libstdc++-v3/testsuite/libstdc++-prettyprinters/cxx20.cc
diff -Nrcpad gcc-16-20260201/Makefile.in gcc-16-20260208/Makefile.in
*** gcc-16-20260201/Makefile.in	Sun Feb  1 22:32:06 2026
--- gcc-16-20260208/Makefile.in	Sun Feb  8 22:32:05 2026
*************** STAGE1_CONFIGURE_FLAGS = $(STAGE1_CHECKI
*** 633,639 ****
--- 633,665 ----
  	  --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" \
  	  --disable-build-format-warnings
  
+ @if target-libstdc++-v3-bootstrap
+ STAGE1_CONFIGURE_FLAGS += --disable-libstdcxx-pch
+ STAGE2_CONFIGURE_FLAGS += --disable-libstdcxx-pch
+ STAGEprofile_CONFIGURE_FLAGS += --disable-libstdcxx-pch
+ @endif target-libstdc++-v3-bootstrap
+ 
  @if target-libphobos-bootstrap
+ # Defaults for each stage if we're bootstrapping D.
+ 
+ STAGE1_GDCFLAGS = $(GDCFLAGS)
+ 
+ STAGE2_GDCFLAGS = $(GDCFLAGS)
+ 
+ STAGE3_GDCFLAGS = $(GDCFLAGS)
+ 
+ STAGE4_GDCFLAGS = $(GDCFLAGS)
+ 
+ STAGEprofile_GDCFLAGS = $(GDCFLAGS)
+ 
+ STAGEtrain_GDCFLAGS = $(GDCFLAGS)
+ 
+ STAGEfeedback_GDCFLAGS = $(GDCFLAGS)
+ 
+ STAGEautoprofile_GDCFLAGS = $(GDCFLAGS)
+ 
+ STAGEautofeedback_GDCFLAGS = $(GDCFLAGS)
+ 
  STAGE1_CONFIGURE_FLAGS += --with-libphobos-druntime-only
  STAGE2_CONFIGURE_FLAGS += --with-libphobos-druntime-only
  @endif target-libphobos-bootstrap
*************** STAGE2_CFLAGS += -fno-checking
*** 647,652 ****
--- 673,682 ----
  STAGE2_TFLAGS += -fno-checking
  STAGE3_CFLAGS += -fchecking=1
  STAGE3_TFLAGS += -fchecking=1
+ @if target-libphobos-bootstrap
+ STAGE2_GDCFLAGS += -fno-checking
+ STAGE3_GDCFLAGS += -fchecking=1
+ @endif target-libphobos-bootstrap
  
  STAGEprofile_CFLAGS = $(STAGE2_CFLAGS) -fprofile-generate
  STAGEprofile_TFLAGS = $(STAGE2_TFLAGS)
*************** BASE_FLAGS_TO_PASS = \
*** 945,982 ****
--- 975,1021 ----
  	"LEAN=$(LEAN)" \
  	"STAGE1_CFLAGS=$(STAGE1_CFLAGS)" \
  	"STAGE1_CXXFLAGS=$(STAGE1_CXXFLAGS)" \
+ 	"STAGE1_GDCFLAGS=$(STAGE1_GDCFLAGS)" \
  	"STAGE1_GENERATOR_CFLAGS=$(STAGE1_GENERATOR_CFLAGS)" \
  	"STAGE1_TFLAGS=$(STAGE1_TFLAGS)" \
  	"STAGE2_CFLAGS=$(STAGE2_CFLAGS)" \
  	"STAGE2_CXXFLAGS=$(STAGE2_CXXFLAGS)" \
+ 	"STAGE2_GDCFLAGS=$(STAGE2_GDCFLAGS)" \
  	"STAGE2_GENERATOR_CFLAGS=$(STAGE2_GENERATOR_CFLAGS)" \
  	"STAGE2_TFLAGS=$(STAGE2_TFLAGS)" \
  	"STAGE3_CFLAGS=$(STAGE3_CFLAGS)" \
  	"STAGE3_CXXFLAGS=$(STAGE3_CXXFLAGS)" \
+ 	"STAGE3_GDCFLAGS=$(STAGE3_GDCFLAGS)" \
  	"STAGE3_GENERATOR_CFLAGS=$(STAGE3_GENERATOR_CFLAGS)" \
  	"STAGE3_TFLAGS=$(STAGE3_TFLAGS)" \
  	"STAGE4_CFLAGS=$(STAGE4_CFLAGS)" \
  	"STAGE4_CXXFLAGS=$(STAGE4_CXXFLAGS)" \
+ 	"STAGE4_GDCFLAGS=$(STAGE4_GDCFLAGS)" \
  	"STAGE4_GENERATOR_CFLAGS=$(STAGE4_GENERATOR_CFLAGS)" \
  	"STAGE4_TFLAGS=$(STAGE4_TFLAGS)" \
  	"STAGEprofile_CFLAGS=$(STAGEprofile_CFLAGS)" \
  	"STAGEprofile_CXXFLAGS=$(STAGEprofile_CXXFLAGS)" \
+ 	"STAGEprofile_GDCFLAGS=$(STAGEprofile_GDCFLAGS)" \
  	"STAGEprofile_GENERATOR_CFLAGS=$(STAGEprofile_GENERATOR_CFLAGS)" \
  	"STAGEprofile_TFLAGS=$(STAGEprofile_TFLAGS)" \
  	"STAGEtrain_CFLAGS=$(STAGEtrain_CFLAGS)" \
  	"STAGEtrain_CXXFLAGS=$(STAGEtrain_CXXFLAGS)" \
+ 	"STAGEtrain_GDCFLAGS=$(STAGEtrain_GDCFLAGS)" \
  	"STAGEtrain_GENERATOR_CFLAGS=$(STAGEtrain_GENERATOR_CFLAGS)" \
  	"STAGEtrain_TFLAGS=$(STAGEtrain_TFLAGS)" \
  	"STAGEfeedback_CFLAGS=$(STAGEfeedback_CFLAGS)" \
  	"STAGEfeedback_CXXFLAGS=$(STAGEfeedback_CXXFLAGS)" \
+ 	"STAGEfeedback_GDCFLAGS=$(STAGEfeedback_GDCFLAGS)" \
  	"STAGEfeedback_GENERATOR_CFLAGS=$(STAGEfeedback_GENERATOR_CFLAGS)" \
  	"STAGEfeedback_TFLAGS=$(STAGEfeedback_TFLAGS)" \
  	"STAGEautoprofile_CFLAGS=$(STAGEautoprofile_CFLAGS)" \
  	"STAGEautoprofile_CXXFLAGS=$(STAGEautoprofile_CXXFLAGS)" \
+ 	"STAGEautoprofile_GDCFLAGS=$(STAGEautoprofile_GDCFLAGS)" \
  	"STAGEautoprofile_GENERATOR_CFLAGS=$(STAGEautoprofile_GENERATOR_CFLAGS)" \
  	"STAGEautoprofile_TFLAGS=$(STAGEautoprofile_TFLAGS)" \
  	"STAGEautofeedback_CFLAGS=$(STAGEautofeedback_CFLAGS)" \
  	"STAGEautofeedback_CXXFLAGS=$(STAGEautofeedback_CXXFLAGS)" \
+ 	"STAGEautofeedback_GDCFLAGS=$(STAGEautofeedback_GDCFLAGS)" \
  	"STAGEautofeedback_GENERATOR_CFLAGS=$(STAGEautofeedback_GENERATOR_CFLAGS)" \
  	"STAGEautofeedback_TFLAGS=$(STAGEautofeedback_TFLAGS)" \
  	$(CXX_FOR_TARGET_FLAG_TO_PASS) \
*************** configure-stage1-gcc:
*** 12180,12185 ****
--- 12219,12225 ----
  	$(HOST_EXPORTS) \
  	CFLAGS="$(STAGE1_CFLAGS)"; export CFLAGS; \
  	CXXFLAGS="$(STAGE1_CXXFLAGS)"; export CXXFLAGS; \
+ 	GDCFLAGS="$(STAGE1_GDCFLAGS)"; export GDCFLAGS; \
  	LIBCFLAGS="$(LIBCFLAGS)"; export LIBCFLAGS;  \
  	echo Configuring stage 1 in $(HOST_SUBDIR)/gcc; \
  	$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gcc; \
*************** configure-stage2-gcc:
*** 12214,12219 ****
--- 12254,12260 ----
  	$(POSTSTAGE1_HOST_EXPORTS) \
  	CFLAGS="$(STAGE2_CFLAGS)"; export CFLAGS; \
  	CXXFLAGS="$(STAGE2_CXXFLAGS)"; export CXXFLAGS; \
+ 	GDCFLAGS="$(STAGE2_GDCFLAGS)"; export GDCFLAGS; \
  	LIBCFLAGS="$(STAGE2_CFLAGS)"; export LIBCFLAGS;  \
  	echo Configuring stage 2 in $(HOST_SUBDIR)/gcc; \
  	$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gcc; \
*************** configure-stage3-gcc:
*** 12248,12253 ****
--- 12289,12295 ----
  	$(POSTSTAGE1_HOST_EXPORTS) \
  	CFLAGS="$(STAGE3_CFLAGS)"; export CFLAGS; \
  	CXXFLAGS="$(STAGE3_CXXFLAGS)"; export CXXFLAGS; \
+ 	GDCFLAGS="$(STAGE3_GDCFLAGS)"; export GDCFLAGS; \
  	LIBCFLAGS="$(STAGE3_CFLAGS)"; export LIBCFLAGS;  \
  	echo Configuring stage 3 in $(HOST_SUBDIR)/gcc; \
  	$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gcc; \
*************** configure-stage4-gcc:
*** 12282,12287 ****
--- 12324,12330 ----
  	$(POSTSTAGE1_HOST_EXPORTS) \
  	CFLAGS="$(STAGE4_CFLAGS)"; export CFLAGS; \
  	CXXFLAGS="$(STAGE4_CXXFLAGS)"; export CXXFLAGS; \
+ 	GDCFLAGS="$(STAGE4_GDCFLAGS)"; export GDCFLAGS; \
  	LIBCFLAGS="$(STAGE4_CFLAGS)"; export LIBCFLAGS;  \
  	echo Configuring stage 4 in $(HOST_SUBDIR)/gcc; \
  	$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gcc; \
*************** configure-stageprofile-gcc:
*** 12316,12321 ****
--- 12359,12365 ----
  	$(POSTSTAGE1_HOST_EXPORTS) \
  	CFLAGS="$(STAGEprofile_CFLAGS)"; export CFLAGS; \
  	CXXFLAGS="$(STAGEprofile_CXXFLAGS)"; export CXXFLAGS; \
+ 	GDCFLAGS="$(STAGEprofile_GDCFLAGS)"; export GDCFLAGS; \
  	LIBCFLAGS="$(STAGEprofile_CFLAGS)"; export LIBCFLAGS;  \
  	echo Configuring stage profile in $(HOST_SUBDIR)/gcc; \
  	$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gcc; \
*************** configure-stagetrain-gcc:
*** 12350,12355 ****
--- 12394,12400 ----
  	$(POSTSTAGE1_HOST_EXPORTS) \
  	CFLAGS="$(STAGEtrain_CFLAGS)"; export CFLAGS; \
  	CXXFLAGS="$(STAGEtrain_CXXFLAGS)"; export CXXFLAGS; \
+ 	GDCFLAGS="$(STAGEtrain_GDCFLAGS)"; export GDCFLAGS; \
  	LIBCFLAGS="$(STAGEtrain_CFLAGS)"; export LIBCFLAGS;  \
  	echo Configuring stage train in $(HOST_SUBDIR)/gcc; \
  	$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gcc; \
*************** configure-stagefeedback-gcc:
*** 12384,12389 ****
--- 12429,12435 ----
  	$(POSTSTAGE1_HOST_EXPORTS) \
  	CFLAGS="$(STAGEfeedback_CFLAGS)"; export CFLAGS; \
  	CXXFLAGS="$(STAGEfeedback_CXXFLAGS)"; export CXXFLAGS; \
+ 	GDCFLAGS="$(STAGEfeedback_GDCFLAGS)"; export GDCFLAGS; \
  	LIBCFLAGS="$(STAGEfeedback_CFLAGS)"; export LIBCFLAGS;  \
  	echo Configuring stage feedback in $(HOST_SUBDIR)/gcc; \
  	$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gcc; \
*************** configure-stageautoprofile-gcc:
*** 12418,12423 ****
--- 12464,12470 ----
  	$(POSTSTAGE1_HOST_EXPORTS) \
  	CFLAGS="$(STAGEautoprofile_CFLAGS)"; export CFLAGS; \
  	CXXFLAGS="$(STAGEautoprofile_CXXFLAGS)"; export CXXFLAGS; \
+ 	GDCFLAGS="$(STAGEautoprofile_GDCFLAGS)"; export GDCFLAGS; \
  	LIBCFLAGS="$(STAGEautoprofile_CFLAGS)"; export LIBCFLAGS;  \
  	echo Configuring stage autoprofile in $(HOST_SUBDIR)/gcc; \
  	$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gcc; \
*************** configure-stageautofeedback-gcc:
*** 12452,12457 ****
--- 12499,12505 ----
  	$(POSTSTAGE1_HOST_EXPORTS) \
  	CFLAGS="$(STAGEautofeedback_CFLAGS)"; export CFLAGS; \
  	CXXFLAGS="$(STAGEautofeedback_CXXFLAGS)"; export CXXFLAGS; \
+ 	GDCFLAGS="$(STAGEautofeedback_GDCFLAGS)"; export GDCFLAGS; \
  	LIBCFLAGS="$(STAGEautofeedback_CFLAGS)"; export LIBCFLAGS;  \
  	echo Configuring stage autofeedback in $(HOST_SUBDIR)/gcc; \
  	$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gcc; \
*************** all-stage1-gcc: configure-stage1-gcc
*** 12514,12519 ****
--- 12562,12568 ----
  		CFLAGS="$(STAGE1_CFLAGS)" \
  		GENERATOR_CFLAGS="$(STAGE1_GENERATOR_CFLAGS)" \
  		CXXFLAGS="$(STAGE1_CXXFLAGS)" \
+ 		GDCFLAGS="$(STAGE1_GDCFLAGS)" \
  		LIBCFLAGS="$(LIBCFLAGS)" \
  		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
  		CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
*************** all-stage2-gcc: configure-stage2-gcc
*** 12559,12564 ****
--- 12608,12614 ----
  		CFLAGS="$(STAGE2_CFLAGS)" \
  		GENERATOR_CFLAGS="$(STAGE2_GENERATOR_CFLAGS)" \
  		CXXFLAGS="$(STAGE2_CXXFLAGS)" \
+ 		GDCFLAGS="$(STAGE2_GDCFLAGS)" \
  		LIBCFLAGS="$(STAGE2_CFLAGS)" \
  		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
  		CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
*************** all-stage3-gcc: configure-stage3-gcc
*** 12602,12607 ****
--- 12652,12658 ----
  		CFLAGS="$(STAGE3_CFLAGS)" \
  		GENERATOR_CFLAGS="$(STAGE3_GENERATOR_CFLAGS)" \
  		CXXFLAGS="$(STAGE3_CXXFLAGS)" \
+ 		GDCFLAGS="$(STAGE3_GDCFLAGS)" \
  		LIBCFLAGS="$(STAGE3_CFLAGS)" \
  		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
  		CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
*************** all-stage4-gcc: configure-stage4-gcc
*** 12645,12650 ****
--- 12696,12702 ----
  		CFLAGS="$(STAGE4_CFLAGS)" \
  		GENERATOR_CFLAGS="$(STAGE4_GENERATOR_CFLAGS)" \
  		CXXFLAGS="$(STAGE4_CXXFLAGS)" \
+ 		GDCFLAGS="$(STAGE4_GDCFLAGS)" \
  		LIBCFLAGS="$(STAGE4_CFLAGS)" \
  		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
  		CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
*************** all-stageprofile-gcc: configure-stagepro
*** 12688,12693 ****
--- 12740,12746 ----
  		CFLAGS="$(STAGEprofile_CFLAGS)" \
  		GENERATOR_CFLAGS="$(STAGEprofile_GENERATOR_CFLAGS)" \
  		CXXFLAGS="$(STAGEprofile_CXXFLAGS)" \
+ 		GDCFLAGS="$(STAGEprofile_GDCFLAGS)" \
  		LIBCFLAGS="$(STAGEprofile_CFLAGS)" \
  		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
  		CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
*************** all-stagetrain-gcc: configure-stagetrain
*** 12731,12736 ****
--- 12784,12790 ----
  		CFLAGS="$(STAGEtrain_CFLAGS)" \
  		GENERATOR_CFLAGS="$(STAGEtrain_GENERATOR_CFLAGS)" \
  		CXXFLAGS="$(STAGEtrain_CXXFLAGS)" \
+ 		GDCFLAGS="$(STAGEtrain_GDCFLAGS)" \
  		LIBCFLAGS="$(STAGEtrain_CFLAGS)" \
  		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
  		CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
*************** all-stagefeedback-gcc: configure-stagefe
*** 12774,12779 ****
--- 12828,12834 ----
  		CFLAGS="$(STAGEfeedback_CFLAGS)" \
  		GENERATOR_CFLAGS="$(STAGEfeedback_GENERATOR_CFLAGS)" \
  		CXXFLAGS="$(STAGEfeedback_CXXFLAGS)" \
+ 		GDCFLAGS="$(STAGEfeedback_GDCFLAGS)" \
  		LIBCFLAGS="$(STAGEfeedback_CFLAGS)" \
  		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
  		CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
*************** all-stageautoprofile-gcc: configure-stag
*** 12817,12822 ****
--- 12872,12878 ----
  		CFLAGS="$(STAGEautoprofile_CFLAGS)" \
  		GENERATOR_CFLAGS="$(STAGEautoprofile_GENERATOR_CFLAGS)" \
  		CXXFLAGS="$(STAGEautoprofile_CXXFLAGS)" \
+ 		GDCFLAGS="$(STAGEautoprofile_GDCFLAGS)" \
  		LIBCFLAGS="$(STAGEautoprofile_CFLAGS)" \
  		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
  		CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
*************** all-stageautofeedback-gcc: configure-sta
*** 12860,12865 ****
--- 12916,12922 ----
  		CFLAGS="$(STAGEautofeedback_CFLAGS)" \
  		GENERATOR_CFLAGS="$(STAGEautofeedback_GENERATOR_CFLAGS)" \
  		CXXFLAGS="$(STAGEautofeedback_CXXFLAGS)" \
+ 		GDCFLAGS="$(STAGEautofeedback_GDCFLAGS)" \
  		LIBCFLAGS="$(STAGEautofeedback_CFLAGS)" \
  		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
  		CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
diff -Nrcpad gcc-16-20260201/Makefile.tpl gcc-16-20260208/Makefile.tpl
*** gcc-16-20260201/Makefile.tpl	Sun Feb  1 22:32:06 2026
--- gcc-16-20260208/Makefile.tpl	Sun Feb  8 22:32:05 2026
*************** STAGE1_CONFIGURE_FLAGS = $(STAGE1_CHECKI
*** 556,562 ****
--- 556,572 ----
  	  --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" \
  	  --disable-build-format-warnings
  
+ @if target-libstdc++-v3-bootstrap
+ STAGE1_CONFIGURE_FLAGS += --disable-libstdcxx-pch
+ STAGE2_CONFIGURE_FLAGS += --disable-libstdcxx-pch
+ STAGEprofile_CONFIGURE_FLAGS += --disable-libstdcxx-pch
+ @endif target-libstdc++-v3-bootstrap
+ 
  @if target-libphobos-bootstrap
+ # Defaults for each stage if we're bootstrapping D.
+ [+ FOR bootstrap-stage +]
+ STAGE[+id+]_GDCFLAGS = $(GDCFLAGS)
+ [+ ENDFOR bootstrap-stage +]
  STAGE1_CONFIGURE_FLAGS += --with-libphobos-druntime-only
  STAGE2_CONFIGURE_FLAGS += --with-libphobos-druntime-only
  @endif target-libphobos-bootstrap
*************** STAGE2_CFLAGS += -fno-checking
*** 570,575 ****
--- 580,589 ----
  STAGE2_TFLAGS += -fno-checking
  STAGE3_CFLAGS += -fchecking=1
  STAGE3_TFLAGS += -fchecking=1
+ @if target-libphobos-bootstrap
+ STAGE2_GDCFLAGS += -fno-checking
+ STAGE3_GDCFLAGS += -fchecking=1
+ @endif target-libphobos-bootstrap
  
  STAGEprofile_CFLAGS = $(STAGE2_CFLAGS) -fprofile-generate
  STAGEprofile_TFLAGS = $(STAGE2_TFLAGS)
*************** BASE_FLAGS_TO_PASS =[+ FOR flags_to_pass
*** 726,731 ****
--- 740,746 ----
  	"[+flag+]=$([+flag+])"[+ ENDIF optional+][+ ENDFOR flags_to_pass +][+ FOR bootstrap-stage +] \
  	"STAGE[+id+]_CFLAGS=$(STAGE[+id+]_CFLAGS)" \
  	"STAGE[+id+]_CXXFLAGS=$(STAGE[+id+]_CXXFLAGS)" \
+ 	"STAGE[+id+]_GDCFLAGS=$(STAGE[+id+]_GDCFLAGS)" \
  	"STAGE[+id+]_GENERATOR_CFLAGS=$(STAGE[+id+]_GENERATOR_CFLAGS)" \
  	"STAGE[+id+]_TFLAGS=$(STAGE[+id+]_TFLAGS)"[+ ENDFOR bootstrap-stage +] \
  	$(CXX_FOR_TARGET_FLAG_TO_PASS) \
*************** configure-stage[+id+]-[+prefix+][+module
*** 1257,1263 ****
  	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
  	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;[+ ELSE prefix +] \
  	CFLAGS="$(STAGE[+id+]_CFLAGS)"; export CFLAGS; \
! 	CXXFLAGS="$(STAGE[+id+]_CXXFLAGS)"; export CXXFLAGS;[+ IF prev +] \
  	LIBCFLAGS="$(STAGE[+id+]_CFLAGS)"[+ ELSE prev +] \
  	LIBCFLAGS="$(LIBCFLAGS)"[+ ENDIF prev +]; export LIBCFLAGS;[+
    ENDIF prefix +] [+extra_exports+] \
--- 1272,1279 ----
  	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
  	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;[+ ELSE prefix +] \
  	CFLAGS="$(STAGE[+id+]_CFLAGS)"; export CFLAGS; \
! 	CXXFLAGS="$(STAGE[+id+]_CXXFLAGS)"; export CXXFLAGS;[+ IF (= (get "module") "gcc") +] \
! 	GDCFLAGS="$(STAGE[+id+]_GDCFLAGS)"; export GDCFLAGS;[+ ENDIF +][+ IF prev +] \
  	LIBCFLAGS="$(STAGE[+id+]_CFLAGS)"[+ ELSE prev +] \
  	LIBCFLAGS="$(LIBCFLAGS)"[+ ENDIF prev +]; export LIBCFLAGS;[+
    ENDIF prefix +] [+extra_exports+] \
*************** all-stage[+id+]-[+prefix+][+module+]: co
*** 1327,1333 ****
  		LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"[+ ELSE prefix +] \
  		CFLAGS="$(STAGE[+id+]_CFLAGS)" \
  		GENERATOR_CFLAGS="$(STAGE[+id+]_GENERATOR_CFLAGS)" \
! 		CXXFLAGS="$(STAGE[+id+]_CXXFLAGS)"[+ IF prev +] \
  		LIBCFLAGS="$(STAGE[+id+]_CFLAGS)"[+ ELSE prev +] \
  		LIBCFLAGS="$(LIBCFLAGS)"[+ ENDIF prev +][+ ENDIF prefix +] \
  		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
--- 1343,1350 ----
  		LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"[+ ELSE prefix +] \
  		CFLAGS="$(STAGE[+id+]_CFLAGS)" \
  		GENERATOR_CFLAGS="$(STAGE[+id+]_GENERATOR_CFLAGS)" \
! 		CXXFLAGS="$(STAGE[+id+]_CXXFLAGS)"[+ IF (= (get "module") "gcc") +] \
! 		GDCFLAGS="$(STAGE[+id+]_GDCFLAGS)"[+ ENDIF +][+ IF prev +] \
  		LIBCFLAGS="$(STAGE[+id+]_CFLAGS)"[+ ELSE prev +] \
  		LIBCFLAGS="$(LIBCFLAGS)"[+ ENDIF prev +][+ ENDIF prefix +] \
  		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
diff -Nrcpad gcc-16-20260201/config/ChangeLog gcc-16-20260208/config/ChangeLog
*** gcc-16-20260201/config/ChangeLog	Sun Feb  1 22:32:06 2026
--- gcc-16-20260208/config/ChangeLog	Sun Feb  8 22:32:05 2026
***************
*** 1,3 ****
--- 1,9 ----
+ 2026-02-04  Prachi Godbole  <pgodbole@nvidia.com>
+ 
+ 	* bootstrap-lto-locality.mk (STAGEprofile_CFLAGS): Remove
+ 	-fipa-reorder-for-locality.
+ 	(STAGEtrain_CFLAGS): Ditto.
+ 
  2026-01-20  Prachi Godbole  <pgodbole@nvidia.com>
  
  	* bootstrap-lto-locality-cpp-template.mk: New file.
diff -Nrcpad gcc-16-20260201/config/bootstrap-lto-locality.mk gcc-16-20260208/config/bootstrap-lto-locality.mk
*** gcc-16-20260201/config/bootstrap-lto-locality.mk	Sun Feb  1 22:32:06 2026
--- gcc-16-20260208/config/bootstrap-lto-locality.mk	Sun Feb  8 22:32:05 2026
***************
*** 2,9 ****
  
  STAGE2_CFLAGS += -flto=jobserver -frandom-seed=1 -fipa-reorder-for-locality
  STAGE3_CFLAGS += -flto=jobserver -frandom-seed=1 -fipa-reorder-for-locality
! STAGEprofile_CFLAGS += -flto=jobserver -frandom-seed=1 -fipa-reorder-for-locality
! STAGEtrain_CFLAGS += -flto=jobserver -frandom-seed=1 -fipa-reorder-for-locality
  STAGEfeedback_CFLAGS += -flto=jobserver -frandom-seed=1 -fipa-reorder-for-locality
  
  # assumes the host supports the linker plugin
--- 2,9 ----
  
  STAGE2_CFLAGS += -flto=jobserver -frandom-seed=1 -fipa-reorder-for-locality
  STAGE3_CFLAGS += -flto=jobserver -frandom-seed=1 -fipa-reorder-for-locality
! STAGEprofile_CFLAGS += -flto=jobserver -frandom-seed=1
! STAGEtrain_CFLAGS += -flto=jobserver -frandom-seed=1
  STAGEfeedback_CFLAGS += -flto=jobserver -frandom-seed=1 -fipa-reorder-for-locality
  
  # assumes the host supports the linker plugin
diff -Nrcpad gcc-16-20260201/contrib/ChangeLog gcc-16-20260208/contrib/ChangeLog
*** gcc-16-20260201/contrib/ChangeLog	Sun Feb  1 22:32:06 2026
--- gcc-16-20260208/contrib/ChangeLog	Sun Feb  8 22:32:05 2026
***************
*** 1,3 ****
--- 1,13 ----
+ 2026-02-05  Torbjörn SVENSSON  <torbjorn.svensson@foss.st.com>
+ 
+ 	* download_prerequisites: Switch gcc.gnu.org link to https
+ 
+ 2026-02-05  Filip Kastl  <fkastl@suse.cz>
+ 
+ 	* check-params-in-docs.py: Extend architecture-specific options
+ 	filtering.  Remove the mechanism for seeking to the param
+ 	section.
+ 
  2026-01-31  Pietro Monteiro  <pietro@sociotechnical.xyz>
  
  	* compare_tests: Use egrep if 'grep -E' is not supported.
diff -Nrcpad gcc-16-20260201/contrib/check-params-in-docs.py gcc-16-20260208/contrib/check-params-in-docs.py
*** gcc-16-20260201/contrib/check-params-in-docs.py	Sun Feb  1 22:32:06 2026
--- gcc-16-20260208/contrib/check-params-in-docs.py	Sun Feb  8 22:32:05 2026
***************
*** 26,32 ****
  
  import argparse
  import sys
- from itertools import dropwhile, takewhile
  
  
  def get_param_tuple(line):
--- 26,31 ----
*************** def get_param_tuple(line):
*** 39,45 ****
      return (name, description)
  
  def target_specific(param):
!     return param.split('-')[0] in ('aarch64', 'gcn', 'x86')
  
  
  parser = argparse.ArgumentParser()
--- 38,45 ----
      return (name, description)
  
  def target_specific(param):
!     return param.split('-')[0] in ('aarch64', 'gcn', 'x86', 'riscv', 'rs6000',
!                                    'loongarch')
  
  
  parser = argparse.ArgumentParser()
*************** for line in open(args.params_output).rea
*** 59,69 ****
  # Skip target-specific params
  help_params = {x:y for x,y in help_params.items() if not target_specific(x)}
  
! # Find section in .texi manual with parameters
! texi = ([x.strip() for x in open(args.texi_file).readlines()])
! texi = dropwhile(lambda x: 'itemx --param' not in x, texi)
! texi = takewhile(lambda x: '@node Instrumentation Options' not in x, texi)
! texi = list(texi)[1:]
  
  texi_params = []
  skip = False
--- 59,65 ----
  # Skip target-specific params
  help_params = {x:y for x,y in help_params.items() if not target_specific(x)}
  
! texi = list([x.strip() for x in open(args.texi_file).readlines()])
  
  texi_params = []
  skip = False
diff -Nrcpad gcc-16-20260201/contrib/download_prerequisites gcc-16-20260208/contrib/download_prerequisites
*** gcc-16-20260201/contrib/download_prerequisites	Sun Feb  1 22:32:06 2026
--- gcc-16-20260208/contrib/download_prerequisites	Sun Feb  8 22:32:05 2026
*************** mpc='mpc-1.3.1.tar.gz'
*** 33,39 ****
  isl='isl-0.24.tar.bz2'
  gettext='gettext-0.22.tar.gz'
  
! base_url='http://gcc.gnu.org/pub/gcc/infrastructure/'
  
  echo_archives() {
      echo "${gettext}"
--- 33,39 ----
  isl='isl-0.24.tar.bz2'
  gettext='gettext-0.22.tar.gz'
  
! base_url='https://gcc.gnu.org/pub/gcc/infrastructure/'
  
  echo_archives() {
      echo "${gettext}"
diff -Nrcpad gcc-16-20260201/gcc/ChangeLog gcc-16-20260208/gcc/ChangeLog
*** gcc-16-20260201/gcc/ChangeLog	Sun Feb  1 22:32:06 2026
--- gcc-16-20260208/gcc/ChangeLog	Sun Feb  8 22:32:05 2026
***************
*** 1,3 ****
--- 1,659 ----
+ 2026-02-07  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/123672
+ 	* tree-ssa-forwprop.cc (recognise_vec_perm_simplify_seq): Use std::swap
+ 	instead of fetching gimple_assign_rhs{1,2} again.  Change type of lanes
+ 	vector from auto_vec<unsigned int> to auto_vec<bool> and store true
+ 	instead of 1 into it.  Fix comment typo and formatting fix.
+ 	(can_blend_vec_perm_simplify_seqs_p): Put end of comment on the same
+ 	line as the last sentence in it.
+ 	(calc_perm_vec_perm_simplify_seqs): Change lane_assignment type from
+ 	auto_vec<int> to auto_vec<unsigned> and store 2 + l_orig into it
+ 	instead of true.  Fix comment typo and formatting fix.  Set use_seq1
+ 	to line_assignment[i] < 2 instead of line_assignment[i] != 2.  Replace
+ 	bogus computation of index for !use_seq with using
+ 	line_assignment[i] - 2.  Set l1 to l1 % nelts and similarly for l2.
+ 
+ 2026-02-07  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* optabs.cc (expand_vec_perm_const): Comment spelling fix,
+ 	permuation -> permutation.
+ 	* config/arm/arm.cc (arm_evpc_neon_vtbl): Likewise.
+ 	* config/loongarch/loongarch.cc (loongarch_try_expand_lsx_vshuf_const):
+ 	Comment spelling fix, permuatation -> permutation.
+ 	(loongarch_is_elem_duplicate): Likewise.  Comment spelling fix,
+ 	permuation -> permutation.
+ 
+ 2026-02-07  Richard Biener  <rguenther@suse.de>
+ 
+ 	* config/i386/i386.cc (ix86_vector_costs::add_stmt_cost):
+ 	Remove double and triple accounting of GPR -> XMM moves
+ 	in construction of AVX and AVX512 vectors.
+ 
+ 2026-02-07  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	* cse.cc (invalidate_from_sets_and_clobbers): Consider any hard
+ 	register referred to by any single register constraint
+ 	potentially being clobbered.
+ 
+ 2026-02-07  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	PR middle-end/123826
+ 	PR tree-optimization/123958
+ 	PR c++/124002
+ 	* tree-ssa-math-opts.cc (math_opts_dom_walker::after_dom_children):
+ 	Delete code that (mis)handled conversion of pow(x,2.0) to x*x.
+ 
+ 2026-02-07  Roger Sayle  <roger@nextmovesoftware.com>
+ 	    Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 	    Jeff Law  <jeffrey.law@oss.qualcomm.com>
+ 
+ 	PR rtl-optimization/123833
+ 	* recog.cc (cancel_changes): Update the recog_data cache if it
+ 	holds the instruction being changed.
+ 
+ 2026-02-06  Richard Ball  <Richard.Ball@arm.com>
+ 
+ 	* config/aarch64/aarch64-builtins.cc
+ 	(enum aarch64_builtins): Add ptr and generic variants.
+ 	(aarch64_init_pcdphint_builtins): Likewise.
+ 	(aarch64_general_expand_builtin): Add ptr variant.
+ 	(aarch64_resolve_overloaded_builtin_stshh): Function to handle
+ 	overloaded atomic_store_with_stshh.
+ 	(aarch64_resolve_overloaded_builtin_general): Add call to stshh function.
+ 	* config/aarch64/aarch64-c.cc
+ 	(aarch64_resolve_overloaded_builtin): Allow fndecl to return.
+ 	* config/aarch64/arm_acle.h
+ 	(__atomic_store_with_stshh): Remove __Generic.
+ 
+ 2026-02-06  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR ipa/106260
+ 	* ipa-cp.cc (initialize_node_lattices): Replace assert that there are
+ 	callers with handling that situation when -fno-toplevel_reorder.
+ 
+ 2026-02-06  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	* configure.ac (gnu_ld_flag): Move $gcc_cv_ld --version check into
+ 	AC_ARG_WITH(gnu-ld).
+ 	(gcc_cv_ld): Set before gnu_ld_flag.
+ 	(gas_flag): Move $gcc_cv_ld --version check into AC_ARG_WITH(gnu-ld).
+ 	(gcc_cv_as): Set before gas_flag.
+ 	* configure: Regenerate.
+ 
+ 2026-02-06  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/101312
+ 	* alias.cc (get_alias_set): Allow TYPE_CANONICAL (mv) to be
+ 	not its own TYPE_MAIN_VARIANT, as long as its TYPE_MAIN_VARIANT
+ 	has TYPE_CANONICAL equal to itself.
+ 	* tree.cc (verify_type): Likewise.
+ 
+ 2026-02-06  Daniel Barboza  <daniel.barboza@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/114969
+ 	* match.pd (`(A | (convert?)(A != 0)) EQ|NE 0`): New pattern.
+ 
+ 2026-02-06  Andrew Stubbs  <ams@baylibre.com>
+ 
+ 	* config/gcn/gcn-valu.md (*mov<mode>_exec_match): Delete.
+ 	(*mov<mode>_exec_match): Likewise.
+ 	(*mov<mode>): Delete unaligned register support, and convert to new
+ 	constraint syntax.
+ 	(mov<mode>_exec): Likewise.
+ 	(@mov<mode>_sgprbase): Likewise.
+ 	* config/gcn/gcn.md (*movbi): Likewise.
+ 
+ 2026-02-06  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/114274
+ 	* tree-switch-conversion.cc (switch_conversion::build_one_array):
+ 	Use UNKNOWN_LOCATION for the CSWTCH decl.
+ 
+ 2026-02-06  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/123977
+ 	* tree.cc (build_function_type): Pass no_named_args_stdarg_p
+ 	as last argument to recursive call.
+ 
+ 2026-02-06  Robin Dapp  <rdapp@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/123940
+ 	* tree-ssa-math-opts.cc (convert_mult_to_fma): Check
+ 	multiplication result is an addend.
+ 
+ 2026-02-06  Torbjörn SVENSSON  <torbjorn.svensson@foss.st.com>
+ 
+ 	PR middle-end/123892
+ 	* attribs.cc: Replace CONST_CAST with const_cast<>.
+ 	* builtins.cc: Likewise.
+ 	* collect2.cc: Likewise.
+ 	* config/bpf/core-builtins.cc: Likewise.
+ 	* config/gcn/mkoffload.cc: Likewise.
+ 	* config/nvptx/mkoffload.cc: Likewise.
+ 	* config/nvptx/nvptx.cc: Likewise.
+ 	* ctfc.cc: Likewise.
+ 	* dumpfile.cc: Likewise.
+ 	* gcc.cc: Likewise.
+ 	* gcov.cc: Likewise.
+ 	* gengtype-parse.cc: Likewise.
+ 	* gengtype-state.cc: Likewise.
+ 	* gengtype.cc: Likewise.
+ 	* genoutput.cc: Likewise.
+ 	* ggc-page.cc: Likewise.
+ 	* godump.cc: Likewise.
+ 	* lto-section-in.cc: Likewise.
+ 	* lto-wrapper.cc: Likewise.
+ 	* omp-offload.cc: Likewise.
+ 	* passes.cc: Likewise.
+ 	* plugin.cc: Likewise.
+ 	* prefix.cc: Likewise.
+ 	* pretty-print.cc: Likewise.
+ 	* selftest.cc: Likewise.
+ 	* statistics.cc: Likewise.
+ 	* stringpool.cc: Likewise.
+ 	* tree.h: Likewise.
+ 	* tree-profile.cc: Likewise.
+ 	* vec.h: Likewise.
+ 	* system.h (CONST_CAST2): Remove.
+ 	(CONST_CAST): Likewise.
+ 	* tsystem.h (CONST_CAST2): Remove.
+ 	(CONST_CAST): Likewise.
+ 
+ 2026-02-06  Torbjörn SVENSSON  <torbjorn.svensson@foss.st.com>
+ 
+ 	PR middle-end/123892
+ 	* tree.h: Replace CONST_CAST2 with const_cast<>.
+ 
+ 2026-02-06  Torbjörn SVENSSON  <torbjorn.svensson@foss.st.com>
+ 
+ 	PR middle-end/123892
+ 	* attribs.cc: Replace CONST_CAST_TREE with const_cast<tree>.
+ 	* config/aarch64/aarch64.cc: Likewise.
+ 	* config/arm/arm.cc: Likewise.
+ 	* config/darwin.cc: Likewise.
+ 	* fold-const.cc: Likewise.
+ 	* gimple-expr.cc: Likewise.
+ 	* print-rtl.cc: Likewise.
+ 	* tree-object-size.cc: Likewise.
+ 	* tree.cc: Likewise.
+ 	* varasm.cc: Likewise.
+ 	* tree.h: Likewise.
+ 
+ 2026-02-06  Torbjörn SVENSSON  <torbjorn.svensson@foss.st.com>
+ 
+ 	PR middle-end/123892
+ 	* gimple.h: Replace CONST_CAST_GIMPLE with const_cast<gimple *>.
+ 	* system.h (CONST_CAST_GIMPLE): Remove.
+ 
+ 2026-02-06  Torbjörn SVENSSON  <torbjorn.svensson@foss.st.com>
+ 
+ 	PR middle-end/123892
+ 	* system.h: Remove.
+ 	* tracer.cc: Replace CONST_CAST_BB with
+ 	const_cast<basic_block>.
+ 	* tree-cfg.cc: Likewise.
+ 
+ 2026-02-06  Torbjörn SVENSSON  <torbjorn.svensson@foss.st.com>
+ 
+ 	PR middle-end/123892
+ 	* alias.cc: Replace CONST_CAST_RTX with const_cast<rtx>.
+ 	* config/i386/x86-tune-sched-bd.cc: Likewise.
+ 	* config/rs6000/rs6000.cc: Likewise.
+ 	* recog.cc: Likewise.
+ 	* sel-sched-ir.cc: Likewise.
+ 	* var-tracking.cc: Likewise.
+ 	* varasm.cc: Likewise.
+ 	* system.h (CONST_CAST_RTX): Remove.
+ 
+ 2026-02-06  Torbjörn SVENSSON  <torbjorn.svensson@foss.st.com>
+ 
+ 	PR middle-end/123892
+ 	* config/aarch64/aarch64.cc: Replace CONST_CAST_RTX_INSN with
+ 	const_cast<struct rtx_insn *>.
+ 	* rtlanal.cc: Likewise.
+ 	* sched-deps.cc: Likewise.
+ 	* system.h (CONST_CAST_RTX_INSN): Remove.
+ 
+ 2026-02-05  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	* value-range.cc (irange_bitmask::irange_bitmask): Fix typo in
+ 	comment.
+ 	* value-range.h (class vrange): Update leading comment to refer
+ 	to "subsets" rather than "ranges".  Allude to the available
+ 	subclasses.  Warn that the classes can be over-approximations and
+ 	thus can introduce imprecision.
+ 	(class irange_bitmask): Updating leading comment to refer to
+ 	knowledge about a "value", rather than a "range".  Reword
+ 	description of MASK and VALUE to clarify implementation, and
+ 	add an example.
+ 	(class irange): Update leading comment to refer to a
+ 	"subset of possible values" rather than a "range", and
+ 	that subclasses have responsibility for storage.
+ 	(class nan_state): Rewrite leading comment.
+ 	(class frange final): Update leading comment to refer to
+ 	subsets of possible values, rather than ranges, and to
+ 	consistently use "Nan" when capitalizing.
+ 
+ 2026-02-05  Michal Jires  <mjires@suse.cz>
+ 
+ 	PR testsuite/123559
+ 	* cgraphunit.cc (check_global_declaration): Suppress OPT_Wunused.
+ 
+ 2026-02-05  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Revert:
+ 	2026-01-28  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/101312
+ 	* langhooks.h (struct lang_hooks_for_types): Remove
+ 	copy_lang_qualifiers.  Add build_lang_qualified_type.
+ 	* langhooks.cc (lhd_build_lang_qualified_type): New function.
+ 	* langhooks-def.h (lhd_build_lang_qualified_type): Declare.
+ 	(LANG_HOOKS_COPY_LANG_QUALIFIERS): Remove.
+ 	(LANG_HOOKS_BUILD_LANG_QUALIFIED_TYPE): Add.
+ 	(LANG_HOOKS_FOR_TYPES_INITIALIZER): Use
+ 	LANG_HOOKS_BUILD_LANG_QUALIFIED_TYPE instead of
+ 	LANG_HOOKS_COPY_LANG_QUALIFIERS.
+ 	* attribs.cc (build_type_attribute_qual_variant): Use
+ 	lang_hooks.types.build_lang_qualified_type instead of
+ 	build_qualified_type and/or build_qualified_type with
+ 	optional lang_hooks.types.copy_lang_qualifiers call.
+ 	(attr_access::array_as_string): Use "array " attribute instead of
+ 	"array".  If attribute has been created or intended quals differ
+ 	from quals of build_array_type, use copy_node and adjust quals and
+ 	attributes on the copy, print and then ggc_free.
+ 
+ 2026-02-05  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/123986
+ 	* tree-vect-slp.cc (vect_slp_analyze_operations): When
+ 	rolling back analyzed nodes, release node specific data
+ 	and reset SLP_TREE_TYPE.
+ 
+ 2026-02-05  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/123983
+ 	* tree-vect-loop-manip.cc (vect_update_ivs_after_vectorizer):
+ 	Only update the PHI argument on the requested edge.
+ 
+ 2026-02-05  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	PR target/123604
+ 	* compare-elim.cc (find_flags_uses_in_insn): Handle COND_EXEC.
+ 	* config/arm/arm.cc (TARGET_FLAGS_REGNUM): Define.
+ 
+ 2026-02-05  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/123978
+ 	* range-op.h (OP_WIDEN_MULT_SIGNED_UNSIGNED): Define.
+ 	(OP_WIDEN_PLUS_SIGNED, OP_WIDEN_PLUS_UNSIGNED,
+ 	RANGE_OP_TABLE_SIZE): Renumber.
+ 	* gimple-range-op.cc (imple_range_op_handler::maybe_non_standard):
+ 	Use 3 different classes instead of 2 for WIDEN_MULT_EXPR, one
+ 	for both operands signed, one for both operands unsigned and
+ 	one for operands with different signedness.  In the last case
+ 	canonicalize to first operand signed second unsigned.
+ 	* range-op.cc (operator_widen_mult_signed::wi_fold): Use
+ 	TYPE_PRECISION (type) rather than wi::get_precision (whatever) * 2,
+ 	use SIGNED for all wide_int::from calls.
+ 	(operator_widen_mult_unsigned::wi_fold): Similarly but use UNSIGNED
+ 	for all wide_int::from calls.
+ 	(class operator_widen_mult_signed_unsigned): New type.
+ 	(operator_widen_mult_signed_unsigned::wi_fold): Define.
+ 
+ 2026-02-05  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	PR ipa/123226
+ 	* cgraph.cc (cgraph_update_edges_for_call_stmt_node): Fix handling
+ 	of multi-target speculations resolved at clone materialization time
+ 
+ 2026-02-05  xiezhiheng  <xiezhiheng@huawei.com>
+ 	    liyunfei  <liyunfei33@huawei.com>
+ 
+ 	* config/aarch64/aarch64-cores.def (AARCH64_CORE): Add hip12 core
+ 	* config/aarch64/aarch64-cost-tables.h: Add hip12_extra_costs
+ 	* config/aarch64/aarch64-tune.md: Regenerate
+ 	* config/aarch64/aarch64.cc: Include hip12 tuning model
+ 	* doc/invoke.texi: Document -mcpu=hip12
+ 	* config/aarch64/tuning_models/hip12.h: New file.
+ 
+ 2026-02-05  Robin Dapp  <rdapp@oss.qualcomm.com>
+ 
+ 	PR target/123870
+ 	PR target/123969
+ 	* config/riscv/vector.md: Add vlds to "no ratio" for
+ 	theadvector.
+ 
+ 2026-02-05  Robin Dapp  <rdapp@oss.qualcomm.com>
+ 
+ 	PR target/123971
+ 	* config/riscv/riscv.cc (riscv_vector_mode_supported_any_target_p):
+ 	Remove TARGET_XTHEADVECTOR.
+ 
+ 2026-02-05  Robin Dapp  <rdapp@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/123925
+ 	* tree-ssa-forwprop.cc (simplify_vector_constructor):
+ 	Add nop-conversion handling for maybe_ident.
+ 
+ 2026-02-05  Robin Dapp  <rdapp@oss.qualcomm.com>
+ 
+ 	PR target/123910
+ 	* config/riscv/riscv-string.cc (riscv_expand_block_move):
+ 	Remove !xtheadvector guard.
+ 	(use_vector_stringop_p): Guard small LMULs.
+ 	(check_vectorise_memory_operation): Ditto.
+ 
+ 2026-02-05  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/121726
+ 	* tree-sra.cc (build_ref_for_offset): Add force_ref_all
+ 	parameter and use ptr_type_node as alias pointer type in
+ 	that case.
+ 	(build_ref_for_model): Add force_ref_all parameter and
+ 	pass it through, forcing build_ref_for_offset.
+ 	(generate_subtree_copies): Likewise.
+ 	(sra_modify_call_arg): Force ref-all accesses.
+ 
+ 2026-02-05  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR tree-optimization/123898
+ 	* tree-ssa-math-opts.cc (strip_nop_view_converts): New.
+ 	(convert_mult_to_fma): Use it.
+ 
+ 2026-02-05  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* simplify-rtx.cc (negated_ops_p): New.
+ 	(simplify_context::simplify_binary_operation_1): Use it.
+ 
+ 2026-02-05  Pan Li  <pan2.li@intel.com>
+ 
+ 	* config/riscv/riscv-opts.h (VR2FPR_COST_UNPROVIDED): Add new
+ 	sentinel for unprovided cost.
+ 	* config/riscv/riscv-protos.h (get_vr2fr_cost): Add new func
+ 	decl.
+ 	* config/riscv/riscv-vector-costs.cc (costs::adjust_stmt_cost):
+ 	Leverage new func to get cost of vr2fpr.
+ 	* config/riscv/riscv.cc (riscv_register_move_cost): Ditto.
+ 	(get_vr2fr_cost): Add new func to wrap access to the cost
+ 	of the vr2fpr.
+ 	* config/riscv/riscv.opt: Add new param vr2fpr-cost.
+ 
+ 2026-02-05  Pan Li  <pan2.li@intel.com>
+ 
+ 	* config/riscv/riscv-opts.h (GPR2VR_COST_UNPROVIDED): Depend on
+ 	default unprovided value.
+ 	(FPR2VR_COST_UNPROVIDED): Ditto.
+ 	(VR2GPR_COST_UNPROVIDED): Ditto.
+ 	(COST_UNPROVIDED): Add new default unprovided value.
+ 	* config/riscv/riscv-protos.h (get_vr2gr_cost): Add new func
+ 	decl.
+ 	* config/riscv/riscv-vector-costs.cc (costs::adjust_stmt_cost):
+ 	Leverage new func to get cost of vr2gpr.
+ 	* config/riscv/riscv.cc (riscv_register_move_cost): Ditto.
+ 	(get_vr2gr_cost): Add new func to wrap access to the cost
+ 	of the vr2gpr.
+ 	* config/riscv/riscv.opt: Add new param vr2gpr-cost.
+ 
+ 2026-02-04  Vladimir N. Makarov  <vmakarov@redhat.com>
+ 
+ 	PR rtl-optimization/123922
+ 	* lra-assigns.cc (lra_split_hard_reg_for): Allocate and free
+ 	update_hard_regno_preference_check.  Clear non_reload_pseudos for
+ 	successful spilling too.
+ 
+ 2026-02-04  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR middle-end/121661
+ 	* tree-complex.cc (extract_component): Create gimple
+ 	assign statements directly rather than call force_gimple_operand_gsi.
+ 
+ 2026-02-04  Sandra Loosemore  <sloosemore@baylibre.com>
+ 
+ 	PR translation/89915
+ 	* doc/params.texi: Copy-edit text throughout the file.
+ 	* params.opt: Likewise in documentation strings.
+ 
+ 2026-02-04  Sandra Loosemore  <sloosemore@baylibre.com>
+ 
+ 	PR target/123245
+ 	PR translation/89915
+ 	* doc/invoke.texi (Warning Options): Remove discussion of parameters
+ 	from -Winterference-size documentation.
+ 	(Static Analyzer Options): Ditto for -Wanalyzer-symbol-too-complex,
+ 	the list of things the analyzer has specific knowledge of, and
+ 	-fanalyzer-call-summaries.
+ 	(Optimize Options): Ditto for -finline-limit and fipa-cp-clone.
+ 	(Instrumentation Options): Likewise for -fsanitize=kernel-hwaddress
+ 	and -fharden-control-flow-redundancy.
+ 	(C++ Compiled Module Interface): Likewise for discussion of limits
+ 	on number of open files.
+ 
+ 2026-02-04  Sandra Loosemore  <sloosemore@baylibre.com>
+ 
+ 	PR target/123245
+ 	PR translation/89915
+ 	* Makefile.in (TEXI_GCCINT_FILES): Add params.texi.
+ 	* doc/gccint.texi (pa): New index.
+ 	(Top): Add new Parameters and Parameters Index nodes to menu.
+ 	Include params.texi.
+ 	(Parameter Index): New.
+ 	* doc/invoke.texi (Option Summary): Move --param from Optimization
+ 	Options to Developer Options.
+ 	(Optimization Options): Move parameter documentation to params.texi.
+ 	(Developer Options): Add abbreviated discussion of --param here.
+ 	(LoongArch Options): Move parameter documentation to params.texi.
+ 	(RISC-V Options): Likewise.
+ 	(RS/6000 and PowerPC Options): Likewise.
+ 	* doc/params.texi: New file.
+ 
+ 2026-02-04  Yangyu Chen  <cyy@cyyself.name>
+ 
+ 	* config/riscv/riscv-target-attr.cc
+ 	(riscv_target_attr_parser::parse_arch): Fix nullptr dereference
+ 	when parsing invalid arch string.
+ 
+ 2026-02-04  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/123818
+ 	* tree.cc (simple_cst_equal) <case CONSTRUCTOR>: Return -1 if some
+ 	recursive call returns -1.  Also compare indexes.
+ 
+ 2026-02-04  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/122689
+ 	* gimple-lower-bitint.cc (gimple_lower_bitint): For the PHI handling
+ 	if min_prec == prec, break after emitting assignment from c.
+ 
+ 2026-02-04  Prachi Godbole  <pgodbole@nvidia.com>
+ 
+ 	* params.opt: Change default param value.
+ 
+ 2026-02-03  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	PR other/123841
+ 	* acinclude.m4 (gcc_GAS_FLAGS): Check $gas_flag, $gnu_ld_flag
+ 	instead of $gas, $gnu_ld.
+ 	* configure.ac: Likewise.
+ 	(gas_flag): Determine if not already set.
+ 	(gnu_ld_flag): Likewise.
+ 	(ld_32_opt): Only set after gnu_ld_flag is set.
+ 	(ld_64_opt): Likewise.
+ 	* configure: Regenerate.
+ 
+ 2026-02-03  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	PR other/123841
+ 	* acinclude.m4 (gcc_GAS_FLAGS): Handle Darwin as cases separately.
+ 	* configure: Regenerate.
+ 
+ 2026-02-03  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	PR middle-end/118608
+ 	* expr.cc (store_field_updates_msb_p): New helper function that
+ 	now also handles BYTES_BIG_ENDIAN targets.
+ 	(expand_assignment): Use the above function when deciding to emit
+ 	a required sign/zero extension.
+ 	* rtlanal.cc (truncated_to_mode): Call targetm.mode_rep_extended
+ 	to check whether an explicit TRUNCATE is required (i.e. performs
+ 	an extension) on this target.
+ 	* config/mips/mips.md (*extenddi_truncate<mode>): Handle all
+ 	SUBDI modes, not just SHORT modes.
+ 
+ 2026-02-03  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	PR middle-end/123826
+ 	* tree-ssa-math-opts.cc (gimple_expand_builtin_pow): Add test
+ 	for flag_errno_math.
+ 	* fold-const-call.cc (fold_const_pow): Reorganize, eliminating
+ 	call to real_powi, and letting do_mpfr_arg2 do all the heavy
+ 	lifting.
+ 
+ 2026-02-03  Alfie Richards  <alfie.richards@arm.com>
+ 
+ 	PR target/123548
+ 	* config/aarch64/aarch64-builtins.cc
+ 	(aarch64_builtins): Rename AARCH64_PL<X> to
+ 	AARCH64_PREFETCH_PL<X>.
+ 	(aarch64_init_prefetch_builtin): Rename to...
+ 	(aarch64_init_prefetch_builtins): ...this and change builtin
+ 	names.
+ 	(AARCH64_INIT_PREFETCH_BUILTIN): Change to not add
+ 	"__builtin_aarch64__" prefix and to register builtins.
+ 	(handle_arm_acle_h): Add call to aarch64_init_prefetch_builtins.
+ 	(aarch64_init_pcdphint_builtins): Move __pldir code to init
+ 	prefetch builtins.
+ 	(aarch64_general_init_builtins): Remove call to
+ 	aarch64_init_prefetch_builtin.
+ 	(aarch64_expand_prefetch_builtin): Update names of PL<X>
+ 	builtins.`
+ 	* config/aarch64/arm_acle.h
+ 	(__pld): Remove
+ 	(__pli): Likewise.
+ 	(__plix): Likewise.
+ 	(__pldx): Likewise.
+ 	(__pldir): Likewise.
+ 
+ 2026-02-03  Jeff Law  <jeffrey.law@oss.qualcomm.com>
+ 
+ 	PR rtl-optimization/123322
+ 	* combine.cc (try_combine): Consider an IF_THEN_ELSE "good" when
+ 	evaluating if 4 insn combinations should be tried.
+ 	* config/riscv/iterators.md (zero_is_neutral_op): New iterator.
+ 	(zero_is_neutral_op_c): Likewise.
+ 	(any_shift_rotate): Likewise.
+ 	* config/riscv/riscv.cc (riscv_rtx_costs): Recognize the conditional
+ 	AND RTL and cost is appropriately.
+ 	* config/riscv/zicond.md: Add patterns to rewrite general conditional
+ 	move sequences into simpler forms.
+ 
+ 2026-02-03  Torbjörn SVENSSON  <torbjorn.svensson@foss.st.com>
+ 
+ 	* config.in: Regenerate.
+ 	* configure: Regenerate.
+ 	* configure.ac (gcc_cv_header_afunix_h): New test.
+ 	(HAVE_AFUNIX_H): New AC_DEFINE.
+ 	* diagnostics/sarif-sink.cc: Conditionally include afunix.h
+ 	if it's available, else fall back to internal definition.
+ 
+ 2026-02-03  Torbjörn SVENSSON  <torbjorn.svensson@foss.st.com>
+ 
+ 	PR middle-end/123892
+ 	* collect2.cc: Migrate from CONST_CAST2() macro to
+ 	const_cast<>() C++ expression.
+ 	* config/sparc/driver-sparc.cc: Likewise.
+ 	* gcc-ar.cc: Likewise.
+ 	* gcc.cc: Likewise.
+ 	* toplev.cc: Likewise.
+ 	* tree-nested.cc: Likewise.
+ 
+ 2026-02-03  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR ipa/123416
+ 	* ipa-modref.cc (ipa_merge_modref_summary_after_inlining):
+ 	Fix typo in condtion for load merging when no callee summary.
+ 
+ 2026-02-03  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	Revert:
+ 	2025-11-08  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	PR target/122097
+ 	* config/loongarch/loongarch.cc
+ 	(loongarch_const_vector_same_bytes_p): Add processing for
+ 	floating-point vector data.
+ 
+ 2026-02-03  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	* config/loongarch/predicates.md (const_vector_neg_fp_operand):
+ 	New define_predicate.
+ 	(reg_or_vector_neg_fp_operand): New define_predicate.
+ 	* config/loongarch/lasx.md (copysign<mode>3): Remove.
+ 	(xorsign<mode>3): Remove.
+ 	* config/loongarch/lsx.md (copysign<mode>3): Remove.
+ 	(@xorsign<mode>3): Remove.
+ 	* config/loongarch/simd.md (copysign<mode>3): New define_expand.
+ 	(@xorsign<mode>3): New define_expand.
+ 	(and<mode>3): Only allow IVEC instead of ALLVEC.
+ 	(ior<mode>3): Likewise.
+ 	(xor<mode>3): Likewise.
+ 	* config/loongarch/loongarch.cc (loongarch_print_operand): No
+ 	longer allow floating-point vector constants for %V.
+ 	(loongarch_const_vector_bitimm_set_p): Always return false for
+ 	floating-point vector constants.
+ 	(loongarch_build_signbit_mask): Factor out force_reg.
+ 	(loongarch_emit_swrsqrtsf): Use integer vector mode instead of
+ 	floating-point vector mode when masking zero inputs.
+ 
+ 2026-02-02  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	PR diagnostics/110522
+ 	* gcc.cc (driver_handle_option): Use
+ 	get_diagnostic_file_output_basename for
+ 	OPT_fdiagnostics_format_.
+ 	* opts-diagnostic.cc (get_base_filename): Likewise.
+ 	(get_diagnostic_file_output_basename): New.
+ 	* opts-diagnostic.h (get_diagnostic_file_output_basename): New
+ 	decl.
+ 	* opts.cc (maybe_prepend_dump_dir_name): New, based on code in
+ 	finish_options.
+ 	(finish_options): Move code for determining prepended
+ 	dump_base_name to maybe_prepend_dump_dir_name and call it.
+ 	(common_handle_option): Use get_diagnostic_file_output_basename
+ 	for OPT_fdiagnostics_format_.
+ 	* opts.h (maybe_prepend_dump_dir_name): New decl.
+ 
+ 2026-02-02  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR rtl-optimization/123294
+ 	* ifcvt.cc (noce_emit_store_flag): Reject modes
+ 	greater than MAX_FIXED_MODE_SIZE.
+ 
+ 2026-02-02  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR tree-optimization/123897
+ 	* tree-ssa-math-opts.cc (convert_mult_to_fma_1): Use type of variable
+ 	being folded.
+ 
+ 2026-02-02  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR target/121290
+ 	* config/aarch64/aarch64.cc (aarch64_vector_costs::add_stmt_cost):
+ 	Remove else.
+ 
+ 2026-02-02  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/121104
+ 	* tree-ssa-math-opts.cc (match_uaddc_usubc): Punt if
+ 	lhs of ovf1 or ovf2 doesn't have element type compatible with type.
+ 
+ 2026-02-01  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/123755
+ 	* tree-vect-stmts.cc (vectorizable_call): Adjust len-masking
+ 	condition.  Simplify code generation.
+ 
  2026-01-31  Keith Packard  <keithp@keithp.com>
  
  	* config/picolibc-spec.h (LIBC_LINK_SPEC): Use find-file for test
diff -Nrcpad gcc-16-20260201/gcc/DATESTAMP gcc-16-20260208/gcc/DATESTAMP
*** gcc-16-20260201/gcc/DATESTAMP	Sun Feb  1 22:32:06 2026
--- gcc-16-20260208/gcc/DATESTAMP	Sun Feb  8 22:32:06 2026
***************
*** 1 ****
! 20260201
--- 1 ----
! 20260208
diff -Nrcpad gcc-16-20260201/gcc/Makefile.in gcc-16-20260208/gcc/Makefile.in
*** gcc-16-20260201/gcc/Makefile.in	Sun Feb  1 22:32:06 2026
--- gcc-16-20260208/gcc/Makefile.in	Sun Feb  8 22:32:06 2026
*************** TEXI_GCCINT_FILES = gccint.texi gcc-comm
*** 3807,3813 ****
  	 gnu.texi gpl_v3.texi fdl.texi contrib.texi languages.texi	\
  	 sourcebuild.texi gty.texi libgcc.texi cfg.texi tree-ssa.texi	\
  	 loop.texi generic.texi gimple.texi plugins.texi optinfo.texi   \
! 	 match-and-simplify.texi analyzer.texi ux.texi poly-int.texi
  
  TEXI_GCCINSTALL_FILES = install.texi fdl.texi		\
  	 gcc-common.texi gcc-vers.texi
--- 3807,3814 ----
  	 gnu.texi gpl_v3.texi fdl.texi contrib.texi languages.texi	\
  	 sourcebuild.texi gty.texi libgcc.texi cfg.texi tree-ssa.texi	\
  	 loop.texi generic.texi gimple.texi plugins.texi optinfo.texi   \
! 	 match-and-simplify.texi analyzer.texi ux.texi poly-int.texi	\
! 	 params.texi
  
  TEXI_GCCINSTALL_FILES = install.texi fdl.texi		\
  	 gcc-common.texi gcc-vers.texi
diff -Nrcpad gcc-16-20260201/gcc/acinclude.m4 gcc-16-20260208/gcc/acinclude.m4
*** gcc-16-20260201/gcc/acinclude.m4	Sun Feb  1 22:32:06 2026
--- gcc-16-20260208/gcc/acinclude.m4	Sun Feb  8 22:32:06 2026
*************** int (*fp) (void) __attribute__ ((section
*** 308,314 ****
  	    gcc_cv_initfini_array=yes
  	  fi
  	elif test x"$gcc_cv_as" != x -a x"$gcc_cv_ld" != x -a x"$gcc_cv_objdump" != x ; then
! 	  case $target:$gas in
  	    *:yes)
  	      sh_flags='"a"'
  	      sh_type='%progbits'
--- 308,314 ----
  	    gcc_cv_initfini_array=yes
  	  fi
  	elif test x"$gcc_cv_as" != x -a x"$gcc_cv_ld" != x -a x"$gcc_cv_objdump" != x ; then
! 	  case $target:$gas_flag in
  	    *:yes)
  	      sh_flags='"a"'
  	      sh_type='%progbits'
*************** int (*fp) (void) __attribute__ ((section
*** 323,329 ****
  	      sh_quote='"'
  	      ;;
  	  esac
! 	  case "$target:$gnu_ld" in
  	    *:yes)
  	      cat > conftest.s <<EOF
  .section .dtors,$sh_flags,$sh_type
--- 323,329 ----
  	      sh_quote='"'
  	      ;;
  	  esac
! 	  case "$target:$gnu_ld_flag" in
  	    *:yes)
  	      cat > conftest.s <<EOF
  .section .dtors,$sh_flags,$sh_type
*************** dnl #
*** 465,470 ****
--- 465,497 ----
  AC_DEFUN([gcc_GAS_FLAGS],
  [AC_CACHE_CHECK([assembler flags], gcc_cv_as_flags,
  [ case "$target:$gas_flag" in
+   *-*-darwin*:*)
+     dnl Darwin with the native assembler uses -arch i386/x86_64/ppc/ppc64.
+     dnl
+     dnl Old cctools versions of the Darwin assembler identify as "GNU
+     dnl assembler version 1.38", but still accept the same options as later
+     dnl clang-based ones, so treat them all the same regardless.
+     case "$target" in
+       i?86-*-*)
+ 	gcc_cv_as_flags="-arch i386"
+ 	;;
+       powerpc64*-*-*)
+ 	gcc_cv_as_flags="-arch ppc64"
+ 	;;
+       powerpc*-*-*)
+ 	gcc_cv_as_flags="-arch ppc"
+ 	;;
+       x86_64-*-*)
+ 	gcc_cv_as_flags="-arch x86_64"
+ 	;;
+     esac
+     case "$target" in
+       i?86-*-* | x86_64-*-*)
+ 	as_32_opt="-arch i386"
+ 	as_64_opt="-arch x86_64"
+ 	;;
+     esac
+     ;;
    *-*-solaris2*:no)
      dnl Override the default, which may be incompatible.
      case "$target" in
*************** AC_DEFUN([gcc_GAS_FLAGS],
*** 494,503 ****
      as_32_opt=--32
      as_64_opt=--64
      ;;
-   powerpc*-*-darwin*:*)
-     dnl Always pass -arch ppc to assembler.
-     gcc_cv_as_flags="-arch ppc"
-     ;;
    amdgcn*:*)
      dnl Currently, only the llvm-mc assembler is supported.
      dnl Add flags to ensure an amdgcn ELF file is written.
--- 521,526 ----
diff -Nrcpad gcc-16-20260201/gcc/ada/ChangeLog gcc-16-20260208/gcc/ada/ChangeLog
*** gcc-16-20260201/gcc/ada/ChangeLog	Sun Feb  1 22:32:06 2026
--- gcc-16-20260208/gcc/ada/ChangeLog	Sun Feb  8 22:32:06 2026
***************
*** 1,3 ****
--- 1,34 ----
+ 2026-02-03  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* checks.adb (Apply_Discriminant_Check): Bail out for a source type
+ 	that is a class-wide type whose root type has no discriminants.
+ 	* exp_ch4.adb (Expand_N_Type_Conversion): If the target type is an
+ 	access type, emit null access checks before accessibility checks.
+ 	* sem_util.adb (In_Return_Value): Deal again with assignments to
+ 	return objects.
+ 
+ 2026-02-02  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/89159
+ 	* sem_ch6.adb (Conforming_Types.Is_Matching_Limited_View): Return
+ 	true when the type is an incomplete view of the non-limited view.
+ 
+ 2026-02-01  Eric Botcazou  <ebotcazou@adacore.com>
+ 	    Liam Powell  <liam@liampwll.com>
+ 
+ 	PR ada/123902
+ 	* sem_ch4.adb (Analyze_Selected_Component): Also test
+ 	Core_Extensions_Allowed for discriminated private types.
+ 	Rework and augment commentary throughout the procedure.
+ 
+ 2026-02-01  Eric Botcazou  <ebotcazou@adacore.com>
+ 	    Liam Powell  <liam@liampwll.com>
+ 
+ 	PR ada/121316
+ 	* exp_ch5.adb (Expand_Iterator_Loop_Over_Array): Minor tweak.
+ 	(Expand_Iterator_Loop_Over_Container): Likewise.
+ 	(Expand_N_Loop_Statement): Use Statements (N) throughout.
+ 
  2026-01-30  Gary Dismukes  <dismukes@adacore.com>
  
  	* sem_ch8.adb (End_Use_Type): Remove test of Prev_Use_Clause as
diff -Nrcpad gcc-16-20260201/gcc/ada/checks.adb gcc-16-20260208/gcc/ada/checks.adb
*** gcc-16-20260201/gcc/ada/checks.adb	Sun Feb  1 22:32:06 2026
--- gcc-16-20260208/gcc/ada/checks.adb	Sun Feb  8 22:32:06 2026
*************** package body Checks is
*** 1533,1539 ****
  
        --  Also, if the expression is of an access type whose designated type is
        --  incomplete, then the access value must be null and we suppress the
!       --  check.
  
        if Known_Null (N) then
           return;
--- 1533,1540 ----
  
        --  Also, if the expression is of an access type whose designated type is
        --  incomplete, then the access value must be null and we suppress the
!       --  check. We also need to suppress it for a class-wide type whose root
!       --  type has no discriminants.
  
        if Known_Null (N) then
           return;
*************** package body Checks is
*** 1541,1547 ****
        elsif Is_Access_Type (S_Typ) then
           S_Typ := Designated_Type (S_Typ);
  
!          if Ekind (S_Typ) = E_Incomplete_Type then
              return;
           end if;
        end if;
--- 1542,1551 ----
        elsif Is_Access_Type (S_Typ) then
           S_Typ := Designated_Type (S_Typ);
  
!          if Ekind (S_Typ) = E_Incomplete_Type
!            or else (Is_Class_Wide_Type (S_Typ)
!                      and then not Has_Discriminants (Root_Type (S_Typ)))
!          then
              return;
           end if;
        end if;
diff -Nrcpad gcc-16-20260201/gcc/ada/exp_ch4.adb gcc-16-20260208/gcc/ada/exp_ch4.adb
*** gcc-16-20260201/gcc/ada/exp_ch4.adb	Sun Feb  1 22:32:06 2026
--- gcc-16-20260208/gcc/ada/exp_ch4.adb	Sun Feb  8 22:32:06 2026
*************** package body Exp_Ch4 is
*** 12325,12330 ****
--- 12325,12334 ----
        --  Case of converting to an access type
  
        if Is_Access_Type (Target_Type) then
+          --  Generate a null access check first for the sake of ACATS c3a0025
+ 
+          Apply_Constraint_Check (Operand, Target_Type);
+ 
           --  In terms of accessibility rules, an anonymous access discriminant
           --  is not considered separate from its parent object.
  
*************** package body Exp_Ch4 is
*** 12447,12453 ****
  
        --  Case of conversions of tagged types and access to tagged types
  
!       --  When needed, that is to say when the expression is class-wide, Add
        --  runtime a tag check for (strict) downward conversion by using the
        --  membership test, generating:
  
--- 12451,12457 ----
  
        --  Case of conversions of tagged types and access to tagged types
  
!       --  When needed, that is to say when the expression is class-wide, add
        --  runtime a tag check for (strict) downward conversion by using the
        --  membership test, generating:
  
*************** package body Exp_Ch4 is
*** 12580,12590 ****
              end if;
           end Tagged_Conversion;
  
-       --  Case of other access type conversions
- 
-       elsif Is_Access_Type (Target_Type) then
-          Apply_Constraint_Check (Operand, Target_Type);
- 
        --  Case of conversions from a fixed-point type
  
        --  These conversions require special expansion and processing, found in
--- 12584,12589 ----
diff -Nrcpad gcc-16-20260201/gcc/ada/sem_ch6.adb gcc-16-20260208/gcc/ada/sem_ch6.adb
*** gcc-16-20260201/gcc/ada/sem_ch6.adb	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/ada/sem_ch6.adb	Sun Feb  8 22:32:06 2026
*************** package body Sem_Ch6 is
*** 5796,5801 ****
--- 5796,5805 ----
           end if;
        end Null_Exclusions_Match;
  
+       -----------------------------------------------
+       -- Subprogram_Subtypes_Have_Same_Declaration --
+       -----------------------------------------------
+ 
        function Subprogram_Subtypes_Have_Same_Declaration
          (Subp         : Entity_Id;
           Decl_Subtype : Entity_Id;
*************** package body Sem_Ch6 is
*** 8344,8349 ****
--- 8348,8358 ----
              if Typ = View then
                 return True;
  
+             --  The type is an incomplete view of the non-limited view
+ 
+             elsif Is_Incomplete_Type (Typ) and then Full_View (Typ) = View then
+                return True;
+ 
              --  The type is a subtype of the non-limited view
  
              elsif Is_Subtype_Of (Typ, View) then
diff -Nrcpad gcc-16-20260201/gcc/ada/sem_util.adb gcc-16-20260208/gcc/ada/sem_util.adb
*** gcc-16-20260201/gcc/ada/sem_util.adb	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/ada/sem_util.adb	Sun Feb  8 22:32:06 2026
*************** package body Sem_Util is
*** 14791,14796 ****
--- 14791,14803 ----
                 return Is_Return_Object (Defining_Identifier (P))
                   and then Exp_Defines_Or_Is_Tied_To_Return_Value;
  
+             --  Something assigned to a return object is a return value
+ 
+             when N_Assignment_Statement =>
+                return Is_Entity_Name (Name (P))
+                  and then Is_Return_Object (Entity (Name (P)))
+                  and then Exp_Defines_Or_Is_Tied_To_Return_Value;
+ 
              --  An allocator is not a return value unless specially built
  
              when N_Allocator =>
diff -Nrcpad gcc-16-20260201/gcc/algol68/ChangeLog gcc-16-20260208/gcc/algol68/ChangeLog
*** gcc-16-20260201/gcc/algol68/ChangeLog	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/algol68/ChangeLog	Sun Feb  8 22:32:06 2026
***************
*** 1,3 ****
--- 1,78 ----
+ 2026-02-06  Jose E. Marchesi  <jemarch@gnu.org>
+ 
+ 	* a68-low-units.cc (a68_lower_denotation): Fix call to
+ 	a68_u8_mbtouc.
+ 
+ 2026-02-06  Jose E. Marchesi  <jemarch@gnu.org>
+ 
+ 	* Make-lang.in (ALGOL68_OBJS): Add algol68/a68-low-holes.o.
+ 	* a68.h: Update prototypes.
+ 	* a68-types.h (struct TAG_T): New field nest_proc.
+ 	(NEST_PROC): Define.
+ 	* a68-parser.cc (a68_new_tag): Initialize NEST_PROC.
+ 	* a68-parser-extract.cc (extract_identities): Use NEST_PROC
+ 	instead of IN_PROC for taxes for defining-identifiers in identity
+ 	declarations of proc modes with formal holes as actual parameters.
+ 	* a68-moids-misc.cc (a68_is_c_mode): Modified to allow strings as
+ 	direct parameters.
+ 	* a68-low.cc (a68_make_proc_formal_hole_decl): Remove.
+ 	* a68-low-units.cc (a68_lower_identifier): Improve commentary.
+ 	(a68_lower_formal_hole): Factorize.
+ 	* a68-low-holes.cc: New file.
+ 	* a68-low-decls.cc (a68_lower_identity_declaration): Optimize
+ 	identity declarations of proc mode with formal holes as actual
+ 	parameters.
+ 	* a68-exports.cc (a68_add_identifier_to_moif): Honor NEST_PROC.
+ 	* ga68.texi (Communicating with C): Strings can now be passed as
+ 	parameters in formal holes.
+ 
+ 2026-02-05  Jose E. Marchesi  <jemarch@gnu.org>
+ 
+ 	* a68-low-clauses.cc (a68_lower_revelation_ludes): Fix function
+ 	type for fdecl.
+ 
+ 2026-02-05  Jose E. Marchesi  <jemarch@gnu.org>
+ 
+ 	* a68-low-bits.cc (a68_bits_set): Make bit number zero-based rathe
+ 	than one-based.
+ 	(a68_bits_clear): Likewise.
+ 	(a68_bits_test): Likewise.
+ 	* ga68.texi (Extended bits operators): Adapt documentation
+ 	accordingly.
+ 
+ 2026-02-05  Jose E. Marchesi  <jemarch@gnu.org>
+ 
+ 	PR algol68/123959
+ 	* a68.h: Expand prototype of a68_bits_shift to get a node argument
+ 	for location purposes.
+ 	* a68-low-bits.cc (a68_bits_shift): Implement RR compatible
+ 	semantics.
+ 	* a68-low-prelude.cc (a68_lower_shl3): Fix call to a68_bit_shift.
+ 	(a68_lower_shr3): Likewise.
+ 	* ga68.texi (Bits operators): Fix documentation of SHR and SHL.
+ 
+ 2026-02-03  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	* a68-parser-extract.cc (a68_extract_indicants): Don't call FORWARD if
+ 	skip_module_text returns NO_NODE.
+ 
+ 2026-02-01  Jose E. Marchesi  <jemarch@gnu.org>
+ 
+ 	* a68-low-bits.cc (a68_bits_test): Do not get a parameter with the
+ 	result moid.
+ 	* a68.h: Adapt prototype of a68_bits_test accordingly.
+ 	* a68-low-prelude.cc (a68_lower_test3): Adjust call accordingly.
+ 
+ 2026-02-01  Jose E. Marchesi  <jemarch@gnu.org>
+ 
+ 	* a68.h: Prototype for a68_make_proc_formal_hole_decl.
+ 	* a68-parser-extract.cc (extract_identities): Mark identity
+ 	declarations of proc modes whose actual parameter is a formal hole
+ 	as "inproc".
+ 	* a68-low.cc (a68_make_proc_formal_hole_decl): New function.
+ 	* a68-low-units.cc (a68_lower_formal_hole): Call
+ 	a68_make_proc_formal_hole_decl whenever necessary.
+ 
  2026-01-31  Jose E. Marchesi  <jemarch@gnu.org>
  
  	* a68.h: Prototypes for a68_bits_test and a68_lower_test3.
diff -Nrcpad gcc-16-20260201/gcc/algol68/Make-lang.in gcc-16-20260208/gcc/algol68/Make-lang.in
*** gcc-16-20260201/gcc/algol68/Make-lang.in	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/algol68/Make-lang.in	Sun Feb  8 22:32:06 2026
*************** ALGOL68_OBJS = algol68/a68-lang.o \
*** 109,114 ****
--- 109,115 ----
                 algol68/a68-low-runtime.o \
                 algol68/a68-low-unions.o \
                 algol68/a68-low-units.o \
+                algol68/a68-low-holes.o \
                 $(END)
  
  ALGOL68_ALL_OBJS = $(ALGOL68_OBJS)
diff -Nrcpad gcc-16-20260201/gcc/algol68/a68-exports.cc gcc-16-20260208/gcc/algol68/a68-exports.cc
*** gcc-16-20260201/gcc/algol68/a68-exports.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/algol68/a68-exports.cc	Sun Feb  8 22:32:06 2026
*************** a68_add_identifier_to_moif (MOIF_T *moif
*** 91,97 ****
    EXTRACT_MODE (e) = MOID (tag);
    EXTRACT_PRIO (e) = 0;
    EXTRACT_VARIABLE (e) = VARIABLE (tag);
!   EXTRACT_IN_PROC (e) = IN_PROC (tag);
  
    if (! IDENTIFIERS (moif)->contains (e))
      {
--- 91,97 ----
    EXTRACT_MODE (e) = MOID (tag);
    EXTRACT_PRIO (e) = 0;
    EXTRACT_VARIABLE (e) = VARIABLE (tag);
!   EXTRACT_IN_PROC (e) = IN_PROC (tag) || NEST_PROC (tag);
  
    if (! IDENTIFIERS (moif)->contains (e))
      {
diff -Nrcpad gcc-16-20260201/gcc/algol68/a68-low-bits.cc gcc-16-20260208/gcc/algol68/a68-low-bits.cc
*** gcc-16-20260201/gcc/algol68/a68-low-bits.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/algol68/a68-low-bits.cc	Sun Feb  8 22:32:06 2026
*************** a68_bits_subset (tree bits1, tree bits2)
*** 258,282 ****
  		      bits2);
  }
  
! /* Rotate the bits in BITS SHIFT bits to the left if SHIFT is positive, or ABS
!    (SHIFT) bits to the right if SHIFT is negative.
  
!    A run-time error is raised if the count overflows the BITS value.  */
  
  tree
! a68_bits_shift (tree shift, tree bits)
  {
    shift = save_expr (shift);
    bits = save_expr (bits);
!   return fold_build3 (COND_EXPR,
! 		      TREE_TYPE (bits),
! 		      fold_build2 (GE_EXPR, TREE_TYPE (shift),
! 				   shift, build_int_cst (TREE_TYPE (shift), 0)),
! 		      fold_build2 (LSHIFT_EXPR, TREE_TYPE (bits),
! 				   bits, shift),
! 		      fold_build2 (RSHIFT_EXPR, TREE_TYPE (bits),
! 				   bits,
! 				   fold_build1 (ABS_EXPR, TREE_TYPE (shift), shift)));
  }
  
  /* Given two bits values, build an expression that calculates whether A = B.  */
--- 258,294 ----
  		      bits2);
  }
  
! /* Rotate the bits in BITS according to the value of SHIFT:
  
!    - If ABS(SHIFT) >= bits_width, the result is all bits clear.
!    - If SHIFT is positive, BITS gets shifted SHIFT bits to the right.
!    - If SHIFT is negative, BITS gets shifted ABS(SHIFT) bits to the left.
! */
  
  tree
! a68_bits_shift (NODE_T *p, tree shift, tree bits)
  {
    shift = save_expr (shift);
    bits = save_expr (bits);
! 
!   tree shift_type = TREE_TYPE (shift);
!   tree bits_type = TREE_TYPE (bits);
!   tree abs_shift = save_expr (fold_build1 (ABS_EXPR, TREE_TYPE (shift), shift));
! 
!   tree shifted_right = fold_build2 (RSHIFT_EXPR, bits_type, bits, abs_shift);
!   tree shifted_left = fold_build2 (LSHIFT_EXPR, bits_type, bits, abs_shift);
! 
!   tree shifted_bits = fold_build3 (COND_EXPR, TREE_TYPE (bits),
! 				   fold_build2 (GE_EXPR, shift_type,
! 						shift, build_zero_cst (shift_type)),
! 				   shifted_right, shifted_left);
! 
!   return fold_build3_loc (a68_get_node_location (p),
! 			  COND_EXPR,
! 			  TREE_TYPE (bits),
! 			  fold_build2 (LT_EXPR, TREE_TYPE (abs_shift),
! 				       abs_shift, a68_bits_width (bits_type)),
! 			  shifted_bits, build_zero_cst (bits_type));
  }
  
  /* Given two bits values, build an expression that calculates whether A = B.  */
*************** a68_bits_ne (tree a, tree b, location_t
*** 298,304 ****
  
  /* Set the bit NUMBIT in BITS.
  
!    NUMBIT is one based and counts bits from least significative to most
     significative, i.e. from "right" to "left".  If NUMBIT is not in range then
     this is a nop. */
  
--- 310,316 ----
  
  /* Set the bit NUMBIT in BITS.
  
!    NUMBIT is zero based and counts bits from least significative to most
     significative, i.e. from "right" to "left".  If NUMBIT is not in range then
     this is a nop. */
  
*************** a68_bits_set (MOID_T *m, tree bits, tree
*** 311,330 ****
    bits = save_expr (bits);
    numbit = save_expr (numbit);
  
-   tree numbit_minus_one = fold_build2 (MINUS_EXPR, int_type,
- 				       numbit, build_int_cst (int_type, 1));
    tree mask = fold_build2 (BIT_IOR_EXPR, bits_type,
  			   bits,
  			   fold_build2 (LSHIFT_EXPR,
  					bits_type,
  					build_int_cst (bits_type, 1),
! 					numbit_minus_one));
    tree res = fold_build2 (BIT_IOR_EXPR, bits_type, bits, mask);
    tree in_range = fold_build2 (TRUTH_AND_EXPR,
  			       int_type,
  			       fold_build2 (GE_EXPR, int_type,
! 					    numbit, build_int_cst (int_type, 1)),
! 			       fold_build2 (LE_EXPR, int_type,
  					    numbit, a68_bits_width (bits_type)));
  
    return fold_build3_loc (loc, COND_EXPR,
--- 323,340 ----
    bits = save_expr (bits);
    numbit = save_expr (numbit);
  
    tree mask = fold_build2 (BIT_IOR_EXPR, bits_type,
  			   bits,
  			   fold_build2 (LSHIFT_EXPR,
  					bits_type,
  					build_int_cst (bits_type, 1),
! 					numbit));
    tree res = fold_build2 (BIT_IOR_EXPR, bits_type, bits, mask);
    tree in_range = fold_build2 (TRUTH_AND_EXPR,
  			       int_type,
  			       fold_build2 (GE_EXPR, int_type,
! 					    numbit, build_zero_cst (int_type)),
! 			       fold_build2 (LT_EXPR, int_type,
  					    numbit, a68_bits_width (bits_type)));
  
    return fold_build3_loc (loc, COND_EXPR,
*************** a68_bits_set (MOID_T *m, tree bits, tree
*** 334,340 ****
  
  /* Clear the bit NUMBIT in BITS.
  
!    NUMBIT is one based and counts bits from least significative to most
     significative, i.e. from "right" to "left".  If NUMBIT is not in range then
     this is a nop. */
  
--- 344,350 ----
  
  /* Clear the bit NUMBIT in BITS.
  
!    NUMBIT is zero based and counts bits from least significative to most
     significative, i.e. from "right" to "left".  If NUMBIT is not in range then
     this is a nop. */
  
*************** a68_bits_clear (MOID_T *m, tree bits, tr
*** 352,367 ****
  			   fold_build2 (LSHIFT_EXPR,
  					bits_type,
  					build_int_cst (bits_type, 1),
! 					fold_build2 (MINUS_EXPR,
! 						     int_type,
! 						     numbit,
! 						     build_int_cst (int_type, 1))));
    tree res = fold_build2 (BIT_AND_EXPR, bits_type, bits, mask);
    tree in_range = fold_build2 (TRUTH_AND_EXPR,
  			       int_type,
  			       fold_build2 (GE_EXPR, int_type,
! 					    numbit, build_int_cst (int_type, 1)),
! 			       fold_build2 (LE_EXPR, int_type,
  					    numbit, a68_bits_width (bits_type)));
    return fold_build3_loc (loc, COND_EXPR,
  			  bits_type,
--- 362,374 ----
  			   fold_build2 (LSHIFT_EXPR,
  					bits_type,
  					build_int_cst (bits_type, 1),
! 					numbit));
    tree res = fold_build2 (BIT_AND_EXPR, bits_type, bits, mask);
    tree in_range = fold_build2 (TRUTH_AND_EXPR,
  			       int_type,
  			       fold_build2 (GE_EXPR, int_type,
! 					    numbit, build_zero_cst (int_type)),
! 			       fold_build2 (LT_EXPR, int_type,
  					    numbit, a68_bits_width (bits_type)));
    return fold_build3_loc (loc, COND_EXPR,
  			  bits_type,
*************** a68_bits_clear (MOID_T *m, tree bits, tr
*** 370,376 ****
  
  /* Test the bit NUMBIT in BITS.
  
!    NUMBIT is one based and counts bits from least significative to most
     significative, i.e. from "right" to "left".  If NUMBIT is not in range then
     the operator yields false.  */
  
--- 377,383 ----
  
  /* Test the bit NUMBIT in BITS.
  
!    NUMBIT is zero based and counts bits from least significative to most
     significative, i.e. from "right" to "left".  If NUMBIT is not in range then
     the operator yields false.  */
  
*************** a68_bits_test (tree bits, tree numbit, l
*** 383,396 ****
    bits = save_expr (bits);
    numbit = save_expr (numbit);
  
-   tree numbit_minus_one = fold_build2 (MINUS_EXPR, int_type,
- 				       numbit, build_one_cst (int_type));
    tree mask = fold_build2 (BIT_AND_EXPR, bits_type,
  			   bits,
  			   fold_build2 (LSHIFT_EXPR,
  					bits_type,
  					build_one_cst (bits_type),
! 					fold_convert (bits_type, numbit_minus_one)));
    tree res = fold_build2 (NE_EXPR,
  			  a68_bool_type,
  			  fold_build2 (BIT_AND_EXPR, bits_type, bits, mask),
--- 390,401 ----
    bits = save_expr (bits);
    numbit = save_expr (numbit);
  
    tree mask = fold_build2 (BIT_AND_EXPR, bits_type,
  			   bits,
  			   fold_build2 (LSHIFT_EXPR,
  					bits_type,
  					build_one_cst (bits_type),
! 					numbit));
    tree res = fold_build2 (NE_EXPR,
  			  a68_bool_type,
  			  fold_build2 (BIT_AND_EXPR, bits_type, bits, mask),
*************** a68_bits_test (tree bits, tree numbit, l
*** 398,405 ****
    tree in_range = fold_build2 (TRUTH_AND_EXPR,
  			       int_type,
  			       fold_build2 (GE_EXPR, int_type,
! 					    numbit, build_int_cst (int_type, 1)),
! 			       fold_build2 (LE_EXPR, int_type,
  					    numbit, a68_bits_width (bits_type)));
  
    return fold_build3_loc (loc, COND_EXPR,
--- 403,410 ----
    tree in_range = fold_build2 (TRUTH_AND_EXPR,
  			       int_type,
  			       fold_build2 (GE_EXPR, int_type,
! 					    numbit, build_zero_cst (int_type)),
! 			       fold_build2 (LT_EXPR, int_type,
  					    numbit, a68_bits_width (bits_type)));
  
    return fold_build3_loc (loc, COND_EXPR,
diff -Nrcpad gcc-16-20260201/gcc/algol68/a68-low-clauses.cc gcc-16-20260208/gcc/algol68/a68-low-clauses.cc
*** gcc-16-20260201/gcc/algol68/a68-low-clauses.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/algol68/a68-low-clauses.cc	Sun Feb  8 22:32:06 2026
*************** a68_lower_revelation_ludes (NODE_T *p, b
*** 1407,1415 ****
  
  	  tree fdecl = build_decl (UNKNOWN_LOCATION, FUNCTION_DECL,
  				   get_identifier (fname),
! 				   build_function_type_list (void_type_node,
! 							     void_type_node,
! 							     NULL_TREE));
  	  DECL_EXTERNAL (fdecl) = 1;
  	  TREE_PUBLIC (fdecl) = 1;
  	  a68_add_decl (fdecl);
--- 1407,1415 ----
  
  	  tree fdecl = build_decl (UNKNOWN_LOCATION, FUNCTION_DECL,
  				   get_identifier (fname),
! 				   build_function_type (void_type_node,
! 							void_list_node));
! 
  	  DECL_EXTERNAL (fdecl) = 1;
  	  TREE_PUBLIC (fdecl) = 1;
  	  a68_add_decl (fdecl);
diff -Nrcpad gcc-16-20260201/gcc/algol68/a68-low-decls.cc gcc-16-20260208/gcc/algol68/a68-low-decls.cc
*** gcc-16-20260201/gcc/algol68/a68-low-decls.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/algol68/a68-low-decls.cc	Sun Feb  8 22:32:06 2026
*************** a68_lower_identity_declaration (NODE_T *
*** 351,388 ****
  
    NODE_T *unit = NEXT (NEXT (defining_identifier));
  
!   /* If not done already by an applied identifier in lower_identifier, create a
!      declaration for the defined entity and chain it in the current block.  The
!      declaration has an initial value of SKIP.  */
!   tree id_decl = TAX_TREE_DECL (TAX (defining_identifier));
!   if (id_decl == NULL_TREE)
      {
!       id_decl = a68_make_identity_declaration_decl (defining_identifier,
! 						    ctx.module_definition_name);
!       TAX_TREE_DECL (TAX (defining_identifier)) = id_decl;
!     }
  
!   /* If the identity declaration is in a public range then add the declaration
!      to the publicized declarations list.  Otherwise chain the declaration in
!      the proper block and bind it.  */
!   if (PUBLIC_RANGE (TABLE (TAX (defining_identifier))))
!     vec_safe_push (A68_MODULE_DEFINITION_DECLS, id_decl);
    else
!     a68_add_decl (id_decl);
  
!   /* Prepare the DECL_EXPR.  */
!   a68_add_decl_expr (fold_build1_loc (a68_get_node_location (p),
! 				      DECL_EXPR,
! 				      TREE_TYPE (id_decl),
! 				      id_decl));
  
!   unit_tree = a68_lower_tree (unit, ctx);
!   unit_tree = a68_consolidate_ref (MOID (unit), unit_tree);
!   tree expr = a68_low_ascription (MOID (defining_identifier),
! 				  id_decl, unit_tree);
  
!   /* If the ascribed value is constant, mark the declaration as constant.  */
!   TREE_CONSTANT (id_decl) = TREE_CONSTANT (unit_tree);
  
    /* Tail in a compound expression with sub declarations, if any.  */
    if (sub_expr != NULL_TREE)
--- 351,405 ----
  
    NODE_T *unit = NEXT (NEXT (defining_identifier));
  
!   tree expr = NULL_TREE;
!   if (NEST_PROC (TAX (defining_identifier)))
      {
!       /* NEST_PROC tells us that the identity declaration is of the form:
  
! 	 PROCMODE defining_identifier = FORMAL_HOLE
! 
! 	 Which in effect is very like a procedure declaration.  */
!       gcc_assert (IS (SUB (unit), FORMAL_HOLE));
!       ctx.proc_decl_identifier = defining_identifier;
!       ctx.proc_decl_operator = false;
!       expr = a68_lower_tree (unit, ctx);
!     }
    else
!     {
!       /* For regular identity declarations, create a declaration for the
! 	 defined entity and chain it in the current block.  The declaration has
! 	 an initial value of SKIP.  */
!       tree id_decl = TAX_TREE_DECL (TAX (defining_identifier));
!       if (id_decl == NULL_TREE)
! 	{
! 	  id_decl = a68_make_identity_declaration_decl (defining_identifier,
! 							ctx.module_definition_name);
! 	  TAX_TREE_DECL (TAX (defining_identifier)) = id_decl;
! 	}
  
!       /* Prepare the DECL_EXPR.  */
!       a68_add_decl_expr (fold_build1_loc (a68_get_node_location (p),
! 					  DECL_EXPR,
! 					  TREE_TYPE (id_decl),
! 					  id_decl));
  
!       unit_tree = a68_lower_tree (unit, ctx);
!       unit_tree = a68_consolidate_ref (MOID (unit), unit_tree);
!       expr = a68_low_ascription (MOID (defining_identifier),
! 				 id_decl, unit_tree);
  
!       /* If the ascribed value is constant, mark the declaration as
! 	 constant.  */
!       TREE_CONSTANT (id_decl) = TREE_CONSTANT (unit_tree);
! 
!       /* If the identity declaration is in a public range then add the
! 	 declaration to the module's declarations list.  Otherwise chain the
! 	 declaration in the proper block and bind it.  */
!       if (PUBLIC_RANGE (TABLE (TAX (defining_identifier))))
! 	vec_safe_push (A68_MODULE_DEFINITION_DECLS, id_decl);
!       else
! 	a68_add_decl (id_decl);
!     }
  
    /* Tail in a compound expression with sub declarations, if any.  */
    if (sub_expr != NULL_TREE)
*************** a68_lower_identity_declaration (NODE_T *
*** 390,396 ****
        if (expr != NULL_TREE)
  	expr = fold_build2_loc (a68_get_node_location (p),
  				COMPOUND_EXPR,
! 				TREE_TYPE (id_decl),
  				sub_expr,
  				expr);
        else
--- 407,413 ----
        if (expr != NULL_TREE)
  	expr = fold_build2_loc (a68_get_node_location (p),
  				COMPOUND_EXPR,
! 				TREE_TYPE (expr),
  				sub_expr,
  				expr);
        else
diff -Nrcpad gcc-16-20260201/gcc/algol68/a68-low-holes.cc gcc-16-20260208/gcc/algol68/a68-low-holes.cc
*** gcc-16-20260201/gcc/algol68/a68-low-holes.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/algol68/a68-low-holes.cc	Sun Feb  8 22:32:06 2026
***************
*** 0 ****
--- 1,176 ----
+ /* Lowering routines for formal holes.
+    Copyright (C) 2026 Jose E. Marchesi.
+ 
+    Written by Jose E. Marchesi.
+ 
+    GCC is free software; you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 3, or (at your option)
+    any later version.
+ 
+    GCC is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+    License for more details.
+ 
+    You should have received a copy of the GNU General Public License
+    along with GCC; see the file COPYING3.  If not see
+    <http://www.gnu.org/licenses/>.  */
+ 
+ #define INCLUDE_MEMORY
+ #include "config.h"
+ #include "system.h"
+ #include "coretypes.h"
+ 
+ #include "tree.h"
+ #include "fold-const.h"
+ #include "diagnostic.h"
+ #include "langhooks.h"
+ #include "tm.h"
+ #include "function.h"
+ #include "cgraph.h"
+ #include "toplev.h"
+ #include "varasm.h"
+ #include "predict.h"
+ #include "stor-layout.h"
+ #include "tree-iterator.h"
+ #include "stringpool.h"
+ #include "print-tree.h"
+ #include "gimplify.h"
+ #include "dumpfile.h"
+ #include "convert.h"
+ 
+ #include "a68.h"
+ 
+ /* Get the symbol associated with the formal hole P. *ADDRP is set to `true' if
+    the string denotation in the formal hole starts with `&'.  */
+ 
+ static const char *
+ get_hole_symbol (NODE_T *p, bool *addrp)
+ {
+   NODE_T *str = NEXT_SUB (p);
+   if (IS (str, LANGUAGE_INDICANT))
+     FORWARD (str);
+   gcc_assert (IS (str, TERTIARY));
+   while (str != NO_NODE && !IS (str, ROW_CHAR_DENOTATION))
+     str = SUB (str);
+   gcc_assert (IS (str, ROW_CHAR_DENOTATION));
+ 
+   const char *cstr = NSYMBOL (str);
+   if (strlen (cstr) > 0 && cstr[0] == '&' && addrp != NULL)
+     {
+       *addrp = true;
+       cstr = cstr + 1;
+     }
+ 
+   return a68_string_process_breaks (p, cstr);
+ }
+ 
+ /* Build and return a var decl providing access to the formal hole P.  */
+ 
+ tree
+ a68_wrap_formal_var_hole (NODE_T *p)
+ {
+   gcc_assert (!IS (MOID (p), PROC_SYMBOL));
+   const char *symbol = get_hole_symbol (p, NULL /* addrp */);
+   return a68_make_formal_hole_decl (p, symbol);
+ }
+ 
+ /* Build the body for a wrapper to the formal hole in P, which is of a proc
+    mode.  The body is installed in the function_decl WRAPPER.  */
+ 
+ void
+ a68_wrap_formal_proc_hole (NODE_T *p, tree wrapper)
+ {
+   gcc_assert (IS (MOID (p), PROC_SYMBOL));
+ 
+   bool addrp;
+   const char *symbol = get_hole_symbol (p, &addrp);
+   gcc_assert (addrp == false);
+ 
+   /* Create a wrapper function.  */
+ 
+   MOID_T *m = MOID (p);
+ 
+   /* Determine how many arguments we need for the wrapped function. */
+   int wrapped_nargs = 0;
+   for (PACK_T *z = PACK (m); z != NO_PACK; FORWARD (z))
+     {
+       if (MOID(z) == M_STRING)
+ 	wrapped_nargs += 3;
+       else
+ 	wrapped_nargs += 1;
+     }
+ 
+   /* Now build the type of the wrapped function.  */
+ 
+   tree *wrapped_args_types = XALLOCAVEC (tree, wrapped_nargs);
+   int nwrappedarg = 0;
+   for (PACK_T *z = PACK (m); z != NO_PACK; FORWARD (z))
+     {
+       if (MOID (z) == M_STRING)
+ 	{
+ 	  wrapped_args_types[nwrappedarg++] = build_pointer_type (a68_char_type);
+ 	  wrapped_args_types[nwrappedarg++] = size_type_node;
+ 	  wrapped_args_types[nwrappedarg++] = size_type_node;
+ 	}
+       else
+ 	{
+ 	      wrapped_args_types[nwrappedarg++] = CTYPE (MOID (z));
+ 	}
+     }
+ 
+   tree wrapper_ret_type = TREE_TYPE (TREE_TYPE (wrapper));
+   tree wrapped_type = build_function_type_array (wrapper_ret_type,
+ 						 wrapped_nargs,
+ 						 wrapped_args_types);
+       
+   /* And a decl for the wrapped function.  */
+   tree wrapped = build_decl (UNKNOWN_LOCATION,
+ 			     FUNCTION_DECL,
+ 			     get_identifier (symbol),
+ 			     wrapped_type);
+   DECL_EXTERNAL (wrapped) = 1;
+   TREE_PUBLIC (wrapped) = 1;
+   DECL_ARTIFICIAL (wrapped) = 1;
+   DECL_VISIBILITY (wrapped) = VISIBILITY_DEFAULT;
+   DECL_VISIBILITY_SPECIFIED (wrapped) = 1;
+ 
+   announce_function (wrapper);
+ 
+   vec<tree, va_gc> *wrapped_args;
+   vec_alloc (wrapped_args, wrapped_nargs);
+   for (PACK_T *z = PACK (m); z != NO_PACK; FORWARD (z))
+     {
+       if (MOID (z) == M_STRING)
+ 	{
+ 	  tree str = a68_low_func_param (wrapper, "str", CTYPE (M_STRING));
+ 	  DECL_ARGUMENTS (wrapper) = chainon (str, DECL_ARGUMENTS (wrapper));
+ 
+ 	  tree s = a68_multiple_elements (str);
+ 	  tree len = a68_multiple_num_elems (str);
+ 	  tree stride = a68_multiple_stride (str, size_zero_node /* dim */);
+ 
+ 	  wrapped_args->quick_push (s);
+ 	  wrapped_args->quick_push (len);
+ 	  wrapped_args->quick_push (stride);
+ 	}
+       else
+ 	{
+ 	  tree a = a68_low_func_param (wrapper, "param", CTYPE (MOID (z)));
+ 	  DECL_ARGUMENTS (wrapper) = chainon (a, DECL_ARGUMENTS (wrapper));
+ 	  wrapped_args->quick_push (a);
+ 	}
+     }
+   DECL_ARGUMENTS (wrapper) = nreverse (DECL_ARGUMENTS (wrapper));
+ 
+   a68_push_function_range (wrapper, wrapper_ret_type, true /* top_level */);
+ 
+   /* We need a pointer to a function type.  */
+   if (!POINTER_TYPE_P (TREE_TYPE (wrapped)))
+     wrapped = fold_build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (wrapped)),
+ 			   wrapped);
+ 
+   tree body = build_call_vec (TREE_TYPE (wrapped_type), wrapped, wrapped_args);
+   a68_pop_function_range (body);
+ }
diff -Nrcpad gcc-16-20260201/gcc/algol68/a68-low-prelude.cc gcc-16-20260208/gcc/algol68/a68-low-prelude.cc
*** gcc-16-20260201/gcc/algol68/a68-low-prelude.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/algol68/a68-low-prelude.cc	Sun Feb  8 22:32:06 2026
*************** a68_lower_shl3 (NODE_T *p, LOW_CTX_T ctx
*** 1085,1091 ****
  {
    tree bits = a68_lower_tree (SUB (p), ctx);
    tree shift = a68_lower_tree (NEXT (NEXT (SUB (p))), ctx);
!   return a68_bits_shift (shift, bits);
  }
  
  tree
--- 1085,1093 ----
  {
    tree bits = a68_lower_tree (SUB (p), ctx);
    tree shift = a68_lower_tree (NEXT (NEXT (SUB (p))), ctx);
!   return a68_bits_shift (p,
! 			 fold_build1 (NEGATE_EXPR, TREE_TYPE (shift), shift),
! 			 bits);
  }
  
  tree
*************** a68_lower_shr3 (NODE_T *p, LOW_CTX_T ctx
*** 1093,1101 ****
  {
    tree bits = a68_lower_tree (SUB (p), ctx);
    tree shift = a68_lower_tree (NEXT (NEXT (SUB (p))), ctx);
!   return a68_bits_shift (fold_build1 (NEGATE_EXPR,
! 				      TREE_TYPE (shift), shift),
! 			 bits);
  }
  
  tree
--- 1095,1101 ----
  {
    tree bits = a68_lower_tree (SUB (p), ctx);
    tree shift = a68_lower_tree (NEXT (NEXT (SUB (p))), ctx);
!   return a68_bits_shift (p, shift, bits);
  }
  
  tree
diff -Nrcpad gcc-16-20260201/gcc/algol68/a68-low-units.cc gcc-16-20260208/gcc/algol68/a68-low-units.cc
*** gcc-16-20260201/gcc/algol68/a68-low-units.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/algol68/a68-low-units.cc	Sun Feb  8 22:32:06 2026
*************** a68_lower_identifier (NODE_T *p, LOW_CTX
*** 79,84 ****
--- 79,85 ----
  	  if (IS (MOID (p), PROC_SYMBOL))
  	    {
  	      bool external = (MOIF (TAX (p)) != NO_MOIF);
+ 
  	      const char *extern_symbol = EXTERN_SYMBOL (TAX (p));
  	      if (VARIABLE (TAX (p)))
  		{
*************** a68_lower_identifier (NODE_T *p, LOW_CTX
*** 90,96 ****
  		    id_decl
  		      = a68_make_variable_declaration_decl (p, ctx.module_definition_name);
  		}
! 	      else if (IN_PROC (TAX (p)))
  		{
  		  if (external)
  		    id_decl
--- 91,97 ----
  		    id_decl
  		      = a68_make_variable_declaration_decl (p, ctx.module_definition_name);
  		}
! 	      else if (IN_PROC (TAX (p)) || NEST_PROC (TAX (p)))
  		{
  		  if (external)
  		    id_decl
*************** a68_lower_identifier (NODE_T *p, LOW_CTX
*** 144,151 ****
  	  TAX_TREE_DECL (TAX (p)) = id_decl;
  	}
  
!       /* If the identifier refers to a FUNCTION_DECL, this means the declaration
! 	 was made by a procecure-identity-dclaration.  The applied identifier in
  	 that case refers to the address of the corresponding function.  */
        if (TREE_CODE (id_decl) == FUNCTION_DECL)
  	return fold_build1 (ADDR_EXPR,
--- 145,153 ----
  	  TAX_TREE_DECL (TAX (p)) = id_decl;
  	}
  
!       /* If the identifier refers to a FUNCTION_DECL, this means the
! 	 declaration was made by a procecure-identity-dclaration or a
! 	 proc-identity-declaration of a formal hole.  The applied identifier in
  	 that case refers to the address of the corresponding function.  */
        if (TREE_CODE (id_decl) == FUNCTION_DECL)
  	return fold_build1 (ADDR_EXPR,
*************** a68_lower_denotation (NODE_T *p, LOW_CTX
*** 222,230 ****
    else if (moid == M_CHAR)
      {
        char *s = a68_string_process_breaks (p, NSYMBOL (p));
        uint32_t ucs;
!       int length = a68_u8_mbtouc (&ucs, (const uint8_t *) s, 1);
!       gcc_assert (length == 1);
        free (s);
        return build_int_cst (a68_char_type, ucs);
      }
--- 224,233 ----
    else if (moid == M_CHAR)
      {
        char *s = a68_string_process_breaks (p, NSYMBOL (p));
+       int num_units = strlen (s);
        uint32_t ucs;
!       int length = a68_u8_mbtouc (&ucs, (const uint8_t *) s, num_units);
!       gcc_assert (length == num_units);
        free (s);
        return build_int_cst (a68_char_type, ucs);
      }
*************** a68_lower_routine_text (NODE_T *p, LOW_C
*** 1247,1268 ****
  tree
  a68_lower_formal_hole (NODE_T *p, LOW_CTX_T ctx ATTRIBUTE_UNUSED)
  {
!   NODE_T *str = NEXT_SUB (p);
!   if (IS (str, LANGUAGE_INDICANT))
!     FORWARD (str);
!   gcc_assert (IS (str, TERTIARY));
!   while (str != NO_NODE && !IS (str, ROW_CHAR_DENOTATION))
!     str = SUB (str);
!   gcc_assert (IS (str, ROW_CHAR_DENOTATION));
  
!   char *symbol = a68_string_process_breaks (p, NSYMBOL (str));
  
!   tree decl;
!   if (IS (MOID (p), PROC_SYMBOL))
!     decl = a68_make_proc_formal_hole_decl (p, symbol);
    else
!     decl = a68_make_formal_hole_decl (p, symbol);
!   return decl;
  }
  
  /* Lower an unit.
--- 1250,1317 ----
  tree
  a68_lower_formal_hole (NODE_T *p, LOW_CTX_T ctx ATTRIBUTE_UNUSED)
  {
!   NODE_T *defining_identifier = ctx.proc_decl_identifier;
!   bool defining_operator = ctx.proc_decl_operator;
  
!   if (defining_identifier != NO_NODE)
!     {
!       /* The formal-hole is part of an identity declaration and yields a proc
! 	 mode.  */
!       gcc_assert (IS (MOID (p), PROC_SYMBOL));
  
!       tree func_decl = TAX_TREE_DECL (TAX (defining_identifier));
!       if (func_decl == NULL_TREE)
! 	{
! 	  /* Note that for PROC modes (which are non-REF) the function below
! 	     always returns a func_decl, never an address.  */
! 	  func_decl
! 	    = a68_make_proc_identity_declaration_decl (defining_identifier,
! 						       ctx.module_definition_name,
! 						       defining_operator /* indicant */);
! 	  TAX_TREE_DECL (TAX (defining_identifier)) = func_decl;
! 	}
! 
!       /* Create the body for the wrapper from the formal hole. */
!       a68_wrap_formal_proc_hole (p, func_decl);
! 
!       /* If the identity-declaration is in a public range then add the
! 	 declaration to the module's declarations list.  Otherwise chain the
! 	 declaration in the proper block and bind it.  */
!       if (PUBLIC_RANGE (TABLE (TAX (defining_identifier))))
! 	vec_safe_push (A68_MODULE_DEFINITION_DECLS, func_decl);
!       else
! 	a68_add_decl (func_decl);
! 
!       a68_add_decl_expr (fold_build1_loc (a68_get_node_location (p),
! 					  DECL_EXPR,
! 					  TREE_TYPE (func_decl),
! 					  func_decl));
!       return func_decl;
!     }
    else
!     {
!       /* The formal-hole is free standing. */
!       tree decl;
!       if (IS (MOID (p), PROC_SYMBOL))
! 	{
! 	  decl = a68_make_anonymous_routine_decl (MOID (p));
! 	  a68_add_decl (decl);
! 	  a68_wrap_formal_proc_hole (p, decl);
! 
! 	  /* XXX necessary */
! 	  a68_add_decl_expr (fold_build1_loc (a68_get_node_location (p),
! 					      DECL_EXPR,
! 					      TREE_TYPE (decl),
! 					      decl));
! 	  decl = fold_build1 (ADDR_EXPR,
! 			      build_pointer_type (TREE_TYPE (decl)),
! 			      decl);
! 	}
!       else
! 	decl = a68_wrap_formal_var_hole (p);
! 
!       return decl;
!     }
  }
  
  /* Lower an unit.
diff -Nrcpad gcc-16-20260201/gcc/algol68/a68-low.cc gcc-16-20260208/gcc/algol68/a68-low.cc
*** gcc-16-20260201/gcc/algol68/a68-low.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/algol68/a68-low.cc	Sun Feb  8 22:32:06 2026
*************** a68_make_formal_hole_decl (NODE_T *p, co
*** 660,692 ****
    return decl;
  }
  
- /* Make an extern declaration for a formal hole that is a function.  */
- 
- tree
- a68_make_proc_formal_hole_decl (NODE_T *p, const char *extern_symbol)
- {
-   /* The CTYPE of MODE is a pointer to a function.  We need the pointed
-      function type for the FUNCTION_DECL.  */
-   tree type = TREE_TYPE (CTYPE (MOID (p)));
- 
-   gcc_assert (strlen (extern_symbol) > 0);
-   const char *sym = (extern_symbol[0] == '&'
- 		     ? extern_symbol + 1
- 		     : extern_symbol);
- 
-   tree decl = build_decl (a68_get_node_location (p),
- 			  FUNCTION_DECL,
- 			  get_identifier (sym),
- 			  type);
-   DECL_EXTERNAL (decl) = 1;
-   TREE_PUBLIC (decl) = 1;
-   DECL_INITIAL (decl) = a68_get_skip_tree (MOID (p));
- 
-   if (extern_symbol[0] == '&')
-     decl = fold_build1 (ADDR_EXPR, type, decl);
-   return decl;
- }
- 
  /* Do a checked indirection.
  
     P is a tree node used for its location information.
--- 660,665 ----
*************** lower_module_declaration (NODE_T *p, LOW
*** 1448,1454 ****
  	  for (tree d : A68_MODULE_DEFINITION_DECLS)
  	    {
  	      if (TREE_CODE (d) == FUNCTION_DECL)
! 		cgraph_node::finalize_function (d, true);
  	      else
  		{
  		  rest_of_decl_compilation (d, 1, 0);
--- 1421,1429 ----
  	  for (tree d : A68_MODULE_DEFINITION_DECLS)
  	    {
  	      if (TREE_CODE (d) == FUNCTION_DECL)
! 		{
! 		  cgraph_node::finalize_function (d, true);
! 		}
  	      else
  		{
  		  rest_of_decl_compilation (d, 1, 0);
diff -Nrcpad gcc-16-20260201/gcc/algol68/a68-moids-misc.cc gcc-16-20260208/gcc/algol68/a68-moids-misc.cc
*** gcc-16-20260201/gcc/algol68/a68-moids-misc.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/algol68/a68-moids-misc.cc	Sun Feb  8 22:32:06 2026
*************** a68_determine_unique_mode (SOID_T *z, in
*** 1193,1199 ****
     metaproduction rule 561B in ga68.vw.  */
  
  bool
! a68_is_c_mode (MOID_T *m)
  {
    if (m == M_VOID || m == M_BOOL || m == M_CHAR)
      return true;
--- 1193,1199 ----
     metaproduction rule 561B in ga68.vw.  */
  
  bool
! a68_is_c_mode (MOID_T *m, int level)
  {
    if (m == M_VOID || m == M_BOOL || m == M_CHAR)
      return true;
*************** a68_is_c_mode (MOID_T *m)
*** 1204,1217 ****
    else if (IS_REAL (m))
      return true;
    else if (IS_REF (m))
!     return a68_is_c_mode (SUB (m));
    else if (IS (m, PROC_SYMBOL))
      {
        bool yielded_mode_valid = a68_is_c_mode (SUB (m));
        bool params_valid = true;
  
        for (PACK_T *z = PACK (m); z != NO_PACK; FORWARD (z))
! 	params_valid &= a68_is_c_mode (MOID (z));
  
        return yielded_mode_valid && params_valid;
      }
--- 1204,1222 ----
    else if (IS_REAL (m))
      return true;
    else if (IS_REF (m))
!     return a68_is_c_mode (SUB (m), level + 1);
    else if (IS (m, PROC_SYMBOL))
      {
        bool yielded_mode_valid = a68_is_c_mode (SUB (m));
        bool params_valid = true;
  
        for (PACK_T *z = PACK (m); z != NO_PACK; FORWARD (z))
! 	{
! 	  if (level == 0 && MOID (z) == M_STRING)
! 	    ;
! 	  else
! 	    params_valid &= a68_is_c_mode (MOID (z), level + 1);
! 	}
  
        return yielded_mode_valid && params_valid;
      }
*************** a68_is_c_mode (MOID_T *m)
*** 1220,1226 ****
        bool fields_valid = true;
  
        for (PACK_T *z = PACK (m); z != NO_PACK; FORWARD (z))
! 	fields_valid &= a68_is_c_mode (MOID (z));
        return fields_valid;
      }
  
--- 1225,1231 ----
        bool fields_valid = true;
  
        for (PACK_T *z = PACK (m); z != NO_PACK; FORWARD (z))
! 	fields_valid &= a68_is_c_mode (MOID (z), level + 1);
        return fields_valid;
      }
  
diff -Nrcpad gcc-16-20260201/gcc/algol68/a68-parser-extract.cc gcc-16-20260208/gcc/algol68/a68-parser-extract.cc
*** gcc-16-20260201/gcc/algol68/a68-parser-extract.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/algol68/a68-parser-extract.cc	Sun Feb  8 22:32:06 2026
*************** a68_extract_indicants (NODE_T *p)
*** 416,422 ****
  		  else
  		    {
  		      q = skip_module_text (NEXT (q));
! 		      FORWARD (q);
  		    }
  		}
  	      else
--- 416,425 ----
  		  else
  		    {
  		      q = skip_module_text (NEXT (q));
! 		      if (q == NO_NODE)
! 			siga = false;
! 		      else
! 			FORWARD (q);
  		    }
  		}
  	      else
*************** extract_identities (NODE_T *p)
*** 772,778 ****
  		    {
  		      NODE_T *actual_param = NEXT (NEXT (q));
  		      if (actual_param != NO_NODE && IS (actual_param, FORMAL_NEST_SYMBOL))
! 			IN_PROC (tag) = true;
  		    }
  		  FORWARD (q);
  		  ATTRIBUTE (q) = ALT_EQUALS_SYMBOL;
--- 775,781 ----
  		    {
  		      NODE_T *actual_param = NEXT (NEXT (q));
  		      if (actual_param != NO_NODE && IS (actual_param, FORMAL_NEST_SYMBOL))
! 			NEST_PROC (tag) = true;
  		    }
  		  FORWARD (q);
  		  ATTRIBUTE (q) = ALT_EQUALS_SYMBOL;
diff -Nrcpad gcc-16-20260201/gcc/algol68/a68-parser.cc gcc-16-20260208/gcc/algol68/a68-parser.cc
*** gcc-16-20260201/gcc/algol68/a68-parser.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/algol68/a68-parser.cc	Sun Feb  8 22:32:06 2026
*************** a68_new_tag (void)
*** 778,783 ****
--- 778,784 ----
    PRIO (z) = 0;
    USE (z) = false;
    IN_PROC (z) = false;
+   NEST_PROC (z) = false;
    HEAP (z) = false;
    YOUNGEST_ENVIRON (z) = PRIMAL_SCOPE;
    LOC_ASSIGNED (z) = false;
diff -Nrcpad gcc-16-20260201/gcc/algol68/a68-types.h gcc-16-20260208/gcc/algol68/a68-types.h
*** gcc-16-20260201/gcc/algol68/a68-types.h	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/algol68/a68-types.h	Sun Feb  8 22:32:06 2026
*************** struct GTY(()) TABLE_T
*** 596,601 ****
--- 596,606 ----
     are optimized in a similar way than variable declarations in order to avoid
     indirect addressing.
  
+    NEST_PROC is set when the defining identifier has been set in an
+    identity-declaration of a proc mode with a formal hole as actual parameter.
+    These declarations are optimized in a similar way than variable declarations
+    in order to avoid indirect addressing.
+ 
     YOUNGEST_ENVIRON is used when NODE is either a ROUTINE_TEXT or a
     FORMAT_TEXT, and contains the youngest (higher) lexical level of any object
     directly declared in the routine or format body.  This is filled in and used
*************** struct GTY((chain_next ("%h.next"))) TAG
*** 620,626 ****
    MOID_T *type;
    NODE_T *node, *unit;
    const char *value;
!   bool scope_assigned, use, in_proc, loc_assigned, portable, variable;
    bool ascribed_routine_text, is_recursive, publicized;
    int priority, heap, scope, youngest_environ, number;
    STATUS_MASK_T status;
--- 625,631 ----
    MOID_T *type;
    NODE_T *node, *unit;
    const char *value;
!   bool scope_assigned, use, in_proc, nest_proc, loc_assigned, portable, variable;
    bool ascribed_routine_text, is_recursive, publicized;
    int priority, heap, scope, youngest_environ, number;
    STATUS_MASK_T status;
*************** struct GTY(()) A68_T
*** 1013,1018 ****
--- 1018,1024 ----
  #define MULTIPLE_MODE(p) ((p)->multiple_mode)
  #define NAME(p) ((p)->name)
  #define NEST(p) ((p)->nest)
+ #define NEST_PROC(p) ((p)->nest_proc)
  #define NEXT(p) ((p)->next)
  #define NEXT_NEXT(p) (NEXT (NEXT (p)))
  #define NEXT_NEXT_NEXT(p) (NEXT (NEXT_NEXT (p)))
diff -Nrcpad gcc-16-20260201/gcc/algol68/a68.h gcc-16-20260208/gcc/algol68/a68.h
*** gcc-16-20260201/gcc/algol68/a68.h	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/algol68/a68.h	Sun Feb  8 22:32:06 2026
*************** void a68_make_soid (SOID_T *s, int sort,
*** 476,482 ****
  void a68_make_strong (NODE_T *n, MOID_T *p, MOID_T *q);
  void a68_make_uniting_coercion (NODE_T *n, MOID_T *q);
  void a68_make_void (NODE_T *p, MOID_T *q);
! bool a68_is_c_mode (MOID_T *m);
  
  #define A68_DEPREF true
  #define A68_NO_DEPREF false
--- 476,482 ----
  void a68_make_strong (NODE_T *n, MOID_T *p, MOID_T *q);
  void a68_make_uniting_coercion (NODE_T *n, MOID_T *q);
  void a68_make_void (NODE_T *p, MOID_T *q);
! bool a68_is_c_mode (MOID_T *m, int level = 0);
  
  #define A68_DEPREF true
  #define A68_NO_DEPREF false
*************** tree a68_bits_ior (tree bits1, tree bits
*** 534,540 ****
  tree a68_bits_xor (tree bits1, tree bits2);
  tree a68_bits_elem (NODE_T *p, tree pos, tree bits);
  tree a68_bits_subset (tree bits1, tree bits2);
! tree a68_bits_shift (tree shift, tree bits);
  tree a68_bits_eq (tree a, tree b, location_t loc = UNKNOWN_LOCATION);
  tree a68_bits_ne (tree a, tree b, location_t loc = UNKNOWN_LOCATION);
  tree a68_bits_set (MOID_T *m, tree bits, tree numbit, location_t loc = UNKNOWN_LOCATION);
--- 534,540 ----
  tree a68_bits_xor (tree bits1, tree bits2);
  tree a68_bits_elem (NODE_T *p, tree pos, tree bits);
  tree a68_bits_subset (tree bits1, tree bits2);
! tree a68_bits_shift (NODE_T *p, tree shift, tree bits);
  tree a68_bits_eq (tree a, tree b, location_t loc = UNKNOWN_LOCATION);
  tree a68_bits_ne (tree a, tree b, location_t loc = UNKNOWN_LOCATION);
  tree a68_bits_set (MOID_T *m, tree bits, tree numbit, location_t loc = UNKNOWN_LOCATION);
*************** tree a68_make_proc_identity_declaration_
*** 815,821 ****
  					      bool indicant = false, bool external = false,
  					      const char *extern_symbol = NULL);
  tree a68_make_formal_hole_decl (NODE_T *p, const char *extern_symbol);
- tree a68_make_proc_formal_hole_decl (NODE_T *p, const char *extern_symbol);
  tree a68_make_anonymous_routine_decl (MOID_T *mode);
  tree a68_get_skip_tree (MOID_T *m);
  tree a68_get_empty (void);
--- 815,820 ----
*************** tree a68_union_value (MOID_T *mode, tree
*** 857,862 ****
--- 856,866 ----
  tree a68_union_translate_overhead (MOID_T *from, tree from_overhead, MOID_T *to);
  bool a68_union_contains_mode (MOID_T *p, MOID_T *q);
  
+ /* a68-low-holes.cc */
+ 
+ tree a68_wrap_formal_var_hole (NODE_T *p);
+ void a68_wrap_formal_proc_hole (NODE_T *p, tree fndecl);
+ 
  /* a68-low-units.cc  */
  
  tree a68_lower_identifier (NODE_T *p, LOW_CTX_T ctx);
diff -Nrcpad gcc-16-20260201/gcc/algol68/ga68.texi gcc-16-20260208/gcc/algol68/ga68.texi
*** gcc-16-20260201/gcc/algol68/ga68.texi	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/algol68/ga68.texi	Sun Feb  8 22:32:06 2026
*************** As C @code{unsigned long long} or as C @
*** 1305,1310 ****
--- 1305,1321 ----
  As C @code{float}
  @item @code{@B{long} @B{real}}
  As C @code{double}
+ @item @code{string} but only as formal parameters of procedures
+ Each Algol 68 string formal parameter turns into three parameters in C:
+ 
+ @table @code
+ @item uint32_t *s
+ A pointer to the UCS-4 characters composing the string.
+ @item size_t len
+ The length of @code{s} in number of characters.
+ @item size_t stride
+ The distance in bytes between each character in @code{s}.
+ @end table
  @item @B{proc} with accepted formal parameter modes and yielded mode
  As the corresponding C functions.
  @item Structs with fields of accepted modes
*************** in the elements of the given bits operan
*** 2799,2814 ****
  
  @deftypefn Operator {} {@B{SHL}} {= (@B{l} @B{bits} a, @B{int} n) @B{l} @B{bits}}
  @deftypefnx Operator {} {@B{UP}} {= (@B{l} @B{bits} a, @B{int} n) @B{l} @B{bits}}
! Dyadic operator that yields the given bits operand shifted @code{n}
! positions to the left.  Extra elements introduced on the right are
! initialized to @code{@B{false}}.
  @end deftypefn
  
  @deftypefn Operator {} {@B{SHR}} {= (@B{l} @B{bits} a, @B{int} n) @B{l} @B{bits}}
  @deftypefnx Operator {} {@B{DOWN}} {= (@B{l} @B{bits} a, @B{int} n) @B{l} @B{bits}}
! Dyadic operator that yields the given bits operand shifted @code{n}
! positions to the right.  Extra elements introduced on the left are
! initialized to @code{@B{false}}.
  @end deftypefn
  
  @subsection Relational
--- 2810,2831 ----
  
  @deftypefn Operator {} {@B{SHL}} {= (@B{l} @B{bits} a, @B{int} n) @B{l} @B{bits}}
  @deftypefnx Operator {} {@B{UP}} {= (@B{l} @B{bits} a, @B{int} n) @B{l} @B{bits}}
! Dyadic operator that yields the given bits operand shifted @code{ABS
! n} positions to the left if @code{n >= 0} or @code{ABS n} positions to
! the right if @code{n < 0}.  Extra elements introduced on the right or
! left are initialized to @code{@B{false}}.  If @code{ABS n >
! L_bits_width} then the resulting bits value has all bits set to
! @code{false}.
  @end deftypefn
  
  @deftypefn Operator {} {@B{SHR}} {= (@B{l} @B{bits} a, @B{int} n) @B{l} @B{bits}}
  @deftypefnx Operator {} {@B{DOWN}} {= (@B{l} @B{bits} a, @B{int} n) @B{l} @B{bits}}
! Dyadic operator that yields the given bits operand shifted @code{ABS
! n} positions to the right if @code{n >= 0} or @code{ABS n} positions
! to the left if @code{n < 0}.  Extra elements introduced on the right
! or left are initialized to @code{@B{false}}.  If @code{ABS n >
! L_bits_width} then the resulting bits value has all bits set to
! @code{false}.
  @end deftypefn
  
  @subsection Relational
*************** given bits arguments.
*** 3039,3058 ****
  
  @deftypefn Operator {} {@B{set}} {= (@B{l} @B{bits} b, @B{int} n) @B{l} @B{bits}}
  Dyadic operator that sets the @code{n}th least significant bit in
! @code{@B{b}}.  If @code{n} is not in the range @code{[1,L_bits_width]}
! then the operator yields @B{b}.
  @end deftypefn
  
  @deftypefn Operator {} {@B{clear}} {= (@B{l} @B{bits} b, @B{int} n) @B{l} @B{bits}}
  Dyadic operator that clears the @code{n}th least significant bit in
! @code{@B{b}}.  If @code{n} is not in the range @code{[1,L_bits_width]}
! then the operator yields @B{b}.
  @end deftypefn
  
  @deftypefn Operator {} {@B{test}} {= (@B{l} @B{bits} b, @B{int} n) @B{bool}}
  Dyadic operator that tests whether the @code{n}th least significant
! bit in @code{@B{b}} is set. If @code{n} is not in the range
! @code{1,L_bits_width]} then the operator yields @B{false}.
  @end deftypefn
  
  @node Extended math procedures
--- 3056,3076 ----
  
  @deftypefn Operator {} {@B{set}} {= (@B{l} @B{bits} b, @B{int} n) @B{l} @B{bits}}
  Dyadic operator that sets the @code{n}th least significant bit in
! @code{@B{b}}, where @code{n} is zero based.  If @code{n} is not in the
! range @code{[0,L_bits_width)} then the operator yields @B{b}.
  @end deftypefn
  
  @deftypefn Operator {} {@B{clear}} {= (@B{l} @B{bits} b, @B{int} n) @B{l} @B{bits}}
  Dyadic operator that clears the @code{n}th least significant bit in
! @code{@B{b}}, where @code{n} is zero based.  If @code{n} is not in the
! range @code{[0,L_bits_width)} then the operator yields @B{b}.
  @end deftypefn
  
  @deftypefn Operator {} {@B{test}} {= (@B{l} @B{bits} b, @B{int} n) @B{bool}}
  Dyadic operator that tests whether the @code{n}th least significant
! bit in @code{@B{b}} is set, where @code{n} is zero based. If @code{n}
! is not in the range @code{0,L_bits_width)} then the operator yields
! @B{false}.
  @end deftypefn
  
  @node Extended math procedures
diff -Nrcpad gcc-16-20260201/gcc/alias.cc gcc-16-20260208/gcc/alias.cc
*** gcc-16-20260201/gcc/alias.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/alias.cc	Sun Feb  8 22:32:06 2026
*************** get_alias_set (tree t)
*** 948,954 ****
    else
      {
        t = TYPE_CANONICAL (t);
!       gcc_checking_assert (!TYPE_STRUCTURAL_EQUALITY_P (t));
      }
  
    /* If this is a type with a known alias set, return it.  */
--- 948,959 ----
    else
      {
        t = TYPE_CANONICAL (t);
!       gcc_checking_assert (TYPE_CANONICAL (t) == t);
!       if (t != TYPE_MAIN_VARIANT (t))
! 	{
! 	  t = TYPE_MAIN_VARIANT (t);
! 	  gcc_checking_assert (TYPE_CANONICAL (t) == t);
! 	}
      }
  
    /* If this is a type with a known alias set, return it.  */
*************** memory_modified_in_insn_p (const_rtx mem
*** 3337,3343 ****
      return true;
    memory_modified = false;
    note_stores (as_a<const rtx_insn *> (insn), memory_modified_1,
! 	       CONST_CAST_RTX(mem));
    return memory_modified;
  }
  
--- 3342,3348 ----
      return true;
    memory_modified = false;
    note_stores (as_a<const rtx_insn *> (insn), memory_modified_1,
! 	       const_cast<rtx> (mem));
    return memory_modified;
  }
  
diff -Nrcpad gcc-16-20260201/gcc/analyzer/ChangeLog gcc-16-20260208/gcc/analyzer/ChangeLog
*** gcc-16-20260201/gcc/analyzer/ChangeLog	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/analyzer/ChangeLog	Sun Feb  8 22:32:06 2026
***************
*** 1,3 ****
--- 1,43 ----
+ 2026-02-07  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	PR analyzer/116228
+ 	* kf-lang-cp.cc (kf_operator_new::impl_call_post): Don't try to
+ 	add a constraint if the return value is discarded.
+ 
+ 2026-02-06  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	PR analyzer/98447
+ 	* common.h: Include "value-range.h".
+ 	* region-model.cc: Include "value-relation.h" and "range-op.h".
+ 	(region_model::eval_condition): Try using range_op to see if we
+ 	can get a known boolean from the value_ranges of the operands.
+ 	* svalue.cc: Include "value-relation.h" and "range-op.h".
+ 	(type_can_have_value_range_p): New.
+ 	(svalue::maybe_get_value_range): New.
+ 	(constant_svalue::maybe_get_value_range): New.
+ 	(unknown_svalue::maybe_get_value_range): New.
+ 	(unaryop_svalue::maybe_get_value_range): New.
+ 	(binop_svalue::maybe_get_value_range): New.
+ 	* svalue.h (svalue::maybe_get_value_range): New vfunc decl.
+ 	(constant_svalue::maybe_get_value_range): New decl.
+ 	(unknown_svalue::maybe_get_value_range): New decl.
+ 	(unaryop_svalue::maybe_get_value_range): New decl.
+ 	(binop_svalue::maybe_get_value_range): New decl.
+ 
+ 2026-02-06  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	PR analyzer/117491
+ 	* region-model-manager.cc
+ 	(region_model_manager::maybe_fold_repeated_svalue): Don't ICE when
+ 	inner_svalue has null type.
+ 
+ 2026-02-03  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	PR analyzer/116865
+ 	* region-model-manager.cc
+ 	(region_model_manager::get_offset_region): Use POINTER_PLUS_EXPR
+ 	rather than PLUS_EXPR for pointer offsets.
+ 
  2026-01-31  David Malcolm  <dmalcolm@redhat.com>
  
  	PR analyzer/123880
diff -Nrcpad gcc-16-20260201/gcc/analyzer/common.h gcc-16-20260208/gcc/analyzer/common.h
*** gcc-16-20260201/gcc/analyzer/common.h	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/analyzer/common.h	Sun Feb  8 22:32:06 2026
*************** along with GCC; see the file COPYING3.
*** 41,46 ****
--- 41,47 ----
  #include "function.h"
  #include "json.h"
  #include "tristate.h"
+ #include "value-range.h"
  
  class graphviz_out;
  
diff -Nrcpad gcc-16-20260201/gcc/analyzer/kf-lang-cp.cc gcc-16-20260208/gcc/analyzer/kf-lang-cp.cc
*** gcc-16-20260201/gcc/analyzer/kf-lang-cp.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/analyzer/kf-lang-cp.cc	Sun Feb  8 22:32:06 2026
*************** public:
*** 140,146 ****
  
      /* If the call is guaranteed to return nonnull
         then add a nonnull constraint to the allocated region.  */
!     if (!TREE_NOTHROW (callee_fndecl) && flag_exceptions)
        {
  	const svalue *null_sval
  	  = mgr->get_or_create_null_ptr (cd.get_lhs_type ());
--- 140,148 ----
  
      /* If the call is guaranteed to return nonnull
         then add a nonnull constraint to the allocated region.  */
!     if (!TREE_NOTHROW (callee_fndecl)
! 	&& flag_exceptions
! 	&& cd.get_lhs_type ())
        {
  	const svalue *null_sval
  	  = mgr->get_or_create_null_ptr (cd.get_lhs_type ());
diff -Nrcpad gcc-16-20260201/gcc/analyzer/region-model-manager.cc gcc-16-20260208/gcc/analyzer/region-model-manager.cc
*** gcc-16-20260201/gcc/analyzer/region-model-manager.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/analyzer/region-model-manager.cc	Sun Feb  8 22:32:06 2026
*************** region_model_manager::maybe_fold_repeate
*** 1065,1084 ****
  
    /* If INNER_SVALUE is the same size as OUTER_SIZE,
       turn into simply a cast.  */
!   if (tree cst_outer_num_bytes = outer_size->maybe_get_constant ())
!     {
!       HOST_WIDE_INT num_bytes_inner_svalue
! 	= int_size_in_bytes (inner_svalue->get_type ());
!       if (num_bytes_inner_svalue != -1)
! 	if (num_bytes_inner_svalue
! 	    == (HOST_WIDE_INT)tree_to_uhwi (cst_outer_num_bytes))
! 	  {
! 	    if (type)
! 	      return get_or_create_cast (type, inner_svalue);
! 	    else
! 	      return inner_svalue;
! 	  }
!     }
  
    /* Handle zero-fill of a specific type.  */
    if (tree cst = inner_svalue->maybe_get_constant ())
--- 1065,1085 ----
  
    /* If INNER_SVALUE is the same size as OUTER_SIZE,
       turn into simply a cast.  */
!   if (inner_svalue->get_type ())
!     if (tree cst_outer_num_bytes = outer_size->maybe_get_constant ())
!       {
! 	HOST_WIDE_INT num_bytes_inner_svalue
! 	  = int_size_in_bytes (inner_svalue->get_type ());
! 	if (num_bytes_inner_svalue != -1)
! 	  if (num_bytes_inner_svalue
! 	      == (HOST_WIDE_INT)tree_to_uhwi (cst_outer_num_bytes))
! 	    {
! 	      if (type)
! 		return get_or_create_cast (type, inner_svalue);
! 	      else
! 		return inner_svalue;
! 	    }
!       }
  
    /* Handle zero-fill of a specific type.  */
    if (tree cst = inner_svalue->maybe_get_constant ())
*************** region_model_manager::get_offset_region
*** 1732,1738 ****
        const svalue *sval_x = parent_offset_reg->get_byte_offset ();
        const svalue *sval_sum
  	= get_or_create_binop (byte_offset->get_type (),
! 			       PLUS_EXPR, sval_x, byte_offset);
        return get_offset_region (parent->get_parent_region (), type, sval_sum);
      }
  
--- 1733,1739 ----
        const svalue *sval_x = parent_offset_reg->get_byte_offset ();
        const svalue *sval_sum
  	= get_or_create_binop (byte_offset->get_type (),
! 			       POINTER_PLUS_EXPR, sval_x, byte_offset);
        return get_offset_region (parent->get_parent_region (), type, sval_sum);
      }
  
diff -Nrcpad gcc-16-20260201/gcc/analyzer/region-model.cc gcc-16-20260208/gcc/analyzer/region-model.cc
*** gcc-16-20260201/gcc/analyzer/region-model.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/analyzer/region-model.cc	Sun Feb  8 22:32:06 2026
*************** along with GCC; see the file COPYING3.
*** 46,51 ****
--- 46,53 ----
  #include "selftest-tree.h"
  #include "context.h"
  #include "channels.h"
+ #include "value-relation.h"
+ #include "range-op.h"
  
  #include "text-art/tree-widget.h"
  
*************** region_model::eval_condition (const sval
*** 5348,5353 ****
--- 5350,5379 ----
  	}
      }
  
+   /* Try range_op, but avoid cases where we have been sloppy about types.  */
+   if (lhs->get_type ()
+       && rhs->get_type ()
+       && range_compatible_p (lhs->get_type (), rhs->get_type ()))
+     {
+       value_range lhs_vr, rhs_vr;
+       if (lhs->maybe_get_value_range (lhs_vr))
+ 	if (rhs->maybe_get_value_range (rhs_vr))
+ 	  {
+ 	    range_op_handler handler (op);
+ 	    if (handler)
+ 	      {
+ 		int_range_max out;
+ 		if (handler.fold_range (out, boolean_type_node, lhs_vr, rhs_vr))
+ 		  {
+ 		    if (out.zero_p ())
+ 		      return tristate::TS_FALSE;
+ 		    if (out.nonzero_p ())
+ 		      return tristate::TS_TRUE;
+ 		  }
+ 	      }
+ 	  }
+     }
+ 
    /* Attempt to unwrap cast if there is one, and the types match.  */
    tree lhs_type = lhs->get_type ();
    tree rhs_type = rhs->get_type ();
diff -Nrcpad gcc-16-20260201/gcc/analyzer/svalue.cc gcc-16-20260208/gcc/analyzer/svalue.cc
*** gcc-16-20260201/gcc/analyzer/svalue.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/analyzer/svalue.cc	Sun Feb  8 22:32:06 2026
*************** along with GCC; see the file COPYING3.
*** 25,30 ****
--- 25,32 ----
  #include "fold-const.h"
  #include "diagnostic.h"
  #include "tree-diagnostic.h"
+ #include "value-relation.h"
+ #include "range-op.h"
  
  #include "text-art/dump.h"
  
*************** svalue::maybe_get_type_from_typeinfo ()
*** 880,885 ****
--- 882,915 ----
    return NULL_TREE;
  }
  
+ /* Return true if we can get a value_range for TYPE (which could be
+    NULL_TREE); false otherwise.  */
+ 
+ static bool
+ type_can_have_value_range_p (tree type)
+ {
+   if (!type)
+     return false;
+   if (!irange::supports_p (type))
+     return false;
+   return true;
+ }
+ 
+ /* Base implementation of svalue::maybe_get_value_range vfunc.
+    If there is a suitable underlying type, write a "varying" for it to OUT
+    (for "any value of that type") and return true; otherwise return false.  */
+ 
+ bool
+ svalue::maybe_get_value_range (value_range &out) const
+ {
+   tree type = get_type ();
+   if (!type_can_have_value_range_p (type))
+     return false;
+ 
+   out.set_varying (type);
+   return true;
+ }
+ 
  /* class region_svalue : public svalue.  */
  
  /* Implementation of svalue::dump_to_pp vfunc for region_svalue.  */
*************** constant_svalue::all_zeroes_p () const
*** 1165,1170 ****
--- 1195,1216 ----
    return zerop (m_cst_expr);
  }
  
+ 
+ /* Implementation of svalue::maybe_get_value_range for constant_svalue.
+    If there is a suitable underlying type, write the value_range for the
+    single value of m_cst_expr to OUT and return true; otherwise return
+    false.  */
+ 
+ bool
+ constant_svalue::maybe_get_value_range (value_range &out) const
+ {
+   if (!type_can_have_value_range_p (get_type ()))
+     return false;
+ 
+   out = value_range (m_cst_expr, m_cst_expr);
+   return true;
+ }
+ 
  /* class unknown_svalue : public svalue.  */
  
  /* Implementation of svalue::dump_to_pp vfunc for unknown_svalue.  */
*************** unknown_svalue::maybe_fold_bits_within (
*** 1228,1233 ****
--- 1274,1287 ----
    return mgr->get_or_create_unknown_svalue (type);
  }
  
+ bool
+ unknown_svalue::maybe_get_value_range (value_range &) const
+ {
+   /* Don't attempt to participate in range ops.  */
+   return false;
+ }
+ 
+ 
  /* Get a string for KIND for use in debug dumps.  */
  
  const char *
*************** unaryop_svalue::maybe_fold_bits_within (
*** 1518,1523 ****
--- 1572,1604 ----
    return nullptr;
  }
  
+ /* Implementation of svalue::maybe_get_value_range for unaryop_svalue.  */
+ 
+ bool
+ unaryop_svalue::maybe_get_value_range (value_range &out) const
+ {
+   tree type = get_type ();
+   if (!type_can_have_value_range_p (type))
+     return false;
+ 
+   value_range arg_vr;
+   if (m_arg->maybe_get_value_range (arg_vr))
+     {
+       range_op_handler handler (m_op);
+       if (handler)
+ 	{
+ 	  /* For unary ops, range_op_hander::fold_range expects
+ 	     a VARYING of the unknown value as the 2nd operand.  */
+ 	  value_range varying (type);
+ 	  varying.set_varying (type);
+ 	  out.set_type (type);
+ 	  if (handler.fold_range (out, type, arg_vr, varying))
+ 	    return true;
+ 	}
+     }
+   return false;
+ }
+ 
  /* class binop_svalue : public svalue.  */
  
  /* Return whether OP be printed as an infix operator.  */
*************** sub_svalue::sub_svalue (symbol::id_t id,
*** 1634,1639 ****
--- 1715,1752 ----
    gcc_assert (parent_svalue->can_have_associated_state_p ());
  }
  
+ /* Implementation of svalue::maybe_get_value_range for binop_svalue.  */
+ 
+ bool
+ binop_svalue::maybe_get_value_range (value_range &out) const
+ {
+   tree type = get_type ();
+   if (!type_can_have_value_range_p (type))
+     return false;
+ 
+   /* Avoid cases where we have been sloppy about types.  */
+   if (!m_arg0->get_type ())
+     return false;
+   if (!m_arg1->get_type ())
+     return false;
+   if (!range_compatible_p (m_arg0->get_type (), m_arg1->get_type ()))
+     return false;
+ 
+   value_range lhs, rhs;
+   if (m_arg0->maybe_get_value_range (lhs))
+     if (m_arg1->maybe_get_value_range (rhs))
+       {
+ 	range_op_handler handler (m_op);
+ 	if (handler)
+ 	  {
+ 	    out.set_type (type);
+ 	    if (handler.fold_range (out, get_type (), lhs, rhs))
+ 	      return true;
+ 	  }
+       }
+   return false;
+ }
+ 
  /* Implementation of svalue::dump_to_pp vfunc for sub_svalue.  */
  
  void
diff -Nrcpad gcc-16-20260201/gcc/analyzer/svalue.h gcc-16-20260208/gcc/analyzer/svalue.h
*** gcc-16-20260201/gcc/analyzer/svalue.h	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/analyzer/svalue.h	Sun Feb  8 22:32:06 2026
*************** public:
*** 190,195 ****
--- 190,199 ----
  
    tree maybe_get_type_from_typeinfo () const;
  
+   /* If we can get a value_range for this svalue, write it to OUT
+      and return true.  Otherwise return false.  */
+   virtual bool maybe_get_value_range (value_range &out) const;
+ 
   protected:
    svalue (complexity c, symbol::id_t id, tree type)
    : symbol (c, id), m_type (type)
*************** public:
*** 366,371 ****
--- 370,377 ----
  
    bool all_zeroes_p () const final override;
  
+   bool maybe_get_value_range (value_range &out) const final override;
+ 
   private:
    tree m_cst_expr;
  };
*************** public:
*** 417,422 ****
--- 423,430 ----
  			  const bit_range &subrange,
  			  region_model_manager *mgr) const final override;
  
+   bool maybe_get_value_range (value_range &out) const final override;
+ 
    /* Unknown values are singletons per-type, so can't have state.  */
    bool can_have_associated_state_p () const final override { return false; }
  };
*************** public:
*** 763,768 ****
--- 771,778 ----
  			  const bit_range &subrange,
  			  region_model_manager *mgr) const final override;
  
+   bool maybe_get_value_range (value_range &out) const final override;
+ 
   private:
    enum tree_code m_op;
    const svalue *m_arg;
*************** public:
*** 859,864 ****
--- 869,876 ----
    bool implicitly_live_p (const svalue_set *,
  			  const region_model *) const final override;
  
+   bool maybe_get_value_range (value_range &out) const final override;
+ 
    enum tree_code get_op () const { return m_op; }
    const svalue *get_arg0 () const { return m_arg0; }
    const svalue *get_arg1 () const { return m_arg1; }
diff -Nrcpad gcc-16-20260201/gcc/attribs.cc gcc-16-20260208/gcc/attribs.cc
*** gcc-16-20260201/gcc/attribs.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/attribs.cc	Sun Feb  8 22:32:06 2026
*************** register_scoped_attribute (const struct
*** 371,377 ****
  	 ->find_slot_with_hash (&str, substring_hash (str.str, str.length),
  				INSERT);
    gcc_assert (!*slot || attr->name[0] == '*');
!   *slot = CONST_CAST (struct attribute_spec *, attr);
  }
  
  /* Return the spec for the scoped attribute with namespace NS and
--- 371,377 ----
  	 ->find_slot_with_hash (&str, substring_hash (str.str, str.length),
  				INSERT);
    gcc_assert (!*slot || attr->name[0] == '*');
!   *slot = const_cast<struct attribute_spec *> (attr);
  }
  
  /* Return the spec for the scoped attribute with namespace NS and
*************** build_type_attribute_qual_variant (tree
*** 1322,1336 ****
  	  warning (OPT_Wattributes,
  		   "ignoring attributes applied to %qT after definition",
  		   TYPE_MAIN_VARIANT (ttype));
! 	  return lang_hooks.types.build_lang_qualified_type (ttype, NULL_TREE,
! 							     quals);
  	}
  
!       tree mtype = NULL_TREE;
!       if (otype != TYPE_MAIN_VARIANT (otype))
! 	mtype = TYPE_MAIN_VARIANT (otype);
!       ttype = lang_hooks.types.build_lang_qualified_type (ttype, mtype,
! 							  TYPE_UNQUALIFIED);
  
        tree dtype = ntype = build_distinct_type_copy (ttype);
  
--- 1322,1335 ----
  	  warning (OPT_Wattributes,
  		   "ignoring attributes applied to %qT after definition",
  		   TYPE_MAIN_VARIANT (ttype));
! 	  return build_qualified_type (ttype, quals);
  	}
  
!       ttype = build_qualified_type (ttype, TYPE_UNQUALIFIED);
!       if (lang_hooks.types.copy_lang_qualifiers
! 	  && otype != TYPE_MAIN_VARIANT (otype))
! 	ttype = (lang_hooks.types.copy_lang_qualifiers
! 		 (ttype, TYPE_MAIN_VARIANT (otype)));
  
        tree dtype = ntype = build_distinct_type_copy (ttype);
  
*************** build_type_attribute_qual_variant (tree
*** 1355,1369 ****
        else if (TYPE_CANONICAL (ntype) == ntype)
  	TYPE_CANONICAL (ntype) = TYPE_CANONICAL (ttype);
  
!       if (otype != TYPE_MAIN_VARIANT (otype))
! 	mtype = otype;
!       else
! 	mtype = NULL_TREE;
!       ttype = lang_hooks.types.build_lang_qualified_type (ntype, mtype, quals);
      }
    else if (TYPE_QUALS (ttype) != quals)
!     ttype = lang_hooks.types.build_lang_qualified_type (ttype, NULL_TREE,
! 							quals);
  
    return ttype;
  }
--- 1354,1366 ----
        else if (TYPE_CANONICAL (ntype) == ntype)
  	TYPE_CANONICAL (ntype) = TYPE_CANONICAL (ttype);
  
!       ttype = build_qualified_type (ntype, quals);
!       if (lang_hooks.types.copy_lang_qualifiers
! 	  && otype != TYPE_MAIN_VARIANT (otype))
! 	ttype = lang_hooks.types.copy_lang_qualifiers (ttype, otype);
      }
    else if (TYPE_QUALS (ttype) != quals)
!     ttype = build_qualified_type (ttype, quals);
  
    return ttype;
  }
*************** comp_type_attributes (const_tree type1,
*** 1512,1518 ****
        if (!as || as->affects_type_identity == false)
  	continue;
  
!       attr = find_same_attribute (a, CONST_CAST_TREE (a2));
        if (!attr || !attribute_value_equal (a, attr))
  	break;
      }
--- 1509,1515 ----
        if (!as || as->affects_type_identity == false)
  	continue;
  
!       attr = find_same_attribute (a, const_cast<tree> (a2));
        if (!attr || !attribute_value_equal (a, attr))
  	break;
      }
*************** comp_type_attributes (const_tree type1,
*** 1526,1532 ****
  	  if (!as || as->affects_type_identity == false)
  	    continue;
  
! 	  if (!find_same_attribute (a, CONST_CAST_TREE (a1)))
  	    break;
  	  /* We don't need to compare trees again, as we did this
  	     already in first loop.  */
--- 1523,1529 ----
  	  if (!as || as->affects_type_identity == false)
  	    continue;
  
! 	  if (!find_same_attribute (a, const_cast<tree> (a1)))
  	    break;
  	  /* We don't need to compare trees again, as we did this
  	     already in first loop.  */
*************** comp_type_attributes (const_tree type1,
*** 1536,1548 ****
        if (!a)
  	return 1;
      }
!   if (lookup_attribute ("transaction_safe", CONST_CAST_TREE (a)))
      return 0;
    if ((lookup_attribute ("nocf_check", TYPE_ATTRIBUTES (type1)) != NULL)
        ^ (lookup_attribute ("nocf_check", TYPE_ATTRIBUTES (type2)) != NULL))
      return 0;
!   int strub_ret = strub_comptypes (CONST_CAST_TREE (type1),
! 				   CONST_CAST_TREE (type2));
    if (strub_ret == 0)
      return strub_ret;
    /* As some type combinations - like default calling-convention - might
--- 1533,1545 ----
        if (!a)
  	return 1;
      }
!   if (lookup_attribute ("transaction_safe", const_cast<tree> (a)))
      return 0;
    if ((lookup_attribute ("nocf_check", TYPE_ATTRIBUTES (type1)) != NULL)
        ^ (lookup_attribute ("nocf_check", TYPE_ATTRIBUTES (type2)) != NULL))
      return 0;
!   int strub_ret = strub_comptypes (const_cast<tree> (type1),
! 				   const_cast<tree> (type2));
    if (strub_ret == 0)
      return strub_ret;
    /* As some type combinations - like default calling-convention - might
*************** attribute_list_contained (const_tree l1,
*** 2116,2122 ****
  	 modify its argument and the return value is assigned to a
  	 const_tree.  */
        for (attr = lookup_ident_attribute (get_attribute_name (t2),
! 					  CONST_CAST_TREE (l1));
  	   attr != NULL_TREE && !attribute_value_equal (t2, attr);
  	   attr = lookup_ident_attribute (get_attribute_name (t2),
  					  TREE_CHAIN (attr)))
--- 2113,2119 ----
  	 modify its argument and the return value is assigned to a
  	 const_tree.  */
        for (attr = lookup_ident_attribute (get_attribute_name (t2),
! 					  const_cast<tree> (l1));
  	   attr != NULL_TREE && !attribute_value_equal (t2, attr);
  	   attr = lookup_ident_attribute (get_attribute_name (t2),
  					  TREE_CHAIN (attr)))
*************** std::string
*** 2655,2661 ****
  attr_access::array_as_string (tree type) const
  {
    std::string typstr;
-   bool free_type = false;
  
    if (type == error_mark_node)
      return std::string ();
--- 2652,2657 ----
*************** attr_access::array_as_string (tree type)
*** 2701,2730 ****
  
        const int quals = TYPE_QUALS (type);
        type = build_array_type (eltype, index_type);
!       if (arat || TYPE_QUALS (type) != quals)
! 	{
! 	  /* We create a new array type which is only used during
! 	     printing.  Can't use build_type_attribute_qual_variant
! 	     because it might with some lang hooks e.g. try to push
! 	     qualifiers to the element type, while for the printing
! 	     this wants the element type qualifiers to be unmodified
! 	     and ARRAY_TYPE qualifiers to be a copy of the pointer
! 	     type qualifiers.  Furthermore, a type with somtimes
! 	     weird qualifiers or artificial attribute should be
! 	     freed right after the use.  */
! 	  type = copy_node (type);
! 	  if (arat)
! 	    {
! 	      TREE_CHAIN (arat) = TYPE_ATTRIBUTES (type);
! 	      TYPE_ATTRIBUTES (type) = arat;
! 	    }
! 	  TYPE_READONLY (type) = (quals & TYPE_QUAL_CONST) != 0;
! 	  TYPE_VOLATILE (type) = (quals & TYPE_QUAL_VOLATILE) != 0;
! 	  TYPE_ATOMIC (type) = (quals & TYPE_QUAL_ATOMIC) != 0;
! 	  TYPE_RESTRICT (type) = (quals & TYPE_QUAL_RESTRICT) != 0;
! 	  TYPE_ADDR_SPACE (type) = DECODE_QUAL_ADDR_SPACE (quals);
! 	  free_type = true;
! 	}
      }
  
    /* Format the type using the current pretty printer.  The generic tree
--- 2697,2703 ----
  
        const int quals = TYPE_QUALS (type);
        type = build_array_type (eltype, index_type);
!       type = build_type_attribute_qual_variant (type, arat, quals);
      }
  
    /* Format the type using the current pretty printer.  The generic tree
*************** attr_access::array_as_string (tree type)
*** 2732,2739 ****
    std::unique_ptr<pretty_printer> pp (global_dc->clone_printer ());
    pp_printf (pp.get (), "%qT", type);
    typstr = pp_formatted_text (pp.get ());
-   if (free_type)
-     ggc_free (type);
  
    return typstr;
  }
--- 2705,2710 ----
diff -Nrcpad gcc-16-20260201/gcc/builtins.cc gcc-16-20260208/gcc/builtins.cc
*** gcc-16-20260201/gcc/builtins.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/builtins.cc	Sun Feb  8 22:32:06 2026
*************** expand_builtin_memory_copy_args (tree de
*** 3788,3799 ****
        && CONST_INT_P (len_rtx)
        && (unsigned HOST_WIDE_INT) INTVAL (len_rtx) <= nbytes
        && can_store_by_pieces (INTVAL (len_rtx), builtin_memcpy_read_str,
! 			      CONST_CAST (char *, rep),
  			      dest_align, false))
      {
        dest_mem = store_by_pieces (dest_mem, INTVAL (len_rtx),
  				  builtin_memcpy_read_str,
! 				  CONST_CAST (char *, rep),
  				  dest_align, false, retmode);
        dest_mem = force_operand (XEXP (dest_mem, 0), target);
        dest_mem = convert_memory_address (ptr_mode, dest_mem);
--- 3788,3799 ----
        && CONST_INT_P (len_rtx)
        && (unsigned HOST_WIDE_INT) INTVAL (len_rtx) <= nbytes
        && can_store_by_pieces (INTVAL (len_rtx), builtin_memcpy_read_str,
! 			      const_cast<char *> (rep),
  			      dest_align, false))
      {
        dest_mem = store_by_pieces (dest_mem, INTVAL (len_rtx),
  				  builtin_memcpy_read_str,
! 				  const_cast<char *> (rep),
  				  dest_align, false, retmode);
        dest_mem = force_operand (XEXP (dest_mem, 0), target);
        dest_mem = convert_memory_address (ptr_mode, dest_mem);
*************** expand_builtin_strncpy (tree exp, rtx ta
*** 4142,4155 ****
        if (!p || dest_align == 0 || !tree_fits_uhwi_p (len)
  	  || !can_store_by_pieces (tree_to_uhwi (len),
  				   builtin_strncpy_read_str,
! 				   CONST_CAST (char *, p),
  				   dest_align, false))
  	return NULL_RTX;
  
        dest_mem = get_memory_rtx (dest, len);
        store_by_pieces (dest_mem, tree_to_uhwi (len),
  		       builtin_strncpy_read_str,
! 		       CONST_CAST (char *, p), dest_align, false,
  		       RETURN_BEGIN);
        dest_mem = force_operand (XEXP (dest_mem, 0), target);
        dest_mem = convert_memory_address (ptr_mode, dest_mem);
--- 4142,4155 ----
        if (!p || dest_align == 0 || !tree_fits_uhwi_p (len)
  	  || !can_store_by_pieces (tree_to_uhwi (len),
  				   builtin_strncpy_read_str,
! 				   const_cast<char *> (p),
  				   dest_align, false))
  	return NULL_RTX;
  
        dest_mem = get_memory_rtx (dest, len);
        store_by_pieces (dest_mem, tree_to_uhwi (len),
  		       builtin_strncpy_read_str,
! 		       const_cast<char *> (p), dest_align, false,
  		       RETURN_BEGIN);
        dest_mem = force_operand (XEXP (dest_mem, 0), target);
        dest_mem = convert_memory_address (ptr_mode, dest_mem);
*************** expand_builtin_memcmp (tree exp, rtx tar
*** 4927,4933 ****
    result = emit_block_cmp_hints (arg1_rtx, arg2_rtx, len_rtx,
  				 TREE_TYPE (len), target,
  				 result_eq, constfn,
! 				 CONST_CAST (char *, rep),
  				 tree_ctz (len));
  
    if (result)
--- 4927,4933 ----
    result = emit_block_cmp_hints (arg1_rtx, arg2_rtx, len_rtx,
  				 TREE_TYPE (len), target,
  				 result_eq, constfn,
! 				 const_cast<char *> (rep),
  				 tree_ctz (len));
  
    if (result)
diff -Nrcpad gcc-16-20260201/gcc/c/ChangeLog gcc-16-20260208/gcc/c/ChangeLog
*** gcc-16-20260201/gcc/c/ChangeLog	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/c/ChangeLog	Sun Feb  8 22:32:06 2026
***************
*** 1,3 ****
--- 1,26 ----
+ 2026-02-06  Torbjörn SVENSSON  <torbjorn.svensson@foss.st.com>
+ 
+ 	PR middle-end/123892
+ 	* c-decl.cc: Replace CONST_CAST with const_cast<>.
+ 	* c-parser.cc: Likewise.
+ 
+ 2026-02-05  Michal Jires  <mjires@suse.cz>
+ 
+ 	PR testsuite/123559
+ 	* c-decl.cc (c_write_global_declarations_1): Check and suppress
+ 	OPT_Wunused.
+ 	* c-typeck.cc (build_asm_expr): Suppress OPT_Wunused.
+ 
+ 2026-02-05  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Revert:
+ 	2026-02-05  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/101312
+ 	* c-tree.h (c_build_lang_qualified_type): Declare.
+ 	* c-objc-common.h (LANG_HOOKS_BUILD_LANG_QUALIFIED_TYPE): Define.
+ 	* c-objc-common.cc (c_build_lang_qualified_type): New function.
+ 
  2026-01-28  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
  
  	PR c++/102846
diff -Nrcpad gcc-16-20260201/gcc/c/c-decl.cc gcc-16-20260208/gcc/c/c-decl.cc
*** gcc-16-20260201/gcc/c/c-decl.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/c/c-decl.cc	Sun Feb  8 22:32:06 2026
*************** c_make_fname_decl (location_t loc, tree
*** 5015,5021 ****
    DECL_ARTIFICIAL (decl) = 1;
  
    init = build_string (length + 1, name);
!   free (CONST_CAST (char *, name));
    TREE_TYPE (init) = type;
    DECL_INITIAL (decl) = init;
  
--- 5015,5021 ----
    DECL_ARTIFICIAL (decl) = 1;
  
    init = build_string (length + 1, name);
!   free (const_cast<char *> (name));
    TREE_TYPE (init) = type;
    DECL_INITIAL (decl) = init;
  
*************** c_write_global_declarations_1 (tree glob
*** 13679,13703 ****
        if (TREE_CODE (decl) == FUNCTION_DECL
  	  && DECL_INITIAL (decl) == NULL_TREE
  	  && DECL_EXTERNAL (decl)
! 	  && !TREE_PUBLIC (decl))
  	{
  	  if (C_DECL_USED (decl))
  	    {
- 	      /* TODO: Add OPT_Wundefined-inline.  */
  	      if (pedwarn (input_location, 0, "%q+F used but never defined",
  			   decl))
! 		suppress_warning (decl /* OPT_Wundefined-inline.  */);
  	    }
  	  /* For -Wunused-function warn about unused static prototypes.  */
  	  else if (warn_unused_function
  		   && ! DECL_ARTIFICIAL (decl)
! 		   && ! warning_suppressed_p (decl, OPT_Wunused_function))
! 	    {
! 	      if (warning (OPT_Wunused_function,
! 			   "%q+F declared %<static%> but never defined",
! 			   decl))
! 		suppress_warning (decl, OPT_Wunused_function);
! 	    }
  	}
  
        wrapup_global_declaration_1 (decl);
--- 13679,13700 ----
        if (TREE_CODE (decl) == FUNCTION_DECL
  	  && DECL_INITIAL (decl) == NULL_TREE
  	  && DECL_EXTERNAL (decl)
! 	  && !TREE_PUBLIC (decl)
! 	  && !warning_suppressed_p (decl, OPT_Wunused))
  	{
  	  if (C_DECL_USED (decl))
  	    {
  	      if (pedwarn (input_location, 0, "%q+F used but never defined",
  			   decl))
! 		suppress_warning (decl, OPT_Wunused);
  	    }
  	  /* For -Wunused-function warn about unused static prototypes.  */
  	  else if (warn_unused_function
  		   && ! DECL_ARTIFICIAL (decl)
! 		   && warning (OPT_Wunused_function,
! 			       "%q+F declared %<static%> but never defined",
! 			       decl))
! 	    suppress_warning (decl, OPT_Wunused);
  	}
  
        wrapup_global_declaration_1 (decl);
diff -Nrcpad gcc-16-20260201/gcc/c/c-objc-common.cc gcc-16-20260208/gcc/c/c-objc-common.cc
*** gcc-16-20260201/gcc/c/c-objc-common.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/c/c-objc-common.cc	Sun Feb  8 22:32:06 2026
*************** c_register_features ()
*** 70,86 ****
      }
  }
  
- /* Langhook for building qualified types.  */
- 
- tree
- c_build_lang_qualified_type (tree type, tree, int type_quals)
- {
-   if (TREE_CODE (type) == ARRAY_TYPE)
-     return c_build_qualified_type (type, type_quals);
-   else
-     return build_qualified_type (type, type_quals);
- }
- 
  bool
  c_missing_noreturn_ok_p (tree decl)
  {
--- 70,75 ----
diff -Nrcpad gcc-16-20260201/gcc/c/c-objc-common.h gcc-16-20260208/gcc/c/c-objc-common.h
*** gcc-16-20260201/gcc/c/c-objc-common.h	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/c/c-objc-common.h	Sun Feb  8 22:32:06 2026
*************** extern void c_register_features ();
*** 59,66 ****
  #define LANG_HOOKS_PRINT_IDENTIFIER c_print_identifier
  #undef LANG_HOOKS_TYPES_COMPATIBLE_P
  #define LANG_HOOKS_TYPES_COMPATIBLE_P c_types_compatible_p
- #undef LANG_HOOKS_BUILD_LANG_QUALIFIED_TYPE
- #define LANG_HOOKS_BUILD_LANG_QUALIFIED_TYPE c_build_lang_qualified_type
  #undef LANG_HOOKS_MISSING_NORETURN_OK_P
  #define LANG_HOOKS_MISSING_NORETURN_OK_P c_missing_noreturn_ok_p
  #undef LANG_HOOKS_BLOCK_MAY_FALLTHRU
--- 59,64 ----
diff -Nrcpad gcc-16-20260201/gcc/c/c-parser.cc gcc-16-20260208/gcc/c/c-parser.cc
*** gcc-16-20260201/gcc/c/c-parser.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/c/c-parser.cc	Sun Feb  8 22:32:06 2026
*************** c_parser_string_literal (c_parser *parse
*** 9893,9899 ****
  	  (parse_in, strs, count, &istr, type)))
      {
        value = build_string (istr.len, (const char *) istr.text);
!       free (CONST_CAST (unsigned char *, istr.text));
        if (count > 1)
  	{
  	  location_t *locs = (location_t *) obstack_finish (&loc_ob);
--- 9893,9899 ----
  	  (parse_in, strs, count, &istr, type)))
      {
        value = build_string (istr.len, (const char *) istr.text);
!       free (const_cast<unsigned char *> (istr.text));
        if (count > 1)
  	{
  	  location_t *locs = (location_t *) obstack_finish (&loc_ob);
diff -Nrcpad gcc-16-20260201/gcc/c/c-tree.h gcc-16-20260208/gcc/c/c-tree.h
*** gcc-16-20260201/gcc/c/c-tree.h	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/c/c-tree.h	Sun Feb  8 22:32:06 2026
*************** extern tree c_finish_bc_name (location_t
*** 780,786 ****
  
  /* in c-objc-common.cc */
  extern bool c_objc_common_init (void);
- extern tree c_build_lang_qualified_type (tree, tree, int);
  extern bool c_missing_noreturn_ok_p (tree);
  extern bool c_warn_unused_global_decl (const_tree);
  extern void c_initialize_diagnostics (diagnostics::context *);
--- 780,785 ----
diff -Nrcpad gcc-16-20260201/gcc/c/c-typeck.cc gcc-16-20260208/gcc/c/c-typeck.cc
*** gcc-16-20260201/gcc/c/c-typeck.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/c/c-typeck.cc	Sun Feb  8 22:32:06 2026
*************** build_asm_expr (location_t loc, tree str
*** 13170,13175 ****
--- 13170,13177 ----
  				 "of a function or non-automatic variable");
  		  input = error_mark_node;
  		}
+ 	      else if (TREE_CODE (TREE_OPERAND (t, 0)) == FUNCTION_DECL)
+ 		suppress_warning (TREE_OPERAND (t, 0), OPT_Wunused);
  	    }
  	}
        else
diff -Nrcpad gcc-16-20260201/gcc/c-family/ChangeLog gcc-16-20260208/gcc/c-family/ChangeLog
*** gcc-16-20260201/gcc/c-family/ChangeLog	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/c-family/ChangeLog	Sun Feb  8 22:32:06 2026
***************
*** 1,3 ****
--- 1,28 ----
+ 2026-02-06  Torbjörn SVENSSON  <torbjorn.svensson@foss.st.com>
+ 
+ 	PR middle-end/123892
+ 	* c-common.cc: Replace CONST_CAST with const_cast<>.
+ 	* c-lex.cc: Likewise.
+ 
+ 2026-02-06  Torbjörn SVENSSON  <torbjorn.svensson@foss.st.com>
+ 
+ 	PR middle-end/123892
+ 	* c-gimplify.cc: Replace CONST_CAST_TREE with const_cast<tree>.
+ 
+ 2026-02-05  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Revert:
+ 	2026-02-05  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/101312
+ 	* c-pretty-print.cc (c_pretty_printer::direct_abstract_declarator):
+ 	Look up "array " attribute instead of "array".
+ 
+ 2026-02-02  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	* c-cppbuiltin.cc (c_cpp_builtins): Bump __cpp_deduction_guides to
+ 	202207L for C++23 and later.
+ 
  2026-01-28  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
  
  	PR c++/102846
diff -Nrcpad gcc-16-20260201/gcc/c-family/c-common.cc gcc-16-20260208/gcc/c-family/c-common.cc
*** gcc-16-20260201/gcc/c-family/c-common.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/c-family/c-common.cc	Sun Feb  8 22:32:06 2026
*************** fix_string_type (tree value)
*** 853,859 ****
      {
        error ("size of string literal is too large");
        length = tree_to_shwi (TYPE_MAX_VALUE (ssizetype)) / charsz * charsz;
!       char *str = CONST_CAST (char *, TREE_STRING_POINTER (value));
        memset (str + length, '\0',
  	      MIN (TREE_STRING_LENGTH (value) - length, charsz));
        TREE_STRING_LENGTH (value) = length;
--- 853,859 ----
      {
        error ("size of string literal is too large");
        length = tree_to_shwi (TYPE_MAX_VALUE (ssizetype)) / charsz * charsz;
!       char *str = const_cast<char *> (TREE_STRING_POINTER (value));
        memset (str + length, '\0',
  	      MIN (TREE_STRING_LENGTH (value) - length, charsz));
        TREE_STRING_LENGTH (value) = length;
diff -Nrcpad gcc-16-20260201/gcc/c-family/c-cppbuiltin.cc gcc-16-20260208/gcc/c-family/c-cppbuiltin.cc
*** gcc-16-20260201/gcc/c-family/c-cppbuiltin.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/c-family/c-cppbuiltin.cc	Sun Feb  8 22:32:06 2026
*************** c_cpp_builtins (cpp_reader *pfile)
*** 1079,1085 ****
  	  cpp_define (pfile, "__cpp_conditional_explicit=201806L");
  	  cpp_define (pfile, "__cpp_consteval=202211L");
  	  cpp_define (pfile, "__cpp_constinit=201907L");
! 	  cpp_define (pfile, "__cpp_deduction_guides=201907L");
  	  cpp_define (pfile, "__cpp_nontype_template_args=201911L");
  	  cpp_define (pfile, "__cpp_nontype_template_parameter_class=201806L");
  	  cpp_define (pfile, "__cpp_impl_destroying_delete=201806L");
--- 1079,1086 ----
  	  cpp_define (pfile, "__cpp_conditional_explicit=201806L");
  	  cpp_define (pfile, "__cpp_consteval=202211L");
  	  cpp_define (pfile, "__cpp_constinit=201907L");
! 	  if (cxx_dialect <= cxx20)
! 	    cpp_define (pfile, "__cpp_deduction_guides=201907L");
  	  cpp_define (pfile, "__cpp_nontype_template_args=201911L");
  	  cpp_define (pfile, "__cpp_nontype_template_parameter_class=201806L");
  	  cpp_define (pfile, "__cpp_impl_destroying_delete=201806L");
*************** c_cpp_builtins (cpp_reader *pfile)
*** 1096,1101 ****
--- 1097,1103 ----
  	  cpp_define (pfile, "__cpp_auto_cast=202110L");
  	  if (cxx_dialect <= cxx23)
  	    cpp_define (pfile, "__cpp_constexpr=202211L");
+ 	  cpp_define (pfile, "__cpp_deduction_guides=202207L");
  	  cpp_define (pfile, "__cpp_multidimensional_subscript=202211L");
  	  cpp_define (pfile, "__cpp_named_character_escapes=202207L");
  	  cpp_define (pfile, "__cpp_static_call_operator=202207L");
diff -Nrcpad gcc-16-20260201/gcc/c-family/c-gimplify.cc gcc-16-20260208/gcc/c-family/c-gimplify.cc
*** gcc-16-20260201/gcc/c-family/c-gimplify.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/c-family/c-gimplify.cc	Sun Feb  8 22:32:06 2026
*************** get_bc_label (enum bc_t bc)
*** 267,273 ****
  location_t
  expr_loc_or_loc (const_tree expr, location_t or_loc)
  {
!   tree t = CONST_CAST_TREE (expr);
    location_t loc = UNKNOWN_LOCATION;
    if (t)
      loc = EXPR_LOCATION (t);
--- 267,273 ----
  location_t
  expr_loc_or_loc (const_tree expr, location_t or_loc)
  {
!   tree t = const_cast<tree> (expr);
    location_t loc = UNKNOWN_LOCATION;
    if (t)
      loc = EXPR_LOCATION (t);
diff -Nrcpad gcc-16-20260201/gcc/c-family/c-lex.cc gcc-16-20260208/gcc/c-family/c-lex.cc
*** gcc-16-20260201/gcc/c-family/c-lex.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/c-family/c-lex.cc	Sun Feb  8 22:32:06 2026
*************** cb_ident (cpp_reader * ARG_UNUSED (pfile
*** 174,180 ****
        if (cpp_interpret_string (pfile, str, 1, &cstr, CPP_STRING))
  	{
  	  targetm.asm_out.output_ident ((const char *) cstr.text);
! 	  free (CONST_CAST (unsigned char *, cstr.text));
  	}
      }
  }
--- 174,180 ----
        if (cpp_interpret_string (pfile, str, 1, &cstr, CPP_STRING))
  	{
  	  targetm.asm_out.output_ident ((const char *) cstr.text);
! 	  free (const_cast<unsigned char *> (cstr.text));
  	}
      }
  }
*************** c_lex_with_flags (tree *value, location_
*** 633,639 ****
  					    (const char *) tok->val.str.text);
  	    TREE_TYPE (num_string) = char_array_type_node;
  	    num_string = fix_string_type (num_string);
! 	    str = CONST_CAST (char *, TREE_STRING_POINTER (num_string));
  	    str[len] = '\0';
  	    literal = build_userdef_literal (suffix_id, *value, overflow,
  					     num_string);
--- 633,639 ----
  					    (const char *) tok->val.str.text);
  	    TREE_TYPE (num_string) = char_array_type_node;
  	    num_string = fix_string_type (num_string);
! 	    str = const_cast<char *> (TREE_STRING_POINTER (num_string));
  	    str[len] = '\0';
  	    literal = build_userdef_literal (suffix_id, *value, overflow,
  					     num_string);
*************** lex_string (const cpp_token *tok, tree *
*** 1700,1706 ****
        (parse_in, strs, concats + 1, &istr, type))
      {
        value = build_string (istr.len, (const char *) istr.text);
!       free (CONST_CAST (unsigned char *, istr.text));
        if (concats)
  	{
  	  gcc_assert (locs);
--- 1700,1706 ----
        (parse_in, strs, concats + 1, &istr, type))
      {
        value = build_string (istr.len, (const char *) istr.text);
!       free (const_cast<unsigned char *> (istr.text));
        if (concats)
  	{
  	  gcc_assert (locs);
diff -Nrcpad gcc-16-20260201/gcc/cgraph.cc gcc-16-20260208/gcc/cgraph.cc
*** gcc-16-20260201/gcc/cgraph.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/cgraph.cc	Sun Feb  8 22:32:06 2026
*************** cgraph_update_edges_for_call_stmt_node (
*** 2014,2023 ****
  		{
  		  tree decl = gimple_call_fndecl (new_stmt);
  		  if (decl)
! 		    e = cgraph_edge::resolve_speculation (e, decl);
  		}
  	      else
! 		e = cgraph_edge::resolve_speculation (e, NULL);
  	    }
  	  /* Keep calls marked as dead dead.  */
  	  if (new_stmt && is_gimple_call (new_stmt) && e->callee
--- 2014,2024 ----
  		{
  		  tree decl = gimple_call_fndecl (new_stmt);
  		  if (decl)
! 		    e = cgraph_edge::make_direct
! 			    (e, cgraph_node::get_create (decl));
  		}
  	      else
! 		gcc_unreachable ();
  	    }
  	  /* Keep calls marked as dead dead.  */
  	  if (new_stmt && is_gimple_call (new_stmt) && e->callee
diff -Nrcpad gcc-16-20260201/gcc/cgraphunit.cc gcc-16-20260208/gcc/cgraphunit.cc
*** gcc-16-20260201/gcc/cgraphunit.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/cgraphunit.cc	Sun Feb  8 22:32:06 2026
*************** check_global_declaration (symtab_node *s
*** 1111,1120 ****
        if (warning_suppressed_p (decl, OPT_Wunused))
  	;
        else if (snode->referred_to_p (/*include_self=*/false))
! 	pedwarn (input_location, 0, "%q+F used but never defined", decl);
!       else
! 	warning (OPT_Wunused_function, "%q+F declared %<static%> but never "
! 				       "defined", decl);
      }
  
    /* Warn about static fns or vars defined but not used.  */
--- 1111,1123 ----
        if (warning_suppressed_p (decl, OPT_Wunused))
  	;
        else if (snode->referred_to_p (/*include_self=*/false))
! 	{
! 	  if (pedwarn (input_location, 0, "%q+F used but never defined", decl))
! 	    suppress_warning (decl, OPT_Wunused);
! 	}
!       else if (warning (OPT_Wunused_function,
! 			"%q+F declared %<static%> but never defined", decl))
! 	suppress_warning (decl, OPT_Wunused);
      }
  
    /* Warn about static fns or vars defined but not used.  */
diff -Nrcpad gcc-16-20260201/gcc/cobol/ChangeLog gcc-16-20260208/gcc/cobol/ChangeLog
*** gcc-16-20260201/gcc/cobol/ChangeLog	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/cobol/ChangeLog	Sun Feb  8 22:32:06 2026
***************
*** 1,3 ****
--- 1,46 ----
+ 2026-02-06  Robert Dubner  <rdubner@symas.com>
+ 
+ 	PR cobol/119332
+ 	* gcobolspec.cc (lang_specific_driver): Add -dumpspecs,
+ 	-dumpversion, -dumpmachine to the no_files_error=false cases.
+ 
+ 2026-02-05  Robert Dubner  <rdubner@symas.com>
+ 
+ 	* genapi.cc (DEFAULT_LINE_NUMBER): Remove unused #define.
+ 	(parser_statement_begin): Implement perform_is_armed logic.
+ 	(initialize_variable_internal): Handle both real and int types in
+ 	SHOW_PARSE tracing.
+ 	(section_label): Comment a renumbered insert_nop() for gdb-cobol
+ 	logic.
+ 	(paragraph_label): Likewise.
+ 	(leave_procedure): Eliminate call to gg_insert_into_assembler().
+ 	(parser_enter_section): Renumber insert_nop().
+ 	(parser_perform): Eliminate call to gg_insert_into_assembler().
+ 	(parser_perform_times): Likewise.
+ 	(internal_perform_through): Likewise.
+ 	(internal_perform_through_times): Likewise.
+ 	(parser_leave_file): Create the static _perform_line_pairs table.
+ 	(parser_sleep): Renumber insert_nop().
+ 	(parser_division): Remove calls to initialize_the_data().
+ 	(parser_perform_start): New call to insert_nop().
+ 	(parser_perform_conditional): Likewise.
+ 	(perform_outofline_before_until): Expanded comment.
+ 	(perform_outofline_after_until): Eliminate call to
+ 	gg_insert_into_assembler().
+ 	(perform_outofline_testafter_varying): Likewise.
+ 	(perform_outofline_before_varying): Likewise.
+ 	(perform_inline_testbefore_varying):  New call to insert_nop().
+ 	(create_and_call): Change a comment.
+ 	* gengen.cc (gg_create_goto_pair): Change characteristics of a
+ 	label.
+ 	* parse.y: Change how data are initialized.
+ 	* parse_ante.h (field_type_update): Likewise.
+ 	* symbols.cc (cbl_field_t::set_signable): Likewise.
+ 	(cbl_field_t::encode): Likewise.
+ 	* symbols.h (struct cbl_field_t): Likewise.
+ 	* util.cc (symbol_field_type_update): Likewise.
+ 	(cbl_field_t::encode_numeric): Likewise.
+ 
  2026-01-20  Jakub Jelinek  <jakub@redhat.com>
  
  	* lang.opt (fexec-national-charset=): Add dot at the end of the
diff -Nrcpad gcc-16-20260201/gcc/cobol/gcobolspec.cc gcc-16-20260208/gcc/cobol/gcobolspec.cc
*** gcc-16-20260201/gcc/cobol/gcobolspec.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/cobol/gcobolspec.cc	Sun Feb  8 22:32:06 2026
*************** lang_specific_driver (struct cl_decoded_
*** 301,306 ****
--- 301,309 ----
        case OPT_print_multi_os_directory:
        case OPT_print_multiarch:
        case OPT_print_sysroot_headers_suffix:
+       case OPT_dumpmachine:
+       case OPT_dumpversion:
+       case OPT_dumpspecs:
          no_files_error = false;
          break;
  
diff -Nrcpad gcc-16-20260201/gcc/cobol/genapi.cc gcc-16-20260208/gcc/cobol/genapi.cc
*** gcc-16-20260201/gcc/cobol/genapi.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/cobol/genapi.cc	Sun Feb  8 22:32:06 2026
*************** static tree label_list_back_label;
*** 72,79 ****
  static void hijack_for_development(const char *funcname);
  
  static size_t sv_data_name_counter = 1;
- static int call_counter = 1;
- static int pseudo_label = 1;
  
  static bool suppress_cobol_entry_point = false;
  static char ach_cobol_entry_point[256] = "";
--- 72,77 ----
*************** int  show_parse_indent = 0;
*** 84,90 ****
  
  static bool sv_is_i_o = false;
  
! #define DEFAULT_LINE_NUMBER 2
  
  #ifdef LINE_TICK
  /*  This code is used from time to time when sorting out why compilation
--- 82,89 ----
  
  static bool sv_is_i_o = false;
  
! static int perform_is_armed = 0;
! static std::map<int, int> perform_line_pairs;
  
  #ifdef LINE_TICK
  /*  This code is used from time to time when sorting out why compilation
*************** parser_statement_begin( const cbl_name_t
*** 1151,1156 ****
--- 1150,1167 ----
  
    gcc_assert( gg_trans_unit.function_stack.size() );
  
+   // If a PERFORM is armed, that's the line that the PERFORM is on.  The
+   // cobol_location().first_line here is the major statement following the
+   // the PERFORM statement.  (We don't use .loc information in GDB because of
+   // the difficulty in teasing out which is the "primary" .loc from the
+   // 'is_stmt' and 'discriminator'.  If that's possible, I haven't yet figured
+   // how.)
+   if( perform_is_armed )
+     {
+     perform_line_pairs[perform_is_armed] = cobol_location().first_line;
+     perform_is_armed = 0;
+     }
+ 
    // In the cases where enabled_exceptions.size() is non-zero, or when
    // there is a possibility of an EC-I-O exception because this is a file
    // operation, we need to store the location information and do the exception
*************** initialize_variable_internal( cbl_refer_
*** 1314,1327 ****
            default:
              {
              char ach[128];
!             real_to_decimal (ach,
!                              TREE_REAL_CST_PTR (parsed_var->data.value_of()),
!                              sizeof(ach), 16, 0);
              SHOW_PARSE_TEXT(ach);
              break;
              }
            }
- 
          }
        SHOW_PARSE_TEXT("<<")
        }
--- 1325,1346 ----
            default:
              {
              char ach[128];
!             if( TREE_CODE(TREE_TYPE(parsed_var->data.value_of())) == REAL_TYPE)
!               {
!               real_to_decimal (ach,
!                                TREE_REAL_CST_PTR (parsed_var->data.value_of()),
!                                sizeof(ach), 16, 0);
!               }
!             else
!               {
!               wi::tree_to_wide_ref iii =
!                                     wi::to_wide( parsed_var->data.value_of() );
!               print_dec(iii, ach, SIGNED);
!               }
              SHOW_PARSE_TEXT(ach);
              break;
              }
            }
          }
        SHOW_PARSE_TEXT("<<")
        }
*************** section_label(struct cbl_proc_t *procedu
*** 2464,2470 ****
      }
    assembler_label(psz2);
    free(psz2);
!   insert_nop(108);
    }
  
  static void
--- 2483,2490 ----
      }
    assembler_label(psz2);
    free(psz2);
!   // Needed so that GDB-COBOL can trap at a section name.
!   insert_nop(101);
    }
  
  static void
*************** paragraph_label(struct cbl_proc_t *proce
*** 2537,2543 ****
    //
    // Yes, trying to understand this causes headaches for many people who read
    // this.  Take an aspirin.
!   insert_nop(109);
    }
  
  static void
--- 2557,2563 ----
    //
    // Yes, trying to understand this causes headaches for many people who read
    // this.  Take an aspirin.
!   insert_nop(102);
    }
  
  static void
*************** leave_procedure(struct cbl_proc_t *proce
*** 2631,2645 ****
      // procedure->bottom.label);
      // Procedure can be null, for example at the beginning of a
      // new program, or after somebody else has cleared it out.
- 
      gg_append_statement(procedure->exit.label);
- 
-     char *psz;
-     psz = xasprintf("_procret." HOST_SIZE_T_PRINT_DEC ":",
-                     (fmt_size_t)symbol_label_id(procedure->label));
-     token_location_override(current_location_minus_one());
-     gg_insert_into_assembler(psz);
-     free(psz);
      pseudo_return_pop(procedure);
      gg_append_statement(procedure->bottom.label);
      }
--- 2651,2657 ----
*************** parser_enter_section(cbl_label_t *label)
*** 2817,2823 ****
  
    // This NOP is needed to give GDB a line number for the entry point of
    // paragraphs
!   insert_nop(101);
  
    struct cbl_proc_t *procedure = find_procedure(label);
    gg_append_statement(procedure->top.label);
--- 2829,2835 ----
  
    // This NOP is needed to give GDB a line number for the entry point of
    // paragraphs
!   insert_nop(103);
  
    struct cbl_proc_t *procedure = find_procedure(label);
    gg_append_statement(procedure->top.label);
*************** parser_perform(cbl_label_t *label, bool
*** 3151,3161 ****
  
    if( !suppress_nexting )
      {
!     sprintf(ach,
!             "_proccall." HOST_SIZE_T_PRINT_DEC ".%d:",
!             (fmt_size_t)symbol_label_id(label),
!             call_counter++);
!     gg_insert_into_assembler( ach );
      }
  
    // We do the indirect jump in order to prevent the compiler from complaining
--- 3163,3170 ----
  
    if( !suppress_nexting )
      {
!     // Flag this source-code line as being a PERFORM statement.
!     perform_is_armed = CURRENT_LINE_NUMBER ;
      }
  
    // We do the indirect jump in order to prevent the compiler from complaining
*************** parser_perform_times( cbl_label_t *proc_
*** 3198,3209 ****
      TRACE1_END
      }
  
!   char ach[256];
!   size_t our_pseudo_label = pseudo_label++;
!   sprintf(ach,
!           "_proccallb." HOST_SIZE_T_PRINT_DEC ":",
!           (fmt_size_t)our_pseudo_label);
!   gg_insert_into_assembler( ach );
  
    tree counter       = gg_define_variable(LONG);
  
--- 3207,3213 ----
      TRACE1_END
      }
  
!   perform_is_armed = CURRENT_LINE_NUMBER ;
  
    tree counter       = gg_define_variable(LONG);
  
*************** parser_perform_times( cbl_label_t *proc_
*** 3221,3232 ****
      gg_decrement(counter);
      }
      WEND
- 
-   sprintf(ach,
-           "_procretb." HOST_SIZE_T_PRINT_DEC ":",
-           (fmt_size_t)our_pseudo_label);
-   token_location_override(current_location_minus_one());
-   gg_insert_into_assembler(ach);
    }
  
  static void
--- 3225,3230 ----
*************** internal_perform_through( cbl_label_t *p
*** 3303,3314 ****
  
    if( !suppress_nexting )
      {
!     char ach[256];
!     sprintf(ach,
!             "_proccall." HOST_SIZE_T_PRINT_DEC ".%d:",
!             (fmt_size_t)symbol_label_id(proc_2),
!             call_counter++);
!     gg_insert_into_assembler(ach);
      }
  
    gg_append_statement(proc1->top.go_to);
--- 3301,3307 ----
  
    if( !suppress_nexting )
      {
!     perform_is_armed = CURRENT_LINE_NUMBER ;
      }
  
    gg_append_statement(proc1->top.go_to);
*************** internal_perform_through_times(   cbl_la
*** 3356,3368 ****
      TRACE1_END
      }
  
!   size_t our_pseudo_label = pseudo_label++;
! 
!   char ach[256];
!   sprintf(ach,
!           "_proccallb." HOST_SIZE_T_PRINT_DEC ":",
!           (fmt_size_t)our_pseudo_label);
!   gg_insert_into_assembler( ach );
  
    tree counter       = gg_define_variable(LONG);
    get_binary_value( counter,
--- 3349,3355 ----
      TRACE1_END
      }
  
!   perform_is_armed = CURRENT_LINE_NUMBER ;
  
    tree counter       = gg_define_variable(LONG);
    get_binary_value( counter,
*************** internal_perform_through_times(   cbl_la
*** 3375,3386 ****
      gg_decrement(counter);
      }
      WEND
- 
-   sprintf(ach,
-           "_procretb." HOST_SIZE_T_PRINT_DEC ":",
-           (fmt_size_t)our_pseudo_label);
-   token_location_override(current_location_minus_one());
-   gg_insert_into_assembler( ach );
    }
  
  void
--- 3362,3367 ----
*************** parser_leave_file()
*** 3573,3578 ****
--- 3554,3594 ----
      // We are leaving the top-level file, which means this compilation is
      // done, done, done.
  
+     // This is where we create the file-static table of PERFORM/FOLLOWING line
+     // number pairs so that the GDB-COBOL debugger can know where to "return"
+     // to after a NEXT is issued on a PERFORM statement.
+ 
+     // We need to create a file-static static array of 32-bit integers.  The
+     // array is terminated with a {0,0} pair:
+     tree array_of_int_type = build_array_type_nelts(INT, (perform_line_pairs.size()+1)*2);
+     tree array_of_int = gg_define_variable( array_of_int_type,
+                                             "_perform_line_pairs",
+                                             vs_file_static);
+     // We have the array.  Now we need to build the constructor for it
+     tree constr = make_node(CONSTRUCTOR);
+     TREE_TYPE(constr) = array_of_int_type;
+     TREE_STATIC(constr)    = 1;
+     TREE_CONSTANT(constr)  = 1;
+ 
+     // The first element of the array contains the number of elements to follow
+     size_t i = 0;
+     for(auto it : perform_line_pairs)
+       {
+       CONSTRUCTOR_APPEND_ELT( CONSTRUCTOR_ELTS(constr),
+                               build_int_cst_type(SIZE_T, i++),
+                               build_int_cst_type(INT, it.first) );
+       CONSTRUCTOR_APPEND_ELT( CONSTRUCTOR_ELTS(constr),
+                               build_int_cst_type(SIZE_T, i++),
+                               build_int_cst_type(INT, it.second) );
+       }
+     CONSTRUCTOR_APPEND_ELT( CONSTRUCTOR_ELTS(constr),
+                             build_int_cst_type(SIZE_T, i++),
+                             integer_zero_node );
+     CONSTRUCTOR_APPEND_ELT( CONSTRUCTOR_ELTS(constr),
+                             build_int_cst_type(SIZE_T, i++),
+                             integer_zero_node );
+     DECL_INITIAL(array_of_int) = constr;
+ 
      // There is, however, one thing left to do.  If the command line says
      // that this module needs a main entry point, then this is where
      // we create a main() function.  We build it at the end, so that all of
*************** void parser_sleep(const cbl_refer_t &sec
*** 6292,6298 ****
      // This is a naked place-holding CONTINUE.  Generate some do-nothing
      // code that will stick some .LOC information into the assembly language,
      // so that GDB-COBOL can display the CONTINUE statement.
!     insert_nop(103);
      }
    }
  
--- 6308,6314 ----
      // This is a naked place-holding CONTINUE.  Generate some do-nothing
      // code that will stick some .LOC information into the assembly language,
      // so that GDB-COBOL can display the CONTINUE statement.
!     insert_nop(104);
      }
    }
  
*************** parser_division(cbl_division_t division,
*** 7312,7323 ****
    if( division == environment_div_e )
      {
      Analyze();
-     initialize_the_data();
      }
    else if( division == procedure_div_e )
      {
      Analyze();
-     initialize_the_data();
  
      // Do some symbol table index bookkeeping.  current_program_index() is valid
      // at this point in time:
--- 7328,7337 ----
*************** parser_perform_start( struct cbl_perform
*** 8270,8276 ****
    // Give GDB-COBOL something to chew on when NEXTing.  This instruction will
    // get the line number of the PERFORM N TIMES code.
    gg_append_statement(tgt->addresses.top.label);
!   insert_nop(104);
    }
  
  void
--- 8284,8291 ----
    // Give GDB-COBOL something to chew on when NEXTing.  This instruction will
    // get the line number of the PERFORM N TIMES code.
    gg_append_statement(tgt->addresses.top.label);
!   // Necessary for GDB-COBOL PERFORM <inline> processing.
!   insert_nop(105);
    }
  
  void
*************** parser_perform_conditional( struct cbl_p
*** 8314,8319 ****
--- 8329,8337 ----
  
    // The next instructions that the parser will give us are the conditional
    // calculation, so the first thing that goes down is the condover:
+   /* The following NOP is needed to make NEXT OVER PERFORM BEFORE/AFTER UNTIL 
+      behaves properly.  */
+   insert_nop(106);
    gg_append_statement(tgt->addresses.condover[i].go_to);
  
    // And then, of course, we need to be able to jump back here to actually
*************** perform_outofline_before_until(struct cb
*** 8373,8389 ****
  
    /*
        TOP:
!                   IF CONDITION 0
!                       GOTO EXIT
!                   ELSE
!                       EXECUTE BODY
!                       GOTO TOP
        EXIT:
    */
  
    create_iline_address_pairs(tgt);
  
    // Tag the top of the perform
    gg_append_statement(tgt->addresses.top.label);
  
    // Go do the conditional calculation:
--- 8391,8416 ----
  
    /*
        TOP:
!          GOTO condinto
!          condback:
!             IF CONDITION 0
!                 GOTO EXIT
!             ELSE
!                 EXECUTE BODY
!                 GOTO TOP
        EXIT:
+ 
+       GOTO jumpover
+          condinto:
+          <conditional calculation>
+          GOTO condback
+       jumpover:
    */
  
    create_iline_address_pairs(tgt);
  
    // Tag the top of the perform
+   
    gg_append_statement(tgt->addresses.top.label);
  
    // Go do the conditional calculation:
*************** perform_outofline_before_until(struct cb
*** 8394,8405 ****
    // where to return:
    gg_append_statement(tgt->addresses.condback[0].label);
  
!   char ach[256];
!   size_t our_pseudo_label = pseudo_label++;
!   sprintf(ach,
!           "_proccallb." HOST_SIZE_T_PRINT_DEC ":",
!           (fmt_size_t)our_pseudo_label);
!   gg_insert_into_assembler( ach );
  
    parser_if(varys[0].until);
      {
--- 8421,8427 ----
    // where to return:
    gg_append_statement(tgt->addresses.condback[0].label);
  
!   perform_is_armed = CURRENT_LINE_NUMBER ;
  
    parser_if(varys[0].until);
      {
*************** perform_outofline_before_until(struct cb
*** 8419,8429 ****
  
    // Label the bottom of the PERFORM
    gg_append_statement(  tgt->addresses.exit.label );
-   sprintf(ach,
-           "_procretb." HOST_SIZE_T_PRINT_DEC ":",
-           (fmt_size_t)our_pseudo_label);
-   token_location_override(current_location_minus_one());
-   gg_insert_into_assembler( ach );
    }
  
  static void
--- 8441,8446 ----
*************** perform_outofline_after_until(struct cbl
*** 8441,8461 ****
  
    /*
        TOP:
!                   EXECUTE BODY
!                   IF CONDITION 0
!                       GOTO EXIT
!                   ELSE
!                       ADD BY_0 to VARYING_0
!                       GOTO TOP
        EXIT:
    */
  
!   char ach[256];
!   size_t our_pseudo_label = pseudo_label++;
!   sprintf(ach,
!           "_proccallb." HOST_SIZE_T_PRINT_DEC ":",
!           (fmt_size_t)our_pseudo_label);
!   gg_insert_into_assembler( ach );
  
    create_iline_address_pairs(tgt);
  
--- 8458,8480 ----
  
    /*
        TOP:
!           EXECUTE BODY
!           GOTO condinto
!           condback:
!           IF CONDITION 0
!               GOTO EXIT
!           ELSE
!               GOTO TOP
        EXIT:
+ 
+       GOTO jumpover
+          condinto:
+          <conditional calculation>
+          GOTO condback
+       jumpover:
    */
  
!   perform_is_armed = CURRENT_LINE_NUMBER ;
  
    create_iline_address_pairs(tgt);
  
*************** perform_outofline_after_until(struct cbl
*** 8483,8493 ****
    parser_fi();
    // Label the bottom of the PERFORM
    gg_append_statement(  tgt->addresses.exit.label );
-   sprintf(ach,
-           "_procretb." HOST_SIZE_T_PRINT_DEC ":",
-           (fmt_size_t)our_pseudo_label);
-   token_location_override(current_location_minus_one());
-   gg_insert_into_assembler( ach );
    }
  
  static void
--- 8502,8507 ----
*************** perform_outofline_testafter_varying(stru
*** 8547,8558 ****
    // only need N-1; we don't use the zeroth pair.  But the code
    // is cleaner if we just build all N of them.
  
!   char ach[256];
!   size_t our_pseudo_label = pseudo_label++;
!   sprintf(ach,
!           "_proccallb." HOST_SIZE_T_PRINT_DEC ":",
!           (fmt_size_t)our_pseudo_label);
!   gg_insert_into_assembler( ach );
  
    create_iline_address_pairs(tgt);
  
--- 8561,8567 ----
    // only need N-1; we don't use the zeroth pair.  But the code
    // is cleaner if we just build all N of them.
  
!   perform_is_armed = CURRENT_LINE_NUMBER ;
  
    create_iline_address_pairs(tgt);
  
*************** perform_outofline_testafter_varying(stru
*** 8604,8614 ****
      }
    // Arriving here means that we all of the conditions were
    // true.  So, we're done.
-   sprintf(ach,
-           "_procretb." HOST_SIZE_T_PRINT_DEC ":",
-           (fmt_size_t)our_pseudo_label);
-   token_location_override(current_location_minus_one());
-   gg_insert_into_assembler( ach );
    }
  
  static void
--- 8613,8618 ----
*************** perform_outofline_before_varying(   stru
*** 8665,8676 ****
    tree label[MAX_AFTERS];
    build_N_pairs(go_to, label, N);
  
!   char ach[256];
!   size_t our_pseudo_label = pseudo_label++;
!   sprintf(ach,
!           "_proccallb." HOST_SIZE_T_PRINT_DEC ":",
!           (fmt_size_t)our_pseudo_label);
!   gg_insert_into_assembler( ach );
  
    // Initialize all varying:
  
--- 8669,8675 ----
    tree label[MAX_AFTERS];
    build_N_pairs(go_to, label, N);
  
!   perform_is_armed = CURRENT_LINE_NUMBER ;
  
    // Initialize all varying:
  
*************** perform_outofline_before_varying(   stru
*** 8748,8758 ****
    // the EXIT: label.
    // We have, you see, reached the egress:
    gg_append_statement(  tgt->addresses.exit.label );
-   sprintf(ach,
-           "_procretb." HOST_SIZE_T_PRINT_DEC ":",
-           (fmt_size_t)our_pseudo_label);
-   token_location_override(current_location_minus_one());
-   gg_insert_into_assembler( ach );
    }
  
  static void
--- 8747,8752 ----
*************** perform_inline_testbefore_varying(  stru
*** 8983,8988 ****
--- 8977,8985 ----
        SHOW_PARSE_END
        }
      gg_append_statement(tgt->addresses.condback[i].label);
+     // Needed to make GDB NEXT over PERFORM in-line VARYING UNTIL work
+     // predictably.
+     insert_nop(107);
  
      // Test that conditional
      parser_if(varys[i].until);
*************** create_and_call(size_t narg,
*** 13407,13416 ****
  
    if( returned.field )
      {
-     // Because the CALL had a RETURNING clause, RETURN-CODE doesn't return a
-     // value.  So, we make sure it is zero
-     //// gg_assign(var_decl_return_code, build_int_cst_type(SHORT, 0));
- 
      // We expect the return value to be a 64-bit or 128-bit integer.  How
      // we treat that returned value depends on the target.
  
--- 13404,13409 ----
diff -Nrcpad gcc-16-20260201/gcc/cobol/gengen.cc gcc-16-20260208/gcc/cobol/gengen.cc
*** gcc-16-20260201/gcc/cobol/gengen.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/cobol/gengen.cc	Sun Feb  8 22:32:06 2026
*************** gg_create_goto_pair(tree *goto_expr,
*** 1843,1848 ****
--- 1843,1852 ----
                                    void_type_node);
    DECL_CONTEXT(label_decl) = current_function->function_decl;
    TREE_USED(label_decl) = 1;
+   DECL_EXTERNAL(label_decl) = 1;
+   TREE_PUBLIC(label_decl) = 1;
+   TREE_ADDRESSABLE(label_decl) = 1;
+   TREE_STATIC(label_decl) = 1;
  
    *goto_expr  = build1(GOTO_EXPR, void_type_node, label_decl);
    *label_expr = build1(LABEL_EXPR, void_type_node, label_decl);
diff -Nrcpad gcc-16-20260201/gcc/cobol/parse.y gcc-16-20260208/gcc/cobol/parse.y
*** gcc-16-20260201/gcc/cobol/parse.y	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/cobol/parse.y	Sun Feb  8 22:32:06 2026
*************** comminit:       COMMON     {
*** 1894,1903 ****
                  ;
  
  
! env_div:        %empty              { current_division = environment_div_e; }
!         |       ENVIRONMENT_DIV '.' { current_division = environment_div_e; }
          |       ENVIRONMENT_DIV '.' {
                    current_division = environment_div_e;
                  } env_sections
                  ;
  
--- 1894,1910 ----
                  ;
  
  
! env_div:        %empty {
!                   current_division = environment_div_e;
!                   parser_division( environment_div_e, NULL, 0, NULL );
!                 }
!         |       ENVIRONMENT_DIV '.' {
!                   current_division = environment_div_e;
!                   parser_division( environment_div_e, NULL, 0, NULL );
!                 }
          |       ENVIRONMENT_DIV '.' {
                    current_division = environment_div_e;
+                   parser_division( environment_div_e, NULL, 0, NULL );
                  } env_sections
                  ;
  
*************** when_set_to:    %empty
*** 3159,3170 ****
          |       WHEN SET TO
          ;
  
! data_div:       %empty 
!         |       DATA_DIV
!         |       DATA_DIV { current_division = data_div_e; } data_sections
!                 {
                    current_data_section = not_data_datasect_e;
-                   parser_division( data_div_e, NULL, 0, NULL );
                  }
                  ;
  
--- 3166,3179 ----
          |       WHEN SET TO
          ;
  
! data_div:       %empty   { parser_division( data_div_e, NULL, 0, NULL ); }
!         |       DATA_DIV { parser_division( data_div_e, NULL, 0, NULL ); }
!         |       DATA_DIV {
!                   current_division = data_div_e;
!                   parser_division( data_div_e, NULL, 0, NULL ); 
!                 }
!                 data_sections {
                    current_data_section = not_data_datasect_e;
                  }
                  ;
  
*************** data_descr1:    level_name
*** 4091,4098 ****
                    if( $field->has_attr(blank_zero_e) ) {
                      switch($field->type) {
                      case FldNumericEdited:
!                       if( $field->has_attr(signable_e) ) {
!                         error_msg(@2,  "%s has 'S' in PICTURE, cannot be BLANK WHEN ZERO",
                                    $field->name );
                        }
                        break;
--- 4100,4108 ----
                    if( $field->has_attr(blank_zero_e) ) {
                      switch($field->type) {
                      case FldNumericEdited:
!                       // Test appears to be invalid.
!                       if( false && $field->has_attr(signable_e) ) {
!                         error_msg(@2,  "%s has signed PICTURE, cannot be BLANK WHEN ZERO",
                                    $field->name );
                        }
                        break;
*************** picture_clause: PIC signed nps[fore] nin
*** 4446,4451 ****
--- 4456,4465 ----
                    if( field->has_attr(signable_e) && ! $signed ) {
                      dbgmsg("%s PICTURE must be signed for SIGN IS", field->name);
                    }
+                   if( field->type == FldNumericEdited && $signed ) {
+                     gcc_assert(field->has_attr(blank_zero_e));
+                     error_msg(@signed, "%<S%> in PICTURE invalid with BLANK WHEN ZERO");
+                   }
                    field->attr |= $signed;
                    field->data.digits = $nines;
                    auto nchar = type_capacity(field->type, $nines);
*************** picture_clause: PIC signed nps[fore] nin
*** 4474,4479 ****
--- 4488,4497 ----
                    }
                    field->data.digits = $left + $rdigits;
                    field->attr |= $signed;
+                   if( field->type == FldNumericEdited && $signed ) {
+                     gcc_assert(field->has_attr(blank_zero_e));
+                     error_msg(@signed, "%<S%> in PICTURE invalid with BLANK WHEN ZERO");
+                   }
  
                    if( field->is_binary_integer() ) {
                      field->set_capacity(type_capacity(field->type,
*************** picture_clause: PIC signed nps[fore] nin
*** 4511,4516 ****
--- 4529,4538 ----
                    }
                    ERROR_IF_CAPACITY(@PIC, field);
                    field->attr |= $signed;
+                   if( $signed ) {
+                     gcc_assert(field->has_attr(blank_zero_e));
+                     error_msg(@signed, "%<S%> in PICTURE invalid with BLANK WHEN ZERO");
+                   }
                    field->data.digits = size;
                    field->set_capacity(++size);
                    field->data.rdigits = $rdigits;
*************** picture_clause: PIC signed nps[fore] nin
*** 4573,4578 ****
--- 4595,4601 ----
                    field->data.digits   =  digits_of_picture($picture, false);
                    field->data.rdigits  = rdigits_of_picture($picture);
                    if( is_picture_scaled($picture) ) field->attr |= scaled_e;
+                   field->set_signable();
                    auto nchar = length_of_picture($picture);
                    field->set_capacity(nchar);
                    field->blank_initial(nchar);
*************** based_clause:   BASED
*** 5038,5056 ****
                  }
                  ;
  
! blank_zero_clause: blank_when_zero
!                 { cbl_field_t *field = current_field();
!                   // the BLANK WHEN ZERO clause defines the item as numeric-edited.
                    if( !field_type_update(field, FldNumericEdited, @1) ) {
!                     YYERROR;
                    }
!                   field->attr |= blank_zero_e;
                  }
                  ;
- blank_when_zero:
-                 BLANK WHEN ZERO
-         |       BLANK      ZERO
-                 ;
  
  synched_clause: SYNCHRONIZED
          |       SYNCHRONIZED LEFT
--- 5061,5084 ----
                  }
                  ;
  
! blank_zero_clause: BLANK when ZERO
!                 { // BLANK WHEN ZERO defines the item as numeric-edited.
!                   cbl_field_t *field = current_field();
!                   auto attr = blank_zero_e;
                    if( !field_type_update(field, FldNumericEdited, @1) ) {
!                     attr = none_e;
!                     if( field->type == FldNumericDisplay ) {
!                       assert(field->has_attr(signable_e));
!                       error_msg(@$, "signed NUMERIC DISPLAY type "
!                                     "cannot have BLANK WHEN ZERO");
!                     } else {
!                       assert(is_numeric(field));
!                       error_msg(@$, "NUMERIC type cannot have BLANK WHEN ZERO");
!                     }                      
                    }
!                   field->set_attr(attr);
                  }
                  ;
  
  synched_clause: SYNCHRONIZED
          |       SYNCHRONIZED LEFT
*************** volatile_clause:
*** 5197,5210 ****
  procedure_div:  %empty {
  		  if( !procedure_division_ready(@$, NULL, NULL) ) YYABORT;
                  }
-         |       PROCEDURE_DIV '.' {
-                   if( !procedure_division_ready(@$, NULL, NULL) ) YYABORT;
-                 } declaratives sentences
-         |       PROCEDURE_DIV procedure_args '.' declaratives sentences
          |       PROCEDURE_DIV procedure_args '.'
                  ;
  
! procedure_args: USING procedure_uses[args]
                  {
                    if( !procedure_division_ready(@args, NULL, $args) ) YYABORT;
                  }
--- 5225,5238 ----
  procedure_div:  %empty {
  		  if( !procedure_division_ready(@$, NULL, NULL) ) YYABORT;
                  }
          |       PROCEDURE_DIV procedure_args '.'
+         |       PROCEDURE_DIV procedure_args '.' declaratives sentences
                  ;
  
! procedure_args: %empty {
!                   if( !procedure_division_ready(@$, NULL, NULL) ) YYABORT;
!                 }
!         |       USING procedure_uses[args]
                  {
                    if( !procedure_division_ready(@args, NULL, $args) ) YYABORT;
                  }
*************** user_default:   DEFAULT
*** 11824,11829 ****
--- 11852,11861 ----
                  }
                  ;
  
+ when:           %empty
+         |       WHEN
+                 ;
+ 
  with:           %empty
          |       WITH
                  ;
diff -Nrcpad gcc-16-20260201/gcc/cobol/parse_ante.h gcc-16-20260208/gcc/cobol/parse_ante.h
*** gcc-16-20260201/gcc/cobol/parse_ante.h	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/cobol/parse_ante.h	Sun Feb  8 22:32:06 2026
*************** field_type_update( cbl_field_t *field, c
*** 2949,2956 ****
                     bool is_usage = false)
  {
    // preserve NumericEdited if already established
!   if( !is_usage && field->has_attr(blank_zero_e) ) {
!     if( type == FldNumericDisplay && field->type == FldNumericEdited ) {
        return true;
      }
    }
--- 2949,2957 ----
                     bool is_usage = false)
  {
    // preserve NumericEdited if already established
!   if( !is_usage ) {
!     if( field->type == FldNumericEdited && type == FldNumericDisplay ) {
!       assert(field->has_attr(blank_zero_e));
        return true;
      }
    }
*************** field_type_update( cbl_field_t *field, c
*** 2971,2978 ****
    }
  
    if( ! symbol_field_type_update(field, type, is_usage) ) {
!     error_msg(loc, "cannot set USAGE of %s to %s (from %s)", field->name,
!              cbl_field_type_str(type) + 3, cbl_field_type_str(field->type) + 3);
      return false;
    }
  
--- 2972,2981 ----
    }
  
    if( ! symbol_field_type_update(field, type, is_usage) ) {
!     if( type != FldNumericEdited ) { // caller prints message
!       error_msg(loc, "cannot set USAGE of %s to %s (from %s)", field->name,
!                 cbl_field_type_str(type) + 3, cbl_field_type_str(field->type) + 3);
!     }
      return false;
    }
  
diff -Nrcpad gcc-16-20260201/gcc/cobol/symbols.cc gcc-16-20260208/gcc/cobol/symbols.cc
*** gcc-16-20260201/gcc/cobol/symbols.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/cobol/symbols.cc	Sun Feb  8 22:32:06 2026
*************** cbl_field_t::clear_attr( cbl_field_attr_
*** 816,821 ****
--- 816,855 ----
    return this->attr &= ~uint64_t(attr);
  }
  
+ // Test various ways a Numeric Edited picture can describe a signed value.
+ uint64_t 
+ cbl_field_t::set_signable() {
+   gcc_assert(type == FldNumericEdited);
+   gcc_assert(data.picture);
+   char *p = xstrdup(data.picture);
+   char *pend;
+   // Look to see if this is a floating-point numeric-edited:
+   pend = strchr(p, ascii_e);
+   if( !pend ) {
+     pend = strchr(p, ascii_E);
+   }
+   if( pend ) {
+     // We end our inspection at the 'E'
+     *pend = '\0';
+   }
+   size_t len = strlen(p);
+   if( p[0] == ascii_plus || p[0] == ascii_minus ) {
+     // The very first character is plus or minus
+     set_attr(signable_e);
+   } else if( len >= 1 && (p[len-1] == ascii_plus || p[len-1] == ascii_minus)) {
+     // The very last character is plus or minus
+     set_attr(signable_e);
+   }
+   else if( len >= 2 &&
+      (   (TOUPPER(p[len-2]) == ascii_D && TOUPPER(p[len-1]) == ascii_B)
+       || (TOUPPER(p[len-2]) == ascii_C && TOUPPER(p[len-1]) == ascii_R) ) ) {
+     // The last two characters are DB or CR
+     set_attr(signable_e);
+   }
+   free(p);
+   return attr;
+ }
+ 
  static uint32_t
  field_memsize( const struct cbl_field_t *field ) {
    uint32_t n = field->occurs.ntimes();
*************** cbl_field_t::encode( size_t srclen, cbl_
*** 4094,4103 ****
  
      if( inbytesleft == 0 ) {
        if( data.all() ) {
!         for( size_t len = outbuf - data.initial;
!              outbuf + len <= data.initial + data.capacity();
!              outbuf += len ) {
!           std::copy( data.initial, data.initial + len, outbuf );
          }
        }
        if( is_literal(this) ) {
--- 4128,4142 ----
  
      if( inbytesleft == 0 ) {
        if( data.all() ) {
!         size_t len = outbuf - data.initial;
!         // We need to repeatedly append the first len bytes of data.initial to
!         // data.initial until it is full.  Thus ALL "ABC" becomes "ABCABC..."
!         char *d = const_cast<char*>(data.initial);
!         size_t source_i = 0;
!         size_t dest_i   = len;
!         while( dest_i < static_cast<size_t>(data.capacity()) ) {
!           d[dest_i++] = d[source_i++];
!           source_i %= len;
          }
        }
        if( is_literal(this) ) {
diff -Nrcpad gcc-16-20260201/gcc/cobol/symbols.h gcc-16-20260208/gcc/cobol/symbols.h
*** gcc-16-20260201/gcc/cobol/symbols.h	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/cobol/symbols.h	Sun Feb  8 22:32:06 2026
*************** struct cbl_field_t {
*** 889,894 ****
--- 889,895 ----
    uint64_t set_attr( cbl_field_attr_t attr );
    uint64_t clear_attr( cbl_field_attr_t attr );
    const char * attr_str( const std::vector<cbl_field_attr_t>& attrs ) const;
+   uint64_t set_signable();
  
    bool is_justifiable() const {
      if( type == FldAlphanumeric ) return true;
diff -Nrcpad gcc-16-20260201/gcc/cobol/util.cc gcc-16-20260208/gcc/cobol/util.cc
*** gcc-16-20260201/gcc/cobol/util.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/cobol/util.cc	Sun Feb  8 22:32:06 2026
*************** symbol_field_type_update( cbl_field_t *f
*** 970,994 ****
     *  Concrete type candidate
     */
    switch(field->usage) {
!   case FldInvalid:
!     field->type = candidate;
!     field->attr |= numeric_group_attrs(field);
!     // update encoding
      switch( field->type ) {
-     case FldNumericDisplay:
      case FldAlphaEdited:
      case FldNumericEdited:
        return field->codeset.set();
      default:
        break;
      }
      return true;
    case FldDisplay:
      if( is_displayable(candidate) ) {
        field->type = candidate;
        field->attr |= numeric_group_attrs(field);
!       if( ! field->codeset.valid() ) return field->codeset.set();
!       return true;
      }
      break;
    case FldAlphaEdited:
--- 970,1007 ----
     *  Concrete type candidate
     */
    switch(field->usage) {
!   case FldInvalid: // no USAGE clause yet, and not now either
!     // maybe update encoding
      switch( field->type ) {
      case FldAlphaEdited:
      case FldNumericEdited:
+       field->type = candidate;
+       field->attr |= numeric_group_attrs(field);
        return field->codeset.set();
+     case FldNumericDisplay:
+       // If the field is already defined as Numeric Display, it cannot be
+       // converted to Numeric Edited if it is signed.
+       if( candidate == FldNumericEdited) {
+         if( field->has_attr(signable_e) ) return false;
+       }
+       break;
      default:
+       // If the field is already defined as a binary numeric type (not
+       // Display), it cannot be converted to NumericEdited.
+       if( candidate == FldNumericEdited) {
+         if( is_numeric(field->type) ) return false;
+       }
        break;
      }
+     field->type = candidate;
+     field->attr |= numeric_group_attrs(field);
      return true;
    case FldDisplay:
      if( is_displayable(candidate) ) {
        field->type = candidate;
        field->attr |= numeric_group_attrs(field);
!       if( field->codeset.valid() ) return true;
!       return field->codeset.set();
      }
      break;
    case FldAlphaEdited:
*************** cbl_field_t::encode_numeric( const char
*** 1586,1592 ****
              }
            if( l_digits - l_rdigits > data.digits - data.rdigits )
              {
!             error_msg(loc, "VALUE has too many integer digits");
              }
            }
          }
--- 1599,1609 ----
              }
            if( l_digits - l_rdigits > data.digits - data.rdigits )
              {
!             // This error is caught earlier by validate_numeric_edited
!             if( type != FldNumericEdited )
!               {
!               error_msg(loc, "VALUE has too many integer digits");
!               }
              }
            }
          }
*************** cbl_field_t::encode_numeric( const char
*** 1606,1611 ****
--- 1623,1629 ----
      switch(type)
        {
        case FldNumericBin5:
+       case FldIndex:
        case FldLiteralN:
          {
          binary_initial(retval, this, value, l_rdigits);
diff -Nrcpad gcc-16-20260201/gcc/collect2.cc gcc-16-20260208/gcc/collect2.cc
*** gcc-16-20260201/gcc/collect2.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/collect2.cc	Sun Feb  8 22:32:06 2026
*************** static void
*** 579,585 ****
  maybe_run_lto_and_relink (char **lto_ld_argv, char **object_lst,
  			  const char **object, bool force)
  {
!   const char **object_file = CONST_CAST2 (const char **, char **, object_lst);
  
    int num_lto_c_args = 1;    /* Allow space for the terminating NULL.  */
  
--- 579,585 ----
  maybe_run_lto_and_relink (char **lto_ld_argv, char **object_lst,
  			  const char **object, bool force)
  {
!   const char **object_file = const_cast<const char **> (object_lst);
  
    int num_lto_c_args = 1;    /* Allow space for the terminating NULL.  */
  
*************** maybe_run_lto_and_relink (char **lto_ld_
*** 623,629 ****
  	 objects removed.  */
  
        lto_c_argv = (char **) xcalloc (num_lto_c_args, sizeof (char *));
!       lto_c_ptr = CONST_CAST2 (const char **, char **, lto_c_argv);
  
        *lto_c_ptr++ = lto_wrapper;
  
--- 623,629 ----
  	 objects removed.  */
  
        lto_c_argv = (char **) xcalloc (num_lto_c_args, sizeof (char *));
!       lto_c_ptr = const_cast<const char **> (lto_c_argv);
  
        *lto_c_ptr++ = lto_wrapper;
  
*************** main (int argc, char **argv)
*** 921,931 ****
       set first, in case a diagnostic is issued.  */
  
    ld1_argv = XCNEWVEC (char *, argc + 4);
!   ld1 = CONST_CAST2 (const char **, char **, ld1_argv);
    ld2_argv = XCNEWVEC (char *, argc + 11);
!   ld2 = CONST_CAST2 (const char **, char **, ld2_argv);
    object_lst = XCNEWVEC (char *, argc);
!   object = CONST_CAST2 (const char **, char **, object_lst);
  
  #ifdef DEBUG
    debug = true;
--- 921,931 ----
       set first, in case a diagnostic is issued.  */
  
    ld1_argv = XCNEWVEC (char *, argc + 4);
!   ld1 = const_cast<const char **> (ld1_argv);
    ld2_argv = XCNEWVEC (char *, argc + 11);
!   ld2 = const_cast<const char **> (ld2_argv);
    object_lst = XCNEWVEC (char *, argc);
!   object = const_cast<const char **> (object_lst);
  
  #ifdef DEBUG
    debug = true;
*************** main (int argc, char **argv)
*** 1045,1051 ****
    num_c_args += 8;
  
    c_argv = XCNEWVEC (char *, num_c_args);
!   c_ptr = CONST_CAST2 (const char **, char **, c_argv);
  
    if (argc < 2)
      fatal_error (input_location, "no arguments");
--- 1045,1051 ----
    num_c_args += 8;
  
    c_argv = XCNEWVEC (char *, num_c_args);
!   c_ptr = const_cast<const char **> (c_argv);
  
    if (argc < 2)
      fatal_error (input_location, "no arguments");
*************** main (int argc, char **argv)
*** 1348,1360 ****
  		      if (add_nbr >= add_max)
  			{
  			  int pos =
! 			    object - CONST_CAST2 (const char **, char **,
! 						  object_lst);
  			  add_max = (add_max == 0) ? 16 : add_max * 2;
  			  object_lst = XRESIZEVEC (char *, object_lst,
                                                     object_nbr + add_max);
! 			  object = CONST_CAST2 (const char **, char **,
! 						object_lst) + pos;
  			  object_nbr += add_max;
  			}
  		      *object++ = xstrdup (buf);
--- 1348,1359 ----
  		      if (add_nbr >= add_max)
  			{
  			  int pos =
! 			    object - const_cast<const char **> (object_lst);
  			  add_max = (add_max == 0) ? 16 : add_max * 2;
  			  object_lst = XRESIZEVEC (char *, object_lst,
                                                     object_nbr + add_max);
! 			  object =
! 			    const_cast<const char **> (object_lst) + pos;
  			  object_nbr += add_max;
  			}
  		      *object++ = xstrdup (buf);
*************** main (int argc, char **argv)
*** 1518,1525 ****
       would otherwise reference them all, hence drag all the corresponding
       objects even if nothing else is referenced.  */
    {
!     const char **export_object_lst
!       = CONST_CAST2 (const char **, char **, object_lst);
  
      struct id *list = libs.first;
  
--- 1517,1523 ----
       would otherwise reference them all, hence drag all the corresponding
       objects even if nothing else is referenced.  */
    {
!     const char **export_object_lst = const_cast<const char **> (object_lst);
  
      struct id *list = libs.first;
  
*************** main (int argc, char **argv)
*** 1709,1716 ****
        if (strip_flag)
  	{
  	  char **real_strip_argv = XCNEWVEC (char *, 3);
! 	  const char ** strip_argv = CONST_CAST2 (const char **, char **,
! 						  real_strip_argv);
  
  	  strip_argv[0] = strip_file_name;
  	  strip_argv[1] = output_file;
--- 1707,1714 ----
        if (strip_flag)
  	{
  	  char **real_strip_argv = XCNEWVEC (char *, 3);
! 	  const char ** strip_argv =
! 	    const_cast<const char **> (real_strip_argv);
  
  	  strip_argv[0] = strip_file_name;
  	  strip_argv[1] = output_file;
*************** scan_prog_file (const char *prog_name, s
*** 2343,2349 ****
    void (*quit_handler) (int);
  #endif
    char *real_nm_argv[4];
!   const char **nm_argv = CONST_CAST2 (const char **, char**, real_nm_argv);
    int argc = 0;
    struct pex_obj *pex;
    const char *errmsg;
--- 2341,2347 ----
    void (*quit_handler) (int);
  #endif
    char *real_nm_argv[4];
!   const char **nm_argv = const_cast<const char **> (real_nm_argv);
    int argc = 0;
    struct pex_obj *pex;
    const char *errmsg;
*************** scan_libraries (const char *prog_name)
*** 2527,2533 ****
    void (*quit_handler) (int);
  #endif
    char *real_ldd_argv[4];
!   const char **ldd_argv = CONST_CAST2 (const char **, char **, real_ldd_argv);
    int argc = 0;
    struct pex_obj *pex;
    const char *errmsg;
--- 2525,2531 ----
    void (*quit_handler) (int);
  #endif
    char *real_ldd_argv[4];
!   const char **ldd_argv = const_cast<const char **> (real_ldd_argv);
    int argc = 0;
    struct pex_obj *pex;
    const char *errmsg;
*************** scan_prog_file (const char *prog_name, s
*** 2762,2768 ****
  	 non-const char * filename parameter, even though it will not
  	 modify that string.  So we must cast away const-ness here,
  	 using CONST_CAST to prevent complaints from -Wcast-qual.  */
!       if ((ldptr = ldopen (CONST_CAST (char *, prog_name), ldptr)) != NULL)
  	{
  	  if (! MY_ISCOFF (HEADER (ldptr).f_magic))
  	    {
--- 2760,2766 ----
  	 non-const char * filename parameter, even though it will not
  	 modify that string.  So we must cast away const-ness here,
  	 using CONST_CAST to prevent complaints from -Wcast-qual.  */
!       if ((ldptr = ldopen (const_cast<char *> (prog_name), ldptr)) != NULL)
  	{
  	  if (! MY_ISCOFF (HEADER (ldptr).f_magic))
  	    {
*************** do_dsymutil (const char *output_file) {
*** 3029,3036 ****
    const char *dsymutil = 0;
    struct pex_obj *pex;
    char **real_argv = XCNEWVEC (char *, verbose ? 4 : 3);
!   const char ** argv = CONST_CAST2 (const char **, char **,
! 				    real_argv);
  /* For cross-builds search the PATH using target-qualified name if we
     have not already found a suitable dsymutil.  In practice, all modern
     versions of dsymutil handle all supported archs, however the approach
--- 3027,3033 ----
    const char *dsymutil = 0;
    struct pex_obj *pex;
    char **real_argv = XCNEWVEC (char *, verbose ? 4 : 3);
!   const char ** argv = const_cast<const char **> (real_argv);
  /* For cross-builds search the PATH using target-qualified name if we
     have not already found a suitable dsymutil.  In practice, all modern
     versions of dsymutil handle all supported archs, however the approach
diff -Nrcpad gcc-16-20260201/gcc/combine.cc gcc-16-20260208/gcc/combine.cc
*** gcc-16-20260201/gcc/combine.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/combine.cc	Sun Feb  8 22:32:06 2026
*************** try_combine (rtx_insn *i3, rtx_insn *i2,
*** 2615,2620 ****
--- 2615,2622 ----
  	    }
  	  else if (BINARY_P (src) && CONSTANT_P (XEXP (src, 1)))
  	    ngood++;
+ 	  else if (GET_CODE (src) == IF_THEN_ELSE)
+ 	    ngood++;
  	  else if (GET_CODE (src) == ASHIFT || GET_CODE (src) == ASHIFTRT
  		   || GET_CODE (src) == LSHIFTRT)
  	    nshift++;
diff -Nrcpad gcc-16-20260201/gcc/compare-elim.cc gcc-16-20260208/gcc/compare-elim.cc
*** gcc-16-20260201/gcc/compare-elim.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/compare-elim.cc	Sun Feb  8 22:32:06 2026
*************** find_flags_uses_in_insn (struct comparis
*** 258,263 ****
--- 258,265 ----
  	  x = SET_SRC (x);
  	if (GET_CODE (x) == IF_THEN_ELSE)
  	  x = XEXP (x, 0);
+ 	if (GET_CODE (x) == COND_EXEC)
+ 	  x = COND_EXEC_TEST (x);
  	if (COMPARISON_P (x)
  	    && loc == &XEXP (x, 0)
  	    && XEXP (x, 1) == const0_rtx)
diff -Nrcpad gcc-16-20260201/gcc/config/aarch64/aarch64-builtins.cc gcc-16-20260208/gcc/config/aarch64/aarch64-builtins.cc
*** gcc-16-20260201/gcc/config/aarch64/aarch64-builtins.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/config/aarch64/aarch64-builtins.cc	Sun Feb  8 22:32:06 2026
*************** enum aarch64_builtins
*** 892,914 ****
    AARCH64_WSRF,
    AARCH64_WSRF64,
    AARCH64_WSR128,
!   AARCH64_PLD,
!   AARCH64_PLDX,
!   AARCH64_PLI,
!   AARCH64_PLIX,
    /* Armv8.9-A / Armv9.4-A builtins.  */
    AARCH64_BUILTIN_CHKFEAT,
    AARCH64_BUILTIN_GCSPR,
    AARCH64_BUILTIN_GCSPOPM,
    AARCH64_BUILTIN_GCSSS,
    /* Armv9.6-A builtins.  */
    AARCH64_BUILTIN_STSHH_QI,
    AARCH64_BUILTIN_STSHH_HI,
    AARCH64_BUILTIN_STSHH_SI,
    AARCH64_BUILTIN_STSHH_DI,
    AARCH64_BUILTIN_STSHH_SF,
    AARCH64_BUILTIN_STSHH_DF,
!   AARCH64_BUILTIN_PLDIR,
    AARCH64_BUILTIN_MAX
  };
  
--- 892,916 ----
    AARCH64_WSRF,
    AARCH64_WSRF64,
    AARCH64_WSR128,
!   AARCH64_PREFETCH_PLD,
!   AARCH64_PREFETCH_PLDX,
!   AARCH64_PREFETCH_PLI,
!   AARCH64_PREFETCH_PLIX,
!   AARCH64_PREFETCH_PLDIR,
    /* Armv8.9-A / Armv9.4-A builtins.  */
    AARCH64_BUILTIN_CHKFEAT,
    AARCH64_BUILTIN_GCSPR,
    AARCH64_BUILTIN_GCSPOPM,
    AARCH64_BUILTIN_GCSSS,
    /* Armv9.6-A builtins.  */
+   AARCH64_BUILTIN_STSHH,
    AARCH64_BUILTIN_STSHH_QI,
    AARCH64_BUILTIN_STSHH_HI,
    AARCH64_BUILTIN_STSHH_SI,
    AARCH64_BUILTIN_STSHH_DI,
    AARCH64_BUILTIN_STSHH_SF,
    AARCH64_BUILTIN_STSHH_DF,
!   AARCH64_BUILTIN_STSHH_PTR,
    AARCH64_BUILTIN_MAX
  };
  
*************** aarch64_init_rwsr_builtins (void)
*** 2216,2229 ****
    AARCH64_INIT_RWSR_BUILTINS_DECL (WSR128, wsr128, fntype);
  }
  
! /* Add builtins for data and instrution prefetch.  */
  static void
! aarch64_init_prefetch_builtin (void)
  {
! #define AARCH64_INIT_PREFETCH_BUILTIN(INDEX, N)				\
!   aarch64_builtin_decls[INDEX] =					\
!     aarch64_general_add_builtin ("__builtin_aarch64_" N, ftype, INDEX,  \
! 				 prefetch_attrs)
  
    tree ftype;
    tree cv_argtype;
--- 2218,2233 ----
    AARCH64_INIT_RWSR_BUILTINS_DECL (WSR128, wsr128, fntype);
  }
  
! /* Add builtins for data and instruction prefetch.  */
  static void
! aarch64_init_prefetch_builtins (void)
  {
! #define AARCH64_INIT_PREFETCH_BUILTINS_DECL(N, F) \
!   aarch64_builtin_decls[AARCH64_PREFETCH_##F] \
!     = aarch64_general_simulate_builtin (N, ftype, \
! 					AARCH64_PREFETCH_##F, \
! 					prefetch_attrs);
! 
  
    tree ftype;
    tree cv_argtype;
*************** aarch64_init_prefetch_builtin (void)
*** 2233,2249 ****
    cv_argtype = build_pointer_type (cv_argtype);
  
    ftype = build_function_type_list (void_type_node, cv_argtype, NULL);
!   AARCH64_INIT_PREFETCH_BUILTIN (AARCH64_PLD, "pld");
!   AARCH64_INIT_PREFETCH_BUILTIN (AARCH64_PLI, "pli");
  
    ftype = build_function_type_list (void_type_node, unsigned_type_node,
  				    unsigned_type_node, unsigned_type_node,
  				    cv_argtype, NULL);
!   AARCH64_INIT_PREFETCH_BUILTIN (AARCH64_PLDX, "pldx");
  
    ftype = build_function_type_list (void_type_node, unsigned_type_node,
  				    unsigned_type_node, cv_argtype, NULL);
!   AARCH64_INIT_PREFETCH_BUILTIN (AARCH64_PLIX, "plix");
  }
  
  /* Initialize the memory tagging extension (MTE) builtins.  */
--- 2237,2256 ----
    cv_argtype = build_pointer_type (cv_argtype);
  
    ftype = build_function_type_list (void_type_node, cv_argtype, NULL);
!   AARCH64_INIT_PREFETCH_BUILTINS_DECL ("__pld", PLD);
!   AARCH64_INIT_PREFETCH_BUILTINS_DECL ("__pli", PLI);
  
    ftype = build_function_type_list (void_type_node, unsigned_type_node,
  				    unsigned_type_node, unsigned_type_node,
  				    cv_argtype, NULL);
!   AARCH64_INIT_PREFETCH_BUILTINS_DECL ("__pldx", PLDX);
  
    ftype = build_function_type_list (void_type_node, unsigned_type_node,
  				    unsigned_type_node, cv_argtype, NULL);
!   AARCH64_INIT_PREFETCH_BUILTINS_DECL ("__plix", PLIX);
! 
!   ftype = build_function_type_list (void_type_node, cv_argtype, NULL_TREE);
!   AARCH64_INIT_PREFETCH_BUILTINS_DECL ("__pldir", PLDIR);
  }
  
  /* Initialize the memory tagging extension (MTE) builtins.  */
*************** handle_arm_acle_h (void)
*** 2398,2403 ****
--- 2405,2411 ----
    aarch64_init_ls64_builtins ();
    aarch64_init_tme_builtins ();
    aarch64_init_memtag_builtins ();
+   aarch64_init_prefetch_builtins ();
  }
  
  /* Initialize fpsr fpcr getters and setters.  */
*************** aarch64_init_pcdphint_builtins (void)
*** 2482,2487 ****
--- 2490,2503 ----
    tree ftype;
  
    ftype = build_function_type_list (void_type_node, ptr_type_node,
+ 				    void_type_node,
+ 				    unsigned_type_node,
+ 				    unsigned_type_node, NULL_TREE);
+   aarch64_builtin_decls[AARCH64_BUILTIN_STSHH]
+     = aarch64_general_add_builtin ("__builtin_aarch64_stshh", ftype,
+ 				   AARCH64_BUILTIN_STSHH);
+ 
+   ftype = build_function_type_list (void_type_node, ptr_type_node,
  				    unsigned_char_type_node,
  				    unsigned_type_node,
  				    unsigned_type_node, NULL_TREE);
*************** aarch64_init_pcdphint_builtins (void)
*** 2529,2542 ****
      = aarch64_general_add_builtin ("__builtin_aarch64_stshh_df", ftype,
  				   AARCH64_BUILTIN_STSHH_DF);
  
!   tree cv_argtype = build_qualified_type (void_type_node, TYPE_QUAL_CONST
! 					  | TYPE_QUAL_VOLATILE);
!   cv_argtype = build_pointer_type (cv_argtype);
  
-   ftype = build_function_type_list (void_type_node, cv_argtype, NULL_TREE);
-   aarch64_builtin_decls[AARCH64_BUILTIN_PLDIR]
-     = aarch64_general_add_builtin ("__builtin_aarch64_pldir", ftype,
- 				   AARCH64_BUILTIN_PLDIR);
  }
  
  /* Initialize all builtins in the AARCH64_BUILTIN_GENERAL group.  */
--- 2545,2558 ----
      = aarch64_general_add_builtin ("__builtin_aarch64_stshh_df", ftype,
  				   AARCH64_BUILTIN_STSHH_DF);
  
!   ftype = build_function_type_list (void_type_node, ptr_type_node,
! 				    ptr_type_node,
! 				    unsigned_type_node,
! 				    unsigned_type_node, NULL_TREE);
!   aarch64_builtin_decls[AARCH64_BUILTIN_STSHH_PTR]
!     = aarch64_general_add_builtin ("__builtin_aarch64_stshh_ptr", ftype,
! 				   AARCH64_BUILTIN_STSHH_PTR);
  
  }
  
  /* Initialize all builtins in the AARCH64_BUILTIN_GENERAL group.  */
*************** aarch64_general_init_builtins (void)
*** 2563,2569 ****
    aarch64_init_data_intrinsics ();
  
    aarch64_init_rwsr_builtins ();
-   aarch64_init_prefetch_builtin ();
  
    tree ftype_jcvt
      = build_function_type_list (intSI_type_node, double_type_node, NULL);
--- 2579,2584 ----
*************** aarch64_expand_prefetch_builtin (tree ex
*** 3682,3695 ****
       sensible defaults.  */
    switch (fcode)
      {
!     case AARCH64_PLDX:
        break;
!     case AARCH64_PLIX:
        kind_id = 2;
        break;
!     case AARCH64_PLI:
!     case AARCH64_PLD:
!       kind_id  = (fcode == AARCH64_PLD) ? 0 : 2;
        level_id = 0;
        rettn_id = 0;
        break;
--- 3697,3710 ----
       sensible defaults.  */
    switch (fcode)
      {
!     case AARCH64_PREFETCH_PLDX:
        break;
!     case AARCH64_PREFETCH_PLIX:
        kind_id = 2;
        break;
!     case AARCH64_PREFETCH_PLI:
!     case AARCH64_PREFETCH_PLD:
!       kind_id  = (fcode == AARCH64_PREFETCH_PLD) ? 0 : 2;
        level_id = 0;
        rettn_id = 0;
        break;
*************** aarch64_general_expand_builtin (unsigned
*** 4572,4584 ****
      case AARCH64_WSRF64:
      case AARCH64_WSR128:
        return aarch64_expand_rwsr_builtin (exp, target, fcode);
!     case AARCH64_PLD:
!     case AARCH64_PLDX:
!     case AARCH64_PLI:
!     case AARCH64_PLIX:
        aarch64_expand_prefetch_builtin (exp, fcode);
        return target;
! 
      case AARCH64_BUILTIN_CHKFEAT:
        {
  	rtx x16_reg = gen_rtx_REG (DImode, R16_REGNUM);
--- 4587,4601 ----
      case AARCH64_WSRF64:
      case AARCH64_WSR128:
        return aarch64_expand_rwsr_builtin (exp, target, fcode);
!     case AARCH64_PREFETCH_PLD:
!     case AARCH64_PREFETCH_PLDX:
!     case AARCH64_PREFETCH_PLI:
!     case AARCH64_PREFETCH_PLIX:
        aarch64_expand_prefetch_builtin (exp, fcode);
        return target;
!     case AARCH64_PREFETCH_PLDIR:
!       aarch64_expand_pldir_builtin (exp);
!       return target;
      case AARCH64_BUILTIN_CHKFEAT:
        {
  	rtx x16_reg = gen_rtx_REG (DImode, R16_REGNUM);
*************** aarch64_general_expand_builtin (unsigned
*** 4599,4613 ****
      case AARCH64_BUILTIN_STSHH_DI:
      case AARCH64_BUILTIN_STSHH_SF:
      case AARCH64_BUILTIN_STSHH_DF:
        aarch64_expand_stshh_builtin (exp, fcode);
        return target;
! 
!     case AARCH64_BUILTIN_PLDIR:
!       {
! 	aarch64_expand_pldir_builtin (exp);
! 	return target;
!       }
!     }
  
    if (fcode >= AARCH64_SIMD_BUILTIN_BASE && fcode <= AARCH64_SIMD_BUILTIN_MAX)
      return aarch64_simd_expand_builtin (fcode, exp, target);
--- 4616,4625 ----
      case AARCH64_BUILTIN_STSHH_DI:
      case AARCH64_BUILTIN_STSHH_SF:
      case AARCH64_BUILTIN_STSHH_DF:
+     case AARCH64_BUILTIN_STSHH_PTR:
        aarch64_expand_stshh_builtin (exp, fcode);
        return target;
!   }
  
    if (fcode >= AARCH64_SIMD_BUILTIN_BASE && fcode <= AARCH64_SIMD_BUILTIN_MAX)
      return aarch64_simd_expand_builtin (fcode, exp, target);
*************** aarch64_resolve_overloaded_memtag (locat
*** 5767,5772 ****
--- 5779,5824 ----
    return NULL_TREE;
  }
  
+ static tree
+ aarch64_resolve_overloaded_builtin_stshh (void *pass_params)
+ {
+   vec<tree, va_gc> *params = static_cast<vec<tree, va_gc> *> (pass_params);
+   if (vec_safe_length (params) != 4)
+     return NULL_TREE;
+ 
+   tree addr = (*params)[0];
+   tree val = (*params)[1];
+   addr = tree_strip_nop_conversions (addr);
+   val = tree_strip_nop_conversions (val);
+ 
+   tree addr_type = TREE_TYPE (addr);
+   if (!POINTER_TYPE_P (addr_type))
+     return NULL_TREE;
+ 
+   tree ptr_type = TYPE_MAIN_VARIANT (TREE_TYPE (addr_type));
+ 
+   if (POINTER_TYPE_P (ptr_type))
+     return aarch64_builtin_decls[AARCH64_BUILTIN_STSHH_PTR];
+ 
+   switch (TYPE_MODE (ptr_type))
+     {
+     case QImode:
+       return aarch64_builtin_decls[AARCH64_BUILTIN_STSHH_QI];
+     case HImode:
+       return aarch64_builtin_decls[AARCH64_BUILTIN_STSHH_HI];
+     case SImode:
+       return aarch64_builtin_decls[AARCH64_BUILTIN_STSHH_SI];
+     case DImode:
+       return aarch64_builtin_decls[AARCH64_BUILTIN_STSHH_DI];
+     case SFmode:
+       return aarch64_builtin_decls[AARCH64_BUILTIN_STSHH_SF];
+     case DFmode:
+       return aarch64_builtin_decls[AARCH64_BUILTIN_STSHH_DF];
+     default:
+       return NULL_TREE;
+     }
+ }
+ 
  /* Called at aarch64_resolve_overloaded_builtin in aarch64-c.cc.  */
  tree
  aarch64_resolve_overloaded_builtin_general (location_t loc, tree function,
*************** aarch64_resolve_overloaded_builtin_gener
*** 5778,5783 ****
--- 5830,5838 ----
        && fcode <= AARCH64_MEMTAG_BUILTIN_END)
      return aarch64_resolve_overloaded_memtag(loc, function, pass_params);
  
+   if (fcode == AARCH64_BUILTIN_STSHH)
+     return aarch64_resolve_overloaded_builtin_stshh (pass_params);
+ 
    return NULL_TREE;
  }
  
diff -Nrcpad gcc-16-20260201/gcc/config/aarch64/aarch64-c.cc gcc-16-20260208/gcc/config/aarch64/aarch64-c.cc
*** gcc-16-20260201/gcc/config/aarch64/aarch64-c.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/config/aarch64/aarch64-c.cc	Sun Feb  8 22:32:06 2026
*************** aarch64_resolve_overloaded_builtin (loca
*** 431,438 ****
    switch (code & AARCH64_BUILTIN_CLASS)
      {
      case AARCH64_BUILTIN_GENERAL:
!       return aarch64_resolve_overloaded_builtin_general (location, fndecl,
  							 uncast_arglist);
      case AARCH64_BUILTIN_SVE:
        new_fndecl = aarch64_sve::resolve_overloaded_builtin (location, subcode,
  							    arglist);
--- 431,439 ----
    switch (code & AARCH64_BUILTIN_CLASS)
      {
      case AARCH64_BUILTIN_GENERAL:
!       new_fndecl = aarch64_resolve_overloaded_builtin_general (location, fndecl,
  							 uncast_arglist);
+       break;
      case AARCH64_BUILTIN_SVE:
        new_fndecl = aarch64_sve::resolve_overloaded_builtin (location, subcode,
  							    arglist);
diff -Nrcpad gcc-16-20260201/gcc/config/aarch64/aarch64-cores.def gcc-16-20260208/gcc/config/aarch64/aarch64-cores.def
*** gcc-16-20260201/gcc/config/aarch64/aarch64-cores.def	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/config/aarch64/aarch64-cores.def	Sun Feb  8 22:32:06 2026
*************** AARCH64_CORE("a64fx", a64fx, a64fx, V8_2
*** 137,142 ****
--- 137,143 ----
  AARCH64_CORE("fujitsu-monaka", fujitsu_monaka, cortexa57, V9_3A, (F16, FAMINMAX, FP8FMA, FP8DOT2, FP8DOT4, LS64, LUT, RNG, CRYPTO, SVE2_AES, SVE2_BITPERM, SVE2_SHA3, SVE2_SM4), fujitsu_monaka, 0x46, 0x003, -1)
  
  /* HiSilicon ('H') cores. */
+ AARCH64_CORE("hip12", hip12, cortexa57, V8_7A, (F16, PROFILE, RNG, SVE2_BITPERM, SVE2_AES, SVE2_SM4, SVE2_SHA3, LS64, RCPC3), hip12, 0x48, 0xd06, -1)
  AARCH64_CORE("tsv110",  tsv110, tsv110, V8_2A,  (CRYPTO, F16), tsv110,   0x48, 0xd01, -1)
  
  /* ARMv8.3-A Architecture Processors.  */
diff -Nrcpad gcc-16-20260201/gcc/config/aarch64/aarch64-cost-tables.h gcc-16-20260208/gcc/config/aarch64/aarch64-cost-tables.h
*** gcc-16-20260201/gcc/config/aarch64/aarch64-cost-tables.h	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/config/aarch64/aarch64-cost-tables.h	Sun Feb  8 22:32:06 2026
*************** const struct cpu_cost_table tsv110_extra
*** 561,566 ****
--- 561,673 ----
    }
  };
  
+ const struct cpu_cost_table hip12_extra_costs =
+ {
+   /* ALU */
+   {
+     0,                 /* arith.  */
+     0,                 /* logical.  */
+     0,                 /* shift.  */
+     0,                 /* shift_reg.  */
+     COSTS_N_INSNS (1), /* arith_shift.  */
+     COSTS_N_INSNS (1), /* arith_shift_reg.  */
+     0,                 /* log_shift.  */
+     0,                 /* log_shift_reg.  */
+     0,                 /* extend.  */
+     COSTS_N_INSNS (1), /* extend_arith.  */
+     0,                 /* bfi.  */
+     0,                 /* bfx.  */
+     0,                 /* clz.  */
+     0,                 /* rev.  */
+     0,                 /* non_exec.  */
+     true               /* non_exec_costs_exec.  */
+   },
+   {
+     /* MULT SImode */
+     {
+       COSTS_N_INSNS (1),       /* simple.  */
+       COSTS_N_INSNS (1),       /* flag_setting.  */
+       COSTS_N_INSNS (1),       /* extend.  */
+       COSTS_N_INSNS (2),       /* add.  */
+       COSTS_N_INSNS (2),       /* extend_add.  */
+       COSTS_N_INSNS (5)        /* idiv.  */
+     },
+     /* MULT DImode */
+     {
+       COSTS_N_INSNS (2),       /* simple.  */
+       0,                       /* flag_setting (N/A).  */
+       COSTS_N_INSNS (2),       /* extend.  */
+       COSTS_N_INSNS (3),       /* add.  */
+       COSTS_N_INSNS (3),       /* extend_add.  */
+       COSTS_N_INSNS (7)        /* idiv.  */
+     }
+   },
+   /* LD/ST */
+   {
+     COSTS_N_INSNS (3),         /* load.  */
+     COSTS_N_INSNS (3),         /* load_sign_extend.  */
+     COSTS_N_INSNS (3),         /* ldrd.  */
+     0,                         /* ldm_1st.  */
+     0,                         /* ldm_regs_per_insn_1st.  */
+     0,                         /* ldm_regs_per_insn_subsequent.  */
+     COSTS_N_INSNS (5),         /* loadf.  */
+     COSTS_N_INSNS (5),         /* loadd.  */
+     COSTS_N_INSNS (4),         /* load_unaligned.  */
+     0,                         /* store.  */
+     0,                         /* strd.  */
+     0,                         /* stm_1st.  */
+     0,                         /* stm_regs_per_insn_1st.  */
+     0,                         /* stm_regs_per_insn_subsequent.  */
+     0,                         /* storef.  */
+     0,                         /* stored.  */
+     COSTS_N_INSNS (1),         /* store_unaligned.  */
+     COSTS_N_INSNS (5),         /* loadv.  */
+     COSTS_N_INSNS (1)          /* storev.  */
+   },
+   {
+     /* FP SFmode */
+     {
+       COSTS_N_INSNS (5),       /* div.  */
+       COSTS_N_INSNS (2),       /* mult.  */
+       COSTS_N_INSNS (4),       /* mult_addsub.  */
+       COSTS_N_INSNS (3),       /* fma.  */
+       COSTS_N_INSNS (1),       /* addsub.  */
+       COSTS_N_INSNS (1),       /* fpconst.  */
+       0,                       /* neg.  */
+       COSTS_N_INSNS (1),       /* compare.  */
+       COSTS_N_INSNS (2),       /* widen.  */
+       COSTS_N_INSNS (2),       /* narrow.  */
+       COSTS_N_INSNS (2),       /* toint.  */
+       COSTS_N_INSNS (3),       /* fromint.  */
+       COSTS_N_INSNS (2)        /* roundint.  */
+     },
+     /* FP DFmode */
+     {
+       COSTS_N_INSNS (7),       /* div.  */
+       COSTS_N_INSNS (2),       /* mult.  */
+       COSTS_N_INSNS (4),       /* mult_addsub.  */
+       COSTS_N_INSNS (3),       /* fma.  */
+       COSTS_N_INSNS (1),       /* addsub.  */
+       COSTS_N_INSNS (1),       /* fpconst.  */
+       0,                       /* neg.  */
+       COSTS_N_INSNS (1),       /* compare.  */
+       COSTS_N_INSNS (2),       /* widen.  */
+       COSTS_N_INSNS (2),       /* narrow.  */
+       COSTS_N_INSNS (2),       /* toint.  */
+       COSTS_N_INSNS (3),       /* fromint.  */
+       COSTS_N_INSNS (2)        /* roundint.  */
+     }
+   },
+   /* Vector */
+   {
+     COSTS_N_INSNS (1),  /* alu.  */
+     COSTS_N_INSNS (2),  /* mult.  */
+     COSTS_N_INSNS (1),  /* movi.  */
+     COSTS_N_INSNS (1),  /* dup.  */
+     COSTS_N_INSNS (1)   /* extract.  */
+   }
+ };
+ 
  const struct cpu_cost_table a64fx_extra_costs =
  {
    /* ALU */
diff -Nrcpad gcc-16-20260201/gcc/config/aarch64/aarch64-tune.md gcc-16-20260208/gcc/config/aarch64/aarch64-tune.md
*** gcc-16-20260201/gcc/config/aarch64/aarch64-tune.md	Sun Feb  1 22:32:20 2026
--- gcc-16-20260208/gcc/config/aarch64/aarch64-tune.md	Sun Feb  8 22:32:19 2026
***************
*** 1,5 ****
  ;; -*- buffer-read-only: t -*-
  ;; Generated automatically by gentune.sh from aarch64-cores.def
  (define_attr "tune"
! 	"cortexa34,cortexa35,cortexa53,cortexa57,cortexa72,cortexa73,thunderx,thunderxt88,thunderxt88p1,octeontx,octeontxt81,octeontxt83,thunderxt81,thunderxt83,ampere1,ampere1a,ampere1b,ampere1c,emag,xgene1,falkor,qdf24xx,exynosm1,phecda,thunderx2t99p1,vulcan,thunderx2t99,cortexa55,cortexa75,cortexa76,cortexa76ae,cortexa77,cortexa78,cortexa78ae,cortexa78c,cortexa65,cortexa65ae,cortexx1,cortexx1c,neoversen1,ares,neoversee1,octeontx2,octeontx2t98,octeontx2t96,octeontx2t93,octeontx2f95,octeontx2f95n,octeontx2f95mm,a64fx,fujitsu_monaka,tsv110,thunderx3t110,neoversev1,zeus,neoverse512tvb,saphira,oryon1,cortexa57cortexa53,cortexa72cortexa53,cortexa73cortexa35,cortexa73cortexa53,cortexa75cortexa55,cortexa76cortexa55,cortexr82,cortexr82ae,applea12,applem1_0,applem1_1,applem1_2,applem1_3,applem2_0,applem2_1,applem2_2,applem2_3,applem3_0,applem3_1,applem3_2,applem4_0,applem4_1,applem4_2,cortexa510,cortexa520,cortexa520ae,cortexa710,cortexa715,cortexa720,cortexa720ae,cortexa725,cortexa320,cortexx2,cortexx3,cortexx4,cortexx925,neoversen2,cobalt100,neoversen3,neoversev2,grace,neoversev3,neoversev3ae,c1nano,c1pro,c1premium,c1ultra,demeter,olympus,gb10,generic,generic_armv8_a,generic_armv9_a"
  	(const (symbol_ref "((enum attr_tune) aarch64_tune)")))
--- 1,5 ----
  ;; -*- buffer-read-only: t -*-
  ;; Generated automatically by gentune.sh from aarch64-cores.def
  (define_attr "tune"
! 	"cortexa34,cortexa35,cortexa53,cortexa57,cortexa72,cortexa73,thunderx,thunderxt88,thunderxt88p1,octeontx,octeontxt81,octeontxt83,thunderxt81,thunderxt83,ampere1,ampere1a,ampere1b,ampere1c,emag,xgene1,falkor,qdf24xx,exynosm1,phecda,thunderx2t99p1,vulcan,thunderx2t99,cortexa55,cortexa75,cortexa76,cortexa76ae,cortexa77,cortexa78,cortexa78ae,cortexa78c,cortexa65,cortexa65ae,cortexx1,cortexx1c,neoversen1,ares,neoversee1,octeontx2,octeontx2t98,octeontx2t96,octeontx2t93,octeontx2f95,octeontx2f95n,octeontx2f95mm,a64fx,fujitsu_monaka,hip12,tsv110,thunderx3t110,neoversev1,zeus,neoverse512tvb,saphira,oryon1,cortexa57cortexa53,cortexa72cortexa53,cortexa73cortexa35,cortexa73cortexa53,cortexa75cortexa55,cortexa76cortexa55,cortexr82,cortexr82ae,applea12,applem1_0,applem1_1,applem1_2,applem1_3,applem2_0,applem2_1,applem2_2,applem2_3,applem3_0,applem3_1,applem3_2,applem4_0,applem4_1,applem4_2,cortexa510,cortexa520,cortexa520ae,cortexa710,cortexa715,cortexa720,cortexa720ae,cortexa725,cortexa320,cortexx2,cortexx3,cortexx4,cortexx925,neoversen2,cobalt100,neoversen3,neoversev2,grace,neoversev3,neoversev3ae,c1nano,c1pro,c1premium,c1ultra,demeter,olympus,gb10,generic,generic_armv8_a,generic_armv9_a"
  	(const (symbol_ref "((enum attr_tune) aarch64_tune)")))
diff -Nrcpad gcc-16-20260201/gcc/config/aarch64/aarch64.cc gcc-16-20260208/gcc/config/aarch64/aarch64.cc
*** gcc-16-20260201/gcc/config/aarch64/aarch64.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/config/aarch64/aarch64.cc	Sun Feb  8 22:32:06 2026
*************** static const struct aarch64_flag_desc aa
*** 422,427 ****
--- 422,428 ----
  #include "tuning_models/thunderxt88.h"
  #include "tuning_models/thunderx.h"
  #include "tuning_models/tsv110.h"
+ #include "tuning_models/hip12.h"
  #include "tuning_models/xgene1.h"
  #include "tuning_models/emag.h"
  #include "tuning_models/qdf24xx.h"
*************** aarch64_vector_costs::add_stmt_cost (int
*** 18614,18621 ****
  		|| SLP_TREE_DEF_TYPE (node) == vect_external_def)
  	       && !aarch64_possible_by_lane_insn_p (m_vinfo, stmt))
  	m_num_dup_stmts++;
-       else
- 	m_loop_fully_scalar_dup = false;
      }
  
    /* Apply the heuristic described above m_stp_sequence_cost.  */
--- 18615,18620 ----
*************** aarch64_mangle_type (const_tree type)
*** 23729,23735 ****
       The Windows Arm64 ABI uses just an address of the first variadic
       argument.  */
    if (!TARGET_AARCH64_MS_ABI
!       && lang_hooks.types_compatible_p (CONST_CAST_TREE (type), va_list_type))
      return "St9__va_list";
  
    /* Half-precision floating point types.  */
--- 23728,23734 ----
       The Windows Arm64 ABI uses just an address of the first variadic
       argument.  */
    if (!TARGET_AARCH64_MS_ABI
!       && lang_hooks.types_compatible_p (const_cast<tree> (type), va_list_type))
      return "St9__va_list";
  
    /* Half-precision floating point types.  */
*************** seq_cost_ignoring_scalar_moves (const rt
*** 25662,25668 ****
  	  }
  	else
  	  {
! 	    int this_cost = insn_cost (CONST_CAST_RTX_INSN (seq), speed);
  	    if (this_cost > 0)
  	      cost += this_cost;
  	    else
--- 25661,25668 ----
  	  }
  	else
  	  {
! 	    int this_cost = insn_cost (const_cast<struct rtx_insn *> (seq),
! 				       speed);
  	    if (this_cost > 0)
  	      cost += this_cost;
  	    else
diff -Nrcpad gcc-16-20260201/gcc/config/aarch64/arm_acle.h gcc-16-20260208/gcc/config/aarch64/arm_acle.h
*** gcc-16-20260201/gcc/config/aarch64/arm_acle.h	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/config/aarch64/arm_acle.h	Sun Feb  8 22:32:06 2026
*************** _GCC_ARM_ACLE_DATA_FN (revll, bswap64, u
*** 78,120 ****
  
  #undef _GCC_ARM_ACLE_DATA_FN
  
- __extension__ extern __inline void
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- __pld (void const volatile *__addr)
- {
-   return __builtin_aarch64_pld (__addr);
- }
- 
- __extension__ extern __inline void
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- __pli (void const volatile *__addr)
- {
-   return __builtin_aarch64_pli (__addr);
- }
- 
- __extension__ extern __inline void
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- __plix (unsigned int __cache, unsigned int __rettn,
- 	void const volatile *__addr)
- {
-   return __builtin_aarch64_plix (__cache, __rettn, __addr);
- }
- 
- __extension__ extern __inline void
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- __pldx (unsigned int __access, unsigned int __cache, unsigned int __rettn,
- 	void const volatile *__addr)
- {
-   return __builtin_aarch64_pldx (__access, __cache, __rettn, __addr);
- }
- 
- __extension__ extern __inline void
- __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
- __pldir (void const volatile *__addr)
- {
-   return __builtin_aarch64_pldir (__addr);
- }
- 
  __extension__ extern __inline unsigned long
  __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
  __revl (unsigned long __value)
--- 78,83 ----
*************** __sqrtf (float __x)
*** 139,165 ****
    return __builtin_aarch64_sqrtsf (__x);
  }
  
! #define __atomic_store_with_stshh(addr, value, memory_order, ret)	\
! ({									\
!   __auto_type ptr = (addr);						\
!   typedef __typeof__ (*ptr) ptr_type;					\
!   _Generic ((*ptr),							\
!     char:		  __builtin_aarch64_stshh_qi,	\
!     unsigned char:	  __builtin_aarch64_stshh_qi,	\
!     signed char:	  __builtin_aarch64_stshh_qi,	\
!     unsigned short:       __builtin_aarch64_stshh_hi,	\
!     short:		  __builtin_aarch64_stshh_hi,	\
!     unsigned int:	  __builtin_aarch64_stshh_si,	\
!     int:		  __builtin_aarch64_stshh_si,	\
!     unsigned long:	  __builtin_aarch64_stshh_di,	\
!     long:		  __builtin_aarch64_stshh_di,	\
!     unsigned long long:   __builtin_aarch64_stshh_di,	\
!     long long:		  __builtin_aarch64_stshh_di,	\
!     float:		  __builtin_aarch64_stshh_sf,	\
!     double:		  __builtin_aarch64_stshh_df,	\
!     default:		  __builtin_aarch64_stshh_di	\
!   )((ptr), (ptr_type)(value), (memory_order), (ret));	\
! })
  
  #pragma GCC push_options
  #pragma GCC target ("+nothing+jscvt")
--- 102,110 ----
    return __builtin_aarch64_sqrtsf (__x);
  }
  
! #define __atomic_store_with_stshh(__addr, __value, __memory_order, __ret) \
!   __builtin_aarch64_stshh ((__addr), (__value), \
! 					     (__memory_order), (__ret))
  
  #pragma GCC push_options
  #pragma GCC target ("+nothing+jscvt")
diff -Nrcpad gcc-16-20260201/gcc/config/aarch64/tuning_models/hip12.h gcc-16-20260208/gcc/config/aarch64/tuning_models/hip12.h
*** gcc-16-20260201/gcc/config/aarch64/tuning_models/hip12.h	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/config/aarch64/tuning_models/hip12.h	Sun Feb  8 22:32:06 2026
***************
*** 0 ****
--- 1,227 ----
+ /* Tuning model description for AArch64 architecture.
+    Copyright (C) 2009-2026 Free Software Foundation, Inc.
+ 
+    This file is part of GCC.
+ 
+    GCC is free software; you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 3, or (at your option)
+    any later version.
+ 
+    GCC is distributed in the hope that it will be useful, but
+    WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    General Public License for more details.
+ 
+    You should have received a copy of the GNU General Public License
+    along with GCC; see the file COPYING3.  If not see
+    <http://www.gnu.org/licenses/>.  */
+ 
+ #ifndef GCC_AARCH64_H_HIP12
+ #define GCC_AARCH64_H_HIP12
+ 
+ #include "generic.h"
+ 
+ static const struct cpu_addrcost_table hip12_addrcost_table =
+ {
+     {
+       0, /* hi  */
+       0, /* si  */
+       0, /* di  */
+       2, /* ti  */
+     },
+   0, /* pre_modify  */
+   0, /* post_modify  */
+   2, /* post_modify_ld3_st3  */
+   2, /* post_modify_ld4_st4  */
+   0, /* register_offset  */
+   0, /* register_sextend  */
+   0, /* register_zextend  */
+   0, /* imm_offset  */
+ };
+ 
+ static const struct cpu_regmove_cost hip12_regmove_cost =
+ {
+   1, /* GP2GP  */
+   /* Spilling to int<->fp instead of memory is recommended so set
+      realistic costs compared to memmov_cost.  */
+   5, /* GP2FP  */
+   2, /* FP2GP  */
+   2  /* FP2FP  */
+ };
+ 
+ static const advsimd_vec_cost hip12_advsimd_vector_cost =
+ {
+   2, /* int_stmt_cost  */
+   2, /* fp_stmt_cost  */
+   2, /* ld2_st2_permute_cost  */
+   2, /* ld3_st3_permute_cost  */
+   3, /* ld4_st4_permute_cost  */
+   2, /* permute_cost  */
+   9, /* reduc_i8_cost  */
+   7, /* reduc_i16_cost  */
+   5, /* reduc_i32_cost  */
+   3, /* reduc_i64_cost  */
+   9, /* reduc_f16_cost  */
+   6, /* reduc_f32_cost  */
+   3, /* reduc_f64_cost  */
+   2, /* store_elt_extra_cost  */
+   2, /* vec_to_scalar_cost  */
+   4, /* scalar_to_vec_cost  */
+   6, /* align_load_cost  */
+   6, /* unalign_load_cost  */
+   1, /* unalign_store_cost  */
+   1  /* store_cost  */
+ };
+ 
+ static const sve_vec_cost hip12_sve_vector_cost =
+ {
+   {
+     2, /* int_stmt_cost  */
+     2, /* fp_stmt_cost  */
+     2, /* ld2_st2_permute_cost  */
+     3, /* ld3_st3_permute_cost  */
+     3, /* ld4_st4_permute_cost  */
+     2, /* permute_cost  */
+     /* Theoretically, a reduction involving 31 scalar ADDs could
+        complete in ~6 cycles and would have a cost of 31.  [SU]ADDV
+        completes in 13 cycles, so give it a cost of 31 + 7.  */
+     38, /* reduc_i8_cost  */
+     /* Likewise for 15 scalar ADDs (~3 cycles) vs. 10: 15 + 7.  */
+     22, /* reduc_i16_cost  */
+     /* Likewise for 7 scalar ADDs (~2 cycles) vs. 7: 7 + 5.  */
+     12, /* reduc_i32_cost  */
+     /* Likewise for 3 scalar ADDs (~1 cycles) vs. 4: 3 + 3.  */
+     6, /* reduc_i64_cost  */
+     /* Theoretically, a reduction involving 15 scalar FADDs could
+        complete in ~8 cycles and would have a cost of 30.  FADDV
+        completes in 15 cycles, so give it a cost of 30 + 7.  */
+     37, /* reduc_f16_cost  */
+     /* Likewise for 7 scalar FADDs (~4 cycles) vs. 12: 14 + 8.  */
+     22, /* reduc_f32_cost  */
+     /* Likewise for 3 scalar FADDs (~2 cycles) vs. 9: 6 + 7.  */
+     13, /* reduc_f64_cost  */
+     2, /* store_elt_extra_cost  */
+     2, /* vec_to_scalar_cost  */
+     4, /* scalar_to_vec_cost  */
+     6, /* align_load_cost  */
+     6, /* unalign_load_cost  */
+     1, /* unalign_store_cost  */
+     1  /* store_cost  */
+   },
+   3, /* clast_cost  */
+   42, /* fadda_f16_cost  */
+   26, /* fadda_f32_cost  */
+   20, /* fadda_f64_cost  */
+   32, /* gather_load_x32_cost  */
+   16, /* gather_load_x64_cost  */
+   96, /* gather_load_x32_init_cost  */
+   32, /* gather_load_x64_init_cost  */
+   3 /* scatter_store_elt_cost  */
+ };
+ 
+ static const aarch64_scalar_vec_issue_info hip12_scalar_issue_info =
+ {
+   5, /* loads_stores_per_cycle  */
+   2, /* stores_per_cycle  */
+   6, /* general_ops_per_cycle  */
+   0, /* fp_simd_load_general_ops  */
+   1 /* fp_simd_store_general_ops  */
+ };
+ 
+ static const aarch64_advsimd_vec_issue_info hip12_advsimd_issue_info =
+ {
+   {
+     5, /* loads_stores_per_cycle  */
+     2, /* stores_per_cycle  */
+     4, /* general_ops_per_cycle  */
+     0, /* fp_simd_load_general_ops  */
+     1 /* fp_simd_store_general_ops  */
+   },
+   2, /* ld2_st2_general_ops  */
+   2, /* ld3_st3_general_ops  */
+   3 /* ld4_st4_general_ops  */
+ };
+ 
+ static const aarch64_sve_vec_issue_info hip12_sve_issue_info =
+ {
+   {
+     {
+       5, /* loads_stores_per_cycle  */
+       2, /* stores_per_cycle  */
+       2, /* general_ops_per_cycle  */
+       0, /* fp_simd_load_general_ops  */
+       1 /* fp_simd_store_general_ops  */
+     },
+     2, /* ld2_st2_general_ops  */
+     2, /* ld3_st3_general_ops  */
+     3 /* ld4_st4_general_ops  */
+   },
+   2, /* pred_ops_per_cycle  */
+   2, /* while_pred_ops  */
+   2, /* int_cmp_pred_ops  */
+   1, /* fp_cmp_pred_ops  */
+   1, /* gather_scatter_pair_general_ops  */
+   1 /* gather_scatter_pair_pred_ops  */
+ };
+ 
+ static const aarch64_vec_issue_info hip12_vec_issue_info =
+ {
+   &hip12_scalar_issue_info,
+   &hip12_advsimd_issue_info,
+   &hip12_sve_issue_info
+ };
+ 
+ static const struct cpu_vector_cost hip12_vector_cost =
+ {
+   1, /* scalar_int_stmt_cost  */
+   2, /* scalar_fp_stmt_cost  */
+   4, /* scalar_load_cost  */
+   1, /* scalar_store_cost  */
+   1, /* cond_taken_branch_cost  */
+   1, /* cond_not_taken_branch_cost  */
+   &hip12_advsimd_vector_cost, /* advsimd  */
+   &hip12_sve_vector_cost, /* sve  */
+   &hip12_vec_issue_info /* issue_info  */
+ };
+ 
+ static const struct tune_params hip12_tunings =
+ {
+   &hip12_extra_costs,
+   &hip12_addrcost_table,
+   &hip12_regmove_cost,
+   &hip12_vector_cost,
+   &generic_branch_cost,
+   &generic_approx_modes,
+   SVE_256, /* sve_width  */
+   { 4, /* load_int.  */
+     1, /* store_int.  */
+     6, /* load_fp.  */
+     1, /* store_fp.  */
+     8, /* load_pred.  */
+     4 /* store_pred.  */
+   }, /* memmov_cost.  */
+   8,    /* issue_rate  */
+   (AARCH64_FUSE_BASE
+    | AARCH64_FUSE_CMP_CSEL
+    | AARCH64_FUSE_CMP_CSET), /* fusible_ops  */
+   "16", /* function_align.  */
+   "4",  /* jump_align.  */
+   "8",  /* loop_align.  */
+   2,    /* int_reassoc_width.  */
+   4,    /* fp_reassoc_width.  */
+   2,    /* fma_reassoc_width.  */
+   2,    /* vec_reassoc_width.  */
+   2,    /* min_div_recip_mul_sf.  */
+   2,    /* min_div_recip_mul_df.  */
+   0,    /* max_case_values.  */
+   tune_params::AUTOPREFETCHER_WEAK,    /* autoprefetcher_model.  */
+   (AARCH64_EXTRA_TUNE_BASE
+    | AARCH64_EXTRA_TUNE_MATCHED_VECTOR_THROUGHPUT),    /* tune_flags.  */
+   &generic_armv8_a_prefetch_tune,
+   AARCH64_LDP_STP_POLICY_ALWAYS,    /* ldp_policy_model.  */
+   AARCH64_LDP_STP_POLICY_ALWAYS,    /* stp_policy_model.  */
+   nullptr    /* dispatch_constraints.  */
+ };
+ 
+ #endif /* GCC_AARCH64_H_HIP12.  */
diff -Nrcpad gcc-16-20260201/gcc/config/arm/arm.cc gcc-16-20260208/gcc/config/arm/arm.cc
*** gcc-16-20260201/gcc/config/arm/arm.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/config/arm/arm.cc	Sun Feb  8 22:32:06 2026
*************** static const scoped_attribute_specs *con
*** 839,844 ****
--- 839,847 ----
  
  #undef TARGET_VECTORIZE_GET_MASK_MODE
  #define TARGET_VECTORIZE_GET_MASK_MODE arm_get_mask_mode
+ 
+ #undef TARGET_FLAGS_REGNUM
+ #define TARGET_FLAGS_REGNUM CC_REGNUM
  
  /* Obstack for minipool constant handling.  */
  static struct obstack minipool_obstack;
*************** arm_get_pcs_model (const_tree type, cons
*** 6345,6353 ****
  	  /* Local functions never leak outside this compilation unit,
  	     so we are free to use whatever conventions are
  	     appropriate.  */
! 	  /* FIXME: remove CONST_CAST_TREE when cgraph is constified.  */
  	  cgraph_node *local_info_node
! 	    = cgraph_node::local_info_node (CONST_CAST_TREE (decl));
  	  if (local_info_node && local_info_node->local)
  	    return ARM_PCS_AAPCS_LOCAL;
  	}
--- 6348,6356 ----
  	  /* Local functions never leak outside this compilation unit,
  	     so we are free to use whatever conventions are
  	     appropriate.  */
! 	  /* FIXME: remove const_cast<tree> when cgraph is constified.  */
  	  cgraph_node *local_info_node
! 	    = cgraph_node::local_info_node (const_cast<tree> (decl));
  	  if (local_info_node && local_info_node->local)
  	    return ARM_PCS_AAPCS_LOCAL;
  	}
*************** arm_mangle_type (const_tree type)
*** 30574,30580 ****
    /* The ARM ABI documents (10th October 2008) say that "__va_list"
       has to be managled as if it is in the "std" namespace.  */
    if (TARGET_AAPCS_BASED
!       && lang_hooks.types_compatible_p (CONST_CAST_TREE (type), va_list_type))
      return "St9__va_list";
  
    /* Half-precision floating point types.  */
--- 30577,30583 ----
    /* The ARM ABI documents (10th October 2008) say that "__va_list"
       has to be managled as if it is in the "std" namespace.  */
    if (TARGET_AAPCS_BASED
!       && lang_hooks.types_compatible_p (const_cast<tree> (type), va_list_type))
      return "St9__va_list";
  
    /* Half-precision floating point types.  */
*************** arm_evpc_neon_vext (struct expand_vec_pe
*** 32001,32007 ****
    return true;
  }
  
! /* The NEON VTBL instruction is a fully variable permuation that's even
     stronger than what we expose via VEC_PERM_EXPR.  What it doesn't do
     is mask the index operand as VEC_PERM_EXPR requires.  Therefore we
     can do slightly better by expanding this as a constant where we don't
--- 32004,32010 ----
    return true;
  }
  
! /* The NEON VTBL instruction is a fully variable permutation that's even
     stronger than what we expose via VEC_PERM_EXPR.  What it doesn't do
     is mask the index operand as VEC_PERM_EXPR requires.  Therefore we
     can do slightly better by expanding this as a constant where we don't
diff -Nrcpad gcc-16-20260201/gcc/config/bpf/core-builtins.cc gcc-16-20260208/gcc/config/bpf/core-builtins.cc
*** gcc-16-20260201/gcc/config/bpf/core-builtins.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/config/bpf/core-builtins.cc	Sun Feb  8 22:32:06 2026
*************** process_field_expr (struct cr_builtins *
*** 799,805 ****
        for (int i = 0; i < nr_accessors; i++)
  	n += snprintf (str + n, sizeof (str) - n,
  		       i == 0 ? "%u" : ":%u", accessors[i]);
!       ret.str = CONST_CAST (char *, ggc_strdup (str));
      }
    else
      gcc_unreachable ();
--- 799,805 ----
        for (int i = 0; i < nr_accessors; i++)
  	n += snprintf (str + n, sizeof (str) - n,
  		       i == 0 ? "%u" : ":%u", accessors[i]);
!       ret.str = const_cast<char *> (ggc_strdup (str));
      }
    else
      gcc_unreachable ();
*************** process_enum_value (struct cr_builtins *
*** 916,922 ****
       in 6 chars.  */
    char tmp[6];
    sprintf (tmp, "%u", index);
!   ret.str = CONST_CAST (char *, ggc_strdup(tmp));
  
    return ret;
  }
--- 916,922 ----
       in 6 chars.  */
    char tmp[6];
    sprintf (tmp, "%u", index);
!   ret.str = const_cast<char *> (ggc_strdup (tmp));
  
    return ret;
  }
diff -Nrcpad gcc-16-20260201/gcc/config/darwin.cc gcc-16-20260208/gcc/config/darwin.cc
*** gcc-16-20260201/gcc/config/darwin.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/config/darwin.cc	Sun Feb  8 22:32:06 2026
*************** darwin_encode_section_info (tree decl, r
*** 1317,1323 ****
        if (is_str)
  	{
  	  bool for_asan = (flag_sanitize & SANITIZE_ADDRESS)
! 			   && asan_protect_global (CONST_CAST_TREE (decl));
  	  /* When we are generating code for sanitized strings, the string
  	     internal symbols are made visible in the object.  */
  	  buf = xasprintf ("*%c.str.%s", for_asan ? 'l' : 'L', &name[3]);
--- 1317,1323 ----
        if (is_str)
  	{
  	  bool for_asan = (flag_sanitize & SANITIZE_ADDRESS)
! 			   && asan_protect_global (const_cast<tree> (decl));
  	  /* When we are generating code for sanitized strings, the string
  	     internal symbols are made visible in the object.  */
  	  buf = xasprintf ("*%c.str.%s", for_asan ? 'l' : 'L', &name[3]);
*************** machopic_select_section (tree decl,
*** 1722,1728 ****
    if (flag_sanitize & SANITIZE_ADDRESS)
      {
        if (TREE_CODE (decl) == STRING_CST
! 	  && asan_protect_global (CONST_CAST_TREE (decl)))
  	{
  	  return darwin_sections[asan_string_section];
  	}
--- 1722,1728 ----
    if (flag_sanitize & SANITIZE_ADDRESS)
      {
        if (TREE_CODE (decl) == STRING_CST
! 	  && asan_protect_global (const_cast<tree> (decl)))
  	{
  	  return darwin_sections[asan_string_section];
  	}
*************** machopic_select_section (tree decl,
*** 1745,1751 ****
  
      case SECCAT_RODATA_MERGE_STR_INIT:
        if ((flag_sanitize & SANITIZE_ADDRESS)
! 	   && asan_protect_global (CONST_CAST_TREE (decl)))
  	/* or !flag_merge_constants */
  	return darwin_sections[asan_string_section];
        else
--- 1745,1751 ----
  
      case SECCAT_RODATA_MERGE_STR_INIT:
        if ((flag_sanitize & SANITIZE_ADDRESS)
! 	   && asan_protect_global (const_cast<tree> (decl)))
  	/* or !flag_merge_constants */
  	return darwin_sections[asan_string_section];
        else
diff -Nrcpad gcc-16-20260201/gcc/config/gcn/gcn-valu.md gcc-16-20260208/gcc/config/gcn/gcn-valu.md
*** gcc-16-20260201/gcc/config/gcn/gcn-valu.md	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/config/gcn/gcn-valu.md	Sun Feb  8 22:32:06 2026
***************
*** 477,565 ****
    [m,v ,U0,e ,&v;*    ,16] #
    })
  
- ; This variant does not accept an unspec, but does permit MEM
- ; read/modify/write which is necessary for maskstore.
- 
- ;(define_insn "*mov<mode>_exec_match"
- ;  [(set (match_operand:V_1REG 0 "nonimmediate_operand" "=v,v, v, m")
- ;	(vec_merge:V_1REG
- ;	  (match_operand:V_1REG 1 "general_operand"	"vA,B, m, v")
- ;	  (match_dup 0)
- ;	  (match_operand:DI 2 "gcn_exec_reg_operand"	" e,e, e, e")))
- ;   (clobber (match_scratch:<VnDI> 3			"=X,X,&v,&v"))]
- ;  "!MEM_P (operands[0]) || REG_P (operands[1])"
- ;  "@
- ;  v_mov_b32\t%0, %1
- ;  v_mov_b32\t%0, %1
- ;  #
- ;  #"
- ;  [(set_attr "type" "vop1,vop1,*,*")
- ;   (set_attr "length" "4,8,16,16")])
- 
  (define_insn "*mov<mode>"
!   [(set (match_operand:V_2REG 0 "nonimmediate_operand" "=v, v,$a,a")
! 	(match_operand:V_2REG 1 "general_operand"      "vDB,a, v,a"))]
    ""
!   "@
!    * if (!REG_P (operands[1]) || REGNO (operands[0]) <= REGNO (operands[1])) \
!        return \"v_mov_b32\t%L0, %L1\;v_mov_b32\t%H0, %H1\"; \
!      else \
!        return \"v_mov_b32\t%H0, %H1\;v_mov_b32\t%L0, %L1\";
!    * if (REGNO (operands[0]) <= REGNO (operands[1])) \
!        return \"v_accvgpr_read_b32\t%L0, %L1\;v_accvgpr_read_b32\t%H0, %H1\"; \
!      else \
!        return \"v_accvgpr_read_b32\t%H0, %H1\;v_accvgpr_read_b32\t%L0, %L1\";
!    * if (REGNO (operands[0]) <= REGNO (operands[1])) \
!        return \"v_accvgpr_write_b32\t%L0, %L1\;v_accvgpr_write_b32\t%H0, %H1\"; \
!      else \
!        return \"v_accvgpr_write_b32\t%H0, %H1\;v_accvgpr_write_b32\t%L0, %L1\";
!    * if (REGNO (operands[0]) <= REGNO (operands[1])) \
!        return \"v_accvgpr_mov_b32\t%L0, %L1\;v_accvgpr_mov_b32\t%H0, %H1\"; \
!      else \
!        return \"v_accvgpr_mov_b32\t%H0, %H1\;v_accvgpr_mov_b32\t%L0, %L1\";"
!   [(set_attr "type" "vmult,vmult,vmult,vmult")
!    (set_attr "length" "16,16,16,8")
!    (set_attr "cdna" "*,*,*,cdna2")])
  
  (define_insn "mov<mode>_exec"
!   [(set (match_operand:V_2REG 0 "nonimmediate_operand" "= v,   v,   v, v, m")
  	(vec_merge:V_2REG
! 	  (match_operand:V_2REG 1 "general_operand"    "vDB,  v0,  v0, m, v")
! 	  (match_operand:V_2REG 2 "gcn_alu_or_unspec_operand"
! 						       " U0,vDA0,vDA0,U0,U0")
! 	  (match_operand:DI 3 "register_operand"       "  e,  cV,  Sv, e, e")))
!    (clobber (match_scratch:<VnDI> 4		       "= X,   X,   X,&v,&v"))]
    "!MEM_P (operands[0]) || REG_P (operands[1])"
!   {
!     if (!REG_P (operands[1]) || REGNO (operands[0]) <= REGNO (operands[1]))
!       switch (which_alternative)
! 	{
! 	case 0:
! 	  return "v_mov_b32\t%L0, %L1\;v_mov_b32\t%H0, %H1";
! 	case 1:
! 	  return "v_cndmask_b32\t%L0, %L2, %L1, vcc\;"
! 		 "v_cndmask_b32\t%H0, %H2, %H1, vcc";
! 	case 2:
! 	  return "v_cndmask_b32\t%L0, %L2, %L1, %3\;"
! 		 "v_cndmask_b32\t%H0, %H2, %H1, %3";
! 	}
!     else
!       switch (which_alternative)
! 	{
! 	case 0:
! 	  return "v_mov_b32\t%H0, %H1\;v_mov_b32\t%L0, %L1";
! 	case 1:
! 	  return "v_cndmask_b32\t%H0, %H2, %H1, vcc\;"
! 		 "v_cndmask_b32\t%L0, %L2, %L1, vcc";
! 	case 2:
! 	  return "v_cndmask_b32\t%H0, %H2, %H1, %3\;"
! 		 "v_cndmask_b32\t%L0, %L2, %L1, %3";
! 	}
! 
!     return "#";
!   }
!   [(set_attr "type" "vmult,vmult,vmult,*,*")
!    (set_attr "length" "16,16,16,16,16")])
  
  (define_insn "*mov<mode>_4reg"
    [(set (match_operand:V_4REG 0 "nonimmediate_operand")
--- 477,509 ----
    [m,v ,U0,e ,&v;*    ,16] #
    })
  
  (define_insn "*mov<mode>"
!   [(set (match_operand:V_2REG 0 "nonimmediate_operand")
! 	(match_operand:V_2REG 1 "general_operand"))]
    ""
!   {@ [cons: =0, 1; attrs: length, cdna]
!   [v ,vDB;16,*    ] v_mov_b32\t%L0, %L1\;v_mov_b32\t%H0, %H1
!   [v ,a  ;16,*    ] v_accvgpr_read_b32\t%L0, %L1\;v_accvgpr_read_b32\t%H0, %H1
!   [$a,v  ;16,*    ] v_accvgpr_write_b32\t%L0, %L1\;v_accvgpr_write_b32\t%H0, %H1
!   [a ,a  ;8 ,cdna2] v_accvgpr_mov_b32\t%L0, %L1\;v_accvgpr_mov_b32\t%H0, %H1
!   }
!   [(set_attr "type" "vmult,vmult,vmult,vmult")])
  
  (define_insn "mov<mode>_exec"
!   [(set (match_operand:V_2REG 0 "nonimmediate_operand")
  	(vec_merge:V_2REG
! 	  (match_operand:V_2REG 1 "general_operand")
! 	  (match_operand:V_2REG 2 "gcn_alu_or_unspec_operand")
! 	  (match_operand:DI 3 "register_operand")))
!    (clobber (match_scratch:<VnDI> 4))]
    "!MEM_P (operands[0]) || REG_P (operands[1])"
!   {@ [cons: =0, 1, 2, 3, =4; attrs: type, length]
!   [v,vDB,U0  ,e ,X ;vmult,16] v_mov_b32\t%L0, %L1\;v_mov_b32\t%H0, %H1
!   [v,v0 ,vDA0,cV,X ;vmult,16] v_cndmask_b32\t%L0, %L2, %L1, vcc\;v_cndmask_b32\t%H0, %H2, %H1, vcc
!   [v,v0 ,vDA0,Sv,X ;vmult,16] v_cndmask_b32\t%L0, %L2, %L1, %3\;v_cndmask_b32\t%H0, %H2, %H1, %3
!   [v,m  ,U0  ,e ,&v;*    ,16] #
!   [m,v  ,U0  ,e ,&v;*    ,16] #
!   })
  
  (define_insn "*mov<mode>_4reg"
    [(set (match_operand:V_4REG 0 "nonimmediate_operand")
***************
*** 573,647 ****
    })
  
  (define_insn "mov<mode>_exec"
!   [(set (match_operand:V_4REG 0 "nonimmediate_operand" "= v,   v,   v, v, m")
  	(vec_merge:V_4REG
! 	  (match_operand:V_4REG 1 "general_operand"    "vDB,  v0,  v0, m, v")
! 	  (match_operand:V_4REG 2 "gcn_alu_or_unspec_operand"
! 						       " U0,vDA0,vDA0,U0,U0")
! 	  (match_operand:DI 3 "register_operand"       "  e,  cV,  Sv, e, e")))
!    (clobber (match_scratch:<VnDI> 4		       "= X,   X,   X,&v,&v"))]
    "!MEM_P (operands[0]) || REG_P (operands[1])"
!   {
!     if (!REG_P (operands[1]) || REGNO (operands[0]) <= REGNO (operands[1]))
!       switch (which_alternative)
! 	{
! 	case 0:
! 	  return "v_mov_b32\t%L0, %L1\;v_mov_b32\t%H0, %H1\;"
!                  "v_mov_b32\t%J0, %J1\;v_mov_b32\t%K0, %K1";
! 	case 1:
! 	  return "v_cndmask_b32\t%L0, %L2, %L1, vcc\;"
! 		 "v_cndmask_b32\t%H0, %H2, %H1, vcc\;"
! 		 "v_cndmask_b32\t%J0, %J2, %J1, vcc\;"
! 		 "v_cndmask_b32\t%K0, %K2, %K1, vcc";
! 	case 2:
! 	  return "v_cndmask_b32\t%L0, %L2, %L1, %3\;"
! 		 "v_cndmask_b32\t%H0, %H2, %H1, %3\;"
! 		 "v_cndmask_b32\t%J0, %J2, %J1, %3\;"
! 		 "v_cndmask_b32\t%K0, %K2, %K1, %3";
! 	}
!     else
!       switch (which_alternative)
! 	{
! 	case 0:
! 	  return "v_mov_b32\t%H0, %H1\;v_mov_b32\t%L0, %L1\;"
!                  "v_mov_b32\t%J0, %J1\;v_mov_b32\t%K0, %K1";
! 	case 1:
! 	  return "v_cndmask_b32\t%H0, %H2, %H1, vcc\;"
! 		 "v_cndmask_b32\t%L0, %L2, %L1, vcc\;"
! 		 "v_cndmask_b32\t%J0, %J2, %J1, vcc\;"
! 		 "v_cndmask_b32\t%K0, %K2, %K1, vcc";
! 	case 2:
! 	  return "v_cndmask_b32\t%H0, %H2, %H1, %3\;"
! 		 "v_cndmask_b32\t%L0, %L2, %L1, %3\;"
! 		 "v_cndmask_b32\t%J0, %J2, %J1, %3\;"
! 		 "v_cndmask_b32\t%K0, %K2, %K1, %3";
! 	}
! 
!     return "#";
!   }
!   [(set_attr "type" "vmult,vmult,vmult,*,*")
!    (set_attr "length" "32")])
! 
! ; This variant does not accept an unspec, but does permit MEM
! ; read/modify/write which is necessary for maskstore.
! 
! ;(define_insn "*mov<mode>_exec_match"
! ;  [(set (match_operand:V_2REG 0 "nonimmediate_operand" "=v, v, m")
! ;	(vec_merge:V_2REG
! ;	  (match_operand:V_2REG 1 "general_operand"	"vDB, m, v")
! ;	  (match_dup 0)
! ;	  (match_operand:DI 2 "gcn_exec_reg_operand"	" e, e, e")))
! ;   (clobber (match_scratch:<VnDI> 3			"=X,&v,&v"))]
! ;  "!MEM_P (operands[0]) || REG_P (operands[1])"
! ;  "@
! ;   * if (!REG_P (operands[1]) || REGNO (operands[0]) <= REGNO (operands[1])) \
! ;       return \"v_mov_b32\t%L0, %L1\;v_mov_b32\t%H0, %H1\"; \
! ;     else \
! ;       return \"v_mov_b32\t%H0, %H1\;v_mov_b32\t%L0, %L1\";
! ;   #
! ;   #"
! ;  [(set_attr "type" "vmult,*,*")
! ;   (set_attr "length" "16,16,16")])
  
  ; A SGPR-base load looks like:
  ;   <load> v, Sv
--- 517,536 ----
    })
  
  (define_insn "mov<mode>_exec"
!   [(set (match_operand:V_4REG 0 "nonimmediate_operand")
  	(vec_merge:V_4REG
! 	  (match_operand:V_4REG 1 "general_operand")
! 	  (match_operand:V_4REG 2 "gcn_alu_or_unspec_operand")
! 	  (match_operand:DI 3 "register_operand")))
!    (clobber (match_scratch:<VnDI> 4))]
    "!MEM_P (operands[0]) || REG_P (operands[1])"
!   {@ [cons: =0, 1, 2, 3, =4; attrs: type, length]
!   [v,vDB,U0  ,e ,X ;vmult,32] v_mov_b32\t%L0, %L1\;v_mov_b32\t%H0, %H1\;v_mov_b32\t%J0, %J1\;v_mov_b32\t%K0, %K1
!   [v,v0 ,vDA0,cV,X ;vmult,32] v_cndmask_b32\t%L0, %L2, %L1, vcc\;v_cndmask_b32\t%H0, %H2, %H1, vcc\;v_cndmask_b32\t%J0, %J2, %J1, vcc\;v_cndmask_b32\t%K0, %K2, %K1, vcc
!   [v,v0 ,vDA0,Sv,X ;vmult,32] v_cndmask_b32\t%L0, %L2, %L1, %3\;v_cndmask_b32\t%H0, %H2, %H1, %3\;v_cndmask_b32\t%J0, %J2, %J1, %3\;v_cndmask_b32\t%K0, %K2, %K1, %3
!   [v,m  ,U0  ,e ,&v;*    ,32] #
!   [m,v  ,U0  ,e ,&v;*    ,32] #
!   })
  
  ; A SGPR-base load looks like:
  ;   <load> v, Sv
***************
*** 672,695 ****
    })
  
  (define_insn "@mov<mode>_sgprbase"
!   [(set (match_operand:V_2REG 0 "nonimmediate_operand" "= v, v, m, a, m")
  	(unspec:V_2REG
! 	  [(match_operand:V_2REG 1 "general_operand"   "vDB, m, v, m, a")]
  	  UNSPEC_SGPRBASE))
!    (clobber (match_operand:<VnDI> 2 "register_operand"  "=&v,&v,&v,&v,&v"))]
    "lra_in_progress || reload_completed"
!   "@
!    * if (!REG_P (operands[1]) || REGNO (operands[0]) <= REGNO (operands[1])) \
!        return \"v_mov_b32\t%L0, %L1\;v_mov_b32\t%H0, %H1\"; \
!      else \
!        return \"v_mov_b32\t%H0, %H1\;v_mov_b32\t%L0, %L1\";
!    #
!    #
!    #
!    #"
!   [(set_attr "type" "vmult,*,*,*,*")
!    (set_attr "length" "8,12,12,12,12")
!    (set_attr "cdna" "*,*,*,cdna2,cdna2")])
  
  (define_insn "@mov<mode>_sgprbase"
    [(set (match_operand:V_4REG 0 "nonimmediate_operand")
--- 561,579 ----
    })
  
  (define_insn "@mov<mode>_sgprbase"
!   [(set (match_operand:V_2REG 0 "nonimmediate_operand")
  	(unspec:V_2REG
! 	  [(match_operand:V_2REG 1 "general_operand")]
  	  UNSPEC_SGPRBASE))
!    (clobber (match_operand:<VnDI> 2 "register_operand"))]
    "lra_in_progress || reload_completed"
!   {@ [cons: =0, 1, =2; attrs: type, length, cdna]
!   [v,vDB,&v;vmult,8 ,*    ] v_mov_b32\t%L0, %L1\;v_mov_b32\t%H0, %H1
!   [v,m  ,&v;*    ,12,*    ] #
!   [m,v  ,&v;*    ,12,*    ] #
!   [a,m  ,&v;*    ,12,cdna2] #
!   [m,a  ,&v;*    ,12,cdna2] #
!   })
  
  (define_insn "@mov<mode>_sgprbase"
    [(set (match_operand:V_4REG 0 "nonimmediate_operand")
diff -Nrcpad gcc-16-20260201/gcc/config/gcn/gcn.md gcc-16-20260208/gcc/config/gcn/gcn.md
*** gcc-16-20260201/gcc/config/gcn/gcn.md	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/config/gcn/gcn.md	Sun Feb  8 22:32:06 2026
***************
*** 529,590 ****
  ; We need BImode move so we can reload flags registers.
  
  (define_insn "*movbi"
!   [(set (match_operand:BI 0 "nonimmediate_operand"
! 			  "=Sg,   v,Sg,cs,cV,cV,Sm,&Sm,RS, v,&v,RF, v,&v,RM")
! 	(match_operand:BI 1 "gcn_load_operand"
! 			  "SSA,vSvA, v,SS, v,SS,RS, RS,Sm,RF,RF, v,RM,RM, v"))]
!   ""
!   {
!     /* SCC as an operand is currently not accepted by the LLVM assembler, so
!        we emit bytes directly as a workaround.  */
!     switch (which_alternative) {
!     case 0:
!       return "s_mov_b32\t%0, %1";
!     case 1:
!       if (REG_P (operands[1]) && REGNO (operands[1]) == SCC_REG)
! 	return "; v_mov_b32\t%0, %1\;"
! 	       ".byte\t0xfd\;"
! 	       ".byte\t0x2\;"
! 	       ".byte\t((%V0<<1)&0xff)\;"
! 	       ".byte\t0x7e|(%V0>>7)";
!       else
! 	return "v_mov_b32\t%0, %1";
!     case 2:
!       return "v_readlane_b32\t%0, %1, 0";
!     case 3:
!       return "s_cmpk_lg_u32\t%1, 0";
!     case 4:
!       return "v_cmp_ne_u32\tvcc, 0, %1";
!     case 5:
!       return "s_mov_b32\tvcc_lo, %1\;"
! 	     "s_mov_b32\tvcc_hi, 0";
!     case 6:
!     case 7:
!       return "s_load_dword\t%0, %A1\;s_waitcnt\tlgkmcnt(0)";
!     case 8:
!       return "s_store_dword\t%1, %A0";
!     case 9:
!     case 10:
!       return "flat_load_dword\t%0, %A1%O1%g1\;s_waitcnt\t0";
!     case 11:
!       return "flat_store_dword\t%A0, %1%O0%g0";
!     case 12:
!     case 13:
!       return "global_load_dword\t%0, %A1%O1%g1\;s_waitcnt\tvmcnt(0)";
!     case 14:
!       return "global_store_dword\t%A0, %1%O0%g0";
!     default:
!       gcc_unreachable ();
!     }
!   }
!   [(set_attr "type" "sop1,vop1,vop3a,sopk,vopc,mult,smem,smem,smem,flat,flat,
! 		     flat,flat,flat,flat")
!    (set_attr "flatmemaccess" "*,*,*,*,*,*,*,*,*,load,load,store,load,load,store")
!    (set_attr "vcmp" "*,*,*,*,vcmp,*,*,*,*,*,*,*,*,*,*")
!    (set_attr "exec" "*,*,none,*,*,*,*,*,*,*,*,*,*,*,*")
!    (set_attr "length" "4,4,4,4,4,8,12,12,12,12,12,12,12,12,12")
!    (set_attr "xnack" "*,*,*,*,*,*,off,on,*,off,on,*,off,on,*")
!    (set_attr "laneselect" "*,*,read,*,*,*,*,*,*,*,*,*,*,*,*")])
  
  ; 32bit move pattern
  
--- 529,554 ----
  ; We need BImode move so we can reload flags registers.
  
  (define_insn "*movbi"
!   [(set (match_operand:BI 0 "nonimmediate_operand")
! 	(match_operand:BI 1 "gcn_load_operand"))]
!   "gcn_valid_move_p (BImode, operands[0], operands[1])"
!   {@ [cons: =0,1   ;attrs: type,exec,length,vcmp,xnack,laneselect,flatmemaccess]
!   [Sg ,SSA ;sop1 ,*   ,4 ,*   ,*  ,*   ,*    ] s_mov_b32\t%0 ,%1
!   [v  ,vSvA;vop1 ,*   ,4 ,*   ,*  ,*   ,*    ] v_mov_b32\t%0 ,%1
!   [Sg ,v   ;vop3a,none,4 ,*   ,*  ,read,*    ] v_readlane_b32\t%0 ,%1 ,0
!   [cs ,SS  ;sopk ,*   ,4 ,*   ,*  ,*   ,*    ] s_cmpk_lg_u32\t%1 ,0
!   [cV ,v   ;vopc ,*   ,4 ,vcmp,*  ,*   ,*    ] v_cmp_ne_u32\tvcc ,0 ,%1
!   [cV ,SS  ;mult ,*   ,8 ,*   ,*  ,*   ,*    ] s_mov_b32\tvcc_lo ,%1\;s_mov_b32\tvcc_hi ,0
!   [Sm ,RS  ;smem ,*   ,12,*   ,off,*   ,*    ] s_load_dword\t%0 ,%A1\;s_waitcnt\tlgkmcnt(0)
!   [&Sm,RS  ;smem ,*   ,12,*   ,on ,*   ,*    ] ^
!   [RS ,Sm  ;smem ,*   ,12,*   ,*  ,*   ,*    ] s_store_dword\t%1 ,%A0
!   [v  ,RF  ;flat ,*   ,12,*   ,off,*   ,load ] flat_load_dword\t%0 ,%A1%O1%g1\;s_waitcnt\t0
!   [&v ,RF  ;flat ,*   ,12,*   ,on ,*   ,load ] ^
!   [RF ,v   ;flat ,*   ,12,*   ,*  ,*   ,store] flat_store_dword\t%A0 ,%1%O0%g0
!   [v  ,RM  ;flat ,*   ,12,*   ,off,*   ,load ] global_load_dword\t%0 ,%A1%O1%g1\;s_waitcnt\tvmcnt(0)
!   [&v ,RM  ;flat ,*   ,12,*   ,on ,*   ,load ] ^
!   [RM ,v   ;flat ,*   ,12,*   ,*  ,*   ,store] global_store_dword\t%A0,%1%O0%g0
!   })
  
  ; 32bit move pattern
  
diff -Nrcpad gcc-16-20260201/gcc/config/gcn/mkoffload.cc gcc-16-20260208/gcc/config/gcn/mkoffload.cc
*** gcc-16-20260201/gcc/config/gcn/mkoffload.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/config/gcn/mkoffload.cc	Sun Feb  8 22:32:06 2026
*************** xputenv (const char *string)
*** 182,188 ****
  {
    if (verbose)
      fprintf (stderr, "%s\n", string);
!   putenv (CONST_CAST (char *, string));
  }
  
  /* Parse STR, saving found tokens into PVALUES and return their number.
--- 182,188 ----
  {
    if (verbose)
      fprintf (stderr, "%s\n", string);
!   putenv (const_cast<char *> (string));
  }
  
  /* Parse STR, saving found tokens into PVALUES and return their number.
*************** compile_native (const char *infile, cons
*** 839,845 ****
    obstack_ptr_grow (&argv_obstack, NULL);
  
    const char **new_argv = XOBFINISH (&argv_obstack, const char **);
!   fork_execute (new_argv[0], CONST_CAST (char **, new_argv), true,
  		".gccnative_args");
    obstack_free (&argv_obstack, NULL);
  }
--- 839,845 ----
    obstack_ptr_grow (&argv_obstack, NULL);
  
    const char **new_argv = XOBFINISH (&argv_obstack, const char **);
!   fork_execute (new_argv[0], const_cast<char **> (new_argv), true,
  		".gccnative_args");
    obstack_free (&argv_obstack, NULL);
  }
*************** main (int argc, char **argv)
*** 1366,1373 ****
        obstack_ptr_grow (&files_to_cleanup, omp_requires_file);
  
        /* Run the compiler pass.  */
!       xputenv (concat ("GCC_OFFLOAD_OMP_REQUIRES_FILE=", omp_requires_file, NULL));
!       fork_execute (cc_argv[0], CONST_CAST (char **, cc_argv), true, ".gcc_args");
        obstack_free (&cc_argv_obstack, NULL);
        unsetenv("GCC_OFFLOAD_OMP_REQUIRES_FILE");
  
--- 1366,1375 ----
        obstack_ptr_grow (&files_to_cleanup, omp_requires_file);
  
        /* Run the compiler pass.  */
!       xputenv (concat ("GCC_OFFLOAD_OMP_REQUIRES_FILE=", omp_requires_file,
! 		       NULL));
!       fork_execute (cc_argv[0], const_cast<char **> (cc_argv), true,
! 		    ".gcc_args");
        obstack_free (&cc_argv_obstack, NULL);
        unsetenv("GCC_OFFLOAD_OMP_REQUIRES_FILE");
  
*************** main (int argc, char **argv)
*** 1395,1401 ****
        fclose (out);
  
        /* Run the assemble/link pass.  */
!       fork_execute (ld_argv[0], CONST_CAST (char **, ld_argv), true, ".ld_args");
        obstack_free (&ld_argv_obstack, NULL);
  
        process_obj (gcn_o_name, cfile, omp_requires);
--- 1397,1404 ----
        fclose (out);
  
        /* Run the assemble/link pass.  */
!       fork_execute (ld_argv[0], const_cast<char **> (ld_argv), true,
! 		    ".ld_args");
        obstack_free (&ld_argv_obstack, NULL);
  
        process_obj (gcn_o_name, cfile, omp_requires);
diff -Nrcpad gcc-16-20260201/gcc/config/i386/i386.cc gcc-16-20260208/gcc/config/i386/i386.cc
*** gcc-16-20260201/gcc/config/i386/i386.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/config/i386/i386.cc	Sun Feb  8 22:32:06 2026
*************** ix86_vector_costs::add_stmt_cost (int co
*** 26422,26442 ****
  		{
  		  m_num_gpr_needed[where]++;
  
! 		  int cost = COSTS_N_INSNS (ix86_cost->integer_to_sse) / 2;
! 
! 		  /* For integer construction, the number of actual GPR -> XMM
! 		     moves will be somewhere between 0 and n.
! 		     We do not have very good idea about actual number, since
! 		     the source may be a constant, memory or a chain of
! 		     instructions that will be later converted by
! 		     scalar-to-vector pass.  */
! 		  if (kind == vec_construct
! 		      && GET_MODE_BITSIZE (mode) == 256)
! 		    cost *= 2;
! 		  else if (kind == vec_construct
! 			   && GET_MODE_BITSIZE (mode) == 512)
! 		    cost *= 3;
! 		  stmt_cost += cost;
  		}
  	    }
  	}
--- 26422,26428 ----
  		{
  		  m_num_gpr_needed[where]++;
  
! 		  stmt_cost += COSTS_N_INSNS (ix86_cost->integer_to_sse) / 2;
  		}
  	    }
  	}
diff -Nrcpad gcc-16-20260201/gcc/config/i386/x86-tune-sched-bd.cc gcc-16-20260208/gcc/config/i386/x86-tune-sched-bd.cc
*** gcc-16-20260201/gcc/config/i386/x86-tune-sched-bd.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/config/i386/x86-tune-sched-bd.cc	Sun Feb  8 22:32:06 2026
*************** find_constant (rtx in_rtx, imm_info *imm
*** 345,351 ****
  	case SYMBOL_REF:
  	case CONST_INT:
  	  (imm_values->imm)++;
! 	  if (x86_64_immediate_operand (CONST_CAST_RTX (x), SImode))
  	    (imm_values->imm32)++;
  	  else
  	    (imm_values->imm64)++;
--- 345,351 ----
  	case SYMBOL_REF:
  	case CONST_INT:
  	  (imm_values->imm)++;
! 	  if (x86_64_immediate_operand (const_cast<rtx> (x), SImode))
  	    (imm_values->imm32)++;
  	  else
  	    (imm_values->imm64)++;
diff -Nrcpad gcc-16-20260201/gcc/config/loongarch/lasx.md gcc-16-20260208/gcc/config/loongarch/lasx.md
*** gcc-16-20260201/gcc/config/loongarch/lasx.md	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/config/loongarch/lasx.md	Sun Feb  8 22:32:06 2026
***************
*** 2722,2780 ****
    [(set_attr "type" "simd_int_arith")
     (set_attr "mode" "<MODE>")])
  
- (define_expand "copysign<mode>3"
-   [(set (match_dup 4)
- 	(and:FLASX
- 	  (not:FLASX (match_dup 3))
- 	  (match_operand:FLASX 1 "register_operand")))
-    (set (match_dup 5)
- 	(and:FLASX (match_dup 3)
- 		   (match_operand:FLASX 2 "reg_or_vector_same_val_operand")))
-    (set (match_operand:FLASX 0 "register_operand")
- 	(ior:FLASX (match_dup 4) (match_dup 5)))]
-   "ISA_HAS_LASX"
- {
-   /* copysign (x, -1) should instead be expanded as setting the sign
-      bit.  */
-   if (!REG_P (operands[2]))
-     {
-       rtx op2_elt = unwrap_const_vec_duplicate (operands[2]);
-       if (GET_CODE (op2_elt) == CONST_DOUBLE
- 	  && real_isneg (CONST_DOUBLE_REAL_VALUE (op2_elt)))
- 	{
- 	  rtx n = GEN_INT (8 * GET_MODE_SIZE (<UNITMODE>mode) - 1);
- 	  operands[0] = lowpart_subreg (<VIMODE256>mode, operands[0],
- 					<MODE>mode);
- 	  operands[1] = lowpart_subreg (<VIMODE256>mode, operands[1],
- 					<MODE>mode);
- 	  emit_insn (gen_lasx_xvbitseti_<lasxfmt> (operands[0],
- 						   operands[1], n));
- 	  DONE;
- 	}
-     }
- 
-   operands[2] = force_reg (<MODE>mode, operands[2]);
-   operands[3] = loongarch_build_signbit_mask (<MODE>mode, 1, 0);
- 
-   operands[4] = gen_reg_rtx (<MODE>mode);
-   operands[5] = gen_reg_rtx (<MODE>mode);
- })
- 
- (define_expand "xorsign<mode>3"
-   [(set (match_dup 4)
-     (and:FLASX (match_dup 3)
-         (match_operand:FLASX 2 "register_operand")))
-    (set (match_operand:FLASX 0 "register_operand")
-     (xor:FLASX (match_dup 4)
-          (match_operand:FLASX 1 "register_operand")))]
-   "ISA_HAS_LASX"
- {
-   operands[3] = loongarch_build_signbit_mask (<MODE>mode, 1, 0);
- 
-   operands[4] = gen_reg_rtx (<MODE>mode);
- })
- 
- 
  (define_insn "absv4df2"
    [(set (match_operand:V4DF 0 "register_operand" "=f")
  	(abs:V4DF (match_operand:V4DF 1 "register_operand" "f")))]
--- 2722,2727 ----
diff -Nrcpad gcc-16-20260201/gcc/config/loongarch/loongarch.cc gcc-16-20260208/gcc/config/loongarch/loongarch.cc
*** gcc-16-20260201/gcc/config/loongarch/loongarch.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/config/loongarch/loongarch.cc	Sun Feb  8 22:32:06 2026
*************** loongarch_const_vector_bitimm_set_p (rtx
*** 1759,1786 ****
        && (GET_MODE_CLASS (mode) == MODE_VECTOR_FLOAT
  	  || GET_MODE_CLASS (mode) == MODE_VECTOR_INT))
      {
!       unsigned HOST_WIDE_INT val;
! 
!       if (GET_MODE_CLASS (mode) == MODE_VECTOR_FLOAT)
! 	{
! 	  rtx val_s = CONST_VECTOR_ELT (op, 0);
! 	  const REAL_VALUE_TYPE *x = CONST_DOUBLE_REAL_VALUE (val_s);
! 	  if (GET_MODE (val_s) == DFmode)
! 	    {
! 	      long tmp[2];
! 	      REAL_VALUE_TO_TARGET_DOUBLE (*x, tmp);
! 	      val = (unsigned HOST_WIDE_INT) tmp[1] << 32 | tmp[0];
! 	    }
! 	  else
! 	    {
! 	      long tmp;
! 	      REAL_VALUE_TO_TARGET_SINGLE (*x, tmp);
! 	      val = (unsigned HOST_WIDE_INT) tmp;
! 	    }
! 	}
!       else
! 	val = UINTVAL (CONST_VECTOR_ELT (op, 0));
! 
        int vlog2 = exact_log2 (val & GET_MODE_MASK (GET_MODE_INNER (mode)));
  
        if (vlog2 != -1)
--- 1759,1765 ----
        && (GET_MODE_CLASS (mode) == MODE_VECTOR_FLOAT
  	  || GET_MODE_CLASS (mode) == MODE_VECTOR_INT))
      {
!       unsigned HOST_WIDE_INT val = UINTVAL (CONST_VECTOR_ELT (op, 0));
        int vlog2 = exact_log2 (val & GET_MODE_MASK (GET_MODE_INNER (mode)));
  
        if (vlog2 != -1)
*************** loongarch_const_vector_same_bytes_p (rtx
*** 1872,1898 ****
  
    first = CONST_VECTOR_ELT (op, 0);
    bytes = GET_MODE_UNIT_SIZE (mode);
! 
!   if (GET_MODE_CLASS (mode) == MODE_VECTOR_FLOAT)
!     {
!       rtx val_s = CONST_VECTOR_ELT (op, 0);
!       const REAL_VALUE_TYPE *x = CONST_DOUBLE_REAL_VALUE (val_s);
!       if (GET_MODE (val_s) == DFmode)
! 	{
! 	  long tmp[2];
! 	  REAL_VALUE_TO_TARGET_DOUBLE (*x, tmp);
! 	  val = (unsigned HOST_WIDE_INT) tmp[1] << 32 | tmp[0];
! 	}
!       else
! 	{
! 	  long tmp;
! 	  REAL_VALUE_TO_TARGET_SINGLE (*x, tmp);
! 	  val = (unsigned HOST_WIDE_INT) tmp;
! 	}
!     }
!   else
!     val = UINTVAL (first);
! 
    first_byte = val & 0xff;
    for (i = 1; i < bytes; i++)
      {
--- 1851,1857 ----
  
    first = CONST_VECTOR_ELT (op, 0);
    bytes = GET_MODE_UNIT_SIZE (mode);
!   val = INTVAL (first);
    first_byte = val & 0xff;
    for (i = 1; i < bytes; i++)
      {
*************** loongarch_print_operand (FILE *file, rtx
*** 6887,6921 ****
  	{
  	  machine_mode mode = GET_MODE_INNER (GET_MODE (op));
  	  rtx val_s = CONST_VECTOR_ELT (op, 0);
! 	  unsigned HOST_WIDE_INT val;
! 
! 	  if (GET_MODE_CLASS (mode) == MODE_FLOAT)
  	    {
! 	      const REAL_VALUE_TYPE *x = CONST_DOUBLE_REAL_VALUE (val_s);
! 	      if (GET_MODE (val_s) == DFmode)
! 		{
! 		  long tmp[2];
! 		  REAL_VALUE_TO_TARGET_DOUBLE (*x, tmp);
! 		  val = (unsigned HOST_WIDE_INT) (tmp[1] << 32 | tmp[0]);
! 		}
! 	      else
  		{
! 		  long tmp;
! 		  REAL_VALUE_TO_TARGET_SINGLE (*x, tmp);
! 		  val = (unsigned HOST_WIDE_INT) tmp;
  		}
  	    }
- 	  else
- 	    val = UINTVAL (val_s);
- 
- 	  int vlog2 = exact_log2 (val & GET_MODE_MASK (mode));
- 	  if (vlog2 != -1)
- 	    fprintf (file, "%d", vlog2);
- 	  else
- 	    output_operand_lossage ("invalid use of '%%%c'", letter);
  	}
!       else
! 	output_operand_lossage ("invalid use of '%%%c'", letter);
        break;
  
      case 'W':
--- 6846,6863 ----
  	{
  	  machine_mode mode = GET_MODE_INNER (GET_MODE (op));
  	  rtx val_s = CONST_VECTOR_ELT (op, 0);
! 	  if (CONST_INT_P (val_s))
  	    {
! 	      unsigned HOST_WIDE_INT val = UINTVAL (val_s);
! 	      int vlog2 = exact_log2 (val & GET_MODE_MASK (mode));
! 	      if (vlog2 != -1)
  		{
! 		  fprintf (file, "%d", vlog2);
! 		  break;
  		}
  	    }
  	}
!       output_operand_lossage ("invalid use of '%%%c'", letter);
        break;
  
      case 'W':
*************** loongarch_set_handled_components (sbitma
*** 8906,8912 ****
  }
  
  /* Use the vshuf instruction to implement all 128-bit constant vector
!    permuatation.  */
  
  static bool
  loongarch_try_expand_lsx_vshuf_const (struct expand_vec_perm_d *d)
--- 8848,8854 ----
  }
  
  /* Use the vshuf instruction to implement all 128-bit constant vector
!    permutation.  */
  
  static bool
  loongarch_try_expand_lsx_vshuf_const (struct expand_vec_perm_d *d)
*************** loongarch_is_elem_duplicate (struct expa
*** 9639,9645 ****
     When GCC wants to performs a vector permutation, it provides two op
     reigster, one target register, and a selector.
     In const vector permutation case, GCC provides selector as a char array
!    that contains original value; in variable vector permuatation
     (performs via vec_perm<mode> insn template), it provides a vector register.
     We assume that nelt is the elements numbers inside single vector in current
     256bit vector mode.
--- 9581,9587 ----
     When GCC wants to performs a vector permutation, it provides two op
     reigster, one target register, and a selector.
     In const vector permutation case, GCC provides selector as a char array
!    that contains original value; in variable vector permutation
     (performs via vec_perm<mode> insn template), it provides a vector register.
     We assume that nelt is the elements numbers inside single vector in current
     256bit vector mode.
*************** loongarch_is_elem_duplicate (struct expa
*** 9666,9672 ****
     by single instruction easily.
  
     3.  What LASX permutation instruction does:
!    In short, it just execute two independent 128bit vector permuatation, and
     it's the reason that we need to do the jobs below.  We will explain it.
     op0, op1, target, and selector will be separate into high 128bit and low
     128bit, and do permutation as the description below:
--- 9608,9614 ----
     by single instruction easily.
  
     3.  What LASX permutation instruction does:
!    In short, it just execute two independent 128bit vector permutation, and
     it's the reason that we need to do the jobs below.  We will explain it.
     op0, op1, target, and selector will be separate into high 128bit and low
     128bit, and do permutation as the description below:
*************** loongarch_is_elem_duplicate (struct expa
*** 9696,9703 ****
     c) Use other instructions to process op and put correct result into target.
     */
  
! /* Implementation of constant vector permuatation.  This function identifies
!    recognized pattern of permuation selector argument, and use one or more
     instruction (s) to finish the permutation job correctly.  For unsupported
     patterns, it will return false.  */
  
--- 9638,9645 ----
     c) Use other instructions to process op and put correct result into target.
     */
  
! /* Implementation of constant vector permutation.  This function identifies
!    recognized pattern of permutation selector argument, and use one or more
     instruction (s) to finish the permutation job correctly.  For unsupported
     patterns, it will return false.  */
  
*************** loongarch_build_signbit_mask (machine_mo
*** 11194,11200 ****
      return force_reg (inner_mode, mask);
  
    v = loongarch_build_const_vector (vec_mode, vect, mask);
!   return force_reg (vec_mode, v);
  }
  
  /* Use rsqrte instruction and Newton-Rhapson to compute the approximation of
--- 11136,11142 ----
      return force_reg (inner_mode, mask);
  
    v = loongarch_build_const_vector (vec_mode, vect, mask);
!   return v;
  }
  
  /* Use rsqrte instruction and Newton-Rhapson to compute the approximation of
*************** void loongarch_emit_swrsqrtsf (rtx res,
*** 11243,11252 ****
        if (VECTOR_MODE_P (mode))
  	{
  	  machine_mode imode = related_int_vector_mode (mode).require ();
! 	  rtx mask = gen_reg_rtx (imode);
! 	  emit_insn (gen_rtx_SET (mask, gen_rtx_NE (imode, a, zero)));
! 	  emit_insn (gen_rtx_SET (x0, gen_rtx_AND (mode, x0,
! 						   gen_lowpart (mode, mask))));
  	}
        else
  	{
--- 11185,11195 ----
        if (VECTOR_MODE_P (mode))
  	{
  	  machine_mode imode = related_int_vector_mode (mode).require ();
! 	  rtx mask = force_reg (imode, gen_rtx_NE (imode, a, zero));
! 	  emit_move_insn (gen_lowpart (imode, x0),
! 			  gen_rtx_AND (imode,
! 				       gen_lowpart (imode, x0),
! 				       mask));
  	}
        else
  	{
diff -Nrcpad gcc-16-20260201/gcc/config/loongarch/lsx.md gcc-16-20260208/gcc/config/loongarch/lsx.md
*** gcc-16-20260201/gcc/config/loongarch/lsx.md	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/config/loongarch/lsx.md	Sun Feb  8 22:32:06 2026
***************
*** 2243,2301 ****
    [(set_attr "type" "simd_int_arith")
     (set_attr "mode" "<MODE>")])
  
- (define_expand "copysign<mode>3"
-   [(set (match_dup 4)
- 	(and:FLSX
- 	  (not:FLSX (match_dup 3))
- 	  (match_operand:FLSX 1 "register_operand")))
-    (set (match_dup 5)
- 	(and:FLSX (match_dup 3)
- 		  (match_operand:FLSX 2 "reg_or_vector_same_val_operand")))
-    (set (match_operand:FLSX 0 "register_operand")
- 	(ior:FLSX (match_dup 4) (match_dup 5)))]
-   "ISA_HAS_LSX"
- {
-   /* copysign (x, -1) should instead be expanded as setting the sign
-      bit.  */
-   if (!REG_P (operands[2]))
-     {
-       rtx op2_elt = unwrap_const_vec_duplicate (operands[2]);
-       if (GET_CODE (op2_elt) == CONST_DOUBLE
- 	  && real_isneg (CONST_DOUBLE_REAL_VALUE (op2_elt)))
- 	{
- 	  rtx n = GEN_INT (8 * GET_MODE_SIZE (<UNITMODE>mode) - 1);
- 	  operands[0] = lowpart_subreg (<VIMODE>mode, operands[0],
- 					<MODE>mode);
- 	  operands[1] = lowpart_subreg (<VIMODE>mode, operands[1],
- 					<MODE>mode);
- 	  emit_insn (gen_lsx_vbitseti_<lsxfmt> (operands[0], operands[1],
- 						n));
- 	  DONE;
- 	}
-     }
- 
-   operands[2] = force_reg (<MODE>mode, operands[2]);
-   operands[3] = loongarch_build_signbit_mask (<MODE>mode, 1, 0);
- 
-   operands[4] = gen_reg_rtx (<MODE>mode);
-   operands[5] = gen_reg_rtx (<MODE>mode);
- })
- 
- (define_expand "@xorsign<mode>3"
-   [(set (match_dup 4)
-     (and:FLSX (match_dup 3)
-         (match_operand:FLSX 2 "register_operand")))
-    (set (match_operand:FLSX 0 "register_operand")
-     (xor:FLSX (match_dup 4)
-          (match_operand:FLSX 1 "register_operand")))]
-   "ISA_HAS_LSX"
- {
-   operands[3] = loongarch_build_signbit_mask (<MODE>mode, 1, 0);
- 
-   operands[4] = gen_reg_rtx (<MODE>mode);
- })
- 
- 
  (define_insn "absv2df2"
    [(set (match_operand:V2DF 0 "register_operand" "=f")
  	(abs:V2DF (match_operand:V2DF 1 "register_operand" "f")))]
--- 2243,2248 ----
diff -Nrcpad gcc-16-20260201/gcc/config/loongarch/predicates.md gcc-16-20260208/gcc/config/loongarch/predicates.md
*** gcc-16-20260201/gcc/config/loongarch/predicates.md	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/config/loongarch/predicates.md	Sun Feb  8 22:32:06 2026
***************
*** 664,669 ****
--- 664,681 ----
    return loongarch_const_vector_same_int_p (op, mode);
  })
  
+ (define_predicate "const_vector_neg_fp_operand"
+   (match_code "const_vector")
+ {
+   machine_mode imode = related_int_vector_mode (mode).require ();
+   rtx mask = loongarch_build_signbit_mask (imode, 1, 0);
+ 
+   op = gen_lowpart (imode, op);
+   return rtx_equal_p (mask,
+ 		      simplify_const_binary_operation (AND, imode, mask,
+ 						       op));
+ })
+ 
  (define_predicate "par_const_vector_shf_set_operand"
    (match_code "parallel")
  {
***************
*** 690,695 ****
--- 702,711 ----
    (ior (match_operand 0 "register_operand")
         (match_operand 0 "const_vector_same_uimm_operand")))
  
+ (define_predicate "reg_or_vector_neg_fp_operand"
+   (ior (match_operand 0 "register_operand")
+        (match_operand 0 "const_vector_neg_fp_operand")))
+ 
  ;; PARALLEL for a vec_select that selects all the even or all the odd
  ;; elements of a vector of MODE.
  (define_special_predicate "vect_par_cnst_even_or_odd_half"
diff -Nrcpad gcc-16-20260201/gcc/config/loongarch/simd.md gcc-16-20260208/gcc/config/loongarch/simd.md
*** gcc-16-20260201/gcc/config/loongarch/simd.md	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/config/loongarch/simd.md	Sun Feb  8 22:32:06 2026
***************
*** 1046,1055 ****
  })
  
  (define_insn "xor<mode>3"
!   [(set (match_operand:ALLVEC 0 "register_operand" "=f,f,f")
! 	(xor:ALLVEC
! 	  (match_operand:ALLVEC 1 "register_operand" "f,f,f")
! 	  (match_operand:ALLVEC 2 "reg_or_vector_same_val_operand" "f,YC,Urv8")))]
    ""
    "@
     <x>vxor.v\t%<wu>0,%<wu>1,%<wu>2
--- 1046,1055 ----
  })
  
  (define_insn "xor<mode>3"
!   [(set (match_operand:IVEC 0 "register_operand" "=f,f,f")
! 	(xor:IVEC
! 	  (match_operand:IVEC 1 "register_operand" "f,f,f")
! 	  (match_operand:IVEC 2 "reg_or_vector_same_val_operand" "f,YC,Urv8")))]
    ""
    "@
     <x>vxor.v\t%<wu>0,%<wu>1,%<wu>2
***************
*** 1059,1068 ****
     (set_attr "mode" "<MODE>")])
  
  (define_insn "ior<mode>3"
!   [(set (match_operand:ALLVEC 0 "register_operand" "=f,f,f")
! 	(ior:ALLVEC
! 	  (match_operand:ALLVEC 1 "register_operand" "f,f,f")
! 	  (match_operand:ALLVEC 2 "reg_or_vector_same_val_operand" "f,YC,Urv8")))]
    ""
    "@
     <x>vor.v\t%<wu>0,%<wu>1,%<wu>2
--- 1059,1068 ----
     (set_attr "mode" "<MODE>")])
  
  (define_insn "ior<mode>3"
!   [(set (match_operand:IVEC 0 "register_operand" "=f,f,f")
! 	(ior:IVEC
! 	  (match_operand:IVEC 1 "register_operand" "f,f,f")
! 	  (match_operand:IVEC 2 "reg_or_vector_same_val_operand" "f,YC,Urv8")))]
    ""
    "@
     <x>vor.v\t%<wu>0,%<wu>1,%<wu>2
***************
*** 1072,1081 ****
     (set_attr "mode" "<MODE>")])
  
  (define_insn "and<mode>3"
!   [(set (match_operand:ALLVEC 0 "register_operand" "=f,f,f")
! 	(and:ALLVEC
! 	  (match_operand:ALLVEC 1 "register_operand" "f,f,f")
! 	  (match_operand:ALLVEC 2 "reg_or_vector_same_val_operand" "f,YZ,Urv8")))]
    ""
  {
    switch (which_alternative)
--- 1072,1081 ----
     (set_attr "mode" "<MODE>")])
  
  (define_insn "and<mode>3"
!   [(set (match_operand:IVEC 0 "register_operand" "=f,f,f")
! 	(and:IVEC
! 	  (match_operand:IVEC 1 "register_operand" "f,f,f")
! 	  (match_operand:IVEC 2 "reg_or_vector_same_val_operand" "f,YZ,Urv8")))]
    ""
  {
    switch (which_alternative)
***************
*** 1084,1110 ****
        return "<x>vand.v\t%<wu>0,%<wu>1,%<wu>2";
      case 1:
        {
! 	rtx elt0 = CONST_VECTOR_ELT (operands[2], 0);
! 	unsigned HOST_WIDE_INT val;
! 	if (GET_MODE_CLASS (<MODE>mode) == MODE_VECTOR_FLOAT)
! 	  {
! 	  const REAL_VALUE_TYPE *x = CONST_DOUBLE_REAL_VALUE (elt0);
! 	  if (GET_MODE (elt0) == DFmode)
! 	    {
! 	      long tmp[2];
! 	      REAL_VALUE_TO_TARGET_DOUBLE (*x, tmp);
! 	      val = ~((unsigned HOST_WIDE_INT) tmp[1] << 32 | tmp[0]);
! 	    }
! 	  else
! 	    {
! 	      long tmp;
! 	      REAL_VALUE_TO_TARGET_SINGLE (*x, tmp);
! 	      val = ~((unsigned HOST_WIDE_INT) tmp);
! 	    }
! 	  }
! 	else
! 	  val = ~UINTVAL (elt0);
! 	operands[2] = loongarch_gen_const_int_vector (<VIMODE>mode, val & (-val));
  	return "<x>vbitclri.%v0\t%<wu>0,%<wu>1,%V2";
        }
      case 2:
--- 1084,1092 ----
        return "<x>vand.v\t%<wu>0,%<wu>1,%<wu>2";
      case 1:
        {
! 	operands[2] = simplify_const_unary_operation (NOT, <MODE>mode,
! 						      operands[2],
! 						      <MODE>mode);
  	return "<x>vbitclri.%v0\t%<wu>0,%<wu>1,%V2";
        }
      case 2:
***************
*** 1116,1121 ****
--- 1098,1149 ----
    [(set_attr "type" "simd_logic,simd_bit,simd_logic")
     (set_attr "mode" "<MODE>")])
  
+ (define_expand "copysign<mode>3"
+   [(match_operand:FVEC 0 "register_operand")
+    (match_operand:FVEC 1 "register_operand")
+    (match_operand:FVEC 2 "reg_or_vector_neg_fp_operand")]
+   ""
+ {
+   machine_mode imode = <VIMODE>mode;
+   rtx op[3], mask = loongarch_build_signbit_mask (imode, 1, 0);
+ 
+   /* Pun the operation into fixed-point bitwise operations.  */
+   for (int i = 0; i < 3; i++)
+     op[i] = lowpart_subreg (imode, operands[i], <MODE>mode);
+ 
+   /* Copysign from a positive const should have been already simplified
+      to abs, ignore the case here.  Copysign from a negative const is
+      a simple vbitset which is an alternative of ior (see above).  */
+   if (const_vector_neg_fp_operand (operands[2], <MODE>mode))
+     emit_insn (gen_ior<vimode>3 (op[0], op[1], mask));
+   else
+     {
+       mask = force_reg (imode, mask);
+       emit_insn (gen_<simd_isa>_<x>vbitsel_<simdfmt_as_i> (op[0], op[1],
+ 							   op[2], mask));
+     }
+ 
+   DONE;
+ })
+ 
+ (define_expand "@xorsign<mode>3"
+   [(match_operand:FVEC 0 "register_operand")
+    (match_operand:FVEC 1 "register_operand")
+    (match_operand:FVEC 2 "register_operand")]
+   ""
+ {
+   machine_mode imode = <VIMODE>mode;
+   rtx op[3];
+ 
+   for (int i = 0; i < 3; i++)
+     op[i] = lowpart_subreg (imode, operands[i], <MODE>mode);
+ 
+   rtx t = loongarch_build_signbit_mask (imode, 1, 0);
+   t = force_reg (imode, simplify_gen_binary (AND, imode, op[2], t));
+   emit_move_insn (op[0], simplify_gen_binary (XOR, imode, op[1], t));
+   DONE;
+ })
+ 
  (define_insn "@simd_vshuf_<mode>"
    [(set (match_operand:QIVEC 0 "register_operand" "=f")
  	(unspec:QIVEC [(match_operand:QIVEC 1 "register_operand" "f")
diff -Nrcpad gcc-16-20260201/gcc/config/mips/mips.md gcc-16-20260208/gcc/config/mips/mips.md
*** gcc-16-20260201/gcc/config/mips/mips.md	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/config/mips/mips.md	Sun Feb  8 22:32:06 2026
***************
*** 3952,3958 ****
  (define_insn_and_split "*extenddi_truncate<mode>"
    [(set (match_operand:DI 0 "register_operand" "=d")
  	(sign_extend:DI
! 	    (truncate:SHORT (match_operand:DI 1 "register_operand" "d"))))]
    "TARGET_64BIT && !TARGET_MIPS16 && !ISA_HAS_EXTS"
    "#"
    "&& reload_completed"
--- 3952,3958 ----
  (define_insn_and_split "*extenddi_truncate<mode>"
    [(set (match_operand:DI 0 "register_operand" "=d")
  	(sign_extend:DI
! 	    (truncate:SUBDI (match_operand:DI 1 "register_operand" "d"))))]
    "TARGET_64BIT && !TARGET_MIPS16 && !ISA_HAS_EXTS"
    "#"
    "&& reload_completed"
diff -Nrcpad gcc-16-20260201/gcc/config/nvptx/mkoffload.cc gcc-16-20260208/gcc/config/nvptx/mkoffload.cc
*** gcc-16-20260201/gcc/config/nvptx/mkoffload.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/config/nvptx/mkoffload.cc	Sun Feb  8 22:32:06 2026
*************** xputenv (const char *string)
*** 104,110 ****
  {
    if (verbose)
      fprintf (stderr, "%s\n", string);
!   putenv (CONST_CAST (char *, string));
  }
  
  
--- 104,110 ----
  {
    if (verbose)
      fprintf (stderr, "%s\n", string);
!   putenv (const_cast<char *> (string));
  }
  
  
*************** compile_native (const char *infile, cons
*** 625,631 ****
    obstack_ptr_grow (&argv_obstack, NULL);
  
    const char **new_argv = XOBFINISH (&argv_obstack, const char **);
!   fork_execute (new_argv[0], CONST_CAST (char **, new_argv), true,
  		".gccnative_args");
    obstack_free (&argv_obstack, NULL);
  }
--- 625,631 ----
    obstack_ptr_grow (&argv_obstack, NULL);
  
    const char **new_argv = XOBFINISH (&argv_obstack, const char **);
!   fork_execute (new_argv[0], const_cast<char **> (new_argv), true,
  		".gccnative_args");
    obstack_free (&argv_obstack, NULL);
  }
*************** main (int argc, char **argv)
*** 842,848 ****
  	omp_requires_file = make_temp_file (".mkoffload.omp_requires");
  
        xputenv (concat ("GCC_OFFLOAD_OMP_REQUIRES_FILE=", omp_requires_file, NULL));
!       fork_execute (new_argv[0], CONST_CAST (char **, new_argv), true,
  		    ".gcc_args");
        obstack_free (&argv_obstack, NULL);
        unsetenv("GCC_OFFLOAD_OMP_REQUIRES_FILE");
--- 842,848 ----
  	omp_requires_file = make_temp_file (".mkoffload.omp_requires");
  
        xputenv (concat ("GCC_OFFLOAD_OMP_REQUIRES_FILE=", omp_requires_file, NULL));
!       fork_execute (new_argv[0], const_cast<char **> (new_argv), true,
  		    ".gcc_args");
        obstack_free (&argv_obstack, NULL);
        unsetenv("GCC_OFFLOAD_OMP_REQUIRES_FILE");
diff -Nrcpad gcc-16-20260201/gcc/config/nvptx/nvptx.cc gcc-16-20260208/gcc/config/nvptx/nvptx.cc
*** gcc-16-20260201/gcc/config/nvptx/nvptx.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/config/nvptx/nvptx.cc	Sun Feb  8 22:32:06 2026
*************** section_for_sym (rtx sym)
*** 513,519 ****
  static const char *
  section_for_decl (const_tree decl)
  {
!   return section_for_sym (XEXP (DECL_RTL (CONST_CAST (tree, decl)), 0));
  }
  
  /* Check NAME for special function names and redirect them by returning a
--- 513,519 ----
  static const char *
  section_for_decl (const_tree decl)
  {
!   return section_for_sym (XEXP (DECL_RTL (const_cast<tree> (decl)), 0));
  }
  
  /* Check NAME for special function names and redirect them by returning a
diff -Nrcpad gcc-16-20260201/gcc/config/riscv/iterators.md gcc-16-20260208/gcc/config/riscv/iterators.md
*** gcc-16-20260201/gcc/config/riscv/iterators.md	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/config/riscv/iterators.md	Sun Feb  8 22:32:06 2026
***************
*** 211,216 ****
--- 211,223 ----
    (sign_extend "extend") (zero_extend "zero_extend")
  ])
  
+ ;; This code iterator captures cases where a zero value for an operand
+ ;; neutralizes the operation.  ie, a + 0 -> a.  That basic idea forms
+ ;; conditional operations.
+ (define_code_iterator zero_is_neutral_op [plus minus ior xor ashift lshiftrt
+ 					  ashiftrt rotatert rotate])
+ (define_code_iterator zero_is_neutral_op_c [plus ior xor])
+ 
  ;; These code iterators allow unsigned and signed extraction to be generated
  ;; from the same template.
  (define_code_iterator any_extract [sign_extract zero_extract])
***************
*** 227,232 ****
--- 234,241 ----
  ;; from the same template.
  (define_code_iterator any_shift [ashift ashiftrt lshiftrt])
  
+ (define_code_iterator any_shift_rotate [ashift ashiftrt lshiftrt rotate rotatert])
+ 
  ;; This code iterator allows the three bitwise instructions to be generated
  ;; from the same template.
  (define_code_iterator any_bitwise [and ior xor])
diff -Nrcpad gcc-16-20260201/gcc/config/riscv/riscv-opts.h gcc-16-20260208/gcc/config/riscv/riscv-opts.h
*** gcc-16-20260201/gcc/config/riscv/riscv-opts.h	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/config/riscv/riscv-opts.h	Sun Feb  8 22:32:06 2026
*************** enum riscv_tls_type {
*** 172,179 ****
  #define TARGET_VECTOR_AUTOVEC_SEGMENT					       \
    (TARGET_VECTOR && riscv_mautovec_segment)
  
! #define GPR2VR_COST_UNPROVIDED -1
! #define FPR2VR_COST_UNPROVIDED -1
  
  /* Extra extension flags, used for carry extra info for a RISC-V extension.  */
  enum
--- 172,182 ----
  #define TARGET_VECTOR_AUTOVEC_SEGMENT					       \
    (TARGET_VECTOR && riscv_mautovec_segment)
  
! #define COST_UNPROVIDED -1
! #define GPR2VR_COST_UNPROVIDED COST_UNPROVIDED
! #define VR2GPR_COST_UNPROVIDED COST_UNPROVIDED
! #define FPR2VR_COST_UNPROVIDED COST_UNPROVIDED
! #define VR2FPR_COST_UNPROVIDED COST_UNPROVIDED
  
  /* Extra extension flags, used for carry extra info for a RISC-V extension.  */
  enum
diff -Nrcpad gcc-16-20260201/gcc/config/riscv/riscv-protos.h gcc-16-20260208/gcc/config/riscv/riscv-protos.h
*** gcc-16-20260201/gcc/config/riscv/riscv-protos.h	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/config/riscv/riscv-protos.h	Sun Feb  8 22:32:06 2026
*************** const struct riscv_tune_info *
*** 878,884 ****
--- 878,886 ----
  riscv_parse_tune (const char *, bool);
  const cpu_vector_cost *get_vector_costs ();
  int get_gr2vr_cost ();
+ int get_vr2gr_cost ();
  int get_fr2vr_cost ();
+ int get_vr2fr_cost ();
  
  enum
  {
diff -Nrcpad gcc-16-20260201/gcc/config/riscv/riscv-string.cc gcc-16-20260208/gcc/config/riscv/riscv-string.cc
*** gcc-16-20260201/gcc/config/riscv/riscv-string.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/config/riscv/riscv-string.cc	Sun Feb  8 22:32:06 2026
*************** riscv_expand_block_move_scalar (rtx dest
*** 980,986 ****
  bool
  riscv_expand_block_move (rtx dest, rtx src, rtx length)
  {
!   if ((TARGET_VECTOR && !TARGET_XTHEADVECTOR)
        && stringop_strategy & STRATEGY_VECTOR)
      {
        bool ok = riscv_vector::expand_block_move (dest, src, length, false);
--- 980,986 ----
  bool
  riscv_expand_block_move (rtx dest, rtx src, rtx length)
  {
!   if (TARGET_VECTOR
        && stringop_strategy & STRATEGY_VECTOR)
      {
        bool ok = riscv_vector::expand_block_move (dest, src, length, false);
*************** use_vector_stringop_p (struct stringop_i
*** 1086,1094 ****
    rtx avl = length_in;
    HOST_WIDE_INT potential_ew = max_ew;
  
!   if (!TARGET_VECTOR || !(stringop_strategy & STRATEGY_VECTOR))
      return false;
  
    int max_lmul = TARGET_MAX_LMUL;
    if (rvv_max_lmul == RVV_CONV_DYNAMIC)
      max_lmul = RVV_M1;
--- 1086,1100 ----
    rtx avl = length_in;
    HOST_WIDE_INT potential_ew = max_ew;
  
!   if (!TARGET_VECTOR
!       || !(stringop_strategy & STRATEGY_VECTOR))
      return false;
  
+   if (TARGET_XTHEADVECTOR
+       && (!CONST_INT_P (length_in)
+ 	  || known_lt (INTVAL (length_in), BYTES_PER_RISCV_VECTOR)))
+       return false;
+ 
    int max_lmul = TARGET_MAX_LMUL;
    if (rvv_max_lmul == RVV_CONV_DYNAMIC)
      max_lmul = RVV_M1;
*************** check_vectorise_memory_operation (rtx le
*** 1598,1603 ****
--- 1604,1613 ----
  
    HOST_WIDE_INT length = INTVAL (length_in);
  
+   if (TARGET_XTHEADVECTOR
+       && known_lt (length, BYTES_PER_RISCV_VECTOR))
+     return false;
+ 
    /* If it's tiny, default operation is likely better; maybe worth
       considering fractional lmul in the future as well.  */
    if (length < (TARGET_MIN_VLEN / 8))
diff -Nrcpad gcc-16-20260201/gcc/config/riscv/riscv-target-attr.cc gcc-16-20260208/gcc/config/riscv/riscv-target-attr.cc
*** gcc-16-20260201/gcc/config/riscv/riscv-target-attr.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/config/riscv/riscv-target-attr.cc	Sun Feb  8 22:32:06 2026
*************** riscv_target_attr_parser::parse_arch (co
*** 156,162 ****
  
  	  const char *result = m_subset_list->parse_single_ext (token + 1);
  	  /* Check parse_single_ext has consume all string.  */
! 	  if (*result != '\0')
  	    {
  	      if (m_loc)
  		error_at (*m_loc, "unexpected arch for %<target()%> "
--- 156,162 ----
  
  	  const char *result = m_subset_list->parse_single_ext (token + 1);
  	  /* Check parse_single_ext has consume all string.  */
! 	  if (result == nullptr || *result != '\0')
  	    {
  	      if (m_loc)
  		error_at (*m_loc, "unexpected arch for %<target()%> "
diff -Nrcpad gcc-16-20260201/gcc/config/riscv/riscv-vector-costs.cc gcc-16-20260208/gcc/config/riscv/riscv-vector-costs.cc
*** gcc-16-20260201/gcc/config/riscv/riscv-vector-costs.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/config/riscv/riscv-vector-costs.cc	Sun Feb  8 22:32:06 2026
*************** costs::adjust_stmt_cost (enum vect_cost_
*** 1253,1260 ****
  	+= (FLOAT_TYPE_P (vectype) ? get_fr2vr_cost () : get_gr2vr_cost ());
        break;
      case vec_to_scalar:
!       stmt_cost += (FLOAT_TYPE_P (vectype) ? costs->regmove->VR2FR
! 		    : costs->regmove->VR2GR);
        break;
      case vector_load:
      case vector_store:
--- 1253,1260 ----
  	+= (FLOAT_TYPE_P (vectype) ? get_fr2vr_cost () : get_gr2vr_cost ());
        break;
      case vec_to_scalar:
!       stmt_cost
! 	+= (FLOAT_TYPE_P (vectype) ? get_vr2fr_cost () : get_vr2gr_cost ());
        break;
      case vector_load:
      case vector_store:
diff -Nrcpad gcc-16-20260201/gcc/config/riscv/riscv.cc gcc-16-20260208/gcc/config/riscv/riscv.cc
*** gcc-16-20260201/gcc/config/riscv/riscv.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/config/riscv/riscv.cc	Sun Feb  8 22:32:06 2026
*************** riscv_rtx_costs (rtx x, machine_mode mod
*** 4630,4635 ****
--- 4630,4645 ----
  	  return true;
  	}
  
+       /* Conditional AND */
+       if (TARGET_ZICOND
+ 	  && GET_CODE (XEXP (x, 0)) == IF_THEN_ELSE
+ 	  && GET_CODE (XEXP (x, 1)) == IF_THEN_ELSE
+ 	  && GET_CODE (XEXP (XEXP (x, 1), 1)) == AND)
+ 	{
+ 	  *total = COSTS_N_INSNS (3);
+ 	  return true;
+ 	}
+ 
        if (float_mode_p)
  	*total = tune_param->fp_add[mode == DFmode];
        else
*************** riscv_register_move_cost (machine_mode m
*** 10718,10726 ****
    if (from == V_REGS)
      {
        if (to_is_gpr)
! 	return get_vector_costs ()->regmove->VR2GR;
        else if (to_is_fpr)
! 	return get_vector_costs ()->regmove->VR2FR;
      }
  
    if (to == V_REGS)
--- 10728,10736 ----
    if (from == V_REGS)
      {
        if (to_is_gpr)
! 	return get_vr2gr_cost ();
        else if (to_is_fpr)
! 	return get_vr2fr_cost ();
      }
  
    if (to == V_REGS)
*************** get_gr2vr_cost ()
*** 14203,14208 ****
--- 14213,14233 ----
    return cost;
  }
  
+ /* Return the cost of operation that move from vr to gpr.
+    It will take the value of --param=vr2gpr_cost if it is provided.
+    Or the default regmove->VR2GR will be returned.  */
+ 
+ int
+ get_vr2gr_cost ()
+ {
+   int cost = get_vector_costs ()->regmove->VR2GR;
+ 
+   if (vr2gpr_cost != VR2GPR_COST_UNPROVIDED)
+     cost = vr2gpr_cost;
+ 
+   return cost;
+ }
+ 
  /* Return the cost of moving data from floating-point to vector register.
     It will take the value of --param=fpr2vr-cost if it is provided.
     Otherwise the default regmove->FR2VR will be returned.  */
*************** get_fr2vr_cost ()
*** 14218,14223 ****
--- 14243,14263 ----
    return cost;
  }
  
+ /* Return the cost of moving data from floating-point to vector register.
+    It will take the value of --param=fpr2vr-cost if it is provided.
+    Otherwise the default regmove->FR2VR will be returned.  */
+ 
+ int
+ get_vr2fr_cost ()
+ {
+   int cost = get_vector_costs ()->regmove->VR2FR;
+ 
+   if (vr2fpr_cost != VR2FPR_COST_UNPROVIDED)
+     cost = vr2fpr_cost;
+ 
+   return cost;
+ }
+ 
  /* Implement targetm.vectorize.builtin_vectorization_cost.  */
  
  static int
*************** extract_base_offset_in_addr (rtx mem, rt
*** 14361,14368 ****
  static bool
  riscv_vector_mode_supported_any_target_p (machine_mode)
  {
-   if (TARGET_XTHEADVECTOR)
-     return false;
    return true;
  }
  
--- 14401,14406 ----
diff -Nrcpad gcc-16-20260201/gcc/config/riscv/riscv.opt gcc-16-20260208/gcc/config/riscv/riscv.opt
*** gcc-16-20260201/gcc/config/riscv/riscv.opt	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/config/riscv/riscv.opt	Sun Feb  8 22:32:06 2026
*************** Max number of bytes to compare as part o
*** 286,295 ****
--- 286,303 ----
  Target RejectNegative Joined UInteger Var(gpr2vr_cost) Init(GPR2VR_COST_UNPROVIDED)
  Set the cost value of the rvv instruction when operate from GPR to VR.
  
+ -param=vr2gpr-cost=
+ Target RejectNegative Joined UInteger Var(vr2gpr_cost) Init(VR2GPR_COST_UNPROVIDED)
+ Set the cost value of the rvv instruction when operate from VR to GPR .
+ 
  -param=fpr2vr-cost=
  Target RejectNegative Joined UInteger Var(fpr2vr_cost) Init(FPR2VR_COST_UNPROVIDED)
  Set the cost value of the rvv instruction when operate from FPR to VR.
  
+ -param=vr2fpr-cost=
+ Target RejectNegative Joined UInteger Var(vr2fpr_cost) Init(VR2FPR_COST_UNPROVIDED)
+ Set the cost value of the rvv instruction when operate from VR to FPR.
+ 
  -param=riscv-autovec-mode=
  Target Undocumented RejectNegative Joined Var(riscv_autovec_mode) Save
  Set the only autovec mode to try.
diff -Nrcpad gcc-16-20260201/gcc/config/riscv/vector.md gcc-16-20260208/gcc/config/riscv/vector.md
*** gcc-16-20260201/gcc/config/riscv/vector.md	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/config/riscv/vector.md	Sun Feb  8 22:32:06 2026
***************
*** 503,510 ****
  			  vaeskf1,vaeskf2,vaesz,vsha2ms,vsha2ch,vsha2cl,vsm4k,vsm4r,\
  			  vsm3me,vsm3c,vfncvtbf16,vfwcvtbf16,vfwmaccbf16")
  	   (const_int INVALID_ATTRIBUTE)
! 	(and (eq_attr "type" "vlde,vste,vlsegde,vssegte,vlsegds,vssegts,\
! 			       vlsegdff,vssegtux,vlsegdox,vlsegdux")
  	      (match_test "TARGET_XTHEADVECTOR"))
  	   (const_int INVALID_ATTRIBUTE)
  	 (eq_attr "mode" "RVVM8QI,RVVM1BI") (const_int 1)
--- 503,510 ----
  			  vaeskf1,vaeskf2,vaesz,vsha2ms,vsha2ch,vsha2cl,vsm4k,vsm4r,\
  			  vsm3me,vsm3c,vfncvtbf16,vfwcvtbf16,vfwmaccbf16")
  	   (const_int INVALID_ATTRIBUTE)
! 	(and (eq_attr "type" "vlde,vste,vlds,vsts,vlsegde,vssegte,vlsegds,\
! 			      vssegts,vlsegdff,vssegtux,vlsegdox,vlsegdux")
  	      (match_test "TARGET_XTHEADVECTOR"))
  	   (const_int INVALID_ATTRIBUTE)
  	 (eq_attr "mode" "RVVM8QI,RVVM1BI") (const_int 1)
diff -Nrcpad gcc-16-20260201/gcc/config/riscv/zicond.md gcc-16-20260208/gcc/config/riscv/zicond.md
*** gcc-16-20260201/gcc/config/riscv/zicond.md	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/config/riscv/zicond.md	Sun Feb  8 22:32:06 2026
***************
*** 270,272 ****
--- 270,415 ----
    [(set (match_dup 0) (ashiftrt:X (match_dup 1) (match_dup 2)))
     (set (match_dup 0) (ior:X (match_dup 0) (const_int 1)))]
    { operands[2] = GEN_INT (GET_MODE_BITSIZE (word_mode) - 1); })
+ 
+ ;; The next several splitters are mean to capture cases where if
+ ;; conversion was successful, but used a generalized conditional
+ ;; move during the first pass of if-conversion (typically because
+ ;; the conditional branch jumps over multiple sets).
+ ;;
+ ;; If the multiple sets would simplify into a single set, then we
+ ;; would often have been better off not converting during the first
+ ;; pass because we could use a more efficient sequence with a single
+ ;; czero.
+ ;;
+ ;; The basic idea here is to recognize when the two arms of the
+ ;; generalized conditional move have related values and where
+ ;; zero is a neutral operand.
+ ;;
+ ;; We conditionally zero the relevant operand, then emit the
+ ;; operation unconditionally.
+ ;;
+ ;; This is made more complex by the fact that 32-bit ops on rv64
+ ;; have an embedded sign extend.  Even worse, the mode of a shift
+ ;; count is QImode.  These quirks mean we have many more patterns
+ ;; than one might otherwise think we should.
+ ;;
+ ;; This does not handle the 32-bit ops on rv64 like addw right now.
+ ;; It's unclear how to do that safely since we have different modes
+ ;; in the two arms.
+ 
+ ;; Simple rv32 or rv64 ops where we can zero either operand to make
+ ;; it neutral.  Two as the the common and potentially neutral op in
+ ;; the 2nd if-then-else can be swapped.
+ (define_split
+   [(set (match_operand:X 0 "register_operand")
+ 	(plus:X (if_then_else:X
+ 		  (eq:X (match_operand:X 1 "register_operand") (const_int 0))
+ 		  (match_operand:X 2 "register_operand")
+ 		  (const_int 0))
+ 		(if_then_else:X
+ 		  (ne:X (match_dup 1) (const_int 0))
+ 		  (zero_is_neutral_op:X
+ 		    (match_dup 2)
+ 		    (match_operand:X 3 "register_operand"))
+ 		  (const_int 0))))
+    (clobber (match_operand:X 4 "register_operand"))]
+   "TARGET_ZICOND_LIKE || TARGET_XTHEADCONDMOV"
+   [(set (match_dup 4) (if_then_else:X (ne:X (match_dup 1) (const_int 0))
+ 				      (match_dup 3)
+ 				      (const_int 0)))
+    (set (match_dup 0) (zero_is_neutral_op:X (match_dup 2) (match_dup 4)))])
+ 
+ (define_split
+   [(set (match_operand:X 0 "register_operand")
+ 	(plus:X (if_then_else:X
+ 		  (eq:X (match_operand:X 1 "register_operand") (const_int 0))
+ 		  (match_operand:X 2 "register_operand")
+ 		  (const_int 0))
+ 		(if_then_else:X
+ 		  (ne:X (match_dup 1) (const_int 0))
+ 		  (zero_is_neutral_op_c:X
+ 		    (match_operand:X 3 "register_operand")
+ 		    (match_dup 2))
+ 		  (const_int 0))))
+    (clobber (match_operand:X 4 "register_operand"))]
+   "TARGET_ZICOND_LIKE || TARGET_XTHEADCONDMOV"
+   [(set (match_dup 4) (if_then_else:X (ne:X (match_dup 1) (const_int 0))
+ 				      (match_dup 3)
+ 				      (const_int 0)))
+    (set (match_dup 0) (zero_is_neutral_op_c:X (match_dup 2) (match_dup 4)))])
+ 
+ ;; This is a separate pattern because the mode on the shift count
+ ;; varies.  I guess we could make it modeless here and check it in
+ ;; the condition.  But that tends to trigger warnings from gen*.
+ (define_split
+   [(set (match_operand:X 0 "register_operand")
+ 	(plus:X (if_then_else:X
+ 		  (eq:X (match_operand:X 1 "register_operand") (const_int 0))
+ 		  (match_operand:X 2 "register_operand")
+ 		  (const_int 0))
+ 		(if_then_else:X
+ 		  (ne:X (match_dup 1) (const_int 0))
+ 		  (any_shift_rotate:X
+ 		    (match_dup 2)
+ 		    (match_operand:QI 3 "register_operand"))
+ 		  (const_int 0))))
+    (clobber (match_operand:X 4 "register_operand"))]
+   "TARGET_ZICOND_LIKE || TARGET_XTHEADCONDMOV"
+   [(set (match_dup 4) (if_then_else:X (ne:X (match_dup 1) (const_int 0))
+ 				      (match_dup 3)
+ 				      (const_int 0)))
+    (set (match_dup 0) (any_shift_rotate:X (match_dup 2) (subreg:QI (match_dup 4) 0)))]
+   "operands[3] = gen_lowpart (word_mode, operands[3]);")
+ 
+ ;; AND is special as the czero doesn't produce the neutral operand.  It
+ ;; would be a natural 4->3 split, but combine doesn't support that, so
+ ;; a define_insn_and_split seems to be the safest path forward to address
+ ;; the remaining code quality regression (match.pd approaches will likely
+ ;; have undesirable fallout based on what's been seen in the gcc-16 cycle).
+ (define_insn_and_split "conditional_and<mode>"
+   [(set (match_operand:X 0 "register_operand" "=&r")
+ 	(plus:X (if_then_else:X
+ 		  (eq:X (match_operand:X 1 "register_operand" "r") (const_int 0))
+ 		  (match_operand:X 2 "register_operand" "r")
+ 		  (const_int 0))
+ 		(if_then_else:X
+ 		  (ne:X (match_dup 1) (const_int 0))
+ 		  (and:X
+ 		    (match_dup 2)
+ 		    (match_operand:X 3 "register_operand" "r"))
+ 		  (const_int 0))))]
+   "(TARGET_ZICOND_LIKE || TARGET_XTHEADCONDMOV) && can_create_pseudo_p ()"
+   "#"
+   "&& 1"
+   [(set (match_dup 4) (and:X (match_dup 2) (match_dup 3)))
+    (set (match_dup 5) (if_then_else:X (ne:X (match_dup 1) (const_int 0))
+ 				      (match_dup 2)
+ 				      (const_int 0)))
+    (set (match_dup 0) (ior:X (match_dup 5) (match_dup 4)))]
+   "operands[4] = gen_reg_rtx (word_mode);
+    operands[5] = gen_reg_rtx (word_mode);")
+ 
+ ;; Same thing, but with operand order reversed
+ (define_insn_and_split "conditional_rand<mode>"
+   [(set (match_operand:X 0 "register_operand" "=&r")
+ 	(plus:X (if_then_else:X
+ 		  (eq:X (match_operand:X 1 "register_operand" "r") (const_int 0))
+ 		  (match_operand:X 2 "register_operand" "r")
+ 		  (const_int 0))
+ 		(if_then_else:X
+ 		  (ne:X (match_dup 1) (const_int 0))
+ 		  (and:X
+ 		    (match_operand:X 3 "register_operand" "r")
+ 		    (match_dup 2))
+ 		  (const_int 0))))]
+   "(TARGET_ZICOND_LIKE || TARGET_XTHEADCONDMOV) && can_create_pseudo_p ()"
+   "#"
+   "&& 1"
+   [(set (match_dup 4) (and:X (match_dup 2) (match_dup 3)))
+    (set (match_dup 5) (if_then_else:X (ne:X (match_dup 1) (const_int 0))
+ 				      (match_dup 2)
+ 				      (const_int 0)))
+    (set (match_dup 0) (ior:X (match_dup 5) (match_dup 4)))]
+   "operands[4] = gen_reg_rtx (word_mode);
+    operands[5] = gen_reg_rtx (word_mode);")
+ 
diff -Nrcpad gcc-16-20260201/gcc/config/rs6000/rs6000.cc gcc-16-20260208/gcc/config/rs6000/rs6000.cc
*** gcc-16-20260201/gcc/config/rs6000/rs6000.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/config/rs6000/rs6000.cc	Sun Feb  8 22:32:06 2026
*************** print_operand (FILE *file, rtx x, int co
*** 14669,14675 ****
  	   (plus (unspec [(symbol_ref ("x")) (reg 2)] tocrel) 4)
  	   without this hack would be output as "x@toc+4".  We
  	   want "x+4@toc".  */
! 	output_addr_const (file, CONST_CAST_RTX (tocrel_base_oac));
        else if (GET_CODE (x) == UNSPEC && XINT (x, 1) == UNSPEC_TLSGD)
  	output_addr_const (file, XVECEXP (x, 0, 0));
        else if (GET_CODE (x) == UNSPEC && XINT (x, 1) == UNSPEC_PLTSEQ)
--- 14669,14675 ----
  	   (plus (unspec [(symbol_ref ("x")) (reg 2)] tocrel) 4)
  	   without this hack would be output as "x@toc+4".  We
  	   want "x+4@toc".  */
! 	output_addr_const (file, const_cast<rtx> (tocrel_base_oac));
        else if (GET_CODE (x) == UNSPEC && XINT (x, 1) == UNSPEC_TLSGD)
  	output_addr_const (file, XVECEXP (x, 0, 0));
        else if (GET_CODE (x) == UNSPEC && XINT (x, 1) == UNSPEC_PLTSEQ)
*************** print_operand_address (FILE *file, rtx x
*** 14780,14786 ****
  	 .       (plus (unspec [(symbol_ref ("x")) (reg 2)] tocrel) 8))
  	 without this hack would be output as "x@toc+8@l(9)".  We
  	 want "x+8@toc@l(9)".  */
!       output_addr_const (file, CONST_CAST_RTX (tocrel_base_oac));
        if (GET_CODE (x) == LO_SUM)
  	fprintf (file, "@l(%s)", reg_names[REGNO (XEXP (x, 0))]);
        else
--- 14780,14786 ----
  	 .       (plus (unspec [(symbol_ref ("x")) (reg 2)] tocrel) 8))
  	 without this hack would be output as "x@toc+8@l(9)".  We
  	 want "x+8@toc@l(9)".  */
!       output_addr_const (file, const_cast<rtx> (tocrel_base_oac));
        if (GET_CODE (x) == LO_SUM)
  	fprintf (file, "@l(%s)", reg_names[REGNO (XEXP (x, 0))]);
        else
*************** rs6000_output_addr_const_extra (FILE *fi
*** 14807,14813 ****
  	  {
  	    if (INTVAL (tocrel_offset_oac) >= 0)
  	      fprintf (file, "+");
! 	    output_addr_const (file, CONST_CAST_RTX (tocrel_offset_oac));
  	  }
  	if (!TARGET_AIX || (TARGET_ELF && TARGET_MINIMAL_TOC))
  	  {
--- 14807,14813 ----
  	  {
  	    if (INTVAL (tocrel_offset_oac) >= 0)
  	      fprintf (file, "+");
! 	    output_addr_const (file, const_cast<rtx> (tocrel_offset_oac));
  	  }
  	if (!TARGET_AIX || (TARGET_ELF && TARGET_MINIMAL_TOC))
  	  {
diff -Nrcpad gcc-16-20260201/gcc/config/sparc/driver-sparc.cc gcc-16-20260208/gcc/config/sparc/driver-sparc.cc
*** gcc-16-20260201/gcc/config/sparc/driver-sparc.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/config/sparc/driver-sparc.cc	Sun Feb  8 22:32:06 2026
*************** host_detect_local_cpu (int argc, const c
*** 127,139 ****
    kc = kstat_open ();
    if (kc != NULL)
      {
!       ksp = kstat_lookup (kc, CONST_CAST2 (char *, const char *, "cpu_info"),
! 			  -1, NULL);
        if (ksp != NULL
  	  && kstat_read (kc, ksp, NULL) != -1
  	  && ksp->ks_type == KSTAT_TYPE_NAMED)
  	brand = (kstat_named_t *)
! 	  kstat_data_lookup (ksp, CONST_CAST2 (char *, const char *, "brand"));
        if (brand != NULL && brand->data_type == KSTAT_DATA_STRING)
  	buf = KSTAT_NAMED_STR_PTR (brand);
      }
--- 127,138 ----
    kc = kstat_open ();
    if (kc != NULL)
      {
!       ksp = kstat_lookup (kc, const_cast<char *> ("cpu_info"), -1, NULL);
        if (ksp != NULL
  	  && kstat_read (kc, ksp, NULL) != -1
  	  && ksp->ks_type == KSTAT_TYPE_NAMED)
  	brand = (kstat_named_t *)
! 	  kstat_data_lookup (ksp, const_cast<char *> ("brand"));
        if (brand != NULL && brand->data_type == KSTAT_DATA_STRING)
  	buf = KSTAT_NAMED_STR_PTR (brand);
      }
diff -Nrcpad gcc-16-20260201/gcc/config.in gcc-16-20260208/gcc/config.in
*** gcc-16-20260201/gcc/config.in	Sun Feb  1 22:32:20 2026
--- gcc-16-20260208/gcc/config.in	Sun Feb  8 22:32:19 2026
***************
*** 355,360 ****
--- 355,366 ----
  #endif
  
  
+ /* Define if you have a working <afunix.h> header file. */
+ #ifndef USED_FOR_TARGET
+ #undef HAVE_AFUNIX_H
+ #endif
+ 
+ 
  /* Define if AF_INET6 supported. */
  #ifndef USED_FOR_TARGET
  #undef HAVE_AF_INET6
diff -Nrcpad gcc-16-20260201/gcc/configure gcc-16-20260208/gcc/configure
*** gcc-16-20260201/gcc/configure	Sun Feb  1 22:32:20 2026
--- gcc-16-20260208/gcc/configure	Sun Feb  8 22:32:19 2026
*************** with_gxx_include_dir
*** 969,979 ****
  with_gxx_libcxx_include_dir
  with_cpp_install_dir
  enable_generated_files_in_srcdir
- with_gnu_ld
  with_ld
  with_demangler_in_ld
  with_dsymutil
- with_gnu_as
  with_as
  with_windres
  enable_largefile
--- 969,977 ----
*************** with_picolibc
*** 1011,1016 ****
--- 1009,1015 ----
  with_zstd
  with_zstd_include
  with_zstd_lib
+ with_gnu_ld
  enable_rpath
  with_libiconv_prefix
  with_libiconv_type
*************** enable_fast_install
*** 1033,1038 ****
--- 1032,1038 ----
  enable_libtool_lock
  enable_darwin_at_rpath
  with_darwin_extra_rpath
+ with_gnu_as
  enable_ld
  enable_gold
  with_plugin_ld
*************** Optional Packages:
*** 1868,1879 ****
    --with-cpp-install-dir=DIR
                            install the user visible C preprocessor in DIR
                            (relative to PREFIX) as well as PREFIX/bin
-   --with-gnu-ld           arrange to work with GNU ld
    --with-ld               arrange to use the specified ld (full pathname)
    --with-demangler-in-ld  try to use demangler in GNU ld
    --with-dsymutil         arrange to use the specified dsymutil (full
                            pathname)
-   --with-gnu-as           arrange to work with GNU as
    --with-as               arrange to use the specified as (full pathname)
    --with-windres          arrange to use the specified windres (full pathname)
    --with-stack-clash-protection-guard-size=size
--- 1868,1877 ----
*************** Optional Packages:
*** 1921,1926 ****
--- 1919,1926 ----
    --with-darwin-extra-rpath=[ARG]
                            Specify a runpath directory, additional to those
                            provided by the compiler
+   --with-gnu-as           arrange to work with GNU as
+   --with-gnu-ld           arrange to work with GNU ld
    --with-plugin-ld=[ARG]  specify the plugin linker
    --with-glibc-version=M.N
                            assume GCC used with glibc version M.N or later
*************** fi
*** 3925,3940 ****
  # Find default linker
  # -------------------
  
- # With GNU ld
- 
- # Check whether --with-gnu-ld was given.
- if test "${with_gnu_ld+set}" = set; then :
-   withval=$with_gnu_ld; gnu_ld_flag="$with_gnu_ld"
- else
-   gnu_ld_flag=no
- fi
- 
- 
  case $target in
      *darwin*)
  	ld64_flag=yes # Darwin can only use a ld64-compatible linker.
--- 3925,3930 ----
*************** fi
*** 4031,4046 ****
  # Find default assembler
  # ----------------------
  
- # With GNU as
- 
- # Check whether --with-gnu-as was given.
- if test "${with_gnu_as+set}" = set; then :
-   withval=$with_gnu_as; gas_flag="$with_gnu_as"
- else
-   gas_flag=no
- fi
- 
- 
  
  # Check whether --with-as was given.
  if test "${with_as+set}" = set; then :
--- 4021,4026 ----
*************** $as_echo "#define HAVE_INTTYPES_H 1" >>c
*** 10485,10490 ****
--- 10465,10504 ----
  
  fi
  
+ # Use <afunix.h> only if it exists,
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for afunix.h" >&5
+ $as_echo_n "checking for afunix.h... " >&6; }
+ if ${gcc_cv_header_afunix_h+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ #include <winsock2.h>
+ #include <afunix.h>
+ int
+ main ()
+ {
+ SOCKADDR_UN addr;
+   ;
+   return 0;
+ }
+ _ACEOF
+ if ac_fn_cxx_try_compile "$LINENO"; then :
+   gcc_cv_header_afunix_h=yes
+ else
+   gcc_cv_header_afunix_h=no
+ fi
+ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_header_afunix_h" >&5
+ $as_echo "$gcc_cv_header_afunix_h" >&6; }
+ if test $gcc_cv_header_afunix_h = yes; then
+ 
+ $as_echo "#define HAVE_AFUNIX_H 1" >>confdefs.h
+ 
+ fi
+ 
  # Look for the ZSTD package.
  ZSTD_INCLUDE=
  ZSTD_LIB=
*************** cat >>confdefs.h <<_ACEOF
*** 13097,13117 ****
  _ACEOF
  
  
- case "$target:$gnu_ld" in
-   *-*-solaris2*:no)
-     # While Solaris ld has -m32/-m64 it usually determines the ELF class
-     # from the input objects.
-     ;;
-   i?86-*-solaris2*:yes | x86_64-*-solaris2*:yes)
-     ld_32_opt=-melf_i386_sol2
-     ld_64_opt=-melf_x86_64_sol2
-     ;;
-   i?86-*-*:yes | x86_64-*-*:yes)
-     ld_32_opt=-melf_i386
-     ld_64_opt=-melf_x86_64
-     ;;
- esac
- 
  count=a
  for f in $host_xm_file; do
  	count=${count}x
--- 13111,13116 ----
*************** else
*** 21954,21960 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 21957 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 21953,21959 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 21956 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** else
*** 22060,22066 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 22063 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 22059,22065 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 22062 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** fi
*** 25477,25482 ****
--- 25476,25495 ----
  fi
  fi
  
+ # With GNU as
+ 
+ # Check whether --with-gnu-as was given.
+ if test "${with_gnu_as+set}" = set; then :
+   withval=$with_gnu_as; gas_flag="$with_gnu_as"
+ else
+   if $gcc_cv_as --version 2>/dev/null | grep GNU > /dev/null; then
+    gas_flag=yes
+  else
+    gas_flag=no
+ fi
+ fi
+ 
+ 
  ORIGINAL_AS_FOR_TARGET=$gcc_cv_as
  
  case "$ORIGINAL_AS_FOR_TARGET" in
*************** fi
*** 25598,25603 ****
--- 25611,25630 ----
  fi
  fi
  
+ # With GNU ld
+ 
+ # Check whether --with-gnu-ld was given.
+ if test "${with_gnu_ld+set}" = set; then :
+   withval=$with_gnu_ld; gnu_ld_flag="$with_gnu_ld"
+ else
+   if $gcc_cv_ld --version 2>/dev/null | grep GNU > /dev/null; then
+    gnu_ld_flag=yes
+  else
+    gnu_ld_flag=no
+  fi
+ fi
+ 
+ 
  ORIGINAL_PLUGIN_LD_FOR_TARGET=$gcc_cv_ld
  PLUGIN_LD_SUFFIX=`basename $gcc_cv_ld | sed -e "s,$target_alias-,,"`
  # if the PLUGIN_LD is set ld-new, just have it as ld
*************** cat >>confdefs.h <<_ACEOF
*** 25622,25627 ****
--- 25649,25669 ----
  _ACEOF
  
  
+ case "$target:$gnu_ld_flag" in
+   *-*-solaris2*:no)
+     # While Solaris ld has -m32/-m64 it usually determines the ELF class
+     # from the input objects.
+     ;;
+   i?86-*-solaris2*:yes | x86_64-*-solaris2*:yes)
+     ld_32_opt=-melf_i386_sol2
+     ld_64_opt=-melf_x86_64_sol2
+     ;;
+   i?86-*-*:yes | x86_64-*-*:yes)
+     ld_32_opt=-melf_i386
+     ld_64_opt=-melf_x86_64
+     ;;
+ esac
+ 
  # Check to see if we are using gold instead of ld
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using gold" >&5
  $as_echo_n "checking whether we are using gold... " >&6; }
*************** if ${gcc_cv_as_flags+:} false; then :
*** 26112,26117 ****
--- 26154,26181 ----
    $as_echo_n "(cached) " >&6
  else
     case "$target:$gas_flag" in
+   *-*-darwin*:*)
+                         case "$target" in
+       i?86-*-*)
+ 	gcc_cv_as_flags="-arch i386"
+ 	;;
+       powerpc64*-*-*)
+ 	gcc_cv_as_flags="-arch ppc64"
+ 	;;
+       powerpc*-*-*)
+ 	gcc_cv_as_flags="-arch ppc"
+ 	;;
+       x86_64-*-*)
+ 	gcc_cv_as_flags="-arch x86_64"
+ 	;;
+     esac
+     case "$target" in
+       i?86-*-* | x86_64-*-*)
+ 	as_32_opt="-arch i386"
+ 	as_64_opt="-arch x86_64"
+ 	;;
+     esac
+     ;;
    *-*-solaris2*:no)
          case "$target" in
        i?86-*-* | sparc-*-*)
*************** else
*** 26139,26147 ****
      as_32_opt=--32
      as_64_opt=--64
      ;;
-   powerpc*-*-darwin*:*)
-         gcc_cv_as_flags="-arch ppc"
-     ;;
    amdgcn*:*)
              gcc_cv_as_flags="--filetype=obj -triple=amdgcn--amdhsa"
      ;;
--- 26203,26208 ----
*************** fi
*** 26793,26799 ****
  	    gcc_cv_initfini_array=yes
  	  fi
  	elif test x"$gcc_cv_as" != x -a x"$gcc_cv_ld" != x -a x"$gcc_cv_objdump" != x ; then
! 	  case $target:$gas in
  	    *:yes)
  	      sh_flags='"a"'
  	      sh_type='%progbits'
--- 26854,26860 ----
  	    gcc_cv_initfini_array=yes
  	  fi
  	elif test x"$gcc_cv_as" != x -a x"$gcc_cv_ld" != x -a x"$gcc_cv_objdump" != x ; then
! 	  case $target:$gas_flag in
  	    *:yes)
  	      sh_flags='"a"'
  	      sh_type='%progbits'
*************** fi
*** 26808,26814 ****
  	      sh_quote='"'
  	      ;;
  	  esac
! 	  case "$target:$gnu_ld" in
  	    *:yes)
  	      cat > conftest.s <<EOF
  .section .dtors,$sh_flags,$sh_type
--- 26869,26875 ----
  	      sh_quote='"'
  	      ;;
  	  esac
! 	  case "$target:$gnu_ld_flag" in
  	    *:yes)
  	      cat > conftest.s <<EOF
  .section .dtors,$sh_flags,$sh_type
*************** elif test x$gcc_cv_ld != x; then
*** 28372,28378 ****
  	;;
        # HP-UX ld uses -a flags to select between shared and archive.
        *-*-hpux*)
! 	if test x"$gnu_ld" = xno; then
  	  gcc_cv_ld_static_dynamic=yes
  	  gcc_cv_ld_static_option="-aarchive_shared"
  	  gcc_cv_ld_dynamic_option="-adefault"
--- 28433,28439 ----
  	;;
        # HP-UX ld uses -a flags to select between shared and archive.
        *-*-hpux*)
! 	if test x"$gnu_ld_flag" = xno; then
  	  gcc_cv_ld_static_dynamic=yes
  	  gcc_cv_ld_static_option="-aarchive_shared"
  	  gcc_cv_ld_dynamic_option="-adefault"
*************** $as_echo "$gcc_cv_ld_static_dynamic" >&6
*** 28407,28413 ****
  $as_echo_n "checking linker --version-script option... " >&6; }
  gcc_cv_ld_version_script=no
  ld_version_script_option=''
! if test $in_tree_ld = yes || test x"$gnu_ld" = xyes; then
    gcc_cv_ld_version_script=yes
    ld_version_script_option='--version-script'
  elif test x$gcc_cv_ld != x; then
--- 28468,28474 ----
  $as_echo_n "checking linker --version-script option... " >&6; }
  gcc_cv_ld_version_script=no
  ld_version_script_option=''
! if test $in_tree_ld = yes || test x"$gnu_ld_flag" = xyes; then
    gcc_cv_ld_version_script=yes
    ld_version_script_option='--version-script'
  elif test x$gcc_cv_ld != x; then
*************** $as_echo "$gcc_cv_ld_version_script" >&6
*** 28429,28435 ****
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking linker soname option" >&5
  $as_echo_n "checking linker soname option... " >&6; }
  gcc_cv_ld_soname=no
! if test $in_tree_ld = yes || test x"$gnu_ld" = xyes; then
    gcc_cv_ld_soname=yes
    ld_soname_option='-soname'
  elif test x$gcc_cv_ld != x; then
--- 28490,28496 ----
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking linker soname option" >&5
  $as_echo_n "checking linker soname option... " >&6; }
  gcc_cv_ld_soname=no
! if test $in_tree_ld = yes || test x"$gnu_ld_flag" = xyes; then
    gcc_cv_ld_soname=yes
    ld_soname_option='-soname'
  elif test x$gcc_cv_ld != x; then
*************** $as_echo_n "checking linker --demangle s
*** 28459,28465 ****
      if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 14 -o "$gcc_cv_gld_major_version" -gt 2; then \
        gcc_cv_ld_demangle=yes
      fi
!   elif test x$gcc_cv_ld != x -a x"$gnu_ld" = xyes; then
      # Check if the GNU linker supports --demangle option
      if $gcc_cv_ld --help 2>&1 | grep no-demangle > /dev/null; then
        gcc_cv_ld_demangle=yes
--- 28520,28526 ----
      if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 14 -o "$gcc_cv_gld_major_version" -gt 2; then \
        gcc_cv_ld_demangle=yes
      fi
!   elif test x$gcc_cv_ld != x -a x"$gnu_ld_flag" = xyes; then
      # Check if the GNU linker supports --demangle option
      if $gcc_cv_ld --help 2>&1 | grep no-demangle > /dev/null; then
        gcc_cv_ld_demangle=yes
*************** gcc_cv_ld_ctf=no
*** 33071,33077 ****
  # Check for Solaris ld 1.3315 introduced in Solaris 11.4 SRU 84.  ld -z ctf
  # already went in in SRU 81, but lacked GNU CTF to Solaris CTF conversion.
  if $gcc_cv_ld --help 2>&1 | grep -- '-z ctf' > /dev/null \
!   && test x$gnu_ld = xno && test "$ld_vers_minor" -ge 3315; then
    gcc_cv_ld_ctf=yes
  
  $as_echo "#define HAVE_LD_CTF 1" >>confdefs.h
--- 33132,33138 ----
  # Check for Solaris ld 1.3315 introduced in Solaris 11.4 SRU 84.  ld -z ctf
  # already went in in SRU 81, but lacked GNU CTF to Solaris CTF conversion.
  if $gcc_cv_ld --help 2>&1 | grep -- '-z ctf' > /dev/null \
!   && test x$gnu_ld_flag = xno && test "$ld_vers_minor" -ge 3315; then
    gcc_cv_ld_ctf=yes
  
  $as_echo "#define HAVE_LD_CTF 1" >>confdefs.h
*************** elif test x$gcc_cv_ld != x; then
*** 33354,33360 ****
        gcc_cv_ld_no_as_needed_option='--pop-state'
      fi
    fi
!   case "$target:$gnu_ld" in
      *-*-solaris2*:no)
        # Solaris 2 ld always supports -z ignore/-z record.  Prefer the native
        # forms.
--- 33415,33421 ----
        gcc_cv_ld_no_as_needed_option='--pop-state'
      fi
    fi
!   case "$target:$gnu_ld_flag" in
      *-*-solaris2*:no)
        # Solaris 2 ld always supports -z ignore/-z record.  Prefer the native
        # forms.
diff -Nrcpad gcc-16-20260201/gcc/configure.ac gcc-16-20260208/gcc/configure.ac
*** gcc-16-20260201/gcc/configure.ac	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/configure.ac	Sun Feb  8 22:32:07 2026
*************** AC_SUBST(GENINSRC)
*** 332,343 ****
  # Find default linker
  # -------------------
  
- # With GNU ld
- AC_ARG_WITH(gnu-ld,
- [AS_HELP_STRING([--with-gnu-ld], [arrange to work with GNU ld])],
- gnu_ld_flag="$with_gnu_ld",
- gnu_ld_flag=no)
- 
  case $target in
      *darwin*)
  	ld64_flag=yes # Darwin can only use a ld64-compatible linker.
--- 332,337 ----
*************** fi
*** 411,422 ****
  # Find default assembler
  # ----------------------
  
- # With GNU as
- AC_ARG_WITH(gnu-as,
- [AS_HELP_STRING([--with-gnu-as], [arrange to work with GNU as])],
- gas_flag="$with_gnu_as",
- gas_flag=no)
- 
  AC_ARG_WITH(as,
  [AS_HELP_STRING([--with-as], [arrange to use the specified as (full pathname)])],
  DEFAULT_ASSEMBLER="$with_as")
--- 405,410 ----
*************** if test $gcc_cv_header_inttypes_h = yes;
*** 1484,1489 ****
--- 1472,1492 ----
  	[Define if you have a working <inttypes.h> header file.])
  fi
  
+ # Use <afunix.h> only if it exists,
+ AC_MSG_CHECKING(for afunix.h)
+ AC_CACHE_VAL(gcc_cv_header_afunix_h,
+ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
+ [[#include <winsock2.h>
+ #include <afunix.h>]],
+   [[SOCKADDR_UN addr;]])],
+   [gcc_cv_header_afunix_h=yes],
+   [gcc_cv_header_afunix_h=no])])
+ AC_MSG_RESULT($gcc_cv_header_afunix_h)
+ if test $gcc_cv_header_afunix_h = yes; then
+   AC_DEFINE(HAVE_AFUNIX_H, 1,
+ 	[Define if you have a working <afunix.h> header file.])
+ fi
+ 
  # Look for the ZSTD package.
  ZSTD_INCLUDE=
  ZSTD_LIB=
*************** AC_DEFINE_UNQUOTED(HAVE_GNU_LD, $gnu_ld_
*** 2023,2043 ****
  gnu_as_bool=`if test x"$gas" = x"yes"; then echo 1; else echo 0; fi`
  AC_DEFINE_UNQUOTED(HAVE_GNU_AS, $gnu_as_bool, [Define to 1 if using GNU as.])
  
- case "$target:$gnu_ld" in
-   *-*-solaris2*:no)
-     # While Solaris ld has -m32/-m64 it usually determines the ELF class
-     # from the input objects.
-     ;;
-   i?86-*-solaris2*:yes | x86_64-*-solaris2*:yes)
-     ld_32_opt=-melf_i386_sol2
-     ld_64_opt=-melf_x86_64_sol2
-     ;;
-   i?86-*-*:yes | x86_64-*-*:yes)
-     ld_32_opt=-melf_i386
-     ld_64_opt=-melf_x86_64
-     ;;
- esac
- 
  count=a
  for f in $host_xm_file; do
  	count=${count}x
--- 2026,2031 ----
*************** else
*** 2738,2743 ****
--- 2726,2741 ----
          AC_PATH_PROG(gcc_cv_as, $AS_FOR_TARGET)
  fi])
  
+ # With GNU as
+ AC_ARG_WITH(gnu-as,
+ [AS_HELP_STRING([--with-gnu-as], [arrange to work with GNU as])],
+ gas_flag="$with_gnu_as",
+ [if $gcc_cv_as --version 2>/dev/null | grep GNU > /dev/null; then
+    gas_flag=yes
+  else
+    gas_flag=no
+ fi])
+ 
  ORIGINAL_AS_FOR_TARGET=$gcc_cv_as
  AC_SUBST(ORIGINAL_AS_FOR_TARGET)
  case "$ORIGINAL_AS_FOR_TARGET" in
*************** else
*** 2811,2816 ****
--- 2809,2824 ----
          AC_PATH_PROG(gcc_cv_ld, $LD_FOR_TARGET)
  fi])
  
+ # With GNU ld
+ AC_ARG_WITH(gnu-ld,
+ [AS_HELP_STRING([--with-gnu-ld], [arrange to work with GNU ld])],
+ gnu_ld_flag="$with_gnu_ld",
+ [if $gcc_cv_ld --version 2>/dev/null | grep GNU > /dev/null; then
+    gnu_ld_flag=yes
+  else
+    gnu_ld_flag=no
+  fi])
+ 
  ORIGINAL_PLUGIN_LD_FOR_TARGET=$gcc_cv_ld
  PLUGIN_LD_SUFFIX=`basename $gcc_cv_ld | sed -e "s,$target_alias-,,"`
  # if the PLUGIN_LD is set ld-new, just have it as ld
*************** AC_ARG_WITH(plugin-ld,
*** 2828,2833 ****
--- 2836,2856 ----
  AC_SUBST(ORIGINAL_PLUGIN_LD_FOR_TARGET)
  AC_DEFINE_UNQUOTED(PLUGIN_LD_SUFFIX, "$PLUGIN_LD_SUFFIX", [Specify plugin linker])
  
+ case "$target:$gnu_ld_flag" in
+   *-*-solaris2*:no)
+     # While Solaris ld has -m32/-m64 it usually determines the ELF class
+     # from the input objects.
+     ;;
+   i?86-*-solaris2*:yes | x86_64-*-solaris2*:yes)
+     ld_32_opt=-melf_i386_sol2
+     ld_64_opt=-melf_x86_64_sol2
+     ;;
+   i?86-*-*:yes | x86_64-*-*:yes)
+     ld_32_opt=-melf_i386
+     ld_64_opt=-melf_x86_64
+     ;;
+ esac
+ 
  # Check to see if we are using gold instead of ld
  AC_MSG_CHECKING(whether we are using gold)
  ld_is_gold=no
*************** elif test x$gcc_cv_ld != x; then
*** 4289,4295 ****
  	;;
        # HP-UX ld uses -a flags to select between shared and archive.
        *-*-hpux*)
! 	if test x"$gnu_ld" = xno; then
  	  gcc_cv_ld_static_dynamic=yes
  	  gcc_cv_ld_static_option="-aarchive_shared"
  	  gcc_cv_ld_dynamic_option="-adefault"
--- 4312,4318 ----
  	;;
        # HP-UX ld uses -a flags to select between shared and archive.
        *-*-hpux*)
! 	if test x"$gnu_ld_flag" = xno; then
  	  gcc_cv_ld_static_dynamic=yes
  	  gcc_cv_ld_static_option="-aarchive_shared"
  	  gcc_cv_ld_dynamic_option="-adefault"
*************** AC_MSG_RESULT($gcc_cv_ld_static_dynamic)
*** 4315,4321 ****
  AC_MSG_CHECKING(linker --version-script option)
  gcc_cv_ld_version_script=no
  ld_version_script_option=''
! if test $in_tree_ld = yes || test x"$gnu_ld" = xyes; then
    gcc_cv_ld_version_script=yes
    ld_version_script_option='--version-script'
  elif test x$gcc_cv_ld != x; then
--- 4338,4344 ----
  AC_MSG_CHECKING(linker --version-script option)
  gcc_cv_ld_version_script=no
  ld_version_script_option=''
! if test $in_tree_ld = yes || test x"$gnu_ld_flag" = xyes; then
    gcc_cv_ld_version_script=yes
    ld_version_script_option='--version-script'
  elif test x$gcc_cv_ld != x; then
*************** AC_SUBST(ld_version_script_option)
*** 4335,4341 ****
  
  AC_MSG_CHECKING(linker soname option)
  gcc_cv_ld_soname=no
! if test $in_tree_ld = yes || test x"$gnu_ld" = xyes; then
    gcc_cv_ld_soname=yes
    ld_soname_option='-soname'
  elif test x$gcc_cv_ld != x; then
--- 4358,4364 ----
  
  AC_MSG_CHECKING(linker soname option)
  gcc_cv_ld_soname=no
! if test $in_tree_ld = yes || test x"$gnu_ld_flag" = xyes; then
    gcc_cv_ld_soname=yes
    ld_soname_option='-soname'
  elif test x$gcc_cv_ld != x; then
*************** if test x"$demangler_in_ld" = xyes; then
*** 4363,4369 ****
      if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 14 -o "$gcc_cv_gld_major_version" -gt 2; then \
        gcc_cv_ld_demangle=yes
      fi
!   elif test x$gcc_cv_ld != x -a x"$gnu_ld" = xyes; then
      # Check if the GNU linker supports --demangle option
      if $gcc_cv_ld --help 2>&1 | grep no-demangle > /dev/null; then
        gcc_cv_ld_demangle=yes
--- 4386,4392 ----
      if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 14 -o "$gcc_cv_gld_major_version" -gt 2; then \
        gcc_cv_ld_demangle=yes
      fi
!   elif test x$gcc_cv_ld != x -a x"$gnu_ld_flag" = xyes; then
      # Check if the GNU linker supports --demangle option
      if $gcc_cv_ld --help 2>&1 | grep no-demangle > /dev/null; then
        gcc_cv_ld_demangle=yes
*************** gcc_cv_ld_ctf=no
*** 6358,6364 ****
  # Check for Solaris ld 1.3315 introduced in Solaris 11.4 SRU 84.  ld -z ctf
  # already went in in SRU 81, but lacked GNU CTF to Solaris CTF conversion.
  if $gcc_cv_ld --help 2>&1 | grep -- '-z ctf' > /dev/null \
!   && test x$gnu_ld = xno && test "$ld_vers_minor" -ge 3315; then
    gcc_cv_ld_ctf=yes
    AC_DEFINE(HAVE_LD_CTF, 1, [Define if your linker supports -z ctf.])
  fi
--- 6381,6387 ----
  # Check for Solaris ld 1.3315 introduced in Solaris 11.4 SRU 84.  ld -z ctf
  # already went in in SRU 81, but lacked GNU CTF to Solaris CTF conversion.
  if $gcc_cv_ld --help 2>&1 | grep -- '-z ctf' > /dev/null \
!   && test x$gnu_ld_flag = xno && test "$ld_vers_minor" -ge 3315; then
    gcc_cv_ld_ctf=yes
    AC_DEFINE(HAVE_LD_CTF, 1, [Define if your linker supports -z ctf.])
  fi
*************** elif test x$gcc_cv_ld != x; then
*** 6591,6597 ****
        gcc_cv_ld_no_as_needed_option='--pop-state'
      fi
    fi
!   case "$target:$gnu_ld" in
      *-*-solaris2*:no)
        # Solaris 2 ld always supports -z ignore/-z record.  Prefer the native
        # forms.
--- 6614,6620 ----
        gcc_cv_ld_no_as_needed_option='--pop-state'
      fi
    fi
!   case "$target:$gnu_ld_flag" in
      *-*-solaris2*:no)
        # Solaris 2 ld always supports -z ignore/-z record.  Prefer the native
        # forms.
diff -Nrcpad gcc-16-20260201/gcc/cp/ChangeLog gcc-16-20260208/gcc/cp/ChangeLog
*** gcc-16-20260201/gcc/cp/ChangeLog	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/cp/ChangeLog	Sun Feb  8 22:32:07 2026
***************
*** 1,3 ****
--- 1,124 ----
+ 2026-02-07  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/123659
+ 	* tree.cc (cp_walk_subtrees): Handle SPLICE_SCOPE.
+ 
+ 2026-02-07  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/123752
+ 	* pt.cc (tsubst_splice_expr): Return error_mark_node if
+ 	splice returned it.
+ 
+ 2026-02-06  Torbjörn SVENSSON  <torbjorn.svensson@foss.st.com>
+ 
+ 	PR middle-end/123892
+ 	* call.cc: Replace CONST_CAST with const_cast<>.
+ 	* parser.cc: Likewise.
+ 
+ 2026-02-06  Torbjörn SVENSSON  <torbjorn.svensson@foss.st.com>
+ 
+ 	PR middle-end/123892
+ 	* call.cc: Replace CONST_CAST_TREE with const_cast<tree>.
+ 	* constraint.cc: Likewise.
+ 	* cp-lang.cc: Likewise.
+ 	* cp-tree.h: Likewise.
+ 	* cp-objcp-common.cc: Likewise.
+ 	* decl.cc: Likewise.
+ 	* init.cc: Likewise.
+ 	* pt.cc: Likewise.
+ 	* reflect.cc: Likewise.
+ 	* tree.cc: Likewise.
+ 	* typeck.cc: Likewise.
+ 	* typeck2.cc: Likewise.
+ 
+ 2026-02-05  Michal Jires  <mjires@suse.cz>
+ 
+ 	PR testsuite/123559
+ 	* decl.cc (wrapup_namespace_globals): Check and suppress OPT_Wunused.
+ 	* semantics.cc (finish_asm_stmt): Suppress OPT_Wunused.
+ 
+ 2026-02-05  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/123934
+ 	* reflect.cc (type_of): For FUNCTION_DECLs, use static_fn_type.
+ 
+ 2026-02-05  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/122169
+ 	* pt.cc (tsubst_pack_index): Propagate cv-qualifiers of
+ 	PACK_INDEX_TYPE.
+ 
+ 2026-02-05  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Revert:
+ 	2026-02-05  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/101312
+ 	* cp-tree.h (cxx_build_lang_qualified_type): Declare.
+ 	* cp-objcp-common.h (LANG_HOOKS_COPY_LANG_QUALIFIERS): Remove.
+ 	(LANG_HOOKS_BUILD_LANG_QUALIFIED_TYPE): Define.
+ 	* tree.cc (cxx_build_lang_qualified_type): New function.
+ 
+ 2026-02-04  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/123913
+ 	PR c++/123964
+ 	* reflect.cc (eval_parameters_of): Fix up handling of function
+ 	types.
+ 
+ 2026-02-04  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/123611
+ 	* pt.cc (finish_expansion_stmt): Temporarily enable
+ 	in_immediate_context () for the iterating expansion stmt N
+ 	computation.
+ 
+ 2026-02-03  Marek Polacek  <polacek@redhat.com>
+ 
+ 	* constexpr.cc (is_std_allocator): Don't check for __new_allocator.
+ 	(is_std_allocator_allocate): Make static.
+ 	* cp-tree.h (is_std_allocator_allocate): Remove declaration.
+ 	* reflect.cc (check_out_of_consteval_use): Don't call
+ 	is_std_allocator_allocate.
+ 	(check_consteval_only_fn): Likewise.
+ 
+ 2026-02-03  Marek Polacek  <polacek@redhat.com>
+ 
+ 	* reflect.cc (compare_reflections): Handle comparing annotations
+ 	and types specially, use cp_tree_equal for the rest.
+ 	* tree.cc (cp_tree_equal) <case NAMESPACE_DECL>: New.
+ 
+ 2026-02-03  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/123920
+ 	* reflect.cc (eval_data_member_spec): Break out of the loop
+ 	if value is integer_zerop even in the field
+ 	&& TREE_CODE (field) != RANGE_EXPR case and use a single
+ 	test for integer_zerop (value) in the whole loop.
+ 
+ 2026-02-03  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/123918
+ 	* semantics.cc (cexpr_str::extract): Bypass cpp_translate_string
+ 	for len == 0.
+ 
+ 2026-02-02  Marek Polacek  <polacek@redhat.com>
+ 	    Boris Staletic  <boris.staletic@protonmail.com>
+ 
+ 	PR c++/123695
+ 	* reflect.cc (eval_object_of): Check type before TYPE_REF_P.
+ 
+ 2026-02-02  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/123614
+ 	* cvt.cc (cp_fold_convert): Avoid wrapping a REFLECT_EXPR in NOP_EXPR.
+ 
+ 2026-02-01  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	PR c++/121832
+ 	* parser.cc (cp_parser_explicit_template_declaration): Check for
+ 	null.
+ 
  2026-01-31  Nathaniel Shead  <nathanieloshead@gmail.com>
  
  	PR c++/123557
diff -Nrcpad gcc-16-20260201/gcc/cp/call.cc gcc-16-20260208/gcc/cp/call.cc
*** gcc-16-20260201/gcc/cp/call.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/cp/call.cc	Sun Feb  8 22:32:07 2026
*************** add_function_candidate (struct z_candida
*** 2671,2677 ****
        if (i == 0 && first_arg != NULL_TREE)
  	arg = first_arg;
        else
! 	arg = CONST_CAST_TREE (
  		(*args)[i + skip - (first_arg != NULL_TREE ? 1 : 0)]);
        argtype = lvalue_type (arg);
  
--- 2671,2677 ----
        if (i == 0 && first_arg != NULL_TREE)
  	arg = first_arg;
        else
! 	arg = const_cast<tree> (
  		(*args)[i + skip - (first_arg != NULL_TREE ? 1 : 0)]);
        argtype = lvalue_type (arg);
  
*************** name_as_c_string (tree name, tree type,
*** 11848,11854 ****
    else
      pretty_name = identifier_to_locale (IDENTIFIER_POINTER (name));
  
!   return CONST_CAST (char *, pretty_name);
  }
  
  /* If CANDIDATES contains exactly one candidate, return it, otherwise
--- 11848,11854 ----
    else
      pretty_name = identifier_to_locale (IDENTIFIER_POINTER (name));
  
!   return const_cast<char *> (pretty_name);
  }
  
  /* If CANDIDATES contains exactly one candidate, return it, otherwise
diff -Nrcpad gcc-16-20260201/gcc/cp/constexpr.cc gcc-16-20260208/gcc/cp/constexpr.cc
*** gcc-16-20260201/gcc/cp/constexpr.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/cp/constexpr.cc	Sun Feb  8 22:32:07 2026
*************** is_std_class (tree ctx, const char *name
*** 3247,3260 ****
  bool
  is_std_allocator (tree ctx)
  {
!   return (is_std_class (ctx, "allocator")
! 	  || (flag_reflection
! 	      && is_std_class (ctx, "__new_allocator")));
  }
  
  /* Return true if FNDECL is std::allocator<T>::{,de}allocate.  */
  
! bool
  is_std_allocator_allocate (tree fndecl)
  {
    tree name = DECL_NAME (fndecl);
--- 3247,3258 ----
  bool
  is_std_allocator (tree ctx)
  {
!   return is_std_class (ctx, "allocator");
  }
  
  /* Return true if FNDECL is std::allocator<T>::{,de}allocate.  */
  
! static bool
  is_std_allocator_allocate (tree fndecl)
  {
    tree name = DECL_NAME (fndecl);
diff -Nrcpad gcc-16-20260201/gcc/cp/constraint.cc gcc-16-20260208/gcc/cp/constraint.cc
*** gcc-16-20260201/gcc/cp/constraint.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/cp/constraint.cc	Sun Feb  8 22:32:07 2026
*************** get_constraints (const_tree t)
*** 1033,1039 ****
    gcc_assert (DECL_P (t));
    if (TREE_CODE (t) == TEMPLATE_DECL)
      t = DECL_TEMPLATE_RESULT (t);
!   tree* found = decl_constraints->get (CONST_CAST_TREE (t));
    if (found)
      return *found;
    else
--- 1033,1039 ----
    gcc_assert (DECL_P (t));
    if (TREE_CODE (t) == TEMPLATE_DECL)
      t = DECL_TEMPLATE_RESULT (t);
!   tree* found = decl_constraints->get (const_cast<tree> (t));
    if (found)
      return *found;
    else
diff -Nrcpad gcc-16-20260201/gcc/cp/cp-lang.cc gcc-16-20260208/gcc/cp/cp-lang.cc
*** gcc-16-20260201/gcc/cp/cp-lang.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/cp/cp-lang.cc	Sun Feb  8 22:32:07 2026
*************** template_arg_needs_folding (const_tree t
*** 186,192 ****
  static tree
  fold_cplus_constants (const_tree c)
  {
!   tree folded_elems, elems = CONST_CAST_TREE (c);
    int vec_len, i;
  
    if (elems == NULL_TREE || elems == error_mark_node)
--- 186,192 ----
  static tree
  fold_cplus_constants (const_tree c)
  {
!   tree folded_elems, elems = const_cast<tree> (c);
    int vec_len, i;
  
    if (elems == NULL_TREE || elems == error_mark_node)
diff -Nrcpad gcc-16-20260201/gcc/cp/cp-objcp-common.cc gcc-16-20260208/gcc/cp/cp-objcp-common.cc
*** gcc-16-20260201/gcc/cp/cp-objcp-common.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/cp/cp-objcp-common.cc	Sun Feb  8 22:32:07 2026
*************** cp_get_debug_type (const_tree type)
*** 289,295 ****
       the debug info depend on the collection points.  */
    if (dtype)
      {
!       tree ktype = CONST_CAST_TREE (type);
        if (tree *slot = hash_map_safe_get (debug_type_map, ktype))
  	return *slot;
        hash_map_safe_put<hm_ggc> (debug_type_map, ktype, dtype);
--- 289,295 ----
       the debug info depend on the collection points.  */
    if (dtype)
      {
!       tree ktype = const_cast<tree> (type);
        if (tree *slot = hash_map_safe_get (debug_type_map, ktype))
  	return *slot;
        hash_map_safe_put<hm_ggc> (debug_type_map, ktype, dtype);
diff -Nrcpad gcc-16-20260201/gcc/cp/cp-objcp-common.h gcc-16-20260208/gcc/cp/cp-objcp-common.h
*** gcc-16-20260201/gcc/cp/cp-objcp-common.h	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/cp/cp-objcp-common.h	Sun Feb  8 22:32:07 2026
*************** extern tree cxx_simulate_record_decl (lo
*** 112,119 ****
    cxx_simulate_builtin_function_decl
  #undef	LANG_HOOKS_TYPE_HASH_EQ
  #define LANG_HOOKS_TYPE_HASH_EQ	cxx_type_hash_eq
! #undef	LANG_HOOKS_BUILD_LANG_QUALIFIED_TYPE
! #define LANG_HOOKS_BUILD_LANG_QUALIFIED_TYPE	cxx_build_lang_qualified_type
  #undef LANG_HOOKS_MISSING_NORETURN_OK_P
  #define LANG_HOOKS_MISSING_NORETURN_OK_P cp_missing_noreturn_ok_p
  #undef LANG_HOOKS_BLOCK_MAY_FALLTHRU
--- 112,119 ----
    cxx_simulate_builtin_function_decl
  #undef	LANG_HOOKS_TYPE_HASH_EQ
  #define LANG_HOOKS_TYPE_HASH_EQ	cxx_type_hash_eq
! #undef	LANG_HOOKS_COPY_LANG_QUALIFIERS
! #define LANG_HOOKS_COPY_LANG_QUALIFIERS	cxx_copy_lang_qualifiers
  #undef LANG_HOOKS_MISSING_NORETURN_OK_P
  #define LANG_HOOKS_MISSING_NORETURN_OK_P cp_missing_noreturn_ok_p
  #undef LANG_HOOKS_BLOCK_MAY_FALLTHRU
diff -Nrcpad gcc-16-20260201/gcc/cp/cp-tree.h gcc-16-20260208/gcc/cp/cp-tree.h
*** gcc-16-20260201/gcc/cp/cp-tree.h	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/cp/cp-tree.h	Sun Feb  8 22:32:07 2026
*************** get_vec_init_expr (tree t)
*** 5418,5437 ****
     DECL_INITIAL (for a PARM_DECL) or as the TREE_TYPE (for a
     TYPE_DECL).
  
!    FIXME: CONST_CAST_TREE is a hack that hopefully will go away after
     tree is converted to C++ class hiearchy.  */
  #define DECL_TEMPLATE_PARMS(NODE)       \
!    ((struct tree_template_decl *)CONST_CAST_TREE (TEMPLATE_DECL_CHECK (NODE)))->arguments
  #define DECL_INNERMOST_TEMPLATE_PARMS(NODE) \
     INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (NODE))
  #define DECL_NTPARMS(NODE) \
     TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (NODE))
  /* For function, method, class-data templates.
  
!    FIXME: CONST_CAST_TREE is a hack that hopefully will go away after
     tree is converted to C++ class hiearchy.  */
  #define DECL_TEMPLATE_RESULT(NODE)      \
!    ((struct tree_template_decl *)CONST_CAST_TREE(TEMPLATE_DECL_CHECK (NODE)))->result
  /* For a forward-declared function template at namespace scope, or for any
     function template in an exporting module, DECL_TEMPLATE_INSTANTIATIONS lists
     all instantiations and specializations of the function so that
--- 5418,5439 ----
     DECL_INITIAL (for a PARM_DECL) or as the TREE_TYPE (for a
     TYPE_DECL).
  
!    FIXME: const_cast<tree> is a hack that hopefully will go away after
     tree is converted to C++ class hiearchy.  */
  #define DECL_TEMPLATE_PARMS(NODE)       \
!    ((struct tree_template_decl *)const_cast<tree> (TEMPLATE_DECL_CHECK \
! 						   (NODE)))->arguments
  #define DECL_INNERMOST_TEMPLATE_PARMS(NODE) \
     INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (NODE))
  #define DECL_NTPARMS(NODE) \
     TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (NODE))
  /* For function, method, class-data templates.
  
!    FIXME: const_cast<tree> is a hack that hopefully will go away after
     tree is converted to C++ class hiearchy.  */
  #define DECL_TEMPLATE_RESULT(NODE)      \
!    ((struct tree_template_decl *)const_cast<tree> (TEMPLATE_DECL_CHECK \
! 						   (NODE)))->result
  /* For a forward-declared function template at namespace scope, or for any
     function template in an exporting module, DECL_TEMPLATE_INSTANTIATIONS lists
     all instantiations and specializations of the function so that
*************** extern tmpl_spec_kind current_tmpl_spec_
*** 7541,7547 ****
  extern tree cxx_builtin_function		(tree decl);
  extern tree cxx_builtin_function_ext_scope	(tree decl);
  extern tree cxx_simulate_builtin_function_decl	(tree);
- extern tree cxx_build_lang_qualified_type	(tree, tree, int);
  extern tree check_elaborated_type_specifier	(enum tag_types, tree, bool);
  extern void warn_extern_redeclared_static	(tree, tree);
  extern tree cxx_comdat_group			(tree);
--- 7543,7548 ----
*************** loc_or_input_loc (location_t loc)
*** 8943,8949 ****
  inline location_t
  cp_expr_location (const_tree t_)
  {
!   tree t = CONST_CAST_TREE (t_);
    if (t == NULL_TREE)
      return UNKNOWN_LOCATION;
    switch (TREE_CODE (t))
--- 8944,8950 ----
  inline location_t
  cp_expr_location (const_tree t_)
  {
!   tree t = const_cast<tree> (t_);
    if (t == NULL_TREE)
      return UNKNOWN_LOCATION;
    switch (TREE_CODE (t))
*************** extern bool is_nondependent_static_init_
*** 9259,9265 ****
  extern bool is_static_init_expression    (tree);
  extern bool is_std_class (tree, const char *);
  extern bool is_std_allocator (tree);
- extern bool is_std_allocator_allocate (tree);
  extern bool potential_rvalue_constant_expression (tree);
  extern bool require_potential_constant_expression (tree);
  extern bool require_constant_expression (tree);
--- 9260,9265 ----
diff -Nrcpad gcc-16-20260201/gcc/cp/cvt.cc gcc-16-20260208/gcc/cp/cvt.cc
*** gcc-16-20260201/gcc/cp/cvt.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/cp/cvt.cc	Sun Feb  8 22:32:07 2026
*************** cp_fold_convert (tree type, tree expr)
*** 622,632 ****
    tree conv;
    if (TREE_TYPE (expr) == type)
      conv = expr;
!   else if (TREE_CODE (expr) == PTRMEM_CST
! 	   && same_type_p (TYPE_PTRMEM_CLASS_TYPE (type),
! 			   PTRMEM_CST_CLASS (expr)))
      {
!       /* Avoid wrapping a PTRMEM_CST in NOP_EXPR.  */
        conv = copy_node (expr);
        TREE_TYPE (conv) = type;
      }
--- 622,633 ----
    tree conv;
    if (TREE_TYPE (expr) == type)
      conv = expr;
!   else if ((TREE_CODE (expr) == PTRMEM_CST
! 	    && same_type_p (TYPE_PTRMEM_CLASS_TYPE (type),
! 			    PTRMEM_CST_CLASS (expr)))
! 	    || (REFLECT_EXPR_P (expr) && REFLECTION_TYPE_P (type)))
      {
!       /* Avoid wrapping a PTRMEM_CST/REFLECT_EXPR in NOP_EXPR.  */
        conv = copy_node (expr);
        TREE_TYPE (conv) = type;
      }
diff -Nrcpad gcc-16-20260201/gcc/cp/decl.cc gcc-16-20260208/gcc/cp/decl.cc
*** gcc-16-20260201/gcc/cp/decl.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/cp/decl.cc	Sun Feb  8 22:32:07 2026
*************** automatic_var_with_nontrivial_dtor_p (co
*** 641,647 ****
      return false;
  
    return (VAR_P (t)
! 	  && decl_storage_duration (CONST_CAST_TREE (t)) == dk_auto
  	  && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (t)));
  }
  
--- 641,647 ----
      return false;
  
    return (VAR_P (t)
! 	  && decl_storage_duration (const_cast<tree> (t)) == dk_auto
  	  && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (t)));
  }
  
*************** wrapup_namespace_globals ()
*** 1015,1024 ****
  	      && !TREE_PUBLIC (decl)
  	      && !DECL_ARTIFICIAL (decl)
  	      && !DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl)
! 	      && !warning_suppressed_p (decl, OPT_Wunused_function))
! 	    warning_at (DECL_SOURCE_LOCATION (decl),
! 			OPT_Wunused_function,
! 			"%qF declared %<static%> but never defined", decl);
  
  	  if (VAR_P (decl)
  	      && DECL_EXTERNAL (decl)
--- 1015,1025 ----
  	      && !TREE_PUBLIC (decl)
  	      && !DECL_ARTIFICIAL (decl)
  	      && !DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl)
! 	      && !warning_suppressed_p (decl, OPT_Wunused)
! 	      && warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wunused_function,
! 			     "%qF declared %<static%> but never defined",
! 			     decl))
! 		suppress_warning (decl, OPT_Wunused);
  
  	  if (VAR_P (decl)
  	      && DECL_EXTERNAL (decl)
diff -Nrcpad gcc-16-20260201/gcc/cp/init.cc gcc-16-20260208/gcc/cp/init.cc
*** gcc-16-20260201/gcc/cp/init.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/cp/init.cc	Sun Feb  8 22:32:07 2026
*************** build_new_1 (vec<tree, va_gc> **placemen
*** 3705,3711 ****
  	    {
  	      tree dom
  		= compute_array_index_type (NULL_TREE,
! 					    CONST_CAST_TREE (cst_outer_nelts),
  					    complain);
  	      ttype = build_cplus_array_type (type, dom);
  	      tree ptype = build_pointer_type (ttype);
--- 3705,3711 ----
  	    {
  	      tree dom
  		= compute_array_index_type (NULL_TREE,
! 					    const_cast<tree> (cst_outer_nelts),
  					    complain);
  	      ttype = build_cplus_array_type (type, dom);
  	      tree ptype = build_pointer_type (ttype);
diff -Nrcpad gcc-16-20260201/gcc/cp/module.cc gcc-16-20260208/gcc/cp/module.cc
*** gcc-16-20260201/gcc/cp/module.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/cp/module.cc	Sun Feb  8 22:32:07 2026
*************** preprocess_module (module_state *module,
*** 23235,23243 ****
  {
    if (!is_import)
      {
!       if (module->loc)
! 	/* It's already been mentioned, so ignore its module-ness.  */
! 	is_import = true;
        else
  	{
  	  /* Record it is the module.  */
--- 23235,23252 ----
  {
    if (!is_import)
      {
!       if (in_purview || module->loc)
! 	{
! 	  /* We've already seen a module declaration.  If only preprocessing
! 	     then we won't complain in declare_module, so complain here.  */
! 	  if (flag_preprocess_only)
! 	    error_at (from_loc,
! 		      in_purview
! 		      ? G_("module already declared")
! 		      : G_("module already imported"));
! 	  /* Always pretend this was an import to aid error recovery.  */
! 	  is_import = true;
! 	}
        else
  	{
  	  /* Record it is the module.  */
diff -Nrcpad gcc-16-20260201/gcc/cp/parser.cc gcc-16-20260208/gcc/cp/parser.cc
*** gcc-16-20260201/gcc/cp/parser.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/cp/parser.cc	Sun Feb  8 22:32:07 2026
*************** cp_parser_string_literal_common (cp_pars
*** 5024,5030 ****
        (parse_in, strs, count, &istr, type))
      {
        value = build_string (istr.len, (const char *)istr.text);
!       free (CONST_CAST (unsigned char *, istr.text));
        if (count > 1)
  	{
  	  location_t *locs = (location_t *)obstack_finish (&loc_ob);
--- 5024,5030 ----
        (parse_in, strs, count, &istr, type))
      {
        value = build_string (istr.len, (const char *)istr.text);
!       free (const_cast<unsigned char *> (istr.text));
        if (count > 1)
  	{
  	  location_t *locs = (location_t *)obstack_finish (&loc_ob);
*************** cp_parser_next_tokens_can_start_splice_s
*** 6125,6135 ****
        splice-specifier < template-argument-list[opt] >
  
     TEMPLATE_P is true if we've parsed the leading template keyword.
     TARGS_P is set to true if there is a splice-specialization-specifier.  */
  
  static cp_expr
  cp_parser_splice_specifier (cp_parser *parser, bool template_p = false,
! 			    bool *targs_p = nullptr)
  {
    /* Get the location of the '[:'.  */
    location_t start_loc = cp_lexer_peek_token (parser->lexer)->location;
--- 6125,6137 ----
        splice-specifier < template-argument-list[opt] >
  
     TEMPLATE_P is true if we've parsed the leading template keyword.
+    TYPENAME_P is true if we've parsed the leading typename keyword or are
+    in a type-only context.
     TARGS_P is set to true if there is a splice-specialization-specifier.  */
  
  static cp_expr
  cp_parser_splice_specifier (cp_parser *parser, bool template_p = false,
! 			    bool typename_p = false, bool *targs_p = nullptr)
  {
    /* Get the location of the '[:'.  */
    location_t start_loc = cp_lexer_peek_token (parser->lexer)->location;
*************** cp_parser_splice_specifier (cp_parser *p
*** 6169,6176 ****
    /* Get the reflected operand.  */
    expr = splice (expr);
  
!   /* If the next token is a '<', it's a splice-specialization-specifier.  */
!   if (cp_lexer_next_token_is (parser->lexer, CPP_LESS))
      {
        /* For member access splice-specialization-specifier, try to wrap
  	 non-dependent splice for function template into a BASELINK so
--- 6171,6188 ----
    /* Get the reflected operand.  */
    expr = splice (expr);
  
!   /* If the next token is a <, it could be a splice-specialization-specifier.
!      But we need to handle "[:r:] < 42" where the < doesn't start a template
!      argument list.  [temp.names]/3: A < is interpreted as the delimiter of
!      a template-argument-list if either
!      -- it follows a splice-specifier that either
!        -- appears in a type-only context or
!        -- is preceded by template or typename.  */
!   if (cp_parser_nth_token_starts_template_argument_list_p (parser, 1)
!       /* As a courtesy to the user, if there is a < after a template
! 	 name, parse the construct as an s-s-s and warn about the missing
! 	 'template'; it can't be anything else.  */
!       && (template_p || typename_p || TREE_CODE (expr) == TEMPLATE_DECL))
      {
        /* For member access splice-specialization-specifier, try to wrap
  	 non-dependent splice for function template into a BASELINK so
*************** cp_parser_splice_type_specifier (cp_pars
*** 6222,6228 ****
    if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME))
      cp_lexer_consume_token (parser->lexer);
  
!   cp_expr expr = cp_parser_splice_specifier (parser);
    const location_t loc = (expr != error_mark_node
  			  ? expr.get_location () : input_location);
    tree type = expr.get_value ();
--- 6234,6241 ----
    if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME))
      cp_lexer_consume_token (parser->lexer);
  
!   cp_expr expr = cp_parser_splice_specifier (parser, /*template_p=*/false,
! 					     /*typename_p=*/true);
    const location_t loc = (expr != error_mark_node
  			  ? expr.get_location () : input_location);
    tree type = expr.get_value ();
*************** cp_parser_splice_expression (cp_parser *
*** 6271,6277 ****
    parser->object_scope = NULL_TREE;
    parser->qualifying_scope = NULL_TREE;
  
!   cp_expr expr = cp_parser_splice_specifier (parser, template_p, &targs_p);
  
    /* And don't leave the scopes set, either.  */
    parser->scope = NULL_TREE;
--- 6284,6291 ----
    parser->object_scope = NULL_TREE;
    parser->qualifying_scope = NULL_TREE;
  
!   cp_expr expr = cp_parser_splice_specifier (parser, template_p,
! 					     /*typename_p=*/false, &targs_p);
  
    /* And don't leave the scopes set, either.  */
    parser->scope = NULL_TREE;
*************** cp_parser_splice_expression (cp_parser *
*** 6351,6364 ****
        return error_mark_node;
      }
  
-   if (parser->in_template_argument_list_p
-       && !parser->greater_than_is_operator_p)
-     {
-       error_at (loc, "unparenthesized splice expression cannot be used as "
- 		"a template argument");
-       return error_mark_node;
-     }
- 
    /* Make sure this splice-expression produces an expression.  */
    if (!check_splice_expr (loc, expr.get_start (), t, address_p,
  			  member_access_p, /*complain=*/true))
--- 6365,6370 ----
*************** cp_parser_splice_scope_specifier (cp_par
*** 6432,6438 ****
  				  bool template_p)
  {
    bool targs_p = false;
!   cp_expr scope = cp_parser_splice_specifier (parser, template_p, &targs_p);
    const location_t loc = scope.get_location ();
    if (TREE_CODE (scope) == TYPE_DECL)
      scope = TREE_TYPE (scope);
--- 6438,6445 ----
  				  bool template_p)
  {
    bool targs_p = false;
!   cp_expr scope = cp_parser_splice_specifier (parser, template_p, typename_p,
! 					      &targs_p);
    const location_t loc = scope.get_location ();
    if (TREE_CODE (scope) == TYPE_DECL)
      scope = TREE_TYPE (scope);
*************** cp_parser_splice_scope_specifier (cp_par
*** 6476,6503 ****
    return scope;
  }
  
! /* We know the next token is '[:' (optionally preceded by a template or
!    typename) and we are wondering if a '::' follows right after the
!    closing ':]', or after the possible '<...>' after the ':]'.  Return
!    true if yes, false otherwise.  */
  
  static bool
! cp_parser_splice_spec_is_nns_p (cp_parser *parser)
  {
-   /* ??? It'd be nice to use saved_token_sentinel, but its rollback
-      uses cp_lexer_previous_token, but we may be the first token in the
-      file so there are no previous tokens.  Sigh.  */
-   cp_lexer_save_tokens (parser->lexer);
- 
    if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME)
        || cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
      cp_lexer_consume_token (parser->lexer);
  
!   bool ok = false;
    size_t n = cp_parser_skip_balanced_tokens (parser, 1);
    if (n != 1)
      {
-       ok = true;
        /* Consume tokens up to the ':]' (including).  */
        for (n = n - 1; n; --n)
  	cp_lexer_consume_token (parser->lexer);
--- 6483,6505 ----
    return scope;
  }
  
! /* Skip the whole splice-expression: the optional typename/template,
!    [:...:], and also the <...>, if present.  Return true if we skipped
!    successfully.  */
  
  static bool
! cp_parser_skip_entire_splice_expr (cp_parser *parser)
  {
    if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME)
        || cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
      cp_lexer_consume_token (parser->lexer);
  
!   if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_SPLICE))
!     return false;
! 
    size_t n = cp_parser_skip_balanced_tokens (parser, 1);
    if (n != 1)
      {
        /* Consume tokens up to the ':]' (including).  */
        for (n = n - 1; n; --n)
  	cp_lexer_consume_token (parser->lexer);
*************** cp_parser_splice_spec_is_nns_p (cp_parse
*** 6505,6515 ****
        /* Consume the whole '<....>', if present.  */
        if (cp_lexer_next_token_is (parser->lexer, CPP_LESS)
  	  && !cp_parser_skip_entire_template_parameter_list (parser))
! 	ok = false;
  
!       ok = ok && cp_lexer_next_token_is (parser->lexer, CPP_SCOPE);
      }
  
    /* Roll back the tokens we skipped.  */
    cp_lexer_rollback_tokens (parser->lexer);
  
--- 6507,6536 ----
        /* Consume the whole '<....>', if present.  */
        if (cp_lexer_next_token_is (parser->lexer, CPP_LESS)
  	  && !cp_parser_skip_entire_template_parameter_list (parser))
! 	return false;
  
!       return true;
      }
  
+   return false;
+ }
+ 
+ /* We know the next token is '[:' (optionally preceded by a template or
+    typename) and we are wondering if a '::' follows right after the
+    closing ':]', or after the possible '<...>' after the ':]'.  Return
+    true if yes, false otherwise.  */
+ 
+ static bool
+ cp_parser_splice_spec_is_nns_p (cp_parser *parser)
+ {
+   /* ??? It'd be nice to use saved_token_sentinel, but its rollback
+      uses cp_lexer_previous_token, but we may be the first token in the
+      file so there are no previous tokens.  Sigh.  */
+   cp_lexer_save_tokens (parser->lexer);
+ 
+   const bool ok = (cp_parser_skip_entire_splice_expr (parser)
+ 		   && cp_lexer_next_token_is (parser->lexer, CPP_SCOPE));
+ 
    /* Roll back the tokens we skipped.  */
    cp_lexer_rollback_tokens (parser->lexer);
  
*************** cp_parser_template_id (cp_parser *parser
*** 21270,21275 ****
--- 21291,21297 ----
  	    error_at (token->location, "%qT is not a template", templ);
  	  else
  	    error_at (token->location, "%qE is not a template", templ);
+ 	  pop_deferring_access_checks ();
  	  return error_mark_node;
  	}
        else
*************** cp_parser_template_argument (cp_parser*
*** 21950,21958 ****
--- 21972,21998 ----
  	  && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
  	return cp_parser_braced_list (parser);
  
+       /* [temp.names]/6: The constant-expression of a template-argument
+ 	 shall not be an unparenthesized splice-expression.  */
+       cp_token *next = nullptr;
+       if (flag_reflection)
+ 	{
+ 	  saved_token_sentinel toks (parser->lexer, STS_ROLLBACK);
+ 	  if (cp_parser_skip_entire_splice_expr (parser))
+ 	    next = cp_lexer_peek_token (parser->lexer);
+ 	}
+ 
        /* With C++17 generalized non-type template arguments we need to handle
  	 lvalue constant expressions, too.  */
        argument = cp_parser_assignment_expression (parser);
+       if (UNLIKELY (cp_lexer_peek_token (parser->lexer) == next)
+ 	  && argument != error_mark_node)
+ 	{
+ 	  loc = cp_lexer_peek_token (parser->lexer)->location;
+ 	  error_at (loc, "unparenthesized splice expression cannot be used "
+ 		    "as a template argument");
+ 	  return error_mark_node;
+ 	}
      }
  
    if (!maybe_type_id)
diff -Nrcpad gcc-16-20260201/gcc/cp/pt.cc gcc-16-20260208/gcc/cp/pt.cc
*** gcc-16-20260201/gcc/cp/pt.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/cp/pt.cc	Sun Feb  8 22:32:07 2026
*************** alias_template_specialization_p (const_t
*** 6662,6668 ****
      {
        if (tree tinfo = TYPE_ALIAS_TEMPLATE_INFO (t))
  	if (PRIMARY_TEMPLATE_P (TI_TEMPLATE (tinfo)))
! 	  return CONST_CAST_TREE (t);
        if (transparent_typedefs && !dependent_opaque_alias_p (t))
  	return alias_template_specialization_p (DECL_ORIGINAL_TYPE
  						(TYPE_NAME (t)),
--- 6662,6668 ----
      {
        if (tree tinfo = TYPE_ALIAS_TEMPLATE_INFO (t))
  	if (PRIMARY_TEMPLATE_P (TI_TEMPLATE (tinfo)))
! 	  return const_cast<tree> (t);
        if (transparent_typedefs && !dependent_opaque_alias_p (t))
  	return alias_template_specialization_p (DECL_ORIGINAL_TYPE
  						(TYPE_NAME (t)),
*************** complex_alias_template_p (const_tree tmp
*** 6760,6766 ****
      return false;
  
    /* A renaming alias isn't complex.  */
!   if (get_underlying_template (CONST_CAST_TREE (tmpl)) != tmpl)
      return false;
  
    /* Any other constrained alias is complex.  */
--- 6760,6766 ----
      return false;
  
    /* A renaming alias isn't complex.  */
!   if (get_underlying_template (const_cast<tree> (tmpl)) != tmpl)
      return false;
  
    /* Any other constrained alias is complex.  */
*************** dependent_alias_template_spec_p (const_t
*** 6843,6849 ****
  	  if (!seen)
  	    {
  	      if (any_dependent_template_arguments_p (args))
! 		return CONST_CAST_TREE (t);
  	    }
  	  else
  	    {
--- 6843,6849 ----
  	  if (!seen)
  	    {
  	      if (any_dependent_template_arguments_p (args))
! 		return const_cast<tree> (t);
  	    }
  	  else
  	    {
*************** dependent_alias_template_spec_p (const_t
*** 6851,6857 ****
  	      for (int i = 0, len = TREE_VEC_LENGTH (args); i < len; ++i)
  		if (TREE_VEC_ELT (seen, i) != boolean_true_node
  		    && dependent_template_arg_p (TREE_VEC_ELT (args, i)))
! 		  return CONST_CAST_TREE (t);
  	    }
  
  	  return NULL_TREE;
--- 6851,6857 ----
  	      for (int i = 0, len = TREE_VEC_LENGTH (args); i < len; ++i)
  		if (TREE_VEC_ELT (seen, i) != boolean_true_node
  		    && dependent_template_arg_p (TREE_VEC_ELT (args, i)))
! 		  return const_cast<tree> (t);
  	    }
  
  	  return NULL_TREE;
*************** tsubst_pack_index (tree t, tree args, ts
*** 14368,14377 ****
    tree index = tsubst_expr (PACK_INDEX_INDEX (t), args, complain, in_decl);
    const bool parenthesized_p = (TREE_CODE (t) == PACK_INDEX_EXPR
  				&& PACK_INDEX_PARENTHESIZED_P (t));
    if (!value_dependent_expression_p (index) && TREE_CODE (pack) == TREE_VEC)
!     return pack_index_element (index, pack, parenthesized_p, complain);
    else
!     return make_pack_index (pack, index);
  }
  
  /* Make an argument pack out of the TREE_VEC VEC.  */
--- 14368,14382 ----
    tree index = tsubst_expr (PACK_INDEX_INDEX (t), args, complain, in_decl);
    const bool parenthesized_p = (TREE_CODE (t) == PACK_INDEX_EXPR
  				&& PACK_INDEX_PARENTHESIZED_P (t));
+   tree r;
    if (!value_dependent_expression_p (index) && TREE_CODE (pack) == TREE_VEC)
!     r = pack_index_element (index, pack, parenthesized_p, complain);
    else
!     r = make_pack_index (pack, index);
!   if (TREE_CODE (t) == PACK_INDEX_TYPE)
!     r = cp_build_qualified_type (r, cp_type_quals (t) | cp_type_quals (r),
! 				 complain | tf_ignore_bad_quals);
!   return r;
  }
  
  /* Make an argument pack out of the TREE_VEC VEC.  */
*************** tsubst_splice_expr (tree t, tree args, t
*** 16748,16753 ****
--- 16753,16760 ----
    if (op == error_mark_node)
      return error_mark_node;
    op = splice (op);
+   if (op == error_mark_node)
+     return error_mark_node;
    if (dependent_splice_p (op))
      {
        if (SPLICE_EXPR_EXPRESSION_P (t))
*************** most_general_template (const_tree decl)
*** 27460,27466 ****
        decl = DECL_TI_TEMPLATE (decl);
      }
  
!   return CONST_CAST_TREE (decl);
  }
  
  /* Return the most specialized of the template partial specializations
--- 27467,27473 ----
        decl = DECL_TI_TEMPLATE (decl);
      }
  
!   return const_cast<tree> (decl);
  }
  
  /* Return the most specialized of the template partial specializations
*************** any_dependent_template_arguments_p (cons
*** 30429,30435 ****
    for (int i = 0, depth = TMPL_ARGS_DEPTH (args); i < depth; ++i)
      {
        const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
!       for (tree arg : tree_vec_range (CONST_CAST_TREE (level)))
  	if (dependent_template_arg_p (arg))
  	  return true;
      }
--- 30436,30442 ----
    for (int i = 0, depth = TMPL_ARGS_DEPTH (args); i < depth; ++i)
      {
        const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
!       for (tree arg : tree_vec_range (const_cast<tree> (level)))
  	if (dependent_template_arg_p (arg))
  	  return true;
      }
*************** finish_expansion_stmt (tree expansion_st
*** 33191,33196 ****
--- 33198,33207 ----
        begin = cp_build_range_for_decls (loc, expansion_init, &end, true);
        if (!error_operand_p (begin) && !error_operand_p (end))
  	{
+ 	  /* In the standard this is all evaluated inside of a consteval
+ 	     lambda.  So, force in_immediate_context () around this.  */
+ 	  in_consteval_if_p_temp_override icip;
+ 	  in_consteval_if_p = true;
  	  tree i
  	    = build_target_expr_with_type (begin,
  					   cv_unqualified (TREE_TYPE (begin)),
diff -Nrcpad gcc-16-20260201/gcc/cp/reflect.cc gcc-16-20260208/gcc/cp/reflect.cc
*** gcc-16-20260201/gcc/cp/reflect.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/cp/reflect.cc	Sun Feb  8 22:32:07 2026
*************** static tree
*** 1576,1582 ****
  eval_has_static_storage_duration (const_tree r, reflect_kind kind)
  {
    if (eval_is_variable (r, kind) == boolean_true_node
!       && decl_storage_duration (CONST_CAST_TREE (r)) == dk_static)
      return boolean_true_node;
    /* This includes DECL_NTTP_OBJECT_P objects.  */
    else if (eval_is_object (kind) == boolean_true_node)
--- 1576,1582 ----
  eval_has_static_storage_duration (const_tree r, reflect_kind kind)
  {
    if (eval_is_variable (r, kind) == boolean_true_node
!       && decl_storage_duration (const_cast<tree> (r)) == dk_static)
      return boolean_true_node;
    /* This includes DECL_NTTP_OBJECT_P objects.  */
    else if (eval_is_object (kind) == boolean_true_node)
*************** static tree
*** 1593,1599 ****
  eval_has_thread_storage_duration (const_tree r, reflect_kind kind)
  {
    if (eval_is_variable (r, kind) == boolean_true_node
!       && decl_storage_duration (CONST_CAST_TREE (r)) == dk_thread)
      return boolean_true_node;
    else
      return boolean_false_node;
--- 1593,1599 ----
  eval_has_thread_storage_duration (const_tree r, reflect_kind kind)
  {
    if (eval_is_variable (r, kind) == boolean_true_node
!       && decl_storage_duration (const_cast<tree> (r)) == dk_thread)
      return boolean_true_node;
    else
      return boolean_false_node;
*************** static tree
*** 1607,1613 ****
  eval_has_automatic_storage_duration (const_tree r, reflect_kind kind)
  {
    if (eval_is_variable (r, kind) == boolean_true_node
!       && decl_storage_duration (CONST_CAST_TREE (r)) == dk_auto)
      return boolean_true_node;
    else
      return boolean_false_node;
--- 1607,1613 ----
  eval_has_automatic_storage_duration (const_tree r, reflect_kind kind)
  {
    if (eval_is_variable (r, kind) == boolean_true_node
!       && decl_storage_duration (const_cast<tree> (r)) == dk_auto)
      return boolean_true_node;
    else
      return boolean_false_node;
*************** type_of (tree r, reflect_kind kind)
*** 2465,2470 ****
--- 2465,2472 ----
      }
    else if (TREE_CODE (r) == FIELD_DECL && DECL_BIT_FIELD_TYPE (r))
      r = DECL_BIT_FIELD_TYPE (r);
+   else if (TREE_CODE (r) == FUNCTION_DECL)
+     r = static_fn_type (r);
    else
      r = TREE_TYPE (r);
    return strip_typedefs (r);
*************** eval_object_of (location_t loc, const co
*** 2602,2608 ****
  		tree *jump_target, tree fun)
  {
    tree orig = r;
!   if (TYPE_REF_P (TREE_TYPE (r)))
      r = cxx_eval_constant_expression (ctx, r, vc_prvalue, non_constant_p,
  				      overflow_p, jump_target);
    r = maybe_get_reference_referent (r);
--- 2604,2611 ----
  		tree *jump_target, tree fun)
  {
    tree orig = r;
!   tree type = TREE_TYPE (r);
!   if (type && TYPE_REF_P (type))
      r = cxx_eval_constant_expression (ctx, r, vc_prvalue, non_constant_p,
  				      overflow_p, jump_target);
    r = maybe_get_reference_referent (r);
*************** eval_parameters_of (location_t loc, cons
*** 3000,3011 ****
  
    r = maybe_get_first_fn (r);
    vec<constructor_elt, va_gc> *elts = nullptr;
!   tree args = (TREE_CODE (r) == FUNCTION_DECL
! 	       ? FUNCTION_FIRST_USER_PARM (r)
! 	       : TYPE_ARG_TYPES (r));
!   for (tree arg = args; arg && arg != void_list_node; arg = TREE_CHAIN (arg))
!     CONSTRUCTOR_APPEND_ELT (elts, NULL_TREE,
! 			    get_reflection_raw (loc, arg, REFLECT_PARM));
    return get_vector_of_info_elts (elts);
  }
  
--- 3003,3020 ----
  
    r = maybe_get_first_fn (r);
    vec<constructor_elt, va_gc> *elts = nullptr;
!   if (TREE_CODE (r) == FUNCTION_DECL)
!     for (tree arg = FUNCTION_FIRST_USER_PARM (r); arg; arg = DECL_CHAIN (arg))
!       CONSTRUCTOR_APPEND_ELT (elts, NULL_TREE,
! 			      get_reflection_raw (loc, arg, REFLECT_PARM));
!   else
!     for (tree arg = TYPE_ARG_TYPES (r); arg && arg != void_list_node;
! 	 arg = TREE_CHAIN (arg))
!       {
!         tree type = maybe_strip_typedefs (TREE_VALUE (arg));
!         CONSTRUCTOR_APPEND_ELT (elts, NULL_TREE,
! 				get_reflection_raw (loc, type));
!       }
    return get_vector_of_info_elts (elts);
  }
  
*************** eval_data_member_spec (location_t loc, c
*** 5703,5712 ****
  	  memset (namep, 0, l + 1);
  	  l = 0;
  	  FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (f), k, field, value)
! 	    if (field == NULL_TREE)
  	      {
- 		if (integer_zerop (value))
- 		  break;
  		namep[l] = tree_to_shwi (value);
  		++l;
  	      }
--- 5712,5721 ----
  	  memset (namep, 0, l + 1);
  	  l = 0;
  	  FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (f), k, field, value)
! 	    if (integer_zerop (value))
! 	      break;
! 	    else if (field == NULL_TREE)
  	      {
  		namep[l] = tree_to_shwi (value);
  		++l;
  	      }
*************** eval_data_member_spec (location_t loc, c
*** 5714,5721 ****
  	      {
  		tree lo = TREE_OPERAND (field, 0);
  		tree hi = TREE_OPERAND (field, 1);
- 		if (integer_zerop (value))
- 		  break;
  		unsigned HOST_WIDE_INT m = tree_to_uhwi (hi);
  		for (l = tree_to_uhwi (lo); l <= m; ++l)
  		  namep[l] = tree_to_shwi (value);
--- 5723,5728 ----
*************** check_out_of_consteval_use (tree expr, b
*** 8153,8163 ****
        if (!consteval_only_p (t))
  	return NULL_TREE;
  
        if (current_function_decl
! 	  /* Already escalated.  */
! 	  && (DECL_IMMEDIATE_FUNCTION_P (current_function_decl)
! 	      /* These functions are magic.  */
! 	      || is_std_allocator_allocate (current_function_decl)))
  	{
  	  *walk_subtrees = false;
  	  return NULL_TREE;
--- 8160,8168 ----
        if (!consteval_only_p (t))
  	return NULL_TREE;
  
+       /* Already escalated?  */
        if (current_function_decl
! 	  && DECL_IMMEDIATE_FUNCTION_P (current_function_decl))
  	{
  	  *walk_subtrees = false;
  	  return NULL_TREE;
*************** compare_reflections (tree lhs, tree rhs)
*** 8231,8236 ****
--- 8236,8244 ----
    // ??? Can we do something better?
    lhs = maybe_get_first_fn (lhs);
    rhs = maybe_get_first_fn (rhs);
+ 
+   /* First handle reflection-specific comparisons, then fall back to
+      cp_tree_equal.  */
    if (lkind == REFLECT_PARM)
      {
        lhs = maybe_update_function_parm (lhs);
*************** compare_reflections (tree lhs, tree rhs)
*** 8244,8270 ****
  	    && tree_int_cst_equal (TREE_VEC_ELT (lhs, 3),
  				   TREE_VEC_ELT (rhs, 3))
  	    && TREE_VEC_ELT (lhs, 4) == TREE_VEC_ELT (rhs, 4));
! 
!   if (lhs == rhs)
!     return true;
! 
!   /* Some trees are not shared.  */
!   if (TREE_CODE (lhs) == TREE_CODE (rhs))
!     switch (TREE_CODE (lhs))
!       {
!       case ARRAY_REF:
!       case COMPONENT_REF:
!       case REAL_CST:
! 	return cp_tree_equal (lhs, rhs);
!       default:
! 	break;
!       }
! 
!   if (TYPE_P (lhs) && TYPE_P (rhs))
!     if (!typedef_variant_p (lhs) && !typedef_variant_p (rhs))
        return same_type_p (lhs, rhs);
  
!   return false;
  }
  
  /* Return true if T is a valid splice-type-specifier.
--- 8252,8270 ----
  	    && tree_int_cst_equal (TREE_VEC_ELT (lhs, 3),
  				   TREE_VEC_ELT (rhs, 3))
  	    && TREE_VEC_ELT (lhs, 4) == TREE_VEC_ELT (rhs, 4));
!   else if (lkind == REFLECT_ANNOTATION)
!     return lhs == rhs;
!   else if (TYPE_P (lhs) && TYPE_P (rhs))
!     {
!       /* Given "using A = int;", "^^int != ^^A" should hold.  */
!       if (typedef_variant_p (lhs) != typedef_variant_p (rhs))
! 	return false;
!       /* This is for comparing function types.  E.g.,
! 	  auto fn() -> int; type_of(^^fn) == ^^auto()->int;  */
        return same_type_p (lhs, rhs);
+     }
  
!   return cp_tree_equal (lhs, rhs);
  }
  
  /* Return true if T is a valid splice-type-specifier.
*************** check_consteval_only_fn (tree decl)
*** 8304,8311 ****
    if (!DECL_IMMEDIATE_FUNCTION_P (decl)
        && consteval_only_p (decl)
        /* But if the function can be escalated, merrily we roll along.  */
!       && !immediate_escalating_function_p (decl)
!       && !is_std_allocator_allocate (decl))
      error_at (DECL_SOURCE_LOCATION (decl),
  	      "function of consteval-only type must be declared %qs",
  	      "consteval");
--- 8304,8310 ----
    if (!DECL_IMMEDIATE_FUNCTION_P (decl)
        && consteval_only_p (decl)
        /* But if the function can be escalated, merrily we roll along.  */
!       && !immediate_escalating_function_p (decl))
      error_at (DECL_SOURCE_LOCATION (decl),
  	      "function of consteval-only type must be declared %qs",
  	      "consteval");
diff -Nrcpad gcc-16-20260201/gcc/cp/semantics.cc gcc-16-20260208/gcc/cp/semantics.cc
*** gcc-16-20260201/gcc/cp/semantics.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/cp/semantics.cc	Sun Feb  8 22:32:07 2026
*************** finish_asm_stmt (location_t loc, int vol
*** 2495,2500 ****
--- 2495,2502 ----
  				"of a function or non-automatic variable");
  		      operand = error_mark_node;
  		    }
+ 		  else if (TREE_CODE (TREE_OPERAND (t, 0)) == FUNCTION_DECL)
+ 		    suppress_warning (TREE_OPERAND (t, 0), OPT_Wunused);
  		}
  	    }
  	  else
*************** cexpr_str::extract (location_t location,
*** 12860,12866 ****
        cpp_string istr, ostr;
        istr.len = len;
        istr.text = (const unsigned char *) msg;
!       if (!cpp_translate_string (parse_in, &istr, &ostr, CPP_STRING, true))
  	{
  	  error_at (location, "could not convert constexpr string from "
  			      "ordinary literal encoding to source character "
--- 12862,12871 ----
        cpp_string istr, ostr;
        istr.len = len;
        istr.text = (const unsigned char *) msg;
!       if (len == 0)
! 	;
!       else if (!cpp_translate_string (parse_in, &istr, &ostr, CPP_STRING,
! 				      true))
  	{
  	  error_at (location, "could not convert constexpr string from "
  			      "ordinary literal encoding to source character "
diff -Nrcpad gcc-16-20260201/gcc/cp/tree.cc gcc-16-20260208/gcc/cp/tree.cc
*** gcc-16-20260201/gcc/cp/tree.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/cp/tree.cc	Sun Feb  8 22:32:07 2026
*************** lvalue_kind (const_tree ref)
*** 206,212 ****
        /* FALLTHRU */
      case VAR_DECL:
        if (VAR_P (ref) && DECL_HAS_VALUE_EXPR_P (ref))
! 	return lvalue_kind (DECL_VALUE_EXPR (CONST_CAST_TREE (ref)));
  
        if (TREE_READONLY (ref) && ! TREE_STATIC (ref)
  	  && DECL_LANG_SPECIFIC (ref)
--- 206,212 ----
        /* FALLTHRU */
      case VAR_DECL:
        if (VAR_P (ref) && DECL_HAS_VALUE_EXPR_P (ref))
! 	return lvalue_kind (DECL_VALUE_EXPR (const_cast<tree> (ref)));
  
        if (TREE_READONLY (ref) && ! TREE_STATIC (ref)
  	  && DECL_LANG_SPECIFIC (ref)
*************** lvalue_kind (const_tree ref)
*** 227,233 ****
        /* A scope ref in a template, left as SCOPE_REF to support later
  	 access checking.  */
      case SCOPE_REF:
!       gcc_assert (!type_dependent_expression_p (CONST_CAST_TREE (ref)));
        {
  	tree op = TREE_OPERAND (ref, 1);
  	if (TREE_CODE (op) == FIELD_DECL)
--- 227,233 ----
        /* A scope ref in a template, left as SCOPE_REF to support later
  	 access checking.  */
      case SCOPE_REF:
!       gcc_assert (!type_dependent_expression_p (const_cast<tree> (ref)));
        {
  	tree op = TREE_OPERAND (ref, 1);
  	if (TREE_CODE (op) == FIELD_DECL)
*************** lvalue_kind (const_tree ref)
*** 255,261 ****
  	     point, we know we got a plain rvalue.  Unless we have a
  	     type-dependent expr, that is, but we shouldn't be testing
  	     lvalueness if we can't even tell the types yet!  */
! 	  gcc_assert (!type_dependent_expression_p (CONST_CAST_TREE (ref)));
  	  goto default_;
  	}
        {
--- 255,261 ----
  	     point, we know we got a plain rvalue.  Unless we have a
  	     type-dependent expr, that is, but we shouldn't be testing
  	     lvalueness if we can't even tell the types yet!  */
! 	  gcc_assert (!type_dependent_expression_p (const_cast<tree> (ref)));
  	  goto default_;
  	}
        {
*************** lvalue_kind (const_tree ref)
*** 316,322 ****
  	 with a BASELINK.  */
        /* This CONST_CAST is okay because BASELINK_FUNCTIONS returns
  	 its argument unmodified and we assign it to a const_tree.  */
!       return lvalue_kind (BASELINK_FUNCTIONS (CONST_CAST_TREE (ref)));
  
      case PAREN_EXPR:
        return lvalue_kind (TREE_OPERAND (ref, 0));
--- 316,322 ----
  	 with a BASELINK.  */
        /* This CONST_CAST is okay because BASELINK_FUNCTIONS returns
  	 its argument unmodified and we assign it to a const_tree.  */
!       return lvalue_kind (BASELINK_FUNCTIONS (const_cast<tree> (ref)));
  
      case PAREN_EXPR:
        return lvalue_kind (TREE_OPERAND (ref, 0));
*************** c_build_qualified_type (tree type, int t
*** 1470,1496 ****
    return cp_build_qualified_type (type, type_quals);
  }
  
- /* Implementation of the build_lang_qualified_type langhook.  */
- tree
- cxx_build_lang_qualified_type (tree type, tree otype, int type_quals)
- {
-   /* Only handle ARRAY_TYPEs using cp_build_qualified_type, so that
-      quals are pushed to the element type.  That is needed for PR101312.
-      For other types just keep using build_qualified_type with
-      cxx_copy_lang_qualifiers if needed, otherwise we can run into
-      issues with FUNCTION_TYPEs with cv-qualifier-seq vs. type-specifier,
-      or REFERENCE_TYPE which will error on certain TYPE_QUALS.  */
-   if (TREE_CODE (type) == ARRAY_TYPE)
-     return cp_build_qualified_type (type, type_quals);
-   else
-     {
-       tree ret = build_qualified_type (type, type_quals);
-       if (otype)
- 	ret = cxx_copy_lang_qualifiers (ret, otype);
-       return ret;
-     }
- }
- 
  
  /* Make a variant of TYPE, qualified with the TYPE_QUALS.  Handles
     arrays correctly.  In particular, if TYPE is an array of T's, and
--- 1470,1475 ----
*************** cp_tree_equal (tree t1, tree t2)
*** 4354,4359 ****
--- 4333,4339 ----
      case SSA_NAME:
      case USING_DECL:
      case DEFERRED_PARSE:
+     case NAMESPACE_DECL:
        return false;
  
      case BASELINK:
*************** scalarish_type_p (const_tree t)
*** 4735,4741 ****
  bool
  type_has_nontrivial_default_init (const_tree t)
  {
!   t = strip_array_types (CONST_CAST_TREE (t));
  
    if (CLASS_TYPE_P (t))
      return TYPE_HAS_COMPLEX_DFLT (t);
--- 4715,4721 ----
  bool
  type_has_nontrivial_default_init (const_tree t)
  {
!   t = strip_array_types (const_cast<tree> (t));
  
    if (CLASS_TYPE_P (t))
      return TYPE_HAS_COMPLEX_DFLT (t);
*************** remember_deleted_copy (const_tree t)
*** 4752,4758 ****
  {
    if (!deleted_copy_types)
      deleted_copy_types = hash_set<tree>::create_ggc(37);
!   deleted_copy_types->add (CONST_CAST_TREE (t));
  }
  void
  maybe_warn_parm_abi (tree t, location_t loc)
--- 4732,4738 ----
  {
    if (!deleted_copy_types)
      deleted_copy_types = hash_set<tree>::create_ggc(37);
!   deleted_copy_types->add (const_cast<tree> (t));
  }
  void
  maybe_warn_parm_abi (tree t, location_t loc)
*************** maybe_warn_parm_abi (tree t, location_t
*** 4795,4801 ****
  bool
  type_has_nontrivial_copy_init (const_tree type)
  {
!   tree t = strip_array_types (CONST_CAST_TREE (type));
  
    if (CLASS_TYPE_P (t))
      {
--- 4775,4781 ----
  bool
  type_has_nontrivial_copy_init (const_tree type)
  {
!   tree t = strip_array_types (const_cast<tree> (type));
  
    if (CLASS_TYPE_P (t))
      {
*************** type_has_nontrivial_copy_init (const_tre
*** 4882,4888 ****
  bool
  trivially_copyable_p (const_tree t)
  {
!   t = strip_array_types (CONST_CAST_TREE (t));
  
    if (CLASS_TYPE_P (t))
      return ((!TYPE_HAS_COPY_CTOR (t)
--- 4862,4868 ----
  bool
  trivially_copyable_p (const_tree t)
  {
!   t = strip_array_types (const_cast<tree> (t));
  
    if (CLASS_TYPE_P (t))
      return ((!TYPE_HAS_COPY_CTOR (t)
*************** trivially_copyable_p (const_tree t)
*** 4903,4914 ****
  bool
  trivial_type_p (const_tree t)
  {
!   t = strip_array_types (CONST_CAST_TREE (t));
  
    if (CLASS_TYPE_P (t))
      /* A trivial class is a class that is trivially copyable and has one or
         more eligible default constructors, all of which are trivial.  */
!     return (type_has_non_deleted_trivial_default_ctor (CONST_CAST_TREE (t))
  	    && trivially_copyable_p (t));
    else
      return scalarish_type_p (t);
--- 4883,4894 ----
  bool
  trivial_type_p (const_tree t)
  {
!   t = strip_array_types (const_cast<tree> (t));
  
    if (CLASS_TYPE_P (t))
      /* A trivial class is a class that is trivially copyable and has one or
         more eligible default constructors, all of which are trivial.  */
!     return (type_has_non_deleted_trivial_default_ctor (const_cast<tree> (t))
  	    && trivially_copyable_p (t));
    else
      return scalarish_type_p (t);
*************** pod_type_p (const_tree t)
*** 4963,4969 ****
  {
    /* This CONST_CAST is okay because strip_array_types returns its
       argument unmodified and we assign it to a const_tree.  */
!   t = strip_array_types (CONST_CAST_TREE(t));
  
    if (!CLASS_TYPE_P (t))
      return scalarish_type_p (t);
--- 4943,4949 ----
  {
    /* This CONST_CAST is okay because strip_array_types returns its
       argument unmodified and we assign it to a const_tree.  */
!   t = strip_array_types (const_cast<tree>(t));
  
    if (!CLASS_TYPE_P (t))
      return scalarish_type_p (t);
*************** pod_type_p (const_tree t)
*** 4986,4992 ****
  bool
  layout_pod_type_p (const_tree t)
  {
!   t = strip_array_types (CONST_CAST_TREE (t));
  
    if (CLASS_TYPE_P (t))
      return !CLASSTYPE_NON_LAYOUT_POD_P (t);
--- 4966,4972 ----
  bool
  layout_pod_type_p (const_tree t)
  {
!   t = strip_array_types (const_cast<tree> (t));
  
    if (CLASS_TYPE_P (t))
      return !CLASSTYPE_NON_LAYOUT_POD_P (t);
*************** layout_pod_type_p (const_tree t)
*** 5000,5006 ****
  bool
  std_layout_type_p (const_tree t)
  {
!   t = strip_array_types (CONST_CAST_TREE (t));
  
    if (CLASS_TYPE_P (t))
      return !CLASSTYPE_NON_STD_LAYOUT (t);
--- 4980,4986 ----
  bool
  std_layout_type_p (const_tree t)
  {
!   t = strip_array_types (const_cast<tree> (t));
  
    if (CLASS_TYPE_P (t))
      return !CLASSTYPE_NON_STD_LAYOUT (t);
*************** type_has_unique_obj_representations (con
*** 5018,5024 ****
  {
    bool ret;
  
!   t = strip_array_types (CONST_CAST_TREE (t));
  
    if (t == error_mark_node)
      return false;
--- 4998,5004 ----
  {
    bool ret;
  
!   t = strip_array_types (const_cast<tree> (t));
  
    if (t == error_mark_node)
      return false;
*************** zero_init_p (const_tree t)
*** 5258,5264 ****
  {
    /* This CONST_CAST is okay because strip_array_types returns its
       argument unmodified and we assign it to a const_tree.  */
!   t = strip_array_types (CONST_CAST_TREE(t));
  
    if (t == error_mark_node)
      return 1;
--- 5238,5244 ----
  {
    /* This CONST_CAST is okay because strip_array_types returns its
       argument unmodified and we assign it to a const_tree.  */
!   t = strip_array_types (const_cast<tree> (t));
  
    if (t == error_mark_node)
      return 1;
*************** cxx_type_hash_eq (const_tree typea, cons
*** 6025,6031 ****
  tree
  cxx_copy_lang_qualifiers (const_tree typea, const_tree typeb)
  {
!   tree type = CONST_CAST_TREE (typea);
    if (FUNC_OR_METHOD_TYPE_P (type))
      type = build_cp_fntype_variant (type, type_memfn_rqual (typeb),
  				    TYPE_RAISES_EXCEPTIONS (typeb),
--- 6005,6011 ----
  tree
  cxx_copy_lang_qualifiers (const_tree typea, const_tree typeb)
  {
!   tree type = const_cast<tree> (typea);
    if (FUNC_OR_METHOD_TYPE_P (type))
      type = build_cp_fntype_variant (type, type_memfn_rqual (typeb),
  				    TYPE_RAISES_EXCEPTIONS (typeb),
*************** cp_walk_subtrees (tree *tp, int *walk_su
*** 6293,6298 ****
--- 6273,6283 ----
        WALK_SUBTREE (TYPE_MAX_VALUE (t));
        break;
  
+     case SPLICE_SCOPE:
+       WALK_SUBTREE (SPLICE_SCOPE_EXPR (t));
+       *walk_subtrees_p = 0;
+       break;
+ 
      default:
        return NULL_TREE;
      }
diff -Nrcpad gcc-16-20260201/gcc/cp/typeck.cc gcc-16-20260208/gcc/cp/typeck.cc
*** gcc-16-20260201/gcc/cp/typeck.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/cp/typeck.cc	Sun Feb  8 22:32:07 2026
*************** comp_except_specs (const_tree t1, const_
*** 1227,1234 ****
    if (exact < ce_exact)
      {
        if (exact == ce_type
! 	  && (canonical_eh_spec (CONST_CAST_TREE (t1))
! 	      == canonical_eh_spec (CONST_CAST_TREE (t2))))
  	return true;
  
        /* noexcept(false) is compatible with no exception-specification,
--- 1227,1234 ----
    if (exact < ce_exact)
      {
        if (exact == ce_type
! 	  && (canonical_eh_spec (const_cast<tree> (t1))
! 	      == canonical_eh_spec (const_cast<tree> (t2))))
  	return true;
  
        /* noexcept(false) is compatible with no exception-specification,
*************** is_bitfield_expr_with_lowered_type (cons
*** 2556,2562 ****
      case VAR_DECL:
        if (DECL_HAS_VALUE_EXPR_P (exp))
  	return is_bitfield_expr_with_lowered_type (DECL_VALUE_EXPR
! 						   (CONST_CAST_TREE (exp)));
        return NULL_TREE;
  
      case VIEW_CONVERT_EXPR:
--- 2556,2562 ----
      case VAR_DECL:
        if (DECL_HAS_VALUE_EXPR_P (exp))
  	return is_bitfield_expr_with_lowered_type (DECL_VALUE_EXPR
! 						   (const_cast<tree> (exp)));
        return NULL_TREE;
  
      case VIEW_CONVERT_EXPR:
*************** cp_type_quals (const_tree type)
*** 12025,12031 ****
    int quals;
    /* This CONST_CAST is okay because strip_array_types returns its
       argument unmodified and we assign it to a const_tree.  */
!   type = strip_array_types (CONST_CAST_TREE (type));
    if (type == error_mark_node
        /* Quals on a FUNCTION_TYPE are memfn quals.  */
        || TREE_CODE (type) == FUNCTION_TYPE)
--- 12025,12031 ----
    int quals;
    /* This CONST_CAST is okay because strip_array_types returns its
       argument unmodified and we assign it to a const_tree.  */
!   type = strip_array_types (const_cast<tree> (type));
    if (type == error_mark_node
        /* Quals on a FUNCTION_TYPE are memfn quals.  */
        || TREE_CODE (type) == FUNCTION_TYPE)
*************** cp_has_mutable_p (const_tree type)
*** 12102,12108 ****
  {
    /* This CONST_CAST is okay because strip_array_types returns its
       argument unmodified and we assign it to a const_tree.  */
!   type = strip_array_types (CONST_CAST_TREE(type));
  
    return CLASS_TYPE_P (type) && CLASSTYPE_HAS_MUTABLE (type);
  }
--- 12102,12108 ----
  {
    /* This CONST_CAST is okay because strip_array_types returns its
       argument unmodified and we assign it to a const_tree.  */
!   type = strip_array_types (const_cast<tree> (type));
  
    return CLASS_TYPE_P (type) && CLASSTYPE_HAS_MUTABLE (type);
  }
diff -Nrcpad gcc-16-20260201/gcc/cp/typeck2.cc gcc-16-20260208/gcc/cp/typeck2.cc
*** gcc-16-20260201/gcc/cp/typeck2.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/cp/typeck2.cc	Sun Feb  8 22:32:07 2026
*************** cxx_incomplete_type_inform (const_tree t
*** 280,286 ****
      return;
  
    location_t loc = DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type));
!   tree ptype = strip_top_quals (CONST_CAST_TREE (type));
  
    /* When defining a template, current_class_type will be the pattern on
       the template definition, while non-self-reference usages of this
--- 280,286 ----
      return;
  
    location_t loc = DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type));
!   tree ptype = strip_top_quals (const_cast<tree> (type));
  
    /* When defining a template, current_class_type will be the pattern on
       the template definition, while non-self-reference usages of this
diff -Nrcpad gcc-16-20260201/gcc/cse.cc gcc-16-20260208/gcc/cse.cc
*** gcc-16-20260201/gcc/cse.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/cse.cc	Sun Feb  8 22:32:07 2026
*************** along with GCC; see the file COPYING3.
*** 23,28 ****
--- 23,29 ----
  #include "backend.h"
  #include "target.h"
  #include "rtl.h"
+ #include "stmt.h"
  #include "tree.h"
  #include "cfghooks.h"
  #include "df.h"
*************** invalidate_from_sets_and_clobbers (rtx_i
*** 6217,6222 ****
--- 6218,6252 ----
  	    invalidate (SET_DEST (y), VOIDmode);
  	}
      }
+ 
+   /* Any single register constraint may introduce a conflict, if the associated
+      hard register is live.  For example:
+ 
+      r100=%1
+      r101=42
+      r102=exp(r101)
+ 
+      If the first operand r101 of exp is constrained to hard register %1, then
+      r100 cannot be trivially substituted by %1 in the following since %1 got
+      clobbered.  Such conflicts may stem from single register classes as well
+      as hard register constraints.  Since prior RA we do not know which
+      alternative will be chosen, be conservative and consider any such hard
+      register from any alternative as a potential clobber.  */
+   extract_insn (insn);
+   for (int nop = recog_data.n_operands - 1; nop >= 0; --nop)
+     {
+       int c;
+       const char *p = recog_data.constraints[nop];
+       for (; (c = *p); p += CONSTRAINT_LEN (c, p))
+ 	if (c == ',')
+ 	  ;
+ 	else if (c == '{')
+ 	  {
+ 	    int regno = decode_hard_reg_constraint (p);
+ 	    machine_mode mode = recog_data.operand_mode[nop];
+ 	    invalidate_reg (gen_rtx_REG (mode, regno));
+ 	  }
+     }
  }
  
  static rtx cse_process_note (rtx);
diff -Nrcpad gcc-16-20260201/gcc/ctfc.cc gcc-16-20260208/gcc/ctfc.cc
*** gcc-16-20260201/gcc/ctfc.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/ctfc.cc	Sun Feb  8 22:32:07 2026
*************** ctfc_strtable_add_str (ctf_strtable_t *
*** 292,298 ****
       not add null strings, return the offset to the empty string for them.  */
    if ((!name || (name != NULL && !strcmp (name, ""))) && str_offset)
      {
!       ctf_string = CONST_CAST (char *, str_table->ctstab_estr);
        str_offset = 0;
      }
    else
--- 292,298 ----
       not add null strings, return the offset to the empty string for them.  */
    if ((!name || (name != NULL && !strcmp (name, ""))) && str_offset)
      {
!       ctf_string = const_cast<char *> (str_table->ctstab_estr);
        str_offset = 0;
      }
    else
*************** ctfc_strtable_add_str (ctf_strtable_t *
*** 300,306 ****
        gcc_assert (name);
        /* Add null-terminated strings to the string table.  */
        len = strlen (name) + 1;
!       ctf_string = CONST_CAST (char *, ggc_strdup (name));
  
        ctfc_strtable_append_str (str_table, ctf_string);
        /* Add string to the string table.  Keep number of strings updated.  */
--- 300,306 ----
        gcc_assert (name);
        /* Add null-terminated strings to the string table.  */
        len = strlen (name) + 1;
!       ctf_string = const_cast<char *> (ggc_strdup (name));
  
        ctfc_strtable_append_str (str_table, ctf_string);
        /* Add string to the string table.  Keep number of strings updated.  */
*************** ctf_add_cuname (ctf_container_ref ctfc,
*** 357,363 ****
      }
    else
      /* Filename is an absolute path.  */
!     cuname = CONST_CAST (char *, ggc_strdup (filename));
  
    ctf_add_string (ctfc, cuname, &(ctfc->ctfc_cuname_offset));
    /* Add 1 as CTF strings in the CTF string table are null-terminated
--- 357,363 ----
      }
    else
      /* Filename is an absolute path.  */
!     cuname = const_cast<char *> (ggc_strdup (filename));
  
    ctf_add_string (ctfc, cuname, &(ctfc->ctfc_cuname_offset));
    /* Add 1 as CTF strings in the CTF string table are null-terminated
diff -Nrcpad gcc-16-20260201/gcc/d/ChangeLog gcc-16-20260208/gcc/d/ChangeLog
*** gcc-16-20260201/gcc/d/ChangeLog	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/ChangeLog	Sun Feb  8 22:32:07 2026
***************
*** 1,3 ****
--- 1,62 ----
+ 2026-02-06  Torbjörn SVENSSON  <torbjorn.svensson@foss.st.com>
+ 
+ 	PR middle-end/123892
+ 	* d-builtins.cc: Replace CONST_CAST with const_cast<>.
+ 	* d-incpath.cc: Likewise.
+ 	* d-lang.cc: Likewise.
+ 	* d-spec.cc: Likewise.
+ 	* decl.cc: Likewise.
+ 
+ 2026-02-03  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	* dmd/VERSION: Bump version to v2.112.0.
+ 	* dmd/MERGE: Merge upstream dmd 24a41073c2.
+ 	* d-attribs.cc (build_attributes): Update for new front-end interface.
+ 	* d-builtins.cc (build_frontend_type): Likewise.
+ 	(matches_builtin_type): Likewise.
+ 	(d_init_versions): Predefine D_Profile when compiling with profile
+ 	enabled.
+ 	* d-codegen.cc (get_array_length): Update for new front-end interface.
+ 	(lower_struct_comparison): Likewise.
+ 	(build_array_from_val): Likewise.
+ 	(get_function_type): Likewise.
+ 	(get_frameinfo): Likewise.
+ 	* d-compiler.cc (Compiler::paintAsType): Likewise.
+ 	* d-convert.cc (convert_expr): Likewise.
+ 	(convert_for_rvalue): Likewise.
+ 	(convert_for_assignment): Likewise.
+ 	(d_array_convert): Likewise.
+ 	* d-diagnostic.cc (verrorReport): Rename to ...
+ 	(vreportDiagnostic): ... this.
+ 	(verrorReportSupplemental): Rename to ...
+ 	(vsupplementalDiagnostic): ... this.
+ 	* d-lang.cc (d_handle_option): Handle -std=d2024 and -std=d202y.
+ 	(d_parse_file): Update for new front-end interface.
+ 	* d-target.cc (Target::fieldalign): Likewise.
+ 	(Target::isVectorTypeSupported): Likewise.
+ 	(Target::isVectorOpSupported): Likewise.
+ 	* decl.cc (get_symbol_decl): Likewise.
+ 	(DeclVisitor::visit): Likewise.
+ 	(DeclVisitor::visit (FuncDeclaration *)): Do NRVO on `__result' decl.
+ 	* expr.cc (needs_postblit): Remove.
+ 	(needs_dtor): Remove.
+ 	(lvalue_p): Remove.
+ 	(ExprVisitor::visit): Update for new front-end interface.
+ 	(ExprVisitor::visit (AssignExp *)): Update for front-end lowering
+ 	expression using templates.
+ 	* imports.cc (ImportVisitor::visit): Update for new front-end
+ 	interface.
+ 	* intrinsics.def (INTRINSIC_VA_ARG): Update signature.
+ 	(INTRINSIC_C_VA_ARG): Update signature.
+ 	(INTRINSIC_VASTART): Update signature.
+ 	* lang.opt: Add -std=d2024 and -std=d202y.
+ 	* toir.cc (IRVisitor::visit): Update for new front-end interface.
+ 	* typeinfo.cc (TypeInfoVisitor::visit): Likewise.
+ 	(TypeInfoVisitor::visit (TypeInfoStructDeclaration *)): Ensure
+ 	semantic is ran on all TypeInfo members.
+ 	(base_vtable_offset): Update for new front-end interface.
+ 	* types.cc (TypeVisitor::visit): Likewise.
+ 
  2026-01-31  Iain Buclaw  <ibuclaw@gdcproject.org>
  
  	* dmd/MERGE: Merge upstream dmd e1f6680f50.
diff -Nrcpad gcc-16-20260201/gcc/d/d-attribs.cc gcc-16-20260208/gcc/d/d-attribs.cc
*** gcc-16-20260201/gcc/d/d-attribs.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/d-attribs.cc	Sun Feb  8 22:32:07 2026
*************** build_attributes (Expressions *eattrs)
*** 376,382 ****
  	  continue;
  	}
  
!       StringExp *se = e0->toStringExp ();
        gcc_assert (se->sz == 1);
  
        /* Empty string attribute, just ignore it.  */
--- 376,382 ----
  	  continue;
  	}
  
!       StringExp *se = dmd::toStringExp (e0);
        gcc_assert (se->sz == 1);
  
        /* Empty string attribute, just ignore it.  */
diff -Nrcpad gcc-16-20260201/gcc/d/d-builtins.cc gcc-16-20260208/gcc/d/d-builtins.cc
*** gcc-16-20260201/gcc/d/d-builtins.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/d-builtins.cc	Sun Feb  8 22:32:07 2026
*************** build_frontend_type (tree type)
*** 139,145 ****
  	  dtype = Type::basic[i];
  
  	  /* Search for type matching size and signedness.  */
! 	  if (unsignedp != dtype->isUnsigned ()
  	      || size != dmd::size (dtype))
  	    continue;
  
--- 139,145 ----
  	  dtype = Type::basic[i];
  
  	  /* Search for type matching size and signedness.  */
! 	  if (unsignedp != dmd::isUnsigned (dtype)
  	      || size != dmd::size (dtype))
  	    continue;
  
*************** d_eval_constant_expression (const Loc &l
*** 386,392 ****
  	{
  	  const void *string = TREE_STRING_POINTER (cst);
  	  size_t len = TREE_STRING_LENGTH (cst) - 1;
! 	  return StringExp::create (loc, CONST_CAST (void *, string), len);
  	}
        else if (code == VECTOR_CST)
  	{
--- 386,392 ----
  	{
  	  const void *string = TREE_STRING_POINTER (cst);
  	  size_t len = TREE_STRING_LENGTH (cst) - 1;
! 	  return StringExp::create (loc, const_cast<void *> (string), len);
  	}
        else if (code == VECTOR_CST)
  	{
*************** d_init_versions (void)
*** 515,520 ****
--- 515,522 ----
  
    if (optimize)
      VersionCondition::addPredefinedGlobalIdent ("D_Optimized");
+   if (profile_flag)
+     VersionCondition::addPredefinedGlobalIdent ("D_Profile");
  
    VersionCondition::addPredefinedGlobalIdent ("all");
  
*************** matches_builtin_type (Type *t1, Type *t2
*** 715,721 ****
        && dmd::implicitConvTo (tb1, tb2) != MATCH::nomatch)
      return true;
  
!   if (tb1->isIntegral () == tb2->isIntegral ()
        && dmd::size (tb1) == dmd::size (tb2))
      return true;
  
--- 717,723 ----
        && dmd::implicitConvTo (tb1, tb2) != MATCH::nomatch)
      return true;
  
!   if (dmd::isIntegral (tb1) == dmd::isIntegral (tb2)
        && dmd::size (tb1) == dmd::size (tb2))
      return true;
  
diff -Nrcpad gcc-16-20260201/gcc/d/d-codegen.cc gcc-16-20260208/gcc/d/d-codegen.cc
*** gcc-16-20260201/gcc/d/d-codegen.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/d-codegen.cc	Sun Feb  8 22:32:07 2026
*************** get_array_length (tree exp, Type *type)
*** 335,341 ****
    switch (tb->ty)
      {
      case TY::Tsarray:
!       return size_int (tb->isTypeSArray ()->dim->toUInteger ());
  
      case TY::Tarray:
        return d_array_length (exp);
--- 335,341 ----
    switch (tb->ty)
      {
      case TY::Tsarray:
!       return size_int (dmd::toUInteger (tb->isTypeSArray ()->dim));
  
      case TY::Tarray:
        return d_array_length (exp);
*************** lower_struct_comparison (tree_code code,
*** 1037,1051 ****
  	  /* Compare inner data structures.  */
  	  tcmp = lower_struct_comparison (code, ts->sym, t1ref, t2ref);
  	}
!       else if (type->ty != TY::Tvector && type->isIntegral ())
  	{
  	  /* Integer comparison, no special handling required.  */
  	  tcmp = build_boolop (code, t1ref, t2ref);
  	}
!       else if (type->ty != TY::Tvector && type->isFloating ())
  	{
  	  /* Floating-point comparison, don't compare padding in type.  */
! 	  if (!type->isComplex ())
  	    tcmp = build_float_identity (code, t1ref, t2ref);
  	  else
  	    {
--- 1037,1051 ----
  	  /* Compare inner data structures.  */
  	  tcmp = lower_struct_comparison (code, ts->sym, t1ref, t2ref);
  	}
!       else if (type->ty != TY::Tvector && dmd::isIntegral (type))
  	{
  	  /* Integer comparison, no special handling required.  */
  	  tcmp = build_boolop (code, t1ref, t2ref);
  	}
!       else if (type->ty != TY::Tvector && dmd::isFloating (type))
  	{
  	  /* Floating-point comparison, don't compare padding in type.  */
! 	  if (!dmd::isComplex (type))
  	    tcmp = build_float_identity (code, t1ref, t2ref);
  	  else
  	    {
*************** build_array_from_val (Type *type, tree v
*** 1879,1885 ****
    if (TREE_CODE (etype) == ARRAY_TYPE && TREE_TYPE (val) != etype)
      val = build_array_from_val (type->nextOf (), val);
  
!   size_t dims = type->isTypeSArray ()->dim->toInteger ();
    vec <constructor_elt, va_gc> *elms = NULL;
    vec_safe_reserve (elms, dims);
  
--- 1879,1885 ----
    if (TREE_CODE (etype) == ARRAY_TYPE && TREE_TYPE (val) != etype)
      val = build_array_from_val (type->nextOf (), val);
  
!   size_t dims = dmd::toInteger (type->isTypeSArray ()->dim);
    vec <constructor_elt, va_gc> *elms = NULL;
    vec_safe_reserve (elms, dims);
  
*************** build_assert_call (const Loc &loc, libca
*** 1994,2002 ****
  
  
    if (msg != NULL_TREE)
!     return build_libcall (libcall, Type::tvoid, 3, msg, file, line);
    else
!     return build_libcall (libcall, Type::tvoid, 2, file, line);
  }
  
  /* Builds a CALL_EXPR at location LOC in the source file to execute when an
--- 1994,2002 ----
  
  
    if (msg != NULL_TREE)
!     return build_libcall (libcall, 3, msg, file, line);
    else
!     return build_libcall (libcall, 2, file, line);
  }
  
  /* Builds a CALL_EXPR at location LOC in the source file to execute when an
*************** build_array_bounds_call (const Loc &loc)
*** 2010,2016 ****
      return build_call_expr (builtin_decl_explicit (BUILT_IN_TRAP), 0);
    else
      {
!       return build_libcall (LIBCALL_ARRAYBOUNDSP, Type::tvoid, 2,
  			    build_filename_from_loc (loc),
  			    size_int (loc.linnum ()));
      }
--- 2010,2016 ----
      return build_call_expr (builtin_decl_explicit (BUILT_IN_TRAP), 0);
    else
      {
!       return build_libcall (LIBCALL_ARRAYBOUNDSP, 2,
  			    build_filename_from_loc (loc),
  			    size_int (loc.linnum ()));
      }
*************** build_bounds_index_condition (IndexExp *
*** 2039,2045 ****
      boundserr = build_call_expr (builtin_decl_explicit (BUILT_IN_TRAP), 0);
    else
      {
!       boundserr = build_libcall (LIBCALL_ARRAYBOUNDS_INDEXP, Type::tvoid, 4,
  				 build_filename_from_loc (ie->e2->loc),
  				 size_int (ie->e2->loc.linnum ()),
  				 index, length);
--- 2039,2045 ----
      boundserr = build_call_expr (builtin_decl_explicit (BUILT_IN_TRAP), 0);
    else
      {
!       boundserr = build_libcall (LIBCALL_ARRAYBOUNDS_INDEXP, 4,
  				 build_filename_from_loc (ie->e2->loc),
  				 size_int (ie->e2->loc.linnum ()),
  				 index, length);
*************** build_bounds_slice_condition (SliceExp *
*** 2088,2095 ****
  	    }
  	  else
  	    {
! 	      boundserr = build_libcall (LIBCALL_ARRAYBOUNDS_SLICEP,
! 					 Type::tvoid, 5,
  					 build_filename_from_loc (se->loc),
  					 size_int (se->loc.linnum ()),
  					 lower, upper, length);
--- 2088,2094 ----
  	    }
  	  else
  	    {
! 	      boundserr = build_libcall (LIBCALL_ARRAYBOUNDS_SLICEP, 5,
  					 build_filename_from_loc (se->loc),
  					 size_int (se->loc.linnum ()),
  					 lower, upper, length);
*************** checkaction_trap_p (void)
*** 2158,2164 ****
  }
  
  /* Returns the TypeFunction class for Type T.
!    Assumes T is already ->toBasetype().  */
  
  TypeFunction *
  get_function_type (Type *t)
--- 2157,2163 ----
  }
  
  /* Returns the TypeFunction class for Type T.
!    Assumes T is already the main variant type (toBasetype).  */
  
  TypeFunction *
  get_function_type (Type *t)
*************** build_closure (FuncDeclaration *fd)
*** 2924,2930 ****
  
        /* Allocate memory for closure.  */
        tree arg = convert (build_ctype (Type::tsize_t), TYPE_SIZE_UNIT (type));
!       tree init = build_libcall (LIBCALL_ALLOCMEMORY, Type::tvoidptr, 1, arg);
  
        tree init_exp = build_assign (INIT_EXPR, decl,
  				    build_nop (TREE_TYPE (decl), init));
--- 2923,2929 ----
  
        /* Allocate memory for closure.  */
        tree arg = convert (build_ctype (Type::tsize_t), TYPE_SIZE_UNIT (type));
!       tree init = build_libcall (LIBCALL_ALLOCMEMORY, 1, arg);
  
        tree init_exp = build_assign (INIT_EXPR, decl,
  				    build_nop (TREE_TYPE (decl), init));
*************** get_frameinfo (FuncDeclaration *fd)
*** 2986,2992 ****
    DECL_LANG_FRAMEINFO (fds) = ffi;
  
    const bool requiresClosure = fd->requiresClosure;
!   if (fd->needsClosure ())
      {
        /* This can shift due to templates being expanded that access alias
           symbols, give it a decent error for now.  */
--- 2985,2991 ----
    DECL_LANG_FRAMEINFO (fds) = ffi;
  
    const bool requiresClosure = fd->requiresClosure;
!   if (dmd::needsClosure (fd))
      {
        /* This can shift due to templates being expanded that access alias
           symbols, give it a decent error for now.  */
diff -Nrcpad gcc-16-20260201/gcc/d/d-compiler.cc gcc-16-20260208/gcc/d/d-compiler.cc
*** gcc-16-20260201/gcc/d/d-compiler.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/d-compiler.cc	Sun Feb  8 22:32:07 2026
*************** Compiler::paintAsType (UnionExp *, Expre
*** 47,56 ****
  
    Type *tb = type->toBasetype ();
  
!   if (expr->type->isIntegral ())
!     cst = build_integer_cst (expr->toInteger (), build_ctype (expr->type));
!   else if (expr->type->isFloating ())
!     cst = build_float_cst (expr->toReal (), expr->type);
    else if (expr->op == EXP::arrayLiteral)
      {
        /* Build array as VECTOR_CST, assumes EXPR is constant.  */
--- 47,56 ----
  
    Type *tb = type->toBasetype ();
  
!   if (dmd::isIntegral (expr->type))
!     cst = build_integer_cst (dmd::toInteger (expr), build_ctype (expr->type));
!   else if (dmd::isFloating (expr->type))
!     cst = build_float_cst (dmd::toReal (expr), expr->type);
    else if (expr->op == EXP::arrayLiteral)
      {
        /* Build array as VECTOR_CST, assumes EXPR is constant.  */
*************** Compiler::paintAsType (UnionExp *, Expre
*** 61,75 ****
        for (size_t i = 0; i < elements->length; i++)
  	{
  	  Expression *e = (*elements)[i];
! 	  if (e->type->isIntegral ())
  	    {
! 	      tree value = build_integer_cst (e->toInteger (),
  					      build_ctype (e->type));
  	      CONSTRUCTOR_APPEND_ELT (elms, size_int (i), value);
  	    }
! 	  else if (e->type->isFloating ())
  	    {
! 	      tree value = build_float_cst (e->toReal (), e->type);
  	      CONSTRUCTOR_APPEND_ELT (elms, size_int (i), value);
  	    }
  	  else
--- 61,75 ----
        for (size_t i = 0; i < elements->length; i++)
  	{
  	  Expression *e = (*elements)[i];
! 	  if (dmd::isIntegral (e->type))
  	    {
! 	      tree value = build_integer_cst (dmd::toInteger (e),
  					      build_ctype (e->type));
  	      CONSTRUCTOR_APPEND_ELT (elms, size_int (i), value);
  	    }
! 	  else if (dmd::isFloating (e->type))
  	    {
! 	      tree value = build_float_cst (dmd::toReal (e), e->type);
  	      CONSTRUCTOR_APPEND_ELT (elms, size_int (i), value);
  	    }
  	  else
*************** Compiler::paintAsType (UnionExp *, Expre
*** 77,83 ****
  	}
  
        /* Build vector type.  */
!       int nunits = expr->type->isTypeSArray ()->dim->toUInteger ();
        Type *telem = expr->type->nextOf ();
        tree vectype = build_vector_type (build_ctype (telem), nunits);
  
--- 77,83 ----
  	}
  
        /* Build vector type.  */
!       int nunits = dmd::toUInteger (expr->type->isTypeSArray ()->dim);
        Type *telem = expr->type->nextOf ();
        tree vectype = build_vector_type (build_ctype (telem), nunits);
  
*************** Compiler::paintAsType (UnionExp *, Expre
*** 93,99 ****
      {
        /* Interpret value as a vector of the same size,
  	 then return the array literal.  */
!       int nunits = type->isTypeSArray ()->dim->toUInteger ();
        Type *elem = type->nextOf ();
        tree vectype = build_vector_type (build_ctype (elem), nunits);
  
--- 93,99 ----
      {
        /* Interpret value as a vector of the same size,
  	 then return the array literal.  */
!       int nunits = dmd::toUInteger (type->isTypeSArray ()->dim);
        Type *elem = type->nextOf ();
        tree vectype = build_vector_type (build_ctype (elem), nunits);
  
diff -Nrcpad gcc-16-20260201/gcc/d/d-convert.cc gcc-16-20260208/gcc/d/d-convert.cc
*** gcc-16-20260201/gcc/d/d-convert.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/d-convert.cc	Sun Feb  8 22:32:07 2026
*************** convert_expr (tree exp, Type *etype, Typ
*** 459,465 ****
  	}
        else if (tbtype->ty == TY::Tarray)
  	{
! 	  dinteger_t dim = ebtype->isTypeSArray ()->dim->toInteger ();
  	  dinteger_t esize = dmd::size (ebtype->nextOf ());
  	  dinteger_t tsize = dmd::size (tbtype->nextOf ());
  
--- 459,465 ----
  	}
        else if (tbtype->ty == TY::Tarray)
  	{
! 	  dinteger_t dim = dmd::toInteger (ebtype->isTypeSArray ()->dim);
  	  dinteger_t esize = dmd::size (ebtype->nextOf ());
  	  dinteger_t tsize = dmd::size (tbtype->nextOf ());
  
*************** convert_expr (tree exp, Type *etype, Typ
*** 548,554 ****
        else if (tbtype->ty == TY::Tsarray)
  	{
  	  /* Strings are treated as dynamic arrays in D2.  */
! 	  if (ebtype->isString () && tbtype->isString ())
  	    return indirect_ref (build_ctype (totype), d_array_ptr (exp));
  	}
        else
--- 548,554 ----
        else if (tbtype->ty == TY::Tsarray)
  	{
  	  /* Strings are treated as dynamic arrays in D2.  */
! 	  if (dmd::isString (ebtype) && dmd::isString (tbtype))
  	    return indirect_ref (build_ctype (totype), d_array_ptr (exp));
  	}
        else
*************** convert_expr (tree exp, Type *etype, Typ
*** 596,603 ****
      default:
        /* All casts between imaginary and non-imaginary result in 0.0,
  	 except for casts between complex and imaginary types.  */
!       if (!ebtype->isComplex () && !tbtype->isComplex ()
! 	  && (ebtype->isImaginary () != tbtype->isImaginary ()))
  	{
  	  warning (OPT_Wcast_result,
  		   "cast from %qs to %qs will produce zero result",
--- 596,603 ----
      default:
        /* All casts between imaginary and non-imaginary result in 0.0,
  	 except for casts between complex and imaginary types.  */
!       if (!dmd::isComplex (ebtype) && !dmd::isComplex (tbtype)
! 	  && (dmd::isImaginary (ebtype) != dmd::isImaginary (tbtype)))
  	{
  	  warning (OPT_Wcast_result,
  		   "cast from %qs to %qs will produce zero result",
*************** convert_for_rvalue (tree expr, Type *ety
*** 671,677 ****
  	  tree array = d_save_expr (TREE_OPERAND (ptr, 0));
  	  array = build1 (VIEW_CONVERT_EXPR, TREE_TYPE (expr), array);
  
! 	  uinteger_t dim = tbtype->isTypeSArray ()->dim->toUInteger ();
  	  vec <constructor_elt, va_gc> *elms = NULL;
  	  for (uinteger_t i = 0; i < dim; i++)
  	    {
--- 671,677 ----
  	  tree array = d_save_expr (TREE_OPERAND (ptr, 0));
  	  array = build1 (VIEW_CONVERT_EXPR, TREE_TYPE (expr), array);
  
! 	  uinteger_t dim = dmd::toUInteger (tbtype->isTypeSArray ()->dim);
  	  vec <constructor_elt, va_gc> *elms = NULL;
  	  for (uinteger_t i = 0; i < dim; i++)
  	    {
*************** convert_for_assignment (Expression *expr
*** 779,785 ****
        if (same_type_p (telem, ebtype))
  	{
  	  TypeSArray *sa_type = tbtype->isTypeSArray ();
! 	  uinteger_t count = sa_type->dim->toUInteger ();
  
  	  tree ctor = build_padded_constructor (build_ctype (totype), NULL);
  	  if (count)
--- 779,785 ----
        if (same_type_p (telem, ebtype))
  	{
  	  TypeSArray *sa_type = tbtype->isTypeSArray ();
! 	  uinteger_t count = dmd::toUInteger (sa_type->dim);
  
  	  tree ctor = build_padded_constructor (build_ctype (totype), NULL);
  	  if (count)
*************** convert_for_assignment (Expression *expr
*** 807,813 ****
  
    /* D Front end uses IntegerExp(0) to mean zero-init an array or structure.  */
    if ((tbtype->ty == TY::Tsarray || tbtype->ty == TY::Tstruct)
!       && ebtype->isIntegral ())
      {
        tree ret = build_expr (expr, false, literalp);
        gcc_assert (integer_zerop (ret));
--- 807,813 ----
  
    /* D Front end uses IntegerExp(0) to mean zero-init an array or structure.  */
    if ((tbtype->ty == TY::Tsarray || tbtype->ty == TY::Tstruct)
!       && dmd::isIntegral (ebtype))
      {
        tree ret = build_expr (expr, false, literalp);
        gcc_assert (integer_zerop (ret));
*************** d_array_convert (Type *etype, Expression
*** 974,980 ****
        /* Convert single element to an array.  */
        tree expr = build_expr (exp);
  
!       if (!exp->isLvalue ())
  	{
  	  tree var = build_local_temp (TREE_TYPE (expr));
  	  expr = compound_expr (modify_expr (var, expr), var);
--- 974,980 ----
        /* Convert single element to an array.  */
        tree expr = build_expr (exp);
  
!       if (!dmd::isLvalue (exp))
  	{
  	  tree var = build_local_temp (TREE_TYPE (expr));
  	  expr = compound_expr (modify_expr (var, expr), var);
diff -Nrcpad gcc-16-20260201/gcc/d/d-diagnostic.cc gcc-16-20260208/gcc/d/d-diagnostic.cc
*** gcc-16-20260201/gcc/d/d-diagnostic.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/d-diagnostic.cc	Sun Feb  8 22:32:07 2026
*************** d_diagnostic_report_diagnostic (const So
*** 221,228 ****
     error count depending on how KIND is treated.  */
  
  void D_ATTRIBUTE_FORMAT(2,0) ATTRIBUTE_GCC_DIAG(2,0)
! verrorReport (const SourceLoc loc, const char *format, va_list ap,
! 	      ErrorKind kind, const char *prefix1, const char *prefix2)
  {
    enum diagnostics::kind diag_kind = diagnostics::kind::unspecified;
    int opt = 0;
--- 221,228 ----
     error count depending on how KIND is treated.  */
  
  void D_ATTRIBUTE_FORMAT(2,0) ATTRIBUTE_GCC_DIAG(2,0)
! vreportDiagnostic (const SourceLoc loc, const char *format, va_list ap,
! 		   ErrorKind kind, const char *prefix1, const char *prefix2)
  {
    enum diagnostics::kind diag_kind = diagnostics::kind::unspecified;
    int opt = 0;
*************** verrorReport (const SourceLoc loc, const
*** 245,256 ****
    else if (kind == ErrorKind::warning)
      {
        if (global.gag || global.params.useWarnings == DIAGNOSTICoff)
! 	{
! 	  if (global.gag)
! 	    global.gaggedWarnings++;
! 
! 	  return;
! 	}
  
        /* Warnings don't count if not treated as errors.  */
        if (global.params.useWarnings == DIAGNOSTICerror)
--- 245,251 ----
    else if (kind == ErrorKind::warning)
      {
        if (global.gag || global.params.useWarnings == DIAGNOSTICoff)
! 	return;
  
        /* Warnings don't count if not treated as errors.  */
        if (global.params.useWarnings == DIAGNOSTICerror)
*************** verrorReport (const SourceLoc loc, const
*** 261,272 ****
    else if (kind == ErrorKind::deprecation)
      {
        if (global.params.useDeprecated == DIAGNOSTICerror)
! 	return verrorReport (loc, format, ap, ErrorKind::error, prefix1,
! 			     prefix2);
        else if (global.gag || global.params.useDeprecated != DIAGNOSTICinform)
  	{
  	  if (global.gag)
! 	    global.gaggedWarnings++;
  
  	  return;
  	}
--- 256,267 ----
    else if (kind == ErrorKind::deprecation)
      {
        if (global.params.useDeprecated == DIAGNOSTICerror)
! 	return vreportDiagnostic (loc, format, ap, ErrorKind::error, prefix1,
! 				  prefix2);
        else if (global.gag || global.params.useDeprecated != DIAGNOSTICinform)
  	{
  	  if (global.gag)
! 	    global.gaggedDeprecations++;
  
  	  return;
  	}
*************** verrorReport (const SourceLoc loc, const
*** 307,314 ****
     explicit location LOC.  This doesn't increase the global error count.  */
  
  void D_ATTRIBUTE_FORMAT(2,0) ATTRIBUTE_GCC_DIAG(2,0)
! verrorReportSupplemental (const SourceLoc loc, const char* format, va_list ap,
! 			  ErrorKind kind)
  {
    if (kind == ErrorKind::error)
      {
--- 302,309 ----
     explicit location LOC.  This doesn't increase the global error count.  */
  
  void D_ATTRIBUTE_FORMAT(2,0) ATTRIBUTE_GCC_DIAG(2,0)
! vsupplementalDiagnostic (const SourceLoc loc, const char* format, va_list ap,
! 			 ErrorKind kind)
  {
    if (kind == ErrorKind::error)
      {
*************** verrorReportSupplemental (const SourceLo
*** 323,329 ****
    else if (kind == ErrorKind::deprecation)
      {
        if (global.params.useDeprecated == DIAGNOSTICerror)
! 	return verrorReportSupplemental (loc, format, ap, ErrorKind::error);
        else if (global.params.useDeprecated != DIAGNOSTICinform || global.gag)
  	return;
      }
--- 318,324 ----
    else if (kind == ErrorKind::deprecation)
      {
        if (global.params.useDeprecated == DIAGNOSTICerror)
! 	return vsupplementalDiagnostic (loc, format, ap, ErrorKind::error);
        else if (global.params.useDeprecated != DIAGNOSTICinform || global.gag)
  	return;
      }
diff -Nrcpad gcc-16-20260201/gcc/d/d-incpath.cc gcc-16-20260208/gcc/d/d-incpath.cc
*** gcc-16-20260201/gcc/d/d-incpath.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/d-incpath.cc	Sun Feb  8 22:32:07 2026
*************** add_globalpaths (Strings &paths)
*** 77,83 ****
        if (target == NULL || !FileName::exists (target))
  	{
  	  if (target)
! 	    free (CONST_CAST (char *, target));
  	  continue;
  	}
  
--- 77,83 ----
        if (target == NULL || !FileName::exists (target))
  	{
  	  if (target)
! 	    free (const_cast<char *> (target));
  	  continue;
  	}
  
*************** add_filepaths (Strings &paths)
*** 97,103 ****
  
        if (!FileName::exists (target))
  	{
! 	  free (CONST_CAST (char *, target));
  	  continue;
  	}
  
--- 97,103 ----
  
        if (!FileName::exists (target))
  	{
! 	  free (const_cast<char *> (target));
  	  continue;
  	}
  
diff -Nrcpad gcc-16-20260201/gcc/d/d-lang.cc gcc-16-20260208/gcc/d/d-lang.cc
*** gcc-16-20260201/gcc/d/d-lang.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/d-lang.cc	Sun Feb  8 22:32:07 2026
*************** d_handle_option (size_t scode, const cha
*** 455,461 ****
        break;
  
      case OPT_fdebug_:
!       if (Identifier::isValidIdentifier (CONST_CAST (char *, arg)))
  	{
  	  DebugCondition::addGlobalIdent (arg);
  	  break;
--- 455,461 ----
        break;
  
      case OPT_fdebug_:
!       if (Identifier::isValidIdentifier (const_cast<char *> (arg)))
  	{
  	  DebugCondition::addGlobalIdent (arg);
  	  break;
*************** d_handle_option (size_t scode, const cha
*** 700,706 ****
        break;
  
      case OPT_fversion_:
!       if (Identifier::isValidIdentifier (CONST_CAST (char *, arg)))
  	{
  	  VersionCondition::addGlobalIdent (arg);
  	  break;
--- 700,706 ----
        break;
  
      case OPT_fversion_:
!       if (Identifier::isValidIdentifier (const_cast<char *> (arg)))
  	{
  	  VersionCondition::addGlobalIdent (arg);
  	  break;
*************** d_handle_option (size_t scode, const cha
*** 777,782 ****
--- 777,790 ----
        d_option.stdinc = false;
        break;
  
+     case OPT_std_d2024:
+       global.params.edition = Edition::v2024;
+       break;
+ 
+     case OPT_std_d202y:
+       global.params.edition = Edition::v2025;
+       break;
+ 
      case OPT_v:
        global.params.v.verbose = value;
        break;
*************** d_parse_file (void)
*** 1270,1276 ****
      }
  
    /* Do deferred semantic analysis.  */
!   Module::runDeferredSemantic ();
  
    if (Module::deferred.length)
      {
--- 1278,1284 ----
      }
  
    /* Do deferred semantic analysis.  */
!   dmd::runDeferredSemantic ();
  
    if (Module::deferred.length)
      {
*************** d_parse_file (void)
*** 1300,1306 ****
        dmd::semantic2 (m, NULL);
      }
  
!   Module::runDeferredSemantic2 ();
  
    if (global.errors)
      goto had_errors;
--- 1308,1314 ----
        dmd::semantic2 (m, NULL);
      }
  
!   dmd::runDeferredSemantic2 ();
  
    if (global.errors)
      goto had_errors;
*************** d_parse_file (void)
*** 1331,1337 ****
  	}
      }
  
!   Module::runDeferredSemantic3 ();
  
    /* Check again, incase semantic3 pass loaded any more modules.  */
    while (builtin_modules.length != 0)
--- 1339,1345 ----
  	}
      }
  
!   dmd::runDeferredSemantic3 ();
  
    /* Check again, incase semantic3 pass loaded any more modules.  */
    while (builtin_modules.length != 0)
*************** d_parse_file (void)
*** 1413,1419 ****
  
    /* Generate C++ header files.  */
    if (global.params.cxxhdr.doOutput)
!     dmd::genCppHdrFiles (modules);
  
    if (global.errors)
      goto had_errors;
--- 1421,1427 ----
  
    /* Generate C++ header files.  */
    if (global.params.cxxhdr.doOutput)
!     dmd::genCppHdrFiles (modules, global.errorSink);
  
    if (global.errors)
      goto had_errors;
diff -Nrcpad gcc-16-20260201/gcc/d/d-spec.cc gcc-16-20260208/gcc/d/d-spec.cc
*** gcc-16-20260201/gcc/d/d-spec.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/d-spec.cc	Sun Feb  8 22:32:07 2026
*************** lang_specific_driver (cl_decoded_option
*** 162,168 ****
  	  break;
  
  	case OPT_defaultlib_:
! 	  free (CONST_CAST (char *, defaultlib));
  	  if (arg != NULL)
  	    {
  	      args[i] |= SKIPOPT;
--- 162,168 ----
  	  break;
  
  	case OPT_defaultlib_:
! 	  free (const_cast<char *> (defaultlib));
  	  if (arg != NULL)
  	    {
  	      args[i] |= SKIPOPT;
*************** lang_specific_driver (cl_decoded_option
*** 171,177 ****
  	  break;
  
  	case OPT_debuglib_:
! 	  free (CONST_CAST (char *, debuglib));
  	  if (arg != NULL)
  	    {
  	      args[i] |= SKIPOPT;
--- 171,177 ----
  	  break;
  
  	case OPT_debuglib_:
! 	  free (const_cast<char *> (debuglib));
  	  if (arg != NULL)
  	    {
  	      args[i] |= SKIPOPT;
diff -Nrcpad gcc-16-20260201/gcc/d/d-target.cc gcc-16-20260208/gcc/d/d-target.cc
*** gcc-16-20260201/gcc/d/d-target.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/d-target.cc	Sun Feb  8 22:32:07 2026
*************** unsigned
*** 220,226 ****
  Target::fieldalign (Type *type)
  {
    /* Work out the correct alignment for the field decl.  */
!   unsigned int align = type->alignsize () * BITS_PER_UNIT;
  
  #ifdef BIGGEST_FIELD_ALIGNMENT
    align = MIN (align, (unsigned) BIGGEST_FIELD_ALIGNMENT);
--- 220,226 ----
  Target::fieldalign (Type *type)
  {
    /* Work out the correct alignment for the field decl.  */
!   unsigned int align = dmd::alignsize (type) * BITS_PER_UNIT;
  
  #ifdef BIGGEST_FIELD_ALIGNMENT
    align = MIN (align, (unsigned) BIGGEST_FIELD_ALIGNMENT);
*************** Target::isVectorTypeSupported (int sz, T
*** 274,280 ****
      type = Type::tuns8;
  
    /* No support for non-trivial types, complex types, or booleans.  */
!   if (!type->isTypeBasic () || type->isComplex () || type->ty == TY::Tbool)
      return 2;
  
    /* In [simd/vector extensions], which vector types are supported depends on
--- 274,280 ----
      type = Type::tuns8;
  
    /* No support for non-trivial types, complex types, or booleans.  */
!   if (!type->isTypeBasic () || dmd::isComplex (type) || type->ty == TY::Tbool)
      return 2;
  
    /* In [simd/vector extensions], which vector types are supported depends on
*************** Target::isVectorOpSupported (Type *type,
*** 300,306 ****
      return true;
  
    /* Don't support if type is non-scalar, such as __vector(void[]).  */
!   if (!type->isScalar ())
      return false;
  
    /* Don't support if expression cannot be represented.  */
--- 300,306 ----
      return true;
  
    /* Don't support if type is non-scalar, such as __vector(void[]).  */
!   if (!dmd::isScalar (type))
      return false;
  
    /* Don't support if expression cannot be represented.  */
*************** Target::isVectorOpSupported (Type *type,
*** 314,320 ****
      case EXP::mod:
      case EXP::modAssign:
        /* fmod() is lowered as a function call.  */
!       if (type->isFloating ())
  	return false;
        break;
  
--- 314,320 ----
      case EXP::mod:
      case EXP::modAssign:
        /* fmod() is lowered as a function call.  */
!       if (dmd::isFloating (type))
  	return false;
        break;
  
diff -Nrcpad gcc-16-20260201/gcc/d/d-tree.h gcc-16-20260208/gcc/d/d-tree.h
*** gcc-16-20260201/gcc/d/d-tree.h	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/d-tree.h	Sun Feb  8 22:32:07 2026
*************** extern void d_defer_declaration (Declara
*** 694,699 ****
--- 694,700 ----
  extern void d_finish_compilation (tree *, int);
  
  /* In runtime.cc.  */
+ extern tree build_libcall (libcall_fn, int ...);
  extern tree build_libcall (libcall_fn, Type *, int ...);
  
  /* In typeinfo.cc.  */
diff -Nrcpad gcc-16-20260201/gcc/d/decl.cc gcc-16-20260208/gcc/d/decl.cc
*** gcc-16-20260201/gcc/d/decl.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/decl.cc	Sun Feb  8 22:32:07 2026
*************** public:
*** 783,789 ****
        {
  	/* Do not store variables we cannot take the address of,
  	   but keep the values for purposes of debugging.  */
! 	if (d->type->isScalar () && !dmd::hasPointers (d->type))
  	  {
  	    tree decl = get_symbol_decl (d);
  	    d_pushdecl (decl);
--- 783,789 ----
        {
  	/* Do not store variables we cannot take the address of,
  	   but keep the values for purposes of debugging.  */
! 	if (dmd::isScalar (d->type) && !dmd::hasPointers (d->type))
  	  {
  	    tree decl = get_symbol_decl (d);
  	    d_pushdecl (decl);
*************** public:
*** 969,975 ****
  
  	doing_semantic_analysis_p = true;
  	dmd::functionSemantic3 (d);
! 	Module::runDeferredSemantic3 ();
  	doing_semantic_analysis_p = false;
        }
  
--- 969,975 ----
  
  	doing_semantic_analysis_p = true;
  	dmd::functionSemantic3 (d);
! 	dmd::runDeferredSemantic3 ();
  	doing_semantic_analysis_p = false;
        }
  
*************** public:
*** 1049,1058 ****
  	else
  	  d->shidden = resdecl;
  
  	if (d->isNRVO () && d->nrvo_var)
! 	  {
! 	    tree var = get_symbol_decl (d->nrvo_var);
  
  	    /* Copy name from VAR to RESULT.  */
  	    DECL_NAME (resdecl) = DECL_NAME (var);
  	    /* Don't forget that we take its address.  */
--- 1049,1063 ----
  	else
  	  d->shidden = resdecl;
  
+ 	tree var = NULL_TREE;
+ 
  	if (d->isNRVO () && d->nrvo_var)
! 	  var = get_symbol_decl (d->nrvo_var);
! 	else if (d->vresult)
! 	  var = get_symbol_decl (d->vresult);
  
+ 	if (var != NULL_TREE)
+ 	  {
  	    /* Copy name from VAR to RESULT.  */
  	    DECL_NAME (resdecl) = DECL_NAME (var);
  	    /* Don't forget that we take its address.  */
*************** get_symbol_decl (Declaration *decl)
*** 1250,1256 ****
        /* CONST_DECL was initially intended for enumerals and may be used for
  	 scalars in general, but not for aggregates.  Here a non-constant
  	 value is generated anyway so as its value can be used.  */
!       if (!vd->canTakeAddressOf () && !vd->type->isScalar ())
  	{
  	  gcc_assert (vd->_init && !vd->_init->isVoidInitializer ());
  	  Expression *ie = dmd::initializerToExpression (vd->_init);
--- 1255,1261 ----
        /* CONST_DECL was initially intended for enumerals and may be used for
  	 scalars in general, but not for aggregates.  Here a non-constant
  	 value is generated anyway so as its value can be used.  */
!       if (!vd->canTakeAddressOf () && !dmd::isScalar (vd->type))
  	{
  	  gcc_assert (vd->_init && !vd->_init->isVoidInitializer ());
  	  Expression *ie = dmd::initializerToExpression (vd->_init);
*************** get_symbol_decl (Declaration *decl)
*** 1310,1316 ****
  	  /* Cannot make an expression out of a void initializer.  */
  	  gcc_assert (vd->_init && !vd->_init->isVoidInitializer ());
  	  /* Non-scalar manifest constants have already been dealt with.  */
! 	  gcc_assert (vd->type->isScalar ());
  
  	  Expression *ie = dmd::initializerToExpression (vd->_init);
  	  DECL_INITIAL (decl->csym) = build_expr (ie, true);
--- 1315,1321 ----
  	  /* Cannot make an expression out of a void initializer.  */
  	  gcc_assert (vd->_init && !vd->_init->isVoidInitializer ());
  	  /* Non-scalar manifest constants have already been dealt with.  */
! 	  gcc_assert (dmd::isScalar (vd->type));
  
  	  Expression *ie = dmd::initializerToExpression (vd->_init);
  	  DECL_INITIAL (decl->csym) = build_expr (ie, true);
*************** make_thunk (FuncDeclaration *decl, int o
*** 2050,2056 ****
        unsigned identlen = IDENTIFIER_LENGTH (target_name) + 14;
        ident = XNEWVEC (const char, identlen);
  
!       snprintf (CONST_CAST (char *, ident), identlen,
  		"_DTi%u%s", offset, IDENTIFIER_POINTER (target_name));
      }
  
--- 2055,2061 ----
        unsigned identlen = IDENTIFIER_LENGTH (target_name) + 14;
        ident = XNEWVEC (const char, identlen);
  
!       snprintf (const_cast<char *> (ident), identlen,
  		"_DTi%u%s", offset, IDENTIFIER_POINTER (target_name));
      }
  
*************** make_thunk (FuncDeclaration *decl, int o
*** 2060,2066 ****
    d_keep (thunk);
  
    if (decl->resolvedLinkage () != LINK::cpp)
!     free (CONST_CAST (char *, ident));
  
    /* Thunks are connected to the definitions of the functions, so thunks are
       not produced for external functions.  */
--- 2065,2071 ----
    d_keep (thunk);
  
    if (decl->resolvedLinkage () != LINK::cpp)
!     free (const_cast<char *> (ident));
  
    /* Thunks are connected to the definitions of the functions, so thunks are
       not produced for external functions.  */
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/MERGE gcc-16-20260208/gcc/d/dmd/MERGE
*** gcc-16-20260201/gcc/d/dmd/MERGE	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/MERGE	Sun Feb  8 22:32:07 2026
***************
*** 1,4 ****
! e1f6680f50d147846316c2fa3363461a2aa7ac1d
  
  The first line of this file holds the git revision number of the last
  merge done from the dlang/dmd repository.
--- 1,4 ----
! 24a41073c2dbf456d4f7a6fe6a7965d6ce6fc5cb
  
  The first line of this file holds the git revision number of the last
  merge done from the dlang/dmd repository.
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/README.md gcc-16-20260208/gcc/d/dmd/README.md
*** gcc-16-20260201/gcc/d/dmd/README.md	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/README.md	Sun Feb  8 22:32:07 2026
*************** Note that these groups have no strict me
*** 47,52 ****
--- 47,53 ----
  | [compiler.d](https://github.com/dlang/dmd/blob/master/compiler/src/dmd/compiler.d)   | Describe a back-end compiler and implements compiler-specific actions |
  | [deps.d](https://github.com/dlang/dmd/blob/master/compiler/src/dmd/deps.d)           | Implement the `-deps` and `-makedeps` switches                        |
  | [timetrace.d](https://github.com/dlang/dmd/blob/master/compiler/src/dmd/timetrace.d) | Build time profiling utility                                          |
+ | [targetcompiler.d](https://github.com/dlang/dmd/blob/master/compiler/src/dmd/targetcompiler.d) | Differences in building gdc, ldc and dmd                    |
  
  ### Lexing / parsing
  
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/VERSION gcc-16-20260208/gcc/d/dmd/VERSION
*** gcc-16-20260201/gcc/d/dmd/VERSION	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/VERSION	Sun Feb  8 22:32:07 2026
***************
*** 1 ****
! v2.112.0-beta.1
--- 1 ----
! v2.112.0
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/aggregate.d gcc-16-20260208/gcc/d/dmd/aggregate.d
*** gcc-16-20260201/gcc/d/dmd/aggregate.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/aggregate.d	Sun Feb  8 22:32:07 2026
*************** import core.checkedint;
*** 20,41 ****
  import dmd.aliasthis;
  import dmd.arraytypes;
  import dmd.astenums;
- import dmd.attrib;
  import dmd.declaration;
  import dmd.dscope;
- import dmd.dstruct;
  import dmd.dsymbol;
- import dmd.dsymbolsem : determineSize;
- import dmd.dtemplate;
  import dmd.errors;
  import dmd.expression;
  import dmd.func;
- import dmd.hdrgen;
- import dmd.id;
  import dmd.identifier;
  import dmd.location;
  import dmd.mtype;
- import dmd.tokens;
  import dmd.visitor;
  
  /**
--- 20,34 ----
*************** extern (C++) abstract class AggregateDec
*** 145,150 ****
--- 138,144 ----
      DtorDeclaration fieldDtor;  /// function destructing (non-inherited) fields
  
      Expression getRTInfo;   /// pointer to GC info generated by object.RTInfo(this)
+     Scope* rtInfoScope;     /// scope to be used when evaluating getRTInfo
  
      ///
      Visibility visibility;
*************** extern (C++) abstract class AggregateDec
*** 159,182 ****
      }
  
      /***************************************
-      * Create a new scope from sc.
-      * semantic, semantic2 and semantic3 will use this for aggregate members.
-      */
-     Scope* newScope(Scope* sc)
-     {
-         auto sc2 = sc.push(this);
-         sc2.stc &= STC.flowThruAggregate;
-         sc2.parent = this;
-         sc2.inunion = isUnionDeclaration();
-         sc2.visibility = Visibility(Visibility.Kind.public_);
-         sc2.explicitVisibility = false;
-         sc2.aligndecl = null;
-         sc2.userAttribDecl = null;
-         sc2.namespace = null;
-         return sc2;
-     }
- 
-     /***************************************
       * Returns:
       *      The total number of fields minus the number of hidden fields.
       */
--- 153,158 ----
*************** extern (C++) abstract class AggregateDec
*** 185,216 ****
          return fields.length - isNested() - (vthis2 !is null);
      }
  
-     override final ulong size(Loc loc)
-     {
-         //printf("+AggregateDeclaration::size() %s, scope = %p, sizeok = %d\n", toChars(), _scope, sizeok);
-         bool ok = determineSize(this, loc);
-         //printf("-AggregateDeclaration::size() %s, scope = %p, sizeok = %d\n", toChars(), _scope, sizeok);
-         return ok ? structsize : SIZE_INVALID;
-     }
- 
- 
-     override final Type getType()
-     {
-         /* Apply storage classes to forward references. (Issue 22254)
-          * Note: Avoid interfaces for now. Implementing qualifiers on interface
-          * definitions exposed some issues in their TypeInfo generation in DMD.
-          * Related PR: https://github.com/dlang/dmd/pull/13312
-          */
-         if (semanticRun == PASS.initial && !isInterfaceDeclaration())
-         {
-             auto stc = storage_class;
-             if (_scope)
-                 stc |= _scope.stc;
-             type = type.addSTC(stc);
-         }
-         return type;
-     }
- 
      // is aggregate deprecated?
      override final bool isDeprecated() const
      {
--- 161,166 ----
*************** extern (C++) abstract class AggregateDec
*** 232,351 ****
          return enclosing !is null;
      }
  
-     /* Append vthis field (this.tupleof[$-1]) to make this aggregate type nested.
-      */
-     extern (D) final void makeNested()
-     {
-         if (enclosing) // if already nested
-             return;
-         if (sizeok == Sizeok.done)
-             return;
-         if (isUnionDeclaration() || isInterfaceDeclaration())
-             return;
-         if (storage_class & STC.static_)
-             return;
- 
-         // If nested struct, add in hidden 'this' pointer to outer scope
-         auto s = toParentLocal();
-         if (!s)
-             s = toParent2();
-         if (!s)
-             return;
-         Type t = null;
-         if (auto fd = s.isFuncDeclaration())
-         {
-             enclosing = fd;
- 
-             /* https://issues.dlang.org/show_bug.cgi?id=14422
-              * If a nested class parent is a function, its
-              * context pointer (== `outer`) should be void* always.
-              */
-             t = Type.tvoidptr;
-         }
-         else if (auto ad = s.isAggregateDeclaration())
-         {
-             if (isClassDeclaration() && ad.isClassDeclaration())
-             {
-                 enclosing = ad;
-             }
-             else if (isStructDeclaration())
-             {
-                 if (auto ti = ad.parent.isTemplateInstance())
-                 {
-                     enclosing = ti.enclosing;
-                 }
-             }
-             t = ad.handleType();
-         }
-         if (enclosing)
-         {
-             //printf("makeNested %s, enclosing = %s\n", toChars(), enclosing.toChars());
-             assert(t);
-             if (t.ty == Tstruct)
-                 t = Type.tvoidptr; // t should not be a ref type
- 
-             assert(!vthis);
-             vthis = new ThisDeclaration(loc, t);
-             //vthis.storage_class |= STC.ref_;
- 
-             // Emulate vthis.addMember()
-             members.push(vthis);
- 
-             // Emulate vthis.dsymbolSemantic()
-             vthis.storage_class |= STC.field;
-             vthis.parent = this;
-             vthis.visibility = Visibility(Visibility.Kind.public_);
-             vthis.alignment = t.alignment();
-             vthis.semanticRun = PASS.semanticdone;
- 
-             if (sizeok == Sizeok.fwd)
-                 fields.push(vthis);
- 
-             makeNested2();
-         }
-     }
- 
-     /* Append vthis2 field (this.tupleof[$-1]) to add a second context pointer.
-      */
-     extern (D) final void makeNested2()
-     {
-         if (vthis2)
-             return;
-         if (!vthis)
-             makeNested();   // can't add second before first
-         if (!vthis)
-             return;
-         if (sizeok == Sizeok.done)
-             return;
-         if (isUnionDeclaration() || isInterfaceDeclaration())
-             return;
-         if (storage_class & STC.static_)
-             return;
- 
-         auto s0 = toParentLocal();
-         auto s = toParent2();
-         if (!s || !s0 || s == s0)
-             return;
-         auto cd = s.isClassDeclaration();
-         Type t = cd ? cd.type : Type.tvoidptr;
- 
-         vthis2 = new ThisDeclaration(loc, t);
-         //vthis2.storage_class |= STC.ref_;
- 
-         // Emulate vthis2.addMember()
-         members.push(vthis2);
- 
-         // Emulate vthis2.dsymbolSemantic()
-         vthis2.storage_class |= STC.field;
-         vthis2.parent = this;
-         vthis2.visibility = Visibility(Visibility.Kind.public_);
-         vthis2.alignment = t.alignment();
-         vthis2.semanticRun = PASS.semanticdone;
- 
-         if (sizeok == Sizeok.fwd)
-             fields.push(vthis2);
-     }
- 
      override final bool isExport() const
      {
          return visibility.kind == Visibility.Kind.export_;
--- 182,187 ----
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/aggregate.h gcc-16-20260208/gcc/d/dmd/aggregate.h
*** gcc-16-20260201/gcc/d/dmd/aggregate.h	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/aggregate.h	Sun Feb  8 22:32:07 2026
*************** namespace dmd
*** 48,53 ****
--- 48,54 ----
      bool fill(StructDeclaration* sd, Loc loc, Expressions &elements, bool ctorinit);
      bool isFuncHidden(ClassDeclaration* cd, FuncDeclaration* fd);
      Dsymbol* vtblSymbol(ClassDeclaration *cd);
+     bool fillVtbl(BaseClass *bc, ClassDeclaration *cd, FuncDeclarations *vtbl, int newinstance);
  }
  
  enum class ClassKind : uint8_t
*************** public:
*** 113,127 ****
      DtorDeclaration *fieldDtor; // function destructing (non-inherited) fields
  
      Expression *getRTInfo;      // pointer to GC info generated by object.RTInfo(this)
  
      Visibility visibility;
      d_bool noDefaultCtor;         // no default construction
      d_bool disableNew;            // disallow allocations using `new`
      Sizeok sizeok;              // set when structsize contains valid data
  
-     virtual Scope *newScope(Scope *sc);
-     uinteger_t size(Loc loc) override final;
-     Type *getType() override final;
      bool isDeprecated() const override final; // is aggregate deprecated?
      bool isNested() const;
      bool isExport() const override final;
--- 114,126 ----
      DtorDeclaration *fieldDtor; // function destructing (non-inherited) fields
  
      Expression *getRTInfo;      // pointer to GC info generated by object.RTInfo(this)
+     Scope* rtInfoScope;         // scope to be used when evaluating getRTInfo
  
      Visibility visibility;
      d_bool noDefaultCtor;         // no default construction
      d_bool disableNew;            // disallow allocations using `new`
      Sizeok sizeok;              // set when structsize contains valid data
  
      bool isDeprecated() const override final; // is aggregate deprecated?
      bool isNested() const;
      bool isExport() const override final;
*************** public:
*** 171,176 ****
--- 170,176 ----
      static StructDeclaration *create(Loc loc, Identifier *id, bool inObject);
      StructDeclaration *syntaxCopy(Dsymbol *s) override;
      const char *kind() const override;
+     bool hasCopyConstruction();
      bool zeroInit() const;          // !=0 if initialize with 0 fill
      bool zeroInit(bool v);
      bool hasIdentityAssign() const; // true if has identity opAssign
*************** struct BaseClass
*** 216,223 ****
  
      DArray<BaseClass> baseInterfaces;   // if BaseClass is an interface, these
                                          // are a copy of the InterfaceDeclaration::interfaces
- 
-     bool fillVtbl(ClassDeclaration *cd, FuncDeclarations *vtbl, int newinstance);
  };
  
  struct ClassFlags
--- 216,221 ----
*************** public:
*** 275,281 ****
      static ClassDeclaration *create(Loc loc, Identifier *id, BaseClasses *baseclasses, Dsymbols *members, bool inObject);
      const char *toPrettyChars(bool QualifyTypes = false) override;
      ClassDeclaration *syntaxCopy(Dsymbol *s) override;
-     Scope *newScope(Scope *sc) override;
  
      #define OFFSET_RUNTIME 0x76543210
      #define OFFSET_FWDREF 0x76543211
--- 273,278 ----
*************** public:
*** 290,297 ****
      virtual int vtblOffset() const;
      const char *kind() const override;
  
-     void addObjcSymbols(ClassDeclarations *classes, ClassDeclarations *categories) override final;
- 
      // Back end
      Dsymbol *vtblsym;
  
--- 287,292 ----
*************** class InterfaceDeclaration final : publi
*** 302,308 ****
  {
  public:
      InterfaceDeclaration *syntaxCopy(Dsymbol *s) override;
-     Scope *newScope(Scope *sc) override;
      bool isBaseOf(ClassDeclaration *cd, int *poffset) override;
      const char *kind() const override;
      int vtblOffset() const override;
--- 297,302 ----
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/arrayop.d gcc-16-20260208/gcc/d/dmd/arrayop.d
*** gcc-16-20260201/gcc/d/dmd/arrayop.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/arrayop.d	Sun Feb  8 22:32:07 2026
*************** import dmd.astenums;
*** 19,25 ****
  import dmd.dcast : implicitConvTo;
  import dmd.declaration;
  import dmd.dscope;
- import dmd.dsymbol;
  import dmd.errors;
  import dmd.expression;
  import dmd.expressionsem;
--- 19,24 ----
*************** import dmd.location;
*** 31,37 ****
  import dmd.mtype;
  import dmd.common.outbuffer;
  import dmd.tokens;
! import dmd.typesem : isAssignable;
  import dmd.visitor;
  
  /**********************************************
--- 30,36 ----
  import dmd.mtype;
  import dmd.common.outbuffer;
  import dmd.tokens;
! import dmd.typesem : isAssignable, nextOf, toBasetype;
  import dmd.visitor;
  
  /**********************************************
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/astcodegen.d gcc-16-20260208/gcc/d/dmd/astcodegen.d
*** gcc-16-20260201/gcc/d/dmd/astcodegen.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/astcodegen.d	Sun Feb  8 22:32:07 2026
*************** struct ASTCodegen
*** 32,47 ****
      public import dmd.nspace;
      public import dmd.statement;
      public import dmd.staticassert;
-     public import dmd.typesem;
-     public import dmd.ctfeexpr;
      public import dmd.init : Designator;
  
! 
      alias initializerToExpression   = dmd.initsem.initializerToExpression;
!     alias typeToExpression          = dmd.typesem.typeToExpression;
      alias UserAttributeDeclaration  = dmd.attrib.UserAttributeDeclaration;
      alias Ensure                    = dmd.func.Ensure; // workaround for bug in older DMD frontends
      alias ErrorExp                  = dmd.expression.ErrorExp;
  
      alias MODFlags                  = dmd.mtype.MODFlags;
      alias Type                      = dmd.mtype.Type;
--- 32,47 ----
      public import dmd.nspace;
      public import dmd.statement;
      public import dmd.staticassert;
      public import dmd.init : Designator;
+     public import dmd.typesem;
  
!     alias addSTC                    = dmd.typesem.addSTC;
      alias initializerToExpression   = dmd.initsem.initializerToExpression;
!     alias typeToExpression          = dmd.mtype.typeToExpression;
      alias UserAttributeDeclaration  = dmd.attrib.UserAttributeDeclaration;
      alias Ensure                    = dmd.func.Ensure; // workaround for bug in older DMD frontends
      alias ErrorExp                  = dmd.expression.ErrorExp;
+     alias ArgumentLabel             = dmd.expression.ArgumentLabel;
  
      alias MODFlags                  = dmd.mtype.MODFlags;
      alias Type                      = dmd.mtype.Type;
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/astenums.d gcc-16-20260208/gcc/d/dmd/astenums.d
*** gcc-16-20260201/gcc/d/dmd/astenums.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/astenums.d	Sun Feb  8 22:32:07 2026
*************** enum STC : ulong  // transfer changes to
*** 150,156 ****
  alias StorageClass = ulong;
  
  /********
!  * Determine if it's the ambigous case of where `return` attaches to.
   * Params:
   *   stc = STC flags
   * Returns:
--- 150,156 ----
  alias StorageClass = ulong;
  
  /********
!  * Determine if it's the ambiguous case of where `return` attaches to.
   * Params:
   *   stc = STC flags
   * Returns:
*************** extern (C++) struct structalign_t
*** 477,483 ****
    private:
      ushort value = 0;  // unknown
      enum STRUCTALIGN_DEFAULT = 1234;   // default = match whatever the corresponding C compiler does
!     bool pack;         // use #pragma pack semantics
  
    public:
    pure @safe @nogc nothrow:
--- 477,488 ----
    private:
      ushort value = 0;  // unknown
      enum STRUCTALIGN_DEFAULT = 1234;   // default = match whatever the corresponding C compiler does
!     ubyte flags;       // Align semantic flags
!     enum : ubyte
!     {
!         PACK = 0x1,     // use #pragma pack semantics
!         ALIGNAS = 0x2,  // use _Alignas semantics
!     }
  
    public:
    pure @safe @nogc nothrow:
*************** extern (C++) struct structalign_t
*** 487,494 ****
      void setUnknown()      { value = 0; }
      void set(uint value)   { this.value = cast(ushort)value; }
      uint get() const       { return value; }
!     bool isPack() const    { return pack; }
!     void setPack(bool pack) { this.pack = pack; }
  }
  
  /// Use to return D arrays from C++ functions
--- 492,501 ----
      void setUnknown()      { value = 0; }
      void set(uint value)   { this.value = cast(ushort)value; }
      uint get() const       { return value; }
!     bool isPack() const    { return !!(flags & PACK); }
!     void setPack()         { flags |= PACK; }
!     bool fromAlignas() const { return !!(flags & ALIGNAS); }
!     void setAlignas()      { flags |= ALIGNAS; }
  }
  
  /// Use to return D arrays from C++ functions
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/attrib.d gcc-16-20260208/gcc/d/dmd/attrib.d
*** gcc-16-20260201/gcc/d/dmd/attrib.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/attrib.d	Sun Feb  8 22:32:07 2026
***************
*** 24,47 ****
  
  module dmd.attrib;
  
- import dmd.aggregate;
  import dmd.arraytypes;
  import dmd.astenums;
  import dmd.cond;
- import dmd.declaration;
  import dmd.dmodule;
  import dmd.dscope;
  import dmd.dsymbol;
  import dmd.expression;
- import dmd.func;
  import dmd.hdrgen : visibilityToBuffer;
  import dmd.id;
  import dmd.identifier;
  import dmd.location;
- import dmd.mtype;
- import dmd.objc; // for objc.addSymbols
  import dmd.common.outbuffer;
- import dmd.root.array; // for each
  import dmd.visitor;
  
  /***********************************************************
--- 24,41 ----
*************** extern (C++) abstract class AttribDeclar
*** 108,120 ****
          return "attribute";
      }
  
-     /****************************************
-      */
-     override final void addObjcSymbols(ClassDeclarations* classes, ClassDeclarations* categories)
-     {
-         objc.addSymbols(this, classes, categories);
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 102,107 ----
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/blockexit.d gcc-16-20260208/gcc/d/dmd/blockexit.d
*** gcc-16-20260201/gcc/d/dmd/blockexit.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/blockexit.d	Sun Feb  8 22:32:07 2026
*************** import dmd.dclass;
*** 20,25 ****
--- 20,27 ----
  import dmd.declaration;
  import dmd.errorsink;
  import dmd.expression;
+ import dmd.expressionsem : toBool;
+ import dmd.typesem : toBasetype;
  import dmd.func;
  import dmd.globals;
  import dmd.id;
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/builtin.d gcc-16-20260208/gcc/d/dmd/builtin.d
*** gcc-16-20260201/gcc/d/dmd/builtin.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/builtin.d	Sun Feb  8 22:32:07 2026
*************** module dmd.builtin;
*** 15,20 ****
--- 15,22 ----
  
  import dmd.arraytypes;
  import dmd.expression;
+ import dmd.expressionsem : toInteger, toReal;
+ import dmd.typesem : isFloating, toBasetype;
  import dmd.func;
  import dmd.location;
  
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/canthrow.d gcc-16-20260208/gcc/d/dmd/canthrow.d
*** gcc-16-20260201/gcc/d/dmd/canthrow.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/canthrow.d	Sun Feb  8 22:32:07 2026
***************
*** 14,32 ****
  module dmd.canthrow;
  
  import dmd.aggregate;
- import dmd.arraytypes;
- import dmd.attrib;
  import dmd.astenums;
  import dmd.blockexit : BE, checkThrow;
- import dmd.declaration;
  import dmd.dsymbol;
  import dmd.dsymbolsem : include, toAlias;
  import dmd.errorsink;
  import dmd.expression;
! import dmd.expressionsem : errorSupplementalInferredAttr;
  import dmd.func;
  import dmd.globals;
- import dmd.init;
  import dmd.mtype;
  import dmd.tokens;
  import dmd.visitor;
--- 14,29 ----
  module dmd.canthrow;
  
  import dmd.aggregate;
  import dmd.astenums;
  import dmd.blockexit : BE, checkThrow;
  import dmd.dsymbol;
  import dmd.dsymbolsem : include, toAlias;
  import dmd.errorsink;
  import dmd.expression;
! import dmd.expressionsem;
! import dmd.typesem;
  import dmd.func;
  import dmd.globals;
  import dmd.mtype;
  import dmd.tokens;
  import dmd.visitor;
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/chkformat.d gcc-16-20260208/gcc/d/dmd/chkformat.d
*** gcc-16-20260201/gcc/d/dmd/chkformat.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/chkformat.d	Sun Feb  8 22:32:07 2026
*************** import dmd.typesem;
*** 25,30 ****
--- 25,63 ----
  import dmd.target;
  
  
+ /**********************************************
+  * While in general printf is not @safe (and should be marked @system), many uses of printf are safe.
+  * This function determines if a particular call of printf is safe.
+  * Params:
+  *      format = printf format string
+  * Returns:
+  *      true if @safe
+  */
+ public
+ bool isFormatSafe(scope const char[] format)
+ {
+     //printf("isFormatSafe('%.*s')\n", cast(int)format.length, format.ptr);
+     /* Only need to check the format string, any other errors are checked
+      * for later with checkPrintfFormat()
+      */
+     for (size_t i = 0; i < format.length;)
+     {
+         if (format[i] != '%')
+         {
+             ++i;
+             continue;
+         }
+         bool widthStar;
+         bool precisionStar;
+         size_t j = i;
+         const fmt = parsePrintfFormatSpecifier(format, j, widthStar, precisionStar);
+         i = j;
+         if (fmt == Format.s || fmt == Format.ls || fmt == Format.error)
+             return false;
+     }
+     return true;
+ }
+ 
  /******************************************
   * Check that arguments to a printf format string are compatible
   * with that string. Issue errors for incompatibilities.
*************** import dmd.target;
*** 65,71 ****
  public
  bool checkPrintfFormat(Loc loc, scope const char[] format, scope Expression[] args, bool isVa_list, ErrorSink eSink)
  {
!     //printf("checkPrintFormat('%.*s')\n", cast(int)format.length, format.ptr);
      size_t n;    // index in args
      for (size_t i = 0; i < format.length;)
      {
--- 98,104 ----
  public
  bool checkPrintfFormat(Loc loc, scope const char[] format, scope Expression[] args, bool isVa_list, ErrorSink eSink)
  {
!     //printf("checkPrintfFormat('%.*s')\n", cast(int)format.length, format.ptr);
      size_t n;    // index in args
      for (size_t i = 0; i < format.length;)
      {
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/common/bitfields.d gcc-16-20260208/gcc/d/dmd/common/bitfields.d
*** gcc-16-20260201/gcc/d/dmd/common/bitfields.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/common/bitfields.d	Sun Feb  8 22:32:07 2026
***************
*** 10,15 ****
--- 10,18 ----
   */
  module dmd.common.bitfields;
  
+ nothrow:
+ @safe:
+ 
  //version = Has_Bitfields; // does not work (yet) because hashOf doesn't work on bitfields
  version(Has_Bitfields)
      version = Debugger_friendly; // without Has_Bitfields, this uses more space by using S
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/common/file.d gcc-16-20260208/gcc/d/dmd/common/file.d
*** gcc-16-20260201/gcc/d/dmd/common/file.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/common/file.d	Sun Feb  8 22:32:07 2026
*************** version (Windows)
*** 32,41 ****
  {
      import core.stdc.wchar_;
      import core.sys.windows.winbase;
!     import core.sys.windows.winnls : CP_ACP;
      import core.sys.windows.winnt;
  
!     enum CodePage = CP_ACP; // assume filenames encoded in system default Windows ANSI code page
      enum invalidHandle = INVALID_HANDLE_VALUE;
  }
  else version (Posix)
--- 32,41 ----
  {
      import core.stdc.wchar_;
      import core.sys.windows.winbase;
!     import core.sys.windows.winnls : CP_UTF8;
      import core.sys.windows.winnt;
  
!     enum CodePage = CP_UTF8; // assume filenames already gone through Windows ANSI code page -> UTF8 conversion
      enum invalidHandle = INVALID_HANDLE_VALUE;
  }
  else version (Posix)
*************** else
*** 54,60 ****
  
  
  
- 
  nothrow:
  
  /**
--- 54,59 ----
*************** extern(D) static bool writeFile(const(ch
*** 472,492 ****
      {
          int fd = open(name, O_CREAT | O_WRONLY | O_TRUNC, (6 << 6) | (4 << 3) | 4);
          if (fd == -1)
!             goto err;
          if (.write(fd, data.ptr, data.length) != data.length)
!             goto err2;
          if (close(fd) == -1)
!             goto err;
          return true;
-     err2:
-         close(fd);
-         .remove(name);
-     err:
-         return false;
      }
      else version (Windows)
      {
-         DWORD numwritten; // here because of the gotos
          const nameStr = name[0 .. strlen(name)];
          // work around Windows file path length limitation
          // (see documentation for extendedPathThen).
--- 471,489 ----
      {
          int fd = open(name, O_CREAT | O_WRONLY | O_TRUNC, (6 << 6) | (4 << 3) | 4);
          if (fd == -1)
!             return false;
          if (.write(fd, data.ptr, data.length) != data.length)
!         {
!             close(fd);
!             .remove(name);
!             return false;
!         }
          if (close(fd) == -1)
!             return false;
          return true;
      }
      else version (Windows)
      {
          const nameStr = name[0 .. strlen(name)];
          // work around Windows file path length limitation
          // (see documentation for extendedPathThen).
*************** extern(D) static bool writeFile(const(ch
*** 499,518 ****
                                  FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN,
                                  null));
          if (h == INVALID_HANDLE_VALUE)
!             goto err;
! 
          if (WriteFile(h, data.ptr, cast(DWORD)data.length, &numwritten, null) != TRUE)
!             goto err2;
          if (numwritten != data.length)
!             goto err2;
          if (!CloseHandle(h))
!             goto err;
          return true;
-     err2:
-         CloseHandle(h);
-         nameStr.extendedPathThen!(p => DeleteFileW(p.ptr));
-     err:
-         return false;
      }
      else
      {
--- 496,516 ----
                                  FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN,
                                  null));
          if (h == INVALID_HANDLE_VALUE)
!             return false;
!         bool errorRet()
!         {
!             CloseHandle(h);
!             nameStr.extendedPathThen!(p => DeleteFileW(p.ptr));
!             return false;
!         }
!         DWORD numwritten;
          if (WriteFile(h, data.ptr, cast(DWORD)data.length, &numwritten, null) != TRUE)
!             return errorRet();
          if (numwritten != data.length)
!             return errorRet();
          if (!CloseHandle(h))
!             return false;
          return true;
      }
      else
      {
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/common/smallbuffer.d gcc-16-20260208/gcc/d/dmd/common/smallbuffer.d
*** gcc-16-20260201/gcc/d/dmd/common/smallbuffer.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/common/smallbuffer.d	Sun Feb  8 22:32:07 2026
*************** version(Windows) wchar[] toWStringz(scop
*** 121,136 ****
      size_t charsToWchars(scope const(char)[] narrow, scope wchar[] buffer)
      {
          // https://learn.microsoft.com/en-us/windows/win32/api/stringapiset/nf-stringapiset-multibytetowidechar
!         import core.sys.windows.winnls : MultiByteToWideChar, CP_ACP;
!         return MultiByteToWideChar(CP_ACP, 0, narrow.ptr, cast(int) narrow.length, buffer.ptr, cast(int) buffer.length);
      }
  
!     size_t length = charsToWchars(narrow, buffer[]);
!     if (length >= buffer.length) // not enough room in buffer[]
      {
          buffer.create(length + 1); // extend buffer length
!         length = charsToWchars(narrow, buffer[]);  // try again
!         assert(length < buffer.length);
      }
      buffer[length] = 0;
      return buffer[0 .. length];
--- 121,140 ----
      size_t charsToWchars(scope const(char)[] narrow, scope wchar[] buffer)
      {
          // https://learn.microsoft.com/en-us/windows/win32/api/stringapiset/nf-stringapiset-multibytetowidechar
!         import core.sys.windows.winnls : MultiByteToWideChar, CP_UTF8;
!         return MultiByteToWideChar(CP_UTF8, 0, narrow.ptr, cast(int) narrow.length, buffer.ptr, cast(int) buffer.length);
      }
  
!     size_t length = charsToWchars(narrow, buffer[0..$-1]);
!     if (length == 0 && narrow.length > 0) // not enough room in buffer[]
      {
+         import core.sys.windows.winbase : GetLastError;
+         import core.sys.windows.winerror : ERROR_INSUFFICIENT_BUFFER;
+         assert(GetLastError() == ERROR_INSUFFICIENT_BUFFER);
+         length = charsToWchars(narrow, []);
          buffer.create(length + 1); // extend buffer length
!         length = charsToWchars(narrow, buffer[0..length]);  // try again
!         assert(length > 0 && length < buffer.length);
      }
      buffer[length] = 0;
      return buffer[0 .. length];
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/cond.d gcc-16-20260208/gcc/d/dmd/cond.d
*** gcc-16-20260201/gcc/d/dmd/cond.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/cond.d	Sun Feb  8 22:32:07 2026
*************** import core.stdc.string;
*** 17,41 ****
  import dmd.arraytypes;
  import dmd.astenums;
  import dmd.ast_node;
- import dmd.dcast;
- import dmd.dinterpret;
  import dmd.dmodule;
  import dmd.dscope;
- import dmd.dsymbol;
  import dmd.errors;
  import dmd.expression;
  import dmd.globals;
  import dmd.identifier;
  import dmd.location;
  import dmd.mtype;
- import dmd.optimize;
  import dmd.common.outbuffer;
  import dmd.rootobject;
  import dmd.root.string;
  import dmd.tokens;
  import dmd.utils;
  import dmd.visitor;
- import dmd.id;
  import dmd.statement;
  import dmd.declaration;
  import dmd.dstruct;
--- 17,36 ----
*************** extern (C++) final class StaticForeach :
*** 154,159 ****
--- 149,155 ----
          auto tf = new TypeFunction(ParameterList(), null, LINK.default_, STC.none);
          auto fd = new FuncLiteralDeclaration(loc, loc, tf, TOK.reserved, null);
          fd.fbody = s;
+         fd.skipCodegen = true;
          auto fe = new FuncExp(loc, fd);
          auto ce = new CallExp(loc, fe, new Expressions());
          return ce;
*************** extern (C++) final class StaticForeach :
*** 234,248 ****
      {   // TODO: move to druntime?
          return new CallExp(loc, new TypeExp(loc, type), e);
      }
- 
-     /*****************************************
-      * Returns:
-      *     `true` iff ready to call `dmd.statementsem.makeTupleForeach`.
-      */
-     extern(D) bool ready()
-     {
-         return aggrfe && aggrfe.aggr && aggrfe.aggr.type && aggrfe.aggr.type.toBasetype().ty == Ttuple;
-     }
  }
  
  /***********************************************************
--- 230,235 ----
*************** extern (C++) final class VersionConditio
*** 364,369 ****
--- 351,357 ----
              case "Alpha_HardFloat":
              case "Alpha_SoftFloat":
              case "Android":
+             case "Apple":
              case "ARM":
              case "ARM_HardFloat":
              case "ARM_SoftFloat":
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/constfold.d gcc-16-20260208/gcc/d/dmd/constfold.d
*** gcc-16-20260201/gcc/d/dmd/constfold.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/constfold.d	Sun Feb  8 22:32:07 2026
*************** import dmd.declaration;
*** 25,31 ****
  import dmd.dstruct;
  import dmd.errors;
  import dmd.expression;
! import dmd.expressionsem : getField;
  import dmd.globals;
  import dmd.location;
  import dmd.mtype;
--- 25,31 ----
  import dmd.dstruct;
  import dmd.errors;
  import dmd.expression;
! import dmd.expressionsem;
  import dmd.globals;
  import dmd.location;
  import dmd.mtype;
*************** import dmd.root.utf;
*** 37,43 ****
  import dmd.sideeffect;
  import dmd.target;
  import dmd.tokens;
! import dmd.typesem : toDsymbol, equivalent, sarrayOf, size;
  
  private enum LOG = false;
  
--- 37,43 ----
  import dmd.sideeffect;
  import dmd.target;
  import dmd.tokens;
! import dmd.typesem;
  
  private enum LOG = false;
  
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/cparse.d gcc-16-20260208/gcc/d/dmd/cparse.d
*** gcc-16-20260201/gcc/d/dmd/cparse.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/cparse.d	Sun Feb  8 22:32:07 2026
*************** import dmd.root.array;
*** 27,33 ****
  import dmd.common.outbuffer;
  import dmd.root.rmem;
  import dmd.tokens;
! import dmd.typesem : size;
  
  /***********************************************************
   */
--- 27,33 ----
  import dmd.common.outbuffer;
  import dmd.root.rmem;
  import dmd.tokens;
! import dmd.typesem : size, makeImmutable, nextOf;
  
  /***********************************************************
   */
*************** final class CParser(AST) : Parser!AST
*** 36,41 ****
--- 36,43 ----
      AST.Dsymbols* symbols;      // symbols declared in current scope
  
      bool addFuncName;           /// add declaration of __func__ to function symbol table
+     bool refFuncName;           // declaration of __FUNCTION__
+     bool pretFuncName;          // declaration for __PRETTY_FUNCTION__
      bool importBuiltins;        /// seen use of C compiler builtins, so import __importc_builtins;
  
      private
*************** final class CParser(AST) : Parser!AST
*** 143,148 ****
--- 145,164 ----
                  return wrap;
              }
  
+             if (token.value == TOK._module)
+             {
+                 token.value = TOK.module_;
+                 auto oldMd = this.md;
+                 parseModuleDeclaration();
+                 if (oldMd)
+                 {
+                     // We only use the first module declaration,
+                     // subsequent __module statements should only come from #included files
+                     this.md = oldMd;
+                 }
+                 continue;
+             }
+ 
              /* GNU Extensions
               * external-declaration:
               *    simple-asm-expr ;
*************** final class CParser(AST) : Parser!AST
*** 262,269 ****
                  {
                      /* If tokens look like a declaration, assume it is one
                       */
!                     auto tk = &token;
!                     if (isCDeclaration(tk))
                          goto Ldeclaration;
                      goto Lexp;
                  }
--- 278,284 ----
                  {
                      /* If tokens look like a declaration, assume it is one
                       */
!                     if (startsDeclaration(&token))
                          goto Ldeclaration;
                      goto Lexp;
                  }
*************** final class CParser(AST) : Parser!AST
*** 739,744 ****
--- 754,765 ----
              const id = token.ident.toString();
              if (id.length > 2 && id[0] == '_' && id[1] == '_')  // leading double underscore
              {
+                 if (token.ident is Id.FUNCTION)
+                     refFuncName = true; // implicitly declare __FUNCTION__
+ 
+                 if (token.ident is Id.PRETTY_FUNCTION)
+                     pretFuncName = true; // implicitly declare __PRETTY_FUNCTION__
+ 
                  if (token.ident is Id.__func__)
                  {
                      addFuncName = true;     // implicitly declare __func__
*************** final class CParser(AST) : Parser!AST
*** 861,867 ****
          case TOK._assert:  // __check(assign-exp) extension
              nextToken();
              check(TOK.leftParenthesis, "`__check`");
!             e = parseAssignExp();
              check(TOK.rightParenthesis);
              e = new AST.AssertExp(loc, e, null);
              break;
--- 882,888 ----
          case TOK._assert:  // __check(assign-exp) extension
              nextToken();
              check(TOK.leftParenthesis, "`__check`");
!             e = cparseAssignExp();
              check(TOK.rightParenthesis);
              e = new AST.AssertExp(loc, e, null);
              break;
*************** final class CParser(AST) : Parser!AST
*** 1049,1097 ****
  
          case TOK._Alignof:
          case TOK.sizeof_:
!         {
!             Identifier id = token.value == TOK.sizeof_? Id.__sizeof : Id.__xalignof;
!             nextToken();
!             if (token.value == TOK.leftParenthesis)
!             {
!                 auto tk = peek(&token);
!                 if (isTypeName(tk))
!                 {
!                     /* Expression may be either be requesting the sizeof a type-name
!                      * or a compound literal, which requires checking whether
!                      * the next token is leftCurly
!                      */
!                     nextToken();
!                     auto t = cparseTypeName();
!                     check(TOK.rightParenthesis);
!                     if (token.value == TOK.leftCurly)
!                     {
!                         // ( type-name ) { initializer-list }
!                         auto ci = cparseInitializer();
!                         e = new AST.CompoundLiteralExp(loc, t, ci);
!                         e = cparsePostfixOperators(e);
!                     }
!                     else
!                     {
!                         // ( type-name )
!                         e = new AST.TypeExp(loc, t);
!                     }
!                 }
!                 else
!                 {
!                     // must be an expression
!                     e = cparseUnaryExp();
!                 }
!             }
!             else
!             {
!                 //C11 6.5.3
!                 e = cparseUnaryExp();
!             }
! 
!             e = new AST.DotIdExp(loc, e, id);
              break;
-         }
  
          case TOK.andAnd:
              /* https://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html
--- 1070,1077 ----
  
          case TOK._Alignof:
          case TOK.sizeof_:
!             e = cparseSizeofOrAlignofExp();
              break;
  
          case TOK.andAnd:
              /* https://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html
*************** final class CParser(AST) : Parser!AST
*** 1110,1115 ****
--- 1090,1137 ----
      }
  
      /**************
+      * C11 6.5.3.4
+      *    sizeof unary-expression
+      *    sizeof ( type-name )
+      *    _Alignof ( type-name )
+      *    _Alignof unary-expression // gcc extension
+      */
+     private AST.Expression cparseSizeofOrAlignofExp()
+     {
+         Identifier id = token.value == TOK.sizeof_? Id.__sizeof : Id.__xalignof;
+         AST.Expression e;
+         nextToken();
+         if (token.value == TOK.leftParenthesis && startsTypeName(peek(&token)))
+         {
+             /* Expression may be either be requesting the sizeof a type-name
+              * or a compound literal, which requires checking whether
+              * the next token is leftCurly
+              */
+             nextToken();
+             auto t = cparseTypeName();
+             check(TOK.rightParenthesis);
+             if (token.value == TOK.leftCurly)
+             {
+                 // ( type-name ) { initializer-list }
+                 auto ci = cparseInitializer();
+                 e = new AST.CompoundLiteralExp(loc, t, ci);
+                 e = cparsePostfixOperators(e);
+             }
+             else
+             {
+                 // ( type-name )
+                 e = new AST.TypeExp(loc, t);
+             }
+         }
+         else
+         {
+             // C11 6.5.3
+             e = cparseUnaryExp();
+         }
+         return new AST.DotIdExp(loc, e, id);
+     }
+ 
+     /**************
       * C11 6.5.4
       * cast-expression
       *    unary-expression
*************** final class CParser(AST) : Parser!AST
*** 1117,1190 ****
       */
      private AST.Expression cparseCastExp()
      {
-         if (token.value != TOK.leftParenthesis)
-             return cparseUnaryExp();
- 
          //printf("cparseCastExp()\n");
-         auto tk = peek(&token);
-         bool iscast;
-         bool isexp;
-         if (tk.value == TOK.identifier)
-         {
-             iscast = isTypedef(tk.ident);
-             isexp = !iscast;
-         }
-         if (isexp)
-         {
-             // ( identifier ) is an expression
-             return cparseUnaryExp();
-         }
  
          // If ( type-name )
!         auto pt = &token;
! 
!         if (!isCastExpression(pt))
!             return cparseUnaryExp();
! 
!         // Expression may be either a cast or a compound literal, which
!         // requires checking whether the next token is leftCurly
!         const loc = token.loc;
!         nextToken();
!         auto t = cparseTypeName();
!         check(TOK.rightParenthesis);
!         pt = &token;
! 
!         if (token.value == TOK.leftCurly)
          {
!             // C11 6.5.2.5 ( type-name ) { initializer-list }
!             auto ci = cparseInitializer();
!             auto ce = new AST.CompoundLiteralExp(loc, t, ci);
!             return cparsePostfixOperators(ce);
!         }
  
-         if (iscast)
-         {
              // ( type-name ) cast-expression
              auto ce = cparseCastExp();
              return new AST.CastExp(loc, ce, t);
          }
  
!         if (t.isTypeIdentifier() &&
!             isexp &&
!             token.value == TOK.leftParenthesis &&
!             !isCastExpression(pt))
!         {
!             /* (t)(...)... might be a cast expression or a function call,
!              * with different grammars: a cast would be cparseCastExp(),
!              * a function call would be cparsePostfixExp(CallExp(cparseArguments())).
!              * We can't know until t is known. So, parse it as a function call
!              * and let semantic() rewrite the AST as a CastExp if it turns out
!              * to be a type.
!              */
!             auto ie = new AST.IdentifierExp(loc, t.isTypeIdentifier().ident);
!             ie.parens = true;    // let semantic know it might be a CastExp
!             AST.Expression e = new AST.CallExp(loc, ie, cparseArguments());
!             return cparsePostfixOperators(e);
!         }
! 
!         // ( type-name ) cast-expression
!         auto ce = cparseCastExp();
!         return new AST.CastExp(loc, ce, t);
      }
  
      /**************
--- 1139,1170 ----
       */
      private AST.Expression cparseCastExp()
      {
          //printf("cparseCastExp()\n");
  
          // If ( type-name )
!         if (token.value == TOK.leftParenthesis && startsTypeName(peek(&token)))
          {
!             // Expression may be either a cast or a compound literal, which
!             // requires checking whether the next token is leftCurly
!             const loc = token.loc;
!             nextToken();
!             auto t = cparseTypeName();
!             check(TOK.rightParenthesis);
! 
!             if (token.value == TOK.leftCurly)
!             {
!                 // C11 6.5.2.5 ( type-name ) { initializer-list }
!                 auto ci = cparseInitializer();
!                 auto ce = new AST.CompoundLiteralExp(loc, t, ci);
!                 return cparsePostfixOperators(ce);
!             }
  
              // ( type-name ) cast-expression
              auto ce = cparseCastExp();
              return new AST.CastExp(loc, ce, t);
          }
  
!         return cparseUnaryExp();
      }
  
      /**************
*************** final class CParser(AST) : Parser!AST
*** 1878,1884 ****
          bool first = true;
          while (1)
          {
!             Identifier id;
              AST.StringExp asmName;
              auto dt = cparseDeclarator(DTR.xdirect_fd, tspec, id, specifier);
              if (!dt)
--- 1858,1864 ----
          bool first = true;
          while (1)
          {
!             AST.ArgumentLabel id;
              AST.StringExp asmName;
              auto dt = cparseDeclarator(DTR.xdirect_fd, tspec, id, specifier);
              if (!dt)
*************** final class CParser(AST) : Parser!AST
*** 1927,1939 ****
              }
  
  
!             // Check alignasExp and not alignExps so that gnu
              // __atribute__((aligned())) is silently allowed, matching the
              // behavior of other compilers.
!             if (specifier.alignasExp && dt.isTypeFunction())
!                 error(specifier.alignasExp.loc, "no alignment-specifier for function declaration"); // C11 6.7.5-2
!             if (specifier.alignasExp && specifier.scw == SCW.xregister)
!                 error(specifier.alignasExp.loc, "no alignment-specifier for `register` storage class"); // C11 6.7.5-2
  
              /* C11 6.9.1 Function Definitions
               * function-definition:
--- 1907,1919 ----
              }
  
  
!             // Check lastAlignas and not alignasExps so that gnu
              // __atribute__((aligned())) is silently allowed, matching the
              // behavior of other compilers.
!             if (specifier.lastAlignas && dt.isTypeFunction())
!                 error(specifier.lastAlignas.loc, "no alignment-specifier for function declaration"); // C11 6.7.5-2
!             if (specifier.lastAlignas && specifier.scw == SCW.xregister)
!                 error(specifier.lastAlignas.loc, "no alignment-specifier for `register` storage class"); // C11 6.7.5-2
  
              /* C11 6.9.1 Function Definitions
               * function-definition:
*************** final class CParser(AST) : Parser!AST
*** 1945,1955 ****
               */
              auto t = &token;
              if (first &&                   // first declarator
!                 id &&
                  dt.isTypeFunction() &&     // function type not inherited from a typedef
-                 isDeclarationList(t) &&    // optional declaration-list
                  level == LVL.global &&     // function definitions only at global scope
!                 t.value == TOK.leftCurly)  // start of compound-statement
              {
                  auto s = cparseFunctionDefinition(id, dt.isTypeFunction(), specifier);
                  typedefTab.setDim(typedefTabLengthSave);
--- 1925,1934 ----
               */
              auto t = &token;
              if (first &&                   // first declarator
!                 id.name &&
                  dt.isTypeFunction() &&     // function type not inherited from a typedef
                  level == LVL.global &&     // function definitions only at global scope
!                 t.value != TOK.endOfFile)
              {
                  auto s = cparseFunctionDefinition(id, dt.isTypeFunction(), specifier);
                  typedefTab.setDim(typedefTabLengthSave);
*************** final class CParser(AST) : Parser!AST
*** 1977,1984 ****
              {
                  if (token.value == TOK.assign)
                      error("no initializer for typedef declaration");
!                 if (specifier.alignasExp)
!                     error(specifier.alignasExp.loc, "no alignment-specifier for typedef declaration"); // C11 6.7.5-2
  
                  if (specifier.vector_size)
                  {
--- 1956,1963 ----
              {
                  if (token.value == TOK.assign)
                      error("no initializer for typedef declaration");
!                 if (specifier.lastAlignas)
!                     error(specifier.lastAlignas.loc, "no alignment-specifier for typedef declaration"); // C11 6.7.5-2
  
                  if (specifier.vector_size)
                  {
*************** final class CParser(AST) : Parser!AST
*** 1992,2003 ****
                  Identifier idt;
                  if (auto tt = dt.isTypeTag())
                  {
!                     if (!tt.id && id)
                          /* This applies for enums declared as
                           * typedef enum {A} E;
                           * Or for similar structs and unions.
                           */
!                         tt.id = id;
                      if (tt.members)
                      {
                          Specifier spec;
--- 1971,1982 ----
                  Identifier idt;
                  if (auto tt = dt.isTypeTag())
                  {
!                     if (!tt.id && id.name)
                          /* This applies for enums declared as
                           * typedef enum {A} E;
                           * Or for similar structs and unions.
                           */
!                         tt.id = id.name;
                      if (tt.members)
                      {
                          Specifier spec;
*************** final class CParser(AST) : Parser!AST
*** 2019,2034 ****
                  }
                  if (isalias)
                  {
!                     //printf("AliasDeclaration %s %s\n", id.toChars(), dt.toChars());
!                     auto ad = new AST.AliasDeclaration(token.loc, id, dt);
!                     if (id == idt)
                          ad.hidden = true; // do not print when generating .di files
                      s = ad;
                  }
  
!                 insertTypedefToTypedefTab(id, dt);       // remember typedefs
              }
!             else if (id)
              {
                  if (auto tt = dt.isTypeTag())
                  {
--- 1998,2013 ----
                  }
                  if (isalias)
                  {
!                     //printf("AliasDeclaration %s %s\n", id.name.toChars(), dt.toChars());
!                     auto ad = new AST.AliasDeclaration(id.loc, id.name, dt);
!                     if (id.name == idt)
                          ad.hidden = true; // do not print when generating .di files
                      s = ad;
                  }
  
!                 insertTypedefToTypedefTab(id.name, dt);       // remember typedefs
              }
!             else if (id.name)
              {
                  if (auto tt = dt.isTypeTag())
                  {
*************** final class CParser(AST) : Parser!AST
*** 2064,2070 ****
                      initializer = cparseInitializer();
                  }
                  // declare the symbol
!                 assert(id);
  
                  if (isFunctionTypedef(dt))
                  {
--- 2043,2049 ----
                      initializer = cparseInitializer();
                  }
                  // declare the symbol
!                 assert(id.name);
  
                  if (isFunctionTypedef(dt))
                  {
*************** final class CParser(AST) : Parser!AST
*** 2074,2080 ****
                          error("functions cannot be `_Thread_local`"); // C11 6.7.1-4
                      STC stc = specifiersToSTC(level, specifier);
                      stc &= ~STC.gshared;        // no gshared functions
!                     auto fd = new AST.FuncDeclaration(token.loc, Loc.initial, id, stc, dt, specifier.noreturn);
                      specifiersToFuncDeclaration(fd, specifier);
                      s = fd;
                  }
--- 2053,2059 ----
                          error("functions cannot be `_Thread_local`"); // C11 6.7.1-4
                      STC stc = specifiersToSTC(level, specifier);
                      stc &= ~STC.gshared;        // no gshared functions
!                     auto fd = new AST.FuncDeclaration(id.loc, Loc.initial, id.name, stc, dt, specifier.noreturn);
                      specifiersToFuncDeclaration(fd, specifier);
                      s = fd;
                  }
*************** final class CParser(AST) : Parser!AST
*** 2085,2096 ****
                      if (!hasInitializer &&
                          !(specifier.scw & (SCW.xextern | SCW.xstatic | SCW.x_Thread_local) || level == LVL.global))
                          initializer = new AST.VoidInitializer(token.loc);
!                     auto vd = new AST.VarDeclaration(token.loc, dt, id, initializer, specifiersToSTC(level, specifier));
                      specifiersToVarDeclaration(vd, specifier);
                      s = vd;
                  }
                  if (level != LVL.global)
!                     insertIdToTypedefTab(id);   // non-typedef declarations can hide typedefs in outer scopes
              }
              if (s !is null)
              {
--- 2064,2075 ----
                      if (!hasInitializer &&
                          !(specifier.scw & (SCW.xextern | SCW.xstatic | SCW.x_Thread_local) || level == LVL.global))
                          initializer = new AST.VoidInitializer(token.loc);
!                     auto vd = new AST.VarDeclaration(id.loc, dt, id.name, initializer, specifiersToSTC(level, specifier));
                      specifiersToVarDeclaration(vd, specifier);
                      s = vd;
                  }
                  if (level != LVL.global)
!                     insertIdToTypedefTab(id.name); // non-typedef declarations can hide typedefs in outer scopes
              }
              if (s !is null)
              {
*************** final class CParser(AST) : Parser!AST
*** 2129,2135 ****
                  }
                  symbols.push(s);
              }
!             if (level == LVL.global && !id)
                  error("expected identifier for declaration");
  
              first = false;
--- 2108,2114 ----
                  }
                  symbols.push(s);
              }
!             if (level == LVL.global && !id.name)
                  error("expected identifier for declaration");
  
              first = false;
*************** final class CParser(AST) : Parser!AST
*** 2180,2186 ****
       * Returns:
       *  Dsymbol for the function
       */
!     AST.Dsymbol cparseFunctionDefinition(Identifier id, AST.TypeFunction ft, ref Specifier specifier)
      {
          /* Start function scope
           */
--- 2159,2165 ----
       * Returns:
       *  Dsymbol for the function
       */
!     AST.Dsymbol cparseFunctionDefinition(AST.ArgumentLabel id, AST.TypeFunction ft, ref Specifier specifier)
      {
          /* Start function scope
           */
*************** final class CParser(AST) : Parser!AST
*** 2192,2198 ****
              do
              {
                  cparseDeclaration(LVL.parameter);
!             } while (token.value != TOK.leftCurly);
  
              /* Since there were declarations, the parameter-list must have been
               * an identifier-list.
--- 2171,2177 ----
              do
              {
                  cparseDeclaration(LVL.parameter);
!             } while (token.value != TOK.leftCurly && token.value != TOK.endOfFile);
  
              /* Since there were declarations, the parameter-list must have been
               * an identifier-list.
*************** final class CParser(AST) : Parser!AST
*** 2253,2259 ****
              }
          }
  
!         addFuncName = false;    // gets set to true if somebody references __func__ in this function
          const locFunc = token.loc;
  
          auto body = cparseStatement(ParseStatementFlags.curly);  // don't start a new scope; continue with parameter scope
--- 2232,2241 ----
              }
          }
  
!         /* gets set to true if somebody references __func__ in this function, //ditto for __FUNCTION__ */
!         addFuncName = false;
!         refFuncName = false;
!         pretFuncName = false;
          const locFunc = token.loc;
  
          auto body = cparseStatement(ParseStatementFlags.curly);  // don't start a new scope; continue with parameter scope
*************** final class CParser(AST) : Parser!AST
*** 2261,2274 ****
  
          STC stc = specifiersToSTC(LVL.global, specifier);
          stc &= ~STC.gshared;    // no gshared functions
!         auto fd = new AST.FuncDeclaration(locFunc, prevloc, id, stc, ft, specifier.noreturn);
          specifiersToFuncDeclaration(fd, specifier);
  
          if (addFuncName)
!         {
!             auto s = createFuncName(locFunc, id);
!             body = new AST.CompoundStatement(locFunc, s, body);
!         }
          fd.fbody = body;
  
          // TODO add `symbols` to the function's local symbol table `sc2` in FuncDeclaration::semantic3()
--- 2243,2265 ----
  
          STC stc = specifiersToSTC(LVL.global, specifier);
          stc &= ~STC.gshared;    // no gshared functions
!         auto fd = new AST.FuncDeclaration(id.loc, prevloc, id.name, stc, ft, specifier.noreturn);
          specifiersToFuncDeclaration(fd, specifier);
  
+         auto stmts = new AST.Statements();
+ 
          if (addFuncName)
!             stmts.push(createFuncName(locFunc, id.name, Id.__func__));
! 
!         if (refFuncName)
!             stmts.push(createFuncName(locFunc, id.name, Id.FUNCTION));
! 
!         if (pretFuncName)
!             stmts.push(createPrettyFunc(locFunc, fd));
! 
!         stmts.push(body);
! 
!         body = new AST.CompoundStatement(locFunc, stmts);
          fd.fbody = body;
  
          // TODO add `symbols` to the function's local symbol table `sc2` in FuncDeclaration::semantic3()
*************** final class CParser(AST) : Parser!AST
*** 2416,2429 ****
          }
  
          AST.Type t;
-         Loc loc;
          //printf("parseDeclarationSpecifiers()\n");
  
          TKW tkw;
          SCW scw = specifier.scw & SCW.xtypedef;
          MOD mod;
!         Identifier id;
!         Identifier previd;
  
      Lwhile:
          while (1)
--- 2407,2419 ----
          }
  
          AST.Type t;
          //printf("parseDeclarationSpecifiers()\n");
  
          TKW tkw;
          SCW scw = specifier.scw & SCW.xtypedef;
          MOD mod;
!         AST.ArgumentLabel id;
!         AST.ArgumentLabel previd;
  
      Lwhile:
          while (1)
*************** final class CParser(AST) : Parser!AST
*** 2468,2474 ****
  
                  case TOK.identifier:
                      tkwx = TKW.xident;
!                     id = token.ident;
                      break;
  
                  case TOK.struct_:
--- 2458,2464 ----
  
                  case TOK.identifier:
                      tkwx = TKW.xident;
!                     id = AST.ArgumentLabel(token.ident, token.loc);
                      break;
  
                  case TOK.struct_:
*************** final class CParser(AST) : Parser!AST
*** 2492,2509 ****
                  {
                      // C11 6.7.2.4
                      // type-specifier if followed by `( type-name )`
!                     auto tk = peek(&token);
!                     if (tk.value == TOK.leftParenthesis)
                      {
!                         tk = peek(tk);
!                         if (isTypeName(tk) && tk.value == TOK.rightParenthesis)
!                         {
!                             nextToken();
!                             nextToken();
!                             t = cparseTypeName();
!                             tkwx = TKW.x_Atomic;
!                             break;
!                         }
                      }
                      // C11 6.7.3 type-qualifier if not
                      modx = MOD.x_Atomic;
--- 2482,2494 ----
                  {
                      // C11 6.7.2.4
                      // type-specifier if followed by `( type-name )`
!                     if (peekNext() == TOK.leftParenthesis)
                      {
!                         nextToken();
!                         nextToken();
!                         t = cparseTypeName();
!                         tkwx = TKW.x_Atomic;
!                         break;
                      }
                      // C11 6.7.3 type-qualifier if not
                      modx = MOD.x_Atomic;
*************** final class CParser(AST) : Parser!AST
*** 2512,2548 ****
  
                  case TOK._Alignas:
                  {
!                     /* C11 6.7.5
!                      * _Alignas ( type-name )
!                      * _Alignas ( constant-expression )
!                      */
! 
!                     if (level & (LVL.parameter | LVL.prototype))
!                         error("no alignment-specifier for parameters"); // C11 6.7.5-2
! 
!                     nextToken();
!                     check(TOK.leftParenthesis);
!                     AST.Expression exp;
!                     auto tk = &token;
!                     if (isTypeName(tk))  // _Alignas ( type-name )
!                     {
!                         auto talign = cparseTypeName();
!                         /* Convert type to expression: `talign.alignof`
!                          */
!                         auto e = new AST.TypeExp(loc, talign);
!                         exp = new AST.DotIdExp(loc, e, Id.__xalignof);
!                     }
!                     else  // _Alignas ( constant-expression )
!                     {
!                         exp = cparseConstantExp();
!                     }
! 
!                     if (!specifier.alignExps)
!                         specifier.alignExps = new AST.Expressions(0);
!                     specifier.alignExps.push(exp);
!                     specifier.alignasExp = exp;
! 
!                     check(TOK.rightParenthesis);
                      break;
                  }
  
--- 2497,2507 ----
  
                  case TOK._Alignas:
                  {
!                     auto exp = cparseAlignasSpecifier(level);
!                     if (!specifier.alignasExps)
!                         specifier.alignasExps = new AST.Expressions();
!                     specifier.alignasExps.push(exp);
!                     specifier.lastAlignas = exp;
                      break;
                  }
  
*************** final class CParser(AST) : Parser!AST
*** 2566,2611 ****
  
                  case TOK.typeof_:
                  {
!                     nextToken();
!                     check(TOK.leftParenthesis);
! 
!                     auto tk = &token;
!                     AST.Expression e;
!                     if (isTypeName(tk))
!                         e = new AST.TypeExp(loc, cparseTypeName());
!                     else
!                         e = cparseExpression();
!                     t = new AST.TypeTypeof(loc, e);
! 
!                     if(token.value == TOK.rightParenthesis)
!                         nextToken();
!                     else
!                     {
!                         t = AST.Type.terror;
!                         error("`typeof` operator expects an expression or type name in parentheses");
! 
!                         // skipParens et. al expect to be on the opening parenthesis
!                         int parens;
!                         loop: while(1)
!                         {
!                             switch(token.value)
!                             {
!                                 case TOK.leftParenthesis:
!                                     parens++;
!                                     break;
!                                 case TOK.rightParenthesis:
!                                     parens--;
!                                     if(parens < 0)
!                                         goto case;
!                                     break;
!                                 case TOK.endOfFile:
!                                     break loop;
!                                 default:
!                             }
!                             nextToken();
!                         }
!                     }
! 
                      tkwx = TKW.xtag;
                      break;
                  }
--- 2525,2533 ----
  
                  case TOK.typeof_:
                  {
!                     /* GNU extension (added in C23)
!                      */
!                     t = cparseTypeofSpecifier();
                      tkwx = TKW.xtag;
                      break;
                  }
*************** final class CParser(AST) : Parser!AST
*** 2758,2764 ****
  
              case TKW.xident:
              {
!                 const idx = previd.toString();
                  if (idx.length > 2 && idx[0] == '_' && idx[1] == '_')  // leading double underscore
                      importBuiltins = true;  // probably one of those compiler extensions
                  t = null;
--- 2680,2686 ----
  
              case TKW.xident:
              {
!                 const idx = previd.name.toString();
                  if (idx.length > 2 && idx[0] == '_' && idx[1] == '_')  // leading double underscore
                      importBuiltins = true;  // probably one of those compiler extensions
                  t = null;
*************** final class CParser(AST) : Parser!AST
*** 2766,2777 ****
                  /* Punch through to what the typedef is, to support things like:
                   *  typedef T* T;
                   */
!                 auto pt = lookupTypedef(previd);
                  if (pt && *pt)      // if previd is a known typedef
                      t = *pt;
  
                  if (!t)
!                     t = new AST.TypeIdentifier(loc, previd);
                  break;
              }
  
--- 2688,2699 ----
                  /* Punch through to what the typedef is, to support things like:
                   *  typedef T* T;
                   */
!                 auto pt = lookupTypedef(previd.name);
                  if (pt && *pt)      // if previd is a known typedef
                      t = *pt;
  
                  if (!t)
!                     t = new AST.TypeIdentifier(previd.loc, previd.name);
                  break;
              }
  
*************** final class CParser(AST) : Parser!AST
*** 2788,2793 ****
--- 2710,2794 ----
          return t;
      }
  
+     /**************
+      * C11 6.7.5
+      * alignment-specifier:
+      *    _Alignas ( type-name )
+      *    _Alignas ( constant-expression )
+      */
+     private AST.Expression cparseAlignasSpecifier(LVL level)
+     {
+         if (level & (LVL.parameter | LVL.prototype))
+             error("no alignment-specifier for parameters"); // C11 6.7.5-2
+ 
+         AST.Expression exp;
+         nextToken();
+         check(TOK.leftParenthesis);
+         if (startsTypeName(&token))
+         {
+             // _Alignas ( type-name )
+             auto talign = cparseTypeName();
+             // Convert type to expression: `talign.alignof`
+             auto e = new AST.TypeExp(loc, talign);
+             exp = new AST.DotIdExp(loc, e, Id.__xalignof);
+         }
+         else
+         {
+             // _Alignas ( constant-expression )
+             exp = cparseConstantExp();
+         }
+         check(TOK.rightParenthesis);
+         return exp;
+     }
+ 
+     /**************
+      * C23 6.7.2.5
+      * typeof-specifier:
+      *    typeof ( expression )
+      *    typeof ( type-name )
+      *    typeof_unqual ( expression )  // not implemented
+      *    typeof_unqual ( type-name )   // not implemented
+      */
+     private AST.Type cparseTypeofSpecifier()
+     {
+         nextToken();
+         check(TOK.leftParenthesis);
+ 
+         AST.Expression e;
+         if (startsTypeName(&token))
+             e = new AST.TypeExp(loc, cparseTypeName());
+         else
+             e = cparseExpression();
+ 
+         if (token.value != TOK.rightParenthesis)
+         {
+             // skipParens et. al expect to be on the opening parenthesis
+             error("`typeof` operator expects an expression or type name in parentheses");
+             int parens;
+             loop: while(1)
+             {
+                 switch(token.value)
+                 {
+                     case TOK.leftParenthesis:
+                         parens++;
+                         break;
+                     case TOK.rightParenthesis:
+                         parens--;
+                         if (parens < 0)
+                             goto case;
+                         break;
+                     case TOK.endOfFile:
+                         break loop;
+                     default:
+                 }
+                 nextToken();
+             }
+             return AST.Type.terror;
+         }
+         nextToken();
+         return new AST.TypeTypeof(loc, e);
+     }
+ 
      /********************************
       * C11 6.7.6
       * Parse a declarator (including function definitions).
*************** final class CParser(AST) : Parser!AST
*** 2839,2845 ****
       *  declared struct, union or enum tags.
       */
      private AST.Type cparseDeclarator(DTR declarator, AST.Type tbase,
!         out Identifier pident, ref Specifier specifier)
      {
          //printf("cparseDeclarator(%d, %s)\n", declarator, tbase.toChars());
          AST.Types constTypes; // all the Types that will need `const` applied to them
--- 2840,2846 ----
       *  declared struct, union or enum tags.
       */
      private AST.Type cparseDeclarator(DTR declarator, AST.Type tbase,
!         out AST.ArgumentLabel pident, ref Specifier specifier)
      {
          //printf("cparseDeclarator(%d, %s)\n", declarator, tbase.toChars());
          AST.Types constTypes; // all the Types that will need `const` applied to them
*************** final class CParser(AST) : Parser!AST
*** 2882,2888 ****
                      //printf("identifier %s\n", token.ident.toChars());
                      if (declarator == DTR.xabstract)
                          error("identifier not allowed in abstract-declarator");
!                     pident = token.ident;
                      ts = t;
                      nextToken();
                      break;
--- 2883,2889 ----
                      //printf("identifier %s\n", token.ident.toChars());
                      if (declarator == DTR.xabstract)
                          error("identifier not allowed in abstract-declarator");
!                     pident = AST.ArgumentLabel(token.ident, token.loc);
                      ts = t;
                      nextToken();
                      break;
*************** final class CParser(AST) : Parser!AST
*** 3057,3063 ****
                  }
                  break;
              }
!             if (declarator == DTR.xdirect && !pident)
                  error("expected identifier for declarator");
              return ts;
          }
--- 3058,3064 ----
                  }
                  break;
              }
!             if (declarator == DTR.xdirect && !pident.name)
                  error("expected identifier for declarator");
              return ts;
          }
*************** final class CParser(AST) : Parser!AST
*** 3163,3169 ****
              tspec = toConst(tspec);
              specifier.mod = MOD.xnone;      // 'used' it
          }
!         Identifier id;
          return cparseDeclarator(DTR.xabstract, tspec, id, specifier);
      }
  
--- 3164,3170 ----
              tspec = toConst(tspec);
              specifier.mod = MOD.xnone;      // 'used' it
          }
!         AST.ArgumentLabel id;
          return cparseDeclarator(DTR.xabstract, tspec, id, specifier);
      }
  
*************** final class CParser(AST) : Parser!AST
*** 3241,3246 ****
--- 3242,3248 ----
  
              Specifier specifier;
              specifier.packalign.setDefault();
+             const typeLoc = token.loc;
              auto tspec = cparseDeclarationSpecifiers(LVL.prototype, specifier);
              if (!tspec)
              {
*************** final class CParser(AST) : Parser!AST
*** 3258,3272 ****
                  specifier.mod = MOD.xnone;      // 'used' it
              }
  
!             Identifier id;
!             const paramLoc = token.loc;
              auto t = cparseDeclarator(DTR.xparameter, tspec, id, specifier);
              if (token.value == TOK.__attribute__)
                  cparseGnuAttributes(specifier);
              if (specifier.mod & MOD.xconst)
                  t = toConst(t);
!             auto param = new AST.Parameter(paramLoc, specifiersToSTC(LVL.parameter, specifier),
!                                            t, id, null, null);
              parameters.push(param);
              if (token.value == TOK.rightParenthesis || token.value == TOK.endOfFile)
                  break;
--- 3260,3274 ----
                  specifier.mod = MOD.xnone;      // 'used' it
              }
  
!             AST.ArgumentLabel id;
              auto t = cparseDeclarator(DTR.xparameter, tspec, id, specifier);
              if (token.value == TOK.__attribute__)
                  cparseGnuAttributes(specifier);
              if (specifier.mod & MOD.xconst)
                  t = toConst(t);
!             auto param = new AST.Parameter(id.name ? id.loc : typeLoc,
!                                            specifiersToSTC(LVL.parameter, specifier),
!                                            t, id.name, null, null);
              parameters.push(param);
              if (token.value == TOK.rightParenthesis || token.value == TOK.endOfFile)
                  break;
*************** final class CParser(AST) : Parser!AST
*** 3410,3416 ****
                          if (n < 1 || n & (n - 1) || 8192 < n)
                              error("__decspec(align(%lld)) must be an integer positive power of 2 and be <= 8,192", cast(ulong)n);
                          specifier.packalign.set(cast(uint)n);
!                         specifier.packalign.setPack(true);
                          nextToken();
                      }
                      else
--- 3412,3418 ----
                          if (n < 1 || n & (n - 1) || 8192 < n)
                              error("__decspec(align(%lld)) must be an integer positive power of 2 and be <= 8,192", cast(ulong)n);
                          specifier.packalign.set(cast(uint)n);
!                         specifier.packalign.setPack();
                          nextToken();
                      }
                      else
*************** final class CParser(AST) : Parser!AST
*** 3664,3672 ****
                  {
                      nextToken();
                      AST.Expression exp = cparseConstantExp();
!                     if (!specifier.alignExps)
!                         specifier.alignExps = new AST.Expressions(0);
!                     specifier.alignExps.push(exp);
                      check(TOK.rightParenthesis);
                  }
                  else
--- 3666,3674 ----
                  {
                      nextToken();
                      AST.Expression exp = cparseConstantExp();
!                     if (!specifier.alignAttrs)
!                         specifier.alignAttrs = new AST.Expressions();
!                     specifier.alignAttrs.push(exp);
                      check(TOK.rightParenthesis);
                  }
                  else
*************** final class CParser(AST) : Parser!AST
*** 3679,3685 ****
              else if (token.ident == Id.packed)
              {
                  specifier.packalign.set(1);
!                 specifier.packalign.setPack(true);
                  nextToken();
              }
              else if (token.ident == Id.always_inline) // https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html
--- 3681,3687 ----
              else if (token.ident == Id.packed)
              {
                  specifier.packalign.set(1);
!                 specifier.packalign.setPack();
                  nextToken();
              }
              else if (token.ident == Id.always_inline) // https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html
*************** final class CParser(AST) : Parser!AST
*** 4091,4097 ****
           * redeclaration, or reference to existing declaration.
           * Defer to the semantic() pass with a TypeTag.
           */
!         return new AST.TypeTag(loc, structOrUnion, tag, tagSpecifier.packalign, tagSpecifier.alignExps, null, members);
      }
  
      /*************************************
--- 4093,4099 ----
           * redeclaration, or reference to existing declaration.
           * Defer to the semantic() pass with a TypeTag.
           */
!         return new AST.TypeTag(loc, structOrUnion, tag, tagSpecifier.packalign, tagSpecifier.alignAttrs, null, members);
      }
  
      /*************************************
*************** final class CParser(AST) : Parser!AST
*** 4187,4193 ****
  
          while (1)
          {
!             Identifier id;
              AST.Type dt;
              if (token.value == TOK.colon)
              {
--- 4189,4195 ----
  
          while (1)
          {
!             AST.ArgumentLabel id;
              AST.Type dt;
              if (token.value == TOK.colon)
              {
*************** final class CParser(AST) : Parser!AST
*** 4198,4204 ****
                  }
  
                  // C11 6.7.2.1-12 unnamed bit-field
!                 id = Identifier.generateAnonymousId("BitField");
                  dt = tspec;
              }
              else
--- 4200,4206 ----
                  }
  
                  // C11 6.7.2.1-12 unnamed bit-field
!                 id.name = Identifier.generateAnonymousId("BitField");
                  dt = tspec;
              }
              else
*************** final class CParser(AST) : Parser!AST
*** 4217,4222 ****
--- 4219,4226 ----
              {
                  // C11 6.7.2.1-10 bit-field
                  nextToken();
+                 if (id.name.isAnonymous)
+                     id.loc = token.loc;
                  width = cparseConstantExp();
              }
  
*************** final class CParser(AST) : Parser!AST
*** 4232,4243 ****
                  error("specifier-qualifier-list required");
              else if (width)
              {
!                 if (specifier.alignasExp)
!                     error(specifier.alignasExp.loc, "no alignment-specifier for bit field declaration"); // C11 6.7.5-2
!                 auto s = new AST.BitFieldDeclaration(width.loc, dt, id, width);
                  members.push(s);
              }
!             else if (id)
              {
                  if (dt.ty == AST.Tvoid)
                      error("`void` has no value");
--- 4236,4247 ----
                  error("specifier-qualifier-list required");
              else if (width)
              {
!                 if (specifier.lastAlignas)
!                     error(specifier.lastAlignas.loc, "no alignment-specifier for bit field declaration"); // C11 6.7.5-2
!                 auto s = new AST.BitFieldDeclaration(id.loc, dt, id.name, width);
                  members.push(s);
              }
!             else if (id.name)
              {
                  if (dt.ty == AST.Tvoid)
                      error("`void` has no value");
*************** final class CParser(AST) : Parser!AST
*** 4245,4251 ****
                  // declare the symbol
                  // Give member variables an implicit void initializer
                  auto initializer = new AST.VoidInitializer(token.loc);
!                 AST.Dsymbol s = new AST.VarDeclaration(token.loc, dt, id, initializer, specifiersToSTC(LVL.member, specifier));
                  s = applySpecifier(s, specifier);
                  members.push(s);
              }
--- 4249,4255 ----
                  // declare the symbol
                  // Give member variables an implicit void initializer
                  auto initializer = new AST.VoidInitializer(token.loc);
!                 AST.Dsymbol s = new AST.VarDeclaration(id.loc, dt, id.name, initializer, specifiersToSTC(LVL.member, specifier));
                  s = applySpecifier(s, specifier);
                  members.push(s);
              }
*************** final class CParser(AST) : Parser!AST
*** 4282,4510 ****
      /************************************
       * Determine if the scanner is sitting on the start of a declaration.
       * Params:
!      *      t       = current token of the scanner
!      *      needId  = flag with additional requirements for a declaration
!      *      endtok  = ending token
!      *      pt      = will be set ending token (if not null)
       * Returns:
!      *      true at start of a declaration
       */
!     private bool isCDeclaration(ref Token* pt)
      {
!         auto t = pt;
!         //printf("isCDeclaration() %s\n", t.toChars());
!         if (!isDeclarationSpecifiers(t))
              return false;
  
!         while (1)
!         {
!             if (t.value == TOK.semicolon)
!             {
!                 t = peek(t);
!                 pt = t;
!                 return true;
!             }
!             if (!isCDeclarator(t, DTR.xdirect))
!                 return false;
!             if (t.value == TOK.asm_)
!             {
!                 t = peek(t);
!                 if (t.value != TOK.leftParenthesis || !skipParens(t, &t))
!                     return false;
!             }
!             if (t.value == TOK.__attribute__)
!             {
!                 t = peek(t);
!                 if (t.value != TOK.leftParenthesis || !skipParens(t, &t))
!                     return false;
!             }
!             if (t.value == TOK.assign)
!             {
!                 t = peek(t);
!                 if (!isInitializer(t))
!                     return false;
!             }
!             switch (t.value)
!             {
!                 case TOK.comma:
!                     t = peek(t);
!                     break;
! 
!                 case TOK.semicolon:
!                     t = peek(t);
!                     pt = t;
!                     return true;
! 
!                 default:
!                     return false;
!             }
!         }
!     }
! 
!     /********************************
!      * See if match for initializer.
!      * Params:
!      *  pt = starting token, updated to one past end of initializer if true
!      * Returns:
!      *  true if initializer
!      */
!     private bool isInitializer(ref Token* pt)
!     {
!         //printf("isInitializer()\n");
!         auto t = pt;
! 
!         if (t.value == TOK.leftCurly)
!         {
!             if (!skipBraces(t))
!                 return false;
!             pt = t;
              return true;
-         }
- 
-         // skip over assignment-expression, ending before comma or semiColon or EOF
-         if (!isAssignmentExpression(t))
-             return false;
-         pt = t;
-         return true;
-     }
- 
-     /********************************
-      * See if match for:
-      *    postfix-expression ( argument-expression-list(opt) )
-      * Params:
-      *  pt = starting token, updated to one past end of initializer if true
-      * Returns:
-      *  true if function call
-      */
-     private bool isFunctionCall(ref Token* pt)
-     {
-         //printf("isFunctionCall()\n");
-         auto t = pt;
- 
-         if (!isPrimaryExpression(t))
-             return false;
-         if (t.value != TOK.leftParenthesis)
-             return false;
-         t = peek(t);
-         while (1)
-         {
-             if (!isAssignmentExpression(t))
-                 return false;
-             if (t.value == TOK.comma)
-             {
-                 t = peek(t);
-                 continue;
-             }
-             if (t.value == TOK.rightParenthesis)
-             {
-                 t = peek(t);
-                 break;
-             }
-             return false;
-         }
-         if (t.value != TOK.semicolon)
-             return false;
-         pt = t;
-         return true;
-     }
- 
-     /********************************
-      * See if match for assignment-expression.
-      * Params:
-      *  pt = starting token, updated to one past end of assignment-expression if true
-      * Returns:
-      *  true if assignment-expression
-      */
-     private bool isAssignmentExpression(ref Token* pt)
-     {
-         auto t = pt;
-         //printf("isAssignmentExpression() %s\n", t.toChars());
- 
-         /* This doesn't actually check for grammar matching an
-          * assignment-expression. It just matches ( ) [ ] looking for
-          * an ending token that would terminate one.
-          */
-         bool any;
-         while (1)
-         {
-             switch (t.value)
-             {
-                 case TOK.comma:
-                 case TOK.semicolon:
-                 case TOK.rightParenthesis:
-                 case TOK.rightBracket:
-                 case TOK.endOfFile:
-                 case TOK.endOfLine:
-                     if (!any)
-                         return false;
-                     break;
- 
-                 case TOK.leftParenthesis:
-                     if (!skipParens(t, &t))
-                         return false;
-                     /*
-                         https://issues.dlang.org/show_bug.cgi?id=22267
-                         If the parser encounters the following
-                             `identifier variableName = (expression);`
-                         the initializer is not identified as such since the parentheses
-                         cause the parser to keep walking indefinitely
-                         (whereas `(1) + 1` would not be affected.).
-                     */
-                     any = true;
-                     continue;
- 
-                 case TOK.leftBracket:
-                     if (!skipBrackets(t))
-                         return false;
-                     continue;
  
!                 case TOK.leftCurly:
!                     if (!skipBraces(t))
!                         return false;
!                     continue;
  
!                 default:
!                     any = true;   // assume token was part of an a-e
!                     t = peek(t);
!                     continue;
!             }
!             pt = t;
              return true;
-         }
-     }
  
!     /********************************
!      * See if match for constant-expression.
!      * Params:
!      *  pt = starting token, updated to one past end of constant-expression if true
!      * Returns:
!      *  true if constant-expression
!      */
!     private bool isConstantExpression(ref Token* pt)
!     {
!         return isAssignmentExpression(pt);
      }
  
      /********************************
!      * See if match for declaration-specifiers.
!      * No errors are diagnosed.
       * Params:
!      *  pt = starting token, updated to one past end of declaration-specifiers if true
       * Returns:
       *  true if declaration-specifiers
       */
!     private bool isDeclarationSpecifiers(ref Token* pt)
      {
-         //printf("isDeclarationSpecifiers()\n");
- 
-         auto t = pt;
- 
          bool seenType;
-         bool any;
          while (1)
          {
              switch (t.value)
              {
                  // type-specifiers
                  case TOK.void_:
                  case TOK.char_:
--- 4286,4339 ----
      /************************************
       * Determine if the scanner is sitting on the start of a declaration.
       * Params:
!      *  t = first token
       * Returns:
!      *  true if at start of a declaration
       */
!     private bool startsDeclaration(Token* t)
      {
!         // Labels aren't declarations.
!         if (token.value == TOK.identifier && peek(t).value == TOK.colon)
              return false;
  
!         if (token.value == TOK._Static_assert)
              return true;
  
!         if (startsDeclarationSpecifiers(t))
!             return true;
  
!         if (startsTypeName(t))
              return true;
  
!         return false;
      }
  
      /********************************
!      * Is this the start of a declaration-specifiers?
       * Params:
!      *  t = first token
       * Returns:
       *  true if declaration-specifiers
       */
!     private bool startsDeclarationSpecifiers(Token* t)
      {
          bool seenType;
          while (1)
          {
              switch (t.value)
              {
+                 // typedef-name
+                 case TOK.identifier:
+                     if (!seenType)
+                     {
+                         if (isTypedef(t.ident))
+                             return true;
+                         t = peek(t);
+                         seenType = true;
+                         continue;
+                     }
+                     return true;
+ 
                  // type-specifiers
                  case TOK.void_:
                  case TOK.char_:
*************** final class CParser(AST) : Parser!AST
*** 4519,4568 ****
                  case TOK._Bool:
                  //case TOK._Imaginary:
                  case TOK._Complex:
-                     t = peek(t);
-                     seenType = true;
-                     any = true;
-                     continue;
- 
-                 case TOK.identifier: // typedef-name
-                     if (!seenType)
-                     {
-                         t = peek(t);
-                         seenType = true;
-                         any = true;
-                         continue;
-                     }
-                     break;
  
                  case TOK.struct_:
                  case TOK.union_:
                  case TOK.enum_:
-                     t = peek(t);
-                     if (t.value == TOK.__attribute__ ||
-                         t.value == TOK.__declspec)
-                     {
-                         t = peek(t);
-                         if (!skipParens(t, &t))
-                             return false;
-                     }
-                     if (t.value == TOK.identifier)
-                     {
-                         t = peek(t);
-                         if (t.value == TOK.leftCurly)
-                         {
-                             if (!skipBraces(t))
-                                 return false;
-                         }
-                     }
-                     else if (t.value == TOK.leftCurly)
-                     {
-                         if (!skipBraces(t))
-                             return false;
-                     }
-                     else
-                         return false;
-                     any = true;
-                     continue;
  
                  // storage-class-specifiers
                  case TOK.typedef_:
--- 4348,4359 ----
                  case TOK._Bool:
                  //case TOK._Imaginary:
                  case TOK._Complex:
  
+                 // struct-or-union-specifier
+                 // enum-specifier
                  case TOK.struct_:
                  case TOK.union_:
                  case TOK.enum_:
  
                  // storage-class-specifiers
                  case TOK.typedef_:
*************** final class CParser(AST) : Parser!AST
*** 4582,4695 ****
                  case TOK.volatile:
                  case TOK.restrict:
                  case TOK.__stdcall:
-                     t = peek(t);
-                     any = true;
-                     continue;
  
                  case TOK._Alignas:      // alignment-specifier
                  case TOK.__declspec:    // decl-specifier
                  case TOK.__attribute__: // attribute-specifier
-                     t = peek(t);
-                     if (!skipParens(t, &t))
-                         return false;
-                     any = true;
-                     continue;
  
!                 // either atomic-type-specifier or type_qualifier
!                 case TOK._Atomic:  // TODO _Atomic ( type-name )
!                     t = peek(t);
!                     if (t.value == TOK.leftParenthesis) // maybe atomic-type-specifier
!                     {
!                         auto tsave = t;
!                         t = peek(t);
!                         if (!isTypeName(t) || t.value != TOK.rightParenthesis)
!                         {   // it's a type-qualifier
!                             t = tsave;  // back up parser
!                             any = true;
!                             continue;
!                         }
!                         t = peek(t);    // move past right parenthesis of atomic-type-specifier
!                     }
!                     any = true;
!                     continue;
  
                  default:
-                     break;
-             }
-             break;
-         }
- 
-         if (any)
-         {
-             pt = t;
-             return true;
-         }
-         return false;
-     }
- 
-     /**************************************
-      * See if declaration-list is present.
-      * Returns:
-      *    true if declaration-list is present, even an empty one
-      */
-     bool isDeclarationList(ref Token* pt)
-     {
-         auto t = pt;
-         while (1)
-         {
-             if (t.value == TOK.leftCurly)
-             {
-                 pt = t;
-                 return true;
-             }
-             if (!isCDeclaration(t))
-                 return false;
-         }
-     }
- 
-     /*******************************************
-      * Skip braces.
-      * Params:
-      *      pt = enters on left brace, set to token past right bracket on true
-      * Returns:
-      *      true if successful
-      */
-     private bool skipBraces(ref Token* pt)
-     {
-         auto t = pt;
-         if (t.value != TOK.leftCurly)
-             return false;
- 
-         int braces = 0;
- 
-         while (1)
-         {
-             switch (t.value)
-             {
-                 case TOK.leftCurly:
-                     ++braces;
-                     t = peek(t);
-                     continue;
- 
-                 case TOK.rightCurly:
-                     --braces;
-                     if (braces == 0)
-                     {
-                         pt = peek(t);
-                         return true;
-                     }
-                     if (braces < 0)
-                         return false;
- 
-                     t = peek(t);
-                     continue;
- 
-                 case TOK.endOfFile:
                      return false;
- 
-                 default:
-                     t = peek(t);
-                     continue;
              }
          }
      }
--- 4373,4390 ----
                  case TOK.volatile:
                  case TOK.restrict:
                  case TOK.__stdcall:
  
                  case TOK._Alignas:      // alignment-specifier
                  case TOK.__declspec:    // decl-specifier
                  case TOK.__attribute__: // attribute-specifier
  
!                 // atomic-type-specifier
!                 case TOK._Atomic:
!                 case TOK.typeof_:
!                     return true;
  
                  default:
                      return false;
              }
          }
      }
*************** final class CParser(AST) : Parser!AST
*** 4838,5133 ****
          return true;
      }
  
!     /***************************
       * Is this the start of a type-name?
       * Params:
!      *  pt = first token; updated with past end of type-name if true
       * Returns:
       *  true if start of type-name
       */
!     private bool isTypeName(ref Token* pt)
!     {
!         auto t = pt;
!         //printf("isTypeName() %s\n", t.toChars());
!         if (!isSpecifierQualifierList(t))
!             return false;
!         if (!isCDeclarator(t, DTR.xabstract))
!             return false;
!         if (t.value != TOK.rightParenthesis)
!             return false;
!         pt = t;
!         return true;
!     }
! 
!     /***************************
!      * Is this the start of a specifier-qualifier-list?
!      * Params:
!      *  pt = first token; updated with past end of specifier-qualifier-list if true
!      * Returns:
!      *  true if start of specifier-qualifier-list
!      */
!     private bool isSpecifierQualifierList(ref Token* pt)
!     {
!         auto t = pt;
!         bool result;
!         while (1)
!         {
!             switch (t.value)
!             {
!                 // Type Qualifiers
!                 case TOK.const_:
!                 case TOK.restrict:
!                 case TOK.volatile:
!                 case TOK.__stdcall:
! 
!                 // Type Specifiers
!                 case TOK.char_:
!                 case TOK.signed:
!                 case TOK.unsigned:
!                 case TOK.int16:
!                 case TOK.int32:
!                 case TOK.int64:
!                 case TOK.__int128:
!                 case TOK.float32:
!                 case TOK.float64:
!                 case TOK.void_:
!                 case TOK._Bool:
!                 //case TOK._Imaginary: // ? missing in Spec
!                 case TOK._Complex:
!                     t = peek(t);
!                     break;
! 
!                 case TOK.identifier:
!                     // Use typedef table to disambiguate
!                     if (isTypedef(t.ident))
!                     {
!                         t = peek(t);
!                         break;
!                     }
!                     else
!                     {
!                         return false;
!                     }
! 
!                 // struct-or-union-specifier
!                 // enum-specifier
!                 case TOK.struct_:
!                 case TOK.union_:
!                 case TOK.enum_:
!                     t = peek(t);
!                     if (t.value == TOK.identifier)
!                     {
!                         t = peek(t);
!                         if (t.value == TOK.leftCurly)
!                         {
!                             if (!skipBraces(t))
!                                 return false;
!                         }
!                     }
!                     else if (t.value == TOK.leftCurly)
!                     {
!                         if (!skipBraces(t))
!                             return false;
!                     }
!                     else
!                         return false;
!                     break;
! 
!                 // atomic-type-specifier
!                 case TOK._Atomic:
!                 case TOK.typeof_:
!                 case TOK.__attribute__:
!                     t = peek(t);
!                     if (t.value != TOK.leftParenthesis ||
!                         !skipParens(t, &t))
!                         return false;
!                     break;
! 
!                 default:
!                     if (result)
!                         pt = t;
!                     return result;
!             }
!             result = true;
!         }
!     }
! 
!     /************************************
!      * Looking at the leading left parenthesis, and determine if it is
!      * either of the following:
!      *    ( type-name ) cast-expression
!      *    ( type-name ) { initializer-list }
!      * as opposed to:
!      *    ( expression )
!      * Params:
!      *    pt = starting token, updated to one past end of constant-expression if true
!      *    afterParenType = true if already seen `( type-name )`
!      * Returns:
!      *    true if matches ( type-name ) ...
!      */
!     private bool isCastExpression(ref Token* pt, bool afterParenType = false)
!     {
!         enum log = false;
!         if (log) printf("isCastExpression(tk: `%s`, afterParenType: %d)\n", token.toChars(pt.value), afterParenType);
!         auto t = pt;
!         switch (t.value)
!         {
!             case TOK.leftParenthesis:
!                 auto tk = peek(t);  // move past left parenthesis
!                 if (!isTypeName(tk) || tk.value != TOK.rightParenthesis)
!                 {
!                     if (afterParenType)
!                         goto default; // could be ( type-name ) ( unary-expression )
!                     return false;
!                 }
!                 tk = peek(tk);  // move past right parenthesis
! 
!                 if (tk.value == TOK.leftCurly)
!                 {
!                     // ( type-name ) { initializer-list }
!                     if (!isInitializer(tk))
!                     {
!                         return false;
!                     }
!                     t = tk;
!                     break;
!                 }
! 
!                 if (tk.value == TOK.leftParenthesis && peek(tk).value == TOK.rightParenthesis)
!                 {
!                     return false;    // (type-name)() is not a cast (it might be a function call)
!                 }
! 
!                 if (!isCastExpression(tk, true))
!                 {
!                     if (afterParenType) // could be ( type-name ) ( unary-expression )
!                         goto default;   // where unary-expression also matched type-name
!                     return true;
!                 }
!                 // ( type-name ) cast-expression
!                 t = tk;
!                 break;
! 
!             default:
!                 if (!afterParenType || !isUnaryExpression(t, afterParenType))
!                 {
!                     return false;
!                 }
!                 // if we've already seen ( type-name ), then this is a cast
!                 break;
!         }
!         pt = t;
!         if (log) printf("isCastExpression true\n");
!         return true;
!     }
! 
!     /********************************
!      * See if match for unary-expression.
!      * Params:
!      *    pt = starting token, updated to one past end of constant-expression if true
!      *    afterParenType = true if already seen ( type-name ) of a cast-expression
!      * Returns:
!      *    true if unary-expression
!      */
!     private bool isUnaryExpression(ref Token* pt, bool afterParenType = false)
      {
-         auto t = pt;
          switch (t.value)
          {
!             case TOK.plusPlus:
!             case TOK.minusMinus:
!                 t = peek(t);
!                 if (!isUnaryExpression(t, afterParenType))
!                     return false;
!                 break;
! 
!             case TOK.and:
!             case TOK.mul:
!             case TOK.min:
!             case TOK.add:
!             case TOK.not:
!             case TOK.tilde:
!                 t = peek(t);
!                 if (!isCastExpression(t, afterParenType))
!                     return false;
!                 break;
  
!             case TOK._Alignof:
!             case TOK.sizeof_:
!                 t = peek(t);
!                 if (t.value == TOK.leftParenthesis)
!                 {
!                     auto tk = peek(t);
!                     if (isTypeName(tk))
!                     {
!                         if (tk.value != TOK.rightParenthesis)
!                             return false;
!                         t = peek(tk);
!                         break;
!                     }
!                 }
!                 if (!isUnaryExpression(t, afterParenType))
!                     return false;
!                 break;
  
!             default:
!                 // Compound literals are handled by cast and sizeof expressions,
!                 // so be content with just seeing a primary expression.
!                 if (!isPrimaryExpression(t))
!                     return false;
!                 break;
!         }
!         pt = t;
!         return true;
!     }
  
!     /********************************
!      * See if match for primary-expression.
!      * Params:
!      *    pt = starting token, updated to one past end of constant-expression if true
!      * Returns:
!      *    true if primary-expression
!      */
!     private bool isPrimaryExpression(ref Token* pt)
!     {
!         auto t = pt;
!         switch (t.value)
!         {
!             case TOK.identifier:
!             case TOK.charLiteral:
!             case TOK.wcharLiteral:
!             case TOK.dcharLiteral:
!             case TOK.int32Literal:
!             case TOK.uns32Literal:
!             case TOK.int64Literal:
!             case TOK.uns64Literal:
!             case TOK.float32Literal:
!             case TOK.float64Literal:
!             case TOK.float80Literal:
!             case TOK.imaginary32Literal:
!             case TOK.imaginary64Literal:
!             case TOK.imaginary80Literal:
!             case TOK.string_:
!                 t = peek(t);
!                 break;
  
!             case TOK.leftParenthesis:
!                 // ( expression )
!                 if (!skipParens(t, &t))
!                     return false;
!                 break;
  
!             case TOK._Generic:
!                 t = peek(t);
!                 if (!skipParens(t, &t))
!                     return false;
!                 break;
  
              default:
                  return false;
          }
-         pt = t;
-         return true;
      }
  
      //}
--- 4533,4590 ----
          return true;
      }
  
!     /*******************************************
       * Is this the start of a type-name?
       * Params:
!      *  t = first token
       * Returns:
       *  true if start of type-name
       */
!     private bool startsTypeName(Token* t)
      {
          switch (t.value)
          {
!             case TOK.identifier:
!                 // Use typedef table to disambiguate
!                 return isTypedef(t.ident);
  
!             // Type Qualifiers
!             case TOK.const_:
!             case TOK.restrict:
!             case TOK.volatile:
!             case TOK.__stdcall:
  
!             // Type Specifiers
!             case TOK.char_:
!             case TOK.signed:
!             case TOK.unsigned:
!             case TOK.int16:
!             case TOK.int32:
!             case TOK.int64:
!             case TOK.__int128:
!             case TOK.float32:
!             case TOK.float64:
!             case TOK.void_:
!             case TOK._Bool:
  
!             //case TOK._Imaginary: // ? missing in Spec
!             case TOK._Complex:
  
!             // struct-or-union-specifier
!             // enum-specifier
!             case TOK.struct_:
!             case TOK.union_:
!             case TOK.enum_:
  
!             // atomic-type-specifier
!             case TOK._Atomic:
!             case TOK.typeof_:
!             case TOK.__attribute__:
!                 return true;
  
              default:
                  return false;
          }
      }
  
      //}
*************** final class CParser(AST) : Parser!AST
*** 5201,5209 ****
  
          SCW scw;        /// storage-class specifiers
          MOD mod;        /// type qualifiers
!         AST.Expressions*  alignExps;  /// alignment
!         AST.Expression alignasExp; /// Last _Alignas() for errors
!         structalign_t packalign;  /// #pragma pack alignment value
      }
  
      /***********************
--- 4658,4667 ----
  
          SCW scw;        /// storage-class specifiers
          MOD mod;        /// type qualifiers
!         AST.Expressions*  alignAttrs;   /// __attribute__((aligned))
!         AST.Expressions*  alignasExps;  /// _Alignas()
!         AST.Expression lastAlignas;     /// Last _Alignas() for errors
!         structalign_t packalign;        /// #pragma pack alignment value
      }
  
      /***********************
*************** final class CParser(AST) : Parser!AST
*** 5411,5428 ****
       *    loc = location for this declaration
       *    id = identifier of function
       * Returns:
!      *    statement representing the declaration of __func__
       */
!     private AST.Statement createFuncName(Loc loc, Identifier id)
      {
          const fn = id.toString();  // function-name
          auto efn = new AST.StringExp(loc, fn, fn.length, 1, 'c');
          auto ifn = new AST.ExpInitializer(loc, efn);
!         auto lenfn = new AST.IntegerExp(loc, fn.length + 1, AST.Type.tuns32); // +1 for terminating 0
          auto tfn = new AST.TypeSArray(AST.Type.tchar, lenfn);
          efn.type = tfn.makeImmutable();
          efn.committed = true;
!         auto sfn = new AST.VarDeclaration(loc, tfn, Id.__func__, ifn, STC.gshared | STC.immutable_);
          auto e = new AST.DeclarationExp(loc, sfn);
          return new AST.ExpStatement(loc, e);
      }
--- 4869,4916 ----
       *    loc = location for this declaration
       *    id = identifier of function
       * Returns:
!      *    statement representing the declaration of __func__, __FUNCTION__, or __PRETTY-FUNCTION__
       */
!     private AST.Statement createFuncName(Loc loc, Identifier id, Identifier cident)
      {
          const fn = id.toString();  // function-name
          auto efn = new AST.StringExp(loc, fn, fn.length, 1, 'c');
          auto ifn = new AST.ExpInitializer(loc, efn);
!         auto lenfn = new AST.IntegerExp(loc, fn.length + 1, AST.Type.tuns32); // +1 for terminating 0, ditto for __pretty_chars__
          auto tfn = new AST.TypeSArray(AST.Type.tchar, lenfn);
          efn.type = tfn.makeImmutable();
          efn.committed = true;
!         auto sfn = new AST.VarDeclaration(loc, tfn, cident, ifn, STC.gshared | STC.immutable_);
!         auto e = new AST.DeclarationExp(loc, sfn);
!         return new AST.ExpStatement(loc, e);
!     }
! 
!     /* function for C __PRETTY_FUNCTION__ for non-linux systems */
!     private AST.Statement createPrettyFunc(Loc loc, AST.FuncDeclaration fd)
!     {
!         auto tf = fd.type.isTypeFunction();
!         auto funcSig = tf.next.toString();
!         funcSig ~= " ";
!         funcSig ~= fd.ident.toString();
!         funcSig ~= "(";
! 
!         foreach (i, fparam ; tf.parameterList)
!         {
!             if (i > 0)
!                 funcSig ~= ", ";
! 
!             AST.Type t = tf.parameterList[i].type;
!             funcSig ~= t.toString();
!         }
!         funcSig ~= ")";
! 
!         auto efn = new AST.StringExp(loc, funcSig);
!         auto ifn = new AST.ExpInitializer(loc, efn);
!         auto lenfn = new AST.IntegerExp(loc, funcSig.length + 1, AST.Type.tuns32); // +1 for terminating 0
!         auto tfn = new AST.TypeSArray(AST.Type.tchar, lenfn);
!         efn.type = tfn.makeImmutable();
!         efn.committed = true;
!         auto sfn = new AST.VarDeclaration(loc, tfn, Id.PRETTY_FUNCTION, ifn, STC.gshared | STC.immutable_);
          auto e = new AST.DeclarationExp(loc, sfn);
          return new AST.ExpStatement(loc, e);
      }
*************** final class CParser(AST) : Parser!AST
*** 5449,5455 ****
          // `const` is always applied to the return type, not the
          // type function itself.
          if (auto tf = t.isTypeFunction())
!             tf.next = tf.next.addSTC(STC.const_);
          else if (auto tt = t.isTypeTag())
              tt.mod |= MODFlags.const_;
          else
--- 4937,4943 ----
          // `const` is always applied to the return type, not the
          // type function itself.
          if (auto tf = t.isTypeFunction())
!             tf.next = AST.addSTC(tf.next, STC.const_);
          else if (auto tt = t.isTypeTag())
              tt.mod |= MODFlags.const_;
          else
*************** final class CParser(AST) : Parser!AST
*** 5458,5464 ****
               */
              auto tn = t.nextOf();
              if (!tn || tn.isConst())
!                 t = t.addSTC(STC.const_);
          }
          return t;
      }
--- 4946,4952 ----
               */
              auto tn = t.nextOf();
              if (!tn || tn.isConst())
!                 t = AST.addSTC(t, STC.const_);
          }
          return t;
      }
*************** final class CParser(AST) : Parser!AST
*** 5485,5497 ****
              }
          }
  
!         if (specifier.alignExps)
          {
!             //printf("  applying _Alignas %s, packalign %d\n", (*specifier.alignExps)[0].toChars(), cast(int)specifier.packalign);
              // Wrap declaration in an AlignDeclaration
              auto decls = new AST.Dsymbols(1);
              (*decls)[0] = s;
!             s = new AST.AlignDeclaration(s.loc, specifier.alignExps, decls);
          }
          else if (!specifier.packalign.isDefault() && !specifier.packalign.isUnknown())
          {
--- 4973,4995 ----
              }
          }
  
!         if (specifier.alignAttrs)
          {
!             //printf("  applying attribute((aligned)) %s\n", (*specifier.alignAttrs)[0].toChars());
              // Wrap declaration in an AlignDeclaration
              auto decls = new AST.Dsymbols(1);
              (*decls)[0] = s;
!             s = new AST.AlignDeclaration(s.loc, specifier.alignAttrs, decls);
!         }
!         if (specifier.alignasExps)
!         {
!             //printf("  applying _Alignas %s, packalign %d\n", (*specifier.alignasExps)[0].toChars(), cast(int)specifier.packalign);
!             // Wrap declaration in an AlignDeclaration
!             auto decls = new AST.Dsymbols(1);
!             (*decls)[0] = s;
!             auto ad = new AST.AlignDeclaration(s.loc, specifier.alignasExps, decls);
!             ad.salign.setAlignas();
!             s = ad;
          }
          else if (!specifier.packalign.isDefault() && !specifier.packalign.isUnknown())
          {
*************** final class CParser(AST) : Parser!AST
*** 5791,5797 ****
              if (n < 1 || n & (n - 1) || ushort.max < n)
                  error(loc, "pack must be an integer positive power of 2, not 0x%llx", cast(ulong)n);
              packalign.set(cast(uint)n);
!             packalign.setPack(true);
          }
  
          scan(&n);
--- 5289,5295 ----
              if (n < 1 || n & (n - 1) || ushort.max < n)
                  error(loc, "pack must be an integer positive power of 2, not 0x%llx", cast(ulong)n);
              packalign.set(cast(uint)n);
!             packalign.setPack();
          }
  
          scan(&n);
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/ctfeexpr.d gcc-16-20260208/gcc/d/dmd/ctfeexpr.d
*** gcc-16-20260201/gcc/d/dmd/ctfeexpr.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/ctfeexpr.d	Sun Feb  8 22:32:07 2026
*************** import dmd.dstruct;
*** 25,42 ****
  import dmd.dtemplate;
  import dmd.errors;
  import dmd.expression;
  import dmd.func;
  import dmd.globals : dinteger_t, sinteger_t, uinteger_t;
  import dmd.location;
  import dmd.mtype;
  import dmd.root.bitarray;
- import dmd.root.complex;
  import dmd.root.ctfloat;
  import dmd.root.port;
  import dmd.root.rmem;
  import dmd.tokens;
  import dmd.typesem;
- import dmd.visitor;
  
  /****************************************************************/
  /* A type meant as a union of all the Expression types,
--- 25,41 ----
  import dmd.dtemplate;
  import dmd.errors;
  import dmd.expression;
+ import dmd.expressionsem;
  import dmd.func;
  import dmd.globals : dinteger_t, sinteger_t, uinteger_t;
  import dmd.location;
  import dmd.mtype;
  import dmd.root.bitarray;
  import dmd.root.ctfloat;
  import dmd.root.port;
  import dmd.root.rmem;
  import dmd.tokens;
  import dmd.typesem;
  
  /****************************************************************/
  /* A type meant as a union of all the Expression types,
*************** Expression pointerDifference(UnionExp* p
*** 777,789 ****
  // and op is EXP.add or EXP.min
  Expression pointerArithmetic(UnionExp* pue, Loc loc, EXP op, Type type, Expression eptr, Expression e2)
  {
!     if (eptr.type.nextOf().ty == Tvoid)
      {
-         error(loc, "cannot perform arithmetic on `void*` pointers at compile time");
-     Lcant:
          emplaceExp!(CTFEExp)(pue, EXP.cantExpression);
          return pue.exp();
      }
      if (eptr.op == EXP.address)
          eptr = eptr.isAddrExp().e1;
      dinteger_t ofs1;
--- 776,791 ----
  // and op is EXP.add or EXP.min
  Expression pointerArithmetic(UnionExp* pue, Loc loc, EXP op, Type type, Expression eptr, Expression e2)
  {
!     Expression cant()
      {
          emplaceExp!(CTFEExp)(pue, EXP.cantExpression);
          return pue.exp();
      }
+     if (eptr.type.nextOf().ty == Tvoid)
+     {
+         error(loc, "cannot perform arithmetic on `void*` pointers at compile time");
+         return cant();
+     }
      if (eptr.op == EXP.address)
          eptr = eptr.isAddrExp().e1;
      dinteger_t ofs1;
*************** Expression pointerArithmetic(UnionExp* p
*** 793,805 ****
          if (agg1.isSymOffExp().var.type.ty != Tsarray)
          {
              error(loc, "cannot perform pointer arithmetic on arrays of unknown length at compile time");
!             goto Lcant;
          }
      }
      else if (agg1.op != EXP.string_ && agg1.op != EXP.arrayLiteral)
      {
          error(loc, "cannot perform pointer arithmetic on non-arrays at compile time");
!         goto Lcant;
      }
      dinteger_t ofs2 = e2.toInteger();
      Type pointee = agg1.type.toBasetype().nextOf();
--- 795,807 ----
          if (agg1.isSymOffExp().var.type.ty != Tsarray)
          {
              error(loc, "cannot perform pointer arithmetic on arrays of unknown length at compile time");
!             return cant();
          }
      }
      else if (agg1.op != EXP.string_ && agg1.op != EXP.arrayLiteral)
      {
          error(loc, "cannot perform pointer arithmetic on non-arrays at compile time");
!         return cant();
      }
      dinteger_t ofs2 = e2.toInteger();
      Type pointee = agg1.type.toBasetype().nextOf();
*************** Expression pointerArithmetic(UnionExp* p
*** 825,836 ****
      else
      {
          error(loc, "CTFE internal error: bad pointer operation");
!         goto Lcant;
      }
      if (indx < 0 || len < indx)
      {
          error(loc, "cannot assign pointer to index %lld inside memory block `[0..%lld]`", indx, len);
!         goto Lcant;
      }
      if (agg1.op == EXP.symbolOffset)
      {
--- 827,838 ----
      else
      {
          error(loc, "CTFE internal error: bad pointer operation");
!         return cant();
      }
      if (indx < 0 || len < indx)
      {
          error(loc, "cannot assign pointer to index %lld inside memory block `[0..%lld]`", indx, len);
!         return cant();
      }
      if (agg1.op == EXP.symbolOffset)
      {
*************** Expression pointerArithmetic(UnionExp* p
*** 842,848 ****
      if (agg1.op != EXP.arrayLiteral && agg1.op != EXP.string_)
      {
          error(loc, "CTFE internal error: pointer arithmetic `%s`", agg1.toChars());
!         goto Lcant;
      }
      if (auto tsa = eptr.type.toBasetype().isTypeSArray())
      {
--- 844,850 ----
      if (agg1.op != EXP.arrayLiteral && agg1.op != EXP.string_)
      {
          error(loc, "CTFE internal error: pointer arithmetic `%s`", agg1.toChars());
!         return cant();
      }
      if (auto tsa = eptr.type.toBasetype().isTypeSArray())
      {
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/cxxfrontend.d gcc-16-20260208/gcc/d/dmd/cxxfrontend.d
*** gcc-16-20260201/gcc/d/dmd/cxxfrontend.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/cxxfrontend.d	Sun Feb  8 22:32:07 2026
*************** import dmd.arraytypes;
*** 15,22 ****
  import dmd.astenums;
  import dmd.attrib;
  import dmd.common.outbuffer : OutBuffer;
! import dmd.dclass : ClassDeclaration;
! import dmd.declaration : TypeInfoDeclaration;
  import dmd.denum : EnumDeclaration;
  import dmd.dmodule /*: Module*/;
  import dmd.dscope : Scope;
--- 15,22 ----
  import dmd.astenums;
  import dmd.attrib;
  import dmd.common.outbuffer : OutBuffer;
! import dmd.dclass : ClassDeclaration, BaseClass;
! import dmd.declaration : TypeInfoDeclaration, VarDeclaration, TupleDeclaration;
  import dmd.denum : EnumDeclaration;
  import dmd.dmodule /*: Module*/;
  import dmd.dscope : Scope;
*************** import dmd.init : Initializer, NeedInter
*** 32,37 ****
--- 32,40 ----
  import dmd.location : Loc;
  import dmd.mtype /*: Covariant, Type, Parameter, ParameterList*/;
  import dmd.rootobject : RootObject;
+ import dmd.root.optional;
+ import dmd.root.longdouble : real_t = longdouble;
+ import dmd.root.complex;
  import dmd.semantic3;
  import dmd.statement : Statement, AsmStatement, GccAsmStatement;
  
*************** void mangleToBuffer(TemplateInstance ti,
*** 111,124 ****
  }
  
  /***********************************************************
-  * dmodule.d
-  */
- FuncDeclaration findGetMembers(ScopeDsymbol dsym)
- {
-     return dmd.dmodule.findGetMembers(dsym);
- }
- 
- /***********************************************************
   * doc.d
   */
  void gendocfile(Module m, const char* ddoctext_ptr, size_t ddoctext_length,
--- 114,119 ----
*************** bool isPOD(StructDeclaration sd)
*** 224,229 ****
--- 219,327 ----
      return dmd.dsymbolsem.isPOD(sd);
  }
  
+ bool fillVtbl(BaseClass* bc, ClassDeclaration cd, FuncDeclarations* vtbl, int newinstance)
+ {
+     import dmd.dsymbolsem;
+     return dmd.dsymbolsem.fillVtbl(bc, cd, vtbl, newinstance);
+ }
+ 
+ bool overloadInsert(Dsymbol ds, Dsymbol s)
+ {
+     import dmd.dsymbolsem;
+     return dmd.dsymbolsem.overloadInsert(ds, s);
+ }
+ 
+ bool equals(const Dsymbol ds, const Dsymbol s)
+ {
+     import dmd.dsymbolsem;
+     return dmd.dsymbolsem.equals(ds, s);
+ }
+ 
+ Type getType(Dsymbol ds)
+ {
+     import dmd.dsymbolsem;
+     return dmd.dsymbolsem.getType(ds);
+ }
+ 
+ uinteger_t size(Dsymbol ds, Loc loc)
+ {
+     import dmd.dsymbolsem;
+     return dmd.dsymbolsem.size(ds, loc);
+ }
+ 
+ void semantic3OnDependencies(Module m)
+ {
+     import dmd.dsymbolsem;
+     return dmd.dsymbolsem.semantic3OnDependencies(m);
+ }
+ 
+ void addDeferredSemantic(Dsymbol s)
+ {
+     import dmd.dsymbolsem;
+     return dmd.dsymbolsem.addDeferredSemantic(s);
+ }
+ 
+ void addDeferredSemantic2(Dsymbol s)
+ {
+     import dmd.dsymbolsem;
+     return dmd.dsymbolsem.addDeferredSemantic2(s);
+ }
+ 
+ void addDeferredSemantic3(Dsymbol s)
+ {
+     import dmd.dsymbolsem;
+     return dmd.dsymbolsem.addDeferredSemantic3(s);
+ }
+ 
+ void runDeferredSemantic()
+ {
+     import dmd.dsymbolsem;
+     return dmd.dsymbolsem.runDeferredSemantic();
+ }
+ 
+ void runDeferredSemantic2()
+ {
+     import dmd.dsymbolsem;
+     return dmd.dsymbolsem.runDeferredSemantic2();
+ }
+ 
+ void runDeferredSemantic3()
+ {
+     import dmd.dsymbolsem;
+     return dmd.dsymbolsem.runDeferredSemantic3();
+ }
+ 
+ bool isOverlappedWith(VarDeclaration vd, VarDeclaration v)
+ {
+     import dmd.dsymbolsem;
+     return dmd.dsymbolsem.isOverlappedWith(vd, v);
+ }
+ 
+ Scope* newScope(AggregateDeclaration ad, Scope* sc)
+ {
+     import dmd.dsymbolsem;
+     return dmd.dsymbolsem.newScope(ad, sc);
+ }
+ 
+ Dsymbol search(Scope* sc, Loc loc, Identifier ident, out Dsymbol pscopesym,
+     SearchOptFlags flags = SearchOpt.all)
+ {
+     import dmd.dsymbolsem;
+     return dmd.dsymbolsem.search(sc, loc, ident, pscopesym, flags);
+ }
+ 
+ void addObjcSymbols(Dsymbol sym, ClassDeclarations* classes, ClassDeclarations* categories)
+ {
+     import dmd.dsymbolsem;
+     return dmd.dsymbolsem.addObjcSymbols(sym, classes, categories);
+ }
+ 
+ FuncDeclaration findGetMembers(ScopeDsymbol dsym)
+ {
+     import dmd.dsymbolsem;
+     return dmd.dsymbolsem.findGetMembers(dsym);
+ }
+ 
  /***********************************************************
   * dtemplate.d
   */
*************** void printInstantiationTrace(TemplateIns
*** 275,284 ****
  /***********************************************************
   * dtoh.d
   */
! void genCppHdrFiles(ref Modules ms)
  {
      import dmd.dtoh;
!     return dmd.dtoh.genCppHdrFiles(ms);
  }
  
  /***********************************************************
--- 373,382 ----
  /***********************************************************
   * dtoh.d
   */
! void genCppHdrFiles(ref Modules ms, ErrorSink eSink)
  {
      import dmd.dtoh;
!     return dmd.dtoh.genCppHdrFiles(ms, eSink);
  }
  
  /***********************************************************
*************** Expression getDefaultValue(EnumDeclarati
*** 290,306 ****
      return dmd.enumsem.getDefaultValue(ed, loc);
  }
  
  /***********************************************************
!  * expression.d
   */
  void expandTuples(Expressions* exps, ArgumentLabels* names = null)
  {
!     return dmd.expression.expandTuples(exps, names);
  }
  
- /***********************************************************
-  * expressionsem.d
-  */
  Expression expressionSemantic(Expression e, Scope* sc)
  {
      import dmd.expressionsem;
--- 388,404 ----
      return dmd.enumsem.getDefaultValue(ed, loc);
  }
  
+ 
  /***********************************************************
!  * expressionsem.d
   */
+ 
  void expandTuples(Expressions* exps, ArgumentLabels* names = null)
  {
!     import dmd.expressionsem;
!     return dmd.expressionsem.expandTuples(exps, names);
  }
  
  Expression expressionSemantic(Expression e, Scope* sc)
  {
      import dmd.expressionsem;
*************** bool fill(StructDeclaration sd, Loc loc,
*** 314,335 ****
      return dmd.expressionsem.fill(sd, loc, elements, ctorinit);
  }
  
  /***********************************************************
!  * func.d
   */
  FuncDeclaration genCfunc(Parameters* fparams, Type treturn, const(char)* name, StorageClass stc = STC.none)
  {
!     return FuncDeclaration.genCfunc(fparams, treturn, name, cast(STC) stc);
  }
  
  FuncDeclaration genCfunc(Parameters* fparams, Type treturn, Identifier id, StorageClass stc = STC.none)
  {
!     return FuncDeclaration.genCfunc(fparams, treturn, id, cast(STC) stc);
  }
  
- /***********************************************************
-  * funcsem.d
-  */
  bool functionSemantic(FuncDeclaration fd)
  {
      import dmd.funcsem;
--- 412,504 ----
      return dmd.expressionsem.fill(sd, loc, elements, ctorinit);
  }
  
+ bool isIdentical(const Expression exp, const Expression e)
+ {
+     import dmd.expressionsem;
+     return dmd.expressionsem.isIdentical(exp, e);
+ }
+ 
+ bool equals(const Expression exp, const Expression e)
+ {
+     import dmd.expressionsem;
+     return dmd.expressionsem.equals(exp, e);
+ }
+ 
+ bool isLvalue(Expression exp)
+ {
+     import dmd.expressionsem;
+     return dmd.expressionsem.isLvalue(exp);
+ }
+ 
+ int getFieldIndex(ClassReferenceExp cre, Type fieldtype, uint fieldoffset)
+ {
+     import dmd.expressionsem;
+     return dmd.expressionsem.getFieldIndex(cre, fieldtype, fieldoffset);
+ }
+ 
+ void fillTupleExpExps(TupleExp te, TupleDeclaration tup)
+ {
+     import dmd.expressionsem;
+     return dmd.expressionsem.fillTupleExpExps(te, tup);
+ }
+ 
+ Optional!bool toBool(Expression exp)
+ {
+     import dmd.expressionsem;
+     return dmd.expressionsem.toBool(exp);
+ }
+ 
+ StringExp toStringExp(Expression exp)
+ {
+     import dmd.expressionsem;
+     return dmd.expressionsem.toStringExp(exp);
+ }
+ 
+ dinteger_t toInteger(Expression exp)
+ {
+     import dmd.expressionsem;
+     return dmd.expressionsem.toInteger(exp);
+ }
+ 
+ uinteger_t toUInteger(Expression exp)
+ {
+     import dmd.expressionsem;
+     return dmd.expressionsem.toUInteger(exp);
+ }
+ 
+ real_t toReal(Expression exp)
+ {
+     import dmd.expressionsem;
+     return dmd.expressionsem.toReal(exp);
+ }
+ 
+ complex_t toComplex(Expression exp)
+ {
+     import dmd.expressionsem;
+     return dmd.expressionsem.toComplex(exp);
+ }
+ 
+ real_t toImaginary(Expression exp)
+ {
+     import dmd.expressionsem;
+     return dmd.expressionsem.toImaginary(exp);
+ }
+ 
  /***********************************************************
!  * funcsem.d
   */
  FuncDeclaration genCfunc(Parameters* fparams, Type treturn, const(char)* name, StorageClass stc = STC.none)
  {
!     import dmd.funcsem;
!     return dmd.funcsem.genCfunc(fparams, treturn, name, cast(STC) stc);
  }
  
  FuncDeclaration genCfunc(Parameters* fparams, Type treturn, Identifier id, StorageClass stc = STC.none)
  {
!     import dmd.funcsem;
!     return dmd.funcsem.genCfunc(fparams, treturn, id, cast(STC) stc);
  }
  
  bool functionSemantic(FuncDeclaration fd)
  {
      import dmd.funcsem;
*************** PURE isPure(FuncDeclaration fd)
*** 354,359 ****
--- 523,534 ----
      return dmd.funcsem.isPure(fd);
  }
  
+ bool needsClosure(FuncDeclaration fd)
+ {
+     import dmd.funcsem;
+     return dmd.funcsem.needsClosure(fd);
+ }
+ 
  /***********************************************************
   * hdrgen.d
   */
*************** JsonFieldFlags tryParseJsonField(const(c
*** 462,475 ****
  }
  
  /***********************************************************
-  * mtype.d
-  */
- AggregateDeclaration isAggregate(Type t)
- {
-     return dmd.mtype.isAggregate(t);
- }
- 
- /***********************************************************
   * optimize.d
   */
  Expression optimize(Expression e, int result, bool keepLvalue = false)
--- 637,642 ----
*************** bool tpsemantic(TemplateParameter tp, Sc
*** 528,533 ****
--- 695,712 ----
  /***********************************************************
   * typesem.d
   */
+ bool hasDeprecatedAliasThis(Type type)
+ {
+     import dmd.typesem;
+     return dmd.typesem.hasDeprecatedAliasThis(type);
+ }
+ 
+ AggregateDeclaration isAggregate(Type t)
+ {
+     import dmd.typesem;
+     return dmd.typesem.isAggregate(t);
+ }
+ 
  bool hasPointers(Type t)
  {
      import dmd.typesem;
*************** Type merge2(Type type)
*** 558,563 ****
--- 737,748 ----
      return dmd.typesem.merge2(type);
  }
  
+ Type toBasetype(Type type)
+ {
+     import dmd.typesem;
+     return dmd.typesem.toBasetype(type);
+ }
+ 
  Expression defaultInit(Type mt, Loc loc, const bool isCfile = false)
  {
      import dmd.typesem;
*************** Type referenceTo(Type type)
*** 721,726 ****
--- 906,917 ----
      return dmd.typesem.referenceTo(type);
  }
  
+ Type memType(TypeEnum type)
+ {
+     import dmd.typesem;
+     return dmd.typesem.memType(type);
+ }
+ 
  uinteger_t size(Type type)
  {
      import dmd.typesem;
*************** uinteger_t size(Type type, Loc loc)
*** 733,738 ****
--- 924,941 ----
      return dmd.typesem.size(type, loc);
  }
  
+ structalign_t alignment(Type type)
+ {
+     import dmd.typesem;
+     return dmd.typesem.alignment(type);
+ }
+ 
+ uint alignsize(Type type)
+ {
+     import dmd.typesem;
+     return dmd.typesem.alignsize(type);
+ }
+ 
  MATCH implicitConvTo(Type from, Type to)
  {
      import dmd.dcast;
*************** Expression defaultInitLiteral(Type t, Lo
*** 751,756 ****
--- 954,1139 ----
      return dmd.typesem.defaultInitLiteral(t, loc);
  }
  
+ bool hasUnsafeBitpatterns(Type type)
+ {
+     import dmd.typesem;
+     return dmd.typesem.hasUnsafeBitpatterns(type);
+ }
+ 
+ bool hasInvariant(Type type)
+ {
+     import dmd.typesem;
+     return dmd.typesem.hasInvariant(type);
+ }
+ 
+ bool hasVoidInitPointers(Type type)
+ {
+     import dmd.typesem;
+     return dmd.typesem.hasVoidInitPointers(type);
+ }
+ 
+ void Type_init()
+ {
+     import dmd.typesem;
+     return dmd.typesem.Type_init();
+ }
+ 
+ void transitive(TypeNext type)
+ {
+     import dmd.typesem;
+     return dmd.typesem.transitive(type);
+ }
+ 
+ Type makeConst(Type type)
+ {
+     import dmd.typesem;
+     return dmd.typesem.makeConst(type);
+ }
+ 
+ Type makeImmutable(Type type)
+ {
+     import dmd.typesem;
+     return dmd.typesem.makeImmutable(type);
+ }
+ 
+ Type makeMutable(Type type)
+ {
+     import dmd.typesem;
+     return dmd.typesem.makeMutable(type);
+ }
+ 
+ Type makeShared(Type type)
+ {
+     import dmd.typesem;
+     return dmd.typesem.makeShared(type);
+ }
+ 
+ Type makeSharedConst(Type type)
+ {
+     import dmd.typesem;
+     return dmd.typesem.makeSharedConst(type);
+ }
+ 
+ Type makeWild(Type type)
+ {
+     import dmd.typesem;
+     return dmd.typesem.makeWild(type);
+ }
+ 
+ Type makeWildConst(Type type)
+ {
+     import dmd.typesem;
+     return dmd.typesem.makeWildConst(type);
+ }
+ 
+ Type makeSharedWild(Type type)
+ {
+     import dmd.typesem;
+     return dmd.typesem.makeSharedWild(type);
+ }
+ 
+ Type makeSharedWildConst(Type type)
+ {
+     import dmd.typesem;
+     return dmd.typesem.makeSharedWildConst(type);
+ }
+ 
+ Type nextOf(Type type)
+ {
+     import dmd.typesem;
+     return dmd.typesem.nextOf(type);
+ }
+ 
+ Type baseElemOf(Type type)
+ {
+     import dmd.typesem;
+     return dmd.typesem.baseElemOf(type);
+ }
+ 
+ Type isLazyArray(Parameter param)
+ {
+     import dmd.typesem;
+     return dmd.typesem.isLazyArray(param);
+ }
+ 
+ MOD deduceWild(Type type, Type t, bool isRef)
+ {
+     import dmd.typesem;
+     return dmd.typesem.deduceWild(type, t, isRef);
+ }
+ 
+ bool isIntegral(Type type)
+ {
+     import dmd.typesem;
+     return dmd.typesem.isIntegral(type);
+ }
+ 
+ bool isFloating(Type type)
+ {
+     import dmd.typesem;
+     return dmd.typesem.isFloating(type);
+ }
+ 
+ bool isScalar(Type type)
+ {
+     import dmd.typesem;
+     return dmd.typesem.isScalar(type);
+ }
+ 
+ bool isReal(Type type)
+ {
+     import dmd.typesem;
+     return dmd.typesem.isReal(type);
+ }
+ 
+ bool isComplex(Type type)
+ {
+     import dmd.typesem;
+     return dmd.typesem.isComplex(type);
+ }
+ 
+ bool isImaginary(Type type)
+ {
+     import dmd.typesem;
+     return dmd.typesem.isImaginary(type);
+ }
+ 
+ bool isString(Type type)
+ {
+     import dmd.typesem;
+     return dmd.typesem.isString(type);
+ }
+ 
+ bool isBoolean(Type type)
+ {
+     import dmd.typesem;
+     return dmd.typesem.isBoolean(type);
+ }
+ 
+ bool isUnsigned(Type type)
+ {
+     import dmd.typesem;
+     return dmd.typesem.isUnsigned(type);
+ }
+ 
+ bool needsNested(Type type)
+ {
+     import dmd.typesem;
+     return dmd.typesem.needsNested(type);
+ }
+ 
+ bool needsDestruction(Type type)
+ {
+     import dmd.typesem;
+     return dmd.typesem.needsDestruction(type);
+ }
+ 
+ bool needsCopyOrPostblit(Type type)
+ {
+     import dmd.typesem;
+     return dmd.typesem.needsCopyOrPostblit(type);
+ }
+ 
  /***********************************************************
   * typinf.d
   */
*************** TypeInfoDeclaration getTypeInfoAssocArra
*** 787,792 ****
--- 1170,1181 ----
  /**
   * templatesem.d
   */
+ bool declareParameter(TemplateParameter tp, Scope* sc)
+ {
+     import dmd.templatesem;
+     return dmd.templatesem.declareParameter(tp, sc);
+ }
+ 
  bool needsCodegen(TemplateInstance ti)
  {
      import dmd.templatesem;
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/dcast.d gcc-16-20260208/gcc/d/dmd/dcast.d
*** gcc-16-20260201/gcc/d/dmd/dcast.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/dcast.d	Sun Feb  8 22:32:07 2026
*************** module dmd.dcast;
*** 14,20 ****
  import core.stdc.stdio;
  import core.stdc.string;
  import dmd.aggregate;
- import dmd.aliasthis;
  import dmd.arrayop;
  import dmd.arraytypes;
  import dmd.astenums;
--- 14,19 ----
*************** Expression implicitCastTo(Expression e,
*** 90,133 ****
              }
  
              auto ad = isAggregate(e.type);
!             if (ad && ad.aliasthis)
!             {
!                 if (!ad.type || ad.type.isTypeError())
!                     return e;
!                 auto ts = ad.type.isTypeStruct();
!                 const adMatch = ts
!                     ? ts.implicitConvToWithoutAliasThis(t)
!                     : ad.type.isTypeClass().implicitConvToWithoutAliasThis(t);
  
!                 if (!adMatch)
!                 {
!                     Type tob = t.toBasetype();
!                     Type t1b = e.type.toBasetype();
!                     if (ad != isAggregate(tob))
!                     {
!                         if (t1b.ty == Tclass && tob.ty == Tclass)
!                         {
!                             ClassDeclaration t1cd = t1b.isClassHandle();
!                             ClassDeclaration tocd = tob.isClassHandle();
!                             int offset;
!                             if (tocd.isBaseOf(t1cd, &offset))
!                             {
!                                 auto result = new CastExp(e.loc, e, t);
!                                 result.type = t;
!                                 return result;
!                             }
!                         }
  
!                         /* Forward the cast to our alias this member, rewrite to:
!                          *   cast(to)e1.aliasthis
!                          */
!                         auto result = resolveAliasThis(sc, e);
!                         return result.castTo(sc, t);
!                    }
                  }
              }
  
!             return e.castTo(sc, t);
          }
  
          auto result = e.optimize(WANTvalue);
--- 89,130 ----
              }
  
              auto ad = isAggregate(e.type);
!             if (!ad || !ad.aliasthis)
!                 return e.castTo(sc, t);
  
!             if (!ad.type || ad.type.isTypeError())
!                 return e;
!             auto ts = ad.type.isTypeStruct();
!             const adMatch = ts
!                 ? ts.implicitConvToWithoutAliasThis(t)
!                 : ad.type.isTypeClass().implicitConvToWithoutAliasThis(t);
  
!             if (adMatch)
!                 return e.castTo(sc, t);
! 
!             Type tob = t.toBasetype();
!             Type t1b = e.type.toBasetype();
!             if (ad == isAggregate(tob))
!                 return e.castTo(sc, t);
! 
!             if (t1b.ty == Tclass && tob.ty == Tclass)
!             {
!                 ClassDeclaration t1cd = t1b.isClassHandle();
!                 ClassDeclaration tocd = tob.isClassHandle();
!                 int offset;
!                 if (tocd.isBaseOf(t1cd, &offset))
!                 {
!                     auto result = new CastExp(e.loc, e, t);
!                     result.type = t;
!                     return result;
                  }
              }
  
!             /* Forward the cast to our alias this member, rewrite to:
!              *   cast(to)e1.aliasthis
!              */
!             auto result = resolveAliasThis(sc, e);
!             return result.castTo(sc, t);
          }
  
          auto result = e.optimize(WANTvalue);
*************** Expression implicitCastTo(Expression e,
*** 136,189 ****
              return implicitCastTo(result, sc, t);
          }
  
!         if (t.ty != Terror && e.type.ty != Terror)
          {
!             if (!t.deco)
              {
!                 error(e.loc, "forward reference to type `%s`", t.toChars());
              }
!             else
              {
!                 //printf("type %p ty %d deco %p\n", type, type.ty, type.deco);
!                 //type = type.typeSemantic(loc, sc);
!                 //printf("type %s t %s\n", type.deco, t.deco);
!                 auto ts = toAutoQualChars(e.type, t);
! 
!                 // Special case for improved diagnostic when const to mutable conversion
!                 // fails due to struct/union having pointers
!                 if (e.type.ty == Tstruct && t.ty == Tstruct &&
!                     e.type.isTypeStruct().sym == t.isTypeStruct().sym &&
!                     e.type.mod == MODFlags.const_ && t.mod == 0 && e.type.hasPointers)
!                 {
!                     auto sym = e.type.isTypeStruct().sym;
!                     error(e.loc, "cannot implicitly convert expression `%s` of type `%s` to `%s` because %s `%s` contains pointers or references",
!                         e.toErrMsg(), ts[0], ts[1], sym.kind(), sym.toErrMsg());
!                     return ErrorExp.get();
!                 }
! 
!                 // Special case for pointer conversions
!                 if (e.type.toBasetype().ty == Tpointer && t.toBasetype().ty == Tpointer)
!                 {
!                     Type fromPointee = e.type.nextOf();
!                     Type toPointee = t.nextOf();
!                     // Const -> mutable conversion (disallowed)
!                     if (fromPointee.isConst() && !toPointee.isConst())
!                     {
!                         error(e.loc, "cannot implicitly convert `%s` to `%s`", e.type.toChars(), t.toChars());
!                         errorSupplemental(e.loc, "Note: Converting const to mutable requires an explicit cast (`cast(int*)`).");
!                         return ErrorExp.get();
!                     }
!                     // Incompatible pointee types (e.g., int* -> float* )
!                     else if (fromPointee.toBasetype().ty != toPointee.toBasetype().ty)
!                     {
!                         error(e.loc, "cannot implicitly convert `%s` to `%s`", e.type.toChars(), t.toChars());
!                         errorSupplemental(e.loc, "Note: Pointer types point to different base types (`%s` vs `%s`)", fromPointee.toChars(), toPointee.toChars());
!                         return ErrorExp.get();
!                     }
!                 }
!                 error(e.loc, "cannot implicitly convert expression `%s` of type `%s` to `%s`", e.toErrMsg(), ts[0], ts[1]);
              }
          }
          return ErrorExp.get();
      }
  
--- 133,186 ----
              return implicitCastTo(result, sc, t);
          }
  
!         if (t.ty == Terror || e.type.ty == Terror)
!             return ErrorExp.get();
! 
!         if (!t.deco)
          {
!             error(e.loc, "forward reference to type `%s`", t.toChars());
!             return ErrorExp.get();
!         }
! 
!         //printf("type %p ty %d deco %p\n", type, type.ty, type.deco);
!         //type = type.typeSemantic(loc, sc);
!         //printf("type %s t %s\n", type.deco, t.deco);
!         auto ts = toAutoQualChars(e.type, t);
! 
!         // Special case for improved diagnostic when const to mutable conversion
!         // fails due to struct/union having pointers
!         if (e.type.ty == Tstruct && t.ty == Tstruct &&
!             e.type.isTypeStruct().sym == t.isTypeStruct().sym &&
!             e.type.mod == MODFlags.const_ && t.mod == 0 && e.type.hasPointers)
!         {
!             auto sym = e.type.isTypeStruct().sym;
!             error(e.loc, "cannot implicitly convert expression `%s` of type `%s` to `%s` because %s `%s` contains pointers or references",
!                 e.toErrMsg(), ts[0], ts[1], sym.kind(), sym.toErrMsg());
!             return ErrorExp.get();
!         }
! 
!         // Special case for pointer conversions
!         if (e.type.toBasetype().ty == Tpointer && t.toBasetype().ty == Tpointer)
!         {
!             Type fromPointee = e.type.nextOf();
!             Type toPointee = t.nextOf();
!             // Const -> mutable conversion (disallowed)
!             if (fromPointee.isConst() && !toPointee.isConst())
              {
!                 error(e.loc, "cannot implicitly convert `%s` to `%s`", e.type.toChars(), t.toChars());
!                 errorSupplemental(e.loc, "Note: Converting const to mutable requires an explicit cast (`cast(int*)`).");
!                 return ErrorExp.get();
              }
!             // Incompatible pointee types (e.g., int* -> float* )
!             else if (fromPointee.toBasetype().ty != toPointee.toBasetype().ty)
              {
!                 error(e.loc, "cannot implicitly convert `%s` to `%s`", e.type.toChars(), t.toChars());
!                 errorSupplemental(e.loc, "Note: Pointer types point to different base types (`%s` vs `%s`)", fromPointee.toChars(), toPointee.toChars());
!                 return ErrorExp.get();
              }
          }
+         error(e.loc, "cannot implicitly convert expression `%s` of type `%s` to `%s`", e.toErrMsg(), ts[0], ts[1]);
+ 
          return ErrorExp.get();
      }
  
*************** MATCH implicitConvTo(Expression e, Type
*** 683,689 ****
                  {
                      if (e.committed && tynto != tyn)
                          return MATCH.nomatch;
!                     size_t fromlen = e.numberOfCodeUnits(tynto);
                      size_t tolen = cast(size_t)t.isTypeSArray().dim.toInteger();
                      if (tolen < fromlen)
                          return MATCH.nomatch;
--- 680,689 ----
                  {
                      if (e.committed && tynto != tyn)
                          return MATCH.nomatch;
!                     string s;
!                     size_t fromlen = e.numberOfCodeUnits(tynto, s);
!                     if (s)
!                         error(e.loc, "%.*s", cast(int)s.length, s.ptr);
                      size_t tolen = cast(size_t)t.isTypeSArray().dim.toInteger();
                      if (tolen < fromlen)
                          return MATCH.nomatch;
*************** MATCH implicitConvTo(Expression e, Type
*** 705,711 ****
                  {
                      if (e.committed && tynto != tyn)
                          return MATCH.nomatch;
!                     size_t fromlen = e.numberOfCodeUnits(tynto);
                      size_t tolen = cast(size_t)t.isTypeSArray().dim.toInteger();
                      if (tolen < fromlen)
                          return MATCH.nomatch;
--- 705,714 ----
                  {
                      if (e.committed && tynto != tyn)
                          return MATCH.nomatch;
!                     string s;
!                     size_t fromlen = e.numberOfCodeUnits(tynto, s);
!                     if (s)
!                         error(e.loc, "%.*s", cast(int)s.length, s.ptr);
                      size_t tolen = cast(size_t)t.isTypeSArray().dim.toInteger();
                      if (tolen < fromlen)
                          return MATCH.nomatch;
*************** MATCH implicitConvTo(Expression e, Type
*** 1316,1388 ****
              if (sd.isNested())
                  return MATCH.nomatch;
          }
!         if (ntb.isZeroInit(e.loc))
          {
!             /* Zeros are implicitly convertible, except for special cases.
!              */
!             if (auto tc = ntb.isTypeClass())
!             {
!                 /* With new() must look at the class instance initializer.
!                  */
!                 ClassDeclaration cd = tc.sym;
  
!                 cd.size(e.loc); // resolve any forward references
  
!                 if (cd.isNested())
!                     return MATCH.nomatch; // uplevel reference may not be convertible
  
!                 assert(!cd.isInterfaceDeclaration());
  
!                 struct ClassCheck
                  {
!                     extern (C++) static bool convertible(Expression e, ClassDeclaration cd, MOD mod)
                      {
!                         for (size_t i = 0; i < cd.fields.length; i++)
!                         {
!                             VarDeclaration v = cd.fields[i];
!                             Initializer _init = v._init;
!                             if (_init)
!                             {
!                                 if (_init.isVoidInitializer())
!                                 {
!                                 }
!                                 else if (ExpInitializer ei = _init.isExpInitializer())
!                                 {
!                                     // https://issues.dlang.org/show_bug.cgi?id=21319
!                                     // This is to prevent re-analyzing the same expression
!                                     // over and over again.
!                                     if (ei.exp == e)
!                                         return false;
!                                     Type tb = v.type.toBasetype();
!                                     if (implicitMod(ei.exp, tb, mod) == MATCH.nomatch)
!                                         return false;
!                                 }
!                                 else
!                                 {
!                                     /* Enhancement: handle StructInitializer and ArrayInitializer
!                                      */
!                                     return false;
!                                 }
!                             }
!                             else if (!v.type.isZeroInit(e.loc))
!                                 return false;
!                         }
!                         return cd.baseClass ? convertible(e, cd.baseClass, mod) : true;
                      }
                  }
! 
!                 if (!ClassCheck.convertible(e, cd, mod))
!                     return MATCH.nomatch;
              }
          }
-         else
-         {
-             Expression earg = e.newtype.defaultInitLiteral(e.loc);
-             Type targ = e.newtype.toBasetype();
  
!             if (implicitMod(earg, targ, mod) == MATCH.nomatch)
!                 return MATCH.nomatch;
!         }
  
          /* Success
           */
--- 1319,1387 ----
              if (sd.isNested())
                  return MATCH.nomatch;
          }
!         if (!ntb.isZeroInit(e.loc))
          {
!             Expression earg = e.newtype.defaultInitLiteral(e.loc);
!             Type targ = e.newtype.toBasetype();
  
!             if (implicitMod(earg, targ, mod) == MATCH.nomatch)
!                 return MATCH.nomatch;
!             return MATCH.constant;
!         }
!         /* Zeros are implicitly convertible, except for special cases.
!          */
!         auto tc = ntb.isTypeClass();
!         if (!tc)
!             return MATCH.constant;
  
!         /* With new() must look at the class instance initializer.
!          */
!         ClassDeclaration cd = tc.sym;
  
!         cd.size(e.loc); // resolve any forward references
  
!         if (cd.isNested())
!             return MATCH.nomatch; // uplevel reference may not be convertible
! 
!         assert(!cd.isInterfaceDeclaration());
! 
!         static bool convertible(Expression e, ClassDeclaration cd, MOD mod)
!         {
!             for (size_t i = 0; i < cd.fields.length; i++)
!             {
!                 VarDeclaration v = cd.fields[i];
!                 Initializer _init = v._init;
!                 if (_init)
                  {
!                     if (_init.isVoidInitializer())
                      {
!                     }
!                     else if (ExpInitializer ei = _init.isExpInitializer())
!                     {
!                         // https://issues.dlang.org/show_bug.cgi?id=21319
!                         // This is to prevent re-analyzing the same expression
!                         // over and over again.
!                         if (ei.exp == e)
!                             return false;
!                         Type tb = v.type.toBasetype();
!                         if (implicitMod(ei.exp, tb, mod) == MATCH.nomatch)
!                             return false;
!                     }
!                     else
!                     {
!                         /* Enhancement: handle StructInitializer and ArrayInitializer
!                          */
!                         return false;
                      }
                  }
!                 else if (!v.type.isZeroInit(e.loc))
!                     return false;
              }
+             return cd.baseClass ? convertible(e, cd.baseClass, mod) : true;
          }
  
!         if (!convertible(e, cd, mod))
!             return MATCH.nomatch;
  
          /* Success
           */
*************** MATCH implicitConvTo(Type from, Type to)
*** 1662,1701 ****
              }
              return MATCH.nomatch;
          }
!         if (auto tsa = to.isTypeSArray())
!         {
!             if (from == to)
!                 return MATCH.exact;
  
!             if (from.dim.equals(tsa.dim))
!             {
!                 MATCH m = from.next.implicitConvTo(tsa.next);
  
!                 /* Allow conversion to non-interface base class.
!                  */
!                 if (m == MATCH.convert &&
!                     from.next.ty == Tclass)
!                 {
!                     if (auto toc = tsa.next.isTypeClass)
!                     {
!                         if (!toc.sym.isInterfaceDeclaration)
!                             return MATCH.convert;
!                     }
!                 }
  
!                 /* Since static arrays are value types, allow
!                  * conversions from const elements to non-const
!                  * ones, just like we allow conversion from const int
!                  * to int.
!                  */
!                 if (m >= MATCH.constant)
!                 {
!                     if (from.mod != to.mod)
!                         m = MATCH.constant;
!                     return m;
!                 }
              }
          }
          return MATCH.nomatch;
      }
  
--- 1661,1702 ----
              }
              return MATCH.nomatch;
          }
!         auto tsa = to.isTypeSArray();
!         if (!tsa)
!             return MATCH.nomatch;
  
!         if (from == to)
!             return MATCH.exact;
  
!         if (!from.dim.equals(tsa.dim))
!             return MATCH.nomatch;
  
!         MATCH m = from.next.implicitConvTo(tsa.next);
! 
!         /* Allow conversion to non-interface base class.
!          */
!         if (m == MATCH.convert &&
!             from.next.ty == Tclass)
!         {
!             if (auto toc = tsa.next.isTypeClass)
!             {
!                 if (!toc.sym.isInterfaceDeclaration)
!                     return MATCH.convert;
              }
          }
+ 
+         /* Since static arrays are value types, allow
+          * conversions from const elements to non-const
+          * ones, just like we allow conversion from const int
+          * to int.
+          */
+         if (m >= MATCH.constant)
+         {
+             if (from.mod != to.mod)
+                 m = MATCH.constant;
+             return m;
+         }
+ 
          return MATCH.nomatch;
      }
  
*************** MATCH implicitConvTo(Type from, Type to)
*** 1705,1729 ****
          if (from.equals(to))
              return MATCH.exact;
  
!         if (auto ta = to.isTypeDArray())
!         {
!             if (!MODimplicitConv(from.next.mod, ta.next.mod))
!                 return MATCH.nomatch; // not const-compatible
  
!             /* Allow conversion to void[]
!              */
!             if (from.next.ty != Tvoid && ta.next.ty == Tvoid)
!             {
!                 return MATCH.convert;
!             }
  
!             MATCH m = from.next.constConv(ta.next);
!             if (m > MATCH.nomatch)
!             {
!                 if (m == MATCH.exact && from.mod != to.mod)
!                     m = MATCH.constant;
!                 return m;
!             }
          }
  
          return visitType(from);
--- 1706,1731 ----
          if (from.equals(to))
              return MATCH.exact;
  
!         auto ta = to.isTypeDArray();
!         if (!ta)
!             return visitType(from);
  
!         if (!MODimplicitConv(from.next.mod, ta.next.mod))
!             return MATCH.nomatch; // not const-compatible
  
!         /* Allow conversion to void[]
!          */
!         if (from.next.ty != Tvoid && ta.next.ty == Tvoid)
!         {
!             return MATCH.convert;
!         }
! 
!         MATCH m = from.next.constConv(ta.next);
!         if (m > MATCH.nomatch)
!         {
!             if (m == MATCH.exact && from.mod != to.mod)
!                 m = MATCH.constant;
!             return m;
          }
  
          return visitType(from);
*************** MATCH implicitConvTo(Type from, Type to)
*** 1735,1755 ****
          if (from.equals(to))
              return MATCH.exact;
  
!         if (auto ta = to.isTypeAArray())
!         {
!             if (!MODimplicitConv(from.next.mod, ta.next.mod))
!                 return MATCH.nomatch; // not const-compatible
  
!             if (!MODimplicitConv(from.index.mod, ta.index.mod))
!                 return MATCH.nomatch; // not const-compatible
  
!             MATCH m = from.next.constConv(ta.next);
!             MATCH mi = from.index.constConv(ta.index);
!             if (m > MATCH.nomatch && mi > MATCH.nomatch)
!             {
!                 return MODimplicitConv(from.mod, to.mod) ? MATCH.constant : MATCH.nomatch;
!             }
          }
          return visitType(from);
      }
  
--- 1737,1759 ----
          if (from.equals(to))
              return MATCH.exact;
  
!         auto ta = to.isTypeAArray();
!         if (!ta)
!             return visitType(from);
  
!         if (!MODimplicitConv(from.next.mod, ta.next.mod))
!             return MATCH.nomatch; // not const-compatible
  
!         if (!MODimplicitConv(from.index.mod, ta.index.mod))
!             return MATCH.nomatch; // not const-compatible
! 
!         MATCH m = from.next.constConv(ta.next);
!         MATCH mi = from.index.constConv(ta.index);
!         if (m > MATCH.nomatch && mi > MATCH.nomatch)
!         {
!             return MODimplicitConv(from.mod, to.mod) ? MATCH.constant : MATCH.nomatch;
          }
+ 
          return visitType(from);
      }
  
*************** MATCH implicitConvTo(Type from, Type to)
*** 1772,1797 ****
          if (tf.equals(to))
              return MATCH.constant;
  
!         if (tf.covariant(to) == Covariant.yes)
          {
!             Type tret = tf.nextOf();
!             Type toret = to.nextOf();
!             if (tret.ty == Tclass && toret.ty == Tclass)
!             {
!                 /* https://issues.dlang.org/show_bug.cgi?id=10219
!                  * Check covariant interface return with offset tweaking.
!                  * interface I {}
!                  * class C : Object, I {}
!                  * I function() dg = function C() {}    // should be error
!                  */
!                 int offset = 0;
!                 if (toret.isBaseOf(tret, &offset) && offset != 0)
!                     return MATCH.nomatch;
!             }
!             return MATCH.convert;
          }
! 
!         return MATCH.nomatch;
      }
  
      MATCH visitPointer(TypePointer from)
--- 1776,1799 ----
          if (tf.equals(to))
              return MATCH.constant;
  
!         if (tf.covariant(to) != Covariant.yes)
!             return MATCH.nomatch;
! 
!         Type tret = tf.nextOf();
!         Type toret = to.nextOf();
!         if (tret.ty == Tclass && toret.ty == Tclass)
          {
!             /* https://issues.dlang.org/show_bug.cgi?id=10219
!              * Check covariant interface return with offset tweaking.
!              * interface I {}
!              * class C : Object, I {}
!              * I function() dg = function C() {}    // should be error
!              */
!             int offset = 0;
!             if (toret.isBaseOf(tret, &offset) && offset != 0)
!                 return MATCH.nomatch;
          }
!         return MATCH.convert;
      }
  
      MATCH visitPointer(TypePointer from)
*************** MATCH implicitConvTo(Type from, Type to)
*** 1841,1859 ****
          if (from.equals(to))
              return MATCH.exact;
  
!         if (auto toDg = to.isTypeDelegate())
!         {
!             MATCH m = implicitPointerConv(from.next.isTypeFunction(), toDg.next);
! 
!             // Retain the old behaviour for this refactoring
!             // Should probably be changed to constant to match function pointers
!             if (m > MATCH.convert)
!                 m = MATCH.convert;
  
!             return m;
!         }
  
!         return MATCH.nomatch;
      }
  
      MATCH visitStruct(TypeStruct from)
--- 1843,1859 ----
          if (from.equals(to))
              return MATCH.exact;
  
!         auto toDg = to.isTypeDelegate();
!         if (!toDg)
!             return MATCH.nomatch;
  
!         MATCH m = implicitPointerConv(from.next.isTypeFunction(), toDg.next);
  
!         // Retain the old behaviour for this refactoring
!         // Should probably be changed to constant to match function pointers
!         if (m > MATCH.convert)
!             return MATCH.convert;
!         return m;
      }
  
      MATCH visitStruct(TypeStruct from)
*************** MATCH implicitConvTo(Type from, Type to)
*** 1889,1911 ****
      {
          if (from == to)
              return MATCH.exact;
!         if (auto tt = to.isTypeTuple())
          {
!             if (from.arguments.length == tt.arguments.length)
!             {
!                 MATCH m = MATCH.exact;
!                 for (size_t i = 0; i < tt.arguments.length; i++)
!                 {
!                     Parameter arg1 = (*from.arguments)[i];
!                     Parameter arg2 = (*tt.arguments)[i];
!                     MATCH mi = arg1.type.implicitConvTo(arg2.type);
!                     if (mi < m)
!                         m = mi;
!                 }
!                 return m;
!             }
          }
!         return MATCH.nomatch;
      }
  
      MATCH visitNull(TypeNull from)
--- 1889,1911 ----
      {
          if (from == to)
              return MATCH.exact;
!         auto tt = to.isTypeTuple();
!         if (!tt)
!             return MATCH.nomatch;
! 
!         if (from.arguments.length != tt.arguments.length)
!             return MATCH.nomatch;
! 
!         MATCH m = MATCH.exact;
!         for (size_t i = 0; i < tt.arguments.length; i++)
          {
!             Parameter arg1 = (*from.arguments)[i];
!             Parameter arg2 = (*tt.arguments)[i];
!             MATCH mi = arg1.type.implicitConvTo(arg2.type);
!             if (mi < m)
!                 m = mi;
          }
!         return m;
      }
  
      MATCH visitNull(TypeNull from)
*************** Expression castTo(Expression e, Scope* s
*** 2092,2097 ****
--- 2092,2104 ----
          const(bool) tob_isA = ((tob.isIntegral() || tob.isFloating()) && tob.ty != Tvector);
          const(bool) t1b_isA = ((t1b.isIntegral() || t1b.isFloating()) && t1b.ty != Tvector);
  
+         Expression ok()
+         {
+             auto result = new CastExp(e.loc, e, t);
+             result.type = t; // Don't call semantic()
+             //printf("Returning: %s\n", result.toChars());
+             return result;
+         }
          // Try casting the alias this member.
          // Return the expression if it succeeds, null otherwise.
          Expression tryAliasThisCast()
*************** Expression castTo(Expression e, Scope* s
*** 2109,2114 ****
--- 2116,2136 ----
          }
  
          bool hasAliasThis;
+ 
+         Expression fail()
+         {
+             /* if the cast cannot be performed, maybe there is an alias
+              * this that can be used for casting.
+              */
+             if (hasAliasThis)
+             {
+                 if (auto result = tryAliasThisCast())
+                     return result;
+             }
+             error(e.loc, "cannot cast expression `%s` of type `%s` to `%s`", e.toChars(), e.type.toChars(), t.toChars());
+             return ErrorExp.get();
+         }
+ 
          if (AggregateDeclaration t1ad = isAggregate(t1b))
          {
              AggregateDeclaration toad = isAggregate(tob);
*************** Expression castTo(Expression e, Scope* s
*** 2120,2126 ****
                      ClassDeclaration tocd = tob.isClassHandle();
                      int offset;
                      if (tocd.isBaseOf(t1cd, &offset))
!                         goto Lok;
                  }
                  hasAliasThis = true;
              }
--- 2142,2148 ----
                      ClassDeclaration tocd = tob.isClassHandle();
                      int offset;
                      if (tocd.isBaseOf(t1cd, &offset))
!                         return ok();
                  }
                  hasAliasThis = true;
              }
*************** Expression castTo(Expression e, Scope* s
*** 2131,2137 ****
              {
                  // Casting static array to vector with same size, e.g. `cast(int4) int[4]`
                  if (t1b.size(e.loc) != tob.size(e.loc))
!                     goto Lfail;
                  return new VectorExp(e.loc, e, tob).expressionSemantic(sc);
              }
              //printf("test1 e = %s, e.type = %s, tob = %s\n", e.toChars(), e.type.toChars(), tob.toChars());
--- 2153,2159 ----
              {
                  // Casting static array to vector with same size, e.g. `cast(int4) int[4]`
                  if (t1b.size(e.loc) != tob.size(e.loc))
!                     return fail();
                  return new VectorExp(e.loc, e, tob).expressionSemantic(sc);
              }
              //printf("test1 e = %s, e.type = %s, tob = %s\n", e.toChars(), e.type.toChars(), tob.toChars());
*************** Expression castTo(Expression e, Scope* s
*** 2147,2155 ****
              if (tob.ty == Tsarray)
              {
                  if (t1b.size(e.loc) == tob.size(e.loc))
!                     goto Lok;
              }
!             goto Lfail;
          }
          else if (t1b.implicitConvTo(tob) == MATCH.constant && t.equals(e.type.constOf()))
          {
--- 2169,2177 ----
              if (tob.ty == Tsarray)
              {
                  if (t1b.size(e.loc) == tob.size(e.loc))
!                     return ok();
              }
!             return fail();
          }
          else if (t1b.implicitConvTo(tob) == MATCH.constant && t.equals(e.type.constOf()))
          {
*************** Expression castTo(Expression e, Scope* s
*** 2162,2174 ****
          // arithmetic values vs. T*
          if (tob_isA && (t1b_isA || t1b.ty == Tpointer) || t1b_isA && (tob_isA || tob.ty == Tpointer))
          {
!             goto Lok;
          }
  
          // arithmetic values vs. references or fat values
          if (tob_isA && (t1b_isR || t1b_isFV) || t1b_isA && (tob_isR || tob_isFV))
          {
!             goto Lfail;
          }
  
          // Bugzlla 3133: A cast between fat values is possible only when the sizes match.
--- 2184,2196 ----
          // arithmetic values vs. T*
          if (tob_isA && (t1b_isA || t1b.ty == Tpointer) || t1b_isA && (tob_isA || tob.ty == Tpointer))
          {
!             return ok();
          }
  
          // arithmetic values vs. references or fat values
          if (tob_isA && (t1b_isR || t1b_isFV) || t1b_isA && (tob_isR || tob_isFV))
          {
!             return fail();
          }
  
          // Bugzlla 3133: A cast between fat values is possible only when the sizes match.
*************** Expression castTo(Expression e, Scope* s
*** 2181,2187 ****
              }
  
              if (t1b.size(e.loc) == tob.size(e.loc))
!                 goto Lok;
  
              auto ts = toAutoQualChars(e.type, t);
              error(e.loc, "cannot cast expression `%s` of type `%s` to `%s` because of different sizes",
--- 2203,2209 ----
              }
  
              if (t1b.size(e.loc) == tob.size(e.loc))
!                 return ok();
  
              auto ts = toAutoQualChars(e.type, t);
              error(e.loc, "cannot cast expression `%s` of type `%s` to `%s` because of different sizes",
*************** Expression castTo(Expression e, Scope* s
*** 2218,2226 ****
                          return ErrorExp.get();
                      }
                  }
!                 goto Lok;
              }
!             goto Lfail;
          }
  
          /* For references, any reinterpret casts are allowed to same 'ty' type.
--- 2240,2248 ----
                          return ErrorExp.get();
                      }
                  }
!                 return ok();
              }
!             return fail();
          }
  
          /* For references, any reinterpret casts are allowed to same 'ty' type.
*************** Expression castTo(Expression e, Scope* s
*** 2232,2245 ****
           *      class/interface A to B  (will be a dynamic cast if possible)
           */
          if (tob.ty == t1b.ty && tob_isR && t1b_isR)
!             goto Lok;
  
          // typeof(null) <-- non-null references or values
          if (tob.ty == Tnull && t1b.ty != Tnull)
!             goto Lfail; // https://issues.dlang.org/show_bug.cgi?id=14629
          // typeof(null) --> non-null references or arithmetic values
          if (t1b.ty == Tnull && tob.ty != Tnull)
!             goto Lok;
  
          // Check size mismatch of references.
          // Tarray and Tdelegate are (void*).sizeof*2, but others have (void*).sizeof.
--- 2254,2267 ----
           *      class/interface A to B  (will be a dynamic cast if possible)
           */
          if (tob.ty == t1b.ty && tob_isR && t1b_isR)
!             return ok();
  
          // typeof(null) <-- non-null references or values
          if (tob.ty == Tnull && t1b.ty != Tnull)
!             return fail(); // https://issues.dlang.org/show_bug.cgi?id=14629
          // typeof(null) --> non-null references or arithmetic values
          if (t1b.ty == Tnull && tob.ty != Tnull)
!             return ok();
  
          // Check size mismatch of references.
          // Tarray and Tdelegate are (void*).sizeof*2, but others have (void*).sizeof.
*************** Expression castTo(Expression e, Scope* s
*** 2249,2255 ****
              {
                  // T[] da;
                  // cast(U*)da; // ==> cast(U*)da.ptr;
!                 goto Lok;
              }
              if (tob.ty == Tpointer && t1b.ty == Tdelegate)
              {
--- 2271,2277 ----
              {
                  // T[] da;
                  // cast(U*)da; // ==> cast(U*)da.ptr;
!                 return ok();
              }
              if (tob.ty == Tpointer && t1b.ty == Tdelegate)
              {
*************** Expression castTo(Expression e, Scope* s
*** 2257,2287 ****
                  // cast(U*)dg; // ==> cast(U*)dg.ptr;
                  // Note that it happens even when U is a Tfunction!
                  deprecation(e.loc, "casting from %s to %s is deprecated", e.type.toChars(), t.toChars());
!                 goto Lok;
              }
!             goto Lfail;
          }
  
          if (t1b.ty == Tvoid && tob.ty != Tvoid)
          {
!         Lfail:
!             /* if the cast cannot be performed, maybe there is an alias
!              * this that can be used for casting.
!              */
!             if (hasAliasThis)
!             {
!                 if (auto result = tryAliasThisCast())
!                     return result;
!             }
!             error(e.loc, "cannot cast expression `%s` of type `%s` to `%s`", e.toChars(), e.type.toChars(), t.toChars());
!             return ErrorExp.get();
          }
  
-     Lok:
-         auto result = new CastExp(e.loc, e, t);
-         result.type = t; // Don't call semantic()
-         //printf("Returning: %s\n", result.toChars());
-         return result;
      }
  
      Expression visitError(ErrorExp e)
--- 2279,2295 ----
                  // cast(U*)dg; // ==> cast(U*)dg.ptr;
                  // Note that it happens even when U is a Tfunction!
                  deprecation(e.loc, "casting from %s to %s is deprecated", e.type.toChars(), t.toChars());
!                 return ok();
              }
!             return fail();
          }
  
          if (t1b.ty == Tvoid && tob.ty != Tvoid)
          {
!             return fail();
          }
+         return ok();
  
      }
  
      Expression visitError(ErrorExp e)
*************** Expression castTo(Expression e, Scope* s
*** 2291,2324 ****
  
      Expression visitReal(RealExp e)
      {
!         if (!e.type.equals(t))
          {
!             if ((e.type.isReal() && t.isReal()) || (e.type.isImaginary() && t.isImaginary()))
!             {
!                 auto result = e.copy();
!                 result.type = t;
!                 return result;
!             }
!             else
!                 return visit(e);
          }
!         return e;
      }
  
      Expression visitComplex(ComplexExp e)
      {
!         if (!e.type.equals(t))
          {
!             if (e.type.isComplex() && t.isComplex())
!             {
!                 auto result = e.copy();
!                 result.type = t;
!                 return result;
!             }
!             else
!                 return visit(e);
          }
!         return e;
      }
  
      Expression visitStructLiteral(StructLiteralExp e)
--- 2299,2330 ----
  
      Expression visitReal(RealExp e)
      {
!         if (e.type.equals(t))
!             return e;
! 
!         if ((e.type.isReal() && t.isReal()) || (e.type.isImaginary() && t.isImaginary()))
          {
!             auto result = e.copy();
!             result.type = t;
!             return result;
          }
!         else
!             return visit(e);
      }
  
      Expression visitComplex(ComplexExp e)
      {
!         if (e.type.equals(t))
!             return e;
! 
!         if (e.type.isComplex() && t.isComplex())
          {
!             auto result = e.copy();
!             result.type = t;
!             return result;
          }
!         else
!             return visit(e);
      }
  
      Expression visitStructLiteral(StructLiteralExp e)
*************** Expression castTo(Expression e, Scope* s
*** 2469,2475 ****
          }
  
          if (e.committed)
!             goto Lcast;
  
          static auto X(T, U)(T tf, U tt)
          {
--- 2475,2481 ----
          }
  
          if (e.committed)
!             return lcast();
  
          static auto X(T, U)(T tf, U tt)
          {
*************** Expression castTo(Expression e, Scope* s
*** 2582,2588 ****
  
              default:
                  assert(typeb.nextOf().size() != tb.nextOf().size());
!                 goto Lcast;
              }
          }
      L2:
--- 2588,2594 ----
  
              default:
                  assert(typeb.nextOf().size() != tb.nextOf().size());
!                 return lcast();
              }
          }
      L2:
*************** Expression castTo(Expression e, Scope* s
*** 2609,2619 ****
          }
          se.type = t;
          return se;
- 
-     Lcast:
-         auto result = new CastExp(e.loc, se, t);
-         result.type = t; // so semantic() won't be run on e
-         return result;
      }
  
      Expression visitAddr(AddrExp e)
--- 2615,2620 ----
*************** Expression inferType(Expression e, Type
*** 3170,3216 ****
      Expression visitAle(ArrayLiteralExp ale)
      {
          Type tb = t.toBasetype();
!         if (tb.isStaticOrDynamicArray())
          {
!             Type tn = tb.nextOf();
!             if (ale.basis)
!                 ale.basis = inferType(ale.basis, tn, flag);
!             for (size_t i = 0; i < ale.elements.length; i++)
              {
!                 if (Expression e = (*ale.elements)[i])
!                 {
!                     e = inferType(e, tn, flag);
!                     (*ale.elements)[i] = e;
!                 }
              }
          }
          return ale;
      }
  
      Expression visitAar(AssocArrayLiteralExp aale)
      {
          Type tb = t.toBasetype();
!         if (auto taa = tb.isTypeAArray())
          {
!             Type ti = taa.index;
!             Type tv = taa.nextOf();
!             for (size_t i = 0; i < aale.keys.length; i++)
              {
!                 if (Expression e = (*aale.keys)[i])
!                 {
!                     e = inferType(e, ti, flag);
!                     (*aale.keys)[i] = e;
!                 }
              }
!             for (size_t i = 0; i < aale.values.length; i++)
              {
!                 if (Expression e = (*aale.values)[i])
!                 {
!                     e = inferType(e, tv, flag);
!                     (*aale.values)[i] = e;
!                 }
              }
          }
          return aale;
      }
  
--- 3171,3220 ----
      Expression visitAle(ArrayLiteralExp ale)
      {
          Type tb = t.toBasetype();
!         if (!tb.isStaticOrDynamicArray())
!             return ale;
! 
!         Type tn = tb.nextOf();
!         if (ale.basis)
!             ale.basis = inferType(ale.basis, tn, flag);
!         for (size_t i = 0; i < ale.elements.length; i++)
          {
!             if (Expression e = (*ale.elements)[i])
              {
!                 e = inferType(e, tn, flag);
!                 (*ale.elements)[i] = e;
              }
          }
+ 
          return ale;
      }
  
      Expression visitAar(AssocArrayLiteralExp aale)
      {
          Type tb = t.toBasetype();
!         auto taa = tb.isTypeAArray();
!         if (!taa)
!             return aale;
! 
!         Type ti = taa.index;
!         Type tv = taa.nextOf();
!         for (size_t i = 0; i < aale.keys.length; i++)
          {
!             if (Expression e = (*aale.keys)[i])
              {
!                 e = inferType(e, ti, flag);
!                 (*aale.keys)[i] = e;
              }
!         }
!         for (size_t i = 0; i < aale.values.length; i++)
!         {
!             if (Expression e = (*aale.values)[i])
              {
!                 e = inferType(e, tv, flag);
!                 (*aale.values)[i] = e;
              }
          }
+ 
          return aale;
      }
  
*************** Lagain:
*** 3447,3452 ****
--- 3451,3510 ----
      t1b = t1.toBasetype();
      t2b = t2.toBasetype();
  
+     static bool isComplexStruct(Type t)
+     {
+         if (t.ty != Tstruct)
+             return false;
+ 
+         TypeStruct ts = t.isTypeStruct();
+ 
+         return ts.sym.toString() == "_Complex";
+     }
+ 
+     static bool isComplexStructOfType(Type t, Type t2)
+     {
+         if (!isComplexStruct(t))
+             return false;
+ 
+         TypeStruct ts = t.toBasetype().isTypeStruct();
+ 
+         Type memberType = ts.sym.fields[0].type.toBasetype();
+ 
+         /* encure the complex member types fall under one of the complex types */
+         switch (memberType.toBasetype().ty)
+         {
+             case Tfloat32:
+             case Tfloat64:
+             case Tfloat80:
+                 break;
+             default:
+                 return false;
+         }
+ 
+         switch (t2.toBasetype().ty)
+         {
+             case Tfloat32:
+             case Tfloat64:
+             case Tfloat80:
+                 return true;
+             default:
+                 return false;
+         }
+     }
+ 
+     /* check for complex structure and an associate complex type in a single condexp */
+     if (sc && sc.inCfile)
+     {
+         if (isComplexStructOfType(t1b, t2b))
+         {
+             return Lret(e1.type.toBasetype());
+         }
+         else if (isComplexStructOfType(t2b, t1b))
+         {
+             return Lret(e2.type.toBasetype());
+         }
+     }
+ 
      const ty = implicitConvCommonTy(t1b.ty, t2b.ty);
      if (ty != Terror)
      {
*************** Expression integralPromotions(Expression
*** 4239,4275 ****
  void fix16997(Scope* sc, UnaExp ue)
  {
      if (global.params.fix16997 || sc.inCfile)
          ue.e1 = integralPromotions(ue.e1, sc);          // desired C-like behavor
!     else
      {
!         switch (ue.e1.type.toBasetype.ty)
!         {
!             case Tint8:
!             case Tuns8:
!             case Tint16:
!             case Tuns16:
!             //case Tbool:       // these operations aren't allowed on bool anyway
!             case Tchar:
!             case Twchar:
!             case Tdchar:
!                 deprecation(ue.loc, "integral promotion not done for `%s`, remove '-revert=intpromote' switch or `%scast(int)(%s)`",
!                     ue.toChars(), EXPtoString(ue.op).ptr, ue.e1.toChars());
!                 break;
  
!             default:
!                 break;
!         }
      }
  }
  
  /***********************************
!  * See if both types are arrays that can be compared
   * for equality without any casting. Return true if so.
   * This is to enable comparing things like an immutable
   * array with a mutable one.
   */
! extern (D) bool arrayTypeCompatibleWithoutCasting(Type t1, Type t2)
  {
      t1 = t1.toBasetype();
      t2 = t2.toBasetype();
  
--- 4297,4335 ----
  void fix16997(Scope* sc, UnaExp ue)
  {
      if (global.params.fix16997 || sc.inCfile)
+     {
          ue.e1 = integralPromotions(ue.e1, sc);          // desired C-like behavor
!         return;
!     }
! 
!     switch (ue.e1.type.toBasetype.ty)
      {
!         case Tint8:
!         case Tuns8:
!         case Tint16:
!         case Tuns16:
!         //case Tbool:       // these operations aren't allowed on bool anyway
!         case Tchar:
!         case Twchar:
!         case Tdchar:
!             deprecation(ue.loc, "integral promotion not done for `%s`, remove '-revert=intpromote' switch or `%scast(int)(%s)`",
!                 ue.toChars(), EXPtoString(ue.op).ptr, ue.e1.toChars());
!             return;
  
!         default:
!             return;
      }
  }
  
  /***********************************
!  * See if an AA key can be compared
   * for equality without any casting. Return true if so.
   * This is to enable comparing things like an immutable
   * array with a mutable one.
   */
! extern (D) bool keyCompatibleWithoutCasting(Expression ekey, Type t2)
  {
+     Type t1 = ekey.type;
      t1 = t1.toBasetype();
      t2 = t2.toBasetype();
  
*************** extern (D) bool arrayTypeCompatibleWitho
*** 4277,4284 ****
      {
          if (t1.nextOf().implicitConvTo(t2.nextOf()) >= MATCH.constant || t2.nextOf().implicitConvTo(t1.nextOf()) >= MATCH.constant)
              return true;
      }
!     return false;
  }
  
  /******************************************************************/
--- 4337,4351 ----
      {
          if (t1.nextOf().implicitConvTo(t2.nextOf()) >= MATCH.constant || t2.nextOf().implicitConvTo(t1.nextOf()) >= MATCH.constant)
              return true;
+         return false;
      }
!     if (implicitConvTo(ekey, t2) < MATCH.constant)
!         return false;
!     if (auto ts = t1.isTypeStruct())
!         return implicitConvToThroughAliasThis(ts, t2) == MATCH.nomatch;
!     if (auto tc = t1.isTypeClass())
!         return implicitConvToThroughAliasThis(tc, t2) == MATCH.nomatch;
!     return true;
  }
  
  /******************************************************************/
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/dclass.d gcc-16-20260208/gcc/d/dmd/dclass.d
*** gcc-16-20260201/gcc/d/dmd/dclass.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/dclass.d	Sun Feb  8 22:32:07 2026
*************** import dmd.location;
*** 30,36 ****
  import dmd.mtype;
  import dmd.objc;
  import dmd.root.rmem;
- import dmd.target;
  import dmd.visitor;
  
  /***********************************************************
--- 30,35 ----
*************** extern (C++) struct BaseClass
*** 55,102 ****
          this.type = type;
      }
  
-     /****************************************
-      * Fill in vtbl[] for base class based on member functions of class cd.
-      * Input:
-      *      vtbl            if !=NULL, fill it in
-      *      newinstance     !=0 means all entries must be filled in by members
-      *                      of cd, not members of any base classes of cd.
-      * Returns:
-      *      true if any entries were filled in by members of cd (not exclusively
-      *      by base classes)
-      */
-     extern (C++) bool fillVtbl(ClassDeclaration cd, FuncDeclarations* vtbl, int newinstance)
-     {
-         bool result = false;
- 
-         //printf("BaseClass.fillVtbl(this='%s', cd='%s')\n", sym.toChars(), cd.toChars());
-         if (vtbl)
-             vtbl.setDim(sym.vtbl.length);
- 
-         // first entry is ClassInfo reference
-         for (size_t j = sym.vtblOffset(); j < sym.vtbl.length; j++)
-         {
-             FuncDeclaration ifd = sym.vtbl[j].isFuncDeclaration();
- 
-             //printf("        vtbl[%d] is '%s'\n", j, ifd ? ifd.toChars() : "null");
-             assert(ifd);
- 
-             // Find corresponding function in this class
-             auto tf = ifd.type.toTypeFunction();
-             auto fd = cd.findFunc(ifd.ident, tf);
-             if (fd && !fd.isAbstract())
-             {
-                 if (fd.toParent() == cd)
-                     result = true;
-             }
-             else
-                 fd = null;
-             if (vtbl)
-                 (*vtbl)[j] = fd;
-         }
-         return result;
-     }
- 
      extern (D) void copyBaseInterfaces(BaseClasses* vtblInterfaces)
      {
          //printf("+copyBaseInterfaces(), %s\n", sym.toChars());
--- 54,59 ----
*************** extern (C++) class ClassDeclaration : Ag
*** 224,367 ****
          if (id == Id.__sizeof || id == Id.__xalignof || id == Id._mangleof)
              classError("%s `%s` illegal class name", null);
  
!         // BUG: What if this is the wrong TypeInfo, i.e. it is nested?
!         if (id.toChars()[0] == 'T')
          {
!             if (id == Id.TypeInfo)
!             {
!                 if (!inObject)
!                     classError("%s `%s` %s", msg.ptr);
!                 Type.dtypeinfo = this;
!             }
!             if (id == Id.TypeInfo_Class)
!             {
!                 if (!inObject)
!                     classError("%s `%s` %s", msg.ptr);
!                 Type.typeinfoclass = this;
!             }
!             if (id == Id.TypeInfo_Interface)
!             {
!                 if (!inObject)
!                     classError("%s `%s` %s", msg.ptr);
!                 Type.typeinfointerface = this;
!             }
!             if (id == Id.TypeInfo_Struct)
!             {
!                 if (!inObject)
!                     classError("%s `%s` %s", msg.ptr);
!                 Type.typeinfostruct = this;
!             }
!             if (id == Id.TypeInfo_Pointer)
!             {
!                 if (!inObject)
!                     classError("%s `%s` %s", msg.ptr);
!                 Type.typeinfopointer = this;
!             }
!             if (id == Id.TypeInfo_Array)
!             {
!                 if (!inObject)
!                     classError("%s `%s` %s", msg.ptr);
!                 Type.typeinfoarray = this;
!             }
!             if (id == Id.TypeInfo_StaticArray)
!             {
!                 //if (!inObject)
!                 //    Type.typeinfostaticarray.classError("%s `%s` %s", msg);
!                 Type.typeinfostaticarray = this;
!             }
!             if (id == Id.TypeInfo_AssociativeArray)
!             {
!                 if (!inObject)
!                     classError("%s `%s` %s", msg.ptr);
!                 Type.typeinfoassociativearray = this;
!             }
!             if (id == Id.TypeInfo_Enum)
!             {
!                 if (!inObject)
!                     classError("%s `%s` %s", msg.ptr);
!                 Type.typeinfoenum = this;
!             }
!             if (id == Id.TypeInfo_Function)
!             {
!                 if (!inObject)
!                     classError("%s `%s` %s", msg.ptr);
!                 Type.typeinfofunction = this;
!             }
!             if (id == Id.TypeInfo_Delegate)
!             {
!                 if (!inObject)
!                     classError("%s `%s` %s", msg.ptr);
!                 Type.typeinfodelegate = this;
!             }
!             if (id == Id.TypeInfo_Tuple)
!             {
!                 if (!inObject)
!                     classError("%s `%s` %s", msg.ptr);
!                 Type.typeinfotypelist = this;
!             }
!             if (id == Id.TypeInfo_Const)
!             {
!                 if (!inObject)
!                     classError("%s `%s` %s", msg.ptr);
!                 Type.typeinfoconst = this;
!             }
!             if (id == Id.TypeInfo_Invariant)
!             {
!                 if (!inObject)
!                     classError("%s `%s` %s", msg.ptr);
!                 Type.typeinfoinvariant = this;
!             }
!             if (id == Id.TypeInfo_Shared)
!             {
!                 if (!inObject)
!                     classError("%s `%s` %s", msg.ptr);
!                 Type.typeinfoshared = this;
!             }
!             if (id == Id.TypeInfo_Wild)
!             {
!                 if (!inObject)
!                     classError("%s `%s` %s", msg.ptr);
!                 Type.typeinfowild = this;
!             }
!             if (id == Id.TypeInfo_Vector)
              {
                  if (!inObject)
                      classError("%s `%s` %s", msg.ptr);
!                 Type.typeinfovector = this;
              }
          }
! 
!         if (id == Id.Object)
!         {
!             if (!inObject)
!                 classError("%s `%s` %s", msg.ptr);
!             object = this;
!         }
! 
!         if (id == Id.Throwable)
!         {
!             if (!inObject)
!                 classError("%s `%s` %s", msg.ptr);
!             throwable = this;
!         }
!         if (id == Id.Exception)
!         {
!             if (!inObject)
!                 classError("%s `%s` %s", msg.ptr);
!             exception = this;
!         }
!         if (id == Id.Error)
!         {
!             if (!inObject)
!                 classError("%s `%s` %s", msg.ptr);
!             errorException = this;
!         }
!         if (id == Id.cpp_type_info_ptr)
          {
!             if (!inObject)
!                 classError("%s `%s` %s", msg.ptr);
!             cpp_type_info_ptr = this;
          }
  
          baseok = Baseok.none;
      }
--- 181,222 ----
          if (id == Id.__sizeof || id == Id.__xalignof || id == Id._mangleof)
              classError("%s `%s` illegal class name", null);
  
!         final /* final to work around dscanner bug*/
!         void check(Identifier _id, ref ClassDeclaration cd)
          {
!             if (id == _id)
              {
                  if (!inObject)
                      classError("%s `%s` %s", msg.ptr);
!                 cd = this;
              }
          }
!         // BUG: What if this is the wrong TypeInfo, i.e. it is nested?
!         if (id.toChars()[0] == 'T')
          {
!             check(Id.TypeInfo,           Type.dtypeinfo);
!             check(Id.TypeInfo_Class,     Type.typeinfoclass);
!             check(Id.TypeInfo_Interface, Type.typeinfointerface);
!             check(Id.TypeInfo_Struct,    Type.typeinfostruct);
!             check(Id.TypeInfo_Pointer,   Type.typeinfopointer);
!             check(Id.TypeInfo_Array,     Type.typeinfoarray);
!             check(Id.TypeInfo_StaticArray, Type.typeinfostaticarray);
!             check(Id.TypeInfo_AssociativeArray, Type.typeinfoassociativearray);
!             check(Id.TypeInfo_Enum,      Type.typeinfoenum);
!             check(Id.TypeInfo_Function,  Type.typeinfofunction);
!             check(Id.TypeInfo_Delegate,  Type.typeinfodelegate);
!             check(Id.TypeInfo_Tuple,     Type.typeinfotypelist);
!             check(Id.TypeInfo_Const,     Type.typeinfoconst);
!             check(Id.TypeInfo_Invariant, Type.typeinfoinvariant);
!             check(Id.TypeInfo_Shared,    Type.typeinfoshared);
!             check(Id.TypeInfo_Wild,      Type.typeinfowild);
!             check(Id.TypeInfo_Vector,    Type.typeinfovector);
          }
+         check(Id.Object, object);
+         check(Id.Throwable, throwable);
+         check(Id.Exception, exception);
+         check(Id.Error, errorException);
+         check(Id.cpp_type_info_ptr, cpp_type_info_ptr);
  
          baseok = Baseok.none;
      }
*************** extern (C++) class ClassDeclaration : Ag
*** 405,423 ****
          return cd;
      }
  
-     override Scope* newScope(Scope* sc)
-     {
-         auto sc2 = super.newScope(sc);
-         if (isCOMclass())
-         {
-             /* This enables us to use COM objects under Linux and
-              * work with things like XPCOM
-              */
-             sc2.linkage = target.systemLinkage();
-         }
-         return sc2;
-     }
- 
      /*********************************************
       * Determine if 'this' is a base class of cd.
       * This is used to detect circular inheritance only.
--- 260,265 ----
*************** extern (C++) class ClassDeclaration : Ag
*** 499,625 ****
          return classKind == ClassKind.d;
      }
  
-     /****************
-      * Find virtual function matching identifier and type.
-      * Used to build virtual function tables for interface implementations.
-      * Params:
-      *  ident = function's identifier
-      *  tf = function's type
-      * Returns:
-      *  function symbol if found, null if not
-      * Errors:
-      *  prints error message if more than one match
-      */
-     extern (D) final FuncDeclaration findFunc(Identifier ident, TypeFunction tf)
-     {
-         //printf("ClassDeclaration.findFunc(%s, %s) %s\n", ident.toChars(), tf.toChars(), toChars());
-         FuncDeclaration fdmatch = null;
-         FuncDeclaration fdambig = null;
- 
-         void updateBestMatch(FuncDeclaration fd)
-         {
-             fdmatch = fd;
-             fdambig = null;
-             //printf("Lfd fdmatch = %s %s [%s]\n", fdmatch.toChars(), fdmatch.type.toChars(), fdmatch.loc.toChars());
-         }
- 
-         void searchVtbl(ref Dsymbols vtbl)
-         {
-             import dmd.typesem : covariant;
-             bool seenInterfaceVirtual;
-             foreach (s; vtbl)
-             {
-                 auto fd = s.isFuncDeclaration();
-                 if (!fd)
-                     continue;
- 
-                 // the first entry might be a ClassInfo
-                 //printf("\t[%d] = %s\n", i, fd.toChars());
-                 if (ident != fd.ident || fd.type.covariant(tf) != Covariant.yes)
-                 {
-                     //printf("\t\t%d\n", fd.type.covariant(tf));
-                     continue;
-                 }
- 
-                 //printf("fd.parent.isClassDeclaration() = %p\n", fd.parent.isClassDeclaration());
-                 if (!fdmatch)
-                 {
-                     updateBestMatch(fd);
-                     continue;
-                 }
-                 if (fd == fdmatch)
-                     continue;
- 
-                 /* Functions overriding interface functions for extern(C++) with VC++
-                  * are not in the normal vtbl, but in vtblFinal. If the implementation
-                  * is again overridden in a child class, both would be found here.
-                  * The function in the child class should override the function
-                  * in the base class, which is done here, because searchVtbl is first
-                  * called for the child class. Checking seenInterfaceVirtual makes
-                  * sure, that the compared functions are not in the same vtbl.
-                  */
-                 if (fd.interfaceVirtual &&
-                     fd.interfaceVirtual is fdmatch.interfaceVirtual &&
-                     !seenInterfaceVirtual &&
-                     fdmatch.type.covariant(fd.type) == Covariant.yes)
-                 {
-                     seenInterfaceVirtual = true;
-                     continue;
-                 }
- 
-                 {
-                 // Function type matching: exact > covariant
-                 MATCH m1 = tf.equals(fd.type) ? MATCH.exact : MATCH.nomatch;
-                 MATCH m2 = tf.equals(fdmatch.type) ? MATCH.exact : MATCH.nomatch;
-                 if (m1 > m2)
-                 {
-                     updateBestMatch(fd);
-                     continue;
-                 }
-                 else if (m1 < m2)
-                     continue;
-                 }
-                 {
-                 MATCH m1 = (tf.mod == fd.type.mod) ? MATCH.exact : MATCH.nomatch;
-                 MATCH m2 = (tf.mod == fdmatch.type.mod) ? MATCH.exact : MATCH.nomatch;
-                 if (m1 > m2)
-                 {
-                     updateBestMatch(fd);
-                     continue;
-                 }
-                 else if (m1 < m2)
-                     continue;
-                 }
-                 {
-                 // The way of definition: non-mixin > mixin
-                 MATCH m1 = fd.parent.isClassDeclaration() ? MATCH.exact : MATCH.nomatch;
-                 MATCH m2 = fdmatch.parent.isClassDeclaration() ? MATCH.exact : MATCH.nomatch;
-                 if (m1 > m2)
-                 {
-                     updateBestMatch(fd);
-                     continue;
-                 }
-                 else if (m1 < m2)
-                     continue;
-                 }
- 
-                 fdambig = fd;
-                 //printf("Lambig fdambig = %s %s [%s]\n", fdambig.toChars(), fdambig.type.toChars(), fdambig.loc.toChars());
-             }
-         }
- 
-         searchVtbl(vtbl);
-         for (auto cd = this; cd; cd = cd.baseClass)
-         {
-             searchVtbl(cd.vtblFinal);
-         }
- 
-         if (fdambig)
-             classError("%s `%s` ambiguous virtual function `%s`", fdambig.toChars());
- 
-         return fdmatch;
-     }
- 
      /****************************************
       */
      final bool isCOMclass() const
--- 341,346 ----
*************** extern (C++) class ClassDeclaration : Ag
*** 663,675 ****
          return "class";
      }
  
-     /****************************************
-      */
-     override final void addObjcSymbols(ClassDeclarations* classes, ClassDeclarations* categories)
-     {
-         .objc.addSymbols(this, classes, categories);
-     }
- 
      // Back end
      Dsymbol vtblsym;
  
--- 384,389 ----
*************** extern (C++) final class InterfaceDeclar
*** 708,726 ****
          return id;
      }
  
- 
-     override Scope* newScope(Scope* sc)
-     {
-         auto sc2 = super.newScope(sc);
-         if (com)
-             sc2.linkage = LINK.windows;
-         else if (classKind == ClassKind.cpp)
-             sc2.linkage = LINK.cpp;
-         else if (classKind == ClassKind.objc)
-             sc2.linkage = LINK.objc;
-         return sc2;
-     }
- 
      /*******************************************
       * Determine if 'this' is a base class of cd.
       * (Actually, if it is an interface supported by cd)
--- 422,427 ----
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/declaration.d gcc-16-20260208/gcc/d/dmd/declaration.d
*** gcc-16-20260201/gcc/d/dmd/declaration.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/declaration.d	Sun Feb  8 22:32:07 2026
*************** import core.stdc.stdio;
*** 16,34 ****
  import dmd.aggregate;
  import dmd.arraytypes;
  import dmd.astenums;
- import dmd.ctorflow;
- import dmd.dclass;
- import dmd.delegatize;
- import dmd.dscope;
- import dmd.dstruct;
  import dmd.dsymbol;
- import dmd.dsymbolsem : toAlias;
  import dmd.dtemplate;
  import dmd.errors;
  import dmd.expression;
  import dmd.func;
  import dmd.globals;
- import dmd.hdrgen;
  import dmd.id;
  import dmd.identifier;
  import dmd.init;
--- 16,28 ----
  import dmd.aggregate;
  import dmd.arraytypes;
  import dmd.astenums;
  import dmd.dsymbol;
  import dmd.dtemplate;
  import dmd.errors;
+ import dmd.errorsink;
  import dmd.expression;
  import dmd.func;
  import dmd.globals;
  import dmd.id;
  import dmd.identifier;
  import dmd.init;
*************** import dmd.intrange;
*** 36,70 ****
  import dmd.location;
  import dmd.mtype;
  import dmd.common.outbuffer;
- import dmd.rootobject;
  import dmd.root.filename;
  import dmd.target;
! import dmd.tokens;
! import dmd.typesem : typeSemantic, size;
  import dmd.visitor;
  
- version (IN_GCC) {}
- else version (IN_LLVM) {}
- else version = MARS;
  
  /******************************************
   */
  void ObjectNotFound(Loc loc, Identifier id)
  {
      global.gag = 0; // never gag the fatal error
!     error(loc, "`%s` not found. object.d may be incorrectly installed or corrupt.", id.toChars());
!     version (IN_LLVM)
!     {
!         errorSupplemental(loc, "ldc2 might not be correctly installed.");
!         errorSupplemental(loc, "Please check your ldc2.conf configuration file.");
!         errorSupplemental(loc, "Installation instructions can be found at http://wiki.dlang.org/LDC.");
!     }
!     else version (MARS)
!     {
!         errorSupplemental(loc, "dmd might not be correctly installed. Run 'dmd -man' for installation instructions.");
!         const dmdConfFile = global.inifilename.length ? FileName.canonicalName(global.inifilename) : "not found";
!         errorSupplemental(loc, "config file: %.*s", cast(int)dmdConfFile.length, dmdConfFile.ptr);
!     }
      fatal();
  }
  
--- 30,50 ----
  import dmd.location;
  import dmd.mtype;
  import dmd.common.outbuffer;
  import dmd.root.filename;
  import dmd.target;
! import dmd.targetcompiler;
  import dmd.visitor;
  
  
  /******************************************
   */
  void ObjectNotFound(Loc loc, Identifier id)
  {
      global.gag = 0; // never gag the fatal error
!     const dmdConfFile = global.inifilename.length ? FileName.canonicalName(global.inifilename) : "not found";
! 
!     mixin HostObjectNotFound;
!     hostObjectNotFound(loc, id.toChars(), dmdConfFile, global.errorSink); // print host-specific diagnostic
      fatal();
  }
  
*************** extern (C++) abstract class Declaration
*** 120,134 ****
          return "declaration";
      }
  
-     override final ulong size(Loc loc)
-     {
-         assert(type);
-         const sz = type.size();
-         if (sz == SIZE_INVALID)
-             errors = true;
-         return sz;
-     }
- 
      final bool isStatic() const pure nothrow @nogc @safe
      {
          return (storage_class & STC.static_) != 0;
--- 100,105 ----
*************** extern (C++) final class TupleDeclaratio
*** 302,361 ****
          return "sequence";
      }
  
-     override Type getType()
-     {
-         /* If this tuple represents a type, return that type
-          */
- 
-         //printf("TupleDeclaration::getType() %s\n", toChars());
-         if (isexp || building)
-             return null;
-         if (!tupletype)
-         {
-             /* It's only a type tuple if all the Object's are types
-              */
-             for (size_t i = 0; i < objects.length; i++)
-             {
-                 RootObject o = (*objects)[i];
-                 if (!o.isType())
-                 {
-                     //printf("\tnot[%d], %p, %d\n", i, o, o.dyncast());
-                     return null;
-                 }
-             }
- 
-             /* We know it's a type tuple, so build the TypeTuple
-              */
-             Types* types = cast(Types*)objects;
-             auto args = new Parameters(objects.length);
-             OutBuffer buf;
-             int hasdeco = 1;
-             for (size_t i = 0; i < types.length; i++)
-             {
-                 Type t = (*types)[i];
-                 //printf("type = %s\n", t.toChars());
-                 version (none)
-                 {
-                     buf.printf("_%s_%d", ident.toChars(), i);
-                     auto id = Identifier.idPool(buf.extractSlice());
-                     auto arg = new Parameter(Loc.initial, STC.in_, t, id, null);
-                 }
-                 else
-                 {
-                     auto arg = new Parameter(Loc.initial, STC.none, t, null, null, null);
-                 }
-                 (*args)[i] = arg;
-                 if (!t.deco)
-                     hasdeco = 0;
-             }
- 
-             tupletype = new TypeTuple(args);
-             if (hasdeco)
-                 return tupletype.typeSemantic(Loc.initial, null);
-         }
-         return tupletype;
-     }
- 
      override bool needThis()
      {
          //printf("TupleDeclaration::needThis(%s)\n", toChars());
--- 273,278 ----
*************** extern (C++) final class AliasDeclaratio
*** 449,592 ****
          return sa;
      }
  
-     override bool overloadInsert(Dsymbol s)
-     {
-         //printf("[%s] AliasDeclaration::overloadInsert('%s') s = %s %s @ [%s]\n",
-         //       loc.toChars(), toChars(), s.kind(), s.toChars(), s.loc.toChars());
- 
-         /** Aliases aren't overloadable themselves, but if their Aliasee is
-          *  overloadable they are converted to an overloadable Alias (either
-          *  FuncAliasDeclaration or OverDeclaration).
-          *
-          *  This is done by moving the Aliasee into such an overloadable alias
-          *  which is then used to replace the existing Aliasee. The original
-          *  Alias (_this_) remains a useless shell.
-          *
-          *  This is a horrible mess. It was probably done to avoid replacing
-          *  existing AST nodes and references, but it needs a major
-          *  simplification b/c it's too complex to maintain.
-          *
-          *  A simpler approach might be to merge any colliding symbols into a
-          *  simple Overload class (an array) and then later have that resolve
-          *  all collisions.
-          */
-         if (semanticRun >= PASS.semanticdone)
-         {
-             /* Semantic analysis is already finished, and the aliased entity
-              * is not overloadable.
-              */
-             if (type)
-             {
-                 /*
-                     If type has been resolved already we could
-                     still be inserting an alias from an import.
- 
-                     If we are handling an alias then pretend
-                     it was inserting and return true, if not then
-                     false since we didn't even pretend to insert something.
-                 */
-                 return this._import && this.equals(s);
-             }
- 
-             // https://issues.dlang.org/show_bug.cgi?id=23865
-             // only insert if the symbol can be part of a set
-             const s1 = s.toAlias();
-             const isInsertCandidate = s1.isFuncDeclaration() || s1.isOverDeclaration() || s1.isTemplateDeclaration();
- 
-             /* When s is added in member scope by static if, mixin("code") or others,
-              * aliassym is determined already. See the case in: test/compilable/test61.d
-              */
-             auto sa = aliassym.toAlias();
- 
-             if (auto td = s.toAlias().isTemplateDeclaration())
-                 s = td.funcroot ? td.funcroot : td;
- 
-             if (auto fd = sa.isFuncDeclaration())
-             {
-                 auto fa = new FuncAliasDeclaration(ident, fd);
-                 fa.visibility = visibility;
-                 fa.parent = parent;
-                 aliassym = fa;
-                 if (isInsertCandidate)
-                     return aliassym.overloadInsert(s);
-             }
-             if (auto td = sa.isTemplateDeclaration())
-             {
-                 auto od = new OverDeclaration(ident, td.funcroot ? td.funcroot : td);
-                 od.visibility = visibility;
-                 od.parent = parent;
-                 aliassym = od;
-                 if (isInsertCandidate)
-                     return aliassym.overloadInsert(s);
-             }
-             if (auto od = sa.isOverDeclaration())
-             {
-                 if (sa.ident != ident || sa.parent != parent)
-                 {
-                     od = new OverDeclaration(ident, od);
-                     od.visibility = visibility;
-                     od.parent = parent;
-                     aliassym = od;
-                 }
-                 if (isInsertCandidate)
-                     return od.overloadInsert(s);
-             }
-             if (auto os = sa.isOverloadSet())
-             {
-                 if (sa.ident != ident || sa.parent != parent)
-                 {
-                     os = new OverloadSet(ident, os);
-                     // TODO: visibility is lost here b/c OverloadSets have no visibility attribute
-                     // Might no be a practical issue, b/c the code below fails to resolve the overload anyhow.
-                     // ----
-                     // module os1;
-                     // import a, b;
-                     // private alias merged = foo; // private alias to overload set of a.foo and b.foo
-                     // ----
-                     // module os2;
-                     // import a, b;
-                     // public alias merged = bar; // public alias to overload set of a.bar and b.bar
-                     // ----
-                     // module bug;
-                     // import os1, os2;
-                     // void test() { merged(123); } // should only look at os2.merged
-                     //
-                     // os.visibility = visibility;
-                     os.parent = parent;
-                     aliassym = os;
-                 }
-                 if (isInsertCandidate)
-                 {
-                     os.push(s);
-                     return true;
-                 }
-             }
-             return false;
-         }
- 
-         /* Don't know yet what the aliased symbol is, so assume it can
-          * be overloaded and check later for correctness.
-          */
-         if (overnext)
-             return overnext.overloadInsert(s);
-         if (s is this)
-             return true;
-         overnext = s;
-         return true;
-     }
- 
      override const(char)* kind() const
      {
          return "alias";
      }
  
-     override Type getType()
-     {
-         if (type)
-             return type;
-         return toAlias(this).getType();
-     }
- 
      override bool isOverloadable() const
      {
          // assume overloadable until alias is resolved
--- 366,376 ----
*************** extern (C++) final class OverDeclaration
*** 625,655 ****
          return "overload alias"; // todo
      }
  
-     override bool equals(const RootObject o) const
-     {
-         if (this == o)
-             return true;
- 
-         auto s = isDsymbol(o);
-         if (!s)
-             return false;
- 
-         if (auto od2 = s.isOverDeclaration())
-             return this.aliassym.equals(od2.aliassym);
-         return this.aliassym == s;
-     }
- 
-     override bool overloadInsert(Dsymbol s)
-     {
-         //printf("OverDeclaration::overloadInsert('%s') aliassym = %p, overnext = %p\n", s.toChars(), aliassym, overnext);
-         if (overnext)
-             return overnext.overloadInsert(s);
-         if (s == this)
-             return true;
-         overnext = s;
-         return true;
-     }
- 
      override bool isOverloadable() const
      {
          return true;
--- 409,414 ----
*************** extern (C++) class VarDeclaration : Decl
*** 706,716 ****
          bool isCmacro;          /// it is a C macro turned into a C declaration
          bool dllImport;         /// __declspec(dllimport)
          bool dllExport;         /// __declspec(dllexport)
!         version (MARS)
!         {
!             bool inClosure;         /// is inserted into a GC allocated closure
!             bool inAlignSection;    /// is inserted into an aligned section on stack
!         }
          bool systemInferred;    /// @system was inferred from initializer
      }
  
--- 465,471 ----
          bool isCmacro;          /// it is a C macro turned into a C declaration
          bool dllImport;         /// __declspec(dllimport)
          bool dllExport;         /// __declspec(dllexport)
!         mixin VarDeclarationExtra;
          bool systemInferred;    /// @system was inferred from initializer
      }
  
*************** extern (C++) class VarDeclaration : Decl
*** 766,783 ****
  
      override final inout(AggregateDeclaration) isThis() inout
      {
!         if (!(storage_class & (STC.static_ | STC.extern_ | STC.manifest | STC.templateparameter | STC.gshared | STC.ctfe)))
          {
!             /* The casting is necessary because `s = s.parent` is otherwise rejected
!              */
!             for (auto s = cast(Dsymbol)this; s; s = s.parent)
!             {
!                 if (auto ad = (cast(inout)s).isMember())
!                     return ad;
!                 if (!s.parent || !s.parent.isTemplateMixin())
!                     break;
!             }
          }
          return null;
      }
  
--- 521,539 ----
  
      override final inout(AggregateDeclaration) isThis() inout
      {
!         if (storage_class & (STC.static_ | STC.extern_ | STC.manifest | STC.templateparameter | STC.gshared | STC.ctfe))
!             return null;
! 
!         /* The casting is necessary because `s = s.parent` is otherwise rejected
!          */
!         for (auto s = cast(Dsymbol)this; s; s = s.parent)
          {
!             if (auto ad = (cast(inout)s).isMember())
!                 return ad;
!             if (!s.parent || !s.parent.isTemplateMixin())
!                 break;
          }
+ 
          return null;
      }
  
*************** extern (C++) class VarDeclaration : Decl
*** 874,912 ****
          return (storage_class & STC.ctfe) != 0; // || !isDataseg();
      }
  
-     final bool isOverlappedWith(VarDeclaration v)
-     {
-         const vsz = v.type.size();
-         const tsz = type.size();
-         assert(vsz != SIZE_INVALID && tsz != SIZE_INVALID);
- 
-         // Overlap is checked by comparing bit offsets
-         auto bitoffset  =   offset * 8;
-         auto vbitoffset = v.offset * 8;
- 
-         // Bitsize of types are overridden by any bitfield widths.
-         ulong tbitsize;
-         if (auto bf = isBitFieldDeclaration())
-         {
-             bitoffset += bf.bitOffset;
-             tbitsize = bf.fieldWidth;
-         }
-         else
-             tbitsize = tsz * 8;
- 
-         ulong vbitsize;
-         if (auto vbf = v.isBitFieldDeclaration())
-         {
-             vbitoffset += vbf.bitOffset;
-             vbitsize = vbf.fieldWidth;
-         }
-         else
-             vbitsize = vsz * 8;
- 
-         return   bitoffset < vbitoffset + vbitsize &&
-                 vbitoffset <  bitoffset + tbitsize;
-     }
- 
      /*************************************
       * Return true if we can take the address of this variable.
       */
--- 630,635 ----
*************** extern (C++) class BitFieldDeclaration :
*** 961,992 ****
      {
          v.visit(this);
      }
- 
-     /***********************************
-      * Retrieve the .min or .max values.
-      * Only valid after semantic analysis.
-      * Params:
-      *  id = Id.min or Id.max
-      * Returns:
-      *  the min or max value
-      */
-     final ulong getMinMax(Identifier id)
-     {
-         const width = fieldWidth;
-         const uns = type.isUnsigned();
-         const min = id == Id.min;
-         ulong v;
-         assert(width != 0);  // should have been rejected in semantic pass
-         if (width == ulong.sizeof * 8)
-             v = uns ? (min ? ulong.min : ulong.max)
-                     : (min ?  long.min :  long.max);
-         else
-             v = uns ? (min ? 0
-                            : (1L << width) - 1)
-                     : (min ? -(1L << (width - 1))
-                            :  (1L << (width - 1)) - 1);
-         return v;
-     }
  }
  
  /***********************************************************
--- 684,689 ----
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/declaration.h gcc-16-20260208/gcc/d/dmd/declaration.h
*** gcc-16-20260201/gcc/d/dmd/declaration.h	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/declaration.h	Sun Feb  8 22:32:07 2026
*************** namespace dmd
*** 37,45 ****
--- 37,48 ----
      bool checkClosure(FuncDeclaration* fd);
      MATCH leastAsSpecialized(FuncDeclaration *f, FuncDeclaration *g, ArgumentLabels *names);
      PURE isPure(FuncDeclaration *f);
+     bool needsClosure(FuncDeclaration *fd);
      FuncDeclaration *genCfunc(Parameters *args, Type *treturn, const char *name, StorageClass stc=0);
      FuncDeclaration *genCfunc(Parameters *args, Type *treturn, Identifier *id, StorageClass stc=0);
      bool isAbstract(ClassDeclaration *cd);
+     bool overloadInsert(Dsymbol *ds, Dsymbol *s);
+     bool equals(const Dsymbol * const ds, const Dsymbol * const s);
  }
  
  //enum STC : ulong from astenums.d:
*************** public:
*** 135,142 ****
      bool noUnderscore() const;
  
      const char *kind() const override;
-     uinteger_t size(Loc loc) override final;
- 
  
      bool isStatic() const { return (storage_class & STCstatic) != 0; }
      LINK resolvedLinkage() const; // returns the linkage, resolving the target-specific `System` one
--- 138,143 ----
*************** public:
*** 183,189 ****
  
      TupleDeclaration *syntaxCopy(Dsymbol *) override;
      const char *kind() const override;
-     Type *getType() override;
      bool needThis() override;
  
      void accept(Visitor *v) override { v->visit(this); }
--- 184,189 ----
*************** public:
*** 200,208 ****
  
      static AliasDeclaration *create(Loc loc, Identifier *id, Type *type);
      AliasDeclaration *syntaxCopy(Dsymbol *) override;
-     bool overloadInsert(Dsymbol *s) override;
      const char *kind() const override;
-     Type *getType() override;
      bool isOverloadable() const override;
  
      void accept(Visitor *v) override { v->visit(this); }
--- 200,206 ----
*************** public:
*** 217,224 ****
      Dsymbol *aliassym;
  
      const char *kind() const override;
-     bool equals(const RootObject * const o) const override;
-     bool overloadInsert(Dsymbol *s) override;
  
      Dsymbol *isUnique();
      bool isOverloadable() const override;
--- 215,220 ----
*************** public:
*** 294,300 ****
      bool isDataseg() override final;
      bool isThreadlocal() override final;
      bool isCTFE();
-     bool isOverlappedWith(VarDeclaration *v);
      bool canTakeAddressOf();
      bool needsScopeDtor();
      // Eliminate need for dynamic_cast
--- 290,295 ----
*************** public:
*** 616,621 ****
--- 611,618 ----
      AttributeViolation* pureViolation;
      AttributeViolation* nothrowViolation;
  
+     void* parametersDFAInfo;
+ 
      // Formerly FUNCFLAGS
      uint32_t flags;
      bool purityInprocess() const;
*************** public:
*** 697,705 ****
      FuncDeclaration *fdensure(FuncDeclaration *fde);
      Expressions *fdrequireParams(Expressions *fdrp);
      Expressions *fdensureParams(Expressions *fdep);
-     bool equals(const RootObject * const o) const override final;
  
-     bool overloadInsert(Dsymbol *s) override;
      bool inUnittest();
      LabelDsymbol *searchLabel(Identifier *ident, Loc loc);
      const char *toPrettyChars(bool QualifyTypes = false) override;
--- 694,700 ----
*************** public:
*** 725,731 ****
      virtual bool addPreInvariant();
      virtual bool addPostInvariant();
      const char *kind() const override;
-     bool needsClosure();
      bool hasNestedFrameRefs();
      ParameterList getParameterList();
  
--- 720,725 ----
*************** public:
*** 787,793 ****
      bool isVirtual() const override;
      bool addPreInvariant() override;
      bool addPostInvariant() override;
-     bool overloadInsert(Dsymbol *s) override;
  
      void accept(Visitor *v) override { v->visit(this); }
  };
--- 781,786 ----
*************** public:
*** 800,806 ****
      bool isVirtual() const override;
      bool addPreInvariant() override;
      bool addPostInvariant() override;
-     bool overloadInsert(Dsymbol *s) override;
  
      void accept(Visitor *v) override { v->visit(this); }
  };
--- 793,798 ----
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/delegatize.d gcc-16-20260208/gcc/d/dmd/delegatize.d
*** gcc-16-20260201/gcc/d/dmd/delegatize.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/delegatize.d	Sun Feb  8 22:32:07 2026
*************** import dmd.astenums;
*** 18,23 ****
--- 18,24 ----
  import dmd.declaration;
  import dmd.dscope;
  import dmd.dsymbol;
+ import dmd.dsymbolsem : toParentP;
  import dmd.expression;
  import dmd.expressionsem;
  import dmd.func;
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/denum.d gcc-16-20260208/gcc/d/dmd/denum.d
*** gcc-16-20260201/gcc/d/dmd/denum.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/denum.d	Sun Feb  8 22:32:07 2026
*************** extern (C++) final class EnumDeclaration
*** 81,91 ****
          return ed;
      }
  
-     override Type getType()
-     {
-         return type;
-     }
- 
      override const(char)* kind() const
      {
          return "enum";
--- 81,86 ----
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/dimport.d gcc-16-20260208/gcc/d/dmd/dimport.d
*** gcc-16-20260201/gcc/d/dmd/dimport.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/dimport.d	Sun Feb  8 22:32:07 2026
*************** extern (C++) final class Import : Dsymbo
*** 141,159 ****
          scopesym.addAccessiblePackage(mod, visibility); // d
       }
  
-     override bool overloadInsert(Dsymbol s)
-     {
-         /* Allow multiple imports with the same package base, but disallow
-          * alias collisions
-          * https://issues.dlang.org/show_bug.cgi?id=5412
-          */
-         assert(ident && ident == s.ident);
-         if (aliasId)
-             return false;
-         const imp = s.isImport();
-         return imp && !imp.aliasId;
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 141,146 ----
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/dinterpret.d gcc-16-20260208/gcc/d/dmd/dinterpret.d
*** gcc-16-20260201/gcc/d/dmd/dinterpret.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/dinterpret.d	Sun Feb  8 22:32:07 2026
*************** import dmd.root.region;
*** 49,56 ****
  import dmd.rootobject;
  import dmd.root.utf;
  import dmd.statement;
  import dmd.tokens;
! import dmd.typesem : mutableOf, equivalent, pointerTo, sarrayOf, arrayOf, size, merge, defaultInitLiteral;
  import dmd.utils : arrayCastBigEndian;
  import dmd.visitor;
  
--- 49,57 ----
  import dmd.rootobject;
  import dmd.root.utf;
  import dmd.statement;
+ import dmd.semantic2 : findFunc;
  import dmd.tokens;
! import dmd.typesem;
  import dmd.utils : arrayCastBigEndian;
  import dmd.visitor;
  
*************** public:
*** 4701,4734 ****
                      result = CTFEExp.voidexp;
                  return;
              }
-             else if (isArrayConstruction(fd.ident))
-             {
-                 // In expressionsem.d, `T[x] ea = eb;` was lowered to:
-                 // `_d_array{,set}ctor(ea[], eb[]);`.
-                 // The following code will rewrite it back to `ea = eb` and
-                 // then interpret that expression.
- 
-                 if (fd.ident == Id._d_arrayctor)
-                     assert(e.arguments.length == 3);
-                 else
-                     assert(e.arguments.length == 2);
- 
-                 Expression ea = (*e.arguments)[0];
-                 if (ea.isCastExp)
-                     ea = ea.isCastExp.e1;
- 
-                 Expression eb = (*e.arguments)[1];
-                 if (eb.isCastExp() && fd.ident == Id._d_arrayctor)
-                     eb = eb.isCastExp.e1;
- 
-                 ConstructExp ce = new ConstructExp(e.loc, ea, eb);
-                 ce.type = ea.type;
- 
-                 ce.type = ea.type;
-                 result = interpret(ce, istate);
- 
-                 return;
-             }
          }
          else if (auto soe = ecall.isSymOffExp())
          {
--- 4702,4707 ----
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/dmodule.d gcc-16-20260208/gcc/d/dmd/dmodule.d
*** gcc-16-20260201/gcc/d/dmd/dmodule.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/dmodule.d	Sun Feb  8 22:32:07 2026
*************** import dmd.common.outbuffer;
*** 25,38 ****
  import dmd.compiler;
  import dmd.cparse;
  import dmd.declaration;
- import dmd.dimport;
  import dmd.dmacro;
  import dmd.doc;
- import dmd.dscope;
  import dmd.dsymbol;
- import dmd.dsymbolsem : dsymbolSemantic;
  import dmd.errors;
- import dmd.errorsink;
  import dmd.expression;
  import dmd.file_manager;
  import dmd.func;
--- 25,34 ----
*************** import dmd.id;
*** 41,58 ****
  import dmd.identifier;
  import dmd.location;
  import dmd.parse;
- import dmd.root.aav;
  import dmd.root.array;
  import dmd.root.file;
  import dmd.root.filename;
  import dmd.root.port;
- import dmd.root.rmem;
  import dmd.root.string;
- import dmd.rootobject;
- import dmd.semantic2;
- import dmd.semantic3;
  import dmd.target;
- import dmd.utils;
  import dmd.visitor;
  
  version (Windows)
--- 37,48 ----
*************** else version (Posix)
*** 66,90 ****
  else
      static assert(0);
  
- version (IN_GCC) {}
- else version (IN_LLVM) {}
- else version = MARS;
- 
- // function used to call semantic3 on a module's dependencies
- void semantic3OnDependencies(Module m)
- {
-     if (!m)
-         return;
- 
-     if (m.semanticRun > PASS.semantic3)
-         return;
- 
-     m.semantic3(null);
- 
-     foreach (i; 1 .. m.aimports.length)
-         semantic3OnDependencies(m.aimports[i]);
- }
- 
  /**
   * Remove generated .di files on error and exit
   */
--- 56,61 ----
*************** extern (C++) class Package : ScopeDsymbo
*** 185,199 ****
          return "package";
      }
  
-     override bool equals(const RootObject o) const
-     {
-         // custom 'equals' for bug 17441. "package a" and "module a" are not equal
-         if (this == o)
-             return true;
-         auto p = cast(Package)o;
-         return p && isModule() == p.isModule() && ident.equals(p.ident);
-     }
- 
      /****************************************************
       * Input:
       *      packages[]      the pkg1.pkg2 of pkg1.pkg2.mod
--- 156,161 ----
*************** extern (C++) final class Module : Packag
*** 475,481 ****
          if (doHdrGen)
              hdrfile = setOutfilename(global.params.dihdr.name, global.params.dihdr.dir, arg, hdr_ext);
  
!         this.edition = Edition.min;
      }
  
      extern (D) this(const(char)[] filename, Identifier ident, int doDocComment, int doHdrGen)
--- 437,443 ----
          if (doHdrGen)
              hdrfile = setOutfilename(global.params.dihdr.name, global.params.dihdr.dir, arg, hdr_ext);
  
!         this.edition = global.params.edition;
      }
  
      extern (D) this(const(char)[] filename, Identifier ident, int doDocComment, int doHdrGen)
*************** extern (C++) final class Module : Packag
*** 795,801 ****
              p.nextToken();
              checkCompiledImport();
              members = p.parseModule();
!             assert(!p.md); // C doesn't have module declarations
              numlines = p.linnum;
          }
          else
--- 757,769 ----
              p.nextToken();
              checkCompiledImport();
              members = p.parseModule();
!             md = p.md;
!             if (md)
!             {
!                 this.ident = md.id;
!                 dst = Package.resolve(md.packages, &this.parent, &ppack);
!             }
! 
              numlines = p.linnum;
          }
          else
*************** extern (C++) final class Module : Packag
*** 978,1102 ****
              File.remove(docfile.toChars());
      }
  
-     /*******************************************
-      * Can't run semantic on s now, try again later.
-      */
-     extern (D) static void addDeferredSemantic(Dsymbol s)
-     {
-         //printf("Module::addDeferredSemantic('%s')\n", s.toChars());
-         if (!s.deferred)
-         {
-             s.deferred = true;
-             deferred.push(s);
-         }
-     }
- 
-     extern (D) static void addDeferredSemantic2(Dsymbol s)
-     {
-         //printf("Module::addDeferredSemantic2('%s')\n", s.toChars());
-         if (!s.deferred2)
-         {
-             s.deferred2 = true;
-             deferred2.push(s);
-         }
-     }
- 
-     extern (D) static void addDeferredSemantic3(Dsymbol s)
-     {
-         //printf("Module::addDeferredSemantic3('%s')\n", s.toChars());
-         if (!s.deferred3)
-         {
-             s.deferred3 = true;
-             deferred3.push(s);
-         }
-     }
- 
-     /******************************************
-      * Run semantic() on deferred symbols.
-      */
-     static void runDeferredSemantic()
-     {
-         __gshared int nested;
-         if (nested)
-             return;
-         //if (deferred.length) printf("+Module::runDeferredSemantic(), len = %ld\n", deferred.length);
-         nested++;
- 
-         size_t len;
-         do
-         {
-             len = deferred.length;
-             if (!len)
-                 break;
- 
-             Dsymbol* todo;
-             Dsymbol* todoalloc = null;
-             Dsymbol tmp;
-             if (len == 1)
-             {
-                 todo = &tmp;
-             }
-             else
-             {
-                 todo = cast(Dsymbol*)Mem.check(malloc(len * Dsymbol.sizeof));
-                 todoalloc = todo;
-             }
-             memcpy(todo, deferred.tdata(), len * Dsymbol.sizeof);
-             foreach (Dsymbol s; Module.deferred[])
-                 s.deferred = false;
-             deferred.setDim(0);
- 
-             foreach (i; 0..len)
-             {
-                 Dsymbol s = todo[i];
-                 s.dsymbolSemantic(null);
-                 //printf("deferred: %s, parent = %s\n", s.toChars(), s.parent.toChars());
-             }
-             //printf("\tdeferred.length = %ld, len = %ld\n", deferred.length, len);
-             if (todoalloc)
-                 free(todoalloc);
-         }
-         while (deferred.length != len); // while making progress
-         nested--;
-         //printf("-Module::runDeferredSemantic(), len = %ld\n", deferred.length);
-     }
- 
-     static void runDeferredSemantic2()
-     {
-         Module.runDeferredSemantic();
- 
-         Dsymbols* a = &Module.deferred2;
-         for (size_t i = 0; i < a.length; i++)
-         {
-             Dsymbol s = (*a)[i];
-             s.deferred2 = false;
-             //printf("[%d] %s semantic2a\n", i, s.toPrettyChars());
-             s.semantic2(null);
- 
-             if (global.errors)
-                 break;
-         }
-         a.setDim(0);
-     }
- 
-     static void runDeferredSemantic3()
-     {
-         Module.runDeferredSemantic2();
- 
-         Dsymbols* a = &Module.deferred3;
-         for (size_t i = 0; i < a.length; i++)
-         {
-             Dsymbol s = (*a)[i];
-             s.deferred3 = false;
-             //printf("[%d] %s semantic3a\n", i, s.toPrettyChars());
-             s.semantic3(null);
- 
-             if (global.errors)
-                 break;
-         }
-         a.setDim(0);
-     }
- 
      extern (D) static void clearCache() nothrow
      {
          foreach (Module m; amodules)
--- 946,951 ----
*************** private const(char)[] processSource (con
*** 1412,1446 ****
  
      return buf;
  }
- 
- /*******************************************
-  * Look for member of the form:
-  *      const(MemberInfo)[] getMembers(string);
-  * Returns NULL if not found
-  */
- FuncDeclaration findGetMembers(ScopeDsymbol dsym)
- {
-     import dmd.opover : search_function;
-     Dsymbol s = search_function(dsym, Id.getmembers);
-     FuncDeclaration fdx = s ? s.isFuncDeclaration() : null;
-     version (none)
-     {
-         // Finish
-         __gshared TypeFunction tfgetmembers;
-         if (!tfgetmembers)
-         {
-             Scope sc;
-             sc.eSink = global.errorSink;
-             Parameters* p = new Parameter(STC.in_, Type.tchar.constOf().arrayOf(), null, null);
-             auto parameters = new Parameters(p);
-             Type tret = null;
-             TypeFunction tf = new TypeFunction(parameters, tret, VarArg.none, LINK.d);
-             tfgetmembers = tf.dsymbolSemantic(Loc.initial, &sc).isTypeFunction();
-         }
-         if (fdx)
-             fdx = fdx.overloadExactMatch(tfgetmembers);
-     }
-     if (fdx && fdx.isVirtual())
-         fdx = null;
-     return fdx;
- }
--- 1261,1263 ----
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/doc.d gcc-16-20260208/gcc/d/dmd/doc.d
*** gcc-16-20260201/gcc/d/dmd/doc.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/doc.d	Sun Feb  8 22:32:07 2026
*************** import dmd.dscope;
*** 33,38 ****
--- 33,39 ----
  import dmd.dstruct;
  import dmd.dsymbol;
  import dmd.dsymbolsem;
+ import dmd.templatesem : computeOneMember;
  import dmd.dtemplate;
  import dmd.errorsink;
  import dmd.func;
*************** import dmd.lexer;
*** 44,51 ****
  import dmd.location;
  import dmd.mtype;
  import dmd.root.array;
- import dmd.root.file;
- import dmd.root.filename;
  import dmd.common.outbuffer;
  import dmd.root.port;
  import dmd.root.rmem;
--- 45,50 ----
*************** import dmd.root.utf;
*** 54,60 ****
  import dmd.tokens;
  import dmd.visitor;
  
! private:
  
  public
  struct Escape
--- 53,216 ----
  import dmd.tokens;
  import dmd.visitor;
  
! /****************************************************
!  * Generate Ddoc text for Module `m` and append it to `outbuf`.
!  * Params:
!  *      m = Module
!  *      ddoctext = combined text of .ddoc files for macro definitions
!  *      datetime = charz returned by ctime()
!  *      eSink = send error messages to eSink
!  *      outbuf = append the Ddoc text to this
!  */
! public
! void gendocfile(Module m, const char[] ddoctext, const char* datetime, ErrorSink eSink, ref OutBuffer outbuf)
! {
!     // Load internal default macros first
!     DocComment.parseMacros(m.escapetable, m.macrotable, ddoc_default[]);
! 
!     // Ddoc files override default macros
!     DocComment.parseMacros(m.escapetable, m.macrotable, ddoctext);
! 
!     Scope* sc = scopeCreateGlobal(m, eSink); // create root scope
!     DocComment* dc = DocComment.parse(m, m.comment);
!     dc.pmacrotable = &m.macrotable;
!     dc.escapetable = m.escapetable;
!     sc.lastdc = dc;
!     // Generate predefined macros
!     // Set the title to be the name of the module
!     {
!         const p = m.toPrettyChars().toDString;
!         m.macrotable.define("TITLE", p);
!     }
!     // Set time macros
!     m.macrotable.define("DATETIME", datetime[0 .. 26]);
!     m.macrotable.define("YEAR", datetime[20 .. 20 + 4]);
! 
!     const srcfilename = m.srcfile.toString();
!     m.macrotable.define("SRCFILENAME", srcfilename);
!     const docfilename = m.docfile.toString();
!     m.macrotable.define("DOCFILENAME", docfilename);
!     if (dc.copyright)
!     {
!         dc.copyright.nooutput = 1;
!         m.macrotable.define("COPYRIGHT", dc.copyright.body_);
!     }
! 
!     OutBuffer buf;
!     if (m.filetype == FileType.ddoc)
!     {
!         Loc loc = m.md ? m.md.loc : m.loc;
! 
!         size_t commentlen = m.comment ? strlen(cast(char*)m.comment) : 0;
!         Dsymbols a;
!         // https://issues.dlang.org/show_bug.cgi?id=9764
!         // Don't push m in a, to prevent emphasize ddoc file name.
!         if (dc.macros)
!         {
!             commentlen = dc.macros.name.ptr - m.comment;
!             dc.macros.write(loc, dc, sc, &a, buf);
!         }
!         buf.write(m.comment[0 .. commentlen]);
!         highlightText(sc, &a, loc, buf, 0);
!     }
!     else
!     {
!         Dsymbols a;
!         a.push(m);
!         dc.writeSections(sc, &a, buf);
!         emitMemberComments(m, buf, sc);
!     }
!     //printf("BODY= '%.*s'\n", cast(int)buf.length, buf.data);
!     m.macrotable.define("BODY", buf[]);
! 
!     OutBuffer buf2;
!     buf2.writestring("$(DDOC)");
!     size_t end = buf2.length;
! 
!     // Expand buf in place with macro expansions
!     const success = m.macrotable.expand(buf2, 0, end, null, global.recursionLimit, &isIdStart, &isIdTail);
!     if (!success)
!         eSink.error(Loc.initial, "DDoc macro expansion limit exceeded; more than %d expansions.", global.recursionLimit);
! 
!     /* Remove all the escape sequences from buf,
!      * and make CR-LF the newline.
!      */
!     const slice = buf2[];
!     outbuf.reserve(slice.length);
!     auto p = slice.ptr;
!     for (size_t j = 0; j < slice.length; j++)
!     {
!         const c = p[j];
!         if (c == 0xFF && j + 1 < slice.length)
!         {
!             j++;
!             continue;
!         }
!         if (c == '\n')
!             outbuf.writeByte('\r');
!         else if (c == '\r')
!         {
!             outbuf.writestring("\r\n");
!             if (j + 1 < slice.length && p[j + 1] == '\n')
!             {
!                 j++;
!             }
!             continue;
!         }
!         outbuf.writeByte(c);
!     }
! }
! 
! /****************************************************
!  * Having unmatched parentheses can hose the output of Ddoc,
!  * as the macros depend on properly nested parentheses.
!  * This function replaces all ( with $(LPAREN) and ) with $(RPAREN)
!  * to preserve text literally. This also means macros in the
!  * text won't be expanded.
!  */
! public
! void escapeDdocString(ref OutBuffer buf, size_t start)
! {
!     for (size_t u = start; u < buf.length; u++)
!     {
!         const c = buf[u];
!         switch (c)
!         {
!         case '$':
!             buf.remove(u, 1);
!             buf.insert(u, "$(DOLLAR)");
!             u += 8;
!             break;
!         case '(':
!             buf.remove(u, 1); //remove the (
!             buf.insert(u, "$(LPAREN)"); //insert this instead
!             u += 8; //skip over newly inserted macro
!             break;
!         case ')':
!             buf.remove(u, 1); //remove the )
!             buf.insert(u, "$(RPAREN)"); //insert this instead
!             u += 8; //skip over newly inserted macro
!             break;
!         default:
!             break;
!         }
!     }
! }
! /****************************************************
!  * Generate Ddoc file for Module m.
!  * Params:
!  *      m = Module
!  *      ddoctext_ptr = combined text of .ddoc files for macro definitions
!  *      ddoctext_length = extant of ddoctext_ptr
!  *      datetime = charz returned by ctime()
!  *      eSink = send error messages to eSink
!  *      outbuf = append the Ddoc text to this
!  */
! public
! void gendocfile(Module m, const char* ddoctext_ptr, size_t ddoctext_length, const char* datetime, ErrorSink eSink, ref OutBuffer outbuf)
! {
!     gendocfile(m, ddoctext_ptr[0 .. ddoctext_length], datetime, eSink, outbuf);
! }
  
  public
  struct Escape
*************** struct Escape
*** 96,101 ****
--- 252,667 ----
  
  /***********************************************************
   */
+ public
+ struct DocComment
+ {
+     Sections sections;      // Section*[]
+     Section summary;
+     Section copyright;
+     Section macros;
+     MacroTable* pmacrotable;
+     Escape* escapetable;
+     Dsymbols a;
+ 
+     static DocComment* parse(Dsymbol s, const(char)* comment)
+     {
+         //printf("parse(%s): '%s'\n", s.toChars(), comment);
+         auto dc = new DocComment();
+         dc.a.push(s);
+         if (!comment)
+             return dc;
+         dc.parseSections(comment);
+         for (size_t i = 0; i < dc.sections.length; i++)
+         {
+             Section sec = dc.sections[i];
+             if (iequals("copyright", sec.name))
+             {
+                 dc.copyright = sec;
+             }
+             if (iequals("macros", sec.name))
+             {
+                 dc.macros = sec;
+             }
+         }
+         return dc;
+     }
+ 
+     /************************************************
+      * Parse macros out of Macros: section.
+      * Macros are of the form:
+      *      name1 = value1
+      *
+      *      name2 = value2
+      */
+     extern(D) static void parseMacros(
+         Escape* escapetable, ref MacroTable pmacrotable, const(char)[] m)
+     {
+         const(char)* p = m.ptr;
+         size_t len = m.length;
+         const(char)* pend = p + len;
+         const(char)* tempstart = null;
+         size_t templen = 0;
+         const(char)* namestart = null;
+         size_t namelen = 0; // !=0 if line continuation
+         const(char)* textstart = null;
+         size_t textlen = 0;
+         while (p < pend)
+         {
+             // Skip to start of macro
+             while (1)
+             {
+                 if (p >= pend)
+                     goto Ldone;
+                 switch (*p)
+                 {
+                 case ' ':
+                 case '\t':
+                     p++;
+                     continue;
+                 case '\r':
+                 case '\n':
+                     p++;
+                     goto Lcont;
+                 default:
+                     if (isIdStart(p))
+                         break;
+                     if (namelen)
+                         goto Ltext; // continuation of prev macro
+                     goto Lskipline;
+                 }
+                 break;
+             }
+             tempstart = p;
+             while (1)
+             {
+                 if (p >= pend)
+                     goto Ldone;
+                 if (!isIdTail(p))
+                     break;
+                 p += utfStride(p);
+             }
+             templen = p - tempstart;
+             while (1)
+             {
+                 if (p >= pend)
+                     goto Ldone;
+                 if (!(*p == ' ' || *p == '\t'))
+                     break;
+                 p++;
+             }
+             if (*p != '=')
+             {
+                 if (namelen)
+                     goto Ltext; // continuation of prev macro
+                 goto Lskipline;
+             }
+             p++;
+             if (p >= pend)
+                 goto Ldone;
+             if (namelen)
+             {
+                 // Output existing macro
+             L1:
+                 //printf("macro '%.*s' = '%.*s'\n", cast(int)namelen, namestart, cast(int)textlen, textstart);
+                 if (iequals("ESCAPES", namestart[0 .. namelen]))
+                     parseEscapes(escapetable, textstart[0 .. textlen]);
+                 else
+                     pmacrotable.define(namestart[0 .. namelen], textstart[0 .. textlen]);
+                 namelen = 0;
+                 if (p >= pend)
+                     break;
+             }
+             namestart = tempstart;
+             namelen = templen;
+             while (p < pend && (*p == ' ' || *p == '\t'))
+                 p++;
+             textstart = p;
+         Ltext:
+             while (p < pend && *p != '\r' && *p != '\n')
+                 p++;
+             textlen = p - textstart;
+             p++;
+             //printf("p = %p, pend = %p\n", p, pend);
+         Lcont:
+             continue;
+         Lskipline:
+             // Ignore this line
+             while (p < pend && *p != '\r' && *p != '\n')
+                 p++;
+         }
+     Ldone:
+         if (namelen)
+             goto L1; // write out last one
+     }
+ 
+     /**************************************
+      * Parse escapes of the form:
+      *      /c/string/
+      * where c is a single character.
+      * Multiple escapes can be separated
+      * by whitespace and/or commas.
+      */
+     static void parseEscapes(Escape* escapetable, const(char)[] text)
+     {
+         if (!escapetable)
+         {
+             escapetable = new Escape();
+             memset(escapetable, 0, Escape.sizeof);
+         }
+         //printf("parseEscapes('%.*s') pescapetable = %p\n", cast(int)text.length, text.ptr, escapetable);
+         const(char)* p = text.ptr;
+         const(char)* pend = p + text.length;
+         while (1)
+         {
+             while (1)
+             {
+                 if (p + 4 >= pend)
+                     return;
+                 if (!(*p == ' ' || *p == '\t' || *p == '\r' || *p == '\n' || *p == ','))
+                     break;
+                 p++;
+             }
+             if (p[0] != '/' || p[2] != '/')
+                 return;
+             char c = p[1];
+             p += 3;
+             const(char)* start = p;
+             while (1)
+             {
+                 if (p >= pend)
+                     return;
+                 if (*p == '/')
+                     break;
+                 p++;
+             }
+             size_t len = p - start;
+             char* s = cast(char*)memcpy(mem.xmalloc(len + 1), start, len);
+             s[len] = 0;
+             escapetable.strings[c] = s[0 .. len];
+             //printf("\t%c = '%s'\n", c, s);
+             p++;
+         }
+     }
+ 
+     /*****************************************
+      * Parse next paragraph out of *pcomment.
+      * Update *pcomment to point past paragraph.
+      * Returns NULL if no more paragraphs.
+      * If paragraph ends in 'identifier:',
+      * then (*pcomment)[0 .. idlen] is the identifier.
+      */
+     void parseSections(const(char)* comment)
+     {
+         const(char)* p;
+         const(char)* pstart;
+         const(char)* pend;
+         const(char)* idstart = null; // dead-store to prevent spurious warning
+         size_t idlen;
+         const(char)* name = null;
+         size_t namelen = 0;
+         //printf("parseSections('%s')\n", comment);
+         p = comment;
+         while (*p)
+         {
+             const(char)* pstart0 = p;
+             p = skipwhitespace(p);
+             pstart = p;
+             pend = p;
+ 
+             // Undo indent if starting with a list item
+             if ((*p == '-' || *p == '+' || *p == '*') && (*(p+1) == ' ' || *(p+1) == '\t'))
+                 pstart = pstart0;
+             else
+             {
+                 const(char)* pitem = p;
+                 while (*pitem >= '0' && *pitem <= '9')
+                     ++pitem;
+                 if (pitem > p && *pitem == '.' && (*(pitem+1) == ' ' || *(pitem+1) == '\t'))
+                     pstart = pstart0;
+             }
+ 
+             /* Find end of section, which is ended by one of:
+              *      'identifier:' (but not inside a code section)
+              *      '\0'
+              */
+             idlen = 0;
+             int inCode = 0;
+             while (1)
+             {
+                 // Check for start/end of a code section
+                 if (*p == '-' || *p == '`' || *p == '~')
+                 {
+                     char c = *p;
+                     int numdash = 0;
+                     while (*p == c)
+                     {
+                         ++numdash;
+                         p++;
+                     }
+                     // BUG: handle UTF PS and LS too
+                     if ((!*p || *p == '\r' || *p == '\n' || (!inCode && c != '-')) && numdash >= 3)
+                     {
+                         inCode = inCode == c ? false : c;
+                         if (inCode)
+                         {
+                             // restore leading indentation
+                             while (pstart0 < pstart && isIndentWS(pstart - 1))
+                                 --pstart;
+                         }
+                     }
+                     pend = p;
+                 }
+                 if (!inCode && isIdStart(p))
+                 {
+                     const(char)* q = p + utfStride(p);
+                     while (isIdTail(q))
+                         q += utfStride(q);
+ 
+                     // Detected tag ends it
+                     if (*q == ':' && isupper(*p)
+                             && (isspace(q[1]) || q[1] == 0))
+                     {
+                         idlen = q - p;
+                         idstart = p;
+                         for (pend = p; pend > pstart; pend--)
+                         {
+                             if (pend[-1] == '\n')
+                                 break;
+                         }
+                         p = q + 1;
+                         break;
+                     }
+                 }
+                 while (1)
+                 {
+                     if (!*p)
+                         goto L1;
+                     if (*p == '\n')
+                     {
+                         p++;
+                         if (*p == '\n' && !summary && !namelen && !inCode)
+                         {
+                             pend = p;
+                             p++;
+                             goto L1;
+                         }
+                         break;
+                     }
+                     p++;
+                     pend = p;
+                 }
+                 p = skipwhitespace(p);
+             }
+         L1:
+             if (namelen || pstart < pend)
+             {
+                 Section s;
+                 if (iequals("Params", name[0 .. namelen]))
+                     s = new ParamSection();
+                 else if (iequals("Macros", name[0 .. namelen]))
+                     s = new MacroSection();
+                 else
+                     s = new Section();
+                 s.name = name[0 .. namelen];
+                 s.body_ = pstart[0 .. pend - pstart];
+                 s.nooutput = 0;
+                 //printf("Section: '%.*s' = '%.*s'\n", cast(int)s.namelen, s.name, cast(int)s.bodylen, s.body);
+                 sections.push(s);
+                 if (!summary && !namelen)
+                     summary = s;
+             }
+             if (idlen)
+             {
+                 name = idstart;
+                 namelen = idlen;
+             }
+             else
+             {
+                 name = null;
+                 namelen = 0;
+                 if (!*p)
+                     break;
+             }
+         }
+     }
+ 
+     void writeSections(Scope* sc, Dsymbols* a, ref OutBuffer buf)
+     {
+         assert(a.length);
+         //printf("DocComment::writeSections()\n");
+         Loc loc = (*a)[0].loc;
+         if (Module m = (*a)[0].isModule())
+         {
+             if (m.md)
+                 loc = m.md.loc;
+         }
+         size_t offset1 = buf.length;
+         buf.writestring("$(DDOC_SECTIONS ");
+         size_t offset2 = buf.length;
+         for (size_t i = 0; i < sections.length; i++)
+         {
+             Section sec = sections[i];
+             if (sec.nooutput)
+                 continue;
+             //printf("Section: '%.*s' = '%.*s'\n", cast(int)sec.namelen, sec.name, cast(int)sec.bodylen, sec.body);
+             if (!sec.name.length && i == 0)
+             {
+                 buf.writestring("$(DDOC_SUMMARY ");
+                 size_t o = buf.length;
+                 buf.write(sec.body_);
+                 escapeStrayParenthesis(loc, buf, o, true, sc.eSink);
+                 highlightText(sc, a, loc, buf, o);
+                 buf.writestring(")");
+             }
+             else
+                 sec.write(loc, &this, sc, a, buf);
+         }
+         for (size_t i = 0; i < a.length; i++)
+         {
+             Dsymbol s = (*a)[i];
+             if (Dsymbol td = getEponymousParent(s))
+                 s = td;
+             for (UnitTestDeclaration utd = s.ddocUnittest; utd; utd = utd.ddocUnittest)
+             {
+                 if (utd.visibility.kind == Visibility.Kind.private_ || !utd.comment || !utd.fbody)
+                     continue;
+                 // Strip whitespaces to avoid showing empty summary
+                 const(char)* c = utd.comment;
+                 while (*c == ' ' || *c == '\t' || *c == '\n' || *c == '\r')
+                     ++c;
+                 buf.writestring("$(DDOC_EXAMPLES ");
+                 size_t o = buf.length;
+                 buf.writestring(cast(char*)c);
+                 if (utd.codedoc)
+                 {
+                     auto codedoc = utd.codedoc.stripLeadingNewlines;
+                     size_t n = getCodeIndent(codedoc);
+                     while (n--)
+                         buf.writeByte(' ');
+                     buf.writestring("----\n");
+                     buf.writestring(codedoc);
+                     buf.writestring("----\n");
+                     highlightText(sc, a, loc, buf, o);
+                 }
+                 buf.writestring(")");
+             }
+         }
+         if (buf.length == offset2)
+         {
+             /* Didn't write out any sections, so back out last write
+              */
+             buf.setsize(offset1);
+             buf.writestring("\n");
+         }
+         else
+             buf.writestring(")");
+     }
+ }
+ 
+ private:
+ 
+ /***********************************************************
+  */
  class Section
  {
      const(char)[] name;
*************** bool isCVariadicParameter(Dsymbols* a, c
*** 342,349 ****
      return false;
  }
  
! Dsymbol getEponymousMember(TemplateDeclaration td) @safe
  {
      if (!td.onemember)
          return null;
      if (AggregateDeclaration ad = td.onemember.isAggregateDeclaration())
--- 908,916 ----
      return false;
  }
  
! Dsymbol getEponymousMember(TemplateDeclaration td)
  {
+     td.computeOneMember();
      if (!td.onemember)
          return null;
      if (AggregateDeclaration ad = td.onemember.isAggregateDeclaration())
*************** Dsymbol getEponymousMember(TemplateDecla
*** 357,363 ****
      return null;
  }
  
! TemplateDeclaration getEponymousParent(Dsymbol s) @safe
  {
      if (!s.parent)
          return null;
--- 924,930 ----
      return null;
  }
  
! TemplateDeclaration getEponymousParent(Dsymbol s)
  {
      if (!s.parent)
          return null;
*************** immutable ddoc_decl_dd_s = "$(DDOC_DECL_
*** 372,537 ****
  immutable ddoc_decl_dd_e = ")\n";
  
  /****************************************************
-  * Generate Ddoc file for Module m.
-  * Params:
-  *      m = Module
-  *      ddoctext_ptr = combined text of .ddoc files for macro definitions
-  *      ddoctext_length = extant of ddoctext_ptr
-  *      datetime = charz returned by ctime()
-  *      eSink = send error messages to eSink
-  *      outbuf = append the Ddoc text to this
-  */
- public
- void gendocfile(Module m, const char* ddoctext_ptr, size_t ddoctext_length, const char* datetime, ErrorSink eSink, ref OutBuffer outbuf)
- {
-     gendocfile(m, ddoctext_ptr[0 .. ddoctext_length], datetime, eSink, outbuf);
- }
- 
- /****************************************************
-  * Generate Ddoc text for Module `m` and append it to `outbuf`.
-  * Params:
-  *      m = Module
-  *      ddoctext = combined text of .ddoc files for macro definitions
-  *      datetime = charz returned by ctime()
-  *      eSink = send error messages to eSink
-  *      outbuf = append the Ddoc text to this
-  */
- public
- void gendocfile(Module m, const char[] ddoctext, const char* datetime, ErrorSink eSink, ref OutBuffer outbuf)
- {
-     // Load internal default macros first
-     DocComment.parseMacros(m.escapetable, m.macrotable, ddoc_default[]);
- 
-     // Ddoc files override default macros
-     DocComment.parseMacros(m.escapetable, m.macrotable, ddoctext);
- 
-     Scope* sc = Scope.createGlobal(m, eSink); // create root scope
-     DocComment* dc = DocComment.parse(m, m.comment);
-     dc.pmacrotable = &m.macrotable;
-     dc.escapetable = m.escapetable;
-     sc.lastdc = dc;
-     // Generate predefined macros
-     // Set the title to be the name of the module
-     {
-         const p = m.toPrettyChars().toDString;
-         m.macrotable.define("TITLE", p);
-     }
-     // Set time macros
-     m.macrotable.define("DATETIME", datetime[0 .. 26]);
-     m.macrotable.define("YEAR", datetime[20 .. 20 + 4]);
- 
-     const srcfilename = m.srcfile.toString();
-     m.macrotable.define("SRCFILENAME", srcfilename);
-     const docfilename = m.docfile.toString();
-     m.macrotable.define("DOCFILENAME", docfilename);
-     if (dc.copyright)
-     {
-         dc.copyright.nooutput = 1;
-         m.macrotable.define("COPYRIGHT", dc.copyright.body_);
-     }
- 
-     OutBuffer buf;
-     if (m.filetype == FileType.ddoc)
-     {
-         Loc loc = m.md ? m.md.loc : m.loc;
- 
-         size_t commentlen = m.comment ? strlen(cast(char*)m.comment) : 0;
-         Dsymbols a;
-         // https://issues.dlang.org/show_bug.cgi?id=9764
-         // Don't push m in a, to prevent emphasize ddoc file name.
-         if (dc.macros)
-         {
-             commentlen = dc.macros.name.ptr - m.comment;
-             dc.macros.write(loc, dc, sc, &a, buf);
-         }
-         buf.write(m.comment[0 .. commentlen]);
-         highlightText(sc, &a, loc, buf, 0);
-     }
-     else
-     {
-         Dsymbols a;
-         a.push(m);
-         dc.writeSections(sc, &a, buf);
-         emitMemberComments(m, buf, sc);
-     }
-     //printf("BODY= '%.*s'\n", cast(int)buf.length, buf.data);
-     m.macrotable.define("BODY", buf[]);
- 
-     OutBuffer buf2;
-     buf2.writestring("$(DDOC)");
-     size_t end = buf2.length;
- 
-     // Expand buf in place with macro expansions
-     const success = m.macrotable.expand(buf2, 0, end, null, global.recursionLimit, &isIdStart, &isIdTail);
-     if (!success)
-         eSink.error(Loc.initial, "DDoc macro expansion limit exceeded; more than %d expansions.", global.recursionLimit);
- 
-     /* Remove all the escape sequences from buf,
-      * and make CR-LF the newline.
-      */
-     const slice = buf2[];
-     outbuf.reserve(slice.length);
-     auto p = slice.ptr;
-     for (size_t j = 0; j < slice.length; j++)
-     {
-         const c = p[j];
-         if (c == 0xFF && j + 1 < slice.length)
-         {
-             j++;
-             continue;
-         }
-         if (c == '\n')
-             outbuf.writeByte('\r');
-         else if (c == '\r')
-         {
-             outbuf.writestring("\r\n");
-             if (j + 1 < slice.length && p[j + 1] == '\n')
-             {
-                 j++;
-             }
-             continue;
-         }
-         outbuf.writeByte(c);
-     }
- }
- 
- /****************************************************
-  * Having unmatched parentheses can hose the output of Ddoc,
-  * as the macros depend on properly nested parentheses.
-  * This function replaces all ( with $(LPAREN) and ) with $(RPAREN)
-  * to preserve text literally. This also means macros in the
-  * text won't be expanded.
-  */
- public
- void escapeDdocString(ref OutBuffer buf, size_t start)
- {
-     for (size_t u = start; u < buf.length; u++)
-     {
-         const c = buf[u];
-         switch (c)
-         {
-         case '$':
-             buf.remove(u, 1);
-             buf.insert(u, "$(DOLLAR)");
-             u += 8;
-             break;
-         case '(':
-             buf.remove(u, 1); //remove the (
-             buf.insert(u, "$(LPAREN)"); //insert this instead
-             u += 8; //skip over newly inserted macro
-             break;
-         case ')':
-             buf.remove(u, 1); //remove the )
-             buf.insert(u, "$(RPAREN)"); //insert this instead
-             u += 8; //skip over newly inserted macro
-             break;
-         default:
-             break;
-         }
-     }
- }
- 
- /****************************************************
   * Having unmatched parentheses can hose the output of Ddoc,
   * as the macros depend on properly nested parentheses.
   *
--- 939,944 ----
*************** bool emitAnchorName(ref OutBuffer buf, D
*** 684,691 ****
      if (dot)
          buf.writeByte('.');
      // Use "this" not "__ctor"
!     TemplateDeclaration td;
!     if (s.isCtorDeclaration() || ((td = s.isTemplateDeclaration()) !is null && td.onemember && td.onemember.isCtorDeclaration()))
      {
          buf.writestring("this");
      }
--- 1091,1099 ----
      if (dot)
          buf.writeByte('.');
      // Use "this" not "__ctor"
!     TemplateDeclaration td = s.isTemplateDeclaration();
!     td.computeOneMember();
!     if (s.isCtorDeclaration() || (td !is null && td.onemember && td.onemember.isCtorDeclaration()))
      {
          buf.writestring("this");
      }
*************** void toDocBuffer(Dsymbol s, ref OutBuffe
*** 1350,1356 ****
              {
                  prettyPrintDsymbol(s, ad.parent);
              }
!             else if (Type type = ad.getType()) // type alias
              {
                  if (type.ty == Tclass || type.ty == Tstruct || type.ty == Tenum)
                  {
--- 1758,1764 ----
              {
                  prettyPrintDsymbol(s, ad.parent);
              }
!             else if (Type type = dmd.dsymbolsem.getType(ad)) // type alias
              {
                  if (type.ty == Tclass || type.ty == Tstruct || type.ty == Tenum)
                  {
*************** void toDocBuffer(Dsymbol s, ref OutBuffe
*** 1519,1932 ****
      s.accept(v);
  }
  
- /***********************************************************
-  */
- public
- struct DocComment
- {
-     Sections sections;      // Section*[]
-     Section summary;
-     Section copyright;
-     Section macros;
-     MacroTable* pmacrotable;
-     Escape* escapetable;
-     Dsymbols a;
- 
-     static DocComment* parse(Dsymbol s, const(char)* comment)
-     {
-         //printf("parse(%s): '%s'\n", s.toChars(), comment);
-         auto dc = new DocComment();
-         dc.a.push(s);
-         if (!comment)
-             return dc;
-         dc.parseSections(comment);
-         for (size_t i = 0; i < dc.sections.length; i++)
-         {
-             Section sec = dc.sections[i];
-             if (iequals("copyright", sec.name))
-             {
-                 dc.copyright = sec;
-             }
-             if (iequals("macros", sec.name))
-             {
-                 dc.macros = sec;
-             }
-         }
-         return dc;
-     }
- 
-     /************************************************
-      * Parse macros out of Macros: section.
-      * Macros are of the form:
-      *      name1 = value1
-      *
-      *      name2 = value2
-      */
-     extern(D) static void parseMacros(
-         Escape* escapetable, ref MacroTable pmacrotable, const(char)[] m)
-     {
-         const(char)* p = m.ptr;
-         size_t len = m.length;
-         const(char)* pend = p + len;
-         const(char)* tempstart = null;
-         size_t templen = 0;
-         const(char)* namestart = null;
-         size_t namelen = 0; // !=0 if line continuation
-         const(char)* textstart = null;
-         size_t textlen = 0;
-         while (p < pend)
-         {
-             // Skip to start of macro
-             while (1)
-             {
-                 if (p >= pend)
-                     goto Ldone;
-                 switch (*p)
-                 {
-                 case ' ':
-                 case '\t':
-                     p++;
-                     continue;
-                 case '\r':
-                 case '\n':
-                     p++;
-                     goto Lcont;
-                 default:
-                     if (isIdStart(p))
-                         break;
-                     if (namelen)
-                         goto Ltext; // continuation of prev macro
-                     goto Lskipline;
-                 }
-                 break;
-             }
-             tempstart = p;
-             while (1)
-             {
-                 if (p >= pend)
-                     goto Ldone;
-                 if (!isIdTail(p))
-                     break;
-                 p += utfStride(p);
-             }
-             templen = p - tempstart;
-             while (1)
-             {
-                 if (p >= pend)
-                     goto Ldone;
-                 if (!(*p == ' ' || *p == '\t'))
-                     break;
-                 p++;
-             }
-             if (*p != '=')
-             {
-                 if (namelen)
-                     goto Ltext; // continuation of prev macro
-                 goto Lskipline;
-             }
-             p++;
-             if (p >= pend)
-                 goto Ldone;
-             if (namelen)
-             {
-                 // Output existing macro
-             L1:
-                 //printf("macro '%.*s' = '%.*s'\n", cast(int)namelen, namestart, cast(int)textlen, textstart);
-                 if (iequals("ESCAPES", namestart[0 .. namelen]))
-                     parseEscapes(escapetable, textstart[0 .. textlen]);
-                 else
-                     pmacrotable.define(namestart[0 .. namelen], textstart[0 .. textlen]);
-                 namelen = 0;
-                 if (p >= pend)
-                     break;
-             }
-             namestart = tempstart;
-             namelen = templen;
-             while (p < pend && (*p == ' ' || *p == '\t'))
-                 p++;
-             textstart = p;
-         Ltext:
-             while (p < pend && *p != '\r' && *p != '\n')
-                 p++;
-             textlen = p - textstart;
-             p++;
-             //printf("p = %p, pend = %p\n", p, pend);
-         Lcont:
-             continue;
-         Lskipline:
-             // Ignore this line
-             while (p < pend && *p != '\r' && *p != '\n')
-                 p++;
-         }
-     Ldone:
-         if (namelen)
-             goto L1; // write out last one
-     }
- 
-     /**************************************
-      * Parse escapes of the form:
-      *      /c/string/
-      * where c is a single character.
-      * Multiple escapes can be separated
-      * by whitespace and/or commas.
-      */
-     static void parseEscapes(Escape* escapetable, const(char)[] text)
-     {
-         if (!escapetable)
-         {
-             escapetable = new Escape();
-             memset(escapetable, 0, Escape.sizeof);
-         }
-         //printf("parseEscapes('%.*s') pescapetable = %p\n", cast(int)text.length, text.ptr, escapetable);
-         const(char)* p = text.ptr;
-         const(char)* pend = p + text.length;
-         while (1)
-         {
-             while (1)
-             {
-                 if (p + 4 >= pend)
-                     return;
-                 if (!(*p == ' ' || *p == '\t' || *p == '\r' || *p == '\n' || *p == ','))
-                     break;
-                 p++;
-             }
-             if (p[0] != '/' || p[2] != '/')
-                 return;
-             char c = p[1];
-             p += 3;
-             const(char)* start = p;
-             while (1)
-             {
-                 if (p >= pend)
-                     return;
-                 if (*p == '/')
-                     break;
-                 p++;
-             }
-             size_t len = p - start;
-             char* s = cast(char*)memcpy(mem.xmalloc(len + 1), start, len);
-             s[len] = 0;
-             escapetable.strings[c] = s[0 .. len];
-             //printf("\t%c = '%s'\n", c, s);
-             p++;
-         }
-     }
- 
-     /*****************************************
-      * Parse next paragraph out of *pcomment.
-      * Update *pcomment to point past paragraph.
-      * Returns NULL if no more paragraphs.
-      * If paragraph ends in 'identifier:',
-      * then (*pcomment)[0 .. idlen] is the identifier.
-      */
-     void parseSections(const(char)* comment)
-     {
-         const(char)* p;
-         const(char)* pstart;
-         const(char)* pend;
-         const(char)* idstart = null; // dead-store to prevent spurious warning
-         size_t idlen;
-         const(char)* name = null;
-         size_t namelen = 0;
-         //printf("parseSections('%s')\n", comment);
-         p = comment;
-         while (*p)
-         {
-             const(char)* pstart0 = p;
-             p = skipwhitespace(p);
-             pstart = p;
-             pend = p;
- 
-             // Undo indent if starting with a list item
-             if ((*p == '-' || *p == '+' || *p == '*') && (*(p+1) == ' ' || *(p+1) == '\t'))
-                 pstart = pstart0;
-             else
-             {
-                 const(char)* pitem = p;
-                 while (*pitem >= '0' && *pitem <= '9')
-                     ++pitem;
-                 if (pitem > p && *pitem == '.' && (*(pitem+1) == ' ' || *(pitem+1) == '\t'))
-                     pstart = pstart0;
-             }
- 
-             /* Find end of section, which is ended by one of:
-              *      'identifier:' (but not inside a code section)
-              *      '\0'
-              */
-             idlen = 0;
-             int inCode = 0;
-             while (1)
-             {
-                 // Check for start/end of a code section
-                 if (*p == '-' || *p == '`' || *p == '~')
-                 {
-                     char c = *p;
-                     int numdash = 0;
-                     while (*p == c)
-                     {
-                         ++numdash;
-                         p++;
-                     }
-                     // BUG: handle UTF PS and LS too
-                     if ((!*p || *p == '\r' || *p == '\n' || (!inCode && c != '-')) && numdash >= 3)
-                     {
-                         inCode = inCode == c ? false : c;
-                         if (inCode)
-                         {
-                             // restore leading indentation
-                             while (pstart0 < pstart && isIndentWS(pstart - 1))
-                                 --pstart;
-                         }
-                     }
-                     pend = p;
-                 }
-                 if (!inCode && isIdStart(p))
-                 {
-                     const(char)* q = p + utfStride(p);
-                     while (isIdTail(q))
-                         q += utfStride(q);
- 
-                     // Detected tag ends it
-                     if (*q == ':' && isupper(*p)
-                             && (isspace(q[1]) || q[1] == 0))
-                     {
-                         idlen = q - p;
-                         idstart = p;
-                         for (pend = p; pend > pstart; pend--)
-                         {
-                             if (pend[-1] == '\n')
-                                 break;
-                         }
-                         p = q + 1;
-                         break;
-                     }
-                 }
-                 while (1)
-                 {
-                     if (!*p)
-                         goto L1;
-                     if (*p == '\n')
-                     {
-                         p++;
-                         if (*p == '\n' && !summary && !namelen && !inCode)
-                         {
-                             pend = p;
-                             p++;
-                             goto L1;
-                         }
-                         break;
-                     }
-                     p++;
-                     pend = p;
-                 }
-                 p = skipwhitespace(p);
-             }
-         L1:
-             if (namelen || pstart < pend)
-             {
-                 Section s;
-                 if (iequals("Params", name[0 .. namelen]))
-                     s = new ParamSection();
-                 else if (iequals("Macros", name[0 .. namelen]))
-                     s = new MacroSection();
-                 else
-                     s = new Section();
-                 s.name = name[0 .. namelen];
-                 s.body_ = pstart[0 .. pend - pstart];
-                 s.nooutput = 0;
-                 //printf("Section: '%.*s' = '%.*s'\n", cast(int)s.namelen, s.name, cast(int)s.bodylen, s.body);
-                 sections.push(s);
-                 if (!summary && !namelen)
-                     summary = s;
-             }
-             if (idlen)
-             {
-                 name = idstart;
-                 namelen = idlen;
-             }
-             else
-             {
-                 name = null;
-                 namelen = 0;
-                 if (!*p)
-                     break;
-             }
-         }
-     }
- 
-     void writeSections(Scope* sc, Dsymbols* a, ref OutBuffer buf)
-     {
-         assert(a.length);
-         //printf("DocComment::writeSections()\n");
-         Loc loc = (*a)[0].loc;
-         if (Module m = (*a)[0].isModule())
-         {
-             if (m.md)
-                 loc = m.md.loc;
-         }
-         size_t offset1 = buf.length;
-         buf.writestring("$(DDOC_SECTIONS ");
-         size_t offset2 = buf.length;
-         for (size_t i = 0; i < sections.length; i++)
-         {
-             Section sec = sections[i];
-             if (sec.nooutput)
-                 continue;
-             //printf("Section: '%.*s' = '%.*s'\n", cast(int)sec.namelen, sec.name, cast(int)sec.bodylen, sec.body);
-             if (!sec.name.length && i == 0)
-             {
-                 buf.writestring("$(DDOC_SUMMARY ");
-                 size_t o = buf.length;
-                 buf.write(sec.body_);
-                 escapeStrayParenthesis(loc, buf, o, true, sc.eSink);
-                 highlightText(sc, a, loc, buf, o);
-                 buf.writestring(")");
-             }
-             else
-                 sec.write(loc, &this, sc, a, buf);
-         }
-         for (size_t i = 0; i < a.length; i++)
-         {
-             Dsymbol s = (*a)[i];
-             if (Dsymbol td = getEponymousParent(s))
-                 s = td;
-             for (UnitTestDeclaration utd = s.ddocUnittest; utd; utd = utd.ddocUnittest)
-             {
-                 if (utd.visibility.kind == Visibility.Kind.private_ || !utd.comment || !utd.fbody)
-                     continue;
-                 // Strip whitespaces to avoid showing empty summary
-                 const(char)* c = utd.comment;
-                 while (*c == ' ' || *c == '\t' || *c == '\n' || *c == '\r')
-                     ++c;
-                 buf.writestring("$(DDOC_EXAMPLES ");
-                 size_t o = buf.length;
-                 buf.writestring(cast(char*)c);
-                 if (utd.codedoc)
-                 {
-                     auto codedoc = utd.codedoc.stripLeadingNewlines;
-                     size_t n = getCodeIndent(codedoc);
-                     while (n--)
-                         buf.writeByte(' ');
-                     buf.writestring("----\n");
-                     buf.writestring(codedoc);
-                     buf.writestring("----\n");
-                     highlightText(sc, a, loc, buf, o);
-                 }
-                 buf.writestring(")");
-             }
-         }
-         if (buf.length == offset2)
-         {
-             /* Didn't write out any sections, so back out last write
-              */
-             buf.setsize(offset1);
-             buf.writestring("\n");
-         }
-         else
-             buf.writestring(")");
-     }
- }
- 
  /*****************************************
   * Return true if comment consists entirely of "ditto".
   */
--- 1927,1932 ----
*************** Parameter isFunctionParameter(Dsymbols*
*** 2623,2633 ****
  
  /****************************************************
   */
! Parameter isEponymousFunctionParameter(Dsymbols* a, const(char)[] p) @safe
  {
      foreach (Dsymbol dsym; *a)
      {
          TemplateDeclaration td = dsym.isTemplateDeclaration();
          if (td && td.onemember)
          {
              /* Case 1: we refer to a template declaration inside the template
--- 2623,2634 ----
  
  /****************************************************
   */
! Parameter isEponymousFunctionParameter(Dsymbols* a, const(char)[] p)
  {
      foreach (Dsymbol dsym; *a)
      {
          TemplateDeclaration td = dsym.isTemplateDeclaration();
+         td.computeOneMember();
          if (td && td.onemember)
          {
              /* Case 1: we refer to a template declaration inside the template
*************** struct MarkdownLink
*** 3110,3116 ****
      {
          size_t iStart = i + 1;
          size_t iEnd = iStart;
!         if (iEnd >= buf.length || buf[iEnd] != '[' || (iEnd+1 < buf.length && buf[iEnd+1] == ']'))
          {
              // collapsed reference [foo][] or shortcut reference [foo]
              iStart = delimiter.iStart + delimiter.count - 1;
--- 3111,3119 ----
      {
          size_t iStart = i + 1;
          size_t iEnd = iStart;
!         if (iEnd >= buf.length)
!             return i;
!         if (buf[iEnd] != '[' || (iEnd+1 < buf.length && buf[iEnd+1] == ']'))
          {
              // collapsed reference [foo][] or shortcut reference [foo]
              iStart = delimiter.iStart + delimiter.count - 1;
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/dscope.d gcc-16-20260208/gcc/d/dmd/dscope.d
*** gcc-16-20260201/gcc/d/dmd/dscope.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/dscope.d	Sun Feb  8 22:32:07 2026
*************** module dmd.dscope;
*** 16,22 ****
  import core.stdc.stdio;
  import core.stdc.string;
  import dmd.aggregate;
- import dmd.arraytypes;
  import dmd.astenums;
  import dmd.attrib;
  import dmd.ctorflow;
--- 16,21 ----
*************** import dmd.dmodule;
*** 26,48 ****
  import dmd.doc;
  import dmd.dstruct;
  import dmd.dsymbol;
- import dmd.dsymbolsem;
  import dmd.dtemplate;
- import dmd.expression;
- import dmd.errors;
  import dmd.errorsink;
  import dmd.func;
  import dmd.globals;
- import dmd.id;
  import dmd.identifier;
- import dmd.importc;
- import dmd.location;
- import dmd.common.outbuffer;
  import dmd.root.rmem;
- import dmd.root.speller;
  import dmd.statement;
- import dmd.target;
- import dmd.tokens;
  
  //version=LOGSEARCH;
  
--- 25,37 ----
*************** private extern (D) struct FlagBitFields
*** 73,78 ****
--- 62,75 ----
      bool canFree;            /// is on free list
      bool fullinst;          /// fully instantiate templates
      bool ctfeBlock;         /// inside a `if (__ctfe)` block
+ 
+     /**
+     Is any symbol this scope is applied to known to have a compile time only accessible context.
+     This is not the same as `skipCodegen` nor can it be used to contribute to this.
+     It is meant for analysis engines to be conservative in what functions they analyse,
+       to prevent perceived false positives for meta-programming heavy code.
+     */
+     bool knownACompileTimeOnlyContext;
  }
  
  private extern (D) struct NonFlagBitFields
*************** extern (C++) struct Scope
*** 217,248 ****
          return new Scope();
      }
  
-     extern (D) static Scope* createGlobal(Module _module, ErrorSink eSink)
-     {
-         Scope* sc = Scope.alloc();
-         *sc = Scope.init;
-         sc._module = _module;
-         sc.minst = _module;
-         sc.scopesym = new ScopeDsymbol();
-         sc.scopesym.symtab = new DsymbolTable();
-         sc.eSink = eSink;
-         assert(eSink);
-         // Add top level package as member of this global scope
-         Dsymbol m = _module;
-         while (m.parent)
-             m = m.parent;
-         m.addMember(null, sc.scopesym);
-         m.parent = null; // got changed by addMember()
-         sc.previews.setFromParams(global.params);
- 
-         if (_module.filetype == FileType.c)
-             sc.inCfile = true;
-         // Create the module scope underneath the global scope
-         sc = sc.push(_module);
-         sc.parent = _module;
-         return sc;
-     }
- 
      extern (D) Scope* copy()
      {
          Scope* sc = Scope.alloc();
--- 214,219 ----
*************** extern (C++) struct Scope
*** 288,293 ****
--- 259,265 ----
          s.ctfeBlock = this.ctfeBlock;
          s.previews = this.previews;
          s.lastdc = null;
+         s.knownACompileTimeOnlyContext = this.knownACompileTimeOnlyContext;
          assert(&this != s);
          return s;
      }
*************** extern (C++) struct Scope
*** 380,691 ****
          return pop();
      }
  
- 
-     /*******************************
-      * Merge results of `ctorflow` into `this`.
-      * Params:
-      *   loc = for error messages
-      *   ctorflow = flow results to merge in
-      */
-     extern (D) void merge(Loc loc, const ref CtorFlow ctorflow)
-     {
-         if (!mergeCallSuper(this.ctorflow.callSuper, ctorflow.callSuper))
-             error(loc, "one path skips constructor");
- 
-         const fies = ctorflow.fieldinit;
-         if (!this.ctorflow.fieldinit.length || !fies.length)
-             return;
-         FuncDeclaration f = func;
-         if (fes)
-             f = fes.func;
-         auto ad = f.isMemberDecl();
-         assert(ad);
-         foreach (i, v; ad.fields)
-         {
-             bool mustInit = (v.storage_class & STC.nodefaultctor || v.type.needsNested());
-             auto fieldInit = &this.ctorflow.fieldinit[i];
-             const fiesCurrent = fies[i];
-             if (fieldInit.loc is Loc.init)
-                 fieldInit.loc = fiesCurrent.loc;
-             if (!mergeFieldInit(this.ctorflow.fieldinit[i].csx, fiesCurrent.csx) && mustInit)
-             {
-                 error(loc, "one path skips field `%s`", v.toChars());
-             }
-         }
-     }
- 
-     /************************************
-      * Perform unqualified name lookup by following the chain of scopes up
-      * until found.
-      *
-      * Params:
-      *  loc = location to use for error messages
-      *  ident = name to look up
-      *  pscopesym = if supplied and name is found, set to scope that ident was found in, otherwise set to null
-      *  flags = modify search based on flags
-      *
-      * Returns:
-      *  symbol if found, null if not
-      */
-     extern (C++) Dsymbol search(Loc loc, Identifier ident, out Dsymbol pscopesym, SearchOptFlags flags = SearchOpt.all)
-     {
-         version (LOGSEARCH)
-         {
-             printf("Scope.search(%p, '%s' flags=x%x)\n", &this, ident.toChars(), flags);
-             // Print scope chain
-             for (Scope* sc = &this; sc; sc = sc.enclosing)
-             {
-                 if (!sc.scopesym)
-                     continue;
-                 printf("\tscope %s\n", sc.scopesym.toChars());
-             }
- 
-             static void printMsg(string txt, Dsymbol s)
-             {
-                 printf("%.*s  %s.%s, kind = '%s'\n", cast(int)txt.length, txt.ptr,
-                     s.parent ? s.parent.toChars() : "", s.toChars(), s.kind());
-             }
-         }
- 
-         // This function is called only for unqualified lookup
-         assert(!(flags & (SearchOpt.localsOnly | SearchOpt.importsOnly)));
- 
-         /* If ident is "start at module scope", only look at module scope
-          */
-         if (ident == Id.empty)
-         {
-             // Look for module scope
-             for (Scope* sc = &this; sc; sc = sc.enclosing)
-             {
-                 assert(sc != sc.enclosing);
-                 if (!sc.scopesym)
-                     continue;
-                 if (Dsymbol s = sc.scopesym.isModule())
-                 {
-                     //printMsg("\tfound", s);
-                     pscopesym = sc.scopesym;
-                     return s;
-                 }
-             }
-             return null;
-         }
- 
-         Dsymbol checkAliasThis(AggregateDeclaration ad, Identifier ident, SearchOptFlags flags, Expression* exp)
-         {
-             import dmd.mtype;
-             if (!ad || !ad.aliasthis)
-                 return null;
- 
-             Declaration decl = ad.aliasthis.sym.isDeclaration();
-             if (!decl)
-                 return null;
- 
-             Type t = decl.type;
-             ScopeDsymbol sds;
-             TypeClass tc;
-             TypeStruct ts;
-             switch(t.ty)
-             {
-                 case Tstruct:
-                     ts = cast(TypeStruct)t;
-                     sds = ts.sym;
-                     break;
-                 case Tclass:
-                     tc = cast(TypeClass)t;
-                     sds = tc.sym;
-                     break;
-                 case Tinstance:
-                     sds = (cast(TypeInstance)t).tempinst;
-                     break;
-                 case Tenum:
-                     sds = (cast(TypeEnum)t).sym;
-                     break;
-                 default: break;
-             }
- 
-             if (!sds)
-                 return null;
- 
-             Dsymbol ret = sds.search(loc, ident, flags);
-             if (ret)
-             {
-                 *exp = new DotIdExp(loc, *exp, ad.aliasthis.ident);
-                 *exp = new DotIdExp(loc, *exp, ident);
-                 return ret;
-             }
- 
-             if (!ts && !tc)
-                 return null;
- 
-             Dsymbol s;
-             *exp = new DotIdExp(loc, *exp, ad.aliasthis.ident);
-             if (ts && !(ts.att & AliasThisRec.tracing))
-             {
-                 ts.att = cast(AliasThisRec)(ts.att | AliasThisRec.tracing);
-                 s = checkAliasThis(sds.isAggregateDeclaration(), ident, flags, exp);
-                 ts.att = cast(AliasThisRec)(ts.att & ~AliasThisRec.tracing);
-             }
-             else if(tc && !(tc.att & AliasThisRec.tracing))
-             {
-                 tc.att = cast(AliasThisRec)(tc.att | AliasThisRec.tracing);
-                 s = checkAliasThis(sds.isAggregateDeclaration(), ident, flags, exp);
-                 tc.att = cast(AliasThisRec)(tc.att & ~AliasThisRec.tracing);
-             }
-             return s;
-         }
- 
-         Dsymbol searchScopes(SearchOptFlags flags)
-         {
-             for (Scope* sc = &this; sc; sc = sc.enclosing)
-             {
-                 assert(sc != sc.enclosing);
-                 if (!sc.scopesym)
-                     continue;
-                 //printf("\tlooking in scopesym '%s', kind = '%s', flags = x%x\n", sc.scopesym.toChars(), sc.scopesym.kind(), flags);
- 
-                 if (sc.scopesym.isModule())
-                     flags |= SearchOpt.unqualifiedModule;    // tell Module.search() that SearchOpt.localsOnly is to be obeyed
-                 else if (sc.inCfile && sc.scopesym.isStructDeclaration())
-                     continue;                                // C doesn't have struct scope
- 
-                 if (Dsymbol s = sc.scopesym.search(loc, ident, flags))
-                 {
-                     if (flags & SearchOpt.tagNameSpace)
-                     {
-                         // ImportC: if symbol is not a tag, look for it in tag table
-                         if (!s.isScopeDsymbol())
-                         {
-                             auto ps = cast(void*)s in sc._module.tagSymTab;
-                             if (!ps)
-                                 goto NotFound;
-                             s = *ps;
-                         }
-                     }
-                     //printMsg("\tfound local", s);
-                     pscopesym = sc.scopesym;
-                     return s;
-                 }
- 
-             NotFound:
-                 if (sc.previews.fixAliasThis)
-                 {
-                     Expression exp = new ThisExp(loc);
-                     if (Dsymbol aliasSym = checkAliasThis(sc.scopesym.isAggregateDeclaration(), ident, flags, &exp))
-                     {
-                         //printf("found aliassym: %s\n", aliasSym.toChars());
-                         pscopesym = new ExpressionDsymbol(exp);
-                         return aliasSym;
-                     }
-                 }
- 
-                 // Stop when we hit a module, but keep going if that is not just under the global scope
-                 if (sc.scopesym.isModule() && !(sc.enclosing && !sc.enclosing.enclosing))
-                     break;
-             }
-             return null;
-         }
- 
-         if (this.ignoresymbolvisibility)
-             flags |= SearchOpt.ignoreVisibility;
- 
-         // First look in local scopes
-         Dsymbol s = searchScopes(flags | SearchOpt.localsOnly);
-         version (LOGSEARCH) if (s) printMsg("-Scope.search() found local", s);
-         if (!s)
-         {
-             // Second look in imported modules
-             s = searchScopes(flags | SearchOpt.importsOnly);
-             version (LOGSEARCH) if (s) printMsg("-Scope.search() found import", s);
-         }
-         return s;
-     }
- 
-     extern (D) Dsymbol search_correct(Identifier ident)
-     {
-         if (global.gag)
-             return null; // don't do it for speculative compiles; too time consuming
- 
-         /************************************************
-          * Given the failed search attempt, try to find
-          * one with a close spelling.
-          * Params:
-          *      seed = identifier to search for
-          *      cost = set to the cost, which rises with each outer scope
-          * Returns:
-          *      Dsymbol if found, null if not
-          */
-         extern (D) Dsymbol scope_search_fp(const(char)[] seed, out int cost)
-         {
-             //printf("scope_search_fp('%s')\n", seed);
-             /* If not in the lexer's string table, it certainly isn't in the symbol table.
-              * Doing this first is a lot faster.
-              */
-             if (!seed.length)
-                 return null;
-             Identifier id = Identifier.lookup(seed);
-             if (!id)
-                 return null;
-             Scope* sc = &this;
-             Module.clearCache();
-             Dsymbol scopesym;
-             Dsymbol s = sc.search(Loc.initial, id, scopesym, SearchOpt.ignoreErrors);
-             if (!s)
-                 return null;
- 
-             // Do not show `@disable`d declarations
-             if (auto decl = s.isDeclaration())
-                 if (decl.storage_class & STC.disable)
-                     return null;
-             // Or `deprecated` ones if we're not in a deprecated scope
-             if (s.isDeprecated() && !sc.isDeprecated())
-                 return null;
- 
-             for (cost = 0; sc; sc = sc.enclosing, ++cost)
-                 if (sc.scopesym == scopesym)
-                     break;
-             if (scopesym != s.parent)
-             {
-                 ++cost; // got to the symbol through an import
-                 if (s.visible().kind == Visibility.Kind.private_)
-                     return null;
-             }
-             return s;
-         }
- 
-         Dsymbol scopesym;
-         // search for exact name first
-         if (auto s = search(Loc.initial, ident, scopesym, SearchOpt.ignoreErrors))
-             return s;
-         return speller!scope_search_fp(ident.toString());
-     }
- 
-     /************************************
-      * Maybe `ident` was a C or C++ name. Check for that,
-      * and suggest the D equivalent.
-      * Params:
-      *  ident = unknown identifier
-      * Returns:
-      *  D identifier string if found, null if not
-      */
-     extern (D) static const(char)* search_correct_C(Identifier ident)
-     {
-         import dmd.astenums : Twchar;
-         TOK tok;
-         if (ident == Id.NULL)
-             tok = TOK.null_;
-         else if (ident == Id.TRUE)
-             tok = TOK.true_;
-         else if (ident == Id.FALSE)
-             tok = TOK.false_;
-         else if (ident == Id.unsigned)
-             tok = TOK.uns32;
-         else if (ident == Id.wchar_t)
-             tok = target.c.wchar_tsize == 2 ? TOK.wchar_ : TOK.dchar_;
-         else
-             return null;
-         return Token.toChars(tok);
-     }
- 
      /***************************
       * Find the innermost scope with a symbol table.
       * Returns:
--- 352,357 ----
*************** extern (C++) struct Scope
*** 701,749 ****
          return null;
      }
  
-     /******************************
-      * Add symbol s to innermost symbol table.
-      * Params:
-      *  s = symbol to insert
-      * Returns:
-      *  null if already in table, `s` if not
-      */
-     extern (D) Dsymbol insert(Dsymbol s)
-     {
-         //printf("insert() %s\n", s.toChars());
-         if (VarDeclaration vd = s.isVarDeclaration())
-         {
-             if (lastVar)
-                 vd.lastVar = lastVar;
-             lastVar = vd;
-         }
-         else if (WithScopeSymbol ss = s.isWithScopeSymbol())
-         {
-             if (VarDeclaration vd = ss.withstate.wthis)
-             {
-                 if (lastVar)
-                     vd.lastVar = lastVar;
-                 lastVar = vd;
-             }
-             return null;
-         }
- 
-         auto scopesym = inner().scopesym;
-         //printf("\t\tscopesym = %p\n", scopesym);
-         if (!scopesym.symtab)
-             scopesym.symtab = new DsymbolTable();
-         if (!this.inCfile)
-             return scopesym.symtabInsert(s);
- 
-         // ImportC insert
-         if (!scopesym.symtabInsert(s)) // if already in table
-         {
-             Dsymbol s2 = scopesym.symtabLookup(s, s.ident); // s2 is existing entry
-             return handleTagSymbols(this, s, s2, scopesym);
-         }
-         return s; // inserted
-     }
- 
      /********************************************
       * Search enclosing scopes for ScopeDsymbol.
       */
--- 367,372 ----
*************** extern (C++) struct Scope
*** 834,855 ****
              //    assert(0);
          }
      }
!     /******************************
!      */
!     extern (D) structalign_t alignment()
!     {
!         if (aligndecl)
!         {
!             auto ad = aligndecl.getAlignment(&this);
!             return ad.salign;
!         }
!         else
!         {
!             structalign_t sa;
!             sa.setDefault();
!             return sa;
!         }
!     }
      @safe @nogc pure nothrow const:
      /**********************************
      * Checks whether the current scope (or any of its parents) is deprecated.
--- 457,463 ----
              //    assert(0);
          }
      }
! 
      @safe @nogc pure nothrow const:
      /**********************************
      * Checks whether the current scope (or any of its parents) is deprecated.
*************** extern (C++) struct Scope
*** 918,921 ****
--- 526,535 ----
      {
          return _module && _module.edition >= edition;
      }
+ 
+     extern (D) bool isKnownToHaveACompileTimeContext()
+     {
+         return this.knownACompileTimeOnlyContext || this.intypeof != 0 || this.traitsCompiles || this.ctfe ||
+             this.condition || this.inTemplateConstraint || this.ctfeBlock;
+     }
  }
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/dstruct.d gcc-16-20260208/gcc/d/dmd/dstruct.d
*** gcc-16-20260201/gcc/d/dmd/dstruct.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/dstruct.d	Sun Feb  8 22:32:07 2026
*************** import core.stdc.stdio;
*** 18,39 ****
  import dmd.aggregate;
  import dmd.arraytypes;
  import dmd.astenums;
- import dmd.attrib;
- import dmd.declaration;
  import dmd.dmodule;
- import dmd.dscope;
  import dmd.dsymbol;
- import dmd.dtemplate;
- import dmd.expression;
  import dmd.func;
  import dmd.id;
  import dmd.identifier;
  import dmd.location;
  import dmd.mtype;
- import dmd.opover;
- import dmd.target;
- import dmd.tokens;
- import dmd.typinf;
  import dmd.visitor;
  
  enum StructFlags : int
--- 18,30 ----
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/dsymbol.d gcc-16-20260208/gcc/d/dmd/dsymbol.d
*** gcc-16-20260201/gcc/d/dmd/dsymbol.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/dsymbol.d	Sun Feb  8 22:32:07 2026
*************** import core.stdc.string;
*** 17,23 ****
  import core.stdc.stdlib;
  
  import dmd.aggregate;
- import dmd.aliasthis;
  import dmd.arraytypes;
  import dmd.attrib;
  import dmd.astenums;
--- 17,22 ----
*************** import dmd.dmodule;
*** 30,45 ****
  import dmd.dversion;
  import dmd.dscope;
  import dmd.dstruct;
- import dmd.dsymbolsem : toAlias;
  import dmd.dtemplate;
  import dmd.errors;
  import dmd.expression;
- import dmd.expressionsem : getDsymbol;
  import dmd.func;
- import dmd.id;
  import dmd.identifier;
- import dmd.init;
- import dmd.lexer;
  import dmd.location;
  import dmd.mtype;
  import dmd.nspace;
--- 29,39 ----
*************** enum PASS : ubyte
*** 181,188 ****
      semantic2done,  // semantic2() done
      semantic3,      // semantic3() started
      semantic3done,  // semantic3() done
!     inline,         // inline started
!     inlinedone,     // inline done
      obj,            // toObjFile() run
  }
  
--- 175,182 ----
      semantic2done,  // semantic2() done
      semantic3,      // semantic3() started
      semantic3done,  // semantic3() done
!     inlinePragma,   // inline pragma(inline, true) functions started
!     inlineAll,      // inline all functions started
      obj,            // toObjFile() run
  }
  
*************** extern (C++) class Dsymbol : ASTNode
*** 413,433 ****
          return toChars();
      }
  
-     override bool equals(const RootObject o) const
-     {
-         if (this == o)
-             return true;
-         const s = o.isDsymbol();
-         if (!s)
-             return false;
-         // Overload sets don't have an ident
-         // Function-local declarations may have identical names
-         // if they are declared in different scopes
-         if (s && ident && s.ident && ident.equals(s.ident) && localNum == s.localNum)
-             return true;
-         return false;
-     }
- 
      final bool isAnonymous() const
      {
          return ident is null || ident.isAnonymous;
--- 407,412 ----
*************** extern (C++) class Dsymbol : ASTNode
*** 592,607 ****
          return parent.toParentDeclImpl(localOnly);
      }
  
-     /**
-      * Returns the declaration scope scope of `this` unless any of the symbols
-      * `p1` or `p2` resides in its enclosing instantiation scope then the
-      * latter is returned.
-      */
-     final Dsymbol toParentP(Dsymbol p1, Dsymbol p2 = null)
-     {
-         return followInstantiationContext(p1, p2) ? toParent2() : toParentLocal();
-     }
- 
      final inout(TemplateInstance) isInstantiated() inout
      {
          if (!parent)
--- 571,576 ----
*************** extern (C++) class Dsymbol : ASTNode
*** 612,661 ****
          return parent.isInstantiated();
      }
  
-     /***
-      * Returns true if any of the symbols `p1` or `p2` resides in the enclosing
-      * instantiation scope of `this`.
-      */
-     final bool followInstantiationContext(Dsymbol p1, Dsymbol p2 = null)
-     {
-         static bool has2This(Dsymbol s)
-         {
-             if (auto f = s.isFuncDeclaration())
-                 return f.hasDualContext;
-             if (auto ad = s.isAggregateDeclaration())
-                 return ad.vthis2 !is null;
-             return false;
-         }
- 
-         if (has2This(this))
-         {
-             assert(p1);
-             auto outer = toParent();
-             while (outer)
-             {
-                 auto ti = outer.isTemplateInstance();
-                 if (!ti)
-                     break;
-                 foreach (oarg; *ti.tiargs)
-                 {
-                     auto sa = getDsymbol(oarg);
-                     if (!sa)
-                         continue;
-                     sa = sa.toAlias().toParent2();
-                     if (!sa)
-                         continue;
-                     if (sa == p1)
-                         return true;
-                     if (p2 && sa == p2)
-                         return true;
-                 }
-                 outer = ti.tempdecl.toParent();
-             }
-             return false;
-         }
-         return false;
-     }
- 
      // Check if this function is a member of a template which has only been
      // instantiated speculatively, eg from inside is(typeof()).
      // Return the speculative template instance it is part of,
--- 581,586 ----
*************** extern (C++) class Dsymbol : ASTNode
*** 733,754 ****
          return "symbol";
      }
  
-     bool overloadInsert(Dsymbol s)
-     {
-         //printf("Dsymbol::overloadInsert('%s')\n", s.toChars());
-         return false;
-     }
- 
-     /*********************************
-      * Returns:
-      *  SIZE_INVALID when the size cannot be determined
-      */
-     ulong size(Loc loc)
-     {
-         .error(loc, "%s `%s` symbol `%s` has no size", kind, toPrettyChars, toChars());
-         return SIZE_INVALID;
-     }
- 
      bool isforwardRef()
      {
          return false;
--- 658,663 ----
*************** extern (C++) class Dsymbol : ASTNode
*** 832,843 ****
          return ad ? ad.isClassDeclaration() : null;
      }
  
-     // is this a type?
-     Type getType()
-     {
-         return null;
-     }
- 
      // need a 'this' pointer?
      bool needThis()
      {
--- 741,746 ----
*************** extern (C++) class Dsymbol : ASTNode
*** 862,871 ****
          assert(0);
      }
  
-     void addObjcSymbols(ClassDeclarations* classes, ClassDeclarations* categories)
-     {
-     }
- 
      /****************************************
       * Add documentation comment to Dsymbol.
       * Ignore NULL comments.
--- 765,770 ----
*************** public:
*** 1179,1230 ****
          return sds;
      }
  
-     extern (D) final OverloadSet mergeOverloadSet(Identifier ident, OverloadSet os, Dsymbol s)
-     {
-         if (!os)
-         {
-             os = new OverloadSet(ident);
-             os.parent = this;
-         }
-         if (OverloadSet os2 = s.isOverloadSet())
-         {
-             // Merge the cross-module overload set 'os2' into 'os'
-             if (os.a.length == 0)
-             {
-                 os.a.setDim(os2.a.length);
-                 memcpy(os.a.tdata(), os2.a.tdata(), (os.a[0]).sizeof * os2.a.length);
-             }
-             else
-             {
-                 for (size_t i = 0; i < os2.a.length; i++)
-                 {
-                     os = mergeOverloadSet(ident, os, os2.a[i]);
-                 }
-             }
-         }
-         else
-         {
-             assert(s.isOverloadable());
-             /* Don't add to os[] if s is alias of previous sym
-              */
-             for (size_t j = 0; j < os.a.length; j++)
-             {
-                 Dsymbol s2 = os.a[j];
-                 if (s.toAlias() == s2.toAlias())
-                 {
-                     if (s2.isDeprecated() || (s2.visible() < s.visible() && s.visible().kind != Visibility.Kind.none))
-                     {
-                         os.a[j] = s;
-                     }
-                     goto Lcontinue;
-                 }
-             }
-             os.push(s);
-         Lcontinue:
-         }
-         return os;
-     }
- 
      void importScope(Dsymbol s, Visibility visibility) nothrow
      {
          //printf("%s.ScopeDsymbol::importScope(%s, %d)\n", toChars(), s.toChars(), visibility);
--- 1078,1083 ----
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/dsymbol.h gcc-16-20260208/gcc/d/dmd/dsymbol.h
*** gcc-16-20260201/gcc/d/dmd/dsymbol.h	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/dsymbol.h	Sun Feb  8 22:32:07 2026
*************** enum class PASS : uint8_t
*** 138,145 ****
      semantic2done,  // semantic2() done
      semantic3,      // semantic3() started
      semantic3done,  // semantic3() done
!     inline_,         // inline started
!     inlinedone,     // inline done
      obj             // toObjFile() run
  };
  
--- 138,145 ----
      semantic2done,  // semantic2() done
      semantic3,      // semantic3() started
      semantic3done,  // semantic3() done
!     inlinePragma,   // inline pragma(inline, true) functions started
!     inlineAll,      // inline all functions started
      obj             // toObjFile() run
  };
  
*************** public:
*** 205,211 ****
      CPPNamespaceDeclaration* cppnamespace(CPPNamespaceDeclaration* ns);
      UserAttributeDeclaration* userAttribDecl(UserAttributeDeclaration* uad);
      virtual const char *toPrettyCharsHelper(); // helper to print fully qualified (template) arguments
-     bool equals(const RootObject * const o) const override;
      bool isAnonymous() const;
      Module *getModule();
      bool isCsymbol();
--- 205,210 ----
*************** public:
*** 227,234 ****
      virtual Identifier *getIdent();
      virtual const char *toPrettyChars(bool QualifyTypes = false);
      virtual const char *kind() const;
-     virtual bool overloadInsert(Dsymbol *s);
-     virtual uinteger_t size(Loc loc);
      virtual bool isforwardRef();
      virtual AggregateDeclaration *isThis();     // is a 'this' required to access the member
      virtual bool isExport() const;              // is Dsymbol exported?
--- 226,231 ----
*************** public:
*** 241,251 ****
      AggregateDeclaration *isMemberDecl();       // is toParentDecl() an AggregateDeclaration?
      AggregateDeclaration *isMemberLocal();      // is toParentLocal() an AggregateDeclaration?
      ClassDeclaration *isClassMember();          // isMember() is a ClassDeclaration?
-     virtual Type *getType();                    // is this a type?
      virtual bool needThis();                    // need a 'this' pointer?
      virtual Visibility visible();
      virtual Dsymbol *syntaxCopy(Dsymbol *s);    // copy only syntax trees
-     virtual void addObjcSymbols(ClassDeclarations *, ClassDeclarations *) { }
  
      virtual void addComment(const utf8_t *comment);
      const utf8_t *comment();                      // current value of comment
--- 238,246 ----
*************** namespace dmd
*** 430,433 ****
--- 425,441 ----
      void setScope(Dsymbol *d, Scope *sc);
      void importAll(Dsymbol *d, Scope *sc);
      bool hasPointers(Dsymbol *d);
+     Type *getType(Dsymbol *d);
+     uinteger_t size(Dsymbol *ds, Loc loc);
+     void semantic3OnDependencies(Module *m);
+     void addDeferredSemantic(Dsymbol *s);
+     void addDeferredSemantic2(Dsymbol *s);
+     void addDeferredSemantic3(Dsymbol *s);
+     void runDeferredSemantic();
+     void runDeferredSemantic2();
+     void runDeferredSemantic3();
+     bool isOverlappedWith(VarDeclaration *vd, VarDeclaration *v);
+     Dsymbol* search(Scope *sc, Loc loc, Identifier* ident, Dsymbol*& pscopesym, uint32_t flags = 0u);
+     Scope *newScope(AggregateDeclaration * ad, Scope *sc);
+     void addObjcSymbols(Dsymbol *s, ClassDeclarations *, ClassDeclarations *);
  }
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/dsymbolsem.d gcc-16-20260208/gcc/d/dmd/dsymbolsem.d
*** gcc-16-20260201/gcc/d/dmd/dsymbolsem.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/dsymbolsem.d	Sun Feb  8 22:32:07 2026
*************** module dmd.dsymbolsem;
*** 14,19 ****
--- 14,20 ----
  
  import core.stdc.stdio;
  import core.stdc.string;
+ import core.stdc.stdlib;
  
  import dmd.aggregate;
  import dmd.aliasthis;
*************** import dmd.dtemplate;
*** 40,46 ****
  import dmd.dversion;
  import dmd.enumsem;
  import dmd.errors;
! import dmd.escape;
  import dmd.expression;
  import dmd.expressionsem;
  import dmd.func;
--- 41,47 ----
  import dmd.dversion;
  import dmd.enumsem;
  import dmd.errors;
! import dmd.errorsink;
  import dmd.expression;
  import dmd.expressionsem;
  import dmd.func;
*************** import dmd.identifier;
*** 51,57 ****
  import dmd.importc;
  import dmd.init;
  import dmd.initsem;
- import dmd.intrange;
  import dmd.hdrgen;
  import dmd.lexer;
  import dmd.location;
--- 52,57 ----
*************** import dmd.mtype;
*** 59,73 ****
  import dmd.mustuse;
  import dmd.nspace;
  import dmd.objc;
- import dmd.opover;
  import dmd.optimize;
  import dmd.parse;
- debug import dmd.printast;
  import dmd.root.array;
- import dmd.root.filename;
  import dmd.root.string;
- import dmd.common.outbuffer;
  import dmd.root.rmem;
  import dmd.rootobject;
  import dmd.safe;
  import dmd.semantic2;
--- 59,71 ----
  import dmd.mustuse;
  import dmd.nspace;
  import dmd.objc;
  import dmd.optimize;
  import dmd.parse;
  import dmd.root.array;
  import dmd.root.string;
  import dmd.root.rmem;
+ import dmd.root.speller;
+ import dmd.common.outbuffer;
  import dmd.rootobject;
  import dmd.safe;
  import dmd.semantic2;
*************** import dmd.semantic3;
*** 75,94 ****
  import dmd.sideeffect;
  import dmd.staticassert;
  import dmd.tokens;
- import dmd.utils;
  import dmd.statement;
  import dmd.target;
! import dmd.templateparamsem;
  import dmd.templatesem;
  import dmd.typesem;
  import dmd.visitor;
  
- version (IN_GCC) {}
- else version (IN_LLVM) {}
- else version = MARS;
- 
  enum LOG = false;
  
  /*************************************
   * Does semantic analysis on the public face of declarations.
   */
--- 73,693 ----
  import dmd.sideeffect;
  import dmd.staticassert;
  import dmd.tokens;
  import dmd.statement;
+ import dmd.statementsem : ready;
  import dmd.target;
! import dmd.targetcompiler;
  import dmd.templatesem;
  import dmd.typesem;
  import dmd.visitor;
  
  enum LOG = false;
  
+ /***************************************
+  * Create a new scope from sc.
+  * semantic, semantic2 and semantic3 will use this for aggregate members.
+  */
+ Scope* newScope(AggregateDeclaration _this, Scope* sc)
+ {
+     static Scope* defaultNewScope(AggregateDeclaration _this, Scope* sc)
+     {
+         auto sc2 = sc.push(_this);
+         sc2.stc &= STC.flowThruAggregate;
+         sc2.parent = _this;
+         sc2.inunion = _this.isUnionDeclaration();
+         sc2.visibility = Visibility(Visibility.Kind.public_);
+         sc2.explicitVisibility = false;
+         sc2.aligndecl = null;
+         sc2.userAttribDecl = null;
+         sc2.namespace = null;
+         return sc2;
+     }
+ 
+     static Scope* classNewScope(ClassDeclaration _this, Scope* sc)
+     {
+         auto sc2 = defaultNewScope(_this, sc);
+         if (_this.isCOMclass())
+         {
+             /* This enables us to use COM objects under Linux and
+              * work with things like XPCOM
+              */
+             sc2.linkage = target.systemLinkage();
+         }
+         return sc2;
+     }
+ 
+     static Scope* interfaceNewScope(InterfaceDeclaration _this, Scope* sc)
+     {
+         auto sc2 = classNewScope(_this, sc);
+         if (_this.com)
+             sc2.linkage = LINK.windows;
+         else if (_this.classKind == ClassKind.cpp)
+             sc2.linkage = LINK.cpp;
+         else if (_this.classKind == ClassKind.objc)
+             sc2.linkage = LINK.objc;
+         return sc2;
+     }
+ 
+     if (auto _id = _this.isInterfaceDeclaration())
+         return interfaceNewScope(_id, sc);
+     else if (auto cd = _this.isClassDeclaration())
+         return classNewScope(cd, sc);
+     return defaultNewScope(_this, sc);
+ }
+ 
+ void addObjcSymbols(Dsymbol _this, ClassDeclarations* classes, ClassDeclarations* categories)
+ {
+     if (auto ad = _this.isAttribDeclaration())
+         objc.addSymbols(ad, classes, categories);
+     else if (auto cd = _this.isClassDeclaration())
+         objc.addSymbols(cd, classes, categories);
+ }
+ 
+ /************************************
+  * Maybe `ident` was a C or C++ name. Check for that,
+  * and suggest the D equivalent.
+  * Params:
+  *  ident = unknown identifier
+  * Returns:
+  *  D identifier string if found, null if not
+  */
+ const(char)* search_correct_C(Identifier ident)
+ {
+     import dmd.astenums : Twchar;
+     TOK tok;
+     if (ident == Id.NULL)
+         tok = TOK.null_;
+     else if (ident == Id.TRUE)
+         tok = TOK.true_;
+     else if (ident == Id.FALSE)
+         tok = TOK.false_;
+     else if (ident == Id.unsigned)
+         tok = TOK.uns32;
+     else if (ident == Id.wchar_t)
+         tok = target.c.wchar_tsize == 2 ? TOK.wchar_ : TOK.dchar_;
+     else
+         return null;
+     return Token.toChars(tok);
+ }
+ 
+ /******************************
+  * Add symbol s to innermost symbol table.
+  * Params:
+  *  _this = scope object
+  *  s = symbol to insert
+  * Returns:
+  *  null if already in table, `s` if not
+  */
+ Dsymbol insert(Scope* _this, Dsymbol s)
+ {
+     //printf("insert() %s\n", s.toChars());
+     if (VarDeclaration vd = s.isVarDeclaration())
+     {
+         if (_this.lastVar)
+             vd.lastVar = _this.lastVar;
+         _this.lastVar = vd;
+     }
+     else if (WithScopeSymbol ss = s.isWithScopeSymbol())
+     {
+         if (VarDeclaration vd = ss.withstate.wthis)
+         {
+             if (_this.lastVar)
+                 vd.lastVar = _this.lastVar;
+             _this.lastVar = vd;
+         }
+         return null;
+     }
+ 
+     auto scopesym = _this.inner().scopesym;
+     //printf("\t\tscopesym = %p\n", scopesym);
+     if (!scopesym.symtab)
+         scopesym.symtab = new DsymbolTable();
+     if (!_this.inCfile)
+         return scopesym.symtabInsert(s);
+ 
+     // ImportC insert
+     if (!scopesym.symtabInsert(s)) // if already in table
+     {
+         Dsymbol s2 = scopesym.symtabLookup(s, s.ident); // s2 is existing entry
+ 
+         auto svar = s.isVarDeclaration();
+         auto s2var = s2.isVarDeclaration();
+         if (((svar && svar.storage_class & STC.extern_) &&
+                 (s2var && s2var.storage_class & STC.extern_) && _this.func) ||
+                 s.isFuncDeclaration())
+         {
+             return handleSymbolRedeclarations(*_this, s, s2, scopesym);
+         }
+         else // aside externs and func decls, we should be free to handle tags
+         {
+             return handleTagSymbols(*_this, s, s2, scopesym);
+         }
+     }
+     return s; // inserted
+ }
+ 
+ /*******************************************
+  * Look for member of the form:
+  *      const(MemberInfo)[] getMembers(string);
+  * Returns NULL if not found
+  */
+ FuncDeclaration findGetMembers(ScopeDsymbol dsym)
+ {
+     import dmd.opover : search_function;
+     Dsymbol s = search_function(dsym, Id.getmembers);
+     FuncDeclaration fdx = s ? s.isFuncDeclaration() : null;
+     version (none)
+     {
+         // Finish
+         __gshared TypeFunction tfgetmembers;
+         if (!tfgetmembers)
+         {
+             Scope sc;
+             sc.eSink = global.errorSink;
+             Parameters* p = new Parameter(STC.in_, Type.tchar.constOf().arrayOf(), null, null);
+             auto parameters = new Parameters(p);
+             Type tret = null;
+             TypeFunction tf = new TypeFunction(parameters, tret, VarArg.none, LINK.d);
+             tfgetmembers = tf.dsymbolSemantic(Loc.initial, &sc).isTypeFunction();
+         }
+         if (fdx)
+             fdx = fdx.overloadExactMatch(tfgetmembers);
+     }
+     if (fdx && fdx.isVirtual())
+         fdx = null;
+     return fdx;
+ }
+ 
+ /***********************************
+  * Retrieve the .min or .max values.
+  * Only valid after semantic analysis.
+  * Params:
+  *  _this = bit field instance
+  *  id = Id.min or Id.max
+  * Returns:
+  *  the min or max value
+  */
+ ulong getMinMax(BitFieldDeclaration _this, Identifier id)
+ {
+     const width = _this.fieldWidth;
+     const uns = _this.type.isUnsigned();
+     const min = id == Id.min;
+     ulong v;
+     assert(width != 0);  // should have been rejected in semantic pass
+     if (width == ulong.sizeof * 8)
+         v = uns ? (min ? ulong.min : ulong.max)
+                 : (min ?  long.min :  long.max);
+     else
+         v = uns ? (min ? 0
+                        : (1L << width) - 1)
+                 : (min ? -(1L << (width - 1))
+                        :  (1L << (width - 1)) - 1);
+     return v;
+ }
+ 
+ /* Append vthis field (this.tupleof[$-1]) to make this aggregate type nested.
+  */
+ void makeNested(AggregateDeclaration _this)
+ {
+     if (_this.enclosing) // if already nested
+         return;
+     if (_this.sizeok == Sizeok.done)
+         return;
+     if (_this.isUnionDeclaration() || _this.isInterfaceDeclaration())
+         return;
+     if (_this.storage_class & STC.static_)
+         return;
+ 
+     // If nested struct, add in hidden 'this' pointer to outer scope
+     auto s = _this.toParentLocal();
+     if (!s)
+         s = _this.toParent2();
+     if (!s)
+         return;
+     Type t = null;
+     if (auto fd = s.isFuncDeclaration())
+     {
+         _this.enclosing = fd;
+ 
+         /* https://issues.dlang.org/show_bug.cgi?id=14422
+          * If a nested class parent is a function, its
+          * context pointer (== `outer`) should be void* always.
+          */
+         t = Type.tvoidptr;
+     }
+     else if (auto ad = s.isAggregateDeclaration())
+     {
+         if (_this.isClassDeclaration() && ad.isClassDeclaration())
+         {
+             _this.enclosing = ad;
+         }
+         else if (_this.isStructDeclaration())
+         {
+             if (auto ti = ad.parent.isTemplateInstance())
+             {
+                 _this.enclosing = ti.enclosing;
+             }
+         }
+         t = ad.handleType();
+     }
+     if (_this.enclosing)
+     {
+         import dmd.typesem : alignment;
+         //printf("makeNested %s, enclosing = %s\n", toChars(), enclosing.toChars());
+         assert(t);
+         if (t.ty == Tstruct)
+             t = Type.tvoidptr; // t should not be a ref type
+ 
+         assert(!_this.vthis);
+         _this.vthis = new ThisDeclaration(_this.loc, t);
+         //vthis.storage_class |= STC.ref_;
+ 
+         // Emulate vthis.addMember()
+         _this.members.push(_this.vthis);
+ 
+         // Emulate vthis.dsymbolSemantic()
+         _this.vthis.storage_class |= STC.field;
+         _this.vthis.parent = _this;
+         _this.vthis.visibility = Visibility(Visibility.Kind.public_);
+         _this.vthis.alignment = t.alignment();
+         _this.vthis.semanticRun = PASS.semanticdone;
+ 
+         if (_this.sizeok == Sizeok.fwd)
+             _this.fields.push(_this.vthis);
+ 
+         _this.makeNested2();
+     }
+ }
+ 
+ /* Append vthis2 field (this.tupleof[$-1]) to add a second context pointer.
+  */
+ void makeNested2(AggregateDeclaration _this)
+ {
+     import dmd.typesem : alignment;
+ 
+     if (_this.vthis2)
+         return;
+     if (!_this.vthis)
+         _this.makeNested();   // can't add second before first
+     if (!_this.vthis)
+         return;
+     if (_this.sizeok == Sizeok.done)
+         return;
+     if (_this.isUnionDeclaration() || _this.isInterfaceDeclaration())
+         return;
+     if (_this.storage_class & STC.static_)
+         return;
+ 
+     auto s0 = _this.toParentLocal();
+     auto s = _this.toParent2();
+     if (!s || !s0 || s == s0)
+         return;
+     auto cd = s.isClassDeclaration();
+     Type t = cd ? cd.type : Type.tvoidptr;
+ 
+     _this.vthis2 = new ThisDeclaration(_this.loc, t);
+     //vthis2.storage_class |= STC.ref_;
+ 
+     // Emulate vthis2.addMember()
+     _this.members.push(_this.vthis2);
+ 
+     // Emulate vthis2.dsymbolSemantic()
+     _this.vthis2.storage_class |= STC.field;
+     _this.vthis2.parent = _this;
+     _this.vthis2.visibility = Visibility(Visibility.Kind.public_);
+     _this.vthis2.alignment = t.alignment();
+     _this.vthis2.semanticRun = PASS.semanticdone;
+ 
+     if (_this.sizeok == Sizeok.fwd)
+         _this.fields.push(_this.vthis2);
+ }
+ 
+ /************************************
+  * Perform unqualified name lookup by following the chain of scopes up
+  * until found.
+  *
+  * Params:
+  *  _this = Scope object
+  *  loc = location to use for error messages
+  *  ident = name to look up
+  *  pscopesym = if supplied and name is found, set to scope that ident was found in, otherwise set to null
+  *  flags = modify search based on flags
+  *
+  * Returns:
+  *  symbol if found, null if not
+  */
+ Dsymbol search(Scope* _this, Loc loc, Identifier ident, out Dsymbol pscopesym, SearchOptFlags flags = SearchOpt.all)
+ {
+     version (LOGSEARCH)
+     {
+         printf("Scope.search(%p, '%s' flags=x%x)\n", _this, ident.toChars(), flags);
+         // Print scope chain
+         for (Scope* sc = _this; sc; sc = sc.enclosing)
+         {
+             if (!sc.scopesym)
+                 continue;
+             printf("\tscope %s\n", sc.scopesym.toChars());
+         }
+ 
+         static void printMsg(string txt, Dsymbol s)
+         {
+             printf("%.*s  %s.%s, kind = '%s'\n", cast(int)txt.length, txt.ptr,
+                 s.parent ? s.parent.toChars() : "", s.toChars(), s.kind());
+         }
+     }
+ 
+     // This function is called only for unqualified lookup
+     assert(!(flags & (SearchOpt.localsOnly | SearchOpt.importsOnly)));
+ 
+     /* If ident is "start at module scope", only look at module scope
+      */
+     if (ident == Id.empty)
+     {
+         // Look for module scope
+         for (Scope* sc = _this; sc; sc = sc.enclosing)
+         {
+             assert(sc != sc.enclosing);
+             if (!sc.scopesym)
+                 continue;
+             if (Dsymbol s = sc.scopesym.isModule())
+             {
+                 //printMsg("\tfound", s);
+                 pscopesym = sc.scopesym;
+                 return s;
+             }
+         }
+         return null;
+     }
+ 
+     Dsymbol checkAliasThis(AggregateDeclaration ad, Identifier ident, SearchOptFlags flags, Expression* exp)
+     {
+         if (!ad || !ad.aliasthis)
+             return null;
+ 
+         Declaration decl = ad.aliasthis.sym.isDeclaration();
+         if (!decl)
+             return null;
+ 
+         Type t = decl.type;
+         ScopeDsymbol sds;
+         TypeClass tc;
+         TypeStruct ts;
+         switch(t.ty)
+         {
+             case Tstruct:
+                 ts = cast(TypeStruct)t;
+                 sds = ts.sym;
+                 break;
+             case Tclass:
+                 tc = cast(TypeClass)t;
+                 sds = tc.sym;
+                 break;
+             case Tinstance:
+                 sds = (cast(TypeInstance)t).tempinst;
+                 break;
+             case Tenum:
+                 sds = (cast(TypeEnum)t).sym;
+                 break;
+             default: break;
+         }
+ 
+         if (!sds)
+             return null;
+ 
+         Dsymbol ret = sds.search(loc, ident, flags);
+         if (ret)
+         {
+             *exp = new DotIdExp(loc, *exp, ad.aliasthis.ident);
+             *exp = new DotIdExp(loc, *exp, ident);
+             return ret;
+         }
+ 
+         if (!ts && !tc)
+             return null;
+ 
+         Dsymbol s;
+         *exp = new DotIdExp(loc, *exp, ad.aliasthis.ident);
+         if (ts && !(ts.att & AliasThisRec.tracing))
+         {
+             ts.att = cast(AliasThisRec)(ts.att | AliasThisRec.tracing);
+             s = checkAliasThis(sds.isAggregateDeclaration(), ident, flags, exp);
+             ts.att = cast(AliasThisRec)(ts.att & ~AliasThisRec.tracing);
+         }
+         else if(tc && !(tc.att & AliasThisRec.tracing))
+         {
+             tc.att = cast(AliasThisRec)(tc.att | AliasThisRec.tracing);
+             s = checkAliasThis(sds.isAggregateDeclaration(), ident, flags, exp);
+             tc.att = cast(AliasThisRec)(tc.att & ~AliasThisRec.tracing);
+         }
+         return s;
+     }
+ 
+     Dsymbol searchScopes(SearchOptFlags flags)
+     {
+         for (Scope* sc = _this; sc; sc = sc.enclosing)
+         {
+             assert(sc != sc.enclosing);
+             if (!sc.scopesym)
+                 continue;
+             //printf("\tlooking in scopesym '%s', kind = '%s', flags = x%x\n", sc.scopesym.toChars(), sc.scopesym.kind(), flags);
+ 
+             if (sc.scopesym.isModule())
+                 flags |= SearchOpt.unqualifiedModule;    // tell Module.search() that SearchOpt.localsOnly is to be obeyed
+             else if (sc.inCfile && sc.scopesym.isStructDeclaration())
+                 continue;                                // C doesn't have struct scope
+ 
+             if (Dsymbol s = sc.scopesym.search(loc, ident, flags))
+             {
+                 if (flags & SearchOpt.tagNameSpace)
+                 {
+                     // ImportC: if symbol is not a tag, look for it in tag table
+                     if (!s.isScopeDsymbol())
+                     {
+                         auto ps = cast(void*)s in sc._module.tagSymTab;
+                         if (!ps)
+                             goto NotFound;
+                         s = *ps;
+                     }
+                 }
+                 //printMsg("\tfound local", s);
+                 pscopesym = sc.scopesym;
+                 return s;
+             }
+ 
+         NotFound:
+             if (sc.previews.fixAliasThis)
+             {
+                 Expression exp = new ThisExp(loc);
+                 if (Dsymbol aliasSym = checkAliasThis(sc.scopesym.isAggregateDeclaration(), ident, flags, &exp))
+                 {
+                     //printf("found aliassym: %s\n", aliasSym.toChars());
+                     pscopesym = new ExpressionDsymbol(exp);
+                     return aliasSym;
+                 }
+             }
+ 
+             // Stop when we hit a module, but keep going if that is not just under the global scope
+             if (sc.scopesym.isModule() && !(sc.enclosing && !sc.enclosing.enclosing))
+                 break;
+         }
+         return null;
+     }
+ 
+     if (_this.ignoresymbolvisibility)
+         flags |= SearchOpt.ignoreVisibility;
+ 
+     // First look in local scopes
+     Dsymbol s = searchScopes(flags | SearchOpt.localsOnly);
+     version (LOGSEARCH) if (s) printMsg("-Scope.search() found local", s);
+     if (!s)
+     {
+         // Second look in imported modules
+         s = searchScopes(flags | SearchOpt.importsOnly);
+         version (LOGSEARCH) if (s) printMsg("-Scope.search() found import", s);
+     }
+     return s;
+ }
+ 
+ Dsymbol search_correct(Scope* _this, Identifier ident)
+ {
+     if (global.gag)
+         return null; // don't do it for speculative compiles; too time consuming
+ 
+     /************************************************
+      * Given the failed search attempt, try to find
+      * one with a close spelling.
+      * Params:
+      *      seed = identifier to search for
+      *      cost = set to the cost, which rises with each outer scope
+      * Returns:
+      *      Dsymbol if found, null if not
+      */
+     Dsymbol scope_search_fp(const(char)[] seed, out int cost)
+     {
+         //printf("scope_search_fp('%s')\n", seed);
+         /* If not in the lexer's string table, it certainly isn't in the symbol table.
+          * Doing this first is a lot faster.
+          */
+         if (!seed.length)
+             return null;
+         Identifier id = Identifier.lookup(seed);
+         if (!id)
+             return null;
+         Scope* sc = _this;
+         Module.clearCache();
+         Dsymbol scopesym;
+         Dsymbol s = sc.search(Loc.initial, id, scopesym, SearchOpt.ignoreErrors);
+         if (!s)
+             return null;
+ 
+         // Do not show `@disable`d declarations
+         if (auto decl = s.isDeclaration())
+             if (decl.storage_class & STC.disable)
+                 return null;
+         // Or `deprecated` ones if we're not in a deprecated scope
+         if (s.isDeprecated() && !sc.isDeprecated())
+             return null;
+ 
+         for (cost = 0; sc; sc = sc.enclosing, ++cost)
+             if (sc.scopesym == scopesym)
+                 break;
+         if (scopesym != s.parent)
+         {
+             ++cost; // got to the symbol through an import
+             if (s.visible().kind == Visibility.Kind.private_)
+                 return null;
+         }
+         return s;
+     }
+ 
+     Dsymbol scopesym;
+     // search for exact name first
+     if (auto s = _this.search(Loc.initial, ident, scopesym, SearchOpt.ignoreErrors))
+         return s;
+     return speller!scope_search_fp(ident.toString());
+ }
+ 
+ structalign_t alignment(Scope* _this)
+ {
+     if (_this.aligndecl)
+     {
+         auto ad = _this.aligndecl.getAlignment(_this);
+         return ad.salign;
+     }
+     else
+     {
+         structalign_t sa;
+         sa.setDefault();
+         return sa;
+     }
+ }
+ 
+ Scope* scopeCreateGlobal(Module _module, ErrorSink eSink)
+ {
+     Scope* sc = Scope.alloc();
+     *sc = Scope.init;
+     sc._module = _module;
+     sc.minst = _module;
+     sc.scopesym = new ScopeDsymbol();
+     sc.scopesym.symtab = new DsymbolTable();
+     sc.eSink = eSink;
+     assert(eSink);
+     // Add top level package as member of this global scope
+     Dsymbol m = _module;
+     while (m.parent)
+         m = m.parent;
+     m.addMember(null, sc.scopesym);
+     m.parent = null; // got changed by addMember()
+     sc.previews.setFromParams(global.params);
+ 
+     if (_module.filetype == FileType.c)
+         sc.inCfile = true;
+     // Create the module scope underneath the global scope
+     sc = sc.push(_module);
+     sc.parent = _module;
+     return sc;
+ }
+ 
  /*************************************
   * Does semantic analysis on the public face of declarations.
   */
*************** void dsymbolSemantic(Dsymbol dsym, Scope
*** 98,103 ****
--- 697,1323 ----
      dsym.accept(v);
  }
  
+ // function used to call semantic3 on a module's dependencies
+ void semantic3OnDependencies(Module m)
+ {
+     if (!m)
+         return;
+ 
+     if (m.semanticRun > PASS.semantic3)
+         return;
+ 
+     m.semantic3(null);
+ 
+     foreach (i; 1 .. m.aimports.length)
+         semantic3OnDependencies(m.aimports[i]);
+ }
+ 
+ /*******************************************
+  * Can't run semantic on s now, try again later.
+  */
+ void addDeferredSemantic(Dsymbol s)
+ {
+     //printf("Module::addDeferredSemantic('%s')\n", s.toChars());
+     if (!s.deferred)
+     {
+         s.deferred = true;
+         Module.deferred.push(s);
+     }
+ }
+ 
+ void addDeferredSemantic2(Dsymbol s)
+ {
+     //printf("Module::addDeferredSemantic2('%s')\n", s.toChars());
+     if (!s.deferred2)
+     {
+         s.deferred2 = true;
+         Module.deferred2.push(s);
+     }
+ }
+ 
+ void addDeferredSemantic3(Dsymbol s)
+ {
+     //printf("Module::addDeferredSemantic3('%s')\n", s.toChars());
+     if (!s.deferred3)
+     {
+         s.deferred3 = true;
+         Module.deferred3.push(s);
+     }
+ }
+ 
+ /******************************************
+  * Run semantic() on deferred symbols.
+  */
+ void runDeferredSemantic()
+ {
+     __gshared int nested;
+     if (nested)
+         return;
+     //if (Module.deferred.length) printf("+Module::runDeferredSemantic(), len = %ld\n", deferred.length);
+     nested++;
+ 
+     size_t len;
+     do
+     {
+         len = Module.deferred.length;
+         if (!len)
+             break;
+ 
+         Dsymbol* todo;
+         Dsymbol* todoalloc = null;
+         Dsymbol tmp;
+         if (len == 1)
+         {
+             todo = &tmp;
+         }
+         else
+         {
+             todo = cast(Dsymbol*)Mem.check(malloc(len * Dsymbol.sizeof));
+             todoalloc = todo;
+         }
+         memcpy(todo, Module.deferred.tdata(), len * Dsymbol.sizeof);
+         foreach (Dsymbol s; Module.deferred[])
+             s.deferred = false;
+         Module.deferred.setDim(0);
+ 
+         foreach (i; 0..len)
+         {
+             Dsymbol s = todo[i];
+             s.dsymbolSemantic(null);
+             //printf("deferred: %s, parent = %s\n", s.toChars(), s.parent.toChars());
+         }
+         //printf("\tdeferred.length = %ld, len = %ld\n", deferred.length, len);
+         if (todoalloc)
+             free(todoalloc);
+     }
+     while (Module.deferred.length != len); // while making progress
+     nested--;
+     //printf("-Module::runDeferredSemantic(), len = %ld\n", deferred.length);
+ }
+ 
+ void runDeferredSemantic2()
+ {
+     runDeferredSemantic();
+ 
+     Dsymbols* a = &Module.deferred2;
+     for (size_t i = 0; i < a.length; i++)
+     {
+         Dsymbol s = (*a)[i];
+         s.deferred2 = false;
+         //printf("[%d] %s semantic2a\n", i, s.toPrettyChars());
+         s.semantic2(null);
+ 
+         if (global.errors)
+             break;
+     }
+     a.setDim(0);
+ }
+ 
+ void runDeferredSemantic3()
+ {
+     runDeferredSemantic2();
+ 
+     Dsymbols* a = &Module.deferred3;
+     for (size_t i = 0; i < a.length; i++)
+     {
+         Dsymbol s = (*a)[i];
+         s.deferred3 = false;
+         //printf("[%d] %s semantic3a\n", i, s.toPrettyChars());
+         s.semantic3(null);
+ 
+         if (global.errors)
+             break;
+     }
+     a.setDim(0);
+ }
+ 
+ bool isOverlappedWith(VarDeclaration _this, VarDeclaration v)
+ {
+     import dmd.typesem : size;
+     const vsz = v.type.size();
+     const tsz = _this.type.size();
+     assert(vsz != SIZE_INVALID && tsz != SIZE_INVALID);
+ 
+     // Overlap is checked by comparing bit offsets
+     auto bitoffset  = _this.offset * 8;
+     auto vbitoffset =     v.offset * 8;
+ 
+     // Bitsize of types are overridden by any bitfield widths.
+     ulong tbitsize;
+     if (auto bf = _this.isBitFieldDeclaration())
+     {
+         bitoffset += bf.bitOffset;
+         tbitsize = bf.fieldWidth;
+     }
+     else
+         tbitsize = tsz * 8;
+ 
+     ulong vbitsize;
+     if (auto vbf = v.isBitFieldDeclaration())
+     {
+         vbitoffset += vbf.bitOffset;
+         vbitsize = vbf.fieldWidth;
+     }
+     else
+         vbitsize = vsz * 8;
+ 
+     return   bitoffset < vbitoffset + vbitsize &&
+             vbitoffset <  bitoffset + tbitsize;
+ }
+ 
+ private Type tupleDeclGetType(TupleDeclaration _this)
+ {
+     /* If this tuple represents a type, return that type
+      */
+ 
+     //printf("TupleDeclaration::getType() %s\n", toChars());
+     if (_this.isexp || _this.building)
+         return null;
+     if (_this.tupletype)
+         return _this.tupletype;
+ 
+     /* It's only a type tuple if all the Object's are types
+      */
+     for (size_t i = 0; i < _this.objects.length; i++)
+     {
+         RootObject o = (*_this.objects)[i];
+         if (!o.isType())
+         {
+             //printf("\tnot[%d], %p, %d\n", i, o, o.dyncast());
+             return null;
+         }
+     }
+ 
+     /* We know it's a type tuple, so build the TypeTuple
+      */
+     Types* types = cast(Types*)_this.objects;
+     auto args = new Parameters(_this.objects.length);
+     OutBuffer buf;
+     int hasdeco = 1;
+     for (size_t i = 0; i < types.length; i++)
+     {
+         Type t = (*types)[i];
+         //printf("type = %s\n", t.toChars());
+         version (none)
+         {
+             buf.printf("_%s_%d", _this.ident.toChars(), i);
+             auto id = Identifier.idPool(buf.extractSlice());
+             auto arg = new Parameter(Loc.initial, STC.in_, t, id, null);
+         }
+         else
+         {
+             auto arg = new Parameter(Loc.initial, STC.none, t, null, null, null);
+         }
+         (*args)[i] = arg;
+         if (!t.deco)
+             hasdeco = 0;
+     }
+ 
+     _this.tupletype = new TypeTuple(args);
+     if (hasdeco)
+         return _this.tupletype.typeSemantic(Loc.initial, null);
+ 
+     return _this.tupletype;
+ }
+ 
+ private Type aliasDeclGetType(AliasDeclaration _this)
+ {
+     if (_this.type)
+         return _this.type;
+     return toAlias(_this).getType();
+ }
+ 
+ private Type aggregateDeclGetType(AggregateDeclaration _this)
+ {
+     /* Apply storage classes to forward references. (Issue 22254)
+      * Note: Avoid interfaces for now. Implementing qualifiers on interface
+      * definitions exposed some issues in their TypeInfo generation in DMD.
+      * Related PR: https://github.com/dlang/dmd/pull/13312
+      */
+     if (_this.semanticRun == PASS.initial && !_this.isInterfaceDeclaration())
+     {
+         auto stc = _this.storage_class;
+         if (_this._scope)
+             stc |= _this._scope.stc;
+         _this.type = _this.type.addSTC(stc);
+     }
+     return _this.type;
+ }
+ 
+ Type getType(Dsymbol _this)
+ {
+     if (auto td = _this.isTupleDeclaration())
+         return tupleDeclGetType(td);
+     else if (auto ad = _this.isAliasDeclaration())
+         return aliasDeclGetType(ad);
+     else if (auto agd = _this.isAggregateDeclaration())
+         return aggregateDeclGetType(agd);
+     else if (auto ed = _this.isEnumDeclaration())
+         return ed.type;
+ 
+     // is this a type?
+     return null;
+ }
+ 
+ private uinteger_t aggregateDeclSize(AggregateDeclaration _this, Loc loc)
+ {
+     //printf("+AggregateDeclaration::size() %s, scope = %p, sizeok = %d\n", toChars(), _scope, sizeok);
+     bool ok = determineSize(_this, loc);
+     //printf("-AggregateDeclaration::size() %s, scope = %p, sizeok = %d\n", toChars(), _scope, sizeok);
+     return ok ? _this.structsize : SIZE_INVALID;
+ }
+ 
+ private uinteger_t declSize(Declaration _this, Loc loc)
+ {
+     import dmd.typesem: size;
+     assert(_this.type);
+     const sz = _this.type.size();
+     if (sz == SIZE_INVALID)
+         _this.errors = true;
+     return sz;
+ }
+ 
+ /*********************************
+  * Returns:
+  *  SIZE_INVALID when the size cannot be determined
+  */
+ uinteger_t size(Dsymbol _this, Loc loc)
+ {
+     if (auto ad = _this.isAggregateDeclaration())
+         return aggregateDeclSize(ad, loc);
+     else if (auto d = _this.isDeclaration())
+         return declSize(d, loc);
+     .error(loc, "%s `%s` symbol `%s` has no size", _this.kind, _this.toPrettyChars, _this.toChars());
+     return SIZE_INVALID;
+ }
+ 
+ private bool funcDeclEquals(const FuncDeclaration _this, const Dsymbol s)
+ {
+     auto fd1 = _this;
+     auto fd2 = s.isFuncDeclaration();
+     if (!fd2)
+         return false;
+ 
+     auto fa1 = fd1.isFuncAliasDeclaration();
+     auto faf1 = fa1 ? fa1.toAliasFunc() : fd1;
+ 
+     auto fa2 = fd2.isFuncAliasDeclaration();
+     auto faf2 = fa2 ? fa2.toAliasFunc() : fd2;
+ 
+     if (fa1 && fa2)
+         return faf1.equals(faf2) && fa1.hasOverloads == fa2.hasOverloads;
+ 
+     bool b1 = fa1 !is null;
+     if (b1 && faf1.isUnique() && !fa1.hasOverloads)
+         b1 = false;
+ 
+     bool b2 = fa2 !is null;
+     if (b2 && faf2.isUnique() && !fa2.hasOverloads)
+         b2 = false;
+ 
+     if (b1 != b2)
+         return false;
+ 
+     return faf1.toParent().equals(faf2.toParent()) &&
+            faf1.ident.equals(faf2.ident) &&
+            faf1.type.equals(faf2.type);
+ }
+ 
+ private bool overDeclEquals(const OverDeclaration _this, const Dsymbol s)
+ {
+     if (auto od2 = s.isOverDeclaration())
+         return _this.aliassym.equals(od2.aliassym);
+     return _this.aliassym == s;
+ }
+ 
+ private bool packageEquals(const Package _this, const Dsymbol s)
+ {
+     // custom 'equals' for bug 17441. "package a" and "module a" are not equal
+     auto p = cast(Package)s;
+     return p && _this.isModule() == p.isModule() && _this.ident.equals(p.ident);
+ }
+ 
+ bool equals(const Dsymbol _this, const Dsymbol s)
+ {
+     if (_this == s)
+         return true;
+ 
+     if(auto fd = _this.isFuncDeclaration())
+         return funcDeclEquals(fd, s);
+     else if (auto od = _this.isOverDeclaration())
+         return overDeclEquals(od, s);
+     else if (auto pkg = _this.isPackage())
+         return packageEquals(pkg, s);
+ 
+     // Overload sets don't have an ident
+     // Function-local declarations may have identical names
+     // if they are declared in different scopes
+     if (s && _this.ident && s.ident && _this.ident.equals(s.ident) && _this.localNum == s.localNum)
+         return true;
+ 
+     return false;
+ }
+ 
+ private bool aliasOverloadInsert(AliasDeclaration ad, Dsymbol s)
+ {
+     //printf("[%s] AliasDeclaration::overloadInsert('%s') s = %s %s @ [%s]\n",
+     //       loc.toChars(), toChars(), s.kind(), s.toChars(), s.loc.toChars());
+ 
+     /** Aliases aren't overloadable themselves, but if their Aliasee is
+      *  overloadable they are converted to an overloadable Alias (either
+      *  FuncAliasDeclaration or OverDeclaration).
+      *
+      *  This is done by moving the Aliasee into such an overloadable alias
+      *  which is then used to replace the existing Aliasee. The original
+      *  Alias (_this_) remains a useless shell.
+      *
+      *  This is a horrible mess. It was probably done to avoid replacing
+      *  existing AST nodes and references, but it needs a major
+      *  simplification b/c it's too complex to maintain.
+      *
+      *  A simpler approach might be to merge any colliding symbols into a
+      *  simple Overload class (an array) and then later have that resolve
+      *  all collisions.
+      */
+     if (ad.semanticRun < PASS.semanticdone)
+     {
+         /* Don't know yet what the aliased symbol is, so assume it can
+          * be overloaded and check later for correctness.
+          */
+         if (ad.overnext)
+             return ad.overnext.overloadInsert(s);
+         if (s is ad)
+             return true;
+         ad.overnext = s;
+         return true;
+     }
+     /* Semantic analysis is already finished, and the aliased entity
+      * is not overloadable.
+      */
+     if (ad.type)
+     {
+         /*
+             If type has been resolved already we could
+             still be inserting an alias from an import.
+ 
+             If we are handling an alias then pretend
+             it was inserting and return true, if not then
+             false since we didn't even pretend to insert something.
+         */
+         return ad._import && ad.equals(s);
+     }
+ 
+     // https://issues.dlang.org/show_bug.cgi?id=23865
+     // only insert if the symbol can be part of a set
+     const s1 = s.toAlias();
+     const isInsertCandidate = s1.isFuncDeclaration() || s1.isOverDeclaration() || s1.isTemplateDeclaration();
+ 
+     /* When s is added in member scope by static if, mixin("code") or others,
+      * aliassym is determined already. See the case in: test/compilable/test61.d
+      */
+     auto sa = ad.aliassym.toAlias();
+ 
+     if (auto fd = sa.isFuncDeclaration())
+     {
+         auto fa = new FuncAliasDeclaration(ad.ident, fd);
+         fa.visibility = ad.visibility;
+         fa.parent = ad.parent;
+         ad.aliassym = fa;
+         if (isInsertCandidate)
+             return ad.aliassym.overloadInsert(s);
+     }
+     if (auto td = sa.isTemplateDeclaration())
+     {
+         auto od = new OverDeclaration(ad.ident, td.funcroot ? td.funcroot : td);
+         od.visibility = ad.visibility;
+         od.parent = ad.parent;
+         ad.aliassym = od;
+         if (isInsertCandidate)
+             return ad.aliassym.overloadInsert(s);
+     }
+     if (auto od = sa.isOverDeclaration())
+     {
+         if (sa.ident != ad.ident || sa.parent != ad.parent)
+         {
+             od = new OverDeclaration(ad.ident, od);
+             od.visibility = ad.visibility;
+             od.parent = ad.parent;
+             ad.aliassym = od;
+         }
+         if (isInsertCandidate)
+             return od.overloadInsert(s);
+     }
+     if (auto os = sa.isOverloadSet())
+     {
+         if (sa.ident != ad.ident || sa.parent != ad.parent)
+         {
+             os = new OverloadSet(ad.ident, os);
+             // TODO: visibility is lost here b/c OverloadSets have no visibility attribute
+             // Might no be a practical issue, b/c the code below fails to resolve the overload anyhow.
+             // ----
+             // module os1;
+             // import a, b;
+             // private alias merged = foo; // private alias to overload set of a.foo and b.foo
+             // ----
+             // module os2;
+             // import a, b;
+             // public alias merged = bar; // public alias to overload set of a.bar and b.bar
+             // ----
+             // module bug;
+             // import os1, os2;
+             // void test() { merged(123); } // should only look at os2.merged
+             //
+             // os.visibility = visibility;
+             os.parent = ad.parent;
+             ad.aliassym = os;
+         }
+         if (isInsertCandidate)
+         {
+             os.push(s);
+             return true;
+         }
+     }
+     return false;
+ }
+ 
+ /**********************************
+  * Overload existing TemplateDeclaration '_this' with the new one 's'.
+  * Params:
+  *    s = symbol to be inserted
+  * Return: true if successful; i.e. no conflict.
+  */
+ private bool templateOverloadInsert(TemplateDeclaration _this, Dsymbol s){
+     static if (LOG)
+     {
+         printf("TemplateDeclaration.overloadInsert('%s')\n", s.toChars());
+     }
+ 
+     if (FuncDeclaration fd = s.isFuncDeclaration())
+     {
+         if (_this.funcroot)
+             return _this.funcroot.overloadInsert(fd);
+         _this.funcroot = fd;
+         return _this.funcroot.overloadInsert(_this);
+     }
+ 
+     // https://issues.dlang.org/show_bug.cgi?id=15795
+     // if candidate is an alias and its sema is not run then
+     // insertion can fail because the thing it alias is not known
+     if (AliasDeclaration ad = s.isAliasDeclaration())
+     {
+         if (s._scope)
+             aliasSemantic(ad, s._scope);
+         if (ad.aliassym && ad.aliassym is _this)
+             return false;
+     }
+ 
+     TemplateDeclaration td = s.toAlias().isTemplateDeclaration();
+     if (!td)
+         return false;
+ 
+     TemplateDeclaration pthis = _this;
+     TemplateDeclaration* ptd;
+     for (ptd = &pthis; *ptd; ptd = &(*ptd).overnext)
+     {
+     }
+ 
+     td.overroot = _this;
+     *ptd = td;
+     static if (LOG)
+     {
+         printf("\ttrue: no conflict\n");
+     }
+     return true;
+ }
+ 
+ private bool importOverloadInsert(Import _this, Dsymbol s){
+     /* Allow multiple imports with the same package base, but disallow
+      * alias collisions
+      * https://issues.dlang.org/show_bug.cgi?id=5412
+      */
+     assert(_this.ident && _this.ident == s.ident);
+     if (_this.aliasId)
+         return false;
+     const imp = s.isImport();
+     return imp && !imp.aliasId;
+ }
+ 
+ /**
+  * Overload _this FuncDeclaration with the new one f.
+  * Return true if successful; i.e. no conflict.
+ */
+ private bool funcOverloadInsert(FuncDeclaration _this, Dsymbol s){
+     //printf("FuncDeclaration::overloadInsert(s = %s) _this = %s\n", s.toChars(), toChars());
+     assert(s != _this);
+     if (AliasDeclaration ad = s.isAliasDeclaration())
+     {
+         if (_this.overnext)
+             return _this.overnext.overloadInsert(ad);
+         if (!ad.aliassym && ad.type.ty != Tident && ad.type.ty != Tinstance && ad.type.ty != Ttypeof)
+         {
+             //printf("\tad = '%s'\n", ad.type.toChars());
+             return false;
+         }
+         _this.overnext = ad;
+         //printf("\ttrue: no conflict\n");
+         return true;
+     }
+     TemplateDeclaration td = s.isTemplateDeclaration();
+     if (td)
+     {
+         if (!td.funcroot)
+             td.funcroot = _this;
+         if (_this.overnext)
+             return _this.overnext.overloadInsert(td);
+         _this.overnext = td;
+         return true;
+     }
+     FuncDeclaration fd = s.isFuncDeclaration();
+     if (!fd)
+         return false;
+ 
+     if (_this.overnext)
+     {
+         td = _this.overnext.isTemplateDeclaration();
+         if (td)
+             fd.overloadInsert(td);
+         else
+             return _this.overnext.overloadInsert(fd);
+     }
+     _this.overnext = fd;
+     //printf("\ttrue: no conflict\n");
+     return true;
+ }
+ 
+ private bool overdeclOverloadInsert(OverDeclaration _this, Dsymbol s){
+     //printf("OverDeclaration::overloadInsert('%s') _this.aliassym = %p, _this.overnext = %p\n", s.toChars(), _this.aliassym, _this.overnext);
+     if (_this.overnext)
+         return _this.overnext.overloadInsert(s);
+     if (s == _this)
+         return true;
+     _this.overnext = s;
+     return true;
+ }
+ 
+ bool overloadInsert(Dsymbol _this, Dsymbol s)
+ {
+     // Cannot overload postblits or destructors
+     if(_this.isPostBlitDeclaration() || _this.isDtorDeclaration())
+         return false;
+     else if(OverDeclaration od = _this.isOverDeclaration())
+         return overdeclOverloadInsert(od, s);
+     else if(FuncDeclaration fd = _this.isFuncDeclaration())
+         return funcOverloadInsert(fd, s);
+     if(Import imp = _this.isImport())
+         return importOverloadInsert(imp, s);
+     else if(TemplateDeclaration td = _this.isTemplateDeclaration())
+         return templateOverloadInsert(td, s);
+     else if (AliasDeclaration ad = _this.isAliasDeclaration())
+         return aliasOverloadInsert(ad, s);
+ 
+     return false;
+ }
+ 
  /***************************************************
   * Determine the numerical value of the AlignmentDeclaration
   * Params:
*************** bool isPOD(StructDeclaration sd)
*** 457,463 ****
      if (sd.ispod != ThreeState.none)
          return (sd.ispod == ThreeState.yes);
  
-     import dmd.clone;
  
      bool hasCpCtorLocal;
      bool hasMoveCtorLocal;
--- 1677,1682 ----
*************** bool isPOD(StructDeclaration sd)
*** 502,507 ****
--- 1721,1769 ----
      return true;
  }
  
+ /****************************************
+  * Fill in vtbl[] for base class based on member functions of class cd.
+  * Input:
+  *      bc              BaseClass
+  *      vtbl            if !=NULL, fill it in
+  *      newinstance     !=0 means all entries must be filled in by members
+  *                      of cd, not members of any base classes of cd.
+  * Returns:
+  *      true if any entries were filled in by members of cd (not exclusively
+  *      by base classes)
+  */
+ bool fillVtbl(BaseClass* bc, ClassDeclaration cd, FuncDeclarations* vtbl, int newinstance)
+ {
+     bool result = false;
+ 
+     //printf("BaseClass.fillVtbl(this='%s', cd='%s')\n", sym.toChars(), cd.toChars());
+     if (vtbl)
+         vtbl.setDim(bc.sym.vtbl.length);
+ 
+     // first entry is ClassInfo reference
+     for (size_t j = bc.sym.vtblOffset(); j < bc.sym.vtbl.length; j++)
+     {
+         FuncDeclaration ifd = bc.sym.vtbl[j].isFuncDeclaration();
+ 
+         //printf("        vtbl[%d] is '%s'\n", j, ifd ? ifd.toChars() : "null");
+         assert(ifd);
+ 
+         // Find corresponding function in this class
+         auto tf = ifd.type.toTypeFunction();
+         auto fd = cd.findFunc(ifd.ident, tf);
+         if (fd && !fd.isAbstract())
+         {
+             if (fd.toParent() == cd)
+                 result = true;
+         }
+         else
+             fd = null;
+         if (vtbl)
+             (*vtbl)[j] = fd;
+     }
+     return result;
+ }
+ 
  /*
  If sd has a copy constructor and ctor is an rvalue constructor,
  issue an error.
*************** void deferDsymbolSemantic(Scope* sc, Dsy
*** 686,692 ****
  {
      s._scope = scx ? scx : sc.copy();
      s._scope.setNoFree();
!     Module.addDeferredSemantic(s);
  }
  
  struct Ungag
--- 1948,1954 ----
  {
      s._scope = scx ? scx : sc.copy();
      s._scope.setNoFree();
!     addDeferredSemantic(s);
  }
  
  struct Ungag
*************** private void checkImportDeprecation(Modu
*** 741,746 ****
--- 2003,2010 ----
  
  private extern(C++) final class DsymbolSemanticVisitor : Visitor
  {
+     import dmd.typesem: size;
+ 
      alias visit = Visitor.visit;
  
      Scope* sc;
*************** private extern(C++) final class DsymbolS
*** 1013,1021 ****
--- 2277,2303 ----
          /* If scope's alignment is the default, use the type's alignment,
           * otherwise the scope overrrides.
           */
+         import dmd.typesem : alignment;
          if (dsym.alignment.isDefault())
              dsym.alignment = dsym.type.alignment(); // use type's alignment
  
+         if (sc.inCfile && !dsym.alignment.isDefault())
+         {
+             /* C11 6.7.5-4 alignment declaration cannot be less strict than the
+              * type alignment of the object or member being declared.
+              */
+             if (dsym.alignment.get() < dsym.type.alignsize())
+             {
+                 if (dsym.alignment.fromAlignas())
+                 {
+                     error(dsym.loc, "`_Alignas` specifier cannot be less strict than alignment of `%s`",
+                           dsym.toChars());
+                 }
+                 if (!dsym.alignment.isPack())
+                     dsym.alignment.setDefault();
+             }
+         }
+ 
          //printf("sc.stc = %x\n", sc.stc);
          //printf("storage_class = x%x\n", storage_class);
  
*************** private extern(C++) final class DsymbolS
*** 1339,1359 ****
              }
          }
  
!         /* If the alignment of a stack local is greater than the stack alignment,
!          * note it in the enclosing function's alignSectionVars
!          */
!         version (MARS)
!         {
!             if (!dsym.alignment.isDefault() && sc.func &&
!                 dsym.alignment.get() > target.stackAlign() &&
!                 sc.func && !dsym.isDataseg() && !dsym.isParameter() && !dsym.isField())
!             {
!                 auto fd = sc.func;
!                 if (!fd.alignSectionVars)
!                     fd.alignSectionVars = new VarDeclarations();
!                 fd.alignSectionVars.push(dsym);
!             }
!         }
  
          if ((dsym.storage_class & (STC.ref_ | STC.field)) == (STC.ref_ | STC.field) && dsym.ident != Id.This)
          {
--- 2621,2627 ----
              }
          }
  
!         mixin alignSectionVarsExtra; doAlign(); // align section variables
  
          if ((dsym.storage_class & (STC.ref_ | STC.field)) == (STC.ref_ | STC.field) && dsym.ident != Id.This)
          {
*************** private extern(C++) final class DsymbolS
*** 1460,1466 ****
                          "`void` initializing a struct with an invariant");
                  else if (dsym.type.toBasetype().ty == Tbool)
                      sc.setUnsafePreview(global.params.systemVariables, false, dsym.loc,
!                         "void intializing a bool (which must always be 0 or 1)");
                  else if (dsym.type.hasUnsafeBitpatterns())
                      sc.setUnsafePreview(global.params.systemVariables, false, dsym.loc,
                          "`void` initializing a type with unsafe bit patterns");
--- 2728,2734 ----
                          "`void` initializing a struct with an invariant");
                  else if (dsym.type.toBasetype().ty == Tbool)
                      sc.setUnsafePreview(global.params.systemVariables, false, dsym.loc,
!                         "`void` initializing a `bool` (which must always be 0 or 1)");
                  else if (dsym.type.hasUnsafeBitpatterns())
                      sc.setUnsafePreview(global.params.systemVariables, false, dsym.loc,
                          "`void` initializing a type with unsafe bit patterns");
*************** private extern(C++) final class DsymbolS
*** 1575,1580 ****
--- 2843,2857 ----
                      // Preset the required type to fail in FuncLiteralDeclaration::semantic3
                  ei.exp = inferType(ei.exp, dsym.type);
  
+             /*
+              * https://issues.dlang.org/show_bug.cgi?id=24474
+              * at function scope, the compiler thinks the type of the variable is not known yet
+              * (semantically complete) so looks like typeof gets locked in a cyclic situation
+              * semantics is actually done. just set it for importc
+              */
+             if (sc.func && dsym.type && dsym.type.deco && sc.inCfile)
+                 dsym.semanticRun = PASS.semanticdone;
+ 
              // If inside function, there is no semantic3() call
              if (sc.func || sc.intypeof == 1)
              {
*************** private extern(C++) final class DsymbolS
*** 1590,1596 ****
                          if (ai && tb.ty == Taarray)
                              e = ai.toAssocArrayLiteral();
                          else
!                             e = dsym._init.initializerToExpression(null, sc.inCfile);
                          if (!e)
                          {
                              // Run semantic, but don't need to interpret
--- 2867,2873 ----
                          if (ai && tb.ty == Taarray)
                              e = ai.toAssocArrayLiteral();
                          else
!                             e = dsym._init.initializerToExpression(dsym.type, sc.inCfile);
                          if (!e)
                          {
                              // Run semantic, but don't need to interpret
*************** private extern(C++) final class DsymbolS
*** 1903,1912 ****
  
          if (!(sc.previews.bitfields || sc.inCfile))
          {
!             version (IN_GCC)
!                 .error(dsym.loc, "%s `%s` use `-fpreview=bitfields` for bitfield support", dsym.kind, dsym.toPrettyChars);
!             else
!                 .error(dsym.loc, "%s `%s` use -preview=bitfields for bitfield support", dsym.kind, dsym.toPrettyChars);
          }
  
          if (!dsym.parent.isStructDeclaration() && !dsym.parent.isClassDeclaration())
--- 3180,3186 ----
  
          if (!(sc.previews.bitfields || sc.inCfile))
          {
!             .error(dsym.loc, "%s `%s` use `-%spreview=bitfields` for bitfield support", dsym.kind, dsym.toPrettyChars, SwitchPrefix.ptr);
          }
  
          if (!dsym.parent.isStructDeclaration() && !dsym.parent.isClassDeclaration())
*************** private extern(C++) final class DsymbolS
*** 2343,2349 ****
          Scope* sc = m._scope; // see if already got one from importAll()
          if (!sc)
          {
!             sc = Scope.createGlobal(m, global.errorSink); // create root scope
          }
  
          //printf("Module = %p, linkage = %d\n", sc.scopesym, sc.linkage);
--- 3617,3623 ----
          Scope* sc = m._scope; // see if already got one from importAll()
          if (!sc)
          {
!             sc = scopeCreateGlobal(m, global.errorSink); // create root scope
          }
  
          //printf("Module = %p, linkage = %d\n", sc.scopesym, sc.linkage);
*************** private extern(C++) final class DsymbolS
*** 2352,2358 ****
          {
              //printf("\tModule('%s'): '%s'.dsymbolSemantic()\n", toChars(), s.toChars());
              s.dsymbolSemantic(sc);
!             m.runDeferredSemantic();
          });
  
          if (m.userAttribDecl)
--- 3626,3632 ----
          {
              //printf("\tModule('%s'): '%s'.dsymbolSemantic()\n", toChars(), s.toChars());
              s.dsymbolSemantic(sc);
!             runDeferredSemantic();
          });
  
          if (m.userAttribDecl)
*************** private extern(C++) final class DsymbolS
*** 2362,2368 ****
          if (!m._scope)
          {
              sc = sc.pop();
!             sc.pop(); // 2 pops because Scope.createGlobal() created 2
          }
          m.semanticRun = PASS.semanticdone;
          //printf("-Module::semantic(this = %p, '%s'): parent = %p\n", this, toChars(), parent);
--- 3636,3642 ----
          if (!m._scope)
          {
              sc = sc.pop();
!             sc.pop(); // 2 pops because scopeCreateGlobal() created 2
          }
          m.semanticRun = PASS.semanticdone;
          //printf("-Module::semantic(this = %p, '%s'): parent = %p\n", this, toChars(), parent);
*************** private extern(C++) final class DsymbolS
*** 2499,2505 ****
                  else if (ea)
                  {
                      Expression tme = isExpression(tmo);
!                     if (!tme || !ea.equals(tme))
                          goto Lcontinue;
                  }
                  else if (sa)
--- 3773,3779 ----
                  else if (ea)
                  {
                      Expression tme = isExpression(tmo);
!                     if (!tme || !dmd.expressionsem.equals(ea, tme))
                          goto Lcontinue;
                  }
                  else if (sa)
*************** private extern(C++) final class DsymbolS
*** 2581,2587 ****
          nest--;
  
          /* In DeclDefs scope, TemplateMixin does not have to handle deferred symbols.
!          * Because the members would already call Module.addDeferredSemantic() for themselves.
           * See Struct, Class, Interface, and EnumDeclaration.dsymbolSemantic().
           */
          //if (!sc.func && Module.deferred.length > deferred_dim) {}
--- 3855,3861 ----
          nest--;
  
          /* In DeclDefs scope, TemplateMixin does not have to handle deferred symbols.
!          * Because the members would already call addDeferredSemantic() for themselves.
           * See Struct, Class, Interface, and EnumDeclaration.dsymbolSemantic().
           */
          //if (!sc.func && Module.deferred.length > deferred_dim) {}
*************** private extern(C++) final class DsymbolS
*** 2765,2788 ****
          sc.stc &= ~STC.static_; // not a static constructor
  
          funcDeclarationSemantic(sc, ctd);
-         // Check short constructor: this() => expr;
-         if (ctd.fbody)
-         {
-             if (auto s = ctd.fbody.isExpStatement())
-             {
-                 if (s.exp)
-                 {
-                     auto ce = s.exp.isCallExp();
-                     // check this/super before semantic
-                     if (!ce || (!ce.e1.isThisExp() && !ce.e1.isSuperExp()))
-                     {
-                         s.exp = s.exp.expressionSemantic(sc);
-                         if (s.exp.type.ty != Tvoid)
-                             error(s.loc, "can only return void expression, `this` call or `super` call from constructor");
-                     }
-                 }
-             }
-         }
  
          sc.pop();
  
--- 4039,4044 ----
*************** private extern(C++) final class DsymbolS
*** 3378,3383 ****
--- 4634,4642 ----
  
          sd.inv = buildInv(sd, sc2);
  
+         sd.rtInfoScope = sc2;
+         sc2.setNoFree();
+ 
          sd.semanticRun = PASS.semanticdone;
          if (log) printf("-StructDeclaration::semantic(this=%p, '%s', sizeok = %d)\n", sd, sd.toPrettyChars(), sd.sizeok);
  
*************** private extern(C++) final class DsymbolS
*** 3768,3773 ****
--- 5027,5035 ----
          {
              return;
          }
+         cldec.rtInfoScope = sc;
+         sc.setNoFree();
+ 
          cldec.semanticRun = PASS.semantic;
          checkGNUABITag(cldec, sc.linkage);
          checkMustUseReserved(cldec);
*************** private extern(C++) final class DsymbolS
*** 3887,3893 ****
                  {
                      //printf("\ttry later, forward reference of base class %s\n", tc.sym.toChars());
                      if (tc.sym._scope)
!                         Module.addDeferredSemantic(tc.sym);
                      cldec.baseok = Baseok.none;
                  }
              L7:
--- 5149,5155 ----
                  {
                      //printf("\ttry later, forward reference of base class %s\n", tc.sym.toChars());
                      if (tc.sym._scope)
!                         addDeferredSemantic(tc.sym);
                      cldec.baseok = Baseok.none;
                  }
              L7:
*************** private extern(C++) final class DsymbolS
*** 3968,3974 ****
                  {
                      //printf("\ttry later, forward reference of base %s\n", tc.sym.toChars());
                      if (tc.sym._scope)
!                         Module.addDeferredSemantic(tc.sym);
                      cldec.baseok = Baseok.none;
                  }
                  i++;
--- 5230,5236 ----
                  {
                      //printf("\ttry later, forward reference of base %s\n", tc.sym.toChars());
                      if (tc.sym._scope)
!                         addDeferredSemantic(tc.sym);
                      cldec.baseok = Baseok.none;
                  }
                  i++;
*************** private extern(C++) final class DsymbolS
*** 4084,4090 ****
              {
                  // Forward referencee of one or more bases, try again later
                  if (tc.sym._scope)
!                     Module.addDeferredSemantic(tc.sym);
                  //printf("\tL%d semantic('%s') failed due to forward references\n", __LINE__, toChars());
                  return deferDsymbolSemantic(sc, cldec, scx);
              }
--- 5346,5352 ----
              {
                  // Forward referencee of one or more bases, try again later
                  if (tc.sym._scope)
!                     addDeferredSemantic(tc.sym);
                  //printf("\tL%d semantic('%s') failed due to forward references\n", __LINE__, toChars());
                  return deferDsymbolSemantic(sc, cldec, scx);
              }
*************** private extern(C++) final class DsymbolS
*** 4537,4543 ****
                  {
                      //printf("\ttry later, forward reference of base %s\n", tc.sym.toChars());
                      if (tc.sym._scope)
!                         Module.addDeferredSemantic(tc.sym);
                      idec.baseok = Baseok.none;
                  }
                  i++;
--- 5799,5805 ----
                  {
                      //printf("\ttry later, forward reference of base %s\n", tc.sym.toChars());
                      if (tc.sym._scope)
!                         addDeferredSemantic(tc.sym);
                      idec.baseok = Baseok.none;
                  }
                  i++;
*************** private extern(C++) final class DsymbolS
*** 4581,4587 ****
              {
                  // Forward referencee of one or more bases, try again later
                  if (tc.sym._scope)
!                     Module.addDeferredSemantic(tc.sym);
                  return deferDsymbolSemantic(sc, idec, scx);
              }
          }
--- 5843,5849 ----
              {
                  // Forward referencee of one or more bases, try again later
                  if (tc.sym._scope)
!                     addDeferredSemantic(tc.sym);
                  return deferDsymbolSemantic(sc, idec, scx);
              }
          }
*************** private void attribAddMember(AttribDecla
*** 4695,4717 ****
      }
  }
  
- /****************************************************
-  * Declare parameters of template instance, initialize them with the
-  * template instance arguments.
-  */
- private void declareParameters(TemplateInstance ti, Scope* sc)
- {
-     TemplateDeclaration tempdecl = ti.tempdecl.isTemplateDeclaration();
-     assert(tempdecl);
- 
-     //printf("TemplateInstance.declareParameters()\n");
-     foreach (i, o; ti.tdtypes) // initializer for tp
-     {
-         TemplateParameter tp = (*tempdecl.parameters)[i];
-         //printf("\ttdtypes[%d] = %p\n", i, o);
-         declareParameter(tempdecl, sc, tp, o);
-     }
- }
  private extern(C++) class AddMemberVisitor : Visitor
  {
      alias visit = Visitor.visit;
--- 5957,5962 ----
*************** private extern(C++) class AddMemberVisit
*** 4772,4777 ****
--- 6017,6024 ----
  
              if (!s2.overloadInsert(dsym))
              {
+                 if (auto _td = s2.isTemplateDeclaration())
+                     _td.computeOneMember();
                  sds.multiplyDefined(Loc.initial, dsym, s2);
                  dsym.errors = true;
              }
*************** void addEnumMembersToSymtab(EnumDeclarat
*** 5074,5990 ****
      });
  }
  
! /******************************************************
!  * Verifies if the given Identifier is a DRuntime hook. It uses the hooks
!  * defined in `id.d`.
!  *
!  * Params:
!  *  id = Identifier to verify
!  * Returns:
!  *  true if `id` is a DRuntime hook
!  *  false otherwise
!  */
! private bool isDRuntimeHook(Identifier id)
! {
!     return id == Id._d_HookTraceImpl ||
!         id == Id._d_newclassT || id == Id._d_newclassTTrace ||
!         id == Id._d_arraycatnTX || id == Id._d_arraycatnTXTrace ||
!         id == Id._d_newThrowable || id == Id._d_delThrowable ||
!         id == Id._d_arrayassign_l || id == Id._d_arrayassign_r ||
!         id == Id._d_arraysetassign || id == Id._d_arraysetctor ||
!         id == Id._d_arrayctor ||
!         id == Id._d_arraysetlengthT ||
!         id == Id._d_arraysetlengthTTrace ||
!         id == Id._d_arrayappendT || id == Id._d_arrayappendTTrace ||
!         id == Id._d_arrayappendcTX;
! }
! 
! /*****************************************
!  * Append `ti` to the specific module `ti.members[]`
!  */
! private Dsymbols* appendToModuleMember(TemplateInstance ti)
! {
!     Module mi = ti.minst; // instantiated . inserted module
! 
!     //printf("%s.appendToModuleMember() enclosing = %s mi = %s\n",
!     //    toPrettyChars(),
!     //    enclosing ? enclosing.toPrettyChars() : null,
!     //    mi ? mi.toPrettyChars() : null);
!     if (global.params.allInst || !mi || mi.isRoot())
!     {
!         /* If the instantiated module is speculative or root, insert to the
!          * member of a root module. Then:
!          *  - semantic3 pass will get called on the instance members.
!          *  - codegen pass will get a selection chance to do/skip it (needsCodegen()).
!          */
!         static Dsymbol getStrictEnclosing(TemplateInstance ti)
!         {
!             do
!             {
!                 if (ti.enclosing)
!                     return ti.enclosing;
!                 ti = ti.tempdecl.isInstantiated();
!             } while (ti);
!             return null;
!         }
! 
!         Dsymbol enc = getStrictEnclosing(ti);
!         // insert target is made stable by using the module
!         // where tempdecl is declared.
!         mi = (enc ? enc : ti.tempdecl).getModule();
!         if (!mi.isRoot())
!         {
!             if (mi.importedFrom)
!             {
!                 mi = mi.importedFrom;
!                 assert(mi.isRoot());
!             }
!             else
!             {
!                 // This can happen when using the frontend as a library.
!                 // Append it to the non-root module.
!             }
!         }
!     }
!     else
!     {
!         /* If the instantiated module is non-root, insert to the member of the
!          * non-root module. Then:
!          *  - semantic3 pass won't be called on the instance.
!          *  - codegen pass won't reach to the instance.
!          * Unless it is re-appended to a root module later (with changed minst).
!          */
!     }
!     //printf("\t-. mi = %s\n", mi.toPrettyChars());
! 
!     if (ti.memberOf) // already appended to some module
!     {
!         assert(mi.isRoot(), "can only re-append to a root module");
!         if (ti.memberOf.isRoot())
!             return null; // no need to move to another root module
!     }
! 
!     Dsymbols* a = mi.members;
!     a.push(ti);
!     ti.memberOf = mi;
!     if (mi.semanticRun >= PASS.semantic2done && mi.isRoot())
!         Module.addDeferredSemantic2(ti);
!     if (mi.semanticRun >= PASS.semantic3done && mi.isRoot())
!         Module.addDeferredSemantic3(ti);
!     return a;
! }
! 
! private void expandMembers(TemplateInstance ti,Scope* sc2)
! {
!     ti.members.foreachDsymbol( (s) { s.setScope (sc2); } );
! 
!     ti.members.foreachDsymbol( (s) { s.importAll(sc2); } );
! 
!     if (!ti.aliasdecl)
!     {
!         /* static if's are crucial to evaluating aliasdecl correctly. But
!          * evaluating the if/else bodies may require aliasdecl.
!          * So, evaluate the condition for static if's, but not their if/else bodies.
!          * Then try to set aliasdecl.
!          * Later do the if/else bodies.
!          * https://issues.dlang.org/show_bug.cgi?id=23598
!          * It might be better to do this by attaching a lambda to the StaticIfDeclaration
!          * to do the oneMembers call after the sid.include(sc2) is run as part of dsymbolSemantic().
!          */
!         bool done;
!         void staticIfDg(Dsymbol s)
!         {
!             if (done || ti.aliasdecl)
!                 return;
!             //printf("\t staticIfDg on '%s %s' in '%s'\n",  s.kind(), s.toChars(), this.toChars());
!             if (!s.isStaticIfDeclaration())
!             {
!                 //s.dsymbolSemantic(sc2);
!                 done = true;
!                 return;
!             }
!             auto sid = s.isStaticIfDeclaration();
!             sid.include(sc2);
!             if (ti.members.length)
!             {
!                 Dsymbol sa;
!                 if (oneMembers(ti.members, sa, ti.tempdecl.ident) && sa)
!                     ti.aliasdecl = sa;
!             }
!             done = true;
!         }
! 
!         ti.members.foreachDsymbol(&staticIfDg);
!     }
! 
!     void symbolDg(Dsymbol s)
!     {
!         //printf("\t semantic on '%s' %p kind %s in '%s'\n",  s.toChars(), s, s.kind(), this.toChars());
!         //printf("test: enclosing = %d, sc2.parent = %s\n", enclosing, sc2.parent.toChars());
!         //if (enclosing)
!         //    s.parent = sc.parent;
!         //printf("test3: enclosing = %d, s.parent = %s\n", enclosing, s.parent.toChars());
!         s.dsymbolSemantic(sc2);
!         //printf("test4: enclosing = %d, s.parent = %s\n", enclosing, s.parent.toChars());
!         Module.runDeferredSemantic();
!     }
! 
!     ti.members.foreachDsymbol(&symbolDg);
! }
! 
! private void tryExpandMembers(TemplateInstance ti, Scope* sc2)
! {
!     __gshared int nest;
!     // extracted to a function to allow windows SEH to work without destructors in the same function
!     //printf("%d\n", nest);
!     if (++nest > global.recursionLimit)
!     {
!         global.gag = 0; // ensure error message gets printed
!         .error(ti.loc, "%s `%s` recursive expansion exceeded allowed nesting limit", ti.kind, ti.toPrettyChars);
!         fatal();
!     }
! 
!     ti.expandMembers(sc2);
! 
!     nest--;
! }
! 
! private void trySemantic3(TemplateInstance ti, Scope* sc2)
! {
!     // extracted to a function to allow windows SEH to work without destructors in the same function
!     __gshared int nest;
!     //printf("%d\n", nest);
!     if (++nest > global.recursionLimit)
!     {
!         global.gag = 0; // ensure error message gets printed
!         .error(ti.loc, "%s `%s` recursive expansion exceeded allowed nesting limit", ti.kind, ti.toPrettyChars);
!         fatal();
!     }
! 
!     semantic3(ti, sc2);
! 
!     --nest;
! }
! 
! void templateInstanceSemantic(TemplateInstance tempinst, Scope* sc, ArgumentList argumentList)
  {
!     //printf("[%s] TemplateInstance.dsymbolSemantic('%s', this=%p, gag = %d, sc = %p)\n", tempinst.loc.toChars(), tempinst.toChars(), tempinst, global.gag, sc);
!     version (none)
!     {
!         for (Dsymbol s = tempinst; s; s = s.parent)
!         {
!             printf("\t%s\n", s.toChars());
!         }
!         printf("Scope\n");
!         for (Scope* scx = sc; scx; scx = scx.enclosing)
!         {
!             printf("\t%s parent %s\n", scx._module ? scx._module.toChars() : "null", scx.parent ? scx.parent.toChars() : "null");
!         }
!     }
! 
!     static if (LOG)
!     {
!         printf("\n+TemplateInstance.dsymbolSemantic('%s', this=%p)\n", tempinst.toChars(), tempinst);
!     }
!     if (tempinst.inst) // if semantic() was already run
!     {
!         static if (LOG)
!         {
!             printf("-TemplateInstance.dsymbolSemantic('%s', this=%p) already run\n",
!                    tempinst.inst.toChars(), tempinst.inst);
!         }
!         return;
!     }
!     if (tempinst.semanticRun != PASS.initial)
!     {
!         static if (LOG)
!         {
!             printf("Recursive template expansion\n");
!         }
!         auto ungag = Ungag(global.gag);
!         if (!tempinst.gagged)
!             global.gag = 0;
!         .error(tempinst.loc, "%s `%s` recursive template expansion", tempinst.kind, tempinst.toPrettyChars);
!         if (tempinst.gagged)
!             tempinst.semanticRun = PASS.initial;
!         else
!             tempinst.inst = tempinst;
!         tempinst.errors = true;
!         return;
!     }
! 
!     // Get the enclosing template instance from the scope tinst
!     tempinst.tinst = sc.tinst;
! 
!     // Get the instantiating module from the scope minst
!     tempinst.minst = sc.minst;
!     // https://issues.dlang.org/show_bug.cgi?id=10920
!     // If the enclosing function is non-root symbol,
!     // this instance should be speculative.
!     if (!tempinst.tinst && sc.func && sc.func.inNonRoot())
!     {
!         tempinst.minst = null;
!     }
! 
!     tempinst.gagged = (global.gag > 0);
! 
!     tempinst.semanticRun = PASS.semantic;
! 
!     static if (LOG)
      {
!         printf("\tdo semantic\n");
      }
!     /* Find template declaration first,
!      * then run semantic on each argument (place results in tiargs[]),
!      * last find most specialized template from overload list/set.
!      */
!     if (!tempinst.findTempDecl(sc, null) || !tempinst.semanticTiargs(sc) || !tempinst.findBestMatch(sc, argumentList))
      {
!     Lerror:
!         if (tempinst.gagged)
          {
!             // https://issues.dlang.org/show_bug.cgi?id=13220
!             // Roll back status for later semantic re-running
!             tempinst.semanticRun = PASS.initial;
          }
          else
-             tempinst.inst = tempinst;
-         tempinst.errors = true;
-         return;
-     }
-     TemplateDeclaration tempdecl = tempinst.tempdecl.isTemplateDeclaration();
-     assert(tempdecl);
- 
-     if (global.params.v.templates)
-         TemplateStats.incInstance(tempdecl, tempinst, global.params.v.templatesListInstances);
- 
-     tempdecl.checkDeprecated(tempinst.loc, sc);
- 
-     // If tempdecl is a mixin, disallow it
-     if (tempdecl.ismixin)
-     {
-         .error(tempinst.loc, "%s `%s` mixin templates are not regular templates", tempinst.kind, tempinst.toPrettyChars);
-         goto Lerror;
-     }
- 
-     tempinst.hasNestedArgs(tempinst.tiargs, tempdecl.isstatic);
-     if (tempinst.errors)
-         goto Lerror;
- 
-     // Copy the tempdecl namespace (not the scope one)
-     tempinst.cppnamespace = tempdecl.cppnamespace;
-     if (tempinst.cppnamespace)
-         tempinst.cppnamespace.dsymbolSemantic(sc);
- 
-     /* Greatly simplified semantic processing for AliasSeq templates
-      */
-     if (tempdecl.isTrivialAliasSeq)
-     {
-         tempinst.inst = tempinst;
-         return aliasSeqInstanceSemantic(tempinst, sc, tempdecl);
-     }
- 
-     /* Greatly simplified semantic processing for Alias templates
-      */
-     else if (tempdecl.isTrivialAlias)
-     {
-         tempinst.inst = tempinst;
-         return aliasInstanceSemantic(tempinst, sc, tempdecl);
-     }
- 
- 
-     /* See if there is an existing TemplateInstantiation that already
-      * implements the typeargs. If so, just refer to that one instead.
-      */
-     tempinst.inst = tempdecl.findExistingInstance(tempinst, argumentList);
-     TemplateInstance errinst = null;
-     if (!tempinst.inst)
-     {
-         // So, we need to implement 'this' instance.
-     }
-     else if (tempinst.inst.gagged && !tempinst.gagged && tempinst.inst.errors)
-     {
-         // If the first instantiation had failed, re-run semantic,
-         // so that error messages are shown.
-         errinst = tempinst.inst;
-     }
-     else
-     {
-         // It's a match
-         tempinst.parent = tempinst.inst.parent;
-         tempinst.errors = tempinst.inst.errors;
- 
-         // If both this and the previous instantiation were gagged,
-         // use the number of errors that happened last time.
-         global.errors += tempinst.errors;
-         global.gaggedErrors += tempinst.errors;
- 
-         // If the first instantiation was gagged, but this is not:
-         if (tempinst.inst.gagged)
-         {
-             // It had succeeded, mark it is a non-gagged instantiation,
-             // and reuse it.
-             tempinst.inst.gagged = tempinst.gagged;
-         }
- 
-         tempinst.tnext = tempinst.inst.tnext;
-         tempinst.inst.tnext = tempinst;
- 
-         /* A module can have explicit template instance and its alias
-          * in module scope (e,g, `alias Base64 = Base64Impl!('+', '/');`).
-          * If the first instantiation 'inst' had happened in non-root module,
-          * compiler can assume that its instantiated code would be included
-          * in the separately compiled obj/lib file (e.g. phobos.lib).
-          *
-          * However, if 'this' second instantiation happened in root module,
-          * compiler might need to invoke its codegen
-          * (https://issues.dlang.org/show_bug.cgi?id=2500 & https://issues.dlang.org/show_bug.cgi?id=2644).
-          * But whole import graph is not determined until all semantic pass finished,
-          * so 'inst' should conservatively finish the semantic3 pass for the codegen.
-          */
-         if (tempinst.minst && tempinst.minst.isRoot() && !(tempinst.inst.minst && tempinst.inst.minst.isRoot()))
-         {
-             /* Swap the position of 'inst' and 'this' in the instantiation graph.
-              * Then, the primary instance `inst` will be changed to a root instance,
-              * along with all members of `inst` having their scopes updated.
-              *
-              * Before:
-              *  non-root -> A!() -> B!()[inst] -> C!() { members[non-root] }
-              *                      |
-              *  root     -> D!() -> B!()[this]
-              *
-              * After:
-              *  non-root -> A!() -> B!()[this]
-              *                      |
-              *  root     -> D!() -> B!()[inst] -> C!() { members[root] }
-              */
-             Module mi = tempinst.minst;
-             TemplateInstance ti = tempinst.tinst;
-             tempinst.minst = tempinst.inst.minst;
-             tempinst.tinst = tempinst.inst.tinst;
-             tempinst.inst.minst = mi;
-             tempinst.inst.tinst = ti;
- 
-             /* https://issues.dlang.org/show_bug.cgi?id=21299
-                `minst` has been updated on the primary instance `inst` so it is
-                now coming from a root module, however all Dsymbol `inst.members`
-                of the instance still have their `_scope.minst` pointing at the
-                original non-root module. We must now propagate `minst` to all
-                members so that forward referenced dependencies that get
-                instantiated will also be appended to the root module, otherwise
-                there will be undefined references at link-time.  */
-             extern (C++) final class InstMemberWalker : Visitor
-             {
-                 alias visit = Visitor.visit;
-                 TemplateInstance inst;
- 
-                 extern (D) this(TemplateInstance inst) scope @safe
-                 {
-                     this.inst = inst;
-                 }
- 
-                 override void visit(Dsymbol d)
-                 {
-                     if (d._scope)
-                         d._scope.minst = inst.minst;
-                 }
- 
-                 override void visit(ScopeDsymbol sds)
-                 {
-                     sds.members.foreachDsymbol( s => s.accept(this) );
-                     visit(cast(Dsymbol)sds);
-                 }
- 
-                 override void visit(StructDeclaration sd)
-                 {
-                     // need to visit auto-generated methods as well
-                     if (sd.xeq) visit(sd.xeq);
-                     if (sd.xcmp) visit(sd.xcmp);
-                     if (sd.xhash) visit(sd.xhash);
-                     visit(cast(ScopeDsymbol)sd);
-                 }
- 
-                 override void visit(AttribDeclaration ad)
-                 {
-                     ad.include(null).foreachDsymbol( s => s.accept(this) );
-                     visit(cast(Dsymbol)ad);
-                 }
- 
-                 override void visit(ConditionalDeclaration cd)
-                 {
-                     if (cd.condition.inc)
-                         visit(cast(AttribDeclaration)cd);
-                     else
-                         visit(cast(Dsymbol)cd);
-                 }
-             }
-             scope v = new InstMemberWalker(tempinst.inst);
-             tempinst.inst.accept(v);
- 
-             if (!global.params.allInst &&
-                 tempinst.minst) // if inst was not speculative...
-             {
-                 assert(!tempinst.minst.isRoot()); // ... it was previously appended to a non-root module
-                 // Append again to the root module members[], so that the instance will
-                 // get codegen chances (depending on `tempinst.inst.needsCodegen()`).
-                 tempinst.inst.appendToModuleMember();
-             }
- 
-             assert(tempinst.inst.memberOf && tempinst.inst.memberOf.isRoot(), "no codegen chances");
-         }
- 
-         // modules imported by an existing instance should be added to the module
-         // that instantiates the instance.
-         if (tempinst.minst)
-             foreach(imp; tempinst.inst.importedModules)
-                 if (!tempinst.minst.aimports.contains(imp))
-                     tempinst.minst.aimports.push(imp);
- 
-         static if (LOG)
-         {
-             printf("\tit's a match with instance %p, %d\n", tempinst.inst, tempinst.inst.semanticRun);
-         }
-         return;
-     }
-     static if (LOG)
-     {
-         printf("\timplement template instance %s '%s'\n", tempdecl.parent.toChars(), tempinst.toChars());
-         printf("\ttempdecl %s\n", tempdecl.toChars());
-     }
-     const errorsave = global.errors;
- 
-     tempinst.inst = tempinst;
-     tempinst.parent = tempinst.enclosing ? tempinst.enclosing : tempdecl.parent;
-     //printf("parent = '%s'\n", parent.kind());
- 
-     if (global.params.v.templates)
-         TemplateStats.incUnique(tempdecl, tempinst);
- 
-     TemplateInstance tempdecl_instance_idx = tempdecl.addInstance(tempinst);
- 
-     //getIdent();
- 
-     // Store the place we added it to in target_symbol_list(_idx) so we can
-     // remove it later if we encounter an error.
-     Dsymbols* target_symbol_list = tempinst.appendToModuleMember();
-     size_t target_symbol_list_idx = target_symbol_list ? target_symbol_list.length - 1 : 0;
- 
-     // Copy the syntax trees from the TemplateDeclaration
-     tempinst.members = Dsymbol.arraySyntaxCopy(tempdecl.members);
- 
-     // resolve TemplateThisParameter
-     for (size_t i = 0; i < tempdecl.parameters.length; i++)
-     {
-         if ((*tempdecl.parameters)[i].isTemplateThisParameter() is null)
-             continue;
-         Type t = isType((*tempinst.tiargs)[i]);
-         assert(t);
-         if (STC stc = ModToStc(t.mod))
-         {
-             //printf("t = %s, stc = x%llx\n", t.toChars(), stc);
-             auto s = new Dsymbols(new StorageClassDeclaration(stc, tempinst.members));
-             tempinst.members = s;
-         }
-         break;
-     }
- 
-     // Create our own scope for the template parameters
-     Scope* _scope = tempdecl._scope;
-     if (tempdecl.semanticRun == PASS.initial)
-     {
-         .error(tempinst.loc, "%s `%s` template instantiation `%s` forward references template declaration `%s`",
-            tempinst.kind, tempinst.toPrettyChars, tempinst.toChars(), tempdecl.toChars());
-         return;
-     }
- 
-     static if (LOG)
-     {
-         printf("\tcreate scope for template parameters '%s'\n", tempinst.toChars());
-     }
-     tempinst.argsym = new ScopeDsymbol();
-     tempinst.argsym.parent = _scope.parent;
-     _scope = _scope.push(tempinst.argsym);
-     _scope.tinst = tempinst;
-     _scope.minst = tempinst.minst;
-     //scope.stc = STC.none;
- 
-     // Declare each template parameter as an alias for the argument type
-     Scope* paramscope = _scope.push();
-     paramscope.stc = STC.none;
-     paramscope.visibility = Visibility(Visibility.Kind.public_); // https://issues.dlang.org/show_bug.cgi?id=14169
-                                               // template parameters should be public
-     tempinst.declareParameters(paramscope);
-     paramscope.pop();
- 
-     // Add members of template instance to template instance symbol table
-     //parent = scope.scopesym;
-     tempinst.symtab = new DsymbolTable();
- 
-     tempinst.members.foreachDsymbol( (s)
-     {
-         static if (LOG)
          {
!             printf("\t adding member '%s' %p kind %s to '%s'\n", s.toChars(), s, s.kind(), tempinst.toChars());
!         }
!         s.addMember(_scope, tempinst);
!     });
! 
!     static if (LOG)
!     {
!         printf("adding members done\n");
!     }
! 
!     /* See if there is only one member of template instance, and that
!      * member has the same name as the template instance.
!      * If so, this template instance becomes an alias for that member.
!      */
!     //printf("members.length = %d\n", tempinst.members.length);
!     if (tempinst.members.length)
!     {
!         Dsymbol s;
!         if (oneMembers(tempinst.members, s, tempdecl.ident) && s)
!         {
!             //printf("tempdecl.ident = %s, s = `%s %s`\n", tempdecl.ident.toChars(), s.kind(), s.toPrettyChars());
!             //printf("setting aliasdecl\n");
!             tempinst.aliasdecl = s;
!         }
!     }
! 
!     /* If function template declaration
!      */
!     if (argumentList.length > 0 && tempinst.aliasdecl)
!     {
!         if (auto fd = tempinst.aliasdecl.isFuncDeclaration())
!         {
!             /* Transmit fargs to type so that TypeFunction.dsymbolSemantic() can
!              * resolve any "auto ref" storage classes.
!              */
!             if (fd.type)
!                 if (auto tf = fd.type.isTypeFunction())
!                     tf.inferenceArguments = argumentList;
!         }
!     }
! 
!     // Do semantic() analysis on template instance members
!     static if (LOG)
!     {
!         printf("\tdo semantic() on template instance members '%s'\n", tempinst.toChars());
!     }
!     Scope* sc2;
!     sc2 = _scope.push(tempinst);
!     //printf("enclosing = %d, sc.parent = %s\n", tempinst.enclosing, sc.parent.toChars());
!     sc2.parent = tempinst;
!     sc2.tinst = tempinst;
!     sc2.minst = tempinst.minst;
!     sc2.stc &= ~STC.deprecated_;
!     tempinst.tryExpandMembers(sc2);
! 
!     tempinst.semanticRun = PASS.semanticdone;
! 
!     /* ConditionalDeclaration may introduce eponymous declaration,
!      * so we should find it once again after semantic.
!      */
!     if (tempinst.members.length)
!     {
!         Dsymbol s;
!         if (oneMembers(tempinst.members, s, tempdecl.ident) && s)
!         {
!             if (!tempinst.aliasdecl || tempinst.aliasdecl != s)
!             {
!                 //printf("tempdecl.ident = %s, s = `%s %s`\n", tempdecl.ident.toChars(), s.kind(), s.toPrettyChars());
!                 //printf("setting aliasdecl 2\n");
!                 tempinst.aliasdecl = s;
!             }
!         }
!     }
! 
!     if (global.errors != errorsave)
!         goto Laftersemantic;
! 
!     /* If any of the instantiation members didn't get semantic() run
!      * on them due to forward references, we cannot run semantic2()
!      * or semantic3() yet.
!      */
!     {
!         bool found_deferred_ad = false;
!         for (size_t i = 0; i < Module.deferred.length; i++)
!         {
!             Dsymbol sd = Module.deferred[i];
!             AggregateDeclaration ad = sd.isAggregateDeclaration();
!             if (ad && ad.parent && ad.parent.isTemplateInstance())
              {
!                 //printf("deferred template aggregate: %s %s\n",
!                 //        sd.parent.toChars(), sd.toChars());
!                 found_deferred_ad = true;
!                 if (ad.parent == tempinst)
!                 {
!                     ad.deferred = tempinst;
!                     break;
!                 }
              }
          }
!         if (found_deferred_ad || Module.deferred.length)
!             goto Laftersemantic;
      }
  
!     /* The problem is when to parse the initializer for a variable.
!      * Perhaps VarDeclaration.dsymbolSemantic() should do it like it does
!      * for initializers inside a function.
       */
!     //if (sc.parent.isFuncDeclaration())
!     {
!         /* https://issues.dlang.org/show_bug.cgi?id=782
!          * this has problems if the classes this depends on
!          * are forward referenced. Find a way to defer semantic()
!          * on this template.
!          */
!         tempinst.semantic2(sc2);
!     }
!     if (global.errors != errorsave)
!         goto Laftersemantic;
! 
!     if ((sc.func || sc.fullinst) && !tempinst.tinst)
!     {
!         /* If a template is instantiated inside function, the whole instantiation
!          * should be done at that position. But, immediate running semantic3 of
!          * dependent templates may cause unresolved forward reference.
!          * https://issues.dlang.org/show_bug.cgi?id=9050
!          * To avoid the issue, don't run semantic3 until semantic and semantic2 done.
!          */
!         TemplateInstances deferred;
!         tempinst.deferred = &deferred;
! 
!         //printf("Run semantic3 on %s\n", toChars());
! 
!         /* https://issues.dlang.org/show_bug.cgi?id=23965
!          * DRuntime hooks are not deprecated, but may be used for deprecated
!          * types. Deprecations are disabled while analysing hooks to avoid
!          * spurious error messages.
!          */
!         auto saveUseDeprecated = global.params.useDeprecated;
!         if (sc.isDeprecated() && isDRuntimeHook(tempinst.name))
!             global.params.useDeprecated = DiagnosticReporting.off;
! 
!         tempinst.trySemantic3(sc2);
! 
!         global.params.useDeprecated = saveUseDeprecated;
! 
!         for (size_t i = 0; i < deferred.length; i++)
!         {
!             //printf("+ run deferred semantic3 on %s\n", deferred[i].toChars());
!             deferred[i].semantic3(null);
!         }
! 
!         tempinst.deferred = null;
!     }
!     else if (tempinst.tinst)
      {
!         bool doSemantic3 = false;
!         FuncDeclaration fd;
!         if (tempinst.aliasdecl)
!             fd = tempinst.aliasdecl.toAlias2().isFuncDeclaration();
! 
!         if (fd)
!         {
!             /* Template function instantiation should run semantic3 immediately
!              * for attribute inference.
!              */
!             scope fld = fd.isFuncLiteralDeclaration();
!             if (fld && fld.tok == TOK.reserved)
!                 doSemantic3 = true;
!             else if (sc.func)
!                 doSemantic3 = true;
!         }
!         else if (sc.func)
!         {
!             /* A lambda function in template arguments might capture the
!              * instantiated scope context. For the correct context inference,
!              * all instantiated functions should run the semantic3 immediately.
!              * See also compilable/test14973.d
!              */
!             foreach (oarg; tempinst.tdtypes)
!             {
!                 auto s = getDsymbol(oarg);
!                 if (!s)
!                     continue;
! 
!                 if (auto td = s.isTemplateDeclaration())
!                 {
!                     if (!td.literal)
!                         continue;
!                     assert(td.members && td.members.length == 1);
!                     s = (*td.members)[0];
!                 }
!                 if (auto fld = s.isFuncLiteralDeclaration())
!                 {
!                     if (fld.tok == TOK.reserved)
!                     {
!                         doSemantic3 = true;
!                         break;
!                     }
!                 }
!             }
!             //printf("[%s] %s doSemantic3 = %d\n", tempinst.tinst.loc.toChars(), tempinst.tinst.toChars(), doSemantic3);
!         }
!         if (doSemantic3)
!             tempinst.trySemantic3(sc2);
! 
!         TemplateInstance ti = tempinst.tinst;
!         int nest = 0;
!         while (ti && !ti.deferred && ti.tinst)
!         {
!             ti = ti.tinst;
!             if (++nest > global.recursionLimit)
!             {
!                 global.gag = 0; // ensure error message gets printed
!                 .error(tempinst.loc, "%s `%s` recursive expansion", tempinst.kind, tempinst.toPrettyChars);
!                 fatal();
!             }
!         }
!         if (ti && ti.deferred)
          {
!             //printf("deferred semantic3 of %p %s, ti = %s, ti.deferred = %p\n", this, toChars(), ti.toChars());
!             for (size_t i = 0;; i++)
              {
!                 if (i == ti.deferred.length)
!                 {
!                     ti.deferred.push(tempinst);
!                     break;
!                 }
!                 if ((*ti.deferred)[i] == tempinst)
!                     break;
              }
          }
      }
  
!     if (tempinst.aliasdecl)
      {
!         /* https://issues.dlang.org/show_bug.cgi?id=13816
!          * AliasDeclaration tries to resolve forward reference
!          * twice (See inuse check in AliasDeclaration.toAlias()). It's
!          * necessary to resolve mutual references of instantiated symbols, but
!          * it will left a true recursive alias in tuple declaration - an
!          * AliasDeclaration A refers TupleDeclaration B, and B contains A
!          * in its elements.  To correctly make it an error, we strictly need to
!          * resolve the alias of eponymous member.
!          */
!         tempinst.aliasdecl = tempinst.aliasdecl.toAlias2();
! 
!         // stop AliasAssign tuple building
!         if (auto td = tempinst.aliasdecl.isTupleDeclaration())
!             td.building = false;
      }
  
! Laftersemantic:
!     sc2.pop();
!     _scope.pop();
  
!     // Give additional context info if error occurred during instantiation
!     if (global.errors != errorsave)
      {
!         if (!tempinst.errors)
!         {
!             if (!tempdecl.literal)
!                 .error(tempinst.loc, "%s `%s` error instantiating", tempinst.kind, tempinst.toPrettyChars);
!             if (tempinst.tinst)
!                 tempinst.tinst.printInstantiationTrace();
!         }
!         tempinst.errors = true;
!         if (tempinst.gagged)
          {
!             // Errors are gagged, so remove the template instance from the
!             // instance/symbol lists we added it to and reset our state to
!             // finish clean and so we can try to instantiate it again later
!             // (see https://issues.dlang.org/show_bug.cgi?id=4302 and https://issues.dlang.org/show_bug.cgi?id=6602).
!             tempdecl.removeInstance(tempdecl_instance_idx);
!             if (target_symbol_list)
!             {
!                 // Because we added 'this' in the last position above, we
!                 // should be able to remove it without messing other indices up.
!                 assert((*target_symbol_list)[target_symbol_list_idx] == tempinst);
!                 target_symbol_list.remove(target_symbol_list_idx);
!                 tempinst.memberOf = null;                    // no longer a member
!             }
!             tempinst.semanticRun = PASS.initial;
!             tempinst.inst = null;
!             tempinst.symtab = null;
          }
      }
!     else if (errinst)
!     {
!         /* https://issues.dlang.org/show_bug.cgi?id=14541
!          * If the previous gagged instance had failed by
!          * circular references, currrent "error reproduction instantiation"
!          * might succeed, because of the difference of instantiated context.
!          * On such case, the cached error instance needs to be overridden by the
!          * succeeded instance.
!          */
!         //printf("replaceInstance()\n");
!         assert(errinst.errors);
!         auto ti1 = TemplateInstanceBox(errinst);
!         tempdecl.instances.remove(ti1);
! 
!         auto ti2 = TemplateInstanceBox(tempinst);
!         tempdecl.instances[ti2] = tempinst;
!     }
! 
!     static if (LOG)
!     {
!         printf("-TemplateInstance.dsymbolSemantic('%s', this=%p)\n", tempinst.toChars(), tempinst);
!     }
! }
! 
! /******************************************************
!  * Do template instance semantic for isAliasSeq templates.
!  * This is a greatly simplified version of templateInstanceSemantic().
!  */
! private
! void aliasSeqInstanceSemantic(TemplateInstance tempinst, Scope* sc, TemplateDeclaration tempdecl)
! {
!     //printf("[%s] aliasSeqInstance.dsymbolSemantic('%s')\n", tempinst.loc.toChars(), tempinst.toChars());
!     Scope* paramscope = sc.push();
!     paramscope.stc = STC.none;
!     paramscope.visibility = Visibility(Visibility.Kind.public_);
! 
!     TemplateTupleParameter ttp = (*tempdecl.parameters)[0].isTemplateTupleParameter();
!     Tuple va = tempinst.tdtypes[0].isTuple();
!     Declaration d = new TupleDeclaration(tempinst.loc, ttp.ident, &va.objects);
!     d.storage_class |= STC.templateparameter;
!     d.dsymbolSemantic(sc);
! 
!     paramscope.pop();
! 
!     tempinst.aliasdecl = d;
! 
!     tempinst.semanticRun = PASS.semanticdone;
  }
  
! /******************************************************
!  * Do template instance semantic for isAlias templates.
!  * This is a greatly simplified version of templateInstanceSemantic().
   */
! private
! void aliasInstanceSemantic(TemplateInstance tempinst, Scope* sc, TemplateDeclaration tempdecl)
  {
!     //printf("[%s] aliasInstance.dsymbolSemantic('%s')\n", tempinst.loc.toChars(), tempinst.toChars());
!     Scope* paramscope = sc.push();
!     paramscope.stc = STC.none;
!     paramscope.visibility = Visibility(Visibility.Kind.public_);
! 
!     TemplateTypeParameter ttp = (*tempdecl.parameters)[0].isTemplateTypeParameter();
!     Type ta = tempinst.tdtypes[0].isType();
!     auto ad = tempdecl.onemember.isAliasDeclaration();
! 
!     // Note: qualifiers can be in both 'ad.type.mod' and 'ad.storage_class'
!     Declaration d = new AliasDeclaration(tempinst.loc, ttp.ident, ta.addMod(ad.type.mod));
!     d.storage_class |= STC.templateparameter | ad.storage_class;
!     d.dsymbolSemantic(sc);
! 
!     paramscope.pop();
! 
!     tempinst.aliasdecl = d;
! 
!     tempinst.semanticRun = PASS.semanticdone;
  }
  
  // function used to perform semantic on AliasDeclaration
--- 6321,6421 ----
      });
  }
  
! private OverloadSet mergeOverloadSet(ScopeDsymbol sds, Identifier ident, OverloadSet os, Dsymbol s)
  {
!     if (!os)
      {
!         os = new OverloadSet(ident);
!         os.parent = sds;
      }
!     if (OverloadSet os2 = s.isOverloadSet())
      {
!         // Merge the cross-module overload set 'os2' into 'os'
!         if (os.a.length == 0)
          {
!             os.a.setDim(os2.a.length);
!             memcpy(os.a.tdata(), os2.a.tdata(), (os.a[0]).sizeof * os2.a.length);
          }
          else
          {
!             for (size_t i = 0; i < os2.a.length; i++)
              {
!                 os = mergeOverloadSet(sds, ident, os, os2.a[i]);
              }
          }
!         return os;
      }
  
!     assert(s.isOverloadable());
!     /* Don't add to os[] if s is alias of previous sym
       */
!     for (size_t j = 0; j < os.a.length; j++)
      {
!         Dsymbol s2 = os.a[j];
!         if (s.toAlias() == s2.toAlias())
          {
!             if (s2.isDeprecated() || (s2.visible() < s.visible() && s.visible().kind != Visibility.Kind.none))
              {
!                 os.a[j] = s;
              }
+             return os;
          }
      }
+     os.push(s);
+     return os;
+ }
  
! /***
!  * Returns true if any of the symbols `p1` or `p2` resides in the enclosing
!  * instantiation scope of `this`.
!  */
! bool followInstantiationContext(Dsymbol d,Dsymbol p1, Dsymbol p2 = null)
! {
!     static bool has2This(Dsymbol s)
      {
!         if (auto f = s.isFuncDeclaration())
!             return f.hasDualContext;
!         if (auto ad = s.isAggregateDeclaration())
!             return ad.vthis2 !is null;
!         return false;
      }
  
!     if (!has2This(d))
!         return false;
  
!     assert(p1);
!     auto outer = d.toParent();
!     while (outer)
      {
!         auto ti = outer.isTemplateInstance();
!         if (!ti)
!             return false;
!         foreach (oarg; *ti.tiargs)
          {
!             auto sa = getDsymbol(oarg);
!             if (!sa)
!                 continue;
!             sa = sa.toAlias().toParent2();
!             if (!sa)
!                 continue;
!             if (sa == p1)
!                 return true;
!             if (p2 && sa == p2)
!                 return true;
          }
+         outer = ti.tempdecl.toParent();
      }
!     return false;
  }
  
! /**
!  * Returns the declaration scope scope of `this` unless any of the symbols
!  * `p1` or `p2` resides in its enclosing instantiation scope then the
!  * latter is returned.
   */
! Dsymbol toParentP(Dsymbol d, Dsymbol p1, Dsymbol p2 = null)
  {
!     return followInstantiationContext(d, p1, p2) ? d.toParent2() : d.toParentLocal();
  }
  
  // function used to perform semantic on AliasDeclaration
*************** void aliasSemantic(AliasDeclaration ds,
*** 6178,6373 ****
      normalRet();
  }
  
- /**********************************************
-  * Find template declaration corresponding to template instance.
-  *
-  * Returns:
-  *      false if finding fails.
-  * Note:
-  *      This function is reentrant against error occurrence. If returns false,
-  *      any members of this object won't be modified, and repetition call will
-  *      reproduce same error.
-  */
- bool findTempDecl(TemplateInstance ti, Scope* sc, WithScopeSymbol* pwithsym)
- {
-     if (pwithsym)
-         *pwithsym = null;
- 
-     if (ti.havetempdecl)
-         return true;
- 
-     //printf("TemplateInstance.findTempDecl() %s\n", toChars());
-     if (!ti.tempdecl)
-     {
-         /* Given:
-          *    foo!( ... )
-          * figure out which TemplateDeclaration foo refers to.
-          */
-         Identifier id = ti.name;
-         Dsymbol scopesym;
-         Dsymbol s = sc.search(ti.loc, id, scopesym);
-         if (!s)
-         {
-             s = sc.search_correct(id);
-             if (s)
-                 .error(ti.loc, "%s `%s` template `%s` is not defined, did you mean %s?", ti.kind, ti.toPrettyChars(), id.toChars(), s.toChars());
-             else
-                 .error(ti.loc, "%s `%s` template `%s` is not defined", ti.kind, ti.toPrettyChars(), id.toChars());
-             return false;
-         }
-         static if (LOG)
-         {
-             printf("It's an instance of '%s' kind '%s'\n", s.toChars(), s.kind());
-             if (s.parent)
-                 printf("s.parent = '%s'\n", s.parent.toChars());
-         }
-         if (pwithsym)
-             *pwithsym = scopesym.isWithScopeSymbol();
- 
-         /* We might have found an alias within a template when
-          * we really want the template.
-          */
-         TemplateInstance ti2;
-         if (s.parent && (ti2 = s.parent.isTemplateInstance()) !is null)
-         {
-             if (ti2.tempdecl && ti2.tempdecl.ident == id)
-             {
-                 /* This is so that one can refer to the enclosing
-                  * template, even if it has the same name as a member
-                  * of the template, if it has a !(arguments)
-                  */
-                 TemplateDeclaration td = ti2.tempdecl.isTemplateDeclaration();
-                 assert(td);
-                 if (td.overroot) // if not start of overloaded list of TemplateDeclaration's
-                     td = td.overroot; // then get the start
-                 s = td;
-             }
-         }
- 
-         // The template might originate from a selective import which implies that
-         // s is a lowered AliasDeclaration of the actual TemplateDeclaration.
-         // This is the last place where we see the deprecated alias because it is
-         // stripped below, so check if the selective import was deprecated.
-         // See https://issues.dlang.org/show_bug.cgi?id=20840.
-         if (s.isAliasDeclaration())
-             s.checkDeprecated(ti.loc, sc);
- 
-         if (!ti.updateTempDecl(sc, s))
-         {
-             return false;
-         }
-     }
-     assert(ti.tempdecl);
- 
-     // Look for forward references
-     auto tovers = ti.tempdecl.isOverloadSet();
-     foreach (size_t oi; 0 .. tovers ? tovers.a.length : 1)
-     {
-         Dsymbol dstart = tovers ? tovers.a[oi] : ti.tempdecl;
-         int r = overloadApply(dstart, (Dsymbol s)
-         {
-             auto td = s.isTemplateDeclaration();
-             if (!td)
-                 return 0;
- 
-             if (td.semanticRun == PASS.initial)
-             {
-                 if (td._scope)
-                 {
-                     // Try to fix forward reference. Ungag errors while doing so.
-                     auto ungag = td.ungagSpeculative();
-                     td.dsymbolSemantic(td._scope);
-                 }
-                 if (td.semanticRun == PASS.initial)
-                 {
-                     .error(ti.loc, "%s `%s` `%s` forward references template declaration `%s`",
-                            ti.kind, ti.toPrettyChars(), ti.toChars(), td.toChars());
-                     return 1;
-                 }
-             }
-             return 0;
-         });
-         if (r)
-             return false;
-     }
-     return true;
- }
- 
- private bool findMixinTempDecl(TemplateMixin tm, Scope* sc)
- {
-     // Follow qualifications to find the TemplateDeclaration
-     if (!tm.tempdecl)
-     {
-         Expression e;
-         Type t;
-         Dsymbol s;
-         tm.tqual.resolve(tm.loc, sc, e, t, s);
-         if (!s)
-         {
-             .error(tm.loc, "%s `%s` is not defined", tm.kind, tm.toPrettyChars);
-             return false;
-         }
-         s = s.toAlias();
-         tm.tempdecl = s.isTemplateDeclaration();
-         OverloadSet os = s.isOverloadSet();
- 
-         /* If an OverloadSet, look for a unique member that is a template declaration
-          */
-         if (os)
-         {
-             Dsymbol ds = null;
-             foreach (i, sym; os.a)
-             {
-                 Dsymbol s2 = sym.isTemplateDeclaration();
-                 if (s2)
-                 {
-                     if (ds)
-                     {
-                         tm.tempdecl = os;
-                         break;
-                     }
-                     ds = s2;
-                 }
-             }
-         }
-         if (!tm.tempdecl)
-         {
-             .error(tm.loc, "%s `%s` - `%s` is a %s, not a template", tm.kind,
-                    tm.toPrettyChars, s.toChars(), s.kind());
-             return false;
-         }
-     }
-     assert(tm.tempdecl);
- 
-     // Look for forward references
-     auto tovers = tm.tempdecl.isOverloadSet();
-     foreach (size_t oi; 0 .. tovers ? tovers.a.length : 1)
-     {
-         Dsymbol dstart = tovers ? tovers.a[oi] : tm.tempdecl;
-         int r = overloadApply(dstart, (Dsymbol s)
-         {
-             auto td = s.isTemplateDeclaration();
-             if (!td)
-                 return 0;
- 
-             if (td.semanticRun == PASS.initial)
-             {
-                 if (td._scope)
-                     td.dsymbolSemantic(td._scope);
-                 else
-                 {
-                     tm.semanticRun = PASS.initial;
-                     return 1;
-                 }
-             }
-             return 0;
-         });
-         if (r)
-             return false;
-     }
-     return true;
- }
- 
  /********************
   * Perform semantic on AliasAssignment.
   * Has a lot of similarities to aliasSemantic(). Perhaps they should share code.
--- 6609,6614 ----
*************** private void aliasAssignSemantic(AliasAs
*** 6483,6489 ****
      // Try AliasSeq optimization
      if (auto ti = ds.type.isTypeInstance())
      {
!         if (!ti.tempinst.findTempDecl(sc, null))
              return errorRet();
          if (auto tempinst = isAliasSeq(sc, ti))
          {
--- 6724,6731 ----
      // Try AliasSeq optimization
      if (auto ti = ds.type.isTypeInstance())
      {
!         import dmd.templatesem : findTempDecl;
!         if (!findTempDecl(ti.tempinst, sc, null))
              return errorRet();
          if (auto tempinst = isAliasSeq(sc, ti))
          {
*************** private TemplateInstance isAliasSeq(Scop
*** 6731,6739 ****
          int r = overloadApply(dstart, (Dsymbol s)
          {
              auto td = s.isTemplateDeclaration();
!             if (!td || !td.isTrivialAliasSeq)
!                 return 1;
!             return 0;
          });
          if (r)
              return null;
--- 6973,6979 ----
          int r = overloadApply(dstart, (Dsymbol s)
          {
              auto td = s.isTemplateDeclaration();
!             return (td && td.isTrivialAliasSeq) ? 0 : 1;
          });
          if (r)
              return null;
*************** extern(C++) class ImportAllVisitor : Vis
*** 7883,7889 ****
           * gets imported, it is unaffected by context.
           * Ignore prevsc.
           */
!         Scope* sc = Scope.createGlobal(m, global.errorSink); // create root scope
  
          if (m.md && m.md.msg)
              m.md.msg = semanticString(sc, m.md.msg, "deprecation message");
--- 8123,8129 ----
           * gets imported, it is unaffected by context.
           * Ignore prevsc.
           */
!         Scope* sc = scopeCreateGlobal(m, global.errorSink); // create root scope
  
          if (m.md && m.md.msg)
              m.md.msg = semanticString(sc, m.md.msg, "deprecation message");
*************** extern(C++) class ImportAllVisitor : Vis
*** 7928,7934 ****
              s.importAll(sc);
          }
          sc = sc.pop();
!         sc.pop(); // 2 pops because Scope.createGlobal() created 2
      }
  
      override void visit(AttribDeclaration atb)
--- 8168,8174 ----
              s.importAll(sc);
          }
          sc = sc.pop();
!         sc.pop(); // 2 pops because scopeCreateGlobal() created 2
      }
  
      override void visit(AttribDeclaration atb)
*************** void setFieldOffset(Dsymbol d, Aggregate
*** 8055,8060 ****
--- 8295,8302 ----
  
  private extern(C++) class SetFieldOffsetVisitor : Visitor
  {
+     import dmd.typesem: size;
+ 
      alias visit = Visitor.visit;
  
      AggregateDeclaration ad;
*************** bool isGNUABITag(Expression e)
*** 8801,8806 ****
--- 9043,9050 ----
   */
  private Expression callScopeDtor(VarDeclaration vd, Scope* sc)
  {
+     import dmd.typesem: size;
+ 
      //printf("VarDeclaration::callScopeDtor() %s\n", toChars());
  
      // Destruction of STC.field's is handled by buildDtor()
*************** bool isAbstract(ClassDeclaration cd)
*** 9352,9358 ****
          static int virtualSemantic(Dsymbol s, void*)
          {
              auto fd = s.isFuncDeclaration();
!             if (fd && !(fd.storage_class & STC.static_) && !fd.isUnitTestDeclaration())
                  fd.dsymbolSemantic(null);
              return 0;
          }
--- 9596,9602 ----
          static int virtualSemantic(Dsymbol s, void*)
          {
              auto fd = s.isFuncDeclaration();
!             if (fd && !(fd.storage_class & STC.static_) && !fd.isUnitTestDeclaration() && !fd.isCtorDeclaration())
                  fd.dsymbolSemantic(null);
              return 0;
          }
*************** void finalizeSize(AggregateDeclaration a
*** 9394,9399 ****
--- 9638,9645 ----
   */
  bool _isZeroInit(Expression exp)
  {
+     import dmd.typesem: size;
+ 
      switch (exp.op)
      {
          case EXP.int64:
*************** private bool checkOverlappedFields(Aggre
*** 9559,9564 ****
--- 9805,9812 ----
  
  private extern(C++) class FinalizeSizeVisitor : Visitor
  {
+     import dmd.typesem: size;
+ 
      alias visit = Visitor.visit;
  
      override void visit(ClassDeclaration outerCd)
*************** extern (D) bool oneMembers(Dsymbols* mem
*** 9930,9936 ****
      for (size_t i = 0; i < members.length; i++)
      {
          Dsymbol sx = (*members)[i];
!         bool x = sx.oneMember(ps, ident); //MYTODO: this temporarily creates a new dependency to dsymbolsem, will need to extract oneMembers() later
          //printf("\t[%d] kind %s = %d, s = %p\n", i, sx.kind(), x, *ps);
          if (!x)
          {
--- 10178,10184 ----
      for (size_t i = 0; i < members.length; i++)
      {
          Dsymbol sx = (*members)[i];
!         bool x = sx.oneMember(ps, ident);
          //printf("\t[%d] kind %s = %d, s = %p\n", i, sx.kind(), x, *ps);
          if (!x)
          {
*************** extern (D) bool oneMembers(Dsymbols* mem
*** 9938,9975 ****
              assert(ps is null);
              return false;
          }
!         if (ps)
          {
!             assert(ident);
!             if (!ps.ident || !ps.ident.equals(ident))
!                 continue;
!             if (!s)
!                 s = ps;
!             else if (s.isOverloadable() && ps.isOverloadable())
              {
!                 // keep head of overload set
!                 FuncDeclaration f1 = s.isFuncDeclaration();
!                 FuncDeclaration f2 = ps.isFuncDeclaration();
!                 if (f1 && f2)
                  {
!                     assert(!f1.isFuncAliasDeclaration());
!                     assert(!f2.isFuncAliasDeclaration());
!                     for (; f1 != f2; f1 = f1.overnext0)
                      {
!                         if (f1.overnext0 is null)
!                         {
!                             f1.overnext0 = f2;
!                             break;
!                         }
                      }
                  }
              }
!             else // more than one symbol
!             {
!                 ps = null;
!                 //printf("\tfalse 2\n");
!                 return false;
!             }
          }
      }
      ps = s; // s is the one symbol, null if none
--- 10186,10223 ----
              assert(ps is null);
              return false;
          }
!         if (!ps)
!             continue;
! 
!         assert(ident);
!         if (!ps.ident || !ps.ident.equals(ident))
!             continue;
!         if (!s)
!             s = ps;
!         else if (s.isOverloadable() && ps.isOverloadable())
          {
!             // keep head of overload set
!             FuncDeclaration f1 = s.isFuncDeclaration();
!             FuncDeclaration f2 = ps.isFuncDeclaration();
!             if (f1 && f2)
              {
!                 assert(!f1.isFuncAliasDeclaration());
!                 assert(!f2.isFuncAliasDeclaration());
!                 for (; f1 != f2; f1 = f1.overnext0)
                  {
!                     if (f1.overnext0 is null)
                      {
!                         f1.overnext0 = f2;
!                         break;
                      }
                  }
              }
!         }
!         else // more than one symbol
!         {
!             ps = null;
!             //printf("\tfalse 2\n");
!             return false;
          }
      }
      ps = s; // s is the one symbol, null if none
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/dtemplate.d gcc-16-20260208/gcc/d/dmd/dtemplate.d
*** gcc-16-20260201/gcc/d/dmd/dtemplate.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/dtemplate.d	Sun Feb  8 22:32:07 2026
*************** module dmd.dtemplate;
*** 40,80 ****
  
  import core.stdc.stdio;
  import core.stdc.string;
- import dmd.aggregate;
- import dmd.aliasthis;
  import dmd.arraytypes;
  import dmd.astenums;
  import dmd.ast_node;
- import dmd.attrib;
- import dmd.dcast;
- import dmd.dclass;
  import dmd.declaration;
- import dmd.dinterpret;
  import dmd.dmodule;
  import dmd.dscope;
  import dmd.dsymbol;
- import dmd.dsymbolsem : aliasSemantic, oneMembers, toAlias;
  import dmd.errors;
  import dmd.errorsink;
  import dmd.expression;
  import dmd.func;
  import dmd.globals;
  import dmd.hdrgen;
- import dmd.id;
  import dmd.identifier;
- import dmd.impcnvtab;
- import dmd.init;
  import dmd.location;
  import dmd.mangle;
  import dmd.mtype;
- import dmd.opover;
- import dmd.optimize;
  import dmd.root.array;
  import dmd.common.outbuffer;
  import dmd.rootobject;
- import dmd.templatesem : getExpression, TemplateInstance_semanticTiargs;
  import dmd.tokens;
- import dmd.typesem : typeSemantic, isBaseOf, resolveNamedArgs;
  import dmd.visitor;
  
  //debug = FindExistingInstance; // print debug stats of findExistingInstance
--- 40,66 ----
*************** inout(Type) getType(inout RootObject o)
*** 195,447 ****
  
  }
  
- /******************************
-  * See if two objects match
-  * Params:
-  *      o1 = first object
-  *      o2 = second object
-  * Returns: true if they match
-  */
- bool match(RootObject o1, RootObject o2)
- {
-     enum log = false;
- 
-     static if (log)
-     {
-         printf("match() o1 = %p %s (%d), o2 = %p %s (%d)\n",
-             o1, o1.toChars(), o1.dyncast(), o2, o2.toChars(), o2.dyncast());
-     }
- 
-     bool yes()
-     {
-         static if (log)
-             printf("\t. match\n");
-         return true;
-     }
-     bool no()
-     {
-         static if (log)
-             printf("\t. nomatch\n");
-         return false;
-     }
-     /* A proper implementation of the various equals() overrides
-      * should make it possible to just do o1.equals(o2), but
-      * we'll do that another day.
-      */
-     /* Manifest constants should be compared by their values,
-      * at least in template arguments.
-      */
- 
-     if (auto t1 = isType(o1))
-     {
-         auto t2 = isType(o2);
-         if (!t2)
-             return no();
- 
-         static if (log)
-         {
-             printf("\tt1 = %s\n", t1.toChars());
-             printf("\tt2 = %s\n", t2.toChars());
-         }
-         if (!t1.equals(t2))
-             return no();
- 
-         return yes();
-     }
-     if (auto e1 = getExpression(o1))
-     {
-         auto e2 = getExpression(o2);
-         if (!e2)
-             return no();
- 
-         static if (log)
-         {
-             printf("\te1 = %s '%s' %s\n", e1.type ? e1.type.toChars() : "null", EXPtoString(e1.op).ptr, e1.toChars());
-             printf("\te2 = %s '%s' %s\n", e2.type ? e2.type.toChars() : "null", EXPtoString(e2.op).ptr, e2.toChars());
-         }
- 
-         // two expressions can be equal although they do not have the same
-         // type; that happens when they have the same value. So check type
-         // as well as expression equality to ensure templates are properly
-         // matched.
-         if (!(e1.type && e2.type && e1.type.equals(e2.type)) || !e1.equals(e2))
-             return no();
- 
-         return yes();
-     }
-     if (auto s1 = isDsymbol(o1))
-     {
-         auto s2 = isDsymbol(o2);
-         if (!s2)
-             return no();
- 
-         static if (log)
-         {
-             printf("\ts1 = %s \n", s1.kind(), s1.toChars());
-             printf("\ts2 = %s \n", s2.kind(), s2.toChars());
-         }
-         if (!s1.equals(s2))
-             return no();
-         if (s1.parent != s2.parent && !s1.isFuncDeclaration() && !s2.isFuncDeclaration())
-             return no();
- 
-         return yes();
-     }
-     if (auto u1 = isTuple(o1))
-     {
-         auto u2 = isTuple(o2);
-         if (!u2)
-             return no();
- 
-         static if (log)
-         {
-             printf("\tu1 = %s\n", u1.toChars());
-             printf("\tu2 = %s\n", u2.toChars());
-         }
-         if (!arrayObjectMatch(u1.objects, u2.objects))
-             return no();
- 
-         return yes();
-     }
-     return yes();
- }
- 
- /************************************
-  * Match an array of them.
-  */
- bool arrayObjectMatch(ref Objects oa1, ref Objects oa2)
- {
-     if (&oa1 == &oa2)
-         return true;
-     if (oa1.length != oa2.length)
-         return false;
-     immutable oa1dim = oa1.length;
-     auto oa1d = oa1[].ptr;
-     auto oa2d = oa2[].ptr;
-     foreach (j; 0 .. oa1dim)
-     {
-         RootObject o1 = oa1d[j];
-         RootObject o2 = oa2d[j];
-         if (!match(o1, o2))
-         {
-             return false;
-         }
-     }
-     return true;
- }
- 
- /************************************
-  * Return hash of Objects.
-  */
- private size_t arrayObjectHash(ref Objects oa1)
- {
-     import dmd.root.hash : mixHash;
- 
-     size_t hash = 0;
-     foreach (o1; oa1)
-     {
-         /* Must follow the logic of match()
-          */
-         if (auto t1 = isType(o1))
-             hash = mixHash(hash, cast(size_t)t1.deco);
-         else if (auto e1 = getExpression(o1))
-             hash = mixHash(hash, expressionHash(e1));
-         else if (auto s1 = isDsymbol(o1))
-         {
-             if (auto fa1 = s1.isFuncAliasDeclaration())
-                 s1 = fa1.toAliasFunc();
-             hash = mixHash(hash, mixHash(cast(size_t)cast(void*)s1.getIdent(), cast(size_t)cast(void*)s1.parent));
-         }
-         else if (auto u1 = isTuple(o1))
-             hash = mixHash(hash, arrayObjectHash(u1.objects));
-     }
-     return hash;
- }
- 
- 
- /************************************
-  * Computes hash of expression.
-  * Handles all Expression classes and MUST match their equals method,
-  * i.e. e1.equals(e2) implies expressionHash(e1) == expressionHash(e2).
-  */
- private size_t expressionHash(Expression e)
- {
-     import dmd.root.ctfloat : CTFloat;
-     import dmd.root.hash : calcHash, mixHash;
- 
-     switch (e.op)
-     {
-     case EXP.int64:
-         return cast(size_t) e.isIntegerExp().getInteger();
- 
-     case EXP.float64:
-         return CTFloat.hash(e.isRealExp().value);
- 
-     case EXP.complex80:
-         auto ce = e.isComplexExp();
-         return mixHash(CTFloat.hash(ce.toReal), CTFloat.hash(ce.toImaginary));
- 
-     case EXP.identifier:
-         return cast(size_t)cast(void*) e.isIdentifierExp().ident;
- 
-     case EXP.null_:
-         return cast(size_t)cast(void*) e.isNullExp().type;
- 
-     case EXP.string_:
-         return calcHash(e.isStringExp.peekData());
- 
-     case EXP.tuple:
-     {
-         auto te = e.isTupleExp();
-         size_t hash = 0;
-         hash += te.e0 ? expressionHash(te.e0) : 0;
-         foreach (elem; *te.exps)
-             hash = mixHash(hash, expressionHash(elem));
-         return hash;
-     }
- 
-     case EXP.arrayLiteral:
-     {
-         auto ae = e.isArrayLiteralExp();
-         size_t hash;
-         foreach (i; 0 .. ae.elements.length)
-             hash = mixHash(hash, expressionHash(ae[i]));
-         return hash;
-     }
- 
-     case EXP.assocArrayLiteral:
-     {
-         auto ae = e.isAssocArrayLiteralExp();
-         size_t hash;
-         foreach (i; 0 .. ae.keys.length)
-             // reduction needs associative op as keys are unsorted (use XOR)
-             hash ^= mixHash(expressionHash((*ae.keys)[i]), expressionHash((*ae.values)[i]));
-         return hash;
-     }
- 
-     case EXP.structLiteral:
-     {
-         auto se = e.isStructLiteralExp();
-         size_t hash;
-         foreach (elem; *se.elements)
-             hash = mixHash(hash, elem ? expressionHash(elem) : 0);
-         return hash;
-     }
- 
-     case EXP.variable:
-         return cast(size_t)cast(void*) e.isVarExp().var;
- 
-     case EXP.function_:
-         return cast(size_t)cast(void*) e.isFuncExp().fd;
- 
-     default:
-         // no custom equals for this expression
-         assert((&e.equals).funcptr is &RootObject.equals);
-         // equals based on identity
-         return cast(size_t)cast(void*) e;
-     }
- }
- 
  RootObject objectSyntaxCopy(RootObject o)
  {
      if (!o)
--- 181,186 ----
*************** extern (C++) final class TemplateDeclara
*** 502,508 ****
      Expression constraint;
  
      // Hash table to look up TemplateInstance's of this TemplateDeclaration
!     TemplateInstance[TemplateInstanceBox] instances;
  
      TemplateDeclaration overnext;       // next overloaded TemplateDeclaration
      TemplateDeclaration overroot;       // first in overnext list
--- 241,247 ----
      Expression constraint;
  
      // Hash table to look up TemplateInstance's of this TemplateDeclaration
!     void* instances;
  
      TemplateDeclaration overnext;       // next overloaded TemplateDeclaration
      TemplateDeclaration overroot;       // first in overnext list
*************** extern (C++) final class TemplateDeclara
*** 517,522 ****
--- 256,262 ----
      bool isTrivialAlias;    /// matches pattern `template Alias(T) { alias Alias = qualifiers(T); }`
      bool deprecated_;       /// this template declaration is deprecated
      bool isCmacro;          /// Whether this template is a translation of a C macro
+     bool haveComputedOneMember; /// Whether computeOneMeber has been called
      Visibility visibility;
  
      // threaded list of previous instantiation attempts on stack
*************** extern (C++) final class TemplateDeclara
*** 555,574 ****
          this.literal = literal;
          this.ismixin = ismixin;
          this.isstatic = true;
          this.visibility = Visibility(Visibility.Kind.undefined);
  
!         // Compute in advance for Ddoc's use
!         // https://issues.dlang.org/show_bug.cgi?id=11153: ident could be NULL if parsing fails.
!         if (!members || !ident)
!             return;
! 
!         Dsymbol s;
!         if (!oneMembers(members, s, ident) || !s)
!             return;
! 
!         onemember = s;
!         s.parent = this;
! 
          /* Set isTrivialAliasSeq if this fits the pattern:
           *   template AliasSeq(T...) { alias AliasSeq = T; }
           * or set isTrivialAlias if this fits the pattern:
--- 295,306 ----
          this.literal = literal;
          this.ismixin = ismixin;
          this.isstatic = true;
+         this.haveComputedOneMember = false;
          this.visibility = Visibility(Visibility.Kind.undefined);
+     }
  
!     extern(D) void computeIsTrivialAlias(Dsymbol s)
!     {
          /* Set isTrivialAliasSeq if this fits the pattern:
           *   template AliasSeq(T...) { alias AliasSeq = T; }
           * or set isTrivialAlias if this fits the pattern:
*************** extern (C++) final class TemplateDeclara
*** 618,673 ****
          return new TemplateDeclaration(loc, ident, p, constraint ? constraint.syntaxCopy() : null, Dsymbol.arraySyntaxCopy(members), ismixin, literal);
      }
  
-     /**********************************
-      * Overload existing TemplateDeclaration 'this' with the new one 's'.
-      * Params:
-      *    s = symbol to be inserted
-      * Return: true if successful; i.e. no conflict.
-      */
-     override bool overloadInsert(Dsymbol s)
-     {
-         static if (LOG)
-         {
-             printf("TemplateDeclaration.overloadInsert('%s')\n", s.toChars());
-         }
-         FuncDeclaration fd = s.isFuncDeclaration();
-         if (fd)
-         {
-             if (funcroot)
-                 return funcroot.overloadInsert(fd);
-             funcroot = fd;
-             return funcroot.overloadInsert(this);
-         }
- 
-         // https://issues.dlang.org/show_bug.cgi?id=15795
-         // if candidate is an alias and its sema is not run then
-         // insertion can fail because the thing it alias is not known
-         if (AliasDeclaration ad = s.isAliasDeclaration())
-         {
-             if (s._scope)
-                 aliasSemantic(ad, s._scope);
-             if (ad.aliassym && ad.aliassym is this)
-                 return false;
-         }
-         TemplateDeclaration td = s.toAlias().isTemplateDeclaration();
-         if (!td)
-             return false;
- 
-         TemplateDeclaration pthis = this;
-         TemplateDeclaration* ptd;
-         for (ptd = &pthis; *ptd; ptd = &(*ptd).overnext)
-         {
-         }
- 
-         td.overroot = this;
-         *ptd = td;
-         static if (LOG)
-         {
-             printf("\ttrue: no conflict\n");
-         }
-         return true;
-     }
- 
      override const(char)* kind() const
      {
          return (onemember && onemember.isAggregateDeclaration()) ? onemember.kind() : "template";
--- 350,355 ----
*************** extern (C++) final class TemplateDeclara
*** 689,755 ****
          return visibility;
      }
  
-     debug (FindExistingInstance)
-     {
-         __gshared uint nFound, nNotFound, nAdded, nRemoved;
- 
-         shared static ~this()
-         {
-             printf("debug (FindExistingInstance) nFound %u, nNotFound: %u, nAdded: %u, nRemoved: %u\n",
-                    nFound, nNotFound, nAdded, nRemoved);
-         }
-     }
- 
-     /****************************************************
-      * Given a new instance `tithis` of this TemplateDeclaration,
-      * see if there already exists an instance.
-      *
-      * Params:
-      *   tithis = template instance to check
-      *   argumentList = For function templates, needed because different
-      *                  `auto ref` resolutions create different instances,
-      *                  even when template parameters are identical
-      *
-      * Returns: that existing instance, or `null` when it doesn't exist
-      */
-     extern (D) TemplateInstance findExistingInstance(TemplateInstance tithis, ArgumentList argumentList)
-     {
-         //printf("findExistingInstance() %s\n", tithis.toChars());
-         tithis.fargs = argumentList.arguments;
-         tithis.fnames = argumentList.names;
-         auto tibox = TemplateInstanceBox(tithis);
-         auto p = tibox in this.instances;
-         debug (FindExistingInstance) ++(p ? nFound : nNotFound);
-         //if (p) printf("\tfound %p\n", *p); else printf("\tnot found\n");
-         return p ? *p : null;
-     }
- 
-     /********************************************
-      * Add instance ti to TemplateDeclaration's table of instances.
-      * Return a handle we can use to later remove it if it fails instantiation.
-      */
-     extern (D) TemplateInstance addInstance(TemplateInstance ti)
-     {
-         //printf("addInstance() %p %s\n", instances, ti.toChars());
-         auto tibox = TemplateInstanceBox(ti);
-         instances[tibox] = ti;
-         debug (FindExistingInstance) ++nAdded;
-         return ti;
-     }
- 
-     /*******************************************
-      * Remove TemplateInstance from table of instances.
-      * Input:
-      *      handle returned by addInstance()
-      */
-     extern (D) void removeInstance(TemplateInstance ti)
-     {
-         //printf("removeInstance() %s\n", ti.toChars());
-         auto tibox = TemplateInstanceBox(ti);
-         debug (FindExistingInstance) ++nRemoved;
-         instances.remove(tibox);
-     }
- 
      /**
       * Check if the last template parameter is a tuple one,
       * and returns it if so, else returns `null`.
--- 371,376 ----
*************** extern (C++) final class TypeDeduced : T
*** 812,1195 ****
      }
  }
  
- /* ======================== Type ============================================ */
- 
- /***********************************************************
-  * Check whether the type t representation relies on one or more the template parameters.
-  * Params:
-  *      t           = Tested type, if null, returns false.
-  *      tparams     = Template parameters.
-  *      iStart      = Start index of tparams to limit the tested parameters. If it's
-  *                    nonzero, tparams[0..iStart] will be excluded from the test target.
-  */
- bool reliesOnTident(Type t, TemplateParameters* tparams, size_t iStart = 0)
- {
-     return reliesOnTemplateParameters(t, (*tparams)[0 .. tparams.length]);
- }
- 
- /***********************************************************
-  * Check whether the type t representation relies on one or more the template parameters.
-  * Params:
-  *      t           = Tested type, if null, returns false.
-  *      tparams     = Template parameters.
-  */
- bool reliesOnTemplateParameters(Type t, TemplateParameter[] tparams)
- {
-     bool visitVector(TypeVector t)
-     {
-         return t.basetype.reliesOnTemplateParameters(tparams);
-     }
- 
-     bool visitAArray(TypeAArray t)
-     {
-         return t.next.reliesOnTemplateParameters(tparams) ||
-                t.index.reliesOnTemplateParameters(tparams);
-     }
- 
-     bool visitFunction(TypeFunction t)
-     {
-         foreach (i, fparam; t.parameterList)
-         {
-             if (fparam.type.reliesOnTemplateParameters(tparams))
-                 return true;
-         }
-         return t.next.reliesOnTemplateParameters(tparams);
-     }
- 
-     bool visitIdentifier(TypeIdentifier t)
-     {
-         foreach (tp; tparams)
-         {
-             if (tp.ident.equals(t.ident))
-                 return true;
-         }
-         return false;
-     }
- 
-     bool visitInstance(TypeInstance t)
-     {
-         foreach (tp; tparams)
-         {
-             if (t.tempinst.name == tp.ident)
-                 return true;
-         }
- 
-         if (t.tempinst.tiargs)
-             foreach (arg; *t.tempinst.tiargs)
-             {
-                 if (Type ta = isType(arg))
-                 {
-                     if (ta.reliesOnTemplateParameters(tparams))
-                         return true;
-                 }
-             }
- 
-         return false;
-     }
- 
-     bool visitTypeof(TypeTypeof t)
-     {
-         //printf("TypeTypeof.reliesOnTemplateParameters('%s')\n", t.toChars());
-         return t.exp.reliesOnTemplateParameters(tparams);
-     }
- 
-     bool visitTuple(TypeTuple t)
-     {
-         if (t.arguments)
-             foreach (arg; *t.arguments)
-             {
-                 if (arg.type.reliesOnTemplateParameters(tparams))
-                     return true;
-             }
- 
-         return false;
-     }
- 
-     if (!t)
-         return false;
- 
-     Type tb = t.toBasetype();
-     switch (tb.ty)
-     {
-         case Tvector:   return visitVector(tb.isTypeVector());
-         case Taarray:   return visitAArray(tb.isTypeAArray());
-         case Tfunction: return visitFunction(tb.isTypeFunction());
-         case Tident:    return visitIdentifier(tb.isTypeIdentifier());
-         case Tinstance: return visitInstance(tb.isTypeInstance());
-         case Ttypeof:   return visitTypeof(tb.isTypeTypeof());
-         case Ttuple:    return visitTuple(tb.isTypeTuple());
-         case Tenum:     return false;
-         default:        return tb.nextOf().reliesOnTemplateParameters(tparams);
-     }
- }
- 
- /***********************************************************
-  * Check whether the expression representation relies on one or more the template parameters.
-  * Params:
-  *      e           = expression to test
-  *      tparams     = Template parameters.
-  * Returns:
-  *      true if it does
-  */
- private bool reliesOnTemplateParameters(Expression e, TemplateParameter[] tparams)
- {
-     extern (C++) final class ReliesOnTemplateParameters : Visitor
-     {
-         alias visit = Visitor.visit;
-     public:
-         TemplateParameter[] tparams;
-         bool result;
- 
-         extern (D) this(TemplateParameter[] tparams) @safe
-         {
-             this.tparams = tparams;
-         }
- 
-         override void visit(Expression e)
-         {
-             //printf("Expression.reliesOnTemplateParameters('%s')\n", e.toChars());
-         }
- 
-         override void visit(IdentifierExp e)
-         {
-             //printf("IdentifierExp.reliesOnTemplateParameters('%s')\n", e.toChars());
-             foreach (tp; tparams)
-             {
-                 if (e.ident == tp.ident)
-                 {
-                     result = true;
-                     return;
-                 }
-             }
-         }
- 
-         override void visit(TupleExp e)
-         {
-             //printf("TupleExp.reliesOnTemplateParameters('%s')\n", e.toChars());
-             if (e.exps)
-             {
-                 foreach (ea; *e.exps)
-                 {
-                     ea.accept(this);
-                     if (result)
-                         return;
-                 }
-             }
-         }
- 
-         override void visit(ArrayLiteralExp e)
-         {
-             //printf("ArrayLiteralExp.reliesOnTemplateParameters('%s')\n", e.toChars());
-             if (e.elements)
-             {
-                 foreach (el; *e.elements)
-                 {
-                     el.accept(this);
-                     if (result)
-                         return;
-                 }
-             }
-         }
- 
-         override void visit(AssocArrayLiteralExp e)
-         {
-             //printf("AssocArrayLiteralExp.reliesOnTemplateParameters('%s')\n", e.toChars());
-             foreach (ek; *e.keys)
-             {
-                 ek.accept(this);
-                 if (result)
-                     return;
-             }
-             foreach (ev; *e.values)
-             {
-                 ev.accept(this);
-                 if (result)
-                     return;
-             }
-         }
- 
-         override void visit(StructLiteralExp e)
-         {
-             //printf("StructLiteralExp.reliesOnTemplateParameters('%s')\n", e.toChars());
-             if (e.elements)
-             {
-                 foreach (ea; *e.elements)
-                 {
-                     ea.accept(this);
-                     if (result)
-                         return;
-                 }
-             }
-         }
- 
-         override void visit(TypeExp e)
-         {
-             //printf("TypeExp.reliesOnTemplateParameters('%s')\n", e.toChars());
-             result = e.type.reliesOnTemplateParameters(tparams);
-         }
- 
-         override void visit(NewExp e)
-         {
-             //printf("NewExp.reliesOnTemplateParameters('%s')\n", e.toChars());
-             if (e.placement)
-                 e.placement.accept(this);
-             if (e.thisexp)
-                 e.thisexp.accept(this);
-             result = e.newtype.reliesOnTemplateParameters(tparams);
-             if (!result && e.arguments)
-             {
-                 foreach (ea; *e.arguments)
-                 {
-                     ea.accept(this);
-                     if (result)
-                         return;
-                 }
-             }
-         }
- 
-         override void visit(NewAnonClassExp e)
-         {
-             //printf("NewAnonClassExp.reliesOnTemplateParameters('%s')\n", e.toChars());
-             result = true;
-         }
- 
-         override void visit(FuncExp e)
-         {
-             //printf("FuncExp.reliesOnTemplateParameters('%s')\n", e.toChars());
-             result = true;
-         }
- 
-         override void visit(TypeidExp e)
-         {
-             //printf("TypeidExp.reliesOnTemplateParameters('%s')\n", e.toChars());
-             if (auto ea = isExpression(e.obj))
-                 ea.accept(this);
-             else if (auto ta = isType(e.obj))
-                 result = ta.reliesOnTemplateParameters(tparams);
-         }
- 
-         override void visit(TraitsExp e)
-         {
-             //printf("TraitsExp.reliesOnTemplateParameters('%s')\n", e.toChars());
-             if (e.args)
-             {
-                 foreach (oa; *e.args)
-                 {
-                     if (auto ea = isExpression(oa))
-                         ea.accept(this);
-                     else if (auto ta = isType(oa))
-                         result = ta.reliesOnTemplateParameters(tparams);
-                     if (result)
-                         return;
-                 }
-             }
-         }
- 
-         override void visit(IsExp e)
-         {
-             //printf("IsExp.reliesOnTemplateParameters('%s')\n", e.toChars());
-             result = e.targ.reliesOnTemplateParameters(tparams);
-         }
- 
-         override void visit(UnaExp e)
-         {
-             //printf("UnaExp.reliesOnTemplateParameters('%s')\n", e.toChars());
-             e.e1.accept(this);
-         }
- 
-         override void visit(DotTemplateInstanceExp e)
-         {
-             //printf("DotTemplateInstanceExp.reliesOnTemplateParameters('%s')\n", e.toChars());
-             visit(e.isUnaExp());
-             if (!result && e.ti.tiargs)
-             {
-                 foreach (oa; *e.ti.tiargs)
-                 {
-                     if (auto ea = isExpression(oa))
-                         ea.accept(this);
-                     else if (auto ta = isType(oa))
-                         result = ta.reliesOnTemplateParameters(tparams);
-                     if (result)
-                         return;
-                 }
-             }
-         }
- 
-         override void visit(CallExp e)
-         {
-             //printf("CallExp.reliesOnTemplateParameters('%s')\n", e.toChars());
-             visit(e.isUnaExp());
-             if (!result && e.arguments)
-             {
-                 foreach (ea; *e.arguments)
-                 {
-                     ea.accept(this);
-                     if (result)
-                         return;
-                 }
-             }
-         }
- 
-         override void visit(CastExp e)
-         {
-             //printf("CallExp.reliesOnTemplateParameters('%s')\n", e.toChars());
-             visit(e.isUnaExp());
-             // e.to can be null for cast() with no type
-             if (!result && e.to)
-                 result = e.to.reliesOnTemplateParameters(tparams);
-         }
- 
-         override void visit(SliceExp e)
-         {
-             //printf("SliceExp.reliesOnTemplateParameters('%s')\n", e.toChars());
-             visit(e.isUnaExp());
-             if (!result && e.lwr)
-                 e.lwr.accept(this);
-             if (!result && e.upr)
-                 e.upr.accept(this);
-         }
- 
-         override void visit(IntervalExp e)
-         {
-             //printf("IntervalExp.reliesOnTemplateParameters('%s')\n", e.toChars());
-             e.lwr.accept(this);
-             if (!result)
-                 e.upr.accept(this);
-         }
- 
-         override void visit(ArrayExp e)
-         {
-             //printf("ArrayExp.reliesOnTemplateParameters('%s')\n", e.toChars());
-             visit(e.isUnaExp());
-             if (!result && e.arguments)
-             {
-                 foreach (ea; *e.arguments)
-                     ea.accept(this);
-             }
-         }
- 
-         override void visit(BinExp e)
-         {
-             //printf("BinExp.reliesOnTemplateParameters('%s')\n", e.toChars());
-             e.e1.accept(this);
-             if (!result)
-                 e.e2.accept(this);
-         }
- 
-         override void visit(CondExp e)
-         {
-             //printf("BinExp.reliesOnTemplateParameters('%s')\n", e.toChars());
-             e.econd.accept(this);
-             if (!result)
-                 visit(e.isBinExp());
-         }
-     }
- 
-     scope ReliesOnTemplateParameters v = new ReliesOnTemplateParameters(tparams);
-     e.accept(v);
-     return v.result;
- }
- 
  /***********************************************************
   * https://dlang.org/spec/template.html#TemplateParameter
   */
--- 433,438 ----
*************** extern (C++) class TemplateParameter : A
*** 1242,1249 ****
  
      abstract TemplateParameter syntaxCopy();
  
-     abstract bool declareParameter(Scope* sc);
- 
      abstract void print(RootObject oarg, RootObject oded);
  
      abstract RootObject specialization();
--- 485,490 ----
*************** extern (C++) class TemplateTypeParameter
*** 1295,1308 ****
          return new TemplateTypeParameter(loc, ident, specType ? specType.syntaxCopy() : null, defaultType ? defaultType.syntaxCopy() : null);
      }
  
-     override final bool declareParameter(Scope* sc)
-     {
-         //printf("TemplateTypeParameter.declareParameter('%s')\n", ident.toChars());
-         auto ti = new TypeIdentifier(loc, ident);
-         Declaration ad = new AliasDeclaration(loc, ident, ti);
-         return sc.insert(ad) !is null;
-     }
- 
      override final void print(RootObject oarg, RootObject oded)
      {
          printf(" %s\n", ident.toChars());
--- 536,541 ----
*************** extern (C++) final class TemplateValuePa
*** 1398,1424 ****
              defaultValue ? defaultValue.syntaxCopy() : null);
      }
  
-     override bool declareParameter(Scope* sc)
-     {
-         /*
-             Do type semantic earlier.
- 
-             This means for certain erroneous value parameters
-             their "type" can be known earlier and thus a better
-             error message given.
- 
-             For example:
-             `template test(x* x) {}`
-             now yields "undefined identifier" rather than the opaque
-             "variable `x` is used as a type".
-          */
-         if (valType)
-             valType = valType.typeSemantic(loc, sc);
-         auto v = new VarDeclaration(loc, valType, ident, null);
-         v.storage_class = STC.templateparameter;
-         return sc.insert(v) !is null;
-     }
- 
      override void print(RootObject oarg, RootObject oded)
      {
          printf(" %s\n", ident.toChars());
--- 631,636 ----
*************** extern (C++) final class TemplateAliasPa
*** 1475,1487 ****
          return new TemplateAliasParameter(loc, ident, specType ? specType.syntaxCopy() : null, objectSyntaxCopy(specAlias), objectSyntaxCopy(defaultAlias));
      }
  
-     override bool declareParameter(Scope* sc)
-     {
-         auto ti = new TypeIdentifier(loc, ident);
-         Declaration ad = new AliasDeclaration(loc, ident, ti);
-         return sc.insert(ad) !is null;
-     }
- 
      override void print(RootObject oarg, RootObject oded)
      {
          printf(" %s\n", ident.toChars());
--- 687,692 ----
*************** extern (C++) final class TemplateTuplePa
*** 1528,1540 ****
          return new TemplateTupleParameter(loc, ident);
      }
  
-     override bool declareParameter(Scope* sc)
-     {
-         auto ti = new TypeIdentifier(loc, ident);
-         Declaration ad = new AliasDeclaration(loc, ident, ti);
-         return sc.insert(ad) !is null;
-     }
- 
      override void print(RootObject oarg, RootObject oded)
      {
          printf(" %s... [", ident.toChars());
--- 733,738 ----
*************** extern (C++) class TemplateInstance : Sc
*** 1621,1627 ****
      TemplateInstance inst;
  
      ScopeDsymbol argsym;        // argument symbol table
-     size_t hash;                // cached result of toHash()
  
      /// For function template, these are the function fnames(name and loc of it) and arguments
      /// Relevant because different resolutions of `auto ref` parameters
--- 819,824 ----
*************** extern (C++) class TemplateInstance : Sc
*** 1860,2097 ****
          return ident;
      }
  
-     /*************************************
-      * Compare proposed template instantiation with existing template instantiation.
-      * Note that this is not commutative because of the auto ref check.
-      * Params:
-      *  ti = existing template instantiation
-      * Returns:
-      *  true for match
-      */
-     final bool equalsx(TemplateInstance ti)
-     {
-         //printf("this = %p, ti = %p\n", this, ti);
-         assert(tdtypes.length == ti.tdtypes.length);
- 
-         // Nesting must match
-         if (enclosing != ti.enclosing)
-         {
-             //printf("test2 enclosing %s ti.enclosing %s\n", enclosing ? enclosing.toChars() : "", ti.enclosing ? ti.enclosing.toChars() : "");
-             return false;
-         }
-         //printf("parent = %s, ti.parent = %s\n", parent.toPrettyChars(), ti.parent.toPrettyChars());
- 
-         if (!arrayObjectMatch(tdtypes, ti.tdtypes))
-             return false;
- 
-         /* Template functions may have different instantiations based on
-          * "auto ref" parameters.
-          */
-         auto fd = ti.toAlias().isFuncDeclaration();
-         if (!fd)
-             return true;
-         if (fd.errors)
-             return true;
- 
-         auto resolvedArgs = fd.type.isTypeFunction().resolveNamedArgs(
-             ArgumentList(this.fargs, this.fnames), null);
- 
-         // resolvedArgs can be null when there's an error: fail_compilation/fail14669.d
-         // In that case, equalsx returns true to prevent endless template instantiations
-         // However, it can also mean the function was explicitly instantiated
-         // without function arguments: fail_compilation/fail14669
-         // Hence the following check:
-         if (this.fargs && !resolvedArgs)
-             return true;
- 
-         Expression[] args = resolvedArgs ? (*resolvedArgs)[] : [];
- 
-         auto fparameters = fd.getParameterList();
-         size_t nfparams = fparameters.length;   // Num function parameters
-         for (size_t j = 0; j < nfparams; j++)
-         {
-             Parameter fparam = fparameters[j];
-             if (!(fparam.storageClass & STC.autoref) )      // if "auto ref"
-                 continue;
- 
-             Expression farg = (j < args.length) ? args[j] : fparam.defaultArg;
-             // resolveNamedArgs strips trailing nulls / default params
-             // when it doesn't anymore, the ternary can be replaced with:
-             // assert(j < resolvedArgs.length);
-             if (!farg)
-                 farg = fparam.defaultArg;
-             if (!farg)
-                 return false;
-             if (farg.isLvalue())
-             {
-                 if (!(fparam.storageClass & STC.ref_))
-                     return false; // auto ref's don't match
-             }
-             else
-             {
-                 if (fparam.storageClass & STC.ref_)
-                     return false; // auto ref's don't match
-             }
-         }
-         return true;
-     }
- 
-     extern (D) final size_t toHash()
-     {
-         if (!hash)
-         {
-             hash = cast(size_t)cast(void*)enclosing;
-             hash += arrayObjectHash(tdtypes);
-             hash += hash == 0;
-         }
-         return hash;
-     }
- 
-     /**********************************
-      * Run semantic on the elements of tiargs.
-      * Input:
-      *      sc
-      * Returns:
-      *      false if one or more arguments have errors.
-      * Note:
-      *      This function is reentrant against error occurrence. If returns false,
-      *      all elements of tiargs won't be modified.
-      */
-     extern (D) final bool semanticTiargs(Scope* sc)
-     {
-         //printf("+TemplateInstance.semanticTiargs() %s\n", toChars());
-         if (semantictiargsdone)
-             return true;
-         if (TemplateInstance_semanticTiargs(loc, sc, tiargs, 0))
-         {
-             // cache the result iff semantic analysis succeeded entirely
-             semantictiargsdone = 1;
-             return true;
-         }
-         return false;
-     }
- 
-     /*****************************************
-      * Determines if a TemplateInstance will need a nested
-      * generation of the TemplateDeclaration.
-      * Sets enclosing property if so, and returns != 0;
-      */
-     extern (D) final bool hasNestedArgs(Objects* args, bool isstatic)
-     {
-         int nested = 0;
-         //printf("TemplateInstance.hasNestedArgs('%s')\n", tempdecl.ident.toChars());
- 
-         // arguments from parent instances are also accessible
-         if (!enclosing)
-         {
-             if (TemplateInstance ti = tempdecl.toParent().isTemplateInstance())
-                 enclosing = ti.enclosing;
-         }
- 
-         /* A nested instance happens when an argument references a local
-          * symbol that is on the stack.
-          */
-         foreach (o; *args)
-         {
-             Expression ea = isExpression(o);
-             Dsymbol sa = isDsymbol(o);
-             Tuple va = isTuple(o);
-             if (ea)
-             {
-                 if (auto ve = ea.isVarExp())
-                 {
-                     sa = ve.var;
-                     goto Lsa;
-                 }
-                 if (auto te = ea.isThisExp())
-                 {
-                     sa = te.var;
-                     goto Lsa;
-                 }
-                 if (auto fe = ea.isFuncExp())
-                 {
-                     if (fe.td)
-                         sa = fe.td;
-                     else
-                         sa = fe.fd;
-                     goto Lsa;
-                 }
-                 // Emulate Expression.toMangleBuffer call that had exist in TemplateInstance.genIdent.
-                 if (ea.op != EXP.int64 && ea.op != EXP.float64 && ea.op != EXP.complex80 && ea.op != EXP.null_ && ea.op != EXP.string_ && ea.op != EXP.arrayLiteral && ea.op != EXP.assocArrayLiteral && ea.op != EXP.structLiteral)
-                 {
-                     if (!ea.type.isTypeError())
-                         .error(ea.loc, "%s `%s` expression `%s` is not a valid template value argument", kind, toPrettyChars, ea.toChars());
-                     errors = true;
-                 }
-             }
-             else if (sa)
-             {
-             Lsa:
-                 sa = sa.toAlias();
-                 TemplateDeclaration td = sa.isTemplateDeclaration();
-                 if (td)
-                 {
-                     TemplateInstance ti = sa.toParent().isTemplateInstance();
-                     if (ti && ti.enclosing)
-                         sa = ti;
-                 }
-                 TemplateInstance ti = sa.isTemplateInstance();
-                 Declaration d = sa.isDeclaration();
-                 if ((td && td.literal) || (ti && ti.enclosing) || (d && !d.isDataseg() && !(d.storage_class & STC.manifest) && (!d.isFuncDeclaration() || d.isFuncDeclaration().isNested()) && !isTemplateMixin()))
-                 {
-                     Dsymbol dparent = sa.toParent2();
-                     if (!dparent || dparent.isModule)
-                         goto L1;
-                     else if (!enclosing)
-                         enclosing = dparent;
-                     else if (enclosing != dparent)
-                     {
-                         /* Select the more deeply nested of the two.
-                          * Error if one is not nested inside the other.
-                          */
-                         for (Dsymbol p = enclosing; p; p = p.parent)
-                         {
-                             if (p == dparent)
-                                 goto L1; // enclosing is most nested
-                         }
-                         for (Dsymbol p = dparent; p; p = p.parent)
-                         {
-                             if (p == enclosing)
-                             {
-                                 enclosing = dparent;
-                                 goto L1; // dparent is most nested
-                             }
-                         }
-                         //https://issues.dlang.org/show_bug.cgi?id=17870
-                         if (dparent.isClassDeclaration() && enclosing.isClassDeclaration())
-                         {
-                             auto pc = dparent.isClassDeclaration();
-                             auto ec = enclosing.isClassDeclaration();
-                             if (pc.isBaseOf(ec, null))
-                                 goto L1;
-                             else if (ec.isBaseOf(pc, null))
-                             {
-                                 enclosing = dparent;
-                                 goto L1;
-                             }
-                         }
-                         .error(loc, "%s `%s` `%s` is nested in both `%s` and `%s`", kind, toPrettyChars, toChars(), enclosing.toChars(), dparent.toChars());
-                         errors = true;
-                     }
-                 L1:
-                     //printf("\tnested inside %s as it references %s\n", enclosing.toChars(), sa.toChars());
-                     nested |= 1;
-                 }
-             }
-             else if (va)
-             {
-                 nested |= cast(int)hasNestedArgs(&va.objects, isstatic);
-             }
-         }
-         //printf("-TemplateInstance.hasNestedArgs('%s') = %d\n", tempdecl.ident.toChars(), nested);
-         return nested != 0;
-     }
- 
      /****************************************
       * This instance needs an identifier for name mangling purposes.
       * Create one by taking the template declaration name and adding
--- 1057,1062 ----
*************** extern (C++) final class TemplateMixin :
*** 2210,2273 ****
      }
  }
  
- /************************************
-  * This struct is needed for TemplateInstance to be the key in an associative array.
-  * Fixing https://issues.dlang.org/show_bug.cgi?id=15813 would make it unnecessary.
-  */
- struct TemplateInstanceBox
- {
-     TemplateInstance ti;
- 
-     this(TemplateInstance ti)
-     {
-         this.ti = ti;
-         this.ti.toHash();
-         assert(this.ti.hash);
-     }
- 
-     size_t toHash() const @safe pure nothrow
-     {
-         assert(ti.hash);
-         return ti.hash;
-     }
- 
-     bool opEquals(ref const TemplateInstanceBox s) @trusted const
-     {
-         bool res = void;
-         if (ti.inst && s.ti.inst)
-         {
-             /* This clause is only used when an instance with errors
-              * is replaced with a correct instance.
-              */
-             res = ti is s.ti;
-         }
-         else
-         {
-             /* Used when a proposed instance is used to see if there's
-              * an existing instance.
-              */
-             static if (__VERSION__ < 2099) // https://issues.dlang.org/show_bug.cgi?id=22717
-                 res = (cast()s.ti).equalsx(cast()ti);
-             else
-                 res = (cast()ti).equalsx(cast()s.ti);
-         }
- 
-         debug (FindExistingInstance) ++(res ? nHits : nCollisions);
-         return res;
-     }
- 
-     debug (FindExistingInstance)
-     {
-         __gshared uint nHits, nCollisions;
- 
-         shared static ~this()
-         {
-             printf("debug (FindExistingInstance) TemplateInstanceBox.equals hits: %u collisions: %u\n",
-                    nHits, nCollisions);
-         }
-     }
- }
- 
  /***********************************************
   * Collect and print statistics on template instantiations.
   */
--- 1175,1180 ----
*************** void printTemplateStats(bool listInstanc
*** 2402,2422 ****
      }
  }
  
- /// Pair of MATCHes
- struct MATCHpair
- {
-     MATCH mta;  /// match template parameters by initial template arguments
-     MATCH mfa;  /// match template parameters by inferred template arguments
- 
-     debug this(MATCH mta, MATCH mfa)
-     {
-         assert(MATCH.min <= mta && mta <= MATCH.max);
-         assert(MATCH.min <= mfa && mfa <= MATCH.max);
-         this.mta = mta;
-         this.mfa = mfa;
-     }
- }
- 
  void write(ref OutBuffer buf, RootObject obj)
  {
      if (obj)
--- 1309,1314 ----
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/dtoh.d gcc-16-20260208/gcc/d/dmd/dtoh.d
*** gcc-16-20260201/gcc/d/dmd/dtoh.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/dtoh.d	Sun Feb  8 22:32:07 2026
*************** import core.stdc.ctype;
*** 18,27 ****
  import dmd.astcodegen;
  import dmd.astenums;
  import dmd.arraytypes;
- import dmd.attrib;
- import dmd.dsymbol;
  import dmd.dsymbolsem;
  import dmd.errors;
  import dmd.globals;
  import dmd.hdrgen;
  import dmd.id;
--- 18,28 ----
  import dmd.astcodegen;
  import dmd.astenums;
  import dmd.arraytypes;
  import dmd.dsymbolsem;
+ import dmd.templatesem : computeOneMember;
+ import dmd.expressionsem : toInteger;
  import dmd.errors;
+ import dmd.errorsink;
  import dmd.globals;
  import dmd.hdrgen;
  import dmd.id;
*************** import dmd.utils;
*** 46,51 ****
--- 47,53 ----
   *
   * Params:
   *   ms = the modules
+  *   eSink = where to report errors
   *
   * Notes:
   *  - the header is written to `<global.params.cxxhdrdir>/<global.params.cxxhdrfile>`
*************** import dmd.utils;
*** 54,60 ****
   *  - ignored declarations are mentioned in a comment if `global.params.doCxxHdrGeneration`
   *    is set to `CxxHeaderMode.verbose`
   */
! void genCppHdrFiles(ref Modules ms)
  {
      initialize();
  
--- 56,62 ----
   *  - ignored declarations are mentioned in a comment if `global.params.doCxxHdrGeneration`
   *    is set to `CxxHeaderMode.verbose`
   */
! void genCppHdrFiles(ref Modules ms, ErrorSink eSink)
  {
      initialize();
  
*************** void genCppHdrFiles(ref Modules ms)
*** 68,74 ****
      decl.doindent = true;
      decl.spaces = true;
  
!     scope v = new ToCppBuffer(&fwd, &done, &decl);
  
      // Conditionally include another buffer for sanity checks
      debug (Debug_DtoH_Checks)
--- 70,76 ----
      decl.doindent = true;
      decl.spaces = true;
  
!     scope v = new ToCppBuffer(&fwd, &done, &decl, eSink);
  
      // Conditionally include another buffer for sanity checks
      debug (Debug_DtoH_Checks)
*************** public:
*** 259,264 ****
--- 261,269 ----
      /// Default buffer for the currently visited declaration
      OutBuffer* buf;
  
+     /// Sink for error reporting
+     ErrorSink eSink;
+ 
      /// The generated header uses `real` emitted as `_d_real`?
      bool hasReal = false;
  
*************** public:
*** 329,340 ****
      }
      mixin(generateMembers());
  
!     this(OutBuffer* fwdbuf, OutBuffer* donebuf, OutBuffer* buf) scope
      {
          this.fwdbuf = fwdbuf;
          this.donebuf = donebuf;
          this.buf = buf;
          this.printIgnored = global.params.cxxhdr.fullOutput;
      }
  
      /**
--- 334,346 ----
      }
      mixin(generateMembers());
  
!     this(OutBuffer* fwdbuf, OutBuffer* donebuf, OutBuffer* buf, ErrorSink eSink) scope
      {
          this.fwdbuf = fwdbuf;
          this.donebuf = donebuf;
          this.buf = buf;
          this.printIgnored = global.params.cxxhdr.fullOutput;
+         this.eSink = eSink;
      }
  
      /**
*************** public:
*** 502,513 ****
              }
  
              __gshared bool warned = false;
!             warning(loc, "%s `%s` is a %s", kind, ident.toChars(), reason);
  
              if (!warned)
              {
!                 warningSupplemental(loc, "The generated C++ header will contain " ~
!                                     "identifiers that are keywords in C++");
                  warned = true;
              }
          }
--- 508,519 ----
              }
  
              __gshared bool warned = false;
!             eSink.warning(loc, "%s `%s` is a %s", kind, ident.toChars(), reason);
  
              if (!warned)
              {
!                 eSink.warningSupplemental(loc, "The generated C++ header will contain " ~
!                                           "identifiers that are keywords in C++");
                  warned = true;
              }
          }
*************** public:
*** 574,580 ****
          debug (Debug_DtoH)
          {
              mixin(traceVisit!s);
-             import dmd.asttypename;
              printf("[AST.Dsymbol enter] %s\n", s.astTypeName().ptr);
          }
      }
--- 580,585 ----
*************** public:
*** 1748,1754 ****
          // `this` but accessible via `outer`
          if (auto td = s.isThisDeclaration())
          {
-             import dmd.id;
              this.ident = Id.outer;
          }
          else
--- 1753,1758 ----
*************** public:
*** 2141,2146 ****
--- 2145,2151 ----
          if (!shouldEmitAndMarkVisited(td))
              return;
  
+         td.computeOneMember();
          if (!td.parameters || !td.onemember || (!td.onemember.isStructDeclaration && !td.onemember.isClassDeclaration && !td.onemember.isFuncDeclaration))
          {
              visit(cast(AST.Dsymbol)td);
*************** public:
*** 2697,2703 ****
          }
          else
          {
-             import dmd.hdrgen;
              // Hex floating point literals were introduced in C++ 17
              const allowHex = global.params.cplusplus >= CppStdRevision.cpp17;
              floatToBuffer(e.type, e.value, *buf, allowHex);
--- 2702,2707 ----
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/dversion.d gcc-16-20260208/gcc/d/dmd/dversion.d
*** gcc-16-20260201/gcc/d/dmd/dversion.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/dversion.d	Sun Feb  8 22:32:07 2026
***************
*** 14,28 ****
  
  module dmd.dversion;
  
- import dmd.arraytypes;
- import dmd.cond;
- import dmd.dmodule;
- import dmd.dscope;
  import dmd.dsymbol;
- import dmd.dsymbolsem;
  import dmd.identifier;
  import dmd.location;
- import dmd.common.outbuffer;
  import dmd.visitor;
  
  /***********************************************************
--- 14,22 ----
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/enum.h gcc-16-20260208/gcc/d/dmd/enum.h
*** gcc-16-20260201/gcc/d/dmd/enum.h	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/enum.h	Sun Feb  8 22:32:07 2026
*************** public:
*** 52,58 ****
      bool inuse(bool v);
  
      EnumDeclaration *syntaxCopy(Dsymbol *s) override;
-     Type *getType() override;
      const char *kind() const override;
      bool isDeprecated() const override;       // is Dsymbol deprecated?
      Visibility visible() override;
--- 52,57 ----
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/enumsem.d gcc-16-20260208/gcc/d/dmd/enumsem.d
*** gcc-16-20260201/gcc/d/dmd/enumsem.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/enumsem.d	Sun Feb  8 22:32:07 2026
*************** void enumMemberSemantic(Scope* sc, EnumM
*** 488,508 ****
      else if (first)
      {
          Type t;
          if (em.ed.memtype)
              t = em.ed.memtype;
          else
          {
              t = Type.tint32;
              if (!em.ed.isAnonymous())
                  em.ed.memtype = t;
          }
          const errors = global.startGagging();
          Expression e = new IntegerExp(em.loc, 0, t);
          e = e.ctfeInterpret();
!         if (global.endGagging(errors))
          {
              error(em.loc, "cannot generate 0 value of type `%s` for `%s`",
!                 t.toChars(), em.toChars());
          }
          // save origValue for better json output
          em.origValue = e;
--- 488,517 ----
      else if (first)
      {
          Type t;
+         bool terror;
          if (em.ed.memtype)
+         {
              t = em.ed.memtype;
+             if (!t.isScalar())
+             {
+                 t = Type.terror; // print more relevant error message later
+                 terror = true;
+             }
+         }
          else
          {
              t = Type.tint32;
              if (!em.ed.isAnonymous())
                  em.ed.memtype = t;
          }
+ 
          const errors = global.startGagging();
          Expression e = new IntegerExp(em.loc, 0, t);
          e = e.ctfeInterpret();
!         if (global.endGagging(errors) || terror)
          {
              error(em.loc, "cannot generate 0 value of type `%s` for `%s`",
!                 em.ed.memtype.toChars(), em.toChars());
          }
          // save origValue for better json output
          em.origValue = e;
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/errors.d gcc-16-20260208/gcc/d/dmd/errors.d
*** gcc-16-20260201/gcc/d/dmd/errors.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/errors.d	Sun Feb  8 22:32:07 2026
*************** class ErrorSinkCompiler : ErrorSink
*** 41,77 ****
  
      void verror(Loc loc, const(char)* format, va_list ap)
      {
!         verrorReport(loc, format, ap, ErrorKind.error);
      }
  
      void verrorSupplemental(Loc loc, const(char)* format, va_list ap)
      {
!         verrorReportSupplemental(loc, format, ap, ErrorKind.error);
      }
  
      void vwarning(Loc loc, const(char)* format, va_list ap)
      {
!         verrorReport(loc, format, ap, ErrorKind.warning);
      }
  
      void vwarningSupplemental(Loc loc, const(char)* format, va_list ap)
      {
!         verrorReportSupplemental(loc, format, ap, ErrorKind.warning);
      }
  
      void vdeprecation(Loc loc, const(char)* format, va_list ap)
      {
!         verrorReport(loc, format, ap, ErrorKind.deprecation);
      }
  
      void vdeprecationSupplemental(Loc loc, const(char)* format, va_list ap)
      {
!         verrorReportSupplemental(loc, format, ap, ErrorKind.deprecation);
      }
  
      void vmessage(Loc loc, const(char)* format, va_list ap)
      {
!         verrorReport(loc, format, ap, ErrorKind.message);
      }
  }
  
--- 41,77 ----
  
      void verror(Loc loc, const(char)* format, va_list ap)
      {
!         vreportDiagnostic(loc, format, ap, ErrorKind.error);
      }
  
      void verrorSupplemental(Loc loc, const(char)* format, va_list ap)
      {
!         vsupplementalDiagnostic(loc, format, ap, ErrorKind.error);
      }
  
      void vwarning(Loc loc, const(char)* format, va_list ap)
      {
!         vreportDiagnostic(loc, format, ap, ErrorKind.warning);
      }
  
      void vwarningSupplemental(Loc loc, const(char)* format, va_list ap)
      {
!         vsupplementalDiagnostic(loc, format, ap, ErrorKind.warning);
      }
  
      void vdeprecation(Loc loc, const(char)* format, va_list ap)
      {
!         vreportDiagnostic(loc, format, ap, ErrorKind.deprecation);
      }
  
      void vdeprecationSupplemental(Loc loc, const(char)* format, va_list ap)
      {
!         vsupplementalDiagnostic(loc, format, ap, ErrorKind.deprecation);
      }
  
      void vmessage(Loc loc, const(char)* format, va_list ap)
      {
!         vreportDiagnostic(loc, format, ap, ErrorKind.message);
      }
  }
  
*************** static if (__VERSION__ < 2092)
*** 159,165 ****
      {
          va_list ap;
          va_start(ap, format);
!         verrorReport(loc, format, ap, ErrorKind.error);
          va_end(ap);
      }
  else
--- 159,165 ----
      {
          va_list ap;
          va_start(ap, format);
!         vreportDiagnostic(loc, format, ap, ErrorKind.error);
          va_end(ap);
      }
  else
*************** else
*** 167,173 ****
      {
          va_list ap;
          va_start(ap, format);
!         verrorReport(loc, format, ap, ErrorKind.error);
          va_end(ap);
      }
  
--- 167,173 ----
      {
          va_list ap;
          va_start(ap, format);
!         vreportDiagnostic(loc, format, ap, ErrorKind.error);
          va_end(ap);
      }
  
*************** static if (__VERSION__ < 2092)
*** 186,192 ****
          const loc = SourceLoc(filename.toDString, linnum, charnum);
          va_list ap;
          va_start(ap, format);
!         verrorReport(loc, format, ap, ErrorKind.error);
          va_end(ap);
      }
  else
--- 186,192 ----
          const loc = SourceLoc(filename.toDString, linnum, charnum);
          va_list ap;
          va_start(ap, format);
!         vreportDiagnostic(loc, format, ap, ErrorKind.error);
          va_end(ap);
      }
  else
*************** else
*** 195,201 ****
          const loc = SourceLoc(filename.toDString, linnum, charnum);
          va_list ap;
          va_start(ap, format);
!         verrorReport(loc, format, ap, ErrorKind.error);
          va_end(ap);
      }
  
--- 195,201 ----
          const loc = SourceLoc(filename.toDString, linnum, charnum);
          va_list ap;
          va_start(ap, format);
!         vreportDiagnostic(loc, format, ap, ErrorKind.error);
          va_end(ap);
      }
  
*************** extern(C++) void errorBackend(const(char
*** 205,211 ****
      const loc = SourceLoc(filename.toDString, linnum, charnum);
      va_list ap;
      va_start(ap, format);
!     verrorReport(loc, format, ap, ErrorKind.error);
      va_end(ap);
  }
  
--- 205,211 ----
      const loc = SourceLoc(filename.toDString, linnum, charnum);
      va_list ap;
      va_start(ap, format);
!     vreportDiagnostic(loc, format, ap, ErrorKind.error);
      va_end(ap);
  }
  
*************** static if (__VERSION__ < 2092)
*** 222,228 ****
      {
          va_list ap;
          va_start(ap, format);
!         verrorReportSupplemental(loc, format, ap, ErrorKind.error);
          va_end(ap);
      }
  else
--- 222,228 ----
      {
          va_list ap;
          va_start(ap, format);
!         vsupplementalDiagnostic(loc, format, ap, ErrorKind.error);
          va_end(ap);
      }
  else
*************** else
*** 230,236 ****
      {
          va_list ap;
          va_start(ap, format);
!         verrorReportSupplemental(loc, format, ap, ErrorKind.error);
          va_end(ap);
      }
  
--- 230,236 ----
      {
          va_list ap;
          va_start(ap, format);
!         vsupplementalDiagnostic(loc, format, ap, ErrorKind.error);
          va_end(ap);
      }
  
*************** static if (__VERSION__ < 2092)
*** 246,252 ****
      {
          va_list ap;
          va_start(ap, format);
!         verrorReport(loc, format, ap, ErrorKind.warning);
          va_end(ap);
      }
  else
--- 246,252 ----
      {
          va_list ap;
          va_start(ap, format);
!         vreportDiagnostic(loc, format, ap, ErrorKind.warning);
          va_end(ap);
      }
  else
*************** else
*** 254,260 ****
      {
          va_list ap;
          va_start(ap, format);
!         verrorReport(loc, format, ap, ErrorKind.warning);
          va_end(ap);
      }
  
--- 254,260 ----
      {
          va_list ap;
          va_start(ap, format);
!         vreportDiagnostic(loc, format, ap, ErrorKind.warning);
          va_end(ap);
      }
  
*************** static if (__VERSION__ < 2092)
*** 271,277 ****
      {
          va_list ap;
          va_start(ap, format);
!         verrorReportSupplemental(loc, format, ap, ErrorKind.warning);
          va_end(ap);
      }
  else
--- 271,277 ----
      {
          va_list ap;
          va_start(ap, format);
!         vsupplementalDiagnostic(loc, format, ap, ErrorKind.warning);
          va_end(ap);
      }
  else
*************** else
*** 279,285 ****
      {
          va_list ap;
          va_start(ap, format);
!         verrorReportSupplemental(loc, format, ap, ErrorKind.warning);
          va_end(ap);
      }
  
--- 279,285 ----
      {
          va_list ap;
          va_start(ap, format);
!         vsupplementalDiagnostic(loc, format, ap, ErrorKind.warning);
          va_end(ap);
      }
  
*************** static if (__VERSION__ < 2092)
*** 296,302 ****
      {
          va_list ap;
          va_start(ap, format);
!         verrorReport(loc, format, ap, ErrorKind.deprecation);
          va_end(ap);
      }
  else
--- 296,302 ----
      {
          va_list ap;
          va_start(ap, format);
!         vreportDiagnostic(loc, format, ap, ErrorKind.deprecation);
          va_end(ap);
      }
  else
*************** else
*** 304,310 ****
      {
          va_list ap;
          va_start(ap, format);
!         verrorReport(loc, format, ap, ErrorKind.deprecation);
          va_end(ap);
      }
  
--- 304,310 ----
      {
          va_list ap;
          va_start(ap, format);
!         vreportDiagnostic(loc, format, ap, ErrorKind.deprecation);
          va_end(ap);
      }
  
*************** static if (__VERSION__ < 2092)
*** 321,327 ****
      {
          va_list ap;
          va_start(ap, format);
!         verrorReportSupplemental(loc, format, ap, ErrorKind.deprecation);
          va_end(ap);
      }
  else
--- 321,327 ----
      {
          va_list ap;
          va_start(ap, format);
!         vsupplementalDiagnostic(loc, format, ap, ErrorKind.deprecation);
          va_end(ap);
      }
  else
*************** else
*** 329,335 ****
      {
          va_list ap;
          va_start(ap, format);
!         verrorReportSupplemental(loc, format, ap, ErrorKind.deprecation);
          va_end(ap);
      }
  
--- 329,335 ----
      {
          va_list ap;
          va_start(ap, format);
!         vsupplementalDiagnostic(loc, format, ap, ErrorKind.deprecation);
          va_end(ap);
      }
  
*************** static if (__VERSION__ < 2092)
*** 346,352 ****
      {
          va_list ap;
          va_start(ap, format);
!         verrorReport(loc, format, ap, ErrorKind.message);
          va_end(ap);
      }
  else
--- 346,352 ----
      {
          va_list ap;
          va_start(ap, format);
!         vreportDiagnostic(loc, format, ap, ErrorKind.message);
          va_end(ap);
      }
  else
*************** else
*** 354,360 ****
      {
          va_list ap;
          va_start(ap, format);
!         verrorReport(loc, format, ap, ErrorKind.message);
          va_end(ap);
      }
  
--- 354,360 ----
      {
          va_list ap;
          va_start(ap, format);
!         vreportDiagnostic(loc, format, ap, ErrorKind.message);
          va_end(ap);
      }
  
*************** static if (__VERSION__ < 2092)
*** 369,375 ****
      {
          va_list ap;
          va_start(ap, format);
!         verrorReport(Loc.initial, format, ap, ErrorKind.message);
          va_end(ap);
      }
  else
--- 369,375 ----
      {
          va_list ap;
          va_start(ap, format);
!         vreportDiagnostic(Loc.initial, format, ap, ErrorKind.message);
          va_end(ap);
      }
  else
*************** else
*** 377,389 ****
      {
          va_list ap;
          va_start(ap, format);
!         verrorReport(Loc.initial, format, ap, ErrorKind.message);
          va_end(ap);
      }
  
  /**
   * The type of the diagnostic handler
!  * see verrorReport for arguments
   * Returns: true if error handling is done, false to continue printing to stderr
   */
  alias DiagnosticHandler = bool delegate(const ref SourceLoc location, Color headerColor, const(char)* header, const(char)* messageFormat, va_list args, const(char)* prefix1, const(char)* prefix2);
--- 377,389 ----
      {
          va_list ap;
          va_start(ap, format);
!         vreportDiagnostic(Loc.initial, format, ap, ErrorKind.message);
          va_end(ap);
      }
  
  /**
   * The type of the diagnostic handler
!  * see vreportDiagnostic for arguments
   * Returns: true if error handling is done, false to continue printing to stderr
   */
  alias DiagnosticHandler = bool delegate(const ref SourceLoc location, Color headerColor, const(char)* header, const(char)* messageFormat, va_list args, const(char)* prefix1, const(char)* prefix2);
*************** static if (__VERSION__ < 2092)
*** 406,412 ****
      {
          va_list ap;
          va_start(ap, format);
!         verrorReport(Loc.initial, format, ap, ErrorKind.tip);
          va_end(ap);
      }
  else
--- 406,412 ----
      {
          va_list ap;
          va_start(ap, format);
!         vreportDiagnostic(Loc.initial, format, ap, ErrorKind.tip);
          va_end(ap);
      }
  else
*************** else
*** 414,420 ****
      {
          va_list ap;
          va_start(ap, format);
!         verrorReport(Loc.initial, format, ap, ErrorKind.tip);
          va_end(ap);
      }
  
--- 414,420 ----
      {
          va_list ap;
          va_start(ap, format);
!         vreportDiagnostic(Loc.initial, format, ap, ErrorKind.tip);
          va_end(ap);
      }
  
*************** else
*** 432,444 ****
   *      p1          = additional message prefix
   *      p2          = additional message prefix
   */
! private extern(C++) void verrorReport(Loc loc, const(char)* format, va_list ap, ErrorKind kind, const(char)* p1 = null, const(char)* p2 = null)
  {
!     return verrorReport(loc.SourceLoc, format, ap, kind, p1, p2);
  }
  
  /// ditto
! private extern(C++) void verrorReport(const SourceLoc loc, const(char)* format, va_list ap, ErrorKind kind, const(char)* p1 = null, const(char)* p2 = null);
  
  /**
   * Implements $(D errorSupplemental), $(D warningSupplemental), and
--- 432,444 ----
   *      p1          = additional message prefix
   *      p2          = additional message prefix
   */
! private extern(C++) void vreportDiagnostic(Loc loc, const(char)* format, va_list ap, ErrorKind kind, const(char)* p1 = null, const(char)* p2 = null)
  {
!     return vreportDiagnostic(loc.SourceLoc, format, ap, kind, p1, p2);
  }
  
  /// ditto
! private extern(C++) void vreportDiagnostic(const SourceLoc loc, const(char)* format, va_list ap, ErrorKind kind, const(char)* p1 = null, const(char)* p2 = null);
  
  /**
   * Implements $(D errorSupplemental), $(D warningSupplemental), and
*************** private extern(C++) void verrorReport(co
*** 451,463 ****
   *      ap          = printf-style variadic arguments
   *      kind        = kind of error being printed
   */
! private extern(C++) void verrorReportSupplemental(Loc loc, const(char)* format, va_list ap, ErrorKind kind)
  {
!     return verrorReportSupplemental(loc.SourceLoc, format, ap, kind);
  }
  
  /// ditto
! private extern(C++) void verrorReportSupplemental(const SourceLoc loc, const(char)* format, va_list ap, ErrorKind kind);
  
  /**
   * The type of the fatal error handler
--- 451,463 ----
   *      ap          = printf-style variadic arguments
   *      kind        = kind of error being printed
   */
! private extern(C++) void vsupplementalDiagnostic(Loc loc, const(char)* format, va_list ap, ErrorKind kind)
  {
!     return vsupplementalDiagnostic(loc.SourceLoc, format, ap, kind);
  }
  
  /// ditto
! private extern(C++) void vsupplementalDiagnostic(const SourceLoc loc, const(char)* format, va_list ap, ErrorKind kind);
  
  /**
   * The type of the fatal error handler
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/escape.d gcc-16-20260208/gcc/d/dmd/escape.d
*** gcc-16-20260201/gcc/d/dmd/escape.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/escape.d	Sun Feb  8 22:32:07 2026
*************** import dmd.dscope;
*** 24,32 ****
--- 24,34 ----
  import dmd.dsymbol;
  import dmd.errors;
  import dmd.expression;
+ import dmd.expressionsem;
  import dmd.func;
  import dmd.funcsem;
  import dmd.globals : FeatureState;
+ import dmd.hdrgen : toErrMsg;
  import dmd.id;
  import dmd.identifier;
  import dmd.init;
*************** import dmd.printast;
*** 36,42 ****
  import dmd.rootobject;
  import dmd.safe;
  import dmd.tokens;
! import dmd.typesem : hasPointers, parameterStorageClass;
  import dmd.visitor;
  import dmd.arraytypes;
  
--- 38,44 ----
  import dmd.rootobject;
  import dmd.safe;
  import dmd.tokens;
! import dmd.typesem;
  import dmd.visitor;
  import dmd.arraytypes;
  
*************** private:
*** 46,59 ****
  package(dmd) struct EscapeState
  {
      // Maps `sequenceNumber` of a `VarDeclaration` to an object that contains the
!     // reason it failed to infer `scope`
      // https://issues.dlang.org/show_bug.cgi?id=23295
!     private __gshared RootObject[int] scopeInferFailure;
  
      /// Called by `initDMD` / `deinitializeDMD` to reset global state
      static void reset()
      {
!         scopeInferFailure = null;
      }
  }
  
--- 48,61 ----
  package(dmd) struct EscapeState
  {
      // Maps `sequenceNumber` of a `VarDeclaration` to an object that contains the
!     // reason it inferred or didn't infer `scope` for supplemental error messages
      // https://issues.dlang.org/show_bug.cgi?id=23295
!     private __gshared RootObject[int] scopeInferReason;
  
      /// Called by `initDMD` / `deinitializeDMD` to reset global state
      static void reset()
      {
!         scopeInferReason = null;
      }
  }
  
*************** bool checkAssocArrayLiteralEscape(ref Sc
*** 282,314 ****
  }
  
  /**
!  * A `scope` variable was assigned to non-scope parameter `v`.
!  * If applicable, print why the parameter was not inferred `scope`.
   *
   * Params:
   *    printFunc = error/deprecation print function to use
   *    v = parameter that was not inferred
   *    recursionLimit = recursion limit for printing the reason
   */
! private
! void printScopeFailure(E)(E printFunc, VarDeclaration v, int recursionLimit)
  {
      recursionLimit--;
      if (recursionLimit < 0 || !v)
          return;
  
!     if (RootObject* o = v.sequenceNumber in EscapeState.scopeInferFailure)
      {
          switch ((*o).dyncast())
          {
              case DYNCAST.expression:
                  Expression e = cast(Expression) *o;
!                 printFunc(e.loc, "which is not `scope` because of `%s`", e.toChars());
                  break;
              case DYNCAST.dsymbol:
                  VarDeclaration v1 = cast(VarDeclaration) *o;
!                 printFunc(v1.loc, "which is assigned to non-scope parameter `%s`", v1.toChars());
!                 printScopeFailure(printFunc, v1, recursionLimit);
                  break;
              default:
                  assert(0);
--- 284,321 ----
  }
  
  /**
!  * An error occured due to `v` either being or not being `scope`.
!  * If applicable, print why the `v` was inferred that way.
   *
   * Params:
   *    printFunc = error/deprecation print function to use
   *    v = parameter that was not inferred
   *    recursionLimit = recursion limit for printing the reason
+  *    positive = true for telling why v is scope, false for telling why v is not scope
   */
! public
! void printScopeReason(E)(E printFunc, VarDeclaration v, int recursionLimit, bool positive)
  {
      recursionLimit--;
      if (recursionLimit < 0 || !v)
          return;
  
!     if (RootObject* o = v.sequenceNumber in EscapeState.scopeInferReason)
      {
          switch ((*o).dyncast())
          {
              case DYNCAST.expression:
                  Expression e = cast(Expression) *o;
!                 if (positive)
!                     printFunc(e.loc, "`%s` inferred `scope` because of `%s`", v.toErrMsg(), e.toErrMsg());
!                 else
!                     printFunc(e.loc, "`%s` is not `scope` because of `%s`", v.toErrMsg(), e.toErrMsg());
                  break;
              case DYNCAST.dsymbol:
                  VarDeclaration v1 = cast(VarDeclaration) *o;
!                 assert(!positive);
!                 printFunc(v1.loc, "`%s` is assigned to non-scope parameter `%s`", v.toErrMsg(), v1.toErrMsg());
!                 printScopeReason(printFunc, v1, recursionLimit, positive);
                  break;
              default:
                  assert(0);
*************** bool checkParamArgumentEscape(ref Scope
*** 368,378 ****
              (desc ~ " `%s` assigned to non-scope anonymous parameter");
  
          if (isThis ?
!             sc.setUnsafeDIP1000(gag, arg.loc, msg, arg, fdc.toParent2(), fdc) :
!             sc.setUnsafeDIP1000(gag, arg.loc, msg, v, parId ? parId : fdc, fdc))
          {
              result = true;
!             printScopeFailure(previewSupplementalFunc(sc.isDeprecated(), sc.useDIP1000), vPar, 10);
          }
      }
  
--- 375,386 ----
              (desc ~ " `%s` assigned to non-scope anonymous parameter");
  
          if (isThis ?
!             sc.setUnsafeDIP1000(gag, arg.loc, vPar, msg, arg, fdc.toParent2(), fdc) :
!             sc.setUnsafeDIP1000(gag, arg.loc, vPar, msg, v, parId ? parId : fdc, fdc))
          {
              result = true;
!             printScopeReason(previewSupplementalFunc(sc.isDeprecated(), sc.useDIP1000), vPar, 10, false);
!             printScopeReason(previewSupplementalFunc(sc.isDeprecated(), sc.useDIP1000), v, 10, true);
          }
      }
  
*************** bool checkAssignEscape(ref Scope sc, Exp
*** 714,720 ****
              if (vaIsFirstRef && v.isParameter() && v.isReturn())
              {
                  // va=v, where v is `return scope`
!                 if (inferScope(va))
                      return;
              }
  
--- 722,728 ----
              if (vaIsFirstRef && v.isParameter() && v.isReturn())
              {
                  // va=v, where v is `return scope`
!                 if (inferScope(va, e))
                      return;
              }
  
*************** bool checkAssignEscape(ref Scope sc, Exp
*** 748,754 ****
  
              // v = scope, va should be scope as well
              const vaWasScope = va && va.isScope();
!             if (inferScope(va))
              {
                  // In case of `scope local = returnScopeParam`, do not infer return scope for `x`
                  if (!vaWasScope && v.isReturn() && !va.isReturn())
--- 756,762 ----
  
              // v = scope, va should be scope as well
              const vaWasScope = va && va.isScope();
!             if (inferScope(va, e))
              {
                  // In case of `scope local = returnScopeParam`, do not infer return scope for `x`
                  if (!vaWasScope && v.isReturn() && !va.isReturn())
*************** bool checkAssignEscape(ref Scope sc, Exp
*** 822,828 ****
          if (p != sc.func)
              return;
  
!         if (inferScope(va))
          {
              if (v.isReturn() && !va.isReturn())
                  va.storage_class |= STC.return_ | STC.returninferred;
--- 830,836 ----
          if (p != sc.func)
              return;
  
!         if (inferScope(va, e))
          {
              if (v.isReturn() && !va.isReturn())
                  va.storage_class |= STC.return_ | STC.returninferred;
*************** private bool checkReturnEscapeImpl(ref S
*** 1210,1217 ****
                  else
                  {
                      // https://issues.dlang.org/show_bug.cgi?id=17029
!                     result |= sc.setUnsafeDIP1000(gag, e.loc, "returning scope variable `%s`", v);
!                     return;
                  }
              }
          }
--- 1218,1229 ----
                  else
                  {
                      // https://issues.dlang.org/show_bug.cgi?id=17029
!                     if (sc.setUnsafeDIP1000(gag, e.loc, "returning scope variable `%s`", v))
!                     {
!                         printScopeReason(previewSupplementalFunc(sc.isDeprecated(), sc.useDIP1000), v, 10, true);
!                         result = true;
!                         return;
!                     }
                  }
              }
          }
*************** private bool checkReturnEscapeImpl(ref S
*** 1385,1400 ****
   *
   * Params:
   *      va = variable to infer scope for
   * Returns: `true` if succesful or already `scope`
   */
  private
! bool inferScope(VarDeclaration va)
  {
      if (!va)
          return false;
      if (!va.isDataseg() && va.maybeScope && !va.isScope())
      {
          //printf("inferring scope for %s\n", va.toChars());
          va.maybeScope = false;
          va.storage_class |= STC.scope_ | STC.scopeinferred;
          return true;
--- 1397,1415 ----
   *
   * Params:
   *      va = variable to infer scope for
+  *      reason = optional Expression that causes `va` to infer scope, used for supplemental error message
   * Returns: `true` if succesful or already `scope`
   */
  private
! bool inferScope(VarDeclaration va, RootObject reason)
  {
      if (!va)
          return false;
      if (!va.isDataseg() && va.maybeScope && !va.isScope())
      {
          //printf("inferring scope for %s\n", va.toChars());
+         if (reason)
+             EscapeState.scopeInferReason[va.sequenceNumber] = reason;
          va.maybeScope = false;
          va.storage_class |= STC.scope_ | STC.scopeinferred;
          return true;
*************** private void doNotInferScope(VarDeclarat
*** 2010,2016 ****
      {
          v.maybeScope = false;
          if (o && v.isParameter())
!             EscapeState.scopeInferFailure[v.sequenceNumber] = o;
      }
  }
  
--- 2025,2031 ----
      {
          v.maybeScope = false;
          if (o && v.isParameter())
!             EscapeState.scopeInferReason[v.sequenceNumber] = o;
      }
  }
  
*************** void finishScopeParamInference(FuncDecla
*** 2048,2054 ****
          foreach (u, p; f.parameterList)
          {
              auto v = (*funcdecl.parameters)[u];
!             if (!v.isScope() && v.type.hasPointers() && inferScope(v))
              {
                  //printf("Inferring scope for %s\n", v.toChars());
                  p.storageClass |= STC.scope_ | STC.scopeinferred;
--- 2063,2069 ----
          foreach (u, p; f.parameterList)
          {
              auto v = (*funcdecl.parameters)[u];
!             if (!v.isScope() && v.type.hasPointers() && inferScope(v, null))
              {
                  //printf("Inferring scope for %s\n", v.toChars());
                  p.storageClass |= STC.scope_ | STC.scopeinferred;
*************** void finishScopeParamInference(FuncDecla
*** 2058,2064 ****
  
      if (funcdecl.vthis)
      {
!         inferScope(funcdecl.vthis);
          f.isScopeQual = funcdecl.vthis.isScope();
          f.isScopeInferred = !!(funcdecl.vthis.storage_class & STC.scopeinferred);
      }
--- 2073,2079 ----
  
      if (funcdecl.vthis)
      {
!         inferScope(funcdecl.vthis, null);
          f.isScopeQual = funcdecl.vthis.isScope();
          f.isScopeInferred = !!(funcdecl.vthis.storage_class & STC.scopeinferred);
      }
*************** bool setUnsafeDIP1000(ref Scope sc, bool
*** 2199,2204 ****
--- 2214,2227 ----
      return setUnsafePreview(&sc, sc.useDIP1000, gag, loc, msg, args);
  }
  
+ /// Overload for scope violations that also stores the variable whose scope status caused the issue
+ private
+ bool setUnsafeDIP1000(ref Scope sc, bool gag, Loc loc, VarDeclaration scopeVar,
+     const(char)* msg, RootObject[] args...)
+ {
+     return setUnsafePreview(&sc, sc.useDIP1000, gag, loc, scopeVar, msg, args);
+ }
+ 
  /***************************************
   * Check that taking the address of `v` is `@safe`
   *
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/expression.d gcc-16-20260208/gcc/d/dmd/expression.d
*** gcc-16-20260201/gcc/d/dmd/expression.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/expression.d	Sun Feb  8 22:32:07 2026
*************** import core.stdc.stdarg;
*** 17,41 ****
  import core.stdc.stdio;
  import core.stdc.string;
  
- import dmd.aggregate;
  import dmd.arraytypes;
  import dmd.astenums;
  import dmd.ast_node;
- import dmd.ctfeexpr : isCtfeReferenceValid;
- import dmd.dcast : implicitConvTo;
  import dmd.dclass;
  import dmd.declaration;
- import dmd.dimport;
- import dmd.dmodule;
  import dmd.dstruct;
  import dmd.dsymbol;
  import dmd.dtemplate;
  import dmd.errors;
- import dmd.errorsink;
- import dmd.expressionsem : getDsymbol;
  import dmd.func;
  import dmd.globals;
! import dmd.hdrgen;
  import dmd.id;
  import dmd.identifier;
  import dmd.init;
--- 17,34 ----
  import core.stdc.stdio;
  import core.stdc.string;
  
  import dmd.arraytypes;
  import dmd.astenums;
  import dmd.ast_node;
  import dmd.dclass;
  import dmd.declaration;
  import dmd.dstruct;
  import dmd.dsymbol;
  import dmd.dtemplate;
  import dmd.errors;
  import dmd.func;
  import dmd.globals;
! import dmd.hdrgen : toChars;
  import dmd.id;
  import dmd.identifier;
  import dmd.init;
*************** import dmd.location;
*** 43,57 ****
  import dmd.mtype;
  import dmd.root.complex;
  import dmd.root.ctfloat;
- import dmd.common.outbuffer;
- import dmd.root.optional;
  import dmd.root.rmem;
  import dmd.rootobject;
  import dmd.root.string;
  import dmd.root.utf;
- import dmd.target;
  import dmd.tokens;
- import dmd.typesem : toHeadMutable, size, mutableOf, unSharedOf;
  import dmd.visitor;
  
  enum LOGSEMANTIC = false;
--- 36,46 ----
*************** inout(Expression) lastComma(inout Expres
*** 74,176 ****
  }
  
  /****************************************
-  * Expand tuples in-place.
-  *
-  * Example:
-  *     When there's a call `f(10, pair: AliasSeq!(20, 30), single: 40)`, the input is:
-  *         `exps =  [10, (20, 30), 40]`
-  *         `names = [null, "pair", "single"]`
-  *     The arrays will be modified to:
-  *         `exps =  [10, 20, 30, 40]`
-  *         `names = [null, "pair", null, "single"]`
-  *
-  * Params:
-  *     exps  = array of Expressions
-  *     names = optional array of names corresponding to Expressions
-  */
- void expandTuples(Expressions* exps, ArgumentLabels* names = null)
- {
-     //printf("expandTuples()\n");
-     if (exps is null)
-         return;
- 
-     if (names)
-     {
-         if (exps.length != names.length)
-         {
-             printf("exps.length = %d, names.length = %d\n", cast(int) exps.length, cast(int) names.length);
-             printf("exps = %s, names = %s\n", exps.toChars(), names.toChars());
-             if (exps.length > 0)
-                 printf("%s\n", (*exps)[0].loc.toChars());
-             assert(0);
-         }
-     }
- 
-     // At `index`, a tuple of length `length` is expanded. Insert corresponding nulls in `names`.
-     void expandNames(size_t index, size_t length)
-     {
-         if (names)
-         {
-             if (length == 0)
-             {
-                 names.remove(index);
-                 return;
-             }
-             foreach (i; 1 .. length)
-             {
-                 names.insert(index + i, ArgumentLabel(cast(Identifier) null, Loc.init));
-             }
-         }
-     }
- 
-     for (size_t i = 0; i < exps.length; i++)
-     {
-         Expression arg = (*exps)[i];
-         if (!arg)
-             continue;
- 
-         // Look for tuple with 0 members
-         if (auto e = arg.isTypeExp())
-         {
-             if (auto tt = e.type.toBasetype().isTypeTuple())
-             {
-                 if (!tt.arguments || tt.arguments.length == 0)
-                 {
-                     exps.remove(i);
-                     expandNames(i, 0);
-                     if (i == exps.length)
-                         return;
-                 }
-                 else // Expand a TypeTuple
-                 {
-                     exps.remove(i);
-                     auto texps = new Expressions(tt.arguments.length);
-                     foreach (j, a; *tt.arguments)
-                         (*texps)[j] = new TypeExp(e.loc, a.type);
-                     exps.insert(i, texps);
-                     expandNames(i, texps.length);
-                 }
-                 i--;
-                 continue;
-             }
-         }
- 
-         // Inline expand all the tuples
-         while (arg.op == EXP.tuple)
-         {
-             TupleExp te = cast(TupleExp)arg;
-             exps.remove(i); // remove arg
-             exps.insert(i, te.exps); // replace with tuple contents
-             expandNames(i, te.exps.length);
-             if (i == exps.length)
-                 return; // empty tuple, no more arguments
-             (*exps)[i] = Expression.combine(te.e0, (*exps)[i]);
-             arg = (*exps)[i];
-         }
-     }
- }
- 
- /****************************************
   * If `s` is a function template, i.e. the only member of a template
   * and that member is a function, return that template.
   * Params:
--- 63,68 ----
*************** DotIdExp typeDotIdExp(Loc loc, Type type
*** 210,285 ****
      return new DotIdExp(loc, new TypeExp(loc, type), ident);
  }
  
- /***************************************************
-  * Given an Expression, find the variable it really is.
-  *
-  * For example, `a[index]` is really `a`, and `s.f` is really `s`.
-  * Params:
-  *      e = Expression to look at
-  *      deref = number of dereferences encountered
-  * Returns:
-  *      variable if there is one, null if not
-  */
- VarDeclaration expToVariable(Expression e, out int deref)
- {
-     deref = 0;
-     while (1)
-     {
-         switch (e.op)
-         {
-             case EXP.variable:
-                 return e.isVarExp().var.isVarDeclaration();
- 
-             case EXP.dotVariable:
-                 e = e.isDotVarExp().e1;
-                 if (e.type.toBasetype().isTypeClass())
-                     deref++;
- 
-                 continue;
- 
-             case EXP.index:
-             {
-                 e = e.isIndexExp().e1;
-                 if (!e.type.toBasetype().isTypeSArray())
-                     deref++;
- 
-                 continue;
-             }
- 
-             case EXP.slice:
-             {
-                 e = e.isSliceExp().e1;
-                 if (!e.type.toBasetype().isTypeSArray())
-                     deref++;
- 
-                 continue;
-             }
- 
-             case EXP.super_:
-                 return e.isSuperExp().var.isVarDeclaration();
-             case EXP.this_:
-                 return e.isThisExp().var.isVarDeclaration();
- 
-             // Temporaries for rvalues that need destruction
-             // are of form: (T s = rvalue, s). For these cases
-             // we can just return var declaration of `s`. However,
-             // this is intentionally not calling `Expression.extractLast`
-             // because at this point we cannot infer the var declaration
-             // of more complex generated comma expressions such as the
-             // one for the array append hook.
-             case EXP.comma:
-             {
-                 if (auto ve = e.isCommaExp().e2.isVarExp())
-                     return ve.var.isVarDeclaration();
- 
-                 return null;
-             }
-             default:
-                 return null;
-         }
-     }
- }
- 
  enum OwnedBy : ubyte
  {
      code,          // normal code expression in AST
--- 102,107 ----
*************** extern (C++) abstract class Expression :
*** 471,534 ****
          return a;
      }
  
-     dinteger_t toInteger()
-     {
-         //printf("Expression %s\n", EXPtoString(op).ptr);
-         if (!type || !type.isTypeError())
-             error(loc, "integer constant expression expected instead of `%s`", toChars());
-         return 0;
-     }
- 
-     uinteger_t toUInteger()
-     {
-         //printf("Expression %s\n", EXPtoString(op).ptr);
-         return cast(uinteger_t)toInteger();
-     }
- 
-     real_t toReal()
-     {
-         error(loc, "floating point constant expression expected instead of `%s`", toChars());
-         return CTFloat.zero;
-     }
- 
-     real_t toImaginary()
-     {
-         error(loc, "floating point constant expression expected instead of `%s`", toChars());
-         return CTFloat.zero;
-     }
- 
-     complex_t toComplex()
-     {
-         error(loc, "floating point constant expression expected instead of `%s`", toChars());
-         return complex_t(CTFloat.zero);
-     }
- 
-     StringExp toStringExp()
-     {
-         return null;
-     }
- 
-     /***************************************
-      * Return !=0 if expression is an lvalue.
-      */
-     bool isLvalue()
-     {
-         return false;
-     }
- 
-     /****************************************
-      * Check that the expression has a valid type.
-      * If not, generates an error "... has no type".
-      * Returns:
-      *      true if the expression is not valid.
-      * Note:
-      *      When this function returns true, `checkValue()` should also return true.
-      */
-     bool checkType()
-     {
-         return false;
-     }
- 
      /******************************
       * If this is a reference, dereference it.
       */
--- 293,298 ----
*************** extern (C++) abstract class Expression :
*** 564,585 ****
          assert(0);
      }
  
-     /******
-      * Identical, not just equal. I.e. NaNs with different bit patterns are not identical
-      */
-     bool isIdentical(const Expression e) const
-     {
-         return equals(e);
-     }
- 
- 
-     /// Statically evaluate this expression to a `bool` if possible
-     /// Returns: an optional thath either contains the value or is empty
-     Optional!bool toBool()
-     {
-         return typeof(return)();
-     }
- 
      bool hasCode()
      {
          return true;
--- 328,333 ----
*************** extern (C++) abstract class Expression :
*** 738,764 ****
      }
  }
  
  /***********************************************************
   * A compile-time known integer value
   */
  extern (C++) final class IntegerExp : Expression
  {
!     private dinteger_t value;
  
      extern (D) this(Loc loc, dinteger_t value, Type type)
      {
          super(loc, EXP.int64);
          //printf("IntegerExp(value = %lld, type = '%s')\n", value, type ? type.toChars() : "");
          assert(type);
!         if (!type.isScalar())
!         {
!             //printf("%s, loc = %d\n", toChars(), loc.linnum);
!             if (type.ty != Terror)
!                 error(loc, "integral constant must be scalar type, not `%s`", type.toChars());
!             type = Type.terror;
!         }
          this.type = type;
!         this.value = normalize(type.toBasetype().ty, value);
      }
  
      extern (D) this(dinteger_t value)
--- 486,522 ----
      }
  }
  
+ // Approximate Non-semantic version of the `Type.isScalar` function in `typesem`
+ bool _isRoughlyScalar(Type _this)
+ {
+     if (auto tb = _this.isTypeBasic())
+         return (tb.flags & TFlags.integral | TFlags.floating) != 0;
+     else if (_this.ty == Tenum || _this.ty == Tpointer) // the enum is possibly scalar
+         return true;
+     return false;
+ }
+ 
  /***********************************************************
   * A compile-time known integer value
   */
  extern (C++) final class IntegerExp : Expression
  {
!     dinteger_t value;
  
      extern (D) this(Loc loc, dinteger_t value, Type type)
      {
          super(loc, EXP.int64);
          //printf("IntegerExp(value = %lld, type = '%s')\n", value, type ? type.toChars() : "");
          assert(type);
! 
!         /* Verify no path to the following assert failure.
!          * Weirdly, the isScalar() includes floats - see enumsem.enumMemberSemantic() for the
!          * base type. This is possibly a bug.
!          */
!         assert(_isRoughlyScalar(type) || type.ty == Terror);
! 
          this.type = type;
!         this.value = normalize(type.toBaseTypeNonSemantic().ty, value);
      }
  
      extern (D) this(dinteger_t value)
*************** extern (C++) final class IntegerExp : Ex
*** 773,825 ****
          return new IntegerExp(loc, value, type);
      }
  
-     override bool equals(const RootObject o) const
-     {
-         if (this == o)
-             return true;
-         if (auto ne = (cast(Expression)o).isIntegerExp())
-         {
-             if (type.toHeadMutable().equals(ne.type.toHeadMutable()) && value == ne.value)
-             {
-                 return true;
-             }
-         }
-         return false;
-     }
- 
-     override dinteger_t toInteger()
-     {
-         // normalize() is necessary until we fix all the paints of 'type'
-         return value = normalize(type.toBasetype().ty, value);
-     }
- 
-     override real_t toReal()
-     {
-         // normalize() is necessary until we fix all the paints of 'type'
-         const ty = type.toBasetype().ty;
-         const val = normalize(ty, value);
-         value = val;
-         return (ty == Tuns64)
-             ? real_t(cast(ulong)val)
-             : real_t(cast(long)val);
-     }
- 
-     override real_t toImaginary()
-     {
-         return CTFloat.zero;
-     }
- 
-     override complex_t toComplex()
-     {
-         return complex_t(toReal());
-     }
- 
-     override Optional!bool toBool()
-     {
-         bool r = toInteger() != 0;
-         return typeof(return)(r);
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 531,536 ----
*************** extern (C++) final class IntegerExp : Ex
*** 832,838 ****
  
      extern (D) void setInteger(dinteger_t value)
      {
!         this.value = normalize(type.toBasetype().ty, value);
      }
  
      extern (D) static dinteger_t normalize(TY ty, dinteger_t value)
--- 543,549 ----
  
      extern (D) void setInteger(dinteger_t value)
      {
!         this.value = normalize(type.toBaseTypeNonSemantic().ty, value);
      }
  
      extern (D) static dinteger_t normalize(TY ty, dinteger_t value)
*************** extern (C++) final class IntegerExp : Ex
*** 840,845 ****
--- 551,558 ----
          /* 'Normalize' the value of the integer to be in range of the type
           */
          dinteger_t result;
+         if (ty == Tpointer)
+             ty = Type.tsize_t.ty;
          switch (ty)
          {
          case Tbool:
*************** extern (C++) final class IntegerExp : Ex
*** 881,895 ****
              result = cast(ulong)value;
              break;
  
-         case Tpointer:
-             if (target.ptrsize == 8)
-                 goto case Tuns64;
-             if (target.ptrsize == 4)
-                 goto case Tuns32;
-             if (target.ptrsize == 2)
-                 goto case Tuns16;
-             assert(0);
- 
          default:
              break;
          }
--- 594,599 ----
*************** extern (C++) final class RealExp : Expre
*** 1022,1093 ****
          return new RealExp(loc, value, type);
      }
  
-     /********************************
-      * Test to see if two reals are the same.
-      * Regard NaN's as equivalent.
-      * Regard +0 and -0 as different.
-      * Params:
-      *      x1 = first operand
-      *      x2 = second operand
-      * Returns:
-      *      true if x1 is x2
-      *      else false
-      */
-     private static bool RealIdentical(real_t x1, real_t x2) @safe
-     {
-         return (CTFloat.isNaN(x1) && CTFloat.isNaN(x2)) || CTFloat.isIdentical(x1, x2);
-     }
-     override bool equals(const RootObject o) const
-     {
-         if (this == o)
-             return true;
-         if (auto ne = (cast(Expression)o).isRealExp())
-         {
-             if (type.toHeadMutable().equals(ne.type.toHeadMutable()) && RealIdentical(value, ne.value))
-             {
-                 return true;
-             }
-         }
-         return false;
-     }
- 
-     override bool isIdentical(const Expression e) const
-     {
-         if (!equals(e))
-             return false;
-         return CTFloat.isIdentical(value, e.isRealExp().value);
-     }
- 
-     override dinteger_t toInteger()
-     {
-         return cast(sinteger_t)toReal();
-     }
- 
-     override uinteger_t toUInteger()
-     {
-         return cast(uinteger_t)toReal();
-     }
- 
-     override real_t toReal()
-     {
-         return type.isReal() ? value : CTFloat.zero;
-     }
- 
-     override real_t toImaginary()
-     {
-         return type.isReal() ? CTFloat.zero : value;
-     }
- 
-     override complex_t toComplex()
-     {
-         return complex_t(toReal(), toImaginary());
-     }
- 
-     override Optional!bool toBool()
-     {
-         return typeof(return)(!!value);
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 726,731 ----
*************** extern (C++) final class ComplexExp : Ex
*** 1114,1175 ****
          return new ComplexExp(loc, value, type);
      }
  
-     override bool equals(const RootObject o) const
-     {
-         if (this == o)
-             return true;
-         if (auto ne = (cast(Expression)o).isComplexExp())
-         {
-             if (type.toHeadMutable().equals(ne.type.toHeadMutable()) &&
-                 RealExp.RealIdentical(creall(value), creall(ne.value)) &&
-                 RealExp.RealIdentical(cimagl(value), cimagl(ne.value)))
-             {
-                 return true;
-             }
-         }
-         return false;
-     }
- 
-     override bool isIdentical(const Expression e) const
-     {
-         if (!equals(e))
-             return false;
-         // equals() regards different NaN values as 'equals'
-         auto c = e.isComplexExp();
-         return CTFloat.isIdentical(creall(value), creall(c.value)) &&
-                CTFloat.isIdentical(cimagl(value), cimagl(c.value));
-     }
- 
-     override dinteger_t toInteger()
-     {
-         return cast(sinteger_t)toReal();
-     }
- 
-     override uinteger_t toUInteger()
-     {
-         return cast(uinteger_t)toReal();
-     }
- 
-     override real_t toReal()
-     {
-         return creall(value);
-     }
- 
-     override real_t toImaginary()
-     {
-         return cimagl(value);
-     }
- 
-     override complex_t toComplex()
-     {
-         return value;
-     }
- 
-     override Optional!bool toBool()
-     {
-         return typeof(return)(!!value);
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 752,757 ----
*************** extern (C++) class IdentifierExp : Expre
*** 1199,1209 ****
          return new IdentifierExp(loc, ident);
      }
  
-     override final bool isLvalue()
-     {
-         return !this.rvalue;
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 781,786 ----
*************** extern (C++) final class DsymbolExp : Ex
*** 1243,1253 ****
          this.hasOverloads = hasOverloads;
      }
  
-     override bool isLvalue()
-     {
-         return !rvalue;
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 820,825 ----
*************** extern (C++) class ThisExp : Expression
*** 1282,1299 ****
          return r;
      }
  
-     override Optional!bool toBool()
-     {
-         // `this` is never null (what about structs?)
-         return typeof(return)(true);
-     }
- 
-     override final bool isLvalue()
-     {
-         // Class `this` should be an rvalue; struct `this` should be an lvalue.
-         return !rvalue && type.toBasetype().ty != Tclass;
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 854,859 ----
*************** extern (C++) final class NullExp : Expre
*** 1329,1364 ****
          this.type = type;
      }
  
-     override bool equals(const RootObject o) const
-     {
-         if (auto e = o.isExpression())
-         {
-             if (e.op == EXP.null_ && type.equals(e.type))
-             {
-                 return true;
-             }
-         }
-         return false;
-     }
- 
-     override Optional!bool toBool()
-     {
-         // null in any type is false
-         return typeof(return)(false);
-     }
- 
-     override StringExp toStringExp()
-     {
-         if (this.type.implicitConvTo(Type.tstring))
-         {
-             auto se = new StringExp(loc, (cast(char*)mem.xcalloc(1, 1))[0 .. 0]);
-             se.type = Type.tstring;
-             return se;
-         }
- 
-         return null;
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 889,894 ----
*************** extern (C++) final class StringExp : Exp
*** 1427,1454 ****
          return new StringExp(loc, string[0 .. len]);
      }
  
-     override bool equals(const RootObject o) const
-     {
-         //printf("StringExp::equals('%s') %s\n", o.toChars(), toChars());
-         if (auto e = o.isExpression())
-         {
-             if (auto se = e.isStringExp())
-             {
-                 return compare(se) == 0;
-             }
-         }
-         return false;
-     }
- 
      /**********************************
       * Return the number of code units the string would be if it were re-encoded
       * as tynto.
       * Params:
       *      tynto = code unit type of the target encoding
       * Returns:
       *      number of code units
       */
!     size_t numberOfCodeUnits(int tynto = 0) const
      {
          int encSize;
          switch (tynto)
--- 957,972 ----
          return new StringExp(loc, string[0 .. len]);
      }
  
      /**********************************
       * Return the number of code units the string would be if it were re-encoded
       * as tynto.
       * Params:
       *      tynto = code unit type of the target encoding
+      *      s = set to error message on invalid string
       * Returns:
       *      number of code units
       */
!     extern (D) size_t numberOfCodeUnits(int tynto, out .string s) const
      {
          int encSize;
          switch (tynto)
*************** extern (C++) final class StringExp : Exp
*** 1471,1481 ****
          case 1:
              for (size_t u = 0; u < len;)
              {
!                 if (const s = utf_decodeChar(string[0 .. len], u, c))
!                 {
!                     error(loc, "%.*s", cast(int)s.length, s.ptr);
                      return 0;
-                 }
                  result += utf_codeLength(encSize, c);
              }
              break;
--- 989,997 ----
          case 1:
              for (size_t u = 0; u < len;)
              {
!                 s = utf_decodeChar(string[0 .. len], u, c);
!                 if (s)
                      return 0;
                  result += utf_codeLength(encSize, c);
              }
              break;
*************** extern (C++) final class StringExp : Exp
*** 1483,1493 ****
          case 2:
              for (size_t u = 0; u < len;)
              {
!                 if (const s = utf_decodeWchar(wstring[0 .. len], u, c))
!                 {
!                     error(loc, "%.*s", cast(int)s.length, s.ptr);
                      return 0;
-                 }
                  result += utf_codeLength(encSize, c);
              }
              break;
--- 999,1007 ----
          case 2:
              for (size_t u = 0; u < len;)
              {
!                 s = utf_decodeWchar(wstring[0 .. len], u, c);
!                 if (s)
                      return 0;
                  result += utf_codeLength(encSize, c);
              }
              break;
*************** extern (C++) final class StringExp : Exp
*** 1596,1607 ****
          }
      }
  
-     override StringExp toStringExp()
-     {
-         return this;
-     }
- 
- 
      /**
       * Compare two `StringExp` by length, then value
       *
--- 1110,1115 ----
*************** extern (C++) final class StringExp : Exp
*** 1631,1685 ****
  
          assert(this.sz == se2.sz, "Comparing string expressions of different sizes");
          //printf("sz = %d, len1 = %d, len2 = %d\n", sz, cast(int)len1, cast(int)len2);
!         if (len1 == len2)
          {
!             switch (sz)
!             {
!             case 1:
!                 return memcmp(string, se2.string, len1);
  
!             case 2:
                  {
!                     wchar* s1 = cast(wchar*)string;
!                     wchar* s2 = cast(wchar*)se2.string;
!                     foreach (u; 0 .. len)
!                     {
!                         if (s1[u] != s2[u])
!                             return s1[u] - s2[u];
!                     }
                  }
!                 break;
!             case 4:
                  {
!                     dchar* s1 = cast(dchar*)string;
!                     dchar* s2 = cast(dchar*)se2.string;
!                     foreach (u; 0 .. len)
!                     {
!                         if (s1[u] != s2[u])
!                             return s1[u] - s2[u];
!                     }
                  }
-                 break;
-             default:
-                 assert(0);
              }
          }
!         return cast(int)(len1 - len2);
!     }
! 
!     override Optional!bool toBool()
!     {
!         // Keep the old behaviour for this refactoring
!         // Should probably match language spec instead and check for length
!         return typeof(return)(true);
!     }
! 
!     override bool isLvalue()
!     {
!         /* string literal is rvalue in default, but
!          * conversion to reference of static array is only allowed.
!          */
!         return !rvalue && (type && type.toBasetype().ty == Tsarray);
      }
  
      /********************************
--- 1139,1177 ----
  
          assert(this.sz == se2.sz, "Comparing string expressions of different sizes");
          //printf("sz = %d, len1 = %d, len2 = %d\n", sz, cast(int)len1, cast(int)len2);
!         if (len1 != len2)
!             return cast(int)(len1 - len2);
!         switch (sz)
          {
!         case 1:
!             return memcmp(string, se2.string, len1);
  
!         case 2:
!             {
!                 wchar* s1 = cast(wchar*)string;
!                 wchar* s2 = cast(wchar*)se2.string;
!                 foreach (u; 0 .. len)
                  {
!                     if (s1[u] != s2[u])
!                         return s1[u] - s2[u];
                  }
!             }
!             break;
!         case 4:
!             {
!                 dchar* s1 = cast(dchar*)string;
!                 dchar* s2 = cast(dchar*)se2.string;
!                 foreach (u; 0 .. len)
                  {
!                     if (s1[u] != s2[u])
!                         return s1[u] - s2[u];
                  }
              }
+             break;
+         default:
+             assert(0);
          }
!         return 0;
      }
  
      /********************************
*************** extern (C++) final class TupleExp : Expr
*** 1808,1841 ****
      {
          super(loc, EXP.tuple);
          this.exps = new Expressions();
! 
!         this.exps.reserve(tup.objects.length);
!         foreach (o; *tup.objects)
!         {
!             if (Dsymbol s = getDsymbol(o))
!             {
!                 /* If tuple element represents a symbol, translate to DsymbolExp
!                  * to supply implicit 'this' if needed later.
!                  */
!                 Expression e = new DsymbolExp(loc, s);
!                 this.exps.push(e);
!             }
!             else if (auto eo = o.isExpression())
!             {
!                 auto e = eo.copy();
!                 e.loc = loc;    // https://issues.dlang.org/show_bug.cgi?id=15669
!                 this.exps.push(e);
!             }
!             else if (auto t = o.isType())
!             {
!                 Expression e = new TypeExp(loc, t);
!                 this.exps.push(e);
!             }
!             else
!             {
!                 error(loc, "`%s` is not an expression", o.toChars());
!             }
!         }
      }
  
      static TupleExp create(Loc loc, Expressions* exps) @safe
--- 1300,1306 ----
      {
          super(loc, EXP.tuple);
          this.exps = new Expressions();
!         // the rest of the constructor is moved to expressionsem.d in fillTupleExpExps function
      }
  
      static TupleExp create(Loc loc, Expressions* exps) @safe
*************** extern (C++) final class TupleExp : Expr
*** 1848,1875 ****
          return new TupleExp(loc, e0 ? e0.syntaxCopy() : null, arraySyntaxCopy(exps));
      }
  
-     override bool equals(const RootObject o) const
-     {
-         if (this == o)
-             return true;
-         if (auto e = o.isExpression())
-             if (auto te = e.isTupleExp())
-             {
-                 if (exps.length != te.exps.length)
-                     return false;
-                 if (e0 && !e0.equals(te.e0) || !e0 && te.e0)
-                     return false;
-                 foreach (i, e1; *exps)
-                 {
-                     auto e2 = (*te.exps)[i];
-                     if (!e1.equals(e2))
-                         return false;
-                 }
-                 return true;
-             }
-         return false;
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 1313,1318 ----
*************** extern (C++) final class ArrayLiteralExp
*** 1935,1970 ****
              arraySyntaxCopy(elements));
      }
  
-     override bool equals(const RootObject o) const
-     {
-         if (this == o)
-             return true;
-         auto e = o.isExpression();
-         if (!e)
-             return false;
-         if (auto ae = e.isArrayLiteralExp())
-         {
-             if (elements.length != ae.elements.length)
-                 return false;
-             if (elements.length == 0 && !type.equals(ae.type))
-             {
-                 return false;
-             }
- 
-             foreach (i, e1; *elements)
-             {
-                 auto e2 = (*ae.elements)[i];
-                 auto e1x = e1 ? e1 : basis;
-                 auto e2x = e2 ? e2 : ae.basis;
- 
-                 if (e1x != e2x && (!e1x || !e2x || !e1x.equals(e2x)))
-                     return false;
-             }
-             return true;
-         }
-         return false;
-     }
- 
      Expression getElement(size_t i) // use opIndex instead
      {
          return this[i];
--- 1378,1383 ----
*************** extern (C++) final class ArrayLiteralExp
*** 1976,2040 ****
          return el ? el : basis;
      }
  
-     override Optional!bool toBool()
-     {
-         size_t dim = elements ? elements.length : 0;
-         return typeof(return)(dim != 0);
-     }
- 
-     override StringExp toStringExp()
-     {
-         TY telem = type.nextOf().toBasetype().ty;
-         if (telem.isSomeChar || (telem == Tvoid && (!elements || elements.length == 0)))
-         {
-             ubyte sz = 1;
-             if (telem == Twchar)
-                 sz = 2;
-             else if (telem == Tdchar)
-                 sz = 4;
- 
-             OutBuffer buf;
-             if (elements)
-             {
-                 foreach (i; 0 .. elements.length)
-                 {
-                     auto ch = this[i];
-                     if (ch.op != EXP.int64)
-                         return null;
-                     if (sz == 1)
-                         buf.writeByte(cast(ubyte)ch.toInteger());
-                     else if (sz == 2)
-                         buf.writeword(cast(uint)ch.toInteger());
-                     else
-                         buf.write4(cast(uint)ch.toInteger());
-                 }
-             }
-             char prefix;
-             if (sz == 1)
-             {
-                 prefix = 'c';
-                 buf.writeByte(0);
-             }
-             else if (sz == 2)
-             {
-                 prefix = 'w';
-                 buf.writeword(0);
-             }
-             else
-             {
-                 prefix = 'd';
-                 buf.write4(0);
-             }
- 
-             const size_t len = buf.length / sz - 1;
-             auto se = new StringExp(loc, buf.extractSlice()[0 .. len * sz], len, sz, prefix);
-             se.sz = sz;
-             se.type = type;
-             return se;
-         }
-         return null;
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 1389,1394 ----
*************** extern (C++) final class AssocArrayLiter
*** 2064,2109 ****
          this.values = values;
      }
  
-     override bool equals(const RootObject o) const
-     {
-         if (this == o)
-             return true;
-         auto e = o.isExpression();
-         if (!e)
-             return false;
-         if (auto ae = e.isAssocArrayLiteralExp())
-         {
-             if (keys.length != ae.keys.length)
-                 return false;
-             size_t count = 0;
-             foreach (i, key; *keys)
-             {
-                 foreach (j, akey; *ae.keys)
-                 {
-                     if (key.equals(akey))
-                     {
-                         if (!(*values)[i].equals((*ae.values)[j]))
-                             return false;
-                         ++count;
-                     }
-                 }
-             }
-             return count == keys.length;
-         }
-         return false;
-     }
- 
      override AssocArrayLiteralExp syntaxCopy()
      {
          return new AssocArrayLiteralExp(loc, arraySyntaxCopy(keys), arraySyntaxCopy(values));
      }
  
-     override Optional!bool toBool()
-     {
-         size_t dim = keys.length;
-         return typeof(return)(dim != 0);
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 1418,1428 ----
*************** extern (C++) final class StructLiteralEx
*** 2180,2209 ****
          return new StructLiteralExp(loc, sd, cast(Expressions*)elements, stype);
      }
  
-     override bool equals(const RootObject o) const
-     {
-         if (this == o)
-             return true;
-         auto e = o.isExpression();
-         if (!e)
-             return false;
-         if (auto se = e.isStructLiteralExp())
-         {
-             if (!type.equals(se.type))
-                 return false;
-             if (elements.length != se.elements.length)
-                 return false;
-             foreach (i, e1; *elements)
-             {
-                 auto e2 = (*se.elements)[i];
-                 if (e1 != e2 && (!e1 || !e2 || !e1.equals(e2)))
-                     return false;
-             }
-             return true;
-         }
-         return false;
-     }
- 
      override StructLiteralExp syntaxCopy()
      {
          auto exp = new StructLiteralExp(loc, sd, arraySyntaxCopy(elements), type ? type : stype);
--- 1499,1504 ----
*************** extern (C++) final class StructLiteralEx
*** 2211,2247 ****
          return exp;
      }
  
-     /************************************
-      * Get index of field.
-      * Returns -1 if not found.
-      */
-     extern (D) int getFieldIndex(Type type, uint offset)
-     {
-         /* Find which field offset is by looking at the field offsets
-          */
-         if (elements.length)
-         {
-             const sz = type.size();
-             if (sz == SIZE_INVALID)
-                 return -1;
-             foreach (i, v; sd.fields)
-             {
-                 if (offset == v.offset && sz == v.type.size())
-                 {
-                     /* context fields might not be filled. */
-                     if (i >= sd.nonHiddenFields())
-                         return cast(int)i;
-                     if (auto e = (*elements)[i])
-                     {
-                         return cast(int)i;
-                     }
-                     break;
-                 }
-             }
-         }
-         return -1;
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 1506,1511 ----
*************** extern (C++) final class TypeExp : Expre
*** 2287,2298 ****
          return new TypeExp(loc, type.syntaxCopy());
      }
  
-     override bool checkType()
-     {
-         error(loc, "type `%s` is not an expression", toChars());
-         return true;
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 1551,1556 ----
*************** extern (C++) final class ScopeExp : Expr
*** 2325,2351 ****
          return new ScopeExp(loc, sds.syntaxCopy(null));
      }
  
-     override bool checkType()
-     {
-         if (sds.isPackage())
-         {
-             error(loc, "%s `%s` has no type", sds.kind(), sds.toChars());
-             return true;
-         }
-         if (auto ti = sds.isTemplateInstance())
-         {
-             //assert(ti.needsTypeInference(sc));
-             if (ti.tempdecl &&
-                 ti.semantictiargsdone &&
-                 ti.semanticRun == PASS.initial)
-             {
-                 error(loc, "partial %s `%s` has no type", sds.kind(), toChars());
-                 return true;
-             }
-         }
-         return false;
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 1583,1588 ----
*************** extern (C++) final class TemplateExp : E
*** 2368,2384 ****
          this.fd = fd;
      }
  
-     override bool isLvalue()
-     {
-         return fd !is null;
-     }
- 
-     override bool checkType()
-     {
-         error(loc, "%s `%s` has no type", td.kind(), toChars());
-         return true;
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 1605,1610 ----
*************** extern (C++) final class SymOffExp : Sym
*** 2504,2528 ****
      {
          if (auto v = var.isVarDeclaration())
          {
!             // FIXME: This error report will never be handled anyone.
!             // It should be done before the SymOffExp construction.
!             if (v.needThis())
!             {
!                 auto t = v.isThis();
!                 assert(t);
!                 .error(loc, "taking the address of non-static variable `%s` requires an instance of `%s`", v.toChars(), t.toChars());
!             }
              hasOverloads = false;
          }
          super(loc, EXP.symbolOffset, var, hasOverloads);
          this.offset = offset;
      }
  
-     override Optional!bool toBool()
-     {
-         return typeof(return)(true);
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 1730,1742 ----
      {
          if (auto v = var.isVarDeclaration())
          {
!             assert(!v.needThis()); // make sure the error message is no longer necessary
              hasOverloads = false;
          }
          super(loc, EXP.symbolOffset, var, hasOverloads);
          this.offset = offset;
      }
  
      override void accept(Visitor v)
      {
          v.visit(this);
*************** extern (C++) final class VarExp : Symbol
*** 2551,2577 ****
          return new VarExp(loc, var, hasOverloads);
      }
  
-     override bool equals(const RootObject o) const
-     {
-         if (this == o)
-             return true;
-         if (auto ne = o.isExpression().isVarExp())
-         {
-             if (type.toHeadMutable().equals(ne.type.toHeadMutable()) && var == ne.var)
-             {
-                 return true;
-             }
-         }
-         return false;
-     }
- 
-     override bool isLvalue()
-     {
-         if (rvalue || var.storage_class & (STC.lazy_ | STC.rvalue | STC.manifest))
-             return false;
-         return true;
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 1765,1770 ----
*************** extern (C++) final class OverExp : Expre
*** 2593,2603 ****
          type = Type.tvoid;
      }
  
-     override bool isLvalue()
-     {
-         return true;
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 1786,1791 ----
*************** extern (C++) final class FuncExp : Expre
*** 2629,2648 ****
          assert(fd.fbody);
      }
  
-     override bool equals(const RootObject o) const
-     {
-         if (this == o)
-             return true;
-         auto e = o.isExpression();
-         if (!e)
-             return false;
-         if (auto fe = e.isFuncExp())
-         {
-             return fd == fe.fd;
-         }
-         return false;
-     }
- 
      override FuncExp syntaxCopy()
      {
          if (td)
--- 1817,1822 ----
*************** extern (C++) final class FuncExp : Expre
*** 2654,2669 ****
          return new FuncExp(loc, fd);
      }
  
-     override bool checkType()
-     {
-         if (td)
-         {
-             error(loc, "template lambda has no type");
-             return true;
-         }
-         return false;
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 1828,1833 ----
*************** extern (C++) class BinAssignExp : BinExp
*** 2913,2923 ****
          super(loc, op, e1, e2);
      }
  
-     override final bool isLvalue()
-     {
-         return !rvalue;
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 2077,2082 ----
*************** extern (C++) final class MixinExp : Expr
*** 2944,2971 ****
          return new MixinExp(loc, arraySyntaxCopy(exps));
      }
  
-     override bool equals(const RootObject o) const
-     {
-         if (this == o)
-             return true;
-         auto e = o.isExpression();
-         if (!e)
-             return false;
-         if (auto ce = e.isMixinExp())
-         {
-             if (exps.length != ce.exps.length)
-                 return false;
-             foreach (i, e1; *exps)
-             {
-                 auto e2 = (*ce.exps)[i];
-                 if (e1 != e2 && (!e1 || !e2 || !e1.equals(e2)))
-                     return false;
-             }
-             return true;
-         }
-         return false;
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 2103,2108 ----
*************** extern (C++) final class DotTemplateExp
*** 3081,3092 ****
          this.td = td;
      }
  
-     override bool checkType()
-     {
-         error(loc, "%s `%s` has no type", td.kind(), toChars());
-         return true;
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 2218,2223 ----
*************** extern (C++) final class DotVarExp : Una
*** 3111,3126 ****
          this.hasOverloads = hasOverloads;
      }
  
-     override bool isLvalue()
-     {
-         if (rvalue)
-             return false;
-         if (e1.op != EXP.structLiteral)
-             return true;
-         auto vd = var.isVarDeclaration();
-         return !(vd && vd.isField());
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 2242,2247 ----
*************** extern (C++) final class DotTemplateInst
*** 3134,3168 ****
  {
      TemplateInstance ti;
  
-     extern (D) this(Loc loc, Expression e, Identifier name, Objects* tiargs)
-     {
-         super(loc, EXP.dotTemplateInstance, e);
-         //printf("DotTemplateInstanceExp()\n");
-         this.ti = new TemplateInstance(loc, name, tiargs);
-     }
- 
      extern (D) this(Loc loc, Expression e, TemplateInstance ti) @safe
      {
          super(loc, EXP.dotTemplateInstance, e);
          this.ti = ti;
      }
  
!     override DotTemplateInstanceExp syntaxCopy()
      {
!         return new DotTemplateInstanceExp(loc, e1.syntaxCopy(), ti.name, TemplateInstance.arraySyntaxCopy(ti.tiargs));
      }
  
!     override bool checkType()
      {
!         // Same logic as ScopeExp.checkType()
!         if (ti.tempdecl &&
!             ti.semantictiargsdone &&
!             ti.semanticRun == PASS.initial)
!         {
!             error(loc, "partial %s `%s` has no type", ti.kind(), toChars());
!             return true;
!         }
!         return false;
      }
  
      override void accept(Visitor v)
--- 2255,2275 ----
  {
      TemplateInstance ti;
  
      extern (D) this(Loc loc, Expression e, TemplateInstance ti) @safe
      {
          super(loc, EXP.dotTemplateInstance, e);
          this.ti = ti;
      }
  
!     extern (D) this(Loc loc, Expression e, Identifier name, Objects* tiargs)
      {
!         //printf("DotTemplateInstanceExp()\n");
!         this(loc, e, new TemplateInstance(loc, name, tiargs));
      }
  
!     override DotTemplateInstanceExp syntaxCopy()
      {
!         return new DotTemplateInstanceExp(loc, e1.syntaxCopy(), ti.name, TemplateInstance.arraySyntaxCopy(ti.tiargs));
      }
  
      override void accept(Visitor v)
*************** extern (C++) final class CallExp : UnaEx
*** 3336,3384 ****
          return new CallExp(loc, e1.syntaxCopy(), arraySyntaxCopy(arguments), names ? names.copy() : null);
      }
  
-     override bool isLvalue()
-     {
-         if (rvalue)
-             return false;
-         Type tb = e1.type.toBasetype();
-         if (tb.ty == Tdelegate || tb.ty == Tpointer)
-             tb = tb.nextOf();
-         auto tf = tb.isTypeFunction();
-         if (tf && tf.isRef)
-         {
-             if (auto dve = e1.isDotVarExp())
-                 if (dve.var.isCtorDeclaration())
-                     return false;
-             return true; // function returns a reference
-         }
-         return false;
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
      }
  }
  
- /**
-  * Get the called function type from a call expression
-  * Params:
-  *   ce = function call expression. Must have had semantic analysis done.
-  * Returns: called function type, or `null` if error / no semantic analysis done
-  */
- TypeFunction calledFunctionType(CallExp ce)
- {
-     Type t = ce.e1.type;
-     if (!t)
-         return null;
-     t = t.toBasetype();
-     if (auto tf = t.isTypeFunction())
-         return tf;
-     if (auto td = t.isTypeDelegate())
-         return td.nextOf().isTypeFunction();
-     return null;
- }
- 
  FuncDeclaration isFuncAddress(Expression e, bool* hasOverloads = null) @safe
  {
      if (auto ae = e.isAddrExp())
--- 2443,2454 ----
*************** extern (C++) final class AddrExp : UnaEx
*** 3431,3443 ****
          type = t;
      }
  
-     override Optional!bool toBool()
-     {
-         if (isCtfeReferenceValid(e1))
-             return typeof(return)(true);
-         return UnaExp.toBool();
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 2501,2506 ----
*************** extern (C++) final class PtrExp : UnaExp
*** 3462,3472 ****
          type = t;
      }
  
-     override bool isLvalue()
-     {
-         return !rvalue;
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 2525,2530 ----
*************** extern (C++) final class CastExp : UnaEx
*** 3593,3608 ****
          return to ? new CastExp(loc, e1.syntaxCopy(), to.syntaxCopy()) : new CastExp(loc, e1.syntaxCopy(), mod);
      }
  
-     override bool isLvalue()
-     {
-         //printf("e1.type = %s, to.type = %s\n", e1.type.toChars(), to.toChars());
-         if (rvalue || !e1.isLvalue())
-             return false;
-         return (to.ty == Tsarray && (e1.type.ty == Tvector || e1.type.ty == Tsarray)) ||
-             (to.ty == Taarray && e1.type.ty == Taarray) ||
-             e1.type.mutableOf.unSharedOf().equals(to.mutableOf().unSharedOf());
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 2651,2656 ----
*************** extern (C++) final class VectorArrayExp
*** 3652,3662 ****
          super(loc, EXP.vectorArray, e1);
      }
  
-     override bool isLvalue()
-     {
-         return !rvalue && e1.isLvalue();
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 2700,2705 ----
*************** extern (C++) final class SliceExp : UnaE
*** 3706,3724 ****
          return se;
      }
  
-     override bool isLvalue()
-     {
-         /* slice expression is rvalue in default, but
-          * conversion to reference of static array is only allowed.
-          */
-         return !rvalue && (type && type.toBasetype().ty == Tsarray);
-     }
- 
-     override Optional!bool toBool()
-     {
-         return e1.toBool();
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 2749,2754 ----
*************** extern (C++) final class ArrayExp : UnaE
*** 3775,3789 ****
          return ae;
      }
  
-     override bool isLvalue()
-     {
-         if (rvalue)
-             return false;
-         if (type && type.toBasetype().ty == Tvoid)
-             return false;
-         return true;
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 2805,2810 ----
*************** extern (C++) final class CommaExp : BinE
*** 3835,3850 ****
          originalExp = oe;
      }
  
-     override bool isLvalue()
-     {
-         return !rvalue && e2.isLvalue();
-     }
- 
-     override Optional!bool toBool()
-     {
-         return e2.toBool();
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 2856,2861 ----
*************** extern (C++) final class DelegatePtrExp
*** 3910,3920 ****
          super(loc, EXP.delegatePointer, e1);
      }
  
-     override bool isLvalue()
-     {
-         return !rvalue && e1.isLvalue();
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 2921,2926 ----
*************** extern (C++) final class DelegateFuncptr
*** 3933,3943 ****
          super(loc, EXP.delegateFunctionPointer, e1);
      }
  
-     override bool isLvalue()
-     {
-         return !rvalue && e1.isLvalue();
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 2939,2944 ----
*************** extern (C++) final class IndexExp : BinE
*** 3974,3992 ****
          return ie;
      }
  
-     override bool isLvalue()
-     {
-         if (rvalue)
-             return false;
-         auto t1b = e1.type.toBasetype();
-         if (t1b.isTypeAArray() || t1b.isTypeSArray() ||
-             (e1.isIndexExp() && t1b != t1b.isTypeDArray()))
-         {
-             return e1.isLvalue();
-         }
-         return true;
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 2975,2980 ----
*************** extern (C++) class AssignExp : BinExp
*** 4055,4071 ****
          super(loc, tok, e1, e2);
      }
  
-     override final bool isLvalue()
-     {
-         // Array-op 'x[] = y[]' should make an rvalue.
-         // Setting array length 'x.length = v' should make an rvalue.
-         if (e1.op == EXP.slice || e1.op == EXP.arrayLength)
-         {
-             return false;
-         }
-         return !rvalue;
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 3043,3048 ----
*************** extern (C++) final class LoweredAssignEx
*** 4098,4103 ****
--- 3075,3082 ----
   */
  extern (C++) final class ConstructExp : AssignExp
  {
+     Expression lowering;
+ 
      extern (D) this(Loc loc, Expression e1, Expression e2) @safe
      {
          super(loc, EXP.construct, e1, e2);
*************** extern (C++) final class CondExp : BinEx
*** 4788,4798 ****
          return new CondExp(loc, econd.syntaxCopy(), e1.syntaxCopy(), e2.syntaxCopy());
      }
  
-     override bool isLvalue()
-     {
-         return !rvalue && e1.isLvalue() && e2.isLvalue();
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 3767,3772 ----
*************** extern (C++) final class ClassReferenceE
*** 4934,4960 ****
      }
  
      // Return index of the field, or -1 if not found
-     int getFieldIndex(Type fieldtype, uint fieldoffset)
-     {
-         ClassDeclaration cd = originalClass();
-         uint fieldsSoFar = 0;
-         for (size_t j = 0; j < value.elements.length; j++)
-         {
-             while (j - fieldsSoFar >= cd.fields.length)
-             {
-                 fieldsSoFar += cd.fields.length;
-                 cd = cd.baseClass;
-             }
-             VarDeclaration v2 = cd.fields[j - fieldsSoFar];
-             if (fieldoffset == v2.offset && fieldtype.size() == v2.type.size())
-             {
-                 return cast(int)(value.elements.length - fieldsSoFar - cd.fields.length + (j - fieldsSoFar));
-             }
-         }
-         return -1;
-     }
- 
-     // Return index of the field, or -1 if not found
      // Same as getFieldIndex, but checks for a direct match with the VarDeclaration
      int findFieldIndexByName(VarDeclaration v)
      {
--- 3908,3913 ----
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/expression.h gcc-16-20260208/gcc/d/dmd/expression.h
*** gcc-16-20260201/gcc/d/dmd/expression.h	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/expression.h	Sun Feb  8 22:32:07 2026
*************** namespace dmd
*** 59,64 ****
--- 59,76 ----
      Expression *ctfeInterpret(Expression *e);
      void expandTuples(Expressions *exps, ArgumentLabels *names = nullptr);
      Expression *optimize(Expression *exp, int result, bool keepLvalue = false);
+     bool isIdentical(const Expression *exp, const Expression *e);
+     bool equals(const Expression *exp, const Expression *e);
+     bool isLvalue(Expression *exp);
+     int32_t getFieldIndex(ClassReferenceExp *cre, Type *fieldtype, uint32_t fieldoffset);
+     void fillTupleExpExps(TupleExp *te, TupleDeclaration *tup);
+     Optional<bool> toBool(Expression *exp);
+     StringExp *toStringExp(Expression *exp);
+     dinteger_t toInteger(Expression *exp);
+     uinteger_t toUInteger(Expression *exp);
+     real_t toReal(Expression *exp);
+     real_t toImaginary(Expression *exp);
+     complex_t toComplex(Expression *exp);
  }
  
  typedef unsigned char OwnedBy;
*************** public:
*** 94,113 ****
  
      const char* toChars() const final override;
  
-     virtual dinteger_t toInteger();
-     virtual uinteger_t toUInteger();
-     virtual real_t toReal();
-     virtual real_t toImaginary();
-     virtual complex_t toComplex();
-     virtual StringExp *toStringExp();
-     virtual bool isLvalue();
-     virtual bool checkType();
      Expression *addressOf();
      Expression *deref();
  
      int isConst();
-     virtual bool isIdentical(const Expression *e) const;
-     virtual Optional<bool> toBool();
      virtual bool hasCode()
      {
          return true;
--- 106,115 ----
*************** public:
*** 235,246 ****
      dinteger_t value;
  
      static IntegerExp *create(Loc loc, dinteger_t value, Type *type);
-     bool equals(const RootObject * const o) const override;
-     dinteger_t toInteger() override;
-     real_t toReal() override;
-     real_t toImaginary() override;
-     complex_t toComplex() override;
-     Optional<bool> toBool() override;
      void accept(Visitor *v) override { v->visit(this); }
      dinteger_t getInteger() { return value; }
      template<int v>
--- 237,242 ----
*************** public:
*** 261,274 ****
      real_t value;
  
      static RealExp *create(Loc loc, real_t value, Type *type);
-     bool equals(const RootObject * const o) const override;
-     bool isIdentical(const Expression *e) const override;
-     dinteger_t toInteger() override;
-     uinteger_t toUInteger() override;
-     real_t toReal() override;
-     real_t toImaginary() override;
-     complex_t toComplex() override;
-     Optional<bool> toBool() override;
      void accept(Visitor *v) override { v->visit(this); }
  };
  
--- 257,262 ----
*************** public:
*** 278,291 ****
      complex_t value;
  
      static ComplexExp *create(Loc loc, complex_t value, Type *type);
-     bool equals(const RootObject * const o) const override;
-     bool isIdentical(const Expression *e) const override;
-     dinteger_t toInteger() override;
-     uinteger_t toUInteger() override;
-     real_t toReal() override;
-     real_t toImaginary() override;
-     complex_t toComplex() override;
-     Optional<bool> toBool() override;
      void accept(Visitor *v) override { v->visit(this); }
  };
  
--- 266,271 ----
*************** public:
*** 295,301 ****
      Identifier *ident;
  
      static IdentifierExp *create(Loc loc, Identifier *ident);
-     bool isLvalue() override final;
      void accept(Visitor *v) override { v->visit(this); }
  };
  
--- 275,280 ----
*************** public:
*** 312,318 ****
      d_bool hasOverloads;
  
      DsymbolExp *syntaxCopy() override;
-     bool isLvalue() override;
      void accept(Visitor *v) override { v->visit(this); }
  };
  
--- 291,296 ----
*************** public:
*** 322,329 ****
      VarDeclaration *var;
  
      ThisExp *syntaxCopy() override;
-     Optional<bool> toBool() override;
-     bool isLvalue() override;
  
      void accept(Visitor *v) override { v->visit(this); }
  };
--- 300,305 ----
*************** public:
*** 337,345 ****
  class NullExp final : public Expression
  {
  public:
-     bool equals(const RootObject * const o) const override;
-     Optional<bool> toBool() override;
-     StringExp *toStringExp() override;
      void accept(Visitor *v) override { v->visit(this); }
  };
  
--- 313,318 ----
*************** public:
*** 357,368 ****
  
      static StringExp *create(Loc loc, const char *s);
      static StringExp *create(Loc loc, const void *s, d_size_t len);
-     bool equals(const RootObject * const o) const override;
      char32_t getCodeUnit(d_size_t i) const;
      dinteger_t getIndex(d_size_t i) const;
-     StringExp *toStringExp() override;
-     Optional<bool> toBool() override;
-     bool isLvalue() override;
      void accept(Visitor *v) override { v->visit(this); }
      size_t numberOfCodeUnits(int tynto = 0) const;
      void writeTo(void* dest, bool zero, int tyto = 0) const;
--- 330,337 ----
*************** public:
*** 395,401 ****
  
      static TupleExp *create(Loc loc, Expressions *exps);
      TupleExp *syntaxCopy() override;
-     bool equals(const RootObject * const o) const override;
  
      void accept(Visitor *v) override { v->visit(this); }
  };
--- 364,369 ----
*************** public:
*** 412,421 ****
  
      static ArrayLiteralExp *create(Loc loc, Expressions *elements);
      ArrayLiteralExp *syntaxCopy() override;
-     bool equals(const RootObject * const o) const override;
      Expression *getElement(d_size_t i);
-     Optional<bool> toBool() override;
-     StringExp *toStringExp() override;
  
      void accept(Visitor *v) override { v->visit(this); }
  };
--- 380,386 ----
*************** public:
*** 429,437 ****
      Expression* lowering;
      Expression* loweringCtfe;
  
-     bool equals(const RootObject * const o) const override;
      AssocArrayLiteralExp *syntaxCopy() override;
-     Optional<bool> toBool() override;
  
      void accept(Visitor *v) override { v->visit(this); }
  };
--- 394,400 ----
*************** public:
*** 478,484 ****
  
  
      static StructLiteralExp *create(Loc loc, StructDeclaration *sd, void *elements, Type *stype = nullptr);
-     bool equals(const RootObject * const o) const override;
      StructLiteralExp *syntaxCopy() override;
  
      void accept(Visitor *v) override { v->visit(this); }
--- 441,446 ----
*************** class TypeExp final : public Expression
*** 488,494 ****
  {
  public:
      TypeExp *syntaxCopy() override;
-     bool checkType() override;
      void accept(Visitor *v) override { v->visit(this); }
  };
  
--- 450,455 ----
*************** public:
*** 498,504 ****
      ScopeDsymbol *sds;
  
      ScopeExp *syntaxCopy() override;
-     bool checkType() override;
      void accept(Visitor *v) override { v->visit(this); }
  };
  
--- 459,464 ----
*************** public:
*** 508,515 ****
      TemplateDeclaration *td;
      FuncDeclaration *fd;
  
-     bool isLvalue() override;
-     bool checkType() override;
      void accept(Visitor *v) override { v->visit(this); }
  };
  
--- 468,473 ----
*************** class SymOffExp final : public SymbolExp
*** 569,576 ****
  public:
      dinteger_t offset;
  
-     Optional<bool> toBool() override;
- 
      void accept(Visitor *v) override { v->visit(this); }
  };
  
--- 527,532 ----
*************** class VarExp final : public SymbolExp
*** 581,588 ****
  public:
      d_bool delegateWasExtracted;
      static VarExp *create(Loc loc, Declaration *var, bool hasOverloads = true);
-     bool equals(const RootObject * const o) const override;
-     bool isLvalue() override;
  
      void accept(Visitor *v) override { v->visit(this); }
  };
--- 537,542 ----
*************** class OverExp final : public Expression
*** 594,600 ****
  public:
      OverloadSet *vars;
  
-     bool isLvalue() override;
      void accept(Visitor *v) override { v->visit(this); }
  };
  
--- 548,553 ----
*************** public:
*** 607,615 ****
      TemplateDeclaration *td;
      TOK tok;
  
-     bool equals(const RootObject * const o) const override;
      FuncExp *syntaxCopy() override;
-     bool checkType() override;
  
      void accept(Visitor *v) override { v->visit(this); }
  };
--- 560,566 ----
*************** public:
*** 699,705 ****
  class BinAssignExp : public BinExp
  {
  public:
-     bool isLvalue() override final;
      void accept(Visitor *v) override { v->visit(this); }
  };
  
--- 650,655 ----
*************** class DotTemplateExp final : public UnaE
*** 752,758 ****
  public:
      TemplateDeclaration *td;
  
-     bool checkType() override;
      void accept(Visitor *v) override { v->visit(this); }
  };
  
--- 702,707 ----
*************** public:
*** 762,768 ****
      Declaration *var;
      d_bool hasOverloads;
  
-     bool isLvalue() override;
      void accept(Visitor *v) override { v->visit(this); }
  };
  
--- 711,716 ----
*************** public:
*** 772,778 ****
      TemplateInstance *ti;
  
      DotTemplateInstanceExp *syntaxCopy() override;
-     bool checkType() override;
      void accept(Visitor *v) override { v->visit(this); }
  };
  
--- 720,725 ----
*************** public:
*** 844,850 ****
      static CallExp *create(Loc loc, FuncDeclaration *fd, Expression *earg1);
  
      CallExp *syntaxCopy() override;
-     bool isLvalue() override;
  
      void accept(Visitor *v) override { v->visit(this); }
  };
--- 791,796 ----
*************** public:
*** 852,866 ****
  class AddrExp final : public UnaExp
  {
  public:
-     Optional<bool> toBool() override;
      void accept(Visitor *v) override { v->visit(this); }
  };
  
  class PtrExp final : public UnaExp
  {
  public:
-     bool isLvalue() override;
- 
      void accept(Visitor *v) override { v->visit(this); }
  };
  
--- 798,809 ----
*************** public:
*** 906,912 ****
      Expression* lowering;
  
      CastExp *syntaxCopy() override;
-     bool isLvalue() override;
  
      void accept(Visitor *v) override { v->visit(this); }
  };
--- 849,854 ----
*************** public:
*** 926,932 ****
  class VectorArrayExp final : public UnaExp
  {
  public:
-     bool isLvalue() override;
      void accept(Visitor *v) override { v->visit(this); }
  };
  
--- 868,873 ----
*************** private:
*** 948,955 ****
  
  public:
      SliceExp *syntaxCopy() override;
-     bool isLvalue() override;
-     Optional<bool> toBool() override;
  
      void accept(Visitor *v) override { v->visit(this); }
  };
--- 889,894 ----
*************** public:
*** 974,987 ****
  class DelegatePtrExp final : public UnaExp
  {
  public:
-     bool isLvalue() override;
      void accept(Visitor *v) override { v->visit(this); }
  };
  
  class DelegateFuncptrExp final : public UnaExp
  {
  public:
-     bool isLvalue() override;
      void accept(Visitor *v) override { v->visit(this); }
  };
  
--- 913,924 ----
*************** public:
*** 996,1002 ****
      d_bool modifiable;
  
      ArrayExp *syntaxCopy() override;
-     bool isLvalue() override;
  
      void accept(Visitor *v) override { v->visit(this); }
  };
--- 933,938 ----
*************** public:
*** 1015,1022 ****
      d_bool isGenerated;
      d_bool allowCommaExp;
      Expression* originalExp;
-     bool isLvalue() override;
-     Optional<bool> toBool() override;
      void accept(Visitor *v) override { v->visit(this); }
  };
  
--- 951,956 ----
*************** public:
*** 1029,1035 ****
      d_bool indexIsInBounds;       // true if 0 <= e2 && e2 <= e1.length - 1
  
      IndexExp *syntaxCopy() override;
-     bool isLvalue() override;
  
      void accept(Visitor *v) override { v->visit(this); }
  };
--- 963,968 ----
*************** class AssignExp : public BinExp
*** 1062,1075 ****
  public:
      MemorySet memset;
  
-     bool isLvalue() override final;
- 
      void accept(Visitor *v) override { v->visit(this); }
  };
  
  class ConstructExp final : public AssignExp
  {
  public:
      void accept(Visitor *v) override { v->visit(this); }
  };
  
--- 995,1007 ----
  public:
      MemorySet memset;
  
      void accept(Visitor *v) override { v->visit(this); }
  };
  
  class ConstructExp final : public AssignExp
  {
  public:
+     Expression *lowering;
      void accept(Visitor *v) override { v->visit(this); }
  };
  
*************** public:
*** 1309,1315 ****
      Expression *econd;
  
      CondExp *syntaxCopy() override;
-     bool isLvalue() override;
  
      void accept(Visitor *v) override { v->visit(this); }
  };
--- 1241,1246 ----
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/expressionsem.d gcc-16-20260208/gcc/d/dmd/expressionsem.d
*** gcc-16-20260201/gcc/d/dmd/expressionsem.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/expressionsem.d	Sun Feb  8 22:32:07 2026
*************** import dmd.canthrow;
*** 27,35 ****
--- 27,37 ----
  import dmd.chkformat;
  import dmd.cond;
  import dmd.ctorflow;
+ import dmd.ctfeexpr : isCtfeReferenceValid;
  import dmd.dscope;
  import dmd.dsymbol;
  import dmd.dsymbolsem;
+ import dmd.templatesem : computeOneMember;
  import dmd.declaration;
  import dmd.dclass;
  import dmd.dcast;
*************** import dmd.dimport;
*** 40,46 ****
  import dmd.dinterpret;
  import dmd.dmodule;
  import dmd.dstruct;
- import dmd.dsymbolsem : findTempDecl;
  import dmd.dtemplate;
  import dmd.errors;
  import dmd.errorsink;
--- 42,47 ----
*************** import dmd.optimize;
*** 72,89 ****
  import dmd.parse;
  import dmd.printast;
  import dmd.root.array;
  import dmd.root.ctfloat;
  import dmd.root.filename;
  import dmd.common.outbuffer;
  import dmd.rootobject;
  import dmd.root.string;
  import dmd.root.utf;
  import dmd.semantic2;
  import dmd.semantic3;
  import dmd.sideeffect;
  import dmd.safe;
  import dmd.target;
! import dmd.templatesem : matchWithInstance, deduceType, matchArg, updateTempDecl;
  import dmd.tokens;
  import dmd.traits;
  import dmd.typesem;
--- 73,94 ----
  import dmd.parse;
  import dmd.printast;
  import dmd.root.array;
+ import dmd.root.complex;
  import dmd.root.ctfloat;
  import dmd.root.filename;
+ import dmd.root.optional;
  import dmd.common.outbuffer;
  import dmd.rootobject;
  import dmd.root.string;
  import dmd.root.utf;
+ import dmd.root.rmem;
  import dmd.semantic2;
  import dmd.semantic3;
  import dmd.sideeffect;
  import dmd.safe;
  import dmd.target;
! import dmd.targetcompiler;
! import dmd.templatesem : matchWithInstance, deduceType, matchArg, updateTempDecl, semanticTiargs, findTempDecl;
  import dmd.tokens;
  import dmd.traits;
  import dmd.typesem;
*************** import dmd.visitor.postorder;
*** 95,100 ****
--- 100,1070 ----
  
  enum LOGSEMANTIC = false;
  
+ /*******************************
+  * Merge results of `ctorflow` into `_this`.
+  * Params:
+  *   _this = scope to merge the results into
+  *   loc = for error messages
+  *   ctorflow = flow results to merge in
+  */
+ void merge(Scope* _this, Loc loc, const ref CtorFlow ctorflow)
+ {
+     if (!mergeCallSuper(_this.ctorflow.callSuper, ctorflow.callSuper))
+         error(loc, "one path skips constructor");
+ 
+     const fies = ctorflow.fieldinit;
+     if (!_this.ctorflow.fieldinit.length || !fies.length)
+         return;
+     FuncDeclaration f = _this.func;
+     if (_this.fes)
+         f = _this.fes.func;
+     auto ad = f.isMemberDecl();
+     assert(ad);
+     foreach (i, v; ad.fields)
+     {
+         bool mustInit = (v.storage_class & STC.nodefaultctor || v.type.needsNested());
+         auto fieldInit = &_this.ctorflow.fieldinit[i];
+         const fiesCurrent = fies[i];
+         if (fieldInit.loc is Loc.init)
+             fieldInit.loc = fiesCurrent.loc;
+         if (!mergeFieldInit(_this.ctorflow.fieldinit[i].csx, fiesCurrent.csx) && mustInit)
+         {
+             error(loc, "one path skips field `%s`", v.toChars());
+         }
+     }
+ }
+ 
+ real_t toImaginary(Expression _this)
+ {
+     if (auto ie = _this.isIntegerExp())
+         return CTFloat.zero;
+     else if (auto re = _this.isRealExp)
+         return re.type.isReal() ? CTFloat.zero : re.value;
+     else if (auto ce = _this.isComplexExp())
+         return cimagl(ce.value);
+ 
+     error(_this.loc, "floating point constant expression expected instead of `%s`", _this.toChars());
+     return CTFloat.zero;
+ }
+ 
+ real_t toReal(Expression _this)
+ {
+     if (auto iexp = _this.isIntegerExp())
+     {
+         // normalize() is necessary until we fix all the paints of 'type'
+         const ty = iexp.type.toBasetype().ty;
+         const val = iexp.normalize(ty, iexp.value);
+         iexp.value = val;
+         return (ty == Tuns64)
+             ? real_t(cast(ulong)val)
+             : real_t(cast(long)val);
+     }
+     else if (auto rexp = _this.isRealExp())
+     {
+         return rexp.type.isReal() ? rexp.value : CTFloat.zero;
+     }
+     else if (auto cexp = _this.isComplexExp())
+     {
+         return creall(cexp.value);
+     }
+     error(_this.loc, "floating point constant expression expected instead of `%s`", _this.toChars());
+     return CTFloat.zero;
+ }
+ 
+ complex_t toComplex(Expression _this)
+ {
+     if (auto iexp = _this.isIntegerExp())
+     {
+         return complex_t(iexp.toReal());
+     }
+     else if (auto rexp = _this.isRealExp())
+     {
+         return complex_t(rexp.toReal(), rexp.toImaginary());
+     }
+     else if (auto cexp = _this.isComplexExp())
+     {
+         return cexp.value;
+     }
+     error(_this.loc, "floating point constant expression expected instead of `%s`", _this.toChars());
+     return complex_t(CTFloat.zero);
+ }
+ 
+ dinteger_t toInteger(Expression _this)
+ {
+     if (auto iexp = _this.isIntegerExp())
+     {
+         // normalize() is necessary until we fix all the paints of 'type'
+         return iexp.value = IntegerExp.normalize(iexp.type.toBasetype().ty, iexp.value);
+     }
+     else if (auto rexp = _this.isRealExp())
+     {
+         return cast(sinteger_t)rexp.toReal();
+     }
+ 
+     else if (auto cexp = _this.isComplexExp())
+     {
+         return cast(sinteger_t)cexp.toReal();
+     }
+ 
+     // import dmd.hdrgen : EXPtoString;
+     //printf("Expression %s\n", EXPtoString(op).ptr);
+     if (!_this.type || !_this.type.isTypeError())
+         error(_this.loc, "integer constant expression expected instead of `%s`", _this.toChars());
+     return 0;
+ }
+ 
+ uinteger_t toUInteger(Expression _this)
+ {
+     if (auto rexp = _this.isRealExp())
+     {
+         return cast(uinteger_t)rexp.toReal();
+     }
+     else if (auto cexp = _this.isComplexExp())
+     {
+         return cast(uinteger_t)cexp.toReal();
+     }
+     // import dmd.hdrgen : EXPtoString;
+     //printf("Expression %s\n", EXPtoString(op).ptr);
+     return cast(uinteger_t)_this.toInteger();
+ }
+ 
+ 
+ /***************************************************
+  * Given an Expression, find the variable it really is.
+  *
+  * For example, `a[index]` is really `a`, and `s.f` is really `s`.
+  * Params:
+  *      e = Expression to look at
+  *      deref = number of dereferences encountered
+  * Returns:
+  *      variable if there is one, null if not
+  */
+ VarDeclaration expToVariable(Expression e, out int deref)
+ {
+     deref = 0;
+     while (1)
+     {
+         switch (e.op)
+         {
+             case EXP.variable:
+                 return e.isVarExp().var.isVarDeclaration();
+ 
+             case EXP.dotVariable:
+                 e = e.isDotVarExp().e1;
+                 if (e.type.toBasetype().isTypeClass())
+                     deref++;
+ 
+                 continue;
+ 
+             case EXP.index:
+             {
+                 e = e.isIndexExp().e1;
+                 if (!e.type.toBasetype().isTypeSArray())
+                     deref++;
+ 
+                 continue;
+             }
+ 
+             case EXP.slice:
+             {
+                 e = e.isSliceExp().e1;
+                 if (!e.type.toBasetype().isTypeSArray())
+                     deref++;
+ 
+                 continue;
+             }
+ 
+             case EXP.super_:
+                 return e.isSuperExp().var.isVarDeclaration();
+             case EXP.this_:
+                 return e.isThisExp().var.isVarDeclaration();
+ 
+             // Temporaries for rvalues that need destruction
+             // are of form: (T s = rvalue, s). For these cases
+             // we can just return var declaration of `s`. However,
+             // this is intentionally not calling `Expression.extractLast`
+             // because at this point we cannot infer the var declaration
+             // of more complex generated comma expressions such as the
+             // one for the array append hook.
+             case EXP.comma:
+             {
+                 if (auto ve = e.isCommaExp().e2.isVarExp())
+                     return ve.var.isVarDeclaration();
+ 
+                 return null;
+             }
+             default:
+                 return null;
+         }
+     }
+ }
+ 
+ /**
+  * Get the called function type from a call expression
+  * Params:
+  *   ce = function call expression. Must have had semantic analysis done.
+  * Returns: called function type, or `null` if error / no semantic analysis done
+  */
+ TypeFunction calledFunctionType(CallExp ce)
+ {
+     Type t = ce.e1.type;
+     if (!t)
+         return null;
+     t = t.toBasetype();
+     if (auto tf = t.isTypeFunction())
+         return tf;
+     if (auto td = t.isTypeDelegate())
+         return td.nextOf().isTypeFunction();
+     return null;
+ }
+ 
+ /****************************************
+  * Expand tuples in-place.
+  *
+  * Example:
+  *     When there's a call `f(10, pair: AliasSeq!(20, 30), single: 40)`, the input is:
+  *         `exps =  [10, (20, 30), 40]`
+  *         `names = [null, "pair", "single"]`
+  *     The arrays will be modified to:
+  *         `exps =  [10, 20, 30, 40]`
+  *         `names = [null, "pair", null, "single"]`
+  *
+  * Params:
+  *     exps  = array of Expressions
+  *     names = optional array of names corresponding to Expressions
+  */
+ void expandTuples(Expressions* exps, ArgumentLabels* names = null)
+ {
+     //printf("expandTuples()\n");
+     if (exps is null)
+         return;
+ 
+     if (names)
+     {
+         if (exps.length != names.length)
+         {
+             printf("exps.length = %d, names.length = %d\n", cast(int) exps.length, cast(int) names.length);
+             printf("exps = %s, names = %s\n", exps.toChars(), names.toChars());
+             if (exps.length > 0)
+                 printf("%s\n", (*exps)[0].loc.toChars());
+             assert(0);
+         }
+     }
+ 
+     // At `index`, a tuple of length `length` is expanded. Insert corresponding nulls in `names`.
+     void expandNames(size_t index, size_t length)
+     {
+         if (names)
+         {
+             if (length == 0)
+             {
+                 names.remove(index);
+                 return;
+             }
+             foreach (i; 1 .. length)
+             {
+                 names.insert(index + i, ArgumentLabel(cast(Identifier) null, Loc.init));
+             }
+         }
+     }
+ 
+     for (size_t i = 0; i < exps.length; i++)
+     {
+         Expression arg = (*exps)[i];
+         if (!arg)
+             continue;
+ 
+         // Look for tuple with 0 members
+         if (auto e = arg.isTypeExp())
+         {
+             if (auto tt = e.type.toBasetype().isTypeTuple())
+             {
+                 if (!tt.arguments || tt.arguments.length == 0)
+                 {
+                     exps.remove(i);
+                     expandNames(i, 0);
+                     if (i == exps.length)
+                         return;
+                 }
+                 else // Expand a TypeTuple
+                 {
+                     exps.remove(i);
+                     auto texps = new Expressions(tt.arguments.length);
+                     foreach (j, a; *tt.arguments)
+                         (*texps)[j] = new TypeExp(e.loc, a.type);
+                     exps.insert(i, texps);
+                     expandNames(i, texps.length);
+                 }
+                 i--;
+                 continue;
+             }
+         }
+ 
+         // Inline expand all the tuples
+         while (arg.op == EXP.tuple)
+         {
+             TupleExp te = cast(TupleExp)arg;
+             exps.remove(i); // remove arg
+             exps.insert(i, te.exps); // replace with tuple contents
+             expandNames(i, te.exps.length);
+             if (i == exps.length)
+                 return; // empty tuple, no more arguments
+             (*exps)[i] = Expression.combine(te.e0, (*exps)[i]);
+             arg = (*exps)[i];
+         }
+     }
+ }
+ 
+ StringExp toStringExp(Expression _this)
+ {
+     static StringExp nullExpToStringExp(NullExp _this)
+     {
+         if (_this.type.implicitConvTo(Type.tstring))
+         {
+             auto se = new StringExp(_this.loc, (cast(char*).mem.xcalloc(1, 1))[0 .. 0]);
+             se.type = Type.tstring;
+             return se;
+         }
+         return null;
+     }
+ 
+     static StringExp arrayLiteralToStringExp(ArrayLiteralExp _this)
+     {
+         TY telem = _this.type.nextOf().toBasetype().ty;
+         if (!(telem.isSomeChar || (telem == Tvoid && (!_this.elements || _this.elements.length == 0))))
+             return null;
+ 
+         ubyte sz = 1;
+         if (telem == Twchar)
+             sz = 2;
+         else if (telem == Tdchar)
+             sz = 4;
+ 
+         OutBuffer buf;
+         if (_this.elements)
+         {
+             foreach (i; 0 .. _this.elements.length)
+             {
+                 auto ch = _this[i];
+                 if (ch.op != EXP.int64)
+                     return null;
+                 if (sz == 1)
+                     buf.writeByte(cast(ubyte)ch.toInteger());
+                 else if (sz == 2)
+                     buf.writeword(cast(uint)ch.toInteger());
+                 else
+                     buf.write4(cast(uint)ch.toInteger());
+             }
+         }
+         char prefix;
+         if (sz == 1)
+         {
+             prefix = 'c';
+             buf.writeByte(0);
+         }
+         else if (sz == 2)
+         {
+             prefix = 'w';
+             buf.writeword(0);
+         }
+         else
+         {
+             prefix = 'd';
+             buf.write4(0);
+         }
+ 
+         const size_t len = buf.length / sz - 1;
+         auto se = new StringExp(_this.loc, buf.extractSlice()[0 .. len * sz], len, sz, prefix);
+         se.sz = sz;
+         se.type = _this.type;
+         return se;
+     }
+ 
+     switch(_this.op)
+     {
+         case EXP.null_: return nullExpToStringExp(_this.isNullExp());
+         case EXP.string_: return _this.isStringExp();
+         case EXP.arrayLiteral: return arrayLiteralToStringExp(_this.isArrayLiteralExp());
+         default: return null;
+     }
+ }
+ 
+ Optional!bool toBool(Expression _this)
+ {
+     static Optional!bool integerToBool(IntegerExp _this)
+     {
+         bool r = _this.toInteger() != 0;
+         return typeof(return)(r);
+     }
+ 
+     static Optional!bool arrayLiteralToBool(ArrayLiteralExp _this)
+     {
+         size_t dim = _this.elements ? _this.elements.length : 0;
+         return typeof(return)(dim != 0);
+     }
+ 
+     static Optional!bool assocArrayLiteralToBool(AssocArrayLiteralExp _this)
+     {
+         size_t dim = _this.keys.length;
+         return typeof(return)(dim != 0);
+     }
+ 
+     static Optional!bool addrToBool(AddrExp _this)
+     {
+         if (isCtfeReferenceValid(_this.e1))
+             return typeof(return)(true);
+         return typeof(return)();
+     }
+ 
+     switch(_this.op)
+     {
+         case EXP.int64: return integerToBool(_this.isIntegerExp());
+         case EXP.float64: return typeof(return)(!!_this.isRealExp().value);
+         case EXP.complex80: return typeof(return)(!!_this.isComplexExp().value);
+         // `this` is never null (what about structs?)
+         case EXP.this_, EXP.super_: return typeof(return)(true);
+         // null in any type is false
+         case EXP.null_: return typeof(return)(false);
+         // Keep the old behaviour for this refactoring
+         // Should probably match language spec instead and check for length
+         case EXP.string_: return typeof(return)(true);
+         case EXP.arrayLiteral: return arrayLiteralToBool(_this.isArrayLiteralExp());
+         case EXP.assocArrayLiteral: return assocArrayLiteralToBool(_this.isAssocArrayLiteralExp());
+         case EXP.symbolOffset: return typeof(return)(true);
+         case EXP.address: return addrToBool(_this.isAddrExp());
+         case EXP.slice: return _this.isSliceExp().e1.toBool();
+         case EXP.comma: return _this.isCommaExp().e2.toBool();
+         // Statically evaluate this expression to a `bool` if possible
+         // Returns: an optional that either contains the value or is empty
+         default: return typeof(return)();
+     }
+ }
+ 
+ /****************************************
+  * Check that the expression `e` has a valid type.
+  * If not, generates an error "... has no type".
+  * Params:
+  *      e = Expression to check
+  * Returns:
+  *      true if the expression has a valid type.
+  * Note:
+  *      When this function returns false, `checkValue()` should also return true.
+  */
+ bool hasValidType(Expression e)
+ {
+     static bool visitTypeExp(TypeExp e)
+     {
+         error(e.loc, "type `%s` is not an expression", e.toChars());
+         return false;
+     }
+ 
+     static bool visitScopeExp(ScopeExp e)
+     {
+         if (e.sds.isPackage())
+         {
+             error(e.loc, "%s `%s` has no type", e.sds.kind(), e.sds.toChars());
+             return false;
+         }
+         auto ti = e.sds.isTemplateInstance();
+         if (!ti)
+             return true;
+         //assert(ti.needsTypeInference(sc));
+         if (ti.tempdecl &&
+             ti.semantictiargsdone &&
+             ti.semanticRun == PASS.initial)
+         {
+             error(e.loc, "partial %s `%s` has no type", e.sds.kind(), e.toChars());
+             return false;
+         }
+         return true;
+     }
+ 
+     static bool visitTemplateExp(TemplateExp e)
+     {
+         error(e.loc, "%s `%s` has no type", e.td.kind(), e.toChars());
+         return false;
+     }
+ 
+     static bool visitFuncExp(FuncExp e)
+     {
+         if (e.td)
+         {
+             error(e.loc, "template lambda has no type");
+             return false;
+         }
+         return true;
+     }
+ 
+     static bool visitDotTemplateExp(DotTemplateExp e)
+     {
+         error(e.loc, "%s `%s` has no type", e.td.kind(), e.toChars());
+         return false;
+     }
+ 
+     static bool visitDotTemplateInstanceExp(DotTemplateInstanceExp e)
+     {
+         // Same logic as ScopeExp.hasValidType()
+         if (e.ti.tempdecl &&
+             e.ti.semantictiargsdone &&
+             e.ti.semanticRun == PASS.initial)
+         {
+             error(e.loc, "partial %s `%s` has no type", e.ti.kind(), e.toChars());
+             return false;
+         }
+         return true;
+     }
+ 
+     switch (e.op)
+     {
+         case EXP.type:                   return visitTypeExp(e.isTypeExp());
+         case EXP.scope_:                 return visitScopeExp(e.isScopeExp());
+         case EXP.template_:              return visitTemplateExp(e.isTemplateExp());
+         case EXP.function_:              return visitFuncExp(e.isFuncExp());
+         case EXP.dotTemplateDeclaration: return visitDotTemplateExp(e.isDotTemplateExp());
+         case EXP.dotTemplateInstance:    return visitDotTemplateInstanceExp(e.isDotTemplateInstanceExp());
+ 
+         default: return true;
+     }
+ }
+ 
+ void fillTupleExpExps(TupleExp _this, TupleDeclaration tup)
+ {
+     _this.exps.reserve(tup.objects.length);
+     foreach (o; *tup.objects)
+     {
+         if (Dsymbol s = getDsymbol(o))
+         {
+             /* If tuple element represents a symbol, translate to DsymbolExp
+              * to supply implicit 'this' if needed later.
+              */
+             Expression e = new DsymbolExp(_this.loc, s);
+             _this.exps.push(e);
+         }
+         else if (auto eo = o.isExpression())
+         {
+             auto e = eo.copy();
+             e.loc = _this.loc;    // https://issues.dlang.org/show_bug.cgi?id=15669
+             _this.exps.push(e);
+         }
+         else if (auto t = o.isType())
+         {
+             Expression e = new TypeExp(_this.loc, t);
+             _this.exps.push(e);
+         }
+         else
+         {
+             error(_this.loc, "`%s` is not an expression", o.toChars());
+         }
+     }
+ }
+ 
+ bool isLvalue(Expression _this)
+ {
+     static bool dotVarExpIsLvalue(DotVarExp _this)
+     {
+         if (_this.rvalue)
+             return false;
+         if (_this.e1.op != EXP.structLiteral)
+             return true;
+         auto vd = _this.var.isVarDeclaration();
+         return !(vd && vd.isField());
+     }
+ 
+     static bool callExpIsLvalue(CallExp _this)
+     {
+         if (_this.rvalue)
+             return false;
+         Type tb = _this.e1.type.toBasetype();
+         if (tb.ty == Tdelegate || tb.ty == Tpointer)
+             tb = tb.nextOf();
+         auto tf = tb.isTypeFunction();
+         if (tf && tf.isRef)
+         {
+             if (auto dve = _this.e1.isDotVarExp())
+                 if (dve.var.isCtorDeclaration())
+                     return false;
+             return true; // function returns a reference
+         }
+         return false;
+     }
+ 
+     static bool castExpIsLvalue(CastExp _this)
+     {
+         //printf("e1.type = %s, to.type = %s\n", e1.type.toChars(), to.toChars());
+         if (_this.rvalue || !_this.e1.isLvalue())
+             return false;
+         return (_this.to.ty == Tsarray && (_this.e1.type.ty == Tvector || _this.e1.type.ty == Tsarray)) ||
+             (_this.to.ty == Taarray && _this.e1.type.ty == Taarray) ||
+             _this.e1.type.mutableOf.unSharedOf().equals(_this.to.mutableOf().unSharedOf());
+     }
+ 
+     static bool indexExpIsLvalue(IndexExp _this)
+     {
+         if (_this.rvalue)
+             return false;
+         auto t1b = _this.e1.type.toBasetype();
+         if (t1b.isTypeAArray() || t1b.isTypeSArray() ||
+             (_this.e1.isIndexExp() && t1b != t1b.isTypeDArray()))
+         {
+             return _this.e1.isLvalue();
+         }
+         return true;
+     }
+ 
+     static bool assignExpIsLvalue(AssignExp _this)
+     {
+         // Array-op 'x[] = y[]' should make an rvalue.
+         // Setting array length 'x.length = v' should make an rvalue.
+         if (_this.e1.op == EXP.slice || _this.e1.op == EXP.arrayLength)
+         {
+             return false;
+         }
+         return !_this.rvalue;
+     }
+ 
+     bool not_rvalue = _this.rvalue == false;
+ 
+     if (_this.isBinAssignExp())
+         return not_rvalue;
+ 
+     switch(_this.op)
+     {
+         case EXP.overloadSet: return true;
+         case EXP.identifier, EXP.dollar, EXP.dSymbol, EXP.star: return not_rvalue;
+         // Class `this` should be an rvalue; struct `this` should be an lvalue.
+         case EXP.this_, EXP.super_: return not_rvalue && _this.type.toBasetype().ty != Tclass;
+         /* string literal/slice is rvalue in default, but
+          * conversion to reference of static array is only allowed.
+          */
+         case EXP.string_, EXP.slice: return not_rvalue && (_this.type && _this.type.toBasetype().ty == Tsarray);
+         case EXP.question: return not_rvalue && _this.isCondExp().e1.isLvalue() && _this.isCondExp().e2.isLvalue();
+         case EXP.array: return !( _this.rvalue || (_this.type && _this.type.toBasetype().ty == Tvoid));
+ 
+         case EXP.vectorArray: return not_rvalue && _this.isVectorArrayExp().e1.isLvalue();
+         case EXP.delegatePointer: return not_rvalue && _this.isDelegatePtrExp().e1.isLvalue();
+         case EXP.delegateFunctionPointer: return not_rvalue && _this.isDelegateFuncptrExp().e1.isLvalue();
+ 
+         case EXP.comma: return not_rvalue && _this.isCommaExp().e2.isLvalue();
+         case EXP.variable: return !(_this.rvalue || (_this.isVarExp().var.storage_class & (STC.lazy_ | STC.rvalue | STC.manifest)));
+         case EXP.template_: return _this.isTemplateExp().fd !is null;
+ 
+         case EXP.dotVariable: return dotVarExpIsLvalue(_this.isDotVarExp());
+         case EXP.call: return callExpIsLvalue(_this.isCallExp());
+         case EXP.cast_: return castExpIsLvalue(_this.isCastExp());
+         case EXP.index: return indexExpIsLvalue(_this.isIndexExp());
+         case EXP.assign, EXP.loweredAssignExp, EXP.construct, EXP.blit: return assignExpIsLvalue(cast(AssignExp) _this);
+         default: return false;
+     }
+ }
+ 
+ /***********************************************************
+  * Determine if copy elision is allowed when copying an expression to
+  * a typed storage. This basically elides a restricted subset of so-called
+  * "pure" rvalues, i.e. expressions with no reference semantics.
+  */
+ bool canElideCopy(Expression e, Type to, bool checkMod = true)
+ {
+     if (checkMod && !MODimplicitConv(e.type.mod, to.mod))
+         return false;
+ 
+     static bool visitCallExp(CallExp e)
+     {
+         if (auto dve = e.e1.isDotVarExp())
+             if (dve.var.isCtorDeclaration())
+                 return true;
+ 
+         auto tb = e.e1.type.toBasetype();
+         if (tb.ty == Tdelegate || tb.ty == Tpointer)
+             tb = tb.nextOf();
+         auto tf = tb.isTypeFunction();
+         return tf && !tf.isRef;
+     }
+ 
+     static bool visitDotVarExp(DotVarExp e)
+     {
+         auto vd = e.var.isVarDeclaration();
+         if (!vd || !vd.isField())
+             return false;
+ 
+         auto sd = vd.type.isTypeStruct();
+         if (!sd || sd.needsCopyOrPostblit() || sd.sym.hasMoveCtor)
+             return false;
+ 
+         // If an aggregate can be elided, so are its fields
+         return canElideCopy(e.e1, e.e1.type, false);
+     }
+ 
+     switch (e.op)
+     {
+         case EXP.comma:
+             auto ce = e.isCommaExp();
+             return canElideCopy(ce.e2, to, checkMod);
+         case EXP.question:
+             auto ce = e.isCondExp();
+             return canElideCopy(ce.e1, to, checkMod) && canElideCopy(ce.e2, to, checkMod);
+ 
+         case EXP.call:
+             return visitCallExp(e.isCallExp());
+         case EXP.dotVariable:
+             return visitDotVarExp(e.isDotVarExp());
+         case EXP.structLiteral:
+             auto sle = e.isStructLiteralExp();
+             return !(checkMod && sle.useStaticInit && to.isMutable());
+         case EXP.variable:
+             return (e.isVarExp().var.storage_class & STC.rvalue) != 0;
+         default:
+             return false;
+     }
+ }
+ 
+ // Return index of the field, or -1 if not found
+ int getFieldIndex(ClassReferenceExp _this, Type fieldtype, uint fieldoffset)
+ {
+     ClassDeclaration cd = _this.originalClass();
+     uint fieldsSoFar = 0;
+     for (size_t j = 0; j <  _this.value.elements.length; j++)
+     {
+         while (j - fieldsSoFar >= cd.fields.length)
+         {
+             fieldsSoFar += cd.fields.length;
+             cd = cd.baseClass;
+         }
+         VarDeclaration v2 = cd.fields[j - fieldsSoFar];
+         if (fieldoffset == v2.offset && fieldtype.size() == v2.type.size())
+         {
+             return cast(int)( _this.value.elements.length - fieldsSoFar - cd.fields.length + (j - fieldsSoFar));
+         }
+     }
+     return -1;
+ }
+ 
+ /************************************
+  * Get index of field.
+  * Returns -1 if not found.
+  */
+ int getFieldIndex(StructLiteralExp _this, Type type, uint offset)
+ {
+     /* Find which field offset is by looking at the field offsets
+      */
+     if (!_this.elements.length)
+         return -1;
+ 
+     const sz = type.size();
+     if (sz == SIZE_INVALID)
+         return -1;
+     foreach (i, v; _this.sd.fields)
+     {
+         if (offset != v.offset)
+             continue;
+         if (sz != v.type.size())
+             continue;
+         /* context fields might not be filled. */
+         if (i >= _this.sd.nonHiddenFields())
+             return cast(int)i;
+         if (auto e = (*_this.elements)[i])
+         {
+             return cast(int)i;
+         }
+         return -1;
+     }
+     assert(0);
+ }
+ 
+ bool equals(const Expression _this, const Expression e)
+ {
+     static bool intExpEquals(const IntegerExp _this, const IntegerExp e)
+     {
+         return _this.type.toHeadMutable().equals(e.type.toHeadMutable()) && _this.value == e.value;
+     }
+ 
+     static bool realExpEquals(const RealExp _this, const RealExp e)
+     {
+         return _this.type.toHeadMutable().equals(e.type.toHeadMutable()) && RealIdentical(_this.value, e.value);
+     }
+ 
+     static bool complexExpEquals(const ComplexExp _this, const ComplexExp e)
+     {
+         return _this.type.toHeadMutable().equals(e.type.toHeadMutable()) &&
+             RealIdentical(creall(_this.value), creall(e.value)) &&
+             RealIdentical(cimagl(_this.value), cimagl(e.value));
+     }
+ 
+     static bool nullExpEquals(const NullExp _this, const NullExp e)
+     {
+         return e.op == EXP.null_ && _this.type.equals(e.type);
+     }
+ 
+     static bool stringExpEquals(const StringExp _this, const StringExp e)
+     {
+         //printf("StringExp::equals('%s') %s\n", o.toChars(), toChars());
+         return _this.compare(e) == 0;
+     }
+ 
+     static bool tupleExpEquals(const TupleExp _this, const TupleExp e)
+     {
+         if (_this.exps.length != e.exps.length)
+             return false;
+         if (_this.e0 && !_this.e0.equals(e.e0) || !_this.e0 && e.e0)
+             return false;
+         foreach (i, e1; *_this.exps)
+         {
+             auto e2 = (*e.exps)[i];
+             if (!e1.equals(e2))
+                 return false;
+         }
+         return true;
+     }
+ 
+     static bool arrayLiteralExpEquals(const ArrayLiteralExp _this, const ArrayLiteralExp e)
+     {
+         if (_this.elements.length != e.elements.length)
+             return false;
+         if (_this.elements.length == 0 && !_this.type.equals(e.type))
+         {
+             return false;
+         }
+ 
+         foreach (i, e1; *_this.elements)
+         {
+             auto e2 = (*e.elements)[i];
+             auto e1x = e1 ? e1 : _this.basis;
+             auto e2x = e2 ? e2 : e.basis;
+ 
+             if (e1x != e2x && (!e1x || !e2x || !e1x.equals(e2x)))
+                 return false;
+         }
+         return true;
+     }
+ 
+     static bool assocArrayLiteralExpEquals(const AssocArrayLiteralExp _this, const AssocArrayLiteralExp e)
+     {
+         if (_this.keys.length != e.keys.length)
+             return false;
+         size_t count = 0;
+         foreach (i, key; *_this.keys)
+         {
+             foreach (j, akey; *e.keys)
+             {
+                 if (key.equals(akey))
+                 {
+                     if (!(*_this.values)[i].equals((*e.values)[j]))
+                         return false;
+                     ++count;
+                 }
+             }
+         }
+         return count == _this.keys.length;
+     }
+ 
+     static bool structLiteralExpEquals(const StructLiteralExp _this, const StructLiteralExp e)
+     {
+         if (!_this.type.equals(e.type))
+             return false;
+         if (_this.elements.length != e.elements.length)
+             return false;
+         foreach (i, e1; *_this.elements)
+         {
+             auto e2 = (*e.elements)[i];
+             if (e1 != e2 && (!e1 || !e2 || !e1.equals(e2)))
+                 return false;
+         }
+         return true;
+     }
+ 
+     static bool varExpEquals(const VarExp _this, const VarExp e)
+     {
+         return _this.type.toHeadMutable().equals(e.type.toHeadMutable()) && _this.var == e.var;
+     }
+ 
+     static bool funcExpEquals(const FuncExp _this, const FuncExp e)
+     {
+         return _this.fd == e.fd;
+     }
+ 
+     static bool mixinExpEquals(const MixinExp _this, const MixinExp e)
+     {
+         if (_this.exps.length != e.exps.length)
+             return false;
+         foreach (i, e1; *_this.exps)
+         {
+             auto e2 = (*e.exps)[i];
+             if (e1 != e2 && (!e1 || !e2 || !e1.equals(e2)))
+                 return false;
+         }
+         return true;
+     }
+ 
+     if (_this == e)
+         return true;
+ 
+     if (_this.op != e.op)
+         return false;
+ 
+     switch(_this.op)
+     {
+         case EXP.int64: return intExpEquals(_this.isIntegerExp(), e.isIntegerExp());
+         case EXP.float64: return realExpEquals(_this.isRealExp(), e.isRealExp());
+         case EXP.complex80: return complexExpEquals(_this.isComplexExp(), e.isComplexExp());
+         case EXP.null_: return nullExpEquals(_this.isNullExp(), e.isNullExp());
+         case EXP.string_: return stringExpEquals(_this.isStringExp(), e.isStringExp());
+         case EXP.tuple: return tupleExpEquals(_this.isTupleExp(), e.isTupleExp());
+         case EXP.arrayLiteral: return arrayLiteralExpEquals(_this.isArrayLiteralExp(), e.isArrayLiteralExp());
+         case EXP.assocArrayLiteral: return assocArrayLiteralExpEquals(_this.isAssocArrayLiteralExp(), e.isAssocArrayLiteralExp());
+         case EXP.structLiteral: return structLiteralExpEquals(_this.isStructLiteralExp(), e.isStructLiteralExp());
+         case EXP.variable: return varExpEquals(_this.isVarExp(), e.isVarExp());
+         case EXP.function_: return funcExpEquals(_this.isFuncExp(), e.isFuncExp());
+         case EXP.mixin_: return mixinExpEquals(_this.isMixinExp(), e.isMixinExp());
+ 
+         default: return _this is e;
+     }
+ }
+ 
+ 
+ /********************************
+  * Test to see if two reals are the same.
+  * Regard NaN's as equivalent.
+  * Regard +0 and -0 as different.
+  * Params:
+  *      x1 = first operand
+  *      x2 = second operand
+  * Returns:
+  *      true if x1 is x2
+  *      else false
+  */
+ @safe private bool RealIdentical(real_t x1, real_t x2)
+ {
+     return (CTFloat.isNaN(x1) && CTFloat.isNaN(x2)) || CTFloat.isIdentical(x1, x2);
+ }
+ 
+ private bool realExpIsIdentical(const RealExp _this, const Expression e)
+ {
+     if (!equals(_this, e))
+         return false;
+     return CTFloat.isIdentical(_this.value, e.isRealExp().value);
+ }
+ 
+ private bool complexExpIsIdentical(const ComplexExp _this, const Expression e)
+ {
+     if (!equals(_this, e))
+         return false;
+     // equals() regards different NaN values as 'equals'
+     auto c = e.isComplexExp();
+     return CTFloat.isIdentical(creall(_this.value), creall(c.value)) &&
+            CTFloat.isIdentical(cimagl(_this.value), cimagl(c.value));
+ }
+ 
+ /******
+  * Identical, not just equal. I.e. NaNs with different bit patterns are not identical
+  */
+ bool isIdentical(const Expression _this, const Expression e)
+ {
+     if (auto re = _this.isRealExp())
+         return realExpIsIdentical(re, e);
+     else if (auto ce = _this.isComplexExp())
+         return complexExpIsIdentical(ce, e);
+     return equals(_this, e);
+ }
+ 
  /***********************************
   * Determine if a `this` is needed to access `d`.
   * Params:
*************** bool hasRegularCtor(StructDeclaration sd
*** 227,232 ****
--- 1197,1203 ----
      {
          if (auto td = s.isTemplateDeclaration())
          {
+             td.computeOneMember();
              if (ignoreDisabled && td.onemember)
              {
                  if (auto ctorDecl = td.onemember.isCtorDeclaration())
*************** bool hasRegularCtor(StructDeclaration sd
*** 251,256 ****
--- 1222,1263 ----
      return result;
  }
  
+ /// Returns: whether `s` is a method which can possibly be called without a struct instance.
+ /// Used to check whether S() should try to call `S.opCall()` rather than construct a struct literal
+ bool hasStaticOverload(Dsymbol s)
+ {
+     bool result = false;
+     overloadApply(s, (Dsymbol sym) {
+         if (auto fd = sym.isFuncDeclaration())
+         {
+             if (fd.isStatic)
+             {
+                 result = true;
+                 return 1;
+             }
+         }
+         else if (auto td = sym.isTemplateDeclaration())
+         {
+             // Consider both `template opCall { static opCall() {} }` and `static opCall()() {}`
+             if (td._scope.stc & STC.static_)
+             {
+                 result = true;
+                 return 1;
+             }
+             if (auto fd = td.onemember.isFuncDeclaration())
+             {
+                 if (fd.isStatic)
+                 {
+                     result = true;
+                     return 1;
+                 }
+             }
+         }
+         return 0;
+     });
+     return result;
+ }
+ 
  /*****************************************
   * Determine if `this` is available by walking up the enclosing
   * scopes until a function is found.
*************** private Expression checkOpAssignTypes(Bi
*** 471,486 ****
      Type t1 = e1.type;
      Type t2 = e2.type;
  
      // T opAssign floating yields a floating. Prevent truncating conversions (float to int).
      // See https://issues.dlang.org/show_bug.cgi?id=3841.
      // Should we also prevent double to float (type.isFloating() && type.size() < t2.size()) ?
!     if (op == EXP.addAssign || op == EXP.minAssign ||
!         op == EXP.mulAssign || op == EXP.divAssign || op == EXP.modAssign ||
!         op == EXP.powAssign)
      {
          if ((type.isIntegral() && t2.isFloating()))
          {
!             warning(loc, "`%s %s %s` is performing truncating conversion", type.toChars(), EXPtoString(op).ptr, t2.toChars());
          }
      }
  
--- 1478,1496 ----
      Type t1 = e1.type;
      Type t2 = e2.type;
  
+     // @@@DEPRECATED_2.122@@@
+     // Deprecated in 2.112, make it an error in 2.122
      // T opAssign floating yields a floating. Prevent truncating conversions (float to int).
      // See https://issues.dlang.org/show_bug.cgi?id=3841.
      // Should we also prevent double to float (type.isFloating() && type.size() < t2.size()) ?
!     if (!sc.inCfile &&
!         (op == EXP.addAssign || op == EXP.minAssign ||
!          op == EXP.mulAssign || op == EXP.divAssign || op == EXP.modAssign ||
!          op == EXP.powAssign))
      {
          if ((type.isIntegral() && t2.isFloating()))
          {
!             deprecation(loc, "`%s %s %s` is performing truncating conversion", type.toChars(), EXPtoString(op).ptr, t2.toChars());
          }
      }
  
*************** extern (D) Expression doCopyOrMove(Scope
*** 907,913 ****
      {
          e = callCpCtor(sc, e, t, nrvo);
      }
!     else if (move && sd && sd.hasMoveCtor && !e.isCallExp() && !e.isStructLiteralExp())
      {
          // #move
          /* Rewrite as:
--- 1917,1923 ----
      {
          e = callCpCtor(sc, e, t, nrvo);
      }
!     else if (move && sd && sd.hasMoveCtor && !canElideCopy(e, t ? t : e.type, false))
      {
          // #move
          /* Rewrite as:
*************** extern (D) Expression doCopyOrMove(Scope
*** 918,924 ****
          VarDeclaration vd = new VarDeclaration(e.loc, e.type, Identifier.generateId("__copyrvalue"), null);
          if (nrvo)
              vd.nrvo = true;
!         vd.storage_class |= STC.nodtor;
          vd.dsymbolSemantic(sc);
          Expression de = new DeclarationExp(e.loc, vd);
          Expression ve = new VarExp(e.loc, vd);
--- 1928,1934 ----
          VarDeclaration vd = new VarDeclaration(e.loc, e.type, Identifier.generateId("__copyrvalue"), null);
          if (nrvo)
              vd.nrvo = true;
!         vd.storage_class |= STC.temp | STC.rvalue | STC.nodtor;
          vd.dsymbolSemantic(sc);
          Expression de = new DeclarationExp(e.loc, vd);
          Expression ve = new VarExp(e.loc, vd);
*************** Expression resolvePropertiesOnly(Scope*
*** 1524,1564 ****
  {
      //printf("e1 = %s %s\n", Token.toChars(e1.op), e1.toChars());
  
-     Expression handleOverloadSet(OverloadSet os)
-     {
-         assert(os);
-         foreach (s; os.a)
-         {
-             auto fd = s.isFuncDeclaration();
-             auto td = s.isTemplateDeclaration();
-             if (fd)
-             {
-                 if (fd.type.isTypeFunction().isProperty)
-                     return resolveProperties(sc, e1);
-             }
-             else if (td && td.onemember && (fd = td.onemember.isFuncDeclaration()) !is null)
-             {
-                 if (fd.type.isTypeFunction().isProperty ||
-                     (fd.storage_class2 & STC.property) ||
-                     (td._scope.stc & STC.property))
-                     return resolveProperties(sc, e1);
-             }
-         }
-         return e1;
-     }
- 
      Expression handleTemplateDecl(TemplateDeclaration td)
      {
          assert(td);
!         if (td.onemember)
          {
!             if (auto fd = td.onemember.isFuncDeclaration())
!             {
!                 if (fd.type.isTypeFunction().isProperty ||
!                     (fd.storage_class2 & STC.property) ||
!                     (td._scope.stc & STC.property))
!                     return resolveProperties(sc, e1);
!             }
          }
          return e1;
      }
--- 2534,2552 ----
  {
      //printf("e1 = %s %s\n", Token.toChars(e1.op), e1.toChars());
  
      Expression handleTemplateDecl(TemplateDeclaration td)
      {
          assert(td);
!         td.computeOneMember();
!         if (!td.onemember)
!             return e1;
! 
!         if (auto fd = td.onemember.isFuncDeclaration())
          {
!             if (fd.type.isTypeFunction().isProperty ||
!                 (fd.storage_class2 & STC.property) ||
!                 (td._scope.stc & STC.property))
!                 return resolveProperties(sc, e1);
          }
          return e1;
      }
*************** Expression resolvePropertiesOnly(Scope*
*** 1571,1576 ****
--- 2559,2578 ----
          return e1;
      }
  
+     Expression handleOverloadSet(OverloadSet os)
+     {
+         assert(os);
+         foreach (s; os.a)
+         {
+             if (auto fd = s.isFuncDeclaration())
+                 return handleFuncDecl(fd);
+ 
+             if (auto td = s.isTemplateDeclaration())
+                 return handleTemplateDecl(td);
+         }
+         return e1;
+     }
+ 
      if (auto de = e1.isDotExp())
      {
          if (auto os = de.e2.isOverExp())
*************** Lagain:
*** 1788,1794 ****
          return ie.expressionSemantic(sc);
      }
  
!     if (Type t = s.getType())
      {
          return (new TypeExp(loc, t)).expressionSemantic(sc);
      }
--- 2790,2796 ----
          return ie.expressionSemantic(sc);
      }
  
!     if (Type t = dmd.dsymbolsem.getType(s))
      {
          return (new TypeExp(loc, t)).expressionSemantic(sc);
      }
*************** Lagain:
*** 1798,1804 ****
--- 2800,2809 ----
          if (tup.needThis() && hasThis(sc))
              e = new DotVarExp(loc, new ThisExp(loc), tup);
          else
+         {
              e = new TupleExp(loc, tup);
+             fillTupleExpExps(e.isTupleExp(), tup);
+         }
          e = e.expressionSemantic(sc);
          return e;
      }
*************** L1:
*** 1866,1872 ****
      {
          auto cls = ad.isClassDeclaration();
          auto classObj = new ObjcClassReferenceExp(e1.loc, cls);
!         classObj.type = objc.getRuntimeMetaclass(cls).getType();
          return classObj;
      }
  
--- 2871,2877 ----
      {
          auto cls = ad.isClassDeclaration();
          auto classObj = new ObjcClassReferenceExp(e1.loc, cls);
!         classObj.type = dmd.dsymbolsem.getType(objc.getRuntimeMetaclass(cls));
          return classObj;
      }
  
*************** public void errorSupplementalInferredAtt
*** 2159,2164 ****
--- 3164,3175 ----
      if (s.action.length > 0)
      {
          errorFunc(s.loc, "and %.*s makes it fail to infer `%.*s`", s.action.fTuple.expand, attr.fTuple.expand);
+         // For scope violations, also print why the target parameter is not scope
+         if (s.scopeVar)
+         {
+             import dmd.escape : printScopeReason;
+             printScopeReason(errorFunc, s.scopeVar, 10, false);
+         }
      }
      else if (s.fd)
      {
*************** private bool checkImpure(Scope* sc, Loc
*** 2304,2315 ****
  
  /*********************************************
   * Calling function f.
!  * Check the safety, i.e. if we're in a @safe function
   * we can only call @safe or @trusted functions.
!  * Returns true if error occurs.
   */
! private bool checkSafety(FuncDeclaration f, ref Loc loc, Scope* sc)
  {
      if (sc.func == f)
          return false;
      if (sc.intypeof == 1)
--- 3315,3332 ----
  
  /*********************************************
   * Calling function f.
!  * Check the safety, i.e. if we are in a @safe function
   * we can only call @safe or @trusted functions.
!  * Params:
!  *      f = function being called
!  *      loc = location for error messages
!  *      sc = context
!  *      arguments = array of actual arguments to function call, null for none
!  * Returns: true if unsafe (and diagnostic is generated)
   */
! private bool checkSafety(FuncDeclaration f, ref Loc loc, Scope* sc, Expressions* arguments)
  {
+     //printf("checkSafety() %s\n", f.toChars());
      if (sc.func == f)
          return false;
      if (sc.intypeof == 1)
*************** private bool checkSafety(FuncDeclaration
*** 2338,2343 ****
--- 3355,3377 ----
          return false;
      }
  
+     if (f.printf)
+     {
+         TypeFunction tf = f.type.isTypeFunction();
+         assert(tf);
+         const isVa_list = tf.parameterList.varargs == VarArg.none;
+         const nparams = tf.parameterList.length;
+         const nargs = arguments ? arguments.length : 0;
+         if (nparams == 1 && nargs)
+         {
+             if (auto se = (*arguments)[nparams - 1 - isVa_list].isStringExp())
+             {
+                 if (isFormatSafe(se.peekString()))
+                     return false;
+             }
+         }
+     }
+ 
      if (!f.isSafe() && !f.isTrusted())
      {
          if (isRootTraitsCompilesScope(sc) ? sc.func.isSafeBypassingInference() : sc.func.setUnsafeCall(f))
*************** private bool checkNogc(FuncDeclaration f
*** 2401,2407 ****
      if (f.isNogc())
          return false;
  
!     if (isRootTraitsCompilesScope(sc) ? !sc.func.isNogcBypassingInference() : !sc.func.setGCCall(f))
          return false;
  
      if (loc == Loc.initial) // e.g. implicitly generated dtor
--- 3435,3441 ----
      if (f.isNogc())
          return false;
  
!     if (isRootTraitsCompilesScope(sc) ? !sc.func.isNogcBypassingInference() : !sc.setGCCall(sc.func, f))
          return false;
  
      if (loc == Loc.initial) // e.g. implicitly generated dtor
*************** private bool checkPostblit(Type t, ref L
*** 2461,2467 ****
      //checkAccess(sd, loc, sc, sd.postblit);   // necessary?
      bool result = false;
      result |= sd.postblit.checkPurity(loc, sc);
!     result |= sd.postblit.checkSafety(loc, sc);
      result |= sd.postblit.checkNogc(loc, sc);
      return result;
  }
--- 3495,3501 ----
      //checkAccess(sd, loc, sc, sd.postblit);   // necessary?
      bool result = false;
      result |= sd.postblit.checkPurity(loc, sc);
!     result |= sd.postblit.checkSafety(loc, sc, null);
      result |= sd.postblit.checkNogc(loc, sc);
      return result;
  }
*************** private bool checkDefCtor(Loc loc, Type
*** 3036,3042 ****
   */
  private bool functionParameters(Loc loc, Scope* sc,
      TypeFunction tf, Expression ethis, Type tthis, ArgumentList argumentList, FuncDeclaration fd,
!     Type* prettype, Expression* peprefix)
  {
      Expressions* arguments = argumentList.arguments;
      //printf("functionParameters() fd: %s tf: %s\n", fd ? fd.ident.toChars() : "", toChars(tf));
--- 4070,4076 ----
   */
  private bool functionParameters(Loc loc, Scope* sc,
      TypeFunction tf, Expression ethis, Type tthis, ArgumentList argumentList, FuncDeclaration fd,
!     out Type prettype, out Expression peprefix)
  {
      Expressions* arguments = argumentList.arguments;
      //printf("functionParameters() fd: %s tf: %s\n", fd ? fd.ident.toChars() : "", toChars(tf));
*************** private bool functionParameters(Loc loc,
*** 3046,3052 ****
      const olderrors = global.errors;
      bool err = false;
      Expression eprefix = null;
-     *peprefix = null;
  
      if (argumentList.names)
      {
--- 4080,4085 ----
*************** private bool functionParameters(Loc loc,
*** 3109,3115 ****
       * Start with the `this` argument, later on merge into wildmatch the mod bits of the rest
       * of the arguments.
       */
!     MOD wildmatch = (tthis && !isCtorCall) ? tthis.Type.deduceWild(tf, false) : 0;
  
      bool done = false;
      foreach (const i; 0 .. n)
--- 4142,4148 ----
       * Start with the `this` argument, later on merge into wildmatch the mod bits of the rest
       * of the arguments.
       */
!     MOD wildmatch = (tthis && !isCtorCall) ? tthis.typeDeduceWild(tf, false) : 0;
  
      bool done = false;
      foreach (const i; 0 .. n)
*************** private bool functionParameters(Loc loc,
*** 3832,3839 ****
          tret = tret.substWildTo(wildmatch);
      }
  
!     *prettype = tret;
!     *peprefix = eprefix;
      return (err || olderrors != global.errors);
  }
  
--- 4865,4872 ----
          tret = tret.substWildTo(wildmatch);
      }
  
!     prettype = tret;
!     peprefix = eprefix;
      return (err || olderrors != global.errors);
  }
  
*************** private extern(C++) final class IsMemcmp
*** 3930,3938 ****
      public:
      bool result = false;
  
      override void visit(Type t)
      {
!         result = t.ty == Tvoid || (t.isScalar() && !t.isFloating());
      }
  
      override void visit(TypeStruct ts)
--- 4963,4990 ----
      public:
      bool result = false;
  
+     static Type loweredBaseElemOf(Type t)
+     {
+         t = t.baseElemOf(); // skip over static-array parents
+         switch (t.ty)
+         {
+             case Tvoid:
+                 return Type.tuns8;
+             case Tpointer:
+                 return Type.tsize_t;
+             default:
+                 return t;
+         }
+     }
+ 
+     static bool isTriviallyMemcmpable(Type t)
+     {
+         return loweredBaseElemOf(t).isIntegral();
+     }
+ 
      override void visit(Type t)
      {
!         result = isTriviallyMemcmpable(t);
      }
  
      override void visit(TypeStruct ts)
*************** private bool checkNestedFuncReference(Fu
*** 4061,4067 ****
              }
          }
          const lv = fdthis.getLevelAndCheck(loc, sc, fdv, fd);
!         if (lv == fd.LevelError)
              return true; // error
          if (lv == -1)
              return false; // downlevel call
--- 5113,5119 ----
              }
          }
          const lv = fdthis.getLevelAndCheck(loc, sc, fdv, fd);
!         if (lv == LevelError)
              return true; // error
          if (lv == -1)
              return false; // downlevel call
*************** private void unSpeculative(Scope* sc, Ro
*** 4159,4165 ****
              o = vd.type;
          else if (AliasDeclaration ad = d.isAliasDeclaration())
          {
!             o = ad.getType();
              if (!o)
                  o = ad.toAlias();
          }
--- 5211,5217 ----
              o = vd.type;
          else if (AliasDeclaration ad = d.isAliasDeclaration())
          {
!             o = dmd.dsymbolsem.getType(ad);
              if (!o)
                  o = ad.toAlias();
          }
*************** private extern (C++) final class Express
*** 4254,4290 ****
      {
          if (!e.type)
              e.type = Type.tfloat64;
-         else if (!e.type.isImaginary || !sc.inCfile)
-         {
-             e.type = e.type.typeSemantic(e.loc, sc);
-             result = e;
-             return;
-         }
- 
-         /* Convert to core.stdc.config.complex
-          */
-         Type t = getComplexLibraryType(e.loc, sc, e.type.ty);
-         if (t.ty == Terror)
-             return setError();
  
!         Type tf;
!         switch (e.type.ty)
!         {
!             case Timaginary32: tf = Type.tfloat32; break;
!             case Timaginary64: tf = Type.tfloat64; break;
!             case Timaginary80: tf = Type.tfloat80; break;
!             default:
!                 assert(0);
!         }
! 
!         /* Construct ts{re : 0.0, im : e}
!          */
!         TypeStruct ts = t.isTypeStruct;
!         Expressions* elements = new Expressions(2);
!         (*elements)[0] = new RealExp(e.loc,    CTFloat.zero, tf);
!         (*elements)[1] = new RealExp(e.loc, e.toImaginary(), tf);
!         Expression sle = new StructLiteralExp(e.loc, ts.sym, elements);
!         result = sle.expressionSemantic(sc);
      }
  
      override void visit(ComplexExp e)
--- 5306,5315 ----
      {
          if (!e.type)
              e.type = Type.tfloat64;
  
!         e.type = e.type.typeSemantic(e.loc, sc);
!         result = e;
!         return;
      }
  
      override void visit(ComplexExp e)
*************** private extern (C++) final class Express
*** 4310,4316 ****
                  setError();
              }
          }
!         scope (exit) result.rvalue = exp.rvalue;
  
          Dsymbol scopesym;
          Dsymbol s = sc.search(exp.loc, exp.ident, scopesym);
--- 5335,5345 ----
                  setError();
              }
          }
!         scope (exit)
!         {
!             if (result !is null)
!                 result.rvalue = exp.rvalue;
!         }
  
          Dsymbol scopesym;
          Dsymbol s = sc.search(exp.loc, exp.ident, scopesym);
*************** private extern (C++) final class Express
*** 4510,4516 ****
                  error(exp.loc, "`%s` is not defined, perhaps `import %.*s;` is needed?", exp.ident.toChars(), cast(int)n.length, n.ptr);
              else if (auto s2 = sc.search_correct(exp.ident))
                  error(exp.loc, "undefined identifier `%s`, did you mean %s `%s`?", exp.ident.toChars(), s2.kind(), s2.toChars());
!             else if (const p = Scope.search_correct_C(exp.ident))
                  error(exp.loc, "undefined identifier `%s`, did you mean `%s`?", exp.ident.toChars(), p);
              else if (exp.ident == Id.dollar)
                  error(exp.loc, "undefined identifier `$`");
--- 5539,5545 ----
                  error(exp.loc, "`%s` is not defined, perhaps `import %.*s;` is needed?", exp.ident.toChars(), cast(int)n.length, n.ptr);
              else if (auto s2 = sc.search_correct(exp.ident))
                  error(exp.loc, "undefined identifier `%s`, did you mean %s `%s`?", exp.ident.toChars(), s2.kind(), s2.toChars());
!             else if (const p = search_correct_C(exp.ident))
                  error(exp.loc, "undefined identifier `%s`, did you mean `%s`?", exp.ident.toChars(), p);
              else if (exp.ident == Id.dollar)
                  error(exp.loc, "undefined identifier `$`");
*************** private extern (C++) final class Express
*** 5072,5079 ****
              error(cle.loc, "cannot convert initializer `%s` to expression", toChars(init));
              return setError();
          }
!         result = e;
!         return;
      }
  
      override void visit(TypeExp exp)
--- 6101,6147 ----
              error(cle.loc, "cannot convert initializer `%s` to expression", toChars(init));
              return setError();
          }
! 
!         // leave these to be handled by their respective functions
!         if (e.isStringExp() || e.isStructLiteralExp() || e.isArrayLiteralExp() || e.isAssocArrayLiteralExp())
!         {
!             result = e;
!             return;
!         }
! 
!         if (sc.func)
!         {
!             Expression e0;
!             auto ve = extractSideEffect(sc, "__cl", e0, e, true);
! 
!             // export (int a = 5, a) so a doesn't forward ref
!             result = new CommaExp(cle.loc, e0, ve).expressionSemantic(sc);
!             return;
!         }
!         else //global variables
!         {
!             Identifier ident = Identifier.generateId("__cl");
!             auto tmp = new VarDeclaration(cle.loc, t, ident, new ExpInitializer(cle.loc, e));
! 
!             // static const type ???
!             tmp.storage_class = STC.static_ | STC.const_ | STC.ctfe;
! 
!             // for our global variables, we need them in our symbol table
!             if (sc._module)
!             {
!                 sc._module.members.push(tmp);
!             }
!             else if (sc.minst)
!             {
!                 sc.minst.members.push(tmp);
!             }
! 
!             dsymbolSemantic(tmp, sc);
! 
!             auto ve = new VarExp(cle.loc, tmp).expressionSemantic(sc);
!             result = ve;
!             return;
!         }
      }
  
      override void visit(TypeExp exp)
*************** private extern (C++) final class Express
*** 5243,5249 ****
          sds2.dsymbolSemantic(sc);
  
          // (Aggregate|Enum)Declaration
!         if (auto t = sds2.getType())
          {
              result = (new TypeExp(exp.loc, t)).expressionSemantic(sc);
              return;
--- 6311,6317 ----
          sds2.dsymbolSemantic(sc);
  
          // (Aggregate|Enum)Declaration
!         if (auto t = dmd.dsymbolsem.getType(sds2))
          {
              result = (new TypeExp(exp.loc, t)).expressionSemantic(sc);
              return;
*************** private extern (C++) final class Express
*** 5350,5362 ****
                  error(p.loc, "PlacementExpression `%s` is an rvalue, but must be an lvalue", p.toChars());
                  return setError();
              }
!             if (sc.setUnsafe(false, p.loc, "`@safe` function `%s` cannot use placement `new`", sc.func))
              {
                  return setError();
              }
!             if (!exp.placement.type.isNaked)
              {
!                 error(p.loc, "PlacementExpression `%s` of type `%s` be unshared and mutable", p.toChars(), toChars(p.type));
                  return setError();
              }
              checkModifiable(exp.placement, sc);
--- 6418,6435 ----
                  error(p.loc, "PlacementExpression `%s` is an rvalue, but must be an lvalue", p.toChars());
                  return setError();
              }
!             if (sc.setUnsafe(false, p.loc, "placement `new`", sc.func))
              {
                  return setError();
              }
!             if (!p.type.isNaked)
              {
!                 error(p.loc, "PlacementExpression `%s` of type `%s` must be unshared and mutable", p.toChars(), toChars(p.type));
!                 return setError();
!             }
!             if (p.type.ty == Tarray)
!             {
!                 error(p.loc, "PlacementExpression cannot be a dynamic array");
                  return setError();
              }
              checkModifiable(exp.placement, sc);
*************** private extern (C++) final class Express
*** 5629,5635 ****
                  TypeFunction tf = f.type.isTypeFunction();
                  if (!exp.arguments)
                      exp.arguments = new Expressions();
!                 if (functionParameters(exp.loc, sc, tf, null, exp.type, exp.argumentList, f, &exp.type, &exp.argprefix))
                      return setError();
  
                  exp.member = f.isCtorDeclaration();
--- 6702,6708 ----
                  TypeFunction tf = f.type.isTypeFunction();
                  if (!exp.arguments)
                      exp.arguments = new Expressions();
!                 if (functionParameters(exp.loc, sc, tf, null, exp.type, exp.argumentList, f, exp.type, exp.argprefix))
                      return setError();
  
                  exp.member = f.isCtorDeclaration();
*************** private extern (C++) final class Express
*** 5744,5750 ****
                  TypeFunction tf = f.type.isTypeFunction();
                  if (!exp.arguments)
                      exp.arguments = new Expressions();
!                 if (functionParameters(exp.loc, sc, tf, null, exp.type, exp.argumentList, f, &exp.type, &exp.argprefix))
                      return setError();
  
                  exp.member = f.isCtorDeclaration();
--- 6817,6823 ----
                  TypeFunction tf = f.type.isTypeFunction();
                  if (!exp.arguments)
                      exp.arguments = new Expressions();
!                 if (functionParameters(exp.loc, sc, tf, null, exp.type, exp.argumentList, f, exp.type, exp.argprefix))
                      return setError();
  
                  exp.member = f.isCtorDeclaration();
*************** private extern (C++) final class Express
*** 5848,5857 ****
  
              if (!global.params.useGC && sc.needsCodegen())
              {
!                 version(IN_GCC)
!                     error(exp.loc, "expression `%s` allocates with the GC and cannot be used with switch `-fno-rtti`", exp.toErrMsg());
!                 else
!                     error(exp.loc, "expression `%s` allocates with the GC and cannot be used with switch `-betterC`", exp.toErrMsg());
                  return setError();
              }
  
--- 6921,6927 ----
  
              if (!global.params.useGC && sc.needsCodegen())
              {
!                 error(exp.loc, "expression `%s` allocates with the GC and cannot be used with switch `-%s`", exp.toErrMsg(), SwitchVariadic.ptr);
                  return setError();
              }
  
*************** private extern (C++) final class Express
*** 6196,6202 ****
          //printf("td = %p, treq = %p\n", td, fd.treq);
          if (exp.td)
          {
!             assert(exp.td.parameters && exp.td.parameters.length);
              exp.td.dsymbolSemantic(sc);
              exp.type = Type.tvoid; // temporary type
  
--- 7266,7272 ----
          //printf("td = %p, treq = %p\n", td, fd.treq);
          if (exp.td)
          {
!             assert(exp.td.parameters);
              exp.td.dsymbolSemantic(sc);
              exp.type = Type.tvoid; // temporary type
  
*************** private extern (C++) final class Express
*** 6366,6372 ****
                      {
                          setError();
                      }
!                     else
                      {
                          result.rvalue = true;
                      }
--- 7436,7442 ----
                      {
                          setError();
                      }
!                     else if (result !is null)
                      {
                          result.rvalue = true;
                      }
*************** private extern (C++) final class Express
*** 6415,6431 ****
                  return;
              }
          }
-         if (sc.inCfile)
-         {
-             /* See if need to rewrite the AST because of cast/call ambiguity
-              */
-             if (auto e = castCallAmbiguity(exp, sc))
-             {
-                 result = expressionSemantic(e, sc);
-                 return;
-             }
-         }
- 
          if (Expression ex = resolveUFCS(sc, exp))
          {
              result = ex;
--- 7485,7490 ----
*************** private extern (C++) final class Express
*** 6725,6732 ****
                      return;
                  }
                  // No constructor, look for overload of opCall
!                 if (search_function(sd, Id.opCall))
!                     goto L1;
                  // overload of opCall, therefore it's a call
                  if (exp.e1.op != EXP.type)
                  {
--- 7784,7796 ----
                      return;
                  }
                  // No constructor, look for overload of opCall
!                 if (auto sym = search_function(sd, Id.opCall))
!                 {
!                     // Don't consider opCall on a type with no instance
!                     // if there's no static overload for it
!                     if (!exp.e1.isTypeExp() || hasStaticOverload(sym))
!                         goto L1;
!                 }
                  // overload of opCall, therefore it's a call
                  if (exp.e1.op != EXP.type)
                  {
*************** private extern (C++) final class Express
*** 7210,7216 ****
              if (exp.f)
              {
                  exp.f.checkPurity(exp.loc, sc);
!                 exp.f.checkSafety(exp.loc, sc);
                  exp.f.checkNogc(exp.loc, sc);
                  if (exp.f.checkNestedFuncReference(sc, exp.loc))
                      return setError();
--- 8274,8280 ----
              if (exp.f)
              {
                  exp.f.checkPurity(exp.loc, sc);
!                 exp.f.checkSafety(exp.loc, sc, exp.arguments);
                  exp.f.checkNogc(exp.loc, sc);
                  if (exp.f.checkNestedFuncReference(sc, exp.loc))
                      return setError();
*************** private extern (C++) final class Express
*** 7224,7230 ****
                          sc.func.kind(), sc.func.toPrettyChars(), p, exp.e1.toErrMsg());
                      err = true;
                  }
!                 if (!tf.isNogc && sc.func.setGC(exp.loc, "calling non-@nogc `%s`", exp.e1))
                  {
                      error(exp.loc, "`@nogc` %s `%s` cannot call non-@nogc %s `%s`",
                          sc.func.kind(), sc.func.toPrettyChars(), p, exp.e1.toErrMsg());
--- 8288,8294 ----
                          sc.func.kind(), sc.func.toPrettyChars(), p, exp.e1.toErrMsg());
                      err = true;
                  }
!                 if (!tf.isNogc && sc.setGC(sc.func, exp.loc, "calling non-@nogc `%s`", exp.e1))
                  {
                      error(exp.loc, "`@nogc` %s `%s` cannot call non-@nogc %s `%s`",
                          sc.func.kind(), sc.func.toPrettyChars(), p, exp.e1.toErrMsg());
*************** private extern (C++) final class Express
*** 7348,7354 ****
          Expression argprefix;
          if (!exp.arguments)
              exp.arguments = new Expressions();
!         if (functionParameters(exp.loc, sc, cast(TypeFunction)t1, ethis, tthis, exp.argumentList, exp.f, &exp.type, &argprefix))
              return setError();
  
          if (!exp.type)
--- 8412,8418 ----
          Expression argprefix;
          if (!exp.arguments)
              exp.arguments = new Expressions();
!         if (functionParameters(exp.loc, sc, cast(TypeFunction)t1, ethis, tthis, exp.argumentList, exp.f, exp.type, argprefix))
              return setError();
  
          if (!exp.type)
*************** private extern (C++) final class Express
*** 7481,7487 ****
  
          //printf("inserting '%s' %p into sc = %p\n", s.toChars(), s, sc);
          // Insert into both local scope and function scope.
!         // Must be unique in both.
          if (s.ident)
          {
              VarDeclaration v = s.isVarDeclaration();
--- 8545,8551 ----
  
          //printf("inserting '%s' %p into sc = %p\n", s.toChars(), s, sc);
          // Insert into both local scope and function scope.
!         // Must be unique in both (except for importC).
          if (s.ident)
          {
              VarDeclaration v = s.isVarDeclaration();
*************** private extern (C++) final class Express
*** 8667,8680 ****
  
          if (sc.inCfile)
          {
-             /* See if need to rewrite the AST because of cast/call ambiguity
-              */
-             if (auto e = castCallAmbiguity(exp, sc))
-             {
-                 result = expressionSemantic(e, sc);
-                 return;
-             }
- 
              if (exp.arrow) // ImportC only
                  exp.e1 = exp.e1.expressionSemantic(sc).arrayFuncConv(sc);
  
--- 9731,9736 ----
*************** private extern (C++) final class Express
*** 8794,8800 ****
          }
          else if (auto ad = exp.var.isAliasDeclaration())
          {
!             if (auto t = ad.getType())
              {
                  result = new TypeExp(exp.loc, t).expressionSemantic(sc);
                  return;
--- 9850,9856 ----
          }
          else if (auto ad = exp.var.isAliasDeclaration())
          {
!             if (auto t = dmd.dsymbolsem.getType(ad))
              {
                  result = new TypeExp(exp.loc, t).expressionSemantic(sc);
                  return;
*************** private extern (C++) final class Express
*** 8981,8987 ****
              return;
          }
  
!         exp.type = exp.sym.getType().addMod(exp.e1.type.mod);
          result = exp;
      }
  
--- 10037,10043 ----
              return;
          }
  
!         exp.type = dmd.dsymbolsem.getType(exp.sym).addMod(exp.e1.type.mod);
          result = exp;
      }
  
*************** private extern (C++) final class Express
*** 9004,9010 ****
               * since C regards string/array literals as lvalues
               */
              auto e = exp.e1;
!             if(e.isStringExp() || e.isArrayLiteralExp())
              {
                  e.type = typeSemantic(e.type, Loc.initial, sc);
                  // if type is already a pointer exp is an illegal expression of the form `&(&"")`
--- 10060,10066 ----
               * since C regards string/array literals as lvalues
               */
              auto e = exp.e1;
!             if (e.isStringExp() || e.isArrayLiteralExp())
              {
                  e.type = typeSemantic(e.type, Loc.initial, sc);
                  // if type is already a pointer exp is an illegal expression of the form `&(&"")`
*************** private extern (C++) final class Express
*** 9516,9522 ****
          {
              err |= !functionSemantic(cd.dtor);
              err |= cd.dtor.checkPurity(exp.loc, sc);
!             err |= cd.dtor.checkSafety(exp.loc, sc);
              err |= cd.dtor.checkNogc(exp.loc, sc);
          }
          if (err)
--- 10572,10578 ----
          {
              err |= !functionSemantic(cd.dtor);
              err |= cd.dtor.checkPurity(exp.loc, sc);
!             err |= cd.dtor.checkSafety(exp.loc, sc, null);
              err |= cd.dtor.checkNogc(exp.loc, sc);
          }
          if (err)
*************** private extern (C++) final class Express
*** 9608,9614 ****
              result = e1x;
              return;
          }
!         if (e1x.checkType())
              return setError();
          exp.e1 = e1x;
  
--- 10664,10670 ----
              result = e1x;
              return;
          }
!         if (!e1x.hasValidType())
              return setError();
          exp.e1 = e1x;
  
*************** private extern (C++) final class Express
*** 10188,10204 ****
              printf("ArrayExp::semantic('%s')\n", exp.toChars());
          }
  
-         if (sc.inCfile)
-         {
-             /* See if need to rewrite the AST because of cast/call ambiguity
-              */
-             if (auto e = castCallAmbiguity(exp, sc))
-             {
-                 result = expressionSemantic(e, sc);
-                 return;
-             }
-         }
- 
          result = exp.carraySemantic(sc);  // C semantics
          if (result)
              return;
--- 11244,11249 ----
*************** private extern (C++) final class Express
*** 10527,10533 ****
                   * https://issues.dlang.org/show_bug.cgi?id=2684
                   * see also bug https://issues.dlang.org/show_bug.cgi?id=2954 b
                   */
!                 if (!arrayTypeCompatibleWithoutCasting(exp.e2.type, taa.index))
                  {
                      exp.e2 = exp.e2.implicitCastTo(sc, taa.index); // type checking
                      if (exp.e2.type == Type.terror)
--- 11572,11578 ----
                   * https://issues.dlang.org/show_bug.cgi?id=2684
                   * see also bug https://issues.dlang.org/show_bug.cgi?id=2954 b
                   */
!                 if (!keyCompatibleWithoutCasting(exp.e2, taa.index))
                  {
                      exp.e2 = exp.e2.implicitCastTo(sc, taa.index); // type checking
                      if (exp.e2.type == Type.terror)
*************** private extern (C++) final class Express
*** 10639,10655 ****
              printf("PostExp::semantic('%s')\n", exp.toChars());
          }
  
-         if (sc.inCfile)
-         {
-             /* See if need to rewrite the AST because of cast/call ambiguity
-              */
-             if (auto e = castCallAmbiguity(exp, sc))
-             {
-                 result = expressionSemantic(e, sc);
-                 return;
-             }
-         }
- 
          if (auto ae = exp.e1.isArrayExp())
              markArrayExpModifiable(ae);
  
--- 11684,11689 ----
*************** private extern (C++) final class Express
*** 12043,12058 ****
                      return setError();
  
                  // Lower to object._d_array{,set}ctor(e1, e2)
!                 Expression id = new IdentifierExp(exp.loc, Id.empty);
!                 id = new DotIdExp(exp.loc, id, Id.object);
!                 id = new DotIdExp(exp.loc, id, func);
  
                  auto arguments = new Expressions(new CastExp(ae.loc, ae.e1, t1e.arrayOf).expressionSemantic(sc));
                  if (lowerToArrayCtor)
                  {
                      arguments.push(new CastExp(ae.loc, rhs, t2b.nextOf.arrayOf).expressionSemantic(sc));
!                     Expression ce = new CallExp(exp.loc, id, arguments);
!                     res = ce.expressionSemantic(sc);
                  }
                  else
                  {
--- 13077,13092 ----
                      return setError();
  
                  // Lower to object._d_array{,set}ctor(e1, e2)
!                 Expression lowering = new IdentifierExp(ae.loc, Id.empty);
!                 lowering = new DotIdExp(ae.loc, lowering, Id.object);
!                 lowering = new DotIdExp(ae.loc, lowering, func);
  
                  auto arguments = new Expressions(new CastExp(ae.loc, ae.e1, t1e.arrayOf).expressionSemantic(sc));
                  if (lowerToArrayCtor)
                  {
                      arguments.push(new CastExp(ae.loc, rhs, t2b.nextOf.arrayOf).expressionSemantic(sc));
!                     lowering = new CallExp(ae.loc, lowering, arguments);
!                     lowering = lowering.expressionSemantic(sc);
                  }
                  else
                  {
*************** private extern (C++) final class Express
*** 12067,12078 ****
                      else
                          arguments.push(ae.e2);
  
!                     Expression ce = new CallExp(exp.loc, id, arguments);
!                     res = Expression.combine(e0, ce).expressionSemantic(sc);
                  }
  
                  if (global.params.v.verbose)
!                     message("lowered   %s =>\n          %s", exp.toChars(), res.toChars());
              }
          }
          else if (auto ae = res.isAssignExp())
--- 13101,13114 ----
                      else
                          arguments.push(ae.e2);
  
!                     lowering = new CallExp(ae.loc, lowering, arguments);
!                     lowering = Expression.combine(e0, lowering).expressionSemantic(sc);
                  }
  
+                 ae.lowering = lowering;
+ 
                  if (global.params.v.verbose)
!                     message("lowered   %s =>\n          %s", exp.toChars(), lowering.toChars());
              }
          }
          else if (auto ae = res.isAssignExp())
*************** private extern (C++) final class Express
*** 13634,13640 ****
                  TypeAArray ta = cast(TypeAArray)t2b;
  
                  // Special handling for array keys
!                 if (!arrayTypeCompatibleWithoutCasting(exp.e1.type, ta.index))
                  {
                      // Convert key to type of key
                      exp.e1 = exp.e1.implicitCastTo(sc, ta.index);
--- 14670,14676 ----
                  TypeAArray ta = cast(TypeAArray)t2b;
  
                  // Special handling for array keys
!                 if (!keyCompatibleWithoutCasting(exp.e1, ta.index))
                  {
                      // Convert key to type of key
                      exp.e1 = exp.e1.implicitCastTo(sc, ta.index);
*************** private extern (C++) final class Express
*** 13829,13843 ****
          {
              Type t1n = t1.nextOf().toBasetype();
              Type t2n = t2.nextOf().toBasetype();
-             const t1nsz = t1n.size();
-             const t2nsz = t2n.size();
  
!             if ((t1n.ty == Tvoid || (t1n.isScalar() && !t1n.isFloating())) &&
!                 (t2n.ty == Tvoid || (t2n.isScalar() && !t1n.isFloating())) &&
!                 t1nsz == t2nsz && t1n.isUnsigned() == t2n.isUnsigned())
              {
!                 return true;
              }
              if (t1n.constOf() != t2n.constOf())
              {
                  return false;
--- 14865,14884 ----
          {
              Type t1n = t1.nextOf().toBasetype();
              Type t2n = t2.nextOf().toBasetype();
  
!             if (t1n.size() != t2n.size())
!                 return false;
! 
!             if (IsMemcmpableVisitor.isTriviallyMemcmpable(t1n) &&
!                 IsMemcmpableVisitor.isTriviallyMemcmpable(t2n))
              {
!                 // due to int promotion, disallow small integers of diverging signed-ness
!                 Type e1 = IsMemcmpableVisitor.loweredBaseElemOf(t1n);
!                 Type e2 = IsMemcmpableVisitor.loweredBaseElemOf(t2n);
!                 if ((e1.size() >= 4 && e2.size() >= 4) || e1.isUnsigned() == e2.isUnsigned())
!                     return true;
              }
+ 
              if (t1n.constOf() != t2n.constOf())
              {
                  return false;
*************** private extern (C++) final class Express
*** 13852,13858 ****
                  if (global.params.useTypeInfo && Type.dtypeinfo)
                      semanticTypeInfo(sc, ts);
  
!                 auto v = new IsMemcmpableVisitor();
                  ts.accept(v);
                  return v.result;
              }
--- 14893,14899 ----
                  if (global.params.useTypeInfo && Type.dtypeinfo)
                      semanticTypeInfo(sc, ts);
  
!                 scope v = new IsMemcmpableVisitor();
                  ts.accept(v);
                  return v.result;
              }
*************** Expression dotIdSemanticProp(DotIdExp ex
*** 14854,14860 ****
                  return new OverExp(exp.loc, o);
              }
  
!             if (auto t = s.getType())
              {
                  return (new TypeExp(exp.loc, t)).expressionSemantic(sc);
              }
--- 15895,15901 ----
                  return new OverExp(exp.loc, o);
              }
  
!             if (auto t = dmd.dsymbolsem.getType(s))
              {
                  return (new TypeExp(exp.loc, t)).expressionSemantic(sc);
              }
*************** Expression dotIdSemanticProp(DotIdExp ex
*** 14868,14873 ****
--- 15909,15915 ----
                      return e;
                  }
                  Expression e = new TupleExp(exp.loc, tup);
+                 fillTupleExpExps(e.isTupleExp(), tup);
                  e = e.expressionSemantic(sc);
                  return e;
              }
*************** Expression dotTemplateSemanticProp(DotTe
*** 15183,15188 ****
--- 16225,16232 ----
  
  MATCH matchType(FuncExp funcExp, Type to, Scope* sc, FuncExp* presult, ErrorSink eSink)
  {
+     import dmd.typesem : merge;
+ 
      auto loc = funcExp.loc;
      auto tok = funcExp.tok;
      auto td = funcExp.td;
*************** Expression toLvalue(Expression _this, Sc
*** 16220,16226 ****
          }
          if (!_this.isLvalue())
              return visit(_this);
!         if (e1.op == EXP.this_ && sc.ctorflow.fieldinit.length && !(sc.ctorflow.callSuper & CSX.any_ctor))
          {
              if (VarDeclaration vd = var.isVarDeclaration())
              {
--- 17264,17270 ----
          }
          if (!_this.isLvalue())
              return visit(_this);
!         if (e1.op == EXP.this_ && sc && sc.ctorflow.fieldinit.length && !(sc.ctorflow.callSuper & CSX.any_ctor))
          {
              if (VarDeclaration vd = var.isVarDeclaration())
              {
*************** private bool checkAddressVar(Scope* sc,
*** 16709,16715 ****
              "taking the address of local variable `%s`" :
              "taking the address of stack-allocated local variable `%s`";
          if (sc.useDIP1000 != FeatureState.enabled &&
!             !(v.storage_class & STC.temp) &&
              sc.setUnsafe(false, exp.loc, msg.ptr, v))
          {
              return false;
--- 17753,17759 ----
              "taking the address of local variable `%s`" :
              "taking the address of stack-allocated local variable `%s`";
          if (sc.useDIP1000 != FeatureState.enabled &&
!             (!(v.storage_class & STC.temp) || v.storage_class & STC.result) &&
              sc.setUnsafe(false, exp.loc, msg.ptr, v))
          {
              return false;
*************** bool checkAddressable(Expression e, Scop
*** 16787,16793 ****
   * and usage of `deprecated` and `@disabled`-ed symbols are checked.
   *
   * Params:
!  *  exp = expression to check attributes for
   *  sc  = scope of the function
   *  f   = function to be checked
   * Returns: `true` if error occur.
--- 17831,17837 ----
   * and usage of `deprecated` and `@disabled`-ed symbols are checked.
   *
   * Params:
!  *  exp = expression to check attributes for (CallExp or NewExp)
   *  sc  = scope of the function
   *  f   = function to be checked
   * Returns: `true` if error occur.
*************** private bool checkFunctionAttributes(Exp
*** 16797,16803 ****
      bool error = f.checkDisabled(exp.loc, sc);
      error |= f.checkDeprecated(exp.loc, sc);
      error |= f.checkPurity(exp.loc, sc);
!     error |= f.checkSafety(exp.loc, sc);
      error |= f.checkNogc(exp.loc, sc);
      return error;
  }
--- 17841,17848 ----
      bool error = f.checkDisabled(exp.loc, sc);
      error |= f.checkDeprecated(exp.loc, sc);
      error |= f.checkPurity(exp.loc, sc);
!     Expressions* arguments = exp.isCallExp() ? exp.isCallExp().arguments : null;
!     error |= f.checkSafety(exp.loc, sc, arguments);
      error |= f.checkNogc(exp.loc, sc);
      return error;
  }
*************** private VarDeclaration makeThis2Argument
*** 16907,16913 ****
  bool verifyHookExist(Loc loc, ref Scope sc, Identifier id, string description, Identifier module_ = Id.object)
  {
      Dsymbol pscopesym;
!     auto rootSymbol = sc.search(loc, Id.empty, pscopesym);
      if (auto moduleSymbol = rootSymbol.search(loc, module_))
          if (moduleSymbol.search(loc, id))
            return true;
--- 17952,17958 ----
  bool verifyHookExist(Loc loc, ref Scope sc, Identifier id, string description, Identifier module_ = Id.object)
  {
      Dsymbol pscopesym;
!     auto rootSymbol = search(&sc, loc, Id.empty, pscopesym);
      if (auto moduleSymbol = rootSymbol.search(loc, module_))
          if (moduleSymbol.search(loc, id))
            return true;
*************** private bool fit(StructDeclaration sd, L
*** 17010,17020 ****
              Type typeb = se.type.toBasetype();
              TY tynto = tb.nextOf().ty;
              if (!se.committed &&
!                 typeb.isStaticOrDynamicArray() && tynto.isSomeChar &&
!                 se.numberOfCodeUnits(tynto) < (cast(TypeSArray)tb).dim.toInteger())
              {
!                 e = se.castTo(sc, t);
!                 goto L1;
              }
          }
  
--- 18055,18071 ----
              Type typeb = se.type.toBasetype();
              TY tynto = tb.nextOf().ty;
              if (!se.committed &&
!                 typeb.isStaticOrDynamicArray() && tynto.isSomeChar)
              {
!                 string s;
!                 size_t len = se.numberOfCodeUnits(tynto, s);
!                 if (s)
!                     error(se.loc, "%.*s", cast(int)s.length, s.ptr);
!                 if (len < (cast(TypeSArray)tb).dim.toInteger())
!                 {
!                     e = se.castTo(sc, t);
!                     goto L1;
!                 }
              }
          }
  
*************** void semanticTypeInfo(Scope* sc, Type t)
*** 17624,17637 ****
          else if (TemplateInstance ti = sd.isInstantiated())
          {
              if (ti.minst && !ti.minst.isRoot())
!                 Module.addDeferredSemantic3(sd);
          }
          else
          {
              if (sd.inNonRoot())
              {
                  //printf("deferred sem3 for TypeInfo - sd = %s, inNonRoot = %d\n", sd.toChars(), sd.inNonRoot());
!                 Module.addDeferredSemantic3(sd);
              }
          }
      }
--- 18675,18688 ----
          else if (TemplateInstance ti = sd.isInstantiated())
          {
              if (ti.minst && !ti.minst.isRoot())
!                 addDeferredSemantic3(sd);
          }
          else
          {
              if (sd.inNonRoot())
              {
                  //printf("deferred sem3 for TypeInfo - sd = %s, inNonRoot = %d\n", sd.toChars(), sd.inNonRoot());
!                 addDeferredSemantic3(sd);
              }
          }
      }
*************** private bool needsTypeInference(Template
*** 17832,17845 ****
              auto td = s.isTemplateDeclaration();
              if (!td)
                  return 0;
- 
              /* If any of the overloaded template declarations need inference,
               * then return true
               */
              if (!td.onemember)
                  return 0;
              if (auto td2 = td.onemember.isTemplateDeclaration())
              {
                  if (!td2.onemember || !td2.onemember.isFuncDeclaration())
                      return 0;
                  if (ti.tiargs.length >= td.parameters.length - (td.isVariadic() ? 1 : 0))
--- 18883,18897 ----
              auto td = s.isTemplateDeclaration();
              if (!td)
                  return 0;
              /* If any of the overloaded template declarations need inference,
               * then return true
               */
+             td.computeOneMember();
              if (!td.onemember)
                  return 0;
              if (auto td2 = td.onemember.isTemplateDeclaration())
              {
+                 td2.computeOneMember();
                  if (!td2.onemember || !td2.onemember.isFuncDeclaration())
                      return 0;
                  if (ti.tiargs.length >= td.parameters.length - (td.isVariadic() ? 1 : 0))
*************** void lowerNonArrayAggregate(StaticForeac
*** 18260,18267 ****
  */
  extern(D) void prepare(StaticForeach sfe, Scope* sc)
  {
!     assert(sc);
  
      if (sfe.aggrfe)
      {
          sc = sc.startCTFE();
--- 19312,19320 ----
  */
  extern(D) void prepare(StaticForeach sfe, Scope* sc)
  {
!     import dmd.statementsem : ready;
  
+     assert(sc);
      if (sfe.aggrfe)
      {
          sc = sc.startCTFE();
*************** private Expression rewriteAAIndexAssign(
*** 18692,18698 ****
      foreach (ekey; ekeys)
      {
          Type tidx = ekey.type.toBasetype();
!         if (tidx.ty == Tarray && tidx.nextOf().isMutable())
          {
              error(loc, "associative arrays can only be assigned values with immutable keys, not `%s`", tidx.toChars());
              return ErrorExp.get();
--- 19745,19751 ----
      foreach (ekey; ekeys)
      {
          Type tidx = ekey.type.toBasetype();
!         if (tidx.ty == Tarray && tidx.nextOf().isMutable() && !ekey.isArrayLiteralExp())
          {
              error(loc, "associative arrays can only be assigned values with immutable keys, not `%s`", tidx.toChars());
              return ErrorExp.get();
*************** private Expression rewriteAAIndexAssign(
*** 18701,18712 ****
      // extract side effects in lexical order
      for (size_t i = ekeys.length; i > 0; --i)
          ekeys[i-1] = extractSideEffect(sc, "__aakey", e0, ekeys[i-1]);
!     Expression ev = extractSideEffect(sc, "__aaval", e0, exp.e2);
  
      // generate series of calls to _d_aaGetY
      for (size_t i = ekeys.length; i > 0; --i)
      {
!         auto taa = eaa.type.isTypeAArray();
          assert (taa); // type must not have changed during rewrite
          Expression func = new IdentifierExp(loc, Id.empty);
          func = new DotIdExp(loc, func, Id.object);
--- 19754,19769 ----
      // extract side effects in lexical order
      for (size_t i = ekeys.length; i > 0; --i)
          ekeys[i-1] = extractSideEffect(sc, "__aakey", e0, ekeys[i-1]);
!     // some implicit conversions are lost when assigning to a temporary, e.g. from array literal
!     auto taa = eaa.type.isTypeAArray();
!     auto match = exp.e2.implicitConvTo(taa.next);
!     auto e2 = match == MATCH.exact || match == MATCH.nomatch ? exp.e2 : exp.e2.implicitCastTo(sc, taa.next);
!     Expression ev = extractSideEffect(sc, "__aaval", e0, e2); // must be evaluated before the insertion
  
      // generate series of calls to _d_aaGetY
      for (size_t i = ekeys.length; i > 0; --i)
      {
!         taa = eaa.type.isTypeAArray();
          assert (taa); // type must not have changed during rewrite
          Expression func = new IdentifierExp(loc, Id.empty);
          func = new DotIdExp(loc, func, Id.object);
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/file_manager.d gcc-16-20260208/gcc/d/dmd/file_manager.d
*** gcc-16-20260201/gcc/d/dmd/file_manager.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/file_manager.d	Sun Feb  8 22:32:07 2026
*************** module dmd.file_manager;
*** 13,19 ****
  import core.stdc.stdio;
  import dmd.common.outbuffer;
  import dmd.root.stringtable : StringTable;
! import dmd.root.file : File, Buffer;
  import dmd.root.filename : FileName, isDirSeparator;
  import dmd.root.string : toDString;
  import dmd.globals;
--- 13,19 ----
  import core.stdc.stdio;
  import dmd.common.outbuffer;
  import dmd.root.stringtable : StringTable;
! import dmd.root.file : File;
  import dmd.root.filename : FileName, isDirSeparator;
  import dmd.root.string : toDString;
  import dmd.globals;
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/func.d gcc-16-20260208/gcc/d/dmd/func.d
*** gcc-16-20260201/gcc/d/dmd/func.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/func.d	Sun Feb  8 22:32:07 2026
*************** import core.stdc.string;
*** 23,61 ****
  import dmd.aggregate;
  import dmd.arraytypes;
  import dmd.astenums;
- import dmd.blockexit;
- import dmd.dcast;
  import dmd.dclass;
  import dmd.declaration;
- import dmd.delegatize;
- import dmd.dmodule;
- import dmd.dscope;
- import dmd.dstruct;
  import dmd.dsymbol;
  import dmd.dtemplate;
- import dmd.escape;
- import dmd.expression;
- import dmd.funcsem : isUnique;
  import dmd.globals;
  import dmd.hdrgen;
  import dmd.id;
  import dmd.identifier;
- import dmd.init;
  import dmd.location;
  import dmd.mtype;
  import dmd.objc;
  import dmd.common.outbuffer;
  import dmd.rootobject;
- import dmd.root.string;
- import dmd.root.stringtable;
  import dmd.statement;
  import dmd.tokens;
  import dmd.visitor;
  
- version (IN_GCC) {}
- else version (IN_LLVM) {}
- else version = MARS;
- 
  /// Inline Status
  enum ILS : ubyte
  {
--- 23,46 ----
  import dmd.aggregate;
  import dmd.arraytypes;
  import dmd.astenums;
  import dmd.dclass;
  import dmd.declaration;
  import dmd.dsymbol;
  import dmd.dtemplate;
  import dmd.globals;
  import dmd.hdrgen;
  import dmd.id;
  import dmd.identifier;
  import dmd.location;
  import dmd.mtype;
  import dmd.objc;
  import dmd.common.outbuffer;
  import dmd.rootobject;
  import dmd.statement;
+ import dmd.targetcompiler;
  import dmd.tokens;
  import dmd.visitor;
  
  /// Inline Status
  enum ILS : ubyte
  {
*************** private struct ContractInfo
*** 189,194 ****
--- 174,213 ----
      Expressions* fdensureParams;        /// argument list for __ensure
  }
  
+ /// Information for data flow analysis regarding parameters
+ extern(D) struct ParametersDFAInfo
+ {
+     ParameterDFAInfo thisPointer;
+     ParameterDFAInfo returnValue;
+     ParameterDFAInfo[] parameters;
+ }
+ 
+ /// Information for data flow analysis per parameter
+ extern(D) struct ParameterDFAInfo
+ {
+     /// Parameter id: -1 this, -2 return, otherwise it is FuncDeclaration.parameters index
+     int parameterId;
+ 
+     /// Is the parameter non-null upon input, only applies to pointers.
+     Fact notNullIn;
+     /// Is the parameter non-null, applies only for by-ref parameters that are pointers.
+     Fact notNullOut;
+ 
+     /// Was the attributes for this parameter specified by the user?
+     bool specifiedByUser;
+ 
+     /// Given a property, has it been specificed and is it guaranteed?
+     enum Fact : ubyte
+     {
+         ///
+         Unspecified,
+         ///
+         NotGuaranteed,
+         ///
+         Guaranteed
+     }
+ }
+ 
  /***********************************************************
   */
  extern (C++) class FuncDeclaration : Declaration
*************** extern (C++) class FuncDeclaration : Dec
*** 245,255 ****
  
      GotoStatements* gotos;              /// Gotos with forward references
  
!     version (MARS)
!     {
!         VarDeclarations* alignSectionVars;  /// local variables with alignment needs larger than stackAlign
!         void* salignSection;              /// pointer to aligned section, if any
!     }
  
      /// set if this is a known, builtin function we can evaluate at compile time
      BUILTIN builtin = BUILTIN.unknown;
--- 264,270 ----
  
      GotoStatements* gotos;              /// Gotos with forward references
  
!     mixin FuncDeclarationExtra;
  
      /// set if this is a known, builtin function we can evaluate at compile time
      BUILTIN builtin = BUILTIN.unknown;
*************** extern (C++) class FuncDeclaration : Dec
*** 285,290 ****
--- 300,307 ----
      AttributeViolation* pureViolation;
      AttributeViolation* nothrowViolation;
  
+     ParametersDFAInfo* parametersDFAInfo;
+ 
      /// See the `FUNCFLAG` struct
      import dmd.common.bitfields;
      mixin(generateBitFields!(FUNCFLAG, uint));
*************** extern (C++) class FuncDeclaration : Dec
*** 315,322 ****
          /* The type given for "infer the return type" is a TypeFunction with
           * NULL for the return type.
           */
!         if (type && type.nextOf() is null)
!             this.inferRetType = true;
      }
  
      static FuncDeclaration create(Loc loc, Loc endloc, Identifier id, StorageClass storage_class, Type type, bool noreturn = false)
--- 332,344 ----
          /* The type given for "infer the return type" is a TypeFunction with
           * NULL for the return type.
           */
!         if (type)
!         {
!             if (auto tf = type.isTypeFunction())
!                 this.inferRetType = tf.next is null;
!             else
!                 assert(0); // unreachable
!         }
      }
  
      static FuncDeclaration create(Loc loc, Loc endloc, Identifier id, StorageClass storage_class, Type type, bool noreturn = false)
*************** extern (C++) class FuncDeclaration : Dec
*** 373,465 ****
          return f;
      }
  
-     override final bool equals(const RootObject o) const
-     {
-         if (this == o)
-             return true;
- 
-         auto s = isDsymbol(o);
-         if (!s)
-             return false;
- 
-         auto fd1 = this;
-         auto fd2 = s.isFuncDeclaration();
-         if (!fd2)
-             return false;
- 
-         auto fa1 = fd1.isFuncAliasDeclaration();
-         auto faf1 = fa1 ? fa1.toAliasFunc() : fd1;
- 
-         auto fa2 = fd2.isFuncAliasDeclaration();
-         auto faf2 = fa2 ? fa2.toAliasFunc() : fd2;
- 
-         if (fa1 && fa2)
-             return faf1.equals(faf2) && fa1.hasOverloads == fa2.hasOverloads;
- 
-         bool b1 = fa1 !is null;
-         if (b1 && faf1.isUnique() && !fa1.hasOverloads)
-             b1 = false;
- 
-         bool b2 = fa2 !is null;
-         if (b2 && faf2.isUnique() && !fa2.hasOverloads)
-             b2 = false;
- 
-         if (b1 != b2)
-             return false;
- 
-         return faf1.toParent().equals(faf2.toParent()) &&
-                faf1.ident.equals(faf2.ident) &&
-                faf1.type.equals(faf2.type);
-     }
- 
-     /****************************************************
-      * Overload this FuncDeclaration with the new one f.
-      * Return true if successful; i.e. no conflict.
-      */
-     override bool overloadInsert(Dsymbol s)
-     {
-         //printf("FuncDeclaration::overloadInsert(s = %s) this = %s\n", s.toChars(), toChars());
-         assert(s != this);
-         if (AliasDeclaration ad = s.isAliasDeclaration())
-         {
-             if (overnext)
-                 return overnext.overloadInsert(ad);
-             if (!ad.aliassym && ad.type.ty != Tident && ad.type.ty != Tinstance && ad.type.ty != Ttypeof)
-             {
-                 //printf("\tad = '%s'\n", ad.type.toChars());
-                 return false;
-             }
-             overnext = ad;
-             //printf("\ttrue: no conflict\n");
-             return true;
-         }
-         TemplateDeclaration td = s.isTemplateDeclaration();
-         if (td)
-         {
-             if (!td.funcroot)
-                 td.funcroot = this;
-             if (overnext)
-                 return overnext.overloadInsert(td);
-             overnext = td;
-             return true;
-         }
-         FuncDeclaration fd = s.isFuncDeclaration();
-         if (!fd)
-             return false;
- 
-         if (overnext)
-         {
-             td = overnext.isTemplateDeclaration();
-             if (td)
-                 fd.overloadInsert(td);
-             else
-                 return overnext.overloadInsert(fd);
-         }
-         overnext = fd;
-         //printf("\ttrue: no conflict\n");
-         return true;
-     }
- 
      /********************************************
       * find function template root in overload list
       */
--- 395,400 ----
*************** extern (C++) class FuncDeclaration : Dec
*** 518,581 ****
          return cast(LabelDsymbol)s;
      }
  
-     /*****************************************
-      * Determine lexical level difference from `this` to nested function `fd`.
-      * Params:
-      *      fd = target of call
-      *      intypeof = !=0 if inside typeof
-      * Returns:
-      *      0       same level
-      *      >0      decrease nesting by number
-      *      -1      increase nesting by 1 (`fd` is nested within `this`)
-      *      LevelError  error, `this` cannot call `fd`
-      */
-     extern (D) final int getLevel(FuncDeclaration fd, int intypeof)
-     {
-         //printf("FuncDeclaration::getLevel(fd = '%s')\n", fd.toChars());
-         Dsymbol fdparent = fd.toParent2();
-         if (fdparent == this)
-             return -1;
- 
-         Dsymbol s = this;
-         int level = 0;
-         while (fd != s && fdparent != s.toParent2())
-         {
-             //printf("\ts = %s, '%s'\n", s.kind(), s.toChars());
-             if (auto thisfd = s.isFuncDeclaration())
-             {
-                 if (!thisfd.isNested() && !thisfd.vthis && !intypeof)
-                     return LevelError;
-             }
-             else
-             {
-                 if (auto thiscd = s.isAggregateDeclaration())
-                 {
-                     /* AggregateDeclaration::isNested returns true only when
-                      * it has a hidden pointer.
-                      * But, calling the function belongs unrelated lexical scope
-                      * is still allowed inside typeof.
-                      *
-                      * struct Map(alias fun) {
-                      *   typeof({ return fun(); }) RetType;
-                      *   // No member function makes Map struct 'not nested'.
-                      * }
-                      */
-                     if (!thiscd.isNested() && !intypeof)
-                         return LevelError;
-                 }
-                 else
-                     return LevelError;
-             }
- 
-             s = s.toParentP(fd);
-             assert(s);
-             level++;
-         }
-         return level;
-     }
- 
-     enum LevelError = -2;
- 
      override const(char)* toPrettyChars(bool QualifyTypes = false)
      {
          if (isMain())
--- 453,458 ----
*************** extern (C++) class FuncDeclaration : Dec
*** 833,931 ****
          return this.isGenerated ? "generated function" : "function";
      }
  
-     /*******************************
-      * Look at all the variables in this function that are referenced
-      * by nested functions, and determine if a closure needs to be
-      * created for them.
-      */
-     final bool needsClosure()
-     {
-         /* Need a closure for all the closureVars[] if any of the
-          * closureVars[] are accessed by a
-          * function that escapes the scope of this function.
-          * We take the conservative approach and decide that a function needs
-          * a closure if it:
-          * 1) is a virtual function
-          * 2) has its address taken
-          * 3) has a parent that escapes
-          * 4) calls another nested function that needs a closure
-          *
-          * Note that since a non-virtual function can be called by
-          * a virtual one, if that non-virtual function accesses a closure
-          * var, the closure still has to be taken. Hence, we check for isThis()
-          * instead of isVirtual(). (thanks to David Friedman)
-          *
-          * When the function returns a local struct or class, `requiresClosure`
-          * is already set to `true` upon entering this function when the
-          * struct/class refers to a local variable and a closure is needed.
-          */
-         //printf("FuncDeclaration::needsClosure() %s\n", toPrettyChars());
- 
-         if (requiresClosure)
-             goto Lyes;
- 
-         for (size_t i = 0; i < closureVars.length; i++)
-         {
-             VarDeclaration v = closureVars[i];
-             //printf("\tv = %s\n", v.toChars());
- 
-             for (size_t j = 0; j < v.nestedrefs.length; j++)
-             {
-                 FuncDeclaration f = v.nestedrefs[j];
-                 assert(f != this);
- 
-                 /* __require and __ensure will always get called directly,
-                  * so they never make outer functions closure.
-                  */
-                 if (f.ident == Id.require || f.ident == Id.ensure)
-                     continue;
- 
-                 //printf("\t\tf = %p, %s, isVirtual=%d, isThis=%p, tookAddressOf=%d\n", f, f.toChars(), f.isVirtual(), f.isThis(), f.tookAddressOf);
- 
-                 /* Look to see if f escapes. We consider all parents of f within
-                  * this, and also all siblings which call f; if any of them escape,
-                  * so does f.
-                  * Mark all affected functions as requiring closures.
-                  */
-                 for (Dsymbol s = f; s && s != this; s = s.toParentP(this))
-                 {
-                     FuncDeclaration fx = s.isFuncDeclaration();
-                     if (!fx)
-                         continue;
-                     if (fx.isThis() || fx.tookAddressOf)
-                     {
-                         //printf("\t\tfx = %s, isVirtual=%d, isThis=%p, tookAddressOf=%d\n", fx.toChars(), fx.isVirtual(), fx.isThis(), fx.tookAddressOf);
- 
-                         /* Mark as needing closure any functions between this and f
-                          */
-                         markAsNeedingClosure((fx == f) ? fx.toParentP(this) : fx, this);
- 
-                         requiresClosure = true;
-                     }
- 
-                     /* We also need to check if any sibling functions that
-                      * called us, have escaped. This is recursive: we need
-                      * to check the callers of our siblings.
-                      */
-                     if (checkEscapingSiblings(fx, this))
-                         requiresClosure = true;
- 
-                     /* https://issues.dlang.org/show_bug.cgi?id=12406
-                      * Iterate all closureVars to mark all descendant
-                      * nested functions that access to the closing context of this function.
-                      */
-                 }
-             }
-         }
-         if (requiresClosure)
-             goto Lyes;
- 
-         return false;
- 
-     Lyes:
-         return true;
-     }
- 
      /***********************************************
       * Determine if function's variables are referenced by a function
       * nested within it.
--- 710,715 ----
*************** extern (C++) class FuncDeclaration : Dec
*** 973,1018 ****
          return ParameterList(null, VarArg.none);
      }
  
-     /**********************************
-      * Generate a FuncDeclaration for a runtime library function.
-      */
-     extern(D) static FuncDeclaration genCfunc(Parameters* fparams, Type treturn, const(char)* name, STC stc = STC.none)
-     {
-         return genCfunc(fparams, treturn, Identifier.idPool(name[0 .. strlen(name)]), stc);
-     }
- 
-     extern(D) static FuncDeclaration genCfunc(Parameters* fparams, Type treturn, Identifier id, STC stc = STC.none)
-     {
-         FuncDeclaration fd;
-         TypeFunction tf;
-         Dsymbol s;
-         __gshared DsymbolTable st = null;
- 
-         //printf("genCfunc(name = '%s')\n", id.toChars());
-         //printf("treturn\n\t"); treturn.print();
- 
-         // See if already in table
-         if (!st)
-             st = new DsymbolTable();
-         s = st.lookup(id);
-         if (s)
-         {
-             fd = s.isFuncDeclaration();
-             assert(fd);
-             assert(fd.type.nextOf().equals(treturn));
-         }
-         else
-         {
-             tf = new TypeFunction(ParameterList(fparams), treturn, LINK.c, stc);
-             fd = new FuncDeclaration(Loc.initial, Loc.initial, id, STC.static_, tf);
-             fd.visibility = Visibility(Visibility.Kind.public_);
-             fd._linkage = LINK.c;
- 
-             st.insert(fd);
-         }
-         return fd;
-     }
- 
      inout(FuncDeclaration) toAliasFunc() inout @safe
      {
          return this;
--- 757,762 ----
*************** unittest
*** 1105,1200 ****
      assert(mismatches.isMutable);
  }
  
- /* For all functions between outerFunc and f, mark them as needing
-  * a closure.
-  */
- private void markAsNeedingClosure(Dsymbol f, FuncDeclaration outerFunc)
- {
-     for (Dsymbol sx = f; sx && sx != outerFunc; sx = sx.toParentP(outerFunc))
-     {
-         FuncDeclaration fy = sx.isFuncDeclaration();
-         if (fy && fy.closureVars.length)
-         {
-             /* fy needs a closure if it has closureVars[],
-              * because the frame pointer in the closure will be accessed.
-              */
-             fy.requiresClosure = true;
-         }
-     }
- }
- 
- /********
-  * Given a nested function f inside a function outerFunc, check
-  * if any sibling callers of f have escaped. If so, mark
-  * all the enclosing functions as needing closures.
-  * This is recursive: we need to check the callers of our siblings.
-  * Note that nested functions can only call lexically earlier nested
-  * functions, so loops are impossible.
-  * Params:
-  *      f = inner function (nested within outerFunc)
-  *      outerFunc = outer function
-  *      p = for internal recursion use
-  * Returns:
-  *      true if any closures were needed
-  */
- bool checkEscapingSiblings(FuncDeclaration f, FuncDeclaration outerFunc, void* p = null)
- {
-     static struct PrevSibling
-     {
-         PrevSibling* p;
-         FuncDeclaration f;
-     }
- 
-     if (f.computedEscapingSiblings)
-         return f.hasEscapingSiblings;
- 
-     PrevSibling ps;
-     ps.p = cast(PrevSibling*)p;
-     ps.f = f;
- 
-     //printf("checkEscapingSiblings(f = %s, outerfunc = %s)\n", f.toChars(), outerFunc.toChars());
-     bool bAnyClosures = false;
-     for (size_t i = 0; i < f.siblingCallers.length; ++i)
-     {
-         FuncDeclaration g = f.siblingCallers[i];
-         if (g.isThis() || g.tookAddressOf)
-         {
-             markAsNeedingClosure(g, outerFunc);
-             bAnyClosures = true;
-         }
- 
-         for (auto parent = g.toParentP(outerFunc); parent && parent !is outerFunc; parent = parent.toParentP(outerFunc))
-         {
-             // A parent of the sibling had its address taken.
-             // Assume escaping of parent affects its children, so needs propagating.
-             // see https://issues.dlang.org/show_bug.cgi?id=19679
-             FuncDeclaration parentFunc = parent.isFuncDeclaration;
-             if (parentFunc && parentFunc.tookAddressOf)
-             {
-                 markAsNeedingClosure(parentFunc, outerFunc);
-                 bAnyClosures = true;
-             }
-         }
- 
-         PrevSibling* prev = cast(PrevSibling*)p;
-         while (1)
-         {
-             if (!prev)
-             {
-                 bAnyClosures |= checkEscapingSiblings(g, outerFunc, &ps);
-                 break;
-             }
-             if (prev.f == g)
-                 break;
-             prev = prev.p;
-         }
-     }
-     f.hasEscapingSiblings = bAnyClosures;
-     f.computedEscapingSiblings = true;
-     //printf("\t%d\n", bAnyClosures);
-     return bAnyClosures;
- }
- 
  /***********************************************************
   * Used as a way to import a set of functions from another scope into this one.
   */
--- 849,854 ----
*************** extern (C++) final class PostBlitDeclara
*** 1403,1413 ****
          return (isThis() && vthis && global.params.useInvariants == CHECKENABLE.on);
      }
  
-     override bool overloadInsert(Dsymbol s)
-     {
-         return false; // cannot overload postblits
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 1057,1062 ----
*************** extern (C++) final class DtorDeclaration
*** 1460,1470 ****
          return false;
      }
  
-     override bool overloadInsert(Dsymbol s)
-     {
-         return false; // cannot overload destructors
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 1109,1114 ----
*************** struct AttributeViolation
*** 1786,1791 ****
--- 1430,1437 ----
  
      string action;   /// Action that made the attribute fail to get inferred
  
+     VarDeclaration scopeVar;  /// For scope violations: the parameter whose scope status caused the issue
+ 
      this(Loc loc, FuncDeclaration fd) { this.loc = loc; this.fd = fd; }
  
      this(Loc loc, const(char)* fmt, RootObject[] args)
*************** struct AttributeViolation
*** 1801,1804 ****
--- 1447,1456 ----
          );
          this.action = buf.extractSlice();
      }
+ 
+     this(Loc loc, const(char)* fmt, VarDeclaration scopeVar, RootObject[] args)
+     {
+         this(loc, fmt, args);
+         this.scopeVar = scopeVar;
+     }
  }
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/funcsem.d gcc-16-20260208/gcc/d/dmd/funcsem.d
*** gcc-16-20260201/gcc/d/dmd/funcsem.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/funcsem.d	Sun Feb  8 22:32:07 2026
***************
*** 14,19 ****
--- 14,20 ----
  module dmd.funcsem;
  
  import core.stdc.stdio;
+ import core.stdc.string;
  
  import dmd.aggregate;
  import dmd.arraytypes;
*************** import dmd.semantic3;
*** 59,73 ****
  import dmd.statement;
  import dmd.statementsem;
  import dmd.target;
  import dmd.templatesem;
  import dmd.tokens;
  import dmd.typesem;
  import dmd.visitor;
  import dmd.visitor.statement_rewrite_walker;
  
! version (IN_GCC) {}
! else version (IN_LLVM) {}
! else version = MARS;
  
  /* Tweak all return statements and dtor call for nrvo_var, for correct NRVO.
   */
--- 60,112 ----
  import dmd.statement;
  import dmd.statementsem;
  import dmd.target;
+ import dmd.targetcompiler;
  import dmd.templatesem;
  import dmd.tokens;
  import dmd.typesem;
  import dmd.visitor;
  import dmd.visitor.statement_rewrite_walker;
  
! 
! /**********************************
!  * Generate a FuncDeclaration for a runtime library function.
!  */
! FuncDeclaration genCfunc(Parameters* fparams, Type treturn, const(char)* name, STC stc = STC.none)
! {
!     return genCfunc(fparams, treturn, Identifier.idPool(name[0 .. strlen(name)]), stc);
! }
! 
! FuncDeclaration genCfunc(Parameters* fparams, Type treturn, Identifier id, STC stc = STC.none)
! {
!     FuncDeclaration fd;
!     TypeFunction tf;
!     Dsymbol s;
!     __gshared DsymbolTable st = null;
! 
!     //printf("genCfunc(name = '%s')\n", id.toChars());
!     //printf("treturn\n\t"); treturn.print();
! 
!     // See if already in table
!     if (!st)
!         st = new DsymbolTable();
!     s = st.lookup(id);
!     if (s)
!     {
!         fd = s.isFuncDeclaration();
!         assert(fd);
!         assert(fd.type.nextOf().equals(treturn));
!     }
!     else
!     {
!         tf = new TypeFunction(ParameterList(fparams), treturn, LINK.c, stc);
!         fd = new FuncDeclaration(Loc.initial, Loc.initial, id, STC.static_, tf);
!         fd.visibility = Visibility(Visibility.Kind.public_);
!         fd._linkage = LINK.c;
! 
!         st.insert(fd);
!     }
!     return fd;
! }
  
  /* Tweak all return statements and dtor call for nrvo_var, for correct NRVO.
   */
*************** void funcDeclarationSemantic(Scope* sc,
*** 215,220 ****
--- 254,263 ----
          printf("type: %p, %s\n", funcdecl.type, funcdecl.type.toChars());
      }
  
+     import dmd.timetrace;
+     timeTraceBeginEvent(TimeTraceEventType.sema1Function);
+     scope (exit) timeTraceEndEvent(TimeTraceEventType.sema1Function, funcdecl);
+ 
      if (funcdecl.semanticRun != PASS.initial && funcdecl.isFuncLiteralDeclaration())
      {
          /* Member functions that have return types that are
*************** void funcDeclarationSemantic(Scope* sc,
*** 335,340 ****
--- 378,386 ----
          sc = sc.push();
          sc.stc |= funcdecl.storage_class & (STC.disable | STC.deprecated_); // forward to function type
  
+         // Parameters don't inherit UDAs from outside, https://github.com/dlang/dmd/issues/19788
+         sc.userAttribDecl = null;
+ 
          if (sc.func)
          {
              /* If the nesting parent is pure without inference,
*************** void funcDeclarationSemantic(Scope* sc,
*** 461,466 ****
--- 507,522 ----
          funcdecl.type = funcdecl.type.addSTC(stc);
  
          funcdecl.type = funcdecl.type.typeSemantic(funcdecl.loc, sc);
+ 
+         // semantic for parameters' UDAs
+         if (auto f = getFunctionType(funcdecl))
+             foreach (i, param; f.parameterList)
+             {
+                 sc.userAttribDecl = null;
+                 if (param && param.userAttribDecl)
+                     param.userAttribDecl.dsymbolSemantic(sc);
+             }
+ 
          sc = sc.pop();
      }
  
*************** void funcDeclarationSemantic(Scope* sc,
*** 507,513 ****
          auto fnext = funcdecl.overnext.isFuncDeclaration();
          funcDeclarationSemantic(sc, fnext);
          auto fn = fnext.type.isTypeFunction();
!         if (!fn || !cFuncEquivalence(f, fn))
          {
              .error(funcdecl.loc, "%s `%s` redeclaration with different type", funcdecl.kind, funcdecl.toPrettyChars);
              //printf("t1: %s\n", f.toChars());
--- 563,569 ----
          auto fnext = funcdecl.overnext.isFuncDeclaration();
          funcDeclarationSemantic(sc, fnext);
          auto fn = fnext.type.isTypeFunction();
!         if (!fn || !cFuncEquivalence(f, fn) || !cTypeEquivalence(f.next, fn.next))
          {
              .error(funcdecl.loc, "%s `%s` redeclaration with different type", funcdecl.kind, funcdecl.toPrettyChars);
              //printf("t1: %s\n", f.toChars());
*************** Ldone:
*** 694,706 ****
      }
  
      assert(funcdecl.type.ty != Terror || funcdecl.errors);
- 
-     // semantic for parameters' UDAs
-     foreach (i, param; f.parameterList)
-     {
-         if (param && param.userAttribDecl)
-             param.userAttribDecl.dsymbolSemantic(sc);
-     }
  }
  
  /**
--- 750,755 ----
*************** Linterfaces:
*** 1171,1178 ****
                      functionToBufferFull(cast(TypeFunction)(fd.type), buf1,
                          new Identifier(fd.toPrettyChars()), hgs, null);
  
!                     error(funcdecl.loc, "function `%s` does not override any function, did you mean to override `%s`?",
!                         funcdeclToChars, buf1.peekChars());
  
                      // Supplemental error for parameter scope differences
                      auto tf1 = cast(TypeFunction)funcdecl.type;
--- 1220,1227 ----
                      functionToBufferFull(cast(TypeFunction)(fd.type), buf1,
                          new Identifier(fd.toPrettyChars()), hgs, null);
  
!                     error(funcdecl.loc, "function `%s` does not override any function", funcdeclToChars);
!                     errorSupplemental(fd.loc, "did you mean to override `%s`?", buf1.peekChars());
  
                      // Supplemental error for parameter scope differences
                      auto tf1 = cast(TypeFunction)funcdecl.type;
*************** Linterfaces:
*** 1185,1192 ****
  
                          if (params1.length == params2.length)
                          {
-                             bool hasScopeDifference = false;
- 
                              for (size_t i = 0; i < params1.length; i++)
                              {
                                  auto p1 = params1[i];
--- 1234,1239 ----
*************** Linterfaces:
*** 1198,1211 ****
                                  if (!(p2.storageClass & STC.scope_))
                                      continue;
  
!                                 if (!hasScopeDifference)
!                                 {
!                                     // Intended signature
!                                     errorSupplemental(funcdecl.loc, "Did you intend to override:");
!                                     errorSupplemental(funcdecl.loc, "`%s`", buf1.peekChars());
!                                     hasScopeDifference = true;
!                                 }
!                                 errorSupplemental(funcdecl.loc, "Parameter %d is missing `scope`",
                                  cast(int)(i + 1));
                              }
                          }
--- 1245,1251 ----
                                  if (!(p2.storageClass & STC.scope_))
                                      continue;
  
!                                 errorSupplemental(funcdecl.loc, "parameter %d is missing `scope`",
                                  cast(int)(i + 1));
                              }
                          }
*************** private void checkNamedArgErrorAndReport
*** 1962,1968 ****
  {
      if (!argumentList.hasArgNames())
          return;
! 
      auto tf = td.onemember ? td.onemember.isFuncDeclaration() : null;
      if (tf && tf.type && tf.type.ty == Tfunction)
      {
--- 2002,2008 ----
  {
      if (!argumentList.hasArgNames())
          return;
!     td.computeOneMember();
      auto tf = td.onemember ? td.onemember.isFuncDeclaration() : null;
      if (tf && tf.type && tf.type.ty == Tfunction)
      {
*************** private void checkNamedArgErrorAndReport
*** 1992,1999 ****
--- 2032,2042 ----
              if (auto fd = s.isFuncDeclaration())
                  tf = fd;
              else if (auto td = s.isTemplateDeclaration())
+             {
+                 td.computeOneMember();
                  if (td.onemember)
                      tf = td.onemember.isFuncDeclaration();
+             }
          }
          return 0;
      });
*************** private void printCandidates(Decl)(Loc l
*** 2073,2078 ****
--- 2116,2122 ----
              // td.onemember may not have overloads set
              // (see fail_compilation/onemember_overloads.d)
              // assume if more than one member it is overloaded internally
+             td.computeOneMember();
              bool recurse = td.onemember && (!td.onemember.isFuncDeclaration ||
                  td.members.length > 1);
              OutBuffer buf;
*************** int getLevelAndCheck(FuncDeclaration fd,
*** 2456,2462 ****
                       Declaration decl)
  {
      int level = fd.getLevel(target, sc.intypeof);
!     if (level != fd.LevelError)
          return level;
      // Don't give error if in template constraint
      if (!sc.inTemplateConstraint)
--- 2500,2506 ----
                       Declaration decl)
  {
      int level = fd.getLevel(target, sc.intypeof);
!     if (level != LevelError)
          return level;
      // Don't give error if in template constraint
      if (!sc.inTemplateConstraint)
*************** int getLevelAndCheck(FuncDeclaration fd,
*** 2467,2473 ****
                 xstatic, fd.kind(), fd.toPrettyChars(), decl.kind(), decl.toChars(),
                 target.toPrettyChars());
              .errorSupplemental(decl.loc, "`%s` declared here", decl.toChars());
!         return fd.LevelError;
      }
      return 1;
  }
--- 2511,2517 ----
                 xstatic, fd.kind(), fd.toPrettyChars(), decl.kind(), decl.toChars(),
                 target.toPrettyChars());
              .errorSupplemental(decl.loc, "`%s` declared here", decl.toChars());
!         return LevelError;
      }
      return 1;
  }
*************** void buildResultVar(FuncDeclaration fd,
*** 2549,2554 ****
--- 2593,2600 ----
          TypeFunction tf = fd.type.toTypeFunction();
          if (tf.isRef)
              fd.vresult.storage_class |= STC.ref_;
+         else if (target.isReturnOnStack(tf, fd.needThis()))
+             fd.vresult.nrvo = true;
          fd.vresult.type = tret;
          fd.vresult.dsymbolSemantic(sc);
          if (!sc.insert(fd.vresult))
*************** extern (D) void checkMain(FuncDeclaratio
*** 3093,3098 ****
--- 3139,3386 ----
          .error(fd.loc, "%s `%s` must return `int`, `void` or `noreturn`, not `%s`", fd.kind, fd.toPrettyChars, tf.nextOf().toChars());
  }
  
+ enum LevelError = -2;
+ 
+ /*****************************************
+  * Determine lexical level difference from `fd1` to nested function `fd2`.
+  * Params:
+  *      fd1 = function
+  *      fd2 = target of call
+  *      intypeof = !=0 if inside typeof
+  * Returns:
+  *      0       same level
+  *      >0      decrease nesting by number
+  *      -1      increase nesting by 1 (`fd2` is nested within `fd1`)
+  *      LevelError  error, `this` cannot call `fd2`
+  */
+ extern (D) int getLevel(FuncDeclaration fd1, FuncDeclaration fd2, int intypeof)
+ {
+     //printf("FuncDeclaration::getLevel(fd2 = '%s')\n", fd2.toChars());
+     Dsymbol fd2parent = fd2.toParent2();
+     if (fd2parent == fd1)
+         return -1;
+ 
+     Dsymbol s = fd1;
+     int level = 0;
+     while (fd2 != s && fd2parent != s.toParent2())
+     {
+         //printf("\ts = %s, '%s'\n", s.kind(), s.toChars());
+         if (auto thisfd = s.isFuncDeclaration())
+         {
+             if (!thisfd.isNested() && !thisfd.vthis && !intypeof)
+                 return LevelError;
+         }
+         else
+         {
+             if (auto thiscd = s.isAggregateDeclaration())
+             {
+                 /* AggregateDeclaration::isNested returns true only when
+                  * it has a hidden pointer.
+                  * But, calling the function belongs unrelated lexical scope
+                  * is still allowed inside typeof.
+                  *
+                  * struct Map(alias fun) {
+                  *   typeof({ return fun(); }) RetType;
+                  *   // No member function makes Map struct 'not nested'.
+                  * }
+                  */
+                 if (!thiscd.isNested() && !intypeof)
+                     return LevelError;
+             }
+             else
+                 return LevelError;
+         }
+ 
+         s = s.toParentP(fd2);
+         assert(s);
+         level++;
+     }
+     return level;
+ }
+ 
+ /* For all functions between outerFunc and f, mark them as needing
+  * a closure.
+  */
+ private void markAsNeedingClosure(Dsymbol f, FuncDeclaration outerFunc)
+ {
+     for (Dsymbol sx = f; sx && sx != outerFunc; sx = sx.toParentP(outerFunc))
+     {
+         FuncDeclaration fy = sx.isFuncDeclaration();
+         if (fy && fy.closureVars.length)
+         {
+             /* fy needs a closure if it has closureVars[],
+              * because the frame pointer in the closure will be accessed.
+              */
+             fy.requiresClosure = true;
+         }
+     }
+ }
+ 
+ /********
+  * Given a nested function f inside a function outerFunc, check
+  * if any sibling callers of f have escaped. If so, mark
+  * all the enclosing functions as needing closures.
+  * This is recursive: we need to check the callers of our siblings.
+  * Note that nested functions can only call lexically earlier nested
+  * functions, so loops are impossible.
+  * Params:
+  *      f = inner function (nested within outerFunc)
+  *      outerFunc = outer function
+  *      p = for internal recursion use
+  * Returns:
+  *      true if any closures were needed
+  */
+ bool checkEscapingSiblings(FuncDeclaration f, FuncDeclaration outerFunc, void* p = null)
+ {
+     static struct PrevSibling
+     {
+         PrevSibling* p;
+         FuncDeclaration f;
+     }
+ 
+     if (f.computedEscapingSiblings)
+         return f.hasEscapingSiblings;
+ 
+     PrevSibling ps;
+     ps.p = cast(PrevSibling*)p;
+     ps.f = f;
+ 
+     //printf("checkEscapingSiblings(f = %s, outerfunc = %s)\n", f.toChars(), outerFunc.toChars());
+     bool bAnyClosures = false;
+     for (size_t i = 0; i < f.siblingCallers.length; ++i)
+     {
+         FuncDeclaration g = f.siblingCallers[i];
+         if (g.isThis() || g.tookAddressOf)
+         {
+             markAsNeedingClosure(g, outerFunc);
+             bAnyClosures = true;
+         }
+ 
+         for (auto parent = g.toParentP(outerFunc); parent && parent !is outerFunc; parent = parent.toParentP(outerFunc))
+         {
+             // A parent of the sibling had its address taken.
+             // Assume escaping of parent affects its children, so needs propagating.
+             // see https://issues.dlang.org/show_bug.cgi?id=19679
+             FuncDeclaration parentFunc = parent.isFuncDeclaration;
+             if (parentFunc && parentFunc.tookAddressOf)
+             {
+                 markAsNeedingClosure(parentFunc, outerFunc);
+                 bAnyClosures = true;
+             }
+         }
+ 
+         PrevSibling* prev = cast(PrevSibling*)p;
+         while (1)
+         {
+             if (!prev)
+             {
+                 bAnyClosures |= checkEscapingSiblings(g, outerFunc, &ps);
+                 break;
+             }
+             if (prev.f == g)
+                 break;
+             prev = prev.p;
+         }
+     }
+     f.hasEscapingSiblings = bAnyClosures;
+     f.computedEscapingSiblings = true;
+     //printf("\t%d\n", bAnyClosures);
+     return bAnyClosures;
+ }
+ 
+ /*******************************
+  * Look at all the variables in this function that are referenced
+  * by nested functions, and determine if a closure needs to be
+  * created for them.
+  */
+ bool needsClosure(FuncDeclaration fd)
+ {
+     /* Need a closure for all the closureVars[] if any of the
+      * closureVars[] are accessed by a
+      * function that escapes the scope of this function.
+      * We take the conservative approach and decide that a function needs
+      * a closure if it:
+      * 1) is a virtual function
+      * 2) has its address taken
+      * 3) has a parent that escapes
+      * 4) calls another nested function that needs a closure
+      *
+      * Note that since a non-virtual function can be called by
+      * a virtual one, if that non-virtual function accesses a closure
+      * var, the closure still has to be taken. Hence, we check for isThis()
+      * instead of isVirtual(). (thanks to David Friedman)
+      *
+      * When the function returns a local struct or class, `requiresClosure`
+      * is already set to `true` upon entering this function when the
+      * struct/class refers to a local variable and a closure is needed.
+      */
+     //printf("FuncDeclaration::needsClosure() %s\n", toPrettyChars());
+ 
+     if (fd.requiresClosure)
+         goto Lyes;
+ 
+     for (size_t i = 0; i < fd.closureVars.length; i++)
+     {
+         VarDeclaration v = fd.closureVars[i];
+         //printf("\tv = %s\n", v.toChars());
+ 
+         for (size_t j = 0; j < v.nestedrefs.length; j++)
+         {
+             FuncDeclaration f = v.nestedrefs[j];
+             assert(f != fd);
+ 
+             /* __require and __ensure will always get called directly,
+              * so they never make outer functions closure.
+              */
+             if (f.ident == Id.require || f.ident == Id.ensure)
+                 continue;
+ 
+             //printf("\t\tf = %p, %s, isVirtual=%d, isThis=%p, tookAddressOf=%d\n", f, f.toChars(), f.isVirtual(), f.isThis(), f.tookAddressOf);
+ 
+             /* Look to see if f escapes. We consider all parents of f within
+              * this, and also all siblings which call f; if any of them escape,
+              * so does f.
+              * Mark all affected functions as requiring closures.
+              */
+             for (Dsymbol s = f; s && s != fd; s = s.toParentP(fd))
+             {
+                 FuncDeclaration fx = s.isFuncDeclaration();
+                 if (!fx)
+                     continue;
+                 if (fx.isThis() || fx.tookAddressOf)
+                 {
+                     //printf("\t\tfx = %s, isVirtual=%d, isThis=%p, tookAddressOf=%d\n", fx.toChars(), fx.isVirtual(), fx.isThis(), fx.tookAddressOf);
+ 
+                     /* Mark as needing closure any functions between this and f
+                      */
+                     markAsNeedingClosure((fx == f) ? fx.toParentP(fd) : fx, fd);
+ 
+                     fd.requiresClosure = true;
+                 }
+ 
+                 /* We also need to check if any sibling functions that
+                  * called us, have escaped. This is recursive: we need
+                  * to check the callers of our siblings.
+                  */
+                 if (checkEscapingSiblings(fx, fd))
+                     fd.requiresClosure = true;
+ 
+                 /* https://issues.dlang.org/show_bug.cgi?id=12406
+                  * Iterate all closureVars to mark all descendant
+                  * nested functions that access to the closing context of this function.
+                  */
+             }
+         }
+     }
+     if (fd.requiresClosure)
+         goto Lyes;
+ 
+     return false;
+ 
+ Lyes:
+     return true;
+ }
+ 
  /***********************************************
   * Check all return statements for a function to verify that returning
   * using NRVO is possible.
*************** extern (D) bool checkNRVO(FuncDeclaratio
*** 3125,3136 ****
                      return false;
                  if (v.nestedrefs.length && fd.needsClosure())
                      return false;
                  // don't know if the return storage is aligned
!                 version (MARS)
!                 {
!                     if (fd.alignSectionVars && (*fd.alignSectionVars).contains(v))
!                         return false;
!                 }
                  // The variable type needs to be equivalent to the return type.
                  if (!v.type.equivalent(tf.next))
                      return false;
--- 3413,3424 ----
                      return false;
                  if (v.nestedrefs.length && fd.needsClosure())
                      return false;
+ 
                  // don't know if the return storage is aligned
!                 mixin alignSectionVarsContains;
!                 if (isAlignSectionVar(v))
!                     return false;
! 
                  // The variable type needs to be equivalent to the return type.
                  if (!v.type.equivalent(tf.next))
                      return false;
*************** private bool isTypeIsolatedIndirect(Func
*** 3411,3417 ****
      // The 'this' reference is a parameter, too
      if (AggregateDeclaration ad = fd.isCtorDeclaration() ? null : fd.isThis())
      {
!         Type tthis = ad.getType().addMod(tf.mod);
          //printf("\ttthis = %s\n", tthis.toChars());
          if (!traverseIndirections(tthis, t))
              return false;
--- 3699,3705 ----
      // The 'this' reference is a parameter, too
      if (AggregateDeclaration ad = fd.isCtorDeclaration() ? null : fd.isThis())
      {
!         Type tthis = dmd.dsymbolsem.getType(ad).addMod(tf.mod);
          //printf("\ttthis = %s\n", tthis.toChars());
          if (!traverseIndirections(tthis, t))
              return false;
*************** extern (D) int overloadApply(Dsymbol fst
*** 3594,3607 ****
  
      int overloadApplyRecurse(Dsymbol fstart, scope int delegate(Dsymbol) dg, Scope* sc)
      {
-         // Detect cyclic calls.
-         if (visited.contains(fstart))
-             return 0;
-         visited.push(fstart);
- 
          Dsymbol next;
          for (auto d = fstart; d; d = next)
          {
              import dmd.access : checkSymbolAccess;
              if (auto od = d.isOverDeclaration())
              {
--- 3882,3895 ----
  
      int overloadApplyRecurse(Dsymbol fstart, scope int delegate(Dsymbol) dg, Scope* sc)
      {
          Dsymbol next;
          for (auto d = fstart; d; d = next)
          {
+             // Detect cyclic calls.
+             if (visited.contains(d))
+                 return 0;
+             visited.push(d);
+ 
              import dmd.access : checkSymbolAccess;
              if (auto od = d.isOverDeclaration())
              {
*************** extern (D) int overloadApply(Dsymbol fst
*** 3658,3663 ****
--- 3946,3958 ----
              }
              else if (auto td = d.isTemplateDeclaration())
              {
+                 // Sometimes funcroot is not in the .overnext chain
+                 // in such case we have to recurse into it
+                 if(td.funcroot)
+                 {
+                     if (int r = overloadApplyRecurse(td.funcroot, dg, sc))
+                         return r;
+                 }
                  if (int r = dg(td))
                      return r;
                  next = td.overnext;
*************** extern (D) bool checkNestedReference(Var
*** 3736,3758 ****
      if (!fdv || fdv == fdthis)
          return false;
  
-     // Add fdthis to nestedrefs[] if not already there
-     if (!vd.nestedrefs.contains(fdthis))
-         vd.nestedrefs.push(fdthis);
- 
      //printf("\tfdv = %s\n", fdv.toChars());
      //printf("\tfdthis = %s\n", fdthis.toChars());
      if (loc.isValid())
      {
!         if (fdthis.getLevelAndCheck(loc, sc, fdv, vd) == fdthis.LevelError)
              return true;
      }
  
-     // Add this VarDeclaration to fdv.closureVars[] if not already there
      if (!sc.intypeof && !sc.traitsCompiles &&
          // https://issues.dlang.org/show_bug.cgi?id=17605
          (fdv.skipCodegen || !fdthis.skipCodegen))
      {
          if (!fdv.closureVars.contains(vd))
              fdv.closureVars.push(vd);
      }
--- 4031,4053 ----
      if (!fdv || fdv == fdthis)
          return false;
  
      //printf("\tfdv = %s\n", fdv.toChars());
      //printf("\tfdthis = %s\n", fdthis.toChars());
      if (loc.isValid())
      {
!         if (fdthis.getLevelAndCheck(loc, sc, fdv, vd) == LevelError)
              return true;
      }
  
      if (!sc.intypeof && !sc.traitsCompiles &&
          // https://issues.dlang.org/show_bug.cgi?id=17605
          (fdv.skipCodegen || !fdthis.skipCodegen))
      {
+         // Add fdthis to nestedrefs[] if not already there
+         if (!vd.nestedrefs.contains(fdthis))
+             vd.nestedrefs.push(fdthis);
+ 
+         // Add this VarDeclaration to fdv.closureVars[] if not already there
          if (!fdv.closureVars.contains(vd))
              fdv.closureVars.push(vd);
      }
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/globals.d gcc-16-20260208/gcc/d/dmd/globals.d
*** gcc-16-20260201/gcc/d/dmd/globals.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/globals.d	Sun Feb  8 22:32:07 2026
*************** import dmd.file_manager;
*** 26,37 ****
  import dmd.identifier;
  import dmd.location;
  import dmd.lexer : CompileEnv;
  import dmd.utils;
  
- version (IN_GCC) {}
- else version (IN_LLVM) {}
- else version = MARS;
- 
  /// Defines a setting for how compiler warnings and deprecations are handled
  enum DiagnosticReporting : ubyte
  {
--- 26,34 ----
  import dmd.identifier;
  import dmd.location;
  import dmd.lexer : CompileEnv;
+ import dmd.targetcompiler;
  import dmd.utils;
  
  /// Defines a setting for how compiler warnings and deprecations are handled
  enum DiagnosticReporting : ubyte
  {
*************** extern (C++) struct Param
*** 183,189 ****
      bool betterC;           // be a "better C" compiler; no dependency on D runtime
      bool addMain;           // add a default main() function
      bool allInst;           // generate code for all template instantiations
!     bool bitfields;         // support C style bit fields
  
      CppStdRevision cplusplus = CppStdRevision.cpp11;    // version of C++ standard to support
  
--- 180,188 ----
      bool betterC;           // be a "better C" compiler; no dependency on D runtime
      bool addMain;           // add a default main() function
      bool allInst;           // generate code for all template instantiations
!     bool bitfields = true;  // support C style bit fields
!     bool rewriteNoExceptionToSeq; // Allow finally statements that do not throw an Exception
!                                   // in try body to rewrite to a sequence.
  
      CppStdRevision cplusplus = CppStdRevision.cpp11;    // version of C++ standard to support
  
*************** extern (C++) struct Global
*** 317,323 ****
      uint warnings;          /// number of warnings reported so far
      uint gag;               /// !=0 means gag reporting of errors & warnings
      uint gaggedErrors;      /// number of errors reported while gagged
!     uint gaggedWarnings;    /// number of warnings reported while gagged
  
      void* console;         /// opaque pointer to console for controlling text attributes
  
--- 316,322 ----
      uint warnings;          /// number of warnings reported so far
      uint gag;               /// !=0 means gag reporting of errors & warnings
      uint gaggedErrors;      /// number of errors reported while gagged
!     uint gaggedDeprecations; /// number of deprecations reported while gagged
  
      void* console;         /// opaque pointer to console for controlling text attributes
  
*************** extern (C++) struct Global
*** 353,359 ****
      extern (C++) uint startGagging() @safe
      {
          ++gag;
!         gaggedWarnings = 0;
          return gaggedErrors;
      }
  
--- 352,358 ----
      extern (C++) uint startGagging() @safe
      {
          ++gag;
!         gaggedDeprecations = 0;
          return gaggedErrors;
      }
  
*************** extern (C++) struct Global
*** 393,413 ****
          errorSinkNull = new ErrorSinkNull;
  
          this.fileManager = new FileManager();
  
!         version (MARS)
!         {
!             compileEnv.vendor = "Digital Mars D";
!         }
!         else version (IN_GCC)
!         {
!             compileEnv.vendor = "GNU D";
!         }
!         else version (IN_LLVM)
!         {
!             compileEnv.vendor = "LDC";
!         }
!         else
!             static assert(0, "unknown vendor");
  
          compileEnv.versionNumber = parseVersionNumber(versionString());
  
--- 392,402 ----
          errorSinkNull = new ErrorSinkNull;
  
          this.fileManager = new FileManager();
+         compileEnv.vendor = TargetCompiler;
+         compileEnv.switchPrefix = SwitchPrefix;
  
!         mixin UseAnsiColors;
!         params.v.color = useAnsiColors();
  
          compileEnv.versionNumber = parseVersionNumber(versionString());
  
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/globals.h gcc-16-20260208/gcc/d/dmd/globals.h
*** gcc-16-20260201/gcc/d/dmd/globals.h	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/globals.h	Sun Feb  8 22:32:07 2026
*************** enum JsonFieldFlags
*** 66,71 ****
--- 66,78 ----
      semantics    = (1 << 3)
  };
  
+ enum class Edition : uint16_t
+ {
+     v2023 = 2023,
+     v2024,
+     v2025,
+ };
+ 
  enum CppStdRevision
  {
      CppStdRevisionCpp98 = 199711,
*************** struct Param
*** 198,209 ****
      d_bool addMain;       // add a default main() function
      d_bool allInst;       // generate code for all template instantiations
      d_bool bitfields;         // support C style bit fields
      CppStdRevision cplusplus;  // version of C++ name mangling to support
  
      Help help;
      Verbose v;
  
!     unsigned short edition;      // edition year
      void* editionFiles;          // Edition corresponding to a filespec
  
      // Options for `-preview=/-revert=`
--- 205,217 ----
      d_bool addMain;       // add a default main() function
      d_bool allInst;       // generate code for all template instantiations
      d_bool bitfields;         // support C style bit fields
+     d_bool rewriteNoExceptionToSeq;
      CppStdRevision cplusplus;  // version of C++ name mangling to support
  
      Help help;
      Verbose v;
  
!     Edition edition;             // edition year
      void* editionFiles;          // Edition corresponding to a filespec
  
      // Options for `-preview=/-revert=`
*************** struct Param
*** 288,296 ****
  
  struct structalign_t
  {
!     unsigned short value;
!     d_bool pack;
! 
      bool isDefault() const;
      void setDefault();
      bool isUnknown() const;
--- 296,305 ----
  
  struct structalign_t
  {
! private:
!     uint16_t value;
!     uint8_t flags;
! public:
      bool isDefault() const;
      void setDefault();
      bool isUnknown() const;
*************** struct structalign_t
*** 298,304 ****
      void set(unsigned value);
      unsigned get() const;
      bool isPack() const;
!     void setPack(bool pack);
  };
  
  // magic value means "match whatever the underlying C compiler does"
--- 307,315 ----
      void set(unsigned value);
      unsigned get() const;
      bool isPack() const;
!     void setPack();
!     bool fromAlignas() const;
!     void setAlignas();
  };
  
  // magic value means "match whatever the underlying C compiler does"
*************** struct CompileEnv
*** 324,329 ****
--- 335,341 ----
      d_bool transitionIn;
      d_bool ddocOutput;
      d_bool masm;
+     DString switchPrefix;
      IdentifierCharLookup cCharLookupTable;
      IdentifierCharLookup dCharLookupTable;
  };
*************** struct Global
*** 347,353 ****
      unsigned warnings;       // number of warnings reported so far
      unsigned gag;            // !=0 means gag reporting of errors & warnings
      unsigned gaggedErrors;   // number of errors reported while gagged
!     unsigned gaggedWarnings; // number of warnings reported while gagged
  
      void* console;         // opaque pointer to console for controlling text attributes
  
--- 359,365 ----
      unsigned warnings;       // number of warnings reported so far
      unsigned gag;            // !=0 means gag reporting of errors & warnings
      unsigned gaggedErrors;   // number of errors reported while gagged
!     unsigned gaggedDeprecations; // number of deprecations reported while gagged
  
      void* console;         // opaque pointer to console for controlling text attributes
  
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/hdrgen.d gcc-16-20260208/gcc/d/dmd/hdrgen.d
*** gcc-16-20260201/gcc/d/dmd/hdrgen.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/hdrgen.d	Sun Feb  8 22:32:07 2026
*************** import dmd.arraytypes;
*** 22,28 ****
  import dmd.astenums;
  import dmd.attrib;
  import dmd.cond;
- import dmd.ctfeexpr;
  import dmd.dclass;
  import dmd.declaration;
  import dmd.denum;
--- 22,27 ----
*************** import dmd.root.string;
*** 50,56 ****
  import dmd.statement;
  import dmd.staticassert;
  import dmd.tokens;
- import dmd.typesem;
  import dmd.visitor;
  
  struct HdrGenState
--- 49,54 ----
*************** private void expressionPrettyPrint(Expre
*** 2209,2215 ****
  
      void visitInteger(IntegerExp e)
      {
!         const ulong v = e.toInteger();
          if (e.type)
          {
              Type t = e.type;
--- 2207,2213 ----
  
      void visitInteger(IntegerExp e)
      {
!         const ulong v = e.value;
          if (e.type)
          {
              Type t = e.type;
*************** private void expressionPrettyPrint(Expre
*** 2224,2230 ****
                      {
                          foreach (em; *sym.members)
                          {
!                             if ((cast(EnumMember)em).value.toInteger == v)
                              {
                                  const id = em.ident.toString();
                                  buf.printf("%s.%.*s", sym.toChars(), cast(int)id.length, id.ptr);
--- 2222,2228 ----
                      {
                          foreach (em; *sym.members)
                          {
!                             if ((cast(EnumMember)em).value.isIntegerExp().value == v)
                              {
                                  const id = em.ident.toString();
                                  buf.printf("%s.%.*s", sym.toChars(), cast(int)id.length, id.ptr);
*************** void floatToBuffer(Type type, const real
*** 3186,3192 ****
  
      if (type)
      {
!         Type t = type.toBasetype();
          switch (t.ty)
          {
          case Tfloat32:
--- 3184,3191 ----
  
      if (type)
      {
!         Type t = type.toBaseTypeNonSemantic();
! 
          switch (t.ty)
          {
          case Tfloat32:
*************** void floatToBuffer(Type type, const real
*** 3202,3208 ****
          default:
              break;
          }
!         if (t.isImaginary())
              buf.put('i');
      }
  }
--- 3201,3207 ----
          default:
              break;
          }
!         if (t.isImaginaryNonSemantic())
              buf.put('i');
      }
  }
*************** void toCBufferInstance(const TemplateIns
*** 3349,3355 ****
      HdrGenState hgs;
      hgs.fullQual = qualifyTypes;
  
!     buf.put(ti.name.toChars());
      tiargsToBuffer(cast() ti, buf, hgs);
  }
  
--- 3348,3354 ----
      HdrGenState hgs;
      hgs.fullQual = qualifyTypes;
  
!     buf.put(ti.name == Id.ctor ? "this" : ti.name.toChars());
      tiargsToBuffer(cast() ti, buf, hgs);
  }
  
*************** private void sizeToBuffer(Expression e,
*** 3815,3821 ****
      {
          Expression ex = (e.op == EXP.cast_ ? (cast(CastExp)e).e1 : e);
          ex = ex.optimize(WANTvalue);
!         const ulong uval = ex.op == EXP.int64 ? ex.toInteger() : cast(ulong)-1;
          if (cast(long)uval >= 0)
          {
              if (uval <= 0xFFFFU)
--- 3814,3820 ----
      {
          Expression ex = (e.op == EXP.cast_ ? (cast(CastExp)e).e1 : e);
          ex = ex.optimize(WANTvalue);
!         const ulong uval = ex.op == EXP.int64 ? ex.isIntegerExp().value : cast(ulong)-1;
          if (cast(long)uval >= 0)
          {
              if (uval <= 0xFFFFU)
*************** private void typeToBufferx(Type t, ref O
*** 4342,4355 ****
  
      void visitDArray(TypeDArray t)
      {
!         Type ut = t.castMod(0);
          if (hgs.declstring)
              goto L1;
!         if (ut.equals(Type.tstring))
              buf.put("string");
!         else if (ut.equals(Type.twstring))
              buf.put("wstring");
!         else if (ut.equals(Type.tdstring))
              buf.put("dstring");
          else
          {
--- 4341,4354 ----
  
      void visitDArray(TypeDArray t)
      {
!         auto basetype = t.next;
          if (hgs.declstring)
              goto L1;
!         if (basetype.ty == Tchar && basetype.isImmutable())
              buf.put("string");
!         else if (basetype.ty == Twchar && basetype.isImmutable())
              buf.put("wstring");
!         else if (basetype.ty == Tdchar && basetype.isImmutable())
              buf.put("dstring");
          else
          {
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/hdrgen.h gcc-16-20260208/gcc/d/dmd/hdrgen.h
*** gcc-16-20260201/gcc/d/dmd/hdrgen.h	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/hdrgen.h	Sun Feb  8 22:32:07 2026
*************** class Statement;
*** 21,27 ****
  namespace dmd
  {
      void genhdrfile(Module *m, bool doFuncBodies, OutBuffer &buf);
!     void genCppHdrFiles(Modules &ms);
      void moduleToBuffer(OutBuffer& buf, bool vcg_ast, Module *m);
      const char *parametersTypeToChars(ParameterList pl);
  
--- 21,27 ----
  namespace dmd
  {
      void genhdrfile(Module *m, bool doFuncBodies, OutBuffer &buf);
!     void genCppHdrFiles(Modules &ms, ErrorSink *eSink);
      void moduleToBuffer(OutBuffer& buf, bool vcg_ast, Module *m);
      const char *parametersTypeToChars(ParameterList pl);
  
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/iasm/gcc.d gcc-16-20260208/gcc/d/dmd/iasm/gcc.d
*** gcc-16-20260201/gcc/d/dmd/iasm/gcc.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/iasm/gcc.d	Sun Feb  8 22:32:07 2026
*************** import dmd.target;
*** 30,35 ****
--- 30,36 ----
  import dmd.tokens;
  import dmd.statement;
  import dmd.statementsem;
+ import dmd.typesem;
  
  /***********************************
   * Parse and run semantic analysis on a GccAsmStatement.
*************** Expression semanticAsmString(Scope* sc,
*** 188,194 ****
  {
      import dmd.dcast : implicitCastTo;
      import dmd.dsymbolsem : resolveAliasThis;
!     import dmd.mtype : isAggregate, Type;
  
      exp = expressionSemantic(exp, sc);
  
--- 189,196 ----
  {
      import dmd.dcast : implicitCastTo;
      import dmd.dsymbolsem : resolveAliasThis;
!     import dmd.mtype : Type;
!     import dmd.typesem : isAggregate;
  
      exp = expressionSemantic(exp, sc);
  
*************** GccAsmStatement parseGccAsm(Parser)(Pars
*** 553,558 ****
--- 555,561 ----
  unittest
  {
      import dmd.mtype : TypeBasic;
+     import dmd.typesem : merge;
  
      if (!global.errorSink)
          global.errorSink = new ErrorSinkCompiler;
*************** unittest
*** 560,566 ****
      const errors = global.startGagging();
      scope(exit) global.endGagging(errors);
  
!     // If this check fails, then Type._init() was called before reaching here,
      // and the entire chunk of code that follows can be removed.
      assert(ASTCodegen.Type.tint32 is null);
      // Minimally initialize the cached types in ASTCodegen.Type, as they are
--- 563,569 ----
      const errors = global.startGagging();
      scope(exit) global.endGagging(errors);
  
!     // If this check fails, then Type_init() was called before reaching here,
      // and the entire chunk of code that follows can be removed.
      assert(ASTCodegen.Type.tint32 is null);
      // Minimally initialize the cached types in ASTCodegen.Type, as they are
*************** unittest
*** 573,580 ****
--- 576,585 ----
          ASTCodegen.Type.tchar = null;
      }
      scope tint32 = new TypeBasic(ASTCodegen.Tint32);
+     tint32.merge();
      ASTCodegen.Type.tint32 = tint32;
      scope tchar = new TypeBasic(ASTCodegen.Tchar);
+     tchar.merge();
      ASTCodegen.Type.tchar = tchar;
  
      // Imitates asmSemantic if version = IN_GCC.
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/id.d gcc-16-20260208/gcc/d/dmd/id.d
*** gcc-16-20260201/gcc/d/dmd/id.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/id.d	Sun Feb  8 22:32:07 2026
*************** immutable Msgtable[] msgtable =
*** 283,288 ****
--- 283,290 ----
      { "_d_newitemTTrace" },
      { "_d_newarrayT" },
      { "_d_newarrayTTrace" },
+     { "_d_newarrayU" },
+     { "_d_newarrayUTrace" },
      { "_d_newarraymTX" },
      { "_d_newarraymTXTrace" },
      { "_d_arrayliteralTX" },
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/identifier.d gcc-16-20260208/gcc/d/dmd/identifier.d
*** gcc-16-20260201/gcc/d/dmd/identifier.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/identifier.d	Sun Feb  8 22:32:07 2026
*************** nothrow:
*** 78,83 ****
--- 78,88 ----
          isAnonymous_ = isAnonymous;
      }
  
+     bool equals(const Identifier i) const
+     {
+         return this is i;
+     }
+ 
      static Identifier create(const(char)* name)
      {
          return new Identifier(name);
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/identifier.h gcc-16-20260208/gcc/d/dmd/identifier.h
*** gcc-16-20260201/gcc/d/dmd/identifier.h	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/identifier.h	Sun Feb  8 22:32:07 2026
*************** public:
*** 28,33 ****
--- 28,34 ----
      const char *toHChars2() const;
      DYNCAST dyncast() const override;
  
+     bool equals(const Identifier * const i) { return this == i; };
      static Identifier *generateId(const char *prefix, size_t length, size_t suffix);
      static Identifier *idPool(const char *s, unsigned len);
  
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/imphint.d gcc-16-20260208/gcc/d/dmd/imphint.d
*** gcc-16-20260201/gcc/d/dmd/imphint.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/imphint.d	Sun Feb  8 22:32:07 2026
*************** shared static this()
*** 91,111 ****
          "InterpolationFooter": "core.interpolation",
      ];
      cHints = [
          "NULL": "<stddef.h>",
!         "calloc": "<stdlib.h>",
          "fopen": "<stdio.h>",
          "fprintf": "<stdio.h>",
          "free": "<stdlib.h>",
          "malloc": "<stdlib.h>",
          "memcpy": "<string.h>",
          "memmove": "<string.h>",
          "memset": "<string.h>",
!         "printf": "<stdio.h>",
!         "ptrdiff_t": "<stddef.h>",
!         "size_t": "<stddef.h>",
!         "stderr": "<stdio.h>",
!         "stdin": "<stdio.h>",
!         "stdout": "<stdio.h>",
      ];
  }
  
--- 91,179 ----
          "InterpolationFooter": "core.interpolation",
      ];
      cHints = [
+         "va_list": "<stdarg.h>",
+ 
+         "bool": "<stdbool.h>",
+         "false": "<stdbool.h>",
+         "true": "<stdbool.h>",
+ 
          "NULL": "<stddef.h>",
!         "nullptr_t": "<stddef.h>",
!         "offsetof": "<stddef.h>",
!         "ptrdiff_t": "<stddef.h>",
!         "size_t": "<stddef.h>",
!         "wchar_t": "<stddef.h>",
! 
!         "INT8_MAX": "<stdint.h>",
!         "INT16_MAX": "<stdint.h>",
!         "INT32_MAX": "<stdint.h>",
!         "INT64_MAX": "<stdint.h>",
!         "INTPTR_MAX": "<stdint.h>",
!         "PTRDIFF_MAX": "<stdint.h>",
!         "PTRDIFF_MIN": "<stdint.h>",
!         "SIZE_MAX": "<stdint.h>",
!         "UINT8_MAX": "<stdint.h>",
!         "UINT16_MAX": "<stdint.h>",
!         "UINT32_MAX": "<stdint.h>",
!         "UINT64_MAX": "<stdint.h>",
!         "UINTPTR_MAX": "<stdint.h>",
!         "WINT_MAX": "<stdint.h>",
!         "WINT_MIN": "<stdint.h>",
!         "int8_t": "<stdint.h>",
!         "int16_t": "<stdint.h>",
!         "int32_t": "<stdint.h>",
!         "int64_t": "<stdint.h>",
!         "intptr_t": "<stdint.h>",
!         "uint8_t": "<stdint.h>",
!         "uint16_t": "<stdint.h>",
!         "uint32_t": "<stdint.h>",
!         "uint64_t": "<stdint.h>",
!         "uintptr_t": "<stdint.h>",
! 
!         "EOF": "<stdio.h>",
!         "FILE": "<stdio.h>",
          "fopen": "<stdio.h>",
+         "fpos_t": "<stdio.h>",
          "fprintf": "<stdio.h>",
+         "getchar": "<stdio.h>",
+         "printf": "<stdio.h>",
+         "snprintf": "<stdio.h>",
+         "sprintf": "<stdio.h>",
+         "stderr": "<stdio.h>",
+         "stdin": "<stdio.h>",
+         "stdout": "<stdio.h>",
+ 
+         "EXIT_FAILURE": "<stdlib.h>",
+         "EXIT_SUCCESS": "<stdlib.h>",
+         "abort": "<stdlib.h>",
+         "atexit": "<stdlib.h>",
+         "calloc": "<stdlib.h>",
+         "exit": "<stdlib.h>",
          "free": "<stdlib.h>",
+         "getenv": "<stdlib.h>",
          "malloc": "<stdlib.h>",
+         "realloc": "<stdlib.h>",
+ 
+         "memchr": "<string.h>",
+         "memcmp": "<string.h>",
          "memcpy": "<string.h>",
          "memmove": "<string.h>",
          "memset": "<string.h>",
!         "strcat": "<string.h>",
!         "strchr": "<string.h>",
!         "strcmp": "<string.h>",
!         "strcpy": "<string.h>",
!         "strerror": "<string.h>",
!         "strlen": "<string.h>",
!         "strncat": "<string.h>",
!         "strncmp": "<string.h>",
!         "strncpy": "<string.h>",
!         "strrchr": "<string.h>",
!         "strspn": "<string.h>",
!         "strstr": "<string.h>",
! 
!         "WCHAR_MAX": "<wchar.h>",
!         "WCHAR_MIN": "<wchar.h>",
      ];
  }
  
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/import.h gcc-16-20260208/gcc/d/dmd/import.h
*** gcc-16-20260201/gcc/d/dmd/import.h	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/import.h	Sun Feb  8 22:32:07 2026
*************** public:
*** 41,47 ****
      const char *kind() const override;
      Visibility visible() override;
      Import *syntaxCopy(Dsymbol *s) override; // copy only syntax trees
-     bool overloadInsert(Dsymbol *s) override;
  
      void accept(Visitor *v) override { v->visit(this); }
  };
--- 41,46 ----
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/importc.d gcc-16-20260208/gcc/d/dmd/importc.d
*** gcc-16-20260201/gcc/d/dmd/importc.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/importc.d	Sun Feb  8 22:32:07 2026
*************** void addDefaultCInitializer(VarDeclarati
*** 224,289 ****
  }
  
  /********************************************
-  * Resolve cast/call grammar ambiguity.
-  * Params:
-  *      e = expression that might be a cast, might be a call
-  *      sc = context
-  * Returns:
-  *      null means leave as is, !=null means rewritten AST
-  */
- Expression castCallAmbiguity(Expression e, Scope* sc)
- {
-     Expression* pe = &e;
- 
-     while (1)
-     {
-         // Walk down the postfix expressions till we find a CallExp or something else
-         switch ((*pe).op)
-         {
-             case EXP.dotIdentifier:
-                 pe = &(*pe).isDotIdExp().e1;
-                 continue;
- 
-             case EXP.plusPlus:
-             case EXP.minusMinus:
-                 pe = &(*pe).isPostExp().e1;
-                 continue;
- 
-             case EXP.array:
-                 pe = &(*pe).isArrayExp().e1;
-                 continue;
- 
-             case EXP.call:
-                 auto ce = (*pe).isCallExp();
-                 if (ce.e1.parens)
-                 {
-                     ce.e1 = expressionSemantic(ce.e1, sc);
-                     if (ce.e1.op == EXP.type)
-                     {
-                         const numArgs = ce.arguments ? ce.arguments.length : 0;
-                         if (numArgs >= 1)
-                         {
-                             ce.e1.parens = false;
-                             Expression arg;
-                             foreach (a; (*ce.arguments)[])
-                             {
-                                 arg = arg ? new CommaExp(a.loc, arg, a) : a;
-                             }
-                             auto t = ce.e1.isTypeExp().type;
-                             *pe = arg;
-                             return new CastExp(ce.loc, e, t);
-                         }
-                     }
-                 }
-                 return null;
- 
-             default:
-                 return null;
-         }
-     }
- }
- 
- /********************************************
   * Implement the C11 notion of function equivalence,
   * which allows prototyped functions to match K+R functions,
   * even though they are different.
--- 224,229 ----
*************** Dsymbol handleSymbolRedeclarations(ref S
*** 580,585 ****
--- 520,529 ----
              sds.symtab.update(vd);      // replace vd2 with the definition
              return vd;
          }
+         else if (!i1 && !(vd2.storage_class & STC.extern_)) /* incoming has void void definition */
+         {
+             vd.storage_class |= STC.extern_;
+         }
  
          /* BUG: the types should match, which needs semantic() to be run on it
           *    extern int x;
*************** Dsymbol handleSymbolRedeclarations(ref S
*** 588,594 ****
--- 532,545 ----
           *    INT x;  // match
           *    long x; // collision
           * We incorrectly ignore these collisions
+          * when their types are not matching, err on type differences
           */
+ 
+         if (!cTypeEquivalence(vd.type, vd2.type))
+         {
+             .error(vd.loc, "redefinition of `%s` with different type: `%s` vs `%s`",
+                 vd2.ident.toChars(), vd2.type.toChars(), vd.type.toChars());
+         }
          return vd2;
      }
  
*************** Dsymbol handleSymbolRedeclarations(ref S
*** 641,646 ****
--- 592,606 ----
           */
          fd2.overloadInsert(fd);
  
+         //for the sake of functions declared in function scope.
+         // check for return type equivalence also
+         auto tf1 = fd.type.isTypeFunction();
+         auto tf2 = fd2.type.isTypeFunction();
+         if (sc.func &&  !cTypeEquivalence(tf1.next, tf2.next) )
+         {
+             .error(fd.loc, "%s `%s` redeclaration with different type", fd.kind, fd.toPrettyChars);
+         }
+ 
          return fd2;
      }
  
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/initsem.d gcc-16-20260208/gcc/d/dmd/initsem.d
*** gcc-16-20260201/gcc/d/dmd/initsem.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/initsem.d	Sun Feb  8 22:32:07 2026
*************** module dmd.initsem;
*** 14,21 ****
  import core.stdc.stdio;
  import core.checkedint;
  
- import dmd.aggregate;
- import dmd.aliasthis;
  import dmd.arraytypes;
  import dmd.astenums;
  import dmd.dcast;
--- 14,19 ----
*************** Initializer initializerSemantic(Initiali
*** 168,174 ****
                  // Convert initializer to Expression `ex`
                  auto tm = fieldType.addMod(t.mod);
                  auto iz = i.value[j].initializerSemantic(sc, tm, needInterpret);
!                 auto ex = iz.initializerToExpression(null, sc.inCfile);
                  if (ex.op != EXP.error)
                      i.value[j] = iz;
                  return ex;
--- 166,172 ----
                  // Convert initializer to Expression `ex`
                  auto tm = fieldType.addMod(t.mod);
                  auto iz = i.value[j].initializerSemantic(sc, tm, needInterpret);
!                 auto ex = iz.initializerToExpression(fieldType, sc.inCfile);
                  if (ex.op != EXP.error)
                      i.value[j] = iz;
                  return ex;
*************** Initializer initializerSemantic(Initiali
*** 449,459 ****
              Type typeb = se.type.toBasetype();
              TY tynto = tb.nextOf().ty;
              if (!se.committed &&
!                 typeb.isStaticOrDynamicArray() && tynto.isSomeChar &&
!                 se.numberOfCodeUnits(tynto) < tb.isTypeSArray().dim.toInteger())
              {
!                 i.exp = se.castTo(sc, t);
!                 goto L1;
              }
  
              /* Lop off terminating 0 of initializer for:
--- 447,463 ----
              Type typeb = se.type.toBasetype();
              TY tynto = tb.nextOf().ty;
              if (!se.committed &&
!                 typeb.isStaticOrDynamicArray() && tynto.isSomeChar)
              {
!                 string s;
!                 size_t len = se.numberOfCodeUnits(tynto, s);
!                 if (s)
!                     error(se.loc, "%.*s", cast(int)s.length, s.ptr);
!                 if (len < tb.isTypeSArray().dim.toInteger())
!                 {
!                     i.exp = se.castTo(sc, t);
!                     goto L1;
!                 }
              }
  
              /* Lop off terminating 0 of initializer for:
*************** Initializer initializerSemantic(Initiali
*** 617,623 ****
          static if (0)
              if (auto ts = tx.isTypeStruct())
              {
-                 import dmd.common.outbuffer;
                  OutBuffer buf;
                  HdrGenState hgs;
                  toCBuffer(ts.sym, buf, hgs);
--- 621,626 ----
*************** Initializer initializerSemantic(Initiali
*** 628,633 ****
--- 631,649 ----
           */
          t = t.toBasetype();
  
+         bool isComplexInitilaizer()
+         {
+             switch (t.ty)
+             {
+                 case Tcomplex32:
+                 case Tcomplex64:
+                 case Tcomplex80:
+                     return true;
+                 default:
+                     return false;
+             }
+         }
+ 
          if (auto tv = t.isTypeVector())
              t = tv.basetype;
  
*************** Initializer initializerSemantic(Initiali
*** 820,839 ****
              {
                  DesigInit di = ci.initializerList[index];
                  Designators* dlist = di.designatorList;
                  if (dlist)
                  {
                      const length = (*dlist).length;
                      if (length == 0 || !(*dlist)[0].ident)
                      {
                          error(ci.loc, "`.identifier` expected for C struct field initializer `%s`", toChars(ci));
                          return err();
                      }
                      if (length > 1)
                      {
!                         error(ci.loc, "only 1 designator currently allowed for C struct field initializer `%s`", toChars(ci));
!                         return err();
                      }
-                     auto id = (*dlist)[0].ident;
                      foreach (k, f; sd.fields[])         // linear search for now
                      {
                          if (f.ident == id)
--- 836,940 ----
              {
                  DesigInit di = ci.initializerList[index];
                  Designators* dlist = di.designatorList;
+                 VarDeclaration field;
                  if (dlist)
                  {
                      const length = (*dlist).length;
+                     auto id = (*dlist)[0].ident;
                      if (length == 0 || !(*dlist)[0].ident)
                      {
                          error(ci.loc, "`.identifier` expected for C struct field initializer `%s`", toChars(ci));
                          return err();
                      }
+ 
                      if (length > 1)
                      {
!                         StructDeclaration nstsd = sd; // use this for member structs we wish to traverse
!                         auto subsi = si;
!                         /*
!                          * run this for each designator in the chain until you hit the last
!                          * then perform semantic analysis on the last field in the chain using the previous struct initializer
!                          */
!                         for (size_t i = 0; i < length; i++)
!                         {
!                             int found;
!                             id = (*dlist)[i].ident;
!                             foreach (f; nstsd.fields[])
!                             {
!                                 if (f.ident == id)
!                                 {
!                                     field = f;
!                                     ++found;
!                                     break;
!                                 }
!                             }
!                             if (!found)
!                             {
!                                 error(ci.loc, "`.%s` is not a field of `%s`\n", id.toChars(), nstsd.toChars());
!                                 return err();
!                             }
! 
!                             auto base = field.type.toBasetype();
! 
!                             if (i >= length -1)
!                             {
!                                 subsi.addInit(id, di.initializer);
!                                 ++index;
!                                 continue Loop1;
!                             }
! 
!                             auto tstr = base.isTypeStruct();
!                             auto tarr = base.isTypeSArray();
! 
!                             if (tstr)
!                             {
!                                 if (!overlaps(field, nstsd.fields[], subsi))
!                                 {
!                                     auto innersi = new StructInitializer(ci.loc);
!                                     subsi.addInit(id, innersi);
!                                     subsi = innersi;
!                                 }
!                                 else {
!                                     foreach(k, ident; subsi.field[])
!                                     {
!                                         if (ident == id && subsi.value[k])
!                                             subsi = subsi.value[k].isStructInitializer();
!                                     }
!                                 }
!                                 nstsd = tstr.sym;
!                             }
!                             /*
!                              * once we hit an array, check & attach the array initializer to the struct initializer
!                              * move to the next initializer id and run initializer semantics on it
!                              */
!                             else if (tarr)
!                             {
!                                 /*
!                                  * so tempting to check for null cases for field._init.
!                                  * but if your object is set to null on decl, you can't use designators anymore
!                                  * and D does well to default initialize for us
!                                  */
!                                 auto ai = field._init.isArrayInitializer();
! 
!                                 if (ai is null)
!                                 {
!                                     ai = new ArrayInitializer(ci.loc);
!                                     subsi.addInit(id, ai);
!                                     field._init = ai;
!                                 }
! 
!                                 auto ndx = (*dlist)[i+1].exp;
!                                 ai.addInit(ndx, di.initializer);
!                                 ++index;
!                                 continue Loop1;
!                             }
!                             else
!                             {
!                                 error(ci.loc, "only 1 designated initializer allowed for C struct field of type `%s`", toChars(base));
!                                 return err();
!                             }
!                         }
                      }
                      foreach (k, f; sd.fields[])         // linear search for now
                      {
                          if (f.ident == id)
*************** Initializer initializerSemantic(Initiali
*** 909,915 ****
                          continue Loop1;
                  }
  
-                 VarDeclaration field;
                  while (1)   // skip field if it overlaps with previously seen fields
                  {
                      field = sd.fields[fieldi];
--- 1010,1015 ----
*************** Initializer initializerSemantic(Initiali
*** 1059,1064 ****
--- 1159,1182 ----
          {
              return visitExp(ei);
          }
+         else if (isComplexInitilaizer())
+         {
+             /* just convert _Complex = { a, b} to _Complex =. a + b*i */
+             if (ci.initializerList[].length != 2)
+             {
+                 error(ci.loc, "only two initializers required for complex type `%s`", t.toChars());
+                 return err();
+             }
+             auto rexp = ci.initializerList[0].initializer.initializerToExpression();
+             auto imexp = ci.initializerList[1].initializer.initializerToExpression();
+ 
+             import dmd.root.ctfloat;
+             auto newExpr = new AddExp(ci.loc, rexp,
+             new MulExp(ci.loc, imexp, new RealExp(ci.loc, CTFloat.one, Type.timaginary64)));
+ 
+             auto ce = new ExpInitializer(ci.loc, newExpr);
+             return ce.initializerSemantic(sc, t, needInterpret);
+         }
          else
          {
              error(ci.loc, "unrecognized C initializer `%s` for type `%s`", toChars(ci), t.toChars());
*************** Expression initializerToExpression(Initi
*** 1267,1272 ****
--- 1385,1395 ----
      {
          //printf("ArrayInitializer::toExpression(), dim = %d\n", dim);
          //static int i; if (++i == 2) assert(0);
+         if (!itype || itype.toBasetype().isTypeAArray())
+             if (!init.type || init.type.isTypeAArray())
+                 if (init.isAssociativeArray())
+                     return init.toAssocArrayLiteral();
+ 
          uint edim;      // the length of the resulting array literal
          const(uint) amax = 0x80000000;
          Type t = null;  // type of the array literal being initialized
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/intrange.d gcc-16-20260208/gcc/d/dmd/intrange.d
*** gcc-16-20260201/gcc/d/dmd/intrange.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/intrange.d	Sun Feb  8 22:32:07 2026
*************** import core.stdc.stdio;
*** 16,21 ****
--- 16,22 ----
  import dmd.astenums : Tdchar;
  import dmd.mtype : Type;
  import dmd.globals : uinteger_t;
+ import dmd.typesem;
  
  private uinteger_t copySign(uinteger_t x, bool sign) @safe
  {
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/json.d gcc-16-20260208/gcc/d/dmd/json.d
*** gcc-16-20260201/gcc/d/dmd/json.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/json.d	Sun Feb  8 22:32:07 2026
*************** import dmd.dimport;
*** 25,30 ****
--- 25,31 ----
  import dmd.dmodule;
  import dmd.dsymbol;
  import dmd.dsymbolsem : include;
+ import dmd.templatesem : computeOneMember;
  import dmd.dtemplate;
  import dmd.errors;
  import dmd.expression;
*************** public:
*** 474,479 ****
--- 475,481 ----
      void jsonProperties(TemplateDeclaration td)
      {
          jsonProperties(cast(Dsymbol)td);
+         td.computeOneMember();
          if (td.onemember && td.onemember.isCtorDeclaration())
              property("name", "this"); // __ctor -> this
          else
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/lambdacomp.d gcc-16-20260208/gcc/d/dmd/lambdacomp.d
*** gcc-16-20260201/gcc/d/dmd/lambdacomp.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/lambdacomp.d	Sun Feb  8 22:32:07 2026
*************** import dmd.dsymbol;
*** 25,31 ****
  import dmd.dsymbolsem;
  import dmd.dtemplate;
  import dmd.expression;
! import dmd.expressionsem : getConstInitializer;
  import dmd.func;
  import dmd.hdrgen;
  import dmd.mangle;
--- 25,31 ----
  import dmd.dsymbolsem;
  import dmd.dtemplate;
  import dmd.expression;
! import dmd.expressionsem : getConstInitializer, toInteger;
  import dmd.func;
  import dmd.hdrgen;
  import dmd.mangle;
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/lexer.d gcc-16-20260208/gcc/d/dmd/lexer.d
*** gcc-16-20260201/gcc/d/dmd/lexer.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/lexer.d	Sun Feb  8 22:32:07 2026
*************** struct CompileEnv
*** 51,56 ****
--- 51,57 ----
      bool transitionIn;       /// `-transition=in` is active, `in` parameters are listed
      bool ddocOutput;         /// collect embedded documentation comments
      bool masm;               /// use MASM inline asm syntax
+     const(char)[] switchPrefix;
  
      // these need a default otherwise tests won't work.
      IdentifierCharLookup cCharLookupTable; /// C identifier table (set to the lexer by the C parser)
*************** class Lexer
*** 324,333 ****
          t.blockComment = null;
          t.lineComment = null;
  
-         size_t universalCharacterName4, universalCharacterName8;
- 
          while (1)
          {
              t.ptr = p;
              //printf("p = %p, *p = '%c'\n",p,*p);
              t.loc = loc();
--- 325,333 ----
          t.blockComment = null;
          t.lineComment = null;
  
          while (1)
          {
+             bool startsUCN;
              t.ptr = p;
              //printf("p = %p, *p = '%c'\n",p,*p);
              t.loc = loc();
*************** class Lexer
*** 427,436 ****
                          // Universal Character Name (C) 2 byte
                          // \uXXXX
                          // let the main case handling for identifiers process this
! 
!                         // case_indent will always increment, so subtract to prevent branching on the fast path
!                         p--;
! 
                          goto case_ident;
                      }
                      else if (p[1] == 'U')
--- 427,433 ----
                          // Universal Character Name (C) 2 byte
                          // \uXXXX
                          // let the main case handling for identifiers process this
!                         startsUCN = true;
                          goto case_ident;
                      }
                      else if (p[1] == 'U')
*************** class Lexer
*** 438,447 ****
                          // Universal Character Name (C) 4 byte
                          // \UXXXXXXXX
                          // let the main case handling for identifiers process this
! 
!                         // case_indent will always increment, so subtract to prevent branching on the fast path
!                         p--;
! 
                          goto case_ident;
                      }
                  }
--- 435,441 ----
                          // Universal Character Name (C) 4 byte
                          // \UXXXXXXXX
                          // let the main case handling for identifiers process this
!                         startsUCN = true;
                          goto case_ident;
                      }
                  }
*************** class Lexer
*** 629,792 ****
              case '_':
              case_ident:
                  {
!         IdentLoop: while (1)
!                     {
!                         // If this is changed, change the decrement in C's universal character name code above
!                         // For syntax \uXXXX and \UXXXXXXXX
!                         const c = *++p;
! 
!                         // Is this the first character of the identifier
!                         // For the universal character name this will line up,
!                         //  for the main switch it won't since it wasn't the first,
!                         //  for the default it won't either because a decode increments.
!                         const isStartCharacter = t.ptr is p;
! 
!                         if (isidchar(c))
!                             continue;
!                         if (c & 0x80)
!                         {
!                             const s = p;
!                             const u = decodeUTF();
! 
!                             if (isStartCharacter)
!                             {
!                                 if (charLookup.isStart(u))
!                                     continue;
!                                 error(t.loc, "character 0x%04x is not allowed as a start character in an identifier", u);
!                             }
!                             else
!                             {
!                                 if (charLookup.isContinue(u))
!                                     continue;
!                                 error(t.loc, "character 0x%04x is not allowed as a continue character in an identifier", u);
!                             }
! 
!                             p = s;
!                         }
!                         else if (Ccompile && c == '\\')
!                         {
!                             uint times;
!                             const s = p;
!                             p++;
! 
!                             if (*p == 'u')
!                             {
!                                 // Universal Character Name (C) 2 byte
!                                 // \uXXXX
!                                 p++;
!                                 times = 4;
!                             }
!                             else if (*p == 'U')
!                             {
!                                 // Universal Character Name (C) 4 byte
!                                 // \UXXXXXXXX
!                                 p++;
!                                 times = 8;
!                             }
!                             else
!                             {
!                                 error(t.loc, "char 0x%x is not allowed to follow '\\' expecting a C universal character name in format \\uXXXX or \\UXXXXXXXX with hex digits instead of X with invalid u/U", *p);
!                                 p = s;
!                                 break;
!                             }
! 
!                             foreach(_; 0 .. times)
!                             {
!                                 const hc = *p;
!                                 p++;
! 
!                                 if ((hc >= '0' && hc <= '9') || (hc >= 'a' && hc <= 'f') || (hc >= 'A' && hc <= 'F'))
!                                     continue;
! 
!                                 error(t.loc, "char 0x%x is not allowed to follow '\\' expecting a C universal character name in format \\uXXXX or \\UXXXXXXXX with hex digits instead of X with invalid hex digit", hc);
!                                 p = s;
!                                 break IdentLoop;
!                             }
! 
!                             continue;
!                         }
!                         break;
!                     }
! 
!                     Identifier id;
! 
!                     if (universalCharacterName4 > 0 || universalCharacterName8 > 0)
!                     {
!                         auto priorValidation = t.ptr[0 .. p - t.ptr];
!                         const(char)* priorVPtr = priorValidation.ptr;
!                         const possibleLength = (
!                             priorValidation.length - (
!                                 (universalCharacterName4 * 6) +
!                                 (universalCharacterName8 * 10)
!                             )) + (
!                                 (universalCharacterName4 * 3) +
!                                 (universalCharacterName8 * 4)
!                             );
! 
!                         char[64] buffer = void;
!                         SmallBuffer!char sb = SmallBuffer!char(possibleLength, buffer[]);
! 
!                         char[] storage = sb.extent;
!                         size_t offset;
! 
!                         while(priorVPtr < &priorValidation[$-1] + 1)
!                         {
!                             if (*priorVPtr == '\\')
!                             {
!                                 dchar tempDchar = 0;
!                                 uint times;
! 
!                                 // universal character name (C)
!                                 if (priorVPtr[1] == 'u')
!                                     times = 4;
!                                 else if (priorVPtr[1] == 'U')
!                                     times = 8;
!                                 else
!                                     assert(0, "ICE: Universal character name is 2 or 4 bytes only");
!                                 priorVPtr += 2;
! 
!                                 foreach(_; 0 .. times)
!                                 {
!                                     char c = *++priorVPtr;
!                                     if (c >= '0' && c <= '9')
!                                         c -= '0';
!                                     else if (c >= 'a' && c <= 'f')
!                                         c -= 'a' - 10;
!                                     else if (c >= 'A' && c <= 'F')
!                                         c -= 'A' - 10;
! 
!                                     tempDchar <<= 4;
!                                     tempDchar |= c;
!                                 }
! 
!                                 utf_encodeChar(&storage[offset], tempDchar);
!                                 offset += utf_codeLengthChar(tempDchar);
! 
!                                 // Could be an error instead of a warning,
!                                 //  but hey it was written specifically so why worry?
!                                 if (priorVPtr is priorValidation.ptr)
!                                 {
!                                     if (!charLookup.isStart(tempDchar))
!                                         warning(t.loc, "char 0x%x is not allowed start character for an identifier", tempDchar);
!                                 }
!                                 else
!                                 {
!                                     if (!charLookup.isContinue(tempDchar))
!                                         warning(t.loc, "char 0x%x is not allowed continue character for an identifier", tempDchar);
!                                 }
!                             }
!                             else
!                                 storage[offset++] = *++priorVPtr;
!                         }
! 
!                         id = Identifier.idPool(storage[0 .. offset], false);
!                     }
!                     else
!                         id = Identifier.idPool((cast(char*)t.ptr)[0 .. p - t.ptr], false);
! 
!                     t.ident = id;
!                     t.value = cast(TOK)id.getValue();
! 
                      anyToken = 1;
  
                      /* Different keywords for C and D
--- 623,630 ----
              case '_':
              case_ident:
                  {
!                     if (!lexIdentifier(t, startsUCN))
!                         goto default;
                      anyToken = 1;
  
                      /* Different keywords for C and D
*************** class Lexer
*** 811,830 ****
                              t.postfix = 0;
                          }
  
!                         if (id == Id.DATE)
                              toToken(compileEnv.date);
!                         else if (id == Id.TIME)
                              toToken(compileEnv.time);
!                         else if (id == Id.VENDOR)
                              toToken(compileEnv.vendor);
!                         else if (id == Id.TIMESTAMP)
                              toToken(compileEnv.timestamp);
!                         else if (id == Id.VERSIONX)
                          {
                              t.value = TOK.int64Literal;
                              t.unsvalue = compileEnv.versionNumber;
                          }
!                         else if (id == Id.EOFX)
                          {
                              t.value = TOK.endOfFile;
                              // Advance scanner to end of file
--- 649,668 ----
                              t.postfix = 0;
                          }
  
!                         if (t.ident == Id.DATE)
                              toToken(compileEnv.date);
!                         else if (t.ident == Id.TIME)
                              toToken(compileEnv.time);
!                         else if (t.ident == Id.VENDOR)
                              toToken(compileEnv.vendor);
!                         else if (t.ident == Id.TIMESTAMP)
                              toToken(compileEnv.timestamp);
!                         else if (t.ident == Id.VERSIONX)
                          {
                              t.value = TOK.int64Literal;
                              t.unsvalue = compileEnv.versionNumber;
                          }
!                         else if (t.ident == Id.EOFX)
                          {
                              t.value = TOK.endOfFile;
                              // Advance scanner to end of file
*************** class Lexer
*** 1358,1365 ****
  
                          // Check for start of an identifier
                          if (charLookup.isStart(c))
                              goto case_ident;
! 
                          if (c == PS || c == LS)
                          {
                              endOfLine();
--- 1196,1205 ----
  
                          // Check for start of an identifier
                          if (charLookup.isStart(c))
+                         {
+                             p++;
                              goto case_ident;
!                         }
                          if (c == PS || c == LS)
                          {
                              endOfLine();
*************** class Lexer
*** 1631,1636 ****
--- 1471,1588 ----
      }
  
      /**
+     Lex an identifier
+     Params:
+         t = pointer to the token that starts the identifier, and accepts the result
+         startsUCN = if the identifier s
+     Returns:
+         true if an identifier was set
+      */
+     private bool lexIdentifier(Token* t, bool startsUCN)
+     {
+         Identifier id;
+ 
+         if (!startsUCN)
+         {
+             while (isidchar(*p))
+                 p++;
+         }
+ 
+         if (!startsUCN && !(*p & 0x80) && (!Ccompile || *p != '\\'))
+         {
+             // Fast path for ascii identifiers
+             id = Identifier.idPool((cast(char*)t.ptr)[0 .. p - t.ptr], false);
+         }
+         else
+         {
+             // Slow path for identifiers with UCNs and UTF8 characters
+             stringbuffer.setsize(0);
+             stringbuffer.writestring(t.ptr[0 .. p - t.ptr]);
+ 
+         IdentLoop:
+             while (1)
+             {
+                 // Is this the first character of the identifier?
+                 const isStartCharacter = t.ptr is p;
+                 uint u;
+ 
+                 if (isidchar(*p))
+                 {
+                     const c = *p++;
+                     stringbuffer.writeByte(c);
+                     continue;
+                 }
+                 else if (*p & 0x80)
+                 {
+                     u = decodeUTF();
+                     p++;
+                 }
+                 else if (Ccompile && *p == '\\')
+                 {
+                     uint times;
+                     if (p[1] == 'u')
+                     {
+                         // Universal Character Name (C) 2 byte
+                         // \uXXXX
+                         times = 4;
+                     }
+                     else if (p[1] == 'U')
+                     {
+                         // Universal Character Name (C) 4 byte
+                         // \UXXXXXXXX
+                         times = 8;
+                     }
+                     else
+                         break;  // end of identifier
+ 
+                     p += 2;
+ 
+                     foreach(i; 0 .. times)
+                     {
+                         char c = p[i];
+ 
+                         if (c >= '0' && c <= '9')
+                             c -= '0';
+                         else if (c >= 'a' && c <= 'f')
+                             c -= 'a' - 10;
+                         else if (c >= 'A' && c <= 'F')
+                             c -= 'A' - 10;
+                         else
+                         {
+                             // Not a valid ucn, if this is the first character, return false now.
+                             // Otherwise break to return the identifier lexed so far.
+                             p -= 2;
+                             if (isStartCharacter)
+                             {
+                                 return false;
+                             }
+                             break IdentLoop;
+                         }
+                         u = (u << 4) | c;
+                     }
+                     if (isBidiControl(u))
+                         error(t.loc, "Bidirectional control characters in universal character names are disallowed for security reasons");
+                     p += times;
+                 }
+                 else
+                     break;  // end of identifier
+ 
+                 if (isStartCharacter && !charLookup.isStart(u))
+                     error(t.loc, "character 0x%04x is not allowed as a start character in an identifier", u);
+                 else if (!charLookup.isContinue(u))
+                     error(t.loc, "character 0x%04x is not allowed as a continue character in an identifier", u);
+                 stringbuffer.writeUTF8(u);
+             }
+ 
+             id = Identifier.idPool(stringbuffer[], false);
+         }
+ 
+         t.ident = id;
+         t.value = cast(TOK)id.getValue();
+         return true;
+     }
+ 
+     /**
      Lex a wysiwyg string. `p` must be pointing to the first character before the
      contents of the string literal. The character pointed to by `p` will be used as
      the terminating character (i.e. backtick or double-quote).
*************** class Lexer
*** 2283,2289 ****
  
              if (*p == '\'')
              {
!                 error("character constant has multiple characters");
                  p++;
              }
              else
--- 2235,2247 ----
  
              if (*p == '\'')
              {
!                 const(char)* s = p - 1;
!                 while(*s != '\'')
!                 {
!                     s--;
!                 }
!                 s++;
!                 error("character constant has multiple characters - did you mean \"%.*s\"?", cast(int) (p - s), s);
                  p++;
              }
              else
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/mangle/cpp.d gcc-16-20260208/gcc/d/dmd/mangle/cpp.d
*** gcc-16-20260201/gcc/d/dmd/mangle/cpp.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/mangle/cpp.d	Sun Feb  8 22:32:07 2026
*************** import dmd.astenums;
*** 26,32 ****
  import dmd.attrib;
  import dmd.declaration;
  import dmd.dsymbol;
! import dmd.dsymbolsem : isGNUABITag, toAlias;
  import dmd.dtemplate;
  import dmd.errors;
  import dmd.expression;
--- 26,34 ----
  import dmd.attrib;
  import dmd.declaration;
  import dmd.dsymbol;
! import dmd.dsymbolsem : isGNUABITag, toAlias, equals;
! import dmd.expressionsem : toStringExp, toInteger, toUInteger;
! import dmd.templatesem : computeOneMember;
  import dmd.dtemplate;
  import dmd.errors;
  import dmd.expression;
*************** private final class CppMangleVisitor : V
*** 509,514 ****
--- 511,520 ----
              // `&function`
              Dsymbol d = isDsymbol(o);
              Expression e = isExpression(o);
+ 
+             if (d && d.isTemplateDeclaration())
+                 d.isTemplateDeclaration().computeOneMember();
+ 
              if (d && d.isFuncDeclaration())
              {
                  // X .. E => template parameter is an expression
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/mangle/package.d gcc-16-20260208/gcc/d/dmd/mangle/package.d
*** gcc-16-20260201/gcc/d/dmd/mangle/package.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/mangle/package.d	Sun Feb  8 22:32:07 2026
*************** import dmd.dinterpret;
*** 146,151 ****
--- 146,152 ----
  import dmd.dmodule;
  import dmd.dsymbol;
  import dmd.dsymbolsem : toAlias;
+ import dmd.expressionsem : toInteger, toReal, toImaginary;
  import dmd.dtemplate;
  import dmd.errors;
  import dmd.expression;
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/module.h gcc-16-20260208/gcc/d/dmd/module.h
*** gcc-16-20260201/gcc/d/dmd/module.h	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/module.h	Sun Feb  8 22:32:07 2026
*************** enum PKG
*** 30,42 ****
      PKGpackage  // already determined that's an actual package
  };
  
- enum class Edition : uint16_t
- {
-     v2023 = 2023,
-     v2024,
-     v2025,
- };
- 
  class Package : public ScopeDsymbol
  {
  public:
--- 30,35 ----
*************** public:
*** 46,53 ****
  
      const char *kind() const override;
  
-     bool equals(const RootObject * const o) const override;
- 
      bool isAncestorPackageOf(const Package * const pkg) const;
  
      void accept(Visitor *v) override { v->visit(this); }
--- 39,44 ----
*************** public:
*** 131,139 ****
      int needModuleInfo();
      bool isPackageAccessible(Package *p, Visibility visibility, SearchOptFlags flags = (SearchOptFlags)SearchOpt::all) override;
      Dsymbol *symtabInsert(Dsymbol *s) override;
-     static void runDeferredSemantic();
-     static void runDeferredSemantic2();
-     static void runDeferredSemantic3();
      int imports(Module *m);
  
      bool isRoot() { return this->importedFrom == this; }
--- 122,127 ----
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/mtype.d gcc-16-20260208/gcc/d/dmd/mtype.d
*** gcc-16-20260201/gcc/d/dmd/mtype.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/mtype.d	Sun Feb  8 22:32:07 2026
*************** import core.stdc.stdio;
*** 17,23 ****
  import core.stdc.stdlib;
  import core.stdc.string;
  
- import dmd.aggregate;
  import dmd.arraytypes;
  import dmd.astenums;
  import dmd.ast_node;
--- 17,22 ----
*************** import dmd.denum;
*** 27,47 ****
  import dmd.dstruct;
  import dmd.dsymbol;
  import dmd.dtemplate;
- import dmd.enumsem;
- import dmd.errors;
  import dmd.expression;
  import dmd.hdrgen;
  import dmd.id;
  import dmd.identifier;
  import dmd.location;
- import dmd.root.ctfloat;
  import dmd.common.outbuffer;
  import dmd.root.rmem;
  import dmd.rootobject;
  import dmd.root.stringtable;
- import dmd.target;
  import dmd.tokens;
- import dmd.typesem;
  import dmd.visitor;
  
  enum LOGDOTEXP = 0;         // log ::dotExp()
--- 26,41 ----
*************** static if (__VERSION__ < 2095)
*** 55,65 ****
      private alias StringValueType = StringValue!Type;
  }
  
! private auto X(T, U)(T m, U n)
  {
      return (m << 4) | n;
  }
  
  /***************************
   * Return !=0 if modfrom can be implicitly converted to modto
   */
--- 49,181 ----
      private alias StringValueType = StringValue!Type;
  }
  
! private auto X(T, U)(T m, U n) nothrow
  {
      return (m << 4) | n;
  }
  
+ bool isImaginaryNonSemantic(Type _this)
+ {
+     assert(_this.isTypeEnum() is null);
+     if (auto tb = _this.isTypeBasic())
+         return (tb.flags & TFlags.imaginary) != 0;
+     return false;
+ }
+ 
+ Type toBaseTypeNonSemantic(Type _this)
+ {
+     if (auto te = _this.isTypeEnum())
+     {
+         if (!te.sym.members && !te.sym.memtype)
+             return te;
+         return te.sym.memtype.toBaseTypeNonSemantic();
+     }
+     return _this;
+ }
+ 
+ /* Helper function for `typeToExpression`. Contains common code
+  * for TypeQualified derived classes.
+  */
+ Expression typeToExpressionHelper(TypeQualified t, Expression e, size_t i = 0)
+ {
+     //printf("toExpressionHelper(e = %s %s)\n", EXPtoString(e.op).ptr, e.toChars());
+     foreach (id; t.idents[i .. t.idents.length])
+     {
+         //printf("\t[%d] e: '%s', id: '%s'\n", i, e.toChars(), id.toChars());
+ 
+         final switch (id.dyncast())
+         {
+             // ... '. ident'
+             case DYNCAST.identifier:
+                 e = new DotIdExp(e.loc, e, cast(Identifier)id);
+                 break;
+ 
+             // ... '. name!(tiargs)'
+             case DYNCAST.dsymbol:
+                 auto ti = (cast(Dsymbol)id).isTemplateInstance();
+                 assert(ti);
+                 e = new DotTemplateInstanceExp(e.loc, e, ti.name, ti.tiargs);
+                 break;
+ 
+             // ... '[type]'
+             case DYNCAST.type:          // https://issues.dlang.org/show_bug.cgi?id=1215
+                 e = new ArrayExp(t.loc, e, new TypeExp(t.loc, cast(Type)id));
+                 break;
+ 
+             // ... '[expr]'
+             case DYNCAST.expression:    // https://issues.dlang.org/show_bug.cgi?id=1215
+                 e = new ArrayExp(t.loc, e, cast(Expression)id);
+                 break;
+ 
+             case DYNCAST.object:
+             case DYNCAST.tuple:
+             case DYNCAST.parameter:
+             case DYNCAST.statement:
+             case DYNCAST.condition:
+             case DYNCAST.templateparameter:
+             case DYNCAST.initializer:
+                 assert(0);
+         }
+     }
+     return e;
+ }
+ 
+ /******************************************
+  * We've mistakenly parsed `t` as a type.
+  * Redo `t` as an Expression only if there are no type modifiers.
+  * Params:
+  *      t = mistaken type
+  * Returns:
+  *      t redone as Expression, null if cannot
+  */
+ Expression typeToExpression(Type t)
+ {
+     static Expression visitSArray(TypeSArray t)
+     {
+         if (auto e = t.next.typeToExpression())
+             return new ArrayExp(t.dim.loc, e, t.dim);
+         return null;
+     }
+ 
+     static Expression visitAArray(TypeAArray t)
+     {
+         if (auto e = t.next.typeToExpression())
+         {
+             if (auto ei = t.index.typeToExpression())
+                 return new ArrayExp(t.loc, e, ei);
+         }
+         return null;
+     }
+ 
+     static Expression visitIdentifier(TypeIdentifier t)
+     {
+         return typeToExpressionHelper(t, new IdentifierExp(t.loc, t.ident));
+     }
+ 
+     static Expression visitInstance(TypeInstance t)
+     {
+         return typeToExpressionHelper(t, new ScopeExp(t.loc, t.tempinst));
+     }
+ 
+     // easy way to enable 'auto v = new int[mixin("exp")];' in 2.088+
+     static Expression visitMixin(TypeMixin t)
+     {
+         return new TypeExp(t.loc, t);
+     }
+ 
+     if (t.mod)
+         return null;
+     switch (t.ty)
+     {
+         case Tsarray:   return visitSArray(t.isTypeSArray());
+         case Taarray:   return visitAArray(t.isTypeAArray());
+         case Tident:    return visitIdentifier(t.isTypeIdentifier());
+         case Tinstance: return visitInstance(t.isTypeInstance());
+         case Tmixin:    return visitMixin(t.isTypeMixin());
+         default:        return null;
+     }
+ }
+ 
  /***************************
   * Return !=0 if modfrom can be implicitly converted to modto
   */
*************** enum Covariant
*** 273,278 ****
--- 389,395 ----
   */
  extern (C++) abstract class Type : ASTNode
  {
+ 
      TY ty;
      MOD mod; // modifiers MODxxxx
      char* deco;
*************** extern (C++) abstract class Type : ASTNo
*** 401,407 ****
              return sizeTy;
          }();
  
!     final extern (D) this(TY ty) scope @safe
      {
          this.ty = ty;
      }
--- 518,524 ----
              return sizeTy;
          }();
  
!     final extern (D) this(TY ty) scope @safe nothrow
      {
          this.ty = ty;
      }
*************** extern (C++) abstract class Type : ASTNo
*** 424,436 ****
          assert(0);
      }
  
!     override bool equals(const RootObject o) const
      {
-         Type t = cast(Type)o;
          //printf("Type::equals(%s, %s)\n", toChars(), t.toChars());
          // deco strings are unique
          // and semantic() has been run
!         if (this == o || ((t && deco == t.deco) && deco !is null))
          {
              //printf("deco = '%s', t.deco = '%s'\n", deco, t.deco);
              return true;
--- 541,571 ----
          assert(0);
      }
  
!     final bool equals(const Type t) const nothrow
      {
          //printf("Type::equals(%s, %s)\n", toChars(), t.toChars());
+         if (this == t)
+             return true;
+         if (ty == Ttuple)
+         {
+             if (t.ty != Ttuple)
+                 return false;
+             auto t1 = this.isTypeTuple();
+             auto t2 = t.isTypeTuple();
+             if (t1.arguments.length != t2.arguments.length)
+                 return false;
+             for (size_t i = 0; i < t1.arguments.length; i++)
+             {
+                 const Parameter arg1 = (*t1.arguments)[i];
+                 const Parameter arg2 = (*t2.arguments)[i];
+                 if (!arg1.type.equals(arg2.type))
+                     return false;
+             }
+             return true;
+         }
          // deco strings are unique
          // and semantic() has been run
!         if ((t && deco == t.deco) && deco !is null)
          {
              //printf("deco = '%s', t.deco = '%s'\n", deco, t.deco);
              return true;
*************** extern (C++) abstract class Type : ASTNo
*** 440,459 ****
      }
  
      // kludge for template.isType()
!     override final DYNCAST dyncast() const
      {
          return DYNCAST.type;
      }
  
      /// Returns a non-zero unique ID for this Type, or returns 0 if the Type does not (yet) have a unique ID.
      /// If `semantic()` has not been run, 0 is returned.
!     final size_t getUniqueID() const
      {
          return cast(size_t) deco;
      }
  
      extern (D)
!     final Mcache* getMcache()
      {
          if (!mcache)
              mcache = cast(Mcache*) mem.xcalloc(Mcache.sizeof, 1);
--- 575,594 ----
      }
  
      // kludge for template.isType()
!     override final DYNCAST dyncast() const nothrow
      {
          return DYNCAST.type;
      }
  
      /// Returns a non-zero unique ID for this Type, or returns 0 if the Type does not (yet) have a unique ID.
      /// If `semantic()` has not been run, 0 is returned.
!     final size_t getUniqueID() const nothrow
      {
          return cast(size_t) deco;
      }
  
      extern (D)
!     final Mcache* getMcache() nothrow
      {
          if (!mcache)
              mcache = cast(Mcache*) mem.xcalloc(Mcache.sizeof, 1);
*************** extern (C++) abstract class Type : ASTNo
*** 480,621 ****
          return buf.extractChars();
      }
  
-     static void _init()
-     {
-         stringtable._init(14_000);
- 
-         // Set basic types
-         __gshared TY* basetab =
-         [
-             Tvoid,
-             Tint8,
-             Tuns8,
-             Tint16,
-             Tuns16,
-             Tint32,
-             Tuns32,
-             Tint64,
-             Tuns64,
-             Tint128,
-             Tuns128,
-             Tfloat32,
-             Tfloat64,
-             Tfloat80,
-             Timaginary32,
-             Timaginary64,
-             Timaginary80,
-             Tcomplex32,
-             Tcomplex64,
-             Tcomplex80,
-             Tbool,
-             Tchar,
-             Twchar,
-             Tdchar,
-             Terror
-         ];
- 
-         static Type merge(Type t)
-         {
-             import dmd.mangle.basic : tyToDecoBuffer;
- 
-             OutBuffer buf;
-             buf.reserve(3);
- 
-             if (t.ty == Tnoreturn)
-                 buf.writestring("Nn");
-             else
-                 tyToDecoBuffer(buf, t.ty);
- 
-             auto sv = t.stringtable.update(buf[]);
-             if (sv.value)
-                 return sv.value;
-             t.deco = cast(char*)sv.toDchars();
-             sv.value = t;
-             return t;
-         }
- 
-         for (size_t i = 0; basetab[i] != Terror; i++)
-         {
-             Type t = new TypeBasic(basetab[i]);
-             t = merge(t);
-             basic[basetab[i]] = t;
-         }
-         basic[Terror] = new TypeError();
- 
-         tnoreturn = new TypeNoreturn();
-         tnoreturn.deco = merge(tnoreturn).deco;
-         basic[Tnoreturn] = tnoreturn;
- 
-         tvoid = basic[Tvoid];
-         tint8 = basic[Tint8];
-         tuns8 = basic[Tuns8];
-         tint16 = basic[Tint16];
-         tuns16 = basic[Tuns16];
-         tint32 = basic[Tint32];
-         tuns32 = basic[Tuns32];
-         tint64 = basic[Tint64];
-         tuns64 = basic[Tuns64];
-         tint128 = basic[Tint128];
-         tuns128 = basic[Tuns128];
-         tfloat32 = basic[Tfloat32];
-         tfloat64 = basic[Tfloat64];
-         tfloat80 = basic[Tfloat80];
- 
-         timaginary32 = basic[Timaginary32];
-         timaginary64 = basic[Timaginary64];
-         timaginary80 = basic[Timaginary80];
- 
-         tcomplex32 = basic[Tcomplex32];
-         tcomplex64 = basic[Tcomplex64];
-         tcomplex80 = basic[Tcomplex80];
- 
-         tbool = basic[Tbool];
-         tchar = basic[Tchar];
-         twchar = basic[Twchar];
-         tdchar = basic[Tdchar];
- 
-         tshiftcnt = tint32;
-         terror = basic[Terror];
-         tnoreturn = basic[Tnoreturn];
-         tnull = new TypeNull();
-         tnull.deco = merge(tnull).deco;
- 
-         tvoidptr = tvoid.pointerTo();
-         tstring = tchar.immutableOf().arrayOf();
-         twstring = twchar.immutableOf().arrayOf();
-         tdstring = tdchar.immutableOf().arrayOf();
- 
-         const isLP64 = target.isLP64;
- 
-         tsize_t    = basic[isLP64 ? Tuns64 : Tuns32];
-         tptrdiff_t = basic[isLP64 ? Tint64 : Tint32];
-         thash_t = tsize_t;
- 
-         static if (__VERSION__ == 2081)
-         {
-             // Related issue: https://issues.dlang.org/show_bug.cgi?id=19134
-             // D 2.081.x regressed initializing class objects at compile time.
-             // As a workaround initialize this global at run-time instead.
-             TypeTuple.empty = new TypeTuple();
-         }
-     }
- 
      /**
       * Deinitializes the global state of the compiler.
       *
       * This can be used to restore the state set by `_init` to its original
       * state.
       */
!     static void deinitialize()
      {
          stringtable = stringtable.init;
      }
  
-     uint alignsize()
-     {
-         return cast(uint)size(this, Loc.initial);
-     }
- 
      /*********************************
       * Store this type's modifier name into buf.
       */
--- 615,631 ----
          return buf.extractChars();
      }
  
      /**
       * Deinitializes the global state of the compiler.
       *
       * This can be used to restore the state set by `_init` to its original
       * state.
       */
!     static void deinitialize() nothrow
      {
          stringtable = stringtable.init;
      }
  
      /*********************************
       * Store this type's modifier name into buf.
       */
*************** extern (C++) abstract class Type : ASTNo
*** 639,698 ****
          return buf.extractChars();
      }
  
!     bool isIntegral()
!     {
!         return false;
!     }
! 
!     // real, imaginary, or complex
!     bool isFloating()
!     {
!         return false;
!     }
! 
!     bool isReal()
!     {
!         return false;
!     }
! 
!     bool isImaginary()
!     {
!         return false;
!     }
! 
!     bool isComplex()
!     {
!         return false;
!     }
! 
!     bool isScalar()
!     {
!         return false;
!     }
! 
!     bool isUnsigned()
!     {
!         return false;
!     }
! 
!     bool isScopeClass()
!     {
!         return false;
!     }
! 
!     bool isString()
      {
          return false;
      }
  
-     /**************************
-      * Returns true if T can be converted to boolean value.
-      */
-     bool isBoolean()
-     {
-         return isScalar();
-     }
- 
      final bool isConst() const nothrow pure @nogc @safe
      {
          return (mod & MODFlags.const_) != 0;
--- 649,659 ----
          return buf.extractChars();
      }
  
!     bool isScopeClass() nothrow
      {
          return false;
      }
  
      final bool isConst() const nothrow pure @nogc @safe
      {
          return (mod & MODFlags.const_) != 0;
*************** extern (C++) abstract class Type : ASTNo
*** 759,1312 ****
          return t;
      }
  
-     /**********************************
-      * For our new type 'this', which is type-constructed from t,
-      * fill in the cto, ito, sto, scto, wto shortcuts.
-      */
-     extern (D) final void fixTo(Type t)
-     {
-         // If fixing this: immutable(T*) by t: immutable(T)*,
-         // cache t to this.xto won't break transitivity.
-         Type mto = null;
-         Type tn = nextOf();
-         if (!tn || ty != Tsarray && tn.mod == t.nextOf().mod)
-         {
-             switch (t.mod)
-             {
-             case 0:
-                 mto = t;
-                 break;
- 
-             case MODFlags.const_:
-                 getMcache();
-                 mcache.cto = t;
-                 break;
- 
-             case MODFlags.wild:
-                 getMcache();
-                 mcache.wto = t;
-                 break;
- 
-             case MODFlags.wildconst:
-                 getMcache();
-                 mcache.wcto = t;
-                 break;
- 
-             case MODFlags.shared_:
-                 getMcache();
-                 mcache.sto = t;
-                 break;
- 
-             case MODFlags.shared_ | MODFlags.const_:
-                 getMcache();
-                 mcache.scto = t;
-                 break;
- 
-             case MODFlags.shared_ | MODFlags.wild:
-                 getMcache();
-                 mcache.swto = t;
-                 break;
- 
-             case MODFlags.shared_ | MODFlags.wildconst:
-                 getMcache();
-                 mcache.swcto = t;
-                 break;
- 
-             case MODFlags.immutable_:
-                 getMcache();
-                 mcache.ito = t;
-                 break;
- 
-             default:
-                 break;
-             }
-         }
-         assert(mod != t.mod);
- 
-         if (mod)
-         {
-             getMcache();
-             t.getMcache();
-         }
-         switch (mod)
-         {
-         case 0:
-             break;
- 
-         case MODFlags.const_:
-             mcache.cto = mto;
-             t.mcache.cto = this;
-             break;
- 
-         case MODFlags.wild:
-             mcache.wto = mto;
-             t.mcache.wto = this;
-             break;
- 
-         case MODFlags.wildconst:
-             mcache.wcto = mto;
-             t.mcache.wcto = this;
-             break;
- 
-         case MODFlags.shared_:
-             mcache.sto = mto;
-             t.mcache.sto = this;
-             break;
- 
-         case MODFlags.shared_ | MODFlags.const_:
-             mcache.scto = mto;
-             t.mcache.scto = this;
-             break;
- 
-         case MODFlags.shared_ | MODFlags.wild:
-             mcache.swto = mto;
-             t.mcache.swto = this;
-             break;
- 
-         case MODFlags.shared_ | MODFlags.wildconst:
-             mcache.swcto = mto;
-             t.mcache.swcto = this;
-             break;
- 
-         case MODFlags.immutable_:
-             t.mcache.ito = this;
-             if (t.mcache.cto)
-                 t.mcache.cto.getMcache().ito = this;
-             if (t.mcache.sto)
-                 t.mcache.sto.getMcache().ito = this;
-             if (t.mcache.scto)
-                 t.mcache.scto.getMcache().ito = this;
-             if (t.mcache.wto)
-                 t.mcache.wto.getMcache().ito = this;
-             if (t.mcache.wcto)
-                 t.mcache.wcto.getMcache().ito = this;
-             if (t.mcache.swto)
-                 t.mcache.swto.getMcache().ito = this;
-             if (t.mcache.swcto)
-                 t.mcache.swcto.getMcache().ito = this;
-             break;
- 
-         default:
-             assert(0);
-         }
- 
-         check();
-         t.check();
-         //printf("fixTo: %s, %s\n", toChars(), t.toChars());
-     }
- 
-     /***************************
-      * Look for bugs in constructing types.
-      */
-     extern (D) final void check()
-     {
-         if (mcache)
-         with (mcache)
-         switch (mod)
-         {
-         case 0:
-             if (cto)
-                 assert(cto.mod == MODFlags.const_);
-             if (ito)
-                 assert(ito.mod == MODFlags.immutable_);
-             if (sto)
-                 assert(sto.mod == MODFlags.shared_);
-             if (scto)
-                 assert(scto.mod == (MODFlags.shared_ | MODFlags.const_));
-             if (wto)
-                 assert(wto.mod == MODFlags.wild);
-             if (wcto)
-                 assert(wcto.mod == MODFlags.wildconst);
-             if (swto)
-                 assert(swto.mod == (MODFlags.shared_ | MODFlags.wild));
-             if (swcto)
-                 assert(swcto.mod == (MODFlags.shared_ | MODFlags.wildconst));
-             break;
- 
-         case MODFlags.const_:
-             if (cto)
-                 assert(cto.mod == 0);
-             if (ito)
-                 assert(ito.mod == MODFlags.immutable_);
-             if (sto)
-                 assert(sto.mod == MODFlags.shared_);
-             if (scto)
-                 assert(scto.mod == (MODFlags.shared_ | MODFlags.const_));
-             if (wto)
-                 assert(wto.mod == MODFlags.wild);
-             if (wcto)
-                 assert(wcto.mod == MODFlags.wildconst);
-             if (swto)
-                 assert(swto.mod == (MODFlags.shared_ | MODFlags.wild));
-             if (swcto)
-                 assert(swcto.mod == (MODFlags.shared_ | MODFlags.wildconst));
-             break;
- 
-         case MODFlags.wild:
-             if (cto)
-                 assert(cto.mod == MODFlags.const_);
-             if (ito)
-                 assert(ito.mod == MODFlags.immutable_);
-             if (sto)
-                 assert(sto.mod == MODFlags.shared_);
-             if (scto)
-                 assert(scto.mod == (MODFlags.shared_ | MODFlags.const_));
-             if (wto)
-                 assert(wto.mod == 0);
-             if (wcto)
-                 assert(wcto.mod == MODFlags.wildconst);
-             if (swto)
-                 assert(swto.mod == (MODFlags.shared_ | MODFlags.wild));
-             if (swcto)
-                 assert(swcto.mod == (MODFlags.shared_ | MODFlags.wildconst));
-             break;
- 
-         case MODFlags.wildconst:
-             assert(!cto || cto.mod == MODFlags.const_);
-             assert(!ito || ito.mod == MODFlags.immutable_);
-             assert(!sto || sto.mod == MODFlags.shared_);
-             assert(!scto || scto.mod == (MODFlags.shared_ | MODFlags.const_));
-             assert(!wto || wto.mod == MODFlags.wild);
-             assert(!wcto || wcto.mod == 0);
-             assert(!swto || swto.mod == (MODFlags.shared_ | MODFlags.wild));
-             assert(!swcto || swcto.mod == (MODFlags.shared_ | MODFlags.wildconst));
-             break;
- 
-         case MODFlags.shared_:
-             if (cto)
-                 assert(cto.mod == MODFlags.const_);
-             if (ito)
-                 assert(ito.mod == MODFlags.immutable_);
-             if (sto)
-                 assert(sto.mod == 0);
-             if (scto)
-                 assert(scto.mod == (MODFlags.shared_ | MODFlags.const_));
-             if (wto)
-                 assert(wto.mod == MODFlags.wild);
-             if (wcto)
-                 assert(wcto.mod == MODFlags.wildconst);
-             if (swto)
-                 assert(swto.mod == (MODFlags.shared_ | MODFlags.wild));
-             if (swcto)
-                 assert(swcto.mod == (MODFlags.shared_ | MODFlags.wildconst));
-             break;
- 
-         case MODFlags.shared_ | MODFlags.const_:
-             if (cto)
-                 assert(cto.mod == MODFlags.const_);
-             if (ito)
-                 assert(ito.mod == MODFlags.immutable_);
-             if (sto)
-                 assert(sto.mod == MODFlags.shared_);
-             if (scto)
-                 assert(scto.mod == 0);
-             if (wto)
-                 assert(wto.mod == MODFlags.wild);
-             if (wcto)
-                 assert(wcto.mod == MODFlags.wildconst);
-             if (swto)
-                 assert(swto.mod == (MODFlags.shared_ | MODFlags.wild));
-             if (swcto)
-                 assert(swcto.mod == (MODFlags.shared_ | MODFlags.wildconst));
-             break;
- 
-         case MODFlags.shared_ | MODFlags.wild:
-             if (cto)
-                 assert(cto.mod == MODFlags.const_);
-             if (ito)
-                 assert(ito.mod == MODFlags.immutable_);
-             if (sto)
-                 assert(sto.mod == MODFlags.shared_);
-             if (scto)
-                 assert(scto.mod == (MODFlags.shared_ | MODFlags.const_));
-             if (wto)
-                 assert(wto.mod == MODFlags.wild);
-             if (wcto)
-                 assert(wcto.mod == MODFlags.wildconst);
-             if (swto)
-                 assert(swto.mod == 0);
-             if (swcto)
-                 assert(swcto.mod == (MODFlags.shared_ | MODFlags.wildconst));
-             break;
- 
-         case MODFlags.shared_ | MODFlags.wildconst:
-             assert(!cto || cto.mod == MODFlags.const_);
-             assert(!ito || ito.mod == MODFlags.immutable_);
-             assert(!sto || sto.mod == MODFlags.shared_);
-             assert(!scto || scto.mod == (MODFlags.shared_ | MODFlags.const_));
-             assert(!wto || wto.mod == MODFlags.wild);
-             assert(!wcto || wcto.mod == MODFlags.wildconst);
-             assert(!swto || swto.mod == (MODFlags.shared_ | MODFlags.wild));
-             assert(!swcto || swcto.mod == 0);
-             break;
- 
-         case MODFlags.immutable_:
-             if (cto)
-                 assert(cto.mod == MODFlags.const_);
-             if (ito)
-                 assert(ito.mod == 0);
-             if (sto)
-                 assert(sto.mod == MODFlags.shared_);
-             if (scto)
-                 assert(scto.mod == (MODFlags.shared_ | MODFlags.const_));
-             if (wto)
-                 assert(wto.mod == MODFlags.wild);
-             if (wcto)
-                 assert(wcto.mod == MODFlags.wildconst);
-             if (swto)
-                 assert(swto.mod == (MODFlags.shared_ | MODFlags.wild));
-             if (swcto)
-                 assert(swcto.mod == (MODFlags.shared_ | MODFlags.wildconst));
-             break;
- 
-         default:
-             assert(0);
-         }
- 
-         Type tn = nextOf();
-         if (tn && ty != Tfunction && tn.ty != Tfunction && ty != Tenum)
-         {
-             // Verify transitivity
-             switch (mod)
-             {
-             case 0:
-             case MODFlags.const_:
-             case MODFlags.wild:
-             case MODFlags.wildconst:
-             case MODFlags.shared_:
-             case MODFlags.shared_ | MODFlags.const_:
-             case MODFlags.shared_ | MODFlags.wild:
-             case MODFlags.shared_ | MODFlags.wildconst:
-             case MODFlags.immutable_:
-                 assert(tn.mod == MODFlags.immutable_ || (tn.mod & mod) == mod);
-                 break;
- 
-             default:
-                 assert(0);
-             }
-             tn.check();
-         }
-     }
- 
-     /*************************************
-      * Apply STCxxxx bits to existing type.
-      * Use *before* semantic analysis is run.
-      */
-     extern (D) final Type addSTC(STC stc)
-     {
-         Type t = this;
-         if (t.isImmutable())
-         {
-             return t;
-         }
-         else if (stc & STC.immutable_)
-         {
-             t = t.makeImmutable();
-             return t;
-         }
- 
-         if ((stc & STC.shared_) && !t.isShared())
-         {
-             if (t.isWild())
-             {
-                 if (t.isConst())
-                     t = t.makeSharedWildConst();
-                 else
-                     t = t.makeSharedWild();
-             }
-             else
-             {
-                 if (t.isConst())
-                     t = t.makeSharedConst();
-                 else
-                     t = t.makeShared();
-             }
-         }
-         if ((stc & STC.const_) && !t.isConst())
-         {
-             if (t.isShared())
-             {
-                 if (t.isWild())
-                     t = t.makeSharedWildConst();
-                 else
-                     t = t.makeSharedConst();
-             }
-             else
-             {
-                 if (t.isWild())
-                     t = t.makeWildConst();
-                 else
-                     t = t.makeConst();
-             }
-         }
-         if ((stc & STC.wild) && !t.isWild())
-         {
-             if (t.isShared())
-             {
-                 if (t.isConst())
-                     t = t.makeSharedWildConst();
-                 else
-                     t = t.makeSharedWild();
-             }
-             else
-             {
-                 if (t.isConst())
-                     t = t.makeWildConst();
-                 else
-                     t = t.makeWild();
-             }
-         }
- 
-         return t;
-     }
- 
-     final bool hasDeprecatedAliasThis()
-     {
-         auto ad = isAggregate(this);
-         return ad && ad.aliasthis && (ad.aliasthis.isDeprecated || ad.aliasthis.sym.isDeprecated);
-     }
- 
-     Type makeConst()
-     {
-         //printf("Type::makeConst() %p, %s\n", this, toChars());
-         if (mcache && mcache.cto)
-             return mcache.cto;
-         Type t = this.nullAttributes();
-         t.mod = MODFlags.const_;
-         //printf("-Type::makeConst() %p, %s\n", t, toChars());
-         return t;
-     }
- 
-     Type makeImmutable()
-     {
-         if (mcache && mcache.ito)
-             return mcache.ito;
-         Type t = this.nullAttributes();
-         t.mod = MODFlags.immutable_;
-         return t;
-     }
- 
-     Type makeShared()
-     {
-         if (mcache && mcache.sto)
-             return mcache.sto;
-         Type t = this.nullAttributes();
-         t.mod = MODFlags.shared_;
-         return t;
-     }
- 
-     Type makeSharedConst()
-     {
-         if (mcache && mcache.scto)
-             return mcache.scto;
-         Type t = this.nullAttributes();
-         t.mod = MODFlags.shared_ | MODFlags.const_;
-         return t;
-     }
- 
-     Type makeWild()
-     {
-         if (mcache && mcache.wto)
-             return mcache.wto;
-         Type t = this.nullAttributes();
-         t.mod = MODFlags.wild;
-         return t;
-     }
- 
-     Type makeWildConst()
-     {
-         if (mcache && mcache.wcto)
-             return mcache.wcto;
-         Type t = this.nullAttributes();
-         t.mod = MODFlags.wildconst;
-         return t;
-     }
- 
-     Type makeSharedWild()
-     {
-         if (mcache && mcache.swto)
-             return mcache.swto;
-         Type t = this.nullAttributes();
-         t.mod = MODFlags.shared_ | MODFlags.wild;
-         return t;
-     }
- 
-     Type makeSharedWildConst()
-     {
-         if (mcache && mcache.swcto)
-             return mcache.swcto;
-         Type t = this.nullAttributes();
-         t.mod = MODFlags.shared_ | MODFlags.wildconst;
-         return t;
-     }
- 
-     Type makeMutable()
-     {
-         Type t = this.nullAttributes();
-         t.mod = mod & MODFlags.shared_;
-         return t;
-     }
- 
-     /*******************************
-      * If this is a shell around another type,
-      * get that other type.
-      */
-     final Type toBasetype()
-     {
-         /* This function is used heavily.
-          * De-virtualize it so it can be easily inlined.
-          */
-         TypeEnum te;
-         return ((te = isTypeEnum()) !is null) ? te.toBasetype2() : this;
-     }
- 
-     /***************************************
-      * Compute MOD bits matching `this` argument type to wild parameter type.
-      * Params:
-      *  t = corresponding parameter type
-      *  isRef = parameter is `ref` or `out`
-      * Returns:
-      *  MOD bits
-      */
-     MOD deduceWild(Type t, bool isRef)
-     {
-         //printf("Type::deduceWild this = '%s', tprm = '%s'\n", toChars(), tprm.toChars());
-         if (t.isWild())
-         {
-             if (isImmutable())
-                 return MODFlags.immutable_;
-             if (isWildConst())
-             {
-                 if (t.isWildConst())
-                     return MODFlags.wild;
-                 return MODFlags.wildconst;
-             }
-             if (isWild())
-                 return MODFlags.wild;
-             if (isConst())
-                 return MODFlags.const_;
-             if (isMutable())
-                 return MODFlags.mutable;
-             assert(0);
-         }
-         return 0;
-     }
- 
      inout(ClassDeclaration) isClassHandle() inout
      {
          return null;
      }
  
-     /************************************
-      * Return alignment to use for this type.
-      */
-     structalign_t alignment()
-     {
-         structalign_t s;
-         s.setDefault();
-         return s;
-     }
- 
      /***************************************
       * Return !=0 if the type or any of its subtypes is wild.
       */
--- 720,730 ----
*************** extern (C++) abstract class Type : ASTNo
*** 1315,1436 ****
          return mod & MODFlags.wild;
      }
  
-     /*************************************
-      * Detect if type has pointer fields that are initialized to void.
-      * Local stack variables with such void fields can remain uninitialized,
-      * leading to pointer bugs.
-      * Returns:
-      *  true if so
-      */
-     bool hasVoidInitPointers()
-     {
-         return false;
-     }
- 
-     /*************************************
-      * Detect if this is an unsafe type because of the presence of `@system` members
-      * Returns:
-      *  true if so
-      */
-     bool hasUnsafeBitpatterns()
-     {
-         return false;
-     }
- 
-     /***************************************
-      * Returns: true if type has any invariants
-      */
-     bool hasInvariant()
-     {
-         //printf("Type::hasInvariant() %s, %d\n", toChars(), ty);
-         return false;
-     }
- 
-     /*************************************
-      * If this is a type of something, return that something.
-      */
-     Type nextOf()
-     {
-         return null;
-     }
- 
-     /*************************************
-      * If this is a type of static array, return its base element type.
-      */
-     final Type baseElemOf()
-     {
-         Type t = toBasetype();
-         TypeSArray tsa;
-         while ((tsa = t.isTypeSArray()) !is null)
-             t = tsa.next.toBasetype();
-         return t;
-     }
- 
-     /****************************************
-      * Return the mask that an integral type will
-      * fit into.
-      */
-     extern (D) final ulong sizemask()
-     {
-         ulong m;
-         switch (toBasetype().ty)
-         {
-         case Tbool:
-             m = 1;
-             break;
-         case Tchar:
-         case Tint8:
-         case Tuns8:
-             m = 0xFF;
-             break;
-         case Twchar:
-         case Tint16:
-         case Tuns16:
-             m = 0xFFFFU;
-             break;
-         case Tdchar:
-         case Tint32:
-         case Tuns32:
-             m = 0xFFFFFFFFU;
-             break;
-         case Tint64:
-         case Tuns64:
-             m = 0xFFFFFFFFFFFFFFFFUL;
-             break;
-         default:
-             assert(0);
-         }
-         return m;
-     }
- 
-     /********************************
-      * true if when type goes out of scope, it needs a destructor applied.
-      * Only applies to value types, not ref types.
-      */
-     bool needsDestruction()
-     {
-         return false;
-     }
- 
-     /********************************
-      * true if when type is copied, it needs a copy constructor or postblit
-      * applied. Only applies to value types, not ref types.
-      */
-     bool needsCopyOrPostblit()
-     {
-         return false;
-     }
- 
-     /*********************************
-      *
-      */
-     bool needsNested()
-     {
-         return false;
-     }
- 
      // For eliminating dynamic_cast
!     TypeBasic isTypeBasic()
      {
          return null;
      }
--- 733,740 ----
          return mod & MODFlags.wild;
      }
  
      // For eliminating dynamic_cast
!     TypeBasic isTypeBasic() nothrow
      {
          return null;
      }
*************** extern (C++) abstract class Type : ASTNo
*** 1501,1507 ****
          v.visit(this);
      }
  
!     final TypeFunction toTypeFunction()
      {
          if (ty != Tfunction)
              assert(0);
--- 805,811 ----
          v.visit(this);
      }
  
!     final TypeFunction toTypeFunction() nothrow
      {
          if (ty != Tfunction)
              assert(0);
*************** extern (C++) final class TypeError : Typ
*** 1532,1543 ****
          super(Terror);
      }
  
!     override const(char)* kind() const
      {
          return "error";
      }
  
!     override TypeError syntaxCopy()
      {
          // No semantic analysis done, no need to copy
          return this;
--- 836,847 ----
          super(Terror);
      }
  
!     override const(char)* kind() const nothrow
      {
          return "error";
      }
  
!     override TypeError syntaxCopy() nothrow
      {
          // No semantic analysis done, no need to copy
          return this;
*************** extern (C++) abstract class TypeNext : T
*** 1570,1811 ****
          return mod & MODFlags.wild || (next && next.hasWild());
      }
  
-     /*******************************
-      * For TypeFunction, nextOf() can return NULL if the function return
-      * type is meant to be inferred, and semantic() hasn't yet been run
-      * on the function. After semantic(), it must no longer be NULL.
-      */
-     override final Type nextOf() @safe
-     {
-         return next;
-     }
- 
-     override final Type makeConst()
-     {
-         //printf("TypeNext::makeConst() %p, %s\n", this, toChars());
-         if (mcache && mcache.cto)
-         {
-             assert(mcache.cto.mod == MODFlags.const_);
-             return mcache.cto;
-         }
-         TypeNext t = cast(TypeNext)Type.makeConst();
-         if (ty != Tfunction && next.ty != Tfunction && !next.isImmutable())
-         {
-             if (next.isShared())
-             {
-                 if (next.isWild())
-                     t.next = next.sharedWildConstOf();
-                 else
-                     t.next = next.sharedConstOf();
-             }
-             else
-             {
-                 if (next.isWild())
-                     t.next = next.wildConstOf();
-                 else
-                     t.next = next.constOf();
-             }
-         }
-         //printf("TypeNext::makeConst() returns %p, %s\n", t, t.toChars());
-         return t;
-     }
- 
-     override final Type makeImmutable()
-     {
-         //printf("TypeNext::makeImmutable() %s\n", toChars());
-         if (mcache && mcache.ito)
-         {
-             assert(mcache.ito.isImmutable());
-             return mcache.ito;
-         }
-         TypeNext t = cast(TypeNext)Type.makeImmutable();
-         if (ty != Tfunction && next.ty != Tfunction && !next.isImmutable())
-         {
-             t.next = next.immutableOf();
-         }
-         return t;
-     }
- 
-     override final Type makeShared()
-     {
-         //printf("TypeNext::makeShared() %s\n", toChars());
-         if (mcache && mcache.sto)
-         {
-             assert(mcache.sto.mod == MODFlags.shared_);
-             return mcache.sto;
-         }
-         TypeNext t = cast(TypeNext)Type.makeShared();
-         if (ty != Tfunction && next.ty != Tfunction && !next.isImmutable())
-         {
-             if (next.isWild())
-             {
-                 if (next.isConst())
-                     t.next = next.sharedWildConstOf();
-                 else
-                     t.next = next.sharedWildOf();
-             }
-             else
-             {
-                 if (next.isConst())
-                     t.next = next.sharedConstOf();
-                 else
-                     t.next = next.sharedOf();
-             }
-         }
-         //printf("TypeNext::makeShared() returns %p, %s\n", t, t.toChars());
-         return t;
-     }
- 
-     override final Type makeSharedConst()
-     {
-         //printf("TypeNext::makeSharedConst() %s\n", toChars());
-         if (mcache && mcache.scto)
-         {
-             assert(mcache.scto.mod == (MODFlags.shared_ | MODFlags.const_));
-             return mcache.scto;
-         }
-         TypeNext t = cast(TypeNext)Type.makeSharedConst();
-         if (ty != Tfunction && next.ty != Tfunction && !next.isImmutable())
-         {
-             if (next.isWild())
-                 t.next = next.sharedWildConstOf();
-             else
-                 t.next = next.sharedConstOf();
-         }
-         //printf("TypeNext::makeSharedConst() returns %p, %s\n", t, t.toChars());
-         return t;
-     }
- 
-     override final Type makeWild()
-     {
-         //printf("TypeNext::makeWild() %s\n", toChars());
-         if (mcache && mcache.wto)
-         {
-             assert(mcache.wto.mod == MODFlags.wild);
-             return mcache.wto;
-         }
-         TypeNext t = cast(TypeNext)Type.makeWild();
-         if (ty != Tfunction && next.ty != Tfunction && !next.isImmutable())
-         {
-             if (next.isShared())
-             {
-                 if (next.isConst())
-                     t.next = next.sharedWildConstOf();
-                 else
-                     t.next = next.sharedWildOf();
-             }
-             else
-             {
-                 if (next.isConst())
-                     t.next = next.wildConstOf();
-                 else
-                     t.next = next.wildOf();
-             }
-         }
-         //printf("TypeNext::makeWild() returns %p, %s\n", t, t.toChars());
-         return t;
-     }
- 
-     override final Type makeWildConst()
-     {
-         //printf("TypeNext::makeWildConst() %s\n", toChars());
-         if (mcache && mcache.wcto)
-         {
-             assert(mcache.wcto.mod == MODFlags.wildconst);
-             return mcache.wcto;
-         }
-         TypeNext t = cast(TypeNext)Type.makeWildConst();
-         if (ty != Tfunction && next.ty != Tfunction && !next.isImmutable())
-         {
-             if (next.isShared())
-                 t.next = next.sharedWildConstOf();
-             else
-                 t.next = next.wildConstOf();
-         }
-         //printf("TypeNext::makeWildConst() returns %p, %s\n", t, t.toChars());
-         return t;
-     }
- 
-     override final Type makeSharedWild()
-     {
-         //printf("TypeNext::makeSharedWild() %s\n", toChars());
-         if (mcache && mcache.swto)
-         {
-             assert(mcache.swto.isSharedWild());
-             return mcache.swto;
-         }
-         TypeNext t = cast(TypeNext)Type.makeSharedWild();
-         if (ty != Tfunction && next.ty != Tfunction && !next.isImmutable())
-         {
-             if (next.isConst())
-                 t.next = next.sharedWildConstOf();
-             else
-                 t.next = next.sharedWildOf();
-         }
-         //printf("TypeNext::makeSharedWild() returns %p, %s\n", t, t.toChars());
-         return t;
-     }
- 
-     override final Type makeSharedWildConst()
-     {
-         //printf("TypeNext::makeSharedWildConst() %s\n", toChars());
-         if (mcache && mcache.swcto)
-         {
-             assert(mcache.swcto.mod == (MODFlags.shared_ | MODFlags.wildconst));
-             return mcache.swcto;
-         }
-         TypeNext t = cast(TypeNext)Type.makeSharedWildConst();
-         if (ty != Tfunction && next.ty != Tfunction && !next.isImmutable())
-         {
-             t.next = next.sharedWildConstOf();
-         }
-         //printf("TypeNext::makeSharedWildConst() returns %p, %s\n", t, t.toChars());
-         return t;
-     }
- 
-     override final Type makeMutable()
-     {
-         //printf("TypeNext::makeMutable() %p, %s\n", this, toChars());
-         TypeNext t = cast(TypeNext)Type.makeMutable();
-         if (ty == Tsarray)
-         {
-             t.next = next.mutableOf();
-         }
-         //printf("TypeNext::makeMutable() returns %p, %s\n", t, t.toChars());
-         return t;
-     }
- 
-     override final MOD deduceWild(Type t, bool isRef)
-     {
-         if (ty == Tfunction)
-             return 0;
- 
-         ubyte wm;
- 
-         Type tn = t.nextOf();
-         if (!isRef && (ty == Tarray || ty == Tpointer) && tn)
-         {
-             wm = next.deduceWild(tn, true);
-             if (!wm)
-                 wm = Type.deduceWild(t, true);
-         }
-         else
-         {
-             wm = Type.deduceWild(t, isRef);
-             if (!wm && tn)
-                 wm = next.deduceWild(tn, true);
-         }
- 
-         return wm;
-     }
- 
-     final void transitive()
-     {
-         /* Invoke transitivity of type attributes
-          */
-         next = next.addMod(mod);
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 874,879 ----
*************** extern (C++) final class TypeBasic : Typ
*** 1950,1956 ****
          }
          this.dstring = d;
          this.flags = flags;
-         merge(this);
      }
  
      override const(char)* kind() const
--- 1018,1023 ----
*************** extern (C++) final class TypeBasic : Typ
*** 1964,2015 ****
          return this;
      }
  
-     override uint alignsize()
-     {
-         return target.alignsize(this);
-     }
- 
-     override bool isIntegral()
-     {
-         //printf("TypeBasic::isIntegral('%s') x%x\n", toChars(), flags);
-         return (flags & TFlags.integral) != 0;
-     }
- 
-     override bool isFloating()
-     {
-         return (flags & TFlags.floating) != 0;
-     }
- 
-     override bool isReal()
-     {
-         return (flags & TFlags.real_) != 0;
-     }
- 
-     override bool isImaginary()
-     {
-         return (flags & TFlags.imaginary) != 0;
-     }
- 
-     override bool isComplex()
-     {
-         return (flags & TFlags.complex) != 0;
-     }
- 
-     override bool isScalar()
-     {
-         return (flags & (TFlags.integral | TFlags.floating)) != 0;
-     }
- 
-     override bool isUnsigned()
-     {
-         return (flags & TFlags.unsigned) != 0;
-     }
- 
-     override bool hasUnsafeBitpatterns()
-     {
-         return ty == Tbool;
-     }
- 
      // For eliminating dynamic_cast
      override TypeBasic isTypeBasic()
      {
--- 1031,1036 ----
*************** extern (C++) final class TypeVector : Ty
*** 2053,2094 ****
          return new TypeVector(basetype.syntaxCopy());
      }
  
-     override uint alignsize()
-     {
-         return cast(uint)basetype.size();
-     }
- 
-     override bool isIntegral()
-     {
-         //printf("TypeVector::isIntegral('%s') x%x\n", toChars(), flags);
-         return basetype.nextOf().isIntegral();
-     }
- 
-     override bool isFloating()
-     {
-         return basetype.nextOf().isFloating();
-     }
- 
-     override bool isScalar()
-     {
-         return basetype.nextOf().isScalar();
-     }
- 
-     override bool isUnsigned()
-     {
-         return basetype.nextOf().isUnsigned();
-     }
- 
-     override bool isBoolean()
-     {
-         return false;
-     }
- 
      TypeBasic elementType()
      {
          assert(basetype.ty == Tsarray);
          TypeSArray t = cast(TypeSArray)basetype;
!         TypeBasic tb = t.nextOf().isTypeBasic();
          assert(tb);
          return tb;
      }
--- 1074,1084 ----
          return new TypeVector(basetype.syntaxCopy());
      }
  
      TypeBasic elementType()
      {
          assert(basetype.ty == Tsarray);
          TypeSArray t = cast(TypeSArray)basetype;
!         TypeBasic tb = t.next.isTypeBasic();
          assert(tb);
          return tb;
      }
*************** extern (C++) final class TypeSArray : Ty
*** 2158,2212 ****
          return dim.isIntegerExp() && dim.isIntegerExp().getInteger() == 0;
      }
  
-     override uint alignsize()
-     {
-         return next.alignsize();
-     }
- 
-     override bool isString()
-     {
-         TY nty = next.toBasetype().ty;
-         return nty.isSomeChar;
-     }
- 
-     override structalign_t alignment()
-     {
-         return next.alignment();
-     }
- 
-     override bool hasUnsafeBitpatterns()
-     {
-         return next.hasUnsafeBitpatterns();
-     }
- 
-     override bool hasVoidInitPointers()
-     {
-         return next.hasVoidInitPointers();
-     }
- 
-     override bool hasInvariant()
-     {
-         return next.hasInvariant();
-     }
- 
-     override bool needsDestruction()
-     {
-         return next.needsDestruction();
-     }
- 
-     override bool needsCopyOrPostblit()
-     {
-         return next.needsCopyOrPostblit();
-     }
- 
-     /*********************************
-      *
-      */
-     override bool needsNested()
-     {
-         return next.needsNested();
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 1148,1153 ----
*************** extern (C++) final class TypeDArray : Ty
*** 2240,2263 ****
          return result;
      }
  
-     override uint alignsize()
-     {
-         // A DArray consists of two ptr-sized values, so align it on pointer size
-         // boundary
-         return target.ptrsize;
-     }
- 
-     override bool isString()
-     {
-         TY nty = next.toBasetype().ty;
-         return nty.isSomeChar;
-     }
- 
-     override bool isBoolean()
-     {
-         return true;
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 1181,1186 ----
*************** extern (C++) final class TypeAArray : Ty
*** 2299,2309 ****
          return result;
      }
  
-     override bool isBoolean()
-     {
-         return true;
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 1222,1227 ----
*************** extern (C++) final class TypePointer : T
*** 2340,2350 ****
          return result;
      }
  
-     override bool isScalar()
-     {
-         return true;
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 1258,1263 ----
*************** extern (C++) final class TypeDelegate :
*** 2603,2618 ****
          return result;
      }
  
-     override uint alignsize()
-     {
-         return target.ptrsize;
-     }
- 
-     override bool isBoolean()
-     {
-         return true;
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 1516,1521 ----
*************** extern (C++) final class TypeStruct : Ty
*** 2926,3024 ****
          return "struct";
      }
  
-     override uint alignsize()
-     {
-         sym.size(Loc.initial); // give error for forward references
-         return sym.alignsize;
-     }
- 
      override TypeStruct syntaxCopy()
      {
          return this;
      }
  
-     override structalign_t alignment()
-     {
-         if (sym.alignment.isUnknown())
-             sym.size(sym.loc);
-         return sym.alignment;
-     }
- 
-     override bool isBoolean()
-     {
-         return false;
-     }
- 
-     override bool needsDestruction()
-     {
-         return sym.dtor !is null;
-     }
- 
-     override bool needsCopyOrPostblit()
-     {
-         return sym.hasCopyCtor || sym.postblit;
-     }
- 
-     override bool needsNested()
-     {
-         if (inuse) return false; // circular type, error instead of crashing
- 
-         inuse = true;
-         scope(exit) inuse = false;
- 
-         if (sym.isNested())
-             return true;
- 
-         for (size_t i = 0; i < sym.fields.length; i++)
-         {
-             VarDeclaration v = sym.fields[i];
-             if (!v.isDataseg() && v.type.needsNested())
-                 return true;
-         }
-         return false;
-     }
- 
-     override bool hasVoidInitPointers()
-     {
-         sym.size(Loc.initial); // give error for forward references
-         sym.determineTypeProperties();
-         return sym.hasVoidInitPointers;
-     }
- 
-     override bool hasUnsafeBitpatterns()
-     {
-         sym.size(Loc.initial); // give error for forward references
-         sym.determineTypeProperties();
-         return sym.hasUnsafeBitpatterns;
-     }
- 
-     override bool hasInvariant()
-     {
-         sym.size(Loc.initial); // give error for forward references
-         sym.determineTypeProperties();
-         return sym.hasInvariant() || sym.hasFieldWithInvariant;
-     }
- 
-     override MOD deduceWild(Type t, bool isRef)
-     {
-         if (ty == t.ty && sym == (cast(TypeStruct)t).sym)
-             return Type.deduceWild(t, isRef);
- 
-         ubyte wm = 0;
- 
-         if (t.hasWild() && sym.aliasthis && !(att & AliasThisRec.tracing))
-         {
-             if (auto ato = aliasthisOf(this))
-             {
-                 att = cast(AliasThisRec)(att | AliasThisRec.tracing);
-                 wm = ato.deduceWild(t, isRef);
-                 att = cast(AliasThisRec)(att & ~AliasThisRec.tracing);
-             }
-         }
- 
-         return wm;
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 1829,1839 ----
*************** extern (C++) final class TypeEnum : Type
*** 3047,3153 ****
          return this;
      }
  
-     Type memType()
-     {
-         return sym.getMemtype(Loc.initial);
-     }
- 
-     override uint alignsize()
-     {
-         Type t = memType();
-         if (t.ty == Terror)
-             return 4;
-         return t.alignsize();
-     }
- 
-     override bool isIntegral()
-     {
-         return memType().isIntegral();
-     }
- 
-     override bool isFloating()
-     {
-         return memType().isFloating();
-     }
- 
-     override bool isReal()
-     {
-         return memType().isReal();
-     }
- 
-     override bool isImaginary()
-     {
-         return memType().isImaginary();
-     }
- 
-     override bool isComplex()
-     {
-         return memType().isComplex();
-     }
- 
-     override bool isScalar()
-     {
-         return memType().isScalar();
-     }
- 
-     override bool isUnsigned()
-     {
-         return memType().isUnsigned();
-     }
- 
-     override bool isBoolean()
-     {
-         return memType().isBoolean();
-     }
- 
-     override bool isString()
-     {
-         return memType().isString();
-     }
- 
-     override bool needsDestruction()
-     {
-         return memType().needsDestruction();
-     }
- 
-     override bool needsCopyOrPostblit()
-     {
-         return memType().needsCopyOrPostblit();
-     }
- 
-     override bool needsNested()
-     {
-         return memType().needsNested();
-     }
- 
-     extern (D) Type toBasetype2()
-     {
-         if (!sym.members && !sym.memtype)
-             return this;
-         auto tb = sym.getMemtype(Loc.initial).toBasetype();
-         return tb.castMod(mod);         // retain modifier bits from 'this'
-     }
- 
-     override bool hasVoidInitPointers()
-     {
-         return memType().hasVoidInitPointers();
-     }
- 
-     override bool hasUnsafeBitpatterns()
-     {
-         return memType().hasUnsafeBitpatterns();
-     }
- 
-     override bool hasInvariant()
-     {
-         return memType().hasInvariant();
-     }
- 
-     override Type nextOf()
-     {
-         return memType().nextOf();
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 1862,1867 ----
*************** extern (C++) final class TypeClass : Typ
*** 3183,3219 ****
          return sym;
      }
  
-     override MOD deduceWild(Type t, bool isRef)
-     {
-         ClassDeclaration cd = t.isClassHandle();
-         if (cd && (sym == cd || cd.isBaseOf(sym, null)))
-             return Type.deduceWild(t, isRef);
- 
-         ubyte wm = 0;
- 
-         if (t.hasWild() && sym.aliasthis && !(att & AliasThisRec.tracing))
-         {
-             if (auto ato = aliasthisOf(this))
-             {
-                 att = cast(AliasThisRec)(att | AliasThisRec.tracing);
-                 wm = ato.deduceWild(t, isRef);
-                 att = cast(AliasThisRec)(att & ~AliasThisRec.tracing);
-             }
-         }
- 
-         return wm;
-     }
- 
      override bool isScopeClass()
      {
          return sym.stack;
      }
  
-     override bool isBoolean()
-     {
-         return true;
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 1897,1907 ----
*************** extern (C++) final class TypeTuple : Typ
*** 3331,3359 ****
          return t;
      }
  
-     override bool equals(const RootObject o) const
-     {
-         Type t = cast(Type)o;
-         //printf("TypeTuple::equals(%s, %s)\n", toChars(), t.toChars());
-         if (this == t)
-             return true;
-         if (auto tt = t.isTypeTuple())
-         {
-             if (arguments.length == tt.arguments.length)
-             {
-                 for (size_t i = 0; i < tt.arguments.length; i++)
-                 {
-                     const Parameter arg1 = (*arguments)[i];
-                     Parameter arg2 = (*tt.arguments)[i];
-                     if (!arg1.type.equals(arg2.type))
-                         return false;
-                 }
-                 return true;
-             }
-         }
-         return false;
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 2019,2024 ----
*************** extern (C++) final class TypeNull : Type
*** 3415,3425 ****
          return this;
      }
  
-     override bool isBoolean()
-     {
-         return true;
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 2080,2085 ----
*************** extern (C++) final class TypeNoreturn :
*** 3447,3462 ****
          return this;
      }
  
-     override bool isBoolean()
-     {
-         return true;  // bottom type can be implicitly converted to any other type
-     }
- 
-     override uint alignsize()
-     {
-         return 0;
-     }
- 
      override void accept(Visitor v)
      {
          v.visit(this);
--- 2107,2112 ----
*************** extern (C++) final class Parameter : AST
*** 3656,3688 ****
          return new Parameter(loc, storageClass, type ? type.syntaxCopy() : null, ident, defaultArg ? defaultArg.syntaxCopy() : null, userAttribDecl ? userAttribDecl.syntaxCopy(null) : null);
      }
  
-     /****************************************************
-      * Determine if parameter is a lazy array of delegates.
-      * If so, return the return type of those delegates.
-      * If not, return NULL.
-      *
-      * Returns T if the type is one of the following forms:
-      *      T delegate()[]
-      *      T delegate()[dim]
-      */
-     Type isLazyArray()
-     {
-         Type tb = type.toBasetype();
-         if (tb.isStaticOrDynamicArray())
-         {
-             Type tel = (cast(TypeArray)tb).next.toBasetype();
-             if (auto td = tel.isTypeDelegate())
-             {
-                 TypeFunction tf = td.next.toTypeFunction();
-                 if (tf.parameterList.varargs == VarArg.none && tf.parameterList.length == 0)
-                 {
-                     return tf.next; // return type of delegate
-                 }
-             }
-         }
-         return null;
-     }
- 
      /// Returns: Whether the function parameter is lazy
      bool isLazy() const @safe pure nothrow @nogc
      {
--- 2306,2311 ----
*************** extern (C++) final class Parameter : AST
*** 3815,3822 ****
          if (eparam is null)
              return 0;
  
!         Type t = eparam.type.toBasetype();
!         if (auto tu = t.isTypeTuple())
          {
              // Check for empty tuples
              if (tu.arguments is null)
--- 2438,2444 ----
          if (eparam is null)
              return 0;
  
!         if (auto tu = eparam.type.isTypeTuple())
          {
              // Check for empty tuples
              if (tu.arguments is null)
*************** void attributesApply(const TypeFunction
*** 4050,4084 ****
      dg(trustToString(trustAttrib));
  }
  
- /**
-  * If the type is a class or struct, returns the symbol for it,
-  * else null.
-  */
- AggregateDeclaration isAggregate(Type t)
- {
-     t = t.toBasetype();
-     if (auto tc = t.isTypeClass())
-         return tc.sym;
-     if (auto ts = t.isTypeStruct())
-         return ts.sym;
-     return null;
- }
- 
- /***************************************************
-  * Determine if type t can be indexed or sliced given that it is not an
-  * aggregate with operator overloads.
-  * Params:
-  *      t = type to check
-  * Returns:
-  *      true if an expression of type t can be e1 in an array expression
-  */
- bool isIndexableNonAggregate(Type t)
- {
-     t = t.toBasetype();
-     return (t.ty == Tpointer || t.isStaticOrDynamicArray() || t.ty == Taarray ||
-             t.ty == Ttuple || t.ty == Tvector);
- }
- 
  /***************************************
   * Computes how a parameter may be returned.
   * Shrinking the representation is necessary because STC is so wide
--- 2672,2677 ----
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/mtype.h gcc-16-20260208/gcc/d/dmd/mtype.h
*** gcc-16-20260201/gcc/d/dmd/mtype.h	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/mtype.h	Sun Feb  8 22:32:07 2026
*************** typedef struct TYPE type;
*** 42,50 ****
--- 42,54 ----
  
  namespace dmd
  {
+     void Type_init();
      Type *typeSemantic(Type *t, Loc loc, Scope *sc);
      Type *merge(Type *type);
      Expression *defaultInitLiteral(Type *t, Loc loc);
+     Type *toBasetype(Type *type);
+     Type *nextOf(Type* type);
+     Type *baseElemOf(Type* type);
  }
  
  enum class TY : uint8_t
*************** public:
*** 215,245 ****
  
      static Type *basic[(int)TY::TMAX];
  
      virtual const char *kind();
      Type *copy() const;
      virtual Type *syntaxCopy();
!     bool equals(const RootObject * const o) const override;
      // kludge for template.isType()
      DYNCAST dyncast() const override final { return DYNCAST_TYPE; }
      size_t getUniqueID() const;
      const char *toChars() const override;
      char *toPrettyChars(bool QualifyTypes = false);
-     static void _init();
  
-     virtual unsigned alignsize();
      void modToBuffer(OutBuffer& buf) const;
      char *modToChars() const;
  
-     virtual bool isIntegral();
-     virtual bool isFloating();   // real, imaginary, or complex
-     virtual bool isReal();
-     virtual bool isImaginary();
-     virtual bool isComplex();
-     virtual bool isScalar();
-     virtual bool isUnsigned();
      virtual bool isScopeClass();
!     virtual bool isString();
!     virtual bool isBoolean();
      bool isConst() const       { return (mod & MODconst) != 0; }
      bool isImmutable() const   { return (mod & MODimmutable) != 0; }
      bool isMutable() const     { return (mod & (MODconst | MODimmutable | MODwild)) == 0; }
--- 219,241 ----
  
      static Type *basic[(int)TY::TMAX];
  
+     static void _init() { return dmd::Type_init(); }
+ 
      virtual const char *kind();
      Type *copy() const;
      virtual Type *syntaxCopy();
!     bool equals(const Type * const t) const;
      // kludge for template.isType()
      DYNCAST dyncast() const override final { return DYNCAST_TYPE; }
      size_t getUniqueID() const;
      const char *toChars() const override;
      char *toPrettyChars(bool QualifyTypes = false);
  
      void modToBuffer(OutBuffer& buf) const;
      char *modToChars() const;
  
      virtual bool isScopeClass();
! 
      bool isConst() const       { return (mod & MODconst) != 0; }
      bool isImmutable() const   { return (mod & MODimmutable) != 0; }
      bool isMutable() const     { return (mod & (MODconst | MODimmutable | MODwild)) == 0; }
*************** public:
*** 250,279 ****
      bool isSharedWild() const  { return (mod & (MODshared | MODwild)) == (MODshared | MODwild); }
      bool isNaked() const       { return mod == 0; }
      Type *nullAttributes() const;
!     bool hasDeprecatedAliasThis();
!     virtual Type *makeConst();
!     virtual Type *makeImmutable();
!     virtual Type *makeShared();
!     virtual Type *makeSharedConst();
!     virtual Type *makeWild();
!     virtual Type *makeWildConst();
!     virtual Type *makeSharedWild();
!     virtual Type *makeSharedWildConst();
!     virtual Type *makeMutable();
!     Type *toBasetype();
!     virtual unsigned char deduceWild(Type *t, bool isRef);
  
      virtual ClassDeclaration *isClassHandle();
-     virtual structalign_t alignment();
      virtual int hasWild() const;
-     virtual bool hasVoidInitPointers();
-     virtual bool hasUnsafeBitpatterns();
-     virtual bool hasInvariant();
-     virtual Type *nextOf();
-     Type *baseElemOf();
-     virtual bool needsDestruction();
-     virtual bool needsCopyOrPostblit();
-     virtual bool needsNested();
  
      TypeFunction *toTypeFunction();
  
--- 246,258 ----
      bool isSharedWild() const  { return (mod & (MODshared | MODwild)) == (MODshared | MODwild); }
      bool isNaked() const       { return mod == 0; }
      Type *nullAttributes() const;
! 
!     Type *toBasetype() { return dmd::toBasetype(this); }
!     Type *nextOf()     { return dmd::nextOf(this); }
!     Type *baseElemOf() { return dmd::baseElemOf(this); }
  
      virtual ClassDeclaration *isClassHandle();
      virtual int hasWild() const;
  
      TypeFunction *toTypeFunction();
  
*************** public:
*** 323,340 ****
      Type *next;
  
      int hasWild() const override final;
-     Type *nextOf() override final;
-     Type *makeConst() override final;
-     Type *makeImmutable() override final;
-     Type *makeShared() override final;
-     Type *makeSharedConst() override final;
-     Type *makeWild() override final;
-     Type *makeWildConst() override final;
-     Type *makeSharedWild() override final;
-     Type *makeSharedWildConst() override final;
-     Type *makeMutable() override final;
-     unsigned char deduceWild(Type *t, bool isRef) override final;
-     void transitive();
      void accept(Visitor *v) override { v->visit(this); }
  };
  
--- 302,307 ----
*************** public:
*** 346,359 ****
  
      const char *kind() override;
      TypeBasic *syntaxCopy() override;
-     unsigned alignsize() override;
-     bool isIntegral() override;
-     bool isFloating() override;
-     bool isReal() override;
-     bool isImaginary() override;
-     bool isComplex() override;
-     bool isScalar() override;
-     bool isUnsigned() override;
  
      // For eliminating dynamic_cast
      TypeBasic *isTypeBasic() override;
--- 313,318 ----
*************** public:
*** 368,379 ****
      static TypeVector *create(Type *basetype);
      const char *kind() override;
      TypeVector *syntaxCopy() override;
-     unsigned alignsize() override;
-     bool isIntegral() override;
-     bool isFloating() override;
-     bool isScalar() override;
-     bool isUnsigned() override;
-     bool isBoolean() override;
      TypeBasic *elementType();
  
      void accept(Visitor *v) override { v->visit(this); }
--- 327,332 ----
*************** public:
*** 394,408 ****
      const char *kind() override;
      TypeSArray *syntaxCopy() override;
      bool isIncomplete();
-     unsigned alignsize() override;
-     bool isString() override;
-     structalign_t alignment() override;
-     bool hasUnsafeBitpatterns() override;
-     bool hasVoidInitPointers() override;
-     bool hasInvariant() override;
-     bool needsDestruction() override;
-     bool needsCopyOrPostblit() override;
-     bool needsNested() override;
  
      void accept(Visitor *v) override { v->visit(this); }
  };
--- 347,352 ----
*************** class TypeDArray final : public TypeArra
*** 413,421 ****
  public:
      const char *kind() override;
      TypeDArray *syntaxCopy() override;
-     unsigned alignsize() override;
-     bool isString() override;
-     bool isBoolean() override;
  
      void accept(Visitor *v) override { v->visit(this); }
  };
--- 357,362 ----
*************** public:
*** 429,435 ****
      static TypeAArray *create(Type *t, Type *index);
      const char *kind() override;
      TypeAArray *syntaxCopy() override;
-     bool isBoolean() override;
  
      void accept(Visitor *v) override { v->visit(this); }
  };
--- 370,375 ----
*************** public:
*** 440,446 ****
      static TypePointer *create(Type *t);
      const char *kind() override;
      TypePointer *syntaxCopy() override;
-     bool isScalar() override;
  
      void accept(Visitor *v) override { v->visit(this); }
  };
--- 380,385 ----
*************** public:
*** 494,500 ****
      static Parameter *create(Loc loc, StorageClass storageClass, Type *type, Identifier *ident,
                               Expression *defaultArg, UserAttributeDeclaration *userAttribDecl);
      Parameter *syntaxCopy();
-     Type *isLazyArray();
      bool isLazy() const;
      bool isReference() const;
      // kludge for template.isType()
--- 433,438 ----
*************** public:
*** 579,586 ****
      static TypeDelegate *create(TypeFunction *t);
      const char *kind() override;
      TypeDelegate *syntaxCopy() override;
-     unsigned alignsize() override;
-     bool isBoolean() override;
  
      void accept(Visitor *v) override { v->visit(this); }
  };
--- 517,522 ----
*************** public:
*** 684,700 ****
  
      static TypeStruct *create(StructDeclaration *sym);
      const char *kind() override;
-     unsigned alignsize() override;
      TypeStruct *syntaxCopy() override;
-     structalign_t alignment() override;
-     bool isBoolean() override;
-     bool needsDestruction() override;
-     bool needsCopyOrPostblit() override;
-     bool needsNested() override;
-     bool hasVoidInitPointers() override;
-     bool hasUnsafeBitpatterns() override;
-     bool hasInvariant() override;
-     unsigned char deduceWild(Type *t, bool isRef) override;
  
      void accept(Visitor *v) override { v->visit(this); }
  };
--- 620,626 ----
*************** public:
*** 706,729 ****
  
      const char *kind() override;
      TypeEnum *syntaxCopy() override;
-     unsigned alignsize() override;
-     Type *memType(Loc loc);
-     bool isIntegral() override;
-     bool isFloating() override;
-     bool isReal() override;
-     bool isImaginary() override;
-     bool isComplex() override;
-     bool isScalar() override;
-     bool isUnsigned() override;
-     bool isBoolean() override;
-     bool isString() override;
-     bool needsDestruction() override;
-     bool needsCopyOrPostblit() override;
-     bool needsNested() override;
-     bool hasVoidInitPointers() override;
-     bool hasUnsafeBitpatterns() override;
-     bool hasInvariant() override;
-     Type *nextOf() override;
  
      void accept(Visitor *v) override { v->visit(this); }
  };
--- 632,637 ----
*************** public:
*** 738,746 ****
      const char *kind() override;
      TypeClass *syntaxCopy() override;
      ClassDeclaration *isClassHandle() override;
-     unsigned char deduceWild(Type *t, bool isRef) override;
      bool isScopeClass() override;
-     bool isBoolean() override;
  
      void accept(Visitor *v) override { v->visit(this); }
  };
--- 646,652 ----
*************** public:
*** 759,765 ****
      static TypeTuple *create(Type *t1, Type *t2);
      const char *kind() override;
      TypeTuple *syntaxCopy() override;
-     bool equals(const RootObject * const o) const override;
      void accept(Visitor *v) override { v->visit(this); }
  };
  
--- 665,670 ----
*************** public:
*** 780,786 ****
      const char *kind() override;
  
      TypeNull *syntaxCopy() override;
-     bool isBoolean() override;
  
      void accept(Visitor *v) override { v->visit(this); }
  };
--- 685,690 ----
*************** class TypeNoreturn final : public Type
*** 790,797 ****
  public:
      const char *kind() override;
      TypeNoreturn *syntaxCopy() override;
-     bool isBoolean() override;
-     unsigned alignsize() override;
  
      void accept(Visitor *v) override { v->visit(this); }
  };
--- 694,699 ----
*************** namespace dmd
*** 844,847 ****
--- 746,780 ----
      uinteger_t size(Type *type, Loc loc);
      MATCH implicitConvTo(Type* from, Type* to);
      MATCH constConv(Type* from, Type* to);
+     bool hasUnsafeBitpatterns(Type* type);
+     bool hasInvariant(Type* type);
+     bool hasVoidInitPointers(Type* type);
+     void transitive(TypeNext* type);
+     structalign_t alignment(Type* type);
+     Type* memType(TypeEnum* type);
+     unsigned alignsize(Type* type);
+     Type *makeConst(Type* type);
+     Type* makeMutable(Type* type);
+     Type* makeImmutable(Type* type);
+     Type* makeShared(Type* type);
+     Type* makeSharedConst(Type* type);
+     Type *makeWild(Type* type);
+     Type *makeWildConst(Type* type);
+     Type *makeSharedWild(Type* type);
+     Type *makeSharedWildConst(Type* type);
+     Type *isLazyArray(Parameter* param);
+     unsigned char deduceWild(Type* type, Type* t, bool isRef);
+     bool isIntegral(Type* type);
+     bool isFloating(Type* type);
+     bool isScalar(Type* type);
+     bool isReal(Type* type);
+     bool isImaginary(Type* type);
+     bool isComplex(Type* type);
+     bool isString(Type* type);
+     bool isBoolean(Type* type);
+     bool isUnsigned(Type* type);
+     bool needsNested(Type* type);
+     bool needsDestruction(Type* type);
+     bool needsCopyOrPostblit(Type* type);
+     bool hasDeprecatedAliasThis(Type* type);
  }
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/nogc.d gcc-16-20260208/gcc/d/dmd/nogc.d
*** gcc-16-20260201/gcc/d/dmd/nogc.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/nogc.d	Sun Feb  8 22:32:07 2026
*************** import dmd.escape;
*** 29,34 ****
--- 29,35 ----
  import dmd.expression;
  import dmd.expressionsem;
  import dmd.func;
+ import dmd.funcsem : isRootTraitsCompilesScope;
  import dmd.globals;
  import dmd.id;
  import dmd.identifier;
*************** import dmd.rootobject : RootObject, DYNC
*** 39,45 ****
  import dmd.semantic2;
  import dmd.semantic3;
  import dmd.tokens;
! import dmd.typesem : unqualify;
  import dmd.visitor;
  import dmd.visitor.postorder;
  
--- 40,46 ----
  import dmd.semantic2;
  import dmd.semantic3;
  import dmd.tokens;
! import dmd.typesem : unqualify, toBasetype;
  import dmd.visitor;
  import dmd.visitor.postorder;
  
*************** public:
*** 101,107 ****
              err = true;
              return true;
          }
!         if (f.setGC(e.loc, msg))
          {
              error(e.loc, "%s causes a GC allocation in `@nogc` %s `%s`", msg, f.kind(), f.toChars());
              err = true;
--- 102,108 ----
              err = true;
              return true;
          }
!         if (sc.setGC(f, e.loc, msg))
          {
              error(e.loc, "%s causes a GC allocation in `@nogc` %s `%s`", msg, f.kind(), f.toChars());
              err = true;
*************** public:
*** 176,182 ****
      {
          if (e.placement)
              return;     // placement new doesn't use the GC
!         if (e.member && !e.member.isNogc() && f.setGC(e.loc, null))
          {
              // @nogc-ness is already checked in NewExp::semantic
              return;
--- 177,183 ----
      {
          if (e.placement)
              return;     // placement new doesn't use the GC
!         if (e.member && e.member !is f && !e.member.isNogc() && sc.setGC(f, e.loc, null))
          {
              // @nogc-ness is already checked in NewExp::semantic
              return;
*************** private FuncDeclaration stripHookTraceIm
*** 313,318 ****
--- 314,320 ----
   * so mark it as not nogc (not no-how).
   *
   * Params:
+  *     sc = scope that the GC action is in
   *     fd = function
   *     loc = location of GC action
   *     fmt = format string for error message. Must include "%s `%s`" for the function kind and name.
*************** private FuncDeclaration stripHookTraceIm
*** 321,327 ****
   * Returns:
   *      true if function is marked as @nogc, meaning a user error occurred
   */
! extern (D) bool setGC(FuncDeclaration fd, Loc loc, const(char)* fmt, RootObject[] args...)
  {
      //printf("setGC() %s\n", toChars());
      if (fd.nogcInprocess && fd.semanticRun < PASS.semantic3 && fd._scope)
--- 323,329 ----
   * Returns:
   *      true if function is marked as @nogc, meaning a user error occurred
   */
! extern (D) bool setGC(Scope* sc, FuncDeclaration fd, Loc loc, const(char)* fmt, RootObject[] args...)
  {
      //printf("setGC() %s\n", toChars());
      if (fd.nogcInprocess && fd.semanticRun < PASS.semantic3 && fd._scope)
*************** extern (D) bool setGC(FuncDeclaration fd
*** 330,335 ****
--- 332,350 ----
          fd.semantic3(fd._scope);
      }
  
+     if (sc && isRootTraitsCompilesScope(sc)) // __traits(compiles, x)
+     {
+         if (sc.func.isNogcBypassingInference())
+         {
+             // Message wil be gagged, but still call error() to update global.errors and for
+             // -verrors=spec
+             string action = AttributeViolation(loc, fmt, args).action;
+             .error(loc, "%.*s is not allowed in a `@nogc` function", action.fTuple.expand);
+             return true;
+         }
+         return false;
+     }
+ 
      if (fd.nogcInprocess)
      {
          fd.nogcInprocess = false;
*************** extern (D) bool setGC(FuncDeclaration fd
*** 348,354 ****
  
          fd.type.toTypeFunction().isNogc = false;
          if (fd.fes)
!             fd.fes.func.setGC(Loc.init, null, null);
      }
      else if (fd.isNogc())
          return true;
--- 363,369 ----
  
          fd.type.toTypeFunction().isNogc = false;
          if (fd.fes)
!             sc.setGC(fd.fes.func, Loc.init, null, null);
      }
      else if (fd.isNogc())
          return true;
*************** extern (D) bool setGC(FuncDeclaration fd
*** 358,378 ****
  /**************************************
   * The function calls non-`@nogc` function f, mark it as not nogc.
   * Params:
!  *     fd = function doin the call
   *     f = function being called
   * Returns:
   *      true if function is marked as @nogc, meaning a user error occurred
   */
! extern (D) bool setGCCall(FuncDeclaration fd, FuncDeclaration f)
  {
!     return fd.setGC(fd.loc, null, f);
  }
  
!  bool isNogc(FuncDeclaration fd)
  {
      //printf("isNogc() %s, inprocess: %d\n", toChars(), !!(flags & FUNCFLAG.nogcInprocess));
      if (fd.nogcInprocess)
!         fd.setGC(fd.loc, null);
      return fd.type.toTypeFunction().isNogc;
  }
  
--- 373,394 ----
  /**************************************
   * The function calls non-`@nogc` function f, mark it as not nogc.
   * Params:
!  *     sc = scope that the GC action is in
!  *     fd = function doing the call
   *     f = function being called
   * Returns:
   *      true if function is marked as @nogc, meaning a user error occurred
   */
! extern (D) bool setGCCall(Scope* sc, FuncDeclaration fd, FuncDeclaration f)
  {
!     return sc.setGC(fd, fd.loc, null, f);
  }
  
! bool isNogc(FuncDeclaration fd)
  {
      //printf("isNogc() %s, inprocess: %d\n", toChars(), !!(flags & FUNCFLAG.nogcInprocess));
      if (fd.nogcInprocess)
!         setGC(null, fd, fd.loc, null);
      return fd.type.toTypeFunction().isNogc;
  }
  
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/objc.d gcc-16-20260208/gcc/d/dmd/objc.d
*** gcc-16-20260201/gcc/d/dmd/objc.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/objc.d	Sun Feb  8 22:32:07 2026
*************** import dmd.aggregate;
*** 17,28 ****
  import dmd.arraytypes;
  import dmd.astenums;
  import dmd.attrib;
! import dmd.attribsem;
  import dmd.cond;
  import dmd.dclass;
  import dmd.declaration;
  import dmd.denum;
- import dmd.dmodule;
  import dmd.dscope;
  import dmd.dstruct;
  import dmd.dsymbol;
--- 17,27 ----
  import dmd.arraytypes;
  import dmd.astenums;
  import dmd.attrib;
! import dmd.attribsem : foreachUda;
  import dmd.cond;
  import dmd.dclass;
  import dmd.declaration;
  import dmd.denum;
  import dmd.dscope;
  import dmd.dstruct;
  import dmd.dsymbol;
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/opover.d gcc-16-20260208/gcc/d/dmd/opover.d
*** gcc-16-20260201/gcc/d/dmd/opover.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/opover.d	Sun Feb  8 22:32:07 2026
*************** Expression opOverloadEqual(EqualExp e, S
*** 721,727 ****
              /* The explicit cast is necessary for interfaces
               * https://issues.dlang.org/show_bug.cgi?id=4088
               */
!             Type to = ClassDeclaration.object.getType();
              if (cd1.isInterfaceDeclaration())
                  e1x = new CastExp(e.loc, e.e1, t1.isMutable() ? to : to.constOf());
              if (cd2.isInterfaceDeclaration())
--- 721,727 ----
              /* The explicit cast is necessary for interfaces
               * https://issues.dlang.org/show_bug.cgi?id=4088
               */
!             Type to = dmd.dsymbolsem.getType(ClassDeclaration.object);
              if (cd1.isInterfaceDeclaration())
                  e1x = new CastExp(e.loc, e.e1, t1.isMutable() ? to : to.constOf());
              if (cd2.isInterfaceDeclaration())
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/optimize.d gcc-16-20260208/gcc/d/dmd/optimize.d
*** gcc-16-20260201/gcc/d/dmd/optimize.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/optimize.d	Sun Feb  8 22:32:07 2026
*************** Expression optimize(Expression e, int re
*** 459,465 ****
          {
              if (!ve.var.isReference() && !ve.var.isImportedSymbol())
              {
!                 ret = new SymOffExp(e.loc, ve.var, 0, ve.hasOverloads);
                  ret.type = e.type;
                  return;
              }
--- 459,478 ----
          {
              if (!ve.var.isReference() && !ve.var.isImportedSymbol())
              {
!                 bool hasOverloads = ve.hasOverloads;
!                 if (auto v = ve.var.isVarDeclaration())
!                 {
!                     if (v.needThis())
!                     {
!                         auto t = v.isThis();
!                         assert(t);
!                         .error(e.loc, "taking the address of non-static variable `%s` requires an instance of `%s`", v.toChars(), t.toChars());
!                         ret = ErrorExp.get();
!                         return;
!                     }
!                     hasOverloads = false;
!                 }
!                 ret = new SymOffExp(e.loc, ve.var, 0, hasOverloads);
                  ret.type = e.type;
                  return;
              }
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/parse.d gcc-16-20260208/gcc/d/dmd/parse.d
*** gcc-16-20260201/gcc/d/dmd/parse.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/parse.d	Sun Feb  8 22:32:07 2026
*************** class Parser(AST, Lexer = dmd.lexer.Lexe
*** 1266,1275 ****
              }
              else
              {
!                 version (IN_GCC)
!                     error("attribute `scope` cannot be applied with `in`, use `-fpreview=in` instead");
!                 else
!                     error("attribute `scope` cannot be applied with `in`, use `-preview=in` instead");
              }
              return orig;
          }
--- 1266,1272 ----
              }
              else
              {
!                 error("attribute `scope` cannot be applied with `in`, use `-%spreview=in` instead", compileEnv.switchPrefix.ptr);
              }
              return orig;
          }
*************** class Parser(AST, Lexer = dmd.lexer.Lexe
*** 1291,1300 ****
              }
              else
              {
!                 version (IN_GCC)
!                     error("attribute `in` cannot be added after `scope`: remove `scope` and use `-fpreview=in`");
!                 else
!                     error("attribute `in` cannot be added after `scope`: remove `scope` and use `-preview=in`");
              }
              return orig;
          }
--- 1288,1294 ----
              }
              else
              {
!                 error("attribute `in` cannot be added after `scope`: remove `scope` and use `-%spreview=in`", compileEnv.switchPrefix.ptr);
              }
              return orig;
          }
*************** class Parser(AST, Lexer = dmd.lexer.Lexe
*** 2558,2564 ****
          AST.Expression constraint = tpl ? parseConstraint() : null;
  
          AST.Type tf = new AST.TypeFunction(parameterList, null, linkage, stc); // ReturnType -> auto
!         tf = tf.addSTC(stc);
  
          auto f = new AST.CtorDeclaration(loc, Loc.initial, stc, tf);
          AST.Dsymbol s = parseContracts(f, !!tpl);
--- 2552,2558 ----
          AST.Expression constraint = tpl ? parseConstraint() : null;
  
          AST.Type tf = new AST.TypeFunction(parameterList, null, linkage, stc); // ReturnType -> auto
!         tf = AST.addSTC(tf, stc);
  
          auto f = new AST.CtorDeclaration(loc, Loc.initial, stc, tf);
          AST.Dsymbol s = parseContracts(f, !!tpl);
*************** class Parser(AST, Lexer = dmd.lexer.Lexe
*** 2878,2883 ****
--- 2872,2878 ----
          auto parameters = new AST.Parameters();
          VarArg varargs = VarArg.none;
          STC varargsStc;
+         bool hasAutoRefParam = false;
  
          // Attributes allowed for ...
          enum VarArgsStc = STC.const_ | STC.immutable_ | STC.shared_ | STC.scope_ | STC.return_ | STC.returnScope | STC.returnRef;
*************** class Parser(AST, Lexer = dmd.lexer.Lexe
*** 3013,3018 ****
--- 3008,3014 ----
                  }
                  L2:
                      storageClass = appendStorageClass(storageClass, stc);
+                     hasAutoRefParam |= (storageClass & (STC.auto_ | STC.ref_)) == (STC.auto_ | STC.ref_);
                      continue;
  
                  default:
*************** class Parser(AST, Lexer = dmd.lexer.Lexe
*** 3044,3050 ****
                          }
                          else
                          {
!                             at = parseType(&ai, null, &loc);
                          }
                          ae = null;
                          if (token.value == TOK.assign) // = defaultArg
--- 3040,3048 ----
                          }
                          else
                          {
!                             if (tpl && !*tpl && hasAutoRefParam)
!                                 *tpl = new AST.TemplateParameters();
!                             at = parseType(&ai, &loc);
                          }
                          ae = null;
                          if (token.value == TOK.assign) // = defaultArg
*************** class Parser(AST, Lexer = dmd.lexer.Lexe
*** 3217,3223 ****
                      {
                      Ltype:
                          // Type identifier
!                         type = parseType(&ident, null);
                          if (type == AST.Type.terror)
                          {
                              type = null;
--- 3215,3221 ----
                      {
                      Ltype:
                          // Type identifier
!                         type = parseType(&ident);
                          if (type == AST.Type.terror)
                          {
                              type = null;
*************** class Parser(AST, Lexer = dmd.lexer.Lexe
*** 3583,3593 ****
  
      /* Parse a type and optional identifier
       * Params:
!      *  pident       = set to Identifier if there is one, null if not
!      *  ptpl         = if !null, then set to TemplateParameterList
!      *  pdeclLoc     = if !null, then set to location of the declarator
       */
!     AST.Type parseType(Identifier* pident = null, AST.TemplateParameters** ptpl = null, Loc* pdeclLoc = null)
      {
          /* Take care of the storage class prefixes that
           * serve as type attributes:
--- 3581,3598 ----
  
      /* Parse a type and optional identifier
       * Params:
!      *  pident   = set to Identifier if there is one, null if not
!      *  pdeclLoc = if !null, then set to location of the declarator
!      *  stc      = Storage Class
       */
!     AST.Type parseType(STC stc)
!     {
!         return parseType(null, null, stc);
!     }
! 
!     ///Ditto
!     AST.Type parseType(Identifier* pident = null, Loc* pdeclLoc = null,
!                        STC stc = STC.none)
      {
          /* Take care of the storage class prefixes that
           * serve as type attributes:
*************** class Parser(AST, Lexer = dmd.lexer.Lexe
*** 3600,3606 ****
           *        shared inout type
           *  shared inout const type
           */
-         STC stc = STC.none;
          while (1)
          {
              switch (token.value)
--- 3605,3610 ----
*************** class Parser(AST, Lexer = dmd.lexer.Lexe
*** 3647,3656 ****
          if (pdeclLoc)
              *pdeclLoc = token.loc;
          int alt = 0;
!         t = parseDeclarator(t, alt, pident, ptpl);
          checkCstyleTypeSyntax(typeLoc, t, alt, pident ? *pident : null);
  
!         t = t.addSTC(stc);
          return t;
      }
  
--- 3651,3660 ----
          if (pdeclLoc)
              *pdeclLoc = token.loc;
          int alt = 0;
!         t = parseDeclarator(t, alt, pident, null);
          checkCstyleTypeSyntax(typeLoc, t, alt, pident ? *pident : null);
  
!         t = AST.addSTC(t, stc);
          return t;
      }
  
*************** class Parser(AST, Lexer = dmd.lexer.Lexe
*** 3829,3835 ****
              // const(type)
              nextToken();
              check(TOK.leftParenthesis);
!             t = parseType().addSTC(STC.const_);
              check(TOK.rightParenthesis);
              break;
  
--- 3833,3839 ----
              // const(type)
              nextToken();
              check(TOK.leftParenthesis);
!             t = parseType(STC.const_);
              check(TOK.rightParenthesis);
              break;
  
*************** class Parser(AST, Lexer = dmd.lexer.Lexe
*** 3837,3843 ****
              // immutable(type)
              nextToken();
              check(TOK.leftParenthesis);
!             t = parseType().addSTC(STC.immutable_);
              check(TOK.rightParenthesis);
              break;
  
--- 3841,3847 ----
              // immutable(type)
              nextToken();
              check(TOK.leftParenthesis);
!             t = parseType(STC.immutable_);
              check(TOK.rightParenthesis);
              break;
  
*************** class Parser(AST, Lexer = dmd.lexer.Lexe
*** 3845,3851 ****
              // shared(type)
              nextToken();
              check(TOK.leftParenthesis);
!             t = parseType().addSTC(STC.shared_);
              check(TOK.rightParenthesis);
              break;
  
--- 3849,3855 ----
              // shared(type)
              nextToken();
              check(TOK.leftParenthesis);
!             t = parseType(STC.shared_);
              check(TOK.rightParenthesis);
              break;
  
*************** class Parser(AST, Lexer = dmd.lexer.Lexe
*** 3853,3859 ****
              // wild(type)
              nextToken();
              check(TOK.leftParenthesis);
!             t = parseType().addSTC(STC.wild);
              check(TOK.rightParenthesis);
              break;
  
--- 3857,3863 ----
              // wild(type)
              nextToken();
              check(TOK.leftParenthesis);
!             t = parseType(STC.wild);
              check(TOK.rightParenthesis);
              break;
  
*************** class Parser(AST, Lexer = dmd.lexer.Lexe
*** 4091,4097 ****
                          if (save == TOK.function_)
                              error("`const`/`immutable`/`shared`/`inout`/`return` attributes are only valid for non-static member functions");
                          else
!                             tf = cast(AST.TypeFunction)tf.addSTC(stc);
                      }
                      t = save == TOK.delegate_ ? new AST.TypeDelegate(tf) : new AST.TypePointer(tf); // pointer to function
                      continue;
--- 4095,4101 ----
                          if (save == TOK.function_)
                              error("`const`/`immutable`/`shared`/`inout`/`return` attributes are only valid for non-static member functions");
                          else
!                             tf = cast(AST.TypeFunction)AST.addSTC(tf, stc);
                      }
                      t = save == TOK.delegate_ ? new AST.TypeDelegate(tf) : new AST.TypePointer(tf); // pointer to function
                      continue;
*************** class Parser(AST, Lexer = dmd.lexer.Lexe
*** 4265,4271 ****
                      STC stc = parsePostfix(storageClass, pudas);
  
                      AST.Type tf = new AST.TypeFunction(parameterList, t, linkage, stc);
!                     tf = tf.addSTC(stc);
                      if (pdisable)
                          *pdisable = stc & STC.disable ? true : false;
  
--- 4269,4275 ----
                      STC stc = parsePostfix(storageClass, pudas);
  
                      AST.Type tf = new AST.TypeFunction(parameterList, t, linkage, stc);
!                     tf = AST.addSTC(tf, stc);
                      if (pdisable)
                          *pdisable = stc & STC.disable ? true : false;
  
*************** class Parser(AST, Lexer = dmd.lexer.Lexe
*** 5276,5282 ****
          }
  
          auto tf = new AST.TypeFunction(parameterList, tret, linkage, stc);
!         tf = cast(AST.TypeFunction)tf.addSTC(stc);
          auto fd = new AST.FuncLiteralDeclaration(loc, Loc.initial, tf, save, null, null, stc & STC.auto_);
  
          if (token.value == TOK.goesTo)
--- 5280,5286 ----
          }
  
          auto tf = new AST.TypeFunction(parameterList, tret, linkage, stc);
!         tf = cast(AST.TypeFunction)AST.addSTC(tf, stc);
          auto fd = new AST.FuncLiteralDeclaration(loc, Loc.initial, tf, save, null, null, stc & STC.auto_);
  
          if (token.value == TOK.goesTo)
*************** class Parser(AST, Lexer = dmd.lexer.Lexe
*** 5328,5337 ****
                  error("missing `do { ... }` after `in` or `out`");
              const returnloc = token.loc;
              nextToken();
!             if (f.isCtorDeclaration)
!                 f.fbody = new AST.ExpStatement(returnloc, parseExpression());
!             else
!                 f.fbody = new AST.ReturnStatement(returnloc, parseExpression());
              f.endloc = token.loc;
              check(TOK.semicolon);
              break;
--- 5332,5338 ----
                  error("missing `do { ... }` after `in` or `out`");
              const returnloc = token.loc;
              nextToken();
!             f.fbody = new AST.ReturnStatement(returnloc, parseExpression());
              f.endloc = token.loc;
              check(TOK.semicolon);
              break;
*************** class Parser(AST, Lexer = dmd.lexer.Lexe
*** 5511,5517 ****
      {
          if (token.value != TOK.else_ && token.value != TOK.catch_ && token.value != TOK.finally_ && lookingForElse.isValid)
          {
!             eSink.warning(elseloc, "else is dangling, add { } after condition at %s", lookingForElse.toChars());
          }
      }
  
--- 5512,5518 ----
      {
          if (token.value != TOK.else_ && token.value != TOK.catch_ && token.value != TOK.finally_ && lookingForElse.isValid)
          {
!             eSink.error(elseloc, "else is dangling, add { } after condition at %s", lookingForElse.toChars());
          }
      }
  
*************** class Parser(AST, Lexer = dmd.lexer.Lexe
*** 8730,8736 ****
              error("expression expected, not `%s`", token.toChars());
          Lerr:
              // Anything for e, as long as it's not NULL
!             e = AST.ErrorExp.get();
              nextToken();
              break;
          }
--- 8731,8737 ----
              error("expression expected, not `%s`", token.toChars());
          Lerr:
              // Anything for e, as long as it's not NULL
!             e = new AST.ErrorExp();
              nextToken();
              break;
          }
*************** class Parser(AST, Lexer = dmd.lexer.Lexe
*** 8848,8854 ****
                  else
                  {
                      AST.Type t = parseType(); // cast( type )
!                     t = t.addSTC(AST.ModToStc(m)); // cast( const type )
                      check(TOK.rightParenthesis);
                      e = parseUnaryExp();
                      e = new AST.CastExp(loc, e, t);
--- 8849,8855 ----
                  else
                  {
                      AST.Type t = parseType(); // cast( type )
!                     t = AST.addSTC(t, AST.ModToStc(m)); // cast( const type )
                      check(TOK.rightParenthesis);
                      e = parseUnaryExp();
                      e = new AST.CastExp(loc, e, t);
*************** class Parser(AST, Lexer = dmd.lexer.Lexe
*** 8863,8869 ****
                  STC stc = parseTypeCtor();
  
                  AST.Type t = parseBasicType();
!                 t = t.addSTC(stc);
  
                  if (stc == 0 && token.value == TOK.dot)
                  {
--- 8864,8870 ----
                  STC stc = parseTypeCtor();
  
                  AST.Type t = parseBasicType();
!                 t = AST.addSTC(t, stc);
  
                  if (stc == 0 && token.value == TOK.dot)
                  {
*************** class Parser(AST, Lexer = dmd.lexer.Lexe
*** 8872,8878 ****
                      {
                          error("identifier expected following `%s.`, not `%s`",
                              t.toChars(), token.toChars());
!                         return AST.ErrorExp.get();
                      }
                      e = new AST.DotIdExp(loc, new AST.TypeExp(loc, t), token.ident);
                      nextToken();
--- 8873,8879 ----
                      {
                          error("identifier expected following `%s.`, not `%s`",
                              t.toChars(), token.toChars());
!                         return new AST.ErrorExp();
                      }
                      e = new AST.DotIdExp(loc, new AST.TypeExp(loc, t), token.ident);
                      nextToken();
*************** class Parser(AST, Lexer = dmd.lexer.Lexe
*** 8986,8992 ****
                                      {
                                          error("identifier or new keyword expected following `(...)`.");
                                          nextToken();
!                                         return AST.ErrorExp.get();
                                      }
                                      e = new AST.TypeExp(loc, t);
                                      e.parens = true;
--- 8987,8993 ----
                                      {
                                          error("identifier or new keyword expected following `(...)`.");
                                          nextToken();
!                                         return new AST.ErrorExp();
                                      }
                                      e = new AST.TypeExp(loc, t);
                                      e.parens = true;
*************** class Parser(AST, Lexer = dmd.lexer.Lexe
*** 9635,9641 ****
          const stc = parseTypeCtor();
          auto t = parseBasicType(true);
          t = parseTypeSuffixes(t);
!         t = t.addSTC(stc);
          if (t.ty == Taarray)
          {
              AST.TypeAArray taa = cast(AST.TypeAArray)t;
--- 9636,9642 ----
          const stc = parseTypeCtor();
          auto t = parseBasicType(true);
          t = parseTypeSuffixes(t);
!         t = AST.addSTC(t, stc);
          if (t.ty == Taarray)
          {
              AST.TypeAArray taa = cast(AST.TypeAArray)t;
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/pragmasem.d gcc-16-20260208/gcc/d/dmd/pragmasem.d
*** gcc-16-20260201/gcc/d/dmd/pragmasem.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/pragmasem.d	Sun Feb  8 22:32:07 2026
***************
*** 14,19 ****
--- 14,20 ----
  module dmd.pragmasem;
  
  import core.stdc.stdio;
+ import core.stdc.string;
  
  import dmd.astenums;
  import dmd.arraytypes;
*************** import dmd.statement;
*** 39,111 ****
   */
  void pragmaDeclSemantic(PragmaDeclaration pd, Scope* sc)
  {
-     import dmd.aggregate;
      import dmd.common.outbuffer;
      import dmd.dmodule;
      import dmd.dsymbolsem;
      import dmd.identifier;
-     import dmd.mangle : isValidMangling;
      import dmd.root.rmem;
-     import dmd.root.utf;
      import dmd.target;
      import dmd.utils;
  
-     StringExp verifyMangleString(ref Expression e)
-     {
-         auto se = semanticString(sc, e, "mangled name");
-         if (!se)
-             return null;
-         e = se;
-         if (!se.len)
-         {
-             .error(pd.loc, "%s `%s` - zero-length string not allowed for mangled name", pd.kind, pd.toPrettyChars);
-             return null;
-         }
-         if (se.sz != 1)
-         {
-             .error(pd.loc, "%s `%s` - mangled name characters can only be of type `char`", pd.kind, pd.toPrettyChars);
-             return null;
-         }
-         version (all)
-         {
-             import dmd.common.charactertables;
- 
-             /* Note: D language specification should not have any assumption about backend
-              * implementation. Ideally pragma(mangle) can accept a string of any content.
-              *
-              * Therefore, this validation is compiler implementation specific.
-              */
-             auto slice = se.peekString();
-             for (size_t i = 0; i < se.len;)
-             {
-                 dchar c = slice[i];
-                 if (c < 0x80)
-                 {
-                     if (c.isValidMangling)
-                     {
-                         ++i;
-                         continue;
-                     }
-                     else
-                     {
-                         .error(pd.loc, "%s `%s` char 0x%02x not allowed in mangled name", pd.kind, pd.toPrettyChars, c);
-                         break;
-                     }
-                 }
-                 if (const msg = utf_decodeChar(slice, i, c))
-                 {
-                     .error(pd.loc, "%s `%s` %.*s", pd.kind, pd.toPrettyChars, cast(int)msg.length, msg.ptr);
-                     break;
-                 }
-                 if (!isAnyIdentifierCharacter(c))
-                 {
-                     .error(pd.loc, "%s `%s` char `0x%04x` not allowed in mangled name", pd.kind, pd.toPrettyChars, c);
-                     break;
-                 }
-             }
-         }
-         return se;
-     }
      void declarations()
      {
          if (!pd.decl)
--- 40,53 ----
*************** void pragmaDeclSemantic(PragmaDeclaratio
*** 126,183 ****
              }
  
              s.dsymbolSemantic(sc2);
-             if (pd.ident != Id.mangle)
-                 continue;
-             assert(pd.args);
-             if (auto ad = s.isAggregateDeclaration())
-             {
-                 Expression e = (*pd.args)[0];
-                 sc2 = sc2.startCTFE();
-                 e = e.expressionSemantic(sc);
-                 e = resolveProperties(sc2, e);
-                 sc2 = sc2.endCTFE();
-                 AggregateDeclaration agg;
-                 if (auto tc = e.type.isTypeClass())
-                     agg = tc.sym;
-                 else if (auto ts = e.type.isTypeStruct())
-                     agg = ts.sym;
-                 ad.pMangleOverride = new MangleOverride;
-                 void setString(ref Expression e)
-                 {
-                     if (auto se = verifyMangleString(e))
-                     {
-                         const name = (cast(const(char)[])se.peekData()).xarraydup;
-                         ad.pMangleOverride.id = Identifier.idPool(name);
-                         e = se;
-                     }
-                     else
-                         error(e.loc, "must be a string");
-                 }
-                 if (agg)
-                 {
-                     ad.pMangleOverride.agg = agg;
-                     if (pd.args.length == 2)
-                     {
-                         setString((*pd.args)[1]);
-                     }
-                     else
-                         ad.pMangleOverride.id = agg.ident;
-                 }
-                 else
-                     setString((*pd.args)[0]);
-             }
-             else if (auto td = s.isTemplateDeclaration())
-             {
-                 .error(pd.loc, "%s `%s` cannot apply to a template declaration", pd.kind, pd.toPrettyChars);
-                 errorSupplemental(pd.loc, "use `template Class(Args...){ pragma(mangle, \"other_name\") class Class {} }`");
-             }
-             else if (auto se = verifyMangleString((*pd.args)[0]))
-             {
-                 const name = (cast(const(char)[])se.peekData()).xarraydup;
-                 uint cnt = setMangleOverride(s, name);
-                 if (cnt > 1)
-                     .error(pd.loc, "%s `%s` can only apply to a single declaration", pd.kind, pd.toPrettyChars);
-             }
          }
      }
  
--- 68,73 ----
*************** void pragmaDeclSemantic(PragmaDeclaratio
*** 264,279 ****
      }
      else if (pd.ident == Id.mangle)
      {
!         if (!pd.args)
!             pd.args = new Expressions();
!         if (pd.args.length == 0 || pd.args.length > 2)
!         {
!             .error(pd.loc, pd.args.length == 0 ? "%s `%s` - string expected for mangled name"
!                                       : "%s `%s` expected 1 or 2 arguments", pd.kind, pd.toPrettyChars);
!             pd.args.setDim(1);
!             (*pd.args)[0] = ErrorExp.get(); // error recovery
!         }
!         return declarations();
      }
      else if (pd.ident == Id.crt_constructor || pd.ident == Id.crt_destructor)
      {
--- 154,164 ----
      }
      else if (pd.ident == Id.mangle)
      {
!         Scope* sc2 = pd.newScope(sc);
!         pragmaMangleSemantic(pd.loc, sc2, pd.args, pd.decl);
!         if (sc2 != sc)
!             sc2.pop();
!         return;
      }
      else if (pd.ident == Id.crt_constructor || pd.ident == Id.crt_destructor)
      {
*************** bool pragmaStmtSemantic(PragmaStatement
*** 440,459 ****
      {
          auto es = ps._body ? ps._body.isExpStatement() : null;
          auto de = es ? es.exp.isDeclarationExp() : null;
!         if (!de)
!         {
!             error(ps.loc, "`pragma(mangle)` must be attached to a declaration");
!             return false;
!         }
!         const se = ps.args && (*ps.args).length == 1 ? semanticString(sc, (*ps.args)[0], "pragma mangle argument") : null;
!         if (!se)
!         {
!             error(ps.loc, "`pragma(mangle)` takes a single argument that must be a string literal");
              return false;
-         }
-         const cnt = setMangleOverride(de.declaration, cast(const(char)[])se.peekData());
-         if (cnt != 1)
-             assert(0);
      }
      else if (!global.params.ignoreUnsupportedPragmas)
      {
--- 325,333 ----
      {
          auto es = ps._body ? ps._body.isExpStatement() : null;
          auto de = es ? es.exp.isDeclarationExp() : null;
!         Dsymbols decls = de ? Dsymbols(de.declaration) : Dsymbols();
!         if (!pragmaMangleSemantic(ps.loc, sc, ps.args, decls.length ? &decls : null))
              return false;
      }
      else if (!global.params.ignoreUnsupportedPragmas)
      {
*************** package PINLINE evalPragmaInline(Loc loc
*** 516,549 ****
      return PINLINE.never;
  }
  
- /**
-  * Apply pragma mangle to FuncDeclarations and VarDeclarations
-  * under `s`, poking through attribute declarations such as
-  * `extern(C)` but not through aggregates or function bodies.
-  *
-  * Params:
-  *    s = symbol to apply
-  *    sym = overriding symbol name
-  */
- private uint setMangleOverride(Dsymbol s, const(char)[] sym)
- {
-     if (s.isFuncDeclaration() || s.isVarDeclaration())
-     {
-         s.isDeclaration().mangleOverride = sym;
-         return 1;
-     }
- 
-     if (auto ad = s.isAttribDeclaration())
-     {
-         uint nestedCount = 0;
- 
-         ad.include(null).foreachDsymbol( (s) { nestedCount += setMangleOverride(s, sym); } );
- 
-         return nestedCount;
-     }
-     return 0;
- }
- 
  /***********************************************************
   * Evaluate and print a `pragma(msg, args)`
   *
--- 390,395 ----
*************** private bool pragmaStartAddressSemantic(
*** 635,637 ****
--- 481,710 ----
      }
      return true;
  }
+ 
+ /***********************************************************
+  * Evaluate `pragma(mangle)` and store the mangled string in `decls`
+  * This accepts any of the following variants.
+  *
+  *      pragma(mangle, StringExp) AggregateDeclaration
+  *      pragma(mangle, StringExp) VarDeclaration
+  *      pragma(mangle, StringExp) FuncDeclaration
+  *      pragma(mangle, TypeExp) AggregateDeclaration
+  *      pragma(mangle, TypeExp, StringExp) AggregateDeclaration
+  *      pragma(mangle, StringExp, TypeExp) AggregateDeclaration
+  *
+  * Params:
+  *    loc = location for error messages
+  *    sc = scope for argument interpretation
+  *    args = pragma arguments
+  *    decls = declarations to set mangled string to
+  * Returns:
+  *    `true` on success
+  */
+ private bool pragmaMangleSemantic(Loc loc, Scope* sc, Expressions* args, Dsymbols* decls)
+ {
+     import dmd.root.rmem;
+ 
+     StringExp verifyMangleString(ref Expression e)
+     {
+         import dmd.mangle : isValidMangling;
+         import dmd.root.utf : utf_decodeChar;
+         auto se = semanticString(sc, e, "pragma mangle argument");
+         if (!se)
+             return null;
+         e = se;
+         if (!se.len)
+         {
+             error(loc, "`pragma(mangle)` zero-length string not allowed for mangled name");
+             return null;
+         }
+         if (se.sz != 1)
+         {
+             error(loc, "`pragma(mangle)` mangled name characters can only be of type `char`");
+             return null;
+         }
+         auto slice = se.toStringz();
+         if (strlen(slice.ptr) != se.len)
+             .error(loc, "pragma `mangle` null character not allowed in mangled name");
+         mem.xfree(cast(void*)slice.ptr);
+         return se;
+     }
+ 
+     bool applyPragmaMangle(Dsymbols* decls, ref uint count, ref bool ignored)
+     {
+         if (decls is null)
+             return true;
+ 
+         foreach (s; (*decls)[])
+         {
+             import dmd.aggregate;
+             import dmd.common.outbuffer;
+             import dmd.dsymbolsem : dsymbolSemantic;
+             import dmd.hdrgen : arrayObjectsToBuffer;
+             import dmd.identifier : Identifier;
+ 
+             s.dsymbolSemantic(sc);
+ 
+             if (auto ad = s.isAggregateDeclaration())
+             {
+                 /* pragma(mangle) AggregateDeclaration;
+                    For aggregates there may be one or two AssignExpressions:
+                    - one of which must evaluate at compile time to a string literal
+                    - one which must evaluate to a symbol
+                    The spec does not specify which order these should be in, so we
+                    allow any of:
+                    pragma(mangle, "name") struct { ... }
+                    pragma(mangle, T)      struct { ... }
+                    pragma(mangle, "name", T) struct { ... }
+                    pragma(mangle, T, "name") struct { ... }
+                  */
+                 AggregateDeclaration symbol;
+                 StringExp literal;
+ 
+                 foreach (ref Expression e; (*args)[])
+                 {
+                     sc = sc.startCTFE();
+                     e = e.expressionSemantic(sc);
+                     e = resolveProperties(sc, e);
+                     sc = sc.endCTFE();
+ 
+                     bool expectedString()
+                     {
+                         error(e.loc, "`string` expected for pragma mangle argument, not `%s` of type `%s`",
+                               e.toChars(), e.type.toChars());
+                         return false;
+                     }
+ 
+                     bool expectedType()
+                     {
+                         error(e.loc, "`class` or `struct` type expected for pragma mangle argument, not `%s` of type `%s`",
+                               e.toChars(), e.type.toChars());
+                         return false;
+                     }
+ 
+                     // Validate arguments to pragma(mangle)
+                     if (e.isTypeExp())
+                     {
+                         /* Check for and reject:
+                            pragma(mangle, TypeExp, TypeExp)
+                            where the first TypeExp already resolved to a symbol. */
+                         if (symbol)
+                             return expectedString();
+ 
+                         /* Type must be a class or struct symbol. */
+                         if (auto tc = e.type.isTypeClass())
+                             symbol = tc.sym;
+                         else if (auto ts = e.type.isTypeStruct())
+                             symbol = ts.sym;
+                         else
+                             return expectedType();
+                     }
+                     else
+                     {
+                         /* Check for and reject:
+                            pragma(mangle, StringExp, AssignExpression)
+                            where AssignExpression did not resolve to a symbol. */
+                         if (literal)
+                             return expectedType();
+ 
+                         /* Must evaluate to a compile time string literal. */
+                         auto se = verifyMangleString(e);
+                         if (se is null)
+                             return false;
+                         literal = se;
+                     }
+                 }
+ 
+                 ad.pMangleOverride = new MangleOverride;
+ 
+                 if (symbol)
+                 {
+                     ad.pMangleOverride.agg = symbol;
+                     /* The identifier of the symbol is used when no string is supplied. */
+                     if (literal is null)
+                     {
+                         ad.pMangleOverride.id = symbol.ident;
+                         count += 1;
+                         continue;
+                     }
+                 }
+ 
+                 assert(literal);
+                 const name = literal.peekString().xarraydup;
+                 ad.pMangleOverride.id = Identifier.idPool(name);
+                 count += 1;
+             }
+             else if (auto td = s.isTemplateDeclaration())
+             {
+                 /* pragma(mangle) TemplateDeclaration
+                    Give an informative error message to avoid pragma(mangle)
+                    silently ignoring the template symbol. */
+                 error(loc, "`pragma(mangle)` cannot apply to a template declaration");
+                 OutBuffer buf;
+                 buf.arrayObjectsToBuffer(cast(Objects*)args);
+                 errorSupplemental(loc, "use `template %s(Args...) { pragma(mangle, %s) ... }`", td.ident.toChars(), buf.peekChars());
+                 return false;
+             }
+             else if (auto ad = s.isAttribDeclaration())
+             {
+                 /* pragma(mangle) AttribDeclaration
+                    Poke through the attribute to get to the underlying declaration. */
+                 if (!applyPragmaMangle(ad.include(null), count, ignored))
+                     return false;
+             }
+             else if (s.isFuncDeclaration() || s.isVarDeclaration())
+             {
+                 /* pragma(mangle) Declaration;
+                    For all other symbols, there must be one AssignExpression and it
+                    must evaluate at compile time to a string literal. */
+                 if (args.length != 1)
+                 {
+                     error(loc, "`pragma(mangle)` takes a single argument that must be a string literal");
+                     return false;
+                 }
+                 auto se = verifyMangleString((*args)[0]);
+                 if (!se)
+                     return false;
+ 
+                 const name = se.peekString().xarraydup;
+                 s.isDeclaration().mangleOverride = name;
+                 count += 1;
+             }
+             else
+             {
+                 /* pragma(mangle) only applies to function and variable
+                    symbols. Other symbols are ignored. */
+                 ignored = true;
+             }
+         }
+         return true;
+     }
+ 
+     if (args is null)
+     {
+         error(loc, "`pragma(mangle)` expects string literal argument for mangled name");
+         return false;
+     }
+     if (args.length > 2)
+     {
+         error(loc, "`pragma(mangle)` expects 1 or 2 arguments");
+         return false;
+     }
+ 
+     uint count = 0;
+     bool ignored = false;
+     if (!applyPragmaMangle(decls, count, ignored))
+         return false;
+ 
+     if (count == 0 && !ignored)
+     {
+         error(loc, "`pragma(mangle)` must be attached to a declaration");
+         return false;
+     }
+     if (count > 1)
+     {
+         error(loc, "`pragma(mangle)` can only apply to a single declaration");
+         return false;
+     }
+     return true;
+ }
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/printast.d gcc-16-20260208/gcc/d/dmd/printast.d
*** gcc-16-20260201/gcc/d/dmd/printast.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/printast.d	Sun Feb  8 22:32:07 2026
*************** module dmd.printast;
*** 14,19 ****
--- 14,20 ----
  import core.stdc.stdio;
  
  import dmd.expression;
+ import dmd.expressionsem : toInteger;
  import dmd.ctfeexpr;
  import dmd.tokens;
  import dmd.visitor;
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/root/array.d gcc-16-20260208/gcc/d/dmd/root/array.d
*** gcc-16-20260201/gcc/d/dmd/root/array.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/root/array.d	Sun Feb  8 22:32:07 2026
*************** import core.stdc.stdlib : _compare_fp_t;
*** 16,22 ****
  import core.stdc.string;
  
  import dmd.root.rmem;
! import dmd.root.string;
  
  // `qsort` is only `nothrow` since 2.081.0
  private extern(C) void qsort(scope void* base, size_t nmemb, size_t size, _compare_fp_t compar) nothrow @nogc;
--- 16,22 ----
  import core.stdc.string;
  
  import dmd.root.rmem;
! import dmd.root.string : toDString;
  
  // `qsort` is only `nothrow` since 2.081.0
  private extern(C) void qsort(scope void* base, size_t nmemb, size_t size, _compare_fp_t compar) nothrow @nogc;
*************** bool equal(Range1, Range2)(Range1 range1
*** 908,914 ****
  
      else
      {
!         static if (hasLength!Range1 && hasLength!Range2 && is(typeof(r1.length == r2.length)))
          {
              if (range1.length != range2.length)
                  return false;
--- 908,914 ----
  
      else
      {
!         static if (hasLength!Range1 && hasLength!Range2 && is(typeof(range1.length == range2.length)))
          {
              if (range1.length != range2.length)
                  return false;
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/root/bitarray.d gcc-16-20260208/gcc/d/dmd/root/bitarray.d
*** gcc-16-20260201/gcc/d/dmd/root/bitarray.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/root/bitarray.d	Sun Feb  8 22:32:07 2026
*************** import core.stdc.string;
*** 16,21 ****
--- 16,23 ----
  
  import dmd.root.rmem;
  
+ nothrow:
+ 
  struct BitArray
  {
  
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/root/file.d gcc-16-20260208/gcc/d/dmd/root/file.d
*** gcc-16-20260201/gcc/d/dmd/root/file.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/root/file.d	Sun Feb  8 22:32:07 2026
*************** module dmd.root.file;
*** 14,20 ****
  import core.stdc.errno;
  import core.stdc.stdio;
  import core.stdc.stdlib;
- import core.stdc.string : strerror;
  import core.sys.posix.fcntl;
  import core.sys.posix.unistd;
  import core.sys.windows.winbase;
--- 14,19 ----
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/root/filename.d gcc-16-20260208/gcc/d/dmd/root/filename.d
*** gcc-16-20260201/gcc/d/dmd/root/filename.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/root/filename.d	Sun Feb  8 22:32:07 2026
*************** version (CRuntime_Glibc)
*** 51,58 ****
      extern (C) char* canonicalize_file_name(const char*) nothrow;
  }
  
! alias Strings = Array!(const(char)*);
  
  
  // Check whether character is a directory separator
  bool isDirSeparator(char c) pure nothrow @nogc @safe
--- 51,59 ----
      extern (C) char* canonicalize_file_name(const char*) nothrow;
  }
  
! nothrow:
  
+ alias Strings = Array!(const(char)*);
  
  // Check whether character is a directory separator
  bool isDirSeparator(char c) pure nothrow @nogc @safe
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/root/hash.d gcc-16-20260208/gcc/d/dmd/root/hash.d
*** gcc-16-20260201/gcc/d/dmd/root/hash.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/root/hash.d	Sun Feb  8 22:32:07 2026
***************
*** 11,16 ****
--- 11,19 ----
  
  module dmd.root.hash;
  
+ nothrow:
+ @safe:
+ 
  // MurmurHash2 was written by Austin Appleby, and is placed in the public
  // domain. The author hereby disclaims copyright to this source code.
  // https://github.com/aappleby/smhasher/
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/root/region.d gcc-16-20260208/gcc/d/dmd/root/region.d
*** gcc-16-20260201/gcc/d/dmd/root/region.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/root/region.d	Sun Feb  8 22:32:07 2026
*************** import core.stdc.stdlib;
*** 18,23 ****
--- 18,25 ----
  import dmd.root.rmem;
  import dmd.root.array;
  
+ nothrow:
+ 
  /*****
   * Simple region storage allocator.
   */
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/root/rmem.d gcc-16-20260208/gcc/d/dmd/root/rmem.d
*** gcc-16-20260201/gcc/d/dmd/root/rmem.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/root/rmem.d	Sun Feb  8 22:32:07 2026
*************** import core.stdc.string;
*** 18,23 ****
--- 18,25 ----
  
  import core.memory : GC;
  
+ nothrow:
+ 
  extern (C++) struct Mem
  {
      static char* xstrdup(const(char)* s) nothrow
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/root/string.d gcc-16-20260208/gcc/d/dmd/root/string.d
*** gcc-16-20260201/gcc/d/dmd/root/string.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/root/string.d	Sun Feb  8 22:32:07 2026
*************** module dmd.root.string;
*** 13,18 ****
--- 13,20 ----
  import core.stdc.string;
  import dmd.root.rmem;
  
+ nothrow:
+ 
  /// Slices a `\0`-terminated C-string, excluding the terminator
  inout(char)[] toDString (inout(char)* s) pure nothrow @nogc
  {
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/root/stringtable.d gcc-16-20260208/gcc/d/dmd/root/stringtable.d
*** gcc-16-20260201/gcc/d/dmd/root/stringtable.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/root/stringtable.d	Sun Feb  8 22:32:07 2026
*************** module dmd.root.stringtable;
*** 14,19 ****
--- 14,21 ----
  import core.stdc.string;
  import dmd.root.rmem, dmd.root.hash;
  
+ nothrow:
+ 
  private enum POOL_BITS = 12;
  private enum POOL_SIZE = (1U << POOL_BITS);
  
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/rootobject.d gcc-16-20260208/gcc/d/dmd/rootobject.d
*** gcc-16-20260201/gcc/d/dmd/rootobject.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/rootobject.d	Sun Feb  8 22:32:07 2026
*************** extern (C++) class RootObject
*** 38,48 ****
      {
      }
  
-     bool equals(const RootObject o) const
-     {
-         return o is this;
-     }
- 
      const(char)* toChars() const
      {
          assert(0);
--- 38,43 ----
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/rootobject.h gcc-16-20260208/gcc/d/dmd/rootobject.h
*** gcc-16-20260201/gcc/d/dmd/rootobject.h	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/rootobject.h	Sun Feb  8 22:32:07 2026
*************** class RootObject
*** 39,46 ****
  public:
      RootObject() { }
  
-     virtual bool equals(const RootObject * const o) const;
- 
      /**
       * Pretty-print an Object. Useful for debugging the old-fashioned way.
       */
--- 39,44 ----
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/safe.d gcc-16-20260208/gcc/d/dmd/safe.d
*** gcc-16-20260201/gcc/d/dmd/safe.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/safe.d	Sun Feb  8 22:32:07 2026
*************** import dmd.mtype;
*** 36,43 ****
  import dmd.rootobject;
  import dmd.root.string : fTuple;
  import dmd.target;
  import dmd.tokens;
! import dmd.typesem : hasPointers, arrayOf, size;
  
  /*************************************************************
   * Check for unsafe access in @safe code:
--- 36,44 ----
  import dmd.rootobject;
  import dmd.root.string : fTuple;
  import dmd.target;
+ import dmd.targetcompiler;
  import dmd.tokens;
! import dmd.typesem;
  
  /*************************************************************
   * Check for unsafe access in @safe code:
*************** bool isSafeCast(Expression e, Type tfrom
*** 174,183 ****
      // Implicit conversions are always safe
      if (tfrom.implicitConvTo(tto))
          return true;
- 
      if (!tto.hasPointers())
          return true;
! 
      auto tfromb = tfrom.toBasetype();
      auto ttob = tto.toBasetype();
  
--- 175,191 ----
      // Implicit conversions are always safe
      if (tfrom.implicitConvTo(tto))
          return true;
      if (!tto.hasPointers())
+     {
+         // casting to bool is safe as it's a special op
+         // casting to struct with non-pointer @system field is not @safe
+         if (tto.ty != Tbool && tto.hasUnsafeBitpatterns())
+         {
+             msg = "Target element type has unsafe bit patterns";
+             return false;
+         }
          return true;
!     }
      auto tfromb = tfrom.toBasetype();
      auto ttob = tto.toBasetype();
  
*************** bool isTrusted(FuncDeclaration fd)
*** 354,360 ****
   * Call when `fd` was just inferred to be @system OR
   * `fd` was @safe and an tried something unsafe.
   * Params:
!  *   fd    = function we're gonna rat on
   *   gag   = suppress error message (used in escape.d)
   *   loc   = location of error
   *   format = printf-style format string
--- 362,368 ----
   * Call when `fd` was just inferred to be @system OR
   * `fd` was @safe and an tried something unsafe.
   * Params:
!  *   fd    = function we are gonna rat on
   *   gag   = suppress error message (used in escape.d)
   *   loc   = location of error
   *   format = printf-style format string
*************** bool isTrusted(FuncDeclaration fd)
*** 363,373 ****
  extern (D) void reportSafeError(FuncDeclaration fd, bool gag, Loc loc,
      const(char)* format, RootObject[] args...)
  {
      if (fd.type.toTypeFunction().trust == TRUST.system) // function was just inferred to be @system
      {
          if (format)
          {
!             fd.safetyViolation = new AttributeViolation(loc, format, args);
          }
          else if (args.length > 0)
          {
--- 371,391 ----
  extern (D) void reportSafeError(FuncDeclaration fd, bool gag, Loc loc,
      const(char)* format, RootObject[] args...)
  {
+     reportSafeError(fd, gag, loc, null, format, args);
+ }
+ 
+ /// Overload that also stores the variable whose scope status caused the violation
+ extern (D) void reportSafeError(FuncDeclaration fd, bool gag, Loc loc,
+     VarDeclaration scopeVar, const(char)* format, RootObject[] args...)
+ {
      if (fd.type.toTypeFunction().trust == TRUST.system) // function was just inferred to be @system
      {
          if (format)
          {
!             if (scopeVar)
!                 fd.safetyViolation = new AttributeViolation(loc, format, scopeVar, args);
!             else
!                 fd.safetyViolation = new AttributeViolation(loc, format, args);
          }
          else if (args.length > 0)
          {
*************** extern (D) void reportSafeError(FuncDecl
*** 387,396 ****
                  buf.writestring(" is not allowed in a `@safe` function");
              else
              {
!                 version (IN_GCC)
!                     buf.writestring(" is not allowed in a function with default safety with `-fpreview=safer`");
!                 else
!                     buf.writestring(" is not allowed in a function with default safety with `-preview=safer`");
              }
              .error(loc, "%s", buf.extractChars());
          }
--- 405,411 ----
                  buf.writestring(" is not allowed in a `@safe` function");
              else
              {
!                 buf.printf(" is not allowed in a function with default safety with `-%spreview=safer`", SwitchPrefix.ptr);
              }
              .error(loc, "%s", buf.extractChars());
          }
*************** extern (D) bool setUnsafeCall(FuncDeclar
*** 456,461 ****
--- 471,483 ----
   */
  bool setUnsafe(Scope* sc, bool gag, Loc loc, const(char)* format, RootObject[] args...)
  {
+     return sc.setUnsafe(gag, loc, null, format, args);
+ }
+ 
+ /// Overload that also stores the variable whose scope status caused the violation
+ bool setUnsafe(Scope* sc, bool gag, Loc loc, VarDeclaration scopeVar,
+     const(char)* format, RootObject[] args...)
+ {
      if (sc.intypeof)
          return false; // typeof(cast(int*)0) is safe
  
*************** bool setUnsafe(Scope* sc, bool gag, Loc
*** 499,505 ****
      {
          if (format || args.length > 0)
          {
!             reportSafeError(sc.func, gag, loc, format, args);
          }
          return sc.func.isSafe(); // it is only an error if in an @safe function
      }
--- 521,527 ----
      {
          if (format || args.length > 0)
          {
!             reportSafeError(sc.func, gag, loc, scopeVar, format, args);
          }
          return sc.func.isSafe(); // it is only an error if in an @safe function
      }
*************** bool setUnsafe(Scope* sc, bool gag, Loc
*** 527,532 ****
--- 549,561 ----
   */
  bool setUnsafePreview(Scope* sc, FeatureState fs, bool gag, Loc loc, const(char)* format, RootObject[] args...)
  {
+     return setUnsafePreview(sc, fs, gag, loc, null, format, args);
+ }
+ 
+ /// Overload for scope violations that also stores the variable whose scope status caused the issue
+ bool setUnsafePreview(Scope* sc, FeatureState fs, bool gag, Loc loc, VarDeclaration scopeVar,
+     const(char)* format, RootObject[] args...)
+ {
      //printf("setUnsafePreview() fs:%d %s\n", fs, fmt);
      assert(format);
      with (FeatureState) final switch (fs)
*************** bool setUnsafePreview(Scope* sc, Feature
*** 535,541 ****
          return false;
  
        case enabled:
!         return sc.setUnsafe(gag, loc, format, args);
  
        case default_:
          if (!sc.func)
--- 564,570 ----
          return false;
  
        case enabled:
!         return sc.setUnsafe(gag, loc, scopeVar, format, args);
  
        case default_:
          if (!sc.func)
*************** bool setUnsafePreview(Scope* sc, Feature
*** 551,557 ****
          else if (!sc.func.safetyViolation)
          {
              import dmd.func : AttributeViolation;
!             sc.func.safetyViolation = new AttributeViolation(loc, format, args);
          }
          return false;
      }
--- 580,589 ----
          else if (!sc.func.safetyViolation)
          {
              import dmd.func : AttributeViolation;
!             if (scopeVar)
!                 sc.func.safetyViolation = new AttributeViolation(loc, format, scopeVar, args);
!             else
!                 sc.func.safetyViolation = new AttributeViolation(loc, format, args);
          }
          return false;
      }
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/scope.h gcc-16-20260208/gcc/d/dmd/scope.h
*** gcc-16-20260201/gcc/d/dmd/scope.h	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/scope.h	Sun Feb  8 22:32:07 2026
*************** struct Scope final
*** 126,131 ****
--- 126,133 ----
      bool fullinst(bool v);
      bool ctfeBlock() const;
      bool ctfeBlock(bool v);
+     bool knownACompileTimeOnlyContext() const;
+     bool knownACompileTimeOnlyContext(bool v);
  
      UserAttributeDeclaration *userAttribDecl;   // user defined attributes
  
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/semantic2.d gcc-16-20260208/gcc/d/dmd/semantic2.d
*** gcc-16-20260201/gcc/d/dmd/semantic2.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/semantic2.d	Sun Feb  8 22:32:07 2026
*************** private extern(C++) final class Semantic
*** 329,335 ****
          // Note that modules get their own scope, from scratch.
          // This is so regardless of where in the syntax a module
          // gets imported, it is unaffected by context.
!         Scope* sc = Scope.createGlobal(mod, global.errorSink); // create root scope
          //printf("Module = %p\n", sc.scopesym);
          if (mod.members)
          {
--- 329,335 ----
          // Note that modules get their own scope, from scratch.
          // This is so regardless of where in the syntax a module
          // gets imported, it is unaffected by context.
!         Scope* sc = scopeCreateGlobal(mod, global.errorSink); // create root scope
          //printf("Module = %p\n", sc.scopesym);
          if (mod.members)
          {
*************** private void doGNUABITagSemantic(ref Exp
*** 799,809 ****
      // `const` (and nor is `StringExp`, by extension).
      static int predicate(const scope Expression* e1, const scope Expression* e2)
      {
!         return (cast(Expression*)e1).toStringExp().compare((cast(Expression*)e2).toStringExp());
      }
      ale.elements.sort!predicate;
  }
  
  /**
   * Try lower a variable's Associative Array initializer to a newaa struct
   * so it can be put in static data.
--- 799,933 ----
      // `const` (and nor is `StringExp`, by extension).
      static int predicate(const scope Expression* e1, const scope Expression* e2)
      {
!         Expression e11 = cast(Expression) *e1;
!         Expression e22 = cast(Expression) *e2;
!         return e11.toStringExp().compare(e22.toStringExp());
      }
      ale.elements.sort!predicate;
  }
  
+ /****************
+  * Find virtual function matching identifier and type.
+  * Used to build virtual function tables for interface implementations.
+  * Params:
+  *  _this = ClassDeclaration's vtbl to search
+  *  ident = function's identifier
+  *  tf = function's type
+  * Returns:
+  *  function symbol if found, null if not
+  * Errors:
+  *  prints error message if more than one match
+  */
+ FuncDeclaration findFunc(ClassDeclaration _this, Identifier ident, TypeFunction tf)
+ {
+     //printf("ClassDeclaration.findFunc(%s, %s) %s\n", ident.toChars(), tf.toChars(), toChars());
+     FuncDeclaration fdmatch = null;
+     FuncDeclaration fdambig = null;
+ 
+     void updateBestMatch(FuncDeclaration fd)
+     {
+         fdmatch = fd;
+         fdambig = null;
+         //printf("Lfd fdmatch = %s %s [%s]\n", fdmatch.toChars(), fdmatch.type.toChars(), fdmatch.loc.toChars());
+     }
+ 
+     void searchVtbl(ref Dsymbols vtbl)
+     {
+         bool seenInterfaceVirtual;
+         foreach (s; vtbl)
+         {
+             auto fd = s.isFuncDeclaration();
+             if (!fd)
+                 continue;
+ 
+             // the first entry might be a ClassInfo
+             //printf("\t[%d] = %s\n", i, fd.toChars());
+             if (ident != fd.ident || fd.type.covariant(tf) != Covariant.yes)
+             {
+                 //printf("\t\t%d\n", fd.type.covariant(tf));
+                 continue;
+             }
+ 
+             //printf("fd.parent.isClassDeclaration() = %p\n", fd.parent.isClassDeclaration());
+             if (!fdmatch)
+             {
+                 updateBestMatch(fd);
+                 continue;
+             }
+             if (fd == fdmatch)
+                 continue;
+ 
+             /* Functions overriding interface functions for extern(C++) with VC++
+              * are not in the normal vtbl, but in vtblFinal. If the implementation
+              * is again overridden in a child class, both would be found here.
+              * The function in the child class should override the function
+              * in the base class, which is done here, because searchVtbl is first
+              * called for the child class. Checking seenInterfaceVirtual makes
+              * sure, that the compared functions are not in the same vtbl.
+              */
+             if (fd.interfaceVirtual &&
+                 fd.interfaceVirtual is fdmatch.interfaceVirtual &&
+                 !seenInterfaceVirtual &&
+                 fdmatch.type.covariant(fd.type) == Covariant.yes)
+             {
+                 seenInterfaceVirtual = true;
+                 continue;
+             }
+ 
+             {
+             // Function type matching: exact > covariant
+             MATCH m1 = tf.equals(fd.type) ? MATCH.exact : MATCH.nomatch;
+             MATCH m2 = tf.equals(fdmatch.type) ? MATCH.exact : MATCH.nomatch;
+             if (m1 > m2)
+             {
+                 updateBestMatch(fd);
+                 continue;
+             }
+             else if (m1 < m2)
+                 continue;
+             }
+             {
+             MATCH m1 = (tf.mod == fd.type.mod) ? MATCH.exact : MATCH.nomatch;
+             MATCH m2 = (tf.mod == fdmatch.type.mod) ? MATCH.exact : MATCH.nomatch;
+             if (m1 > m2)
+             {
+                 updateBestMatch(fd);
+                 continue;
+             }
+             else if (m1 < m2)
+                 continue;
+             }
+             {
+             // The way of definition: non-mixin > mixin
+             MATCH m1 = fd.parent.isClassDeclaration() ? MATCH.exact : MATCH.nomatch;
+             MATCH m2 = fdmatch.parent.isClassDeclaration() ? MATCH.exact : MATCH.nomatch;
+             if (m1 > m2)
+             {
+                 updateBestMatch(fd);
+                 continue;
+             }
+             else if (m1 < m2)
+                 continue;
+             }
+ 
+             fdambig = fd;
+             //printf("Lambig fdambig = %s %s [%s]\n", fdambig.toChars(), fdambig.type.toChars(), fdambig.loc.toChars());
+         }
+     }
+ 
+     searchVtbl(_this.vtbl);
+     for (auto cd = _this; cd; cd = cd.baseClass)
+     {
+         searchVtbl(cd.vtblFinal);
+     }
+ 
+     if (fdambig)
+         _this.classError("%s `%s` ambiguous virtual function `%s`", fdambig.toChars());
+ 
+     return fdmatch;
+ }
+ 
+ 
  /**
   * Try lower a variable's Associative Array initializer to a newaa struct
   * so it can be put in static data.
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/semantic3.d gcc-16-20260208/gcc/d/dmd/semantic3.d
*** gcc-16-20260201/gcc/d/dmd/semantic3.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/semantic3.d	Sun Feb  8 22:32:07 2026
*************** import dmd.opover;
*** 60,65 ****
--- 60,66 ----
  import dmd.optimize;
  import dmd.parse;
  import dmd.root.filename;
+ import dmd.root.array;
  import dmd.common.outbuffer;
  import dmd.root.rmem;
  import dmd.rootobject;
*************** import dmd.tokens;
*** 71,76 ****
--- 72,78 ----
  import dmd.semantic2;
  import dmd.statement;
  import dmd.target;
+ import dmd.targetcompiler;
  import dmd.templateparamsem;
  import dmd.typesem;
  import dmd.visitor;
*************** private extern(C++) final class Semantic
*** 195,201 ****
          // Note that modules get their own scope, from scratch.
          // This is so regardless of where in the syntax a module
          // gets imported, it is unaffected by context.
!         Scope* sc = Scope.createGlobal(mod, global.errorSink); // create root scope
          //printf("Module = %p\n", sc.scopesym);
          if (mod.members)
          {
--- 197,203 ----
          // Note that modules get their own scope, from scratch.
          // This is so regardless of where in the syntax a module
          // gets imported, it is unaffected by context.
!         Scope* sc = scopeCreateGlobal(mod, global.errorSink); // create root scope
          //printf("Module = %p\n", sc.scopesym);
          if (mod.members)
          {
*************** private extern(C++) final class Semantic
*** 206,212 ****
                  //printf("Module %s: %s.semantic3()\n", toChars(), s.toChars());
                  s.semantic3(sc);
  
!                 mod.runDeferredSemantic2();
              }
          }
          if (mod.userAttribDecl)
--- 208,214 ----
                  //printf("Module %s: %s.semantic3()\n", toChars(), s.toChars());
                  s.semantic3(sc);
  
!                 runDeferredSemantic2();
              }
          }
          if (mod.userAttribDecl)
*************** private extern(C++) final class Semantic
*** 226,245 ****
          timeTraceBeginEvent(TimeTraceEventType.sema3);
          scope (exit) timeTraceEndEvent(TimeTraceEventType.sema3, funcdecl);
  
-         /* Determine if function should add `return 0;`
-          */
-         bool addReturn0()
-         {
-             //printf("addReturn0()\n");
-             auto f = funcdecl.type.isTypeFunction();
- 
-             // C11 5.1.2.2.3
-             if (sc.inCfile && funcdecl.isCMain() && f.next.ty == Tint32)
-                 return true;
- 
-             return f.next.ty == Tvoid && (funcdecl.isMain() || funcdecl.isCMain());
-         }
- 
          VarDeclaration _arguments = null;
  
          if (!funcdecl.parent)
--- 228,233 ----
*************** private extern(C++) final class Semantic
*** 423,434 ****
                      if (!global.params.useTypeInfo || !Type.dtypeinfo || !Type.typeinfotypelist)
                      {
                          if (!global.params.useTypeInfo)
!                         {
!                             version (IN_GCC)
!                                 .error(funcdecl.loc, "%s `%s` D-style variadic functions cannot be used with `-fno-rtti`", funcdecl.kind, funcdecl.toPrettyChars);
!                             else
!                                 .error(funcdecl.loc, "%s `%s` D-style variadic functions cannot be used with -betterC", funcdecl.kind, funcdecl.toPrettyChars);
!                         }
                          else if (!Type.typeinfotypelist)
                              .error(funcdecl.loc, "%s `%s` `object.TypeInfo_Tuple` could not be found, but is implicitly used in D-style variadic functions", funcdecl.kind, funcdecl.toPrettyChars);
                          else
--- 411,417 ----
                      if (!global.params.useTypeInfo || !Type.dtypeinfo || !Type.typeinfotypelist)
                      {
                          if (!global.params.useTypeInfo)
!                             .error(funcdecl.loc, "%s `%s` D-style variadic functions cannot be used with `-%s`", funcdecl.kind, funcdecl.toPrettyChars, SwitchVariadic.ptr);
                          else if (!Type.typeinfotypelist)
                              .error(funcdecl.loc, "%s `%s` `object.TypeInfo_Tuple` could not be found, but is implicitly used in D-style variadic functions", funcdecl.kind, funcdecl.toPrettyChars);
                          else
*************** private extern(C++) final class Semantic
*** 647,653 ****
                          Expression exp = (*funcdecl.returns)[i].exp;
                          if (exp.op == EXP.variable && (cast(VarExp)exp).var == funcdecl.vresult)
                          {
!                             if (addReturn0())
                                  exp.type = Type.tint32;
                              else
                                  exp.type = f.next;
--- 630,636 ----
                          Expression exp = (*funcdecl.returns)[i].exp;
                          if (exp.op == EXP.variable && (cast(VarExp)exp).var == funcdecl.vresult)
                          {
!                             if (fds.addReturn0())
                                  exp.type = Type.tint32;
                              else
                                  exp.type = f.next;
*************** private extern(C++) final class Semantic
*** 839,845 ****
  
                  if (funcdecl.returns)
                  {
!                     bool implicit0 = addReturn0();
                      Type tret = implicit0 ? Type.tint32 : f.next;
                      assert(tret.ty != Tvoid);
                      if (funcdecl.vresult || funcdecl.returnLabel)
--- 822,828 ----
  
                  if (funcdecl.returns)
                  {
!                     bool implicit0 = fds.addReturn0();
                      Type tret = implicit0 ? Type.tint32 : f.next;
                      assert(tret.ty != Tvoid);
                      if (funcdecl.vresult || funcdecl.returnLabel)
*************** private extern(C++) final class Semantic
*** 985,991 ****
                          if (funcdecl.vresult)
                          {
                              // Create: return vresult = exp;
!                             exp = new BlitExp(rs.loc, funcdecl.vresult, exp);
                              exp.type = funcdecl.vresult.type;
  
                              if (rs.caseDim)
--- 968,978 ----
                          if (funcdecl.vresult)
                          {
                              // Create: return vresult = exp;
!                             if (canElideCopy(exp, funcdecl.vresult.type, false))
!                                 exp = new ConstructExp(rs.loc, funcdecl.vresult, exp);
!                             else
!                                 exp = new BlitExp(rs.loc, funcdecl.vresult, exp);
! 
                              exp.type = funcdecl.vresult.type;
  
                              if (rs.caseDim)
*************** private extern(C++) final class Semantic
*** 1190,1196 ****
                          a.push(s);
                      }
                  }
!                 if (addReturn0())
                  {
                      // Add a return 0; statement
                      Statement s = new ReturnStatement(Loc.initial, IntegerExp.literal!0);
--- 1177,1183 ----
                          a.push(s);
                      }
                  }
!                 if (fds.addReturn0())
                  {
                      // Add a return 0; statement
                      Statement s = new ReturnStatement(Loc.initial, IntegerExp.literal!0);
*************** private extern(C++) final class Semantic
*** 1406,1412 ****
  
                  return false;
              }
!             if (isCppNonMappableType(f.next.toBasetype()))
              {
                  .error(funcdecl.loc, "%s `%s` cannot return type `%s` because its linkage is `extern(C++)`", funcdecl.kind, funcdecl.toErrMsg(), f.next.toChars());
                  if (f.next.isTypeDArray())
--- 1393,1399 ----
  
                  return false;
              }
!             if (isCppNonMappableType(f.next.toBasetype()) && !funcdecl.skipCodegen)
              {
                  .error(funcdecl.loc, "%s `%s` cannot return type `%s` because its linkage is `extern(C++)`", funcdecl.kind, funcdecl.toErrMsg(), f.next.toChars());
                  if (f.next.isTypeDArray())
*************** private extern(C++) final class Semantic
*** 1454,1459 ****
--- 1441,1450 ----
          if (ctor.semanticRun >= PASS.semantic3)
              return;
  
+         if (!ctor.fbody)
+             return visit(cast(FuncDeclaration)ctor);
+ 
+ 
          /* If any of the fields of the aggregate have a destructor, add
           *   scope (failure) { this.fieldDtor(); }
           * as the first statement of the constructor (unless the constructor
*************** private extern(C++) final class Semantic
*** 1464,1470 ****
           * https://issues.dlang.org/show_bug.cgi?id=14246
           */
          AggregateDeclaration ad = ctor.isMemberDecl();
!         if (!ctor.fbody || !ad || !ad.fieldDtor ||
              global.params.dtorFields == FeatureState.disabled || !global.params.useExceptions || ctor.type.toTypeFunction.isNothrow)
              return visit(cast(FuncDeclaration)ctor);
  
--- 1455,1461 ----
           * https://issues.dlang.org/show_bug.cgi?id=14246
           */
          AggregateDeclaration ad = ctor.isMemberDecl();
!         if (!ad || !ad.fieldDtor ||
              global.params.dtorFields == FeatureState.disabled || !global.params.useExceptions || ctor.type.toTypeFunction.isNothrow)
              return visit(cast(FuncDeclaration)ctor);
  
*************** private extern(C++) final class Semantic
*** 1537,1543 ****
          visit(cast(FuncDeclaration)ctor);
      }
  
- 
      override void visit(Nspace ns)
      {
          if (ns.semanticRun >= PASS.semantic3)
--- 1528,1533 ----
*************** private extern(C++) final class Semantic
*** 1599,1632 ****
  
          sc2.pop();
  
-         // Instantiate RTInfo!S to provide a pointer bitmap for the GC
-         // Don't do it in -betterC or on unused deprecated / error types
-         if (!ad.getRTInfo && global.params.useTypeInfo && Type.rtinfo &&
-             (!ad.isDeprecated() || global.params.useDeprecated != DiagnosticReporting.error) &&
-             (ad.type && ad.type.ty != Terror))
-         {
-             // Evaluate: RTinfo!type
-             auto tiargs = new Objects(ad.type);
-             auto ti = new TemplateInstance(ad.loc, Type.rtinfo, tiargs);
- 
-             Scope* sc3 = ti.tempdecl._scope.startCTFE();
-             sc3.tinst = sc.tinst;
-             sc3.minst = sc.minst;
-             if (ad.isDeprecated())
-                 sc3.stc |= STC.deprecated_;
- 
-             ti.dsymbolSemantic(sc3);
-             ti.semantic2(sc3);
-             ti.semantic3(sc3);
-             auto e = symbolToExp(ti.toAlias(), Loc.initial, sc3, false);
- 
-             sc3.endCTFE();
- 
-             e = e.ctfeInterpret();
-             ad.getRTInfo = e;
-         }
          if (sd)
              sd.semanticTypeInfoMembers();
          ad.semanticRun = PASS.semantic3done;
      }
  
--- 1589,1598 ----
  
          sc2.pop();
  
          if (sd)
              sd.semanticTypeInfoMembers();
+         else
+             ad.semanticRTInfo();
          ad.semanticRun = PASS.semantic3done;
      }
  
*************** private struct FuncDeclSem3
*** 1737,1742 ****
--- 1703,1723 ----
              }
          }
      }
+ 
+     /* Determine if function should add `return 0;`
+      */
+     bool addReturn0()
+     {
+         //printf("addReturn0()\n");
+         auto f = funcdecl.type.isTypeFunction();
+         if (!f) return false;
+ 
+         // C11 5.1.2.2.3
+         if (sc.inCfile && funcdecl.isCMain() && f.next.ty == Tint32)
+             return true;
+ 
+         return f.next.ty == Tvoid && (funcdecl.isMain() || funcdecl.isCMain());
+     }
  }
  
  /***************************************
*************** FuncDeclaration search_toString(StructDe
*** 1772,1796 ****
   */
  void semanticTypeInfoMembers(StructDeclaration sd)
  {
!     if (sd.xeq &&
!         sd.xeq._scope &&
!         sd.xeq.semanticRun < PASS.semantic3done)
      {
!         const errors = global.startGagging();
!         sd.xeq.semantic3(sd.xeq._scope);
!         if (global.endGagging(errors))
!             sd.xeq = sd.xerreq;
      }
  
!     if (sd.xcmp &&
!         sd.xcmp._scope &&
!         sd.xcmp.semanticRun < PASS.semantic3done)
!     {
!         const errors = global.startGagging();
!         sd.xcmp.semantic3(sd.xcmp._scope);
!         if (global.endGagging(errors))
!             sd.xcmp = sd.xerrcmp;
!     }
  
      FuncDeclaration ftostr = search_toString(sd);
      if (ftostr &&
--- 1753,1772 ----
   */
  void semanticTypeInfoMembers(StructDeclaration sd)
  {
!     void runSemantic(ref FuncDeclaration fd, ref FuncDeclaration errFd)
      {
!         if (fd && fd._scope && fd.semanticRun < PASS.semantic3done)
!         {
!             const errors = global.startGagging();
!             fd.semantic3(fd._scope);
!             if (global.endGagging(errors))
!                 fd = errFd;
!         }
      }
  
!     runSemantic(sd.xeq, sd.xerreq);
!     runSemantic(sd.xcmp, sd.xerrcmp);
! 
  
      FuncDeclaration ftostr = search_toString(sd);
      if (ftostr &&
*************** void semanticTypeInfoMembers(StructDecla
*** 1820,1825 ****
--- 1796,1833 ----
      {
          sd.dtor.semantic3(sd.dtor._scope);
      }
+     sd.semanticRTInfo();
+ }
+ 
+ void semanticRTInfo(AggregateDeclaration ad)
+ {
+     // Instantiate RTInfo!S to provide a pointer bitmap for the GC
+     // Don't do it in -betterC or on error types
+     if (ad.getRTInfo || !global.params.useTypeInfo || !Type.rtinfo)
+         return;
+     if (!ad.rtInfoScope || !ad.type || ad.type.ty == Terror)
+         return;
+ 
+     // Evaluate: RTinfo!type
+     auto tiargs = new Objects(ad.type);
+     auto ti = new TemplateInstance(ad.loc, Type.rtinfo, tiargs);
+ 
+     auto sc = ad.rtInfoScope;
+     Scope* sc3 = ti.tempdecl._scope.startCTFE();
+     sc3.tinst = sc.tinst;
+     sc3.minst = sc.minst;
+     if (ad.isDeprecated())
+         sc3.stc |= STC.deprecated_;
+ 
+     ti.dsymbolSemantic(sc3);
+     ti.semantic2(sc3);
+     ti.semantic3(sc3);
+     auto e = symbolToExp(ti.toAlias(), Loc.initial, sc3, false);
+ 
+     sc3.endCTFE();
+ 
+     e = e.ctfeInterpret();
+     ad.getRTInfo = e;
  }
  
  /**
*************** extern (D) bool checkClosure(FuncDeclara
*** 1845,1851 ****
      if (!fd.needsClosure())
          return false;
  
!     if (fd.setGC(fd.loc, "allocating a closure for `%s()`", fd))
      {
          .error(fd.loc, "%s `%s` is `@nogc` yet allocates closure for `%s()` with the GC", fd.kind, fd.toPrettyChars(), fd.toChars());
          if (global.gag)     // need not report supplemental errors
--- 1853,1859 ----
      if (!fd.needsClosure())
          return false;
  
!     if (setGC(null, fd, fd.loc, "allocating a closure for `%s()`", fd))
      {
          .error(fd.loc, "%s `%s` is `@nogc` yet allocates closure for `%s()` with the GC", fd.kind, fd.toPrettyChars(), fd.toChars());
          if (global.gag)     // need not report supplemental errors
*************** extern (D) bool checkClosure(FuncDeclara
*** 1876,1896 ****
                  auto fx = s.isFuncDeclaration();
                  if (!fx)
                      continue;
!                 if (fx.isThis() ||
!                     fx.tookAddressOf ||
!                     checkEscapingSiblings(fx, fd))
                  {
!                     foreach (f2; a)
                      {
!                         if (f2 == f)
!                             break LcheckAncestorsOfANestedRef;
                      }
-                     a.push(f);
-                     .errorSupplemental(f.loc, "%s `%s` closes over variable `%s`",
-                         f.kind, f.toErrMsg(), v.toChars());
-                     if (v.ident != Id.This)
-                         .errorSupplemental(v.loc, "`%s` declared here", v.toChars());
- 
                      break LcheckAncestorsOfANestedRef;
                  }
              }
--- 1884,1899 ----
                  auto fx = s.isFuncDeclaration();
                  if (!fx)
                      continue;
!                 if (fx.isThis() || fx.tookAddressOf || checkEscapingSiblings(fx, fd))
                  {
!                     if (!a.contains(f))
                      {
!                         a.push(f);
!                         .errorSupplemental(f.loc, "%s `%s` closes over variable `%s`",
!                             f.kind, f.toErrMsg(), v.toChars());
!                         if (v.ident != Id.This)
!                             .errorSupplemental(v.loc, "`%s` declared here", v.toChars());
                      }
                      break LcheckAncestorsOfANestedRef;
                  }
              }
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/statementsem.d gcc-16-20260208/gcc/d/dmd/statementsem.d
*** gcc-16-20260201/gcc/d/dmd/statementsem.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/statementsem.d	Sun Feb  8 22:32:07 2026
*************** import dmd.semantic2;
*** 62,67 ****
--- 62,68 ----
  import dmd.sideeffect;
  import dmd.statement;
  import dmd.target;
+ import dmd.targetcompiler;
  import dmd.tokens;
  import dmd.typesem;
  import dmd.visitor;
*************** version (DMDLIB)
*** 72,77 ****
--- 73,87 ----
  }
  
  /*****************************************
+  * Returns:
+  *     `true` iff ready to call `dmd.statementsem.makeTupleForeach`.
+  */
+ bool ready(StaticForeach _this)
+ {
+     return _this.aggrfe && _this.aggrfe.aggr && _this.aggrfe.aggr.type && _this.aggrfe.aggr.type.toBasetype().ty == Ttuple;
+ }
+ 
+ /*****************************************
   * CTFE requires FuncDeclaration::labtab for the interpretation.
   * So fixing the label name inside in/out contracts is necessary
   * for the uniqueness in labtab.
*************** Statement statementSemanticVisit(Stateme
*** 786,803 ****
  
          Dsymbol sapplyOld = sapply; // 'sapply' will be NULL if and after 'inferApplyArgTypes' errors
  
!         /* Check for inference errors and apply mutability checks inline */
          if (!inferApplyArgTypes(fs, sc, sapply))
          {
              bool foundMismatch = false;
              size_t foreachParamCount = 0;
              if (sapplyOld)
              {
                  if (FuncDeclaration fd = sapplyOld.isFuncDeclaration())
                  {
                      auto fparameters = fd.getParameterList();
  
!                     if (fparameters.length == 1)
                      {
                          // first param should be the callback function
                          Parameter fparam = fparameters[0];
--- 796,815 ----
  
          Dsymbol sapplyOld = sapply; // 'sapply' will be NULL if and after 'inferApplyArgTypes' errors
  
!         /* Check for inference errors and apply modifier checks inline */
          if (!inferApplyArgTypes(fs, sc, sapply))
          {
              bool foundMismatch = false;
              size_t foreachParamCount = 0;
+ 
              if (sapplyOld)
              {
                  if (FuncDeclaration fd = sapplyOld.isFuncDeclaration())
                  {
                      auto fparameters = fd.getParameterList();
  
!                     // ignore overloads, can't determine which non-matching is closest
!                     if (!fd.overnext && fparameters.length == 1)
                      {
                          // first param should be the callback function
                          Parameter fparam = fparameters[0];
*************** Statement statementSemanticVisit(Stateme
*** 809,824 ****
                              foreachParamCount = tf.parameterList.length;
                              foundMismatch = true;
  
!                             // Mutability check
!                             if (fs.aggr && fs.aggr.type && fd.type && fs.aggr.type.isConst() && !fd.type.isConst())
                              {
!                                 // First error: The call site
!                                 error(fs.loc, "mutable method `%s.%s` is not callable using a `const` object",
!                                     fd.parent ? fd.parent.toPrettyChars() : "unknown", fd.toChars());
! 
!                                 // Second error: Suggest how to fix
!                                 errorSupplemental(fd.loc, "Consider adding `const` or `inout` here");
! 
                                  return setError();
                              }
                          }
--- 821,834 ----
                              foreachParamCount = tf.parameterList.length;
                              foundMismatch = true;
  
!                             if (fd.isThis() &&
!                                 !MODmethodConv(fs.aggr.type.mod, fd.type.mod))
                              {
!                                 error(fs.aggr.loc, "%s method `%s` is not callable using a `%s` foreach aggregate",
!                                     !fd.type.mod ? "mutable" : fd.type.modToChars(),
!                                     fd.toPrettyChars(),
!                                     fs.aggr.type.toChars());
!                                 errorSupplemental(fd.loc, "Consider adding a method type qualifier here");
                                  return setError();
                              }
                          }
*************** Statement statementSemanticVisit(Stateme
*** 839,862 ****
              return setError();
          }
  
-         // If inference succeeds, proceed with post-checks
-         if (sapply && sapply.isFuncDeclaration())
-         {
-             FuncDeclaration fd = sapply.isFuncDeclaration();
- 
-             if (fs.aggr && fs.aggr.type && fd.type && fs.aggr.type.isConst() && !fd.type.isConst())
-             {
-                 // First error: The call site
-                 error(fs.loc, "mutable method `%s.%s` is not callable using a `const` object",
-                     fd.parent ? fd.parent.toPrettyChars() : "unknown", fd.toChars());
- 
-                 // Second error: Suggest how to fix
-                 errorSupplemental(fd.loc, "Consider adding `const` or `inout` here");
- 
-                 return setError();
-             }
-         }
- 
          Type tab = fs.aggr.type.toBasetype();
  
          if (tab.ty == Ttuple) // don't generate new scope for tuple loops
--- 849,854 ----
*************** Statement statementSemanticVisit(Stateme
*** 2553,2568 ****
  
          if (fd.isCtorDeclaration())
          {
!             if (rs.exp)
              {
!                 error(rs.loc, "cannot return expression from constructor");
!                 errors = true;
              }
  
!             // Constructors implicitly do:
!             //      return this;
!             rs.exp = new ThisExp(Loc.initial);
!             rs.exp.type = tret;
          }
          else if (rs.exp)
          {
--- 2545,2588 ----
  
          if (fd.isCtorDeclaration())
          {
!             // Constructors implicitly do:
!             //      return this;
!             auto ctorReturn = new ThisExp(Loc.initial);
!             ctorReturn.type = tret;
! 
!             bool isConstructorCall(Expression e)
              {
!                 auto ce = e.isCallExp();
!                 if (!ce)
!                     return false;
! 
!                 auto dve = ce.e1.isDotVarExp();
!                 if (!dve)
!                     return false;
! 
!                 return dve.var.isThis !is null;
              }
  
!             if (rs.exp)
!             {
!                 rs.exp = rs.exp.expressionSemantic(sc);
! 
!                 if (rs.exp.type.ty != Tvoid && !isConstructorCall(rs.exp))
!                 {
! 
!                     error(rs.loc, "can only return void expression, `this` call or `super` call from constructor");
!                     errors = true;
!                     rs.exp = ErrorExp.get();
!                 }
!                 else
!                 {
!                     rs.exp = new CommaExp(rs.loc, rs.exp, ctorReturn).expressionSemantic(sc);
!                 }
!             }
!             else
!             {
!                 rs.exp = ctorReturn;
!             }
          }
          else if (rs.exp)
          {
*************** Statement statementSemanticVisit(Stateme
*** 2586,2592 ****
                  rs.exp = resolveAliasThis(sc, rs.exp);
  
              rs.exp = resolveProperties(sc, rs.exp);
!             if (rs.exp.checkType())
                  rs.exp = ErrorExp.get();
              if (auto f = isFuncAddress(rs.exp))
              {
--- 2606,2612 ----
                  rs.exp = resolveAliasThis(sc, rs.exp);
  
              rs.exp = resolveProperties(sc, rs.exp);
!             if (!rs.exp.hasValidType())
                  rs.exp = ErrorExp.get();
              if (auto f = isFuncAddress(rs.exp))
              {
*************** Statement statementSemanticVisit(Stateme
*** 2596,2601 ****
--- 2616,2630 ----
              if (checkNonAssignmentArrayOp(rs.exp))
                  rs.exp = ErrorExp.get();
  
+             if (fd.ident == Id.apply && rs.exp.isConst() && rs.exp.toInteger() != 0)
+             {
+                 // @@@DEPRECATED_2.121
+                 // uncomment ErrorExp and call `error`
+                 deprecation(rs.exp.loc, "cannot return non-zero compile-time value from `opApply`");
+                 deprecationSupplemental(rs.exp.loc, "Any non-zero value must be the result of calling its delegate");
+                 //rs.exp = ErrorExp.get();
+             }
+ 
              // Extract side-effect part
              rs.exp = Expression.extractLast(rs.exp, e0);
              if (rs.exp.isCallExp())
*************** Statement statementSemanticVisit(Stateme
*** 3109,3120 ****
                  auto args = new Parameters(new Parameter(Loc.initial, STC.none, ClassDeclaration.object.type,
                                                           null, null, null));
  
!                 FuncDeclaration fdenter = FuncDeclaration.genCfunc(args, Type.tvoid, Id.monitorenter);
                  Expression e = new CallExp(ss.loc, fdenter, new VarExp(ss.loc, tmp));
                  e.type = Type.tvoid; // do not run semantic on e
  
                  cs.push(new ExpStatement(ss.loc, e));
!                 FuncDeclaration fdexit = FuncDeclaration.genCfunc(args, Type.tvoid, Id.monitorexit);
                  e = new CallExp(ss.loc, fdexit, new VarExp(ss.loc, tmp));
                  e.type = Type.tvoid; // do not run semantic on e
                  Statement s = new ExpStatement(ss.loc, e);
--- 3138,3149 ----
                  auto args = new Parameters(new Parameter(Loc.initial, STC.none, ClassDeclaration.object.type,
                                                           null, null, null));
  
!                 FuncDeclaration fdenter = genCfunc(args, Type.tvoid, Id.monitorenter);
                  Expression e = new CallExp(ss.loc, fdenter, new VarExp(ss.loc, tmp));
                  e.type = Type.tvoid; // do not run semantic on e
  
                  cs.push(new ExpStatement(ss.loc, e));
!                 FuncDeclaration fdexit = genCfunc(args, Type.tvoid, Id.monitorexit);
                  e = new CallExp(ss.loc, fdexit, new VarExp(ss.loc, tmp));
                  e.type = Type.tvoid; // do not run semantic on e
                  Statement s = new ExpStatement(ss.loc, e);
*************** Statement statementSemanticVisit(Stateme
*** 3149,3155 ****
  
              auto enterArgs = new Parameters(new Parameter(Loc.initial, STC.none, t.pointerTo(), null, null, null));
  
!             FuncDeclaration fdenter = FuncDeclaration.genCfunc(enterArgs, Type.tvoid, Id.criticalenter, STC.nothrow_);
              Expression e = new AddrExp(ss.loc, tmpExp);
              e = e.expressionSemantic(sc);
              e = new CallExp(ss.loc, fdenter, e);
--- 3178,3184 ----
  
              auto enterArgs = new Parameters(new Parameter(Loc.initial, STC.none, t.pointerTo(), null, null, null));
  
!             FuncDeclaration fdenter = genCfunc(enterArgs, Type.tvoid, Id.criticalenter, STC.nothrow_);
              Expression e = new AddrExp(ss.loc, tmpExp);
              e = e.expressionSemantic(sc);
              e = new CallExp(ss.loc, fdenter, e);
*************** Statement statementSemanticVisit(Stateme
*** 3158,3164 ****
  
              auto exitArgs = new Parameters(new Parameter(Loc.initial, STC.none, t, null, null, null));
  
!             FuncDeclaration fdexit = FuncDeclaration.genCfunc(exitArgs, Type.tvoid, Id.criticalexit, STC.nothrow_);
              e = new CallExp(ss.loc, fdexit, tmpExp);
              e.type = Type.tvoid; // do not run semantic on e
              Statement s = new ExpStatement(ss.loc, e);
--- 3187,3193 ----
  
              auto exitArgs = new Parameters(new Parameter(Loc.initial, STC.none, t, null, null, null));
  
!             FuncDeclaration fdexit = genCfunc(exitArgs, Type.tvoid, Id.criticalexit, STC.nothrow_);
              e = new CallExp(ss.loc, fdexit, tmpExp);
              e.type = Type.tvoid; // do not run semantic on e
              Statement s = new ExpStatement(ss.loc, e);
*************** Statement statementSemanticVisit(Stateme
*** 3300,3306 ****
  
          if (!global.params.useExceptions)
          {
!             error(tcs.loc, "cannot use try-catch statements with %s", global.params.betterC ? "-betterC".ptr : "-nothrow".ptr);
              return setError();
          }
  
--- 3329,3335 ----
  
          if (!global.params.useExceptions)
          {
!             error(tcs.loc, "cannot use try-catch statements with `%s`", global.params.betterC ? "-betterC".ptr : "-nothrow".ptr);
              return setError();
          }
  
*************** Statement statementSemanticVisit(Stateme
*** 3429,3439 ****
              blockexit &= ~BE.throw_;            // don't worry about paths that otherwise may throw
  
          // Don't care about paths that halt, either
!         if ((blockexit & ~BE.halt) == BE.fallthru)
          {
              result = new CompoundStatement(tfs.loc, tfs._body, tfs.finalbody);
              return;
          }
          tfs.bodyFallsThru = (blockexit & BE.fallthru) != 0;
          result = tfs;
      }
--- 3458,3471 ----
              blockexit &= ~BE.throw_;            // don't worry about paths that otherwise may throw
  
          // Don't care about paths that halt, either
!         // Only rewrite if it was requested.
!         // This has side effects where Error will not run destructors, unsafe.
!         if (global.params.rewriteNoExceptionToSeq && (blockexit & ~BE.halt) == BE.fallthru)
          {
              result = new CompoundStatement(tfs.loc, tfs._body, tfs.finalbody);
              return;
          }
+ 
          tfs.bodyFallsThru = (blockexit & BE.fallthru) != 0;
          result = tfs;
      }
*************** Statement statementSemanticVisit(Stateme
*** 3448,3457 ****
              // https://issues.dlang.org/show_bug.cgi?id=23159
              if (!global.params.useExceptions)
              {
!                 version (IN_GCC)
!                     error(oss.loc, "`%s` cannot be used with `-fno-exceptions`", Token.toChars(oss.tok));
!                 else
!                     error(oss.loc, "`%s` cannot be used with -betterC", Token.toChars(oss.tok));
                  return setError();
              }
  
--- 3480,3486 ----
              // https://issues.dlang.org/show_bug.cgi?id=23159
              if (!global.params.useExceptions)
              {
!                 error(oss.loc, "`%s` cannot be used with `-%s`", Token.toChars(oss.tok), SwitchScopeGuard);
                  return setError();
              }
  
*************** Statement statementSemanticVisit(Stateme
*** 3649,3655 ****
          assert(sc.func);
          if (!(cas.stc & STC.pure_) && sc.func.setImpure(cas.loc, "executing an `asm` statement without `pure` annotation"))
              error(cas.loc, "`asm` statement is assumed to be impure - mark it with `pure` if it is not");
!         if (!(cas.stc & STC.nogc) && sc.func.setGC(cas.loc, "executing an `asm` statement without `@nogc` annotation"))
              error(cas.loc, "`asm` statement is assumed to use the GC - mark it with `@nogc` if it does not");
          // @@@DEPRECATED_2.114@@@
          // change deprecation() to error(), add `else` and remove `| STC.safe`
--- 3678,3684 ----
          assert(sc.func);
          if (!(cas.stc & STC.pure_) && sc.func.setImpure(cas.loc, "executing an `asm` statement without `pure` annotation"))
              error(cas.loc, "`asm` statement is assumed to be impure - mark it with `pure` if it is not");
!         if (!(cas.stc & STC.nogc) && sc.setGC(sc.func, cas.loc, "executing an `asm` statement without `@nogc` annotation"))
              error(cas.loc, "`asm` statement is assumed to use the GC - mark it with `@nogc` if it does not");
          // @@@DEPRECATED_2.114@@@
          // change deprecation() to error(), add `else` and remove `| STC.safe`
*************** Statement statementSemanticVisit(Stateme
*** 3693,3699 ****
              // for the current scope.
              if (s.mod !is null)
              {
!                 Module.addDeferredSemantic2(s);     // https://issues.dlang.org/show_bug.cgi?id=14666
                  sc.insert(s);
  
                  foreach (aliasdecl; s.aliasdecls)
--- 3722,3728 ----
              // for the current scope.
              if (s.mod !is null)
              {
!                 addDeferredSemantic2(s);     // https://issues.dlang.org/show_bug.cgi?id=14666
                  sc.insert(s);
  
                  foreach (aliasdecl; s.aliasdecls)
*************** public bool throwSemantic(Loc loc, ref E
*** 3724,3733 ****
  {
      if (!global.params.useExceptions)
      {
!         version (IN_GCC)
!             loc.error("cannot use `throw` statements with `-fno-exceptions`");
!         else
!             loc.error("cannot use `throw` statements with %s", global.params.betterC ? "-betterC".ptr : "-nothrow".ptr);
          return false;
      }
  
--- 3753,3760 ----
  {
      if (!global.params.useExceptions)
      {
!         const(char)* s = SwitchExceptions ? SwitchExceptions : global.params.betterC ? "betterC".ptr : "nothrow".ptr;
!         loc.error("cannot use `throw` statements with `-%s`", s);
          return false;
      }
  
*************** private extern(D) Expression applyArray(
*** 3874,3880 ****
          dgparams.push(new Parameter(Loc.initial, STC.none, Type.tvoidptr, null, null, null));
      dgty = new TypeDelegate(new TypeFunction(ParameterList(dgparams), Type.tint32, LINK.d));
      params.push(new Parameter(Loc.initial, STC.none, dgty, null, null, null));
!     fdapply = FuncDeclaration.genCfunc(params, Type.tint32, fdname.ptr);
  
      if (tab.isTypeSArray())
          fs.aggr = fs.aggr.castTo(sc2, tn.arrayOf());
--- 3901,3907 ----
          dgparams.push(new Parameter(Loc.initial, STC.none, Type.tvoidptr, null, null, null));
      dgty = new TypeDelegate(new TypeFunction(ParameterList(dgparams), Type.tint32, LINK.d));
      params.push(new Parameter(Loc.initial, STC.none, dgty, null, null, null));
!     fdapply = genCfunc(params, Type.tint32, fdname.ptr);
  
      if (tab.isTypeSArray())
          fs.aggr = fs.aggr.castTo(sc2, tn.arrayOf());
*************** private Statements* flatten(Statement st
*** 4865,4871 ****
--- 4892,4901 ----
              {
                  Statement s = p.parseStatement(ParseStatementFlags.curlyScope);
                  if (!s || global.errors != errors)
+                 {
+                     errorSupplemental(s.loc, "while parsing string mixin statement");
                      return errorStatements();
+                 }
                  a.push(s);
              }
              return a;
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/staticassert.d gcc-16-20260208/gcc/d/dmd/staticassert.d
*** gcc-16-20260201/gcc/d/dmd/staticassert.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/staticassert.d	Sun Feb  8 22:32:07 2026
*************** import dmd.dsymbol;
*** 18,24 ****
  import dmd.expression;
  import dmd.location;
  import dmd.id;
- import dmd.identifier;
  import dmd.visitor;
  
  /***********************************************************
--- 18,23 ----
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/targetcompiler.d gcc-16-20260208/gcc/d/dmd/targetcompiler.d
*** gcc-16-20260201/gcc/d/dmd/targetcompiler.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/d/dmd/targetcompiler.d	Sun Feb  8 22:32:07 2026
***************
*** 0 ****
--- 1,211 ----
+ /**
+  * Encapsulates the vagaries of which of the three D compilers (gdc, ldc or dmd) is being built
+  *
+  * Copyright:   Copyright (C) 1999-2025 by The D Language Foundation, All Rights Reserved
+  * Authors:     $(LINK2 https://www.digitalmars.com, Walter Bright)
+  * License:     $(LINK2 https://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
+  * Source:      $(LINK2 https://github.com/dlang/dmd/blob/master/compiler/src/dmd/mars.d, _targetcompiler.d)
+  * Documentation:  https://dlang.org/phobos/dmd_targetcompiler.html
+  * Coverage:    https://codecov.io/gh/dlang/dmd/src/master/compiler/src/dmd/targetcompiler.d
+  */
+ 
+ module dmd.targetcompiler;
+ 
+ version (IN_GCC) {}        // compiler is being built with gdc
+ else version (IN_LLVM) {}  // compiler is being built with ldc
+ else version = MARS;       // default means compiler is built with Digital Mars compiler (DMD)
+ 
+ /***************************
+  */
+ 
+ version (IN_GCC)
+ {
+     enum TargetCompiler = "GNU D";    // compiler being built
+     enum SwitchPrefix = "f";          // prefix to switch
+     enum SwitchVariadic = "fno-rtti"; // disables D-style variadic functions
+     enum const(char)* SwitchExceptions = "fno-exceptions"; // switch that disables exceptions
+     enum const(char)* SwitchScopeGuard = "fno-exceptions"; // switch that disables exceptions
+ }
+ else version (IN_LLVM)
+ {
+     enum TargetCompiler = "LDC";
+     enum SwitchPrefix = "";
+     enum SwitchVariadic = "betterC";
+     enum const(char)* SwitchExceptions = null;
+     enum const(char)* SwitchScopeGuard = "betterC";
+ }
+ else version (MARS)
+ {
+     enum TargetCompiler = "Digital Mars D";
+     enum SwitchPrefix = "";
+     enum SwitchVariadic = "betterC";
+     enum const(char)* SwitchExceptions = null;
+     enum const(char)* SwitchScopeGuard = "betterC";
+ }
+ else
+     static assert(0, "unknown compiler being built");
+ 
+ 
+ /**********************************
+  * Extra Fields for VarDeclaration
+  */
+ version (IN_GCC)
+ {
+     mixin template VarDeclarationExtra() { }
+ }
+ else version (IN_LLVM)
+ {
+     mixin template VarDeclarationExtra() { }
+ }
+ else version (MARS)
+ {
+     mixin template VarDeclarationExtra()
+     {
+         bool inClosure;         /// is inserted into a GC allocated closure
+         bool inAlignSection;    /// is inserted into an aligned section on stack
+     }
+ }
+ else
+     static assert(0, "unknown compiler being built");
+ 
+ /**********************************
+  * Extra Fields for FuncDeclaration
+  */
+ version (IN_GCC)
+ {
+     mixin template FuncDeclarationExtra() { }
+ }
+ else version (IN_LLVM)
+ {
+     mixin template FuncDeclarationExtra() { }
+ }
+ else version (MARS)
+ {
+     mixin template FuncDeclarationExtra()
+     {
+         VarDeclarations* alignSectionVars;  /// local variables with alignment needs larger than stackAlign
+         import dmd.backend.cc : Symbol;
+         Symbol* salignSection;              /// pointer to aligned section, if any
+     }
+ }
+ else
+     static assert(0, "unknown compiler being built");
+ 
+ /**********************************
+  * Extra Fields for FuncDeclaration
+  */
+ version (IN_GCC)
+ {
+     mixin template alignSectionVarsExtra() { void doAlign() { } }
+ }
+ else version (IN_LLVM)
+ {
+     mixin template alignSectionVarsExtra() { void doAlign() { } }
+ }
+ else version (MARS)
+ {
+     /* If the alignment of a stack local is greater than the stack alignment,
+      * note it in the enclosing function's alignSectionVars
+      */
+     mixin template alignSectionVarsExtra()
+     {
+         void doAlign()
+         {
+             if (!dsym.alignment.isDefault() && sc.func &&
+                 dsym.alignment.get() > target.stackAlign() &&
+                 sc.func && !dsym.isDataseg() && !dsym.isParameter() && !dsym.isField())
+             {
+                 auto fd = sc.func;
+                 if (!fd.alignSectionVars)
+                     fd.alignSectionVars = new VarDeclarations();
+                 fd.alignSectionVars.push(dsym);
+             }
+         }
+     }
+ }
+ else
+     static assert(0, "unknown compiler being built");
+ 
+ 
+ /* Returns: true if v is in an align section
+  */
+ mixin template alignSectionVarsContains()
+ {
+     version (IN_GCC)
+     {
+         bool isAlignSectionVar(VarDeclaration v) { return false; }
+     }
+     else version (IN_LLVM)
+     {
+         bool isAlignSectionVar(VarDeclaration v) { return false; }
+     }
+     else version (MARS)
+     {
+         bool isAlignSectionVar(VarDeclaration v)
+         {
+             return fd.alignSectionVars && (*fd.alignSectionVars).contains(v);
+         }
+     }
+     else
+         static assert(0, "unknown compiler being built");
+ }
+ 
+ /* Returns: true if ansi color is to be used
+  */
+ 
+ mixin template UseAnsiColors()
+ {
+     bool useAnsiColors()
+     {
+         version (IN_GCC)
+         {
+             return false;
+         }
+         else version (IN_LLVM)
+         {
+             import dmd.console : detectTerminal;
+             return detectTerminal();
+         }
+         else version (MARS)
+         {
+             // -color=auto is the default value
+             import dmd.console : detectTerminal, detectColorPreference;
+             return detectTerminal() && detectColorPreference();
+         }
+         else
+             static assert(0, "unknown compiler being built");
+     }
+ }
+ 
+ /******************************************
+  * Let user know object.d cannot be found.
+  * Parameters:
+  *      loc = location of error
+  *      id = name of symbol that cannot be found
+  *      configFile = configuration file name
+  *      eSink = where to send the error messages
+  */
+ 
+ mixin template HostObjectNotFound()
+ {
+     void hostObjectNotFound(Loc loc, const(char)* id, const(char)[] configFile, ErrorSink eSink)
+     {
+         eSink.error(loc, "`%s` not found. object.d may be incorrectly installed or corrupt.", id);
+         version (IN_GCC)
+         {
+         }
+         else version (IN_LLVM)
+         {
+             eSink.errorSupplemental(loc, "ldc2 might not be correctly installed.");
+             eSink.errorSupplemental(loc, "Please check your ldc2.conf configuration file.");
+             eSink.errorSupplemental(loc, "Installation instructions can be found at http://wiki.dlang.org/LDC.");
+         }
+         else version (MARS)
+         {
+             eSink.errorSupplemental(loc, "dmd might not be correctly installed. Run 'dmd -man' for installation instructions.");
+             eSink.errorSupplemental(loc, "config file: %.*s", configFile.length, configFile.ptr);
+         }
+         else
+             static assert(0, "unknown compiler being built");
+     }
+ }
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/template.h gcc-16-20260208/gcc/d/dmd/template.h
*** gcc-16-20260201/gcc/d/dmd/template.h	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/template.h	Sun Feb  8 22:32:07 2026
*************** public:
*** 78,89 ****
      d_bool isTrivialAlias;        // matches pattern `template Alias(T) { alias Alias = qualifiers(T); }`
      d_bool deprecated_;           // this template declaration is deprecated
      d_bool isCmacro;              // Whether this template is a translation of a C macro
      Visibility visibility;
  
      TemplatePrevious *previous;         // threaded list of previous instantiation attempts on stack
  
      TemplateDeclaration *syntaxCopy(Dsymbol *) override;
-     bool overloadInsert(Dsymbol *s) override;
      const char *kind() const override;
  
      Visibility visible() override;
--- 78,89 ----
      d_bool isTrivialAlias;        // matches pattern `template Alias(T) { alias Alias = qualifiers(T); }`
      d_bool deprecated_;           // this template declaration is deprecated
      d_bool isCmacro;              // Whether this template is a translation of a C macro
+     d_bool haveComputedOneMember;   // Whether computeOneMeber has been called
      Visibility visibility;
  
      TemplatePrevious *previous;         // threaded list of previous instantiation attempts on stack
  
      TemplateDeclaration *syntaxCopy(Dsymbol *) override;
      const char *kind() const override;
  
      Visibility visible() override;
*************** public:
*** 129,135 ****
      virtual TemplateTupleParameter *isTemplateTupleParameter();
  
      virtual TemplateParameter *syntaxCopy() = 0;
-     virtual bool declareParameter(Scope *sc) = 0;
      virtual void print(RootObject *oarg, RootObject *oded) = 0;
      virtual RootObject *specialization() = 0;
      virtual bool hasDefaultArg() = 0;
--- 129,134 ----
*************** public:
*** 150,156 ****
  
      TemplateTypeParameter *isTemplateTypeParameter() override final;
      TemplateTypeParameter *syntaxCopy() override;
-     bool declareParameter(Scope *sc) override final;
      void print(RootObject *oarg, RootObject *oded) override final;
      RootObject *specialization() override final;
      bool hasDefaultArg() override final;
--- 149,154 ----
*************** public:
*** 180,186 ****
  
      TemplateValueParameter *isTemplateValueParameter() override;
      TemplateValueParameter *syntaxCopy() override;
-     bool declareParameter(Scope *sc) override;
      void print(RootObject *oarg, RootObject *oded) override;
      RootObject *specialization() override;
      bool hasDefaultArg() override;
--- 178,183 ----
*************** public:
*** 199,205 ****
  
      TemplateAliasParameter *isTemplateAliasParameter() override;
      TemplateAliasParameter *syntaxCopy() override;
-     bool declareParameter(Scope *sc) override;
      void print(RootObject *oarg, RootObject *oded) override;
      RootObject *specialization() override;
      bool hasDefaultArg() override;
--- 196,201 ----
*************** class TemplateTupleParameter final : pub
*** 214,220 ****
  public:
      TemplateTupleParameter *isTemplateTupleParameter() override;
      TemplateTupleParameter *syntaxCopy() override;
-     bool declareParameter(Scope *sc) override;
      void print(RootObject *oarg, RootObject *oded) override;
      RootObject *specialization() override;
      bool hasDefaultArg() override;
--- 210,215 ----
*************** public:
*** 248,254 ****
      Dsymbol *aliasdecl;                 // !=NULL if instance is an alias for its sole member
      TemplateInstance *inst;             // refer to existing instance
      ScopeDsymbol *argsym;               // argument symbol table
-     hash_t hash;                        // cached result of toHash()
      Expressions *fargs;                 // for function template, these are the function arguments
      Identifiers *fnames;                // for function template, argument names
  
--- 243,248 ----
*************** namespace dmd
*** 300,303 ****
--- 294,298 ----
      bool isError(const RootObject *const o);
      void printTemplateStats(bool listInstances, ErrorSink* eSink);
      void printInstantiationTrace(TemplateInstance *ti);
+     bool declareParameter(TemplateParameter *tp, Scope *sc);
  }
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/templateparamsem.d gcc-16-20260208/gcc/d/dmd/templateparamsem.d
*** gcc-16-20260201/gcc/d/dmd/templateparamsem.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/templateparamsem.d	Sun Feb  8 22:32:07 2026
*************** import dmd.globals;
*** 20,25 ****
--- 20,26 ----
  import dmd.location;
  import dmd.expression;
  import dmd.expressionsem;
+ import dmd.templatesem;
  import dmd.rootobject;
  import dmd.mtype;
  import dmd.typesem;
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/templatesem.d gcc-16-20260208/gcc/d/dmd/templatesem.d
*** gcc-16-20260201/gcc/d/dmd/templatesem.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/templatesem.d	Sun Feb  8 22:32:07 2026
*************** import dmd.declaration;
*** 25,30 ****
--- 25,31 ----
  import dmd.dinterpret;
  import dmd.dmodule;
  import dmd.dscope;
+ import dmd.dstruct;
  import dmd.dsymbol;
  import dmd.dsymbolsem;
  import dmd.dtemplate;
*************** import dmd.rootobject;
*** 51,56 ****
--- 52,58 ----
  import dmd.semantic2;
  import dmd.semantic3;
  import dmd.templateparamsem;
+ import dmd.timetrace;
  import dmd.tokens;
  import dmd.typesem;
  import dmd.visitor;
*************** alias funcLeastAsSpecialized = dmd.funcs
*** 59,64 ****
--- 61,688 ----
  
  enum LOG = false;
  
+ /***********************************************************
+  * Check whether the type t representation relies on one or more the template parameters.
+  * Params:
+  *      t           = Tested type, if null, returns false.
+  *      tparams     = Template parameters.
+  *      iStart      = Start index of tparams to limit the tested parameters. If it's
+  *                    nonzero, tparams[0..iStart] will be excluded from the test target.
+  */
+ bool reliesOnTident(Type t, TemplateParameters* tparams, size_t iStart = 0)
+ {
+     return reliesOnTemplateParameters(t, (*tparams)[0 .. tparams.length]);
+ }
+ 
+ /***********************************************************
+  * Check whether the type t representation relies on one or more the template parameters.
+  * Params:
+  *      t           = Tested type, if null, returns false.
+  *      tparams     = Template parameters.
+  */
+ bool reliesOnTemplateParameters(Type t, TemplateParameter[] tparams)
+ {
+     bool visitVector(TypeVector t)
+     {
+         return t.basetype.reliesOnTemplateParameters(tparams);
+     }
+ 
+     bool visitAArray(TypeAArray t)
+     {
+         return t.next.reliesOnTemplateParameters(tparams) ||
+                t.index.reliesOnTemplateParameters(tparams);
+     }
+ 
+     bool visitFunction(TypeFunction t)
+     {
+         foreach (i, fparam; t.parameterList)
+         {
+             if (fparam.type.reliesOnTemplateParameters(tparams))
+                 return true;
+         }
+         return t.next.reliesOnTemplateParameters(tparams);
+     }
+ 
+     bool visitIdentifier(TypeIdentifier t)
+     {
+         foreach (tp; tparams)
+         {
+             if (tp.ident.equals(t.ident))
+                 return true;
+         }
+         return false;
+     }
+ 
+     bool visitInstance(TypeInstance t)
+     {
+         foreach (tp; tparams)
+         {
+             if (t.tempinst.name == tp.ident)
+                 return true;
+         }
+ 
+         if (t.tempinst.tiargs)
+             foreach (arg; *t.tempinst.tiargs)
+             {
+                 if (Type ta = isType(arg))
+                 {
+                     if (ta.reliesOnTemplateParameters(tparams))
+                         return true;
+                 }
+             }
+ 
+         return false;
+     }
+ 
+     bool visitTypeof(TypeTypeof t)
+     {
+         //printf("TypeTypeof.reliesOnTemplateParameters('%s')\n", t.toChars());
+         return t.exp.reliesOnTemplateParameters(tparams);
+     }
+ 
+     bool visitTuple(TypeTuple t)
+     {
+         if (t.arguments)
+             foreach (arg; *t.arguments)
+             {
+                 if (arg.type.reliesOnTemplateParameters(tparams))
+                     return true;
+             }
+ 
+         return false;
+     }
+ 
+     if (!t)
+         return false;
+ 
+     Type tb = t.toBasetype();
+     switch (tb.ty)
+     {
+         case Tvector:   return visitVector(tb.isTypeVector());
+         case Taarray:   return visitAArray(tb.isTypeAArray());
+         case Tfunction: return visitFunction(tb.isTypeFunction());
+         case Tident:    return visitIdentifier(tb.isTypeIdentifier());
+         case Tinstance: return visitInstance(tb.isTypeInstance());
+         case Ttypeof:   return visitTypeof(tb.isTypeTypeof());
+         case Ttuple:    return visitTuple(tb.isTypeTuple());
+         case Tenum:     return false;
+         default:        return tb.nextOf().reliesOnTemplateParameters(tparams);
+     }
+ }
+ 
+ /***********************************************************
+  * Check whether the expression representation relies on one or more the template parameters.
+  * Params:
+  *      e           = expression to test
+  *      tparams     = Template parameters.
+  * Returns:
+  *      true if it does
+  */
+ private bool reliesOnTemplateParameters(Expression e, TemplateParameter[] tparams)
+ {
+     extern (C++) final class ReliesOnTemplateParameters : Visitor
+     {
+         alias visit = Visitor.visit;
+     public:
+         TemplateParameter[] tparams;
+         bool result;
+ 
+         extern (D) this(TemplateParameter[] tparams) @safe
+         {
+             this.tparams = tparams;
+         }
+ 
+         override void visit(Expression e)
+         {
+             //printf("Expression.reliesOnTemplateParameters('%s')\n", e.toChars());
+         }
+ 
+         override void visit(IdentifierExp e)
+         {
+             //printf("IdentifierExp.reliesOnTemplateParameters('%s')\n", e.toChars());
+             foreach (tp; tparams)
+             {
+                 if (e.ident == tp.ident)
+                 {
+                     result = true;
+                     return;
+                 }
+             }
+         }
+ 
+         override void visit(TupleExp e)
+         {
+             //printf("TupleExp.reliesOnTemplateParameters('%s')\n", e.toChars());
+             if (e.exps)
+             {
+                 foreach (ea; *e.exps)
+                 {
+                     ea.accept(this);
+                     if (result)
+                         return;
+                 }
+             }
+         }
+ 
+         override void visit(ArrayLiteralExp e)
+         {
+             //printf("ArrayLiteralExp.reliesOnTemplateParameters('%s')\n", e.toChars());
+             if (e.elements)
+             {
+                 foreach (el; *e.elements)
+                 {
+                     el.accept(this);
+                     if (result)
+                         return;
+                 }
+             }
+         }
+ 
+         override void visit(AssocArrayLiteralExp e)
+         {
+             //printf("AssocArrayLiteralExp.reliesOnTemplateParameters('%s')\n", e.toChars());
+             foreach (ek; *e.keys)
+             {
+                 ek.accept(this);
+                 if (result)
+                     return;
+             }
+             foreach (ev; *e.values)
+             {
+                 ev.accept(this);
+                 if (result)
+                     return;
+             }
+         }
+ 
+         override void visit(StructLiteralExp e)
+         {
+             //printf("StructLiteralExp.reliesOnTemplateParameters('%s')\n", e.toChars());
+             if (e.elements)
+             {
+                 foreach (ea; *e.elements)
+                 {
+                     ea.accept(this);
+                     if (result)
+                         return;
+                 }
+             }
+         }
+ 
+         override void visit(TypeExp e)
+         {
+             //printf("TypeExp.reliesOnTemplateParameters('%s')\n", e.toChars());
+             result = e.type.reliesOnTemplateParameters(tparams);
+         }
+ 
+         override void visit(NewExp e)
+         {
+             //printf("NewExp.reliesOnTemplateParameters('%s')\n", e.toChars());
+             if (e.placement)
+                 e.placement.accept(this);
+             if (e.thisexp)
+                 e.thisexp.accept(this);
+             result = e.newtype.reliesOnTemplateParameters(tparams);
+             if (!result && e.arguments)
+             {
+                 foreach (ea; *e.arguments)
+                 {
+                     ea.accept(this);
+                     if (result)
+                         return;
+                 }
+             }
+         }
+ 
+         override void visit(NewAnonClassExp e)
+         {
+             //printf("NewAnonClassExp.reliesOnTemplateParameters('%s')\n", e.toChars());
+             result = true;
+         }
+ 
+         override void visit(FuncExp e)
+         {
+             //printf("FuncExp.reliesOnTemplateParameters('%s')\n", e.toChars());
+             result = true;
+         }
+ 
+         override void visit(TypeidExp e)
+         {
+             //printf("TypeidExp.reliesOnTemplateParameters('%s')\n", e.toChars());
+             if (auto ea = isExpression(e.obj))
+                 ea.accept(this);
+             else if (auto ta = isType(e.obj))
+                 result = ta.reliesOnTemplateParameters(tparams);
+         }
+ 
+         override void visit(TraitsExp e)
+         {
+             //printf("TraitsExp.reliesOnTemplateParameters('%s')\n", e.toChars());
+             if (e.args)
+             {
+                 foreach (oa; *e.args)
+                 {
+                     if (auto ea = isExpression(oa))
+                         ea.accept(this);
+                     else if (auto ta = isType(oa))
+                         result = ta.reliesOnTemplateParameters(tparams);
+                     if (result)
+                         return;
+                 }
+             }
+         }
+ 
+         override void visit(IsExp e)
+         {
+             //printf("IsExp.reliesOnTemplateParameters('%s')\n", e.toChars());
+             result = e.targ.reliesOnTemplateParameters(tparams);
+         }
+ 
+         override void visit(UnaExp e)
+         {
+             //printf("UnaExp.reliesOnTemplateParameters('%s')\n", e.toChars());
+             e.e1.accept(this);
+         }
+ 
+         override void visit(DotTemplateInstanceExp e)
+         {
+             //printf("DotTemplateInstanceExp.reliesOnTemplateParameters('%s')\n", e.toChars());
+             visit(e.isUnaExp());
+             if (!result && e.ti.tiargs)
+             {
+                 foreach (oa; *e.ti.tiargs)
+                 {
+                     if (auto ea = isExpression(oa))
+                         ea.accept(this);
+                     else if (auto ta = isType(oa))
+                         result = ta.reliesOnTemplateParameters(tparams);
+                     if (result)
+                         return;
+                 }
+             }
+         }
+ 
+         override void visit(CallExp e)
+         {
+             //printf("CallExp.reliesOnTemplateParameters('%s')\n", e.toChars());
+             visit(e.isUnaExp());
+             if (!result && e.arguments)
+             {
+                 foreach (ea; *e.arguments)
+                 {
+                     ea.accept(this);
+                     if (result)
+                         return;
+                 }
+             }
+         }
+ 
+         override void visit(CastExp e)
+         {
+             //printf("CallExp.reliesOnTemplateParameters('%s')\n", e.toChars());
+             visit(e.isUnaExp());
+             // e.to can be null for cast() with no type
+             if (!result && e.to)
+                 result = e.to.reliesOnTemplateParameters(tparams);
+         }
+ 
+         override void visit(SliceExp e)
+         {
+             //printf("SliceExp.reliesOnTemplateParameters('%s')\n", e.toChars());
+             visit(e.isUnaExp());
+             if (!result && e.lwr)
+                 e.lwr.accept(this);
+             if (!result && e.upr)
+                 e.upr.accept(this);
+         }
+ 
+         override void visit(IntervalExp e)
+         {
+             //printf("IntervalExp.reliesOnTemplateParameters('%s')\n", e.toChars());
+             e.lwr.accept(this);
+             if (!result)
+                 e.upr.accept(this);
+         }
+ 
+         override void visit(ArrayExp e)
+         {
+             //printf("ArrayExp.reliesOnTemplateParameters('%s')\n", e.toChars());
+             visit(e.isUnaExp());
+             if (!result && e.arguments)
+             {
+                 foreach (ea; *e.arguments)
+                     ea.accept(this);
+             }
+         }
+ 
+         override void visit(BinExp e)
+         {
+             //printf("BinExp.reliesOnTemplateParameters('%s')\n", e.toChars());
+             e.e1.accept(this);
+             if (!result)
+                 e.e2.accept(this);
+         }
+ 
+         override void visit(CondExp e)
+         {
+             //printf("BinExp.reliesOnTemplateParameters('%s')\n", e.toChars());
+             e.econd.accept(this);
+             if (!result)
+                 visit(e.isBinExp());
+         }
+     }
+ 
+     scope ReliesOnTemplateParameters v = new ReliesOnTemplateParameters(tparams);
+     e.accept(v);
+     return v.result;
+ }
+ 
+ void computeOneMember(TemplateDeclaration td)
+ {
+     if (td is null || td.haveComputedOneMember)
+         return;
+ 
+     if (td && td.members && td.ident)
+     {
+         Dsymbol s;
+         if (oneMembers(td.members, s, td.ident) && s)
+         {
+             td.onemember = s;
+             s.parent = td;
+             td.computeIsTrivialAlias(s);
+         }
+         td.haveComputedOneMember = true;
+     }
+ }
+ 
+ bool declareParameter(TemplateParameter _this, Scope* sc)
+ {
+     static bool typeDeclareParameter(TemplateTypeParameter _this, Scope* sc)
+     {
+         //printf("TemplateTypeParameter.declareParameter('%s')\n", ident.toChars());
+         auto ti = new TypeIdentifier(_this.loc, _this.ident);
+         Declaration ad = new AliasDeclaration(_this.loc, _this.ident, ti);
+         return sc.insert(ad) !is null;
+     }
+ 
+     static bool valueDeclareParameter(TemplateValueParameter _this, Scope* sc)
+     {
+         /*
+             Do type semantic earlier.
+ 
+             This means for certain erroneous value parameters
+             their "type" can be known earlier and thus a better
+             error message given.
+ 
+             For example:
+             `template test(x* x) {}`
+             now yields "undefined identifier" rather than the opaque
+             "variable `x` is used as a type".
+          */
+         if (_this.valType)
+             _this.valType = _this.valType.typeSemantic(_this.loc, sc);
+         auto v = new VarDeclaration(_this.loc, _this.valType, _this.ident, null);
+         v.storage_class = STC.templateparameter;
+         return sc.insert(v) !is null;
+     }
+ 
+     static bool aliasDeclareParameter(TemplateAliasParameter _this, Scope* sc)
+     {
+         auto ti = new TypeIdentifier(_this.loc, _this.ident);
+         Declaration ad = new AliasDeclaration(_this.loc, _this.ident, ti);
+         return sc.insert(ad) !is null;
+     }
+ 
+     static bool tupleDeclareParameter(TemplateTupleParameter _this, Scope* sc)
+     {
+         auto ti = new TypeIdentifier(_this.loc, _this.ident);
+         Declaration ad = new AliasDeclaration(_this.loc, _this.ident, ti);
+         return sc.insert(ad) !is null;
+     }
+ 
+     if (auto tp = _this.isTemplateTypeParameter())
+         return typeDeclareParameter(tp, sc);
+     else if (auto vp = _this.isTemplateValueParameter())
+         return valueDeclareParameter(vp, sc);
+     else if (auto ap = _this.isTemplateAliasParameter())
+         return aliasDeclareParameter(ap, sc);
+     else if (auto tup = _this.isTemplateTupleParameter())
+         return tupleDeclareParameter(tup, sc);
+ 
+     assert(0); // unreachable
+ }
+ 
+ /************************************
+  * Return hash of Objects.
+  */
+ private size_t arrayObjectHash(ref Objects oa1)
+ {
+     import dmd.root.hash : mixHash;
+ 
+     size_t hash = 0;
+     foreach (o1; oa1)
+     {
+         /* Must follow the logic of match()
+          */
+         if (auto t1 = isType(o1))
+             hash = mixHash(hash, cast(size_t)t1.deco);
+         else if (auto e1 = getExpression(o1))
+             hash = mixHash(hash, expressionHash(e1));
+         else if (auto s1 = isDsymbol(o1))
+         {
+             if (auto fa1 = s1.isFuncAliasDeclaration())
+                 s1 = fa1.toAliasFunc();
+             hash = mixHash(hash, mixHash(cast(size_t)cast(void*)s1.getIdent(), cast(size_t)cast(void*)s1.parent));
+         }
+         else if (auto u1 = isTuple(o1))
+             hash = mixHash(hash, arrayObjectHash(u1.objects));
+     }
+     return hash;
+ }
+ 
+ /************************************
+  * Computes hash of expression.
+  * Handles all Expression classes and MUST match their equals method,
+  * i.e. e1.equals(e2) implies expressionHash(e1) == expressionHash(e2).
+  */
+ private size_t expressionHash(Expression e)
+ {
+     import dmd.root.ctfloat : CTFloat;
+     import dmd.root.hash : calcHash, mixHash;
+ 
+     switch (e.op)
+     {
+     case EXP.int64:
+         return cast(size_t) e.isIntegerExp().getInteger();
+ 
+     case EXP.float64:
+         return CTFloat.hash(e.isRealExp().value);
+ 
+     case EXP.complex80:
+         auto ce = e.isComplexExp();
+         return mixHash(CTFloat.hash(ce.toReal), CTFloat.hash(ce.toImaginary));
+ 
+     case EXP.identifier:
+         return cast(size_t)cast(void*) e.isIdentifierExp().ident;
+ 
+     case EXP.null_:
+         return cast(size_t)cast(void*) e.isNullExp().type;
+ 
+     case EXP.string_:
+         return calcHash(e.isStringExp.peekData());
+ 
+     case EXP.tuple:
+     {
+         auto te = e.isTupleExp();
+         size_t hash = 0;
+         hash += te.e0 ? expressionHash(te.e0) : 0;
+         foreach (elem; *te.exps)
+             hash = mixHash(hash, expressionHash(elem));
+         return hash;
+     }
+ 
+     case EXP.arrayLiteral:
+     {
+         auto ae = e.isArrayLiteralExp();
+         size_t hash;
+         foreach (i; 0 .. ae.elements.length)
+             hash = mixHash(hash, expressionHash(ae[i]));
+         return hash;
+     }
+ 
+     case EXP.assocArrayLiteral:
+     {
+         auto ae = e.isAssocArrayLiteralExp();
+         size_t hash;
+         foreach (i; 0 .. ae.keys.length)
+             // reduction needs associative op as keys are unsorted (use XOR)
+             hash ^= mixHash(expressionHash((*ae.keys)[i]), expressionHash((*ae.values)[i]));
+         return hash;
+     }
+ 
+     case EXP.structLiteral:
+     {
+         auto se = e.isStructLiteralExp();
+         size_t hash;
+         foreach (elem; *se.elements)
+             hash = mixHash(hash, elem ? expressionHash(elem) : 0);
+         return hash;
+     }
+ 
+     case EXP.variable:
+         return cast(size_t)cast(void*) e.isVarExp().var;
+ 
+     case EXP.function_:
+         return cast(size_t)cast(void*) e.isFuncExp().fd;
+ 
+     default:
+         // no custom equals for this expression
+         //assert((&e.equals).funcptr is &Expression.equals);
+         // equals based on identity
+         return cast(size_t)cast(void*) e;
+     }
+ }
+ 
+ /************************************
+  * This struct is needed for TemplateInstance to be the key in an associative array.
+  * Fixing https://issues.dlang.org/show_bug.cgi?id=15813 would make it unnecessary.
+  */
+ struct TemplateInstanceBox
+ {
+     TemplateInstance ti;
+     size_t hash; // cached result of toHash()
+ 
+     this(TemplateInstance ti)
+     {
+         this.ti = ti;
+         hash = cast(size_t)cast(void*)this.ti.enclosing;
+         hash += arrayObjectHash(this.ti.tdtypes);
+         hash += hash == 0;
+     }
+ 
+     size_t toHash() const @safe pure nothrow
+     {
+         assert(hash);
+         return hash;
+     }
+ 
+     bool opEquals(ref const TemplateInstanceBox s) @trusted const
+     {
+         bool res = void;
+         if (ti.inst && s.ti.inst)
+         {
+             /* This clause is only used when an instance with errors
+              * is replaced with a correct instance.
+              */
+             res = ti is s.ti;
+         }
+         else
+         {
+             /* Used when a proposed instance is used to see if there's
+              * an existing instance.
+              */
+             static if (__VERSION__ < 2099) // https://issues.dlang.org/show_bug.cgi?id=22717
+                 res = (cast()s.ti).equalsx(cast()ti);
+             else
+                 res = (cast()ti).equalsx(cast()s.ti);
+         }
+ 
+         debug (FindExistingInstance) ++(res ? nHits : nCollisions);
+         return res;
+     }
+ 
+     debug (FindExistingInstance)
+     {
+         __gshared uint nHits, nCollisions;
+ 
+         shared static ~this()
+         {
+             printf("debug (FindExistingInstance) TemplateInstanceBox.equals hits: %u collisions: %u\n",
+                    nHits, nCollisions);
+         }
+     }
+ }
+ 
  /************************************
   * Perform semantic analysis on template.
   * Params:
*************** void templateDeclarationSemantic(Scope*
*** 85,90 ****
--- 709,717 ----
      if (!sc)
          return;
  
+     import dmd.timetrace;
+     timeTraceBeginEvent(TimeTraceEventType.sema1TemplateDecl);
+     scope (exit) timeTraceEndEvent(TimeTraceEventType.sema1TemplateDecl, tempdecl);
      // Remember templates defined in module object that we need to know about
      if (sc._module && sc._module.ident == Id.object)
      {
*************** void templateDeclarationSemantic(Scope*
*** 133,139 ****
              (*tempdecl.origParameters)[i] = tp.syntaxCopy();
          }
      }
- 
      for (size_t i = 0; i < tempdecl.parameters.length; i++)
      {
          TemplateParameter tp = (*tempdecl.parameters)[i];
--- 760,765 ----
*************** void templateDeclarationSemantic(Scope*
*** 148,153 ****
--- 774,780 ----
          }
          if (i + 1 != tempdecl.parameters.length && tp.isTemplateTupleParameter())
          {
+             tempdecl.computeOneMember(); // for .kind
              .error(tempdecl.loc, "%s `%s` template sequence parameter must be the last one", tempdecl.kind, tempdecl.toPrettyChars);
              tempdecl.errors = true;
          }
*************** void templateDeclarationSemantic(Scope*
*** 187,202 ****
  
      // Compute again
      tempdecl.onemember = null;
!     if (tempdecl.members)
!     {
!         Dsymbol s;
!         if (oneMembers(tempdecl.members, s, tempdecl.ident) && s)
!         {
!             tempdecl.onemember = s;
!             s.parent = tempdecl;
!         }
!     }
! 
      /* BUG: should check:
       *  1. template functions must not introduce virtual functions, as they
       *     cannot be accomodated in the vtbl[]
--- 814,820 ----
  
      // Compute again
      tempdecl.onemember = null;
!     tempdecl.computeOneMember();
      /* BUG: should check:
       *  1. template functions must not introduce virtual functions, as they
       *     cannot be accomodated in the vtbl[]
*************** void templateDeclarationSemantic(Scope*
*** 207,212 ****
--- 825,2383 ----
      tempdecl.semanticRun = PASS.semanticdone;
  }
  
+ void templateInstanceSemantic(TemplateInstance tempinst, Scope* sc, ArgumentList argumentList)
+ {
+     //printf("[%s] TemplateInstance.dsymbolSemantic('%s', this=%p, gag = %d, sc = %p)\n", tempinst.loc.toChars(), tempinst.toChars(), tempinst, global.gag, sc);
+     version (none)
+     {
+         for (Dsymbol s = tempinst; s; s = s.parent)
+         {
+             printf("\t%s\n", s.toChars());
+         }
+         printf("Scope\n");
+         for (Scope* scx = sc; scx; scx = scx.enclosing)
+         {
+             printf("\t%s parent %s\n", scx._module ? scx._module.toChars() : "null", scx.parent ? scx.parent.toChars() : "null");
+         }
+     }
+ 
+     static if (LOG)
+     {
+         printf("\n+TemplateInstance.dsymbolSemantic('%s', this=%p)\n", tempinst.toChars(), tempinst);
+     }
+     if (tempinst.inst) // if semantic() was already run
+     {
+         static if (LOG)
+         {
+             printf("-TemplateInstance.dsymbolSemantic('%s', this=%p) already run\n",
+                    tempinst.inst.toChars(), tempinst.inst);
+         }
+         return;
+     }
+     if (tempinst.semanticRun != PASS.initial)
+     {
+         static if (LOG)
+         {
+             printf("Recursive template expansion\n");
+         }
+         auto ungag = Ungag(global.gag);
+         if (!tempinst.gagged)
+             global.gag = 0;
+         .error(tempinst.loc, "%s `%s` recursive template expansion", tempinst.kind, tempinst.toPrettyChars);
+         if (tempinst.gagged)
+             tempinst.semanticRun = PASS.initial;
+         else
+             tempinst.inst = tempinst;
+         tempinst.errors = true;
+         return;
+     }
+ 
+     timeTraceBeginEvent(TimeTraceEventType.sema1TemplateInstance);
+     scope (exit) timeTraceEndEvent(TimeTraceEventType.sema1TemplateInstance, tempinst);
+ 
+     // Get the enclosing template instance from the scope tinst
+     tempinst.tinst = sc.tinst;
+ 
+     // Get the instantiating module from the scope minst
+     tempinst.minst = sc.minst;
+     // https://issues.dlang.org/show_bug.cgi?id=10920
+     // If the enclosing function is non-root symbol,
+     // this instance should be speculative.
+     if (!tempinst.tinst && sc.func && sc.func.inNonRoot())
+     {
+         tempinst.minst = null;
+     }
+ 
+     tempinst.gagged = (global.gag > 0);
+ 
+     tempinst.semanticRun = PASS.semantic;
+ 
+     static if (LOG)
+     {
+         printf("\tdo semantic\n");
+     }
+     /* Find template declaration first,
+      * then run semantic on each argument (place results in tiargs[]),
+      * last find most specialized template from overload list/set.
+      */
+     if (!tempinst.findTempDecl(sc, null) || !tempinst.semanticTiargs(sc) || !tempinst.findBestMatch(sc, argumentList))
+     {
+     Lerror:
+         if (tempinst.gagged)
+         {
+             // https://issues.dlang.org/show_bug.cgi?id=13220
+             // Roll back status for later semantic re-running
+             tempinst.semanticRun = PASS.initial;
+         }
+         else
+             tempinst.inst = tempinst;
+         tempinst.errors = true;
+         return;
+     }
+     TemplateDeclaration tempdecl = tempinst.tempdecl.isTemplateDeclaration();
+     assert(tempdecl);
+ 
+     if (global.params.v.templates)
+         TemplateStats.incInstance(tempdecl, tempinst, global.params.v.templatesListInstances);
+ 
+     tempdecl.checkDeprecated(tempinst.loc, sc);
+ 
+     // If tempdecl is a mixin, disallow it
+     if (tempdecl.ismixin)
+     {
+         .error(tempinst.loc, "%s `%s` mixin templates are not regular templates", tempinst.kind, tempinst.toPrettyChars);
+         goto Lerror;
+     }
+ 
+     tempinst.hasNestedArgs(tempinst.tiargs, tempdecl.isstatic);
+     if (tempinst.errors)
+         goto Lerror;
+ 
+     // Copy the tempdecl namespace (not the scope one)
+     tempinst.cppnamespace = tempdecl.cppnamespace;
+     if (tempinst.cppnamespace)
+         tempinst.cppnamespace.dsymbolSemantic(sc);
+ 
+     /* Greatly simplified semantic processing for AliasSeq templates
+      */
+     if (tempdecl.isTrivialAliasSeq)
+     {
+         tempinst.inst = tempinst;
+         return aliasSeqInstanceSemantic(tempinst, sc, tempdecl);
+     }
+ 
+     /* Greatly simplified semantic processing for Alias templates
+      */
+     else if (tempdecl.isTrivialAlias)
+     {
+         tempinst.inst = tempinst;
+         return aliasInstanceSemantic(tempinst, sc, tempdecl);
+     }
+ 
+ 
+     /* See if there is an existing TemplateInstantiation that already
+      * implements the typeargs. If so, just refer to that one instead.
+      */
+     tempinst.inst = tempdecl.findExistingInstance(tempinst, argumentList);
+     TemplateInstance errinst = null;
+     if (!tempinst.inst)
+     {
+         // So, we need to implement 'this' instance.
+     }
+     else if (tempinst.inst.gagged && !tempinst.gagged && tempinst.inst.errors)
+     {
+         // If the first instantiation had failed, re-run semantic,
+         // so that error messages are shown.
+         errinst = tempinst.inst;
+     }
+     else
+     {
+         // It's a match
+         tempinst.parent = tempinst.inst.parent;
+         tempinst.errors = tempinst.inst.errors;
+ 
+         // If both this and the previous instantiation were gagged,
+         // use the number of errors that happened last time.
+         global.errors += tempinst.errors;
+         global.gaggedErrors += tempinst.errors;
+ 
+         // If the first instantiation was gagged, but this is not:
+         if (tempinst.inst.gagged)
+         {
+             // It had succeeded, mark it is a non-gagged instantiation,
+             // and reuse it.
+             tempinst.inst.gagged = tempinst.gagged;
+         }
+ 
+         tempinst.tnext = tempinst.inst.tnext;
+         tempinst.inst.tnext = tempinst;
+ 
+         /* A module can have explicit template instance and its alias
+          * in module scope (e,g, `alias Base64 = Base64Impl!('+', '/');`).
+          * If the first instantiation 'inst' had happened in non-root module,
+          * compiler can assume that its instantiated code would be included
+          * in the separately compiled obj/lib file (e.g. phobos.lib).
+          *
+          * However, if 'this' second instantiation happened in root module,
+          * compiler might need to invoke its codegen
+          * (https://issues.dlang.org/show_bug.cgi?id=2500 & https://issues.dlang.org/show_bug.cgi?id=2644).
+          * But whole import graph is not determined until all semantic pass finished,
+          * so 'inst' should conservatively finish the semantic3 pass for the codegen.
+          */
+         if (tempinst.minst && tempinst.minst.isRoot() && !(tempinst.inst.minst && tempinst.inst.minst.isRoot()))
+         {
+             /* Swap the position of 'inst' and 'this' in the instantiation graph.
+              * Then, the primary instance `inst` will be changed to a root instance,
+              * along with all members of `inst` having their scopes updated.
+              *
+              * Before:
+              *  non-root -> A!() -> B!()[inst] -> C!() { members[non-root] }
+              *                      |
+              *  root     -> D!() -> B!()[this]
+              *
+              * After:
+              *  non-root -> A!() -> B!()[this]
+              *                      |
+              *  root     -> D!() -> B!()[inst] -> C!() { members[root] }
+              */
+             Module mi = tempinst.minst;
+             TemplateInstance ti = tempinst.tinst;
+             tempinst.minst = tempinst.inst.minst;
+             tempinst.tinst = tempinst.inst.tinst;
+             tempinst.inst.minst = mi;
+             tempinst.inst.tinst = ti;
+ 
+             /* https://issues.dlang.org/show_bug.cgi?id=21299
+                `minst` has been updated on the primary instance `inst` so it is
+                now coming from a root module, however all Dsymbol `inst.members`
+                of the instance still have their `_scope.minst` pointing at the
+                original non-root module. We must now propagate `minst` to all
+                members so that forward referenced dependencies that get
+                instantiated will also be appended to the root module, otherwise
+                there will be undefined references at link-time.  */
+             extern (C++) final class InstMemberWalker : Visitor
+             {
+                 alias visit = Visitor.visit;
+                 TemplateInstance inst;
+ 
+                 extern (D) this(TemplateInstance inst) scope @safe
+                 {
+                     this.inst = inst;
+                 }
+ 
+                 override void visit(Dsymbol d)
+                 {
+                     if (d._scope)
+                         d._scope.minst = inst.minst;
+                 }
+ 
+                 override void visit(ScopeDsymbol sds)
+                 {
+                     sds.members.foreachDsymbol( s => s.accept(this) );
+                     visit(cast(Dsymbol)sds);
+                 }
+ 
+                 override void visit(StructDeclaration sd)
+                 {
+                     // need to visit auto-generated methods as well
+                     if (sd.xeq) visit(sd.xeq);
+                     if (sd.xcmp) visit(sd.xcmp);
+                     if (sd.xhash) visit(sd.xhash);
+                     visit(cast(ScopeDsymbol)sd);
+                 }
+ 
+                 override void visit(AttribDeclaration ad)
+                 {
+                     ad.include(null).foreachDsymbol( s => s.accept(this) );
+                     visit(cast(Dsymbol)ad);
+                 }
+ 
+                 override void visit(ConditionalDeclaration cd)
+                 {
+                     if (cd.condition.inc)
+                         visit(cast(AttribDeclaration)cd);
+                     else
+                         visit(cast(Dsymbol)cd);
+                 }
+             }
+             scope v = new InstMemberWalker(tempinst.inst);
+             tempinst.inst.accept(v);
+ 
+             if (!global.params.allInst &&
+                 tempinst.minst) // if inst was not speculative...
+             {
+                 assert(!tempinst.minst.isRoot()); // ... it was previously appended to a non-root module
+                 // Append again to the root module members[], so that the instance will
+                 // get codegen chances (depending on `tempinst.inst.needsCodegen()`).
+                 tempinst.inst.appendToModuleMember();
+             }
+ 
+             assert(tempinst.inst.memberOf && tempinst.inst.memberOf.isRoot(), "no codegen chances");
+         }
+ 
+         // modules imported by an existing instance should be added to the module
+         // that instantiates the instance.
+         if (tempinst.minst)
+             foreach(imp; tempinst.inst.importedModules)
+                 if (!tempinst.minst.aimports.contains(imp))
+                     tempinst.minst.aimports.push(imp);
+ 
+         static if (LOG)
+         {
+             printf("\tit's a match with instance %p, %d\n", tempinst.inst, tempinst.inst.semanticRun);
+         }
+         return;
+     }
+     static if (LOG)
+     {
+         printf("\timplement template instance %s '%s'\n", tempdecl.parent.toChars(), tempinst.toChars());
+         printf("\ttempdecl %s\n", tempdecl.toChars());
+     }
+     const errorsave = global.errors;
+ 
+     tempinst.inst = tempinst;
+     tempinst.parent = tempinst.enclosing ? tempinst.enclosing : tempdecl.parent;
+     //printf("parent = '%s'\n", parent.kind());
+ 
+     if (global.params.v.templates)
+         TemplateStats.incUnique(tempdecl, tempinst);
+ 
+     TemplateInstance tempdecl_instance_idx = tempdecl.addInstance(tempinst);
+ 
+     //getIdent();
+ 
+     // Store the place we added it to in target_symbol_list(_idx) so we can
+     // remove it later if we encounter an error.
+     Dsymbols* target_symbol_list = tempinst.appendToModuleMember();
+     size_t target_symbol_list_idx = target_symbol_list ? target_symbol_list.length - 1 : 0;
+ 
+     // Copy the syntax trees from the TemplateDeclaration
+     tempinst.members = Dsymbol.arraySyntaxCopy(tempdecl.members);
+ 
+     // resolve TemplateThisParameter
+     for (size_t i = 0; i < tempdecl.parameters.length; i++)
+     {
+         if ((*tempdecl.parameters)[i].isTemplateThisParameter() is null)
+             continue;
+         Type t = isType((*tempinst.tiargs)[i]);
+         assert(t);
+         if (STC stc = ModToStc(t.mod))
+         {
+             //printf("t = %s, stc = x%llx\n", t.toChars(), stc);
+             auto s = new Dsymbols(new StorageClassDeclaration(stc, tempinst.members));
+             tempinst.members = s;
+         }
+         break;
+     }
+ 
+     // Create our own scope for the template parameters
+     Scope* _scope = tempdecl._scope;
+     if (tempdecl.semanticRun == PASS.initial)
+     {
+         .error(tempinst.loc, "%s `%s` template instantiation `%s` forward references template declaration `%s`",
+            tempinst.kind, tempinst.toPrettyChars, tempinst.toChars(), tempdecl.toChars());
+         return;
+     }
+ 
+     static if (LOG)
+     {
+         printf("\tcreate scope for template parameters '%s'\n", tempinst.toChars());
+     }
+     tempinst.argsym = new ScopeDsymbol();
+     tempinst.argsym.parent = _scope.parent;
+     _scope = _scope.push(tempinst.argsym);
+     _scope.tinst = tempinst;
+     _scope.minst = tempinst.minst;
+     //scope.stc = STC.none;
+ 
+     if (sc.isKnownToHaveACompileTimeContext)
+         _scope.knownACompileTimeOnlyContext = true;
+ 
+     // Declare each template parameter as an alias for the argument type
+     Scope* paramscope = _scope.push();
+     paramscope.stc = STC.none;
+     paramscope.visibility = Visibility(Visibility.Kind.public_); // https://issues.dlang.org/show_bug.cgi?id=14169
+                                               // template parameters should be public
+     tempinst.declareParameters(paramscope);
+     paramscope.pop();
+ 
+     // Add members of template instance to template instance symbol table
+     //parent = scope.scopesym;
+     tempinst.symtab = new DsymbolTable();
+ 
+     tempinst.members.foreachDsymbol( (s)
+     {
+         static if (LOG)
+         {
+             printf("\t adding member '%s' %p kind %s to '%s'\n", s.toChars(), s, s.kind(), tempinst.toChars());
+         }
+         s.addMember(_scope, tempinst);
+     });
+ 
+     static if (LOG)
+     {
+         printf("adding members done\n");
+     }
+ 
+     /* See if there is only one member of template instance, and that
+      * member has the same name as the template instance.
+      * If so, this template instance becomes an alias for that member.
+      */
+     //printf("members.length = %d\n", tempinst.members.length);
+     if (tempinst.members.length)
+     {
+         Dsymbol s;
+         if (oneMembers(tempinst.members, s, tempdecl.ident) && s)
+         {
+             //printf("tempdecl.ident = %s, s = `%s %s`\n", tempdecl.ident.toChars(), s.kind(), s.toPrettyChars());
+             //printf("setting aliasdecl\n");
+             tempinst.aliasdecl = s;
+         }
+     }
+ 
+     /* If function template declaration
+      */
+     if (argumentList.length > 0 && tempinst.aliasdecl)
+     {
+         if (auto fd = tempinst.aliasdecl.isFuncDeclaration())
+         {
+             /* Transmit fargs to type so that TypeFunction.dsymbolSemantic() can
+              * resolve any "auto ref" storage classes.
+              */
+             if (fd.type)
+                 if (auto tf = fd.type.isTypeFunction())
+                     tf.inferenceArguments = argumentList;
+         }
+     }
+ 
+     // Do semantic() analysis on template instance members
+     static if (LOG)
+     {
+         printf("\tdo semantic() on template instance members '%s'\n", tempinst.toChars());
+     }
+     Scope* sc2;
+     sc2 = _scope.push(tempinst);
+     //printf("enclosing = %d, sc.parent = %s\n", tempinst.enclosing, sc.parent.toChars());
+     sc2.parent = tempinst;
+     sc2.tinst = tempinst;
+     sc2.minst = tempinst.minst;
+     sc2.stc &= ~STC.deprecated_;
+     tempinst.tryExpandMembers(sc2);
+ 
+     tempinst.semanticRun = PASS.semanticdone;
+ 
+     /* ConditionalDeclaration may introduce eponymous declaration,
+      * so we should find it once again after semantic.
+      */
+     if (tempinst.members.length)
+     {
+         Dsymbol s;
+         if (oneMembers(tempinst.members, s, tempdecl.ident) && s)
+         {
+             if (!tempinst.aliasdecl || tempinst.aliasdecl != s)
+             {
+                 //printf("tempdecl.ident = %s, s = `%s %s`\n", tempdecl.ident.toChars(), s.kind(), s.toPrettyChars());
+                 //printf("setting aliasdecl 2\n");
+                 tempinst.aliasdecl = s;
+             }
+         }
+     }
+ 
+     if (global.errors != errorsave)
+         goto Laftersemantic;
+ 
+     /* If any of the instantiation members didn't get semantic() run
+      * on them due to forward references, we cannot run semantic2()
+      * or semantic3() yet.
+      */
+     {
+         bool found_deferred_ad = false;
+         for (size_t i = 0; i < Module.deferred.length; i++)
+         {
+             Dsymbol sd = Module.deferred[i];
+             AggregateDeclaration ad = sd.isAggregateDeclaration();
+             if (ad && ad.parent && ad.parent.isTemplateInstance())
+             {
+                 //printf("deferred template aggregate: %s %s\n",
+                 //        sd.parent.toChars(), sd.toChars());
+                 found_deferred_ad = true;
+                 if (ad.parent == tempinst)
+                 {
+                     ad.deferred = tempinst;
+                     break;
+                 }
+             }
+         }
+         if (found_deferred_ad || Module.deferred.length)
+             goto Laftersemantic;
+     }
+ 
+     /* The problem is when to parse the initializer for a variable.
+      * Perhaps VarDeclaration.dsymbolSemantic() should do it like it does
+      * for initializers inside a function.
+      */
+     //if (sc.parent.isFuncDeclaration())
+     {
+         /* https://issues.dlang.org/show_bug.cgi?id=782
+          * this has problems if the classes this depends on
+          * are forward referenced. Find a way to defer semantic()
+          * on this template.
+          */
+         tempinst.semantic2(sc2);
+     }
+     if (global.errors != errorsave)
+         goto Laftersemantic;
+ 
+     if ((sc.func || sc.fullinst) && !tempinst.tinst)
+     {
+         /* If a template is instantiated inside function, the whole instantiation
+          * should be done at that position. But, immediate running semantic3 of
+          * dependent templates may cause unresolved forward reference.
+          * https://issues.dlang.org/show_bug.cgi?id=9050
+          * To avoid the issue, don't run semantic3 until semantic and semantic2 done.
+          */
+         TemplateInstances deferred;
+         tempinst.deferred = &deferred;
+ 
+         //printf("Run semantic3 on %s\n", toChars());
+ 
+         /* https://issues.dlang.org/show_bug.cgi?id=23965
+          * DRuntime hooks are not deprecated, but may be used for deprecated
+          * types. Deprecations are disabled while analysing hooks to avoid
+          * spurious error messages.
+          */
+         auto saveUseDeprecated = global.params.useDeprecated;
+         if (sc.isDeprecated() && isDRuntimeHook(tempinst.name))
+             global.params.useDeprecated = DiagnosticReporting.off;
+ 
+         tempinst.trySemantic3(sc2);
+ 
+         global.params.useDeprecated = saveUseDeprecated;
+ 
+         for (size_t i = 0; i < deferred.length; i++)
+         {
+             //printf("+ run deferred semantic3 on %s\n", deferred[i].toChars());
+             deferred[i].semantic3(null);
+         }
+ 
+         tempinst.deferred = null;
+     }
+     else if (tempinst.tinst)
+     {
+         bool doSemantic3 = false;
+         FuncDeclaration fd;
+         if (tempinst.aliasdecl)
+             fd = tempinst.aliasdecl.toAlias2().isFuncDeclaration();
+ 
+         if (fd)
+         {
+             /* Template function instantiation should run semantic3 immediately
+              * for attribute inference.
+              */
+             scope fld = fd.isFuncLiteralDeclaration();
+             if (fld && fld.tok == TOK.reserved)
+                 doSemantic3 = true;
+             else if (sc.func)
+                 doSemantic3 = true;
+         }
+         else if (sc.func)
+         {
+             /* A lambda function in template arguments might capture the
+              * instantiated scope context. For the correct context inference,
+              * all instantiated functions should run the semantic3 immediately.
+              * See also compilable/test14973.d
+              */
+             foreach (oarg; tempinst.tdtypes)
+             {
+                 auto s = getDsymbol(oarg);
+                 if (!s)
+                     continue;
+ 
+                 if (auto td = s.isTemplateDeclaration())
+                 {
+                     if (!td.literal)
+                         continue;
+                     assert(td.members && td.members.length == 1);
+                     s = (*td.members)[0];
+                 }
+                 if (auto fld = s.isFuncLiteralDeclaration())
+                 {
+                     if (fld.tok == TOK.reserved)
+                     {
+                         doSemantic3 = true;
+                         break;
+                     }
+                 }
+             }
+             //printf("[%s] %s doSemantic3 = %d\n", tempinst.tinst.loc.toChars(), tempinst.tinst.toChars(), doSemantic3);
+         }
+         if (doSemantic3)
+             tempinst.trySemantic3(sc2);
+ 
+         TemplateInstance ti = tempinst.tinst;
+         int nest = 0;
+         while (ti && !ti.deferred && ti.tinst)
+         {
+             ti = ti.tinst;
+             if (++nest > global.recursionLimit)
+             {
+                 global.gag = 0; // ensure error message gets printed
+                 .error(tempinst.loc, "%s `%s` recursive expansion", tempinst.kind, tempinst.toPrettyChars);
+                 fatal();
+             }
+         }
+         if (ti && ti.deferred)
+         {
+             //printf("deferred semantic3 of %p %s, ti = %s, ti.deferred = %p\n", this, toChars(), ti.toChars());
+             for (size_t i = 0;; i++)
+             {
+                 if (i == ti.deferred.length)
+                 {
+                     ti.deferred.push(tempinst);
+                     break;
+                 }
+                 if ((*ti.deferred)[i] == tempinst)
+                     break;
+             }
+         }
+     }
+ 
+     if (tempinst.aliasdecl)
+     {
+         /* https://issues.dlang.org/show_bug.cgi?id=13816
+          * AliasDeclaration tries to resolve forward reference
+          * twice (See inuse check in AliasDeclaration.toAlias()). It's
+          * necessary to resolve mutual references of instantiated symbols, but
+          * it will left a true recursive alias in tuple declaration - an
+          * AliasDeclaration A refers TupleDeclaration B, and B contains A
+          * in its elements.  To correctly make it an error, we strictly need to
+          * resolve the alias of eponymous member.
+          */
+         tempinst.aliasdecl = tempinst.aliasdecl.toAlias2();
+ 
+         // stop AliasAssign tuple building
+         if (auto td = tempinst.aliasdecl.isTupleDeclaration())
+             td.building = false;
+     }
+ 
+ Laftersemantic:
+     sc2.pop();
+     _scope.pop();
+ 
+     // Give additional context info if error occurred during instantiation
+     if (global.errors != errorsave)
+     {
+         if (!tempinst.errors)
+         {
+             if (!tempdecl.literal)
+                 .error(tempinst.loc, "%s `%s` error instantiating", tempinst.kind, tempinst.toPrettyChars);
+             if (tempinst.tinst)
+                 tempinst.tinst.printInstantiationTrace();
+         }
+         tempinst.errors = true;
+         if (tempinst.gagged)
+         {
+             // Errors are gagged, so remove the template instance from the
+             // instance/symbol lists we added it to and reset our state to
+             // finish clean and so we can try to instantiate it again later
+             // (see https://issues.dlang.org/show_bug.cgi?id=4302 and https://issues.dlang.org/show_bug.cgi?id=6602).
+             tempdecl.removeInstance(tempdecl_instance_idx);
+             if (target_symbol_list)
+             {
+                 // Because we added 'this' in the last position above, we
+                 // should be able to remove it without messing other indices up.
+                 assert((*target_symbol_list)[target_symbol_list_idx] == tempinst);
+                 target_symbol_list.remove(target_symbol_list_idx);
+                 tempinst.memberOf = null;                    // no longer a member
+             }
+             tempinst.semanticRun = PASS.initial;
+             tempinst.inst = null;
+             tempinst.symtab = null;
+         }
+     }
+     else if (errinst)
+     {
+         /* https://issues.dlang.org/show_bug.cgi?id=14541
+          * If the previous gagged instance had failed by
+          * circular references, currrent "error reproduction instantiation"
+          * might succeed, because of the difference of instantiated context.
+          * On such case, the cached error instance needs to be overridden by the
+          * succeeded instance.
+          */
+         //printf("replaceInstance()\n");
+         assert(errinst.errors);
+         auto ti1 = TemplateInstanceBox(errinst);
+         (cast(TemplateInstance[TemplateInstanceBox])tempdecl.instances).remove(ti1);
+ 
+         auto ti2 = TemplateInstanceBox(tempinst);
+         (*(cast(TemplateInstance[TemplateInstanceBox]*) &tempdecl.instances))[ti2] = tempinst;
+     }
+ 
+     static if (LOG)
+     {
+         printf("-TemplateInstance.dsymbolSemantic('%s', this=%p)\n", tempinst.toChars(), tempinst);
+     }
+ }
+ 
+ /*****************************************
+  * Determines if a TemplateInstance will need a nested
+  * generation of the TemplateDeclaration.
+  * Sets enclosing property if so, and returns != 0;
+  */
+ private bool hasNestedArgs(TemplateInstance _this, Objects* args, bool isstatic)
+ {
+     int nested = 0;
+     //printf("TemplateInstance.hasNestedArgs('%s')\n", tempdecl.ident.toChars());
+ 
+     // arguments from parent instances are also accessible
+     if (!_this.enclosing)
+     {
+         if (TemplateInstance ti = _this.tempdecl.toParent().isTemplateInstance())
+             _this.enclosing = ti.enclosing;
+     }
+ 
+     /* Search for the most deeply nested of `dparent` and `enclosing` assigning
+      * `dparent` to `enclosing` if `dparent` is more nested than `enclosing`.
+      *
+      * Returns:
+      *  `true` if an error should be reported
+      */
+     static bool search(Dsymbol dparent, ref Dsymbol enclosing)
+     {
+         if (!dparent || dparent.isModule)
+             return false;
+         if (!enclosing)
+         {
+             enclosing = dparent;
+             return false;
+         }
+         if (enclosing == dparent)
+             return false;
+ 
+         /* Select the more deeply nested of the two.
+          * Error if one is not nested inside the other.
+          */
+         for (Dsymbol p = enclosing; p; p = p.parent)
+         {
+             if (p == dparent)
+                 return false; // enclosing is most nested
+         }
+         for (Dsymbol p = dparent; p; p = p.parent)
+         {
+             if (p == enclosing)
+             {
+                 enclosing = dparent;
+                 return false; // dparent is most nested
+             }
+         }
+         //https://issues.dlang.org/show_bug.cgi?id=17870
+         auto pc = dparent.isClassDeclaration();
+         auto ec = enclosing.isClassDeclaration();
+         if (pc && ec)
+         {
+             if (pc.isBaseOf(ec, null))
+                 return false;
+             else if (ec.isBaseOf(pc, null))
+             {
+                 enclosing = dparent;
+                 return false;
+             }
+         }
+         return true;
+     }
+     int search2(Dsymbol sa)
+     {
+         Dsymbol dparent = sa.toParent2();
+         if (search(dparent, _this.enclosing))
+         {
+             .error(_this.loc, "%s `%s` `%s` is nested in both `%s` and `%s`",
+                    _this.kind, _this.toPrettyChars(), _this.toChars(),
+                    _this.enclosing.toChars(), dparent.toChars());
+             _this.errors = true;
+         }
+         //printf("\tnested inside %s as it references %s\n", enclosing.toChars(), sa.toChars());
+         return 1;
+     }
+     int dsym(Dsymbol sa)
+     {
+         sa = sa.toAlias();
+         TemplateDeclaration td = sa.isTemplateDeclaration();
+         if (td)
+         {
+             TemplateInstance ti = sa.toParent().isTemplateInstance();
+             if (ti && ti.enclosing)
+                 sa = ti;
+         }
+         TemplateInstance ti = sa.isTemplateInstance();
+         Declaration d = sa.isDeclaration();
+         if (td && td.literal)
+             return search2(sa);
+         if (ti && ti.enclosing)
+             return search2(sa);
+         if (d && !d.isDataseg()
+               && !(d.storage_class & STC.manifest)
+               && (!d.isFuncDeclaration() || d.isFuncDeclaration().isNested())
+               && !_this.isTemplateMixin())
+         {
+             return search2(sa);
+         }
+         return 0;
+     }
+     /* A nested instance happens when an argument references a local
+      * symbol that is on the stack.
+      */
+     foreach (o; *args)
+     {
+         if (Dsymbol sa = isDsymbol(o))
+         {
+             nested |= dsym(sa);
+             continue;
+         }
+         else if (Tuple va = isTuple(o))
+         {
+             nested |= cast(int)_this.hasNestedArgs(&va.objects, isstatic);
+             continue;
+         }
+         Expression ea = isExpression(o);
+         if (!ea)
+             continue;
+ 
+         if (auto ve = ea.isVarExp())
+         {
+             nested |= dsym(ve.var);
+             continue;
+         }
+         if (auto te = ea.isThisExp())
+         {
+             nested |= dsym(te.var);
+             continue;
+         }
+         if (auto fe = ea.isFuncExp())
+         {
+             nested |= dsym(fe.td? fe.td : fe.fd);
+             continue;
+         }
+         // Emulate Expression.toMangleBuffer call that had exist in TemplateInstance.genIdent.
+         if (ea.op != EXP.int64 && ea.op != EXP.float64 && ea.op != EXP.complex80 && ea.op != EXP.null_ && ea.op != EXP.string_ && ea.op != EXP.arrayLiteral && ea.op != EXP.assocArrayLiteral && ea.op != EXP.structLiteral)
+         {
+             if (!ea.type.isTypeError())
+                 .error(ea.loc, "%s `%s` expression `%s` is not a valid template value argument", _this.kind, _this.toPrettyChars, ea.toChars());
+             _this.errors = true;
+         }
+     }
+     //printf("-TemplateInstance.hasNestedArgs('%s') = %d\n", tempdecl.ident.toChars(), nested);
+     return nested != 0;
+ }
+ 
+ /// Pair of MATCHes
+ private struct MATCHpair
+ {
+     MATCH mta;  /// match template parameters by initial template arguments
+     MATCH mfa;  /// match template parameters by inferred template arguments
+ 
+     debug this(MATCH mta, MATCH mfa)
+     {
+         assert(MATCH.min <= mta && mta <= MATCH.max);
+         assert(MATCH.min <= mfa && mfa <= MATCH.max);
+         this.mta = mta;
+         this.mfa = mfa;
+     }
+ }
+ 
+ /*****************************************
+  * Append `ti` to the specific module `ti.members[]`
+  */
+ private Dsymbols* appendToModuleMember(TemplateInstance ti)
+ {
+     Module mi = ti.minst; // instantiated . inserted module
+ 
+     //printf("%s.appendToModuleMember() enclosing = %s mi = %s\n",
+     //    toPrettyChars(),
+     //    enclosing ? enclosing.toPrettyChars() : null,
+     //    mi ? mi.toPrettyChars() : null);
+     if (global.params.allInst || !mi || mi.isRoot())
+     {
+         /* If the instantiated module is speculative or root, insert to the
+          * member of a root module. Then:
+          *  - semantic3 pass will get called on the instance members.
+          *  - codegen pass will get a selection chance to do/skip it (needsCodegen()).
+          */
+         static Dsymbol getStrictEnclosing(TemplateInstance ti)
+         {
+             do
+             {
+                 if (ti.enclosing)
+                     return ti.enclosing;
+                 ti = ti.tempdecl.isInstantiated();
+             } while (ti);
+             return null;
+         }
+ 
+         Dsymbol enc = getStrictEnclosing(ti);
+         // insert target is made stable by using the module
+         // where tempdecl is declared.
+         mi = (enc ? enc : ti.tempdecl).getModule();
+         if (!mi.isRoot())
+         {
+             if (mi.importedFrom)
+             {
+                 mi = mi.importedFrom;
+                 assert(mi.isRoot());
+             }
+             else
+             {
+                 // This can happen when using the frontend as a library.
+                 // Append it to the non-root module.
+             }
+         }
+     }
+     else
+     {
+         /* If the instantiated module is non-root, insert to the member of the
+          * non-root module. Then:
+          *  - semantic3 pass won't be called on the instance.
+          *  - codegen pass won't reach to the instance.
+          * Unless it is re-appended to a root module later (with changed minst).
+          */
+     }
+     //printf("\t-. mi = %s\n", mi.toPrettyChars());
+ 
+     if (ti.memberOf) // already appended to some module
+     {
+         assert(mi.isRoot(), "can only re-append to a root module");
+         if (ti.memberOf.isRoot())
+             return null; // no need to move to another root module
+     }
+ 
+     Dsymbols* a = mi.members;
+     a.push(ti);
+     ti.memberOf = mi;
+     if (mi.semanticRun >= PASS.semantic2done && mi.isRoot())
+         addDeferredSemantic2(ti);
+     if (mi.semanticRun >= PASS.semantic3done && mi.isRoot())
+         addDeferredSemantic3(ti);
+     return a;
+ }
+ 
+ private void expandMembers(TemplateInstance ti,Scope* sc2)
+ {
+     ti.members.foreachDsymbol( (s) { s.setScope (sc2); } );
+ 
+     ti.members.foreachDsymbol( (s) { s.importAll(sc2); } );
+ 
+     if (!ti.aliasdecl)
+     {
+         /* static if's are crucial to evaluating aliasdecl correctly. But
+          * evaluating the if/else bodies may require aliasdecl.
+          * So, evaluate the condition for static if's, but not their if/else bodies.
+          * Then try to set aliasdecl.
+          * Later do the if/else bodies.
+          * https://issues.dlang.org/show_bug.cgi?id=23598
+          * It might be better to do this by attaching a lambda to the StaticIfDeclaration
+          * to do the oneMembers call after the sid.include(sc2) is run as part of dsymbolSemantic().
+          */
+         bool done;
+         void staticIfDg(Dsymbol s)
+         {
+             if (done || ti.aliasdecl)
+                 return;
+             //printf("\t staticIfDg on '%s %s' in '%s'\n",  s.kind(), s.toChars(), this.toChars());
+             if (!s.isStaticIfDeclaration())
+             {
+                 //s.dsymbolSemantic(sc2);
+                 done = true;
+                 return;
+             }
+             auto sid = s.isStaticIfDeclaration();
+             sid.include(sc2);
+             if (ti.members.length)
+             {
+                 Dsymbol sa;
+                 if (oneMembers(ti.members, sa, ti.tempdecl.ident) && sa)
+                     ti.aliasdecl = sa;
+             }
+             done = true;
+         }
+ 
+         ti.members.foreachDsymbol(&staticIfDg);
+     }
+ 
+     void symbolDg(Dsymbol s)
+     {
+         //printf("\t semantic on '%s' %p kind %s in '%s'\n",  s.toChars(), s, s.kind(), this.toChars());
+         //printf("test: enclosing = %d, sc2.parent = %s\n", enclosing, sc2.parent.toChars());
+         //if (enclosing)
+         //    s.parent = sc.parent;
+         //printf("test3: enclosing = %d, s.parent = %s\n", enclosing, s.parent.toChars());
+         s.dsymbolSemantic(sc2);
+         //printf("test4: enclosing = %d, s.parent = %s\n", enclosing, s.parent.toChars());
+         runDeferredSemantic();
+     }
+ 
+     ti.members.foreachDsymbol(&symbolDg);
+ }
+ 
+ private void tryExpandMembers(TemplateInstance ti, Scope* sc2)
+ {
+     __gshared int nest;
+     // extracted to a function to allow windows SEH to work without destructors in the same function
+     //printf("%d\n", nest);
+     if (++nest > global.recursionLimit)
+     {
+         global.gag = 0; // ensure error message gets printed
+         .error(ti.loc, "%s `%s` recursive expansion exceeded allowed nesting limit", ti.kind, ti.toPrettyChars);
+         fatal();
+     }
+ 
+     ti.expandMembers(sc2);
+ 
+     nest--;
+ }
+ 
+ private void trySemantic3(TemplateInstance ti, Scope* sc2)
+ {
+     // extracted to a function to allow windows SEH to work without destructors in the same function
+     __gshared int nest;
+     //printf("%d\n", nest);
+     if (++nest > global.recursionLimit)
+     {
+         global.gag = 0; // ensure error message gets printed
+         .error(ti.loc, "%s `%s` recursive expansion exceeded allowed nesting limit", ti.kind, ti.toPrettyChars);
+         fatal();
+     }
+ 
+     semantic3(ti, sc2);
+ 
+     --nest;
+ }
+ 
+ debug (FindExistingInstance)
+ {
+     private __gshared uint nFound, nNotFound, nAdded, nRemoved;
+ 
+     shared static ~this()
+     {
+         printf("debug (FindExistingInstance) nFound %u, nNotFound: %u, nAdded: %u, nRemoved: %u\n",
+                nFound, nNotFound, nAdded, nRemoved);
+     }
+ }
+ 
+ /******************************************************
+  * Do template instance semantic for isAlias templates.
+  * This is a greatly simplified version of templateInstanceSemantic().
+  */
+ private
+ void aliasInstanceSemantic(TemplateInstance tempinst, Scope* sc, TemplateDeclaration tempdecl)
+ {
+     //printf("[%s] aliasInstance.dsymbolSemantic('%s')\n", tempinst.loc.toChars(), tempinst.toChars());
+     Scope* paramscope = sc.push();
+     paramscope.stc = STC.none;
+     paramscope.visibility = Visibility(Visibility.Kind.public_);
+ 
+     TemplateTypeParameter ttp = (*tempdecl.parameters)[0].isTemplateTypeParameter();
+     Type ta = tempinst.tdtypes[0].isType();
+     tempdecl.computeOneMember();
+     auto ad = tempdecl.onemember.isAliasDeclaration();
+ 
+     // Note: qualifiers can be in both 'ad.type.mod' and 'ad.storage_class'
+     Declaration d = new AliasDeclaration(tempinst.loc, ttp.ident, ta.addMod(ad.type.mod));
+     d.storage_class |= STC.templateparameter | ad.storage_class;
+     d.dsymbolSemantic(sc);
+ 
+     paramscope.pop();
+ 
+     tempinst.aliasdecl = d;
+ 
+     tempinst.semanticRun = PASS.semanticdone;
+ }
+ 
+ /****************************************************
+  * Given a new instance `tithis` of this TemplateDeclaration,
+  * see if there already exists an instance.
+  *
+  * Params:
+  *   td = template declaration
+  *   tithis = template instance to check
+  *   argumentList = For function templates, needed because different
+  *                  `auto ref` resolutions create different instances,
+  *                  even when template parameters are identical
+  *
+  * Returns: that existing instance, or `null` when it doesn't exist
+  */
+ private TemplateInstance findExistingInstance(TemplateDeclaration td, TemplateInstance tithis,
+                                       ArgumentList argumentList)
+ {
+     //printf("findExistingInstance() %s\n", tithis.toChars());
+     tithis.fargs = argumentList.arguments;
+     tithis.fnames = argumentList.names;
+     auto tibox = TemplateInstanceBox(tithis);
+     auto p = tibox in cast(TemplateInstance[TemplateInstanceBox]) td.instances;
+     debug (FindExistingInstance) ++(p ? nFound : nNotFound);
+     //if (p) printf("\tfound %p\n", *p); else printf("\tnot found\n");
+     return p ? *p : null;
+ }
+ 
+ /********************************************
+  * Add instance ti to TemplateDeclaration's table of instances.
+  * Return a handle we can use to later remove it if it fails instantiation.
+  */
+ private TemplateInstance addInstance(TemplateDeclaration td, TemplateInstance ti)
+ {
+     //printf("addInstance() %p %s\n", instances, ti.toChars());
+     auto tibox = TemplateInstanceBox(ti);
+     (*(cast(TemplateInstance[TemplateInstanceBox]*) &td.instances))[tibox] = ti;
+     debug (FindExistingInstance) ++nAdded;
+     return ti;
+ }
+ 
+ /*******************************************
+  * Remove TemplateInstance from table of instances.
+  * Input:
+  *      handle returned by addInstance()
+  */
+ private void removeInstance(TemplateDeclaration td, TemplateInstance ti)
+ {
+     //printf("removeInstance() %s\n", ti.toChars());
+     auto tibox = TemplateInstanceBox(ti);
+     debug (FindExistingInstance) ++nRemoved;
+     (cast(TemplateInstance[TemplateInstanceBox])td.instances).remove(tibox);
+ }
+ 
+ /******************************************************
+  * Do template instance semantic for isAliasSeq templates.
+  * This is a greatly simplified version of templateInstanceSemantic().
+  */
+ private
+ void aliasSeqInstanceSemantic(TemplateInstance tempinst, Scope* sc, TemplateDeclaration tempdecl)
+ {
+     //printf("[%s] aliasSeqInstance.dsymbolSemantic('%s')\n", tempinst.loc.toChars(), tempinst.toChars());
+     Scope* paramscope = sc.push();
+     paramscope.stc = STC.none;
+     paramscope.visibility = Visibility(Visibility.Kind.public_);
+ 
+     TemplateTupleParameter ttp = (*tempdecl.parameters)[0].isTemplateTupleParameter();
+     Tuple va = tempinst.tdtypes[0].isTuple();
+     Declaration d = new TupleDeclaration(tempinst.loc, ttp.ident, &va.objects);
+     d.storage_class |= STC.templateparameter;
+     d.dsymbolSemantic(sc);
+ 
+     paramscope.pop();
+ 
+     tempinst.aliasdecl = d;
+ 
+     tempinst.semanticRun = PASS.semanticdone;
+ }
+ 
+ /**********************************************
+  * Find template declaration corresponding to template instance.
+  *
+  * Returns:
+  *      false if finding fails.
+  * Note:
+  *      This function is reentrant against error occurrence. If returns false,
+  *      any members of this object won't be modified, and repetition call will
+  *      reproduce same error.
+  */
+ bool findTempDecl(TemplateInstance ti, Scope* sc, WithScopeSymbol* pwithsym)
+ {
+     if (pwithsym)
+         *pwithsym = null;
+ 
+     if (ti.havetempdecl)
+         return true;
+ 
+     //printf("TemplateInstance.findTempDecl() %s\n", toChars());
+     if (!ti.tempdecl)
+     {
+         /* Given:
+          *    foo!( ... )
+          * figure out which TemplateDeclaration foo refers to.
+          */
+         Identifier id = ti.name;
+         Dsymbol scopesym;
+         Dsymbol s = sc.search(ti.loc, id, scopesym);
+         if (!s)
+         {
+             s = sc.search_correct(id);
+             if (s)
+                 .error(ti.loc, "%s `%s` template `%s` is not defined, did you mean %s?", ti.kind, ti.toPrettyChars(), id.toChars(), s.toChars());
+             else
+                 .error(ti.loc, "%s `%s` template `%s` is not defined", ti.kind, ti.toPrettyChars(), id.toChars());
+             return false;
+         }
+         static if (LOG)
+         {
+             printf("It's an instance of '%s' kind '%s'\n", s.toChars(), s.kind());
+             if (s.parent)
+                 printf("s.parent = '%s'\n", s.parent.toChars());
+         }
+         if (pwithsym)
+             *pwithsym = scopesym.isWithScopeSymbol();
+ 
+         /* We might have found an alias within a template when
+          * we really want the template.
+          */
+         TemplateInstance ti2;
+         if (s.parent && (ti2 = s.parent.isTemplateInstance()) !is null)
+         {
+             if (ti2.tempdecl && ti2.tempdecl.ident == id)
+             {
+                 /* This is so that one can refer to the enclosing
+                  * template, even if it has the same name as a member
+                  * of the template, if it has a !(arguments)
+                  */
+                 TemplateDeclaration td = ti2.tempdecl.isTemplateDeclaration();
+                 assert(td);
+                 if (td.overroot) // if not start of overloaded list of TemplateDeclaration's
+                     td = td.overroot; // then get the start
+                 s = td;
+             }
+         }
+ 
+         // The template might originate from a selective import which implies that
+         // s is a lowered AliasDeclaration of the actual TemplateDeclaration.
+         // This is the last place where we see the deprecated alias because it is
+         // stripped below, so check if the selective import was deprecated.
+         // See https://issues.dlang.org/show_bug.cgi?id=20840.
+         if (s.isAliasDeclaration())
+             s.checkDeprecated(ti.loc, sc);
+ 
+         if (!ti.updateTempDecl(sc, s))
+         {
+             return false;
+         }
+     }
+     assert(ti.tempdecl);
+ 
+     // Look for forward references
+     auto tovers = ti.tempdecl.isOverloadSet();
+     foreach (size_t oi; 0 .. tovers ? tovers.a.length : 1)
+     {
+         Dsymbol dstart = tovers ? tovers.a[oi] : ti.tempdecl;
+         int r = overloadApply(dstart, (Dsymbol s)
+         {
+             auto td = s.isTemplateDeclaration();
+             if (!td)
+                 return 0;
+ 
+             if (td.semanticRun == PASS.initial)
+             {
+                 if (td._scope)
+                 {
+                     // Try to fix forward reference. Ungag errors while doing so.
+                     auto ungag = td.ungagSpeculative();
+                     td.dsymbolSemantic(td._scope);
+                 }
+                 if (td.semanticRun == PASS.initial)
+                 {
+                     .error(ti.loc, "%s `%s` `%s` forward references template declaration `%s`",
+                            ti.kind, ti.toPrettyChars(), ti.toChars(), td.toChars());
+                     return 1;
+                 }
+             }
+             return 0;
+         });
+         if (r)
+             return false;
+     }
+     return true;
+ }
+ 
+ bool findMixinTempDecl(TemplateMixin tm, Scope* sc)
+ {
+     // Follow qualifications to find the TemplateDeclaration
+     if (!tm.tempdecl)
+     {
+         Expression e;
+         Type t;
+         Dsymbol s;
+         tm.tqual.resolve(tm.loc, sc, e, t, s);
+         if (!s)
+         {
+             .error(tm.loc, "%s `%s` is not defined", tm.kind, tm.toPrettyChars);
+             return false;
+         }
+         s = s.toAlias();
+         tm.tempdecl = s.isTemplateDeclaration();
+         OverloadSet os = s.isOverloadSet();
+ 
+         /* If an OverloadSet, look for a unique member that is a template declaration
+          */
+         if (os)
+         {
+             Dsymbol ds = null;
+             foreach (i, sym; os.a)
+             {
+                 Dsymbol s2 = sym.isTemplateDeclaration();
+                 if (s2)
+                 {
+                     if (ds)
+                     {
+                         tm.tempdecl = os;
+                         break;
+                     }
+                     ds = s2;
+                 }
+             }
+         }
+         if (!tm.tempdecl)
+         {
+             .error(tm.loc, "%s `%s` - `%s` is a %s, not a template", tm.kind,
+                    tm.toPrettyChars, s.toChars(), s.kind());
+             return false;
+         }
+     }
+     assert(tm.tempdecl);
+ 
+     // Look for forward references
+     auto tovers = tm.tempdecl.isOverloadSet();
+     foreach (size_t oi; 0 .. tovers ? tovers.a.length : 1)
+     {
+         Dsymbol dstart = tovers ? tovers.a[oi] : tm.tempdecl;
+         int r = overloadApply(dstart, (Dsymbol s)
+         {
+             auto td = s.isTemplateDeclaration();
+             if (!td)
+                 return 0;
+ 
+             if (td.semanticRun == PASS.initial)
+             {
+                 if (td._scope)
+                     td.dsymbolSemantic(td._scope);
+                 else
+                 {
+                     tm.semanticRun = PASS.initial;
+                     return 1;
+                 }
+             }
+             return 0;
+         });
+         if (r)
+             return false;
+     }
+     return true;
+ }
+ 
+ /******************************************************
+  * Verifies if the given Identifier is a DRuntime hook. It uses the hooks
+  * defined in `id.d`.
+  *
+  * Params:
+  *  id = Identifier to verify
+  * Returns:
+  *  true if `id` is a DRuntime hook
+  *  false otherwise
+  */
+ private bool isDRuntimeHook(Identifier id)
+ {
+     return id == Id._d_HookTraceImpl ||
+         id == Id._d_newclassT || id == Id._d_newclassTTrace ||
+         id == Id._d_arraycatnTX || id == Id._d_arraycatnTXTrace ||
+         id == Id._d_newThrowable || id == Id._d_delThrowable ||
+         id == Id._d_arrayassign_l || id == Id._d_arrayassign_r ||
+         id == Id._d_arraysetassign || id == Id._d_arraysetctor ||
+         id == Id._d_arrayctor ||
+         id == Id._d_arraysetlengthT ||
+         id == Id._d_arraysetlengthTTrace ||
+         id == Id._d_arrayappendT || id == Id._d_arrayappendTTrace ||
+         id == Id._d_arrayappendcTX;
+ }
+ 
+ /******************************
+  * See if two objects match
+  * Params:
+  *      o1 = first object
+  *      o2 = second object
+  * Returns: true if they match
+  */
+ private bool match(RootObject o1, RootObject o2)
+ {
+     enum log = false;
+ 
+     static if (log)
+     {
+         printf("match() o1 = %p %s (%d), o2 = %p %s (%d)\n",
+             o1, o1.toChars(), o1.dyncast(), o2, o2.toChars(), o2.dyncast());
+     }
+ 
+     bool yes()
+     {
+         static if (log)
+             printf("\t. match\n");
+         return true;
+     }
+     bool no()
+     {
+         static if (log)
+             printf("\t. nomatch\n");
+         return false;
+     }
+     /* A proper implementation of the various equals() overrides
+      * should make it possible to just do o1.equals(o2), but
+      * we'll do that another day.
+      */
+     /* Manifest constants should be compared by their values,
+      * at least in template arguments.
+      */
+ 
+     if (auto t1 = isType(o1))
+     {
+         auto t2 = isType(o2);
+         if (!t2)
+             return no();
+ 
+         static if (log)
+         {
+             printf("\tt1 = %s\n", t1.toChars());
+             printf("\tt2 = %s\n", t2.toChars());
+         }
+         if (!t1.equals(t2))
+             return no();
+ 
+         return yes();
+     }
+     if (auto e1 = getExpression(o1))
+     {
+         auto e2 = getExpression(o2);
+         if (!e2)
+             return no();
+ 
+         static if (log)
+         {
+             printf("\te1 = %s '%s' %s\n", e1.type ? e1.type.toChars() : "null", EXPtoString(e1.op).ptr, e1.toChars());
+             printf("\te2 = %s '%s' %s\n", e2.type ? e2.type.toChars() : "null", EXPtoString(e2.op).ptr, e2.toChars());
+         }
+ 
+         // two expressions can be equal although they do not have the same
+         // type; that happens when they have the same value. So check type
+         // as well as expression equality to ensure templates are properly
+         // matched.
+         if (!(e1.type && e2.type && e1.type.equals(e2.type)) || !e1.equals(e2))
+             return no();
+ 
+         return yes();
+     }
+     if (auto s1 = isDsymbol(o1))
+     {
+         auto s2 = isDsymbol(o2);
+         if (!s2)
+             return no();
+ 
+         static if (log)
+         {
+             printf("\ts1 = %s \n", s1.kind(), s1.toChars());
+             printf("\ts2 = %s \n", s2.kind(), s2.toChars());
+         }
+         if (!s1.equals(s2))
+             return no();
+         if (s1.parent != s2.parent && !s1.isFuncDeclaration() && !s2.isFuncDeclaration())
+             return no();
+ 
+         return yes();
+     }
+     if (auto u1 = isTuple(o1))
+     {
+         auto u2 = isTuple(o2);
+         if (!u2)
+             return no();
+ 
+         static if (log)
+         {
+             printf("\tu1 = %s\n", u1.toChars());
+             printf("\tu2 = %s\n", u2.toChars());
+         }
+         if (!arrayObjectMatch(u1.objects, u2.objects))
+             return no();
+ 
+         return yes();
+     }
+     return yes();
+ }
+ 
+ /************************************
+  * Match an array of them.
+  */
+ private bool arrayObjectMatch(ref Objects oa1, ref Objects oa2)
+ {
+     if (&oa1 == &oa2)
+         return true;
+     if (oa1.length != oa2.length)
+         return false;
+     immutable oa1dim = oa1.length;
+     auto oa1d = oa1[].ptr;
+     auto oa2d = oa2[].ptr;
+     foreach (j; 0 .. oa1dim)
+     {
+         RootObject o1 = oa1d[j];
+         RootObject o2 = oa2d[j];
+         if (!match(o1, o2))
+         {
+             return false;
+         }
+     }
+     return true;
+ }
+ 
+ 
+ /*************************************
+  * Compare proposed template instantiation with existing template instantiation.
+  * Note that this is not commutative because of the auto ref check.
+  * Params:
+  *  ti1 = proposed template instantiation
+  *  ti2 = existing template instantiation
+  * Returns:
+  *  true for match
+  */
+ private bool equalsx(TemplateInstance ti1, TemplateInstance ti2)
+ {
+     //printf("this = %p, ti2 = %p\n", this, ti2);
+     assert(ti1.tdtypes.length == ti2.tdtypes.length);
+ 
+     // Nesting must match
+     if (ti1.enclosing != ti2.enclosing)
+     {
+         //printf("test2 enclosing %s ti2.enclosing %s\n",
+         //       enclosing ? enclosing.toChars() : "", ti2.enclosing ? ti.enclosing.toChars() : "");
+         return false;
+     }
+     //printf("parent = %s, ti2.parent = %s\n", parent.toPrettyChars(), ti2.parent.toPrettyChars());
+ 
+     if (!arrayObjectMatch(ti1.tdtypes, ti2.tdtypes))
+         return false;
+ 
+     /* Template functions may have different instantiations based on
+      * "auto ref" parameters.
+      */
+     auto fd = ti2.toAlias().isFuncDeclaration();
+     if (!fd)
+         return true;
+     if (fd.errors)
+         return true;
+ 
+     auto resolvedArgs = fd.type.isTypeFunction().resolveNamedArgs(
+         ArgumentList(ti1.fargs, ti1.fnames), null);
+ 
+     // resolvedArgs can be null when there's an error: fail_compilation/fail14669.d
+     // In that case, equalsx returns true to prevent endless template instantiations
+     // However, it can also mean the function was explicitly instantiated
+     // without function arguments: fail_compilation/fail14669
+     // Hence the following check:
+     if (ti1.fargs && !resolvedArgs)
+         return true;
+ 
+     Expression[] args = resolvedArgs ? (*resolvedArgs)[] : [];
+ 
+     auto fparameters = fd.getParameterList();
+     size_t nfparams = fparameters.length;   // Num function parameters
+     for (size_t j = 0; j < nfparams; j++)
+     {
+         Parameter fparam = fparameters[j];
+         if (!(fparam.storageClass & STC.autoref) )      // if "auto ref"
+             continue;
+ 
+         Expression farg = (j < args.length) ? args[j] : fparam.defaultArg;
+         // resolveNamedArgs strips trailing nulls / default params
+         // when it doesn't anymore, the ternary can be replaced with:
+         // assert(j < resolvedArgs.length);
+         if (!farg)
+             farg = fparam.defaultArg;
+         if (!farg)
+             return false;
+         if (farg.isLvalue())
+         {
+             if (!(fparam.storageClass & STC.ref_))
+                 return false; // auto ref's don't match
+         }
+         else
+         {
+             if (fparam.storageClass & STC.ref_)
+                 return false; // auto ref's don't match
+         }
+     }
+     return true;
+ }
+ 
+ 
  /*******************************************
   * Match to a particular TemplateParameter.
   * Input:
*************** MATCH matchArg(TemplateParameter tp, Loc
*** 284,290 ****
      return matchArgParameter();
  }
  
! MATCH matchArg(TemplateParameter tp, Scope* sc, RootObject oarg, size_t i, TemplateParameters* parameters, ref Objects dedtypes, Declaration* psparam)
  {
      MATCH matchArgNoMatch()
      {
--- 2455,2461 ----
      return matchArgParameter();
  }
  
! private MATCH matchArg(TemplateParameter tp, Scope* sc, RootObject oarg, size_t i, TemplateParameters* parameters, ref Objects dedtypes, Declaration* psparam)
  {
      MATCH matchArgNoMatch()
      {
*************** bool updateTempDecl(TemplateInstance ti,
*** 734,745 ****
      if (!s.parent && global.errors)
          return false;
  
!     if (!s.parent && s.getType())
      {
!         Dsymbol s2 = s.getType().toDsymbol(sc);
          if (!s2)
          {
!             .error(ti.loc, "`%s` is not a valid template instance, because `%s` is not a template declaration but a type (`%s == %s`)", ti.toChars(), id.toChars(), id.toChars(), s.getType.kind());
              return false;
          }
          // because s can be the alias created for a TemplateParameter
--- 2905,2916 ----
      if (!s.parent && global.errors)
          return false;
  
!     if (!s.parent && dmd.dsymbolsem.getType(s))
      {
!         Dsymbol s2 = dmd.dsymbolsem.getType(s).toDsymbol(sc);
          if (!s2)
          {
!             .error(ti.loc, "`%s` is not a valid template instance, because `%s` is not a template declaration but a type (`%s == %s`)", ti.toChars(), id.toChars(), id.toChars(), dmd.dsymbolsem.getType(s).kind());
              return false;
          }
          // because s can be the alias created for a TemplateParameter
*************** MATCH matchWithInstance(Scope* sc, Templ
*** 914,919 ****
--- 3085,3091 ----
              ti.parent = td.parent;
  
          // Similar to doHeaderInstantiation
+         td.computeOneMember();
          FuncDeclaration fd = td.onemember ? td.onemember.isFuncDeclaration() : null;
          if (fd)
          {
*************** bool needsCodegen(TemplateInstance ti)
*** 1210,1216 ****
  /****************************
   * Check to see if constraint is satisfied.
   */
! bool evaluateConstraint(TemplateDeclaration td, TemplateInstance ti, Scope* sc, Scope* paramscope, Objects* dedargs, FuncDeclaration fd)
  {
      /* Detect recursive attempts to instantiate this template declaration,
       * https://issues.dlang.org/show_bug.cgi?id=4072
--- 3382,3388 ----
  /****************************
   * Check to see if constraint is satisfied.
   */
! private bool evaluateConstraint(TemplateDeclaration td, TemplateInstance ti, Scope* sc, Scope* paramscope, Objects* dedargs, FuncDeclaration fd)
  {
      /* Detect recursive attempts to instantiate this template declaration,
       * https://issues.dlang.org/show_bug.cgi?id=4072
*************** bool evaluateConstraint(TemplateDeclarat
*** 1342,1348 ****
  const(char)* getConstraintEvalError(TemplateDeclaration td, ref const(char)* tip)
  {
      import dmd.staticcond;
- 
      // there will be a full tree view in verbose mode, and more compact list in the usual
      const full = global.params.v.verbose;
      uint count;
--- 3514,3519 ----
*************** bool findBestMatch(TemplateInstance ti,
*** 1565,1570 ****
--- 3736,3742 ----
      else
      {
          auto tdecl = ti.tempdecl.isTemplateDeclaration();
+         tdecl.computeOneMember();
  
          if (errs != global.errors)
              errorSupplemental(ti.loc, "while looking for match for `%s`", ti.toChars());
*************** private void formatParamsWithTiargs(ref
*** 1711,1717 ****
   * Returns:
   *      new scope for the parameters of ti
   */
! Scope* createScopeForTemplateParameters(TemplateDeclaration td, TemplateInstance ti, Scope* sc)
  {
      ScopeDsymbol paramsym = new ScopeDsymbol();
      paramsym.parent = td._scope.parent;
--- 3883,3889 ----
   * Returns:
   *      new scope for the parameters of ti
   */
! private Scope* createScopeForTemplateParameters(TemplateDeclaration td, TemplateInstance ti, Scope* sc)
  {
      ScopeDsymbol paramsym = new ScopeDsymbol();
      paramsym.parent = td._scope.parent;
*************** L1:
*** 1793,1799 ****
      return MATCH.nomatch;
  }
  
! RootObject defaultArg(TemplateParameter tp, Loc instLoc, Scope* sc)
  {
      if (tp.isTemplateTupleParameter())
          return null;
--- 3965,3971 ----
      return MATCH.nomatch;
  }
  
! private RootObject defaultArg(TemplateParameter tp, Loc instLoc, Scope* sc)
  {
      if (tp.isTemplateTupleParameter())
          return null;
*************** RootObject defaultArg(TemplateParameter
*** 1880,1886 ****
   * Returns:
   *      match pair of initial and inferred template arguments
   */
! extern (D) MATCHpair deduceFunctionTemplateMatch(TemplateDeclaration td, TemplateInstance ti, Scope* sc, ref FuncDeclaration fd, Type tthis, ArgumentList argumentList)
  {
      version (none)
      {
--- 4052,4058 ----
   * Returns:
   *      match pair of initial and inferred template arguments
   */
! private MATCHpair deduceFunctionTemplateMatch(TemplateDeclaration td, TemplateInstance ti, Scope* sc, ref FuncDeclaration fd, Type tthis, ArgumentList argumentList)
  {
      version (none)
      {
*************** extern (D) MATCHpair deduceFunctionTempl
*** 2362,2368 ****
                                      return nomatch();
                                  if (m2 < matchTiargs)
                                      matchTiargs = m2; // pick worst match
!                                 if (!(*dedtypes)[i].equals(oded))
                                      .error(td.loc, "%s `%s` specialization not allowed for deduced parameter `%s`",
                                          td.kind, td.toPrettyChars, td.kind, td.toPrettyChars, tparam.ident.toChars());
                              }
--- 4534,4540 ----
                                      return nomatch();
                                  if (m2 < matchTiargs)
                                      matchTiargs = m2; // pick worst match
!                                 if (!rootObjectsEqual((*dedtypes)[i], oded))
                                      .error(td.loc, "%s `%s` specialization not allowed for deduced parameter `%s`",
                                          td.kind, td.toPrettyChars, td.kind, td.toPrettyChars, tparam.ident.toChars());
                              }
*************** Lmatch:
*** 2765,2771 ****
                      return nomatch();
                  if (m2 < matchTiargs)
                      matchTiargs = m2; // pick worst match
!                 if (!(*dedtypes)[i].equals(oded))
                      .error(td.loc, "%s `%s` specialization not allowed for deduced parameter `%s`", td.kind, td.toPrettyChars, tparam.ident.toChars());
              }
              else
--- 4937,4943 ----
                      return nomatch();
                  if (m2 < matchTiargs)
                      matchTiargs = m2; // pick worst match
!                 if (!rootObjectsEqual((*dedtypes)[i],oded))
                      .error(td.loc, "%s `%s` specialization not allowed for deduced parameter `%s`", td.kind, td.toPrettyChars, tparam.ident.toChars());
              }
              else
*************** Lmatch:
*** 2812,2818 ****
                      return nomatch();
                  if (m2 < matchTiargs)
                      matchTiargs = m2; // pick worst match
!                 if (!(*dedtypes)[i].equals(oded))
                      .error(td.loc, "%s `%s` specialization not allowed for deduced parameter `%s`", td.kind, td.toPrettyChars, tparam.ident.toChars());
              }
          }
--- 4984,4990 ----
                      return nomatch();
                  if (m2 < matchTiargs)
                      matchTiargs = m2; // pick worst match
!                 if (!rootObjectsEqual((*dedtypes)[i], oded))
                      .error(td.loc, "%s `%s` specialization not allowed for deduced parameter `%s`", td.kind, td.toPrettyChars, tparam.ident.toChars());
              }
          }
*************** FuncDeclaration doHeaderInstantiation(Te
*** 2962,2971 ****
      return fd;
  }
  
  /**************************************************
   * Declare template parameter tp with value o, and install it in the scope sc.
   */
! extern (D) RootObject declareParameter(TemplateDeclaration td, Scope* sc, TemplateParameter tp, RootObject o)
  {
      //printf("TemplateDeclaration.declareParameter('%s', o = %p)\n", tp.ident.toChars(), o);
      Type ta = isType(o);
--- 5134,5160 ----
      return fd;
  }
  
+ /****************************************************
+  * Declare parameters of template instance, initialize them with the
+  * template instance arguments.
+  */
+ void declareParameters(TemplateInstance ti, Scope* sc)
+ {
+     TemplateDeclaration tempdecl = ti.tempdecl.isTemplateDeclaration();
+     assert(tempdecl);
+ 
+     //printf("TemplateInstance.declareParameters()\n");
+     foreach (i, o; ti.tdtypes) // initializer for tp
+     {
+         TemplateParameter tp = (*tempdecl.parameters)[i];
+         //printf("\ttdtypes[%d] = %p\n", i, o);
+         declareParameter(tempdecl, sc, tp, o);
+     }
+ }
  /**************************************************
   * Declare template parameter tp with value o, and install it in the scope sc.
   */
! private RootObject declareParameter(TemplateDeclaration td, Scope* sc, TemplateParameter tp, RootObject o)
  {
      //printf("TemplateDeclaration.declareParameter('%s', o = %p)\n", tp.ident.toChars(), o);
      Type ta = isType(o);
*************** extern (D) RootObject declareParameter(T
*** 3063,3068 ****
--- 5252,5282 ----
  }
  
  /**********************************
+  * Run semantic on the elements of `ti.tiargs`.
+  * Input:
+  *      ti = template instance whose `tiargs` should have semantic done
+  *      sc = scope
+  * Returns:
+  *      false if one or more arguments have errors.
+  * Note:
+  *      This function is reentrant against error occurrence. If returns false,
+  *      all elements of tiargs won't be modified.
+  */
+ bool semanticTiargs(TemplateInstance ti, Scope* sc)
+ {
+     //printf("+TemplateInstance.semanticTiargs() %s\n", toChars());
+     if (ti.semantictiargsdone)
+         return true;
+     if (TemplateInstance_semanticTiargs(ti.loc, sc, ti.tiargs, 0))
+     {
+         // cache the result iff semantic analysis succeeded entirely
+         ti.semantictiargsdone = 1;
+         return true;
+     }
+     return false;
+ }
+ 
+ /**********************************
   * Run semantic of tiargs as arguments of template.
   * Input:
   *      loc
*************** void functionResolve(ref MatchAccumulato
*** 3588,3594 ****
              return 1;
          }
          //printf("td = %s\n", td.toChars());
! 
          auto f = td.onemember ? td.onemember.isFuncDeclaration() : null;
          if (!f)
          {
--- 5802,5808 ----
              return 1;
          }
          //printf("td = %s\n", td.toChars());
!         td.computeOneMember();
          auto f = td.onemember ? td.onemember.isFuncDeclaration() : null;
          if (!f)
          {
*************** void functionResolve(ref MatchAccumulato
*** 3835,3840 ****
--- 6049,6055 ----
      if (td_best && ti_best && m.count == 1)
      {
          // Matches to template function
+         td_best.computeOneMember();
          assert(td_best.onemember && td_best.onemember.isFuncDeclaration());
          /* The best match is td_best with arguments tdargs.
           * Now instantiate the template.
*************** private MATCH deduceTypeHelper(Type t, o
*** 4263,4269 ****
      }
  }
  
! __gshared Expression emptyArrayElement = null;
  
  /*
   * Returns `true` if `t` is a reference type, or an array of reference types.
--- 6478,6484 ----
      }
  }
  
! private __gshared Expression emptyArrayElement = null;
  
  /*
   * Returns `true` if `t` is a reference type, or an array of reference types.
*************** private MATCH deduceAliasThis(Type t, Sc
*** 4324,4345 ****
  private MATCH deduceParentInstance(Scope* sc, Dsymbol sym, TypeInstance tpi,
      ref TemplateParameters parameters, ref Objects dedtypes, uint* wm)
  {
!     if (tpi.idents.length)
!     {
!         RootObject id = tpi.idents[tpi.idents.length - 1];
!         if (id.dyncast() == DYNCAST.identifier && sym.ident.equals(cast(Identifier)id))
!         {
!             Type tparent = sym.parent.getType();
!             if (tparent)
!             {
!                 tpi.idents.length--;
!                 auto m = deduceType(tparent, sc, tpi, parameters, dedtypes, wm);
!                 tpi.idents.length++;
!                 return m;
!             }
!         }
!     }
!     return MATCH.nomatch;
  }
  
  private MATCH matchAll(TypeDeduced td, Type tt)
--- 6539,6559 ----
  private MATCH deduceParentInstance(Scope* sc, Dsymbol sym, TypeInstance tpi,
      ref TemplateParameters parameters, ref Objects dedtypes, uint* wm)
  {
!     if (!tpi.idents.length)
!         return MATCH.nomatch;
! 
!     RootObject id = tpi.idents[tpi.idents.length - 1];
!     if (id.dyncast() != DYNCAST.identifier || !sym.ident.equals(cast(Identifier)id))
!         return MATCH.nomatch;
! 
!     Type tparent = dmd.dsymbolsem.getType(sym.parent);
!     if (!tparent)
!         return MATCH.nomatch;
! 
!     tpi.idents.length--;
!     auto m = deduceType(tparent, sc, tpi, parameters, dedtypes, wm);
!     tpi.idents.length++;
!     return m;
  }
  
  private MATCH matchAll(TypeDeduced td, Type tt)
*************** MATCH deduceType(scope RootObject o, sco
*** 4464,4470 ****
                              //printf("[%d] s = %s %s, s2 = %s %s\n", j, s.kind(), s.toChars(), s2.kind(), s2.toChars());
                              if (s != s2)
                              {
!                                 if (Type tx = s2.getType())
                                  {
                                      if (s != tx.toDsymbol(sc))
                                          goto Lnomatch;
--- 6678,6684 ----
                              //printf("[%d] s = %s %s, s2 = %s %s\n", j, s.kind(), s.toChars(), s2.kind(), s2.toChars());
                              if (s != s2)
                              {
!                                 if (Type tx = dmd.dsymbolsem.getType(s2))
                                  {
                                      if (s != tx.toDsymbol(sc))
                                          goto Lnomatch;
*************** MATCH deduceType(scope RootObject o, sco
*** 4480,4486 ****
                      //printf("[e] s = %s\n", s?s.toChars():"(null)");
                      if (tp.isTemplateTypeParameter())
                      {
!                         Type tt = s.getType();
                          if (!tt)
                              goto Lnomatch;
                          Type at = cast(Type)dedtypes[i];
--- 6694,6700 ----
                      //printf("[e] s = %s\n", s?s.toChars():"(null)");
                      if (tp.isTemplateTypeParameter())
                      {
!                         Type tt = dmd.dsymbolsem.getType(s);
                          if (!tt)
                              goto Lnomatch;
                          Type at = cast(Type)dedtypes[i];
*************** MATCH deduceType(scope RootObject o, sco
*** 4846,4852 ****
                  {
                      RootObject id1 = t.idents[i];
                      RootObject id2 = tp.idents[i];
!                     if (!id1.equals(id2))
                      {
                          result = MATCH.nomatch;
                          return;
--- 7060,7066 ----
                  {
                      RootObject id1 = t.idents[i];
                      RootObject id2 = tp.idents[i];
!                     if (!rootObjectsEqual(id1, id2))
                      {
                          result = MATCH.nomatch;
                          return;
*************** private void deduceBaseClassParameters(r
*** 5534,5539 ****
--- 7748,7778 ----
      }
  }
  
+ private bool rootObjectsEqual(RootObject o1, RootObject o2)
+ {
+     auto d = o1.dyncast();
+     if (d != o2.dyncast())
+         return false;
+     bool check(T)(RootObject id1, RootObject id2)
+     {
+         return (cast(T)id1).equals(cast(T)id2);
+     }
+     with (DYNCAST) final switch(d)
+     {
+         case expression:   return check!Expression(o1, o2);
+         case dsymbol:      return check!Dsymbol   (o1, o2);
+         case type:         return check!Type      (o1, o2);
+         case identifier: //return check!Identifier(o1, o2); // Identifier.equals checks `o1 is o2`
+         case object:
+         case tuple:
+         case parameter:
+         case statement:
+         case condition:
+         case templateparameter:
+         case initializer:
+             return o1 is o2;
+     }
+ }
  /*
   * Handle tuple matching for function parameters.
   * If the last parameter of `tp` is a template tuple parameter,
*************** private bool deduceFunctionTuple(TypeFun
*** 5551,5603 ****
      ref TemplateParameters parameters, ref Objects dedtypes,
      size_t nfargs, ref size_t nfparams)
  {
!     if (nfparams > 0 && nfargs >= nfparams - 1)
      {
!         Parameter fparam = tp.parameterList[nfparams - 1];
!         assert(fparam && fparam.type);
!         if (fparam.type.ty == Tident)
!         {
!             TypeIdentifier tid = fparam.type.isTypeIdentifier();
!             if (tid.idents.length == 0)
!             {
!                 size_t tupi = 0;
!                 for (; tupi < parameters.length; ++tupi)
!                 {
!                     TemplateParameter tx = parameters[tupi];
!                     TemplateTupleParameter tup = tx.isTemplateTupleParameter();
!                     if (tup && tup.ident.equals(tid.ident))
!                         break;
!                 }
!                 if (tupi == parameters.length)
!                     return nfargs == nfparams;
  
!                 size_t tuple_dim = nfargs - (nfparams - 1);
  
!                 RootObject o = dedtypes[tupi];
!                 if (o)
!                 {
!                     Tuple tup = isTuple(o);
!                     if (!tup || tup.objects.length != tuple_dim)
!                         return false;
!                     for (size_t i = 0; i < tuple_dim; ++i)
!                     {
!                         if (!t.parameterList[nfparams - 1 + i].type.equals(tup.objects[i]))
!                             return false;
!                     }
!                 }
!                 else
!                 {
!                     auto tup = new Tuple(tuple_dim);
!                     for (size_t i = 0; i < tuple_dim; ++i)
!                         tup.objects[i] = t.parameterList[nfparams - 1 + i].type;
!                     dedtypes[tupi] = tup;
!                 }
!                 --nfparams; // ignore tuple parameter for further deduction
!                 return true;
!             }
          }
      }
!     return nfargs == nfparams;
  }
  
  /********************
--- 7790,7842 ----
      ref TemplateParameters parameters, ref Objects dedtypes,
      size_t nfargs, ref size_t nfparams)
  {
!     if (nfparams == 0 || nfargs < nfparams - 1)
!         return nfargs == nfparams;
! 
!     Parameter fparam = tp.parameterList[nfparams - 1];
!     assert(fparam && fparam.type);
!     if (fparam.type.ty != Tident)
!         return nfargs == nfparams;
! 
!     TypeIdentifier tid = fparam.type.isTypeIdentifier();
!     if (tid.idents.length != 0)
!         return nfargs == nfparams;
! 
!     size_t tupi = 0;
!     for (; tupi < parameters.length; ++tupi)
      {
!         TemplateParameter tx = parameters[tupi];
!         TemplateTupleParameter tup = tx.isTemplateTupleParameter();
!         if (tup && tup.ident.equals(tid.ident))
!             break;
!     }
!     if (tupi == parameters.length)
!         return nfargs == nfparams;
  
!     size_t tuple_dim = nfargs - (nfparams - 1);
  
!     RootObject o = dedtypes[tupi];
!     if (o)
!     {
!         Tuple tup = isTuple(o);
!         if (!tup || tup.objects.length != tuple_dim)
!             return false;
!         for (size_t i = 0; i < tuple_dim; ++i)
!         {
!             if (!rootObjectsEqual(t.parameterList[nfparams - 1 + i].type,
!                                   tup.objects[i]))
!                 return false;
          }
      }
!     else
!     {
!         auto tup = new Tuple(tuple_dim);
!         for (size_t i = 0; i < tuple_dim; ++i)
!             tup.objects[i] = t.parameterList[nfparams - 1 + i].type;
!         dedtypes[tupi] = tup;
!     }
!     --nfparams; // ignore tuple parameter for further deduction
!     return true;
  }
  
  /********************
*************** private Expression getValue(Expression e
*** 5826,5832 ****
      return e;
  }
  
! Expression getExpression(RootObject o)
  {
      auto s = isDsymbol(o);
      return s ? .getValue(s) : .getValue(isExpression(o));
--- 8065,8071 ----
      return e;
  }
  
! private Expression getExpression(RootObject o)
  {
      auto s = isDsymbol(o);
      return s ? .getValue(s) : .getValue(isExpression(o));
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/timetrace.d gcc-16-20260208/gcc/d/dmd/timetrace.d
*** gcc-16-20260201/gcc/d/dmd/timetrace.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/timetrace.d	Sun Feb  8 22:32:07 2026
*************** enum TimeTraceEventType
*** 71,78 ****
--- 71,82 ----
      semaGeneral,
      sema1Import,
      sema1Module,
+     sema1TemplateDecl,
+     sema1TemplateInstance,
+     sema1Function,
      sema2,
      sema3,
+     dfa,
      ctfe,
      ctfeCall,
      codegenGlobal,
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/tokens.d gcc-16-20260208/gcc/d/dmd/tokens.d
*** gcc-16-20260201/gcc/d/dmd/tokens.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/tokens.d	Sun Feb  8 22:32:07 2026
*************** enum TOK : ubyte
*** 276,281 ****
--- 276,282 ----
      // C only extended keywords
      _assert,
      _import,
+     _module,
      __cdecl,
      __declspec,
      __stdcall,
*************** private immutable TOK[] keywords =
*** 586,591 ****
--- 587,593 ----
      // C only extended keywords
      TOK._assert,
      TOK._import,
+     TOK._module,
      TOK.__cdecl,
      TOK.__declspec,
      TOK.__stdcall,
*************** static immutable TOK[TOK.max + 1] Ckeywo
*** 621,627 ****
                         union_, unsigned, void_, volatile, while_, asm_, typeof_,
                         _Alignas, _Alignof, _Atomic, _Bool, _Complex, _Generic, _Imaginary, _Noreturn,
                         _Static_assert, _Thread_local,
!                        _import, __cdecl, __declspec, __stdcall, __thread, __pragma, __int128, __attribute__,
                         _assert ];
  
          foreach (kw; Ckwds)
--- 623,629 ----
                         union_, unsigned, void_, volatile, while_, asm_, typeof_,
                         _Alignas, _Alignof, _Atomic, _Bool, _Complex, _Generic, _Imaginary, _Noreturn,
                         _Static_assert, _Thread_local,
!                        _import, _module, __cdecl, __declspec, __stdcall, __thread, __pragma, __int128, __attribute__,
                         _assert ];
  
          foreach (kw; Ckwds)
*************** extern (C++) struct Token
*** 900,905 ****
--- 902,908 ----
          // C only extended keywords
          TOK._assert       : "__check",
          TOK._import       : "__import",
+         TOK._module       : "__module",
          TOK.__cdecl        : "__cdecl",
          TOK.__declspec     : "__declspec",
          TOK.__stdcall      : "__stdcall",
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/tokens.h gcc-16-20260208/gcc/d/dmd/tokens.h
*** gcc-16-20260201/gcc/d/dmd/tokens.h	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/tokens.h	Sun Feb  8 22:32:07 2026
*************** enum class TOK : unsigned char
*** 282,287 ****
--- 282,288 ----
      // C only extended keywords
      _assert,
      _import,
+     _module,
      cdecl_,
      declspec,
      stdcall,
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/traits.d gcc-16-20260208/gcc/d/dmd/traits.d
*** gcc-16-20260201/gcc/d/dmd/traits.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/traits.d	Sun Feb  8 22:32:07 2026
*************** import core.stdc.stdio;
*** 17,30 ****
  
  import dmd.aggregate;
  import dmd.arraytypes;
- import dmd.astcodegen;
  import dmd.astenums;
  import dmd.attrib;
  import dmd.attribsem;
  import dmd.canthrow;
  import dmd.dclass;
  import dmd.declaration;
- import dmd.dimport;
  import dmd.dinterpret;
  import dmd.dmodule;
  import dmd.dscope;
--- 17,28 ----
*************** import dmd.mangle : decoToType;
*** 46,62 ****
  import dmd.mtype;
  import dmd.nogc;
  import dmd.optimize;
- import dmd.parse;
  import dmd.root.array;
  import dmd.root.speller;
  import dmd.root.stringtable;
  import dmd.target;
! import dmd.templatesem : TemplateInstance_semanticTiargs;
  import dmd.tokens;
  import dmd.typesem;
- import dmd.visitor;
  import dmd.rootobject;
- import dmd.common.outbuffer;
  import dmd.root.string;
  
  enum LOGSEMANTIC = false;
--- 44,57 ----
  import dmd.mtype;
  import dmd.nogc;
  import dmd.optimize;
  import dmd.root.array;
  import dmd.root.speller;
  import dmd.root.stringtable;
  import dmd.target;
! import dmd.templatesem : TemplateInstance_semanticTiargs, TemplateInstanceBox;
  import dmd.tokens;
  import dmd.typesem;
  import dmd.rootobject;
  import dmd.root.string;
  
  enum LOGSEMANTIC = false;
*************** ulong getTypePointerBitmap(Loc loc, Type
*** 170,180 ****
              ulong nextsize = t.next.size();
              if (nextsize == SIZE_INVALID)
                  error = true;
!             ulong dim = t.dim.toInteger();
!             for (ulong i = 0; i < dim; i++)
              {
!                 offset = arrayoff + i * nextsize;
!                 visit(t.next);
              }
              offset = arrayoff;
          }
--- 165,178 ----
              ulong nextsize = t.next.size();
              if (nextsize == SIZE_INVALID)
                  error = true;
!             if (t.hasPointers)
              {
!                 ulong dim = t.dim.toInteger();
!                 for (ulong i = 0; i < dim; i++)
!                 {
!                     offset = arrayoff + i * nextsize;
!                     visit(t.next);
!                 }
              }
              offset = arrayoff;
          }
*************** Expression semanticTraits(TraitsExp e, S
*** 1182,1218 ****
                  auto fd = s.isFuncDeclaration();
                  if (!fd)
                  {
!                     if (includeTemplates)
                      {
!                         if (auto td = s.isTemplateDeclaration())
                          {
!                             // if td is part of an overload set we must take a copy
!                             // which shares the same `instances` cache but without
!                             // `overroot` and `overnext` set to avoid overload
!                             // behaviour in the result.
!                             if (td.overnext !is null)
!                             {
!                                 if (td.instances is null)
!                                 {
!                                     // create an empty AA just to copy it
!                                     scope ti = new TemplateInstance(Loc.initial, Id.empty, null);
!                                     auto tib = TemplateInstanceBox(ti);
!                                     td.instances[tib] = null;
!                                     td.instances.clear();
!                                 }
!                                 td = td.syntaxCopy(null);
!                                 import core.stdc.string : memcpy;
!                                 memcpy(cast(void*) td, cast(void*) s,
!                                         __traits(classInstanceSize, TemplateDeclaration));
!                                 td.overroot = null;
!                                 td.overnext = null;
!                             }
! 
!                             auto e = ex ? new DotTemplateExp(Loc.initial, ex, td)
!                                         : new DsymbolExp(Loc.initial, td);
!                             exps.push(e);
                          }
                      }
                      return 0;
                  }
                  if (e.ident == Id.getVirtualFunctions && !fd.isVirtual())
--- 1180,1215 ----
                  auto fd = s.isFuncDeclaration();
                  if (!fd)
                  {
!                     if (!includeTemplates)
!                         return 0;
!                     auto td = s.isTemplateDeclaration();
!                     if (!td)
!                         return 0;
!                     // if td is part of an overload set we must take a copy
!                     // which shares the same `instances` cache but without
!                     // `overroot` and `overnext` set to avoid overload
!                     // behaviour in the result.
!                     if (td.overnext !is null)
                      {
!                         if (td.instances is null)
                          {
!                             // create an empty AA just to copy it
!                             scope ti = new TemplateInstance(Loc.initial, Id.empty, null);
!                             auto tib = TemplateInstanceBox(ti);
!                             (*(cast(TemplateInstance[TemplateInstanceBox]*) &td.instances))[tib] = null;
!                             (cast(TemplateInstance[TemplateInstanceBox])td.instances).clear();
                          }
+                         td = td.syntaxCopy(null);
+                         import core.stdc.string : memcpy;
+                         memcpy(cast(void*) td, cast(void*) s,
+                                 __traits(classInstanceSize, TemplateDeclaration));
+                         td.overroot = null;
+                         td.overnext = null;
                      }
+ 
+                     auto e = ex ? new DotTemplateExp(Loc.initial, ex, td)
+                                 : new DsymbolExp(Loc.initial, td);
+                     exps.push(e);
                      return 0;
                  }
                  if (e.ident == Id.getVirtualFunctions && !fd.isVirtual())
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/typesem.d gcc-16-20260208/gcc/d/dmd/typesem.d
*** gcc-16-20260201/gcc/d/dmd/typesem.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/typesem.d	Sun Feb  8 22:32:07 2026
*************** import core.stdc.stdio;
*** 17,23 ****
  
  import dmd.access;
  import dmd.aggregate;
- import dmd.aliasthis;
  import dmd.arrayop;
  import dmd.arraytypes;
  import dmd.astcodegen;
--- 17,22 ----
*************** import dmd.dcast;
*** 26,42 ****
  import dmd.dclass;
  import dmd.declaration;
  import dmd.denum;
- import dmd.dimport;
  import dmd.dinterpret;
  import dmd.dmodule;
  import dmd.dscope;
  import dmd.dstruct;
  import dmd.dsymbol;
  import dmd.dsymbolsem;
  import dmd.dtemplate;
  import dmd.enumsem;
  import dmd.errors;
- import dmd.errorsink;
  import dmd.expression;
  import dmd.expressionsem;
  import dmd.func;
--- 25,40 ----
  import dmd.dclass;
  import dmd.declaration;
  import dmd.denum;
  import dmd.dinterpret;
  import dmd.dmodule;
  import dmd.dscope;
  import dmd.dstruct;
  import dmd.dsymbol;
  import dmd.dsymbolsem;
+ import dmd.templatesem : computeOneMember;
  import dmd.dtemplate;
  import dmd.enumsem;
  import dmd.errors;
  import dmd.expression;
  import dmd.expressionsem;
  import dmd.func;
*************** import dmd.importc;
*** 50,56 ****
  import dmd.init;
  import dmd.initsem;
  import dmd.location;
- import dmd.visitor;
  import dmd.mtype;
  import dmd.mangle;
  import dmd.nogc;
--- 48,53 ----
*************** import dmd.root.rmem;
*** 64,76 ****
  import dmd.common.outbuffer;
  import dmd.rootobject;
  import dmd.root.string;
- import dmd.root.stringtable;
  import dmd.safe;
  import dmd.semantic3;
  import dmd.sideeffect;
  import dmd.target;
  import dmd.tokens;
  
  /*************************************
   * Resolve a tuple index, `s[oindex]`, by figuring out what `s[oindex]` represents.
   * Setting one of pe/pt/ps.
--- 61,1418 ----
  import dmd.common.outbuffer;
  import dmd.rootobject;
  import dmd.root.string;
  import dmd.safe;
  import dmd.semantic3;
  import dmd.sideeffect;
  import dmd.target;
  import dmd.tokens;
  
+ bool hasDeprecatedAliasThis(Type _this)
+ {
+     auto ad = isAggregate(_this);
+     return ad && ad.aliasthis && (ad.aliasthis.isDeprecated || ad.aliasthis.sym.isDeprecated);
+ }
+ 
+ /*************************************
+  * Apply STCxxxx bits to existing type.
+  * Use *before* semantic analysis is run.
+  */
+ Type addSTC(Type _this, STC stc)
+ {
+     Type t = _this;
+     if (t.isImmutable())
+     {
+         return t;
+     }
+     else if (stc & STC.immutable_)
+     {
+         t = t.makeImmutable();
+         return t;
+     }
+ 
+     if ((stc & STC.shared_) && !t.isShared())
+     {
+         if (t.isWild())
+         {
+             if (t.isConst())
+                 t = t.makeSharedWildConst();
+             else
+                 t = t.makeSharedWild();
+         }
+         else
+         {
+             if (t.isConst())
+                 t = t.makeSharedConst();
+             else
+                 t = t.makeShared();
+         }
+     }
+     if ((stc & STC.const_) && !t.isConst())
+     {
+         if (t.isShared())
+         {
+             if (t.isWild())
+                 t = t.makeSharedWildConst();
+             else
+                 t = t.makeSharedConst();
+         }
+         else
+         {
+             if (t.isWild())
+                 t = t.makeWildConst();
+             else
+                 t = t.makeConst();
+         }
+     }
+     if ((stc & STC.wild) && !t.isWild())
+     {
+         if (t.isShared())
+         {
+             if (t.isConst())
+                 t = t.makeSharedWildConst();
+             else
+                 t = t.makeSharedWild();
+         }
+         else
+         {
+             if (t.isConst())
+                 t = t.makeWildConst();
+             else
+                 t = t.makeWild();
+         }
+     }
+ 
+     return t;
+ }
+ 
+ /***************************************************
+  * Determine if type t can be indexed or sliced given that it is not an
+  * aggregate with operator overloads.
+  * Params:
+  *      t = type to check
+  * Returns:
+  *      true if an expression of type t can be e1 in an array expression
+  */
+ bool isIndexableNonAggregate(Type t)
+ {
+     t = t.toBasetype();
+     return (t.ty == Tpointer || t.isStaticOrDynamicArray() || t.ty == Taarray ||
+             t.ty == Ttuple || t.ty == Tvector);
+ }
+ 
+ /**
+  * If the type is a class or struct, returns the symbol for it,
+  * else null.
+  */
+ AggregateDeclaration isAggregate(Type t)
+ {
+     t = t.toBasetype();
+     if (auto tc = t.isTypeClass())
+         return tc.sym;
+     if (auto ts = t.isTypeStruct())
+         return ts.sym;
+     return null;
+ }
+ 
+ /****************************************************
+  * Determine if parameter is a lazy array of delegates.
+  * If so, return the return type of those delegates.
+  * If not, return NULL.
+  *
+  * Returns T if the type is one of the following forms:
+  *      T delegate()[]
+  *      T delegate()[dim]
+  */
+ Type isLazyArray(Parameter _this)
+ {
+     Type tb = _this.type.toBasetype();
+     if (tb.isStaticOrDynamicArray())
+     {
+         Type tel = (cast(TypeArray)tb).next.toBasetype();
+         if (auto td = tel.isTypeDelegate())
+         {
+             TypeFunction tf = td.next.toTypeFunction();
+             if (tf.parameterList.varargs == VarArg.none && tf.parameterList.length == 0)
+             {
+                 return tf.next; // return type of delegate
+             }
+         }
+     }
+     return null;
+ }
+ 
+ /****************************************
+  * Return the mask that an integral type will
+  * fit into.
+  */
+ ulong sizemask(Type _this)
+ {
+     ulong m;
+     switch (_this.toBasetype().ty)
+     {
+     case Tbool:
+         m = 1;
+         break;
+     case Tchar:
+     case Tint8:
+     case Tuns8:
+         m = 0xFF;
+         break;
+     case Twchar:
+     case Tint16:
+     case Tuns16:
+         m = 0xFFFFU;
+         break;
+     case Tdchar:
+     case Tint32:
+     case Tuns32:
+         m = 0xFFFFFFFFU;
+         break;
+     case Tint64:
+     case Tuns64:
+         m = 0xFFFFFFFFFFFFFFFFUL;
+         break;
+     default:
+         assert(0);
+     }
+     return m;
+ }
+ 
+ /*************************************
+  * If _this is a type of static array, return its base element type.
+  */
+ Type baseElemOf(Type _this)
+ {
+     Type t = _this.toBasetype();
+     TypeSArray tsa;
+     while ((tsa = t.isTypeSArray()) !is null)
+         t = tsa.next.toBasetype();
+     return t;
+ }
+ 
+ /*************************************
+  * If this is a type of something, return that something.
+  */
+ Type nextOf(Type _this)
+ {
+     /*******************************
+      * For TypeFunction, nextOf() can return NULL if the function return
+      * type is meant to be inferred, and semantic() hasn't yet been run
+      * on the function. After semantic(), it must no longer be NULL.
+      */
+     if (auto tn = _this.isTypeNext())
+         return tn.next;
+     else if (auto te = _this.isTypeEnum())
+         return te.memType().nextOf();
+     return null;
+ }
+ 
+ /***************************
+  * Look for bugs in constructing types.
+  */
+ void check(Type _this)
+ {
+     if (_this.mcache)
+     with (_this.mcache)
+     switch (_this.mod)
+     {
+     case 0:
+         if (cto)
+             assert(cto.mod == MODFlags.const_);
+         if (ito)
+             assert(ito.mod == MODFlags.immutable_);
+         if (sto)
+             assert(sto.mod == MODFlags.shared_);
+         if (scto)
+             assert(scto.mod == (MODFlags.shared_ | MODFlags.const_));
+         if (wto)
+             assert(wto.mod == MODFlags.wild);
+         if (wcto)
+             assert(wcto.mod == MODFlags.wildconst);
+         if (swto)
+             assert(swto.mod == (MODFlags.shared_ | MODFlags.wild));
+         if (swcto)
+             assert(swcto.mod == (MODFlags.shared_ | MODFlags.wildconst));
+         break;
+ 
+     case MODFlags.const_:
+         if (cto)
+             assert(cto.mod == 0);
+         if (ito)
+             assert(ito.mod == MODFlags.immutable_);
+         if (sto)
+             assert(sto.mod == MODFlags.shared_);
+         if (scto)
+             assert(scto.mod == (MODFlags.shared_ | MODFlags.const_));
+         if (wto)
+             assert(wto.mod == MODFlags.wild);
+         if (wcto)
+             assert(wcto.mod == MODFlags.wildconst);
+         if (swto)
+             assert(swto.mod == (MODFlags.shared_ | MODFlags.wild));
+         if (swcto)
+             assert(swcto.mod == (MODFlags.shared_ | MODFlags.wildconst));
+         break;
+ 
+     case MODFlags.wild:
+         if (cto)
+             assert(cto.mod == MODFlags.const_);
+         if (ito)
+             assert(ito.mod == MODFlags.immutable_);
+         if (sto)
+             assert(sto.mod == MODFlags.shared_);
+         if (scto)
+             assert(scto.mod == (MODFlags.shared_ | MODFlags.const_));
+         if (wto)
+             assert(wto.mod == 0);
+         if (wcto)
+             assert(wcto.mod == MODFlags.wildconst);
+         if (swto)
+             assert(swto.mod == (MODFlags.shared_ | MODFlags.wild));
+         if (swcto)
+             assert(swcto.mod == (MODFlags.shared_ | MODFlags.wildconst));
+         break;
+ 
+     case MODFlags.wildconst:
+         assert(!cto || cto.mod == MODFlags.const_);
+         assert(!ito || ito.mod == MODFlags.immutable_);
+         assert(!sto || sto.mod == MODFlags.shared_);
+         assert(!scto || scto.mod == (MODFlags.shared_ | MODFlags.const_));
+         assert(!wto || wto.mod == MODFlags.wild);
+         assert(!wcto || wcto.mod == 0);
+         assert(!swto || swto.mod == (MODFlags.shared_ | MODFlags.wild));
+         assert(!swcto || swcto.mod == (MODFlags.shared_ | MODFlags.wildconst));
+         break;
+ 
+     case MODFlags.shared_:
+         if (cto)
+             assert(cto.mod == MODFlags.const_);
+         if (ito)
+             assert(ito.mod == MODFlags.immutable_);
+         if (sto)
+             assert(sto.mod == 0);
+         if (scto)
+             assert(scto.mod == (MODFlags.shared_ | MODFlags.const_));
+         if (wto)
+             assert(wto.mod == MODFlags.wild);
+         if (wcto)
+             assert(wcto.mod == MODFlags.wildconst);
+         if (swto)
+             assert(swto.mod == (MODFlags.shared_ | MODFlags.wild));
+         if (swcto)
+             assert(swcto.mod == (MODFlags.shared_ | MODFlags.wildconst));
+         break;
+ 
+     case MODFlags.shared_ | MODFlags.const_:
+         if (cto)
+             assert(cto.mod == MODFlags.const_);
+         if (ito)
+             assert(ito.mod == MODFlags.immutable_);
+         if (sto)
+             assert(sto.mod == MODFlags.shared_);
+         if (scto)
+             assert(scto.mod == 0);
+         if (wto)
+             assert(wto.mod == MODFlags.wild);
+         if (wcto)
+             assert(wcto.mod == MODFlags.wildconst);
+         if (swto)
+             assert(swto.mod == (MODFlags.shared_ | MODFlags.wild));
+         if (swcto)
+             assert(swcto.mod == (MODFlags.shared_ | MODFlags.wildconst));
+         break;
+ 
+     case MODFlags.shared_ | MODFlags.wild:
+         if (cto)
+             assert(cto.mod == MODFlags.const_);
+         if (ito)
+             assert(ito.mod == MODFlags.immutable_);
+         if (sto)
+             assert(sto.mod == MODFlags.shared_);
+         if (scto)
+             assert(scto.mod == (MODFlags.shared_ | MODFlags.const_));
+         if (wto)
+             assert(wto.mod == MODFlags.wild);
+         if (wcto)
+             assert(wcto.mod == MODFlags.wildconst);
+         if (swto)
+             assert(swto.mod == 0);
+         if (swcto)
+             assert(swcto.mod == (MODFlags.shared_ | MODFlags.wildconst));
+         break;
+ 
+     case MODFlags.shared_ | MODFlags.wildconst:
+         assert(!cto || cto.mod == MODFlags.const_);
+         assert(!ito || ito.mod == MODFlags.immutable_);
+         assert(!sto || sto.mod == MODFlags.shared_);
+         assert(!scto || scto.mod == (MODFlags.shared_ | MODFlags.const_));
+         assert(!wto || wto.mod == MODFlags.wild);
+         assert(!wcto || wcto.mod == MODFlags.wildconst);
+         assert(!swto || swto.mod == (MODFlags.shared_ | MODFlags.wild));
+         assert(!swcto || swcto.mod == 0);
+         break;
+ 
+     case MODFlags.immutable_:
+         if (cto)
+             assert(cto.mod == MODFlags.const_);
+         if (ito)
+             assert(ito.mod == 0);
+         if (sto)
+             assert(sto.mod == MODFlags.shared_);
+         if (scto)
+             assert(scto.mod == (MODFlags.shared_ | MODFlags.const_));
+         if (wto)
+             assert(wto.mod == MODFlags.wild);
+         if (wcto)
+             assert(wcto.mod == MODFlags.wildconst);
+         if (swto)
+             assert(swto.mod == (MODFlags.shared_ | MODFlags.wild));
+         if (swcto)
+             assert(swcto.mod == (MODFlags.shared_ | MODFlags.wildconst));
+         break;
+ 
+     default:
+         assert(0);
+     }
+ 
+     Type tn = _this.nextOf();
+     if (tn && _this.ty != Tfunction && tn.ty != Tfunction && _this.ty != Tenum)
+     {
+         // Verify transitivity
+         switch (_this.mod)
+         {
+         case 0:
+         case MODFlags.const_:
+         case MODFlags.wild:
+         case MODFlags.wildconst:
+         case MODFlags.shared_:
+         case MODFlags.shared_ | MODFlags.const_:
+         case MODFlags.shared_ | MODFlags.wild:
+         case MODFlags.shared_ | MODFlags.wildconst:
+         case MODFlags.immutable_:
+             assert(tn.mod == MODFlags.immutable_ || (tn.mod & _this.mod) == _this.mod);
+             break;
+ 
+         default:
+             assert(0);
+         }
+         tn.check();
+     }
+ }
+ 
+ /**********************************
+  * For our new type '_this', which is type-constructed from t,
+  * fill in the cto, ito, sto, scto, wto shortcuts.
+  */
+ void fixTo(Type _this, Type t)
+ {
+     // If fixing this: immutable(T*) by t: immutable(T)*,
+     // cache t to this.xto won't break transitivity.
+     Type mto = null;
+     Type tn = _this.nextOf();
+     if (!tn || _this.ty != Tsarray && tn.mod == t.nextOf().mod)
+     {
+         switch (t.mod)
+         {
+         case 0:
+             mto = t;
+             break;
+ 
+         case MODFlags.const_:
+             _this.getMcache();
+             _this.mcache.cto = t;
+             break;
+ 
+         case MODFlags.wild:
+             _this.getMcache();
+             _this.mcache.wto = t;
+             break;
+ 
+         case MODFlags.wildconst:
+             _this.getMcache();
+             _this.mcache.wcto = t;
+             break;
+ 
+         case MODFlags.shared_:
+             _this.getMcache();
+             _this.mcache.sto = t;
+             break;
+ 
+         case MODFlags.shared_ | MODFlags.const_:
+             _this.getMcache();
+             _this.mcache.scto = t;
+             break;
+ 
+         case MODFlags.shared_ | MODFlags.wild:
+             _this.getMcache();
+             _this.mcache.swto = t;
+             break;
+ 
+         case MODFlags.shared_ | MODFlags.wildconst:
+             _this.getMcache();
+             _this.mcache.swcto = t;
+             break;
+ 
+         case MODFlags.immutable_:
+             _this.getMcache();
+             _this.mcache.ito = t;
+             break;
+ 
+         default:
+             break;
+         }
+     }
+     assert(_this.mod != t.mod);
+ 
+     if (_this.mod)
+     {
+         _this.getMcache();
+         t.getMcache();
+     }
+     switch (_this.mod)
+     {
+     case 0:
+         break;
+ 
+     case MODFlags.const_:
+         _this.mcache.cto = mto;
+         t.mcache.cto = _this;
+         break;
+ 
+     case MODFlags.wild:
+         _this.mcache.wto = mto;
+         t.mcache.wto = _this;
+         break;
+ 
+     case MODFlags.wildconst:
+         _this.mcache.wcto = mto;
+         t.mcache.wcto = _this;
+         break;
+ 
+     case MODFlags.shared_:
+         _this.mcache.sto = mto;
+         t.mcache.sto = _this;
+         break;
+ 
+     case MODFlags.shared_ | MODFlags.const_:
+         _this.mcache.scto = mto;
+         t.mcache.scto = _this;
+         break;
+ 
+     case MODFlags.shared_ | MODFlags.wild:
+         _this.mcache.swto = mto;
+         t.mcache.swto = _this;
+         break;
+ 
+     case MODFlags.shared_ | MODFlags.wildconst:
+         _this.mcache.swcto = mto;
+         t.mcache.swcto = _this;
+         break;
+ 
+     case MODFlags.immutable_:
+         t.mcache.ito = _this;
+         if (t.mcache.cto)
+             t.mcache.cto.getMcache().ito = _this;
+         if (t.mcache.sto)
+             t.mcache.sto.getMcache().ito = _this;
+         if (t.mcache.scto)
+             t.mcache.scto.getMcache().ito = _this;
+         if (t.mcache.wto)
+             t.mcache.wto.getMcache().ito = _this;
+         if (t.mcache.wcto)
+             t.mcache.wcto.getMcache().ito = _this;
+         if (t.mcache.swto)
+             t.mcache.swto.getMcache().ito = _this;
+         if (t.mcache.swcto)
+             t.mcache.swcto.getMcache().ito = _this;
+         break;
+ 
+     default:
+         assert(0);
+     }
+     _this.check();
+     t.check();
+     //printf("fixTo: %s, %s\n", toChars(), t.toChars());
+ }
+ 
+ void transitive(TypeNext _this)
+ {
+     // Invoke transitivity of type attributes
+     _this.next = _this.next.addMod(_this.mod);
+ }
+ 
+ private inout(TypeNext) isTypeNext(inout Type _this)
+ {
+     switch(_this.ty)
+     {
+         case Tpointer, Treference, Tfunction, Tdelegate, Tslice, Tarray, Taarray, Tsarray:
+             return cast(typeof(return)) _this;
+         default: return null;
+     }
+ }
+ 
+ /********************************
+  * true if when type is copied, it needs a copy constructor or postblit
+  * applied. Only applies to value types, not ref types.
+  */
+ bool needsCopyOrPostblit(Type _this)
+ {
+     if (auto tsa = _this.isTypeSArray())
+         return tsa.next.needsCopyOrPostblit();
+     else if (auto ts = _this.isTypeStruct())
+         return ts.sym.hasCopyCtor || ts.sym.postblit;
+     else if (auto te = _this.isTypeEnum())
+         return te.memType().needsCopyOrPostblit();
+     return false;
+ }
+ 
+ /********************************
+  * true if when type goes out of scope, it needs a destructor applied.
+  * Only applies to value types, not ref types.
+  */
+ bool needsDestruction(Type _this)
+ {
+     if (auto tsa = _this.isTypeSArray())
+         return tsa.next.needsDestruction();
+     else if (auto ts = _this.isTypeStruct())
+         return ts.sym.dtor !is null;
+     else if (auto te = _this.isTypeEnum())
+         return te.memType().needsDestruction();
+     return false;
+ }
+ 
+ bool needsNested(Type _this)
+ {
+     static bool typeStructNeedsNested(TypeStruct _this)
+     {
+         if (_this.inuse) return false; // circular type, error instead of crashing
+ 
+         _this.inuse = true;
+         scope(exit) _this.inuse = false;
+ 
+         if (_this.sym.isNested())
+             return true;
+ 
+         for (size_t i = 0; i < _this.sym.fields.length; i++)
+         {
+             VarDeclaration v = _this.sym.fields[i];
+             if (!v.isDataseg() && v.type.needsNested())
+                 return true;
+         }
+         return false;
+     }
+ 
+     if (auto tsa = _this.isTypeSArray())
+         return tsa.next.needsNested();
+     else if (auto ts = _this.isTypeStruct())
+         return typeStructNeedsNested(ts);
+     else if (auto te = _this.isTypeEnum())
+         return te.memType().needsNested();
+     return false;
+ }
+ 
+ bool isScalar(Type _this)
+ {
+     if (auto tb = _this.isTypeBasic())
+         return (tb.flags & (TFlags.integral | TFlags.floating)) != 0;
+     else if (auto tv = _this.isTypeVector())
+         return tv.basetype.nextOf().isScalar();
+     else if (auto te = _this.isTypeEnum())
+         return te.memType().isScalar();
+     else if (_this.isTypePointer())
+         return true;
+     return false;
+ }
+ 
+ bool isUnsigned(Type _this)
+ {
+     if (auto tb = _this.isTypeBasic())
+         return (tb.flags & TFlags.unsigned) != 0;
+     else if (auto tv = _this.isTypeVector())
+         return tv.basetype.nextOf().isUnsigned();
+     else if (auto te = _this.isTypeEnum())
+         return te.memType().isUnsigned();
+     return false;
+ }
+ 
+ bool isImaginary(Type _this)
+ {
+     if (auto te = _this.isTypeEnum())
+         return te.memType().isImaginary();
+     return _this.isImaginaryNonSemantic();
+ }
+ 
+ bool isComplex(Type _this)
+ {
+     if (auto tb = _this.isTypeBasic())
+         return (tb.flags & TFlags.complex) != 0;
+     else if (auto te = _this.isTypeEnum())
+         return te.memType().isComplex();
+     return false;
+ }
+ 
+ // Exposed as it is used in `expressionsem`
+ MOD typeDeduceWild(Type _this, Type t, bool isRef)
+ {
+     //printf("Type::deduceWild this = '%s', tprm = '%s'\n", toChars(), tprm.toChars());
+     if (t.isWild())
+     {
+         if (_this.isImmutable())
+             return MODFlags.immutable_;
+         if (_this.isWildConst())
+         {
+             if (t.isWildConst())
+                 return MODFlags.wild;
+             return MODFlags.wildconst;
+         }
+         if (_this.isWild())
+             return MODFlags.wild;
+         if (_this.isConst())
+             return MODFlags.const_;
+         if (_this.isMutable())
+             return MODFlags.mutable;
+         assert(0);
+     }
+     return 0;
+ }
+ 
+ /***************************************
+  * Compute MOD bits matching `this` argument type to wild parameter type.
+  * Params:
+  *  _this = base parameter type
+  *  t = corresponding parameter type
+  *  isRef = parameter is `ref` or `out`
+  * Returns:
+  *  MOD bits
+  */
+ MOD deduceWild(Type _this, Type t, bool isRef)
+ {
+     static MOD typeNextDeduceWild(TypeNext _this, Type t, bool isRef)
+     {
+         if (_this.ty == Tfunction)
+             return 0;
+ 
+         ubyte wm;
+ 
+         Type tn = t.nextOf();
+         if (!isRef && (_this.ty == Tarray || _this.ty == Tpointer) && tn)
+         {
+             wm = _this.next.deduceWild(tn, true);
+             if (!wm)
+                 wm = typeDeduceWild(cast(Type)_this, t, true);
+         }
+         else
+         {
+             wm = typeDeduceWild(cast(Type)_this, t, isRef);
+             if (!wm && tn)
+                 wm = _this.next.deduceWild(tn, true);
+         }
+         return wm;
+     }
+ 
+     static MOD typeStructDeduceWild(TypeStruct _this, Type t, bool isRef)
+     {
+         if (_this.ty == t.ty && _this.sym == (cast(TypeStruct)t).sym)
+             return typeDeduceWild(cast(Type)_this, t, isRef);
+ 
+         ubyte wm = 0;
+ 
+         if (t.hasWild() && _this.sym.aliasthis && !(_this.att & AliasThisRec.tracing))
+         {
+             if (auto ato = aliasthisOf(_this))
+             {
+                 _this.att = cast(AliasThisRec)(_this.att | AliasThisRec.tracing);
+                 wm = ato.deduceWild(t, isRef);
+                 _this.att = cast(AliasThisRec)(_this.att & ~AliasThisRec.tracing);
+             }
+         }
+ 
+         return wm;
+     }
+ 
+     static MOD typeClassDeduceWild(TypeClass _this, Type t, bool isRef)
+     {
+         ClassDeclaration cd = t.isClassHandle();
+         if (cd && (_this.sym == cd || cd.isBaseOf(_this.sym, null)))
+             return typeDeduceWild(cast(Type)_this, t, isRef);
+ 
+         ubyte wm = 0;
+ 
+         if (t.hasWild() && _this.sym.aliasthis && !(_this.att & AliasThisRec.tracing))
+         {
+             if (auto ato = aliasthisOf(_this))
+             {
+                 _this.att = cast(AliasThisRec)(_this.att | AliasThisRec.tracing);
+                 wm = ato.deduceWild(t, isRef);
+                 _this.att = cast(AliasThisRec)(_this.att & ~AliasThisRec.tracing);
+             }
+         }
+ 
+         return wm;
+     }
+ 
+     if (auto tn = _this.isTypeNext())
+         return typeNextDeduceWild(tn, t, isRef);
+     else if (auto ts = _this.isTypeStruct())
+         return typeStructDeduceWild(ts, t, isRef);
+     else if (auto tc = _this.isTypeClass())
+         return typeClassDeduceWild(tc, t, isRef);
+     return typeDeduceWild(_this, t, isRef);
+ }
+ 
+ bool isString(Type _this)
+ {
+     if (auto tsa = _this.isTypeSArray())
+     {
+         TY nty = tsa.next.toBasetype().ty;
+         return nty.isSomeChar();
+     }
+     else if (auto tda = _this.isTypeDArray())
+     {
+         TY nty = tda.next.toBasetype().ty;
+         return nty.isSomeChar();
+     }
+     else if (auto te = _this.isTypeEnum())
+         return te.memType().isString();
+     return false;
+ }
+ 
+ /**************************
+  * Returns true if T can be converted to boolean value.
+  */
+ bool isBoolean(Type _this)
+ {
+     switch(_this.ty)
+     {
+         case Tvector, Tstruct: return false;
+         case Tarray, Taarray, Tdelegate, Tclass, Tnull: return true;
+         case Tenum: return _this.isTypeEnum().memType().isBoolean();
+         // bottom type can be implicitly converted to any other type
+         case Tnoreturn: return true;
+         default: return _this.isScalar();
+     }
+ }
+ 
+ bool isReal(Type _this)
+ {
+     if (auto tb = _this.isTypeBasic())
+         return (tb.flags & TFlags.real_) != 0;
+     else if (auto te = _this.isTypeEnum())
+         return te.memType().isReal();
+     return false;
+ }
+ 
+ // real, imaginary, or complex
+ bool isFloating(Type _this)
+ {
+     if (auto tb = _this.isTypeBasic())
+         return (tb.flags & TFlags.floating) != 0;
+     else if (auto tv = _this.isTypeVector())
+         return tv.basetype.nextOf().isFloating();
+     else if (auto te = _this.isTypeEnum())
+         return te.memType().isFloating();
+     return false;
+ }
+ 
+ bool isIntegral(Type _this)
+ {
+     if (auto tb = _this.isTypeBasic())
+         return (tb.flags & TFlags.integral) != 0;
+     else if (auto tv = _this.isTypeVector())
+         return tv.basetype.nextOf().isIntegral();
+     else if (auto te = _this.isTypeEnum())
+         return te.memType().isIntegral();
+     return false;
+ }
+ 
+ Type makeSharedWildConst(Type _this)
+ {
+     if (_this.mcache && _this.mcache.swcto)
+         return _this.mcache.swcto;
+     Type t = _this.nullAttributes();
+     t.mod = MODFlags.shared_ | MODFlags.wildconst;
+ 
+     if (auto tn = _this.isTypeNext())
+     {
+         //printf("TypeNext::makeSharedWildConst() %s\n", toChars());
+         TypeNext _t = cast(TypeNext) t;
+         if (tn.ty != Tfunction && tn.next.ty != Tfunction && !tn.next.isImmutable())
+         {
+             _t.next = tn.next.sharedWildConstOf();
+         }
+         //printf("TypeNext::makeSharedWildConst() returns %p, %s\n", t, t.toChars());
+         return _t;
+     }
+     return t;
+ }
+ 
+ Type makeSharedWild(Type _this)
+ {
+     if (_this.mcache && _this.mcache.swto)
+         return _this.mcache.swto;
+     Type t = _this.nullAttributes();
+     t.mod = MODFlags.shared_ | MODFlags.wild;
+ 
+     if (auto tn = _this.isTypeNext())
+     {
+         //printf("TypeNext::makeSharedWild() %s\n", toChars());
+         TypeNext _t = cast(TypeNext) t;
+         if (tn.ty != Tfunction && tn.next.ty != Tfunction && !tn.next.isImmutable())
+         {
+             if (tn.next.isConst())
+                 _t.next = tn.next.sharedWildConstOf();
+             else
+                 _t.next = tn.next.sharedWildOf();
+         }
+         //printf("TypeNext::makeSharedWild() returns %p, %s\n", t, t.toChars());
+         return _t;
+     }
+     return t;
+ }
+ 
+ Type makeWildConst(Type _this)
+ {
+     if (_this.mcache && _this.mcache.wcto)
+         return _this.mcache.wcto;
+     Type t = _this.nullAttributes();
+     t.mod = MODFlags.wildconst;
+ 
+     if (auto tn = _this.isTypeNext())
+     {
+         //printf("TypeNext::makeWildConst() %s\n", toChars());
+         TypeNext _t = cast(TypeNext) t;
+         if (tn.ty != Tfunction && tn.next.ty != Tfunction && !tn.next.isImmutable())
+         {
+             if (tn.next.isShared())
+                 _t.next = tn.next.sharedWildConstOf();
+             else
+                 _t.next = tn.next.wildConstOf();
+         }
+         //printf("TypeNext::makeWildConst() returns %p, %s\n", t, t.toChars());
+         return _t;
+     }
+     return t;
+ }
+ 
+ Type makeWild(Type _this)
+ {
+     if (_this.mcache && _this.mcache.wto)
+         return _this.mcache.wto;
+     Type t = _this.nullAttributes();
+     t.mod = MODFlags.wild;
+ 
+     if (auto tn = _this.isTypeNext())
+     {
+         //printf("TypeNext::makeWild() %s\n", toChars());
+         TypeNext _t = cast(TypeNext) t;
+         if (tn.ty != Tfunction && tn.next.ty != Tfunction && !tn.next.isImmutable())
+         {
+             if (tn.next.isShared())
+             {
+                 if (tn.next.isConst())
+                     _t.next = tn.next.sharedWildConstOf();
+                 else
+                     _t.next = tn.next.sharedWildOf();
+             }
+             else
+             {
+                 if (tn.next.isConst())
+                     _t.next = tn.next.wildConstOf();
+                 else
+                     _t.next = tn.next.wildOf();
+             }
+         }
+         //printf("TypeNext::makeWild() returns %p, %s\n", t, t.toChars());
+         return _t;
+     }
+     return t;
+ }
+ 
+ Type makeSharedConst(Type _this)
+ {
+     if (_this.mcache && _this.mcache.scto)
+         return _this.mcache.scto;
+     Type t = _this.nullAttributes();
+     t.mod = MODFlags.shared_ | MODFlags.const_;
+ 
+     if (auto tn = _this.isTypeNext())
+     {
+         //printf("TypeNext::makeSharedConst() %s\n", toChars());
+         TypeNext _t = cast(TypeNext) t;
+         if (tn.ty != Tfunction && tn.next.ty != Tfunction && !tn.next.isImmutable())
+         {
+             if (tn.next.isWild())
+                 _t.next = tn.next.sharedWildConstOf();
+             else
+                 _t.next = tn.next.sharedConstOf();
+         }
+         //printf("TypeNext::makeSharedConst() returns %p, %s\n", t, t.toChars());
+         return _t;
+     }
+     return t;
+ }
+ 
+ Type makeShared(Type _this)
+ {
+     if (_this.mcache && _this.mcache.sto)
+         return _this.mcache.sto;
+     Type t = _this.nullAttributes();
+     t.mod = MODFlags.shared_;
+ 
+     if (auto tn = _this.isTypeNext())
+     {
+         //printf("TypeNext::makeShared() %s\n", toChars());
+         TypeNext _t = cast(TypeNext) t;
+         if (tn.ty != Tfunction && tn.next.ty != Tfunction && !tn.next.isImmutable())
+         {
+             if (tn.next.isWild())
+             {
+                 if (tn.next.isConst())
+                     _t.next = tn.next.sharedWildConstOf();
+                 else
+                     _t.next = tn.next.sharedWildOf();
+             }
+             else
+             {
+                 if (tn.next.isConst())
+                     _t.next = tn.next.sharedConstOf();
+                 else
+                     _t.next = tn.next.sharedOf();
+             }
+         }
+         //printf("TypeNext::makeShared() returns %p, %s\n", t, t.toChars());
+         return _t;
+     }
+     return t;
+ }
+ 
+ Type makeImmutable(Type _this)
+ {
+     if (_this.mcache && _this.mcache.ito)
+         return _this.mcache.ito;
+     Type t = _this.nullAttributes();
+     t.mod = MODFlags.immutable_;
+ 
+     if (auto tn = _this.isTypeNext())
+     {
+         //printf("TypeNext::makeImmutable() %s\n", toChars());
+         TypeNext _t = cast(TypeNext) t;
+         if (tn.ty != Tfunction && tn.next.ty != Tfunction && !tn.next.isImmutable())
+         {
+             _t.next = tn.next.immutableOf();
+         }
+         return _t;
+     }
+     return t;
+ }
+ 
+ Type makeMutable(Type _this)
+ {
+     Type t = _this.nullAttributes();
+     t.mod = _this.mod & MODFlags.shared_;
+ 
+     if (auto tn = _this.isTypeNext())
+     {
+         //printf("TypeNext::makeMutable() %p, %s\n", this, toChars());
+         TypeNext _t = cast(TypeNext)t;
+         if (tn.ty == Tsarray)
+         {
+             _t.next = tn.next.mutableOf();
+         }
+         //printf("TypeNext::makeMutable() returns %p, %s\n", t, t.toChars());
+         return _t;
+     }
+     return t;
+ }
+ 
+ Type makeConst(Type _this)
+ {
+     if (_this.mcache && _this.mcache.cto)
+     {
+         assert(_this.mcache.cto.mod == MODFlags.const_);
+         return _this.mcache.cto;
+     }
+ 
+     static Type defaultMakeConst(Type _this)
+     {
+         //printf("Type::makeConst() %p, %s\n", this, toChars());
+         Type t = _this.nullAttributes();
+         t.mod = MODFlags.const_;
+         //printf("-Type::makeConst() %p, %s\n", t, toChars());
+         return t;
+     }
+ 
+     static Type typeNextMakeConst(TypeNext _this)
+     {
+         //printf("TypeNext::makeConst() %p, %s\n", this, toChars());
+         TypeNext t = cast(TypeNext)defaultMakeConst(cast(Type)_this);
+         if (_this.ty != Tfunction && _this.next.ty != Tfunction && !_this.next.isImmutable())
+         {
+             if (_this.next.isShared())
+             {
+                 if (_this.next.isWild())
+                     t.next = _this.next.sharedWildConstOf();
+                 else
+                     t.next = _this.next.sharedConstOf();
+             }
+             else
+             {
+                 if (_this.next.isWild())
+                     t.next = _this.next.wildConstOf();
+                 else
+                     t.next = _this.next.constOf();
+             }
+         }
+         //printf("TypeNext::makeConst() returns %p, %s\n", t, t.toChars());
+         return t;
+     }
+ 
+     if (auto tn = _this.isTypeNext())
+         return typeNextMakeConst(tn);
+ 
+     return defaultMakeConst(_this);
+ }
+ 
+ /*******************************
+  * If _this is a shell around another type,
+  * get that other type.
+  */
+ Type toBasetype(Type _this)
+ {
+     /* This function is used heavily.
+      * De-virtualize it so it can be easily inlined.
+      */
+     if (auto te = _this.isTypeEnum())
+         return te.toBasetype2();
+     return _this;
+ }
+ 
+ Type toBasetype2(TypeEnum _this)
+ {
+     if (!_this.sym.members && !_this.sym.memtype)
+         return _this;
+     auto tb = _this.sym.getMemtype(Loc.initial).toBasetype();
+     return tb.castMod(_this.mod); // retain modifier bits from '_this'
+ }
+ 
+ Type memType(TypeEnum _this)
+ {
+     return _this.sym.getMemtype(Loc.initial);
+ }
+ 
+ uint alignsize(Type _this)
+ {
+     static uint structAlignsize(TypeStruct _this)
+     {
+         import dmd.dsymbolsem : size;
+         _this.sym.size(Loc.initial); // give error for forward references
+         return _this.sym.alignsize;
+     }
+ 
+     static uint enumAlignsize(TypeEnum _this)
+     {
+         Type t = _this.memType();
+         if (t.ty == Terror)
+             return 4;
+         return t.alignsize();
+     }
+ 
+     if (auto tb = _this.isTypeBasic())
+         return target.alignsize(tb);
+ 
+     switch(_this.ty)
+     {
+         case Tvector: return cast(uint)_this.isTypeVector().basetype.size();
+         case Tsarray: return _this.isTypeSArray().next.alignsize();
+         // A DArray consists of two ptr-sized values, so align it on pointer size boundary
+         case Tarray, Tdelegate: return target.ptrsize;
+         case Tstruct: return structAlignsize(_this.isTypeStruct());
+         case Tenum: return enumAlignsize(_this.isTypeEnum());
+         case Tnoreturn: return 0;
+         default: return cast(uint)size(_this, Loc.initial);
+     }
+ }
+ 
+ /*************************************
+  * Detect if type has pointer fields that are initialized to void.
+  * Local stack variables with such void fields can remain uninitialized,
+  * leading to pointer bugs.
+  * Returns:
+  *  true if so
+  */
+ 
+ bool hasVoidInitPointers(Type _this)
+ {
+     if (auto tsa = _this.isTypeSArray())
+     {
+         return tsa.next.hasVoidInitPointers();
+     }
+     else if (auto ts = _this.isTypeStruct())
+     {
+         import dmd.dsymbolsem : size;
+         ts.sym.size(Loc.initial); // give error for forward references
+         ts.sym.determineTypeProperties();
+         return ts.sym.hasVoidInitPointers;
+     }
+     else if (auto te = _this.isTypeEnum())
+     {
+         return te.memType().hasVoidInitPointers();
+     }
+     return false;
+ }
+ 
+ void Type_init()
+ {
+     Type.stringtable._init(14_000);
+ 
+     // Set basic types
+     __gshared TY* basetab =
+     [
+         Tvoid,
+         Tint8,
+         Tuns8,
+         Tint16,
+         Tuns16,
+         Tint32,
+         Tuns32,
+         Tint64,
+         Tuns64,
+         Tint128,
+         Tuns128,
+         Tfloat32,
+         Tfloat64,
+         Tfloat80,
+         Timaginary32,
+         Timaginary64,
+         Timaginary80,
+         Tcomplex32,
+         Tcomplex64,
+         Tcomplex80,
+         Tbool,
+         Tchar,
+         Twchar,
+         Tdchar,
+         Terror
+     ];
+ 
+     static Type merge(Type t)
+     {
+         import dmd.mangle.basic : tyToDecoBuffer;
+ 
+         OutBuffer buf;
+         buf.reserve(3);
+ 
+         if (t.ty == Tnoreturn)
+             buf.writestring("Nn");
+         else
+             tyToDecoBuffer(buf, t.ty);
+ 
+         auto sv = t.stringtable.update(buf[]);
+         if (sv.value)
+             return sv.value;
+         t.deco = cast(char*)sv.toDchars();
+         sv.value = t;
+         return t;
+     }
+ 
+     for (size_t i = 0; basetab[i] != Terror; i++)
+     {
+         Type t = new TypeBasic(basetab[i]);
+         .merge(t);
+         t = merge(t);
+         Type.basic[basetab[i]] = t;
+     }
+     Type.basic[Terror] = new TypeError();
+ 
+     Type.tnoreturn = new TypeNoreturn();
+     Type.tnoreturn.deco = merge(Type.tnoreturn).deco;
+     Type.basic[Tnoreturn] = Type.tnoreturn;
+ 
+     Type.tvoid = Type.basic[Tvoid];
+     Type.tint8 = Type.basic[Tint8];
+     Type.tuns8 = Type.basic[Tuns8];
+     Type.tint16 = Type.basic[Tint16];
+     Type.tuns16 = Type.basic[Tuns16];
+     Type.tint32 = Type.basic[Tint32];
+     Type.tuns32 = Type.basic[Tuns32];
+     Type.tint64 = Type.basic[Tint64];
+     Type.tuns64 = Type.basic[Tuns64];
+     Type.tint128 = Type.basic[Tint128];
+     Type.tuns128 = Type.basic[Tuns128];
+     Type.tfloat32 = Type.basic[Tfloat32];
+     Type.tfloat64 = Type.basic[Tfloat64];
+     Type.tfloat80 = Type.basic[Tfloat80];
+ 
+     Type.timaginary32 = Type.basic[Timaginary32];
+     Type.timaginary64 = Type.basic[Timaginary64];
+     Type.timaginary80 = Type.basic[Timaginary80];
+ 
+     Type.tcomplex32 = Type.basic[Tcomplex32];
+     Type.tcomplex64 = Type.basic[Tcomplex64];
+     Type.tcomplex80 = Type.basic[Tcomplex80];
+ 
+     Type.tbool = Type.basic[Tbool];
+     Type.tchar = Type.basic[Tchar];
+     Type.twchar = Type.basic[Twchar];
+     Type.tdchar = Type.basic[Tdchar];
+ 
+     Type.tshiftcnt = Type.tint32;
+     Type.terror = Type.basic[Terror];
+     Type.tnoreturn = Type.basic[Tnoreturn];
+     Type.tnull = new TypeNull();
+     Type.tnull.deco = merge(Type.tnull).deco;
+ 
+     Type.tvoidptr = Type.tvoid.pointerTo();
+     Type.tstring = Type.tchar.immutableOf().arrayOf();
+     Type.twstring = Type.twchar.immutableOf().arrayOf();
+     Type.tdstring = Type.tdchar.immutableOf().arrayOf();
+ 
+     const isLP64 = target.isLP64;
+ 
+     Type.tsize_t    = Type.basic[isLP64 ? Tuns64 : Tuns32];
+     Type.tptrdiff_t = Type.basic[isLP64 ? Tint64 : Tint32];
+     Type.thash_t = Type.tsize_t;
+ 
+     static if (__VERSION__ == 2081)
+     {
+         // Related issue: https://issues.dlang.org/show_bug.cgi?id=19134
+         // D 2.081.x regressed initializing class objects at compile time.
+         // As a workaround initialize this global at run-time instead.
+         TypeTuple.empty = new TypeTuple();
+     }
+ }
+ 
+ /************************************
+  * Return alignment to use for this type.
+  */
+ structalign_t alignment(Type _this)
+ {
+     if (auto tsa = _this.isTypeSArray())
+     {
+         return tsa.next.alignment();
+     }
+     else if (auto ts = _this.isTypeStruct())
+     {
+         import dmd.dsymbolsem : size;
+         if (ts.sym.alignment.isUnknown())
+             ts.sym.size(ts.sym.loc);
+         return ts.sym.alignment;
+     }
+     structalign_t s;
+     s.setDefault();
+     return s;
+ }
+ 
+ /***************************************
+  * Returns: true if type has any invariants
+  */
+ bool hasInvariant(Type _this)
+ {
+     if (auto tsa = _this.isTypeSArray())
+     {
+         return tsa.next.hasInvariant();
+     }
+     else if (auto ts = _this.isTypeStruct())
+     {
+         import dmd.dsymbolsem : size;
+         ts.sym.size(Loc.initial); // give error for forward references
+         ts.sym.determineTypeProperties();
+         return ts.sym.hasInvariant() || ts.sym.hasFieldWithInvariant;
+     }
+     else if (auto te = _this.isTypeEnum())
+     {
+         return te.memType().hasInvariant();
+     }
+     return false;
+ }
+ 
+ /*************************************
+  * Detect if this is an unsafe type because of the presence of `@system` members
+  * Returns:
+  *  true if so
+  */
+ bool hasUnsafeBitpatterns(Type _this)
+ {
+     static bool tstructImpl(TypeStruct _this)
+     {
+         import dmd.dsymbolsem : size;
+         _this.sym.size(Loc.initial); // give error for forward references
+         _this.sym.determineTypeProperties();
+         return _this.sym.hasUnsafeBitpatterns;
+     }
+ 
+     if(auto tb = _this.isTypeBasic())
+         return tb.ty == Tbool;
+ 
+     switch(_this.ty)
+     {
+         case Tenum: return _this.isTypeEnum().memType().hasUnsafeBitpatterns();
+         case Tstruct: return tstructImpl(_this.isTypeStruct());
+         case Tsarray: return _this.isTypeSArray().next.hasUnsafeBitpatterns();
+         default: return false;
+     }
+ }
+ 
  /*************************************
   * Resolve a tuple index, `s[oindex]`, by figuring out what `s[oindex]` represents.
   * Setting one of pe/pt/ps.
*************** private void resolveHelper(TypeQualified
*** 175,181 ****
                  error(loc, "`%s` is not defined, perhaps `import %.*s;` ?", p, cast(int)n.length, n.ptr);
              else if (auto s2 = sc.search_correct(id))
                  error(loc, "undefined identifier `%s`, did you mean %s `%s`?", p, s2.kind(), s2.toChars());
!             else if (const q = Scope.search_correct_C(id))
                  error(loc, "undefined identifier `%s`, did you mean `%s`?", p, q);
              else if ((id == Id.This   && sc.getStructClassScope()) ||
                       (id == Id._super && sc.getClassScope()))
--- 1517,1523 ----
                  error(loc, "`%s` is not defined, perhaps `import %.*s;` ?", p, cast(int)n.length, n.ptr);
              else if (auto s2 = sc.search_correct(id))
                  error(loc, "undefined identifier `%s`, did you mean %s `%s`?", p, s2.kind(), s2.toChars());
!             else if (const q = search_correct_C(id))
                  error(loc, "undefined identifier `%s`, did you mean `%s`?", p, q);
              else if ((id == Id.This   && sc.getStructClassScope()) ||
                       (id == Id._super && sc.getClassScope()))
*************** private void resolveHelper(TypeQualified
*** 240,246 ****
              break;
          }
  
!         Type t = s.getType(); // type symbol, type alias, or type tuple?
          const errorsave = global.errors;
          SearchOptFlags flags = t is null ? SearchOpt.localsOnly : SearchOpt.ignorePrivateImports;
  
--- 1582,1588 ----
              break;
          }
  
!         Type t = dmd.dsymbolsem.getType(s); // type symbol, type alias, or type tuple?
          const errorsave = global.errors;
          SearchOptFlags flags = t is null ? SearchOpt.localsOnly : SearchOpt.ignorePrivateImports;
  
*************** private void resolveHelper(TypeQualified
*** 364,370 ****
      Type t;
      while (1)
      {
!         t = s.getType();
          if (t)
              break;
          ps = s;
--- 1706,1712 ----
      Type t;
      while (1)
      {
!         t = dmd.dsymbolsem.getType(s);
          if (t)
              break;
          ps = s;
*************** void purityLevel(TypeFunction typeFuncti
*** 614,675 ****
      tf.purity = typeFunction.purity;
  }
  
- /******************************************
-  * We've mistakenly parsed `t` as a type.
-  * Redo `t` as an Expression only if there are no type modifiers.
-  * Params:
-  *      t = mistaken type
-  * Returns:
-  *      t redone as Expression, null if cannot
-  */
- Expression typeToExpression(Type t)
- {
-     static Expression visitSArray(TypeSArray t)
-     {
-         if (auto e = t.next.typeToExpression())
-             return new ArrayExp(t.dim.loc, e, t.dim);
-         return null;
-     }
- 
-     static Expression visitAArray(TypeAArray t)
-     {
-         if (auto e = t.next.typeToExpression())
-         {
-             if (auto ei = t.index.typeToExpression())
-                 return new ArrayExp(t.loc, e, ei);
-         }
-         return null;
-     }
- 
-     static Expression visitIdentifier(TypeIdentifier t)
-     {
-         return typeToExpressionHelper(t, new IdentifierExp(t.loc, t.ident));
-     }
- 
-     static Expression visitInstance(TypeInstance t)
-     {
-         return typeToExpressionHelper(t, new ScopeExp(t.loc, t.tempinst));
-     }
- 
-     // easy way to enable 'auto v = new int[mixin("exp")];' in 2.088+
-     static Expression visitMixin(TypeMixin t)
-     {
-         return new TypeExp(t.loc, t);
-     }
- 
-     if (t.mod)
-         return null;
-     switch (t.ty)
-     {
-         case Tsarray:   return visitSArray(t.isTypeSArray());
-         case Taarray:   return visitAArray(t.isTypeAArray());
-         case Tident:    return visitIdentifier(t.isTypeIdentifier());
-         case Tinstance: return visitInstance(t.isTypeInstance());
-         case Tmixin:    return visitMixin(t.isTypeMixin());
-         default:        return null;
-     }
- }
- 
  /*************************************
   * https://issues.dlang.org/show_bug.cgi?id=14488
   * Check if the inner most base type is complex or imaginary.
--- 1956,1961 ----
*************** private extern(D) bool isCopyConstructor
*** 1133,1139 ****
  
      bool bpure = !f.isPure && sc.func.setImpure(arg.loc, null);
      bool bsafe = !f.isSafe() && !f.isTrusted() && sc.setUnsafe(false, arg.loc, null);
!     bool bnogc = !f.isNogc && sc.func.setGC(arg.loc, null);
      if (bpure | bsafe | bnogc)
      {
          const nullptr = "".ptr;
--- 2419,2425 ----
  
      bool bpure = !f.isPure && sc.func.setImpure(arg.loc, null);
      bool bsafe = !f.isSafe() && !f.isTrusted() && sc.setUnsafe(false, arg.loc, null);
!     bool bnogc = !f.isNogc && sc.setGC(sc.func, arg.loc, null);
      if (bpure | bsafe | bnogc)
      {
          const nullptr = "".ptr;
*************** private extern(D) MATCH argumentMatchPar
*** 1246,1256 ****
          }
  
          // check if the copy constructor may be called to copy the argument
!         if (arg.isLvalue() && !isRef && argStruct && argStruct == prmStruct && argStruct.hasCopyCtor)
          {
!             if (!isCopyConstructorCallable(argStruct, arg, tprm, sc, pMessage))
!                 return MATCH.nomatch;
!             m = MATCH.exact;
          }
          else
          {
--- 2532,2541 ----
          }
  
          // check if the copy constructor may be called to copy the argument
!         if (arg.isLvalue() && !isRef && argStruct && argStruct == prmStruct && argStruct.hasCopyCtor &&
!             !isCopyConstructorCallable(argStruct, arg, tprm, sc, pMessage))
          {
!             return MATCH.nomatch;
          }
          else
          {
*************** private extern(D) MATCH matchTypeSafeVar
*** 1475,1481 ****
      default:
          // We can have things as `foo(int[int] wat...)` but they only match
          // with an associative array proper.
!         if (pMessage && trailingArgs.length) *pMessage = tf.getParamError(trailingArgs[0], p);
          return MATCH.nomatch;
      }
  }
--- 2760,2776 ----
      default:
          // We can have things as `foo(int[int] wat...)` but they only match
          // with an associative array proper.
!         if (!pMessage) {}
!         else if (!trailingArgs.length)
!         {
!             OutBuffer buf;
!             getMatchError(buf, "expected an argument for parameter `%s`",
!                 parameterToChars(p, tf, false));
!             *pMessage = buf.extractChars();
!         }
!         else
!             *pMessage = tf.getParamError(trailingArgs[0], p);
! 
          return MATCH.nomatch;
      }
  }
*************** uinteger_t size(Type t, Loc loc)
*** 1729,1735 ****
          case Tinstance:
          case Ttypeof:
          case Treturn:       return visitTypeQualified(cast(TypeQualified)t);
!         case Tstruct:       return t.isTypeStruct().sym.size(loc);
          case Tenum:         return t.isTypeEnum().sym.getMemtype(loc).size(loc);
          case Tnull:         return t.tvoidptr.size(loc);
          case Tnoreturn:     return 0;
--- 3024,3034 ----
          case Tinstance:
          case Ttypeof:
          case Treturn:       return visitTypeQualified(cast(TypeQualified)t);
!         case Tstruct:
!         {
!             import dmd.dsymbolsem: size;
!             return t.isTypeStruct().sym.size(loc);
!         }
          case Tenum:         return t.isTypeEnum().sym.getMemtype(loc).size(loc);
          case Tnull:         return t.tvoidptr.size(loc);
          case Tnoreturn:     return 0;
*************** Type typeSemantic(Type type, Loc loc, Sc
*** 1927,1939 ****
  
      Type visitComplex(TypeBasic t)
      {
!         if (!sc.inCfile)
!             return visitType(t);
! 
!         auto tc = getComplexLibraryType(loc, sc, t.ty);
!         if (tc.ty == Terror)
!             return tc;
!         return tc.addMod(t.mod).merge();
      }
  
      Type visitVector(TypeVector mtype)
--- 3226,3232 ----
  
      Type visitComplex(TypeBasic t)
      {
!         return visitType(t);
      }
  
      Type visitVector(TypeVector mtype)
*************** Type typeSemantic(Type type, Loc loc, Sc
*** 2993,2998 ****
--- 4286,4292 ----
          if (s)
          {
              auto td = s.isTemplateDeclaration;
+             td.computeOneMember();
              if (td && td.onemember && td.onemember.isAggregateDeclaration)
                  .error(loc, "template %s `%s` is used as a type without instantiation"
                      ~ "; to instantiate it use `%s!(arguments)`",
*************** Type typeSemantic(Type type, Loc loc, Sc
*** 3071,3077 ****
          Type t;
          Dsymbol s;
          mtype.resolve(loc, sc, e, t, s);
!         if (s && (t = s.getType()) !is null)
              t = t.addMod(mtype.mod);
          if (!t)
          {
--- 4365,4371 ----
          Type t;
          Dsymbol s;
          mtype.resolve(loc, sc, e, t, s);
!         if (s && (t = dmd.dsymbolsem.getType(s)) !is null)
              t = t.addMod(mtype.mod);
          if (!t)
          {
*************** Type typeSemantic(Type type, Loc loc, Sc
*** 3104,3110 ****
          Type t;
          Dsymbol s;
          mtype.resolve(loc, sc, e, t, s);
!         if (s && (t = s.getType()) !is null)
              t = t.addMod(mtype.mod);
          if (!t)
          {
--- 4398,4404 ----
          Type t;
          Dsymbol s;
          mtype.resolve(loc, sc, e, t, s);
!         if (s && (t = dmd.dsymbolsem.getType(s)) !is null)
              t = t.addMod(mtype.mod);
          if (!t)
          {
*************** Type trySemantic(Type type, Loc loc, Sco
*** 3482,3488 ****
          // If `typeSemantic` succeeded, there may have been deprecations that
          // were gagged due the `startGagging` above.  Run again to display
          // those deprecations.  https://issues.dlang.org/show_bug.cgi?id=19107
!         if (global.gaggedWarnings > 0)
              typeSemantic(tcopy, loc, sc);
      }
      //printf("-trySemantic(%s) %d\n", toChars(), global.errors);
--- 4776,4782 ----
          // If `typeSemantic` succeeded, there may have been deprecations that
          // were gagged due the `startGagging` above.  Run again to display
          // those deprecations.  https://issues.dlang.org/show_bug.cgi?id=19107
!         if (global.gaggedDeprecations > 0)
              typeSemantic(tcopy, loc, sc);
      }
      //printf("-trySemantic(%s) %d\n", toChars(), global.errors);
*************** Expression defaultInitLiteral(Type t, Lo
*** 3617,3623 ****
          {
              printf("TypeStruct::defaultInitLiteral() '%s'\n", toChars());
          }
!         ts.sym.size(loc);
          if (ts.sym.sizeok != Sizeok.done)
              return ErrorExp.get();
  
--- 4911,4920 ----
          {
              printf("TypeStruct::defaultInitLiteral() '%s'\n", toChars());
          }
!         {
!             import dmd.dsymbolsem: size;
!             ts.sym.size(loc);
!         }
          if (ts.sym.sizeok != Sizeok.done)
              return ErrorExp.get();
  
*************** void resolve(Type mt, Loc loc, Scope* sc
*** 4511,4517 ****
              !mt.exp.type.isTypeTuple())
          {
              if (!sc.inCfile && // in (extended) C typeof may be used on types as with sizeof
!                 mt.exp.checkType())
                  goto Lerr;
  
              /* Today, 'typeof(func)' returns void if func is a
--- 5808,5814 ----
              !mt.exp.type.isTypeTuple())
          {
              if (!sc.inCfile && // in (extended) C typeof may be used on types as with sizeof
!                 !mt.exp.hasValidType())
                  goto Lerr;
  
              /* Today, 'typeof(func)' returns void if func is a
*************** Expression dotExp(Type mt, Scope* sc, Ex
*** 4872,4878 ****
                  {
                      auto ad = v.isMember();
                      objc.checkOffsetof(e, ad);
!                     ad.size(e.loc);
                      if (ad.sizeok != Sizeok.done)
                          return ErrorExp.get();
                      uint value;
--- 6169,6178 ----
                  {
                      auto ad = v.isMember();
                      objc.checkOffsetof(e, ad);
!                     {
!                         import dmd.dsymbolsem: size;
!                         ad.size(e.loc);
!                     }
                      if (ad.sizeok != Sizeok.done)
                          return ErrorExp.get();
                      uint value;
*************** Expression dotExp(Type mt, Scope* sc, Ex
*** 5533,5539 ****
              }
          }
  
!         if (auto t = s.getType())
          {
              return (new TypeExp(e.loc, t)).expressionSemantic(sc);
          }
--- 6833,6839 ----
              }
          }
  
!         if (auto t = dmd.dsymbolsem.getType(s))
          {
              return (new TypeExp(e.loc, t)).expressionSemantic(sc);
          }
*************** Expression dotExp(Type mt, Scope* sc, Ex
*** 5606,5611 ****
--- 6906,6912 ----
              if (TupleDeclaration tup = d.isTupleDeclaration())
              {
                  e = new TupleExp(e.loc, tup);
+                 fillTupleExpExps(e.isTupleExp(), tup);
                  return e.expressionSemantic(sc);
              }
              if (d.needThis() && sc.intypeof != 1)
*************** Expression dotExp(Type mt, Scope* sc, Ex
*** 5724,5730 ****
               */
              e = e.expressionSemantic(sc); // do this before turning on noAccessCheck
  
!             mt.sym.size(e.loc); // do semantic of type
  
              Expression e0;
              Expression ev = e.op == EXP.type ? null : e;
--- 7025,7034 ----
               */
              e = e.expressionSemantic(sc); // do this before turning on noAccessCheck
  
!             {
!                 import dmd.dsymbolsem: size;
!                 mt.sym.size(e.loc); // do semantic of type
!             }
  
              Expression e0;
              Expression ev = e.op == EXP.type ? null : e;
*************** Expression dotExp(Type mt, Scope* sc, Ex
*** 5958,5964 ****
              }
          }
  
!         if (auto t = s.getType())
          {
              return (new TypeExp(e.loc, t)).expressionSemantic(sc);
          }
--- 7262,7268 ----
              }
          }
  
!         if (auto t = dmd.dsymbolsem.getType(s))
          {
              return (new TypeExp(e.loc, t)).expressionSemantic(sc);
          }
*************** Expression dotExp(Type mt, Scope* sc, Ex
*** 6039,6044 ****
--- 7343,7349 ----
              if (TupleDeclaration tup = d.isTupleDeclaration())
              {
                  e = new TupleExp(e.loc, tup);
+                 fillTupleExpExps(e.isTupleExp(), tup);
                  e = e.expressionSemantic(sc);
                  return e;
              }
*************** Expression dotExp(Type mt, Scope* sc, Ex
*** 6049,6055 ****
                  && d.isFuncDeclaration().objc.selector)
              {
                  auto classRef = new ObjcClassReferenceExp(e.loc, mt.sym);
!                 classRef.type = objc.getRuntimeMetaclass(mt.sym).getType();
                  return new DotVarExp(e.loc, classRef, d).expressionSemantic(sc);
              }
              else if (d.needThis() && sc.intypeof != 1)
--- 7354,7360 ----
                  && d.isFuncDeclaration().objc.selector)
              {
                  auto classRef = new ObjcClassReferenceExp(e.loc, mt.sym);
!                 classRef.type = dmd.dsymbolsem.getType((objc.getRuntimeMetaclass(mt.sym)));
                  return new DotVarExp(e.loc, classRef, d).expressionSemantic(sc);
              }
              else if (d.needThis() && sc.intypeof != 1)
*************** Type getComplexLibraryType(Loc loc, Scop
*** 6680,6686 ****
          return *pt;
      }
      s = s.toAlias();
!     if (auto t = s.getType())
      {
          if (auto ts = t.toBasetype().isTypeStruct())
          {
--- 7985,7991 ----
          return *pt;
      }
      s = s.toAlias();
!     if (auto t = dmd.dsymbolsem.getType(s))
      {
          if (auto ts = t.toBasetype().isTypeStruct())
          {
*************** bool isOpaqueType(Type t)
*** 8051,8103 ****
  
  private:
  
- /* Helper function for `typeToExpression`. Contains common code
-  * for TypeQualified derived classes.
-  */
- Expression typeToExpressionHelper(TypeQualified t, Expression e, size_t i = 0)
- {
-     //printf("toExpressionHelper(e = %s %s)\n", EXPtoString(e.op).ptr, e.toChars());
-     foreach (id; t.idents[i .. t.idents.length])
-     {
-         //printf("\t[%d] e: '%s', id: '%s'\n", i, e.toChars(), id.toChars());
- 
-         final switch (id.dyncast())
-         {
-             // ... '. ident'
-             case DYNCAST.identifier:
-                 e = new DotIdExp(e.loc, e, cast(Identifier)id);
-                 break;
- 
-             // ... '. name!(tiargs)'
-             case DYNCAST.dsymbol:
-                 auto ti = (cast(Dsymbol)id).isTemplateInstance();
-                 assert(ti);
-                 e = new DotTemplateInstanceExp(e.loc, e, ti.name, ti.tiargs);
-                 break;
- 
-             // ... '[type]'
-             case DYNCAST.type:          // https://issues.dlang.org/show_bug.cgi?id=1215
-                 e = new ArrayExp(t.loc, e, new TypeExp(t.loc, cast(Type)id));
-                 break;
- 
-             // ... '[expr]'
-             case DYNCAST.expression:    // https://issues.dlang.org/show_bug.cgi?id=1215
-                 e = new ArrayExp(t.loc, e, cast(Expression)id);
-                 break;
- 
-             case DYNCAST.object:
-             case DYNCAST.tuple:
-             case DYNCAST.parameter:
-             case DYNCAST.statement:
-             case DYNCAST.condition:
-             case DYNCAST.templateparameter:
-             case DYNCAST.initializer:
-                 assert(0);
-         }
-     }
-     return e;
- }
- 
  /**************************
   * This evaluates exp while setting length to be the number
   * of elements in the tuple t.
--- 9356,9361 ----
diff -Nrcpad gcc-16-20260201/gcc/d/dmd/typinf.d gcc-16-20260208/gcc/d/dmd/typinf.d
*** gcc-16-20260201/gcc/d/dmd/typinf.d	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/dmd/typinf.d	Sun Feb  8 22:32:07 2026
*************** import dmd.location;
*** 24,29 ****
--- 24,30 ----
  import dmd.mtype;
  import dmd.templatesem;
  import dmd.typesem;
+ import dmd.dsymbolsem : addDeferredSemantic3;
  import core.stdc.stdio;
  
  /****************************************************
*************** bool genTypeInfo(Expression e, Loc loc,
*** 52,58 ****
              if (e)
                  .error(loc, "expression `%s` uses the GC and cannot be used with switch `-betterC`", e.toChars());
              else
!                 .error(loc, "`TypeInfo` cannot be used with -betterC");
  
              if (sc && sc.tinst)
                  sc.tinst.printInstantiationTrace(Classification.error, uint.max);
--- 53,59 ----
              if (e)
                  .error(loc, "expression `%s` uses the GC and cannot be used with switch `-betterC`", e.toChars());
              else
!                 .error(loc, "`TypeInfo` cannot be used with `-betterC`");
  
              if (sc && sc.tinst)
                  sc.tinst.printInstantiationTrace(Classification.error, uint.max);
*************** TypeInfoDeclaration getTypeInfoAssocArra
*** 168,174 ****
      t.vtinfo = ti; // assign it early to avoid recursion in expressionSemantic
      ti._scope = sc;
      sc.setNoFree();
!     Module.addDeferredSemantic3(ti);
      return ti;
  }
  
--- 169,175 ----
      t.vtinfo = ti; // assign it early to avoid recursion in expressionSemantic
      ti._scope = sc;
      sc.setNoFree();
!     addDeferredSemantic3(ti);
      return ti;
  }
  
diff -Nrcpad gcc-16-20260201/gcc/d/expr.cc gcc-16-20260208/gcc/d/expr.cc
*** gcc-16-20260201/gcc/d/expr.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/expr.cc	Sun Feb  8 22:32:07 2026
*************** along with GCC; see the file COPYING3.
*** 44,97 ****
  #include "d-tree.h"
  
  
- /* Determine if type T is a struct that has a postblit.  */
- 
- static bool
- needs_postblit (Type *t)
- {
-   t = t->baseElemOf ();
- 
-   if (TypeStruct *ts = t->isTypeStruct ())
-     {
-       if (ts->sym->postblit)
- 	return true;
-     }
- 
-   return false;
- }
- 
- /* Determine if type T is a struct that has a destructor.  */
- 
- static bool
- needs_dtor (Type *t)
- {
-   t = t->baseElemOf ();
- 
-   if (TypeStruct *ts = t->isTypeStruct ())
-     {
-       if (ts->sym->dtor)
- 	return true;
-     }
- 
-   return false;
- }
- 
- /* Determine if expression E is a suitable lvalue.  */
- 
- static bool
- lvalue_p (Expression *e)
- {
-   SliceExp *se = e->isSliceExp ();
-   if (se != NULL && se->e1->isLvalue ())
-     return true;
- 
-   CastExp *ce = e->isCastExp ();
-   if (ce != NULL && ce->e1->isLvalue ())
-     return true;
- 
-   return (e->op != EXP::slice && e->isLvalue ());
- }
- 
  /* Build an expression of code CODE, data type TYPE, and operands ARG0 and
     ARG1.  Perform relevant conversions needed for correct code operations.  */
  
--- 44,49 ----
*************** public:
*** 295,308 ****
  	this->result_ = d_convert (build_ctype (e->type),
  				   build_boolop (code, t1, t2));
        }
!     else if (tb1->isFloating () && tb1->ty != TY::Tvector)
        {
  	/* For floating-point values, identity is defined as the bits in the
  	   operands being identical.  */
  	tree t1 = d_save_expr (build_expr (e->e1));
  	tree t2 = d_save_expr (build_expr (e->e2));
  
! 	if (!tb1->isComplex ())
  	  this->result_ = build_float_identity (code, t1, t2);
  	else
  	  {
--- 247,260 ----
  	this->result_ = d_convert (build_ctype (e->type),
  				   build_boolop (code, t1, t2));
        }
!     else if (dmd::isFloating (tb1) && tb1->ty != TY::Tvector)
        {
  	/* For floating-point values, identity is defined as the bits in the
  	   operands being identical.  */
  	tree t1 = d_save_expr (build_expr (e->e1));
  	tree t2 = d_save_expr (build_expr (e->e2));
  
! 	if (!dmd::isComplex (tb1))
  	  this->result_ = build_float_identity (code, t1, t2);
  	else
  	  {
*************** public:
*** 593,600 ****
        {
        case EXP::add:
        case EXP::min:
! 	if ((e->e1->type->isReal () && e->e2->type->isImaginary ())
! 	    || (e->e1->type->isImaginary () && e->e2->type->isReal ()))
  	  {
  	    /* If the result is complex, then we can shortcut binary_op.
  	       Frontend should have already validated types and sizes.  */
--- 545,552 ----
        {
        case EXP::add:
        case EXP::min:
! 	if ((dmd::isReal (e->e1->type) && dmd::isImaginary (e->e2->type))
! 	    || (dmd::isImaginary (e->e1->type) && dmd::isReal (e->e2->type)))
  	  {
  	    /* If the result is complex, then we can shortcut binary_op.
  	       Frontend should have already validated types and sizes.  */
*************** public:
*** 604,610 ****
  	    if (e->op == EXP::min)
  	      t2 = build1 (NEGATE_EXPR, TREE_TYPE (t2), t2);
  
! 	    if (e->e1->type->isReal ())
  	      this->result_ = complex_expr (build_ctype (e->type), t1, t2);
  	    else
  	      this->result_ = complex_expr (build_ctype (e->type), t2, t1);
--- 556,562 ----
  	    if (e->op == EXP::min)
  	      t2 = build1 (NEGATE_EXPR, TREE_TYPE (t2), t2);
  
! 	    if (dmd::isReal (e->e1->type))
  	      this->result_ = complex_expr (build_ctype (e->type), t1, t2);
  	    else
  	      this->result_ = complex_expr (build_ctype (e->type), t2, t1);
*************** public:
*** 634,645 ****
  	      }
  	  }
  
! 	code = e->e1->type->isIntegral ()
  	  ? TRUNC_DIV_EXPR : RDIV_EXPR;
  	break;
  
        case EXP::mod:
! 	code = e->e1->type->isFloating ()
  	  ? FLOAT_MOD_EXPR : TRUNC_MOD_EXPR;
  	break;
  
--- 586,597 ----
  	      }
  	  }
  
! 	code = dmd::isIntegral (e->e1->type)
  	  ? TRUNC_DIV_EXPR : RDIV_EXPR;
  	break;
  
        case EXP::mod:
! 	code = dmd::isFloating (e->e1->type)
  	  ? FLOAT_MOD_EXPR : TRUNC_MOD_EXPR;
  	break;
  
*************** public:
*** 723,734 ****
  	break;
  
        case EXP::divAssign:
! 	code = e->e1->type->isIntegral ()
  	  ? TRUNC_DIV_EXPR : RDIV_EXPR;
  	break;
  
        case EXP::modAssign:
! 	code = e->e1->type->isFloating ()
  	  ? FLOAT_MOD_EXPR : TRUNC_MOD_EXPR;
  	break;
  
--- 675,686 ----
  	break;
  
        case EXP::divAssign:
! 	code = dmd::isIntegral (e->e1->type)
  	  ? TRUNC_DIV_EXPR : RDIV_EXPR;
  	break;
  
        case EXP::modAssign:
! 	code = dmd::isFloating (e->e1->type)
  	  ? FLOAT_MOD_EXPR : TRUNC_MOD_EXPR;
  	break;
  
*************** public:
*** 832,837 ****
--- 784,799 ----
        }
    }
  
+   /* Lower a construction expression, or forward to assignment expression.  */
+ 
+   void visit (ConstructExp *e) final override
+   {
+     if (!e->lowering)
+       return ExprVisitor::visit ((AssignExp *) e);
+ 
+     this->result_ = build_expr (e->lowering);
+   }
+ 
    /* Build an assignment expression.  The right operand is implicitly
       converted to the type of the left operand, and assigned to it.  */
  
*************** public:
*** 865,874 ****
  	Type *stype = se->e1->type->toBasetype ();
  	Type *etype = stype->nextOf ()->toBasetype ();
  
- 	/* Determine if we need to run postblit or dtor.  */
- 	bool postblit = needs_postblit (etype) && lvalue_p (e->e2);
- 	bool destructor = needs_dtor (etype);
- 
  	if (e->memset == MemorySet::blockAssign)
  	  {
  	    /* Set a range of elements to one value.  */
--- 827,832 ----
*************** public:
*** 880,892 ****
  	    tree init = stabilize_expr (&t1);
  	    t1 = d_save_expr (t1);
  
- 	    if ((postblit || destructor) && e->op != EXP::blit)
- 	      {
- 		/* This case should have been rewritten to `_d_arraysetassign`
- 		   in the semantic phase.  */
- 		gcc_unreachable ();
- 	      }
- 
  	    if (integer_zerop (t2))
  	      {
  		tree size = size_mult_expr (d_array_length (t1),
--- 838,843 ----
*************** public:
*** 905,969 ****
  	    /* Perform a memcpy operation.  */
  	    gcc_assert (e->e2->type->ty != TY::Tpointer);
  
! 	    if (!postblit && !destructor)
! 	      {
! 		tree t1 = d_save_expr (d_array_convert (e->e1));
! 		tree t2 = d_save_expr (d_array_convert (e->e2));
! 
! 		/* References to array data.  */
! 		tree t1ptr = d_array_ptr (t1);
! 		tree t1len = d_array_length (t1);
! 		tree t2ptr = d_array_ptr (t2);
  
! 		/* Generate: memcpy(to, from, size)  */
! 		tree size =
! 		  size_mult_expr (t1len, size_int (dmd::size (etype)));
! 		tree result = build_memcpy_call (t1ptr, t2ptr, size);
  
! 		/* Insert check that array lengths match and do not overlap.  */
! 		if (array_bounds_check ())
! 		  {
! 		    /* tlencmp = (t1len == t2len)  */
! 		    tree t2len = d_array_length (t2);
! 		    tree tlencmp = build_boolop (EQ_EXPR, t1len, t2len);
  
! 		    /* toverlap = (t1ptr + size <= t2ptr
! 				   || t2ptr + size <= t1ptr)  */
! 		    tree t1ptrcmp = build_boolop (LE_EXPR,
! 						  build_offset (t1ptr, size),
! 						  t2ptr);
! 		    tree t2ptrcmp = build_boolop (LE_EXPR,
! 						  build_offset (t2ptr, size),
! 						  t1ptr);
! 		    tree toverlap = build_boolop (TRUTH_ORIF_EXPR, t1ptrcmp,
! 						  t2ptrcmp);
  
! 		    /* (tlencmp && toverlap) ? memcpy() : _d_arraybounds()  */
! 		    tree tassert = build_array_bounds_call (e->loc);
! 		    tree tboundscheck = build_boolop (TRUTH_ANDIF_EXPR,
! 						      tlencmp, toverlap);
  
! 		    result = build_condition (void_type_node, tboundscheck,
! 					      result, tassert);
! 		  }
  
! 		this->result_ = compound_expr (result, t1);
! 	      }
! 	    else if ((postblit || destructor)
! 		     && e->op != EXP::blit && e->op != EXP::construct)
! 	      {
! 		/* Assigning to a non-trivially copyable array has already been
! 		   handled by the front-end.  */
! 		gcc_unreachable ();
! 	      }
! 	    else
! 	      {
! 		/* Generate: _d_arraycopy()  */
! 		this->result_ = build_libcall (LIBCALL_ARRAYCOPY, e->type, 3,
! 					       size_int (dmd::size (etype)),
! 					       d_array_convert (e->e2),
! 					       d_array_convert (e->e1));
  	      }
  	  }
  
  	return;
--- 856,901 ----
  	    /* Perform a memcpy operation.  */
  	    gcc_assert (e->e2->type->ty != TY::Tpointer);
  
! 	    tree t1 = d_save_expr (d_array_convert (e->e1));
! 	    tree t2 = d_save_expr (d_array_convert (e->e2));
  
! 	    /* References to array data.  */
! 	    tree t1ptr = d_array_ptr (t1);
! 	    tree t1len = d_array_length (t1);
! 	    tree t2ptr = d_array_ptr (t2);
  
! 	    /* Generate: memcpy(to, from, size)  */
! 	    tree size = size_mult_expr (t1len, size_int (dmd::size (etype)));
! 	    tree result = build_memcpy_call (t1ptr, t2ptr, size);
  
! 	    /* Insert check that array lengths match and do not overlap.  */
! 	    if (array_bounds_check ())
! 	      {
! 		/* tlencmp = (t1len == t2len)  */
! 		tree t2len = d_array_length (t2);
! 		tree tlencmp = build_boolop (EQ_EXPR, t1len, t2len);
  
! 		/* toverlap = (t1ptr + size <= t2ptr
! 		   || t2ptr + size <= t1ptr)  */
! 		tree t1ptrcmp = build_boolop (LE_EXPR,
! 					      build_offset (t1ptr, size),
! 					      t2ptr);
! 		tree t2ptrcmp = build_boolop (LE_EXPR,
! 					      build_offset (t2ptr, size),
! 					      t1ptr);
! 		tree toverlap = build_boolop (TRUTH_ORIF_EXPR, t1ptrcmp,
! 					      t2ptrcmp);
  
! 		/* (tlencmp && toverlap) ? memcpy() : _d_arraybounds()  */
! 		tree tassert = build_array_bounds_call (e->loc);
! 		tree tboundscheck = build_boolop (TRUTH_ANDIF_EXPR,
! 						  tlencmp, toverlap);
  
! 		result = build_condition (void_type_node, tboundscheck,
! 					  result, tassert);
  	      }
+ 
+ 	    this->result_ = compound_expr (result, t1);
  	  }
  
  	return;
*************** public:
*** 1040,1074 ****
  	    this->result_ = build_memset_call (build_expr (e->e1));
  	    return;
  	  }
! 
! 	Type *etype = tb1->nextOf ();
! 	gcc_assert (e->e2->type->toBasetype ()->ty == TY::Tsarray);
! 
! 	/* Determine if we need to run postblit.  */
! 	const bool postblit = needs_postblit (etype);
! 	const bool destructor = needs_dtor (etype);
! 	const bool lvalue = lvalue_p (e->e2);
! 
! 	/* Optimize static array assignment with array literal.  Even if the
! 	   elements in rhs are all rvalues and don't have to call postblits,
! 	   this assignment should call dtors on old assigned elements.  */
! 	if ((!postblit && !destructor)
! 	    || (e->op == EXP::construct && e->e2->op == EXP::arrayLiteral)
! 	    || (e->op == EXP::construct && e->e2->op == EXP::call)
! 	    || (e->op == EXP::construct && !lvalue && postblit)
! 	    || (e->op == EXP::blit || dmd::size (e->e1->type) == 0))
  	  {
  	    tree t1 = build_expr (e->e1);
  	    tree t2 = convert_for_assignment (e->e2, e->e1->type);
  
  	    this->result_ = build_assign (modifycode, t1, t2);
  	    return;
  	  }
- 
- 	/* All other kinds of lvalue or rvalue static array assignment.
- 	   Array construction has already been handled by the front-end.  */
- 	gcc_assert (e->op != EXP::construct);
- 	gcc_unreachable ();
        }
  
      /* Simple assignment.  */
--- 972,989 ----
  	    this->result_ = build_memset_call (build_expr (e->e1));
  	    return;
  	  }
! 	else
  	  {
+ 	    /* Optimize static array assignment with array literal.  Even if the
+ 	       elements in rhs are all rvalues and don't have to call postblits,
+ 	       this assignment should call dtors on old assigned elements.  */
+ 	    gcc_assert (e->e2->type->toBasetype ()->ty == TY::Tsarray);
  	    tree t1 = build_expr (e->e1);
  	    tree t2 = convert_for_assignment (e->e2, e->e1->type);
  
  	    this->result_ = build_assign (modifycode, t1, t2);
  	    return;
  	  }
        }
  
      /* Simple assignment.  */
*************** public:
*** 1090,1096 ****
    void visit (ThrowExp *e) final override
    {
      tree arg = build_expr_dtor (e->e1);
!     this->result_ = build_libcall (LIBCALL_THROW, Type::tvoid, 1, arg);
    }
  
    /* Build a postfix expression.  */
--- 1005,1011 ----
    void visit (ThrowExp *e) final override
    {
      tree arg = build_expr_dtor (e->e1);
!     this->result_ = build_libcall (LIBCALL_THROW, 1, arg);
    }
  
    /* Build a postfix expression.  */
*************** public:
*** 1339,1345 ****
  	libcall_fn libcall = tb1->isClassHandle ()->isInterfaceDeclaration ()
  	  ? LIBCALL_CALLINTERFACEFINALIZER : LIBCALL_CALLFINALIZER;
  
! 	this->result_ = build_libcall (libcall, Type::tvoid, 1, t1);
  	return;
        }
      else
--- 1254,1260 ----
  	libcall_fn libcall = tb1->isClassHandle ()->isInterfaceDeclaration ()
  	  ? LIBCALL_CALLINTERFACEFINALIZER : LIBCALL_CALLFINALIZER;
  
! 	this->result_ = build_libcall (libcall, 1, t1);
  	return;
        }
      else
*************** public:
*** 1424,1435 ****
        {
  	AddExp *ae = e->e1->isAddExp ();
  	if (ae->e1->op == EXP::address
! 	    && ae->e2->isConst () && ae->e2->type->isIntegral ())
  	  {
  	    Expression *ex = ae->e1->isAddrExp ()->e1;
  	    tnext = ex->type->toBasetype ();
  	    result = build_expr (ex);
! 	    offset = ae->e2->toUInteger ();
  	  }
        }
      else if (e->e1->op == EXP::symbolOffset)
--- 1339,1350 ----
        {
  	AddExp *ae = e->e1->isAddExp ();
  	if (ae->e1->op == EXP::address
! 	    && ae->e2->isConst () && dmd::isIntegral (ae->e2->type))
  	  {
  	    Expression *ex = ae->e1->isAddrExp ()->e1;
  	    tnext = ex->type->toBasetype ();
  	    result = build_expr (ex);
! 	    offset = dmd::toUInteger (ae->e2);
  	  }
        }
      else if (e->e1->op == EXP::symbolOffset)
*************** public:
*** 1849,1856 ****
  		if (!cd->isInterfaceDeclaration () && !cd->isCPPclass ())
  		  {
  		    arg = d_save_expr (arg);
! 		    assert_pass = build_libcall (LIBCALL_INVARIANT,
! 						 Type::tvoid, 1, arg);
  		  }
  	      }
  	    else if (tb1->ty == TY::Tpointer
--- 1764,1770 ----
  		if (!cd->isInterfaceDeclaration () && !cd->isCPPclass ())
  		  {
  		    arg = d_save_expr (arg);
! 		    assert_pass = build_libcall (LIBCALL_INVARIANT, 1, arg);
  		  }
  	      }
  	    else if (tb1->ty == TY::Tpointer
*************** public:
*** 1956,1982 ****
      /* Compile the declaration.  */
      build_lambda_tree (e->fd, e->type->toBasetype ());
  
!     /* If nested, this will be a trampoline.  */
!     if (e->fd->isNested ())
!       {
! 	tree func = build_address (get_symbol_decl (e->fd));
! 	tree object;
  
! 	if (this->constp_)
  	  {
! 	    /* Static delegate variables have no context pointer.  */
! 	    object = null_pointer_node;
! 	    this->result_ = build_method_call (func, object, e->fd->type);
  	    TREE_CONSTANT (this->result_) = 1;
  	  }
  	else
  	  {
! 	    object = get_frame_for_symbol (e->fd);
  	    this->result_ = build_method_call (func, object, e->fd->type);
  	  }
        }
      else
        {
  	this->result_ = build_nop (build_ctype (e->type),
  				   build_address (get_symbol_decl (e->fd)));
        }
--- 1870,1900 ----
      /* Compile the declaration.  */
      build_lambda_tree (e->fd, e->type->toBasetype ());
  
!     tree func = build_address (get_symbol_decl (e->fd));
!     Type *tb = e->type->toBasetype ();
  
!     /* If a delegate is expected, the literal will be inferred as a delegate
!        even if it accesses no variables from an enclosing function.  */
!     if (tb->ty == TY::Tdelegate)
!       {
! 	/* Static delegate variables have no context pointer.  */
! 	if (this->constp_ || !e->fd->isNested ())
  	  {
! 	    this->result_ = build_method_call (func, null_pointer_node,
! 					       e->fd->type);
  	    TREE_CONSTANT (this->result_) = 1;
  	  }
  	else
  	  {
! 	    gcc_assert (e->fd->isNested ());
! 	    tree object = get_frame_for_symbol (e->fd);
  	    this->result_ = build_method_call (func, object, e->fd->type);
  	  }
        }
      else
        {
+ 	/* The function literal is a function pointer.  */
+ 	gcc_assert (tb->ty == TY::Tpointer);
  	this->result_ = build_nop (build_ctype (e->type),
  				   build_address (get_symbol_decl (e->fd)));
        }
*************** public:
*** 2244,2250 ****
  	tree new_call;
  
  	/* Cannot new an opaque struct.  */
! 	if (sd->size (e->loc) == 0)
  	  {
  	    this->result_ = d_convert (build_ctype (e->type),
  				       integer_zero_node);
--- 2162,2168 ----
  	tree new_call;
  
  	/* Cannot new an opaque struct.  */
! 	if (dmd::size (sd, e->loc) == 0)
  	  {
  	    this->result_ = d_convert (build_ctype (e->type),
  				       integer_zero_node);
*************** public:
*** 2516,2522 ****
      /* Implicitly convert void[n] to ubyte[n].  */
      if (tb->ty == TY::Tsarray && tb->nextOf ()->toBasetype ()->ty == TY::Tvoid)
        {
! 	dinteger_t ndim = tb->isTypeSArray ()->dim->toUInteger ();
  	tb = dmd::sarrayOf (Type::tuns8, ndim);
        }
  
--- 2434,2440 ----
      /* Implicitly convert void[n] to ubyte[n].  */
      if (tb->ty == TY::Tsarray && tb->nextOf ()->toBasetype ()->ty == TY::Tvoid)
        {
! 	dinteger_t ndim = dmd::toUInteger (tb->isTypeSArray ()->dim);
  	tb = dmd::sarrayOf (Type::tuns8, ndim);
        }
  
diff -Nrcpad gcc-16-20260201/gcc/d/imports.cc gcc-16-20260208/gcc/d/imports.cc
*** gcc-16-20260201/gcc/d/imports.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/imports.cc	Sun Feb  8 22:32:07 2026
*************** public:
*** 130,136 ****
    void visit (VarDeclaration *d) final override
    {
      /* Not all kinds of manifest constants create a CONST_DECL.  */
!     if (!d->canTakeAddressOf () && !d->type->isScalar ())
        return;
  
      visit ((Declaration *) d);
--- 130,136 ----
    void visit (VarDeclaration *d) final override
    {
      /* Not all kinds of manifest constants create a CONST_DECL.  */
!     if (!d->canTakeAddressOf () && !dmd::isScalar (d->type))
        return;
  
      visit ((Declaration *) d);
*************** public:
*** 148,154 ****
  
      if (dsym == d)
        {
! 	Type *type = d->getType ();
  
  	/* Type imports should really be part of their own visit method.  */
  	if (type != NULL)
--- 148,154 ----
  
      if (dsym == d)
        {
! 	Type *type = dmd::getType (d);
  
  	/* Type imports should really be part of their own visit method.  */
  	if (type != NULL)
diff -Nrcpad gcc-16-20260201/gcc/d/intrinsics.def gcc-16-20260208/gcc/d/intrinsics.def
*** gcc-16-20260201/gcc/d/intrinsics.def	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/intrinsics.def	Sun Feb  8 22:32:07 2026
*************** DEF_CTFE_BUILTIN (INTRINSIC_FMA, BUILT_I
*** 253,264 ****
  
  /* core.stdc.stdarg intrinsics.  */
  
! DEF_D_BUILTIN (INTRINSIC_VA_ARG, BUILT_IN_NONE, "va_arg", "core.stdc.stdarg",
! 	       "FK@7va_listK@1TZv")
! DEF_D_BUILTIN (INTRINSIC_C_VA_ARG, BUILT_IN_NONE, "va_arg", "core.stdc.stdarg",
! 	       "FK@7va_listZ@1T")
! DEF_D_BUILTIN (INTRINSIC_VASTART, BUILT_IN_NONE, "va_start", "core.stdc.stdarg",
! 	       "FJ@7va_listK@1TZv")
  
  /* gcc.simd intrinsics.  */
  
--- 253,264 ----
  
  /* core.stdc.stdarg intrinsics.  */
  
! DEF_D_BUILTIN (INTRINSIC_VA_ARG, BUILT_IN_NONE, "va_arg",
! 	       "core.internal.vararg.gnu", "FK@7va_listK@1TZv")
! DEF_D_BUILTIN (INTRINSIC_C_VA_ARG, BUILT_IN_NONE, "va_arg",
! 	       "core.internal.vararg.gnu", "FK@7va_listZ@1T")
! DEF_D_BUILTIN (INTRINSIC_VASTART, BUILT_IN_NONE, "va_start",
! 	       "core.internal.vararg.gnu", "FJ@7va_listK@1TZv")
  
  /* gcc.simd intrinsics.  */
  
diff -Nrcpad gcc-16-20260201/gcc/d/lang.opt gcc-16-20260208/gcc/d/lang.opt
*** gcc-16-20260201/gcc/d/lang.opt	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/lang.opt	Sun Feb  8 22:32:07 2026
*************** shared-libphobos
*** 519,524 ****
--- 519,532 ----
  Driver
  Link the standard D library dynamically in the compilation.
  
+ std=d2024
+ D
+ Conform to the 2024 D language edition.
+ 
+ std=d202y
+ D
+ Conform to the latest 202Y D language edition (experimental).
+ 
  v
  D
  ; Documented in C
diff -Nrcpad gcc-16-20260201/gcc/d/runtime.cc gcc-16-20260208/gcc/d/runtime.cc
*** gcc-16-20260201/gcc/d/runtime.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/runtime.cc	Sun Feb  8 22:32:07 2026
*************** along with GCC; see the file COPYING3.
*** 36,41 ****
--- 36,42 ----
  
  enum d_libcall_type
  {
+   LCT_NORETURN,		    /* typeof(*null)	    */
    LCT_VOID,		    /* void		    */
    LCT_BYTE,		    /* byte		    */
    LCT_INT,		    /* int		    */
*************** get_libcall_type (d_libcall_type type)
*** 89,94 ****
--- 90,99 ----
  
    switch (type)
      {
+     case LCT_NORETURN:
+       libcall_types[type] = Type::tnoreturn;
+       break;
+ 
      case LCT_VOID:
        libcall_types[type] = Type::tvoid;
        break;
*************** get_libcall (libcall_fn libcall)
*** 296,319 ****
    return libcall_decls[libcall];
  }
  
! /* Generate a call to LIBCALL, returning the result as TYPE.  NARGS is the
!    number of call arguments, the expressions of which are provided in `...'.
     This does not perform conversions or promotions on the arguments.  */
  
! tree
! build_libcall (libcall_fn libcall, Type *type, int nargs, ...)
  {
    /* Build the call expression to the runtime function.  */
    tree decl = get_libcall (libcall);
    tree *args = XALLOCAVEC (tree, nargs);
    va_list ap;
  
    va_start (ap, nargs);
!   for (int i = 0; i < nargs; i++)
!     args[i] = va_arg (ap, tree);
    va_end (ap);
  
!   tree result = build_call_expr_loc_array (input_location, decl, nargs, args);
  
    /* Assumes caller knows what it is doing.  */
    return convert (build_ctype (type), result);
--- 301,352 ----
    return libcall_decls[libcall];
  }
  
! 
! /* Subroutine of build_libcall; generate a call to LIBCALL.  NARGS is the
!    number of call arguments, the expressions of which are provided in ARGP.
     This does not perform conversions or promotions on the arguments.  */
  
! static tree
! build_libcall_1 (libcall_fn libcall, int nargs, va_list argp)
  {
    /* Build the call expression to the runtime function.  */
    tree decl = get_libcall (libcall);
    tree *args = XALLOCAVEC (tree, nargs);
+ 
+   for (int i = 0; i < nargs; i++)
+     args[i] = va_arg (argp, tree);
+ 
+   return build_call_expr_loc_array (input_location, decl, nargs, args);
+ }
+ 
+ /* Generate a call to LIBCALL.  NARGS is the number of call arguments, the
+    expressions of which are provided in `...'.  */
+ 
+ tree
+ build_libcall (libcall_fn libcall, int nargs, ...)
+ {
    va_list ap;
  
    va_start (ap, nargs);
! 
!   tree result = build_libcall_1 (libcall, nargs, ap);
    va_end (ap);
  
!   return result;
! }
! 
! /* Generate a call to LIBCALL, returning the result as TYPE.  NARGS is the
!    number of call arguments, the expressions of which are provided in `...'.  */
! 
! tree
! build_libcall (libcall_fn libcall, Type *type, int nargs, ...)
! {
!   va_list ap;
! 
!   va_start (ap, nargs);
! 
!   tree result = build_libcall_1 (libcall, nargs, ap);
!   va_end (ap);
  
    /* Assumes caller knows what it is doing.  */
    return convert (build_ctype (type), result);
diff -Nrcpad gcc-16-20260201/gcc/d/runtime.def gcc-16-20260208/gcc/d/runtime.def
*** gcc-16-20260201/gcc/d/runtime.def	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/runtime.def	Sun Feb  8 22:32:07 2026
*************** along with GCC; see the file COPYING3.
*** 39,62 ****
  #define RT(T1)	LCT_ ## T1
  
  /* Used when an assert() contract fails.  */
! DEF_D_RUNTIME (ASSERTP, "_d_assertp", RT(VOID), P2(IMMUTABLE_CHARPTR, UINT),
  	       ECF_NORETURN)
! DEF_D_RUNTIME (ASSERT_MSG, "_d_assert_msg", RT(VOID), P3(STRING, STRING, UINT),
  	       ECF_NORETURN)
  
  /* Used when an assert() contract fails in a unittest function.  */
! DEF_D_RUNTIME (UNITTESTP, "_d_unittestp", RT(VOID), P2(IMMUTABLE_CHARPTR, UINT),
  	       ECF_NORETURN)
! DEF_D_RUNTIME (UNITTEST_MSG, "_d_unittest_msg", RT(VOID),
  	       P3(STRING, STRING, UINT), ECF_NORETURN)
  
  /* Used when an array index outside the bounds of its range.  */
! DEF_D_RUNTIME (ARRAYBOUNDSP, "_d_arrayboundsp", RT(VOID),
  	       P2(IMMUTABLE_CHARPTR, UINT), ECF_NORETURN)
! DEF_D_RUNTIME (ARRAYBOUNDS_SLICEP, "_d_arraybounds_slicep", RT(VOID),
  	       P5(IMMUTABLE_CHARPTR, UINT, SIZE_T, SIZE_T, SIZE_T),
  	       ECF_NORETURN)
! DEF_D_RUNTIME (ARRAYBOUNDS_INDEXP, "_d_arraybounds_indexp", RT(VOID),
  	       P4(IMMUTABLE_CHARPTR, UINT, SIZE_T, SIZE_T), ECF_NORETURN)
  
  /* Used when calling delete on a stack-allocated class or interface.  */
--- 39,64 ----
  #define RT(T1)	LCT_ ## T1
  
  /* Used when an assert() contract fails.  */
! DEF_D_RUNTIME (ASSERTP, "_d_assertp", RT(NORETURN), P2(IMMUTABLE_CHARPTR, UINT),
  	       ECF_NORETURN)
! DEF_D_RUNTIME (ASSERT_MSG, "_d_assert_msg", RT(NORETURN),
! 	       P3(STRING, STRING, UINT),
  	       ECF_NORETURN)
  
  /* Used when an assert() contract fails in a unittest function.  */
! DEF_D_RUNTIME (UNITTESTP, "_d_unittestp", RT(NORETURN),
! 	       P2(IMMUTABLE_CHARPTR, UINT),
  	       ECF_NORETURN)
! DEF_D_RUNTIME (UNITTEST_MSG, "_d_unittest_msg", RT(NORETURN),
  	       P3(STRING, STRING, UINT), ECF_NORETURN)
  
  /* Used when an array index outside the bounds of its range.  */
! DEF_D_RUNTIME (ARRAYBOUNDSP, "_d_arrayboundsp", RT(NORETURN),
  	       P2(IMMUTABLE_CHARPTR, UINT), ECF_NORETURN)
! DEF_D_RUNTIME (ARRAYBOUNDS_SLICEP, "_d_arraybounds_slicep", RT(NORETURN),
  	       P5(IMMUTABLE_CHARPTR, UINT, SIZE_T, SIZE_T, SIZE_T),
  	       ECF_NORETURN)
! DEF_D_RUNTIME (ARRAYBOUNDS_INDEXP, "_d_arraybounds_indexp", RT(NORETURN),
  	       P4(IMMUTABLE_CHARPTR, UINT, SIZE_T, SIZE_T), ECF_NORETURN)
  
  /* Used when calling delete on a stack-allocated class or interface.  */
*************** DEF_D_RUNTIME (ARRAYAPPENDWD, "_d_arraya
*** 92,98 ****
  	       P2(ARRAYPTR_BYTE, DCHAR), 0)
  
  /* Used for throw() expressions.  */
! DEF_D_RUNTIME (THROW, "_d_throw", RT(VOID), P1(OBJECT), ECF_NORETURN)
  DEF_D_RUNTIME (BEGIN_CATCH, "__gdc_begin_catch", RT(VOIDPTR), P1(VOIDPTR), 0)
  
  /* C++ exception handlers.  */
--- 94,100 ----
  	       P2(ARRAYPTR_BYTE, DCHAR), 0)
  
  /* Used for throw() expressions.  */
! DEF_D_RUNTIME (THROW, "_d_throw", RT(NORETURN), P1(OBJECT), ECF_NORETURN)
  DEF_D_RUNTIME (BEGIN_CATCH, "__gdc_begin_catch", RT(VOIDPTR), P1(VOIDPTR), 0)
  
  /* C++ exception handlers.  */
diff -Nrcpad gcc-16-20260201/gcc/d/toir.cc gcc-16-20260208/gcc/d/toir.cc
*** gcc-16-20260201/gcc/d/toir.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/toir.cc	Sun Feb  8 22:32:07 2026
*************** public:
*** 831,837 ****
  
      /* A switch statement on a string gets turned into a library call.
         It is not lowered during codegen.  */
!     if (!condtype->isScalar ())
        {
  	error ("cannot handle switch condition of type %s",
  	       condtype->toChars ());
--- 831,837 ----
  
      /* A switch statement on a string gets turned into a library call.
         It is not lowered during codegen.  */
!     if (!dmd::isScalar (condtype))
        {
  	error ("cannot handle switch condition of type %s",
  	       condtype->toChars ());
*************** public:
*** 920,926 ****
      else
        {
  	tree casevalue;
! 	if (s->exp->type->isScalar ())
  	  casevalue = build_expr (s->exp);
  	else
  	  casevalue = build_integer_cst (s->index, build_ctype (Type::tint32));
--- 920,926 ----
      else
        {
  	tree casevalue;
! 	if (dmd::isScalar (s->exp->type))
  	  casevalue = build_expr (s->exp);
  	else
  	  casevalue = build_integer_cst (s->index, build_ctype (Type::tint32));
*************** public:
*** 1241,1247 ****
      else
        arg = build_nop (build_ctype (get_object_type ()), arg);
  
!     add_stmt (build_libcall (LIBCALL_THROW, Type::tvoid, 1, arg));
    }
  
    /* Build a try-catch statement, one of the building blocks for exception
--- 1241,1247 ----
      else
        arg = build_nop (build_ctype (get_object_type ()), arg);
  
!     add_stmt (build_libcall (LIBCALL_THROW, 1, arg));
    }
  
    /* Build a try-catch statement, one of the building blocks for exception
*************** public:
*** 1307,1314 ****
  	       the end catch callback.  */
  	    if (cd->isCPPclass ())
  	      {
! 		tree endcatch = build_libcall (LIBCALL_CXA_END_CATCH,
! 					       Type::tvoid, 0);
  		catchbody = build2 (TRY_FINALLY_EXPR, void_type_node,
  				    catchbody, endcatch);
  	      }
--- 1307,1313 ----
  	       the end catch callback.  */
  	    if (cd->isCPPclass ())
  	      {
! 		tree endcatch = build_libcall (LIBCALL_CXA_END_CATCH, 0);
  		catchbody = build2 (TRY_FINALLY_EXPR, void_type_node,
  				    catchbody, endcatch);
  	      }
*************** public:
*** 1378,1384 ****
  
    void visit (GccAsmStatement *s) final override
    {
!     StringExp *insn = s->insn->toStringExp ();
      tree outputs = NULL_TREE;
      tree inputs = NULL_TREE;
      tree clobbers = NULL_TREE;
--- 1377,1383 ----
  
    void visit (GccAsmStatement *s) final override
    {
!     StringExp *insn = dmd::toStringExp (s->insn);
      tree outputs = NULL_TREE;
      tree inputs = NULL_TREE;
      tree clobbers = NULL_TREE;
*************** public:
*** 1393,1399 ****
  	    const char *sname = name ? name->toChars () : NULL;
  	    tree id = name ? build_string (strlen (sname), sname) : NULL_TREE;
  
! 	    StringExp *constr = (*s->constraints)[i]->toStringExp ();
  	    const char *cstring = (const char *)(constr->len
  						 ? constr->string : "");
  	    tree str = build_string (constr->len, cstring);
--- 1392,1398 ----
  	    const char *sname = name ? name->toChars () : NULL;
  	    tree id = name ? build_string (strlen (sname), sname) : NULL_TREE;
  
! 	    StringExp *constr = dmd::toStringExp ((*s->constraints)[i]);
  	    const char *cstring = (const char *)(constr->len
  						 ? constr->string : "");
  	    tree str = build_string (constr->len, cstring);
*************** public:
*** 1419,1425 ****
        {
  	for (size_t i = 0; i < s->clobbers->length; i++)
  	  {
! 	    StringExp *clobber = (*s->clobbers)[i]->toStringExp ();
  	    const char *cstring = (const char *)(clobber->len
  						 ? clobber->string : "");
  
--- 1418,1424 ----
        {
  	for (size_t i = 0; i < s->clobbers->length; i++)
  	  {
! 	    StringExp *clobber = dmd::toStringExp ((*s->clobbers)[i]);
  	    const char *cstring = (const char *)(clobber->len
  						 ? clobber->string : "");
  
diff -Nrcpad gcc-16-20260201/gcc/d/typeinfo.cc gcc-16-20260208/gcc/d/typeinfo.cc
*** gcc-16-20260201/gcc/d/typeinfo.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/typeinfo.cc	Sun Feb  8 22:32:07 2026
*************** class TypeInfoVisitor : public Visitor
*** 467,473 ****
  
  	/* Fill in the vtbl[].  */
  	if (!cd->isInterfaceDeclaration ())
! 	  b->fillVtbl (cd, &b->vtbl, 1);
  
  	/* ClassInfo for the interface.  */
  	value = build_address (get_classinfo_decl (id));
--- 467,473 ----
  
  	/* Fill in the vtbl[].  */
  	if (!cd->isInterfaceDeclaration ())
! 	  dmd::fillVtbl (b, cd, &b->vtbl, 1);
  
  	/* ClassInfo for the interface.  */
  	value = build_address (get_classinfo_decl (id));
*************** class TypeInfoVisitor : public Visitor
*** 517,523 ****
        return;
  
      /* Fill bvtbl with the functions we want to put out.  */
!     if (cd != bcd && !bs->fillVtbl (cd, &bvtbl, 0))
        return;
  
      /* First entry is struct Interface reference.  */
--- 517,523 ----
        return;
  
      /* Fill bvtbl with the functions we want to put out.  */
!     if (cd != bcd && !dmd::fillVtbl (bs, cd, &bvtbl, 0))
        return;
  
      /* First entry is struct Interface reference.  */
*************** public:
*** 722,728 ****
      this->layout_field (build_typeinfo (d->loc, ti->next));
  
      /* Static array length.  */
!     this->layout_field (size_int (ti->dim->toInteger ()));
    }
  
    /* Layout of TypeInfo_AssociativeArray is:
--- 722,728 ----
      this->layout_field (build_typeinfo (d->loc, ti->next));
  
      /* Static array length.  */
!     this->layout_field (size_int (dmd::toInteger (ti->dim)));
    }
  
    /* Layout of TypeInfo_AssociativeArray is:
*************** public:
*** 1093,1098 ****
--- 1093,1101 ----
      if (!sd->members)
        return;
  
+     if (sd->semanticRun () < PASS::semantic3done)
+       dmd::semanticTypeInfoMembers (sd);
+ 
      /* Mangled name of the struct declaration.  */
      this->layout_string (ti->deco);
  
*************** public:
*** 1142,1148 ****
        this->layout_field (null_pointer_node);
  
      /* uint m_align;  */
!     this->layout_field (build_integer_cst (ti->alignsize (), d_uint_type));
  
      /* immutable(void)* xgetRTInfo;  */
      if (sd->getRTInfo)
--- 1145,1151 ----
        this->layout_field (null_pointer_node);
  
      /* uint m_align;  */
!     this->layout_field (build_integer_cst (dmd::alignsize (ti), d_uint_type));
  
      /* immutable(void)* xgetRTInfo;  */
      if (sd->getRTInfo)
*************** base_vtable_offset (ClassDeclaration *cd
*** 1237,1243 ****
        for (size_t k = 0; k < cd2->vtblInterfaces->length; k++)
  	{
  	  BaseClass *bs = (*cd2->vtblInterfaces)[k];
! 	  if (bs->fillVtbl (cd, NULL, 0))
  	    {
  	      if (bc == bs)
  		return csymoffset;
--- 1240,1246 ----
        for (size_t k = 0; k < cd2->vtblInterfaces->length; k++)
  	{
  	  BaseClass *bs = (*cd2->vtblInterfaces)[k];
! 	  if (dmd::fillVtbl (bs, cd, NULL, 0))
  	    {
  	      if (bc == bs)
  		return csymoffset;
diff -Nrcpad gcc-16-20260201/gcc/d/types.cc gcc-16-20260208/gcc/d/types.cc
*** gcc-16-20260201/gcc/d/types.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/d/types.cc	Sun Feb  8 22:32:07 2026
*************** public:
*** 895,903 ****
  
    void visit (TypeSArray *t) final override
    {
!     if (t->dim->isConst () && t->dim->type->isIntegral ())
        {
! 	uinteger_t size = t->dim->toUInteger ();
  	t->ctype = make_array_type (t->next, size);
        }
      else
--- 895,903 ----
  
    void visit (TypeSArray *t) final override
    {
!     if (t->dim->isConst () && dmd::isIntegral (t->dim->type))
        {
! 	uinteger_t size = dmd::toUInteger (t->dim);
  	t->ctype = make_array_type (t->next, size);
        }
      else
*************** public:
*** 912,918 ****
  
    void visit (TypeVector *t) final override
    {
!     int nunits = t->basetype->isTypeSArray ()->dim->toUInteger ();
      tree inner = build_ctype (t->elementType ());
  
      /* Same rationale as void static arrays.  */
--- 912,918 ----
  
    void visit (TypeVector *t) final override
    {
!     int nunits = dmd::toUInteger (t->basetype->isTypeSArray ()->dim);
      tree inner = build_ctype (t->elementType ());
  
      /* Same rationale as void static arrays.  */
*************** public:
*** 1156,1162 ****
  		tree ident = get_identifier (member->ident->toChars ());
  
  		Expression *evalue = member->value ();
! 		tree value = build_integer_cst (evalue->toInteger (),
  						basetype);
  
  		/* Build an identifier for the enumeration constant.  */
--- 1156,1162 ----
  		tree ident = get_identifier (member->ident->toChars ());
  
  		Expression *evalue = member->value ();
! 		tree value = build_integer_cst (dmd::toInteger (evalue),
  						basetype);
  
  		/* Build an identifier for the enumeration constant.  */
diff -Nrcpad gcc-16-20260201/gcc/diagnostics/sarif-sink.cc gcc-16-20260208/gcc/diagnostics/sarif-sink.cc
*** gcc-16-20260201/gcc/diagnostics/sarif-sink.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/diagnostics/sarif-sink.cc	Sun Feb  8 22:32:07 2026
*************** along with GCC; see the file COPYING3.
*** 22,29 ****
--- 22,36 ----
  
  #ifdef __MINGW32__
  #include <winsock2.h>
+ #ifdef HAVE_AFUNIX_H
  #include <afunix.h>
  #else
+ struct sockaddr_un {
+   ADDRESS_FAMILY sun_family;
+   char sun_path[108];
+ };
+ #endif
+ #else
  #include <sys/un.h>
  #include <sys/socket.h>
  #endif
diff -Nrcpad gcc-16-20260201/gcc/doc/gccint.texi gcc-16-20260208/gcc/doc/gccint.texi
*** gcc-16-20260201/gcc/doc/gccint.texi	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/doc/gccint.texi	Sun Feb  8 22:32:07 2026
***************
*** 14,19 ****
--- 14,23 ----
  
  @c Create a separate index for command line options.
  @defcodeindex op
+ 
+ @c Likewise for parameters.
+ @defcodeindex pa
+ 
  @c Merge the standard indexes into a single one.
  @syncodeindex fn cp
  @syncodeindex vr cp
*************** Additional tutorial information is linke
*** 125,130 ****
--- 129,135 ----
  * Match and Simplify:: How to write expression simplification patterns for GIMPLE and GENERIC
  * Static Analyzer:: Working with the static analyzer.
  * User Experience Guidelines:: Guidelines for implementing diagnostics and options.
+ * Parameters::      Controlling internal behavior from the command line.
  * Funding::         How to help assure funding for free software.
  * GNU Project::     The GNU Project and GNU/Linux.
  
*************** Additional tutorial information is linke
*** 134,139 ****
--- 139,145 ----
  * Contributors::    People who have contributed to GCC.
  
  * Option Index::    Index to command line options.
+ * Parameter Index:: Index to parameters settable from the command line.
  * Concept Index::   Index of concepts and symbol names.
  @end menu
  
*************** Additional tutorial information is linke
*** 163,168 ****
--- 169,175 ----
  @include match-and-simplify.texi
  @include analyzer.texi
  @include ux.texi
+ @include params.texi
  
  @include funding.texi
  @include gnu.texi
*************** form; it may sometimes be useful to look
*** 191,196 ****
--- 198,208 ----
  
  @printindex op
  
+ @node Parameter Index
+ @unnumbered Parameter Index
+ 
+ @printindex pa
+ 
  @node Concept Index
  @unnumbered Concept Index
  
diff -Nrcpad gcc-16-20260201/gcc/doc/invoke.texi gcc-16-20260208/gcc/doc/invoke.texi
*** gcc-16-20260201/gcc/doc/invoke.texi	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/doc/invoke.texi	Sun Feb  8 22:32:07 2026
*************** Objective-C and Objective-C++ Dialects}.
*** 693,699 ****
  -funroll-loops  -funsafe-math-optimizations  -funswitch-loops
  -fipa-ra  -fvariable-expansion-in-unroller  -fvect-cost-model  -fvpt
  -fweb  -fwhole-program  -fwpa  -fuse-linker-plugin  -fzero-call-used-regs
- --param @var{name}=@var{value}
  -O  -O0  -O1  -O2  -O3  -Os  -Ofast  -Og  -Oz  --optimize}
  
  @item Program Instrumentation Options
--- 693,698 ----
*************** Objective-C and Objective-C++ Dialects}.
*** 878,883 ****
--- 877,883 ----
  --print-multiarch  --print-prog-name=@var{program}
  --print-search-dirs  --print-sysroot  --print-sysroot-headers-suffix
  --save-temps
+ --param @var{name}=@var{value}
  }
  
  @item Machine-Dependent Options
*************** warnings produced by @option{-Winline} t
*** 11246,11256 ****
  @opindex Winterference-size
  @opindex Wno-interference-size
  @item -Winterference-size
! Warn about use of C++17 @code{std::hardware_destructive_interference_size}
! without specifying its value with @option{--param destructive-interference-size}.
! Also warn about questionable values for that option.
  
! This variable is intended to be used for controlling class layout, to
  avoid false sharing in concurrent code:
  
  @smallexample
--- 11246,11257 ----
  @opindex Winterference-size
  @opindex Wno-interference-size
  @item -Winterference-size
! @item -Wno-interference-size
! Warn about questionable uses of the C++17 @code{constexpr} variables
! @code{std::hardware_destructive_interference_size} and
! @code{std::hardware_constructive_interference_size}.
  
! These variables are intended to be used for controlling class layout, to
  avoid false sharing in concurrent code:
  
  @smallexample
*************** Here @samp{one} and @samp{two} are inten
*** 11266,11273 ****
  that stores to one won't require accesses to the other to reload the
  cache line.
  
! By default, @option{--param destructive-interference-size} and
! @option{--param constructive-interference-size} are set based on the
  current @option{-mtune} option, typically to the L1 cache line size
  for the particular target CPU, sometimes to a range if tuning for a
  generic target.  So all translation units that depend on ABI
--- 11267,11273 ----
  that stores to one won't require accesses to the other to reload the
  cache line.
  
! By default, these variables are given values based on the
  current @option{-mtune} option, typically to the L1 cache line size
  for the particular target CPU, sometimes to a range if tuning for a
  generic target.  So all translation units that depend on ABI
*************** the same @option{-mtune} (or @option{-mc
*** 11276,11285 ****
  
  If ABI stability is important, such as if the use is in a header for a
  library, you should probably not use the hardware interference size
! variables at all.  Alternatively, you can force a particular value
! with @option{--param}.
  
! If you are confident that your use of the variable does not affect ABI
  outside a single build of your project, you can turn off the warning
  with @option{-Wno-interference-size}.
  
--- 11276,11285 ----
  
  If ABI stability is important, such as if the use is in a header for a
  library, you should probably not use the hardware interference size
! variables at all.
  
! These warnings are enabled by default.
! If you are confident that your use of these variables does not affect ABI
  outside a single build of your project, you can turn off the warning
  with @option{-Wno-interference-size}.
  
*************** to attempt to track the state of memory,
*** 11615,11622 ****
  sufficiently complicated code.
  
  By default, the analysis silently stops tracking values of expressions
! if they exceed the threshold defined by
! @option{--param analyzer-max-svalue-depth=@var{value}}, and falls back
  to an imprecise representation for such expressions.
  The @option{-Wanalyzer-symbol-too-complex} option warns if this occurs.
  
--- 11615,11621 ----
  sufficiently complicated code.
  
  By default, the analysis silently stops tracking values of expressions
! if they exceed an internal limit, and falls back
  to an imprecise representation for such expressions.
  The @option{-Wanalyzer-symbol-too-complex} option warns if this occurs.
  
*************** and of the following functions:
*** 12490,12503 ****
  
  In addition, various functions with an @code{__analyzer_} prefix have
  special meaning to the analyzer, described in the GCC Internals manual.
! 
! Pertinent parameters for controlling the exploration are:
! @itemize @bullet
! @item @option{--param analyzer-bb-explosion-factor=@var{value}}
! @item @option{--param analyzer-max-enodes-per-program-point=@var{value}}
! @item @option{--param analyzer-max-recursion-depth=@var{value}}
! @item @option{--param analyzer-min-snodes-for-call-summary=@var{value}}
! @end itemize
  
  The following options control the analyzer.
  
--- 12489,12497 ----
  
  In addition, various functions with an @code{__analyzer_} prefix have
  special meaning to the analyzer, described in the GCC Internals manual.
! Various internal parameters, settable via @option{--param}, are used
! to control the exploration; these are also documented in the GCC Internals
! manual.
  
  The following options control the analyzer.
  
*************** rather than exploring all paths through
*** 12526,12533 ****
  possible return.
  
  If enabled, call summaries are only used for functions with more than one
! call site, and that are sufficiently complicated (as per
! @option{--param analyzer-min-snodes-for-call-summary=@var{value}}).
  
  @opindex fanalyzer-checker
  @item -fanalyzer-checker=@var{name}
--- 12520,12526 ----
  possible return.
  
  If enabled, call summaries are only used for functions with more than one
! call site, and that are sufficiently complicated.
  
  @opindex fanalyzer-checker
  @item -fanalyzer-checker=@var{name}
*************** By default, GCC limits the size of funct
*** 13790,13809 ****
  allows coarse control of this limit.  @var{n} is the size of functions that
  can be inlined in number of pseudo instructions.
  
! Inlining is actually controlled by a number of parameters, which may be
! specified individually by using @option{--param @var{name}=@var{value}}.
! The @option{-finline-limit=@var{n}} option sets some of these parameters
! as follows:
! 
! @table @gcctabopt
! @item max-inline-insns-single
! is set to @var{n}/2.
! @item max-inline-insns-auto
! is set to @var{n}/2.
! @end table
! 
! See below for a documentation of the individual
! parameters controlling inlining and for the defaults of these parameters.
  
  @emph{Note:} there may be no value to @option{-finline-limit} that results
  in default behavior.
--- 13783,13791 ----
  allows coarse control of this limit.  @var{n} is the size of functions that
  can be inlined in number of pseudo instructions.
  
! Inlining is actually controlled by a number of internal parameters, which
! are documented in the GCC Internals manual and should not normally be set
! directly.
  
  @emph{Note:} there may be no value to @option{-finline-limit} that results
  in default behavior.
*************** Perform function cloning to make interpr
*** 14733,14740 ****
  When enabled, interprocedural constant propagation performs function cloning
  when externally visible function can be called with constant arguments.
  Because this optimization can create multiple copies of functions,
! it may significantly increase code size
! (see @option{--param ipa-cp-unit-growth=@var{value}}).
  This flag is enabled by default at @option{-O3}.
  It is also enabled by @option{-fprofile-use} and @option{-fauto-profile}.
  
--- 14715,14721 ----
  When enabled, interprocedural constant propagation performs function cloning
  when externally visible function can be called with constant arguments.
  Because this optimization can create multiple copies of functions,
! it may significantly increase code size.
  This flag is enabled by default at @option{-O3}.
  It is also enabled by @option{-fprofile-use} and @option{-fauto-profile}.
  
*************** The default is @samp{skip}.
*** 16830,18547 ****
  
  You can control this behavior for a specific function by using the function
  attribute @code{zero_call_used_regs} (@pxref{Function Attributes}).
- 
- @opindex param
- @item --param @var{name}=@var{value}
- @itemx --param=@var{name}=@var{value}
- In some places, GCC uses various constants to control the amount of
- optimization that is done.  For example, GCC does not inline functions
- that contain more than a certain number of instructions.  You can
- control some of these constants on the command line using the
- @option{--param} option.
- 
- The names of specific parameters, and the meaning of the values, are
- tied to the internals of the compiler, and are subject to change
- without notice in future releases.
- 
- In order to get the minimal, maximal and default values of a parameter,
- use the @option{--help=param -Q} options.
- 
- In each case, the @var{value} is an integer.  The following choices
- of @var{name} are recognized for all targets:
- 
- @table @gcctabopt
- @item auto-profile-bbs
- If non-zero and used together with @option{-fauto-profile}, the auto-profile
- will be used to determine basic block profile.  If zero, then only function
- level profile will be read.
- 
- @item auto-profile-reorder-only
- Enable only function reordering with auto-profile.
- 
- @item phiopt-factor-max-stmts-live
- When factoring statements out of if/then/else, this is the max # of statements
- after the defining statement to be allow to extend the lifetime of a name
- 
- @item predictable-branch-outcome
- When branch is predicted to be taken with probability lower than this threshold
- (in percent), then it is considered well predictable.
- 
- @item max-rtl-if-conversion-insns
- RTL if-conversion tries to remove conditional branches around a block and
- replace them with conditionally executed instructions.  This parameter
- gives the maximum number of instructions in a block which should be
- considered for if-conversion.  The compiler will
- also use other heuristics to decide whether if-conversion is likely to be
- profitable.
- 
- @item file-cache-files
- Max number of files in the file cache.
- The file cache is used to print source lines in diagnostics and do some
- source checks like @option{-Wmisleading-indentation}.
- 
- @item file-cache-lines
- Max number of lines to index into file cache. When 0 this is automatically sized.
- The file cache is used to print source lines in diagnostics and do some
- source checks like @option{-Wmisleading-indentation}.
- 
- @item max-rtl-if-conversion-predictable-cost
- RTL if-conversion will try to remove conditional branches around a block
- and replace them with conditionally executed instructions.  These parameters
- give the maximum permissible cost for the sequence that would be generated
- by if-conversion depending on whether the branch is statically determined
- to be predictable or not.  The units for this parameter are the same as
- those for the GCC internal seq_cost metric.  The compiler will try to
- provide a reasonable default for this parameter using the BRANCH_COST
- target macro.
- 
- @item max-crossjump-edges
- The maximum number of incoming edges to consider for cross-jumping.
- The algorithm used by @option{-fcrossjumping} is @math{O(N^2)} in
- the number of edges incoming to each block.  Increasing values mean
- more aggressive optimization, making the compilation time increase with
- probably small improvement in executable size.
- 
- @item min-crossjump-insns
- The minimum number of instructions that must be matched at the end
- of two blocks before cross-jumping is performed on them.  This
- value is ignored in the case where all instructions in the block being
- cross-jumped from are matched.
- 
- @item max-grow-copy-bb-insns
- The maximum code size expansion factor when copying basic blocks
- instead of jumping.  The expansion is relative to a jump instruction.
- 
- @item max-goto-duplication-insns
- The maximum number of instructions to duplicate to a block that jumps
- to a computed goto.  To avoid @math{O(N^2)} behavior in a number of
- passes, GCC factors computed gotos early in the compilation process,
- and unfactors them as late as possible.  Only computed jumps at the
- end of a basic blocks with no more than max-goto-duplication-insns are
- unfactored.
- 
- @item max-delay-slot-insn-search
- The maximum number of instructions to consider when looking for an
- instruction to fill a delay slot.  If more than this arbitrary number of
- instructions are searched, the time savings from filling the delay slot
- are minimal, so stop searching.  Increasing values mean more
- aggressive optimization, making the compilation time increase with probably
- small improvement in execution time.
- 
- @item max-delay-slot-live-search
- When trying to fill delay slots, the maximum number of instructions to
- consider when searching for a block with valid live register
- information.  Increasing this arbitrarily chosen value means more
- aggressive optimization, increasing the compilation time.  This parameter
- should be removed when the delay slot code is rewritten to maintain the
- control-flow graph.
- 
- @item max-devirt-targets
- This limits number of function a virtual call may be speculatively
- devirtualized to using static analysis (without profile feedback).
- 
- @item max-gcse-memory
- The approximate maximum amount of memory in @code{kB} that can be allocated in
- order to perform the global common subexpression elimination
- optimization.  If more memory than specified is required, the
- optimization is not done.
- 
- @item max-gcse-insertion-ratio
- If the ratio of expression insertions to deletions is larger than this value
- for any expression, then RTL PRE inserts or removes the expression and thus
- leaves partially redundant computations in the instruction stream.
- 
- @item max-pending-list-length
- The maximum number of pending dependencies scheduling allows
- before flushing the current state and starting over.  Large functions
- with few branches or calls can create excessively large lists which
- needlessly consume memory and resources.
- 
- @item max-modulo-backtrack-attempts
- The maximum number of backtrack attempts the scheduler should make
- when modulo scheduling a loop.  Larger values can exponentially increase
- compilation time.
- 
- @item max-inline-functions-called-once-loop-depth
- Maximal loop depth of a call considered by inline heuristics that tries to
- inline all functions called once.
- 
- @item max-inline-functions-called-once-insns
- Maximal estimated size of functions produced while inlining functions called
- once.
- 
- @item max-inline-insns-single
- Several parameters control the tree inliner used in GCC@.  This number sets the
- maximum number of instructions (counted in GCC's internal representation) in a
- single function that the tree inliner considers for inlining.  This only
- affects functions declared inline and methods implemented in a class
- declaration (C++).
- 
- 
- @item max-inline-insns-auto
- When you use @option{-finline-functions} (included in @option{-O3}),
- a lot of functions that would otherwise not be considered for inlining
- by the compiler are investigated.  To those functions, a different
- (more restrictive) limit compared to functions declared inline can
- be applied (@option{--param max-inline-insns-auto}).
- 
- @item max-inline-insns-small
- This is the bound applied to calls that are considered relevant with
- @option{-finline-small-functions}.
- 
- @item max-inline-insns-size
- This is the bound applied to calls that are optimized for size. Small growth
- may be desirable to anticipate optimization opportunities exposed by inlining.
- 
- @item uninlined-function-insns
- Number of instructions accounted by inliner for function overhead such as
- function prologue and epilogue.
- 
- @item uninlined-function-time
- Extra time accounted by inliner for function overhead such as time needed to
- execute function prologue and epilogue.
- 
- @item inline-heuristics-hint-percent
- The scale (in percents) applied to @option{inline-insns-single},
- @option{inline-insns-single-O2}, @option{inline-insns-auto}
- when inline heuristics hints that inlining is
- very profitable (will enable later optimizations).
- 
- @item uninlined-thunk-insns
- @item uninlined-thunk-time
- Same as @option{--param uninlined-function-insns} and
- @option{--param uninlined-function-time} but applied to function thunks.
- 
- @item inline-min-speedup
- When estimated performance improvement of caller + callee runtime exceeds this
- threshold (in percent), the function can be inlined regardless of the limit on
- @option{--param max-inline-insns-single} and @option{--param
- max-inline-insns-auto}.
- 
- @item large-function-insns
- The limit specifying really large functions.  For functions larger than this
- limit after inlining, inlining is constrained by
- @option{--param large-function-growth}.  This parameter is useful primarily
- to avoid extreme compilation time caused by non-linear algorithms used by the
- back end.
- 
- @item large-function-growth
- Specifies maximal growth of large functions caused by inlining in percents.
- For example, parameter value 100 limits large function growth to 2.0 times
- the original size.
- 
- @item large-unit-insns
- The limit specifying large translation unit.  Growth caused by inlining of
- units larger than this limit is limited by @option{--param inline-unit-growth}.
- For small units this might be too tight.
- For example, consider a unit consisting of function A
- that is inline and B that just calls A three times.  If B is small relative to
- A, the growth of unit is 300\% and yet such inlining is very sane.  For very
- large units consisting of small inlineable functions, however, the overall unit
- growth limit is needed to avoid exponential explosion of code size.  Thus for
- smaller units, the size is increased to @option{--param large-unit-insns}
- before applying @option{--param inline-unit-growth}.
- 
- @item lazy-modules
- Maximum number of concurrently open C++ module files when lazy loading.
- 
- @item inline-unit-growth
- Specifies maximal overall growth of the compilation unit caused by inlining.
- For example, parameter value 20 limits unit growth to 1.2 times the original
- size. Cold functions (either marked cold via an attribute or by profile
- feedback) are not accounted into the unit size.
- 
- @item ipa-cp-unit-growth
- Specifies maximal overall growth of the compilation unit caused by
- interprocedural constant propagation.  For example, parameter value 10 limits
- unit growth to 1.1 times the original size.
- 
- @item ipa-cp-large-unit-insns
- The size of translation unit that IPA-CP pass considers large.
- 
- @item large-stack-frame
- The limit specifying large stack frames.  While inlining the algorithm is trying
- to not grow past this limit too much.
- 
- @item large-stack-frame-growth
- Specifies maximal growth of large stack frames caused by inlining in percents.
- For example, parameter value 1000 limits large stack frame growth to 11 times
- the original size.
- 
- @item max-inline-insns-recursive
- @itemx max-inline-insns-recursive-auto
- Specifies the maximum number of instructions an out-of-line copy of a
- self-recursive inline
- function can grow into by performing recursive inlining.
- 
- @option{--param max-inline-insns-recursive} applies to functions
- declared inline.
- For functions not declared inline, recursive inlining
- happens only when @option{-finline-functions} (included in @option{-O3}) is
- enabled; @option{--param max-inline-insns-recursive-auto} applies instead.
- 
- @item max-inline-recursive-depth
- @itemx max-inline-recursive-depth-auto
- Specifies the maximum recursion depth used for recursive inlining.
- 
- @option{--param max-inline-recursive-depth} applies to functions
- declared inline.  For functions not declared inline, recursive inlining
- happens only when @option{-finline-functions} (included in @option{-O3}) is
- enabled; @option{--param max-inline-recursive-depth-auto} applies instead.
- 
- @item min-inline-recursive-probability
- Recursive inlining is profitable only for function having deep recursion
- in average and can hurt for function having little recursion depth by
- increasing the prologue size or complexity of function body to other
- optimizers.
- 
- When profile feedback is available (see @option{-fprofile-generate}) the actual
- recursion depth can be guessed from the probability that function recurses
- via a given call expression.  This parameter limits inlining only to call
- expressions whose probability exceeds the given threshold (in percents).
- 
- @item early-inlining-insns
- Specify growth that the early inliner can make.  In effect it increases
- the amount of inlining for code having a large abstraction penalty.
- 
- @item max-early-inliner-iterations
- Limit of iterations of the early inliner.  This basically bounds
- the number of nested indirect calls the early inliner can resolve.
- Deeper chains are still handled by late inlining.
- 
- @item comdat-sharing-probability
- Probability (in percent) that C++ inline function with comdat visibility
- are shared across multiple compilation units.
- 
- @item modref-max-bases
- @item modref-max-refs
- @item modref-max-accesses
- Specifies the maximal number of base pointers, references and accesses stored
- for a single function by mod/ref analysis.
- 
- @item modref-max-tests
- Specifies the maxmal number of tests alias oracle can perform to disambiguate
- memory locations using the mod/ref information.  This parameter ought to be
- bigger than @option{--param modref-max-bases} and @option{--param
- modref-max-refs}.
- 
- @item modref-max-depth
- Specifies the maximum depth of DFS walk used by modref escape analysis.
- Setting to 0 disables the analysis completely.
- 
- @item modref-max-escape-points
- Specifies the maximum number of escape points tracked by modref per SSA-name.
- 
- @item modref-max-adjustments
- Specifies the maximum number the access range is enlarged during modref dataflow
- analysis.
- 
- @item profile-func-internal-id
- A parameter to control whether to use function internal id in profile
- database lookup. If the value is 0, the compiler uses an id that
- is based on function assembler name and filename, which makes old profile
- data more tolerant to source changes such as function reordering etc.
- 
- @item min-vect-loop-bound
- The minimum number of iterations under which loops are not vectorized
- when @option{-ftree-vectorize} is used.  The number of iterations after
- vectorization needs to be greater than the value specified by this option
- to allow vectorization.
- 
- @item gcse-cost-distance-ratio
- Scaling factor in calculation of maximum distance an expression
- can be moved by GCSE optimizations.  This is currently supported only in the
- code hoisting pass.  The bigger the ratio, the more aggressive code hoisting
- is with simple expressions, i.e., the expressions that have cost
- less than @option{gcse-unrestricted-cost}.  Specifying 0 disables
- hoisting of simple expressions.
- 
- @item gcse-unrestricted-cost
- Cost, roughly measured as the cost of a single typical machine
- instruction, at which GCSE optimizations do not constrain
- the distance an expression can travel.  This is currently
- supported only in the code hoisting pass.  The lesser the cost,
- the more aggressive code hoisting is.  Specifying 0
- allows all expressions to travel unrestricted distances.
- 
- @item max-hoist-depth
- The depth of search in the dominator tree for expressions to hoist.
- This is used to avoid quadratic behavior in hoisting algorithm.
- The value of 0 does not limit on the search, but may slow down compilation
- of huge functions.
- 
- @item max-tail-merge-comparisons
- The maximum amount of similar bbs to compare a bb with.  This is used to
- avoid quadratic behavior in tree tail merging.
- 
- @item max-tail-merge-iterations
- The maximum amount of iterations of the pass over the function.  This is used to
- limit compilation time in tree tail merging.
- 
- @item store-merging-allow-unaligned
- Allow the store merging pass to introduce unaligned stores if it is legal to
- do so.
- 
- @item max-stores-to-merge
- The maximum number of stores to attempt to merge into wider stores in the store
- merging pass.
- 
- @item max-store-chains-to-track
- The maximum number of store chains to track at the same time in the attempt
- to merge them into wider stores in the store merging pass.
- 
- @item max-stores-to-track
- The maximum number of stores to track at the same time in the attemt to
- to merge them into wider stores in the store merging pass.
- 
- @item max-unrolled-insns
- The maximum number of instructions that a loop may have to be unrolled.
- If a loop is unrolled, this parameter also determines how many times
- the loop code is unrolled.
- 
- @item max-average-unrolled-insns
- The maximum number of instructions biased by probabilities of their execution
- that a loop may have to be unrolled.  If a loop is unrolled,
- this parameter also determines how many times the loop code is unrolled.
- 
- @item max-unroll-times
- The maximum number of unrollings of a single loop.
- 
- @item max-peeled-insns
- The maximum number of instructions that a loop may have to be peeled.
- If a loop is peeled, this parameter also determines how many times
- the loop code is peeled.
- 
- @item max-peel-times
- The maximum number of peelings of a single loop.
- 
- @item max-peel-branches
- The maximum number of branches on the hot path through the peeled sequence.
- 
- @item max-completely-peeled-insns
- The maximum number of insns of a completely peeled loop.
- 
- @item max-completely-peel-times
- The maximum number of iterations of a loop to be suitable for complete peeling.
- 
- @item max-completely-peel-loop-nest-depth
- The maximum depth of a loop nest suitable for complete peeling.
- 
- @item max-unswitch-insns
- The maximum number of insns of an unswitched loop.
- 
- @item max-unswitch-depth
- The maximum depth of a loop nest to be unswitched.
- 
- @item lim-expensive
- The minimum cost of an expensive expression in the loop invariant motion.
- 
- @item min-loop-cond-split-prob
- When FDO profile information is available, @option{min-loop-cond-split-prob}
- specifies minimum threshold for probability of semi-invariant condition
- statement to trigger loop split.
- 
- @item iv-consider-all-candidates-bound
- Bound on number of candidates for induction variables, below which
- all candidates are considered for each use in induction variable
- optimizations.  If there are more candidates than this,
- only the most relevant ones are considered to avoid quadratic time complexity.
- 
- @item iv-max-considered-uses
- The induction variable optimizations give up on loops that contain more
- induction variable uses.
- 
- @item iv-always-prune-cand-set-bound
- If the number of candidates in the set is smaller than this value,
- always try to remove unnecessary ivs from the set
- when adding a new one.
- 
- @item avg-loop-niter
- Average number of iterations of a loop.
- 
- @item dse-max-object-size
- Maximum size (in bytes) of objects tracked bytewise by dead store elimination.
- Larger values may result in larger compilation times.
- 
- @item dse-max-alias-queries-per-store
- Maximum number of queries into the alias oracle per store.
- Larger values result in larger compilation times and may result in more
- removed dead stores.
- 
- @item scev-max-expr-size
- Bound on size of expressions used in the scalar evolutions analyzer.
- Large expressions slow the analyzer.
- 
- @item scev-max-expr-complexity
- Bound on the complexity of the expressions in the scalar evolutions analyzer.
- Complex expressions slow the analyzer.
- 
- @item max-tree-if-conversion-phi-args
- Maximum number of arguments in a PHI supported by TREE if conversion
- unless the loop is marked with simd pragma.
- 
- @item vect-max-layout-candidates
- The maximum number of possible vector layouts (such as permutations)
- to consider when optimizing to-be-vectorized code.
- 
- @item vect-max-version-for-alignment-checks
- The maximum number of run-time checks that can be performed when
- doing loop versioning for alignment in the vectorizer.
- 
- @item vect-max-version-for-alias-checks
- The maximum number of run-time checks that can be performed when
- doing loop versioning for alias in the vectorizer.
- 
- @item vect-max-peeling-for-alignment
- The maximum number of loop peels to enhance access alignment
- for vectorizer. Value -1 means no limit.
- 
- @item max-iterations-to-track
- The maximum number of iterations of a loop the brute-force algorithm
- for analysis of the number of iterations of the loop tries to evaluate.
- 
- @item hot-bb-count-fraction
- The denominator n of fraction 1/n of the maximal execution count of a
- basic block in the entire program that a basic block needs to at least
- have in order to be considered hot.  The default is 10000, which means
- that a basic block is considered hot if its execution count is greater
- than 1/10000 of the maximal execution count.  0 means that it is never
- considered hot.  Used in non-LTO mode.
- 
- @item hot-bb-count-ws-permille
- The number of most executed permilles, ranging from 0 to 1000, of the
- profiled execution of the entire program to which the execution count
- of a basic block must be part of in order to be considered hot.  The
- default is 990, which means that a basic block is considered hot if
- its execution count contributes to the upper 990 permilles, or 99.0%,
- of the profiled execution of the entire program.  0 means that it is
- never considered hot.  Used in LTO mode.
- 
- @item hot-bb-frequency-fraction
- The denominator n of fraction 1/n of the execution frequency of the
- entry block of a function that a basic block of this function needs
- to at least have in order to be considered hot.  The default is 1000,
- which means that a basic block is considered hot in a function if it
- is executed more frequently than 1/1000 of the frequency of the entry
- block of the function.  0 means that it is never considered hot.
- 
- @item unlikely-bb-count-fraction
- The denominator n of fraction 1/n of the number of profiled runs of
- the entire program below which the execution count of a basic block
- must be in order for the basic block to be considered unlikely executed.
- The default is 20, which means that a basic block is considered unlikely
- executed if it is executed in fewer than 1/20, or 5%, of the runs of
- the program.  0 means that it is always considered unlikely executed.
- 
- @item max-predicted-iterations
- The maximum number of loop iterations we predict statically.  This is useful
- in cases where a function contains a single loop with known bound and
- another loop with unknown bound.
- The known number of iterations is predicted correctly, while
- the unknown number of iterations average to roughly 10.  This means that the
- loop without bounds appears artificially cold relative to the other one.
- 
- @item builtin-expect-probability
- Control the probability of the expression having the specified value. This
- parameter takes a percentage (i.e.@: 0 ... 100) as input.
- 
- @item builtin-string-cmp-inline-length
- The maximum length of a constant string for a builtin string cmp call
- eligible for inlining.
- 
- @item align-threshold
- 
- Select fraction of the maximal frequency of executions of a basic block in
- a function to align the basic block.
- 
- @item align-loop-iterations
- 
- A loop expected to iterate at least the selected number of iterations is
- aligned.
- 
- @item tracer-dynamic-coverage
- @itemx tracer-dynamic-coverage-feedback
- 
- This value is used to limit superblock formation once the given percentage of
- executed instructions is covered.  This limits unnecessary code size
- expansion.
- 
- The @option{tracer-dynamic-coverage-feedback} parameter
- is used only when profile
- feedback is available.  The real profiles (as opposed to statically estimated
- ones) are much less balanced allowing the threshold to be larger value.
- 
- @item tracer-max-code-growth
- Stop tail duplication once code growth has reached given percentage.  This is
- a rather artificial limit, as most of the duplicates are eliminated later in
- cross jumping, so it may be set to much higher values than is the desired code
- growth.
- 
- @item tracer-min-branch-ratio
- 
- Stop reverse growth when the reverse probability of best edge is less than this
- threshold (in percent).
- 
- @item tracer-min-branch-probability
- @itemx tracer-min-branch-probability-feedback
- 
- Stop forward growth if the best edge has probability lower than this
- threshold.
- 
- Similarly to @option{tracer-dynamic-coverage} two parameters are
- provided.  @option{tracer-min-branch-probability-feedback} is used for
- compilation with profile feedback and @option{tracer-min-branch-probability}
- compilation without.  The value for compilation with profile feedback
- needs to be more conservative (higher) in order to make tracer
- effective.
- 
- @item stack-clash-protection-guard-size
- Specify the size of the operating system provided stack guard as
- 2 raised to @var{num} bytes.  Higher values may reduce the
- number of explicit probes, but a value larger than the operating system
- provided guard will leave code vulnerable to stack clash style attacks.
- 
- @item stack-clash-protection-probe-interval
- Stack clash protection involves probing stack space as it is allocated.  This
- param controls the maximum distance between probes into the stack as 2 raised
- to @var{num} bytes.  Higher values may reduce the number of explicit probes, but a value
- larger than the operating system provided guard will leave code vulnerable to
- stack clash style attacks.
- 
- @item max-cse-path-length
- 
- The maximum number of basic blocks on path that CSE considers.
- 
- @item max-cse-insns
- The maximum number of instructions CSE processes before flushing.
- 
- @item ggc-min-expand
- 
- GCC uses a garbage collector to manage its own memory allocation.  This
- parameter specifies the minimum percentage by which the garbage
- collector's heap should be allowed to expand between collections.
- Tuning this may improve compilation speed; it has no effect on code
- generation.
- 
- The default is 30% + 70% * (RAM/1GB) with an upper bound of 100% when
- RAM >= 1GB@.  If @code{getrlimit} is available, the notion of ``RAM'' is
- the smallest of actual RAM and @code{RLIMIT_DATA} or @code{RLIMIT_AS}.  If
- GCC is not able to calculate RAM on a particular platform, the lower
- bound of 30% is used.  Setting this parameter and
- @option{ggc-min-heapsize} to zero causes a full collection to occur at
- every opportunity.  This is extremely slow, but can be useful for
- debugging.
- 
- @item ggc-min-heapsize
- 
- Minimum size of the garbage collector's heap before it begins bothering
- to collect garbage.  The first collection occurs after the heap expands
- by @option{ggc-min-expand}% beyond @option{ggc-min-heapsize}.  Again,
- tuning this may improve compilation speed, and has no effect on code
- generation.
- 
- The default is the smaller of RAM/8, RLIMIT_RSS, or a limit that
- tries to ensure that RLIMIT_DATA or RLIMIT_AS are not exceeded, but
- with a lower bound of 4096 (four megabytes) and an upper bound of
- 131072 (128 megabytes).  If GCC is not able to calculate RAM on a
- particular platform, the lower bound is used.  Setting this parameter
- very large effectively disables garbage collection.  Setting this
- parameter and @option{ggc-min-expand} to zero causes a full collection
- to occur at every opportunity.
- 
- @item max-reload-search-insns
- The maximum number of instruction reload should look backward for equivalent
- register.  Increasing values mean more aggressive optimization, making the
- compilation time increase with probably slightly better performance.
- 
- @item max-cselib-memory-locations
- The maximum number of memory locations cselib should take into account.
- Increasing values mean more aggressive optimization, making the compilation time
- increase with probably slightly better performance.
- 
- @item max-sched-ready-insns
- The maximum number of instructions ready to be issued the scheduler should
- consider at any given time during the first scheduling pass.  Increasing
- values mean more thorough searches, making the compilation time increase
- with probably little benefit.
- 
- @item max-sched-region-blocks
- The maximum number of blocks in a region to be considered for
- interblock scheduling.
- 
- @item max-pipeline-region-blocks
- The maximum number of blocks in a region to be considered for
- pipelining in the selective scheduler.
- 
- @item max-sched-region-insns
- The maximum number of insns in a region to be considered for
- interblock scheduling.
- 
- @item max-pipeline-region-insns
- The maximum number of insns in a region to be considered for
- pipelining in the selective scheduler.
- 
- @item min-spec-prob
- The minimum probability (in percents) of reaching a source block
- for interblock speculative scheduling.
- 
- @item max-sched-extend-regions-iters
- The maximum number of iterations through CFG to extend regions.
- A value of 0 disables region extensions.
- 
- @item max-sched-insn-conflict-delay
- The maximum conflict delay for an insn to be considered for speculative motion.
- 
- @item sched-spec-prob-cutoff
- The minimal probability of speculation success (in percents), so that
- speculative insns are scheduled.
- 
- @item sched-state-edge-prob-cutoff
- The minimum probability an edge must have for the scheduler to save its
- state across it.
- 
- @item sched-mem-true-dep-cost
- Minimal distance (in CPU cycles) between store and load targeting same
- memory locations.
- 
- @item selsched-max-lookahead
- The maximum size of the lookahead window of selective scheduling.  It is a
- depth of search for available instructions.
- 
- @item selsched-max-sched-times
- The maximum number of times that an instruction is scheduled during
- selective scheduling.  This is the limit on the number of iterations
- through which the instruction may be pipelined.
- 
- @item selsched-insns-to-rename
- The maximum number of best instructions in the ready list that are considered
- for renaming in the selective scheduler.
- 
- @item sms-min-sc
- The minimum value of stage count that swing modulo scheduler
- generates.
- 
- @item max-last-value-rtl
- The maximum size measured as number of RTLs that can be recorded in an expression
- in combiner for a pseudo register as last known value of that register.
- 
- @item max-combine-insns
- The maximum number of instructions the RTL combiner tries to combine.
- 
- @item max-combine-search-insns
- The maximum number of instructions that the RTL combiner searches in order
- to find the next use of a given register definition.  If this limit is reached
- without finding such a use, the combiner will stop trying to optimize the
- definition.
- 
- Currently this limit only applies after certain successful combination
- attempts, but it could be extended to other cases in future.
- 
- @item integer-share-limit
- Small integer constants can use a shared data structure, reducing the
- compiler's memory usage and increasing its speed.  This sets the maximum
- value of a shared integer constant.
- 
- @item ssp-buffer-size
- The minimum size of buffers (i.e.@: arrays) that receive stack smashing
- protection when @option{-fstack-protector} is used.
- 
- @item min-size-for-stack-sharing
- The minimum size of variables taking part in stack slot sharing when not
- optimizing.
- 
- @item max-jump-thread-duplication-stmts
- Maximum number of statements allowed in a block that needs to be
- duplicated when threading jumps.
- 
- @item max-jump-thread-paths
- The maximum number of paths to consider when searching for jump threading
- opportunities.  When arriving at a block, incoming edges are only considered
- if the number of paths to be searched so far multiplied by the number of
- incoming edges does not exhaust the specified maximum number of paths to
- consider.
- 
- @item max-fields-for-field-sensitive
- Maximum number of fields in a structure treated in
- a field sensitive manner during pointer analysis.
- 
- @item prefetch-latency
- Estimate on average number of instructions that are executed before
- prefetch finishes.  The distance prefetched ahead is proportional
- to this constant.  Increasing this number may also lead to less
- streams being prefetched (see @option{simultaneous-prefetches}).
- 
- @item simultaneous-prefetches
- Maximum number of prefetches that can run at the same time.
- 
- @item l1-cache-line-size
- The size of cache line in L1 data cache, in bytes.
- 
- @item l1-cache-size
- The size of L1 data cache, in kilobytes.
- 
- @item l2-cache-size
- The size of L2 data cache, in kilobytes.
- 
- @item prefetch-dynamic-strides
- Whether the loop array prefetch pass should issue software prefetch hints
- for strides that are non-constant.  In some cases this may be
- beneficial, though the fact the stride is non-constant may make it
- hard to predict when there is clear benefit to issuing these hints.
- 
- Set to 1 if the prefetch hints should be issued for non-constant
- strides.  Set to 0 if prefetch hints should be issued only for strides that
- are known to be constant and below @option{prefetch-minimum-stride}.
- 
- @item prefetch-minimum-stride
- Minimum constant stride, in bytes, to start using prefetch hints for.  If
- the stride is less than this threshold, prefetch hints will not be issued.
- 
- This setting is useful for processors that have hardware prefetchers, in
- which case there may be conflicts between the hardware prefetchers and
- the software prefetchers.  If the hardware prefetchers have a maximum
- stride they can handle, it should be used here to improve the use of
- software prefetchers.
- 
- A value of -1 means we don't have a threshold and therefore
- prefetch hints can be issued for any constant stride.
- 
- This setting is only useful for strides that are known and constant.
- 
- @item destructive-interference-size
- @item constructive-interference-size
- The values for the C++17 variables
- @code{std::hardware_destructive_interference_size} and
- @code{std::hardware_constructive_interference_size}.  The destructive
- interference size is the minimum recommended offset between two
- independent concurrently-accessed objects; the constructive
- interference size is the maximum recommended size of contiguous memory
- accessed together.  Typically both will be the size of an L1 cache
- line for the target, in bytes.  For a generic target covering a range of L1
- cache line sizes, typically the constructive interference size will be
- the small end of the range and the destructive size will be the large
- end.
- 
- The destructive interference size is intended to be used for layout,
- and thus has ABI impact.  The default value is not expected to be
- stable, and on some targets varies with @option{-mtune}, so use of
- this variable in a context where ABI stability is important, such as
- the public interface of a library, is strongly discouraged; if it is
- used in that context, users can stabilize the value using this
- option.
- 
- The constructive interference size is less sensitive, as it is
- typically only used in a @samp{static_assert} to make sure that a type
- fits within a cache line.
- 
- See also @option{-Winterference-size}.
- 
- @item loop-interchange-max-num-stmts
- The maximum number of stmts in a loop to be interchanged.
- 
- @item loop-interchange-stride-ratio
- The minimum ratio between stride of two loops for interchange to be profitable.
- 
- @item min-insn-to-prefetch-ratio
- The minimum ratio between the number of instructions and the
- number of prefetches to enable prefetching in a loop.
- 
- @item prefetch-min-insn-to-mem-ratio
- The minimum ratio between the number of instructions and the
- number of memory references to enable prefetching in a loop.
- 
- @item use-canonical-types
- Whether the compiler should use the ``canonical'' type system.
- Should always be 1, which uses a more efficient internal
- mechanism for comparing types in C++ and Objective-C++.  However, if
- bugs in the canonical type system are causing compilation failures,
- set this value to 0 to disable canonical types.
- 
- @item switch-conversion-max-branch-ratio
- Switch initialization conversion refuses to create arrays that are
- bigger than @option{switch-conversion-max-branch-ratio} times the number of
- branches in the switch.
- 
- @item max-partial-antic-length
- Maximum length of the partial antic set computed during the tree
- partial redundancy elimination optimization (@option{-ftree-pre}) when
- optimizing at @option{-O3} and above.  For some sorts of source code
- the enhanced partial redundancy elimination optimization can run away,
- consuming all of the memory available on the host machine.  This
- parameter sets a limit on the length of the sets that are computed,
- which prevents the runaway behavior.  Setting a value of 0 for
- this parameter allows an unlimited set length.
- 
- @item rpo-vn-max-loop-depth
- Maximum loop depth that is value-numbered optimistically.
- When the limit hits the innermost
- @var{rpo-vn-max-loop-depth} loops and the outermost loop in the
- loop nest are value-numbered optimistically and the remaining ones not.
- 
- @item sccvn-max-alias-queries-per-access
- Maximum number of alias-oracle queries we perform when looking for
- redundancies for loads and stores.  If this limit is hit the search
- is aborted and the load or store is not considered redundant.  The
- number of queries is algorithmically limited to the number of
- stores on all paths from the load to the function entry.
- 
- @item ira-max-loops-num
- IRA uses regional register allocation by default.  If a function
- contains more loops than the number given by this parameter, only at most
- the given number of the most frequently-executed loops form regions
- for regional register allocation.
- 
- @item ira-max-conflict-table-size
- Although IRA uses a sophisticated algorithm to compress the conflict
- table, the table can still require excessive amounts of memory for
- huge functions.  If the conflict table for a function could be more
- than the size in MB given by this parameter, the register allocator
- instead uses a faster, simpler, and lower-quality
- algorithm that does not require building a pseudo-register conflict table.
- 
- @item ira-loop-reserved-regs
- IRA can be used to evaluate more accurate register pressure in loops
- for decisions to move loop invariants (see @option{-O3}).  The number
- of available registers reserved for some other purposes is given
- by this parameter.  Default of the parameter
- is the best found from numerous experiments.
- 
- @item ira-consider-dup-in-all-alts
- Make IRA to consider matching constraint (duplicated operand number)
- heavily in all available alternatives for preferred register class.
- If it is set as zero, it means IRA only respects the matching
- constraint when it's in the only available alternative with an
- appropriate register class.  Otherwise, it means IRA will check all
- available alternatives for preferred register class even if it has
- found some choice with an appropriate register class and respect the
- found qualified matching constraint.
- 
- @item ira-simple-lra-insn-threshold
- Approximate function insn number in 1K units triggering simple local RA.
- 
- @item lra-inheritance-ebb-probability-cutoff
- LRA tries to reuse values reloaded in registers in subsequent insns.
- This optimization is called inheritance.  EBB is used as a region to
- do this optimization.  The parameter defines a minimal fall-through
- edge probability in percentage used to add BB to inheritance EBB in
- LRA.  The default value was chosen
- from numerous runs of SPEC2000 on x86-64.
- 
- @item loop-invariant-max-bbs-in-loop
- Loop invariant motion can be very expensive, both in compilation time and
- in amount of needed compile-time memory, with very large loops.  Loops
- with more basic blocks than this parameter won't have loop invariant
- motion optimization performed on them.
- 
- @item loop-max-datarefs-for-datadeps
- Building data dependencies is expensive for very large loops.  This
- parameter limits the number of data references in loops that are
- considered for data dependence analysis.  These large loops are no
- handled by the optimizations using loop data dependencies.
- 
- @item max-vartrack-size
- Sets a maximum number of hash table slots to use during variable
- tracking dataflow analysis of any function.  If this limit is exceeded
- with variable tracking at assignments enabled, analysis for that
- function is retried without it, after removing all debug insns from
- the function.  If the limit is exceeded even without debug insns, var
- tracking analysis is completely disabled for the function.  Setting
- the parameter to zero makes it unlimited.
- 
- @item max-vartrack-expr-depth
- Sets a maximum number of recursion levels when attempting to map
- variable names or debug temporaries to value expressions.  This trades
- compilation time for more complete debug information.  If this is set too
- low, value expressions that are available and could be represented in
- debug information may end up not being used; setting this higher may
- enable the compiler to find more complex debug expressions, but compile
- time and memory use may grow.
- 
- @item max-debug-marker-count
- Sets a threshold on the number of debug markers (e.g.@: begin stmt
- markers) to avoid complexity explosion at inlining or expanding to RTL.
- If a function has more such gimple stmts than the set limit, such stmts
- will be dropped from the inlined copy of a function, and from its RTL
- expansion.
- 
- @item min-nondebug-insn-uid
- Use uids starting at this parameter for nondebug insns.  The range below
- the parameter is reserved exclusively for debug insns created by
- @option{-fvar-tracking-assignments}, but debug insns may get
- (non-overlapping) uids above it if the reserved range is exhausted.
- 
- @item ipa-sra-deref-prob-threshold
- IPA-SRA replaces a pointer which is known not be NULL with one or more
- new parameters only when the probability (in percent, relative to
- function entry) of it being dereferenced is higher than this parameter.
- 
- @item ipa-sra-ptr-growth-factor
- IPA-SRA replaces a pointer to an aggregate with one or more new
- parameters only when their cumulative size is less or equal to
- @option{ipa-sra-ptr-growth-factor} times the size of the original
- pointer parameter.
- 
- @item ipa-sra-ptrwrap-growth-factor
- Additional maximum allowed growth of total size of new parameters
- that ipa-sra replaces a pointer to an aggregate with,
- if it points to a local variable that the caller only writes to and
- passes it as an argument to other functions.
- 
- @item ipa-sra-max-replacements
- Maximum pieces of an aggregate that IPA-SRA tracks.  As a
- consequence, it is also the maximum number of replacements of a formal
- parameter.
- 
- @item sra-max-scalarization-size-Ospeed
- @itemx sra-max-scalarization-size-Osize
- The two Scalar Reduction of Aggregates passes (SRA and IPA-SRA) aim to
- replace scalar parts of aggregates with uses of independent scalar
- variables.  These parameters control the maximum size, in storage units,
- of aggregate which is considered for replacement when compiling for
- speed
- (@option{sra-max-scalarization-size-Ospeed}) or size
- (@option{sra-max-scalarization-size-Osize}) respectively.
- 
- @item sra-max-propagations
- The maximum number of artificial accesses that Scalar Replacement of
- Aggregates (SRA) will track, per one local variable, in order to
- facilitate copy propagation.
- 
- @item tm-max-aggregate-size
- When making copies of thread-local variables in a transaction, this
- parameter specifies the size in bytes after which variables are
- saved with the logging functions as opposed to save/restore code
- sequence pairs.  This option only applies when using
- @option{-fgnu-tm}.
- 
- @item graphite-max-nb-scop-params
- To avoid exponential effects in the Graphite loop transforms, the
- number of parameters in a Static Control Part (SCoP) is bounded.
- A value of zero can be used to lift
- the bound.  A variable whose value is unknown at compilation time and
- defined outside a SCoP is a parameter of the SCoP.
- 
- @item hardcfr-max-blocks
- Disable @option{-fharden-control-flow-redundancy} for functions with a
- larger number of blocks than the specified value.  Zero removes any
- limit.
- 
- @item hardcfr-max-inline-blocks
- Force @option{-fharden-control-flow-redundancy} to use out-of-line
- checking for functions with a larger number of basic blocks than the
- specified value.
- 
- @item loop-block-tile-size
- Loop blocking or strip mining transforms, enabled with
- @option{-floop-block} or @option{-floop-strip-mine}, strip mine each
- loop in the loop nest by a given number of iterations.  The strip
- length can be changed using the @option{loop-block-tile-size}
- parameter.
- 
- @item ipa-jump-function-lookups
- Specifies number of statements visited during jump function offset discovery.
- 
- @item ipa-cp-value-list-size
- IPA-CP attempts to track all possible values and types passed to a function's
- parameter in order to propagate them and perform devirtualization.
- @option{ipa-cp-value-list-size} is the maximum number of values and types it
- stores per one formal parameter of a function.
- 
- @item ipa-cp-eval-threshold
- IPA-CP calculates its own score of cloning profitability heuristics
- and performs those cloning opportunities with scores that exceed
- @option{ipa-cp-eval-threshold}.
- 
- @item ipa-cp-max-recursive-depth
- Maximum depth of recursive cloning for self-recursive function.
- 
- @item ipa-cp-min-recursive-probability
- Recursive cloning only when the probability of call being executed exceeds
- the parameter.
- 
- @item ipa-cp-recursive-freq-factor
- The number of times interprocedural copy propagation expects recursive
- functions to call themselves.
- 
- @item ipa-cp-recursion-penalty
- Percentage penalty the recursive functions will receive when they
- are evaluated for cloning.
- 
- @item ipa-cp-single-call-penalty
- Percentage penalty functions containing a single call to another
- function will receive when they are evaluated for cloning.
- 
- @item ipa-cp-sweeps
- The number of times the interprocedural constant propagation will traverse
- all functions to make cloning decisions.
- 
- @item ipa-max-agg-items
- IPA-CP is also capable to propagate a number of scalar values passed
- in an aggregate. @option{ipa-max-agg-items} controls the maximum
- number of such values per one parameter.
- 
- @item ipa-cp-loop-hint-bonus
- When IPA-CP determines that a cloning candidate would make the number
- of iterations of a loop known, it adds a bonus of
- @option{ipa-cp-loop-hint-bonus} to the profitability score of
- the candidate.
- 
- @item ipa-max-loop-predicates
- The maximum number of different predicates IPA will use to describe when
- loops in a function have known properties.
- 
- @item ipa-max-aa-steps
- During its analysis of function bodies, IPA-CP employs alias analysis
- in order to track values pointed to by function parameters.  In order
- not spend too much time analyzing huge functions, it gives up and
- consider all memory clobbered after examining
- @option{ipa-max-aa-steps} statements modifying memory.
- 
- @item ipa-max-switch-predicate-bounds
- Maximal number of boundary endpoints of case ranges of switch statement.
- For switch exceeding this limit, IPA-CP will not construct cloning cost
- predicate, which is used to estimate cloning benefit, for default case
- of the switch statement.
- 
- @item ipa-max-param-expr-ops
- IPA-CP will analyze conditional statement that references some function
- parameter to estimate benefit for cloning upon certain constant value.
- But if number of operations in a parameter expression exceeds
- @option{ipa-max-param-expr-ops}, the expression is treated as complicated
- one, and is not handled by IPA analysis.
- 
- @item lto-partitions
- Specify desired number of partitions produced during WHOPR compilation.
- The number of partitions should exceed the number of CPUs used for compilation.
- 
- @item lto-min-partition
- Size of minimal partition for WHOPR (in estimated instructions).
- This prevents expenses of splitting very small programs into too many
- partitions.
- 
- @item lto-max-partition
- Size of max partition for WHOPR (in estimated instructions).
- to provide an upper bound for individual size of partition.
- Meant to be used only with balanced partitioning.
- 
- @item lto-partition-locality-frequency-cutoff
- The denominator n of fraction 1/n of the execution frequency of callee to be
- cloned for a particular caller. Special value of 0 dictates to always clone
- without a cut-off.
- 
- @item lto-partition-locality-size-cutoff
- Size cut-off for callee including inlined calls to be cloned for a particular
- caller.
- 
- @item lto-max-locality-partition
- Maximal size of a locality partition for LTO (in estimated instructions).
- Value of 0 results in default value being used.
- 
- @item lto-max-streaming-parallelism
- Maximal number of parallel processes used for LTO streaming.
- 
- @item cxx-max-namespaces-for-diagnostic-help
- The maximum number of namespaces to consult for suggestions when C++
- name lookup fails for an identifier.
- 
- @item sink-frequency-threshold
- The maximum relative execution frequency (in percents) of the target block
- relative to a statement's original block to allow statement sinking of a
- statement.  Larger numbers result in more aggressive statement sinking.
- A small positive adjustment is applied for
- statements with memory operands as those are even more profitable so sink.
- 
- @item max-stores-to-sink
- The maximum number of conditional store pairs that can be sunk.  Set to 0
- if either vectorization (@option{-ftree-vectorize}) or if-conversion
- (@option{-ftree-loop-if-convert}) is disabled.
- 
- @item case-values-threshold
- The smallest number of different values for which it is best to use a
- jump-table instead of a tree of conditional branches.  If the value is
- 0, use the default for the machine.
- 
- @item jump-table-max-growth-ratio-for-size
- The maximum code size growth ratio when expanding
- into a jump table (in percent).  The parameter is used when
- optimizing for size.
- 
- @item jump-table-max-growth-ratio-for-speed
- The maximum code size growth ratio when expanding
- into a jump table (in percent).  The parameter is used when
- optimizing for speed.
- 
- @item tree-reassoc-width
- Set the maximum number of instructions executed in parallel in
- reassociated tree. This parameter overrides target dependent
- heuristics used by default if has non zero value.
- 
- @item sched-pressure-algorithm
- Choose between the two available implementations of
- @option{-fsched-pressure}.  Algorithm 1 is the original implementation
- and is the more likely to prevent instructions from being reordered.
- Algorithm 2 was designed to be a compromise between the relatively
- conservative approach taken by algorithm 1 and the rather aggressive
- approach taken by the default scheduler.  It relies more heavily on
- having a regular register file and accurate register pressure classes.
- See @file{haifa-sched.cc} in the GCC sources for more details.
- 
- The default choice depends on the target.
- 
- @item max-slsr-cand-scan
- Set the maximum number of existing candidates that are considered when
- seeking a basis for a new straight-line strength reduction candidate.
- 
- @item asan-globals
- Enable buffer overflow detection for global objects.  This kind
- of protection is enabled by default if you are using
- @option{-fsanitize=address} option.
- To disable global objects protection use @option{--param asan-globals=0}.
- 
- @item asan-stack
- Enable buffer overflow detection for stack objects.  This kind of
- protection is enabled by default when using @option{-fsanitize=address}.
- To disable stack protection use @option{--param asan-stack=0} option.
- 
- @item asan-instrument-reads
- Enable buffer overflow detection for memory reads.  This kind of
- protection is enabled by default when using @option{-fsanitize=address}.
- To disable memory reads protection use
- @option{--param asan-instrument-reads=0}.
- 
- @item asan-instrument-writes
- Enable buffer overflow detection for memory writes.  This kind of
- protection is enabled by default when using @option{-fsanitize=address}.
- To disable memory writes protection use
- @option{--param asan-instrument-writes=0} option.
- 
- @item asan-memintrin
- Enable detection for built-in functions.  This kind of protection
- is enabled by default when using @option{-fsanitize=address}.
- To disable built-in functions protection use
- @option{--param asan-memintrin=0}.
- 
- @item asan-use-after-return
- Enable detection of use-after-return.  This kind of protection
- is enabled by default when using the @option{-fsanitize=address} option.
- To disable it use @option{--param asan-use-after-return=0}.
- 
- Note: By default the check is disabled at run time.  To enable it,
- add @code{detect_stack_use_after_return=1} to the environment variable
- @env{ASAN_OPTIONS}.
- 
- @item asan-instrumentation-with-call-threshold
- If number of memory accesses in function being instrumented
- is greater or equal to this number, use callbacks instead of inline checks.
- E.g. to disable inline code use
- @option{--param asan-instrumentation-with-call-threshold=0}.
- 
- @item asan-kernel-mem-intrinsic-prefix
- If nonzero, prefix calls to @code{memcpy}, @code{memset} and @code{memmove}
- with @samp{__asan_} or @samp{__hwasan_}
- for @option{-fsanitize=kernel-address} or @samp{-fsanitize=kernel-hwaddress},
- respectively.
- 
- @item hwasan-instrument-stack
- Enable hwasan instrumentation of statically sized stack-allocated variables.
- This kind of instrumentation is enabled by default when using
- @option{-fsanitize=hwaddress} and disabled by default when using
- @option{-fsanitize=kernel-hwaddress}.
- To disable stack instrumentation use
- @option{--param hwasan-instrument-stack=0}, and to enable it use
- @option{--param hwasan-instrument-stack=1}.
- 
- @item hwasan-random-frame-tag
- When using stack instrumentation, decide tags for stack variables using a
- deterministic sequence beginning at a random tag for each frame.  With this
- parameter unset tags are chosen using the same sequence but beginning from 1.
- This is enabled by default for @option{-fsanitize=hwaddress} and unavailable
- for @option{-fsanitize=kernel-hwaddress} and @option{-fsanitize=memtag-stack}.
- To disable it use @option{--param hwasan-random-frame-tag=0}.
- 
- @item hwasan-instrument-allocas
- Enable hwasan instrumentation of dynamically sized stack-allocated variables.
- This kind of instrumentation is enabled by default when using
- @option{-fsanitize=hwaddress} and disabled by default when using
- @option{-fsanitize=kernel-hwaddress}.
- To disable instrumentation of such variables use
- @option{--param hwasan-instrument-allocas=0}, and to enable it use
- @option{--param hwasan-instrument-allocas=1}.
- 
- @item hwasan-instrument-reads
- Enable hwasan checks on memory reads.  Instrumentation of reads is enabled by
- default for both @option{-fsanitize=hwaddress} and
- @option{-fsanitize=kernel-hwaddress}.
- To disable checking memory reads use
- @option{--param hwasan-instrument-reads=0}.
- 
- @item hwasan-instrument-writes
- Enable hwasan checks on memory writes.  Instrumentation of writes is enabled by
- default for both @option{-fsanitize=hwaddress} and
- @option{-fsanitize=kernel-hwaddress}.
- To disable checking memory writes use
- @option{--param hwasan-instrument-writes=0}.
- 
- @item hwasan-instrument-mem-intrinsics
- Enable hwasan instrumentation of builtin functions.  Instrumentation of these
- builtin functions is enabled by default for both @option{-fsanitize=hwaddress}
- and @option{-fsanitize=kernel-hwaddress}.
- To disable instrumentation of builtin functions use
- @option{--param hwasan-instrument-mem-intrinsics=0}.
- 
- @item memtag-instrument-allocas
- Enable hardware-assisted memory tagging of dynamically sized stack-allocated
- variables.  This kind of code generation is enabled by default when using
- @option{-fsanitize=memtag-stack}.
- 
- @item memtag-instrument-mem-intrinsics
- When sanitizing using MTE instructions, include builtin functions.
- 
- @item use-after-scope-direct-emission-threshold
- If the size of a local variable in bytes is smaller or equal to this
- number, directly poison (or unpoison) shadow memory instead of using
- run-time callbacks.
- 
- @item tsan-distinguish-volatile
- Emit special instrumentation for accesses to volatiles.
- 
- @item tsan-instrument-func-entry-exit
- Emit instrumentation calls to __tsan_func_entry() and __tsan_func_exit().
- 
- @item max-fsm-thread-path-insns
- Maximum number of instructions to copy when duplicating blocks on a
- finite state automaton jump thread path.
- 
- @item threader-debug
- threader-debug=[none|all] Enables verbose dumping of the threader solver.
- 
- @item parloops-chunk-size
- Chunk size of omp schedule for loops parallelized by parloops.
- 
- @item parloops-schedule
- Schedule type of omp schedule for loops parallelized by parloops (static,
- dynamic, guided, auto, runtime).
- 
- @item parloops-min-per-thread
- The minimum number of iterations per thread of an innermost parallelized
- loop for which the parallelized variant is preferred over the single threaded
- one.  Note that for a parallelized loop nest the
- minimum number of iterations of the outermost loop per thread is two.
- 
- @item max-ssa-name-query-depth
- Maximum depth of recursion when querying properties of SSA names in things
- like fold routines.  One level of recursion corresponds to following a
- use-def chain.
- 
- @item max-speculative-devirt-maydefs
- The maximum number of may-defs we analyze when looking for a must-def
- specifying the dynamic type of an object that invokes a virtual call
- we may be able to devirtualize speculatively.
- 
- @item ranger-debug
- Specifies the type of debug output to be issued for ranges.
- 
- @item unroll-jam-min-percent
- The minimum percentage of memory references that must be optimized
- away for the unroll-and-jam transformation to be considered profitable.
- 
- @item unroll-jam-max-unroll
- The maximum number of times the outer loop should be unrolled by
- the unroll-and-jam transformation.
- 
- @item max-rtl-if-conversion-unpredictable-cost
- Maximum permissible cost for the sequence that would be generated
- by the RTL if-conversion pass for a branch that is considered unpredictable.
- 
- @item max-variable-expansions-in-unroller
- If @option{-fvariable-expansion-in-unroller} is used, the maximum number
- of times that an individual variable will be expanded during loop unrolling.
- 
- @item partial-inlining-entry-probability
- Maximum probability of the entry BB of split region
- (in percent relative to entry BB of the function)
- to make partial inlining happen.
- 
- @item max-tracked-strlens
- Maximum number of strings for which strlen optimization pass will
- track string lengths.
- 
- @item gcse-after-reload-partial-fraction
- The threshold ratio for performing partial redundancy
- elimination after reload.
- 
- @item gcse-after-reload-critical-fraction
- The threshold ratio of critical edges execution count that
- permit performing redundancy elimination after reload.
- 
- @item max-loop-header-insns
- The maximum number of insns in loop header duplicated
- by the copy loop headers pass.
- 
- @item vect-epilogues-nomask
- Enable loop epilogue vectorization using smaller vector size.
- 
- @item vect-partial-vector-usage
- Controls when the loop vectorizer considers using partial vector loads
- and stores as an alternative to falling back to scalar code.  0 stops
- the vectorizer from ever using partial vector loads and stores.  1 allows
- partial vector loads and stores if vectorization removes the need for the
- code to iterate.  2 allows partial vector loads and stores in all loops.
- The parameter only has an effect on targets that support partial
- vector loads and stores.
- 
- @item vect-inner-loop-cost-factor
- The maximum factor which the loop vectorizer applies to the cost of statements
- in an inner loop relative to the loop being vectorized.  The factor applied
- is the maximum of the estimated number of iterations of the inner loop and
- this parameter.  The default value of this parameter is 50.
- 
- @item vect-induction-float
- Enable loop vectorization of floating point inductions.
- 
- @item vect-scalar-cost-multiplier
- Apply the given multiplier % to scalar loop costing during vectorization.
- Increasing the cost multiplier will make vector loops more profitable.
- 
- @item vrp-block-limit
- Maximum number of basic blocks before VRP switches to a lower memory algorithm.
- 
- @item vrp-cstload-limit
- Maximum number of steps when inferring a value range from a load from a constant aggregate.
- 
- @item vrp-sparse-threshold
- Maximum number of basic blocks before VRP uses a sparse bitmap cache.
- 
- @item vrp-switch-limit
- Maximum number of outgoing edges in a switch before VRP will not process it.
- 
- @item vrp-vector-threshold
- Maximum number of basic blocks for VRP to use a basic cache vector.
- 
- @item avoid-fma-max-bits
- Maximum number of bits for which we avoid creating FMAs.
- 
- @item fully-pipelined-fma
- Whether the target fully pipelines FMA instructions.  If non-zero,
- reassociation considers the benefit of parallelizing FMA's multiplication
- part and addition part, assuming FMUL and FMA use the same units that can
- also do FADD.
- 
- @item sms-loop-average-count-threshold
- A threshold on the average loop count considered by the swing modulo scheduler.
- 
- @item sms-dfa-history
- The number of cycles the swing modulo scheduler considers when checking
- conflicts using DFA.
- 
- @item graphite-allow-codegen-errors
- Whether codegen errors should be ICEs when @option{-fchecking}.
- 
- @item sms-max-ii-factor
- A factor for tuning the upper bound that swing modulo scheduler
- uses for scheduling a loop.
- 
- @item lra-max-considered-reload-pseudos
- The max number of reload pseudos which are considered during
- spilling a non-reload pseudo.
- 
- @item lra-max-pseudos-points-log2-considered-for-preferences
- The maximum @code{log2(number of reload pseudos * number of
- program points)} threshold when preferences for other reload pseudos
- are still considered. Taking these preferences into account helps to
- improve register allocation. However, for very large functions, a
- large value can result in significant compilation time and memory
- consumption. The default value is 30.
- 
- @item max-pow-sqrt-depth
- Maximum depth of sqrt chains to use when synthesizing exponentiation
- by a real constant.
- 
- @item max-dse-active-local-stores
- Maximum number of active local stores in RTL dead store elimination.
- 
- @item asan-instrument-allocas
- Enable asan allocas/VLAs protection.
- 
- @item max-iterations-computation-cost
- Bound on the cost of an expression to compute the number of iterations.
- 
- @item max-isl-operations
- Maximum number of isl operations, 0 means unlimited.
- 
- @item graphite-max-arrays-per-scop
- Maximum number of arrays per scop.
- 
- @item max-vartrack-reverse-op-size
- Max. size of loc list for which reverse ops should be added.
- 
- @item fsm-scale-path-stmts
- Scale factor to apply to the number of statements in a threading path
- crossing a loop backedge when comparing to
- @option{--param=max-jump-thread-duplication-stmts}.
- 
- @item uninit-control-dep-attempts
- Maximum number of nested calls to search for control dependencies
- during uninitialized variable analysis.
- 
- @item uninit-max-chain-len
- Maximum number of predicates anded for each predicate ored in the normalized
- predicate chain.
- 
- @item uninit-max-num-chains
- Maximum number of predicates ored in the normalized predicate chain.
- 
- @item uninit-max-prune-work
- Maximum amount of work done to prune paths where the variable is always initialized.
- 
- @item sched-autopref-queue-depth
- Hardware autoprefetcher scheduler model control flag.
- Number of lookahead cycles the model looks into; at '
- ' only enable instruction sorting heuristic.
- 
- @item loop-versioning-max-inner-insns
- The maximum number of instructions that an inner loop can have
- before the loop versioning pass considers it too big to copy.
- 
- @item loop-versioning-max-outer-insns
- The maximum number of instructions that an outer loop can have
- before the loop versioning pass considers it too big to copy,
- discounting any instructions in inner loops that directly benefit
- from versioning.
- 
- @item ssa-name-def-chain-limit
- The maximum number of SSA_NAME assignments to follow in determining
- a property of a variable such as its value.  This limits the number
- of iterations or recursive calls GCC performs when optimizing certain
- statements or when determining their validity prior to issuing
- diagnostics.
- 
- @item store-merging-max-size
- Maximum size of a single store merging region in bytes.
- 
- @item store-forwarding-max-distance
- Maximum number of instruction distance that a small store forwarded to a larger
- load may stall. Value '0' disables the cost checks for the
- avoid-store-forwarding pass.
- 
- @item hash-table-verification-limit
- The number of elements for which hash table verification is done
- for each searched element.
- 
- @item max-find-base-term-values
- Maximum number of VALUEs handled during a single find_base_term call.
- 
- @item analyzer-max-enodes-per-program-point
- The maximum number of exploded nodes per program point within
- the analyzer, before terminating analysis of that point.
- 
- @item analyzer-max-constraints
- The maximum number of constraints per state.
- 
- @item analyzer-min-snodes-for-call-summary
- The minimum number of supernodes within a function for the
- analyzer to consider summarizing its effects at call sites.
- 
- @item analyzer-max-enodes-for-full-dump
- The maximum depth of exploded nodes that should appear in a dot dump
- before switching to a less verbose format.
- 
- @item analyzer-max-recursion-depth
- The maximum number of times a callsite can appear in a call stack
- within the analyzer, before terminating analysis of a call that would
- recurse deeper.
- 
- @item analyzer-max-svalue-depth
- The maximum depth of a symbolic value, before approximating
- the value as unknown.
- 
- @item analyzer-max-infeasible-edges
- The maximum number of infeasible edges to reject before declaring
- a diagnostic as infeasible.
- 
- @item gimple-fe-computed-hot-bb-threshold
- The number of executions of a basic block which is considered hot.
- The parameter is used only in GIMPLE FE.
- 
- @item analyzer-bb-explosion-factor
- The maximum number of 'after supernode' exploded nodes within the analyzer
- per supernode, before terminating analysis.
- 
- @item analyzer-text-art-string-ellipsis-threshold
- The number of bytes at which to ellipsize string literals in analyzer text art diagrams.
- 
- @item analyzer-text-art-ideal-canvas-width
- The ideal width in characters of text art diagrams generated by the analyzer.
- 
- @item analyzer-text-art-string-ellipsis-head-len
- The number of literal bytes to show at the head of a string literal in text art when ellipsizing it.
- 
- @item analyzer-text-art-string-ellipsis-tail-len
- The number of literal bytes to show at the tail of a string literal in text art when ellipsizing it.
- 
- @item ranger-logical-depth
- Maximum depth of logical expression evaluation ranger will look through
- when evaluating outgoing edge ranges.
- 
- @item ranger-recompute-depth
- Maximum depth of instruction chains to consider for recomputation
- in the outgoing range calculator.
- 
- @item relation-block-limit
- Maximum number of relations the oracle will register in a basic block.
- 
- @item transitive-relations-work-bound
- Work bound when discovering transitive relations from existing relations.
- 
- @item min-pagesize
- Minimum page size for warning and early break vectorization purposes.
- 
- @item openacc-kernels
- Specify mode of OpenACC `kernels' constructs handling.
- With @option{--param=openacc-kernels=decompose}, OpenACC `kernels'
- constructs are decomposed into parts, a sequence of compute
- constructs, each then handled individually.
- This is work in progress.
- With @option{--param=openacc-kernels=parloops}, OpenACC `kernels'
- constructs are handled by the @samp{parloops} pass, en bloc.
- This is the current default.
- 
- @item openacc-privatization
- Control whether the @option{-fopt-info-omp-note} and applicable
- @option{-fdump-tree-*-details} options emit OpenACC privatization diagnostics.
- With @option{--param=openacc-privatization=quiet}, don't diagnose.
- This is the current default.
- With @option{--param=openacc-privatization=noisy}, do diagnose.
- 
- @item cycle-accurate-model
- Specifies whether GCC should assume that the scheduling description is mostly
- a cycle-accurate model of the target processor the code is intended to
- run on, in the absence of cache misses.  Nonzero means that the selected
- scheduling model is accurate and likely describes an in-order processor,
- and that scheduling should aggressively spill to try and fill any pipeline
- bubbles.  This is the current default.  Zero means the scheduling description
- might not be available/accurate or perhaps not applicable at all, such as for
- modern out-of-order processors.
- 
- @end table
- 
- The following choices of @var{name} are available on AArch64 targets:
- 
- @table @gcctabopt
- @item aarch64-vect-compare-costs
- When vectorizing, consider using multiple different approaches and use
- the cost model to choose the cheapest one.  This includes:
- 
- @itemize
- @item
- Trying both SVE and Advanced SIMD, when SVE is available.
- 
- @item
- Trying to use 64-bit Advanced SIMD vectors for the smallest data elements,
- rather than using 128-bit vectors for everything.
- 
- @item
- Trying to use ``unpacked'' SVE vectors for smaller elements.  This includes
- storing smaller elements in larger containers and accessing elements with
- extending loads and truncating stores.
- @end itemize
- 
- @item aarch64-float-recp-precision
- The number of Newton iterations for calculating the reciprocal for float type.
- The precision of division is proportional to this param when division
- approximation is enabled.  The default value is 1.
- 
- @item aarch64-double-recp-precision
- The number of Newton iterations for calculating the reciprocal for double type.
- The precision of division is proportional to this param when division
- approximation is enabled.  The default value is 2.
- 
- @item aarch64-autovec-preference
- An old alias for @option{-mautovec-preference}.  If both
- @option{-mautovec-preference} and @option{--param=aarch64-autovec-preference}
- are passed, the @option{--param} value will be used.
- 
- @item aarch64-ldp-policy
- Fine-grained policy for load pairs.
- With @option{--param=aarch64-ldp-policy=default}, use the policy of the
- tuning structure.  This is the current default.
- With @option{--param=aarch64-ldp-policy=always}, emit ldp regardless
- of alignment.
- With @option{--param=aarch64-ldp-policy=never}, do not emit ldp.
- With @option{--param=aarch64-ldp-policy=aligned}, emit ldp only if the
- source pointer is aligned to at least double the alignment of the type.
- 
- @item aarch64-stp-policy
- Fine-grained policy for store pairs.
- With @option{--param=aarch64-stp-policy=default}, use the policy of the
- tuning structure.  This is the current default.
- With @option{--param=aarch64-stp-policy=always}, emit stp regardless
- of alignment.
- With @option{--param=aarch64-stp-policy=never}, do not emit stp.
- With @option{--param=aarch64-stp-policy=aligned}, emit stp only if the
- source pointer is aligned to at least double the alignment of the type.
- 
- @item aarch64-ldp-alias-check-limit
- Limit on the number of alias checks performed by the AArch64 load/store pair
- fusion pass when attempting to form an ldp/stp.  Higher values make the pass
- more aggressive at re-ordering loads over stores, at the expense of increased
- compile time.
- 
- @item aarch64-ldp-writeback
- Param to control which writeback opportunities we try to handle in the AArch64
- load/store pair fusion pass.  A value of zero disables writeback handling.  One
- means we try to form pairs involving one or more existing individual writeback
- accesses where possible.  A value of two means we also try to opportunistically
- form writeback opportunities by folding in trailing destructive updates of the
- base register used by a pair.
- 
- @item aarch64-loop-vect-issue-rate-niters
- The tuning for some AArch64 CPUs tries to take both latencies and issue
- rates into account when deciding whether a loop should be vectorized
- using SVE, vectorized using Advanced SIMD, or not vectorized at all.
- If this parameter is set to @var{n}, GCC will not use this heuristic
- for loops that are known to execute in fewer than @var{n} Advanced
- SIMD iterations.
- 
- @item aarch64-vect-unroll-limit
- The vectorizer will use available tuning information to determine whether it
- would be beneficial to unroll the main vectorized loop and by how much.  This
- parameter set's the upper bound of how much the vectorizer will unroll the main
- loop.  The default value is four.
- 
- @item aarch64-tag-memory-loop-threshold
- Param to control the treshold in number of granules beyond which an
- explicit loop for tagging a memory block is emitted.  The memory block
- is tagged using MTE instructions.
- 
- @end table
- 
- The following choices of @var{name} are available on GCN targets:
- 
- @table @gcctabopt
- @item gcn-preferred-vectorization-factor
- Preferred vectorization factor: @samp{default}, @samp{32}, @samp{64}.
- 
- @end table
- 
- The following choices of @var{name} are available on i386 and x86_64 targets:
- 
- @table @gcctabopt
- @item x86-stlf-window-ninsns
- Instructions number above which STFL stall penalty can be compensated.
- 
- @item x86-stv-max-visits
- The maximum number of use and def visits when discovering a STV chain before
- the discovery is aborted.
- 
- @item ix86-vect-unroll-limit
- Limit how much the autovectorizer may unroll a loop.
- 
- @item ix86-vect-compare-costs
- Whether x86 vectorizer cost modeling compares costs of different vector sizes.
- 
- @end table
- 
  @end table
  
  @node Instrumentation Options
--- 16811,16816 ----
*************** instrumentation differences necessary fo
*** 19060,19071 ****
  These differences are to avoid hwasan library initialization calls and to
  account for the stack pointer having a different value in its top byte.
  
! @emph{Note:} This option has different defaults to the @option{-fsanitize=hwaddress}.
! Instrumenting the stack and alloca calls are not on by default but are still
! possible by specifying the command-line options
! @option{--param hwasan-instrument-stack=1} and
! @option{--param hwasan-instrument-allocas=1} respectively. Using a random frame
! tag is not implemented for kernel instrumentation.
  
  @opindex fsanitize=memtag-stack
  @item -fsanitize=memtag-stack
--- 17329,17338 ----
  These differences are to avoid hwasan library initialization calls and to
  account for the stack pointer having a different value in its top byte.
  
! @emph{Note:} This option has different defaults than
! @option{-fsanitize=hwaddress}.
! Instrumenting the stack and alloca calls are not on by default.
! Using a random frame tag is not implemented for kernel instrumentation.
  
  @opindex fsanitize=memtag-stack
  @item -fsanitize=memtag-stack
*************** Verification takes place before returns,
*** 19529,19537 ****
  (see below) and, optionally, before escaping exceptions with
  @option{-fhardcfr-check-exceptions}, before returning calls with
  @option{-fhardcfr-check-returning-calls}, and before noreturn calls with
! @option{-fhardcfr-check-noreturn-calls}).  Tuning options
! @option{--param hardcfr-max-blocks} and @option{--param
! hardcfr-max-inline-blocks} are available.
  
  Tail call optimization takes place too late to affect control flow
  redundancy, but calls annotated as mandatory tail calls by language
--- 17796,17802 ----
  (see below) and, optionally, before escaping exceptions with
  @option{-fhardcfr-check-exceptions}, before returning calls with
  @option{-fhardcfr-check-returning-calls}, and before noreturn calls with
! @option{-fhardcfr-check-noreturn-calls}).
  
  Tail call optimization takes place too late to affect control flow
  redundancy, but calls annotated as mandatory tail calls by language
*************** always three numbers separated by dots,
*** 22875,22880 ****
--- 21140,21171 ----
  @item -dumpspecs
  Print the compiler's built-in specs---and don't do anything else.  (This
  is used when GCC itself is being built.)  @xref{Spec Files}.
+ 
+ @opindex param
+ @item --param @var{name}=@var{value}
+ @itemx --param=@var{name}=@var{value}
+ GCC by convention uses parameters that can be specified on the command
+ line instead of hard-wired constants to represent arbitrary compiler
+ limits or heuristics.  Many parameters are related to optimization;
+ for example, GCC does not inline functions that contain more than a
+ certain number of instructions.  The static analyzer similarly uses
+ parameters to limit complexity, link-time optimization uses parameters
+ to control partitioning, and so on.  Other parameters control aspects
+ of GCC that are completely internal, such as its memory allocation and
+ garbage collection strategy.  Still others control target-specific
+ behavior.
+ 
+ The @option{--param} option provides a uniform interface for
+ specifying values for these compiler parameters.  However, the names
+ of specific parameters, and the meaning of the values, are tied to the
+ internals of the compiler, and are subject to change without notice in
+ future releases.  You should not depend on parameter settings for
+ correct compilation of your program.  They are exposed via the command
+ line for the convenience of developers in debugging compilation
+ problems or, in some cases, to provide workarounds for compiler bugs.
+ 
+ @xref{Parameters,,Parameters,gccint,GNU Compiler Collection (GCC) Internals},
+ for documentation of these internal parameters.
  @end table
  
  @node Submodel Options
*************** performance of the code.  Permissible va
*** 23262,23268 ****
  @samp{octeontx2f95mm},
  @samp{a64fx}, @samp{fujitsu-monaka},
  @samp{thunderx}, @samp{thunderxt88},
! @samp{thunderxt88p1}, @samp{thunderxt81}, @samp{tsv110},
  @samp{thunderxt83}, @samp{thunderx2t99}, @samp{thunderx3t110}, @samp{zeus},
  @samp{cortex-a57.cortex-a53}, @samp{cortex-a72.cortex-a53},
  @samp{cortex-a73.cortex-a35}, @samp{cortex-a73.cortex-a53},
--- 21553,21559 ----
  @samp{octeontx2f95mm},
  @samp{a64fx}, @samp{fujitsu-monaka},
  @samp{thunderx}, @samp{thunderxt88},
! @samp{thunderxt88p1}, @samp{thunderxt81}, @samp{tsv110}, @samp{hip12},
  @samp{thunderxt83}, @samp{thunderx2t99}, @samp{thunderx3t110}, @samp{zeus},
  @samp{cortex-a57.cortex-a53}, @samp{cortex-a72.cortex-a53},
  @samp{cortex-a73.cortex-a35}, @samp{cortex-a73.cortex-a53},
*************** tools, for example @file{objtool} of the
*** 29628,29639 ****
  need the annotation to analyze the control flow.  The default is
  @option{-mno-annotate-tablejump}.
  
- @item --param loongarch-vect-unroll-limit=@var{n}
- The vectorizer uses available tuning information to determine whether it
- would be beneficial to unroll the main vectorized loop and by how much.  This
- parameter sets the upper bound of how much the vectorizer unrolls the main
- loop.  The default value is six.
- 
  @end table
  
  @node LynxOS Options
--- 27919,27924 ----
*************** Inlining can only be done if the strings
*** 32882,32891 ****
  and instructions for accelerated processing are available.
  The default is to inline @code{strcmp} calls.
  
- The @option{--param riscv-strcmp-inline-limit=@var{n}} parameter controls
- the maximum number of bytes compared by the inlined code.
- The default value is 64.
- 
  @opindex minline-strncmp
  @opindex mno-inline-strncmp
  @item -minline-strncmp
--- 31167,31172 ----
*************** Inlining can only be done if the strings
*** 32895,32904 ****
  and instructions for accelerated processing are available.
  The default is to inline @code{strncmp} calls.
  
- The @option{--param riscv-strcmp-inline-limit=@var{n}} parameter controls
- the maximum number of bytes compared by the inlined code.
- The default value is 64.
- 
  @opindex mstringop-strategy
  @item -mstringop-strategy=@var{strategy}
  Specify a particular strategy for inlining string and memory operations.
--- 31176,31181 ----
*************** This option is enabled by default.
*** 34396,34407 ****
  Enable or disable warnings about deprecated @samp{vector long ...} Altivec
  type usage.  This option is enabled by default.
  
- @item --param rs6000-vect-unroll-limit=
- The vectorizer checks with target information to determine whether it
- would be beneficial to unroll the main vectorized loop and by how much.  This
- parameter sets the upper bound of how much the vectorizer unrolls the main
- loop.  The default value is four.
- 
  @end table
  
  @node RX Options
--- 32673,32678 ----
*************** functionality.  Generally blocks are rea
*** 40419,40425 ****
  instantiation occurs.  To inhibit this, the @option{-fno-module-lazy}
  option may be used.
  
! The @option{--param lazy-modules=@var{n}} parameter controls the limit
  on the number of concurrently open module files during lazy loading.
  Should more modules be imported, an LRU algorithm is used to determine
  which files to close---until that file is needed again.  This limit
--- 38690,38696 ----
  instantiation occurs.  To inhibit this, the @option{-fno-module-lazy}
  option may be used.
  
! GCC has an internal parameter that controls the limit
  on the number of concurrently open module files during lazy loading.
  Should more modules be imported, an LRU algorithm is used to determine
  which files to close---until that file is needed again.  This limit
diff -Nrcpad gcc-16-20260201/gcc/doc/params.texi gcc-16-20260208/gcc/doc/params.texi
*** gcc-16-20260201/gcc/doc/params.texi	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/doc/params.texi	Sun Feb  8 22:32:07 2026
***************
*** 0 ****
--- 1,2156 ----
+ @c Copyright (C) 1988-2026 Free Software Foundation, Inc.
+ @c This is part of the GCC manual.
+ @c For copying conditions, see the file gcc.texi.
+ 
+ @node Parameters
+ @chapter Parameters
+ @cindex parameters
+ @cindex command-line parameters
+ 
+ In some places, GCC uses parameters that are settable from the command line
+ instead of arbitrary hard-wired constants.  Many of these parameters
+ control the amount of optimization that is done.  For example, GCC does not
+ inline functions that contain more than a certain number of instructions.
+ You can control these parameters with the @option{--param} command-line option:
+ 
+ @opindex param
+ @example
+ --param @var{name}=@var{value}
+ --param=@var{name}=@var{value}
+ @end example
+ 
+ The names of specific parameters, and the meaning of the values, are
+ tied to the internals of the compiler, and are subject to change
+ without notice in future releases.  Not all parameters are documented.
+ 
+ To get a list of parameters supported by GCC, use the
+ @option{--help=params} option.
+ 
+ The @var{value} is an integer.  In order to get the minimal, maximal
+ and default values of a parameter, use the @option{--help=param -Q}
+ options.
+ 
+ @menu
+ * General Parameters::		Parameters recognized on all targets.
+ * Target-Specific Parameters::	Parameters for specific targets.
+ @end menu
+ 
+ @node General Parameters
+ @section General Parameters
+ 
+ The following choices of @var{name} are recognized for all targets:
+ 
+ @table @gcctabopt
+ @paindex auto-profile-bbs
+ @item auto-profile-bbs
+ If non-zero and used together with @option{-fauto-profile}, the auto-profile
+ is used to determine basic block profile.  If zero, then only function
+ level profile is read.
+ 
+ @paindex auto-profile-reorder-only
+ @item auto-profile-reorder-only
+ Enable only function reordering with auto-profile.
+ 
+ @paindex phiopt-factor-max-stmts-live
+ @item phiopt-factor-max-stmts-live
+ When factoring statements out of if/then/else, this is the maximum number
+ of statements
+ after the defining statement to be allowed to extend the lifetime of a name.
+ 
+ @paindex predictable-branch-outcome
+ @item predictable-branch-outcome
+ When branch is predicted to be taken with probability lower than this threshold
+ (as a percentage), then it is considered well-predictable.
+ 
+ @paindex max-rtl-if-conversion-insns
+ @item max-rtl-if-conversion-insns
+ RTL if-conversion tries to remove conditional branches around a block and
+ replace them with conditionally executed instructions.  This parameter
+ gives the maximum number of instructions in a block that should be
+ considered for if-conversion.  The compiler
+ also uses other heuristics to decide whether if-conversion is likely to be
+ profitable.
+ 
+ @paindex file-cache-files
+ @item file-cache-files
+ The maximum number of files in the file cache.
+ The file cache is used to print source lines in diagnostics and do some
+ source checks like @option{-Wmisleading-indentation}.
+ 
+ @paindex file-cache-lines
+ @item file-cache-lines
+ Maximum number of lines to index into file cache.
+ When zero this is automatically sized.
+ The file cache is used to print source lines in diagnostics and do some
+ source checks like @option{-Wmisleading-indentation}.
+ 
+ @paindex max-rtl-if-conversion-predictable-cost
+ @item max-rtl-if-conversion-predictable-cost
+ RTL if-conversion tries to remove conditional branches around a block
+ and replace them with conditionally executed instructions.  These parameters
+ give the maximum permissible cost for the sequence that would be generated
+ by if-conversion depending on whether the branch is statically determined
+ to be predictable or not.  The units for this parameter are the same as
+ those for the GCC internal seq_cost metric.  The compiler tries to
+ provide a reasonable default for this parameter using the @code{BRANCH_COST}
+ target macro.
+ 
+ @paindex max-crossjump-edges
+ @item max-crossjump-edges
+ The maximum number of incoming edges to consider for cross-jumping.
+ The algorithm used by @option{-fcrossjumping} is @math{O(N^2)} in
+ the number of edges incoming to each block.  Increasing values mean
+ more aggressive optimization, making the compilation time increase with
+ probably small improvement in executable size.
+ 
+ @paindex min-crossjump-insns
+ @item min-crossjump-insns
+ The minimum number of instructions that must be matched at the end
+ of two blocks before cross-jumping is performed on them.  This
+ value is ignored in the case where all instructions in the block being
+ cross-jumped from are matched.
+ 
+ @paindex max-grow-copy-bb-insns
+ @item max-grow-copy-bb-insns
+ The maximum code size expansion factor when copying basic blocks
+ instead of jumping.  The expansion is relative to a jump instruction.
+ 
+ @paindex max-goto-duplication-insns
+ @item max-goto-duplication-insns
+ The maximum number of instructions to duplicate to a block that jumps
+ to a computed goto.  To avoid @math{O(N^2)} behavior in a number of
+ passes, GCC factors computed gotos early in the compilation process,
+ and unfactors them as late as possible.  Only computed jumps at the
+ end of a basic blocks with no more than @code{max-goto-duplication-insns} are
+ unfactored.
+ 
+ @paindex max-delay-slot-insn-search
+ @item max-delay-slot-insn-search
+ The maximum number of instructions to consider when looking for an
+ instruction to fill a delay slot.  If more than this arbitrary number of
+ instructions are searched, the time savings from filling the delay slot
+ are minimal, so stop searching.  Increasing values mean more
+ aggressive optimization, making the compilation time increase with probably
+ small improvement in execution time.
+ 
+ @paindex max-delay-slot-live-search
+ @item max-delay-slot-live-search
+ When trying to fill delay slots, the maximum number of instructions to
+ consider when searching for a block with valid live register
+ information.  Increasing this arbitrarily-chosen value means more
+ aggressive optimization, increasing the compilation time.  This parameter
+ should be removed when the delay slot code is rewritten to maintain the
+ control-flow graph.
+ 
+ @paindex max-devirt-targets
+ @item max-devirt-targets
+ This limits number of function a virtual call may be speculatively
+ devirtualized to using static analysis (without profile feedback).
+ 
+ @paindex max-gcse-memory
+ @item max-gcse-memory
+ The approximate maximum amount of memory in @code{kB} that can be allocated in
+ order to perform the global common subexpression elimination
+ optimization.  If more memory than specified is required, the
+ optimization is not done.
+ 
+ @paindex max-gcse-insertion-ratio
+ @item max-gcse-insertion-ratio
+ If the ratio of expression insertions to deletions is larger than this value
+ for any expression, then RTL PRE inserts or removes the expression and thus
+ leaves partially redundant computations in the instruction stream.
+ 
+ @paindex max-pending-list-length
+ @item max-pending-list-length
+ The maximum number of pending dependencies scheduling allows
+ before flushing the current state and starting over.  Large functions
+ with few branches or calls can create excessively large lists which
+ needlessly consume memory and resources.
+ 
+ @paindex max-modulo-backtrack-attempts
+ @item max-modulo-backtrack-attempts
+ The maximum number of backtrack attempts the scheduler should make
+ when modulo scheduling a loop.  Larger values can exponentially increase
+ compilation time.
+ 
+ @paindex max-inline-functions-called-once-loop-depth
+ @item max-inline-functions-called-once-loop-depth
+ Maximal loop depth of a call considered by inline heuristics that tries to
+ inline all functions called once.
+ 
+ @paindex max-inline-functions-called-once-insns
+ @item max-inline-functions-called-once-insns
+ Maximal estimated size of functions produced while inlining functions called
+ once.
+ 
+ @paindex max-inline-insns-single
+ @item max-inline-insns-single
+ Several parameters control the tree inliner used in GCC@.  This number sets the
+ maximum number of instructions (counted in GCC's internal representation) in a
+ single function that the tree inliner considers for inlining.  This only
+ affects functions declared inline and methods implemented in a class
+ declaration (C++).
+ 
+ 
+ @paindex max-inline-insns-auto
+ @item max-inline-insns-auto
+ When you use @option{-finline-functions} (included in @option{-O3}),
+ a lot of functions that would otherwise not be considered for inlining
+ by the compiler are investigated.  To those functions, a different
+ (more restrictive) limit compared to functions declared inline can
+ be applied (@option{--param max-inline-insns-auto}).
+ 
+ @paindex max-inline-insns-small
+ @item max-inline-insns-small
+ This is the bound applied to calls that are considered relevant with
+ @option{-finline-small-functions}.
+ 
+ @paindex max-inline-insns-size
+ @item max-inline-insns-size
+ This is the bound applied to calls that are optimized for size. Small growth
+ may be desirable to anticipate optimization opportunities exposed by inlining.
+ 
+ @paindex uninlined-function-insns
+ @item uninlined-function-insns
+ Number of instructions accounted by inliner for function overhead such as
+ function prologue and epilogue.
+ 
+ @paindex uninlined-function-time
+ @item uninlined-function-time
+ Extra time accounted by inliner for function overhead such as time needed to
+ execute function prologue and epilogue.
+ 
+ @paindex inline-heuristics-hint-percent
+ @item inline-heuristics-hint-percent
+ The scale (as a percentage) applied to @option{inline-insns-single},
+ @option{inline-insns-single-O2}, @option{inline-insns-auto}
+ when inline heuristics hint that inlining is
+ very profitable.  It enables later optimizations.
+ 
+ @paindex uninlined-thunk-insns
+ @item uninlined-thunk-insns
+ @paindex uninlined-thunk-time
+ @item uninlined-thunk-time
+ Same as @option{--param uninlined-function-insns} and
+ @option{--param uninlined-function-time}, but applied to function thunks.
+ 
+ @paindex inline-min-speedup
+ @item inline-min-speedup
+ When estimated performance improvement of caller + callee runtime exceeds this
+ threshold (as a percentage),
+ the function can be inlined regardless of the limit on
+ @option{--param max-inline-insns-single} and @option{--param
+ max-inline-insns-auto}.
+ 
+ @paindex large-function-insns
+ @item large-function-insns
+ The limit specifying really large functions.  For functions larger than this
+ limit after inlining, inlining is constrained by
+ @option{--param large-function-growth}.  This parameter is useful primarily
+ to avoid extreme compilation time caused by non-linear algorithms used by the
+ back end.
+ 
+ @paindex large-function-growth
+ @item large-function-growth
+ Specifies maximal growth of large functions caused by inlining,
+ as a percentage.
+ For example, a parameter value of 100 limits large function growth to 2.0 times
+ the original size.
+ 
+ @paindex large-unit-insns
+ @item large-unit-insns
+ The limit specifying large translation unit.  Growth caused by inlining of
+ units larger than this limit is limited by @option{--param inline-unit-growth}.
+ For small units this might be too tight.
+ For example, consider a unit consisting of function A
+ that is inline and B that just calls A three times.  If B is small relative to
+ A, the growth of unit is 300\% and yet such inlining is very sane.  For very
+ large units consisting of small inlineable functions, however, the overall unit
+ growth limit is needed to avoid exponential explosion of code size.  Thus for
+ smaller units, the size is increased to @option{--param large-unit-insns}
+ before applying @option{--param inline-unit-growth}.
+ 
+ @paindex lazy-modules
+ @item lazy-modules
+ Maximum number of concurrently open C++ module files when lazy loading.
+ 
+ @paindex inline-unit-growth
+ @item inline-unit-growth
+ Specifies maximal overall growth of the compilation unit caused by inlining.
+ For example, parameter value 20 limits unit growth to 1.2 times the original
+ size. Cold functions (either marked cold via an attribute or by profile
+ feedback) are not accounted into the unit size.
+ 
+ @paindex ipa-cp-unit-growth
+ @item ipa-cp-unit-growth
+ Specifies maximal overall growth of the compilation unit caused by
+ interprocedural constant propagation.  For example, parameter value 10 limits
+ unit growth to 1.1 times the original size.
+ 
+ @paindex ipa-cp-large-unit-insns
+ @item ipa-cp-large-unit-insns
+ The size of translation unit that IPA-CP pass considers large.
+ 
+ @paindex large-stack-frame
+ @item large-stack-frame
+ The limit specifying large stack frames.  While inlining, the algorithm tries
+ to not grow past this limit too much.
+ 
+ @paindex large-stack-frame-growth
+ @item large-stack-frame-growth
+ Specifies maximal growth of large stack frames caused by inlining,
+ as a percentage of the original size.
+ For example, parameter value 1000 limits large stack frame growth to 11 times
+ the original size.
+ 
+ @paindex max-inline-insns-recursive
+ @paindex max-inline-insns-recursive-auto
+ @item max-inline-insns-recursive
+ @itemx max-inline-insns-recursive-auto
+ Specifies the maximum number of instructions an out-of-line copy of a
+ self-recursive inline
+ function can grow into by performing recursive inlining.
+ 
+ @option{--param max-inline-insns-recursive} applies to functions
+ declared inline.
+ For functions not declared inline, recursive inlining
+ happens only when @option{-finline-functions} (included in @option{-O3}) is
+ enabled; @option{--param max-inline-insns-recursive-auto} applies instead.
+ 
+ @paindex max-inline-recursive-depth
+ @paindex max-inline-recursive-depth-auto
+ @item max-inline-recursive-depth
+ @itemx max-inline-recursive-depth-auto
+ Specifies the maximum recursion depth used for recursive inlining.
+ 
+ @option{--param max-inline-recursive-depth} applies to functions
+ declared inline.  For functions not declared inline, recursive inlining
+ happens only when @option{-finline-functions} (included in @option{-O3}) is
+ enabled; @option{--param max-inline-recursive-depth-auto} applies instead.
+ 
+ @paindex min-inline-recursive-probability
+ @item min-inline-recursive-probability
+ Recursive inlining is profitable only for functions having deep recursion
+ in average and can hurt for functions having little recursion depth by
+ increasing the prologue size or complexity of function body to other
+ optimizers.
+ 
+ When profile feedback is available (see @option{-fprofile-generate}),
+ the actual
+ recursion depth can be guessed from the probability that function recurses
+ via a given call expression.  This parameter limits inlining only to call
+ expressions whose probability exceeds the given threshold (as a percentage).
+ 
+ @paindex early-inlining-insns
+ @item early-inlining-insns
+ Specify growth that the early inliner can make.  In effect it increases
+ the amount of inlining for code having a large abstraction penalty.
+ 
+ @paindex max-early-inliner-iterations
+ @item max-early-inliner-iterations
+ Limit of iterations of the early inliner.  This basically bounds
+ the number of nested indirect calls the early inliner can resolve.
+ Deeper chains are still handled by late inlining.
+ 
+ @paindex comdat-sharing-probability
+ @item comdat-sharing-probability
+ Probability (as a percentage) that C++ inline function with comdat visibility
+ are shared across multiple compilation units.
+ 
+ @paindex modref-max-bases
+ @item modref-max-bases
+ @paindex modref-max-refs
+ @item modref-max-refs
+ @paindex modref-max-accesses
+ @item modref-max-accesses
+ Specifies the maximal number of base pointers, references and accesses stored
+ for a single function by mod/ref analysis.
+ 
+ @paindex modref-max-tests
+ @item modref-max-tests
+ Specifies the maxmal number of tests alias oracle can perform to disambiguate
+ memory locations using the mod/ref information.  This parameter ought to be
+ bigger than @option{--param modref-max-bases} and @option{--param
+ modref-max-refs}.
+ 
+ @paindex modref-max-depth
+ @item modref-max-depth
+ Specifies the maximum depth of DFS walk used by modref escape analysis.
+ Setting to 0 disables the analysis completely.
+ 
+ @paindex modref-max-escape-points
+ @item modref-max-escape-points
+ Specifies the maximum number of escape points tracked by modref per SSA-name.
+ 
+ @paindex modref-max-adjustments
+ @item modref-max-adjustments
+ Specifies the maximum number times the access range is enlarged during
+ modref dataflow analysis.
+ 
+ @paindex profile-func-internal-id
+ @item profile-func-internal-id
+ A parameter to control whether to use function internal id in profile
+ database lookup. If the value is 0, the compiler uses an id that
+ is based on function assembler name and filename, which makes old profile
+ data more tolerant to source changes such as function reordering etc.
+ 
+ @paindex min-vect-loop-bound
+ @item min-vect-loop-bound
+ The minimum number of iterations under which loops are not vectorized
+ when @option{-ftree-vectorize} is used.  The number of iterations after
+ vectorization needs to be greater than the value specified by this option
+ to allow vectorization.
+ 
+ @paindex gcse-cost-distance-ratio
+ @item gcse-cost-distance-ratio
+ Scaling factor in calculation of maximum distance an expression
+ can be moved by GCSE optimizations.  This is currently supported only in the
+ code hoisting pass.  The bigger the ratio, the more aggressive code hoisting
+ is with simple expressions, i.e., the expressions that have cost
+ less than @option{gcse-unrestricted-cost}.  Specifying 0 disables
+ hoisting of simple expressions.
+ 
+ @paindex gcse-unrestricted-cost
+ @item gcse-unrestricted-cost
+ Cost, roughly measured as the cost of a single typical machine
+ instruction, at which GCSE optimizations do not constrain
+ the distance an expression can travel.  This is currently
+ supported only in the code hoisting pass.  The lesser the cost,
+ the more aggressive code hoisting is.  Specifying 0
+ allows all expressions to travel unrestricted distances.
+ 
+ @paindex max-hoist-depth
+ @item max-hoist-depth
+ The depth of search in the dominator tree for expressions to hoist.
+ This is used to avoid quadratic behavior in hoisting algorithm.
+ The value of 0 does not limit on the search, but may slow down compilation
+ of huge functions.
+ 
+ @paindex max-tail-merge-comparisons
+ @item max-tail-merge-comparisons
+ The maximum number of similar bbs to compare a bb with.  This is used to
+ avoid quadratic behavior in tree tail merging.
+ 
+ @paindex max-tail-merge-iterations
+ @item max-tail-merge-iterations
+ The maximum number of iterations of the tree tail merging pass over a function.
+ This is used to limit compilation time in this pass.
+ 
+ @paindex store-merging-allow-unaligned
+ @item store-merging-allow-unaligned
+ Allow the store merging pass to introduce unaligned stores if it is legal to
+ do so.
+ 
+ @paindex max-stores-to-merge
+ @item max-stores-to-merge
+ The maximum number of stores to attempt to merge into wider stores in the store
+ merging pass.
+ 
+ @paindex max-store-chains-to-track
+ @item max-store-chains-to-track
+ The maximum number of store chains to track at the same time in the attempt
+ to merge them into wider stores in the store merging pass.
+ 
+ @paindex max-stores-to-track
+ @item max-stores-to-track
+ The maximum number of stores to track at the same time in the attempt to
+ to merge them into wider stores in the store merging pass.
+ 
+ @paindex max-unrolled-insns
+ @item max-unrolled-insns
+ The maximum number of instructions that a loop may have to be unrolled.
+ If a loop is unrolled, this parameter also determines how many times
+ the loop code is unrolled.
+ 
+ @paindex max-average-unrolled-insns
+ @item max-average-unrolled-insns
+ The maximum number of instructions biased by probabilities of their execution
+ that a loop may have to be unrolled.  If a loop is unrolled,
+ this parameter also determines how many times the loop code is unrolled.
+ 
+ @paindex max-unroll-times
+ @item max-unroll-times
+ The maximum number of unrollings of a single loop.
+ 
+ @paindex max-peeled-insns
+ @item max-peeled-insns
+ The maximum number of instructions that a loop may have to be peeled.
+ If a loop is peeled, this parameter also determines how many times
+ the loop code is peeled.
+ 
+ @paindex max-peel-times
+ @item max-peel-times
+ The maximum number of peelings of a single loop.
+ 
+ @paindex max-peel-branches
+ @item max-peel-branches
+ The maximum number of branches on the hot path through the peeled sequence.
+ 
+ @paindex max-completely-peeled-insns
+ @item max-completely-peeled-insns
+ The maximum number of insns of a completely peeled loop.
+ 
+ @paindex max-completely-peel-times
+ @item max-completely-peel-times
+ The maximum number of iterations of a loop to be suitable for complete peeling.
+ 
+ @paindex max-completely-peel-loop-nest-depth
+ @item max-completely-peel-loop-nest-depth
+ The maximum depth of a loop nest suitable for complete peeling.
+ 
+ @paindex max-unswitch-insns
+ @item max-unswitch-insns
+ The maximum number of insns of an unswitched loop.
+ 
+ @paindex max-unswitch-depth
+ @item max-unswitch-depth
+ The maximum depth of a loop nest to be unswitched.
+ 
+ @paindex lim-expensive
+ @item lim-expensive
+ The minimum cost of an expensive expression in the loop invariant motion pass.
+ 
+ @paindex min-loop-cond-split-prob
+ @item min-loop-cond-split-prob
+ When FDO profile information is available, @option{min-loop-cond-split-prob}
+ specifies the minimum threshold for probability of semi-invariant condition
+ statement to trigger loop split.  The value is a percentage.
+ 
+ @paindex iv-consider-all-candidates-bound
+ @item iv-consider-all-candidates-bound
+ Bound on number of candidates for induction variables, below which
+ all candidates are considered for each use in induction variable
+ optimizations.  If there are more candidates than this,
+ only the most relevant ones are considered to avoid quadratic time complexity.
+ 
+ @paindex iv-max-considered-uses
+ @item iv-max-considered-uses
+ The induction variable optimizations give up on loops that contain more
+ induction variable uses than this limit.
+ 
+ @paindex iv-always-prune-cand-set-bound
+ @item iv-always-prune-cand-set-bound
+ This parameter is used by induction variable optimization.
+ If the number of candidates in the iv set is larger than this value,
+ always try to remove unnecessary ivs from the set
+ when adding a new one.
+ 
+ @paindex avg-loop-niter
+ @item avg-loop-niter
+ Average number of iterations of a loop.
+ 
+ @paindex dse-max-object-size
+ @item dse-max-object-size
+ Maximum size (in bytes) of objects tracked bytewise by dead store elimination.
+ Larger values may result in larger compilation times.
+ 
+ @paindex dse-max-alias-queries-per-store
+ @item dse-max-alias-queries-per-store
+ Maximum number of queries into the alias oracle per store.
+ Larger values result in larger compilation times and may result in more
+ removed dead stores.
+ 
+ @paindex scev-max-expr-size
+ @item scev-max-expr-size
+ Bound on size of expressions used in the scalar evolutions analyzer.
+ Large expressions slow the analyzer.
+ 
+ @paindex scev-max-expr-complexity
+ @item scev-max-expr-complexity
+ Bound on the complexity of the expressions in the scalar evolutions analyzer.
+ Complex expressions slow the analyzer.
+ 
+ @paindex max-tree-if-conversion-phi-args
+ @item max-tree-if-conversion-phi-args
+ Maximum number of arguments in a PHI supported by TREE if conversion
+ unless the loop is marked with a simd pragma.
+ 
+ @paindex vect-max-layout-candidates
+ @item vect-max-layout-candidates
+ The maximum number of possible vector layouts (such as permutations)
+ to consider when optimizing to-be-vectorized code.
+ 
+ @paindex vect-max-version-for-alignment-checks
+ @item vect-max-version-for-alignment-checks
+ The maximum number of run-time checks that can be performed when
+ doing loop versioning for alignment in the vectorizer.
+ 
+ @paindex vect-max-version-for-alias-checks
+ @item vect-max-version-for-alias-checks
+ The maximum number of run-time checks that can be performed when
+ doing loop versioning for alias in the vectorizer.
+ 
+ @paindex vect-max-peeling-for-alignment
+ @item vect-max-peeling-for-alignment
+ The maximum number of loop peels to enhance access alignment
+ for vectorizer. Value -1 means no limit.
+ 
+ @paindex max-iterations-to-track
+ @item max-iterations-to-track
+ The maximum number of iterations of a loop the brute-force algorithm
+ for analysis of the number of iterations of the loop tries to evaluate.
+ 
+ @paindex hot-bb-count-fraction
+ @item hot-bb-count-fraction
+ The denominator @var{n} of fraction 1/@var{n}
+ of the maximal execution count of a
+ basic block in the entire program that a basic block needs to at least
+ have in order to be considered hot.  The default is 10000, which means
+ that a basic block is considered hot if its execution count is greater
+ than 1/10000 of the maximal execution count.  0 means that it is never
+ considered hot.  Used in non-LTO mode.
+ 
+ @paindex hot-bb-count-ws-permille
+ @item hot-bb-count-ws-permille
+ The number of most executed permilles, ranging from 0 to 1000, of the
+ profiled execution of the entire program to which the execution count
+ of a basic block must be part of in order to be considered hot.  The
+ default is 990, which means that a basic block is considered hot if
+ its execution count contributes to the upper 990 permilles, or 99.0%,
+ of the profiled execution of the entire program.  0 means that it is
+ never considered hot.  Used in LTO mode.
+ 
+ @paindex hot-bb-frequency-fraction
+ @item hot-bb-frequency-fraction
+ The denominator @var{n} of fraction 1/@var{n}
+ of the execution frequency of the
+ entry block of a function that a basic block of this function needs
+ to at least have in order to be considered hot.  The default is 1000,
+ which means that a basic block is considered hot in a function if it
+ is executed more frequently than 1/1000 of the frequency of the entry
+ block of the function.  0 means that it is never considered hot.
+ 
+ @paindex unlikely-bb-count-fraction
+ @item unlikely-bb-count-fraction
+ The denominator @var{n} of fraction 1/@var{n}
+ of the number of profiled runs of
+ the entire program below which the execution count of a basic block
+ must be in order for the basic block to be considered unlikely executed.
+ The default is 20, which means that a basic block is considered unlikely
+ executed if it is executed in fewer than 1/20, or 5%, of the runs of
+ the program.  0 means that it is always considered unlikely executed.
+ 
+ @paindex max-predicted-iterations
+ @item max-predicted-iterations
+ The maximum number of loop iterations we predict statically.  This is useful
+ in cases where a function contains a single loop with known bound and
+ another loop with unknown bound.
+ The known number of iterations is predicted correctly, while
+ the unknown number of iterations average to roughly 10.  This means that the
+ loop without bounds appears artificially cold relative to the other one.
+ 
+ @paindex builtin-expect-probability
+ @item builtin-expect-probability
+ Control the probability of the expression having the specified value, as
+ a percentage.
+ 
+ @paindex builtin-string-cmp-inline-length
+ @item builtin-string-cmp-inline-length
+ The maximum length of a constant string for a builtin @code{strcmp} or
+ @code{memcmp} call to be eligible for inlining.
+ 
+ @paindex align-threshold
+ @item align-threshold
+ 
+ Select fraction of the maximal frequency of executions of a basic block in
+ a function to align the basic block.
+ 
+ @paindex align-loop-iterations
+ @item align-loop-iterations
+ 
+ A loop expected to iterate at least the selected number of iterations is
+ aligned.
+ 
+ @paindex tracer-dynamic-coverage
+ @paindex tracer-dynamic-coverage-feedback
+ @item tracer-dynamic-coverage
+ @itemx tracer-dynamic-coverage-feedback
+ 
+ This value is used to limit superblock formation once the given percentage of
+ executed instructions is covered.  This limits unnecessary code size
+ expansion.
+ 
+ The @option{tracer-dynamic-coverage-feedback} parameter
+ is used only when profile
+ feedback is available.  The real profiles (as opposed to statically estimated
+ ones) are much less balanced allowing the threshold to be a larger value.
+ 
+ @paindex tracer-max-code-growth
+ @item tracer-max-code-growth
+ Stop tail duplication once code growth has reached given percentage.  This is
+ a rather artificial limit, as most of the duplicates are eliminated later in
+ cross jumping, so it may be set to much higher values than is the desired code
+ growth.
+ 
+ @paindex tracer-min-branch-ratio
+ @item tracer-min-branch-ratio
+ 
+ Stop reverse growth when the reverse probability of best edge is less than this
+ threshold (as a percentage).
+ 
+ @paindex tracer-min-branch-probability
+ @paindex tracer-min-branch-probability-feedback
+ @item tracer-min-branch-probability
+ @itemx tracer-min-branch-probability-feedback
+ 
+ Stop forward growth if the best edge has probability lower than this
+ threshold.
+ 
+ Similarly to @option{tracer-dynamic-coverage} two parameters are
+ provided.  @option{tracer-min-branch-probability-feedback} is used for
+ compilation with profile feedback and @option{tracer-min-branch-probability}
+ compilation without.  The value for compilation with profile feedback
+ needs to be more conservative (higher) in order to make tracer
+ effective.
+ 
+ @paindex stack-clash-protection-guard-size
+ @item stack-clash-protection-guard-size
+ Specify the size of the operating system provided stack guard as
+ 2 raised to @var{num} bytes.  Higher values may reduce the
+ number of explicit probes, but a value larger than the guard provided
+ by the operating system leaves code vulnerable to stack clash style attacks.
+ 
+ @paindex stack-clash-protection-probe-interval
+ @item stack-clash-protection-probe-interval
+ Stack clash protection involves probing stack space as it is allocated.
+ This parameter controls the maximum distance between probes into the stack
+ as 2 raised to @var{num} bytes.
+ Higher values may reduce the number of explicit probes,
+ but a value larger than the guard provided by the operating system leaves
+ code vulnerable to stack clash style attacks.
+ 
+ @paindex max-cse-path-length
+ @item max-cse-path-length
+ 
+ The maximum number of basic blocks on path that CSE considers.
+ 
+ @paindex max-cse-insns
+ @item max-cse-insns
+ The maximum number of instructions CSE processes before flushing.
+ 
+ @paindex ggc-min-expand
+ @item ggc-min-expand
+ 
+ GCC uses a garbage collector to manage its own memory allocation.  This
+ parameter specifies the minimum percentage by which the garbage
+ collector's heap should be allowed to expand between collections.
+ Tuning this may improve compilation speed; it has no effect on code
+ generation.
+ 
+ The default is 30% + 70% * (RAM/1GB) with an upper bound of 100% when
+ RAM >= 1GB@.  If @code{getrlimit} is available, the notion of ``RAM'' is
+ the smallest of actual RAM and @code{RLIMIT_DATA} or @code{RLIMIT_AS}.  If
+ GCC is not able to calculate RAM on a particular platform, the lower
+ bound of 30% is used.  Setting this parameter and
+ @option{ggc-min-heapsize} to zero causes a full collection to occur at
+ every opportunity.  This is extremely slow, but can be useful for
+ debugging.
+ 
+ @paindex ggc-min-heapsize
+ @item ggc-min-heapsize
+ 
+ Minimum size of the garbage collector's heap before it begins bothering
+ to collect garbage.  The first collection occurs after the heap expands
+ by @option{ggc-min-expand}% beyond @option{ggc-min-heapsize}.  Again,
+ tuning this may improve compilation speed, and has no effect on code
+ generation.
+ 
+ The default is the smaller of RAM/8, @code{RLIMIT_RSS}, or a limit that
+ tries to ensure that @code{RLIMIT_DATA} or @code{RLIMIT_AS} are not exceeded,
+ but with a lower bound of 4096 (four megabytes) and an upper bound of
+ 131072 (128 megabytes).  If GCC is not able to calculate RAM on a
+ particular platform, the lower bound is used.  Setting this parameter
+ very large effectively disables garbage collection.  Setting this
+ parameter and @option{ggc-min-expand} to zero causes a full collection
+ to occur at every opportunity.
+ 
+ @paindex max-reload-search-insns
+ @item max-reload-search-insns
+ The maximum number of instruction reload should look backward for equivalent
+ register.  Increasing values mean more aggressive optimization, making the
+ compilation time increase with probably slightly better performance.
+ 
+ @paindex max-cselib-memory-locations
+ @item max-cselib-memory-locations
+ The maximum number of memory locations cselib should take into account.
+ Increasing values mean more aggressive optimization, making the compilation
+ time increase with probably slightly better performance.
+ 
+ @paindex max-sched-ready-insns
+ @item max-sched-ready-insns
+ The maximum number of instructions ready to be issued the scheduler should
+ consider at any given time during the first scheduling pass.  Increasing
+ values mean more thorough searches, making the compilation time increase
+ with probably little benefit.
+ 
+ @paindex max-sched-region-blocks
+ @item max-sched-region-blocks
+ The maximum number of blocks in a region to be considered for
+ interblock scheduling.
+ 
+ @paindex max-pipeline-region-blocks
+ @item max-pipeline-region-blocks
+ The maximum number of blocks in a region to be considered for
+ pipelining in the selective scheduler.
+ 
+ @paindex max-sched-region-insns
+ @item max-sched-region-insns
+ The maximum number of insns in a region to be considered for
+ interblock scheduling.
+ 
+ @paindex max-pipeline-region-insns
+ @item max-pipeline-region-insns
+ The maximum number of insns in a region to be considered for
+ pipelining in the selective scheduler.
+ 
+ @paindex min-spec-prob
+ @item min-spec-prob
+ The minimum probability (as a percentage) of reaching a source block
+ for interblock speculative scheduling.
+ 
+ @paindex max-sched-extend-regions-iters
+ @item max-sched-extend-regions-iters
+ The maximum number of iterations through CFG to extend regions.
+ A value of 0 disables region extensions.
+ 
+ @paindex max-sched-insn-conflict-delay
+ @item max-sched-insn-conflict-delay
+ The maximum conflict delay for an insn to be considered for speculative motion.
+ 
+ @paindex sched-spec-prob-cutoff
+ @item sched-spec-prob-cutoff
+ The minimal probability of speculation success (as a percentage), so that
+ speculative insns are scheduled.
+ 
+ @paindex sched-state-edge-prob-cutoff
+ @item sched-state-edge-prob-cutoff
+ The minimum probability an edge must have for the scheduler to save its
+ state across it.
+ 
+ @paindex sched-mem-true-dep-cost
+ @item sched-mem-true-dep-cost
+ Minimal distance (in CPU cycles) between store and load targeting same
+ memory locations.
+ 
+ @paindex selsched-max-lookahead
+ @item selsched-max-lookahead
+ The maximum size of the lookahead window of selective scheduling.  It is a
+ depth of search for available instructions.
+ 
+ @paindex selsched-max-sched-times
+ @item selsched-max-sched-times
+ The maximum number of times that an instruction is scheduled during
+ selective scheduling.  This is the limit on the number of iterations
+ through which the instruction may be pipelined.
+ 
+ @paindex selsched-insns-to-rename
+ @item selsched-insns-to-rename
+ The maximum number of best instructions in the ready list that are considered
+ for renaming in the selective scheduler.
+ 
+ @paindex sms-min-sc
+ @item sms-min-sc
+ The minimum value of stage count that swing modulo scheduler
+ generates.
+ 
+ @paindex max-last-value-rtl
+ @item max-last-value-rtl
+ The maximum size, measured as number of RTLs, that can be recorded in an
+ expression in the combiner for a pseudo-register as the last known value of
+ that register.
+ 
+ @paindex max-combine-insns
+ @item max-combine-insns
+ The maximum number of instructions the RTL combiner tries to combine.
+ 
+ @paindex max-combine-search-insns
+ @item max-combine-search-insns
+ The maximum number of instructions that the RTL combiner searches in order
+ to find the next use of a given register definition.  If this limit is reached
+ without finding such a use, the combiner stops trying to optimize the
+ definition.
+ 
+ Currently this limit only applies after certain successful combination
+ attempts, but it could be extended to other cases in future.
+ 
+ @paindex integer-share-limit
+ @item integer-share-limit
+ Small integer constants can use a shared data structure, reducing the
+ compiler's memory usage and increasing its speed.  This sets the maximum
+ value of a shared integer constant.
+ 
+ @paindex ssp-buffer-size
+ @item ssp-buffer-size
+ The minimum size of buffers (i.e.@: arrays) that receive stack smashing
+ protection when @option{-fstack-protector} is used.
+ 
+ @paindex min-size-for-stack-sharing
+ @item min-size-for-stack-sharing
+ The minimum size of variables taking part in stack slot sharing when not
+ optimizing.
+ 
+ @paindex max-jump-thread-duplication-stmts
+ @item max-jump-thread-duplication-stmts
+ Maximum number of statements allowed in a block that needs to be
+ duplicated when threading jumps.
+ 
+ @paindex max-jump-thread-paths
+ @item max-jump-thread-paths
+ The maximum number of paths to consider when searching for jump threading
+ opportunities.  When arriving at a block, incoming edges are only considered
+ if the number of paths to be searched so far multiplied by the number of
+ incoming edges does not exhaust the specified maximum number of paths to
+ consider.
+ 
+ @paindex max-fields-for-field-sensitive
+ @item max-fields-for-field-sensitive
+ Maximum number of fields in a structure treated in
+ a field-sensitive manner during pointer analysis.
+ 
+ @paindex prefetch-latency
+ @item prefetch-latency
+ Estimate on average number of instructions that are executed before
+ prefetch finishes.  The distance prefetched ahead is proportional
+ to this constant.  Increasing this number may also lead to less
+ streams being prefetched (see @option{simultaneous-prefetches}).
+ 
+ @paindex simultaneous-prefetches
+ @item simultaneous-prefetches
+ Maximum number of prefetches that can run at the same time.
+ 
+ @paindex l1-cache-line-size
+ @item l1-cache-line-size
+ The size of cache line in L1 data cache, in bytes.
+ 
+ @paindex l1-cache-size
+ @item l1-cache-size
+ The size of L1 data cache, in kilobytes.
+ 
+ @paindex l2-cache-size
+ @item l2-cache-size
+ The size of L2 data cache, in kilobytes.
+ 
+ @paindex prefetch-dynamic-strides
+ @item prefetch-dynamic-strides
+ Whether the loop array prefetch pass should issue software prefetch hints
+ for strides that are non-constant.  In some cases this may be
+ beneficial, though the fact the stride is non-constant may make it
+ hard to predict when there is clear benefit to issuing these hints.
+ 
+ Set to 1 if the prefetch hints should be issued for non-constant
+ strides.  Set to 0 if prefetch hints should be issued only for strides that
+ are known to be constant and below @option{prefetch-minimum-stride}.
+ 
+ @paindex prefetch-minimum-stride
+ @item prefetch-minimum-stride
+ Minimum constant stride, in bytes, to start using prefetch hints for.  If
+ the stride is less than this threshold, prefetch hints are not issued.
+ 
+ This setting is useful for processors that have hardware prefetchers, in
+ which case there may be conflicts between the hardware prefetchers and
+ the software prefetchers.  If the hardware prefetchers have a maximum
+ stride they can handle, it should be used here to improve the use of
+ software prefetchers.
+ 
+ A value of -1 means we don't have a threshold and therefore
+ prefetch hints can be issued for any constant stride.
+ 
+ This setting is only useful for strides that are known and constant.
+ 
+ @paindex destructive-interference-size
+ @item destructive-interference-size
+ @paindex constructive-interference-size
+ @item constructive-interference-size
+ The values for the C++17 variables
+ @code{std::hardware_destructive_interference_size} and
+ @code{std::hardware_constructive_interference_size}.  The destructive
+ interference size is the minimum recommended offset between two
+ independent concurrently-accessed objects; the constructive
+ interference size is the maximum recommended size of contiguous memory
+ accessed together.  Typically both are the size of an L1 cache
+ line for the target, in bytes.  For a generic target covering a range of L1
+ cache line sizes, typically the constructive interference size is
+ the small end of the range and the destructive size is the large
+ end.
+ 
+ The destructive interference size is intended to be used for layout,
+ and thus has ABI impact.  The default value is not expected to be
+ stable, and on some targets varies with @option{-mtune}, so use of
+ this variable in a context where ABI stability is important, such as
+ the public interface of a library, is strongly discouraged; if it is
+ used in that context, users can stabilize the value using this
+ option.
+ 
+ The constructive interference size is less sensitive, as it is
+ typically only used in a @samp{static_assert} to make sure that a type
+ fits within a cache line.
+ 
+ See also @option{-Winterference-size}.
+ 
+ @paindex loop-interchange-max-num-stmts
+ @item loop-interchange-max-num-stmts
+ The maximum number of stmts in a loop to be interchanged.
+ 
+ @paindex loop-interchange-stride-ratio
+ @item loop-interchange-stride-ratio
+ The minimum ratio between stride of two loops for interchange to be profitable.
+ 
+ @paindex min-insn-to-prefetch-ratio
+ @item min-insn-to-prefetch-ratio
+ The minimum ratio between the number of instructions and the
+ number of prefetches to enable prefetching in a loop.
+ 
+ @paindex prefetch-min-insn-to-mem-ratio
+ @item prefetch-min-insn-to-mem-ratio
+ The minimum ratio between the number of instructions and the
+ number of memory references to enable prefetching in a loop.
+ 
+ @paindex use-canonical-types
+ @item use-canonical-types
+ Whether the compiler should use the ``canonical'' type system.
+ Should always be 1, which uses a more efficient internal
+ mechanism for comparing types in C++ and Objective-C++.  However, if
+ bugs in the canonical type system are causing compilation failures,
+ set this value to 0 to disable canonical types.
+ 
+ @paindex switch-conversion-max-branch-ratio
+ @item switch-conversion-max-branch-ratio
+ Switch initialization conversion refuses to create arrays that are
+ bigger than @option{switch-conversion-max-branch-ratio} times the number of
+ branches in the switch.
+ 
+ @paindex max-partial-antic-length
+ @item max-partial-antic-length
+ Maximum length of the partial antic set computed during the tree
+ partial redundancy elimination optimization (@option{-ftree-pre}) when
+ optimizing at @option{-O3} and above.  For some sorts of source code
+ the enhanced partial redundancy elimination optimization can run away,
+ consuming all of the memory available on the host machine.  This
+ parameter sets a limit on the length of the sets that are computed,
+ which prevents the runaway behavior.  Setting a value of 0 for
+ this parameter allows an unlimited set length.
+ 
+ @paindex rpo-vn-max-loop-depth
+ @item rpo-vn-max-loop-depth
+ Maximum loop depth that is value-numbered optimistically.
+ When the limit hits the innermost
+ @var{rpo-vn-max-loop-depth} loops and the outermost loop in the
+ loop nest are value-numbered optimistically and the remaining ones not.
+ 
+ @paindex sccvn-max-alias-queries-per-access
+ @item sccvn-max-alias-queries-per-access
+ Maximum number of alias-oracle queries we perform when looking for
+ redundancies for loads and stores.  If this limit is hit the search
+ is aborted and the load or store is not considered redundant.  The
+ number of queries is algorithmically limited to the number of
+ stores on all paths from the load to the function entry.
+ 
+ @paindex ira-max-loops-num
+ @item ira-max-loops-num
+ IRA uses regional register allocation by default.  If a function
+ contains more loops than the number given by this parameter, only at most
+ the given number of the most frequently-executed loops form regions
+ for regional register allocation.
+ 
+ @paindex ira-max-conflict-table-size
+ @item ira-max-conflict-table-size
+ Although IRA uses a sophisticated algorithm to compress the conflict
+ table, the table can still require excessive amounts of memory for
+ huge functions.  If the conflict table for a function could be more
+ than the size in MB given by this parameter, the register allocator
+ instead uses a faster, simpler, and lower-quality
+ algorithm that does not require building a pseudo-register conflict table.
+ 
+ @paindex ira-loop-reserved-regs
+ @item ira-loop-reserved-regs
+ IRA can be used to evaluate more accurate register pressure in loops
+ for decisions to move loop invariants (see @option{-O3}).  The number
+ of available registers reserved for some other purposes is given
+ by this parameter.  The default value of the parameter
+ is the best found from numerous experiments.
+ 
+ @paindex ira-consider-dup-in-all-alts
+ @item ira-consider-dup-in-all-alts
+ Make IRA to consider matching constraint (duplicated operand number)
+ heavily in all available alternatives for preferred register class.
+ If it is set as zero, it means IRA only respects the matching
+ constraint when it's in the only available alternative with an
+ appropriate register class.  Otherwise, it means IRA checks all
+ available alternatives for preferred register class even if it has
+ found some choice with an appropriate register class that satisfies the
+ found qualified matching constraint.
+ 
+ @paindex ira-simple-lra-insn-threshold
+ @item ira-simple-lra-insn-threshold
+ Approximate function insn number in 1K units triggering simple local RA.
+ 
+ @paindex lra-inheritance-ebb-probability-cutoff
+ @item lra-inheritance-ebb-probability-cutoff
+ LRA tries to reuse values reloaded in registers in subsequent insns.
+ This optimization is called inheritance.  EBB is used as a region to
+ do this optimization.  The parameter defines a minimal fall-through
+ edge probability (as a percentage) used to add BB to inheritance EBB in
+ LRA.  The default value was chosen
+ from numerous runs of SPEC2000 on x86-64.
+ 
+ @paindex loop-invariant-max-bbs-in-loop
+ @item loop-invariant-max-bbs-in-loop
+ Loop invariant motion can be very expensive, both in compilation time and
+ in amount of needed compile-time memory, with very large loops.  Loops
+ with more basic blocks than this parameter won't have loop invariant
+ motion optimization performed on them.
+ 
+ @paindex loop-max-datarefs-for-datadeps
+ @item loop-max-datarefs-for-datadeps
+ Building data dependencies is expensive for very large loops.  This
+ parameter limits the number of data references in loops that are
+ considered for data dependence analysis.  These large loops are no
+ handled by the optimizations using loop data dependencies.
+ 
+ @paindex max-vartrack-size
+ @item max-vartrack-size
+ Sets a maximum number of hash table slots to use during variable
+ tracking dataflow analysis of any function.  If this limit is exceeded
+ with variable tracking at assignments enabled, analysis for that
+ function is retried without it, after removing all debug insns from
+ the function.  If the limit is exceeded even without debug insns, var
+ tracking analysis is completely disabled for the function.  Setting
+ the parameter to zero makes it unlimited.
+ 
+ @paindex max-vartrack-expr-depth
+ @item max-vartrack-expr-depth
+ Sets a maximum number of recursion levels when attempting to map
+ variable names or debug temporaries to value expressions.  This trades
+ compilation time for more complete debug information.  If this is set too
+ low, value expressions that are available and could be represented in
+ debug information may end up not being used; setting this higher may
+ enable the compiler to find more complex debug expressions, but compile
+ time and memory use may grow.
+ 
+ @paindex max-debug-marker-count
+ @item max-debug-marker-count
+ Sets a threshold on the number of debug markers (e.g.@: begin stmt
+ markers) to avoid complexity explosion at inlining or expanding to RTL.
+ If a function has more such gimple stmts than the set limit, such stmts
+ are dropped from the inlined copy of a function and from its RTL
+ expansion.
+ 
+ @paindex min-nondebug-insn-uid
+ @item min-nondebug-insn-uid
+ Use uids starting at this parameter for nondebug insns.  The range below
+ the parameter is reserved exclusively for debug insns created by
+ @option{-fvar-tracking-assignments}, but debug insns may get
+ (non-overlapping) uids above it if the reserved range is exhausted.
+ 
+ @paindex ipa-sra-deref-prob-threshold
+ @item ipa-sra-deref-prob-threshold
+ IPA-SRA replaces a pointer that is known not be NULL with one or more
+ new parameters only when the probability (as a percentage, relative to
+ function entry) of it being dereferenced is higher than this parameter.
+ 
+ @paindex ipa-sra-ptr-growth-factor
+ @item ipa-sra-ptr-growth-factor
+ IPA-SRA replaces a pointer to an aggregate with one or more new
+ parameters only when their cumulative size is less or equal to
+ @option{ipa-sra-ptr-growth-factor} times the size of the original
+ pointer parameter.
+ 
+ @paindex ipa-sra-ptrwrap-growth-factor
+ @item ipa-sra-ptrwrap-growth-factor
+ Additional maximum allowed growth of total size of new parameters
+ that ipa-sra replaces a pointer to an aggregate with,
+ if it points to a local variable that the caller only writes to and
+ passes it as an argument to other functions.
+ 
+ @paindex ipa-sra-max-replacements
+ @item ipa-sra-max-replacements
+ Maximum pieces of an aggregate that IPA-SRA tracks.  As a
+ consequence, it is also the maximum number of replacements of a formal
+ parameter.
+ 
+ @paindex sra-max-scalarization-size-Ospeed
+ @paindex sra-max-scalarization-size-Osize
+ @item sra-max-scalarization-size-Ospeed
+ @itemx sra-max-scalarization-size-Osize
+ The two Scalar Reduction of Aggregates passes (SRA and IPA-SRA) aim to
+ replace scalar parts of aggregates with uses of independent scalar
+ variables.  These parameters control the maximum size, in storage units,
+ of aggregates that are considered for replacement when compiling for
+ speed
+ (@option{sra-max-scalarization-size-Ospeed}) or size
+ (@option{sra-max-scalarization-size-Osize}) respectively.
+ 
+ @paindex sra-max-propagations
+ @item sra-max-propagations
+ The maximum number of artificial accesses that Scalar Replacement of
+ Aggregates (SRA) tracks, per one local variable, in order to
+ facilitate copy propagation.
+ 
+ @paindex tm-max-aggregate-size
+ @item tm-max-aggregate-size
+ When making copies of thread-local variables in a transaction, this
+ parameter specifies the size in bytes after which variables are
+ saved with the logging functions as opposed to save/restore code
+ sequence pairs.  This option only applies when using
+ @option{-fgnu-tm}.
+ 
+ @paindex graphite-max-nb-scop-params
+ @item graphite-max-nb-scop-params
+ To avoid exponential effects in the Graphite loop transforms, the
+ number of parameters in a Static Control Part (SCoP) is bounded.
+ A value of zero can be used to lift
+ the bound.  A variable whose value is unknown at compilation time and
+ defined outside a SCoP is a parameter of the SCoP.
+ 
+ @paindex hardcfr-max-blocks
+ @item hardcfr-max-blocks
+ Disable @option{-fharden-control-flow-redundancy} for functions with a
+ larger number of blocks than the specified value.  Zero removes any
+ limit.
+ 
+ @paindex hardcfr-max-inline-blocks
+ @item hardcfr-max-inline-blocks
+ Force @option{-fharden-control-flow-redundancy} to use out-of-line
+ checking for functions with a larger number of basic blocks than the
+ specified value.
+ 
+ @paindex loop-block-tile-size
+ @item loop-block-tile-size
+ Loop blocking or strip mining transforms, enabled with
+ @option{-floop-block} or @option{-floop-strip-mine}, strip mine each
+ loop in the loop nest by a given number of iterations.  The strip
+ length can be changed using the @option{loop-block-tile-size}
+ parameter.
+ 
+ @paindex ipa-jump-function-lookups
+ @item ipa-jump-function-lookups
+ Specifies number of statements visited during jump function offset discovery.
+ 
+ @paindex ipa-cp-value-list-size
+ @item ipa-cp-value-list-size
+ IPA-CP attempts to track all possible values and types passed to a function's
+ parameter in order to propagate them and perform devirtualization.
+ @option{ipa-cp-value-list-size} is the maximum number of values and types it
+ stores per one formal parameter of a function.
+ 
+ @paindex ipa-cp-eval-threshold
+ @item ipa-cp-eval-threshold
+ IPA-CP calculates its own score of cloning profitability heuristics
+ and performs those cloning opportunities with scores that exceed
+ @option{ipa-cp-eval-threshold}.
+ 
+ @paindex ipa-cp-max-recursive-depth
+ @item ipa-cp-max-recursive-depth
+ Maximum depth of recursive cloning for self-recursive function.
+ 
+ @paindex ipa-cp-min-recursive-probability
+ @item ipa-cp-min-recursive-probability
+ Recursive cloning only when the probability of call being executed exceeds
+ the parameter.
+ 
+ @paindex ipa-cp-recursive-freq-factor
+ @item ipa-cp-recursive-freq-factor
+ The number of times interprocedural copy propagation expects recursive
+ functions to call themselves.
+ 
+ @paindex ipa-cp-recursion-penalty
+ @item ipa-cp-recursion-penalty
+ Percentage penalty the recursive functions receive when they
+ are evaluated for cloning.
+ 
+ @paindex ipa-cp-single-call-penalty
+ @item ipa-cp-single-call-penalty
+ Percentage penalty functions containing a single call to another
+ function receive when they are evaluated for cloning.
+ 
+ @paindex ipa-cp-sweeps
+ @item ipa-cp-sweeps
+ The number of times the interprocedural constant propagation traverses
+ all functions to make cloning decisions.
+ 
+ @paindex ipa-max-agg-items
+ @item ipa-max-agg-items
+ IPA-CP is also capable of propagating a number of scalar values passed
+ in an aggregate. @option{ipa-max-agg-items} controls the maximum
+ number of such values per one parameter.
+ 
+ @paindex ipa-cp-loop-hint-bonus
+ @item ipa-cp-loop-hint-bonus
+ When IPA-CP determines that a cloning candidate would make the number
+ of iterations of a loop known, it adds a bonus of
+ @option{ipa-cp-loop-hint-bonus} to the profitability score of
+ the candidate.
+ 
+ @paindex ipa-max-loop-predicates
+ @item ipa-max-loop-predicates
+ The maximum number of different predicates IPA uses to describe when
+ loops in a function have known properties.
+ 
+ @paindex ipa-max-aa-steps
+ @item ipa-max-aa-steps
+ During its analysis of function bodies, IPA-CP employs alias analysis
+ in order to track values pointed to by function parameters.  In order
+ not spend too much time analyzing huge functions, it gives up and
+ consider all memory clobbered after examining
+ @option{ipa-max-aa-steps} statements modifying memory.
+ 
+ @paindex ipa-max-switch-predicate-bounds
+ @item ipa-max-switch-predicate-bounds
+ Maximal number of boundary endpoints of case ranges of a switch statement.
+ For switch exceeding this limit, IPA-CP does not construct a cloning cost
+ predicate, which is used to estimate cloning benefit, for the default case
+ of the switch statement.
+ 
+ @paindex ipa-max-param-expr-ops
+ @item ipa-max-param-expr-ops
+ IPA-CP analyzes conditional statements that reference some function
+ parameter to estimate benefit for cloning upon certain constant value.
+ But if number of operations in a parameter expression exceeds
+ @option{ipa-max-param-expr-ops}, the expression is treated as complicated,
+ and is not handled by IPA analysis.
+ 
+ @paindex lto-partitions
+ @item lto-partitions
+ Specify desired number of partitions produced during WHOPR compilation.
+ The number of partitions should exceed the number of CPUs used for compilation.
+ 
+ @paindex lto-min-partition
+ @item lto-min-partition
+ Minimum partition size for WHOPR (in estimated instructions).
+ This prevents expenses of splitting very small programs into too many
+ partitions.
+ 
+ @paindex lto-max-partition
+ @item lto-max-partition
+ Maximum partition size for WHOPR (in estimated instructions).
+ to provide an upper bound for individual size of partition.
+ Meant to be used only with balanced partitioning.
+ 
+ @paindex lto-partition-locality-frequency-cutoff
+ @item lto-partition-locality-frequency-cutoff
+ The denominator @var{n} of fraction 1/@var{n} of the execution frequency of
+ the callee to be cloned for a particular caller.
+ The special value of 0 dictates to always clone
+ without a cut-off.
+ 
+ @paindex lto-partition-locality-size-cutoff
+ @item lto-partition-locality-size-cutoff
+ Size cut-off for callee including inlined calls to be cloned for a particular
+ caller.
+ 
+ @paindex lto-max-locality-partition
+ @item lto-max-locality-partition
+ Maximal size of a locality partition for LTO (in estimated instructions).
+ Value of 0 results in default value being used.
+ 
+ @paindex lto-max-streaming-parallelism
+ @item lto-max-streaming-parallelism
+ Maximal number of parallel processes used for LTO streaming.
+ 
+ @paindex cxx-max-namespaces-for-diagnostic-help
+ @item cxx-max-namespaces-for-diagnostic-help
+ The maximum number of namespaces to consult for suggestions when C++
+ name lookup fails for an identifier.
+ 
+ @paindex sink-frequency-threshold
+ @item sink-frequency-threshold
+ The maximum relative execution frequency (as a percentage) of the target block
+ relative to a statement's original block to allow statement sinking of a
+ statement.  Larger numbers result in more aggressive statement sinking.
+ A small positive adjustment is applied for
+ statements with memory operands as those are even more profitable to sink.
+ 
+ @paindex max-stores-to-sink
+ @item max-stores-to-sink
+ The maximum number of conditional store pairs that can be sunk.  Set to 0
+ if either vectorization (@option{-ftree-vectorize}) or if-conversion
+ (@option{-ftree-loop-if-convert}) is disabled.
+ 
+ @paindex case-values-threshold
+ @item case-values-threshold
+ The smallest number of different values for which it is best to use a
+ jump table instead of a tree of conditional branches.  If the value is
+ 0, use the default for the machine.
+ 
+ @paindex jump-table-max-growth-ratio-for-size
+ @item jump-table-max-growth-ratio-for-size
+ The maximum code size growth ratio when expanding
+ into a jump table (as a percentage).  The parameter is used when
+ optimizing for size.
+ 
+ @paindex jump-table-max-growth-ratio-for-speed
+ @item jump-table-max-growth-ratio-for-speed
+ The maximum code size growth ratio when expanding
+ into a jump table (as a percentage).  The parameter is used when
+ optimizing for speed.
+ 
+ @paindex tree-reassoc-width
+ @item tree-reassoc-width
+ In the tree reassociation pass, set the maximum number of instructions
+ executed in parallel in the reassociated tree.
+ This parameter overrides target-dependent
+ heuristics used by default if it has a nonzero value.
+ 
+ @paindex sched-pressure-algorithm
+ @item sched-pressure-algorithm
+ Choose between the two available implementations of
+ @option{-fsched-pressure}.  Algorithm 1 is the original implementation
+ and is the more likely to prevent instructions from being reordered.
+ Algorithm 2 was designed to be a compromise between the relatively
+ conservative approach taken by algorithm 1 and the rather aggressive
+ approach taken by the default scheduler.  It relies more heavily on
+ having a regular register file and accurate register pressure classes.
+ See @file{haifa-sched.cc} in the GCC sources for more details.
+ 
+ The default choice depends on the target.
+ 
+ @paindex max-slsr-cand-scan
+ @item max-slsr-cand-scan
+ Set the maximum number of existing candidates that are considered when
+ seeking a basis for a new straight-line strength reduction candidate.
+ 
+ @paindex asan-globals
+ @item asan-globals
+ Enable buffer overflow detection for global objects.  This kind
+ of protection is enabled by default if you are using
+ @option{-fsanitize=address} option.
+ To disable global objects protection use @option{--param asan-globals=0}.
+ 
+ @paindex asan-stack
+ @item asan-stack
+ Enable buffer overflow detection for stack objects.  This kind of
+ protection is enabled by default when using @option{-fsanitize=address}.
+ To disable stack protection use @option{--param asan-stack=0} option.
+ 
+ @paindex asan-instrument-reads
+ @item asan-instrument-reads
+ Enable buffer overflow detection for memory reads.  This kind of
+ protection is enabled by default when using @option{-fsanitize=address}.
+ To disable memory reads protection use
+ @option{--param asan-instrument-reads=0}.
+ 
+ @paindex asan-instrument-writes
+ @item asan-instrument-writes
+ Enable buffer overflow detection for memory writes.  This kind of
+ protection is enabled by default when using @option{-fsanitize=address}.
+ To disable memory writes protection use
+ @option{--param asan-instrument-writes=0} option.
+ 
+ @paindex asan-memintrin
+ @item asan-memintrin
+ Enable detection for built-in functions.  This kind of protection
+ is enabled by default when using @option{-fsanitize=address}.
+ To disable built-in functions protection use
+ @option{--param asan-memintrin=0}.
+ 
+ @paindex asan-use-after-return
+ @item asan-use-after-return
+ Enable detection of use-after-return.  This kind of protection
+ is enabled by default when using the @option{-fsanitize=address} option.
+ To disable it use @option{--param asan-use-after-return=0}.
+ 
+ Note: By default the check is disabled at run time.  To enable it,
+ add @code{detect_stack_use_after_return=1} to the environment variable
+ @env{ASAN_OPTIONS}.
+ 
+ @paindex asan-instrumentation-with-call-threshold
+ @item asan-instrumentation-with-call-threshold
+ If number of memory accesses in function being instrumented
+ is greater or equal to this number, use callbacks instead of inline checks.
+ E.g. to disable inline code use
+ @option{--param asan-instrumentation-with-call-threshold=0}.
+ 
+ @paindex asan-kernel-mem-intrinsic-prefix
+ @item asan-kernel-mem-intrinsic-prefix
+ If nonzero, prefix calls to @code{memcpy}, @code{memset} and @code{memmove}
+ with @samp{__asan_} or @samp{__hwasan_}
+ for @option{-fsanitize=kernel-address} or @samp{-fsanitize=kernel-hwaddress},
+ respectively.
+ 
+ @paindex hwasan-instrument-stack
+ @item hwasan-instrument-stack
+ Enable hwasan instrumentation of statically-sized stack-allocated variables.
+ This kind of instrumentation is enabled by default when using
+ @option{-fsanitize=hwaddress} and disabled by default when using
+ @option{-fsanitize=kernel-hwaddress}.
+ To disable stack instrumentation use
+ @option{--param hwasan-instrument-stack=0}, and to enable it use
+ @option{--param hwasan-instrument-stack=1}.
+ 
+ @paindex hwasan-random-frame-tag
+ @item hwasan-random-frame-tag
+ When using stack instrumentation, decide tags for stack variables using a
+ deterministic sequence beginning at a random tag for each frame.  With this
+ parameter unset tags are chosen using the same sequence but beginning from 1.
+ This is enabled by default for @option{-fsanitize=hwaddress} and unavailable
+ for @option{-fsanitize=kernel-hwaddress} and @option{-fsanitize=memtag-stack}.
+ To disable it use @option{--param hwasan-random-frame-tag=0}.
+ 
+ @paindex hwasan-instrument-allocas
+ @item hwasan-instrument-allocas
+ Enable hwasan instrumentation of dynamically sized stack-allocated variables.
+ This kind of instrumentation is enabled by default when using
+ @option{-fsanitize=hwaddress} and disabled by default when using
+ @option{-fsanitize=kernel-hwaddress}.
+ To disable instrumentation of such variables use
+ @option{--param hwasan-instrument-allocas=0}, and to enable it use
+ @option{--param hwasan-instrument-allocas=1}.
+ 
+ @paindex hwasan-instrument-reads
+ @item hwasan-instrument-reads
+ Enable hwasan checks on memory reads.  Instrumentation of reads is enabled by
+ default for both @option{-fsanitize=hwaddress} and
+ @option{-fsanitize=kernel-hwaddress}.
+ To disable checking memory reads use
+ @option{--param hwasan-instrument-reads=0}.
+ 
+ @paindex hwasan-instrument-writes
+ @item hwasan-instrument-writes
+ Enable hwasan checks on memory writes.  Instrumentation of writes is enabled by
+ default for both @option{-fsanitize=hwaddress} and
+ @option{-fsanitize=kernel-hwaddress}.
+ To disable checking memory writes use
+ @option{--param hwasan-instrument-writes=0}.
+ 
+ @paindex hwasan-instrument-mem-intrinsics
+ @item hwasan-instrument-mem-intrinsics
+ Enable hwasan instrumentation of builtin functions.  Instrumentation of these
+ builtin functions is enabled by default for both @option{-fsanitize=hwaddress}
+ and @option{-fsanitize=kernel-hwaddress}.
+ To disable instrumentation of builtin functions use
+ @option{--param hwasan-instrument-mem-intrinsics=0}.
+ 
+ @paindex memtag-instrument-allocas
+ @item memtag-instrument-allocas
+ Enable hardware-assisted memory tagging of dynamically sized stack-allocated
+ variables.  This kind of code generation is enabled by default when using
+ @option{-fsanitize=memtag-stack}.
+ 
+ @paindex memtag-instrument-mem-intrinsics
+ @item memtag-instrument-mem-intrinsics
+ When sanitizing using MTE instructions, include builtin functions.
+ 
+ @paindex use-after-scope-direct-emission-threshold
+ @item use-after-scope-direct-emission-threshold
+ If the size of a local variable in bytes is smaller or equal to this
+ number, directly poison (or unpoison) shadow memory instead of using
+ run-time callbacks.
+ 
+ @paindex tsan-distinguish-volatile
+ @item tsan-distinguish-volatile
+ Emit special instrumentation for accesses to volatiles.
+ 
+ @paindex tsan-instrument-func-entry-exit
+ @item tsan-instrument-func-entry-exit
+ Emit instrumentation calls to @code{__tsan_func_entry()} and
+ @code{ __tsan_func_exit()}.
+ 
+ @paindex max-fsm-thread-path-insns
+ @item max-fsm-thread-path-insns
+ Maximum number of instructions to copy when duplicating blocks on a
+ finite state automaton jump thread path.
+ 
+ @paindex threader-debug
+ @item threader-debug
+ Enables verbose dumping of the threader solver.  This parameter has two
+ special values, @samp{none} and @samp{all}.
+ 
+ @paindex parloops-chunk-size
+ @item parloops-chunk-size
+ Chunk size of OpenMP schedule for loops parallelized by parloops.
+ 
+ @paindex parloops-schedule
+ @item parloops-schedule
+ Schedule type of OpenMP schedule for loops parallelized by parloops (static,
+ dynamic, guided, auto, runtime).
+ 
+ @paindex parloops-min-per-thread
+ @item parloops-min-per-thread
+ The minimum number of iterations per thread of an innermost parallelized
+ loop for which the parallelized variant is preferred over the single threaded
+ one.  Note that for a parallelized loop nest the
+ minimum number of iterations of the outermost loop per thread is two.
+ 
+ @paindex max-ssa-name-query-depth
+ @item max-ssa-name-query-depth
+ Maximum depth of recursion when querying properties of SSA names in things
+ like fold routines.  One level of recursion corresponds to following a
+ use-def chain.
+ 
+ @paindex max-speculative-devirt-maydefs
+ @item max-speculative-devirt-maydefs
+ The maximum number of may-defs we analyze when looking for a must-def
+ specifying the dynamic type of an object that invokes a virtual call
+ we may be able to devirtualize speculatively.
+ 
+ @paindex ranger-debug
+ @item ranger-debug
+ Specifies the type of debug output to be issued for ranges.
+ 
+ @paindex unroll-jam-min-percent
+ @item unroll-jam-min-percent
+ The minimum percentage of memory references that must be optimized
+ away for the unroll-and-jam transformation to be considered profitable.
+ 
+ @paindex unroll-jam-max-unroll
+ @item unroll-jam-max-unroll
+ The maximum number of times the outer loop should be unrolled by
+ the unroll-and-jam transformation.
+ 
+ @paindex max-rtl-if-conversion-unpredictable-cost
+ @item max-rtl-if-conversion-unpredictable-cost
+ Maximum permissible cost for the sequence that would be generated
+ by the RTL if-conversion pass for a branch that is considered unpredictable.
+ 
+ @paindex max-variable-expansions-in-unroller
+ @item max-variable-expansions-in-unroller
+ If @option{-fvariable-expansion-in-unroller} is used, the maximum number
+ of times that an individual variable is expanded during loop unrolling.
+ 
+ @paindex partial-inlining-entry-probability
+ @item partial-inlining-entry-probability
+ Maximum probability of the entry BB of split region
+ (as a percentage relative to entry BB of the function)
+ to make partial inlining happen.
+ 
+ @paindex max-tracked-strlens
+ @item max-tracked-strlens
+ Maximum number of strings for which the strlen optimization pass
+ tracks string lengths.
+ 
+ @paindex gcse-after-reload-partial-fraction
+ @item gcse-after-reload-partial-fraction
+ The threshold ratio for performing partial redundancy
+ elimination after reload.
+ 
+ @paindex gcse-after-reload-critical-fraction
+ @item gcse-after-reload-critical-fraction
+ The threshold ratio of critical edges execution count that
+ permit performing redundancy elimination after reload.
+ 
+ @paindex max-loop-header-insns
+ @item max-loop-header-insns
+ The maximum number of insns allowed in a loop header duplicated
+ by the copy loop headers pass.
+ 
+ @paindex vect-epilogues-nomask
+ @item vect-epilogues-nomask
+ If nonzero, enable loop epilogue vectorization using smaller vector size.
+ 
+ @paindex vect-partial-vector-usage
+ @item vect-partial-vector-usage
+ Controls when the loop vectorizer considers using partial vector loads
+ and stores as an alternative to falling back to scalar code.  0 stops
+ the vectorizer from ever using partial vector loads and stores.  1 allows
+ partial vector loads and stores if vectorization removes the need for the
+ code to iterate.  2 allows partial vector loads and stores in all loops.
+ The parameter only has an effect on targets that support partial
+ vector loads and stores.
+ 
+ @paindex vect-inner-loop-cost-factor
+ @item vect-inner-loop-cost-factor
+ The maximum factor that the loop vectorizer applies to the cost of statements
+ in an inner loop relative to the loop being vectorized.  The factor applied
+ is the maximum of the estimated number of iterations of the inner loop and
+ this parameter.  The default value of this parameter is 50.
+ 
+ @paindex vect-induction-float
+ @item vect-induction-float
+ Enable loop vectorization of floating-point inductions.
+ 
+ @paindex vect-scalar-cost-multiplier
+ @item vect-scalar-cost-multiplier
+ Apply the given multiplier percentage to scalar loop costing during
+ vectorization.
+ Increasing the cost multiplier makes vector loops more profitable.
+ 
+ @paindex vrp-block-limit
+ @item vrp-block-limit
+ Maximum number of basic blocks before value range propagation
+ switches to a simpler algorithm that uses less memory.
+ 
+ @paindex vrp-cstload-limit
+ @item vrp-cstload-limit
+ Maximum number of steps when inferring a value range from a load from
+ a constant aggregate.
+ 
+ @paindex vrp-sparse-threshold
+ @item vrp-sparse-threshold
+ Maximum number of basic blocks before value range propagation
+ uses a sparse bitmap cache.
+ 
+ @paindex vrp-switch-limit
+ @item vrp-switch-limit
+ Maximum number of outgoing edges in a switch to allow it to be processed
+ by value range propagation.
+ 
+ @paindex vrp-vector-threshold
+ @item vrp-vector-threshold
+ Maximum number of basic blocks for value range propagation to
+ use a basic cache vector.
+ 
+ @paindex avoid-fma-max-bits
+ @item avoid-fma-max-bits
+ Maximum number of bits for which we avoid creating FMAs.
+ 
+ @paindex fully-pipelined-fma
+ @item fully-pipelined-fma
+ Whether the target fully pipelines FMA instructions.  If non-zero,
+ reassociation considers the benefit of parallelizing FMA's multiplication
+ part and addition part, assuming FMUL and FMA use the same units that can
+ also do FADD.
+ 
+ @paindex sms-loop-average-count-threshold
+ @item sms-loop-average-count-threshold
+ A threshold on the average loop count considered by the swing modulo scheduler.
+ 
+ @paindex sms-dfa-history
+ @item sms-dfa-history
+ The number of cycles the swing modulo scheduler considers when checking
+ conflicts using DFA.
+ 
+ @paindex graphite-allow-codegen-errors
+ @item graphite-allow-codegen-errors
+ Whether codegen errors should be ICEs when @option{-fchecking}.
+ 
+ @paindex sms-max-ii-factor
+ @item sms-max-ii-factor
+ A factor for tuning the upper bound that the swing modulo scheduler
+ uses for scheduling a loop.
+ 
+ @paindex lra-max-considered-reload-pseudos
+ @item lra-max-considered-reload-pseudos
+ The maximum number of reload pseudos that are considered during
+ spilling a non-reload pseudo.
+ 
+ @paindex lra-max-pseudos-points-log2-considered-for-preferences
+ @item lra-max-pseudos-points-log2-considered-for-preferences
+ The maximum @code{log2(number of reload pseudos * number of
+ program points)} threshold when preferences for other reload pseudos
+ are still considered. Taking these preferences into account helps to
+ improve register allocation. However, for very large functions, a
+ large value can result in significant compilation time and memory
+ consumption. The default value is 30.
+ 
+ @paindex max-pow-sqrt-depth
+ @item max-pow-sqrt-depth
+ Maximum depth of square root chains to use when synthesizing exponentiation
+ by a real constant.
+ 
+ @paindex max-dse-active-local-stores
+ @item max-dse-active-local-stores
+ Maximum number of active local stores in RTL dead store elimination.
+ 
+ @paindex asan-instrument-allocas
+ @item asan-instrument-allocas
+ Enable asan @code{alloca}/VLA protection.
+ 
+ @paindex max-iterations-computation-cost
+ @item max-iterations-computation-cost
+ Bound on the cost of an expression to compute the number of iterations
+ in the doloop optimizer.
+ 
+ @paindex max-isl-operations
+ @item max-isl-operations
+ Maximum number of isl operations, 0 means unlimited.
+ 
+ @paindex graphite-max-arrays-per-scop
+ @item graphite-max-arrays-per-scop
+ Maximum number of arrays per SCoP.
+ 
+ @paindex max-vartrack-reverse-op-size
+ @item max-vartrack-reverse-op-size
+ Maximum size of variable tracking loc list for which reverse ops should
+ be added.
+ 
+ @paindex fsm-scale-path-stmts
+ @item fsm-scale-path-stmts
+ Scale factor to apply to the number of statements in a threading path
+ crossing a loop back edge when comparing to
+ @option{--param=max-jump-thread-duplication-stmts}.
+ 
+ @paindex uninit-control-dep-attempts
+ @item uninit-control-dep-attempts
+ Maximum number of nested calls to search for control dependencies
+ during uninitialized variable analysis.
+ 
+ @paindex uninit-max-chain-len
+ @item uninit-max-chain-len
+ Maximum number of predicates and-ed for each predicate or-ed in the normalized
+ predicate chain.
+ 
+ @paindex uninit-max-num-chains
+ @item uninit-max-num-chains
+ Maximum number of predicates or-ed in the normalized predicate chain.
+ 
+ @paindex uninit-max-prune-work
+ @item uninit-max-prune-work
+ Maximum amount of work done to prune paths where the variable is always
+ initialized.
+ 
+ @paindex sched-autopref-queue-depth
+ @item sched-autopref-queue-depth
+ Hardware autoprefetcher scheduler model control flag.
+ Number of lookahead cycles the model looks into; a value of 0
+ only enables the instruction sorting heuristic.
+ 
+ @paindex loop-versioning-max-inner-insns
+ @item loop-versioning-max-inner-insns
+ The maximum number of instructions that an inner loop can have
+ before the loop versioning pass considers it too big to copy.
+ 
+ @paindex loop-versioning-max-outer-insns
+ @item loop-versioning-max-outer-insns
+ The maximum number of instructions that an outer loop can have
+ before the loop versioning pass considers it too big to copy,
+ discounting any instructions in inner loops that directly benefit
+ from versioning.
+ 
+ @paindex ssa-name-def-chain-limit
+ @item ssa-name-def-chain-limit
+ The maximum number of SSA_NAME assignments to follow in determining
+ a property of a variable such as its value.  This limits the number
+ of iterations or recursive calls GCC performs when optimizing certain
+ statements or when determining their validity prior to issuing
+ diagnostics.
+ 
+ @paindex store-merging-max-size
+ @item store-merging-max-size
+ Maximum size of a single store merging region in bytes.
+ 
+ @paindex store-forwarding-max-distance
+ @item store-forwarding-max-distance
+ Maximum number of instruction distance that a small store forwarded to a larger
+ load may stall.  A value of 0 disables the cost checks for the
+ avoid-store-forwarding pass.
+ 
+ @paindex hash-table-verification-limit
+ @item hash-table-verification-limit
+ The number of elements for which hash table verification is done
+ for each searched element.
+ 
+ @paindex max-find-base-term-values
+ @item max-find-base-term-values
+ Maximum number of VALUEs handled during a single @code{find_base_term} call.
+ 
+ @paindex analyzer-max-enodes-per-program-point
+ @item analyzer-max-enodes-per-program-point
+ The maximum number of exploded nodes per program point within
+ the analyzer, before terminating analysis of that point.
+ 
+ @paindex analyzer-max-constraints
+ @item analyzer-max-constraints
+ The maximum number of constraints per state.
+ 
+ @paindex analyzer-min-snodes-for-call-summary
+ @item analyzer-min-snodes-for-call-summary
+ The minimum number of supernodes within a function for the
+ analyzer to consider summarizing its effects at call sites.
+ 
+ @paindex analyzer-max-enodes-for-full-dump
+ @item analyzer-max-enodes-for-full-dump
+ The maximum depth of exploded nodes that should appear in a dot dump
+ before switching to a less verbose format.
+ 
+ @paindex analyzer-max-recursion-depth
+ @item analyzer-max-recursion-depth
+ The maximum number of times a callsite can appear in a call stack
+ within the analyzer, before terminating analysis of a call that would
+ recurse deeper.
+ 
+ @paindex analyzer-max-svalue-depth
+ @item analyzer-max-svalue-depth
+ The maximum depth of a symbolic value, before approximating
+ the value as unknown.
+ 
+ @paindex analyzer-max-infeasible-edges
+ @item analyzer-max-infeasible-edges
+ The maximum number of infeasible edges to reject before declaring
+ a diagnostic as infeasible.
+ 
+ @paindex gimple-fe-computed-hot-bb-threshold
+ @item gimple-fe-computed-hot-bb-threshold
+ The number of executions of a basic block that is considered hot.
+ The parameter is used only in GIMPLE FE.
+ 
+ @paindex analyzer-bb-explosion-factor
+ @item analyzer-bb-explosion-factor
+ The maximum number of ``after supernode'' exploded nodes within the analyzer
+ per supernode, before terminating analysis.
+ 
+ @paindex analyzer-text-art-string-ellipsis-threshold
+ @item analyzer-text-art-string-ellipsis-threshold
+ The number of bytes at which to ellipsize string literals in analyzer text
+ art diagrams.
+ 
+ @paindex analyzer-text-art-ideal-canvas-width
+ @item analyzer-text-art-ideal-canvas-width
+ The ideal width in characters of text art diagrams generated by the analyzer.
+ 
+ @paindex analyzer-text-art-string-ellipsis-head-len
+ @item analyzer-text-art-string-ellipsis-head-len
+ The number of literal bytes to show at the head of a string literal in text
+ art when ellipsizing it.
+ 
+ @paindex analyzer-text-art-string-ellipsis-tail-len
+ @item analyzer-text-art-string-ellipsis-tail-len
+ The number of literal bytes to show at the tail of a string literal in text
+ art when ellipsizing it.
+ 
+ @paindex ranger-logical-depth
+ @item ranger-logical-depth
+ Maximum depth of logical expression evaluation ranger looks through
+ when evaluating outgoing edge ranges.
+ 
+ @paindex ranger-recompute-depth
+ @item ranger-recompute-depth
+ Maximum depth of instruction chains to consider for recomputation
+ in the outgoing range calculator.
+ 
+ @paindex relation-block-limit
+ @item relation-block-limit
+ Maximum number of relations the dominator tree oracle registers in a
+ basic block during value range relational processing.
+ 
+ @paindex transitive-relations-work-bound
+ @item transitive-relations-work-bound
+ Work bound when discovering transitive relations from existing relations
+ in value range relational processing.
+ 
+ @paindex min-pagesize
+ @item min-pagesize
+ Minimum page size for warning and early break vectorization purposes.
+ 
+ @paindex openacc-kernels
+ @item openacc-kernels
+ Specify mode of OpenACC @code{kernels} constructs handling.
+ With @option{--param=openacc-kernels=decompose}, OpenACC @code{kernels}
+ constructs are decomposed into parts, a sequence of compute
+ constructs, each then handled individually.
+ This is work in progress.
+ With @option{--param=openacc-kernels=parloops}, OpenACC @code{kernels}
+ constructs are handled by the @samp{parloops} pass, en bloc.
+ This is the current default.
+ 
+ @paindex openacc-privatization
+ @item openacc-privatization
+ Control whether the @option{-fopt-info-omp-note} and applicable
+ @option{-fdump-tree-*-details} options emit OpenACC privatization diagnostics.
+ With @option{--param=openacc-privatization=quiet}, don't diagnose.
+ This is the current default.
+ With @option{--param=openacc-privatization=noisy}, do diagnose.
+ 
+ @paindex cycle-accurate-model
+ @item cycle-accurate-model
+ Specifies whether GCC should assume that the scheduling description is mostly
+ a cycle-accurate model of the target processor the code is intended to
+ run on, in the absence of cache misses.  Nonzero means that the selected
+ scheduling model is accurate and likely describes an in-order processor,
+ and that scheduling should aggressively spill to try and fill any pipeline
+ bubbles.  This is the current default.  Zero means the scheduling description
+ might not be available/accurate or perhaps not applicable at all, such as for
+ modern out-of-order processors.
+ 
+ @end table
+ 
+ @node Target-Specific Parameters
+ @section Target-Specific Parameters
+ @cindex target-specific parameters
+ 
+ Several back ends have their own parameters.
+ 
+ @menu
+ * AArch64 Parameters::
+ * AMD GCN Parameters::
+ * LoongArch Parameters::
+ * RISC-V Parameters::
+ * RS/6000 and PowerPC Parameters::
+ * x86 Parameters::
+ @end menu
+ 
+ @node AArch64 Parameters
+ @subsection AArch64 Parameters
+ @cindex AArch64 parameters
+ The following choices of @var{name} are available on AArch64 targets:
+ 
+ @table @gcctabopt
+ @paindex aarch64-vect-compare-costs
+ @item aarch64-vect-compare-costs
+ When vectorizing, consider using multiple different approaches and use
+ the cost model to choose the cheapest one.  This includes:
+ 
+ @itemize
+ @item
+ Trying both SVE and Advanced SIMD, when SVE is available.
+ 
+ @item
+ Trying to use 64-bit Advanced SIMD vectors for the smallest data elements,
+ rather than using 128-bit vectors for everything.
+ 
+ @item
+ Trying to use ``unpacked'' SVE vectors for smaller elements.  This includes
+ storing smaller elements in larger containers and accessing elements with
+ extending loads and truncating stores.
+ @end itemize
+ 
+ @paindex aarch64-float-recp-precision
+ @item aarch64-float-recp-precision
+ The number of Newton iterations for calculating the reciprocal for float type.
+ The precision of division is proportional to this parameter when division
+ approximation is enabled.  The default value is 1.
+ 
+ @paindex aarch64-double-recp-precision
+ @item aarch64-double-recp-precision
+ The number of Newton iterations for calculating the reciprocal for double type.
+ The precision of division is proportional to this parameter when division
+ approximation is enabled.  The default value is 2.
+ 
+ @paindex aarch64-autovec-preference
+ @item aarch64-autovec-preference
+ An old alias for @option{-mautovec-preference}.  If both
+ @option{-mautovec-preference} and @option{--param=aarch64-autovec-preference}
+ are passed, the @option{--param} value is used.
+ 
+ @paindex aarch64-ldp-policy
+ @item aarch64-ldp-policy
+ Fine-grained policy for load pair (@code{stp}) instructions.
+ With @option{--param=aarch64-ldp-policy=default}, use the policy of the
+ tuning structure.  This is the current default.
+ With @option{--param=aarch64-ldp-policy=always}, emit @code{ldp} regardless
+ of alignment.
+ With @option{--param=aarch64-ldp-policy=never}, do not emit @code{ldp}.
+ With @option{--param=aarch64-ldp-policy=aligned}, emit @code{ldp} only if the
+ source pointer is aligned to at least double the alignment of the type.
+ 
+ @paindex aarch64-stp-policy
+ @item aarch64-stp-policy
+ Fine-grained policy for store pair (@code{stp}) instructions.
+ With @option{--param=aarch64-stp-policy=default}, use the policy of the
+ tuning structure.  This is the current default.
+ With @option{--param=aarch64-stp-policy=always}, emit @code{stp} regardless
+ of alignment.
+ With @option{--param=aarch64-stp-policy=never}, do not emit @code{stp}.
+ With @option{--param=aarch64-stp-policy=aligned}, emit @code{stp} only if the
+ source pointer is aligned to at least double the alignment of the type.
+ 
+ @paindex aarch64-ldp-alias-check-limit
+ @item aarch64-ldp-alias-check-limit
+ Limit on the number of alias checks performed by the AArch64 load/store pair
+ fusion pass when attempting to form an @code{ldp}/@code{stp}.
+ Higher values make the pass
+ more aggressive at re-ordering loads over stores, at the expense of increased
+ compile time.
+ 
+ @paindex aarch64-ldp-writeback
+ @item aarch64-ldp-writeback
+ Parameter to control which writeback opportunities the AArch64
+ load/store pair fusion pass attempts to handle.
+ A value of zero disables writeback handling.  One
+ means we try to form pairs involving one or more existing individual writeback
+ accesses where possible.  A value of two means we also try to opportunistically
+ form writeback opportunities by folding in trailing destructive updates of the
+ base register used by a pair.
+ 
+ @paindex aarch64-loop-vect-issue-rate-niters
+ @item aarch64-loop-vect-issue-rate-niters
+ The tuning for some AArch64 CPUs tries to take both latencies and issue
+ rates into account when deciding whether a loop should be vectorized
+ using SVE, vectorized using Advanced SIMD, or not vectorized at all.
+ If this parameter is set to @var{n}, GCC does not use this heuristic
+ for loops that are known to execute in fewer than @var{n} Advanced
+ SIMD iterations.
+ 
+ @paindex aarch64-vect-unroll-limit
+ @item aarch64-vect-unroll-limit
+ The vectorizer uses available tuning information to determine whether it
+ would be beneficial to unroll the main vectorized loop and by how much.  This
+ parameter sets the upper bound of how much the vectorizer unrolls the main
+ loop.  The default value is four.
+ 
+ @paindex aarch64-tag-memory-loop-threshold
+ @item aarch64-tag-memory-loop-threshold
+ Parameter to control the treshold in number of granules beyond which an
+ explicit loop for tagging a memory block is emitted.  The memory block
+ is tagged using MTE instructions.
+ 
+ @end table
+ 
+ @node AMD GCN Parameters
+ @subsection AMD GCN Parameters
+ @cindex AMD GCN parameters
+ The following choices of @var{name} are available on GCN targets:
+ 
+ @table @gcctabopt
+ @paindex gcn-preferred-vectorization-factor
+ @item gcn-preferred-vectorization-factor
+ Preferred vectorization factor: @samp{default}, @samp{32}, @samp{64}.
+ 
+ @end table
+ 
+ @node LoongArch Parameters
+ @subsection LoongArch Parameters
+ @cindex LoongArch parameters
+ The following parameters are available on LoongArch targets:
+ 
+ @table @gcctabopt
+ @paindex loongarch-vect-unroll-limit
+ @item loongarch-vect-unroll-limit
+ The vectorizer uses available tuning information to determine whether it
+ would be beneficial to unroll the main vectorized loop and by how much.  This
+ parameter sets the upper bound of how much the vectorizer unrolls the main
+ loop.  The default value is six.
+ 
+ @end table
+ 
+ @node RISC-V Parameters
+ @subsection RISC-V Parameters
+ @cindex RISC-V parameters
+ The following parameters are available on RISC-V targets:
+ 
+ @table @gcctabopt
+ @paindex riscv-strcmp-inline-limit
+ @item riscv-strcmp-inline-limit
+ The maximum number of bytes compared by the inlined code for @code{strcmp}
+ and @code{strncmp} when enabled by the @option{-minline-strcmp} and
+ @option{-minline-strncmp} options, respectively.
+ The default value is 64.
+ @end table
+ 
+ @node RS/6000 and PowerPC Parameters
+ @subsection RS/6000 and PowerPC Parameters
+ @cindex RS/6000 and PowerPC parameters
+ The following parameters are available on RS/6000 and PowerPC targets:
+ 
+ @table @gcctabopt
+ @paindex rs6000-vect-unroll-limit
+ @item rs6000-vect-unroll-limit
+ The vectorizer checks with target information to determine whether it
+ would be beneficial to unroll the main vectorized loop and by how much.  This
+ parameter sets the upper bound of how much the vectorizer unrolls the main
+ loop.  The default value is four.
+ @end table
+ 
+ @node x86 Parameters
+ @subsection x86 Parameters
+ @cindex x86 parameters
+ The following choices of @var{name} are available on i386 and x86_64 targets:
+ 
+ @table @gcctabopt
+ @paindex x86-stlf-window-ninsns
+ @item x86-stlf-window-ninsns
+ Number of instructions above which STFL stall penalty can be compensated.
+ 
+ @paindex x86-stv-max-visits
+ @item x86-stv-max-visits
+ The maximum number of use and def visits when discovering a STV chain before
+ the discovery is aborted.
+ 
+ @paindex ix86-vect-unroll-limit
+ @item ix86-vect-unroll-limit
+ Limit how much the autovectorizer may unroll a loop.
+ 
+ @paindex ix86-vect-compare-costs
+ @item ix86-vect-compare-costs
+ Whether x86 vectorizer cost modeling compares costs of different vector sizes.
+ 
+ @end table
diff -Nrcpad gcc-16-20260201/gcc/dumpfile.cc gcc-16-20260208/gcc/dumpfile.cc
*** gcc-16-20260201/gcc/dumpfile.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/dumpfile.cc	Sun Feb  8 22:32:07 2026
*************** dump_enable_all (dump_kind dkind, dump_f
*** 1733,1739 ****
                dump_files[i].pstate = 1;
              }
            if (old_filename && filename != old_filename)
!             free (CONST_CAST (char *, old_filename));
          }
      }
  
--- 1733,1739 ----
                dump_files[i].pstate = 1;
              }
            if (old_filename && filename != old_filename)
! 	    free (const_cast<char *> (old_filename));
          }
      }
  
*************** dump_enable_all (dump_kind dkind, dump_f
*** 1754,1760 ****
                m_extra_dump_files[i].pstate = 1;
              }
            if (old_filename && filename != old_filename)
!             free (CONST_CAST (char *, old_filename));
          }
      }
  
--- 1754,1760 ----
                m_extra_dump_files[i].pstate = 1;
              }
            if (old_filename && filename != old_filename)
! 	    free (const_cast<char *> (old_filename));
          }
      }
  
*************** gcc::dump_manager::update_dfi_for_opt_in
*** 1807,1813 ****
    if (m_optinfo_filename)
      dfi->alt_filename = xstrdup (m_optinfo_filename);
    if (old_filename && m_optinfo_filename != old_filename)
!     free (CONST_CAST (char *, old_filename));
  
    return true;
  }
--- 1807,1813 ----
    if (m_optinfo_filename)
      dfi->alt_filename = xstrdup (m_optinfo_filename);
    if (old_filename && m_optinfo_filename != old_filename)
!     free (const_cast<char *> (old_filename));
  
    return true;
  }
*************** dump_switch_p_1 (const char *arg, struct
*** 1904,1910 ****
    if (filename)
      {
        if (dfi->pfilename)
!   free (CONST_CAST (char *, dfi->pfilename));
        dfi->pfilename = xstrdup (filename);
      }
  
--- 1904,1910 ----
    if (filename)
      {
        if (dfi->pfilename)
! 	free (const_cast<char *> (dfi->pfilename));
        dfi->pfilename = xstrdup (filename);
      }
  
diff -Nrcpad gcc-16-20260201/gcc/expr.cc gcc-16-20260208/gcc/expr.cc
*** gcc-16-20260201/gcc/expr.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/expr.cc	Sun Feb  8 22:32:07 2026
*************** mem_ref_refers_to_non_mem_p (tree ref)
*** 5969,5974 ****
--- 5969,5986 ----
    return non_mem_decl_p (base);
  }
  
+ /* Helper function of expand_assignment.  Check if storing field of
+    size BITSIZE at position BITPOS overlaps with the most significant
+    bit of TO_RTX, known to be SUBREG_PROMOTED_VAR_P.
+    Updating this field requires an explicit extension.  */
+ static bool
+ store_field_updates_msb_p (poly_int64 bitpos, poly_int64 bitsize, rtx to_rtx)
+ {
+   poly_int64 to_size = GET_MODE_SIZE (GET_MODE (to_rtx));
+   poly_int64 bitnum = BYTES_BIG_ENDIAN ? to_size - bitsize - bitpos : bitpos;
+   return maybe_eq (bitnum + bitsize, to_size);
+ }
+ 
  /* Expand an assignment that stores the value of FROM into TO.  If NONTEMPORAL
     is true, try generating a nontemporal store.  */
  
*************** expand_assignment (tree to, tree from, b
*** 6315,6322 ****
  		  && known_eq (bitsize, GET_MODE_BITSIZE (GET_MODE (to_rtx))))
  		result = store_expr (from, to_rtx, 0, nontemporal, false);
  	      /* Check if the field overlaps the MSB, requiring extension.  */
! 	      else if (maybe_eq (bitpos + bitsize,
! 				 GET_MODE_BITSIZE (GET_MODE (to_rtx))))
  		{
  		  scalar_int_mode imode = subreg_unpromoted_mode (to_rtx);
  		  scalar_int_mode omode = subreg_promoted_mode (to_rtx);
--- 6327,6333 ----
  		  && known_eq (bitsize, GET_MODE_BITSIZE (GET_MODE (to_rtx))))
  		result = store_expr (from, to_rtx, 0, nontemporal, false);
  	      /* Check if the field overlaps the MSB, requiring extension.  */
! 	      else if (store_field_updates_msb_p (bitpos, bitsize, to_rtx))
  		{
  		  scalar_int_mode imode = subreg_unpromoted_mode (to_rtx);
  		  scalar_int_mode omode = subreg_promoted_mode (to_rtx);
diff -Nrcpad gcc-16-20260201/gcc/fold-const-call.cc gcc-16-20260208/gcc/fold-const-call.cc
*** gcc-16-20260201/gcc/fold-const-call.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/fold-const-call.cc	Sun Feb  8 22:32:07 2026
*************** static bool
*** 495,521 ****
  fold_const_pow (real_value *result, const real_value *arg0,
  		const real_value *arg1, const real_format *format)
  {
!   if (do_mpfr_arg2 (result, mpfr_pow, arg0, arg1, format))
!     return true;
  
!   /* Check for an integer exponent.  */
!   REAL_VALUE_TYPE cint1;
!   HOST_WIDE_INT n1 = real_to_integer (arg1);
!   real_from_integer (&cint1, VOIDmode, n1, SIGNED);
!   /* Attempt to evaluate pow at compile-time, unless this should
!      raise an exception.  */
!   if (real_identical (arg1, &cint1)
!       && (n1 > 0
! 	  || (!flag_trapping_math && !flag_errno_math)
! 	  || !real_equal (arg0, &dconst0)))
      {
!       bool inexact = real_powi (result, format, arg0, n1);
!       /* Avoid the folding if flag_signaling_nans is on.  */
!       if (flag_unsafe_math_optimizations
! 	  || (!inexact
! 	      && !(flag_signaling_nans
! 	           && REAL_VALUE_ISSIGNALING_NAN (*arg0))))
! 	return true;
      }
  
    return false;
--- 495,519 ----
  fold_const_pow (real_value *result, const real_value *arg0,
  		const real_value *arg1, const real_format *format)
  {
!   if (flag_signaling_nans
!       && (REAL_VALUE_ISSIGNALING_NAN (*arg0)
! 	  || REAL_VALUE_ISSIGNALING_NAN (*arg1)))
!     return false;
  
!   if (do_mpfr_arg2 (result, mpfr_pow, arg0, arg1, format))
      {
!       if (flag_errno_math)
! 	switch (result->cl)
! 	  {
! 	  case rvc_inf:
! 	  case rvc_nan:
! 	    return false;
! 	  case rvc_zero:
! 	    return arg0->cl == rvc_zero;
! 	  default:
! 	    break;
! 	  }
!       return true;
      }
  
    return false;
diff -Nrcpad gcc-16-20260201/gcc/fold-const.cc gcc-16-20260208/gcc/fold-const.cc
*** gcc-16-20260201/gcc/fold-const.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/fold-const.cc	Sun Feb  8 22:32:07 2026
*************** operand_compare::operand_equal_p (tree t
*** 3659,3671 ****
  		  && (TREE_TYPE (TREE_OPERAND (arg0, 0))
  		      == TREE_TYPE (TREE_OPERAND (arg1, 0))
  		      || (operand_equal_p (array_ref_low_bound
! 					     (CONST_CAST_TREE (arg0)),
  					   array_ref_low_bound
! 					     (CONST_CAST_TREE (arg1)), flags)
  			  && operand_equal_p (array_ref_element_size
! 					        (CONST_CAST_TREE (arg0)),
  					      array_ref_element_size
! 					        (CONST_CAST_TREE (arg1)),
  					      flags))));
  
  	case COMPONENT_REF:
--- 3659,3672 ----
  		  && (TREE_TYPE (TREE_OPERAND (arg0, 0))
  		      == TREE_TYPE (TREE_OPERAND (arg1, 0))
  		      || (operand_equal_p (array_ref_low_bound
! 					     (const_cast<tree> (arg0)),
  					   array_ref_low_bound
! 					     (const_cast<tree> (arg1)),
! 					   flags)
  			  && operand_equal_p (array_ref_element_size
! 						(const_cast<tree> (arg0)),
  					      array_ref_element_size
! 						(const_cast<tree> (arg1)),
  					      flags))));
  
  	case COMPONENT_REF:
*************** operand_compare::operand_equal_p (tree t
*** 3951,3958 ****
  	{
  	  /* Compare the STATEMENT_LISTs.  */
  	  tree_stmt_iterator tsi1, tsi2;
! 	  tree body1 = CONST_CAST_TREE (arg0);
! 	  tree body2 = CONST_CAST_TREE (arg1);
  	  for (tsi1 = tsi_start (body1), tsi2 = tsi_start (body2); ;
  	       tsi_next (&tsi1), tsi_next (&tsi2))
  	    {
--- 3952,3959 ----
  	{
  	  /* Compare the STATEMENT_LISTs.  */
  	  tree_stmt_iterator tsi1, tsi2;
! 	  tree body1 = const_cast<tree> (arg0);
! 	  tree body2 = const_cast<tree> (arg1);
  	  for (tsi1 = tsi_start (body1), tsi2 = tsi_start (body2); ;
  	       tsi_next (&tsi1), tsi_next (&tsi2))
  	    {
*************** operand_compare::hash_operand (const_tre
*** 4109,4115 ****
      case STATEMENT_LIST:
        {
  	tree_stmt_iterator i;
! 	for (i = tsi_start (CONST_CAST_TREE (t));
  	     !tsi_end_p (i); tsi_next (&i))
  	  hash_operand (tsi_stmt (i), hstate, flags);
  	return;
--- 4110,4116 ----
      case STATEMENT_LIST:
        {
  	tree_stmt_iterator i;
! 	for (i = tsi_start (const_cast<tree> (t));
  	     !tsi_end_p (i); tsi_next (&i))
  	  hash_operand (tsi_stmt (i), hstate, flags);
  	return;
diff -Nrcpad gcc-16-20260201/gcc/fortran/ChangeLog gcc-16-20260208/gcc/fortran/ChangeLog
*** gcc-16-20260201/gcc/fortran/ChangeLog	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/fortran/ChangeLog	Sun Feb  8 22:32:07 2026
***************
*** 1,3 ****
--- 1,34 ----
+ 2026-02-06  Torbjörn SVENSSON  <torbjorn.svensson@foss.st.com>
+ 
+ 	PR middle-end/123892
+ 	* gfortran.h: Replace CONST_CAST with const_cast<>.
+ 	* module.cc: Likewise.
+ 	* openmp.cc: Likewise.
+ 	* options.cc: Likewise.
+ 	* parse.cc: Likewise.
+ 	* scanner.cc: Likewise.
+ 	* st.cc: Likewise.
+ 	* trans-intrinsic.cc: Likewise.
+ 
+ 2026-02-04  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/123941
+ 	* intrinsic.texi: SPLIT is a subroutine, not a function.
+ 	Improve documentation of its arguments.
+ 
+ 2026-02-03  Kirill Chilikin  <chilikin.k@gmail.com>
+ 
+ 	PR fortran/117303
+ 	* trans-intrinsic.cc (conv_isocbinding_function):
+ 	Assign the reference returned by C_FUNLOC to a variable.
+ 
+ 2026-02-03  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/123952
+ 	* symbol.cc (gfc_copy_dummy_sym): Ensure that external, array
+ 	valued destination symbols have the correct interface so that
+ 	conflicts do not arise when adding attributes.
+ 
  2026-01-31  Paul Thomas  <pault@gcc.gnu.org>
  
  	* array.cc (resolve_array_list): Use macro IS_PDT.
diff -Nrcpad gcc-16-20260201/gcc/fortran/check.cc gcc-16-20260208/gcc/fortran/check.cc
*** gcc-16-20260201/gcc/fortran/check.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/fortran/check.cc	Sun Feb  8 22:32:07 2026
*************** array_check (gfc_expr *e, int n)
*** 832,837 ****
--- 832,840 ----
    if (e->rank != 0 && e->ts.type != BT_PROCEDURE)
      return true;
  
+   if (gfc_is_class_array_function (e))
+     return true;
+ 
    gfc_error ("%qs argument of %qs intrinsic at %L must be an array",
  	     gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
  	     &e->where);
diff -Nrcpad gcc-16-20260201/gcc/fortran/class.cc gcc-16-20260208/gcc/fortran/class.cc
*** gcc-16-20260201/gcc/fortran/class.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/fortran/class.cc	Sun Feb  8 22:32:07 2026
*************** gfc_add_class_array_ref (gfc_expr *e)
*** 273,279 ****
    for (ref = e->ref; ref; ref = ref->next)
      if (!ref->next)
        break;
!   if (ref->type != REF_ARRAY)
      {
        ref->next = gfc_get_ref ();
        ref = ref->next;
--- 273,279 ----
    for (ref = e->ref; ref; ref = ref->next)
      if (!ref->next)
        break;
!   if (ref && ref->type != REF_ARRAY)
      {
        ref->next = gfc_get_ref ();
        ref = ref->next;
diff -Nrcpad gcc-16-20260201/gcc/fortran/decl.cc gcc-16-20260208/gcc/fortran/decl.cc
*** gcc-16-20260201/gcc/fortran/decl.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/fortran/decl.cc	Sun Feb  8 22:32:07 2026
*************** gfc_get_pdt_instance (gfc_actual_arglist
*** 4302,4307 ****
--- 4302,4313 ----
  	  c2->ts.u.derived->refs++;
  	  gfc_set_sym_referenced (c2->ts.u.derived);
  
+ 	  /* If the component is allocatable or the parent has allocatable
+ 	     components, make sure that the new instance also is marked as
+ 	     having allocatable components.  */
+ 	  if (c2->attr.allocatable || c2->ts.u.derived->attr.alloc_comp)
+ 	    instance->attr.alloc_comp = 1;
+ 
  	  /* Set extension level.  */
  	  if (c2->ts.u.derived->attr.extension == 255)
  	    {
*************** gfc_match_volatile (void)
*** 10399,10405 ****
        switch (m)
  	{
  	case MATCH_YES:
! 	  name = XCNEWVAR (char, strlen (sym->name) + 1);
  	  strcpy (name, sym->name);
  	  if (!check_function_name (name))
  	    return MATCH_ERROR;
--- 10405,10411 ----
        switch (m)
  	{
  	case MATCH_YES:
! 	  name = XALLOCAVAR (char, strlen (sym->name) + 1);
  	  strcpy (name, sym->name);
  	  if (!check_function_name (name))
  	    return MATCH_ERROR;
*************** gfc_match_asynchronous (void)
*** 10463,10469 ****
        switch (m)
  	{
  	case MATCH_YES:
! 	  name = XCNEWVAR (char, strlen (sym->name) + 1);
  	  strcpy (name, sym->name);
  	  if (!check_function_name (name))
  	    return MATCH_ERROR;
--- 10469,10475 ----
        switch (m)
  	{
  	case MATCH_YES:
! 	  name = XALLOCAVAR (char, strlen (sym->name) + 1);
  	  strcpy (name, sym->name);
  	  if (!check_function_name (name))
  	    return MATCH_ERROR;
diff -Nrcpad gcc-16-20260201/gcc/fortran/dump-parse-tree.cc gcc-16-20260208/gcc/fortran/dump-parse-tree.cc
*** gcc-16-20260201/gcc/fortran/dump-parse-tree.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/fortran/dump-parse-tree.cc	Sun Feb  8 22:32:07 2026
*************** show_expr (gfc_expr *p)
*** 545,550 ****
--- 545,558 ----
  
      case EXPR_ARRAY:
        fputs ("(/ ", dumpfile);
+       if (p->ts.type == BT_CHARACTER
+ 	  && p->ts.u.cl
+ 	  && p->ts.u.cl->length_from_typespec
+ 	  && p->ts.u.cl->length)
+ 	{
+ 	  show_typespec (&p->ts);
+ 	  fputs (" :: ", dumpfile);
+ 	}
        show_constructor (p->value.constructor);
        fputs (" /)", dumpfile);
  
diff -Nrcpad gcc-16-20260201/gcc/fortran/gfortran.h gcc-16-20260208/gcc/fortran/gfortran.h
*** gcc-16-20260201/gcc/fortran/gfortran.h	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/fortran/gfortran.h	Sun Feb  8 22:32:07 2026
*************** vec_push (char **&optr, size_t &osz, con
*** 3571,3577 ****
    /* {auto,}vec.safe_push () replacement.  Don't ask..  */
    // if (strlen (elt) < 4) return; premature optimization: eliminated by cutoff
    optr = XRESIZEVEC (char *, optr, osz + 2);
!   optr[osz] = CONST_CAST (char *, elt);
    optr[++osz] = NULL;
  }
  
--- 3571,3582 ----
    /* {auto,}vec.safe_push () replacement.  Don't ask..  */
    // if (strlen (elt) < 4) return; premature optimization: eliminated by cutoff
    optr = XRESIZEVEC (char *, optr, osz + 2);
!   optr[osz] =
! #ifdef __cplusplus
!     const_cast<char *> (elt);
! #else
!     (__extension__ (union {const char *_q; const char *_nq;})(elt))._nq;
! #endif
    optr[++osz] = NULL;
  }
  
diff -Nrcpad gcc-16-20260201/gcc/fortran/intrinsic.texi gcc-16-20260208/gcc/fortran/intrinsic.texi
*** gcc-16-20260201/gcc/fortran/intrinsic.texi	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/fortran/intrinsic.texi	Sun Feb  8 22:32:07 2026
*************** Fortran 90 and later
*** 14215,14221 ****
  
  @table @asis
  @item @emph{Synopsis}:
! @code{RESULT = SPLIT(STRING, SET, POS [, BACK])}
  
  @item @emph{Description}:
  Updates the integer @var{POS} to the position of the next (or previous)
--- 14215,14221 ----
  
  @table @asis
  @item @emph{Synopsis}:
! @code{CALL SPLIT(STRING, SET, POS [, BACK])}
  
  @item @emph{Description}:
  Updates the integer @var{POS} to the position of the next (or previous)
*************** Subroutine
*** 14240,14249 ****
  
  @item @emph{Arguments}:
  @multitable @columnfractions .15 .70
! @item @var{STRING} @tab Shall be of type @code{CHARACTER}.
! @item @var{SET}    @tab Shall be of type @code{CHARACTER}.
! @item @var{POS}    @tab Shall be of type @code{INTEGER}.
! @item @var{BACK}   @tab (Optional) Shall be of type @code{LOGICAL}.
  @end multitable
  
  @item @emph{Example}:
--- 14240,14249 ----
  
  @item @emph{Arguments}:
  @multitable @columnfractions .15 .70
! @item @var{STRING} @tab Shall be a scalar of type @code{CHARACTER}.
! @item @var{SET}    @tab Shall be a scalar of type @code{CHARACTER}.
! @item @var{POS}    @tab Shall be a scalar of type @code{INTEGER}.
! @item @var{BACK}   @tab (Optional) Shall be a scalar of type @code{LOGICAL}.
  @end multitable
  
  @item @emph{Example}:
diff -Nrcpad gcc-16-20260201/gcc/fortran/module.cc gcc-16-20260208/gcc/fortran/module.cc
*** gcc-16-20260201/gcc/fortran/module.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/fortran/module.cc	Sun Feb  8 22:32:07 2026
*************** mio_expr (gfc_expr **ep)
*** 3936,3945 ****
        break;
  
      case EXPR_SUBSTRING:
!       e->value.character.string
! 	= CONST_CAST (gfc_char_t *,
! 		      mio_allocated_wide_string (e->value.character.string,
! 						 e->value.character.length));
        mio_ref_list (&e->ref);
        break;
  
--- 3936,3944 ----
        break;
  
      case EXPR_SUBSTRING:
!       e->value.character.string = const_cast<gfc_char_t *>
! 	(mio_allocated_wide_string (e->value.character.string,
! 				    e->value.character.length));
        mio_ref_list (&e->ref);
        break;
  
*************** mio_expr (gfc_expr **ep)
*** 3976,3985 ****
  	  hwi = e->value.character.length;
  	  mio_hwi (&hwi);
  	  e->value.character.length = hwi;
! 	  e->value.character.string
! 	    = CONST_CAST (gfc_char_t *,
! 			  mio_allocated_wide_string (e->value.character.string,
! 						     e->value.character.length));
  	  break;
  
  	default:
--- 3975,3983 ----
  	  hwi = e->value.character.length;
  	  mio_hwi (&hwi);
  	  e->value.character.length = hwi;
! 	  e->value.character.string = const_cast<gfc_char_t *>
! 	    (mio_allocated_wide_string (e->value.character.string,
! 					e->value.character.length));
  	  break;
  
  	default:
diff -Nrcpad gcc-16-20260201/gcc/fortran/openmp.cc gcc-16-20260208/gcc/fortran/openmp.cc
*** gcc-16-20260201/gcc/fortran/openmp.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/fortran/openmp.cc	Sun Feb  8 22:32:07 2026
*************** gfc_free_omp_clauses (gfc_omp_clauses *c
*** 223,229 ****
    gfc_free_expr_list (c->wait_list);
    gfc_free_expr_list (c->tile_list);
    gfc_free_expr_list (c->sizes_list);
!   free (CONST_CAST (char *, c->critical_name));
    if (c->assume)
      {
        free (c->assume->absent);
--- 223,229 ----
    gfc_free_expr_list (c->wait_list);
    gfc_free_expr_list (c->tile_list);
    gfc_free_expr_list (c->sizes_list);
!   free (const_cast<char *> (c->critical_name));
    if (c->assume)
      {
        free (c->assume->absent);
diff -Nrcpad gcc-16-20260201/gcc/fortran/options.cc gcc-16-20260208/gcc/fortran/options.cc
*** gcc-16-20260201/gcc/fortran/options.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/fortran/options.cc	Sun Feb  8 22:32:07 2026
*************** gfc_post_options (const char **pfilename
*** 370,376 ****
      gfc_add_include_path (".", true, true, false, false);
  
    if (canon_source_file != gfc_source_file)
!     free (CONST_CAST (char *, canon_source_file));
  
    /* Decide which form the file will be read in as.  */
  
--- 370,376 ----
      gfc_add_include_path (".", true, true, false, false);
  
    if (canon_source_file != gfc_source_file)
!     free (const_cast<char *> (canon_source_file));
  
    /* Decide which form the file will be read in as.  */
  
diff -Nrcpad gcc-16-20260201/gcc/fortran/parse.cc gcc-16-20260208/gcc/fortran/parse.cc
*** gcc-16-20260201/gcc/fortran/parse.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/fortran/parse.cc	Sun Feb  8 22:32:07 2026
*************** parse_omp_structured_block (gfc_statemen
*** 6435,6441 ****
  			 new_st.ext.omp_name) != 0))
  	gfc_error ("Name after !$omp critical and !$omp end critical does "
  		   "not match at %C");
!       free (CONST_CAST (char *, new_st.ext.omp_name));
        new_st.ext.omp_name = NULL;
        break;
      case EXEC_OMP_END_SINGLE:
--- 6435,6441 ----
  			 new_st.ext.omp_name) != 0))
  	gfc_error ("Name after !$omp critical and !$omp end critical does "
  		   "not match at %C");
!       free (const_cast<char *> (new_st.ext.omp_name));
        new_st.ext.omp_name = NULL;
        break;
      case EXEC_OMP_END_SINGLE:
diff -Nrcpad gcc-16-20260201/gcc/fortran/scanner.cc gcc-16-20260208/gcc/fortran/scanner.cc
*** gcc-16-20260201/gcc/fortran/scanner.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/fortran/scanner.cc	Sun Feb  8 22:32:07 2026
*************** wide_strchr (const gfc_char_t *s, gfc_ch
*** 173,181 ****
  {
    do {
      if (*s == c)
!       {
!         return CONST_CAST(gfc_char_t *, s);
!       }
    } while (*s++);
    return 0;
  }
--- 173,179 ----
  {
    do {
      if (*s == c)
!       return const_cast<gfc_char_t *> (s);
    } while (*s++);
    return 0;
  }
diff -Nrcpad gcc-16-20260201/gcc/fortran/simplify.cc gcc-16-20260208/gcc/fortran/simplify.cc
*** gcc-16-20260201/gcc/fortran/simplify.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/fortran/simplify.cc	Sun Feb  8 22:32:07 2026
*************** gfc_simplify_len (gfc_expr *e, gfc_expr
*** 5083,5088 ****
--- 5083,5103 ----
  	    }
  	}
      }
+   else if (e->expr_type == EXPR_ARRAY && e->ts.type == BT_CHARACTER
+ 	   && e->ts.u.cl
+ 	   && e->ts.u.cl->length_from_typespec
+ 	   && e->ts.u.cl->length
+ 	   && e->ts.u.cl->length->ts.type == BT_INTEGER)
+     {
+       gfc_typespec ts;
+       gfc_clear_ts (&ts);
+       ts.type = BT_INTEGER;
+       ts.kind = k;
+       result = gfc_copy_expr (e->ts.u.cl->length);
+       gfc_convert_type_warn (result, &ts, 2, 0);
+       return result;
+     }
+ 
    return NULL;
  }
  
diff -Nrcpad gcc-16-20260201/gcc/fortran/st.cc gcc-16-20260208/gcc/fortran/st.cc
*** gcc-16-20260201/gcc/fortran/st.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/fortran/st.cc	Sun Feb  8 22:32:07 2026
*************** gfc_free_statement (gfc_code *p)
*** 295,301 ****
        break;
  
      case EXEC_OMP_END_CRITICAL:
!       free (CONST_CAST (char *, p->ext.omp_name));
        break;
  
      case EXEC_OMP_FLUSH:
--- 295,301 ----
        break;
  
      case EXEC_OMP_END_CRITICAL:
!       free (const_cast<char *> (p->ext.omp_name));
        break;
  
      case EXEC_OMP_FLUSH:
diff -Nrcpad gcc-16-20260201/gcc/fortran/symbol.cc gcc-16-20260208/gcc/fortran/symbol.cc
*** gcc-16-20260201/gcc/fortran/symbol.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/fortran/symbol.cc	Sun Feb  8 22:32:07 2026
*************** gfc_copy_dummy_sym (gfc_symbol **dsym, g
*** 2284,2289 ****
--- 2284,2293 ----
    if (!gfc_add_type (*dsym, &(sym->ts), &gfc_current_locus))
      return 1;
  
+   if (sym->attr.external
+       && (sym->attr.codimension || sym->attr.dimension))
+     (*dsym)->attr.if_source = IFSRC_DECL;
+ 
    if (!gfc_copy_attr (&(*dsym)->attr, &(sym->attr),
        &gfc_current_locus))
      return 1;
diff -Nrcpad gcc-16-20260201/gcc/fortran/trans-decl.cc gcc-16-20260208/gcc/fortran/trans-decl.cc
*** gcc-16-20260201/gcc/fortran/trans-decl.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/fortran/trans-decl.cc	Sun Feb  8 22:32:07 2026
*************** gfc_generate_function_code (gfc_namespac
*** 8299,8305 ****
  		  gfc_free_expr (init_exp);
  		  gfc_add_expr_to_block (&init, tmp);
  		}
! 	      else if (rsym->ts.u.derived->attr.alloc_comp)
  		{
  		  rank = rsym->as ? rsym->as->rank : 0;
  		  tmp = gfc_nullify_alloc_comp (rsym->ts.u.derived, result,
--- 8299,8306 ----
  		  gfc_free_expr (init_exp);
  		  gfc_add_expr_to_block (&init, tmp);
  		}
! 
! 	      if (rsym->ts.u.derived->attr.alloc_comp)
  		{
  		  rank = rsym->as ? rsym->as->rank : 0;
  		  tmp = gfc_nullify_alloc_comp (rsym->ts.u.derived, result,
diff -Nrcpad gcc-16-20260201/gcc/fortran/trans-expr.cc gcc-16-20260208/gcc/fortran/trans-expr.cc
*** gcc-16-20260201/gcc/fortran/trans-expr.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/fortran/trans-expr.cc	Sun Feb  8 22:32:07 2026
*************** gfc_trans_alloc_subarray_assign (tree de
*** 9681,9692 ****
    gfc_add_expr_to_block (&block, tmp);
    gfc_add_block_to_block (&block, &se.post);
  
!   if (final_block && expr->expr_type == EXPR_ARRAY)
      {
        tree data_ptr;
        data_ptr = gfc_conv_descriptor_data_get (dest);
        gfc_add_expr_to_block (final_block, gfc_call_free (data_ptr));
      }
  
    if (expr->expr_type != EXPR_VARIABLE)
      gfc_conv_descriptor_data_set (&block, se.expr,
--- 9681,9695 ----
    gfc_add_expr_to_block (&block, tmp);
    gfc_add_block_to_block (&block, &se.post);
  
!   if (final_block && !cm->attr.allocatable
!       && expr->expr_type == EXPR_ARRAY)
      {
        tree data_ptr;
        data_ptr = gfc_conv_descriptor_data_get (dest);
        gfc_add_expr_to_block (final_block, gfc_call_free (data_ptr));
      }
+   else if (final_block && cm->attr.allocatable)
+     gfc_add_block_to_block (final_block, &se.finalblock);
  
    if (expr->expr_type != EXPR_VARIABLE)
      gfc_conv_descriptor_data_set (&block, se.expr,
diff -Nrcpad gcc-16-20260201/gcc/fortran/trans-intrinsic.cc gcc-16-20260208/gcc/fortran/trans-intrinsic.cc
*** gcc-16-20260201/gcc/fortran/trans-intrinsic.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/fortran/trans-intrinsic.cc	Sun Feb  8 22:32:07 2026
*************** gfc_adjust_builtins (void)
*** 675,681 ****
        for (hash_map<nofree_string_hash, int>::iterator it
  	   = gfc_vectorized_builtins->begin ();
  	   it != gfc_vectorized_builtins->end (); ++it)
! 	free (CONST_CAST (char *, (*it).first));
  
        delete gfc_vectorized_builtins;
        gfc_vectorized_builtins = NULL;
--- 675,681 ----
        for (hash_map<nofree_string_hash, int>::iterator it
  	   = gfc_vectorized_builtins->begin ();
  	   it != gfc_vectorized_builtins->end (); ++it)
! 	free (const_cast<char *> ((*it).first));
  
        delete gfc_vectorized_builtins;
        gfc_vectorized_builtins = NULL;
*************** gfc_conv_intrinsic_len (gfc_se * se, gfc
*** 7647,7652 ****
--- 7647,7660 ----
        break;
  
      case EXPR_ARRAY:
+       /* If there is an explicit type-spec, use it.  */
+       if (arg->ts.u.cl->length && arg->ts.u.cl->length_from_typespec)
+ 	{
+ 	  gfc_conv_string_length (arg->ts.u.cl, arg, &se->pre);
+ 	  len = arg->ts.u.cl->backend_decl;
+ 	  break;
+ 	}
+ 
        /* Obtain the string length from the function used by
           trans-array.cc(gfc_trans_array_constructor).  */
        len = NULL_TREE;
*************** conv_isocbinding_function (gfc_se *se, g
*** 9864,9870 ****
        se->expr = gfc_evaluate_now (se->expr, &se->pre);
      }
    else if (expr->value.function.isym->id == GFC_ISYM_C_FUNLOC)
!     gfc_conv_expr_reference (se, arg->expr);
    else if (expr->value.function.isym->id == GFC_ISYM_C_ASSOCIATED)
      {
        gfc_se arg1se;
--- 9872,9885 ----
        se->expr = gfc_evaluate_now (se->expr, &se->pre);
      }
    else if (expr->value.function.isym->id == GFC_ISYM_C_FUNLOC)
!     {
!       gfc_conv_expr_reference (se, arg->expr);
!       /* The code below is necessary to create a reference from the calling
! 	 subprogram to the argument of C_FUNLOC() in the call graph.
! 	 Please see PR 117303 for more details. */
!       se->expr = convert (pvoid_type_node, se->expr);
!       se->expr = gfc_evaluate_now (se->expr, &se->pre);
!     }
    else if (expr->value.function.isym->id == GFC_ISYM_C_ASSOCIATED)
      {
        gfc_se arg1se;
diff -Nrcpad gcc-16-20260201/gcc/gcc-ar.cc gcc-16-20260208/gcc/gcc-ar.cc
*** gcc-16-20260201/gcc/gcc-ar.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/gcc-ar.cc	Sun Feb  8 22:32:07 2026
*************** main (int ac, char **av)
*** 249,256 ****
  	  fprintf (stderr, "Cannot open temporary file %s\n", rsp_file);
  	  exit (1);
  	}
!       status = writeargv (
! 	  CONST_CAST2 (char * const *, const char **, nargv) + 1, f);
        if (status)
  	{
  	  fprintf (stderr, "Cannot write to temporary file %s\n", rsp_file);
--- 249,255 ----
  	  fprintf (stderr, "Cannot open temporary file %s\n", rsp_file);
  	  exit (1);
  	}
!       status = writeargv (const_cast<char * const *> (nargv) + 1, f);
        if (status)
  	{
  	  fprintf (stderr, "Cannot write to temporary file %s\n", rsp_file);
*************** main (int ac, char **av)
*** 273,279 ****
    /* ??? the const is misplaced in pex_one's argv? */
    err_msg = pex_one (PEX_LAST|PEX_SEARCH,
  		     exe_name,
! 		     CONST_CAST2 (char * const *, const char **, nargv),
  		     concat ("gcc-", exe_name, NULL),
  		     NULL,NULL,  &status, &err);
    if (err_msg)
--- 272,278 ----
    /* ??? the const is misplaced in pex_one's argv? */
    err_msg = pex_one (PEX_LAST|PEX_SEARCH,
  		     exe_name,
! 		     const_cast<char * const *> (nargv),
  		     concat ("gcc-", exe_name, NULL),
  		     NULL,NULL,  &status, &err);
    if (err_msg)
diff -Nrcpad gcc-16-20260201/gcc/gcc.cc gcc-16-20260208/gcc/gcc.cc
*** gcc-16-20260201/gcc/gcc.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/gcc.cc	Sun Feb  8 22:32:07 2026
*************** env_manager::xput (const char *string)
*** 146,152 ****
        m_keys.safe_push (kv);
      }
  
!   ::putenv (CONST_CAST (char *, string));
  }
  
  /* Undo any xputenv changes made since last restore.
--- 146,152 ----
        m_keys.safe_push (kv);
      }
  
!   ::putenv (const_cast<char *> (string));
  }
  
  /* Undo any xputenv changes made since last restore.
*************** set_spec (const char *name, const char *
*** 2155,2161 ****
  
    /* Free the old spec.  */
    if (old_spec && sl->alloc_p)
!     free (CONST_CAST (char *, old_spec));
  
    sl->user_p = user_p;
    sl->alloc_p = true;
--- 2155,2161 ----
  
    /* Free the old spec.  */
    if (old_spec && sl->alloc_p)
!     free (const_cast<char *> (old_spec));
  
    sl->user_p = user_p;
    sl->alloc_p = true;
*************** close_at_file (void)
*** 2316,2322 ****
  
    /* Copy the strings over.  */
    for (i = 0; i < n_args; i++)
!     argv[i] = CONST_CAST (char *, at_file_argbuf[i]);
    argv[i] = NULL;
  
    at_file_argbuf.truncate (0);
--- 2316,2322 ----
  
    /* Copy the strings over.  */
    for (i = 0; i < n_args; i++)
!     argv[i] = const_cast<char *> (at_file_argbuf[i]);
    argv[i] = NULL;
  
    at_file_argbuf.truncate (0);
*************** read_specs (const char *filename, bool m
*** 2568,2574 ****
  
  	      set_spec (p2, *(sl->ptr_spec), user_p);
  	      if (sl->alloc_p)
! 		free (CONST_CAST (char *, *(sl->ptr_spec)));
  
  	      *(sl->ptr_spec) = "";
  	      sl->alloc_p = 0;
--- 2568,2574 ----
  
  	      set_spec (p2, *(sl->ptr_spec), user_p);
  	      if (sl->alloc_p)
! 		free (const_cast<char *> (*(sl->ptr_spec)));
  
  	      *(sl->ptr_spec) = "";
  	      sl->alloc_p = 0;
*************** for_each_path (const struct path_prefix
*** 2944,2961 ****
  	 Don't repeat any we have already seen.  */
        if (multi_dir)
  	{
! 	  free (CONST_CAST (char *, multi_dir));
  	  multi_dir = NULL;
! 	  free (CONST_CAST (char *, multi_suffix));
  	  multi_suffix = machine_suffix;
! 	  free (CONST_CAST (char *, just_multi_suffix));
  	  just_multi_suffix = just_machine_suffix;
  	}
        else
  	skip_multi_dir = true;
        if (multi_os_dir)
  	{
! 	  free (CONST_CAST (char *, multi_os_dir));
  	  multi_os_dir = NULL;
  	}
        else
--- 2944,2961 ----
  	 Don't repeat any we have already seen.  */
        if (multi_dir)
  	{
! 	  free (const_cast<char *> (multi_dir));
  	  multi_dir = NULL;
! 	  free (const_cast<char *> (multi_suffix));
  	  multi_suffix = machine_suffix;
! 	  free (const_cast<char *> (just_multi_suffix));
  	  just_multi_suffix = just_machine_suffix;
  	}
        else
  	skip_multi_dir = true;
        if (multi_os_dir)
  	{
! 	  free (const_cast<char *> (multi_os_dir));
  	  multi_os_dir = NULL;
  	}
        else
*************** for_each_path (const struct path_prefix
*** 2964,2975 ****
  
    if (multi_dir)
      {
!       free (CONST_CAST (char *, multi_dir));
!       free (CONST_CAST (char *, multi_suffix));
!       free (CONST_CAST (char *, just_multi_suffix));
      }
    if (multi_os_dir)
!     free (CONST_CAST (char *, multi_os_dir));
    if (ret != path)
      free (path);
    return ret;
--- 2964,2975 ----
  
    if (multi_dir)
      {
!       free (const_cast<char *> (multi_dir));
!       free (const_cast<char *> (multi_suffix));
!       free (const_cast<char *> (just_multi_suffix));
      }
    if (multi_os_dir)
!     free (const_cast<char *> (multi_os_dir));
    if (ret != path)
      free (path);
    return ret;
*************** execute (void)
*** 3454,3460 ****
        errmsg = pex_run (pex,
  			((i + 1 == n_commands ? PEX_LAST : 0)
  			 | (string == commands[i].prog ? PEX_SEARCH : 0)),
! 			string, CONST_CAST (char **, commands[i].argv),
  			NULL, NULL, &err);
        if (errmsg != NULL)
  	{
--- 3454,3460 ----
        errmsg = pex_run (pex,
  			((i + 1 == n_commands ? PEX_LAST : 0)
  			 | (string == commands[i].prog ? PEX_SEARCH : 0)),
! 			string, const_cast<char **> (commands[i].argv),
  			NULL, NULL, &err);
        if (errmsg != NULL)
  	{
*************** execute (void)
*** 3466,3472 ****
  	}
  
        if (i && string != commands[i].prog)
! 	free (CONST_CAST (char *, string));
      }
  
    execution_count++;
--- 3466,3472 ----
  	}
  
        if (i && string != commands[i].prog)
! 	free (const_cast<char *> (string));
      }
  
    execution_count++;
*************** execute (void)
*** 3610,3616 ****
        }
  
     if (commands[0].argv[0] != commands[0].prog)
!      free (CONST_CAST (char *, commands[0].argv[0]));
  
      return ret_code;
    }
--- 3610,3616 ----
        }
  
     if (commands[0].argv[0] != commands[0].prog)
!      free (const_cast<char *> (commands[0].argv[0]));
  
      return ret_code;
    }
*************** driver_handle_option (struct gcc_options
*** 4387,4394 ****
  
      case OPT_fdiagnostics_format_:
  	{
! 	  const char *basename = (opts->x_dump_base_name ? opts->x_dump_base_name
! 				  : opts->x_main_input_basename);
  	  gcc_assert (dc);
  	  diagnostics::output_format_init (*dc,
  					   opts->x_main_input_filename, basename,
--- 4387,4393 ----
  
      case OPT_fdiagnostics_format_:
  	{
! 	  const char *basename = get_diagnostic_file_output_basename (*opts);
  	  gcc_assert (dc);
  	  diagnostics::output_format_init (*dc,
  					   opts->x_main_input_filename, basename,
*************** give_switch (int switchnum, int omit_fir
*** 7704,7716 ****
  	      while (length-- && !IS_DIR_SEPARATOR (arg[length]))
  		if (arg[length] == '.')
  		  {
! 		    (CONST_CAST (char *, arg))[length] = 0;
  		    dot = 1;
  		    break;
  		  }
  	      do_spec_1 (arg, 1, NULL);
  	      if (dot)
! 		(CONST_CAST (char *, arg))[length] = '.';
  	      do_spec_1 (suffix_subst, 1, NULL);
  	    }
  	  else
--- 7703,7715 ----
  	      while (length-- && !IS_DIR_SEPARATOR (arg[length]))
  		if (arg[length] == '.')
  		  {
! 		    (const_cast<char *> (arg))[length] = 0;
  		    dot = 1;
  		    break;
  		  }
  	      do_spec_1 (arg, 1, NULL);
  	      if (dot)
! 		(const_cast<char *> (arg))[length] = '.';
  	      do_spec_1 (suffix_subst, 1, NULL);
  	    }
  	  else
*************** run_attempt (const char **new_argv, cons
*** 7891,7897 ****
      fatal_error (input_location, "%<pex_init%> failed: %m");
  
    errmsg = pex_run (pex, pex_flags, new_argv[0],
! 		    CONST_CAST2 (char *const *, const char **, &new_argv[1]),
  		    out_temp, err_temp, &err);
    if (errmsg != NULL)
      {
--- 7890,7896 ----
      fatal_error (input_location, "%<pex_init%> failed: %m");
  
    errmsg = pex_run (pex, pex_flags, new_argv[0],
! 		    const_cast<char *const *> (&new_argv[1]),
  		    out_temp, err_temp, &err);
    if (errmsg != NULL)
      {
*************** set_multilib_dir (void)
*** 10149,10155 ****
    if (multilib_dir == NULL && multilib_os_dir != NULL
        && strcmp (multilib_os_dir, ".") == 0)
      {
!       free (CONST_CAST (char *, multilib_os_dir));
        multilib_os_dir = NULL;
      }
    else if (multilib_dir != NULL && multilib_os_dir == NULL)
--- 10148,10154 ----
    if (multilib_dir == NULL && multilib_os_dir != NULL
        && strcmp (multilib_os_dir, ".") == 0)
      {
!       free (const_cast<char *> (multilib_os_dir));
        multilib_os_dir = NULL;
      }
    else if (multilib_dir != NULL && multilib_os_dir == NULL)
diff -Nrcpad gcc-16-20260201/gcc/gcov.cc gcc-16-20260208/gcc/gcov.cc
*** gcc-16-20260201/gcc/gcov.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/gcov.cc	Sun Feb  8 22:32:07 2026
*************** create_file_names (const char *file_name
*** 2091,2097 ****
      }
  
    /* Remove the extension.  */
!   cptr = strrchr (CONST_CAST (char *, lbasename (name)), '.');
    if (cptr)
      *cptr = 0;
  
--- 2091,2097 ----
      }
  
    /* Remove the extension.  */
!   cptr = strrchr (const_cast<char *> (lbasename (name)), '.');
    if (cptr)
      *cptr = 0;
  
diff -Nrcpad gcc-16-20260201/gcc/gengtype-parse.cc gcc-16-20260208/gcc/gengtype-parse.cc
*** gcc-16-20260201/gcc/gengtype-parse.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/gengtype-parse.cc	Sun Feb  8 22:32:07 2026
*************** string_seq (void)
*** 237,245 ****
  
        l1 = strlen (s1);
        l2 = strlen (s2);
!       buf = XRESIZEVEC (char, CONST_CAST (char *, s1), l1 + l2 + 1);
        memcpy (buf + l1, s2, l2 + 1);
!       XDELETE (CONST_CAST (char *, s2));
        s1 = buf;
      }
    return s1;
--- 237,245 ----
  
        l1 = strlen (s1);
        l2 = strlen (s2);
!       buf = XRESIZEVEC (char, const_cast<char *> (s1), l1 + l2 + 1);
        memcpy (buf + l1, s2, l2 + 1);
!       XDELETE (const_cast<char *> (s2));
        s1 = buf;
      }
    return s1;
diff -Nrcpad gcc-16-20260201/gcc/gengtype-state.cc gcc-16-20260208/gcc/gengtype-state.cc
*** gcc-16-20260201/gcc/gengtype-state.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/gengtype-state.cc	Sun Feb  8 22:32:07 2026
*************** type_lineloc (const_type_p ty)
*** 52,58 ****
      case TYPE_LANG_STRUCT:
      case TYPE_USER_STRUCT:
      case TYPE_UNDEFINED:
!       return CONST_CAST (struct fileloc*, &ty->u.s.line);
      case TYPE_SCALAR:
      case TYPE_STRING:
      case TYPE_POINTER:
--- 52,58 ----
      case TYPE_LANG_STRUCT:
      case TYPE_USER_STRUCT:
      case TYPE_UNDEFINED:
!       return const_cast<struct fileloc*> (&ty->u.s.line);
      case TYPE_SCALAR:
      case TYPE_STRING:
      case TYPE_POINTER:
diff -Nrcpad gcc-16-20260201/gcc/gengtype.cc gcc-16-20260208/gcc/gengtype.cc
*** gcc-16-20260201/gcc/gengtype.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/gengtype.cc	Sun Feb  8 22:32:07 2026
*************** header_dot_h_frul (input_file* inpf, cha
*** 2060,2067 ****
  static outf_p
  source_dot_cc_frul (input_file* inpf, char**poutname, char**pforname)
  {
!   char *newbasename = CONST_CAST (char*, get_file_basename (inpf));
!   char *newoutname = CONST_CAST (char*, get_file_gtfilename (inpf));
    DBGPRINTF ("inpf %p inpname %s original outname %s forname %s",
  	     (void*) inpf, get_input_file_name (inpf),
  	     *poutname, *pforname);
--- 2060,2067 ----
  static outf_p
  source_dot_cc_frul (input_file* inpf, char**poutname, char**pforname)
  {
!   char *newbasename = const_cast<char*> (get_file_basename (inpf));
!   char *newoutname = const_cast<char*> (get_file_gtfilename (inpf));
    DBGPRINTF ("inpf %p inpname %s original outname %s forname %s",
  	     (void*) inpf, get_input_file_name (inpf),
  	     *poutname, *pforname);
*************** output_mangled_typename (outf_p of, cons
*** 2529,2535 ****
  	  oprintf (of, "%lu%s", (unsigned long) strlen (id_for_tag),
  		   id_for_tag);
  	  if (id_for_tag != t->u.s.tag)
! 	    free (CONST_CAST (char *, id_for_tag));
  	}
  	break;
        case TYPE_ARRAY:
--- 2529,2535 ----
  	  oprintf (of, "%lu%s", (unsigned long) strlen (id_for_tag),
  		   id_for_tag);
  	  if (id_for_tag != t->u.s.tag)
! 	    free (const_cast<char *> (id_for_tag));
  	}
  	break;
        case TYPE_ARRAY:
*************** get_output_file_for_structure (const_typ
*** 3303,3309 ****
  
    /* The call to get_output_file_with_visibility may update fn by
       caching its result inside, so we need the CONST_CAST.  */
!   return get_output_file_with_visibility (CONST_CAST (input_file*, fn));
  }
  
  
--- 3303,3309 ----
  
    /* The call to get_output_file_with_visibility may update fn by
       caching its result inside, so we need the CONST_CAST.  */
!   return get_output_file_with_visibility (const_cast<input_file*> (fn));
  }
  
  
*************** write_marker_function_name (outf_p of, t
*** 3368,3374 ****
        const char *id_for_tag = filter_type_name (s->u.s.tag);
        oprintf (of, "gt_%sx_%s", prefix, id_for_tag);
        if (id_for_tag != s->u.s.tag)
! 	free (CONST_CAST (char *, id_for_tag));
      }
    else
      gcc_unreachable ();
--- 3368,3374 ----
        const char *id_for_tag = filter_type_name (s->u.s.tag);
        oprintf (of, "gt_%sx_%s", prefix, id_for_tag);
        if (id_for_tag != s->u.s.tag)
! 	free (const_cast<char *> (id_for_tag));
      }
    else
      gcc_unreachable ();
*************** write_types (outf_p output_header, type_
*** 3710,3716 ****
  			   "#define gt_%sx_%s gt_%sx_%s\n",
  			   wtd->prefix, s->u.s.tag, wtd->prefix, t_id_for_tag);
  		  if (t_id_for_tag != t->u.s.tag)
! 		    free (CONST_CAST (char *, t_id_for_tag));
  		}
  	      else
  		error_at_line (&s->u.s.line,
--- 3710,3716 ----
  			   "#define gt_%sx_%s gt_%sx_%s\n",
  			   wtd->prefix, s->u.s.tag, wtd->prefix, t_id_for_tag);
  		  if (t_id_for_tag != t->u.s.tag)
! 		    free (const_cast<char *> (t_id_for_tag));
  		}
  	      else
  		error_at_line (&s->u.s.line,
*************** write_types (outf_p output_header, type_
*** 3726,3732 ****
  		 wtd->prefix, s_id_for_tag);
  
  	if (s_id_for_tag != s->u.s.tag)
! 	  free (CONST_CAST (char *, s_id_for_tag));
  
  	if (s->u.s.line.file == NULL)
  	  {
--- 3726,3732 ----
  		 wtd->prefix, s_id_for_tag);
  
  	if (s_id_for_tag != s->u.s.tag)
! 	  free (const_cast<char *> (s_id_for_tag));
  
  	if (s->u.s.line.file == NULL)
  	  {
*************** put_mangled_filename (outf_p f, const in
*** 4113,4119 ****
    /* The call to get_output_file_name may indirectly update fn since
       get_output_file_with_visibility caches its result inside, so we
       need the CONST_CAST.  */
!   const char *name = get_output_file_name (CONST_CAST (input_file*, inpf));
    if (!f || !name)
      return;
    for (; *name != 0; name++)
--- 4113,4119 ----
    /* The call to get_output_file_name may indirectly update fn since
       get_output_file_with_visibility caches its result inside, so we
       need the CONST_CAST.  */
!   const char *name = get_output_file_name (const_cast<input_file*> (inpf));
    if (!f || !name)
      return;
    for (; *name != 0; name++)
*************** write_root (outf_p f, pair_p v, type_p t
*** 4427,4433 ****
  	    else
  	      oprintf (f, "    NULL");
  	    if (id_for_tag != tp->u.s.tag)
! 	      free (CONST_CAST (char *, id_for_tag));
  	  }
  	else if (has_length
  		 && (tp->kind == TYPE_POINTER || union_or_struct_p (tp)))
--- 4427,4433 ----
  	    else
  	      oprintf (f, "    NULL");
  	    if (id_for_tag != tp->u.s.tag)
! 	      free (const_cast<char *> (id_for_tag));
  	  }
  	else if (has_length
  		 && (tp->kind == TYPE_POINTER || union_or_struct_p (tp)))
*************** write_roots (pair_p variables, bool emit
*** 4531,4537 ****
    for (v = variables; v; v = v->next)
      {
        outf_p f =
! 	get_output_file_with_visibility (CONST_CAST (input_file*,
  						     v->line.file));
        struct flist *fli;
        const char *length = NULL;
--- 4531,4537 ----
    for (v = variables; v; v = v->next)
      {
        outf_p f =
! 	get_output_file_with_visibility (const_cast<input_file*> (
  						     v->line.file));
        struct flist *fli;
        const char *length = NULL;
*************** write_roots (pair_p variables, bool emit
*** 4584,4590 ****
  
    for (v = variables; v; v = v->next)
      {
!       outf_p f = get_output_file_with_visibility (CONST_CAST (input_file*,
  							      v->line.file));
        struct flist *fli;
        int skip_p = 0;
--- 4584,4590 ----
  
    for (v = variables; v; v = v->next)
      {
!       outf_p f = get_output_file_with_visibility (const_cast<input_file*> (
  							      v->line.file));
        struct flist *fli;
        int skip_p = 0;
*************** write_roots (pair_p variables, bool emit
*** 4620,4626 ****
  
    for (v = variables; v; v = v->next)
      {
!       outf_p f = get_output_file_with_visibility (CONST_CAST (input_file*,
  							      v->line.file));
        struct flist *fli;
        int skip_p = 1;
--- 4620,4626 ----
  
    for (v = variables; v; v = v->next)
      {
!       outf_p f = get_output_file_with_visibility (const_cast<input_file*> (
  							      v->line.file));
        struct flist *fli;
        int skip_p = 1;
*************** write_roots (pair_p variables, bool emit
*** 4654,4660 ****
  
    for (v = variables; v; v = v->next)
      {
!       outf_p f = get_output_file_with_visibility (CONST_CAST (input_file*,
  							      v->line.file));
        struct flist *fli;
        options_p o;
--- 4654,4660 ----
  
    for (v = variables; v; v = v->next)
      {
!       outf_p f = get_output_file_with_visibility (const_cast<input_file*> (
  							      v->line.file));
        struct flist *fli;
        options_p o;
*************** write_roots (pair_p variables, bool emit
*** 4689,4695 ****
  
    for (v = variables; v; v = v->next)
      {
!       outf_p f = get_output_file_with_visibility (CONST_CAST (input_file*,
  							      v->line.file));
        struct flist *fli;
        int skip_p = 0;
--- 4689,4695 ----
  
    for (v = variables; v; v = v->next)
      {
!       outf_p f = get_output_file_with_visibility (const_cast<input_file*> (
  							      v->line.file));
        struct flist *fli;
        int skip_p = 0;
diff -Nrcpad gcc-16-20260201/gcc/genoutput.cc gcc-16-20260208/gcc/genoutput.cc
*** gcc-16-20260201/gcc/genoutput.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/genoutput.cc	Sun Feb  8 22:32:07 2026
*************** note_constraint (md_rtx_info *info)
*** 1302,1308 ****
    new_cdata = XNEWVAR (class constraint_data,
  		       sizeof (class constraint_data) + namelen);
    new (new_cdata) constraint_data ();
!   strcpy (CONST_CAST (char *, new_cdata->name), name);
    new_cdata->namelen = namelen;
    new_cdata->loc = info->loc;
    new_cdata->next_this_letter = *slot;
--- 1302,1308 ----
    new_cdata = XNEWVAR (class constraint_data,
  		       sizeof (class constraint_data) + namelen);
    new (new_cdata) constraint_data ();
!   strcpy (const_cast<char *> (new_cdata->name), name);
    new_cdata->namelen = namelen;
    new_cdata->loc = info->loc;
    new_cdata->next_this_letter = *slot;
diff -Nrcpad gcc-16-20260201/gcc/ggc-page.cc gcc-16-20260208/gcc/ggc-page.cc
*** gcc-16-20260201/gcc/ggc-page.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/ggc-page.cc	Sun Feb  8 22:32:07 2026
*************** gt_ggc_m_S (const void *p)
*** 1589,1595 ****
  	 a STRING_CST.  */
        gcc_assert (offset == offsetof (struct tree_string, str));
        p = ((const char *) p) - offset;
!       gt_ggc_mx_lang_tree_node (CONST_CAST (void *, p));
        return;
      }
  
--- 1589,1595 ----
  	 a STRING_CST.  */
        gcc_assert (offset == offsetof (struct tree_string, str));
        p = ((const char *) p) - offset;
!       gt_ggc_mx_lang_tree_node (const_cast<void *> (p));
        return;
      }
  
diff -Nrcpad gcc-16-20260201/gcc/gimple-expr.cc gcc-16-20260208/gcc/gimple-expr.cc
*** gcc-16-20260201/gcc/gimple-expr.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/gimple-expr.cc	Sun Feb  8 22:32:07 2026
*************** is_gimple_asm_val (tree t)
*** 865,871 ****
  bool
  is_gimple_min_lval (tree t)
  {
!   if (!(t = CONST_CAST_TREE (strip_invariant_refs (t))))
      return false;
    return (is_gimple_id (t) || TREE_CODE (t) == MEM_REF);
  }
--- 865,871 ----
  bool
  is_gimple_min_lval (tree t)
  {
!   if (!(t = const_cast<tree> (strip_invariant_refs (t))))
      return false;
    return (is_gimple_id (t) || TREE_CODE (t) == MEM_REF);
  }
diff -Nrcpad gcc-16-20260201/gcc/gimple-lower-bitint.cc gcc-16-20260208/gcc/gimple-lower-bitint.cc
*** gcc-16-20260201/gcc/gimple-lower-bitint.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/gimple-lower-bitint.cc	Sun Feb  8 22:32:07 2026
*************** gimple_lower_bitint (void)
*** 7804,7809 ****
--- 7804,7814 ----
  							   vtype, c));
  			}
  		      gsi_insert_on_edge (e, g);
+ 		      if (min_prec == prec)
+ 			{
+ 			  edge_insertions = true;
+ 			  break;
+ 			}
  		    }
  		  if (ext == 0)
  		    {
diff -Nrcpad gcc-16-20260201/gcc/gimple-range-op.cc gcc-16-20260208/gcc/gimple-range-op.cc
*** gcc-16-20260201/gcc/gimple-range-op.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/gimple-range-op.cc	Sun Feb  8 22:32:07 2026
*************** gimple_range_op_handler::maybe_non_stand
*** 1353,1389 ****
    gcc_checking_assert (signed_op);
    range_op_handler unsigned_op (OP_WIDEN_MULT_UNSIGNED);
    gcc_checking_assert (unsigned_op);
  
    if (gimple_code (m_stmt) == GIMPLE_ASSIGN)
      switch (gimple_assign_rhs_code (m_stmt))
        {
  	case WIDEN_MULT_EXPR:
- 	{
  	  m_op1 = gimple_assign_rhs1 (m_stmt);
  	  m_op2 = gimple_assign_rhs2 (m_stmt);
! 	  tree ret = gimple_assign_lhs (m_stmt);
! 	  bool signed1 = TYPE_SIGN (TREE_TYPE (m_op1)) == SIGNED;
! 	  bool signed2 = TYPE_SIGN (TREE_TYPE (m_op2)) == SIGNED;
! 	  bool signed_ret = TYPE_SIGN (TREE_TYPE (ret)) == SIGNED;
! 
! 	  /* Normally these operands should all have the same sign, but
! 	     some passes and violate this by taking mismatched sign args.  At
! 	     the moment the only one that's possible is mismatch inputs and
! 	     unsigned output.  Once ranger supports signs for the operands we
! 	     can properly fix it,  for now only accept the case we can do
! 	     correctly.  */
! 	  if ((signed1 ^ signed2) && signed_ret)
! 	    return;
! 
! 	  if (signed2 && !signed1)
! 	    std::swap (m_op1, m_op2);
  
! 	  if (signed1 || signed2)
  	    m_operator = signed_op.range_op ();
  	  else
  	    m_operator = unsigned_op.range_op ();
  	  break;
! 	}
  	default:
  	  break;
        }
--- 1353,1383 ----
    gcc_checking_assert (signed_op);
    range_op_handler unsigned_op (OP_WIDEN_MULT_UNSIGNED);
    gcc_checking_assert (unsigned_op);
+   range_op_handler signed_unsigned_op (OP_WIDEN_MULT_SIGNED_UNSIGNED);
+   gcc_checking_assert (signed_unsigned_op);
+   bool signed1, signed2;
  
    if (gimple_code (m_stmt) == GIMPLE_ASSIGN)
      switch (gimple_assign_rhs_code (m_stmt))
        {
  	case WIDEN_MULT_EXPR:
  	  m_op1 = gimple_assign_rhs1 (m_stmt);
  	  m_op2 = gimple_assign_rhs2 (m_stmt);
! 	  signed1 = TYPE_SIGN (TREE_TYPE (m_op1)) == SIGNED;
! 	  signed2 = TYPE_SIGN (TREE_TYPE (m_op2)) == SIGNED;
  
! 	  if (signed1 != signed2)
! 	    {
! 	      if (signed2 && !signed1)
! 		std::swap (m_op1, m_op2);
! 	      m_operator = signed_unsigned_op.range_op ();
! 	    }
! 	  else if (signed1)
  	    m_operator = signed_op.range_op ();
  	  else
  	    m_operator = unsigned_op.range_op ();
  	  break;
! 
  	default:
  	  break;
        }
diff -Nrcpad gcc-16-20260201/gcc/gimple.h gcc-16-20260208/gcc/gimple.h
*** gcc-16-20260201/gcc/gimple.h	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/gimple.h	Sun Feb  8 22:32:07 2026
*************** gimple_op (const gimple *gs, unsigned i)
*** 2606,2612 ****
    if (gimple_has_ops (gs))
      {
        gcc_gimple_checking_assert (i < gimple_num_ops (gs));
!       return gimple_ops (CONST_CAST_GIMPLE (gs))[i];
      }
    else
      return NULL_TREE;
--- 2606,2612 ----
    if (gimple_has_ops (gs))
      {
        gcc_gimple_checking_assert (i < gimple_num_ops (gs));
!       return gimple_ops (const_cast<gimple *> (gs))[i];
      }
    else
      return NULL_TREE;
diff -Nrcpad gcc-16-20260201/gcc/godump.cc gcc-16-20260208/gcc/godump.cc
*** gcc-16-20260201/gcc/godump.cc	Sun Feb  1 22:32:07 2026
--- gcc-16-20260208/gcc/godump.cc	Sun Feb  8 22:32:07 2026
*************** go_undef (unsigned int lineno, const cha
*** 465,471 ****
  
    real_debug_hooks->undef (lineno, buffer);
  
!   mhval.name = CONST_CAST (char *, buffer);
    mhval.value = NULL;
    slot = htab_find_slot (macro_hash, &mhval, NO_INSERT);
    if (slot != NULL)
--- 465,471 ----
  
    real_debug_hooks->undef (lineno, buffer);
  
!   mhval.name = const_cast<char *> (buffer);
    mhval.value = NULL;
    slot = htab_find_slot (macro_hash, &mhval, NO_INSERT);
    if (slot != NULL)
*************** go_output_typedef (class godump_containe
*** 1186,1199 ****
        slot = htab_find_slot (container->type_hash, type, INSERT);
        if (*slot != NULL)
  	return;
!       *slot = CONST_CAST (void *, (const void *) type);
  
        if (!go_format_type (container, original_type, true, false,
  			   NULL, false))
  	{
  	  fprintf (go_dump_file, "// ");
  	  slot = htab_find_slot (container->invalid_hash, type, INSERT);
! 	  *slot = CONST_CAST (void *, (const void *) type);
  	}
        fprintf (go_dump_file, "type _%s ",
  	       IDENTIFIER_POINTER (DECL_NAME (decl)));
--- 1186,1199 ----
        slot = htab_find_slot (container->type_hash, type, INSERT);
        if (*slot != NULL)
  	return;
!       *slot = const_cast<void *> ((const void *) type);
  
        if (!go_format_type (container, original_type, true, false,
  			   NULL, false))
  	{
  	  fprintf (go_dump_file, "// ");
  	  slot = htab_find_slot (container->invalid_hash, type, INSERT);
! 	  *slot = const_cast<void *> ((const void *) type);
  	}
        fprintf (go_dump_file, "type _%s ",
  	       IDENTIFIER_POINTER (DECL_NAME (decl)));
*************** go_output_typedef (class godump_containe
*** 1225,1238 ****
         slot = htab_find_slot (container->type_hash, type, INSERT);
         if (*slot != NULL)
           return;
!        *slot = CONST_CAST (void *, (const void *) type);
  
         if (!go_format_type (container, TREE_TYPE (decl), false, false, NULL,
  			    false))
  	 {
  	   fprintf (go_dump_file, "// ");
  	   slot = htab_find_slot (container->invalid_hash, type, INSERT);
! 	   *slot = CONST_CAST (void *, (const void *) type);
  	 }
         fprintf (go_dump_file, "type _%s ",
  	       IDENTIFIER_POINTER (TYPE_NAME (TREE_TYPE (decl))));
--- 1225,1238 ----
         slot = htab_find_slot (container->type_hash, type, INSERT);
         if (*slot != NULL)
           return;
!        *slot = const_cast<void *> ((const void *) type);
  
         if (!go_format_type (container, TREE_TYPE (decl), false, false, NULL,
  			    false))
  	 {
  	   fprintf (go_dump_file, "// ");
  	   slot = htab_find_slot (container->invalid_hash, type, INSERT);
! 	   *slot = const_cast<void *> ((const void *) type);
  	 }
         fprintf (go_dump_file, "type _%s ",
  	       IDENTIFIER_POINTER (TYPE_NAME (TREE_TYPE (decl))));
*************** keyword_hash_init (class godump_containe
*** 1352,1358 ****
    for (i = 0; i < count; i++)
      {
        slot = htab_find_slot (container->keyword_hash, keywords[i], INSERT);
!       *slot = CONST_CAST (void *, (const void *) keywords[i]);
      }
  }
  
--- 1352,1358 ----
    for (i = 0; i < count; i++)
      {
        slot = htab_find_slot (container->keyword_hash, keywords[i], INSERT);
!       *slot = const_cast<void *> ((const void *) keywords[i]);
      }
  }
  
diff -Nrcpad gcc-16-20260201/gcc/ifcvt.cc gcc-16-20260208/gcc/ifcvt.cc
*** gcc-16-20260201/gcc/ifcvt.cc	Sun Feb  1 22:32:08 2026
--- gcc-16-20260208/gcc/ifcvt.cc	Sun Feb  8 22:32:07 2026
*************** noce_emit_store_flag (struct noce_if_inf
*** 891,896 ****
--- 891,900 ----
    if (cond_complex || !SCALAR_INT_MODE_P (GET_MODE (x)))
      return NULL_RTX;
  
+   /* Don't try if mode of X is more than the max fixed mode size.  */
+   if (known_le (MAX_FIXED_MODE_SIZE, GET_MODE_BITSIZE (GET_MODE (x))))
+     return NULL_RTX;
+ 
    return emit_store_flag (x, code, XEXP (cond, 0),
  			  XEXP (cond, 1), VOIDmode,
  			  (code == LTU || code == LEU
diff -Nrcpad gcc-16-20260201/gcc/ipa-cp.cc gcc-16-20260208/gcc/ipa-cp.cc
*** gcc-16-20260201/gcc/ipa-cp.cc	Sun Feb  1 22:32:08 2026
--- gcc-16-20260208/gcc/ipa-cp.cc	Sun Feb  8 22:32:07 2026
*************** initialize_node_lattices (struct cgraph_
*** 1438,1447 ****
        int caller_count = 0;
        node->call_for_symbol_thunks_and_aliases (count_callers, &caller_count,
  						true);
-       gcc_checking_assert (caller_count > 0);
        if (caller_count == 1)
  	node->call_for_symbol_thunks_and_aliases (set_single_call_flag,
  						  NULL, true);
      }
    else
      {
--- 1438,1451 ----
        int caller_count = 0;
        node->call_for_symbol_thunks_and_aliases (count_callers, &caller_count,
  						true);
        if (caller_count == 1)
  	node->call_for_symbol_thunks_and_aliases (set_single_call_flag,
  						  NULL, true);
+       else if (caller_count == 0)
+ 	{
+ 	  gcc_checking_assert (!opt_for_fn (node->decl, flag_toplevel_reorder));
+ 	  variable = true;
+ 	}
      }
    else
      {
diff -Nrcpad gcc-16-20260201/gcc/ipa-modref.cc gcc-16-20260208/gcc/ipa-modref.cc
*** gcc-16-20260201/gcc/ipa-modref.cc	Sun Feb  1 22:32:08 2026
--- gcc-16-20260208/gcc/ipa-modref.cc	Sun Feb  8 22:32:07 2026
*************** ipa_merge_modref_summary_after_inlining
*** 5352,5358 ****
  
    if (!callee_info && to_info)
      {
!       if (!(flags & (ECF_CONST | ECF_PURE | ECF_NOVOPS)))
  	to_info->loads->collapse ();
        if (!ignore_stores)
  	to_info->stores->collapse ();
--- 5352,5358 ----
  
    if (!callee_info && to_info)
      {
!       if (!(flags & (ECF_CONST | ECF_NOVOPS)))
  	to_info->loads->collapse ();
        if (!ignore_stores)
  	to_info->stores->collapse ();
diff -Nrcpad gcc-16-20260201/gcc/langhooks-def.h gcc-16-20260208/gcc/langhooks-def.h
*** gcc-16-20260201/gcc/langhooks-def.h	Sun Feb  1 22:32:08 2026
--- gcc-16-20260208/gcc/langhooks-def.h	Sun Feb  8 22:32:07 2026
*************** extern tree lhd_type_for_size (unsigned
*** 63,69 ****
  extern void lhd_incomplete_type_error (location_t, const_tree, const_tree);
  extern tree lhd_type_promotes_to (tree);
  extern void lhd_register_builtin_type (tree, const char *);
- extern tree lhd_build_lang_qualified_type (tree, tree, int);
  extern bool lhd_decl_ok_for_sibcall (const_tree);
  extern size_t lhd_tree_size (enum tree_code);
  extern HOST_WIDE_INT lhd_to_target_charset (HOST_WIDE_INT);
--- 63,68 ----
*************** extern tree lhd_unit_size_without_reusab
*** 213,219 ****
  #define LANG_HOOKS_OMP_FIRSTPRIVATIZE_TYPE_SIZES \
    lhd_omp_firstprivatize_type_sizes
  #define LANG_HOOKS_TYPE_HASH_EQ		NULL
! #define LANG_HOOKS_BUILD_LANG_QUALIFIED_TYPE	lhd_build_lang_qualified_type
  #define LANG_HOOKS_GET_ARRAY_DESCR_INFO	NULL
  #define LANG_HOOKS_GET_SUBRANGE_BOUNDS	NULL
  #define LANG_HOOKS_GET_TYPE_BIAS	NULL
--- 212,218 ----
  #define LANG_HOOKS_OMP_FIRSTPRIVATIZE_TYPE_SIZES \
    lhd_omp_firstprivatize_type_sizes
  #define LANG_HOOKS_TYPE_HASH_EQ		NULL
! #define LANG_HOOKS_COPY_LANG_QUALIFIERS NULL
  #define LANG_HOOKS_GET_ARRAY_DESCR_INFO	NULL
  #define LANG_HOOKS_GET_SUBRANGE_BOUNDS	NULL
  #define LANG_HOOKS_GET_TYPE_BIAS	NULL
*************** extern tree lhd_unit_size_without_reusab
*** 241,247 ****
    LANG_HOOKS_TYPE_MAX_SIZE, \
    LANG_HOOKS_OMP_FIRSTPRIVATIZE_TYPE_SIZES, \
    LANG_HOOKS_TYPE_HASH_EQ, \
!   LANG_HOOKS_BUILD_LANG_QUALIFIED_TYPE, \
    LANG_HOOKS_GET_ARRAY_DESCR_INFO, \
    LANG_HOOKS_GET_SUBRANGE_BOUNDS, \
    LANG_HOOKS_GET_TYPE_BIAS, \
--- 240,246 ----
    LANG_HOOKS_TYPE_MAX_SIZE, \
    LANG_HOOKS_OMP_FIRSTPRIVATIZE_TYPE_SIZES, \
    LANG_HOOKS_TYPE_HASH_EQ, \
!   LANG_HOOKS_COPY_LANG_QUALIFIERS, \
    LANG_HOOKS_GET_ARRAY_DESCR_INFO, \
    LANG_HOOKS_GET_SUBRANGE_BOUNDS, \
    LANG_HOOKS_GET_TYPE_BIAS, \
diff -Nrcpad gcc-16-20260201/gcc/langhooks.cc gcc-16-20260208/gcc/langhooks.cc
*** gcc-16-20260201/gcc/langhooks.cc	Sun Feb  1 22:32:08 2026
--- gcc-16-20260208/gcc/langhooks.cc	Sun Feb  8 22:32:07 2026
*************** lhd_register_builtin_type (tree ARG_UNUS
*** 202,217 ****
  {
  }
  
- /* Return a version of the TYPE, qualified as indicated by the
-    TYPE_QUALS, if one exists.  If no qualified version exists yet,
-    creates it and returns it.  */
- tree
- lhd_build_lang_qualified_type (tree type, tree ARG_UNUSED (otype),
- 			       int type_quals)
- {
-   return build_qualified_type (type, type_quals);
- }
- 
  /* Invalid use of an incomplete type.  */
  void
  lhd_incomplete_type_error (location_t ARG_UNUSED (loc),
--- 202,207 ----
diff -Nrcpad gcc-16-20260201/gcc/langhooks.h gcc-16-20260208/gcc/langhooks.h
*** gcc-16-20260201/gcc/langhooks.h	Sun Feb  1 22:32:08 2026
--- gcc-16-20260208/gcc/langhooks.h	Sun Feb  8 22:32:07 2026
*************** struct lang_hooks_for_types
*** 134,143 ****
       FUNCTION_TYPE or METHOD_TYPE.  */
    bool (*type_hash_eq) (const_tree, const_tree);
  
!   /* Return a version of the TYPE, qualified as indicated by the
!      TYPE_QUALS in a language-specific way, if one exists, otherwise create it.
!      If OTYPE is non-NULL, copy extra language modifiers from it too.  */
!   tree (*build_lang_qualified_type) (tree, tree, int);
  
    /* Return TRUE if TYPE uses a hidden descriptor and fills in information
       for the debugger about the array bounds, strides, etc.  */
--- 134,142 ----
       FUNCTION_TYPE or METHOD_TYPE.  */
    bool (*type_hash_eq) (const_tree, const_tree);
  
!   /* If non-NULL, return TYPE1 with any language-specific modifiers copied from
!      TYPE2.  */
!   tree (*copy_lang_qualifiers) (const_tree, const_tree);
  
    /* Return TRUE if TYPE uses a hidden descriptor and fills in information
       for the debugger about the array bounds, strides, etc.  */
diff -Nrcpad gcc-16-20260201/gcc/lra-assigns.cc gcc-16-20260208/gcc/lra-assigns.cc
*** gcc-16-20260201/gcc/lra-assigns.cc	Sun Feb  1 22:32:08 2026
--- gcc-16-20260208/gcc/lra-assigns.cc	Sun Feb  8 22:32:07 2026
*************** lra_split_hard_reg_for (bool fail_p)
*** 1813,1818 ****
--- 1813,1820 ----
    bitmap_ior_into (&non_reload_pseudos, &lra_subreg_reload_pseudos);
    bitmap_ior_into (&non_reload_pseudos, &lra_optional_reload_pseudos);
    bitmap_initialize (&over_split_insns, &reg_obstack);
+   update_hard_regno_preference_check = XCNEWVEC (int, max_regno);
+   curr_update_hard_regno_preference_check = 0;
    for (i = lra_constraint_new_regno_start; i < max_regno; i++)
      if (reg_renumber[i] < 0 && lra_reg_info[i].nrefs != 0
  	&& (rclass = lra_get_allocno_class (i)) != NO_REGS
*************** lra_split_hard_reg_for (bool fail_p)
*** 1850,1888 ****
  	  }
        }
    bitmap_clear (&over_split_insns);
    if (spill_p)
      {
-       bitmap_clear (&failed_reload_pseudos);
        lra_dump_insns_if_possible ("changed func after splitting hard regs");
-       return true;
      }
!   bitmap_clear (&non_reload_pseudos);
!   bitmap_initialize (&failed_reload_insns, &reg_obstack);
!   EXECUTE_IF_SET_IN_BITMAP (&failed_reload_pseudos, 0, u, bi)
      {
!       regno = u;
!       bitmap_ior_into (&failed_reload_insns,
! 		       &lra_reg_info[regno].insn_bitmap);
        if (fail_p)
! 	lra_setup_reg_renumber
! 	  (regno, ira_class_hard_regs[lra_get_allocno_class (regno)][0], false);
!     }
!   if (fail_p)
!     EXECUTE_IF_SET_IN_BITMAP (&failed_reload_insns, 0, u, bi)
!       {
! 	insn = lra_insn_recog_data[u]->insn;
! 	if (asm_noperands (PATTERN (insn)) >= 0)
! 	  {
! 	    asm_p = true;
! 	    lra_asm_insn_error (insn);
! 	  }
! 	else if (!asm_p)
  	  {
! 	    error ("unable to find a register to spill");
! 	    fatal_insn ("this is the insn:", insn);
  	  }
!       }
    bitmap_clear (&failed_reload_pseudos);
!   bitmap_clear (&failed_reload_insns);
!   return false;
  }
--- 1852,1893 ----
  	  }
        }
    bitmap_clear (&over_split_insns);
+   bitmap_clear (&non_reload_pseudos);
    if (spill_p)
      {
        lra_dump_insns_if_possible ("changed func after splitting hard regs");
      }
!   else
      {
!       bitmap_initialize (&failed_reload_insns, &reg_obstack);
!       EXECUTE_IF_SET_IN_BITMAP (&failed_reload_pseudos, 0, u, bi)
! 	{
! 	  regno = u;
! 	  bitmap_ior_into (&failed_reload_insns,
! 			   &lra_reg_info[regno].insn_bitmap);
! 	  if (fail_p)
! 	    lra_setup_reg_renumber
! 	      (regno, ira_class_hard_regs[lra_get_allocno_class (regno)][0],
! 	       false);
! 	}
        if (fail_p)
! 	EXECUTE_IF_SET_IN_BITMAP (&failed_reload_insns, 0, u, bi)
  	  {
! 	    insn = lra_insn_recog_data[u]->insn;
! 	    if (asm_noperands (PATTERN (insn)) >= 0)
! 	      {
! 		asm_p = true;
! 		lra_asm_insn_error (insn);
! 	      }
! 	    else if (!asm_p)
! 	      {
! 		error ("unable to find a register to spill");
! 		fatal_insn ("this is the insn:", insn);
! 	      }
  	  }
!       bitmap_clear (&failed_reload_insns);
!     }
!   free (update_hard_regno_preference_check);
    bitmap_clear (&failed_reload_pseudos);
!   return spill_p;
  }
diff -Nrcpad gcc-16-20260201/gcc/lto/ChangeLog gcc-16-20260208/gcc/lto/ChangeLog
*** gcc-16-20260201/gcc/lto/ChangeLog	Sun Feb  1 22:32:08 2026
--- gcc-16-20260208/gcc/lto/ChangeLog	Sun Feb  8 22:32:07 2026
***************
*** 1,3 ****
--- 1,14 ----
+ 2026-02-06  Torbjörn SVENSSON  <torbjorn.svensson@foss.st.com>
+ 
+ 	PR middle-end/123892
+ 	* lto-common.cc: Replace CONST_CAST with const_cast<>.
+ 	* lto.cc: Likewise.
+ 
+ 2026-02-06  Torbjörn SVENSSON  <torbjorn.svensson@foss.st.com>
+ 
+ 	PR middle-end/123892
+ 	* lto-common.cc: Replace CONST_CAST_TREE with const_cast<tree>.
+ 
  2026-01-11  Michal Jires  <mjires@suse.cz>
  
  	* lto-symtab.cc (lto_symtab_merge_symbols): Set body_removed
diff -Nrcpad gcc-16-20260201/gcc/lto/lto-common.cc gcc-16-20260208/gcc/lto/lto-common.cc
*** gcc-16-20260201/gcc/lto/lto-common.cc	Sun Feb  1 22:32:08 2026
--- gcc-16-20260208/gcc/lto/lto-common.cc	Sun Feb  8 22:32:07 2026
*************** free_with_string (void *arg)
*** 96,102 ****
  {
    struct lto_section_slot *s = (struct lto_section_slot *)arg;
  
!   free (CONST_CAST (char *, s->name));
    free (arg);
  }
  
--- 96,102 ----
  {
    struct lto_section_slot *s = (struct lto_section_slot *)arg;
  
!   free (const_cast<char *> (s->name));
    free (arg);
  }
  
*************** gimple_canonical_type_eq (const void *p1
*** 397,404 ****
  {
    const_tree t1 = (const_tree) p1;
    const_tree t2 = (const_tree) p2;
!   return gimple_canonical_types_compatible_p (CONST_CAST_TREE (t1),
! 					      CONST_CAST_TREE (t2));
  }
  
  /* Main worker for gimple_register_canonical_type.  */
--- 397,404 ----
  {
    const_tree t1 = (const_tree) p1;
    const_tree t2 = (const_tree) p2;
!   return gimple_canonical_types_compatible_p (const_cast<tree> (t1),
! 					      const_cast<tree> (t2));
  }
  
  /* Main worker for gimple_register_canonical_type.  */
*************** get_section_data (struct lto_file_decl_d
*** 2504,2510 ****
        *len = f_slot->len;
      }
  
!   free (CONST_CAST (char *, section_name));
    return data;
  }
  
--- 2504,2510 ----
        *len = f_slot->len;
      }
  
!   free (const_cast<char *> (section_name));
    return data;
  }
  
*************** free_section_data (struct lto_file_decl_
*** 2531,2537 ****
  
    munmap ((caddr_t) computed_offset, computed_len);
  #else
!   free (CONST_CAST(char *, offset));
  #endif
  }
  
--- 2531,2537 ----
  
    munmap ((caddr_t) computed_offset, computed_len);
  #else
!   free (const_cast<char *> (offset));
  #endif
  }
  
diff -Nrcpad gcc-16-20260201/gcc/lto/lto.cc gcc-16-20260208/gcc/lto/lto.cc
*** gcc-16-20260201/gcc/lto/lto.cc	Sun Feb  1 22:32:08 2026
--- gcc-16-20260208/gcc/lto/lto.cc	Sun Feb  8 22:32:07 2026
*************** stream_out (char *temp_filename, lto_sym
*** 180,186 ****
    streamer_dump_file = dump_begin (TDI_lto_stream_out, NULL, part);
    ipa_write_optimization_summaries (encoder, part == 0);
  
!   free (CONST_CAST (char *, file->filename));
  
    lto_set_current_out_file (NULL);
    lto_obj_file_close (file);
--- 180,186 ----
    streamer_dump_file = dump_begin (TDI_lto_stream_out, NULL, part);
    ipa_write_optimization_summaries (encoder, part == 0);
  
!   free (const_cast<char *> (file->filename));
  
    lto_set_current_out_file (NULL);
    lto_obj_file_close (file);
diff -Nrcpad gcc-16-20260201/gcc/lto-section-in.cc gcc-16-20260208/gcc/lto-section-in.cc
*** gcc-16-20260201/gcc/lto-section-in.cc	Sun Feb  1 22:32:08 2026
--- gcc-16-20260208/gcc/lto-section-in.cc	Sun Feb  8 22:32:07 2026
*************** lto_free_section_data (struct lto_file_d
*** 225,231 ****
    /* The underlying data address has been extracted from the mapping header.
       Free that, then free the allocated uncompression buffer.  */
    (free_section_f) (file_data, section_type, name, header->data, header->len);
!   free (CONST_CAST (char *, real_data));
  }
  
  /* Free data allocated by lto_get_raw_section_data.  */
--- 225,231 ----
    /* The underlying data address has been extracted from the mapping header.
       Free that, then free the allocated uncompression buffer.  */
    (free_section_f) (file_data, section_type, name, header->data, header->len);
!   free (const_cast<char *> (real_data));
  }
  
  /* Free data allocated by lto_get_raw_section_data.  */
*************** renaming_slot_free (void *slot)
*** 321,328 ****
  {
    struct lto_renaming_slot *s = (struct lto_renaming_slot *) slot;
  
!   free (CONST_CAST (void *, (const void *) s->old_name));
!   free (CONST_CAST (void *, (const void *) s->new_name));
    free ((void *) s);
  }
  
--- 321,328 ----
  {
    struct lto_renaming_slot *s = (struct lto_renaming_slot *) slot;
  
!   free (const_cast<void *> ((const void *) s->old_name));
!   free (const_cast<void *> ((const void *) s->new_name));
    free ((void *) s);
  }
  
diff -Nrcpad gcc-16-20260201/gcc/lto-wrapper.cc gcc-16-20260208/gcc/lto-wrapper.cc
*** gcc-16-20260201/gcc/lto-wrapper.cc	Sun Feb  1 22:32:08 2026
--- gcc-16-20260208/gcc/lto-wrapper.cc	Sun Feb  8 22:32:07 2026
*************** make_exists (void)
*** 1401,1407 ****
    int exit_status = 0;
    int err = 0;
    const char *errmsg
!     = pex_one (PEX_SEARCH, make_args[0], CONST_CAST (char **, make_args),
  	       "make", NULL, NULL, &exit_status, &err);
    freeargv (make_argv);
    return errmsg == NULL && exit_status == 0 && err == 0;
--- 1401,1407 ----
    int exit_status = 0;
    int err = 0;
    const char *errmsg
!     = pex_one (PEX_SEARCH, make_args[0], const_cast<char **> (make_args),
  	       "make", NULL, NULL, &exit_status, &err);
    freeargv (make_argv);
    return errmsg == NULL && exit_status == 0 && err == 0;
*************** cont1:
*** 1929,1935 ****
  
    new_argv = XOBFINISH (&argv_obstack, const char **);
    argv_ptr = &new_argv[new_head_argc];
!   fork_execute (new_argv[0], CONST_CAST (char **, new_argv), true,
  		"ltrans_args");
  
    /* Copy the early generated debug info from the objects to temporary
--- 1929,1935 ----
  
    new_argv = XOBFINISH (&argv_obstack, const char **);
    argv_ptr = &new_argv[new_head_argc];
!   fork_execute (new_argv[0], const_cast<char **> (new_argv), true,
  		"ltrans_args");
  
    /* Copy the early generated debug info from the objects to temporary
*************** cont:
*** 2154,2160 ****
  		snprintf (argsuffix,
  			  sizeof (DUMPBASE_SUFFIX) + sizeof (".ltrans_args"),
  			  "ltrans%u.ltrans_args", i);
! 	      fork_execute (new_argv[0], CONST_CAST (char **, new_argv),
  			    true, save_temps ? argsuffix : NULL);
  	      if (!ltrans_cache)
  		maybe_unlink (input_names[i]);
--- 2154,2160 ----
  		snprintf (argsuffix,
  			  sizeof (DUMPBASE_SUFFIX) + sizeof (".ltrans_args"),
  			  "ltrans%u.ltrans_args", i);
! 	      fork_execute (new_argv[0], const_cast<char **> (new_argv),
  			    true, save_temps ? argsuffix : NULL);
  	      if (!ltrans_cache)
  		maybe_unlink (input_names[i]);
*************** cont:
*** 2206,2212 ****
  	  obstack_ptr_grow (&argv_obstack, NULL);
  	  new_argv = XOBFINISH (&argv_obstack, const char **);
  
! 	  pex = collect_execute (new_argv[0], CONST_CAST (char **, new_argv),
  				 NULL, NULL, PEX_SEARCH, false, NULL);
  	  do_wait (new_argv[0], pex);
  	  freeargv (make_argv);
--- 2206,2212 ----
  	  obstack_ptr_grow (&argv_obstack, NULL);
  	  new_argv = XOBFINISH (&argv_obstack, const char **);
  
! 	  pex = collect_execute (new_argv[0], const_cast<char **> (new_argv),
  				 NULL, NULL, PEX_SEARCH, false, NULL);
  	  do_wait (new_argv[0], pex);
  	  freeargv (make_argv);
diff -Nrcpad gcc-16-20260201/gcc/match.pd gcc-16-20260208/gcc/match.pd
*** gcc-16-20260201/gcc/match.pd	Sun Feb  1 22:32:08 2026
--- gcc-16-20260208/gcc/match.pd	Sun Feb  8 22:32:07 2026
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 8368,8373 ****
--- 8368,8383 ----
         sign extension followed by AND with C will achieve the effect.  */
      (bit_and (convert @0) @1)))))
  
+ /* (A | (convert?)(A != 0)) EQ|NE 0 -> A EQ|NE 0 (PR114969)
+ 
+    The NE variant of this pattern is produced by the C++ code:
+ 
+    (bool)(std::max (ulong_A, 0) | (ulong_A ? 1 : 0)).  */
+ (for cmp (eq ne)
+  (simplify
+   (cmp (bit_ior:c @0 (convert? (ne @0 integer_zerop))) integer_zerop)
+   (cmp @0 { build_zero_cst (TREE_TYPE (@0)); })))
+ 
  /* When the addresses are not directly of decls compare base and offset.
     This implements some remaining parts of fold_comparison address
     comparisons but still no complete part of it.  Still it is good
diff -Nrcpad gcc-16-20260201/gcc/omp-offload.cc gcc-16-20260208/gcc/omp-offload.cc
*** gcc-16-20260201/gcc/omp-offload.cc	Sun Feb  1 22:32:08 2026
--- gcc-16-20260208/gcc/omp-offload.cc	Sun Feb  8 22:32:07 2026
*************** oacc_parse_default_dims (const char *dim
*** 916,922 ****
  	      const char *eptr;
  
  	      errno = 0;
! 	      val = strtol (pos, CONST_CAST (char **, &eptr), 10);
  	      if (errno || val <= 0 || (int) val != val)
  		goto malformed;
  	      pos = eptr;
--- 916,922 ----
  	      const char *eptr;
  
  	      errno = 0;
! 	      val = strtol (pos, const_cast<char **> (&eptr), 10);
  	      if (errno || val <= 0 || (int) val != val)
  		goto malformed;
  	      pos = eptr;
diff -Nrcpad gcc-16-20260201/gcc/optabs.cc gcc-16-20260208/gcc/optabs.cc
*** gcc-16-20260201/gcc/optabs.cc	Sun Feb  1 22:32:08 2026
--- gcc-16-20260208/gcc/optabs.cc	Sun Feb  8 22:32:07 2026
*************** expand_vec_perm_const (machine_mode mode
*** 6732,6738 ****
      v1 = v0;
    v1 = force_reg (mode, v1);
  
!   /* Otherwise expand as a fully variable permuation.  */
  
    /* The optabs are only defined for selectors with the same width
       as the values being permuted.  */
--- 6732,6738 ----
      v1 = v0;
    v1 = force_reg (mode, v1);
  
!   /* Otherwise expand as a fully variable permutation.  */
  
    /* The optabs are only defined for selectors with the same width
       as the values being permuted.  */
diff -Nrcpad gcc-16-20260201/gcc/opts-diagnostic.cc gcc-16-20260208/gcc/opts-diagnostic.cc
*** gcc-16-20260201/gcc/opts-diagnostic.cc	Sun Feb  1 22:32:08 2026
--- gcc-16-20260208/gcc/opts-diagnostic.cc	Sun Feb  8 22:32:07 2026
*************** public:
*** 94,102 ****
    const char *
    get_base_filename () const final override
    {
!     return (m_opts.x_dump_base_name
! 	    ? m_opts.x_dump_base_name
! 	    : m_opts.x_main_input_basename);
    }
  
    const gcc_options &m_opts;
--- 94,100 ----
    const char *
    get_base_filename () const final override
    {
!     return get_diagnostic_file_output_basename (m_opts);
    }
  
    const gcc_options &m_opts;
*************** handle_OPT_fdiagnostics_set_output_ (con
*** 170,172 ****
--- 168,191 ----
    if (auto sink = try_to_make_sink (opts, dc, option_name, unparsed_spec, loc))
      dc.set_sink (std::move (sink));
  }
+ 
+ /* Return the base name to use when choosing names for output file for
+    diagnostic sinks (e.g. BASENAME.sarif or BASENAME.html).  */
+ 
+ const char *
+ get_diagnostic_file_output_basename (const gcc_options &opts)
+ {
+   /* This might have been called before finish_options, which prepends
+      the dump dir to the dump base name.  If so, make a prepended copy
+      now and use it.  */
+   if (opts.x_dump_base_name
+       && ! opts.x_dump_base_name_prefixed)
+     if (const char *prepended_dump_base_name
+ 	  = maybe_prepend_dump_dir_name (opts))
+       /* Allocated in opts_obstack.  */
+       return prepended_dump_base_name;
+ 
+   return (opts.x_dump_base_name
+ 	  ? opts.x_dump_base_name
+ 	  : opts.x_main_input_basename);
+ }
diff -Nrcpad gcc-16-20260201/gcc/opts-diagnostic.h gcc-16-20260208/gcc/opts-diagnostic.h
*** gcc-16-20260201/gcc/opts-diagnostic.h	Sun Feb  1 22:32:08 2026
--- gcc-16-20260208/gcc/opts-diagnostic.h	Sun Feb  8 22:32:07 2026
*************** handle_OPT_fdiagnostics_set_output_ (con
*** 86,89 ****
--- 86,93 ----
  				     diagnostics::context &dc,
  				     const char *arg,
  				     location_t loc);
+ 
+ extern const char *
+ get_diagnostic_file_output_basename (const gcc_options &opts);
+ 
  #endif
diff -Nrcpad gcc-16-20260201/gcc/opts.cc gcc-16-20260208/gcc/opts.cc
*** gcc-16-20260201/gcc/opts.cc	Sun Feb  1 22:32:08 2026
--- gcc-16-20260208/gcc/opts.cc	Sun Feb  8 22:32:07 2026
*************** validate_ipa_reorder_locality_lto_partit
*** 1070,1075 ****
--- 1070,1106 ----
    validated_p = true;
  }
  
+ /* If OPTS.x_dump_base_name doesn't contain any directory separators
+    and has not had OPTS.x_dump_dir_name prepended to it, generate
+    a new string in opts_obstack that has the dump_dir_name prepended to
+    the dump_base_name.  */
+ 
+ const char *
+ maybe_prepend_dump_dir_name (const gcc_options &opts)
+ {
+   const char *sep = opts.x_dump_base_name;
+ 
+   for (; *sep; sep++)
+     if (IS_DIR_SEPARATOR (*sep))
+       break;
+ 
+   if (*sep)
+     {
+       /* If dump_base_name contains subdirectories, don't prepend
+ 	 anything.  */
+       return nullptr;
+     }
+ 
+   if (opts.x_dump_dir_name)
+     {
+       /* We have a DUMP_DIR_NAME, prepend that.  */
+       return opts_concat (opts.x_dump_dir_name,
+ 			  opts.x_dump_base_name, NULL);
+     }
+ 
+   return nullptr;
+ }
+ 
  /* After all options at LOC have been read into OPTS and OPTS_SET,
     finalize settings of those options and diagnose incompatible
     combinations.  */
*************** finish_options (struct gcc_options *opts
*** 1080,1098 ****
    if (opts->x_dump_base_name
        && ! opts->x_dump_base_name_prefixed)
      {
!       const char *sep = opts->x_dump_base_name;
! 
!       for (; *sep; sep++)
! 	if (IS_DIR_SEPARATOR (*sep))
! 	  break;
! 
!       if (*sep)
! 	/* If dump_base_path contains subdirectories, don't prepend
! 	   anything.  */;
!       else if (opts->x_dump_dir_name)
! 	/* We have a DUMP_DIR_NAME, prepend that.  */
! 	opts->x_dump_base_name = opts_concat (opts->x_dump_dir_name,
! 					      opts->x_dump_base_name, NULL);
  
        /* It is definitely prefixed now.  */
        opts->x_dump_base_name_prefixed = true;
--- 1111,1119 ----
    if (opts->x_dump_base_name
        && ! opts->x_dump_base_name_prefixed)
      {
!       if (const char *prepended_dump_base_name
! 	  = maybe_prepend_dump_dir_name (*opts))
! 	opts->x_dump_base_name = prepended_dump_base_name;
  
        /* It is definitely prefixed now.  */
        opts->x_dump_base_name_prefixed = true;
*************** common_handle_option (struct gcc_options
*** 3023,3030 ****
  
      case OPT_fdiagnostics_format_:
  	{
! 	  const char *basename = (opts->x_dump_base_name ? opts->x_dump_base_name
! 				  : opts->x_main_input_basename);
  	  gcc_assert (dc);
  	  diagnostics::output_format_init (*dc,
  					   opts->x_main_input_filename, basename,
--- 3044,3050 ----
  
      case OPT_fdiagnostics_format_:
  	{
! 	  const char *basename = get_diagnostic_file_output_basename (*opts);
  	  gcc_assert (dc);
  	  diagnostics::output_format_init (*dc,
  					   opts->x_main_input_filename, basename,
diff -Nrcpad gcc-16-20260201/gcc/opts.h gcc-16-20260208/gcc/opts.h
*** gcc-16-20260201/gcc/opts.h	Sun Feb  1 22:32:08 2026
--- gcc-16-20260208/gcc/opts.h	Sun Feb  8 22:32:07 2026
*************** struct switchstr
*** 577,580 ****
--- 577,583 ----
  extern label_text
  get_option_url_suffix (int option_index, unsigned lang_mask);
  
+ extern const char *
+ maybe_prepend_dump_dir_name (const gcc_options &opts);
+ 
  #endif
diff -Nrcpad gcc-16-20260201/gcc/params.opt gcc-16-20260208/gcc/params.opt
*** gcc-16-20260201/gcc/params.opt	Sun Feb  1 22:32:08 2026
--- gcc-16-20260208/gcc/params.opt	Sun Feb  8 22:32:07 2026
***************
*** 24,30 ****
  
  -param=align-loop-iterations=
  Common Joined UInteger Var(param_align_loop_iterations) Init(4) Param Optimization
! Loops iterating at least selected number of iterations will get loop alignment.
  
  -param=align-threshold=
  Common Joined UInteger Var(param_align_threshold) Init(100) IntegerRange(1, 65536) Param Optimization
--- 24,30 ----
  
  -param=align-loop-iterations=
  Common Joined UInteger Var(param_align_loop_iterations) Init(4) Param Optimization
! Loops iterating at least selected number of iterations get loop alignment.
  
  -param=align-threshold=
  Common Joined UInteger Var(param_align_threshold) Init(100) IntegerRange(1, 65536) Param Optimization
*************** Whether the scheduling description is mo
*** 80,86 ****
  
  -param=hwasan-instrument-stack=
  Common Joined UInteger Var(param_hwasan_instrument_stack) Init(1) IntegerRange(0, 1) Param Optimization
! Enable hwasan instrumentation of statically sized stack-allocated variables.
  
  -param=hwasan-random-frame-tag=
  Common Joined UInteger Var(param_hwasan_random_frame_tag) Init(1) IntegerRange(0, 1) Param Optimization
--- 80,86 ----
  
  -param=hwasan-instrument-stack=
  Common Joined UInteger Var(param_hwasan_instrument_stack) Init(1) IntegerRange(0, 1) Param Optimization
! Enable hwasan instrumentation of statically-sized stack-allocated variables.
  
  -param=hwasan-random-frame-tag=
  Common Joined UInteger Var(param_hwasan_random_frame_tag) Init(1) IntegerRange(0, 1) Param Optimization
*************** Set the estimated probability in percent
*** 124,138 ****
  
  -param=builtin-string-cmp-inline-length=
  Common Joined UInteger Var(param_builtin_string_cmp_inline_length) Init(3) IntegerRange(0, 100) Param Optimization
! The maximum length of a constant string for a builtin string cmp call eligible for inlining. The default value is 3.
  
  -param=case-values-threshold=
  Common Joined UInteger Var(param_case_values_threshold) Param Optimization
! The smallest number of different values for which it is best to use a jump-table instead of a tree of conditional branches, if 0, use the default for the machine.
  
  -param=comdat-sharing-probability=
  Common Joined UInteger Var(param_comdat_sharing_probability) Init(20) Param Optimization
! Probability that COMDAT function will be shared with different compilation unit.
  
  -param=cxx-max-namespaces-for-diagnostic-help=
  Common Joined UInteger Var(param_cxx_max_namespaces_for_diagnostic_help) Init(1000) Param
--- 124,138 ----
  
  -param=builtin-string-cmp-inline-length=
  Common Joined UInteger Var(param_builtin_string_cmp_inline_length) Init(3) IntegerRange(0, 100) Param Optimization
! The maximum length of a constant string for a builtin string comparison call eligible for inlining. The default value is 3.
  
  -param=case-values-threshold=
  Common Joined UInteger Var(param_case_values_threshold) Param Optimization
! The smallest number of different values for which it is best to use a jump-table instead of a tree of conditional branches.  If 0, use the default for the machine.
  
  -param=comdat-sharing-probability=
  Common Joined UInteger Var(param_comdat_sharing_probability) Init(20) Param Optimization
! Probability that COMDAT function is shared with a different compilation unit.
  
  -param=cxx-max-namespaces-for-diagnostic-help=
  Common Joined UInteger Var(param_cxx_max_namespaces_for_diagnostic_help) Init(1000) Param
*************** Maximal estimated growth of function bod
*** 152,166 ****
  
  -param=file-cache-files=
  Common Joined UInteger Var(param_file_cache_files) Init(16) Param
! Max number of files in the file cache.
  
  -param=file-cache-lines=
  Common Joined UInteger Var(param_file_cache_lines) Init(0) Param
! Max number of lines to index into file cache. When 0 this is automatically sized.
  
  -param=fsm-scale-path-stmts=
  Common Joined UInteger Var(param_fsm_scale_path_stmts) Init(2) IntegerRange(1, 10) Param Optimization
! Scale factor to apply to the number of statements in a threading path crossing a loop backedge when comparing to max-jump-thread-duplication-stmts.
  
  -param=fully-pipelined-fma=
  Common Joined UInteger Var(param_fully_pipelined_fma) Init(0) IntegerRange(0, 1) Param Optimization
--- 152,166 ----
  
  -param=file-cache-files=
  Common Joined UInteger Var(param_file_cache_files) Init(16) Param
! Maximum number of files in the file cache.
  
  -param=file-cache-lines=
  Common Joined UInteger Var(param_file_cache_lines) Init(0) Param
! Maximum number of lines to index into file cache. When 0 this is automatically sized.
  
  -param=fsm-scale-path-stmts=
  Common Joined UInteger Var(param_fsm_scale_path_stmts) Init(2) IntegerRange(1, 10) Param Optimization
! Scale factor to apply to the number of statements in a threading path crossing a loop back edge when comparing to max-jump-thread-duplication-stmts.
  
  -param=fully-pipelined-fma=
  Common Joined UInteger Var(param_fully_pipelined_fma) Init(0) IntegerRange(0, 1) Param Optimization
*************** Scaling factor in calculation of maximum
*** 183,189 ****
  
  -param=gcse-unrestricted-cost=
  Common Joined UInteger Var(param_gcse_unrestricted_cost) Init(3) Param Optimization
! Cost at which GCSE optimizations will not constraint the distance an expression can travel.
  
  -param=ggc-min-expand=
  Common Joined UInteger Var(param_ggc_min_expand) Init(30) Param
--- 183,189 ----
  
  -param=gcse-unrestricted-cost=
  Common Joined UInteger Var(param_gcse_unrestricted_cost) Init(3) Param Optimization
! Cost at which GCSE optimizations does not constrain the distance an expression can travel.
  
  -param=ggc-min-expand=
  Common Joined UInteger Var(param_ggc_min_expand) Init(30) Param
*************** The denominator n of fraction 1/n of the
*** 235,241 ****
  
  -param=inline-heuristics-hint-percent=
  Common Joined UInteger Var(param_inline_heuristics_hint_percent) Init(200) Optimization IntegerRange(100, 1000000) Param
! The scale (in percents) applied to inline-insns-single and auto limits when heuristics hints that inlining is very profitable.
  
  -param=inline-min-speedup=
  Common Joined UInteger Var(param_inline_min_speedup) Init(30) Optimization IntegerRange(0, 100) Param
--- 235,241 ----
  
  -param=inline-heuristics-hint-percent=
  Common Joined UInteger Var(param_inline_heuristics_hint_percent) Init(200) Optimization IntegerRange(100, 1000000) Param
! The scale (as a percentage) applied to inline-insns-single and auto limits when heuristics hints that inlining is very profitable.
  
  -param=inline-min-speedup=
  Common Joined UInteger Var(param_inline_min_speedup) Init(30) Optimization IntegerRange(0, 100) Param
*************** The minimal estimated speedup allowing i
*** 243,249 ****
  
  -param=inline-unit-growth=
  Common Joined UInteger Var(param_inline_unit_growth) Init(40) Optimization Param
! How much can given compilation unit grow because of the inlining (in percent).
  
  -param=integer-share-limit=
  Common Joined UInteger Var(param_integer_share_limit) Init(251) IntegerRange(2, 65536) Param
--- 243,249 ----
  
  -param=inline-unit-growth=
  Common Joined UInteger Var(param_inline_unit_growth) Init(40) Optimization Param
! How much can given compilation unit grow because of the inlining (as a percentage).
  
  -param=integer-share-limit=
  Common Joined UInteger Var(param_integer_share_limit) Init(251) IntegerRange(2, 65536) Param
*************** When propagating IPA-CP effect estimates
*** 271,289 ****
  
  -param=ipa-cp-recursion-penalty=
  Common Joined UInteger Var(param_ipa_cp_recursion_penalty) Init(40) IntegerRange(0, 100) Param Optimization
! Percentage penalty the recursive functions will receive when they are evaluated for cloning.
  
  -param=ipa-cp-single-call-penalty=
  Common Joined UInteger Var(param_ipa_cp_single_call_penalty) Init(15) IntegerRange(0, 100) Param Optimization
! Percentage penalty functions containing a single call to another function will receive when they are evaluated for cloning.
  
  -param=ipa-cp-sweeps=
  Common Joined UInteger Var(param_ipa_cp_sweeps) Init(3) IntegerRange(1, 100) Param Optimization
! The number of times the interprocedural constant propagation will traverse all functions to make cloning decisions.
  
  -param=ipa-cp-unit-growth=
  Common Joined UInteger Var(param_ipa_cp_unit_growth) Init(10) Param Optimization
! How much can given compilation unit grow because of the interprocedural constant propagation (in percent).
  
  -param=ipa-cp-large-unit-insns=
  Common Joined UInteger Var(param_ipa_cp_large_unit_insns) Optimization Init(16000) Param
--- 271,289 ----
  
  -param=ipa-cp-recursion-penalty=
  Common Joined UInteger Var(param_ipa_cp_recursion_penalty) Init(40) IntegerRange(0, 100) Param Optimization
! Percentage penalty recursive functions receive when they are evaluated for cloning.
  
  -param=ipa-cp-single-call-penalty=
  Common Joined UInteger Var(param_ipa_cp_single_call_penalty) Init(15) IntegerRange(0, 100) Param Optimization
! Percentage penalty functions containing a single call to another function receive when they are evaluated for cloning.
  
  -param=ipa-cp-sweeps=
  Common Joined UInteger Var(param_ipa_cp_sweeps) Init(3) IntegerRange(1, 100) Param Optimization
! The number of times the interprocedural constant propagation traverses all functions to make cloning decisions.
  
  -param=ipa-cp-unit-growth=
  Common Joined UInteger Var(param_ipa_cp_unit_growth) Init(10) Param Optimization
! How much can given compilation unit grow because of the interprocedural constant propagation (as a percentage).
  
  -param=ipa-cp-large-unit-insns=
  Common Joined UInteger Var(param_ipa_cp_large_unit_insns) Optimization Init(16000) Param
*************** Maximum number of statements visited dur
*** 299,305 ****
  
  -param=ipa-max-aa-steps=
  Common Joined UInteger Var(param_ipa_max_aa_steps) Init(25000) Param Optimization
! Maximum number of statements that will be visited by IPA formal parameter analysis based on alias analysis in any given function.
  
  -param=ipa-max-agg-items=
  Common Joined UInteger Var(param_ipa_max_agg_items) Init(16) Param Optimization
--- 299,305 ----
  
  -param=ipa-max-aa-steps=
  Common Joined UInteger Var(param_ipa_max_aa_steps) Init(25000) Param Optimization
! Maximum number of statements that are visited by IPA formal parameter analysis based on alias analysis in any given function.
  
  -param=ipa-max-agg-items=
  Common Joined UInteger Var(param_ipa_max_agg_items) Init(16) Param Optimization
*************** Maximal number of boundary endpoints of
*** 319,325 ****
  
  -param=ipa-sra-deref-prob-threshold=
  Common Joined UInteger Var(param_ipa_sra_deref_prob_threshold) Init(50) IntegerRange(0, 100) Param Optimization
! Minimum probability (in percent) of dereferencing of a function pointer parameter for it to be considered for replacement with simple values.
  
  -param=ipa-sra-max-replacements=
  Common Joined UInteger Var(param_ipa_sra_max_replacements) Optimization Init(8) IntegerRange(0, 16) Param
--- 319,325 ----
  
  -param=ipa-sra-deref-prob-threshold=
  Common Joined UInteger Var(param_ipa_sra_deref_prob_threshold) Init(50) IntegerRange(0, 100) Param Optimization
! Minimum probability (as a percentage) of dereferencing of a function pointer parameter for it to be considered for replacement with simple values.
  
  -param=ipa-sra-max-replacements=
  Common Joined UInteger Var(param_ipa_sra_max_replacements) Optimization Init(8) IntegerRange(0, 16) Param
*************** The number of registers in each class ke
*** 339,345 ****
  
  -param=ira-max-conflict-table-size=
  Common Joined UInteger Var(param_ira_max_conflict_table_size) Init(1000) Param Optimization
! Max size of conflict table in MB.
  
  -param=ira-simple-lra-insn-threshold=
  Common Joined UInteger Var(param_ira_simple_lra_insn_threshold) Init(1000) Param Optimization
--- 339,345 ----
  
  -param=ira-max-conflict-table-size=
  Common Joined UInteger Var(param_ira_max_conflict_table_size) Init(1000) Param Optimization
! Maximum size of conflict table in MB.
  
  -param=ira-simple-lra-insn-threshold=
  Common Joined UInteger Var(param_ira_simple_lra_insn_threshold) Init(1000) Param Optimization
*************** Approximate function insn number in 1K u
*** 347,377 ****
  
  -param=ira-max-loops-num=
  Common Joined UInteger Var(param_ira_max_loops_num) Init(100) Param Optimization
! Max loops number for regional RA.
  
  -param=ira-consider-dup-in-all-alts=
  Common Joined UInteger Var(param_ira_consider_dup_in_all_alts) Init(1) IntegerRange(0, 1) Param Optimization
! Control ira to consider matching constraint (duplicated operand number) heavily in all available alternatives for preferred register class.  If it is set as zero, it means ira only respects the matching constraint when it's in the only available alternative with an appropriate register class.  Otherwise, it means ira will check all available alternatives for preferred register class even if it has found some choice with an appropriate register class and respect the found qualified matching constraint.
  
  -param=iv-always-prune-cand-set-bound=
  Common Joined UInteger Var(param_iv_always_prune_cand_set_bound) Init(10) Param Optimization
! If number of candidates in the set is smaller, we always try to remove unused ivs during its optimization.
  
  -param=iv-consider-all-candidates-bound=
  Common Joined UInteger Var(param_iv_consider_all_candidates_bound) Init(40) Param Optimization
! Bound on number of candidates below that all candidates are considered in iv optimizations.
  
  -param=iv-max-considered-uses=
  Common Joined UInteger Var(param_iv_max_considered_uses) Init(250) Param Optimization
! Bound on number of iv uses in loop optimized in iv optimizations.
  
  -param=jump-table-max-growth-ratio-for-size=
  Common Joined UInteger Var(param_jump_table_max_growth_ratio_for_size) Init(300) IntegerRange(0, 10000) Param Optimization
! The maximum code size growth ratio when expanding into a jump table (in percent).  The parameter is used when optimizing for size.
  
  -param=jump-table-max-growth-ratio-for-speed=
  Common Joined UInteger Var(param_jump_table_max_growth_ratio_for_speed) Init(800) IntegerRange(0, 10000) Param Optimization
! The maximum code size growth ratio when expanding into a jump table (in percent).  The parameter is used when optimizing for speed.
  
  -param=l1-cache-line-size=
  Common Joined UInteger Var(param_l1_cache_line_size) Init(32) Param Optimization
--- 347,377 ----
  
  -param=ira-max-loops-num=
  Common Joined UInteger Var(param_ira_max_loops_num) Init(100) Param Optimization
! Maximum number of loops for regional RA.
  
  -param=ira-consider-dup-in-all-alts=
  Common Joined UInteger Var(param_ira_consider_dup_in_all_alts) Init(1) IntegerRange(0, 1) Param Optimization
! Control IRA to consider matching constraint (duplicated operand number) heavily in all available alternatives for preferred register class.  If it is set as zero, it means IRA only respects the matching constraint when it's in the only available alternative with an appropriate register class.  Otherwise, it means IRA checks all available alternatives for preferred register class even if it has found some choice with an appropriate register class and respect the found qualified matching constraint.
  
  -param=iv-always-prune-cand-set-bound=
  Common Joined UInteger Var(param_iv_always_prune_cand_set_bound) Init(10) Param Optimization
! If number of candidates in the set is smaller, we always try to remove unused induction variables during its optimization.
  
  -param=iv-consider-all-candidates-bound=
  Common Joined UInteger Var(param_iv_consider_all_candidates_bound) Init(40) Param Optimization
! Bound on number of candidates below that all candidates are considered in induction variable optimizations.
  
  -param=iv-max-considered-uses=
  Common Joined UInteger Var(param_iv_max_considered_uses) Init(250) Param Optimization
! Bound on number of induction variable uses in loop optimized in IV optimizations.
  
  -param=jump-table-max-growth-ratio-for-size=
  Common Joined UInteger Var(param_jump_table_max_growth_ratio_for_size) Init(300) IntegerRange(0, 10000) Param Optimization
! The maximum code size growth ratio when expanding into a jump table (as a percentage).  The parameter is used when optimizing for size.
  
  -param=jump-table-max-growth-ratio-for-speed=
  Common Joined UInteger Var(param_jump_table_max_growth_ratio_for_speed) Init(800) IntegerRange(0, 10000) Param Optimization
! The maximum code size growth ratio when expanding into a jump table (as a percentage).  The parameter is used when optimizing for speed.
  
  -param=l1-cache-line-size=
  Common Joined UInteger Var(param_l1_cache_line_size) Init(32) Param Optimization
*************** The size of L2 cache.
*** 403,409 ****
  
  -param=large-function-growth=
  Common Joined UInteger Var(param_large_function_growth) Optimization Init(100) Param
! Maximal growth due to inlining of large function (in percent).
  
  -param=large-function-insns=
  Common Joined UInteger Var(param_large_function_insns) Optimization Init(2700) Param
--- 403,409 ----
  
  -param=large-function-growth=
  Common Joined UInteger Var(param_large_function_growth) Optimization Init(100) Param
! Maximal growth due to inlining of large function (as a percentage).
  
  -param=large-function-insns=
  Common Joined UInteger Var(param_large_function_insns) Optimization Init(2700) Param
*************** The size of stack frame to be considered
*** 415,421 ****
  
  -param=large-stack-frame-growth=
  Common Joined UInteger Var(param_stack_frame_growth) Optimization Init(1000) Param
! Maximal stack frame growth due to inlining (in percent).
  
  -param=large-unit-insns=
  Common Joined UInteger Var(param_large_unit_insns) Optimization Init(10000) Param
--- 415,421 ----
  
  -param=large-stack-frame-growth=
  Common Joined UInteger Var(param_stack_frame_growth) Optimization Init(1000) Param
! Maximal stack frame growth due to inlining (as a percentage).
  
  -param=large-unit-insns=
  Common Joined UInteger Var(param_large_unit_insns) Optimization Init(10000) Param
*************** The maximum number of instructions in an
*** 463,469 ****
  
  -param=lra-inheritance-ebb-probability-cutoff=
  Common Joined UInteger Var(param_lra_inheritance_ebb_probability_cutoff) Init(40) IntegerRange(0, 100) Param Optimization
! Minimal fall-through edge probability in percentage used to add BB to inheritance EBB in LRA.
  
  -param=lra-max-considered-reload-pseudos=
  Common Joined UInteger Var(param_lra_max_considered_reload_pseudos) Init(500) Param Optimization
--- 463,469 ----
  
  -param=lra-inheritance-ebb-probability-cutoff=
  Common Joined UInteger Var(param_lra_inheritance_ebb_probability_cutoff) Init(40) IntegerRange(0, 100) Param Optimization
! Minimal fall-through edge probability as a percentage, used to add BB to inheritance EBB in LRA.
  
  -param=lra-max-considered-reload-pseudos=
  Common Joined UInteger Var(param_lra_max_considered_reload_pseudos) Init(500) Param Optimization
*************** Maximal size of a partition for LTO (in
*** 483,489 ****
  
  -param=lto-max-streaming-parallelism=
  Common Joined UInteger Var(param_max_lto_streaming_parallelism) Init(32) IntegerRange(1, 65536) Param
! maximal number of LTO partitions streamed in parallel.
  
  -param=lto-min-partition=
  Common Joined UInteger Var(param_min_partition_size) Init(10000) Param
--- 483,489 ----
  
  -param=lto-max-streaming-parallelism=
  Common Joined UInteger Var(param_max_lto_streaming_parallelism) Init(32) IntegerRange(1, 65536) Param
! Maximal number of LTO partitions streamed in parallel.
  
  -param=lto-min-partition=
  Common Joined UInteger Var(param_min_partition_size) Init(10000) Param
*************** Common Joined UInteger Var(param_lto_loc
*** 517,523 ****
  Size cut-off for callee including inlined calls to be cloned for a particular caller.
  
  -param=lto-max-locality-partition=
! Common Joined UInteger Var(param_max_locality_partition_size) Init(1000000) Param
  Maximal size of a locality partition for LTO (in estimated instructions). Value of 0 results in default value being used.
  
  Enum
--- 517,523 ----
  Size cut-off for callee including inlined calls to be cloned for a particular caller.
  
  -param=lto-max-locality-partition=
! Common Joined UInteger Var(param_max_locality_partition_size) Init(500000) Param
  Maximal size of a locality partition for LTO (in estimated instructions). Value of 0 results in default value being used.
  
  Enum
*************** The maximum memory locations recorded by
*** 572,578 ****
  
  -param=max-debug-marker-count=
  Common Joined UInteger Var(param_max_debug_marker_count) Init(100000) Param Optimization
! Max. count of debug markers to expand or inline.
  
  -param=max-delay-slot-insn-search=
  Common Joined UInteger Var(param_max_delay_slot_insn_search) Init(100) Param Optimization
--- 572,578 ----
  
  -param=max-debug-marker-count=
  Common Joined UInteger Var(param_max_debug_marker_count) Init(100000) Param Optimization
! Maximum count of debug markers to expand or inline.
  
  -param=max-delay-slot-insn-search=
  Common Joined UInteger Var(param_max_delay_slot_insn_search) Init(100) Param Optimization
*************** Maximum amount of iterations of the pass
*** 808,814 ****
  
  -param=max-tracked-strlens=
  Common Joined UInteger Var(param_max_tracked_strlens) Init(10000) Param Optimization
! Maximum number of strings for which strlen optimization pass will track string lengths.
  
  -param=max-tree-if-conversion-phi-args=
  Common Joined UInteger Var(param_max_tree_if_conversion_phi_args) Init(4) IntegerRange(2, 65536) Param Optimization
--- 808,814 ----
  
  -param=max-tracked-strlens=
  Common Joined UInteger Var(param_max_tracked_strlens) Init(10000) Param Optimization
! Maximum number of strings for which strlen optimization pass tracks string lengths.
  
  -param=max-tree-if-conversion-phi-args=
  Common Joined UInteger Var(param_max_tree_if_conversion_phi_args) Init(4) IntegerRange(2, 65536) Param Optimization
*************** The maximum depth of a loop nest to be u
*** 832,850 ****
  
  -param=max-variable-expansions-in-unroller=
  Common Joined UInteger Var(param_max_variable_expansions) Init(1) Param Optimization
! If -fvariable-expansion-in-unroller is used, the maximum number of times that an individual variable will be expanded during loop unrolling.
  
  -param=max-vartrack-expr-depth=
  Common Joined UInteger Var(param_max_vartrack_expr_depth) Init(12) Param Optimization
! Max. recursion depth for expanding var tracking expressions.
  
  -param=max-vartrack-reverse-op-size=
  Common Joined UInteger Var(param_max_vartrack_reverse_op_size) Init(50) Param Optimization
! Max. size of loc list for which reverse ops should be added.
  
  -param=max-vartrack-size=
  Common Joined UInteger Var(param_max_vartrack_size) Init(50000000) Param Optimization
! Max. size of var tracking hash tables.
  
  -param=max-find-base-term-values=
  Common Joined UInteger Var(param_max_find_base_term_values) Init(200) Param Optimization
--- 832,850 ----
  
  -param=max-variable-expansions-in-unroller=
  Common Joined UInteger Var(param_max_variable_expansions) Init(1) Param Optimization
! If -fvariable-expansion-in-unroller is used, the maximum number of times that an individual variable is expanded during loop unrolling.
  
  -param=max-vartrack-expr-depth=
  Common Joined UInteger Var(param_max_vartrack_expr_depth) Init(12) Param Optimization
! Maximum recursion depth for expanding var tracking expressions.
  
  -param=max-vartrack-reverse-op-size=
  Common Joined UInteger Var(param_max_vartrack_reverse_op_size) Init(50) Param Optimization
! Maximum size of loc list for which reverse ops should be added.
  
  -param=max-vartrack-size=
  Common Joined UInteger Var(param_max_vartrack_size) Init(50000000) Param Optimization
! Maximum size of var tracking hash tables.
  
  -param=max-find-base-term-values=
  Common Joined UInteger Var(param_max_find_base_term_values) Init(200) Param Optimization
*************** Inline recursively only when the probabi
*** 860,866 ****
  
  -param=min-insn-to-prefetch-ratio=
  Common Joined UInteger Var(param_min_insn_to_prefetch_ratio) Init(9) Param Optimization
! Min. ratio of insns to prefetches to enable prefetching for a loop with an unknown trip count.
  
  -param=min-loop-cond-split-prob=
  Common Joined UInteger Var(param_min_loop_cond_split_prob) Init(30) IntegerRange(0, 100) Param Optimization
--- 860,866 ----
  
  -param=min-insn-to-prefetch-ratio=
  Common Joined UInteger Var(param_min_insn_to_prefetch_ratio) Init(9) Param Optimization
! Minimum ratio of insns to prefetches to enable prefetching for a loop with an unknown trip count.
  
  -param=min-loop-cond-split-prob=
  Common Joined UInteger Var(param_min_loop_cond_split_prob) Init(30) IntegerRange(0, 100) Param Optimization
*************** Enum(parloops_schedule_type) String(runt
*** 940,946 ****
  
  -param=partial-inlining-entry-probability=
  Common Joined UInteger Var(param_partial_inlining_entry_probability) Init(70) Optimization IntegerRange(0, 100) Param
! Maximum probability of the entry BB of split region (in percent relative to entry BB of the function) to make partial inlining happen.
  
  -param=phiopt-factor-max-stmts-live=
  Common Joined UInteger Var(param_phiopt_factor_max_stmts_live) Init(5) Optimization IntegerRange(0, 100) Param
--- 940,946 ----
  
  -param=partial-inlining-entry-probability=
  Common Joined UInteger Var(param_partial_inlining_entry_probability) Init(70) Optimization IntegerRange(0, 100) Param
! Maximum probability of the entry BB of split region (as a percentage relative to entry BB of the function) to make partial inlining happen.
  
  -param=phiopt-factor-max-stmts-live=
  Common Joined UInteger Var(param_phiopt_factor_max_stmts_live) Init(5) Optimization IntegerRange(0, 100) Param
*************** The number of insns executed before pref
*** 960,966 ****
  
  -param=prefetch-min-insn-to-mem-ratio=
  Common Joined UInteger Var(param_prefetch_min_insn_to_mem_ratio) Init(3) Param Optimization
! Min. ratio of insns to mem ops to enable prefetching in a loop.
  
  -param=prefetch-minimum-stride=
  Common Joined UInteger Var(param_prefetch_minimum_stride) Init(-1) Param Optimization
--- 960,966 ----
  
  -param=prefetch-min-insn-to-mem-ratio=
  Common Joined UInteger Var(param_prefetch_min_insn_to_mem_ratio) Init(3) Param Optimization
! Minimum ratio of insns to mem ops to enable prefetching in a loop.
  
  -param=prefetch-minimum-stride=
  Common Joined UInteger Var(param_prefetch_minimum_stride) Init(-1) Param Optimization
*************** Enum(ranger_debug) String(all) Value(RAN
*** 997,1003 ****
  
  -param=ranger-logical-depth=
  Common Joined UInteger Var(param_ranger_logical_depth) Init(6) IntegerRange(1, 999) Param Optimization
! Maximum depth of logical expression evaluation ranger will look through when
  evaluating outgoing edge ranges.
  
  -param=ranger-recompute-depth=
--- 997,1003 ----
  
  -param=ranger-logical-depth=
  Common Joined UInteger Var(param_ranger_logical_depth) Init(6) IntegerRange(1, 999) Param Optimization
! Maximum depth of logical expression evaluation ranger looks through when
  evaluating outgoing edge ranges.
  
  -param=ranger-recompute-depth=
*************** outgoing range calculator.
*** 1007,1013 ****
  
  -param=relation-block-limit=
  Common Joined UInteger Var(param_relation_block_limit) Init(200) IntegerRange(0, 9999) Param Optimization
! Maximum number of relations the oracle will register in a basic block.
  
  -param=transitive-relations-work-bound=
  Common Joined UInteger Var(param_transitive_relations_work_bound) Init(256) IntegerRange(0, 9999) Param Optimization
--- 1007,1013 ----
  
  -param=relation-block-limit=
  Common Joined UInteger Var(param_relation_block_limit) Init(200) IntegerRange(0, 9999) Param Optimization
! Maximum number of relations the oracle registers in a basic block.
  
  -param=transitive-relations-work-bound=
  Common Joined UInteger Var(param_transitive_relations_work_bound) Init(256) IntegerRange(0, 9999) Param Optimization
*************** Which -fsched-pressure algorithm to appl
*** 1043,1049 ****
  
  -param=sched-spec-prob-cutoff=
  Common Joined UInteger Var(param_sched_spec_prob_cutoff) Init(40) IntegerRange(0, 100) Param Optimization
! The minimal probability of speculation success (in percents), so that speculative insn will be scheduled.
  
  -param=sched-state-edge-prob-cutoff=
  Common Joined UInteger Var(param_sched_state_edge_prob_cutoff) Init(10) IntegerRange(0, 100) Param Optimization
--- 1043,1049 ----
  
  -param=sched-spec-prob-cutoff=
  Common Joined UInteger Var(param_sched_spec_prob_cutoff) Init(40) IntegerRange(0, 100) Param Optimization
! The minimal probability of speculation success (as a percentage), so that speculative insns are scheduled.
  
  -param=sched-state-edge-prob-cutoff=
  Common Joined UInteger Var(param_sched_state_edge_prob_cutoff) Init(10) IntegerRange(0, 100) Param Optimization
*************** A factor for tuning the upper bound that
*** 1083,1089 ****
  
  -param=sms-min-sc=
  Common Joined UInteger Var(param_sms_min_sc) Init(2) IntegerRange(1, 2) Param Optimization
! The minimum value of stage count that swing modulo scheduler will generate.
  
  -param=sra-max-scalarization-size-Osize=
  Common Joined UInteger Var(param_sra_max_scalarization_size_size) Param Optimization
--- 1083,1089 ----
  
  -param=sms-min-sc=
  Common Joined UInteger Var(param_sms_min_sc) Init(2) IntegerRange(1, 2) Param Optimization
! The minimum value of stage count that swing modulo scheduler generates.
  
  -param=sra-max-scalarization-size-Osize=
  Common Joined UInteger Var(param_sra_max_scalarization_size_size) Param Optimization
*************** Maximum size, in storage units, of an ag
*** 1095,1101 ****
  
  -param=sra-max-propagations=
  Common Joined UInteger Var(param_sra_max_propagations) Param Optimization Init(32)
! Maximum number of artificial accesses to enable forward propagation that Scalar Replacement of Aggregates will keep for one local variable.
  
  -param=ssa-name-def-chain-limit=
  Common Joined UInteger Var(param_ssa_name_def_chain_limit) Init(512) Param Optimization
--- 1095,1101 ----
  
  -param=sra-max-propagations=
  Common Joined UInteger Var(param_sra_max_propagations) Param Optimization Init(32)
! Maximum number of artificial accesses to enable forward propagation that Scalar Replacement of Aggregates keeps for one local variable.
  
  -param=ssa-name-def-chain-limit=
  Common Joined UInteger Var(param_ssa_name_def_chain_limit) Init(512) Param Optimization
*************** The percentage of function, weighted by
*** 1184,1206 ****
  
  -param=tracer-max-code-growth=
  Common Joined UInteger Var(param_tracer_max_code_growth) Init(100) Param Optimization
! Maximal code growth caused by tail duplication (in percent).
  
  -param=tracer-min-branch-probability=
  Common Joined UInteger Var(param_tracer_min_branch_probability) Init(50) IntegerRange(0, 100) Param Optimization
! Stop forward growth if the probability of best edge is less than this threshold (in percent). Used when profile feedback is not available.
  
  -param=tracer-min-branch-probability-feedback=
  Common Joined UInteger Var(param_tracer_min_branch_probability_feedback) Init(80) IntegerRange(0, 100) Param Optimization
! Stop forward growth if the probability of best edge is less than this threshold (in percent). Used when profile feedback is available.
  
  -param=tracer-min-branch-ratio=
  Common Joined UInteger Var(param_tracer_min_branch_ratio) Init(10) IntegerRange(0, 100) Param Optimization
! Stop reverse growth if the reverse probability of best edge is less than this threshold (in percent).
  
  -param=tree-reassoc-width=
  Common Joined UInteger Var(param_tree_reassoc_width) IntegerRange(0, 256) Param Optimization
! Set the maximum number of instructions executed in parallel in reassociated tree.  If 0, use the target dependent heuristic.
  
  -param=tsan-distinguish-volatile=
  Common Joined UInteger Var(param_tsan_distinguish_volatile) IntegerRange(0, 1) Param
--- 1184,1206 ----
  
  -param=tracer-max-code-growth=
  Common Joined UInteger Var(param_tracer_max_code_growth) Init(100) Param Optimization
! Maximal code growth caused by tail duplication (as a percentage).
  
  -param=tracer-min-branch-probability=
  Common Joined UInteger Var(param_tracer_min_branch_probability) Init(50) IntegerRange(0, 100) Param Optimization
! Stop forward growth if the probability of best edge is less than this threshold (as a percentage). Used when profile feedback is not available.
  
  -param=tracer-min-branch-probability-feedback=
  Common Joined UInteger Var(param_tracer_min_branch_probability_feedback) Init(80) IntegerRange(0, 100) Param Optimization
! Stop forward growth if the probability of best edge is less than this threshold (as a percentage). Used when profile feedback is available.
  
  -param=tracer-min-branch-ratio=
  Common Joined UInteger Var(param_tracer_min_branch_ratio) Init(10) IntegerRange(0, 100) Param Optimization
! Stop reverse growth if the reverse probability of best edge is less than this threshold (as a percentage).
  
  -param=tree-reassoc-width=
  Common Joined UInteger Var(param_tree_reassoc_width) IntegerRange(0, 256) Param Optimization
! Set the maximum number of instructions executed in parallel in reassociated tree.  If 0, use the target-dependent heuristic.
  
  -param=tsan-distinguish-volatile=
  Common Joined UInteger Var(param_tsan_distinguish_volatile) IntegerRange(0, 1) Param
*************** Maximum number of basic blocks before VR
*** 1313,1319 ****
  
  -param=vrp-switch-limit=
  Common Joined UInteger Var(param_vrp_switch_limit) Init(50) Optimization Param
! Maximum number of outgoing edges in a switch before VRP will not process it.
  
  -param=vrp-vector-threshold=
  Common Joined UInteger Var(param_vrp_vector_threshold) Init(250) Optimization Param
--- 1313,1319 ----
  
  -param=vrp-switch-limit=
  Common Joined UInteger Var(param_vrp_switch_limit) Init(50) Optimization Param
! Maximum number of outgoing edges in a switch before VRP does not process it.
  
  -param=vrp-vector-threshold=
  Common Joined UInteger Var(param_vrp_vector_threshold) Init(250) Optimization Param
diff -Nrcpad gcc-16-20260201/gcc/passes.cc gcc-16-20260208/gcc/passes.cc
*** gcc-16-20260201/gcc/passes.cc	Sun Feb  1 22:32:08 2026
--- gcc-16-20260208/gcc/passes.cc	Sun Feb  8 22:32:07 2026
*************** pass_manager::register_one_dump_file (op
*** 887,893 ****
    set_pass_for_id (id, pass);
    full_name = concat (prefix, pass->name, num, NULL);
    register_pass_name (pass, full_name);
!   free (CONST_CAST (char *, full_name));
  }
  
  /* Register the dump files for the pass_manager starting at PASS. */
--- 887,893 ----
    set_pass_for_id (id, pass);
    full_name = concat (prefix, pass->name, num, NULL);
    register_pass_name (pass, full_name);
!   free (const_cast<char *> (full_name));
  }
  
  /* Register the dump files for the pass_manager starting at PASS. */
*************** release_dump_file_name (void)
*** 2207,2213 ****
  {
    if (dump_file_name)
      {
!       free (CONST_CAST (char *, dump_file_name));
        dump_file_name = NULL;
      }
  }
--- 2207,2213 ----
  {
    if (dump_file_name)
      {
!       free (const_cast<char *> (dump_file_name));
        dump_file_name = NULL;
      }
  }
diff -Nrcpad gcc-16-20260201/gcc/plugin.cc gcc-16-20260208/gcc/plugin.cc
*** gcc-16-20260201/gcc/plugin.cc	Sun Feb  1 22:32:08 2026
--- gcc-16-20260208/gcc/plugin.cc	Sun Feb  8 22:32:07 2026
*************** add_new_plugin (const char* plugin_name)
*** 186,192 ****
  
    if (name_is_short)
      {
!       base_name = CONST_CAST (char*, plugin_name);
  
  #if defined(__MINGW32__)
        static const char plugin_ext[] = ".dll";
--- 186,192 ----
  
    if (name_is_short)
      {
!       base_name = const_cast<char*> (plugin_name);
  
  #if defined(__MINGW32__)
        static const char plugin_ext[] = ".dll";
diff -Nrcpad gcc-16-20260201/gcc/po/ChangeLog gcc-16-20260208/gcc/po/ChangeLog
*** gcc-16-20260201/gcc/po/ChangeLog	Sun Feb  1 22:32:08 2026
--- gcc-16-20260208/gcc/po/ChangeLog	Sun Feb  8 22:32:07 2026
***************
*** 1,3 ****
--- 1,7 ----
+ 2026-02-05  Joseph Myers  <josmyers@redhat.com>
+ 
+ 	* es.po: Update.
+ 
  2026-01-27  Joseph Myers  <josmyers@redhat.com>
  
  	* sv.po: Update.
diff -Nrcpad gcc-16-20260201/gcc/po/es.po gcc-16-20260208/gcc/po/es.po
*** gcc-16-20260201/gcc/po/es.po	Sun Feb  1 22:32:08 2026
--- gcc-16-20260208/gcc/po/es.po	Sun Feb  8 22:32:07 2026
***************
*** 2,8 ****
  # Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2016, 2017, 2018, 2019, 2020 Free Software Foundation, Inc.
  # This file is distributed under the same license as the gcc package.
  # Cristian Othón Martínez Vera <cfuga@cfuga.mx>, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
! # Antonio Ceballos Roa <aceballos@gmail.com>, 2016, 2017, 2018, 2019, 2020, 2025
  #
  # Agradezco a Juan Cuquejo Mira por sus comentarios sobre esta traducción
  #
--- 2,8 ----
  # Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2016, 2017, 2018, 2019, 2020 Free Software Foundation, Inc.
  # This file is distributed under the same license as the gcc package.
  # Cristian Othón Martínez Vera <cfuga@cfuga.mx>, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
! # Antonio Ceballos Roa <aceballos@gmail.com>, 2016, 2017, 2018, 2019, 2020, 2025, 2026
  #
  # Agradezco a Juan Cuquejo Mira por sus comentarios sobre esta traducción
  #
*************** msgstr ""
*** 45,51 ****
  "Project-Id-Version: gcc 15.2.0\n"
  "Report-Msgid-Bugs-To: https://gcc.gnu.org/bugs/\n"
  "POT-Creation-Date: 2025-08-01 17:58+0000\n"
! "PO-Revision-Date: 2026-01-17 19:30+0100\n"
  "Last-Translator: Antonio Ceballos Roa <aceballos@gmail.com>\n"
  "Language-Team: Spanish <es@tp.org.es>\n"
  "Language: es\n"
--- 45,51 ----
  "Project-Id-Version: gcc 15.2.0\n"
  "Report-Msgid-Bugs-To: https://gcc.gnu.org/bugs/\n"
  "POT-Creation-Date: 2025-08-01 17:58+0000\n"
! "PO-Revision-Date: 2026-02-05 22:30+0100\n"
  "Last-Translator: Antonio Ceballos Roa <aceballos@gmail.com>\n"
  "Language-Team: Spanish <es@tp.org.es>\n"
  "Language: es\n"
*************** msgid "Specify the target architecture."
*** 11602,11771 ****
  msgstr "Especifica la arquitectura de destino."
  
  #: config/csky/csky.opt:38
! #, fuzzy, no-c-format
! #| msgid "Specify the target CPU."
  msgid "Specify the target processor."
! msgstr "Selecciona el CPU destino."
  
  #: config/csky/csky.opt:90
! #, fuzzy, no-c-format
! #| msgid "Specify the name of the target floating point hardware/format."
  msgid "Specify the target floating-point hardware/format."
! msgstr "Especifica el nombre del hardware/formato de coma flotante destino."
  
  #: config/csky/csky.opt:94
! #, fuzzy, no-c-format
! #| msgid "Generate debug information in default format."
  msgid "Generate C-SKY FPU double float instructions (default for hard float)."
! msgstr "Genera información de depuración en el formato por defecto."
  
  #: config/csky/csky.opt:98
! #, fuzzy, no-c-format
! #| msgid "Generate prefetch instructions, if available, for arrays in loops."
  msgid "Generate frecipd/fsqrtd/fdivd instructions (default for hard float)."
! msgstr "Genera instrucciones de precargado, si están disponibles, para matrices en bucles."
  
  #: config/csky/csky.opt:106
! #, fuzzy, no-c-format
! #| msgid "Do not use the callt instruction (default)."
  msgid "Enable the extended LRW instruction (default for CK801)."
! msgstr "No usa la instrucción callt (predeterminado)."
  
  #: config/csky/csky.opt:110
! #, fuzzy, no-c-format
! #| msgid "Enable clip instructions."
  msgid "Enable interrupt stack instructions."
! msgstr "Activa las instrucciones clip."
  
  #: config/csky/csky.opt:114
! #, fuzzy, no-c-format
! #| msgid "Enable multiply instructions."
  msgid "Enable multiprocessor instructions."
! msgstr "Activa las instrucciones multiply."
  
  #: config/csky/csky.opt:118
! #, fuzzy, no-c-format
! #| msgid "Enable clip instructions."
  msgid "Enable coprocessor instructions."
! msgstr "Activa las instrucciones clip."
  
  #: config/csky/csky.opt:122
! #, fuzzy, no-c-format
! #| msgid "Enable average instructions."
  msgid "Enable cache prefetch instructions."
! msgstr "Activa las instrucciones promedio."
  
  #: config/csky/csky.opt:126
! #, fuzzy, no-c-format
! #| msgid "Enable MUL instructions."
  msgid "Enable C-SKY SECURE instructions."
! msgstr "Activa las instrucciones MUL."
  
  #: config/csky/csky.opt:133
! #, fuzzy, no-c-format
! #| msgid "Enable MUL instructions."
  msgid "Enable C-SKY TRUST instructions."
! msgstr "Activa las instrucciones MUL."
  
  #: config/csky/csky.opt:137
! #, fuzzy, no-c-format
! #| msgid "Enable MUL instructions."
  msgid "Enable C-SKY DSP instructions."
! msgstr "Activa las instrucciones MUL."
  
  #: config/csky/csky.opt:141
! #, fuzzy, no-c-format
! #| msgid "Enable atomic instructions."
  msgid "Enable C-SKY Enhanced DSP instructions."
! msgstr "Activa instrucciones atómicas."
  
  #: config/csky/csky.opt:145
! #, fuzzy, no-c-format
! #| msgid "Enable atomic instructions."
  msgid "Enable C-SKY Vector DSP instructions."
! msgstr "Activa instrucciones atómicas."
  
  #: config/csky/csky.opt:151
! #, fuzzy, no-c-format
! #| msgid "Generate isel instructions."
  msgid "Generate divide instructions."
! msgstr "Genera instrucciones isel."
  
  #: config/csky/csky.opt:155
! #, fuzzy, no-c-format
! #| msgid "Generate code for a 5206e."
  msgid "Generate code for Smart Mode."
! msgstr "Genera código para el 5206e."
  
  #: config/csky/csky.opt:159
  #, no-c-format
  msgid "Enable use of R16-R31 (default)."
! msgstr ""
  
  #: config/csky/csky.opt:163
! #, fuzzy, no-c-format
! #| msgid "Generate code in little endian mode."
  msgid "Generate code using global anchor symbol addresses."
! msgstr "Genera código en modo little endian."
  
  #: config/csky/csky.opt:167
! #, fuzzy, no-c-format
! #| msgid "Generate v3 push25/pop25 instructions."
  msgid "Generate push/pop instructions (default)."
! msgstr "Genera instrucciones v3 push25/pop25."
  
  #: config/csky/csky.opt:171
! #, fuzzy, no-c-format
! #| msgid "Generate isel instructions."
  msgid "Generate stm/ldm instructions (default)."
! msgstr "Genera instrucciones isel."
  
  #: config/csky/csky.opt:178
  #, no-c-format
  msgid "Generate constant pools in the compiler instead of assembler."
! msgstr ""
  
  #: config/csky/csky.opt:182
! #, fuzzy, no-c-format
! #| msgid "Do not generate .size directives."
  msgid "Emit .stack_size directives."
! msgstr "No genera directivas .size."
  
  #: config/csky/csky.opt:186
! #, fuzzy, no-c-format
! #| msgid "Generate code for GNU runtime environment."
  msgid "Generate code for C-SKY compiler runtime instead of libgcc."
! msgstr "Genera código para el entorno de tiempo de ejecución GNU."
  
  #: config/csky/csky.opt:190
! #, fuzzy, no-c-format
! #| msgid "Set the branch costs for conditional branch instructions.  Reasonable"
  msgid "Set the branch costs to roughly the specified number of instructions."
! msgstr "Establece los costos de ramificación para las instrucciones de ramificación condicional.  Razonable"
  
  #: config/csky/csky.opt:194
! #, fuzzy, no-c-format
! #| msgid "Permit scheduling of a function's prologue sequence."
  msgid "Permit scheduling of function prologue and epilogue sequences."
! msgstr "Permite la planificación de la secuencia de prólogo de funciones."
  
  #: config/csky/csky_tables.opt:24
! #, fuzzy, no-c-format
! #| msgid "Known ARC CPUs (for use with the -mcpu= option):"
  msgid "Known CSKY CPUs (for use with the -mcpu= options):"
! msgstr "CPUs ARC conocidas (para usar con la opción -mcpu=):"
  
  #: config/csky/csky_tables.opt:205
! #, fuzzy, no-c-format
! #| msgid "Known SCORE architectures (for use with the -march= option):"
  msgid "Known CSKY architectures (for use with the -march= option):"
! msgstr "Arquitecturas SCORE conocidas (para uso con la opción -march=):"
  
  #: config/csky/csky_tables.opt:227
! #, fuzzy, no-c-format
! #| msgid "Known ARM FPUs (for use with the -mfpu= option):"
  msgid "Known CSKY FPUs (for use with the -mfpu= option):"
! msgstr "FPUs ARM conocidos (para usar con la opción -mfpu=):"
  
  #: config/c6x/c6x-tables.opt:24
  #, no-c-format
--- 11602,11745 ----
  msgstr "Especifica la arquitectura de destino."
  
  #: config/csky/csky.opt:38
! #, no-c-format
  msgid "Specify the target processor."
! msgstr "Selecciona el procesador destino."
  
  #: config/csky/csky.opt:90
! #, no-c-format
  msgid "Specify the target floating-point hardware/format."
! msgstr "Especifica el hardware/formato de coma flotante destino."
  
  #: config/csky/csky.opt:94
! #, no-c-format
  msgid "Generate C-SKY FPU double float instructions (default for hard float)."
! msgstr "Genera instrucciones de flotantes de doble precisión C-SKY FPU (lo predefinido para flotante hardware)."
  
  #: config/csky/csky.opt:98
! #, no-c-format
  msgid "Generate frecipd/fsqrtd/fdivd instructions (default for hard float)."
! msgstr "Genera instrucciones frecipd/fsqrtd/fdivd (lo predefinido para flotante hardware)."
  
  #: config/csky/csky.opt:106
! #, no-c-format
  msgid "Enable the extended LRW instruction (default for CK801)."
! msgstr "Activa la instrucción LRW extendida (predeterminado para CK801)."
  
  #: config/csky/csky.opt:110
! #, no-c-format
  msgid "Enable interrupt stack instructions."
! msgstr "Activa las instrucciones de la pila de interrupciones."
  
  #: config/csky/csky.opt:114
! #, no-c-format
  msgid "Enable multiprocessor instructions."
! msgstr "Activa las instrucciones del multiprocesador."
  
  #: config/csky/csky.opt:118
! #, no-c-format
  msgid "Enable coprocessor instructions."
! msgstr "Activa las instrucciones del coprocesador ."
  
  #: config/csky/csky.opt:122
! #, no-c-format
  msgid "Enable cache prefetch instructions."
! msgstr "Activa las instrucciones prefech de la caché."
  
  #: config/csky/csky.opt:126
! #, no-c-format
  msgid "Enable C-SKY SECURE instructions."
! msgstr "Activa las instrucciones SECURE de C-SKY."
  
  #: config/csky/csky.opt:133
! #, no-c-format
  msgid "Enable C-SKY TRUST instructions."
! msgstr "Activa las instrucciones TRUST de C-SKY."
  
  #: config/csky/csky.opt:137
! #, no-c-format
  msgid "Enable C-SKY DSP instructions."
! msgstr "Activa las instrucciones DSP de C-SKY."
  
  #: config/csky/csky.opt:141
! #, no-c-format
  msgid "Enable C-SKY Enhanced DSP instructions."
! msgstr "Activa las instrucciones DSP mejoradas de C-SKY."
  
  #: config/csky/csky.opt:145
! #, no-c-format
  msgid "Enable C-SKY Vector DSP instructions."
! msgstr "Activa las instrucciones DSP vectoriales de C-SKY."
  
  #: config/csky/csky.opt:151
! #, no-c-format
  msgid "Generate divide instructions."
! msgstr "Genera instrucciones de división."
  
  #: config/csky/csky.opt:155
! #, no-c-format
  msgid "Generate code for Smart Mode."
! msgstr "Genera código para el modo inteligente."
  
  #: config/csky/csky.opt:159
  #, no-c-format
  msgid "Enable use of R16-R31 (default)."
! msgstr "Activa el uso de R16-R31 (lo predeterminado)."
  
  #: config/csky/csky.opt:163
! #, no-c-format
  msgid "Generate code using global anchor symbol addresses."
! msgstr "Genera código utilizando direcciones de símbolo de anclaje global."
  
  #: config/csky/csky.opt:167
! #, no-c-format
  msgid "Generate push/pop instructions (default)."
! msgstr "Genera instrucciones push/pop (lo predeterminado)."
  
  #: config/csky/csky.opt:171
! #, no-c-format
  msgid "Generate stm/ldm instructions (default)."
! msgstr "Genera instrucciones stm/ldm (lo predeterminado)."
  
  #: config/csky/csky.opt:178
  #, no-c-format
  msgid "Generate constant pools in the compiler instead of assembler."
! msgstr "Genera grupso de constantes en el compilador en lugar del ensamblador."
  
  #: config/csky/csky.opt:182
! #, no-c-format
  msgid "Emit .stack_size directives."
! msgstr "Emite directivas .stack_size."
  
  #: config/csky/csky.opt:186
! #, no-c-format
  msgid "Generate code for C-SKY compiler runtime instead of libgcc."
! msgstr "Genera código para el entorno de tiempo de ejecución del compilador de C-SKY en lugar de libgcc."
  
  #: config/csky/csky.opt:190
! #, no-c-format
  msgid "Set the branch costs to roughly the specified number of instructions."
! msgstr "Establece los costos de bifurcación en aproximadamente el número de instrucciones especificado."
  
  #: config/csky/csky.opt:194
! #, no-c-format
  msgid "Permit scheduling of function prologue and epilogue sequences."
! msgstr "Permite la planificación de las secuencias de prólogo y epílogo de funciones."
  
  #: config/csky/csky_tables.opt:24
! #, no-c-format
  msgid "Known CSKY CPUs (for use with the -mcpu= options):"
! msgstr "CPUs CSKY conocidas (para usar con las opciones -mcpu=):"
  
  #: config/csky/csky_tables.opt:205
! #, no-c-format
  msgid "Known CSKY architectures (for use with the -march= option):"
! msgstr "Arquitecturas CSKY conocidas (para uso con la opción -march=):"
  
  #: config/csky/csky_tables.opt:227
! #, no-c-format
  msgid "Known CSKY FPUs (for use with the -mfpu= option):"
! msgstr "FPUs CSKY conocidas (para usar con la opción -mfpu=):"
  
  #: config/c6x/c6x-tables.opt:24
  #, no-c-format
*************** msgid "Select method for sdata handling.
*** 11788,11797 ****
  msgstr "Selecciona el método para el manejo de sdata."
  
  #: config/c6x/c6x.opt:46
! #, fuzzy, no-c-format
! #| msgid "Valid arguments for the -msdata= option."
  msgid "Valid arguments for the -msdata= option:"
! msgstr "Argumentos válidos para la opción -msdata=."
  
  #: config/c6x/c6x.opt:59
  #, no-c-format
--- 11762,11770 ----
  msgstr "Selecciona el método para el manejo de sdata."
  
  #: config/c6x/c6x.opt:46
! #, no-c-format
  msgid "Valid arguments for the -msdata= option:"
! msgstr "Argumentos válidos para la opción -msdata=:"
  
  #: config/c6x/c6x.opt:59
  #, no-c-format
*************** msgid "Increase the IEEE compliance for
*** 12134,12141 ****
  msgstr "Incrementa el cumplimiento con IEEE para las comparaciones de coma flotante."
  
  #: config/sh/sh.opt:239
! #, fuzzy, no-c-format
! #| msgid "inline code to invalidate instruction cache entries after setting up nested function trampolines."
  msgid "Inline code to invalidate instruction cache entries after setting up nested function trampolines."
  msgstr "Código inline para invalidar las entradas de caché de instruciones después de establecerer los trampolines de funciones anidadas."
  
--- 12107,12113 ----
  msgstr "Incrementa el cumplimiento con IEEE para las comparaciones de coma flotante."
  
  #: config/sh/sh.opt:239
! #, no-c-format
  msgid "Inline code to invalidate instruction cache entries after setting up nested function trampolines."
  msgstr "Código inline para invalidar las entradas de caché de instruciones después de establecerer los trampolines de funciones anidadas."
  
*************** msgstr "Activa el uso de la instrucción
*** 12207,12219 ****
  #: config/gcn/gcn-tables.opt:25
  #, no-c-format
  msgid "GCN GPU type to use:"
! msgstr ""
  
  #: config/gcn/gcn.opt:26 config/gcn/gcn.opt:30
! #, fuzzy, no-c-format
! #| msgid "Specify the name of the target CPU."
  msgid "Specify the name of the target GPU."
! msgstr "Especifica el nombre de la CPU destino."
  
  #: config/gcn/gcn.opt:34
  #, no-c-format
--- 12179,12190 ----
  #: config/gcn/gcn-tables.opt:25
  #, no-c-format
  msgid "GCN GPU type to use:"
! msgstr "Tipo de GPU GCN que se utilizará:"
  
  #: config/gcn/gcn.opt:26 config/gcn/gcn.opt:30
! #, no-c-format
  msgid "Specify the name of the target GPU."
! msgstr "Especifica el nombre de la GPU destino."
  
  #: config/gcn/gcn.opt:34
  #, no-c-format
*************** msgstr "Genera código para ABI de 64 bi
*** 12228,12270 ****
  #: config/gcn/gcn.opt:42
  #, no-c-format
  msgid "Enable OpenMP GPU offloading."
! msgstr ""
  
  #: config/gcn/gcn.opt:53
  #, no-c-format
  msgid "Obsolete; use GCN_STACK_SIZE at runtime."
! msgstr ""
  
  #: config/gcn/gcn.opt:59
  #, no-c-format
  msgid "Amount of local data-share (LDS) memory to reserve for gang-private variables."
! msgstr ""
  
  #: config/gcn/gcn.opt:63
! #, fuzzy, no-c-format
! #| msgid "Warn about an invalid DO loop."
  msgid "Warn about invalid OpenACC dimensions."
! msgstr "Avisa sobre bucles DO no válidos."
  
  #: config/gcn/gcn.opt:67
  #, no-c-format
  msgid "SRAM-ECC and XNACK modes:"
! msgstr ""
  
  #: config/gcn/gcn.opt:83
  #, no-c-format
  msgid "Compile for devices requiring XNACK enabled. Default \"any\" if USM is supported."
! msgstr ""
  
  #: config/gcn/gcn.opt:87
  #, no-c-format
  msgid "Compile for devices with the SRAM ECC feature enabled, or not. Default \"any\"."
! msgstr ""
  
  #: config/gcn/gcn.opt:91
  #, no-c-format
  msgid "--param=gcn-preferred-vectorization-factor=[default,32,64]\tPreferred vectorization factor."
! msgstr ""
  
  #: config/fr30/fr30.opt:23
  #, no-c-format
--- 12199,12240 ----
  #: config/gcn/gcn.opt:42
  #, no-c-format
  msgid "Enable OpenMP GPU offloading."
! msgstr "Habilita descarga de GPU OpenMP."
  
  #: config/gcn/gcn.opt:53
  #, no-c-format
  msgid "Obsolete; use GCN_STACK_SIZE at runtime."
! msgstr "Obsoloeto; utiliza GCN_STACK_SIZE en tiempo de ejecución."
  
  #: config/gcn/gcn.opt:59
  #, no-c-format
  msgid "Amount of local data-share (LDS) memory to reserve for gang-private variables."
! msgstr "Cantidad de memoria de datos compartidos local (LDS) que se reservará para variables gang privadas."
  
  #: config/gcn/gcn.opt:63
! #, no-c-format
  msgid "Warn about invalid OpenACC dimensions."
! msgstr "Advierte de dimensiones de OpenACC no válidas."
  
  #: config/gcn/gcn.opt:67
  #, no-c-format
  msgid "SRAM-ECC and XNACK modes:"
! msgstr "Modos SRAM-ECC y XNACK:"
  
  #: config/gcn/gcn.opt:83
  #, no-c-format
  msgid "Compile for devices requiring XNACK enabled. Default \"any\" if USM is supported."
! msgstr "Compila para dispositivos que requieren XNACK habilitado. Predeterminado «any» si se soporta USM."
  
  #: config/gcn/gcn.opt:87
  #, no-c-format
  msgid "Compile for devices with the SRAM ECC feature enabled, or not. Default \"any\"."
! msgstr "Compila para dispositivos con la característica ECC de SRAM habilitada, o no. Predeterminado «any»."
  
  #: config/gcn/gcn.opt:91
  #, no-c-format
  msgid "--param=gcn-preferred-vectorization-factor=[default,32,64]\tPreferred vectorization factor."
! msgstr "--param=gcn-preferred-vectorization-factor=[default,32,64]\tFactor de vectorización preferido."
  
  #: config/fr30/fr30.opt:23
  #, no-c-format
*************** msgid "Assume small address space."
*** 12272,12367 ****
  msgstr "Asume espacio de direcciones small."
  
  #: config/bpf/bpf.opt:28
! #, fuzzy, no-c-format
! #| msgid "Generate big-endian code."
  msgid "Generate xBPF."
! msgstr "Genera código big-endian."
  
  #: config/bpf/bpf.opt:34
! #, fuzzy, no-c-format
! #| msgid "Generate big-endian code."
  msgid "Generate big-endian eBPF."
! msgstr "Genera código big-endian."
  
  #: config/bpf/bpf.opt:38
! #, fuzzy, no-c-format
! #| msgid "Generate little-endian code."
  msgid "Generate little-endian eBPF."
! msgstr "Genera código little-endian."
  
  #: config/bpf/bpf.opt:42
  #, no-c-format
  msgid "Set a hard limit for the size of each stack frame, in bytes."
! msgstr ""
  
  #: config/bpf/bpf.opt:46
  #, no-c-format
  msgid "Generate all necessary information for BPF Compile Once - Run Everywhere."
! msgstr ""
  
  #: config/bpf/bpf.opt:52
! #, fuzzy, no-c-format
! #| msgid "enable conditional move instruction usage."
  msgid "Enable extra conditional-branch instructions j(s)lt and j(s)le."
! msgstr "activa el uso de la instrucción move condicional."
  
  #: config/bpf/bpf.opt:56
! #, fuzzy, no-c-format
! #| msgid "Enable 32-bit divide instructions."
  msgid "Enable 32-bit ALU instructions."
! msgstr "Activa las instrucciones divide de 32-bit."
  
  #: config/bpf/bpf.opt:60
! #, fuzzy, no-c-format
! #| msgid "Enable 32-bit multiply instructions."
  msgid "Enable 32-bit jump instructions."
! msgstr "Activa las instrucciones multiply de 32-bit."
  
  #: config/bpf/bpf.opt:64
! #, fuzzy, no-c-format
! #| msgid "Enable saturation instructions"
  msgid "Enable general atomic operations introduced in v3 ISA."
! msgstr "Activa las instrucciones de saturación."
  
  #: config/bpf/bpf.opt:68
! #, fuzzy, no-c-format
! #| msgid "Enable barrel shift instructions."
  msgid "Enable byte swap instructions."
! msgstr "Activa las instrucciones barrel shift."
  
  #: config/bpf/bpf.opt:72
! #, fuzzy, no-c-format
! #| msgid "Enable divide and modulus instructions."
  msgid "Enable signed division and modulus instructions."
! msgstr "Activa las instrucciones divide y modulus."
  
  #: config/bpf/bpf.opt:76
! #, fuzzy, no-c-format
! #| msgid "Enable divide and modulus instructions."
  msgid "Enable signed move and memory load instructions."
! msgstr "Activa las instrucciones divide y modulus."
  
  #: config/bpf/bpf.opt:80
  #, no-c-format
  msgid "Select the eBPF ISA version to target in code generation."
! msgstr ""
  
  #: config/bpf/bpf.opt:84
! #, fuzzy, no-c-format
! #| msgid "Known MIPS ISA levels (for use with the -mips option):"
  msgid "Valid ISA versions (for use with the -mcpu= option)"
! msgstr "Niveles ISA MIPS conocidos (para uso con la opción -mips):"
  
  #: config/bpf/bpf.opt:104
! #, fuzzy, no-c-format
! #| msgid "Known assembler dialects (for use with the -masm= option):"
  msgid "Known assembler dialects (for use with the -masm= option)"
! msgstr "Dialectos de ensamblador conocidos (para uso con la opción -masm=):"
  
  #: config/bpf/bpf.opt:114
  #, no-c-format
  msgid "-minline-memops-threshold=<number> Maximum size of memset/memmove/memcpy to inline, larger sizes will use a library call."
! msgstr ""
  
  #: config/mips/mips.opt:32
  #, no-c-format
--- 12242,12325 ----
  msgstr "Asume espacio de direcciones small."
  
  #: config/bpf/bpf.opt:28
! #, no-c-format
  msgid "Generate xBPF."
! msgstr "Genera xBPF."
  
  #: config/bpf/bpf.opt:34
! #, no-c-format
  msgid "Generate big-endian eBPF."
! msgstr "Genera eBPF «big-endian»."
  
  #: config/bpf/bpf.opt:38
! #, no-c-format
  msgid "Generate little-endian eBPF."
! msgstr "Genera e BPF «little-endian»."
  
  #: config/bpf/bpf.opt:42
  #, no-c-format
  msgid "Set a hard limit for the size of each stack frame, in bytes."
! msgstr "Establece un límite duro al tamaño de cada marco de pila, en bytes."
  
  #: config/bpf/bpf.opt:46
  #, no-c-format
  msgid "Generate all necessary information for BPF Compile Once - Run Everywhere."
! msgstr "Genera toda la información necesaria para Compilar Una Vez BPF - Ejecutar en Cualquier Sitio."
  
  #: config/bpf/bpf.opt:52
! #, no-c-format
  msgid "Enable extra conditional-branch instructions j(s)lt and j(s)le."
! msgstr "Activa las instrucciones j(s)lt y j(s)le de bifurcación condicional extra."
  
  #: config/bpf/bpf.opt:56
! #, no-c-format
  msgid "Enable 32-bit ALU instructions."
! msgstr "Activa las instrucciones de la ALU de 32 bits."
  
  #: config/bpf/bpf.opt:60
! #, no-c-format
  msgid "Enable 32-bit jump instructions."
! msgstr "Activa las instrucciones de salto de 32 bits."
  
  #: config/bpf/bpf.opt:64
! #, no-c-format
  msgid "Enable general atomic operations introduced in v3 ISA."
! msgstr "Activa las operaciones atómicas generales introducidas en ISA v3."
  
  #: config/bpf/bpf.opt:68
! #, no-c-format
  msgid "Enable byte swap instructions."
! msgstr "Activa las instrucciones de intercambio de bytes."
  
  #: config/bpf/bpf.opt:72
! #, no-c-format
  msgid "Enable signed division and modulus instructions."
! msgstr "Activa las instrucciones de división y módulo con signo."
  
  #: config/bpf/bpf.opt:76
! #, no-c-format
  msgid "Enable signed move and memory load instructions."
! msgstr "Activa las instrucciones de mover con signo y carga de memoria."
  
  #: config/bpf/bpf.opt:80
  #, no-c-format
  msgid "Select the eBPF ISA version to target in code generation."
! msgstr "Selecciona la versión de ISA de eBPF de destino en la generación de código."
  
  #: config/bpf/bpf.opt:84
! #, no-c-format
  msgid "Valid ISA versions (for use with the -mcpu= option)"
! msgstr "Versiones de ISA válidas (para uso con la opción -mcpu=)"
  
  #: config/bpf/bpf.opt:104
! #, no-c-format
  msgid "Known assembler dialects (for use with the -masm= option)"
! msgstr "Dialectos de ensamblador conocidos (para uso con la opción -masm=)"
  
  #: config/bpf/bpf.opt:114
  #, no-c-format
  msgid "-minline-memops-threshold=<number> Maximum size of memset/memmove/memcpy to inline, larger sizes will use a library call."
! msgstr "-minline-memops-threshold=<número> Tamaño máximo de memset/memmove/memcpy en línea; tamaños mayores utilizarán llamada de biblioteca."
  
  #: config/mips/mips.opt:32
  #, no-c-format
*************** msgid "Use Enhanced Virtual Addressing i
*** 12444,12453 ****
  msgstr "Usa las instrucciones de direccionamiento virtual mejorado."
  
  #: config/mips/mips.opt:171
! #, fuzzy, no-c-format
! #| msgid "Does nothing.  Preserved for backward compatibility."
  msgid "Don't use %reloc() assembly operators (for backward compatibility)."
! msgstr "No hace nada.  Se preserva por compatibilidad hacia atrás."
  
  #: config/mips/mips.opt:175
  #, no-c-format
--- 12402,12410 ----
  msgstr "Usa las instrucciones de direccionamiento virtual mejorado."
  
  #: config/mips/mips.opt:171
! #, no-c-format
  msgid "Don't use %reloc() assembly operators (for backward compatibility)."
! msgstr "No utilizar operadores de esamblador %reloc() (por compatibilidad hacia atrás)."
  
  #: config/mips/mips.opt:175
  #, no-c-format
*************** msgid "Work around certain R4400 errata.
*** 12470,12479 ****
  msgstr "Evita ciertos errores de R4400."
  
  #: config/mips/mips.opt:191
! #, fuzzy, no-c-format
! #| msgid "Work around certain R4000 errata."
  msgid "Work around the R5900 short loop erratum."
! msgstr "Evita ciertos errores de R4000."
  
  #: config/mips/mips.opt:195
  #, no-c-format
--- 12427,12435 ----
  msgstr "Evita ciertos errores de R4400."
  
  #: config/mips/mips.opt:191
! #, no-c-format
  msgid "Work around the R5900 short loop erratum."
! msgstr "Evita errores de blucle corto de R5900."
  
  #: config/mips/mips.opt:195
  #, no-c-format
*************** msgid "Optimize lui/addiu address loads.
*** 12711,12720 ****
  msgstr "Optimiza las cargas de las direcciones lui/addiu."
  
  #: config/mips/mips.opt:406
! #, fuzzy, no-c-format
! #| msgid "Enable MUL instructions."
  msgid "Enable the MIPS16e V2 instructions."
! msgstr "Activa las instrucciones MUL."
  
  #: config/mips/mips.opt:410
  #, no-c-format
--- 12667,12675 ----
  msgstr "Optimiza las cargas de las direcciones lui/addiu."
  
  #: config/mips/mips.opt:406
! #, no-c-format
  msgid "Enable the MIPS16e V2 instructions."
! msgstr "Activa las instrucciones V2 de MIPS16e."
  
  #: config/mips/mips.opt:410
  #, no-c-format
*************** msgstr "Usa operandos cuaternarios madd.
*** 12739,12756 ****
  #: config/mips/mips.opt:430
  #, no-c-format
  msgid "Don't generate code with unaligned load store, only valid for MIPS R6."
! msgstr ""
  
  #: config/mips/mips.opt:434
! #, fuzzy, no-c-format
! #| msgid "Generate code which uses hardware floating point instructions."
  msgid "Generate code with unaligned load store for R6 (alias of -mno-strict-align)."
! msgstr "Genera código que use las instrucciones de coma flotante de hardware."
  
  #: config/mips/mips.opt:438
  #, no-c-format
  msgid "Don't generate code with unaligned load store for R6 (alias of -mstrict-align)."
! msgstr ""
  
  #: config/mips/mips.opt:446
  #, no-c-format
--- 12694,12710 ----
  #: config/mips/mips.opt:430
  #, no-c-format
  msgid "Don't generate code with unaligned load store, only valid for MIPS R6."
! msgstr "No genera código con carga almacenamiento desalineados, solo válido para MIPS R6."
  
  #: config/mips/mips.opt:434
! #, no-c-format
  msgid "Generate code with unaligned load store for R6 (alias of -mno-strict-align)."
! msgstr "Genera código con carga almacenamiento desalineados para R6 (alias de -mno-strict-align)."
  
  #: config/mips/mips.opt:438
  #, no-c-format
  msgid "Don't generate code with unaligned load store for R6 (alias of -mstrict-align)."
! msgstr "No genera código con carga almacenamiento desalineados para R6 (alias de -mstrict-align)."
  
  #: config/mips/mips.opt:446
  #, no-c-format
*************** msgid "Use eXtended Physical Address (XP
*** 12763,12778 ****
  msgstr "Usa instrucciones de direcciones físicas extendidas (XPA)."
  
  #: config/mips/mips.opt:454
! #, fuzzy, no-c-format
! #| msgid "Use ll, sc and sync instructions."
  msgid "Use Cyclic Redundancy Check (CRC) instructions."
! msgstr "Usa las instrucciones ll, sc y sync."
  
  #: config/mips/mips.opt:458
! #, fuzzy, no-c-format
! #| msgid "Use Virtualization (VZ) instructions."
  msgid "Use Global INValidate (GINV) instructions."
! msgstr "Usa instrucciones virtualización (VZ)."
  
  #: config/mips/mips.opt:462
  #, no-c-format
--- 12717,12730 ----
  msgstr "Usa instrucciones de direcciones físicas extendidas (XPA)."
  
  #: config/mips/mips.opt:454
! #, no-c-format
  msgid "Use Cyclic Redundancy Check (CRC) instructions."
! msgstr "Usa las instrucciones de comprobación de redundancia cíclico (CRC)."
  
  #: config/mips/mips.opt:458
! #, no-c-format
  msgid "Use Global INValidate (GINV) instructions."
! msgstr "Usa instrucciones INValidate (GINV)."
  
  #: config/mips/mips.opt:462
  #, no-c-format
*************** msgid "Optimize frame header."
*** 12795,12804 ****
  msgstr "Optimiza la cabecera de marco."
  
  #: config/mips/mips.opt:481
! #, fuzzy, no-c-format
! #| msgid "Enable dead store elimination"
  msgid "Enable load/store bonding."
! msgstr "Activa la eliminación de almacenamiento muerto."
  
  #: config/mips/mips.opt:485
  #, no-c-format
--- 12747,12755 ----
  msgstr "Optimiza la cabecera de marco."
  
  #: config/mips/mips.opt:481
! #, no-c-format
  msgid "Enable load/store bonding."
! msgstr "Activa unión de carga/almacenamiento."
  
  #: config/mips/mips.opt:485
  #, no-c-format
*************** msgid "Use Loongson MultiMedia extension
*** 12816,12831 ****
  msgstr ""
  
  #: config/mips/mips.opt:506
! #, fuzzy, no-c-format
! #| msgid "Use MIPS MSA Extension instructions."
  msgid "Use Loongson EXTension (EXT) instructions."
! msgstr "Usa instrucciones de la Extensión MIPS MSA."
  
  #: config/mips/mips.opt:510
! #, fuzzy, no-c-format
! #| msgid "Use MIPS MSA Extension instructions."
  msgid "Use Loongson EXTension R2 (EXT2) instructions."
! msgstr "Usa instrucciones de la Extensión MIPS MSA."
  
  #: config/mips/mips-tables.opt:24
  #, no-c-format
--- 12767,12780 ----
  msgstr ""
  
  #: config/mips/mips.opt:506
! #, no-c-format
  msgid "Use Loongson EXTension (EXT) instructions."
! msgstr "Usa instrucciones de la EXTensión Loongson (EXT)."
  
  #: config/mips/mips.opt:510
! #, no-c-format
  msgid "Use Loongson EXTension R2 (EXT2) instructions."
! msgstr "Usa instrucciones de la EXTensión Loongson R2 (EXT2)."
  
  #: config/mips/mips-tables.opt:24
  #, no-c-format
*************** msgstr "Igual que -mA7."
*** 12885,12897 ****
  #: config/arc/arc.opt:58
  #, no-c-format
  msgid "Force all calls to be made via a jli instruction."
! msgstr ""
  
  #: config/arc/arc.opt:62
! #, fuzzy, no-c-format
! #| msgid "-mmpy-option=MPY Compile ARCv2 code with a multiplier design option."
  msgid "-mmpy-option=MPY\tCompile ARCv2 code with a multiplier design option."
! msgstr "-mmpy-option=MPY Compila código ARCv2 con una opción de diseño de multiplicador."
  
  #: config/arc/arc.opt:132
  #, no-c-format
--- 12834,12845 ----
  #: config/arc/arc.opt:58
  #, no-c-format
  msgid "Force all calls to be made via a jli instruction."
! msgstr "Fuerza a que todas las llamadas se hagan mediante instrucción jli."
  
  #: config/arc/arc.opt:62
! #, no-c-format
  msgid "-mmpy-option=MPY\tCompile ARCv2 code with a multiplier design option."
! msgstr "-mmpy-option=MPY\tCompila código ARCv2 con una opción de diseño de multiplicador."
  
  #: config/arc/arc.opt:132
  #, no-c-format
*************** msgid "Do not generate mpy instructions
*** 12939,12948 ****
  msgstr "No generar instrucciones mpy para ARC700."
  
  #: config/arc/arc.opt:174
! #, fuzzy, no-c-format
! #| msgid "Generate Extended arithmetic instructions.  Currently only divaw, adds, subs and sat16 are supported."
  msgid "Generate extended arithmetic instructions, only valid for ARC700."
! msgstr "Genera instrucciones de aritmética extendida.  Actualmente solo se dispone de divaw, adds, subs y sat16."
  
  #: config/arc/arc.opt:178
  #, no-c-format
--- 12887,12895 ----
  msgstr "No generar instrucciones mpy para ARC700."
  
  #: config/arc/arc.opt:174
! #, no-c-format
  msgid "Generate extended arithmetic instructions, only valid for ARC700."
! msgstr "Genera instrucciones de aritmética extendida, solo válido para ARC700."
  
  #: config/arc/arc.opt:178
  #, no-c-format
*************** msgid "Generate sdata references.  This
*** 12965,12974 ****
  msgstr "Generar referencias de sdata.  Es lo predefinido, salvo que se compile para PIC."
  
  #: config/arc/arc.opt:194
! #, fuzzy, no-c-format
! #| msgid "Generate Cell microcode."
  msgid "Generate millicode thunks."
! msgstr "Genera microcódigo Cell."
  
  #: config/arc/arc.opt:198 config/arc/arc.opt:202
  #, no-c-format
--- 12912,12920 ----
  msgstr "Generar referencias de sdata.  Es lo predefinido, salvo que se compile para PIC."
  
  #: config/arc/arc.opt:194
! #, no-c-format
  msgid "Generate millicode thunks."
! msgstr "Genera «thunks» de milicódigo."
  
  #: config/arc/arc.opt:198 config/arc/arc.opt:202
  #, no-c-format
*************** msgid "-mcpu=CPU\tCompile code for ARC v
*** 13011,13020 ****
  msgstr "-mcpu=CPU\tCompila código para la CPU de variante ARC."
  
  #: config/arc/arc.opt:238
! #, fuzzy, no-c-format
! #| msgid "size optimization level: 0:none 1:opportunistic 2: regalloc 3:drop align, -Os."
  msgid "Size optimization level: 0:none 1:opportunistic 2: regalloc 3:drop align, -Os."
! msgstr "nivel de optimización del tamaño: 0:nada 1:oportunista 2:regalloc 3:alineación libre, -Os."
  
  #: config/arc/arc.opt:246
  #, no-c-format
--- 12957,12965 ----
  msgstr "-mcpu=CPU\tCompila código para la CPU de variante ARC."
  
  #: config/arc/arc.opt:238
! #, no-c-format
  msgid "Size optimization level: 0:none 1:opportunistic 2: regalloc 3:drop align, -Os."
! msgstr "Nivel de optimización del tamaño: 0:nada 1:oportunista 2:regalloc 3:alineación libre, -Os."
  
  #: config/arc/arc.opt:246
  #, no-c-format
*************** msgid "Cost to assume for a multiply ins
*** 13022,13031 ****
  msgstr "Costo de asumir una instrucción multiply, siendo 4 el de una instrucción normal."
  
  #: config/arc/arc.opt:250
! #, fuzzy, no-c-format
! #| msgid "-mcpu=TUNE Tune code for given ARC variant."
  msgid "-mtune=TUNE\tTune code for given ARC variant."
! msgstr "-mcpu=TUNE Ajusta el código para la variante ARC dada."
  
  #: config/arc/arc.opt:284
  #, no-c-format
--- 12967,12975 ----
  msgstr "Costo de asumir una instrucción multiply, siendo 4 el de una instrucción normal."
  
  #: config/arc/arc.opt:250
! #, no-c-format
  msgid "-mtune=TUNE\tTune code for given ARC variant."
! msgstr "-mtune=TUNE\tAjusta el código para la variante ARC dada."
  
  #: config/arc/arc.opt:284
  #, no-c-format
*************** msgid "Enable 16-entry register file."
*** 13198,13223 ****
  msgstr "Activa fichero de registros de 16 entradas."
  
  #: config/arc/arc.opt:536
! #, fuzzy, no-c-format
! #| msgid "Enable the use of RX FPU instructions.  This is the default."
  msgid "Enable use of BI/BIH instructions when available."
! msgstr "Activa el uso de las instrucciones de FPU RX.  Este es el valor por defecto."
  
  #: config/arc/arc.opt:540
  #, no-c-format
  msgid "Enable ENTER_S and LEAVE_S opcodes for ARCv2."
! msgstr ""
  
  #: config/vxworks-smp.opt:25
  #, no-c-format
  msgid "Select VxWorks SMP C runtimes for linking."
! msgstr ""
  
  #: lto/lang.opt:50
! #, fuzzy, no-c-format
! #| msgid "Set linker output type (used internally during LTO optimization)"
  msgid "Set linker output type (used internally during LTO optimization)."
! msgstr "Establece el tipo de salida del enlazador (usado internamente durante la optimización LTO)"
  
  #: lto/lang.opt:54
  #, no-c-format
--- 13142,13165 ----
  msgstr "Activa fichero de registros de 16 entradas."
  
  #: config/arc/arc.opt:536
! #, no-c-format
  msgid "Enable use of BI/BIH instructions when available."
! msgstr "Activa el uso de las instrucciones BI/BIH cuando están disponibles."
  
  #: config/arc/arc.opt:540
  #, no-c-format
  msgid "Enable ENTER_S and LEAVE_S opcodes for ARCv2."
! msgstr "Activa los códigos de operación ENTER_S y LEAVE_S para ARCv2."
  
  #: config/vxworks-smp.opt:25
  #, no-c-format
  msgid "Select VxWorks SMP C runtimes for linking."
! msgstr "Selecciona entornos de ejecución VxWorks SMP C para enlazado."
  
  #: lto/lang.opt:50
! #, no-c-format
  msgid "Set linker output type (used internally during LTO optimization)."
! msgstr "Establece el tipo de salida del enlazador (usado internamente durante la optimización LTO)."
  
  #: lto/lang.opt:54
  #, no-c-format
*************** msgstr "Modo de análisis del programa c
*** 13247,13322 ****
  #: lto/lang.opt:78
  #, no-c-format
  msgid "Call the dump function for variables and function in IL."
! msgstr ""
  
  #: lto/lang.opt:82
  #, no-c-format
  msgid "Dump the demangled output."
! msgstr ""
  
  #: lto/lang.opt:86
! #, fuzzy, no-c-format
! #| msgid "%q+D aliased to undefined symbol %qE"
  msgid "Dump only the defined symbols."
! msgstr "%q+D es un alias del símbolo sin definir %qE"
  
  #: lto/lang.opt:90
! #, fuzzy, no-c-format
! #| msgid "Can't reassign a value to the final variable %qs"
  msgid "Print the initial values of the variables."
! msgstr "No se puede reasignar un valor a la variable final %qs"
  
  #: lto/lang.opt:94
  #, no-c-format
  msgid "Sort the symbols alphabetically."
! msgstr ""
  
  #: lto/lang.opt:98
  #, no-c-format
  msgid "Sort the symbols according to size."
! msgstr ""
  
  #: lto/lang.opt:102
! #, fuzzy, no-c-format
! #| msgid "Display the compiler's version."
  msgid "Display the symbols in reverse order."
! msgstr "Muestra la versión del compilador."
  
  #: lto/lang.opt:109
  #, no-c-format
  msgid "Dump the details of LTO objects."
! msgstr ""
  
  #: lto/lang.opt:113
  #, no-c-format
  msgid "Dump the statistics of tree types."
! msgstr ""
  
  #: lto/lang.opt:117
  #, no-c-format
  msgid "Dump the statistics of trees."
! msgstr ""
  
  #: lto/lang.opt:121
  #, no-c-format
  msgid "Dump the statistics of gimple statements."
! msgstr ""
  
  #: lto/lang.opt:131
! #, fuzzy, no-c-format
! #| msgid "unrecognized command line option %qs"
  msgid "Dump the dump tool command line options."
! msgstr "no se reconoce la opción de línea de órdenes %qs"
  
  #: lto/lang.opt:135
  #, no-c-format
  msgid "Dump the symtab callgraph."
! msgstr ""
  
  #: common.opt:243
  #, no-c-format
  msgid "Provide bash completion for options starting with provided string."
! msgstr ""
  
  #: common.opt:295
  #, no-c-format
--- 13189,13260 ----
  #: lto/lang.opt:78
  #, no-c-format
  msgid "Call the dump function for variables and function in IL."
! msgstr "Llama a la función de volcado para variables y función en IL."
  
  #: lto/lang.opt:82
  #, no-c-format
  msgid "Dump the demangled output."
! msgstr "Vuelca la salida sin desofuscar."
  
  #: lto/lang.opt:86
! #, no-c-format
  msgid "Dump only the defined symbols."
! msgstr "Vuelca solo los símbolos definidos."
  
  #: lto/lang.opt:90
! #, no-c-format
  msgid "Print the initial values of the variables."
! msgstr "Imprime los valores iniciales de las variables."
  
  #: lto/lang.opt:94
  #, no-c-format
  msgid "Sort the symbols alphabetically."
! msgstr "Ordena los símbolos alfabéticamente."
  
  #: lto/lang.opt:98
  #, no-c-format
  msgid "Sort the symbols according to size."
! msgstr "Ordena los símbolos por tamaño."
  
  #: lto/lang.opt:102
! #, no-c-format
  msgid "Display the symbols in reverse order."
! msgstr "Muestra los símbolos en orden inverso."
  
  #: lto/lang.opt:109
  #, no-c-format
  msgid "Dump the details of LTO objects."
! msgstr "Vuelca los detalles de los objetos LTO."
  
  #: lto/lang.opt:113
  #, no-c-format
  msgid "Dump the statistics of tree types."
! msgstr "Vuelca las estadísticas de tipos árbol."
  
  #: lto/lang.opt:117
  #, no-c-format
  msgid "Dump the statistics of trees."
! msgstr "Vuelca las estadísticas de árboles."
  
  #: lto/lang.opt:121
  #, no-c-format
  msgid "Dump the statistics of gimple statements."
! msgstr "Vuelca las estadísticas de sentencias «gimple»."
  
  #: lto/lang.opt:131
! #, no-c-format
  msgid "Dump the dump tool command line options."
! msgstr "Vuelca las opciones de la línea de órdenes de la herramienta de volcado."
  
  #: lto/lang.opt:135
  #, no-c-format
  msgid "Dump the symtab callgraph."
! msgstr "Vuelca el grafo de llamadas de «symtab»."
  
  #: common.opt:243
  #, no-c-format
  msgid "Provide bash completion for options starting with provided string."
! msgstr "Proporciona completado bash para las opciones que comienzan por la cadena dada."
  
  #: common.opt:295
  #, no-c-format
*************** msgid "Optimize for debugging experience
*** 13354,13363 ****
  msgstr "Optimiza para experiencia de depuración en lugar de velocidad o tamaño."
  
  #: common.opt:488
! #, fuzzy, no-c-format
! #| msgid "Optimize for space rather than speed."
  msgid "Optimize for space aggressively rather than speed."
! msgstr "Optimiza para espacio en lugar de velocidad."
  
  #: common.opt:528
  #, no-c-format
--- 13292,13300 ----
  msgstr "Optimiza para experiencia de depuración en lugar de velocidad o tamaño."
  
  #: common.opt:488
! #, no-c-format
  msgid "Optimize for space aggressively rather than speed."
! msgstr "Optimiza agresivamente por espacio en lugar de por velocidad."
  
  #: common.opt:528
  #, no-c-format
*************** msgstr "Avisa si se accede a una matriz
*** 13382,13388 ****
  #: common.opt:556 common.opt:560
  #, no-c-format
  msgid "Warn for uses of pointers to deallocated storage."
! msgstr ""
  
  #: common.opt:564
  #, no-c-format
--- 13319,13325 ----
  #: common.opt:556 common.opt:560
  #, no-c-format
  msgid "Warn for uses of pointers to deallocated storage."
! msgstr "Avisa de usos de punteros a almacenamiento desasignado."
  
  #: common.opt:564
  #, no-c-format
*************** msgid "Warn about inappropriate attribut
*** 13390,13409 ****
  msgstr "Avisa sobre la aritmética de punteros de funciones."
  
  #: common.opt:568
! #, fuzzy, no-c-format
! #| msgid "wrong number of arguments specified for %qE attribute"
  msgid "Do not warn about specified attributes."
! msgstr "se especificó el número equivocado de argumentos para el atributo %qE"
  
  #: common.opt:572 common.opt:576
  #, no-c-format
  msgid "Warn about type safety and similar errors and mismatches in declarations with alias attributes."
! msgstr ""
  
  #: common.opt:580
  #, no-c-format
  msgid "Warn when profiling instrumentation was requested, but could not be applied to a certain function."
! msgstr ""
  
  #: common.opt:585 common.opt:589
  #, no-c-format
--- 13327,13345 ----
  msgstr "Avisa sobre la aritmética de punteros de funciones."
  
  #: common.opt:568
! #, no-c-format
  msgid "Do not warn about specified attributes."
! msgstr "No avisa sobre los atributos especificados."
  
  #: common.opt:572 common.opt:576
  #, no-c-format
  msgid "Warn about type safety and similar errors and mismatches in declarations with alias attributes."
! msgstr "Avisa sobre seguridad de tipo y errores similares y sobre discordancia en declaraciones con astributos alias."
  
  #: common.opt:580
  #, no-c-format
  msgid "Warn when profiling instrumentation was requested, but could not be applied to a certain function."
! msgstr "Avisa cuando se ha solicitado instrumentación de perfilado que no pudo aplicarse a cierta función."
  
  #: common.opt:585 common.opt:589
  #, no-c-format
*************** msgstr "Avisa sobre conversión de punte
*** 13413,13419 ****
  #: common.opt:593
  #, no-c-format
  msgid "Complain when a command-line option is valid, but not applicable to the current front end."
! msgstr ""
  
  #: common.opt:597
  #, no-c-format
--- 13349,13355 ----
  #: common.opt:593
  #, no-c-format
  msgid "Complain when a command-line option is valid, but not applicable to the current front end."
! msgstr "Se queja cuando una opción de la línea de órdenes es válida pero no aplicable al interfaz actual."
  
  #: common.opt:597
  #, no-c-format
*************** msgid "Warn when a #warning directive is
*** 13421,13430 ****
  msgstr "Avisa cuando se encuentra una directiva #warning."
  
  #: common.opt:601
! #, fuzzy, no-c-format
! #| msgid "Warn about uses of __attribute__((deprecated)) declarations."
  msgid "Warn about uses of __attribute__((warning)) declarations."
! msgstr "Avisa sobre usos de declaraciones __attribute__((obsoleto))."
  
  #: common.opt:605
  #, no-c-format
--- 13357,13365 ----
  msgstr "Avisa cuando se encuentra una directiva #warning."
  
  #: common.opt:601
! #, no-c-format
  msgid "Warn about uses of __attribute__((warning)) declarations."
! msgstr "Avisa sobre usos de declaraciones __attribute__((aviso))."
  
  #: common.opt:605
  #, no-c-format
*************** msgid "Warn when an optimization pass is
*** 13442,13457 ****
  msgstr "Avisa cuando se desactiva un paso de optimización."
  
  #: common.opt:617
! #, fuzzy, no-c-format
! #| msgid "Treat all warnings as errors."
  msgid "Turn all warnings into errors."
! msgstr "Trata todos los avisos como errores."
  
  #: common.opt:621
! #, fuzzy, no-c-format
! #| msgid "Treat specified warning as error."
  msgid "Turn the specified warning into an error."
! msgstr "Trata el aviso especificado como error."
  
  #: common.opt:625
  #, no-c-format
--- 13377,13390 ----
  msgstr "Avisa cuando se desactiva un paso de optimización."
  
  #: common.opt:617
! #, no-c-format
  msgid "Turn all warnings into errors."
! msgstr "Convierte todos los avisos en errores."
  
  #: common.opt:621
! #, no-c-format
  msgid "Turn the specified warning into an error."
! msgstr "Convierte el aviso especificado en error."
  
  #: common.opt:625
  #, no-c-format
*************** msgid "Exit on the first error occurred.
*** 13464,13479 ****
  msgstr "Termina cuando sucede el primer error."
  
  #: common.opt:633
! #, fuzzy, no-c-format
! #| msgid "-Wframe-larger-than=<number>\tWarn if a function's stack frame requires more than <number> bytes."
  msgid "-Wframe-larger-than=<byte-size>\tWarn if a function's stack frame requires in excess of <byte-size>."
! msgstr "-Wframe-larger-than=<número>\tAvisa si el marco de la pila de una función requiere más de <número> bytes."
  
  #: common.opt:637
! #, fuzzy, no-c-format
! #| msgid "-Wno-vla-larger-than Disable Wvla-larger-than= warning.  Equivalent to Wvla-larger-than=<SIZE_MAX> or larger."
  msgid "Disable -Wframe-larger-than= warning.  Equivalent to -Wframe-larger-than=<SIZE_MAX> or larger."
! msgstr "-Wno-vla-larger-than Desactiva el aviso Wvla-larger-than=.  Equivalente a Wvla-larger-than=<MAX_TAMAÑO> o mayor."
  
  #: common.opt:641
  #, no-c-format
--- 13397,13410 ----
  msgstr "Termina cuando sucede el primer error."
  
  #: common.opt:633
! #, no-c-format
  msgid "-Wframe-larger-than=<byte-size>\tWarn if a function's stack frame requires in excess of <byte-size>."
! msgstr "-Wframe-larger-than=<tamaño-bytes>\tAvisa si el marco de la pila de una función requiere en exceso de <tamaño-bytes> bytes."
  
  #: common.opt:637
! #, no-c-format
  msgid "Disable -Wframe-larger-than= warning.  Equivalent to -Wframe-larger-than=<SIZE_MAX> or larger."
! msgstr "Deshabilita el aviso -Wframe-larger-than=.  Equivalente a -Wframe-larger-than=<MAX_TAMAÑO> o mayor."
  
  #: common.opt:641
  #, no-c-format
*************** msgstr ""
*** 13488,13494 ****
  #: common.opt:656
  #, no-c-format
  msgid "Warn when a switch case falls through."
! msgstr ""
  
  #: common.opt:664
  #, no-c-format
--- 13419,13425 ----
  #: common.opt:656
  #, no-c-format
  msgid "Warn when a switch case falls through."
! msgstr "Avisa cuando un switch case pasa de largo."
  
  #: common.opt:664
  #, no-c-format
*************** msgid "Warn when an atomic memory model
*** 13501,13516 ****
  msgstr "Avisa cuando un parámetro de modelo de memoria atomic se reconoce que está fuera del rango válido."
  
  #: common.opt:675
! #, fuzzy, no-c-format
! #| msgid "-Wlarger-than=<number>\tWarn if an object is larger than <number> bytes."
  msgid "-Wlarger-than=<byte-size>\tWarn if an object's size exceeds <byte-size>."
! msgstr "-Wlarger-than=<número>\tAvisa si un objeto es más grande que <número> bytes."
  
  #: common.opt:679
! #, fuzzy, no-c-format
! #| msgid "-Wno-vla-larger-than Disable Wvla-larger-than= warning.  Equivalent to Wvla-larger-than=<SIZE_MAX> or larger."
  msgid "Disable -Wlarger-than= warning.  Equivalent to -Wlarger-than=<SIZE_MAX> or larger."
! msgstr "-Wno-vla-larger-than Desactiva el aviso Wvla-larger-than=.  Equivalente a Wvla-larger-than=<MAX_TAMAÑO> o mayor."
  
  #: common.opt:683
  #, no-c-format
--- 13432,13445 ----
  msgstr "Avisa cuando un parámetro de modelo de memoria atomic se reconoce que está fuera del rango válido."
  
  #: common.opt:675
! #, no-c-format
  msgid "-Wlarger-than=<byte-size>\tWarn if an object's size exceeds <byte-size>."
! msgstr "-Wlarger-than=<tamaño-bytes>\tAvisa si el tamaño de un objeto excede <tamaño-bytes>."
  
  #: common.opt:679
! #, no-c-format
  msgid "Disable -Wlarger-than= warning.  Equivalent to -Wlarger-than=<SIZE_MAX> or larger."
! msgstr "Desactiva el aviso -Wlarger-than=.  Equivalente a -Wlarger-than=<MAX_TAMAÑO> o mayor."
  
  #: common.opt:683
  #, no-c-format
*************** msgid "Warn if dereferencing a NULL poin
*** 13523,13538 ****
  msgstr "Avisa si la desreferencia de un puntero NULL puede llevar a un comportamiento erróneo o indefinido."
  
  #: common.opt:698
! #, fuzzy, no-c-format
! #| msgid "Warn about returning a pointer/reference to a local or temporary variable."
  msgid "Warn about passing a pointer/reference to a local or temporary variable to a musttail call argument."
! msgstr "Advierte del retorno de puntero/referencia a variable local o temporal."
  
  #: common.opt:702
! #, fuzzy, no-c-format
! #| msgid "Warn about returning a pointer/reference to a local or temporary variable."
  msgid "Warn about pointer/reference to a local or temporary variable possibly escaping to a musttail call."
! msgstr "Advierte del retorno de puntero/referencia a variable local o temporal."
  
  #: common.opt:706
  #, no-c-format
--- 13452,13465 ----
  msgstr "Avisa si la desreferencia de un puntero NULL puede llevar a un comportamiento erróneo o indefinido."
  
  #: common.opt:698
! #, no-c-format
  msgid "Warn about passing a pointer/reference to a local or temporary variable to a musttail call argument."
! msgstr "Advierte del paso de puntero/referencia a variable local o temporal en argumento de llamada «musttail»."
  
  #: common.opt:702
! #, no-c-format
  msgid "Warn about pointer/reference to a local or temporary variable possibly escaping to a musttail call."
! msgstr "Advierte de puntero/referencia a variable local o temporal posiblemente escapando a una llamada «musttail»."
  
  #: common.opt:706
  #, no-c-format
*************** msgid "Warn when not issuing stack smash
*** 13595,13610 ****
  msgstr "Avisa cuando no se está usando la protección contra destrucción de la pila por alguna razón."
  
  #: common.opt:760
! #, fuzzy, no-c-format
! #| msgid "-Wstack-usage=<number>\tWarn if stack usage might be larger than specified amount."
  msgid "-Wstack-usage=<byte-size>\tWarn if stack usage might exceed <byte-size>."
! msgstr "-Wstack-usage=<number>\tAvisa si el uso de pila puede ser mayor que el monto especificado."
  
  #: common.opt:764
! #, fuzzy, no-c-format
! #| msgid "-Wno-vla-larger-than Disable Wvla-larger-than= warning.  Equivalent to Wvla-larger-than=<SIZE_MAX> or larger."
  msgid "Disable Wstack-usage= warning.  Equivalent to Wstack-usage=<SIZE_MAX> or larger."
! msgstr "-Wno-vla-larger-than Desactiva el aviso Wvla-larger-than=.  Equivalente a Wvla-larger-than=<MAX_TAMAÑO> o mayor."
  
  #: common.opt:768 common.opt:772
  #, no-c-format
--- 13522,13535 ----
  msgstr "Avisa cuando no se está usando la protección contra destrucción de la pila por alguna razón."
  
  #: common.opt:760
! #, no-c-format
  msgid "-Wstack-usage=<byte-size>\tWarn if stack usage might exceed <byte-size>."
! msgstr "-Wstack-usage=<tamaño-bytes>\tAvisa si el uso de pila puede exceder <tamaño-bytes>."
  
  #: common.opt:764
! #, no-c-format
  msgid "Disable Wstack-usage= warning.  Equivalent to Wstack-usage=<SIZE_MAX> or larger."
! msgstr "Desactiva el aviso Wstack-usage=.  Equivalente a Wstack-usage=<MAX_TAMAÑO> o mayor."
  
  #: common.opt:768 common.opt:772
  #, no-c-format
*************** msgid "Warn about functions which might
*** 13642,13651 ****
  msgstr "Avisa sobre funciones que pueden ser candidatas para __attribute__((malloc))."
  
  #: common.opt:804
! #, fuzzy, no-c-format
! #| msgid "Warn about functions which might be candidates for __attribute__((noreturn))."
  msgid "Warn about functions which might be candidates for __attribute__((returns_nonnull))."
! msgstr "Avisa sobre funciones que pueden ser candidatas para __attribute((noreturn))."
  
  #: common.opt:808
  #, no-c-format
--- 13567,13575 ----
  msgstr "Avisa sobre funciones que pueden ser candidatas para __attribute__((malloc))."
  
  #: common.opt:804
! #, no-c-format
  msgid "Warn about functions which might be candidates for __attribute__((returns_nonnull))."
! msgstr "Avisa sobre funciones que pueden ser candidatas para __attribute__((returns_nonnull))."
  
  #: common.opt:808
  #, no-c-format
*************** msgid "Warn whenever a trampoline is gen
*** 13678,13687 ****
  msgstr "Avisa siempre que se genera un trampolín."
  
  #: common.opt:833
! #, fuzzy, no-c-format
! #| msgid "Warn about maybe uninitialized automatic variables."
  msgid "Warn about cases where -ftrivial-auto-var-init cannot initialize an auto variable."
! msgstr "Avisa sobre variables automáticas probablemente sin inicializar."
  
  #: common.opt:837
  #, no-c-format
--- 13602,13610 ----
  msgstr "Avisa siempre que se genera un trampolín."
  
  #: common.opt:833
! #, no-c-format
  msgid "Warn about cases where -ftrivial-auto-var-init cannot initialize an auto variable."
! msgstr "Avisa sobre casos en los que -ftrivial-auto-var-init no puede inicializar una auto variable."
  
  #: common.opt:837
  #, no-c-format
*************** msgstr "Avisa en perfiles case en -fprof
*** 13746,13773 ****
  #: common.opt:889
  #, no-c-format
  msgid "Warn in case a function ends earlier than it begins due to an invalid linenum macros."
! msgstr ""
  
  #: common.opt:893
  #, no-c-format
  msgid "Warn when a conditional has too many terms and condition coverage profiling gives up instrumenting the expression."
! msgstr ""
  
  #: common.opt:898
  #, no-c-format
  msgid "-fpath-coverage-limit=<number> Don't instrument functions path count exceeding <number>."
! msgstr ""
  
  #: common.opt:903
  #, no-c-format
  msgid "Warn if a function exceeds the number of paths (controlled by -fpath-coverage-limit) and path coverage give up instrumenting the function. The limit is approximate and conservative and coverage might give up even if the actual number is slightly below the limit."
! msgstr ""
  
  #: common.opt:910
! #, fuzzy, no-c-format
! #| msgid "Warn in case profiles in -fprofile-use do not match."
  msgid "Warn in case profiles in -fprofile-use do not exist."
! msgstr "Avisa en perfiles case en -fprofile-use que no coincidan."
  
  #: common.opt:914
  #, no-c-format
--- 13669,13695 ----
  #: common.opt:889
  #, no-c-format
  msgid "Warn in case a function ends earlier than it begins due to an invalid linenum macros."
! msgstr "Avisa en caso de que una función termine antes de empezar a causa de macros con número de línea no válido."
  
  #: common.opt:893
  #, no-c-format
  msgid "Warn when a conditional has too many terms and condition coverage profiling gives up instrumenting the expression."
! msgstr "Avisa cuando un condicional tiene demasiados términos y el perfilado de cobertura de condiciones renuncia a instrumentar la expresión."
  
  #: common.opt:898
  #, no-c-format
  msgid "-fpath-coverage-limit=<number> Don't instrument functions path count exceeding <number>."
! msgstr "-fpath-coverage-limit=<número> No instrumenta funciones donde el cómputo de la ruta excede <número>"
  
  #: common.opt:903
  #, no-c-format
  msgid "Warn if a function exceeds the number of paths (controlled by -fpath-coverage-limit) and path coverage give up instrumenting the function. The limit is approximate and conservative and coverage might give up even if the actual number is slightly below the limit."
! msgstr "Avisa si una función excede el número de rutas (controladas por -fpath-coverage-limit) y la cobertura de ruta renuncia a instrumentar la función. El límite es aproximado y conservador y la cobertura podría renunciar incluso si el número real es ligeralmente inferior al límite."
  
  #: common.opt:910
! #, no-c-format
  msgid "Warn in case profiles in -fprofile-use do not exist."
! msgstr "Avisa en caso de que los perfiles no existan en -fprofile-use."
  
  #: common.opt:914
  #, no-c-format
*************** msgid "Warn when a vector operation is c
*** 13775,13784 ****
  msgstr "Avisar cuando una operación vectorial se compila fuera del SIMD."
  
  #: common.opt:918
! #, fuzzy, no-c-format
! #| msgid "Warn about unprototyped function declarations."
  msgid "Warn about unsupported features in ThreadSanitizer."
! msgstr "Avisa sobre declaraciones de función sin prototipo."
  
  #: common.opt:934
  #, no-c-format
--- 13697,13705 ----
  msgstr "Avisar cuando una operación vectorial se compila fuera del SIMD."
  
  #: common.opt:918
! #, no-c-format
  msgid "Warn about unsupported features in ThreadSanitizer."
! msgstr "Avisa sobre características no disponibles en ThreadSanitizer."
  
  #: common.opt:934
  #, no-c-format
*************** msgid "Align the start of loops."
*** 13836,13851 ****
  msgstr "Alinea el inicio de los bucles."
  
  #: common.opt:1104
! #, fuzzy, no-c-format
! #| msgid "Allow the store merging pass to introduce unaligned stores if it is legal to do so."
  msgid "Allow the compiler to introduce new data races on stores."
! msgstr "Permitir que el paso de mezcla de almacenamientos introduzca almacenamientos desalineados si es legal hacerlo."
  
  #: common.opt:1108
! #, fuzzy, no-c-format
! #| msgid "Enable traditional preprocessing."
  msgid "Enable static analysis pass."
! msgstr "Habilita el preprocesamiento tradicional."
  
  #: common.opt:1128
  #, no-c-format
--- 13757,13770 ----
  msgstr "Alinea el inicio de los bucles."
  
  #: common.opt:1104
! #, no-c-format
  msgid "Allow the compiler to introduce new data races on stores."
! msgstr "Permite que el compilador introduzca carreras de datos en almacenes."
  
  #: common.opt:1108
! #, no-c-format
  msgid "Enable static analysis pass."
! msgstr "Habilita el paso de análisis estático."
  
  #: common.opt:1128
  #, no-c-format
*************** msgstr "Selecciona el tipo de saneamient
*** 13860,13866 ****
  #: common.opt:1145
  #, no-c-format
  msgid "-fasan-shadow-offset=<number>\tUse custom shadow memory offset."
! msgstr ""
  
  #: common.opt:1149
  #, no-c-format
--- 13779,13785 ----
  #: common.opt:1145
  #, no-c-format
  msgid "-fasan-shadow-offset=<number>\tUse custom shadow memory offset."
! msgstr "-fasan-shadow-offset=<número>\tUtiliza desplazamiento personalizado para la memoria «shadow»."
  
  #: common.opt:1149
  #, no-c-format
*************** msgid "This switch is deprecated; use -f
*** 13878,13893 ****
  msgstr "Esta opción es obsoleta; utilice en su lugar -fsanitize-recover=."
  
  #: common.opt:1162
! #, fuzzy, no-c-format
! #| msgid "Use trap instead of a library function for undefined behavior sanitization."
  msgid "Use traps instead of diagnostics of undefined behavior sanitizers."
! msgstr "Usa trap en lugar de una función de biblioteca para sanear el comportamiento indefinido."
  
  #: common.opt:1172
! #, fuzzy, no-c-format
! #| msgid "This switch is deprecated; use -fsanitize-recover= instead."
  msgid "This switch is deprecated; use -fsanitize-trap= instead."
! msgstr "Esta opción es obsoleta; utilice en su lugar -fsanitize-recover=."
  
  #: common.opt:1176
  #, no-c-format
--- 13797,13810 ----
  msgstr "Esta opción es obsoleta; utilice en su lugar -fsanitize-recover=."
  
  #: common.opt:1162
! #, no-c-format
  msgid "Use traps instead of diagnostics of undefined behavior sanitizers."
! msgstr "Usa traps en lugar de diagnósticos de saneadores de comportamiento indefinido."
  
  #: common.opt:1172
! #, no-c-format
  msgid "This switch is deprecated; use -fsanitize-trap= instead."
! msgstr "Esta opción es obsoleta; utilice en su lugar -fsanitize-trap=."
  
  #: common.opt:1176
  #, no-c-format
*************** msgid "Use profiling information for bra
*** 13925,13940 ****
  msgstr "Usa la información de análisis de perfil para las probabilidades de ramificación."
  
  #: common.opt:1222
! #, fuzzy, no-c-format
! #| msgid "Output stack usage information on a per-function basis."
  msgid "Output callgraph information on a per-file basis."
! msgstr "Información de uso de pila de salida basada por función."
  
  #: common.opt:1226
! #, fuzzy, no-c-format
! #| msgid "Output stack usage information on a per-function basis."
  msgid "Output callgraph information on a per-file basis with decorations."
! msgstr "Información de uso de pila de salida basada por función."
  
  #: common.opt:1230
  #, no-c-format
--- 13842,13855 ----
  msgstr "Usa la información de análisis de perfil para las probabilidades de ramificación."
  
  #: common.opt:1222
! #, no-c-format
  msgid "Output callgraph information on a per-file basis."
! msgstr "Saca información del grafo de llamadas organizado por ficheros."
  
  #: common.opt:1226
! #, no-c-format
  msgid "Output callgraph information on a per-file basis with decorations."
! msgstr "Saca información del grafo de llamadas organizado por ficheros con decoraciones."
  
  #: common.opt:1230
  #, no-c-format
*************** msgstr "Realiza comprobaciones de consis
*** 13969,13975 ****
  #: common.opt:1261
  #, no-c-format
  msgid "For -f*-prefix-map= options compare canonicalized pathnames rather than just strings."
! msgstr ""
  
  #: common.opt:1265
  #, no-c-format
--- 13884,13890 ----
  #: common.opt:1261
  #, no-c-format
  msgid "For -f*-prefix-map= options compare canonicalized pathnames rather than just strings."
! msgstr "Para las opciones -f*-prefix-map= compara nombres de ruta canónicos en lugar de simplemente cadenas."
  
  #: common.opt:1265
  #, no-c-format
*************** msgid "Looks for opportunities to reduce
*** 13982,13991 ****
  msgstr "Busca oportunidades para reducir los ajustes de pila y las referencias de pila."
  
  #: common.opt:1273
! #, fuzzy, no-c-format
! #| msgid "Do not put uninitialized globals in the common section."
  msgid "Put uninitialized globals in the common section."
! msgstr "No pone globales sin inicializar en la sección común."
  
  #: common.opt:1281
  #, no-c-format
--- 13897,13905 ----
  msgstr "Busca oportunidades para reducir los ajustes de pila y las referencias de pila."
  
  #: common.opt:1273
! #, no-c-format
  msgid "Put uninitialized globals in the common section."
! msgstr "Pone globales sin inicializar en la sección común."
  
  #: common.opt:1281
  #, no-c-format
*************** msgid "List all available debugging coun
*** 14048,14069 ****
  msgstr "Enumera todos los contadores de depuración disponibles con sus límites y cuentas."
  
  #: common.opt:1333
! #, fuzzy, no-c-format
! #| msgid "-fdbg-cnt=<counter>:<limit>[,<counter>:<limit>,...]\tSet the debug counter limit."
  msgid "-fdbg-cnt=<counter>[:<lower_limit1>-]<upper_limit1>[:<lower_limit2>-<upper_limit2>:...][,<counter>:...]\tSet the debug counter limit."
! msgstr "-fdbg-cnt=<contador>:<límite>[,<contador>:<límite>,...]\tEstablece el límite del contador de depuración."
  
  #: common.opt:1337
! #, fuzzy, no-c-format
! #| msgid "-fdebug-prefix-map=<old>=<new> Map one directory name to another in debug information."
  msgid "-fdebug-prefix-map=<old>=<new>\tMap one directory name to another in debug information."
! msgstr "-fdebug-prefix-map=<antiguo>=<nuevo> Asocia un nombre de directorio a otro en la información de depuración."
  
  #: common.opt:1341
! #, fuzzy, no-c-format
! #| msgid "-ffile-prefix-map=<old>=<new> Map one directory name to another in compilation result."
  msgid "-ffile-prefix-map=<old>=<new>\tMap one directory name to another in compilation result."
! msgstr "-ffile-prefix-map=<antiguo>=<nuevo> Asocia un nombre de directorio a otro en la información de depuración."
  
  #: common.opt:1345
  #, no-c-format
--- 13962,13980 ----
  msgstr "Enumera todos los contadores de depuración disponibles con sus límites y cuentas."
  
  #: common.opt:1333
! #, no-c-format
  msgid "-fdbg-cnt=<counter>[:<lower_limit1>-]<upper_limit1>[:<lower_limit2>-<upper_limit2>:...][,<counter>:...]\tSet the debug counter limit."
! msgstr "-fdbg-cnt=<contador>[:<límite_inferior1>-]<límite_superior1>[:<límite_inferior2>-<límite_superior2>:...][,<contador>:...]\tEstablece el límite del contador de depuración."
  
  #: common.opt:1337
! #, no-c-format
  msgid "-fdebug-prefix-map=<old>=<new>\tMap one directory name to another in debug information."
! msgstr "-fdebug-prefix-map=<antiguo>=<nuevo>\tAsocia un nombre de directorio a otro en la información de depuración."
  
  #: common.opt:1341
! #, no-c-format
  msgid "-ffile-prefix-map=<old>=<new>\tMap one directory name to another in compilation result."
! msgstr "-ffile-prefix-map=<antiguo>=<nuevo>\tAsocia un nombre de directorio a otro en la información de depuración."
  
  #: common.opt:1345
  #, no-c-format
*************** msgstr "Muestra la línea de código con
*** 14118,14134 ****
  #: common.opt:1400
  #, no-c-format
  msgid "Show lines linking related events in diagnostic paths."
! msgstr ""
  
  #: common.opt:1404
  #, no-c-format
  msgid "Show labels annotating ranges of source code when showing source."
! msgstr ""
  
  #: common.opt:1408
  #, no-c-format
  msgid "Show line numbers in the left margin when showing source."
! msgstr ""
  
  #: common.opt:1416
  #, no-c-format
--- 14029,14045 ----
  #: common.opt:1400
  #, no-c-format
  msgid "Show lines linking related events in diagnostic paths."
! msgstr "Muestra líneas que enlazan elementos relacionados en rutas de diagnóstico."
  
  #: common.opt:1404
  #, no-c-format
  msgid "Show labels annotating ranges of source code when showing source."
! msgstr "Muestra etiquetas que anotan rangos de código fuente cuando se muestra el fuente."
  
  #: common.opt:1408
  #, no-c-format
  msgid "Show line numbers in the left margin when showing source."
! msgstr "Muestra números de línea en el margen izquierdo cuando se muestra el fuente."
  
  #: common.opt:1416
  #, no-c-format
*************** msgid "-fdiagnostics-color=[never|always
*** 14136,14181 ****
  msgstr "-fdiagnostics-color=[never|always|auto]\tColorea los diagnósticos."
  
  #: common.opt:1436
! #, fuzzy, no-c-format
! #| msgid "Enable verbose output."
  msgid "Enable formatting of JSON output."
! msgstr "Activa la salida detallada."
  
  #: common.opt:1440
! #, fuzzy, no-c-format
! #| msgid "-fdiagnostics-color=[never|always|auto]\tColorize diagnostics."
  msgid "-fdiagnostics-urls=[never|always|auto]\tEmbed URLs in diagnostics."
! msgstr "-fdiagnostics-color=[never|always|auto]\tColorea los diagnósticos."
  
  #: common.opt:1460
  #, no-c-format
  msgid "-fdiagnostics-column-unit=[display|byte]\tSelect whether column numbers are output as display columns (default) or raw bytes."
! msgstr ""
  
  #: common.opt:1464
  #, no-c-format
  msgid "-fdiagnostics-column-origin=<number>\tSet the number of the first column.  The default is 1-based as per GNU style, but some utilities may expect 0-based, for example."
! msgstr ""
  
  #: common.opt:1468
  #, no-c-format
  msgid "-fdiagnostics-format=[text|sarif-stderr|sarif-file|json|json-stderr|json-file]\tSelect output format."
! msgstr ""
  
  #: common.opt:1472
  #, no-c-format
  msgid "Add output format."
! msgstr ""
  
  #: common.opt:1476
  #, no-c-format
  msgid "Set output format."
! msgstr ""
  
  #: common.opt:1480
  #, no-c-format
  msgid "-fdiagnostics-escape-format=[unicode|bytes]\tSelect how to escape non-printable-ASCII bytes in the source for diagnostics that suggest it."
! msgstr ""
  
  #: common.opt:1527
  #, no-c-format
--- 14047,14090 ----
  msgstr "-fdiagnostics-color=[never|always|auto]\tColorea los diagnósticos."
  
  #: common.opt:1436
! #, no-c-format
  msgid "Enable formatting of JSON output."
! msgstr "Activa la salida en formato JSON."
  
  #: common.opt:1440
! #, no-c-format
  msgid "-fdiagnostics-urls=[never|always|auto]\tEmbed URLs in diagnostics."
! msgstr "-fdiagnostics-urls=[never|always|auto]\tInserta URLS en los diagnósticos."
  
  #: common.opt:1460
  #, no-c-format
  msgid "-fdiagnostics-column-unit=[display|byte]\tSelect whether column numbers are output as display columns (default) or raw bytes."
! msgstr "-fdiagnostics-column-unit=[display|byte]\tSelecciona si los números de columna se sacan como columnas (predeterminado) o bytes crudos."
  
  #: common.opt:1464
  #, no-c-format
  msgid "-fdiagnostics-column-origin=<number>\tSet the number of the first column.  The default is 1-based as per GNU style, but some utilities may expect 0-based, for example."
! msgstr "-fdiagnostics-column-origin=<número>\tEstablece el número de la primera columna.  El origen predefinido es 1 al estilo GNU, pero algunas utilidades pueden esperar que empiece en 0, por ejemplo."
  
  #: common.opt:1468
  #, no-c-format
  msgid "-fdiagnostics-format=[text|sarif-stderr|sarif-file|json|json-stderr|json-file]\tSelect output format."
! msgstr "-fdiagnostics-format=[text|sarif-stderr|sarif-file|json|json-stderr|json-file]\tSelecciona el formato de salida."
  
  #: common.opt:1472
  #, no-c-format
  msgid "Add output format."
! msgstr "Añade el formato de salida."
  
  #: common.opt:1476
  #, no-c-format
  msgid "Set output format."
! msgstr "Establece el formato de salida."
  
  #: common.opt:1480
  #, no-c-format
  msgid "-fdiagnostics-escape-format=[unicode|bytes]\tSelect how to escape non-printable-ASCII bytes in the source for diagnostics that suggest it."
! msgstr "-fdiagnostics-escape-format=[unicode|bytes]\tSelecciona cómo escapar los bytes ASCII no imprimibles en el fuente para el diagnóstico que lo sugiera."
  
  #: common.opt:1527
  #, no-c-format
*************** msgstr "Asocia adecuadamente los mensaje
*** 14195,14248 ****
  #: common.opt:1539
  #, no-c-format
  msgid "Print CWE identifiers for diagnostic messages, where available."
! msgstr ""
  
  #: common.opt:1543
  #, no-c-format
  msgid "Print any rules associated with diagnostic messages."
! msgstr ""
  
  #: common.opt:1547
  #, no-c-format
  msgid "Use color within diagnostic messages to highlight pertinent information."
! msgstr ""
  
  #: common.opt:1551
  #, no-c-format
  msgid "Specify how to print any control-flow path associated with a diagnostic."
! msgstr ""
  
  #: common.opt:1555
  #, no-c-format
  msgid "Turn off any diagnostics features that complicate the output, such as line numbers, color, and warning URLs."
! msgstr ""
  
  #: common.opt:1559
! #, fuzzy, no-c-format
! #| msgid "-ftabstop=<number>\tDistance between tab stops for column reporting."
  msgid "-ftabstop=<number>      Distance between tab stops for column reporting."
! msgstr "-ftabstop=<número>\tDistancia entre topes de tabulador para informes en columnas."
  
  #: common.opt:1575
  #, no-c-format
  msgid "Show stack depths of events in paths."
! msgstr ""
  
  #: common.opt:1579
  #, no-c-format
  msgid "-fdiagnostics-text-art-charset=[none|ascii|unicode|emoji]\tDetermine which characters to use in text arg diagrams."
! msgstr ""
  
  #: common.opt:1598
  #, no-c-format
  msgid "Set minimum width of left margin of source code when showing source."
! msgstr ""
  
  #: common.opt:1602
! #, fuzzy, no-c-format
! #| msgid "-fdisable-[tree|rtl|ipa]-<pass>=range1+range2 disables an optimization pass."
  msgid "-fdisable-[tree|rtl|ipa]-<pass>=range1+range2\tDisable an optimization pass."
! msgstr "-fdisable-[tree|rtl|ipa]-<paso>=rango1+rango2 desactiva un paso de optimización."
  
  #: common.opt:1606
  #, fuzzy, no-c-format
--- 14104,14155 ----
  #: common.opt:1539
  #, no-c-format
  msgid "Print CWE identifiers for diagnostic messages, where available."
! msgstr "Imprime identificadores CWE para mensajes de diagnóstico, cuando están disponibles."
  
  #: common.opt:1543
  #, no-c-format
  msgid "Print any rules associated with diagnostic messages."
! msgstr "Imprime las reglas asociadas a mensajes de diagnóstico."
  
  #: common.opt:1547
  #, no-c-format
  msgid "Use color within diagnostic messages to highlight pertinent information."
! msgstr "Utiliza colores en mensajes de diagnóstico para resaltar información pertinente."
  
  #: common.opt:1551
  #, no-c-format
  msgid "Specify how to print any control-flow path associated with a diagnostic."
! msgstr "Especifica cómo imprimir ruta de control de flujo asociada a diagnóstico."
  
  #: common.opt:1555
  #, no-c-format
  msgid "Turn off any diagnostics features that complicate the output, such as line numbers, color, and warning URLs."
! msgstr "Desactiva capacidades de diagnóstico que compliquen la salida, tal como números de línea, colores y URLs de avisos."
  
  #: common.opt:1559
! #, no-c-format
  msgid "-ftabstop=<number>      Distance between tab stops for column reporting."
! msgstr "-ftabstop=<número>      Distancia entre topes de tabulador para informes en columnas."
  
  #: common.opt:1575
  #, no-c-format
  msgid "Show stack depths of events in paths."
! msgstr "Muestra las profundidades de la pila de eventos en las rutas."
  
  #: common.opt:1579
  #, no-c-format
  msgid "-fdiagnostics-text-art-charset=[none|ascii|unicode|emoji]\tDetermine which characters to use in text arg diagrams."
! msgstr "-fdiagnostics-text-art-charset=[none|ascii|unicode|emoji]\tDetermina qué caracteres utilizar en diagramas artísticos de texto."
  
  #: common.opt:1598
  #, no-c-format
  msgid "Set minimum width of left margin of source code when showing source."
! msgstr "Establece la anchura mínima del margen izquierdo del código fuente cuando se muestra código."
  
  #: common.opt:1602
! #, no-c-format
  msgid "-fdisable-[tree|rtl|ipa]-<pass>=range1+range2\tDisable an optimization pass."
! msgstr "-fdisable-[tree|rtl|ipa]-<paso>=rango1+rango2\tDesactiva un paso de optimización."
  
  #: common.opt:1606
  #, fuzzy, no-c-format
diff -Nrcpad gcc-16-20260201/gcc/prefix.cc gcc-16-20260208/gcc/prefix.cc
*** gcc-16-20260201/gcc/prefix.cc	Sun Feb  1 22:32:08 2026
--- gcc-16-20260208/gcc/prefix.cc	Sun Feb  8 22:32:07 2026
*************** update_path (const char *path, const cha
*** 265,271 ****
  
        result = concat (key, &path[len], NULL);
        if (free_key)
! 	free (CONST_CAST (char *, key));
        result = translate_name (result);
      }
    else
--- 265,271 ----
  
        result = concat (key, &path[len], NULL);
        if (free_key)
! 	free (const_cast<char *> (key));
        result = translate_name (result);
      }
    else
diff -Nrcpad gcc-16-20260201/gcc/pretty-print.cc gcc-16-20260208/gcc/pretty-print.cc
*** gcc-16-20260201/gcc/pretty-print.cc	Sun Feb  1 22:32:08 2026
--- gcc-16-20260208/gcc/pretty-print.cc	Sun Feb  8 22:32:07 2026
*************** identifier_to_locale (const char *ident)
*** 3055,3061 ****
  	      /* Repeat the whole conversion process as needed with
  		 larger buffers so non-reversible transformations can
  		 always be detected.  */
! 	      ICONV_CONST char *inbuf = CONST_CAST (char *, ident);
  	      char *outbuf;
  	      size_t inbytesleft = idlen;
  	      size_t outbytesleft = ret_alloc - 1;
--- 3055,3061 ----
  	      /* Repeat the whole conversion process as needed with
  		 larger buffers so non-reversible transformations can
  		 always be detected.  */
! 	      ICONV_CONST char *inbuf = const_cast<char *> (ident);
  	      char *outbuf;
  	      size_t inbytesleft = idlen;
  	      size_t outbytesleft = ret_alloc - 1;
diff -Nrcpad gcc-16-20260201/gcc/print-rtl.cc gcc-16-20260208/gcc/print-rtl.cc
*** gcc-16-20260201/gcc/print-rtl.cc	Sun Feb  1 22:32:08 2026
--- gcc-16-20260208/gcc/print-rtl.cc	Sun Feb  8 22:32:07 2026
*************** void
*** 190,197 ****
  print_mem_expr (FILE *outfile, const_tree expr)
  {
    fputc (' ', outfile);
!   print_generic_expr (outfile, CONST_CAST_TREE (expr),
! 		      dump_flags | TDF_SLIM);
  }
  #endif
  
--- 190,196 ----
  print_mem_expr (FILE *outfile, const_tree expr)
  {
    fputc (' ', outfile);
!   print_generic_expr (outfile, const_cast<tree> (expr), dump_flags | TDF_SLIM);
  }
  #endif
  
diff -Nrcpad gcc-16-20260201/gcc/range-op.cc gcc-16-20260208/gcc/range-op.cc
*** gcc-16-20260201/gcc/range-op.cc	Sun Feb  1 22:32:08 2026
--- gcc-16-20260208/gcc/range-op.cc	Sun Feb  8 22:32:07 2026
*************** operator_widen_mult_signed::wi_fold (ira
*** 2405,2416 ****
  				     const wide_int &rh_lb,
  				     const wide_int &rh_ub) const
  {
!   signop s = TYPE_SIGN (type);
! 
!   wide_int lh_wlb = wide_int::from (lh_lb, wi::get_precision (lh_lb) * 2, SIGNED);
!   wide_int lh_wub = wide_int::from (lh_ub, wi::get_precision (lh_ub) * 2, SIGNED);
!   wide_int rh_wlb = wide_int::from (rh_lb, wi::get_precision (rh_lb) * 2, s);
!   wide_int rh_wub = wide_int::from (rh_ub, wi::get_precision (rh_ub) * 2, s);
  
    /* We don't expect a widening multiplication to be able to overflow but range
       calculations for multiplications are complicated.  After widening the
--- 2405,2414 ----
  				     const wide_int &rh_lb,
  				     const wide_int &rh_ub) const
  {
!   wide_int lh_wlb = wide_int::from (lh_lb, TYPE_PRECISION (type), SIGNED);
!   wide_int lh_wub = wide_int::from (lh_ub, TYPE_PRECISION (type), SIGNED);
!   wide_int rh_wlb = wide_int::from (rh_lb, TYPE_PRECISION (type), SIGNED);
!   wide_int rh_wub = wide_int::from (rh_ub, TYPE_PRECISION (type), SIGNED);
  
    /* We don't expect a widening multiplication to be able to overflow but range
       calculations for multiplications are complicated.  After widening the
*************** operator_widen_mult_signed::wi_fold (ira
*** 2418,2424 ****
    return op_mult.wi_fold (r, type, lh_wlb, lh_wub, rh_wlb, rh_wub);
  }
  
- 
  class operator_widen_mult_unsigned : public range_operator
  {
  public:
--- 2416,2421 ----
*************** operator_widen_mult_unsigned::wi_fold (i
*** 2437,2448 ****
  				       const wide_int &rh_lb,
  				       const wide_int &rh_ub) const
  {
!   signop s = TYPE_SIGN (type);
  
!   wide_int lh_wlb = wide_int::from (lh_lb, wi::get_precision (lh_lb) * 2, UNSIGNED);
!   wide_int lh_wub = wide_int::from (lh_ub, wi::get_precision (lh_ub) * 2, UNSIGNED);
!   wide_int rh_wlb = wide_int::from (rh_lb, wi::get_precision (rh_lb) * 2, s);
!   wide_int rh_wub = wide_int::from (rh_ub, wi::get_precision (rh_ub) * 2, s);
  
    /* We don't expect a widening multiplication to be able to overflow but range
       calculations for multiplications are complicated.  After widening the
--- 2434,2472 ----
  				       const wide_int &rh_lb,
  				       const wide_int &rh_ub) const
  {
!   wide_int lh_wlb = wide_int::from (lh_lb, TYPE_PRECISION (type), UNSIGNED);
!   wide_int lh_wub = wide_int::from (lh_ub, TYPE_PRECISION (type), UNSIGNED);
!   wide_int rh_wlb = wide_int::from (rh_lb, TYPE_PRECISION (type), UNSIGNED);
!   wide_int rh_wub = wide_int::from (rh_ub, TYPE_PRECISION (type), UNSIGNED);
  
!   /* We don't expect a widening multiplication to be able to overflow but range
!      calculations for multiplications are complicated.  After widening the
!      operands lets call the base class.  */
!   return op_mult.wi_fold (r, type, lh_wlb, lh_wub, rh_wlb, rh_wub);
! }
! 
! class operator_widen_mult_signed_unsigned : public range_operator
! {
! public:
!   virtual void wi_fold (irange &r, tree type,
! 			const wide_int &lh_lb,
! 			const wide_int &lh_ub,
! 			const wide_int &rh_lb,
! 			const wide_int &rh_ub)
!     const;
! } op_widen_mult_signed_unsigned;
! 
! void
! operator_widen_mult_signed_unsigned::wi_fold (irange &r, tree type,
! 					      const wide_int &lh_lb,
! 					      const wide_int &lh_ub,
! 					      const wide_int &rh_lb,
! 					      const wide_int &rh_ub) const
! {
!   wide_int lh_wlb = wide_int::from (lh_lb, TYPE_PRECISION (type), SIGNED);
!   wide_int lh_wub = wide_int::from (lh_ub, TYPE_PRECISION (type), SIGNED);
!   wide_int rh_wlb = wide_int::from (rh_lb, TYPE_PRECISION (type), UNSIGNED);
!   wide_int rh_wub = wide_int::from (rh_ub, TYPE_PRECISION (type), UNSIGNED);
  
    /* We don't expect a widening multiplication to be able to overflow but range
       calculations for multiplications are complicated.  After widening the
*************** range_op_table::initialize_integral_ops
*** 4811,4816 ****
--- 4835,4841 ----
    set (ABSU_EXPR, op_absu);
    set (OP_WIDEN_MULT_SIGNED, op_widen_mult_signed);
    set (OP_WIDEN_MULT_UNSIGNED, op_widen_mult_unsigned);
+   set (OP_WIDEN_MULT_SIGNED_UNSIGNED, op_widen_mult_signed_unsigned);
    set (OP_WIDEN_PLUS_SIGNED, op_widen_plus_signed);
    set (OP_WIDEN_PLUS_UNSIGNED, op_widen_plus_unsigned);
  
diff -Nrcpad gcc-16-20260201/gcc/range-op.h gcc-16-20260208/gcc/range-op.h
*** gcc-16-20260201/gcc/range-op.h	Sun Feb  1 22:32:08 2026
--- gcc-16-20260208/gcc/range-op.h	Sun Feb  8 22:32:07 2026
*************** extern void wi_set_zero_nonzero_bits (tr
*** 391,401 ****
  // Add them to the end of the tree-code vector, and provide a name for
  // each allowing for easy access when required.
  
! #define OP_WIDEN_MULT_SIGNED	((unsigned) MAX_TREE_CODES)
! #define OP_WIDEN_MULT_UNSIGNED	((unsigned) MAX_TREE_CODES + 1)
! #define OP_WIDEN_PLUS_SIGNED	((unsigned) MAX_TREE_CODES + 2)
! #define OP_WIDEN_PLUS_UNSIGNED	((unsigned) MAX_TREE_CODES + 3)
! #define RANGE_OP_TABLE_SIZE	((unsigned) MAX_TREE_CODES + 4)
  
  // This implements the range operator tables as local objects.
  
--- 391,402 ----
  // Add them to the end of the tree-code vector, and provide a name for
  // each allowing for easy access when required.
  
! #define OP_WIDEN_MULT_SIGNED		((unsigned) MAX_TREE_CODES)
! #define OP_WIDEN_MULT_UNSIGNED		((unsigned) MAX_TREE_CODES + 1)
! #define OP_WIDEN_MULT_SIGNED_UNSIGNED	((unsigned) MAX_TREE_CODES + 2)
! #define OP_WIDEN_PLUS_SIGNED		((unsigned) MAX_TREE_CODES + 3)
! #define OP_WIDEN_PLUS_UNSIGNED		((unsigned) MAX_TREE_CODES + 4)
! #define RANGE_OP_TABLE_SIZE		((unsigned) MAX_TREE_CODES + 5)
  
  // This implements the range operator tables as local objects.
  
diff -Nrcpad gcc-16-20260201/gcc/recog.cc gcc-16-20260208/gcc/recog.cc
*** gcc-16-20260201/gcc/recog.cc	Sun Feb  1 22:32:08 2026
--- gcc-16-20260208/gcc/recog.cc	Sun Feb  8 22:32:07 2026
*************** cancel_changes (int num)
*** 608,614 ****
        else
  	*changes[i].loc = changes[i].old;
        if (changes[i].object && !MEM_P (changes[i].object))
! 	INSN_CODE (changes[i].object) = changes[i].old_code;
      }
    num_changes = num;
  }
--- 608,618 ----
        else
  	*changes[i].loc = changes[i].old;
        if (changes[i].object && !MEM_P (changes[i].object))
! 	{
! 	  INSN_CODE (changes[i].object) = changes[i].old_code;
! 	  if (recog_data.insn == changes[i].object)
! 	    recog_data.insn = nullptr;
! 	}
      }
    num_changes = num;
  }
*************** extract_asm_operands (rtx body)
*** 2030,2036 ****
  int
  asm_noperands (const_rtx body)
  {
!   rtx asm_op = extract_asm_operands (CONST_CAST_RTX (body));
    int i, n_sets = 0;
  
    if (asm_op == NULL)
--- 2034,2040 ----
  int
  asm_noperands (const_rtx body)
  {
!   rtx asm_op = extract_asm_operands (const_cast<rtx> (body));
    int i, n_sets = 0;
  
    if (asm_op == NULL)
diff -Nrcpad gcc-16-20260201/gcc/rtlanal.cc gcc-16-20260208/gcc/rtlanal.cc
*** gcc-16-20260201/gcc/rtlanal.cc	Sun Feb  1 22:32:08 2026
--- gcc-16-20260208/gcc/rtlanal.cc	Sun Feb  8 22:32:07 2026
*************** seq_cost (const rtx_insn *seq, bool spee
*** 5827,5833 ****
          cost += set_rtx_cost (set, speed);
        else if (NONDEBUG_INSN_P (seq))
  	{
! 	  int this_cost = insn_cost (CONST_CAST_RTX_INSN (seq), speed);
  	  if (this_cost > 0)
  	    cost += this_cost;
  	  else
--- 5827,5834 ----
          cost += set_rtx_cost (set, speed);
        else if (NONDEBUG_INSN_P (seq))
  	{
! 	  int this_cost = insn_cost (const_cast<struct rtx_insn *> (seq),
! 				     speed);
  	  if (this_cost > 0)
  	    cost += this_cost;
  	  else
*************** truncated_to_mode (machine_mode mode, co
*** 6200,6205 ****
--- 6201,6217 ----
    if (REG_P (x) && rtl_hooks.reg_truncated_to_mode (mode, x))
      return true;
  
+   /* This explicit TRUNCATE may be needed on targets that require
+      MODE to be suitably extended when stored in X.  Targets such as
+      mips64 use (sign_extend:DI (truncate:SI (reg:DI x))) to perform
+      an explicit extension, avoiding use of (subreg:SI (reg:DI x))
+      which is assumed to already be extended.  */
+   scalar_int_mode imode, omode;
+   if (is_a <scalar_int_mode> (mode, &imode)
+       && is_a <scalar_int_mode> (GET_MODE (x), &omode)
+       && targetm.mode_rep_extended (imode, omode) != UNKNOWN)
+     return false;
+ 
    /* See if we already satisfy the requirements of MODE.  If yes we
       can just switch to MODE.  */
    if (num_sign_bit_copies_in_rep[GET_MODE (x)][mode]
diff -Nrcpad gcc-16-20260201/gcc/rust/ChangeLog gcc-16-20260208/gcc/rust/ChangeLog
*** gcc-16-20260201/gcc/rust/ChangeLog	Sun Feb  1 22:32:08 2026
--- gcc-16-20260208/gcc/rust/ChangeLog	Sun Feb  8 22:32:07 2026
***************
*** 1,3 ****
--- 1,8 ----
+ 2026-02-06  Torbjörn SVENSSON  <torbjorn.svensson@foss.st.com>
+ 
+ 	PR middle-end/123892
+ 	* backend/rust-tree.cc: Replace CONST_CAST_TREE with const_cast<tree>.
+ 
  2026-01-20  Jakub Jelinek  <jakub@redhat.com>
  
  	* lang.opt (frust-crate=, frust-extern=,
diff -Nrcpad gcc-16-20260201/gcc/rust/backend/rust-tree.cc gcc-16-20260208/gcc/rust/backend/rust-tree.cc
*** gcc-16-20260201/gcc/rust/backend/rust-tree.cc	Sun Feb  1 22:32:08 2026
--- gcc-16-20260208/gcc/rust/backend/rust-tree.cc	Sun Feb  8 22:32:07 2026
*************** out:
*** 796,802 ****
  location_t
  rs_expr_location (const_tree t_)
  {
!   tree t = CONST_CAST_TREE (t_);
    if (t == NULL_TREE)
      return UNKNOWN_LOCATION;
  
--- 796,802 ----
  location_t
  rs_expr_location (const_tree t_)
  {
!   tree t = const_cast<tree> (t_);
    if (t == NULL_TREE)
      return UNKNOWN_LOCATION;
  
*************** rs_type_quals (const_tree type)
*** 957,963 ****
    int quals;
    /* This CONST_CAST is okay because strip_array_types returns its
       argument unmodified and we assign it to a const_tree.  */
!   type = strip_array_types (CONST_CAST_TREE (type));
    if (type == error_mark_node
        /* Quals on a FUNCTION_TYPE are memfn quals.  */
        || TREE_CODE (type) == FUNCTION_TYPE)
--- 957,963 ----
    int quals;
    /* This CONST_CAST is okay because strip_array_types returns its
       argument unmodified and we assign it to a const_tree.  */
!   type = strip_array_types (const_cast<tree> (type));
    if (type == error_mark_node
        /* Quals on a FUNCTION_TYPE are memfn quals.  */
        || TREE_CODE (type) == FUNCTION_TYPE)
*************** comp_except_specs (const_tree t1, const_
*** 2179,2186 ****
    if (exact < ce_exact)
      {
        if (exact == ce_type
! 	  && (canonical_eh_spec (CONST_CAST_TREE (t1))
! 	      == canonical_eh_spec (CONST_CAST_TREE (t2))))
  	return true;
  
        /* noexcept(false) is compatible with no exception-specification,
--- 2179,2186 ----
    if (exact < ce_exact)
      {
        if (exact == ce_type
! 	  && (canonical_eh_spec (const_cast<tree> (t1))
! 	      == canonical_eh_spec (const_cast<tree> (t2))))
  	return true;
  
        /* noexcept(false) is compatible with no exception-specification,
*************** is_bitfield_expr_with_lowered_type (cons
*** 3563,3569 ****
      case VAR_DECL:
        if (DECL_HAS_VALUE_EXPR_P (exp))
  	return is_bitfield_expr_with_lowered_type (
! 	  DECL_VALUE_EXPR (CONST_CAST_TREE (exp)));
        return NULL_TREE;
  
      case VIEW_CONVERT_EXPR:
--- 3563,3569 ----
      case VAR_DECL:
        if (DECL_HAS_VALUE_EXPR_P (exp))
  	return is_bitfield_expr_with_lowered_type (
! 	  DECL_VALUE_EXPR (const_cast<tree> (exp)));
        return NULL_TREE;
  
      case VIEW_CONVERT_EXPR:
*************** strip_top_quals (tree t)
*** 3857,3863 ****
  //     return;
  
  //   location_t loc = DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type));
! //   tree ptype = strip_top_quals (CONST_CAST_TREE (type));
  
  //   if (current_class_type && TYPE_BEING_DEFINED (current_class_type)
  //       && same_type_p (ptype, current_class_type))
--- 3857,3863 ----
  //     return;
  
  //   location_t loc = DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type));
! //   tree ptype = strip_top_quals (const_cast<tree> (type));
  
  //   if (current_class_type && TYPE_BEING_DEFINED (current_class_type)
  //       && same_type_p (ptype, current_class_type))
*************** lvalue_kind (const_tree ref)
*** 4530,4536 ****
        /* FALLTHRU */
      case VAR_DECL:
        if (VAR_P (ref) && DECL_HAS_VALUE_EXPR_P (ref))
! 	return lvalue_kind (DECL_VALUE_EXPR (CONST_CAST_TREE (ref)));
  
        if (TREE_READONLY (ref) && !TREE_STATIC (ref) && DECL_LANG_SPECIFIC (ref)
  	  && DECL_IN_AGGR_P (ref))
--- 4530,4536 ----
        /* FALLTHRU */
      case VAR_DECL:
        if (VAR_P (ref) && DECL_HAS_VALUE_EXPR_P (ref))
! 	return lvalue_kind (DECL_VALUE_EXPR (const_cast<tree> (ref)));
  
        if (TREE_READONLY (ref) && !TREE_STATIC (ref) && DECL_LANG_SPECIFIC (ref)
  	  && DECL_IN_AGGR_P (ref))
*************** complete_type_or_else (tree type, tree v
*** 5193,5199 ****
  bool
  std_layout_type_p (const_tree t)
  {
!   t = strip_array_types (CONST_CAST_TREE (t));
  
    if (CLASS_TYPE_P (t))
      return !CLASSTYPE_NON_STD_LAYOUT (t);
--- 5193,5199 ----
  bool
  std_layout_type_p (const_tree t)
  {
!   t = strip_array_types (const_cast<tree> (t));
  
    if (CLASS_TYPE_P (t))
      return !CLASSTYPE_NON_STD_LAYOUT (t);
diff -Nrcpad gcc-16-20260201/gcc/sched-deps.cc gcc-16-20260208/gcc/sched-deps.cc
*** gcc-16-20260201/gcc/sched-deps.cc	Sun Feb  1 22:32:08 2026
--- gcc-16-20260208/gcc/sched-deps.cc	Sun Feb  8 22:32:07 2026
*************** sched_insn_is_legitimate_for_speculation
*** 674,680 ****
    if (SCHED_GROUP_P (insn))
      return false;
  
!   if (IS_SPECULATION_CHECK_P (CONST_CAST_RTX_INSN (insn)))
      return false;
  
    if (side_effects_p (PATTERN (insn)))
--- 674,680 ----
    if (SCHED_GROUP_P (insn))
      return false;
  
!   if (IS_SPECULATION_CHECK_P (const_cast<struct rtx_insn *> (insn)))
      return false;
  
    if (side_effects_p (PATTERN (insn)))
diff -Nrcpad gcc-16-20260201/gcc/sel-sched-ir.cc gcc-16-20260208/gcc/sel-sched-ir.cc
*** gcc-16-20260201/gcc/sel-sched-ir.cc	Sun Feb  1 22:32:08 2026
--- gcc-16-20260208/gcc/sel-sched-ir.cc	Sun Feb  8 22:32:07 2026
*************** skip_unspecs_callback (const_rtx *xx, co
*** 1090,1096 ****
            || targetm.sched.skip_rtx_p (x)))
      {
        *nx = XVECEXP (x, 0, 0);
!       *ny = CONST_CAST_RTX (y);
        return true;
      }
  
--- 1090,1096 ----
            || targetm.sched.skip_rtx_p (x)))
      {
        *nx = XVECEXP (x, 0, 0);
!       *ny = const_cast<rtx> (y);
        return true;
      }
  
*************** skip_unspecs_callback (const_rtx *xx, co
*** 1098,1104 ****
        && (targetm.sched.skip_rtx_p == NULL
            || targetm.sched.skip_rtx_p (y)))
      {
!       *nx = CONST_CAST_RTX (x);
        *ny = XVECEXP (y, 0, 0);
        return true;
      }
--- 1098,1104 ----
        && (targetm.sched.skip_rtx_p == NULL
            || targetm.sched.skip_rtx_p (y)))
      {
!       *nx = const_cast<rtx> (x);
        *ny = XVECEXP (y, 0, 0);
        return true;
      }
diff -Nrcpad gcc-16-20260201/gcc/selftest.cc gcc-16-20260208/gcc/selftest.cc
*** gcc-16-20260201/gcc/selftest.cc	Sun Feb  1 22:32:08 2026
--- gcc-16-20260208/gcc/selftest.cc	Sun Feb  8 22:32:07 2026
*************** print_diff (const location &loc, const c
*** 80,86 ****
    int exit_status = 0;
    int err = 0;
    pex_one (PEX_SEARCH | PEX_LAST,
! 	   args[0], CONST_CAST (char **, args),
  	   NULL, NULL, NULL, &exit_status, &err);
  }
  
--- 80,86 ----
    int exit_status = 0;
    int err = 0;
    pex_one (PEX_SEARCH | PEX_LAST,
! 	   args[0], const_cast<char **> (args),
  	   NULL, NULL, NULL, &exit_status, &err);
  }
  
diff -Nrcpad gcc-16-20260201/gcc/simplify-rtx.cc gcc-16-20260208/gcc/simplify-rtx.cc
*** gcc-16-20260201/gcc/simplify-rtx.cc	Sun Feb  1 22:32:08 2026
--- gcc-16-20260208/gcc/simplify-rtx.cc	Sun Feb  8 22:32:07 2026
*************** simplify_with_subreg_not (rtx_code binop
*** 3074,3079 ****
--- 3074,3112 ----
      return simplify_gen_binary (binop, mode, op0, new_not);
  }
  
+ /* Return TRUE iff NOP is a negated form of OP, or vice-versa.  */
+ static bool
+ negated_ops_p (rtx nop, rtx op)
+ {
+   /* Explicit negation.  */
+   if (GET_CODE (nop) == NOT
+       && rtx_equal_p (XEXP (nop, 0), op))
+     return true;
+   if (GET_CODE (op) == NOT
+       && rtx_equal_p (XEXP (op, 0), nop))
+     return true;
+ 
+   /* (~C <r A) is a negated form of (C << A) if C == 1.  */
+   if (GET_CODE (op) == ASHIFT
+       && GET_CODE (nop) == ROTATE
+       && XEXP (op, 0) == CONST1_RTX (GET_MODE (op))
+       && CONST_INT_P (XEXP (nop, 0))
+       && INTVAL (XEXP (nop, 0)) == -2
+       && rtx_equal_p (XEXP (op, 1), XEXP (nop, 1)))
+     return true;
+   if (GET_CODE (nop) == ASHIFT
+       && GET_CODE (op) == ROTATE
+       && XEXP (nop, 0) == CONST1_RTX (GET_MODE (op))
+       && CONST_INT_P (XEXP (nop, 0))
+       && INTVAL (XEXP (nop, 0)) == -2
+       && rtx_equal_p (XEXP (op, 1), XEXP (nop, 1)))
+     return true;
+ 
+   /* ??? Should we consider rotations of C and ~C by the same amount?  */
+ 
+   return false;
+ }
+ 
  /* Subroutine of simplify_binary_operation.  Simplify a binary operation
     CODE with result mode MODE, operating on OP0 and OP1.  If OP0 and/or
     OP1 are constant pool references, TRUEOP0 and TRUEOP1 represent the
*************** simplify_context::simplify_binary_operat
*** 3861,3868 ****
  
        /* Convert (ior (and (not A) B) A) into A | B.  */
        if (GET_CODE (op0) == AND
! 	  && GET_CODE (XEXP (op0, 0)) == NOT
! 	  && rtx_equal_p (XEXP (XEXP (op0, 0), 0), op1))
  	return simplify_gen_binary (IOR, mode, XEXP (op0, 1), op1);
  
        tem = simplify_with_subreg_not (code, mode, op0, op1);
--- 3894,3900 ----
  
        /* Convert (ior (and (not A) B) A) into A | B.  */
        if (GET_CODE (op0) == AND
! 	  && negated_ops_p (XEXP (op0, 0), op1))
  	return simplify_gen_binary (IOR, mode, XEXP (op0, 1), op1);
  
        tem = simplify_with_subreg_not (code, mode, op0, op1);
*************** simplify_context::simplify_binary_operat
*** 4133,4140 ****
  
        /* Convert (xor (and (not A) B) A) into A | B.  */
        if (GET_CODE (op0) == AND
! 	  && GET_CODE (XEXP (op0, 0)) == NOT
! 	  && rtx_equal_p (XEXP (XEXP (op0, 0), 0), op1))
  	return simplify_gen_binary (IOR, mode, XEXP (op0, 1), op1);
  
        /* Convert (xor (and (rotate (~1) A) B) (ashift 1 A))
--- 4165,4171 ----
  
        /* Convert (xor (and (not A) B) A) into A | B.  */
        if (GET_CODE (op0) == AND
! 	  && negated_ops_p (XEXP (op0, 0), op1))
  	return simplify_gen_binary (IOR, mode, XEXP (op0, 1), op1);
  
        /* Convert (xor (and (rotate (~1) A) B) (ashift 1 A))
*************** simplify_context::simplify_binary_operat
*** 4413,4433 ****
  	  && rtx_equal_p (op1, XEXP (XEXP (op0, 1), 0)))
  	return simplify_gen_binary (AND, mode, op1, XEXP (op0, 0));
  
!       /* (and (ior/xor (X Y) (not Y)) -> X & ~Y */
        if ((GET_CODE (op0) == IOR || GET_CODE (op0) == XOR)
! 	  && GET_CODE (op1) == NOT
! 	  && rtx_equal_p (XEXP (op1, 0), XEXP (op0, 1)))
  	return simplify_gen_binary (AND, mode, XEXP (op0, 0),
  				    simplify_gen_unary (NOT, mode,
! 							XEXP (op1, 0),
  							mode));
!       /* (and (ior/xor (Y X) (not Y)) -> X & ~Y */
        if ((GET_CODE (op0) == IOR || GET_CODE (op0) == XOR)
! 	  && GET_CODE (op1) == NOT
! 	  && rtx_equal_p (XEXP (op1, 0), XEXP (op0, 0)))
  	return simplify_gen_binary (AND, mode, XEXP (op0, 1),
  				    simplify_gen_unary (NOT, mode,
! 							XEXP (op1, 0),
  							mode));
  
        /* Convert (and (ior A C) (ior B C)) into (ior (and A B) C).  */
--- 4444,4462 ----
  	  && rtx_equal_p (op1, XEXP (XEXP (op0, 1), 0)))
  	return simplify_gen_binary (AND, mode, op1, XEXP (op0, 0));
  
!       /* (and (ior/xor X Y) (not Y)) -> X & ~Y */
        if ((GET_CODE (op0) == IOR || GET_CODE (op0) == XOR)
! 	  && negated_ops_p (op1, XEXP (op0, 1)))
  	return simplify_gen_binary (AND, mode, XEXP (op0, 0),
  				    simplify_gen_unary (NOT, mode,
! 							XEXP (op0, 1),
  							mode));
!       /* (and (ior/xor Y X) (not Y)) -> X & ~Y */
        if ((GET_CODE (op0) == IOR || GET_CODE (op0) == XOR)
! 	  && negated_ops_p (op1, XEXP (op0, 0)))
  	return simplify_gen_binary (AND, mode, XEXP (op0, 1),
  				    simplify_gen_unary (NOT, mode,
! 							XEXP (op0, 0),
  							mode));
  
        /* Convert (and (ior A C) (ior B C)) into (ior (and A B) C).  */
diff -Nrcpad gcc-16-20260201/gcc/statistics.cc gcc-16-20260208/gcc/statistics.cc
*** gcc-16-20260201/gcc/statistics.cc	Sun Feb  1 22:32:08 2026
--- gcc-16-20260208/gcc/statistics.cc	Sun Feb  8 22:32:07 2026
*************** stats_counter_hasher::equal (const stati
*** 74,80 ****
  inline void
  stats_counter_hasher::remove (statistics_counter *v)
  {
!   free (CONST_CAST (char *, v->id));
    free (v);
  }
  
--- 74,80 ----
  inline void
  stats_counter_hasher::remove (statistics_counter *v)
  {
!   free (const_cast<char *> (v->id));
    free (v);
  }
  
diff -Nrcpad gcc-16-20260201/gcc/stringpool.cc gcc-16-20260208/gcc/stringpool.cc
*** gcc-16-20260201/gcc/stringpool.cc	Sun Feb  1 22:32:08 2026
--- gcc-16-20260208/gcc/stringpool.cc	Sun Feb  8 22:32:07 2026
*************** gt_pch_p_S (void *obj ATTRIBUTE_UNUSED,
*** 216,229 ****
  void
  gt_pch_n_S (const void *x)
  {
!   gt_pch_note_object (CONST_CAST (void *, x), CONST_CAST (void *, x),
  		      &gt_pch_p_S);
  }
  
  void
  gt_pch_n_S2 (const void *x, size_t string_len)
  {
!   gt_pch_note_object (CONST_CAST (void *, x), CONST_CAST (void *, x),
  		      &gt_pch_p_S, string_len);
  }
  
--- 216,229 ----
  void
  gt_pch_n_S (const void *x)
  {
!   gt_pch_note_object (const_cast<void *> (x), const_cast<void *> (x),
  		      &gt_pch_p_S);
  }
  
  void
  gt_pch_n_S2 (const void *x, size_t string_len)
  {
!   gt_pch_note_object (const_cast<void *> (x), const_cast<void *> (x),
  		      &gt_pch_p_S, string_len);
  }
  
diff -Nrcpad gcc-16-20260201/gcc/system.h gcc-16-20260208/gcc/system.h
*** gcc-16-20260201/gcc/system.h	Sun Feb  1 22:32:08 2026
--- gcc-16-20260208/gcc/system.h	Sun Feb  8 22:32:07 2026
*************** extern void fancy_abort (const char *, i
*** 1152,1205 ****
  
  #endif /* GCC >= 3.0 */
  
- /* This macro allows casting away const-ness to pass -Wcast-qual
-    warnings.  DO NOT USE THIS UNLESS YOU REALLY HAVE TO!  It should
-    only be used in certain specific cases.  One valid case is where
-    the C standard definitions or prototypes force you to.  E.g. if you
-    need to free a const object, or if you pass a const string to
-    execv, et al.  Another valid use would be in an allocation function
-    that creates const objects that need to be initialized.  In some
-    cases we have non-const functions that return the argument
-    (e.g. next_nonnote_insn).  Rather than create const shadow
-    functions, we can cast away const-ness in calling these interfaces
-    if we're careful to verify that the called function does indeed not
-    modify its argument and the return value is only used in a const
-    context.  (This can be somewhat dangerous as these assumptions can
-    change after the fact).  Beyond these uses, most other cases of
-    using this macro should be viewed with extreme caution.  */
- 
- #ifdef __cplusplus
- #define CONST_CAST2(TOTYPE,FROMTYPE,X) (const_cast<TOTYPE> (X))
- #else
- #if defined(__GNUC__) && GCC_VERSION > 4000
- /* GCC 4.0.x has a bug where it may ICE on this expression,
-    so does GCC 3.4.x (PR17436).  */
- #define CONST_CAST2(TOTYPE,FROMTYPE,X) ((__extension__(union {FROMTYPE _q; TOTYPE _nq;})(X))._nq)
- #elif defined(__GNUC__)
- inline char *
- helper_const_non_const_cast (const char *p)
- {
-   union {
-     const char *const_c;
-     char *c;
-   } val;
-   val.const_c = p;
-   return val.c;
- }
- 
- #define CONST_CAST2(TOTYPE,FROMTYPE,X) \
- 	((TOTYPE) helper_const_non_const_cast ((const char *) (FROMTYPE) (X)))
- #else
- #define CONST_CAST2(TOTYPE,FROMTYPE,X) ((TOTYPE)(FROMTYPE)(X))
- #endif
- #endif
- #define CONST_CAST(TYPE,X) CONST_CAST2 (TYPE, const TYPE, (X))
- #define CONST_CAST_TREE(X) CONST_CAST (union tree_node *, (X))
- #define CONST_CAST_RTX(X) CONST_CAST (struct rtx_def *, (X))
- #define CONST_CAST_RTX_INSN(X) CONST_CAST (struct rtx_insn *, (X))
- #define CONST_CAST_BB(X) CONST_CAST (struct basic_block_def *, (X))
- #define CONST_CAST_GIMPLE(X) CONST_CAST (gimple *, (X))
- 
  /* Activate certain diagnostics as warnings (not errors via the
     -Werror flag).  */
  #if GCC_VERSION >= 4003
--- 1152,1157 ----
diff -Nrcpad gcc-16-20260201/gcc/testsuite/ChangeLog gcc-16-20260208/gcc/testsuite/ChangeLog
*** gcc-16-20260201/gcc/testsuite/ChangeLog	Sun Feb  1 22:32:08 2026
--- gcc-16-20260208/gcc/testsuite/ChangeLog	Sun Feb  8 22:32:07 2026
***************
*** 1,3 ****
--- 1,560 ----
+ 2026-02-07  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/123616
+ 	* g++.dg/reflect/type_of3.C: New test.
+ 
+ 2026-02-07  Jeff Law  <jeffrey.law@oss.qualcomm.com>
+ 
+ 	* gcc.dg/pr90838.c: Commit correct version of patch.
+ 
+ 2026-02-07  Jeff Law  <jeffrey.law@oss.qualcomm.com>
+ 
+ 	* gcc.dg/pr90838.c: Adjust expected output for loongarch.
+ 
+ 2026-02-07  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/123672
+ 	* gcc.dg/pr123672.c: New test.
+ 
+ 2026-02-07  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	PR analyzer/116228
+ 	* g++.dg/analyzer/ice-pr116228.C: New test.
+ 
+ 2026-02-07  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/123659
+ 	* g++.dg/reflect/splice9.C: New test.
+ 
+ 2026-02-07  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/123752
+ 	* g++.dg/reflect/splice8.C: New test.
+ 
+ 2026-02-07  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	* gcc.target/powerpc/asm-hard-reg-2.c: New test.
+ 
+ 2026-02-07  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	PR middle-end/123826
+ 	PR tree-optimization/123958
+ 	PR c++/124002
+ 	* g++.target/i386/pr124002.C: New test case.
+ 	* gcc.target/i386/pr123958.c: Likewise.
+ 	* gcc.dg/errno-4.c: Likewise.
+ 
+ 2026-02-07  Roger Sayle  <roger@nextmovesoftware.com>
+ 	    Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 	    Jeff Law  <jeffrey.law@oss.qualcomm.com>
+ 
+ 	PR rtl-optimization/123833
+ 	* gcc.target/mips/pr123833.c: New test case.
+ 
+ 2026-02-06  Richard Ball  <Richard.Ball@arm.com>
+ 
+ 	* gcc.target/aarch64/atomic_store_with_stshh.c: Testcase change.
+ 	* g++.target/aarch64/atomic_store_with_stshh.C: New test.
+ 
+ 2026-02-06  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR ipa/106260
+ 	* g++.dg/ipa/pr106260.C: New test.
+ 
+ 2026-02-06  Jose E. Marchesi  <jemarch@gnu.org>
+ 
+ 	* algol68/compile/error-nest-4.a68: Strings can now be passed as
+ 	arguments in formal holes.
+ 
+ 2026-02-06  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/101312
+ 	* gcc.dg/pr101312-1.c: New test.
+ 	* gcc.dg/pr101312-2.c: New test.
+ 
+ 2026-02-06  Daniel Barboza  <daniel.barboza@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/114969
+ 	* g++.dg/pr114969.C: New test.
+ 
+ 2026-02-06  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	PR analyzer/98447
+ 	* c-c++-common/analyzer/conditionals-pr98447-1.c: New test.
+ 	* c-c++-common/analyzer/conditionals-pr98447-2.c: New test.
+ 	* c-c++-common/analyzer/null-deref-pr108400-SoftEtherVPN-WebUi.c:
+ 	Updated for false positive being fixed for C.
+ 	* gcc.dg/analyzer/data-model-1.c: Update expected output to
+ 	reflect improved output.
+ 
+ 2026-02-06  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	PR analyzer/117491
+ 	* gcc.dg/analyzer/torture/ice-pr117491.c: New test.
+ 
+ 2026-02-06  Torbjörn SVENSSON  <torbjorn.svensson@foss.st.com>
+ 
+ 	* lib/lto.exp (lto-build-archive): Forward extra command line
+ 	arguments from $GCC_UNDER_TEST to gcc-ar.
+ 
+ 2026-02-06  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR rtl-optimization/119982
+ 	* gcc.target/i386/pr109362.c: XFAIL.
+ 
+ 2026-02-06  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/123977
+ 	* g++.dg/cpp26/stdarg10.C: New test.
+ 
+ 2026-02-06  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* gcc.dg/pr61053.c: Add *-*-mingw* to the dg-error directives
+ 	that currently only match x32.
+ 
+ 2026-02-06  Robin Dapp  <rdapp@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/123940
+ 	* gcc.target/riscv/rvv/autovec/pr123940.c: New test.
+ 
+ 2026-02-05  Marek Polacek  <polacek@redhat.com>
+ 
+ 	* g++.dg/reflect/p3394-1.C: Make dg-run.  Add dg-output.
+ 
+ 2026-02-05  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	PR target/117048
+ 	PR target/123584
+ 	* gcc.target/aarch64/simd/pr117048.c: Scan for # in assembly immediate.
+ 
+ 2026-02-05  Josef Melcr  <josef.melcr@suse.com>
+ 
+ 	PR tree-optimization/123986
+ 	* gfortran.dg/vect/pr123986.f90: New test.
+ 
+ 2026-02-05  Michal Jires  <mjires@suse.cz>
+ 
+ 	PR testsuite/123559
+ 	* c-c++-common/toplevel-extended-asm-1.c: New test.
+ 
+ 2026-02-05  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/123882
+ 	* gcc.dg/pr123882.c: New test.
+ 
+ 2026-02-05  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/123934
+ 	* g++.dg/reflect/type_of2.C: Uncomment an assert.
+ 
+ 2026-02-05  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/122169
+ 	* g++.dg/cpp26/pack-indexing19.C: New test.
+ 
+ 2026-02-05  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Revert:
+ 	2026-02-05  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/101312
+ 	* c-c++-common/pr101312-1.c: New test.
+ 	* c-c++-common/pr101312-2.c: New test.
+ 
+ 2026-02-05  Torbjörn SVENSSON  <torbjorn.svensson@foss.st.com>
+ 
+ 	* lib/lto.exp (lto-build-archive): Transform gcc-ar binary name.
+ 
+ 2026-02-05  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/123983
+ 	* gcc.dg/vect/vect-pr123983.c: New testcase.
+ 
+ 2026-02-05  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/123978
+ 	* gcc.c-torture/execute/pr123978.c: New test.
+ 
+ 2026-02-05  Robin Dapp  <rdapp@oss.qualcomm.com>
+ 
+ 	PR target/123870
+ 	PR target/123969
+ 	* gcc.target/riscv/rvv/xtheadvector/pr123969.c: New test.
+ 
+ 2026-02-05  Robin Dapp  <rdapp@oss.qualcomm.com>
+ 
+ 	PR target/123971
+ 	* gcc.target/riscv/rvv/xtheadvector/pr123971.c: New test.
+ 
+ 2026-02-05  Robin Dapp  <rdapp@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/123925
+ 	* gcc.target/riscv/rvv/autovec/pr123925.c: New test.
+ 
+ 2026-02-05  Robin Dapp  <rdapp@oss.qualcomm.com>
+ 
+ 	PR target/123910
+ 	* gcc.target/riscv/rvv/autovec/pr123910.c: New test.
+ 	* gcc.target/riscv/rvv/xtheadvector/pr114194-rv32.c: xfail.
+ 
+ 2026-02-05  Jose E. Marchesi  <jemarch@gnu.org>
+ 
+ 	* algol68/execute/bits-clear-1.a68: Adapt test to new CLEAR
+ 	semantics.
+ 	* algol68/execute/bits-set-1.a68: Likewise for SET.
+ 	* algol68/execute/bits-test-1.a68: Likewise for TEST.
+ 
+ 2026-02-05  Jose E. Marchesi  <jemarch@gnu.org>
+ 
+ 	PR algol68/123959
+ 	* algol68/execute/bits-shift-1.a68: New test.
+ 	* algol68/execute/bits-shift-2.a68: Likewise.
+ 	* algol68/execute/bits-shift-3.a68: Likewise.
+ 
+ 2026-02-05  Thomas Schwinge  <tschwinge@baylibre.com>
+ 
+ 	PR target/122343
+ 	* gcc.target/nvptx/alloca-5.c: Adjust.
+ 
+ 2026-02-05  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/121726
+ 	* gcc.target/i386/pr121726.c: New testcase.
+ 
+ 2026-02-05  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR tree-optimization/123898
+ 	* gcc.target/aarch64/sve/pr123898.c: New test.
+ 
+ 2026-02-05  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	PR testsuite/123936
+ 	PR tree-optimization/122103
+ 	* gcc.target/aarch64/sve/pr122103_1.c: Add sve hw requirement.
+ 
+ 2026-02-05  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	PR middle-end/123775
+ 	* gcc.target/aarch64/sve2/pr123775.c: Add sve128 and sve2 hw
+ 	requirements.
+ 
+ 2026-02-05  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	PR tree-optimization/123729
+ 	* g++.dg/torture/pr123729.C: Require hostedlib.
+ 
+ 2026-02-05  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i16.c: Adjust the
+ 	asm check to not.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i8.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i16.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i8.c: Ditto.
+ 
+ 2026-02-05  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/pr123916.c: New test.
+ 
+ 2026-02-05  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f16.c: Add param
+ 	vr2fpr-cost.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf-7-f16.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf-7-f32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf-7-f64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf-8-f16.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf-8-f32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vf-8-f64.c: Ditto.
+ 
+ 2026-02-05  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i16.c: Add param
+ 	vr2gpr-cost.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i8.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u16.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u8.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i16.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i8.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u16.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u8.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i16.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i8.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u16.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u8.c: Ditto.
+ 
+ 2026-02-04  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR middle-end/121661
+ 	* gcc.dg/torture/pr121661-1.c: New test.
+ 
+ 2026-02-04  Jeff Law  <jeffrey.law@oss.qualcomm.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/vls/J: Remove.
+ 
+ 2026-02-04  Yangyu Chen  <cyy@cyyself.name>
+ 
+ 	* gcc.target/riscv/target-attr-bad-11.c: New test.
+ 
+ 2026-02-04  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/49330
+ 	* gcc.dg/torture/pr49330-1.c: New testcase.
+ 	* gcc.dg/torture/pr49330-2.c: Likewise.
+ 
+ 2026-02-04  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/123913
+ 	PR c++/123964
+ 	* g++.dg/reflect/parameters_of7.C: New test.
+ 
+ 2026-02-04  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/123611
+ 	* g++.dg/reflect/expansion-stmt1.C: New test.
+ 
+ 2026-02-04  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/123818
+ 	* g++.dg/cpp0x/pr123818.C: New test.
+ 
+ 2026-02-04  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/122689
+ 	* gcc.dg/bitint-127.c: New test.
+ 
+ 2026-02-03  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	PR analyzer/116865
+ 	* c-c++-common/analyzer/ice-pr116865.c: New test.
+ 
+ 2026-02-03  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	* algol68/compile/error-module-definition-1.a68: New test.
+ 	* algol68/compile/error-module-definition-2.a68: New test.
+ 
+ 2026-02-03  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	* gdc.dg/pr90601.d: Adjust test.
+ 	* lib/gdc-utils.exp: Handle new compiler options.
+ 
+ 2026-02-03  Kirill Chilikin  <chilikin.k@gmail.com>
+ 
+ 	PR fortran/117303
+ 	* gfortran.dg/c_funloc_tests_7.f90:
+ 	Updated test due to changed code generation.
+ 	* gfortran.dg/c_funloc_tests_9.f90: New test.
+ 
+ 2026-02-03  Pengxuan Zheng  <pengxuan.zheng@oss.qualcomm.com>
+ 
+ 	* gcc.dg/pr123109.c: Move to...
+ 	* gcc.dg/pr123109-vector.c: ...here.
+ 	* gcc.dg/pr123109-scalar.c: New test.
+ 
+ 2026-02-03  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/123952
+ 	* gfortran.dg/pr123952.f90: New test.
+ 
+ 2026-02-03  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	PR middle-end/118608
+ 	* gcc.target/mips/pr118608-1.c: New test case.
+ 	* gcc.target/mips/pr118608-2.c: Likewise.
+ 	* gcc.target/mips/pr118608-3.c: Likewise.
+ 	* gcc.target/mips/pr118608-4.c: Likewise.
+ 
+ 2026-02-03  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	PR middle-end/123826
+ 	* gcc.dg/errno-2.c: New test case.
+ 	* gcc.dg/errno-3.c: Likewise.
+ 
+ 2026-02-03  Alfie Richards  <alfie.richards@arm.com>
+ 
+ 	PR target/123548
+ 	* gcc.target/aarch64/pldir.c: Move to...
+ 	* gcc.target/aarch64/acle/pldir.c: ...here.
+ 	* gcc.target/aarch64/builtin_pld_pli_illegal.c: Removed.
+ 	* gcc.target/aarch64/acle/pld_pli_illegal.c: New test.
+ 	* gcc.target/aarch64/builtin_pld_pli.c: Removed.
+ 	* gcc.target/aarch64/acle/pld_pli.c: New test.
+ 	* gcc.target/aarch64/pr123548.c: New test.
+ 
+ 2026-02-03  Christophe Lyon  <christophe.lyon@arm.com>
+ 
+ 	* lib/target-supports.exp
+ 	(check_effective_target_arm_neon_ok_nocache): Add "-mcpu=unset
+ 	-march=armv7-a+simd -mfpu=auto" to the list.
+ 
+ 2026-02-03  Jeff Law  <jeffrey.law@oss.qualcomm.com>
+ 
+ 	PR rtl-optimization/123322
+ 	* gcc.target/riscv/pr123322.c: New test.
+ 
+ 2026-02-03  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR libstdc++/123921
+ 	* g++.dg/reflect/feat2.C: Add also test for __cpp_lib_define_static.
+ 	* g++.dg/reflect/feat3.C: New test.
+ 
+ 2026-02-03  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR ipa/123416
+ 	* gcc.dg/torture/pr123416.c: New testcase.
+ 
+ 2026-02-02  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	* g++.dg/cpp23/feat-cxx2b.C: Adjust expected __cpp_deduction_guides
+ 	value.
+ 	* g++.dg/cpp26/feat-cxx26.C: Likewise.
+ 
+ 2026-02-02  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/limited_with8.adb: New test.
+ 	* gnat.dg/limited_with8_pkg1.ads: New helper.
+ 	* gnat.dg/limited_with8_pkg2.ads: Likewise.
+ 	* gnat.dg/limited_with8_pkg2.adb: Likewise.
+ 
+ 2026-02-02  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR rtl-optimization/123294
+ 	* gcc.dg/pr123294-1.c: New test.
+ 	* gcc.target/aarch64/pr123294-1.c: New test.
+ 
+ 2026-02-02  Marek Polacek  <polacek@redhat.com>
+ 	    Boris Staletic  <boris.staletic@protonmail.com>
+ 
+ 	PR c++/123695
+ 	* g++.dg/reflect/object_of3.C: New test.
+ 
+ 2026-02-02  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/123614
+ 	* g++.dg/reflect/parm5.C: New test.
+ 
+ 2026-02-02  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR tree-optimization/123897
+ 	* gcc.target/aarch64/sve/pr123897.c: New test.
+ 
+ 2026-02-02  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR target/121290
+ 	* gcc.target/aarch64/pr121290_3.c: New test.
+ 
+ 2026-02-02  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/121104
+ 	* gcc.dg/pr121104.c: New test.
+ 
+ 2026-02-01  Eric Botcazou  <ebotcazou@adacore.com>
+ 	    Liam Powell  <liam@liampwll.com>
+ 
+ 	* gnat.dg/prefix4.adb: New test.
+ 	* gnat.dg/prefix4_pkg.ads: New helper.
+ 
+ 2026-02-01  Eric Botcazou  <ebotcazou@adacore.com>
+ 	    Liam Powell  <liam@liampwll.com>
+ 
+ 	* gnat.dg/iter7.adb: New test.
+ 
+ 2026-02-01  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/123755
+ 	* gcc.dg/vect/vect-pr123755-2.c: New testcase.
+ 
+ 2026-02-01  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* g++.dg/lto/pr118817_0.C: Require hostedlib.
+ 
+ 2026-02-01  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* gcc.target/riscv/lto/pr110812_0.c: Set cmodel explicitly.
+ 	* gcc.target/riscv/lto/pr110812_1.c: Likewise.
+ 
+ 2026-02-01  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* gcc.dg/tree-ssa/pr83403-1.c: Bump param on riscv32.
+ 	* gcc.dg/tree-ssa/pr83403-2.c: Likewise.
+ 
+ 2026-02-01  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* gcc.dg/pr90838-2.c: Drop 64-bit CTZ expectation on riscv32.
+ 
+ 2026-02-01  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* gcc.target/riscv/pr114139.c: Set the abi explicitly.
+ 
+ 2026-02-01  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* gcc.target/riscv/pr118170.c: Set the abi explicitly.
+ 
+ 2026-02-01  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/vls-vlmax/shuffle-slide.c:
+ 	Set the abi explicitly.
+ 
+ 2026-02-01  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/pr113206-2.c: Set the expected
+ 	code model explicitly.
+ 
+ 2026-02-01  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/binop/vadd-rv32gcv-nofm.c: Set the
+ 	expected code model explicitly.
+ 	* gcc.target/riscv/rvv/autovec/binop/vadd-rv64gcv-nofm.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/binop/vsub-rv32gcv-nofm.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/binop/vsub-rv64gcv-nofm.c: Likewise.
+ 
+ 2026-02-01  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/bug-3.c: Disable scheduling,
+ 	and restore expectation of slli combine.
+ 
+ 2026-02-01  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* gcc.target/riscv/pr122215.c: Prune valgrind unhandled
+ 	syscall multi-line warning.
+ 
+ 2026-02-01  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-3.c: Revert
+ 	Maximum lmul = 2 count.
+ 	* gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-7.c: XFAIL
+ 	unmet lmul selection expectations.
+ 	* gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-5.c: Likewise,
+ 	and drop start/end patterns.
+ 	* gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-6.c: XFAIL
+ 	missing Maximum lmul messages.
+ 	* gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-8.c: Likewise.
+ 	* gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-12.c: Drop
+ 	Maximum lmul = 8 message.  Likewise.
+ 	* gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-10.c: Likewise.
+ 	* gcc.dg/vect/costmodel/riscv/rvv/pr113112-3.c: XFAIL unexpected
+ 	selections of lmul, and of return insn.
+ 	* gcc.dg/vect/costmodel/riscv/rvv/pr113112-4.c: XFAIL unexpected
+ 	selection of lmul.
+ 
+ 2026-02-01  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	PR c++/121832
+ 	* g++.dg/concepts/pr121832.C: New test.
+ 
  2026-01-31  Jose E. Marchesi  <jemarch@gnu.org>
  
  	* algol68/execute/bits-test-1.a68: New test.
diff -Nrcpad gcc-16-20260201/gcc/testsuite/algol68/compile/error-module-definition-1.a68 gcc-16-20260208/gcc/testsuite/algol68/compile/error-module-definition-1.a68
*** gcc-16-20260201/gcc/testsuite/algol68/compile/error-module-definition-1.a68	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/algol68/compile/error-module-definition-1.a68	Sun Feb  8 22:32:08 2026
***************
*** 0 ****
--- 1 ----
+ module Module = { dg-error "" }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/algol68/compile/error-module-definition-2.a68 gcc-16-20260208/gcc/testsuite/algol68/compile/error-module-definition-2.a68
*** gcc-16-20260201/gcc/testsuite/algol68/compile/error-module-definition-2.a68	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/algol68/compile/error-module-definition-2.a68	Sun Feb  8 22:32:08 2026
***************
*** 0 ****
--- 1,3 ----
+ module Module = { dg-error "" }
+ begin
+ end
diff -Nrcpad gcc-16-20260201/gcc/testsuite/algol68/compile/error-nest-4.a68 gcc-16-20260208/gcc/testsuite/algol68/compile/error-nest-4.a68
*** gcc-16-20260201/gcc/testsuite/algol68/compile/error-nest-4.a68	Sun Feb  1 22:32:09 2026
--- gcc-16-20260208/gcc/testsuite/algol68/compile/error-nest-4.a68	Sun Feb  8 22:32:08 2026
*************** begin string s =
*** 2,8 ****
           nest C "lala"; { dg-error "" }
        union(int,real) x =
           nest C "x"; { dg-error "" }
!       proc(string)bool y =
           nest C "y"; { dg-error "" }
        skip
  end
--- 2,8 ----
           nest C "lala"; { dg-error "" }
        union(int,real) x =
           nest C "x"; { dg-error "" }
!       proc(union(void,string))bool y =
           nest C "y"; { dg-error "" }
        skip
  end
diff -Nrcpad gcc-16-20260201/gcc/testsuite/algol68/execute/bits-clear-1.a68 gcc-16-20260208/gcc/testsuite/algol68/execute/bits-clear-1.a68
*** gcc-16-20260201/gcc/testsuite/algol68/execute/bits-clear-1.a68	Sun Feb  1 22:32:09 2026
--- gcc-16-20260208/gcc/testsuite/algol68/execute/bits-clear-1.a68	Sun Feb  8 22:32:08 2026
***************
*** 1,30 ****
  begin (short short bits a = short short 16rf;
         assert (a CLEAR (short_short_bits_width + 1) = a);
         assert (a CLEAR -1 = a);
!        assert (a CLEAR short_short_bits_width = short short 16rf);
!        assert (a CLEAR 1 CLEAR 2 = BIN short short 12));
  
        (short bits a = short 16rf;
         assert (a CLEAR (short_bits_width + 1) = a);
         assert (a CLEAR -1 = a);
!        assert (a CLEAR short_bits_width = short 16rf);
!        assert (a CLEAR 1 CLEAR 2 = BIN short 12));
  
        (bits a = 16rf;
         assert (a CLEAR (bits_width + 1) = a);
         assert (a CLEAR -1 = a);
!        assert (a CLEAR bits_width = 16rf);
!        assert (a CLEAR 1 CLEAR 2 = BIN 12));
  
        (long bits a = long 16rf;
         assert (a CLEAR (long_bits_width + 1) = a);
         assert (a CLEAR -1 = a);
!        assert (a CLEAR long_bits_width = long 16rf);
!        assert (a CLEAR 1 CLEAR 2 = BIN long 12));
  
        (long long bits a = long long 16rf;
         assert (a CLEAR (long_long_bits_width + 1) = a);
         assert (a CLEAR -1 = a);
!        assert (a CLEAR long_long_bits_width = long long 16rf);
!        assert (a CLEAR 1 CLEAR 2 = BIN long long 12))
  end
--- 1,35 ----
  begin (short short bits a = short short 16rf;
         assert (a CLEAR (short_short_bits_width + 1) = a);
         assert (a CLEAR -1 = a);
!        assert (a CLEAR short_short_bits_width = a);
!        assert (a CLEAR (short_short_bits_width-1) = short short 16rf);
!        assert (a CLEAR 0 CLEAR 1 = BIN short short 12));
  
        (short bits a = short 16rf;
         assert (a CLEAR (short_bits_width + 1) = a);
         assert (a CLEAR -1 = a);
!        assert (a CLEAR short_bits_width = a);
!        assert (a CLEAR (short_bits_width-1) = short 16rf);
!        assert (a CLEAR 0 CLEAR 1 = BIN short 12));
  
        (bits a = 16rf;
         assert (a CLEAR (bits_width + 1) = a);
         assert (a CLEAR -1 = a);
!        assert (a CLEAR bits_width = a);
!        assert (a CLEAR (bits_width-1) = 16rf);
!        assert (a CLEAR 0 CLEAR 1 = BIN 12));
  
        (long bits a = long 16rf;
         assert (a CLEAR (long_bits_width + 1) = a);
         assert (a CLEAR -1 = a);
!        assert (a CLEAR long_bits_width = a);
!        assert (a CLEAR (long_bits_width-1) = long 16rf);
!        assert (a CLEAR 0 CLEAR 1 = BIN long 12));
  
        (long long bits a = long long 16rf;
         assert (a CLEAR (long_long_bits_width + 1) = a);
         assert (a CLEAR -1 = a);
!        assert (a CLEAR long_long_bits_width = a);
!        assert (a CLEAR (long_long_bits_width-1) = long long 16rf);
!        assert (a CLEAR 0 CLEAR 1 = BIN long long 12))
  end
diff -Nrcpad gcc-16-20260201/gcc/testsuite/algol68/execute/bits-set-1.a68 gcc-16-20260208/gcc/testsuite/algol68/execute/bits-set-1.a68
*** gcc-16-20260201/gcc/testsuite/algol68/execute/bits-set-1.a68	Sun Feb  1 22:32:09 2026
--- gcc-16-20260208/gcc/testsuite/algol68/execute/bits-set-1.a68	Sun Feb  8 22:32:08 2026
***************
*** 1,30 ****
  begin (short short bits a = short short 16r0;
         assert (a SET (short_short_bits_width + 1) = a);
         assert (a SET -1 = a);
!        assert (a SET short_short_bits_width = short short 16r1 SHL (short_short_bits_width-1));
!        assert (a SET 1 SET 2 = BIN short short 3));
  
        (short bits a = short 16r0;
         assert (a SET (short_bits_width + 1) = a);
         assert (a SET -1 = a);
!        assert (a SET short_bits_width = short 16r1 SHL (short_bits_width-1));
!        assert (a SET 1 SET 2 = BIN short 3));
  
        (bits a = 16r0;
         assert (a SET (bits_width + 1) = a);
         assert (a SET -1 = a);
!        assert (a SET bits_width = 16r1 SHL (bits_width-1));
!        assert (a SET 1 SET 2 = BIN 3));
  
        (long bits a = long 16r0;
         assert (a SET (long_bits_width + 1) = a);
         assert (a SET -1 = a);
!        assert (a SET long_bits_width = long 16r1 SHL (long_bits_width-1));
!        assert (a SET 1 SET 2 = BIN long 3));
  
        (long long bits a = long long 16r0;
         assert (a SET (long_long_bits_width + 1) = a);
         assert (a SET -1 = a);
!        assert (a SET long_long_bits_width = long long 16r1 SHL (long_long_bits_width-1));
!        assert (a SET 1 SET 2 = BIN long long 3))
  end
--- 1,35 ----
  begin (short short bits a = short short 16r0;
         assert (a SET (short_short_bits_width + 1) = a);
         assert (a SET -1 = a);
!        assert (a SET short_short_bits_width = a);
!        assert (a SET (short_short_bits_width-1) = short short 16r1 SHL (short_short_bits_width-1));
!        assert (a SET 0 SET 1 = BIN short short 3));
  
        (short bits a = short 16r0;
         assert (a SET (short_bits_width + 1) = a);
         assert (a SET -1 = a);
!        assert (a SET short_bits_width = a);
!        assert (a SET (short_bits_width-1) = short 16r1 SHL (short_bits_width-1));
!        assert (a SET 0 SET 1 = BIN short 3));
  
        (bits a = 16r0;
         assert (a SET (bits_width + 1) = a);
         assert (a SET -1 = a);
!        assert (a SET bits_width = a);
!        assert (a SET (bits_width-1) = 16r1 SHL (bits_width-1));
!        assert (a SET 0 SET 1 = BIN 3));
  
        (long bits a = long 16r0;
         assert (a SET (long_bits_width + 1) = a);
         assert (a SET -1 = a);
!        assert (a SET long_bits_width = a);
!        assert (a SET (long_bits_width-1) = long 16r1 SHL (long_bits_width-1));
!        assert (a SET 0 SET 1 = BIN long 3));
  
        (long long bits a = long long 16r0;
         assert (a SET (long_long_bits_width + 1) = a);
         assert (a SET -1 = a);
!        assert (a SET long_long_bits_width = a);
!        assert (a SET (long_long_bits_width-1) = long long 16r1 SHL (long_long_bits_width-1));
!        assert (a SET 0 SET 1 = BIN long long 3))
  end
diff -Nrcpad gcc-16-20260201/gcc/testsuite/algol68/execute/bits-shift-1.a68 gcc-16-20260208/gcc/testsuite/algol68/execute/bits-shift-1.a68
*** gcc-16-20260201/gcc/testsuite/algol68/execute/bits-shift-1.a68	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/algol68/execute/bits-shift-1.a68	Sun Feb  8 22:32:08 2026
***************
*** 0 ****
--- 1,9 ----
+ begin int first_bit = 2**31;
+       int myshift = 29;
+ 
+       bits b1 = BIN (first_bit) SHR 29;
+       bits b2 = BIN (first_bit) SHR myshift;
+ 
+       assert (b1 = 2r100);
+       assert (b2 = 2r100)
+ end
diff -Nrcpad gcc-16-20260201/gcc/testsuite/algol68/execute/bits-shift-2.a68 gcc-16-20260208/gcc/testsuite/algol68/execute/bits-shift-2.a68
*** gcc-16-20260201/gcc/testsuite/algol68/execute/bits-shift-2.a68	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/algol68/execute/bits-shift-2.a68	Sun Feb  8 22:32:08 2026
***************
*** 0 ****
--- 1,26 ----
+ { Shifting by L_bits_width results in all bits being zero. }
+ 
+ begin assert (short short 16rffff SHR short_short_bits_width = short short 16r0);
+       assert (short 16rffff SHR short_bits_width = short 16r0);
+       assert (16rffff SHR bits_width = 16r0);
+       assert (long 16rffff SHR long_bits_width = long 16r0);
+       assert (long long 16rffff SHR long_long_bits_width = long long 16r0);
+ 
+       assert (short short 16rffff SHR -short_short_bits_width = short short 16r0);
+       assert (short 16rffff SHR -short_bits_width = short 16r0);
+       assert (16rffff SHR -bits_width = 16r0);
+       assert (long 16rffff SHR -long_bits_width = long 16r0);
+       assert (long long 16rffff SHR -long_long_bits_width = long long 16r0);
+ 
+       assert (short short 16rffff SHL short_short_bits_width = short short 16r0);
+       assert (short 16rffff SHL short_bits_width = short 16r0);
+       assert (16rffff SHL bits_width = 16r0);
+       assert (long 16rffff SHL long_bits_width = long 16r0);
+       assert (long long 16rffff SHL long_long_bits_width = long long 16r0);
+ 
+       assert (short short 16rffff SHL -short_short_bits_width = short short 16r0);
+       assert (short 16rffff SHL -short_bits_width = short 16r0);
+       assert (16rffff SHL -bits_width = 16r0);
+       assert (long 16rffff SHL -long_bits_width = long 16r0);
+       assert (long long 16rffff SHL -long_long_bits_width = long long 16r0)
+ end
diff -Nrcpad gcc-16-20260201/gcc/testsuite/algol68/execute/bits-shift-3.a68 gcc-16-20260208/gcc/testsuite/algol68/execute/bits-shift-3.a68
*** gcc-16-20260201/gcc/testsuite/algol68/execute/bits-shift-3.a68	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/algol68/execute/bits-shift-3.a68	Sun Feb  8 22:32:08 2026
***************
*** 0 ****
--- 1,26 ----
+ { Shifting by > L_bits_width results in all bits being zero. }
+ 
+ begin assert (short short 16rffff SHR (short_short_bits_width + 1) = short short 16r0);
+       assert (short 16rffff SHR (short_bits_width + 1) = short 16r0);
+       assert (16rffff SHR (bits_width + 1) = 16r0);
+       assert (long 16rffff SHR (long_bits_width + 1) = long 16r0);
+       assert (long long 16rffff SHR (long_long_bits_width + 1) = long long 16r0);
+ 
+       assert (short short 16rffff SHR -(short_short_bits_width + 1) = short short 16r0);
+       assert (short 16rffff SHR -(short_bits_width + 1) = short 16r0);
+       assert (16rffff SHR -(bits_width + 1) = 16r0);
+       assert (long 16rffff SHR -(long_bits_width + 1) = long 16r0);
+       assert (long long 16rffff SHR -(long_long_bits_width + 1) = long long 16r0);
+ 
+       assert (short short 16rffff SHL (short_short_bits_width + 1) = short short 16r0);
+       assert (short 16rffff SHL (short_bits_width + 1) = short 16r0);
+       assert (16rffff SHL (bits_width + 1) = 16r0);
+       assert (long 16rffff SHL (long_bits_width + 1) = long 16r0);
+       assert (long long 16rffff SHL (long_long_bits_width + 1) = long long 16r0);
+ 
+       assert (short short 16rffff SHL -(short_short_bits_width + 1) = short short 16r0);
+       assert (short 16rffff SHL -(short_bits_width + 1) = short 16r0);
+       assert (16rffff SHL -(bits_width + 1) = 16r0);
+       assert (long 16rffff SHL -(long_bits_width + 1) = long 16r0);
+       assert (long long 16rffff SHL -(long_long_bits_width + 1) = long long 16r0)
+ end
diff -Nrcpad gcc-16-20260201/gcc/testsuite/algol68/execute/bits-test-1.a68 gcc-16-20260208/gcc/testsuite/algol68/execute/bits-test-1.a68
*** gcc-16-20260201/gcc/testsuite/algol68/execute/bits-test-1.a68	Sun Feb  1 22:32:09 2026
--- gcc-16-20260208/gcc/testsuite/algol68/execute/bits-test-1.a68	Sun Feb  8 22:32:08 2026
***************
*** 1,5 ****
! begin assert (NOT (16rff TEST 9));
!       assert (NOT (16rff TEST 0));
        assert (NOT (16rff TEST -1));
!       assert (2r100 TEST 3)
  end
--- 1,5 ----
! begin assert (NOT (16rff TEST 8));
        assert (NOT (16rff TEST -1));
!       assert (NOT (16rff TEST -2));
!       assert (2r100 TEST 2)
  end
diff -Nrcpad gcc-16-20260201/gcc/testsuite/c-c++-common/analyzer/conditionals-pr98447-1.c gcc-16-20260208/gcc/testsuite/c-c++-common/analyzer/conditionals-pr98447-1.c
*** gcc-16-20260201/gcc/testsuite/c-c++-common/analyzer/conditionals-pr98447-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/c-c++-common/analyzer/conditionals-pr98447-1.c	Sun Feb  8 22:32:08 2026
***************
*** 0 ****
--- 1,28 ----
+ void
+ pr98447_original (unsigned long *p, int r, int i)
+ {
+   int b = 63, n = r % 16;
+ 
+   while (i >= 0)
+     {
+       if (n > b)
+         {
+           p[i--] = b + 1 >= 64 ? 0UL : 1UL << (b + 1); /* { dg-bogus "-Wanalyzer-shift-count-overflow" } */
+           b += 64;
+         }
+       b -= n;
+     }
+ }
+ 
+ void
+ pr98477_comment_4 (unsigned long *p, int r, int i)
+ {
+   int b = 64, n = r % 64;
+ 
+   while (i >= 0 && b >= 0)
+     {
+       if (b <= n)
+         p[i--] = 1UL << b; /* { dg-bogus "-Wanalyzer-shift-count-overflow" } */
+       b -= n;
+     }
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/c-c++-common/analyzer/conditionals-pr98447-2.c gcc-16-20260208/gcc/testsuite/c-c++-common/analyzer/conditionals-pr98447-2.c
*** gcc-16-20260201/gcc/testsuite/c-c++-common/analyzer/conditionals-pr98447-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/c-c++-common/analyzer/conditionals-pr98447-2.c	Sun Feb  8 22:32:08 2026
***************
*** 0 ****
--- 1,40 ----
+ #include "analyzer-decls.h"
+ 
+ void test_1 (int i)
+ {
+   __analyzer_eval (64 <= (i % 64)); /* { dg-warning "FALSE" } */
+   __analyzer_eval (64 < (i % 64)); /* { dg-warning "FALSE" } */
+   __analyzer_eval (63 <= (i % 64)); /* { dg-warning "UNKNOWN" } */
+ 
+   /* (i % 64) > X for various X.  */
+   __analyzer_eval ((i % 64) > -65); /* { dg-warning "TRUE" } */
+   __analyzer_eval ((i % 64) > -64); /* { dg-warning "TRUE" } */
+   __analyzer_eval ((i % 64) > -63); /* { dg-warning "UNKNOWN" } */
+   __analyzer_eval ((i % 64) > 62); /* { dg-warning "UNKNOWN" } */
+   __analyzer_eval ((i % 64) > 63); /* { dg-warning "FALSE" } */
+   __analyzer_eval ((i % 64) > 64); /* { dg-warning "FALSE" } */
+ 
+   /* (i % 64) >= X for various X.  */
+   __analyzer_eval ((i % 64) >= -64); /* { dg-warning "TRUE" } */
+   __analyzer_eval ((i % 64) >= -63); /* { dg-warning "TRUE" } */
+   __analyzer_eval ((i % 64) >= -62); /* { dg-warning "UNKNOWN" } */
+   __analyzer_eval ((i % 64) >= 62); /* { dg-warning "UNKNOWN" } */
+   __analyzer_eval ((i % 64) >= 63); /* { dg-warning "UNKNOWN" } */
+   __analyzer_eval ((i % 64) >= 64); /* { dg-warning "FALSE" } */
+ 
+   /* (i % 64) < X for various X.  */
+   __analyzer_eval ((i % 64) < -64); /* { dg-warning "FALSE" } */
+   __analyzer_eval ((i % 64) < -63); /* { dg-warning "FALSE" } */
+   __analyzer_eval ((i % 64) < -62); /* { dg-warning "UNKNOWN" } */
+   __analyzer_eval ((i % 64) < 63); /* { dg-warning "UNKNOWN" } */
+   __analyzer_eval ((i % 64) < 64); /* { dg-warning "TRUE" } */
+   __analyzer_eval ((i % 64) < 65); /* { dg-warning "TRUE" } */
+ 
+   /* (i % 64) <= X for various X.  */
+   __analyzer_eval ((i % 64) <= -64); /* { dg-warning "FALSE" } */
+   __analyzer_eval ((i % 64) <= -63); /* { dg-warning "UNKNOWN" } */
+   __analyzer_eval ((i % 64) <= -62); /* { dg-warning "UNKNOWN" } */
+   __analyzer_eval ((i % 64) <= 62); /* { dg-warning "UNKNOWN" } */
+   __analyzer_eval ((i % 64) <= 63); /* { dg-warning "TRUE" } */
+   __analyzer_eval ((i % 64) <= 64); /* { dg-warning "TRUE" } */
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/c-c++-common/analyzer/ice-pr116865.c gcc-16-20260208/gcc/testsuite/c-c++-common/analyzer/ice-pr116865.c
*** gcc-16-20260201/gcc/testsuite/c-c++-common/analyzer/ice-pr116865.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/c-c++-common/analyzer/ice-pr116865.c	Sun Feb  8 22:32:08 2026
***************
*** 0 ****
--- 1,7 ----
+ /* { dg-additional-options "-O2" } */
+ 
+ int f(int l) {
+   char *t_string = (char *)__builtin_calloc(l + 2, 1);
+   char *end = t_string + l - 1;
+   return '0' != *(end - 1); /* { dg-warning "leak of 't_string'" } */
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/c-c++-common/analyzer/null-deref-pr108400-SoftEtherVPN-WebUi.c gcc-16-20260208/gcc/testsuite/c-c++-common/analyzer/null-deref-pr108400-SoftEtherVPN-WebUi.c
*** gcc-16-20260201/gcc/testsuite/c-c++-common/analyzer/null-deref-pr108400-SoftEtherVPN-WebUi.c	Sun Feb  1 22:32:09 2026
--- gcc-16-20260208/gcc/testsuite/c-c++-common/analyzer/null-deref-pr108400-SoftEtherVPN-WebUi.c	Sun Feb  8 22:32:08 2026
*************** void WuExpireSessionKey(WEBUI *wu)
*** 60,67 ****
  
  	for(i=0; i<LIST_NUM(wu->Contexts); i++)
  	{
! 		STRMAP_ENTRY *entry = (STRMAP_ENTRY*)LIST_DATA(wu->Contexts, i); /* { dg-message "'entry' is NULL" } */
! 		WU_CONTEXT *context = (WU_CONTEXT*)entry->Value; /* { dg-bogus "dereference of NULL 'entry'" "PR analyzer/108400" { xfail *-*-* } } */
  		if(context->ExpireDate < Tick64())
  		{
  			Add(Expired, entry);
--- 60,67 ----
  
  	for(i=0; i<LIST_NUM(wu->Contexts); i++)
  	{
! 		STRMAP_ENTRY *entry = (STRMAP_ENTRY*)LIST_DATA(wu->Contexts, i); /* { dg-bogus "'entry' is NULL" "" { xfail c++ } } */
! 		WU_CONTEXT *context = (WU_CONTEXT*)entry->Value; /* { dg-bogus "dereference of NULL 'entry'" "PR analyzer/108400" { xfail c++ } } */
  		if(context->ExpireDate < Tick64())
  		{
  			Add(Expired, entry);
diff -Nrcpad gcc-16-20260201/gcc/testsuite/c-c++-common/pr101312-1.c gcc-16-20260208/gcc/testsuite/c-c++-common/pr101312-1.c
*** gcc-16-20260201/gcc/testsuite/c-c++-common/pr101312-1.c	Sun Feb  1 22:32:09 2026
--- gcc-16-20260208/gcc/testsuite/c-c++-common/pr101312-1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,4 ****
- /* PR c/101312 */
- /* { dg-do compile } */
- 
- volatile int a[1] __attribute__((may_alias));
--- 0 ----
diff -Nrcpad gcc-16-20260201/gcc/testsuite/c-c++-common/pr101312-2.c gcc-16-20260208/gcc/testsuite/c-c++-common/pr101312-2.c
*** gcc-16-20260201/gcc/testsuite/c-c++-common/pr101312-2.c	Sun Feb  1 22:32:09 2026
--- gcc-16-20260208/gcc/testsuite/c-c++-common/pr101312-2.c	Thu Jan  1 00:00:00 1970
***************
*** 1,5 ****
- /* PR c/101312 */
- /* { dg-do compile } */
- /* { dg-options "-g" } */
- 
- volatile int a[1] __attribute__((may_alias));
--- 0 ----
diff -Nrcpad gcc-16-20260201/gcc/testsuite/c-c++-common/toplevel-extended-asm-1.c gcc-16-20260208/gcc/testsuite/c-c++-common/toplevel-extended-asm-1.c
*** gcc-16-20260201/gcc/testsuite/c-c++-common/toplevel-extended-asm-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/c-c++-common/toplevel-extended-asm-1.c	Sun Feb  8 22:32:08 2026
***************
*** 0 ****
--- 1,5 ----
+ /* { dg-do compile } */
+ /* { dg-options "-Wall" } */
+ 
+ static void asm_fn(); /* { dg-bogus "but never defined" } */
+ asm("%cc0:" :: ":"(&asm_fn));
diff -Nrcpad gcc-16-20260201/gcc/testsuite/g++.dg/analyzer/ice-pr116228.C gcc-16-20260208/gcc/testsuite/g++.dg/analyzer/ice-pr116228.C
*** gcc-16-20260201/gcc/testsuite/g++.dg/analyzer/ice-pr116228.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/g++.dg/analyzer/ice-pr116228.C	Sun Feb  8 22:32:08 2026
***************
*** 0 ****
--- 1,33 ----
+ // { dg-additional-options "-O3" }
+ 
+ void *operator new(__SIZE_TYPE__, void *);
+ int to_constant();
+ int vec_copy_construct_n, vec_stmts_size, vectorizable_load_vec_stmt,
+     vectorizable_load_offvar;
+ enum tree_code { POINTER_PLUS_EXPR };
+ void gimple_build_assign(int, tree_code, int, int);
+ int cse_and_gimplify_to_preheader(int, int);
+ void vectorizable_load() {
+   int i, stride_step, const_nunits = to_constant();
+   bool costing_p = vectorizable_load_vec_stmt;
+   if (!costing_p) {
+     stride_step = 0;
+     stride_step = cse_and_gimplify_to_preheader(0, stride_step);
+   }
+   for (; vec_stmts_size;) {
+     i = 0;
+     for (; i < const_nunits; i++) {
+       if (costing_p)
+         continue;
+       gimple_build_assign(0, POINTER_PLUS_EXPR, vectorizable_load_offvar,
+                           stride_step);
+     }
+     if (const_nunits)
+       if (!costing_p) {
+         {
+           for (; vec_copy_construct_n;)
+             new (0) int;
+         }
+       }
+   }
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/g++.dg/cpp0x/pr123818.C gcc-16-20260208/gcc/testsuite/g++.dg/cpp0x/pr123818.C
*** gcc-16-20260201/gcc/testsuite/g++.dg/cpp0x/pr123818.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/g++.dg/cpp0x/pr123818.C	Sun Feb  8 22:32:08 2026
***************
*** 0 ****
--- 1,24 ----
+ // PR c++/123818
+ // { dg-do run { target c++11 } }
+ 
+ struct A { A (int x) : a (x) {} int a; };
+ struct B { A b; };
+ 
+ int
+ foo (B x = B { 42 })
+ {
+     return x.b.a;
+ }
+ 
+ int
+ bar (B x = B { 43 })
+ {
+     return x.b.a;
+ }
+ 
+ int
+ main ()
+ {
+   if (foo () != bar () - 1)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/g++.dg/cpp23/feat-cxx2b.C gcc-16-20260208/gcc/testsuite/g++.dg/cpp23/feat-cxx2b.C
*** gcc-16-20260201/gcc/testsuite/g++.dg/cpp23/feat-cxx2b.C	Sun Feb  1 22:32:10 2026
--- gcc-16-20260208/gcc/testsuite/g++.dg/cpp23/feat-cxx2b.C	Sun Feb  8 22:32:09 2026
***************
*** 353,360 ****
  
  #ifndef __cpp_deduction_guides
  #  error "__cpp_deduction_guides"
! #elif __cpp_deduction_guides != 201907
! #  error "__cpp_deduction_guides != 201907"
  #endif
  
  #ifndef __cpp_if_constexpr
--- 353,360 ----
  
  #ifndef __cpp_deduction_guides
  #  error "__cpp_deduction_guides"
! #elif __cpp_deduction_guides != 202207
! #  error "__cpp_deduction_guides != 202207"
  #endif
  
  #ifndef __cpp_if_constexpr
diff -Nrcpad gcc-16-20260201/gcc/testsuite/g++.dg/cpp26/feat-cxx26.C gcc-16-20260208/gcc/testsuite/g++.dg/cpp26/feat-cxx26.C
*** gcc-16-20260201/gcc/testsuite/g++.dg/cpp26/feat-cxx26.C	Sun Feb  1 22:32:10 2026
--- gcc-16-20260208/gcc/testsuite/g++.dg/cpp26/feat-cxx26.C	Sun Feb  8 22:32:09 2026
***************
*** 353,360 ****
  
  #ifndef __cpp_deduction_guides
  #  error "__cpp_deduction_guides"
! #elif __cpp_deduction_guides != 201907
! #  error "__cpp_deduction_guides != 201907"
  #endif
  
  #ifndef __cpp_if_constexpr
--- 353,360 ----
  
  #ifndef __cpp_deduction_guides
  #  error "__cpp_deduction_guides"
! #elif __cpp_deduction_guides != 202207
! #  error "__cpp_deduction_guides != 202207"
  #endif
  
  #ifndef __cpp_if_constexpr
diff -Nrcpad gcc-16-20260201/gcc/testsuite/g++.dg/cpp26/pack-indexing19.C gcc-16-20260208/gcc/testsuite/g++.dg/cpp26/pack-indexing19.C
*** gcc-16-20260201/gcc/testsuite/g++.dg/cpp26/pack-indexing19.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/g++.dg/cpp26/pack-indexing19.C	Sun Feb  8 22:32:09 2026
***************
*** 0 ****
--- 1,32 ----
+ // PR c++/122169
+ // { dg-do compile { target c++26 } }
+ 
+ template<class T, class U>
+ concept same_as = __is_same(T, U);
+ 
+ template<class... Ts>
+ void f() {
+   using T = Ts...[0];
+   static_assert(same_as<const T, const int>);
+ 
+   []<int I>() {
+     using U = Ts...[I];
+     static_assert(same_as<const U, const int>);
+   }.template operator()<0>();
+ }
+ 
+ template void f<int>();
+ 
+ 
+ template<class... Ts>
+ void g() {
+   using T = Ts...[0];
+   static_assert(same_as<const T, const volatile int>);
+ 
+   []<int I>() {
+     using U = Ts...[I];
+     static_assert(same_as<const U, const volatile int>);
+   }.template operator()<0>();
+ }
+ 
+ template void g<volatile int>();
diff -Nrcpad gcc-16-20260201/gcc/testsuite/g++.dg/cpp26/stdarg10.C gcc-16-20260208/gcc/testsuite/g++.dg/cpp26/stdarg10.C
*** gcc-16-20260201/gcc/testsuite/g++.dg/cpp26/stdarg10.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/g++.dg/cpp26/stdarg10.C	Sun Feb  8 22:32:09 2026
***************
*** 0 ****
--- 1,19 ----
+ // PR c++/123977
+ // { dg-do compile }
+ 
+ typedef void R;
+ struct A {
+   R foo (...) const volatile;
+   void foo ();
+ };
+ 
+ template <class T>
+ struct B {
+   static void bar () { (T (A::*)) &A::foo; }
+ };
+ 
+ void
+ baz ()
+ {
+   B <R (...) const volatile>::bar;
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/g++.dg/ipa/pr106260.C gcc-16-20260208/gcc/testsuite/g++.dg/ipa/pr106260.C
*** gcc-16-20260201/gcc/testsuite/g++.dg/ipa/pr106260.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/g++.dg/ipa/pr106260.C	Sun Feb  8 22:32:09 2026
***************
*** 0 ****
--- 1,64 ----
+ // { dg-do compile }
+ // { dg-options "-O2 -std=gnu++14 -fwhole-program -fno-unit-at-a-time" }
+ 
+ struct A;
+ template <class T>
+ struct Q { Q (T); };
+ template<typename T, class D>
+ struct U {
+   ~U () { m1 (nullptr); }
+   D m2 ();
+   T *u;
+   void m1 (T *) { m2 () (u); }
+ };
+ struct F { F (int *); };
+ template <class, class T = F>
+ using W = Q<T>;
+ int a, b;
+ void fn1 (void *);
+ template <class T>
+ void
+ fn2 (T *x)
+ {
+   if (x)
+     x->~T();
+   fn1 (x);
+ }
+ template <typename T>
+ struct C {
+   void operator() (T *x) { fn2 (x); }
+ };
+ struct D;
+ template <typename T, typename D = C<T> >
+ using V = U<T, D>;
+ struct A {
+   A (int *);
+ };
+ struct S;
+ struct G {
+   V<S> m3 ();
+ };
+ struct S {
+   int e;
+   virtual ~S () {}
+ };
+ template<typename T>
+ struct H {
+   H (int, T x, int) : h(x) {}
+   G g;
+   void m4 () { g.m3 (); }
+   T h;
+ };
+ struct I {
+   I(A, W<D>);
+ };
+ void
+ test ()
+ {
+   A c (&b);
+   W<D> d (&b);
+   I e (c, d);
+   H<I> f (0, e, a);
+   f.m4 ();
+ }
+ 
diff -Nrcpad gcc-16-20260201/gcc/testsuite/g++.dg/modules/dep-5.C gcc-16-20260208/gcc/testsuite/g++.dg/modules/dep-5.C
*** gcc-16-20260201/gcc/testsuite/g++.dg/modules/dep-5.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/g++.dg/modules/dep-5.C	Sun Feb  8 22:32:09 2026
***************
*** 0 ****
--- 1,5 ----
+ // { dg-additional-options "-fmodules -M" }
+ 
+ export module A.B:X.Y;
+ export module A.B:X.Y;  // { dg-error "module already declared" }
+ export module F;	// { dg-error "module already declared" }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/g++.dg/pr114969.C gcc-16-20260208/gcc/testsuite/g++.dg/pr114969.C
*** gcc-16-20260201/gcc/testsuite/g++.dg/pr114969.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/g++.dg/pr114969.C	Sun Feb  8 22:32:09 2026
***************
*** 0 ****
--- 1,16 ----
+ // { dg-do compile { target c++17 } }
+ // { dg-options "-O3 -fdump-tree-optimized" }
+ 
+ #include <algorithm>
+ 
+ bool result;
+ 
+ void func (unsigned long long var_0) {
+     result = (std::max ((unsigned long long) 0, (unsigned long long) var_0)) | ( var_0 ?  1 : 0);
+ }
+ 
+ void func2 (unsigned long long var_0) {
+     result = !((std::max ((unsigned long long) 0, (unsigned long long) var_0)) | ( var_0 ?  1 : 0));
+ }
+ 
+ /* { dg-final { scan-tree-dump-times " \\\| " 0 "optimized" } } */
\ No newline at end of file
diff -Nrcpad gcc-16-20260201/gcc/testsuite/g++.dg/reflect/crash6.C gcc-16-20260208/gcc/testsuite/g++.dg/reflect/crash6.C
*** gcc-16-20260201/gcc/testsuite/g++.dg/reflect/crash6.C	Sun Feb  1 22:32:10 2026
--- gcc-16-20260208/gcc/testsuite/g++.dg/reflect/crash6.C	Sun Feb  8 22:32:09 2026
*************** void
*** 11,17 ****
  f ()
  {
    [:R:] r; // { dg-error "expected" }
!   [:R:]<int> r; // { dg-error "reflection .\\\[: R :\\\]<int>. not usable in a splice expression" }
  }
  
  void
--- 11,17 ----
  f ()
  {
    [:R:] r; // { dg-error "expected" }
!   [:R:]<int> r; // { dg-error "expected" }
  }
  
  void
diff -Nrcpad gcc-16-20260201/gcc/testsuite/g++.dg/reflect/error12.C gcc-16-20260208/gcc/testsuite/g++.dg/reflect/error12.C
*** gcc-16-20260201/gcc/testsuite/g++.dg/reflect/error12.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/g++.dg/reflect/error12.C	Sun Feb  8 22:32:09 2026
***************
*** 0 ****
--- 1,22 ----
+ // PR c++/123823
+ // { dg-do compile { target c++26 } }
+ // { dg-additional-options "-freflection" }
+ 
+ constexpr int i = 42;
+ constexpr auto r = ^^i;
+ constexpr bool b0 = template [:r:] < 0 > 0;  // { dg-error "not a template" }
+ constexpr bool b1 = template [:r:] < 0 < 0;  // { dg-error "not a template|expected" }
+ constexpr bool b2 = template [:r:] < 43;     // { dg-error "not a template|expected" }
+ constexpr bool b3 = template [:r:] <= 43;    // { dg-error "template splice" }
+ constexpr bool b4 = template [:r:] > 41;     // { dg-error "template splice" }
+ constexpr bool b5 = template [:r:] >= 41;    // { dg-error "template splice" }
+ constexpr bool b6 = template [:r:] == 42;    // { dg-error "template splice" }
+ constexpr bool b7 = template [:r:] != 41;    // { dg-error "template splice" }
+ 
+ template<bool> struct S { };
+ S<template [:r:] < 43> s1;    // { dg-error "not a template|invalid" }
+ S<template [:r:] <= 43> s2;   // { dg-error "template splice|invalid" }
+ S<(template [:r:] > 41)> s3;  // { dg-error "template splice|invalid" }
+ S<template [:r:] >= 41> s4;   // { dg-error "template splice|invalid" }
+ S<template [:r:] == 42> s5;   // { dg-error "template splice|invalid" }
+ S<template[:r:] != 41> s6;    // { dg-error "template splice|invalid" }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/g++.dg/reflect/expansion-stmt1.C gcc-16-20260208/gcc/testsuite/g++.dg/reflect/expansion-stmt1.C
*** gcc-16-20260201/gcc/testsuite/g++.dg/reflect/expansion-stmt1.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/g++.dg/reflect/expansion-stmt1.C	Sun Feb  8 22:32:09 2026
***************
*** 0 ****
--- 1,49 ----
+ // PR c++/123611
+ // { dg-do compile { target c++26 } }
+ // { dg-additional-options "-freflection" }
+ 
+ template <typename T>
+ struct S {
+   T s[2];
+   constexpr const T *begin () const { return &s[0]; }
+   constexpr const T *end () const { return &s[2]; }
+ };
+ 
+ unsigned
+ foo ()
+ {
+   unsigned ret = 0;
+   static constexpr S <decltype (^^int)> s = { ^^int, ^^bool };
+   {
+     static constexpr decltype (auto) r = (s);
+     static constexpr auto b = r.begin ();
+     static constexpr auto e = r.end ();
+     using ptrdiff_t = decltype (&s - &s);
+     constexpr auto N = [] consteval {
+       ptrdiff_t res = 0;
+       for (auto i = b; i != e; ++i) ++res;
+       return res;
+     };
+     {
+       static constexpr auto i = b + decltype (b - b) { ptrdiff_t (0) };
+       constexpr auto x = *i;
+       ret += sizeof (typename [: x :]);
+     }
+     {
+       static constexpr auto i = b + decltype (b - b) { ptrdiff_t (1) };
+       constexpr auto x = *i;
+       ret += sizeof (typename [: x :]);
+     }
+   }
+   return ret;
+ }
+ 
+ unsigned
+ bar ()
+ {
+   unsigned ret = 0;
+   static constexpr S <decltype (^^int)> s = { ^^int, ^^bool };
+   template for (constexpr auto x : s)
+     ret += sizeof (typename [: x :]);
+   return ret;
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/g++.dg/reflect/expr3.C gcc-16-20260208/gcc/testsuite/g++.dg/reflect/expr3.C
*** gcc-16-20260201/gcc/testsuite/g++.dg/reflect/expr3.C	Sun Feb  1 22:32:10 2026
--- gcc-16-20260208/gcc/testsuite/g++.dg/reflect/expr3.C	Sun Feb  8 22:32:09 2026
*************** g ()
*** 31,45 ****
    int i6 = template [: ^^foo :](42);
    int i7 = [: ^^foo<int> :](42);
    int i8 = template [: ^^foo<int> :](42);   // { dg-error "reflection .foo<int>. not usable in a template splice" }
!   int i9 = [: ^^foo :]<int>(42);	    // { dg-error "reflection .foo<int>. not usable in a splice expression with template arguments" }
    int i10 = template [: ^^foo :]<int>(42);
    int i11 = template [: ^^bar :]<int>(42);  // { dg-error "no matching function for call" }
    int i12 = [: ^^two :]<int>;		    // { dg-error "reflection .two<int>. not usable in a splice expression with template arguments" }
    int i13 = template [: ^^two :]<int>;
  
    [: ^^ST :]<int> c1;  // { dg-error "reflection .ST<int>. not usable in a splice expression with template arguments" }
!   [: ^^S :]<int> c2;   // { dg-error "not a template|reflection not usable in a splice expression with template arguments" }
!   [: ^^bar :]<int>();	// { dg-error "reflection .bar<int>. not usable in a splice expression with template arguments" }
  
    auto x1 = [: ^^ST :]<int>{};	  // { dg-error "reflection .ST<int>. not usable in a splice expression with template arguments" }
    auto x2 = template [: ^^ST :]<int>{};	// { dg-error "expected a reflection of an expression" }
--- 31,49 ----
    int i6 = template [: ^^foo :](42);
    int i7 = [: ^^foo<int> :](42);
    int i8 = template [: ^^foo<int> :](42);   // { dg-error "reflection .foo<int>. not usable in a template splice" }
!   int i9 = [: ^^foo :]<int>(42);	    // { dg-error "reflection .foo. not usable in a splice expression|expected" }
    int i10 = template [: ^^foo :]<int>(42);
    int i11 = template [: ^^bar :]<int>(42);  // { dg-error "no matching function for call" }
    int i12 = [: ^^two :]<int>;		    // { dg-error "reflection .two<int>. not usable in a splice expression with template arguments" }
    int i13 = template [: ^^two :]<int>;
  
    [: ^^ST :]<int> c1;  // { dg-error "reflection .ST<int>. not usable in a splice expression with template arguments" }
!   typename [: ^^ST :]<int> c2;
!   template [: ^^ST :]<int> c3;  // { dg-error "expected a reflection of an expression" }
!   [: ^^S :]<int> c4;   // { dg-error "expected a reflection of an expression|expected primary-expression" }
!   template [: ^^S :]<int> c5;   // { dg-error ".S. is not a template" }
!   typename [: ^^S :]<int> c6;   // { dg-error ".S. is not a template|expected" }
!   [: ^^bar :]<int>();	// { dg-error "expected" }
  
    auto x1 = [: ^^ST :]<int>{};	  // { dg-error "reflection .ST<int>. not usable in a splice expression with template arguments" }
    auto x2 = template [: ^^ST :]<int>{};	// { dg-error "expected a reflection of an expression" }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/g++.dg/reflect/feat2.C gcc-16-20260208/gcc/testsuite/g++.dg/reflect/feat2.C
*** gcc-16-20260201/gcc/testsuite/g++.dg/reflect/feat2.C	Sun Feb  1 22:32:10 2026
--- gcc-16-20260208/gcc/testsuite/g++.dg/reflect/feat2.C	Sun Feb  8 22:32:09 2026
***************
*** 9,11 ****
--- 9,17 ----
  #elif __cpp_lib_reflection != 202506
  #  error "__cpp_lib_reflection != 202506"
  #endif
+ 
+ #ifndef __cpp_lib_define_static
+ #  error "__cpp_lib_define_static"
+ #elif __cpp_lib_define_static != 202506
+ #  error "__cpp_lib_define_static != 202506"
+ #endif
diff -Nrcpad gcc-16-20260201/gcc/testsuite/g++.dg/reflect/feat3.C gcc-16-20260208/gcc/testsuite/g++.dg/reflect/feat3.C
*** gcc-16-20260201/gcc/testsuite/g++.dg/reflect/feat3.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/g++.dg/reflect/feat3.C	Sun Feb  8 22:32:09 2026
***************
*** 0 ****
--- 1,17 ----
+ // { dg-do compile { target c++26 } }
+ // { dg-additional-options "-freflection" }
+ // Test feature test macros.
+ 
+ #include <meta>
+ 
+ #ifndef __cpp_lib_reflection
+ #  error "__cpp_lib_reflection"
+ #elif __cpp_lib_reflection != 202506
+ #  error "__cpp_lib_reflection != 202506"
+ #endif
+ 
+ #ifndef __cpp_lib_define_static
+ #  error "__cpp_lib_define_static"
+ #elif __cpp_lib_define_static != 202506
+ #  error "__cpp_lib_define_static != 202506"
+ #endif
diff -Nrcpad gcc-16-20260201/gcc/testsuite/g++.dg/reflect/object_of3.C gcc-16-20260208/gcc/testsuite/g++.dg/reflect/object_of3.C
*** gcc-16-20260201/gcc/testsuite/g++.dg/reflect/object_of3.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/g++.dg/reflect/object_of3.C	Sun Feb  8 22:32:09 2026
***************
*** 0 ****
--- 1,34 ----
+ // PR c++/123695
+ // { dg-do compile { target c++26 } }
+ // { dg-additional-options "-freflection" }
+ // Test std::meta::object_of with invalid arguments.
+ 
+ #include <meta>
+ using namespace std::meta;
+ 
+ struct A {};
+ struct B : A {};
+ 
+ using U = int;
+ 
+ enum E { EE };
+ auto fn ();
+ [[=1]] void foo ();
+ 
+ consteval bool
+ object_of_ok (info r)
+ {
+   try { object_of (r); }
+   catch (std::meta::exception &) { return false; }
+   return true;
+ }
+ 
+ static_assert (!object_of_ok (^^EE));
+ static_assert (!object_of_ok (^^::));
+ static_assert (!object_of_ok (^^int));
+ static_assert (!object_of_ok (^^U));
+ static_assert (!object_of_ok (^^fn));
+ static_assert (!object_of_ok (annotations_of (^^foo)[0]));
+ static_assert (!object_of_ok (reflect_constant (42)));
+ static_assert (!object_of_ok (bases_of (^^B, access_context::unchecked ())[0]));
+ static_assert (!object_of_ok (data_member_spec (^^int, { .name = "dms" })));
diff -Nrcpad gcc-16-20260201/gcc/testsuite/g++.dg/reflect/p3394-1.C gcc-16-20260208/gcc/testsuite/g++.dg/reflect/p3394-1.C
*** gcc-16-20260201/gcc/testsuite/g++.dg/reflect/p3394-1.C	Sun Feb  1 22:32:10 2026
--- gcc-16-20260208/gcc/testsuite/g++.dg/reflect/p3394-1.C	Sun Feb  8 22:32:09 2026
***************
*** 1,9 ****
! // { dg-do compile { target c++26 } }
  // { dg-additional-options "-freflection" }
  // Slightly tweaked test from P3394R4 3.2
  // https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3394r4.html#test-parametrization
- // TODO: Doesn't link currently, once it does, it should be dg-do run test
- // with output checking or something like that.
  
  #include <meta>
  #include <array>
--- 1,7 ----
! // { dg-do run { target c++26 } }
  // { dg-additional-options "-freflection" }
  // Slightly tweaked test from P3394R4 3.2
  // https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3394r4.html#test-parametrization
  
  #include <meta>
  #include <array>
*************** main ()
*** 172,174 ****
--- 170,184 ----
  {
    invoke_all <^^N> ();
  }
+ 
+ // { dg-output "Called test_sum \\\(x=1, y=1, z=2\\\)(\n|\r\n|\r)" }
+ // { dg-output "\[^\n\r]*Called test_sum \\\(x=1, y=2, z=3\\\)(\n|\r\n|\r)" }
+ // { dg-output "\[^\n\r]*setup fixture(\n|\r\n|\r)" }
+ // { dg-output "\[^\n\r]*test one\\\(1\\\)(\n|\r\n|\r)" }
+ // { dg-output "\[^\n\r]*teardown fixture(\n|\r\n|\r)" }
+ // { dg-output "\[^\n\r]*setup fixture(\n|\r\n|\r)" }
+ // { dg-output "\[^\n\r]*test one\\\(2\\\)(\n|\r\n|\r)" }
+ // { dg-output "\[^\n\r]*teardown fixture(\n|\r\n|\r)" }
+ // { dg-output "\[^\n\r]*setup fixture(\n|\r\n|\r)" }
+ // { dg-output "\[^\n\r]*test two(\n|\r\n|\r)" }
+ // { dg-output "\[^\n\r]*teardown fixture" }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/g++.dg/reflect/parameters_of7.C gcc-16-20260208/gcc/testsuite/g++.dg/reflect/parameters_of7.C
*** gcc-16-20260201/gcc/testsuite/g++.dg/reflect/parameters_of7.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/g++.dg/reflect/parameters_of7.C	Sun Feb  8 22:32:09 2026
***************
*** 0 ****
--- 1,17 ----
+ // PR c++/123913
+ // PR c++/123964
+ // { dg-do compile { target c++26 } }
+ // { dg-additional-options "-freflection" }
+ 
+ #include <meta>
+ 
+ using I = long;
+ void foo (int, I) {}
+ using bar = void (int, I);
+ 
+ constexpr auto a = std::meta::reflect_constant_array (parameters_of (^^foo));
+ constexpr auto b = std::meta::reflect_constant_array (parameters_of (^^bar));
+ static_assert (is_function_parameter (parameters_of (^^foo)[0]));
+ static_assert (is_function_parameter (parameters_of (^^foo)[1]));
+ static_assert (parameters_of (^^bar)[0] == ^^int);
+ static_assert (parameters_of (^^bar)[1] == ^^long);
diff -Nrcpad gcc-16-20260201/gcc/testsuite/g++.dg/reflect/parm5.C gcc-16-20260208/gcc/testsuite/g++.dg/reflect/parm5.C
*** gcc-16-20260201/gcc/testsuite/g++.dg/reflect/parm5.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/g++.dg/reflect/parm5.C	Sun Feb  8 22:32:09 2026
***************
*** 0 ****
--- 1,17 ----
+ // PR c++/123614
+ // { dg-do compile { target c++26 } }
+ // { dg-additional-options "-freflection" }
+ 
+ #include <meta>
+ 
+ template<class, class> struct same_type;
+ template<class T> struct same_type<T, T> {};
+ 
+ consteval auto Name(const std::meta::info meta){
+     same_type<decltype(meta), const std::meta::info>();
+     return std::meta::display_string_of(meta);
+ }
+ 
+ int main() {
+   auto sv = std::define_static_string(Name(^^int));
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/g++.dg/reflect/parse1.C gcc-16-20260208/gcc/testsuite/g++.dg/reflect/parse1.C
*** gcc-16-20260201/gcc/testsuite/g++.dg/reflect/parse1.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/g++.dg/reflect/parse1.C	Sun Feb  8 22:32:09 2026
***************
*** 0 ****
--- 1,43 ----
+ // PR c++/123823
+ // { dg-do compile { target c++26 } }
+ // { dg-additional-options "-freflection" }
+ 
+ constexpr int i = 42;
+ constexpr auto r = ^^i;
+ static_assert ([:r:] < 43);
+ static_assert ([:r:] <= 43);
+ static_assert ([:r:] > 41);
+ static_assert ([:r:] >= 41);
+ static_assert ([:r:] == 42);
+ static_assert ([:r:] != 41);
+ 
+ static_assert (43 > [:r:]);
+ static_assert (43 >= [:r:]);
+ static_assert (41 < [:r:]);
+ static_assert (41 <= [:r:]);
+ static_assert (42 == [:r:]);
+ static_assert (41 != [:r:]);
+ 
+ static_assert ([:r:] < 86 >> 1);
+ static_assert ([:r:] < 43 > 0);
+ static_assert (!([:r:] < 42 > 0));
+ 
+ template<bool>
+ struct S;
+ template<>
+ struct S<true> { };
+ 
+ S<[:r:] < 43> s1;
+ S<[:r:] <= 43> s2;
+ // [temp.names]/4 -> need the ().
+ S<([:r:] > 41)> s3;
+ S<[:r:] >= 41> s4;
+ S<[:r:] == 42> s5;
+ S<[:r:] != 41> s6;
+ 
+ S<(43 > [:r:])> s7;
+ S<43 >= [:r:]> s8;
+ S<41 < [:r:]> s9;
+ S<41 <= [:r:]> s10;
+ S<42 == [:r:]> s11;
+ S<41 != [:r:]> s12;
diff -Nrcpad gcc-16-20260201/gcc/testsuite/g++.dg/reflect/parse2.C gcc-16-20260208/gcc/testsuite/g++.dg/reflect/parse2.C
*** gcc-16-20260201/gcc/testsuite/g++.dg/reflect/parse2.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/g++.dg/reflect/parse2.C	Sun Feb  8 22:32:09 2026
***************
*** 0 ****
--- 1,39 ----
+ // PR c++/123640
+ // { dg-do compile { target c++26 } }
+ // { dg-additional-options "-freflection" }
+ 
+ #include <meta>
+ 
+ template<class T>
+ constexpr std::size_t field_count {
+   std::meta::nonstatic_data_members_of(^^T, std::meta::access_context::unchecked()).size()
+ };
+ 
+ template<std::size_t index, class T>
+ constexpr std::meta::info field_at {
+   std::meta::nonstatic_data_members_of(^^T, std::meta::access_context::unchecked())[index]
+ };
+ 
+ struct S {
+   int a, b, c;
+   constexpr bool operator<(this auto&&l, auto&&r) noexcept
+   {
+     using T = std::remove_cvref_t<decltype (l)>;
+     static constexpr auto N{field_count<T>};
+     if constexpr (N == 0)
+       return false;
+     else
+       {
+ 	template for (constexpr auto i : std::make_index_sequence<N - 1>{}) // { dg-bogus "constant" "" { xfail *-*-* } }
+ 	  if (l.[:field_at<i,T>:] != r.[:field_at<i,T>:]) [[likely]]
+ 	    return l.[:field_at<i,T>:] < r.[:field_at<i,T>:];
+ 	return l.[:field_at<N - 1, T>:] < r.[:field_at<N - 1, T>:];
+       }
+   }
+ };
+ 
+ int
+ main ()
+ {
+   return S{1,2,3} < S{1,3,2};
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/g++.dg/reflect/parse3.C gcc-16-20260208/gcc/testsuite/g++.dg/reflect/parse3.C
*** gcc-16-20260201/gcc/testsuite/g++.dg/reflect/parse3.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/g++.dg/reflect/parse3.C	Sun Feb  8 22:32:09 2026
***************
*** 0 ****
--- 1,59 ----
+ // PR c++/123823
+ // { dg-do compile { target c++26 } }
+ // { dg-additional-options "-freflection" }
+ 
+ constexpr int i = 0;
+ constexpr auto r = ^^i;
+ 
+ template<auto U, auto>
+ constexpr int S2 = [:U:];
+ 
+ constexpr auto a1 = S2<[:^^r:],  // { dg-error "unparenthesized splice" }
+                        [:^^r:]>; // { dg-error "unparenthesized splice|invalid" }
+ constexpr auto a2 = S2<([:^^r:]),
+                        [:^^r:]>; // { dg-error "unparenthesized splice|invalid" }
+ constexpr auto a3 = S2<[:^^r:],  // { dg-error "unparenthesized splice" }
+                        ([:^^r:])>; // { dg-error "invalid" }
+ constexpr auto a4 = S2<([:^^r:]),
+                        ([:^^r:])>;
+ 
+ template<int>
+ struct S { };
+ 
+ template<typename>
+ struct R { };
+ 
+ template<typename T>
+ constexpr int fn (T) { return 42; }
+ 
+ constexpr int foo (int) { return 42; };
+ 
+ S<[: ^^foo :](0)> s0;
+ S<template [: ^^fn :](1)> s1;
+ S<template [: ^^fn :](1) < 43> s2;
+ S<(template [: ^^fn :](1) > 43)> s3;
+ 
+ template<int N>
+ constexpr auto var = N;
+ S<[: ^^var<1> :]> s4; // { dg-error "unparenthesized splice|invalid" }
+ S<([: ^^var<1> :])> s5;
+ 
+ template<typename T>
+ struct C {
+   static constexpr T t{};
+ };
+ 
+ template<typename T>
+ void
+ f ()
+ {
+   S<template [: ^^C :]<T>::t>();
+   R<typename [: ^^C :]<int> >();
+   R<typename [: ^^C :]<int>>();
+ }
+ 
+ void
+ g ()
+ {
+   f<int> ();
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/g++.dg/reflect/parse4.C gcc-16-20260208/gcc/testsuite/g++.dg/reflect/parse4.C
*** gcc-16-20260201/gcc/testsuite/g++.dg/reflect/parse4.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/g++.dg/reflect/parse4.C	Sun Feb  8 22:32:09 2026
***************
*** 0 ****
--- 1,23 ----
+ // { dg-do compile { target c++26 } }
+ // { dg-additional-options "-freflection" }
+ // From [temp.names].
+ 
+ using size_t = decltype(sizeof(int));
+ using info = decltype(^^void);
+ 
+ struct X {
+   template<size_t> X* alloc();
+   template<size_t> static X* adjust();
+ };
+ template<class T> void f(T* p) {
+   T* p1 = p->alloc<200>();              // { dg-error "expected" }
+   // { dg-warning "expected .template. keyword before dependent template name" "" { target *-*-* } .-1 }
+   T* p2 = p->template alloc<200>();     // OK, < starts template argument list
+   T::adjust<100>();                     // { dg-error "expected" }
+   // { dg-warning "expected .template. keyword before dependent template name" "" { target *-*-* } .-1 }
+   T::template adjust<100>();            // OK, < starts template argument list
+ 
+   static constexpr info r = ^^T::adjust;
+   T* p3 = [:r:]<200>();                 // { dg-error "expected" }
+   T* p4 = template [:r:]<200>();        // OK, < starts template argument list
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/g++.dg/reflect/parse5.C gcc-16-20260208/gcc/testsuite/g++.dg/reflect/parse5.C
*** gcc-16-20260201/gcc/testsuite/g++.dg/reflect/parse5.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/g++.dg/reflect/parse5.C	Sun Feb  8 22:32:09 2026
***************
*** 0 ****
--- 1,12 ----
+ // { dg-do compile { target c++26 } }
+ // { dg-additional-options "-freflection" }
+ // From [temp.names].
+ 
+ using info = decltype(^^void);
+ 
+ template<int> struct S { };
+ constexpr int k = 5;
+ constexpr info r = ^^k;
+ S<[:r:]> s1;                        // { dg-error "unparenthesized splice|invalid" }
+ S<([:r:])> s2;                      // OK
+ S<[:r:] + 1> s3;                    // OK
diff -Nrcpad gcc-16-20260201/gcc/testsuite/g++.dg/reflect/parse6.C gcc-16-20260208/gcc/testsuite/g++.dg/reflect/parse6.C
*** gcc-16-20260201/gcc/testsuite/g++.dg/reflect/parse6.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/g++.dg/reflect/parse6.C	Sun Feb  8 22:32:09 2026
***************
*** 0 ****
--- 1,16 ----
+ // { dg-do compile { target c++26 } }
+ // { dg-additional-options "-freflection" }
+ 
+ using info = decltype(^^::);
+ 
+ template <info R>
+ bool f()
+ {
+    return [: R :]<42>0;
+ }
+ 
+ int i;
+ int main()
+ {
+    f<^^i>();
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/g++.dg/reflect/splice4.C gcc-16-20260208/gcc/testsuite/g++.dg/reflect/splice4.C
*** gcc-16-20260201/gcc/testsuite/g++.dg/reflect/splice4.C	Sun Feb  1 22:32:10 2026
--- gcc-16-20260208/gcc/testsuite/g++.dg/reflect/splice4.C	Sun Feb  8 22:32:09 2026
*************** namespace M
*** 12,17 ****
  static_assert (template [: ^^M::foo :] <42> () == 42);
  static_assert (template [: members_of (^^M, std::meta::access_context::unchecked ())[0] :] <43> () == 43);
  int a = [: ^^M::foo :] <44> ();
! // { dg-error "reflection 'M::foo<44>' not usable in a splice expression with template arguments" "" { target *-*-* } .-1 }
  int b = [: members_of (^^M, std::meta::access_context::unchecked ())[0] :] <45> ();
! // { dg-error "reflection 'M::foo<45>' not usable in a splice expression with template arguments" "" { target *-*-* } .-1 }
--- 12,17 ----
  static_assert (template [: ^^M::foo :] <42> () == 42);
  static_assert (template [: members_of (^^M, std::meta::access_context::unchecked ())[0] :] <43> () == 43);
  int a = [: ^^M::foo :] <44> ();
! // { dg-error "reflection 'M::foo' not usable in a splice expression|expected" "" { target *-*-* } .-1 }
  int b = [: members_of (^^M, std::meta::access_context::unchecked ())[0] :] <45> ();
! // { dg-error "reflection 'M::foo' not usable in a splice expression|expected" "" { target *-*-* } .-1 }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/g++.dg/reflect/splice8.C gcc-16-20260208/gcc/testsuite/g++.dg/reflect/splice8.C
*** gcc-16-20260201/gcc/testsuite/g++.dg/reflect/splice8.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/g++.dg/reflect/splice8.C	Sun Feb  8 22:32:09 2026
***************
*** 0 ****
--- 1,33 ----
+ // PR c++/123752
+ // { dg-do compile { target c++26 } }
+ // { dg-additional-options "-freflection" }
+ 
+ struct S { int s; };
+ struct U { int u; };
+ 
+ template <typename T>
+ consteval decltype (^^int)
+ foo ()
+ {
+   return ^^S::s;
+ }
+ 
+ template <>
+ consteval decltype (^^int)
+ foo <U> ()
+ {
+   throw 1;
+ }
+ 
+ template <typename T>
+ auto
+ bar (T x)
+ {
+   return x.[: foo <T> () :];	// { dg-error "uncaught exception '1'" }
+ }
+ 
+ auto
+ baz (U x)
+ {
+   return bar (x);
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/g++.dg/reflect/splice9.C gcc-16-20260208/gcc/testsuite/g++.dg/reflect/splice9.C
*** gcc-16-20260201/gcc/testsuite/g++.dg/reflect/splice9.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/g++.dg/reflect/splice9.C	Sun Feb  8 22:32:09 2026
***************
*** 0 ****
--- 1,21 ----
+ // PR c++/123659
+ // { dg-do compile { target c++26 } }
+ // { dg-additional-options "-freflection" }
+ 
+ #include <meta>
+ 
+ struct S {};
+ 
+ template <int...I>
+ void
+ foo ()
+ {
+   static constexpr std::meta::info t[] { ^^int, ^^long, ^^S, ^^double };
+   [] (typename [: t[I] :]... a) {} (1, S {}, 2.5, 3L, 4L);
+ }
+ 
+ void
+ bar ()
+ {
+   foo <0, 2, 3, 1, 1> ();
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/g++.dg/reflect/type_of2.C gcc-16-20260208/gcc/testsuite/g++.dg/reflect/type_of2.C
*** gcc-16-20260201/gcc/testsuite/g++.dg/reflect/type_of2.C	Sun Feb  1 22:32:10 2026
--- gcc-16-20260208/gcc/testsuite/g++.dg/reflect/type_of2.C	Sun Feb  8 22:32:09 2026
*************** g ()
*** 25,31 ****
  {
    constexpr auto fInfo = foo<F>()[0];
    using fType = [:type_of(fInfo):];
!   // TODO Should work: non-const non-volatile member functions have ordinary
!   // function types.
!   //static_assert (std::same_as<fType, auto(int)->void>);
  }
--- 25,29 ----
  {
    constexpr auto fInfo = foo<F>()[0];
    using fType = [:type_of(fInfo):];
!   static_assert (std::same_as<fType, auto(int)->void>);
  }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/g++.dg/reflect/type_of3.C gcc-16-20260208/gcc/testsuite/g++.dg/reflect/type_of3.C
*** gcc-16-20260201/gcc/testsuite/g++.dg/reflect/type_of3.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/g++.dg/reflect/type_of3.C	Sun Feb  8 22:32:09 2026
***************
*** 0 ****
--- 1,13 ----
+ // PR c++/123616
+ // { dg-do compile { target c++26 } }
+ // { dg-additional-options "-freflection" }
+ 
+ #include <meta>
+ using namespace std::meta;
+ 
+ struct S {
+     auto g() { return 0; }
+ };
+ int h() { return 0; }
+ 
+ static_assert(type_of(^^S::g) == type_of(^^h));
diff -Nrcpad gcc-16-20260201/gcc/testsuite/g++.dg/torture/pr123729.C gcc-16-20260208/gcc/testsuite/g++.dg/torture/pr123729.C
*** gcc-16-20260201/gcc/testsuite/g++.dg/torture/pr123729.C	Sun Feb  1 22:32:10 2026
--- gcc-16-20260208/gcc/testsuite/g++.dg/torture/pr123729.C	Sun Feb  8 22:32:09 2026
***************
*** 1,5 ****
--- 1,6 ----
  // { dg-do compile }
  // { dg-additional-options "-std=gnu++20" }
+ // { dg-skip-if "requires hosted libstdc++ for csetjmp and iostream" { ! hostedlib } }
  
  #include <csetjmp>
  #include <iostream>
diff -Nrcpad gcc-16-20260201/gcc/testsuite/g++.target/aarch64/atomic_store_with_stshh.C gcc-16-20260208/gcc/testsuite/g++.target/aarch64/atomic_store_with_stshh.C
*** gcc-16-20260201/gcc/testsuite/g++.target/aarch64/atomic_store_with_stshh.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/g++.target/aarch64/atomic_store_with_stshh.C	Sun Feb  8 22:32:09 2026
***************
*** 0 ****
--- 1,186 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=armv8-a -save-temps" } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include <arm_acle.h>
+ 
+ /*
+ ** _Z8testFun1v:
+ ** ...
+ **	stshh	keep
+ **	strb	w[0-9]+, \[x[0-9]+\]
+ ** ...
+ */
+ void
+ testFun1 ()
+ {
+   char item1 = 0;
+   char* ptr1 = &item1;
+   char test1 = 1;
+ 
+   __atomic_store_with_stshh (ptr1, test1, __ATOMIC_RELAXED, 0);
+ }
+ 
+ /*
+ ** _Z8testFun2v:
+ ** ...
+ **	stshh	keep
+ **	stlrh	w[0-9]+, \[x[0-9]+\]
+ ** ...
+ */
+ void
+ testFun2 ()
+ {
+   short item2 = 10;
+   short* ptr2 = &item2;
+   short test2 = 11;
+   __atomic_store_with_stshh (ptr2, test2, __ATOMIC_RELEASE, 0);
+ }
+ 
+ /*
+ ** _Z8testFun3v:
+ ** ...
+ **	stshh	strm
+ **	stlr	w[0-9]+, \[x[0-9]+\]
+ ** ...
+ */
+ void
+ testFun3 ()
+ {
+   unsigned int item3 = 10;
+   unsigned int* ptr3 = &item3;
+   unsigned int test3 = 11;
+   __atomic_store_with_stshh (ptr3, test3, __ATOMIC_SEQ_CST, 1);
+ }
+ 
+ /*
+ ** _Z8testFun4v:
+ ** ...
+ **	stshh	strm
+ **	str	x[0-9]+, \[x[0-9]+\]
+ ** ...
+ */
+ void
+ testFun4 ()
+ {
+   long item4 = 10;
+   long* ptr4 = &item4;
+   long test4 = 11;
+   __atomic_store_with_stshh (ptr4, test4, __ATOMIC_RELAXED, 1);
+ }
+ 
+ /*
+ ** _Z8testFun5v:
+ ** ...
+ **	stshh	keep
+ **	stlr	x[0-9]+, \[x[0-9]+\]
+ ** ...
+ */
+ void
+ testFun5 ()
+ {
+   long item5 = 10;
+   long *ptritem = &item5;
+   long **ptr5 = &ptritem;
+   long test5item = 11;
+   long *test5 = &test5item;
+   __atomic_store_with_stshh (ptr5, test5, __ATOMIC_SEQ_CST, 0);
+ }
+ 
+ /*
+ ** _Z8testFun6v:
+ ** ...
+ **	stshh	keep
+ **	stlr	w[0-9]+, \[x[0-9]+\]
+ ** ...
+ */
+ void
+ testFun6 ()
+ {
+   float item6 = 10;
+   float* ptr6 = &item6;
+   float test6 = 11;
+   __atomic_store_with_stshh (ptr6, test6, __ATOMIC_SEQ_CST, 0);
+ }
+ 
+ /*
+ ** _Z8testFun7v:
+ ** ...
+ **	stshh	strm
+ **	str	x[0-9]+, \[x[0-9]+\]
+ ** ...
+ */
+ void
+ testFun7 ()
+ {
+   double item7 = 10;
+   double* ptr7 = &item7;
+   double test7 = 11;
+   __atomic_store_with_stshh (ptr7, test7, __ATOMIC_RELAXED, 1);
+ }
+ 
+ /*
+ ** _Z8testFun8v:
+ ** ...
+ **	stshh	keep
+ **	strb	w[0-9]+, \[x[0-9]+\]
+ ** ...
+ */
+ void
+ testFun8 ()
+ {
+   char item8 = 0;
+   char* ptr8 = &item8;
+   long test8 = 1;
+ 
+   __atomic_store_with_stshh (ptr8, test8, __ATOMIC_RELAXED, 0);
+ }
+ 
+ /*
+ ** _Z8testFun9v:
+ ** ...
+ **	stshh	strm
+ **	str	w[0-9]+, \[x[0-9]+\]
+ ** ...
+ */
+ void
+ testFun9 ()
+ {
+   int item9 = 0;
+   int* ptr9 = &item9;
+   float test9 = 1;
+ 
+   __atomic_store_with_stshh (ptr9, test9, __ATOMIC_RELAXED, 1);
+ }
+ 
+ /*
+ ** _Z9testFun10v:
+ ** ...
+ **	add	(x[0-9]+), \1, 1
+ **	mov	(w[0-9]+), 7
+ **	stshh	strm
+ **	strb	\2, \[\1\]
+ ** ...
+ */
+ static char buf[8];
+ void
+ testFun10 (void)
+ {
+   __atomic_store_with_stshh((buf + 1), (char)7, __ATOMIC_RELAXED, 1);
+ }
+ 
+ /*
+ ** _Z9testFun11v:
+ ** ...
+ **	stshh	strm
+ **	str	wzr, \[x[0-9]+\]
+ ** ...
+ */
+ void
+ testFun11 ()
+ {
+   int item11 = 10;
+   int* ptr11 = &item11;
+ 
+   __atomic_store_with_stshh (ptr11, 0, __ATOMIC_RELAXED, 1);
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/g++.target/i386/pr124002.C gcc-16-20260208/gcc/testsuite/g++.target/i386/pr124002.C
*** gcc-16-20260201/gcc/testsuite/g++.target/i386/pr124002.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/g++.target/i386/pr124002.C	Sun Feb  8 22:32:09 2026
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=znver3" } */
+ 
+ extern "C" double pow(double, double);
+ double sigmoid_x;
+ double sigmoid() {
+   if (sigmoid_x)
+     return sigmoid_x;
+   return 0;
+ }
+ double der_sigmoid() {
+   double tmp = sigmoid();
+   return tmp - pow(tmp, 2);
+ }
+ 
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.c-torture/execute/pr123978.c gcc-16-20260208/gcc/testsuite/gcc.c-torture/execute/pr123978.c
*** gcc-16-20260201/gcc/testsuite/gcc.c-torture/execute/pr123978.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gcc.c-torture/execute/pr123978.c	Sun Feb  8 22:32:10 2026
***************
*** 0 ****
--- 1,25 ----
+ /* PR middle-end/123978 */
+ 
+ struct A { unsigned b, c, *d; };
+ 
+ [[gnu::noipa]] int
+ foo (struct A *a)
+ {
+   __builtin_memset (a->d, 0, ((long long) sizeof (unsigned)) * a->b * a->c);
+   return 0;
+ }
+ 
+ int
+ main ()
+ {
+   struct A a;
+   unsigned b[256];
+   __builtin_memset (b, 0x55, sizeof (b));
+   a.b = 15;
+   a.c = 15;
+   a.d = b;
+   foo (&a);
+   for (int i = 0; i < 225; ++i)
+     if (b[i] != 0)
+       __builtin_abort ();
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.dg/analyzer/data-model-1.c gcc-16-20260208/gcc/testsuite/gcc.dg/analyzer/data-model-1.c
*** gcc-16-20260201/gcc/testsuite/gcc.dg/analyzer/data-model-1.c	Sun Feb  1 22:32:11 2026
--- gcc-16-20260208/gcc/testsuite/gcc.dg/analyzer/data-model-1.c	Sun Feb  8 22:32:10 2026
*************** void test_20 (int i, int j)
*** 374,380 ****
    __analyzer_eval (i & 1); /* { dg-warning "UNKNOWN" } */
    __analyzer_eval (i & j); /* { dg-warning "UNKNOWN" } */
  
!   __analyzer_eval (i | 1); /* { dg-warning "UNKNOWN" } */
    __analyzer_eval (i | j); /* { dg-warning "UNKNOWN" } */
  
    __analyzer_eval (i ^ 1); /* { dg-warning "UNKNOWN" } */
--- 374,380 ----
    __analyzer_eval (i & 1); /* { dg-warning "UNKNOWN" } */
    __analyzer_eval (i & j); /* { dg-warning "UNKNOWN" } */
  
!   __analyzer_eval (i | 1); /* { dg-warning "TRUE" } */
    __analyzer_eval (i | j); /* { dg-warning "UNKNOWN" } */
  
    __analyzer_eval (i ^ 1); /* { dg-warning "UNKNOWN" } */
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.dg/analyzer/null-deref-pr105755.c gcc-16-20260208/gcc/testsuite/gcc.dg/analyzer/null-deref-pr105755.c
*** gcc-16-20260201/gcc/testsuite/gcc.dg/analyzer/null-deref-pr105755.c	Sun Feb  1 22:32:11 2026
--- gcc-16-20260208/gcc/testsuite/gcc.dg/analyzer/null-deref-pr105755.c	Sun Feb  8 22:32:10 2026
***************
*** 1,9 ****
  /* { dg-require-effective-target int32plus } */
  /* { dg-additional-options "-Wno-analyzer-too-complex -Wno-analyzer-symbol-too-complex -O2" } */
  
! typedef long int ptrdiff_t;
! typedef long int EMACS_INT;
! typedef long int intmax_t;
  
  enum Lisp_Type
    {
--- 1,9 ----
  /* { dg-require-effective-target int32plus } */
  /* { dg-additional-options "-Wno-analyzer-too-complex -Wno-analyzer-symbol-too-complex -O2" } */
  
! typedef __PTRDIFF_TYPE__ ptrdiff_t;
! typedef __UINTPTR_TYPE__ EMACS_INT;
! typedef __INTMAX_TYPE__ intmax_t;
  
  enum Lisp_Type
    {
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.dg/analyzer/torture/ice-pr117491.c gcc-16-20260208/gcc/testsuite/gcc.dg/analyzer/torture/ice-pr117491.c
*** gcc-16-20260201/gcc/testsuite/gcc.dg/analyzer/torture/ice-pr117491.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gcc.dg/analyzer/torture/ice-pr117491.c	Sun Feb  8 22:32:10 2026
***************
*** 0 ****
--- 1,10 ----
+ short c;
+ int x;
+ void *d, *s;
+ 
+ void
+ foo()
+ {
+   __builtin_memset(&c, !x, sizeof c);
+   __builtin_memcpy(d, s, c);
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.dg/bitint-127.c gcc-16-20260208/gcc/testsuite/gcc.dg/bitint-127.c
*** gcc-16-20260201/gcc/testsuite/gcc.dg/bitint-127.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gcc.dg/bitint-127.c	Sun Feb  8 22:32:10 2026
***************
*** 0 ****
--- 1,28 ----
+ /* PR middle-end/122689 */
+ /* { dg-do run { target { bitint } } } */
+ /* { dg-options "-O" } */
+ 
+ #if __BITINT_MAXWIDTH__ >= 12419
+ const _BitInt(12419) n =  ;
+ 
+ unsigned g;
+ 
+ _BitInt(6)
+ foo (unsigned a, unsigned b, unsigned c, unsigned _BitInt(256) z,
+      unsigned _BitInt(12419) y)
+ {
+   y /= b;
+   unsigned _BitInt(12419) ay = a * y;
+   g -= (n >= ay ? n : ay) % c;
+   return z;
+ }
+ #endif
+ 
+ int
+ main ()
+ {
+ #if __BITINT_MAXWIDTH__ >= 12419
+   if (foo (0, 5, 5, 2, 0) != 2)
+     __builtin_abort ();
+ #endif
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.dg/errno-2.c gcc-16-20260208/gcc/testsuite/gcc.dg/errno-2.c
*** gcc-16-20260201/gcc/testsuite/gcc.dg/errno-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gcc.dg/errno-2.c	Sun Feb  8 22:32:10 2026
***************
*** 0 ****
--- 1,35 ----
+ /* PR middle-end/123826 */
+ /* { dg-do run } */
+ /* { dg-options "-O2" } */
+ 
+ #ifdef __NO_MATH_ERRNO__
+ int main() { return 0; }
+ #else
+ #include <errno.h>
+ #include <float.h>
+ #include <math.h>
+ 
+ double foo(double x)
+ {
+   return pow(x, 2.0);
+ }
+ 
+ int main()
+ {
+ #ifdef math_errhandling
+ #ifdef MATH_ERRNO
+   if ((math_errhandling & MATH_ERRNO) == 0)
+     return 0;
+ #else
+   if ((math_errhandling & 1) == 0)
+     return 0;
+ #endif
+ #endif
+ 
+   errno = 0;
+   double x = foo(DBL_MAX);
+   if (errno != ERANGE)
+     __builtin_abort ();
+   return 0;
+ }
+ #endif
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.dg/errno-3.c gcc-16-20260208/gcc/testsuite/gcc.dg/errno-3.c
*** gcc-16-20260201/gcc/testsuite/gcc.dg/errno-3.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gcc.dg/errno-3.c	Sun Feb  8 22:32:10 2026
***************
*** 0 ****
--- 1,35 ----
+ /* PR middle-end/123826 */
+ /* { dg-do run } */
+ /* { dg-options "-O2" } */
+ 
+ #ifdef __NO_MATH_ERRNO__
+ int main() { return 0; }
+ #else
+ #include <errno.h>
+ #include <float.h>
+ #include <math.h>
+ 
+ float foo(float x)
+ {
+   return powf(x, 2.0f);
+ }
+ 
+ int main()
+ {
+ #ifdef math_errhandling
+ #ifdef MATH_ERRNO
+   if ((math_errhandling & MATH_ERRNO) == 0)
+     return 0;
+ #else
+   if ((math_errhandling & 1) == 0)
+     return 0;
+ #endif
+ #endif
+ 
+   errno = 0;
+   float x = foo(FLT_MAX);
+   if (errno != ERANGE)
+     __builtin_abort ();
+   return 0;
+ }
+ #endif
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.dg/errno-4.c gcc-16-20260208/gcc/testsuite/gcc.dg/errno-4.c
*** gcc-16-20260201/gcc/testsuite/gcc.dg/errno-4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gcc.dg/errno-4.c	Sun Feb  8 22:32:10 2026
***************
*** 0 ****
--- 1,35 ----
+ /* PR middle-end/123826 */
+ /* { dg-do run } */
+ /* { dg-options "-O2" } */
+ 
+ #ifdef __NO_MATH_ERRNO__
+ int main() { return 0; }
+ #else
+ #include <errno.h>
+ #include <float.h>
+ #include <math.h>
+ 
+ double foo(double x)
+ {
+   return x + pow(x, 2.0);
+ }
+ 
+ int main()
+ {
+ #ifdef math_errhandling
+ #ifdef MATH_ERRNO
+   if ((math_errhandling & MATH_ERRNO) == 0)
+     return 0;
+ #else
+   if ((math_errhandling & 1) == 0)
+     return 0;
+ #endif
+ #endif
+ 
+   errno = 0;
+   double x = foo(DBL_MAX);
+   if (errno != ERANGE)
+     __builtin_abort ();
+   return 0;
+ }
+ #endif
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.dg/pr101312-1.c gcc-16-20260208/gcc/testsuite/gcc.dg/pr101312-1.c
*** gcc-16-20260201/gcc/testsuite/gcc.dg/pr101312-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gcc.dg/pr101312-1.c	Sun Feb  8 22:32:10 2026
***************
*** 0 ****
--- 1,4 ----
+ /* PR c/101312 */
+ /* { dg-do compile } */
+ 
+ volatile int a[1] __attribute__((may_alias));
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.dg/pr101312-2.c gcc-16-20260208/gcc/testsuite/gcc.dg/pr101312-2.c
*** gcc-16-20260201/gcc/testsuite/gcc.dg/pr101312-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gcc.dg/pr101312-2.c	Sun Feb  8 22:32:10 2026
***************
*** 0 ****
--- 1,5 ----
+ /* PR c/101312 */
+ /* { dg-do compile } */
+ /* { dg-options "-g" } */
+ 
+ volatile int a[1] __attribute__((may_alias));
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.dg/pr121104.c gcc-16-20260208/gcc/testsuite/gcc.dg/pr121104.c
*** gcc-16-20260201/gcc/testsuite/gcc.dg/pr121104.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gcc.dg/pr121104.c	Sun Feb  8 22:32:10 2026
***************
*** 0 ****
--- 1,23 ----
+ /* PR tree-optimization/121104 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ 
+ static unsigned long
+ foo (unsigned long x, unsigned long y,
+      unsigned long z, unsigned long *w)
+ {
+   int r;
+   unsigned long a = __builtin_sub_overflow (x, y, &r);
+   unsigned long b = __builtin_sub_overflow (r, z, &r);
+   *w = a + b;
+   return r;
+ }
+ 
+ unsigned long
+ bar (unsigned long *p, unsigned long *q)
+ {
+   unsigned long c;
+   p[0] = foo (p[0], q[0], 0, &c);
+   p[1] = foo (p[1], q[1], c, &c);
+   return c;
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.dg/pr123109-scalar.c gcc-16-20260208/gcc/testsuite/gcc.dg/pr123109-scalar.c
*** gcc-16-20260201/gcc/testsuite/gcc.dg/pr123109-scalar.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gcc.dg/pr123109-scalar.c	Sun Feb  8 22:32:10 2026
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-tree-optimized" } */
+ 
+ #define TEST_NE(type)                                         \
+   type test_ne_##type (type a) { return (a >> 31) != 0; }
+ 
+ #define TEST_EQ(type)                                         \
+   type test_eq_##type (type a) { return (a >> 31) == 0; }
+ 
+ TEST_NE(int)
+ TEST_NE(unsigned)
+ TEST_EQ(int)
+ TEST_EQ(unsigned)
+ 
+ /* { dg-final { scan-tree-dump-times ">= 0" 2 optimized } } */
+ /* { dg-final { scan-tree-dump-times "< 0" 2 optimized } } */
+ 
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.dg/pr123109-vector.c gcc-16-20260208/gcc/testsuite/gcc.dg/pr123109-vector.c
*** gcc-16-20260201/gcc/testsuite/gcc.dg/pr123109-vector.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gcc.dg/pr123109-vector.c	Sun Feb  8 22:32:10 2026
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do compile } */
+ /* { dg-options "-Wno-psabi -O2 -fdump-tree-forwprop2" } */
+ /* { dg-additional-options "-msse2" { target { i?86-*-* x86_64-*-* } } } */
+ 
+ typedef int v4si __attribute__((vector_size(4 * sizeof(int))));
+ typedef unsigned int v4usi __attribute__((vector_size(4 * sizeof(unsigned int))));
+ 
+ #define TEST_NE(type)                                         \
+   type test_ne_##type (type a) { return (a >> 31) != 0; }
+ 
+ #define TEST_EQ(type)                                         \
+   type test_eq_##type (type a) { return (a >> 31) == 0; }
+ 
+ TEST_NE(v4si)
+ TEST_NE(v4usi)
+ TEST_EQ(v4si)
+ TEST_EQ(v4usi)
+ 
+ /* { dg-final { scan-tree-dump-times ">= { 0, 0, 0, 0 }" 2 forwprop2 } } */
+ /* "a < 0 ? -1 : 0" will be optimized to "a >> 31" only if there's an optab.  */
+ /* { dg-final { scan-tree-dump-times ">> 31" 2 forwprop2 { target { i?86-*-* x86_64-*-* aarch64-*-* } } } } */
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.dg/pr123109.c gcc-16-20260208/gcc/testsuite/gcc.dg/pr123109.c
*** gcc-16-20260201/gcc/testsuite/gcc.dg/pr123109.c	Sun Feb  1 22:32:11 2026
--- gcc-16-20260208/gcc/testsuite/gcc.dg/pr123109.c	Thu Jan  1 00:00:00 1970
***************
*** 1,25 ****
- /* { dg-do compile { target { x86_64-*-* aarch64-*-* } } } */
- /* { dg-options "-O2 -fdump-tree-optimized" } */
- 
- typedef int v4si __attribute__((vector_size(4 * sizeof(int))));
- typedef unsigned int v4usi __attribute__((vector_size(4 * sizeof(unsigned int))));
- 
- #define TEST_NE(type)                                         \
-   type test_ne_##type (type a) { return (a >> 31) != 0; }
- 
- #define TEST_EQ(type)                                         \
-   type test_eq_##type (type a) { return (a >> 31) == 0; }
- 
- TEST_NE(int)
- TEST_NE(unsigned)
- TEST_NE(v4si)
- TEST_NE(v4usi)
- TEST_EQ(int)
- TEST_EQ(unsigned)
- TEST_EQ(v4si)
- TEST_EQ(v4usi)
- 
- /* { dg-final { scan-tree-dump-times ">= 0" 2 optimized } } */
- /* { dg-final { scan-tree-dump-times "< 0" 2 optimized } } */
- /* { dg-final { scan-tree-dump-times ">= { 0, 0, 0, 0 }" 2 optimized } } */
- /* { dg-final { scan-tree-dump-times ">> 31" 2 optimized } } */
--- 0 ----
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.dg/pr123294-1.c gcc-16-20260208/gcc/testsuite/gcc.dg/pr123294-1.c
*** gcc-16-20260201/gcc/testsuite/gcc.dg/pr123294-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gcc.dg/pr123294-1.c	Sun Feb  8 22:32:10 2026
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O1 -fno-tree-dse -fno-tree-dce" } */
+ /* PR rtl-optimization/123294 */
+ 
+ typedef unsigned a;
+ int b;
+ void g(__attribute__((__vector_size__(4 * sizeof(a)))) a *);
+ a d() {
+   __attribute__((__vector_size__(4 * sizeof(a)))) a e[5];
+   if (0 > b) {
+     __attribute__((__vector_size__(8 * sizeof(a)))) a f = {b, b};
+     e[0] = __builtin_shufflevector(f, f, 0, 1, 2, 3);
+   }
+   return 1;
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.dg/pr123672.c gcc-16-20260208/gcc/testsuite/gcc.dg/pr123672.c
*** gcc-16-20260201/gcc/testsuite/gcc.dg/pr123672.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gcc.dg/pr123672.c	Sun Feb  8 22:32:10 2026
***************
*** 0 ****
--- 1,33 ----
+ /* PR tree-optimization/123672 */
+ /* { dg-do run } */
+ /* { dg-options "-O2 -fdump-tree-forwprop1-details" } */
+ /* { dg-additional-options "-msse2" { target i?86-*-* x86_64-*-* } } */
+ /* { dg-final { scan-tree-dump "Vec perm simplify sequences have been blended" "forwprop1" { target { aarch64*-*-* i?86-*-* x86_64-*-* } } } } */
+ 
+ typedef int V __attribute__((vector_size (4 * sizeof (int))));
+ 
+ [[gnu::noipa]] void
+ foo (V *x, V *y)
+ {
+   V a = *x;
+   V b = *y;
+   V c = __builtin_shufflevector (a, a, 0, 2, 0, 2);
+   V d = __builtin_shufflevector (a, a, 1, 3, 1, 3);
+   V e = __builtin_shufflevector (b, b, 0, 2, 0, 2);
+   V f = __builtin_shufflevector (b, b, 1, 3, 1, 3);
+   V g = __builtin_shufflevector (c + d, c - d, 0, 4, 1, 5);
+   V h = __builtin_shufflevector (e + f, e - f, 0, 4, 1, 5);
+   *x = g;
+   *y = h;
+ }
+ 
+ int
+ main ()
+ {
+   V a = { 1, 21, 2, 32 };
+   V b = { 3, 43, 4, 54 };
+   foo (&a, &b);
+   if (a[0] != 22 || a[1] != -20 || a[2] != 34 || a[3] != -30
+       || b[0] != 46 || b[1] != -40 || b[2] != 58 || b[3] != -50)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.dg/pr123882.c gcc-16-20260208/gcc/testsuite/gcc.dg/pr123882.c
*** gcc-16-20260201/gcc/testsuite/gcc.dg/pr123882.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gcc.dg/pr123882.c	Sun Feb  8 22:32:10 2026
***************
*** 0 ****
--- 1,7 ----
+ /* PR c/123882 */
+ /* { dg-do compile } */
+ /* { dg-options "-std=c23" } */
+ 
+ typedef int T;
+ void foo (unsigned long, T[]);
+ void foo (unsigned long x, T[restrict x]);
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.dg/pr61053.c gcc-16-20260208/gcc/testsuite/gcc.dg/pr61053.c
*** gcc-16-20260201/gcc/testsuite/gcc.dg/pr61053.c	Sun Feb  1 22:32:11 2026
--- gcc-16-20260208/gcc/testsuite/gcc.dg/pr61053.c	Sun Feb  8 22:32:10 2026
*************** _Alignas (long double) long int lild;
*** 41,47 ****
  _Alignas (char) long long int llic; /* { dg-error "cannot reduce alignment" } */
  _Alignas (short int) long long int llis; /* { dg-error "cannot reduce alignment" } */
  _Alignas (int) long long int llii; /* { dg-error "cannot reduce alignment" "" { target { ! { ia32 } } } } */
! _Alignas (long int) long long int llil; /* { dg-error "cannot reduce alignment" "" { target { x32 } } } */
  _Alignas (long long int) long long int llill;
  _Alignas (float) long long int llif; /* { dg-error "cannot reduce alignment" "" { target { ! { ia32 } } } } */
  _Alignas (double) long long int llid;
--- 41,47 ----
  _Alignas (char) long long int llic; /* { dg-error "cannot reduce alignment" } */
  _Alignas (short int) long long int llis; /* { dg-error "cannot reduce alignment" } */
  _Alignas (int) long long int llii; /* { dg-error "cannot reduce alignment" "" { target { ! { ia32 } } } } */
! _Alignas (long int) long long int llil; /* { dg-error "cannot reduce alignment" "" { target { x32 || *-*-mingw* } } } */
  _Alignas (long long int) long long int llill;
  _Alignas (float) long long int llif; /* { dg-error "cannot reduce alignment" "" { target { ! { ia32 } } } } */
  _Alignas (double) long long int llid;
*************** _Alignas (long double) float fld;
*** 59,65 ****
  _Alignas (char) double dc; /* { dg-error "cannot reduce alignment" } */
  _Alignas (short int) double ds; /* { dg-error "cannot reduce alignment" } */
  _Alignas (int) double di; /* { dg-error "cannot reduce alignment" "" { target { ! { ia32 } } } } */
! _Alignas (long int) double dl; /* { dg-error "cannot reduce alignment" "" { target { x32 } } } */
  _Alignas (long long int) double dll;
  _Alignas (float) double df; /* { dg-error "cannot reduce alignment" "" { target { ! { ia32 } } } } */
  _Alignas (double) double dd;
--- 59,65 ----
  _Alignas (char) double dc; /* { dg-error "cannot reduce alignment" } */
  _Alignas (short int) double ds; /* { dg-error "cannot reduce alignment" } */
  _Alignas (int) double di; /* { dg-error "cannot reduce alignment" "" { target { ! { ia32 } } } } */
! _Alignas (long int) double dl; /* { dg-error "cannot reduce alignment" "" { target { x32 || *-*-mingw* } } } */
  _Alignas (long long int) double dll;
  _Alignas (float) double df; /* { dg-error "cannot reduce alignment" "" { target { ! { ia32 } } } } */
  _Alignas (double) double dd;
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.dg/pr90838.c gcc-16-20260208/gcc/testsuite/gcc.dg/pr90838.c
*** gcc-16-20260201/gcc/testsuite/gcc.dg/pr90838.c	Sun Feb  1 22:32:11 2026
--- gcc-16-20260208/gcc/testsuite/gcc.dg/pr90838.c	Sun Feb  8 22:32:10 2026
*************** int ctz4 (unsigned long x)
*** 87,90 ****
  /* { dg-final { scan-tree-dump-times {= \.CTZ} 4 "forwprop2" { target { loongarch64*-*-* } } } } */
  /* { dg-final { scan-assembler-times "ctz.d\t" 1 { target { loongarch64*-*-* } } } } */
  /* { dg-final { scan-assembler-times "ctz.w\t" 3 { target { loongarch64*-*-* } } } } */
! /* { dg-final { scan-assembler-times "andi\t" 4 { target { loongarch64*-*-* } } } } */
--- 87,90 ----
  /* { dg-final { scan-tree-dump-times {= \.CTZ} 4 "forwprop2" { target { loongarch64*-*-* } } } } */
  /* { dg-final { scan-assembler-times "ctz.d\t" 1 { target { loongarch64*-*-* } } } } */
  /* { dg-final { scan-assembler-times "ctz.w\t" 3 { target { loongarch64*-*-* } } } } */
! /* { dg-final { scan-assembler-times "\(andi|slli.w\)\t" 4 { target { loongarch64*-*-* } } } } */
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.dg/pr97750.c gcc-16-20260208/gcc/testsuite/gcc.dg/pr97750.c
*** gcc-16-20260201/gcc/testsuite/gcc.dg/pr97750.c	Sun Feb  1 22:32:11 2026
--- gcc-16-20260208/gcc/testsuite/gcc.dg/pr97750.c	Sun Feb  8 22:32:10 2026
*************** void CopyPlane(char *dst) {
*** 13,19 ****
  void CopyFromUswc(long src_pitch) {
    char *dst;
    for (; CopyFromUswc_height;) {
!     unsigned unaligned = (long)CopyFromUswc_src;
      if (unaligned)
        CopyPlane(&dst[unaligned]);  
      CopyFromUswc_src += src_pitch;
--- 13,19 ----
  void CopyFromUswc(long src_pitch) {
    char *dst;
    for (; CopyFromUswc_height;) {
!     unsigned unaligned = (__INTPTR_TYPE__)CopyFromUswc_src;
      if (unaligned)
        CopyPlane(&dst[unaligned]);  
      CopyFromUswc_src += src_pitch;
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.dg/torture/pr121661-1.c gcc-16-20260208/gcc/testsuite/gcc.dg/torture/pr121661-1.c
*** gcc-16-20260201/gcc/testsuite/gcc.dg/torture/pr121661-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gcc.dg/torture/pr121661-1.c	Sun Feb  8 22:32:10 2026
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do run } */
+ /* { dg-options "" } */
+ /* PR middle-end/121661 */
+ 
+ static void fun1(_Complex int val)
+ {
+   __attribute__((unused))
+   void nfun()
+     {
+       if (__real__ val != 1)
+         __builtin_abort();
+     }
+   (void)&val;
+   if (__real__ val != 1)
+     __builtin_abort();
+ }
+ 
+ int main(int argc, char* [])
+ {
+   fun1(1);
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.dg/torture/pr123416.c gcc-16-20260208/gcc/testsuite/gcc.dg/torture/pr123416.c
*** gcc-16-20260201/gcc/testsuite/gcc.dg/torture/pr123416.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gcc.dg/torture/pr123416.c	Sun Feb  8 22:32:10 2026
***************
*** 0 ****
--- 1,28 ----
+ /* { dg-do run } */
+ /* { dg-additional-options "-fno-strict-aliasing" } */
+ 
+ struct a {
+   int b;
+ } c;
+ 
+ int d;
+ 
+ static struct a
+ g()
+ {
+   int a[2], b, f = 0;
+   for (; f < 2; f++)
+     a[f] = 1;
+   b = a[0];
+   if (b)
+     return c;
+ }
+ int main()
+ {
+   c.b = 1;
+   struct a e = g();
+   c = g();
+   if (!c.b || !e.b)
+     __builtin_abort();
+   return 0;
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.dg/torture/pr49330-1.c gcc-16-20260208/gcc/testsuite/gcc.dg/torture/pr49330-1.c
*** gcc-16-20260201/gcc/testsuite/gcc.dg/torture/pr49330-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gcc.dg/torture/pr49330-1.c	Sun Feb  8 22:32:10 2026
***************
*** 0 ****
--- 1,22 ----
+ /* { dg-do run } */
+ 
+ #include <stdint.h>
+ 
+ int x, y;
+ int __attribute__((noipa)) foo()
+ {
+   uintptr_t px = (uintptr_t) &x;
+   uintptr_t py = (uintptr_t) &y;
+   volatile uintptr_t d = px - py;
+   uintptr_t p = py + d;
+   x = 1;
+   *(int *) p = 2;
+   return x;
+ }
+ 
+ int main()
+ {
+   if (foo () != 2)
+     __builtin_abort ();
+   return 0;
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.dg/torture/pr49330-2.c gcc-16-20260208/gcc/testsuite/gcc.dg/torture/pr49330-2.c
*** gcc-16-20260201/gcc/testsuite/gcc.dg/torture/pr49330-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gcc.dg/torture/pr49330-2.c	Sun Feb  8 22:32:10 2026
***************
*** 0 ****
--- 1,22 ----
+ /* { dg-do run } */
+ 
+ #include <stdio.h>
+ 
+ int a;
+ 
+ void __attribute__((noipa))
+ foo()
+ {
+   unsigned long b = (unsigned long) &a - 134518548;
+   volatile unsigned long c = b;
+   if (c == 0) {
+     if (b != 0) __builtin_abort ();
+   }
+   a = c;
+ }
+ 
+ int main()
+ {
+   foo ();
+   return 0;
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.dg/vect/vect-pr123983.c gcc-16-20260208/gcc/testsuite/gcc.dg/vect/vect-pr123983.c
*** gcc-16-20260201/gcc/testsuite/gcc.dg/vect/vect-pr123983.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gcc.dg/vect/vect-pr123983.c	Sun Feb  8 22:32:11 2026
***************
*** 0 ****
--- 1,28 ----
+ /* { dg-additional-options "-O1" } */
+ 
+ #include "tree-vect.h"
+ 
+ unsigned char b;
+ unsigned short c;
+ 
+ [[gnu::noipa]]
+ void f() {
+   unsigned char bb = b;
+   unsigned short cc = c;
+   do {
+     bb--;
+     cc--;
+     c--;
+   } while (bb);
+   //c = cc;
+   b = bb;
+ }
+ 
+ int main()
+ {
+   check_vect ();
+   f();
+   if (c != 65280)
+     __builtin_abort();
+   return 0;
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/aarch64/acle/pld_pli.c gcc-16-20260208/gcc/testsuite/gcc.target/aarch64/acle/pld_pli.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/aarch64/acle/pld_pli.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gcc.target/aarch64/acle/pld_pli.c	Sun Feb  8 22:32:11 2026
***************
*** 0 ****
--- 1,102 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=armv8-a -O2" } */
+ /* { dg-final { check-function-bodies "**" "" "" } } */
+ 
+ #include <arm_acle.h>
+ 
+ /* Check that we can generate the immediate-offset addressing
+    mode for PRFM.  */
+ 
+ /* Access kind specifiers.  */
+ #define PLD 0
+ #define PST 1
+ /* Cache levels.  */
+ #define L1  0
+ #define L2  1
+ #define L3  2
+ #define SLC 3
+ /* Retention policies.  */
+ #define KEEP 0
+ #define STRM 1
+ 
+ void
+ prefetch_for_read_write (void *a)
+ {
+   __pldx (PLD, L1, KEEP, a);
+   __pldx (PLD, L1, STRM, a);
+   __pldx (PLD, L2, KEEP, a);
+   __pldx (PLD, L2, STRM, a);
+   __pldx (PLD, L3, KEEP, a);
+   __pldx (PLD, L3, STRM, a);
+   __pldx (PLD, SLC, KEEP, a);
+   __pldx (PLD, SLC, STRM, a);
+   __pldx (PST, L1, KEEP, a);
+   __pldx (PST, L1, STRM, a);
+   __pldx (PST, L2, KEEP, a);
+   __pldx (PST, L2, STRM, a);
+   __pldx (PST, L3, KEEP, a);
+   __pldx (PST, L3, STRM, a);
+   __pldx (PST, SLC, KEEP, a);
+   __pldx (PST, SLC, STRM, a);
+ }
+ /*
+ ** prefetch_for_read_write:
+ ** ...
+ **	prfm\tPLDL1KEEP, \[x[0-9]+\]
+ **	prfm\tPLDL1STRM, \[x[0-9]+\]
+ **	prfm\tPLDL2KEEP, \[x[0-9]+\]
+ **	prfm\tPLDL2STRM, \[x[0-9]+\]
+ **	prfm\tPLDL3KEEP, \[x[0-9]+\]
+ **	prfm\tPLDL3STRM, \[x[0-9]+\]
+ **	prfm\tPLDSLCKEEP, \[x[0-9]+\]
+ **	prfm\tPLDSLCSTRM, \[x[0-9]+\]
+ **	prfm\tPSTL1KEEP, \[x[0-9]+\]
+ **	prfm\tPSTL1STRM, \[x[0-9]+\]
+ **	prfm\tPSTL2KEEP, \[x[0-9]+\]
+ **	prfm\tPSTL2STRM, \[x[0-9]+\]
+ **	prfm\tPSTL3KEEP, \[x[0-9]+\]
+ **	prfm\tPSTL3STRM, \[x[0-9]+\]
+ **	prfm\tPSTSLCKEEP, \[x[0-9]+\]
+ **	prfm\tPSTSLCSTRM, \[x[0-9]+\]
+ ** ...
+ */
+ 
+ void
+ prefetch_simple (void *a)
+ {
+   __pld (a);
+   __pli (a);
+ }
+ /*
+ ** prefetch_simple:
+ ** ...
+ **	prfm\tPLDL1KEEP, \[x[0-9]+\]
+ **	prfm\tPLIL1KEEP, \[x[0-9]+\]
+ ** ...
+ */
+ 
+ void
+ prefetch_instructions (void *a)
+ {
+   __plix (L1, KEEP, a);
+   __plix (L1, STRM, a);
+   __plix (L2, KEEP, a);
+   __plix (L2, STRM, a);
+   __plix (L3, KEEP, a);
+   __plix (L3, STRM, a);
+   __plix (SLC, KEEP, a);
+   __plix (SLC, STRM, a);
+ }
+ /*
+ ** prefetch_instructions:
+ ** ...
+ **	prfm\tPLIL1KEEP, \[x[0-9]+\]
+ **	prfm\tPLIL1STRM, \[x[0-9]+\]
+ **	prfm\tPLIL2KEEP, \[x[0-9]+\]
+ **	prfm\tPLIL2STRM, \[x[0-9]+\]
+ **	prfm\tPLIL3KEEP, \[x[0-9]+\]
+ **	prfm\tPLIL3STRM, \[x[0-9]+\]
+ **	prfm\tPLISLCKEEP, \[x[0-9]+\]
+ **	prfm\tPLISLCSTRM, \[x[0-9]+\]
+ ** ...
+ */
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/aarch64/acle/pld_pli_illegal.c gcc-16-20260208/gcc/testsuite/gcc.target/aarch64/acle/pld_pli_illegal.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/aarch64/acle/pld_pli_illegal.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gcc.target/aarch64/acle/pld_pli_illegal.c	Sun Feb  8 22:32:11 2026
***************
*** 0 ****
--- 1,33 ----
+ /* Check that PRFM-related bounds checks are applied correctly.  */
+ /* { dg-do compile } */
+ #include <arm_acle.h>
+ 
+ /* Access kind specifiers.  */
+ #define KIND_LOW -1
+ #define KIND_HIGH 2
+ /* Cache levels.  */
+ #define LEVEL_LOW  -1
+ #define LEVEL_HIGH  4
+ /* Retention policies.  */
+ #define POLICY_LOW -1
+ #define POLICY_HIGH 2
+ 
+ void
+ data_rw_prefetch_bad_bounds (void *a)
+ {
+   __pldx (KIND_LOW, 0, 0, a);  /* { dg-error {argument 1 must be a constant immediate in range \[0,1\]} } */
+   __pldx (KIND_HIGH, 0, 0, a); /* { dg-error {argument 1 must be a constant immediate in range \[0,1\]} } */
+   __pldx (0, LEVEL_LOW, 0, a);  /* { dg-error {argument 2 must be a constant immediate in range \[0,3\]} } */
+   __pldx (0, LEVEL_HIGH, 0, a); /* { dg-error {argument 2 must be a constant immediate in range \[0,3\]} } */
+   __pldx (0, 0, POLICY_LOW, a);  /* { dg-error {argument 3 must be a constant immediate in range \[0,1\]} } */
+   __pldx (0, 0, POLICY_HIGH, a); /* { dg-error {argument 3 must be a constant immediate in range \[0,1\]} } */
+ }
+ 
+ void
+ insn_prefetch_bad_bounds (void *a)
+ {
+   __plix (LEVEL_LOW, 0, a);  /* { dg-error {argument 1 must be a constant immediate in range \[0,3\]} } */
+   __plix (LEVEL_HIGH, 0, a); /* { dg-error {argument 1 must be a constant immediate in range \[0,3\]} } */
+   __plix (0, POLICY_LOW, a);  /* { dg-error {argument 2 must be a constant immediate in range \[0,1\]} } */
+   __plix (0, POLICY_HIGH, a); /* { dg-error {argument 2 must be a constant immediate in range \[0,1\]} } */
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/aarch64/acle/pldir.c gcc-16-20260208/gcc/testsuite/gcc.target/aarch64/acle/pldir.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/aarch64/acle/pldir.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gcc.target/aarch64/acle/pldir.c	Sun Feb  8 22:32:11 2026
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=armv8-a -O2" } */
+ 
+ #include <arm_acle.h>
+ 
+ void
+ prefetch_intent_to_read (void *addr)
+ {
+   __pldir (addr);
+ }
+ 
+ /* { dg-final { scan-assembler "prfm\tir, \[x\[0-9\]+\]" } } */
\ No newline at end of file
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/aarch64/atomic_store_with_stshh.c gcc-16-20260208/gcc/testsuite/gcc.target/aarch64/atomic_store_with_stshh.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/aarch64/atomic_store_with_stshh.c	Sun Feb  1 22:32:12 2026
--- gcc-16-20260208/gcc/testsuite/gcc.target/aarch64/atomic_store_with_stshh.c	Sun Feb  8 22:32:11 2026
*************** testFun4 ()
*** 73,88 ****
  ** testFun5:
  ** ...
  **	stshh	keep
! **	stlr	x[0-9]+, \[sp\]
  ** ...
  */
  void
  testFun5 ()
  {
    long item5 = 10;
!   long* ptr5 = &item5;
    long test5item = 11;
!   long* test5 = &test5item;
    __atomic_store_with_stshh (ptr5, test5, __ATOMIC_SEQ_CST, 0);
  }
  
--- 73,89 ----
  ** testFun5:
  ** ...
  **	stshh	keep
! **	stlr	x[0-9]+, \[x[0-9]+\]
  ** ...
  */
  void
  testFun5 ()
  {
    long item5 = 10;
!   long *ptritem = &item5;
!   long **ptr5 = &ptritem;
    long test5item = 11;
!   long *test5 = &test5item;
    __atomic_store_with_stshh (ptr5, test5, __ATOMIC_SEQ_CST, 0);
  }
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/aarch64/builtin_pld_pli.c gcc-16-20260208/gcc/testsuite/gcc.target/aarch64/builtin_pld_pli.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/aarch64/builtin_pld_pli.c	Sun Feb  1 22:32:12 2026
--- gcc-16-20260208/gcc/testsuite/gcc.target/aarch64/builtin_pld_pli.c	Thu Jan  1 00:00:00 1970
***************
*** 1,102 ****
- /* { dg-do compile } */
- /* { dg-options "-march=armv8-a -O2" } */
- /* { dg-final { check-function-bodies "**" "" "" } } */
- 
- #include <arm_acle.h>
- 
- /* Check that we can generate the immediate-offset addressing
-    mode for PRFM.  */
- 
- /* Access kind specifiers.  */
- #define PLD 0
- #define PST 1
- /* Cache levels.  */
- #define L1  0
- #define L2  1
- #define L3  2
- #define SLC 3
- /* Retention policies.  */
- #define KEEP 0
- #define STRM 1
- 
- void
- prefetch_for_read_write (void *a)
- {
-   __pldx (PLD, L1, KEEP, a);
-   __pldx (PLD, L1, STRM, a);
-   __pldx (PLD, L2, KEEP, a);
-   __pldx (PLD, L2, STRM, a);
-   __pldx (PLD, L3, KEEP, a);
-   __pldx (PLD, L3, STRM, a);
-   __pldx (PLD, SLC, KEEP, a);
-   __pldx (PLD, SLC, STRM, a);
-   __pldx (PST, L1, KEEP, a);
-   __pldx (PST, L1, STRM, a);
-   __pldx (PST, L2, KEEP, a);
-   __pldx (PST, L2, STRM, a);
-   __pldx (PST, L3, KEEP, a);
-   __pldx (PST, L3, STRM, a);
-   __pldx (PST, SLC, KEEP, a);
-   __pldx (PST, SLC, STRM, a);
- }
- /*
- ** prefetch_for_read_write:
- ** ...
- **	prfm\tPLDL1KEEP, \[x[0-9]+\]
- **	prfm\tPLDL1STRM, \[x[0-9]+\]
- **	prfm\tPLDL2KEEP, \[x[0-9]+\]
- **	prfm\tPLDL2STRM, \[x[0-9]+\]
- **	prfm\tPLDL3KEEP, \[x[0-9]+\]
- **	prfm\tPLDL3STRM, \[x[0-9]+\]
- **	prfm\tPLDSLCKEEP, \[x[0-9]+\]
- **	prfm\tPLDSLCSTRM, \[x[0-9]+\]
- **	prfm\tPSTL1KEEP, \[x[0-9]+\]
- **	prfm\tPSTL1STRM, \[x[0-9]+\]
- **	prfm\tPSTL2KEEP, \[x[0-9]+\]
- **	prfm\tPSTL2STRM, \[x[0-9]+\]
- **	prfm\tPSTL3KEEP, \[x[0-9]+\]
- **	prfm\tPSTL3STRM, \[x[0-9]+\]
- **	prfm\tPSTSLCKEEP, \[x[0-9]+\]
- **	prfm\tPSTSLCSTRM, \[x[0-9]+\]
- ** ...
- */
- 
- void
- prefetch_simple (void *a)
- {
-   __pld (a);
-   __pli (a);
- }
- /*
- ** prefetch_simple:
- ** ...
- **	prfm\tPLDL1KEEP, \[x[0-9]+\]
- **	prfm\tPLIL1KEEP, \[x[0-9]+\]
- ** ...
- */
- 
- void
- prefetch_instructions (void *a)
- {
-   __plix (L1, KEEP, a);
-   __plix (L1, STRM, a);
-   __plix (L2, KEEP, a);
-   __plix (L2, STRM, a);
-   __plix (L3, KEEP, a);
-   __plix (L3, STRM, a);
-   __plix (SLC, KEEP, a);
-   __plix (SLC, STRM, a);
- }
- /*
- ** prefetch_instructions:
- ** ...
- **	prfm\tPLIL1KEEP, \[x[0-9]+\]
- **	prfm\tPLIL1STRM, \[x[0-9]+\]
- **	prfm\tPLIL2KEEP, \[x[0-9]+\]
- **	prfm\tPLIL2STRM, \[x[0-9]+\]
- **	prfm\tPLIL3KEEP, \[x[0-9]+\]
- **	prfm\tPLIL3STRM, \[x[0-9]+\]
- **	prfm\tPLISLCKEEP, \[x[0-9]+\]
- **	prfm\tPLISLCSTRM, \[x[0-9]+\]
- ** ...
- */
--- 0 ----
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/aarch64/builtin_pld_pli_illegal.c gcc-16-20260208/gcc/testsuite/gcc.target/aarch64/builtin_pld_pli_illegal.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/aarch64/builtin_pld_pli_illegal.c	Sun Feb  1 22:32:12 2026
--- gcc-16-20260208/gcc/testsuite/gcc.target/aarch64/builtin_pld_pli_illegal.c	Thu Jan  1 00:00:00 1970
***************
*** 1,33 ****
- /* Check that PRFM-related bounds checks are applied correctly.  */
- /* { dg-do compile } */
- #include <arm_acle.h>
- 
- /* Access kind specifiers.  */
- #define KIND_LOW -1
- #define KIND_HIGH 2
- /* Cache levels.  */
- #define LEVEL_LOW  -1
- #define LEVEL_HIGH  4
- /* Retention policies.  */
- #define POLICY_LOW -1
- #define POLICY_HIGH 2
- 
- void
- data_rw_prefetch_bad_bounds (void *a)
- {
-   __builtin_aarch64_pldx (KIND_LOW, 0, 0, a);  /* { dg-error {argument 1 must be a constant immediate in range \[0,1\]} } */
-   __builtin_aarch64_pldx (KIND_HIGH, 0, 0, a); /* { dg-error {argument 1 must be a constant immediate in range \[0,1\]} } */
-   __builtin_aarch64_pldx (0, LEVEL_LOW, 0, a);  /* { dg-error {argument 2 must be a constant immediate in range \[0,3\]} } */
-   __builtin_aarch64_pldx (0, LEVEL_HIGH, 0, a); /* { dg-error {argument 2 must be a constant immediate in range \[0,3\]} } */
-   __builtin_aarch64_pldx (0, 0, POLICY_LOW, a);  /* { dg-error {argument 3 must be a constant immediate in range \[0,1\]} } */
-   __builtin_aarch64_pldx (0, 0, POLICY_HIGH, a); /* { dg-error {argument 3 must be a constant immediate in range \[0,1\]} } */
- }
- 
- void
- insn_prefetch_bad_bounds (void *a)
- {
-   __builtin_aarch64_plix (LEVEL_LOW, 0, a);  /* { dg-error {argument 1 must be a constant immediate in range \[0,3\]} } */
-   __builtin_aarch64_plix (LEVEL_HIGH, 0, a); /* { dg-error {argument 1 must be a constant immediate in range \[0,3\]} } */
-   __builtin_aarch64_plix (0, POLICY_LOW, a);  /* { dg-error {argument 2 must be a constant immediate in range \[0,1\]} } */
-   __builtin_aarch64_plix (0, POLICY_HIGH, a); /* { dg-error {argument 2 must be a constant immediate in range \[0,1\]} } */
- }
--- 0 ----
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/aarch64/pldir.c gcc-16-20260208/gcc/testsuite/gcc.target/aarch64/pldir.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/aarch64/pldir.c	Sun Feb  1 22:32:12 2026
--- gcc-16-20260208/gcc/testsuite/gcc.target/aarch64/pldir.c	Thu Jan  1 00:00:00 1970
***************
*** 1,12 ****
- /* { dg-do compile } */
- /* { dg-options "-march=armv8-a -O2" } */
- 
- #include <arm_acle.h>
- 
- void
- prefetch_intent_to_read (void *addr)
- {
-   __pldir (addr);
- }
- 
- /* { dg-final { scan-assembler "prfm\tir, \[x\[0-9\]+\]" } } */
\ No newline at end of file
--- 0 ----
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/aarch64/pr121290_3.c gcc-16-20260208/gcc/testsuite/gcc.target/aarch64/pr121290_3.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/aarch64/pr121290_3.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gcc.target/aarch64/pr121290_3.c	Sun Feb  8 22:32:11 2026
***************
*** 0 ****
--- 1,25 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-O3 -mcpu=neoverse-v2 -fdump-tree-vect-all -std=c99" } */
+ 
+ #define iterations 100000
+ #define LEN_1D 32000
+ 
+ float a[LEN_1D];
+ float b[LEN_1D];
+ 
+ int main()
+ {    
+     float dot;
+     for (int nl = 0; nl < iterations*5; nl++) {
+         dot = 0.0f;
+         for (int i = 0; i < LEN_1D; i++) {
+             dot += a[i] * b[i];
+         }
+     }
+     
+     return dot;
+ }
+ 
+ /* { dg-final { scan-tree-dump "LOOP VECTORIZED" "vect" } } */
+ /* { dg-final { scan-tree-dump-not "OUTER LOOP VECTORIZED" "vect" } } */
+ /* { dg-final { scan-tree-dump "low throughput of per iteration due to splats" "vect" } } */
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/aarch64/pr123294-1.c gcc-16-20260208/gcc/testsuite/gcc.target/aarch64/pr123294-1.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/aarch64/pr123294-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gcc.target/aarch64/pr123294-1.c	Sun Feb  8 22:32:11 2026
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O1" } */
+ /* PR rtl-optimization/123294 */
+ 
+ #include <arm_neon.h>
+ 
+ typedef unsigned a;
+ int b;
+ a d() {
+   __attribute__((__vector_size__(4 * sizeof(a)))) a e[5];
+   if (0 > b) {
+     __attribute__((__vector_size__(8 * sizeof(a)))) a f = {b, b};
+     e[0] = __builtin_shufflevector(f, f, 0, 1, 2, 3);
+   }
+   while (vqadd_u64((uint64x1_t){3}, (uint64x1_t){0})[0])
+     ;
+   return e[0][3];
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/aarch64/pr123548.c gcc-16-20260208/gcc/testsuite/gcc.target/aarch64/pr123548.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/aarch64/pr123548.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gcc.target/aarch64/pr123548.c	Sun Feb  8 22:32:11 2026
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O0" } */
+ /* { dg-final { check-function-bodies "**" "" "" } } */
+ 
+ #include <arm_acle.h>
+ 
+ void
+ test (void *a)
+ {
+   __pldx (1, 1, 1, a);
+ }
+ /*
+ ** test:
+ **...
+ **	prfm\tPSTL2STRM, \[x[0-9]+\]
+ **...
+ **	ret
+ */
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/aarch64/simd/pr117048.c gcc-16-20260208/gcc/testsuite/gcc.target/aarch64/simd/pr117048.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/aarch64/simd/pr117048.c	Sun Feb  1 22:32:12 2026
--- gcc-16-20260208/gcc/testsuite/gcc.target/aarch64/simd/pr117048.c	Sun Feb  8 22:32:11 2026
***************
*** 8,14 ****
  
  /*
  ** func_shl_eor:
! **	xar	v0\.2d, v([0-9]+)\.2d, v([0-9]+)\.2d, 63
  **	ret 
  */
  uint64x2_t
--- 8,14 ----
  
  /*
  ** func_shl_eor:
! **	xar	v0\.2d, v([0-9]+)\.2d, v([0-9]+)\.2d, #63
  **	ret 
  */
  uint64x2_t
*************** func_shl_eor (uint64x2_t a, uint64x2_t b
*** 19,25 ****
  
  /*
  ** func_add_eor:
! **	xar	v0\.2d, v([0-9]+)\.2d, v([0-9]+)\.2d, 63
  **	ret 
  */
  uint64x2_t
--- 19,25 ----
  
  /*
  ** func_add_eor:
! **	xar	v0\.2d, v([0-9]+)\.2d, v([0-9]+)\.2d, #63
  **	ret 
  */
  uint64x2_t
*************** func_add_eor (uint64x2_t a, uint64x2_t b
*** 30,36 ****
  
  /*
  ** func_shl_orr:
! **	xar	v0\.2d, v([0-9]+)\.2d, v([0-9]+)\.2d, 63
  **	ret 
  */
  uint64x2_t
--- 30,36 ----
  
  /*
  ** func_shl_orr:
! **	xar	v0\.2d, v([0-9]+)\.2d, v([0-9]+)\.2d, #63
  **	ret 
  */
  uint64x2_t
*************** func_shl_orr (uint64x2_t a, uint64x2_t b
*** 41,47 ****
  
  /*
  ** func_add_orr:
! **	xar	v0\.2d, v([0-9]+)\.2d, v([0-9]+)\.2d, 63
  **	ret 
  */
  uint64x2_t
--- 41,47 ----
  
  /*
  ** func_add_orr:
! **	xar	v0\.2d, v([0-9]+)\.2d, v([0-9]+)\.2d, #63
  **	ret 
  */
  uint64x2_t
*************** func_add_orr (uint64x2_t a, uint64x2_t b
*** 52,58 ****
  
  /*
  ** func_shl_add:
! **	xar	v0\.2d, v([0-9]+)\.2d, v([0-9]+)\.2d, 63
  **	ret 
  */
  uint64x2_t
--- 52,58 ----
  
  /*
  ** func_shl_add:
! **	xar	v0\.2d, v([0-9]+)\.2d, v([0-9]+)\.2d, #63
  **	ret 
  */
  uint64x2_t
*************** func_shl_add (uint64x2_t a, uint64x2_t b
*** 63,69 ****
  
  /*
  ** func_add_add:
! **	xar	v0\.2d, v([0-9]+)\.2d, v([0-9]+)\.2d, 63
  **	ret 
  */
  uint64x2_t
--- 63,69 ----
  
  /*
  ** func_add_add:
! **	xar	v0\.2d, v([0-9]+)\.2d, v([0-9]+)\.2d, #63
  **	ret 
  */
  uint64x2_t
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/aarch64/sve/pr122103_1.c gcc-16-20260208/gcc/testsuite/gcc.target/aarch64/sve/pr122103_1.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/aarch64/sve/pr122103_1.c	Sun Feb  1 22:32:12 2026
--- gcc-16-20260208/gcc/testsuite/gcc.target/aarch64/sve/pr122103_1.c	Sun Feb  8 22:32:11 2026
***************
*** 1,4 ****
! /* { dg-do run }  */
  /* { dg-require-effective-target glibc }  */
  /* { dg-options "-O3 -fno-math-errno -ftrapping-math -march=armv8-a+sve" }  */
  
--- 1,4 ----
! /* { dg-do run { target aarch64_sve_hw } }  */
  /* { dg-require-effective-target glibc }  */
  /* { dg-options "-O3 -fno-math-errno -ftrapping-math -march=armv8-a+sve" }  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/aarch64/sve/pr123897.c gcc-16-20260208/gcc/testsuite/gcc.target/aarch64/sve/pr123897.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/aarch64/sve/pr123897.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gcc.target/aarch64/sve/pr123897.c	Sun Feb  8 22:32:11 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-O2 -march=armv9-a -msve-vector-bits=256 -fdump-tree-widening_mul" } */
+ 
+ typedef __attribute__((__vector_size__(sizeof(int)*8))) signed int v8i;
+ typedef __attribute__((__vector_size__(sizeof(int)*8))) unsigned int v8u;
+ void f(v8i *a,v8i *b,v8u *c)
+ {
+   *c = (v8u)(*a * *b) - *c;
+ }
+ 
+ void g(v8i *a,v8i *b,v8u *c)
+ {
+   *c = *c - (v8u)(*a * *b);
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "\.FMA" 2 "widening_mul" } } */
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/aarch64/sve/pr123898.c gcc-16-20260208/gcc/testsuite/gcc.target/aarch64/sve/pr123898.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/aarch64/sve/pr123898.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gcc.target/aarch64/sve/pr123898.c	Sun Feb  8 22:32:11 2026
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-O2 --param avoid-fma-max-bits=512 -march=armv9-a -msve-vector-bits=256 -fdump-tree-widening_mul" } */
+ 
+ typedef __attribute__((__vector_size__(32))) char A;
+ typedef __attribute__((__vector_size__(32))) signed char D;
+ 
+ A c;
+ char x;
+ 
+ void
+ foo(D d)
+ {
+   d *= x;
+   c += (A)d;
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "\.FMA" 1 "widening_mul" } } */
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/aarch64/sve2/pr123775.c gcc-16-20260208/gcc/testsuite/gcc.target/aarch64/sve2/pr123775.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/aarch64/sve2/pr123775.c	Sun Feb  1 22:32:12 2026
--- gcc-16-20260208/gcc/testsuite/gcc.target/aarch64/sve2/pr123775.c	Sun Feb  8 22:32:11 2026
***************
*** 1,4 ****
! /* { dg-do run } */
  /* { dg-additional-options "-O3 -march=armv9-a+sve2 -msve-vector-bits=128 --param aarch64-autovec-preference=sve-only" } */
  
  int main(int argc, char *argv[]) {
--- 1,4 ----
! /* { dg-do run { target { aarch64_sve128_hw && aarch64_sve2_hw } } } */
  /* { dg-additional-options "-O3 -march=armv9-a+sve2 -msve-vector-bits=128 --param aarch64-autovec-preference=sve-only" } */
  
  int main(int argc, char *argv[]) {
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/i386/pr109362.c gcc-16-20260208/gcc/testsuite/gcc.target/i386/pr109362.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/i386/pr109362.c	Sun Feb  1 22:32:13 2026
--- gcc-16-20260208/gcc/testsuite/gcc.target/i386/pr109362.c	Sun Feb  8 22:32:12 2026
***************
*** 3,9 ****
  /* { dg-options "-O2 -masm=att" } */
  /* Ensure we don't waste a register set to %rdi + 8.  */
  /* { dg-final { scan-assembler "\tmovq\t\\\(%rdi\\\), %r" } } */
! /* { dg-final { scan-assembler "\tmovq\t8\\\(%rdi\\\), %r" } } */
  
  struct S { long a, b; };
  
--- 3,9 ----
  /* { dg-options "-O2 -masm=att" } */
  /* Ensure we don't waste a register set to %rdi + 8.  */
  /* { dg-final { scan-assembler "\tmovq\t\\\(%rdi\\\), %r" } } */
! /* { dg-final { scan-assembler "\tmovq\t8\\\(%rdi\\\), %r" { xfail *-*-* } } } */
  
  struct S { long a, b; };
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/i386/pr121726.c gcc-16-20260208/gcc/testsuite/gcc.target/i386/pr121726.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/i386/pr121726.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gcc.target/i386/pr121726.c	Sun Feb  8 22:32:12 2026
***************
*** 0 ****
--- 1,117 ----
+ /* { dg-do run { target { lp64 && avx2_runtime } } } */
+ /* { dg-options "-O3 -mavx2" } */
+ 
+ #include <stdint.h>
+ #include <string.h>
+ #include <immintrin.h>
+ 
+ #define SPX_N 16
+ 
+ typedef struct {
+     uint8_t pub_seed[SPX_N];
+ } spx_ctx;
+ 
+ typedef float __m256_u __attribute__ ((__vector_size__ (32), __may_alias__, __aligned__ (1)));
+ typedef double __m256d_u __attribute__ ((__vector_size__ (32), __may_alias__, __aligned__ (1)));
+ typedef long long __m256i_u __attribute__ ((__vector_size__ (32), __may_alias__, __aligned__ (1)));
+ 
+ __attribute__((noinline))
+ void Keccak(__m256i *states) { }
+ 
+ __attribute__((noipa))
+ void capture(uint8_t *v) { }
+ 
+ static void thashx4(uint64_t *out0,
+              uint64_t *out1,
+              uint64_t *out2,
+              uint64_t *out3,
+              unsigned int inblocks,
+              const uint64_t* pub_seed) {
+     if (inblocks == 1 || inblocks == 2) {
+         __m256i state[25];
+         for (int i = 0; i < 25; i++) {
+             state[i] = _mm256_set1_epi64x(0);
+         }
+         for (int i = 0; i < 2; i++) {
+             state[i] = _mm256_set1_epi64x(pub_seed[i]);
+         }
+ 
+         /* Domain separator and padding. */
+         for (size_t i = 4 * inblocks + 4; i < 16; i++) {
+             state[i] = _mm256_set1_epi64x(0);
+         }
+ 
+         Keccak(&state[0]);
+ 
+         for (int i = 0; i < SPX_N / 8; i++) {
+             out0[i] = _mm256_extract_epi64(state[i], 0);
+             out1[i] = _mm256_extract_epi64(state[i], 1);
+             out2[i] = _mm256_extract_epi64(state[i], 2);
+             out3[i] = _mm256_extract_epi64(state[i], 3);
+         }
+     } else {
+         unsigned char buf0[inblocks * SPX_N];
+         unsigned char buf1[inblocks * SPX_N];
+         unsigned char buf2[inblocks * SPX_N];
+ 
+         memcpy(buf0, pub_seed, SPX_N);
+         memcpy(buf1, pub_seed, SPX_N);
+         memcpy(buf2, pub_seed, SPX_N);
+ 
+         capture(buf0);
+         capture(buf1);
+         capture(buf2);
+     }
+ }
+ 
+ static
+ void wots_gen_leafx4(const spx_ctx *ctx) {
+ 	uint64_t dest[4];
+ 
+ 	thashx4(dest, dest, dest, dest, 1, (const uint64_t *) ctx->pub_seed);
+ 	thashx4(dest, dest, dest, dest, 3, (const uint64_t *) ctx->pub_seed);
+ }
+ 
+ void treehashx4_v2(const spx_ctx *ctx,
+                 void (*gen_leafx4)( const spx_ctx *),
+                 uint32_t* tree_addrx4
+                 ) {
+     for (int i = 0; i < 2; i++) {
+         gen_leafx4( ctx );
+     }
+ }
+ 
+ __attribute__((noipa))
+ void crypto_sign_signature(uint64_t *sg, uint8_t enable, const uint8_t *sk)
+ {
+   spx_ctx ctx;
+ 
+   memcpy(ctx.pub_seed, sk, SPX_N);
+ 
+   const uint64_t* ptr = (const uint64_t *)&ctx.pub_seed[0];
+   thashx4(sg, sg, sg, sg, 1, ptr);
+ 
+   if (!enable)
+     return;
+ 
+   uint32_t tree_addrx4[32] = { 0 };
+ 
+   treehashx4_v2(&ctx, wots_gen_leafx4, tree_addrx4);
+ }
+ 
+ #define length_secret_key 64
+ #define length_signature 64
+ 
+ int main() {
+   uint8_t secret_key[length_secret_key];
+   uint64_t signature[length_signature];
+   memset(secret_key, 0, length_secret_key);
+   memset(signature, 0, length_signature * sizeof(uint64_t));
+ 
+   crypto_sign_signature(signature, 0, secret_key);
+   
+   for (int i = 0; i < length_signature; ++i)
+     if (signature[i] != 0)
+       __builtin_abort ();
+   return 0;
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/i386/pr123958.c gcc-16-20260208/gcc/testsuite/gcc.target/i386/pr123958.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/i386/pr123958.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gcc.target/i386/pr123958.c	Sun Feb  8 22:32:12 2026
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -march=znver3" } */
+ 
+ float fnk00xX_rae1_1;
+ double pow(double, double);
+ double sqrt(double);
+ void write_r4(float *);
+ void fnk00xX() {
+   int i;
+   float rs2;
+   double ds2;
+   for (; i; i += 1) {
+     sqrt(i);
+     ds2 = ds2 + pow(fnk00xX_rae1_1, 2.0);
+     rs2 = ds2;
+   }
+   write_r4(&rs2);
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/i386/pr63542-2.c gcc-16-20260208/gcc/testsuite/gcc.target/i386/pr63542-2.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/i386/pr63542-2.c	Sun Feb  1 22:32:13 2026
--- gcc-16-20260208/gcc/testsuite/gcc.target/i386/pr63542-2.c	Sun Feb  8 22:32:12 2026
***************
*** 3,9 ****
  /* { dg-options "-O2 -g -dA" } */
  /* { dg-additional-options "-fpic" { target fpic } } */
  
! struct B { unsigned long c; unsigned char *d; };
  extern struct A { struct B *e[0x400]; } *f[128];
  extern void (*bar) (char *p, char *q);
  
--- 3,9 ----
  /* { dg-options "-O2 -g -dA" } */
  /* { dg-additional-options "-fpic" { target fpic } } */
  
! struct B { __UINTPTR_TYPE__ c; unsigned char *d; };
  extern struct A { struct B *e[0x400]; } *f[128];
  extern void (*bar) (char *p, char *q);
  
*************** foo (char *p, char *q)
*** 12,30 ****
  {
    struct B *g;
    char *b, *l;
!   unsigned long s;
  
!   g = f[((unsigned long) p) >> 22]->e[(((unsigned long) p) >> 12) & 0x3ff];
    s = g->c << 2;
!   int r = ((unsigned long) p) & 0xfff;
    int m = g->d[r];
    if (m > 0xfd)
      {
        m = (r >> 2) % (s >> 2);
!       if ((((unsigned long) p) & ~(unsigned long) 0xfff) != (((unsigned long) q) & ~(unsigned long) 0xfff))
  	goto fail;
      }
!   b = (char *) ((unsigned long) p & ~(unsigned long) 3);
    b -= m << 2;
    l = b + s;
  
--- 12,30 ----
  {
    struct B *g;
    char *b, *l;
!   __UINTPTR_TYPE__ s;
  
!   g = f[((__UINTPTR_TYPE__) p) >> 22]->e[(((__UINTPTR_TYPE__) p) >> 12) & 0x3ff];
    s = g->c << 2;
!   int r = ((__UINTPTR_TYPE__) p) & 0xfff;
    int m = g->d[r];
    if (m > 0xfd)
      {
        m = (r >> 2) % (s >> 2);
!       if ((((__UINTPTR_TYPE__) p) & ~(__UINTPTR_TYPE__) 0xfff) != (((__UINTPTR_TYPE__) q) & ~(__UINTPTR_TYPE__) 0xfff))
  	goto fail;
      }
!   b = (char *) ((__UINTPTR_TYPE__) p & ~(__UINTPTR_TYPE__) 3);
    b -= m << 2;
    l = b + s;
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/mips/pr118608-1.c gcc-16-20260208/gcc/testsuite/gcc.target/mips/pr118608-1.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/mips/pr118608-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gcc.target/mips/pr118608-1.c	Sun Feb  8 22:32:12 2026
***************
*** 0 ****
--- 1,45 ----
+ /* { dg-do run } */
+ /* { dg-options "-mabi=64 -O2" } */
+ 
+ #define COUNT 10
+ 
+ typedef unsigned short u16;
+ typedef unsigned int   u32;
+ 
+ typedef struct NeedleAddress
+ {
+   u16   nId;
+   u16   mId;
+ } NeedleAddress;
+ 
+ u32 __attribute__ ((noinline)) prepareNeedle(const u16 upper, const u16 lower)
+ {
+     u32 needleAddress = 0;
+     NeedleAddress *const addr = (NeedleAddress*)(&needleAddress);
+     addr->mId = upper;
+     addr->nId = lower;
+     return needleAddress;
+ }
+ 
+ const u32* __attribute__ ((noinline)) findNeedle(const u32 needle, const u32* begin, const u32* end)
+ {
+     while ( begin != end && needle != *begin )
+     {
+         ++begin;
+     }
+     return begin;
+ }
+ 
+ int main()
+ {
+     u32 needle = prepareNeedle(0xDCBA, 0xABCD);
+ 
+     u32 haystack[COUNT] = {};
+     for (int i = 0; i < COUNT; i++)
+         haystack[i] = needle;
+ 
+     const u32* result = findNeedle(needle, haystack, haystack + COUNT);
+     if (result == haystack + COUNT)
+         __builtin_abort ();
+     return 0;
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/mips/pr118608-2.c gcc-16-20260208/gcc/testsuite/gcc.target/mips/pr118608-2.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/mips/pr118608-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gcc.target/mips/pr118608-2.c	Sun Feb  8 22:32:12 2026
***************
*** 0 ****
--- 1,45 ----
+ /* { dg-do run } */
+ /* { dg-options "-mabi=64 -Os" } */
+ 
+ #define COUNT 10
+ 
+ typedef unsigned short u16;
+ typedef unsigned int   u32;
+ 
+ typedef struct NeedleAddress
+ {
+   u16   nId;
+   u16   mId;
+ } NeedleAddress;
+ 
+ u32 __attribute__ ((noinline)) prepareNeedle(const u16 upper, const u16 lower)
+ {
+     u32 needleAddress = 0;
+     NeedleAddress *const addr = (NeedleAddress*)(&needleAddress);
+     addr->mId = upper;
+     addr->nId = lower;
+     return needleAddress;
+ }
+ 
+ const u32* __attribute__ ((noinline)) findNeedle(const u32 needle, const u32* begin, const u32* end)
+ {
+     while ( begin != end && needle != *begin )
+     {
+         ++begin;
+     }
+     return begin;
+ }
+ 
+ int main()
+ {
+     u32 needle = prepareNeedle(0xDCBA, 0xABCD);
+ 
+     u32 haystack[COUNT] = {};
+     for (int i = 0; i < COUNT; i++)
+         haystack[i] = needle;
+ 
+     const u32* result = findNeedle(needle, haystack, haystack + COUNT);
+     if (result == haystack + COUNT)
+         __builtin_abort ();
+     return 0;
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/mips/pr118608-3.c gcc-16-20260208/gcc/testsuite/gcc.target/mips/pr118608-3.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/mips/pr118608-3.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gcc.target/mips/pr118608-3.c	Sun Feb  8 22:32:12 2026
***************
*** 0 ****
--- 1,45 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mabi=64 -O2 -march=octeon2" } */
+ 
+ #define COUNT 10
+ 
+ typedef unsigned short u16;
+ typedef unsigned int   u32;
+ 
+ typedef struct NeedleAddress
+ {
+   u16   nId;
+   u16   mId;
+ } NeedleAddress;
+ 
+ u32 __attribute__ ((noinline)) prepareNeedle(const u16 upper, const u16 lower)
+ {
+     u32 needleAddress = 0;
+     NeedleAddress *const addr = (NeedleAddress*)(&needleAddress);
+     addr->mId = upper;
+     addr->nId = lower;
+     return needleAddress;
+ }
+ 
+ const u32* __attribute__ ((noinline)) findNeedle(const u32 needle, const u32* begin, const u32* end)
+ {
+     while ( begin != end && needle != *begin )
+     {
+         ++begin;
+     }
+     return begin;
+ }
+ 
+ int main()
+ {
+     u32 needle = prepareNeedle(0xDCBA, 0xABCD);
+ 
+     u32 haystack[COUNT] = {};
+     for (int i = 0; i < COUNT; i++)
+         haystack[i] = needle;
+ 
+     const u32* result = findNeedle(needle, haystack, haystack + COUNT);
+     if (result == haystack + COUNT)
+         __builtin_abort ();
+     return 0;
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/mips/pr118608-4.c gcc-16-20260208/gcc/testsuite/gcc.target/mips/pr118608-4.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/mips/pr118608-4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gcc.target/mips/pr118608-4.c	Sun Feb  8 22:32:12 2026
***************
*** 0 ****
--- 1,45 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mabi=64 -Os -march=octeon2" } */
+ 
+ #define COUNT 10
+ 
+ typedef unsigned short u16;
+ typedef unsigned int   u32;
+ 
+ typedef struct NeedleAddress
+ {
+   u16   nId;
+   u16   mId;
+ } NeedleAddress;
+ 
+ u32 __attribute__ ((noinline)) prepareNeedle(const u16 upper, const u16 lower)
+ {
+     u32 needleAddress = 0;
+     NeedleAddress *const addr = (NeedleAddress*)(&needleAddress);
+     addr->mId = upper;
+     addr->nId = lower;
+     return needleAddress;
+ }
+ 
+ const u32* __attribute__ ((noinline)) findNeedle(const u32 needle, const u32* begin, const u32* end)
+ {
+     while ( begin != end && needle != *begin )
+     {
+         ++begin;
+     }
+     return begin;
+ }
+ 
+ int main()
+ {
+     u32 needle = prepareNeedle(0xDCBA, 0xABCD);
+ 
+     u32 haystack[COUNT] = {};
+     for (int i = 0; i < COUNT; i++)
+         haystack[i] = needle;
+ 
+     const u32* result = findNeedle(needle, haystack, haystack + COUNT);
+     if (result == haystack + COUNT)
+         __builtin_abort ();
+     return 0;
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/mips/pr123833.c gcc-16-20260208/gcc/testsuite/gcc.target/mips/pr123833.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/mips/pr123833.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gcc.target/mips/pr123833.c	Sun Feb  8 22:32:12 2026
***************
*** 0 ****
--- 1,26 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O1 -mabi=64 -mhard-float" } */
+ 
+ typedef short int16_t;
+ typedef signed char int8_t;
+ typedef long long int64_t;
+ typedef unsigned char uint8_t;
+ typedef unsigned long long uint64_t;
+ 
+ #define BS_VEC(type, num) type __attribute__((vector_size(num * sizeof(type))))
+ BS_VEC(int8_t, 2) backsmith_pure_0(int64_t);
+ uint64_t backsmith_pure_4(int16_t BS_ARG_0)
+ {
+     BS_VEC(int16_t, 16)
+     BS_VAR_0 = __builtin_convertvector(
+         __builtin_shufflevector(backsmith_pure_0(0), backsmith_pure_0(0), 0, 2,
+                                 2, 3, 2, 1, 2, 3, 0, 2, 0, 0, 2, 2, 0, 1),
+         BS_VEC(int16_t, 16));
+     for (;;)
+     {
+         if (__builtin_ctzg((uint8_t)BS_VAR_0[3], BS_ARG_0))
+             for (;;);
+         return 0;
+     }
+ }
+ 
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/nvptx/alloca-5.c gcc-16-20260208/gcc/testsuite/gcc.target/nvptx/alloca-5.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/nvptx/alloca-5.c	Sun Feb  1 22:32:13 2026
--- gcc-16-20260208/gcc/testsuite/gcc.target/nvptx/alloca-5.c	Sun Feb  8 22:32:12 2026
*************** static __attribute__((noipa)) int f(int
*** 18,29 ****
  ** 	\.reg\.u32 %value;
  ** 	\.reg\.u64 %ar0;
  ** 	ld\.param\.u64 %ar0, \[%in_ar0\];
- ** 	\.reg\.u32 (%r[0-9]+);
  ** 	\.reg\.u64 (%r[0-9]+);
! ** 		mov\.u64	\2, %ar0;
! ** 		atom\.exch\.b32	\1, \[\2\], 1;
  ** 		membar\.sys;
- ** 		mov\.u32	%value, \1;
  ** 	st\.param\.u32	\[%value_out\], %value;
  ** 	ret;
  */
--- 18,27 ----
  ** 	\.reg\.u32 %value;
  ** 	\.reg\.u64 %ar0;
  ** 	ld\.param\.u64 %ar0, \[%in_ar0\];
  ** 	\.reg\.u64 (%r[0-9]+);
! ** 		mov\.u64	\1, %ar0;
! ** 		atom\.exch\.b32	%value, \[\1\], 1;
  ** 		membar\.sys;
  ** 	st\.param\.u32	\[%value_out\], %value;
  ** 	ret;
  */
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/powerpc/asm-hard-reg-2.c gcc-16-20260208/gcc/testsuite/gcc.target/powerpc/asm-hard-reg-2.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/powerpc/asm-hard-reg-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gcc.target/powerpc/asm-hard-reg-2.c	Sun Feb  8 22:32:12 2026
***************
*** 0 ****
--- 1,9 ----
+ /* { dg-do compile } */
+ 
+ double a;
+ double b (long double c) {
+   long double d = 0;
+   double e;
+   __asm__ ("" : "=f" (a), "={fr2}" (e) : "{fr1}" (d));
+   return c + c;
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/riscv/pr123322.c gcc-16-20260208/gcc/testsuite/gcc.target/riscv/pr123322.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/riscv/pr123322.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gcc.target/riscv/pr123322.c	Sun Feb  8 22:32:12 2026
***************
*** 0 ****
--- 1,23 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv32gcb_zicond -mabi=ilp32 -mbranch-cost=4" { target { rv32 } } } */
+ /* { dg-options "-march=rv64gcb_zicond -mabi=lp64d -mbranch-cost=4" { target { rv64 } } } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" "-Og" "-O1" "-Os" "-Oz" } } */
+ 
+ #define TEST(NAME,OP) int f_int_##NAME(int a, int b, int c) { if (c) a OP b; return a; } \
+                       long f_long_##NAME(long a, long b, long c) { if (c) a OP b; return a; }
+ 
+ TEST(xor, ^=)
+ TEST(ior, |=)
+ TEST(and, &=)
+ TEST(plus, +=)
+ TEST(minus, -=)
+ TEST(rshift, >>=)
+ TEST(lshift, <<=)
+ 
+ /* AND and MULT can be handled too, but need a different neutral element that
+    we aren't handling yet.  */
+ 
+ /* Each test should have precisely one czero.  But for rv64, the int tests
+    generate 2 for int cases where the op is widened.  */
+ /* { dg-final { scan-assembler-times "czero" 14 { target rv32 } } } */
+ /* { dg-final { scan-assembler-times "czero" 18 { target rv64 } } } */
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123910.c gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123910.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123910.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123910.c	Sun Feb  8 22:32:12 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mcpu=xt-c920 -mrvv-vector-bits=zvl" } */
+ 
+ int i;
+ void *p;
+ 
+ void
+ foo ()
+ {
+   __builtin_memset (p, i, 8);
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123916.c gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123916.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123916.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123916.c	Sun Feb  8 22:32:12 2026
***************
*** 0 ****
--- 1,48 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=0 --param=vr2gpr-cost=0 -fdump-tree-optimized" } */
+ 
+ #include <stdint.h>
+ 
+ #define T int32_t
+ #define UT uint32_t
+ 
+ T
+ test_sat_add (T x, T y)
+ {
+   T sum = (UT)x + (UT)y;
+   return (x ^ y) < 0
+     ? sum
+     : (sum ^ x) >= 0
+       ? sum
+       : x < 0 ? INT32_MIN : INT32_MAX;
+ }
+ 
+ void
+ test_vx_binary_sat_add (T * restrict out, T * restrict in, T x, unsigned n)
+ {
+   unsigned k = 0;
+   T tmp = x + 3;
+ 
+   while (k < n)
+     {
+       tmp = tmp ^ 0x82;
+       out[k + 0] = test_sat_add (in[k + 0], tmp);
+       out[k + 1] = test_sat_add (in[k + 1], tmp);
+       k += 2;
+ 
+       out[k + 0] = test_sat_add (in[k + 0], tmp);
+       out[k + 1] = test_sat_add (in[k + 1], tmp);
+       k += 2;
+ 
+       out[k + 0] = test_sat_add (in[k + 0], tmp);
+       out[k + 1] = test_sat_add (in[k + 1], tmp);
+       k += 2;
+ 
+       out[k + 0] = test_sat_add (in[k + 0], tmp);
+       out[k + 1] = test_sat_add (in[k + 1], tmp);
+       k += 2;
+     }
+ }
+ 
+ /* { dg-final { scan-assembler {vsadd.vx} } } */
+ /* { dg-final { scan-tree-dump ".SAT_ADD " "optimized" } } */
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123925.c gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123925.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123925.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123925.c	Sun Feb  8 22:32:12 2026
***************
*** 0 ****
--- 1,28 ----
+ /* { dg-do run } */
+ /* { dg-require-effective-target riscv_v_ok } */
+ /* { dg-add-options riscv_v } */
+ /* { dg-additional-options "-std=gnu99" } */
+ 
+ typedef __attribute__((__vector_size__ (8))) unsigned char U;
+ typedef __attribute__((__vector_size__ (8))) signed long V;
+ 
+ signed char s;
+ V v;
+ 
+ void
+ __attribute__ ((noipa))
+ foo (U u, V *r)
+ {
+   __builtin_memmove (&s, &u, 1);
+   v += s;
+   *r = v;
+ }
+ 
+ int
+ main ()
+ {
+   V x;
+   foo ((U) {248}, &x);
+   if (x[0] != -8)
+     __builtin_abort();
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123940.c gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123940.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123940.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123940.c	Sun Feb  8 22:32:12 2026
***************
*** 0 ****
--- 1,25 ----
+ /* { dg-do run } */
+ /* { dg-options "-O3 -march=rv64gcv -mabi=lp64d -std=gnu99 -fdump-tree-widening_mul" } */
+ 
+ long a;
+ long long b;
+ _Bool c[16];
+ char d[16];
+ char e = 0;
+ int f = 1;
+ 
+ int main ()
+ {
+   for (long i = 0; i < 16; ++i)
+     c[i] = 40;
+   for (int j = 0; j < 16; j++)
+     {
+       e = (c[j] ? j : d[j]) + d[j];
+       a = f * c[j] ?: ~0;
+     }
+   b = (int) e;
+   if (b != 15)
+     __builtin_abort ();
+ }
+ 
+ /* { dg-final { scan-tree-dump-not "FMA" "widening_mul" } } */
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/J gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/J
*** gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/J	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/J	Thu Jan  1 00:00:00 1970
***************
*** 1,58 ****
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800  1) /* { dg-do compile } */
- cd1ce3b326d4 (demin.han    2024-03-13 18:43:26 +0800  2) /* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800  3) 
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800  4) #include "def.h"
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800  5) 
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800  6) DEF_OP_V (nearbyintf16, 1, _Float16, __builtin_nearbyintf16)
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800  7) DEF_OP_V (nearbyintf16, 2, _Float16, __builtin_nearbyintf16)
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800  8) DEF_OP_V (nearbyintf16, 4, _Float16, __builtin_nearbyintf16)
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800  9) DEF_OP_V (nearbyintf16, 8, _Float16, __builtin_nearbyintf16)
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800 10) DEF_OP_V (nearbyintf16, 16, _Float16, __builtin_nearbyintf16)
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800 11) DEF_OP_V (nearbyintf16, 32, _Float16, __builtin_nearbyintf16)
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800 12) DEF_OP_V (nearbyintf16, 64, _Float16, __builtin_nearbyintf16)
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800 13) DEF_OP_V (nearbyintf16, 128, _Float16, __builtin_nearbyintf16)
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800 14) DEF_OP_V (nearbyintf16, 256, _Float16, __builtin_nearbyintf16)
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800 15) DEF_OP_V (nearbyintf16, 512, _Float16, __builtin_nearbyintf16)
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800 16) DEF_OP_V (nearbyintf16, 1024, _Float16, __builtin_nearbyintf16)
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800 17) DEF_OP_V (nearbyintf16, 2048, _Float16, __builtin_nearbyintf16)
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800 18) 
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800 19) DEF_OP_V (nearbyintf, 1, float, __builtin_nearbyintf)
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800 20) DEF_OP_V (nearbyintf, 2, float, __builtin_nearbyintf)
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800 21) DEF_OP_V (nearbyintf, 4, float, __builtin_nearbyintf)
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800 22) DEF_OP_V (nearbyintf, 8, float, __builtin_nearbyintf)
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800 23) DEF_OP_V (nearbyintf, 16, float, __builtin_nearbyintf)
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800 24) DEF_OP_V (nearbyintf, 32, float, __builtin_nearbyintf)
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800 25) DEF_OP_V (nearbyintf, 64, float, __builtin_nearbyintf)
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800 26) DEF_OP_V (nearbyintf, 128, float, __builtin_nearbyintf)
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800 27) DEF_OP_V (nearbyintf, 256, float, __builtin_nearbyintf)
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800 28) DEF_OP_V (nearbyintf, 512, float, __builtin_nearbyintf)
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800 29) DEF_OP_V (nearbyintf, 1024, float, __builtin_nearbyintf)
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800 30) 
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800 31) DEF_OP_V (nearbyint, 1, double, __builtin_nearbyint)
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800 32) DEF_OP_V (nearbyint, 2, double, __builtin_nearbyint)
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800 33) DEF_OP_V (nearbyint, 4, double, __builtin_nearbyint)
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800 34) DEF_OP_V (nearbyint, 8, double, __builtin_nearbyint)
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800 35) DEF_OP_V (nearbyint, 16, double, __builtin_nearbyint)
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800 36) DEF_OP_V (nearbyint, 32, double, __builtin_nearbyint)
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800 37) DEF_OP_V (nearbyint, 64, double, __builtin_nearbyint)
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800 38) DEF_OP_V (nearbyint, 128, double, __builtin_nearbyint)
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800 39) DEF_OP_V (nearbyint, 256, double, __builtin_nearbyint)
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800 40) DEF_OP_V (nearbyint, 512, double, __builtin_nearbyint)
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800 41) 
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800 42) /* { dg-final { scan-assembler-not {csrr} } } */
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800 43) /* { dg-final { scan-tree-dump-not "1,1" "optimized" } } */
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800 44) /* { dg-final { scan-tree-dump-not "2,2" "optimized" } } */
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800 45) /* { dg-final { scan-tree-dump-not "4,4" "optimized" } } */
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800 46) /* { dg-final { scan-tree-dump-not "16,16" "optimized" } } */
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800 47) /* { dg-final { scan-tree-dump-not "32,32" "optimized" } } */
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800 48) /* { dg-final { scan-tree-dump-not "64,64" "optimized" } } */
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800 49) /* { dg-final { scan-tree-dump-not "128,128" "optimized" } } */
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800 50) /* { dg-final { scan-tree-dump-not "256,256" "optimized" } } */
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800 51) /* { dg-final { scan-tree-dump-not "512,512" "optimized" } } */
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800 52) /* { dg-final { scan-tree-dump-not "1024,1024" "optimized" } } */
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800 53) /* { dg-final { scan-tree-dump-not "2048,2048" "optimized" } } */
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800 54) /* { dg-final { scan-tree-dump-not "4096,4096" "optimized" } } */
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800 55) /* { dg-final { scan-assembler-times {vfcvt\.x\.f\.v\s+v[0-9]+,\s*v[0-9]+,\s*v0\.t} 30 } } */
- e2023d2d5ff2 (Pan Li       2023-09-25 10:04:36 +0800 56) /* { dg-final { scan-assembler-times {vfcvt\.f\.x\.v\s+v[0-9]+,\s*v[0-9]+,\s*v0\.t} 30 } } */
- f5696e9b1113 (Vineet Gupta 2025-08-13 20:20:34 -0700 57) /* { dg-final { scan-assembler-times {frflags\s+[atx][0-9]+} 32 } } */
- f5696e9b1113 (Vineet Gupta 2025-08-13 20:20:34 -0700 58) /* { dg-final { scan-assembler-times {fsflags\s+[atx][0-9]+} 32 } } */
--- 0 ----
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f16.c gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f16.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f16.c	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f16.c	Sun Feb  8 22:32:12 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvfh -mabi=lp64d --param=fpr2vr-cost=0" } */
  
  #include "vf_mulop.h"
  #include "vf_binop.h"
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvfh -mabi=lp64d --param=fpr2vr-cost=0 --param=vr2fpr-cost=0" } */
  
  #include "vf_mulop.h"
  #include "vf_binop.h"
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f32.c gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f32.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f32.c	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f32.c	Sun Feb  8 22:32:12 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64d --param=fpr2vr-cost=0" } */
  
  #include "vf_mulop.h"
  #include "vf_binop.h"
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64d --param=fpr2vr-cost=0 --param=vr2fpr-cost=0" } */
  
  #include "vf_mulop.h"
  #include "vf_binop.h"
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f64.c gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f64.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f64.c	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f64.c	Sun Feb  8 22:32:12 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64d --param=fpr2vr-cost=0" } */
  
  #include "vf_mulop.h"
  #include "vf_binop.h"
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64d --param=fpr2vr-cost=0 --param=vr2fpr-cost=0" } */
  
  #include "vf_mulop.h"
  #include "vf_binop.h"
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-7-f16.c gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-7-f16.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-7-f16.c	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-7-f16.c	Sun Feb  8 22:32:12 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvfh -mabi=lp64d -fno-fast-math --param=fpr2vr-cost=0" } */
  
  #include "vf_binop.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvfh -mabi=lp64d -fno-fast-math --param=fpr2vr-cost=0 --param=vr2fpr-cost=0" } */
  
  #include "vf_binop.h"
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-7-f32.c gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-7-f32.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-7-f32.c	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-7-f32.c	Sun Feb  8 22:32:12 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64d -fno-fast-math --param=fpr2vr-cost=0" } */
  
  #include "vf_binop.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64d -fno-fast-math --param=fpr2vr-cost=0 --param=vr2fpr-cost=0" } */
  
  #include "vf_binop.h"
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-7-f64.c gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-7-f64.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-7-f64.c	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-7-f64.c	Sun Feb  8 22:32:12 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64d -fno-fast-math --param=fpr2vr-cost=0" } */
  
  #include "vf_binop.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64d -fno-fast-math --param=fpr2vr-cost=0 --param=vr2fpr-cost=0" } */
  
  #include "vf_binop.h"
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-8-f16.c gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-8-f16.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-8-f16.c	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-8-f16.c	Sun Feb  8 22:32:12 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvfh -mabi=lp64d -fno-fast-math --param=fpr2vr-cost=4" } */
  
  #include "vf-7-f16.c"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvfh -mabi=lp64d -fno-fast-math --param=fpr2vr-cost=4 --param=vr2fpr-cost=4" } */
  
  #include "vf-7-f16.c"
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-8-f32.c gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-8-f32.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-8-f32.c	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-8-f32.c	Sun Feb  8 22:32:12 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64d -fno-fast-math --param=fpr2vr-cost=4" } */
  
  #include "vf-7-f32.c"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64d -fno-fast-math --param=fpr2vr-cost=4 --param=vr2fpr-cost=4" } */
  
  #include "vf-7-f32.c"
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-8-f64.c gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-8-f64.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-8-f64.c	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-8-f64.c	Sun Feb  8 22:32:12 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64d -fno-fast-math --param=fpr2vr-cost=4" } */
  
  #include "vf-7-f64.c"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv -mabi=lp64d -fno-fast-math --param=fpr2vr-cost=4 --param=vr2fpr-cost=4" } */
  
  #include "vf-7-f64.c"
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i16.c gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i16.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i16.c	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i16.c	Sun Feb  8 22:32:12 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=0" } */
  
  #include "vx_binary.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=0 --param=vr2gpr-cost=0" } */
  
  #include "vx_binary.h"
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i32.c gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i32.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i32.c	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i32.c	Sun Feb  8 22:32:12 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=0" } */
  
  #include "vx_binary.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=0 --param=vr2gpr-cost=0" } */
  
  #include "vx_binary.h"
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i64.c gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i64.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i64.c	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i64.c	Sun Feb  8 22:32:12 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=0" } */
  
  #include "vx_binary.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=0 --param=vr2gpr-cost=0" } */
  
  #include "vx_binary.h"
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i8.c gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i8.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i8.c	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i8.c	Sun Feb  8 22:32:12 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=0" } */
  
  #include "vx_binary.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=0 --param=vr2gpr-cost=0" } */
  
  #include "vx_binary.h"
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u16.c gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u16.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u16.c	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u16.c	Sun Feb  8 22:32:12 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=0" } */
  
  #include "vx_binary.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=0 --param=vr2gpr-cost=0" } */
  
  #include "vx_binary.h"
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u32.c gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u32.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u32.c	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u32.c	Sun Feb  8 22:32:12 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=0" } */
  
  #include "vx_binary.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=0 --param=vr2gpr-cost=0" } */
  
  #include "vx_binary.h"
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u64.c gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u64.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u64.c	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u64.c	Sun Feb  8 22:32:12 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=0" } */
  
  #include "vx_binary.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=0 --param=vr2gpr-cost=0" } */
  
  #include "vx_binary.h"
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u8.c gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u8.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u8.c	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u8.c	Sun Feb  8 22:32:12 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=0" } */
  
  #include "vx_binary.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=0 --param=vr2gpr-cost=0" } */
  
  #include "vx_binary.h"
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i16.c gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i16.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i16.c	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i16.c	Sun Feb  8 22:32:12 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=1" } */
  
  #include "vx_binary.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=1 --param=vr2gpr-cost=1" } */
  
  #include "vx_binary.h"
  
*************** DEF_VX_BINARY_CASE_3_WRAP(T, AVG_CEIL_FU
*** 34,41 ****
  /* { dg-final { scan-assembler {vrem.vx} } } */
  /* { dg-final { scan-assembler {vmax.vx} } } */
  /* { dg-final { scan-assembler {vmin.vx} } } */
! /* { dg-final { scan-assembler {vsadd.vx} } } */
! /* { dg-final { scan-assembler {vssub.vx} } } */
  /* { dg-final { scan-assembler {vaadd.vx} { target { any-opts {
       "-mrvv-vector-bits=zvl -mrvv-max-lmul=m1"
       "-mrvv-vector-bits=zvl -mrvv-max-lmul=m2"
--- 34,41 ----
  /* { dg-final { scan-assembler {vrem.vx} } } */
  /* { dg-final { scan-assembler {vmax.vx} } } */
  /* { dg-final { scan-assembler {vmin.vx} } } */
! /* { dg-final { scan-assembler-not {vsadd.vx} } } */
! /* { dg-final { scan-assembler-not {vssub.vx} } } */
  /* { dg-final { scan-assembler {vaadd.vx} { target { any-opts {
       "-mrvv-vector-bits=zvl -mrvv-max-lmul=m1"
       "-mrvv-vector-bits=zvl -mrvv-max-lmul=m2"
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i32.c gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i32.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i32.c	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i32.c	Sun Feb  8 22:32:12 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=1" } */
  
  #include "vx_binary.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=1 --param=vr2gpr-cost=1" } */
  
  #include "vx_binary.h"
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i64.c gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i64.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i64.c	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i64.c	Sun Feb  8 22:32:12 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=1" } */
  
  #include "vx_binary.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=1 --param=vr2gpr-cost=1" } */
  
  #include "vx_binary.h"
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i8.c gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i8.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i8.c	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i8.c	Sun Feb  8 22:32:12 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=1" } */
  
  #include "vx_binary.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=1 --param=vr2gpr-cost=1" } */
  
  #include "vx_binary.h"
  
*************** DEF_VX_BINARY_CASE_3_WRAP(T, AVG_CEIL_FU
*** 34,41 ****
  /* { dg-final { scan-assembler {vrem.vx} } } */
  /* { dg-final { scan-assembler {vmax.vx} } } */
  /* { dg-final { scan-assembler {vmin.vx} } } */
! /* { dg-final { scan-assembler {vsadd.vx} } } */
! /* { dg-final { scan-assembler {vssub.vx} } } */
  /* { dg-final { scan-assembler {vaadd.vx} { target { no-opts {
       "-mrvv-vector-bits=zvl -mrvv-max-lmul=m1"
       "-mrvv-vector-bits=zvl -mrvv-max-lmul=m2"
--- 34,41 ----
  /* { dg-final { scan-assembler {vrem.vx} } } */
  /* { dg-final { scan-assembler {vmax.vx} } } */
  /* { dg-final { scan-assembler {vmin.vx} } } */
! /* { dg-final { scan-assembler-not {vsadd.vx} } } */
! /* { dg-final { scan-assembler-not {vssub.vx} } } */
  /* { dg-final { scan-assembler {vaadd.vx} { target { no-opts {
       "-mrvv-vector-bits=zvl -mrvv-max-lmul=m1"
       "-mrvv-vector-bits=zvl -mrvv-max-lmul=m2"
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u16.c gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u16.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u16.c	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u16.c	Sun Feb  8 22:32:12 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=1" } */
  
  #include "vx_binary.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=1 --param=vr2gpr-cost=1" } */
  
  #include "vx_binary.h"
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u32.c gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u32.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u32.c	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u32.c	Sun Feb  8 22:32:12 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=1" } */
  
  #include "vx_binary.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=1 --param=vr2gpr-cost=1" } */
  
  #include "vx_binary.h"
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u64.c gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u64.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u64.c	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u64.c	Sun Feb  8 22:32:12 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=1" } */
  
  #include "vx_binary.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=1 --param=vr2gpr-cost=1" } */
  
  #include "vx_binary.h"
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u8.c gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u8.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u8.c	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u8.c	Sun Feb  8 22:32:12 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=1" } */
  
  #include "vx_binary.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=1 --param=vr2gpr-cost=1" } */
  
  #include "vx_binary.h"
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i16.c gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i16.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i16.c	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i16.c	Sun Feb  8 22:32:12 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=2" } */
  
  #include "vx_binary.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=2 --param=vr2gpr-cost=2" } */
  
  #include "vx_binary.h"
  
*************** DEF_VX_BINARY_CASE_3_WRAP(T, AVG_CEIL_FU
*** 34,41 ****
  /* { dg-final { scan-assembler {vrem.vx} } } */
  /* { dg-final { scan-assembler {vmax.vx} } } */
  /* { dg-final { scan-assembler {vmin.vx} } } */
! /* { dg-final { scan-assembler {vsadd.vx} } } */
! /* { dg-final { scan-assembler {vssub.vx} } } */
  /* { dg-final { scan-assembler {vaadd.vx} { target { any-opts {
       "-mrvv-vector-bits=zvl -mrvv-max-lmul=m1"
       "-mrvv-vector-bits=zvl -mrvv-max-lmul=m2"
--- 34,41 ----
  /* { dg-final { scan-assembler {vrem.vx} } } */
  /* { dg-final { scan-assembler {vmax.vx} } } */
  /* { dg-final { scan-assembler {vmin.vx} } } */
! /* { dg-final { scan-assembler-not {vsadd.vx} } } */
! /* { dg-final { scan-assembler-not {vssub.vx} } } */
  /* { dg-final { scan-assembler {vaadd.vx} { target { any-opts {
       "-mrvv-vector-bits=zvl -mrvv-max-lmul=m1"
       "-mrvv-vector-bits=zvl -mrvv-max-lmul=m2"
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i32.c gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i32.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i32.c	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i32.c	Sun Feb  8 22:32:12 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=2" } */
  
  #include "vx_binary.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=2 --param=vr2gpr-cost=2" } */
  
  #include "vx_binary.h"
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i64.c gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i64.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i64.c	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i64.c	Sun Feb  8 22:32:12 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=2" } */
  
  #include "vx_binary.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=2 --param=vr2gpr-cost=2" } */
  
  #include "vx_binary.h"
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i8.c gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i8.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i8.c	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i8.c	Sun Feb  8 22:32:12 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=2" } */
  
  #include "vx_binary.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=2 --param=vr2gpr-cost=2" } */
  
  #include "vx_binary.h"
  
*************** DEF_VX_BINARY_CASE_3_WRAP(T, AVG_CEIL_FU
*** 34,41 ****
  /* { dg-final { scan-assembler {vrem.vx} } } */
  /* { dg-final { scan-assembler {vmax.vx} } } */
  /* { dg-final { scan-assembler {vmin.vx} } } */
! /* { dg-final { scan-assembler {vsadd.vx} } } */
! /* { dg-final { scan-assembler {vssub.vx} } } */
  /* { dg-final { scan-assembler {vaadd.vx} { target { any-opts {
       "-mrvv-vector-bits=zvl -mrvv-max-lmul=m1"
       "-mrvv-vector-bits=zvl -mrvv-max-lmul=m2"
--- 34,41 ----
  /* { dg-final { scan-assembler {vrem.vx} } } */
  /* { dg-final { scan-assembler {vmax.vx} } } */
  /* { dg-final { scan-assembler {vmin.vx} } } */
! /* { dg-final { scan-assembler-not {vsadd.vx} } } */
! /* { dg-final { scan-assembler-not {vssub.vx} } } */
  /* { dg-final { scan-assembler {vaadd.vx} { target { any-opts {
       "-mrvv-vector-bits=zvl -mrvv-max-lmul=m1"
       "-mrvv-vector-bits=zvl -mrvv-max-lmul=m2"
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u16.c gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u16.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u16.c	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u16.c	Sun Feb  8 22:32:12 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=2" } */
  
  #include "vx_binary.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=2 --param=vr2gpr-cost=2" } */
  
  #include "vx_binary.h"
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u32.c gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u32.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u32.c	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u32.c	Sun Feb  8 22:32:12 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=2" } */
  
  #include "vx_binary.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=2 --param=vr2gpr-cost=2" } */
  
  #include "vx_binary.h"
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u64.c gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u64.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u64.c	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u64.c	Sun Feb  8 22:32:12 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=2" } */
  
  #include "vx_binary.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=2 --param=vr2gpr-cost=2" } */
  
  #include "vx_binary.h"
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u8.c gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u8.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u8.c	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u8.c	Sun Feb  8 22:32:12 2026
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=2" } */
  
  #include "vx_binary.h"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64d --param=gpr2vr-cost=2 --param=vr2gpr-cost=2" } */
  
  #include "vx_binary.h"
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr114194-rv32.c gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr114194-rv32.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr114194-rv32.c	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr114194-rv32.c	Sun Feb  8 22:32:12 2026
***************
*** 1,5 ****
! /* { dg-do compile { target { { ! riscv_abi_e } && rv32 } } } */
! /* { dg-options "-march=rv32gc_xtheadvector -O2" } */
  /* { dg-final { check-function-bodies "**" "" } } */
  
  /*
--- 1,5 ----
! /* { dg-do compile { target { ! riscv_abi_e } } } */
! /* { dg-options "-march=rv32gc_xtheadvector -O2 -mabi=ilp32d " } */
  /* { dg-final { check-function-bodies "**" "" } } */
  
  /*
*************** void foo0_1 (void *p)
*** 13,19 ****
  }
  
  /*
! ** foo0_7:
  **	li\t[a-x0-9]+,7
  **	th.vsetvli\tzero,[a-x0-9]+,e8,m1
  **	th\.vmv\.v\.i\tv[0-9],0
--- 13,19 ----
  }
  
  /*
! ** foo0_7: { xfail *-*-* }
  **	li\t[a-x0-9]+,7
  **	th.vsetvli\tzero,[a-x0-9]+,e8,m1
  **	th\.vmv\.v\.i\tv[0-9],0
*************** void foo1_1 (void *p)
*** 37,43 ****
  }
  
  /*
! ** foo1_5:
  **	li\t[a-x0-9]+,5
  **	th.vsetvli\tzero,[a-x0-9]+,e8,m1
  **	th\.vmv\.v\.i\tv[0-9],1
--- 37,43 ----
  }
  
  /*
! ** foo1_5: { xfail *-*-* }
  **	li\t[a-x0-9]+,5
  **	th.vsetvli\tzero,[a-x0-9]+,e8,m1
  **	th\.vmv\.v\.i\tv[0-9],1
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr123969.c gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr123969.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr123969.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr123969.c	Sun Feb  8 22:32:12 2026
***************
*** 0 ****
--- 1,19 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -march=rv64gcxtheadvector -mabi=lp64d -mtune=rocket" } */
+ 
+ /* In order to trigger the issue strided broadcast must be enabled
+    and we must broadcast integer memory operands via strided load.
+    This is disabled and there is currently no param to change it
+    so the test will pass either way.  */
+ 
+ #include <riscv_vector.h>
+ 
+ void test(int16_t *dst, long vl) {
+   vuint16m1_t v6 = __riscv_vmv_v_x_u16m1(*dst, vl);
+   vfloat32m2_t s0 = __riscv_vfmv_v_f_f32m2(0, vl);
+   __riscv_vse16_v_u16m1(dst, v6, vl);
+   __riscv_vse32_v_f32m2((float*)dst, s0, vl);
+ }
+ 
+ /* { dg-final { scan-assembler-times "th.vsetvli\tzero,a1,e16,m1" 2 } } */
+ /* { dg-final { scan-assembler-times "th.vsetvli\tzero,a1,e32,m2" 2 } } */
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr123971.c gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr123971.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr123971.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr123971.c	Sun Feb  8 22:32:12 2026
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O -mcpu=xt-c920 -mrvv-vector-bits=zvl" } */
+ 
+ __attribute__((__vector_size__(sizeof(int)))) int u;
+ __attribute__((__vector_size__(4 * sizeof(int)))) int v;
+ __attribute__((__vector_size__(8 * sizeof(int)))) int w;
+ 
+ void
+ foo()
+ {
+   v ^= __builtin_shufflevector(u, w % 3, 4, 3, 4, 1);
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gcc.target/riscv/target-attr-bad-11.c gcc-16-20260208/gcc/testsuite/gcc.target/riscv/target-attr-bad-11.c
*** gcc-16-20260201/gcc/testsuite/gcc.target/riscv/target-attr-bad-11.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gcc.target/riscv/target-attr-bad-11.c	Sun Feb  8 22:32:12 2026
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */
+ /* { dg-options "-march=rv64gc -O2 -mabi=lp64" } */
+ 
+ long foo(long a, long b) __attribute__((target("arch=+randomstring"))); /* { dg-error "unexpected arch for 'target\\(\\)' attribute: bad string found '\\+randomstring'" } */
+ long foo(long a, long b){
+   return a + (b * 2);
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.dg/pr123995.d gcc-16-20260208/gcc/testsuite/gdc.dg/pr123995.d
*** gcc-16-20260201/gcc/testsuite/gdc.dg/pr123995.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.dg/pr123995.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,16 ----
+ // { dg-do compile }
+ int fn123995(const typeof(*null) val)
+ {
+     return 0;
+ }
+ 
+ int pr123995a()
+ {
+     return fn123995(assert(0));
+ }
+ 
+ int pr123995b()
+ {
+     static Exception ex;
+     return fn123995(throw ex);
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.dg/pr90601.d gcc-16-20260208/gcc/testsuite/gdc.dg/pr90601.d
*** gcc-16-20260201/gcc/testsuite/gdc.dg/pr90601.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.dg/pr90601.d	Sun Feb  8 22:32:13 2026
***************
*** 1,5 ****
--- 1,6 ----
  // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90601
  // { dg-do compile }
+ // { dg-options "-Wno-deprecated" }
  
  int postincr(int a)
  {
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/compilable/autoreflambda.d gcc-16-20260208/gcc/testsuite/gdc.test/compilable/autoreflambda.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/compilable/autoreflambda.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/compilable/autoreflambda.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1 ----
+ alias f = (auto ref int x) {};
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/compilable/dbitfield.d gcc-16-20260208/gcc/testsuite/gdc.test/compilable/dbitfield.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/compilable/dbitfield.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/compilable/dbitfield.d	Sun Feb  8 22:32:13 2026
***************
*** 1,4 ****
! /* REQUIRED_ARGS: -preview=bitfields
   */
  
  /***************************************************/
--- 1,4 ----
! /*
   */
  
  /***************************************************/
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/compilable/dotvar_ref_return.d gcc-16-20260208/gcc/testsuite/gdc.test/compilable/dotvar_ref_return.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/compilable/dotvar_ref_return.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/compilable/dotvar_ref_return.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,11 ----
+ // REQUIRED_ARGS: -inline
+ 
+ struct Foo
+ {
+     int x;
+     int foo()
+     {
+         ref get() { return x; }
+         return get();
+     }
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/compilable/extra-files/ucn_vars.i gcc-16-20260208/gcc/testsuite/gdc.test/compilable/extra-files/ucn_vars.i
*** gcc-16-20260201/gcc/testsuite/gdc.test/compilable/extra-files/ucn_vars.i	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/compilable/extra-files/ucn_vars.i	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,11 ----
+ struct Vars {
+     int x²;
+     int \u2160;
+     int \u2182;
+     int \u00C0;
+     int \u00C1;
+     int \U000000C2;
+     int wh\u00ff;
+     int a\u00c4b\u0441\U000003b4e;
+     int b\u3021𗘰\u3023e;
+ };
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/compilable/fix21894.d gcc-16-20260208/gcc/testsuite/gdc.test/compilable/fix21894.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/compilable/fix21894.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/compilable/fix21894.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,15 ----
+ // https://github.com/dlang/dmd/issues/21894
+ 
+ inout(int[]) test1(inout(int[]) a, int b)
+ {
+     return a ~ b;
+ }
+ inout(int[]) test2(inout(int[]) a, inout(int[]) b)
+ {
+     return a ~ b;
+ }
+ void main()
+ {
+     test1([1], 2);
+     test2([1], [2]);
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/compilable/fix21945.d gcc-16-20260208/gcc/testsuite/gdc.test/compilable/fix21945.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/compilable/fix21945.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/compilable/fix21945.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,6 ----
+ // REQUIRED_ARGS: -preview=dip1000
+ 
+ void assertEq(scope int[][3] x) @safe
+ {
+ 	bool b = x == x;
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/compilable/fix22291.d gcc-16-20260208/gcc/testsuite/gdc.test/compilable/fix22291.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/compilable/fix22291.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/compilable/fix22291.d	Sun Feb  8 22:32:13 2026
*************** void nesting(double d, int i)
*** 49,55 ****
  
  class Tree {
      int opApply(int delegate(size_t, Tree) dg) {
!         if (dg(0, this)) return 1;
          return 0;
      }
  }
--- 49,55 ----
  
  class Tree {
      int opApply(int delegate(size_t, Tree) dg) {
!         if (auto r = dg(0, this)) return r;
          return 0;
      }
  }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/compilable/issue19163.d gcc-16-20260208/gcc/testsuite/gdc.test/compilable/issue19163.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/compilable/issue19163.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/compilable/issue19163.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,20 ----
+ struct NameAttribute
+ {
+     int delegate() foo;
+ }
+ 
+ static NameAttribute getNamedAttribute(alias S)()
+ {
+     return __traits(getAttributes, S)[0];
+ }
+ 
+ struct TestStruct
+ {
+     @NameAttribute({ return 42; }) int a;
+ }
+ 
+ void test()
+ {
+     TestStruct m;
+     enum nameAttr = getNamedAttribute!(m.a);
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/compilable/issue21997.d gcc-16-20260208/gcc/testsuite/gdc.test/compilable/issue21997.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/compilable/issue21997.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/compilable/issue21997.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,10 ----
+ extern(C++) struct S
+ {
+     static void link(alias MO)(){}
+     __gshared int i;
+ }
+ 
+ void main()
+ {
+     S.link!(S.i);
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/compilable/mangle1.d gcc-16-20260208/gcc/testsuite/gdc.test/compilable/mangle1.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/compilable/mangle1.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/compilable/mangle1.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,25 ----
+ //spaces
+ __gshared pragma(mangle, "test 9") ubyte test9_1;
+ __gshared extern pragma(mangle, "test 9") ubyte test9_1_e;
+ 
+ //\n chars
+ __gshared pragma(mangle, "test\\\n9") ubyte test9_2;
+ __gshared extern pragma(mangle, "test\\\n9") ubyte test9_2_e;
+ 
+ //\a chars
+ __gshared pragma(mangle, "test\a9") ubyte test9_3;
+ __gshared extern pragma(mangle, "test\a9") ubyte test9_3_e;
+ 
+ //\x01 chars
+ __gshared pragma(mangle, "test\x019") ubyte test9_4;
+ __gshared extern pragma(mangle, "test\x019") ubyte test9_4_e;
+ 
+ //\xff chars
+ __gshared pragma(mangle, "test\xff9") ubyte test9_6;
+ __gshared extern pragma(mangle, "test\xff9") ubyte test9_6_e;
+ 
+ //unicode
+ __gshared pragma(mangle, "😀ÀÁÂÃÄÅßàáâãäaåbæçèéêcëìígîïð7ñ9__òóô4õöÆ3ÇÈÉÊËabcÌÍÎÏÐÑÒÓÔÕÖ😄😅🤣😂_ÿ")
+ ubyte test9_7;
+ __gshared extern pragma(mangle, "😀ÀÁÂÃÄÅßàáâãäaåbæçèéêcëìígîïð7ñ9__òóô4õöÆ3ÇÈÉÊËabcÌÍÎÏÐÑÒÓÔÕÖ😄😅🤣😂_ÿ")
+ ubyte test9_7_e;
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/compilable/pragmamangle1.d gcc-16-20260208/gcc/testsuite/gdc.test/compilable/pragmamangle1.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/compilable/pragmamangle1.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/compilable/pragmamangle1.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,150 ----
+ // Tests for pragma mangle
+ module pragmamangle;
+ 
+ version (Posix): // Itanium C++ ABI only
+ 
+ string ctfe(string s) { return "mangle_" ~ "ctfe_" ~ s; }
+ immutable string const_function = "mangle_const_function";
+ immutable string const_variable = "mangle_const_variable";
+ 
+ // This mangle string doesn't propagate to tests that use type_symbol.
+ pragma(mangle, "Q_should_mangle_string_propagate")
+ struct type_symbol { }
+ 
+ class template_symbol(T) { }
+ 
+ /* 1. Overrides the default mangling for a symbol.
+  */
+ pragma(mangle, "mangle_function") void test_fun1();
+ static assert(test_fun1.mangleof == "mangle_function");
+ 
+ pragma(mangle, "mangle_attribute") extern(C) { nothrow { void test_pokeattr1(); } }
+ static assert(test_pokeattr1.mangleof == "mangle_attribute");
+ 
+ /* 2a. For variables and functions there must be one AssignExpression and it
+  * must evaluate at compile time to a string literal
+  */
+ pragma(mangle, ctfe("function")) void test_fun2a1();
+ static assert(test_fun2a1.mangleof == "mangle_ctfe_function");
+ 
+ pragma(mangle, const_function) void test_fun2a2();
+ static assert(test_fun2a2.mangleof == "mangle_const_function");
+ 
+ pragma(mangle, ctfe("variable")) int test_var2a1;
+ static assert(test_var2a1.mangleof == "mangle_ctfe_variable");
+ 
+ pragma(mangle, const_variable) int test_var2a2;
+ static assert(test_var2a2.mangleof == "mangle_const_variable");
+ 
+ /* 2b. For aggregates there may be one or two AssignExpressions, one of which
+  * must evaluate at compile time to a string literal and one which must
+  * evaluate to a symbol.
+  * [UNDOCUMENTED] The pragma(mangle) attribute only gets applied to the
+  * encoded parameters types of extern(C++) functions.
+  */
+ pragma(mangle, "mangle_struct") extern(C++) { struct S1 { } }
+ extern(C++) void test_struct2b1(S1);
+ extern(D) void externD_struct2b1(S1);
+ static assert(test_struct2b1.mangleof == "_Z14test_struct2b113mangle_struct");
+ static assert(externD_struct2b1.mangleof == "_D12pragmamangle17externD_struct2b1FSQBj2S1Zv");
+ 
+ pragma(mangle, type_symbol, "mangle_struct") struct S2 { }
+ extern(C++) void test_struct2b3(S2);
+ extern(D) void externD_struct2b3(S2);
+ static assert(test_struct2b3.mangleof == "_Z14test_struct2b313mangle_struct");
+ static assert(externD_struct2b3.mangleof == "_D12pragmamangle17externD_struct2b3FSQBj2S2Zv");
+ 
+ pragma(mangle, "mangle_struct", type_symbol) struct S3 { }
+ extern(C++) void test_struct2b4(S3);
+ extern(D) void externD_struct2b4(S3);
+ static assert(test_struct2b4.mangleof == "_Z14test_struct2b413mangle_struct");
+ static assert(externD_struct2b4.mangleof == "_D12pragmamangle17externD_struct2b4FSQBj2S3Zv");
+ 
+ // Repeat struct tests on classes.
+ 
+ pragma(mangle, "mangle_class") extern(C++) { class C1 { } }
+ extern(C++) void test_class2b1(C1);
+ extern(D) void externD_class2b1(C1);
+ static assert(test_class2b1.mangleof == "_Z13test_class2b1P12mangle_class");
+ static assert(externD_class2b1.mangleof == "_D12pragmamangle16externD_class2b1FCQBi2C1Zv");
+ 
+ pragma(mangle, type_symbol, "mangle_class") class C2 { }
+ extern(C++) void test_class2b3(C2);
+ extern(D) void externD_class2b3(C2);
+ static assert(test_class2b3.mangleof == "_Z13test_class2b3P12mangle_class");
+ static assert(externD_class2b3.mangleof == "_D12pragmamangle16externD_class2b3FCQBi2C2Zv");
+ 
+ pragma(mangle, "mangle_class", type_symbol) class C3 { }
+ extern(C++) void test_class2b4(C3);
+ extern(D) void externD_class2b4(C3);
+ static assert(test_class2b4.mangleof == "_Z13test_class2b4P12mangle_class");
+ static assert(externD_class2b4.mangleof == "_D12pragmamangle16externD_class2b4FCQBi2C3Zv");
+ 
+ /* 2c. If that symbol is a TemplateInstance, the aggregate is treated as a
+  * template that has the signature and arguments of the TemplateInstance.
+  */
+ template T1(C)
+ {
+     pragma(mangle, C, "mangle_template") struct T1 { }
+ }
+ extern(C++) void test_template2c3(T1!(template_symbol!int));
+ extern(C++) void test_template2c4(T1!(template_symbol!float));
+ extern(C++) void test_template2c5(T1!(type_symbol));
+ static assert(test_template2c3.mangleof == "_Z16test_template2c315mangle_templateIiE");
+ static assert(test_template2c4.mangleof == "_Z16test_template2c415mangle_templateIfE");
+ static assert(test_template2c5.mangleof == "_Z16test_template2c515mangle_template");
+ 
+ template T2(C)
+ {
+     pragma(mangle, "mangle_template", C) struct T2 { }
+ }
+ extern(C++) void test_template2c6(T2!(template_symbol!int));
+ extern(C++) void test_template2c7(T2!(template_symbol!float));
+ extern(C++) void test_template2c8(T2!(type_symbol));
+ static assert(test_template2c6.mangleof == "_Z16test_template2c615mangle_templateIiE");
+ static assert(test_template2c7.mangleof == "_Z16test_template2c715mangle_templateIfE");
+ static assert(test_template2c8.mangleof == "_Z16test_template2c815mangle_template");
+ 
+ /* 2d. The identifier of the symbol is used when no string is supplied.
+  */
+ pragma(mangle, type_symbol) struct I1 { }
+ extern(C++) void test_struct2d1(I1);
+ static assert(test_struct2d1.mangleof == "_Z14test_struct2d111type_symbol");
+ 
+ pragma(mangle, type_symbol) class I2 { }
+ extern(C++) void test_class2d1(I2);
+ static assert(test_class2d1.mangleof == "_Z13test_class2d1P11type_symbol");
+ 
+ template I3(C)
+ {
+     pragma(mangle, C) struct I3 { }
+ }
+ extern(C++) void test_template2d1(I3!(template_symbol!int));
+ extern(C++) void test_template2d2(I3!(template_symbol!float));
+ extern(C++) void test_template2d3(I3!(type_symbol));
+ static assert(test_template2d1.mangleof == "_Z16test_template2d115template_symbolIiE");
+ static assert(test_template2d2.mangleof == "_Z16test_template2d215template_symbolIfE");
+ static assert(test_template2d3.mangleof == "_Z16test_template2d311type_symbol");
+ 
+ // ??? No template arguments encoded.
+ 
+ pragma(mangle, template_symbol!float) struct I4 { }
+ extern(C++) void test_template2d4(I4);
+ static assert(test_template2d4.mangleof == "_Z16test_template2d415template_symbol");
+ 
+ /* 3. It only applies to function and variable symbols. Other symbols are
+  * ignored.
+  */
+ pragma(mangle, "mangle_alias")
+ alias ignored_alias = int;
+ 
+ pragma(mangle, "mangle_enum")
+ enum ignored_enum { a = 1 }
+ 
+ pragma(mangle, "mangle_mixed_ignored")
+ {
+     enum test_ignored1 { b }
+     void test_not_ignored();
+     alias test_ignored2 = int delegate(int);
+ }
+ static assert(test_not_ignored.mangleof == "mangle_mixed_ignored");
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/compilable/pragmamangle2.d gcc-16-20260208/gcc/testsuite/gdc.test/compilable/pragmamangle2.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/compilable/pragmamangle2.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/compilable/pragmamangle2.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,145 ----
+ // Tests for pragma mangle
+ module pragmamangle;
+ 
+ version (Posix): // Itanium C++ ABI only
+ 
+ string ctfe(string s) { return "mangle_" ~ "ctfe_" ~ s; }
+ immutable string const_function = "mangle_const_function";
+ immutable string const_variable = "mangle_const_variable";
+ 
+ // This mangle string doesn't propagate to tests that use type_symbol.
+ pragma(mangle, "Q_should_mangle_string_propagate")
+ struct type_symbol { }
+ 
+ class template_symbol(T) { }
+ 
+ void pragma_statement_test()
+ {
+     /* 1. Overrides the default mangling for a symbol.
+      */
+     pragma(mangle, "mangle_function") void test_fun1();
+     static assert(test_fun1.mangleof == "mangle_function");
+ 
+     pragma(mangle, "mangle_attribute") extern(C) nothrow void test_pokeattr1();
+     static assert(test_pokeattr1.mangleof == "mangle_attribute");
+ 
+     /* 2a. For variables and functions there must be one AssignExpression and it
+      * must evaluate at compile time to a string literal
+      */
+     pragma(mangle, ctfe("function")) void test_fun2a1();
+     static assert(test_fun2a1.mangleof == "mangle_ctfe_function");
+ 
+     pragma(mangle, const_function) void test_fun2a2();
+     static assert(test_fun2a2.mangleof == "mangle_const_function");
+ 
+     pragma(mangle, ctfe("variable")) int test_var2a1;
+     static assert(test_var2a1.mangleof == "mangle_ctfe_variable");
+ 
+     pragma(mangle, const_variable) int test_var2a2;
+     static assert(test_var2a2.mangleof == "mangle_const_variable");
+ 
+     /* 2b. For aggregates there may be one or two AssignExpressions, one of which
+      * must evaluate at compile time to a string literal and one which must
+      * evaluate to a symbol.
+      * [UNDOCUMENTED] The pragma(mangle) attribute only gets applied to the
+      * encoded parameters types of extern(C++) functions.
+      */
+     pragma(mangle, "mangle_struct") extern(C++) struct S1 { }
+     extern(C++) void test_struct2b1(S1);
+     extern(D) void externD_struct2b1(S1);
+     static assert(test_struct2b1.mangleof == "_ZN21pragma_statement_test14test_struct2b1ENS_13mangle_structE");
+     static assert(externD_struct2b1.mangleof == "_D12pragmamangle21pragma_statement_testFZ17externD_struct2b1MFSQCjQByFZ2S1Zv");
+ 
+     pragma(mangle, type_symbol, "mangle_struct") struct S2 { }
+     extern(C++) void test_struct2b3(S2);
+     extern(D) void externD_struct2b3(S2);
+     static assert(test_struct2b3.mangleof == "_ZN21pragma_statement_test14test_struct2b3ENS_13mangle_structE");
+     static assert(externD_struct2b3.mangleof == "_D12pragmamangle21pragma_statement_testFZ17externD_struct2b3MFSQCjQByFZ2S2Zv");
+ 
+     pragma(mangle, "mangle_struct", type_symbol) struct S3 { }
+     extern(C++) void test_struct2b4(S3);
+     extern(D) void externD_struct2b4(S3);
+     static assert(test_struct2b4.mangleof == "_ZN21pragma_statement_test14test_struct2b4ENS_13mangle_structE");
+     static assert(externD_struct2b4.mangleof == "_D12pragmamangle21pragma_statement_testFZ17externD_struct2b4MFSQCjQByFZ2S3Zv");
+ 
+     // Repeat struct tests on classes.
+ 
+     pragma(mangle, "mangle_class") extern(C++) class C1 { }
+     extern(C++) void test_class2b1(C1);
+     extern(D) void externD_class2b1(C1);
+     static assert(test_class2b1.mangleof == "_ZN21pragma_statement_test13test_class2b1EPNS_12mangle_classE");
+     static assert(externD_class2b1.mangleof == "_D12pragmamangle21pragma_statement_testFZ16externD_class2b1MFCQCiQBxFZ2C1Zv");
+ 
+     pragma(mangle, type_symbol, "mangle_class") class C2 { }
+     extern(C++) void test_class2b3(C2);
+     extern(D) void externD_class2b3(C2);
+     static assert(test_class2b3.mangleof == "_ZN21pragma_statement_test13test_class2b3EPNS_12mangle_classE");
+     static assert(externD_class2b3.mangleof == "_D12pragmamangle21pragma_statement_testFZ16externD_class2b3MFCQCiQBxFZ2C2Zv");
+ 
+     pragma(mangle, "mangle_class", type_symbol) class C3 { }
+     extern(C++) void test_class2b4(C3);
+     extern(D) void externD_class2b4(C3);
+     static assert(test_class2b4.mangleof == "_ZN21pragma_statement_test13test_class2b4EPNS_12mangle_classE");
+     static assert(externD_class2b4.mangleof == "_D12pragmamangle21pragma_statement_testFZ16externD_class2b4MFCQCiQBxFZ2C3Zv");
+ 
+     /* 2c. If that symbol is a TemplateInstance, the aggregate is treated as a
+      * template that has the signature and arguments of the TemplateInstance.
+      */
+     template T1(C)
+     {
+         pragma(mangle, C, "mangle_template") struct T1 { }
+     }
+     extern(C++) void test_template2c3(T1!(template_symbol!int));
+     extern(C++) void test_template2c4(T1!(template_symbol!float));
+     extern(C++) void test_template2c5(T1!(type_symbol));
+     static assert(test_template2c3.mangleof == "_ZN21pragma_statement_test16test_template2c3ENS_15mangle_templateIiEE");
+     static assert(test_template2c4.mangleof == "_ZN21pragma_statement_test16test_template2c4ENS_15mangle_templateIfEE");
+     static assert(test_template2c5.mangleof == "_ZN21pragma_statement_test16test_template2c5ENS_15mangle_templateE");
+ 
+     template T2(C)
+     {
+         pragma(mangle, "mangle_template", C) struct T2 { }
+     }
+     extern(C++) void test_template2c6(T2!(template_symbol!int));
+     extern(C++) void test_template2c7(T2!(template_symbol!float));
+     extern(C++) void test_template2c8(T2!(type_symbol));
+     static assert(test_template2c6.mangleof == "_ZN21pragma_statement_test16test_template2c6ENS_15mangle_templateIiEE");
+     static assert(test_template2c7.mangleof == "_ZN21pragma_statement_test16test_template2c7ENS_15mangle_templateIfEE");
+     static assert(test_template2c8.mangleof == "_ZN21pragma_statement_test16test_template2c8ENS_15mangle_templateE");
+ 
+     /* 2d. The identifier of the symbol is used when no string is supplied.
+      */
+     pragma(mangle, type_symbol) struct I1 { }
+     extern(C++) void test_struct2d1(I1);
+     static assert(test_struct2d1.mangleof == "_ZN21pragma_statement_test14test_struct2d1ENS_11type_symbolE");
+ 
+     pragma(mangle, type_symbol) class I2 { }
+     extern(C++) void test_class2d1(I2);
+     static assert(test_class2d1.mangleof == "_ZN21pragma_statement_test13test_class2d1EPNS_11type_symbolE");
+ 
+     template I3(C)
+     {
+         pragma(mangle, C) struct I3 { }
+     }
+     extern(C++) void test_template2d1(I3!(template_symbol!int));
+     extern(C++) void test_template2d2(I3!(template_symbol!float));
+     extern(C++) void test_template2d3(I3!(type_symbol));
+     static assert(test_template2d1.mangleof == "_ZN21pragma_statement_test16test_template2d1ENS_15template_symbolIiEE");
+     static assert(test_template2d2.mangleof == "_ZN21pragma_statement_test16test_template2d2ENS_15template_symbolIfEE");
+     static assert(test_template2d3.mangleof == "_ZN21pragma_statement_test16test_template2d3ENS_11type_symbolE");
+ 
+     // ??? No template arguments encoded.
+ 
+     pragma(mangle, template_symbol!float) struct I4 { }
+     extern(C++) void test_template2d4(I4);
+     static assert(test_template2d4.mangleof == "_ZN21pragma_statement_test16test_template2d4ENS_15template_symbolE");
+ 
+     /* 3. It only applies to function and variable symbols. Other symbols are
+      * ignored.
+      */
+     pragma(mangle, "mangle_alias")
+     alias ignored_alias = int;
+ 
+     pragma(mangle, "mangle_enum")
+     enum ignored_enum { a = 1 }
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/compilable/profilegc_typename.d gcc-16-20260208/gcc/testsuite/gdc.test/compilable/profilegc_typename.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/compilable/profilegc_typename.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/compilable/profilegc_typename.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,10 ----
+ // REQUIRED_ARGS: -profile=gc
+ struct T(string s) {}
+ alias TypeWithQuotes = T!q"EOS
+ `"'}])>
+ EOS";
+ 
+ void foo() {
+     TypeWithQuotes[] arr;
+     arr ~= TypeWithQuotes();
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/compilable/shortened_methods.d gcc-16-20260208/gcc/testsuite/gdc.test/compilable/shortened_methods.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/compilable/shortened_methods.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/compilable/shortened_methods.d	Sun Feb  8 22:32:13 2026
*************** class A {
*** 22,27 ****
--- 22,29 ----
  class B : A{
      // short syntax also overrides the same as long syntax
      override bool isNull() => this !is null;
+ 
+     this(float y) => super(y);
  }
  
  static assert((new A).x == 34);
*************** struct T
*** 46,51 ****
--- 48,58 ----
      void inc() {}
      this(this) => inc();
  
+     // https://github.com/dlang/dmd/issues/21576
+     this(int) => inc();
+ 
+     this(byte) { return inc(); }
+ 
      void free() {}
      ~this() => free();
  }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/compilable/test21299d.d gcc-16-20260208/gcc/testsuite/gdc.test/compilable/test21299d.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/compilable/test21299d.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/compilable/test21299d.d	Sun Feb  8 22:32:13 2026
*************** class Task
*** 22,27 ****
  {
      void removeTerminationHook(void delegate() hook)
      {
!         moveToEnd([], hook);
      }
  }
--- 22,28 ----
  {
      void removeTerminationHook(void delegate() hook)
      {
!         void delegate()[] array = [() {}];
!         moveToEnd(array, hook);
      }
  }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/compilable/test21495.d gcc-16-20260208/gcc/testsuite/gdc.test/compilable/test21495.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/compilable/test21495.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/compilable/test21495.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,15 ----
+ // https://github.com/dlang/dmd/issues/21495
+ extern (C++)
+ {
+     enum string[string] meta = [
+         "hellos": "worlds"
+     ];
+ 
+     struct metas
+     {
+         static foreach (key, value; meta)
+         {
+             mixin("enum string " ~ key ~ " = `" ~ value ~ "`;");
+         }
+     }
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/compilable/test21504a.d gcc-16-20260208/gcc/testsuite/gdc.test/compilable/test21504a.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/compilable/test21504a.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/compilable/test21504a.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,68 ----
+ // https://github.com/dlang/dmd/issues/21504
+ 
+ // Test that:
+ // 1. __traits(compiles) tests fail when violating an explicitly set attribute.
+ // 2. __traits(compiles) tests pass when attribute is inferred (see functions
+ //   isPureBypassingInference, isSafeBypassingInference, isNogcBypassingInference).
+ // 3. __traits(compiles) tests do not affect the result of attribute inference,
+ //    as the they are only evaluated at compile-time, not run-time.
+ 
+ __gshared int testPure;
+ 
+ auto testPure1() pure
+ {
+     return __traits(compiles, testPure = 1);
+ }
+ auto testPure2()
+ {
+     return __traits(compiles, testPure = 1);
+ }
+ 
+ static assert(!testPure1() && testPure2());
+ static assert(__traits(getFunctionAttributes, testPure1) == __traits(getFunctionAttributes, testPure2));
+ 
+ ////////////////////////////
+ 
+ __gshared Exception testNothrow;
+ 
+ auto testNothrow1() nothrow
+ {
+     return __traits(compiles, throw testNothrow);
+ }
+ auto testNothrow2()
+ {
+     return __traits(compiles, throw testNothrow);
+ }
+ 
+ static assert(!testNothrow1() && testNothrow2());
+ static assert(__traits(getFunctionAttributes, testNothrow1) == __traits(getFunctionAttributes, testNothrow2));
+ 
+ ////////////////////////////
+ 
+ __gshared int* testSafe;
+ 
+ auto testSafe1() @safe
+ {
+     return __traits(compiles, testSafe + 1);
+ }
+ auto testSafe2()
+ {
+     return __traits(compiles, testSafe + 1);
+ }
+ 
+ static assert(!testSafe1() && testSafe2());
+ static assert(__traits(getFunctionAttributes, testSafe1) == __traits(getFunctionAttributes, testSafe2));
+ 
+ ////////////////////////////
+ 
+ auto testNogc1() @nogc
+ {
+     return __traits(compiles, [1, 2]);
+ }
+ auto testNogc2()
+ {
+     return __traits(compiles, [1, 2]);
+ }
+ 
+ static assert(!testNogc1() && testNogc2());
+ static assert(__traits(getFunctionAttributes, testNogc1) == __traits(getFunctionAttributes, testNogc2));
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/compilable/test21504b.d gcc-16-20260208/gcc/testsuite/gdc.test/compilable/test21504b.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/compilable/test21504b.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/compilable/test21504b.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,17 ----
+ // https://github.com/dlang/dmd/issues/21504
+ 
+ // Test case where `@safe` triggers attribute inference of all nested
+ // declarations, and the NOGCVisitor for `new` expressions encounters a self
+ // referencing GC action.
+ 
+ void test21504() @nogc @safe
+ {
+     static struct Nest
+     {
+         this(int i)
+         {
+             static assert(__traits(compiles, new Nest(i)));
+         }
+     }
+     auto s = Nest(1);
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/compilable/test21835.d gcc-16-20260208/gcc/testsuite/gdc.test/compilable/test21835.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/compilable/test21835.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/compilable/test21835.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,11 ----
+ // https://github.com/dlang/dmd/issues/21832
+ // resize array of implicitly non-copyable items
+ 
+ void bugGH21832()
+ {
+     static struct S { @disable this(this); }
+     static struct Item { S s; }
+ 
+     Item[] arr;
+     arr.length++;
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/compilable/test22916.d gcc-16-20260208/gcc/testsuite/gdc.test/compilable/test22916.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/compilable/test22916.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/compilable/test22916.d	Sun Feb  8 22:32:13 2026
*************** char* g;
*** 25,31 ****
  
  void test23862()
  {
!     scope char** _errors;
      g = front_p(_errors);   // should pass
      g = front_r(_errors);   // should pass
  }
--- 25,32 ----
  
  void test23862()
  {
!     char* source;
!     scope char** _errors = &source;
      g = front_p(_errors);   // should pass
      g = front_r(_errors);   // should pass
  }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/compilable/testexpression.d gcc-16-20260208/gcc/testsuite/gdc.test/compilable/testexpression.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/compilable/testexpression.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/compilable/testexpression.d	Sun Feb  8 22:32:13 2026
*************** void OpAssignCases(alias X)()
*** 69,75 ****
  
      X!(integral, boolean, all)();
      X!(integral, integral, all)();
-     X!(integral, floating, arith)();
  
      X!(floating, boolean, arith)();
      X!(floating, integral, arith)();
--- 69,74 ----
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/compilable/ucn.d gcc-16-20260208/gcc/testsuite/gdc.test/compilable/ucn.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/compilable/ucn.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/compilable/ucn.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,13 ----
+ /+
+ REQUIRED_ARGS: -Icompilable/extra-files
+ EXTRA_FILES: extra-files/ucn_vars.i
+ +/
+ 
+ import ucn_vars;
+ 
+ alias M = __traits(allMembers, Vars);
+ enum expected = ["x²", "Ⅰ", "ↂ", "À", "Á", "Â", "whÿ", "aÄbсδe", "b〡𗘰〣e"];
+ 
+ static foreach(i; 0 .. M.length) {
+     static assert(M[i] == expected[i]);
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/compilable/warn3882.d gcc-16-20260208/gcc/testsuite/gdc.test/compilable/warn3882.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/compilable/warn3882.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/compilable/warn3882.d	Sun Feb  8 22:32:13 2026
*************** const struct Foo13899
*** 66,72 ****
  {
      int opApply(immutable int delegate(const ref int) pure nothrow dg) pure nothrow
      {
!         return 1;
      }
  }
  
--- 66,72 ----
  {
      int opApply(immutable int delegate(const ref int) pure nothrow dg) pure nothrow
      {
!         return 0;
      }
  }
  
*************** void testCkeckedInt()
*** 108,113 ****
--- 108,114 ----
  
      bool overflow;
      assert(mulu(cast(long)3, cast(uint)4, overflow) == 12);
+     assert(mulu(cast(ulong)3, cast(uint)4, overflow) == 12);
  
      assert(testCheckedUnsigned!uint(3,4) == 12);
      assert(testCheckedUnsigned!ulong(3,4) == 12);
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/b3841.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/b3841.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/b3841.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/b3841.d	Sun Feb  8 22:32:13 2026
***************
*** 1,25 ****
! // REQUIRED_ARGS: -w -o-
  
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/b3841.d-mixin-32(32): Warning: `char += float` is performing truncating conversion
! fail_compilation/b3841.d-mixin-32(32): Warning: `int += float` is performing truncating conversion
! fail_compilation/b3841.d-mixin-32(32): Warning: `long += double` is performing truncating conversion
! fail_compilation/b3841.d-mixin-32(32): Warning: `char -= float` is performing truncating conversion
! fail_compilation/b3841.d-mixin-32(32): Warning: `int -= float` is performing truncating conversion
! fail_compilation/b3841.d-mixin-32(32): Warning: `long -= double` is performing truncating conversion
! fail_compilation/b3841.d-mixin-32(32): Warning: `char *= float` is performing truncating conversion
! fail_compilation/b3841.d-mixin-32(32): Warning: `int *= float` is performing truncating conversion
! fail_compilation/b3841.d-mixin-32(32): Warning: `long *= double` is performing truncating conversion
! fail_compilation/b3841.d-mixin-32(32): Warning: `char /= float` is performing truncating conversion
! fail_compilation/b3841.d-mixin-32(32): Warning: `int /= float` is performing truncating conversion
! fail_compilation/b3841.d-mixin-32(32): Warning: `long /= double` is performing truncating conversion
! fail_compilation/b3841.d-mixin-32(32): Warning: `char %= float` is performing truncating conversion
! fail_compilation/b3841.d-mixin-32(32): Warning: `int %= float` is performing truncating conversion
! fail_compilation/b3841.d-mixin-32(32): Warning: `long %= double` is performing truncating conversion
! Error: warnings are treated as errors
!        Use -wi if you wish to treat warnings only as informational.
  ---
  */
  
--- 1,38 ----
! // REQUIRED_ARGS: -de
  
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/b3841.d-mixin-45(45): Deprecation: `char += float` is performing truncating conversion
! fail_compilation/b3841.d(69): Error: template instance `b3841.f!("+=", char, float)` error instantiating
! fail_compilation/b3841.d-mixin-45(45): Deprecation: `int += float` is performing truncating conversion
! fail_compilation/b3841.d(70): Error: template instance `b3841.f!("+=", int, float)` error instantiating
! fail_compilation/b3841.d-mixin-45(45): Deprecation: `long += double` is performing truncating conversion
! fail_compilation/b3841.d(71): Error: template instance `b3841.f!("+=", long, double)` error instantiating
! fail_compilation/b3841.d-mixin-45(45): Deprecation: `char -= float` is performing truncating conversion
! fail_compilation/b3841.d(69): Error: template instance `b3841.f!("-=", char, float)` error instantiating
! fail_compilation/b3841.d-mixin-45(45): Deprecation: `int -= float` is performing truncating conversion
! fail_compilation/b3841.d(70): Error: template instance `b3841.f!("-=", int, float)` error instantiating
! fail_compilation/b3841.d-mixin-45(45): Deprecation: `long -= double` is performing truncating conversion
! fail_compilation/b3841.d(71): Error: template instance `b3841.f!("-=", long, double)` error instantiating
! fail_compilation/b3841.d-mixin-45(45): Deprecation: `char *= float` is performing truncating conversion
! fail_compilation/b3841.d(69): Error: template instance `b3841.f!("*=", char, float)` error instantiating
! fail_compilation/b3841.d-mixin-45(45): Deprecation: `int *= float` is performing truncating conversion
! fail_compilation/b3841.d(70): Error: template instance `b3841.f!("*=", int, float)` error instantiating
! fail_compilation/b3841.d-mixin-45(45): Deprecation: `long *= double` is performing truncating conversion
! fail_compilation/b3841.d(71): Error: template instance `b3841.f!("*=", long, double)` error instantiating
! fail_compilation/b3841.d-mixin-45(45): Deprecation: `char /= float` is performing truncating conversion
! fail_compilation/b3841.d(69): Error: template instance `b3841.f!("/=", char, float)` error instantiating
! fail_compilation/b3841.d-mixin-45(45): Deprecation: `int /= float` is performing truncating conversion
! fail_compilation/b3841.d(70): Error: template instance `b3841.f!("/=", int, float)` error instantiating
! fail_compilation/b3841.d-mixin-45(45): Deprecation: `long /= double` is performing truncating conversion
! fail_compilation/b3841.d(71): Error: template instance `b3841.f!("/=", long, double)` error instantiating
! fail_compilation/b3841.d-mixin-45(45): Deprecation: `char %= float` is performing truncating conversion
! fail_compilation/b3841.d(69): Error: template instance `b3841.f!("%=", char, float)` error instantiating
! fail_compilation/b3841.d-mixin-45(45): Deprecation: `int %= float` is performing truncating conversion
! fail_compilation/b3841.d(70): Error: template instance `b3841.f!("%=", int, float)` error instantiating
! fail_compilation/b3841.d-mixin-45(45): Deprecation: `long %= double` is performing truncating conversion
! fail_compilation/b3841.d(71): Error: template instance `b3841.f!("%=", long, double)` error instantiating
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/betterc.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/betterc.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/betterc.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/betterc.d	Sun Feb  8 22:32:13 2026
***************
*** 1,9 ****
  /* REQUIRED_ARGS: -betterC
   * TEST_OUTPUT:
  ---
! fail_compilation/betterc.d(12): Error: cannot use `throw` statements with -betterC
! fail_compilation/betterc.d(17): Error: cannot use try-catch statements with -betterC
! fail_compilation/betterc.d(29): Error: `TypeInfo` cannot be used with -betterC
  ---
  */
  
--- 1,9 ----
  /* REQUIRED_ARGS: -betterC
   * TEST_OUTPUT:
  ---
! fail_compilation/betterc.d(12): Error: cannot use `throw` statements with `-betterC`
! fail_compilation/betterc.d(17): Error: cannot use try-catch statements with `-betterC`
! fail_compilation/betterc.d(29): Error: `TypeInfo` cannot be used with `-betterC`
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/biterrors.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/biterrors.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/biterrors.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/biterrors.d	Sun Feb  8 22:32:13 2026
***************
*** 1,4 ****
! /* REQUIRED_ARGS: -preview=bitfields
   * TEST_OUTPUT:
  ---
  fail_compilation/biterrors.d(103): Error: initializer not allowed for bitfield declaration
--- 1,4 ----
! /*
   * TEST_OUTPUT:
  ---
  fail_compilation/biterrors.d(103): Error: initializer not allowed for bitfield declaration
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/biterrors2.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/biterrors2.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/biterrors2.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/biterrors2.d	Sun Feb  8 22:32:13 2026
***************
*** 1,4 ****
! /* REQUIRED_ARGS: -preview=bitfields
   * TEST_OUTPUT:
  ---
  fail_compilation/biterrors2.d(100): Error: variable `biterrors2.a` - bitfield must be member of struct, union, or class
--- 1,4 ----
! /*
   * TEST_OUTPUT:
  ---
  fail_compilation/biterrors2.d(100): Error: variable `biterrors2.a` - bitfield must be member of struct, union, or class
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/biterrors3.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/biterrors3.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/biterrors3.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/biterrors3.d	Sun Feb  8 22:32:13 2026
***************
*** 1,4 ****
! /* REQUIRED_ARGS: -preview=bitfields
   * TEST_OUTPUT:
  ---
  fail_compilation/biterrors3.d(103): Error: storage class not allowed for bitfield declaration
--- 1,4 ----
! /*
   * TEST_OUTPUT:
  ---
  fail_compilation/biterrors3.d(103): Error: storage class not allowed for bitfield declaration
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/biterrors4.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/biterrors4.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/biterrors4.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/biterrors4.d	Sun Feb  8 22:32:13 2026
***************
*** 1,4 ****
! /* REQUIRED_ARGS: -preview=bitfields
   * TEST_OUTPUT:
  ---
  fail_compilation/biterrors4.d(109): Error: cannot take address of bitfield `s.a`
--- 1,4 ----
! /*
   * TEST_OUTPUT:
  ---
  fail_compilation/biterrors4.d(109): Error: cannot take address of bitfield `s.a`
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/biterrors5.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/biterrors5.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/biterrors5.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/biterrors5.d	Sun Feb  8 22:32:13 2026
***************
*** 1,4 ****
! /* REQUIRED_ARGS: -preview=bitfields
   * TEST_OUTPUT:
  ---
  fail_compilation/biterrors5.d(25): Error: bitfield symbol expected not struct `biterrors5.S`
--- 1,4 ----
! /*
   * TEST_OUTPUT:
  ---
  fail_compilation/biterrors5.d(25): Error: bitfield symbol expected not struct `biterrors5.S`
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/bitintro.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/bitintro.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/bitintro.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/bitintro.d	Sun Feb  8 22:32:13 2026
***************
*** 1,4 ****
! /* REQUIRED_ARGS: -preview=bitfields
   */
  
  struct S
--- 1,4 ----
! /*
   */
  
  struct S
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/bug15613.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/bug15613.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/bug15613.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/bug15613.d	Sun Feb  8 22:32:13 2026
***************
*** 1,12 ****
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/bug15613.d(18): Error: function `f` is not callable using argument types `(typeof(null))`
! fail_compilation/bug15613.d(18):        cannot pass argument `null` of type `typeof(null)` to parameter `int...`
! fail_compilation/bug15613.d(13):        `bug15613.f(int...)` declared here
! fail_compilation/bug15613.d(19): Error: function `g` is not callable using argument types `(int)`
! fail_compilation/bug15613.d(19):        cannot pass argument `8` of type `int` to parameter `Object`
! fail_compilation/bug15613.d(14):        `bug15613.g(Object, ...)` declared here
  ---
  */
  
--- 1,15 ----
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/bug15613.d(21): Error: function `f` is not callable using argument types `(typeof(null))`
! fail_compilation/bug15613.d(21):        cannot pass argument `null` of type `typeof(null)` to parameter `int...`
! fail_compilation/bug15613.d(16):        `bug15613.f(int...)` declared here
! fail_compilation/bug15613.d(22): Error: function `f` is not callable using argument types `()`
! fail_compilation/bug15613.d(22):        expected an argument for parameter `int...`
! fail_compilation/bug15613.d(16):        `bug15613.f(int...)` declared here
! fail_compilation/bug15613.d(23): Error: function `g` is not callable using argument types `(int)`
! fail_compilation/bug15613.d(23):        cannot pass argument `8` of type `int` to parameter `Object`
! fail_compilation/bug15613.d(17):        `bug15613.g(Object, ...)` declared here
  ---
  */
  
*************** void g(Object, ...);
*** 16,24 ****
--- 19,29 ----
  void main()
  {
      f(null);
+     f();
      g(8);
  }
  
+ #line 22
  /*
  TEST_OUTPUT:
  ---
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/bug8150b.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/bug8150b.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/bug8150b.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/bug8150b.d	Sun Feb  8 22:32:13 2026
***************
*** 3,10 ****
  TEST_OUTPUT:
  ---
  fail_compilation/bug8150b.d(15): Error: `object.Exception` is thrown but not caught
! fail_compilation/bug8150b.d(13): Error: constructor `bug8150b.Foo.__ctor!().this` may throw but is marked as `nothrow`
! fail_compilation/bug8150b.d(20): Error: template instance `bug8150b.Foo.__ctor!()` error instantiating
  ---
  */
  
--- 3,10 ----
  TEST_OUTPUT:
  ---
  fail_compilation/bug8150b.d(15): Error: `object.Exception` is thrown but not caught
! fail_compilation/bug8150b.d(13): Error: constructor `bug8150b.Foo.this!().this` may throw but is marked as `nothrow`
! fail_compilation/bug8150b.d(20): Error: template instance `bug8150b.Foo.this!()` error instantiating
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/cast_system.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/cast_system.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/cast_system.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/cast_system.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,37 ----
+ /*
+ REQUIRED_ARGS: -preview=systemVariables
+ TEST_OUTPUT:
+ ---
+ fail_compilation/cast_system.d(31): Error: cast from `int[1]` to `UniqueInt` is not allowed in a `@safe` function
+ fail_compilation/cast_system.d(31):        Target element type has unsafe bit patterns
+ ---
+ */
+ 
+ struct UniqueInt
+ {
+     @system int n;
+ 
+     this(int n) @safe
+     {
+         this.n = n;
+     }
+ 
+     @disable this(ref inout UniqueInt) inout;
+ 
+     ~this() @trusted
+     {
+         this.n = 0;
+     }
+ }
+ 
+ void main() @safe
+ {
+     auto s = cast(UniqueInt) 7; // OK, calls ctor
+     int[1] a;
+     s = cast(UniqueInt) a; // doesn't call ctor
+ }
+ 
+ void ok() @safe
+ {
+     auto b = cast(bool) 7; // OK
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/covariant_override.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/covariant_override.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/covariant_override.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/covariant_override.d	Sun Feb  8 22:32:13 2026
*************** https://issues.dlang.org/show_bug.cgi?id
*** 3,11 ****
  
  TEST_OUTPUT:
  ---
! fail_compilation/covariant_override.d(23): Error: function `@safe void covariant_override.CI.f(void delegate() @safe dg)` does not override any function, did you mean to override `@safe void covariant_override.I.f(void delegate() @system dg)`?
! fail_compilation/covariant_override.d(34): Error: function `@safe void covariant_override.CA.f(void delegate() @safe dg)` does not override any function, did you mean to override `@safe void covariant_override.A.f(void delegate() @system dg)`?
! fail_compilation/covariant_override.d(20): Error: class `covariant_override.CI` interface function `void f(void delegate() @system dg) @safe` is not implemented
  ---
  ++/
  
--- 3,13 ----
  
  TEST_OUTPUT:
  ---
! fail_compilation/covariant_override.d(25): Error: function `@safe void covariant_override.CI.f(void delegate() @safe dg)` does not override any function
! fail_compilation/covariant_override.d(19):        did you mean to override `@safe void covariant_override.I.f(void delegate() @system dg)`?
! fail_compilation/covariant_override.d(36): Error: function `@safe void covariant_override.CA.f(void delegate() @safe dg)` does not override any function
! fail_compilation/covariant_override.d(30):        did you mean to override `@safe void covariant_override.A.f(void delegate() @system dg)`?
! fail_compilation/covariant_override.d(22): Error: class `covariant_override.CI` interface function `void f(void delegate() @system dg) @safe` is not implemented
  ---
  ++/
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/dbitfields.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/dbitfields.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/dbitfields.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/dbitfields.d	Sun Feb  8 22:32:13 2026
***************
*** 1,4 ****
! /* REQUIRED_ARGS: -preview=bitfields
   * TEST_OUTPUT:
  ---
  fail_compilation/dbitfields.d(118): Error: reinterpretation through overlapped field `e` is not allowed in CTFE
--- 1,4 ----
! /*
   * TEST_OUTPUT:
  ---
  fail_compilation/dbitfields.d(118): Error: reinterpretation through overlapped field `e` is not allowed in CTFE
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/diag23295.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/diag23295.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/diag23295.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/diag23295.d	Sun Feb  8 22:32:13 2026
*************** REQUIRED_ARGS: -preview=dip1000
*** 3,12 ****
  TEST_OUTPUT:
  ---
  fail_compilation/diag23295.d(21): Error: assigning scope variable `x` to non-scope parameter `y` calling `foo` is not allowed in a `@safe` function
! fail_compilation/diag23295.d(32):        which is assigned to non-scope parameter `z`
! fail_compilation/diag23295.d(34):        which is not `scope` because of `f = & z`
  fail_compilation/diag23295.d(24): Error: assigning scope variable `ex` to non-scope parameter `e` calling `thro` is not allowed in a `@safe` function
! fail_compilation/diag23295.d(39):        which is not `scope` because of `throw e`
  ---
  */
  
--- 3,12 ----
  TEST_OUTPUT:
  ---
  fail_compilation/diag23295.d(21): Error: assigning scope variable `x` to non-scope parameter `y` calling `foo` is not allowed in a `@safe` function
! fail_compilation/diag23295.d(32):        `y` is assigned to non-scope parameter `z`
! fail_compilation/diag23295.d(34):        `z` is not `scope` because of `f = & z`
  fail_compilation/diag23295.d(24): Error: assigning scope variable `ex` to non-scope parameter `e` calling `thro` is not allowed in a `@safe` function
! fail_compilation/diag23295.d(39):        `e` is not `scope` because of `throw e`
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/diag9191.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/diag9191.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/diag9191.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/diag9191.d	Sun Feb  8 22:32:13 2026
***************
*** 1,10 ****
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/diag9191.d(16): Error: function `void diag9191.C1.aaa()` does not override any function, did you mean to override `void diag9191.B1.aa()`?
! fail_compilation/diag9191.d(22): Error: function `diag9191.C2.aaa` does not override any function
! fail_compilation/diag9191.d(33): Error: function `void diag9191.C3.foo()` does not override any function, did you mean to override `void diag9191.B2._foo()`?
! fail_compilation/diag9191.d(38): Error: function `void diag9191.C4.toStringa()` does not override any function, did you mean to override `string object.Object.toString()`?
  ---
  */
  
--- 1,13 ----
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/diag9191.d(19): Error: function `void diag9191.C1.aaa()` does not override any function
! fail_compilation/diag9191.d(15):        did you mean to override `void diag9191.B1.aa()`?
! fail_compilation/diag9191.d(25): Error: function `diag9191.C2.aaa` does not override any function
! fail_compilation/diag9191.d(36): Error: function `void diag9191.C3.foo()` does not override any function
! fail_compilation/diag9191.d(31):        did you mean to override `void diag9191.B2._foo()`?
! fail_compilation/diag9191.d(41): Error: function `void diag9191.C4.toStringa()` does not override any function
! $p:druntime/import/object.d$($n$):        did you mean to override `string object.Object.toString()`?
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/edition_switch.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/edition_switch.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/edition_switch.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/edition_switch.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,10 ----
+ /*
+ REQUIRED_ARGS: -edition=2024
+ TEST_OUTPUT:
+ ---
+ fail_compilation/edition_switch.d(10): Error: usage of identifer `body` as a keyword is obsolete. Use `do` instead.
+ ---
+ */
+ 
+ void test()
+ in { } body { }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail12901.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail12901.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail12901.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail12901.d	Thu Jan  1 00:00:00 1970
***************
*** 1,14 ****
- /*
- TEST_OUTPUT:
- ---
- fail_compilation/fail12901.d(11): Error: constructor `fail12901.S.this` `in` and `out` contracts can only appear without a body when they are virtual interface functions or abstract
- ---
- */
- 
- struct S
- {
-     int a;
-     this(int n)
-     in { a = n; }
-     // no body
- }
--- 0 ----
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail18093.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail18093.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail18093.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail18093.d	Sun Feb  8 22:32:13 2026
***************
*** 1,8 ****
  /* TEST_OUTPUT:
  ---
! fail_compilation/fail18093.d(19): Error: function `void fail18093.GenericTransitiveVisitor!(ASTCodegen).GenericTransitiveVisitor.ParseVisitMethods!(ASTCodegen).visit()` does not override any function, did you mean to override `extern (C++) void fail18093.ParseTimeVisitor!(ASTCodegen).ParseTimeVisitor.visit()`?
! fail_compilation/fail18093.d(24): Error: mixin `fail18093.GenericTransitiveVisitor!(ASTCodegen).GenericTransitiveVisitor.ParseVisitMethods!(ASTCodegen)` error instantiating
! fail_compilation/fail18093.d(27): Error: template instance `fail18093.GenericTransitiveVisitor!(ASTCodegen)` error instantiating
  ---
   * https://issues.dlang.org/show_bug.cgi?id=18093
   */
--- 1,9 ----
  /* TEST_OUTPUT:
  ---
! fail_compilation/fail18093.d(20): Error: function `void fail18093.GenericTransitiveVisitor!(ASTCodegen).GenericTransitiveVisitor.ParseVisitMethods!(ASTCodegen).visit()` does not override any function
! fail_compilation/fail18093.d(16):        did you mean to override `extern (C++) void fail18093.ParseTimeVisitor!(ASTCodegen).ParseTimeVisitor.visit()`?
! fail_compilation/fail18093.d(25): Error: mixin `fail18093.GenericTransitiveVisitor!(ASTCodegen).GenericTransitiveVisitor.ParseVisitMethods!(ASTCodegen)` error instantiating
! fail_compilation/fail18093.d(28): Error: template instance `fail18093.GenericTransitiveVisitor!(ASTCodegen)` error instantiating
  ---
   * https://issues.dlang.org/show_bug.cgi?id=18093
   */
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail19911a.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail19911a.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail19911a.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail19911a.d	Sun Feb  8 22:32:13 2026
***************
*** 2,8 ****
  REQUIRED_ARGS: -betterC
  TEST_OUTPUT:
  ---
! fail_compilation/fail19911a.d(9): Error: function `fail19911a.fun` D-style variadic functions cannot be used with -betterC
  ---
  */
  
--- 2,8 ----
  REQUIRED_ARGS: -betterC
  TEST_OUTPUT:
  ---
! fail_compilation/fail19911a.d(9): Error: function `fail19911a.fun` D-style variadic functions cannot be used with `-betterC`
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail222.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail222.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail222.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail222.d	Sun Feb  8 22:32:13 2026
***************
*** 2,8 ****
  TEST_OUTPUT:
  ---
  fail_compilation/fail222.d(11): Error: template `fail222.getMixin(TArg..., int i = 0)()` template sequence parameter must be the last one
! fail_compilation/fail222.d(18): Error: template instance `getMixin!()` does not match template declaration `getMixin(TArg..., int i = 0)()`
  fail_compilation/fail222.d(21): Error: template instance `fail222.Thing!()` error instantiating
  fail_compilation/fail222.d(23): Error: template `fail222.fooBar(A..., B...)()` template sequence parameter must be the last one
  ---
--- 2,8 ----
  TEST_OUTPUT:
  ---
  fail_compilation/fail222.d(11): Error: template `fail222.getMixin(TArg..., int i = 0)()` template sequence parameter must be the last one
! fail_compilation/fail222.d(18): Error: template instance `getMixin!()` does not match template declaration `getMixin(TArg..., int i = 0)`
  fail_compilation/fail222.d(21): Error: template instance `fail222.Thing!()` error instantiating
  fail_compilation/fail222.d(23): Error: template `fail222.fooBar(A..., B...)()` template sequence parameter must be the last one
  ---
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail22351.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail22351.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail22351.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail22351.d	Sun Feb  8 22:32:13 2026
***************
*** 2,10 ****
  REQUIRED_ARGS: -de
  TEST_OUTPUT:
  ---
! fail_compilation/fail22351.d(18): Deprecation: overriding `extern(C++)` function `fail22351.C22351.func(int*)` with `const` qualified function `fail22351.Fail22351.func(const(int*))` is deprecated
! fail_compilation/fail22351.d(18):        Either remove `override`, or adjust the `const` qualifiers of the overriding function parameters
! fail_compilation/fail22351.d(19): Error: function `extern (C++) void fail22351.Fail22351.func(const(int*)**)` does not override any function, did you mean to override `extern (C++) void fail22351.C22351.func(int*)`?
  ---
  */
  extern(C++) class C22351
--- 2,11 ----
  REQUIRED_ARGS: -de
  TEST_OUTPUT:
  ---
! fail_compilation/fail22351.d(19): Deprecation: overriding `extern(C++)` function `fail22351.C22351.func(int*)` with `const` qualified function `fail22351.Fail22351.func(const(int*))` is deprecated
! fail_compilation/fail22351.d(19):        Either remove `override`, or adjust the `const` qualifiers of the overriding function parameters
! fail_compilation/fail22351.d(20): Error: function `extern (C++) void fail22351.Fail22351.func(const(int*)**)` does not override any function
! fail_compilation/fail22351.d(13):        did you mean to override `extern (C++) void fail22351.C22351.func(int*)`?
  ---
  */
  extern(C++) class C22351
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail24208.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail24208.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail24208.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail24208.d	Sun Feb  8 22:32:13 2026
*************** REQUIRED_ARGS: -preview=dip1000
*** 3,9 ****
  TEST_OUTPUT:
  ---
  fail_compilation/fail24208.d(19): Error: assigning reference to local variable `n` to non-scope parameter `p` calling `escape` is not allowed in a `@safe` function
! fail_compilation/fail24208.d(15):        which is not `scope` because of `escaped = p`
  ---
  +/
  void test() @safe
--- 3,9 ----
  TEST_OUTPUT:
  ---
  fail_compilation/fail24208.d(19): Error: assigning reference to local variable `n` to non-scope parameter `p` calling `escape` is not allowed in a `@safe` function
! fail_compilation/fail24208.d(15):        `p` is not `scope` because of `escaped = p`
  ---
  +/
  void test() @safe
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail246.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail246.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail246.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail246.d	Sun Feb  8 22:32:13 2026
***************
*** 1,8 ****
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail246.d-mixin-11(11): Error: identifier expected, not `End of File`
! fail_compilation/fail246.d-mixin-11(11): Error: `;` expected after `mixin`
  ---
  */
  
--- 1,9 ----
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail246.d-mixin-12(12): Error: identifier expected, not `End of File`
! fail_compilation/fail246.d-mixin-12(12): Error: `;` expected after `mixin`
! fail_compilation/fail246.d-mixin-12(12):        while parsing string mixin statement
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail262.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail262.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail262.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail262.d	Sun Feb  8 22:32:13 2026
***************
*** 1,7 ****
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail262.d(23): Error: function `const void fail262.B.f()` does not override any function, did you mean to override `shared const void fail262.A.f()`?
  ---
  */
  
--- 1,8 ----
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail262.d(24): Error: function `const void fail262.B.f()` does not override any function
! fail_compilation/fail262.d(16):        did you mean to override `shared const void fail262.A.f()`?
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail265.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail265.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail265.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail265.d	Sun Feb  8 22:32:13 2026
***************
*** 1,7 ****
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail265.d-mixin-10(10): Error: found `End of File` instead of statement
  ---
  */
  
--- 1,8 ----
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail265.d-mixin-11(11): Error: found `End of File` instead of statement
! fail_compilation/fail265.d-mixin-11(11):        while parsing string mixin statement
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375a.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375a.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375a.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375a.d	Sun Feb  8 22:32:13 2026
***************
*** 1,11 ****
- // REQUIRED_ARGS: -w
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375a.d(16): Warning: else is dangling, add { } after condition at fail_compilation/fail4375a.d(13)
! Error: warnings are treated as errors
!        Use -wi if you wish to treat warnings only as informational.
  ---
  */
  
--- 1,8 ----
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375a.d(13): Error: else is dangling, add { } after condition at fail_compilation/fail4375a.d(10)
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375b.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375b.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375b.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375b.d	Sun Feb  8 22:32:13 2026
***************
*** 1,11 ****
- // REQUIRED_ARGS: -w
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375b.d(18): Warning: else is dangling, add { } after condition at fail_compilation/fail4375b.d(14)
! Error: warnings are treated as errors
!        Use -wi if you wish to treat warnings only as informational.
  ---
  */
  
--- 1,8 ----
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375b.d(15): Error: else is dangling, add { } after condition at fail_compilation/fail4375b.d(11)
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375c.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375c.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375c.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375c.d	Sun Feb  8 22:32:13 2026
***************
*** 1,11 ****
- // REQUIRED_ARGS: -w
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375c.d(17): Warning: else is dangling, add { } after condition at fail_compilation/fail4375c.d(13)
! Error: warnings are treated as errors
!        Use -wi if you wish to treat warnings only as informational.
  ---
  */
  
--- 1,8 ----
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375c.d(14): Error: else is dangling, add { } after condition at fail_compilation/fail4375c.d(10)
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375d.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375d.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375d.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375d.d	Sun Feb  8 22:32:13 2026
***************
*** 1,11 ****
- // REQUIRED_ARGS: -w
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375d.d(17): Warning: else is dangling, add { } after condition at fail_compilation/fail4375d.d(13)
! Error: warnings are treated as errors
!        Use -wi if you wish to treat warnings only as informational.
  ---
  */
  
--- 1,8 ----
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375d.d(14): Error: else is dangling, add { } after condition at fail_compilation/fail4375d.d(10)
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375e.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375e.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375e.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375e.d	Sun Feb  8 22:32:13 2026
***************
*** 1,11 ****
- // REQUIRED_ARGS: -w
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375e.d(16): Warning: else is dangling, add { } after condition at fail_compilation/fail4375e.d(13)
! Error: warnings are treated as errors
!        Use -wi if you wish to treat warnings only as informational.
  ---
  */
  
--- 1,8 ----
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375e.d(13): Error: else is dangling, add { } after condition at fail_compilation/fail4375e.d(10)
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375f.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375f.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375f.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375f.d	Sun Feb  8 22:32:13 2026
***************
*** 1,11 ****
- // REQUIRED_ARGS: -w
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375f.d(16): Warning: else is dangling, add { } after condition at fail_compilation/fail4375f.d(13)
! Error: warnings are treated as errors
!        Use -wi if you wish to treat warnings only as informational.
  ---
  */
  
--- 1,8 ----
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375f.d(13): Error: else is dangling, add { } after condition at fail_compilation/fail4375f.d(10)
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375g.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375g.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375g.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375g.d	Sun Feb  8 22:32:13 2026
***************
*** 1,11 ****
- // REQUIRED_ARGS: -w
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375g.d(16): Warning: else is dangling, add { } after condition at fail_compilation/fail4375g.d(13)
! Error: warnings are treated as errors
!        Use -wi if you wish to treat warnings only as informational.
  ---
  */
  
--- 1,8 ----
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375g.d(13): Error: else is dangling, add { } after condition at fail_compilation/fail4375g.d(10)
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375h.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375h.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375h.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375h.d	Sun Feb  8 22:32:13 2026
***************
*** 1,11 ****
- // REQUIRED_ARGS: -w
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375h.d(18): Warning: else is dangling, add { } after condition at fail_compilation/fail4375h.d(15)
! Error: warnings are treated as errors
!        Use -wi if you wish to treat warnings only as informational.
  ---
  */
  
--- 1,8 ----
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375h.d(15): Error: else is dangling, add { } after condition at fail_compilation/fail4375h.d(12)
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375i.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375i.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375i.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375i.d	Sun Feb  8 22:32:13 2026
***************
*** 1,11 ****
- // REQUIRED_ARGS: -w
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375i.d(18): Warning: else is dangling, add { } after condition at fail_compilation/fail4375i.d(13)
! Error: warnings are treated as errors
!        Use -wi if you wish to treat warnings only as informational.
  ---
  */
  
--- 1,8 ----
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375i.d(15): Error: else is dangling, add { } after condition at fail_compilation/fail4375i.d(10)
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375j.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375j.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375j.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375j.d	Sun Feb  8 22:32:13 2026
***************
*** 1,11 ****
- // REQUIRED_ARGS: -w
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375j.d(18): Warning: else is dangling, add { } after condition at fail_compilation/fail4375j.d(13)
! Error: warnings are treated as errors
!        Use -wi if you wish to treat warnings only as informational.
  ---
  */
  
--- 1,8 ----
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375j.d(15): Error: else is dangling, add { } after condition at fail_compilation/fail4375j.d(10)
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375k.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375k.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375k.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375k.d	Sun Feb  8 22:32:13 2026
***************
*** 1,11 ****
- // REQUIRED_ARGS: -w
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375k.d-mixin-13(17): Warning: else is dangling, add { } after condition at fail_compilation/fail4375k.d-mixin-13(14)
! Error: warnings are treated as errors
!        Use -wi if you wish to treat warnings only as informational.
  ---
  */
  
--- 1,9 ----
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375k.d-mixin-11(15): Error: else is dangling, add { } after condition at fail_compilation/fail4375k.d-mixin-11(12)
! fail_compilation/fail4375k.d-mixin-11(12):        while parsing string mixin statement
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375l.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375l.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375l.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375l.d	Sun Feb  8 22:32:13 2026
***************
*** 1,11 ****
- // REQUIRED_ARGS: -w
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375l.d(17): Warning: else is dangling, add { } after condition at fail_compilation/fail4375l.d(13)
! Error: warnings are treated as errors
!        Use -wi if you wish to treat warnings only as informational.
  ---
  */
  
--- 1,8 ----
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375l.d(14): Error: else is dangling, add { } after condition at fail_compilation/fail4375l.d(10)
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375m.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375m.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375m.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375m.d	Sun Feb  8 22:32:13 2026
***************
*** 1,11 ****
- // REQUIRED_ARGS: -w
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375m.d(17): Warning: else is dangling, add { } after condition at fail_compilation/fail4375m.d(14)
! Error: warnings are treated as errors
!        Use -wi if you wish to treat warnings only as informational.
  ---
  */
  
--- 1,8 ----
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375m.d(14): Error: else is dangling, add { } after condition at fail_compilation/fail4375m.d(11)
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375o.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375o.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375o.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375o.d	Sun Feb  8 22:32:13 2026
***************
*** 1,11 ****
- // REQUIRED_ARGS: -w
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375o.d(17): Warning: else is dangling, add { } after condition at fail_compilation/fail4375o.d(13)
! Error: warnings are treated as errors
!        Use -wi if you wish to treat warnings only as informational.
  ---
  */
  
--- 1,8 ----
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375o.d(14): Error: else is dangling, add { } after condition at fail_compilation/fail4375o.d(10)
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375p.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375p.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375p.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375p.d	Sun Feb  8 22:32:13 2026
***************
*** 1,10 ****
- // REQUIRED_ARGS: -w
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375p.d(19): Warning: else is dangling, add { } after condition at fail_compilation/fail4375p.d(12)
! fail_compilation/fail4375p.d(16): Error: undefined identifier `x`
  ---
  */
  
--- 1,8 ----
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375p.d(17): Error: else is dangling, add { } after condition at fail_compilation/fail4375p.d(10)
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375q.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375q.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375q.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375q.d	Sun Feb  8 22:32:13 2026
***************
*** 1,10 ****
- // REQUIRED_ARGS: -w
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375q.d(17): Warning: else is dangling, add { } after condition at fail_compilation/fail4375q.d(13)
! fail_compilation/fail4375q.d(14): Error: `with` expression types must be enums or aggregates or pointers to them, not `int`
  ---
  */
  
--- 1,8 ----
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375q.d(15): Error: else is dangling, add { } after condition at fail_compilation/fail4375q.d(11)
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375r.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375r.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375r.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375r.d	Sun Feb  8 22:32:13 2026
***************
*** 1,11 ****
- // REQUIRED_ARGS: -w
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375r.d(19): Warning: else is dangling, add { } after condition at fail_compilation/fail4375r.d(13)
! Error: warnings are treated as errors
!        Use -wi if you wish to treat warnings only as informational.
  ---
  */
  
--- 1,8 ----
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375r.d(16): Error: else is dangling, add { } after condition at fail_compilation/fail4375r.d(10)
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375s.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375s.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375s.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375s.d	Sun Feb  8 22:32:13 2026
***************
*** 1,11 ****
- // REQUIRED_ARGS: -w
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375s.d(19): Warning: else is dangling, add { } after condition at fail_compilation/fail4375s.d(13)
! Error: warnings are treated as errors
!        Use -wi if you wish to treat warnings only as informational.
  ---
  */
  
--- 1,8 ----
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375s.d(16): Error: else is dangling, add { } after condition at fail_compilation/fail4375s.d(10)
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375t.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375t.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375t.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375t.d	Sun Feb  8 22:32:13 2026
***************
*** 1,11 ****
! // REQUIRED_ARGS: -w -unittest
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375t.d(16): Warning: else is dangling, add { } after condition at fail_compilation/fail4375t.d(13)
! Error: warnings are treated as errors
!        Use -wi if you wish to treat warnings only as informational.
  ---
  */
  
--- 1,9 ----
! // REQUIRED_ARGS: -unittest
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375t.d(14): Error: else is dangling, add { } after condition at fail_compilation/fail4375t.d(11)
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375u.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375u.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375u.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375u.d	Sun Feb  8 22:32:13 2026
***************
*** 1,11 ****
- // REQUIRED_ARGS: -w
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375u.d(15): Warning: else is dangling, add { } after condition at fail_compilation/fail4375u.d(13)
! Error: warnings are treated as errors
!        Use -wi if you wish to treat warnings only as informational.
  ---
  */
  
--- 1,8 ----
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375u.d(12): Error: else is dangling, add { } after condition at fail_compilation/fail4375u.d(10)
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375v.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375v.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375v.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375v.d	Sun Feb  8 22:32:13 2026
***************
*** 1,11 ****
- // REQUIRED_ARGS: -w
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375v.d(15): Warning: else is dangling, add { } after condition at fail_compilation/fail4375v.d(13)
! Error: warnings are treated as errors
!        Use -wi if you wish to treat warnings only as informational.
  ---
  */
  
--- 1,8 ----
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375v.d(12): Error: else is dangling, add { } after condition at fail_compilation/fail4375v.d(10)
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375w.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375w.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375w.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375w.d	Sun Feb  8 22:32:13 2026
***************
*** 1,11 ****
- // REQUIRED_ARGS: -w
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375w.d(15): Warning: else is dangling, add { } after condition at fail_compilation/fail4375w.d(13)
! Error: warnings are treated as errors
!        Use -wi if you wish to treat warnings only as informational.
  ---
  */
  
--- 1,8 ----
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375w.d(12): Error: else is dangling, add { } after condition at fail_compilation/fail4375w.d(10)
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375x.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375x.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375x.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375x.d	Sun Feb  8 22:32:13 2026
***************
*** 1,11 ****
- // REQUIRED_ARGS: -w
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375x.d(16): Warning: else is dangling, add { } after condition at fail_compilation/fail4375x.d(13)
! Error: warnings are treated as errors
!        Use -wi if you wish to treat warnings only as informational.
  ---
  */
  
--- 1,8 ----
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375x.d(13): Error: else is dangling, add { } after condition at fail_compilation/fail4375x.d(10)
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375y.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375y.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4375y.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4375y.d	Sun Feb  8 22:32:13 2026
***************
*** 1,11 ****
- // REQUIRED_ARGS: -w
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375y.d(18): Warning: else is dangling, add { } after condition at fail_compilation/fail4375y.d(13)
! Error: warnings are treated as errors
!        Use -wi if you wish to treat warnings only as informational.
  ---
  */
  
--- 1,8 ----
  // https://issues.dlang.org/show_bug.cgi?id=4375: Dangling else
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4375y.d(15): Error: else is dangling, add { } after condition at fail_compilation/fail4375y.d(10)
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4544.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4544.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail4544.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail4544.d	Sun Feb  8 22:32:13 2026
***************
*** 1,11 ****
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4544.d(15): Error: character constant has multiple characters
  fail_compilation/fail4544.d(16): Error: `0x` isn't a valid integer literal, use `0x0` instead
  fail_compilation/fail4544.d(16): Error: variable name expected after type `int`, not `0`
  fail_compilation/fail4544.d(17): Error: unterminated character constant
! fail_compilation/fail4544.d(18): Error: character constant has multiple characters
  ---
  */
  
--- 1,11 ----
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail4544.d(15): Error: character constant has multiple characters - did you mean "asd"?
  fail_compilation/fail4544.d(16): Error: `0x` isn't a valid integer literal, use `0x0` instead
  fail_compilation/fail4544.d(16): Error: variable name expected after type `int`, not `0`
  fail_compilation/fail4544.d(17): Error: unterminated character constant
! fail_compilation/fail4544.d(18): Error: character constant has multiple characters - did you mean "asdasdsa"?
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail50.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail50.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail50.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail50.d	Sun Feb  8 22:32:13 2026
***************
*** 2,11 ****
  TEST_OUTPUT:
  ---
  fail_compilation/fail50.d(12): Error: taking the address of non-static variable `a` requires an instance of `Marko`
- fail_compilation/fail50.d(12): Error: variable `a` cannot be read at compile time
  ---
  */
  
  struct Marko
  {
      int a;
--- 2,11 ----
  TEST_OUTPUT:
  ---
  fail_compilation/fail50.d(12): Error: taking the address of non-static variable `a` requires an instance of `Marko`
  ---
  */
  
+ 
  struct Marko
  {
      int a;
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail6497.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail6497.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail6497.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail6497.d	Sun Feb  8 22:32:13 2026
***************
*** 1,9 ****
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail6497.d(13): Error: taking the address of stack-allocated local variable `n` is not allowed in a `@safe` function
! fail_compilation/fail6497.d(13): Error: taking the address of stack-allocated local variable `n` is not allowed in a `@safe` function
! fail_compilation/fail6497.d(19): Error: taking the address of local variable `i` is not allowed in a `@safe` function
  ---
  */
  
--- 1,10 ----
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail6497.d(14): Error: taking the address of stack-allocated local variable `n` is not allowed in a `@safe` function
! fail_compilation/fail6497.d(14): Error: taking the address of stack-allocated local variable `n` is not allowed in a `@safe` function
! fail_compilation/fail6497.d(20): Error: taking the address of local variable `i` is not allowed in a `@safe` function
! fail_compilation/fail6497.d(28): Error: taking the address of local variable `i` is not allowed in a `@safe` function
  ---
  */
  
*************** void f() @safe
*** 18,20 ****
--- 19,30 ----
      ref i = *new int;
      auto b = &i;
  }
+ 
+ const(int)* ptr;
+ 
+ int g() @safe
+ out (i)
+ {
+     ptr = &i;
+ }
+ do { return 0; }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail8631.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail8631.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail8631.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail8631.d	Sun Feb  8 22:32:13 2026
***************
*** 1,7 ****
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail8631.d(14): Error: function `shared const int fail8631.D.foo()` does not override any function, did you mean to override `immutable int fail8631.B.foo()`?
  ---
  */
  
--- 1,8 ----
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/fail8631.d(15): Error: function `shared const int fail8631.D.foo()` does not override any function
! fail_compilation/fail8631.d(10):        did you mean to override `immutable int fail8631.B.foo()`?
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail_contracts5.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail_contracts5.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail_contracts5.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail_contracts5.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,34 ----
+ 
+ /*
+ TEST_OUTPUT:
+ ---
+ fail_compilation/fail_contracts5.d(13): Error: constructor `fail_contracts5.S.this` `in` and `out` contracts can only appear without a body when they are virtual interface functions or abstract
+ ---
+ */
+ 
+ // bugzilla 12901
+ struct S
+ {
+     int a;
+     this(int n)
+     in { a = n; }
+     // no body
+ }
+ 
+ /*
+ TEST_OUTPUT:
+ ---
+ fail_compilation/fail_contracts5.d(33): Error: function `fail_contracts5.C2.foo` `in` and `out` contracts can only appear without a body when they are virtual interface functions or abstract
+ fail_compilation/fail_contracts5.d(32): Error: constructor `fail_contracts5.C2.this` `in` and `out` contracts can only appear without a body when they are virtual interface functions or abstract
+ ---
+ */
+ // https://github.com/dlang/dmd/issues/21403
+ abstract class C1 {}
+ 
+ class C2 : C1
+ {
+     bool member;
+ 
+     this() out (member) {}
+     final void foo() out (member) {}
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail_pretty_errors.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail_pretty_errors.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/fail_pretty_errors.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/fail_pretty_errors.d	Sun Feb  8 22:32:13 2026
***************
*** 2,24 ****
  REQUIRED_ARGS: -verrors=context
  TEST_OUTPUT:
  ---
! fail_compilation/fail_pretty_errors.d(29): Error: undefined identifier `a`
      a = 1;
      ^
! fail_compilation/fail_pretty_errors.d-mixin-34(34): Error: undefined identifier `b`
  b = 1;
  ^
! fail_compilation/fail_pretty_errors.d(39): Error: cannot implicitly convert expression `5` of type `int` to `string`
      string x = 5;
                 ^
! fail_compilation/fail_pretty_errors.d(44): Error: mixin `fail_pretty_errors.testMixin2.mixinTemplate!()` error instantiating
      mixin mixinTemplate;
      ^
! fail_compilation/fail_pretty_errors.d(50): Error: invalid array operation `"" + ""` (possible missing [])
      auto x = ""+"";
                 ^
! fail_compilation/fail_pretty_errors.d(50):        did you mean to concatenate (`"" ~ ""`) instead ?
! fail_compilation/fail_pretty_errors.d(53): Error: cannot implicitly convert expression `1111` of type `int` to `byte`
          byte ɑ =    1111;
                      ^
  ---
--- 2,26 ----
  REQUIRED_ARGS: -verrors=context
  TEST_OUTPUT:
  ---
! fail_compilation/fail_pretty_errors.d(31): Error: undefined identifier `a`
      a = 1;
      ^
! fail_compilation/fail_pretty_errors.d-mixin-36(36): Error: undefined identifier `b`
  b = 1;
  ^
! fail_compilation/fail_pretty_errors.d(41): Error: cannot implicitly convert expression `5` of type `int` to `string`
      string x = 5;
                 ^
! fail_compilation/fail_pretty_errors.d(46): Error: mixin `fail_pretty_errors.testMixin2.mixinTemplate!()` error instantiating
      mixin mixinTemplate;
      ^
! fail_compilation/fail_pretty_errors.d(52): Error: invalid array operation `"" + ""` (possible missing [])
      auto x = ""+"";
                 ^
! fail_compilation/fail_pretty_errors.d(52):        did you mean to concatenate (`"" ~ ""`) instead ?
!     auto x = ""+"";
!                ^
! fail_compilation/fail_pretty_errors.d(55): Error: cannot implicitly convert expression `1111` of type `int` to `byte`
          byte ɑ =    1111;
                      ^
  ---
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/failexpression1.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/failexpression1.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/failexpression1.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/failexpression1.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,154 ----
+ /*
+ REQUIRED_ARGS: -de
+ TEST_OUTPUT:
+ ---
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `byte += float` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `byte -= float` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `byte *= float` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `byte /= float` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `byte %= float` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `byte += double` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `byte -= double` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `byte *= double` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `byte /= double` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `byte %= double` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `byte += real` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `byte -= real` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `byte *= real` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `byte /= real` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `byte %= real` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `ubyte += float` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `ubyte -= float` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `ubyte *= float` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `ubyte /= float` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `ubyte %= float` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `ubyte += double` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `ubyte -= double` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `ubyte *= double` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `ubyte /= double` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `ubyte %= double` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `ubyte += real` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `ubyte -= real` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `ubyte *= real` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `ubyte /= real` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `ubyte %= real` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `short += float` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `short -= float` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `short *= float` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `short /= float` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `short %= float` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `short += double` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `short -= double` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `short *= double` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `short /= double` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `short %= double` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `short += real` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `short -= real` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `short *= real` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `short /= real` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `short %= real` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `ushort += float` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `ushort -= float` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `ushort *= float` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `ushort /= float` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `ushort %= float` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `ushort += double` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `ushort -= double` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `ushort *= double` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `ushort /= double` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `ushort %= double` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `ushort += real` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `ushort -= real` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `ushort *= real` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `ushort /= real` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `ushort %= real` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `int += float` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `int -= float` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `int *= float` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `int /= float` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `int %= float` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `int += double` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `int -= double` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `int *= double` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `int /= double` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `int %= double` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `int += real` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `int -= real` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `int *= real` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `int /= real` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `int %= real` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `uint += float` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `uint -= float` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `uint *= float` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `uint /= float` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `uint %= float` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `uint += double` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `uint -= double` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `uint *= double` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `uint /= double` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `uint %= double` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `uint += real` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `uint -= real` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `uint *= real` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `uint /= real` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `uint %= real` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `long += float` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `long -= float` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `long *= float` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `long /= float` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `long %= float` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `long += double` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `long -= double` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `long *= double` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `long /= double` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `long %= double` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `long += real` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `long -= real` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `long *= real` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `long /= real` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `long %= real` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `ulong += float` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `ulong -= float` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `ulong *= float` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `ulong /= float` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `ulong %= float` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `ulong += double` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `ulong -= double` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `ulong *= double` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `ulong /= double` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `ulong %= double` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `ulong += real` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `ulong -= real` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `ulong *= real` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `ulong /= real` is performing truncating conversion
+ fail_compilation/failexpression1.d-mixin-138(138): Deprecation: `ulong %= real` is performing truncating conversion
+ fail_compilation/failexpression1.d(148): Error: template instance `failexpression1.X!(integral, floating, arith)` error instantiating
+ fail_compilation/failexpression1.d(153):        instantiated from here: `OpAssignCases!(TestOpAssign)`
+ ---
+ */
+ template TT(T...) { alias T TT; }
+ 
+ void TestOpAssign(Tx, Ux, ops)()
+ {
+     foreach(T; Tx.x)
+     foreach(U; Ux.x)
+     foreach(op; ops.x)
+     {
+         T a = cast(T)1;
+         mixin("a " ~ op ~ " cast(U)1;");
+     }
+ }
+ 
+ struct integral  { alias TT!(byte, ubyte, short, ushort, int, uint, long, ulong) x; }
+ struct floating  { alias TT!(float, double, real) x; }
+ struct arith     { alias TT!("+=", "-=", "*=", "/=", "%=") x; }
+ 
+ void OpAssignCases(alias X)()
+ {
+     X!(integral, floating, arith)();
+ }
+ 
+ void main()
+ {
+     OpAssignCases!TestOpAssign();
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/failexpression2.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/failexpression2.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/failexpression2.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/failexpression2.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,156 ----
+ /*
+ REQUIRED_ARGS: -de
+ TEST_OUTPUT:
+ ---
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `byte += float` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `byte -= float` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `byte *= float` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `byte /= float` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `byte %= float` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `byte += double` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `byte -= double` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `byte *= double` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `byte /= double` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `byte %= double` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `byte += real` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `byte -= real` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `byte *= real` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `byte /= real` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `byte %= real` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `ubyte += float` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `ubyte -= float` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `ubyte *= float` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `ubyte /= float` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `ubyte %= float` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `ubyte += double` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `ubyte -= double` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `ubyte *= double` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `ubyte /= double` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `ubyte %= double` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `ubyte += real` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `ubyte -= real` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `ubyte *= real` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `ubyte /= real` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `ubyte %= real` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `short += float` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `short -= float` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `short *= float` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `short /= float` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `short %= float` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `short += double` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `short -= double` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `short *= double` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `short /= double` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `short %= double` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `short += real` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `short -= real` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `short *= real` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `short /= real` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `short %= real` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `ushort += float` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `ushort -= float` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `ushort *= float` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `ushort /= float` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `ushort %= float` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `ushort += double` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `ushort -= double` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `ushort *= double` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `ushort /= double` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `ushort %= double` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `ushort += real` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `ushort -= real` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `ushort *= real` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `ushort /= real` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `ushort %= real` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `int += float` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `int -= float` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `int *= float` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `int /= float` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `int %= float` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `int += double` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `int -= double` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `int *= double` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `int /= double` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `int %= double` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `int += real` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `int -= real` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `int *= real` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `int /= real` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `int %= real` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `uint += float` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `uint -= float` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `uint *= float` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `uint /= float` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `uint %= float` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `uint += double` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `uint -= double` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `uint *= double` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `uint /= double` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `uint %= double` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `uint += real` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `uint -= real` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `uint *= real` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `uint /= real` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `uint %= real` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `long += float` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `long -= float` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `long *= float` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `long /= float` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `long %= float` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `long += double` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `long -= double` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `long *= double` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `long /= double` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `long %= double` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `long += real` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `long -= real` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `long *= real` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `long /= real` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `long %= real` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `ulong += float` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `ulong -= float` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `ulong *= float` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `ulong /= float` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `ulong %= float` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `ulong += double` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `ulong -= double` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `ulong *= double` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `ulong /= double` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `ulong %= double` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `ulong += real` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `ulong -= real` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `ulong *= real` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `ulong /= real` is performing truncating conversion
+ fail_compilation/failexpression2.d-mixin-140(140): Deprecation: `ulong %= real` is performing truncating conversion
+ fail_compilation/failexpression2.d(150): Error: template instance `failexpression2.X!(integral, floating, arith)` error instantiating
+ fail_compilation/failexpression2.d(155):        instantiated from here: `OpAssignCases!(TestOpAssignAssign)`
+ ---
+ */
+ template TT(T...) { alias T TT; }
+ 
+ void TestOpAssignAssign(Tx, Ux, ops)()
+ {
+     foreach(T; Tx.x)
+     foreach(U; Ux.x)
+     foreach(op; ops.x)
+     {
+         T a = cast(T)1;
+         U b = cast(U)1;
+         T r;
+         mixin("r = a " ~ op ~ " cast(U)1;");
+     }
+ }
+ 
+ struct integral  { alias TT!(byte, ubyte, short, ushort, int, uint, long, ulong) x; }
+ struct floating  { alias TT!(float, double, real) x; }
+ struct arith     { alias TT!("+=", "-=", "*=", "/=", "%=") x; }
+ 
+ void OpAssignCases(alias X)()
+ {
+     X!(integral, floating, arith)();
+ }
+ 
+ void main()
+ {
+     OpAssignCases!TestOpAssignAssign(); // was once disabled due to bug 7436
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/failexpression3.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/failexpression3.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/failexpression3.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/failexpression3.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,155 ----
+ /*
+ REQUIRED_ARGS: -de
+ TEST_OUTPUT:
+ ---
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `byte += float` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `byte -= float` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `byte *= float` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `byte /= float` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `byte %= float` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `byte += double` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `byte -= double` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `byte *= double` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `byte /= double` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `byte %= double` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `byte += real` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `byte -= real` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `byte *= real` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `byte /= real` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `byte %= real` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `ubyte += float` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `ubyte -= float` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `ubyte *= float` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `ubyte /= float` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `ubyte %= float` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `ubyte += double` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `ubyte -= double` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `ubyte *= double` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `ubyte /= double` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `ubyte %= double` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `ubyte += real` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `ubyte -= real` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `ubyte *= real` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `ubyte /= real` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `ubyte %= real` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `short += float` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `short -= float` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `short *= float` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `short /= float` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `short %= float` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `short += double` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `short -= double` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `short *= double` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `short /= double` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `short %= double` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `short += real` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `short -= real` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `short *= real` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `short /= real` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `short %= real` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `ushort += float` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `ushort -= float` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `ushort *= float` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `ushort /= float` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `ushort %= float` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `ushort += double` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `ushort -= double` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `ushort *= double` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `ushort /= double` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `ushort %= double` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `ushort += real` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `ushort -= real` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `ushort *= real` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `ushort /= real` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `ushort %= real` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `int += float` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `int -= float` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `int *= float` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `int /= float` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `int %= float` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `int += double` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `int -= double` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `int *= double` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `int /= double` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `int %= double` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `int += real` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `int -= real` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `int *= real` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `int /= real` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `int %= real` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `uint += float` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `uint -= float` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `uint *= float` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `uint /= float` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `uint %= float` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `uint += double` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `uint -= double` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `uint *= double` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `uint /= double` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `uint %= double` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `uint += real` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `uint -= real` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `uint *= real` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `uint /= real` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `uint %= real` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `long += float` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `long -= float` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `long *= float` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `long /= float` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `long %= float` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `long += double` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `long -= double` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `long *= double` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `long /= double` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `long %= double` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `long += real` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `long -= real` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `long *= real` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `long /= real` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `long %= real` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `ulong += float` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `ulong -= float` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `ulong *= float` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `ulong /= float` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `ulong %= float` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `ulong += double` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `ulong -= double` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `ulong *= double` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `ulong /= double` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `ulong %= double` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `ulong += real` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `ulong -= real` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `ulong *= real` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `ulong /= real` is performing truncating conversion
+ fail_compilation/failexpression3.d-mixin-139(139): Deprecation: `ulong %= real` is performing truncating conversion
+ fail_compilation/failexpression3.d(149): Error: template instance `failexpression3.X!(integral, floating, arith)` error instantiating
+ fail_compilation/failexpression3.d(154):        instantiated from here: `OpAssignCases!(TestOpAssignAuto)`
+ ---
+ */
+ template TT(T...) { alias T TT; }
+ 
+ void TestOpAssignAuto(Tx, Ux, ops)()
+ {
+     foreach(T; Tx.x)
+     foreach(U; Ux.x)
+     foreach(op; ops.x)
+     {
+         T a = cast(T)1;
+         U b = cast(U)1;
+         mixin("auto r = a " ~ op ~ " cast(U)1;");
+     }
+ }
+ 
+ struct integral  { alias TT!(byte, ubyte, short, ushort, int, uint, long, ulong) x; }
+ struct floating  { alias TT!(float, double, real) x; }
+ struct arith     { alias TT!("+=", "-=", "*=", "/=", "%=") x; }
+ 
+ void OpAssignCases(alias X)()
+ {
+     X!(integral, floating, arith)();
+ }
+ 
+ void main()
+ {
+     OpAssignCases!TestOpAssignAuto(); // https://issues.dlang.org/show_bug.cgi?id=5181
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/failexpression4.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/failexpression4.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/failexpression4.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/failexpression4.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,155 ----
+ /*
+ REQUIRED_ARGS: -de
+ TEST_OUTPUT:
+ ---
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(float)cast(int)a + 1.0F` of type `float` to `byte`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(float)cast(int)a - 1.0F` of type `float` to `byte`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(float)cast(int)a * 1.0F` of type `float` to `byte`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(float)cast(int)a / 1.0F` of type `float` to `byte`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(float)cast(int)a % 1.0F` of type `float` to `byte`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(double)cast(int)a + 1.0` of type `double` to `byte`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(double)cast(int)a - 1.0` of type `double` to `byte`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(double)cast(int)a * 1.0` of type `double` to `byte`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(double)cast(int)a / 1.0` of type `double` to `byte`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(double)cast(int)a % 1.0` of type `double` to `byte`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(real)cast(int)a + 1.0L` of type `real` to `byte`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(real)cast(int)a - 1.0L` of type `real` to `byte`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(real)cast(int)a * 1.0L` of type `real` to `byte`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(real)cast(int)a / 1.0L` of type `real` to `byte`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(real)cast(int)a % 1.0L` of type `real` to `byte`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(float)cast(int)a + 1.0F` of type `float` to `ubyte`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(float)cast(int)a - 1.0F` of type `float` to `ubyte`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(float)cast(int)a * 1.0F` of type `float` to `ubyte`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(float)cast(int)a / 1.0F` of type `float` to `ubyte`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(float)cast(int)a % 1.0F` of type `float` to `ubyte`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(double)cast(int)a + 1.0` of type `double` to `ubyte`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(double)cast(int)a - 1.0` of type `double` to `ubyte`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(double)cast(int)a * 1.0` of type `double` to `ubyte`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(double)cast(int)a / 1.0` of type `double` to `ubyte`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(double)cast(int)a % 1.0` of type `double` to `ubyte`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(real)cast(int)a + 1.0L` of type `real` to `ubyte`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(real)cast(int)a - 1.0L` of type `real` to `ubyte`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(real)cast(int)a * 1.0L` of type `real` to `ubyte`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(real)cast(int)a / 1.0L` of type `real` to `ubyte`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(real)cast(int)a % 1.0L` of type `real` to `ubyte`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(float)cast(int)a + 1.0F` of type `float` to `short`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(float)cast(int)a - 1.0F` of type `float` to `short`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(float)cast(int)a * 1.0F` of type `float` to `short`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(float)cast(int)a / 1.0F` of type `float` to `short`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(float)cast(int)a % 1.0F` of type `float` to `short`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(double)cast(int)a + 1.0` of type `double` to `short`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(double)cast(int)a - 1.0` of type `double` to `short`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(double)cast(int)a * 1.0` of type `double` to `short`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(double)cast(int)a / 1.0` of type `double` to `short`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(double)cast(int)a % 1.0` of type `double` to `short`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(real)cast(int)a + 1.0L` of type `real` to `short`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(real)cast(int)a - 1.0L` of type `real` to `short`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(real)cast(int)a * 1.0L` of type `real` to `short`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(real)cast(int)a / 1.0L` of type `real` to `short`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(real)cast(int)a % 1.0L` of type `real` to `short`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(float)cast(int)a + 1.0F` of type `float` to `ushort`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(float)cast(int)a - 1.0F` of type `float` to `ushort`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(float)cast(int)a * 1.0F` of type `float` to `ushort`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(float)cast(int)a / 1.0F` of type `float` to `ushort`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(float)cast(int)a % 1.0F` of type `float` to `ushort`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(double)cast(int)a + 1.0` of type `double` to `ushort`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(double)cast(int)a - 1.0` of type `double` to `ushort`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(double)cast(int)a * 1.0` of type `double` to `ushort`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(double)cast(int)a / 1.0` of type `double` to `ushort`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(double)cast(int)a % 1.0` of type `double` to `ushort`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(real)cast(int)a + 1.0L` of type `real` to `ushort`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(real)cast(int)a - 1.0L` of type `real` to `ushort`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(real)cast(int)a * 1.0L` of type `real` to `ushort`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(real)cast(int)a / 1.0L` of type `real` to `ushort`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(real)cast(int)a % 1.0L` of type `real` to `ushort`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(float)a + 1.0F` of type `float` to `int`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(float)a - 1.0F` of type `float` to `int`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(float)a * 1.0F` of type `float` to `int`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(float)a / 1.0F` of type `float` to `int`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(float)a % 1.0F` of type `float` to `int`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(double)a + 1.0` of type `double` to `int`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(double)a - 1.0` of type `double` to `int`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(double)a * 1.0` of type `double` to `int`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(double)a / 1.0` of type `double` to `int`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(double)a % 1.0` of type `double` to `int`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(real)a + 1.0L` of type `real` to `int`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(real)a - 1.0L` of type `real` to `int`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(real)a * 1.0L` of type `real` to `int`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(real)a / 1.0L` of type `real` to `int`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(real)a % 1.0L` of type `real` to `int`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(float)a + 1.0F` of type `float` to `uint`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(float)a - 1.0F` of type `float` to `uint`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(float)a * 1.0F` of type `float` to `uint`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(float)a / 1.0F` of type `float` to `uint`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(float)a % 1.0F` of type `float` to `uint`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(double)a + 1.0` of type `double` to `uint`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(double)a - 1.0` of type `double` to `uint`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(double)a * 1.0` of type `double` to `uint`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(double)a / 1.0` of type `double` to `uint`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(double)a % 1.0` of type `double` to `uint`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(real)a + 1.0L` of type `real` to `uint`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(real)a - 1.0L` of type `real` to `uint`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(real)a * 1.0L` of type `real` to `uint`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(real)a / 1.0L` of type `real` to `uint`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(real)a % 1.0L` of type `real` to `uint`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(float)a + 1.0F` of type `float` to `long`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(float)a - 1.0F` of type `float` to `long`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(float)a * 1.0F` of type `float` to `long`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(float)a / 1.0F` of type `float` to `long`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(float)a % 1.0F` of type `float` to `long`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(double)a + 1.0` of type `double` to `long`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(double)a - 1.0` of type `double` to `long`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(double)a * 1.0` of type `double` to `long`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(double)a / 1.0` of type `double` to `long`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(double)a % 1.0` of type `double` to `long`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(real)a + 1.0L` of type `real` to `long`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(real)a - 1.0L` of type `real` to `long`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(real)a * 1.0L` of type `real` to `long`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(real)a / 1.0L` of type `real` to `long`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(real)a % 1.0L` of type `real` to `long`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(float)a + 1.0F` of type `float` to `ulong`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(float)a - 1.0F` of type `float` to `ulong`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(float)a * 1.0F` of type `float` to `ulong`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(float)a / 1.0F` of type `float` to `ulong`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(float)a % 1.0F` of type `float` to `ulong`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(double)a + 1.0` of type `double` to `ulong`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(double)a - 1.0` of type `double` to `ulong`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(double)a * 1.0` of type `double` to `ulong`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(double)a / 1.0` of type `double` to `ulong`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(double)a % 1.0` of type `double` to `ulong`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(real)a + 1.0L` of type `real` to `ulong`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(real)a - 1.0L` of type `real` to `ulong`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(real)a * 1.0L` of type `real` to `ulong`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(real)a / 1.0L` of type `real` to `ulong`
+ fail_compilation/failexpression4.d-mixin-139(139): Error: cannot implicitly convert expression `cast(real)a % 1.0L` of type `real` to `ulong`
+ fail_compilation/failexpression4.d(149): Error: template instance `failexpression4.X!(integral, floating, arith)` error instantiating
+ fail_compilation/failexpression4.d(154):        instantiated from here: `OpReAssignCases!(TestOpAndAssign)`
+ ---
+ */
+ template TT(T...) { alias T TT; }
+ 
+ void TestOpAndAssign(Tx, Ux, ops)()
+ {
+     foreach(T; Tx.x)
+     foreach(U; Ux.x)
+     foreach(op; ops.x)
+     {
+         T a = cast(T)1;
+         U b = cast(U)1;
+         mixin("a = a " ~ op[0..$-1] ~ " cast(U)1;");
+     }
+ }
+ 
+ struct integral  { alias TT!(byte, ubyte, short, ushort, int, uint, long, ulong) x; }
+ struct floating  { alias TT!(float, double, real) x; }
+ struct arith     { alias TT!("+=", "-=", "*=", "/=", "%=") x; }
+ 
+ void OpReAssignCases(alias X)()
+ {
+     X!(integral, floating, arith)();
+ }
+ 
+ void main()
+ {
+     OpReAssignCases!TestOpAndAssign();
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/ice13788.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/ice13788.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/ice13788.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/ice13788.d	Sun Feb  8 22:32:13 2026
***************
*** 1,10 ****
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/ice13788.d(11): Error: pragma `mangle` - string expected for mangled name
! fail_compilation/ice13788.d(12): Error: `string` expected for mangled name, not `(1)` of type `int`
! fail_compilation/ice13788.d(13): Error: pragma `mangle` - zero-length string not allowed for mangled name
! fail_compilation/ice13788.d(14): Error: pragma `mangle` - mangled name characters can only be of type `char`
  ---
  */
  
--- 1,10 ----
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/ice13788.d(11): Error: `pragma(mangle)` expects string literal argument for mangled name
! fail_compilation/ice13788.d(12): Error: `string` expected for pragma mangle argument, not `(1)` of type `int`
! fail_compilation/ice13788.d(13): Error: `pragma(mangle)` zero-length string not allowed for mangled name
! fail_compilation/ice13788.d(14): Error: `pragma(mangle)` mangled name characters can only be of type `char`
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/ice21095.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/ice21095.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/ice21095.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/ice21095.d	Sun Feb  8 22:32:13 2026
***************
*** 2,9 ****
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/ice21095.d(14): Error: constructor `ice21095.Mutex.__ctor!().this` `in` and `out` contracts can only appear without a body when they are virtual interface functions or abstract
! fail_compilation/ice21095.d(12): Error: template instance `ice21095.Mutex.__ctor!()` error instantiating
  ---
  */
  class Mutex
--- 2,9 ----
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/ice21095.d(14): Error: constructor `ice21095.Mutex.this!().this` `in` and `out` contracts can only appear without a body when they are virtual interface functions or abstract
! fail_compilation/ice21095.d(12): Error: template instance `ice21095.Mutex.this!()` error instantiating
  ---
  */
  class Mutex
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/ice8795.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/ice8795.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/ice8795.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/ice8795.d	Sun Feb  8 22:32:13 2026
***************
*** 1,12 ****
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/ice8795.d-mixin-14(14): Error: found `End of File` when expecting `(`
! fail_compilation/ice8795.d-mixin-14(14): Error: expression expected, not `End of File`
! fail_compilation/ice8795.d-mixin-14(14): Error: missing closing `)` after `switch (__error`
! fail_compilation/ice8795.d-mixin-14(14): Error: found `End of File` instead of statement
! fail_compilation/ice8795.d-mixin-15(15): Error: { } expected following `interface` declaration
! fail_compilation/ice8795.d-mixin-15(15): Error: anonymous interfaces not allowed
  ---
  */
  void main()
--- 1,14 ----
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/ice8795.d-mixin-16(16): Error: found `End of File` when expecting `(`
! fail_compilation/ice8795.d-mixin-16(16): Error: expression expected, not `End of File`
! fail_compilation/ice8795.d-mixin-16(16): Error: missing closing `)` after `switch (__error`
! fail_compilation/ice8795.d-mixin-16(16): Error: found `End of File` instead of statement
! fail_compilation/ice8795.d-mixin-16(16):        while parsing string mixin statement
! fail_compilation/ice8795.d-mixin-17(17): Error: { } expected following `interface` declaration
! fail_compilation/ice8795.d-mixin-17(17): Error: anonymous interfaces not allowed
! fail_compilation/ice8795.d-mixin-17(17):        while parsing string mixin statement
  ---
  */
  void main()
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/ice9273a.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/ice9273a.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/ice9273a.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/ice9273a.d	Sun Feb  8 22:32:13 2026
***************
*** 1,8 ****
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/ice9273a.d(19): Error: constructor `ice9273a.C.__ctor!().this` no match for implicit `super()` call in constructor
! fail_compilation/ice9273a.d(23): Error: template instance `ice9273a.C.__ctor!()` error instantiating
  ---
  */
  
--- 1,8 ----
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/ice9273a.d(19): Error: constructor `ice9273a.C.this!().this` no match for implicit `super()` call in constructor
! fail_compilation/ice9273a.d(23): Error: template instance `ice9273a.C.this!()` error instantiating
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/ice9284.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/ice9284.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/ice9284.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/ice9284.d	Sun Feb  8 22:32:13 2026
*************** TEST_OUTPUT:
*** 3,9 ****
  ---
  fail_compilation/ice9284.d(14): Error: template `__ctor` is not callable using argument types `!()(int)`
  fail_compilation/ice9284.d(12):        Candidate is: `this()(string)`
! fail_compilation/ice9284.d(20): Error: template instance `ice9284.C.__ctor!()` error instantiating
  ---
  */
  
--- 3,9 ----
  ---
  fail_compilation/ice9284.d(14): Error: template `__ctor` is not callable using argument types `!()(int)`
  fail_compilation/ice9284.d(12):        Candidate is: `this()(string)`
! fail_compilation/ice9284.d(20): Error: template instance `ice9284.C.this!()` error instantiating
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/issue21203.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/issue21203.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/issue21203.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/issue21203.d	Sun Feb  8 22:32:13 2026
***************
*** 3,10 ****
  REQUIRED_ARGS: -de
  TEST_OUTPUT:
  ---
! fail_compilation/issue21203.d(12): Error: pragma `mangle` cannot apply to a template declaration
! fail_compilation/issue21203.d(12):        use `template Class(Args...){ pragma(mangle, "other_name") class Class {} }`
  ---
  */
  
--- 3,10 ----
  REQUIRED_ARGS: -de
  TEST_OUTPUT:
  ---
! fail_compilation/issue21203.d(12): Error: `pragma(mangle)` cannot apply to a template declaration
! fail_compilation/issue21203.d(12):        use `template F(Args...) { pragma(mangle, "gdkfjgh") ... }`
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/issue22682.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/issue22682.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/issue22682.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/issue22682.d	Sun Feb  8 22:32:13 2026
***************
*** 1,10 ****
  /* TEST_OUTPUT:
  ---
! fail_compilation/issue22682.d(14): Error: `pragma(mangle)` must be attached to a declaration
! fail_compilation/issue22682.d(15): Error: `pragma(mangle)` takes a single argument that must be a string literal
! fail_compilation/issue22682.d(16): Error: `string` expected for pragma mangle argument, not `(0)` of type `int`
! fail_compilation/issue22682.d(16): Error: `pragma(mangle)` takes a single argument that must be a string literal
! fail_compilation/issue22682.d(17): Error: `pragma(mangle)` must be attached to a declaration
  ---
   */
  module issue22682;
--- 1,9 ----
  /* TEST_OUTPUT:
  ---
! fail_compilation/issue22682.d(13): Error: `pragma(mangle)` expects string literal argument for mangled name
! fail_compilation/issue22682.d(14): Error: `pragma(mangle)` expects string literal argument for mangled name
! fail_compilation/issue22682.d(15): Error: `string` expected for pragma mangle argument, not `(0)` of type `int`
! fail_compilation/issue22682.d(16): Error: `pragma(mangle)` expects string literal argument for mangled name
  ---
   */
  module issue22682;
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/lexer23465.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/lexer23465.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/lexer23465.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/lexer23465.d	Sun Feb  8 22:32:13 2026
***************
*** 1,16 ****
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/lexer23465.d(22): Error: character 0x1f37a is not allowed as a continue character in an identifier
! fail_compilation/lexer23465.d(22): Error: character 0x1f37a is not a valid token
! fail_compilation/lexer23465.d(23): Error: character '\' is not a valid token
! fail_compilation/lexer23465.d(24): Error: octal digit expected, not `9`
! fail_compilation/lexer23465.d(24): Error: octal literals larger than 7 are no longer supported
! fail_compilation/lexer23465.d(25): Error: integer overflow
! fail_compilation/lexer23465.d(26): Error: unterminated /+ +/ comment
! fail_compilation/lexer23465.d(27): Error: found `End of File` instead of array initializer
! fail_compilation/lexer23465.d(27): Error: semicolon needed to end declaration of `arr`, instead of `End of File`
! fail_compilation/lexer23465.d(20):        `arr` declared here
  ---
  */
  
--- 1,15 ----
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/lexer23465.d(21): Error: character 0x1f37a is not allowed as a continue character in an identifier
! fail_compilation/lexer23465.d(22): Error: character '\' is not a valid token
! fail_compilation/lexer23465.d(23): Error: octal digit expected, not `9`
! fail_compilation/lexer23465.d(23): Error: octal literals larger than 7 are no longer supported
! fail_compilation/lexer23465.d(24): Error: integer overflow
! fail_compilation/lexer23465.d(25): Error: unterminated /+ +/ comment
! fail_compilation/lexer23465.d(26): Error: found `End of File` instead of array initializer
! fail_compilation/lexer23465.d(26): Error: semicolon needed to end declaration of `arr`, instead of `End of File`
! fail_compilation/lexer23465.d(19):        `arr` declared here
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/mangle1.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/mangle1.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/mangle1.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/mangle1.d	Sun Feb  8 22:32:13 2026
***************
*** 1,7 ****
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/mangle1.d(8): Error: pragma `mangle` can only apply to a single declaration
  ---
  */
  
--- 1,7 ----
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/mangle1.d(8): Error: `pragma(mangle)` can only apply to a single declaration
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/mangle2.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/mangle2.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/mangle2.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/mangle2.d	Sun Feb  8 22:32:13 2026
***************
*** 1,41 ****
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/mangle2.d(20): Error: pragma `mangle` char 0x20 not allowed in mangled name
! fail_compilation/mangle2.d(21): Error: pragma `mangle` char 0x20 not allowed in mangled name
! fail_compilation/mangle2.d(24): Error: pragma `mangle` char 0x0a not allowed in mangled name
! fail_compilation/mangle2.d(25): Error: pragma `mangle` char 0x0a not allowed in mangled name
! fail_compilation/mangle2.d(28): Error: pragma `mangle` char 0x07 not allowed in mangled name
! fail_compilation/mangle2.d(29): Error: pragma `mangle` char 0x07 not allowed in mangled name
! fail_compilation/mangle2.d(32): Error: pragma `mangle` char 0x01 not allowed in mangled name
! fail_compilation/mangle2.d(33): Error: pragma `mangle` char 0x01 not allowed in mangled name
! fail_compilation/mangle2.d(36): Error: pragma `mangle` char 0x00 not allowed in mangled name
! fail_compilation/mangle2.d(37): Error: pragma `mangle` char 0x00 not allowed in mangled name
! fail_compilation/mangle2.d(40): Error: pragma `mangle` Outside Unicode code space
! fail_compilation/mangle2.d(41): Error: pragma `mangle` Outside Unicode code space
  ---
  */
- 
- //spaces
- __gshared pragma(mangle, "test 9") ubyte test9_1;
- __gshared extern pragma(mangle, "test 9") ubyte test9_1_e;
- 
- //\n chars
- __gshared pragma(mangle, "test\n9") ubyte test9_2;
- __gshared extern pragma(mangle, "test\n9") ubyte test9_2_e;
- 
- //\a chars
- __gshared pragma(mangle, "test\a9") ubyte test9_3;
- __gshared extern pragma(mangle, "test\a9") ubyte test9_3_e;
- 
- //\x01 chars
- __gshared pragma(mangle, "test\x019") ubyte test9_4;
- __gshared extern pragma(mangle, "test\x019") ubyte test9_4_e;
- 
  //\0 chars
  __gshared pragma(mangle, "test\09") ubyte test9_5;
  __gshared extern pragma(mangle, "test\09") ubyte test9_5_e;
- 
- //\xff chars
- __gshared pragma(mangle, "test\xff9") ubyte test9_6;
- __gshared extern pragma(mangle, "test\xff9") ubyte test9_6_e;
--- 1,10 ----
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/mangle2.d(9): Error: pragma `mangle` null character not allowed in mangled name
! fail_compilation/mangle2.d(10): Error: pragma `mangle` null character not allowed in mangled name
  ---
  */
  //\0 chars
  __gshared pragma(mangle, "test\09") ubyte test9_5;
  __gshared extern pragma(mangle, "test\09") ubyte test9_5_e;
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/opApply_return.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/opApply_return.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/opApply_return.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/opApply_return.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,23 ----
+ /*
+ REQUIRED_ARGS: -de
+ TEST_OUTPUT:
+ ---
+ fail_compilation/opApply_return.d(18): Deprecation: cannot return non-zero compile-time value from `opApply`
+ fail_compilation/opApply_return.d(18):        Any non-zero value must be the result of calling its delegate
+ fail_compilation/opApply_return.d(19): Deprecation: cannot return non-zero compile-time value from `opApply`
+ fail_compilation/opApply_return.d(19):        Any non-zero value must be the result of calling its delegate
+ fail_compilation/opApply_return.d(20): Deprecation: cannot return non-zero compile-time value from `opApply`
+ fail_compilation/opApply_return.d(20):        Any non-zero value must be the result of calling its delegate
+ ---
+ */
+ 
+ class Tree {
+     Tree lhs;
+     Tree rhs;
+     int opApply(int delegate(Tree) dg) {
+         if (lhs && lhs.opApply(dg)) return 1;
+         if (dg(this)) return 1;
+         if (rhs && rhs.opApply(dg)) return 1;
+         return 0;
+     }
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/placenew.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/placenew.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/placenew.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/placenew.d	Sun Feb  8 22:32:13 2026
***************
*** 1,21 ****
  /* TEST_OUTPUT:
  ---
! fail_compilation/placenew.d(23): Error: PlacementExpression `3` is an rvalue, but must be an lvalue
! fail_compilation/placenew.d(28): Error: undefined identifier `x`
! fail_compilation/placenew.d(36): Error: `new ( i )` PlacementExpression cannot be evaluated at compile time
! fail_compilation/placenew.d(39):        called from here: `xxx()`
! fail_compilation/placenew.d(39):        while evaluating: `static assert(xxx() == 1)`
! fail_compilation/placenew.d(48): Error: new placement size 24 must be >= object size 40
! fail_compilation/placenew.d(54): Error: placement new cannot be used with associative arrays
! fail_compilation/placenew.d(67): Error: new placement size 4 must be >= class object size $?:32=16|64=24$
! fail_compilation/placenew.d(77): Error: `@safe` function `test7` cannot use placement `new` is not allowed in a `@safe` function
  ---
  */
  
  void test0()
  {
      int i;
!     int* pi = new (i) int;
  }
  
  void test1()
--- 1,24 ----
  /* TEST_OUTPUT:
  ---
! fail_compilation/placenew.d(26): Error: PlacementExpression `3` is an rvalue, but must be an lvalue
! fail_compilation/placenew.d(31): Error: undefined identifier `x`
! fail_compilation/placenew.d(39): Error: `new ( i )` PlacementExpression cannot be evaluated at compile time
! fail_compilation/placenew.d(42):        called from here: `xxx()`
! fail_compilation/placenew.d(42):        while evaluating: `static assert(xxx() == 1)`
! fail_compilation/placenew.d(51): Error: new placement size 24 must be >= object size 40
! fail_compilation/placenew.d(57): Error: placement new cannot be used with associative arrays
! fail_compilation/placenew.d(70): Error: new placement size 4 must be >= class object size $?:32=16|64=24$
! fail_compilation/placenew.d(80): Error: placement `new` is not allowed in a `@safe` function
! fail_compilation/placenew.d(89): Error: PlacementExpression cannot be a dynamic array
! fail_compilation/placenew.d(92): Error: placement new cannot be used with dynamic arrays
! fail_compilation/placenew.d(95): Error: PlacementExpression `s` of type `const(int)` must be unshared and mutable
  ---
  */
  
  void test0()
  {
      int i;
!     int* pi = new (i) int; // OK
  }
  
  void test1()
*************** void test7()
*** 78,80 ****
--- 81,96 ----
  }
  
  /*************************************************/
+ 
+ void test8()
+ {
+     void[] a;
+     a.reserve(int.sizeof);
+     int* ps = new(a) int;
+ 
+     ubyte[a.sizeof] sa;
+     int[] ia = new(sa) int[4];
+ 
+     const int s;
+     ps = new(s) int;
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/pragmamangle1.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/pragmamangle1.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/pragmamangle1.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/pragmamangle1.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,113 ----
+ /*
+ TEST_OUTPUT:
+ ---
+ fail_compilation/pragmamangle1.d(35): Error: `pragma(mangle)` expects string literal argument for mangled name
+ fail_compilation/pragmamangle1.d(37): Error: `pragma(mangle)` expects string literal argument for mangled name
+ fail_compilation/pragmamangle1.d(44): Error: `pragma(mangle)` must be attached to a declaration
+ fail_compilation/pragmamangle1.d(46): Error: `pragma(mangle)` must be attached to a declaration
+ fail_compilation/pragmamangle1.d(53): Error: `pragma(mangle)` expects string literal argument for mangled name
+ fail_compilation/pragmamangle1.d(56): Error: `pragma(mangle)` zero-length string not allowed for mangled name
+ fail_compilation/pragmamangle1.d(59): Error: `pragma(mangle)` expects 1 or 2 arguments
+ fail_compilation/pragmamangle1.d(62): Error: `pragma(mangle)` cannot apply to a template declaration
+ fail_compilation/pragmamangle1.d(62):        use `template cannot_apply(Args...) { pragma(mangle, "template") ... }`
+ fail_compilation/pragmamangle1.d(65): Error: `pragma(mangle)` takes a single argument that must be a string literal
+ fail_compilation/pragmamangle1.d(68): Error: `pragma(mangle)` takes a single argument that must be a string literal
+ fail_compilation/pragmamangle1.d(71): Error: `string` expected for pragma mangle argument, not `(T)` of type `T`
+ fail_compilation/pragmamangle1.d(74): Error: `string` expected for pragma mangle argument, not `(T[T])` of type `T[T]`
+ fail_compilation/pragmamangle1.d(77): Error: `pragma(mangle)` can only apply to a single declaration
+ fail_compilation/pragmamangle1.d(85): Error: `class` or `struct` type expected for pragma mangle argument, not `"mangle"` of type `string`
+ fail_compilation/pragmamangle1.d(88): Error: `class` or `struct` type expected for pragma mangle argument, not `F()` of type `T`
+ fail_compilation/pragmamangle1.d(91): Error: `class` or `struct` type expected for pragma mangle argument, not `F()` of type `T`
+ fail_compilation/pragmamangle1.d(94): Error: `string` expected for pragma mangle argument, not `(F())` of type `T`
+ fail_compilation/pragmamangle1.d(97): Error: `string` expected for pragma mangle argument, not `(F())` of type `T`
+ fail_compilation/pragmamangle1.d(100): Error: `string` expected for pragma mangle argument, not `(V)` of type `T`
+ fail_compilation/pragmamangle1.d(103): Error: `string` expected for pragma mangle argument, not `(V)` of type `T`
+ fail_compilation/pragmamangle1.d(106): Error: `string` expected for pragma mangle argument, not `T` of type `T`
+ fail_compilation/pragmamangle1.d(109): Error: `class` or `struct` type expected for pragma mangle argument, not `int` of type `int`
+ fail_compilation/pragmamangle1.d(112): Error: `class` or `struct` type expected for pragma mangle argument, not `T[T]` of type `T[T]`
+ ---
+ */
+ struct T { }
+ T F() { return T(); }
+ T V;
+ alias A = T[T];
+ 
+ pragma(mangle);
+ 
+ pragma(mangle)
+ {
+     nothrow: pure: @nogc: @property
+     {
+     }
+ }
+ 
+ pragma(mangle, "no_declaration");
+ 
+ pragma(mangle, "no_declaration")
+ {
+     nothrow: pure: @nogc: @property
+     {
+     }
+ }
+ 
+ pragma(mangle)
+ void no_string_literal();
+ 
+ pragma(mangle, "")
+ void empty_string_mangle();
+ 
+ pragma(mangle, "too", "many", "arguments")
+ void expects_less_arguments();
+ 
+ pragma(mangle, "template")
+ template cannot_apply(T) { }
+ 
+ pragma(mangle, "func", "mangle")
+ void func_too_many_arguments();
+ 
+ pragma(mangle, "var", "mangle")
+ int var_too_many_arguments;
+ 
+ pragma(mangle, T)
+ void func_arg1_not_a_string();
+ 
+ pragma(mangle, A)
+ int var_arg1_not_a_string;
+ 
+ pragma(mangle, "too_many_declarations")
+ {
+     nothrow pure:
+     void func1();
+     @nogc:
+     extern(C++) void func2();
+ }
+ 
+ pragma(mangle, "struct", "mangle")
+ struct arg2_must_be_symbol { }
+ 
+ pragma(mangle, "struct", F)
+ struct struct_wrong_symbol { }
+ 
+ pragma(mangle, "class", F)
+ class class_wrong_symbol { }
+ 
+ pragma(mangle, F(), T)
+ struct arg1_not_ctfe_string { }
+ 
+ pragma(mangle, T, F())
+ struct arg2_not_ctfe_string { }
+ 
+ pragma(mangle, V, T)
+ struct arg1_not_string { }
+ 
+ pragma(mangle, T, V)
+ struct arg2_not_string { }
+ 
+ pragma(mangle, T, T)
+ struct arg2_expect_string { }
+ 
+ pragma(mangle, int)
+ struct arg1_not_class_or_struct { }
+ 
+ pragma(mangle, "struct", A)
+ struct arg2_not_class_or_struct { }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/pragmamangle2.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/pragmamangle2.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/pragmamangle2.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/pragmamangle2.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,114 ----
+ /*
+ TEST_OUTPUT:
+ ---
+ fail_compilation/pragmamangle2.d(37): Error: `pragma(mangle)` expects string literal argument for mangled name
+ fail_compilation/pragmamangle2.d(39): Error: `pragma(mangle)` expects string literal argument for mangled name
+ fail_compilation/pragmamangle2.d(46): Error: `pragma(mangle)` must be attached to a declaration
+ fail_compilation/pragmamangle2.d(48): Error: `pragma(mangle)` must be attached to a declaration
+ fail_compilation/pragmamangle2.d(55): Error: `pragma(mangle)` expects string literal argument for mangled name
+ fail_compilation/pragmamangle2.d(58): Error: `pragma(mangle)` zero-length string not allowed for mangled name
+ fail_compilation/pragmamangle2.d(61): Error: `pragma(mangle)` expects 1 or 2 arguments
+ fail_compilation/pragmamangle2.d(64): Error: `pragma(mangle)` cannot apply to a template declaration
+ fail_compilation/pragmamangle2.d(64):        use `template cannot_apply(Args...) { pragma(mangle, "template") ... }`
+ fail_compilation/pragmamangle2.d(67): Error: `pragma(mangle)` takes a single argument that must be a string literal
+ fail_compilation/pragmamangle2.d(70): Error: `pragma(mangle)` takes a single argument that must be a string literal
+ fail_compilation/pragmamangle2.d(73): Error: `string` expected for pragma mangle argument, not `(T)` of type `T`
+ fail_compilation/pragmamangle2.d(76): Error: `string` expected for pragma mangle argument, not `(T[T])` of type `T[T]`
+ fail_compilation/pragmamangle2.d(79): Error: `pragma(mangle)` must be attached to a declaration
+ fail_compilation/pragmamangle2.d(85): Error: `class` or `struct` type expected for pragma mangle argument, not `"mangle"` of type `string`
+ fail_compilation/pragmamangle2.d(88): Error: `class` or `struct` type expected for pragma mangle argument, not `F()` of type `T`
+ fail_compilation/pragmamangle2.d(91): Error: `class` or `struct` type expected for pragma mangle argument, not `F()` of type `T`
+ fail_compilation/pragmamangle2.d(94): Error: `string` expected for pragma mangle argument, not `(F())` of type `T`
+ fail_compilation/pragmamangle2.d(97): Error: `string` expected for pragma mangle argument, not `(F())` of type `T`
+ fail_compilation/pragmamangle2.d(100): Error: `string` expected for pragma mangle argument, not `(V)` of type `T`
+ fail_compilation/pragmamangle2.d(103): Error: `string` expected for pragma mangle argument, not `(V)` of type `T`
+ fail_compilation/pragmamangle2.d(106): Error: `string` expected for pragma mangle argument, not `T` of type `T`
+ fail_compilation/pragmamangle2.d(109): Error: `class` or `struct` type expected for pragma mangle argument, not `int` of type `int`
+ fail_compilation/pragmamangle2.d(112): Error: `class` or `struct` type expected for pragma mangle argument, not `T[T]` of type `T[T]`
+ ---
+ */
+ void pragma_statement_test()
+ {
+     struct T { }
+     T F() { return T(); }
+     T V;
+     alias A = T[T];
+ 
+     pragma(mangle);
+ 
+     pragma(mangle)
+     {
+         synchronized
+         {
+         }
+     }
+ 
+     pragma(mangle, "no_declaration");
+ 
+     pragma(mangle, "no_declaration")
+     {
+         synchronized
+         {
+         }
+     }
+ 
+     pragma(mangle)
+     void no_string_literal();
+ 
+     pragma(mangle, "")
+     void empty_string_mangle();
+ 
+     pragma(mangle, "too", "many", "arguments")
+     void expects_less_arguments();
+ 
+     pragma(mangle, "template")
+     template cannot_apply(T) { }
+ 
+     pragma(mangle, "func", "mangle")
+     void func_too_many_arguments();
+ 
+     pragma(mangle, "var", "mangle")
+     static int var_too_many_arguments;
+ 
+     pragma(mangle, T)
+     void func_arg1_not_a_string();
+ 
+     pragma(mangle, A)
+     static int var_arg1_not_a_string;
+ 
+     pragma(mangle, "too_many_declarations")
+     {
+         nothrow pure void func1();
+         @nogc extern(C++) void func2();
+     }
+ 
+     pragma(mangle, "struct", "mangle")
+     struct arg2_must_be_symbol { }
+ 
+     pragma(mangle, "struct", F)
+     struct struct_wrong_symbol { }
+ 
+     pragma(mangle, "class", F)
+     class class_wrong_symbol { }
+ 
+     pragma(mangle, F(), T)
+     struct arg1_not_ctfe_string { }
+ 
+     pragma(mangle, T, F())
+     struct arg2_not_ctfe_string { }
+ 
+     pragma(mangle, V, T)
+     struct arg1_not_string { }
+ 
+     pragma(mangle, T, V)
+     struct arg2_not_string { }
+ 
+     pragma(mangle, T, T)
+     struct arg2_expect_string { }
+ 
+     pragma(mangle, int)
+     struct arg1_not_class_or_struct { }
+ 
+     pragma(mangle, "struct", A)
+     struct arg2_not_class_or_struct { }
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/reserved_version.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/reserved_version.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/reserved_version.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/reserved_version.d	Sun Feb  8 22:32:13 2026
*************** fail_compilation/reserved_version.d(225)
*** 124,134 ****
  fail_compilation/reserved_version.d(226): Error: version identifier `D_Invariants` is reserved and cannot be set
  fail_compilation/reserved_version.d(227): Error: version identifier `D_Optimized` is reserved and cannot be set
  fail_compilation/reserved_version.d(228): Error: version identifier `VisionOS` is reserved and cannot be set
  ---
  */
  
  // Some extra empty lines to help fixup the manual line numbering after adding new version identifiers
- 
  #line 105
  version = MSP430;
  version = D_P16;
--- 124,134 ----
  fail_compilation/reserved_version.d(226): Error: version identifier `D_Invariants` is reserved and cannot be set
  fail_compilation/reserved_version.d(227): Error: version identifier `D_Optimized` is reserved and cannot be set
  fail_compilation/reserved_version.d(228): Error: version identifier `VisionOS` is reserved and cannot be set
+ fail_compilation/reserved_version.d(229): Error: version identifier `D_Profile` is reserved and cannot be set
  ---
  */
  
  // Some extra empty lines to help fixup the manual line numbering after adding new version identifiers
  #line 105
  version = MSP430;
  version = D_P16;
*************** version = D_ProfileGC;
*** 254,259 ****
--- 254,260 ----
  version = D_Invariants;
  version = D_Optimized;
  version = VisionOS;
+ version = D_Profile;
  
  // This should work though
  debug = DigitalMars;
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/reserved_version_switch.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/reserved_version_switch.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/reserved_version_switch.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/reserved_version_switch.d	Sun Feb  8 22:32:13 2026
***************
*** 110,115 ****
--- 110,116 ----
  // REQUIRED_ARGS: -version=none
  // REQUIRED_ARGS: -version=D_PreConditions
  // REQUIRED_ARGS: -version=D_PostConditions
+ // REQUIRED_ARGS: -version=D_Profile
  // REQUIRED_ARGS: -version=D_ProfileGC
  // REQUIRED_ARGS: -version=D_Invariants
  // REQUIRED_ARGS: -version=D_Optimized
*************** Error: version identifier `all` is reser
*** 336,341 ****
--- 337,343 ----
  Error: version identifier `none` is reserved and cannot be set
  Error: version identifier `D_PreConditions` is reserved and cannot be set
  Error: version identifier `D_PostConditions` is reserved and cannot be set
+ Error: version identifier `D_Profile` is reserved and cannot be set
  Error: version identifier `D_ProfileGC` is reserved and cannot be set
  Error: version identifier `D_Invariants` is reserved and cannot be set
  Error: version identifier `D_Optimized` is reserved and cannot be set
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/retref2.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/retref2.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/retref2.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/retref2.d	Sun Feb  8 22:32:13 2026
***************
*** 1,8 ****
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/retref2.d(18): Error: function `ref int retref2.D.foo(return ref int)` does not override any function, did you mean to override `ref int retref2.C.foo(ref int)`?
! fail_compilation/retref2.d(19): Error: function `ref int retref2.D.bar() scope return` does not override any function, did you mean to override `ref int retref2.C.bar()`?
  ---
  */
  
--- 1,10 ----
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/retref2.d(20): Error: function `ref int retref2.D.foo(return ref int)` does not override any function
! fail_compilation/retref2.d(14):        did you mean to override `ref int retref2.C.foo(ref int)`?
! fail_compilation/retref2.d(21): Error: function `ref int retref2.D.bar() scope return` does not override any function
! fail_compilation/retref2.d(15):        did you mean to override `ref int retref2.C.bar()`?
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/retscope.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/retscope.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/retscope.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/retscope.d	Sun Feb  8 22:32:13 2026
*************** void foo11() @safe
*** 181,187 ****
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/retscope.d(197): Error: returning scope variable `e` is not allowed in a `@safe` function
  ---
  */
  
--- 181,188 ----
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/retscope.d(198): Error: returning scope variable `e` is not allowed in a `@safe` function
! fail_compilation/retscope.d(197):        `e` inferred `scope` because of `e.DG = d`
  ---
  */
  
*************** void* escapeDg1(scope void* d) @safe
*** 201,207 ****
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/retscope.d(212): Error: assigning scope variable `p` to non-scope `e.e` is not allowed in a `@safe` function
  ---
  */
  struct Escaper3 { void* e; }
--- 202,208 ----
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/retscope.d(213): Error: assigning scope variable `p` to non-scope `e.e` is not allowed in a `@safe` function
  ---
  */
  struct Escaper3 { void* e; }
*************** void* escape3 (scope void* p) @safe {
*** 218,224 ****
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/retscope.d(229): Error: scope parameter `ptr` may not be returned
  ---
  */
  
--- 219,225 ----
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/retscope.d(230): Error: scope parameter `ptr` may not be returned
  ---
  */
  
*************** void* funretscope(scope dg_t ptr) @safe
*** 234,243 ****
  /*
  TEST_OUTPUT:
  ---
- fail_compilation/retscope.d(248): Error: cannot implicitly convert expression `() => & x` of type `void* delegate() pure nothrow @nogc @safe` to `void* delegate() scope @safe`
- fail_compilation/retscope.d(248): Error: cannot implicitly convert expression `() => & x` of type `void* delegate() pure nothrow @nogc @safe` to `void* delegate() scope @safe`
  fail_compilation/retscope.d(249): Error: cannot implicitly convert expression `() => & x` of type `void* delegate() pure nothrow @nogc @safe` to `void* delegate() scope @safe`
  fail_compilation/retscope.d(249): Error: cannot implicitly convert expression `() => & x` of type `void* delegate() pure nothrow @nogc @safe` to `void* delegate() scope @safe`
  ---
  */
  
--- 235,244 ----
  /*
  TEST_OUTPUT:
  ---
  fail_compilation/retscope.d(249): Error: cannot implicitly convert expression `() => & x` of type `void* delegate() pure nothrow @nogc @safe` to `void* delegate() scope @safe`
  fail_compilation/retscope.d(249): Error: cannot implicitly convert expression `() => & x` of type `void* delegate() pure nothrow @nogc @safe` to `void* delegate() scope @safe`
+ fail_compilation/retscope.d(250): Error: cannot implicitly convert expression `() => & x` of type `void* delegate() pure nothrow @nogc @safe` to `void* delegate() scope @safe`
+ fail_compilation/retscope.d(250): Error: cannot implicitly convert expression `() => & x` of type `void* delegate() pure nothrow @nogc @safe` to `void* delegate() scope @safe`
  ---
  */
  
*************** void escape4() @safe
*** 254,260 ****
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/retscope.d(266): Error: taking address of `scope` variable `p` with pointers is not allowed in a `@safe` function
  ---
  */
  
--- 255,261 ----
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/retscope.d(267): Error: taking address of `scope` variable `p` with pointers is not allowed in a `@safe` function
  ---
  */
  
*************** void escape5() @safe
*** 271,277 ****
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/retscope.d(286): Error: escaping a reference to local variable `b` by returning `foo6(& b)`  is not allowed in a `@safe` function
  ---
  */
  
--- 272,278 ----
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/retscope.d(287): Error: escaping a reference to local variable `b` by returning `foo6(& b)`  is not allowed in a `@safe` function
  ---
  */
  
*************** struct S7
*** 302,310 ****
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/retscope.d(315): Error: scope parameter `p` may not be returned
! fail_compilation/retscope.d(316): Error: returning `p[]` escapes a reference to parameter `p`
! fail_compilation/retscope.d(319): Error: scope parameter `p` may not be returned
  ---
  */
  
--- 303,311 ----
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/retscope.d(316): Error: scope parameter `p` may not be returned
! fail_compilation/retscope.d(317): Error: returning `p[]` escapes a reference to parameter `p`
! fail_compilation/retscope.d(320): Error: scope parameter `p` may not be returned
  ---
  */
  
*************** ref int[3] asStatic2(      scope int[] p
*** 323,329 ****
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/retscope.d(335): Error: assigning reference to local variable `i` to non-scope `f` is not allowed in a `@safe` function
  ---
  */
  
--- 324,330 ----
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/retscope.d(336): Error: assigning reference to local variable `i` to non-scope `f` is not allowed in a `@safe` function
  ---
  */
  
*************** int* bar10( scope int** ptr ) @safe
*** 347,353 ****
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/retscope.d(358): Error: taking address of `scope` variable `aa` with pointers is not allowed in a `@safe` function
  ---
  */
  
--- 348,354 ----
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/retscope.d(359): Error: taking address of `scope` variable `aa` with pointers is not allowed in a `@safe` function
  ---
  */
  
*************** class Foo13
*** 420,425 ****
--- 421,427 ----
  TEST_OUTPUT:
  ---
  fail_compilation/retscope.d(1205): Error: scope variable `f14` calling non-scope member function `Foo14.foo()` is not allowed in a `@safe` function
+ fail_compilation/retscope.d(1204):        `f14` inferred `scope` because of `f14.v = & i`
  ---
  */
  
*************** TEST_OUTPUT:
*** 680,685 ****
--- 682,688 ----
  ---
  fail_compilation/retscope.d(1907): Error: assigning scope variable `x` to `ref` variable `this` with longer lifetime is not allowed in a `@safe` function
  fail_compilation/retscope.d(1913): Error: returning scope variable `x` is not allowed in a `@safe` function
+ fail_compilation/retscope.d(1912):        `x` inferred `scope` because of `x = __param_0`
  ---
  */
  #line 1900
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/retscope2.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/retscope2.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/retscope2.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/retscope2.d	Sun Feb  8 22:32:13 2026
*************** void test17428() @safe
*** 230,235 ****
--- 230,236 ----
  TEST_OUTPUT:
  ---
  fail_compilation/retscope2.d(1107): Error: returning scope variable `dg` is not allowed in a `@safe` function
+ fail_compilation/retscope2.d(1106):        `dg` inferred `scope` because of `dg = &s.foo`
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/retscope6.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/retscope6.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/retscope6.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/retscope6.d	Sun Feb  8 22:32:13 2026
*************** void foo() @safe
*** 78,88 ****
  fail_compilation/retscope6.d(8016): Error: assigning address of variable `i` to `p` with longer lifetime is not allowed in a `@safe` function
  fail_compilation/retscope6.d(8031): Error: assigning reference to local variable `i` to non-scope parameter `p` calling `betty` is not allowed in a `@safe` function
  fail_compilation/retscope6.d(8031): Error: assigning reference to local variable `j` to non-scope parameter `q` calling `betty` is not allowed in a `@safe` function
! fail_compilation/retscope6.d(8023):        which is not `scope` because of `p = q`
  fail_compilation/retscope6.d(8048): Error: assigning reference to local variable `i` to non-scope parameter `p` calling `archie` is not allowed in a `@safe` function
! fail_compilation/retscope6.d(8039):        which is not `scope` because of `r = p`
  fail_compilation/retscope6.d(8048): Error: assigning reference to local variable `j` to non-scope parameter `q` calling `archie` is not allowed in a `@safe` function
! fail_compilation/retscope6.d(8038):        which is not `scope` because of `p = q`
  ---
  */
  
--- 78,88 ----
  fail_compilation/retscope6.d(8016): Error: assigning address of variable `i` to `p` with longer lifetime is not allowed in a `@safe` function
  fail_compilation/retscope6.d(8031): Error: assigning reference to local variable `i` to non-scope parameter `p` calling `betty` is not allowed in a `@safe` function
  fail_compilation/retscope6.d(8031): Error: assigning reference to local variable `j` to non-scope parameter `q` calling `betty` is not allowed in a `@safe` function
! fail_compilation/retscope6.d(8023):        `q` is not `scope` because of `p = q`
  fail_compilation/retscope6.d(8048): Error: assigning reference to local variable `i` to non-scope parameter `p` calling `archie` is not allowed in a `@safe` function
! fail_compilation/retscope6.d(8039):        `p` is not `scope` because of `r = p`
  fail_compilation/retscope6.d(8048): Error: assigning reference to local variable `j` to non-scope parameter `q` calling `archie` is not allowed in a `@safe` function
! fail_compilation/retscope6.d(8038):        `q` is not `scope` because of `p = q`
  ---
  */
  
*************** void escape_throw_20150() @safe
*** 261,267 ****
  /* TEST_OUTPUT:
  ---
  fail_compilation/retscope6.d(14019): Error: assigning scope variable `scopePtr` to non-scope parameter `x` calling `noInfer23021` is not allowed in a `@safe` function
! fail_compilation/retscope6.d(14009):        which is not `scope` because of `*escapeHole = cast(const(int)*)x`
  fail_compilation/retscope6.d(14022): Error: returning scope variable `scopePtr` is not allowed in a `@safe` function
  ---
  */
--- 261,267 ----
  /* TEST_OUTPUT:
  ---
  fail_compilation/retscope6.d(14019): Error: assigning scope variable `scopePtr` to non-scope parameter `x` calling `noInfer23021` is not allowed in a `@safe` function
! fail_compilation/retscope6.d(14009):        `x` is not `scope` because of `*escapeHole = cast(const(int)*)x`
  fail_compilation/retscope6.d(14022): Error: returning scope variable `scopePtr` is not allowed in a `@safe` function
  ---
  */
*************** ref int escape23021() @safe
*** 300,306 ****
  /* TEST_OUTPUT:
  ---
  fail_compilation/retscope6.d(14050): Error: assigning scope variable `z` to non-scope parameter `y` calling `f23294` is not allowed in a `@safe` function
! fail_compilation/retscope6.d(14044):        which is not `scope` because of `x = y`
  ---
  */
  
--- 300,306 ----
  /* TEST_OUTPUT:
  ---
  fail_compilation/retscope6.d(14050): Error: assigning scope variable `z` to non-scope parameter `y` calling `f23294` is not allowed in a `@safe` function
! fail_compilation/retscope6.d(14044):        `y` is not `scope` because of `x = y`
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/safeprintf.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/safeprintf.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/safeprintf.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/safeprintf.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,23 ----
+ /*
+ DISABLED: win32 win64 freebsd32 openbsd32 linux32 osx32
+ TEST_OUTPUT:
+ ---
+ fail_compilation/safeprintf.d(20): Error: `@safe` function `safeprintf.func` cannot call `@system` function `safeprintf.printf`
+ fail_compilation/safeprintf.d(15):        `safeprintf.printf` is declared here
+ fail_compilation/safeprintf.d(21): Error: `@safe` function `safeprintf.func` cannot call `@system` function `safeprintf.printf`
+ fail_compilation/safeprintf.d(15):        `safeprintf.printf` is declared here
+ fail_compilation/safeprintf.d(22): Error: `@safe` function `safeprintf.func` cannot call `@system` function `safeprintf.printf`
+ fail_compilation/safeprintf.d(15):        `safeprintf.printf` is declared here
+ fail_compilation/safeprintf.d(22): Deprecation: format specifier `"%Z"` is invalid
+ ---
+ */
+ 
+ extern (C) @system pragma(printf) int printf(const(char)* format, ...);
+ 
+ @safe void func(int i, char* s, dchar* d)
+ {
+     printf("i: %d\n", i);
+     printf("s: %s\n", s);
+     printf("s: %S\n", d);
+     printf("s: %Z\n", s);
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/scope_infer_diagnostic.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/scope_infer_diagnostic.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/scope_infer_diagnostic.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/scope_infer_diagnostic.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,35 ----
+ /*
+ REQUIRED_ARGS: -preview=dip1000
+ TEST_OUTPUT:
+ ---
+ fail_compilation/scope_infer_diagnostic.d(34): Error: `@safe` function `scope_infer_diagnostic.outer` cannot call `@system` function `scope_infer_diagnostic.inner!(void delegate(const(char)[]) pure nothrow @nogc @safe).inner`
+ fail_compilation/scope_infer_diagnostic.d(28):        and assigning scope variable `w` to non-scope parameter `w` calling `callee` makes it fail to infer `@safe`
+ fail_compilation/scope_infer_diagnostic.d(21):        `w` is not `scope` because of `globalPtr = & w`
+ fail_compilation/scope_infer_diagnostic.d(25):        `scope_infer_diagnostic.inner!(void delegate(const(char)[]) pure nothrow @nogc @safe).inner` is declared here
+ ---
+ */
+ 
+ // Test that scope violation error messages show WHY the callee's parameter
+ // is not scope when going through the @safe inference chain.
+ // This is similar to how @nogc violations show the full inference chain.
+ 
+ void* globalPtr;
+ 
+ void callee(Writer)(Writer w) @trusted
+ {
+     // This escapes w, preventing it from being inferred as scope
+     globalPtr = cast(void*)&w;
+     w("x");
+ }
+ 
+ void inner(Writer)(scope Writer w)
+ {
+     // Scope violation: passing scope w to non-scope parameter
+     callee(w);
+ }
+ 
+ void outer() @safe
+ {
+     int x;
+     inner((const(char)[] s) { x++; });
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/systemvariables_void_init.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/systemvariables_void_init.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/systemvariables_void_init.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/systemvariables_void_init.d	Sun Feb  8 22:32:13 2026
*************** TEST_OUTPUT:
*** 5,12 ****
  fail_compilation/systemvariables_void_init.d(48): Error: `void` initializing a type with unsafe bit patterns is not allowed in a `@safe` function
  fail_compilation/systemvariables_void_init.d(49): Error: `void` initializing a type with unsafe bit patterns is not allowed in a `@safe` function
  fail_compilation/systemvariables_void_init.d(50): Error: `void` initializing a type with unsafe bit patterns is not allowed in a `@safe` function
! fail_compilation/systemvariables_void_init.d(51): Error: void intializing a bool (which must always be 0 or 1) is not allowed in a `@safe` function
! fail_compilation/systemvariables_void_init.d(52): Error: void intializing a bool (which must always be 0 or 1) is not allowed in a `@safe` function
  fail_compilation/systemvariables_void_init.d(53): Error: `void` initializing a type with unsafe bit patterns is not allowed in a `@safe` function
  fail_compilation/systemvariables_void_init.d(54): Error: `void` initializing a type with unsafe bit patterns is not allowed in a `@safe` function
  ---
--- 5,12 ----
  fail_compilation/systemvariables_void_init.d(48): Error: `void` initializing a type with unsafe bit patterns is not allowed in a `@safe` function
  fail_compilation/systemvariables_void_init.d(49): Error: `void` initializing a type with unsafe bit patterns is not allowed in a `@safe` function
  fail_compilation/systemvariables_void_init.d(50): Error: `void` initializing a type with unsafe bit patterns is not allowed in a `@safe` function
! fail_compilation/systemvariables_void_init.d(51): Error: `void` initializing a `bool` (which must always be 0 or 1) is not allowed in a `@safe` function
! fail_compilation/systemvariables_void_init.d(52): Error: `void` initializing a `bool` (which must always be 0 or 1) is not allowed in a `@safe` function
  fail_compilation/systemvariables_void_init.d(53): Error: `void` initializing a type with unsafe bit patterns is not allowed in a `@safe` function
  fail_compilation/systemvariables_void_init.d(54): Error: `void` initializing a type with unsafe bit patterns is not allowed in a `@safe` function
  ---
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/test13867.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/test13867.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/test13867.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/test13867.d	Sun Feb  8 22:32:13 2026
***************
*** 1,8 ****
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/test13867.d(12): Error: function `void test13867.X.blah()` does not override any function, did you mean to override `extern (C++) void test13867.Base.blah()`?
! fail_compilation/test13867.d(19): Error: function `void test13867.Z.blah()` does not override any function, did you mean to override `extern (C++) void test13867.Base.blah()`?
  ---
  */
  extern (C++) class Base {
--- 1,10 ----
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/test13867.d(14): Error: function `void test13867.X.blah()` does not override any function
! fail_compilation/test13867.d(11):        did you mean to override `extern (C++) void test13867.Base.blah()`?
! fail_compilation/test13867.d(21): Error: function `void test13867.Z.blah()` does not override any function
! fail_compilation/test13867.d(11):        did you mean to override `extern (C++) void test13867.Base.blah()`?
  ---
  */
  extern (C++) class Base {
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/test16188.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/test16188.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/test16188.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/test16188.d	Sun Feb  8 22:32:13 2026
***************
*** 1,4 ****
! /* REQUIRED_ARGS: -preview=bitfields
   * TEST_OUTPUT:
  ---
  fail_compilation/test16188.d(101): Error: no property `name` for `Where()` of type `test16188.Where`
--- 1,4 ----
! /*
   * TEST_OUTPUT:
  ---
  fail_compilation/test16188.d(101): Error: no property `name` for `Where()` of type `test16188.Where`
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/test17284.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/test17284.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/test17284.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/test17284.d	Sun Feb  8 22:32:13 2026
*************** TEST_OUTPUT:
*** 4,10 ****
  fail_compilation/test17284.d(17): Error: accessing overlapped field `U.c` with pointers is not allowed in a `@safe` function
  pure nothrow @safe void(U t)
  ---
! REQUIRED_ARGS: -preview=bitfields
  */
  
  // https://issues.dlang.org/show_bug.cgi?id=17284
--- 4,10 ----
  fail_compilation/test17284.d(17): Error: accessing overlapped field `U.c` with pointers is not allowed in a `@safe` function
  pure nothrow @safe void(U t)
  ---
! 
  */
  
  // https://issues.dlang.org/show_bug.cgi?id=17284
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/test17422.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/test17422.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/test17422.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/test17422.d	Sun Feb  8 22:32:13 2026
***************
*** 2,8 ****
  REQUIRED_ARGS: -preview=dip1000
  TEST_OUTPUT:
  ---
! fail_compilation/test17422.d(23): Error: returning scope variable `p` is not allowed in a `@safe` function
  ---
  */
  struct RC
--- 2,9 ----
  REQUIRED_ARGS: -preview=dip1000
  TEST_OUTPUT:
  ---
! fail_compilation/test17422.d(24): Error: returning scope variable `p` is not allowed in a `@safe` function
! fail_compilation/test17422.d(23):        `p` inferred `scope` because of `p = rc.get()`
  ---
  */
  struct RC
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/test17423.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/test17423.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/test17423.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/test17423.d	Sun Feb  8 22:32:13 2026
***************
*** 1,8 ****
  /* REQUIRED_ARGS: -preview=dip1000
  TEST_OUTPUT:
  ---
! fail_compilation/test17423.d(27): Error: assigning reference to local `this` to non-scope parameter `dlg` calling `opApply` is not allowed in a `@safe` function
! fail_compilation/test17423.d(16):        which is not `scope` because of `this.myDlg = dlg`
  ---
  */
  
--- 1,9 ----
  /* REQUIRED_ARGS: -preview=dip1000
  TEST_OUTPUT:
  ---
! fail_compilation/test17423.d(28): Error: assigning reference to local `this` to non-scope parameter `dlg` calling `opApply` is not allowed in a `@safe` function
! fail_compilation/test17423.d(17):        `dlg` is not `scope` because of `this.myDlg = dlg`
! fail_compilation/test17423.d(28):        `this` inferred `scope` because of `int(int _) => 0`
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/test18282.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/test18282.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/test18282.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/test18282.d	Sun Feb  8 22:32:13 2026
***************
*** 1,13 ****
  /* REQUIRED_ARGS: -preview=dip1000
     TEST_OUTPUT:
  ---
! fail_compilation/test18282.d(25): Error: returning scope variable `aa` is not allowed in a `@safe` function
! fail_compilation/test18282.d(34): Error: escaping a reference to local variable `i` by copying `& i` into allocated memory is not allowed in a `@safe` function
  fail_compilation/test18282.d(35): Error: escaping a reference to local variable `i` by copying `& i` into allocated memory is not allowed in a `@safe` function
! fail_compilation/test18282.d(36): Error: returning scope variable `staa` is not allowed in a `@safe` function
! fail_compilation/test18282.d(44): Error: escaping a reference to local variable `i` by copying `S2000(& i)` into allocated memory is not allowed in a `@safe` function
! fail_compilation/test18282.d(53): Error: escaping a reference to local variable `i` by copying `& i` into allocated memory is not allowed in a `@safe` function
! fail_compilation/test18282.d(53): Error: escaping a reference to local variable `c` by copying `& c` into allocated memory is not allowed in a `@safe` function
  ---
   */
  
--- 1,14 ----
  /* REQUIRED_ARGS: -preview=dip1000
     TEST_OUTPUT:
  ---
! fail_compilation/test18282.d(26): Error: returning scope variable `aa` is not allowed in a `@safe` function
  fail_compilation/test18282.d(35): Error: escaping a reference to local variable `i` by copying `& i` into allocated memory is not allowed in a `@safe` function
! fail_compilation/test18282.d(36): Error: escaping a reference to local variable `i` by copying `& i` into allocated memory is not allowed in a `@safe` function
! fail_compilation/test18282.d(37): Error: returning scope variable `staa` is not allowed in a `@safe` function
! fail_compilation/test18282.d(34):        `staa` inferred `scope` because of `staa = [& i]`
! fail_compilation/test18282.d(45): Error: escaping a reference to local variable `i` by copying `S2000(& i)` into allocated memory is not allowed in a `@safe` function
! fail_compilation/test18282.d(54): Error: escaping a reference to local variable `i` by copying `& i` into allocated memory is not allowed in a `@safe` function
! fail_compilation/test18282.d(54): Error: escaping a reference to local variable `c` by copying `& c` into allocated memory is not allowed in a `@safe` function
  ---
   */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/test19097.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/test19097.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/test19097.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/test19097.d	Sun Feb  8 22:32:13 2026
***************
*** 1,14 ****
  /* REQUIRED_ARGS: -preview=dip1000
   * TEST_OUTPUT:
  ---
! fail_compilation/test19097.d(44): Error: returning scope variable `s` is not allowed in a `@safe` function
! fail_compilation/test19097.d(48): Error: returning scope variable `s1` is not allowed in a `@safe` function
! fail_compilation/test19097.d(77): Error: assigning scope variable `z` to `ref` variable `refPtr` with longer lifetime is not allowed in a `@safe` function
! fail_compilation/test19097.d(108): Error: returning scope variable `s4` is not allowed in a `@safe` function
! fail_compilation/test19097.d(126): Error: returning scope variable `s5c` is not allowed in a `@safe` function
! fail_compilation/test19097.d(130): Error: returning scope variable `s5m` is not allowed in a `@safe` function
! fail_compilation/test19097.d(147): Error: returning scope variable `s6c` is not allowed in a `@safe` function
! fail_compilation/test19097.d(151): Error: returning scope variable `s6m` is not allowed in a `@safe` function
  ---
   */
  
--- 1,21 ----
  /* REQUIRED_ARGS: -preview=dip1000
   * TEST_OUTPUT:
  ---
! fail_compilation/test19097.d(51): Error: returning scope variable `s` is not allowed in a `@safe` function
! fail_compilation/test19097.d(50):        `s` inferred `scope` because of `s = & i`
! fail_compilation/test19097.d(55): Error: returning scope variable `s1` is not allowed in a `@safe` function
! fail_compilation/test19097.d(54):        `s1` inferred `scope` because of `s1 = & i`
! fail_compilation/test19097.d(84): Error: assigning scope variable `z` to `ref` variable `refPtr` with longer lifetime is not allowed in a `@safe` function
! fail_compilation/test19097.d(115): Error: returning scope variable `s4` is not allowed in a `@safe` function
! fail_compilation/test19097.d(114):        `s4` inferred `scope` because of `s4 = & x`
! fail_compilation/test19097.d(133): Error: returning scope variable `s5c` is not allowed in a `@safe` function
! fail_compilation/test19097.d(132):        `s5c` inferred `scope` because of `s5c = i`
! fail_compilation/test19097.d(137): Error: returning scope variable `s5m` is not allowed in a `@safe` function
! fail_compilation/test19097.d(136):        `s5m` inferred `scope` because of `s5m = i`
! fail_compilation/test19097.d(154): Error: returning scope variable `s6c` is not allowed in a `@safe` function
! fail_compilation/test19097.d(153):        `s6c` inferred `scope` because of `s6c = i`
! fail_compilation/test19097.d(158): Error: returning scope variable `s6m` is not allowed in a `@safe` function
! fail_compilation/test19097.d(157):        `s6m` inferred `scope` because of `s6m = i`
  ---
   */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/test20245.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/test20245.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/test20245.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/test20245.d	Sun Feb  8 22:32:13 2026
***************
*** 2,17 ****
  REQUIRED_ARGS: -preview=dip1000
  TEST_OUTPUT:
  ---
! fail_compilation/test20245.d(21): Error: assigning reference to local variable `x` to non-scope parameter `ptr` calling `escape` is not allowed in a `@safe` function
! fail_compilation/test20245.d(22): Error: escaping a reference to parameter `x` by copying `&x` into allocated memory is not allowed in a `@safe` function
! fail_compilation/test20245.d(23): Error: returning scope variable `a` is not allowed in a `@safe` function
! fail_compilation/test20245.d(27): Error: taking address of `scope` variable `x` with pointers is not allowed in a `@safe` function
! fail_compilation/test20245.d(33): Error: assigning reference to local variable `x` to non-scope parameter `ptr` calling `escape` is not allowed in a `@safe` function
! fail_compilation/test20245.d(34): Error: escaping a reference to parameter `x` by copying `&x` into allocated memory is not allowed in a `@safe` function
! fail_compilation/test20245.d(50): Error: assigning reference to local variable `price` to non-scope `this.minPrice` is not allowed in a `@safe` function
! fail_compilation/test20245.d(69): Error: reference to local variable `this.content[]` calling non-scope member function `Exception.this()` is not allowed in a `@safe` function
! fail_compilation/test20245.d(89): Error: assigning reference to local variable `this` to non-scope parameter `content` calling `listUp` is not allowed in a `@safe` function
! fail_compilation/test20245.d(82):        which is not `scope` because of `charPtr = content`
  ---
  */
  
--- 2,22 ----
  REQUIRED_ARGS: -preview=dip1000
  TEST_OUTPUT:
  ---
! fail_compilation/test20245.d(26): Error: assigning reference to local variable `x` to non-scope parameter `ptr` calling `escape` is not allowed in a `@safe` function
! fail_compilation/test20245.d(25):        `x` inferred `scope` because of `a = &x`
! fail_compilation/test20245.d(27): Error: escaping a reference to parameter `x` by copying `&x` into allocated memory is not allowed in a `@safe` function
! fail_compilation/test20245.d(28): Error: returning scope variable `a` is not allowed in a `@safe` function
! fail_compilation/test20245.d(25):        `a` inferred `scope` because of `a = &x`
! fail_compilation/test20245.d(32): Error: taking address of `scope` variable `x` with pointers is not allowed in a `@safe` function
! fail_compilation/test20245.d(38): Error: assigning reference to local variable `x` to non-scope parameter `ptr` calling `escape` is not allowed in a `@safe` function
! fail_compilation/test20245.d(37):        `x` inferred `scope` because of `a = &x`
! fail_compilation/test20245.d(39): Error: escaping a reference to parameter `x` by copying `&x` into allocated memory is not allowed in a `@safe` function
! fail_compilation/test20245.d(55): Error: assigning reference to local variable `price` to non-scope `this.minPrice` is not allowed in a `@safe` function
! fail_compilation/test20245.d(74): Error: reference to local variable `this.content[]` calling non-scope member function `Exception.this()` is not allowed in a `@safe` function
! fail_compilation/test20245.d(74):        `this` inferred `scope` because of `this.content[]`
! fail_compilation/test20245.d(94): Error: assigning reference to local variable `this` to non-scope parameter `content` calling `listUp` is not allowed in a `@safe` function
! fail_compilation/test20245.d(87):        `content` is not `scope` because of `charPtr = content`
! fail_compilation/test20245.d(94):        `this` inferred `scope` because of `&this.content`
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/test20489.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/test20489.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/test20489.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/test20489.d	Sun Feb  8 22:32:13 2026
***************
*** 1,10 ****
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/test20489.d(19): Error: function `pure nothrow @nogc @safe int test20489.D.f(int delegate(int) pure nothrow @nogc @safe body)` does not override any function, did you mean to override `pure nothrow @nogc @safe int test20489.B.f(scope int delegate(int) pure nothrow @nogc @safe)`?
! fail_compilation/test20489.d(19):        Did you intend to override:
! fail_compilation/test20489.d(19):        `pure nothrow @nogc @safe int test20489.B.f(scope int delegate(int) pure nothrow @nogc @safe)`
! fail_compilation/test20489.d(19):        Parameter 1 is missing `scope`
  ---
  */
  
--- 1,9 ----
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/test20489.d(18): Error: function `pure nothrow @nogc @safe int test20489.D.f(int delegate(int) pure nothrow @nogc @safe body)` does not override any function
! fail_compilation/test20489.d(14):        did you mean to override `pure nothrow @nogc @safe int test20489.B.f(scope int delegate(int) pure nothrow @nogc @safe)`?
! fail_compilation/test20489.d(18):        parameter 1 is missing `scope`
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/test20863a.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/test20863a.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/test20863a.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/test20863a.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,23 ----
+ // must not assert/crash with empty declarations
+ /* TEST_OUTPUT:
+ ---
+ fail_compilation/test20863a.d(21): Error: no property `Entry` for type `object.TypeInfo_AssociativeArray`
+ fail_compilation/test20863a.d(17):        class `TypeInfo_AssociativeArray` defined here
+ fail_compilation/test20863a.d(21): Error: no property `aaGetHash` for type `object.TypeInfo_AssociativeArray`
+ fail_compilation/test20863a.d(17):        class `TypeInfo_AssociativeArray` defined here
+ fail_compilation/test20863a.d(21): Error: no property `aaOpEqual` for type `object.TypeInfo_AssociativeArray`
+ fail_compilation/test20863a.d(17):        class `TypeInfo_AssociativeArray` defined here
+ ---
+ */
+ 
+ module object;
+ 
+ class Object { }
+ class TypeInfo { }
+ class TypeInfo_AssociativeArray { }
+ 
+ extern(C) int main()
+ {
+     int[int] aa;
+     return 0;
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/test20863b.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/test20863b.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/test20863b.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/test20863b.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,25 ----
+ // must not assert/crash with mismatched declarations
+ /* TEST_OUTPUT:
+ ---
+ fail_compilation/test20863b.d(23): Error: `Entry` isn't a template
+ fail_compilation/test20863b.d(23): Error: `aaGetHash` isn't a template function
+ fail_compilation/test20863b.d(23): Error: `aaOpEqual` isn't a template function
+ ---
+ */
+ 
+ module object;
+ 
+ class Object { }
+ class TypeInfo { }
+ class TypeInfo_AssociativeArray
+ {
+     int Entry;
+     struct aaOpEqual(K, V) { }
+     struct aaGetHash(K, V) { }
+ }
+ 
+ extern(C) int main()
+ {
+     int[int] aa;
+     return 0;
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/test21246.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/test21246.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/test21246.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/test21246.d	Sun Feb  8 22:32:13 2026
***************
*** 3,9 ****
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/test21246.d(16): Error: function `void test21246.C.set(Clock clock)` does not override any function, did you mean to override `void imports.test21246.B.set(imports.test21246.Clock clock)`?
  ---
  */
  module test21246;
--- 3,10 ----
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/test21246.d(17): Error: function `void test21246.C.set(Clock clock)` does not override any function
! fail_compilation/imports/test21246.d(7):        did you mean to override `void imports.test21246.B.set(imports.test21246.Clock clock)`?
  ---
  */
  module test21246;
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/test21634.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/test21634.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/test21634.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/test21634.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,25 ----
+ /*
+ REQUIRED_ARGS: -verrors=context
+ TEST_OUTPUT:
+ ---
+ fail_compilation/test21634.d(22): Error: function literal `(int x) { }` is not callable using argument types `(string)`
+     (int x) {} ("%s");
+                ^
+ fail_compilation/test21634.d(22):        cannot pass argument `"%s"` of type `string` to parameter `int x`
+     (int x) {} ("%s");
+                ^
+ fail_compilation/test21634.d(24): Error: declaration `test21634.main.foo` is already defined
+     int foo;
+     ^
+ fail_compilation/test21634.d(23):        `variable` `foo` is defined here
+     float foo;
+           ^
+ ---
+ */
+ void f(int x) {}
+ void main()
+ {
+     (int x) {} ("%s");
+     float foo;
+     int foo;
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/test23073.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/test23073.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/test23073.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/test23073.d	Sun Feb  8 22:32:13 2026
*************** REQUIRED_ARGS: -preview=dip1000
*** 3,9 ****
  TEST_OUTPUT:
  ---
  fail_compilation/test23073.d(28): Error: assigning scope variable `c` to non-scope parameter `c` calling `assignNext` is not allowed in a `@safe` function
! fail_compilation/test23073.d(22):        which is not `scope` because of `c.next = c`
  ---
  */
  
--- 3,9 ----
  TEST_OUTPUT:
  ---
  fail_compilation/test23073.d(28): Error: assigning scope variable `c` to non-scope parameter `c` calling `assignNext` is not allowed in a `@safe` function
! fail_compilation/test23073.d(22):        `c` is not `scope` because of `c.next = c`
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/test23159.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/test23159.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/test23159.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/test23159.d	Sun Feb  8 22:32:13 2026
***************
*** 4,11 ****
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/test23159.d(14): Error: `scope(failure)` cannot be used with -betterC
! fail_compilation/test23159.d(18): Error: `scope(success)` cannot be used with -betterC
  ---
  */
  
--- 4,11 ----
  /*
  TEST_OUTPUT:
  ---
! fail_compilation/test23159.d(14): Error: `scope(failure)` cannot be used with `-betterC`
! fail_compilation/test23159.d(18): Error: `scope(success)` cannot be used with `-betterC`
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/test23982.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/test23982.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/test23982.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/test23982.d	Sun Feb  8 22:32:13 2026
*************** REQUIRED_ARGS: -preview=dip1000
*** 3,9 ****
  TEST_OUTPUT:
  ---
  fail_compilation/test23982.d(35): Error: assigning scope variable `a` to non-scope parameter `a` calling `foo2` is not allowed in a `@safe` function
! fail_compilation/test23982.d(26):        which is not `scope` because of `b = a`
  ---
  */
  // https://issues.dlang.org/show_bug.cgi?id=23982
--- 3,9 ----
  TEST_OUTPUT:
  ---
  fail_compilation/test23982.d(35): Error: assigning scope variable `a` to non-scope parameter `a` calling `foo2` is not allowed in a `@safe` function
! fail_compilation/test23982.d(26):        `a` is not `scope` because of `b = a`
  ---
  */
  // https://issues.dlang.org/show_bug.cgi?id=23982
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/test24084.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/test24084.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/test24084.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/test24084.d	Sun Feb  8 22:32:13 2026
***************
*** 1,8 ****
  /* REQUIRED_ARGS: -nothrow
   * TEST_OUTPUT:
  ---
! fail_compilation/test24084.d(110): Error: cannot use `throw` statements with -nothrow
! fail_compilation/test24084.d(112): Error: cannot use try-catch statements with -nothrow
  ---
   */
  
--- 1,8 ----
  /* REQUIRED_ARGS: -nothrow
   * TEST_OUTPUT:
  ---
! fail_compilation/test24084.d(110): Error: cannot use `throw` statements with `-nothrow`
! fail_compilation/test24084.d(112): Error: cannot use try-catch statements with `-nothrow`
  ---
   */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/test24353.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/test24353.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/test24353.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/test24353.d	Sun Feb  8 22:32:13 2026
***************
*** 1,10 ****
  // https://issues.dlang.org/show_bug.cgi?id=24353
  
! /**
  TEST_OUTPUT:
  ---
! fail_compilation/test24353.d(23): Error: mutable method `test24353.S.opApply` is not callable using a `const` object
! fail_compilation/test24353.d(14):        Consider adding `const` or `inout` here
  ---
  */
  
--- 1,24 ----
  // https://issues.dlang.org/show_bug.cgi?id=24353
  
! /*
! REQUIRED_ARGS: -verrors=context
  TEST_OUTPUT:
  ---
! fail_compilation/test24353.d(37): Error: mutable method `test24353.S.opApply` is not callable using a `const(S)` foreach aggregate
!     foreach (e; s) {} // mod error
!                 ^
! fail_compilation/test24353.d(28):        Consider adding a method type qualifier here
!     int opApply(int delegate(int) dg)
!         ^
! fail_compilation/test24353.d(40): Error:  shared const method `test24353.S2.opApply` is not callable using a `const(S2)` foreach aggregate
!     foreach (i, e; s2) {} // mod error
!                    ^
! fail_compilation/test24353.d(47):        Consider adding a method type qualifier here
!     int opApply(int delegate(int, int) dg) const shared;
!         ^
! fail_compilation/test24353.d(42): Error: cannot uniquely infer `foreach` argument types
!     foreach (i, e; const S3()) {} // cannot infer
!     ^
  ---
  */
  
*************** struct S
*** 20,24 ****
  void example()
  {
      const S s;
!     foreach (e; s) {} // Error expected here
  }
--- 34,54 ----
  void example()
  {
      const S s;
!     foreach (e; s) {} // mod error
! 
!     const S2 s2;
!     foreach (i, e; s2) {} // mod error
! 
!     foreach (i, e; const S3()) {} // cannot infer
! }
! 
! struct S2
! {
!     int opApply(int delegate(int, int) dg) const shared;
! }
! 
! struct S3
! {
!     int opApply(int delegate(int) dg);
!     int opApply(int delegate(int, int) dg);
  }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/testrvaluecpctor.d gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/testrvaluecpctor.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/fail_compilation/testrvaluecpctor.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/fail_compilation/testrvaluecpctor.d	Sun Feb  8 22:32:13 2026
***************
*** 4,10 ****
  TEST_OUTPUT:
  ---
  fail_compilation/testrvaluecpctor.d(16): Error: cannot define both an rvalue constructor and a copy constructor for `struct Foo`
! fail_compilation/testrvaluecpctor.d(24):        Template instance `testrvaluecpctor.Foo!int.Foo.__ctor!(immutable(Foo!int), immutable(Foo!int))` creates an rvalue constructor for `struct Foo`
  fail_compilation/testrvaluecpctor.d(24): Error: none of the overloads of `this` can construct an immutable object with argument types `(immutable(Foo!int))`. Expected `immutable(immutable(Foo!int))`
  fail_compilation/testrvaluecpctor.d(18):        Candidates are: `testrvaluecpctor.Foo!int.Foo.this(ref scope Foo!int rhs)`
  fail_compilation/testrvaluecpctor.d(16):                        `this(Rhs, this This)(scope Rhs rhs)`
--- 4,10 ----
  TEST_OUTPUT:
  ---
  fail_compilation/testrvaluecpctor.d(16): Error: cannot define both an rvalue constructor and a copy constructor for `struct Foo`
! fail_compilation/testrvaluecpctor.d(24):        Template instance `testrvaluecpctor.Foo!int.Foo.this!(immutable(Foo!int), immutable(Foo!int))` creates an rvalue constructor for `struct Foo`
  fail_compilation/testrvaluecpctor.d(24): Error: none of the overloads of `this` can construct an immutable object with argument types `(immutable(Foo!int))`. Expected `immutable(immutable(Foo!int))`
  fail_compilation/testrvaluecpctor.d(18):        Candidates are: `testrvaluecpctor.Foo!int.Foo.this(ref scope Foo!int rhs)`
  fail_compilation/testrvaluecpctor.d(16):                        `this(Rhs, this This)(scope Rhs rhs)`
*************** void fail22593()
*** 30,36 ****
  TEST_OUTPUT:
  ---
  fail_compilation/testrvaluecpctor.d(40): Error: cannot define both an rvalue constructor and a copy constructor for `struct Test`
! fail_compilation/testrvaluecpctor.d(46):        Template instance `testrvaluecpctor.Test.__ctor!()` creates an rvalue constructor for `struct Test`
  ---
  */
  
--- 30,36 ----
  TEST_OUTPUT:
  ---
  fail_compilation/testrvaluecpctor.d(40): Error: cannot define both an rvalue constructor and a copy constructor for `struct Test`
! fail_compilation/testrvaluecpctor.d(46):        Template instance `testrvaluecpctor.Test.this!()` creates an rvalue constructor for `struct Test`
  ---
  */
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/runnable/bit.d gcc-16-20260208/gcc/testsuite/gdc.test/runnable/bit.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/runnable/bit.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/runnable/bit.d	Sun Feb  8 22:32:13 2026
***************
*** 1,4 ****
! /* REQUIRED_ARGS: -preview=bitfields
   */
  
  struct T
--- 1,4 ----
! /*
   */
  
  struct T
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/runnable/closure.d gcc-16-20260208/gcc/testsuite/gdc.test/runnable/closure.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/runnable/closure.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/runnable/closure.d	Sun Feb  8 22:32:13 2026
*************** void test14730x()
*** 953,958 ****
--- 953,1001 ----
  }
  
  /************************************/
+ // https://github.com/dlang/dmd/issues/20917
+ 
+ auto test20917a(int a) @nogc
+ {
+     int foo() @nogc { return a + 3; }
+     enum yes = __traits(compiles, { return a; });
+     assert(foo() == a + 3);
+     return 1;
+ }
+ 
+ void test20917b() @nogc
+ {
+     int i;
+     static if (is(typeof(() @safe @nogc
+     {
+         i++;
+     })))
+     {
+         () @safe @nogc {
+             i++;
+         }();
+     }
+     assert(i == 1);
+ }
+ 
+ void test20917c() @nogc
+ {
+     int i;
+     static if (is(typeof(() @safe @nogc
+     {
+         return (){
+             i++;
+         };
+     })))
+     {
+         () @safe @nogc {
+             i++;
+         }();
+     }
+     assert(i == 1);
+ }
+ 
+ /************************************/
  
  int main()
  {
*************** int main()
*** 986,991 ****
--- 1029,1037 ----
      test12406();
      test14730();
      //test14730x();
+     test20917a(1);
+     test20917b();
+     test20917c();
  
      printf("Success\n");
      return 0;
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/runnable/dbitfields.d gcc-16-20260208/gcc/testsuite/gdc.test/runnable/dbitfields.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/runnable/dbitfields.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/runnable/dbitfields.d	Sun Feb  8 22:32:13 2026
***************
*** 1,4 ****
! /* REQUIRED_ARGS: -preview=bitfields
   */
  
  struct S
--- 1,4 ----
! /*
   */
  
  struct S
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/runnable/dbitfieldsdm.d gcc-16-20260208/gcc/testsuite/gdc.test/runnable/dbitfieldsdm.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/runnable/dbitfieldsdm.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/runnable/dbitfieldsdm.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,196 ----
+ /* test bitfields for Digital Mars
+  * Note that this test is for win32 only
+  *
+  *
+  * DISABLED: win32mscoff win64 linux freebsd osx
+  * RUN_OUTPUT:
+ ---
+                 DM |   MS |  P32 |  P64
+ T0  =  1 1 ||  1 1 |  1 1 |  1 1 |  1 1
+ T1  =  2 2 ||  2 2 |  2 2 |  2 2 |  2 2
+ T2  =  4 4 ||  4 4 |  4 4 |  4 4 |  4 4
+ T3  = 16 8 || 16 8 | 16 8 |  8 4 |  8 8
+ T4  = 16 8 || 16 8 | 16 8 | 12 4 | 16 8
+ T5  = 16 8 || 16 8 | 16 8 |  8 4 |  8 8
+ S1  =  8 8 ||  8 8 |  8 8 |  4 4 |  8 8
+ S2  =  4 4 ||  4 4 |  4 4 |  4 4 |  4 4
+ S3  =  8 4 ||  8 4 |  8 4 |  4 4 |  4 4
+ S4  =  8 4 ||  8 4 |  8 4 |  4 4 |  4 4
+ S5  =  8 4 ||  8 4 |  8 4 |  4 4 |  4 4
+ S6  =  2 2 ||  2 2 |  2 2 |  2 2 |  2 2
+ S7  = 16 8 || 16 8 | 16 8 |  4 4 |  8 8
+ S8  =  4 2 ||  4 2 |  4 2 |  2 2 |  2 2
+ S8A =  4 2 ||  4 2 |  4 2 |  2 2 |  2 2
+ S8B =  6 2 ||  6 2 |  6 2 |  2 2 |  2 2
+ S8C =  8 4 ||  8 4 |  8 4 |  4 4 |  4 4
+ S9  =  4 2 ||  4 2 |  4 2 |  4 2 |  4 2
+ S10 =  1 1 ||  0 0 |  * * |  0 1 |  0 1
+ S11 =  1 1 ||  0 0 |  4 1 |  0 1 |  0 1
+ S12 =  4 4 ||  4 4 |  4 4 |  4 4 |  4 4
+ S13 =  8 4 ||  8 4 |  8 4 |  8 4 |  8 4
+ S14 =  8 4 ||  8 4 |  8 4 |  8 4 |  8 4
+ S15 =  8 4 ||  8 4 |  8 4 |  4 4 |  4 4
+ S16 =  4 4 ||  0 0 |  4 4 |  4 1 |  4 1
+ S17 =  4 4 ||  4 4 |  4 4 |  4 4 |  4 4
+ S18 =  2 1 ||  2 1 |  2 1 |  5 1 |  9 1
+ A0  = 16 8 || 16 8 | 16 8 | 12 4 | 16 8
+ A1  = 12 4 || 12 4 | 12 4 | 12 4 | 12 4
+ A2  = 12 4 || 12 4 | 12 4 | 12 4 | 12 4
+ A3  = 16 4 || 16 4 | 16 4 | 16 4 | 16 4
+ A4  = 12 4 || 12 4 | 12 4 |  8 4 |  8 4
+ A5  =  2 1 ||  2 1 |  2 1 |  2 1 |  2 1
+ A6  =  4 2 ||  4 2 |  4 2 |  2 2 |  2 2
+ A7  = 16 4 || 16 4 | 16 4 | 12 4 | 16 8
+ A8  = 12 4 || 12 4 | 12 4 |  8 4 |  8 8
+ A9  = 32 8 || 32 8 | 32 8 | 16 4 | 16 8
+ A10 =  4 2 ||  4 2 |  4 2 |  2 2 |  2 2
+ A11 = 16 4 || 16 4 | 16 4 | 12 4 | 12 4
+ S9 = x30200
+ S14 = x300000201
+ S15 = x201
+ S18 = 1 should be 4
+ A0 = x1
+ ---
+  */
+ 
+ import core.stdc.stdio;
+ 
+ int is64bit() { return size_t.sizeof == 8; }  // otherwise assume 32 bit
+ 
+ /*************************************************************/
+ 
+ struct T0  { ubyte x:1; };                       //
+ struct T1  { short x:1; };                       //
+ struct T2  { int x:1; };                         //
+ struct T3  { ubyte a,b,c,d; long x:1; };         //
+ struct T4  { ubyte a,b,c,d,e,f,g,h; long x:1; }; //
+ struct T5  { ubyte a,b,c,d,e,f,g; long x:1; };   //
+ struct S1  { long f:1; };                        //
+ struct S2  { int x:1; int y:1; };                //
+ struct S3  { short c; int x:1; uint y:1; };      //
+ struct S4  { int x:1; short y:1; };              //
+ struct S5  { short x:1; int y:1; };              //
+ struct S6  { short x:1; short y:1; };            //
+ struct S7  { short x:1; int y:1; long z:1; };    //
+ struct S8  { ubyte a; ubyte b:1; short c:2; };   //
+ struct S8A { ubyte b:1; short c:2; };            //
+ struct S8B { ubyte a; short b:1; ubyte c:2; };   //
+ struct S8C { ubyte a; int b:1; };                //
+ struct S9  { ubyte a; ubyte b:2; short c:9; };   //
+ struct S10 { };                                  // sizeof differs from C treatment
+ struct S11 { int :0; };                          // sizeof differs from C treatment
+ struct S12 { int :0; int x; };                   //
+ struct S13 { uint x:12; uint x1:1; uint x2:1; uint x3:1; uint x4:1; int w; }; //
+ struct S14 { ubyte a; ubyte b:4; int c:30; };    //
+ struct S15 { ubyte a; ubyte b:2; int c:9; };     //
+ struct S16 { int :32; };                         // sizeof differs from C treatment
+ struct S17 { int a:32; };                        //
+ struct S18 { ubyte a; long :0; ubyte b; };       //
+ struct A0  { int a; long b:34, c:4; };           //
+ struct A1  { int a; uint b:11; int c; };         //
+ struct A2  { int a; uint b:11, c:5, d:16;        //
+              int e; };
+ struct A3  { int a; uint b:11, c:5, :0, d:16;    //
+              int e; };
+ struct A4  { int a:8; short b:7;                 //
+              uint c:29; };
+ struct A5  { ubyte a:7, b:2; };                  //
+ struct A6  { ubyte a:7; short b:2; };            //
+ struct A7  { short a:8; int b:16; int c;         //
+              ubyte d:7; };
+ struct A8  { short a:8; int b:16; int :0;        //
+              ubyte c:7; };
+ struct A9  { ushort a:8; int b:16;               //
+              uint c:29; long d:9;
+              uint e:2, f:31; };
+ struct A10 { ushort a:8; ubyte b; };             //
+ struct A11 { ubyte a; int b:5, c:11, :0, d:8;    //
+              struct { int ee:8; } };
+ 
+ int main()
+ {
+     /* MS produces identical results for 32 and 64 bit compiles,
+      * DM is 32 bit only
+      */
+     printf("                DM |   MS |  P32 |  P64\n");
+     printf("T0  = %2d %d ||  1 1 |  1 1 |  1 1 |  1 1\n", cast(int)T0.sizeof, cast(int)T0.alignof);
+     printf("T1  = %2d %d ||  2 2 |  2 2 |  2 2 |  2 2\n", cast(int)T1.sizeof, cast(int)T1.alignof);
+     printf("T2  = %2d %d ||  4 4 |  4 4 |  4 4 |  4 4\n", cast(int)T2.sizeof, cast(int)T2.alignof);
+     printf("T3  = %2d %d || 16 8 | 16 8 |  8 4 |  8 8\n", cast(int)T3.sizeof, cast(int)T3.alignof);
+     printf("T4  = %2d %d || 16 8 | 16 8 | 12 4 | 16 8\n", cast(int)T4.sizeof, cast(int)T4.alignof);
+     printf("T5  = %2d %d || 16 8 | 16 8 |  8 4 |  8 8\n", cast(int)T5.sizeof, cast(int)T5.alignof);
+     printf("S1  = %2d %d ||  8 8 |  8 8 |  4 4 |  8 8\n", cast(int)S1.sizeof, cast(int)S1.alignof);
+     printf("S2  = %2d %d ||  4 4 |  4 4 |  4 4 |  4 4\n", cast(int)S2.sizeof, cast(int)S2.alignof);
+     printf("S3  = %2d %d ||  8 4 |  8 4 |  4 4 |  4 4\n", cast(int)S3.sizeof, cast(int)S3.alignof);
+     printf("S4  = %2d %d ||  8 4 |  8 4 |  4 4 |  4 4\n", cast(int)S4.sizeof, cast(int)S4.alignof);
+     printf("S5  = %2d %d ||  8 4 |  8 4 |  4 4 |  4 4\n", cast(int)S5.sizeof, cast(int)S5.alignof);
+     printf("S6  = %2d %d ||  2 2 |  2 2 |  2 2 |  2 2\n", cast(int)S6.sizeof, cast(int)S6.alignof);
+     printf("S7  = %2d %d || 16 8 | 16 8 |  4 4 |  8 8\n", cast(int)S7.sizeof, cast(int)S7.alignof);
+     printf("S8  = %2d %d ||  4 2 |  4 2 |  2 2 |  2 2\n", cast(int)S8.sizeof, cast(int)S8.alignof);
+     printf("S8A = %2d %d ||  4 2 |  4 2 |  2 2 |  2 2\n", cast(int)S8A.sizeof, cast(int)S8A.alignof);
+     printf("S8B = %2d %d ||  6 2 |  6 2 |  2 2 |  2 2\n", cast(int)S8B.sizeof, cast(int)S8B.alignof);
+     printf("S8C = %2d %d ||  8 4 |  8 4 |  4 4 |  4 4\n", cast(int)S8C.sizeof, cast(int)S8C.alignof);
+     printf("S9  = %2d %d ||  4 2 |  4 2 |  4 2 |  4 2\n", cast(int)S9.sizeof,  cast(int)S9.alignof);
+     printf("S10 = %2d %d ||  0 0 |  * * |  0 1 |  0 1\n", cast(int)S10.sizeof, cast(int)S10.alignof); // MS doesn't compile
+     printf("S11 = %2d %d ||  0 0 |  4 1 |  0 1 |  0 1\n", cast(int)S11.sizeof, cast(int)S11.alignof);
+     printf("S12 = %2d %d ||  4 4 |  4 4 |  4 4 |  4 4\n", cast(int)S12.sizeof, cast(int)S12.alignof);
+     printf("S13 = %2d %d ||  8 4 |  8 4 |  8 4 |  8 4\n", cast(int)S13.sizeof, cast(int)S13.alignof);
+     printf("S14 = %2d %d ||  8 4 |  8 4 |  8 4 |  8 4\n", cast(int)S14.sizeof, cast(int)S14.alignof);
+     printf("S15 = %2d %d ||  8 4 |  8 4 |  4 4 |  4 4\n", cast(int)S15.sizeof, cast(int)S15.alignof);
+     printf("S16 = %2d %d ||  0 0 |  4 4 |  4 1 |  4 1\n", cast(int)S16.sizeof, cast(int)S16.alignof);
+     printf("S17 = %2d %d ||  4 4 |  4 4 |  4 4 |  4 4\n", cast(int)S17.sizeof, cast(int)S17.alignof);
+     printf("S18 = %2d %d ||  2 1 |  2 1 |  5 1 |  9 1\n", cast(int)S18.sizeof, cast(int)S18.alignof);
+     printf("A0  = %2d %d || 16 8 | 16 8 | 12 4 | 16 8\n", cast(int)A0.sizeof,  cast(int)A0.alignof);
+     printf("A1  = %2d %d || 12 4 | 12 4 | 12 4 | 12 4\n", cast(int)A1.sizeof,  cast(int)A1.alignof);
+     printf("A2  = %2d %d || 12 4 | 12 4 | 12 4 | 12 4\n", cast(int)A2.sizeof,  cast(int)A2.alignof);
+     printf("A3  = %2d %d || 16 4 | 16 4 | 16 4 | 16 4\n", cast(int)A3.sizeof,  cast(int)A3.alignof);
+     printf("A4  = %2d %d || 12 4 | 12 4 |  8 4 |  8 4\n", cast(int)A4.sizeof,  cast(int)A4.alignof);
+     printf("A5  = %2d %d ||  2 1 |  2 1 |  2 1 |  2 1\n", cast(int)A5.sizeof,  cast(int)A5.alignof);
+     printf("A6  = %2d %d ||  4 2 |  4 2 |  2 2 |  2 2\n", cast(int)A6.sizeof,  cast(int)A6.alignof);
+     printf("A7  = %2d %d || 16 4 | 16 4 | 12 4 | 16 8\n", cast(int)A7.sizeof,  cast(int)A7.alignof);
+     printf("A8  = %2d %d || 12 4 | 12 4 |  8 4 |  8 8\n", cast(int)A8.sizeof,  cast(int)A8.alignof);
+     printf("A9  = %2d %d || 32 8 | 32 8 | 16 4 | 16 8\n", cast(int)A9.sizeof,  cast(int)A9.alignof);
+     printf("A10 = %2d %d ||  4 2 |  4 2 |  2 2 |  2 2\n", cast(int)A10.sizeof, cast(int)A10.alignof);
+     printf("A11 = %2d %d || 16 4 | 16 4 | 12 4 | 12 4\n", cast(int)A11.sizeof, cast(int)A11.alignof);
+ 
+     {
+         S9 s;
+         uint x;
+         *cast(uint *)&s = 0;
+         s.b = 2; s.c = 3;
+         x = *cast(uint *)&s;
+         printf("S9 = x%x\n", x);
+     }
+     {
+         S14 s = { 1, 2, 3 };
+         ulong v;
+         *cast(long *)&s = 0;
+         s.a = 1;
+         s.b = 2;
+         s.c = 3;
+         v = *cast(ulong *)&s;
+         printf("S14 = x%llx\n", v);
+     }
+     {
+         S15 s = { 1,2,3 };
+         uint x;
+         *cast(uint *)&s = 0;
+         s.a = 1; s.b = 2; s.c = 3;
+         x = *cast(uint *)&s;
+         printf("S15 = x%x\n", x);
+     }
+     {
+         S18 s;
+         printf("S18 = %d should be %d\n", cast(int)(&s.b - &s.a), is64bit() ? 8 : 4);
+     }
+     {
+         A0 s;
+         long x;
+         *cast(long *)&s = 0;
+         s.a = 1; s.b = 15;
+         x = *cast(long *)&s;
+         printf("A0 = x%llx\n", x);
+     }
+ 
+     return 0;
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/runnable/imports/pragmainline_a.d gcc-16-20260208/gcc/testsuite/gdc.test/runnable/imports/pragmainline_a.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/runnable/imports/pragmainline_a.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/runnable/imports/pragmainline_a.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,39 ----
+ module imports.pragmainline_a;
+ 
+ pragma(inline, true)
+ int foo()
+ {
+     return 1;
+ }
+ 
+ pragma(inline, true)
+ auto bar()
+ {
+     return &foo;
+ }
+ 
+ mixin template LengthField(alias sym)
+ {
+     pragma(inline, true)
+     size_t length() const
+     {
+         return sym.length;
+     }
+ }
+ 
+ struct Data
+ {
+     string data;
+     mixin LengthField!data;
+ 
+     pragma(inline, true)
+     int opApply(scope int delegate(const Data) dg) {
+         return dg(this);
+     }
+ }
+ 
+ pragma(inline, true)
+ int value()
+ {
+     return 10;
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/runnable/imports/test10442a.d gcc-16-20260208/gcc/testsuite/gdc.test/runnable/imports/test10442a.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/runnable/imports/test10442a.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/runnable/imports/test10442a.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,7 ----
+ module imports.test10442a;
+ 
+ struct S
+ {
+     int x;
+     void* p;
+ }
diff -Nrcpad "gcc-16-20260201/gcc/testsuite/gdc.test/runnable/imports/\344\275\240\345\245\275.d" "gcc-16-20260208/gcc/testsuite/gdc.test/runnable/imports/\344\275\240\345\245\275.d"
*** "gcc-16-20260201/gcc/testsuite/gdc.test/runnable/imports/\344\275\240\345\245\275.d"	Thu Jan  1 00:00:00 1970
--- "gcc-16-20260208/gcc/testsuite/gdc.test/runnable/imports/\344\275\240\345\245\275.d"	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,6 ----
+ module imports.你好;
+ 
+ int foo()
+ {
+ 	return 0;
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/runnable/inline4.d gcc-16-20260208/gcc/testsuite/gdc.test/runnable/inline4.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/runnable/inline4.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/runnable/inline4.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,397 ----
+ struct S
+ {
+     int a;
+     int b;
+     int c;
+ 
+     bool test(int a_, int b_, int c_) inout
+     {
+         return a_ == a && b_ == b && c_ == c;
+     }
+ }
+ 
+ __gshared S globalS = S(2, 3, 4);
+ __gshared S globalS2 = S();
+ immutable S immutableS = S(9, 8, 7);
+ 
+ S getVal()
+ {
+     // Returns by value
+     return globalS;
+ }
+ 
+ ref S getRef()
+ {
+     // Returns by reference
+     return globalS;
+ }
+ 
+ ref S getRefRvalue() __rvalue
+ {
+     // Takes ownership of globalS
+     return globalS;
+ }
+ 
+ S getImmutable()
+ {
+     return immutableS;
+ }
+ 
+ __gshared int globalDtorCount;
+ 
+ struct D
+ {
+     int d;
+ 
+     this(D rhs)
+     {
+         d = rhs.d;
+         rhs.d = 0xdeadbeef;
+     }
+ 
+     this(ref D rhs)
+     {
+         d = 12345;
+     }
+ 
+     ~this()
+     {
+         if (d == 123456)
+             globalDtorCount++;
+         d = 0xdeadbeef;
+     }
+ }
+ 
+ __gshared D globalD = D(123456);
+ __gshared D globalD2 = D(10000);
+ 
+ void resetD()
+ {
+     globalDtorCount = 0;
+     globalD.d = 123456;
+     globalD2.d = 10000;
+ }
+ 
+ D getD()
+ {
+     // Returns by value
+     return globalD;
+ }
+ 
+ D getRvalueD()
+ {
+     // Returns by moving globalD, but should not have reference semantics
+     // Tests if the inliner incorrectly applies reference semantics
+     return __rvalue(globalD);
+ }
+ 
+ ref D getRefD()
+ {
+     // Returns by reference
+     return globalD;
+ }
+ 
+ ref D getRefRvalueD() __rvalue
+ {
+     // Takes ownership of globalS
+     return globalD;
+ }
+ 
+ /************************************/
+ // Test inlining of return by value
+ 
+ S funcVal1()
+ {
+     return getVal();
+ }
+ 
+ S funcVal2()
+ {
+     return getRef();
+ }
+ 
+ S funcVal3()
+ {
+     return getRefRvalue();
+ }
+ 
+ S funcVal4()
+ {
+     return globalS.a ? immutableS : globalS;
+ }
+ 
+ S funcVal5()
+ {
+     return globalS.a ? globalS : S();
+ }
+ 
+ D funcVal6()
+ {
+     return getD();
+ }
+ 
+ D funcVal7()
+ {
+     return getRvalueD();
+ }
+ 
+ D funcVal8()
+ {
+     return getRefD();
+ }
+ 
+ D funcVal9()
+ {
+     return getRefRvalueD();
+ }
+ 
+ D funcVal10()
+ {
+     return __rvalue(globalS.a ? globalD : D());
+ }
+ 
+ void consumeD(D d) {}
+ 
+ void testValueReturn()
+ {
+     // Returning by value should not change the source object
+     getVal().a++;
+     assert(globalS.test(2, 3, 4));
+     getImmutable().a++;
+     assert(immutableS.test(9, 8, 7));
+     funcVal1().a++;
+     assert(globalS.test(2, 3, 4));
+     funcVal2().c++;
+     assert(globalS.test(2, 3, 4));
+     funcVal3().c++;
+     assert(globalS.test(2, 3, 4));
+     funcVal4().a++;
+     assert(immutableS.test(9, 8, 7));
+     funcVal5().a++;
+     assert(globalS.test(2, 3, 4));
+ 
+     consumeD(getD());
+     assert(globalD.d == 123456);
+     assert(globalDtorCount == 0);
+ 
+     consumeD(__rvalue(getD()));
+     assert(globalD.d == 123456);
+     assert(globalDtorCount == 0);
+ 
+     consumeD(getRvalueD());
+     assert(globalD.d == 0xdeadbeef);
+     assert(globalDtorCount == 1);
+     resetD();
+ 
+     consumeD(__rvalue(getRvalueD()));
+     assert(globalD.d == 0xdeadbeef);
+     assert(globalDtorCount == 1);
+     resetD();
+ 
+     consumeD(funcVal6());
+     assert(globalD.d == 123456);
+     assert(globalDtorCount == 0);
+ 
+     consumeD(__rvalue(funcVal6()));
+     assert(globalD.d == 123456);
+     assert(globalDtorCount == 0);
+ 
+     consumeD(funcVal7());
+     assert(globalD.d == 0xdeadbeef);
+     assert(globalDtorCount == 1);
+     resetD();
+ 
+     consumeD(__rvalue(funcVal7()));
+     assert(globalD.d == 0xdeadbeef);
+     assert(globalDtorCount == 1);
+     resetD();
+ 
+     consumeD(funcVal8());
+     assert(globalD.d == 123456);
+     assert(globalDtorCount == 0);
+ 
+     consumeD(__rvalue(funcVal8()));
+     assert(globalD.d == 123456);
+     assert(globalDtorCount == 0);
+ 
+     consumeD(funcVal9());
+     assert(globalD.d == 0xdeadbeef);
+     assert(globalDtorCount == 1);
+     resetD();
+ 
+     consumeD(__rvalue(funcVal9()));
+     assert(globalD.d == 0xdeadbeef);
+     assert(globalDtorCount == 1);
+     resetD();
+ 
+     consumeD(funcVal10());
+     assert(globalD.d == 123456);
+     assert(globalDtorCount == 0);
+ 
+     consumeD(__rvalue(funcVal10()));
+     assert(globalD.d == 123456);
+     assert(globalDtorCount == 0);
+ }
+ 
+ 
+ /************************************/
+ // Test inlining of return by reference
+ 
+ ref S funcRef1()
+ {
+     return getRef();
+ }
+ 
+ ref S funcRef2()
+ {
+ 
+     return globalS.a ? globalS : globalS2;
+ }
+ 
+ ref D funcRef3()
+ {
+     return getRefD();
+ }
+ 
+ ref D funcRef4()
+ {
+     return __rvalue(globalS.a ? globalD : globalD2);
+ }
+ 
+ void consumeRefD(ref D d)
+ {
+     assert(d.d == 123456);
+     consumeD(__rvalue(d));
+     assert(d.d == 0xdeadbeef);
+ }
+ 
+ void testRefReturn()
+ {
+     // Returning by ref should mutate the source object
+     funcRef1().a++;
+     assert(globalS.test(3, 3, 4));
+     funcRef2().c++;
+     assert(globalS.test(3, 3, 5));
+ 
+     // Passing ref to value parameter should trigger a copy
+     resetD();
+     consumeD(funcRef3());
+     assert(globalD.d == 123456);
+     assert(globalDtorCount == 0);
+ 
+     // ... but not if there is __rvalue
+     consumeD(__rvalue(funcRef3()));
+     assert(globalD.d == 0xdeadbeef);
+     assert(globalDtorCount == 1);
+ 
+     // ditto
+     resetD();
+     consumeD(funcRef4());
+     assert(globalD.d == 123456);
+     assert(globalDtorCount == 0);
+     consumeD(__rvalue(funcRef4()));
+     assert(globalD.d == 0xdeadbeef);
+     assert(globalDtorCount == 1);
+ 
+     resetD();
+     consumeRefD(funcRef3());
+ 
+     resetD();
+     consumeRefD(funcRef4());
+ }
+ 
+ /************************************/
+ // Test inlining of return by rvalue reference
+ 
+ ref S funcRvalueRef1() __rvalue
+ {
+     return getRef();
+ }
+ 
+ ref S funcRvalueRef2() __rvalue
+ {
+     return globalS.a ? globalS : globalS2;
+ }
+ 
+ ref D funcRvalueRef3() __rvalue
+ {
+     return getRefD();
+ }
+ 
+ ref D funcRvalueRef4() __rvalue
+ {
+     return globalS.a ? globalD : globalD2;
+ }
+ 
+ void consumeRvalueRefD(D d)
+ {
+     assert(d.d == 123456);
+     consumeD(__rvalue(d));
+     assert(d.d == 0xdeadbeef);
+ }
+ 
+ void testRvalueRefReturn()
+ {
+     // rvalue ref is ref
+     funcRvalueRef1().a++;
+     assert(globalS.test(4, 3, 5));
+     funcRvalueRef2().c++;
+     assert(globalS.test(4, 3, 6));
+ 
+     resetD();
+     consumeRvalueRefD(funcRvalueRef3());
+ 
+     resetD();
+     consumeRvalueRefD(funcRvalueRef4());
+ }
+ 
+ /************************************/
+ // https://github.com/dlang/dmd/issues/22157
+ class Test22157
+ {
+     override string toString()
+     {
+         auto e = { return cast() super; } ();
+         return null;
+     }
+ }
+ 
+ /************************************/
+ // https://issues.dlang.org/show_bug.cgi?id=22089
+ 
+ struct S22089
+ {
+     @disable this(ref return scope typeof(this) rhs);
+     @disable this(this);
+     void* cons;
+     this(int i)
+     {
+         cons = cast(void*)&this;
+     }
+     void start()
+     {
+         void* s = cast(void*)&this;
+         assert(cons == s);
+     }
+ }
+ 
+ auto fun22089()
+ {
+     return S22089(42);
+ }
+ 
+ void test22089()
+ {
+     auto op = fun22089();
+     op.start();
+ }
+ 
+ /************************************/
+ 
+ void main()
+ {
+     testValueReturn();
+     testRefReturn();
+     testRvalueRefReturn();
+     test22089();
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/runnable/issue22069.d gcc-16-20260208/gcc/testsuite/gdc.test/runnable/issue22069.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/runnable/issue22069.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/runnable/issue22069.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,27 ----
+ // REQUIRED_ARGS: -O
+ // https://github.com/dlang/dmd/issues/22069
+ 
+ int recurse(int* i)
+ {
+   L1:
+     int j = 0;
+     int* p = &j;
+ 
+     if (*i)
+     {
+         return recurse(p);
+     }
+     else
+     {
+         if (p is i)
+             assert(0);
+         else
+             return j;
+     }
+ }
+ 
+ void main()
+ {
+     int i = 1;
+     recurse(&i);
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/runnable/mars1.d gcc-16-20260208/gcc/testsuite/gdc.test/runnable/mars1.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/runnable/mars1.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/runnable/mars1.d	Sun Feb  8 22:32:13 2026
*************** template tuple(A...) { alias tuple = A;
*** 9,14 ****
--- 9,39 ----
  
  ///////////////////////
  
+ void testIntegralPromotions()
+ {
+     uint uconv1(int q, ubyte  p) { return p; } assert(uconv1(0,0xFF)        == 0xFF);
+     uint uconv2(int q, ushort p) { return p; } assert(uconv2(0,0xFFFF)      == 0xFFFF);
+     uint uconv3(int q, uint   p) { return p; } assert(uconv3(0,0xFFFF_FFFF) == 0xFFFF_FFFF);
+     //uint uconv4(int q, ulong  p) { return p; }
+ 
+     ulong uconv5(int q, ubyte  p) { return p; } assert(uconv5(0,0xFF)                  == 0xFF);
+     ulong uconv6(int q, ushort p) { return p; } assert(uconv6(0,0xFFFF)                == 0xFFFF);
+     ulong uconv7(int q, uint   p) { return p; } assert(uconv7(0,0xFFFF_FFFF)           == 0xFFFF_FFFF);
+     ulong uconv8(int q, ulong  p) { return p; } assert(uconv8(0,0xFFFF_FFFF_FFFF_FFFF) == 0xFFFF_FFFF_FFFF_FFFF);
+ 
+     uint sconv1(int q, byte  p) { return p; } assert(sconv1(0,cast(byte)0xFF)    == 0xFFFF_FFFF);
+     uint sconv2(int q, short p) { return p; } assert(sconv2(0,cast(short)0xFFFF) == 0xFFFF_FFFF);
+     uint sconv3(int q, int   p) { return p; } assert(sconv3(0,0xFFFF_FFFF)       == 0xFFFF_FFFF);
+     //uint sconv4(int q, long  p) { return p; }
+ 
+     ulong sconv5(int q, byte  p) { return p; } assert(sconv5(0,cast(byte)0xFF)        == 0xFFFF_FFFF_FFFF_FFFF);
+     ulong sconv6(int q, short p) { return p; } assert(sconv6(0,cast(short)0xFFFF)     == 0xFFFF_FFFF_FFFF_FFFF);
+     ulong sconv7(int q, int   p) { return p; } assert(sconv7(0,0xFFFF_FFFF)           == 0xFFFF_FFFF_FFFF_FFFF);
+     ulong sconv8(int q, long  p) { return p; } assert(sconv8(0,0xFFFF_FFFF_FFFF_FFFF) == 0xFFFF_FFFF_FFFF_FFFF);
+ }
+ 
+ ///////////////////////
+ 
  // https://github.com/dlang/dmd/pull/11441
  
  long sdiv1(long l)
*************** void test10()
*** 2566,2571 ****
--- 2591,2598 ----
  
  int main()
  {
+     testIntegralPromotions();
+ 
      // All the various integer divide tests
      testsdiv2();
      testulldiv();
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/runnable/nested.d gcc-16-20260208/gcc/testsuite/gdc.test/runnable/nested.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/runnable/nested.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/runnable/nested.d	Sun Feb  8 22:32:13 2026
*************** void test14846()
*** 2526,2531 ****
--- 2526,2552 ----
      foo14846({ S* p = new S(1); });
      foo14846({ S[] a = [S()]; });
      foo14846({ S[] a = [S(1)]; });
+ 
+     void named1()
+     {
+         S s;
+     }
+ 
+     foo14846(&named1);
+ 
+     void named2()
+     {
+         S s = S(1);
+     }
+ 
+     foo14846(&named2);
+ 
+     void named3()
+     {
+         S[3] s;
+     }
+ 
+     foo14846(&named3);
  }
  
  /*******************************************/
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/runnable/opcolon.d gcc-16-20260208/gcc/testsuite/gdc.test/runnable/opcolon.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/runnable/opcolon.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/runnable/opcolon.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,24 ----
+ // REQUIRED_ARGS: -betterC
+ 
+ /* This test triggers an address miscalculation bug in DMD 2.111
+  * with -inline.
+  * May not crash if the data segment has a different layout,
+  * e.g. when pasted into another file.
+  */
+ 
+ struct S {
+    int i;
+ }
+ 
+ __gshared S gs = S(1);
+ ref S get()
+ {
+     return gs;
+ }
+ 
+ extern (C)
+ int main()
+ {
+     (get().i ? get() : get()).i++;
+     return 0;
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/runnable/opover3.d gcc-16-20260208/gcc/testsuite/gdc.test/runnable/opover3.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/runnable/opover3.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/runnable/opover3.d	Sun Feb  8 22:32:13 2026
*************** struct S12124
*** 170,175 ****
--- 170,200 ----
  }
  
  /**************************************/
+ // https://github.com/dlang/dmd/issues/20927
+ 
+ struct NoStatic0 { auto opCall() => 2; }
+ struct NoStatic1 { int x; NoStatic1 opCall() => NoStatic1(3); }
+ 
+ struct Yes0 { static opCall() => 2; }
+ struct Yes1 { static opCall()() => 2; }
+ struct Yes2
+ {
+     auto call()(int x) => this.init;
+     template call() { static call() => 2; }
+     alias opCall = call;
+ }
+ 
+ void test20927()
+ {
+     assert(NoStatic0() == NoStatic0.init);
+     assert(NoStatic1()() == NoStatic1(3));
+ 
+     assert(Yes0() == 2);
+     assert(Yes1() == 2);
+     assert(Yes2() == 2);
+ }
+ 
+ /**************************************/
  
  void main()
  {
*************** void main()
*** 181,184 ****
--- 206,210 ----
      test3c();
      test4();
      test12070();
+     test20927();
  }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/runnable/overload.d gcc-16-20260208/gcc/testsuite/gdc.test/runnable/overload.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/runnable/overload.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/runnable/overload.d	Sun Feb  8 22:32:13 2026
*************** void test21522()
*** 1262,1267 ****
--- 1262,1284 ----
  
  /***************************************************/
  
+ // https://github.com/dlang/dmd/issues/21920
+ 
+ struct S21920
+ {
+     void funB2(char a) {}
+     void funB(int b) {}
+     alias funB = funB2;
+     void funB()(float t) {}
+ }
+ 
+ void test21920()
+ {
+     static assert(__traits(getOverloads, S21920, "funB", true).length == 3);
+ }
+ 
+ /***************************************************/
+ 
  int main()
  {
      test1528a();
*************** int main()
*** 1298,1303 ****
--- 1315,1321 ----
      test14965();
      test21481();
      test21522();
+     test21920();
  
      printf("Success\n");
      return 0;
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/runnable/pragmainline.d gcc-16-20260208/gcc/testsuite/gdc.test/runnable/pragmainline.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/runnable/pragmainline.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/runnable/pragmainline.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,54 ----
+ // REQUIRED_ARGS: -wi
+ // EXTRA_FILES: imports/pragmainline_a.d
+ /* TEST_OUTPUT:
+ ---
+ ---
+ */
+ 
+ 
+ import imports.pragmainline_a;
+ 
+ auto anonclass()
+ {
+     return new class {
+         pragma(inline, true)
+         final size_t foo()
+         {
+             return value();
+         }
+     };
+ }
+ 
+ auto testAlwaysInline()
+ {
+     size_t var;
+ 
+     foreach (d; Data("string"))
+     {
+         var = d.length();
+     }
+ 
+     assert(var == 6);
+ 
+     var = anonclass().foo();
+ 
+     assert(var == 10);
+ 
+     auto nested = (size_t i) {
+         return i - value();
+     };
+ 
+     var = nested(var);
+ 
+     assert(var == 0);
+ }
+ 
+ void main()
+ {
+     immutable baz = () => 1;
+     assert(foo() == bar()());
+     assert(foo() == baz());
+     assert(bar()() == baz());
+ 
+     testAlwaysInline();
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/runnable/real_to_float.d gcc-16-20260208/gcc/testsuite/gdc.test/runnable/real_to_float.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/runnable/real_to_float.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/runnable/real_to_float.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,28 ----
+ /* The test related to https://github.com/dlang/dmd/issues/22322
+  * The issue title:
+  * "converting real to float uses double rounding for 64-bit code
+  * causing unexpected results"
+  */
+ pragma(inline, false)
+ void test(real r)
+ {
+     assert(r == 0x1.000002fffffffcp-1);
+     double d = r;
+     assert(d == 0x1.000003p-1);
+     float f = r;
+     assert(f == 0x1.000002p-1);
+     float fd = d;
+     assert(fd == 0x1.000004p-1);
+     real rd = d;
+     assert(rd == 0x1.000003p-1);
+     float frd = rd;
+     assert(frd == 0x1.000004p-1);
+ }
+ 
+ void main()
+ {
+     static if (real.sizeof > 8)
+     {
+         test(0x1.000002fffffffcp-1);
+     }
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/runnable/rvalue1.d gcc-16-20260208/gcc/testsuite/gdc.test/runnable/rvalue1.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/runnable/rvalue1.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/runnable/rvalue1.d	Sun Feb  8 22:32:13 2026
***************
*** 1,4 ****
! /* PERMUTE_ARGS: -preview=rvaluerefparam
  /* testing __rvalue */
  
  import core.stdc.stdio;
--- 1,4 ----
! /* REQUIRED_ARGS: -preview=rvaluerefparam
  /* testing __rvalue */
  
  import core.stdc.stdio;
*************** void test10()
*** 243,248 ****
--- 243,305 ----
  }
  
  /********************************/
+ // https://github.com/dlang/dmd/issues/22111
+ 
+ __gshared int copyCount11;
+ __gshared int moveCount11;
+ __gshared int dtorCount11;
+ 
+ struct S11
+ {
+     int i;
+     this(S11 rhs) { moveCount11++; }
+     this(ref S rhs) { copyCount11++; }
+     ~this() { dtorCount11++; }
+ }
+ 
+ __gshared S11 s11obj;
+ 
+ ref S11 refS11() { return s11obj; }
+ ref S11 moveS11() __rvalue { return s11obj; }
+ S11 copyRefS11() { return __rvalue(refS11()); }
+ S11 copyMoveS11() { return moveS11(); }
+ 
+ void test11()
+ {
+     copyRefS11();
+     assert(copyCount11 == 0 && moveCount11 == 1 && dtorCount11 == 2);
+     moveCount11 = dtorCount11 = 0;
+     copyMoveS11();
+     assert(copyCount11 == 0 && moveCount11 == 1 && dtorCount11 == 2);
+ }
+ 
+ /********************************/
+ 
+ struct S12{
+     S12* ptr;
+     this(int) { ptr = &this; }
+     this(ref inout S12) { ptr = &this; }
+     this(S12) { ptr = &this; }
+ }
+ 
+ struct V12
+ {
+     S12 s;
+     this(int) { s = S12(1); }
+ }
+ 
+ S12 foo12()
+ {
+     return __rvalue(V12(1).s);
+ }
+ 
+ void test12()
+ {
+     S12 s = foo12();
+     assert(&s == s.ptr);
+ }
+ 
+ /********************************/
  
  int main()
  {
*************** int main()
*** 255,260 ****
--- 312,320 ----
      test7();
      test8();
      test9();
+     test10();
+     test11();
+     test12();
  
      return 0;
  }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/runnable/staticaa.d gcc-16-20260208/gcc/testsuite/gdc.test/runnable/staticaa.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/runnable/staticaa.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/runnable/staticaa.d	Sun Feb  8 22:32:13 2026
*************** void testClassLiteral()
*** 209,224 ****
  // https://github.com/dlang/dmd/issues/21690
  void testMultiDim()
  {
!     // int[int][int] aa1 = [ 1: [2: 3] ]; // Error: invalid value `[2:3]` in initializer (see #17804)
      int[int][int] aa2 = ([ 1: [2: 3] ]); // workaround
      auto aa3 = [ 1: [2: 3] ]; // works, too
      static auto aa4 = [ 1: [2: 3] ]; // Error: internal compiler error: failed to detect static initialization of associative array
      assert(aa2 == aa3);
      assert(aa3 == aa4);
  }
  
  /////////////////////////////////////////////
  
  void main()
  {
      testSimple();
--- 209,257 ----
  // https://github.com/dlang/dmd/issues/21690
  void testMultiDim()
  {
!     int[int][int] aa1 = [ 1: [2: 3] ]; // Error: invalid value `[2:3]` in initializer (see #17804)
      int[int][int] aa2 = ([ 1: [2: 3] ]); // workaround
      auto aa3 = [ 1: [2: 3] ]; // works, too
      static auto aa4 = [ 1: [2: 3] ]; // Error: internal compiler error: failed to detect static initialization of associative array
+     assert(aa1 == aa2);
      assert(aa2 == aa3);
      assert(aa3 == aa4);
  }
  
  /////////////////////////////////////////////
  
+ // https://github.com/dlang/dmd/issues/17804
+ void testMultiDimInit()
+ {
+     static struct D
+     {
+         string[string][string] aa;
+         this(string[string][string] _aa) { aa = _aa; }
+     }
+     static struct S
+     {
+         //Error: not an associative array initializer
+         D a = ["fdsa": ["fdsafd": "fdsfa"]];
+ 
+         // OK
+         D b = (["fdsa": ["fdsafd": "fdsfa"]]);
+     }
+     immutable string[7] a = [
+         3 : null,
+         2 : "D",
+         1 : "C",
+     ];
+     static int[char][char] arr = ['A' : ['B': 0]]; // error
+     assert(arr.length == 1);
+     assert(arr['A'] == ['B':0]);
+ 
+     S s;
+     assert(s.a.aa["fdsa"]["fdsafd"] == "fdsfa");
+     assert(s.b.aa["fdsa"]["fdsafd"] == "fdsfa");
+ }
+ 
+ /////////////////////////////////////////////
+ 
  void main()
  {
      testSimple();
*************** void main()
*** 232,235 ****
--- 265,269 ----
      testStaticArray();
      testClassLiteral();
      testMultiDim();
+     testMultiDimInit();
  }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/runnable/structlit_rvalue.d gcc-16-20260208/gcc/testsuite/gdc.test/runnable/structlit_rvalue.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/runnable/structlit_rvalue.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/runnable/structlit_rvalue.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,15 ----
+ void refCounted(ProcessPipes val)
+ {
+     val = ProcessPipes.init;
+ }
+ 
+ struct ProcessPipes
+ {
+     char[33] arr;
+     ~this() @safe {}
+ }
+ 
+ void main()
+ {
+     refCounted(ProcessPipes.init);
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/runnable/template9.d gcc-16-20260208/gcc/testsuite/gdc.test/runnable/template9.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/runnable/template9.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/runnable/template9.d	Sun Feb  8 22:32:13 2026
*************** template map_front12186(fun...)
*** 3405,3411 ****
  
  void test12186()
  {
!     immutable int[][] mat;
  
      mat.map_front12186!((in r) => 0);              // OK
      mat.map_front12186!((const r) => 0);           // OK
--- 3405,3411 ----
  
  void test12186()
  {
!     immutable int[][] mat = new int[][](1);
  
      mat.map_front12186!((in r) => 0);              // OK
      mat.map_front12186!((const r) => 0);           // OK
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/runnable/test10442.d gcc-16-20260208/gcc/testsuite/gdc.test/runnable/test10442.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/runnable/test10442.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/runnable/test10442.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,16 ----
+ // EXTRA_FILES: imports/test10442a.d
+ module test10442;
+ import imports.test10442a;
+ 
+ struct T
+ {
+     int x;
+     void* p;
+ }
+ 
+ void main()
+ {
+     // assumes enum RTInfo(T) merges identical bitmaps
+     assert(typeid(T).rtInfo !is null); // ok
+     assert(typeid(S).rtInfo is typeid(T).rtInfo); // fails
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/runnable/test20275.d gcc-16-20260208/gcc/testsuite/gdc.test/runnable/test20275.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/runnable/test20275.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/runnable/test20275.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,8 ----
+ // EXTRA_SOURCES: imports/你好.d
+ 
+ import imports.你好;
+ 
+ int main()
+ {
+ 	return foo();
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/runnable/test20301.d gcc-16-20260208/gcc/testsuite/gdc.test/runnable/test20301.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/runnable/test20301.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/runnable/test20301.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,12 ----
+ // https://github.com/dlang/dmd/issues/20301
+ void main()
+ {
+ }
+ 
+ string genline(string i)
+ {
+     return "struct S" ~ i ~ " { S" ~ i ~ " *p; int x, y, z; } S" ~ i ~ "* foo" ~ i ~ "() { return null; }";
+ }
+ 
+ static foreach(i; 0..12288)
+     mixin(genline(i.stringof));
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/runnable/test21478a.d gcc-16-20260208/gcc/testsuite/gdc.test/runnable/test21478a.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/runnable/test21478a.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/runnable/test21478a.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,23 ----
+ // https://github.com/dlang/dmd/issues/21478
+ 
+ // Test struct that implements "rule of five"
+ 
+ struct S21478
+ {
+     // 1. destructor
+     ~this() { }
+     // 2. copy constructor
+     this(ref return scope S21478) { assert(0); }
+     // 3. copy assign
+     void opAssign(const ref S21478) { }
+     // 4. move constructor
+     this(return scope S21478) { assert(0); }
+     // 5. move assign
+     void opAssign(const S21478) { assert(0); }
+ }
+ 
+ void main()
+ {
+     S21478 sa, sb;
+     sb = sa;    // Should call 3, not 2 + 5.
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/runnable/test21478b.d gcc-16-20260208/gcc/testsuite/gdc.test/runnable/test21478b.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/runnable/test21478b.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/runnable/test21478b.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,36 ----
+ // https://github.com/dlang/dmd/issues/21478
+ 
+ // Test struct that implements copy constructor follows rvalue expression spec:
+ //      If both ref and non-ref parameter overloads are present,
+ //      an rvalue is preferably matched to the non-ref parameters,
+ //      and an lvalue is preferably matched to the ref parameter.
+ //      An RvalueExpression will preferably match with the non-ref parameter.
+ 
+ struct S21478
+ {
+     this(ref return scope S21478) { assert(0); }
+ }
+ 
+ struct P21478
+ {
+     int plain_old_data;
+ }
+ 
+ int overload(const S21478) { return 1; }
+ int overload(const ref S21478) { return 2; }
+ 
+ int overload(const P21478) { return 1; }
+ int overload(const ref P21478) { return 2; }
+ 
+ void main()
+ {
+     S21478 s;
+     assert(overload(s) == 2);
+     assert(overload(S21478()) == 1);
+     assert(overload(__rvalue(s)) == 1);
+ 
+     P21478 p;
+     assert(overload(p) == 2);
+     assert(overload(P21478()) == 1);
+     assert(overload(__rvalue(p)) == 1);
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/runnable/test21757.d gcc-16-20260208/gcc/testsuite/gdc.test/runnable/test21757.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/runnable/test21757.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/runnable/test21757.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,10 ----
+ // https://github.com/dlang/dmd/issues/21757
+ 
+ struct S
+ {
+     void*[300_000] arr; // generates stupidly large symbols for RTImfoImpl!() that crash MS link.exe
+ }
+ 
+ void main()
+ {
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/runnable/test22079.d gcc-16-20260208/gcc/testsuite/gdc.test/runnable/test22079.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/runnable/test22079.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/runnable/test22079.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,18 ----
+ struct S {
+     ~this() {}
+ }
+ 
+ __gshared S s = S();
+ 
+ ref S refS() {
+     return s;
+ }
+ 
+ void takeS(S s2) {
+     assert(&s !is &s2);
+ }
+ 
+ void main()
+ {
+     takeS(refS());
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/runnable/test28.d gcc-16-20260208/gcc/testsuite/gdc.test/runnable/test28.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/runnable/test28.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/runnable/test28.d	Sun Feb  8 22:32:13 2026
***************
*** 1,3 ****
--- 1,5 ----
+ // PERMUTE_ARGS: -fPIC -inline -release -g -O
+ 
  module test;
  
  import core.stdc.stdio;
*************** void test18576()
*** 1272,1277 ****
--- 1274,1399 ----
  
  /*******************************************/
  
+ struct S67
+ {
+     S67* ptr;
+ 
+     this(int)
+     {
+         pragma(inline, false);
+         ptr = &this;
+     }
+ 
+     @disable this(this);
+ }
+ 
+ pragma(inline, false)
+ S67 make67()
+ {
+     return S67(1);
+ }
+ 
+ __gshared int i67;
+ 
+ S67 f67()
+ out (s; s.ptr == &s)
+ {
+     i67++;
+     return make67();
+ }
+ 
+ void test67()
+ {
+     S67 s = f67();
+     assert(s.ptr == &s);
+ }
+ 
+ /*******************************************/
+ // https://github.com/dlang/dmd/issues/22160
+ 
+ struct Vector22160(T)
+ {
+     T[] _payload;
+ 
+     ~this() const nothrow {}
+ 
+     @property size_t length() const
+     {
+         return _payload.length;
+     }
+ 
+     @property T* ptr() inout {
+         return cast(T*) _payload.ptr;
+     }
+ }
+ 
+ struct DEREncoder
+ {
+     Vector22160!ubyte getContentsUnlocked()
+     {
+         return Vector22160!ubyte();
+     }
+ 
+     Vector22160!ubyte m_contents;
+ }
+ 
+ Vector22160!ubyte putInSequence()(const auto ref Vector22160!ubyte contents)
+ {
+     return DEREncoder().getContentsUnlocked();
+ }
+ 
+ void foo22160(T)(Vector22160!T*, T* ptr, size_t)
+ {
+     assert(ptr is null);
+ }
+ 
+ void bar22160(Vector22160!ubyte val)
+ {
+     ulong[16] padding = 0x1234567890123456UL;
+     foo22160(&val, val.ptr, val.length);
+ }
+ 
+ void test22160()
+ {
+     bar22160(putInSequence(Vector22160!ubyte()));
+ }
+ 
+ /*******************************************/
+ // https://github.com/dlang/dmd/issues/22292
+ 
+ struct Vector22292(T)
+ {
+     T[] payload = [1];
+ 
+     ~this() nothrow
+     {
+         payload = null;
+     }
+ 
+     void check(ref Vector22292 val)
+     {
+         assert(val.payload.length == 1);
+     }
+ }
+ 
+ struct DEREncoder2
+ {
+     ref Vector22292!int getContentsUnlocked()
+     {
+         return m_contents;
+     }
+ 
+     Vector22292!int m_contents;
+ }
+ 
+ void test22292()
+ {
+     Vector22292!int o;
+     o.check(DEREncoder2().getContentsUnlocked());
+ }
+ 
+ /*******************************************/
+ 
  void main()
  {
      printf("Start\n");
*************** void main()
*** 1336,1341 ****
--- 1458,1466 ----
      test64();
      test65();
      test18576();
+     test67();
+     test22160();
+     test22292();
  
      printf("Success\n");
  }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/runnable/test42.d gcc-16-20260208/gcc/testsuite/gdc.test/runnable/test42.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/runnable/test42.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/runnable/test42.d	Sun Feb  8 22:32:13 2026
*************** void test7436()
*** 6043,6049 ****
  {
      ubyte a = 10;
      float f = 6;
!     ubyte b = a += f;
      assert(b == 16);
  }
  
--- 6043,6049 ----
  {
      ubyte a = 10;
      float f = 6;
!     ubyte b = a += cast(ubyte)f;
      assert(b == 16);
  }
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/runnable/test_delegate_init_in_struct.d gcc-16-20260208/gcc/testsuite/gdc.test/runnable/test_delegate_init_in_struct.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/runnable/test_delegate_init_in_struct.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/runnable/test_delegate_init_in_struct.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,15 ----
+ struct S
+ {
+     string[] delegate() dg;
+ }
+ 
+ S s = {
+     dg: () => ["hello"] // SEGFAULT without explicit `delegate`
+ };
+ 
+ void main()
+ {
+     auto result = s.dg();
+     assert(result.length == 1);
+     assert(result[0] == "hello");
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/runnable/test_real_array_param.d gcc-16-20260208/gcc/testsuite/gdc.test/runnable/test_real_array_param.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/runnable/test_real_array_param.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gdc.test/runnable/test_real_array_param.d	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,16 ----
+ void fn(int* x, real[1] arr)
+ {
+     auto y = *x;  // should not segfault
+     assert(y == 42, "x parameter corrupted");
+     assert(arr[0] == 1.0, "arr (real[1]) corrupted");
+ }
+ 
+ void main()
+ {
+     real[1] arr = [1.0];
+     int x = 42;
+     fn(&x, arr);
+ 
+     assert(x == 42, "x value corrupted");
+     assert(arr[0] == 1.0, "arr (real[1]) value corrupted");
+ }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/runnable/testaa2.d gcc-16-20260208/gcc/testsuite/gdc.test/runnable/testaa2.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/runnable/testaa2.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/runnable/testaa2.d	Sun Feb  8 22:32:13 2026
*************** void test21207()
*** 328,333 ****
--- 328,341 ----
  }
  
  /************************************************/
+ void foo() @safe
+ {
+     immutable key = 1;
+     int[int] aa;
+     aa[key] = 123;
+ }
+ 
+ /************************************************/
  
  void testEvaluationOrder()
  {
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/runnable/testaa3.d gcc-16-20260208/gcc/testsuite/gdc.test/runnable/testaa3.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/runnable/testaa3.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/runnable/testaa3.d	Sun Feb  8 22:32:13 2026
*************** void test12403()
*** 371,376 ****
--- 371,390 ----
  }
  
  /***************************************************/
+ // regressions after converting AA to template
+ void test21066()
+ {
+     const(int) getValue() { return 0; }
+     int[] arr;
+     arr = [getValue()]; // works
+     int[][string] aa;
+     aa["a"] = [getValue()]; // fails: cannot implicitly convert expression `__aaval` of type `const(int)[]` to `int[]`
+ 
+     string[int[]] aa2;
+     aa2[[getValue()]] = "a"; // no problem because key type is automatically const(int)[]
+ }
+ 
+ /***************************************************/
  
  void main()
  {
*************** void main()
*** 396,399 ****
--- 410,414 ----
      testTypeinfo();
      test12220();
      test12403();
+     test21066();
  }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/runnable/testassign.d gcc-16-20260208/gcc/testsuite/gdc.test/runnable/testassign.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/runnable/testassign.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/runnable/testassign.d	Sun Feb  8 22:32:13 2026
*************** void test13044()
*** 1127,1133 ****
  void test12500()
  {
      size_t foo;
!     ++foo *= 1.5;   // Rewrite to: (foo += 1) *= 1.5;
  }
  
  /***************************************************/
--- 1127,1133 ----
  void test12500()
  {
      size_t foo;
!     ++foo *= cast(size_t)1.5;   // Rewrite to: (foo += 1) *= 1.5;
  }
  
  /***************************************************/
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/runnable/traits_initSymbol.d gcc-16-20260208/gcc/testsuite/gdc.test/runnable/traits_initSymbol.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/runnable/traits_initSymbol.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/runnable/traits_initSymbol.d	Sun Feb  8 22:32:13 2026
*************** void testExternCppClass()
*** 108,113 ****
--- 108,126 ----
      assert(init == (cast(void*) ac)[0 .. init.length]);
  }
  
+ void testFuncParam()
+ {
+     // https://github.com/dlang/dmd/issues/22135
+     struct S {}
+ 
+     void foo(T)(T _) {}
+ 
+     void bar()
+     {
+         foo(__traits(initSymbol, S));
+     }
+ }
+ 
  void main()
  {
      testZero();
*************** void main()
*** 116,119 ****
--- 129,133 ----
      testAlignedStruct();
      testAlignedClass();
      testExternCppClass();
+     testFuncParam();
  }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gdc.test/runnable/uda.d gcc-16-20260208/gcc/testsuite/gdc.test/runnable/uda.d
*** gcc-16-20260201/gcc/testsuite/gdc.test/runnable/uda.d	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gdc.test/runnable/uda.d	Sun Feb  8 22:32:13 2026
*************** static if(is(typeof(foo20831) Params2083
*** 697,702 ****
--- 697,708 ----
  
  /************************************************/
  
+ // https://github.com/dlang/dmd/issues/19788
+ @10 void f(@20 int x)
+ {
+     static assert([__traits(getAttributes, x)] == [20]);
+ }
+ 
  /************************************************/
  // https://issues.dlang.org/show_bug.cgi?id=15804
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gfortran.dg/c_funloc_tests_7.f90 gcc-16-20260208/gcc/testsuite/gfortran.dg/c_funloc_tests_7.f90
*** gcc-16-20260201/gcc/testsuite/gfortran.dg/c_funloc_tests_7.f90	Sun Feb  1 22:32:14 2026
--- gcc-16-20260208/gcc/testsuite/gfortran.dg/c_funloc_tests_7.f90	Sun Feb  8 22:32:13 2026
*************** cfp = c_funloc (noCsub)
*** 16,21 ****
  call c_f_procpointer (cfp, fint)
  end
  
! ! { dg-final { scan-tree-dump-times "cfp =\[^;\]+ nocsub;" 1 "original" } }
  ! { dg-final { scan-tree-dump-times "fint =\[^;\]+ cfp;" 1 "original" } }
  
--- 16,21 ----
  call c_f_procpointer (cfp, fint)
  end
  
! ! { dg-final { scan-tree-dump-times "D.\[0-9\]* =\[^;\]+ nocsub;" 1 "original" } }
  ! { dg-final { scan-tree-dump-times "fint =\[^;\]+ cfp;" 1 "original" } }
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gfortran.dg/c_funloc_tests_9.f90 gcc-16-20260208/gcc/testsuite/gfortran.dg/c_funloc_tests_9.f90
*** gcc-16-20260201/gcc/testsuite/gfortran.dg/c_funloc_tests_9.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gfortran.dg/c_funloc_tests_9.f90	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,34 ----
+ ! { dg-do link }
+ ! { dg-options "-O1 -flto" }
+ ! PR 117303
+ 
+ MODULE M1
+   USE, INTRINSIC :: ISO_C_BINDING
+ 
+   TYPE T
+     TYPE(C_FUNPTR) FUNPTR
+   END TYPE
+ 
+   TYPE(T), POINTER :: T_POINTER
+ 
+ CONTAINS
+ 
+   SUBROUTINE SET_FUNPTR(F)
+     TYPE(C_FUNPTR), INTENT(IN) :: F
+     T_POINTER%FUNPTR = F
+   END SUBROUTINE
+ 
+   SUBROUTINE S1() BIND(C)
+   END SUBROUTINE
+ 
+ END MODULE
+ 
+ PROGRAM TEST
+   USE M1
+   INTEGER(C_INTPTR_T) I
+   ALLOCATE(T_POINTER)
+   ! There was no reference from TEST to S1 in the call graph,
+   ! resulting in undefined-reference error with link-time optimization.
+   CALL SET_FUNPTR(C_FUNLOC(S1))
+   PRINT *, TRANSFER(T_POINTER%FUNPTR, I)
+ END PROGRAM
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gfortran.dg/class_array_24.f90 gcc-16-20260208/gcc/testsuite/gfortran.dg/class_array_24.f90
*** gcc-16-20260201/gcc/testsuite/gfortran.dg/class_array_24.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gfortran.dg/class_array_24.f90	Sun Feb  8 22:32:13 2026
***************
*** 0 ****
--- 1,58 ----
+ ! { dg-do run }
+ ! { dg-additional-options "-O2 -fdump-tree-optimized" }
+ !
+ ! PR fortran/123961 - SIZE and class array valued constructors and functions
+ 
+ module test_overload_m
+   implicit none
+ 
+   type :: foo_t
+   end type foo_t
+ 
+   interface foo_t
+      module procedure foo_t_0_
+      module procedure foo_t_1_
+      module procedure foo_c_0_
+      module procedure foo_c_1_
+   end interface foo_t
+ 
+ contains
+ 
+   function foo_t_0_(i) result(foo)
+     integer, intent(in)      :: i
+     type(foo_t), allocatable :: foo
+     allocate (foo)
+   end function foo_t_0_
+ 
+   function foo_t_1_(i) result(foo)
+     integer, intent(in)      :: i(:)
+     type(foo_t), allocatable :: foo(:)
+ 
+     allocate (foo(size (i)))
+   end function foo_t_1_
+ 
+   function foo_c_0_(r) result(foo)
+     real, intent(in)          :: r
+     class(foo_t), allocatable :: foo
+     allocate (foo)
+   end function foo_c_0_
+ 
+   function foo_c_1_(r) result(foo)
+     real, intent(in)          :: r(:)
+     class(foo_t), allocatable :: foo(:)
+ 
+     allocate (foo(size (r)))
+   end function foo_c_1_
+ 
+ end module test_overload_m
+ 
+ program test_overload
+    use test_overload_m
+    implicit none
+ 
+    if (size (foo_t([1,2,3])) /= 3) stop 1   ! Optimized
+    if (size (foo_t([1.,2.])) /= 2) stop 2   ! Optimized
+ 
+ end program test_overload
+ 
+ ! { dg-final { scan-tree-dump-not "_gfortran_error_stop_numeric" "optimized" } }
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gfortran.dg/pdt_82.f03 gcc-16-20260208/gcc/testsuite/gfortran.dg/pdt_82.f03
*** gcc-16-20260201/gcc/testsuite/gfortran.dg/pdt_82.f03	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gfortran.dg/pdt_82.f03	Sun Feb  8 22:32:14 2026
***************
*** 0 ****
--- 1,112 ----
+ ! { dg-do run }
+ !
+ ! Test the fix for pr123545, which caused the errors below. Although some of thses errors are
+ ! not checked here, it has been verified that they are fixed by the patch for the main fault.
+ !
+ ! Contributed by Damian Rouson  <damian@archaeologic.codes>
+ !
+ module julienne_m
+   implicit none
+   
+   type string_t
+     character(len=:), allocatable :: string_
+   end type
+ 
+   type file_t
+     type(string_t), allocatable :: lines_(:)
+   end type
+ 
+   interface file_t               ! If this generic interface was removed, a
+     module procedure from_lines  ! segmentation fault resulted during or just after
+   end interface                  ! the first executable statement in the main program.
+ 
+ contains
+ 
+   function get_json_value(self ) result(value_)
+     type(string_t), intent(in) :: self
+     real value_
+     read(self%string_, fmt=*) value_
+ !    print *," value_ ", value_
+   end function
+ 
+   pure function from_lines(lines) result(file_object)
+     type(string_t), intent(in) :: lines(:)
+     type(file_t) file_object
+     file_object%lines_ = lines
+   end function
+ 
+ end module
+ 
+ module fiats_m
+   use julienne_m
+   implicit none
+ 
+   type hyperparameters_t(k)
+     integer, kind :: k = kind(1.)
+     real(k) :: learning_rate_ = real(1.5,k)
+   end type
+ 
+   interface hyperparameters_t
+     module procedure hyperparameters_from_json
+   end interface
+ 
+   type, extends(file_t) :: training_configuration_t(m)
+     integer, kind :: m = kind(1.)
+     type(hyperparameters_t(m)) hyperparameters_
+   end type
+ 
+ contains
+ 
+   function hyperparameters_from_json(lines) result(hyperparameters)
+     type(string_t), intent(in) :: lines(:)
+     type(hyperparameters_t) hyperparameters
+     hyperparameters%learning_rate_ = get_json_value(lines(1))
+   end function
+ 
+   pure function hyperparameters_to_json(self) result(lines)
+     type(hyperparameters_t), intent(in) :: self
+     type(string_t), allocatable :: lines(:)
+     integer, parameter :: max_width= 18
+     character(len=max_width) learning_rate_string
+     write(learning_rate_string,*) self%learning_rate_
+     lines = [string_t(learning_rate_string)]
+   end function
+ 
+   pure function training_configuration_from_components(hyperparameters) result(training_configuration)
+     type(hyperparameters_t), intent(in) :: hyperparameters
+     type(training_configuration_t) training_configuration
+     training_configuration%hyperparameters_ = hyperparameters
+     training_configuration%file_t = file_t([hyperparameters_to_json(training_configuration%hyperparameters_)])
+   end function
+ 
+   function training_configuration_from_file(line) result(training_configuration)
+     character(len=*), intent(in) :: line
+     type(training_configuration_t) training_configuration
+     training_configuration%file_t = file_t([string_t(line)])
+     training_configuration%hyperparameters_ = hyperparameters_from_json(training_configuration%file_t%lines_)
+   end function
+ 
+ end module
+ 
+   use fiats_m
+   implicit none
+ 
+   call test
+ 
+ contains
+ 
+   subroutine test
+     type(training_configuration_t) training_configuration, from_json
+ 
+     training_configuration = training_configuration_from_components(hyperparameters_t(learning_rate_=1.))
+ 
+     ! Removing the above assignment eliminated the segmentation fault even though the segmentation fault
+     ! occured when executing the assignment below, which does not reference the object defined above.
+     ! Alternatively, changing the above line to an `associate` statement gave the compile-time
+     ! message: "Error: Invalid kind for REAL at (1)", where the "1" is between `use` and `fiats_m` in
+     ! the above use statement.
+ 
+     from_json = training_configuration_from_file('1.00000000')
+     if (int (1d6 * from_json%hyperparameters_%learning_rate_) /= 1000000) stop 1
+   end
+ end
\ No newline at end of file
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gfortran.dg/pdt_83.f03 gcc-16-20260208/gcc/testsuite/gfortran.dg/pdt_83.f03
*** gcc-16-20260201/gcc/testsuite/gfortran.dg/pdt_83.f03	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gfortran.dg/pdt_83.f03	Sun Feb  8 22:32:14 2026
***************
*** 0 ****
--- 1,105 ----
+ ! { dg-do run }
+ !
+ ! Test the fix for pr123673, which caused the errors below. Although some of thses errors are
+ ! not checked here, it has been verified that they are fixed by the patch for the main fault.
+ !
+ ! Contributed by Damian Rouson  <damian@archaeologic.codes>
+ !
+ module input_output_pair_m
+   implicit none
+ 
+   ! Moving the contents of this module to the main program caused several 
+   ! compile-time errors that do not occur with other brands.
+ 
+   type tensor_t(k)
+     integer, kind :: k = kind(1.)
+     real(k), allocatable :: values_(:)
+   end type
+ 
+   type input_output_pair_t(k)
+     integer, kind :: k = kind(1.)
+     type(tensor_t(k)) inputs_, expected_outputs_
+   end type
+ 
+ contains
+ 
+   ! Moving just the function below to become an internal subprogram in the main program
+   ! caused similar compile-time errors to those mentioned above
+ 
+   type(input_output_pair_t) elemental function input_output_pair(inputs, expected_outputs)
+     type(tensor_t), intent(in) :: inputs, expected_outputs
+     input_output_pair%inputs_ = inputs
+     input_output_pair%expected_outputs_ = expected_outputs
+   end function
+ 
+ end module
+ 
+ program trainable_network_test
+   use input_output_pair_m
+   implicit none
+ 
+   type bin_t
+     integer  first_, last_
+   end type
+ 
+   ! Removing the mini_batch_t's all instances of 'k' below caused
+   ! the following compile-time error on the above 'use' statement:
+   ! "Cannot convert TYPE(input_output_pair_t) to TYPE(Pdtinput_output_pair_t_4) at (1)",
+   ! where "1" is positiioned just after 'use'
+ 
+   type mini_batch_t(k)
+     integer, kind :: k = kind(1.)
+     type(input_output_pair_t(k)), allocatable :: input_output_pairs_(:)
+   end type
+ 
+   type(input_output_pair_t), allocatable :: input_output_pairs(:)
+   type(bin_t), allocatable :: bins(:)
+   type(mini_batch_t) mini_batch_1
+   integer, parameter :: num_pairs = 10 ! 7 is the mininum value that causes segmentation fault
+   integer, parameter :: n_bins = 5     ! 2 is the mininum value that causes segmentation fault
+   integer p, b
+   
+   input_output_pairs = input_output_pair( &
+                        [(tensor_t([real (p, kind (1.0)), &
+                                    real (p *10, kind (1.0))]), p = 1, num_pairs)], &
+                        [(tensor_t([real (p *20, kind (1.0)), &
+                                    real (p *30, kind (1.0))]), p = 1, num_pairs)])
+   bins = [(bin(num_pairs, n_bins, b), b = 1, n_bins)]
+ 
+   ! The assignment statement below caused a segmentation fault with gfortran.
+   ! Converting the assignment to an 'associate' statement also caused a seg fault.
+ 
+   mini_batch_1 = mini_batch(input_output_pairs(bins(n_bins)%first_:bins(n_bins)%last_))
+ 
+   if (any (mini_batch_1%input_output_pairs_(bins(1)%first_)%inputs_%values_ /= [9.0, 90.0])) stop 1
+   if (any (mini_batch_1%input_output_pairs_(bins(1)%last_)%inputs_%values_ /= [10.0, 100.0])) stop 2
+ 
+   associate (mini_batch_2 => &
+              mini_batch(input_output_pairs(bins(n_bins-1)%first_:bins(n_bins-1)%last_)))
+     if (any (mini_batch_2%input_output_pairs_(bins(1)%first_)%inputs_%values_ /= [7.0, 70.0])) stop 3
+     if (any (mini_batch_2%input_output_pairs_(bins(1)%last_)%inputs_%values_ /= [8.0, 80.0])) stop 4
+   end associate
+ 
+   deallocate (bins, input_output_pairs, mini_batch_1%input_output_pairs_)
+ 
+ contains
+ 
+   type(bin_t) function bin(num_items, num_bins, bin_number)
+     integer num_items, num_bins, bin_number
+     associate(remainder => mod(num_items, num_bins), items_per_bin => num_items/num_bins)
+       if (bin_number <= remainder) then
+         bin%first_ = 1 + (bin_number-1)*(items_per_bin+1)
+         bin%last_  = bin_number*(items_per_bin+1)
+       else
+         bin%first_ = 1 + (remainder-1)*(items_per_bin+1) + 1 + (bin_number-remainder)*items_per_bin
+         bin%last_ = remainder*(items_per_bin+1) + (bin_number-remainder)*items_per_bin
+       end if
+     end associate
+   end function
+ 
+   type(mini_batch_t) function mini_batch(input_output_pairs)
+     type(input_output_pair_t) input_output_pairs(:)
+     mini_batch%input_output_pairs_ = input_output_pairs
+   end function
+ 
+ end program
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gfortran.dg/pr122949.f90 gcc-16-20260208/gcc/testsuite/gfortran.dg/pr122949.f90
*** gcc-16-20260201/gcc/testsuite/gfortran.dg/pr122949.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gfortran.dg/pr122949.f90	Sun Feb  8 22:32:14 2026
***************
*** 0 ****
--- 1,44 ----
+ ! { dg-do compile }
+ !
+ ! PR122949 used to fail at line 40
+ !
+ ! Contributed by Damian Rouson  <damian@archaeologic.codes>
+ !
+ module tensors_m
+   implicit none
+ 
+   type scalar_t
+   contains
+     generic :: operator(.grad.) => grad
+     procedure grad
+   end type
+ 
+   type vector_t
+   contains
+     procedure grid
+   end type
+ 
+ contains
+   function grad(self) result(gradient)
+     class(scalar_t), intent(in) :: self
+     type(vector_t) gradient
+     gradient = vector_t()
+   end function
+ 
+   function grid(self) result(x)
+     class(vector_t) self
+     real x
+     x = 42.0
+   end function
+ end module
+ 
+   use tensors_m
+   implicit none
+   type(scalar_t) :: s = scalar_t()
+ 
+   associate(grad_s => .grad. s)
+     associate(grad_s_grid => grad_s%grid()) ! "Error: Invalid association target at (1)"
+       if (int (grad_s_grid) /= 42) stop 1
+     end associate
+   end associate
+ end
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gfortran.dg/pr123952.f90 gcc-16-20260208/gcc/testsuite/gfortran.dg/pr123952.f90
*** gcc-16-20260201/gcc/testsuite/gfortran.dg/pr123952.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gfortran.dg/pr123952.f90	Sun Feb  8 22:32:14 2026
***************
*** 0 ****
--- 1,35 ----
+ ! { dg-do compile }
+ !
+ ! Test the fix for PR123952, which failed as below.
+ !
+ ! Contributed by Damian.Rouson  <damian@archaeologic.codes>
+ !
+ module tensors_1D_m
+   abstract interface
+      function scalar_1D_initializer_i() result(f)
+       double precision, allocatable :: f(:)
+     end function
+   end interface
+ 
+   type :: scalar_1D_t
+     integer gradient_operator_1D_
+   end type
+ 
+   interface scalar_1D_t
+      module function construct_1D_scalar_from_function(initializer) result(scalar_1D)
+       procedure(scalar_1D_initializer_i), pointer :: initializer
+       type(scalar_1D_t) scalar_1D
+     end function
+   end interface
+ 
+ end module tensors_1D_m
+ 
+ submodule(tensors_1D_m) scalar_1D_s
+ contains
+ 
+   module procedure construct_1D_scalar_from_function ! "MODULE PROCEDURE at (1) must be
+                                                      ! in a generic module interface"
+       scalar_1D = scalar_1D_t (42)                   ! "Unexpected assignment statement..."
+   end procedure                                      ! "Expecting END SUBMODULE statement at (1)"
+ 
+ end submodule scalar_1D_s
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gfortran.dg/string_length_5.f90 gcc-16-20260208/gcc/testsuite/gfortran.dg/string_length_5.f90
*** gcc-16-20260201/gcc/testsuite/gfortran.dg/string_length_5.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gfortran.dg/string_length_5.f90	Sun Feb  8 22:32:14 2026
***************
*** 0 ****
--- 1,88 ----
+ ! { dg-do run }
+ ! PR fortran/85547 - string length for array constructors with type-spec
+ !
+ ! Reported by Walter Spector
+ 
+ program p
+   implicit none
+   integer, parameter :: k = 16
+   integer            :: m = k
+   integer, volatile  :: n = k
+   character(10)      :: path  = 'xyz/'
+   character(8)       :: path2 = 'abc/'
+   character(*), parameter :: s = 'ijk/'
+   if (k /= len ( [ character(k) :: path ]        )) stop 1
+   if (k /= len ( [ character(m) :: path ]        )) stop 2
+   if (k /= len ( [ character(n) :: path ]        )) stop 3
+   if (k /= len ( [ character(k) :: path ] ,kind=2)) stop 4
+   if (k /= len ( [ character(m) :: path ] ,kind=2)) stop 5
+   if (k /= len ( [ character(n) :: path ] ,kind=2)) stop 6
+ 
+   if (k /= len ( [ character(k) ::      ]        )) stop 7
+   if (k /= len ( [ character(m) ::      ]        )) stop 8
+   if (k /= len ( [ character(n) ::      ]        )) stop 9
+   if (k /= len ( [ character(k) ::      ] ,kind=2)) stop 10
+   if (k /= len ( [ character(m) ::      ] ,kind=2)) stop 11
+   if (k /= len ( [ character(n) ::      ] ,kind=2)) stop 12
+   if (k /= len ( [ character(2*n/2) ::  ]        )) stop 13
+   if (k /= len ( [ character(2*n/2) ::  ] ,kind=2)) stop 14
+   if (k /= len ( [ character((m+n)/2) ::] ,kind=2)) stop 15
+   if (k /= len ( [ character((m+n)/2) ::] ,kind=2)) stop 16
+   if (k /= len ([[ character(k) ::      ]],kind=2)) stop 17
+   if (k /= len ([[ character(m) ::      ]],kind=2)) stop 18
+   if (k /= len ([[ character(n) ::      ]],kind=2)) stop 19
+   if (k /= len ([[ character((m+n)/2) ::]],kind=2)) stop 20
+ 
+   if (k /= len ( [ character(k)       :: path,path2 ] ,kind=2)) stop 21
+   if (k /= len ( [ character(m)       :: path,path2 ] ,kind=2)) stop 22
+   if (k /= len ( [ character(n)       :: path,path2 ] ,kind=2)) stop 23
+   if (k /= len ( [ character((m+n)/2) :: path,path2 ] ,kind=2)) stop 24
+   if (k /= len ([[ character(k)       :: path,path2 ]],kind=2)) stop 25
+   if (k /= len ([[ character(m)       :: path,path2 ]],kind=2)) stop 26
+   if (k /= len ([[ character(n)       :: path,path2 ]],kind=2)) stop 27
+   if (k /= len ([[ character((m+n)/2) :: path,path2 ]],kind=2)) stop 28
+ 
+   call sub ()
+ contains
+   subroutine sub ()
+ !   call print_string (31, [ character(k)       :: ] )
+ !   call print_string (32, [ character(m)       :: ] )
+ !   call print_string (33, [ character(n)       :: ] )
+ !   call print_string (34, [ character((m+n)/2) :: ] )
+ !   call print_string (35, [ character(k)       :: path ] )
+ !   call print_string (36, [ character(m)       :: path ] )
+ !   call print_string (37, [ character(n)       :: path ] )
+ !   call print_string (38, [ character((m+n)/2) :: path ] )
+ !   call print_string (39, [ character(k)       :: path,path2 ] )
+ !   call print_string (40, [ character(m)       :: path,path2 ] )
+ !   call print_string (41, [ character(n)       :: path,path2 ] )
+ !   call print_string (42, [ character((m+n)/2) :: path,path2 ] )
+ !
+ !   call print_string (51,[[ character(k)       :: ]])
+ !   call print_string (52,[[ character(m)       :: ]])
+ !   call print_string (53,[[ character(n)       :: ]])
+ !   call print_string (54,[[ character((m+n)/2) :: ]])
+ !   call print_string (55,[[ character(k)       :: path ]])
+ !   call print_string (56,[[ character(m)       :: path ]])
+ !   call print_string (57,[[ character(n)       :: path ]])
+ !   call print_string (58,[[ character((m+n)/2) :: path ]])
+ !   call print_string (59,[[ character(k)       :: path,path2 ]])
+ !   call print_string (60,[[ character(m)       :: path,path2 ]])
+ !   call print_string (61,[[ character(n)       :: path,path2 ]])
+ !   call print_string (62,[[ character((m+n)/2) :: path,path2 ]])
+ 
+ !   call print_string (70, [ character(k)       ::     ] )
+     call print_string (71, [ character(k)       :: s   ] )
+     call print_string (72, [ character(k)       :: s,s ] )
+ 
+   end subroutine sub
+ 
+   subroutine print_string (i, s)
+     integer,      intent(in) :: i
+     character(*), intent(in) :: s(:)
+     if (len(s) /= k) then
+        print *, i, len(s), len(s)==k, size (s), s(:)
+        stop i
+     end if
+   end subroutine
+ end program
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gfortran.dg/vect/pr123986.f90 gcc-16-20260208/gcc/testsuite/gfortran.dg/vect/pr123986.f90
*** gcc-16-20260201/gcc/testsuite/gfortran.dg/vect/pr123986.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gfortran.dg/vect/pr123986.f90	Sun Feb  8 22:32:14 2026
***************
*** 0 ****
--- 1,36 ----
+ ! { dg-do compile }
+ ! { dg-additional-options "-Ofast -mavx512f" { target avx512f } }
+ 
+ MODULE bulk_cloud_model_mod
+   INTEGER, PARAMETER ::  wp  = KIND(1.0D0)
+   INTEGER, PARAMETER ::  nzt = 1
+   REAL, PARAMETER ::  df_crit  = 100.0E-6
+   TYPE cloud_coefficients
+      REAL(wp) a
+      REAL(wp) b
+   END TYPE 
+   TYPE cloud_species_def
+      TYPE(cloud_coefficients) cloud
+      TYPE(cloud_coefficients) graupel
+   END TYPE 
+   TYPE(cloud_species_def) cloud_species
+ CONTAINS
+   SUBROUTINE riming_graupel_cloud
+     REAL(wp) dc
+     REAL(wp) dg
+     REAL(wp) xc
+     REAL(wp) xg
+     DO  k = 1, nzt
+        dg = mean_diameter( cloud_species%graupel,  xg )
+        dc = mean_diameter( cloud_species%cloud,    xc )
+        IF ( dc > dc_crit  .AND.  dg > df_crit )  THEN
+           riming_rate_n =   nc_c ( rime_graupel_cloud_delta_n_aa * dg**2 + dg * dc * dc**2 )                                    
+        ENDIF
+     ENDDO
+   END  
+   FUNCTION mean_diameter( specie, particle_mean_mass )
+     CLASS(cloud_coefficients)   specie
+     REAL(wp)   particle_mean_mass
+     mean_diameter = specie%a * particle_mean_mass**specie%b
+   END  
+ END 
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gnat.dg/limited_with8.adb gcc-16-20260208/gcc/testsuite/gnat.dg/limited_with8.adb
*** gcc-16-20260201/gcc/testsuite/gnat.dg/limited_with8.adb	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gnat.dg/limited_with8.adb	Sun Feb  8 22:32:14 2026
***************
*** 0 ****
--- 1,8 ----
+ -- { dg-do link }
+ 
+ with Limited_With8_Pkg1;
+ 
+ procedure Limited_With8 is
+ begin
+    null;
+ end;
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gnat.dg/limited_with8_pkg1.ads gcc-16-20260208/gcc/testsuite/gnat.dg/limited_with8_pkg1.ads
*** gcc-16-20260201/gcc/testsuite/gnat.dg/limited_with8_pkg1.ads	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gnat.dg/limited_with8_pkg1.ads	Sun Feb  8 22:32:14 2026
***************
*** 0 ****
--- 1,6 ----
+ with Limited_With8_Pkg2;
+ 
+ package Limited_With8_Pkg1 is
+    type T;
+    type T is new Integer;
+ end Limited_With8_Pkg1;
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gnat.dg/limited_with8_pkg2.adb gcc-16-20260208/gcc/testsuite/gnat.dg/limited_with8_pkg2.adb
*** gcc-16-20260201/gcc/testsuite/gnat.dg/limited_with8_pkg2.adb	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gnat.dg/limited_with8_pkg2.adb	Sun Feb  8 22:32:14 2026
***************
*** 0 ****
--- 1,10 ----
+ with Limited_With8_Pkg1;
+ 
+ package body Limited_With8_Pkg2 is
+    procedure G (Container : in M;
+                 F         : access function return Limited_With8_Pkg1.T) is
+       Item : Limited_With8_Pkg1.T := F.all;
+    begin
+       null;
+    end G;
+ end Limited_With8_Pkg2;
diff -Nrcpad gcc-16-20260201/gcc/testsuite/gnat.dg/limited_with8_pkg2.ads gcc-16-20260208/gcc/testsuite/gnat.dg/limited_with8_pkg2.ads
*** gcc-16-20260201/gcc/testsuite/gnat.dg/limited_with8_pkg2.ads	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/gcc/testsuite/gnat.dg/limited_with8_pkg2.ads	Sun Feb  8 22:32:14 2026
***************
*** 0 ****
--- 1,7 ----
+ limited with Limited_With8_Pkg1;
+ 
+ package Limited_With8_Pkg2 is
+    type M is tagged null record;
+    procedure G (Container : in M;
+                 F         : access function return Limited_With8_Pkg1.T);
+ end Limited_With8_Pkg2;
diff -Nrcpad gcc-16-20260201/gcc/testsuite/lib/gdc-utils.exp gcc-16-20260208/gcc/testsuite/lib/gdc-utils.exp
*** gcc-16-20260201/gcc/testsuite/lib/gdc-utils.exp	Sun Feb  1 22:32:15 2026
--- gcc-16-20260208/gcc/testsuite/lib/gdc-utils.exp	Sun Feb  8 22:32:15 2026
*************** proc gdc-convert-args { args } {
*** 107,112 ****
--- 107,115 ----
  	    lappend out "-Wdeprecated"
  	    lappend out "-Wno-error"
  
+ 	} elseif [regexp -- {^-edition=(\w+)} $arg pattern value] {
+ 	    lappend out "-std=d[string tolower $value]"
+ 
  	} elseif [regexp -- {^-extern-std=([\w+]+)} $arg pattern value] {
  	    lappend out "-fextern-std=$value"
  
diff -Nrcpad gcc-16-20260201/gcc/testsuite/lib/lto.exp gcc-16-20260208/gcc/testsuite/lib/lto.exp
*** gcc-16-20260201/gcc/testsuite/lib/lto.exp	Sun Feb  1 22:32:15 2026
--- gcc-16-20260208/gcc/testsuite/lib/lto.exp	Sun Feb  8 22:32:15 2026
*************** proc lto-build-archive { testname objlis
*** 313,318 ****
--- 313,319 ----
      global testcase
      global tool
      global GCC_UNDER_TEST
+     global GCC_AR_UNDER_TEST
  
      upvar dg-messages-by-file dg-messages-by-file
  
*************** proc lto-build-archive { testname objlis
*** 327,335 ****
  	}
      }
  
!     # Hack up the gcc-ar command from $GCC_UNDER_TEST.
!     set ar_cmd [file dirname [lindex $GCC_UNDER_TEST 0]]
!     set ar_cmd "$ar_cmd/gcc-ar [lrange $GCC_UNDER_TEST 1 end]"
      set ar_output [remote_exec host "$ar_cmd rcs $dest $objlist"]
      set retval [lindex $ar_output 0]
      set retmsg [lindex $ar_output 1]
--- 328,347 ----
  	}
      }
  
!     # For now find gcc-ar in the same directory as $GCC_UNDER_TEST, unless
!     # GCC_AR_UNDER_TEST is defined.
! 
!     if ![info exists GCC_AR_UNDER_TEST] {
! 	if { ![is_remote host] && [string match "*/*" [lindex $GCC_UNDER_TEST 0]] } {
! 	    set ar_cmd [file dirname [lindex $GCC_UNDER_TEST 0]]/[gcc-transform-out-of-tree gcc-ar]
! 	} else {
! 	    set ar_cmd [gcc-transform-out-of-tree gcc-ar]
! 	}
! 	set ar_cmd "$ar_cmd [lrange $GCC_UNDER_TEST 1 end]"
!     } else {
!         set ar_cmd $GCC_AR_UNDER_TEST
!     }
! 
      set ar_output [remote_exec host "$ar_cmd rcs $dest $objlist"]
      set retval [lindex $ar_output 0]
      set retmsg [lindex $ar_output 1]
diff -Nrcpad gcc-16-20260201/gcc/testsuite/lib/target-supports.exp gcc-16-20260208/gcc/testsuite/lib/target-supports.exp
*** gcc-16-20260201/gcc/testsuite/lib/target-supports.exp	Sun Feb  1 22:32:15 2026
--- gcc-16-20260208/gcc/testsuite/lib/target-supports.exp	Sun Feb  8 22:32:15 2026
*************** proc check_effective_target_arm_neon_ok_
*** 5624,5631 ****
--- 5624,5634 ----
      set et_arm_neon_flags ""
      foreach flags {
  	""
+ 	"-mcpu=unset -march=armv7-a+simd -mfpu=auto"
+ 
  	"-mfloat-abi=softfp"
  	"-mfloat-abi=softfp -mcpu=unset -march=armv7-a+simd -mfpu=auto"
+ 
  	"-mfloat-abi=hard"
  	"-mfloat-abi=hard -mcpu=unset -march=armv7-a+simd -mfpu=auto"
      } {
diff -Nrcpad gcc-16-20260201/gcc/toplev.cc gcc-16-20260208/gcc/toplev.cc
*** gcc-16-20260201/gcc/toplev.cc	Sun Feb  1 22:32:15 2026
--- gcc-16-20260208/gcc/toplev.cc	Sun Feb  8 22:32:15 2026
*************** toplev::main (int argc, char **argv)
*** 2328,2335 ****
  
    /* Convert the options to an array.  */
    decode_cmdline_options_to_array_default_mask (argc,
! 						CONST_CAST2 (const char **,
! 							     char **, argv),
  						&save_decoded_options,
  						&save_decoded_options_count);
  
--- 2328,2334 ----
  
    /* Convert the options to an array.  */
    decode_cmdline_options_to_array_default_mask (argc,
! 						const_cast<const char **> (argv),
  						&save_decoded_options,
  						&save_decoded_options_count);
  
diff -Nrcpad gcc-16-20260201/gcc/tracer.cc gcc-16-20260208/gcc/tracer.cc
*** gcc-16-20260201/gcc/tracer.cc	Sun Feb  1 22:32:15 2026
--- gcc-16-20260208/gcc/tracer.cc	Sun Feb  8 22:32:15 2026
*************** analyze_bb (basic_block bb, int *count)
*** 139,145 ****
      }
    *count = n;
  
!   cache_can_duplicate_bb_p (bb, can_duplicate_block_p (CONST_CAST_BB (bb)));
  }
  
  /* Return true if E1 is more frequent than E2.  */
--- 139,146 ----
      }
    *count = n;
  
!   cache_can_duplicate_bb_p (bb, can_duplicate_block_p (const_cast<basic_block>
! 						       (bb)));
  }
  
  /* Return true if E1 is more frequent than E2.  */
diff -Nrcpad gcc-16-20260201/gcc/tree-cfg.cc gcc-16-20260208/gcc/tree-cfg.cc
*** gcc-16-20260201/gcc/tree-cfg.cc	Sun Feb  1 22:32:15 2026
--- gcc-16-20260208/gcc/tree-cfg.cc	Sun Feb  8 22:32:15 2026
*************** gimple_split_block_before_cond_jump (bas
*** 6412,6418 ****
  static bool
  gimple_can_duplicate_bb_p (const_basic_block bb)
  {
!   gimple *last = last_nondebug_stmt (CONST_CAST_BB (bb));
  
    /* Do checks that can only fail for the last stmt, to minimize the work in the
       stmt loop.  */
--- 6412,6418 ----
  static bool
  gimple_can_duplicate_bb_p (const_basic_block bb)
  {
!   gimple *last = last_nondebug_stmt (const_cast<basic_block> (bb));
  
    /* Do checks that can only fail for the last stmt, to minimize the work in the
       stmt loop.  */
*************** gimple_can_duplicate_bb_p (const_basic_b
*** 6437,6443 ****
        return false;
    }
  
!   for (gimple_stmt_iterator gsi = gsi_start_bb (CONST_CAST_BB (bb));
         !gsi_end_p (gsi); gsi_next (&gsi))
      {
        gimple *g = gsi_stmt (gsi);
--- 6437,6443 ----
        return false;
    }
  
!   for (gimple_stmt_iterator gsi = gsi_start_bb (const_cast<basic_block> (bb));
         !gsi_end_p (gsi); gsi_next (&gsi))
      {
        gimple *g = gsi_stmt (gsi);
diff -Nrcpad gcc-16-20260201/gcc/tree-complex.cc gcc-16-20260208/gcc/tree-complex.cc
*** gcc-16-20260201/gcc/tree-complex.cc	Sun Feb  1 22:32:15 2026
--- gcc-16-20260208/gcc/tree-complex.cc	Sun Feb  8 22:32:15 2026
*************** extract_component (gimple_stmt_iterator
*** 652,679 ****
  	if (imagpart_p)
  	  TREE_OPERAND (t, 2) = size_binop (PLUS_EXPR, TREE_OPERAND (t, 2),
  					    TYPE_SIZE (inner_type));
  	if (gimple_p)
! 	  t = force_gimple_operand_gsi (gsi, t, true, NULL, true,
! 					GSI_SAME_STMT);
  	return t;
        }
  
      case VAR_DECL:
      case RESULT_DECL:
      case PARM_DECL:
      case COMPONENT_REF:
      case ARRAY_REF:
-     case VIEW_CONVERT_EXPR:
      case MEM_REF:
        {
  	tree inner_type = TREE_TYPE (TREE_TYPE (t));
  
! 	t = build1 ((imagpart_p ? IMAGPART_EXPR : REALPART_EXPR),
! 		    inner_type, unshare_expr (t));
  
  	if (gimple_p)
! 	  t = force_gimple_operand_gsi (gsi, t, true, NULL, true,
!                                         GSI_SAME_STMT);
  
  	return t;
        }
--- 652,711 ----
  	if (imagpart_p)
  	  TREE_OPERAND (t, 2) = size_binop (PLUS_EXPR, TREE_OPERAND (t, 2),
  					    TYPE_SIZE (inner_type));
+ 
  	if (gimple_p)
! 	  {
! 	    tree new_lhs = make_ssa_name (inner_type);
! 	    gimple *new_load = gimple_build_assign (new_lhs, t);
! 	    gsi_insert_before (gsi, new_load, GSI_SAME_STMT);
! 	    t = new_lhs;
! 	  }
  	return t;
        }
  
+     case VIEW_CONVERT_EXPR:
+       /* Getting the real/imag parts of a VCE of a ssa-name requires
+ 	 to place the complex into a ssa name before getting the
+ 	 2 parts.
+ 	 As `IMAGPART_EXPR<VIEW_CONVERT_EXPR<a_BN>>` is an invalid
+ 	 gimple. This will only show up when gimplifying it.
+ 	 Note this creates an extra copy.  The call to
+ 	 force_gimple_operand_gsi would create one too.  */
+       if (TREE_CODE (TREE_OPERAND (t, 0)) == SSA_NAME)
+ 	{
+ 	  gcc_assert (gimple_p);
+ 	  tree new_cplx = make_ssa_name (TREE_TYPE (t));
+ 	  gimple *vce = gimple_build_assign (new_cplx, unshare_expr (t));
+ 	  gsi_insert_before (gsi, vce, GSI_SAME_STMT);
+ 
+ 	  tree new_lhs = make_ssa_name (TREE_TYPE (TREE_TYPE (t)));
+ 	  t = build1 ((imagpart_p ? IMAGPART_EXPR : REALPART_EXPR),
+ 		      TREE_TYPE (TREE_TYPE (t)), new_cplx);
+ 	  gimple *new_ri = gimple_build_assign (new_lhs, t);
+ 	  gsi_insert_before (gsi, new_ri, GSI_SAME_STMT);
+ 	  t = new_lhs;
+ 	  return t;
+ 	}
+     /* FALLTHRU */
      case VAR_DECL:
      case RESULT_DECL:
      case PARM_DECL:
      case COMPONENT_REF:
      case ARRAY_REF:
      case MEM_REF:
        {
  	tree inner_type = TREE_TYPE (TREE_TYPE (t));
  
! 	t = fold_build1 ((imagpart_p ? IMAGPART_EXPR : REALPART_EXPR),
! 			 inner_type, unshare_expr (t));
  
  	if (gimple_p)
! 	  {
! 	    tree new_lhs = make_ssa_name (inner_type);
! 	    gimple *new_load = gimple_build_assign (new_lhs, t);
! 	    gsi_insert_before (gsi, new_load, GSI_SAME_STMT);
! 	    t = new_lhs;
! 	  }
  
  	return t;
        }
diff -Nrcpad gcc-16-20260201/gcc/tree-nested.cc gcc-16-20260208/gcc/tree-nested.cc
*** gcc-16-20260201/gcc/tree-nested.cc	Sun Feb  1 22:32:15 2026
--- gcc-16-20260208/gcc/tree-nested.cc	Sun Feb  8 22:32:15 2026
*************** fixup_vla_decls (tree block)
*** 3397,3403 ****
  bool
  fold_mem_refs (tree *const &e, void *data ATTRIBUTE_UNUSED)
  {
!   tree *ref_p = CONST_CAST2 (tree *, const tree *, (const tree *)e);
    *ref_p = fold (*ref_p);
    return true;
  }
--- 3397,3403 ----
  bool
  fold_mem_refs (tree *const &e, void *data ATTRIBUTE_UNUSED)
  {
!   tree *ref_p = const_cast<tree *> (e);
    *ref_p = fold (*ref_p);
    return true;
  }
diff -Nrcpad gcc-16-20260201/gcc/tree-object-size.cc gcc-16-20260208/gcc/tree-object-size.cc
*** gcc-16-20260201/gcc/tree-object-size.cc	Sun Feb  1 22:32:15 2026
--- gcc-16-20260208/gcc/tree-object-size.cc	Sun Feb  8 22:32:15 2026
*************** compute_object_offset (tree expr, const_
*** 442,449 ****
  
        t = TREE_OPERAND (expr, 1);
        tree low_bound, unit_size;
!       low_bound = array_ref_low_bound (CONST_CAST_TREE (expr));
!       unit_size = array_ref_element_size (CONST_CAST_TREE (expr));
        if (! integer_zerop (low_bound))
  	t = fold_build2 (MINUS_EXPR, TREE_TYPE (t), t, low_bound);
        if (TREE_CODE (t) == INTEGER_CST && tree_int_cst_sgn (t) < 0)
--- 442,449 ----
  
        t = TREE_OPERAND (expr, 1);
        tree low_bound, unit_size;
!       low_bound = array_ref_low_bound (const_cast<tree> (expr));
!       unit_size = array_ref_element_size (const_cast<tree> (expr));
        if (! integer_zerop (low_bound))
  	t = fold_build2 (MINUS_EXPR, TREE_TYPE (t), t, low_bound);
        if (TREE_CODE (t) == INTEGER_CST && tree_int_cst_sgn (t) < 0)
diff -Nrcpad gcc-16-20260201/gcc/tree-profile.cc gcc-16-20260208/gcc/tree-profile.cc
*** gcc-16-20260201/gcc/tree-profile.cc	Sun Feb  1 22:32:15 2026
--- gcc-16-20260208/gcc/tree-profile.cc	Sun Feb  8 22:32:15 2026
*************** gimple_init_gcov_profiler (void)
*** 1242,1248 ****
        fn_name = concat ("__gcov_interval_profiler", fn_suffix, NULL);
        tree_interval_profiler_fn = build_fn_decl (fn_name,
  						 interval_profiler_fn_type);
!       free (CONST_CAST (char *, fn_name));
        TREE_NOTHROW (tree_interval_profiler_fn) = 1;
        DECL_ATTRIBUTES (tree_interval_profiler_fn)
  	= tree_cons (get_identifier ("leaf"), NULL,
--- 1242,1248 ----
        fn_name = concat ("__gcov_interval_profiler", fn_suffix, NULL);
        tree_interval_profiler_fn = build_fn_decl (fn_name,
  						 interval_profiler_fn_type);
!       free (const_cast<char *> (fn_name));
        TREE_NOTHROW (tree_interval_profiler_fn) = 1;
        DECL_ATTRIBUTES (tree_interval_profiler_fn)
  	= tree_cons (get_identifier ("leaf"), NULL,
*************** gimple_init_gcov_profiler (void)
*** 1255,1261 ****
  					  NULL_TREE);
        fn_name = concat ("__gcov_pow2_profiler", fn_suffix, NULL);
        tree_pow2_profiler_fn = build_fn_decl (fn_name, pow2_profiler_fn_type);
!       free (CONST_CAST (char *, fn_name));
        TREE_NOTHROW (tree_pow2_profiler_fn) = 1;
        DECL_ATTRIBUTES (tree_pow2_profiler_fn)
  	= tree_cons (get_identifier ("leaf"), NULL,
--- 1255,1261 ----
  					  NULL_TREE);
        fn_name = concat ("__gcov_pow2_profiler", fn_suffix, NULL);
        tree_pow2_profiler_fn = build_fn_decl (fn_name, pow2_profiler_fn_type);
!       free (const_cast<char *> (fn_name));
        TREE_NOTHROW (tree_pow2_profiler_fn) = 1;
        DECL_ATTRIBUTES (tree_pow2_profiler_fn)
  	= tree_cons (get_identifier ("leaf"), NULL,
*************** gimple_init_gcov_profiler (void)
*** 1269,1275 ****
        fn_name = concat ("__gcov_topn_values_profiler", fn_suffix, NULL);
        tree_topn_values_profiler_fn
  	= build_fn_decl (fn_name, topn_values_profiler_fn_type);
!       free (CONST_CAST (char *, fn_name));
  
        TREE_NOTHROW (tree_topn_values_profiler_fn) = 1;
        DECL_ATTRIBUTES (tree_topn_values_profiler_fn)
--- 1269,1275 ----
        fn_name = concat ("__gcov_topn_values_profiler", fn_suffix, NULL);
        tree_topn_values_profiler_fn
  	= build_fn_decl (fn_name, topn_values_profiler_fn_type);
!       free (const_cast<char *> (fn_name));
  
        TREE_NOTHROW (tree_topn_values_profiler_fn) = 1;
        DECL_ATTRIBUTES (tree_topn_values_profiler_fn)
*************** gimple_init_gcov_profiler (void)
*** 1287,1293 ****
        fn_name = concat ("__gcov_indirect_call_profiler_v4", fn_suffix, NULL);
        tree_indirect_call_profiler_fn
  	= build_fn_decl (fn_name, ic_profiler_fn_type);
!       free (CONST_CAST (char *, fn_name));
  
        TREE_NOTHROW (tree_indirect_call_profiler_fn) = 1;
        DECL_ATTRIBUTES (tree_indirect_call_profiler_fn)
--- 1287,1293 ----
        fn_name = concat ("__gcov_indirect_call_profiler_v4", fn_suffix, NULL);
        tree_indirect_call_profiler_fn
  	= build_fn_decl (fn_name, ic_profiler_fn_type);
!       free (const_cast<char *> (fn_name));
  
        TREE_NOTHROW (tree_indirect_call_profiler_fn) = 1;
        DECL_ATTRIBUTES (tree_indirect_call_profiler_fn)
*************** gimple_init_gcov_profiler (void)
*** 1311,1324 ****
        fn_name = concat ("__gcov_average_profiler", fn_suffix, NULL);
        tree_average_profiler_fn = build_fn_decl (fn_name,
  						average_profiler_fn_type);
!       free (CONST_CAST (char *, fn_name));
        TREE_NOTHROW (tree_average_profiler_fn) = 1;
        DECL_ATTRIBUTES (tree_average_profiler_fn)
  	= tree_cons (get_identifier ("leaf"), NULL,
  		     DECL_ATTRIBUTES (tree_average_profiler_fn));
        fn_name = concat ("__gcov_ior_profiler", fn_suffix, NULL);
        tree_ior_profiler_fn = build_fn_decl (fn_name, average_profiler_fn_type);
!       free (CONST_CAST (char *, fn_name));
        TREE_NOTHROW (tree_ior_profiler_fn) = 1;
        DECL_ATTRIBUTES (tree_ior_profiler_fn)
  	= tree_cons (get_identifier ("leaf"), NULL,
--- 1311,1324 ----
        fn_name = concat ("__gcov_average_profiler", fn_suffix, NULL);
        tree_average_profiler_fn = build_fn_decl (fn_name,
  						average_profiler_fn_type);
!       free (const_cast<char *> (fn_name));
        TREE_NOTHROW (tree_average_profiler_fn) = 1;
        DECL_ATTRIBUTES (tree_average_profiler_fn)
  	= tree_cons (get_identifier ("leaf"), NULL,
  		     DECL_ATTRIBUTES (tree_average_profiler_fn));
        fn_name = concat ("__gcov_ior_profiler", fn_suffix, NULL);
        tree_ior_profiler_fn = build_fn_decl (fn_name, average_profiler_fn_type);
!       free (const_cast<char *> (fn_name));
        TREE_NOTHROW (tree_ior_profiler_fn) = 1;
        DECL_ATTRIBUTES (tree_ior_profiler_fn)
  	= tree_cons (get_identifier ("leaf"), NULL,
diff -Nrcpad gcc-16-20260201/gcc/tree-sra.cc gcc-16-20260208/gcc/tree-sra.cc
*** gcc-16-20260201/gcc/tree-sra.cc	Sun Feb  1 22:32:15 2026
--- gcc-16-20260208/gcc/tree-sra.cc	Sun Feb  8 22:32:15 2026
*************** make_fancy_name (tree expr)
*** 1886,1897 ****
     something for which get_addr_base_and_unit_offset returns NULL, gsi must
     be non-NULL and is used to insert new statements either before or below
     the current one as specified by INSERT_AFTER.  This function is not capable
!    of handling bitfields.  */
  
  static tree
  build_ref_for_offset (location_t loc, tree base, poly_int64 offset,
  		      bool reverse, tree exp_type, gimple_stmt_iterator *gsi,
! 		      bool insert_after)
  {
    tree prev_base = base;
    tree off;
--- 1886,1898 ----
     something for which get_addr_base_and_unit_offset returns NULL, gsi must
     be non-NULL and is used to insert new statements either before or below
     the current one as specified by INSERT_AFTER.  This function is not capable
!    of handling bitfields.  If FORCE_REF_ALL is true then the memory access
!    will use alias-set zero.  */
  
  static tree
  build_ref_for_offset (location_t loc, tree base, poly_int64 offset,
  		      bool reverse, tree exp_type, gimple_stmt_iterator *gsi,
! 		      bool insert_after, bool force_ref_all = false)
  {
    tree prev_base = base;
    tree off;
*************** build_ref_for_offset (location_t loc, tr
*** 1929,1947 ****
        else
  	gsi_insert_before (gsi, stmt, GSI_SAME_STMT);
  
!       off = build_int_cst (reference_alias_ptr_type (prev_base), byte_offset);
        base = tmp;
      }
    else if (TREE_CODE (base) == MEM_REF)
      {
!       off = build_int_cst (TREE_TYPE (TREE_OPERAND (base, 1)),
  			   base_offset + byte_offset);
        off = int_const_binop (PLUS_EXPR, TREE_OPERAND (base, 1), off);
        base = unshare_expr (TREE_OPERAND (base, 0));
      }
    else
      {
!       off = build_int_cst (reference_alias_ptr_type (prev_base),
  			   base_offset + byte_offset);
        base = build_fold_addr_expr (unshare_expr (base));
      }
--- 1930,1951 ----
        else
  	gsi_insert_before (gsi, stmt, GSI_SAME_STMT);
  
!       off = build_int_cst (force_ref_all ? ptr_type_node
! 			   : reference_alias_ptr_type (prev_base), byte_offset);
        base = tmp;
      }
    else if (TREE_CODE (base) == MEM_REF)
      {
!       off = build_int_cst (force_ref_all ? ptr_type_node
! 			   : TREE_TYPE (TREE_OPERAND (base, 1)),
  			   base_offset + byte_offset);
        off = int_const_binop (PLUS_EXPR, TREE_OPERAND (base, 1), off);
        base = unshare_expr (TREE_OPERAND (base, 0));
      }
    else
      {
!       off = build_int_cst (force_ref_all ? ptr_type_node
! 			   : reference_alias_ptr_type (prev_base),
  			   base_offset + byte_offset);
        base = build_fold_addr_expr (unshare_expr (base));
      }
*************** build_reconstructed_reference (location_
*** 2004,2015 ****
     build_ref_for_offset, furthermore, when GSI is NULL, the function expects
     that it re-builds the entire reference from a DECL to the final access and
     so will create a MEM_REF when OFFSET does not exactly match offset of
!    MODEL.  */
  
  static tree
  build_ref_for_model (location_t loc, tree base, HOST_WIDE_INT offset,
  		     struct access *model, gimple_stmt_iterator *gsi,
! 		     bool insert_after)
  {
    gcc_assert (offset >= 0);
    if (TREE_CODE (model->expr) == COMPONENT_REF
--- 2008,2020 ----
     build_ref_for_offset, furthermore, when GSI is NULL, the function expects
     that it re-builds the entire reference from a DECL to the final access and
     so will create a MEM_REF when OFFSET does not exactly match offset of
!    MODEL.  If FORCE_REF_ALL is true then the memory access will use
!    alias-set zero.  */
  
  static tree
  build_ref_for_model (location_t loc, tree base, HOST_WIDE_INT offset,
  		     struct access *model, gimple_stmt_iterator *gsi,
! 		     bool insert_after, bool force_ref_all = false)
  {
    gcc_assert (offset >= 0);
    if (TREE_CODE (model->expr) == COMPONENT_REF
*************** build_ref_for_model (location_t loc, tre
*** 2021,2027 ****
        offset -= int_bit_position (fld);
        exp_type = TREE_TYPE (TREE_OPERAND (model->expr, 0));
        t = build_ref_for_offset (loc, base, offset, model->reverse, exp_type,
! 				gsi, insert_after);
        /* The flag will be set on the record type.  */
        REF_REVERSE_STORAGE_ORDER (t) = 0;
        return fold_build3_loc (loc, COMPONENT_REF, TREE_TYPE (fld), t, fld,
--- 2026,2032 ----
        offset -= int_bit_position (fld);
        exp_type = TREE_TYPE (TREE_OPERAND (model->expr, 0));
        t = build_ref_for_offset (loc, base, offset, model->reverse, exp_type,
! 				gsi, insert_after, force_ref_all);
        /* The flag will be set on the record type.  */
        REF_REVERSE_STORAGE_ORDER (t) = 0;
        return fold_build3_loc (loc, COMPONENT_REF, TREE_TYPE (fld), t, fld,
*************** build_ref_for_model (location_t loc, tre
*** 2031,2036 ****
--- 2036,2042 ----
      {
        tree res;
        if (model->grp_same_access_path
+ 	  && !force_ref_all
  	  && !TREE_THIS_VOLATILE (base)
  	  && (TYPE_ADDR_SPACE (TREE_TYPE (base))
  	      == TYPE_ADDR_SPACE (TREE_TYPE (model->expr)))
*************** build_ref_for_model (location_t loc, tre
*** 2042,2048 ****
  	return res;
        else
  	return build_ref_for_offset (loc, base, offset, model->reverse,
! 				     model->type, gsi, insert_after);
      }
  }
  
--- 2048,2055 ----
  	return res;
        else
  	return build_ref_for_offset (loc, base, offset, model->reverse,
! 				     model->type, gsi, insert_after,
! 				     force_ref_all);
      }
  }
  
*************** analyze_all_variable_accesses (void)
*** 3924,3939 ****
     replacements in the interval <start_offset, start_offset + chunk_size>,
     otherwise copy all.  GSI is a statement iterator used to place the new
     statements.  WRITE should be true when the statements should write from AGG
!    to the replacement and false if vice versa.  if INSERT_AFTER is true, new
     statements will be added after the current statement in GSI, they will be
!    added before the statement otherwise.  */
  
  static void
  generate_subtree_copies (struct access *access, tree agg,
  			 HOST_WIDE_INT top_offset,
  			 HOST_WIDE_INT start_offset, HOST_WIDE_INT chunk_size,
  			 gimple_stmt_iterator *gsi, bool write,
! 			 bool insert_after, location_t loc)
  {
    /* Never write anything into constant pool decls.  See PR70602.  */
    if (!write && constant_decl_p (agg))
--- 3931,3948 ----
     replacements in the interval <start_offset, start_offset + chunk_size>,
     otherwise copy all.  GSI is a statement iterator used to place the new
     statements.  WRITE should be true when the statements should write from AGG
!    to the replacement and false if vice versa.  If INSERT_AFTER is true, new
     statements will be added after the current statement in GSI, they will be
!    added before the statement otherwise.  If FORCE_REF_ALL is true then
!    memory accesses will use alias-set zero.  */
  
  static void
  generate_subtree_copies (struct access *access, tree agg,
  			 HOST_WIDE_INT top_offset,
  			 HOST_WIDE_INT start_offset, HOST_WIDE_INT chunk_size,
  			 gimple_stmt_iterator *gsi, bool write,
! 			 bool insert_after, location_t loc,
! 			 bool force_ref_all = false)
  {
    /* Never write anything into constant pool decls.  See PR70602.  */
    if (!write && constant_decl_p (agg))
*************** generate_subtree_copies (struct access *
*** 3951,3957 ****
  	  gassign *stmt;
  
  	  expr = build_ref_for_model (loc, agg, access->offset - top_offset,
! 				      access, gsi, insert_after);
  
  	  if (write)
  	    {
--- 3960,3966 ----
  	  gassign *stmt;
  
  	  expr = build_ref_for_model (loc, agg, access->offset - top_offset,
! 				      access, gsi, insert_after, force_ref_all);
  
  	  if (write)
  	    {
*************** generate_subtree_copies (struct access *
*** 4001,4007 ****
        if (access->first_child)
  	generate_subtree_copies (access->first_child, agg, top_offset,
  				 start_offset, chunk_size, gsi,
! 				 write, insert_after, loc);
  
        access = access->next_sibling;
      }
--- 4010,4016 ----
        if (access->first_child)
  	generate_subtree_copies (access->first_child, agg, top_offset,
  				 start_offset, chunk_size, gsi,
! 				 write, insert_after, loc, force_ref_all);
  
        access = access->next_sibling;
      }
*************** sra_modify_call_arg (tree *expr, gimple_
*** 4303,4316 ****
    gimple *stmt = gsi_stmt (*call_gsi);
    location_t loc = gimple_location (stmt);
    generate_subtree_copies (access, base, 0, 0, 0, call_gsi, false, false,
! 			   loc);
  
    if (flags & EAF_NO_DIRECT_CLOBBER)
      return true;
  
    if (!stmt_ends_bb_p (stmt))
      generate_subtree_copies (access, base, 0, 0, 0, refresh_gsi, true,
! 			     true, loc);
    else
      {
        edge e;
--- 4312,4325 ----
    gimple *stmt = gsi_stmt (*call_gsi);
    location_t loc = gimple_location (stmt);
    generate_subtree_copies (access, base, 0, 0, 0, call_gsi, false, false,
! 			   loc, true);
  
    if (flags & EAF_NO_DIRECT_CLOBBER)
      return true;
  
    if (!stmt_ends_bb_p (stmt))
      generate_subtree_copies (access, base, 0, 0, 0, refresh_gsi, true,
! 			     true, loc, true);
    else
      {
        edge e;
*************** sra_modify_call_arg (tree *expr, gimple_
*** 4319,4325 ****
  	{
  	  gimple_stmt_iterator alt_gsi = gsi_start_edge (e);
  	  generate_subtree_copies (access, base, 0, 0, 0, &alt_gsi, true,
! 				   true, loc);
  	}
      }
    return true;
--- 4328,4334 ----
  	{
  	  gimple_stmt_iterator alt_gsi = gsi_start_edge (e);
  	  generate_subtree_copies (access, base, 0, 0, 0, &alt_gsi, true,
! 				   true, loc, true);
  	}
      }
    return true;
diff -Nrcpad gcc-16-20260201/gcc/tree-ssa-forwprop.cc gcc-16-20260208/gcc/tree-ssa-forwprop.cc
*** gcc-16-20260201/gcc/tree-ssa-forwprop.cc	Sun Feb  1 22:32:15 2026
--- gcc-16-20260208/gcc/tree-ssa-forwprop.cc	Sun Feb  8 22:32:15 2026
*************** simplify_vector_constructor (gimple_stmt
*** 3975,3988 ****
    if (refnelts < nelts)
      return false;
  
    if (maybe_ident)
      {
!       tree conv_src_type
! 	= (nelts != refnelts
! 	   ? (conv_code != ERROR_MARK
! 	      ? build_vector_type (TREE_TYPE (TREE_TYPE (orig[0])), nelts)
! 	      : type)
! 	   : TREE_TYPE (orig[0]));
        if (conv_code != ERROR_MARK
  	  && !supportable_convert_operation (conv_code, type, conv_src_type,
  					     &conv_code))
--- 3975,4003 ----
    if (refnelts < nelts)
      return false;
  
+   /* Determine the element type for the conversion source.
+      As orig_elem_type keeps track of the original type, check
+      if we need to perform a sign swap after permuting.
+      We need to be able to construct a vector type from the element
+      type which is not possible for e.g. BitInt or pointers
+      so pun with an integer type if needed.   */
+   tree perm_eltype = TREE_TYPE (TREE_TYPE (orig[0]));
+   bool sign_change_p = false;
+   if (conv_code != ERROR_MARK
+       && orig_elem_type[0]
+       && TYPE_SIGN (orig_elem_type[0]) != TYPE_SIGN (perm_eltype))
+     {
+       perm_eltype = signed_or_unsigned_type_for
+ 	(TYPE_UNSIGNED (orig_elem_type[0]), perm_eltype);
+       sign_change_p = true;
+     }
+   tree conv_src_type = build_vector_type (perm_eltype, nelts);
+ 
    if (maybe_ident)
      {
!       /* When there is no conversion, use the target type directly.  */
!       if (conv_code == ERROR_MARK && nelts != refnelts)
! 	conv_src_type = type;
        if (conv_code != ERROR_MARK
  	  && !supportable_convert_operation (conv_code, type, conv_src_type,
  					     &conv_code))
*************** simplify_vector_constructor (gimple_stmt
*** 4104,4109 ****
--- 4119,4133 ----
  	  gsi_insert_before (gsi, lowpart, GSI_SAME_STMT);
  	  orig[0] = gimple_assign_lhs (lowpart);
  	}
+       else if (sign_change_p)
+ 	{
+ 	  gassign *conv
+ 	    = gimple_build_assign (make_ssa_name (conv_src_type),
+ 				   build1 (VIEW_CONVERT_EXPR, conv_src_type,
+ 					   orig[0]));
+ 	  gsi_insert_before (gsi, conv, GSI_SAME_STMT);
+ 	  orig[0] = gimple_assign_lhs (conv);
+ 	}
        if (conv_code == ERROR_MARK)
  	{
  	  tree src_type = TREE_TYPE (orig[0]);
*************** simplify_vector_constructor (gimple_stmt
*** 4135,4156 ****
  	  && orig[1] == error_mark_node
  	  && !maybe_blend[0])
  	return false;
!       tree mask_type, perm_type, conv_src_type;
        perm_type = TREE_TYPE (orig[0]);
-       /* Determine the element type for the conversion source.
- 	 As orig_elem_type keeps track of the original type, check
- 	 if we need to perform a sign swap after permuting.
- 	 We need to be able to construct a vector type from the element
- 	 type which is not possible for e.g. BitInt or pointers
- 	 so pun with an integer type if needed.  */
-       tree conv_elem_type = TREE_TYPE (perm_type);
-       if (conv_code != ERROR_MARK
- 	  && orig_elem_type[0]
- 	  && TYPE_SIGN (orig_elem_type[0]) != TYPE_SIGN (conv_elem_type))
- 	conv_elem_type = signed_or_unsigned_type_for (TYPE_UNSIGNED
- 						      (orig_elem_type[0]),
- 						      conv_elem_type);
-       conv_src_type = build_vector_type (conv_elem_type, nelts);
        if (conv_code != ERROR_MARK
  	  && !supportable_convert_operation (conv_code, type, conv_src_type,
  					     &conv_code))
--- 4159,4166 ----
  	  && orig[1] == error_mark_node
  	  && !maybe_blend[0])
  	return false;
!       tree mask_type, perm_type;
        perm_type = TREE_TYPE (orig[0]);
        if (conv_code != ERROR_MARK
  	  && !supportable_convert_operation (conv_code, type, conv_src_type,
  					     &conv_code))
*************** simplify_vector_constructor (gimple_stmt
*** 4280,4287 ****
        /* Otherwise, we can still have an intermediate sign change.
  	 ??? In that case we have two subsequent conversions.
  	 We should be able to merge them.  */
!       else if (conv_code != ERROR_MARK
! 	       && tree_nop_conversion_p (conv_src_type, perm_type))
  	res = gimple_build (&stmts, VIEW_CONVERT_EXPR, conv_src_type, res);
        /* Finally, apply the conversion.  */
        if (conv_code != ERROR_MARK)
--- 4290,4296 ----
        /* Otherwise, we can still have an intermediate sign change.
  	 ??? In that case we have two subsequent conversions.
  	 We should be able to merge them.  */
!       else if (sign_change_p)
  	res = gimple_build (&stmts, VIEW_CONVERT_EXPR, conv_src_type, res);
        /* Finally, apply the conversion.  */
        if (conv_code != ERROR_MARK)
*************** recognise_vec_perm_simplify_seq (gassign
*** 4608,4615 ****
        if (commutative_tree_code (gimple_assign_rhs_code (v_x_stmt)))
  	{
  	  /* Keep v_x_1 the first operand for non-commutative operators.  */
! 	  v_x_1 = gimple_assign_rhs2 (v_x_stmt);
! 	  v_x_2 = gimple_assign_rhs1 (v_x_stmt);
  	  if (v_x_1 != v_y_1 || v_x_2 != v_y_2)
  	    return false;
  	}
--- 4617,4623 ----
        if (commutative_tree_code (gimple_assign_rhs_code (v_x_stmt)))
  	{
  	  /* Keep v_x_1 the first operand for non-commutative operators.  */
! 	  std::swap (v_x_1, v_x_2);
  	  if (v_x_1 != v_y_1 || v_x_2 != v_y_2)
  	    return false;
  	}
*************** recognise_vec_perm_simplify_seq (gassign
*** 4652,4658 ****
  
    /* Create the new selector.  */
    vec_perm_builder new_sel_perm (nelts, nelts, 1);
!   auto_vec<unsigned int> lanes (nelts);
    lanes.quick_grow_cleared (nelts);
    for (unsigned int i = 0; i < nelts; i++)
      {
--- 4660,4666 ----
  
    /* Create the new selector.  */
    vec_perm_builder new_sel_perm (nelts, nelts, 1);
!   auto_vec<bool> lanes (nelts);
    lanes.quick_grow_cleared (nelts);
    for (unsigned int i = 0; i < nelts; i++)
      {
*************** recognise_vec_perm_simplify_seq (gassign
*** 4678,4684 ****
        new_sel_perm.quick_push (l + offs * nelts);
  
        /* Mark lane as used.  */
!       lanes[l] = 1;
      }
  
    /* Count how many lanes are need.  */
--- 4686,4692 ----
        new_sel_perm.quick_push (l + offs * nelts);
  
        /* Mark lane as used.  */
!       lanes[l] = true;
      }
  
    /* Count how many lanes are need.  */
*************** recognise_vec_perm_simplify_seq (gassign
*** 4690,4701 ****
    if (cnt > nelts / 2)
      return false;
  
!   /* Check if the resulting permuation is cheap.  */
    vec_perm_indices new_indices (new_sel_perm, 2, nelts);
    tree vectype = TREE_TYPE (gimple_assign_lhs (stmt));
    machine_mode vmode = TYPE_MODE (vectype);
    if (!can_vec_perm_const_p (vmode, vmode, new_indices, false))
!       return false;
  
    *seq = XNEW (struct _vec_perm_simplify_seq);
    (*seq)->stmt = stmt;
--- 4698,4709 ----
    if (cnt > nelts / 2)
      return false;
  
!   /* Check if the resulting permutation is cheap.  */
    vec_perm_indices new_indices (new_sel_perm, 2, nelts);
    tree vectype = TREE_TYPE (gimple_assign_lhs (stmt));
    machine_mode vmode = TYPE_MODE (vectype);
    if (!can_vec_perm_const_p (vmode, vmode, new_indices, false))
!     return false;
  
    *seq = XNEW (struct _vec_perm_simplify_seq);
    (*seq)->stmt = stmt;
*************** can_blend_vec_perm_simplify_seqs_p (vec_
*** 4785,4792 ****
       seq1->v_x_stmt and seq1->v_y_stmt are before it.
  
       Note, that we don't need to check the BBs here, because all
!      statements of both sequences have to be in the same BB.
!      */
  
    tree seq2_v_in = gimple_assign_rhs1 (seq2->v_1_stmt);
    if (TREE_CODE (seq2_v_in) != SSA_NAME)
--- 4793,4799 ----
       seq1->v_x_stmt and seq1->v_y_stmt are before it.
  
       Note, that we don't need to check the BBs here, because all
!      statements of both sequences have to be in the same BB.  */
  
    tree seq2_v_in = gimple_assign_rhs1 (seq2->v_1_stmt);
    if (TREE_CODE (seq2_v_in) != SSA_NAME)
*************** calc_perm_vec_perm_simplify_seqs (vec_pe
*** 4834,4840 ****
  {
    unsigned int i;
    unsigned int nelts = seq1->nelts;
!   auto_vec<int> lane_assignment;
    lane_assignment.create (nelts);
  
    /* Mark all lanes as free.  */
--- 4841,4847 ----
  {
    unsigned int i;
    unsigned int nelts = seq1->nelts;
!   auto_vec<unsigned int> lane_assignment;
    lane_assignment.create (nelts);
  
    /* Mark all lanes as free.  */
*************** calc_perm_vec_perm_simplify_seqs (vec_pe
*** 4846,4852 ****
        unsigned int l = TREE_INT_CST_LOW (VECTOR_CST_ELT (seq1->new_sel, i));
        l %= nelts;
        lane_assignment[l] = 1;
! }
  
    /* Allocate lanes for seq2 and calculate selector for seq2->stmt.  */
    vec_perm_builder seq2_stmt_sel_perm (nelts, nelts, 1);
--- 4853,4859 ----
        unsigned int l = TREE_INT_CST_LOW (VECTOR_CST_ELT (seq1->new_sel, i));
        l %= nelts;
        lane_assignment[l] = 1;
!     }
  
    /* Allocate lanes for seq2 and calculate selector for seq2->stmt.  */
    vec_perm_builder seq2_stmt_sel_perm (nelts, nelts, 1);
*************** calc_perm_vec_perm_simplify_seqs (vec_pe
*** 4887,4900 ****
  	    }
  
  	  /* Allocate lane.  */
! 	  lane_assignment[lane] = 2;
  	  new_sel = lane + offs * nelts;
  	}
  
        seq2_stmt_sel_perm.quick_push (new_sel);
      }
  
!   /* Check if the resulting permuation is cheap.  */
    seq2_stmt_indices->new_vector (seq2_stmt_sel_perm, 2, nelts);
    tree vectype = TREE_TYPE (gimple_assign_lhs (seq2->stmt));
    machine_mode vmode = TYPE_MODE (vectype);
--- 4894,4907 ----
  	    }
  
  	  /* Allocate lane.  */
! 	  lane_assignment[lane] = 2 + l_orig;
  	  new_sel = lane + offs * nelts;
  	}
  
        seq2_stmt_sel_perm.quick_push (new_sel);
      }
  
!   /* Check if the resulting permutation is cheap.  */
    seq2_stmt_indices->new_vector (seq2_stmt_sel_perm, 2, nelts);
    tree vectype = TREE_TYPE (gimple_assign_lhs (seq2->stmt));
    machine_mode vmode = TYPE_MODE (vectype);
*************** calc_perm_vec_perm_simplify_seqs (vec_pe
*** 4906,4912 ****
    vec_perm_builder seq1_v_2_stmt_sel_perm (nelts, nelts, 1);
    for (i = 0; i < nelts; i++)
      {
!       bool use_seq1 = lane_assignment[i] != 2;
        unsigned int l1, l2;
  
        if (use_seq1)
--- 4913,4919 ----
    vec_perm_builder seq1_v_2_stmt_sel_perm (nelts, nelts, 1);
    for (i = 0; i < nelts; i++)
      {
!       bool use_seq1 = lane_assignment[i] < 2;
        unsigned int l1, l2;
  
        if (use_seq1)
*************** calc_perm_vec_perm_simplify_seqs (vec_pe
*** 4922,4946 ****
  	  /* We moved the lanes for seq2, so we need to adjust for that.  */
  	  tree s1 = gimple_assign_rhs3 (seq2->v_1_stmt);
  	  tree s2 = gimple_assign_rhs3 (seq2->v_2_stmt);
! 
! 	  unsigned int j = 0;
! 	  for (; j < i; j++)
! 	    {
! 	      unsigned int sel_new;
! 	      sel_new = seq2_stmt_sel_perm[j].to_constant ();
! 	      sel_new %= nelts;
! 	      if (sel_new == i)
! 		break;
! 	    }
! 
! 	  /* This should not happen.  Test anyway to guarantee correctness.  */
! 	  if (j == i)
! 	    return false;
! 
! 	  l1 = TREE_INT_CST_LOW (VECTOR_CST_ELT (s1, j));
! 	  l2 = TREE_INT_CST_LOW (VECTOR_CST_ELT (s2, j));
  	}
  
        seq1_v_1_stmt_sel_perm.quick_push (l1 + (use_seq1 ? 0 : nelts));
        seq1_v_2_stmt_sel_perm.quick_push (l2 + (use_seq1 ? 0 : nelts));
      }
--- 4929,4940 ----
  	  /* We moved the lanes for seq2, so we need to adjust for that.  */
  	  tree s1 = gimple_assign_rhs3 (seq2->v_1_stmt);
  	  tree s2 = gimple_assign_rhs3 (seq2->v_2_stmt);
! 	  l1 = TREE_INT_CST_LOW (VECTOR_CST_ELT (s1, lane_assignment[i] - 2));
! 	  l2 = TREE_INT_CST_LOW (VECTOR_CST_ELT (s2, lane_assignment[i] - 2));
  	}
  
+       l1 %= nelts;
+       l2 %= nelts;
        seq1_v_1_stmt_sel_perm.quick_push (l1 + (use_seq1 ? 0 : nelts));
        seq1_v_2_stmt_sel_perm.quick_push (l2 + (use_seq1 ? 0 : nelts));
      }
diff -Nrcpad gcc-16-20260201/gcc/tree-ssa-math-opts.cc gcc-16-20260208/gcc/tree-ssa-math-opts.cc
*** gcc-16-20260201/gcc/tree-ssa-math-opts.cc	Sun Feb  1 22:32:15 2026
--- gcc-16-20260208/gcc/tree-ssa-math-opts.cc	Sun Feb  8 22:32:15 2026
*************** along with GCC; see the file COPYING3.
*** 118,123 ****
--- 118,124 ----
  #include "tree-ssa-math-opts.h"
  #include "dbgcnt.h"
  #include "cfghooks.h"
+ #include "gimple-match.h"
  
  /* This structure represents one basic block that either computes a
     division, or is a common dominator for basic block that compute a
*************** gimple_expand_builtin_pow (gimple_stmt_i
*** 2029,2034 ****
--- 2030,2038 ----
  	  || REAL_VALUE_ISSIGNALING_NAN (TREE_REAL_CST (arg1))))
      return NULL_TREE;
  
+   if (flag_errno_math)
+     return NULL_TREE;
+ 
    /* If the exponent is equivalent to an integer, expand to an optimal
       multiplication sequence when profitable.  */
    c = TREE_REAL_CST (arg1);
*************** convert_plusminus_to_widen (gimple_stmt_
*** 3105,3111 ****
  static void
  convert_mult_to_fma_1 (tree mul_result, tree op1, tree op2)
  {
-   tree type = TREE_TYPE (mul_result);
    gimple *use_stmt;
    imm_use_iterator imm_iter;
    gcall *fma_stmt;
--- 3109,3114 ----
*************** convert_mult_to_fma_1 (tree mul_result,
*** 3167,3180 ****
  	{
  	  if (ops[0] == result)
  	    /* a * b - c -> a * b + (-c)  */
! 	    addop = gimple_build (&seq, NEGATE_EXPR, type, addop);
  	  else
  	    /* a - b * c -> (-b) * c + a */
  	    negate_p = !negate_p;
  	}
  
        if (negate_p)
! 	mulop1 = gimple_build (&seq, NEGATE_EXPR, type, mulop1);
  
        if (seq)
  	gsi_insert_seq_before (&gsi, seq, GSI_SAME_STMT);
--- 3170,3183 ----
  	{
  	  if (ops[0] == result)
  	    /* a * b - c -> a * b + (-c)  */
! 	    addop = gimple_build (&seq, NEGATE_EXPR, TREE_TYPE (addop), addop);
  	  else
  	    /* a - b * c -> (-b) * c + a */
  	    negate_p = !negate_p;
  	}
  
        if (negate_p)
! 	mulop1 = gimple_build (&seq, NEGATE_EXPR, TREE_TYPE (mulop1), mulop1);
  
        if (seq)
  	gsi_insert_seq_before (&gsi, seq, GSI_SAME_STMT);
*************** last_fma_candidate_feeds_initial_phi (fm
*** 3354,3359 ****
--- 3357,3382 ----
    return false;
  }
  
+ /* If ARG is a convert that only changes the sign then strip the outer
+    conversion away.  It does not strip conversions recursively.  Otherwise
+    return ARG.  */
+ 
+ static tree
+ strip_nop_view_converts (tree arg)
+ {
+   if (TREE_CODE (arg) != SSA_NAME)
+     return arg;
+ 
+   gimple *assign = SSA_NAME_DEF_STMT (arg);
+   gimple_match_op res_op;
+   if (gimple_extract_op (assign, &res_op)
+       && (CONVERT_EXPR_CODE_P (res_op.code) || res_op.code == VIEW_CONVERT_EXPR)
+       && tree_nop_conversion_p (TREE_TYPE (res_op.ops[0]), TREE_TYPE (arg)))
+     return res_op.ops[0];
+ 
+   return arg;
+ }
+ 
  /* Combine the multiplication at MUL_STMT with operands MULOP1 and MULOP2
     with uses in additions and subtractions to form fused multiply-add
     operations.  Returns true if successful and MUL_STMT should be removed.
*************** convert_mult_to_fma (gimple *mul_stmt, t
*** 3458,3463 ****
--- 3481,3487 ----
  	  use_operand_p tmp_use_p;
  	  if (single_imm_use (cast_lhs, &tmp_use_p, &tmp_use))
  	    use_stmt = tmp_use;
+ 	  result = cast_lhs;
  	}
  
        /* For now restrict this operations to single basic blocks.  In theory
*************** convert_mult_to_fma (gimple *mul_stmt, t
*** 3512,3517 ****
--- 3536,3545 ----
  					      &else_value, &len, &bias))
  	return false;
  
+       /* The multiplication result must be one of the addition operands.  */
+       if (ops[0] != result && ops[1] != result)
+ 	return false;
+ 
        switch (code)
  	{
  	case MINUS_EXPR:
*************** convert_mult_to_fma (gimple *mul_stmt, t
*** 3614,3624 ****
  	    {
  	      gcc_checking_assert (!state->m_initial_phi);
  	      gphi *phi;
! 	      if (ops[0] == result)
  		phi = result_of_phi (ops[1]);
  	      else
  		{
! 		  gcc_assert (ops[1] == result);
  		  phi = result_of_phi (ops[0]);
  		}
  
--- 3642,3652 ----
  	    {
  	      gcc_checking_assert (!state->m_initial_phi);
  	      gphi *phi;
! 	      if (strip_nop_view_converts (ops[0]) == result)
  		phi = result_of_phi (ops[1]);
  	      else
  		{
! 		  gcc_assert (strip_nop_view_converts (ops[1]) == result);
  		  phi = result_of_phi (ops[0]);
  		}
  
*************** match_uaddc_usubc (gimple_stmt_iterator
*** 5411,5417 ****
  			TYPE_MODE (type)) == CODE_FOR_nothing
        || (rhs[2]
  	  && optab_handler (code == PLUS_EXPR ? uaddc5_optab : usubc5_optab,
! 			    TYPE_MODE (type)) == CODE_FOR_nothing))
      return false;
    tree arg1, arg2, arg3 = NULL_TREE;
    gimple *re1 = NULL, *re2 = NULL;
--- 5439,5449 ----
  			TYPE_MODE (type)) == CODE_FOR_nothing
        || (rhs[2]
  	  && optab_handler (code == PLUS_EXPR ? uaddc5_optab : usubc5_optab,
! 			    TYPE_MODE (type)) == CODE_FOR_nothing)
!       || !types_compatible_p (type,
! 			      TREE_TYPE (TREE_TYPE (gimple_call_lhs (ovf1))))
!       || !types_compatible_p (type,
! 			      TREE_TYPE (TREE_TYPE (gimple_call_lhs (ovf2)))))
      return false;
    tree arg1, arg2, arg3 = NULL_TREE;
    gimple *re1 = NULL, *re2 = NULL;
*************** math_opts_dom_walker::after_dom_children
*** 6591,6615 ****
  	{
  	  switch (gimple_call_combined_fn (stmt))
  	    {
- 	    CASE_CFN_POW:
- 	      if (gimple_call_lhs (stmt)
- 		  && TREE_CODE (gimple_call_arg (stmt, 1)) == REAL_CST
- 		  && real_equal (&TREE_REAL_CST (gimple_call_arg (stmt, 1)),
- 				 &dconst2)
- 		  && convert_mult_to_fma (stmt,
- 					  gimple_call_arg (stmt, 0),
- 					  gimple_call_arg (stmt, 0),
- 					  &fma_state))
- 		{
- 		  unlink_stmt_vdef (stmt);
- 		  if (gsi_remove (&gsi, true)
- 		      && gimple_purge_dead_eh_edges (bb))
- 		    *m_cfg_changed_p = true;
- 		  release_defs (stmt);
- 		  continue;
- 		}
- 	      break;
- 
  	    case CFN_COND_MUL:
  	      if (convert_mult_to_fma (stmt,
  				       gimple_call_arg (stmt, 1),
--- 6623,6628 ----
diff -Nrcpad gcc-16-20260201/gcc/tree-switch-conversion.cc gcc-16-20260208/gcc/tree-switch-conversion.cc
*** gcc-16-20260201/gcc/tree-switch-conversion.cc	Sun Feb  1 22:32:15 2026
--- gcc-16-20260208/gcc/tree-switch-conversion.cc	Sun Feb  8 22:32:15 2026
*************** switch_conversion::build_one_array (int
*** 971,977 ****
    tree name;
    gimple *load;
    gimple_stmt_iterator gsi = gsi_for_stmt (m_switch);
-   location_t loc = gimple_location (m_switch);
  
    gcc_assert (m_default_values[num]);
  
--- 971,976 ----
*************** switch_conversion::build_one_array (int
*** 1030,1036 ****
        TREE_CONSTANT (ctor) = true;
        TREE_STATIC (ctor) = true;
  
!       decl = build_decl (loc, VAR_DECL, NULL_TREE, array_type);
        TREE_STATIC (decl) = 1;
        DECL_INITIAL (decl) = ctor;
  
--- 1029,1035 ----
        TREE_CONSTANT (ctor) = true;
        TREE_STATIC (ctor) = true;
  
!       decl = build_decl (UNKNOWN_LOCATION, VAR_DECL, NULL_TREE, array_type);
        TREE_STATIC (decl) = 1;
        DECL_INITIAL (decl) = ctor;
  
diff -Nrcpad gcc-16-20260201/gcc/tree-vect-loop-manip.cc gcc-16-20260208/gcc/tree-vect-loop-manip.cc
*** gcc-16-20260201/gcc/tree-vect-loop-manip.cc	Sun Feb  1 22:32:15 2026
--- gcc-16-20260208/gcc/tree-vect-loop-manip.cc	Sun Feb  8 22:32:15 2026
*************** vect_update_ivs_after_vectorizer (loop_v
*** 2505,2524 ****
  	  gsi_insert_seq_before (&last_gsi, new_stmts, GSI_SAME_STMT);
  	}
  
!       /* Fix phi expressions in all out of loop bb.  */
!       imm_use_iterator imm_iter;
!       gimple *use_stmt;
!       use_operand_p use_p;
!       tree ic_var = PHI_ARG_DEF_FROM_EDGE (phi1, update_e);
!       if (TREE_CODE (ic_var) == SSA_NAME)
! 	{
! 	  FOR_EACH_IMM_USE_STMT (use_stmt, imm_iter, ic_var)
! 	    if (!flow_bb_inside_loop_p (loop, gimple_bb (use_stmt)))
! 	      FOR_EACH_IMM_USE_ON_STMT (use_p, imm_iter)
! 		SET_USE (use_p, ni_name);
! 	}
!       else
! 	adjust_phi_and_debug_stmts (phi1, update_e, ni_name);
      }
  }
  
--- 2505,2512 ----
  	  gsi_insert_seq_before (&last_gsi, new_stmts, GSI_SAME_STMT);
  	}
  
!       /* Update the PHI argument on the requested edge.  */
!       adjust_phi_and_debug_stmts (phi1, update_e, ni_name);
      }
  }
  
diff -Nrcpad gcc-16-20260201/gcc/tree-vect-slp.cc gcc-16-20260208/gcc/tree-vect-slp.cc
*** gcc-16-20260201/gcc/tree-vect-slp.cc	Sun Feb  1 22:32:15 2026
--- gcc-16-20260208/gcc/tree-vect-slp.cc	Sun Feb  8 22:32:15 2026
*************** vect_slp_analyze_operations (vec_info *v
*** 9258,9267 ****
  	    dump_printf_loc (MSG_NOTE, vect_location,
  			     "removing SLP instance operations starting from: %G",
  			     stmt_info->stmt);
  	  vect_free_slp_instance (instance);
            vinfo->slp_instances.ordered_remove (i);
- 	  while (!visited_vec.is_empty ())
- 	    visited.remove (visited_vec.pop ());
  	}
        else
  	{
--- 9258,9276 ----
  	    dump_printf_loc (MSG_NOTE, vect_location,
  			     "removing SLP instance operations starting from: %G",
  			     stmt_info->stmt);
+ 	  while (!visited_vec.is_empty ())
+ 	    {
+ 	      slp_tree node = visited_vec.pop ();
+ 	      SLP_TREE_TYPE (node) = undef_vec_info_type;
+ 	      if (node->data)
+ 		{
+ 		  delete node->data;
+ 		  node->data = nullptr;
+ 		}
+ 	      visited.remove (node);
+ 	    }
  	  vect_free_slp_instance (instance);
            vinfo->slp_instances.ordered_remove (i);
  	}
        else
  	{
diff -Nrcpad gcc-16-20260201/gcc/tree.cc gcc-16-20260208/gcc/tree.cc
*** gcc-16-20260201/gcc/tree.cc	Sun Feb  1 22:32:15 2026
--- gcc-16-20260208/gcc/tree.cc	Sun Feb  8 22:32:15 2026
*************** tree_ctz (const_tree expr)
*** 3283,3289 ****
      case COMPOUND_EXPR:
        return tree_ctz (TREE_OPERAND (expr, 1));
      case ADDR_EXPR:
!       ret1 = get_pointer_alignment (CONST_CAST_TREE (expr));
        if (ret1 > BITS_PER_UNIT)
  	{
  	  ret1 = ctz_hwi (ret1 / BITS_PER_UNIT);
--- 3283,3289 ----
      case COMPOUND_EXPR:
        return tree_ctz (TREE_OPERAND (expr, 1));
      case ADDR_EXPR:
!       ret1 = get_pointer_alignment (const_cast<tree> (expr));
        if (ret1 > BITS_PER_UNIT)
  	{
  	  ret1 = ctz_hwi (ret1 / BITS_PER_UNIT);
*************** simple_cst_equal (const_tree t1, const_t
*** 6826,6838 ****
  	vec<constructor_elt, va_gc> *v2 = CONSTRUCTOR_ELTS (t2);
  
  	if (vec_safe_length (v1) != vec_safe_length (v2))
! 	  return false;
  
          for (idx = 0; idx < vec_safe_length (v1); ++idx)
! 	  /* ??? Should we handle also fields here? */
! 	  if (!simple_cst_equal ((*v1)[idx].value, (*v2)[idx].value))
! 	    return false;
! 	return true;
        }
  
      case SAVE_EXPR:
--- 6826,6852 ----
  	vec<constructor_elt, va_gc> *v2 = CONSTRUCTOR_ELTS (t2);
  
  	if (vec_safe_length (v1) != vec_safe_length (v2))
! 	  return 0;
  
          for (idx = 0; idx < vec_safe_length (v1); ++idx)
! 	  {
! 	    if ((*v1)[idx].index
! 		&& TREE_CODE ((*v1)[idx].index) == FIELD_DECL)
! 	      {
! 		if ((*v1)[idx].index != (*v2)[idx].index)
! 		  return 0;
! 	      }
! 	    else
! 	      {
! 		cmp = simple_cst_equal ((*v1)[idx].index, (*v2)[idx].index);
! 		if (cmp <= 0)
! 		  return cmp;
! 	      }
! 	    cmp = simple_cst_equal ((*v1)[idx].value, (*v2)[idx].value);
! 	    if (cmp <= 0)
! 	      return cmp;
! 	  }
! 	return 1;
        }
  
      case SAVE_EXPR:
*************** build_function_type (tree value_type, tr
*** 7766,7772 ****
      gcc_assert (TYPE_STRUCTURAL_EQUALITY_P (t));
    else if (any_noncanonical_p)
      TYPE_CANONICAL (t) = build_function_type (TYPE_CANONICAL (value_type),
! 					      canon_argtypes);
  
    if (!COMPLETE_TYPE_P (t))
      layout_type (t);
--- 7780,7787 ----
      gcc_assert (TYPE_STRUCTURAL_EQUALITY_P (t));
    else if (any_noncanonical_p)
      TYPE_CANONICAL (t) = build_function_type (TYPE_CANONICAL (value_type),
! 					      canon_argtypes,
! 					      no_named_args_stdarg_p);
  
    if (!COMPLETE_TYPE_P (t))
      layout_type (t);
*************** block_may_fallthru (const_tree block)
*** 12948,12954 ****
  {
    /* This CONST_CAST is okay because expr_last returns its argument
       unmodified and we assign it to a const_tree.  */
!   const_tree stmt = expr_last (CONST_CAST_TREE (block));
  
    switch (stmt ? TREE_CODE (stmt) : ERROR_MARK)
      {
--- 12963,12969 ----
  {
    /* This CONST_CAST is okay because expr_last returns its argument
       unmodified and we assign it to a const_tree.  */
!   const_tree stmt = expr_last (const_cast<tree> (block));
  
    switch (stmt ? TREE_CODE (stmt) : ERROR_MARK)
      {
*************** verify_type (const_tree t)
*** 14463,14472 ****
      }
    if (TYPE_MAIN_VARIANT (t) == t && ct && TYPE_MAIN_VARIANT (ct) != ct)
     {
!       error ("%<TYPE_CANONICAL%> of main variant is not main variant");
!       debug_tree (ct);
!       debug_tree (TYPE_MAIN_VARIANT (ct));
!       error_found = true;
     }
  
  
--- 14478,14502 ----
      }
    if (TYPE_MAIN_VARIANT (t) == t && ct && TYPE_MAIN_VARIANT (ct) != ct)
     {
!      /* This can happen when build_type_attribute_variant is called on
! 	C/C++ arrays of qualified types.  volatile int[2] is unqualified
! 	ARRAY_TYPE with volatile int element type.
! 	TYPE_CANONICAL (volatile int) is itself and so is
! 	TYPE_CANONICAL (volatile int[2]).  build_type_attribute_qual_variant
! 	creates a distinct type copy (so TYPE_MAIN_VARIANT is itself) and sets
! 	its TYPE_CANONICAL to the unqualified ARRAY_TYPE (so volatile int[2]).
! 	But this is not the TYPE_MAIN_VARIANT, which is int[2].  So, just
! 	verify that TYPE_MAIN_VARIANT (ct) is already the final type we
! 	need.  */
!       tree mvc = TYPE_MAIN_VARIANT (ct);
!       if (TYPE_CANONICAL (mvc) != mvc)
! 	{
! 	  error ("main variant of %<TYPE_CANONICAL%> of main variant is not"
! 		 " its own %<TYPE_CANONICAL%>");
! 	  debug_tree (ct);
! 	  debug_tree (TYPE_MAIN_VARIANT (ct));
! 	  error_found = true;
! 	}
     }
  
  
diff -Nrcpad gcc-16-20260201/gcc/tree.h gcc-16-20260208/gcc/tree.h
*** gcc-16-20260201/gcc/tree.h	Sun Feb  1 22:32:15 2026
--- gcc-16-20260208/gcc/tree.h	Sun Feb  8 22:32:15 2026
*************** code_helper::is_builtin_fn () const
*** 404,410 ****
  (*tree_int_cst_elt_check ((T), (I), __FILE__, __LINE__, __FUNCTION__))
  
  #define TREE_VEC_ELT_CHECK(T, I) \
! (*(CONST_CAST2 (tree *, typeof (T)*, \
       tree_vec_elt_check ((T), (I), __FILE__, __LINE__, __FUNCTION__))))
  
  #define OMP_CLAUSE_ELT_CHECK(T, I) \
--- 404,410 ----
  (*tree_int_cst_elt_check ((T), (I), __FILE__, __LINE__, __FUNCTION__))
  
  #define TREE_VEC_ELT_CHECK(T, I) \
! (*(const_cast<tree *> ( \
       tree_vec_elt_check ((T), (I), __FILE__, __LINE__, __FUNCTION__))))
  
  #define OMP_CLAUSE_ELT_CHECK(T, I) \
*************** code_helper::is_builtin_fn () const
*** 412,418 ****
  
  /* Special checks for TREE_OPERANDs.  */
  #define TREE_OPERAND_CHECK(T, I) \
! (*(CONST_CAST2 (tree*, typeof (T)*, \
       tree_operand_check ((T), (I), __FILE__, __LINE__, __FUNCTION__))))
  
  #define TREE_OPERAND_CHECK_CODE(T, CODE, I) \
--- 412,418 ----
  
  /* Special checks for TREE_OPERANDs.  */
  #define TREE_OPERAND_CHECK(T, I) \
! (*(const_cast<tree *> ( \
       tree_operand_check ((T), (I), __FILE__, __LINE__, __FUNCTION__))))
  
  #define TREE_OPERAND_CHECK_CODE(T, CODE, I) \
*************** extern void omp_clause_range_check_faile
*** 568,579 ****
     we are not modifying the tree itself.  */
  
  #define STRIP_NOPS(EXP) \
!   (EXP) = tree_strip_nop_conversions (CONST_CAST_TREE (EXP))
  
  /* Like STRIP_NOPS, but don't let the signedness change either.  */
  
  #define STRIP_SIGN_NOPS(EXP) \
!   (EXP) = tree_strip_sign_nop_conversions (CONST_CAST_TREE (EXP))
  
  /* Like STRIP_NOPS, but don't alter the TREE_TYPE either.  */
  
--- 568,579 ----
     we are not modifying the tree itself.  */
  
  #define STRIP_NOPS(EXP) \
!   (EXP) = tree_strip_nop_conversions (const_cast<tree> (EXP))
  
  /* Like STRIP_NOPS, but don't let the signedness change either.  */
  
  #define STRIP_SIGN_NOPS(EXP) \
!   (EXP) = tree_strip_sign_nop_conversions (const_cast<tree> (EXP))
  
  /* Like STRIP_NOPS, but don't alter the TREE_TYPE either.  */
  
*************** extern void omp_clause_range_check_faile
*** 595,601 ****
     in use to provide a location_t.  */
  
  #define STRIP_ANY_LOCATION_WRAPPER(EXP) \
!   (EXP) = tree_strip_any_location_wrapper (CONST_CAST_TREE (EXP))
  
  /* Nonzero if TYPE represents a vector type.  */
  
--- 595,601 ----
     in use to provide a location_t.  */
  
  #define STRIP_ANY_LOCATION_WRAPPER(EXP) \
!   (EXP) = tree_strip_any_location_wrapper (const_cast<tree> (EXP))
  
  /* Nonzero if TYPE represents a vector type.  */
  
*************** tree_int_cst_elt_check (const_tree __t,
*** 3991,3997 ****
    if (__i < 0 || __i >= __t->base.u.int_length.extended)
      tree_int_cst_elt_check_failed (__i, __t->base.u.int_length.extended,
  				   __f, __l, __g);
!   return &CONST_CAST_TREE (__t)->int_cst.val[__i];
  }
  
  inline HOST_WIDE_INT *
--- 3991,3997 ----
    if (__i < 0 || __i >= __t->base.u.int_length.extended)
      tree_int_cst_elt_check_failed (__i, __t->base.u.int_length.extended,
  				   __f, __l, __g);
!   return &const_cast<tree> (__t)->int_cst.val[__i];
  }
  
  inline HOST_WIDE_INT *
*************** tree_int_cst_elt_check (tree __t, int __
*** 4003,4009 ****
    if (__i < 0 || __i >= __t->base.u.int_length.extended)
      tree_int_cst_elt_check_failed (__i, __t->base.u.int_length.extended,
  				   __f, __l, __g);
!   return &CONST_CAST_TREE (__t)->int_cst.val[__i];
  }
  
  /* Workaround -Wstrict-overflow false positive during profiledbootstrap.  */
--- 4003,4009 ----
    if (__i < 0 || __i >= __t->base.u.int_length.extended)
      tree_int_cst_elt_check_failed (__i, __t->base.u.int_length.extended,
  				   __f, __l, __g);
!   return &const_cast<tree> (__t)->int_cst.val[__i];
  }
  
  /* Workaround -Wstrict-overflow false positive during profiledbootstrap.  */
*************** tree_vec_elt_check (tree __t, int __i,
*** 4021,4027 ****
      tree_check_failed (__t, __f, __l, __g, TREE_VEC, 0);
    if (__i < 0 || __i >= __t->base.u.length)
      tree_vec_elt_check_failed (__i, __t->base.u.length, __f, __l, __g);
!   return &CONST_CAST_TREE (__t)->vec.a[__i];
  }
  
  # if GCC_VERSION >= 4006
--- 4021,4027 ----
      tree_check_failed (__t, __f, __l, __g, TREE_VEC, 0);
    if (__i < 0 || __i >= __t->base.u.length)
      tree_vec_elt_check_failed (__i, __t->base.u.length, __f, __l, __g);
!   return &const_cast<tree> (__t)->vec.a[__i];
  }
  
  # if GCC_VERSION >= 4006
*************** tree_vec_elt_check (const_tree __t, int
*** 4279,4285 ****
      tree_check_failed (__t, __f, __l, __g, TREE_VEC, 0);
    if (__i < 0 || __i >= __t->base.u.length)
      tree_vec_elt_check_failed (__i, __t->base.u.length, __f, __l, __g);
!   return CONST_CAST (const_tree *, &__t->vec.a[__i]);
    //return &__t->vec.a[__i];
  }
  
--- 4279,4285 ----
      tree_check_failed (__t, __f, __l, __g, TREE_VEC, 0);
    if (__i < 0 || __i >= __t->base.u.length)
      tree_vec_elt_check_failed (__i, __t->base.u.length, __f, __l, __g);
!   return const_cast<const_tree *> (&__t->vec.a[__i]);
    //return &__t->vec.a[__i];
  }
  
*************** omp_clause_elt_check (const_tree __t, in
*** 4295,4301 ****
      tree_check_failed (__t, __f, __l, __g, OMP_CLAUSE, 0);
    if (__i < 0 || __i >= omp_clause_num_ops [__t->omp_clause.code])
      omp_clause_operand_check_failed (__i, __t, __f, __l, __g);
!   return CONST_CAST (const_tree *, &__t->omp_clause.ops[__i]);
  }
  
  inline const_tree
--- 4295,4301 ----
      tree_check_failed (__t, __f, __l, __g, OMP_CLAUSE, 0);
    if (__i < 0 || __i >= omp_clause_num_ops [__t->omp_clause.code])
      omp_clause_operand_check_failed (__i, __t, __f, __l, __g);
!   return const_cast<const_tree *> (&__t->omp_clause.ops[__i]);
  }
  
  inline const_tree
*************** tree_operand_check (tree __t, int __i,
*** 4332,4338 ****
    const_tree __u = EXPR_CHECK (__t);
    if (__i < 0 || __i >= TREE_OPERAND_LENGTH (__u))
      tree_operand_check_failed (__i, __u, __f, __l, __g);
!   return &CONST_CAST_TREE (__u)->exp.operands[__i];
  }
  
  inline tree *
--- 4332,4338 ----
    const_tree __u = EXPR_CHECK (__t);
    if (__i < 0 || __i >= TREE_OPERAND_LENGTH (__u))
      tree_operand_check_failed (__i, __u, __f, __l, __g);
!   return &const_cast<tree> (__u)->exp.operands[__i];
  }
  
  inline tree *
*************** tree_operand_check (const_tree __t, int
*** 4353,4359 ****
    const_tree __u = EXPR_CHECK (__t);
    if (__i < 0 || __i >= TREE_OPERAND_LENGTH (__u))
      tree_operand_check_failed (__i, __u, __f, __l, __g);
!   return CONST_CAST (const_tree *, &__u->exp.operands[__i]);
  }
  
  inline const_tree *
--- 4353,4359 ----
    const_tree __u = EXPR_CHECK (__t);
    if (__i < 0 || __i >= TREE_OPERAND_LENGTH (__u))
      tree_operand_check_failed (__i, __u, __f, __l, __g);
!   return const_cast<const_tree *> (&__u->exp.operands[__i]);
  }
  
  inline const_tree *
*************** tree_operand_check_code (const_tree __t,
*** 4364,4370 ****
      tree_check_failed (__t, __f, __l, __g, __code, 0);
    if (__i < 0 || __i >= TREE_OPERAND_LENGTH (__t))
      tree_operand_check_failed (__i, __t, __f, __l, __g);
!   return CONST_CAST (const_tree *, &__t->exp.operands[__i]);
  }
  
  #endif
--- 4364,4370 ----
      tree_check_failed (__t, __f, __l, __g, __code, 0);
    if (__i < 0 || __i >= TREE_OPERAND_LENGTH (__t))
      tree_operand_check_failed (__i, __t, __f, __l, __g);
!   return const_cast<const_tree *> (&__t->exp.operands[__i]);
  }
  
  #endif
diff -Nrcpad gcc-16-20260201/gcc/tsystem.h gcc-16-20260208/gcc/tsystem.h
*** gcc-16-20260201/gcc/tsystem.h	Sun Feb  1 22:32:15 2026
--- gcc-16-20260208/gcc/tsystem.h	Sun Feb  8 22:32:15 2026
*************** extern int errno;
*** 136,144 ****
     unreachable default case of a switch.  Do not use gcc_assert(0).  */
  #define gcc_unreachable() (abort ())
  
- #define CONST_CAST2(TOTYPE,FROMTYPE,X) ((__extension__(union {FROMTYPE _q; TOTYPE _nq;})(X))._nq)
- #define CONST_CAST(TYPE,X) CONST_CAST2 (TYPE, const TYPE, (X))
- 
  /* Filename handling macros.  */
  #include "filenames.h"
  
--- 136,141 ----
diff -Nrcpad gcc-16-20260201/gcc/value-range.cc gcc-16-20260208/gcc/value-range.cc
*** gcc-16-20260201/gcc/value-range.cc	Sun Feb  1 22:32:15 2026
--- gcc-16-20260208/gcc/value-range.cc	Sun Feb  8 22:32:15 2026
*************** along with GCC; see the file COPYING3.
*** 32,38 ****
  #include "gimple-range.h"
  
  // Return the bitmask inherent in a range :   TYPE [MIN, MAX].
! // This use to be get_bitmask_from_range ().
  
  irange_bitmask::irange_bitmask (tree type,
  				const wide_int &min, const wide_int &max)
--- 32,38 ----
  #include "gimple-range.h"
  
  // Return the bitmask inherent in a range :   TYPE [MIN, MAX].
! // This used to be get_bitmask_from_range ().
  
  irange_bitmask::irange_bitmask (tree type,
  				const wide_int &min, const wide_int &max)
diff -Nrcpad gcc-16-20260201/gcc/value-range.h gcc-16-20260208/gcc/value-range.h
*** gcc-16-20260201/gcc/value-range.h	Sun Feb  1 22:32:15 2026
--- gcc-16-20260208/gcc/value-range.h	Sun Feb  8 22:32:15 2026
*************** enum value_range_discriminator
*** 55,61 ****
    VR_UNKNOWN
  };
  
! // Abstract class for ranges of any of the supported types.
  //
  // To query what types ranger and the entire ecosystem can support,
  // use value_range::supports_type_p(tree type).  This is a static
--- 55,71 ----
    VR_UNKNOWN
  };
  
! // Abstract class for representing subsets of values for various
! // supported types, such as the possible values of a variable.
! //
! // There are subclasses for each of integer, floating point, and pointer
! // types, each with their own strategies for efficiently representing
! // subsets of values.
! //
! // For efficiency, we can't precisely represent any arbitrary subset
! // of values of a type (which could require 2^N bits for a type of size N)
! // Hence operations on the subclasses may introduce imprecision
! // due to over-approximating the possible subsets.
  //
  // To query what types ranger and the entire ecosystem can support,
  // use value_range::supports_type_p(tree type).  This is a static
*************** namespace inchash
*** 123,135 ****
    extern void add_vrange (const vrange &, hash &, unsigned flags = 0);
  }
  
! // A pair of values representing the known bits in a range.  Zero bits
  // in MASK cover constant values.  Set bits in MASK cover unknown
! // values.  VALUE are the known bits.
! //
! // Set bits in MASK (no meaningful information) must have their
! // corresponding bits in VALUE cleared, as this speeds up union and
! // intersect.
  
  class irange_bitmask
  {
--- 133,150 ----
    extern void add_vrange (const vrange &, hash &, unsigned flags = 0);
  }
  
! // A pair of values representing the known bits of a value.  Zero bits
  // in MASK cover constant values.  Set bits in MASK cover unknown
! // values.  VALUE are the known bits for the bits where MASK is zero,
! // and must be zero for the unknown bits where MASK is set (needed as an
! // optimization of union and intersect)
! // For example:
! // VALUE: [..., 0, 1, 0]
! // MASK:  [..., 1, 0, 0]
! //              ^  ^  ^
! //              |  |  known bit: {0}
! //              |  known bit: {1}
! //              unknown bit: {0, 1}
  
  class irange_bitmask
  {
*************** irange_bitmask::intersect (const irange_
*** 267,273 ****
    return true;
  }
  
! // An integer range without any storage.
  
  class irange : public vrange
  {
--- 282,289 ----
    return true;
  }
  
! // A subset of possible values for an integer type, leaving
! // allocation of storage to subclasses.
  
  class irange : public vrange
  {
*************** public:
*** 470,476 ****
    tree ubound () const final override;
  };
  
! // The NAN state as an opaque object.
  
  class nan_state
  {
--- 486,494 ----
    tree ubound () const final override;
  };
  
! // The possible NAN state of a floating point value as an opaque object.
! // This represents one of the four subsets of { -NaN, +NaN },
! // i.e. one of {}, { -NaN }, { +NaN}, or { -NaN, +NaN }.
  
  class nan_state
  {
*************** nan_state::neg_p () const
*** 521,530 ****
    return m_neg_nan;
  }
  
! // A floating point range.
  //
  // The representation is a type with a couple of endpoints, unioned
! // with the set of { -NAN, +Nan }.
  
  class frange final : public vrange
  {
--- 539,548 ----
    return m_neg_nan;
  }
  
! // A subset of possible values for a floating point type.
  //
  // The representation is a type with a couple of endpoints, unioned
! // with a subset of { -NaN, +NaN }.
  
  class frange final : public vrange
  {
diff -Nrcpad gcc-16-20260201/gcc/var-tracking.cc gcc-16-20260208/gcc/var-tracking.cc
*** gcc-16-20260201/gcc/var-tracking.cc	Sun Feb  1 22:32:15 2026
--- gcc-16-20260208/gcc/var-tracking.cc	Sun Feb  8 22:32:15 2026
*************** adjust_mem_stores (rtx loc, const_rtx ex
*** 1195,1201 ****
  					      adjust_mems, data);
        if (new_dest != SET_DEST (expr))
  	{
! 	  rtx xexpr = CONST_CAST_RTX (expr);
  	  validate_change (NULL_RTX, &SET_DEST (xexpr), new_dest, true);
  	}
      }
--- 1195,1201 ----
  					      adjust_mems, data);
        if (new_dest != SET_DEST (expr))
  	{
! 	  rtx xexpr = const_cast<rtx> (expr);
  	  validate_change (NULL_RTX, &SET_DEST (xexpr), new_dest, true);
  	}
      }
diff -Nrcpad gcc-16-20260201/gcc/varasm.cc gcc-16-20260208/gcc/varasm.cc
*** gcc-16-20260201/gcc/varasm.cc	Sun Feb  1 22:32:15 2026
--- gcc-16-20260208/gcc/varasm.cc	Sun Feb  8 22:32:15 2026
*************** mark_constants_in_pattern (rtx insn)
*** 4517,4523 ****
  	      if (!TREE_ASM_WRITTEN (DECL_INITIAL (decl)))
  		{
  		  n_deferred_constants--;
! 		  output_constant_def_contents (CONST_CAST_RTX (x));
  		}
  	    }
  	}
--- 4517,4523 ----
  	      if (!TREE_ASM_WRITTEN (DECL_INITIAL (decl)))
  		{
  		  n_deferred_constants--;
! 		  output_constant_def_contents (const_cast<rtx> (x));
  		}
  	    }
  	}
*************** categorize_decl_for_section (const_tree
*** 7374,7380 ****
    else if (TREE_CODE (decl) == STRING_CST)
      {
        if ((flag_sanitize & SANITIZE_ADDRESS)
! 	  && asan_protect_global (CONST_CAST_TREE (decl)))
        /* or !flag_merge_constants */
          return SECCAT_RODATA;
        else
--- 7374,7380 ----
    else if (TREE_CODE (decl) == STRING_CST)
      {
        if ((flag_sanitize & SANITIZE_ADDRESS)
! 	  && asan_protect_global (const_cast<tree> (decl)))
        /* or !flag_merge_constants */
          return SECCAT_RODATA;
        else
*************** categorize_decl_for_section (const_tree
*** 7382,7388 ****
      }
    else if (VAR_P (decl))
      {
!       tree d = CONST_CAST_TREE (decl);
        if (bss_initializer_p (decl))
  	ret = SECCAT_BSS;
        else if (! TREE_READONLY (decl)
--- 7382,7388 ----
      }
    else if (VAR_P (decl))
      {
!       tree d = const_cast<tree> (decl);
        if (bss_initializer_p (decl))
  	ret = SECCAT_BSS;
        else if (! TREE_READONLY (decl)
diff -Nrcpad gcc-16-20260201/gcc/vec.h gcc-16-20260208/gcc/vec.h
*** gcc-16-20260201/gcc/vec.h	Sun Feb  1 22:32:15 2026
--- gcc-16-20260208/gcc/vec.h	Sun Feb  8 22:32:15 2026
*************** vec<T, A, vl_embed>::iterate (unsigned i
*** 985,991 ****
  {
    if (ix < m_vecpfx.m_num)
      {
!       *ptr = CONST_CAST (T *, &address ()[ix]);
        return true;
      }
    else
--- 985,991 ----
  {
    if (ix < m_vecpfx.m_num)
      {
!       *ptr = const_cast<T *> (&address ()[ix]);
        return true;
      }
    else
diff -Nrcpad gcc-16-20260201/include/ChangeLog gcc-16-20260208/include/ChangeLog
*** gcc-16-20260201/include/ChangeLog	Sun Feb  1 22:32:15 2026
--- gcc-16-20260208/include/ChangeLog	Sun Feb  8 22:32:15 2026
***************
*** 1,3 ****
--- 1,16 ----
+ 2026-02-05  Matthieu Longo  <matthieu.longo@arm.com>
+ 
+ 	* doubly-linked-list.h
+ 	(LINKED_LIST_SWAP_LISTS): Add new helper.
+ 	(LINKED_LIST_DECL_SWAP_LISTS): Likewise.
+ 	(LINKED_LIST_DEFN_SWAP_LISTS): Likewise.
+ 	(LWRAPPERTYPE##_swap_lists): Likewise.
+ 
+ 2026-02-03  Andrew Stubbs  <ams@baylibre.com>
+ 
+ 	* cuda/cuda.h (CUpointer_attribute): New enum.
+ 	(cuPointerGetAttribute): New prototype.
+ 
  2025-12-12  mengqinggang  <mengqinggang@loongson.cn>
  	    Jiajie Chen  <c@jia.je>
  
diff -Nrcpad gcc-16-20260201/include/cuda/cuda.h gcc-16-20260208/include/cuda/cuda.h
*** gcc-16-20260201/include/cuda/cuda.h	Sun Feb  1 22:32:15 2026
--- gcc-16-20260208/include/cuda/cuda.h	Sun Feb  8 22:32:15 2026
*************** typedef enum {
*** 143,148 ****
--- 143,155 ----
    CU_MEMORYTYPE_UNIFIED = 0x04
  } CUmemorytype;
  
+ typedef enum {
+   CU_POINTER_ATTRIBUTE_CONTEXT = 0x01,
+   CU_POINTER_ATTRIBUTE_MEMORY_TYPE = 0x02,
+   CU_POINTER_ATTRIBUTE_DEVICE_POINTER = 0x03,
+   CU_POINTER_ATTRIBUTE_HOST_POINTER = 0x04
+ } CUpointer_attribute;
+ 
  typedef struct {
    size_t srcXInBytes, srcY;
    CUmemorytype srcMemoryType;
*************** CUresult cuModuleGetGlobal (CUdeviceptr
*** 300,305 ****
--- 307,314 ----
  CUresult cuModuleLoad (CUmodule *, const char *);
  CUresult cuModuleLoadData (CUmodule *, const void *);
  CUresult cuModuleUnload (CUmodule);
+ CUresult cuPointerGetAttribute (CUmemorytype *, CUpointer_attribute,
+ 				CUdeviceptr);
  CUresult cuOccupancyMaxPotentialBlockSize(int *, int *, CUfunction,
  					  CUoccupancyB2DSize, size_t, int);
  typedef void (*CUstreamCallback)(CUstream, CUresult, void *);
diff -Nrcpad gcc-16-20260201/include/doubly-linked-list.h gcc-16-20260208/include/doubly-linked-list.h
*** gcc-16-20260201/include/doubly-linked-list.h	Sun Feb  1 22:32:15 2026
--- gcc-16-20260208/include/doubly-linked-list.h	Sun Feb  8 22:32:15 2026
*************** LTYPE##_remove (LWRAPPERTYPE *wrapper, L
*** 229,242 ****
    return previous;							\
  }
  
! /* Generic swap.  */
  #define LINKED_LIST_SWAP(LTYPE)			LTYPE##_swap
  
  #define LINKED_LIST_DECL_SWAP(LWRAPPERTYPE, LTYPE, EXPORT)		\
    EXPORT void								\
    LTYPE##_swap (LWRAPPERTYPE *wrapper, LTYPE *node1, LTYPE *node2)
  
- /* Swap two nodes in a list.  */
  #define LINKED_LIST_DEFN_SWAP(LWRAPPERTYPE, LTYPE, EXPORT)		\
  EXPORT void								\
  LTYPE##_swap (LWRAPPERTYPE *wrapper, LTYPE *node1, LTYPE *node2)	\
--- 229,241 ----
    return previous;							\
  }
  
! /* Swap two nodes in a list.  */
  #define LINKED_LIST_SWAP(LTYPE)			LTYPE##_swap
  
  #define LINKED_LIST_DECL_SWAP(LWRAPPERTYPE, LTYPE, EXPORT)		\
    EXPORT void								\
    LTYPE##_swap (LWRAPPERTYPE *wrapper, LTYPE *node1, LTYPE *node2)
  
  #define LINKED_LIST_DEFN_SWAP(LWRAPPERTYPE, LTYPE, EXPORT)		\
  EXPORT void								\
  LTYPE##_swap (LWRAPPERTYPE *wrapper, LTYPE *node1, LTYPE *node2)	\
*************** LTYPE##_swap (LWRAPPERTYPE *wrapper, LTY
*** 276,281 ****
--- 275,308 ----
    }									\
  }
  
+ /* Swap two lists, i.e. swap two wrappers.  */
+ #define LINKED_LIST_SWAP_LISTS(LWRAPPERTYPE)	LWRAPPERTYPE##_swap_lists
+ 
+ #define LINKED_LIST_DECL_SWAP_LISTS(LWRAPPERTYPE, LTYPE, EXPORT)	\
+   EXPORT void								\
+   LWRAPPERTYPE##_swap_lists (LWRAPPERTYPE *left_w, LWRAPPERTYPE *right_w)
+ 
+ #define LINKED_LIST_DEFN_SWAP_LISTS(LWRAPPERTYPE, LTYPE, EXPORT)	\
+ EXPORT void								\
+ LWRAPPERTYPE##_swap_lists (LWRAPPERTYPE *left_w, LWRAPPERTYPE *right_w)	\
+ {									\
+   {									\
+     LTYPE *temp = left_w->first;					\
+     left_w->first = right_w->first;					\
+     right_w->first = temp;						\
+   }									\
+   {									\
+     LTYPE *temp = left_w->last;						\
+     left_w->last = right_w->last;					\
+     right_w->last = temp;						\
+   }									\
+   {									\
+     unsigned int temp = left_w->size;					\
+     left_w->size = right_w->size;					\
+     right_w->size = temp;						\
+   }									\
+ }
+ 
  /* Note: all the mutative operations below also update the data in the wrapper,
     i.e. first, last and size.  */
  #define LINKED_LIST_MUTATIVE_OPS_PROTOTYPE(LWRAPPERTYPE, LTYPE, EXPORT)	\
*************** LTYPE##_swap (LWRAPPERTYPE *wrapper, LTY
*** 285,291 ****
    LINKED_LIST_DECL_POP_FRONT(LWRAPPERTYPE, LTYPE, EXPORT);		\
    LINKED_LIST_DECL_POP_BACK(LWRAPPERTYPE, LTYPE, EXPORT);		\
    LINKED_LIST_DECL_REMOVE(LWRAPPERTYPE, LTYPE, EXPORT);			\
!   LINKED_LIST_DECL_SWAP(LWRAPPERTYPE, LTYPE, EXPORT)
  
  #define LINKED_LIST_MUTATIVE_OPS_DECL(LWRAPPERTYPE, LTYPE, EXPORT)	\
    LINKED_LIST_DEFN_APPEND(LWRAPPERTYPE, LTYPE, EXPORT)			\
--- 312,319 ----
    LINKED_LIST_DECL_POP_FRONT(LWRAPPERTYPE, LTYPE, EXPORT);		\
    LINKED_LIST_DECL_POP_BACK(LWRAPPERTYPE, LTYPE, EXPORT);		\
    LINKED_LIST_DECL_REMOVE(LWRAPPERTYPE, LTYPE, EXPORT);			\
!   LINKED_LIST_DECL_SWAP(LWRAPPERTYPE, LTYPE, EXPORT);			\
!   LINKED_LIST_DECL_SWAP_LISTS(LWRAPPERTYPE, LTYPE, EXPORT)
  
  #define LINKED_LIST_MUTATIVE_OPS_DECL(LWRAPPERTYPE, LTYPE, EXPORT)	\
    LINKED_LIST_DEFN_APPEND(LWRAPPERTYPE, LTYPE, EXPORT)			\
*************** LTYPE##_swap (LWRAPPERTYPE *wrapper, LTY
*** 294,300 ****
    LINKED_LIST_DEFN_POP_FRONT(LWRAPPERTYPE, LTYPE, EXPORT)		\
    LINKED_LIST_DEFN_POP_BACK(LWRAPPERTYPE, LTYPE, EXPORT)		\
    LINKED_LIST_DEFN_REMOVE(LWRAPPERTYPE, LTYPE, EXPORT)			\
!   LINKED_LIST_DEFN_SWAP(LWRAPPERTYPE, LTYPE, EXPORT)
  
  
  /* Sorting.  */
--- 322,329 ----
    LINKED_LIST_DEFN_POP_FRONT(LWRAPPERTYPE, LTYPE, EXPORT)		\
    LINKED_LIST_DEFN_POP_BACK(LWRAPPERTYPE, LTYPE, EXPORT)		\
    LINKED_LIST_DEFN_REMOVE(LWRAPPERTYPE, LTYPE, EXPORT)			\
!   LINKED_LIST_DEFN_SWAP(LWRAPPERTYPE, LTYPE, EXPORT);			\
!   LINKED_LIST_DEFN_SWAP_LISTS(LWRAPPERTYPE, LTYPE, EXPORT)
  
  
  /* Sorting.  */
diff -Nrcpad gcc-16-20260201/libgcc/ChangeLog gcc-16-20260208/libgcc/ChangeLog
*** gcc-16-20260201/libgcc/ChangeLog	Sun Feb  1 22:32:15 2026
--- gcc-16-20260208/libgcc/ChangeLog	Sun Feb  8 22:32:15 2026
***************
*** 1,3 ****
--- 1,9 ----
+ 2026-02-06  Torbjörn SVENSSON  <torbjorn.svensson@foss.st.com>
+ 
+ 	* config/i386/gthr-win32.h: Replace CONST_CAST2 with expanded
+ 	expression where used.
+ 	* config/pa/gthr-dce.h: Likewise.
+ 
  2026-01-24  Xin Wang  <wangxinw@hygon.cn>
  
  	* sync.c: Replace UOItype with UTItype and use mode(TI) pass 16, not
diff -Nrcpad gcc-16-20260201/libgcc/config/i386/gthr-win32.h gcc-16-20260208/libgcc/config/i386/gthr-win32.h
*** gcc-16-20260201/libgcc/config/i386/gthr-win32.h	Sun Feb  1 22:32:15 2026
--- gcc-16-20260208/libgcc/config/i386/gthr-win32.h	Sun Feb  8 22:32:15 2026
*************** see the files COPYING3 and COPYING.RUNTI
*** 86,100 ****
  # define __GTHREAD_INLINE static inline
  #endif
  
- /* Make sure CONST_CAST2 (origin in system.h) is declared.  */
- #ifndef CONST_CAST2
- #ifdef __cplusplus
- #define CONST_CAST2(TOTYPE,FROMTYPE,X) (const_cast<TOTYPE> (X))
- #else
- #define CONST_CAST2(TOTYPE,FROMTYPE,X) ((__extension__(union {FROMTYPE _q; TOTYPE _nq;})(X))._nq)
- #endif
- #endif
- 
  #ifndef ATTRIBUTE_UNUSED
  #define ATTRIBUTE_UNUSED __attribute__ ((__unused__))
  #endif
--- 86,91 ----
*************** __gthread_getspecific (__gthread_key_t _
*** 720,726 ****
  __GTHREAD_WIN32_INLINE int
  __gthread_setspecific (__gthread_key_t __key, const void *__ptr)
  {
!   if (TlsSetValue (__key, CONST_CAST2(void *, const void *, __ptr)))
      return 0;
    else
      return (int) GetLastError ();
--- 711,723 ----
  __GTHREAD_WIN32_INLINE int
  __gthread_setspecific (__gthread_key_t __key, const void *__ptr)
  {
!   if (TlsSetValue (__key,
! #ifdef __cplusplus
! 	const_cast<void *> (__ptr)
! #else
! 	(__extension__ (union {const void *_q; void *_nq;})(__ptr))._nq
! #endif
!       ))
      return 0;
    else
      return (int) GetLastError ();
diff -Nrcpad gcc-16-20260201/libgcc/config/pa/gthr-dce.h gcc-16-20260208/libgcc/config/pa/gthr-dce.h
*** gcc-16-20260201/libgcc/config/pa/gthr-dce.h	Sun Feb  1 22:32:15 2026
--- gcc-16-20260208/libgcc/config/pa/gthr-dce.h	Sun Feb  8 22:32:15 2026
*************** see the files COPYING3 and COPYING.RUNTI
*** 36,50 ****
     DCE threads are based on POSIX threads draft 4, and many things
     have changed since then.  */
  
- /* Make sure CONST_CAST2 (original in system.h) is defined.  */
- #ifndef CONST_CAST2
- #ifdef __cplusplus
- #define CONST_CAST2(TOTYPE,FROMTYPE,X) (const_cast<TOTYPE> (X))
- #else
- #define CONST_CAST2(TOTYPE,FROMTYPE,X) ((__extension__(union {FROMTYPE _q; TOTYPE _nq;})(X))._nq)
- #endif
- #endif
- 
  #define __GTHREADS 1
  
  #include <pthread.h>
--- 36,41 ----
*************** __gthread_getspecific (__gthread_key_t _
*** 470,477 ****
  static inline int
  __gthread_setspecific (__gthread_key_t __key, const void *__ptr)
  {
!   return __gthrw_(pthread_setspecific)
!     (__key, CONST_CAST2(void *, const void *, __ptr));
  }
  
  static inline void
--- 461,473 ----
  static inline int
  __gthread_setspecific (__gthread_key_t __key, const void *__ptr)
  {
!   return __gthrw_(pthread_setspecific) (__key,
! #ifdef __cplusplus
!       const_cast<void *> (__ptr)
! #else
!       (__extension__ (union {const void *_q; void *_nq;})(__ptr))._nq
! #endif
!     );
  }
  
  static inline void
diff -Nrcpad gcc-16-20260201/libgcobol/ChangeLog gcc-16-20260208/libgcobol/ChangeLog
*** gcc-16-20260201/libgcobol/ChangeLog	Sun Feb  1 22:32:15 2026
--- gcc-16-20260208/libgcobol/ChangeLog	Sun Feb  8 22:32:15 2026
***************
*** 1,3 ****
--- 1,7 ----
+ 2026-02-05  Robert Dubner  <rdubner@symas.com>
+ 
+ 	* valconv.cc (__gg__string_to_numeric_edited): Explanatory comment.
+ 
  2026-01-17  Robert Dubner  <rdubner@symas.com>
  	    James K. Lowden  <jklowden@cobolworx.com>
  
diff -Nrcpad gcc-16-20260201/libgcobol/valconv.cc gcc-16-20260208/libgcobol/valconv.cc
*** gcc-16-20260201/libgcobol/valconv.cc	Sun Feb  1 22:32:16 2026
--- gcc-16-20260208/libgcobol/valconv.cc	Sun Feb  8 22:32:15 2026
*************** __gg__string_to_numeric_edited( char * c
*** 231,240 ****
  
    int dlength = expand_picture(dest, picture);
  
!   // At the present time, I am taking a liberty. In principle, a 'V'
!   // character is supposed to be logical decimal place rather than a physical
!   // one.  In practice, I am not sure what that would mean in a numeric edited
!   // value.  So, I am treating V as a decimal point.
  
    for(int i=0; i<dlength; i++)
      {
--- 231,240 ----
  
    int dlength = expand_picture(dest, picture);
  
!   // We need to treat 'V' as a decimal point in order to handle
!   //    01 foo pic 999v999 BLANK WHEN ZERO.
!   // The "BLANK WHEN ZERO" turns the field into a numeric-edited type, but the
!   // 'V' is still in the picture string.
  
    for(int i=0; i<dlength; i++)
      {
diff -Nrcpad gcc-16-20260201/libgomp/ChangeLog gcc-16-20260208/libgomp/ChangeLog
*** gcc-16-20260201/libgomp/ChangeLog	Sun Feb  1 22:32:16 2026
--- gcc-16-20260208/libgomp/ChangeLog	Sun Feb  8 22:32:16 2026
***************
*** 1,3 ****
--- 1,56 ----
+ 2026-02-05  Andrew Stubbs  <ams@baylibre.com>
+ 
+ 	* libgomp.texi: Mark TR14 omp_target_is_accessible status as "Y".
+ 
+ 2026-02-05  Andrew Stubbs  <ams@baylibre.com>
+ 
+ 	* libgomp.texi: Separate the ompx_gnu_pinned_mem_alloc notes for
+ 	NVPTX and AMD GCN, and move them to right sections.
+ 
+ 2026-02-04  Paul-Antoine Arras  <parras@baylibre.com>
+ 
+ 	* target.c (gomp_present_fatal): New function.
+ 	(gomp_map_vars_internal): For a Fortran allocatable array, present
+ 	causes runtime termination only if the descriptor is not mapped.
+ 	(gomp_update): Call gomp_present_fatal.
+ 	* testsuite/libgomp.fortran/map-alloc-present-1.f90: New test.
+ 
+ 2026-02-04  Jeff Law  <jeffrey.law@oss.qualcomm.com>
+ 
+ 	* J: Remove.
+ 
+ 2026-02-04  Yangyu Chen  <cyy@cyyself.name>
+ 
+ 	* J: New file.
+ 
+ 2026-02-03  Andrew Stubbs  <ams@baylibre.com>
+ 
+ 	PR libgomp/121813
+ 	PR libgomp/113213
+ 	* libgomp-plugin.h (GOMP_OFFLOAD_is_accessible_ptr): New prototype.
+ 	* libgomp.h
+ 	(struct gomp_device_descr): Add GOMP_OFFLOAD_is_accessible_ptr.
+ 	* libgomp.texi: Update omp_target_is_accessible docs.
+ 	* plugin/cuda-lib.def (cuPointerGetAttribute): New entry.
+ 	* plugin/plugin-gcn.c (struct hsa_runtime_fn_info): Add
+ 	hsa_amd_svm_attributes_get_fn and hsa_amd_pointer_info_fn.
+ 	(init_hsa_runtime_functions): Add hsa_amd_svm_attributes_get and
+ 	hsa_amd_pointer_info.
+ 	(enum accessible): New enum type.
+ 	(host_memory_is_accessible): New function.
+ 	(device_memory_is_accessible): New function.
+ 	(GOMP_OFFLOAD_is_accessible_ptr): New function.
+ 	* plugin/plugin-nvptx.c (GOMP_OFFLOAD_is_accessible_ptr): Likewise.
+ 	* target.c (omp_target_is_accessible): Call is_accessible_ptr_func.
+ 	(gomp_load_plugin_for_device): Add is_accessible_ptr.
+ 	* testsuite/libgomp.c-c++-common/target-is-accessible-1.c: Rework
+ 	to match more details of the GPU implementation.
+ 	* testsuite/libgomp.fortran/target-is-accessible-1.f90: Likewise.
+ 	* testsuite/libgomp.c-c++-common/target-is-accessible-2.c: New test.
+ 	* testsuite/libgomp.c-c++-common/target-is-accessible-3.c: New test.
+ 	* testsuite/libgomp.c-c++-common/target-is-accessible-4.c: New test.
+ 	* testsuite/libgomp.c-c++-common/target-is-accessible-5.c: New test.
+ 
  2026-01-20  Matthew Malcolmson  <mmalcolmson@nvidia.com>
  
  	PR libgomp/122356
diff -Nrcpad gcc-16-20260201/libgomp/libgomp-plugin.h gcc-16-20260208/libgomp/libgomp-plugin.h
*** gcc-16-20260201/libgomp/libgomp-plugin.h	Sun Feb  1 22:32:16 2026
--- gcc-16-20260208/libgomp/libgomp-plugin.h	Sun Feb  8 22:32:16 2026
*************** extern void *GOMP_OFFLOAD_alloc (int, si
*** 173,178 ****
--- 173,179 ----
  extern bool GOMP_OFFLOAD_free (int, void *);
  extern void *GOMP_OFFLOAD_managed_alloc (int, size_t);
  extern bool GOMP_OFFLOAD_managed_free (int, void *);
+ extern int GOMP_OFFLOAD_is_accessible_ptr (int, const void *, size_t);
  extern bool GOMP_OFFLOAD_page_locked_host_alloc (void **, size_t);
  extern bool GOMP_OFFLOAD_page_locked_host_free (void *);
  extern bool GOMP_OFFLOAD_dev2host (int, void *, const void *, size_t);
diff -Nrcpad gcc-16-20260201/libgomp/libgomp.h gcc-16-20260208/libgomp/libgomp.h
*** gcc-16-20260201/libgomp/libgomp.h	Sun Feb  1 22:32:16 2026
--- gcc-16-20260208/libgomp/libgomp.h	Sun Feb  8 22:32:16 2026
*************** struct gomp_device_descr
*** 1425,1430 ****
--- 1425,1431 ----
    __typeof (GOMP_OFFLOAD_free) *free_func;
    __typeof (GOMP_OFFLOAD_managed_alloc) *managed_alloc_func;
    __typeof (GOMP_OFFLOAD_managed_free) *managed_free_func;
+   __typeof (GOMP_OFFLOAD_is_accessible_ptr) *is_accessible_ptr_func;
    __typeof (GOMP_OFFLOAD_page_locked_host_alloc) *page_locked_host_alloc_func;
    __typeof (GOMP_OFFLOAD_page_locked_host_free) *page_locked_host_free_func;
    __typeof (GOMP_OFFLOAD_dev2host) *dev2host_func;
diff -Nrcpad gcc-16-20260201/libgomp/libgomp.texi gcc-16-20260208/libgomp/libgomp.texi
*** gcc-16-20260201/libgomp/libgomp.texi	Sun Feb  1 22:32:16 2026
--- gcc-16-20260208/libgomp/libgomp.texi	Sun Feb  8 22:32:16 2026
*************** Technical Report (TR) 14 is the first pr
*** 672,678 ****
  @item New @code{omp_default_device} identifier as conforming device number
        @tab Y @tab
  @item Clarify when @code{omp_target_is_accessible} routine returns zero
!       @tab N @tab
  @end multitable
  
  @unnumberedsubsec Deprecated features, unless listed above
--- 672,678 ----
  @item New @code{omp_default_device} identifier as conforming device number
        @tab Y @tab
  @item Clarify when @code{omp_target_is_accessible} routine returns zero
!       @tab Y @tab
  @end multitable
  
  @unnumberedsubsec Deprecated features, unless listed above
*************** and extending @var{size} bytes, is acces
*** 2172,2184 ****
  @var{device_num}.  If so, it returns a nonzero value and otherwise zero.
  
  The address given by @var{ptr} is interpreted to be in the address space of
! the device and @var{size} must be positive.
  
  Note that GCC's current implementation assumes that @var{ptr} is a valid host
! pointer. Therefore, all addresses given by @var{ptr} are assumed to be
! accessible on the initial device. And, to err on the safe side, this memory
! is only available on a non-host device that can access all host memory
! ([uniform] shared memory access).
  
  Running this routine in a @code{target} region except on the initial device
  is not supported.
--- 2172,2188 ----
  @var{device_num}.  If so, it returns a nonzero value and otherwise zero.
  
  The address given by @var{ptr} is interpreted to be in the address space of
! the device and @var{size} must be positive.  NULL pointers and zero-length
! ranges always return zero.
  
  Note that GCC's current implementation assumes that @var{ptr} is a valid host
! pointer. Therefore, all non-NULL addresses given by @var{ptr} are assumed to be
! accessible on the initial device.  The address is only reported as accessible
! on non-host devices if this is @emph{known} to be the case, or if the device
! reports that all memory is accessible (i.e. [unified] shared memory access).
! If the runtime is uncertain it may report accessible memory as inaccessible.
! For a memory range to be reported accessible, the whole range must be known to
! be accessible.
  
  Running this routine in a @code{target} region except on the initial device
  is not supported.
*************** The implementation remark:
*** 7183,7192 ****
        pool is exhausted.
  @item Pinned memory allocated using @code{omp_alloc} with the
        @code{ompx_gnu_pinned_mem_alloc} allocator or the @code{pinned} trait is
!       obtained via the CUDA API when an NVPTX device is present.  This provides
!       a performance boost for NVPTX offload code and also allows unlimited use
!       of pinned memory regardless of the OS @code{ulimit}/@code{rlimit}
!       settings.
  @item Managed memory allocated on the host with the
        @code{ompx_gnu_managed_mem_alloc} allocator or in the
        @code{ompx_gnu_managed_mem_space} (both GNU extensions) allocate memory
--- 7187,7195 ----
        pool is exhausted.
  @item Pinned memory allocated using @code{omp_alloc} with the
        @code{ompx_gnu_pinned_mem_alloc} allocator or the @code{pinned} trait is
!       obtained via the CUDA API when an NVPTX device is present (even when
!       the primary device is AMD).  This allows unlimited use of pinned memory
!       regardless of the OS @code{ulimit}/@code{rlimit} settings.
  @item Managed memory allocated on the host with the
        @code{ompx_gnu_managed_mem_alloc} allocator or in the
        @code{ompx_gnu_managed_mem_space} (both GNU extensions) allocate memory
*************** The implementation remark:
*** 7383,7388 ****
--- 7386,7397 ----
        use the fall-back setting. If the default device is configured
        differently when the memory is freed, via @code{omp_free} or
        @code{omp_realloc}, the result may be undefined.
+ @item Pinned memory allocated using @code{omp_alloc} with the
+       @code{ompx_gnu_pinned_mem_alloc} allocator or the @code{pinned} trait is
+       obtained via the CUDA API when an NVPTX device is present.  This provides
+       a performance boost for NVPTX offload code and also allows unlimited use
+       of pinned memory regardless of the OS @code{ulimit}/@code{rlimit}
+       settings.
  @item The OpenMP routines @code{omp_target_memcpy_rect} and
        @code{omp_target_memcpy_rect_async} and the @code{target update}
        directive for non-contiguous list items use the 2D and 3D memory-copy
diff -Nrcpad gcc-16-20260201/libgomp/plugin/cuda-lib.def gcc-16-20260208/libgomp/plugin/cuda-lib.def
*** gcc-16-20260201/libgomp/plugin/cuda-lib.def	Sun Feb  1 22:32:16 2026
--- gcc-16-20260208/libgomp/plugin/cuda-lib.def	Sun Feb  8 22:32:16 2026
*************** CUDA_ONE_CALL (cuModuleLoad)
*** 55,60 ****
--- 55,61 ----
  CUDA_ONE_CALL (cuModuleLoadData)
  CUDA_ONE_CALL (cuModuleUnload)
  CUDA_ONE_CALL_MAYBE_NULL (cuOccupancyMaxPotentialBlockSize)
+ CUDA_ONE_CALL (cuPointerGetAttribute)
  CUDA_ONE_CALL (cuStreamAddCallback)
  CUDA_ONE_CALL (cuStreamCreate)
  CUDA_ONE_CALL (cuStreamDestroy)
diff -Nrcpad gcc-16-20260201/libgomp/plugin/plugin-gcn.c gcc-16-20260208/libgomp/plugin/plugin-gcn.c
*** gcc-16-20260201/libgomp/plugin/plugin-gcn.c	Sun Feb  1 22:32:16 2026
--- gcc-16-20260208/libgomp/plugin/plugin-gcn.c	Sun Feb  8 22:32:16 2026
*************** struct hsa_runtime_fn_info
*** 233,238 ****
--- 233,244 ----
    hsa_status_t (*hsa_amd_svm_attributes_set_fn)
      (void* ptr, size_t size, hsa_amd_svm_attribute_pair_t* attribute_list,
       size_t attribute_count);
+   hsa_status_t (*hsa_amd_svm_attributes_get_fn)
+     (void* ptr, size_t size, hsa_amd_svm_attribute_pair_t* attribute_list,
+      size_t attribute_count);
+   hsa_status_t (*hsa_amd_pointer_info_fn)
+     (const void *, hsa_amd_pointer_info_t *, void *(*)(size_t),
+      uint32_t *, hsa_agent_t **); 
  };
  
  /* As an HIP runtime is dlopened, following structure defines function
*************** init_hsa_runtime_functions (void)
*** 1494,1499 ****
--- 1500,1507 ----
    DLSYM_OPT_FN (hsa_amd_memory_unlock)
    DLSYM_OPT_FN (hsa_amd_memory_async_copy_rect)
    DLSYM_OPT_FN (hsa_amd_svm_attributes_set)
+   DLSYM_OPT_FN (hsa_amd_svm_attributes_get)
+   DLSYM_OPT_FN (hsa_amd_pointer_info)
    return true;
  #undef DLSYM_OPT_FN
  #undef DLSYM_FN
*************** GOMP_OFFLOAD_managed_free (int device, v
*** 5258,5263 ****
--- 5266,5374 ----
    return true;
  }
  
+ enum accessible {
+   UNKNOWN,
+   INACCESSIBLE,
+   ACCESSIBLE
+ };
+ 
+ /* Is a host memory address accessible on the given device?
+    Returns UNKNOWN if the memory isn't registered, or if it isn't a valid host
+    pointer.  */
+ 
+ static enum accessible
+ host_memory_is_accessible (hsa_agent_t agent, const void *ptr, size_t size)
+ {
+   if (!hsa_fns.hsa_amd_svm_attributes_get_fn)
+     return UNKNOWN;
+ 
+   /* The HSA API doesn't seem to report for the whole range given, so we call
+      once for each page the range straddles.  */
+   const void *p = ptr;
+   size_t remaining = size;
+   do
+     {
+       /* Note: the access query returns in the attribute field.  */
+       struct hsa_amd_svm_attribute_pair_s attr = {
+ 	HSA_AMD_SVM_ATTRIB_ACCESS_QUERY, agent.handle
+       };
+       hsa_status_t status = hsa_fns.hsa_amd_svm_attributes_get_fn ((void*)p,
+ 								   remaining,
+ 								   &attr, 1);
+       if (status != HSA_STATUS_SUCCESS)
+ 	/* This happens when the memory isn't registered with ROCr at all.  */
+ 	return UNKNOWN;
+ 
+       switch (attr.attribute)
+ 	{
+ 	case HSA_AMD_SVM_ATTRIB_AGENT_ACCESSIBLE:
+ 	case HSA_AMD_SVM_ATTRIB_AGENT_ACCESSIBLE_IN_PLACE:
+ 	  break;
+ 	case HSA_AMD_SVM_ATTRIB_AGENT_NO_ACCESS:
+ 	default:
+ 	  return INACCESSIBLE;
+ 	}
+ 
+       p = (void*)(((uintptr_t)p + 4096) & ~0xfffUL);
+       remaining = size - ((uintptr_t)p - (uintptr_t)ptr);
+     } while (p < ptr + size);
+ 
+   /* All pages were accessible.  */
+   return ACCESSIBLE;
+ }
+ 
+ /* Is a device memory address accessible on the given device?
+    Returns UNKNOWN if it isn't a valid device address.  Returns INACCESSIBLE if
+    the pointer is valid, but not the whole range, or if it refers to the wrong
+    device.  */
+ 
+ static enum accessible
+ device_memory_is_accessible (hsa_agent_t agent, const void *ptr, size_t size)
+ {
+   if (!hsa_fns.hsa_amd_pointer_info_fn)
+     return UNKNOWN;
+ 
+   hsa_amd_pointer_info_t info;
+   uint32_t nagents;
+   hsa_agent_t *agents;
+   info.size = sizeof (hsa_amd_pointer_info_t);
+ 
+   hsa_status_t status = hsa_fns.hsa_amd_pointer_info_fn (ptr, &info, NULL,
+ 							 &nagents, &agents); 
+   if (status != HSA_STATUS_SUCCESS
+       || info.type == HSA_EXT_POINTER_TYPE_UNKNOWN)
+     return UNKNOWN;
+ 
+   if (agent.handle == info.agentOwner.handle)
+     return (info.sizeInBytes >= size ? ACCESSIBLE : INACCESSIBLE);
+ 
+   for (unsigned i = 0; i < nagents; i++)
+     {
+       if (agent.handle == agents[0].handle)
+ 	return (info.sizeInBytes >= size ? ACCESSIBLE : INACCESSIBLE); 
+     }
+ 
+   return INACCESSIBLE;
+ }
+ 
+ /* Backend implementation for omp_target_is_accessible.  */
+ 
+ int
+ GOMP_OFFLOAD_is_accessible_ptr (int device, const void *ptr, size_t size)
+ {
+   if (!init_hsa_context (false)
+       || device < 0 || device > hsa_context.agent_count)
+     return 0;
+ 
+   struct agent_info *agent = get_agent_info (device);
+ 
+   enum accessible result;
+   result = host_memory_is_accessible (agent->id, ptr, size);
+   if (result == UNKNOWN)
+     result = device_memory_is_accessible (agent->id, ptr, size);
+   return result == ACCESSIBLE;
+ }
+ 
  /* }}} */
  /* {{{ OpenACC Plugin API  */
  
diff -Nrcpad gcc-16-20260201/libgomp/plugin/plugin-nvptx.c gcc-16-20260208/libgomp/plugin/plugin-nvptx.c
*** gcc-16-20260201/libgomp/plugin/plugin-nvptx.c	Sun Feb  1 22:32:16 2026
--- gcc-16-20260208/libgomp/plugin/plugin-nvptx.c	Sun Feb  8 22:32:16 2026
*************** struct ptx_device
*** 353,358 ****
--- 353,360 ----
  
  static struct ptx_device **ptx_devices;
  
+ static bool using_usm = false;
+ 
  /* "Native" GPU thread stack size.  */
  static unsigned native_gpu_thread_stack_size = 0;
  
*************** GOMP_OFFLOAD_get_num_devices (unsigned i
*** 1343,1357 ****
    if (num_devices > 0
        && (omp_requires_mask
  	  & (GOMP_REQUIRES_UNIFIED_SHARED_MEMORY | GOMP_REQUIRES_SELF_MAPS)))
!     for (int dev = 0; dev < num_devices; dev++)
!       {
! 	int pi;
! 	CUresult r;
! 	r = CUDA_CALL_NOCHECK (cuDeviceGetAttribute, &pi,
! 			       CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS, dev);
! 	if (r != CUDA_SUCCESS || pi == 0)
! 	  return -1;
!       }
    return num_devices;
  }
  
--- 1345,1364 ----
    if (num_devices > 0
        && (omp_requires_mask
  	  & (GOMP_REQUIRES_UNIFIED_SHARED_MEMORY | GOMP_REQUIRES_SELF_MAPS)))
!     {
!       for (int dev = 0; dev < num_devices; dev++)
! 	{
! 	  int pi;
! 	  CUresult r;
! 	  r = CUDA_CALL_NOCHECK (cuDeviceGetAttribute, &pi,
! 				 CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS,
! 				 dev);
! 	  if (r != CUDA_SUCCESS || pi == 0)
! 	    return -1;
! 	}
! 
!       using_usm = true;
!     }
    return num_devices;
  }
  
*************** GOMP_OFFLOAD_managed_free (int ord, void
*** 1906,1911 ****
--- 1913,1962 ----
    return GOMP_OFFLOAD_free (ord, ptr);
  }
  
+ int
+ GOMP_OFFLOAD_is_accessible_ptr (int ord,
+ 				const void *ptr, size_t size)
+ {
+   /* USM implies access.  */
+   if (using_usm)
+     return 1;
+ 
+   struct ptx_device *ptx_dev = ptx_devices[ord];
+   CUcontext old_ctx;
+   CUDA_CALL_ERET (false, cuCtxPushCurrent, ptx_dev->ctx);
+ 
+   /* The Cuda API does not permit testing a whole range, so we test each
+      4K page within the range.  If any page is inaccessible return false.  */
+   const void *p = ptr;
+   int result = 1;  /* All pages accessible.  */
+   do
+     {
+       CUmemorytype mem_type;
+       CUresult res = CUDA_CALL_NOCHECK (cuPointerGetAttribute, &mem_type,
+ 					CU_POINTER_ATTRIBUTE_MEMORY_TYPE,
+ 					(CUdeviceptr)p);
+       if (res != CUDA_SUCCESS)
+ 	/* Memory is not registered, and therefore not accessible.  */
+ 	result = 0;
+ 
+       switch (mem_type)
+ 	{
+ 	case CU_MEMORYTYPE_HOST:
+ 	case CU_MEMORYTYPE_UNIFIED:
+ 	case CU_MEMORYTYPE_DEVICE:
+ 	  break;
+ 	case CU_MEMORYTYPE_ARRAY:
+ 	default:
+ 	  result = 0;  /* This page isn't accessible.  */
+ 	}
+ 
+       p = (void*)(((uintptr_t)p + 4096) & ~0xfffUL);
+     } while (result && p < ptr + size);
+ 
+   CUDA_CALL_ASSERT (cuCtxPopCurrent, &old_ctx);
+   return result;
+ }
+ 
  bool
  GOMP_OFFLOAD_page_locked_host_alloc (void **ptr, size_t size)
  {
diff -Nrcpad gcc-16-20260201/libgomp/target.c gcc-16-20260208/libgomp/target.c
*** gcc-16-20260201/libgomp/target.c	Sun Feb  1 22:32:16 2026
--- gcc-16-20260208/libgomp/target.c	Sun Feb  8 22:32:16 2026
*************** gomp_merge_iterator_maps (size_t *mapnum
*** 1156,1161 ****
--- 1156,1178 ----
    return true;
  }
  
+ static void
+ gomp_present_fatal (void *addr, size_t size, struct gomp_device_descr *devicep)
+ {
+   gomp_mutex_unlock (&devicep->lock);
+ #ifdef HAVE_INTTYPES_H
+   gomp_fatal ("present clause: not present on the device "
+ 	      "(addr: %p, size: %" PRIu64 " (0x%" PRIx64 "), "
+ 	      "dev: %d)",
+ 	      addr, (uint64_t) size, (uint64_t) size, devicep->target_id);
+ #else
+   gomp_fatal ("present clause: not present on the device "
+ 	      "(addr: %p, size: %lu (0x%lx), dev: %d)",
+ 	      addr, (unsigned long) size, (unsigned long) size,
+ 	      devicep->target_id);
+ #endif
+ }
+ 
  static inline __attribute__((always_inline)) struct target_mem_desc *
  gomp_map_vars_internal (struct gomp_device_descr *devicep,
  			struct goacc_asyncqueue *aq, size_t mapnum,
*************** gomp_map_vars_internal (struct gomp_devi
*** 1529,1534 ****
--- 1546,1552 ----
        size_t j, field_tgt_offset = 0, field_tgt_clear = FIELD_TGT_EMPTY;
        uintptr_t field_tgt_base = 0;
        splay_tree_key field_tgt_structelem_first = NULL;
+       bool ref_ptee_not_present = false;
  
        for (i = 0; i < mapnum; i++)
  	if (has_always_ptrset
*************** gomp_map_vars_internal (struct gomp_devi
*** 1936,1941 ****
--- 1954,1960 ----
  		  case GOMP_MAP_FORCE_TOFROM:
  		  case GOMP_MAP_ALWAYS_TO:
  		  case GOMP_MAP_ALWAYS_TOFROM:
+ 		  map_to:
  		    gomp_copy_host2dev (devicep, aq,
  					(void *) (tgt->tgt_start
  						  + k->tgt_offset),
*************** gomp_map_vars_internal (struct gomp_devi
*** 1952,1957 ****
--- 1971,1979 ----
  			== GOMP_MAP_POINTER_TO_ZERO_LENGTH_ARRAY_SECTION));
  		    break;
  		  case GOMP_MAP_TO_PSET:
+ 		    if (ref_ptee_not_present)
+ 		      gomp_present_fatal ((void *) k->host_start,
+ 					  k->host_end - k->host_start, devicep);
  		    gomp_copy_host2dev (devicep, aq,
  					(void *) (tgt->tgt_start
  						  + k->tgt_offset),
*************** gomp_map_vars_internal (struct gomp_devi
*** 2001,2023 ****
  		  case GOMP_MAP_ALWAYS_PRESENT_FROM:
  		  case GOMP_MAP_ALWAYS_PRESENT_TOFROM:
  		    {
  		      /* We already looked up the memory region above and it
  			 was missing.  */
! 		      size_t size = k->host_end - k->host_start;
! 		      gomp_mutex_unlock (&devicep->lock);
! #ifdef HAVE_INTTYPES_H
! 		      gomp_fatal ("present clause: not present on the device "
! 				  "(addr: %p, size: %"PRIu64" (0x%"PRIx64"), "
! 				  "dev: %d)", (void *) k->host_start,
! 				  (uint64_t) size, (uint64_t) size,
! 				  devicep->target_id);
! #else
! 		      gomp_fatal ("present clause: not present on the device "
! 				  "(addr: %p, size: %lu (0x%lx), dev: %d)",
! 				  (void *) k->host_start,
! 				  (unsigned long) size, (unsigned long) size,
! 				  devicep->target_id);
! #endif
  		    }
  		    break;
  		  case GOMP_MAP_FORCE_DEVICEPTR:
--- 2023,2039 ----
  		  case GOMP_MAP_ALWAYS_PRESENT_FROM:
  		  case GOMP_MAP_ALWAYS_PRESENT_TOFROM:
  		    {
+ 		      if (i + 1 < mapnum
+ 			  && (get_kind (short_mapkind, kinds, i + 1) & typemask)
+ 			       == GOMP_MAP_TO_PSET)
+ 			{
+ 			  ref_ptee_not_present = true;
+ 			  goto map_to;
+ 			}
  		      /* We already looked up the memory region above and it
  			 was missing.  */
! 		      gomp_present_fatal ((void *) k->host_start,
! 					  k->host_end - k->host_start, devicep);
  		    }
  		    break;
  		  case GOMP_MAP_FORCE_DEVICEPTR:
*************** gomp_update (struct gomp_device_descr *d
*** 2465,2483 ****
  	      {
  		/* We already looked up the memory region above and it
  		   was missing.  */
! 		gomp_mutex_unlock (&devicep->lock);
! #ifdef HAVE_INTTYPES_H
! 		gomp_fatal ("present clause: not present on the device "
! 			    "(addr: %p, size: %"PRIu64" (0x%"PRIx64"), "
! 			    "dev: %d)", (void *) hostaddrs[i],
! 			    (uint64_t) sizes[i], (uint64_t) sizes[i],
! 			    devicep->target_id);
! #else
! 		gomp_fatal ("present clause: not present on the device "
! 			    "(addr: %p, size: %lu (0x%lx), dev: %d)",
! 			    (void *) hostaddrs[i], (unsigned long) sizes[i],
! 			    (unsigned long) sizes[i], devicep->target_id);
! #endif
  	      }
  	  }
        }
--- 2481,2487 ----
  	      {
  		/* We already looked up the memory region above and it
  		   was missing.  */
! 		gomp_present_fatal (hostaddrs[i], sizes[i], devicep);
  	      }
  	  }
        }
*************** omp_get_mapped_ptr (const void *ptr, int
*** 5590,5595 ****
--- 5594,5602 ----
  int
  omp_target_is_accessible (const void *ptr, size_t size, int device_num)
  {
+   if (ptr == NULL || size == 0)
+     return false;
+ 
    if (device_num == omp_default_device)
      device_num = gomp_get_default_device ();
  
*************** omp_target_is_accessible (const void *pt
*** 5601,5609 ****
    if (devicep == NULL)
      return false;
  
!   /* TODO: Unified shared memory must be handled when available.  */
  
!   return devicep->capabilities & GOMP_OFFLOAD_CAP_SHARED_MEM;
  }
  
  int
--- 5608,5626 ----
    if (devicep == NULL)
      return false;
  
!   /* Managed memory (or other device feature).
!      is_accessible_ptr may, in future, report more than simply true or false,
!      but we can assume that positive responses are accessible, and
!      zero/negative responses are inaccessible.  */
!   if (devicep->is_accessible_ptr_func)
!     return (devicep->is_accessible_ptr_func (devicep->target_id, ptr, size)
! 	    > 0);
  
!   /* Unified shared memory (or true shared memory).  */
!   if (devicep->capabilities & GOMP_OFFLOAD_CAP_SHARED_MEM)
!     return true;
! 
!   return false;
  }
  
  int
*************** gomp_load_plugin_for_device (struct gomp
*** 6009,6014 ****
--- 6026,6032 ----
    DLSYM (free);
    DLSYM_OPT (managed_alloc, managed_alloc);
    DLSYM_OPT (managed_free, managed_free);
+   DLSYM_OPT (is_accessible_ptr, is_accessible_ptr);
    DLSYM_OPT (page_locked_host_alloc, page_locked_host_alloc);
    DLSYM_OPT (page_locked_host_free, page_locked_host_free);
    DLSYM (dev2host);
diff -Nrcpad gcc-16-20260201/libgomp/testsuite/libgomp.c-c++-common/target-is-accessible-1.c gcc-16-20260208/libgomp/testsuite/libgomp.c-c++-common/target-is-accessible-1.c
*** gcc-16-20260201/libgomp/testsuite/libgomp.c-c++-common/target-is-accessible-1.c	Sun Feb  1 22:32:16 2026
--- gcc-16-20260208/libgomp/testsuite/libgomp.c-c++-common/target-is-accessible-1.c	Sun Feb  8 22:32:16 2026
***************
*** 1,4 ****
--- 1,8 ----
  #include <omp.h>
+ #include <stdint.h>
+ #include <stdlib.h>
+ 
+ //#define __builtin_abort() __builtin_printf ("fail at line %d\n", __LINE__)
  
  int
  main ()
*************** main ()
*** 6,12 ****
    int d = omp_get_default_device ();
    int id = omp_get_initial_device ();
    int n = omp_get_num_devices ();
!   void *p;
  
    if (d < 0 || d >= n)
      d = id;
--- 10,16 ----
    int d = omp_get_default_device ();
    int id = omp_get_initial_device ();
    int n = omp_get_num_devices ();
!   int *p = (int*)malloc (sizeof (int));
  
    if (d < 0 || d >= n)
      d = id;
*************** main ()
*** 26,49 ****
    if (omp_target_is_accessible (p, sizeof (int), n + 1))
      __builtin_abort ();
  
-   /* Currently, a host pointer is accessible if the device supports shared
-      memory or omp_target_is_accessible is executed on the host. This
-      test case must be adapted when unified shared memory is avialable.  */
    int a[128];
    for (int d = 0; d <= omp_get_num_devices (); d++)
      {
        int shared_mem = 0;
        #pragma omp target map (alloc: shared_mem) device (d)
  	shared_mem = 1;
        if (omp_target_is_accessible (p, sizeof (int), d) != shared_mem)
! 	__builtin_abort ();
  
        if (omp_target_is_accessible (a, 128 * sizeof (int), d) != shared_mem)
! 	__builtin_abort ();
  
        for (int i = 0; i < 128; i++)
! 	if (omp_target_is_accessible (&a[i], sizeof (int), d) != shared_mem)
! 	  __builtin_abort ();
      }
  
    return 0;
--- 30,110 ----
    if (omp_target_is_accessible (p, sizeof (int), n + 1))
      __builtin_abort ();
  
    int a[128];
    for (int d = 0; d <= omp_get_num_devices (); d++)
      {
+       if (omp_target_is_accessible (NULL, 1, d))
+ 	__builtin_abort ();
+ 
+       if (omp_target_is_accessible (p, 0, d))
+ 	__builtin_abort ();
+ 
+       /* Check if libgomp is treating the device as a shared memory device.  */
        int shared_mem = 0;
        #pragma omp target map (alloc: shared_mem) device (d)
  	shared_mem = 1;
+ 
+       int heap_accessible = shared_mem;
        if (omp_target_is_accessible (p, sizeof (int), d) != shared_mem)
! 	{
! 	  if (shared_mem)
! 	    __builtin_abort ();
! 
! 	  /* shared_mem is false, but the memory is reading as accessible,
! 	     so let's check that by reading it.  We should not do so
! 	     unconditionally because if it's wrong then we'll probably get
! 	     a memory fault.  */
! 	  *p = 123;
! 	  uintptr_t addr = (uintptr_t)p;
  
+ 	  #pragma omp target is_device_ptr(p) map(from:heap_accessible) \
+ 			     device(d)
+ 	    {
+ 	      if ((uintptr_t)p == addr && *p == 123)
+ 		heap_accessible = 1;
+ 	    }
+ 
+ 	  if (!heap_accessible)
+ 	    __builtin_abort ();
+ 	}
+ 
+       int stack_accessible = shared_mem;
        if (omp_target_is_accessible (a, 128 * sizeof (int), d) != shared_mem)
! 	{
! 	  if (shared_mem)
! 	    __builtin_abort ();
! 
! 	  /* shared_mem is false, but the memory is reading as accessible,
! 	     so let's check that by reading it.  We should not do so
! 	     unconditionally because if it's wrong then we'll probably get
! 	     a memory fault.  */
! 	  int test_accessible = 123;
! 	  uintptr_t addr = (uintptr_t)&test_accessible;
! 
! 	  #pragma omp target has_device_addr(test_accessible) \
! 	                     map(from:stack_accessible) device(d)
! 	    {
! 	      if ((uintptr_t)&test_accessible == addr
! 		  && test_accessible == 123)
! 		stack_accessible = 1;
! 	    }
! 
! 	  if (!stack_accessible)
! 	    __builtin_abort ();
! 	}
!       __builtin_printf ("device #%d: shared_mem=%d heap_accessible=%d "
! 			"stack_accessible=%d\n",
! 			d, shared_mem, heap_accessible, stack_accessible);
  
+       /* omp_target_is_accessible returns false if *any* of the array is
+ 	 inaccessible, so we only check the aggregate result.
+ 	 (Varying access observed on amdgcn without xnack.)  */
+       bool accessible = true;
        for (int i = 0; i < 128; i++)
! 	if (!omp_target_is_accessible (&a[i], sizeof (int), d))
! 	  accessible = false;
!       if (accessible != (shared_mem || stack_accessible))
! 	__builtin_abort ();
      }
  
    return 0;
diff -Nrcpad gcc-16-20260201/libgomp/testsuite/libgomp.c-c++-common/target-is-accessible-2.c gcc-16-20260208/libgomp/testsuite/libgomp.c-c++-common/target-is-accessible-2.c
*** gcc-16-20260201/libgomp/testsuite/libgomp.c-c++-common/target-is-accessible-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/libgomp/testsuite/libgomp.c-c++-common/target-is-accessible-2.c	Sun Feb  8 22:32:16 2026
***************
*** 0 ****
--- 1,5 ----
+ /* { dg-require-effective-target omp_usm } */
+ 
+ #pragma omp requires unified_shared_memory
+ 
+ #include "target-is-accessible-1.c"
diff -Nrcpad gcc-16-20260201/libgomp/testsuite/libgomp.c-c++-common/target-is-accessible-3.c gcc-16-20260208/libgomp/testsuite/libgomp.c-c++-common/target-is-accessible-3.c
*** gcc-16-20260201/libgomp/testsuite/libgomp.c-c++-common/target-is-accessible-3.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/libgomp/testsuite/libgomp.c-c++-common/target-is-accessible-3.c	Sun Feb  8 22:32:16 2026
***************
*** 0 ****
--- 1,4 ----
+ /* { dg-require-effective-target offload_target_amdgcn_with_xnack } */
+ /* { dg-additional-options "-foffload-options=amdgcn-amdhsa=-mxnack=on" } */
+ 
+ #include "target-is-accessible-1.c"
diff -Nrcpad gcc-16-20260201/libgomp/testsuite/libgomp.c-c++-common/target-is-accessible-4.c gcc-16-20260208/libgomp/testsuite/libgomp.c-c++-common/target-is-accessible-4.c
*** gcc-16-20260201/libgomp/testsuite/libgomp.c-c++-common/target-is-accessible-4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/libgomp/testsuite/libgomp.c-c++-common/target-is-accessible-4.c	Sun Feb  8 22:32:16 2026
***************
*** 0 ****
--- 1,28 ----
+ /* { dg-require-effective-target omp_managedmem } */
+ 
+ #include <omp.h>
+ #include <stdint.h>
+ #include <stdlib.h>
+ 
+ //#define __builtin_abort() __builtin_printf ("fail at line %d\n", __LINE__)
+ 
+ int
+ main ()
+ {
+   int *p = (int*)omp_alloc (sizeof (int), ompx_gnu_managed_mem_alloc);
+ 
+   *p = 42;
+   uintptr_t a_p = (uintptr_t)p;
+ 
+   #pragma omp target is_device_ptr(p)
+     {
+       if (*p != 42 || a_p != (uintptr_t)p)
+ 	__builtin_abort ();
+     }
+   if (!p
+       || !omp_target_is_accessible (p, sizeof (int),
+ 				    omp_get_default_device ()))
+     __builtin_abort ();
+ 
+   return 0;
+ }
diff -Nrcpad gcc-16-20260201/libgomp/testsuite/libgomp.c-c++-common/target-is-accessible-5.c gcc-16-20260208/libgomp/testsuite/libgomp.c-c++-common/target-is-accessible-5.c
*** gcc-16-20260201/libgomp/testsuite/libgomp.c-c++-common/target-is-accessible-5.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/libgomp/testsuite/libgomp.c-c++-common/target-is-accessible-5.c	Sun Feb  8 22:32:16 2026
***************
*** 0 ****
--- 1,33 ----
+ #include <omp.h>
+ 
+ void check (int dev)
+ {
+    constexpr int N = 10;
+    constexpr int size = N*sizeof(int);
+    int A[N] = {};
+ 
+    void *ptr = omp_target_alloc (size, dev);
+ 
+    if (ptr == nullptr || !omp_target_is_accessible (ptr, size, dev))
+      __builtin_abort ();
+ 
+    #pragma omp target device(dev) firstprivate(ptr)
+    for (int i = 0; i < N; i++)
+      ((int *)ptr)[i] = i + 1;
+ 
+    if (omp_target_memcpy (A, ptr, size, 0, 0, omp_initial_device, dev) != 0)
+      __builtin_abort ();
+ 
+    for (int i = 0; i < N; i++)
+      if (A[i] != i + 1)
+        __builtin_abort ();
+ 
+    omp_target_free (ptr, dev);
+ }
+ 
+ int main ()
+ {
+    check (omp_default_device);
+    for (int dev = 0; dev <= omp_get_num_devices(); dev++)
+      check (dev);
+ }
diff -Nrcpad gcc-16-20260201/libgomp/testsuite/libgomp.fortran/map-alloc-present-1.f90 gcc-16-20260208/libgomp/testsuite/libgomp.fortran/map-alloc-present-1.f90
*** gcc-16-20260201/libgomp/testsuite/libgomp.fortran/map-alloc-present-1.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/libgomp/testsuite/libgomp.fortran/map-alloc-present-1.f90	Sun Feb  8 22:32:16 2026
***************
*** 0 ****
--- 1,51 ----
+ ! This testcase checks that a mapped allocatable array is considered present
+ ! on a target construct even when it is unallocated.
+ 
+ implicit none
+ 
+ real(kind=8), allocatable :: alloc0(:,:), alloc1(:,:), alloc2(:,:)
+ 
+ ! Case 1: allocated and mapped -> present
+ 
+ alloc0 = reshape([1,2,3,4],[2,2])
+ 
+ !$omp target enter data &
+ !$omp   map(to: alloc0) &
+ !$omp   map(to: alloc1)
+ 
+ !$omp target map(present, alloc: alloc0)
+   if (.not. allocated(alloc0)) stop 1
+   if (any (alloc0 /= reshape([1,2,3,4],[2,2]))) stop 2
+   alloc0 = alloc0 * 2
+ !$omp end target
+ 
+ ! Case 2: unallocated but mapped -> present
+ 
+ alloc1 = reshape([11,22,33,44],[2,2])
+ 
+ !$omp target map(always, present, to: alloc1)
+   if (.not. allocated(alloc1)) stop 3
+   if (any (alloc1 /= reshape([11,22,33,44],[2,2]))) stop 4
+   alloc1 = alloc1 * 3
+ !$omp end target
+ 
+ ! Case 3: unallocated and not mapped -> not present
+ 
+ alloc2 = reshape([111,222,333,444],[2,2])
+ 
+ print *, "CheCKpOInT"
+ ! { dg-output "CheCKpOInT(\n|\r\n|\r).*" }
+ 
+ ! { dg-output "libgomp: present clause: not present on the device \\(addr: 0x\[0-9a-f\]+, size: \[0-9\]+ \\(0x\[0-9a-f\]+\\), dev: \[0-9\]+\\\)" { target offload_device_nonshared_as } }
+ ! { dg-shouldfail "present error triggered" { offload_device_nonshared_as } }
+ !$omp target map(always, present, to: alloc2)
+   if (.not. allocated(alloc2)) stop 5
+   if (any (alloc2 /= reshape([111,222,333,444],[2,2]))) stop 6
+   alloc2 = alloc2 * 4
+ !$omp end target
+ 
+ !$omp target exit data &
+ !$omp   map(from: alloc0) &
+ !$omp   map(from: alloc1)
+ 
+ end
diff -Nrcpad gcc-16-20260201/libgomp/testsuite/libgomp.fortran/target-is-accessible-1.f90 gcc-16-20260208/libgomp/testsuite/libgomp.fortran/target-is-accessible-1.f90
*** gcc-16-20260201/libgomp/testsuite/libgomp.fortran/target-is-accessible-1.f90	Sun Feb  1 22:32:16 2026
--- gcc-16-20260208/libgomp/testsuite/libgomp.fortran/target-is-accessible-1.f90	Sun Feb  8 22:32:16 2026
***************
*** 1,53 ****
  program main
    use omp_lib
    use iso_c_binding
    implicit none (external, type)
!   integer :: d, id, n, shared_mem, i
    integer, target :: a(1:128)
!   type(c_ptr) :: p
  
    d = omp_get_default_device ()
    id = omp_get_initial_device ()
    n = omp_get_num_devices ()
  
    if (d < 0 .or. d >= n) &
      d = id
  
!   if (omp_target_is_accessible (p, c_sizeof (d), n) /= 1) &
      stop 1
  
!   if (omp_target_is_accessible (p, c_sizeof (d), id) /= 1) &
      stop 2
  
!   if (omp_target_is_accessible (p, c_sizeof (d), omp_initial_device) /= 1) &
      stop 3
  
!   if (omp_target_is_accessible (p, c_sizeof (d), -6) /= 0) &  ! -6 = omp_default_device - 1
      stop 4
  
!   if (omp_target_is_accessible (p, c_sizeof (d), n + 1) /= 0) &
      stop 5
  
    ! Currently, a host pointer is accessible if the device supports shared
    ! memory or omp_target_is_accessible is executed on the host. This
!   ! test case must be adapted when unified shared memory is avialable.
    do d = 0, omp_get_num_devices ()
!     shared_mem = 0;
      !$omp target map (alloc: shared_mem) device (d)
!       shared_mem = 1;
      !$omp end target
  
!     if (omp_target_is_accessible (p, c_sizeof (d), d) /= shared_mem) &
!       stop 6;
  
!     if (omp_target_is_accessible (c_loc (a), 128 * sizeof (a(1)), d) /= shared_mem) &
!       stop 7;
  
      do i = 1, 128
!       if (omp_target_is_accessible (c_loc (a(i)), sizeof (a(i)), d) /= shared_mem) &
!         stop 8;
      end do
! 
    end do
  
  end program main
--- 1,112 ----
+ ! { dg-do run }
+ 
  program main
    use omp_lib
    use iso_c_binding
    implicit none (external, type)
!   integer :: d, id, n, shared_mem, i, heap_accessible, stack_accessible
!   integer, target :: test_accessible
!   integer, allocatable, target :: p(:)
    integer, target :: a(1:128)
!   integer(c_intptr_t) :: addr
!   logical :: condition
  
    d = omp_get_default_device ()
    id = omp_get_initial_device ()
    n = omp_get_num_devices ()
+   allocate (p(1))
  
    if (d < 0 .or. d >= n) &
      d = id
  
!   if (omp_target_is_accessible (c_loc(p), c_sizeof(p(1)), n) == 0) &
      stop 1
  
!   if (omp_target_is_accessible (c_loc(p), c_sizeof(p(1)), id) == 0) &
      stop 2
  
!   if (omp_target_is_accessible (c_loc(p), c_sizeof(p(1)), omp_initial_device) == 0) &
      stop 3
  
!   if (omp_target_is_accessible (c_loc(p), c_sizeof(p(1)), -6) /= 0) &  ! -6 = omp_default_device - 1
      stop 4
  
!   if (omp_target_is_accessible (c_loc(p), c_sizeof(p(1)), n + 1) /= 0) &
      stop 5
  
    ! Currently, a host pointer is accessible if the device supports shared
    ! memory or omp_target_is_accessible is executed on the host. This
!   ! test case must be adapted when unified shared memory is available.
    do d = 0, omp_get_num_devices ()
!     ! Check if libgomp is treating the device as a shared memory device.
!     shared_mem = 0
      !$omp target map (alloc: shared_mem) device (d)
!       shared_mem = 1
      !$omp end target
  
!     heap_accessible = shared_mem
!     condition = omp_target_is_accessible (c_loc(p), c_sizeof(p(1)), d) /= shared_mem
!     if (condition) then
!       if (shared_mem /= 0) &
!         stop 6
  
!       ! shared_mem is false, but the memory is reading as accessible,
!       ! so let's check that by reading it. We should not do so
!       ! unconditionally because if it's wrong then we'll probably get
!       ! a memory fault.
!       p(1) = 123
!       addr = transfer(c_loc(p), addr)
! 
!       !$omp target has_device_addr(p) map(from:heap_accessible) device(d)
!         if (transfer(c_loc(p), addr) == addr .and. p(1) == 123) &
!           heap_accessible = 1
!       !$omp end target
  
+       if (heap_accessible == 0) &
+         stop 7
+     end if
+ 
+     stack_accessible = shared_mem
+     condition = omp_target_is_accessible (c_loc(a), 128 * c_sizeof(a(1)), d) /= shared_mem
+     if (condition) then
+       if (shared_mem /= 0) &
+         stop 8
+ 
+       ! shared_mem is false, but the memory is reading as accessible,
+       ! so let's check that by reading it. We should not do so
+       ! unconditionally because if it's wrong then we'll probably get
+       ! a memory fault.
+       test_accessible = 123
+       addr = transfer(c_loc(test_accessible), addr)
+ 
+       !$omp target has_device_addr(test_accessible) map(from:stack_accessible) device(d)
+         if (transfer(c_loc(test_accessible), addr) == addr &
+             .and. test_accessible == 123) &
+           stack_accessible = 1
+       !$omp end target
+ 
+       if (stack_accessible == 0) &
+         stop 9
+     end if
+ 
+     print '(A,I0,A,I0,A,I0,A,I0)', &
+       'device #', d, &
+       ': shared_mem=', shared_mem, &
+       ' heap_accessible=', heap_accessible, &
+       ' stack_accessible=', stack_accessible
+ 
+     ! omp_target_is_accessible returns false if *any* of the array is
+     ! inaccessible, so we only check the aggregate result.
+     ! (Varying access observed on amdgcn without xnack.)
+     condition = .true.
      do i = 1, 128
!       if (omp_target_is_accessible (c_loc(a(i)), c_sizeof(a(i)), d) == 0) &
!         condition = .false.
      end do
!     if (condition .neqv. stack_accessible /= 0) &
!       stop 10
    end do
  
+   deallocate (p)
+ 
  end program main
diff -Nrcpad gcc-16-20260201/libiberty/ChangeLog gcc-16-20260208/libiberty/ChangeLog
*** gcc-16-20260201/libiberty/ChangeLog	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libiberty/ChangeLog	Sun Feb  8 22:32:16 2026
***************
*** 1,3 ****
--- 1,7 ----
+ 2026-02-05  Matthieu Longo  <matthieu.longo@arm.com>
+ 
+ 	* testsuite/test-doubly-linked-list.c: Update.
+ 
  2026-01-12  Maciej W. Rozycki  <macro@redhat.com>
  
  	* objalloc.c (objalloc_free): Don't use the pointer passed if
diff -Nrcpad gcc-16-20260201/libiberty/testsuite/test-doubly-linked-list.c gcc-16-20260208/libiberty/testsuite/test-doubly-linked-list.c
*** gcc-16-20260201/libiberty/testsuite/test-doubly-linked-list.c	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libiberty/testsuite/test-doubly-linked-list.c	Sun Feb  8 22:32:16 2026
*************** const int EXPECT_7 [] = { 10, 9, 2, 4, 3
*** 190,195 ****
--- 190,197 ----
  const int EXPECT_8 [] = { 2, 3, 4, 8, 9, 10, 11 };
  const int EXPECT_9 [] = { 3, 4, 8, 9, 10, 11 };
  const int EXPECT_10 [] = { 3, 4, 8, 9, 10 };
+ const int EXPECT_11 [] = { 20, 21, 22 };
+ const int EXPECT_12 [] = { 3, 4, 8, 9, 10 };
  const struct test_data_t test_data[] = {
    { .content = EXPECT_0, .size = sizeof(EXPECT_0) / sizeof(EXPECT_0[0]) },
    { .content = EXPECT_1, .size = sizeof(EXPECT_1) / sizeof(EXPECT_1[0]) },
*************** const struct test_data_t test_data[] = {
*** 202,207 ****
--- 204,211 ----
    { .content = EXPECT_8, .size = sizeof(EXPECT_8) / sizeof(EXPECT_8[0]) },
    { .content = EXPECT_9, .size = sizeof(EXPECT_9) / sizeof(EXPECT_9[0]) },
    { .content = EXPECT_10, .size = sizeof(EXPECT_10) / sizeof(EXPECT_10[0]) },
+   { .content = EXPECT_11, .size = sizeof(EXPECT_11) / sizeof(EXPECT_11[0]) },
+   { .content = EXPECT_12, .size = sizeof(EXPECT_12) / sizeof(EXPECT_12[0]) },
  };
  
  int main (void)
*************** int main (void)
*** 272,276 ****
--- 276,298 ----
    LINKED_LIST_POP_BACK(ListNodeType) (&wrapper);
    failures += ! check ("pop_back", &test_data[10], &wrapper);
  
+   LinkedListWrapperType other_wrapper = {
+     .first = NULL,
+     .last = NULL,
+     .size = 0,
+   };
+ 
+   LINKED_LIST_APPEND(ListNodeType) (&other_wrapper, l_new_node (20));
+   LINKED_LIST_APPEND(ListNodeType) (&other_wrapper, l_new_node (21));
+   LINKED_LIST_APPEND(ListNodeType) (&other_wrapper, l_new_node (22));
+ 
+   /* Swap wrappers once.  */
+   LINKED_LIST_SWAP_LISTS (LinkedListWrapperType) (&wrapper, &other_wrapper);
+   failures += ! check ("swap wrappers once", &test_data[11], &wrapper);
+ 
+   /* Swap wrappers twice.  */
+   LINKED_LIST_SWAP_LISTS (LinkedListWrapperType) (&wrapper, &other_wrapper);
+   failures += ! check ("swap wrappers twice", &test_data[12], &wrapper);
+ 
    exit (failures ? EXIT_FAILURE : EXIT_SUCCESS);
  }
diff -Nrcpad gcc-16-20260201/libphobos/ChangeLog gcc-16-20260208/libphobos/ChangeLog
*** gcc-16-20260201/libphobos/ChangeLog	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/ChangeLog	Sun Feb  8 22:32:16 2026
***************
*** 1,3 ****
--- 1,27 ----
+ 2026-02-05  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	* src/MERGE: Merge upstream phobos f7249cf45.
+ 
+ 2026-02-05  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	* libdruntime/Makefile.am (DRUNTIME_DSOURCES): Add
+ 	core/internal/vararg/gnu.d.
+ 	(DRUNTIME_DSOURCES_LINUX): Add core/sys/linux/hdlc/ioctl.d,
+ 	core/sys/linux/net/if_.d.
+ 	(DRUNTIME_DSOURCES_SOLARIS): Add core/sys/solaris/sys/procfs.d,
+ 	core/sys/solaris/sys/regset.d, core/sys/solaris/thread.d.
+ 	* libdruntime/Makefile.in: Regenerate.
+ 
+ 2026-02-03  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	* libdruntime/MERGE: Merge upstream druntime 24a41073c2.
+ 	* libdruntime/__importc_builtins.di: Reimplement.
+ 	* src/MERGE: Merge upstream phobos 808314eb2.
+ 	* testsuite/libphobos.aa/test_aa.d: Adjust test.
+ 	* testsuite/libphobos.gc/forkgc2.d: Removed.
+ 	* testsuite/libphobos.thread/filterthrownglobal.d: New test.
+ 	* testsuite/libphobos.thread/filterthrownmethod.d: New test.
+ 
  2026-01-31  Iain Buclaw  <ibuclaw@gdcproject.org>
  
  	* libdruntime/MERGE: Merge upstream druntime e1f6680f50.
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/MERGE gcc-16-20260208/libphobos/libdruntime/MERGE
*** gcc-16-20260201/libphobos/libdruntime/MERGE	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/MERGE	Sun Feb  8 22:32:16 2026
***************
*** 1,4 ****
! e1f6680f50d147846316c2fa3363461a2aa7ac1d
  
  The first line of this file holds the git revision number of the last
  merge done from the dlang/dmd repository.
--- 1,4 ----
! 24a41073c2dbf456d4f7a6fe6a7965d6ce6fc5cb
  
  The first line of this file holds the git revision number of the last
  merge done from the dlang/dmd repository.
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/Makefile.am gcc-16-20260208/libphobos/libdruntime/Makefile.am
*** gcc-16-20260201/libphobos/libdruntime/Makefile.am	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/Makefile.am	Sun Feb  8 22:32:16 2026
*************** DRUNTIME_DSOURCES = core/atomic.d core/a
*** 199,219 ****
  	core/internal/qsort.d core/internal/spinlock.d core/internal/string.d \
  	core/internal/switch_.d core/internal/traits.d core/internal/utf.d \
  	core/internal/util/array.d core/internal/util/math.d \
! 	core/interpolation.d core/lifetime.d core/math.d core/memory.d \
! 	core/runtime.d core/simd.d core/stdc/assert_.d core/stdc/complex.d \
! 	core/stdc/config.d core/stdc/ctype.d core/stdc/errno.d \
! 	core/stdc/fenv.d core/stdc/float_.d core/stdc/inttypes.d \
! 	core/stdc/limits.d core/stdc/locale.d core/stdc/math.d \
! 	core/stdc/signal.d core/stdc/stdarg.d core/stdc/stdatomic.d \
! 	core/stdc/stddef.d core/stdc/stdint.d core/stdc/stdio.d \
! 	core/stdc/stdlib.d core/stdc/string.d core/stdc/tgmath.d \
! 	core/stdc/time.d core/stdc/wchar_.d core/stdc/wctype.d \
! 	core/sync/barrier.d core/sync/condition.d core/sync/config.d \
! 	core/sync/event.d core/sync/exception.d core/sync/mutex.d \
! 	core/sync/package.d core/sync/rwmutex.d core/sync/semaphore.d \
! 	core/thread/context.d core/thread/fiber/base.d \
! 	core/thread/fiber/package.d core/thread/osthread.d \
! 	core/thread/package.d core/thread/threadbase.d \
  	core/thread/threadgroup.d core/thread/types.d core/time.d \
  	core/vararg.d core/volatile.d etc/valgrind/valgrind.d gcc/attribute.d \
  	gcc/attributes.d gcc/backtrace.d gcc/builtins.d gcc/deh.d gcc/emutls.d \
--- 199,219 ----
  	core/internal/qsort.d core/internal/spinlock.d core/internal/string.d \
  	core/internal/switch_.d core/internal/traits.d core/internal/utf.d \
  	core/internal/util/array.d core/internal/util/math.d \
! 	core/internal/vararg/gnu.d core/interpolation.d core/lifetime.d \
! 	core/math.d core/memory.d core/runtime.d core/simd.d \
! 	core/stdc/assert_.d core/stdc/complex.d core/stdc/config.d \
! 	core/stdc/ctype.d core/stdc/errno.d core/stdc/fenv.d \
! 	core/stdc/float_.d core/stdc/inttypes.d core/stdc/limits.d \
! 	core/stdc/locale.d core/stdc/math.d core/stdc/signal.d \
! 	core/stdc/stdarg.d core/stdc/stdatomic.d core/stdc/stddef.d \
! 	core/stdc/stdint.d core/stdc/stdio.d core/stdc/stdlib.d \
! 	core/stdc/string.d core/stdc/tgmath.d core/stdc/time.d \
! 	core/stdc/wchar_.d core/stdc/wctype.d core/sync/barrier.d \
! 	core/sync/condition.d core/sync/config.d core/sync/event.d \
! 	core/sync/exception.d core/sync/mutex.d core/sync/package.d \
! 	core/sync/rwmutex.d core/sync/semaphore.d core/thread/context.d \
! 	core/thread/fiber/base.d core/thread/fiber/package.d \
! 	core/thread/osthread.d core/thread/package.d core/thread/threadbase.d \
  	core/thread/threadgroup.d core/thread/types.d core/time.d \
  	core/vararg.d core/volatile.d etc/valgrind/valgrind.d gcc/attribute.d \
  	gcc/attributes.d gcc/backtrace.d gcc/builtins.d gcc/deh.d gcc/emutls.d \
*************** DRUNTIME_DSOURCES_FREEBSD = core/sys/fre
*** 284,293 ****
  DRUNTIME_DSOURCES_LINUX = core/sys/linux/config.d \
  	core/sys/linux/dlfcn.d core/sys/linux/elf.d core/sys/linux/epoll.d \
  	core/sys/linux/err.d core/sys/linux/errno.d core/sys/linux/execinfo.d \
! 	core/sys/linux/fcntl.d core/sys/linux/fs.d core/sys/linux/ifaddrs.d \
! 	core/sys/linux/input.d core/sys/linux/input_event_codes.d \
! 	core/sys/linux/io_uring.d core/sys/linux/link.d \
! 	core/sys/linux/linux/if_arp.d core/sys/linux/linux/if_packet.d \
  	core/sys/linux/netinet/in_.d core/sys/linux/netinet/tcp.d \
  	core/sys/linux/perf_event.d core/sys/linux/sched.d \
  	core/sys/linux/stdio.d core/sys/linux/string.d \
--- 284,294 ----
  DRUNTIME_DSOURCES_LINUX = core/sys/linux/config.d \
  	core/sys/linux/dlfcn.d core/sys/linux/elf.d core/sys/linux/epoll.d \
  	core/sys/linux/err.d core/sys/linux/errno.d core/sys/linux/execinfo.d \
! 	core/sys/linux/fcntl.d core/sys/linux/fs.d core/sys/linux/hdlc/ioctl.d \
! 	core/sys/linux/ifaddrs.d core/sys/linux/input.d \
! 	core/sys/linux/input_event_codes.d core/sys/linux/io_uring.d \
! 	core/sys/linux/link.d core/sys/linux/linux/if_arp.d \
! 	core/sys/linux/linux/if_packet.d core/sys/linux/net/if_.d \
  	core/sys/linux/netinet/in_.d core/sys/linux/netinet/tcp.d \
  	core/sys/linux/perf_event.d core/sys/linux/sched.d \
  	core/sys/linux/stdio.d core/sys/linux/string.d \
*************** DRUNTIME_DSOURCES_SOLARIS = core/sys/sol
*** 356,363 ****
  	core/sys/solaris/sys/elf_SPARC.d core/sys/solaris/sys/elf_amd64.d \
  	core/sys/solaris/sys/elf_notes.d core/sys/solaris/sys/elftypes.d \
  	core/sys/solaris/sys/link.d core/sys/solaris/sys/priocntl.d \
! 	core/sys/solaris/sys/procset.d core/sys/solaris/sys/types.d \
! 	core/sys/solaris/time.d
  
  DRUNTIME_DSOURCES_WINDOWS = core/sys/windows/accctrl.d \
  	core/sys/windows/aclapi.d core/sys/windows/aclui.d \
--- 357,365 ----
  	core/sys/solaris/sys/elf_SPARC.d core/sys/solaris/sys/elf_amd64.d \
  	core/sys/solaris/sys/elf_notes.d core/sys/solaris/sys/elftypes.d \
  	core/sys/solaris/sys/link.d core/sys/solaris/sys/priocntl.d \
! 	core/sys/solaris/sys/procfs.d core/sys/solaris/sys/procset.d \
! 	core/sys/solaris/sys/regset.d core/sys/solaris/sys/types.d \
! 	core/sys/solaris/thread.d core/sys/solaris/time.d
  
  DRUNTIME_DSOURCES_WINDOWS = core/sys/windows/accctrl.d \
  	core/sys/windows/aclapi.d core/sys/windows/aclui.d \
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/Makefile.in gcc-16-20260208/libphobos/libdruntime/Makefile.in
*** gcc-16-20260201/libphobos/libdruntime/Makefile.in	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/Makefile.in	Sun Feb  8 22:32:16 2026
*************** am__objects_1 = core/atomic.lo core/attr
*** 223,252 ****
  	core/internal/string.lo core/internal/switch_.lo \
  	core/internal/traits.lo core/internal/utf.lo \
  	core/internal/util/array.lo core/internal/util/math.lo \
! 	core/interpolation.lo core/lifetime.lo core/math.lo \
! 	core/memory.lo core/runtime.lo core/simd.lo \
! 	core/stdc/assert_.lo core/stdc/complex.lo core/stdc/config.lo \
! 	core/stdc/ctype.lo core/stdc/errno.lo core/stdc/fenv.lo \
! 	core/stdc/float_.lo core/stdc/inttypes.lo core/stdc/limits.lo \
! 	core/stdc/locale.lo core/stdc/math.lo core/stdc/signal.lo \
! 	core/stdc/stdarg.lo core/stdc/stdatomic.lo core/stdc/stddef.lo \
! 	core/stdc/stdint.lo core/stdc/stdio.lo core/stdc/stdlib.lo \
! 	core/stdc/string.lo core/stdc/tgmath.lo core/stdc/time.lo \
! 	core/stdc/wchar_.lo core/stdc/wctype.lo core/sync/barrier.lo \
! 	core/sync/condition.lo core/sync/config.lo core/sync/event.lo \
! 	core/sync/exception.lo core/sync/mutex.lo core/sync/package.lo \
! 	core/sync/rwmutex.lo core/sync/semaphore.lo \
! 	core/thread/context.lo core/thread/fiber/base.lo \
! 	core/thread/fiber/package.lo core/thread/osthread.lo \
! 	core/thread/package.lo core/thread/threadbase.lo \
! 	core/thread/threadgroup.lo core/thread/types.lo core/time.lo \
! 	core/vararg.lo core/volatile.lo etc/valgrind/valgrind.lo \
! 	gcc/attribute.lo gcc/attributes.lo gcc/backtrace.lo \
! 	gcc/builtins.lo gcc/deh.lo gcc/emutls.lo gcc/gthread.lo \
! 	gcc/sections/common.lo gcc/sections/elf.lo \
! 	gcc/sections/macho.lo gcc/sections/package.lo \
! 	gcc/sections/pecoff.lo gcc/simd.lo gcc/unwind/arm.lo \
! 	gcc/unwind/arm_common.lo gcc/unwind/c6x.lo \
  	gcc/unwind/generic.lo gcc/unwind/package.lo gcc/unwind/pe.lo \
  	object.lo rt/aApply.lo rt/aApplyR.lo rt/arraycat.lo \
  	rt/config.lo rt/critical_.lo rt/deh.lo rt/dmain2.lo \
--- 223,252 ----
  	core/internal/string.lo core/internal/switch_.lo \
  	core/internal/traits.lo core/internal/utf.lo \
  	core/internal/util/array.lo core/internal/util/math.lo \
! 	core/internal/vararg/gnu.lo core/interpolation.lo \
! 	core/lifetime.lo core/math.lo core/memory.lo core/runtime.lo \
! 	core/simd.lo core/stdc/assert_.lo core/stdc/complex.lo \
! 	core/stdc/config.lo core/stdc/ctype.lo core/stdc/errno.lo \
! 	core/stdc/fenv.lo core/stdc/float_.lo core/stdc/inttypes.lo \
! 	core/stdc/limits.lo core/stdc/locale.lo core/stdc/math.lo \
! 	core/stdc/signal.lo core/stdc/stdarg.lo core/stdc/stdatomic.lo \
! 	core/stdc/stddef.lo core/stdc/stdint.lo core/stdc/stdio.lo \
! 	core/stdc/stdlib.lo core/stdc/string.lo core/stdc/tgmath.lo \
! 	core/stdc/time.lo core/stdc/wchar_.lo core/stdc/wctype.lo \
! 	core/sync/barrier.lo core/sync/condition.lo \
! 	core/sync/config.lo core/sync/event.lo core/sync/exception.lo \
! 	core/sync/mutex.lo core/sync/package.lo core/sync/rwmutex.lo \
! 	core/sync/semaphore.lo core/thread/context.lo \
! 	core/thread/fiber/base.lo core/thread/fiber/package.lo \
! 	core/thread/osthread.lo core/thread/package.lo \
! 	core/thread/threadbase.lo core/thread/threadgroup.lo \
! 	core/thread/types.lo core/time.lo core/vararg.lo \
! 	core/volatile.lo etc/valgrind/valgrind.lo gcc/attribute.lo \
! 	gcc/attributes.lo gcc/backtrace.lo gcc/builtins.lo gcc/deh.lo \
! 	gcc/emutls.lo gcc/gthread.lo gcc/sections/common.lo \
! 	gcc/sections/elf.lo gcc/sections/macho.lo \
! 	gcc/sections/package.lo gcc/sections/pecoff.lo gcc/simd.lo \
! 	gcc/unwind/arm.lo gcc/unwind/arm_common.lo gcc/unwind/c6x.lo \
  	gcc/unwind/generic.lo gcc/unwind/package.lo gcc/unwind/pe.lo \
  	object.lo rt/aApply.lo rt/aApplyR.lo rt/arraycat.lo \
  	rt/config.lo rt/critical_.lo rt/deh.lo rt/dmain2.lo \
*************** am__objects_19 = core/sys/linux/config.l
*** 372,382 ****
  	core/sys/linux/elf.lo core/sys/linux/epoll.lo \
  	core/sys/linux/err.lo core/sys/linux/errno.lo \
  	core/sys/linux/execinfo.lo core/sys/linux/fcntl.lo \
! 	core/sys/linux/fs.lo core/sys/linux/ifaddrs.lo \
! 	core/sys/linux/input.lo core/sys/linux/input_event_codes.lo \
! 	core/sys/linux/io_uring.lo core/sys/linux/link.lo \
! 	core/sys/linux/linux/if_arp.lo \
! 	core/sys/linux/linux/if_packet.lo \
  	core/sys/linux/netinet/in_.lo core/sys/linux/netinet/tcp.lo \
  	core/sys/linux/perf_event.lo core/sys/linux/sched.lo \
  	core/sys/linux/stdio.lo core/sys/linux/string.lo \
--- 372,382 ----
  	core/sys/linux/elf.lo core/sys/linux/epoll.lo \
  	core/sys/linux/err.lo core/sys/linux/errno.lo \
  	core/sys/linux/execinfo.lo core/sys/linux/fcntl.lo \
! 	core/sys/linux/fs.lo core/sys/linux/hdlc/ioctl.lo \
! 	core/sys/linux/ifaddrs.lo core/sys/linux/input.lo \
! 	core/sys/linux/input_event_codes.lo core/sys/linux/io_uring.lo \
! 	core/sys/linux/link.lo core/sys/linux/linux/if_arp.lo \
! 	core/sys/linux/linux/if_packet.lo core/sys/linux/net/if_.lo \
  	core/sys/linux/netinet/in_.lo core/sys/linux/netinet/tcp.lo \
  	core/sys/linux/perf_event.lo core/sys/linux/sched.lo \
  	core/sys/linux/stdio.lo core/sys/linux/string.lo \
*************** am__objects_23 = core/sys/solaris/dlfcn.
*** 489,496 ****
  	core/sys/solaris/sys/elf_notes.lo \
  	core/sys/solaris/sys/elftypes.lo core/sys/solaris/sys/link.lo \
  	core/sys/solaris/sys/priocntl.lo \
! 	core/sys/solaris/sys/procset.lo core/sys/solaris/sys/types.lo \
! 	core/sys/solaris/time.lo
  @DRUNTIME_OS_SOLARIS_TRUE@am__objects_24 = $(am__objects_23)
  @DRUNTIME_CPU_AARCH64_TRUE@am__objects_25 = config/aarch64/libgdruntime_la-switchcontext.lo
  @DRUNTIME_CPU_ARM_TRUE@am__objects_26 = config/arm/libgdruntime_la-switchcontext.lo
--- 489,497 ----
  	core/sys/solaris/sys/elf_notes.lo \
  	core/sys/solaris/sys/elftypes.lo core/sys/solaris/sys/link.lo \
  	core/sys/solaris/sys/priocntl.lo \
! 	core/sys/solaris/sys/procfs.lo core/sys/solaris/sys/procset.lo \
! 	core/sys/solaris/sys/regset.lo core/sys/solaris/sys/types.lo \
! 	core/sys/solaris/thread.lo core/sys/solaris/time.lo
  @DRUNTIME_OS_SOLARIS_TRUE@am__objects_24 = $(am__objects_23)
  @DRUNTIME_CPU_AARCH64_TRUE@am__objects_25 = config/aarch64/libgdruntime_la-switchcontext.lo
  @DRUNTIME_CPU_ARM_TRUE@am__objects_26 = config/arm/libgdruntime_la-switchcontext.lo
*************** DRUNTIME_DSOURCES = core/atomic.d core/a
*** 885,905 ****
  	core/internal/qsort.d core/internal/spinlock.d core/internal/string.d \
  	core/internal/switch_.d core/internal/traits.d core/internal/utf.d \
  	core/internal/util/array.d core/internal/util/math.d \
! 	core/interpolation.d core/lifetime.d core/math.d core/memory.d \
! 	core/runtime.d core/simd.d core/stdc/assert_.d core/stdc/complex.d \
! 	core/stdc/config.d core/stdc/ctype.d core/stdc/errno.d \
! 	core/stdc/fenv.d core/stdc/float_.d core/stdc/inttypes.d \
! 	core/stdc/limits.d core/stdc/locale.d core/stdc/math.d \
! 	core/stdc/signal.d core/stdc/stdarg.d core/stdc/stdatomic.d \
! 	core/stdc/stddef.d core/stdc/stdint.d core/stdc/stdio.d \
! 	core/stdc/stdlib.d core/stdc/string.d core/stdc/tgmath.d \
! 	core/stdc/time.d core/stdc/wchar_.d core/stdc/wctype.d \
! 	core/sync/barrier.d core/sync/condition.d core/sync/config.d \
! 	core/sync/event.d core/sync/exception.d core/sync/mutex.d \
! 	core/sync/package.d core/sync/rwmutex.d core/sync/semaphore.d \
! 	core/thread/context.d core/thread/fiber/base.d \
! 	core/thread/fiber/package.d core/thread/osthread.d \
! 	core/thread/package.d core/thread/threadbase.d \
  	core/thread/threadgroup.d core/thread/types.d core/time.d \
  	core/vararg.d core/volatile.d etc/valgrind/valgrind.d gcc/attribute.d \
  	gcc/attributes.d gcc/backtrace.d gcc/builtins.d gcc/deh.d gcc/emutls.d \
--- 886,906 ----
  	core/internal/qsort.d core/internal/spinlock.d core/internal/string.d \
  	core/internal/switch_.d core/internal/traits.d core/internal/utf.d \
  	core/internal/util/array.d core/internal/util/math.d \
! 	core/internal/vararg/gnu.d core/interpolation.d core/lifetime.d \
! 	core/math.d core/memory.d core/runtime.d core/simd.d \
! 	core/stdc/assert_.d core/stdc/complex.d core/stdc/config.d \
! 	core/stdc/ctype.d core/stdc/errno.d core/stdc/fenv.d \
! 	core/stdc/float_.d core/stdc/inttypes.d core/stdc/limits.d \
! 	core/stdc/locale.d core/stdc/math.d core/stdc/signal.d \
! 	core/stdc/stdarg.d core/stdc/stdatomic.d core/stdc/stddef.d \
! 	core/stdc/stdint.d core/stdc/stdio.d core/stdc/stdlib.d \
! 	core/stdc/string.d core/stdc/tgmath.d core/stdc/time.d \
! 	core/stdc/wchar_.d core/stdc/wctype.d core/sync/barrier.d \
! 	core/sync/condition.d core/sync/config.d core/sync/event.d \
! 	core/sync/exception.d core/sync/mutex.d core/sync/package.d \
! 	core/sync/rwmutex.d core/sync/semaphore.d core/thread/context.d \
! 	core/thread/fiber/base.d core/thread/fiber/package.d \
! 	core/thread/osthread.d core/thread/package.d core/thread/threadbase.d \
  	core/thread/threadgroup.d core/thread/types.d core/time.d \
  	core/vararg.d core/volatile.d etc/valgrind/valgrind.d gcc/attribute.d \
  	gcc/attributes.d gcc/backtrace.d gcc/builtins.d gcc/deh.d gcc/emutls.d \
*************** DRUNTIME_DSOURCES_FREEBSD = core/sys/fre
*** 969,978 ****
  DRUNTIME_DSOURCES_LINUX = core/sys/linux/config.d \
  	core/sys/linux/dlfcn.d core/sys/linux/elf.d core/sys/linux/epoll.d \
  	core/sys/linux/err.d core/sys/linux/errno.d core/sys/linux/execinfo.d \
! 	core/sys/linux/fcntl.d core/sys/linux/fs.d core/sys/linux/ifaddrs.d \
! 	core/sys/linux/input.d core/sys/linux/input_event_codes.d \
! 	core/sys/linux/io_uring.d core/sys/linux/link.d \
! 	core/sys/linux/linux/if_arp.d core/sys/linux/linux/if_packet.d \
  	core/sys/linux/netinet/in_.d core/sys/linux/netinet/tcp.d \
  	core/sys/linux/perf_event.d core/sys/linux/sched.d \
  	core/sys/linux/stdio.d core/sys/linux/string.d \
--- 970,980 ----
  DRUNTIME_DSOURCES_LINUX = core/sys/linux/config.d \
  	core/sys/linux/dlfcn.d core/sys/linux/elf.d core/sys/linux/epoll.d \
  	core/sys/linux/err.d core/sys/linux/errno.d core/sys/linux/execinfo.d \
! 	core/sys/linux/fcntl.d core/sys/linux/fs.d core/sys/linux/hdlc/ioctl.d \
! 	core/sys/linux/ifaddrs.d core/sys/linux/input.d \
! 	core/sys/linux/input_event_codes.d core/sys/linux/io_uring.d \
! 	core/sys/linux/link.d core/sys/linux/linux/if_arp.d \
! 	core/sys/linux/linux/if_packet.d core/sys/linux/net/if_.d \
  	core/sys/linux/netinet/in_.d core/sys/linux/netinet/tcp.d \
  	core/sys/linux/perf_event.d core/sys/linux/sched.d \
  	core/sys/linux/stdio.d core/sys/linux/string.d \
*************** DRUNTIME_DSOURCES_SOLARIS = core/sys/sol
*** 1041,1048 ****
  	core/sys/solaris/sys/elf_SPARC.d core/sys/solaris/sys/elf_amd64.d \
  	core/sys/solaris/sys/elf_notes.d core/sys/solaris/sys/elftypes.d \
  	core/sys/solaris/sys/link.d core/sys/solaris/sys/priocntl.d \
! 	core/sys/solaris/sys/procset.d core/sys/solaris/sys/types.d \
! 	core/sys/solaris/time.d
  
  DRUNTIME_DSOURCES_WINDOWS = core/sys/windows/accctrl.d \
  	core/sys/windows/aclapi.d core/sys/windows/aclui.d \
--- 1043,1051 ----
  	core/sys/solaris/sys/elf_SPARC.d core/sys/solaris/sys/elf_amd64.d \
  	core/sys/solaris/sys/elf_notes.d core/sys/solaris/sys/elftypes.d \
  	core/sys/solaris/sys/link.d core/sys/solaris/sys/priocntl.d \
! 	core/sys/solaris/sys/procfs.d core/sys/solaris/sys/procset.d \
! 	core/sys/solaris/sys/regset.d core/sys/solaris/sys/types.d \
! 	core/sys/solaris/thread.d core/sys/solaris/time.d
  
  DRUNTIME_DSOURCES_WINDOWS = core/sys/windows/accctrl.d \
  	core/sys/windows/aclapi.d core/sys/windows/aclui.d \
*************** core/internal/util/$(am__dirstamp):
*** 1313,1318 ****
--- 1316,1325 ----
  	@: > core/internal/util/$(am__dirstamp)
  core/internal/util/array.lo: core/internal/util/$(am__dirstamp)
  core/internal/util/math.lo: core/internal/util/$(am__dirstamp)
+ core/internal/vararg/$(am__dirstamp):
+ 	@$(MKDIR_P) core/internal/vararg
+ 	@: > core/internal/vararg/$(am__dirstamp)
+ core/internal/vararg/gnu.lo: core/internal/vararg/$(am__dirstamp)
  core/interpolation.lo: core/$(am__dirstamp)
  core/lifetime.lo: core/$(am__dirstamp)
  core/math.lo: core/$(am__dirstamp)
*************** core/sys/linux/errno.lo: core/sys/linux/
*** 1723,1728 ****
--- 1730,1739 ----
  core/sys/linux/execinfo.lo: core/sys/linux/$(am__dirstamp)
  core/sys/linux/fcntl.lo: core/sys/linux/$(am__dirstamp)
  core/sys/linux/fs.lo: core/sys/linux/$(am__dirstamp)
+ core/sys/linux/hdlc/$(am__dirstamp):
+ 	@$(MKDIR_P) core/sys/linux/hdlc
+ 	@: > core/sys/linux/hdlc/$(am__dirstamp)
+ core/sys/linux/hdlc/ioctl.lo: core/sys/linux/hdlc/$(am__dirstamp)
  core/sys/linux/ifaddrs.lo: core/sys/linux/$(am__dirstamp)
  core/sys/linux/input.lo: core/sys/linux/$(am__dirstamp)
  core/sys/linux/input_event_codes.lo: core/sys/linux/$(am__dirstamp)
*************** core/sys/linux/linux/$(am__dirstamp):
*** 1734,1739 ****
--- 1745,1754 ----
  core/sys/linux/linux/if_arp.lo: core/sys/linux/linux/$(am__dirstamp)
  core/sys/linux/linux/if_packet.lo:  \
  	core/sys/linux/linux/$(am__dirstamp)
+ core/sys/linux/net/$(am__dirstamp):
+ 	@$(MKDIR_P) core/sys/linux/net
+ 	@: > core/sys/linux/net/$(am__dirstamp)
+ core/sys/linux/net/if_.lo: core/sys/linux/net/$(am__dirstamp)
  core/sys/linux/netinet/$(am__dirstamp):
  	@$(MKDIR_P) core/sys/linux/netinet
  	@: > core/sys/linux/netinet/$(am__dirstamp)
*************** core/sys/solaris/sys/elftypes.lo:  \
*** 1973,1980 ****
--- 1988,1998 ----
  core/sys/solaris/sys/link.lo: core/sys/solaris/sys/$(am__dirstamp)
  core/sys/solaris/sys/priocntl.lo:  \
  	core/sys/solaris/sys/$(am__dirstamp)
+ core/sys/solaris/sys/procfs.lo: core/sys/solaris/sys/$(am__dirstamp)
  core/sys/solaris/sys/procset.lo: core/sys/solaris/sys/$(am__dirstamp)
+ core/sys/solaris/sys/regset.lo: core/sys/solaris/sys/$(am__dirstamp)
  core/sys/solaris/sys/types.lo: core/sys/solaris/sys/$(am__dirstamp)
+ core/sys/solaris/thread.lo: core/sys/solaris/$(am__dirstamp)
  core/sys/solaris/time.lo: core/sys/solaris/$(am__dirstamp)
  config/aarch64/$(am__dirstamp):
  	@$(MKDIR_P) config/aarch64
*************** mostlyclean-compile:
*** 2091,2096 ****
--- 2109,2116 ----
  	-rm -f core/internal/gc/impl/proto/*.lo
  	-rm -f core/internal/util/*.$(OBJEXT)
  	-rm -f core/internal/util/*.lo
+ 	-rm -f core/internal/vararg/*.$(OBJEXT)
+ 	-rm -f core/internal/vararg/*.lo
  	-rm -f core/stdc/*.$(OBJEXT)
  	-rm -f core/stdc/*.lo
  	-rm -f core/stdcpp/*.$(OBJEXT)
*************** mostlyclean-compile:
*** 2125,2132 ****
--- 2145,2156 ----
  	-rm -f core/sys/freebsd/sys/*.lo
  	-rm -f core/sys/linux/*.$(OBJEXT)
  	-rm -f core/sys/linux/*.lo
+ 	-rm -f core/sys/linux/hdlc/*.$(OBJEXT)
+ 	-rm -f core/sys/linux/hdlc/*.lo
  	-rm -f core/sys/linux/linux/*.$(OBJEXT)
  	-rm -f core/sys/linux/linux/*.lo
+ 	-rm -f core/sys/linux/net/*.$(OBJEXT)
+ 	-rm -f core/sys/linux/net/*.lo
  	-rm -f core/sys/linux/netinet/*.$(OBJEXT)
  	-rm -f core/sys/linux/netinet/*.lo
  	-rm -f core/sys/linux/sys/*.$(OBJEXT)
*************** clean-libtool:
*** 2293,2298 ****
--- 2317,2323 ----
  	-rm -rf core/internal/gc/impl/manual/.libs core/internal/gc/impl/manual/_libs
  	-rm -rf core/internal/gc/impl/proto/.libs core/internal/gc/impl/proto/_libs
  	-rm -rf core/internal/util/.libs core/internal/util/_libs
+ 	-rm -rf core/internal/vararg/.libs core/internal/vararg/_libs
  	-rm -rf core/stdc/.libs core/stdc/_libs
  	-rm -rf core/stdcpp/.libs core/stdcpp/_libs
  	-rm -rf core/sync/.libs core/sync/_libs
*************** clean-libtool:
*** 2310,2316 ****
--- 2335,2343 ----
  	-rm -rf core/sys/freebsd/netinet/.libs core/sys/freebsd/netinet/_libs
  	-rm -rf core/sys/freebsd/sys/.libs core/sys/freebsd/sys/_libs
  	-rm -rf core/sys/linux/.libs core/sys/linux/_libs
+ 	-rm -rf core/sys/linux/hdlc/.libs core/sys/linux/hdlc/_libs
  	-rm -rf core/sys/linux/linux/.libs core/sys/linux/linux/_libs
+ 	-rm -rf core/sys/linux/net/.libs core/sys/linux/net/_libs
  	-rm -rf core/sys/linux/netinet/.libs core/sys/linux/netinet/_libs
  	-rm -rf core/sys/linux/sys/.libs core/sys/linux/sys/_libs
  	-rm -rf core/sys/netbsd/.libs core/sys/netbsd/_libs
*************** distclean-generic:
*** 2460,2465 ****
--- 2487,2493 ----
  	-rm -f core/internal/gc/impl/manual/$(am__dirstamp)
  	-rm -f core/internal/gc/impl/proto/$(am__dirstamp)
  	-rm -f core/internal/util/$(am__dirstamp)
+ 	-rm -f core/internal/vararg/$(am__dirstamp)
  	-rm -f core/stdc/$(am__dirstamp)
  	-rm -f core/stdcpp/$(am__dirstamp)
  	-rm -f core/sync/$(am__dirstamp)
*************** distclean-generic:
*** 2477,2483 ****
--- 2505,2513 ----
  	-rm -f core/sys/freebsd/netinet/$(am__dirstamp)
  	-rm -f core/sys/freebsd/sys/$(am__dirstamp)
  	-rm -f core/sys/linux/$(am__dirstamp)
+ 	-rm -f core/sys/linux/hdlc/$(am__dirstamp)
  	-rm -f core/sys/linux/linux/$(am__dirstamp)
+ 	-rm -f core/sys/linux/net/$(am__dirstamp)
  	-rm -f core/sys/linux/netinet/$(am__dirstamp)
  	-rm -f core/sys/linux/sys/$(am__dirstamp)
  	-rm -f core/sys/netbsd/$(am__dirstamp)
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/__importc_builtins.di gcc-16-20260208/libphobos/libdruntime/__importc_builtins.di
*** gcc-16-20260201/libphobos/libdruntime/__importc_builtins.di	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/__importc_builtins.di	Sun Feb  8 22:32:16 2026
***************
*** 1,113 ****
! /* This D file is implicitly imported by all ImportC source files.
!  * It provides definitions for C compiler builtin functions and declarations.
!  * The purpose is to make it unnecessary to hardwire them into the compiler.
!  * As the leading double underscore suggests, this is for internal use only.
!  *
!  * Copyright: Copyright D Language Foundation 2022-2025
!  * License:   $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
!  * Authors:   Walter Bright
!  * Source: $(DRUNTIMESRC __importc_builtins.di)
!  */
! 
! 
! module __builtins;
! 
! /* gcc relies on internal __builtin_xxxx functions and templates to
!  * accomplish <stdarg.h>. D does the same thing with templates in core.stdc.stdarg.
!  * Here, we redirect the gcc builtin declarations to the equivalent
!  * ones in core.stdc.stdarg, thereby avoiding having to hardwire them
!  * into the D compiler.
!  */
! 
! alias va_list = imported!"core.stdc.stdarg".va_list;
! 
! version (Posix)
! {
!     version (X86_64)
!         alias __va_list_tag = imported!"core.stdc.stdarg".__va_list_tag;
! }
! 
! alias __builtin_va_start = imported!"core.stdc.stdarg".va_start;
! 
! alias __builtin_va_end = imported!"core.stdc.stdarg".va_end;
! 
! alias __builtin_va_copy = imported!"core.stdc.stdarg".va_copy;
! 
! /* dmd's ImportC rewrites __builtin_va_arg into an instantiation of va_arg
!  */
! alias va_arg = imported!"core.stdc.stdarg".va_arg;
! 
! version (CRuntime_Microsoft)
! {
!     //https://docs.microsoft.com/en-us/cpp/cpp/int8-int16-int32-int64?view=msvc-170
!     alias __int8 = byte;
!     alias __int16 = short;
!     alias __int32 = int;
!     alias __int64 = long;
! }
! 
! /*********** floating point *************/
! 
! /* https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html
!  */
! 
! version (DigitalMars)
! {
!     immutable float __nan = float.nan;
! 
!     float __builtin_nanf()(char*)  { return float.nan; }
! 
!     double __builtin_inf()()  { return double.infinity; }
!     float  __builtin_inff()() { return float.infinity; }
!     real   __builtin_infl()() { return real.infinity; }
! 
!     alias __builtin_huge_val  = __builtin_inf;
!     alias __builtin_huge_valf = __builtin_inff;
!     alias __builtin_huge_vall = __builtin_infl;
! 
!     alias __builtin_fabs  = imported!"core.stdc.math".fabs;
!     alias __builtin_fabsf = imported!"core.stdc.math".fabsf;
!     alias __builtin_fabsl = imported!"core.stdc.math".fabsl;
! 
!     ushort __builtin_bswap16()(ushort value)
!     {
!         return cast(ushort) (((value >> 8) & 0xFF) | ((value << 8) & 0xFF00U));
!     }
! 
!     uint __builtin_bswap32()(uint value)
!     {
!         import core.bitop;
!         return core.bitop.bswap(value);
!     }
  
!     ulong  __builtin_bswap64()(ulong value)
!     {
!         import core.bitop;
!         return core.bitop.bswap(value);
!     }
  
!     uint  __builtin__popcount()(ulong value)
!     {
!         import core.bitop;
!         return core.bitop._popcnt(value);
!     }
  
!     // Lazily imported on first use
!     private alias c_long = imported!"core.stdc.config".c_long;
  
!     // Stub these out to no-ops
!     int    __builtin_constant_p(T)(T exp) { return 0; } // should be something like __traits(compiles, enum X = expr)
!     c_long __builtin_expect()(c_long exp, c_long c) { return exp; }
!     void*  __builtin_assume_aligned()(const void* p, size_t align_, ...) { return cast(void*)p; }
  
!     // https://releases.llvm.org/13.0.0/tools/clang/docs/LanguageExtensions.html#builtin-assume
!     void __builtin_assume(T)(lazy T arg) { }
  
!     /* Header on macOS for arm64 references this.
!      * Don't need to implement it, it just needs to compile
!      */
!     align (16) struct __uint128_t
!     {
!         ulong a, b;
!     }
! }
--- 1,23 ----
! /* GDC -- D front-end for GCC
!    Copyright (C) 2025 Free Software Foundation, Inc.
  
!    GCC is free software; you can redistribute it and/or modify it under
!    the terms of the GNU General Public License as published by the Free
!    Software Foundation; either version 3, or (at your option) any later
!    version.
  
!    GCC is distributed in the hope that it will be useful, but WITHOUT ANY
!    WARRANTY; without even the implied warranty of MERCHANTABILITY or
!    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
!    for more details.
  
!    You should have received a copy of the GNU General Public License
!    along with GCC; see the file COPYING3.  If not see
!    <http://www.gnu.org/licenses/>.
! */
  
! /* This module is implicitly imported by all ImportC source files.  */
  
! module __builtins;
  
! public import gcc.builtins;
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/checkedint.d gcc-16-20260208/libphobos/libdruntime/core/checkedint.d
*** gcc-16-20260201/libphobos/libdruntime/core/checkedint.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/core/checkedint.d	Sun Feb  8 22:32:16 2026
*************** ulong mulu()(ulong x, uint y, ref bool o
*** 815,829 ****
  {
      version (D_InlineAsm_X86_64)
      {
!         if (!__ctfe)
!             return mulu(x, ulong(y), overflow);
      }
- 
-     ulong r = x * y;
-     if (x >> 32 &&
-             r / x != y)
-         overflow = true;
-     return r;
  }
  
  /// ditto
--- 815,827 ----
  {
      version (D_InlineAsm_X86_64)
      {
!         return __ctfe ? mulu_generic(x, y, overflow)
!             : mulu(x, ulong(y), overflow);
!     }
!     else
!     {
!         return mulu_generic(x, y, overflow);
      }
  }
  
  /// ditto
*************** ulong mulu()(ulong x, ulong y, ref bool
*** 855,860 ****
--- 853,868 ----
          overflow = true;
      return r;
  }
+ 
+ private ulong mulu_generic()(ulong x, uint y, ref bool overflow)
+ {
+     pragma(inline, true)
+     ulong r = x * y;
+     if (x >> 32 &&
+         r / x != y)
+         overflow = true;
+     return r;
+ }
  
  @betterC
  unittest
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/exception.d gcc-16-20260208/libphobos/libdruntime/core/exception.d
*** gcc-16-20260201/libphobos/libdruntime/core/exception.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/core/exception.d	Sun Feb  8 22:32:16 2026
*************** unittest
*** 528,534 ****
  //       behavior should occur within the handler itself.  This delegate
  //       is __gshared for now based on the assumption that it will only
  //       set by the main thread during program initialization.
! private __gshared AssertHandler _assertHandler = null;
  
  
  /**
--- 528,538 ----
  //       behavior should occur within the handler itself.  This delegate
  //       is __gshared for now based on the assumption that it will only
  //       set by the main thread during program initialization.
! private __gshared
! {
!     AssertHandler _assertHandler = null;
!     FilterThreadThrowableHandler _filterThreadThrowableHandler = null;
! }
  
  
  /**
*************** alias AssertHandler = void function(stri
*** 548,553 ****
--- 552,573 ----
      _assertHandler = handler;
  }
  
+ /**
+ Gets/sets the Throwable filter function for threads. null means no handler is called.
+ */
+ alias FilterThreadThrowableHandler = void function(ref Throwable) @system nothrow;
+ 
+ /// ditto
+ @property FilterThreadThrowableHandler filterThreadThrowableHandler() @trusted nothrow @nogc
+ {
+     return _filterThreadThrowableHandler;
+ }
+ 
+ /// ditto
+ @property void filterThreadThrowableHandler(FilterThreadThrowableHandler handler) @trusted nothrow @nogc
+ {
+     _filterThreadThrowableHandler = handler;
+ }
  
  ///////////////////////////////////////////////////////////////////////////////
  // Overridable Callbacks
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/gc/gcinterface.d gcc-16-20260208/libphobos/libdruntime/core/gc/gcinterface.d
*** gcc-16-20260201/libphobos/libdruntime/core/gc/gcinterface.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/core/gc/gcinterface.d	Sun Feb  8 22:32:16 2026
*************** interface GC
*** 292,303 ****
       * (from the registry hook) should assume this function may not be called
       * on termination if the GC is never initialized.
       *
!      * Most times, this is called from the thread that is the given thread
!      * reference, but it's possible the `thread` parameter is not the same as
!      * the current thread.
!      *
!      * There is no guarantee the thread is still registered as
!      * `ThreadBase.getThis()`.
       */
      void cleanupThread(ThreadBase thread) nothrow @nogc;
  }
--- 292,301 ----
       * (from the registry hook) should assume this function may not be called
       * on termination if the GC is never initialized.
       *
!      * This function is only called from a thread that was started from the D
!      * runtime, and is terminating. The GC can assume the thread is still in
!      * the list of running threads and can be paused for a GC cycle. This is
!      * not called for the main thread which initialized the GC.
       */
      void cleanupThread(ThreadBase thread) nothrow @nogc;
  }
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/int128.d gcc-16-20260208/libphobos/libdruntime/core/int128.d
*** gcc-16-20260201/libphobos/libdruntime/core/int128.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/core/int128.d	Sun Feb  8 22:32:16 2026
*************** Cent neg(Cent c)
*** 114,119 ****
--- 114,133 ----
  }
  
  /*****************************
+  * Absolute value
+  * Note: This is a signed operation.
+  * Params:
+  *      c = Cent to get absolute value of
+  * Returns:
+  *      absolute value of c
+  */
+ pure
+ Cent abs(Cent c)
+ {
+     return (cast(I)c.hi < 0) ? neg(c) : c;
+ }
+ 
+ /*****************************
   * Increment
   * Params:
   *      c = Cent to increment
*************** in (n < Ubits * 2)
*** 237,242 ****
--- 251,259 ----
  
  /*****************************
   * Arithmetic shift right n bits
+  *
+  * Note: This is a signed shift (preserves the sign bit).
+  *
   * Params:
   *      c = Cent to shift
   *      n = number of bits to shift
*************** Cent sub(Cent c1, Cent c2)
*** 417,422 ****
--- 434,440 ----
  
  /****************************
   * Multiply c1 * c2.
+  * Note: The algorithm is identical for both signed and unsigned multiplication.
   * Params:
   *      c1 = operand 1
   *      c2 = operand 2
*************** U udivmod(Cent c1, U c2, out U modulus)
*** 721,726 ****
--- 739,745 ----
  
  /****************************
   * Signed divide c1 / c2.
+  * Note: Performs signed division. Use udiv() for unsigned division.
   * Params:
   *      c1 = dividend
   *      c2 = divisor
*************** Cent divmod(Cent c1, Cent c2, out Cent m
*** 768,773 ****
--- 787,824 ----
          return udivmod(c1, c2, modulus);
  }
  
+ /*****************************
+  * Unsigned remainder c1 % c2.
+  * Params:
+  *      c1 = dividend
+  *      c2 = divisor
+  * Returns:
+  *      remainder c1 % c2
+  */
+ pure
+ Cent urem(Cent c1, Cent c2)
+ {
+     Cent modulus;
+     udivmod(c1, c2, modulus);
+     return modulus;
+ }
+ 
+ /*****************************
+  * Signed remainder c1 % c2.
+  * Params:
+  *      c1 = dividend
+  *      c2 = divisor
+  * Returns:
+  *      remainder c1 % c2
+  */
+ pure
+ Cent rem(Cent c1, Cent c2)
+ {
+     Cent modulus;
+     divmod(c1, c2, modulus);
+     return modulus;
+ }
+ 
  /****************************
   * If c1 > c2 unsigned
   * Params:
*************** unittest
*** 1052,1055 ****
--- 1103,1118 ----
      assert(ror(C7_9, 1) == ror1(C7_9));
      assert(rol(C7_9, 0) == C7_9);
      assert(ror(C7_9, 0) == C7_9);
+ 
+     // Test abs()
+     assert(abs(Cm10) == C10);
+     assert(abs(C10) == C10);
+     assert(abs(C0) == C0);
+ 
+     // Test rem/urem
+     assert(rem(C10, C3) == C1);   // 10 % 3 = 1
+     assert(urem(C10, C3) == C1);
+     assert(rem(Cm10, C3) == Cm1); // -10 % 3 = -1
+ 
+     assert(urem(Cm10, C3) == C0);
  }
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/internal/array/appending.d gcc-16-20260208/libphobos/libdruntime/core/internal/array/appending.d
*** gcc-16-20260201/libphobos/libdruntime/core/internal/array/appending.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/core/internal/array/appending.d	Sun Feb  8 22:32:16 2026
*************** version (D_ProfileGC)
*** 122,128 ****
          version (D_TypeInfo)
          {
              import core.internal.array.utils: TraceHook, gcStatsPure, accumulatePure;
!             mixin(TraceHook!(Tarr.stringof, "_d_arrayappendcTX"));
  
              return _d_arrayappendcTX(px, n);
          }
--- 122,128 ----
          version (D_TypeInfo)
          {
              import core.internal.array.utils: TraceHook, gcStatsPure, accumulatePure;
!             mixin(TraceHook!("Tarr", "_d_arrayappendcTX"));
  
              return _d_arrayappendcTX(px, n);
          }
*************** version (D_ProfileGC)
*** 207,213 ****
          version (D_TypeInfo)
          {
              import core.internal.array.utils: TraceHook, gcStatsPure, accumulatePure;
!             mixin(TraceHook!(Tarr.stringof, "_d_arrayappendT"));
  
              return _d_arrayappendT(x, y);
          }
--- 207,213 ----
          version (D_TypeInfo)
          {
              import core.internal.array.utils: TraceHook, gcStatsPure, accumulatePure;
!             mixin(TraceHook!("Tarr", "_d_arrayappendT"));
  
              return _d_arrayappendT(x, y);
          }
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/internal/array/capacity.d gcc-16-20260208/libphobos/libdruntime/core/internal/array/capacity.d
*** gcc-16-20260201/libphobos/libdruntime/core/internal/array/capacity.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/core/internal/array/capacity.d	Sun Feb  8 22:32:16 2026
*************** private size_t _d_arraysetlengthT_(Tarr
*** 254,261 ****
      }
  
      enum sizeelem = T.sizeof;
!     enum hasPostblit = __traits(hasMember, T, "__postblit");
!     enum hasEnabledPostblit = hasPostblit && !__traits(isDisabled, T.__postblit);
  
      bool overflow = false;
      const newsize = mulu(sizeelem, newlength, overflow);
--- 254,261 ----
      }
  
      enum sizeelem = T.sizeof;
!     enum hasPostblit = __traits(hasMember, T, "__xpostblit");
!     enum hasEnabledPostblit = hasPostblit && !__traits(isDisabled, T.__xpostblit);
  
      bool overflow = false;
      const newsize = mulu(sizeelem, newlength, overflow);
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/internal/array/concatenation.d gcc-16-20260208/libphobos/libdruntime/core/internal/array/concatenation.d
*** gcc-16-20260201/libphobos/libdruntime/core/internal/array/concatenation.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/core/internal/array/concatenation.d	Sun Feb  8 22:32:16 2026
*************** module core.internal.array.concatenation
*** 17,23 ****
   * Returns:
   *      A newly allocated array that contains all the elements from `froms`.
   */
! Tret _d_arraycatnTX(Tret, Tarr...)(auto ref Tarr froms) @trusted
  {
      import core.exception : onOutOfMemoryError;
      import core.internal.array.utils : __arrayAlloc;
--- 17,23 ----
   * Returns:
   *      A newly allocated array that contains all the elements from `froms`.
   */
! Tret _d_arraycatnTX(Tret: Tret_El[], Tret_El, Tarr...)(auto ref Tarr froms) @trusted
  {
      import core.exception : onOutOfMemoryError;
      import core.internal.array.utils : __arrayAlloc;
*************** Tret _d_arraycatnTX(Tret, Tarr...)(auto
*** 44,50 ****
          return res; // Return an empty array if no elements are present
  
      // Allocate memory for mutable arrays using __arrayAlloc
!     res = cast(Tret) __arrayAlloc!(UnqT)(elemSize * totalLen);
  
      if (res.ptr is null)
          onOutOfMemoryError(); // Abort if allocation fails
--- 44,50 ----
          return res; // Return an empty array if no elements are present
  
      // Allocate memory for mutable arrays using __arrayAlloc
!     res = (cast(Tret_El*) &__arrayAlloc!(UnqT)(elemSize * totalLen)[0])[0 .. totalLen];
  
      if (res.ptr is null)
          onOutOfMemoryError(); // Abort if allocation fails
*************** version (D_ProfileGC)
*** 174,180 ****
          version (D_TypeInfo)
          {
              import core.internal.array.utils: TraceHook, gcStatsPure, accumulatePure;
!             mixin(TraceHook!(Tarr.stringof, "_d_arraycatnTX"));
  
              import core.lifetime: forward;
              return _d_arraycatnTX!Tret(forward!froms);
--- 174,180 ----
          version (D_TypeInfo)
          {
              import core.internal.array.utils: TraceHook, gcStatsPure, accumulatePure;
!             mixin(TraceHook!("Tarr", "_d_arraycatnTX"));
  
              import core.lifetime: forward;
              return _d_arraycatnTX!Tret(forward!froms);
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/internal/array/construction.d gcc-16-20260208/libphobos/libdruntime/core/internal/array/construction.d
*** gcc-16-20260201/libphobos/libdruntime/core/internal/array/construction.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/core/internal/array/construction.d	Sun Feb  8 22:32:16 2026
*************** unittest
*** 463,482 ****
  version (D_ProfileGC)
  {
      /**
!     * TraceGC wrapper around $(REF _d_newitemT, core,lifetime).
      */
      T[] _d_newarrayTTrace(T)(size_t length, bool isShared, string file = __FILE__, int line = __LINE__, string funcname = __FUNCTION__) @trusted
      {
          version (D_TypeInfo)
          {
              import core.internal.array.utils : TraceHook, gcStatsPure, accumulatePure;
!             mixin(TraceHook!(T.stringof, "_d_newarrayT"));
  
              return _d_newarrayT!T(length, isShared);
          }
          else
              assert(0, "Cannot create new array if compiling without support for runtime type information!");
      }
  }
  
  /**
--- 463,498 ----
  version (D_ProfileGC)
  {
      /**
!     * TraceGC wrapper around $(REF _d_newarrayT, core,internal.array.construction).
      */
      T[] _d_newarrayTTrace(T)(size_t length, bool isShared, string file = __FILE__, int line = __LINE__, string funcname = __FUNCTION__) @trusted
      {
          version (D_TypeInfo)
          {
              import core.internal.array.utils : TraceHook, gcStatsPure, accumulatePure;
!             mixin(TraceHook!("T", "_d_newarrayT"));
  
              return _d_newarrayT!T(length, isShared);
          }
          else
              assert(0, "Cannot create new array if compiling without support for runtime type information!");
      }
+ 
+     /**
+     * TraceGC wrapper around $(REF _d_newarrayU, core,internal.array.construction).
+     */
+     T[] _d_newarrayUTrace(T)(size_t length, bool isShared, string file = __FILE__, int line = __LINE__, string funcname = __FUNCTION__) @trusted
+     {
+         version (D_TypeInfo)
+         {
+             import core.internal.array.utils : TraceHook, gcStatsPure, accumulatePure;
+             mixin(TraceHook!("T", "_d_newarrayU"));
+ 
+             return _d_newarrayUPureNothrow!T(length, isShared);
+         }
+         else
+             assert(0, "Cannot create new array if compiling without support for runtime type information!");
+     }
  }
  
  /**
*************** version (D_ProfileGC)
*** 602,608 ****
          version (D_TypeInfo)
          {
              import core.internal.array.utils : TraceHook, gcStatsPure, accumulatePure;
!             mixin(TraceHook!(T.stringof, "_d_newarraymTX"));
  
              return _d_newarraymTX!(Tarr, T)(dims, isShared);
          }
--- 618,624 ----
          version (D_TypeInfo)
          {
              import core.internal.array.utils : TraceHook, gcStatsPure, accumulatePure;
!             mixin(TraceHook!("T", "_d_newarraymTX"));
  
              return _d_newarraymTX!(Tarr, T)(dims, isShared);
          }
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/internal/array/equality.d gcc-16-20260208/libphobos/libdruntime/core/internal/array/equality.d
*** gcc-16-20260201/libphobos/libdruntime/core/internal/array/equality.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/core/internal/array/equality.d	Sun Feb  8 22:32:16 2026
*************** bool __equals(T1, T2)(scope T1[] lhs, sc
*** 27,32 ****
--- 27,47 ----
      return (cast(PureType)&isEqual!(T1,T2))(lhs, rhs, lhs.length);
  }
  
+ pragma(inline, true)
+ bool __equals(T1, T2, size_t N)(scope ref T1[N] lhs, scope T2[] rhs) @trusted {
+     return __equals(lhs[], rhs);
+ }
+ 
+ pragma(inline, true)
+ bool __equals(T1, T2, size_t N)(scope T1[] lhs, scope ref T2[N] rhs) @trusted {
+     return __equals(lhs, rhs[]);
+ }
+ 
+ pragma(inline, true)
+ bool __equals(T1, T2, size_t N, size_t M)(scope ref T1[N] lhs, scope ref T2[M] rhs) @trusted {
+     return __equals(lhs[], rhs[]);
+ }
+ 
  /******************************
   * Helper function for __equals().
   * Outlined to enable __equals() to be inlined, as dmd cannot inline loops.
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/internal/array/utils.d gcc-16-20260208/libphobos/libdruntime/core/internal/array/utils.d
*** gcc-16-20260201/libphobos/libdruntime/core/internal/array/utils.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/core/internal/array/utils.d	Sun Feb  8 22:32:16 2026
*************** version (D_ProfileGC)
*** 41,56 ****
      /**
       * TraceGC wrapper generator around the runtime hook `Hook`.
       * Params:
!      *   Type = The type of hook to report to accumulate
       *   Hook = The name hook to wrap
       */
!     template TraceHook(string Type, string Hook)
      {
          const char[] TraceHook = q{
              import core.internal.array.utils : gcStatsPure, accumulatePure;
  
              pragma(inline, false);
!             string name = } ~ "`" ~ Type ~ "`;" ~ q{
  
              // FIXME: use rt.tracegc.accumulator when it is accessable in the future.
              ulong currentlyAllocated = gcStatsPure().allocatedInCurrentThread;
--- 41,56 ----
      /**
       * TraceGC wrapper generator around the runtime hook `Hook`.
       * Params:
!      *   TypeIdent = The symbol of the type of hook to report to accumulate
       *   Hook = The name hook to wrap
       */
!     template TraceHook(string TypeIdent, string Hook)
      {
          const char[] TraceHook = q{
              import core.internal.array.utils : gcStatsPure, accumulatePure;
  
              pragma(inline, false);
!             string name = } ~ TypeIdent ~ q{.stringof;
  
              // FIXME: use rt.tracegc.accumulator when it is accessable in the future.
              ulong currentlyAllocated = gcStatsPure().allocatedInCurrentThread;
*************** version (D_ProfileGC)
*** 91,97 ****
      {
          version (D_TypeInfo)
          {
!             mixin(TraceHook!(T.stringof, __traits(identifier, Hook)));
              return Hook(parameters);
          }
          else
--- 91,97 ----
      {
          version (D_TypeInfo)
          {
!             mixin(TraceHook!("T", __traits(identifier, Hook)));
              return Hook(parameters);
          }
          else
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/internal/cast_.d gcc-16-20260208/libphobos/libdruntime/core/internal/cast_.d
*** gcc-16-20260201/libphobos/libdruntime/core/internal/cast_.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/core/internal/cast_.d	Sun Feb  8 22:32:16 2026
*************** private void* _d_interface_cast(To)(void
*** 132,186 ****
  */
  void* _d_cast(To, From)(From o) @trusted
  {
!     static if (is(From == class) && is(To == interface))
      {
          return _d_dynamic_cast!To(o);
      }
! 
!     static if (is(From == class) && is(To == class))
      {
-         static if (is(From FromSupers == super) && is(To ToSupers == super))
-         {
-             /* Check for:
-             *  class A { }
-             *  final class B : A { }
-             *  ... cast(B) A ...
-             */
-             // Multiple inheritance is not allowed, so we can safely assume
-             // that the second super can only be an interface.
-             static if (__traits(isFinalClass, To) && is(ToSupers[0] == From) &&
-                        ToSupers.length == 1 && FromSupers.length <= 1)
-             {
-                 return _d_paint_cast!To(o);
-             }
-         }
  
!         static if (is (To : From))
          {
!             static if (is (To == From))
!             {
!                 return cast(void*)o;
!             }
!             else
!             {
!                 return _d_class_cast!To(o);
!             }
          }
! 
!         return null;
!     }
! 
!     static if (is(From == interface))
!     {
!         static if (is(From == To))
          {
!             return cast(void*)o;
          }
          else
          {
!             return _d_interface_cast!To(cast(void*)o);
          }
      }
      else
      {
          return null;
--- 132,175 ----
  */
  void* _d_cast(To, From)(From o) @trusted
  {
!     static if (is(From == To))
!     {
!         return *cast(void**) &o;
!     }
!     else static if (is(From == class) && is(To == interface))
      {
          return _d_dynamic_cast!To(o);
      }
!     else static if (is(From == class) && is(To == class))
      {
  
!         /* Check for:
!         *  class A { }
!         *  final class B : A { }
!         *  ... cast(B) A ...
!         */
!         /* Multiple inheritance is not allowed, so we can safely assume
!          * that the second super can only be an interface.
!          */
!         static if (is(From FromSupers == super) && is(To ToSupers == super) &&
!             __traits(isFinalClass, To) && is(ToSupers[0] == From) &&
!             ToSupers.length == 1 && FromSupers.length <= 1)
          {
!             return _d_paint_cast!To(o);
          }
!         else static if (is (To : From))
          {
!             return _d_class_cast!To(o);
          }
          else
          {
!             return null;
          }
      }
+     else static if (is(From == interface))
+     {
+         return _d_interface_cast!To(cast(void*)o);
+     }
      else
      {
          return null;
*************** private bool _d_isbaseof2(To)(scope Clas
*** 309,311 ****
--- 298,310 ----
      assert(_d_cast!I1(ci) !is null); // I3(c) to I1
      assert(_d_interface_cast!I1(cast(void*)ci) !is null);
  }
+ 
+ // https://github.com/dlang/dmd/issues/21646
+ @system pure unittest {
+     static class C {
+         @disable void opCast(T)();
+     }
+ 
+     const(C) const_c = new C();
+     C mutable_c = cast() const_c;
+ }
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/internal/container/array.d gcc-16-20260208/libphobos/libdruntime/core/internal/container/array.d
*** gcc-16-20260201/libphobos/libdruntime/core/internal/container/array.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/core/internal/container/array.d	Sun Feb  8 22:32:16 2026
*************** unittest
*** 215,220 ****
--- 215,227 ----
      {
          // Overflow ary.length.
          auto ary = Array!size_t(cast(size_t*)0xdeadbeef, -1);
+         scope(failure)
+         {
+             // prevent destructor from cleaning up invalid memory.
+             ary._length = 0;
+             ary._ptr = null;
+         }
+ 
          ary.insertBack(0);
      }
      catch (OutOfMemoryError)
*************** unittest
*** 224,229 ****
--- 231,242 ----
      {
          // Overflow requested memory size for common.xrealloc().
          auto ary = Array!size_t(cast(size_t*)0xdeadbeef, -2);
+         scope(failure)
+         {
+             // prevent destructor from cleaning up invalid memory.
+             ary._length = 0;
+             ary._ptr = null;
+         }
          ary.insertBack(0);
      }
      catch (OutOfMemoryError)
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/internal/convert.d gcc-16-20260208/libphobos/libdruntime/core/internal/convert.d
*** gcc-16-20260201/libphobos/libdruntime/core/internal/convert.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/core/internal/convert.d	Sun Feb  8 22:32:16 2026
*************** const(ubyte)[] toUbyte(T)(return scope c
*** 651,706 ****
      return cast(const(ubyte)[])arr;
  }
  
! @trusted pure nothrow @nogc
! const(ubyte)[] toUbyte(T)(return scope const T[] arr) if (T.sizeof > 1)
  {
!     if (__ctfe)
      {
!         ubyte[] ret = ctfe_alloc(T.sizeof * arr.length);
!         static if (is(T EType == enum)) // Odd style is to avoid template instantiation in most cases.
!             alias E = OriginalType!EType;
!         else
!             alias E = T;
!         static if (is(E == struct) || is(E == union) || __traits(isStaticArray, E) || !is(typeof(arr[0] is null)))
!         {
!             size_t offset = 0;
!             foreach (ref cur; arr)
!             {
!                 ret[offset .. offset + T.sizeof] = toUbyte(cur)[0 .. T.sizeof];
!                 offset += T.sizeof;
!             }
!         }
!         else
          {
!             foreach (cur; arr)
!                 assert(cur is null, "Unable to compute byte representation of non-null pointer at compile time");
          }
-         return ret;
      }
      else
      {
!         return (cast(const(ubyte)*)(arr.ptr))[0 .. T.sizeof*arr.length];
      }
  }
  
  @trusted pure nothrow @nogc
! const(ubyte)[] toUbyte(T)(const ref scope T val) if (__traits(isIntegral, T) && !is(T == enum) && !is(T == __vector))
  {
      static if (T.sizeof == 1)
      {
!         pragma(inline, true);
!         if (__ctfe)
!         {
!             ubyte[] result = ctfe_alloc(1);
!             result[0] = cast(ubyte) val;
!             return result;
!         }
!         else
!         {
!             return (cast(const(ubyte)*)&val)[0 .. T.sizeof];
!         }
      }
!     else if (__ctfe)
      {
          import core.internal.traits : Unqual;
          ubyte[] tmp = ctfe_alloc(T.sizeof);
--- 651,699 ----
      return cast(const(ubyte)[])arr;
  }
  
! private const(ubyte)[] toUbyte_array_ctfe(T)(return scope const T[] arr)
  {
!     pragma(inline, false);
!     ubyte[] ret = ctfe_alloc(T.sizeof * arr.length);
!     static if (is(T EType == enum)) // Odd style is to avoid template instantiation in most cases.
!         alias E = OriginalType!EType;
!     else
!         alias E = T;
!     static if (is(E == struct) || is(E == union) || __traits(isStaticArray, E) || !is(typeof(arr[0] is null)))
      {
!         size_t offset = 0;
!         foreach (ref cur; arr)
          {
!             ret[offset .. offset + T.sizeof] = toUbyte(cur)[0 .. T.sizeof];
!             offset += T.sizeof;
          }
      }
      else
      {
!         foreach (cur; arr)
!             assert(cur is null, "Unable to compute byte representation of non-null pointer at compile time");
      }
+     return ret;
  }
  
  @trusted pure nothrow @nogc
! const(ubyte)[] toUbyte(T)(return scope const T[] arr) if (T.sizeof > 1)
  {
+     pragma(inline, true);
+     return __ctfe ? toUbyte_array_ctfe(arr)
+                   : (cast(const(ubyte)*)(arr.ptr))[0 .. T.sizeof*arr.length];
+ }
+ 
+ private const(ubyte)[] toUbyte_integral_ctfe(T)(const return ref scope T val)
+ {
+     pragma(inline, false);
      static if (T.sizeof == 1)
      {
!         ubyte[] result = ctfe_alloc(1);
!         result[0] = cast(ubyte) val;
!         return result;
      }
!     else
      {
          import core.internal.traits : Unqual;
          ubyte[] tmp = ctfe_alloc(T.sizeof);
*************** const(ubyte)[] toUbyte(T)(const ref scop
*** 715,733 ****
          }
          return tmp;
      }
-     else
-     {
-         return (cast(const(ubyte)*)&val)[0 .. T.sizeof];
-     }
  }
  
  @trusted pure nothrow @nogc
! const(ubyte)[] toUbyte(T)(const ref scope T val) if (is(T == __vector))
  {
      pragma(inline, true);
!     if (!__ctfe)
!         return (cast(const ubyte*) &val)[0 .. T.sizeof];
!     else static if (is(typeof(val[0]) : void))
          assert(0, "Unable to compute byte representation of " ~ T.stringof ~ " at compile time.");
      else
      {
--- 708,727 ----
          }
          return tmp;
      }
  }
  
  @trusted pure nothrow @nogc
! const(ubyte)[] toUbyte(T)(const ref scope T val) if (__traits(isIntegral, T) && !is(T == enum) && !is(T == __vector))
  {
      pragma(inline, true);
!     return __ctfe ? toUbyte_integral_ctfe(val)
!                   : (cast(const ubyte*) &val)[0 .. T.sizeof];
! }
! 
! private const(ubyte)[] toUbyte_vector_ctfe(T)(const return ref scope T val)
! {
!     pragma(inline, false);
!     static if (is(typeof(val[0]) : void))
          assert(0, "Unable to compute byte representation of " ~ T.stringof ~ " at compile time.");
      else
      {
*************** const(ubyte)[] toUbyte(T)(const ref scop
*** 745,762 ****
  }
  
  @trusted pure nothrow @nogc
  const(ubyte)[] toUbyte(T)(const ref return scope T val) if (is(T == enum))
  {
      pragma(inline, true);
!     if (__ctfe)
!     {
!         static if (is(T V == enum)){}
!         return toUbyte(*cast(const V*) &val);
!     }
!     else
!     {
!         return (cast(const(ubyte)*)&val)[0 .. T.sizeof];
!     }
  }
  
  nothrow pure @safe unittest
--- 739,764 ----
  }
  
  @trusted pure nothrow @nogc
+ const(ubyte)[] toUbyte(T)(const ref scope T val) if (is(T == __vector))
+ {
+     pragma(inline, true);
+     return __ctfe ? toUbyte_vector_ctfe(val)
+                   : (cast(const ubyte*) &val)[0 .. T.sizeof];
+ }
+ 
+ private const(ubyte)[] toUbyte_enum_ctfe(T)(const return ref scope T val)
+ {
+     pragma(inline, false);
+     static if (is(T V == enum)){}
+     return toUbyte(*cast(const V*) &val);
+ }
+ 
+ @trusted pure nothrow @nogc
  const(ubyte)[] toUbyte(T)(const ref return scope T val) if (is(T == enum))
  {
      pragma(inline, true);
!     return __ctfe ? toUbyte_enum_ctfe(val)
!                   : (cast(const(ubyte)*)&val)[0 .. T.sizeof];
  }
  
  nothrow pure @safe unittest
*************** nothrow pure @safe unittest
*** 768,821 ****
      enum ctfe_works = (() { Month x = Month.jan; return toUbyte(x).length > 0; })();
  }
  
  @trusted pure nothrow @nogc
  const(ubyte)[] toUbyte(T)(const ref T val) if (is(T == delegate) || is(T : V*, V) && __traits(getAliasThis, T).length == 0)
  {
      pragma(inline, true);
!     if (__ctfe)
!     {
!         if (val !is null) assert(0, "Unable to compute byte representation of non-null pointer at compile time");
!         return ctfe_alloc(T.sizeof);
!     }
!     else
      {
!         return (cast(const(ubyte)*)&val)[0 .. T.sizeof];
      }
  }
  
  @trusted pure nothrow @nogc
  const(ubyte)[] toUbyte(T)(const return ref scope T val) if (is(T == struct) || is(T == union))
  {
      pragma(inline, true);
!     if (__ctfe)
!     {
!         ubyte[] bytes = ctfe_alloc(T.sizeof);
!         foreach (key, ref cur; val.tupleof)
!         {
!             static if (is(typeof(cur) EType == enum)) // Odd style is to avoid template instantiation in most cases.
!                 alias CurType = OriginalType!EType;
!             else
!                 alias CurType = typeof(cur);
!             static if (is(CurType == struct) || is(CurType == union) || __traits(isStaticArray, CurType) || !is(typeof(cur is null)))
!             {
!                 bytes[val.tupleof[key].offsetof .. val.tupleof[key].offsetof + CurType.sizeof] = toUbyte(cur)[];
!             }
!             else
!             {
!                 assert(cur is null, "Unable to compute byte representation of non-null reference field at compile time");
!                 //skip, because val bytes are zeros
!             }
!         }
!         return bytes;
!     }
!     else
!     {
!         // We're escaping a reference to `val` here because we cannot express
!         // ref return + scope, it's currently seen as ref + return scope
!         // https://issues.dlang.org/show_bug.cgi?id=22541
!         // Once fixed, the @system lambda should be removed
!         return (() @system => (cast(const(ubyte)*)&val)[0 .. T.sizeof])();
!     }
  }
  
  // Strips off all `enum`s from type `T`.
--- 770,819 ----
      enum ctfe_works = (() { Month x = Month.jan; return toUbyte(x).length > 0; })();
  }
  
+ private const(ubyte)[] toUbyte_delegate_ctfe(T)(const return ref scope T val)
+ {
+     pragma(inline, false);
+     if (val !is null) assert(0, "Unable to compute byte representation of non-null pointer at compile time");
+     return ctfe_alloc(T.sizeof);
+ }
+ 
  @trusted pure nothrow @nogc
  const(ubyte)[] toUbyte(T)(const ref T val) if (is(T == delegate) || is(T : V*, V) && __traits(getAliasThis, T).length == 0)
  {
      pragma(inline, true);
!     return __ctfe ? toUbyte_delegate_ctfe(val)
!                   : (cast(const(ubyte)*)&val)[0 .. T.sizeof];
! }
! 
! private const(ubyte)[] toUbyte_aggregate_ctfe(T)(const return ref scope T val)
! {
!     pragma(inline, false);
!     ubyte[] bytes = ctfe_alloc(T.sizeof);
!     foreach (key, ref cur; val.tupleof)
      {
!         static if (is(typeof(cur) EType == enum)) // Odd style is to avoid template instantiation in most cases.
!             alias CurType = OriginalType!EType;
!         else
!             alias CurType = typeof(cur);
!         static if (is(CurType == struct) || is(CurType == union) || __traits(isStaticArray, CurType) || !is(typeof(cur is null)))
!         {
!             bytes[val.tupleof[key].offsetof .. val.tupleof[key].offsetof + CurType.sizeof] = toUbyte(cur)[];
!         }
!         else
!         {
!             assert(cur is null, "Unable to compute byte representation of non-null reference field at compile time");
!             //skip, because val bytes are zeros
!         }
      }
+     return bytes;
  }
  
  @trusted pure nothrow @nogc
  const(ubyte)[] toUbyte(T)(const return ref scope T val) if (is(T == struct) || is(T == union))
  {
      pragma(inline, true);
!     return __ctfe ? toUbyte_aggregate_ctfe(val)
!                   : (cast(const(ubyte)*)&val)[0 .. T.sizeof];
  }
  
  // Strips off all `enum`s from type `T`.
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/internal/gc/bits.d gcc-16-20260208/libphobos/libdruntime/core/internal/gc/bits.d
*** gcc-16-20260201/libphobos/libdruntime/core/internal/gc/bits.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/core/internal/gc/bits.d	Sun Feb  8 22:32:16 2026
***************
*** 7,13 ****
   */
  module core.internal.gc.bits;
  
! import core.internal.gc.os : os_mem_map, os_mem_unmap, HaveFork;
  
  import core.bitop;
  import core.exception : onOutOfMemoryError;
--- 7,13 ----
   */
  module core.internal.gc.bits;
  
! import core.internal.gc.os;
  
  import core.bitop;
  import core.exception : onOutOfMemoryError;
*************** struct GCBits
*** 37,48 ****
      {
          if (data)
          {
!             static if (!HaveFork)
                  free(data);
!             else if (share)
!                 os_mem_unmap(data, nwords * data[0].sizeof);
              else
!                 free(data);
              data = null;
          }
      }
--- 37,48 ----
      {
          if (data)
          {
!             if (!AllocSupportsShared || !share)
                  free(data);
!             else static if (AllocSupportsShared)
!                 os_mem_unmap_shared(data, nwords * data[0].sizeof);
              else
!                 assert(false); // unreachable
              data = null;
          }
      }
*************** struct GCBits
*** 50,61 ****
      void alloc(size_t nbits, bool share = false) nothrow
      {
          this.nbits = nbits;
!         static if (!HaveFork)
              data = cast(typeof(data[0])*)calloc(nwords, data[0].sizeof);
!         else if (share)
!             data = cast(typeof(data[0])*)os_mem_map(nwords * data[0].sizeof, true); // Allocate as MAP_SHARED
          else
!             data = cast(typeof(data[0])*)calloc(nwords, data[0].sizeof);
          if (!data)
              onOutOfMemoryError();
      }
--- 50,61 ----
      void alloc(size_t nbits, bool share = false) nothrow
      {
          this.nbits = nbits;
!         if (!AllocSupportsShared || !share)
              data = cast(typeof(data[0])*)calloc(nwords, data[0].sizeof);
!         else static if (AllocSupportsShared)
!             data = cast(typeof(data[0])*)os_mem_map_shared(nwords * data[0].sizeof); // Allocate as MAP_SHARED
          else
!             assert(false); // unreachable
          if (!data)
              onOutOfMemoryError();
      }
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/internal/gc/impl/conservative/gc.d gcc-16-20260208/libphobos/libdruntime/core/internal/gc/impl/conservative/gc.d
*** gcc-16-20260201/libphobos/libdruntime/core/internal/gc/impl/conservative/gc.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/core/internal/gc/impl/conservative/gc.d	Sun Feb  8 22:32:16 2026
*************** private
*** 97,106 ****
          // to avoid inlining - see https://issues.dlang.org/show_bug.cgi?id=13725.
          noreturn onInvalidMemoryOperationError(void* pretend_sideffect = null, string file = __FILE__, size_t line = __LINE__) @trusted pure nothrow @nogc;
          noreturn onOutOfMemoryError(void* pretend_sideffect = null, string file = __FILE__, size_t line = __LINE__) @trusted pure nothrow @nogc;
- 
-         version (COLLECT_FORK)
-             version (OSX)
-                 pid_t __fork() nothrow;
      }
  
      enum
--- 97,102 ----
*************** class ConservativeGC : GC
*** 1517,1523 ****
          auto existingUsed = slice.length + offset;
  
          size_t typeInfoSize = (info.attr & BlkAttr.STRUCTFINAL) ? size_t.sizeof : 0;
!         if (__setArrayAllocLengthImpl(info, offset + newUsed, atomic, existingUsed, typeInfoSize))
          {
              // could expand without extending
              if (!bic && !atomic)
--- 1513,1519 ----
          auto existingUsed = slice.length + offset;
  
          size_t typeInfoSize = (info.attr & BlkAttr.STRUCTFINAL) ? size_t.sizeof : 0;
!         if (__setArrayAllocLengthImpl(info, newUsed, atomic, existingUsed, typeInfoSize))
          {
              // could expand without extending
              if (!bic && !atomic)
*************** struct Gcx
*** 1804,1810 ****
          }
          debug(INVARIANT) initialized = true;
          version (COLLECT_FORK)
!             shouldFork = config.fork;
  
      }
  
--- 1800,1806 ----
          }
          debug(INVARIANT) initialized = true;
          version (COLLECT_FORK)
!             shouldFork = AllocSupportsShared && config.fork;
  
      }
  
*************** struct Gcx
*** 3191,3201 ****
          {
              fflush(null); // avoid duplicated FILE* output
          }
!         version (OSX)
!         {
!             auto pid = __fork(); // avoids calling handlers (from libc source code)
!         }
!         else version (linux)
          {
              // clone() fits better as we don't want to do anything but scanning in the child process.
              // no fork-handlers are called, so we can avoid deadlocks due to malloc locks. Probably related:
--- 3187,3193 ----
          {
              fflush(null); // avoid duplicated FILE* output
          }
!         version (linux)
          {
              // clone() fits better as we don't want to do anything but scanning in the child process.
              // no fork-handlers are called, so we can avoid deadlocks due to malloc locks. Probably related:
*************** struct Gcx
*** 3213,3223 ****
              auto stack = stackbuf.ptr + (isStackGrowingDown ? stackbuf.length : 0);
              auto pid = clone(&wrap_delegate, stack, flags, &dg);
          }
          else
          {
!             fork_needs_lock = false;
!             auto pid = fork();
!             fork_needs_lock = true;
          }
          switch (pid)
          {
--- 3205,3217 ----
              auto stack = stackbuf.ptr + (isStackGrowingDown ? stackbuf.length : 0);
              auto pid = clone(&wrap_delegate, stack, flags, &dg);
          }
+         else static if (__traits(compiles, _Fork))
+         {
+             auto pid = _Fork();
+         }
          else
          {
!             auto pid = -1;  // fork based GC not supported
          }
          switch (pid)
          {
*************** Lmark:
*** 3493,3517 ****
          // before a fork.
          // This must not happen if fork is called from the GC with the lock already held
  
!         __gshared bool fork_needs_lock = true; // racing condition with cocurrent calls of fork?
! 
  
          extern(C) static void _d_gcx_atfork_prepare()
          {
!             if (instance && fork_needs_lock)
                  ConservativeGC.lockNR();
          }
  
          extern(C) static void _d_gcx_atfork_parent()
          {
!             if (instance && fork_needs_lock)
                  ConservativeGC.gcLock.unlock();
          }
  
          extern(C) static void _d_gcx_atfork_child()
          {
!             if (instance && fork_needs_lock)
              {
                  ConservativeGC.gcLock.unlock();
  
                  // make sure the threads and event handles are reinitialized in a fork
--- 3487,3520 ----
          // before a fork.
          // This must not happen if fork is called from the GC with the lock already held
  
!         __gshared int fork_cancel_state = 0;
  
          extern(C) static void _d_gcx_atfork_prepare()
          {
!             static if (__traits(compiles, os_unblock_gc_signals))
!                 os_unblock_gc_signals();
! 
!             if (instance)
!             {
                  ConservativeGC.lockNR();
+                 fork_cancel_state = thread_cancelDisable();
+             }
          }
  
          extern(C) static void _d_gcx_atfork_parent()
          {
!             if (instance)
!             {
!                 thread_cancelRestore(fork_cancel_state);
                  ConservativeGC.gcLock.unlock();
+             }
          }
  
          extern(C) static void _d_gcx_atfork_child()
          {
!             if (instance)
              {
+                 thread_cancelRestore(fork_cancel_state);
                  ConservativeGC.gcLock.unlock();
  
                  // make sure the threads and event handles are reinitialized in a fork
*************** unittest
*** 5280,5285 ****
--- 5283,5289 ----
  // https://issues.dlang.org/show_bug.cgi?id=19281
  debug (SENTINEL) {} else // cannot allow >= 4 GB with SENTINEL
  debug (MEMSTOMP) {} else // might take too long to actually touch the memory
+ version (OnlyLowMemUnittests) {} else
  version (D_LP64) unittest
  {
      static if (__traits(compiles, os_physical_mem))
*************** unittest
*** 5393,5400 ****
--- 5397,5430 ----
      }
  }
  
+ // https://github.com/dlang/dmd/issues/22004
+ @safe unittest
+ {
+ outer:
+     foreach (i; 1 .. 100)
+     {
+         foreach (j; 0 .. i)
+         {
+             int[] orig;
+             orig.length = i;
+             if (orig.capacity == orig.length)
+                 // skip legitimate realloc cases
+                 continue outer;
+ 
+             int[] slice = orig[j .. $];
+             assert(slice.capacity != 0);
+ 
+             auto ptr = &slice[0];
+             slice.length += 1;
+             // should not have realloc'd
+             assert(&slice[0] is ptr);
+         }
+     }
+ }
+ 
  // https://github.com/dlang/dmd/issues/21615
  debug(SENTINEL) {} else // no additional capacity with SENTINEL
+ version (OnlyLowMemUnittests) {} else
  @safe unittest
  {
      size_t numReallocations = 0;
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/internal/gc/os.d gcc-16-20260208/libphobos/libdruntime/core/internal/gc/os.d
*** gcc-16-20260201/libphobos/libdruntime/core/internal/gc/os.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/core/internal/gc/os.d	Sun Feb  8 22:32:16 2026
*************** else version (Posix)
*** 33,42 ****
      else version (WatchOS)
          version = Darwin;
  
!     public import core.sys.posix.unistd : fork, pid_t;
!     import core.stdc.errno : ECHILD, EINTR, errno;
!     import core.sys.posix.sys.mman : MAP_ANON, MAP_FAILED, MAP_PRIVATE, MAP_SHARED, mmap, munmap, PROT_READ, PROT_WRITE;
!     import core.sys.posix.sys.wait : waitpid, WNOHANG;
  
  
      /// Possible results for the wait_pid() function.
--- 33,53 ----
      else version (WatchOS)
          version = Darwin;
  
!     public import core.sys.posix.unistd : pid_t;
! 
!     static import core.sys.posix.unistd;
!     static if (__traits(compiles, core.sys.posix.unistd._Fork))
!         public import core.sys.posix.unistd : _Fork;
! 
!     static import core.sys.posix.sys.mman;
!     static if (__traits(compiles, core.sys.posix.sys.mman.mmap))
!         import core.sys.posix.sys.mman : MAP_ANON, MAP_FAILED, MAP_PRIVATE, MAP_SHARED, mmap, munmap, PROT_READ, PROT_WRITE;
! 
!     static import core.sys.posix.stdlib;
!     static if (__traits(compiles, core.sys.posix.stdlib.valloc))
!         import core.sys.posix.stdlib : valloc;
! 
!     import core.stdc.stdlib : free, malloc;
  
  
      /// Possible results for the wait_pid() function.
*************** else version (Posix)
*** 57,62 ****
--- 68,75 ----
      ChildStatus wait_pid(pid_t pid, bool block = true) nothrow @nogc
      {
          import core.exception : onForkError;
+         import core.stdc.errno : ECHILD, EINTR, errno;
+         import core.sys.posix.sys.wait : waitpid, WNOHANG;
  
          int status = void;
          pid_t waited_pid = void;
*************** else version (Posix)
*** 76,81 ****
--- 89,101 ----
          return ChildStatus.done;
      }
  
+     version (DragonFlyBSD)
+         version = GCSignalsUnblock;
+     version (FreeBSD)
+         version = GCSignalsUnblock;
+     version (Solaris)
+         version = GCSignalsUnblock;
+ 
      //version = GC_Use_Alloc_MMap;
  }
  else
*************** else static if (is(typeof(malloc)))
*** 97,129 ****
  else static assert(false, "No supported allocation methods available.");
  +/
  
! static if (is(typeof(VirtualAlloc))) // version (GC_Use_Alloc_Win32)
  {
      /**
-     * Indicates if an implementation supports fork().
-     *
-     * The value shown here is just demostrative, the real value is defined based
-     * on the OS it's being compiled in.
-     * enum HaveFork = true;
-     */
-     enum HaveFork = false;
- 
-     /**
       * Map memory.
       */
      void *os_mem_map(size_t nbytes) nothrow @nogc
      {
!         return VirtualAlloc(null, nbytes, MEM_RESERVE | MEM_COMMIT,
!                 PAGE_READWRITE);
      }
  
  
      /**
!      * Unmap memory allocated with os_mem_map().
       * Returns:
       *      0       success
       *      !=0     failure
       */
      int os_mem_unmap(void *base, size_t nbytes) nothrow @nogc
      {
          return cast(int)(VirtualFree(base, 0, MEM_RELEASE) == 0);
--- 117,171 ----
  else static assert(false, "No supported allocation methods available.");
  +/
  
! version (CoreDdoc)
  {
      /**
       * Map memory.
       */
      void *os_mem_map(size_t nbytes) nothrow @nogc
      {
!         return null;
      }
  
+     /**
+      * Unmap memory allocated with os_mem_map()
+      * Returns:
+      *      0       success
+      *      !=0     failure
+      */
+     int os_mem_unmap(void *base, size_t nbytes) nothrow @nogc
+     {
+         return 0;
+     }
  
      /**
!      * Map memory that will be shared by child processes.
!      * Note: only available if the OS supports this feature. Use `AllocSupportsShared` to test.
!      */
!     void *os_mem_map_shared(size_t nbytes) nothrow @nogc
!     {
!         return null;
!     }
! 
!     /**
!      * Unmap memory allocated with os_mem_map_shared()
       * Returns:
       *      0       success
       *      !=0     failure
       */
+     int os_mem_unmap_shared(void *base, size_t nbytes) nothrow @nogc
+     {
+         return 0;
+     }
+ }
+ else static if (is(typeof(VirtualAlloc))) // version (GC_Use_Alloc_Win32)
+ {
+     void *os_mem_map(size_t nbytes) nothrow @nogc
+     {
+         return VirtualAlloc(null, nbytes, MEM_RESERVE | MEM_COMMIT,
+                 PAGE_READWRITE);
+     }
+ 
      int os_mem_unmap(void *base, size_t nbytes) nothrow @nogc
      {
          return cast(int)(VirtualFree(base, 0, MEM_RELEASE) == 0);
*************** static if (is(typeof(VirtualAlloc))) //
*** 131,156 ****
  }
  else static if (is(typeof(mmap)))  // else version (GC_Use_Alloc_MMap)
  {
!     enum HaveFork = true;
  
!     void *os_mem_map(size_t nbytes, bool share = false) nothrow @nogc
!     {   void *p;
  
!         auto map_f = share ? MAP_SHARED : MAP_PRIVATE;
!         p = mmap(null, nbytes, PROT_READ | PROT_WRITE, map_f | MAP_ANON, -1, 0);
          return (p == MAP_FAILED) ? null : p;
      }
  
! 
!     int os_mem_unmap(void *base, size_t nbytes) nothrow @nogc
      {
          return munmap(base, nbytes);
      }
  }
  else static if (is(typeof(valloc))) // else version (GC_Use_Alloc_Valloc)
  {
-     enum HaveFork = false;
- 
      void *os_mem_map(size_t nbytes) nothrow @nogc
      {
          return valloc(nbytes);
--- 173,202 ----
  }
  else static if (is(typeof(mmap)))  // else version (GC_Use_Alloc_MMap)
  {
!     void *os_mem_map(size_t nbytes) nothrow @nogc
!     {
!         void* p = mmap(null, nbytes, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0);
!         return (p == MAP_FAILED) ? null : p;
!     }
  
!     int os_mem_unmap(void *base, size_t nbytes) nothrow @nogc
!     {
!         return munmap(base, nbytes);
!     }
  
!     void *os_mem_map_shared(size_t nbytes) nothrow @nogc
!     {
!         void* p = mmap(null, nbytes, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANON, -1, 0);
          return (p == MAP_FAILED) ? null : p;
      }
  
!     int os_mem_unmap_shared(void *base, size_t nbytes) nothrow @nogc
      {
          return munmap(base, nbytes);
      }
  }
  else static if (is(typeof(valloc))) // else version (GC_Use_Alloc_Valloc)
  {
      void *os_mem_map(size_t nbytes) nothrow @nogc
      {
          return valloc(nbytes);
*************** else static if (is(typeof(malloc))) // e
*** 170,177 ****
      //       to PAGESIZE alignment, there will be space for a void* at the end
      //       after PAGESIZE bytes used by the GC.
  
-     enum HaveFork = false;
- 
      import core.internal.gc.impl.conservative.gc;
  
  
--- 216,221 ----
*************** else
*** 201,206 ****
--- 245,255 ----
  }
  
  /**
+ * Indicates if an allocation method supports sharing between processes.
+ */
+ enum AllocSupportsShared = __traits(compiles, os_mem_map_shared);
+ 
+ /**
     Check for any kind of memory pressure.
  
     Params:
*************** else version (Posix)
*** 306,308 ****
--- 355,384 ----
          return pageSize * pages;
      }
  }
+ 
+ /**
+    The GC signals might be blocked by `fork` when the atfork prepare
+    handler is invoked. This guards us from the scenario where we are
+    waiting for a GC action in another thread to complete, and that thread
+    decides to call thread_suspendAll, then we must be able to response to
+    that request, otherwise we end up in a deadlock situation.
+  */
+ version (GCSignalsUnblock)
+ {
+     void os_unblock_gc_signals() nothrow @nogc
+     {
+         import core.sys.posix.signal : pthread_sigmask, sigaddset, sigemptyset, sigset_t, SIG_UNBLOCK;
+         import core.thread : thread_getGCSignals;
+ 
+         int suspendSignal = void, resumeSignal = void;
+         thread_getGCSignals(suspendSignal, resumeSignal);
+ 
+         sigset_t set;
+         sigemptyset(&set);
+         sigaddset(&set, suspendSignal);
+         sigaddset(&set, resumeSignal);
+ 
+         auto sigmask = pthread_sigmask(SIG_UNBLOCK, &set, null);
+         assert(sigmask == 0, "failed to unblock GC signals");
+     }
+ }
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/internal/hash.d gcc-16-20260208/libphobos/libdruntime/core/internal/hash.d
*** gcc-16-20260201/libphobos/libdruntime/core/internal/hash.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/core/internal/hash.d	Sun Feb  8 22:32:16 2026
*************** size_t hashOf(T)(scope const T val, size
*** 300,311 ****
      static if (is(T V : V*))
      {
          pragma(inline, true);
!         if (__ctfe)
!         {
!             if (val is null) return hashOf(size_t(0), seed);
!             assert(0, "Unable to calculate hash of non-null pointer at compile time");
!         }
!         return hashOf(cast(size_t) val, seed);
      }
      else static if (is(T EType == enum) && is(typeof(val[0])))
      {
--- 300,308 ----
      static if (is(T V : V*))
      {
          pragma(inline, true);
!         return __ctfe ? (val is null ? hashOf(size_t(0), seed) :
!                 assert(0, "Unable to calculate hash of non-null pointer at compile time"))
!             : hashOf(cast(size_t) val, seed);
      }
      else static if (is(T EType == enum) && is(typeof(val[0])))
      {
*************** if (!is(T == enum) && (is(T == struct) |
*** 584,595 ****
  size_t hashOf(T)(scope const T val, size_t seed = 0) if (!is(T == enum) && is(T == delegate))
  {
      pragma(inline, true);
!     if (__ctfe)
!     {
!         if (val is null) return hashOf(size_t(0), hashOf(size_t(0), seed));
!         assert(0, "unable to compute hash of "~T.stringof~" at compile time");
!     }
!     return hashOf(val.ptr, hashOf(cast(void*) val.funcptr, seed));
  }
  
  //address-based class hash. CTFE only if null.
--- 581,589 ----
  size_t hashOf(T)(scope const T val, size_t seed = 0) if (!is(T == enum) && is(T == delegate))
  {
      pragma(inline, true);
!     return __ctfe ? (val is null ? hashOf(size_t(0), hashOf(size_t(0), seed)) :
!             assert(0, "unable to compute hash of "~T.stringof~" at compile time"))
!         : hashOf(val.ptr, hashOf(cast(void*) val.funcptr, seed));
  }
  
  //address-based class hash. CTFE only if null.
*************** if (!is(T == enum) && (is(T == interface
*** 599,606 ****
      && canBitwiseHash!T)
  {
      pragma(inline, true);
!     if (__ctfe) if (val is null) return 0;
!     return hashOf(cast(const void*) val);
  }
  
  //address-based class hash. CTFE only if null.
--- 593,600 ----
      && canBitwiseHash!T)
  {
      pragma(inline, true);
!     return __ctfe && (val is null) ? 0
!         : hashOf(cast(const void*) val);
  }
  
  //address-based class hash. CTFE only if null.
*************** if (!is(T == enum) && (is(T == interface
*** 610,617 ****
      && canBitwiseHash!T)
  {
      pragma(inline, true);
!     if (__ctfe) if (val is null) return hashOf(size_t(0), seed);
!     return hashOf(cast(const void*) val, seed);
  }
  
  //class or interface hash. CTFE depends on toHash
--- 604,611 ----
      && canBitwiseHash!T)
  {
      pragma(inline, true);
!     return __ctfe && (val is null) ? hashOf(size_t(0), seed)
!         : hashOf(cast(const void*) val, seed);
  }
  
  //class or interface hash. CTFE depends on toHash
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/internal/newaa.d gcc-16-20260208/libphobos/libdruntime/core/internal/newaa.d
*** gcc-16-20260201/libphobos/libdruntime/core/internal/newaa.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/core/internal/newaa.d	Sun Feb  8 22:32:16 2026
*************** static struct Entry(K, V)
*** 113,119 ****
  // backward compatibility conversions
  private ref compat_key(K, K2)(ref K2 key)
  {
!     pragma(inline, true);
      static if (is(K2 == const(char)[]) && is(K == string))
          return (ref (ref return K2 k2) @trusted => *cast(string*)&k2)(key);
      else
--- 113,120 ----
  // backward compatibility conversions
  private ref compat_key(K, K2)(ref K2 key)
  {
!     static if(!(is(K2 == struct) && __traits(isNested, K2)))
!         pragma(inline, true);
      static if (is(K2 == const(char)[]) && is(K == string))
          return (ref (ref return K2 k2) @trusted => *cast(string*)&k2)(key);
      else
*************** private void _aaMove(V)(ref V src, ref V
*** 132,138 ****
  }
  
  // mimick behaviour of rt.aaA for initialization
! Entry!(K, V)* _newEntry(K, V)(ref K key, ref V value)
  {
      static if (__traits(compiles, new Entry!(K, V)(key, value)))
      {
--- 133,139 ----
  }
  
  // mimick behaviour of rt.aaA for initialization
! Entry!(K, V)* _newEntry(K, V)(ref K key, auto ref V value)
  {
      static if (__traits(compiles, new Entry!(K, V)(key, value)))
      {
*************** Entry!(K, V)* _newEntry(K, V, K2)(ref K2
*** 180,186 ****
  
  template pure_hashOf(K)
  {
!     static if (__traits(compiles, function hash_t(scope const ref K key) pure nothrow @nogc @trusted { return hashOf(cast()key); }))
      {
          // avoid wrapper call in debug builds if pure nothrow @nogc is inferred
          pragma(inline, true)
--- 181,188 ----
  
  template pure_hashOf(K)
  {
!     static if (!(is(K == struct) && __traits(isNested, K)) &&
!                __traits(compiles, function hash_t(scope const ref K key) pure nothrow @nogc @trusted { return hashOf(cast()key); }))
      {
          // avoid wrapper call in debug builds if pure nothrow @nogc is inferred
          pragma(inline, true)
*************** template pure_hashOf(K)
*** 198,204 ****
  // this also breaks cyclic inference on recursive data types
  template pure_keyEqual(K1, K2 = K1)
  {
!     static if (__traits(compiles, function bool(ref const K1 k1, ref const K2 k2) pure nothrow @nogc @trusted { return cast()k1 == cast()k2; }))
      {
          // avoid wrapper call in debug builds if pure nothrow @nogc is inferred
          pragma(inline, true)
--- 200,208 ----
  // this also breaks cyclic inference on recursive data types
  template pure_keyEqual(K1, K2 = K1)
  {
!     static if (!(is(K1 == struct) && __traits(isNested, K1)) &&
!                !(is(K2 == struct) && __traits(isNested, K2)) &&
!                __traits(compiles, function bool(ref const K1 k1, ref const K2 k2) pure nothrow @nogc @trusted { return cast()k1 == cast()k2; }))
      {
          // avoid wrapper call in debug builds if pure nothrow @nogc is inferred
          pragma(inline, true)
*************** size_t _d_aaLen(K, V)(inout V[K] a)
*** 475,483 ****
  V* _d_aaGetY(K, V, T : V1[K1], K1, V1, K2)(auto ref scope T aa, auto ref K2 key, out bool found)
  {
      ref aax = cast(V[K])cast(V1[K1])aa; // remove outer const from T
!     return _aaGetX!(K, V)(aax, key, found);
  }
  
  /******************************
   * Lookup key in aa.
   * Called only from implementation of require, update and _d_aaGetY
--- 479,489 ----
  V* _d_aaGetY(K, V, T : V1[K1], K1, V1, K2)(auto ref scope T aa, auto ref K2 key, out bool found)
  {
      ref aax = cast(V[K])cast(V1[K1])aa; // remove outer const from T
!     return _aaGetX!(K, V, K2)(aax, key, found, _noV2());
  }
  
+ private struct _noV2 {}
+ 
  /******************************
   * Lookup key in aa.
   * Called only from implementation of require, update and _d_aaGetY
*************** V* _d_aaGetY(K, V, T : V1[K1], K1, V1, K
*** 485,496 ****
   *      a = associative array
   *      key = reference to the key value
   *      found = true if the value was found
   * Returns:
   *      if key was in the aa, a mutable pointer to the existing value.
   *      If key was not in the aa, a mutable pointer to newly inserted value which
!  *      is set to V.init
   */
! V* _aaGetX(K, V, K2)(auto ref scope V[K] a, auto ref K2 key, out bool found)
  {
      ref aa = _refAA!(K, V)(a);
  
--- 491,503 ----
   *      a = associative array
   *      key = reference to the key value
   *      found = true if the value was found
+  *      v2 = if key not found, init new value to this (except if type _noV2)
   * Returns:
   *      if key was in the aa, a mutable pointer to the existing value.
   *      If key was not in the aa, a mutable pointer to newly inserted value which
!  *      is set to v2 or is zero-initialized
   */
! V* _aaGetX(K, V, K2, V2)(auto ref scope V[K] a, auto ref K2 key, out bool found, lazy V2 v2)
  {
      ref aa = _refAA!(K, V)(a);
  
*************** V* _aaGetX(K, V, K2)(auto ref scope V[K]
*** 513,533 ****
      }
  
      auto pi = aa.findSlotInsert(hash);
-     if (aa.buckets[pi].deleted)
-         --aa.deleted;
      // check load factor and possibly grow
!     else if (++aa.used * GROW_DEN > aa.dim * GROW_NUM)
      {
          aa.grow();
          pi = aa.findSlotInsert(hash);
          assert(aa.buckets[pi].empty);
      }
  
!     // update search cache and allocate entry
!     aa.firstUsed = min(aa.firstUsed, cast(uint)pi);
      ref p = aa.buckets[pi];
      p.hash = hash;
!     p.entry = _newEntry!(K, V)(key2);
      return &p.entry.value;
  }
  
--- 520,545 ----
      }
  
      auto pi = aa.findSlotInsert(hash);
      // check load factor and possibly grow
!     if (!aa.buckets[pi].deleted && (aa.used + 1) * GROW_DEN > aa.dim * GROW_NUM)
      {
          aa.grow();
          pi = aa.findSlotInsert(hash);
          assert(aa.buckets[pi].empty);
      }
  
!     // allocate entry and update search cache (if not throwing in _newEntry)
      ref p = aa.buckets[pi];
+     static if (is(V2 == _noV2))
+         p.entry = _newEntry!(K, V)(key2);
+     else
+         p.entry = _newEntry!(K, V)(key2, v2);
+     if (p.deleted)
+         --aa.deleted;
+     else
+         aa.used++;
      p.hash = hash;
!     aa.firstUsed = min(aa.firstUsed, cast(uint)pi);
      return &p.entry.value;
  }
  
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/internal/qsort.d gcc-16-20260208/libphobos/libdruntime/core/internal/qsort.d
*** gcc-16-20260201/libphobos/libdruntime/core/internal/qsort.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/core/internal/qsort.d	Sun Feb  8 22:32:16 2026
*************** else version (FreeBSD)
*** 60,80 ****
  
      static if (__FreeBSD_version >= 1400000)
      {
          alias extern (C) int function(scope const void*, scope const void*, scope void*) Cmp;
          extern (C) void qsort_r(scope void* base, size_t nmemb, size_t size, Cmp cmp, scope void* thunk);
  
-         // https://cgit.freebsd.org/src/tree/include/stdlib.h?h=stable/14#n350
-         pragma(mangle, "qsort_r@FBSD_1.0")
-         private extern (C) void __qsort_r_compat(scope void* base, size_t nmemb, size_t size, scope void* thunk, OldCmp cmp);
-         alias extern (C) int function(scope void*, scope const void*, scope const void*) OldCmp;
- 
-         deprecated("In FreeBSD 14, qsort_r's signature was fixed to match POSIX. This extern(D) overload has been " ~
-                    "provided to avoid breaking code, but code should be updated to use the POSIX version.")
-         extern (D) void qsort_r(scope void* base, size_t nmemb, size_t size, scope void* thunk, OldCmp cmp)
-         {
-             __qsort_r_compat(base, nmemb, size, thunk, cmp);
-         }
- 
          extern (C) void[] _adSort(return scope void[] a, TypeInfo ti)
          {
              extern (C) int cmp(scope const void* p1, scope const void* p2, scope void* ti)
--- 60,69 ----
  
      static if (__FreeBSD_version >= 1400000)
      {
+         // FreeBSD changed qsort_r function signature to POSIX in FreeBSD 14.0
          alias extern (C) int function(scope const void*, scope const void*, scope void*) Cmp;
          extern (C) void qsort_r(scope void* base, size_t nmemb, size_t size, Cmp cmp, scope void* thunk);
  
          extern (C) void[] _adSort(return scope void[] a, TypeInfo ti)
          {
              extern (C) int cmp(scope const void* p1, scope const void* p2, scope void* ti)
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/internal/vararg/gnu.d gcc-16-20260208/libphobos/libdruntime/core/internal/vararg/gnu.d
*** gcc-16-20260201/libphobos/libdruntime/core/internal/vararg/gnu.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/libphobos/libdruntime/core/internal/vararg/gnu.d	Sun Feb  8 22:32:16 2026
***************
*** 0 ****
--- 1,52 ----
+ /**
+  * Varargs implementation for the GNU compilers (Gnu D Compiler)
+  * Used by core.stdc.stdarg and core.vararg.
+  *
+  * Reference: https://github.com/ARM-software/abi-aa/blob/master/aapcs64/aapcs64.rst#appendix-variable-argument-lists
+  *
+  * Copyright: Copyright D Language Foundation 2025
+  * License:   $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
+  * Authors:   Various
+  * Source: $(DRUNTIMESRC core/internal/vararg/gnu.d)
+  */
+ 
+ module core.internal.vararg.gnu;
+ 
+ version (GNU):
+ 
+ import gcc.builtins;
+ 
+ @nogc:
+ nothrow:
+ 
+ /**
+  * The argument pointer type.
+  */
+ alias va_list = __gnuc_va_list;
+ alias __gnuc_va_list = __builtin_va_list;
+ 
+ /**
+  * Initialize ap.
+  * parmn should be the last named parameter.
+  */
+ void va_start(T)(out va_list ap, ref T parmn);
+ 
+ /**
+  * Retrieve and return the next value that is of type T.
+  */
+ T va_arg(T)(ref va_list ap); // intrinsic
+ 
+ /**
+  * Retrieve and store in parmn the next value that is of type T.
+  */
+ void va_arg(T)(ref va_list ap, ref T parmn); // intrinsic
+ 
+ /**
+  * End use of ap.
+  */
+ alias va_end = __builtin_va_end;
+ 
+ /**
+  * Make a copy of ap.
+  */
+ alias va_copy = __builtin_va_copy;
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/lifetime.d gcc-16-20260208/libphobos/libdruntime/core/lifetime.d
*** gcc-16-20260201/libphobos/libdruntime/core/lifetime.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/core/lifetime.d	Sun Feb  8 22:32:16 2026
*************** pure nothrow @system unittest
*** 2600,2610 ****
  }
  
  // wipes source after moving
- pragma(inline, true)
  private void wipe(T, Init...)(return scope ref T source, ref const scope Init initializer) @trusted
  if (!Init.length ||
      ((Init.length == 1) && (is(immutable T == immutable Init[0]))))
  {
      static if (__traits(isStaticArray, T) && hasContextPointers!T)
      {
          for (auto i = 0; i < T.length; i++)
--- 2600,2612 ----
  }
  
  // wipes source after moving
  private void wipe(T, Init...)(return scope ref T source, ref const scope Init initializer) @trusted
  if (!Init.length ||
      ((Init.length == 1) && (is(immutable T == immutable Init[0]))))
  {
+     static if (!is(T == struct) || !__traits(isNested, T))
+         pragma(inline, true);
+ 
      static if (__traits(isStaticArray, T) && hasContextPointers!T)
      {
          for (auto i = 0; i < T.length; i++)
*************** T _d_newclassTTrace(T)(string file = __F
*** 2793,2799 ****
      version (D_TypeInfo)
      {
          import core.internal.array.utils : TraceHook, gcStatsPure, accumulatePure;
!         mixin(TraceHook!(T.stringof, "_d_newclassT"));
  
          return _d_newclassT!T();
      }
--- 2795,2801 ----
      version (D_TypeInfo)
      {
          import core.internal.array.utils : TraceHook, gcStatsPure, accumulatePure;
!         mixin(TraceHook!("T", "_d_newclassT"));
  
          return _d_newclassT!T();
      }
*************** version (D_ProfileGC)
*** 2999,3005 ****
              }
  
              import core.internal.array.utils : TraceHook, gcStatsPure, accumulatePure;
!             mixin(TraceHook!(T.stringof, "_d_newitemT"));
  
              return _d_newitemT!T();
          }
--- 3001,3007 ----
              }
  
              import core.internal.array.utils : TraceHook, gcStatsPure, accumulatePure;
!             mixin(TraceHook!("T", "_d_newitemT"));
  
              return _d_newitemT!T();
          }
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/stdc/locale.d gcc-16-20260208/libphobos/libdruntime/core/stdc/locale.d
*** gcc-16-20260201/libphobos/libdruntime/core/stdc/locale.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/core/stdc/locale.d	Sun Feb  8 22:32:16 2026
*************** nothrow:
*** 29,60 ****
  @nogc:
  
  ///
! struct lconv
  {
!     char* decimal_point;
!     char* thousands_sep;
!     char* grouping;
!     char* int_curr_symbol;
!     char* currency_symbol;
!     char* mon_decimal_point;
!     char* mon_thousands_sep;
!     char* mon_grouping;
!     char* positive_sign;
!     char* negative_sign;
!     byte  int_frac_digits;
!     byte  frac_digits;
!     byte  p_cs_precedes;
!     byte  p_sep_by_space;
!     byte  n_cs_precedes;
!     byte  n_sep_by_space;
!     byte  p_sign_posn;
!     byte  n_sign_posn;
!     byte  int_p_cs_precedes;
!     byte  int_p_sep_by_space;
!     byte  int_n_cs_precedes;
!     byte  int_n_sep_by_space;
!     byte  int_p_sign_posn;
!     byte  int_n_sign_posn;
  }
  
  version (CRuntime_Glibc)
--- 29,98 ----
  @nogc:
  
  ///
! version (Windows)
  {
!     import core.stdc.wchar_ : wchar_t;
! 
!     // ...Windows Kits\10\Include\10.0.14393.0\ucrt\locale.h
!     struct lconv
!     {
!         char*    decimal_point;
!         char*    thousands_sep;
!         char*    grouping;
!         char*    int_curr_symbol;
!         char*    currency_symbol;
!         char*    mon_decimal_point;
!         char*    mon_thousands_sep;
!         char*    mon_grouping;
!         char*    positive_sign;
!         char*    negative_sign;
!         char     int_frac_digits = 0; // " = 0" For zero init
!         char     frac_digits = 0;
!         char     p_cs_precedes = 0;
!         char     p_sep_by_space = 0;
!         char     n_cs_precedes = 0;
!         char     n_sep_by_space = 0;
!         char     p_sign_posn = 0;
!         char     n_sign_posn = 0;
!         wchar_t* _W_decimal_point;
!         wchar_t* _W_thousands_sep;
!         wchar_t* _W_int_curr_symbol;
!         wchar_t* _W_currency_symbol;
!         wchar_t* _W_mon_decimal_point;
!         wchar_t* _W_mon_thousands_sep;
!         wchar_t* _W_positive_sign;
!         wchar_t* _W_negative_sign;
!     }
! }
! else
! {
!     struct lconv
!     {
!         char* decimal_point;
!         char* thousands_sep;
!         char* grouping;
!         char* int_curr_symbol;
!         char* currency_symbol;
!         char* mon_decimal_point;
!         char* mon_thousands_sep;
!         char* mon_grouping;
!         char* positive_sign;
!         char* negative_sign;
!         byte  int_frac_digits;
!         byte  frac_digits;
!         byte  p_cs_precedes;
!         byte  p_sep_by_space;
!         byte  n_cs_precedes;
!         byte  n_sep_by_space;
!         byte  p_sign_posn;
!         byte  n_sign_posn;
!         byte  int_p_cs_precedes;
!         byte  int_p_sep_by_space;
!         byte  int_n_cs_precedes;
!         byte  int_n_sep_by_space;
!         byte  int_p_sign_posn;
!         byte  int_n_sign_posn;
!     }
  }
  
  version (CRuntime_Glibc)
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/stdc/stdarg.d gcc-16-20260208/libphobos/libdruntime/core/stdc/stdarg.d
*** gcc-16-20260201/libphobos/libdruntime/core/stdc/stdarg.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/core/stdc/stdarg.d	Sun Feb  8 22:32:16 2026
*************** module core.stdc.stdarg;
*** 15,43 ****
  @nogc:
  nothrow:
  
  version (X86_64)
  {
      version (Windows) { /* different ABI */ }
      else version = SysV_x64;
  }
  
! version (GNU)
! {
!     import gcc.builtins;
! }
! else version (SysV_x64)
  {
      static import core.internal.vararg.sysv_x64;
- 
-     version (DigitalMars)
-     {
-         align(16) struct __va_argsave_t
-         {
-             size_t[6] regs;   // RDI,RSI,RDX,RCX,R8,R9
-             real[8] fpregs;   // XMM0..XMM7
-             __va_list va;
-         }
-     }
  }
  
  version (ARM)     version = ARM_Any;
--- 15,33 ----
  @nogc:
  nothrow:
  
+ version (GNU)
+     public import core.internal.vararg.gnu;
+ else:
+ 
  version (X86_64)
  {
      version (Windows) { /* different ABI */ }
      else version = SysV_x64;
  }
  
! version (SysV_x64)
  {
      static import core.internal.vararg.sysv_x64;
  }
  
  version (ARM)     version = ARM_Any;
*************** version (PPC64)   version = PPC_Any;
*** 49,59 ****
  version (RISCV32) version = RISCV_Any;
  version (RISCV64) version = RISCV_Any;
  
! version (GNU)
! {
!     // Uses gcc.builtins
! }
! else version (ARM_Any)
  {
      // Darwin uses a simpler varargs implementation
      version (OSX) {}
--- 39,45 ----
  version (RISCV32) version = RISCV_Any;
  version (RISCV64) version = RISCV_Any;
  
! version (ARM_Any)
  {
      // Darwin uses a simpler varargs implementation
      version (OSX) {}
*************** else version (ARM_Any)
*** 69,75 ****
      else version (AArch64)
      {
          version = AAPCS64;
!         static import core.internal.vararg.aarch64;
      }
  }
  
--- 55,61 ----
      else version (AArch64)
      {
          version = AAPCS64;
!         static import core.internal.vararg.aapcs64;
      }
  }
  
*************** version (BigEndian)
*** 107,121 ****
  /**
   * The argument pointer type.
   */
! version (GNU)
! {
!     alias va_list = __gnuc_va_list;
!     alias __gnuc_va_list = __builtin_va_list;
! }
! else version (SysV_x64)
  {
!     alias va_list = core.internal.vararg.sysv_x64.va_list;
!     public import core.internal.vararg.sysv_x64 : __va_list, __va_list_tag;
  }
  else version (AAPCS32)
  {
--- 93,101 ----
  /**
   * The argument pointer type.
   */
! version (SysV_x64)
  {
!     public import core.internal.vararg.sysv_x64 : va_list, __va_list, __va_list_tag;
  }
  else version (AAPCS32)
  {
*************** else version (AAPCS32)
*** 129,137 ****
  }
  else version (AAPCS64)
  {
!     alias va_list = core.internal.vararg.aarch64.va_list;
      version (DigitalMars)
!         public import core.internal.vararg.aarch64 : __va_list, __va_list_tag;
  }
  else version (RISCV_Any)
  {
--- 109,117 ----
  }
  else version (AAPCS64)
  {
!     alias va_list = core.internal.vararg.aapcs64.va_list;
      version (DigitalMars)
!         public import core.internal.vararg.aapcs64 : __va_list, __va_list_tag;
  }
  else version (RISCV_Any)
  {
*************** else
*** 149,159 ****
   * Initialize ap.
   * parmn should be the last named parameter.
   */
! version (GNU)
! {
!     void va_start(T)(out va_list ap, ref T parmn);
! }
! else version (LDC)
  {
      pragma(LDC_va_start)
      void va_start(T)(out va_list ap, ref T parmn) @nogc;
--- 129,135 ----
   * Initialize ap.
   * parmn should be the last named parameter.
   */
! version (LDC)
  {
      pragma(LDC_va_start)
      void va_start(T)(out va_list ap, ref T parmn) @nogc;
*************** else version (DigitalMars)
*** 177,185 ****
  /**
   * Retrieve and return the next value that is of type T.
   */
- version (GNU)
-     T va_arg(T)(ref va_list ap); // intrinsic
- else
  T va_arg(T)(ref va_list ap)
  {
      version (X86)
--- 153,158 ----
*************** T va_arg(T)(ref va_list ap)
*** 229,235 ****
      }
      else version (AAPCS64)
      {
!         return core.internal.vararg.aarch64.va_arg!T(ap);
      }
      else version (ARM_Any)
      {
--- 202,208 ----
      }
      else version (AAPCS64)
      {
!         return core.internal.vararg.aapcs64.va_arg!T(ap);
      }
      else version (ARM_Any)
      {
*************** T va_arg(T)(ref va_list ap)
*** 295,303 ****
  /**
   * Retrieve and store in parmn the next value that is of type T.
   */
- version (GNU)
-     void va_arg(T)(ref va_list ap, ref T parmn); // intrinsic
- else
  void va_arg(T)(ref va_list ap, ref T parmn)
  {
      parmn = va_arg!T(ap);
--- 268,273 ----
*************** void va_arg(T)(ref va_list ap, ref T par
*** 307,317 ****
  /**
   * End use of ap.
   */
! version (GNU)
! {
!     alias va_end = __builtin_va_end;
! }
! else version (LDC)
  {
      pragma(LDC_va_end)
      void va_end(va_list ap);
--- 277,283 ----
  /**
   * End use of ap.
   */
! version (LDC)
  {
      pragma(LDC_va_end)
      void va_end(va_list ap);
*************** else version (DigitalMars)
*** 325,335 ****
  /**
   * Make a copy of ap.
   */
! version (GNU)
! {
!     alias va_copy = __builtin_va_copy;
! }
! else version (LDC)
  {
      pragma(LDC_va_copy)
      void va_copy(out va_list dest, va_list src);
--- 291,297 ----
  /**
   * Make a copy of ap.
   */
! version (LDC)
  {
      pragma(LDC_va_copy)
      void va_copy(out va_list dest, va_list src);
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/stdc/stdatomic.d gcc-16-20260208/libphobos/libdruntime/core/stdc/stdatomic.d
*** gcc-16-20260201/libphobos/libdruntime/core/stdc/stdatomic.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/core/stdc/stdatomic.d	Sun Feb  8 22:32:16 2026
*************** void atomic_flag_clear_explicit_impl()(a
*** 165,191 ****
  {
      assert(obj !is null);
  
!     final switch (order)
!     {
!         case memory_order.memory_order_relaxed:
!             atomicStore!(memory_order.memory_order_relaxed)(&obj.b, false);
!             break;
  
!         case memory_order.memory_order_acquire:
!         case memory_order.memory_order_acq_rel:
!             // Ideally this would error at compile time but alas it is not an intrinsic.
!             // Note: this is not a valid memory order for this operation.
!             atomicStore!(memory_order.memory_order_seq_cst)(&obj.b, false);
!             break;
  
!         case memory_order.memory_order_release:
!             atomicStore!(memory_order.memory_order_release)(&obj.b, false);
!             break;
  
!         case memory_order.memory_order_seq_cst:
!             atomicStore(&obj.b, false);
!             break;
!     }
  }
  
  ///
--- 165,187 ----
  {
      assert(obj !is null);
  
!     // use series of ternary expressions instead of switch to help the dmd inliner
!     order == memory_order.memory_order_relaxed ?
!         atomicStore!(memory_order.memory_order_relaxed)(&obj.b, false) :
  
!     order == memory_order.memory_order_acquire ||
!     order == memory_order.memory_order_acq_rel ?
!         // Ideally this would error at compile time but alas it is not an intrinsic.
!         // Note: this is not a valid memory order for this operation.
!         atomicStore!(memory_order.memory_order_seq_cst)(&obj.b, false) :
  
!     order == memory_order.memory_order_release ?
!         atomicStore!(memory_order.memory_order_release)(&obj.b, false) :
  
!     order == memory_order.memory_order_seq_cst ?
!         atomicStore(&obj.b, false) :
! 
!     cast(void) assert(0);
  }
  
  ///
*************** bool atomic_flag_test_and_set_explicit_i
*** 210,234 ****
  {
      assert(obj !is null);
  
!     final switch (order)
!     {
!         case memory_order.memory_order_relaxed:
!             return atomicExchange!(memory_order.memory_order_relaxed)(&obj.b, true);
  
!         case memory_order.memory_order_acquire:
              // Ideally this would error at compile time but alas it is not an intrinsic.
              // Note: this is not a valid memory order for this operation.
!             return atomicExchange!(memory_order.memory_order_seq_cst)(&obj.b, true);
  
!         case memory_order.memory_order_release:
!             return atomicExchange!(memory_order.memory_order_release)(&obj.b, true);
  
!         case memory_order.memory_order_acq_rel:
!             return atomicExchange!(memory_order.memory_order_acq_rel)(&obj.b, true);
  
!         case memory_order.memory_order_seq_cst:
!             return atomicExchange(&obj.b, true);
!     }
  }
  
  ///
--- 206,231 ----
  {
      assert(obj !is null);
  
!     // use series of ternary expressions instead of switch to help the dmd inliner
!     return
!         order == memory_order.memory_order_relaxed ?
!             atomicExchange!(memory_order.memory_order_relaxed)(&obj.b, true) :
  
!         order == memory_order.memory_order_acquire ?
              // Ideally this would error at compile time but alas it is not an intrinsic.
              // Note: this is not a valid memory order for this operation.
!             atomicExchange!(memory_order.memory_order_seq_cst)(&obj.b, true) :
  
!          order == memory_order.memory_order_release ?
!             atomicExchange!(memory_order.memory_order_release)(&obj.b, true) :
  
!          order == memory_order.memory_order_acq_rel ?
!             atomicExchange!(memory_order.memory_order_acq_rel)(&obj.b, true) :
  
!          order == memory_order.memory_order_seq_cst ?
!             atomicExchange(&obj.b, true) :
! 
!          assert(0);
  }
  
  ///
*************** A kill_dependency(A)(A y) @trusted
*** 271,298 ****
  pragma(inline, true)
  void atomic_signal_fence_impl()(memory_order order)
  {
!     final switch (order)
!     {
!         case memory_order.memory_order_relaxed:
!             // This is a no-op operation for relaxed memory orders.
!             break;
  
!         case memory_order.memory_order_acquire:
!             atomicSignalFence!(memory_order.memory_order_acquire);
!             break;
  
!         case memory_order.memory_order_release:
!             atomicSignalFence!(memory_order.memory_order_release);
!             break;
  
!         case memory_order.memory_order_acq_rel:
!             atomicSignalFence!(memory_order.memory_order_acq_rel);
!             break;
  
!         case memory_order.memory_order_seq_cst:
!             atomicSignalFence!(memory_order.memory_order_seq_cst);
!             break;
!     }
  }
  
  ///
--- 268,291 ----
  pragma(inline, true)
  void atomic_signal_fence_impl()(memory_order order)
  {
!     // use series of ternary expressions instead of switch to help the dmd inliner
!     order == memory_order.memory_order_relaxed ?
!         // This is a no-op operation for relaxed memory orders.
!         cast(void)0 :
  
!     order == memory_order.memory_order_acquire ?
!         atomicSignalFence!(memory_order.memory_order_acquire) :
  
!     order == memory_order.memory_order_release ?
!         atomicSignalFence!(memory_order.memory_order_release) :
  
!     order == memory_order.memory_order_acq_rel ?
!         atomicSignalFence!(memory_order.memory_order_acq_rel) :
  
!     order == memory_order.memory_order_seq_cst ?
!         atomicSignalFence!(memory_order.memory_order_seq_cst) :
! 
!     cast(void) assert(0);
  }
  
  ///
*************** unittest
*** 305,332 ****
  pragma(inline, true)
  void atomic_thread_fence_impl()(memory_order order)
  {
!     final switch (order)
!     {
!         case memory_order.memory_order_relaxed:
!             // This is a no-op operation for relaxed memory orders.
!             break;
  
!         case memory_order.memory_order_acquire:
!             atomicFence!(memory_order.memory_order_acquire);
!             break;
  
!         case memory_order.memory_order_release:
!             atomicFence!(memory_order.memory_order_release);
!             break;
  
!         case memory_order.memory_order_acq_rel:
!             atomicFence!(memory_order.memory_order_acq_rel);
!             break;
  
!         case memory_order.memory_order_seq_cst:
!             atomicFence!(memory_order.memory_order_seq_cst);
!             break;
!     }
  }
  
  ///
--- 298,321 ----
  pragma(inline, true)
  void atomic_thread_fence_impl()(memory_order order)
  {
!     // use series of ternary expressions instead of switch to help the dmd inliner
!     order == memory_order.memory_order_relaxed ?
!         // This is a no-op operation for relaxed memory orders.
!         cast(void)0 :
  
!     order == memory_order.memory_order_acquire ?
!         atomicFence!(memory_order.memory_order_acquire) :
  
!     order == memory_order.memory_order_release ?
!         atomicFence!(memory_order.memory_order_release) :
  
!     order == memory_order.memory_order_acq_rel ?
!         atomicFence!(memory_order.memory_order_acq_rel) :
  
!     order == memory_order.memory_order_seq_cst ?
!         atomicFence!(memory_order.memory_order_seq_cst) :
! 
!     cast(void) assert(0);
  }
  
  ///
*************** void atomic_store_explicit_impl(A, C)(sh
*** 437,463 ****
  {
      assert(obj !is null);
  
!     final switch (order)
!     {
!         case memory_order.memory_order_relaxed:
!             atomicStore!(memory_order.memory_order_relaxed)(cast(A*)obj, cast(A)desired);
!             break;
  
!         case memory_order.memory_order_acquire:
!         case memory_order.memory_order_acq_rel:
!             // Ideally this would error at compile time but alas it is not an intrinsic.
!             // Note: this is not a valid memory order for this operation.
!             atomicStore!(memory_order.memory_order_release)(cast(A*)obj, cast(A)desired);
!             break;
  
!         case memory_order.memory_order_release:
!             atomicStore!(memory_order.memory_order_release)(cast(A*)obj, cast(A)desired);
!             break;
  
!         case memory_order.memory_order_seq_cst:
!             atomicStore!(memory_order.memory_order_seq_cst)(cast(A*)obj, cast(A)desired);
!             break;
!     }
  }
  
  ///
--- 426,448 ----
  {
      assert(obj !is null);
  
!     // use series of ternary expressions instead of switch to help the dmd inliner
!     order == memory_order.memory_order_relaxed ?
!         atomicStore!(memory_order.memory_order_relaxed)(cast(A*)obj, cast(A)desired) :
  
!     order == memory_order.memory_order_acquire ||
!     order == memory_order.memory_order_acq_rel ?
!         // Ideally this would error at compile time but alas it is not an intrinsic.
!         // Note: this is not a valid memory order for this operation.
!         atomicStore!(memory_order.memory_order_release)(cast(A*)obj, cast(A)desired) :
  
!     order == memory_order.memory_order_release ?
!         atomicStore!(memory_order.memory_order_release)(cast(A*)obj, cast(A)desired) :
  
!     order == memory_order.memory_order_seq_cst ?
!         atomicStore!(memory_order.memory_order_seq_cst)(cast(A*)obj, cast(A)desired) :
! 
!     cast(void) assert(0);
  }
  
  ///
*************** A atomic_load_explicit_impl(A)(const sha
*** 501,523 ****
  {
      assert(obj !is null);
  
!     final switch (order)
!     {
!         case memory_order.memory_order_relaxed:
!             return atomicLoad!(memory_order.memory_order_relaxed)(cast(A*)obj);
  
!         case memory_order.memory_order_acquire:
!             return atomicLoad!(memory_order.memory_order_acquire)(cast(A*)obj);
  
!         case memory_order.memory_order_release:
!         case memory_order.memory_order_acq_rel:
              // Ideally this would error at compile time but alas it is not an intrinsic.
              // Note: this is not a valid memory order for this operation.
!             return atomicLoad!(memory_order.memory_order_acquire)(cast(A*)obj);
  
!         case memory_order.memory_order_seq_cst:
!             return atomicLoad!(memory_order.memory_order_seq_cst)(cast(A*)obj);
!     }
  }
  
  ///
--- 486,509 ----
  {
      assert(obj !is null);
  
!     // use series of ternary expressions instead of switch to help the dmd inliner
!     return
!         order == memory_order.memory_order_relaxed ?
!             atomicLoad!(memory_order.memory_order_relaxed)(cast(A*)obj) :
  
!         order == memory_order.memory_order_acquire ?
!             atomicLoad!(memory_order.memory_order_acquire)(cast(A*)obj) :
  
!         order == memory_order.memory_order_release ||
!         order == memory_order.memory_order_acq_rel ?
              // Ideally this would error at compile time but alas it is not an intrinsic.
              // Note: this is not a valid memory order for this operation.
!             atomicLoad!(memory_order.memory_order_acquire)(cast(A*)obj) :
  
!         order == memory_order.memory_order_seq_cst ?
!             atomicLoad!(memory_order.memory_order_seq_cst)(cast(A*)obj) :
! 
!         assert(0);
  }
  
  ///
*************** A atomic_exchange_explicit_impl(A, C)(sh
*** 554,578 ****
  {
      assert(obj !is null);
  
!     final switch (order)
!     {
!         case memory_order.memory_order_relaxed:
!             return atomicExchange!(memory_order.memory_order_relaxed)(cast(A*)obj, cast(A)desired);
  
!         case memory_order.memory_order_acquire:
              // Ideally this would error at compile time but alas it is not an intrinsic.
              // Note: this is not a valid memory order for this operation.
!             return atomicExchange!(memory_order.memory_order_seq_cst)(cast(A*)obj, cast(A)desired);
  
!         case memory_order.memory_order_release:
!             return atomicExchange!(memory_order.memory_order_release)(cast(A*)obj, cast(A)desired);
  
!         case memory_order.memory_order_acq_rel:
!             return atomicExchange!(memory_order.memory_order_acq_rel)(cast(A*)obj, cast(A)desired);
  
!         case memory_order.memory_order_seq_cst:
!             return atomicExchange!(memory_order.memory_order_seq_cst)(cast(A*)obj, cast(A)desired);
!     }
  }
  
  ///
--- 540,565 ----
  {
      assert(obj !is null);
  
!     // use series of ternary expressions instead of switch to help the dmd inliner
!     return
!         order == memory_order.memory_order_relaxed ?
!             atomicExchange!(memory_order.memory_order_relaxed)(cast(A*)obj, cast(A)desired) :
  
!         order == memory_order.memory_order_acquire ?
              // Ideally this would error at compile time but alas it is not an intrinsic.
              // Note: this is not a valid memory order for this operation.
!             atomicExchange!(memory_order.memory_order_seq_cst)(cast(A*)obj, cast(A)desired) :
  
!         order == memory_order.memory_order_release ?
!             atomicExchange!(memory_order.memory_order_release)(cast(A*)obj, cast(A)desired) :
  
!         order == memory_order.memory_order_acq_rel ?
!             atomicExchange!(memory_order.memory_order_acq_rel)(cast(A*)obj, cast(A)desired) :
  
!         order == memory_order.memory_order_seq_cst ?
!             atomicExchange!(memory_order.memory_order_seq_cst)(cast(A*)obj, cast(A)desired) :
! 
!         assert(0);
  }
  
  ///
*************** bool atomic_compare_exchange_strong_expl
*** 641,659 ****
      assert(obj !is null);
      // NOTE: To not have to deal with all invalid cases, the failure model is ignored for now.
  
!     final switch(succ)
!     {
!         case memory_order.memory_order_relaxed:
!             return atomicCompareExchangeStrong!(memory_order.memory_order_relaxed, memory_order.memory_order_relaxed)(cast(B*)obj, expected, cast(B)desired);
!         case memory_order.memory_order_acquire:
!             return atomicCompareExchangeStrong!(memory_order.memory_order_acquire, memory_order.memory_order_relaxed)(cast(B*)obj, expected, cast(B)desired);
!         case memory_order.memory_order_release:
!             return atomicCompareExchangeStrong!(memory_order.memory_order_release, memory_order.memory_order_relaxed)(cast(B*)obj, expected, cast(B)desired);
!         case memory_order.memory_order_acq_rel:
!             return atomicCompareExchangeStrong!(memory_order.memory_order_acq_rel, memory_order.memory_order_relaxed)(cast(B*)obj, expected, cast(B)desired);
!         case memory_order.memory_order_seq_cst:
!             return atomicCompareExchangeStrong!(memory_order.memory_order_seq_cst, memory_order.memory_order_relaxed)(cast(B*)obj, expected, cast(B)desired);
!     }
  }
  
  ///
--- 628,646 ----
      assert(obj !is null);
      // NOTE: To not have to deal with all invalid cases, the failure model is ignored for now.
  
!     // use series of ternary expressions instead of switch to help the dmd inliner
!     return
!         succ == memory_order.memory_order_relaxed ?
!             atomicCompareExchangeStrong!(memory_order.memory_order_relaxed, memory_order.memory_order_relaxed)(cast(B*)obj, expected, cast(B)desired) :
!         succ == memory_order.memory_order_acquire ?
!             atomicCompareExchangeStrong!(memory_order.memory_order_acquire, memory_order.memory_order_relaxed)(cast(B*)obj, expected, cast(B)desired) :
!         succ == memory_order.memory_order_release ?
!             atomicCompareExchangeStrong!(memory_order.memory_order_release, memory_order.memory_order_relaxed)(cast(B*)obj, expected, cast(B)desired) :
!         succ == memory_order.memory_order_acq_rel ?
!             atomicCompareExchangeStrong!(memory_order.memory_order_acq_rel, memory_order.memory_order_relaxed)(cast(B*)obj, expected, cast(B)desired) :
!         succ == memory_order.memory_order_seq_cst ?
!             atomicCompareExchangeStrong!(memory_order.memory_order_seq_cst, memory_order.memory_order_relaxed)(cast(B*)obj, expected, cast(B)desired) :
!         assert(0);
  }
  
  ///
*************** bool atomic_compare_exchange_weak_explic
*** 689,707 ****
      assert(obj !is null);
      // NOTE: To not have to deal with all invalid cases, the failure model is ignored for now.
  
!     final switch(succ)
!     {
!         case memory_order.memory_order_relaxed:
!             return atomicCompareExchangeWeak!(memory_order.memory_order_relaxed, memory_order.memory_order_relaxed)(cast(B*)obj, expected, cast(B)desired);
!         case memory_order.memory_order_acquire:
!             return atomicCompareExchangeWeak!(memory_order.memory_order_acquire, memory_order.memory_order_relaxed)(cast(B*)obj, expected, cast(B)desired);
!         case memory_order.memory_order_release:
!             return atomicCompareExchangeWeak!(memory_order.memory_order_release, memory_order.memory_order_relaxed)(cast(B*)obj, expected, cast(B)desired);
!         case memory_order.memory_order_acq_rel:
!             return atomicCompareExchangeWeak!(memory_order.memory_order_acq_rel, memory_order.memory_order_relaxed)(cast(B*)obj, expected, cast(B)desired);
!         case memory_order.memory_order_seq_cst:
!             return atomicCompareExchangeWeak!(memory_order.memory_order_seq_cst, memory_order.memory_order_relaxed)(cast(B*)obj, expected, cast(B)desired);
!     }
  }
  
  ///
--- 676,694 ----
      assert(obj !is null);
      // NOTE: To not have to deal with all invalid cases, the failure model is ignored for now.
  
!     // use series of ternary expressions instead of switch to help the dmd inliner
!     return
!         succ == memory_order.memory_order_relaxed ?
!             atomicCompareExchangeWeak!(memory_order.memory_order_relaxed, memory_order.memory_order_relaxed)(cast(B*)obj, expected, cast(B)desired) :
!         succ == memory_order.memory_order_acquire ?
!             atomicCompareExchangeWeak!(memory_order.memory_order_acquire, memory_order.memory_order_relaxed)(cast(B*)obj, expected, cast(B)desired) :
!         succ == memory_order.memory_order_release ?
!             atomicCompareExchangeWeak!(memory_order.memory_order_release, memory_order.memory_order_relaxed)(cast(B*)obj, expected, cast(B)desired) :
!         succ == memory_order.memory_order_acq_rel ?
!             atomicCompareExchangeWeak!(memory_order.memory_order_acq_rel, memory_order.memory_order_relaxed)(cast(B*)obj, expected, cast(B)desired) :
!         succ == memory_order.memory_order_seq_cst ?
!             atomicCompareExchangeWeak!(memory_order.memory_order_seq_cst, memory_order.memory_order_relaxed)(cast(B*)obj, expected, cast(B)desired) :
!         assert(0);
  }
  
  ///
*************** A atomic_fetch_add_explicit_impl(A, M)(s
*** 774,792 ****
  {
      assert(obj !is null);
  
!     final switch(order)
!     {
!         case memory_order.memory_order_relaxed:
!             return atomic_fetch_op!(memory_order.memory_order_relaxed, "+=")(cast(A*)obj, arg);
!         case memory_order.memory_order_acquire:
!             return atomic_fetch_op!(memory_order.memory_order_acquire, "+=")(cast(A*)obj, arg);
!         case memory_order.memory_order_release:
!             return atomic_fetch_op!(memory_order.memory_order_release, "+=")(cast(A*)obj, arg);
!         case memory_order.memory_order_acq_rel:
!             return atomic_fetch_op!(memory_order.memory_order_acq_rel, "+=")(cast(A*)obj, arg);
!         case memory_order.memory_order_seq_cst:
!             return atomic_fetch_op!(memory_order.memory_order_seq_cst, "+=")(cast(A*)obj, arg);
!     }
  }
  
  ///
--- 761,779 ----
  {
      assert(obj !is null);
  
!     // use series of ternary expressions instead of switch to help the dmd inliner
!     return
!         order == memory_order.memory_order_relaxed ?
!             atomic_fetch_op!(memory_order.memory_order_relaxed, "+=")(cast(A*)obj, arg) :
!         order == memory_order.memory_order_acquire ?
!             atomic_fetch_op!(memory_order.memory_order_acquire, "+=")(cast(A*)obj, arg) :
!         order == memory_order.memory_order_release ?
!             atomic_fetch_op!(memory_order.memory_order_release, "+=")(cast(A*)obj, arg) :
!         order == memory_order.memory_order_acq_rel ?
!             atomic_fetch_op!(memory_order.memory_order_acq_rel, "+=")(cast(A*)obj, arg) :
!         order == memory_order.memory_order_seq_cst ?
!             atomic_fetch_op!(memory_order.memory_order_seq_cst, "+=")(cast(A*)obj, arg) :
!         assert(0);
  }
  
  ///
*************** A atomic_fetch_sub_explicit_impl(A, M)(s
*** 807,825 ****
  {
      assert(obj !is null);
  
!     final switch(order)
!     {
!         case memory_order.memory_order_relaxed:
!             return atomic_fetch_op!(memory_order.memory_order_relaxed, "-=")(cast(A*)obj, arg);
!         case memory_order.memory_order_acquire:
!             return atomic_fetch_op!(memory_order.memory_order_acquire, "-=")(cast(A*)obj, arg);
!         case memory_order.memory_order_release:
!             return atomic_fetch_op!(memory_order.memory_order_release, "-=")(cast(A*)obj, arg);
!         case memory_order.memory_order_acq_rel:
!             return atomic_fetch_op!(memory_order.memory_order_acq_rel, "-=")(cast(A*)obj, arg);
!         case memory_order.memory_order_seq_cst:
!             return atomic_fetch_op!(memory_order.memory_order_seq_cst, "-=")(cast(A*)obj, arg);
!     }
  }
  
  ///
--- 794,811 ----
  {
      assert(obj !is null);
  
!     return
!         order == memory_order.memory_order_relaxed ?
!             atomic_fetch_op!(memory_order.memory_order_relaxed, "-=")(cast(A*)obj, arg) :
!         order == memory_order.memory_order_acquire ?
!             atomic_fetch_op!(memory_order.memory_order_acquire, "-=")(cast(A*)obj, arg) :
!         order == memory_order.memory_order_release ?
!             atomic_fetch_op!(memory_order.memory_order_release, "-=")(cast(A*)obj, arg) :
!         order == memory_order.memory_order_acq_rel ?
!             atomic_fetch_op!(memory_order.memory_order_acq_rel, "-=")(cast(A*)obj, arg) :
!         order == memory_order.memory_order_seq_cst ?
!             atomic_fetch_op!(memory_order.memory_order_seq_cst, "-=")(cast(A*)obj, arg) :
!         assert(0);
  }
  
  ///
*************** A atomic_fetch_or_explicit_impl(A, M)(sh
*** 856,874 ****
  {
      assert(obj !is null);
  
!     final switch(order)
!     {
!         case memory_order.memory_order_relaxed:
!             return atomic_fetch_op!(memory_order.memory_order_relaxed, "|=")(cast(A*)obj, arg);
!         case memory_order.memory_order_acquire:
!             return atomic_fetch_op!(memory_order.memory_order_acquire, "|=")(cast(A*)obj, arg);
!         case memory_order.memory_order_release:
!             return atomic_fetch_op!(memory_order.memory_order_release, "|=")(cast(A*)obj, arg);
!         case memory_order.memory_order_acq_rel:
!             return atomic_fetch_op!(memory_order.memory_order_acq_rel, "|=")(cast(A*)obj, arg);
!         case memory_order.memory_order_seq_cst:
!             return atomic_fetch_op!(memory_order.memory_order_seq_cst, "|=")(cast(A*)obj, arg);
!     }
  }
  
  ///
--- 842,859 ----
  {
      assert(obj !is null);
  
!     return
!         order == memory_order.memory_order_relaxed ?
!             atomic_fetch_op!(memory_order.memory_order_relaxed, "|=")(cast(A*)obj, arg) :
!         order == memory_order.memory_order_acquire ?
!             atomic_fetch_op!(memory_order.memory_order_acquire, "|=")(cast(A*)obj, arg) :
!         order == memory_order.memory_order_release ?
!             atomic_fetch_op!(memory_order.memory_order_release, "|=")(cast(A*)obj, arg) :
!         order == memory_order.memory_order_acq_rel ?
!             atomic_fetch_op!(memory_order.memory_order_acq_rel, "|=")(cast(A*)obj, arg) :
!         order == memory_order.memory_order_seq_cst ?
!             atomic_fetch_op!(memory_order.memory_order_seq_cst, "|=")(cast(A*)obj, arg) :
!         assert(0);
  }
  
  ///
*************** A atomic_fetch_xor_explicit_impl(A, M)(s
*** 901,919 ****
  {
      assert(obj !is null);
  
!     final switch(order)
!     {
!         case memory_order.memory_order_relaxed:
!            return atomic_fetch_op!(memory_order.memory_order_relaxed, "^=")(cast(A*)obj, arg);
!         case memory_order.memory_order_acquire:
!             return atomic_fetch_op!(memory_order.memory_order_acquire, "^=")(cast(A*)obj, arg);
!         case memory_order.memory_order_release:
!             return atomic_fetch_op!(memory_order.memory_order_release, "^=")(cast(A*)obj, arg);
!         case memory_order.memory_order_acq_rel:
!             return atomic_fetch_op!(memory_order.memory_order_acq_rel, "^=")(cast(A*)obj, arg);
!         case memory_order.memory_order_seq_cst:
!             return atomic_fetch_op!(memory_order.memory_order_seq_cst, "^=")(cast(A*)obj, arg);
!     }
  }
  
  ///
--- 886,903 ----
  {
      assert(obj !is null);
  
!     return
!         order == memory_order.memory_order_relaxed ?
!             atomic_fetch_op!(memory_order.memory_order_relaxed, "^=")(cast(A*)obj, arg) :
!         order == memory_order.memory_order_acquire ?
!             atomic_fetch_op!(memory_order.memory_order_acquire, "^=")(cast(A*)obj, arg) :
!         order == memory_order.memory_order_release ?
!             atomic_fetch_op!(memory_order.memory_order_release, "^=")(cast(A*)obj, arg) :
!         order == memory_order.memory_order_acq_rel ?
!             atomic_fetch_op!(memory_order.memory_order_acq_rel, "^=")(cast(A*)obj, arg) :
!         order == memory_order.memory_order_seq_cst ?
!             atomic_fetch_op!(memory_order.memory_order_seq_cst, "^=")(cast(A*)obj, arg) :
!         assert(0);
  }
  
  ///
*************** A atomic_fetch_and_explicit_impl(A, M)(s
*** 946,964 ****
  {
      assert(obj !is null);
  
!     final switch(order)
!     {
!         case memory_order.memory_order_relaxed:
!             return atomic_fetch_op!(memory_order.memory_order_relaxed, "&=")(cast(A*)obj, arg);
!         case memory_order.memory_order_acquire:
!             return atomic_fetch_op!(memory_order.memory_order_acquire, "&=")(cast(A*)obj, arg);
!         case memory_order.memory_order_release:
!             return atomic_fetch_op!(memory_order.memory_order_release, "&=")(cast(A*)obj, arg);
!         case memory_order.memory_order_acq_rel:
!             return atomic_fetch_op!(memory_order.memory_order_acq_rel, "&=")(cast(A*)obj, arg);
!         case memory_order.memory_order_seq_cst:
!             return atomic_fetch_op!(memory_order.memory_order_seq_cst, "&=")(cast(A*)obj, arg);
!     }
  }
  
  ///
--- 930,947 ----
  {
      assert(obj !is null);
  
!     return
!         order == memory_order.memory_order_relaxed ?
!             atomic_fetch_op!(memory_order.memory_order_relaxed, "&=")(cast(A*)obj, arg) :
!         order == memory_order.memory_order_acquire ?
!             atomic_fetch_op!(memory_order.memory_order_acquire, "&=")(cast(A*)obj, arg) :
!         order == memory_order.memory_order_release ?
!             atomic_fetch_op!(memory_order.memory_order_release, "&=")(cast(A*)obj, arg) :
!         order == memory_order.memory_order_acq_rel ?
!             atomic_fetch_op!(memory_order.memory_order_acq_rel, "&=")(cast(A*)obj, arg) :
!         order == memory_order.memory_order_seq_cst ?
!             atomic_fetch_op!(memory_order.memory_order_seq_cst, "&=")(cast(A*)obj, arg) :
!         assert(0);
  }
  
  ///
*************** unittest
*** 971,981 ****
  
  private:
  
- pragma(inline, true)
  A atomic_fetch_op(memory_order order, string op, A, M)(A* obj, M arg) @trusted
  {
      static if (is(A : ulong) && (op == "+=" || op == "-="))
      {
          // these cannot handle floats
          static if (op == "+=")
          {
--- 954,964 ----
  
  private:
  
  A atomic_fetch_op(memory_order order, string op, A, M)(A* obj, M arg) @trusted
  {
      static if (is(A : ulong) && (op == "+=" || op == "-="))
      {
+         pragma(inline, true)
          // these cannot handle floats
          static if (op == "+=")
          {
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/stdc/stdio.d gcc-16-20260208/libphobos/libdruntime/core/stdc/stdio.d
*** gcc-16-20260201/libphobos/libdruntime/core/stdc/stdio.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/core/stdc/stdio.d	Sun Feb  8 22:32:16 2026
*************** else version (OpenBSD)
*** 212,223 ****
          ///
          L_tmpnam     = 1024
      }
- 
-     struct __sbuf
-     {
-         ubyte *_base;
-         int _size;
-     }
  }
  else version (DragonFlyBSD)
  {
--- 212,217 ----
*************** else version (OpenBSD)
*** 611,641 ****
      ///
      struct __sFILE
      {
!         ubyte*          _p;
!         int             _r;
!         int             _w;
!         short           _flags;
!         short           _file;
!         __sbuf          _bf;
!         int             _lbfsize;
! 
!         void*           _cookie;
!         int     function(void*)                         _close;
!         int     function(void*, scope char*, int)       _read;
!         fpos_t  function(void*, fpos_t, int)            _seek;
!         int     function(void*, scope const char*, int) _write;
! 
!         __sbuf          _ext;
!         ubyte*          _up;
!         int             _ur;
! 
!         ubyte[3]        _ubuf;
!         ubyte[1]        _nbuf;
! 
!         __sbuf          _lb;
! 
!         int             _blksize;
!         fpos_t          _offset;
      }
  
      ///
--- 605,611 ----
      ///
      struct __sFILE
      {
!         void* dummy;
      }
  
      ///
*************** else version (OpenBSD)
*** 1019,1034 ****
          _IONBF = 2,
      }
  
!     private extern shared FILE[3] __sF;
!     @property auto __stdin()() { return &__sF[0]; }
!     @property auto __stdout()() { return &__sF[1]; }
!     @property auto __stderr()() { return &__sF[2]; }
      ///
!     alias __stdin stdin;
      ///
!     alias __stdout stdout;
      ///
!     alias __stderr stderr;
  }
  else version (DragonFlyBSD)
  {
--- 989,1010 ----
          _IONBF = 2,
      }
  
!     struct __sFstub { long _stub; }
! 
!     private extern shared __sFstub[1] __stdin;
!     private extern shared __sFstub[1] __stdout;
!     private extern shared __sFstub[1] __stderr;
! 
!     @property auto __stdin1()() { return cast(FILE*)__stdin; }
!     @property auto __stdout1()() { return cast(FILE*)__stdout; }
!     @property auto __stderr1()() { return cast(FILE*)__stderr; }
! 
      ///
!     alias __stdin1 stdin;
      ///
!     alias __stdout1 stdout;
      ///
!     alias __stderr1 stderr;
  }
  else version (DragonFlyBSD)
  {
*************** else version (CRuntime_Glibc)
*** 1350,1358 ****
          alias vprintf = __vprintfieee128;
          ///
          pragma(scanf)
!         int __isoc99_vfscanfieee128(scope const char* format, va_list arg);
          ///
!         alias vscanf = __isoc99_vfscanfieee128;
          ///
          pragma(printf)
          int __printfieee128(scope const char* format, scope const ...);
--- 1326,1334 ----
          alias vprintf = __vprintfieee128;
          ///
          pragma(scanf)
!         int __isoc99_vscanfieee128(scope const char* format, va_list arg);
          ///
!         alias vscanf = __isoc99_vscanfieee128;
          ///
          pragma(printf)
          int __printfieee128(scope const char* format, scope const ...);
*************** else version (OpenBSD)
*** 1727,1809 ****
      {
          ///
          void rewind(FILE*);
-     }
-     @trusted private
-     {
          ///
!         pragma(mangle, "clearerr")
!         pure void __clearerr(FILE*);
          ///
!         pragma(mangle, "feof")
!         pure int __feof(FILE*);
          ///
!         pragma(mangle, "ferror")
!         pure int __ferror(FILE*);
          ///
!         pragma(mangle, "fileno")
!         int __fileno(FILE*);
!     }
! 
!     enum __SLBF = 0x0001;
!     enum __SNBF = 0x0002;
!     enum __SRD  = 0x0004;
!     enum __SWR  = 0x0008;
!     enum __SRW  = 0x0010;
!     enum __SEOF = 0x0020;
!     enum __SERR = 0x0040;
!     enum __SMBF = 0x0080;
!     enum __SAPP = 0x0100;
!     enum __SSTR = 0x0200;
!     enum __SOPT = 0x0400;
!     enum __SNPT = 0x0800;
!     enum __SOFF = 0x1000;
!     enum __SMOD = 0x2000;
!     enum __SALC = 0x4000;
!     enum __SIGN = 0x8000;
! 
!     extern immutable __gshared int __isthreaded;
! 
!     extern (D) @trusted
!     {
!         void __sclearerr()(FILE* p)
!         {
!             p._flags = p._flags & ~(__SERR|__SEOF);
!         }
! 
!         int __sfeof()(FILE* p)
!         {
!             return (p._flags & __SEOF) != 0;
!         }
! 
!         int __sferror()(FILE* p)
!         {
!             return (p._flags & __SERR) != 0;
!         }
! 
!         int __sfileno()(FILE* p)
!         {
!             return p._file;
!         }
! 
!         pure void clearerr()(FILE* file)
!         {
!             !__isthreaded ? __sclearerr(file) : __clearerr(file);
!         }
! 
!         pure int feof()(FILE* file)
!         {
!             return !__isthreaded ? __sfeof(file) : __feof(file);
!         }
! 
!         pure int ferror()(FILE* file)
!         {
!             return !__isthreaded ? __sferror(file) : __ferror(file);
!         }
! 
!         int fileno()(FILE* file)
!         {
!             return !__isthreaded ? __sfileno(file) : __fileno(file);
!         }
      }
  
      ///
--- 1703,1716 ----
      {
          ///
          void rewind(FILE*);
          ///
!         pure void clearerr(FILE*);
          ///
!         pure int  feof(FILE*);
          ///
!         pure int  ferror(FILE*);
          ///
!         int  fileno(FILE*);
      }
  
      ///
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/stdc/wchar_.d gcc-16-20260208/libphobos/libdruntime/core/stdc/wchar_.d
*** gcc-16-20260201/libphobos/libdruntime/core/stdc/wchar_.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/core/stdc/wchar_.d	Sun Feb  8 22:32:16 2026
*************** else version (CRuntime_UClibc)
*** 129,134 ****
--- 129,151 ----
          wchar_t __wc = 0;
      }
  }
+ else version (Windows)
+ {
+     ///
+     struct __mbstate_t
+     {
+         int __count;
+         union ___value
+         {
+             wint_t __wch = 0;
+             char[4] __wchb;
+         }
+         ___value __value;
+     }
+ 
+     ///
+     alias mbstate_t = __mbstate_t;
+ }
  else
  {
      ///
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/sys/freebsd/config.d gcc-16-20260208/libphobos/libdruntime/core/sys/freebsd/config.d
*** gcc-16-20260201/libphobos/libdruntime/core/sys/freebsd/config.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/core/sys/freebsd/config.d	Sun Feb  8 22:32:16 2026
*************** public import core.sys.posix.config;
*** 14,20 ****
  // NOTE: When adding newer versions of FreeBSD, verify all current versioned
  // bindings are still compatible with the release.
  
!      version (FreeBSD_14) enum __FreeBSD_version = 1400000;
  else version (FreeBSD_13) enum __FreeBSD_version = 1301000;
  else version (FreeBSD_12) enum __FreeBSD_version = 1203000;
  else version (FreeBSD_11) enum __FreeBSD_version = 1104000;
--- 14,21 ----
  // NOTE: When adding newer versions of FreeBSD, verify all current versioned
  // bindings are still compatible with the release.
  
!      version (FreeBSD_15) enum __FreeBSD_version = 1500063;
! else version (FreeBSD_14) enum __FreeBSD_version = 1400097;
  else version (FreeBSD_13) enum __FreeBSD_version = 1301000;
  else version (FreeBSD_12) enum __FreeBSD_version = 1203000;
  else version (FreeBSD_11) enum __FreeBSD_version = 1104000;
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/sys/linux/hdlc/ioctl.d gcc-16-20260208/libphobos/libdruntime/core/sys/linux/hdlc/ioctl.d
*** gcc-16-20260201/libphobos/libdruntime/core/sys/linux/hdlc/ioctl.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/libphobos/libdruntime/core/sys/linux/hdlc/ioctl.d	Sun Feb  8 22:32:16 2026
***************
*** 0 ****
--- 1,92 ----
+ /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
+ module core.sys.linux.hdlc.ioctl;
+ 
+ import core.sys.linux.net.if_ : IFNAMSIZ;
+ 
+ version (linux):
+ extern(C):
+ @nogc:
+ nothrow:
+ 
+ enum GENERIC_HDLC_VERSION = 4;	/* For synchronization with sethdlc utility */
+ 
+ enum CLOCK_DEFAULT = 0;	/* Default setting */
+ enum CLOCK_EXT = 1;	/* External TX and RX clock - DTE */
+ enum CLOCK_INT = 2;	/* Internal TX and RX clock - DCE */
+ enum CLOCK_TXINT = 3;	/* Internal TX and external RX clock */
+ enum CLOCK_TXFROMRX = 4;	/* TX clock derived from external RX clock */
+ 
+ 
+ enum ENCODING_DEFAULT = 0; /* Default setting */
+ enum ENCODING_NRZ = 1;
+ enum ENCODING_NRZI = 2;
+ enum ENCODING_FM_MARK = 3;
+ enum ENCODING_FM_SPACE = 4;
+ enum ENCODING_MANCHESTER = 5;
+ 
+ 
+ enum PARITY_DEFAULT = 0; /* Default setting */
+ enum PARITY_NONE = 1; /* No parity */
+ enum PARITY_CRC16_PR0 = 2; /* CRC16, initial value 0x0000 */
+ enum PARITY_CRC16_PR1 = 3; /* CRC16, initial value 0xFFFF */
+ enum PARITY_CRC16_PR0_CCITT = 4; /* CRC16, initial 0x0000, ITU-T version */
+ enum PARITY_CRC16_PR1_CCITT = 5; /* CRC16, initial 0xFFFF, ITU-T version */
+ enum PARITY_CRC32_PR0_CCITT = 6; /* CRC32, initial value 0x00000000 */
+ enum PARITY_CRC32_PR1_CCITT = 7; /* CRC32, initial value 0xFFFFFFFF */
+ 
+ enum LMI_DEFAULT = 0; /* Default setting */
+ enum LMI_NONE = 1; /* No LMI, all PVCs are static */
+ enum LMI_ANSI = 2; /* ANSI Annex D */
+ enum LMI_CCITT = 3; /* ITU-T Annex A */
+ enum LMI_CISCO = 4; /* The "original" LMI, aka Gang of Four */
+ 
+ struct sync_serial_settings {
+ 	uint clock_rate; /* bits per second */
+ 	uint clock_type; /* internal, external, TX-internal etc. */
+ 	ushort loopback;
+ }          /* V.35, V.24, X.21 */
+ 
+ struct te1_settings{
+ 	uint clock_rate; /* bits per second */
+ 	uint clock_type; /* internal, external, TX-internal etc. */
+ 	ushort loopback;
+ 	uint slot_map;
+ }                  /* T1, E1 */
+ 
+ struct raw_hdlc_proto {
+ 	ushort encoding;
+ 	ushort parity;
+ }
+ 
+ struct fr_proto {
+ 	uint t391;
+ 	uint t392;
+ 	uint n391;
+ 	uint n392;
+ 	uint n393;
+ 	ushort lmi;
+ 	ushort dce; /* 1 for DCE (network side) operation */
+ }
+ 
+ struct fr_proto_pvc {
+ 	uint dlci;
+ }          /* for creating/deleting FR PVCs */
+ 
+ struct fr_proto_pvc_info {
+ 	uint dlci;
+ 	char[IFNAMSIZ] master = 0;	/* Name of master FRAD device */
+ }		/* for returning PVC information only */
+ 
+ struct cisco_proto {
+     uint interval;
+     uint timeout;
+ }
+ 
+ struct x25_hdlc_proto {
+ 	ushort dce; /* 1 for DCE (network side) operation */
+ 	uint modulo; /* modulo (8 = basic / 128 = extended) */
+ 	uint window; /* frame window size */
+ 	uint t1; /* timeout t1 */
+ 	uint t2; /* timeout t2 */
+ 	uint n2; /* frame retry counter */
+ }
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/sys/linux/net/if_.d gcc-16-20260208/libphobos/libdruntime/core/sys/linux/net/if_.d
*** gcc-16-20260201/libphobos/libdruntime/core/sys/linux/net/if_.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/libphobos/libdruntime/core/sys/linux/net/if_.d	Sun Feb  8 22:32:16 2026
***************
*** 0 ****
--- 1,134 ----
+ /++
+     D header file for Linux's net/if.h.
+ 
+     Copyright: Copyright 2025
+     License:   $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
+  +/
+ module core.sys.linux.net.if_;
+ 
+ public import core.sys.posix.sys.socket : sockaddr;
+ public import core.sys.linux.hdlc.ioctl;
+ 
+ version (linux):
+ extern(C):
+ @nogc:
+ nothrow:
+ 
+ enum IFNAMSIZ = 16;
+ enum IFALIASZ = 256;
+ enum ALTIFNAMSIZ = 128;
+ enum IFHWADDRLEN = 6;
+ 
+ enum IFF_UP          = 0x1;
+ enum IFF_BROADCAST   = 0x2;
+ enum IFF_DEBUG       = 0x4;
+ enum IFF_LOOPBACK    = 0x8;
+ enum IFF_POINTOPOINT = 0x10;
+ enum IFF_NOTRAILERS  = 0x20;
+ enum IFF_RUNNING     = 0x40;
+ enum IFF_NOARP       = 0x80;
+ enum IFF_PROMISC     = 0x100;
+ enum IFF_ALLMULTI    = 0x200;
+ enum IFF_MASTER      = 0x400;
+ enum IFF_SLAVE       = 0x800;
+ enum IFF_MULTICAST   = 0x1000;
+ enum IFF_PORTSEL     = 0x2000;
+ enum IFF_AUTOMEDIA   = 0x4000;
+ enum IFF_DYNAMIC     = 0x8000;
+ enum IFF_LOWER_UP    = 0x10000;
+ enum IFF_DORMANT     = 0x20000;
+ enum IFF_ECHO        = 0x40000;
+ 
+ enum IF_GET_IFACE = 0x0001;		/* for querying only */
+ enum IF_GET_PROTO = 0x0002;
+ 
+ /* For definitions see hdlc.h */
+ enum IF_IFACE_V35 = 0x1000;		/* V.35 serial interface	*/
+ enum IF_IFACE_V24 = 0x1001;		/* V.24 serial interface	*/
+ enum IF_IFACE_X21 = 0x1002;		/* X.21 serial interface	*/
+ enum IF_IFACE_T1 = 0x1003;		/* T1 telco serial interface	*/
+ enum IF_IFACE_E1 = 0x1004;		/* E1 telco serial interface	*/
+ enum IF_IFACE_SYNC_SERIAL = 0x1005;	/* can't be set by software	*/
+ enum IF_IFACE_X21D = 0x1006;          /* X.21 Dual Clocking (FarSite) */
+ 
+ /* For definitions see hdlc.h */
+ enum IF_PROTO_HDLC = 0x2000;		/* raw HDLC protocol		*/
+ enum IF_PROTO_PPP = 0x2001;		/* PPP protocol			*/
+ enum IF_PROTO_CISCO = 0x2002;		/* Cisco HDLC protocol		*/
+ enum IF_PROTO_FR = 0x2003;		/* Frame Relay protocol		*/
+ enum IF_PROTO_FR_ADD_PVC = 0x2004;	/*    Create FR PVC		*/
+ enum IF_PROTO_FR_DEL_PVC = 0x2005;	/*    Delete FR PVC		*/
+ enum IF_PROTO_X25 = 0x2006;		/* X.25				*/
+ enum IF_PROTO_HDLC_ETH = 0x2007;	/* raw HDLC, Ethernet emulation	*/
+ enum IF_PROTO_FR_ADD_ETH_PVC = 0x2008;	/*  Create FR Ethernet-bridged PVC */
+ enum IF_PROTO_FR_DEL_ETH_PVC =  0x2009;	/*  Delete FR Ethernet-bridged PVC */
+ enum IF_PROTO_FR_PVC = 0x200A;		/* for reading PVC status	*/
+ enum IF_PROTO_FR_ETH_PVC = 0x200B;
+ enum IF_PROTO_RAW = 0x200C;          /* RAW Socket                   */
+ 
+ enum IF_OPER_UNKNOWN = 0;
+ enum IF_OPER_NOTPRESENT = 1;
+ enum IF_OPER_DOWN = 2;
+ enum IF_OPER_LOWERLAYERDOWN = 3;
+ enum IF_OPER_TESTING = 4;
+ enum IF_OPER_DORMANT = 5;
+ enum IF_OPER_UP = 6;
+ 
+ enum IF_LINK_MODE_DEFAULT = 0;
+ enum IF_LINK_MODE_DORMANT = 1;	/* limit upward transition to dormant */
+ enum IF_LINK_MODE_TESTING = 2;	/* limit upward transition to testing */
+ 
+ struct ifmap {
+ 	uint mem_start;
+ 	uint mem_end;
+ 	ushort base_addr;
+ 	ubyte irq;
+ 	ubyte dma;
+ 	ubyte port;
+ 	/* 3 bytes spare */
+ }
+ 
+ struct if_settings {
+ 	uint type;	/* Type of physical device or protocol */
+ 	uint size;	/* Size of the data allocated by the caller */
+ 	union {
+ 		/* {atm/eth/dsl}_settings anyone ? */
+ 		raw_hdlc_proto* raw_hdlc;
+ 		cisco_proto* cisco;
+ 		fr_proto* fr;
+ 		fr_proto_pvc* fr_pvc;
+ 		fr_proto_pvc_info* fr_pvc_info;
+ 		x25_hdlc_proto* x25;
+ 
+ 		/* interface settings */
+ 		sync_serial_settings* sync;
+ 		te1_settings* te1;
+ 	};
+ }
+ 
+ struct ifreq {
+ 	union
+ 	{
+ 		char[IFNAMSIZ]	ifrn_name = 0;		/* if name, e.g. "en0" */
+ 	}
+ 
+ 	union {
+ 
+ 		short	ifru_flags;
+ 		int	ifru_ivalue;
+ 		int	ifru_mtu;
+ 		ifmap ifru_map;
+ 		char[IFNAMSIZ]	ifru_slave;	/* Just fits the size */
+ 		char[IFNAMSIZ]	ifru_newname;
+ 		void*	ifru_data;
+ 		if_settings ifru_settings;
+ 	}
+ }
+ 
+ struct ifconf {
+ 	int	ifc_len;			/* size of buffer	*/
+ 	union {
+ 		char* ifcu_buf;
+ 		ifreq* ifcu_req;
+ 	}
+ }
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/sys/linux/string.d gcc-16-20260208/libphobos/libdruntime/core/sys/linux/string.d
*** gcc-16-20260201/libphobos/libdruntime/core/sys/linux/string.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/core/sys/linux/string.d	Sun Feb  8 22:32:16 2026
*************** nothrow:
*** 18,21 ****
--- 18,25 ----
  static if (_GNU_SOURCE)
  {
      pure void* memmem(return scope const void* haystack, size_t haystacklen, scope const void* needle, size_t needlelen);
+     /// return string describing error number
+     const(char)* strerrorname_np(int);
+     /// ditto
+     const(char)* strerrordesc_np(int);
  }
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/sys/linux/sys/inotify.d gcc-16-20260208/libphobos/libdruntime/core/sys/linux/sys/inotify.d
*** gcc-16-20260201/libphobos/libdruntime/core/sys/linux/sys/inotify.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/core/sys/linux/sys/inotify.d	Sun Feb  8 22:32:16 2026
*************** struct inotify_event
*** 54,60 ****
  
  enum: uint
  {
!     IN_ACCESS        = 0x00000000,
      IN_MODIFY        = 0x00000002,
      IN_ATTRIB        = 0x00000004,
      IN_CLOSE_WRITE   = 0x00000008,
--- 54,60 ----
  
  enum: uint
  {
!     IN_ACCESS        = 0x00000001,
      IN_MODIFY        = 0x00000002,
      IN_ATTRIB        = 0x00000004,
      IN_CLOSE_WRITE   = 0x00000008,
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/sys/openbsd/unistd.d gcc-16-20260208/libphobos/libdruntime/core/sys/openbsd/unistd.d
*** gcc-16-20260201/libphobos/libdruntime/core/sys/openbsd/unistd.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/core/sys/openbsd/unistd.d	Sun Feb  8 22:32:16 2026
*************** nothrow:
*** 14,20 ****
  
  public import core.sys.posix.sys.types;
  
! int getentropy(void*, size_t);
  int getthrname(pid_t, char*, size_t);
  int pledge(const scope char*, const scope char*);
  int setthrname(pid_t, const scope char*);
--- 14,20 ----
  
  public import core.sys.posix.sys.types;
  
! public import core.sys.posix.unistd : getentropy;
  int getthrname(pid_t, char*, size_t);
  int pledge(const scope char*, const scope char*);
  int setthrname(pid_t, const scope char*);
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/sys/posix/config.d gcc-16-20260208/libphobos/libdruntime/core/sys/posix/config.d
*** gcc-16-20260201/libphobos/libdruntime/core/sys/posix/config.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/core/sys/posix/config.d	Sun Feb  8 22:32:16 2026
*************** public import core.stdc.config;
*** 20,28 ****
  version (Posix):
  extern (C) nothrow @nogc:
  
! enum _XOPEN_SOURCE     = 600;
  enum _POSIX_SOURCE     = true;
! enum _POSIX_C_SOURCE   = 200112L;
  
  version (CRuntime_Glibc)
  {
--- 20,28 ----
  version (Posix):
  extern (C) nothrow @nogc:
  
! enum _XOPEN_SOURCE     = 700;
  enum _POSIX_SOURCE     = true;
! enum _POSIX_C_SOURCE   = 200809L;
  
  version (CRuntime_Glibc)
  {
*************** else version (CRuntime_Musl)
*** 87,94 ****
      // Not present in Musl sources
      enum __REDIRECT          = false;
  
!     // Those three are irrelevant for Musl as it always uses 64 bits off_t
!     enum __USE_FILE_OFFSET64 = false;
      enum __USE_LARGEFILE     = __USE_FILE_OFFSET64 && !__REDIRECT;
      enum __USE_LARGEFILE64   = __USE_FILE_OFFSET64 && !__REDIRECT;
  
--- 87,94 ----
      // Not present in Musl sources
      enum __REDIRECT          = false;
  
!     // Always use code paths that are compatible with 64 bits off_t
!     enum __USE_FILE_OFFSET64 = true;
      enum __USE_LARGEFILE     = __USE_FILE_OFFSET64 && !__REDIRECT;
      enum __USE_LARGEFILE64   = __USE_FILE_OFFSET64 && !__REDIRECT;
  
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/sys/posix/fcntl.d gcc-16-20260208/libphobos/libdruntime/core/sys/posix/fcntl.d
*** gcc-16-20260201/libphobos/libdruntime/core/sys/posix/fcntl.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/core/sys/posix/fcntl.d	Sun Feb  8 22:32:16 2026
*************** else version (Darwin)
*** 500,505 ****
--- 500,511 ----
          short   l_type;
          short   l_whence;
      }
+ 
+     enum AT_FDCWD = -2;
+     enum AT_EACCESS          = 0x0010;
+     enum AT_SYMLINK_NOFOLLOW = 0x0020;
+     enum AT_SYMLINK_FOLLOW   = 0x0040;
+     enum AT_REMOVEDIR        = 0x0080;
  }
  else version (FreeBSD)
  {
*************** else version (FreeBSD)
*** 559,566 ****
          short   l_whence;
      }
  
-     enum AT_SYMLINK_NOFOLLOW = 0x200;
      enum AT_FDCWD = -100;
  }
  else version (OpenBSD)
  {
--- 565,575 ----
          short   l_whence;
      }
  
      enum AT_FDCWD = -100;
+     enum AT_EACCESS          = 0x100;
+     enum AT_SYMLINK_NOFOLLOW = 0x200;
+     enum AT_SYMLINK_FOLLOW   = 0x400;
+     enum AT_REMOVEDIR        = 0x800;
  }
  else version (OpenBSD)
  {
*************** else version (NetBSD)
*** 676,681 ****
--- 685,696 ----
          short   l_type;
          short   l_whence;
      }
+ 
+     enum AT_FDCWD = -100;
+     enum AT_EACCESS          = 0x100;
+     enum AT_SYMLINK_NOFOLLOW = 0x200;
+     enum AT_SYMLINK_FOLLOW   = 0x400;
+     enum AT_REMOVEDIR        = 0x800;
  }
  else version (DragonFlyBSD)
  {
*************** else version (DragonFlyBSD)
*** 760,765 ****
--- 775,786 ----
      }
  
      alias oflock = flock;
+ 
+     enum AT_FDCWD = 0xFFFAFDCD;
+     enum AT_SYMLINK_NOFOLLOW = 1;
+     enum AT_REMOVEDIR        = 2;
+     enum AT_EACCESS          = 4;
+     enum AT_SYMLINK_FOLLOW   = 8;
  }
  else version (Solaris)
  {
*************** else version (Solaris)
*** 843,848 ****
--- 864,874 ----
              c_long[4]   l_pad;
          }
      }
+     enum AT_FDCWD = -3041965;
+     enum AT_SYMLINK_NOFOLLOW = 0x1000;
+     enum AT_SYMLINK_FOLLOW   = 0x2000;
+     enum AT_REMOVEDIR        = 0x1;
+     enum AT_EACCESS          = 0x4;
  }
  else
  {
*************** else
*** 853,858 ****
--- 879,885 ----
  int creat(const scope char*, mode_t);
  int fcntl(int, int, ...);
  int open(const scope char*, int, ...);
+ int openat(int, const scope char*, int, ...);
  */
  version (CRuntime_Glibc)
  {
*************** version (CRuntime_Glibc)
*** 863,899 ****
--- 890,935 ----
  
          int   open64(const scope char*, int, ...);
          alias open64 open;
+ 
+         int   openat64(int, const scope char*, int, ...);
+         alias openat64 openat;
      }
      else
      {
          int   creat(const scope char*, mode_t);
          int   open(const scope char*, int, ...);
+         int   openat(int, const scope char*, int, ...);
      }
  }
  else version (Darwin)
  {
      int creat(const scope char*, mode_t);
      int open(const scope char*, int, ...);
+     int openat(int, const scope char*, int, ...);
  }
  else version (FreeBSD)
  {
      int creat(const scope char*, mode_t);
      int open(const scope char*, int, ...);
+     int openat(int, const scope char*, int, ...);
  }
  else version (OpenBSD)
  {
      int creat(const scope char*, mode_t);
      int open(const scope char*, int, ...);
+     int openat(int, const scope char*, int, ...);
  }
  else version (NetBSD)
  {
      int creat(const scope char*, mode_t);
      int open(const scope char*, int, ...);
+     int openat(int, const scope char*, int, ...);
  }
  else version (DragonFlyBSD)
  {
      int creat(const scope char*, mode_t);
      int open(const scope char*, int, ...);
+     int openat(int, const scope char*, int, ...);
  }
  else version (Solaris)
  {
*************** else version (Solaris)
*** 901,911 ****
--- 937,949 ----
      {
          int creat(const scope char*, mode_t);
          int open(const scope char*, int, ...);
+         int openat(int, const scope char*, int, ...);
  
          static if (__USE_LARGEFILE64)
          {
              alias creat creat64;
              alias open open64;
+             alias openat openat64;
          }
      }
      else
*************** else version (Solaris)
*** 917,927 ****
--- 955,969 ----
  
              int open64(const scope char*, int, ...);
              alias open64 open;
+ 
+             int openat64(int, const scope char*, int, ...);
+             alias openat64 openat;
          }
          else
          {
              int creat(const scope char*, mode_t);
              int open(const scope char*, int, ...);
+             int openat(int, const scope char*, int, ...);
          }
      }
  }
*************** else version (CRuntime_Bionic)
*** 929,938 ****
--- 971,983 ----
  {
      int   creat(const scope char*, mode_t);
      int   open(const scope char*, int, ...);
+     int   openat(int, const scope char*, int, ...);
  }
  else version (CRuntime_Musl)
  {
+     int creat(const scope char*, mode_t);
      int open(const scope char*, int, ...);
+     int openat(int, const scope char*, int, ...);
  }
  else version (CRuntime_UClibc)
  {
*************** else version (CRuntime_UClibc)
*** 943,953 ****
--- 988,1002 ----
  
          int   open64(const scope char*, int, ...);
          alias open64 open;
+ 
+         int openat64(int, const scope char*, int, ...);
+         alias openat64 openat;
      }
      else
      {
          int   creat(const scope char*, mode_t);
          int   open(const scope char*, int, ...);
+         int openat(int, const scope char*, int, ...);
      }
  }
  else
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/sys/posix/pthread.d gcc-16-20260208/libphobos/libdruntime/core/sys/posix/pthread.d
*** gcc-16-20260201/libphobos/libdruntime/core/sys/posix/pthread.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/core/sys/posix/pthread.d	Sun Feb  8 22:32:16 2026
*************** else version (CRuntime_Bionic)
*** 371,376 ****
--- 371,382 ----
          PTHREAD_CREATE_DETACHED
      }
  
+     enum
+     {
+         PTHREAD_EXPLICIT_SCHED = 0,
+         PTHREAD_INHERIT_SCHED = 1,
+     }
+ 
      enum PTHREAD_MUTEX_INITIALIZER = pthread_mutex_t.init;
      enum PTHREAD_ONCE_INIT         = pthread_once_t.init;
  
*************** else version (CRuntime_Musl)
*** 384,393 ****
--- 390,415 ----
  {
      enum
      {
+         PTHREAD_CANCEL_ENABLE = 0,
+         PTHREAD_CANCEL_DISABLE = 1,
+         PTHREAD_CANCEL_DEFERRED = 0,
+         PTHREAD_CANCEL_ASYNCHRONOUS = 1,
+     }
+ 
+     enum PTHREAD_CANCELED = cast(void*) -1;
+ 
+     enum
+     {
          PTHREAD_CREATE_JOINABLE = 0,
          PTHREAD_CREATE_DETACHED = 1
      }
  
+     enum
+     {
+         PTHREAD_INHERIT_SCHED = 0,
+         PTHREAD_EXPLICIT_SCHED = 1,
+     }
+ 
      enum PTHREAD_MUTEX_INITIALIZER = pthread_mutex_t.init;
      enum PTHREAD_ONCE_INIT = pthread_once_t.init;
  
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/sys/posix/stdc/time.d gcc-16-20260208/libphobos/libdruntime/core/sys/posix/stdc/time.d
*** gcc-16-20260201/libphobos/libdruntime/core/sys/posix/stdc/time.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/core/sys/posix/stdc/time.d	Sun Feb  8 22:32:16 2026
***************
*** 1,5 ****
  /**
!  * D header file for C99.
   *
   * $(C_HEADER_DESCRIPTION pubs.opengroup.org/onlinepubs/009695399/basedefs/_time.h.html, _time.h)
   *
--- 1,5 ----
  /**
!  * D header file for C99/C11.
   *
   * $(C_HEADER_DESCRIPTION pubs.opengroup.org/onlinepubs/009695399/basedefs/_time.h.html, _time.h)
   *
*************** struct tm
*** 50,55 ****
--- 50,62 ----
  }
  
  public import core.sys.posix.sys.types : time_t, clock_t;
+ public import core.sys.posix.time : timespec;
+ 
+ /// timespec_get introduced in C11
+ @system int timespec_get(timespec* ts, int base);
+ 
+ /// Base Value used for timespec_get
+ enum TIME_UTC = 1;
  
  ///
  version (CRuntime_Glibc)
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/sys/posix/stdio.d gcc-16-20260208/libphobos/libdruntime/core/sys/posix/stdio.d
*** gcc-16-20260201/libphobos/libdruntime/core/sys/posix/stdio.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/core/sys/posix/stdio.d	Sun Feb  8 22:32:16 2026
*************** ssize_t getline(char**, size_t*, FILE*);
*** 246,251 ****
--- 246,252 ----
  char*   gets(char*);
  int     pclose(FILE*);
  FILE*   popen(const scope char*, const scope char*);
+ int     renameat(int, const scope char*, int, const scope char*);
  */
  
  version (CRuntime_Glibc)
*************** version (CRuntime_Glibc)
*** 274,279 ****
--- 275,281 ----
  
      ssize_t getdelim(char**, size_t*, int, FILE*);
      ssize_t getline(char**, size_t*, FILE*);
+     int     renameat(int, const scope char*, int, const scope char*);
  }
  else version (CRuntime_UClibc)
  {
*************** else version (CRuntime_UClibc)
*** 302,307 ****
--- 304,310 ----
  
      ssize_t getdelim(char**, size_t*, int, FILE*);
      ssize_t getline(char**, size_t*, FILE*);
+     int     renameat(int, const scope char*, int, const scope char*);
  }
  else version (CRuntime_Musl)
  {
*************** else version (CRuntime_Musl)
*** 318,323 ****
--- 321,327 ----
  
      ssize_t getdelim(char**, size_t*, int, FILE*);
      ssize_t getline(char**, size_t*, FILE*);
+     int     renameat(int, const scope char*, int, const scope char*);
  }
  else version (CRuntime_Bionic)
  {
*************** else version (CRuntime_Bionic)
*** 345,350 ****
--- 349,355 ----
  
      ssize_t getdelim(char**, size_t*, int, FILE*);
      ssize_t getline(char**, size_t*, FILE*);
+     int     renameat(int, const scope char*, int, const scope char*);
  }
  else version (Darwin)
  {
*************** else version (Darwin)
*** 355,360 ****
--- 360,366 ----
  
      ssize_t getdelim(char**, size_t*, int, FILE*);
      ssize_t getline(char**, size_t*, FILE*);
+     int     renameat(int, const scope char*, int, const scope char*);
  }
  else version (FreeBSD)
  {
*************** else version (FreeBSD)
*** 369,374 ****
--- 375,381 ----
      {
          ssize_t getdelim(char**, size_t*, int, FILE*);
          ssize_t getline(char**, size_t*, FILE*);
+         int     renameat(int, const scope char*, int, const scope char*);
      }
  }
  else version (NetBSD)
*************** else version (OpenBSD)
*** 390,395 ****
--- 397,403 ----
  
      ssize_t getdelim(char**, size_t*, int, FILE*);
      ssize_t getline(char**, size_t*, FILE*);
+     int     renameat(int, const scope char*, int, const scope char*);
  }
  else version (DragonFlyBSD)
  {
*************** else version (DragonFlyBSD)
*** 400,405 ****
--- 408,414 ----
  
      ssize_t getdelim(char**, size_t*, int, FILE*);
      ssize_t getline(char**, size_t*, FILE*);
+     int     renameat(int, const scope char*, int, const scope char*);
  }
  else version (Solaris)
  {
*************** else version (Solaris)
*** 428,433 ****
--- 437,443 ----
  
      ssize_t getdelim(char**, size_t*, int, FILE*);
      ssize_t getline(char**, size_t*, FILE*);
+     int     renameat(int, const scope char*, int, const scope char*);
  }
  else version (Posix)
  {
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/sys/posix/sys/shm.d gcc-16-20260208/libphobos/libdruntime/core/sys/posix/sys/shm.d
*** gcc-16-20260201/libphobos/libdruntime/core/sys/posix/sys/shm.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/core/sys/posix/sys/shm.d	Sun Feb  8 22:32:16 2026
*************** version (linux)
*** 66,76 ****
          ipc_perm    shm_perm;
          size_t      shm_segsz;
          time_t      shm_atime;
!         version (X86_64) {} else c_ulong     __unused1;
          time_t      shm_dtime;
!         version (X86_64) {} else c_ulong     __unused2;
          time_t      shm_ctime;
!         version (X86_64) {} else c_ulong     __unused3;
          pid_t       shm_cpid;
          pid_t       shm_lpid;
          shmatt_t    shm_nattch;
--- 66,76 ----
          ipc_perm    shm_perm;
          size_t      shm_segsz;
          time_t      shm_atime;
!         static if (time_t.sizeof == 4) c_ulong     __unused1;
          time_t      shm_dtime;
!         static if (time_t.sizeof == 4) c_ulong     __unused2;
          time_t      shm_ctime;
!         static if (time_t.sizeof == 4) c_ulong     __unused3;
          pid_t       shm_cpid;
          pid_t       shm_lpid;
          shmatt_t    shm_nattch;
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/sys/posix/sys/stat.d gcc-16-20260208/libphobos/libdruntime/core/sys/posix/sys/stat.d
*** gcc-16-20260201/libphobos/libdruntime/core/sys/posix/sys/stat.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/core/sys/posix/sys/stat.d	Sun Feb  8 22:32:16 2026
*************** version (linux)
*** 72,100 ****
  {
      version (X86)
      {
!         struct stat_t
          {
!             dev_t       st_dev;
!             ushort      __pad1;
!             static if (!__USE_FILE_OFFSET64)
              {
                  ino_t       st_ino;
-             }
-             else
-             {
-                 uint        __st_ino;
-             }
-             mode_t      st_mode;
-             nlink_t     st_nlink;
-             uid_t       st_uid;
-             gid_t       st_gid;
-             dev_t       st_rdev;
-             ushort      __pad2;
-             off_t       st_size;
-             blksize_t   st_blksize;
-             blkcnt_t    st_blocks;
-             static if (_DEFAULT_SOURCE || _XOPEN_SOURCE >= 700)
-             {
                  timespec    st_atim;
                  timespec    st_mtim;
                  timespec    st_ctim;
--- 72,109 ----
  {
      version (X86)
      {
!         version (CRuntime_Musl)
          {
!             struct stat_t
              {
+                 dev_t       st_dev;
+                 ushort      __pad1;
+                 static if (!__USE_FILE_OFFSET64)
+                 {
+                     ino_t       st_ino;
+                 }
+                 else
+                 {
+                     uint        __st_ino;
+                 }
+                 mode_t      st_mode;
+                 nlink_t     st_nlink;
+                 uid_t       st_uid;
+                 gid_t       st_gid;
+                 dev_t       st_rdev;
+                 ushort      __pad2;
+                 off_t       st_size;
+                 blksize_t   st_blksize;
+                 blkcnt_t    st_blocks;
+                 private struct __timespec32
+                 {
+                     c_long tv_sec;
+                     c_long tv_nsec;
+                 }
+                 __timespec32 __st_atim32;
+                 __timespec32 __st_mtim32;
+                 __timespec32 __st_ctim32;
                  ino_t       st_ino;
                  timespec    st_atim;
                  timespec    st_mtim;
                  timespec    st_ctim;
*************** version (linux)
*** 105,127 ****
                      ref inout(time_t) st_ctime() return { return st_ctim.tv_sec; }
                  }
              }
!             else
!             {
!                 time_t      st_atime;
!                 ulong_t     st_atimensec;
!                 time_t      st_mtime;
!                 ulong_t     st_mtimensec;
!                 time_t      st_ctime;
!                 ulong_t     st_ctimensec;
!             }
!             static if (__USE_FILE_OFFSET64)
!             {
!                 ino_t       st_ino;
!             }
!             else
              {
!                 c_ulong     __unused4;
!                 c_ulong     __unused5;
              }
          }
      }
--- 114,174 ----
                      ref inout(time_t) st_ctime() return { return st_ctim.tv_sec; }
                  }
              }
!             static assert(stat_t.sizeof == 144);
!         }
!         else
!         {
!             struct stat_t
              {
!                 dev_t       st_dev;
!                 ushort      __pad1;
!                 static if (!__USE_FILE_OFFSET64)
!                 {
!                     ino_t       st_ino;
!                 }
!                 else
!                 {
!                     uint        __st_ino;
!                 }
!                 mode_t      st_mode;
!                 nlink_t     st_nlink;
!                 uid_t       st_uid;
!                 gid_t       st_gid;
!                 dev_t       st_rdev;
!                 ushort      __pad2;
!                 off_t       st_size;
!                 blksize_t   st_blksize;
!                 blkcnt_t    st_blocks;
!                 static if (_DEFAULT_SOURCE || _XOPEN_SOURCE >= 700)
!                 {
!                     timespec    st_atim;
!                     timespec    st_mtim;
!                     timespec    st_ctim;
!                     extern(D) @safe @property inout pure nothrow
!                     {
!                         ref inout(time_t) st_atime() return { return st_atim.tv_sec; }
!                         ref inout(time_t) st_mtime() return { return st_mtim.tv_sec; }
!                         ref inout(time_t) st_ctime() return { return st_ctim.tv_sec; }
!                     }
!                 }
!                 else
!                 {
!                     time_t      st_atime;
!                     ulong_t     st_atimensec;
!                     time_t      st_mtime;
!                     ulong_t     st_mtimensec;
!                     time_t      st_ctime;
!                     ulong_t     st_ctimensec;
!                 }
!                 static if (__USE_FILE_OFFSET64)
!                 {
!                     ino_t       st_ino;
!                 }
!                 else
!                 {
!                     c_ulong     __unused4;
!                     c_ulong     __unused5;
!                 }
              }
          }
      }
*************** version (linux)
*** 261,297 ****
      }
      else version (MIPS_O32)
      {
!         struct stat_t
          {
!             version (CRuntime_Musl)
              {
                  dev_t       st_dev;
!                 c_long[2]   st_pad1;
!             }
!             else
!             {
!                 c_ulong     st_dev;
!                 c_long[3]   st_pad1;
!             }
!             ino_t       st_ino;
!             mode_t      st_mode;
!             nlink_t     st_nlink;
!             uid_t       st_uid;
!             gid_t       st_gid;
!             c_ulong     st_rdev;
!             static if (!__USE_FILE_OFFSET64)
!             {
!                 c_long[2]   st_pad2;
!                 off_t       st_size;
!                 c_long      st_pad3;
!             }
!             else
!             {
!                 c_long[3]   st_pad2;
                  off_t       st_size;
!             }
!             static if (_DEFAULT_SOURCE || _XOPEN_SOURCE >= 700)
!             {
                  timespec    st_atim;
                  timespec    st_mtim;
                  timespec    st_ctim;
--- 308,338 ----
      }
      else version (MIPS_O32)
      {
!         version (CRuntime_Musl)
          {
!             struct stat_t
              {
                  dev_t       st_dev;
!                 c_long[2]   __pad1;
!                 ino_t       st_ino;
!                 mode_t      st_mode;
!                 nlink_t     st_nlink;
!                 uid_t       st_uid;
!                 gid_t       st_gid;
!                 dev_t       st_rdev;
!                 c_long[2]   __pad2;
                  off_t       st_size;
!                 private struct __timespec32
!                 {
!                     c_long tv_sec;
!                     c_long tv_nsec;
!                 }
!                 __timespec32 __st_atim32;
!                 __timespec32 __st_mtim32;
!                 __timespec32 __st_ctim32;
!                 blksize_t   st_blksize;
!                 c_long      __pad3;
!                 blkcnt_t    st_blocks;
                  timespec    st_atim;
                  timespec    st_mtim;
                  timespec    st_ctim;
*************** version (linux)
*** 301,327 ****
                      ref inout(time_t) st_mtime() return { return st_mtim.tv_sec; }
                      ref inout(time_t) st_ctime() return { return st_ctim.tv_sec; }
                  }
              }
!             else
!             {
!                 time_t      st_atime;
!                 c_ulong     st_atimensec;
!                 time_t      st_mtime;
!                 c_ulong     st_mtimensec;
!                 time_t      st_ctime;
!                 c_ulong     st_ctimensec;
!             }
!             blksize_t   st_blksize;
!             static if (!__USE_FILE_OFFSET64)
!             {
!                 blkcnt_t    st_blocks;
!             }
!             else
              {
!                 c_long      st_pad4;
!                 blkcnt_t    st_blocks;
              }
-             c_long[14]  st_pad5;
          }
          static if (!__USE_FILE_OFFSET64)
              static assert(stat_t.sizeof == 144);
--- 342,406 ----
                      ref inout(time_t) st_mtime() return { return st_mtim.tv_sec; }
                      ref inout(time_t) st_ctime() return { return st_ctim.tv_sec; }
                  }
+                 c_long[2]   __pad4;
              }
!         }
!         else
!         {
!             struct stat_t
              {
!                 c_ulong     st_dev;
!                 c_long[3]   st_pad1;
!                 ino_t       st_ino;
!                 mode_t      st_mode;
!                 nlink_t     st_nlink;
!                 uid_t       st_uid;
!                 gid_t       st_gid;
!                 c_ulong     st_rdev;
!                 static if (!__USE_FILE_OFFSET64)
!                 {
!                     c_long[2]   st_pad2;
!                     off_t       st_size;
!                     c_long      st_pad3;
!                 }
!                 else
!                 {
!                     c_long[3]   st_pad2;
!                     off_t       st_size;
!                 }
!                 static if (_DEFAULT_SOURCE || _XOPEN_SOURCE >= 700)
!                 {
!                     timespec    st_atim;
!                     timespec    st_mtim;
!                     timespec    st_ctim;
!                     extern(D) @safe @property inout pure nothrow
!                     {
!                         ref inout(time_t) st_atime() return { return st_atim.tv_sec; }
!                         ref inout(time_t) st_mtime() return { return st_mtim.tv_sec; }
!                         ref inout(time_t) st_ctime() return { return st_ctim.tv_sec; }
!                     }
!                 }
!                 else
!                 {
!                     time_t      st_atime;
!                     c_ulong     st_atimensec;
!                     time_t      st_mtime;
!                     c_ulong     st_mtimensec;
!                     time_t      st_ctime;
!                     c_ulong     st_ctimensec;
!                 }
!                 blksize_t   st_blksize;
!                 static if (!__USE_FILE_OFFSET64)
!                 {
!                     blkcnt_t    st_blocks;
!                 }
!                 else
!                 {
!                     c_long      st_pad4;
!                     blkcnt_t    st_blocks;
!                 }
!                 c_long[14]  st_pad6;
              }
          }
          static if (!__USE_FILE_OFFSET64)
              static assert(stat_t.sizeof == 144);
*************** version (linux)
*** 572,638 ****
      }
      else version (ARM)
      {
!         private
!         {
!             alias __dev_t = ulong;
!             alias __ino_t = c_ulong;
!             alias __ino64_t = ulong;
!             alias __mode_t = uint;
!             alias __nlink_t = size_t;
!             alias __uid_t = uint;
!             alias __gid_t = uint;
!             alias __off_t = c_long;
!             alias __off64_t = long;
!             alias __blksize_t = c_long;
!             alias __blkcnt_t = c_long;
!             alias __blkcnt64_t = long;
!             alias __timespec = timespec;
!             alias __time_t = time_t;
!         }
!         struct stat_t
          {
!             __dev_t st_dev;
!             ushort __pad1;
! 
!             static if (!__USE_FILE_OFFSET64)
!             {
!                 __ino_t st_ino;
!             }
!             else
!             {
!                 __ino_t __st_ino;
!             }
!             __mode_t st_mode;
!             __nlink_t st_nlink;
!             __uid_t st_uid;
!             __gid_t st_gid;
!             __dev_t st_rdev;
!             ushort __pad2;
! 
!             static if (!__USE_FILE_OFFSET64)
!             {
!                 __off_t st_size;
!             }
!             else
!             {
!                 __off64_t st_size;
!             }
!             __blksize_t st_blksize;
! 
!             static if (!__USE_FILE_OFFSET64)
!             {
!                 __blkcnt_t st_blocks;
!             }
!             else
!             {
!                 __blkcnt64_t st_blocks;
!             }
! 
!             static if ( _DEFAULT_SOURCE || _XOPEN_SOURCE >= 700)
              {
!                 __timespec st_atim;
!                 __timespec st_mtim;
!                 __timespec st_ctim;
                  extern(D) @safe @property inout pure nothrow
                  {
                      ref inout(time_t) st_atime() return { return st_atim.tv_sec; }
--- 651,696 ----
      }
      else version (ARM)
      {
!         version (CRuntime_Musl)
          {
!             // Matches struct stat from musl arch/arm/bits/stat.h
!             // See: https://git.musl-libc.org/cgit/musl/tree/arch/arm/bits/stat.h?h=v1.2.3
!             //
!             // Type definitions from https://git.musl-libc.org/cgit/musl/tree/include/alltypes.h.in?h=v1.2.3
!             // with ARM-specific _Int64=long long and _Reg=int from
!             // https://git.musl-libc.org/cgit/musl/tree/arch/arm/bits/alltypes.h.in?h=v1.2.3#n3
!             //
!             // Key 64-bit LFS types (always 64-bit on musl):
!             //   dev_t     = unsigned _Int64 = unsigned long long  (line 31)
!             //   off_t     = _Int64          = long long           (line 29)
!             //   ino_t     = unsigned _Int64 = unsigned long long  (line 30)
!             //   blkcnt_t  = _Int64          = long long           (line 33)
!             //   blksize_t = long            = long (32-bit)       (line 32)
!             //   nlink_t   = unsigned _Reg   = unsigned int        (line 28)
!             struct stat_t
              {
!                 ulong st_dev;
!                 int __st_dev_padding;
!                 c_long __st_ino_truncated;
!                 mode_t st_mode;
!                 uint st_nlink;
!                 uid_t st_uid;
!                 gid_t st_gid;
!                 ulong st_rdev;
!                 int __st_rdev_padding;
!                 long st_size;
!                 c_long st_blksize;
!                 long st_blocks;
!                 struct __timespec32
!                 {
!                     c_long tv_sec;
!                     c_long tv_nsec;
!                 }
!                 __timespec32 __st_atim32, __st_mtim32, __st_ctim32;
!                 ulong st_ino;
!                 timespec st_atim;
!                 timespec st_mtim;
!                 timespec st_ctim;
                  extern(D) @safe @property inout pure nothrow
                  {
                      ref inout(time_t) st_atime() return { return st_atim.tv_sec; }
*************** version (linux)
*** 640,669 ****
                      ref inout(time_t) st_ctime() return { return st_ctim.tv_sec; }
                  }
              }
!             else
!             {
!                 __time_t st_atime;
!                 c_ulong st_atimensec;
!                 __time_t st_mtime;
!                 c_ulong st_mtimensec;
!                 __time_t st_ctime;
!                 c_ulong st_ctimensec;
!             }
! 
!             static if (!__USE_FILE_OFFSET64)
              {
!                 c_ulong __unused4;
!                 c_ulong __unused5;
              }
!             else
              {
!                 __ino64_t st_ino;
              }
          }
-         static if (__USE_FILE_OFFSET64)
-             static assert(stat_t.sizeof == 104);
-         else
-             static assert(stat_t.sizeof == 88);
      }
      else version (AArch64)
      {
--- 698,800 ----
                      ref inout(time_t) st_ctime() return { return st_ctim.tv_sec; }
                  }
              }
!             static assert(stat_t.sizeof == 152);
!         }
!         else
!         {
!             private
              {
!                 alias __dev_t = ulong;
!                 alias __ino_t = c_ulong;
!                 alias __ino64_t = ulong;
!                 alias __mode_t = uint;
!                 alias __nlink_t = size_t;
!                 alias __uid_t = uint;
!                 alias __gid_t = uint;
!                 alias __off_t = c_long;
!                 alias __off64_t = long;
!                 alias __blksize_t = c_long;
!                 alias __blkcnt_t = c_long;
!                 alias __blkcnt64_t = long;
!                 alias __timespec = timespec;
!                 alias __time_t = time_t;
              }
!             struct stat_t
              {
!                 __dev_t st_dev;
!                 ushort __pad1;
! 
!                 static if (!__USE_FILE_OFFSET64)
!                 {
!                     __ino_t st_ino;
!                 }
!                 else
!                 {
!                     __ino_t __st_ino;
!                 }
!                 __mode_t st_mode;
!                 __nlink_t st_nlink;
!                 __uid_t st_uid;
!                 __gid_t st_gid;
!                 __dev_t st_rdev;
!                 ushort __pad2;
! 
!                 static if (!__USE_FILE_OFFSET64)
!                 {
!                     __off_t st_size;
!                 }
!                 else
!                 {
!                     __off64_t st_size;
!                 }
!                 __blksize_t st_blksize;
! 
!                 static if (!__USE_FILE_OFFSET64)
!                 {
!                     __blkcnt_t st_blocks;
!                 }
!                 else
!                 {
!                     __blkcnt64_t st_blocks;
!                 }
! 
!                 static if ( _DEFAULT_SOURCE || _XOPEN_SOURCE >= 700)
!                 {
!                     __timespec st_atim;
!                     __timespec st_mtim;
!                     __timespec st_ctim;
!                     extern(D) @safe @property inout pure nothrow
!                     {
!                         ref inout(time_t) st_atime() return { return st_atim.tv_sec; }
!                         ref inout(time_t) st_mtime() return { return st_mtim.tv_sec; }
!                         ref inout(time_t) st_ctime() return { return st_ctim.tv_sec; }
!                     }
!                 }
!                 else
!                 {
!                     __time_t st_atime;
!                     c_ulong st_atimensec;
!                     __time_t st_mtime;
!                     c_ulong st_mtimensec;
!                     __time_t st_ctime;
!                     c_ulong st_ctimensec;
!                 }
! 
!                 static if (!__USE_FILE_OFFSET64)
!                 {
!                     c_ulong __unused4;
!                     c_ulong __unused5;
!                 }
!                 else
!                 {
!                     __ino64_t st_ino;
!                 }
              }
+ 	          static if (__USE_FILE_OFFSET64)
+ 	              static assert(stat_t.sizeof == 104);
+ 	          else
+ 	              static assert(stat_t.sizeof == 88);
          }
      }
      else version (AArch64)
      {
*************** version (linux)
*** 1052,1060 ****
          extern bool S_TYPEISSEM( stat_t* buf ) { return false; }
          extern bool S_TYPEISSHM( stat_t* buf ) { return false; }
      }
- 
-     enum UTIME_NOW = 0x3fffffff;
-     enum UTIME_OMIT = 0x3ffffffe;
  }
  else version (Darwin)
  {
--- 1183,1188 ----
*************** else version (FreeBSD)
*** 1187,1195 ****
      enum S_ISUID    = 0x800; // octal 0004000
      enum S_ISGID    = 0x400; // octal 0002000
      enum S_ISVTX    = 0x200; // octal 0001000
- 
-     enum UTIME_NOW = -1;
-     enum UTIME_OMIT = -2;
  }
  else version (NetBSD)
  {
--- 1315,1320 ----
*************** version (CRuntime_Glibc)
*** 1485,1494 ****
      extern (D) bool S_ISREG()( mode_t mode )  { return S_ISTYPE( mode, S_IFREG );  }
      extern (D) bool S_ISLNK()( mode_t mode )  { return S_ISTYPE( mode, S_IFLNK );  }
      extern (D) bool S_ISSOCK()( mode_t mode ) { return S_ISTYPE( mode, S_IFSOCK ); }
- 
-     int utimensat(int dirfd, const char *pathname,
-         ref const(timespec)[2] times, int flags);
-     int futimens(int fd, ref const(timespec)[2] times);
  }
  else version (Darwin)
  {
--- 1610,1615 ----
*************** else version (FreeBSD)
*** 1555,1568 ****
      extern (D) bool S_ISREG()( mode_t mode )  { return S_ISTYPE( mode, S_IFREG );  }
      extern (D) bool S_ISLNK()( mode_t mode )  { return S_ISTYPE( mode, S_IFLNK );  }
      extern (D) bool S_ISSOCK()( mode_t mode ) { return S_ISTYPE( mode, S_IFSOCK ); }
- 
-     // Since FreeBSD 11:
-     version (none)
-     {
-         int utimensat(int dirfd, const char *pathname,
-             ref const(timespec)[2] times, int flags);
-         int futimens(int fd, ref const(timespec)[2] times);
-     }
  }
  else version (NetBSD)
  {
--- 1676,1681 ----
*************** else version (CRuntime_Bionic)
*** 1722,1731 ****
      extern (D) bool S_ISREG()( uint mode )  { return S_ISTYPE( mode, S_IFREG );  }
      extern (D) bool S_ISLNK()( uint mode )  { return S_ISTYPE( mode, S_IFLNK );  }
      extern (D) bool S_ISSOCK()( uint mode ) { return S_ISTYPE( mode, S_IFSOCK ); }
- 
-     // Added since Lollipop
-     int utimensat(int dirfd, const char *pathname,
-         ref const(timespec)[2] times, int flags);
  }
  else version (CRuntime_Musl)
  {
--- 1835,1840 ----
*************** else version (CRuntime_Musl)
*** 1761,1769 ****
      extern (D) bool S_ISREG()( mode_t mode )  { return S_ISTYPE( mode, S_IFREG );  }
      extern (D) bool S_ISLNK()( mode_t mode )  { return S_ISTYPE( mode, S_IFLNK );  }
      extern (D) bool S_ISSOCK()( mode_t mode ) { return S_ISTYPE( mode, S_IFSOCK ); }
- 
-     int utimensat(int dirfd, const char *pathname,
-         ref const(timespec)[2] times, int flags);
  }
  else version (CRuntime_UClibc)
  {
--- 1870,1875 ----
*************** else version (CRuntime_UClibc)
*** 1797,1806 ****
      extern (D) bool S_ISREG()( mode_t mode )  { return S_ISTYPE( mode, S_IFREG );  }
      extern (D) bool S_ISLNK()( mode_t mode )  { return S_ISTYPE( mode, S_IFLNK );  }
      extern (D) bool S_ISSOCK()( mode_t mode ) { return S_ISTYPE( mode, S_IFSOCK ); }
- 
-     int utimensat(int dirfd, const char *pathname,
-     ref const(timespec)[2] times, int flags);
-     int futimens(int fd, ref const(timespec)[2] times);
  }
  else
  {
--- 1903,1908 ----
*************** else
*** 1810,1821 ****
  /*
  int    chmod(const scope char*, mode_t);
  int    fchmod(int, mode_t);
! int    fstat(int, stat*);
! int    lstat(const scope char*, stat*);
  int    mkdir(const scope char*, mode_t);
  int    mkfifo(const scope char*, mode_t);
! int    stat(const scope char*, stat*);
  mode_t umask(mode_t);
  */
  
  int    chmod(const scope char*, mode_t);
--- 1912,1929 ----
  /*
  int    chmod(const scope char*, mode_t);
  int    fchmod(int, mode_t);
! int    fchmodat(int, const scope char*, mode_t, int);
! int    fstat(int, stat_t*);
! int    fstatat(int, const scope char*, stat_t*, int);
! int    futimens(int, ref const(timespec)[2]);
! int    lstat(const scope char*, stat_t*);
  int    mkdir(const scope char*, mode_t);
+ int    mkdirat(int, const scope char*, mode_t);
  int    mkfifo(const scope char*, mode_t);
! int    mkfifoat(int, const scope char*, mode_t);
! int    stat(const scope char*, stat_t*);
  mode_t umask(mode_t);
+ int    utimensat(int, const scope char*, ref const(timespec)[2], int);
  */
  
  int    chmod(const scope char*, mode_t);
*************** version (CRuntime_Glibc)
*** 1839,1844 ****
--- 1947,1956 ----
  
      int   stat64(const scope char*, stat_t*);
      alias stat64 stat;
+ 
+     int   fstatat64(int, const scope char*, stat_t*, int);
+     alias fstatat64 fstatat;
+ 
    }
    else
    {
*************** version (CRuntime_Glibc)
*** 1846,1851 ****
--- 1958,1968 ----
      int   lstat(const scope char*, stat_t*);
      int   stat(const scope char*, stat_t*);
    }
+     int   fchmodat(int, const scope char*, mode_t, int);
+     int   futimens(int, ref const(timespec)[2]);
+     int   mkdirat(int, const scope char*, mode_t);
+     int   mkfifoat(int, const scope char*, mode_t);
+     int   utimensat(int, const scope char*, ref const(timespec)[2], int);
  }
  else version (Solaris)
  {
*************** else version (Solaris)
*** 1854,1865 ****
--- 1971,1984 ----
          int fstat(int, stat_t*) @trusted;
          int lstat(const scope char*, stat_t*);
          int stat(const scope char*, stat_t*);
+         int fstatat(int, const scope char*, stat_t*, int);
  
          static if (__USE_LARGEFILE64)
          {
              alias fstat fstat64;
              alias lstat lstat64;
              alias stat stat64;
+             alias fstatat fstatat64;
          }
      }
      else
*************** else version (Solaris)
*** 1874,1887 ****
--- 1993,2015 ----
  
              int   stat64(const scope char*, stat_t*);
              alias stat64 stat;
+ 
+             int fstatat64(int, const scope char*, stat_t*, int);
+             alias fstatat64 fstatat;
          }
          else
          {
              int fstat(int, stat_t*) @trusted;
              int lstat(const scope char*, stat_t*);
              int stat(const scope char*, stat_t*);
+             int fstatat(int, const scope char*, stat_t*, int);
          }
      }
+     int   fchmodat(int, const scope char*, mode_t, int);
+     int   futimens(int, ref const(timespec)[2]);
+     int   mkdirat(int, const scope char*, mode_t);
+     int   mkfifoat(int, const scope char*, mode_t);
+     int   utimensat(int, const scope char*, ref const(timespec)[2], int);
  }
  else version (Darwin)
  {
*************** else version (Darwin)
*** 1908,1913 ****
--- 2036,2047 ----
          int lstat(const scope char*, stat_t*);
          int stat(const scope char*, stat_t*);
      }
+     int   fchmodat(int, const scope char*, mode_t, int);
+     int   fstatat(int, const scope char*, stat_t*, int);
+     int   futimens(int, ref const(timespec)[2]);
+     int   mkdirat(int, const scope char*, mode_t);
+     int   mkfifoat(int, const scope char*, mode_t);
+     int   utimensat(int, const scope char*, ref const(timespec)[2], int);
  }
  else version (FreeBSD)
  {
*************** else version (FreeBSD)
*** 1932,1937 ****
--- 2066,2083 ----
              pragma(mangle, "stat@FBSD_1.0")  int   stat(const scope char*, stat_t*);
          }
      }
+     static if (__FreeBSD_version >= 800000)
+     {
+         int fchmodat(int, const scope char*, mode_t, int);
+         int fstatat(int, const scope char*, stat_t*, int);
+         int mkdirat(int, const scope char*, mode_t);
+         int mkfifoat(int, const scope char*, mode_t);
+     }
+     static if (__FreeBSD_version >= 1003000)
+     {
+         int futimens(int, ref const(timespec)[2]);
+         int utimensat(int, const scope char*, ref const(timespec)[2], int);
+     }
  }
  else version (NetBSD)
  {
*************** else version (NetBSD)
*** 1941,1964 ****
--- 2087,2134 ----
      alias __fstat50 fstat;
      alias __lstat50 lstat;
      alias __stat50 stat;
+     int   fchmodat(int, const scope char*, mode_t, int);
+     int   fstatat(int, const scope char*, stat_t*, int);
+     int   futimens(int, ref const(timespec)[2]);
+     int   mkdirat(int, const scope char*, mode_t);
+     int   mkfifoat(int, const scope char*, mode_t);
+     int   utimensat(int, const scope char*, ref const(timespec)[2], int);
  }
  else version (OpenBSD)
  {
      int   fstat(int, stat_t*);
      int   lstat(const scope char*, stat_t*);
      int   stat(const scope char*, stat_t*);
+     int   fchmodat(int, const scope char*, mode_t, int);
+     int   fstatat(int, const scope char*, stat_t*, int);
+     int   futimens(int, ref const(timespec)[2]);
+     int   mkdirat(int, const scope char*, mode_t);
+     int   mkfifoat(int, const scope char*, mode_t);
+     int   utimensat(int, const scope char*, ref const(timespec)[2], int);
  }
  else version (DragonFlyBSD)
  {
      int   fstat(int, stat_t*);
      int   lstat(const scope char*, stat_t*);
      int   stat(const scope char*, stat_t*);
+     int   fchmodat(int, const scope char*, mode_t, int);
+     int   fstatat(int, const scope char*, stat_t*, int);
+     int   futimens(int, ref const(timespec)[2]);
+     int   mkdirat(int, const scope char*, mode_t);
+     int   mkfifoat(int, const scope char*, mode_t);
+     int   utimensat(int, const scope char*, ref const(timespec)[2], int);
  }
  else version (CRuntime_Bionic)
  {
      int   fstat(int, stat_t*) @trusted;
      int   lstat(const scope char*, stat_t*);
      int   stat(const scope char*, stat_t*);
+     int   fchmodat(int, const scope char*, mode_t, int);
+     int   fstatat(int, const scope char*, stat_t*, int);
+     int   futimens(int, ref const(timespec)[2]);
+     int   mkdirat(int, const scope char*, mode_t);
+     int   mkfifoat(int, const scope char*, mode_t);
+     int   utimensat(int, const scope char*, ref const(timespec)[2], int);
  }
  else version (CRuntime_Musl)
  {
*************** else version (CRuntime_Musl)
*** 1968,1977 ****
--- 2138,2154 ----
      int fstat(int, stat_t*);
      pragma(mangle, muslRedirTime64Mangle!("lstat", "__lstat_time64"))
      int lstat(const scope char*, stat_t*);
+     pragma(mangle, muslRedirTime64Mangle!("fstatat", "__fstatat_time64"))
+     int   fstatat(int, const scope char*, stat_t*, int);
  
      alias fstat fstat64;
      alias lstat lstat64;
      alias stat stat64;
+     int   fchmodat(int, const scope char*, mode_t, int);
+     int   futimens(int, ref const(timespec)[2]);
+     int   mkdirat(int, const scope char*, mode_t);
+     int   mkfifoat(int, const scope char*, mode_t);
+     int   utimensat(int, const scope char*, ref const(timespec)[2], int);
  }
  else version (CRuntime_UClibc)
  {
*************** else version (CRuntime_UClibc)
*** 1985,1998 ****
--- 2162,2229 ----
  
      int   stat64(const scope char*, stat_t*);
      alias stat64 stat;
+ 
+     int   fstatat64(int, const scope char*, stat_t*, int);
+     alias fstatat64 fstatat;
    }
    else
    {
      int   fstat(int, stat_t*) @trusted;
      int   lstat(const scope char*, stat_t*);
      int   stat(const scope char*, stat_t*);
+     int   fstatat(int, const scope char*, stat_t*, int);
    }
+     int   fchmodat(int, const scope char*, mode_t, int);
+     int   futimens(int, ref const(timespec)[2]);
+     int   mkdirat(int, const scope char*, mode_t);
+     int   mkfifoat(int, const scope char*, mode_t);
+     int   utimensat(int, const scope char*, ref const(timespec)[2], int);
+ }
+ 
+ /*
+ UTIME_NOW
+ UTIME_OMIT
+ */
+ version (linux)
+ {
+     enum UTIME_NOW = 0x3fffffff;
+     enum UTIME_OMIT = 0x3ffffffe;
+ }
+ else version (Darwin)
+ {
+     enum UTIME_NOW = -1;
+     enum UTIME_OMIT = -2;
+ }
+ else version (FreeBSD)
+ {
+     enum UTIME_NOW = -1;
+     enum UTIME_OMIT = -2;
+ }
+ else version (NetBSD)
+ {
+     enum UTIME_NOW = 0x3fffffff;
+     enum UTIME_OMIT = 0x3ffffffe;
+ }
+ else version (OpenBSD)
+ {
+     enum UTIME_NOW = -2;
+     enum UTIME_OMIT = -1;
+ }
+ else version (DragonFlyBSD)
+ {
+     enum UTIME_NOW = -1;
+     enum UTIME_OMIT = -2;
  }
+ else version (Solaris)
+ {
+     enum UTIME_NOW = -1;
+     enum UTIME_OMIT = -2;
+ }
+ else
+ {
+     static assert(false, "Unsupported platform");
+ }
+ 
  
  //
  // Typed Memory Objects (TYM)
*************** else
*** 2101,2115 ****
--- 2332,2349 ----
  
  /*
  int mknod(const scope char*, mode_t, dev_t);
+ int mknodat(int, const scope char*, mode_t, dev_t);
  */
  
  version (CRuntime_Glibc)
  {
      int mknod(const scope char*, mode_t, dev_t);
+     int mknodat(int, const scope char*, mode_t, dev_t);
  }
  else version (Darwin)
  {
      int mknod(const scope char*, mode_t, dev_t);
+     int mknodat(int, const scope char*, mode_t, dev_t);
  }
  else version (FreeBSD)
  {
*************** else version (FreeBSD)
*** 2124,2157 ****
--- 2358,2399 ----
          else
              pragma(mangle, "mknod@FBSD_1.0") int mknod(const scope char*, mode_t, dev_t);
      }
+     int mknodat(int, const scope char*, mode_t, dev_t);
  }
  else version (NetBSD)
  {
      int mknod(const scope char*, mode_t, dev_t);
+     int mknodat(int, const scope char*, mode_t, dev_t);
  }
  else version (OpenBSD)
  {
      int mknod(const scope char*, mode_t, dev_t);
+     int mknodat(int, const scope char*, mode_t, dev_t);
  }
  else version (DragonFlyBSD)
  {
      int mknod(const scope char*, mode_t, dev_t);
+     int mknodat(int, const scope char*, mode_t, dev_t);
  }
  else version (Solaris)
  {
      int mknod(const scope char*, mode_t, dev_t);
+     int mknodat(int, const scope char*, mode_t, dev_t);
  }
  else version (CRuntime_Bionic)
  {
      int mknod(const scope char*, mode_t, dev_t);
+     int mknodat(int, const scope char*, mode_t, dev_t);
  }
  else version (CRuntime_Musl)
  {
      int mknod(const scope char*, mode_t, dev_t);
+     int mknodat(int, const scope char*, mode_t, dev_t);
  }
  else version (CRuntime_UClibc)
  {
      int mknod(const scope char*, mode_t, dev_t);
+     int mknodat(int, const scope char*, mode_t, dev_t);
  }
  else
  {
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/sys/posix/sys/types.d gcc-16-20260208/libphobos/libdruntime/core/sys/posix/sys/types.d
*** gcc-16-20260201/libphobos/libdruntime/core/sys/posix/sys/types.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/core/sys/posix/sys/types.d	Sun Feb  8 22:32:16 2026
*************** uid_t
*** 87,93 ****
  
  version (linux)
  {
!   static if ( __USE_FILE_OFFSET64 )
    {
      alias long      blkcnt_t;
      alias ulong     ino_t;
--- 87,105 ----
  
  version (linux)
  {
!   // Musl always uses 64-bit off_t, blkcnt_t, ino_t on all arches (LFS by default).
!   // See: https://git.musl-libc.org/cgit/musl/tree/include/alltypes.h.in?h=v1.2.3#n29
!   //   off_t:    _Int64           -> long long (signed 64-bit)
!   //   ino_t:    unsigned _Int64  -> unsigned long long (64-bit)
!   //   blkcnt_t: _Int64           -> long long (signed 64-bit)
!   // For ARM, _Int64 = long long: https://git.musl-libc.org/cgit/musl/tree/arch/arm/bits/alltypes.h.in?h=v1.2.3#n3
!   version (CRuntime_Musl)
!   {
!     alias long      blkcnt_t;
!     alias ulong     ino_t;
!     alias long      off_t;
!   }
!   else static if ( __USE_FILE_OFFSET64 )
    {
      alias long      blkcnt_t;
      alias ulong     ino_t;
*************** version (linux)
*** 99,109 ****
      alias ulong_t   ino_t;
      alias slong_t   off_t;
    }
!     alias slong_t   blksize_t;
      alias ulong     dev_t;
      alias uint      gid_t;
      alias uint      mode_t;
!     alias ulong_t   nlink_t;
      alias int       pid_t;
      //size_t (defined in core.stdc.stddef)
      alias c_long    ssize_t;
--- 111,169 ----
      alias ulong_t   ino_t;
      alias slong_t   off_t;
    }
!     // musl overrides blksize_t to int on some 64-bit architectures.
!     // Default: long (https://git.musl-libc.org/cgit/musl/tree/include/alltypes.h.in?h=v1.2.3#n32)
!     // AArch64: int (https://git.musl-libc.org/cgit/musl/tree/arch/aarch64/bits/alltypes.h.in?h=v1.2.3#n18)
!     // RISCV64: int (https://git.musl-libc.org/cgit/musl/tree/arch/riscv64/bits/alltypes.h.in?h=v1.2.3#n12)
!     // LoongArch64: int (https://git.musl-libc.org/cgit/musl/tree/arch/loongarch64/bits/alltypes.h.in?id=522bd54e#n18)
!     version (CRuntime_Musl)
!     {
!         version (AArch64)
!             alias int blksize_t;
!         else version (RISCV64)
!             alias int blksize_t;
!         else version (LoongArch64)
!             alias int blksize_t;
!         else
!             alias slong_t blksize_t;
!     }
!     else
!         alias slong_t blksize_t;
! 
      alias ulong     dev_t;
      alias uint      gid_t;
      alias uint      mode_t;
! 
!     // musl defines nlink_t as unsigned _Reg (= unsigned int on 32-bit, unsigned long on 64-bit),
!     // with arch-specific overrides.
!     // Default: unsigned _Reg (https://git.musl-libc.org/cgit/musl/tree/include/alltypes.h.in?h=v1.2.3#n28)
!     // MIPS64: unsigned (uint) (https://git.musl-libc.org/cgit/musl/tree/arch/mips64/bits/alltypes.h.in?h=v1.2.3#n22)
!     // X86_64: _Reg=long, so unsigned long (https://git.musl-libc.org/cgit/musl/tree/arch/x86_64/bits/alltypes.h.in?h=v1.2.3#n3)
!     version (CRuntime_Musl)
!     {
!         version (MIPS64)
!             alias uint nlink_t;
!         else version (X86_64)
!             alias ulong nlink_t;
!         else
!             alias uint nlink_t;
!     }
!     else
!     {
!         version (X86_64)
!             alias ulong nlink_t;
!         else version (S390)
!             alias size_t nlink_t;
!         else version (PPC64)
!             alias size_t nlink_t;
!         else version (MIPS64)
!             alias size_t nlink_t;
!         else version (HPPA64)
!             alias size_t nlink_t;
!         else
!             alias uint nlink_t;
!     }
! 
      alias int       pid_t;
      //size_t (defined in core.stdc.stddef)
      alias c_long    ssize_t;
*************** version (linux)
*** 111,116 ****
--- 171,177 ----
  
      version (CRuntime_Musl)
      {
+         static assert(off_t.sizeof == 8);
          /**
           * Musl versions before v1.2.0 (up to v1.1.24) had different
           * definitions for `time_t` for 32 bits.
*************** useconds_t
*** 299,305 ****
  
  version (linux)
  {
!   static if ( __USE_FILE_OFFSET64 )
    {
      alias ulong     fsblkcnt_t;
      alias ulong     fsfilcnt_t;
--- 360,376 ----
  
  version (linux)
  {
!   // Musl always uses 64-bit fsblkcnt_t, fsfilcnt_t on all arches (LFS by default).
!   // See: https://git.musl-libc.org/cgit/musl/tree/include/alltypes.h.in?h=v1.2.3#n34
!   //   fsblkcnt_t: unsigned _Int64  -> unsigned long long (64-bit)
!   //   fsfilcnt_t: unsigned _Int64  -> unsigned long long (64-bit)
!   // For ARM, _Int64 = long long: https://git.musl-libc.org/cgit/musl/tree/arch/arm/bits/alltypes.h.in?h=v1.2.3#n3
!   version (CRuntime_Musl)
!   {
!     alias ulong     fsblkcnt_t;
!     alias ulong     fsfilcnt_t;
!   }
!   else static if ( __USE_FILE_OFFSET64 )
    {
      alias ulong     fsblkcnt_t;
      alias ulong     fsfilcnt_t;
*************** else version (DragonFlyBSD)
*** 992,997 ****
--- 1063,1069 ----
  else version (Solaris)
  {
      alias uint pthread_t;
+     alias int lwpid_t; // non-standard
  
      struct pthread_attr_t
      {
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/sys/posix/time.d gcc-16-20260208/libphobos/libdruntime/core/sys/posix/time.d
*** gcc-16-20260201/libphobos/libdruntime/core/sys/posix/time.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/core/sys/posix/time.d	Sun Feb  8 22:32:16 2026
***************
*** 16,21 ****
--- 16,22 ----
  module core.sys.posix.time;
  
  import core.sys.posix.config;
+ import core.sys.posix.endian;
  public import core.stdc.time;
  public import core.sys.posix.sys.types;
  public import core.sys.posix.signal; // for sigevent
*************** version (linux)
*** 201,207 ****
--- 202,212 ----
      struct timespec
      {
          time_t  tv_sec;
+         version (CRuntime_Musl)
+             int : 8 * (time_t.sizeof - c_long.sizeof) * (BYTE_ORDER == BIG_ENDIAN);
          c_long  tv_nsec;
+         version (CRuntime_Musl)
+             int : 8 * (time_t.sizeof - c_long.sizeof) * (BYTE_ORDER != BIG_ENDIAN);
      }
  }
  else version (Darwin)
*************** else version (CRuntime_Bionic)
*** 461,466 ****
--- 466,473 ----
  }
  else version (CRuntime_Musl)
  {
+     static assert(timespec.sizeof == 16);
+ 
      alias int clockid_t;
      alias void* timer_t;
  
*************** else version (CRuntime_Musl)
*** 482,487 ****
--- 489,495 ----
      enum CLOCK_SGI_CYCLE = 10;
      enum CLOCK_TAI = 11;
  
+     pragma(mangle, muslRedirTime64Mangle!("nanosleep", "__nanosleep_time64"))
      int nanosleep(const scope timespec*, timespec*);
  
      pragma(mangle, muslRedirTime64Mangle!("clock_getres", "__clock_getres_time64"))
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/sys/posix/ucontext.d gcc-16-20260208/libphobos/libdruntime/core/sys/posix/ucontext.d
*** gcc-16-20260201/libphobos/libdruntime/core/sys/posix/ucontext.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/core/sys/posix/ucontext.d	Sun Feb  8 22:32:16 2026
*************** else version (DragonFlyBSD)
*** 1361,1562 ****
  }
  else version (Solaris)
  {
-     import core.stdc.stdint;
- 
-     alias uint[4] upad128_t;
- 
-     version (SPARC64)
-     {
-         enum _NGREG = 21;
-         alias long greg_t;
-     }
-     else version (SPARC)
-     {
-         enum _NGREG = 19;
-         alias int greg_t;
-     }
-     else version (X86_64)
-     {
-         enum _NGREG = 28;
-         alias long greg_t;
-     }
-     else version (X86)
-     {
-         enum _NGREG = 19;
-         alias int greg_t;
-     }
-     else
-         static assert(0, "unimplemented");
- 
-     alias greg_t[_NGREG] gregset_t;
- 
-     version (SPARC64)
-     {
-         private
-         {
-             struct _fpq
-             {
-                 uint *fpq_addr;
-                 uint fpq_instr;
-             }
- 
-             struct fq
-             {
-                 union
-                 {
-                     double whole;
-                     _fpq fpq;
-                 }
-             }
-         }
- 
-         struct fpregset_t
-         {
-             union
-             {
-                 uint[32]   fpu_regs;
-                 double[32] fpu_dregs;
-                 real[16]   fpu_qregs;
-             }
-             fq    *fpu_q;
-             ulong fpu_fsr;
-             ubyte fpu_qcnt;
-             ubyte fpu_q_entrysize;
-             ubyte fpu_en;
-         }
-     }
-     else version (SPARC)
-     {
-         private
-         {
-             struct _fpq
-             {
-                 uint *fpq_addr;
-                 uint fpq_instr;
-             }
- 
-             struct fq
-             {
-                 union
-                 {
-                     double whole;
-                     _fpq fpq;
-                 }
-             }
-         }
- 
-         struct fpregset_t
-         {
-             union
-             {
-                 uint[32]   fpu_regs;
-                 double[16] fpu_dregs;
-             }
-             fq    *fpu_q;
-             uint  fpu_fsr;
-             ubyte fpu_qcnt;
-             ubyte fpu_q_entrysize;
-             ubyte fpu_en;
-         }
-     }
-     else version (X86_64)
-     {
-         private
-         {
-             union _u_st
-             {
-                 ushort[5]   fpr_16;
-                 upad128_t   __fpr_pad;
-             }
-         }
- 
-         struct fpregset_t
-         {
-             union fp_reg_set
-             {
-                 struct fpchip_state
-                 {
-                     ushort          cw;
-                     ushort          sw;
-                     ubyte           fctw;
-                     ubyte           __fx_rsvd;
-                     ushort          fop;
-                     ulong           rip;
-                     ulong           rdp;
-                     uint            mxcsr;
-                     uint            mxcsr_mask;
-                     _u_st[8]        st;
-                     upad128_t[16]   xmm;
-                     upad128_t[6]    __fx_ign2;
-                     uint            status;
-                     uint            xstatus;
-                 }
-                 uint[130]   f_fpregs;
-             }
-         }
-     }
-     else version (X86)
-     {
-         struct fpregset_t
-         {
-             union u_fp_reg_set
-             {
-                 struct s_fpchip_state
-                 {
-                     uint[27]        state;
-                     uint            status;
-                     uint            mxcsr;
-                     uint            xstatus;
-                     uint[2]         __pad;
-                     upad128_t[8]    xmm;
-                 }
-                 s_fpchip_state    fpchip_state;
- 
-                 struct s_fp_emul_space
-                 {
-                     ubyte[246]  fp_emul;
-                     ubyte[2]    fp_epad;
-                 }
-                 s_fp_emul_space   fp_emul_space;
-                 uint[95]        f_fpregs;
-             }
-         u_fp_reg_set fp_reg_set;
-         }
-     }
-     else
-         static assert(0, "unimplemented");
- 
      version (SPARC_Any)
      {
!         private
!         {
!             struct rwindow
!             {
!                 greg_t[8]     rw_local;
!                 greg_t[8]     rw_in;
!             }
! 
!             struct gwindows_t
!             {
!                 int         wbcnt;
!                 greg_t[31] *spbuf;
!                 rwindow[31] wbuf;
!             }
! 
!             struct xrs_t
!             {
!                 uint         xrs_id;
!                 caddr_t      xrs_ptr;
!             }
! 
!             struct cxrs_t
!             {
!                 uint         cxrs_id;
!                 caddr_t      cxrs_ptr;
!             }
! 
!             alias int64_t[16] asrset_t;
!         }
  
          struct mcontext_t
          {
--- 1361,1370 ----
  }
  else version (Solaris)
  {
      version (SPARC_Any)
      {
!         import core.sys.solaris.sys.regset : gregset_t, fpregset_t,
!                gwindows_t, xrs_t, asrset_t, cxrs_t;
  
          struct mcontext_t
          {
*************** else version (Solaris)
*** 1579,1592 ****
      }
      else version (X86_Any)
      {
!         private
!         {
!             struct xrs_t
!             {
!                 uint         xrs_id;
!                 caddr_t      xrs_ptr;
!             }
!         }
  
          struct mcontext_t
          {
--- 1387,1393 ----
      }
      else version (X86_Any)
      {
!         import core.sys.solaris.sys.regset : gregset_t, fpregset_t, xrs_t;
  
          struct mcontext_t
          {
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/sys/posix/unistd.d gcc-16-20260208/libphobos/libdruntime/core/sys/posix/unistd.d
*** gcc-16-20260201/libphobos/libdruntime/core/sys/posix/unistd.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/core/sys/posix/unistd.d	Sun Feb  8 22:32:16 2026
***************
*** 4,10 ****
   * Copyright: Copyright Sean Kelly 2005 - 2009.
   * License:   $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
   * Authors:   Sean Kelly
!  * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition
   */
  
  /*          Copyright Sean Kelly 2005 - 2009.
--- 4,10 ----
   * Copyright: Copyright Sean Kelly 2005 - 2009.
   * License:   $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
   * Authors:   Sean Kelly
!  * Standards: The Open Group Base Specifications Issue 8, IEEE Std 1003.1, 2024 Edition
   */
  
  /*          Copyright Sean Kelly 2005 - 2009.
*************** int     close(int) @trusted;
*** 50,67 ****
  size_t  confstr(int, char*, size_t);
  int     dup(int) @trusted;
  int     dup2(int, int) @trusted;
  int     execl(const scope char*, const scope char*, ...);
  int     execle(const scope char*, const scope char*, ...);
  int     execlp(const scope char*, const scope char*, ...);
  int     execv(const scope char*, const scope char**);
  int     execve(const scope char*, const scope char**, const scope char**);
  int     execvp(const scope char*, const scope char**);
! void    _exit(int) @trusted;
  int     fchown(int, uid_t, gid_t) @trusted;
  pid_t   fork() @trusted;
  c_long  fpathconf(int, int) @trusted;
  //int     ftruncate(int, off_t);
  char*   getcwd(char*, size_t);
  gid_t   getegid() @trusted;
  uid_t   geteuid() @trusted;
  gid_t   getgid() @trusted;
--- 50,73 ----
  size_t  confstr(int, char*, size_t);
  int     dup(int) @trusted;
  int     dup2(int, int) @trusted;
+ //int     dup3(int, int, int) @trusted;
  int     execl(const scope char*, const scope char*, ...);
  int     execle(const scope char*, const scope char*, ...);
  int     execlp(const scope char*, const scope char*, ...);
  int     execv(const scope char*, const scope char**);
  int     execve(const scope char*, const scope char**, const scope char**);
  int     execvp(const scope char*, const scope char**);
! noreturn _exit(int) @trusted;
! //int     faccessat(int, const scope char*, int, int);
  int     fchown(int, uid_t, gid_t) @trusted;
+ //int     fchownat(int, const scope char*, uid_t, gid_t, int);
+ //int     fexecve(int, const scope char**, const scope char**);
  pid_t   fork() @trusted;
+ //pid_t   _Fork() @trusted;
  c_long  fpathconf(int, int) @trusted;
  //int     ftruncate(int, off_t);
  char*   getcwd(char*, size_t);
+ //int     getentropy(void*, size_t);
  gid_t   getegid() @trusted;
  uid_t   geteuid() @trusted;
  gid_t   getgid() @trusted;
*************** int     getopt(int, const scope char**,
*** 73,103 ****
--- 79,118 ----
  pid_t   getpgrp() @trusted;
  pid_t   getpid() @trusted;
  pid_t   getppid() @trusted;
+ //int     getresgid(gid_t*, gid_t*, gid_t*);
+ //int     getresuid(uid_t*, uid_t*, uid_t*);
  uid_t   getuid() @trusted;
  int     isatty(int) @trusted;
  int     link(const scope char*, const scope char*);
+ //int     linkat(int, const scope char*, int, const scope char*, int);
  //off_t   lseek(int, off_t, int);
  c_long  pathconf(const scope char*, int);
  int     pause() @trusted;
  int     pipe(ref int[2]) @trusted;
+ //int     pipe2(ref int[2], int) @trusted;
  ssize_t read(int, void*, size_t);
  ssize_t readlink(const scope char*, char*, size_t);
+ //ssize_t readlinkat(int, const scope char*, char*, size_t);
  int     rmdir(const scope char*);
  int     setegid(gid_t) @trusted;
  int     seteuid(uid_t) @trusted;
  int     setgid(gid_t) @trusted;
  int     setgroups(size_t, const scope gid_t*) @trusted;
  int     setpgid(pid_t, pid_t) @trusted;
+ //int     setresgid(gid_t, gid_t, gid_t) @trusted;
+ //int     setresuid(uid_t, uid_t, uid_t) @trusted;
  pid_t   setsid() @trusted;
  int     setuid(uid_t) @trusted;
  uint    sleep(uint) @trusted;
  int     symlink(const scope char*, const scope char*);
+ //int     symlinkat(const scope char*, int, const scope char*);
  c_long  sysconf(int) @trusted;
  pid_t   tcgetpgrp(int) @trusted;
  int     tcsetpgrp(int, pid_t) @trusted;
  char*   ttyname(int) @trusted;
  int     ttyname_r(int, char*, size_t);
  int     unlink(const scope char*);
+ //int     unlinkat(int, const scope char*, int);
  ssize_t write(int, const scope void*, size_t);
  
  version (CRuntime_Glibc)
*************** version (CRuntime_Glibc)
*** 120,145 ****
--- 135,239 ----
    {
      int   ftruncate(int, off_t) @trusted;
    }
+     int   faccessat(int, const scope char*, int, int);
+     int   fchownat(int, const scope char*, uid_t, gid_t, int);
+     int   fexecve(int, const scope char**, const scope char**);
+     pid_t _Fork() @trusted;
+     int   getentropy(void*, size_t);
+     int   getresgid(gid_t*, gid_t*, gid_t*);
+     int   getresuid(uid_t*, uid_t*, uid_t*);
+     int   linkat(int, const scope char*, int, const scope char*, int);
+     int   pipe2(ref int[2], int) @trusted;
+     ssize_t readlinkat(int, const scope char*, char*, size_t);
+     int   setresgid(gid_t, gid_t, gid_t) @trusted;
+     int   setresuid(uid_t, uid_t, uid_t) @trusted;
+     int   symlinkat(const scope char*, int, const scope char*);
+     int   unlinkat(int, const scope char*, int);
  }
  else version (FreeBSD)
  {
      off_t lseek(int, off_t, int) @trusted;
      int   ftruncate(int, off_t) @trusted;
+     int   getresgid(gid_t*, gid_t*, gid_t*);
+     int   getresuid(uid_t*, uid_t*, uid_t*);
+     int   setresgid(gid_t, gid_t, gid_t) @trusted;
+     int   setresuid(uid_t, uid_t, uid_t) @trusted;
+ 
+     import core.sys.freebsd.config : __FreeBSD_version;
+   static if (__FreeBSD_version >= 800000)
+   {
+     int   faccessat(int, const scope char*, int, int);
+     int   fchownat(int, const scope char*, uid_t, gid_t, int);
+     int   fexecve(int, const scope char**, const scope char**);
+     int   linkat(int, const scope char*, int, const scope char*, int);
+     ssize_t readlinkat(int, const scope char*, char*, size_t);
+     int   symlinkat(const scope char*, int, const scope char*);
+     int   unlinkat(int, const scope char*, int);
+   }
+   static if (__FreeBSD_version >= 1000000)
+   {
+     int   dup3(int, int, int) @trusted;
+     int   pipe2(ref int[2], int) @trusted;
+   }
+   static if (__FreeBSD_version >= 1200000)
+   {
+     int   getentropy(void*, size_t);
+   }
+   static if (__FreeBSD_version >= 1301000)
+   {
+     pid_t _Fork() @trusted;
+   }
  }
  else version (NetBSD)
  {
      off_t lseek(int, off_t, int) @trusted;
      int   ftruncate(int, off_t) @trusted;
+     int   faccessat(int, const scope char*, int, int);
+     int   fchownat(int, const scope char*, uid_t, gid_t, int);
+     int   fexecve(int, const scope char**, const scope char**);
+     int   getentropy(void*, size_t);
+     int   linkat(int, const scope char*, int, const scope char*, int);
+     int   pipe2(ref int[2], int) @trusted;
+     ssize_t readlinkat(int, const scope char*, char*, size_t);
+     int   symlinkat(const scope char*, int, const scope char*);
+     int   unlinkat(int, const scope char*, int);
  }
  else version (OpenBSD)
  {
      off_t lseek(int, off_t, int) @trusted;
      int   ftruncate(int, off_t) @trusted;
+     int   dup3(int, int, int) @trusted;
+     int   faccessat(int, const scope char*, int, int);
+     int   fchownat(int, const scope char*, uid_t, gid_t, int);
+     int   getentropy(void*, size_t);
+     int   getresgid(gid_t*, gid_t*, gid_t*);
+     int   getresuid(uid_t*, uid_t*, uid_t*);
+     int   linkat(int, const scope char*, int, const scope char*, int);
+     int   pipe2(ref int[2], int) @trusted;
+     ssize_t readlinkat(int, const scope char*, char*, size_t);
+     int   setresgid(gid_t, gid_t, gid_t) @trusted;
+     int   setresuid(uid_t, uid_t, uid_t) @trusted;
+     int   symlinkat(const scope char*, int, const scope char*);
+     int   unlinkat(int, const scope char*, int);
  }
  else version (DragonFlyBSD)
  {
      off_t lseek(int, off_t, int) @trusted;
      int   ftruncate(int, off_t) @trusted;
+     int   dup3(int, int, int) @trusted;
+     int   faccessat(int, const scope char*, int, int);
+     int   fchownat(int, const scope char*, uid_t, gid_t, int);
+     int   fexecve(int, const scope char**, const scope char**);
+     int   getentropy(void*, size_t);
+     int   getresgid(gid_t*, gid_t*, gid_t*);
+     int   getresuid(uid_t*, uid_t*, uid_t*);
+     int   linkat(int, const scope char*, int, const scope char*, int);
+     int   pipe2(ref int[2], int) @trusted;
+     ssize_t readlinkat(int, const scope char*, char*, size_t);
+     int   setresgid(gid_t, gid_t, gid_t) @trusted;
+     int   setresuid(uid_t, uid_t, uid_t) @trusted;
+     int   symlinkat(const scope char*, int, const scope char*);
+     int   unlinkat(int, const scope char*, int);
  }
  else version (Solaris)
  {
*************** else version (Solaris)
*** 167,182 ****
--- 261,307 ----
              int     ftruncate(int, off_t) @trusted;
          }
      }
+     int   dup3(int, int, int) @trusted;
+     int   faccessat(int, const scope char*, int, int);
+     int   fchownat(int, const scope char*, uid_t, gid_t, int);
+     int   fexecve(int, const scope char**, const scope char**);
+     int   getentropy(void*, size_t);
+     int   linkat(int, const scope char*, int, const scope char*, int);
+     int   pipe2(ref int[2], int) @trusted;
+     ssize_t readlinkat(int, const scope char*, char*, size_t);
+     int   symlinkat(const scope char*, int, const scope char*);
+     int   unlinkat(int, const scope char*, int);
  }
  else version (Darwin)
  {
      off_t lseek(int, off_t, int) @trusted;
      int   ftruncate(int, off_t) @trusted;
+     int   faccessat(int, const scope char*, int, int);
+     int   fchownat(int, const scope char*, uid_t, gid_t, int);
+     int   linkat(int, const scope char*, int, const scope char*, int);
+     ssize_t readlinkat(int, const scope char*, char*, size_t);
+     int   symlinkat(const scope char*, int, const scope char*);
+     int   unlinkat(int, const scope char*, int);
  }
  else version (CRuntime_Bionic)
  {
      off_t lseek(int, off_t, int) @trusted;
      int   ftruncate(int, off_t) @trusted;
+     int   dup3(int, int, int) @trusted;
+     int   faccessat(int, const scope char*, int, int);
+     int   fchownat(int, const scope char*, uid_t, gid_t, int);
+     int   fexecve(int, const scope char**, const scope char**);
+     pid_t _Fork() @trusted;
+     int   getentropy(void*, size_t);
+     int   getresgid(gid_t*, gid_t*, gid_t*);
+     int   getresuid(uid_t*, uid_t*, uid_t*);
+     int   linkat(int, const scope char*, int, const scope char*, int);
+     int   pipe2(ref int[2], int) @trusted;
+     ssize_t readlinkat(int, const scope char*, char*, size_t);
+     int   setresgid(gid_t, gid_t, gid_t) @trusted;
+     int   setresuid(uid_t, uid_t, uid_t) @trusted;
+     int   symlinkat(const scope char*, int, const scope char*);
+     int   unlinkat(int, const scope char*, int);
  }
  else version (CRuntime_Musl)
  {
*************** else version (CRuntime_Musl)
*** 184,189 ****
--- 309,329 ----
      off_t lseek(int, off_t, int) @trusted;
      alias ftruncate ftruncate64;
      alias lseek lseek64;
+     int   dup3(int, int, int) @trusted;
+     int   faccessat(int, const scope char*, int, int);
+     int   fchownat(int, const scope char*, uid_t, gid_t, int);
+     int   fexecve(int, const scope char**, const scope char**);
+     pid_t _Fork() @trusted;
+     int   getentropy(void*, size_t);
+     int   getresgid(gid_t*, gid_t*, gid_t*);
+     int   getresuid(uid_t*, uid_t*, uid_t*);
+     int   linkat(int, const scope char*, int, const scope char*, int);
+     int   pipe2(ref int[2], int) @trusted;
+     ssize_t readlinkat(int, const scope char*, char*, size_t);
+     int   setresgid(gid_t, gid_t, gid_t) @trusted;
+     int   setresuid(uid_t, uid_t, uid_t) @trusted;
+     int   symlinkat(const scope char*, int, const scope char*);
+     int   unlinkat(int, const scope char*, int);
  }
  else version (CRuntime_UClibc)
  {
*************** else version (CRuntime_UClibc)
*** 205,210 ****
--- 345,362 ----
    {
      int   ftruncate(int, off_t) @trusted;
    }
+     int   dup3(int, int, int) @trusted;
+     int   faccessat(int, const scope char*, int, int);
+     int   fchownat(int, const scope char*, uid_t, gid_t, int);
+     int   getresgid(gid_t*, gid_t*, gid_t*);
+     int   getresuid(uid_t*, uid_t*, uid_t*);
+     int   linkat(int, const scope char*, int, const scope char*, int);
+     int   pipe2(ref int[2], int) @trusted;
+     ssize_t readlinkat(int, const scope char*, char*, size_t);
+     int   setresgid(gid_t, gid_t, gid_t) @trusted;
+     int   setresuid(uid_t, uid_t, uid_t) @trusted;
+     int   symlinkat(const scope char*, int, const scope char*);
+     int   unlinkat(int, const scope char*, int);
  }
  
  version (CRuntime_Glibc)
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/sys/solaris/sys/procfs.d gcc-16-20260208/libphobos/libdruntime/core/sys/solaris/sys/procfs.d
*** gcc-16-20260201/libphobos/libdruntime/core/sys/solaris/sys/procfs.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/libphobos/libdruntime/core/sys/solaris/sys/procfs.d	Sun Feb  8 22:32:16 2026
***************
*** 0 ****
--- 1,252 ----
+ /**
+   * D header file for Solaris sys/procfs.h.
+   *
+   * Copyright: Copyright © 2025, The D Language Foundation
+   * License: <a href="http://www.boost.org/LICENSE_1_0.txt">Boost License 1.0</a>.
+   * Authors: Iain Buclaw
+   */
+ module core.sys.solaris.sys.procfs;
+ 
+ version (Solaris):
+ extern (C):
+ nothrow:
+ @nogc:
+ 
+ import core.stdc.config : c_long, c_ulong;
+ import core.stdc.stdint : uintptr_t;
+ import core.sys.posix.signal : sigaction_t, siginfo_t, sigset_t, stack_t;
+ import core.sys.posix.time : timestruc_t;
+ 
+ version (X86)     version = X86_Any;
+ version (X86_64)  version = X86_Any;
+ version (SPARC)   version = SPARC_Any;
+ version (SPARC64) version = SPARC_Any;
+ 
+ version (X86_Any)
+ {
+     /*
+      * Holds one i386 or and64 instruction
+      */
+     alias instr_t = ubyte;
+ 
+     public import core.sys.solaris.sys.regset :
+         NPRGREG = _NGREG,
+         prgreg_t = greg_t,
+         prgregset_t = gregset_t,
+         prfpregset_t = fpregset_t;
+ 
+     /*
+      * The following defines are for portability
+      */
+     version (X86_64)
+     {
+         public import core.sys.solaris.sys.regset :
+             R_PC = REG_RIP,
+             R_PS = REG_RFL,
+             R_SP = REG_RSP,
+             R_FP = REG_RBP,
+             R_R0 = REG_RAX,
+             R_R1 = REG_RDX;
+     }
+     else
+     {
+         public import core.sys.solaris.sys.regset :
+             R_PC = REG_EIP,
+             R_PS = REG_EFL,
+             R_SP = REG_UESP,
+             R_FP = REG_EBP,
+             R_R0 = REG_EAX,
+             R_R1 = REG_EDX;
+     }
+ }
+ else version (SPARC_Any)
+ {
+     import core.sys.solaris.sys.regset : fq;
+ 
+     /*
+      * Holds one sparc instruction, both ILP32 and LP64
+      */
+     alias instr_t = uint;
+ 
+     /*
+      * General register access (sparc).
+      * Registers are 32 bits for ILP32, 64 bits for LP64.
+      */
+     enum NPRGREG = 38;
+ 
+     version (D_LP64)
+         alias prgreg_t = c_long;
+     else
+         alias prgreg_t = int;
+ 
+     alias prgregset_t = prgreg_t[NPRGREG];
+ 
+     /*
+      * Floating-point register access (sparc FPU).
+      */
+     version (SPARC64)
+     {
+         struct prfpregset_t
+         {
+             union
+             {
+                 uint[32]   pr_regs;
+                 double[32] pr_dregs;
+                 real[16]   pr_qregs;
+             }
+             ulong pr_filler;
+             ulong pr_fsr;
+             ubyte pr_qcnt;
+             ubyte pr_q_entrysize;
+             ubyte pr_en;
+             byte[13] pr_pad;
+             fq[16] pr_q;
+         }
+     }
+     else
+     {
+         struct prfpregset_t
+         {
+             union
+             {
+                 uint[32]   pr_regs;
+                 double[16] pr_dregs;
+             }
+             uint  pr_filler;
+             uint  pr_fsr;
+             ubyte pr_qcnt;
+             ubyte pr_q_entrysize;
+             ubyte pr_en;
+             fq[32] pr_q;
+         }
+     }
+ 
+     enum R_G0 = 0;
+     enum R_G1 = 1;
+     enum R_G2 = 2;
+     enum R_G3 = 3;
+     enum R_G4 = 4;
+     enum R_G5 = 5;
+     enum R_G6 = 6;
+     enum R_G7 = 7;
+     enum R_O0 = 8;
+     enum R_O1 = 9;
+     enum R_O2 = 10;
+     enum R_O3 = 11;
+     enum R_O4 = 12;
+     enum R_O5 = 13;
+     enum R_O6 = 14;
+     enum R_O7 = 15;
+     enum R_L0 = 16;
+     enum R_L1 = 17;
+     enum R_L2 = 18;
+     enum R_L3 = 19;
+     enum R_L4 = 20;
+     enum R_L5 = 21;
+     enum R_L6 = 22;
+     enum R_L7 = 23;
+     enum R_I0 = 24;
+     enum R_I1 = 25;
+     enum R_I2 = 26;
+     enum R_I3 = 27;
+     enum R_I4 = 28;
+     enum R_I5 = 29;
+     enum R_I6 = 30;
+     enum R_I7 = 31;
+     enum R_PC = 33;
+     enum R_nPC = 34;
+     enum R_Y  = 35;
+ 
+     version (SPARC64)
+     {
+         enum R_CCR = 32;
+         enum R_ASI = 36;
+         enum R_FPRS = 37;
+         enum R_PS = R_CCR;
+     }
+     else
+     {
+         enum R_PSR = 32;
+         enum R_WIM = 36;
+         enum R_TBR = 37;
+         enum R_PS = R_PSR;
+     }
+ 
+     enum R_SP = R_O6;
+     enum R_FP = R_I6;
+     enum R_R0 = R_O0;
+     enum R_R1 = R_O1;
+ }
+ 
+ /*
+  * lwp status file.  /proc/<pid>/lwp/<lwpid>/lwpstatus
+  */
+ private enum PRCLSZ    = 8;     // maximum size of scheduling class name
+ private enum PRSYSARGS = 8;     // maximum number of syscall arguments
+ 
+ struct lwpstatus_t
+ {
+     int     pr_flags;               // flags (see below)
+     int     pr_lwpid;               // specific lwp identifier
+     short   pr_why;                 // reason for lwp stop, if stopped
+     short   pr_what;                // more detailed reason
+     short   pr_cursig;              // current signal, if any
+     ubyte   pr_adi;
+     byte    pr_pad1;
+     siginfo_t pr_info;              // info associated with signal or fault
+     sigset_t pr_lwppend;            // set of signals pending to the lwp
+     sigset_t pr_lwphold;            // set of signals blocked by the lwp
+     sigaction_t pr_action;          // signal action for current signal
+     stack_t pr_altstack;            // alternate signal stack info
+     uintptr_t pr_oldcontext;        // address of previous ucontext
+     short   pr_syscall;             // system call number (if in syscall)
+     short   pr_nsysarg;             // number of arguments to this syscall
+     int     pr_errno;               // errno for failed syscall, 0 if successful
+     c_long[PRSYSARGS] pr_sysarg;    // arguments to this syscall
+     c_long    pr_rval1;             // primary syscall return value
+     c_long    pr_rval2;             // second syscall return value, if any
+     char[PRCLSZ] pr_clname = void;  // scheduling class name
+     timestruc_t pr_tstamp;          // real-time time stamp of stop
+     timestruc_t pr_utime;           // lwp user cpu time
+     timestruc_t pr_stime;           // lwp system cpu time
+     int[11 - 2 * timestruc_t.sizeof / int.sizeof] pr_filler;
+     int     pr_errpriv;             // missing privilege
+     uintptr_t pr_ustack;            // address of stack boundary data (stack_t)
+     c_ulong pr_instr;               // current instruction
+     prgregset_t pr_reg;             // general registers
+     prfpregset_t pr_fpreg;          // floating-point registers
+ }
+ 
+ /*
+  * pr_flags (same values appear in both pstatus_t and lwpstatus_t pr_flags).
+  *
+  * These flags do *not* apply to psinfo_t.pr_flag or lwpsinfo_t.pr_flag
+  * (which are both deprecated).
+  */
+ // The following flags apply to the specific or representative lwp
+ enum PR_STOPPED = 0x00000001;   // lwp is stopped
+ enum PR_ISTOP   = 0x00000002;   // lwp is stopped on an event of interest
+ enum PR_DSTOP   = 0x00000004;   // lwp has a stop directive in effect
+ enum PR_STEP    = 0x00000008;   // lwp has a single-step directive in effect
+ enum PR_ASLEEP  = 0x00000010;   // lwp is sleeping in a system call
+ enum PR_PCINVAL = 0x00000020;   // contents of pr_instr undefined
+ enum PR_ASLWP   = 0x00000040;   // obsolete flag; never set
+ enum PR_AGENT   = 0x00000080;   // this lwp is the /proc agent lwp
+ enum PR_DETACH  = 0x00000100;   // this is a detached lwp
+ enum PR_DAEMON  = 0x00000200;   // this is a daemon lwp
+ enum PR_IDLE    = 0x00000400;   // lwp is a cpu's idle thread
+ // The following flags apply to the process, not to an individual lwp
+ enum PR_ISSYS   = 0x00001000;   // this is a system process
+ enum PR_VFORKP  = 0x00002000;   // process is the parent of a vfork()d child
+ enum PR_ORPHAN  = 0x00004000;   // process's process group is orphaned
+ enum PR_NOSIGCHLD = 0x00008000; // process will not generate SIGCHLD on exit
+ enum PR_WAITPID = 0x00010000;   // only waitid(P_PID, pid) can reap the child
+ // The following process flags are modes settable by PCSET/PCUNSET
+ enum PR_FORK    = 0x00100000;   // inherit-on-fork is in effect
+ enum PR_RLC     = 0x00200000;   // run-on-last-close is in effect
+ enum PR_KLC     = 0x00400000;   // kill-on-last-close is in effect
+ enum PR_ASYNC   = 0x00800000;   // asynchronous-stop is in effect
+ enum PR_MSACCT  = 0x01000000;   // micro-state usage accounting is in effect
+ enum PR_BPTADJ  = 0x02000000;   // breakpoint trap pc adjustment is in effect
+ enum PR_PTRACE  = 0x04000000;   // ptrace-compatibility mode is in effect
+ enum PR_MSFORK  = 0x08000000;   // micro-state accounting inherited on fork
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/sys/solaris/sys/regset.d gcc-16-20260208/libphobos/libdruntime/core/sys/solaris/sys/regset.d
*** gcc-16-20260201/libphobos/libdruntime/core/sys/solaris/sys/regset.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/libphobos/libdruntime/core/sys/solaris/sys/regset.d	Sun Feb  8 22:32:16 2026
***************
*** 0 ****
--- 1,331 ----
+ /**
+   * D header file for Solaris sys/regset.h.
+   *
+   * Copyright: Copyright © 2025, The D Language Foundation
+   * License: <a href="http://www.boost.org/LICENSE_1_0.txt">Boost License 1.0</a>.
+   * Authors: Iain Buclaw
+   */
+ module core.sys.solaris.sys.regset;
+ 
+ version (Solaris):
+ extern (C):
+ nothrow:
+ @nogc:
+ 
+ import core.stdc.config : c_long, c_ulong;
+ import core.sys.posix.sys.types : caddr_t;
+ 
+ version (X86)     version = X86_Any;
+ version (X86_64)  version = X86_Any;
+ version (SPARC)   version = SPARC_Any;
+ version (SPARC64) version = SPARC_Any;
+ 
+ version (X86_64)
+ {
+     enum REG_GSBASE    = 27;
+     enum REG_FSBASE    = 26;
+     enum REG_DS        = 25;
+     enum REG_ES        = 24;
+ 
+     enum REG_GS        = 23;
+     enum REG_FS        = 22;
+     enum REG_SS        = 21;
+     enum REG_RSP       = 20;
+     enum REG_RFL       = 19;
+     enum REG_CS        = 18;
+     enum REG_RIP       = 17;
+     enum REG_ERR       = 16;
+     enum REG_TRAPNO    = 15;
+     enum REG_RAX       = 14;
+     enum REG_RCX       = 13;
+     enum REG_RDX       = 12;
+     enum REG_RBX       = 11;
+     enum REG_RBP       = 10;
+     enum REG_RSI       = 9;
+     enum REG_RDI       = 8;
+     enum REG_R8        = 7;
+     enum REG_R9        = 6;
+     enum REG_R10       = 5;
+     enum REG_R11       = 4;
+     enum REG_R12       = 3;
+     enum REG_R13       = 2;
+     enum REG_R14       = 1;
+     enum REG_R15       = 0;
+ 
+     enum REG_PC = REG_RIP;
+     enum REG_FP = REG_RBP;
+     enum REG_SP = REG_RSP;
+     enum REG_PS = REG_RFL;
+     enum REG_R0 = REG_RAX;
+     enum REG_R1 = REG_RDX;
+ }
+ else version (X86)
+ {
+     enum REG_SS        = 18;
+     enum REG_UESP      = 17;
+     enum REG_EFL       = 16;
+     enum REG_CS        = 15;
+     enum REG_EIP       = 14;
+     enum REG_ERR       = 13;
+     enum REG_TRAPNO    = 12;
+     enum REG_EAX       = 11;
+     enum REG_ECX       = 10;
+     enum REG_EDX       = 9;
+     enum REG_EBX       = 8;
+     enum REG_ESP       = 7;
+     enum REG_EBP       = 6;
+     enum REG_ESI       = 5;
+     enum REG_EDI       = 4;
+     enum REG_DS        = 3;
+     enum REG_ES        = 2;
+     enum REG_FS        = 1;
+     enum REG_GS        = 0;
+ 
+     enum REG_PC = REG_EIP;
+     enum REG_FP = REG_EBP;
+     enum REG_SP = REG_UESP;
+     enum REG_PS = REG_EFL;
+     enum REG_R0 = REG_EAX;
+     enum REG_R1 = REG_EDX;
+ }
+ else version (SPARC_Any)
+ {
+     enum REG_PC  = 1;
+     enum REG_nPC = 2;
+     enum REG_Y   = 3;
+     enum REG_G1  = 4;
+     enum REG_G2  = 5;
+     enum REG_G3  = 6;
+     enum REG_G4  = 7;
+     enum REG_G5  = 8;
+     enum REG_G6  = 9;
+     enum REG_G7  = 10;
+     enum REG_O0  = 11;
+     enum REG_O1  = 12;
+     enum REG_O2  = 13;
+     enum REG_O3  = 14;
+     enum REG_O4  = 15;
+     enum REG_O5  = 16;
+     enum REG_O6  = 17;
+     enum REG_O7  = 18;
+ 
+     enum REG_SP = REG_O6;
+     enum REG_R0 = REG_O0;
+     enum REG_R1 = REG_O1;
+ 
+     version (SPARC64)
+     {
+         enum REG_CCR = 0;
+         enum REG_ASI = 19;
+         enum REG_FPRS = 20;
+     }
+     else
+     {
+         enum REG_PSR = 0;
+         enum REG_PS  = REG_PSR;
+     }
+ }
+ else
+     static assert(false, "Architecture not supported.");
+ 
+ /*
+  * A gregset_t is defined as an array type.
+  */
+ version (X86_64)
+ {
+     enum _NGREG = 28;
+     alias greg_t = c_long;
+ }
+ else version (X86)
+ {
+     enum _NGREG = 19;
+     alias greg_t = int;
+ }
+ else version (SPARC64)
+ {
+     enum _NGREG = 21;
+     alias greg_t = c_long;
+ }
+ else version (SPARC)
+ {
+     enum _NGREG = 19;
+     alias greg_t = int;
+ }
+ else
+     static assert(0, "unimplemented");
+ 
+ alias gregset_t = greg_t[_NGREG];
+ 
+ version (X86_Any)
+ {
+     /*
+      * Xregs extension
+      */
+     struct xrs_t
+     {
+         c_ulong xrs_id;
+         caddr_t xrs_ptr;
+     }
+ }
+ else version (SPARC_Any)
+ {
+     /*
+      * Defines the minimal format of a floating point instruction queue entry.
+      */
+     struct _fpq
+     {
+         uint *fpq_addr;
+         uint fpq_instr;
+     }
+ 
+     struct fq
+     {
+         union
+         {
+             double whole;
+             _fpq fpq;
+         }
+     }
+ 
+     /*
+      * Defines how a register window can appear on the stack
+      */
+     struct rwindow
+     {
+         greg_t[8] rw_local;
+         greg_t[8] rw_in;
+     }
+ 
+     struct gwindows_t
+     {
+         int         wbcnt;
+         greg_t[31] *spbuf;
+         rwindow[31] wbuf;
+     }
+ 
+     /*
+      * For associating extra register state with ucontext structure and is kept
+      * within the uc_mcontext filler area
+      */
+     struct xrs_t
+     {
+         uint    xrs_id;
+         caddr_t xrs_ptr;
+     }
+ 
+     struct cxrs_t
+     {
+         uint    cxrs_id;
+         caddr_t cxrs_ptr;
+     }
+ 
+     alias asrset_t = long[16];
+ }
+ 
+ /*
+  * The floating point processor state
+  */
+ version (X86_64)
+ {
+     private
+     {
+         alias upad128_t = uint[4];
+         union _u_st
+         {
+             ushort[5]   fpr_16;
+             upad128_t   __fpr_pad;
+         }
+     }
+ 
+     struct fpu
+     {
+         union fp_reg_set
+         {
+             struct fpchip_state
+             {
+                 ushort          cw;
+                 ushort          sw;
+                 ubyte           fctw;
+                 ubyte           __fx_rsvd;
+                 ushort          fop;
+                 ulong           rip;
+                 ulong           rdp;
+                 uint            mxcsr;
+                 uint            mxcsr_mask;
+                 _u_st[8]        st;
+                 upad128_t[16]   xmm;
+                 upad128_t[6]    __fx_ign2;
+                 uint            status;
+                 uint            xstatus;
+             }
+             uint[130]   f_fpregs;
+         }
+     }
+ }
+ else version (X86)
+ {
+     private alias upad128_t = uint[4];
+ 
+     struct fpu
+     {
+         union u_fp_reg_set
+         {
+             struct s_fpchip_state
+             {
+                 uint[27]        state;
+                 uint            status;
+                 uint            mxcsr;
+                 uint            xstatus;
+                 uint[2]         __pad;
+                 upad128_t[8]    xmm;
+             }
+             s_fpchip_state    fpchip_state;
+ 
+             struct s_fp_emul_space
+             {
+                 ubyte[246]  fp_emul;
+                 ubyte[2]    fp_epad;
+             }
+             s_fp_emul_space   fp_emul_space;
+             uint[95]        f_fpregs;
+         }
+         u_fp_reg_set fp_reg_set;
+     }
+ }
+ else version (SPARC64)
+ {
+     struct fpu
+     {
+         union
+         {
+             uint[32]   fpu_regs;
+             double[32] fpu_dregs;
+             real[16]   fpu_qregs;
+         }
+         fq    *fpu_q;
+         ulong fpu_fsr;
+         ubyte fpu_qcnt;
+         ubyte fpu_q_entrysize;
+         ubyte fpu_en;
+     }
+ }
+ else version (SPARC)
+ {
+     struct fpu
+     {
+         union
+         {
+             uint[32]   fpu_regs;
+             double[16] fpu_dregs;
+         }
+         fq    *fpu_q;
+         uint  fpu_fsr;
+         ubyte fpu_qcnt;
+         ubyte fpu_q_entrysize;
+         ubyte fpu_en;
+     }
+ }
+ else
+     static assert(0, "unimplemented");
+ 
+ alias fpregset_t = fpu;
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/sys/solaris/thread.d gcc-16-20260208/libphobos/libdruntime/core/sys/solaris/thread.d
*** gcc-16-20260201/libphobos/libdruntime/core/sys/solaris/thread.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/libphobos/libdruntime/core/sys/solaris/thread.d	Sun Feb  8 22:32:16 2026
***************
*** 0 ****
--- 1,66 ----
+ /**
+   * D header file for Solaris thread.h.
+   *
+   * Copyright: Copyright © 2025, The D Language Foundation
+   * License: <a href="http://www.boost.org/LICENSE_1_0.txt">Boost License 1.0</a>.
+   * Authors: Iain Buclaw
+   */
+ module core.sys.solaris.thread;
+ 
+ version (Solaris):
+ extern (C):
+ nothrow:
+ @nogc:
+ 
+ import core.stdc.config : c_long;
+ import core.sys.posix.signal : sigset_t, stack_t;
+ 
+ /*
+  * definitions needed to use the thread interface except synchronization.
+  */
+ alias thread_t = int;
+ alias thread_key_t = int;
+ 
+ int thr_create(void*, size_t, void* function(void*), void*, c_long, thread_t*);
+ int thr_join(thread_t, thread_t*, void**);
+ int thr_setconcurrency(int);
+ int thr_getconcurrency();
+ noreturn thr_exit(void*);
+ thread_t thr_self();
+ 
+ int thr_sigsetmask(int, const scope sigset_t*, sigset_t*);
+ 
+ int thr_stksegment(stack_t*);
+ 
+ int thr_main();
+ int thr_kill(thread_t, int);
+ int thr_suspend(thread_t);
+ int thr_continue(thread_t);
+ void thr_yield();
+ int thr_setprio(thread_t, int);
+ int thr_getprio(thread_t, int*);
+ int thr_keycreate(thread_key_t*, void function(void*));
+ int thr_keycreate_once(thread_key_t*, void function(void*));
+ int thr_setspecific(thread_key_t, void*);
+ int thr_getspecific(thread_key_t, void**);
+ size_t thr_min_stack();
+ 
+ alias THR_MIN_STACK = thr_min_stack;
+ 
+ /*
+  * thread flags (one word bit mask)
+  */
+ enum : c_long
+ {
+     THR_BOUND = 0x00000001,     // = PTHREAD_SCOPE_SYSTEM
+     THR_NEW_LWP = 0x00000002,
+     THR_DETACHED = 0x00000040,  // = PTHREAD_CREATE_DETACHED
+     THR_SUSPENDED = 0x00000080,
+     THR_DAEMON = 0x00000100,
+ }
+ 
+ /*
+  * The key to be created by thr_keycreate_once()
+  * must be statically initialized with THR_ONCE_KEY.
+  */
+ enum thread_key_t THR_ONCE_KEY = -1;
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/sys/windows/stdc/time.d gcc-16-20260208/libphobos/libdruntime/core/sys/windows/stdc/time.d
*** gcc-16-20260201/libphobos/libdruntime/core/sys/windows/stdc/time.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/core/sys/windows/stdc/time.d	Sun Feb  8 22:32:16 2026
***************
*** 1,5 ****
  /**
!  * D header file for C99.
   *
   * $(C_HEADER_DESCRIPTION pubs.opengroup.org/onlinepubs/009695399/basedefs/_time.h.html, _time.h)
   *
--- 1,5 ----
  /**
!  * D header file for C99/C11.
   *
   * $(C_HEADER_DESCRIPTION pubs.opengroup.org/onlinepubs/009695399/basedefs/_time.h.html, _time.h)
   *
*************** void  _tzset();
*** 57,59 ****
--- 57,92 ----
  
  ///
  extern __gshared const(char)*[2] tzname; // non-standard
+ 
+ // timespec functions, introduced in C11
+ alias __time64_t = long;
+ alias __time32_t = int;
+ 
+ /// 32-bit timespec struct
+ struct _timespec32
+ {
+     __time32_t tv_sec;
+     c_long     tv_nsec;
+ }
+ 
+ /// 64-bit timespec struct
+ struct _timespec64
+ {
+     __time64_t tv_sec;
+     c_long     tv_nsec;
+ }
+ 
+ /// Timespec structure, introduced in C11
+ alias timespec = _timespec64;
+ 
+ /// Base Value used for timespec_get
+ enum TIME_UTC = 1;
+ 
+ /// 64-bit version of timespec_get for Windows
+ @system int _timespec64_get(scope _timespec64* ts, int base);
+ 
+ /// 32-bit version of timespec_get for Windows
+ @system int _timespec32_get(scope _timespec32* ts, int base);
+ 
+ /// timespec_get, introduced in C11
+ alias timespec_get = _timespec64_get;
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/thread/fiber/package.d gcc-16-20260208/libphobos/libdruntime/core/thread/fiber/package.d
*** gcc-16-20260201/libphobos/libdruntime/core/thread/fiber/package.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/core/thread/fiber/package.d	Sun Feb  8 22:32:16 2026
*************** protected:
*** 759,766 ****
          }
          else
          {
!             version (Posix) import core.sys.posix.sys.mman : MAP_ANON, MAP_FAILED, MAP_PRIVATE, mmap,
!                 mprotect, PROT_NONE, PROT_READ, PROT_WRITE;
              version (OpenBSD) import core.sys.posix.sys.mman : MAP_STACK;
  
              static if ( __traits( compiles, ucontext_t ) )
--- 759,776 ----
          }
          else
          {
!             version (Posix)
!             {
!                 static import core.sys.posix.sys.mman;
!                 static if (__traits(compiles, core.sys.posix.sys.mman.mmap))
!                 {
!                     import core.sys.posix.sys.mman : MAP_ANON, MAP_FAILED, MAP_PRIVATE, mmap,
!                         mprotect, PROT_NONE, PROT_READ, PROT_WRITE;
!                 }
!                 static import core.sys.posix.stdlib;
!                 static if (__traits(compiles, core.sys.posix.stdlib.valloc))
!                     import core.sys.posix.stdlib : valloc;
!             }
              version (OpenBSD) import core.sys.posix.sys.mman : MAP_STACK;
  
              static if ( __traits( compiles, ucontext_t ) )
*************** protected:
*** 1066,1072 ****
          {
              push( 0x00000000_00000000 );                            // Return address of fiber_entryPoint call
              push( cast(size_t) &fiber_entryPoint );                 // RIP
!             push( cast(size_t) m_ctxt.bstack );                     // RBP
              push( 0x00000000_00000000 );                            // RBX
              push( 0x00000000_00000000 );                            // R12
              push( 0x00000000_00000000 );                            // R13
--- 1076,1091 ----
          {
              push( 0x00000000_00000000 );                            // Return address of fiber_entryPoint call
              push( cast(size_t) &fiber_entryPoint );                 // RIP
!             version (OSX)
!             {
!                 // backtrace() needs this to be null to terminate
!                 // the stack walk on macOS x86_64
!                 push( 0x00000000_00000000 );                        // RBP
!             }
!             else
!             {
!                 push( cast(size_t) m_ctxt.bstack );                 // RBP
!             }
              push( 0x00000000_00000000 );                            // RBX
              push( 0x00000000_00000000 );                            // R12
              push( 0x00000000_00000000 );                            // R13
*************** protected:
*** 1323,1329 ****
          }
          else static if ( __traits( compiles, ucontext_t ) )
          {
!             getcontext( &m_utxt );
              m_utxt.uc_stack.ss_sp   = m_pmem;
              m_utxt.uc_stack.ss_size = m_size;
              makecontext( &m_utxt, &fiber_entryPoint, 0 );
--- 1342,1350 ----
          }
          else static if ( __traits( compiles, ucontext_t ) )
          {
!             const status = getcontext( &m_utxt );
!             assert( status == 0 );
! 
              m_utxt.uc_stack.ss_sp   = m_pmem;
              m_utxt.uc_stack.ss_size = m_size;
              makecontext( &m_utxt, &fiber_entryPoint, 0 );
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/thread/osthread.d gcc-16-20260208/libphobos/libdruntime/core/thread/osthread.d
*** gcc-16-20260201/libphobos/libdruntime/core/thread/osthread.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/core/thread/osthread.d	Sun Feb  8 22:32:16 2026
*************** else version (Posix)
*** 87,92 ****
--- 87,93 ----
  
      version (Darwin)
      {
+         // Use macOS threads for suspend/resume
          import core.sys.darwin.mach.kern_return : KERN_SUCCESS;
          import core.sys.darwin.mach.port : mach_port_t;
          import core.sys.darwin.mach.thread_act : mach_msg_type_number_t,
*************** else version (Posix)
*** 118,130 ****
               PPC_THREAD_STATE64, PPC_THREAD_STATE64_COUNT, ppc_thread_state64_t;
          }
      }
! }
! 
! version (Solaris)
! {
!     import core.sys.posix.sys.wait : idtype_t;
!     import core.sys.solaris.sys.priocntl : PC_CLNULL, PC_GETCLINFO, PC_GETPARMS, PC_SETPARMS, pcinfo_t, pcparms_t, priocntl;
!     import core.sys.solaris.sys.types : P_MYID, pri_t;
  }
  
  version (GNU)
--- 119,137 ----
               PPC_THREAD_STATE64, PPC_THREAD_STATE64_COUNT, ppc_thread_state64_t;
          }
      }
!     else version (Solaris)
!     {
!         // Use Solaris threads for suspend/resume
!         import core.sys.posix.sys.wait : idtype_t;
!         import core.sys.solaris.sys.priocntl : PC_CLNULL, PC_GETCLINFO, PC_GETPARMS, PC_SETPARMS, pcinfo_t, pcparms_t, priocntl;
!         import core.sys.solaris.sys.types : P_MYID, pri_t;
!         import core.sys.solaris.thread : thr_stksegment, thr_suspend, thr_continue;
!         import core.sys.solaris.sys.procfs : PR_STOPPED, lwpstatus_t;
!     }
!     else
!     {
!         // Use POSIX threads for suspend/resume
!     }
  }
  
  version (GNU)
*************** class Thread : ThreadBase
*** 393,399 ****
--- 400,449 ----
              static assert(false, "Architecture not supported." );
          }
      }
+     else version (Solaris)
+     {
+         version (X86)
+         {
+             uint[8]         m_reg; // edi,esi,ebp,esp,ebx,edx,ecx,eax
+         }
+         else version (X86_64)
+         {
+             ulong[16]       m_reg; // rdi,rsi,rbp,rsp,rbx,rdx,rcx,rax
+                                    // r8,r9,r10,r11,r12,r13,r14,r15
+         }
+         else version (SPARC)
+         {
+             int[33]         m_reg; // g0-7, o0-7, l0-7, i0-7, pc
+         }
+         else version (SPARC64)
+         {
+             long[33]        m_reg; // g0-7, o0-7, l0-7, i0-7, pc
+         }
+         else
+         {
+             static assert(false, "Architecture not supported." );
+         }
+     }
  
+     override final void[] savedRegisters() nothrow @nogc
+     {
+         version (Windows)
+         {
+             return m_reg;
+         }
+         else version (Darwin)
+         {
+             return m_reg;
+         }
+         else version (Solaris)
+         {
+             return m_reg;
+         }
+         else
+         {
+             return null;
+         }
+     }
  
      ///////////////////////////////////////////////////////////////////////////
      // General Actions
*************** version (CoreDdoc)
*** 1138,1143 ****
--- 1188,1202 ----
      extern (C) void thread_setGCSignals(int suspendSignalNo, int resumeSignalNo) nothrow @nogc
      {
      }
+ 
+     /**
+      * Get the GC signals set by the thread module. This function should be called either
+      * after thread_init() has finished, or after a call thread_setGCSignals().
+      * This function is Posix-only.
+      */
+     extern (C) void thread_getGCSignals(out int suspendSignalNo, out int resumeSignalNo) nothrow @nogc
+     {
+     }
  }
  else version (Posix)
  {
*************** else version (Posix)
*** 1157,1162 ****
--- 1216,1238 ----
          suspendSignalNumber = suspendSignalNo;
          resumeSignalNumber  = resumeSignalNo;
      }
+ 
+     extern (C) void thread_getGCSignals(out int suspendSignalNo, out int resumeSignalNo) nothrow @nogc
+     in
+     {
+         assert(suspendSignalNumber != 0);
+         assert(resumeSignalNumber  != 0);
+     }
+     out
+     {
+         assert(suspendSignalNo != 0);
+         assert(resumeSignalNo  != 0);
+     }
+     do
+     {
+         suspendSignalNo = suspendSignalNumber;
+         resumeSignalNo  = resumeSignalNumber;
+     }
  }
  
  version (Posix)
*************** in (fn)
*** 1340,1346 ****
                  enum int j = 13 + i; // source register
                  asm pure nothrow @nogc
                  {
!                     "stw "~regname~j.stringof~", %0" : "=m" (regs[i]);
                  }
              }}
              sp = cast(void*)&regs[0];
--- 1416,1422 ----
                  enum int j = 13 + i; // source register
                  asm pure nothrow @nogc
                  {
!                     ("stw "~regname~j.stringof~", %0") : "=m" (regs[i]);
                  }
              }}
              sp = cast(void*)&regs[0];
*************** in (fn)
*** 1357,1363 ****
                  enum int j = 13 + i; // source register
                  asm pure nothrow @nogc
                  {
!                     "std "~regname~j.stringof~", %0" : "=m" (regs[i]);
                  }
              }}
              sp = cast(void*)&regs[0];
--- 1433,1439 ----
                  enum int j = 13 + i; // source register
                  asm pure nothrow @nogc
                  {
!                     ("std "~regname~j.stringof~", %0") : "=m" (regs[i]);
                  }
              }}
              sp = cast(void*)&regs[0];
*************** in (fn)
*** 1459,1473 ****
      fn(sp);
  }
  
- version (Windows)
- private extern (D) void scanWindowsOnly(scope ScanAllThreadsTypeFn scan, ThreadBase _t) nothrow
- {
-     auto t = _t.toThread;
- 
-     scan( ScanType.stack, t.m_reg.ptr, t.m_reg.ptr + t.m_reg.length );
- }
- 
- 
  /**
   * Returns the process ID of the calling process, which is guaranteed to be
   * unique on the system. This call is always successful.
--- 1535,1540 ----
*************** extern (C) @nogc nothrow
*** 1499,1505 ****
  
      version (PThread_Getattr_NP)  int pthread_getattr_np(pthread_t thread, pthread_attr_t* attr);
      version (PThread_Attr_Get_NP) int pthread_attr_get_np(pthread_t thread, pthread_attr_t* attr);
-     version (Solaris) int thr_stksegment(stack_t* stk);
      version (OpenBSD) int pthread_stackseg_np(pthread_t thread, stack_t* sinfo);
  }
  
--- 1566,1571 ----
*************** private extern (D) bool suspend( Thread
*** 1803,1808 ****
--- 1869,2011 ----
              static assert(false, "Architecture not supported." );
          }
      }
+     else version (Solaris)
+     {
+         if (t.m_addr != pthread_self())
+         {
+             if (thr_suspend(t.m_addr) != 0)
+             {
+                 if (!t.isRunning)
+                 {
+                     Thread.remove(t);
+                     return false;
+                 }
+                 onThreadError("Unable to suspend thread");
+             }
+ 
+             static int getLwpStatus(ulong lwpid, out lwpstatus_t status)
+             {
+                 import core.sys.posix.fcntl : open, O_RDONLY;
+                 import core.sys.posix.unistd : pread, close;
+                 import core.internal.string : unsignedToTempString;
+ 
+                 char[100] path = void;
+                 auto pslice = path[0 .. $];
+                 immutable n = unsignedToTempString(lwpid);
+                 immutable ndigits = n.length;
+ 
+                 // Construct path "/proc/self/lwp/%u/lwpstatus"
+                 pslice[0 .. 15] = "/proc/self/lwp/";
+                 pslice = pslice[15 .. $];
+                 pslice[0 .. ndigits] = n[];
+                 pslice = pslice[ndigits .. $];
+                 pslice[0 .. 10] = "/lwpstatus";
+                 pslice[10] = '\0';
+ 
+                 // Read in lwpstatus data
+                 int fd = open(path.ptr, O_RDONLY, 0);
+                 if (fd >= 0)
+                 {
+                     while (pread(fd, &status, status.sizeof, 0) == status.sizeof)
+                     {
+                         // Should only attempt to read the thread state once it
+                         // has been stopped by thr_suspend
+                         if (status.pr_flags & PR_STOPPED)
+                         {
+                             close(fd);
+                             return 0;
+                         }
+                         // Give it a chance to stop
+                         thread_yield();
+                     }
+                     close(fd);
+                 }
+                 return -1;
+             }
+ 
+             lwpstatus_t status = void;
+             if (getLwpStatus(t.m_addr, status) != 0)
+                 onThreadError("Unable to load thread state");
+ 
+             version (X86)
+             {
+                 import core.sys.solaris.sys.regset; // REG_xxx
+ 
+                 if (!t.m_lock)
+                     t.m_curr.tstack = cast(void*) status.pr_reg[REG_ESP];
+                 // eax,ebx,ecx,edx,edi,esi,ebp,esp
+                 t.m_reg[0] = status.pr_reg[REG_EAX];
+                 t.m_reg[1] = status.pr_reg[REG_EBX];
+                 t.m_reg[2] = status.pr_reg[REG_ECX];
+                 t.m_reg[3] = status.pr_reg[REG_EDX];
+                 t.m_reg[4] = status.pr_reg[REG_EDI];
+                 t.m_reg[5] = status.pr_reg[REG_ESI];
+                 t.m_reg[6] = status.pr_reg[REG_EBP];
+                 t.m_reg[7] = status.pr_reg[REG_ESP];
+             }
+             else version (X86_64)
+             {
+                 import core.sys.solaris.sys.regset; // REG_xxx
+ 
+                 if (!t.m_lock)
+                     t.m_curr.tstack = cast(void*) status.pr_reg[REG_RSP];
+                 // rax,rbx,rcx,rdx,rdi,rsi,rbp,rsp
+                 t.m_reg[0] = status.pr_reg[REG_RAX];
+                 t.m_reg[1] = status.pr_reg[REG_RBX];
+                 t.m_reg[2] = status.pr_reg[REG_RCX];
+                 t.m_reg[3] = status.pr_reg[REG_RDX];
+                 t.m_reg[4] = status.pr_reg[REG_RDI];
+                 t.m_reg[5] = status.pr_reg[REG_RSI];
+                 t.m_reg[6] = status.pr_reg[REG_RBP];
+                 t.m_reg[7] = status.pr_reg[REG_RSP];
+                 // r8,r9,r10,r11,r12,r13,r14,r15
+                 t.m_reg[8] = status.pr_reg[REG_R8];
+                 t.m_reg[9] = status.pr_reg[REG_R9];
+                 t.m_reg[10] = status.pr_reg[REG_R10];
+                 t.m_reg[11] = status.pr_reg[REG_R11];
+                 t.m_reg[12] = status.pr_reg[REG_R12];
+                 t.m_reg[13] = status.pr_reg[REG_R13];
+                 t.m_reg[14] = status.pr_reg[REG_R14];
+                 t.m_reg[15] = status.pr_reg[REG_R15];
+             }
+             else version (SPARC)
+             {
+                 import core.sys.solaris.sys.procfs : R_SP, R_PC;
+ 
+                 if (!t.m_lock)
+                     t.m_curr.tstack = cast(void*) status.pr_reg[R_SP];
+                 // g0..g7, o0..o7, l0..l7, i0..i7
+                 t.m_reg[0 .. 32] = status.pr_reg[0 .. 32];
+                 // pc
+                 t.m_reg[32] = status.pr_reg[R_PC];
+             }
+             else version (SPARC64)
+             {
+                 import core.sys.solaris.sys.procfs : R_SP, R_PC;
+ 
+                 if (!t.m_lock)
+                 {
+                     // SPARC V9 has a stack bias of 2047 bytes which must be added to get
+                     // the actual data of the stack frame.
+                     auto tstack = status.pr_reg[R_SP] + 2047;
+                     assert(tstack % 16 == 0);
+                     t.m_curr.tstack = cast(void*) tstack;
+                 }
+                 // g0..g7, o0..o7, l0..l7, i0..i7
+                 t.m_reg[0 .. 32] = status.pr_reg[0 .. 32];
+                 // pc
+                 t.m_reg[32] = status.pr_reg[R_PC];
+             }
+             else
+             {
+                 static assert(false, "Architecture not supported.");
+             }
+         }
+         else if (!t.m_lock)
+         {
+             t.m_curr.tstack = getStackTop();
+         }
+     }
      else version (Posix)
      {
          if ( t.m_addr != pthread_self() )
*************** extern (C) void thread_suspendAll() noth
*** 1886,1891 ****
--- 2089,2096 ----
  
          version (Darwin)
          {}
+         else version (Solaris)
+         {}
          else version (Posix)
          {
              // Subtract own thread if we called suspend() on ourselves.
*************** private extern (D) void resume(ThreadBas
*** 1958,1963 ****
--- 2163,2184 ----
              t.m_curr.tstack = t.m_curr.bstack;
          t.m_reg[0 .. $] = 0;
      }
+     else version (Solaris)
+     {
+         if (t.m_addr != pthread_self() && thr_continue(t.m_addr) != 0)
+         {
+             if (!t.isRunning)
+             {
+                 Thread.remove(t);
+                 return;
+             }
+             onThreadError("Unable to resume thread");
+         }
+ 
+         if (!t.m_lock)
+             t.m_curr.tstack = t.m_curr.bstack;
+         t.m_reg[0 .. $] = 0;
+     }
      else version (Posix)
      {
          if ( t.m_addr != pthread_self() )
*************** extern (C) void thread_init() @nogc noth
*** 2018,2023 ****
--- 2239,2247 ----
         }
          pthread_atfork(null, null, &initChildAfterFork);
      }
+     else version (Solaris)
+     {
+     }
      else version (Posix)
      {
          version (OpenBSD)
*************** version (Windows)
*** 2127,2132 ****
--- 2351,2360 ----
  
              scope (exit)
              {
+                 // allow the GC to clean up any resources it allocated for this thread.
+                 import core.internal.gc.proxy : gc_getProxy;
+                 gc_getProxy().cleanupThread(obj);
+ 
                  Thread.remove(obj);
                  obj.destroyDataStorage();
              }
*************** version (Windows)
*** 2144,2150 ****
  
              void append( Throwable t )
              {
!                 obj.m_unhandled = Throwable.chainTogether(obj.m_unhandled, t);
              }
  
              version (D_InlineAsm_X86)
--- 2372,2380 ----
  
              void append( Throwable t )
              {
!                 obj.filterCaughtThrowable(t);
!                 if (t !is null)
!                     obj.m_unhandled = Throwable.chainTogether(obj.m_unhandled, t);
              }
  
              version (D_InlineAsm_X86)
*************** version (Windows)
*** 2188,2193 ****
--- 2418,2456 ----
  }
  else version (Posix)
  {
+     // NOTE: A thread's cancelability state, determined by pthread_setcancelstate,
+     //       can be enabled (the default for new threads) or disabled.
+     //       If a thread has disabled cancelation, then a cancelation request remains
+     //       queued until the thread enables cancelation.  If a thread has enabled
+     //       cancelation, then its cancelability type determines when cancelation occurs.
+     //
+     // Call these routines when entering/leaving critical sections of the code that
+     // are not cancellation points.
+ 
+     extern (C) int thread_cancelDisable() nothrow
+     {
+         static if (__traits(compiles, core.sys.posix.pthread.PTHREAD_CANCEL_DISABLE))
+         {
+             import core.sys.posix.pthread : pthread_setcancelstate, PTHREAD_CANCEL_DISABLE;
+             int oldstate;
+             pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &oldstate);
+             return oldstate;
+         }
+         else
+         {
+             return 0;   // No thread cancellation on platform
+         }
+     }
+ 
+     extern (C) void thread_cancelRestore(int oldstate) nothrow
+     {
+         static if (__traits(compiles, core.sys.posix.pthread.PTHREAD_CANCEL_DISABLE))
+         {
+             import core.sys.posix.pthread : pthread_setcancelstate;
+             pthread_setcancelstate(oldstate, null);
+         }
+     }
+ 
      private
      {
          //
*************** else version (Posix)
*** 2223,2228 ****
--- 2486,2495 ----
  
              scope (exit)
              {
+                 // allow the GC to clean up any resources it allocated for this thread.
+                 import core.internal.gc.proxy : gc_getProxy;
+                 gc_getProxy().cleanupThread(obj);
+ 
                  Thread.remove(obj);
                  atomicStore!(MemoryOrder.raw)(obj.m_isRunning, false);
                  obj.destroyDataStorage();
*************** else version (Posix)
*** 2278,2284 ****
  
              void append( Throwable t )
              {
!                 obj.m_unhandled = Throwable.chainTogether(obj.m_unhandled, t);
              }
              try
              {
--- 2545,2553 ----
  
              void append( Throwable t )
              {
!                 obj.filterCaughtThrowable(t);
!                 if (t !is null)
!                     obj.m_unhandled = Throwable.chainTogether(obj.m_unhandled, t);
              }
              try
              {
*************** else version (Posix)
*** 2368,2373 ****
--- 2637,2645 ----
          {
              void op(void* sp) nothrow
              {
+                 int cancel_state = thread_cancelDisable();
+                 scope(exit) thread_cancelRestore(cancel_state);
+ 
                  bool supported = thread_preSuspend(getStackTop());
                  assert(supported, "Tried to suspend a detached thread!");
  
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/thread/threadbase.d gcc-16-20260208/libphobos/libdruntime/core/thread/threadbase.d
*** gcc-16-20260201/libphobos/libdruntime/core/thread/threadbase.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/core/thread/threadbase.d	Sun Feb  8 22:32:16 2026
*************** class ThreadBase
*** 153,162 ****
  
      package void destroyDataStorage() nothrow @nogc
      {
-         // allow the GC to clean up any resources it allocated for this thread.
-         import core.internal.gc.proxy : gc_getProxy;
-         gc_getProxy().cleanupThread(this);
- 
          rt_tlsgc_destroy(m_tlsrtdata);
          m_tlsrtdata = null;
      }
--- 153,158 ----
*************** class ThreadBase
*** 191,196 ****
--- 187,211 ----
       */
      abstract Throwable join(bool rethrow = true);
  
+     /**
+      * Filter any exceptions that escaped the thread entry point.
+      * This enables a 'grave digger' approach to exceptions.
+      *
+      * By default this method will call the global handler in core.exception.
+      *
+      * Overriding this method allows a per-thread behavior.
+      *
+      * Params:
+      *         thrown = The thrown exception, may be null after returned.
+      */
+     void filterCaughtThrowable(ref Throwable thrown) @system nothrow
+     {
+         import core.exception : filterThreadThrowableHandler;
+         if (thrown is null)
+             return;
+         else if (auto handler = filterThreadThrowableHandler())
+             handler(thrown);
+     }
  
      ///////////////////////////////////////////////////////////////////////////
      // General Properties
*************** package(core.thread):
*** 526,531 ****
--- 541,553 ----
          return m_curr;
      }
  
+     /**
+      * Get an array of the current saved registers for this thread.
+      *
+      * Returns:
+      *  A slice of the array representing all saved registers or null.
+      */
+     public abstract void[] savedRegisters() nothrow @nogc;
  
  package(core.thread):
      ///////////////////////////////////////////////////////////////////////////
*************** package ThreadT thread_attachThis_tpl(Th
*** 846,851 ****
--- 868,878 ----
   * Deregisters the calling thread from use with the runtime.  If this routine
   * is called for a thread which is not registered, the result is undefined.
   *
+  * Once the thread is removed from the runtime, it must not use the GC because
+  * it does not participate in the Stop-The-World mechanisms. With the default
+  * GC, that has a global lock, this might not cause races, but in GCs with
+  * regional locks, it definitely can cause races.
+  *
   * NOTE: This routine does not run thread-local static destructors when called.
   *       If full functionality as a D thread is desired, the following function
   *       must be called before thread_detachThis, particularly if the thread is
*************** package ThreadT thread_attachThis_tpl(Th
*** 853,858 ****
--- 880,889 ----
   *
   *       $(D extern(C) void rt_moduleTlsDtor();)
   *
+  *       This also does not call the GC thread cleanup routine. After running
+  *       module dtors, it is recommended to call
+  *       $(D gc_getProxy().cleanupThread(Thread.getThis());)
+  *
   * See_Also:
   *     $(REF thread_attachThis, core,thread,osthread)
   */
*************** extern (C) void thread_detachThis() noth
*** 867,878 ****
   * Deregisters the given thread from use with the runtime.  If this routine
   * is called for a thread which is not registered, the result is undefined.
   *
   * NOTE: This routine does not run thread-local static destructors when called.
   *       If full functionality as a D thread is desired, the following function
!  *       must be called by the detached thread, particularly if the thread is
!  *       being detached at some indeterminate time before program termination:
   *
   *       $(D extern(C) void rt_moduleTlsDtor();)
   */
  extern (C) void thread_detachByAddr(ThreadID addr)
  {
--- 898,919 ----
   * Deregisters the given thread from use with the runtime.  If this routine
   * is called for a thread which is not registered, the result is undefined.
   *
+  * Once the thread is removed from the runtime, it must not use the GC because
+  * it does not participate in the Stop-The-World mechanisms. With the default
+  * GC, that has a global lock, this might not cause races, but in GCs with
+  * regional locks, it definitely can cause races.
+  *
   * NOTE: This routine does not run thread-local static destructors when called.
   *       If full functionality as a D thread is desired, the following function
!  *       must be called by the detached thread before calling this function,
!  *       particularly if the thread is being detached at some indeterminate
!  *       time before program termination:
   *
   *       $(D extern(C) void rt_moduleTlsDtor();)
+  *
+  *       This also does not call the GC thread cleanup routine. After running
+  *       module dtors, it is recommended to call (from the thread itself)
+  *       $(D gc_getProxy().cleanupThread(Thread.getThis());)
   */
  extern (C) void thread_detachByAddr(ThreadID addr)
  {
*************** private void scanAllTypeImpl(scope ScanA
*** 1135,1160 ****
  
      for (ThreadBase t = ThreadBase.sm_tbeg; t; t = t.next)
      {
!         version (Windows)
!         {
!             // Ideally, we'd pass ScanType.regs or something like that, but this
!             // would make portability annoying because it only makes sense on Windows.
!             scanWindowsOnly(scan, t);
!         }
  
          if (t.m_tlsrtdata !is null)
              rt_tlsgc_scan(t.m_tlsrtdata, (p1, p2) => scan(ScanType.tls, p1, p2));
      }
  }
  
- version (Windows)
- {
-     // Currently scanWindowsOnly can't be handled properly by externDFunc
-     // https://github.com/dlang/druntime/pull/3135#issuecomment-643673218
-     pragma(mangle, "_D4core6thread8osthread15scanWindowsOnlyFNbMDFNbEQBvQBt10threadbase8ScanTypePvQcZvCQDdQDbQBi10ThreadBaseZv")
-     private extern (D) void scanWindowsOnly(scope ScanAllThreadsTypeFn scan, ThreadBase) nothrow;
- }
- 
  /**
   * The main entry point for garbage collection.  The supplied delegate
   * will be passed ranges representing both stack and register values.
--- 1176,1189 ----
  
      for (ThreadBase t = ThreadBase.sm_tbeg; t; t = t.next)
      {
!         if (auto regs = t.savedRegisters())
!             scan(ScanType.stack, regs.ptr, regs.ptr + regs.length);
  
          if (t.m_tlsrtdata !is null)
              rt_tlsgc_scan(t.m_tlsrtdata, (p1, p2) => scan(ScanType.tls, p1, p2));
      }
  }
  
  /**
   * The main entry point for garbage collection.  The supplied delegate
   * will be passed ranges representing both stack and register values.
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/core/vararg.d gcc-16-20260208/libphobos/libdruntime/core/vararg.d
*** gcc-16-20260201/libphobos/libdruntime/core/vararg.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/core/vararg.d	Sun Feb  8 22:32:16 2026
*************** void va_arg()(ref va_list ap, TypeInfo t
*** 106,113 ****
      }
      else version (AAPCS64)
      {
!         static import core.internal.vararg.aarch64;
!         core.internal.vararg.aarch64.va_arg(ap, ti, parmn);
      }
      else version (ARM_Any)
      {
--- 106,113 ----
      }
      else version (AAPCS64)
      {
!         static import core.internal.vararg.aapcs64;
!         core.internal.vararg.aapcs64.va_arg(ap, ti, parmn);
      }
      else version (ARM_Any)
      {
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/object.d gcc-16-20260208/libphobos/libdruntime/object.d
*** gcc-16-20260201/libphobos/libdruntime/object.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/object.d	Sun Feb  8 22:32:16 2026
*************** inout(V) get(K, V)(inout(V[K])* aa, K ke
*** 3515,3525 ****
  ref V require(K, V)(ref V[K] aa, K key, lazy V value = V.init)
  {
      bool found;
!     auto p = _aaGetX(aa, key, found);
!     if (found)
!         return *p;
!     *p = value; // Not `return (*p = value)` since if `=` is overloaded
!     return *p;  // this might not return a ref to the left-hand side.
  }
  
  ///
--- 3515,3522 ----
  ref V require(K, V)(ref V[K] aa, K key, lazy V value = V.init)
  {
      bool found;
!     auto p = _aaGetX(aa, key, found, value);
!     return *p;
  }
  
  ///
*************** void update(K, V, C, U)(ref V[K] aa, K k
*** 3552,3561 ****
  if (is(typeof(create()) : V) && (is(typeof(update(aa[K.init])) : V) || is(typeof(update(aa[K.init])) == void)))
  {
      bool found;
!     auto p = _aaGetX(aa, key, found);
!     if (!found)
!         *p = create();
!     else
      {
          static if (is(typeof(update(*p)) == void))
              update(*p);
--- 3549,3556 ----
  if (is(typeof(create()) : V) && (is(typeof(update(aa[K.init])) : V) || is(typeof(update(aa[K.init])) == void)))
  {
      bool found;
!     auto p = _aaGetX(aa, key, found, create());
!     if (found)
      {
          static if (is(typeof(update(*p)) == void))
              update(*p);
*************** private size_t getArrayHash(const scope
*** 3827,3833 ****
      return hash;
  }
  
! /// Provide the .dup array property.
  @property auto dup(T)(T[] a)
      if (!is(const(T) : T))
  {
--- 3822,3828 ----
      return hash;
  }
  
! /// Provide the .dup array property, which creates a duplicate.
  @property auto dup(T)(T[] a)
      if (!is(const(T) : T))
  {
*************** private size_t getArrayHash(const scope
*** 3859,3865 ****
  }
  
  
! /// Provide the .idup array property.
  @property immutable(T)[] idup(T)(T[] a)
  {
      import core.internal.array.duplication : _dup;
--- 3854,3860 ----
  }
  
  
! /// Provide the .idup array property, which creates an immutable duplicate.
  @property immutable(T)[] idup(T)(T[] a)
  {
      import core.internal.array.duplication : _dup;
*************** version (D_ProfileGC)
*** 4685,4690 ****
--- 4680,4686 ----
      public import core.internal.array.concatenation : _d_arraycatnTXTrace;
      public import core.lifetime : _d_newitemTTrace;
      public import core.internal.array.construction : _d_newarrayTTrace;
+     public import core.internal.array.construction : _d_newarrayUTrace;
      public import core.internal.array.construction : _d_newarraymTXTrace;
      public import core.internal.array.capacity: _d_arraysetlengthTTrace;
      public import core.internal.array.construction : _d_arrayliteralTXTrace;
*************** public import core.internal.array.concat
*** 4697,4702 ****
--- 4693,4699 ----
  public import core.internal.array.construction : _d_arrayctor;
  public import core.internal.array.construction : _d_arraysetctor;
  public import core.internal.array.construction : _d_newarrayT;
+ public import core.internal.array.construction : _d_newarrayU;
  public import core.internal.array.construction : _d_newarraymTX;
  public import core.internal.array.construction : _d_arrayliteralTX;
  public import core.internal.array.arrayassign : _d_arrayassign_l;
diff -Nrcpad gcc-16-20260201/libphobos/libdruntime/rt/util/typeinfo.d gcc-16-20260208/libphobos/libdruntime/rt/util/typeinfo.d
*** gcc-16-20260201/libphobos/libdruntime/rt/util/typeinfo.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/libdruntime/rt/util/typeinfo.d	Sun Feb  8 22:32:16 2026
*************** pragma(inline, true)
*** 39,47 ****
  private int cmp3(T)(const T f1, const T f2)
  if (isComplex!T)
  {
!     if (int result = cmp3(f1.re, f2.re))
!         return result;
!     return cmp3(f1.im, f2.im);
  }
  
  unittest
--- 39,46 ----
  private int cmp3(T)(const T f1, const T f2)
  if (isComplex!T)
  {
!     int result;
!     return (result = cmp3(f1.re, f2.re)) != 0 ? result : cmp3(f1.im, f2.im);
  }
  
  unittest
diff -Nrcpad gcc-16-20260201/libphobos/src/MERGE gcc-16-20260208/libphobos/src/MERGE
*** gcc-16-20260201/libphobos/src/MERGE	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/src/MERGE	Sun Feb  8 22:32:16 2026
***************
*** 1,4 ****
! f87979028bd0e0f3e67dbf5b0cd1335ca3f7ed67
  
  The first line of this file holds the git revision number of the last
  merge done from the dlang/phobos repository.
--- 1,4 ----
! f7249cf45c476a8b31ef89e1793c2768da0fdc27
  
  The first line of this file holds the git revision number of the last
  merge done from the dlang/phobos repository.
diff -Nrcpad gcc-16-20260201/libphobos/src/std/algorithm/comparison.d gcc-16-20260208/libphobos/src/std/algorithm/comparison.d
*** gcc-16-20260201/libphobos/src/std/algorithm/comparison.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/src/std/algorithm/comparison.d	Sun Feb  8 22:32:16 2026
*************** Returns:
*** 82,89 ****
      found value plus one is returned.
  
  See_Also:
! $(REF_ALTTEXT find, find, std,algorithm,searching) and $(REF_ALTTEXT canFind, canFind, std,algorithm,searching) for finding a value in a
! range.
  */
  uint among(alias pred = (a, b) => a == b, Value, Values...)
      (Value value, Values values)
--- 82,93 ----
      found value plus one is returned.
  
  See_Also:
!     $(UL
!     $(LI $(REF_SHORT find, std,algorithm,searching) and
!     $(REF_SHORT canFind, std,algorithm,searching) for finding a value in a range.)
!     $(LI $(REF_ALTTEXT `value in iota(start, end)`, iota, std,range) to find a value in
!     a particular interval.)
!     )
  */
  uint among(alias pred = (a, b) => a == b, Value, Values...)
      (Value value, Values values)
*************** private template indexOfFirstOvershadowi
*** 211,241 ****
  }
  
  /**
! Executes and returns one of a collection of handlers based on the type of the
! switch object.
! 
! The first choice that `switchObject` can be casted to the type
! of argument it accepts will be called with `switchObject` casted to that
! type, and the value it'll return will be returned by `castSwitch`.
  
! If a choice's return type is void, the choice must throw an exception, unless
! all the choices are void. In that case, castSwitch itself will return void.
  
! Throws: If none of the choice matches, a `SwitchError` will be thrown.  $(D
! SwitchError) will also be thrown if not all the choices are void and a void
! choice was executed without throwing anything.
  
  Params:
!     choices = The `choices` needs to be composed of function or delegate
!         handlers that accept one argument. There can also be a choice that
!         accepts zero arguments. That choice will be invoked if the $(D
          switchObject) is null.
      switchObject = the object against which the tests are being made.
  
  Returns:
!     The value of the selected choice.
! 
! Note: `castSwitch` can only be used with object types.
  */
  auto castSwitch(choices...)(Object switchObject)
  {
--- 215,246 ----
  }
  
  /**
! Executes one of a series of handlers based on the dynamic type of a class instance.
  
! $(P
! `switchObject`'s dynamic type is checked for compatibility with the argument type of each
! choice in turn until a match is found. When there's a match, the choice will be called with
! `switchObject` cast to that type. If the choice returns a value, `castSwitch` will return it.
! )
! - If one choice's return type is void and one can return a value, `SwitchError`
!   will be thrown if the void handler was matched and completed execution without throwing.
! - A void handler is allowed to return when all the choices' return types convert to void -
!   in that case, `castSwitch` itself will return void.
! - A choice's return type can be `noreturn` (e.g. when a handler always throws an exception).
  
! Throws: If none of the choices match, a `SwitchError` will be thrown.  $(D
! SwitchError) will also be thrown if one choice can return a value but a void
! choice was matched and completed execution.
  
  Params:
!     choices = A sequence of function and/or delegate
!         handlers that each accept one argument. There can also be one choice that
!         accepts zero arguments, which will be invoked if the $(D
          switchObject) is null.
      switchObject = the object against which the tests are being made.
  
  Returns:
!     The return value of the selected choice.
  */
  auto castSwitch(choices...)(Object switchObject)
  {
*************** auto castSwitch(choices...)(Object switc
*** 269,275 ****
              {
                  alias CastClass = choiceParameterTypes[0];
                  static assert(is(CastClass == class) || is(CastClass == interface),
!                         "A choice handler can have only class or interface typed argument.");
  
                  // Check for overshadowing:
                  immutable indexOfOvershadowingChoice =
--- 274,280 ----
              {
                  alias CastClass = choiceParameterTypes[0];
                  static assert(is(CastClass == class) || is(CastClass == interface),
!                         "A choice handler can only have a class or interface argument type.");
  
                  // Check for overshadowing:
                  immutable indexOfOvershadowingChoice =
*************** auto castSwitch(choices...)(Object switc
*** 380,387 ****
      class A
      {
          int a;
!         this(int a) {this.a = a;}
!         @property int i() { return a; }
      }
      interface I { }
      class B : I { }
--- 385,391 ----
      class A
      {
          int a;
!         this(int a) { this.a = a; }
      }
      interface I { }
      class B : I { }
*************** auto castSwitch(choices...)(Object switc
*** 402,423 ****
      assert(results[2] == "null reference");
  }
  
! /// Using with void handlers:
  @system unittest
  {
      import std.exception : assertThrown;
  
      class A { }
      class B { }
!     // Void handlers are allowed if they throw:
      assertThrown!Exception(
!         new B().castSwitch!(
              (A a) => 1,
!             (B d)    { throw new Exception("B is not allowed!"); }
          )()
      );
  
!     // Void handlers are also allowed if all the handlers are void:
      new A().castSwitch!(
          (A a) { },
          (B b) { assert(false); },
--- 406,438 ----
      assert(results[2] == "null reference");
  }
  
! /// Using with noreturn/void handlers:
  @system unittest
  {
+     import core.exception : SwitchError;
      import std.exception : assertThrown;
  
      class A { }
      class B { }
! 
!     // B's handler never returns, so `i` does not need a value
!     int i;
      assertThrown!Exception(
!         i = new B().castSwitch!(
              (A a) => 1,
!             (B b) { throw new Exception("B is not allowed!"); }
          )()
      );
  
!     // Void handler call will throw if another handler returns a value
!     assertThrown!SwitchError(
!         i = new B().castSwitch!(
!             (A a) => 1,
!             (B b) {}
!         )()
!     );
! 
!     // Void handlers are allowed if all the handlers convert to void:
      new A().castSwitch!(
          (A a) { },
          (B b) { assert(false); },
diff -Nrcpad gcc-16-20260201/libphobos/src/std/algorithm/iteration.d gcc-16-20260208/libphobos/src/std/algorithm/iteration.d
*** gcc-16-20260201/libphobos/src/std/algorithm/iteration.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/src/std/algorithm/iteration.d	Sun Feb  8 22:32:16 2026
*************** if (fun.length >= 1)
*** 659,665 ****
          foreach (f; _funs)
          {
              static assert(!is(typeof(f(RE.init)) == void),
!                     "Mapping function(s) must not return void: " ~ _funs.stringof);
          }
  
          return MapResult!(_fun, Range)(r);
--- 659,666 ----
          foreach (f; _funs)
          {
              static assert(!is(typeof(f(RE.init)) == void),
!                     "Mapping function(s) must not return void. " ~
!                     " Consider using `each` instead of `map!(" ~ _funs.stringof ~ ")`");
          }
  
          return MapResult!(_fun, Range)(r);
*************** auto splitter(alias pred = "a == b",
*** 5547,5553 ****
                Range,
                Separator)(Range r, Separator s)
  if (is(typeof(binaryFun!pred(r.front, s)) : bool)
!         && ((hasSlicing!Range && hasLength!Range) || isNarrowString!Range))
  {
      import std.algorithm.searching : find;
      import std.conv : unsigned;
--- 5548,5557 ----
                Range,
                Separator)(Range r, Separator s)
  if (is(typeof(binaryFun!pred(r.front, s)) : bool)
!         && ((hasSlicing!Range && hasLength!Range) || isNarrowString!Range)
!         && (is(ElementType!Range : Separator)
!         || !(isForwardRange!Separator && (hasLength!Separator
!         || isNarrowString!Separator))))
  {
      import std.algorithm.searching : find;
      import std.conv : unsigned;
*************** if (is(typeof(binaryFun!pred(r.front, s)
*** 5619,5624 ****
--- 5623,5629 ----
              assert(!empty, "Attempting to fetch the front of an empty splitter.");
              static if (keepSeparators)
              {
+                 if (_frontLength != _unComputed && !_wasSeparator) return _input[0 .. _frontLength];
                  if (!_wasSeparator)
                  {
                      _frontLength = _separatorLength;
*************** if (is(typeof(binaryFun!pred(r.front, s)
*** 6078,6083 ****
--- 6083,6102 ----
      assert("abXcdxef".splitter!((a, b) => a.toLower == b)('x').equal(["ab", "cd", "ef"]));
  }
  
+ // https://github.com/dlang/phobos/issues/10759
+ @safe unittest
+ {
+     import std.algorithm.iteration : splitter;
+     import std.algorithm.searching : canFind;
+     import std.range.primitives;
+     import std.typecons : Yes;
+ 
+     auto range = "16x13+0-2".splitter!((a, b) => "x+-".canFind(a), Yes.keepSeparators)(0);
+     assert(range.front == "16");
+     assert(range.front == "16");
+     assert(range.front == "16");
+ }
+ 
  /// ditto
  auto splitter(alias pred = "a == b",
                Flag!"keepSeparators" keepSeparators = No.keepSeparators,
*************** if (is(typeof(binaryFun!pred(r.front, s.
*** 6091,6097 ****
      import std.algorithm.searching : find;
      import std.conv : unsigned;
  
!     static struct Result
      {
      private:
          Range _input;
--- 6110,6116 ----
      import std.algorithm.searching : find;
      import std.conv : unsigned;
  
!     struct Result
      {
      private:
          Range _input;
*************** if (is(typeof(binaryFun!pred(r.front, s.
*** 6306,6311 ****
--- 6325,6341 ----
      assert(words.equal([ "i", "am", "pointing" ]));
  }
  
+ // https://github.com/dlang/phobos/issues/10760
+ @safe unittest
+ {
+     import std.algorithm.searching : canFind;
+     import std.typecons : Yes;
+     import std.algorithm.comparison : equal;
+ 
+     auto r = "16x16+0-2".splitter!((a, b) => "x+-".canFind(a), Yes.keepSeparators)("x");
+     assert(r.equal(["16", "x", "16", "+", "0", "-", "2"]));
+ }
+ 
  /++
  Lazily splits a range `r` whenever a predicate `isTerminator` returns true for an element.
  
diff -Nrcpad gcc-16-20260201/libphobos/src/std/algorithm/setops.d gcc-16-20260208/libphobos/src/std/algorithm/setops.d
*** gcc-16-20260201/libphobos/src/std/algorithm/setops.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/src/std/algorithm/setops.d	Sun Feb  8 22:32:16 2026
*************** $(T2 multiwayMerge,
*** 26,37 ****
  $(T2 multiwayUnion,
          Computes the union of a range of sorted ranges.)
  $(T2 setDifference,
!         Lazily computes the set difference of two or more sorted ranges.)
  $(T2 setIntersection,
          Lazily computes the intersection of two or more sorted ranges.)
  $(T2 setSymmetricDifference,
!         Lazily computes the symmetric set difference of two or more sorted
!         ranges.)
  )
  
  Copyright: Andrei Alexandrescu 2008-.
--- 26,36 ----
  $(T2 multiwayUnion,
          Computes the union of a range of sorted ranges.)
  $(T2 setDifference,
!         Lazily computes the set difference of two sorted ranges.)
  $(T2 setIntersection,
          Lazily computes the intersection of two or more sorted ranges.)
  $(T2 setSymmetricDifference,
!         Lazily computes the symmetric set difference of two sorted ranges.)
  )
  
  Copyright: Andrei Alexandrescu 2008-.
diff -Nrcpad gcc-16-20260201/libphobos/src/std/array.d gcc-16-20260208/libphobos/src/std/array.d
*** gcc-16-20260201/libphobos/src/std/array.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/src/std/array.d	Sun Feb  8 22:32:16 2026
*************** $(TR $(TH Function Name) $(TH Descriptio
*** 16,22 ****
          $(TD Returns a new $(LREF Appender) or $(LREF RefAppender) initialized with a given array.
      ))
      $(TR $(TD $(LREF assocArray))
!         $(TD Returns a newly allocated associative array from a range of key/value tuples.
      ))
      $(TR $(TD $(LREF byPair))
          $(TD Construct a range iterating over an associative array by key/value tuples.
--- 16,22 ----
          $(TD Returns a new $(LREF Appender) or $(LREF RefAppender) initialized with a given array.
      ))
      $(TR $(TD $(LREF assocArray))
!         $(TD Returns a newly allocated associative array from a range/ranges of keys and values.
      ))
      $(TR $(TD $(LREF byPair))
          $(TD Construct a range iterating over an associative array by key/value tuples.
*************** if (isAutodecodableString!String)
*** 562,590 ****
  }
  
  /**
! Returns a newly allocated associative array from a range of key/value tuples
! or from a range of keys and a range of values.
  
  Params:
      r = An $(REF_ALTTEXT input range, isInputRange, std,range,primitives)
!     of tuples of keys and values.
!     keys = An $(REF_ALTTEXT input range, isInputRange, std,range,primitives) of keys
!     values = An $(REF_ALTTEXT input range, isInputRange, std,range,primitives) of values
! 
! Returns:
  
!     A newly allocated associative array out of elements of the input
!     range, which must be a range of tuples (Key, Value) or
!     a range of keys and a range of values. If given two ranges of unequal
!     lengths after the elements of the shorter are exhausted the remaining
!     elements of the longer will not be considered.
!     Returns a null associative array reference when given an empty range.
!     Duplicates: Associative arrays have unique keys. If r contains duplicate keys,
!     then the result will contain the value of the last pair for that key in r.
  
! See_Also: $(REF Tuple, std,typecons), $(REF zip, std,range)
   */
- 
  auto assocArray(Range)(Range r)
  if (isInputRange!Range)
  {
--- 562,580 ----
  }
  
  /**
! Creates an associative array from a range of key/value tuples.
  
  Params:
      r = An $(REF_ALTTEXT input range, isInputRange, std,range,primitives)
!     of $(REF_SHORT Tuple, std,typecons)`!(Key, Value)`.
  
! Duplicates: Associative arrays have unique keys. For any duplicate key in `r`,
! the result will contain the corresponding value from the last occurrence of that key in `r`.
  
! Returns:
!     A newly allocated associative array, or a null associative array reference when
!     given an empty range. The type is `Value[Key]`.
   */
  auto assocArray(Range)(Range r)
  if (isInputRange!Range)
  {
*************** if (isInputRange!Range)
*** 604,610 ****
      return aa;
  }
  
! /// ditto
  auto assocArray(Keys, Values)(Keys keys, Values values)
  if (isInputRange!Values && isInputRange!Keys)
  {
--- 594,627 ----
      return aa;
  }
  
! ///
! @safe pure nothrow unittest
! {
!     import std.typecons : tuple;
! 
!     auto b = assocArray([ tuple("foo", "bar"), tuple("baz", "quux") ]);
!     static assert(is(typeof(b) == string[string]));
!     assert(b == ["foo":"bar", "baz":"quux"]);
! }
! 
! /**
! Creates an associative array from a range of keys and a range of values.
! 
! If given two ranges of unequal lengths after the elements of the shorter are exhausted,
! the remaining elements of the longer will not be considered.
! 
! Params:
!     keys = An $(REF_ALTTEXT input range, isInputRange, std,range,primitives) of keys
!     values = An $(REF_ALTTEXT input range, isInputRange, std,range,primitives) of values
! 
! Duplicates: Associative arrays have unique keys. For any key with duplicates in `keys`,
! the result will have the corresponding value for the last occurrence of
! that key in `keys`.
! 
! Returns:
!     A newly allocated associative array, or a null associative array reference when
!     given empty ranges.
!  */
  auto assocArray(Keys, Values)(Keys keys, Values values)
  if (isInputRange!Values && isInputRange!Keys)
  {
*************** if (isInputRange!Values && isInputRange!
*** 682,704 ****
  }
  
  ///
! @safe pure /*nothrow*/ unittest
  {
-     import std.range : repeat, zip;
-     import std.typecons : tuple;
      import std.range.primitives : autodecodeStrings;
!     auto a = assocArray(zip([0, 1, 2], ["a", "b", "c"])); // aka zipMap
!     static assert(is(typeof(a) == string[int]));
!     assert(a == [0:"a", 1:"b", 2:"c"]);
! 
!     auto b = assocArray([ tuple("foo", "bar"), tuple("baz", "quux") ]);
!     static assert(is(typeof(b) == string[string]));
!     assert(b == ["foo":"bar", "baz":"quux"]);
  
      static if (autodecodeStrings)
          alias achar = dchar;
      else
          alias achar = immutable(char);
      auto c = assocArray("ABCD", true.repeat);
      static assert(is(typeof(c) == bool[achar]));
      bool[achar] expected = ['D':true, 'A':true, 'B':true, 'C':true];
--- 699,714 ----
  }
  
  ///
! @safe pure nothrow unittest
  {
      import std.range.primitives : autodecodeStrings;
!     import std.range : repeat;
  
      static if (autodecodeStrings)
          alias achar = dchar;
      else
          alias achar = immutable(char);
+ 
      auto c = assocArray("ABCD", true.repeat);
      static assert(is(typeof(c) == bool[achar]));
      bool[achar] expected = ['D':true, 'A':true, 'B':true, 'C':true];
diff -Nrcpad gcc-16-20260201/libphobos/src/std/ascii.d gcc-16-20260208/libphobos/src/std/ascii.d
*** gcc-16-20260201/libphobos/src/std/ascii.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/src/std/ascii.d	Sun Feb  8 22:32:16 2026
*************** else
*** 186,191 ****
--- 186,192 ----
      Params: c = The character to test.
      Returns: Whether `c` is a letter or a number (0 .. 9, a .. z, A .. Z).
    +/
+ pragma(inline, true)
  bool isAlphaNum(dchar c) @safe pure nothrow @nogc
  {
      const hc = c | 0x20;
*************** bool isAlphaNum(dchar c) @safe pure noth
*** 218,223 ****
--- 219,225 ----
      Params: c = The character to test.
      Returns: Whether `c` is an ASCII letter (A .. Z, a .. z).
    +/
+ pragma(inline, true)
  bool isAlpha(dchar c) @safe pure nothrow @nogc
  {
      // Optimizer can turn this into a bitmask operation on 64 bit code
*************** bool isAlpha(dchar c) @safe pure nothrow
*** 250,255 ****
--- 252,258 ----
      Params: c = The character to test.
      Returns: Whether `c` is a lowercase ASCII letter (a .. z).
    +/
+ pragma(inline, true)
  bool isLower(dchar c) @safe pure nothrow @nogc
  {
      return c >= 'a' && c <= 'z';
*************** bool isLower(dchar c) @safe pure nothrow
*** 282,287 ****
--- 285,291 ----
      Params: c = The character to test.
      Returns: Whether `c` is an uppercase ASCII letter (A .. Z).
    +/
+ pragma(inline, true)
  bool isUpper(dchar c) @safe pure nothrow @nogc
  {
      return c <= 'Z' && 'A' <= c;
*************** bool isUpper(dchar c) @safe pure nothrow
*** 314,319 ****
--- 318,324 ----
      Params: c = The character to test.
      Returns: Whether `c` is a digit (0 .. 9).
    +/
+ pragma(inline, true)
  bool isDigit(dchar c) @safe pure nothrow @nogc
  {
      return '0' <= c && c <= '9';
*************** bool isDigit(dchar c) @safe pure nothrow
*** 347,352 ****
--- 352,358 ----
      Params: c = The character to test.
      Returns: Whether `c` is a digit in base 8 (0 .. 7).
    +/
+ pragma(inline, true)
  bool isOctalDigit(dchar c) @safe pure nothrow @nogc
  {
      return c >= '0' && c <= '7';
*************** bool isOctalDigit(dchar c) @safe pure no
*** 377,382 ****
--- 383,389 ----
      Params: c = The character to test.
      Returns: Whether `c` is a digit in base 16 (0 .. 9, A .. F, a .. f).
    +/
+ pragma(inline, true)
  bool isHexDigit(dchar c) @safe pure nothrow @nogc
  {
      const hc = c | 0x20;
*************** bool isHexDigit(dchar c) @safe pure noth
*** 411,416 ****
--- 418,424 ----
      space, tab, vertical tab, form feed, carriage return, and linefeed
      characters.
    +/
+ pragma(inline, true)
  bool isWhite(dchar c) @safe pure nothrow @nogc
  {
      return c == ' ' || (c >= 0x09 && c <= 0x0D);
*************** bool isWhite(dchar c) @safe pure nothrow
*** 447,452 ****
--- 455,461 ----
      Params: c = The character to test.
      Returns: Whether `c` is a control character.
    +/
+ pragma(inline, true)
  bool isControl(dchar c) @safe pure nothrow @nogc
  {
      return c < 0x20 || c == 0x7F;
*************** bool isControl(dchar c) @safe pure nothr
*** 487,492 ****
--- 496,502 ----
      all ASCII characters which are not control characters, letters, digits, or
      whitespace.
    +/
+ pragma(inline, true)
  bool isPunctuation(dchar c) @safe pure nothrow @nogc
  {
      return c <= '~' && c >= '!' && !isAlphaNum(c);
*************** bool isPunctuation(dchar c) @safe pure n
*** 531,536 ****
--- 541,547 ----
      Returns: Whether or not `c` is a printable character other than the
      space character.
    +/
+ pragma(inline, true)
  bool isGraphical(dchar c) @safe pure nothrow @nogc
  {
      return '!' <= c && c <= '~';
*************** bool isGraphical(dchar c) @safe pure not
*** 567,572 ****
--- 578,584 ----
      Returns: Whether or not `c` is a printable character - including the
      space character.
    +/
+ pragma(inline, true)
  bool isPrintable(dchar c) @safe pure nothrow @nogc
  {
      return c >= ' ' && c <= '~';
diff -Nrcpad gcc-16-20260201/libphobos/src/std/concurrency.d gcc-16-20260208/libphobos/src/std/concurrency.d
*** gcc-16-20260201/libphobos/src/std/concurrency.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/src/std/concurrency.d	Sun Feb  8 22:32:16 2026
***************
*** 4,9 ****
--- 4,10 ----
   * $(BOOKTABLE,
   * $(TR $(TH Category) $(TH Symbols))
   * $(TR $(TD Tid) $(TD
+  *     $(MYREF join)
   *     $(MYREF locate)
   *     $(MYREF ownerTid)
   *     $(MYREF register)
*************** if (isSpawnable!(F, T))
*** 622,627 ****
--- 623,629 ----
      else
      {
          auto t = new Thread(&exec);
+         spawnTid.mbox.m_thread = t;
          t.start();
      }
      thisInfo.links[spawnTid] = linked;
*************** Tid locate(string name)
*** 1198,1203 ****
--- 1200,1265 ----
  }
  
  /**
+  * Waits for the thread associated with `tid` to complete.
+  *
+  * This function blocks until the thread represented by `tid` finishes executing
+  * and then releases all OS resources associated with it (thread stack, thread-local
+  * storage, etc.). This is essential for preventing resource leaks in long-running
+  * applications that create many short-lived threads.
+  *
+  * For threads created by $(LREF spawn), this function must be called to properly
+  * free OS resources. Without calling `join`, thread stacks (~8 MB each on typical
+  * systems) will accumulate in virtual memory for the lifetime of the process.
+  *
+  * Params:
+  *  tid = The $(LREF Tid) of the thread to join.
+  *
+  * Throws:
+  *  $(REF ThreadError, core,thread,osthread) if the thread has already been joined
+  *  or if the thread was created by a custom $(LREF Scheduler).
+  *
+  * Example:
+  * ---
+  * auto tid = spawn(&someFunction);
+  * // ... do other work ...
+  * join(tid); // Wait for thread to complete and free resources
+  * ---
+  *
+  * Note:
+  *  It is an error to call `join` on the same `Tid` more than once.
+  *  The function will throw if the thread was created by a $(LREF Scheduler)
+  *  rather than directly as a system thread.
+  */
+ void join(Tid tid)
+ {
+     import core.thread.threadbase : ThreadError;
+ 
+     if (tid.mbox is null)
+         throw new ThreadError("Cannot join Tid with null MessageBox");
+ 
+     if (tid.mbox.m_thread is null)
+         throw new ThreadError("Cannot join Tid created by a Scheduler");
+ 
+     tid.mbox.m_thread.join();
+ }
+ 
+ ///
+ @system unittest
+ {
+     import core.time : msecs;
+     import core.thread : Thread;
+ 
+     auto tid = spawn((int x) {
+         Thread.sleep(10.msecs);
+         ownerTid.send(x * 2);
+     }, 21);
+ 
+     join(tid); // Wait for thread to finish
+     auto result = receiveOnly!int();
+     assert(result == 42);
+ }
+ 
+ /**
   * Encapsulates all implementation-level data needed for scheduling.
   *
   * When defining a $(LREF Scheduler), an instance of this struct must be associated
*************** private
*** 2426,2431 ****
--- 2488,2494 ----
          size_t m_localMsgs;
          size_t m_maxMsgs;
          bool m_closed;
+         package Thread m_thread; // For join(Tid)
      }
  
      /*
diff -Nrcpad gcc-16-20260201/libphobos/src/std/container/package.d gcc-16-20260208/libphobos/src/std/container/package.d
*** gcc-16-20260201/libphobos/src/std/container/package.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/src/std/container/package.d	Sun Feb  8 22:32:16 2026
***************
*** 3,14 ****
  /**
  This module defines generic containers.
  
! Construction:
  
! To implement the different containers both struct and class based
  approaches have been used. $(REF make, std,container,util) allows for
  uniform construction with either approach.
  
  ---
  import std.container;
  // Construct a red-black tree and an array both containing the values 1, 2, 3.
--- 3,15 ----
  /**
  This module defines generic containers.
  
! $(H3 $(LNAME2 construction, Construction))
  
! To implement the different containers, both struct and class based
  approaches have been used. $(REF make, std,container,util) allows for
  uniform construction with either approach.
  
+ $(RUNNABLE_EXAMPLE
  ---
  import std.container;
  // Construct a red-black tree and an array both containing the values 1, 2, 3.
*************** import std.container;
*** 16,42 ****
  RedBlackTree!int rbTree = new RedBlackTree!int(1, 2, 3);
  // But `new` should not be used with Array
  Array!int array = Array!int(1, 2, 3);
  // `make` hides the differences
  RedBlackTree!int rbTree2 = make!(RedBlackTree!int)(1, 2, 3);
  Array!int array2 = make!(Array!int)(1, 2, 3);
  ---
  
  Note that `make` can infer the element type from the given arguments.
  
  ---
  import std.container;
  auto rbTree = make!RedBlackTree(1, 2, 3); // RedBlackTree!int
  auto array = make!Array("1", "2", "3"); // Array!string
  ---
  
! Reference_semantics:
  
  All containers have reference semantics, which means that after
  assignment both variables refer to the same underlying data.
  
  To make a copy of a container, use the `c.dup` container primitive.
  ---
! import std.container, std.range;
  Array!int originalArray = make!(Array!int)(1, 2, 3);
  Array!int secondArray = originalArray;
  assert(equal(originalArray[], secondArray[]));
--- 17,52 ----
  RedBlackTree!int rbTree = new RedBlackTree!int(1, 2, 3);
  // But `new` should not be used with Array
  Array!int array = Array!int(1, 2, 3);
+ 
  // `make` hides the differences
  RedBlackTree!int rbTree2 = make!(RedBlackTree!int)(1, 2, 3);
  Array!int array2 = make!(Array!int)(1, 2, 3);
+ 
+ assert(rbTree == rbTree2);
+ assert(array == array2);
  ---
+ )
  
  Note that `make` can infer the element type from the given arguments.
  
  ---
  import std.container;
+ 
  auto rbTree = make!RedBlackTree(1, 2, 3); // RedBlackTree!int
  auto array = make!Array("1", "2", "3"); // Array!string
  ---
  
! $(H3 $(LNAME2 reference-semantics, Reference Semantics))
  
  All containers have reference semantics, which means that after
  assignment both variables refer to the same underlying data.
  
  To make a copy of a container, use the `c.dup` container primitive.
+ 
+ $(RUNNABLE_EXAMPLE
  ---
! import std.algorithm, std.container, std.range;
! 
  Array!int originalArray = make!(Array!int)(1, 2, 3);
  Array!int secondArray = originalArray;
  assert(equal(originalArray[], secondArray[]));
*************** secondArray[0] = 1;
*** 51,56 ****
--- 61,67 ----
  // assert that originalArray has not been affected
  assert(originalArray[0] == 12);
  ---
+ )
  
  $(B Attention:) If the container is implemented as a class, using an
  uninitialized instance can cause a null pointer dereference.
*************** intializes itself upon use; however, up
*** 67,72 ****
--- 78,84 ----
  have an identity and assignment does not create two references to the same
  data.
  
+ $(RUNNABLE_EXAMPLE
  ---
  import std.container;
  
*************** array1 = array2;
*** 84,89 ****
--- 96,103 ----
  array1.removeBack();
  assert(array2.empty);
  ---
+ )
+ 
  It is therefore recommended to always construct containers using
  $(REF make, std,container,util).
  
*************** import std.container, std.range;
*** 97,103 ****
  auto arrOfArrs = make!Array(generate!(() => make!(Array!int)).take(10));
  ---
  
! Submodules:
  
  This module consists of the following submodules:
  
--- 111,117 ----
  auto arrOfArrs = make!Array(generate!(() => make!(Array!int)).take(10));
  ---
  
! $(H3 $(LNAME2 submodules, Submodules))
  
  This module consists of the following submodules:
  
*************** $(UL
*** 130,136 ****
      )
  )
  
! The_primary_range_of_a_container:
  
  While some containers offer direct access to their elements e.g. via
  `opIndex`, `c.front` or `c.back`, access
--- 144,150 ----
      )
  )
  
! $(H3 $(LNAME2 primary-range, The Primary Range of a Container))
  
  While some containers offer direct access to their elements e.g. via
  `opIndex`, `c.front` or `c.back`, access
*************** these parameters $(B must) be obtained f
*** 147,155 ****
  as the one being worked with. It is important to note that many generic range
  algorithms return the same range type as their input range.
  
  ---
  import std.algorithm.comparison : equal;
! import std.algorithm.iteration : find;
  import std.container;
  import std.range : take;
  
--- 161,170 ----
  as the one being worked with. It is important to note that many generic range
  algorithms return the same range type as their input range.
  
+ $(RUNNABLE_EXAMPLE
  ---
  import std.algorithm.comparison : equal;
! import std.algorithm.searching : find;
  import std.container;
  import std.range : take;
  
*************** array.linearRemove(array[].find(2).take(
*** 168,178 ****
--- 183,195 ----
  
  assert(array[].equal([1, 3]));
  ---
+ )
  
  When any $(MREF_ALTTEXT range, std, range) can be passed as an argument to
  a member function, the documention usually refers to the parameter's templated
  type as `Stuff`.
  
+ $(RUNNABLE_EXAMPLE
  ---
  import std.algorithm.comparison : equal;
  import std.container;
*************** array.insertBack(iota(3, 10));
*** 186,193 ****
  
  assert(array[].equal([1, 2, 3, 4, 5, 6, 7, 8, 9]));
  ---
  
! Container_primitives:
  
  Containers do not form a class hierarchy, instead they implement a
  common set of primitives (see table below). These primitives each guarantee
--- 203,211 ----
  
  assert(array[].equal([1, 2, 3, 4, 5, 6, 7, 8, 9]));
  ---
+ )
  
! $(H3 $(LNAME2 primitives, Container Primitives))
  
  Containers do not form a class hierarchy, instead they implement a
  common set of primitives (see table below). These primitives each guarantee
diff -Nrcpad gcc-16-20260201/libphobos/src/std/container/rbtree.d gcc-16-20260208/libphobos/src/std/container/rbtree.d
*** gcc-16-20260201/libphobos/src/std/container/rbtree.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/src/std/container/rbtree.d	Sun Feb  8 22:32:16 2026
*************** if (is(typeof((ref const T a) => binaryF
*** 1531,1543 ****
--- 1531,1548 ----
         Complexity: $(BIGOH m log(n)) (where m is the number of elements to remove)
  
         Example:
+ $(RUNNABLE_EXAMPLE
  --------------------
+ import std.algorithm, std.container;
+ 
  auto rbt = redBlackTree!true(0, 1, 1, 1, 4, 5, 7);
  rbt.removeKey(1, 4, 7);
  assert(equal(rbt[], [0, 1, 1, 5]));
+ 
  rbt.removeKey(1, 1, 0);
  assert(equal(rbt[], [5]));
  --------------------
+ )
        +/
      size_t removeKey(U...)(U elems)
      if (allSatisfy!(isImplicitlyConvertibleToElem, U))
diff -Nrcpad gcc-16-20260201/libphobos/src/std/container/slist.d gcc-16-20260208/libphobos/src/std/container/slist.d
*** gcc-16-20260201/libphobos/src/std/container/slist.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/src/std/container/slist.d	Sun Feb  8 22:32:16 2026
*************** Complexity: $(BIGOH k + m), where `k` is
*** 506,518 ****
  `r` and `m` is the length of `stuff`.
  
  Example:
  --------------------
  auto sl = SList!string(["a", "b", "d"]);
  sl.insertAfter(sl[], "e"); // insert at the end (slowest)
! assert(std.algorithm.equal(sl[], ["a", "b", "d", "e"]));
! sl.insertAfter(std.range.take(sl[], 2), "c"); // insert after "b"
! assert(std.algorithm.equal(sl[], ["a", "b", "c", "d", "e"]));
  --------------------
       */
  
      size_t insertAfter(Stuff)(Range r, Stuff stuff)
--- 506,523 ----
  `r` and `m` is the length of `stuff`.
  
  Example:
+ $(RUNNABLE_EXAMPLE
  --------------------
+ import std.algorithm, std.container, std.range;
+ 
  auto sl = SList!string(["a", "b", "d"]);
  sl.insertAfter(sl[], "e"); // insert at the end (slowest)
! assert(equal(sl[], ["a", "b", "d", "e"]));
! 
! sl.insertAfter(take(sl[], 2), "c"); // insert after "b"
! assert(equal(sl[], ["a", "b", "c", "d", "e"]));
  --------------------
+ )
       */
  
      size_t insertAfter(Stuff)(Range r, Stuff stuff)
diff -Nrcpad gcc-16-20260201/libphobos/src/std/conv.d gcc-16-20260208/libphobos/src/std/conv.d
*** gcc-16-20260201/libphobos/src/std/conv.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/src/std/conv.d	Sun Feb  8 22:32:16 2026
*************** if (!is(S : T) && isAssociativeArray!S &
*** 1866,1872 ****
              assert(convFails!(Floating, Integral, ConvOverflowException)(a));
          }
          // convert to the smallest integral value
!         a = 0.0 + Integral.min;
          static if (Integral.min < 0)
          {
              a = -a; // -Integral.min not representable as an Integral
--- 1866,1872 ----
              assert(convFails!(Floating, Integral, ConvOverflowException)(a));
          }
          // convert to the smallest integral value
!         a = 0.0L + Integral.min;
          static if (Integral.min < 0)
          {
              a = -a; // -Integral.min not representable as an Integral
*************** if (!is(S : T) && isAssociativeArray!S &
*** 1874,1886 ****
                      || Floating.sizeof <= Integral.sizeof
                      || floatTraits!Floating.realFormat == RealFormat.ieeeExtended53);
          }
!         a = 0.0 + Integral.min;
          assert(to!Integral(a) == Integral.min);
          --a; // no more representable as an Integral
          assert(convFails!(Floating, Integral, ConvOverflowException)(a)
                  || Floating.sizeof <= Integral.sizeof
                  || floatTraits!Floating.realFormat == RealFormat.ieeeExtended53);
!         a = 0.0 + Integral.max;
          assert(to!Integral(a) == Integral.max
                  || Floating.sizeof <= Integral.sizeof
                  || floatTraits!Floating.realFormat == RealFormat.ieeeExtended53);
--- 1874,1886 ----
                      || Floating.sizeof <= Integral.sizeof
                      || floatTraits!Floating.realFormat == RealFormat.ieeeExtended53);
          }
!         a = 0.0L + Integral.min;
          assert(to!Integral(a) == Integral.min);
          --a; // no more representable as an Integral
          assert(convFails!(Floating, Integral, ConvOverflowException)(a)
                  || Floating.sizeof <= Integral.sizeof
                  || floatTraits!Floating.realFormat == RealFormat.ieeeExtended53);
!         a = 0.0L + Integral.max;
          assert(to!Integral(a) == Integral.max
                  || Floating.sizeof <= Integral.sizeof
                  || floatTraits!Floating.realFormat == RealFormat.ieeeExtended53);
diff -Nrcpad gcc-16-20260201/libphobos/src/std/experimental/allocator/building_blocks/allocator_list.d gcc-16-20260208/libphobos/src/std/experimental/allocator/building_blocks/allocator_list.d
*** gcc-16-20260201/libphobos/src/std/experimental/allocator/building_blocks/allocator_list.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/src/std/experimental/allocator/building_blocks/allocator_list.d	Sun Feb  8 22:32:16 2026
*************** template SharedAllocatorList(alias facto
*** 1328,1333 ****
--- 1328,1337 ----
      assert(a.deallocateAll());
  }
  
+ //BUG: this test freezes spuriously on FreeBSD, see also https://github.com/dlang/phobos/issues/10730.
+ // The lock in a.allocate() below blocks in all remaining threads causing the join to never complete.
+ // This might also hint at problems in the spinlock implementation.
+ version (FreeBSD) {} else
  @system unittest
  {
      import std.experimental.allocator.mallocator : Mallocator;
diff -Nrcpad gcc-16-20260201/libphobos/src/std/format/internal/write.d gcc-16-20260208/libphobos/src/std/format/internal/write.d
*** gcc-16-20260201/libphobos/src/std/format/internal/write.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/src/std/format/internal/write.d	Sun Feb  8 22:32:16 2026
*************** if ((is(T == struct) || is(T == union))
*** 2546,2554 ****
              {
                  // ignore hidden context pointer
              }
!             else static if (0 < i && T.tupleof[i-1].offsetof == T.tupleof[i].offsetof)
              {
!                 static if (i == T.tupleof.length - 1 || T.tupleof[i].offsetof != T.tupleof[i+1].offsetof)
                  {
                      enum el = separator ~ __traits(identifier, T.tupleof[i]) ~ "}";
                      put(w, el);
--- 2546,2568 ----
              {
                  // ignore hidden context pointer
              }
!             /* https://github.com/dlang/phobos/issues/10840
!              * handle possible bitfields by doing overlap comparisons
!              * using bit counts rather than byte counts.
!              * However, the overlap
!              * check in general does not take into account staggered unions.
!              * This can be fixed using the correct algorithm implemented in
!              * the compiler function dmd.declaration.isOverlappedWith().
!              * For the moment we will not change to that because the `#(overlap ...)` output
!              * needs to be re-thought, as it was never correct.
!              */
!             else static if (0 < i &&
!                             T.tupleof[i-1].offsetof * 8 + __traits(getBitfieldOffset,T.tupleof[i-1]) ==
!                             T.tupleof[i  ].offsetof * 8 + __traits(getBitfieldOffset,T.tupleof[i  ]))
              {
!                 static if (i == T.tupleof.length - 1 ||
!                             T.tupleof[i  ].offsetof * 8 + __traits(getBitfieldOffset,T.tupleof[i  ]) !=
!                             T.tupleof[i+1].offsetof * 8 + __traits(getBitfieldOffset,T.tupleof[i+1]))
                  {
                      enum el = separator ~ __traits(identifier, T.tupleof[i]) ~ "}";
                      put(w, el);
*************** if ((is(T == struct) || is(T == union))
*** 2559,2565 ****
                      put(w, el);
                  }
              }
!             else static if (i+1 < T.tupleof.length && T.tupleof[i].offsetof == T.tupleof[i+1].offsetof)
              {
                  enum el = (i > 0 ? separator : "") ~ "#{overlap " ~ __traits(identifier, T.tupleof[i]);
                  put(w, el);
--- 2573,2581 ----
                      put(w, el);
                  }
              }
!             else static if (i+1 < T.tupleof.length &&
!                             T.tupleof[i  ].offsetof * 8 + __traits(getBitfieldOffset,T.tupleof[i  ]) ==
!                             T.tupleof[i+1].offsetof * 8 + __traits(getBitfieldOffset,T.tupleof[i+1]))
              {
                  enum el = (i > 0 ? separator : "") ~ "#{overlap " ~ __traits(identifier, T.tupleof[i]);
                  put(w, el);
*************** if (isDelegate!T)
*** 3095,3107 ****
      import std.format : formatValue;
  
      void func() @system { __gshared int x; ++x; throw new Exception("msg"); }
!     version (linux)
!     {
!         FormatSpec!char f;
!         auto w = appender!string();
!         formatValue(w, &func, f);
!         assert(w.data.length >= 15 && w.data[0 .. 15] == "void delegate()");
!     }
  }
  
  // string elements are formatted like UTF-8 string literals.
--- 3111,3120 ----
      import std.format : formatValue;
  
      void func() @system { __gshared int x; ++x; throw new Exception("msg"); }
!     FormatSpec!char f;
!     auto w = appender!string();
!     formatValue(w, &func, f);
!     assert(w.data.length >= 15 && w.data[0 .. 15] == "void delegate()");
  }
  
  // string elements are formatted like UTF-8 string literals.
diff -Nrcpad gcc-16-20260201/libphobos/src/std/internal/math/gammafunction.d gcc-16-20260208/libphobos/src/std/internal/math/gammafunction.d
*** gcc-16-20260201/libphobos/src/std/internal/math/gammafunction.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/src/std/internal/math/gammafunction.d	Sun Feb  8 22:32:16 2026
*************** real gamma(real x)
*** 422,427 ****
--- 422,434 ----
          4.59084371199880305320475827592915200343410999829340L) >= real.mant_dig-1);
  }
  
+ 
+ /* This is the lower bound on x for when the Stirling approximation can be used
+  * to compute ln(Γ(x)).
+  */
+ private enum real LN_GAMMA_STIRLING_LB = 13.0L;
+ 
+ 
  /*****************************************************
   * Natural logarithm of gamma function.
   *
*************** real logGamma(real x)
*** 480,486 ****
          return z;
      }
  
!     if ( x < 13.0L )
      {
          z = 1.0L;
          nx = floor( x +  0.5L );
--- 487,493 ----
          return z;
      }
  
!     if ( x < LN_GAMMA_STIRLING_LB )
      {
          z = 1.0L;
          nx = floor( x +  0.5L );
*************** real logGamma(real x)
*** 579,584 ****
--- 586,951 ----
  }
  
  
+ /** sgn($(GAMMA)(x))
+  *
+  * Params:
+  *   x = the argument of $(GAMMA)
+  *
+  * Returns:
+  *   -1 if $(GAMMA)(x) < 0, +1 if $(GAMMA)(x) > 0, and $(NAN) if $(GAMMA)(x)
+  *   does not exist.
+  *
+  * Authors: Don Clugston
+  */
+ real sgnGamma(in real x)
+ {
+     if (isNaN(x)) return x;
+     if (x > 0) return 1.0;
+ 
+     // -x is so large that x + 1 is indistinguishable from x.
+     if (x < -1 / real.epsilon) return real.nan;
+ 
+     const n = trunc(x);
+     if (x == n) return x == 0 ? copysign(1, x) : real.nan;
+     return cast(long) n & 1 ? 1.0 : -1.0;
+ }
+ 
+ @safe unittest
+ {
+     assert(sgnGamma(5.0) == 1.0);
+     assert(isNaN(sgnGamma(-3.0)));
+     assert(sgnGamma(-0.1) == -1.0);
+     assert(sgnGamma(-0.6) == -1.0);
+     assert(sgnGamma(-55.1) == 1.0);
+     assert(isNaN(sgnGamma(-real.infinity)));
+     assert(isIdentical(sgnGamma(NaN(0xABC)), NaN(0xABC)));
+ }
+ 
+ 
+ /* A method for computing B(x,y) when gamma would return infinity. It uses
+  * logGamma and exp instead.
+  */
+ private pragma(inline, true) real betaLarge(in real x, in real y)
+ {
+     const sgnB = sgnGamma(x) * sgnGamma(y) / sgnGamma(x+y);
+     return sgnB * exp(logGamma(x) + logGamma(y) - logGamma(x+y));
+ }
+ 
+ @safe unittest
+ {
+     assert(betaLarge(2*MAXGAMMA, -0.5) < 0);
+     assert(betaLarge(-0.1, 2*MAXGAMMA) < 0);
+     assert(betaLarge(-1.6, 2*MAXGAMMA) > 0);
+     assert(betaLarge(+0., 2*MAXGAMMA) == real.infinity);
+     assert(betaLarge(-0., 2*MAXGAMMA) == -real.infinity);
+     assert(betaLarge(-MAXGAMMA-1.5, MAXGAMMA+1) < 0);
+     assert(isNaN(betaLarge(-1, 2*MAXGAMMA)));
+ }
+ 
+ /** B(x,y)
+  *
+  * This computes B(x,y). It will use the formula when i$(GAMMA)(x)$(GAMMA)(y)/$(GAMMA)(x+y) when
+  * `gamma` can compute the $(GAMMA) terms, otherwise it will use `logGamma`.
+  *
+  * There are many edge cases that generate NaN instead of the actual value. The main algorithm works
+  * for most (x,y) pairs and only generates a NaN when it doesn't. In order to not penalize every
+  * computation with a bunch of branching logic, the main algorithm is used, and only if it results
+  * in a NaN will the edge cases be checked.
+  *
+  * Params:
+  *   x = the first argument of B
+  *   y = the second argument of B
+  *
+  * Returns:
+  *   B(x,y) if it can be computed, otherwise $(NAN)
+  */
+ real beta(in real x, in real y)
+ {
+     real res;
+ 
+     // the main algorithm
+     if (x > MAXGAMMA || y > MAXGAMMA || x + y > MAXGAMMA)
+     {
+         res = betaLarge(x, y);
+     }
+     else
+     {
+         res = gamma(x) * gamma(y) / gamma(x+y);
+ 
+         // There are several regions near the asymptotes and inflection lines
+         // gamma cannot be computed but logGamma can.
+         if (!isFinite(res)) res = betaLarge(x,y);
+     }
+ 
+     if (!isNaN(res)) return res;
+ 
+     // For valid NaN results, always return the response from the main algorithm
+     // in order to preserve signaling NaNs.
+ 
+     if (isNaN(x) || isNaN(y)) return res;
+ 
+     // Take advantage of the symmetry B(x,y) = B(y,x)
+     // smaller ≤ larger
+     const larger = cmp(x, y) >= 0 ? x : y;
+     const smaller = cmp(x, y) >= 0 ? y : x;
+     const sum = larger + smaller;
+ 
+     // in a quadrant of the (smaller,larger) cartesian plane
+     const inQ1 = cmp(smaller, +0.0L) >= 0;
+     const inQ2 = !inQ1 && cmp(larger, +0.0L) >= 0;
+     const inQ3 = !inQ1 && !inQ2;
+ 
+     const nextToSmallAxis = smaller == 0;
+     const nextToLargeAxis = larger == 0;
+     const nextToOrigin = nextToSmallAxis && nextToLargeAxis;
+ 
+     // on an asymptote, excluding the one at the axis
+     const onSmallAsymptote = smaller < 0 && smaller == trunc(smaller);
+     const onLargeAsymptote = larger < 0 && larger == trunc(larger);
+ 
+     // on an inflection line segment
+     const onInflection =
+         sum <= 0 && sum == trunc(sum) && !onSmallAsymptote && !onLargeAsymptote && !nextToOrigin;
+ 
+     // 1) Either is -∞, B = nan
+     if (larger == -real.infinity || smaller == -real.infinity) return res;
+ 
+     // 2) On an asymptote, B = nan
+     if (onSmallAsymptote || onLargeAsymptote) return res;
+ 
+     // 3) On an inflection line segment
+     if (onInflection) return copysign(0.0L, sgnGamma(smaller)*sgnGamma(larger));
+ 
+     if (inQ1)
+     {
+         // 4) On the larger axis and larger is finite, B = +∞
+         // 5) On the larger axis, and larger is +∞, B = nan
+         if (nextToSmallAxis) return larger < +real.infinity ? +real.infinity : res;
+ 
+         // 6) Not on the larger axis, and the larger is +∞, B = +0
+         if (!nextToSmallAxis && larger == +real.infinity) return +0.;
+     }
+ 
+     if (inQ2)
+     {
+         // 7) Next to the origin, B = nan
+         // 8) Next to the larger axis, but not the origin, B = -∞
+         if (nextToSmallAxis) return nextToOrigin ? res : -real.infinity;
+ 
+         // 9) Larger is +∞, B = ∞ * sgn(Γ(smaller))
+         if (larger == +real.infinity) return copysign(real.infinity, sgnGamma(smaller));
+ 
+         // 10) next to smaller axis, but not on an asymptote or at the origin,
+         //     B = +∞.
+         if (nextToLargeAxis && !onSmallAsymptote && !nextToOrigin) return +real.infinity;
+ 
+         // larger very large, case 9
+         // larger so large that ln|Γ(larger)| and ln|Γ(sum)| are too large to
+         // represent as reals. Thus they each are approximated as ∞, and the
+         // main algorithm resolves to NaN instead of ±∞.
+         if (sum > 1) return copysign(real.infinity, sgnGamma(smaller));
+     }
+ 
+     if (inQ3)
+     {
+         // 11) next to the smaller axis, but not on an asymptote, B = -∞.
+         if (nextToLargeAxis && !onSmallAsymptote) return -real.infinity;
+ 
+         // near origin, case 11
+         // -larger and -sum are so small that ln|Γ(larger)| and ln|Γ(sum)| are
+         // too large to be represented as reals. Thus they each are approximated
+         // as ∞, and the main algorithm resolves to NaN instead of -∞.
+         if (smaller > -0.25) return -real.infinity;
+     }
+ 
+     // Unknown case
+     return res;
+ }
+ 
+ @safe unittest
+ {
+     assert(isIdentical(beta(2, NaN(0xABC)), NaN(0xABC)));
+ 
+     // Test symmetry
+ 
+     // Test first quadrant
+     assert(beta(+0., 1) == +real.infinity);
+     assert(beta(nextUp(+0.0L), nextUp(+0.0L) > 0), "B(εₓ,ε𞁟) > 0");
+     assert(!isNaN(beta(nextUp(+0.0L), 1)), "B(ε,y), y > 0 should exist");
+     assert(beta(1, +real.infinity) is +0.0L, "lim{y→+∞} B(x,y) = 0⁺, x > 0");
+     assert(beta(1, 1) > 0);
+     assert(beta(0.6*MAXGAMMA, 0.5*MAXGAMMA) > 0);
+     assert(beta(1, 2*MAXGAMMA) > 0);
+     assert(beta(+0., 2*MAXGAMMA) == real.infinity);
+     assert(beta(nextUp(+0.0L), 2*MAXGAMMA) > 0);
+ 
+     // Test second quadrant above inflection lines
+     assert(isNaN(beta(-0., +0.)), "lim{x→0⁻, y→0⁺} B(x,y) should not exist");
+     assert(beta(-0., real.infinity) == -real.infinity, "lim{x→0⁻, y→+∞} B(x,y) = -∞");
+     assert(isNaN(beta(-2, 3)));
+     assert(beta(-0.5, 1) < 0);
+     assert(beta(-1.5, 3) > 0);
+     assert(beta(nextDown(-0.0L), 1) < 0);
+     assert(beta(nextUp(-1.0L), 2) < 0);
+     assert(beta(nextUp(-0.5L), 0.5) < 0);
+     assert(beta(-0.5, nextUp(0.5L)) < 0);
+     assert(beta(-0.5, real.infinity) == -real.infinity);
+     assert(cmp(beta(nextDown(-0.0L), 2*nextUp(+0.0L)), -0.0L) <= 0);
+     assert(beta(nextUp(-1.0L), 1) < 0);
+     assert(beta(nextDown(-0.0L), +real.infinity) == -real.infinity);
+     assert(beta(nextDown(-0.0L), nextDown(+real.infinity)) < 0, "B(-ε,y) < 0, y large");
+     assert(
+         beta(nextUp(-1.0L), real.infinity) == -real.infinity, "lim{y→+∞} B(-n+ε, y) = -∞, n odd");
+     assert(beta(nextUp(-1.0L), nextDown(real.infinity)) < 0, "B(-n+ε, y) < 0, n odd, y large");
+     assert(beta(nextDown(-1.0L), 2) > 0);
+     assert(beta(nextUp(-2.0L), 3) > 0);
+     assert(beta(nextUp(-1.5L), 1.5) > 0);
+     assert(beta(-1.5, nextUp(1.5L)) > 0);
+     assert(beta(nextDown(-1.0L), nextDown(real.infinity)) > 0);
+     assert(
+         beta(nextUp(-2.0L), real.infinity) == real.infinity, "lim{y→+∞} B(-n+ε, y) = +∞, n even");
+     assert(beta(nextUp(-2.0L), nextDown(real.infinity)) > 0, "B(-n+ε, y) > 0, n even, y large");
+     assert(
+         beta(-1.5, real.infinity) == +real.infinity, "lim{y→+∞} B(x,y) = +∞, -n-1 < x < -n, n odd");
+ 
+     // Test second quadrant within inflection lines
+     assert(beta(nextDown(-1.0L), nextUp(nextUp(1.0L))) > 0);
+     assert(beta(nextUp(-2.0L), 2) > 0);
+     assert(beta(nextDown(-0.0L), +0.) == +real.infinity);
+     assert(isNaN(beta(-1, +0)), "lim{y→0⁺} B(-n,y), should not exist");
+     assert(beta(nextUp(-1.0L), +0.) == +real.infinity);
+     assert(beta(nextDown(-1.0L), +0.) == +real.infinity);
+     assert(isNaN(beta(-real.infinity, real.infinity)));
+     assert(beta(nextDown(-0.0L), nextUp(+0.0L)) is -0.0L);
+     assert(beta(nextUp(-1.0L), nextDown(1.0L)) is -0.0L);
+     assert(beta(nextDown(-1.0L), nextUp(1.0L)) is +0.0L);
+     assert(beta(-0.5, 0.25) > 0);
+     assert(beta(nextUp(-1.0L), 0.25) > 0);
+     assert(beta(-0.5, nextUp(+0.0L)) > 0);
+     assert(beta(nextDown(-0.5L), 0.5) >= 0);
+     assert(beta(-0.5, nextDown(0.5L)) >= 0);
+     assert(beta(nextUp(-1.0L), nextDown(nextDown(1.0L))) >= 0);
+     assert(beta(nextUp(-1.0L), nextUp(+0.0L)));
+     assert(beta(-1.5, 0.25) > 0);
+     assert(beta(nextUp(2.0L), 0.25) > 0);
+     assert(beta(-1.5, nextUp(+0.0L)) > 0);
+     assert(beta(nextDown(-1.5L), 0.5) >= 0);
+     assert(beta(-1.5, nextDown(0.5L)) >= 0);
+     assert(beta(nextUp(-2.0L), nextUp(+0.0L)) > 0);
+     assert(beta(nextUp(-2.0L), nextDown(nextDown(1.0L))) >= 0);
+     assert(beta(nextDown(nextDown(-1.0L)), nextUp(+0.0L)) >= 0);
+     assert(beta(-1.5, 1) < 0);
+     assert(beta(nextDown(-1.0L), 0.5) < 0);
+     assert(beta(nextUp(-2.0L), 1.5) < 0);
+     assert(beta(nextUp(-1.5L), 0.5) <= 0);
+     assert(beta(-1.5L, nextUp(0.5L)) <= 0);
+     assert(beta(nextDown(-1.5L), 1.5) <= 0);
+     assert(beta(-1.5, nextDown(1.5L)) <= 0);
+     assert(beta(nextDown(-1.0L), 2*(nextUp(+1.0L) - 1)) <= 0);
+     assert(beta(nextUp(-2.0L), 1.) <= 0);
+     assert(beta(nextUp(-2.0L), nextDown(nextDown(2.0L))) <= 0);
+     assert(beta(nextDown(-1.0L), 1.) <= 0);
+     assert(beta(-0.0L, 2*MAXGAMMA) == -real.infinity, "lim{x→0⁻} B(x,y) = -∞, y > MAXGAMMA");
+     assert(beta(nextDown(-0.0L), 2*MAXGAMMA) < 0, "B(-ε,y) < 0, y > MAXGAMMA");
+ 
+     // Test third quadrant
+     assert(beta(-0., -0.) == -real.infinity);
+     assert(isNaN(beta(-2, -0.5)));
+     assert(beta(-0.5, -0.) == -real.infinity);
+     assert(isNaN(beta(-1, -0.)));
+     assert(isNaN(beta(-real.infinity, -0.)));
+     assert(beta(nextDown(-0.0L), -0.) == -real.infinity);
+     assert(isNaN(beta(-1, -0.)));
+     assert(beta(nextUp(-1.0L), -0.) == -real.infinity);
+     assert(beta(nextDown(-1.0L), -0.) == -real.infinity);
+     assert(isNaN(beta(-1.5, -1)));
+     assert(isNaN(beta(-3, -1)));
+     assert(beta(-0.75, -0.25) == +0.);
+     assert(beta(nextUp(-1.0L), nextDown(1.0L) - 1) == +0., "B(-n+ε, -ε) = 0⁺, n odd");
+     assert(beta(nextDown(-1.0L), nextUp(1.0L)) == -0.);
+     assert(beta(-0.5, -0.25) < 0);
+     assert(beta(-0.5, nextDown(-0.0L)) < 0);
+     assert(beta(-0.5, nextUp(-0.5L)) <= 0);
+     assert(beta(nextDown(-0.0L), nextDown(-0.0L)) < 0, "B(-εₓ,-ε𞁟) < 0");
+     assert(beta(nextUp(nextUp(-1.0L)), nextDown(-0.0L)) <= 0);
+     assert(beta(-2.25, -1.25) < 0);
+     assert(beta(nextUp(-2.5L), -1.5) <= 0);
+     assert(beta(-2.5, nextDown(-1.0L)) < 0);
+     assert(beta(nextDown(-2.0L), -1.5) < 0);
+     assert(beta(nextDown(-2.0L), nextDown(-1.0L)) < 0);
+     assert(beta(nextUp(nextUp(-3.0L)), nextDown(-1.0L)) <= 0);
+     assert(beta(nextDown(-2.0L), nextUp(nextUp(-2.0L))) <= 0);
+     assert(beta(-2.75, -1.75) > 0);
+     assert(beta(nextDown(-2.5L), -1.5) >= 0);
+     assert(beta(nextUp(-3.0L), -1.5) > 0);
+     assert(beta(-2.5, nextUp(-2.0L)) > 0);
+     assert(beta(nextUp(-3.0L), nextUp(-2.0L)) > 0);
+     assert(beta(nextUp(-3.0L), nextDown(nextDown(-1.0L))) >= 0);
+     assert(beta(nextDown(nextDown(-2.0L)), nextUp(-2.0L)) >= 0);
+ }
+ 
+ 
+ /* This is the natural logarithm of the absolute value of the beta function. It
+  * tries to eliminate reduce the loss of precision that happens when subtracting
+  * large numbers by combining the Stirling approximations of the individual
+  * logGamma calls.
+  *
+  * ln|B(x,y)| = ln|Γ(x)| + ln|Γ(y)| - ln|Γ(x+y)|. Stirling's approximation for
+  * ln|Γ(z)| is ln|Γ(z)| ~ zln(z) - z + ln(2𝜋/z)/2 + 𝚺ₙ₌₁ᴺB₂ₙ/[2n(2n-1)z²ⁿ⁻¹],
+  * where Bₙ is the nᵗʰ Bernoulli number.
+  * 𝚺ₙ₌₁ᴺB₂ₙ/[2n(2n-1)z²ⁿ⁻¹] = 𝚺ₙ₌₁ᴺB₂ₙ/[2n(2n-1)z²ⁿ⁻²]/z
+  *    = 𝚺ₙ₌₀ᴺ⁻¹B₂₍ₙ₊₁₎/[(2n+2)(2n+1)z²ⁿ]/z
+  *    = [𝚺ₙ₌₀ᴺ⁻¹Cₙ(1/z²)ⁿ]/z,
+  * where Cₙ = B₂₍ₙ₊₁₎/[(2n+2)(2n+1)].
+  * ln|Γ(z)| ~ zln(z) - z + ln(2𝜋/z)/2 +[𝚺ₙ₌₀ᴺ⁻¹Cₙ(1/z²)ⁿ]/z.
+  */
+ private real logBeta(real x, in real y)
+ {
+     const larger = x > y ? x : y;
+     const smaller = x < y ? x : y;
+     const sum = larger + smaller;
+ 
+     if (larger >= LN_GAMMA_STIRLING_LB && sum >= LN_GAMMA_STIRLING_LB && larger - smaller > 10.0L)
+     {
+         // Assume x > y
+         // ln|Γ(x)| - ln|Γ(x+y)|
+         //    ~ x⋅ln(x) - (x+y)ln(x+y) + y + ln(2𝜋/x)/2 - ln(2𝜋/[x+y])/2
+         //      + [𝚺ₙ₌₀ᴺ⁻¹Cₙ(1/x²)ⁿ]/x - [𝚺ₙ₌₀ᴺ⁻¹Cₙ(1/{x+y}²)ⁿ]/{x+y}.
+         // x⋅ln(x) - (x+y)ln(x+y) + y + ln(2𝜋/x)/2 - ln(2𝜋/[x+y])/2
+         //    = ln(xˣ) - ln([x+y]ˣ⁺ʸ) + y + ln(√[2𝜋/x]) - ln(√[2𝜋/{x+y}])
+         //    = ln(xˣ⁻¹ᐟ²/[x+y]ˣ⁺ʸ⁻¹ᐟ²) + y = ln([x/{x+y}]ˣ⁺ʸ⁻¹ᐟ²x⁻ʸ) + y
+         //    = y - y⋅ln(x) + (.5 - x - y)ln(1 + y/x)
+         // ln|B(x,y)|
+         //    ~ ln|Γ(y)| + y - y⋅ln(x) + (.5 - x - y)ln(1 + y/x)
+         //      + [𝚺ₙ₌₀ᴺ⁻¹Cₙ(1/x²)ⁿ]/x - [𝚺ₙ₌₀ᴺ⁻¹Cₙ(1/{x+y}²)ⁿ]/{x+y}.
+         const gamDiffApprox = smaller - smaller*log(larger) + (0.5L - sum)*log1p(smaller/larger);
+ 
+         const gamDiffCorr
+             = poly(1.0L/larger^^2, logGammaStirlingCoeffs) / larger
+             - poly(1.0L/sum^^2, logGammaStirlingCoeffs) / sum;
+ 
+         return logGamma(smaller) + gamDiffApprox + gamDiffCorr;
+     }
+ 
+     return logGamma(smaller) + logGamma(larger) - logGamma(sum);
+ }
+ 
+ @safe unittest
+ {
+     assert(isClose(logBeta(1, 1), log(beta(1, 1))));
+     assert(isClose(logBeta(3, 2), logBeta(2, 3)));
+     assert(isClose(exp(logBeta(20, 4)), beta(20, 4)));
+     assert(isClose(logBeta(30, 40), log(beta(30, 40))));
+ 
+     // The following were generated by scipy's betaln function.
+     assert(feqrel(logBeta(-1.4, -0.4), 1.133_156_234_422_692_6) > double.mant_dig-3);
+     assert(feqrel(logBeta(-0.5, 1.0), 0.693_147_180_559_945_2) > double.mant_dig-3);
+     assert(feqrel(logBeta(1.0, 2.0), -0.693_147_180_559_945_3) > double.mant_dig-3);
+     assert(feqrel(logBeta(14.0, 3.0), -7.426_549_072_397_305) > double.mant_dig-3);
+     assert(feqrel(logBeta(20.0, 30.0), -33.968_820_791_977_386) > double.mant_dig-3);
+ }
+ 
+ 
  private {
  /*
   * These value can be calculated like this:
*************** enum real BETA_BIGINV = 1.08420217248550
*** 645,663 ****
   */
  real betaIncomplete(real aa, real bb, real xx )
  {
!     if ( !(aa>0 && bb>0) )
      {
!          if ( isNaN(aa) ) return aa;
!          if ( isNaN(bb) ) return bb;
!          return real.nan; // domain error
      }
!     if (!(xx>0 && xx<1.0))
      {
!         if (isNaN(xx)) return xx;
!         if ( xx == 0.0L ) return 0.0;
!         if ( xx == 1.0L )  return 1.0;
!         return real.nan; // domain error
      }
      if ( (bb * xx) <= 1.0L && xx <= 0.95L)
      {
          return betaDistPowerSeries(aa, bb, xx);
--- 1012,1046 ----
   */
  real betaIncomplete(real aa, real bb, real xx )
  {
!     // If any parameters are NaN, return the NaN with the largest payload.
!     if (isNaN(aa) || isNaN(bb) || isNaN(xx))
      {
!         // With cmp,
!         // -NaN(larger) < -NaN(smaller) < -inf < inf < NaN(smaller) < NaN(larger).
!         const largerParam = cmp(abs(aa), abs(bb)) >= 0 ? aa : bb;
!         return cmp(abs(xx), abs(largerParam)) >= 0 ? xx : largerParam;
      }
! 
!     // domain errors
!     if (signbit(aa) == 1 || signbit(bb) == 1) return real.nan;
!     if (xx < 0.0L || xx > 1.0L) return real.nan;
! 
!     // edge cases
!     if ( xx == 0.0L ) return 0.0L;
!     if ( xx == 1.0L )  return 1.0L;
! 
!     // degenerate cases
!     if (aa is +0.0L || aa is real.infinity || bb is +0.0L || bb is real.infinity)
      {
!         if (aa is +0.0L && bb is +0.0L) return real.nan;
!         if (aa is real.infinity && bb is real.infinity) return real.nan;
!         if (aa is +0.0L || bb is real.infinity) return 1.0L;
!         if (aa is real.infinity || bb is +0.0L) return 0.0L;
      }
+ 
+     // symmetry
+     if (aa == bb && xx == 0.5L) return 0.5L;
+ 
      if ( (bb * xx) <= 1.0L && xx <= 0.95L)
      {
          return betaDistPowerSeries(aa, bb, xx);
*************** real betaIncomplete(real aa, real bb, re
*** 677,682 ****
--- 1060,1066 ----
          b = aa;
          xc = xx;
          x = 1.0L - xx;
+         if (x == 1.0L) x = nextDown(x);
      }
      else
      {
*************** real betaIncomplete(real aa, real bb, re
*** 718,729 ****
          t *= pow(x,a);
          t /= a;
          t *= w;
!         t *= gamma(a+b) / (gamma(a) * gamma(b));
      }
      else
      {
          /* Resort to logarithms.  */
!         y += t + logGamma(a+b) - logGamma(a) - logGamma(b);
          y += log(w/a);
  
          t = exp(y);
--- 1102,1113 ----
          t *= pow(x,a);
          t /= a;
          t *= w;
!         t /= beta(a, b);
      }
      else
      {
          /* Resort to logarithms.  */
!         y += t - logBeta(a, b);
          y += log(w/a);
  
          t = exp(y);
*************** done:
*** 1030,1040 ****
      assert(isIdentical(betaIncompleteInv(2,NaN(0xABC),8), NaN(0xABC)));
      assert(isIdentical(betaIncompleteInv(2,3, NaN(0xABC)), NaN(0xABC)));
  
!     assert(isNaN(betaIncomplete(-1, 2, 3)));
  
      assert(betaIncomplete(1, 2, 0)==0);
      assert(betaIncomplete(1, 2, 1)==1);
!     assert(isNaN(betaIncomplete(1, 2, 3)));
      assert(betaIncompleteInv(1, 1, 0)==0);
      assert(betaIncompleteInv(1, 1, 1)==1);
  
--- 1414,1444 ----
      assert(isIdentical(betaIncompleteInv(2,NaN(0xABC),8), NaN(0xABC)));
      assert(isIdentical(betaIncompleteInv(2,3, NaN(0xABC)), NaN(0xABC)));
  
!     assert(isNaN(betaIncomplete(-0., 1, .5)));
!     assert(isNaN(betaIncomplete(1, -0., .5)));
!     assert(isNaN(betaIncomplete(1, 1, -1)));
!     assert(isNaN(betaIncomplete(1, 1, 2)));
! 
!     assert(betaIncomplete(+0., +0., 0) == 0);
!     assert(isNaN(betaIncomplete(+0., +0., .5)));
!     assert(betaIncomplete(+0., +0., 1) == 1);
!     assert(betaIncomplete(+0., 1, .5) == 1);
!     assert(betaIncomplete(1, +0., 0) == 0);
!     assert(betaIncomplete(1, +0., .5) == 0);
!     assert(betaIncomplete(1, real.infinity, .5) == 1);
!     assert(betaIncomplete(real.infinity, real.infinity, 0) == 0);
!     assert(isNaN(betaIncomplete(real.infinity, real.infinity, .5)));
  
      assert(betaIncomplete(1, 2, 0)==0);
      assert(betaIncomplete(1, 2, 1)==1);
!     assert(betaIncomplete(9.99999984824320730e+30, 9.99999984824320730e+30, 0.5) == 0.5L);
!     assert(betaIncomplete(1.17549435082228751e-38, 9.99999977819630836e+22, 9.99999968265522539e-22) == 1.0L);
!     assert(betaIncomplete(1.00000001954148138e-25, 1.00000001490116119e-01, 1.17549435082228751e-38) == 1.0L);
!     assert(isClose(betaIncomplete(9.99999983775159024e-18, 9.99999977819630836e+22, 1.00000001954148138e-25), 1.0L));
!     assert(isClose(
!         betaIncomplete(9.99999974737875164e-06, 9.99999998050644787e+18, 9.99999968265522539e-22),
!         0.9999596214389047L));
! 
      assert(betaIncompleteInv(1, 1, 0)==0);
      assert(betaIncompleteInv(1, 1, 1)==1);
  
*************** done:
*** 1065,1087 ****
          assert(betaIncompleteInv(0.01L, 8e-48L, 9e-26L) == 1-real.epsilon);
  
          // Beware: a one-bit change in pow() changes almost all digits in the result!
          assert(feqrel(
              betaIncompleteInv(0x1.b3d151fbba0eb18p+1L, 1.2265e-19L, 2.44859e-18L),
!             0x1.c0110c8531d0952cp-1L
          ) > 10);
          // This next case uncovered a one-bit difference in the FYL2X instruction
          // between Intel and AMD processors. This difference gets magnified by 2^^38.
!         // WolframAlpha crashes attempting to calculate this.
!         assert(feqrel(betaIncompleteInv(0x1.ff1275ae5b939bcap-41L, 4.6713e18L, 0.0813601L),
!             0x1.f97749d90c7adba8p-63L) >= real.mant_dig - 39);
          real a1 = 3.40483L;
!         assert(betaIncompleteInv(a1, 4.0640301659679627772e19L, 0.545113L) == 0x1.ba8c08108aaf5d14p-109L);
          real b1 = 2.82847e-25L;
          assert(feqrel(betaIncompleteInv(0.01L, b1, 9e-26L), 0x1.549696104490aa9p-830L) >= real.mant_dig-10);
  
          // --- Problematic cases ---
!         // This is a situation where the series expansion fails to converge
!         assert( isNaN(betaIncompleteInv(0.12167L, 4.0640301659679627772e19L, 0.0813601L)));
          // This next result is almost certainly erroneous.
          // Mathematica states: "(cannot be determined by current methods)"
          assert(betaIncomplete(1.16251e20L, 2.18e39L, 5.45e-20L) == -real.infinity);
--- 1469,1506 ----
          assert(betaIncompleteInv(0.01L, 8e-48L, 9e-26L) == 1-real.epsilon);
  
          // Beware: a one-bit change in pow() changes almost all digits in the result!
+         // scipy says that this is 0.99999_99995_89020_6 (0x1.ffff_fffc_783f_2a7ap-1)
+         // in double precision.
          assert(feqrel(
              betaIncompleteInv(0x1.b3d151fbba0eb18p+1L, 1.2265e-19L, 2.44859e-18L),
!             0x1.ffff_fffc_783f_2a7ap-1
          ) > 10);
          // This next case uncovered a one-bit difference in the FYL2X instruction
          // between Intel and AMD processors. This difference gets magnified by 2^^38.
!         // WolframAlpha fails to calculate this.
!         // scipy says that this is 2.225073858507201e-308 in double precision,
!         // essentially double.min-normal.
!         assert(isClose(
!             betaIncompleteInv(0x1.ff1275ae5b939bcap-41L, 4.6713e18L, 0.0813601L),
!             2.225_073_858_507_201e-308L,
!             0,
!             1e-40));
! 
!         // scipy says that this is 8.068764506083944e-20 to double precision. Since this is a
!         // regression test where the original value isn't a known good value, I' updating the
!         // test value to the current generated value, which is closer to the scipy value.
          real a1 = 3.40483L;
!         assert(betaIncompleteInv(a1, 4.0640301659679627772e19L, 0.545113L) == 0x1.2a867b1e12b9bdf0p-64L);
! 
          real b1 = 2.82847e-25L;
          assert(feqrel(betaIncompleteInv(0.01L, b1, 9e-26L), 0x1.549696104490aa9p-830L) >= real.mant_dig-10);
  
          // --- Problematic cases ---
!         // In the past, this was a situation where the series expansion failed
!         // to converge.
!         assert(!isNaN(betaIncompleteInv(0.12167L, 4.0640301659679627772e19L, 0.0813601L)));
!         // Using scipy, the result should be 1.683301919972747e-29.
! 
          // This next result is almost certainly erroneous.
          // Mathematica states: "(cannot be determined by current methods)"
          assert(betaIncomplete(1.16251e20L, 2.18e39L, 5.45e-20L) == -real.infinity);
*************** real betaDistPowerSeries(real a, real b,
*** 1293,1304 ****
      u = a * log(x);
      if ( (a+b) < MAXGAMMA && fabs(u) < MAXLOG )
      {
!         t = gamma(a+b)/(gamma(a)*gamma(b));
!         s = s * t * pow(x,a);
      }
      else
      {
!         t = logGamma(a+b) - logGamma(a) - logGamma(b) + u + log(s);
  
          if ( t < MINLOG )
          {
--- 1712,1750 ----
      u = a * log(x);
      if ( (a+b) < MAXGAMMA && fabs(u) < MAXLOG )
      {
!         s = s * pow(x,a) / beta(a, b);
      }
      else
      {
!         if (abs(a*s - 1.0L) < 0.01L)
!         {
!             // Compute logGamma(a+b) - logGamma(b)
!             real lnGamma_apb_m_lnGamma_b;
! 
!             if (b >= LN_GAMMA_STIRLING_LB)
!             {
!                 const gamDiffApprox = a - a*log(b) + (0.5L - a - b)*log1p(a/b);
! 
!                 const gamDiffCorr
!                     = poly(1.0L/b^^2, logGammaStirlingCoeffs) / b
!                     - poly(1.0L/(a+b)^^2, logGammaStirlingCoeffs) / (a+b);
! 
!                 lnGamma_apb_m_lnGamma_b = -gamDiffApprox - gamDiffCorr;
!             }
!             else
!             {
!                 lnGamma_apb_m_lnGamma_b = logGamma(a+b) - logGamma(b);
!             }
! 
!             // Compute log(s) - logGamma(a)
!             const ln_s_m_lnGamma_a = log1p(a*s - 1.0L) - log(a) - logGamma(a);
! 
!             t = lnGamma_apb_m_lnGamma_b + u + ln_s_m_lnGamma_a;
!         }
!         else
!         {
!             t = u + log(s) - logBeta(a, b);
!         }
  
          if ( t < MINLOG )
          {
*************** real betaDistPowerSeries(real a, real b,
*** 1306,1311 ****
--- 1752,1759 ----
          } else
              s = exp(t);
      }
+ 
+     if (s > 1.0L) return (s - 2*real.epsilon <= 1.0L) ? 1.0L : real.nan;
      return s;
  }
  
diff -Nrcpad gcc-16-20260201/libphobos/src/std/internal/unicode_comp.d gcc-16-20260208/libphobos/src/std/internal/unicode_comp.d
*** gcc-16-20260201/libphobos/src/std/internal/unicode_comp.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/src/std/internal/unicode_comp.d	Sun Feb  8 22:32:16 2026
*************** import std.internal.unicode_tables;
*** 6,16 ****
  
  static if (size_t.sizeof == 4)
  {
! //10272 bytes
  enum combiningClassTrieEntries = TrieEntry!(ubyte, 8, 8, 5)(x"
  0000000000000040000005C0",
  x"
! 0000010000000B0000001120",
  x"
  020201000402030206020205090807020000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- 6,16 ----
  
  static if (size_t.sizeof == 4)
  {
! //10336 bytes
  enum combiningClassTrieEntries = TrieEntry!(ubyte, 8, 8, 5)(x"
  0000000000000040000005C0",
  x"
! 0000010000000B0000001160",
  x"
  020201000402030206020205090807020000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
*************** x"
*** 26,39 ****
  0000000000000000000000000000000000000000000000000000000000000000000000000000002A0000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  002C002B00000000000000000000002D0000000000000000002E000000000000002F0000000000000000000000000000
! 0000003000310000003200000000003300340000003600350037000000380000003900000000000000000000003B003A
! 000000000000000000000000003D003C0000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000003F003E0000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000004000000000000000410000000000000042000000000000000000000000000000000000
! 000000000000000000000000000000000043000000000000000000440000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- 26,39 ----
  0000000000000000000000000000000000000000000000000000000000000000000000000000002A0000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  002C002B00000000000000000000002D0000000000000000002E000000000000002F0000000000000000000000000000
! 0000003000310000003200000034003300350000003700360038000000390000003A00000000000000000000003C003B
! 000000000000000000000000003E003D0000000000000000000000000000000000000000000000000000000000000000
! 0000000000000000000000000040003F0000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000004100000000000000420000000000000043000000000000000000000000000000000000
! 000000000000000000000000000000000044000000000000000000450000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
*************** x"
*** 51,58 ****
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000000000000000450000000000460047000000000000000000000000000000000000
! 004900480000000000000000004A0035004B00000000004C004D00000000004E0000000000000000004F000000510050
  000000000000000000000000001A00000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- 51,58 ----
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000000000000000460000000000470048000000000000000000000000000000000000
! 004A00490000000000000000004B0036004C00000000004D004E00000000004F00000000000000000050000000520051
  000000000000000000000000001A00000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
*************** x"
*** 69,92 ****
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000520000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 005300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000005400000000000000000000000000000055000000000000005600000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 005800570000000000000000005900000000000000000000000000000000000000000000000000000000000000000000
! 005A0000005B000000000000000000000000000000000000005C0000005D0000000000000000005E0000005F00000000
! 0000000000600048006100000000000000630062004D0000000000000000006400650000000000000000000000660000
! 006700000068001A0000000000000069000000000000006A000000000000006B0000000000000000004100000000006C
! 0041000000000000006D000000000000006E000000000000000000000000000000610000000000000000000000000000
! 006F00000000007000000000004E0000002C000000000071000000720000000000000000000000000000000000000000
! 004100000000000000000000000000000000000000000073000000740000000000000000000000000000000000000000
! 000000000000007500000000000000000000000000000000000000000000000000760000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000770000
! 007800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000000000000000000000000000000079000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- 69,92 ----
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 005400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000005500000000000000000000000000000056000000000000005700000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 005900580000000000000000005A00000000000000000000000000000000000000000000000000000000000000000000
! 005B0000005C000000000000000000000000000000000000005D0000005E0000000000000000005F0000006000000000
! 0000000000610049006200000000000000640063004E0000000000000000006500660000000000000000000000670000
! 006800000069001A000000000000006A000000000000006B000000000000006C0000000000000000004200000000006D
! 0042000000000000006E000000000000006F000000000000000000000000000000620000000000000000000000000000
! 007000000000007100000000004F0000002C000000000072000000730000000000000000000000000000000000000000
! 004200000000000000000000000000000000000000000074000000750000000000000000000000000000000000000000
! 000000000000007600000000000000000000000000000000000000000000000000770000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000780000
! 007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 00000000000000000000000000000000000000000000000000000000007A000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
*************** x"
*** 101,122 ****
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 0000000000000000000000000000000000000000000000000000007A0000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 0000000000000000000000000000000000000000007B0000007D007C00000000000000000000007E0000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000000080007F00000000000000810000000000780000000000000000000000000000
! 000000000000000000820000008300000000000000000000000000000000000000000000000000000000000000840000
! 000000000000000000000000008500000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000860000000000000087000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- 101,122 ----
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 0000000000000000000000000000000000000000000000000000007B0000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 0000000000000000000000000000000000000000007C0000007E007D00000000000000000000007F0000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000000081008000000000000000820000000000790000000000000000000000000000
! 000000000000000000830000008400000000000000000000000000000000000000000000000000000000000000850000
! 000000000000000000000000008600000000000000000000000000000087000000000000000000000000000000000000
! 000000000000000000000000000000880000000000000089000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
*************** E6E60082E6E60009000000000000000000000000
*** 168,231 ****
  0009000000000000000000000000E60000000000000000000000E4000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000DCE6DE000000000000000000000000000000000000000000
  00000000E6000000000000DC000000000000000900000000000000000000000000000000E6E6E600E6E6E6E6DC0000E6
! 00000000000000000000000000000000E6E6E6E6DCDCDCE6E6DCDCDCDC00DCE6DCE6E6DCE6E6E6DCE6DCE6E600E6E6E6
! 000000000000000000000000000000000000000000000000000000000000000000000000000000070000000000000000
! 00000000000000090000000000000000000000000000000000000000000000000000000000000000E6000000E6E6E6DC
! E6E6E6E60000000000000000000000000000000000000000090900000000000000000000000000000000000000000000
! 000000000007000000000000000000000909000000000000000000000000000000000000000000000000000000000000
! 000000000700000000000000000000000000000000000000000000000000000000E6E6E6DCDCDC01E6E6DCDCDCDCDCDC
! 010100E601010101000000010000DC0000000000000000E60000E6E600000000E6DCE6E6E6E6E6E6E6DCE6E6DCD6EAE6
! E6E6E6CAE6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E4E8E6E6E6DADCE4DCE6DCE9
! 000000000000000000000000000000000101E6E6E6E6E6E6E6010101000000E60000E600E60101000101E6DCDCDCDCDC
! 000000E6000000000000000000000000000000000000000000000000E60000000000E6E6000000000000000000000000
! 0000000000000000000000000000000000000000000000000000000009000000E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6
! E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E60000000000000000E4DA0000E0E0DEE800000000000000000000000000000000
! 0000000000000000000000000000000000000000000000000008080000000000000000000000000000000000E6000000
! 00000000E6E6E6E6E6E6E6E60000E6E600000000000000000000000000000000000000000000000000000000E6E60000
! 000000000000000000000000000000000000E6E600000000000000000000000000000000000900000000000000000000
! 000000000000000000000000000000000000000000000000000000000000000900000000000000000000000000000000
! E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E60000E6E60000000000000000000000000000000000000000DC0000000000DCDC
! 000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000
! 000000000000000000000000000000000700000000000000000000000000000000000009000000000000000000000000
! 0000000000000000000000000000000000000000000000000000000000000000E6E600E6E60000DC000000E6E6E60000
! 0000E6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 0000000000090000000000000000000000000000000000000000000000000000000000000000000000000000001A0000
! E6E6E6E6DCE6E6E6DCDCDCDCE6E6DCDC0000000000000000000000000000000000000000000000000000000000000000
! 0000000000000000000000000000DC00000000DC00000000000000000000000000000000000000000000000000000000
! 0000000000000000000000000000000000000000E6E6000000E6E6E600000000000000000000000000000000E600DC00
! 0000000000000000000000000000000000000000000000000000000000000000000000000000000000DC01E609000000
! 0000000000DCE60000000000000000000000000000000000000000000000000000000000E6E6E6E60000000000000000
! 000000000000000000000000000000000000000000000000E6E6E6000000E6E600000000000000000000000000000000
! 0000000000000000E6000000000000E60000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000DCDCDC0000000000DCDC0000DCE6E6E6DCDCDCE6000000DC000000000000000000000000
! DCE600000000DCE600000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000090000000000000000090000000000000000000000000000000000000000000000000000000007090000000000
! 00E6E6E60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 090000000000000900000000000000000000000900000000000700000000000000000000000000000000000000000000
! 000000000000000000000000000000000000000000070900000000000000000000000000000000000009070000000000
! 000000000000000000000000000000000000000000000000000000000000000000000000000000000700000000000007
! 00000000E6E60000E6E6E6E6000000E6E6E6E6E6000000E6000000000000000000000000000000000000000009090000
! 000000090000000000000000000000000009000000070000000000000000000000000000000000000000000000E60000
! 070900000000000000000000000000000000000000000000000000000000000000000007000000000000000000000000
! 000000000000000000000000000000000000000000000000000000000000000000000000070900000000000000000000
! 000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000909000700000000000000000000000000000000000000000000000000000000000000
! 000000000900000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000900000000000007000000000909000000000000000000000000000000000000000000000000
! 000000000000000000000000000000000000000009000000000000000000000000090900000000000000000000000000
! 000000000000000000000000000000000000000000000000000000000900000000000000000000000000000000000000
! 000000000000000000000000000000000101010100000001000000000000000000000000000000000000000000000000
! E6E6E6E600E6E6E600000000000000000000000000000000000000000000000000000606000000000000000000000000
! 00000000000000000000000000000000000000000000000000000000000100000000000001D8D80000000101D8D8E200
! 00D8D8D800000000DC000000DCDCDCDC00DCDCDCE6E6E600DCDCE6E60000000000000000000000000000000000000000
! 0000000000000000E6E600000000E6E600000000000000000000000000000000E6E60000000000E60000000000000000
! 00000000000000000000000000000000E6E6E6E600E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E60000E6E6E6E6E6
! E600E6E6E6E600E600E6E6E60000000000000000000000000000000000000000000000000000000000000000E6000000
! 0000000000000000000000000000000000000000000000000000000000E6000000000000000000000000000000000000
! 000000000000000000000000E6E6E6E600000000000000000000000000000000000000000000000000000000E6DCE8E8
! 00000000000000000000000000000000000000000000000000000000DCE6000000000000000000000000000000000000
! 00000000000000000000000000000000DCDCDCDC00DCDCDC000000000000000000000000E6E6E6E60007E6E600000000
! 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
  );
  enum composeIdxMask = (1 << 11) - 1, composeCntShift = 11;
  enum compositionJumpTrieEntries = TrieEntry!(ushort, 12, 9)(x"
--- 168,233 ----
  0009000000000000000000000000E60000000000000000000000E4000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000DCE6DE000000000000000000000000000000000000000000
  00000000E6000000000000DC000000000000000900000000000000000000000000000000E6E6E600E6E6E6E6DC0000E6
! 00000000000000000000000000000000E6E6E6E6DCDCDCE6E6DCDCDCDC00DCE6DCE6E6DCE6E6E6DCE6DCE6E6E6E6E6E6
! E6E6E6E6E6E6E6E6E6E6E6E60000DCE6E6E6E6E6E6DCE6E6EAE6E6E60000000000000000000000000000000000000000
! 000000000000000000000000000000000000000000000007000000000000000000000000000000090000000000000000
! 000000000000000000000000000000000000000000000000E6000000E6E6E6DCE6E6E6E6000000000000000000000000
! 000000000000000009090000000000000000000000000000000000000000000000000000000700000000000000000000
! 090900000000000000000000000000000000000000000000000000000000000000000000070000000000000000000000
! 0000000000000000000000000000000000E6E6E6DCDCDC01E6E6DCDCDCDCDCDC010100E601010101000000010000DC00
! 00000000000000E60000E6E600000000E6DCE6E6E6E6E6E6E6DCE6E6DCD6EAE6E6E6E6CAE6E6E6E6E6E6E6E6E6E6E6E6
! E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E4E8E6E6E6DADCE4DCE6DCE900000000000000000000000000000000
! 0101E6E6E6E6E6E6E6010101000000E60000E600E60101000101E6DCDCDCDCDC000000E6000000000000000000000000
! 000000000000000000000000E60000000000E6E600000000000000000000000000000000000000000000000000000000
! 00000000000000000000000009000000E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6
! 0000000000000000E4DA0000E0E0DEE80000000000000000000000000000000000000000000000000000000000000000
! 00000000000000000008080000000000000000000000000000000000E600000000000000E6E6E6E6E6E6E6E60000E6E6
! 00000000000000000000000000000000000000000000000000000000E6E6000000000000000000000000000000000000
! 0000E6E60000000000000000000000000000000000090000000000000000000000000000000000000000000000000000
! 0000000000000000000000000000000900000000000000000000000000000000E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6
! 0000E6E60000000000000000000000000000000000000000DC0000000000DCDC00000000000000000000000000000000
! 000000000000000000000000000000000900000000000000000000000000000000000000000000000000000000000000
! 070000000000000000000000000000000000000900000000000000000000000000000000000000000000000000000000
! 00000000000000000000000000000000E6E600E6E60000DC000000E6E6E600000000E600000000000000000000000000
! 000000000000000000000000000000000000000000000000000000000000000000000000000900000000000000000000
! 00000000000000000000000000000000000000000000000000000000001A0000E6E6E6E6DCE6E6E6DCDCDCDCE6E6DCDC
! 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000DC00
! 000000DC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 00000000E6E6000000E6E6E600000000000000000000000000000000E600DC0000000000000000000000000000000000
! 00000000000000000000000000000000000000000000000000DC01E6090000000000000000DCE6000000000000000000
! 0000000000000000000000000000000000000000E6E6E6E6000000000000000000000000000000000000000000000000
! 0000000000000000E6E6E6000000E6E6000000000000000000000000000000000000000000000000E6000000000000E6
! 00000000000000000000000000000000000000000000000000000000000000000000000000000000DCDC0000DCDCDC00
! 00000000DCDC0000DCE6E6E6DCDCDCE6000000DC000000000000000000000000DCE600000000DCE60000000000000000
! 000000000000000000000000000000000000000000000000000000000000000000000009000000000000000009000000
! 000000000000000000000000000000000000000000000000000709000000000000E6E6E6000000000000000000000000
! 000000000000000000000000000000000000000000000000000000000000000009000000000000090000000000000000
! 000000090000000000070000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000007090000000000000000000000000000000000000907000000000000000000000000000000000000000000
! 000000000000000000000000000000000000000000000000070000000000000700000000E6E60000E6E6E6E6000000E6
! E6E6E6E6000000E600000000000000000000000000000000000000000909000000000009000000000000000000000000
! 0009000000070000000000000000000000000000000000000000000000E6000007090000000000000000000000000000
! 000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000000000000007090000000000000000000000000000000000000900000000000000
! 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090900
! 070000000000000000000000000000000000000000000000000000000000000000000000090000000000000000000000
! 000000000000000000000000000000000000000000000000000000000000000000000000000000000000090000000000
! 000700000000090900000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000900000000000000000000000009090000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000090000000000000000000000000000000000000000000000000000000000000000000000
! 0101010100000001000000000000000000000000000000000000000000000000E6E6E6E600E6E6E60000000000000000
! 000000000000000000000000000000000000060600000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000100000000000001D8D80000000101D8D8E20000D8D8D800000000DC000000DCDCDCDC
! 00DCDCDCE6E6E600DCDCE6E600000000000000000000000000000000000000000000000000000000E6E600000000E6E6
! 00000000000000000000000000000000E6E60000000000E6000000000000000000000000000000000000000000000000
! E6E6E6E600E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E60000E6E6E6E6E6E600E6E6E6E600E600E6E6E600000000
! 00000000000000000000000000000000000000000000000000000000E600000000000000000000000000000000000000
! 00000000000000000000000000E6000000000000000000000000000000000000000000000000000000000000E6E6E6E6
! 00000000000000000000000000000000000000000000000000000000E6DCE8E800000000000000000000000000000000
! 000000000000000000000000DCE6000000000000000000000000000000000000E600000000E6000000000000E6E60000
! 000000000000E600000000000000000000000000000000000000000000000000DCDCDCDC00DCDCDC0000000000000000
! 00000000E6E6E6E60007E6E6000000000000000000000000000000000000000000000000000000000000000000000000
! 00000000000000000000000000000000",
  );
  enum composeIdxMask = (1 << 11) - 1, composeCntShift = 11;
  enum compositionJumpTrieEntries = TrieEntry!(ushort, 12, 9)(x"
*************** return t[];
*** 988,998 ****
  
  static if (size_t.sizeof == 8)
  {
! //10272 bytes
  enum combiningClassTrieEntries = TrieEntry!(ubyte, 8, 8, 5)(x"
  0000000000000000000000000000002000000000000002E0",
  x"
! 00000000000001000000000000000B000000000000001120",
  x"
  040203020202010009080702060202050000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- 990,1000 ----
  
  static if (size_t.sizeof == 8)
  {
! //10336 bytes
  enum combiningClassTrieEntries = TrieEntry!(ubyte, 8, 8, 5)(x"
  0000000000000000000000000000002000000000000002E0",
  x"
! 00000000000001000000000000000B000000000000001160",
  x"
  040203020202010009080702060202050000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
*************** x"
*** 1008,1021 ****
  00000000000000000000000000000000000000000000000000000000000000000000002A000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  00000000002C002B0000002D00000000000000000000000000000000002E000000000000002F00000000000000000000
! 00310000000000300000003300320000003600350034000000380000003700000000000000390000003B003A00000000
! 0000000000000000003D003C000000000000000000000000000000000000000000000000000000000000000000000000
! 0000000000000000003F003E000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000400000000000000041000000000000004200000000000000000000000000000000000000000000
! 000000000000000000000000000000000000000000430000000000000000004400000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- 1010,1023 ----
  00000000000000000000000000000000000000000000000000000000000000000000002A000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  00000000002C002B0000002D00000000000000000000000000000000002E000000000000002F00000000000000000000
! 003100000000003000340033003200000037003600350000003900000038000000000000003A0000003C003B00000000
! 0000000000000000003E003D000000000000000000000000000000000000000000000000000000000000000000000000
! 00000000000000000040003F000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000410000000000000042000000000000004300000000000000000000000000000000000000000000
! 000000000000000000000000000000000000000000440000000000000000004500000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
*************** x"
*** 1033,1040 ****
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000000045000000000000004700000000004600000000000000000000000000000000
! 0000000000490048004A0035000000000000004C004B00000000004E004D0000000000000000000000510050004F0000
  0000000000000000001A0000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- 1035,1042 ----
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000000046000000000000004800000000004700000000000000000000000000000000
! 00000000004A0049004B0036000000000000004D004C00000000004F004E000000000000000000000052005100500000
  0000000000000000001A0000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
*************** x"
*** 1051,1074 ****
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000005200000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000053000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000540000000000000000000000000000005500000000000000560000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000058005700590000000000000000000000000000000000000000000000000000000000000000000000000000
! 005B0000005A000000000000000000000000000000000000005D0000005C00000000005E00000000000000000000005F
! 00600048000000000000000000610000004D000000630062000000640000000000000000006500000066000000000000
! 0068001A0067000000000069000000000000006A000000000000006B0000000000000000000000000000006C00410000
! 000000000041000000000000006D000000000000006E0000000000000000000000000000006100000000000000000000
! 00000070006F0000004E00000000000000000071002C0000000000000000007200000000000000000000000000000000
! 000000000041000000000000000000000000007300000000000000000000007400000000000000000000000000000000
! 000000750000000000000000000000000000000000000000000000000000000000000000007600000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000000000000000000000000000000000000000000000000000000077000000000000
! 000000000078000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000000000000000000000007900000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- 1053,1076 ----
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000005300000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000054000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000550000000000000000000000000000005600000000000000570000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 0000000000590058005A0000000000000000000000000000000000000000000000000000000000000000000000000000
! 005C0000005B000000000000000000000000000000000000005E0000005D00000000005F000000000000000000000060
! 00610049000000000000000000620000004E000000640063000000650000000000000000006600000067000000000000
! 0069001A006800000000006A000000000000006B000000000000006C0000000000000000000000000000006D00420000
! 000000000042000000000000006E000000000000006F0000000000000000000000000000006200000000000000000000
! 0000007100700000004F00000000000000000072002C0000000000000000007300000000000000000000000000000000
! 000000000042000000000000000000000000007400000000000000000000007500000000000000000000000000000000
! 000000760000000000000000000000000000000000000000000000000000000000000000007700000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000000000000000000000000000000000000000000000000000000078000000000000
! 000000000079000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000000000000000000000007A00000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
*************** x"
*** 1083,1104 ****
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000000000000000000000000000000000007A00000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 00000000000000000000000000000000007B00000000000000000000007D007C0000007E000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 00000000000000000000000000000000000000000080007F000000000000008100000000007800000000000000000000
! 000000000000000000830000008200000000000000000000000000000000000000000000000000000084000000000000
! 000000000000000000850000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000086000000000000008700000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- 1085,1106 ----
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000000000000000000000000000000000007B00000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 00000000000000000000000000000000007C00000000000000000000007E007D0000007F000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000000000000000810080000000000000008200000000007900000000000000000000
! 000000000000000000840000008300000000000000000000000000000000000000000000000000000085000000000000
! 000000000000000000860000000000000000000000000000008700000000000000000000000000000000000000000000
! 000000000000000000000088000000000000008900000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
*************** E6E60009E6E60082000000000000000000000000
*** 1150,1213 ****
  00000000000900000000E600000000000000000000000000000000000000E40000000000000000000000000000000000
  00000000000000000000000000000000000000000000000000000000DCE6DE0000000000000000000000000000000000
  E60000000000000000000000000000DC00000000000000090000000000000000E6E6E60000000000DC0000E6E6E6E6E6
! 00000000000000000000000000000000DCDCDCE6E6E6E6E6DC00DCE6E6DCDCDCE6E6E6DCDCE6E6DC00E6E6E6E6DCE6E6
! 000000000000000000000000000000000000000000000000000000000000000000000007000000000000000000000000
! 00000009000000000000000000000000000000000000000000000000000000000000000000000000E6E6E6DCE6000000
! 00000000E6E6E6E600000000000000000000000000000000000000000909000000000000000000000000000000000000
! 000700000000000000000000000000000000000009090000000000000000000000000000000000000000000000000000
! 0700000000000000000000000000000000000000000000000000000000000000DCDCDC0100E6E6E6DCDCDCDCE6E6DCDC
! 01010101010100E60000DC0000000001000000E600000000000000000000E6E6E6E6E6E6E6DCE6E6DCD6EAE6E6DCE6E6
! E6E6E6E6E6E6E6CAE6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E4E8E6E6E6E6E6E6DCE6DCE9E6DADCE4
! 00000000000000000000000000000000E6E6E6E60101E6E6000000E6E6010101E60101000000E600DCDCDCDC0101E6DC
! 00000000000000E600000000000000000000000000000000E600000000000000000000000000E6E60000000000000000
! 0000000000000000000000000000000000000000000000000900000000000000E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6
! E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E60000000000000000E0E0DEE8E4DA000000000000000000000000000000000000
! 00000000000000000000000000000000000000000000000000000000000808000000000000000000E600000000000000
! E6E6E6E6000000000000E6E6E6E6E6E6000000000000000000000000000000000000000000000000E6E6000000000000
! 00000000000000000000000000000000000000000000E6E6000000000000000000090000000000000000000000000000
! 000000000000000000000000000000000000000000000000000000090000000000000000000000000000000000000000
! E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6000000000000E6E6000000000000000000000000000000000000DCDCDC000000
! 000000000000000000000000000000000000000000000000000000000000000000000000090000000000000000000000
! 000000000000000000000000000000000000000007000000000000000000000000000000000000090000000000000000
! 0000000000000000000000000000000000000000000000000000000000000000E60000DCE6E600E6E6E60000000000E6
! 000000000000E60000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 00090000000000000000000000000000000000000000000000000000000000000000000000000000001A000000000000
! DCE6E6E6E6E6E6E6E6E6DCDCDCDCDCDC0000000000000000000000000000000000000000000000000000000000000000
! 00000000000000000000DC000000000000000000000000DC000000000000000000000000000000000000000000000000
! 00000000000000000000000000000000E6E60000000000000000000000E6E6E60000000000000000E600DC0000000000
! 000000000000000000000000000000000000000000000000000000000000000000000000000000000900000000DC01E6
! 00DCE60000000000000000000000000000000000000000000000000000000000E6E6E6E6000000000000000000000000
! 0000000000000000000000000000000000000000000000000000E6E6E6E6E60000000000000000000000000000000000
! 0000000000000000000000E6E60000000000000000000000000000000000000000000000000000000000000000000000
! 0000000000000000DCDCDC0000000000DCDC000000000000DCDCDCE6DCE6E6E600000000000000DC0000000000000000
! 0000DCE6DCE6000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000909000000000000000000000000000000000000000000000000000000000000000000000000070900
! 0000000000E6E6E600000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000090900000000000000000000000000000000000009000000000007000000000000000000000000000000000000
! 000000000000000000000000000000000007090000000000000000000000000000000000000000000000000000090700
! 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000707000000
! E6E6000000000000000000E6E6E6E6E6000000E6E6E6E6E6000000000000000000000000000000000909000000000000
! 0000000000000009000000000000000000070000000900000000000000000000000000000000000000E6000000000000
! 000000000709000000000000000000000000000000000000000000000000000000000000000000070000000000000000
! 000000000000000000000000000000000000000000000000000000000000000007090000000000000000000000000000
! 000000000000000000000000090000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000090900000000000000000007000000000000000000000000000000000000000000000000000000
! 090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000009000000090900070000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000000900000000000000000000000000000000000000000909000000000000000000
! 000000000000000000000000000000000000000000000000090000000000000000000000000000000000000000000000
! 000000000000000000000000000000000000000101010101000000000000000000000000000000000000000000000000
! 00E6E6E6E6E6E6E600000000000000000000000000000000000000000000000000000000000006060000000000000000
! 000000000000000000000000000000000000000000000000000100000000000001D8D80000000000D8D8E20000000101
! 0000000000D8D8D8DCDCDCDCDC000000E6E6E60000DCDCDC00000000DCDCE6E600000000000000000000000000000000
! 00000000000000000000E6E6E6E6000000000000000000000000000000000000000000E6E6E600000000000000000000
! 0000000000000000000000000000000000E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E60000E6
! E6E600E6E600E6E60000000000E6E6E6000000000000000000000000000000000000000000000000E600000000000000
! 00000000000000000000000000000000000000000000000000E600000000000000000000000000000000000000000000
! 0000000000000000E6E6E6E600000000000000000000000000000000000000000000000000000000E6DCE8E800000000
! 000000000000000000000000000000000000000000000000DCE600000000000000000000000000000000000000000000
! 0000000000000000000000000000000000DCDCDCDCDCDCDC0000000000000000E6E6E6E600000000000000000007E6E6
! 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
  );
  enum composeIdxMask = (1 << 11) - 1, composeCntShift = 11;
  enum compositionJumpTrieEntries = TrieEntry!(ushort, 12, 9)(x"
--- 1152,1217 ----
  00000000000900000000E600000000000000000000000000000000000000E40000000000000000000000000000000000
  00000000000000000000000000000000000000000000000000000000DCE6DE0000000000000000000000000000000000
  E60000000000000000000000000000DC00000000000000090000000000000000E6E6E60000000000DC0000E6E6E6E6E6
! 00000000000000000000000000000000DCDCDCE6E6E6E6E6DC00DCE6E6DCDCDCE6E6E6DCDCE6E6DCE6E6E6E6E6DCE6E6
! E6E6E6E6E6E6E6E60000DCE6E6E6E6E6E6DCE6E6E6E6E6E600000000EAE6E6E600000000000000000000000000000000
! 000000000000000000000000000000000000000700000000000000000000000000000009000000000000000000000000
! 000000000000000000000000000000000000000000000000E6E6E6DCE600000000000000E6E6E6E60000000000000000
! 000000000000000000000000090900000000000000000000000000000000000000070000000000000000000000000000
! 000000000909000000000000000000000000000000000000000000000000000007000000000000000000000000000000
! 00000000000000000000000000000000DCDCDC0100E6E6E6DCDCDCDCE6E6DCDC01010101010100E60000DC0000000001
! 000000E600000000000000000000E6E6E6E6E6E6E6DCE6E6DCD6EAE6E6DCE6E6E6E6E6E6E6E6E6CAE6E6E6E6E6E6E6E6
! E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E4E8E6E6E6E6E6E6DCE6DCE9E6DADCE400000000000000000000000000000000
! E6E6E6E60101E6E6000000E6E6010101E60101000000E600DCDCDCDC0101E6DC00000000000000E60000000000000000
! 0000000000000000E600000000000000000000000000E6E6000000000000000000000000000000000000000000000000
! 00000000000000000900000000000000E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6
! 0000000000000000E0E0DEE8E4DA00000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000808000000000000000000E600000000000000E6E6E6E6000000000000E6E6E6E6E6E6
! 000000000000000000000000000000000000000000000000E6E600000000000000000000000000000000000000000000
! 000000000000E6E600000000000000000009000000000000000000000000000000000000000000000000000000000000
! 0000000000000000000000090000000000000000000000000000000000000000E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6
! 000000000000E6E6000000000000000000000000000000000000DCDCDC00000000000000000000000000000000000000
! 000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000
! 000000000700000000000000000000000000000000000009000000000000000000000000000000000000000000000000
! 00000000000000000000000000000000E60000DCE6E600E6E6E60000000000E6000000000000E6000000000000000000
! 000000000000000000000000000000000000000000000000000000000000000000090000000000000000000000000000
! 000000000000000000000000000000000000000000000000001A000000000000DCE6E6E6E6E6E6E6E6E6DCDCDCDCDCDC
! 000000000000000000000000000000000000000000000000000000000000000000000000000000000000DC0000000000
! 00000000000000DC00000000000000000000000000000000000000000000000000000000000000000000000000000000
! E6E60000000000000000000000E6E6E60000000000000000E600DC000000000000000000000000000000000000000000
! 0000000000000000000000000000000000000000000000000900000000DC01E600DCE600000000000000000000000000
! 00000000000000000000000000000000E6E6E6E600000000000000000000000000000000000000000000000000000000
! 00000000000000000000E6E6E6E6E600000000000000000000000000000000000000000000000000000000E6E6000000
! 00000000000000000000000000000000000000000000000000000000000000000000000000000000DCDCDC00DCDC0000
! DCDC000000000000DCDCDCE6DCE6E6E600000000000000DC00000000000000000000DCE6DCE600000000000000000000
! 000000000000000000000000000000000000000000000000000000000000000000000000000000090900000000000000
! 00000000000000000000000000000000000000000000000000000000000709000000000000E6E6E60000000000000000
! 000000000000000000000000000000000000000000000000000000000000000000000009090000000000000000000000
! 000000000000000900000000000700000000000000000000000000000000000000000000000000000000000000000000
! 000709000000000000000000000000000000000000000000000000000009070000000000000000000000000000000000
! 0000000000000000000000000000000000000000000000000000000707000000E6E6000000000000000000E6E6E6E6E6
! 000000E6E6E6E6E600000000000000000000000000000000090900000000000000000000000000090000000000000000
! 00070000000900000000000000000000000000000000000000E600000000000000000000070900000000000000000000
! 000000000000000000000000000000000000000000000007000000000000000000000000000000000000000000000000
! 000000000000000000000000000000000709000000000000000000000000000000000000000000000000000009000000
! 000000000000000000000000000000000000000000000000000000000000000000000000000000000009090000000000
! 000000000700000000000000000000000000000000000000000000000000000009000000000000000000000000000000
! 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000900
! 000009090007000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 090000000000000000000000000000000000000000090900000000000000000000000000000000000000000000000000
! 000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000010101010100000000000000000000000000000000000000000000000000E6E6E6E6E6E6E60000000000000000
! 000000000000000000000000000000000000000000000606000000000000000000000000000000000000000000000000
! 0000000000000000000100000000000001D8D80000000000D8D8E200000001010000000000D8D8D8DCDCDCDCDC000000
! E6E6E60000DCDCDC00000000DCDCE6E60000000000000000000000000000000000000000000000000000E6E6E6E60000
! 00000000000000000000000000000000000000E6E6E60000000000000000000000000000000000000000000000000000
! 00E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E60000E6E6E600E6E600E6E60000000000E6E6E6
! 000000000000000000000000000000000000000000000000E60000000000000000000000000000000000000000000000
! 000000000000000000E6000000000000000000000000000000000000000000000000000000000000E6E6E6E600000000
! 000000000000000000000000000000000000000000000000E6DCE8E80000000000000000000000000000000000000000
! 0000000000000000DCE60000000000000000000000000000000000000000000000E60000E6000000E6E6000000000000
! 0000E6000000000000000000000000000000000000000000000000000000000000DCDCDCDCDCDCDC0000000000000000
! E6E6E6E600000000000000000007E6E60000000000000000000000000000000000000000000000000000000000000000
! 00000000000000000000000000000000",
  );
  enum composeIdxMask = (1 << 11) - 1, composeCntShift = 11;
  enum compositionJumpTrieEntries = TrieEntry!(ushort, 12, 9)(x"
diff -Nrcpad gcc-16-20260201/libphobos/src/std/internal/unicode_decomp.d gcc-16-20260208/libphobos/src/std/internal/unicode_decomp.d
*** gcc-16-20260201/libphobos/src/std/internal/unicode_decomp.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/src/std/internal/unicode_decomp.d	Sun Feb  8 22:32:16 2026
*************** x"
*** 344,350 ****
  043C0435044A0443047104510AF704780000000000000000000000000000000000000000000000000000000000000000
  00000000000000000000000000000000000000000000000013B913B20000000000000000000000000000000000000000
  000000000000000000000000000000000000276E00000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000000000000000000000000000000000000000000000067E05E30000083E00000000
  0E7A0E720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  0000000000000000000000000000000000000000000000002772276C27740EC100000000000000000000000000000000
  0EFB00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- 344,350 ----
  043C0435044A0443047104510AF704780000000000000000000000000000000000000000000000000000000000000000
  00000000000000000000000000000000000000000000000013B913B20000000000000000000000000000000000000000
  000000000000000000000000000000000000276E00000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000000000000000000000000000000000000008610000067E05E30000083E00000000
  0E7A0E720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  0000000000000000000000000000000000000000000000002772276C27740EC100000000000000000000000000000000
  0EFB00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
*************** x"
*** 2010,2016 ****
  044A0443043C04350AF70478047104510000000000000000000000000000000000000000000000000000000000000000
  0000000000000000000000000000000000000000000000000000000013B913B200000000000000000000000000000000
  00000000000000000000000000000000000000000000276E000000000000000000000000000000000000000000000000
! 0000000000000000000000000000000000000000000000000000000000000000067E05E300000000000000000000083E
  000000000E7A0E7200000000000000000000000000000000000000000000000000000000000000000000000000000000
  00000000000000000000000000000000000000000000000027740EC12772276C00000000000000000000000000000000
  000000000EFB000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- 2010,2016 ----
  044A0443043C04350AF70478047104510000000000000000000000000000000000000000000000000000000000000000
  0000000000000000000000000000000000000000000000000000000013B913B200000000000000000000000000000000
  00000000000000000000000000000000000000000000276E000000000000000000000000000000000000000000000000
! 0000000000000000000000000000000000000000000000000000000000000000067E05E308610000000000000000083E
  000000000E7A0E7200000000000000000000000000000000000000000000000000000000000000000000000000000000
  00000000000000000000000000000000000000000000000027740EC12772276C00000000000000000000000000000000
  000000000EFB000000000000000000000000000000000000000000000000000000000000000000000000000000000000
diff -Nrcpad gcc-16-20260201/libphobos/src/std/internal/unicode_grapheme.d gcc-16-20260208/libphobos/src/std/internal/unicode_grapheme.d
*** gcc-16-20260201/libphobos/src/std/internal/unicode_grapheme.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/src/std/internal/unicode_grapheme.d	Sun Feb  8 22:32:16 2026
*************** x"
*** 90,96 ****
  000300000000000000000000000000040000000000000000000040000000000000000000000000000000000000000000
  000000000000000000000000000000000000000020000000000020000000000000000000000000000000000000000000
  00000000000000000000000C000000000000000000000000000000000000000000000000000000000002000000000000
! 000000008000000000000002000000000000000000000000000000000000000000000000040000000000000000000000
  000003F00000000000000000000000000000000000000000000000400000000000000000000000000000000000000000
  000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  00000000000000000000000000000000",
--- 90,96 ----
  000300000000000000000000000000040000000000000000000040000000000000000000000000000000000000000000
  000000000000000000000000000000000000000020000000000020000000000000000000000000000000000000000000
  00000000000000000000000C000000000000000000000000000000000000000000000000000000000002000000000000
! 000000008000000000000002000000000000000000000000000000000000000000000000000000000000000000000000
  000003F00000000000000000000000000000000000000000000000400000000000000000000000000000000000000000
  000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  00000000000000000000000000000000",
*************** FFFFFFFF000000000000000000000000FFFFFFFF
*** 129,139 ****
  000000000000000000000000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  0000000000000000000000000000000000000000000000000000000000000000",
  );
! //1792 bytes
  enum spacingMarkTrieEntries = TrieEntry!(bool, 8, 5, 8)(x"
  0000000000000040000000A0",
  x"
! 00000100000000C000002400",
  x"
  010101000101020104010103010101010101010101010101010101010101010101010101010101010101010101010101
  010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
--- 129,139 ----
  000000000000000000000000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  0000000000000000000000000000000000000000000000000000000000000000",
  );
! //1824 bytes
  enum spacingMarkTrieEntries = TrieEntry!(bool, 8, 5, 8)(x"
  0000000000000040000000A0",
  x"
! 00000100000000C000002500",
  x"
  010101000101020104010103010101010101010101010101010101010101010101010101010101010101010101010101
  010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
*************** x"
*** 145,152 ****
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  00000000000000000000000000000000000F000E00110010000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 00130012001500140017001600190018001B001A0000001C001E001D0020001F00210000000000000000000000000000
! 000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  00000008C80000000000DE01000000000000000C80000000000019810000000000000008C00000000000000100000000
--- 145,152 ----
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  00000000000000000000000000000000000F000E00110010000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 00130012001500140017001600190018001B001A001D001C001F001E0021002000220000000000000000000000000000
! 000000000000000000000000002300000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  00000008C80000000000DE01000000000000000C80000000000019810000000000000008C00000000000000100000000
*************** x"
*** 167,184 ****
  000000004F030000000000000000000000000000580700000000000000000000000000000000D0000000000000000000
  400000000000004000000000000000000000000000000000000000000000000000000000010070000000000000000000
  000000000000000000000000000000000000000001BE000000000005000000000000000000000000F00E000000000010
! 000000000200000001800000000000000080000000000000000000000000000000000000400080000000000000000000
! 000000000012020000000000000000000000000000000000000000000000000000587C00000000000000000000000000
! 000000000000000000000000000000000000000000000000000000000060000000000008C03000000000000000000000
! 000000000000000000000000000000000000000000001C00000000000000000000000000000000000000000000000000
! 0000000000000000FFFE0000FFFFFFFF000000FF00000000000000000000000000000000000000000000000000000000
! 00000000000000000000000000000000",
  );
! //3552 bytes
  enum graphemeExtendTrieEntries = TrieEntry!(bool, 8, 5, 8)(x"
  000000000000004000000110",
  x"
! 00000100000001A000004D00",
  x"
  0202010004020302070206050A0908020202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
--- 167,184 ----
  000000004F030000000000000000000000000000580700000000000000000000000000000000D0000000000000000000
  400000000000004000000000000000000000000000000000000000000000000000000000010070000000000000000000
  000000000000000000000000000000000000000001BE000000000005000000000000000000000000F00E000000000010
! 0000000002000000018000000000000000800000000000000000000000000000000000000000000000000000000000A2
! 000000000000000000000000000000000000000040008000000000000000000000000000001202000000000000000000
! 0000000000000000000000000000000000587C0000000000000000000000000000000000000000000000000000000000
! 0000000000000000000000000060000000000008C0300000000000000000000000000000000000000000000000000000
! 0000000000001C000000000000000000000000000000000000000000000000000000000000000000FFFE0000FFFFFFFF
! 000000FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
  );
! //3616 bytes
  enum graphemeExtendTrieEntries = TrieEntry!(bool, 8, 5, 8)(x"
  000000000000004000000110",
  x"
! 00000100000001A000004F00",
  x"
  0202010004020302070206050A0908020202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
*************** x"
*** 193,206 ****
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000220021
  0023000000250024000000000000000000000000000000260027000000290028002B002A002D002C002F002E00310030
! 003300320000003400360035003800370000000000000000000000000000000000000000000000000000000000000000
! 0000000000000000000000390000000000000000000000000000000000000000003A0000000000000000000000000000
! 00000000003C003B00000000003D00000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 00000000000000000000003E0000000000000000000000000000000000000000000000000000000000000000003F0000
! 0040000000000041000000000000000000000000000000420000000000000000003C0043000000440046004500000000
! 004800470000000000000000000000000000000000490000000000000000000000000000000000000000000000000000
! 004B004A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF0000FFFF00000000000000000000000000000000
--- 193,206 ----
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000220021
  0023000000250024000000000000000000000000000000260027000000290028002B002A002D002C002F002E00310030
! 003300320035003400370036003900380000000000000000000000000000000000000000000000000000000000000000
! 00000000000000000000003A0000000000000000000000000000000000000000003B0000000000000000000000000000
! 00000000003D003C00000000003E00000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 00000000000000000000003F000000000000000000000000000000000000000000000000000000000000000000400000
! 0041000000000042000000000000000000000000000000430000000000000000003D0044000000450047004600000048
! 004A004900000000000000000000000000000000004B0000000000000000000000000000000000000000000000000000
! 004D004C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF0000FFFF00000000000000000000000000000000
*************** FF80000000000000FFFFFC00FFFFFFFB00000007
*** 215,221 ****
  0000000066FDE000C3000000001E0001200020640000000000000000000000000000000000000000E000000000000000
  00000000000000000000000000000000003C0000001C0000000C0000000C0000000000003FB00000200FFE4000000000
  0000B80000000000000000000000000000000060000002000000000000000000000000000E0401870000000000000000
! 0000000000000000000000000000000009800000000000007F4000009FF81FE500000000FFFF000000007FFF00000000
  0000000F3FF000000000001C000FF8000000000300003F3C00000000000FA3400000000000CFF0000000000000000000
  0000000000000000FFF70000031021FD000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFF
  000010000000000000000000000000000000000000000000FFFF00000001FFFF00000000000000000000000000000000
--- 215,221 ----
  0000000066FDE000C3000000001E0001200020640000000000000000000000000000000000000000E000000000000000
  00000000000000000000000000000000003C0000001C0000000C0000000C0000000000003FB00000200FFE4000000000
  0000B80000000000000000000000000000000060000002000000000000000000000000000E0401870000000000000000
! 0000000000000000000000000000000009800000000000007F4000009FF81FE500000000FFFF00003FFFFFFF00000FFF
  0000000F3FF000000000001C000FF8000000000300003F3C00000000000FA3400000000000CFF0000000000000000000
  0000000000000000FFF70000031021FD000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFF
  000010000000000000000000000000000000000000000000FFFF00000001FFFF00000000000000000000000000000000
*************** C000000000000000000000000003000000000844
*** 229,235 ****
  000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000
  0000000000000000000000000000000100000000000000000000000007C0000000000000000000000000000000000000
  0000F06E8700000000000000000000000000000000000000000000000000006000000000000000F00000000000003E00
! 0000000000000000000000000000000000000000000000000000000000000000000000000000180000000000F0000000
  00000000000000000001FFC0000000000000003C00000000000000000000000000000002FF0000000000007F80190000
  0000000306780000000000040000000000000007001FEF800000000000080000000000037FC0000000009E0100000000
  0000000040F380000000000200000000000000000000000080000000000007F8000000035800000000802001001F1FC0
--- 229,235 ----
  000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000
  0000000000000000000000000000000100000000000000000000000007C0000000000000000000000000000000000000
  0000F06E8700000000000000000000000000000000000000000000000000006000000000000000F00000000000003E00
! 0000000000000000000000000000000000000000000000000000000000000000000000000000180000000000FC000000
  00000000000000000001FFC0000000000000003C00000000000000000000000000000002FF0000000000007F80190000
  0000000306780000000000040000000000000007001FEF800000000000080000000000037FC0000000009E0100000000
  0000000040F380000000000200000000000000000000000080000000000007F8000000035800000000802001001F1FC0
*************** C000000000000000000000000003000000000844
*** 238,265 ****
  0000000000FF28000000000000000000A000000000000FBC000000000000000000000000000000000000000000000000
  0000000006FF800000000000000000000000000000000000000000000000000000000000780100000000000800000000
  00000000000000000CF0000000000001000007FE79F800000E7E008000000000037FFC00000000000000000000000000
! 00000000BF7F00000000000000000000FFFC0000006DFCFF000000000000000000000000B47E0000000000BF00000000
! 00A300000000000000000000000000000000000000000000000000000000000000000000000000000000000000180000
! 0000000307C000000400000700000000000000000000000000000000000000000000000000000000003FFF8100000000
! 00000000000000000000000000000000C00000000000E3FF000000000000000000000000000000000000000000000000
! 00000000000000000000000000000000000000000000000000000000001F000000000000007F00000000000000000000
! 000000000000000000000000000000000000000000000000000080000000000000078000000000000000000000030010
! 0000000000000000000000000000000060000000000000000000000000000000FFFFFFFFFFFF3FFF0000007F00000000
! 00000000000000000000000000000000000000000000000000000000F807E3E000000FE700003C000000000000000000
! 00000000000000000000001C0000000000000000000000000000000000000000FFFFFFFFF87FFFFFFFFFFFFF00201FFF
! F80000100000FFFE0000000000000000F9FFFF7F000007DB000000000000000000008000000000000000000000000000
! 000000000000000000000000000000000000000000004000000000000000F00000000000000000000000000000000000
! 0000000000000000000000000000F000000000000000000000000000000000000000000000000000000000000000C000
! 000000000000000000000000000000000000000000000000007F0000000000000000000000000000000007F000000000
! 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F8000000
! 00000000FFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000000000000000000000000000000000000000000000000000000000000000",
  );
! //1344 bytes
  enum Extended_PictographicTrieEntries = TrieEntry!(bool, 8, 5, 8)(x"
  000000000000004000000090",
  x"
! 00000100000000A000001800",
  x"
  020201000202020202020202030202020202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
--- 238,267 ----
  0000000000FF28000000000000000000A000000000000FBC000000000000000000000000000000000000000000000000
  0000000006FF800000000000000000000000000000000000000000000000000000000000780100000000000800000000
  00000000000000000CF0000000000001000007FE79F800000E7E008000000000037FFC00000000000000000000000000
! 0000000000000000000000000000005D0000000000000000000000000000000000000000BF7F00000000000000000000
! FFFC0000006DFCFF000000000000000000000000B47E0000000000BF0000000000A30000000000000000000000000000
! 00000000000000000000000000000000000000000000000000000000001800000000000307C000000400000700000000
! 000000000000000000000000000000000000000000000000003FFF810000000000000000000000000000000000000000
! C00000000000E3FF00000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000001F000000000000007F0000000000000000000000000000000000000000000000000000
! 000000000000000000008000000000000007800000000000000000000003001000000000000000000000000000000000
! 60000000000000000000000000000000FFFFFFFFFFFF3FFF0000007F0000000000000000000000000000000000000000
! 000000000000000000000000F807E3E000000FE700003C00000000000000000000000000000000000000001C00000000
! 00000000000000000000000000000000FFFFFFFFF87FFFFFFFFFFFFF00201FFFF80000100000FFFE0000000000000000
! F9FFFF7F000007DB00000000000000000000800000000000000000000000000000000000000000000000000000000000
! 0000000000004000000000000000F000000000000000000000000000000000000000000000000000000000000000F000
! 000000000000000000000000000000000000000000000000000000000000C00000000000000000000000000000000000
! 0000000000000000000000000020C048000000000000000000000000000000000000000000000000007F000000000000
! 0000000000000000000007F0000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000F800000000000000FFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF00000000000000000000000000000000
! 00000000000000000000000000000000",
  );
! //1440 bytes
  enum Extended_PictographicTrieEntries = TrieEntry!(bool, 8, 5, 8)(x"
  000000000000004000000090",
  x"
! 00000100000000A000001B00",
  x"
  020201000202020202020202030202020202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
*************** x"
*** 271,293 ****
  00090001000A000100010001000100010001000B0001000C000100010001000100010001000100010001000100010001
  000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001
  000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001
! 000E000D0010000F0011000D00130012001500140001000D000D000D0016000D00010001000100010001000100010001
  000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001
  000000000000000000000000000000000000000000004200000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000010000000000002000000000000000000000000000000000000000000
  0000000002000004000000000000000003F000000000060000000000000000000C000000000001000000000000000000
! 000001000000000000008000070FFE000000000000000000000000000000000000000000000000000000000400000000
! 000000000000000000000000000000000000000000400C000000000178000000FFF7FFBFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFF003FFFFFFFFFFFFFFFFFFFFFFFFF2057FF3F0018010200B85090000000F800E00000800100020000000000000000
  0000000000300000000000000000000000000000000000000000000000000000180000E0000000000021000000000000
  000000000000000000000000000000000000000020010000000000000000000000000000000000000000000000000000
! 0000000000000000000000000000000002800000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000E0000000800000000000C003F00007FE4000FFFFE000FFFFFFFF0000003F
! 0400FFFEF7FC8000FFFFFE00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFF07FFFFFFFFFFFFFF3FFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFF0000FFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000FFF00000
! 0000000000000000FFE00000FFFFFFFF0000F00000000000FC00FF00000000000000FF00FFFFC000FFFFFFFFFFFFFFFF
! FFFFF000F7FFFFFFFFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFF3FFFFFFF0000000000000000000000000000000000000000000000000000000000000000",
  );
  
--- 273,297 ----
  00090001000A000100010001000100010001000B0001000C000100010001000100010001000100010001000100010001
  000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001
  000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001
! 000E000D0010000F00120011001400130016001500010017001800180019001800010001000100010001000100010001
  000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001
  000000000000000000000000000000000000000000004200000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000010000000000002000000000000000000000000000000000000000000
  0000000002000004000000000000000003F000000000060000000000000000000C000000000001000000000000000000
! 000000000000000000008000070FFE000000000000000000000000000000000000000000000000000000000400000000
! 000000000000000000000000000000000000000000400C0000000001780000002132401F0700C44D800FFF05C8000169
! 1AFC000060030C83001AC13027BF06002054BF240018010200B850900000001800E00000800100020000000000000000
  0000000000300000000000000000000000000000000000000000000000000000180000E0000000000021000000000000
  000000000000000000000000000000000000000020010000000000000000000000000000000000000000000000000000
! 0000000000000000000000000000000002800000000000000000000000000000000000100000F0000000000000000000
! FFF000000001800000018001FFC00000000000000000000000000000C003000007FE4000FFFFC000FFFFFFFF0000003F
! 0400FFFEF7FC8000FFFFFE00FFFFFFC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3FFFFFFFFFFFFFFFF
! CECFFFFFFFFFFFFFFFFFFFFF07B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFF
! FFFFFFFF3FFFFFFFFFFF7E0007F980FF00613C8010060130700E001CFC08810AFFFFFFFFFFFFFFFF0000FFFF00000000
! FFFFFFFFFFFFFFFFFFE7F83FFFF9FA3F000000000000000000000000000000000000000000000000FC000000FFFFFFFF
! 0000F00000000000FC00FF00000000000000FF00F000C000FE00FFFCFFFFFFFFFFFFF000F7FFFFFFFFFFFFBFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FF000000FFFFC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFF3FFFFFFF0000000000000000000000000000000000000000000000000000000000000000",
  );
  
*************** x"
*** 368,374 ****
  000000000003000000000004000000000000000000000000000000000000400000000000000000000000000000000000
  000000000000000000000000000000002000000000000000000000000000200000000000000000000000000000000000
  0000000000000000000000000000000C0000000000000000000000000000000000000000000000000000000000020000
! 800000000000000000000000000000020000000000000000000000000000000004000000000000000000000000000000
  00000000000003F000000000000000000000000000000000000000000000004000000000000000000000000000000000
  000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000
  00000000000000000000000000000000",
--- 372,378 ----
  000000000003000000000004000000000000000000000000000000000000400000000000000000000000000000000000
  000000000000000000000000000000002000000000000000000000000000200000000000000000000000000000000000
  0000000000000000000000000000000C0000000000000000000000000000000000000000000000000000000000020000
! 800000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000
  00000000000003F000000000000000000000000000000000000000000000004000000000000000000000000000000000
  000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000
  00000000000000000000000000000000",
*************** FFFF000000000000000000000000000000000000
*** 407,417 ****
  0000000000000000FFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  0000000000000000000000000000000000000000000000000000000000000000",
  );
! //1792 bytes
  enum spacingMarkTrieEntries = TrieEntry!(bool, 8, 5, 8)(x"
  000000000000000000000000000000200000000000000050",
  x"
! 000000000000010000000000000000C00000000000002400",
  x"
  010102010101010001010101040101030101010101010101010101010101010101010101010101010101010101010101
  010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
--- 411,421 ----
  0000000000000000FFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  0000000000000000000000000000000000000000000000000000000000000000",
  );
! //1824 bytes
  enum spacingMarkTrieEntries = TrieEntry!(bool, 8, 5, 8)(x"
  000000000000000000000000000000200000000000000050",
  x"
! 000000000000010000000000000000C00000000000002500",
  x"
  010102010101010001010101040101030101010101010101010101010101010101010101010101010101010101010101
  010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
*************** x"
*** 423,430 ****
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  0000000000000000000000000000000000110010000F000E000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 001500140013001200190018001700160000001C001B001A0020001F001E001D00000000002100000000000000000000
! 000000000000000000220000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  C800000000000008000000000000DE01800000000000000C0000000000001981C0000000000000080000000000000001
--- 427,434 ----
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  0000000000000000000000000000000000110010000F000E000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 00150014001300120019001800170016001D001C001B001A00210020001F001E00000000002200000000000000000000
! 000000000000000000230000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  C800000000000008000000000000DE01800000000000000C0000000000001981C0000000000000080000000000000001
*************** FFF0000000000003000000000000000F00000000
*** 445,462 ****
  4F030000000000000000000000000000580700000000000000000000000000000000D000000000000000000000000000
  000000404000000000000000000000000000000000000000000000000000000001007000000000000000000000000000
  0000000000000000000000000000000001BE0000000000000000000000000005000000000000000000000010F00E0000
! 020000000000000000000000018000000000000000800000000000000000000040008000000000000000000000000000
! 00120200000000000000000000000000000000000000000000000000000000000000000000587C000000000000000000
! 0000000000000000000000000000000000000000000000000060000000000000C0300000000000080000000000000000
! 0000000000000000000000000000000000001C0000000000000000000000000000000000000000000000000000000000
! 0000000000000000FFFFFFFFFFFE000000000000000000FF000000000000000000000000000000000000000000000000
! 00000000000000000000000000000000",
  );
! //3552 bytes
  enum graphemeExtendTrieEntries = TrieEntry!(bool, 8, 5, 8)(x"
  000000000000000000000000000000200000000000000088",
  x"
! 000000000000010000000000000001A00000000000004D00",
  x"
  04020302020201000A090802070206050202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
--- 449,466 ----
  4F030000000000000000000000000000580700000000000000000000000000000000D000000000000000000000000000
  000000404000000000000000000000000000000000000000000000000000000001007000000000000000000000000000
  0000000000000000000000000000000001BE0000000000000000000000000005000000000000000000000010F00E0000
! 02000000000000000000000001800000000000000080000000000000000000000000000000000000000000A200000000
! 000000000000000000000000000000004000800000000000000000000000000000120200000000000000000000000000
! 000000000000000000000000000000000000000000587C00000000000000000000000000000000000000000000000000
! 00000000000000000060000000000000C030000000000008000000000000000000000000000000000000000000000000
! 00001C00000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFE0000
! 00000000000000FF00000000000000000000000000000000000000000000000000000000000000000000000000000000",
  );
! //3616 bytes
  enum graphemeExtendTrieEntries = TrieEntry!(bool, 8, 5, 8)(x"
  000000000000000000000000000000200000000000000088",
  x"
! 000000000000010000000000000001A00000000000004F00",
  x"
  04020302020201000A090802070206050202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
*************** x"
*** 471,484 ****
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000200000000000000022002100000000
  0025002400230000000000000000000000000026000000000029002800270000002D002C002B002A00310030002F002E
! 000000340033003200380037003600350000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000390000000000000000000000000000000000000000003A00000000000000000000
! 003C003B00000000003D0000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 0000000000000000000000000000003E000000000000000000000000000000000000000000000000003F000000000000
! 000000410040000000000000000000000000004200000000000000000000000000000044003C00430000000000460045
! 000000000048004700000000000000000049000000000000000000000000000000000000000000000000000000000000
! 00000000004B004A00000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  00000000000000000000000000000000FFFFFFFFFFFFFFFF0000FFFFFFFFFFFF00000000000000000000000000000000
--- 475,488 ----
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000200000000000000022002100000000
  0025002400230000000000000000000000000026000000000029002800270000002D002C002B002A00310030002F002E
! 003500340033003200390038003700360000000000000000000000000000000000000000000000000000000000000000
! 0000000000000000000000000000003A0000000000000000000000000000000000000000003B00000000000000000000
! 003D003C00000000003E0000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 0000000000000000000000000000003F0000000000000000000000000000000000000000000000000040000000000000
! 000000420041000000000000000000000000004300000000000000000000000000000045003D00440000004800470046
! 00000000004A00490000000000000000004B000000000000000000000000000000000000000000000000000000000000
! 00000000004D004C00000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  00000000000000000000000000000000FFFFFFFFFFFFFFFF0000FFFFFFFFFFFF00000000000000000000000000000000
*************** FFFF00000002000000000000000007FF0001FFC0
*** 493,499 ****
  66FDE00000000000001E0001C300000000000000200020640000000000000000000000000000000000000000E0000000
  00000000000000000000000000000000001C0000003C0000000C0000000C00003FB000000000000000000000200FFE40
  000000000000B8000000000000000000000002000000006000000000000000000E040187000000000000000000000000
! 0000000000000000000000000000000000000000098000009FF81FE57F400000FFFF0000000000000000000000007FFF
  3FF000000000000F000FF8000000001C00003F3C00000003000FA3400000000000CFF000000000000000000000000000
  0000000000000000031021FDFFF70000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFF
  0000000000001000000000000000000000000000000000000001FFFFFFFF000000000000000000000000000000000000
--- 497,503 ----
  66FDE00000000000001E0001C300000000000000200020640000000000000000000000000000000000000000E0000000
  00000000000000000000000000000000001C0000003C0000000C0000000C00003FB000000000000000000000200FFE40
  000000000000B8000000000000000000000002000000006000000000000000000E040187000000000000000000000000
! 0000000000000000000000000000000000000000098000009FF81FE57F400000FFFF00000000000000000FFF3FFFFFFF
  3FF000000000000F000FF8000000001C00003F3C00000003000FA3400000000000CFF000000000000000000000000000
  0000000000000000031021FDFFF70000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFF
  0000000000001000000000000000000000000000000000000001FFFFFFFF000000000000000000000000000000000000
*************** C19D000000000000004030000000000200000000
*** 507,513 ****
  000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000
  00000000000000000000000100000000000000000000000007C000000000000000000000000000000000000000000000
  870000000000F06E000000000000000000000000000000000000006000000000000000F00000000000003E0000000000
! 00000000000000000000000000000000000000000000000000000000000000000000180000000000F000000000000000
  0000000000000000000000000001FFC0000000000000003C0000000000000000FF00000000000002801900000000007F
  06780000000000030000000000000004001FEF800000000700080000000000007FC00000000000030000000000009E01
  40F380000000000000000000000000020000000000000000000007F8800000005800000000000003001F1FC000802001
--- 511,517 ----
  000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000
  00000000000000000000000100000000000000000000000007C000000000000000000000000000000000000000000000
  870000000000F06E000000000000000000000000000000000000006000000000000000F00000000000003E0000000000
! 00000000000000000000000000000000000000000000000000000000000000000000180000000000FC00000000000000
  0000000000000000000000000001FFC0000000000000003C0000000000000000FF00000000000002801900000000007F
  06780000000000030000000000000004001FEF800000000700080000000000007FC00000000000030000000000009E01
  40F380000000000000000000000000020000000000000000000007F8800000005800000000000003001F1FC000802001
*************** F900000000000000000000060005C3A5FF000000
*** 516,543 ****
  00FF280000000000000000000000000000000FBCA0000000000000000000000000000000000000000000000000000000
  06FF80000000000000000000000000000000000000000000000000000000000078010000000000000000000000000008
  0000000000000000000000010CF0000079F80000000007FE000000000E7E008000000000037FFC000000000000000000
! BF7F0000000000000000000000000000006DFCFFFFFC00000000000000000000B47E00000000000000000000000000BF
! 0000000000A3000000000000000000000000000000000000000000000000000000000000000000000018000000000000
! 07C0000000000003000000000400000700000000000000000000000000000000000000000000000000000000003FFF81
! 000000000000000000000000000000000000E3FFC0000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000000000000000000000001F000000000000007F0000000000000000000000000000
! 000000000000000000000000000000000000000000000000000000000000800000000000000780000003001000000000
! 0000000000000000000000000000000000000000600000000000000000000000FFFF3FFFFFFFFFFF000000000000007F
! 000000000000000000000000000000000000000000000000F807E3E00000000000003C0000000FE70000000000000000
! 0000000000000000000000000000001C00000000000000000000000000000000F87FFFFFFFFFFFFF00201FFFFFFFFFFF
! 0000FFFEF80000100000000000000000000007DBF9FFFF7F000000000000000000000000000080000000000000000000
! 0000000000000000000000000000000000004000000000000000F0000000000000000000000000000000000000000000
! 00000000000000000000F000000000000000000000000000000000000000000000000000000000000000C00000000000
! 00000000000000000000000000000000000000000000000000000000007F0000000000000000000000000000000007F0
! 00000000000000000000000000000000000000000000000000000000000000000000000000000000F800000000000000
! FFFFFFFF00000000FFFFFFFFFFFFFFFF00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000",
  );
! //1344 bytes
  enum Extended_PictographicTrieEntries = TrieEntry!(bool, 8, 5, 8)(x"
  000000000000000000000000000000200000000000000048",
  x"
! 000000000000010000000000000000A00000000000001800",
  x"
  020202020202010003020202020202020202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
--- 520,549 ----
  00FF280000000000000000000000000000000FBCA0000000000000000000000000000000000000000000000000000000
  06FF80000000000000000000000000000000000000000000000000000000000078010000000000000000000000000008
  0000000000000000000000010CF0000079F80000000007FE000000000E7E008000000000037FFC000000000000000000
! 00000000000000000000005D0000000000000000000000000000000000000000BF7F0000000000000000000000000000
! 006DFCFFFFFC00000000000000000000B47E00000000000000000000000000BF0000000000A300000000000000000000
! 000000000000000000000000000000000000000000000000001800000000000007C00000000000030000000004000007
! 00000000000000000000000000000000000000000000000000000000003FFF8100000000000000000000000000000000
! 0000E3FFC000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 0000000000000000001F000000000000007F000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000080000000000000078000000300100000000000000000000000000000000000000000
! 00000000600000000000000000000000FFFF3FFFFFFFFFFF000000000000007F00000000000000000000000000000000
! 0000000000000000F807E3E00000000000003C0000000FE700000000000000000000000000000000000000000000001C
! 00000000000000000000000000000000F87FFFFFFFFFFFFF00201FFFFFFFFFFF0000FFFEF80000100000000000000000
! 000007DBF9FFFF7F00000000000000000000000000008000000000000000000000000000000000000000000000000000
! 00004000000000000000F000000000000000000000000000000000000000000000000000000000000000F00000000000
! 0000000000000000000000000000000000000000000000000000C0000000000000000000000000000000000000000000
! 00000000000000000020C0480000000000000000000000000000000000000000000000000000000000000000007F0000
! 000000000000000000000000000007F00000000000000000000000000000000000000000000000000000000000000000
! 0000000000000000F800000000000000FFFFFFFF00000000FFFFFFFFFFFFFFFF00000000000000000000000000000000
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF00000000000000000000000000000000
! 00000000000000000000000000000000",
  );
! //1440 bytes
  enum Extended_PictographicTrieEntries = TrieEntry!(bool, 8, 5, 8)(x"
  000000000000000000000000000000200000000000000048",
  x"
! 000000000000010000000000000000A00000000000001B00",
  x"
  020202020202010003020202020202020202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
*************** x"
*** 549,571 ****
  000A00010009000100010001000100010001000C0001000B000100010001000100010001000100010001000100010001
  000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001
  000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001
! 0010000F000E000D001300120011000D0001000D001500140016000D000D000D00010001000100010001000100010001
  000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001
  000000000000000000000000000000000000420000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000001000000000000000000000000000020000000000000000000000000000000000
  020000040000000000000000000000000000060003F000000000000000000000000001000C0000000000000000000000
! 0000000000000100070FFE00000080000000000000000000000000000000000000000000000000000000000000000004
! 0000000000000000000000000000000000400C00000000007800000000000001FFFFFFFFFFF7FFBFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFF003FFFFFFFFFFFFFFFFF001801022057FF3F000000F800B850908001000200E000000000000000000000
  003000000000000000000000000000000000000000000000000000000000000000000000180000E00000000000210000
  000000000000000000000000000000002001000000000000000000000000000000000000000000000000000000000000
! 0000000000000000000000000000000000000000028000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000080000000E000C003F00000000000FFFFE00007FE40000000003FFFFFFFFF
! F7FC80000400FFFEFFFFFFFFFFFFFE00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFF07FFFFFFFFFFFFFF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FFF0000000000000
! 0000000000000000FFFFFFFFFFE00000000000000000F00000000000FC00FF00FFFFC0000000FF00FFFFFFFFFFFFFFFF
! F7FFFFFFFFFFF000FFFFFFFFFFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFF3FFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000",
  );
  
--- 555,579 ----
  000A00010009000100010001000100010001000C0001000B000100010001000100010001000100010001000100010001
  000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001
  000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001
! 0010000F000E000D00140013001200110001001700160015001900180018001800010001000100010001000100010001
  000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001
  000000000000000000000000000000000000420000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000001000000000000000000000000000020000000000000000000000000000000000
  020000040000000000000000000000000000060003F000000000000000000000000001000C0000000000000000000000
! 0000000000000000070FFE00000080000000000000000000000000000000000000000000000000000000000000000004
! 0000000000000000000000000000000000400C000000000078000000000000010700C44D2132401FC8000169800FFF05
! 60030C831AFC000027BF0600001AC130001801022054BF240000001800B850908001000200E000000000000000000000
  003000000000000000000000000000000000000000000000000000000000000000000000180000E00000000000210000
  000000000000000000000000000000002001000000000000000000000000000000000000000000000000000000000000
! 00000000000000000000000000000000000000000280000000000000000000000000F000000000100000000000000000
! 00018000FFF00000FFC00000000180010000000000000000C003000000000000FFFFC00007FE40000000003FFFFFFFFF
! F7FC80000400FFFEFFFFFFC0FFFFFE00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3FFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFCECFFFFF07B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF
! 3FFFFFFFFFFFFFFF07F980FFFFFF7E001006013000613C80FC08810A700E001CFFFFFFFFFFFFFFFF000000000000FFFF
! FFFFFFFFFFFFFFFFFFF9FA3FFFE7F83F000000000000000000000000000000000000000000000000FFFFFFFFFC000000
! 000000000000F00000000000FC00FF00F000C0000000FF00FFFFFFFFFE00FFFCF7FFFFFFFFFFF000FFFFFFFFFFFFFFBF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FFFFC000FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFF3FFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000",
  );
  
diff -Nrcpad gcc-16-20260201/libphobos/src/std/internal/unicode_norm.d gcc-16-20260208/libphobos/src/std/internal/unicode_norm.d
*** gcc-16-20260201/libphobos/src/std/internal/unicode_norm.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/src/std/internal/unicode_norm.d	Sun Feb  8 22:32:16 2026
*************** x"
*** 166,172 ****
  000000010740000000000000000000009E00000000000000000000008000000000000000FFFE0000FFFFFFFFFFFFFFFF
  FFFC7FFF0000000000000000000000007FFFFFFFFFFFFFFFFFFF00FF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000
! 3000000000000000000000000000000000000000000000000000000000010000000000000000000000000000031C0000
  0000000000000000F000000000000200000000000000000000000000000000007FE53FFFFFFFFC65FFFFFFFFFFFF3FFF
  FFFFFFFFFFFFFFFF03FFFFFF00000000A0F8007F5F7FFFFFFFFFFFDBFFFFFFFFFFFFFFFF0003FFFFFFF80000FFFFFFFF
  FFFFFFFF3FFFFFFFFFFF0000FFFFFFFFFFFCFFFFFFFFFFFF000000FF1FFF000003FF0000FFFF0000FFF7FF9FFFD70F7F
--- 166,172 ----
  000000010740000000000000000000009E00000000000000000000008000000000000000FFFE0000FFFFFFFFFFFFFFFF
  FFFC7FFF0000000000000000000000007FFFFFFFFFFFFFFFFFFF00FF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000
! 3000000000000000000000000000000000000000000000000000000000010000000000000000000000000000031E0000
  0000000000000000F000000000000200000000000000000000000000000000007FE53FFFFFFFFC65FFFFFFFFFFFF3FFF
  FFFFFFFFFFFFFFFF03FFFFFF00000000A0F8007F5F7FFFFFFFFFFFDBFFFFFFFFFFFFFFFF0003FFFFFFF80000FFFFFFFF
  FFFFFFFF3FFFFFFFFFFF0000FFFFFFFFFFFCFFFFFFFFFFFF000000FF1FFF000003FF0000FFFF0000FFF7FF9FFFD70F7F
*************** FFFFFFFFFFFFFFFF003FFFFF0000000000000001
*** 238,244 ****
  00000000FFFE0000FFFFFFFFFFFFFFFFFFFC7FFF0000000000000000000000007FFFFFFFFFFFFFFFFFFF00FF7FFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000010000
! 000000000000000000000000031C00000000000000000000F00000000000020000000000000000000000000000000000
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000F00000000000000007FE53FFFFFFFFC65FFFFFFFFFFFF3FFF
  FFFFFFFFFFFFFFFF03FFFFFF00000000A0F8007F5F7FFFFFFFFFFFDBFFFFFFFFFFFFFFFF0003FFFFFFF80000FFFFFFFF
  FFFFFFFF3FFFFFFFFFFF0000FFFFFFFFFFFCFFFFFFFFFFFF000000FF1FFF000003FF0000FFFF0000FFF7FF9FFFD70F7F
--- 238,244 ----
  00000000FFFE0000FFFFFFFFFFFFFFFFFFFC7FFF0000000000000000000000007FFFFFFFFFFFFFFFFFFF00FF7FFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000010000
! 000000000000000000000000031E00000000000000000000F00000000000020000000000000000000000000000000000
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000F00000000000000007FE53FFFFFFFFC65FFFFFFFFFFFF3FFF
  FFFFFFFFFFFFFFFF03FFFFFF00000000A0F8007F5F7FFFFFFFFFFFDBFFFFFFFFFFFFFFFF0003FFFFFFF80000FFFFFFFF
  FFFFFFFF3FFFFFFFFFFF0000FFFFFFFFFFFCFFFFFFFFFFFF000000FF1FFF000003FF0000FFFF0000FFF7FF9FFFD70F7F
*************** FBFBBD573E6FFEEFFFFFFFFFFFFF03E100000000
*** 414,420 ****
  07400000000000010000000000000000000000009E0000008000000000000000FFFE000000000000FFFFFFFFFFFFFFFF
  00000000FFFC7FFF0000000000000000FFFFFFFF7FFFFFFF7FFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000
! 00000000300000000000000000000000000000000000000000010000000000000000000000000000031C000000000000
  000000000000000000000200F000000000000000000000000000000000000000FFFFFC657FE53FFFFFFF3FFFFFFFFFFF
  FFFFFFFFFFFFFFFF0000000003FFFFFF5F7FFFFFA0F8007FFFFFFFFFFFFFFFDB0003FFFFFFFFFFFFFFFFFFFFFFF80000
  3FFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFCFFFF1FFF0000000000FFFFFF000003FF0000FFD70F7FFFF7FF9F
--- 414,420 ----
  07400000000000010000000000000000000000009E0000008000000000000000FFFE000000000000FFFFFFFFFFFFFFFF
  00000000FFFC7FFF0000000000000000FFFFFFFF7FFFFFFF7FFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000
! 00000000300000000000000000000000000000000000000000010000000000000000000000000000031E000000000000
  000000000000000000000200F000000000000000000000000000000000000000FFFFFC657FE53FFFFFFF3FFFFFFFFFFF
  FFFFFFFFFFFFFFFF0000000003FFFFFF5F7FFFFFA0F8007FFFFFFFFFFFFFFFDB0003FFFFFFFFFFFFFFFFFFFFFFF80000
  3FFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFCFFFF1FFF0000000000FFFFFF000003FF0000FFD70F7FFFF7FF9F
*************** FFFFFFFFFFFFFFFF00000000003FFFFF07400000
*** 486,492 ****
  FFFE000000000000FFFFFFFFFFFFFFFF00000000FFFC7FFF0000000000000000FFFFFFFF7FFFFFFF7FFFFFFFFFFF00FF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  000000000000000000000000000000000000000030000000000000000000000000000000000000000001000000000000
! 0000000000000000031C000000000000000000000000000000000200F000000000000000000000000000000000000000
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000FFFFFFFFF0000000000000000FFFFFC657FE53FFFFFFF3FFFFFFFFFFF
  FFFFFFFFFFFFFFFF0000000003FFFFFF5F7FFFFFA0F8007FFFFFFFFFFFFFFFDB0003FFFFFFFFFFFFFFFFFFFFFFF80000
  3FFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFCFFFF1FFF0000000000FFFFFF000003FF0000FFD70F7FFFF7FF9F
--- 486,492 ----
  FFFE000000000000FFFFFFFFFFFFFFFF00000000FFFC7FFF0000000000000000FFFFFFFF7FFFFFFF7FFFFFFFFFFF00FF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  000000000000000000000000000000000000000030000000000000000000000000000000000000000001000000000000
! 0000000000000000031E000000000000000000000000000000000200F000000000000000000000000000000000000000
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000FFFFFFFFF0000000000000000FFFFFC657FE53FFFFFFF3FFFFFFFFFFF
  FFFFFFFFFFFFFFFF0000000003FFFFFF5F7FFFFFA0F8007FFFFFFFFFFFFFFFDB0003FFFFFFFFFFFFFFFFFFFFFFF80000
  3FFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFCFFFF1FFF0000000000FFFFFF000003FF0000FFD70F7FFFF7FF9F
diff -Nrcpad gcc-16-20260201/libphobos/src/std/internal/unicode_tables.d gcc-16-20260208/libphobos/src/std/internal/unicode_tables.d
*** gcc-16-20260201/libphobos/src/std/internal/unicode_tables.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/src/std/internal/unicode_tables.d	Sun Feb  8 22:32:16 2026
*************** struct TrieEntry(T...)
*** 76,122 ****
  SCE simpleCaseTable(size_t i)
  {
  static immutable uint[] t = x"
! 0201E90B0211E92D0201E9110211E93302000496021004970200A7220210A72302001F7902101FF902001F4402101F4C
  0200015A0210015B020010FD02101CBD02010D6102110D8102001E3802101E390201E9210211E94302016E4C02116E6C
! 02001F2302101F2B020001A0021001A1030003A3031003C2032003C3020004DC021004DD02002CA602102CA70200017B
! 0210017C0201E9060211E928020010DC02101C9C020104CD021104F502001F6502101F6D0200051E0210051F020010D8
! 02101C9802002C1A02102C4A0200027D02102C640200A69A0210A69B02001F0202101F0A020005220210052302002C60
! 02102C6102002C1E02102C4E0200A6500210A6510200A65C0210A65D020013C90210AB99020104140211043C020013CD
! 0210AB9D020000CE021000EE02001E7E02101E7F020013F0021013F802001EC402101EC50200A78B0210A78C02000114
! 021001150200042F0210044F0201E9020211E924020004D8021004D902002CAA02102CAB020001100210011102000492
! 0210049302001E3402101E35020013F4021013FC020002240210022502002CA202102CA30200A72E0210A72F02016E48
! 02116E680200004A0210006A020013A60210AB760200015E0210015F030001C4031001C5032001C602001F4002101F48
! 0200A6580210A6590200022C0210022D02010C9F02110CDF02001FA702101FAF020013AE0210AB7E0200004202100062
! 020013D50210ABA502016E4002116E60020000D2021000F202001E8202101E8302010C9702110CD7020010E002101CA0
! 0200013D0210013E02000406021004560200029D0210A7B2020001390210013A020001980210019902001EBC02101EBD
! 020003AB021003CB0200040E0210045E0200A7B60210A7B70200040A0210045A02001EC002101EC10201057202110599
! 020024B9021024D302002C1602102C460200019C0210026F020003A7021003C70200A6920210A693030000C5031000E5
! 0320212B0200052602100527020002660210A7AA0201057A021105A10201057E021105A502001FD002101FD802000046
! 021000660201E90A0211E92C0200022802100229020013A20210AB720200A7260210A72702010C9302110CD30200049A
! 0210049B020000D6021000F60200010C0210010D020118A8021118C802000162021001630200019E0210022002002C9E
! 02102C9F03000392031003B2032003D002001E3002101E3102001FA302101FAB0200216D0210217D0200004E0210006E
! 030000B50310039C032003BC0200048E0210048F0200A72A0210A72B02010410021104380200038A021003AF02001EFE
! 02101EFF020118AC021118CC020001EA021001EB02001F0602101F0E02001FC302101FCC020010B402102D140200026A
! 0210A7AE030004120310043203201C800200A7600210A76102010C9B02110CDB020024C8021024E2020001A4021001A5
! 0200039F021003BF020010C402102D24020004A2021004A302002C0302102C3302002CE002102CE1020105760211059D
! 020004E0021004E102002C2A02102C5A02001ED002101ED1020000C2021000E2020004E8021004E90200A7A60210A7A7
! 020010F902101CB902000145021001460200037C021003FE02001EC802101EC90200041A0210043A020000CA021000EA
! 02001F8602101F8E030004210310044103201C83020104040211042C02010583021105AA0200053F0210056F02000547
! 02100577020013B60210AB86020013EC0210ABBC0200FF2C0210FF4C0200A7BA0210A7BB0200A6480210A649020013C5
! 0210AB950200FF240210FF440201040F021104370201041C0211044402010C8302110CC3020002410210024202001E76
! 02101E77020010BC02102D1C02002C2202102C52020010D002101C900200A7680210A7690200A7320210A7330200011C
! 0210011D020004270210044702001E4002101E41020118B1021118D10200015202100153030003A1031003C1032003F1
! 02000397021003B7020001AC021001AD020001E2021001E302000218021002190201E91A0211E93C0200051602100517
! 02001F2702101F2F0200A7C90210A7CA02001FE002101FE802002165021021750200A66C0210A66D02000393021003B3
! 0200053202100562020000560210007602001F3302101F3B020005540210058403001C880310A64A0320A64B0200A68E
! 0210A68F020003D8021003D9020024C5021024DF02002CB202102CB302010C8202110CC2020000570210007702010D50
! 02110D700200FF370210FF5702001EF602101EF70201E9120211E93402001F1202101F1A02016E5302116E73020004A6
! 021004A70200016A0210016B02001F3402101F3C02002CDC02102CDD020001B10210028A020118A4021118C402001E28
! 02101E29020001BF021001F70200018B0210018C020010A702102D0702010D6502110D85020001280210012902001E6A
! 02101E6B020010AB02102D0B0200041F0210043F02002C2E02102C5E02010CAF02110CEF020104C5021104ED02010D51
! 02110D7102001FE102101FE9030003A6031003C6032003D502002C0A02102C3A0200050E0210050F02010D5D02110D7D
! 0200010402100105020003720210037302001E8E02101E8F02000396021003B602001EFA02101EFB020003F2021003F9
! 0200A6400210A641020118A5021118C5020010EC02101CAC020118A1021118C1020001660210016702001F3702101F3F
  02010C8602110CC6020013DD0210ABAD02001F5102101F5902002C9A02102C9B020001FA021001FB0200216902102179
  02010D5402110D74020010A402102D0403000053031000730320017F0200037602100377020013B10210AB8102000468
  02100469020013E40210ABB402001F9602101F9E020001080210010902010CA002110CE002001E6602101E6702001E8A
--- 76,123 ----
  SCE simpleCaseTable(size_t i)
  {
  static immutable uint[] t = x"
! 02016EB202116ECD0201E9110211E93302000496021004970200A7220210A72302001F7902101FF902001F4402101F4C
  0200015A0210015B020010FD02101CBD02010D6102110D8102001E3802101E390201E9210211E94302016E4C02116E6C
! 02001F2302101F2B020001A0021001A1030003A3031003C2032003C30201E90B0211E92D020004DC021004DD02002CA6
! 02102CA70200017B0210017C0201E9060211E928020010DC02101C9C020104CD021104F502001F6502101F6D0200051E
! 0210051F020010D802101C9802002C1A02102C4A0200027D02102C640200A69A0210A69B02001F0202101F0A02000522
! 0210052302002C6002102C6102002C1E02102C4E0200A6500210A6510200A65C0210A65D020013C90210AB9902010414
! 0211043C020013CD0210AB9D020000CE021000EE02001E7E02101E7F020013F0021013F802001EC402101EC50200A78B
! 0210A78C02000114021001150200042F0210044F0201E9020211E924020004D8021004D902002CAA02102CAB02000110
! 02100111020004920210049302001E3402101E35020013F4021013FC020002240210022502002CA202102CA30200A72E
! 0210A72F02016E4802116E680200004A0210006A020013A60210AB760200015E0210015F030001C4031001C5032001C6
! 02001F4002101F480200A6580210A6590200022C0210022D02010C9F02110CDF02001FA702101FAF020013AE0210AB7E
! 0200004202100062020013D50210ABA502016E4002116E60020000D2021000F202001E8202101E8302010C9702110CD7
! 020010E002101CA00200013D0210013E02000406021004560200029D0210A7B2020001390210013A0200019802100199
! 02001EBC02101EBD020003AB021003CB0200040E0210045E0200A7B60210A7B70200040A0210045A02001EC002101EC1
! 0201057202110599020024B9021024D302002C1602102C460200019C0210026F020003A7021003C70200A6920210A693
! 030000C5031000E50320212B0200052602100527020002660210A7AA0201057A021105A10201057E021105A502001FD0
! 02101FD802000046021000660201E90A0211E92C0200022802100229020013A20210AB720200A7260210A72702010C93
! 02110CD30200049A0210049B020000D6021000F60200010C0210010D020118A8021118C802000162021001630200019E
! 0210022002002C9E02102C9F02016EA102116EBC03000392031003B2032003D002001E3002101E3102001FA302101FAB
! 02016EA502116EC00200216D0210217D0200004E0210006E030000B50310039C032003BC0200048E0210048F0200A72A
! 0210A72B02010410021104380200038A021003AF02001EFE02101EFF020118AC021118CC020001EA021001EB02001F06
! 02101F0E02001FC302101FCC020010B402102D140200026A0210A7AE030004120310043203201C800200A7600210A761
! 02010C9B02110CDB020024C8021024E202016EB102116ECC020001A4021001A50200039F021003BF020010C402102D24
! 020004A2021004A302002C0302102C3302002CE002102CE1020105760211059D02016EAD02116EC8020004E0021004E1
! 02002C2A02102C5A02001ED002101ED1020000C2021000E2020004E8021004E90200A7A60210A7A7020010F902101CB9
! 02000145021001460200037C021003FE02001EC802101EC90200041A0210043A020000CA021000EA02001F8602101F8E
! 030004210310044103201C83020104040211042C02010583021105AA0200053F0210056F0200054702100577020013B6
! 0210AB86020013EC0210ABBC0200FF2C0210FF4C0200A7BA0210A7BB0200A6480210A649020013C50210AB950200FF24
! 0210FF440201040F021104370201041C0211044402010C8302110CC3020002410210024202001E7602101E77020010BC
! 02102D1C02002C2202102C52020010D002101C900200A7680210A7690200A7320210A7330200011C0210011D02000427
! 0210044702001E4002101E41020118B1021118D10200015202100153030003A1031003C1032003F102000397021003B7
! 020001AC021001AD020001E2021001E302000218021002190201E91A0211E93C020005160210051702001F2702101F2F
! 0200A7C90210A7CA02001FE002101FE802002165021021750200A66C0210A66D02000393021003B30200053202100562
! 020000560210007602001F3302101F3B020005540210058403001C880310A64A0320A64B0200A68E0210A68F020003D8
! 021003D9020024C5021024DF02002CB202102CB302010C8202110CC2020000570210007702010D5002110D700200FF37
! 0210FF5702001EF602101EF70201E9120211E93402001F1202101F1A02016E5302116E73020004A6021004A70200016A
! 0210016B02001F3402101F3C02002CDC02102CDD020001B10210028A020118A4021118C402001E2802101E29020001BF
! 021001F70200018B0210018C020010A702102D0702010D6502110D85020001280210012902001E6A02101E6B020010AB
! 02102D0B0200041F0210043F02002C2E02102C5E02010CAF02110CEF020104C5021104ED02010D5102110D7102001FE1
! 02101FE9030003A6031003C6032003D502002C0A02102C3A0200050E0210050F02010D5D02110D7D0200010402100105
! 020003720210037302001E8E02101E8F02000396021003B602001EFA02101EFB020003F2021003F90200A6400210A641
! 020118A5021118C5020010EC02101CAC020118A1021118C102016EB002116ECB020001660210016702001F3702101F3F
  02010C8602110CC6020013DD0210ABAD02001F5102101F5902002C9A02102C9B020001FA021001FB0200216902102179
  02010D5402110D74020010A402102D0403000053031000730320017F0200037602100377020013B10210AB8102000468
  02100469020013E40210ABB402001F9602101F9E020001080210010902010CA002110CE002001E6602101E6702001E8A
*************** static immutable uint[] t = x"
*** 124,425 ****
  0210A751020000DA021000FA020010E902101CA902002CD802102CD902001EB802101EB90200012C0210012D02000252
  02102C70020004C3021004C4020024C4021024DE020104B5021104DD02002C0F02102C3F020005330210056302000195
  021001F602001F1302101F1B020104B8021104E00200055302100583020104250211044D020013D10210ABA1020004F4
! 021004F5020004C7021004C802010CAC02110CEC020004D0021004D10200A75C0210A75D02001E2C02101E2D020010A8
! 02102D0802000464021004650200042602100446020004E4021004E5020010ED02101CAD0200A7920210A79302001EDC
! 02101EDD020104BC021104E4020105770211059E02001EA802101EA9020001B8021001B9020000C6021000E60200FF30
! 0210FF5002016E4402116E640201041B0211044302001E0E02101E0F020004D4021004D502002CAE02102CAF02002C6B
! 02102C6C0200FF230210FF430200018402100185020105730211059A04000398041003B8042003D1043003F4020013D4
! 0210ABA40201E9190211E93B020001870210018802002C1302102C430200A7A20210A7A3020001940210026302000416
! 0210043602002CBE02102CBF02001FA602101FAE020104C6021104EE02001F8202101F8A020104C9021104F1020013E0
! 0210ABB00200024002102C7F0200A7BE0210A7BF02001F9202101F9A0200040202100452020005360210056602000550
! 021005800200A6820210A68302000386021003AC02001FE502101FEC020024C9021024E3020000D3021000F3020010F0
! 02101CB002001E3C02101E3D02002C8002102C810201058A021105B1020001560210015702001E7A02101E7B020013ED
! 0210ABBD0200A73E0210A73F0200011802100119020002140210021503001E6003101E6103201E9B02002C8A02102C8B
! 0200A64C0210A64D03000395031003B5032003F5020001E6021001E702001F8502101F8D020005120210051302001F61
! 02101F690200A6680210A66902010594021105BB02001E1802101E19020013B20210AB82020104150211043D02010418
! 02110440020002450210028C02001F7202101FC8020118B5021118D5020010B802102D18020004C0021004CF0201040B
! 021104330200042302100443020010C502102D2502002C2D02102C5D02001F3002101F38020013C10210AB910200A76C
! 0210A76D020104CC021104F402001F7102101FBB0200FF330210FF530200216A0210217A02001ECC02101ECD020003E8
! 021003E90200A7D00210A7D10200005A0210007A02010CB002110CF0020001D9021001DA02010587021105AE020001B5
! 021001B6020005430210057302001F2202101F2A02001EA002101EA102010C8F02110CCF02016E5402116E7402016E57
! 02116E7702001D7D02102C630200A7D60210A7D70200A74C0210A74D020013CE0210AB9E020000CF021000EF020010D9
! 02101C99020000450210006502000136021001370200040D0210045D02016E4302116E6302001F7C02101FFA0200024A
! 0210024B020004B8021004B902002CCA02102CCB02002CED02102CEE0200019F02100275020003A4021003C40200A74E
! 0210A74F020104C0021104E802001E1602101E17020013AF0210AB7F020005000210050102002C8202102C83020010BD
! 02102D1D0201E9160211E93802010CA302110CE302010C9402110CD4020104C2021104EA030003A6031003C6032003D5
! 02016E4D02116E6D020118B4021118D4020013E90210ABB902001F4102101F49020002870210A7B10200054202100572
! 02001E5802101E5902001F4302101F4B02002CEB02102CEC020013EB0210ABBB02001FD102101FD902001EE802101EE9
! 020013A30210AB73020003EE021003EF020118B8021118D802010C9E02110CDE0201E9200211E942020000FF02100178
! 020104170211043F020118A9021118C902001FB002101FB802002C8802102C89020013A90210AB790201E9090211E92B
! 020013C20210AB92020024B6021024D002001E5E02101E5F02002C6902102C6A0201041F021104470200037F021003F3
! 02000540021005700200039002101FD30300004B0310006B0320212A020004F8021004F9020013F3021013FB020000C9
! 021000E90200040F0210045F020010B502102D150200A7460210A747020000CD021000ED02000476021004770200039E
! 021003BE02001F2002101F28020010FA02101CBA02002C2102102C5102001EA602101EA702001F8302101F8B0200053C
! 0210056C02001F0102101F0902002CC202102CC30200020802100209020013E30210ABB30200A7960210A79702001F64
! 02101F6C02010592021105B9020004BE021004BF02001F9102101F99020003E6021003E702001EE002101EE102001FF3
! 02101FFC02000413021004330200042E0210044E020104CA021104F202002C0002102C30020010DB02101C9B020010F6
! 02101CB6020118BE021118DE020001A7021001A8020010C302102D23020004150210043502001E1E02101E1F02000506
! 0210050702001E6402101E65020000C7021000E70200047C0210047D02001E5202101E53020010F402101CB402010586
! 021105AD0200046A0210046B02002C2702102C5702010C8902110CC9020010A202102D020200FF320210FF5204000398
! 041003B8042003D1043003F4030003A9031003C90320212602001EDA02101EDB0201E9010211E9230200A79C0210A79D
! 020010D302101C93020024BC021024D60200FF2F0210FF4F0200025002102C6F02002C2902102C59020004B2021004B3
! 0201041902110441020002100210021102002C1502102C4502016E4702116E670200A7540210A75502016E4502116E65
! 030001C7031001C8032001C90200047E0210047F020001FC021001FD0200020E0210020F020002440210028902001F77
! 02101FDB02002CD602102CD702010589021105B0040004220410044204201C8404301C85020010E702101CA7020004FA
! 021004FB020010D502101C9502001EAC02101EAD020010B702102D17020013A10210AB710200A7C20210A7C30201E907
! 0211E929020013F5021013FD0200019B0210A7DC02001EE202101EE302001F6202101F6A02001E9202101E93020001D5
! 021001D602002C0602102C3602010C8B02110CCB02001F7002101FBA020003EC021003ED0201E9150211E9370200216E
! 0210217E020013C00210AB9002001EF402101EF50200FF3A0210FF5A020118BC021118DC020004AA021004AB02002163
  0210217302001E1C02101E1D020013C80210AB98020118AF021118CF02010C9802110CD8020105710211059802010CA7
! 02110CE70200005102100071020004F2021004F302010CAA02110CEA020010AF02102D0F02002C8E02102C8F02002CC4
! 02102CC502001E0A02101E0B02010D6002110D8002016E5002116E700201058E021105B5020104110211043902010423
! 0211044B0200053A0210056A02001E6C02101E6D020104BE021104E6020104240211044C020010A902102D09020024C2
! 021024DC02010C8102110CC1020013BC0210AB8C030004620310046303201C87020118A6021118C602001E4A02101E4B
! 020021620210217202001ED402101ED5020010AA02102D0A020004EC021004ED02002C0C02102C3C0200A79A0210A79B
! 020004CB021004CC020104BD021104E502000370021003710201E9140211E936020003DA021003DB02001F3502101F3D
! 02010D5202110D7203000392031003B2032003D002002C9602102C9702016E5102116E7102000391021003B102000534
! 021005640200041B0210043B020013DF0210ABAF02002C2C02102C5C020001240210012502010CA202110CE202001E8C
! 02101E8D02001EB402101EB50200016C0210016D02001E0202101E030200019A0210023D020001020210010302001F14
! 02101F1C0200FF280210FF4802010C8002110CC0020010EE02101CAE02001F5502101F5D0200A77B0210A77C02000059
! 021000790200014A0210014B02001E2402101E25020013BD0210AB8D02002CBC02102CBD0201040D0211043502010D5C
! 02110D7C0201058F021105B6020118A7021118C70200A6600210A66102000514021005150200052E0210052F020004A4
! 021004A5020004000210045002016E5802116E780200A64E0210A64F0200FF2E0210FF4E02010D5B02110D7B0201040C
! 02110434020000DB021000FB020001CD021001CE020010E802101CA80200054F0210057F0200A7380210A73902016E5F
! 02116E7F02001D790210A77D0201E90F0211E93102002C0702102C37020010A302102D030200A7A00210A7A103000421
! 0310044103201C830200A6800210A681020002820210A7C5020024CB021024E502000401021004510200A7580210A759
! 0200005802100078020001930210026002010CA102110CE10200054E0210057E0200018602100254020013DC0210ABAC
! 020024BD021024D7020001B3021001B40200A6960210A697020002160210021702001ECE02101ECF0200216802102178
! 0201E90E0211E93002002C1202102C4202002C2F02102C5F02010CAB02110CEB02001E8602101E870300041203100432
! 03201C80020013D60210ABA602001EBA02101EBB0201E91B0211E93D0201041A0211044202001EEE02101EEF0200FF31
! 0210FF510200A7BC0210A7BD020001DB021001DC020001A60210028002001F0702101F0F020118BD021118DD020000C8
! 021000E8020004D2021004D3020010E102101CA1020013B70210AB8702010585021105AC02016E4B02116E6B02000172
! 021001730200049E0210049F020004E6021004E7020010B002102D1002002C9C02102C9D020001EE021001EF020104B4
! 021104DC02010C8702110CC7020013BA0210AB8A02001E1002101E110200023002100231020004280210044802002CD0
! 02102CD1020118A0021118C0020003E0021003E102010588021105AF0200A7800210A781020010F502101CB50200053B
! 0210056B020000D5021000F5030004140310043403201C8102001FA402101FAC0200012A0210012B0200005202100072
! 020024B7021024D10201E9080211E92A04000398041003B8042003D1043003F402000202021002030200027102102C6E
! 020004700210047102002C1B02102C4B0200048A0210048B0200A7520210A7530200FF250210FF450200040702100457
! 020000C1021000E102001E4402101E4502001F9702101F9F02000548021005780200021C0210021D020013E50210ABB5
! 0200051A0210051B02002CB602102CB70200A6540210A655020104030211042B02001E7202101E73020010D402101C94
! 020104C1021104E902010C8A02110CCA02001E2A02101E2B030004620310046303201C8702001F7602101FDA03000053
! 031000730320017F02002C2602102C56020013A00210AB70020004C5021004C6020003FA021003FB0200055502100585
! 020013E80210ABB8030001C7031001C8032001C902001F4202101F4A02001F6702101F6F0201057C021105A30200A7B4
! 0210A7B50200A6980210A6990201E9040211E9260200040C0210045C020010DA02101C9A020000D0021000F002016E46
! 02116E6602001EC202101EC3020001E4021001E502000044021000640200017D0210017E02001F2102101F290200FF39
! 0210FF59020013AC0210AB7C02001F0002101F08020003A5021003C50200015802100159020104CF021104F702001E3A
! 02101E3B0200A72C0210A72D02010D6302110D83020001120210011302001E3602101E3702016E4E02116E6E02001F7D
! 02101FFB020004940210049502001E8002101E8102000116021001170200042D0210044D020013F2021013FA02000179
! 0210017A020004DA021004DB02002CA802102CA9020000CC021000EC020001A2021001A3030003A1031003C1032003F1
! 02001E7C02101E7D020118B7021118D7020013CF0210AB9F020104120211043A020005200210052102002C1C02102C4C
! 0200026B02102C6202010591021105B80200015C0210015D0200A6520210A6530200FF260210FF46020001E8021001E9
! 020010B602102D160200A6560210A6570200051C0210051D020013C30210AB93020104CB021104F302001EC602101EC7
! 020001E0021001E102001F6302101F6B02002C0102102C310201E9000211E92202001E7802101E79020024CE021024E8
! 0200A76A0210A76B0200011A0210011B020004290210044902001F8402101F8C020010D602101C9602001FB102101FB9
! 0200A7620210A76302010CB202110CF202002C2002102C50020010BE02102D1E0201041E02110446020004E2021004E3
! 020004DE021004DF020013EA0210ABBA0200054102100571020005450210057502001F2502101F2D0200015402100155
! 02002C2402102C54020002640210A7CB0200018102100253030003A3031003C2032003C3020118B3021118D3020010BA
! 02102D1A020001800210024302001E3E02101E3F020010FF02101CBF02010C8802110CC8020010D202101C920200A76E
! 0210A76F03001C880310A64A0320A64B020010B202102D12020013C70210AB9702000518021005190200A7660210A767
! 020001EC021001ED020104C3021104EB020105740211059B020013EE0210ABBE0201E91C0211E93E020010E202101CA2
! 02002C0502102C35020004A0021004A102001E4202101E43020013B40210AB84020118BF021118DF0200015002100151
! 02002CB002102CB1020013A40210AB74020004C1021004C2030001CA031001CB032001CC0200004C0210006C020104C7
! 021104EF02016E5A02116E7A0200022202100223020004900210049102002CF202102CF302010595021105BC0200053D
! 0210056D02000388021003AD0200054902100579020013E20210ABB202016E4A02116E6A02001EFC02101EFD02001F90
! 02101F98020004D6021004D70200A7B80210A7B9030004140310043403201C8102010CAD02110CED020010F702101CB7
! 02016E5502116E750200A7280210A72902001E0002101E010200023202100233020010A502102D0502001F1502101F1D
! 030003A9031003C9032021260200013B0210013C0200040802100458020000DC021000FC02001EBE02101EBF02002C18
! 02102C480200A7A80210A7A90200216B0210217B02002C1002102C4002002CDE02102CDF0200029E0210A7B0020000D4
! 021000F4020010EF02101CAF0200055102100581020013DA0210ABAA020005350210056502010C9D02110CDD020024C6
! 021024E0020004100210043002001EB602101EB7020104160211043E02016E4202116E6202010D5E02110D7E02000164
! 0210016502002CA002102CA102001E2E02101E2F02010C9502110CD502000498021004990200010A0210010B020118AA
! 021118CA02010D5302110D7302001E8802101E890200052802100529020013D70210ABA70200A65A0210A65B0200022A
! 0210022B02001FA502101FAD020104B3021104DB0201E90C0211E92E020024BB021024D5020001F4021001F50200A690
! 0210A6910200FF290210FF4902002C7502102C7602002CB802102CB9020104010211042902002C0D02102C3D020104D0
! 021104F80201E9130211E935020001AF021001B00200A7C70210A7C8020013BF0210AB8F020104020211042A020010EA
! 02101CAA020104BF021104E70201058D021105B402002164021021740200018E021001DD020001D3021001D402001F10
! 02101F1802001F5702101F5F02001ED202101ED30200FF2A0210FF4A02001E0402101E05020004EE021004EF02002C94
! 02102C95020000C0021000E0020013DB0210ABAB020001B20210028B020104260211044E0200A6620210A66302000054
! 0210007402000556021005860300042A0310044A03201C86020104220211044A02001F3602101F3E0200A7940210A7C4
! 020004CD021004CE020104BB021104E30200023B0210023C020001CF021001D00200050C0210050D0200A6460210A647
! 02001E4602101E4702010CA602110CE60200A7790210A77A0200FF360210FF56020118A2021118C2020004EA021004EB
! 0200041D0210043D02016E5202116E720200A6880210A68902001EB202101EB3020021600210217002001ED602101ED7
! 020024C3021024DD02016E5E02116E7E020004AC021004AD0201E9100211E9320200023E02102C6602002CB402102CB5
! 0200FF2D0210FF4D0200014C0210014D02001E2202101E23020013BB0210AB8B020001430210014402010581021105A8
! 020001700210017102001E9402101E9502002C2802102C580201040E02110436020104B2021104DA0200A7980210A799
! 020013B80210AB8802001E7002101E71040004220410044204201C8404301C8502010C8502110CC502001EAE02101EAF
! 020001220210012302010C8C02110CCC020104050211042D0200042002100440020001AE021002880200021A0210021B
! 0200038C021003CC02001F9502101F9D0400034504100399042003B904301FBE0200018A0210025702002C9002102C91
  020010B102102D110200011E0210011F02001E0802101E090200A7C00210A7C102001C8902101C8A02010580021105A7
  0200041C0210043C0200FB050210FB060200A7A40210A7A502001E7402101E7502002C1402102C44020013E70210ABB7
  0201E90D0211E92F020013A50210AB75020010F302101CB3020024BA021024D40200013F021001400200039D021003BD
  02002CE202102CE3020010A102102D0102000508021005090200004D0210006D02000389021003AE0200048C0210048D
  02002C0402102C340200216F0210217F020004B0021004B102002CD202102CD30200A7340210A73502010584021105AB
  0200005002100070020001600210016102010CA902110CE902001E3202101E330200020002100201020118AB021118CB
! 0200A7860210A787020118BB021118DB020118AE021118CE0200021E0210021F020003AA021003CA020010C202102D22
! 020013C40210AB9402000539021005690200A74A0210A74B020000C3021000E30200046E0210046F0200054D0210057D
! 020010E302101CA3020003DE021003DF020024CA021024E40400034504100399042003B904301FBE0200A7DA0210A7DB
! 0200A75A0210A75B020004190210043902002C0902102C390200037D021003FF02001F2602101F2E02010C9902110CD9
! 020021830210218402002C2302102C53020001320210013302001E5602101E57020010AE02102D0E0200A7400210A741
! 020000DD021000FD020010E602101CA603001E6003101E6103201E9B02000478021004790200022E0210022F0200A694
! 0210A6950200052C0210052D02010570021105970200A6660210A667020013A80210AB7802010C9602110CD6020118B2
! 021118D202010D6402110D840200020A0210020B020024BF021024D9020013CB0210AB9B02010C9C02110CDC0300041E
! 0310043E03201C8202001E8402101E8502001EF002101EF102010D5702110D7702010D5A02110D7A02016E5902116E79
! 02002CA402102CA50200A7240210A7250200049C0210049D0200010E0210010F020104D3021104FB0201E9030211E925
! 0200019102100192020013DE0210ABAE030003A0031003C0032003D6020013AD0210AB7D020002060210020702001F45
! 02101F4D020003EA021003EB020010BB02102D1B02000474021004750200FF380210FF58020004FE021004FF02002C84
! 02102C85020104130211043B02002C1F02102C4F02001E5C02101E5D02001EE402101EE502002CC802102CC9020104CE
! 021104F6020004BA021004BB02010D6202110D82020000D1021000F10200047202100473020118B6021118D602001F78
! 02101FF8020000430210006302001EA202101EA30201E9050211E92702001F2402101F2C0200019D02100272020004B6
! 021004B7020000DF02101E9E02001F8702101F8F02001E1402101E1502001EE602101EE70200040B0210045B02000409
! 021004590201057D021105A4020003A8021003C802001E5A02101E5B0201057F021105A60200054402100574020010FE
! 02101CBE02001E1202101E13020010B902102D190200004702100067020004FC021004FD02010C9202110CD202002C86
! 02102C8702001E1A02101E1B02010C9002110CD0020010BF02102D1F020013CA0210AB9A02016E4902116E6902000041
! 02100061020001BC021001BD02001EEA02101EEB02000502021005030200024802100249020010DF02101C9F030001C4
! 031001C5032001C60200054602100576020013EF0210ABBF02002CCC02102CCD020010D702101C97020013A70210AB77
! 0200047A0210047B02000134021001350300042A0310044A03201C8602002C1902102C4902000204021002050200025C
! 0210A7AB020024CF021024E902001E5402101E5502010579021105A00200054A0210057A0200A6840210A6850200FF27
! 0210FF4702001F0502101F0D020021320210214E0200024C0210024D020013B50210AB8502002CC602102CC702010408
! 0211043002002C1D02102C4D0200023F02102C7E0200A7420210A74302001E6202101E6302010CA802110CE8030000B5
! 0310039C032003BC02001F8102101F8902010C9A02110CDA0200012E0210012F0200040302100453020001FE021001FF
! 0400034504100399042003B904301FBE0200017402100175020003CF021003D7020024CD021024E702001FB302101FBC
! 020118AD021118CD0200A7440210A745020000D9021000F902001E0C02101E0D02002C1702102C47020003E2021003E3
! 0200026C0210A7AD0200A7560210A7570200040502100455020001970210026802001F6002101F6802001EEC02101EED
! 02002C8C02102C8D020010F202101CB20200A7CC0210A7CD02010D5902110D790201040A02110432020013C60210AB96
! 0201E91D0211E93F020104B6021104DE0200042402100444020001A9021002830300039A031003BA032003F0020010E5
! 02101CA5020104C8021104F0020104070211042F020013D00210ABA002001FA202101FAA0200046C0210046D020010A0
! 02102D000200A7820210A783030000C5031000E50320212B020004B4021004B502002CCE02102CCF0200A73A0210A73B
! 0200FF210210FF4102010D5602110D76020104B9021104E102001EA402101EA50200038F021003CE020024BE021024D8
! 020003B002101FE3020000490210006902016E4102116E6102000246021002470201E91F0211E94102001F7302101FC9
! 02002C6702102C6802002166021021760200010002100101020003E4021003E5020013D20210ABA20200A79E0210A79F
  02001FA002101FA802010CB102110CF102016E5D02116E7D020010C102102D210200A7F50210A7F6020013BE0210AB8E
! 0200042C0210044C020010DD02101C9D02001F9302101F9B0200024E0210024F020004BC021004BD0200017602100177
! 020013AB0210AB7B020013E10210ABB1020005040210050502001F0302101F0B0200A6860210A6870200054C0210057C
! 02016E4F02116E6F020010EB02101CAB020013D90210ABA90200023A02102C65020004A8021004A902002CDA02102CDB
! 0300041E0310043E03201C8202000394021003B402002C7202102C73020005100210051102001E2602101E270200A642
! 0210A643020004C9021004CA020001470210014802001EB002101EB10200A75E0210A75F0201058C021105B30200A73C
! 0210A73D020104D1021104F9020104D2021104FA02010590021105B7020000550210007502001F1102101F190200037B
! 021003FD02001F3102101F3902002CBA02102CBB02000552021005820200A68C0210A68D02001E6E02101E6F02002167
! 02102177020000DE021000FE020001900210025B02001EF802101EF902010D5F02110D7F020104B0021104D802010C8E
! 02110CCE02002C0802102C380200016E0210016F02016E5C02116E7C020010CD02102D2D02001F7B02101FEB02001E90
! 02101E91020013B30210AB83020001D1021001D202001F5302101F5B020001260210012702001E4802101E4902002C98
! 02102C99020104000211042802010CA402110CE4020118B9021118D9020013B00210AB8002001ED802101ED902001F74
! 02101FCA040004220410044204201C8404301C8502001EF202101EF302002161021021710201042002110448030001F1
! 031001F2032001F3020001D7021001D80200A68A0210A68B020003F7021003F80200FF350210FF55020003DC021003DD
! 02010C8D02110CCD02000418021004380200021202100213020004F0021004F1020024C1021024DB0200050A0210050B
! 0201E9170211E9390200A6440210A6450200053702100567020010AC02102D0C020010AD02102D0D020024C7021024E1
! 020004600210046102002C2B02102C5B02016E5602116E76020010C702102D27020104060211042E02002CD402102CD5
! 020010F102101CB102001F7A02101FEA02002C0B02102C3B0200FF340210FF540200041702100437020118BA021118DA
! 030001F1031001F2032001F303000395031003B5032003F5020001B7021002920200018F021002590200053802100568
! 0200A66A0210A66B02001F3202101F3A02010421021104490200052A0210052B02000425021004450200A7840210A785
! 0200004F0210006F0200A6640210A665020104B1021104D9020000C4021000E402010CA502110CE502001EAA02101EAB
! 020013D80210ABA802010D5502110D75020010E402101CA4020000D8021000F8030001CA031001CB032001CC020010D1
! 02101C91020105750211059C0200216C0210217C02002C0202102C3202010D5802110D780200A7D80210A7D90200FF22
! 0210FF4202016E5B02116E7B0200040402100454020010B302102D1302001ECA02101ECB02010409021104310201E918
! 0211E93A020004F6021004F702002CC002102CC102001E2002101E21020104B7021104DF0200039B021003BB02000196
! 0210026902002C2502102C550200A7900210A7910200A7640210A7650200020C0210020D02001F9402101F9C020118B0
! 021118D0020001820210018302002CAC02102CAD02001F8002101F88020024CC021024E60200025102102C6D02000480
! 02100481020013E60210ABB6020024B8021024D20200054B0210057B020013AA0210AB7A0300004B0310006B0320212A
! 020002610210A7AC02000141021001420300039A031003BA032003F0020010F802101CB8020104C4021104EC02000189
! 02100256020010DE02101C9E02001E6802101E69020104BA021104E202001F0402101F0C020105780211059F02000411
! 0210043102010582021105A902000466021004670200A7360210A737020000CB021000EB020010C002102D2002010427
! 0211044F020001DE021001DF02002C9202102C93020001060210010702001E4E02101E4F0200042B0210044B0200A748
! 0210A74902002C1102102C410200A7B30210AB530200053E0210056E0200014E0210014F020013D30210ABA302000524
! 021005250200A65E0210A65F020001F8021001F9020004AE021004AF0200A77E0210A77F030003A0031003C0032003D6
! 020002650210A78D0200FF2B0210FF4B02001FA102101FA902001EDE02101EDF020013B90210AB890200016802100169
! 0200022602100227020013F1021013F902001E0602101E0702000120021001210201041D0211044502001F6602101F6E
! 020010A602102D0602010C9102110CD102001D8E0210A7C602010C8402110CC402010CAE02110CEE020118A3021118C3
! 0200004802100068020013CC0210AB9C0201E91E0211E9400200038E021003CD0200053102100561";
  return SCE(t[i]);
  }
  @property FCE fullCaseTable(size_t index) nothrow @nogc @safe pure
  {
  static immutable ulong[] t = x"
! 001E90B000000021001E92D0000001210010CAE0000000210010CEE00000012100004960000000210000497000000121
  001E911000000021001E933000000121000A722000000021000A7230000001210001F790000000210001FF9000000121
  0001F440000000210001F4C000000121000015A000000021000015B00000012100010FD0000000210001CBD000000121
  0010D610000000210010D810000001210001E380000000210001E39000000121000FB16000000021000057E576000122
  0016E4C0000000210016E6C0000001210001F230000000210001F2B000000121001E921000000021001E943000000121
! 00001A000000002100001A100000012100003A300000003100003C200000013100003C300000023100004DC000000021
! 00004DD0000001210002CA60000000210002CA7000000121000017B000000021000017C000000121001E906000000021
! 001E92800000012100010DC0000000210001C9C00000012100104CD00000002100104F50000001210001F65000000021
! 0001F6D000000121000051E000000021000051F00000012100010D80000000210001C980000001210002C1A000000021
! 0002C4A000000121000027D0000000210002C64000000121000A69A000000021000A69B0000001210001F02000000021
! 0001F0A000000121000052200000002100005230000001210002C600000000210002C610000001210001FB7000000021
! 00003B13423B9123000A650000000021000A651000000121000A65C000000021000A65D0000001210002C1E000000021
! 0002C4E0000001210001FB30000000310001FBC00000013100003B13B900023200013C9000000021000AB99000000121
! 00013CD000000021000AB9D00000012100000CE00000002100000EE0000001210001E7E0000000210001E7F000000121
! 0010414000000021001043C00000012100013F000000002100013F80000001210001EC40000000210001EC5000000121
! 000A78B000000021000A78C00000012100001140000000210000115000000121000042F000000021000044F000000121
! 001E902000000021001E92400000012100004D800000002100004D90000001210002CAA0000000210002CAB000000121
! 00001100000000210000111000000121000049200000002100004930000001210001E340000000210001E35000000121
! 00013F400000002100013FC000000121000022400000002100002250000001210002CA20000000210002CA3000000121
! 000A72E000000021000A72F0000001210016E480000000210016E68000000121000004A000000021000006A000000121
! 00013A6000000021000AB76000000121000015E000000021000015F00000012100001C400000003100001C5000000131
! 00001C60000002310001F400000000210001F48000000121000A658000000021000A659000000121000022C000000021
! 000022D0000001210010C9F0000000210010CDF0000001210001F5000000002100003C53130001220001FA7000000031
! 0001FAF0000001310001F673B90002320000042000000021000006200000012100013AE000000021000AB7E000000121
! 0016E400000000210016E6000000012100000D200000002100000F20000001210001E820000000210001E83000000121
! 00013D5000000021000ABA500000012100010E00000000210001CA0000000121000013D000000021000013E000000121
! 00004060000000210000456000000121000029D000000021000A7B20000001210000139000000021000013A000000121
! 000019800000002100001990000001210001EBC0000000210001EBD00000012100003AB00000002100003CB000000121
! 000040E000000021000045E000000121000A7B6000000021000A7B7000000121000040A000000021000045A000000121
! 0001EC00000000210001EC10000001210010572000000021001059900000012100024B900000002100024D3000000121
! 0002C160000000210002C46000000121000019C000000021000026F00000012100003A700000002100003C7000000121
! 000A692000000021000A69300000012100000C500000003100000E5000000131000212B0000002310000526000000021
! 00005270000001210000266000000021000A7AA000000121001057A00000002100105A1000000121001057E000000021
! 00105A50000001210001FD00000000210001FD800000012100000460000000210000066000000121001E90A000000021
! 001E92C0000001210000228000000021000022900000012100013A2000000021000AB72000000121000A726000000021
! 000A7270000001210010C930000000210010CD3000000121000049A000000021000049B00000012100000D6000000021
! 00000F6000000121000010C000000021000010D0000001210010C970000000210010CD70000001210000162000000021
! 0000163000000121000019E00000002100002200000001210001E9700000002100000743080001220000392000000031
! 00003B200000013100003D00000002310001E300000000210001E310000001210001FA30000000310001FAB000000131
! 0001F633B900023200118A800000002100118C8000000121000216D000000021000217D0000001210002C9E000000021
! 0002C9F000000121000004E000000021000006E00000012100000B5000000031000039C00000013100003BC000000231
! 000048E000000021000048F000000121000A72A000000021000A72B00000012100104100000000210010438000000121
  000038A00000002100003AF0000001210001EFE0000000210001EFF00000012100118AC00000002100118CC000000121
  00001EA00000002100001EB0000001210001F060000000210001F0E0000001210001FC30000000310001FCC000000131
  00003B73B900023200010B40000000210002D14000000121000026A000000021000A7AE0000001210000412000000031
  00004320000001310001C800000002310001F860000000310001F8E0000001310001F063B90002320010C9B000000021
! 0010CDB000000121000A760000000021000A76100000012100024C800000002100024E200000012100001A4000000021
! 00001A5000000121000039F00000002100003BF00000012100010C40000000210002D2400000012100004A2000000021
! 00004A30000001210002C030000000210002C330000001210002CE00000000210002CE10000001210010576000000021
! 001059D0000001210001F960000000310001F9E0000001310001F263B900023200004E000000002100004E1000000121
! 0002C2A0000000210002C5A0000001210001ED00000000210001ED100000012100000C200000002100000E2000000121
! 00004E800000002100004E9000000121000A7A6000000021000A7A700000012100010F90000000210001CB9000000121
! 00001450000000210000146000000121000037C00000002100003FE0000001210001EC80000000210001EC9000000121
! 000041A000000021000043A00000012100000CA00000002100000EA0000001210001F860000000310001F8E000000131
! 0001F063B9000232000042100000003100004410000001310001C830000002310010404000000021001042C000000121
! 000FB02000000021000006606C000122000053F000000021000056F00000012100005470000000210000577000000121
! 00013B6000000021000AB8600000012100013EC000000021000ABBC000000121000FF2C000000021000FF4C000000121
! 000A7BA000000021000A7BB000000121000A648000000021000A64900000012100013C5000000021000AB95000000121
! 000FF24000000021000FF44000000121001040F0000000210010437000000121001041C0000000210010444000000121
! 001058300000002100105AA0000001210010C830000000210010CC300000012100002410000000210000242000000121
! 0001E760000000210001E7700000012100010BC0000000210002D1C0000001210002C220000000210002C52000000121
! 00010D00000000210001C90000000121000A768000000021000A769000000121000A732000000021000A733000000121
! 000011C000000021000011D000000121000042700000002100004470000001210001E400000000210001E41000000121
! 00118B100000002100118D10000001210000152000000021000015300000012100003A100000003100003C1000000131
! 00003F1000000231000039700000002100003B700000012100001AC00000002100001AD00000012100001E2000000021
! 00001E300000012100002180000000210000219000000121001E91A000000021001E93C0000001210000516000000021
! 00005170000001210001F270000000210001F2F000000121000A7C9000000021000A7CA0000001210001FE0000000021
! 0001FE800000012100021650000000210002175000000121000A66C000000021000A66D0000001210000393000000021
! 00003B300000012100005320000000210000562000000121000005600000002100000760000001210001F33000000021
! 0001F3B000000121000055400000002100005840000001210001C88000000031000A64A000000131000A64B000000231
! 000A68E000000021000A68F00000012100003D800000002100003D900000012100024C500000002100024DF000000121
! 0002CB20000000210002CB30000001210010C820000000210010CC200000012100000570000000210000077000000121
! 0010D500000000210010D70000000121000FF37000000021000FF570000001210001EF60000000210001EF7000000121
! 001E912000000021001E9340000001210001F120000000210001F1A0000001210016E530000000210016E73000000121
! 00004A600000002100004A7000000121000016A000000021000016B0000001210001F340000000210001F3C000000121
! 0002CDC0000000210002CDD00000012100001B1000000021000028A00000012100118A400000002100118C4000000121
! 0001E280000000210001E2900000012100001BF00000002100001F7000000121000018B000000021000018C000000121
! 00010A70000000210002D070000001210010D650000000210010D8500000012100001280000000210000129000000121
! 0001E6A0000000210001E6B00000012100010AB0000000210002D0B000000121000041F000000021000043F000000121
! 0002C2E0000000210002C5E0000001210010CAF0000000210010CEF00000012100104C500000002100104ED000000121
! 0010D510000000210010D710000001210001FE10000000210001FE900000012100003A600000003100003C6000000131
! 00003D50000002310002C0A0000000210002C3A000000121000050E000000021000050F0000001210010D5D000000021
! 0010D7D00000012100001040000000210000105000000121000037200000002100003730000001210001E8E000000021
! 0001E8F000000121000039600000002100003B60000001210001EFA0000000210001EFB00000012100003F2000000021
! 00003F9000000121000A640000000021000A64100000012100118A500000002100118C500000012100010EC000000021
! 0001CAC00000012100118A100000002100118C10000001210001FA70000000310001FAF0000001310001F673B9000232
  000016600000002100001670000001210001F370000000210001F3F0000001210010C860000000210010CC6000000121
  00013DD000000021000ABAD0000001210001F510000000210001F590000001210002C9A0000000210002C9B000000121
  00001FA00000002100001FB000000121000216900000002100021790000001210010D540000000210010D74000000121
--- 125,432 ----
  0210A751020000DA021000FA020010E902101CA902002CD802102CD902001EB802101EB90200012C0210012D02000252
  02102C70020004C3021004C4020024C4021024DE020104B5021104DD02002C0F02102C3F020005330210056302000195
  021001F602001F1302101F1B020104B8021104E00200055302100583020104250211044D020013D10210ABA1020004F4
! 021004F5020004C7021004C802010CAC02110CEC020004D0021004D10200A75C0210A75D02001E2C02101E2D02016EAA
! 02116EC5020010A802102D0802000464021004650200042602100446020004E4021004E5020010ED02101CAD0200A792
! 0210A79302001EDC02101EDD020104BC021104E4020105770211059E02001EA802101EA9020001B8021001B9020000C6
! 021000E60200FF300210FF500200A7CE0210A7CF0201041B0211044302001E0E02101E0F020004D4021004D502002CAE
! 02102CAF02002C6B02102C6C0200FF230210FF43020001840210018502016E4402116E64020105730211059A04000398
! 041003B8042003D1043003F4020013D40210ABA40201E9190211E93B020001870210018802002C1302102C430200A7A2
! 0210A7A30200019402100263020004160210043602002CBE02102CBF02001FA602101FAE020104C6021104EE02001F82
! 02101F8A020104C9021104F1020013E00210ABB00200024002102C7F0200A7BE0210A7BF02001F9202101F9A02000402
! 02100452020005360210056602000550021005800200A6820210A68302000386021003AC02001FE502101FEC020024C9
! 021024E3020000D3021000F3020010F002101CB002001E3C02101E3D02002C8002102C810201058A021105B102000156
! 0210015702001E7A02101E7B020013ED0210ABBD0200A73E0210A73F0200011802100119020002140210021503001E60
! 03101E6103201E9B02002C8A02102C8B0200A64C0210A64D03000395031003B5032003F5020001E6021001E702001F85
! 02101F8D020005120210051302001F6102101F690200A6680210A66902010594021105BB02001E1802101E19020013B2
! 0210AB82020104150211043D0201041802110440020002450210028C02001F7202101FC8020118B5021118D5020010B8
! 02102D18020004C0021004CF0201040B021104330200042302100443020010C502102D2502002C2D02102C5D02001F30
! 02101F38020013C10210AB910200A76C0210A76D020104CC021104F402001F7102101FBB0200FF330210FF530200216A
! 0210217A02001ECC02101ECD020003E8021003E90200A7D00210A7D10200005A0210007A02010CB002110CF0020001D9
! 021001DA02010587021105AE020001B5021001B6020005430210057302001F2202101F2A02001EA002101EA102010C8F
! 02110CCF02016E5402116E7402016EB502116ED002016E5702116E7702001D7D02102C630200A7D60210A7D70200A74C
! 0210A74D020013CE0210AB9E020000CF021000EF020010D902101C99020000450210006502000136021001370200040D
! 0210045D02016E4302116E6302001F7C02101FFA0200024A0210024B020004B8021004B902002CCA02102CCB02002CED
! 02102CEE0200019F02100275020003A4021003C40200A74E0210A74F020104C0021104E802001E1602101E17020013AF
! 0210AB7F020005000210050102002C8202102C83020010BD02102D1D0201E9160211E93802010CA302110CE302010C94
! 02110CD4020104C2021104EA030003A6031003C6032003D502016E4D02116E6D020118B4021118D4020013E90210ABB9
! 02001F4102101F49020002870210A7B1020005420210057202001E5802101E5902001F4302101F4B02002CEB02102CEC
! 020013EB0210ABBB02001FD102101FD902001EE802101EE9020013A30210AB73020003EE021003EF020118B8021118D8
! 02010C9E02110CDE0201E9200211E942020000FF02100178020104170211043F020118A9021118C902001FB002101FB8
! 02002C8802102C89020013A90210AB790201E9090211E92B020013C20210AB92020024B6021024D002001E5E02101E5F
! 02002C6902102C6A02016EA202116EBD0201041F021104470200037F021003F302000540021005700200039002101FD3
! 0300004B0310006B0320212A020004F8021004F9020013F3021013FB02016EA402116EBF020000C9021000E90200040F
! 0210045F020010B502102D150200A7460210A747020000CD021000ED02000476021004770200039E021003BE02001F20
! 02101F28020010FA02101CBA02002C2102102C5102001EA602101EA702001F8302101F8B0200053C0210056C02001F01
! 02101F0902002CC202102CC30200020802100209020013E30210ABB30200A7960210A79702001F6402101F6C02010592
! 021105B9020004BE021004BF02001F9102101F99020003E6021003E702001EE002101EE102001FF302101FFC02000413
! 021004330200042E0210044E020104CA021104F202002C0002102C30020010DB02101C9B020010F602101CB6020118BE
! 021118DE020001A7021001A8020010C302102D23020004150210043502001E1E02101E1F020005060210050702001E64
! 02101E65020000C7021000E70200047C0210047D02001E5202101E53020010F402101CB402010586021105AD0200046A
! 0210046B02002C2702102C5702010C8902110CC9020010A202102D020200FF320210FF5204000398041003B8042003D1
! 043003F4030003A9031003C90320212602001EDA02101EDB0201E9010211E9230200A79C0210A79D020010D302101C93
! 020024BC021024D60200FF2F0210FF4F0200025002102C6F02002C2902102C59020004B2021004B30201041902110441
! 020002100210021102002C1502102C4502016E4702116E670200A7540210A75502016E4502116E65030001C7031001C8
! 032001C90200047E0210047F020001FC021001FD0200020E0210020F020002440210028902001F7702101FDB02002CD6
! 02102CD702010589021105B0040004220410044204201C8404301C85020010E702101CA7020004FA021004FB020010D5
! 02101C9502001EAC02101EAD020010B702102D17020013A10210AB710200A7C20210A7C30201E9070211E929020013F5
! 021013FD0200019B0210A7DC02001EE202101EE302001F6202101F6A02001E9202101E93020001D5021001D602002C06
! 02102C3602010C8B02110CCB02001F7002101FBA020003EC021003ED0201E9150211E9370200216E0210217E020013C0
! 0210AB9002001EF402101EF50200FF3A0210FF5A020118BC021118DC02016EB602116ED1020004AA021004AB02002163
  0210217302001E1C02101E1D020013C80210AB98020118AF021118CF02010C9802110CD8020105710211059802010CA7
! 02110CE702016EA802116EC30200005102100071020004F2021004F302010CAA02110CEA020010AF02102D0F02002C8E
! 02102C8F02002CC402102CC502001E0A02101E0B02010D6002110D8002016E5002116E700201058E021105B502010411
! 02110439020104230211044B0200053A0210056A02001E6C02101E6D020104BE021104E6020104240211044C020010A9
! 02102D09020024C2021024DC02010C8102110CC1020013BC0210AB8C030004620310046303201C87020118A6021118C6
! 02001E4A02101E4B020021620210217202001ED402101ED5020010AA02102D0A020004EC021004ED02002C0C02102C3C
! 0200A79A0210A79B020004CB021004CC020104BD021104E502000370021003710201E9140211E936020003DA021003DB
! 02001F3502101F3D02010D5202110D7203000392031003B2032003D002002C9602102C9702016E5102116E7102000391
! 021003B102000534021005640200041B0210043B020013DF0210ABAF02002C2C02102C5C020001240210012502010CA2
! 02110CE202001E8C02101E8D02001EB402101EB50200016C0210016D02001E0202101E030200019A0210023D02000102
! 0210010302001F1402101F1C0200FF280210FF4802010C8002110CC0020010EE02101CAE02001F5502101F5D0200A77B
! 0210A77C02000059021000790200014A0210014B02001E2402101E25020013BD0210AB8D02002CBC02102CBD0201040D
! 0211043502010D5C02110D7C0201058F021105B6020118A7021118C70200A6600210A66102000514021005150200052E
! 0210052F020004A4021004A5020004000210045002016E5802116E780200A64E0210A64F0200FF2E0210FF4E02010D5B
! 02110D7B0201040C02110434020000DB021000FB020001CD021001CE020010E802101CA80200054F0210057F0200A738
! 0210A73902016E5F02116E7F02001D790210A77D02016EB702116ED20201E90F0211E93102002C0702102C37020010A3
! 02102D030200A7A00210A7A1030004210310044103201C830200A6800210A681020002820210A7C5020024CB021024E5
! 02000401021004510200A7580210A7590200005802100078020001930210026002010CA102110CE10200054E0210057E
! 0200018602100254020013DC0210ABAC020024BD021024D7020001B3021001B40200A6960210A6970200021602100217
! 02001ECE02101ECF02002168021021780201E90E0211E93002002C1202102C4202002C2F02102C5F02010CAB02110CEB
! 02001E8602101E87030004120310043203201C80020013D60210ABA602001EBA02101EBB0201E91B0211E93D0201041A
! 0211044202001EEE02101EEF0200FF310210FF510200A7BC0210A7BD020001DB021001DC020001A60210028002001F07
! 02101F0F020118BD021118DD020000C8021000E8020004D2021004D3020010E102101CA1020013B70210AB8702010585
! 021105AC02016E4B02116E6B02000172021001730200049E0210049F020004E6021004E7020010B002102D1002002C9C
! 02102C9D020001EE021001EF020104B4021104DC02010C8702110CC7020013BA0210AB8A02001E1002101E1102000230
! 02100231020004280210044802002CD002102CD1020118A0021118C0020003E0021003E102010588021105AF0200A780
! 0210A781020010F502101CB50200053B0210056B020000D5021000F5030004140310043403201C8102001FA402101FAC
! 0200012A0210012B0200005202100072020024B7021024D10201E9080211E92A04000398041003B8042003D1043003F4
! 02000202021002030200027102102C6E020004700210047102002C1B02102C4B0200048A0210048B0200A7520210A753
! 0200FF250210FF450200040702100457020000C1021000E102001E4402101E4502001F9702101F9F0200054802100578
! 02016EA902116EC40200021C0210021D020013E50210ABB50200051A0210051B02002CB602102CB70200A6540210A655
! 020104030211042B02001E7202101E73020010D402101C94020104C1021104E902010C8A02110CCA02001E2A02101E2B
! 030004620310046303201C8702001F7602101FDA03000053031000730320017F02002C2602102C56020013A00210AB70
! 020004C5021004C6020003FA021003FB0200055502100585020013E80210ABB8030001C7031001C8032001C902001F42
! 02101F4A02001F6702101F6F0201057C021105A30200A7B40210A7B50200A6980210A6990201E9040211E9260200040C
! 0210045C020010DA02101C9A020000D0021000F002016E4602116E6602001EC202101EC3020001E4021001E502000044
! 021000640200017D0210017E02001F2102101F290200FF390210FF59020013AC0210AB7C02001F0002101F08020003A5
! 021003C50200015802100159020104CF021104F702001E3A02101E3B0200A72C0210A72D02010D6302110D8302000112
! 0210011302001E3602101E3702016E4E02116E6E02001F7D02101FFB020004940210049502001E8002101E8102000116
! 021001170200042D0210044D020013F2021013FA020001790210017A020004DA021004DB02002CA802102CA9020000CC
! 021000EC020001A2021001A3030003A1031003C1032003F102001E7C02101E7D020118B7021118D7020013CF0210AB9F
! 020104120211043A020005200210052102002C1C02102C4C0200026B02102C6202010591021105B80200015C0210015D
! 0200A6520210A6530200FF260210FF46020001E8021001E9020010B602102D160200A6560210A6570200051C0210051D
! 020013C30210AB93020104CB021104F302001EC602101EC7020001E0021001E102001F6302101F6B02002C0102102C31
! 0201E9000211E92202001E7802101E79020024CE021024E80200A76A0210A76B0200011A0210011B0200042902100449
! 02001F8402101F8C020010D602101C9602001FB102101FB90200A7620210A76302010CB202110CF202002C2002102C50
! 020010BE02102D1E0201041E02110446020004E2021004E3020004DE021004DF020013EA0210ABBA0200054102100571
! 020005450210057502001F2502101F2D020001540210015502002C2402102C54020002640210A7CB0200018102100253
! 030003A3031003C2032003C3020118B3021118D3020010BA02102D1A020001800210024302001E3E02101E3F020010FF
! 02101CBF02010C8802110CC8020010D202101C920200A76E0210A76F03001C880310A64A0320A64B020010B202102D12
! 020013C70210AB9702000518021005190200A7660210A767020001EC021001ED020104C3021104EB020105740211059B
! 020013EE0210ABBE0201E91C0211E93E020010E202101CA202002C0502102C35020004A0021004A102001E4202101E43
! 020013B40210AB84020118BF021118DF020001500210015102002CB002102CB1020013A40210AB74020004C1021004C2
! 030001CA031001CB032001CC0200004C0210006C020104C7021104EF02016EA302116EBE02016E5A02116E7A02000222
! 02100223020004900210049102002CF202102CF302010595021105BC0200053D0210056D02000388021003AD02000549
! 02100579020013E20210ABB202016E4A02116E6A02001EFC02101EFD02001F9002101F98020004D6021004D70200A7B8
! 0210A7B9030004140310043403201C8102010CAD02110CED020010F702101CB702016E5502116E750200A7280210A729
! 02001E0002101E010200023202100233020010A502102D0502001F1502101F1D030003A9031003C9032021260200013B
! 0210013C0200040802100458020000DC021000FC02001EBE02101EBF02002C1802102C480200A7A80210A7A90200216B
! 0210217B02002C1002102C4002002CDE02102CDF02016EB302116ECE0200029E0210A7B0020000D4021000F4020010EF
! 02101CAF0200055102100581020013DA0210ABAA020005350210056502010C9D02110CDD020024C6021024E002000410
! 0210043002001EB602101EB7020104160211043E02016E4202116E6202010D5E02110D7E020001640210016502002CA0
! 02102CA102001E2E02101E2F02010C9502110CD502000498021004990200010A0210010B020118AA021118CA02010D53
! 02110D7302001E8802101E890200052802100529020013D70210ABA70200A65A0210A65B0200022A0210022B02001FA5
! 02101FAD020104B3021104DB0201E90C0211E92E020024BB021024D5020001F4021001F50200A6900210A6910200FF29
! 0210FF4902002C7502102C7602002CB802102CB9020104010211042902002C0D02102C3D020104D0021104F80201E913
! 0211E935020001AF021001B00200A7C70210A7C8020013BF0210AB8F020104020211042A020010EA02101CAA020104BF
! 021104E70201058D021105B402002164021021740200018E021001DD020001D3021001D402001F1002101F1802001F57
! 02101F5F02001ED202101ED30200FF2A0210FF4A02001E0402101E05020004EE021004EF02002C9402102C95020000C0
! 021000E0020013DB0210ABAB020001B20210028B020104260211044E0200A6620210A663020000540210007402000556
! 021005860300042A0310044A03201C86020104220211044A02001F3602101F3E0200A7940210A7C4020004CD021004CE
! 020104BB021104E30200023B0210023C020001CF021001D00200050C0210050D0200A6460210A64702001E4602101E47
! 02010CA602110CE60200A7790210A77A0200FF360210FF56020118A2021118C2020004EA021004EB0200041D0210043D
! 02016E5202116E720200A6880210A68902001EB202101EB3020021600210217002001ED602101ED7020024C3021024DD
! 02016E5E02116E7E020004AC021004AD0201E9100211E9320200023E02102C6602002CB402102CB50200FF2D0210FF4D
! 0200014C0210014D02001E2202101E23020013BB0210AB8B020001430210014402010581021105A80200017002100171
! 02001E9402101E9502002C2802102C580201040E02110436020104B2021104DA0200A7980210A799020013B80210AB88
! 02001E7002101E71040004220410044204201C8404301C8502010C8502110CC502001EAE02101EAF0200012202100123
! 02010C8C02110CCC020104050211042D0200042002100440020001AE021002880200021A0210021B0200038C021003CC
! 02016EAB02116EC602001F9502101F9D0400034504100399042003B904301FBE0200018A0210025702002C9002102C91
  020010B102102D110200011E0210011F02001E0802101E090200A7C00210A7C102001C8902101C8A02010580021105A7
  0200041C0210043C0200FB050210FB060200A7A40210A7A502001E7402101E7502002C1402102C44020013E70210ABB7
  0201E90D0211E92F020013A50210AB75020010F302101CB3020024BA021024D40200013F021001400200039D021003BD
  02002CE202102CE3020010A102102D0102000508021005090200004D0210006D02000389021003AE0200048C0210048D
  02002C0402102C340200216F0210217F020004B0021004B102002CD202102CD30200A7340210A73502010584021105AB
  0200005002100070020001600210016102010CA902110CE902001E3202101E330200020002100201020118AB021118CB
! 0200A7860210A787020118BB021118DB020118AE021118CE0200021E0210021F02016EAF02116ECA020003AA021003CA
! 020010C202102D22020013C40210AB9402000539021005690200A74A0210A74B020000C3021000E30200046E0210046F
! 0200054D0210057D020010E302101CA3020003DE021003DF020024CA021024E40400034504100399042003B904301FBE
! 0200A7DA0210A7DB0200A75A0210A75B020004190210043902002C0902102C390200037D021003FF02001F2602101F2E
! 02010C9902110CD9020021830210218402002C2302102C53020001320210013302001E5602101E57020010AE02102D0E
! 0200A7400210A741020000DD021000FD020010E602101CA603001E6003101E6103201E9B02000478021004790200022E
! 0210022F0200A6940210A6950200052C0210052D02010570021105970200A6660210A667020013A80210AB7802010C96
! 02110CD6020118B2021118D202010D6402110D840200020A0210020B020024BF021024D9020013CB0210AB9B02010C9C
! 02110CDC0300041E0310043E03201C8202001E8402101E8502001EF002101EF102010D5702110D7702010D5A02110D7A
! 02016E5902116E7902002CA402102CA50200A7240210A7250200049C0210049D0200010E0210010F020104D3021104FB
! 0201E9030211E92502016EAC02116EC70200019102100192020013DE0210ABAE030003A0031003C0032003D6020013AD
! 0210AB7D020002060210020702001F4502101F4D020003EA021003EB020010BB02102D1B02000474021004750200FF38
! 0210FF58020004FE021004FF02002C8402102C85020104130211043B02002C1F02102C4F02001E5C02101E5D02001EE4
! 02101EE502002CC802102CC9020104CE021104F6020004BA021004BB02010D6202110D82020000D1021000F102000472
! 02100473020118B6021118D602001F7802101FF8020000430210006302001EA202101EA30201E9050211E92702001F24
! 02101F2C0200019D02100272020004B6021004B7020000DF02101E9E02001F8702101F8F02001E1402101E1502001EE6
! 02101EE70200040B0210045B02000409021004590201057D021105A4020003A8021003C802001E5A02101E5B0201057F
! 021105A60200054402100574020010FE02101CBE02001E1202101E13020010B902102D190200004702100067020004FC
! 021004FD02010C9202110CD202002C8602102C8702001E1A02101E1B02010C9002110CD0020010BF02102D1F020013CA
! 0210AB9A02016E4902116E690200004102100061020001BC021001BD02001EEA02101EEB020005020210050302000248
! 02100249020010DF02101C9F030001C4031001C5032001C60200054602100576020013EF0210ABBF02002CCC02102CCD
! 020010D702101C97020013A70210AB770200047A0210047B02000134021001350300042A0310044A03201C8602002C19
! 02102C4902000204021002050200025C0210A7AB020024CF021024E902001E5402101E5502010579021105A002016EB8
! 02116ED30200054A0210057A02016EA602116EC10200A6840210A6850200FF270210FF4702001F0502101F0D02002132
! 0210214E0200024C0210024D0200A7D20210A7D302002CC602102CC7020013B50210AB8502002C1D02102C4D0200023F
! 02102C7E0200A7420210A74302001E6202101E630201040802110430030000B50310039C032003BC02001F8102101F89
! 02010C9A02110CDA0200012E0210012F0200040302100453020001FE021001FF0400034504100399042003B904301FBE
! 0200017402100175020003CF021003D7020024CD021024E702001FB302101FBC020118AD021118CD0200A7440210A745
! 020000D9021000F902001E0C02101E0D02002C1702102C47020003E2021003E30200026C0210A7AD0200A7560210A757
! 0200040502100455020001970210026802001F6002101F6802001EEC02101EED02002C8C02102C8D020010F202101CB2
! 0200A7CC0210A7CD02010D5902110D790201040A02110432020013C60210AB960201E91D0211E93F020104B6021104DE
! 0200042402100444020001A9021002830300039A031003BA032003F0020010E502101CA5020104C8021104F002010407
! 0211042F020013D00210ABA002001FA202101FAA0200046C0210046D020010A002102D000200A7820210A783030000C5
! 031000E50320212B020004B4021004B502002CCE02102CCF0200A73A0210A73B0200FF210210FF4102010D5602110D76
! 020104B9021104E102001EA402101EA50200038F021003CE020024BE021024D8020003B002101FE30200004902100069
! 02010CA802110CE802000246021002470201E91F0211E94102001F7302101FC902002C6702102C680200216602102176
! 020001000210010102016EA002116EBB020003E4021003E5020013D20210ABA20200A7D40210A7D50200A79E0210A79F
  02001FA002101FA802010CB102110CF102016E5D02116E7D020010C102102D210200A7F50210A7F6020013BE0210AB8E
! 0200042C0210044C02016E4102116E61020010DD02101C9D02001F9302101F9B0200024E0210024F020004BC021004BD
! 0200017602100177020013AB0210AB7B020013E10210ABB1020005040210050502001F0302101F0B0200A6860210A687
! 0200054C0210057C02016E4F02116E6F020010EB02101CAB020013D90210ABA90200023A02102C65020004A8021004A9
! 02002CDA02102CDB0300041E0310043E03201C8202000394021003B402002C7202102C73020005100210051102001E26
! 02101E270200A6420210A643020004C9021004CA020001470210014802001EB002101EB10200A75E0210A75F0201058C
! 021105B30200A73C0210A73D020104D1021104F9020104D2021104FA02010590021105B7020000550210007502001F11
! 02101F190200037B021003FD02001F3102101F3902002CBA02102CBB02000552021005820200A68C0210A68D02001E6E
! 02101E6F0200216702102177020000DE021000FE020001900210025B02001EF802101EF902010D5F02110D7F020104B0
! 021104D802010C8E02110CCE02002C0802102C380200016E0210016F02016E5C02116E7C020010CD02102D2D02001F7B
! 02101FEB02001E9002101E91020013B30210AB83020001D1021001D202016EB402116ECF02001F5302101F5B02000126
! 0210012702001E4802101E4902002C9802102C99020104000211042802010CA402110CE4020118B9021118D9020013B0
! 0210AB8002001ED802101ED902001F7402101FCA040004220410044204201C8404301C8502001EF202101EF302002161
! 021021710201042002110448030001F1031001F2032001F3020001D7021001D80200A68A0210A68B020003F7021003F8
! 0200FF350210FF55020003DC021003DD02010C8D02110CCD02000418021004380200021202100213020004F0021004F1
! 020024C1021024DB0200050A0210050B0201E9170211E9390200A6440210A6450200053702100567020010AC02102D0C
! 020010AD02102D0D020024C7021024E1020004600210046102002C2B02102C5B02016E5602116E76020010C702102D27
! 020104060211042E02002CD402102CD5020010F102101CB102001F7A02101FEA02002C0B02102C3B0200FF340210FF54
! 0200041702100437020118BA021118DA030001F1031001F2032001F303000395031003B5032003F5020001B702100292
! 0200018F0210025902000538021005680200A66A0210A66B02001F3202101F3A02010421021104490200052A0210052B
! 02000425021004450200A7840210A7850200004F0210006F0200A6640210A665020104B1021104D9020000C4021000E4
! 02010CA502110CE502001EAA02101EAB020013D80210ABA802010D5502110D75020010E402101CA4020000D8021000F8
! 02016EAE02116EC9030001CA031001CB032001CC020010D102101C91020105750211059C0200216C0210217C02002C02
! 02102C3202010D5802110D780200A7D80210A7D90200FF220210FF4202016E5B02116E7B0200040402100454020010B3
! 02102D1302001ECA02101ECB02010409021104310201E9180211E93A020004F6021004F702002CC002102CC102001E20
! 02101E21020104B7021104DF0200039B021003BB020001960210026902002C2502102C550200A7900210A7910200A764
! 0210A7650200020C0210020D02001F9402101F9C020118B0021118D0020001820210018302002CAC02102CAD02001F80
! 02101F88020024CC021024E60200025102102C6D0200048002100481020013E60210ABB6020024B8021024D20200054B
! 0210057B020013AA0210AB7A0300004B0310006B0320212A020002610210A7AC02000141021001420300039A031003BA
! 032003F0020010F802101CB8020104C4021104EC0200018902100256020010DE02101C9E02001E6802101E69020104BA
! 021104E202001F0402101F0C020105780211059F020004110210043102010582021105A902000466021004670200A736
! 0210A737020000CB021000EB020010C002102D20020104270211044F020001DE021001DF02002C9202102C9302000106
! 0210010702001E4E02101E4F0200042B0210044B0200A7480210A74902002C1102102C410200A7B30210AB530200053E
! 0210056E0200014E0210014F020013D30210ABA302000524021005250200A65E0210A65F020001F8021001F9020004AE
! 021004AF0200A77E0210A77F030003A0031003C0032003D6020002650210A78D0200FF2B0210FF4B02001FA102101FA9
! 02001EDE02101EDF020013B90210AB8902000168021001690200022602100227020013F1021013F902001E0602101E07
! 02016EA702116EC202000120021001210201041D0211044502001F6602101F6E020010A602102D0602010C9102110CD1
! 02001D8E0210A7C602010C8402110CC402010CAE02110CEE020118A3021118C30200004802100068020013CC0210AB9C
! 0201E91E0211E9400200038E021003CD0200053102100561";
  return SCE(t[i]);
  }
  @property FCE fullCaseTable(size_t index) nothrow @nogc @safe pure
  {
  static immutable ulong[] t = x"
! 0016EB20000000210016ECD0000001210010CAE0000000210010CEE00000012100004960000000210000497000000121
  001E911000000021001E933000000121000A722000000021000A7230000001210001F790000000210001FF9000000121
  0001F440000000210001F4C000000121000015A000000021000015B00000012100010FD0000000210001CBD000000121
  0010D610000000210010D810000001210001E380000000210001E39000000121000FB16000000021000057E576000122
  0016E4C0000000210016E6C0000001210001F230000000210001F2B000000121001E921000000021001E943000000121
! 00001A000000002100001A100000012100003A300000003100003C200000013100003C3000000231001E90B000000021
! 001E92D00000012100004DC00000002100004DD0000001210002CA60000000210002CA7000000121000017B000000021
! 000017C000000121001E906000000021001E92800000012100010DC0000000210001C9C00000012100104CD000000021
! 00104F50000001210001F650000000210001F6D000000121000051E000000021000051F00000012100010D8000000021
! 0001C980000001210002C1A0000000210002C4A000000121000027D0000000210002C64000000121000A69A000000021
! 000A69B0000001210001F020000000210001F0A000000121000052200000002100005230000001210002C60000000021
! 0002C610000001210001FB700000002100003B13423B9123000A650000000021000A651000000121000A65C000000021
! 000A65D0000001210002C1E0000000210002C4E0000001210001FB30000000310001FBC00000013100003B13B9000232
! 00013C9000000021000AB9900000012100013CD000000021000AB9D00000012100000CE00000002100000EE000000121
! 0001E7E0000000210001E7F0000001210010414000000021001043C00000012100013F000000002100013F8000000121
! 0001EC40000000210001EC5000000121000A78B000000021000A78C00000012100001140000000210000115000000121
! 000042F000000021000044F000000121001E902000000021001E92400000012100004D800000002100004D9000000121
! 0002CAA0000000210002CAB0000001210000110000000021000011100000012100004920000000210000493000000121
! 0001E340000000210001E3500000012100013F400000002100013FC00000012100002240000000210000225000000121
! 0002CA20000000210002CA3000000121000A72E000000021000A72F0000001210016E480000000210016E68000000121
! 000004A000000021000006A00000012100013A6000000021000AB76000000121000015E000000021000015F000000121
! 00001C400000003100001C500000013100001C60000002310001F400000000210001F48000000121000A658000000021
! 000A659000000121000022C000000021000022D0000001210010C9F0000000210010CDF0000001210001F50000000021
! 00003C53130001220001FA70000000310001FAF0000001310001F673B900023200000420000000210000062000000121
! 00013AE000000021000AB7E0000001210016E400000000210016E6000000012100000D200000002100000F2000000121
! 0001E820000000210001E8300000012100013D5000000021000ABA500000012100010E00000000210001CA0000000121
! 000013D000000021000013E00000012100004060000000210000456000000121000029D000000021000A7B2000000121
! 0000139000000021000013A000000121000019800000002100001990000001210001EBC0000000210001EBD000000121
! 00003AB00000002100003CB000000121000040E000000021000045E000000121000A7B6000000021000A7B7000000121
! 000040A000000021000045A0000001210001EC00000000210001EC100000012100105720000000210010599000000121
! 00024B900000002100024D30000001210002C160000000210002C46000000121000019C000000021000026F000000121
! 00003A700000002100003C7000000121000A692000000021000A69300000012100000C500000003100000E5000000131
! 000212B000000231000052600000002100005270000001210000266000000021000A7AA000000121001057A000000021
! 00105A1000000121001057E00000002100105A50000001210001FD00000000210001FD80000001210000046000000021
! 0000066000000121001E90A000000021001E92C0000001210000228000000021000022900000012100013A2000000021
! 000AB72000000121000A726000000021000A7270000001210010C930000000210010CD3000000121000049A000000021
! 000049B00000012100000D600000002100000F6000000121000010C000000021000010D0000001210010C97000000021
! 0010CD700000012100001620000000210000163000000121000019E00000002100002200000001210001E97000000021
! 00000743080001220016EA10000000210016EBC000000121000039200000003100003B200000013100003D0000000231
! 0001E300000000210001E310000001210001FA30000000310001FAB0000001310001F633B900023200118A8000000021
! 00118C8000000121000216D000000021000217D0000001210002C9E0000000210002C9F000000121000004E000000021
! 000006E00000012100000B5000000031000039C00000013100003BC000000231000048E000000021000048F000000121
! 000A72A000000021000A72B000000121001041000000002100104380000001210016EA50000000210016EC0000000121
  000038A00000002100003AF0000001210001EFE0000000210001EFF00000012100118AC00000002100118CC000000121
  00001EA00000002100001EB0000001210001F060000000210001F0E0000001210001FC30000000310001FCC000000131
  00003B73B900023200010B40000000210002D14000000121000026A000000021000A7AE0000001210000412000000031
  00004320000001310001C800000002310001F860000000310001F8E0000001310001F063B90002320010C9B000000021
! 0010CDB000000121000A760000000021000A76100000012100024C800000002100024E20000001210016EB1000000021
! 0016ECC00000012100001A400000002100001A5000000121000039F00000002100003BF00000012100010C4000000021
! 0002D2400000012100004A200000002100004A30000001210002C030000000210002C330000001210002CE0000000021
! 0002CE10000001210010576000000021001059D0000001210016EAD0000000210016EC80000001210001F96000000031
! 0001F9E0000001310001F263B900023200004E000000002100004E10000001210002C2A0000000210002C5A000000121
! 0001ED00000000210001ED100000012100000C200000002100000E200000012100004E800000002100004E9000000121
! 000A7A6000000021000A7A700000012100010F90000000210001CB900000012100001450000000210000146000000121
! 000037C00000002100003FE0000001210001EC80000000210001EC9000000121000041A000000021000043A000000121
! 00000CA00000002100000EA0000001210001F860000000310001F8E0000001310001F063B90002320000421000000031
! 00004410000001310001C830000002310010404000000021001042C000000121000FB02000000021000006606C000122
! 000053F000000021000056F0000001210000547000000021000057700000012100013B6000000021000AB86000000121
! 00013EC000000021000ABBC000000121000FF2C000000021000FF4C000000121000A7BA000000021000A7BB000000121
! 000A648000000021000A64900000012100013C5000000021000AB95000000121000FF24000000021000FF44000000121
! 001040F0000000210010437000000121001041C0000000210010444000000121001058300000002100105AA000000121
! 0010C830000000210010CC3000000121000024100000002100002420000001210001E760000000210001E77000000121
! 00010BC0000000210002D1C0000001210002C220000000210002C5200000012100010D00000000210001C90000000121
! 000A768000000021000A769000000121000A732000000021000A733000000121000011C000000021000011D000000121
! 000042700000002100004470000001210001E400000000210001E4100000012100118B100000002100118D1000000121
! 0000152000000021000015300000012100003A100000003100003C100000013100003F10000002310000397000000021
! 00003B700000012100001AC00000002100001AD00000012100001E200000002100001E30000001210000218000000021
! 0000219000000121001E91A000000021001E93C000000121000051600000002100005170000001210001F27000000021
! 0001F2F000000121000A7C9000000021000A7CA0000001210001FE00000000210001FE80000001210002165000000021
! 0002175000000121000A66C000000021000A66D000000121000039300000002100003B30000001210000532000000021
! 0000562000000121000005600000002100000760000001210001F330000000210001F3B0000001210000554000000021
! 00005840000001210001C88000000031000A64A000000131000A64B000000231000A68E000000021000A68F000000121
! 00003D800000002100003D900000012100024C500000002100024DF0000001210002CB20000000210002CB3000000121
! 0010C820000000210010CC2000000121000005700000002100000770000001210010D500000000210010D70000000121
! 000FF37000000021000FF570000001210001EF60000000210001EF7000000121001E912000000021001E934000000121
! 0001F120000000210001F1A0000001210016E530000000210016E7300000012100004A600000002100004A7000000121
! 000016A000000021000016B0000001210001F340000000210001F3C0000001210002CDC0000000210002CDD000000121
! 00001B1000000021000028A00000012100118A400000002100118C40000001210001E280000000210001E29000000121
! 00001BF00000002100001F7000000121000018B000000021000018C00000012100010A70000000210002D07000000121
! 0010D650000000210010D85000000121000012800000002100001290000001210001E6A0000000210001E6B000000121
! 00010AB0000000210002D0B000000121000041F000000021000043F0000001210002C2E0000000210002C5E000000121
! 0010CAF0000000210010CEF00000012100104C500000002100104ED0000001210010D510000000210010D71000000121
! 0001FE10000000210001FE900000012100003A600000003100003C600000013100003D50000002310002C0A000000021
! 0002C3A000000121000050E000000021000050F0000001210010D5D0000000210010D7D0000001210000104000000021
! 0000105000000121000037200000002100003730000001210001E8E0000000210001E8F0000001210000396000000021
! 00003B60000001210001EFA0000000210001EFB00000012100003F200000002100003F9000000121000A640000000021
! 000A64100000012100118A500000002100118C500000012100010EC0000000210001CAC00000012100118A1000000021
! 00118C10000001210001FA70000000310001FAF0000001310001F673B90002320016EB00000000210016ECB000000121
  000016600000002100001670000001210001F370000000210001F3F0000001210010C860000000210010CC6000000121
  00013DD000000021000ABAD0000001210001F510000000210001F590000001210002C9A0000000210002C9B000000121
  00001FA00000002100001FB000000121000216900000002100021790000001210010D540000000210010D74000000121
*************** static immutable ulong[] t = x"
*** 437,487 ****
  00005830000001210010425000000021001044D00000012100013D1000000021000ABA100000012100004F4000000021
  00004F500000012100004C700000002100004C800000012100104B500000002100104DD00000012100004D0000000021
  00004D1000000121000A75C000000021000A75D0000001210010CAC0000000210010CEC0000001210001E2C000000021
! 0001E2D00000012100010A80000000210002D08000000121000046400000002100004650000001210000426000000021
! 000044600000012100004E400000002100004E500000012100010ED0000000210001CAD000000121000A792000000021
! 000A7930000001210001EDC0000000210001EDD00000012100104BC00000002100104E40000001210010577000000021
! 001059E0000001210001EA80000000210001EA900000012100001B800000002100001B900000012100000C6000000021
! 00000E6000000121000FF30000000021000FF500000001210016E440000000210016E64000000121001041B000000021
! 00104430000001210001E0E0000000210001E0F00000012100004D400000002100004D50000001210002CAE000000021
! 0002CAF0000001210002C6B0000000210002C6C000000121000FF23000000021000FF430000001210000184000000021
! 00001850000001210010573000000021001059A000000121000039800000004100003B800000014100003D1000000241
! 00003F400000034100013D4000000021000ABA4000000121001E919000000021001E93B0000001210000187000000021
! 00001880000001210002C130000000210002C43000000121000A7A2000000021000A7A30000001210000194000000021
! 0000263000000121000041600000002100004360000001210002CBE0000000210002CBF0000001210001FA6000000031
! 0001FAE0000001310001F663B900023200104C600000002100104EE0000001210001F820000000310001F8A000000131
! 0001F023B900023200104C900000002100104F100000012100013E0000000021000ABB00000001210000240000000021
! 0002C7F000000121000A7BE000000021000A7BF0000001210001F920000000310001F9A0000001310001F223B9000232
! 000040200000002100004520000001210000536000000021000056600000012100005500000000210000580000000121
! 000A682000000021000A683000000121000038600000002100003AC0000001210001FE50000000210001FEC000000121
! 00024C900000002100024E300000012100000D300000002100000F300000012100010F00000000210001CB0000000121
! 0001E3C0000000210001E3D0000001210002C800000000210002C810000001210001F970000000310001F9F000000131
! 0001F273B9000232001058A00000002100105B1000000121000015600000002100001570000001210001E7A000000021
! 0001E7B00000012100013ED000000021000ABBD000000121000A73E000000021000A73F0000001210000118000000021
! 0000119000000121000021400000002100002150000001210001E600000000310001E610000001310001E9B000000231
! 0002C8A0000000210002C8B000000121000A64C000000021000A64D000000121000039500000003100003B5000000131
! 00003F500000023100001E600000002100001E70000001210001F850000000310001F8D0000001310001F053B9000232
! 000051200000002100005130000001210001F610000000210001F69000000121000A668000000021000A669000000121
! 001059400000002100105BB0000001210001E180000000210001E1900000012100013B2000000021000AB82000000121
! 0010415000000021001043D000000121001041800000002100104400000001210000245000000021000028C000000121
! 0001F720000000210001FC800000012100118B500000002100118D500000012100010B80000000210002D18000000121
! 00004C000000002100004CF000000121001040B000000021001043300000012100004230000000210000443000000121
! 00010C50000000210002D250000001210002C2D0000000210002C5D0000001210001F300000000210001F38000000121
! 00013C1000000021000AB91000000121000A76C000000021000A76D00000012100104CC00000002100104F4000000121
! 0001F710000000210001FBB000000121000FF33000000021000FF53000000121000216A000000021000217A000000121
! 000014900000002100002BC06E00012200003E800000002100003E9000000121000A7D0000000021000A7D1000000121
! 000005A000000021000007A0000001210010CB00000000210010CF000000012100001D900000002100001DA000000121
! 0001ECC0000000210001ECD00000012100001B500000002100001B600000012100005430000000210000573000000121
! 0001F220000000210001F2A000000121001058700000002100105AE0000001210001EA00000000210001EA1000000121
! 0010C8F0000000210010CCF0000001210016E540000000210016E740000001210001FB400000002100003AC3B9000122
! 0016E570000000210016E770000001210001D7D0000000210002C63000000121000A7D6000000021000A7D7000000121
! 000A74C000000021000A74D00000012100013CE000000021000AB9E00000012100000CF00000002100000EF000000121
! 00010D90000000210001C990000001210000045000000021000006500000012100001360000000210000137000000121
! 000040D000000021000045D0000001210016E430000000210016E630000001210001F7C0000000210001FFA000000121
! 000024A000000021000024B00000012100004B800000002100004B90000001210002CCA0000000210002CCB000000121
! 0002CED0000000210002CEE000000121000019F000000021000027500000012100003A400000002100003C4000000121
! 000FB17000000021000057456D000122000A74E000000021000A74F00000012100104C000000002100104E8000000121
! 0001E160000000210001E1700000012100013AF000000021000AB7F00000012100005000000000210000501000000121
! 0002C820000000210002C8300000012100010BD0000000210002D1D000000121001E916000000021001E938000000121
  0010CA30000000210010CE30000001210010C940000000210010CD400000012100104C200000002100104EA000000121
  00003A600000003100003C600000013100003D50000002310001F930000000310001F9B0000001310001F233B9000232
  00118B400000002100118D400000012100013E9000000021000ABB90000001210016E4D0000000210016E6D000000121
--- 444,495 ----
  00005830000001210010425000000021001044D00000012100013D1000000021000ABA100000012100004F4000000021
  00004F500000012100004C700000002100004C800000012100104B500000002100104DD00000012100004D0000000021
  00004D1000000121000A75C000000021000A75D0000001210010CAC0000000210010CEC0000001210001E2C000000021
! 0001E2D0000001210016EAA0000000210016EC500000012100010A80000000210002D080000001210000464000000021
! 00004650000001210000426000000021000044600000012100004E400000002100004E500000012100010ED000000021
! 0001CAD000000121000A792000000021000A7930000001210001EDC0000000210001EDD00000012100104BC000000021
! 00104E40000001210010577000000021001059E0000001210001EA80000000210001EA900000012100001B8000000021
! 00001B900000012100000C600000002100000E6000000121000FF30000000021000FF50000000121000A7CE000000021
! 000A7CF000000121001041B00000002100104430000001210001E0E0000000210001E0F00000012100004D4000000021
! 00004D50000001210002CAE0000000210002CAF0000001210002C6B0000000210002C6C000000121000FF23000000021
! 000FF43000000121000018400000002100001850000001210016E440000000210016E640000001210010573000000021
! 001059A000000121000039800000004100003B800000014100003D100000024100003F400000034100013D4000000021
! 000ABA4000000121001E919000000021001E93B000000121000018700000002100001880000001210002C13000000021
! 0002C43000000121000A7A2000000021000A7A3000000121000019400000002100002630000001210000416000000021
! 00004360000001210002CBE0000000210002CBF0000001210001FA60000000310001FAE0000001310001F663B9000232
! 00104C600000002100104EE0000001210001F820000000310001F8A0000001310001F023B900023200104C9000000021
! 00104F100000012100013E0000000021000ABB000000012100002400000000210002C7F000000121000A7BE000000021
! 000A7BF0000001210001F920000000310001F9A0000001310001F223B900023200004020000000210000452000000121
! 0000536000000021000056600000012100005500000000210000580000000121000A682000000021000A683000000121
! 000038600000002100003AC0000001210001FE50000000210001FEC00000012100024C900000002100024E3000000121
! 00000D300000002100000F300000012100010F00000000210001CB00000001210001E3C0000000210001E3D000000121
! 0002C800000000210002C810000001210001F970000000310001F9F0000001310001F273B9000232001058A000000021
! 00105B1000000121000015600000002100001570000001210001E7A0000000210001E7B00000012100013ED000000021
! 000ABBD000000121000A73E000000021000A73F000000121000011800000002100001190000001210000214000000021
! 00002150000001210001E600000000310001E610000001310001E9B0000002310002C8A0000000210002C8B000000121
! 000A64C000000021000A64D000000121000039500000003100003B500000013100003F500000023100001E6000000021
! 00001E70000001210001F850000000310001F8D0000001310001F053B900023200005120000000210000513000000121
! 0001F610000000210001F69000000121000A668000000021000A669000000121001059400000002100105BB000000121
! 0001E180000000210001E1900000012100013B2000000021000AB820000001210010415000000021001043D000000121
! 001041800000002100104400000001210000245000000021000028C0000001210001F720000000210001FC8000000121
! 00118B500000002100118D500000012100010B80000000210002D1800000012100004C000000002100004CF000000121
! 001040B00000002100104330000001210000423000000021000044300000012100010C50000000210002D25000000121
! 0002C2D0000000210002C5D0000001210001F300000000210001F3800000012100013C1000000021000AB91000000121
! 000A76C000000021000A76D00000012100104CC00000002100104F40000001210001F710000000210001FBB000000121
! 000FF33000000021000FF53000000121000216A000000021000217A000000121000014900000002100002BC06E000122
! 00003E800000002100003E9000000121000A7D0000000021000A7D1000000121000005A000000021000007A000000121
! 0010CB00000000210010CF000000012100001D900000002100001DA0000001210001ECC0000000210001ECD000000121
! 00001B500000002100001B6000000121000054300000002100005730000001210001F220000000210001F2A000000121
! 001058700000002100105AE0000001210001EA00000000210001EA10000001210010C8F0000000210010CCF000000121
! 0016E540000000210016E740000001210001FB400000002100003AC3B90001220016E570000000210016E77000000121
! 0001D7D0000000210002C63000000121000A7D6000000021000A7D7000000121000A74C000000021000A74D000000121
! 00013CE000000021000AB9E00000012100000CF00000002100000EF00000012100010D90000000210001C99000000121
! 0000045000000021000006500000012100001360000000210000137000000121000040D000000021000045D000000121
! 0016E430000000210016E630000001210001F7C0000000210001FFA000000121000024A000000021000024B000000121
! 00004B800000002100004B90000001210002CCA0000000210002CCB0000001210002CED0000000210002CEE000000121
! 000019F000000021000027500000012100003A400000002100003C4000000121000FB17000000021000057456D000122
! 000A74E000000021000A74F00000012100104C000000002100104E80000001210001E160000000210001E17000000121
! 00013AF000000021000AB7F000000121000050000000002100005010000001210002C820000000210002C83000000121
! 0016EB50000000210016ED000000012100010BD0000000210002D1D000000121001E916000000021001E938000000121
  0010CA30000000210010CE30000001210010C940000000210010CD400000012100104C200000002100104EA000000121
  00003A600000003100003C600000013100003D50000002310001F930000000310001F9B0000001310001F233B9000232
  00118B400000002100118D400000012100013E9000000021000ABB90000001210016E4D0000000210016E6D000000121
*************** static immutable ulong[] t = x"
*** 493,601 ****
  00001780000001210010417000000021001043F00000012100118A900000002100118C90000001210001FB0000000021
  0001FB80000001210002C880000000210002C8900000012100013A9000000021000AB79000000121001E909000000021
  001E92B00000012100013C2000000021000AB9200000012100024B600000002100024D00000001210001E5E000000021
! 0001E5F0000001210002C690000000210002C6A000000121001041F0000000210010447000000121000037F000000021
! 00003F30000001210000540000000021000057000000012100003900000000310001FD300000013100003B9308301233
! 000004B000000031000006B000000131000212A00000023100004F800000002100004F900000012100013F3000000021
! 00013FB00000012100000C900000002100000E9000000121000040F000000021000045F00000012100010B5000000021
! 0002D15000000121000A746000000021000A74700000012100000CD00000002100000ED0000001210000476000000021
! 0000477000000121000039E00000002100003BE0000001210001F200000000210001F2800000012100010FA000000021
! 0001CBA0000001210002C210000000210002C510000001210001EA60000000210001EA70000001210001F83000000031
! 0001F8B0000001310001F033B9000232000053C000000021000056C0000001210001F010000000210001F09000000121
! 0002CC20000000210002CC30000001210000208000000021000020900000012100013E3000000021000ABB3000000121
! 000A796000000021000A7970000001210001F640000000210001F6C000000121001059200000002100105B9000000121
! 00004BE00000002100004BF0000001210001F910000000310001F990000001310001F213B900023200003E6000000021
! 00003E70000001210001EE00000000210001EE10000001210001FF30000000310001FFC00000013100003C93B9000232
! 00001300000000210000069307000122000041300000002100004330000001210001E98000000021000007730A000122
! 000042E000000021000044E00000012100010DB0000000210001C9B00000012100010F60000000210001CB6000000121
! 0002C000000000210002C3000000012100118BE00000002100118DE00000012100001A700000002100001A8000000121
! 00010C30000000210002D23000000121000041500000002100004350000001210001E1E0000000210001E1F000000121
! 000050600000002100005070000001210001E640000000210001E6500000012100000C700000002100000E7000000121
! 000047C000000021000047D0000001210001E520000000210001E5300000012100010F40000000210001CB4000000121
! 001058600000002100105AD000000121000046A000000021000046B0000001210002C270000000210002C57000000121
! 00104CA00000002100104F200000012100010A20000000210002D020000001210010C890000000210010CC9000000121
! 000FF32000000021000FF52000000121000039800000004100003B800000014100003D100000024100003F4000000341
! 00003A900000003100003C900000013100021260000002310001EDA0000000210001EDB000000121001E901000000021
! 001E923000000121000A79C000000021000A79D00000012100010D30000000210001C9300000012100024BC000000021
! 00024D6000000121000FF2F000000021000FF4F00000012100002500000000210002C6F0000001210002C29000000021
! 0002C59000000121001E920000000021001E94200000012100004B200000002100004B30000001210010419000000021
! 0010441000000121000021000000002100002110000001210002C150000000210002C450000001210016E47000000021
! 0016E67000000121000A754000000021000A7550000001210016E450000000210016E6500000012100001C7000000031
! 00001C800000013100001C9000000231000047E000000021000047F00000012100001FC00000002100001FD000000121
! 000020E000000021000020F000000121000024400000002100002890000001210001F770000000210001FDB000000121
! 0002CD60000000210002CD7000000121001058900000002100105B000000012100004220000000410000442000000141
! 0001C840000002410001C8500000034100010E70000000210001CA700000012100004FA00000002100004FB000000121
! 00010D50000000210001C950000001210001EAC0000000210001EAD00000012100010B70000000210002D17000000121
! 00013A1000000021000AB71000000121000A7C2000000021000A7C3000000121001E907000000021001E929000000121
! 00013F500000002100013FD000000121000019B000000021000A7DC0000001210001EE20000000210001EE3000000121
! 0001F620000000210001F6A0000001210001E920000000210001E9300000012100001D500000002100001D6000000121
! 0002C060000000210002C360000001210010C8B0000000210010CCB0000001210001F700000000210001FBA000000121
! 00003EC00000002100003ED000000121001E915000000021001E937000000121000216E000000021000217E000000121
! 00013C0000000021000AB900000001210001EF40000000210001EF50000001210001FB20000000210001F703B9000122
! 000FF3A000000021000FF5A00000012100118BC00000002100118DC00000012100004AA00000002100004AB000000121
! 000216300000002100021730000001210001E1C0000000210001E1D00000012100013C8000000021000AB98000000121
! 00118AF00000002100118CF0000001210001E9A00000002100000612BE00012200105710000000210010598000000121
! 0010CA70000000210010CE70000001210010C980000000210010CD800000012100000510000000210000071000000121
! 00004F200000002100004F30000001210010CAA0000000210010CEA00000012100010AF0000000210002D0F000000121
! 0002C8E0000000210002C8F0000001210002CC40000000210002CC50000001210001E0A0000000210001E0B000000121
! 000FB15000000021000057456B0001220010D600000000210010D80000000121001058E00000002100105B5000000121
! 001041100000002100104390000001210010423000000021001044B000000121000053A000000021000056A000000121
! 0001E6C0000000210001E6D00000012100104BE00000002100104E60000001210010424000000021001044C000000121
! 00010A90000000210002D0900000012100024C200000002100024DC0000001210010C810000000210010CC1000000121
! 00013BC000000021000AB8C000000121000046200000003100004630000001310001C8700000023100118A6000000021
! 00118C60000001210001E4A0000000210001E4B000000121000216200000002100021720000001210001ED4000000021
! 0001ED500000012100010AA0000000210002D0A00000012100004EC00000002100004ED0000001210002C0C000000021
! 0002C3C000000121000A79A000000021000A79B00000012100004CB00000002100004CC00000012100104BD000000021
! 00104E5000000121000037000000002100003710000001210001FE700000002100003C53083421230016E50000000021
! 0016E70000000121001E914000000021001E93600000012100003DA00000002100003DB0000001210001F35000000021
! 0001F3D0000001210010D520000000210010D72000000121000039200000003100003B200000013100003D0000000231
! 0002C960000000210002C970000001210016E510000000210016E710000001210001FA50000000310001FAD000000131
! 0001F653B9000232000039100000002100003B100000012100005340000000210000564000000121000041B000000021
! 000043B00000012100013DF000000021000ABAF0000001210002C2C0000000210002C5C0000001210000124000000021
! 00001250000001210010CA20000000210010CE20000001210001E8C0000000210001E8D0000001210001EB4000000021
! 0001EB5000000121000016C000000021000016D0000001210001E020000000210001E03000000121000019A000000021
! 000023D000000121000010200000002100001030000001210001F140000000210001F1C000000121000FF28000000021
! 000FF480000001210010C800000000210010CC000000012100010EE0000000210001CAE0000001210001F55000000021
! 0001F5D000000121000A77B000000021000A77C0000001210001FC700000002100003B73423B91230000059000000021
! 0000079000000121000014A000000021000014B0000001210001E240000000210001E2500000012100013BD000000021
! 000AB8D0000001210002CBC0000000210002CBD000000121001040D00000002100104350000001210010D5C000000021
! 0010D7C000000121001058F00000002100105B600000012100118A700000002100118C7000000121000A660000000021
! 000A66100000012100005140000000210000515000000121000052E000000021000052F00000012100004A4000000021
! 00004A5000000121000040000000002100004500000001210016E580000000210016E78000000121000A64E000000021
! 000A64F000000121000FF2E000000021000FF4E0000001210010D5B0000000210010D7B000000121001040C000000021
! 001043400000012100000DB00000002100000FB00000012100001CD00000002100001CE00000012100010E8000000021
! 0001CA8000000121000054F000000021000057F000000121000A738000000021000A7390000001210016E5F000000021
! 0016E7F0000001210001FA60000000310001FAE0000001310001F663B9000232001E90F000000021001E931000000121
! 0002C070000000210002C3700000012100010A30000000210002D03000000121000A7A0000000021000A7A1000000121
! 000042100000003100004410000001310001C83000000231000A680000000021000A6810000001210000282000000021
! 000A7C50000001210001D79000000021000A77D00000012100024CB00000002100024E50000001210000401000000021
! 0000451000000121000A758000000021000A759000000121000005800000002100000780000001210000193000000021
! 00002600000001210010CA10000000210010CE1000000121000054E000000021000057E0000001210000186000000021
! 000025400000012100013DC000000021000ABAC00000012100024BD00000002100024D700000012100001B3000000021
! 00001B4000000121000A696000000021000A697000000121000021600000002100002170000001210001ECE000000021
! 0001ECF000000121000216800000002100021780000001210001FC600000002100003B73420001220002C12000000021
! 0002C420000001210002C2F0000000210002C5F000000121001E90E000000021001E9300000001210010CAB000000021
! 0010CEB0000001210001E860000000210001E87000000121000041200000003100004320000001310001C80000000231
! 00013D6000000021000ABA60000001210001EBA0000000210001EBB000000121001E91B000000021001E93D000000121
! 001041A00000002100104420000001210001EEE0000000210001EEF000000121000FF31000000021000FF51000000121
! 000A7BC000000021000A7BD00000012100001DB00000002100001DC00000012100001A60000000210000280000000121
! 0001F070000000210001F0F00000012100118BD00000002100118DD00000012100000C800000002100000E8000000121
! 00004D200000002100004D300000012100010E10000000210001CA100000012100013B7000000021000AB87000000121
! 001058500000002100105AC0000001210016E4B0000000210016E6B00000012100001720000000210000173000000121
! 000049E000000021000049F00000012100004E600000002100004E700000012100010B00000000210002D10000000121
! 0001E99000000021000007930A00012200001EE00000002100001EF0000001210002C9C0000000210002C9D000000121
! 00104B400000002100104DC0000001210010C870000000210010CC700000012100013BA000000021000AB8A000000121
! 0001E100000000210001E110000001210000230000000021000023100000012100004280000000210000448000000121
! 0002CD00000000210002CD100000012100118A000000002100118C000000012100003E000000002100003E1000000121
! 0001FF400000002100003CE3B9000122000A780000000021000A78100000012100010F50000000210001CB5000000121
! 000053B000000021000056B00000012100000D500000002100000F5000000121001058800000002100105AF000000121
! 000041400000003100004340000001310001C810000002310001FA40000000310001FAC0000001310001F643B9000232
! 000012A000000021000012B0000001210000052000000021000007200000012100024B700000002100024D1000000121
! 001E908000000021001E92A000000121000039800000004100003B800000014100003D100000024100003F4000000341
! 000020200000002100002030000001210001F850000000310001F8D0000001310001F053B90002320000470000000021
! 000047100000012100002710000000210002C6E0000001210002C1B0000000210002C4B000000121000FB03000000021
! 0000066066069123000048A000000021000048B000000121000A752000000021000A753000000121000FF25000000021
! 000FF450000001210000407000000021000045700000012100000C100000002100000E10000001210001E44000000021
! 0001E450000001210001F970000000310001F9F0000001310001F273B900023200005480000000210000578000000121
  000021C000000021000021D00000012100013E5000000021000ABB5000000121000051A000000021000051B000000121
  0002CB60000000210002CB7000000121000A654000000021000A6550000001210010403000000021001042B000000121
  0001E720000000210001E7300000012100010D40000000210001C9400000012100104C100000002100104E9000000121
--- 501,611 ----
  00001780000001210010417000000021001043F00000012100118A900000002100118C90000001210001FB0000000021
  0001FB80000001210002C880000000210002C8900000012100013A9000000021000AB79000000121001E909000000021
  001E92B00000012100013C2000000021000AB9200000012100024B600000002100024D00000001210001E5E000000021
! 0001E5F0000001210002C690000000210002C6A0000001210016EA20000000210016EBD000000121001041F000000021
! 0010447000000121000037F00000002100003F3000000121000054000000002100005700000001210000390000000031
! 0001FD300000013100003B9308301233000004B000000031000006B000000131000212A00000023100004F8000000021
! 00004F900000012100013F300000002100013FB0000001210016EA40000000210016EBF00000012100000C9000000021
! 00000E9000000121000040F000000021000045F00000012100010B50000000210002D15000000121000A746000000021
! 000A74700000012100000CD00000002100000ED00000012100004760000000210000477000000121000039E000000021
! 00003BE0000001210001F200000000210001F2800000012100010FA0000000210001CBA0000001210002C21000000021
! 0002C510000001210001EA60000000210001EA70000001210001F830000000310001F8B0000001310001F033B9000232
! 000053C000000021000056C0000001210001F010000000210001F090000001210002CC20000000210002CC3000000121
! 0000208000000021000020900000012100013E3000000021000ABB3000000121000A796000000021000A797000000121
! 0001F640000000210001F6C000000121001059200000002100105B900000012100004BE00000002100004BF000000121
! 0001F910000000310001F990000001310001F213B900023200003E600000002100003E70000001210001EE0000000021
! 0001EE10000001210001FF30000000310001FFC00000013100003C93B900023200001300000000210000069307000122
! 000041300000002100004330000001210001E98000000021000007730A000122000042E000000021000044E000000121
! 00010DB0000000210001C9B00000012100010F60000000210001CB60000001210002C000000000210002C30000000121
! 00118BE00000002100118DE00000012100001A700000002100001A800000012100010C30000000210002D23000000121
! 000041500000002100004350000001210001E1E0000000210001E1F00000012100005060000000210000507000000121
! 0001E640000000210001E6500000012100000C700000002100000E7000000121000047C000000021000047D000000121
! 0001E520000000210001E5300000012100010F40000000210001CB4000000121001058600000002100105AD000000121
! 000046A000000021000046B0000001210002C270000000210002C5700000012100104CA00000002100104F2000000121
! 00010A20000000210002D020000001210010C890000000210010CC9000000121000FF32000000021000FF52000000121
! 000039800000004100003B800000014100003D100000024100003F400000034100003A900000003100003C9000000131
! 00021260000002310001EDA0000000210001EDB000000121001E901000000021001E923000000121000A79C000000021
! 000A79D00000012100010D30000000210001C9300000012100024BC00000002100024D6000000121000FF2F000000021
! 000FF4F00000012100002500000000210002C6F0000001210002C290000000210002C59000000121001E920000000021
! 001E94200000012100004B200000002100004B3000000121001041900000002100104410000001210000210000000021
! 00002110000001210002C150000000210002C450000001210016E470000000210016E67000000121000A754000000021
! 000A7550000001210016E450000000210016E6500000012100001C700000003100001C800000013100001C9000000231
! 000047E000000021000047F00000012100001FC00000002100001FD000000121000020E000000021000020F000000121
! 000024400000002100002890000001210001F770000000210001FDB0000001210002CD60000000210002CD7000000121
! 001058900000002100105B0000000121000042200000004100004420000001410001C840000002410001C85000000341
! 00010E70000000210001CA700000012100004FA00000002100004FB00000012100010D50000000210001C95000000121
! 0001EAC0000000210001EAD00000012100010B70000000210002D1700000012100013A1000000021000AB71000000121
! 000A7C2000000021000A7C3000000121001E907000000021001E92900000012100013F500000002100013FD000000121
! 000019B000000021000A7DC0000001210001EE20000000210001EE30000001210001F620000000210001F6A000000121
! 0001E920000000210001E9300000012100001D500000002100001D60000001210002C060000000210002C36000000121
! 0010C8B0000000210010CCB0000001210001F700000000210001FBA00000012100003EC00000002100003ED000000121
! 001E915000000021001E937000000121000216E000000021000217E00000012100013C0000000021000AB90000000121
! 0001EF40000000210001EF50000001210001FB20000000210001F703B9000122000FF3A000000021000FF5A000000121
! 00118BC00000002100118DC00000012100004AA00000002100004AB00000012100021630000000210002173000000121
! 0001E1C0000000210001E1D00000012100013C8000000021000AB9800000012100118AF00000002100118CF000000121
! 0001E9A00000002100000612BE000122001057100000002100105980000001210010CA70000000210010CE7000000121
! 0010C980000000210010CD80000001210016EA80000000210016EC30000001210016EB60000000210016ED1000000121
! 0000051000000021000007100000012100004F200000002100004F30000001210010CAA0000000210010CEA000000121
! 00010AF0000000210002D0F0000001210002C8E0000000210002C8F0000001210002CC40000000210002CC5000000121
! 0001E0A0000000210001E0B000000121000FB15000000021000057456B0001220010D600000000210010D80000000121
! 001058E00000002100105B5000000121001041100000002100104390000001210010423000000021001044B000000121
! 000053A000000021000056A0000001210001E6C0000000210001E6D00000012100104BE00000002100104E6000000121
! 0010424000000021001044C00000012100010A90000000210002D0900000012100024C200000002100024DC000000121
! 0010C810000000210010CC100000012100013BC000000021000AB8C00000012100004620000000310000463000000131
! 0001C8700000023100118A600000002100118C60000001210001E4A0000000210001E4B0000001210002162000000021
! 00021720000001210001ED40000000210001ED500000012100010AA0000000210002D0A00000012100004EC000000021
! 00004ED0000001210002C0C0000000210002C3C000000121000A79A000000021000A79B00000012100004CB000000021
! 00004CC00000012100104BD00000002100104E5000000121000037000000002100003710000001210001FE7000000021
! 00003C53083421230016E500000000210016E70000000121001E914000000021001E93600000012100003DA000000021
! 00003DB0000001210001F350000000210001F3D0000001210010D520000000210010D720000001210000392000000031
! 00003B200000013100003D00000002310002C960000000210002C970000001210016E510000000210016E71000000121
! 0001FA50000000310001FAD0000001310001F653B9000232000039100000002100003B10000001210000534000000021
! 0000564000000121000041B000000021000043B00000012100013DF000000021000ABAF0000001210002C2C000000021
! 0002C5C000000121000012400000002100001250000001210010CA20000000210010CE20000001210001E8C000000021
! 0001E8D0000001210001EB40000000210001EB5000000121000016C000000021000016D0000001210001E02000000021
! 0001E03000000121000019A000000021000023D000000121000010200000002100001030000001210001F14000000021
! 0001F1C000000121000FF28000000021000FF480000001210010C800000000210010CC000000012100010EE000000021
! 0001CAE0000001210001F550000000210001F5D000000121000A77B000000021000A77C0000001210001FC7000000021
! 00003B73423B912300000590000000210000079000000121000014A000000021000014B0000001210001E24000000021
! 0001E2500000012100013BD000000021000AB8D0000001210002CBC0000000210002CBD000000121001040D000000021
! 00104350000001210010D5C0000000210010D7C000000121001058F00000002100105B600000012100118A7000000021
! 00118C7000000121000A660000000021000A66100000012100005140000000210000515000000121000052E000000021
! 000052F00000012100004A400000002100004A5000000121000040000000002100004500000001210016E58000000021
! 0016E78000000121000A64E000000021000A64F000000121000FF2E000000021000FF4E0000001210010D5B000000021
! 0010D7B000000121001040C000000021001043400000012100000DB00000002100000FB00000012100001CD000000021
! 00001CE00000012100010E80000000210001CA8000000121000054F000000021000057F000000121000A738000000021
! 000A7390000001210016E5F0000000210016E7F0000001210001FA60000000310001FAE0000001310001F663B9000232
! 0016EB70000000210016ED2000000121001E90F000000021001E9310000001210002C070000000210002C37000000121
! 00010A30000000210002D03000000121000A7A0000000021000A7A100000012100004210000000310000441000000131
! 0001C83000000231000A680000000021000A6810000001210000282000000021000A7C50000001210001D79000000021
! 000A77D00000012100024CB00000002100024E500000012100004010000000210000451000000121000A758000000021
! 000A75900000012100000580000000210000078000000121000019300000002100002600000001210010CA1000000021
! 0010CE1000000121000054E000000021000057E0000001210000186000000021000025400000012100013DC000000021
! 000ABAC00000012100024BD00000002100024D700000012100001B300000002100001B4000000121000A696000000021
! 000A697000000121000021600000002100002170000001210001ECE0000000210001ECF0000001210002168000000021
! 00021780000001210001FC600000002100003B73420001220002C120000000210002C420000001210002C2F000000021
! 0002C5F000000121001E90E000000021001E9300000001210010CAB0000000210010CEB0000001210001E86000000021
! 0001E87000000121000041200000003100004320000001310001C8000000023100013D6000000021000ABA6000000121
! 0001EBA0000000210001EBB000000121001E91B000000021001E93D000000121001041A0000000210010442000000121
! 0001EEE0000000210001EEF000000121000FF31000000021000FF51000000121000A7BC000000021000A7BD000000121
! 00001DB00000002100001DC00000012100001A600000002100002800000001210001F070000000210001F0F000000121
! 00118BD00000002100118DD00000012100000C800000002100000E800000012100004D200000002100004D3000000121
! 00010E10000000210001CA100000012100013B7000000021000AB87000000121001058500000002100105AC000000121
! 0016E4B0000000210016E6B00000012100001720000000210000173000000121000049E000000021000049F000000121
! 00004E600000002100004E700000012100010B00000000210002D100000001210001E99000000021000007930A000122
! 00001EE00000002100001EF0000001210002C9C0000000210002C9D00000012100104B400000002100104DC000000121
! 0010C870000000210010CC700000012100013BA000000021000AB8A0000001210001E100000000210001E11000000121
! 00002300000000210000231000000121000042800000002100004480000001210002CD00000000210002CD1000000121
! 00118A000000002100118C000000012100003E000000002100003E10000001210001FF400000002100003CE3B9000122
! 000A780000000021000A78100000012100010F50000000210001CB5000000121000053B000000021000056B000000121
! 00000D500000002100000F5000000121001058800000002100105AF00000012100004140000000310000434000000131
! 0001C810000002310001FA40000000310001FAC0000001310001F643B9000232000012A000000021000012B000000121
! 0000052000000021000007200000012100024B700000002100024D1000000121001E908000000021001E92A000000121
! 000039800000004100003B800000014100003D100000024100003F400000034100002020000000210000203000000121
! 0001F850000000310001F8D0000001310001F053B9000232000047000000002100004710000001210000271000000021
! 0002C6E0000001210002C1B0000000210002C4B000000121000FB030000000210000066066069123000048A000000021
! 000048B000000121000A752000000021000A753000000121000FF25000000021000FF450000001210000407000000021
! 000045700000012100000C100000002100000E10000001210001E440000000210001E450000001210001F97000000031
! 0001F9F0000001310001F273B9000232000054800000002100005780000001210016EA90000000210016EC4000000121
  000021C000000021000021D00000012100013E5000000021000ABB5000000121000051A000000021000051B000000121
  0002CB60000000210002CB7000000121000A654000000021000A6550000001210010403000000021001042B000000121
  0001E720000000210001E7300000012100010D40000000210001C9400000012100104C100000002100104E9000000121
*************** static immutable ulong[] t = x"
*** 646,706 ****
  0001E4300000012100013B4000000021000AB8400000012100118BF00000002100118DF0000001210000150000000021
  00001510000001210001F5600000002100003C53133421230002CB00000000210002CB100000012100013A4000000021
  000AB7400000012100004C100000002100004C200000012100001CA00000003100001CB00000013100001CC000000231
! 000004C000000021000006C00000012100104C700000002100104EF0000001210016E5A0000000210016E7A000000121
! 00002220000000210000223000000121000049000000002100004910000001210002CF20000000210002CF3000000121
! 001059500000002100105BC000000121000053D000000021000056D000000121000038800000002100003AD000000121
! 0000549000000021000057900000012100013E2000000021000ABB20000001210016E4A0000000210016E6A000000121
! 0001EFC0000000210001EFD0000001210001F900000000310001F980000001310001F203B900023200004D6000000021
! 00004D7000000121000A7B8000000021000A7B9000000121000041400000003100004340000001310001C81000000231
! 0010CAD0000000210010CED00000012100010F70000000210001CB70000001210016E550000000210016E75000000121
! 000A728000000021000A7290000001210001E000000000210001E0100000012100002320000000210000233000000121
! 00010A50000000210002D050000001210001F150000000210001F1D00000012100003A900000003100003C9000000131
! 0002126000000231000013B000000021000013C0000001210000408000000021000045800000012100000DC000000021
! 00000FC0000001210001EBE0000000210001EBF0000001210002C180000000210002C48000000121000A7A8000000021
! 000A7A9000000121000216B000000021000217B0000001210002C100000000210002C400000001210002CDE000000021
! 0002CDF000000121000029E000000021000A7B000000012100000D400000002100000F400000012100010EF000000021
! 0001CAF0000001210000551000000021000058100000012100013DA000000021000ABAA0000001210000535000000021
! 00005650000001210001FA00000000310001FA80000001310001F603B900023200024C600000002100024E0000000121
! 000041000000002100004300000001210001EB60000000210001EB70000001210001F840000000310001F8C000000131
! 0001F043B90002320010416000000021001043E0000001210016E420000000210016E620000001210010D5E000000021
! 0010D7E000000121000016400000002100001650000001210002CA00000000210002CA10000001210001E2E000000021
! 0001E2F0000001210010C950000000210010CD500000012100004980000000210000499000000121000010A000000021
! 000010B0000001210010C9D0000000210010CDD0000001210010D530000000210010D730000001210001E88000000021
! 0001E890000001210000528000000021000052900000012100118AA00000002100118CA00000012100013D7000000021
! 000ABA7000000121000A65A000000021000A65B000000121000022A000000021000022B0000001210001FA5000000031
! 0001FAD0000001310001F653B900023200104B300000002100104DB000000121001E90C000000021001E92E000000121
! 00024BB00000002100024D500000012100001F400000002100001F5000000121000A690000000021000A691000000121
! 000FF29000000021000FF490000001210002C750000000210002C760000001210002CB80000000210002CB9000000121
! 001040100000002100104290000001210002C0D0000000210002C3D00000012100104D000000002100104F8000000121
! 001E913000000021001E93500000012100001AF00000002100001B0000000121000A7C7000000021000A7C8000000121
! 00013BF000000021000AB8F0000001210010402000000021001042A00000012100010EA0000000210001CAA000000121
! 00104BF00000002100104E7000000121001058D00000002100105B400000012100021640000000210002174000000121
! 000018E00000002100001DD00000012100001D300000002100001D40000001210001F100000000210001F18000000121
! 0001F570000000210001F5F0000001210001ED20000000210001ED3000000121000FF2A000000021000FF4A000000121
! 0001E040000000210001E0500000012100004EE00000002100004EF0000001210002C940000000210002C95000000121
! 00000C000000002100000E00000001210001FE600000002100003C534200012200013DB000000021000ABAB000000121
! 00001B2000000021000028B0000001210010426000000021001044E000000121000A662000000021000A663000000121
! 0000054000000021000007400000012100005560000000210000586000000121000042A000000031000044A000000131
! 0001C860000002310010422000000021001044A0000001210001F360000000210001F3E0000001210001FA1000000031
! 0001FA90000001310001F613B900023200004CD00000002100004CE00000012100104BB00000002100104E3000000121
! 000023B000000021000023C00000012100001CF00000002100001D0000000121000050C000000021000050D000000121
! 000A646000000021000A6470000001210001E460000000210001E470000001210010CA60000000210010CE6000000121
! 000A779000000021000A77A000000121000FF36000000021000FF5600000012100118A200000002100118C2000000121
! 00004EA00000002100004EB000000121000041D000000021000043D000000121000A794000000021000A7C4000000121
! 000A688000000021000A6890000001210001EB20000000210001EB300000012100021600000000210002170000000121
! 0001ED60000000210001ED700000012100024C300000002100024DD0000001210016E5E0000000210016E7E000000121
! 00004AC00000002100004AD0000001210016E520000000210016E72000000121000023E0000000210002C66000000121
! 0002CB40000000210002CB5000000121000FF2D000000021000FF4D000000121000014C000000021000014D000000121
! 0001E220000000210001E2300000012100013BB000000021000AB8B00000012100001430000000210000144000000121
! 000FB04000000021000006606606C123001058100000002100105A800000012100001700000000210000171000000121
! 0001E940000000210001E950000001210001FC20000000210001F743B90001220002C280000000210002C58000000121
! 001E910000000021001E932000000121001040E00000002100104360000001210001F830000000310001F8B000000131
! 0001F033B9000232000A798000000021000A79900000012100013B8000000021000AB880000001210001E70000000021
! 0001E71000000121000042200000004100004420000001410001C840000002410001C850000003410010C85000000021
! 0010CC50000001210001EAE0000000210001EAF0000001210000122000000021000012300000012100104B2000000021
! 00104DA0000001210010C8C0000000210010CCC0000001210010405000000021001042D0000001210001F87000000031
! 0001F8F0000001310001F073B90002320000420000000021000044000000012100001AE0000000210000288000000121
! 000021A000000021000021B000000121000038C00000002100003CC0000001210001F950000000310001F9D000000131
  0001F253B90002320000345000000041000039900000014100003B90000002410001FBE000000341000018A000000021
  000025700000012100003900000000310001FD300000013100003B930830123300010B10000000210002D11000000121
  000011E000000021000011F0000001210001E080000000210001E090000001210002C900000000210002C91000000121
--- 656,717 ----
  0001E4300000012100013B4000000021000AB8400000012100118BF00000002100118DF0000001210000150000000021
  00001510000001210001F5600000002100003C53133421230002CB00000000210002CB100000012100013A4000000021
  000AB7400000012100004C100000002100004C200000012100001CA00000003100001CB00000013100001CC000000231
! 000004C000000021000006C00000012100104C700000002100104EF0000001210016EA30000000210016EBE000000121
! 0016E5A0000000210016E7A0000001210000222000000021000022300000012100004900000000210000491000000121
! 0002CF20000000210002CF3000000121001059500000002100105BC000000121000053D000000021000056D000000121
! 000038800000002100003AD0000001210000549000000021000057900000012100013E2000000021000ABB2000000121
! 0016E4A0000000210016E6A0000001210001EFC0000000210001EFD0000001210001F900000000310001F98000000131
! 0001F203B900023200004D600000002100004D7000000121000A7B8000000021000A7B90000001210000414000000031
! 00004340000001310001C810000002310010CAD0000000210010CED00000012100010F70000000210001CB7000000121
! 0016E550000000210016E75000000121000A728000000021000A7290000001210001E000000000210001E01000000121
! 0000232000000021000023300000012100010A50000000210002D050000001210001F150000000210001F1D000000121
! 00003A900000003100003C90000001310002126000000231000013B000000021000013C0000001210000408000000021
! 000045800000012100000DC00000002100000FC0000001210001EBE0000000210001EBF0000001210002C18000000021
! 0002C48000000121000A7A8000000021000A7A9000000121000216B000000021000217B0000001210002C10000000021
! 0002C400000001210002CDE0000000210002CDF0000001210016EB30000000210016ECE000000121000029E000000021
! 000A7B000000012100000D400000002100000F400000012100010EF0000000210001CAF0000001210000551000000021
! 000058100000012100013DA000000021000ABAA000000121000053500000002100005650000001210001FA0000000031
! 0001FA80000001310001F603B900023200024C600000002100024E000000012100004100000000210000430000000121
! 0001EB60000000210001EB70000001210001F840000000310001F8C0000001310001F043B90002320010416000000021
! 001043E0000001210016E420000000210016E620000001210010D5E0000000210010D7E0000001210000164000000021
! 00001650000001210002CA00000000210002CA10000001210001E2E0000000210001E2F0000001210010C95000000021
! 0010CD500000012100004980000000210000499000000121000010A000000021000010B0000001210010C9D000000021
! 0010CDD0000001210010D530000000210010D730000001210001E880000000210001E890000001210000528000000021
! 000052900000012100118AA00000002100118CA00000012100013D7000000021000ABA7000000121000A65A000000021
! 000A65B000000121000022A000000021000022B0000001210001FA50000000310001FAD0000001310001F653B9000232
! 00104B300000002100104DB000000121001E90C000000021001E92E00000012100024BB00000002100024D5000000121
! 00001F400000002100001F5000000121000A690000000021000A691000000121000FF29000000021000FF49000000121
! 0002C750000000210002C760000001210002CB80000000210002CB900000012100104010000000210010429000000121
! 0002C0D0000000210002C3D00000012100104D000000002100104F8000000121001E913000000021001E935000000121
! 00001AF00000002100001B0000000121000A7C7000000021000A7C800000012100013BF000000021000AB8F000000121
! 0010402000000021001042A00000012100010EA0000000210001CAA00000012100104BF00000002100104E7000000121
! 001058D00000002100105B400000012100021640000000210002174000000121000018E00000002100001DD000000121
! 00001D300000002100001D40000001210001F100000000210001F180000001210001F570000000210001F5F000000121
! 0001ED20000000210001ED3000000121000FF2A000000021000FF4A0000001210001E040000000210001E05000000121
! 00004EE00000002100004EF0000001210002C940000000210002C9500000012100000C000000002100000E0000000121
! 0001FE600000002100003C534200012200013DB000000021000ABAB00000012100001B2000000021000028B000000121
! 0010426000000021001044E000000121000A662000000021000A66300000012100000540000000210000074000000121
! 00005560000000210000586000000121000042A000000031000044A0000001310001C860000002310010422000000021
! 001044A0000001210001F360000000210001F3E0000001210001FA10000000310001FA90000001310001F613B9000232
! 00004CD00000002100004CE00000012100104BB00000002100104E3000000121000023B000000021000023C000000121
! 00001CF00000002100001D0000000121000050C000000021000050D000000121000A646000000021000A647000000121
! 0001E460000000210001E470000001210010CA60000000210010CE6000000121000A779000000021000A77A000000121
! 000FF36000000021000FF5600000012100118A200000002100118C200000012100004EA00000002100004EB000000121
! 000041D000000021000043D000000121000A794000000021000A7C4000000121000A688000000021000A689000000121
! 0001EB20000000210001EB3000000121000216000000002100021700000001210001ED60000000210001ED7000000121
! 00024C300000002100024DD0000001210016E5E0000000210016E7E00000012100004AC00000002100004AD000000121
! 0016E520000000210016E72000000121000023E0000000210002C660000001210002CB40000000210002CB5000000121
! 000FF2D000000021000FF4D000000121000014C000000021000014D0000001210001E220000000210001E23000000121
! 00013BB000000021000AB8B00000012100001430000000210000144000000121000FB04000000021000006606606C123
! 001058100000002100105A8000000121000017000000002100001710000001210001E940000000210001E95000000121
! 0001FC20000000210001F743B90001220002C280000000210002C58000000121001E910000000021001E932000000121
! 001040E00000002100104360000001210001F830000000310001F8B0000001310001F033B9000232000A798000000021
! 000A79900000012100013B8000000021000AB880000001210001E700000000210001E710000001210000422000000041
! 00004420000001410001C840000002410001C850000003410010C850000000210010CC50000001210001EAE000000021
! 0001EAF0000001210000122000000021000012300000012100104B200000002100104DA0000001210010C8C000000021
! 0010CCC0000001210010405000000021001042D0000001210001F870000000310001F8F0000001310001F073B9000232
! 0000420000000021000044000000012100001AE0000000210000288000000121000021A000000021000021B000000121
! 000038C00000002100003CC0000001210016EAB0000000210016EC60000001210001F950000000310001F9D000000131
  0001F253B90002320000345000000041000039900000014100003B90000002410001FBE000000341000018A000000021
  000025700000012100003900000000310001FD300000013100003B930830123300010B10000000210002D11000000121
  000011E000000021000011F0000001210001E080000000210001E090000001210002C900000000210002C91000000121
*************** static immutable ulong[] t = x"
*** 716,846 ****
  000006606900012200000500000000210000070000000121000016000000002100001610000001210010584000000021
  00105AB0000001210001E320000000210001E330000001210010CA90000000210010CE90000001210000200000000021
  000020100000012100118AB00000002100118CB000000121000A786000000021000A78700000012100118BB000000021
! 00118DB00000012100118AE00000002100118CE000000121000021E000000021000021F00000012100003AA000000021
! 00003CA00000012100010C20000000210002D2200000012100013C4000000021000AB940000001210000539000000021
! 0000569000000121000A74A000000021000A74B00000012100000C300000002100000E3000000121000046E000000021
! 000046F000000121000054D000000021000057D0000001210001FE200000002100003C530830012300010E3000000021
! 0001CA30000001210001F5200000002100003C531330012300003DE00000002100003DF00000012100024CA000000021
! 00024E40000001210000345000000041000039900000014100003B90000002410001FBE000000341000A7DA000000021
! 000A7DB000000121000A75A000000021000A75B000000121000041900000002100004390000001210002C09000000021
! 0002C39000000121000037D00000002100003FF0000001210001F260000000210001F2E0000001210010C99000000021
! 0010CD9000000121000218300000002100021840000001210002C230000000210002C530000001210000132000000021
! 00001330000001210001E560000000210001E5700000012100010AE0000000210002D0E000000121000A740000000021
! 000A74100000012100000DD00000002100000FD00000012100010E60000000210001CA60000001210001E60000000031
! 0001E610000001310001E9B00000023100004780000000210000479000000121000022E000000021000022F000000121
! 0001FF600000002100003C93420001220001FD200000002100003B9308300123000A694000000021000A695000000121
! 000052C000000021000052D00000012100105700000000210010597000000121000A666000000021000A667000000121
! 00001F0000000021000006A30C0001220010C960000000210010CD600000012100118B200000002100118D2000000121
! 0010D640000000210010D84000000121000020A000000021000020B00000012100024BF00000002100024D9000000121
! 00013CB000000021000AB9B0000001210010C9C0000000210010CDC000000121000041E000000031000043E000000131
! 0001C820000002310001E840000000210001E850000001210001EF00000000210001EF100000012100013A8000000021
! 000AB780000001210010D5A0000000210010D7A0000001210010D570000000210010D770000001210002CA4000000021
! 0002CA5000000121000A724000000021000A725000000121000049C000000021000049D000000121000010E000000021
! 000010F0000001210016E590000000210016E790000001210001FA40000000310001FAC0000001310001F643B9000232
! 00104D300000002100104FB000000121001E903000000021001E92500000012100001910000000210000192000000121
! 0001F800000000310001F880000001310001F003B900023200013DE000000021000ABAE00000012100003A0000000031
! 00003C000000013100003D600000023100013AD000000021000AB7D00000012100002060000000210000207000000121
! 0001F450000000210001F4D00000012100003EA00000002100003EB00000012100010BB0000000210002D1B000000121
! 00004740000000210000475000000121000FF38000000021000FF5800000012100004FE00000002100004FF000000121
! 0002C840000000210002C850000001210010413000000021001043B0000001210001FD700000002100003B9308342123
! 0001E5C0000000210001E5D0000001210001EE40000000210001EE50000001210002CC80000000210002CC9000000121
! 0002C1F0000000210002C4F00000012100004BA00000002100004BB00000012100104CE00000002100104F6000000121
! 0010D620000000210010D8200000012100000D100000002100000F100000012100004720000000210000473000000121
! 00118B600000002100118D60000001210001F780000000210001FF800000012100000430000000210000063000000121
! 0001EA20000000210001EA3000000121001E905000000021001E9270000001210001F240000000210001F2C000000121
! 000019D000000021000027200000012100004B600000002100004B700000012100000DF0000000310001E9E000000131
! 00000730730002320001F870000000310001F8F0000001310001F073B90002320001E140000000210001E15000000121
! 0001EE60000000210001EE7000000121000040B000000021000045B00000012100004090000000210000459000000121
! 001057D00000002100105A400000012100003A800000002100003C80000001210001E5A0000000210001E5B000000121
! 001057F00000002100105A60000001210000544000000021000057400000012100010FE0000000210001CBE000000121
! 0001E120000000210001E1300000012100010B90000000210002D1900000012100000470000000210000067000000121
! 00004FC00000002100004FD0000001210010C920000000210010CD20000001210002C860000000210002C87000000121
! 0001E1A0000000210001E1B0000001210010C900000000210010CD000000012100010BF0000000210002D1F000000121
! 00013CA000000021000AB9A0000001210016E490000000210016E6900000012100000410000000210000061000000121
! 00001BC00000002100001BD0000001210001EEA0000000210001EEB00000012100005020000000210000503000000121
! 000024800000002100002490000001210001F950000000310001F9D0000001310001F253B900023200010DF000000021
! 0001C9F00000012100001C400000003100001C500000013100001C600000023100005460000000210000576000000121
! 00013EF000000021000ABBF0000001210002CCC0000000210002CCD00000012100010D70000000210001C97000000121
! 00013A7000000021000AB77000000121000047A000000021000047B00000012100001340000000210000135000000121
! 000042A000000031000044A0000001310001C860000002310002C190000000210002C490000001210000204000000021
! 0000205000000121000025C000000021000A7AB00000012100024CF00000002100024E90000001210001E54000000021
! 0001E55000000121001057900000002100105A0000000121000054A000000021000057A000000121000A684000000021
! 000A685000000121000FF27000000021000FF470000001210001F050000000210001F0D000000121000FB13000000021
! 00005745760001220002132000000021000214E000000121000024C000000021000024D00000012100013B5000000021
! 000AB850000001210002CC60000000210002CC7000000121001040800000002100104300000001210002C1D000000021
! 0002C4D000000121000023F0000000210002C7E000000121000A742000000021000A7430000001210001E62000000021
! 0001E630000001210010CA80000000210010CE800000012100000B5000000031000039C00000013100003BC000000231
! 0001F810000000310001F890000001310001F013B90002320010C9A0000000210010CDA000000121000012E000000021
! 000012F0000001210000403000000021000045300000012100001FE00000002100001FF0000001210000345000000041
! 000039900000014100003B90000002410001FBE0000003410000174000000021000017500000012100003CF000000021
! 00003D700000012100024CD00000002100024E70000001210001FB30000000310001FBC00000013100003B13B9000232
! 00118AD00000002100118CD000000121000A744000000021000A74500000012100000D900000002100000F9000000121
! 0001E0C0000000210001E0D0000001210002C170000000210002C4700000012100003E200000002100003E3000000121
! 000026C000000021000A7AD000000121000A756000000021000A75700000012100004050000000210000455000000121
! 000019700000002100002680000001210001F600000000210001F680000001210001EEC0000000210001EED000000121
! 0002C8C0000000210002C8D00000012100010F20000000210001CB2000000121000A7CC000000021000A7CD000000121
! 0010D590000000210010D79000000121001040A000000021001043200000012100013C6000000021000AB96000000121
! 001E91D000000021001E93F00000012100104B600000002100104DE00000012100004240000000210000444000000121
! 00001A90000000210000283000000121000039A00000003100003BA00000013100003F000000023100010E5000000021
! 0001CA500000012100104C800000002100104F00000001210010407000000021001042F00000012100013D0000000021
! 000ABA00000001210001FA20000000310001FAA0000001310001F623B9000232000046C000000021000046D000000121
! 00010A00000000210002D00000000121000A782000000021000A78300000012100000C500000003100000E5000000131
! 000212B00000023100004B400000002100004B50000001210002CCE0000000210002CCF0000001210001FF2000000021
! 0001F7C3B9000122000FF21000000021000FF41000000121000A73A000000021000A73B00000012100104B9000000021
! 00104E10000001210010D560000000210010D760000001210001EA40000000210001EA5000000121000038F000000021
! 00003CE00000012100024BE00000002100024D800000012100003B00000000310001FE300000013100003C5308301233
! 000004900000002100000690000001210016E410000000210016E6100000012100002460000000210000247000000121
! 001E91F000000021001E9410000001210001F730000000210001FC90000001210002C670000000210002C68000000121
! 000216600000002100021760000001210000100000000021000010100000012100003E400000002100003E5000000121
! 00013D2000000021000ABA2000000121000A79E000000021000A79F0000001210001FA00000000310001FA8000000131
  0001F603B90002320010CB10000000210010CF10000001210016E5D0000000210016E7D00000012100010C1000000021
  0002D21000000121000A7F5000000021000A7F600000012100013BE000000021000AB8E000000121000042C000000021
! 000044C0000001210001FC400000002100003AE3B900012200010DD0000000210001C9D0000001210001F93000000031
! 0001F9B0000001310001F233B9000232000024E000000021000024F00000012100004BC00000002100004BD000000121
! 0000176000000021000017700000012100013AB000000021000AB7B00000012100013E1000000021000ABB1000000121
! 000050400000002100005050000001210001F030000000210001F0B000000121000A686000000021000A687000000121
! 000054C000000021000057C0000001210016E4F0000000210016E6F00000012100010EB0000000210001CAB000000121
! 00013D9000000021000ABA9000000121000023A0000000210002C6500000012100004A800000002100004A9000000121
! 0002CDA0000000210002CDB000000121000041E000000031000043E0000001310001C820000002310001F81000000031
! 0001F890000001310001F013B9000232000039400000002100003B40000001210002C720000000210002C73000000121
! 000051000000002100005110000001210001E260000000210001E27000000121000A642000000021000A643000000121
! 00004C900000002100004CA000000121000014700000002100001480000001210001EB00000000210001EB1000000121
! 000A75E000000021000A75F000000121001058C00000002100105B3000000121000A73C000000021000A73D000000121
! 00104D100000002100104F900000012100104D200000002100104FA000000121001059000000002100105B7000000121
! 000005500000002100000750000001210001F110000000210001F19000000121000037B00000002100003FD000000121
! 0001F310000000210001F390000001210002CBA0000000210002CBB00000012100005520000000210000582000000121
! 0001FC30000000310001FCC00000013100003B73B90002320001E6E0000000210001E6F0000001210002167000000021
! 000217700000012100000DE00000002100000FE0000001210000190000000021000025B000000121000A68C000000021
! 000A68D0000001210001EF80000000210001EF90000001210010D5F0000000210010D7F00000012100104B0000000021
! 00104D80000001210010C8E0000000210010CCE0000001210002C080000000210002C38000000121000016E000000021
! 000016F0000001210016E5C0000000210016E7C00000012100010CD0000000210002D2D0000001210001F7B000000021
! 0001FEB0000001210001E900000000210001E9100000012100013B3000000021000AB8300000012100001D1000000021
! 00001D20000001210001F530000000210001F5B000000121000012600000002100001270000001210001E48000000021
! 0001E490000001210002C980000000210002C99000000121001040000000002100104280000001210001FA3000000031
! 0001FAB0000001310001F633B900023200118B900000002100118D900000012100013B0000000021000AB80000000121
! 0001ED80000000210001ED90000001210010CA40000000210010CE40000001210001F740000000210001FCA000000121
! 000042200000004100004420000001410001C840000002410001C850000003410001EF20000000210001EF3000000121
! 000216100000002100021710000001210010420000000021001044800000012100001F100000003100001F2000000131
! 00001F300000023100001D700000002100001D8000000121000A68A000000021000A68B00000012100003F7000000021
! 00003F8000000121000FF35000000021000FF5500000012100003DC00000002100003DD0000001210010C8D000000021
! 0010CCD000000121000041800000002100004380000001210000212000000021000021300000012100004F0000000021
! 00004F100000012100024C100000002100024DB000000121000050A000000021000050B000000121001E917000000021
! 001E939000000121000A644000000021000A6450000001210000537000000021000056700000012100010AC000000021
! 0002D0C00000012100010AD0000000210002D0D00000012100024C700000002100024E10000001210000460000000021
! 00004610000001210002C2B0000000210002C5B0000001210016E560000000210016E7600000012100010C7000000021
! 0002D27000000121000FB05000000031000FB0600000013100000730740002320002CD40000000210002CD5000000121
! 00010F10000000210001CB10000001210001F7A0000000210001FEA0000001210002C0B0000000210002C3B000000121
! 000FF34000000021000FF540000001210010406000000021001042E00000012100004170000000210000437000000121
! 00118BA00000002100118DA0000001210001F820000000310001F8A0000001310001F023B900023200001F1000000031
! 00001F200000013100001F3000000231000039500000003100003B500000013100003F500000023100001B7000000021
! 0000292000000121000018F000000021000025900000012100005380000000210000568000000121000A66A000000021
! 000A66B0000001210001F320000000210001F3A00000012100104210000000210010449000000121000052A000000021
! 000052B00000012100004250000000210000445000000121000A784000000021000A785000000121000004F000000021
! 000006F000000121000A664000000021000A6650000001210001FA20000000310001FAA0000001310001F623B9000232
! 00104B100000002100104D900000012100000C400000002100000E40000001210010CA50000000210010CE5000000121
! 0001EAA0000000210001EAB00000012100013D8000000021000ABA80000001210010D550000000210010D75000000121
! 00000DF0000000310001E9E000000131000007307300023200010E40000000210001CA400000012100000D8000000021
! 00000F800000012100001CA00000003100001CB00000013100001CC00000023100010D10000000210001C91000000121
  0010575000000021001059C000000121000216C000000021000217C0000001210002C020000000210002C32000000121
  0010D580000000210010D78000000121000A7D8000000021000A7D9000000121000FF22000000021000FF42000000121
  0016E5B0000000210016E7B0000001210000404000000021000045400000012100010B30000000210002D13000000121
--- 727,860 ----
  000006606900012200000500000000210000070000000121000016000000002100001610000001210010584000000021
  00105AB0000001210001E320000000210001E330000001210010CA90000000210010CE90000001210000200000000021
  000020100000012100118AB00000002100118CB000000121000A786000000021000A78700000012100118BB000000021
! 00118DB00000012100118AE00000002100118CE000000121000021E000000021000021F0000001210016EAF000000021
! 0016ECA00000012100003AA00000002100003CA00000012100010C20000000210002D2200000012100013C4000000021
! 000AB9400000012100005390000000210000569000000121000A74A000000021000A74B00000012100000C3000000021
! 00000E3000000121000046E000000021000046F000000121000054D000000021000057D0000001210001FE2000000021
! 00003C530830012300010E30000000210001CA30000001210001F5200000002100003C531330012300003DE000000021
! 00003DF00000012100024CA00000002100024E40000001210000345000000041000039900000014100003B9000000241
! 0001FBE000000341000A7DA000000021000A7DB000000121000A75A000000021000A75B0000001210000419000000021
! 00004390000001210002C090000000210002C39000000121000037D00000002100003FF0000001210001F26000000021
! 0001F2E0000001210010C990000000210010CD9000000121000218300000002100021840000001210002C23000000021
! 0002C53000000121000013200000002100001330000001210001E560000000210001E5700000012100010AE000000021
! 0002D0E000000121000A740000000021000A74100000012100000DD00000002100000FD00000012100010E6000000021
! 0001CA60000001210001E600000000310001E610000001310001E9B00000023100004780000000210000479000000121
! 000022E000000021000022F0000001210001FF600000002100003C93420001220001FD200000002100003B9308300123
! 000A694000000021000A695000000121000052C000000021000052D00000012100105700000000210010597000000121
! 000A666000000021000A66700000012100001F0000000021000006A30C0001220010C960000000210010CD6000000121
! 00118B200000002100118D20000001210010D640000000210010D84000000121000020A000000021000020B000000121
! 00024BF00000002100024D900000012100013CB000000021000AB9B0000001210010C9C0000000210010CDC000000121
! 000041E000000031000043E0000001310001C820000002310001E840000000210001E850000001210001EF0000000021
! 0001EF100000012100013A8000000021000AB780000001210010D5A0000000210010D7A0000001210010D57000000021
! 0010D770000001210002CA40000000210002CA5000000121000A724000000021000A725000000121000049C000000021
! 000049D000000121000010E000000021000010F0000001210016E590000000210016E790000001210001FA4000000031
! 0001FAC0000001310001F643B900023200104D300000002100104FB000000121001E903000000021001E925000000121
! 0016EAC0000000210016EC7000000121000019100000002100001920000001210001F800000000310001F88000000131
! 0001F003B900023200013DE000000021000ABAE00000012100003A000000003100003C000000013100003D6000000231
! 00013AD000000021000AB7D000000121000020600000002100002070000001210001F450000000210001F4D000000121
! 00003EA00000002100003EB00000012100010BB0000000210002D1B00000012100004740000000210000475000000121
! 000FF38000000021000FF5800000012100004FE00000002100004FF0000001210002C840000000210002C85000000121
! 0010413000000021001043B0000001210001FD700000002100003B93083421230001E5C0000000210001E5D000000121
! 0001EE40000000210001EE50000001210002CC80000000210002CC90000001210002C1F0000000210002C4F000000121
! 00004BA00000002100004BB00000012100104CE00000002100104F60000001210010D620000000210010D82000000121
! 00000D100000002100000F10000001210000472000000021000047300000012100118B600000002100118D6000000121
! 0001F780000000210001FF8000000121000004300000002100000630000001210001EA20000000210001EA3000000121
! 001E905000000021001E9270000001210001F240000000210001F2C000000121000019D0000000210000272000000121
! 00004B600000002100004B700000012100000DF0000000310001E9E00000013100000730730002320001F87000000031
! 0001F8F0000001310001F073B90002320001E140000000210001E150000001210001EE60000000210001EE7000000121
! 000040B000000021000045B00000012100004090000000210000459000000121001057D00000002100105A4000000121
! 00003A800000002100003C80000001210001E5A0000000210001E5B000000121001057F00000002100105A6000000121
! 0000544000000021000057400000012100010FE0000000210001CBE0000001210001E120000000210001E13000000121
! 00010B90000000210002D190000001210000047000000021000006700000012100004FC00000002100004FD000000121
! 0010C920000000210010CD20000001210002C860000000210002C870000001210001E1A0000000210001E1B000000121
! 0010C900000000210010CD000000012100010BF0000000210002D1F00000012100013CA000000021000AB9A000000121
! 0016E490000000210016E690000001210000041000000021000006100000012100001BC00000002100001BD000000121
! 0001EEA0000000210001EEB0000001210000502000000021000050300000012100002480000000210000249000000121
! 0001F950000000310001F9D0000001310001F253B900023200010DF0000000210001C9F00000012100001C4000000031
! 00001C500000013100001C60000002310000546000000021000057600000012100013EF000000021000ABBF000000121
! 0002CCC0000000210002CCD00000012100010D70000000210001C9700000012100013A7000000021000AB77000000121
! 000047A000000021000047B00000012100001340000000210000135000000121000042A000000031000044A000000131
! 0001C860000002310002C190000000210002C4900000012100002040000000210000205000000121000025C000000021
! 000A7AB00000012100024CF00000002100024E90000001210001E540000000210001E550000001210010579000000021
! 00105A00000001210016EB80000000210016ED3000000121000054A000000021000057A0000001210016EA6000000021
! 0016EC1000000121000A684000000021000A685000000121000FF27000000021000FF470000001210001F05000000021
! 0001F0D000000121000FB1300000002100005745760001220002132000000021000214E000000121000024C000000021
! 000024D000000121000A7D2000000021000A7D30000001210002CC60000000210002CC700000012100013B5000000021
! 000AB850000001210002C1D0000000210002C4D000000121000023F0000000210002C7E000000121000A742000000021
! 000A7430000001210001E620000000210001E630000001210010408000000021001043000000012100000B5000000031
! 000039C00000013100003BC0000002310001F810000000310001F890000001310001F013B90002320010C9A000000021
! 0010CDA000000121000012E000000021000012F0000001210000403000000021000045300000012100001FE000000021
! 00001FF0000001210000345000000041000039900000014100003B90000002410001FBE0000003410000174000000021
! 000017500000012100003CF00000002100003D700000012100024CD00000002100024E70000001210001FB3000000031
! 0001FBC00000013100003B13B900023200118AD00000002100118CD000000121000A744000000021000A745000000121
! 00000D900000002100000F90000001210001E0C0000000210001E0D0000001210002C170000000210002C47000000121
! 00003E200000002100003E3000000121000026C000000021000A7AD000000121000A756000000021000A757000000121
! 00004050000000210000455000000121000019700000002100002680000001210001F600000000210001F68000000121
! 0001EEC0000000210001EED0000001210002C8C0000000210002C8D00000012100010F20000000210001CB2000000121
! 000A7CC000000021000A7CD0000001210010D590000000210010D79000000121001040A0000000210010432000000121
! 00013C6000000021000AB96000000121001E91D000000021001E93F00000012100104B600000002100104DE000000121
! 0000424000000021000044400000012100001A90000000210000283000000121000039A00000003100003BA000000131
! 00003F000000023100010E50000000210001CA500000012100104C800000002100104F00000001210010407000000021
! 001042F00000012100013D0000000021000ABA00000001210001FA20000000310001FAA0000001310001F623B9000232
! 000046C000000021000046D00000012100010A00000000210002D00000000121000A782000000021000A783000000121
! 00000C500000003100000E5000000131000212B00000023100004B400000002100004B50000001210002CCE000000021
! 0002CCF0000001210001FF20000000210001F7C3B9000122000FF21000000021000FF41000000121000A73A000000021
! 000A73B00000012100104B900000002100104E10000001210010D560000000210010D760000001210001EA4000000021
! 0001EA5000000121000038F00000002100003CE00000012100024BE00000002100024D800000012100003B0000000031
! 0001FE300000013100003C5308301233000004900000002100000690000001210010CA80000000210010CE8000000121
! 00002460000000210000247000000121001E91F000000021001E9410000001210001F730000000210001FC9000000121
! 0002C670000000210002C680000001210002166000000021000217600000012100001000000000210000101000000121
! 0016EA00000000210016EBB00000012100003E400000002100003E500000012100013D2000000021000ABA2000000121
! 000A7D4000000021000A7D5000000121000A79E000000021000A79F0000001210001FA00000000310001FA8000000131
  0001F603B90002320010CB10000000210010CF10000001210016E5D0000000210016E7D00000012100010C1000000021
  0002D21000000121000A7F5000000021000A7F600000012100013BE000000021000AB8E000000121000042C000000021
! 000044C0000001210001FC400000002100003AE3B90001220016E410000000210016E6100000012100010DD000000021
! 0001C9D0000001210001F930000000310001F9B0000001310001F233B9000232000024E000000021000024F000000121
! 00004BC00000002100004BD0000001210000176000000021000017700000012100013AB000000021000AB7B000000121
! 00013E1000000021000ABB1000000121000050400000002100005050000001210001F030000000210001F0B000000121
! 000A686000000021000A687000000121000054C000000021000057C0000001210016E4F0000000210016E6F000000121
! 00010EB0000000210001CAB00000012100013D9000000021000ABA9000000121000023A0000000210002C65000000121
! 00004A800000002100004A90000001210002CDA0000000210002CDB000000121000041E000000031000043E000000131
! 0001C820000002310001F810000000310001F890000001310001F013B9000232000039400000002100003B4000000121
! 0002C720000000210002C73000000121000051000000002100005110000001210001E260000000210001E27000000121
! 000A642000000021000A64300000012100004C900000002100004CA00000012100001470000000210000148000000121
! 0001EB00000000210001EB1000000121000A75E000000021000A75F000000121001058C00000002100105B3000000121
! 000A73C000000021000A73D00000012100104D100000002100104F900000012100104D200000002100104FA000000121
! 001059000000002100105B7000000121000005500000002100000750000001210001F110000000210001F19000000121
! 000037B00000002100003FD0000001210001F310000000210001F390000001210002CBA0000000210002CBB000000121
! 000055200000002100005820000001210001FC30000000310001FCC00000013100003B73B90002320001E6E000000021
! 0001E6F0000001210002167000000021000217700000012100000DE00000002100000FE0000001210000190000000021
! 000025B000000121000A68C000000021000A68D0000001210001EF80000000210001EF90000001210010D5F000000021
! 0010D7F00000012100104B000000002100104D80000001210010C8E0000000210010CCE0000001210002C08000000021
! 0002C38000000121000016E000000021000016F0000001210016E5C0000000210016E7C00000012100010CD000000021
! 0002D2D0000001210001F7B0000000210001FEB0000001210001E900000000210001E9100000012100013B3000000021
! 000AB8300000012100001D100000002100001D20000001210016EB40000000210016ECF0000001210001F53000000021
! 0001F5B000000121000012600000002100001270000001210001E480000000210001E490000001210002C98000000021
! 0002C99000000121001040000000002100104280000001210001FA30000000310001FAB0000001310001F633B9000232
! 00118B900000002100118D900000012100013B0000000021000AB800000001210001ED80000000210001ED9000000121
! 0010CA40000000210010CE40000001210001F740000000210001FCA00000012100004220000000410000442000000141
! 0001C840000002410001C850000003410001EF20000000210001EF300000012100021610000000210002171000000121
! 0010420000000021001044800000012100001F100000003100001F200000013100001F300000023100001D7000000021
! 00001D8000000121000A68A000000021000A68B00000012100003F700000002100003F8000000121000FF35000000021
! 000FF5500000012100003DC00000002100003DD0000001210010C8D0000000210010CCD0000001210000418000000021
! 00004380000001210000212000000021000021300000012100004F000000002100004F100000012100024C1000000021
! 00024DB000000121000050A000000021000050B000000121001E917000000021001E939000000121000A644000000021
! 000A6450000001210000537000000021000056700000012100010AC0000000210002D0C00000012100010AD000000021
! 0002D0D00000012100024C700000002100024E1000000121000046000000002100004610000001210002C2B000000021
! 0002C5B0000001210016E560000000210016E7600000012100010C70000000210002D27000000121000FB05000000031
! 000FB0600000013100000730740002320002CD40000000210002CD500000012100010F10000000210001CB1000000121
! 0001F7A0000000210001FEA0000001210002C0B0000000210002C3B000000121000FF34000000021000FF54000000121
! 0010406000000021001042E0000001210000417000000021000043700000012100118BA00000002100118DA000000121
! 0001F820000000310001F8A0000001310001F023B900023200001F100000003100001F200000013100001F3000000231
! 000039500000003100003B500000013100003F500000023100001B70000000210000292000000121000018F000000021
! 000025900000012100005380000000210000568000000121000A66A000000021000A66B0000001210001F32000000021
! 0001F3A00000012100104210000000210010449000000121000052A000000021000052B0000001210000425000000021
! 0000445000000121000A784000000021000A785000000121000004F000000021000006F000000121000A664000000021
! 000A6650000001210001FA20000000310001FAA0000001310001F623B900023200104B100000002100104D9000000121
! 00000C400000002100000E40000001210010CA50000000210010CE50000001210001EAA0000000210001EAB000000121
! 00013D8000000021000ABA80000001210010D550000000210010D7500000012100000DF0000000310001E9E000000131
! 000007307300023200010E40000000210001CA400000012100000D800000002100000F80000001210016EAE000000021
! 0016EC900000012100001CA00000003100001CB00000013100001CC00000023100010D10000000210001C91000000121
  0010575000000021001059C000000121000216C000000021000217C0000001210002C020000000210002C32000000121
  0010D580000000210010D78000000121000A7D8000000021000A7D9000000121000FF22000000021000FF42000000121
  0016E5B0000000210016E7B0000001210000404000000021000045400000012100010B30000000210002D13000000121
*************** static immutable ulong[] t = x"
*** 869,880 ****
  000A78D0000001210001FB600000002100003B13420001220001FA10000000310001FA90000001310001F613B9000232
  0001EDE0000000210001EDF00000012100013B9000000021000AB8900000012100001680000000210000169000000121
  0000226000000021000022700000012100013F100000002100013F90000001210001E060000000210001E07000000121
! 00001200000000210000121000000121001041D0000000210010445000000121001058200000002100105A9000000121
! 0001F660000000210001F6E0000001210001E96000000021000006833100012200010A60000000210002D06000000121
! 0010C910000000210010CD10000001210001D8E000000021000A7C60000001210010C840000000210010CC4000000121
! 000FF2B000000021000FF4B00000012100118A300000002100118C300000012100000480000000210000068000000121
! 00013CC000000021000AB9C000000121001E91E000000021001E940000000121000038E00000002100003CD000000121
! 00005310000000210000561000000121";
  return FCE(t[index]);
  }
  
--- 883,894 ----
  000A78D0000001210001FB600000002100003B13420001220001FA10000000310001FA90000001310001F613B9000232
  0001EDE0000000210001EDF00000012100013B9000000021000AB8900000012100001680000000210000169000000121
  0000226000000021000022700000012100013F100000002100013F90000001210001E060000000210001E07000000121
! 0016EA70000000210016EC200000012100001200000000210000121000000121001041D0000000210010445000000121
! 001058200000002100105A90000001210001F660000000210001F6E0000001210001E960000000210000068331000122
! 00010A60000000210002D060000001210010C910000000210010CD10000001210001D8E000000021000A7C6000000121
! 0010C840000000210010CC4000000121000FF2B000000021000FF4B00000012100118A300000002100118C3000000121
! 0000048000000021000006800000012100013CC000000021000AB9C000000121001E91E000000021001E940000000121
! 000038E00000002100003CD00000012100005310000000210000561000000121";
  return FCE(t[index]);
  }
  
*************** private alias _U = immutable(UnicodeProp
*** 884,905 ****
  @property static _U[] tab() pure { return _tab; }
  static immutable:
  private alias _T = ubyte[];
! _T ID_Start = x" ";
  _T Cs = x"A0D8008800";
  _T Default_Ignorable_Code_Point = x"80AD0182A10182CC018B4202865302550587FB051A05311090F401A0CC9B1080EF0180A0014F09A0BCA70494CF08AC2E859000";
  _T Pd = x"2D01855C0133018E41018405018809068E010102011F0204011C0181BE0113016F01A0CD900225010A0180A9018E6001813E01";
! _T Unified_Ideograph = x"A0340099C040A05200A05A0E02010101020A01010101020203A105D6A0A6E020903A0680DE0296820E9D310F826E91A2934B059060";
  _T IDS_Binary_Operator = x"A02FF002020A81F101";
! _T Sm = x"2B0110033D0101012D01040125011F0182FE01820F039A3B010D0127030D03808B01270506014405050204010201020107011F02020101011F810C20025A011E19280681D501090136086F01815005021F0A1081008083163F042002810230150206A0CFDC01833801010380A40110033D01010180830106048DA102A0C9310119011F0119011F0119011F0119011F011901972C02";
  _T Pi = x"80AB019F6C010202020119018DC8010101040102010F010301";
  _T Other_Grapheme_Extend = x"89BE01180181660118016601180180E80101010402010209026701180177010F018935011E0184000105010101050265014702841801902102A07923016C01A055DD0292200174018108010E0109016001090102010103050180E0010C0180F1018106018279010C01860301A050AE02A06173020606AC2EAD60";
! _T Grapheme_Extend = x" ";
  _T Other_ID_Start = x"98850288910115018F6C02";
  _T Pattern_Syntax = x"210F0A071A0401011A042207010101020101010204010401030117011F019F1818080F0213010A813182D080A082761E846C8200808081810304190F01A0CD0D02810502";
  _T Modifier_Combining_Mark = x"86540202018083010601030281E102010303011F01";
! _T Lu = x" ";
! _T Case_Ignorable = x" ";
! _T Lo = x" ";
  _T Pc = x"5F019FDF021301A0DDDE02180380EF01";
  _T Bidi_Control = x"861C0199F1021A053704";
  _T Co = x"A0E0009900AE0700A0FFFE02A0FFFE";
--- 898,919 ----
  @property static _U[] tab() pure { return _tab; }
  static immutable:
  private alias _T = ubyte[];
! _T ID_Start = x" ";
  _T Cs = x"A0D8008800";
  _T Default_Ignorable_Code_Point = x"80AD0182A10182CC018B4202865302550587FB051A05311090F401A0CC9B1080EF0180A0014F09A0BCA70494CF08AC2E859000";
  _T Pd = x"2D01855C0133018E41018405018809068E010102011F0204011C0181BE0113016F01A0CD900225010A0180A9018E6001813E01";
! _T Unified_Ideograph = x"A0340099C040A05200A05A0E02010101020A01010101020203A105D6A0A6E020911E02968E029D310F826E91A2934B05A0212A";
  _T IDS_Binary_Operator = x"A02FF002020A81F101";
! _T Sm = x"2B0110033D0101012D01040125011F0182FE01820F039A3B010D0127030D03808B01270506014405050204010201020107011F02020101011F810C20025A011E19280681D501090136086F01815005021F0A1081008083163F042002810230150206A0CFDC01833801010380A40110033D01010180830106048DA102A0C1600187D00119011F0119011F0119011F0119011F011901972C0289DE09";
  _T Pi = x"80AB019F6C010202020119018DC8010101040102010F010301";
  _T Other_Grapheme_Extend = x"89BE01180181660118016601180180E80101010402010209026701180177010F018935011E0184000105010101050265014702841801902102A07923016C01A055DD0292200174018108010E0109016001090102010103050180E0010C0180F1018106018279010C01860301A050AE02A06173020606AC2EAD60";
! _T Grapheme_Extend = x" ";
  _T Other_ID_Start = x"98850288910115018F6C02";
  _T Pattern_Syntax = x"210F0A071A0401011A042207010101020101010204010401030117011F019F1818080F0213010A813182D080A082761E846C8200808081810304190F01A0CD0D02810502";
  _T Modifier_Combining_Mark = x"86540202018083010601030281E102010303011F01";
! _T Lu = x" ";
! _T Case_Ignorable = x" ";
! _T Lo = x" ";
  _T Pc = x"5F019FDF021301A0DDDE02180380EF01";
  _T Bidi_Control = x"861C0199F1021A053704";
  _T Co = x"A0E0009900AE0700A0FFFE02A0FFFE";
*************** _T Variation_Selector = x"980B030101A0E5
*** 907,969 ****
  _T Soft_Dotted = x"690280C4018119011E01340114018140016201010199090133010D010301808401809D0181A50180D6028B3201A1A7A5023202320232023202320232023202320232023202320232028886018131021A01";
  _T Noncharacter_Code_Point = x"A0FDD020820E02A0FFFE02A0FFFE02A0FFFE02A0FFFE02A0FFFE02A0FFFE02A0FFFE02A0FFFE02A0FFFE02A0FFFE02A0FFFE02A0FFFE02A0FFFE02A0FFFE02A0FFFE02A0FFFE";
  _T Logical_Order_Exception = x"8E40057B058AF0030201A090FA0202010102";
! _T Cased = x" ";
  _T ID_Compat_Math_Continue = x"80B20205019FB601030B010F81730104011601A1B4A20119011F0119011F0119011F0119011F011901";
! _T Math = x" ";
  _T No = x"80B20205010203893506817806780380850780D907110981B10A84351484730A81E0018695010306060A80C610290182D63C4E1682761E856901849404808A0A1E08010F200A270FA0757006A058D12D4104110281551B2404853408190727094B05160680A0020210022E400934021E034B05680818082907814A0681601F809E0A2A047007808614817B1485450281AE09836713835315A04B8607831E17A06429140C146C19954E0983A13B010301044C2D010F83C20D";
! _T ID_Continue = x" ";
  _T Me = x"848802963401861E040103A0858B03";
! _T Ideographic = x"A030060219090E0383C599C040A05200A05900816E026AA0750A011B97F80884D6290AA02467818CA04D04A0A6E020903A0680DE0296820E9D310F826E89A2821E85E2934B059060";
  _T Cf = x"80AD01855206160180C001310181800250018F2B0187FC051A053105010AA0DE8F0180F90390C1010F01A0236210A088600494CF08AC2E86011E60";
! _T So = x" ";
  _T White_Space = x"0905120164011A0195DF01897F0B1D0205012F018FA001";
  _T Sentence_Terminal = x"21010C01100185490180930380B4012B0380F6013D010101030281250286E402831601040283050180C602809D022D010501813A0281620480A2020A0202021D0380BB02410283A401170209038CAF038132010D01160281AD01A074FC01810E0280E3010301817E0256025F0180980280930380900280F901A052260102023B01030280A9010C01100141018AF40284FD052C0480BD0275047F0380810206011002580201026C01812A027502817502050F690280F903820501010180FB02570281A40282B4024A02A04B290280850141020B01822902812801A04E06019DE801";
  _T Lt = x"81C5010201020126019D9508080808080C010F012F01";
! _T Other_Lowercase = x"80AA010F0181F50907021E05600134018D81018C2F3F0D01222582B1010D01100D80D31083501A879202A07A1E0280D20180810303028362040901A05C16010203012A0109A0D8753E";
! _T Other_Alphabetic = x" ";
! _T XID_Continue = x" ";
  _T Cc = x"00205F21";
  _T Regional_Indicator = x"A1F1E61A";
! _T Sc = x"24017D0484E9017B0181F20281F202070180F501810701824501899B0188C421A0877701A055C3016C01809A0180DB0203029FF604A0C31E0189B001";
  _T IDS_Unary_Operator = x"A02FFE02";
  _T Pf = x"80BB019F5D0103011C018DC8010101040102010F010301";
  _T Pe = x"290133011F018EBD010101875E0189A90137010F01827A0101011E01843E0101010101010101010101010150012001010101010101010181940101010101010101010101010101010101010101014001010121018425010101010101012C0101010101010181AC01010101010101010103010101010101010202A0CD1E0180D9011D010101010101010101010101010101030111010101010180AA0133011F0102010201";
  _T Other_Uppercase = x"A021601083461AA1CC601A061A061A";
! _T Cn = x" ";
  _T Hyphen = x"2D017F0184DC01927B018809028E050182E301A0CD670180A9015701";
  _T Other_Math = x" ";
  _T Ps = x"280132011F018EBE010101875E01897E010301260137010F01827A0101011E01843E0101010101010101010101010150012001010101010101010181940101010101010101010101010101010101010101014001010121018425010101010101011901120101010101010181AC01010101010101010103010101010101010201A0CD210180D7011D010101010101010101010101010101030111010101010180AA0132011F0103010201";
  _T Zs = x"20017F0195DF01897F0B24012F018FA001";
! _T Alphabetic = x" ";
! _T XID_Start = x" ";
  _T Grapheme_Link = x"894D017F017F017F017F017F017F017F016D0210017C016F017F0180C90180B40286D9021E01809D01828D0180E30165024602918B01A07A86012501809701808E016C0181350180F601A05E510186060129010E0139017902808B01740180B401620180800371017F0180FC017F0176017401810D0181030280A10153011201510181A501810402510181A902A041EC01";
  _T Dash = x"2D01855C0133018E41018405018809063D0127010F018186018C040102011F0204011C0181BE0113016F01A0CD900225010A0180A9018E6001813E01";
! _T Nl = x"96EE038A6F2302048E7E0119090E03A076AB0AA05A503581CC010801808605A0202A6F";
  _T IDS_Trinary_Operator = x"A02FF202";
  _T Terminal_Punctuation = x" ";
! _T Nd = x"300A86260A80860A80C60A819C0A760A760A760A760A760A760A760A760A760A600A760A460A81160A460A87460A260A812C0A80800A80A60A060A80B60A560A80860A060AA089C60A82A60A260A80C60A160A560A81960AA053160A85860A88860A060A831C0A80800A3C0A80900A81160A81560A760A81760A660A06144C0A81A60A660A82960A560A80F60A460A81A60AA041D60A89260A560A80860A82160AA05F760A8AD43289400A81A60A81F60A80F70A83550A92960A";
  _T ID_Compat_Math_Start = x"A022020104011601A1B4A20119011F0119011F0119011F0119011F011901";
  _T Prepended_Concatenation_Mark = x"86000680D70131018180025001A107DA010F01";
  _T ASCII_Hex_Digit = x"300A07061A06";
! _T Mc = x" ";
  _T Radical = x"A02E801A01590C80D6";
  _T Quotation_Mark = x"220104018083010F019F5C0819028E070181C9040D03A0CE210480BD0104015A02";
  _T Other_Default_Ignorable_Code_Point = x"834F018E0F0286530288AF0190FE01A0CE3B014F09AD000701011E60808080F08E10";
  _T Join_Control = x"A0200C02";
! _T Grapheme_Base = x" ";
! _T Uppercase = x" ";
  _T Zl = x"A0202801";
  _T Hex_Digit = x"300A07061A06A0FEA90A07061A06";
  _T Zp = x"A0202901";
  _T Pattern_White_Space = x"0905120164019F88021802";
! _T Diacritic = x" ";
! _T Lowercase = x" ";
! _T Ll = x" ";
! _T Extender = x"80B701821802836E0181B901827601808901590182F0017F018943013801826301818E0144019389012B0567025D03A06F160185F60183C20116018089016C011502A0547B0188100285CB011B01040184C701812501740281F20384CF01A050A902849C020101A071580284B101835403";
! _T Lm = x"82B012040C0E0507010101808501050181DE0180E60180A402810D0204011F010901030180A00180A70184D4017F0182350186DA016B0182630181D00680AE3F0D01222582B1010D01100D8BDF0280F10180BF0181D5012B05050161025D03A06F160184E206810E0172011C027909500117016903030281D50116018089016C01150267040901A05406012D0287E006012A01098593012001A05DD00481FC03280282260D40020101A0400C0401070102A030313E80C90783AD01845F01";
! _T Mn = x" ";
  _T Sk = x"5E01010147010601040103018209040C0E05070101011175010E0285020197340101030B030D030D030D02909C02A07663170902670283D0010E02A0504611837B01010180A201A0F41705";
! _T Po = x" ";
  _T Deprecated = x"814901852901890301010188290288C50682B902ADDCD601";
  _T Other_ID_Continue = x"80B70182CF018FE10986680186310290ED01A0CE6901";
  _U[] _tab = [
--- 921,983 ----
  _T Soft_Dotted = x"690280C4018119011E01340114018140016201010199090133010D010301808401809D0181A50180D6028B3201A1A7A5023202320232023202320232023202320232023202320232028886018131021A01";
  _T Noncharacter_Code_Point = x"A0FDD020820E02A0FFFE02A0FFFE02A0FFFE02A0FFFE02A0FFFE02A0FFFE02A0FFFE02A0FFFE02A0FFFE02A0FFFE02A0FFFE02A0FFFE02A0FFFE02A0FFFE02A0FFFE02A0FFFE";
  _T Logical_Order_Exception = x"8E40057B058AF0030201A090FA0202010102";
! _T Cased = x" ";
  _T ID_Compat_Math_Continue = x"80B20205019FB601030B010F81730104011601A1B4A20119011F0119011F0119011F0119011F011901";
! _T Math = x" ";
  _T No = x"80B20205010203893506817806780380850780D907110981B10A84351484730A81E0018695010306060A80C610290182D63C4E1682761E856901849404808A0A1E08010F200A270FA0757006A058D12D4104110281551B2404853408190727094B05160680A0020210022E400934021E034B05680818082907814A0681601F809E0A2A047007808614817B1485450281AE09836713835315A04B8607831E17A06429140C146C19954E0983A13B010301044C2D010F83C20D";
! _T ID_Continue = x" ";
  _T Me = x"848802963401861E040103A0858B03";
! _T Ideographic = x"A030060219090E0383C599C040A05200A05900816E026AA0750A010D05099CD629206173A0237D818CA04D04A0A6E020911E02968E029D310F826E89A2821E85E2934B05A0212A";
  _T Cf = x"80AD01855206160180C001310181800250018F2B0187FC051A053105010AA0DE8F0180F90390C1010F01A0236210A088600494CF08AC2E86011E60";
! _T So = x" ";
  _T White_Space = x"0905120164011A0195DF01897F0B1D0205012F018FA001";
  _T Sentence_Terminal = x"21010C01100185490180930380B4012B0380F6013D010101030281250286E402831601040283050180C602809D022D010501813A0281620480A2020A0202021D0380BB02410283A401170209038CAF038132010D01160281AD01A074FC01810E0280E3010301817E0256025F0180980280930380900280F901A052260102023B01030280A9010C01100141018AF40284FD052C0480BD0275047F0380810206011002580201026C01812A027502817502050F690280F903820501010180FB02570281A40282B4024A02A04B290280850141020B01822902812801A04E06019DE801";
  _T Lt = x"81C5010201020126019D9508080808080C010F012F01";
! _T Other_Lowercase = x"80AA010F0181F50907021E05600134018D81018C2F3F0D01222582B1010D01100D80D31083501A879202A07A1E0280D20180800403028362040901A05C16010203012A0109A0D8753E";
! _T Other_Alphabetic = x" ";
! _T XID_Continue = x" ";
  _T Cc = x"00205F21";
  _T Regional_Indicator = x"A1F1E61A";
! _T Sc = x"24017D0484E9017B0181F20281F202070180F501810701824501899B0188C422A0877601A055C3016C01809A0180DB0203029FF604A0C31E0189B001";
  _T IDS_Unary_Operator = x"A02FFE02";
  _T Pf = x"80BB019F5D0103011C018DC8010101040102010F010301";
  _T Pe = x"290133011F018EBD010101875E0189A90137010F01827A0101011E01843E0101010101010101010101010150012001010101010101010181940101010101010101010101010101010101010101014001010121018425010101010101012C0101010101010181AC01010101010101010103010101010101010202A0CD1E0180D9011D010101010101010101010101010101030111010101010180AA0133011F0102010201";
  _T Other_Uppercase = x"A021601083461AA1CC601A061A061A";
! _T Cn = x" ";
  _T Hyphen = x"2D017F0184DC01927B018809028E050182E301A0CD670180A9015701";
  _T Other_Math = x" ";
  _T Ps = x"280132011F018EBE010101875E01897E010301260137010F01827A0101011E01843E0101010101010101010101010150012001010101010101010181940101010101010101010101010101010101010101014001010121018425010101010101011901120101010101010181AC01010101010101010103010101010101010201A0CD210180D7011D010101010101010101010101010101030111010101010180AA0132011F0103010201";
  _T Zs = x"20017F0195DF01897F0B24012F018FA001";
! _T Alphabetic = x" ";
! _T XID_Start = x" ";
  _T Grapheme_Link = x"894D017F017F017F017F017F017F017F016D0210017C016F017F0180C90180B40286D9021E01809D01828D0180E30165024602918B01A07A86012501809701808E016C0181350180F601A05E510186060129010E0139017902808B01740180B401620180800371017F0180FC017F0176017401810D0181030280A10153011201510181A501810402510181A902A041EC01";
  _T Dash = x"2D01855C0133018E41018405018809063D0127010F018186018C040102011F0204011C0181BE0113016F01A0CD900225010A0180A9018E6001813E01";
! _T Nl = x"96EE038A6F2302048E7E0119090E03A076AB0AA05A503581CC010801808605A0202A6FA04B8503";
  _T IDS_Trinary_Operator = x"A02FF202";
  _T Terminal_Punctuation = x" ";
! _T Nd = x"300A86260A80860A80C60A819C0A760A760A760A760A760A760A760A760A760A600A760A460A81160A460A87460A260A812C0A80800A80A60A060A80B60A560A80860A060AA089C60A82A60A260A80C60A160A560A81960AA053160A85860A88860A060A831C0A80800A3C0A80900A81160A81560A760A81760A660A06144C0A81A60A660A82960A560A80F60A460A360A81660AA041D60A89260A560A80860A82160AA05F760A8AD43289400A81A60A81F60A80F70A83550A92960A";
  _T ID_Compat_Math_Start = x"A022020104011601A1B4A20119011F0119011F0119011F0119011F011901";
  _T Prepended_Concatenation_Mark = x"86000680D70131018180025001A107DA010F01";
  _T ASCII_Hex_Digit = x"300A07061A06";
! _T Mc = x" ";
  _T Radical = x"A02E801A01590C80D6";
  _T Quotation_Mark = x"220104018083010F019F5C0819028E070181C9040D03A0CE210480BD0104015A02";
  _T Other_Default_Ignorable_Code_Point = x"834F018E0F0286530288AF0190FE01A0CE3B014F09AD000701011E60808080F08E10";
  _T Join_Control = x"A0200C02";
! _T Grapheme_Base = x" ";
! _T Uppercase = x" ";
  _T Zl = x"A0202801";
  _T Hex_Digit = x"300A07061A06A0FEA90A07061A06";
  _T Zp = x"A0202901";
  _T Pattern_White_Space = x"0905120164019F88021802";
! _T Diacritic = x" ";
! _T Lowercase = x" ";
! _T Ll = x" ";
! _T Extender = x"80B701821802836E0181B901827601808901590182F0017F018943013801826301818E0144019389012B0567025D03A06F160185F60183C20116018089016C011502A0547B0188100285CB011B01040184C701812501740281F20384CF01834001A04D6802849C0201010E02A071480284B101835403";
! _T Lm = x"82B012040C0E0507010101808501050181DE0180E60180A402810D0204011F010901030180A00180A70184D4017F0182350186DA016B0182630181D00680AE3F0D01222582B1010D01100D8BDF0280F10180BF0181D5012B05050161025D03A06F160184E206810E0172011C027909500117016804030281D50116018089016C01150267040901A05406012D0287E006012A010985930120018155018F1301A04D660481FC03280282260D400201010E02A03FFC0401070102A030313E80C90783AD01821301824B01";
! _T Mn = x" ";
  _T Sk = x"5E01010147010601040103018209040C0E05070101011175010E0285020197340101030B030D030D030D02909C02A07663170902670283D0010E02A0504611837B01010180A201A0F41705";
! _T Po = x" ";
  _T Deprecated = x"814901852901890301010188290288C50682B902ADDCD601";
  _T Other_ID_Continue = x"80B70182CF018FE10986680186310290ED01A0CE6901";
  _U[] _tab = [
*************** _T Old_South_Arabian = x"A10A6020";
*** 1114,1119 ****
--- 1128,1135 ----
  _T Cyrillic_Extended_C = x"9C8010";
  _T Myanmar = x"900080A0";
  _T Bassa_Vah = x"A16AD030";
+ _T Tangut_Components_Supplement = x"A18D808080";
+ _T Tai_Yo = x"A1E6C040";
  _T Deseret = x"A1040050";
  _T Phaistos_Disc = x"A101D030";
  _T Common_Indic_Number_Forms = x"A0A83010";
*************** _T Hangul_Compatibility_Jamo = x"A031306
*** 1128,1134 ****
  _T Linear_B_Ideograms = x"A100808080";
  _T Syriac_Supplement = x"886010";
  _T Ahom = x"A1170050";
! _T Shorthand_Format_Controls = x"A1BCA010";
  _T Phonetic_Extensions = x"9D008080";
  _T Nag_Mundari = x"A1E4D030";
  _T Devanagari = x"89008080";
--- 1144,1150 ----
  _T Linear_B_Ideograms = x"A100808080";
  _T Syriac_Supplement = x"886010";
  _T Ahom = x"A1170050";
! _T Beria_Erfe = x"A16EA040";
  _T Phonetic_Extensions = x"9D008080";
  _T Nag_Mundari = x"A1E4D030";
  _T Devanagari = x"89008080";
*************** _T Mayan_Numerals = x"A1D2E020";
*** 1142,1147 ****
--- 1158,1164 ----
  _T Ornamental_Dingbats = x"A1F65030";
  _T Todhri = x"A105C040";
  _T Unified_Canadian_Aboriginal_Syllabics_Extended_A = x"A11AB010";
+ _T Shorthand_Format_Controls = x"A1BCA010";
  _T Greek_and_Coptic = x"83708090";
  _T Symbols_for_Legacy_Computing = x"A1FB008100";
  _T CJK_Unified_Ideographs_Extension_I = x"A2EBF08270";
*************** _T Nyiakeng_Puachue_Hmong = x"A1E10050";
*** 1174,1179 ****
--- 1191,1197 ----
  _T Combining_Half_Marks = x"A0FE2010";
  _T CJK_Unified_Ideographs_Extension_F = x"A2CEB09D40";
  _T Playing_Cards = x"A1F0A060";
+ _T Miscellaneous_Symbols_Supplement = x"A1CEC040";
  _T Malayalam = x"8D008080";
  _T Indic_Siyaq_Numbers = x"A1EC7050";
  _T Variation_Selectors = x"A0FE0010";
*************** _T Alchemical_Symbols = x"A1F7008080";
*** 1238,1243 ****
--- 1256,1262 ----
  _T Bopomofo = x"A0310030";
  _T Adlam = x"A1E90060";
  _T Khitan_Small_Script = x"A18B008200";
+ _T CJK_Unified_Ideographs_Extension_J = x"A323B090D0";
  _T Old_Turkic = x"A10C0050";
  _T Lao = x"8E808080";
  _T Cherokee_Supplement = x"A0AB7050";
*************** _T Arabic = x"86008100";
*** 1328,1333 ****
--- 1347,1353 ----
  _T Kayah_Li = x"A0A90030";
  _T Javanese = x"A0A98060";
  _T Gurung_Khema = x"A1610040";
+ _T Sharada_Supplement = x"A11B6020";
  _T Lydian = x"A1092020";
  _T Aegean_Numbers = x"A1010040";
  _T Symbols_for_Legacy_Computing_Supplement = x"A1CC0082C0";
*************** _T Private_Use_Area = x"A0E0009900";
*** 1367,1373 ****
--- 1387,1395 ----
  _T Kharoshthi = x"A10A0060";
  _T Dives_Akuru = x"A1190060";
  _T Ancient_Symbols = x"A1019040";
+ _T Sidetic = x"A1094020";
  _T Katakana = x"A030A060";
+ _T Tolong_Siki = x"A11DB040";
  _T Ideographic_Description_Characters = x"A02FF010";
  _T Cyrillic_Extended_B = x"A0A64060";
  _T Meroitic_Cursive = x"A109A060";
*************** _U("Basic Latin", Basic_Latin),
*** 1454,1459 ****
--- 1476,1482 ----
  _U("Bassa Vah", Bassa_Vah),
  _U("Batak", Batak),
  _U("Bengali", Bengali),
+ _U("Beria Erfe", Beria_Erfe),
  _U("Bhaiksuki", Bhaiksuki),
  _U("Block Elements", Block_Elements),
  _U("Bopomofo", Bopomofo),
*************** _U("CJK Unified Ideographs Extension F",
*** 1489,1494 ****
--- 1512,1518 ----
  _U("CJK Unified Ideographs Extension G", CJK_Unified_Ideographs_Extension_G),
  _U("CJK Unified Ideographs Extension H", CJK_Unified_Ideographs_Extension_H),
  _U("CJK Unified Ideographs Extension I", CJK_Unified_Ideographs_Extension_I),
+ _U("CJK Unified Ideographs Extension J", CJK_Unified_Ideographs_Extension_J),
  _U("Combining Diacritical Marks", Combining_Diacritical_Marks),
  _U("Combining Diacritical Marks Extended", Combining_Diacritical_Marks_Extended),
  _U("Combining Diacritical Marks for Symbols", Combining_Diacritical_Marks_for_Symbols),
*************** _U("Miscellaneous Mathematical Symbols-B
*** 1636,1641 ****
--- 1660,1666 ----
  _U("Miscellaneous Symbols", Miscellaneous_Symbols),
  _U("Miscellaneous Symbols and Arrows", Miscellaneous_Symbols_and_Arrows),
  _U("Miscellaneous Symbols and Pictographs", Miscellaneous_Symbols_and_Pictographs),
+ _U("Miscellaneous Symbols Supplement", Miscellaneous_Symbols_Supplement),
  _U("Miscellaneous Technical", Miscellaneous_Technical),
  _U("Modi", Modi),
  _U("Modifier Tone Letters", Modifier_Tone_Letters),
*************** _U("Runic", Runic),
*** 1692,1700 ****
--- 1717,1727 ----
  _U("Samaritan", Samaritan),
  _U("Saurashtra", Saurashtra),
  _U("Sharada", Sharada),
+ _U("Sharada Supplement", Sharada_Supplement),
  _U("Shavian", Shavian),
  _U("Shorthand Format Controls", Shorthand_Format_Controls),
  _U("Siddham", Siddham),
+ _U("Sidetic", Sidetic),
  _U("Sinhala", Sinhala),
  _U("Sinhala Archaic Numbers", Sinhala_Archaic_Numbers),
  _U("Small Form Variants", Small_Form_Variants),
*************** _U("Tai Le", Tai_Le),
*** 1730,1741 ****
--- 1757,1770 ----
  _U("Tai Tham", Tai_Tham),
  _U("Tai Viet", Tai_Viet),
  _U("Tai Xuan Jing Symbols", Tai_Xuan_Jing_Symbols),
+ _U("Tai Yo", Tai_Yo),
  _U("Takri", Takri),
  _U("Tamil", Tamil),
  _U("Tamil Supplement", Tamil_Supplement),
  _U("Tangsa", Tangsa),
  _U("Tangut", Tangut),
  _U("Tangut Components", Tangut_Components),
+ _U("Tangut Components Supplement", Tangut_Components_Supplement),
  _U("Tangut Supplement", Tangut_Supplement),
  _U("Telugu", Telugu),
  _U("Thaana", Thaana),
*************** _U("Tibetan", Tibetan),
*** 1744,1749 ****
--- 1773,1779 ----
  _U("Tifinagh", Tifinagh),
  _U("Tirhuta", Tirhuta),
  _U("Todhri", Todhri),
+ _U("Tolong Siki", Tolong_Siki),
  _U("Toto", Toto),
  _U("Transport and Map Symbols", Transport_and_Map_Symbols),
  _U("Tulu-Tigalari", Tulu_Tigalari),
*************** _T Nushu = x"A16FE101A0418E818C";
*** 1805,1811 ****
  _T Cuneiform = x"A12000839A666F01050B80C4";
  _T Takri = x"A116803A060A";
  _T Toto = x"A1E2901F";
! _T Latin = x"411A061A2F010F010517011F0181C127059A1B2606310504050D01464181008171010D01100D808D0206011B0111298AD720A07AA2660343020201010108150E83302B01090104A04F9607841A1A061A882506012A0109A0D7451F0606";
  _T Hanunoo = x"972015";
  _T Limbu = x"99001F010C040C0401030C";
  _T Saurashtra = x"A0A88046080C";
--- 1835,1841 ----
  _T Cuneiform = x"A12000839A666F01050B80C4";
  _T Takri = x"A116803A060A";
  _T Toto = x"A1E2901F";
! _T Latin = x"411A061A2F010F010517011F0181C127059A1B2606310504050D01464181008171010D01100D808D0206011B0111298AD720A07AA2660352140F83302B01090104A04F9607841A1A061A882506012A0109A0D7451F0606";
  _T Hanunoo = x"972015";
  _T Limbu = x"99001F010C040C0401030C";
  _T Saurashtra = x"A0A88046080C";
*************** _T Tagbanwa = x"97600D01030102";
*** 1817,1823 ****
  _T Old_Italic = x"A10300240903";
  _T Caucasian_Albanian = x"A10530340B01";
  _T Malayalam = x"8D000D01030133010301060410021A";
! _T Inherited = x"83007081150281C40B1A0182E004915B1F820103010D010704010601030280C640820C0280C2218F39046B02A0CD6510100E83CF0180E201905A01A0BBC42E0217822003110802071E04AC2F5280F0";
  _T Sora_Sompeng = x"A110D019070A";
  _T Linear_B = x"A100000C011A01130102010F020E227B";
  _T Nyiakeng_Puachue_Hmong = x"A1E1002D030E020A0402";
--- 1847,1853 ----
  _T Old_Italic = x"A10300240903";
  _T Caucasian_Albanian = x"A10530340B01";
  _T Malayalam = x"8D000D01030133010301060410021A";
! _T Inherited = x"83007081150281C40B1A0182E004915B2E020C81E403010D010704010601030280C640820C0280C2218F39046B02A0CD6510100E83CF0180E201905A01A0BBC42E0217822003110802071E04AC2F5280F0";
  _T Sora_Sompeng = x"A110D019070A";
  _T Linear_B = x"A100000C011A01130102010F020E227B";
  _T Nyiakeng_Puachue_Hmong = x"A1E1002D030E020A0402";
*************** _T Chakma = x"A11100350112";
*** 1849,1855 ****
  _T Modi = x"A11600450B0A";
  _T Bassa_Vah = x"A16AD01E0206";
  _T Tulu_Tigalari = x"A113800A010102010126010A010102010104010A01020802";
! _T Han = x"A02E801A01590C80D62F01010119090E0483C499C040A05200A05900816E026AA07508020C02A0900EA0A6E020903A0680DE0296820E9D310F826E89A2821E85E2934B059060";
  _T Multani = x"A112800701010104010F010B";
  _T Sunuwar = x"A11BC0220E0A";
  _T Bopomofo = x"82EA02A02E192B7020";
--- 1879,1885 ----
  _T Modi = x"A11600450B0A";
  _T Bassa_Vah = x"A16AD01E0206";
  _T Tulu_Tigalari = x"A113800A010102010126010A010102010104010A01020802";
! _T Han = x"A02E801A01590C80D62F01010119090E0483C499C040A05200A05900816E026AA07508020C07A09009A0A6E020911E02968E029D310F826E89A2821E85E2934B05A0212A";
  _T Multani = x"A112800701010104010F010B";
  _T Sunuwar = x"A11BC0220E0A";
  _T Bopomofo = x"82EA02A02E192B7020";
*************** _T Lao = x"8E810201010105011801010117020
*** 1859,1865 ****
  _T Psalter_Pahlavi = x"A10B801207040C07";
  _T Anatolian_Hieroglyphs = x"A144008247";
  _T Canadian_Aboriginal = x"94008280823046A101BA10";
! _T Common = x" ";
  _T Gothic = x"A103301B";
  _T Yi = x"A0A000848D0337";
  _T Sinhala = x"8D8103011203180109010102070301040601010108060A0203A103EC14";
--- 1889,1895 ----
  _T Psalter_Pahlavi = x"A10B801207040C07";
  _T Anatolian_Hieroglyphs = x"A144008247";
  _T Canadian_Aboriginal = x"94008280823046A101BA10";
! _T Common = x" ";
  _T Gothic = x"A103301B";
  _T Yi = x"A0A000848D0337";
  _T Sinhala = x"8D8103011203180109010102070301040601010108060A0203A103EC14";
*************** _T Dogra = x"A118003C";
*** 1880,1890 ****
  _T Oriya = x"8B01030108020202160107010201050209020202030703040201050212";
  _T Tagalog = x"9700160901";
  _T Sundanese = x"9B8040810008";
  _T Old_Permic = x"A103502B";
  _T Shavian = x"A1045030";
  _T Lycian = x"A102801D";
  _T Miao = x"A16F004B04390711";
! _T Tangut = x"A16FE0011F97F8088300820009";
  _T Bengali = x"8980040108020202160107010103040209020202040801040201050219";
  _T Inscriptional_Pahlavi = x"A10B60130508";
  _T Vithkuqi = x"A105700B010F01070102010B010F01070102";
--- 1910,1921 ----
  _T Oriya = x"8B01030108020202160107010201050209020202030703040201050212";
  _T Tagalog = x"9700160901";
  _T Sundanese = x"9B8040810008";
+ _T Beria_Erfe = x"A16EA0190219";
  _T Old_Permic = x"A103502B";
  _T Shavian = x"A1045030";
  _T Lycian = x"A102801D";
  _T Miao = x"A16F004B04390711";
! _T Tangut = x"A16FE0011F9B0082001F6173";
  _T Bengali = x"8980040108020202160107010103040209020202040801040201050219";
  _T Inscriptional_Pahlavi = x"A10B60130508";
  _T Vithkuqi = x"A105700B010F01070102010B010F01070102";
*************** _T New_Tai_Lue = x"99802C041A060B0302";
*** 1893,1903 ****
  _T Sogdian = x"A10F302A";
  _T Buhid = x"974014";
  _T Manichaean = x"A10AC027040C";
  _T Garay = x"A10D4026031D0802";
  _T Greek = x"83700401030204010104010101010301010114013F0E109926053205040554018140160206022602060208010101010101011F0235010F010E0206011302030109812701A08A3E01A055DA4F1101A0D05F46";
  _T Braille = x"A028008100";
  _T Avestan = x"A10B00360307";
! _T Arabic = x"8600050106010E01030120010A0B1A016C0122503080F01F0102054B011DA0F2507310816B025002360701201070050180878F631F43033704A0DF0004011B010201010201010A0104010101010601040101010101010301020101020101010101010101010102010102040107010401040101010A01110503010501113402";
  _T Javanese = x"A0A9804E020A0402";
  _T Lydian = x"A109201A0501";
  _T Pau_Cin_Hau = x"A11AC039";
--- 1924,1935 ----
  _T Sogdian = x"A10F302A";
  _T Buhid = x"974014";
  _T Manichaean = x"A10AC027040C";
+ _T Tai_Yo = x"A1E6C01F01160802";
  _T Garay = x"A10D4026031D0802";
  _T Greek = x"83700401030204010104010101010301010114013F0E109926053205040554018140160206022602060208010101010101011F0235010F010E0206011302030109812701A08A3E01A055DA4F1101A0D05F46";
  _T Braille = x"A028008100";
  _T Avestan = x"A10B00360307";
! _T Arabic = x"8600050106010E01030120010A0B1A016C0122503080F022054B011DA0F25081EE028090201070050180878F631F430608092106A0DF0004011B010201010201010A0104010101010601040101010101010301020101020101010101010101010102010102040107010401040101010A01110503010501113402";
  _T Javanese = x"A0A9804E020A0402";
  _T Lydian = x"A109201A0501";
  _T Pau_Cin_Hau = x"A11AC039";
*************** _T Gunjala_Gondi = x"A11D600601020125010
*** 1910,1924 ****
  _T Cypriot = x"A10800060201012C010203010201";
  _T Ugaritic = x"A103801E0101";
  _T Georgian = x"90A02601010501022B01048B902B020390402601010501";
! _T Sharada = x"A1118060";
  _T Tamil = x"8B820201060303010403020101010203020303030C040503030104020106010E15A113C5320D01";
  _T Cherokee = x"93A0560206A0977250";
  _T Pahawh_Hmong = x"A16B00460A0A010701150513";
  _T Syloti_Nagri = x"A0A8002D";
  _T Kharoshthi = x"A10A0004010205080103011D0203040A0709";
  _T Zanabazar_Square = x"A11A0048";
  _T Katakana = x"A030A15A020380F01080D02F0158A0CC0E0A012DA0B05204010701020101811F0332010E04";
! _T Telugu = x"8C000D0103011701100209010301040702010302010204020A0709";
  _T Ethiopic = x"92004901040207010101040229010402210104020701010104020F0139010402430220031A99E61709070107010701070107010701070107A07D22060206020609070107A13CB10701040102010F";
  _T Vai = x"A0A500812C";
  _T Bamum = x"A0A6A058A0C1088239";
--- 1942,1957 ----
  _T Cypriot = x"A10800060201012C010203010201";
  _T Ugaritic = x"A103801E0101";
  _T Georgian = x"90A02601010501022B01048B902B020390402601010501";
! _T Sharada = x"A1118060898008";
  _T Tamil = x"8B820201060303010403020101010203020303030C040503030104020106010E15A113C5320D01";
  _T Cherokee = x"93A0560206A0977250";
  _T Pahawh_Hmong = x"A16B00460A0A010701150513";
  _T Syloti_Nagri = x"A0A8002D";
  _T Kharoshthi = x"A10A0004010205080103011D0203040A0709";
  _T Zanabazar_Square = x"A11A0048";
+ _T Sidetic = x"A109401A";
  _T Katakana = x"A030A15A020380F01080D02F0158A0CC0E0A012DA0B05204010701020101811F0332010E04";
! _T Telugu = x"8C000D0103011701100209010301040702010301020204020A0709";
  _T Ethiopic = x"92004901040207010101040229010402210104020701010104020F0139010402430220031A99E61709070107010701070107010701070107A07D22060206020609070107A13CB10701040102010F";
  _T Vai = x"A0A500812C";
  _T Bamum = x"A0A6A058A0C1088239";
*************** _T Old_Uyghur = x"A10F701A";
*** 1929,1937 ****
  _T Mahajani = x"A1115027";
  _T Khmer = x"97805E020A060A81E620";
  _T Grantha = x"A113000401080202021601070102010502090202020302010601050702070305";
! _T Kannada = x"8C800D01030117010A0105020901030104070206020104020A0103";
  _T Kawi = x"A11F00110129031D";
  _T Yezidi = x"A10E802A01030202";
  _T Old_North_Arabian = x"A10A8020";
  _T Tai_Le = x"99501E0205";
  _T Hebrew = x"859137081B0406A0F5281A0105010101020102010A";
--- 1962,1971 ----
  _T Mahajani = x"A1115027";
  _T Khmer = x"97805E020A060A81E620";
  _T Grantha = x"A113000401080202021601070102010502090202020302010601050702070305";
! _T Kannada = x"8C800D01030117010A0105020901030104070205030104020A0103";
  _T Kawi = x"A11F00110129031D";
  _T Yezidi = x"A10E802A01030202";
+ _T Tolong_Siki = x"A11DB02C040A";
  _T Old_North_Arabian = x"A10A8020";
  _T Tai_Le = x"99501E0205";
  _T Hebrew = x"859137081B0406A0F5281A0105010101020102010A";
*************** _U("Bamum", Bamum),
*** 1956,1961 ****
--- 1990,1996 ----
  _U("Bassa_Vah", Bassa_Vah),
  _U("Batak", Batak),
  _U("Bengali", Bengali),
+ _U("Beria_Erfe", Beria_Erfe),
  _U("Bhaiksuki", Bhaiksuki),
  _U("Bopomofo", Bopomofo),
  _U("Brahmi", Brahmi),
*************** _U("Saurashtra", Saurashtra),
*** 2080,2085 ****
--- 2115,2121 ----
  _U("Sharada", Sharada),
  _U("Shavian", Shavian),
  _U("Siddham", Siddham),
+ _U("Sidetic", Sidetic),
  _U("SignWriting", SignWriting),
  _U("Sinhala", Sinhala),
  _U("Sogdian", Sogdian),
*************** _U("Tagbanwa", Tagbanwa),
*** 2094,2099 ****
--- 2130,2136 ----
  _U("Tai_Le", Tai_Le),
  _U("Tai_Tham", Tai_Tham),
  _U("Tai_Viet", Tai_Viet),
+ _U("Tai_Yo", Tai_Yo),
  _U("Takri", Takri),
  _U("Tamil", Tamil),
  _U("Tangsa", Tangsa),
*************** _U("Tibetan", Tibetan),
*** 2105,2110 ****
--- 2142,2148 ----
  _U("Tifinagh", Tifinagh),
  _U("Tirhuta", Tirhuta),
  _U("Todhri", Todhri),
+ _U("Tolong_Siki", Tolong_Siki),
  _U("Toto", Toto),
  _U("Tulu_Tigalari", Tulu_Tigalari),
  _U("Ugaritic", Ugaritic),
*************** x"
*** 2359,2365 ****
  000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006
  000600060006000600060006000600060006000600060006000600060006000600000000000000000000000007FFFFFE
  000000000420040080000000FF7FFFFFAAAAAAAA55AAAAAAAAAAAB55D4AAAAAA4E243129E6512D2AB5555240AA29AAAA
! AAAAAAAA93FAAAAAFFFFAA85FFFFFFFFFFEFFFFF01FFFFFF000000030000001F0000000000000000000000203C8A0000
  00010000FFFFF000AAE37FFF192FAAAA00000000FFFF0000FFFFFFFFAAAAAAAAAAAAA802AAAAAAAAAAAAD554AAAAAAAA
  AAAAAAAA0000AAAA00000000FFFFFFFF000001FF00000000000000000000000000000000000000000000000000000000
  00000000000000000000000000000000000000000000000000000000000000000000000000000000FFFF0000F7FFFFFF
--- 2397,2403 ----
  000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006
  000600060006000600060006000600060006000600060006000600060006000600000000000000000000000007FFFFFE
  000000000420040080000000FF7FFFFFAAAAAAAA55AAAAAAAAAAAB55D4AAAAAA4E243129E6512D2AB5555240AA29AAAA
! AAAAAAAA93FAAAAAFFFFAA85FFFFFFFFFFCFFFFF01FFFFFF000000030000001F0000000000000000000000203C8A0000
  00010000FFFFF000AAE37FFF192FAAAA00000000FFFF0000FFFFFFFFAAAAAAAAAAAAA802AAAAAAAAAAAAD554AAAAAAAA
  AAAAAAAA0000AAAA00000000FFFFFFFF000001FF00000000000000000000000000000000000000000000000000000000
  00000000000000000000000000000000000000000000000000000000000000000000000000000000FFFF0000F7FFFFFF
*************** AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFEAAAAA
*** 2370,2383 ****
  0008C40032108000000043C0FFFF00000000001000000000000000000000000000000000000000000000000000000000
  0000000000000000FFFF0000000003FF00000000FFFF0000FFFFFFFF3FDA1562AAAAAAAAAAAAAAAAAAAAAAAA0008501A
  FFFFFFFF000020BF0000000000000000000000000000000000000000000000000000000000000000AAAAAAAA00002AAA
! 3AAAAAAA00000000000000000000000000000000AAABAAA8AAAAAAAA95FFAAAAAABA50AAAAA082AA0AAA250A075C0000
  00000000FFFF0000F7FFFFFFFFFF03FFFFFFFFFFFFFFFFFF000000000000000000F8007F000000000000000000000000
  00000000000000000000000000000000000000000000000007FFFFFE0000000000000000000000000000000000000000
  00000000FFFFFF000000FFFF000000000000000000000000FF0000000FFFFFFF00000000000000000000000000000000
  FF8000001BFBFFFB000000000000000000000000000000000000000000000000FFFFFFB907FDFFFF0000000000000000
  000000000000000000000000000000000000000000000000FFFFFFFF0007FFFF000000000000000000000000FFFF0000
  0000003F000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFF00000000
! 000000000000000000000000FFFFFFFF00000000000000000000000000000000FC000000000FFFFFFFDFC000000000FF
  0FFFFFFCEBC000000000FFEFFFFFFC00C000000F00FFFFFFFFFC000000000FFFFFFFFFC0FC000000000FFFFFFFFFC000
  000000FF0FFFFFFCFFC000000000FFFFFFFFFC000000003FF7FFFFFCF00000030FDFFFFFFFC00000003F7FFFFFFF0000
  0000FDFFFFFFFC0000000BF7000000007FFFFBFF000007E0000000000000000000000000000000000000000000000000
--- 2408,2421 ----
  0008C40032108000000043C0FFFF00000000001000000000000000000000000000000000000000000000000000000000
  0000000000000000FFFF0000000003FF00000000FFFF0000FFFFFFFF3FDA1562AAAAAAAAAAAAAAAAAAAAAAAA0008501A
  FFFFFFFF000020BF0000000000000000000000000000000000000000000000000000000000000000AAAAAAAA00002AAA
! 3AAAAAAA00000000000000000000000000000000AAABAAA8AAAAAAAA95FFAAAAAABA50AAAAA082AA0AAAA50A075E0000
  00000000FFFF0000F7FFFFFFFFFF03FFFFFFFFFFFFFFFFFF000000000000000000F8007F000000000000000000000000
  00000000000000000000000000000000000000000000000007FFFFFE0000000000000000000000000000000000000000
  00000000FFFFFF000000FFFF000000000000000000000000FF0000000FFFFFFF00000000000000000000000000000000
  FF8000001BFBFFFB000000000000000000000000000000000000000000000000FFFFFFB907FDFFFF0000000000000000
  000000000000000000000000000000000000000000000000FFFFFFFF0007FFFF000000000000000000000000FFFF0000
  0000003F000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFF00000000
! 000000000000000000000000FFFFFFFF00000000F8000000000FFFFF00000000FC000000000FFFFFFFDFC000000000FF
  0FFFFFFCEBC000000000FFEFFFFFFC00C000000F00FFFFFFFFFC000000000FFFFFFFFFC0FC000000000FFFFFFFFFC000
  000000FF0FFFFFFCFFC000000000FFFFFFFFFC000000003FF7FFFFFCF00000030FDFFFFFFFC00000003F7FFFFFFF0000
  0000FDFFFFFFFC0000000BF7000000007FFFFBFF000007E0000000000000000000000000000000000000000000000000
*************** FFFF0200E7FFFFFF000000000000000055555555
*** 2419,2441 ****
  3F00FF00FF00FF00AA003F000000FF00000000000F0000000F000F000F001F003E273884C00F3D50000000200000FFFF
  000000080000000000000000000000000000000000000000000000000000000000000000FFC000000000FFFF00000000
  FFFFFFFF0000FFFF00000000C025EA9D5555555555555555555555550004280500000000000000005555555500001555
! 055555550000000000000000000000000000000055545554555555556A00555555452855555F7D5515411AF500200000
  0000000007FFFFFE000000000000000000000000000000000000000000000000FFFFFFFF000000FF0000000000000000
  00000000FFFF0000000FFFFF00000000000000000000000000000000F7FF00000037F7FF000000000000000000000000
  00000000000000000000000000000000FFFFFFFF0007FFFF00000000000000000000000000000000FFFF00000000003F
  000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFF0000000000000000
! 0000000000000000FFFFFFFF000000000000000000000000000000000000000003FFFFFFFFF0000000003FFFFFFFFF00
  D0000003003FDE64FFFF0000000003FF1FDFE7B07B0000000001FC5FFFFFF0000000003F03FFFFFFFFF0000000003FFF
  FFFFFF00F0000003003FFFFFFFFF0000000003FFFFFFFF000000000107FFFFFCF0000000001FFFFFFFC0000000007FFF
  FFFF0000000001FF0000040000000000FFFFFFFF00000003000000000000000000000000000000000000000000000000
  00000000FFFF0000FFFF03FFFFFF03FF000003FF00000000000000000000000000000000000000000000000000000000
  00000000000000000000000000000000",
  );
! //11904 bytes
  enum simpleCaseTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x"
  000000000000004000000280",
  x"
! 000001000000048000001240",
  x"
  020201000402030206020205070202020202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
--- 2457,2479 ----
  3F00FF00FF00FF00AA003F000000FF00000000000F0000000F000F000F001F003E273884C00F3D50000000200000FFFF
  000000080000000000000000000000000000000000000000000000000000000000000000FFC000000000FFFF00000000
  FFFFFFFF0000FFFF00000000C025EA9D5555555555555555555555550004280500000000000000005555555500001555
! 055555550000000000000000000000000000000055545554555555556A00555555452855555F7D5515555AF500200000
  0000000007FFFFFE000000000000000000000000000000000000000000000000FFFFFFFF000000FF0000000000000000
  00000000FFFF0000000FFFFF00000000000000000000000000000000F7FF00000037F7FF000000000000000000000000
  00000000000000000000000000000000FFFFFFFF0007FFFF00000000000000000000000000000000FFFF00000000003F
  000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFF0000000000000000
! 0000000000000000FFFFFFFF000000000000000001FFFFFF000000000000000003FFFFFFFFF0000000003FFFFFFFFF00
  D0000003003FDE64FFFF0000000003FF1FDFE7B07B0000000001FC5FFFFFF0000000003F03FFFFFFFFF0000000003FFF
  FFFFFF00F0000003003FFFFFFFFF0000000003FFFFFFFF000000000107FFFFFCF0000000001FFFFFFFC0000000007FFF
  FFFF0000000001FF0000040000000000FFFFFFFF00000003000000000000000000000000000000000000000000000000
  00000000FFFF0000FFFF03FFFFFF03FF000003FF00000000000000000000000000000000000000000000000000000000
  00000000000000000000000000000000",
  );
! //12160 bytes
  enum simpleCaseTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x"
  000000000000004000000280",
  x"
! 0000010000000480000012C0",
  x"
  020201000402030206020205070202020202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
*************** x"
*** 2476,2487 ****
  000000000044004300000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000000000000000000000000000000000000000450000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000470046000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- 2514,2525 ----
  000000000044004300000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000000000000000000000000000000000000000450000004700460000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000490048000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
*************** x"
*** 2493,2696 ****
  00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 0947FFFF090D008203250611093500BF09FE0BD00B61006D084606E10B0400E20475085805E705AA0A6307A301950182
! 04EB0534FFFF0303FFFFFFFFFFFFFFFF0948FFFF090E008303260612093600C009FF0BD10B62006E084706E20B0500E3
! 0476085905E805AB0A6407A40196018304EC0535FFFF0304FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF098FFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05C407990876011A09E70B0A03E70261039B056F0B83012A03A3064103210049
! 0905060902A9008805A1072BFFFF00CD09AC0B160511021D08A0071B09190A7505C5079A0877011B09E80B0B03E80262
! 039C05700B84012B03A406420322004A0906060A02AA008905A2072CFFFF00CE09AD0B170512021E08A1071C03760A76
! 0A0D0A0C04DE04DD01D501D40B8E0B8D020A0209074E074D00D000CF08D708D6005E005D062A06290054005306360635
! 02BC02BB067B067A015C015B081F081E0BBF0BBE0805080404D004CF0A940A9301BA01B905A905A80226022509970996
! FFFFFFFF0899089809630962032803270096FFFF0717009700900718083C00910B66083D07E80B67012207E90A530123
! FFFF0A5404EE04ED07E307E20B9C0B9B06D706D601640163069B069A02B402B30620061F000D000C0659065800720071
! 085B085A00D400D30744074301E901E80BB70BB601A601A504D804D70A840A8307ED07EC057C057B09A109A00A2B0A2A
! 063B03770023063C0613002405E9061406A006A90B4E0B4D02740273027F053C0B6F028001B30818FFFF01B40AF40787
! 08DC0A77053608DD0233028509BA0B3F00990098044704DB091500AC033700D5001B001A064406430107010603DB0569
! 09D203DCFFFFFFFF016B016A0777080C01AB07780542079D030B05430AF2030C0260025FFFFFFFFF094A094901B1FFFF
! FFFFFFFFFFFFFFFF0954095305F6095505F805F70B190B1805130B1A07B605140A8F07B707890A90044F078A0AB20450
! 03070AB305670308078805680B8A0B89066D066C016D016C0610060F02CA02C9065F065E00F400F306C106C005860585
! 0AECFFFF0AEE0AED0766076501B202340BA40BA301F501F404260425099B099A0861086005B505B4096A096908E608E5
! 03BA03B908BC08BB0B480B4704280427041704160AC10AC002BE02BD05470546016F016E080F080E05CD05CC086B086A
! FFFF00D606E806E7006600650BB90BB800C400C3075C075B007B007A08AA08A90590058F070F070EFFFFFFFFFFFFFFFF
! FFFFFFFF07B40A3E04DC07B5098707DC014D029506AA014E02DD04290A030A020950094F0330032F097E097D0A270A26
! 0B55040E06A10227FFFF053D08190B700AF5FFFF0A78FFFFFFFF096BFFFFFFFF0B6405370286FFFF0BAC069EFFFF00B7
! 0B4009BB065400FBFFFF09B400ADFFFF05B6FFFFFFFF09160338FFFFFFFFFFFFFFFFFFFFFFFFFFFF0033FFFFFFFFFFFF
! FFFF056A09D3052CFFFFFFFF035CFFFF042A080D079E01ACFFFF02DEFFFFFFFFFFFFFFFFFFFF0AF3FFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFF0094FFFFFFFF0729FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF099CFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04B504B401D701D6FFFFFFFF020001FF
! FFFFFFFF0A67FFFF088E0124038EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02A3084806F1FFFF00EDFFFF081009F80BD6
! 04C50392017E04BE0AEF0A47016801DA099D05B00B3D0B68083E0990010803A706450BA906A2FFFF061D033900AE0351
! 07140927009C086C06F202A400EE084904C609FC017F04BF0AF00A48016901DB099E05B10B3E0B69083F0991010903A8
! 06460BAA06A406A3061E033A00AF035207150928009D086D0BD7081109A209F905B204C0FFFFFFFF0353FFFF09A30BAB
! 018E018D04B904B80ABB0ABA087F087E0598059709B309B20A0F0A0E03C803C7030002FF08EA08E904580457036F036E
! 06470B6A038F01DE0AF105B30AB6FFFF01DF0AB705F105F00A68FFFF088F0125053005050998029B09B80B2B05C20092
! 09230719092100A203290605039D009E0B7B073903CD055603DF07010AE80287088A0ABE04C9012807C8082801BF0A44
! 0527080A02E90AA50B0009D0015D024F067C05910B91096406370A20005503CF0B7C073A03CE055703E007020AE90288
! 088B0ABF04CA012907C9082901C00A450528080B02EA0AA60B0109D1015E0250067D05920B92096506380A21005603D0
! 053105060999029C09B90B2C05C300930924071A092200A3032A0606039E009F0AD50AD405E305E2024E024D0B800B7F
! 0204020303F203F109E209E10879087805B905B80908090708EE08ED03A603A508A808A70961096003EA03E904240423
! 0B580B57FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05BD05BC084B084A00E800E706EA06E90060005F0632063100050004
! 074C074B00CC00CB08D508D4057E057D06CF06CE010D010C0504050301A401A30A410A400466046507D907D80BA60BA5
! 085108500413041209EB09EA0918091703320331090209010A290A2803C403C306DC02E5022906DD05EE022A024105EF
! 0A51024204B00A5207B004B102E607B10246024505720571026C026B06FE06FD005A0059063E063D0020001F06910690
! 01150114068F068E025202510580057F011D011C07C707C604AB04AA079607950AC30AC2047804770240023F0B360B35
! 03980397043804370938093708F208F103440343094E094D0A310A3003E403E3084508440AC70AC607B907B801D101D0
! 0A4C0A4B02CE02CD050004FF0173017206BD06BC05D105D006650664002E002D06510650003A00390BA00B9F00B600B5
! 075607550AFF0AFE08AE08AD050205010BD8FFFF02310180073304C70ACC029D08720AF6059F048D06EF03B301350B99
! 06940390030D035E0696092D0137095606F305CA0B5D0973087A0A360517053A072F029F02390A6D05F20186FFFF07A5
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0BD9FFFF02320181073404C80ACD029E08730AF705A0048E06F003B401360B9A
! 06950391030E035F0697092E0138095706F405CB0B5E0974087B0A370518053B073002A0023A0A6E05F30187FFFF07A6
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF084209E3052303F7071001FA01B50BC4
! 0495024B01BD04A80AD00ACE047B089C081C05810B2D06B8039F00F9043D0660093302E308EB06A7034701510941068A
! 0A1A0B8503DD086E02EB010A0ADAFFFFFFFFFFFFFFFFFFFF0A87FFFFFFFFFFFF0B1B0155040806B1043905DA095C0680
! 0323002F03D506070A22002709510B710573008E087C06CA09D70B14043508A2021F05150A3A077F025301E4072D04E5
! 0AE002AB083809C2059D03ED070603D701200B6BFFFF03AB000EFFFF06AD092FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 043F05EC036C00C5083606DA095E006F038008B30A2C0B5F08E306190341008002010A9F0A8D02D7097F06D205750139
! 0BB407F807E6058B04F1049B077B0A1E02F1045D066603840143087006BA09CA0043046B08BF094300470BD2064C031F
! 023D09DD0B9D0A100084027B075705590A3C0B10079B073101EE053E04CB08DE0A2E029303BB06F505CE020508320B59
! 035805F40366069202B7013B095806C60BBA004D0399063904450063FFFFFFFF0BBB004E039A063A04460064FFFFFFFF
! 0703055805290A460AA80AA705E40966082406B5FFFF0825FFFFFFFFFFFFFFFF0B1C0156040906B2043A05DB095D0681
! 0324003003D606080A23002809520B720574008F087D06CB09D80B15043608A3022005160A3B0780025401E5072E04E6
! 0AE102AC083909C3059E03EE070703D801210B6CFFFF03AC000FFFFF06AE0930FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 051DFFFFFFFFFFFF0319FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0BC8
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 070D070C04DA04D9079407930BBD0BBC082108200482048109AF09AE026A0269058E058D09320931091E091D0340033F
! 02D602D5093E093D046A046903E203E10B3A0B3907E507E404F004EF0A4E0A4D01B001AF05E105E0024A024907480747
! 00DD00DC085F085E00620061062C062B001300120624062302AE02AD06AC06AB0160015F06D106D005C705C607BD07BC
! 0A960A9504A304A2021202110B900B8F0218021703EC03EB0970096F089B089A03610360092A092908FA08F903890388
! 08A508A4098C098B03E603E5020E020D0B740B7301BC01BB0490048F0A720A7107FB07FA05D905D8082F082E0150014F
! 0675067402B602B506490648004C004B06340633008B008A08C708C605550554075407530210020F04D404D301D901D8
! 0A8C0A8B044E044D07EF07EEFFFFFFFFFFFFFFFF08A6FFFFFFFFFFFFFFFF091A031203110910090F09F709F603B003AF
! 025E025D0B0F0B0E043C043B080308020A560A5507CF07CE04D604D5073C073B02240223055C055B009B009A071E071D
! 00A500A4060E060D0050004F066B066A012701260B300B2F02FE02FD05490548011901180790078F04A704A607D307D2
! 0AA20AA104030402025802570BB30BB203CA03C9044A044908FC08FB0920091F036B036A094C094B09BF09BE05620561
! 08C908C80AAA0AA90460045F019C019B0A7A0A7901DD01DC06FA06F900F000EF03B5061B0A32003709790B77056B00F5
! 03B6061C0A330038097A0B78056C00F60A65078B0235019F071204DFFFFFFFFF0A66078C023601A0071304E0FFFFFFFF
! 061503A90018030F0698091301740890061603AA0019031006990914017508910A6902EF01840AFA04BA01A701EA07AC
! 0A6A02F001850AFB04BB01A801EB07AD035A0076036205F908E7000AFFFFFFFF035B0077036305FA08E8000BFFFFFFFF
! 01F0FFFF0A91FFFF04E7FFFF078DFFFF01F1FFFF0A92FFFF04E8FFFF078EFFFF02CF09BC066E044B002B03BF05FB0BC2
! 02D009BD066F044C002C03C005FC0BC302F704550A0602DF02130AA3042B05E50008090B0A890AE2062F032DFFFFFFFF
! 09920B5103B1028F02CB067E091B012C09930B5203B2029002CC067F091C012D03C506FB0A24029908120B4905C80207
! 03C606FC0A25029A08130B4A05C902080BB00A1400DE09DF075D05A6007E028B0BB10A1500DF09E0075E05A7007F028C
! 0682037C09A6FFFFFFFFFFFFFFFFFFFF0683037D02F80456FFFF09A7FFFF099FFFFFFFFF00F7FFFFFFFFFFFFFFFFFFFF
! 0A0702E002140AA4FFFF00F8FFFFFFFF036800BD0393FFFFFFFFFFFFFFFFFFFF036900BE042C05E6FFFFFFFFFFFFFFFF
! 01C9017809FDFFFF02A5FFFFFFFFFFFF01CA01790A8A0AE3FFFF02A6FFFFFFFFFFFFFFFF03CBFFFFFFFFFFFFFFFFFFFF
! 0009090C0630032EFFFF03CCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0716
! FFFFFFFF09E90B63FFFFFFFFFFFFFFFFFFFFFFFFFFFF097BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF097CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0AAB07D0046704A4017A07850A730A0A01F6054A072302FB00E00B1F084E045B
! 0AAC07D1046804A5017B07860A740A0B01F7054B072402FC00E10B20084F045CFFFFFFFF0894FFFFFFFF0895FFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05AC038600A80B5B0763083A0540040A08BD09FA
! 0AC4021907D40497018F022B0AD2073702A70104052E088009A40B53096D067605AD038700A90B5C0764083B0541040B
! 08BE09FB0AC5021A07D504980190022C0AD3073802A80105052F088109A50B54096E0677FFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF067003D3010E0B2106CC084C05210451
! 088C0A810AE401CE077104AC022F02150B9507250281054E0418083009B000AA0967071F05BA00310985065208F7003D
! 03AD0688089601530B41069C03F305EA041007F00AD6011602ED04CD055001C1067103D4010F0B2206CD084D05220452
! 088D0A820AE501CF077204AD023002160B9607260282054F0419083109B100AB0968072005BB00320986065308F8003E
! 03AE0689089701540B42069D03F405EB041107F10AD7011702EE04CE055101C2003C003B031A06550A3F00340A0807DD
! 038A0A09026F038B0B560270040F05B7FFFF02280A4A0A49076BFFFFFFFF076CFFFFFFFFFFFFFFFFFFFFFFFF02960988
! 02B002AF0346034508F408F3093C093B037F037E02C302C209C109C0047E047D081B081A0B8C0B8B0798079704C204C1
! 0A980A9701F301F20584058300D800D7074607450068006708D108D0002200210640063F005C005B0B500B4F026E026D
! 06D906D80192019107DF07DE05D305D2076E076D0A6C0A6B04F404F3028A02890B380B3703B803B70480047F09820981
! 08FE08FD03340333095B095A09ED09EC05940593085308520ADF0ADE042E042D022202210A430A4201AA01A907280727
! 0111011008410840FFFFFFFFFFFFFFFFFFFFFFFF0364FFFF03350365FFFF0336FFFFFFFF06EC06EBFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF084309E4052403F8071101FB01B60BC50496024C01BE04A90AD10ACF047C089D
! 081D05820B2E06B903A000FA043E0661093402E408EC06A8034801520942068B0A1B0B8603DE086F02EC010B0ADBFFFF
! FFFFFFFFFFFFFFFF0A88FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 01E101E00A500A4F0ACB0ACA07BB07BA0142014106B706B602C502C4050A05090040003F065B065A05D505D406630662
! 00790078075A0759004200410BA20BA104FE04FD07A207A10B070B0608B208B102D202D10AF90AF8017D017CFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF052B052A02A202A1097609750A350A34
! 07CD07CC0AB50AB40A700A6F018C018B0768076700B100B008AC08AB054505440602060100360035FFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0007000608D308D200C800C7
! 070B070A00EA00E906260625006A0069FFFFFFFF015A0159085508540B820B81051A051909EF09EE0A5C0A5B02BA02B9
! 089F089E098A098909AB09AA03A203A10B940B9308750874031E031D033C033B021C021B05BF05BE041D041C09B709B6
! 0533053208890888024802470A580A5701010100068506840B460B4506BF06BE015801570679067802F402F306B406B3
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07C0FFFF04E907C1051E04EA0BA80BA7059C059B09E609E50B030B0208650864
! FFFFFFFF0051FFFF0BAD0052FFFFFFFF0B440B4302560255FFFF07AE03BE03BD07F707F604AF04AE040704060A130A12
! 0526052502840283082D082C011F011E07220721096C00B809B50B65FFFF00FC035D072A0B970095060005FF00A100A0
! 070006FF0140013F05660565029802970823082204420441052D07AF07790BC90176077A069F017709C509C4FFFFFFFF
! 03020301FFFFFFFFFFFFFFFF031C031B0B260B2508870886FFFF0448FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A1CFFFFFFFF0A1DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B98FFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 044005ED036D00C6083706DB095F0070038108B40A2D0B6008E4061A0342008102020AA00A8E02D8098006D30576013A
! 0BB507F907E7058C04F2049C077C0A1F02F2045E066703850144087106BB09CB0044046C08C0094400480BD3064D0320
! 023E09DE0B9E0A110085027C0758055A0A3D0B11079C073201EF053F04CC08DF0A2F029403BC06F605CF020608330B5A
! 035905F50367069302B8013C095906C7FFFFFFFFFFFFFFFF082AFFFFFFFF082BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09F0FFFF02710B2705C001450977065C076904E10BAE079107E0013D040C050B
! 0563026302F903F90AB80AE6019907C2061708EFFFFF0461FFFFFFFFFFFFFFFF09F1FFFF02720B2805C101460978065D
! 076A04E20BAF079207E1013E040D050C0564026402FA03FA0AB90AE7019A07C3061808F0FFFF0462FFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF076F0A9905D6077D0808013109DB0ADC0B31098302E709C804F5050F014707F2
! 048900EB08F5064E02D900450378073D041402DB0267055F0BC00149038C068C0AFC0AAD048B07AA023B04930B87079F
! 07700A9A05D7077E0809013209DC0ADD0B32098402E809C904F60510014807F3048A00EC08F6064F02DA00460379073E
! 041502DC026805600BC1014A038D068D0AFD0AAE048C07AB023C04940B8807A0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B080A7D075F07F4022D05870B3B09CE
! 09F4023707B20B7504B202590781049105DC033D06C2034F01C50B6D06E3028D029109D9066803D1002902F5062108FF
! 0A5D077308D80A5FFFFFFFFFFFFFFFFF0B090A7E076007F5022E05880B3C09CF09F5023807B30B7604B3025A07820492
! 05DD033E06C3035001C60B6E06E4028E029209DA066903D2002A02F6062209000A5E077408D90A60FFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 047108AF027500A60B1D06C4025B011209710B79FFFF00B9092505FD092B00BB07EA082601330B7D05770856030903EF
! 042F0599FFFF02B107830A5904F9048706560A61FFFF03C106ED02D308B0FFFF00A7047206C5027601130B1E0B7A025C
! 00BA097205FEFFFF00BC09260827092C0B7E07EB0857013403F00578059A030A02B204300A5AFFFF048807840A6204FA
! 03C2065702D4FFFFFFFF06EEFFFFFFFF049904E3014B019308000BCA058901EC03F506AF045305DE0ABC080603130A7F
! 0BC6093F00C909390749034D008C08B50892046F01020994073508C1007C03720538020B034B04D10B0C0A9B047307BE
! 085C098D055204790704024301C30BCC0A160305FFFF0686FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 049A04E4014C019408010BCB058A01ED03F606B0045405DF0ABD080703140A800BC7094000CA093A074A034E008D08B6
! 0893047001030995073608C2007D03730539020C034C04D20B0D0A9C047407BF085D098E0553047A0705024401C40BCD
! 0A170306FFFF0687FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01C70197075104BC0B1201F808CA09F209C60B23050D08CC01D204F70A7B0741
! 001004830627090301B708B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01C80198075204BD0B1301F908CB09F3
! 09C70B24050E08CD01D304F80A7C0742001104840628090401B808BAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01E605950BCE07C401E201AD04FB04A0037A00D10862074F09A800F1046D0868
! 01610B4B06A508B702E10356064A09090A9D037008660AEA056D046306D403D901E705960BCF07C501E301AE04FC04A1
! 037B00D20863075009A900F2046E086901620B4C06A608B802E20357064B090A0A9E037108670AEB056E046406D503DA
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A000086032B073F041E0265041A060B0945006B057906F7035400160A38062D
! 04C3048501A107CA0708031503170AD808CE05070B2906E50A180A85051B07D60A010087032C0740041F0266041B060C
! 0946006C057A06F8035500170A39062E04C4048601A207CB0709031603180AD908CF05080B2A06E60A190A86051C07D7
! 0404067208DA00570911060304430025038205AE000000C108340761051F054C000207DA0775019D045904B60AC80349
! 027D0B33055D017009CC06C80A040BD4001403740405067308DB00580912060404440026038305AF000100C208350762
! 0520054D000307DB0776019E045A04B70AC9034A027E0B34055E017109CD06C90A050BD500150375FFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
  );
! //11904 bytes
  enum fullCaseTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x"
  000000000000004000000280",
  x"
! 000001000000048000001240",
  x"
  020201000402030206020205070202020202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
--- 2531,2740 ----
  00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 096FFFFF093500840337062F095D00C10A2A0C080B97006F086A06FF0B3800E8048F087C060505C60A9507C5019F018C
! 05050550FFFF0313FFFFFFFFFFFFFFFF0970FFFF0936008503380630095E00C20A2B0C090B980070086B07000B3900E9
! 0490087D060605C70A9607C601A0018D05060551FFFF0314FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09BBFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05E007BB089C01240A130B3E03FD026F03B1058B0BB9013403B9065F0333004B
! 092D062702B9008A05BD074DFFFF00CF09D80B4A052B022908C6073B09410AA705E107BC089D01250A140B3F03FE0270
! 03B2058C0BBA013503BA06600334004C092E062802BA008B05BE074EFFFF00D009D90B4B052C022A08C7073C03880AA8
! 0A390A3804F804F701DF01DE0BC40BC3021602150770076F00D200D108FD08FC0060005F064806470056005506540653
! 02CC02CB0699069801660165084308420BF70BF60827082604EA04E90AC80AC701C401C305C505C40232023109C309C2
! FFFFFFFF08BF08BE098B098A033A03390098FFFF0737009900920738086000930B9C0861080A0B9D012C080B0A85012D
! FFFF0A8605080507080508040BD20BD106F506F4016E016D06B906B802C402C3063E063D000D000C0677067600740073
! 087F087E00D600D50766076501F501F40BED0BEC01B001AF04F204F10AB60AB5080F080E0598059709CD09CC0A5D0A5C
! 065903890025065A063100260607063206BE06C70B840B8302820281028F05580BA5029001BD083CFFFF01BE0B2807A9
! 09040AA905520905023F029509E60B75009B009A045D04F5093D00AE034900D7001B001A06620661010F010E03F10585
! 09FE03F2FFFFFFFF017501740799082E01B5079A055E07BF031B055F0B26031C026E026DFFFFFFFF0972097101BBFFFF
! FFFFFFFFFFFFFFFF097C097B0614097D061606150B4F0B4E052D0B5007D8052E0AC107D907AB0AC2046507AC0AE60466
! 03170AE70583031807AA05840BC00BBF068B068A01770176062E062D02DA02D9067D067C00FA00F906DF06DE05A205A1
! 0B20FFFF0B220B210788078701BC02400BDA0BD902010200043C043B09C709C60885088405D105D009920991090E090D
! 03D003CF08E208E10B7E0B7D043E043D042D042C0AF50AF402CE02CD05630562017901780831083005EB05EA088F088E
! FFFF00D807080707006800670BEF0BEE00C600C5077E077D007D007C08D008CF05AC05AB072F072EFFFFFFFFFFFFFFFF
! FFFFFFFF07D60A7004F607D709B307FE015702A506C8015802ED043F0A2F0A2E097809770342034109AA09A90A590A58
! 0B8B042406BF0233FFFF0559083D0BA60B29FFFF0AAAFFFFFFFF0993FFFFFFFF0B9A05530296FFFF0BE206BCFFFF00B9
! 0B7609E706720101FFFF09E000AFFFFF05D2FFFFFFFF093E034AFFFFFFFFFFFFFFFFFFFFFFFFFFFF0035FFFFFFFFFFFF
! FFFF058609FF0548FFFFFFFF036EFFFF0440082F07C001B6FFFF02EEFFFFFFFFFFFFFFFFFFFF0B27FFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFF0096FFFFFFFF074BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09C8FFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04CF04CE01E101E0FFFFFFFF020C020B
! FFFFFFFF0A99FFFF08B4012E03A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02B3086C0711FFFF00F3FFFF08320A240C0E
! 04DF03A6018804D80B230A79017201E409C905CC0B730B9E086209BC011003BD06630BDF06C0FFFF063B034B00B00363
! 0734094F009E0892071202B400F4086D04E00A28018904D90B240A7A017301E509CA05CD0B740B9F086309BD011103BE
! 06640BE006C206C1063C034C00B1036407350950009F08930C0F083309CE0A2505CE04DAFFFFFFFF0365FFFF09CF0BE1
! 0198019704D304D20AEF0AEE08A508A405B405B309DF09DE0A3D0A3C03DE03DD0310030F09120911046E046D03810380
! 06650BA003A301E80B2505CF0AEAFFFF01E90AEB060F060E0A9AFFFF08B5012F054C051F09C402AB09E40B6105DE0094
! 094B0739094900A4033B062303B300A00BB1075B03E3057203F507210B1C029708B00AF204E3013207EA084C01C90A76
! 0543082C02F90AD90B3409FC0167025D069A05AD0BC7098C06550A50005703E50BB2075C03E4057303F607220B1D0298
! 08B10AF304E4013307EB084D01CA0A770544082D02FA0ADA0B3509FD0168025E069B05AE0BC8098D06560A51005803E6
! 054D052009C502AC09E50B6205DF0095094C073A094A00A5033C062403B400A10B090B0806010600025C025B0BB60BB5
! 0210020F040804070A0E0A0D089F089E05D505D40930092F0916091503BC03BB08CE08CD09890988040003FF043A0439
! 0B8E0B8DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05D905D8086F086E00EE00ED070A0709006200610650064F00050004
! 076E076D00CE00CD08FB08FA059A059906ED06EC01150114051E051D01AE01AD0A730A72047E047D07FB07FA0BDC0BDB
! 08750874042904280A170A160940093F03440343092A09290A5B0A5A03DA03D906FA02F5023506FB060C0236024D060D
! 0A83024E04CA0A8407D204CB02F607D302520251058E058D027A0279071E071D005C005B065C065B0022002106AF06AE
! 011F011E06AD06AC0260025F059C059B0127012607E907E804C504C407B807B70AF70AF604920491024C024B0B6C0B6B
! 03AC03AB044E044D0960095F091A091903560355097609750A630A6203FA03F9086908680AFB0AFA07DB07DA01DB01DA
! 0A7E0A7D02DE02DD051A0519017D017C06DB06DA05EF05EE068306820030002F066F066E003C003B0BD60BD500B800B7
! 077807770B330B3208D408D3051C051B0C10FFFF023D018A075504E10B0002AD08980B2A05BB04A7070F03C9013F0BCF
! 06B203A4031D037006B409550141097E071305E60B93099D08A00A6805310556075102AF02450A9F06100190FFFF07C7
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C11FFFF023E018B075604E20B0102AE08990B2B05BC04A8071003CA01400BD0
! 06B303A5031E037106B509560142097F071405E70B94099E08A10A6905320557075202B002460AA006110191FFFF07C8
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF08660A0F053F040D0730020601BF0BFC
! 04AF025901C704C20B040B02049508C20840059D0B6306D603B500FF0453067E095B02F3091306C50359015B096906A8
! 0A4A0BBB03F3089402FB01120B0EFFFFFFFFFFFFFFFFFFFF0AB9FFFFFFFFFFFF0B51015F041E06CF044F05F80984069E
! 0335003103EB06250A54002909790BA7058F009008A206E80A030B48044B08C8022B052F0A6C07A1026101EE074F04FF
! 0B1402BB085C09EE05B90403072603ED012A0BA1FFFF03C1000EFFFF06CB0957FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 0455060A037E00C7085A06F809860071039208D90A5E0B95090B063703530082020D0AD30ABF02E709AF06F005910143
! 0BEA081A080805A7050B04B5079D0A4E0301047306840396014D089606D809F60045048308E5096B00490C0A066A0331
! 02490A090BD30A3E0086028B077905750A6E0B4407BD075301FA055A04E509060A6002A303D1071505EC021108560B8F
! 036A0612037806B002C70145098006E40BF0004F03AD0657045B0065FFFFFFFF0BF1005003AE0658045C0066FFFFFFFF
! 0723057405450A780ADC0ADB0602098E084806D3FFFF0849FFFFFFFFFFFFFFFF0B520160041F06D0045005F90985069F
! 0336003203EC06260A55002A097A0BA80590009108A306E90A040B49044C08C9022C05300A6D07A2026201EF07500500
! 0B1502BC085D09EF05BA0404072703EE012B0BA2FFFF03C2000FFFFF06CC0958FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 0537FFFFFFFFFFFF032BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C00
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 072D072C04F404F307B607B50BF30BF208450844049C049B09DB09DA0278027705AA05A9095A09590946094503520351
! 02E602E5096609650482048103F803F70B700B6F08070806050A05090A800A7F01BA01B905FF05FE02560255076A0769
! 00E100E00883088200640063064A0649001300120642064102BE02BD06CA06C9016A016906EF06EE05E305E207DF07DE
! 0ACA0AC904BD04BC021E021D0BC60BC502240223040204010998099708C108C0037303720952095109220921039B039A
! 08CB08CA09B809B703FC03FB021A02190BAA0BA901C601C504AA04A90AA40AA3081D081C05F705F608530852015A0159
! 0693069202C602C506670666004E004D06520651008D008C08ED08EC0571057007760775021C021B04EE04ED01E301E2
! 0ABE0ABD0464046308110810FFFFFFFFFFFFFFFF08CCFFFFFFFFFFFFFFFF094203220321093809370A230A2203C603C5
! 026C026B0B430B4204520451082508240A880A8707F107F004F004EF075E075D0230022F05780577009D009C073E073D
! 00A700A6062C062B0052005106890688013101300B660B65030E030D056505640123012207B207B104C104C007F507F4
! 0AD60AD504190418026602650BE90BE803E003DF0460045F0924092309480947037D037C0974097309EB09EA057E057D
! 08EF08EE0ADE0ADD0476047501A601A50AAC0AAB01E701E6071A071900F600F503CB06390A64003909A50BAD058700FB
! 03CC063A0A65003A09A60BAE058800FC0A9707AD024101A9073204F9FFFFFFFF0A9807AE024201AA073304FAFFFFFFFF
! 063303BF0018031F06B6093B017E08B6063403C00019032006B7093C017F08B70A9B02FF018E0B2E04D401B101F607CE
! 0A9C0300018F0B2F04D501B201F707CF036C007803740617090F000AFFFFFFFF036D0079037506180910000BFFFFFFFF
! 01FCFFFF0AC5FFFF0501FFFF07AFFFFF01FDFFFF0AC6FFFF0502FFFF07B0FFFF02DF09E8068C0461002D03D506190BFA
! 02E009E9068D0462002E03D6061A0BFB0307046B0A3202EF021F0AD704410603000809330ABB0B16064D033FFFFFFFFF
! 09BE0B8703C7029F02DB069C0943013609BF0B8803C802A002DC069D0944013703DB071B0A5602A908360B7F05E40213
! 03DC071C0A5702AA08370B8005E502140BE60A4400E20A0B077F05C20080029B0BE70A4500E30A0C078005C30081029C
! 06A0038E09D2FFFFFFFFFFFFFFFFFFFF06A1038F0308046CFFFF09D3FFFF09CBFFFFFFFF00FDFFFFFFFFFFFFFFFFFFFF
! 0A3302F002200AD8FFFF00FEFFFFFFFF037A00BF03A7FFFFFFFFFFFFFFFFFFFF037B00C004420604FFFFFFFFFFFFFFFF
! 01D301820A29FFFF02B5FFFFFFFFFFFF01D401830ABC0B17FFFF02B6FFFFFFFFFFFFFFFF03E1FFFFFFFFFFFFFFFFFFFF
! 00090934064E0340FFFF03E2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0736
! FFFFFFFF0A150B99FFFFFFFFFFFFFFFFFFFFFFFFFFFF09A7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09A8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0ADF07F2047F04BE018407A70AA50A36020205660743030B00E60B5508720471
! 0AE007F3048004BF018507A80AA60A37020305670744030C00E70B5608730472FFFFFFFF08BAFFFFFFFF08BBFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05C8039800AA0B910785085E055C042008E30A26
! 0AF8022507F604B1019902370B06075902B7010A054A08A609D00B890995069405C9039900AB0B920786085F055D0421
! 08E40A270AF9022607F704B2019A02380B07075A02B8010B054B08A709D10B8A09960695FFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF068E03E901160B5706EA0870053D0467
! 08B20AB30B1801D8079304C6023B02210BCB07450291056A042E085409DC00AC098F073F05D6003309B10670091F003F
! 03C306A608BC015D0B7706BA04090608042608120B0A012002FD04E7056C01CB068F03EA01170B5806EB0871053E0468
! 08B30AB40B1901D9079404C7023C02220BCC07460292056B042F085509DD00AD0990074005D7003409B2067109200040
! 03C406A708BD015E0B7806BB040A0609042708130B0B012102FE04E8056D01CC003E003D032C06730A7100360A3407FF
! 039C0A35027D039D0B8C027E042505D3FFFF02340A7C0A7B078DFFFFFFFF078EFFFFFFFFFFFFFFFFFFFFFFFF02A609B4
! 02C002BF03580357091C091B096409630391039002D302D209ED09EC04980497083F083E0BC20BC107BA07B904DC04DB
! 0ACC0ACB01FF01FE05A0059F00DA00D907680767006A006908F708F600240023065E065D005E005D0B860B85027C027B
! 06F706F6019C019B0801080005F105F00790078F0A9E0A9D050E050D029A02990B6E0B6D03CE03CD049A049909AE09AD
! 0926092503460345098309820A190A1805B005AF087708760B130B1204440443022E022D0A750A7401B401B307480747
! 0119011808650864FFFFFFFFFFFFFFFFFFFFFFFF0376FFFF03470377FFFF0348FFFFFFFF070C070BFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF08670A100540040E0731020701C00BFD04B0025A01C804C30B050B03049608C3
! 0841059E0B6406D703B601000454067F095C02F4091406C6035A015C096A06A90A4B0BBC03F4089502FC01130B0FFFFF
! FFFFFFFFFFFFFFFF0ABAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 01EB01EA0A820A810AFF0AFE07DD07DC014C014B06D506D402D502D405240523004200410679067805F305F206810680
! 007B007A077C077B004400430BD80BD70518051707C407C30B3B0B3A08D808D702E202E10B2D0B2C01870186FFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0547054602B202B109A209A10A670A66
! 07EF07EE0AE90AE80AA20AA101960195078A078900B300B208D208D1056105600620061F00380037FFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0007000608F908F800CA00C9
! 072B072A00F000EF06440643006C006BFFFFFFFF01640163087908780BB80BB7053405330A1B0A1A0A8E0A8D02CA02C9
! 08C508C409B609B509D709D603B803B70BCA0BC9089B089A0330032F034E034D0228022705DB05DA0433043209E309E2
! 054F054E08AF08AE025402530A8A0A890107010606A306A20B7C0B7B06DD06DC01620161069706960304030306D206D1
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07E2FFFF050307E3053805040BDE0BDD05B805B70A120A110B370B3608890888
! FFFFFFFF0053FFFF0BE30054FFFFFFFF0B7A0B7902640263FFFF07D003D403D30819081804C904C8041D041C0A430A42
! 0542054102940293085108500129012807420741099400BA09E10B9BFFFF0102036F074C0BCD0097061E061D00A300A2
! 0720071F014A01490582058102A802A70847084604580457054907D1079B0C010180079C06BD018109F109F002740273
! 0312031109AC09AB0A410A40032E032D0B5C0B5B08AD08ACFFFF045EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A4CFFFFFFFF0A4DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0BCEFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 0456060B037F00C8085B06F909870072039308DA0A5F0B96090C063803540083020E0AD40AC002E809B006F105920144
! 0BEB081B080905A8050C04B6079E0A4F0302047406850397014E089706D909F70046048408E6096C004A0C0B066B0332
! 024A0A0A0BD40A3F0087028C077A05760A6F0B4507BE075401FB055B04E609070A6102A403D2071605ED021208570B90
! 036B0613037906B102C80146098106E5FFFFFFFFFFFFFFFF084EFFFFFFFF084FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A1CFFFF027F0B5D05DC014F09A3067A078B04FB0BE407B30802014704220525
! 057F02710309040F0AEC0B1A01A307E406350917FFFF0477FFFFFFFFFFFFFFFF0A1DFFFF02800B5E05DD015009A4067B
! 078C04FC0BE507B4080301480423052605800272030A04100AED0B1B01A407E506360918FFFF0478FFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07910ACD05F4079F082A013B0A070B100B6709B902F709F4050F052901510814
! 04A300F1091D066C02E90047038A075F042A02EB0275057B0BF8015303A006AA0B300AE104A507CC024704AD0BBD07C1
! 07920ACE05F507A0082B013C0A080B110B6809BA02F809F50510052A0152081504A400F2091E066D02EA0048038B0760
! 042B02EC0276057C0BF9015403A106AB0B310AE204A607CD024804AE0BBE07C2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B3C0AAF07810816023905A30B7109FA
! 0A20024307D40BAB04CC026707A304AB05FA034F06E0036101CF0BA30701029D02A10A05068603E7002B0305063F0927
! 0A8F079508FE0A91FFFFFFFFFFFFFFFF0B3D0AB007820817023A05A40B7209FB0A21024407D50BAC04CD026807A404AC
! 05FB035006E1036201D00BA40702029E02A20A06068703E8002C0306064009280A90079608FF0A92FFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 048908D5028500A80B5306E20269011A09990BAFFFFF00BB094D061B095300BD080C084A013D0BB30593087A03190405
! 044505B5FFFF02C107A50A8B051304A106740A93FFFF03D7070D02E308D6FFFF00A9048A06E30286011B0B540BB0026A
! 00BC099A061CFFFF00BE094E084B09540BB4080D087B013E0406059405B6031A02C204460A8CFFFF04A207A60A940514
! 03D8067502E4FFFFFFFF070EFFFFFFFF04B304FD0155019D08220C0205A501F8040B06CD046905FC0AF0082803230AB1
! 0BFE096700CB0961076B035F008E08DB08B80487010809C0075708E7007E038405540217035D04EB0B400ACF048B07E0
! 08800A2C056E04930724024F01CD0C040A460315FFFF06A4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 04B404FE0156019E08230C0305A601F9040C06CE046A05FD0AF1082903240AB20BFF096800CC0962076C0360008F08DC
! 08B90488010909C1075808E8007F038505550218035E04EC0B410AD0048C07E108810A2D056F04940725025001CE0C05
! 0A470316FFFF06A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01D101A1077304D60B46020408F00A1E09F20B59052708F201DC05110AAD0763
! 0010049D0645092B01C108DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01D201A2077404D70B47020508F10A1F
! 09F30B5A052808F301DD05120AAE07640011049E0646092C01C208E0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01F005B10C0607E601EC01B7051504BA038C00D30886077109D400F70485088C
! 016B0B8106C308DD02F10368066809310AD10382088A0B1E0589047906F203EF01F105B20C0707E701ED01B8051604BB
! 038D00D40887077209D500F80486088D016C0B8206C408DE02F20369066909320AD20383088B0B1F058A047A06F303F0
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A520088033D07610434028304300629096D006D05950717036600160A6A064B
! 04DD049F01AB07EC0728032503290B0C08F405210B5F07050A480AB7053507F80A530089033E0762043502840431062A
! 096E006E05960718036700170A6B064C04DE04A001AC07ED07290326032A0B0D08F505220B6007060A490AB8053607F9
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00DB0A3A0703039E00E403AF0BF4099F05E8048D08340257011C090208900B4C
! 010C01F20749000003270AC30539047BFFFF099B0A3BFFFF039F00DC03B0070409A000E5048E0BF5025805E909030835
! 0B4D011D01F308910001010D0AC4074A047C0328099C053AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF041A0690090000590939062104590027039405CA001F00C308580783053B0568
+ 000207FC079701A7046F04D00AFC035B028D0B690579017A09F806E60A300C0C00140386041B06910901005A093A0622
+ 045A0028039505CB002000C408590784053C0569000307FD079801A8047004D10AFD035C028E0B6A057A017B09F906E7
+ 0A310C0D00150387FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
  );
! //12160 bytes
  enum fullCaseTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x"
  000000000000004000000280",
  x"
! 0000010000000480000012C0",
  x"
  020201000402030206020205070202020202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
*************** x"
*** 2731,2742 ****
  000000000044004300000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000000000000000000000000000000000000000450000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000470046000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- 2775,2786 ----
  000000000044004300000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000000000000000000000000000000000000000450000004700460000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000490048000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
*************** x"
*** 2748,2951 ****
  00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 09E8FFFF09AC008C0350066E09D600C90AAA0CA00C2A007608D107500BC300F104B408E3063F05FC0B16081C01AE019B
! 0533057FFFFF032AFFFFFFFFFFFFFFFF09E9FFFF09AD008D0351066F09D700CA0AAB0CA10C2B007708D207510BC400F2
! 04B508E4064005FD0B17081D01AF019C05340580FFFF032BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A35FFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF061B0810090301300A900BCC041E028103CD05BC0C4E014003D506A0034C0050
! 09A4066602CC009205F0079BFFFF00D70A540BDB0559023A0931078B0BD60B29061C0811090401310A910BCD041F0282
! 03CE05BD0C4F014103D606A1034D005109A5066702CD009305F1079CFFFF00D80A550BDC055A023B0932078C03A70B2A
! 0AB90AB80524052301EE01ED0C590C580227022607C207C100DA00D9096C096B0067006606890688005D005C06950694
! 02E202E106DC06DB0175017408A708A60C8B0C8A08860885051605150B4A0B4901D301D205FB05FA024302420A3E0A3D
! FFFF0402092A09290A070A060353035200A0FFFF078700A1009A078808C7009B0C2F08C808620C30013808630B060139
! 03240B0705360535085D085C0C670C6607440743017D017C0703070202DA02D9067F067E000F000E06B806B7007B007A
! 08E608E500DE00DD07B807B7020502040C830C8201BF01BE051E051D0B3A0B390869086805C905C80A480A470ADB0ADA
! 069A03A80027069B0670002806410671070807110C160C1502940293029F05870C3802A001CC089FFFFF01CD0BB307FE
! 09760B2B05810977025102A50A620C0600A300A20482052109B400B6036200DF001F001E06A306A2011A0119041205B6
! 0A7A0413FFFFFFFF0184018307EE089201C407EF058D08160332058E0BB103330280027FFFFFFFFF09EB09EA01CAFFFF
! FFFFFFFFFFFFFFFF09F809F7065109F9065306520BDE0BDD055B0BDF0830055C0B45083108000B46048A08010B6B048B
! 032E0B6C05B4032F07FF05B50C550C5406CE06CD01860185066D066C02F002EF06BE06BD01030102072C072B05D305D2
! 0BAB09480BAD0BAC07DD07DC01CB02520C6F0C6E02110210046104600A420A4108EE08ED060706060A0E0A0D09830982
! 03ED03EC095109500C0F0C0E04630462045204510B7A0B7902E402E30592059101880187089508940625062408F808F7
! FFFF00E007570756006F006E0C850C8400CE00CD07D207D100840083093B093A05DF05DE077F077EFFFFFFFFFFFFFFFF
! FFFFFFFF082E0AEE0522082F0A2D0856016602B707120167030404640AAF0AAE09F109F0035B035A0A240A230AD70AD6
! 0C1E044707090244FFFF058808A00C390BB4FFFF0B2CFFFFFFFF0A0FFFFFFFFF0C2D058202A6FFFF0C770706FFFF00C1
! 0C070A6306B3010BFFFF0A5C00B7FFFF060DFFFFFFFF09B50363FFFFFFFFFFFFFFFFFFFFFFFFFFFF0037FFFFFFFFFFFF
! FFFF05B70A7B0575FFFFFFFF038CFFFF04650893081701C5FFFF0305FFFFFFFFFFFFFFFFFFFF0BB2FFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFF009EFFFFFFFF0799FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A43FFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04F404F301F001EFFFFFFFFF021C021B
! FFFFFFFF0B1AFFFF091F013A03BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02C608D30760FFFF00FCFFFF08960AA30CA6
! 050B08A1019705010BAE0AFA018101F30A4406020C040C3108C90A36011B03D906A40C74070AFFFF067C036400B8037E
! 078409C800A608F9076102C700FD08D4050C0AA7019805020BAF0AFB018201F40A4506030C050C3208CA0A37011C03DA
! 06A50C75070C070B067D036500B9037F078509C900A708FA0CA708970A490AA406040503FFFFFFFF0380FFFF0A4A0C76
! 01A701A604FC04FB0B740B730910090F05E705E60A5B0A5A0ABB0ABA03FC03FB03270326098709860493049203A0039F
! 06A60C3303C001F70BB006050B6FFFFF01F80B70064706460B1BFFFF0920013B057B054D0A3F02BE0A600BF00619009C
! 09C4078909C200AC0354066003CF00A80C4407AA040405A3041607710BA402A7091B0B77050F013E084208B201D80AF4
! 0570089003100B5E0BBF0A780176026F06DD05E00C5C0A0806960ACD005E04080C4507AB040505A4041707720BA502A8
! 091C0B780510013F084308B301D90AF50571089103110B5F0BC00A790177027006DE05E10C5D0A0906970ACE005F0409
! 057C054E0A4002BF0A610BF1061A009D09C5078A09C300AD0355066103D000A90B8E0B8D063B063A026E026D0C490C48
! 0220021F042904280A8B0A8A09060905060C060B09A709A6098B098A03D803D7093909380A050A0404210420045F045E
! 0C210C20FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0614061308D608D500F700F607590758006900680691069000050004
! 07C007BF00D600D5096A096905CB05CA073C073B0120011F054C054B01BD01BC0AF10AF004A304A2085308520C710C70
! 08DC08DB044E044D0A940A9309B709B6035D035C099F099E0AD90AD803F703F6074B030C0246074C06480247025F0649
! 0B04026004EF0B05082A04F0030D082B0264026305BF05BE028C028B076E076D00630062069D069C0024002306F806F7
! 012B012A06F306F20272027105CD05CC013301320841084004EA04E9080D080C0B7C0B7B04B704B6025E025D0BFB0BFA
! 03CA03C90473047209D909D8098F098E0371037009EF09EE0AE10AE0041B041A08D008CF0B800B7F0833083201EA01E9
! 0AFF0AFE02F502F405480547018C018B072807270629062806C406C30032003106B006AF003E003D0C6B0C6A00C000BF
! 07CA07C90BBE0BBD09430942054A05490CA8FFFF024F019907A3050D0B8502C008FF0BB505EE04CC075E03E6014C0C64
! 06FC03C10334038E06FE09CE014E09FA076206220C260A1709070AE6055F0585079F02C202570B20064D019FFFFF081E
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0CA9FFFF0250019A07A4050E0B8602C109000BB605EF04CD075F03E7014D0C65
! 06FD03C20335038F06FF09CF014F09FB076306230C270A1809080AE70560058607A002C302580B21064E01A00678081F
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF08CD0A8C056C042E0780021601CE0C94
! 04D4026B01D604E70B890B8704BA092D08A405CE0BF2072303D10109047806BF09D4030A0988070F0374016A09E206EC
! 0AC70C50041408FB0312011D0B93FFFFFFFFFFFFFFFFFFFF0B3DFFFFFFFFFFFF0BE0016E0441071A047406320A0006E2
! 034E0033040A06620AD1002B09F50C3A05C00098090B07370A7F0BD904700933023C055D0AEA07F6027301FD079D052B
! 0B9A02CE08C30A6A05EC04240776040C01360C34FFFF03DD0010FFFF071509D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 047A0644039D00CF08C107490A02007803B1095F0ADC0C2809800676036E008E021D0B560B4302FE0A25073F05C20150
! 0C800879086005DA053904DA07F20ACB0318049806C503B5015A08FD07250A72004C04A8095409E4004E0CA206AB034A
! 025B0A850C680ABC0096029B07CD05A60AEC0BD2081407A1020A05890511097B0ADE02B503EE07640626022108BD0C3E
! 0386064F03A5072F02DD015209FC07330C86005603CB06980480006CFFFFFFFF0C87005703CC06990481006DFFFFFFFF
! 077305A505720AF60B610B60063C0A0A08AE0720FFFF08AFFFFFFFFFFFFFFFFF0BE1016F0442071B047506330A0106E3
! 034F0034040B06630AD2002C09F60C3B05C10099090C07380A800BDA04710934023D055E0AEB07F7027401FE079E052C
! 0B9B02CF08C40A6B05ED04250777040D01370C35FFFF03DE0011FFFF071609D1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 0577FFFFFFFFFFFF0344FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C98
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 077D077C0520051F080B080A0C890C8808A908A804C104C00A570A56028A028905DD05DC09D309D209BF09BE036D036C
! 02FD02FC09DF09DE04A704A6041904180BFF0BFE085F085E053805370B010B0001C901C806390638026A026907BC07BB
! 00E700E608EA08E9006B006A068B068A001500140683068202D102D00714071301790178073E073D061E061D08370836
! 0B4C0B4B04E204E1022F022E0C5B0C5A02350234042304220A140A13092C092B0391039009CB09CA0997099603BA03B9
! 093609350A320A31041D041C022B022A0C3D0C3C01D501D404CF04CE0B260B25087C087B0631063008BA08B901690168
! 06D606D502DC02DB06A806A7005300520693069200950094095C095B05A205A107C807C7022D022C051A051901F201F1
! 0B420B4104890488086B086A00E10C9205D00406093704ACFFFFFFFFFFFF0BD7033B033A09AF09AE0AA20AA103E203E1
! 027E027D0BD10BD004770476088408830B090B0808490848051C051B07AD07AC0241024005A905A800A500A4078E078D
! 00AF00AE066B066A0059005806CC06CB013D013C0BF50BF40331033005940593012F012E0807080604E604E5084D084C
! 0B590B58043C043B027802770C7F0C7E03FE03FD048504840999099809C109C0039C039B09ED09EC0A670A6605AF05AE
! 095E095D0B630B62049B049A01B501B40B300B2F01F601F50769076800FF00FE03E8067A0AE2003B0A1D0C4005B80104
! 03E9067B0AE3003C0A1E0C4105B901050B180802025301B807820525FFFFFFFF0B190803025401B907830526FFFFFFFF
! 067203DB001A0336070009B2018D0921067303DC001B0337070109B3018E09220B1C0316019D0BB904FD01C002060825
! 0B1D0317019E0BBA04FE01C102070826038A007F039206540984000CFFFFFFFF038B0080039306550985000DFFFFFFFF
! 020C00870B47090D052D0C2208040745020DFFFF0B48FFFF052EFFFF0805FFFF02F60A6406CF0486002F03F206560C90
! 02F70A6506D00487003003F306570C91031E04900AB2030602300B5C0466063D000A09AA0B3F0B9C068E0358FFFFFFFF
! 0AF70C1908740BA8060807AE09BB01420AF80C1A08750BA9060907AF09BC014303F8076A0AD3064A09F20C10061F0223
! 03F9076B0AD4064B09F30C11062002240C7B0AC00B510BC707D3096F020105650C7C0AC10B520BC807D4097002020566
! 06E403AD0A4D049CFFFF034000410C7906E503AE031F0491FFFF0A4EFFFF0A46FFFFFFFF0B22086CFFFF0ACF05310597
! 0AB3030702310B5DFFFF0B23FFFFFFFF039900C708A2093EFFFFFFFF09940664039A00C80467063EFFFFFFFFFFFFFFFF
! 01E201910AA8090902C80C4C04F5081201E301920B400B9DFFFF02C9FFFFFFFFFFFFFFFF07170A97FFFF05E806F0093C
! 000B09AB068F0359FFFF0718FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0786
! FFFFFFFF0A920C2CFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A21FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A22FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B64084A04A404E3019307FC0B270AB6021205950793032200ED0BE408D90496
! 0B65084B04A504E4019407FD0B280AB7021305960794032300EE0BE508DA0497FFFFFFFF0925FFFFFFFF0926FFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05FE03B700B20C2407DA08C5058B044309520AA5
! 0B7D0236084E04D601A8024B0B8B07A802CA0117057909110A4B0C1C0A1106D705FF03B800B30C2507DB08C6058C0444
! 09530AA60B7E0237084F04D701A9024C0B8C07A902CB0118057A09120A4C0C1D0A1206D8FFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06D1040E01210BE6073908D7056A048C
! 091D0B370B9E01E707E804EB024D02320C60079502A10599045308BB0A5800B40A0B078F060F00350A2B06B1099C0047
! 03DF06EA0927016C0C080704042A06420449086E0B8F012C03140513059B01DA06D2040F01220BE7073A08D8056B048D
! 091E0B380B9F01E807E904EC024E02330C61079602A2059A045408BC0A5900B50A0C0790061000360A2C06B2099D0048
! 03E006EB0928016D0C090705042B0643044A086F0B90012D03150514059C01DB0040003F034506B40AEF00380AB40857
! 03BB0AB5028F03BC0C1F02900448060EFFFF02450AFD0AFC07E2FFFFFFFF07E3FFFFFFFFFFFFFFFFFFFFFFFF02B80A2E
! 02D302D2037303720991099009DD09DC03B003AF02E902E80A690A6804BD04BC08AB08AA0C570C56080F080E05050504
! 0B4E0B4D020F020E05D505D400F000EF07BA07B9007100700966096500260025069F069E006500640C180C17028E028D
! 0748074701AB01AA08590858062B062A07E507E40B1F0B1E053C053B02AA02A90BFD0BFC03EB03EA04BF04BE0A280A27
! 099B099A035F035E09FF09FE0A960A9505E305E208DE08DD0B990B9804690468023F023E0AF30AF201C301C207980797
! 0124012308CC08CBFFFFFFFFFFFFFFFFFFFFFFFF0397FFFF03600398FFFF0361FFFFFFFF075B075AFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF08CE0A8D056D042F0781021701CF0C9504D5026C01D704E80B8A0B8804BB092E
! 08A505CF0BF3072403D2010A047906C009D5030B098907100375016B09E306ED0AC80C51041508FC0313011E0B94FFFF
! FFFFFFFFFFFFFFFF0B3EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 01FA01F90B030B020B840B8308350834015901580722072102EB02EA055205510044004306BA06B9062D062C06C206C1
! 0082008107D007CF004600450C6D0C6C05460545081B081A0BC60BC50947094602F902F80BB80BB701960195FFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0574057302C502C40A1A0A190AE50AE4
! 084708460B6E0B6D0B2E0B2D01A501A407DF07DE00BB00BA094109400590058F065D065C003A0039FFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000900080968096700D200D1
! 077B077A00F900F80685068400730072FFFFFFFF0173017208E008DF0C4B0C4A056205610A9C0A9B0B0F0B0E02E002DF
! 0930092F0A300A2F0A530A5203D403D30C5F0C5E0902090103490348036903680239023806160615045804570A5F0A5E
! 057E057D091A0919026602650B0B0B0A0116011506E706E60C0D0C0C072A07290171017006DA06D9031B031A071D071C
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF083AFFFF052F083B057805300C730C7205EB05EA0A8F0A8E0BC20BC108F208F1
! FFFFFFFF005AFFFF0C78005BFFFFFFFF0C0B0C0A02760275FFFF084403F103F00878087704EE04ED0440043F0ABF0ABE
! 056F056E02A402A308B808B701350134079207910A1000C20A5D0C2EFFFF010C038D079A0C62009F065B065A00AB00AA
! 0770076F0157015605B305B202BA02B908AD08AC047D047C0576084507F00C99018F07F1070701900A6D0A6CFFFFFFFF
! 03290328FFFFFFFFFFFFFFFF034703460BEB0BEA09180917FFFF0483FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0AC9FFFFFFFF0ACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C63FFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 047B0645039E00D008C2074A0A03007903B209600ADD0C2909810677036F008F021E0B570B4402FF0A26074005C30151
! 0C81087A086105DB053A04DB07F30ACC0319049906C603B6015B08FE07260A73004D04A9095509E5004F0CA306AC034B
! 025C0A860C690ABD0097029C07CE05A70AED0BD3081507A2020B058A0512097C0ADF02B603EF07650627022208BE0C3F
! 0387065003A6073002DE015309FD073408E10C000611014A0B950864FFFF0B96FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFF0A1FFFFF04C206B503660016FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A99FFFF02910BEC0617015C0A1B06BB07E005270C9C0808085A015404450553
! 05B00283032004320B710BA001B2083C0674098CFFFF049EFFFFFFFFFFFFFFFF0A9AFFFF02920BED0618015D0A1C06BC
! 07E105280C9D0809085B01550446055405B10284032104330B720BA101B3083D0675098DFFFF049FFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07E60B4F062E07F4088B01480A830BA20BF60A29030E0A70053D0557015E0872
! 04C800FA099206AD0300005403A907B1044F0302028705AC0C8C016003BD06EE0BBB0B6604CA0823025904D20C520818
! 07E70B50062F07F5088C01490A840BA30BF70A2A030F0A71053E0558015F087304C900FB099306AE0301005503AA07B2
! 04500303028805AD0C8D016103BE06EF0BBC0B6704CB0824025A04D30C530819FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0BCA0B3307D60887026105D60C020A76
! 0A9D0255082C0C4604F1027907F804D00634036A072D037C01DE0C36075202AE02B30A8106C9042C002D031C068009A0
! 0B1007EA09720B12FFFFFFFFFFFFFFFF0BCB0B3407D70888026205D70C030A770A9E0256082D0C4704F2027A07F904D1
! 0635036B072E037D01DF0C37075302AF02B40A8206CA042D002E031D068109A10B1107EB09730B13FFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 04AE0944029500B00BE20731027B01250A150C42FFFF00C309C6065809CC00C5086608B001620C8E05C408E703380426
! 046A05F2FFFF02D707FA0B0C054104C606C70B14FFFF03F4075C02FA0945FFFF00B104AF0732029601260BE30C43027C
! 00C40A160659FFFF00C609C708B109CD0C8F086708E80163042705C505F3033902D8046B0B0DFFFF04C707FB0B150542
! 03F506C802FBFFFFFFFF075DFFFFFFFF04D80529016401AC08810C9A05D802080430071E048E06360B750889033C0B35
! 0C9609E000D309DA07BD037A00DB094A092304B201130A3B07C30956008503A305830228037805170BCE0B5A04B00838
! 08EB0A33059F04B80774026701DC00020AC3032CFFFF06E8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 04D9052A016501AD08820C9B05D902090431071F048F06370B76088A033D0B360C9709E100D409DB07BE037B00DC094B
! 092404B301140A3C07C40957008603A405840229037905180BCF0B5B04B1083908EC0A3405A004B90775026801DD0003
! 0AC4032DFFFF06E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01E001B007C504FF0BD4021409630A9F0A6E0BE80555096101EB053F0B3107B5
! 001204C4068609A201D0094EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01E101B107C605000BD5021509640AA0
! 0A6F0BE90556096201EC05400B3207B6001304C5068709A301D1094FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01FF05E40C9E083E01FB01C6054304DF03AB00EB08EF07CB0A50010004AA08F5
! 017A0C13070D094C0308038406A909A80B5403A108F30BA605BA04A007410410020005E50C9F083F01FC01C7054404E0
! 03AC00EC08F007CC0A51010104AB08F6017B0C14070E094D0309038506AA09A90B5503A208F40BA705BB04A107420411
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0AAC0090035607B3045902850455066809E6007405C60766038800180AE8068C
! 050604F701BA08540778033E03420B91096D054F0BEE07540AC50B3B056308500AAD0091035707B4045A028604560669
! 09E7007505C70767038900190AE9068D050704F801BB08550779033F03430B92096E05500BEF07550AC60B3C05640851
! 043D06D30974006009B0065E047E002903B30600000000CB08BF07D80568059D0006087007EC01B6049404F90B810376
! 029D0BF805AA01890A7407350AB00CA4001C044B043E06D40975006109B1065F047F002A03B40601000100CC08C007D9
! 0569059E0007087107ED01B7049504FA0B820377029E0BF905AB018A0A7507360AB10CA5001D044CFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
  );
! //5760 bytes
  enum alphaTrieEntries = TrieEntry!(bool, 8, 5, 8)(x"
  0000000000000040000001A0",
  x"
! 00000100000002C000008000",
  x"
  03020100060504030A0908070E0D0C0B0303030311100F03141413121414141414141414141414141414141414141414
  141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414
--- 2792,3001 ----
  00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 0A10FFFF09D4008E0360068C09FE00CB0AD60CD80C60007808F5076E0BF700F504CE0907065D06180B48083E01B801A5
! 054D059BFFFF033AFFFFFFFFFFFFFFFF0A11FFFF09D5008F0361068D09FF00CC0AD70CD90C61007908F6076F0BF800F6
! 04CF0908065E06190B49083F01B901A6054E059CFFFF033BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A61FFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF063708320929013A0ABC0C000434028F03E305D80C84014A03EB06BE035C0052
! 09CC068402DC0094060C07BDFFFF00D90A800C0F05730246095707AB0C0A0B5B06380833092A013B0ABD0C0104350290
! 03E405D90C85014B03EC06BF035D005309CD068502DD0095060D07BEFFFF00DA0A810C1005740247095807AC03B90B5C
! 0AE50AE4053E053D01F801F70C8F0C8E0233023207E407E300DC00DB099209910069006806A706A6005F005E06B306B2
! 02F202F106FA06F9017F017E08CB08CA0CC30CC208A808A70530052F0B7E0B7D01DD01DC06170616024F024E0A6A0A69
! FFFF04180950094F0A2F0A2E0363036200A2FFFF07A700A3009C07A808EB009D0C6508EC08840C66014208850B380143
! 03340B390550054F087F087E0C9D0C9C07620761018701860721072002EA02E9069D069C000F000E06D606D5007D007C
! 090A090900E000DF07DA07D9021102100CB90CB801C901C8053805370B6C0B6B088B088A05E505E40A740A730B0D0B0C
! 06B803BA002906B9068E002A065F068F0726072F0C4C0C4B02A202A102AF05A30C6E02B001D608C3FFFF01D70BE70820
! 099E0B5D059D099F025D02B50A8E0C3C00A500A40498053B09DC00B8037200E1001F001E06C106C001220121042805D2
! 0AA60429FFFFFFFF018E018D081008B401CE081105A90838034205AA0BE50343028E028DFFFFFFFF0A130A1201D4FFFF
! FFFFFFFFFFFFFFFF0A200A1F066F0A21067106700C140C1305750C15085205760B77085308220B7804A008230B9F04A1
! 033E0BA005D0033F082105D10C8B0C8A06EC06EB0190018F068B068A030002FF06DC06DB01090108074A074905EF05EE
! 0BDF096E0BE10BE007FF07FE01D5025E0CA50CA4021D021C047704760A6E0A6D09120911062306220A360A3509AB09AA
! 04030402097709760C450C4404790478046804670BAE0BAD02F402F305AE05AD0192019108B708B606430642091C091B
! FFFF00E207770776007100700CBB0CBA00D000CF07F407F3008600850961096005FB05FA079F079EFFFFFFFFFFFFFFFF
! FFFFFFFF08500B20053C08510A590878017002C7073001710314047A0ADB0ADA0A190A18036B036A0A500A4F0B090B08
! 0C54045D07270250FFFF05A408C40C6F0BE8FFFF0B5EFFFFFFFF0A37FFFFFFFF0C63059E02B6FFFF0CAD0724FFFF00C3
! 0C3D0A8F06D10111FFFF0A8800B9FFFF0629FFFFFFFF09DD0373FFFFFFFFFFFFFFFFFFFFFFFFFFFF0039FFFFFFFFFFFF
! FFFF05D30AA70591FFFFFFFF039EFFFF047B08B5083901CFFFFF0315FFFFFFFFFFFFFFFFFFFF0BE6FFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFF00A0FFFFFFFF07BBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A6FFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF050E050D01FA01F9FFFFFFFF02280227
! FFFFFFFF0B4CFFFF0945014403D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02D608F70780FFFF0102FFFF08B80ACF0CDE
! 052508C501A1051B0BE20B2C018B01FD0A70061E0C3A0C6708ED0A62012303EF06C20CAA0728FFFF069A037400BA0390
! 07A409F000A8091F078102D7010308F805260AD301A2051C0BE30B2D018C01FE0A71061F0C3B0C6808EE0A63012403F0
! 06C30CAB072A0729069B037500BB039107A509F100A909200CDF08B90A750AD00620051DFFFFFFFF0392FFFF0A760CAC
! 01B101B0051605150BA80BA709360935060306020A870A860AE90AE8041204110337033609AF09AE04A904A803B203B1
! 06C40C6903D402010BE406210BA3FFFF02020BA4066506640B4DFFFF09460145059705670A6B02CE0A8C0C260635009E
! 09EC07A909EA00AE0364067E03E500AA0C7A07CC041A05BF042C07910BD802B709410BAB05290148086408D601E20B26
! 058C08B203200B920BF30AA40180027D06FB05FC0C920A3006B40AFD0060041E0C7B07CD041B05C0042D07920BD902B8
! 09420BAC052A0149086508D701E30B27058D08B303210B930BF40AA50181027E06FC05FD0C930A3106B50AFE0061041F
! 059805680A6C02CF0A8D0C270636009F09ED07AA09EB00AF0365067F03E600AB0BC20BC106590658027C027B0C7F0C7E
! 022C022B043F043E0AB70AB6092C092B0628062709CF09CE09B309B203EE03ED095F095E0A2D0A2C0437043604750474
! 0C570C56FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0630062F08FA08F900FB00FA07790778006B006A06AF06AE00050004
! 07E207E100D800D70990098F05E705E6075A0759012801270566056501C701C60B230B2204B904B8087508740CA70CA6
! 090008FF046404630AC00ABF09DF09DE036D036C09C709C60B0B0B0A040D040C0769031C0252076A06660253026B0667
! 0B36026C05090B37084C050A031D084D0270026F05DB05DA029A0299078E078D0065006406BB06BA0026002507160715
! 01350134071107100280027F05E905E8013D013C0863086205040503082F082E0BB00BAF04D104D0026A02690C310C30
! 03DE03DD048904880A010A0009B709B6038103800A170A160B130B120431043008F408F30BB40BB30855085401F401F3
! 0B310B30030503040562056101960195074607450647064606E206E10034003306CE06CD0040003F0CA10CA000C200C1
! 07EC07EB0BF20BF109690968056405630CE0FFFF025B01A307C505270BB902D009250BE9060A04E6077E03FC01560C9A
! 071A03D5034403A0071C09F601580A220782063E0C5C0A41092D0B18057905A107C102D202630B52066B01A9FFFF0840
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0CE1FFFF025C01A407C605280BBA02D109260BEA060B04E7077F03FD01570C9B
! 071B03D6034503A1071D09F701590A230783063F0C5D0A42092E0B19057A05A207C202D302640B53066C01AA06960841
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF08F10AB80588044407A0022201D80CCC
! 04EE027901E005010BBD0BBB04D4095308C805EA0C28074103E7010F048E06DD09FC031A09B0072D038601740A0A070A
! 0AF70C86042A0921032201250BC7FFFFFFFFFFFFFFFFFFFF0B6FFFFFFFFFFFFF0C16017804570738048A06500A280700
! 035E0035042006800B03002D0A1D0C7005DC009A093107550AAB0C0D04860959024805770B1C08180281020707BF0545
! 0BCE02DE08E70A960608043A0796042201400C6AFFFF03F30010FFFF073309F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 0490066203AF00D108E507670A2A007A03C309850B0E0C5E09A80694037E009002290B8A0B75030E0A55075D05DE015A
! 0CB6089B088205F6055304F408140AFB032804AE06E303C70164092307430A9E004E04BE097A0A0C00500CDA06C9035A
! 02670AB10C9E0AEA009802AB07EF05C20B1E0C06083607C3021605A5052B09A30B1002C5040407840644022D08E10C74
! 0398066D03B7074D02ED015C0A2407510CBC005803DF06B60496006EFFFFFFFF0CBD005903E006B70497006FFFFFFFFF
! 079305C1058E0B280B950B94065A0A3208D2073EFFFF08D3FFFFFFFFFFFFFFFF0C17017904580739048B06510A290701
! 035F0036042106810B04002E0A1E0C7105DD009B093207560AAC0C0E0487095A024905780B1D08190282020807C00546
! 0BCF02DF08E80A970609043B0797042301410C6BFFFF03F40011FFFF073409F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 0593FFFFFFFFFFFF0354FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0CD0
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 079D079C053A0539082D082C0CBF0CBE08CD08CC04DB04DA0A830A820298029705F905F809FB09FA09E709E6037D037C
! 030D030C0A070A0604BD04BC042F042E0C350C3408810880055205510B330B3201D301D2065706560276027507DE07DD
! 00EB00EA090E090D006D006C06A906A80015001406A106A002E102E00732073101830182075C075B063A063908590858
! 0B800B7F04FC04FB023B023A0C910C9002410240043904380A3C0A3B0952095103A303A209F309F209BF09BE03CC03CB
! 095C095B0A5E0A5D04330432023702360C730C7201DF01DE04E904E80B580B57089E089D064F064E08DE08DD01730172
! 06F406F302EC02EB06C606C50055005406B106B0009700960982098105BE05BD07EA07E9023902380534053301FC01FB
! 0B740B73049F049E088D088C00E30CCA05EC041C095D04C2FFFFFFFFFFFF0C0B034B034A09D709D60ACE0ACD03F803F7
! 028C028B0C050C04048D048C08A608A50B3B0B3A086B086A0536053507CF07CE024D024C05C505C400A700A607AE07AD
! 00B100B006890688005B005A06EA06E9014701460C2B0C2A0341034005B005AF0139013808290828050004FF086F086E
! 0B8D0B8C04520451028602850CB50CB404140413049B049A09C109C009E909E803AE03AD0A150A140A930A9205CB05CA
! 098409830B970B9604B104B001BF01BE0B620B61020001FF078907880105010403FE06980B14003D0A490C7605D4010A
! 03FF06990B15003E0A4A0C7705D5010B0B4A0824025F01C207A2053FFFFFFFFF0B4B0825026001C307A30540FFFFFFFF
! 069003F1001A0346071E09DA01970947069103F2001B0347071F09DB019809480B4E032601A70BED051701CA02120847
! 0B4F032701A80BEE051801CB02130848039C008103A4067209AC000CFFFFFFFF039D008203A5067309AD000DFFFFFFFF
! 021800890B7B093305470C58082607630219FFFF0B7CFFFF0548FFFF0827FFFF03060A9006ED049C0031040806740CC8
! 03070A9106EE049D0032040906750CC9032E04A60ADE0316023C0B90047C065B000A09D20B710BD006AC0368FFFFFFFF
! 0B290C4F08960BDC062407D009E3014C0B2A0C5008970BDD062507D109E4014D040E078A0B0506680A1A0C46063B022F
! 040F078B0B0606690A1B0C47063C02300CB10AF00B850BFB07F50995020B057F0CB20AF10B860BFC07F60996020C0580
! 070203BF0A7904B2FFFF035000430CAF070303C0032F04A7FFFF0A7AFFFF0A72FFFFFFFF0B54088EFFFF0AFF054B05B3
! 0ADF0317023D0B91FFFF0B55FFFFFFFF03AB00C908C60964FFFFFFFF09BC068203AC00CA047D065CFFFFFFFFFFFFFFFF
! 01EC019B0AD4092F02D80C82050F083401ED019C0B720BD1FFFF02D9FFFFFFFFFFFFFFFF07350AC3FFFF0604070E0962
! 000B09D306AD0369FFFF0736FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07A6
! FFFFFFFF0ABE0C62FFFFFFFFFFFFFFFFFFFFFFFFFFFF0A4DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A4EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B98086C04BA04FD019D081E0B590AE2021E05B107B3033200F10C1A08FD04AC
! 0B99086D04BB04FE019E081F0B5A0AE3021F05B207B4033300F20C1B08FE04ADFFFFFFFF094BFFFFFFFF094CFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF061A03C900B40C5A07FC08E905A7045909780AD1
! 0BB10242087004F001B202570BBF07CA02DA011D059509370A770C520A3906F5061B03CA00B50C5B07FD08EA05A8045A
! 09790AD20BB20243087104F101B302580BC007CB02DB011E059609380A780C530A3A06F6FFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06EF042401290C1C075708FB058604A2
! 09430B690BD201F1080A05050259023E0C9607B502B105B5046908DF0A8400B60A3307AF062B00370A5706CF09C40049
! 03F50708094D01760C3E072204400660045F08900BC301360324052D05B701E406F00425012A0C1D075808FC058704A3
! 09440B6A0BD301F2080B0506025A023F0C9707B602B205B6046A08E00A8500B70A3407B0062C00380A5806D009C5004A
! 03F60709094E01770C3F072304410661046008910BC401370325052E05B801E500420041035506D20B21003A0AE00879
! 03CD0AE1029D03CE0C55029E045E062AFFFF02510B2F0B2E0804FFFFFFFF0805FFFFFFFFFFFFFFFFFFFFFFFF02C80A5A
! 02E302E20383038209B909B80A050A0403C203C102F902F80A950A9404D704D608CF08CE0C8D0C8C08310830051F051E
! 0B820B81021B021A05F105F000F400F307DC07DB00730072098C098B0028002706BD06BC006700660C4E0C4D029C029B
! 0766076501B501B4087B087A06490648080708060B510B500556055502BA02B90C330C320401040004D904D80A540A53
! 09C309C2036F036E0A270A260AC20AC105FF05FE090209010BCD0BCC047F047E024B024A0B250B2401CD01CC07B807B7
! 012C012B08F008EFFFFFFFFFFFFFFFFFFFFFFFFF03A9FFFF037003AAFFFF0371FFFFFFFF077B077AFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF08F20AB90589044507A1022301D90CCD04EF027A01E105020BBE0BBC04D50954
! 08C905EB0C29074203E80110048F06DE09FD031B09B1072E038701750A0B070B0AF80C87042B0922032301260BC8FFFF
! FFFFFFFFFFFFFFFF0B70FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 020402030B350B340BB80BB708570856016301620740073F02FB02FA056C056B0046004506D806D7064B064A06E006DF
! 0084008307F207F1004800470CA30CA20560055F083D083C0BFA0BF9096D096C030903080BEC0BEB01A0019FFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0590058F02D502D40A460A450B170B16
! 086908680BA20BA10B600B5F01AF01AE0801080000BD00BC0967096605AC05AB067B067A003C003BFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00090008098E098D00D400D3
! 079B079A00FD00FC06A306A200750074FFFFFFFF017D017C090409030C810C80057C057B0AC80AC70B410B4002F002EF
! 095609550A5C0A5B0A7F0A7E03EA03E90C950C940928092703590358037903780245024406320631046E046D0A8B0A8A
! 059A05990940093F027202710B3D0B3C011C011B070507040C430C4207480747017B017A06F806F7032B032A073B073A
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF085CFFFF0549085D0594054A0CA90CA8060706060ABB0ABA0BF60BF509160915
! FFFFFFFF005CFFFF0CAE005DFFFFFFFF0C410C4002840283FFFF086604070406089A089905080507045604550AEF0AEE
! 058B058A02B402B308DC08DB013F013E07B207B10A3800C40A890C64FFFF0112039F07BC0C9800A10679067800AD00AC
! 0790078F0161016005CF05CE02CA02C908D108D0049304920592086708120CD1019908130725019A0A990A9802940293
! 033903380A520A510AED0AEC035703560C210C20093E093DFFFF0499FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0AF9FFFFFFFF0AFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C99FFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 0491066303B000D208E607680A2B007B03C409860B0F0C5F09A90695037F0091022A0B8B0B76030F0A56075E05DF015B
! 0CB7089C088305F7055404F508150AFC032904AF06E403C80165092407440A9F004F04BF097B0A0D00510CDB06CA035B
! 02680AB20C9F0AEB009902AC07F005C30B1F0C07083707C4021705A6052C09A40B1102C6040507850645022E08E20C75
! 0399066E03B8074E02EE015D0A25075209050C36062D01540BC90886FFFF0BCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFF0A4BFFFF04DC06D303760016FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0AC5FFFF029F0C22063301660A4706D9080205410CD4082A087C015E045B056D
! 05CC0291033004480BA50BD401BC085E069209B4FFFF04B4FFFFFFFFFFFFFFFF0AC6FFFF02A00C23063401670A4806DA
! 080305420CD5082B087D015F045C056E05CD0292033104490BA60BD501BD085F069309B5FFFF04B5FFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF08080B83064C081608AD01520AAF0BD60C2C0A5F031E0A9C0557057101680894
! 04E200FE09BA06CB0310005603BB07D304650312029505C80CC4016A03D1070C0BEF0B9A04E40845026504EC0C88083A
! 08090B84064D081708AE01530AB00BD70C2D0A60031F0A9D055805720169089504E300FF09BB06CC0311005703BC07D4
! 04660313029605C90CC5016B03D2070D0BF00B9B04E50846026604ED0C89083BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0BFE0B6507F808A9026D05F20C380AA2
! 0AC90261084E0C7C050B0287081A04EA0652037A074B038E01E80C6C077002BE02C30AAD06E70442002F032C069E09C8
! 0B42080C09980B44FFFFFFFFFFFFFFFF0BFF0B6607F908AA026E05F30C390AA30ACA0262084F0C7D050C0288081B04EB
! 0653037B074C038F01E90C6D077102BF02C40AAE06E804430030032D069F09C90B43080D09990B45FFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 04C4096A02A500B20C18074F0289012D0A3D0C78FFFF00C509EE067609F400C7088808D4016C0CC605E0090B0348043C
! 0480060EFFFF02E7081C0B3E055B04E006E50B46FFFF040A077C030A096BFFFF00B304C5075002A6012E0C190C79028A
! 00C60A3E0677FFFF00C809EF08D509F50CC70889090C016D043D05E1060F034902E804810B3FFFFF04E1081D0B47055C
! 040B06E6030BFFFFFFFF077DFFFFFFFF04F20543016E01B608A30CD205F402140446073C04A406540BA908AB034C0B67
! 0CCE0A0800D50A0207DF038C00DD0970094904C801190A6707E5097C008703B5059F0234038A05310C020B8E04C6085A
! 090F0AD805BB04D20794027301E600020AF3033CFFFF0706FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 04F30544016F01B708A40CD305F502150447073D04A506550BAA08AC034D0B680CCF0A0900D60A0307E0038D00DE0971
! 094A04C9011A0A6807E6097D008803B605A00235038B05320C030B8F04C7085B09100AD905BC04D30795027401E70003
! 0AF4033DFFFF0707FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01EA01BA07E705190C08022009890ACB0A9A0C1E056F098701F505590B6307D7
! 001204DE06A409CA01DA0974FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01EB01BB07E8051A0C090221098A0ACC
! 0A9B0C1F0570098801F6055A0B6407D8001304DF06A509CB01DB0975FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF020906000CD60860020501D0055D04F903BD00EF091307ED0A7C010604C00919
! 01840C49072B09720318039606C709D00B8803B309170BDA05D604B6075F0426020A06010CD70861020601D1055E04FA
! 03BE00F0091407EE0A7D010704C1091A01850C4A072C09730319039706C809D10B8903B409180BDB05D704B707600427
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B010092036607D5046F02A3046B06860A0E007605E20786039A00180B1A06AA
! 0520051101C408760798034E03520BC5099305690C2407740AF50B6D057D08720B020093036707D6047002A4046C0687
! 0A0F007705E30787039B00190B1B06AB0521051201C508770799034F03530BC60994056A0C2507750AF60B6E057E0873
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00E50AE6077203CF010003E10CC00A43064004CA08BA0277012F099C091D0C11
+ 011F020E07B9000003840B79058204CCFFFF0A3F0AE7FFFF03D000E603E207730A44010104CB0CC102780641099D08BB
+ 0C120130020F091E000101200B7A07BA04CD03850A400583FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF045306F1099A006209D8067C0494002B03C5061C002300CD08E307FA058405B9
+ 00060892080E01C004AA05130BB5038802AD0C2E05C601930AA007530ADC0CDC001C0461045406F2099B006309D9067D
+ 0495002C03C6061D002400CE08E407FB058505BA00070893080F01C104AB05140BB6038902AE0C2F05C701940AA10754
+ 0ADD0CDD001D0462FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
  );
! //5728 bytes
  enum alphaTrieEntries = TrieEntry!(bool, 8, 5, 8)(x"
  0000000000000040000001A0",
  x"
! 00000100000002C000007F00",
  x"
  03020100060504030A0908070E0D0C0B0303030311100F03141413121414141414141414141414141414141414141414
  141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414
*************** x"
*** 2967,2984 ****
  00010001000100010001000100010001000100010058000100010001001F0059001F001F001F001F001F001F001F001F
  001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F005A001F001F001F001F001F001F001F
  00010001005C005B005D001F005F005E0001000100010001000100010001000100010001000100010001000100010001
! 00010001000100010001000100600001000100010001000100620061001F001F001F001F001F001F001F001F001F001F
! 001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F0063001F
! 00640001001F0065001F001F001F001F001F001F001F001F001F0066001F001F001F001F001F001F001F001F001F001F
! 001F001F001F001F001F001F001F001F001F001F001F001F00680067006A0069001F001F001F001F001F001F006B001F
! 006D006C001F006E0070006F0071001F00730072001F001F001F001F001F00740075001F001F001F001F001F001F001F
  001F001F001F001F001F001F001F001F0001000100010001000100010001007600010001000100010001000100010001
! 000100010001000100010001007700010001007800010001000100010001000100010001000100010001000100010001
! 000100010001000100010001000100790001000100010001000100010001000100010001000100010001000100010001
! 0001000100010001000100010001000100010001007A000100010001001F007B001F001F001F001F001F001F001F001F
! 00010001001F007C001F001F001F001F0001000100010001000100010001000100010001000100010001000100010001
! 00010001007D000100010001000100010001000100010001000100010001000100010001007E0001001F001F001F001F
! 001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F
  001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F
  001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F
  001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F000000000000000007FFFFFE07FFFFFE
--- 3017,3034 ----
  00010001000100010001000100010001000100010058000100010001001F0059001F001F001F001F001F001F001F001F
  001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F005A001F001F001F001F001F001F001F
  00010001005C005B005D001F005F005E0001000100010001000100010001000100010001000100010001000100010001
! 00010001000100010001000100010001000100010001000100610060001F001F001F001F001F001F001F001F001F001F
! 001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F0062001F
! 00630001001F0064001F001F001F001F001F001F001F001F001F0065001F001F001F001F001F001F001F001F001F001F
! 001F001F001F001F001F001F001F001F001F001F001F001F0067006600690068001F001F001F001F001F001F006A001F
! 006C006B001F006D006F006E0071007000730072001F001F001F001F001F00740075001F001F001F001F001F001F001F
  001F001F001F001F001F001F001F001F0001000100010001000100010001007600010001000100010001000100010001
! 000100010001000100010001000100010001007700010001000100010001000100010001000100010001000100010001
! 000100010001000100010001000100780001000100010001000100010001000100010001000100010001000100010001
! 00010001000100010001000100010001000100010079000100010001001F007A001F001F001F001F001F001F001F001F
! 00010001001F007B001F001F001F001F0001000100010001000100010001000100010001000100010001000100010001
! 00010001007C000100010001000100010001000100010001000100010001000100010001000100010001000100010001
! 000100010001000100010001000100010001000100010001001F007D001F001F001F001F001F001F001F001F001F001F
  001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F
  001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F
  001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F000000000000000007FFFFFE07FFFFFE
*************** FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
*** 2987,2996 ****
  FFFFD740FFFFFFFBFFFFFFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC03FFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFEFFFF027FFFFFFFFFFFFF000001FFBFFF0000FFFF00B6000787FF07FF0000FFFFFFFFFEFFFFFFFFFFC000
  FFFFFFFFFFFFFFFF1FEFFFFF9C00E1FEFFFF0000FFFFFFFFFFFFE000FFFFFFFFFFFFFFFF0003FFFFFFFFFC00043007FF
! FCFFFFFF00001FFF01FFFFFFFFFF07FF00807EFFFFFFFFFFFFF003FFFFFF03F8FFFFFFFFEFFFFFFFFFE1DFFFFFFE000F
  FFF99FEFE3C5FDFFB080599F1003000FFFF987EEC36DFDFF5E021987003F0000FFFBBFEEE3EDFDFF00011BBF1E00000F
! FFF99FEEE3EDFDFFB0C0199F0002000FD63DC7ECC3FFC71800811DC700000000FFFDDFFFE3FFFDFF27601DDF0000000F
! FFFDDFEFE3EFFDFF60601DDF000E000FFFFDDFFFE7FFFFFF80F05DDFFC00000FFC7FFFEE2FFBFFFFFF5F807F000C0000
  FFFFFFFE07FFFFFF0000207F00000000FFFFF7D63BFFFFAFF000205F000000000000000100000000FFFFFEFFFFFE1FFF
  FEFFFF0F1FFFFFFF0000000000000000FFFFFFFFF97FFFFFFFFF0000FFFFFFFF3C00FFFFFFFFFFFFFFFF20BFF7FFFFFF
  FFFFFFFFFFFFFFFF3D7F3DFFFFFFFFFFFFFF3DFF7F3DFFFFFF7FFF3DFFFFFFFFFF3DFFFFFFFFFFFF07FFFFFF00000000
--- 3037,3046 ----
  FFFFD740FFFFFFFBFFFFFFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC03FFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFEFFFF027FFFFFFFFFFFFF000001FFBFFF0000FFFF00B6000787FF07FF0000FFFFFFFFFEFFFFFFFFFFC000
  FFFFFFFFFFFFFFFF1FEFFFFF9C00E1FEFFFF0000FFFFFFFFFFFFE000FFFFFFFFFFFFFFFF0003FFFFFFFFFC00043007FF
! FCFFFFFF00001FFF01FFFFFFFFFF07FF0080FEFFFFFFFFFFFFF003FFFFFF03F8FFFFFFFFEFFFFFFFFFE1DFFFFFFE000F
  FFF99FEFE3C5FDFFB080599F1003000FFFF987EEC36DFDFF5E021987003F0000FFFBBFEEE3EDFDFF00011BBF1E00000F
! FFF99FEEE3EDFDFFB0C0199F0002000FD63DC7ECC3FFC71800811DC700000000FFFDDFFFE3FFFDFF37601DDF0000000F
! FFFDDFEFE3EFFDFF70601DDF000E000FFFFDDFFFE7FFFFFF80F05DDFFC00000FFC7FFFEE2FFBFFFFFF5F807F000C0000
  FFFFFFFE07FFFFFF0000207F00000000FFFFF7D63BFFFFAFF000205F000000000000000100000000FFFFFEFFFFFE1FFF
  FEFFFF0F1FFFFFFF0000000000000000FFFFFFFFF97FFFFFFFFF0000FFFFFFFF3C00FFFFFFFFFFFFFFFF20BFF7FFFFFF
  FFFFFFFFFFFFFFFF3D7F3DFFFFFFFFFFFFFF3DFF7F3DFFFFFF7FFF3DFFFFFFFFFF3DFFFFFFFFFFFF07FFFFFF00000000
*************** FFFFFFFFFFFFFFFFFFFFFFFF000C781FFFFFFFFF
*** 3009,3015 ****
  E07FFFFFFFFFFFFEFFFFFFFFF7FFFFFFFFFFFFE0FFFEFFFFFFFFFFFFFFFFFFFF00007FFFFFFFFFFF00000000FFFF0000
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  00001FFF00000000FFFF00003FFFFFFFFFFF1FFF00000C00FFFFFFFF8FF07FFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF
! FF800000FFFFFFFCFFFFFFFFFFFFFFFFFFFFF9FFFFFFFFFF1FEB3FFFFFFC0000FFFFFFBF000000FFFFFFFFFF000FFFFF
  FFFFFFFFFFFFFFFF0000002FE8FC0000FFFFFC00FFFF07FF0007FFFF1FFFFFFFFFFFFFFFFFF7FFFF000080007C00FFFF
  FFFFFFFF007FFFFF00003FFFFC7FFFFFFFFFFFFF7FFFFFFF38000005003CFFFF007E7E7EFFFF7F7FF7FFFFFFFFFF03FF
  FFFFFFFFFFFFFFFFFFFFFFFF000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFF87F0FFFFFFF
--- 3059,3065 ----
  E07FFFFFFFFFFFFEFFFFFFFFF7FFFFFFFFFFFFE0FFFEFFFFFFFFFFFFFFFFFFFF00007FFFFFFFFFFF00000000FFFF0000
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  00001FFF00000000FFFF00003FFFFFFFFFFF1FFF00000C00FFFFFFFF8FF07FFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF
! FF800000FFFFFFFCFFFFFFFFFFFFFFFFFFFFF9FFFFFFFFFF1FFFFFFFFFFE0000FFFFFFBF000000FFFFFFFFFF000FFFFF
  FFFFFFFFFFFFFFFF0000002FE8FC0000FFFFFC00FFFF07FF0007FFFF1FFFFFFFFFFFFFFFFFF7FFFF000080007C00FFFF
  FFFFFFFF007FFFFF00003FFFFC7FFFFFFFFFFFFF7FFFFFFF38000005003CFFFF007E7E7EFFFF7F7FF7FFFFFFFFFF03FF
  FFFFFFFFFFFFFFFFFFFFFFFF000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFF87F0FFFFFFF
*************** FFFFFFFF7FFFFFFF1CFCFCFC00000000FFFFEFFF
*** 3021,3031 ****
  1FFFFFFFFFFFFFFF0001FFFF00000000FFFFFFFFFFFFE000FFFF07FF07FFFFFF3FFFFFFFFFFFFFFF003EFF0F00000000
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3FFFFFFFFFFF0000FF0FFFFF0FFFFFFFFFFFFFFFFFFF00FFFFFFFFFFF7FF000F
  FFB7F7FF1BFBFFFBFFFFFFFF000FFFFFFFFFFFFF007FFFFF003FFFFF000000FFFFFFFFBF07FDFFFF0000000000000000
! FFFFFD3F91BFFFFF003FFFFF007FFFFF7FFFFFFF00000000000000000037FFFF003FFFFF03FFFFFF0000000000000000
  FFFFFFFFC0FFFFFF0000000000000000FEEFF06F003FFFFF000000001FFFFFFF1FFFFFFF00000000FFFFFEFF0000001F
  FFFFFFFF003FFFFF003FFFFF0007FFFF0003FFFF000000000000000000000000FFFFFFFFFFFFFFFF000001FF00000000
  FFFFFFFF0007FFFFFFFFFFFF0007FFFFFFFFFFFF000000FFFFFFFC00FFFF823F0000003F000000000000000000000000
! 00000000000000000000000000000000FFFFFFFF00031BFF0000001C100000001FFFFFFFFFFF00800000003FFFFF0000
  00000003FFFF00000000001F007FFFFFFFFFFFFFFFFFFFFF0000003F003E0000FFFFFFFF01FFFFFFFFFF0004000001FF
  FFFFFFFF0007FFFFFFFF00F00047FFFFFFFFFFFFFFFFFFFF1400C01E00000000FFFBFFFFC09FFFFF0000000300000000
  BFFFBD7FFFFF01FFFFFFFFFF000001FFFFF99FEFE3EDFDFFE081199F0000000FFFFF4BFFFFBFFFFF000A37A500000000
--- 3071,3081 ----
  1FFFFFFFFFFFFFFF0001FFFF00000000FFFFFFFFFFFFE000FFFF07FF07FFFFFF3FFFFFFFFFFFFFFF003EFF0F00000000
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3FFFFFFFFFFF0000FF0FFFFF0FFFFFFFFFFFFFFFFFFF00FFFFFFFFFFF7FF000F
  FFB7F7FF1BFBFFFBFFFFFFFF000FFFFFFFFFFFFF007FFFFF003FFFFF000000FFFFFFFFBF07FDFFFF0000000000000000
! FFFFFD3F91BFFFFF003FFFFF007FFFFF7FFFFFFF00000000000000000037FFFF003FFFFF03FFFFFF03FFFFFF00000000
  FFFFFFFFC0FFFFFF0000000000000000FEEFF06F003FFFFF000000001FFFFFFF1FFFFFFF00000000FFFFFEFF0000001F
  FFFFFFFF003FFFFF003FFFFF0007FFFF0003FFFF000000000000000000000000FFFFFFFFFFFFFFFF000001FF00000000
  FFFFFFFF0007FFFFFFFFFFFF0007FFFFFFFFFFFF000000FFFFFFFC00FFFF823F0000003F000000000000000000000000
! 00000000000000000000000000000000FFFFFFFF00031BFF000000FC1C0000001FFFFFFFFFFF00800000003FFFFF0000
  00000003FFFF00000000001F007FFFFFFFFFFFFFFFFFFFFF0000003F003E0000FFFFFFFF01FFFFFFFFFF0004000001FF
  FFFFFFFF0007FFFFFFFF00F00047FFFFFFFFFFFFFFFFFFFF1400C01E00000000FFFBFFFFC09FFFFF0000000300000000
  BFFFBD7FFFFF01FFFFFFFFFF000001FFFFF99FEFE3EDFDFFE081199F0000000FFFFF4BFFFFBFFFFF000A37A500000000
*************** FFFFFFFFFFFFFFFF800007BB00000003FFFFFFFF
*** 3033,3041 ****
  FFFFFFFF7F3FFFFF3F00000000000000FFFFFFFF7FFFFFFF0000001100000000FFFFFFFF013FFFFF0000000000000000
  E7FFFFFF000007FF0000007F0000000000000000000000000000000000000000FFFFFFFF01FFFFFF0000000000000000
  00000000FFFFFFFFFFFFFFFF80000000FF6FF27F99BFFFFF000000070000000000000000FFFFFCFFFCFFFFFF0000001A
! FFFFFFFF7FE7FFFFFFFF0000FFFFFFFF20FFFFFFFFFF0000FFFFFFFF01FFFFFF00000000000000000000000000000000
  0000000000000000FFFFFFFF00000001FFFFFDFF7F7FFFFF00000001FFFC0000FFFCFFFF007FFEFF0000000000000000
! FFFFFB7FB47FFFFF000000CBFFFFFDBF017B7FFF00000000000000000000000000000000000000000000000000000000
  000000000000000000000000007FFFFFFFFDFFFFC7FFFFFF000000010000000000000000000100000000000000000000
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03FFFFFF000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF00007FFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000F0000000000000000000000000000000000000000
--- 3083,3091 ----
  FFFFFFFF7F3FFFFF3F00000000000000FFFFFFFF7FFFFFFF0000001100000000FFFFFFFF013FFFFF0000000000000000
  E7FFFFFF000007FF0000007F0000000000000000000000000000000000000000FFFFFFFF01FFFFFF0000000000000000
  00000000FFFFFFFFFFFFFFFF80000000FF6FF27F99BFFFFF000000070000000000000000FFFFFCFFFCFFFFFF0000001A
! FFFFFFFF7FE7FFFFFFFF0000FFFFFFFF20FFFFFFFFFF0000FFFFFFFF01FFFFFF000000000000000000000000000000FF
  0000000000000000FFFFFFFF00000001FFFFFDFF7F7FFFFF00000001FFFC0000FFFCFFFF007FFEFF0000000000000000
! FFFFFB7FB47FFFFF000000CBFFFFFDBF017B7FFFFFFF00000FFFFFFF0000000000000000000000000000000000000000
  000000000000000000000000007FFFFFFFFDFFFFC7FFFFFF000000010000000000000000000100000000000000000000
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03FFFFFF000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF00007FFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000F0000000000000000000000000000000000000000
*************** FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
*** 3044,3078 ****
  FFFFFFFFFFFFFFFF0000007F0000000000000000000000000000000000000000FFFFFFFF00007FFF0000000000000000
  00000000000000000000000000000000FFFFFFFF01FFFFFF7FFFFFFFFFFF0000FFFFFFFF7FFFFFFFFFFF000000003FFF
  FFFFFFFF0000FFFF0000000FE0FFFFF80000FFFF0000000000000000000000000000000000000000FFFFFFFF00001FFF
! 000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFF00000000000000000000000000000000
! FFFFFFFFFFFFFFFFFFFF87FFFFFFFFFFFFFF80FF00000000000000000003000BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF003FFFFF80000000
! 000001FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 0000000000000000000000006FEF0000FFFFFFFF0004000700270000FFFF00F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1FFF07FF
! 43FF01FF000000000000000000000000FFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFDFFFFFFFEBFFDE64FFFFFFEFFFFFFFFF
! DFDFE7BF7BFFFFFFFFFDFC5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFF3FF7FFFFFDF7FFFFFFFFDFFFFFFFDFFFFFFFFF7FFFFFFF7FFFFFFFFDFFFFFFFDFF00000FF700000000
! 7FFFFFFF000007E0000000000000000000000000000000000000000000000000F9FFFF7FFFFF07DBFFFFFFFF00003FFF
! 00008000000000000000000000000000FFFFFFFF3F801FFF000040000000000000000000000000000000000000000000
! 00000000000000000000000000000000FFFF000000003FFFFFFFFFFF00000FFF00000000000000000000000000000000
! 0000000000000000FFFF000000000FFF000000000000000000000000000000000000000000000000FFFF000000013FFF
  000000000000000000000000000000000000000000000000000000007FFF6F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFF0000001F00000000FFFFFFFFFFFFFFFF0000088F0000000000000000000000000000000000000000
  FFFFFFEF0AF7FE96AA96EA845EF7F7960FFFFBFF0FFFFBEE000000000000000000000000FFFF0000FFFF03FFFFFF03FF
  000003FF000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000
! FFFFFFFF03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0003FFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0001FFFFFFFFFFFFFFFF3FFFFFFF00000000
! 000000000000000000000000000000003FFFFFFF00000000000000000000000000000000000000000000000000000000
! FFFFFFFFFFFFFFFFFFFF07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFF0000FFFF00000000000000000000000000000000000000000000000000000000000000000000000000000000",
  );
! //3456 bytes
  enum markTrieEntries = TrieEntry!(bool, 8, 5, 8)(x"
  000000000000004000000110",
  x"
! 00000100000001A000004A00",
  x"
  0202010004020302070206050A0908020202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
--- 3094,3128 ----
  FFFFFFFFFFFFFFFF0000007F0000000000000000000000000000000000000000FFFFFFFF00007FFF0000000000000000
  00000000000000000000000000000000FFFFFFFF01FFFFFF7FFFFFFFFFFF0000FFFFFFFF7FFFFFFFFFFF000000003FFF
  FFFFFFFF0000FFFF0000000FE0FFFFF80000FFFF0000000000000000000000000000000000000000FFFFFFFF00001FFF
! 000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFF00000000F9FFFFFF000FFFFF00000000
! FFFFFFFFFFFFFFFFFFFF87FFFFFFFFFFFFFF80FF0000000000000000007F000BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFF003FFFFF800000007FFFFFFF000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF0007FFFF
! 000000000000000000000000000000000000000000000000000000006FEF0000FFFFFFFF0004000700270000FFFF00F0
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFF1FFF07FF43FF01FF000000000000000000000000FFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFF
! DFFFFFFFEBFFDE64FFFFFFEFFFFFFFFFDFDFE7BF7BFFFFFFFFFDFC5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3FF7FFFFFDF7FFFFFFFFDFFFFFFFDFFFFFFFFF7FFFFFFF7FFF
! FFFFFDFFFFFFFDFF00000FF7000000007FFFFFFF000007E0000000000000000000000000000000000000000000000000
! F9FFFF7FFFFF07DBFFFFFFFF00003FFF00008000000000000000000000000000FFFFFFFF3F801FFF0000400000000000
! 0000000000000000000000000000000000000000000000000000000000000000FFFF000000003FFFFFFFFFFF00000FFF
! 000000000000000000000000000000000000000000000000FFFF000000000FFF00000000000000000000000000000000
! 0000000000000000FFFF000000013FFF0000000000000000000000000000000000000000000000007FFFFFFFC03FFFFF
  000000000000000000000000000000000000000000000000000000007FFF6F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFF0000001F00000000FFFFFFFFFFFFFFFF0000088F0000000000000000000000000000000000000000
  FFFFFFEF0AF7FE96AA96EA845EF7F7960FFFFBFF0FFFFBEE000000000000000000000000FFFF0000FFFF03FFFFFF03FF
  000003FF000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000
! 3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0001
! FFFFFFFFFFFFFFFF3FFFFFFF00000000000000000000000000000000000000003FFFFFFF000000000000000000000000
! 00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFF07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFF03FFFFFF0000000000000000000000000000000000000000000000000000000000000000
! 00000000000000000000000000000000",
  );
! //3520 bytes
  enum markTrieEntries = TrieEntry!(bool, 8, 5, 8)(x"
  000000000000004000000110",
  x"
! 00000100000001A000004C00",
  x"
  0202010004020302070206050A0908020202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
*************** x"
*** 3087,3100 ****
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000021
  0022000000240023000000000000000000000000000000250026000000280027002A0029002C002B002E002D0030002F
! 003200310000003300350034003700360000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000038000000000000000000000000000000000000000000390000000000000000000000000000
! 00000000003B003A00000000003C00000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 00000000000000000000003D0000000000000000000000000000000000000000000000000000000000000000003E0000
! 003F000000000040000000000000000000000000000000410000000000000000003B0042000000430045004400000000
! 004700460000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 004800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF0000FFFF00000000000000000000000000000000
--- 3137,3150 ----
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000021
  0022000000240023000000000000000000000000000000250026000000280027002A0029002C002B002E002D0030002F
! 003200310034003300360035003800370000000000000000000000000000000000000000000000000000000000000000
! 0000000000000000000000390000000000000000000000000000000000000000003A0000000000000000000000000000
! 00000000003C003B00000000003D00000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 00000000000000000000003E0000000000000000000000000000000000000000000000000000000000000000003F0000
! 0040000000000041000000000000000000000000000000420000000000000000003C0043000000440046004500000047
! 004900480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 004A00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF0000FFFF00000000000000000000000000000000
*************** FF80000000000000FFFFFC00FFFFFFFB0000000F
*** 3109,3115 ****
  000000007FFFF800C3C00000001E3F9D3C00BFFC0000000000000000000000000000000000000000E000000000000000
  00000000000000000000000000000000003C0000001C0000000C0000000C000000000000FFF00000200FFFFF00000000
  0000B80000000000000000000000000000000060000002000000000000000000000000000FFF0FFF0000000000000000
! 000000000000000000000000000000000F800000000000007FE000009FFFFFFF00000000FFFF000000007FFF00000000
  0000001FFFF000000000001F000FF8000000000700003FFE00000000000FFFC00000000000FFFFF00000000000000000
  0000000000000000FFF70000039021FF000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFF
  000000000000000000000000000000000000000000000000FFFF00000001FFFF00000000000000000000000000000000
--- 3159,3165 ----
  000000007FFFF800C3C00000001E3F9D3C00BFFC0000000000000000000000000000000000000000E000000000000000
  00000000000000000000000000000000003C0000001C0000000C0000000C000000000000FFF00000200FFFFF00000000
  0000B80000000000000000000000000000000060000002000000000000000000000000000FFF0FFF0000000000000000
! 000000000000000000000000000000000F800000000000007FE000009FFFFFFF00000000FFFF00003FFFFFFF00000FFF
  0000001FFFF000000000001F000FF8000000000700003FFE00000000000FFFC00000000000FFFFF00000000000000000
  0000000000000000FFF70000039021FF000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFF
  000000000000000000000000000000000000000000000000FFFF00000001FFFF00000000000000000000000000000000
*************** C000000000000000000000000003000000000844
*** 3123,3129 ****
  000000000000000000000000000000000000000000000000000000000000000100000000000000000000000007C00000
  000000000000000000000000000000000000F06E87000000000000000000000000000000000000000000000000000060
  00000000000000F00000000000003E000000000000000000000000000000000000000000000000000000000000000000
! 000000000000180000000000F000000000000000000000000001FFC0000000000000003C000000000000000000000000
  00000007FF0000000000007F801900000000000707FF0000000000040000000000000007001FFF800000006000080000
  00000007FFF800000000DE01000000000000000040FFF0000000000200000000000000000000000080000000000007FF
  0000000FD80000000080399F001F1FCC00000000FF0000000005F7A50000000600000000FFE000004000007F00000000
--- 3173,3179 ----
  000000000000000000000000000000000000000000000000000000000000000100000000000000000000000007C00000
  000000000000000000000000000000000000F06E87000000000000000000000000000000000000000000000000000060
  00000000000000F00000000000003E000000000000000000000000000000000000000000000000000000000000000000
! 000000000000180000000000FC00000000000000000000000001FFC0000000000000003C000000000000000000000000
  00000007FF0000000000007F801900000000000707FF0000000000040000000000000007001FFF800000006000080000
  00000007FFF800000000DE01000000000000000040FFF0000000000200000000000000000000000080000000000007FF
  0000000FD80000000080399F001F1FCC00000000FF0000000005F7A50000000600000000FFE000004000007F00000000
*************** C000000000000000000000000003000000000844
*** 3131,3157 ****
  00000000FFFF000000000001000000000000000000FFF8000000000000000000E000000000000FFF0000000000000000
  000000000000000000000000000000000000000007FFF000000000000000000000000000000000000000000000000000
  0000000079BF00000000000D000000000000000000000000FCFE000000000011000007FE7BF800000FFE008000000000
! 03FFFC0000000000000000000000000000000000FF7F80000000000000000000FFFC0000007FFEFF0000000000000000
! 00000000B47E0000000000BF0000000000FB7C0000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000007800000000000BC7F00000040000070000000000000000000000000000000000000000
! 0000000000000000003FFF810000000000000000000000000000000000000000C00000000000FFFF0000000000000000
! 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001F0000
! 00000000007F00000000000000000000000000000000000000000000000000000000000000000000FFFE8000FFFFFFFF
! 000780FF0000000000000000000300100000000000000000000000000000000060000000000000000000000000000000
! FFFFFFFFFFFF3FFF0000007F0000000000000000000000000000000000000000000000000000000000000000F807E3E0
! 00000FE700003C00000000000000000000000000000000000000001C0000000000000000000000000000000000000000
! FFFFFFFFF87FFFFFFFFFFFFF00201FFFF80000100000FFFE0000000000000000F9FFFF7F000007DB0000000000000000
! 00008000000000000000000000000000000000000000000000000000000000000000000000004000000000000000F000
! 000000000000000000000000000000000000000000000000000000000000F00000000000000000000000000000000000
! 0000000000000000000000000000C000000000000000000000000000000000000000000000000000007F000000000000
! 0000000000000000000007F00000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000000000000000000000000000000000000000000000000000000000000000",
  );
! //2896 bytes
  enum numberTrieEntries = TrieEntry!(bool, 8, 6, 7)(x"
  0000000000000040000001A0",
  x"
! 00000100000002C000002680",
  x"
  020201000402030207020605090802020202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
--- 3181,3209 ----
  00000000FFFF000000000001000000000000000000FFF8000000000000000000E000000000000FFF0000000000000000
  000000000000000000000000000000000000000007FFF000000000000000000000000000000000000000000000000000
  0000000079BF00000000000D000000000000000000000000FCFE000000000011000007FE7BF800000FFE008000000000
! 03FFFC00000000000000000000000000000000000000000000000000000000FF00000000000000000000000000000000
! 00000000FF7F80000000000000000000FFFC0000007FFEFF000000000000000000000000B47E0000000000BF00000000
! 00FB7C000000000000000000000000000000000000000000000000000000000000000000000000000000000000780000
! 0000000BC7F000000400000700000000000000000000000000000000000000000000000000000000003FFF8100000000
! 00000000000000000000000000000000C00000000000FFFF000000000000000000000000000000000000000000000000
! 00000000000000000000000000000000000000000000000000000000001F000000000000007F00000000000000000000
! 000000000000000000000000000000000000000000000000FFFE8000FFFFFFFF000780FF000000000000000000030010
! 0000000000000000000000000000000060000000000000000000000000000000FFFFFFFFFFFF3FFF0000007F00000000
! 00000000000000000000000000000000000000000000000000000000F807E3E000000FE700003C000000000000000000
! 00000000000000000000001C0000000000000000000000000000000000000000FFFFFFFFF87FFFFFFFFFFFFF00201FFF
! F80000100000FFFE0000000000000000F9FFFF7F000007DB000000000000000000008000000000000000000000000000
! 000000000000000000000000000000000000000000004000000000000000F00000000000000000000000000000000000
! 0000000000000000000000000000F000000000000000000000000000000000000000000000000000000000000000C000
! 000000000000000000000000000000000000000000000000000000000020C04800000000000000000000000000000000
! 0000000000000000007F0000000000000000000000000000000007F00000000000000000000000000000000000000000
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF00000000000000000000000000000000
! 00000000000000000000000000000000",
  );
! //2928 bytes
  enum numberTrieEntries = TrieEntry!(bool, 8, 6, 7)(x"
  0000000000000040000001A0",
  x"
! 00000100000002C000002780",
  x"
  020201000402030207020605090802020202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
*************** x"
*** 3174,3189 ****
  000200020002000200020002000200020002000200020002000200020002000E000200020027002600280002002A0029
  00230002000200020002000200020002002C002B002E002D0030002F0032003100330002000200340002003500370036
  00040038003A00390004000200020002000C000C00020002003B000C0002003C003D00020002000C0002000200040002
! 0002003E0023000C00020002003F000C0002000200020002000200020002000200020040000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
! 000200020002000000020002000200020002000200020002000200020002000200020002000200020005000300020041
! 000200020002000400420002000200020002000200020002000200020002000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200040002000200020002000200020002
! 000200020002000200430002000200440002000200020002000200020045000200020002000200020002000200020002
! 000200020002000200020002000200020002000200020005000400020002000200040002004600020002000200020002
! 004700020002000C0002000200020002004900480002004A0002000200020002000200020002004B0002000200020002
  000200020002000200020002000200020002000200020002000200020004000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
--- 3226,3241 ----
  000200020002000200020002000200020002000200020002000200020002000E000200020027002600280002002A0029
  00230002000200020002000200020002002C002B002E002D0030002F0032003100330002000200340002003500370036
  00040038003A00390004000200020002000C000C00020002003B000C0002003C003D00020002000C0002000200040002
! 0002003E003F000C000200020040000C0002000200020002000200020002000200020041000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
! 000200020002000000020002000200020002000200020002000200020002000200020002000200020005000300020042
! 000200020002000400430002004400020002000200020002000200020002000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200040002000200020002000200020002
! 000200020002000200450002000200460002000200020002000200020047000200020002000200020002000200020002
! 000200020002000200020002000200020002000200020005000400020002000200040002004800020002000200020002
! 004900020002000C0002000200020002004B004A0002004C0002000200020002000200020002004D0002000200020002
  000200020002000200020002000200020002000200020002000200020004000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
*************** x"
*** 3208,3219 ****
  0000000003FF0000000003FF000000000000000000000000000000007FFFFFFFE00000000000007F001E000000000000
  000000000000000000000FE0000000000000000000000000FFFC00000000FFFF00000000FFC000000000000000000000
  000000000000000003FF0000001FFFFE0000000000000000FFFF03FF0000000F000000000FFF00000000000000000000
! 0000000000000000000000000007FFFF0000000000000000FFFF000000001FFF0000000000000000001FFFFF00000000
! FFFFFFFFFFFFFFFFFFFFFFFF00007FFF0000000000000000FBFF000000000003007FFFFF000000000000000000000000
! 0000000000000000000FFFFF000FFFFF00000000000000000000000001FFFFFF0000000000000000FFFFC000FFFFFFFF
! 00000000000000000000000007FE000000000000000000000000FF8000000000000000000000000000000000FFFE0000
! FFFFFFFF001EEFFF0000000000000000FFFFFFFE3FFFBFFF000000000000000000001FFF000000000000000000000000
! 00000000000000000000000003FF0000",
  );
  //3488 bytes
  enum punctuationTrieEntries = TrieEntry!(bool, 8, 5, 8)(x"
--- 3260,3271 ----
  0000000003FF0000000003FF000000000000000000000000000000007FFFFFFFE00000000000007F001E000000000000
  000000000000000000000FE0000000000000000000000000FFFC00000000FFFF00000000FFC000000000000000000000
  000000000000000003FF0000001FFFFE0000000000000000FFFF03FF0000000F000000000FFF00000000000000000000
! 0000000000000000000000000007FFFF0000000000000000FFFF000000001FFF00000000000003FF00000000000003FF
! 0000000000000000001FFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFF00007FFF0000000000000000FBFF000000000003
! 007FFFFF000000000000000000000000000000000000000000000000007000000000000000000000000FFFFF000FFFFF
! 00000000000000000000000001FFFFFF0000000000000000FFFFC000FFFFFFFF00000000000000000000000007FE0000
! 00000000000000000000FF8000000000000000000000000000000000FFFE0000FFFFFFFF001EEFFF0000000000000000
! FFFFFFFE3FFFBFFF000000000000000000001FFF00000000000000000000000000000000000000000000000003FF0000",
  );
  //3488 bytes
  enum punctuationTrieEntries = TrieEntry!(bool, 8, 5, 8)(x"
*************** E8003600000000000000000000003C0000000000
*** 3274,3280 ****
  000000000000000000800000000000000000000000000000000000000000000080000000800000000000000000000000
  00000000000000000000000000000000000000000000000001FF000080000000000000000000000000000000007F0000
  00000000FE00000000000000000000001E00000000000000000000000000000000000000000000000000000000004000
! 000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000
  000000000000000003E0000000000000000003C0000000000000000000000000000000000000000000003F8000000000
  00000000D8000000000000030000000000000000000000000000000F003000000000000000000000E80021E000000000
  000000003F00000000000000000000000000000000000200000000000000000000000000000000000000000000000000
--- 3326,3332 ----
  000000000000000000800000000000000000000000000000000000000000000080000000800000000000000000000000
  00000000000000000000000000000000000000000000000001FF000080000000000000000000000000000000007F0000
  00000000FE00000000000000000000001E00000000000000000000000000000000000000000000000000000000004000
! 000000000000000000000000000000000000000000000000000000000000000000000000000020000001000000000000
  000000000000000003E0000000000000000003C0000000000000000000000000000000000000000000003F8000000000
  00000000D8000000000000030000000000000000000000000000000F003000000000000000000000E80021E000000000
  000000003F00000000000000000000000000000000000200000000000000000000000000000000000000000000000000
*************** E8003600000000000000000000003C0000000000
*** 3295,3305 ****
  000000000000000000000000800000000000000000000000C00000000000000000000000000000000000000000000000
  0000000000000000000000000000000000000000000000000000000000000000",
  );
! //3472 bytes
  enum symbolTrieEntries = TrieEntry!(bool, 8, 6, 7)(x"
  0000000000000040000001C0",
  x"
! 000001000000030000003480",
  x"
  0302010005030403070303060A0908030303030303030303030303030303030303030303030303030303030303030303
  030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303
--- 3347,3357 ----
  000000000000000000000000800000000000000000000000C00000000000000000000000000000000000000000000000
  0000000000000000000000000000000000000000000000000000000000000000",
  );
! //3456 bytes
  enum symbolTrieEntries = TrieEntry!(bool, 8, 6, 7)(x"
  0000000000000040000001C0",
  x"
! 000001000000030000003400",
  x"
  0302010005030403070303060A0908030303030303030303030303030303030303030303030303030303030303030303
  030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303
*************** x"
*** 3309,3329 ****
  0000000000000000000000000000000000010000000200020003000200050004000600020007000200090008000A0002
  000B0002000C0002000D0002000F000E0002001000020011000200120014001300150002000200020002000200160002
  0002000200020002000200170018000200020002001A0019000200020002001B000200020002000200020002001C0002
! 001E001D0020001F00210021002100220024002300210021002100210026002500210021002700210021002100290028
! 002A000200020002002C002B002D0021002F002E00300002003200310021002100020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
! 000200020002000200020002000200020002000200020002000200020002000200020002003300020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
! 000200020002000200020002000200020034000200020002000200020036003500020037000200020002003800020039
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
! 0002000200020002000200020002000200020002000200020002000200020002000200020002000200020002003B003A
! 00020002003D003C0002003E0040003F0002000200420041000200020002000200020002000200020002000200020002
! 000200430002000200440002000200020002000200450002000200020002000200020002000200020002000200020002
  000200020002000200020002000200120002000200020002000200020002000200020002000200020002000200460002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020047
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
--- 3361,3381 ----
  0000000000000000000000000000000000010000000200020003000200050004000600020007000200090008000A0002
  000B0002000C0002000D0002000F000E0002001000020011000200120014001300150002000200020002000200160002
  0002000200020002000200170018000200020002001A0019000200020002001B000200020002000200020002001C0002
! 001E001D0020001F00210021002100220024002300210021002100210026002500210021002700210021002100210028
! 0029000200020002002B002A002C0021002E002D002F0002003100300021002100020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
! 000200020002000200020002000200020002000200020002000200020002000200020002003200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
! 000200020002000200020002000200020033000200020002000200020035003400020036000200020002003700020038
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
! 0002000200020002000200020002000200020002000200020002000200020002000200020002000200020002003A0039
! 00020002003C003B0002003D003F003E0002000200410040000200020002000200020002000200020002000200020002
! 000200420002000200430002000200020002000200440002004500020002000200020002000200020002000200020002
  000200020002000200020002000200120002000200020002000200020002000200020002000200020002000200460002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020047
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
*************** x"
*** 3334,3341 ****
  000200020002000200020002000200020049002100210021004A0021004C004B004D0021004F004E0002005000020051
  000200020002000200520002005400530021002100210021005600550002000200020002000200020002000200020002
  000200020002005700100002000200020002000200020002000200020002000200020002000200020002000200020002
! 0058000200020059005A000200020002005C005B005E005D0002005F0021002100210021002100210060002100620061
! 006400630021002100660065006700210002000200020002000200020002000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
  0002000200020002000200020002000200000000700008104000000050000001000000000113D37C0080000000800000
--- 3386,3393 ----
  000200020002000200020002000200020049002100210021004A0021004C004B004D0021004F004E0002005000020051
  000200020002000200520002005400530021002100210021005600550002000200020002000200020002000200020002
  000200020002005700100002000200020002000200020002000200020002000200020002000200020002000200020002
! 0058000200020059005A000200020002005C005B005E005D0002005F0021002100210021002100210060002100610021
! 006300620021002100650064006600210002000200020002000200020002000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
  0002000200020002000200020002000200000000700008104000000050000001000000000113D37C0080000000800000
*************** x"
*** 3348,3385 ****
  00000000C000000001E0DFBF00000000C000000000000000000000000000000003FF0000000000000000000000000000
  000000000000000000000000000020000000000000000000080000000000000000000000000000000000000100000000
  0000000000000000C0000000FFFFFFFF0000000000000000000000001FF007FE00000000A0000000E000E0036000E000
! 0000000000000000000400101C00000000001C00FFFFFFFF0000000100000000C1D0037B0C0042AF0000BC1F00000000
  FFFF0C00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFF9FFFFFFFFFFFFFFFFFF
  FFFFFFFF000003FF000007FF00000000F0000000FFFFFFFFFFFFFFFF000003FFFFFFFFFFFFFFFFFFFFFFFFFF000000FF
  FFF00000FFFFFFFFFFFFFF9FFFFF003FFE000007FFFFFFFFF0FFFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFFF
! FFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000007E000000000000000000003000000000000
! FBFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFF003FFFFFFFFF0000000C0010C0C000010000000000000000
! 18000000000000000000000000000000FFC3000000000000FFFFFFFF0000803F7FFFFFFFFFFFFC00000100FFFFFFFFFF
! FFFFFC000001FFFFFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFF0000007F00000000
! 007FFFFF000000030000000000000000000006000000000000000000000000000000000003C00F000000000000000000
! 0000000000000000000000000380000000000000000000000800000000000C0000000000000002000000000000000000
! 00000000FFFC0000000000070000000000000000000000000000FFFF00000000000000000000000000008000F0000000
! 000000000000000000000000000002747000081040000000500000010000000000000000000000000000000030007F7F
! 00000000FF80000000000000FE0000001FFF73FF00000001FFFF00001FFFFFFF00000000000000000000000001800000
! 000000000000000000000100000000000000C0000000000000000000000000000000000000000000FFE000000003FFFF
! 00000000F0000000000000200000000010000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF0000FFFF
! FFFFFFFF000FFFFF00000000000000000000000000000000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFF0000000F00000000
  FFFFFFFFFFFFFFFFFFFFFFFF003FFFFFFFFFFFFFFFFFFE7FFFFFFFFF00001C1FFFFFF018FFFFC3FFFFFFFFFF000007FF
  FFFFFFFFFFFFFFFF0000002300000000FFFFFFFFFFFFFFFF007FFFFF0000000000000000000000000800000208000000
  0020000000200000000080000000800000000200000002000000000800000000000000000780000000000000FFDFE000
  0000006F0000000000000000000000000000000000000000000080000000000000000000000110000000000000000000
  0000000000004000000000000000000000000000000000000000000000030000FFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFF
  000FFFFFFFFE7FFFFFFEFFFE003FFFFFFFFFE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00003FFF00000000FFFFFFC0
! FFFF00070FFFFFFF000301FF0000003FFFFFFFFFFFFFFFFFF0FFFFFF1FFF1FFFFFFFFFFFFFFFFFFFFFFFFFFFF87FFFFF
! FFFFFFFFFFFFFFFF03FFFFFF00010FFFFFFF0FFFFFFFFFFF03FF00FFFFFFFFFFFFFF00FF0FFF3FFF0000000300000000
! FFFFFFFFFFFFFFFF000FFFFF1FFF3FFFFFFF83FFFFFFFFFF9FFFC07F01FF03FFFFF7FFFFFFFFFFFFFFFFFFFF0000FFFF
! 00000000000000000000000000000000",
  );
! //6272 bytes
  enum graphicalTrieEntries = TrieEntry!(bool, 8, 5, 8)(x"
  0000000000000040000001A0",
  x"
! 00000100000002C000009000",
  x"
  0202010005040302090807060D0C0B0A02020202100F0E02131312111313131313131313131313131313131313131313
  131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313
--- 3400,3436 ----
  00000000C000000001E0DFBF00000000C000000000000000000000000000000003FF0000000000000000000000000000
  000000000000000000000000000020000000000000000000080000000000000000000000000000000000000100000000
  0000000000000000C0000000FFFFFFFF0000000000000000000000001FF007FE00000000A0000000E000E0036000E000
! 0000000000000000000400101C00000000001C00FFFFFFFF0000000300000000C1D0037B0C0042AF0000BC1F00000000
  FFFF0C00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFF9FFFFFFFFFFFFFFFFFF
  FFFFFFFF000003FF000007FF00000000F0000000FFFFFFFFFFFFFFFF000003FFFFFFFFFFFFFFFFFFFFFFFFFF000000FF
  FFF00000FFFFFFFFFFFFFF9FFFFF003FFE000007FFFFFFFFF0FFFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFFF
! 000000000000000000000000000007E000000000000000000003000000000000FBFFFFFFFFFFFFFFFFFFFFFF000FFFFF
! FFFFFFFFFFFFFFFF003FFFFFFFFF0000000C0010C0C00001000000000000000018000000000000000000000000000000
! FFC3000000000000FFFFFFFF0000803F7FFFFFFFFFFFFC00000100FFFFFFFFFFFFFFFC000001FFFFFFFFFFFFFFFFFFFF
! 0000000000000000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFF0000007F00000000007FFFFF000000030000000000000000
! 000006000000000000000000000000000000000003C00F00000000000000000000000000000000000000000003800000
! 00000000000000000800000000000C000000000000000200000000000000000000000000FFFC00000007FFFF00000000
! 00000000000000000000FFFF0000000000030000000000000000FF00F000000000000000000000000000000000000274
! 7000081040000000500000010000000000000000000000000000000030007F7F00000000FF80000000000000FE000000
! 1FFF73FF00000001FFFF00001FFFFFFF0000000000000000000000000180000000000000000000000000010000000000
! 0000C000000000000000000000000000000000000000000001FE0000000000000000000000000000FFE000000003FFFF
! 00000000F0000000000000200000000010000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF1C00FFFF
! FFFFFFFFFC0FFFFF0001FFFF0001FFFF0000000000000000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFF0000000F00000000
  FFFFFFFFFFFFFFFFFFFFFFFF003FFFFFFFFFFFFFFFFFFE7FFFFFFFFF00001C1FFFFFF018FFFFC3FFFFFFFFFF000007FF
  FFFFFFFFFFFFFFFF0000002300000000FFFFFFFFFFFFFFFF007FFFFF0000000000000000000000000800000208000000
  0020000000200000000080000000800000000200000002000000000800000000000000000780000000000000FFDFE000
  0000006F0000000000000000000000000000000000000000000080000000000000000000000110000000000000000000
  0000000000004000000000000000000000000000000000000000000000030000FFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFF
  000FFFFFFFFE7FFFFFFEFFFE003FFFFFFFFFE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00003FFF00000000FFFFFFC0
! FFFF00070FFFFFFF000301FF0000003FFFFFFFFFFFFFFFFFF1FFFFFF1FFF1FFFFFFFFFFFFFFFFFFF03FFFFFF00010FFF
! FFFF0FFFFFFFFFFF03FF00FFFFFFFFFFFFFF00FF0FFF3FFF01FF000300000000FFFFFFFFFFFFFFFF00FFFFFF1FFF3FFF
! FFFFC7FFFFFFFFFF9FFFE17F01FF87FFFFF7FFFFFFFFFFFFFFFFFFFF0400FFFF00000000000000000000000000000000",
  );
! //6240 bytes
  enum graphicalTrieEntries = TrieEntry!(bool, 8, 5, 8)(x"
  0000000000000040000001A0",
  x"
! 00000100000002C000008F00",
  x"
  0202010005040302090807060D0C0B0A02020202100F0E02131312111313131313131313131313131313131313131313
  131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313
*************** x"
*** 3399,3428 ****
  002C002C002C002C002C002C0054002C0001000100010001000100550001000100010001000100010001000100010001
  000100010056000100010001002C0057002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C
  002C002C002C002C002C002C002C002C0058002C002C002C002C002C002C002C00010001005A0059005B002C005D005C
! 0001000100010001000100010001000100010001000100010001000100010001000100010001000100010001005E0001
! 00010001000100010060005F002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C
! 002C002C002C002C002C002C002C002C002C002C002C002C002C002C0061002C00620001002C0063002C002C002C002C
! 002C002C002C002C002C0064002C002C002C002C002C002C002C002C002C002C002C002C002C002C0001006500670066
! 00690068006B006A006D006C006F006E00010001002C0070002C002C0071002C00730072002C0074007600750077002C
  00790078002C002C007B007A002C007C007E007D0001007F00010001008100800001008200840083002C002C002C002C
! 000100010001000100010001000100850001000100010001000100010001000100010001000100010001000100860001
! 000100870001000100010001000100010001000100010001000100010001000100010001000100010001000100010088
  000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001
! 000100010089000100010001002C008A002C002C002C002C002C002C002C002C00010001002C008B002C002C002C002C
! 000100010001000100010001000100010001000100010001000100010001000100010001008C00010001000100010001
! 0001000100010001000100010001000100010001008D0001002C002C002C002C002C002C002C002C002C002C002C002C
! 002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C
  002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C
! 008E002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C
  002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C
  002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C00000000FFFFFFFFFFFFFFFF7FFFFFFF
  00000000FFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFCFFFFFFFFFFD7F0FFFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFE7FFFFFFFFFFFFF
  FFFEE7FFFFFFFFFFFFFF00FF001F87FFEFFFFFC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF
  FFFF3FFFFFFFFFFFFFFFE7FFFFFFFFFFFFFFFFFF0003FFFFFFFFFFFFE7FFFFFFFFFFFFFF7FFF3FFF4FFFFFFFFFFF07FF
! FF807FFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99FEFF3C5FDFFB080799F7FFFFFCF
  FFF987EED36DFDFF5E023987007FFFC0FFFBBFEEF3EDFDFF00013BBFFE03FFCFFFF99FEEF3EDFDFFB0E0399F00FFFFCF
! D63DC7ECC3FFC71800813DC707FFFFC0FFFDDFFFF3FFFDFF27603DDFFF80FFCFFFFDDFFFF3EFFDFF60603DDF000EFFCF
  FFFDDFFFFFFFFFFFFFF0FDDFFFFFFFCFFC7FFFEE2FFBFFFFFF5F847F001CFFC0FFFFFFFE87FFFFFF0FFFFFFF00000000
  FFFFF7D63FFFFFAFF3FF7F5F00000000FFFFFFFFFFFFFFFFFFFFFEFFFFFE1FFFFEFFFFFFDFFFFFFF07FFDFFF00000000
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20BFFFFFFFFFFFFFFFFFFFFFFFFF3D7F3DFFFFFFFFFF
--- 3450,3479 ----
  002C002C002C002C002C002C0054002C0001000100010001000100550001000100010001000100010001000100010001
  000100010056000100010001002C0057002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C
  002C002C002C002C002C002C002C002C0058002C002C002C002C002C002C002C00010001005A0059005B002C005D005C
! 000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001
! 0001000100010001005F005E002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C
! 002C002C002C002C002C002C002C002C002C002C002C002C002C002C0060002C00610001002C0062002C002C002C002C
! 002C002C002C002C002C0063002C002C002C002C002C002C002C002C002C002C002C002C002C002C0001006400660065
! 00680067006A0069006C006B006E006D00010001002C006F002C002C0070002C00720071002C00730075007400770076
  00790078002C002C007B007A002C007C007E007D0001007F00010001008100800001008200840083002C002C002C002C
! 000100010001000100010001000100850001000100010001000100010001000100010001000100010001000100010001
! 000100860001000100010001000100010001000100010001000100010001000100010001000100010001000100010087
  000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001
! 000100010088000100010001002C0089002C002C002C002C002C002C002C002C00010001002C008A002C002C002C002C
! 000100010001000100010001000100010001000100010001000100010001000100010001008B00010001000100010001
! 000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001
! 0001000100010001002C008C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C
  002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C
! 008D002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C
  002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C
  002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C00000000FFFFFFFFFFFFFFFF7FFFFFFF
  00000000FFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFCFFFFFFFFFFD7F0FFFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFE7FFFFFFFFFFFFF
  FFFEE7FFFFFFFFFFFFFF00FF001F87FFEFFFFFC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF
  FFFF3FFFFFFFFFFFFFFFE7FFFFFFFFFFFFFFFFFF0003FFFFFFFFFFFFE7FFFFFFFFFFFFFF7FFF3FFF4FFFFFFFFFFF07FF
! FF80FFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99FEFF3C5FDFFB080799F7FFFFFCF
  FFF987EED36DFDFF5E023987007FFFC0FFFBBFEEF3EDFDFF00013BBFFE03FFCFFFF99FEEF3EDFDFFB0E0399F00FFFFCF
! D63DC7ECC3FFC71800813DC707FFFFC0FFFDDFFFF3FFFDFF37603DDFFF80FFCFFFFDDFFFF3EFFDFF70603DDF000EFFCF
  FFFDDFFFFFFFFFFFFFF0FDDFFFFFFFCFFC7FFFEE2FFBFFFFFF5F847F001CFFC0FFFFFFFE87FFFFFF0FFFFFFF00000000
  FFFFF7D63FFFFFAFF3FF7F5F00000000FFFFFFFFFFFFFFFFFFFFFEFFFFFE1FFFFEFFFFFFDFFFFFFF07FFDFFF00000000
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20BFFFFFFFFFFFFFFFFFFFFFFFFF3D7F3DFFFFFFFFFF
*************** FFFF3DFF7F3DFFFFFF7FFF3DFFFFFFFFFF3DFFFF
*** 3430,3464 ****
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1FFFFFFFFFFFFFFFFFFFFFFF01FFFFFF803FFFFF007FFFFF000FFFFF000DDFFF
  FFFFFFFFFFFFFFFF3FFFFFFF03FF03FF03FFBFFFFFFFFFFFFFFFFFFF01FFFFFFFFFFFFFFFFFF07FFFFFFFFFF003FFFFF
  7FFFFFFF0FFF0FFFFFFFFFF1001F3FFFFFFFFFFFFFFF0FFFC7FF03FFFFFFFFFFCFFFFFFFFFFFFFFF7FFFFFFF9FFFFFFF
! 03FF03FFFFFF3FFF00007FFF00000000FFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFF
  FFFFFFFFF8FFFFFFFFFFE3FFFFFFFFFFFFFF07FFE7FFFFFFFFFF00FF07FFFFFF3F3FFFFFFFFFFFFFAAFF3F3F3FFFFFFF
! FFFFFFFFFFDFFFFFEFCFFFDF7FDCFFFFFFFF07FFFFFF80FFFFFFFFFFFFF300001FFF7FFFFFFFFFFFFFFF00010001FFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000003FF000007FFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0FFFFFFFFFFFFFFFFF20BFFFFFFFFF800180FF
  007FFFFF7F7F7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFF3FFFFFFF00000000FBFFFFFFFFFFFFFFFFFFFFFF000FFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF003FFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF
  FE7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0FFFEFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFFFFFFFFFF803F
  7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFF1FFFFFFFFFFFFFFF007FFFFFFFFFFFFFFFFF00000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1FEB3FFFFFFC0000FFFFFFFF03FF1FFFFFFFFFFF00FFFFFF
  FFFFFFFFFFFFFFFF03FFC03FFFFFFFFFFFFFFFFFFFFFFFFF800FFFFF1FFFFFFFFFFFFFFFFFFFFFFFC3FFBFFF7FFFFFFF
  FFFFFFFF007FFFFFF3FF3FFFFFFFFFFFFFFFFFFFFFFFFFFFF8000007007FFFFF007E7E7EFFFF7F7FFFFFFFFFFFFF0FFF
  FFFFFFFFFFFFFFFFFFFFFFFF03FF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFF87F0FFFFFFF
  0000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF3FFF
! FFFFFFFFFFFFFFFF03FFFFFF00000000E0F8007F5F7FFFFFFFFFFFDBFFFFFFFFFFFFFFFFFFFFFFFFFFF80007FFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFFFFFFFFFF000080FFFFFF000003FFFFFFFFFFFFFFFFF7FFFFFFDF0F7F
  FFFFFFFFFFFFFFFFFFFFFFFF1FFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF1CFCFCFC30007F7F
  FFFFEFFFB7FFFF7F3FFF3FFF00000000FFFFFFFFFFFFFFFFFFFFFFFF07FFFFFFFFFFFF87FF8FFFFFFFFFFFFFFFFFFFFF
  1FFF7FFF00000001FFFF00003FFFFFFF000000000000000000000000000000001FFFFFFFFFFFFFFF0001FFFF0FFFFFFF
  FFFFFFFFFFFFE00FFFFF07FF07FFFFFFBFFFFFFFFFFFFFFF003FFF0F00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  3FFFFFFFFFFF03FFFF0FFFFF0FFFFFFFFFFFFFFFFFFF00FFFFFFFFFFF7FF800FFFB7F7FF1BFBFFFBFFFFFFFF000FFFFF
  FFFFFFFF007FFFFF003FFFFF000000FFFFFFFFBF07FDFFFF0000000000000000FFFFFD3F91BFFFFFFFBFFFFFFFFFFFFF
! 7FFFFFFF0000FF8000000000F837FFFF8FFFFFFF83FFFFFF0000000000000000FFFFFFFFF0FFFFFFFFFCFFFFFFFFFFFF
  FEEFF06F873FFFFF01FF01FFFFFFFFFFFFFFFFFF00000000FFFFFFFF007FF87FFFFFFFFFFE3FFFFFFF3FFFFFFF07FFFF
  1E03FFFF0000FE000000000000000000FFFFFFFFFFFFFFFF000001FF00000000FFFFFFFF0007FFFFFFFFFFFFFC07FFFF
  FFFFFFFF03FF00FFFFFFFFFFFFFFFE3F0000C03F0000000000000000000000000000000000000000000000007FFFFFFF
! FFFFFFFF00033BFF0000001CF0000000FFFFFFFFFFFF00FF03FFFFFFFFFF0000000003FFFFFF000000000FFF007FFFFF
  FFFFFFFFFFFFFFFFFFFC3FFF803FFFFFFFFFFFFFDFFFFFFFFFFF000703FF01FFFFFFFFFFFFDFFFFFFFFF00FF007FFFFF
  FFFFFFFFFFFFFFFFFFFFFFFF001FFFFEFFFBFFFFFFFFFFFF0000000300000000BFFFBD7FFFFF03FFFFFFFFFF03FF07FF
  FFF99FEFFBEDFDFFE081399F001F1FCFFFFF4BFFFFBFFFFF01BFF7A500000006FFFFFFFFFFFFFFFFEFFFFFFF00000003
--- 3481,3515 ----
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1FFFFFFFFFFFFFFFFFFFFFFF01FFFFFF803FFFFF007FFFFF000FFFFF000DDFFF
  FFFFFFFFFFFFFFFF3FFFFFFF03FF03FF03FFBFFFFFFFFFFFFFFFFFFF01FFFFFFFFFFFFFFFFFF07FFFFFFFFFF003FFFFF
  7FFFFFFF0FFF0FFFFFFFFFF1001F3FFFFFFFFFFFFFFF0FFFC7FF03FFFFFFFFFFCFFFFFFFFFFFFFFF7FFFFFFF9FFFFFFF
! 03FF03FFFFFF3FFF3FFFFFFF00000FFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFF
  FFFFFFFFF8FFFFFFFFFFE3FFFFFFFFFFFFFF07FFE7FFFFFFFFFF00FF07FFFFFF3F3FFFFFFFFFFFFFAAFF3F3F3FFFFFFF
! FFFFFFFFFFDFFFFFEFCFFFDF7FDCFFFFFFFF07FFFFFF80FFFFFFFFFFFFF300001FFF7FFFFFFFFFFFFFFF00030001FFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000003FF000007FFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0FFFFFFFFFFFFFFFFF20BFFFFFFFFF800180FF
  007FFFFF7F7F7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFF3FFFFFFF00000000FBFFFFFFFFFFFFFFFFFFFFFF000FFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF003FFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF
  FE7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0FFFEFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFFFFFFFFFF803F
  7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFF1FFFFFFFFFFFFFFF007FFFFFFFFFFFFFFFFF00000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1FFFFFFFFFFE0000FFFFFFFF03FF1FFFFFFFFFFF00FFFFFF
  FFFFFFFFFFFFFFFF03FFC03FFFFFFFFFFFFFFFFFFFFFFFFF800FFFFF1FFFFFFFFFFFFFFFFFFFFFFFC3FFBFFF7FFFFFFF
  FFFFFFFF007FFFFFF3FF3FFFFFFFFFFFFFFFFFFFFFFFFFFFF8000007007FFFFF007E7E7EFFFF7F7FFFFFFFFFFFFF0FFF
  FFFFFFFFFFFFFFFFFFFFFFFF03FF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFF87F0FFFFFFF
  0000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF3FFF
! FFFFFFFFFFFFFFFF03FFFFFF00000000E0F8007F5F7FFFFFFFFFFFDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF000003FFFFFFFFFFFFFFFFF7FFFFFFDF0F7F
  FFFFFFFFFFFFFFFFFFFFFFFF1FFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF1CFCFCFC30007F7F
  FFFFEFFFB7FFFF7F3FFF3FFF00000000FFFFFFFFFFFFFFFFFFFFFFFF07FFFFFFFFFFFF87FF8FFFFFFFFFFFFFFFFFFFFF
  1FFF7FFF00000001FFFF00003FFFFFFF000000000000000000000000000000001FFFFFFFFFFFFFFF0001FFFF0FFFFFFF
  FFFFFFFFFFFFE00FFFFF07FF07FFFFFFBFFFFFFFFFFFFFFF003FFF0F00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  3FFFFFFFFFFF03FFFF0FFFFF0FFFFFFFFFFFFFFFFFFF00FFFFFFFFFFF7FF800FFFB7F7FF1BFBFFFBFFFFFFFF000FFFFF
  FFFFFFFF007FFFFF003FFFFF000000FFFFFFFFBF07FDFFFF0000000000000000FFFFFD3F91BFFFFFFFBFFFFFFFFFFFFF
! 7FFFFFFF0000FF8000000000F837FFFF8FFFFFFF83FFFFFF03FFFFFF00000000FFFFFFFFF0FFFFFFFFFCFFFFFFFFFFFF
  FEEFF06F873FFFFF01FF01FFFFFFFFFFFFFFFFFF00000000FFFFFFFF007FF87FFFFFFFFFFE3FFFFFFF3FFFFFFF07FFFF
  1E03FFFF0000FE000000000000000000FFFFFFFFFFFFFFFF000001FF00000000FFFFFFFF0007FFFFFFFFFFFFFC07FFFF
  FFFFFFFF03FF00FFFFFFFFFFFFFFFE3F0000C03F0000000000000000000000000000000000000000000000007FFFFFFF
! FFFFFFFF00033BFF01FF00FCFC000000FFFFFFFFFFFF00FF03FFFFFFFFFF0000000003FFFFFF000000000FFF007FFFFF
  FFFFFFFFFFFFFFFFFFFC3FFF803FFFFFFFFFFFFFDFFFFFFFFFFF000703FF01FFFFFFFFFFFFDFFFFFFFFF00FF007FFFFF
  FFFFFFFFFFFFFFFFFFFFFFFF001FFFFEFFFBFFFFFFFFFFFF0000000300000000BFFFBD7FFFFF03FFFFFFFFFF03FF07FF
  FFF99FEFFBEDFDFFE081399F001F1FCFFFFF4BFFFFBFFFFF01BFF7A500000006FFFFFFFFFFFFFFFFEFFFFFFF00000003
*************** FFFFFFFFFFFFFFFF03FF00FF0000000000000000
*** 3466,3474 ****
  FFFFFFFFFFFFFFFF03FF001F00001FFFFFFFFFFF03FFFFFFFFFF03FF0000000FE7FFFFFFFFFF0FFF0000007F00000000
  00000000000000000000000000000000FFFFFFFF0FFFFFFF000000000000000000000000FFFFFFFFFFFFFFFF8007FFFF
  FF6FF27FF9BFFFFF03FF007F0000000000000000FFFFFCFFFCFFFFFF0000001FFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF
! FFFFFFFFFFFF0007FFFFFFFF01FFFFFF000003FF0000000000000000000000000000000000000000FFFFFFFF03FF0003
  FFFFFDFFFF7FFFFFFFFF003FFFFF1FFFFFFCFFFF007FFEFF0000000000000000FFFFFB7FB47FFFFF03FF00FFFFFFFDBF
! 01FB7FFF000003FF00000000000000000000000000000000000000000000000000000000000000000000000001FFFFFF
  FFFDFFFFC7FFFFFF07FFFFFF000000000000000000010000FFFFFFFF8003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  03FFFFFF000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF001F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFF0000000F000000000000000000000000000000000000000000000000000000000000000000000000
--- 3517,3525 ----
  FFFFFFFFFFFFFFFF03FF001F00001FFFFFFFFFFF03FFFFFFFFFF03FF0000000FE7FFFFFFFFFF0FFF0000007F00000000
  00000000000000000000000000000000FFFFFFFF0FFFFFFF000000000000000000000000FFFFFFFFFFFFFFFF8007FFFF
  FF6FF27FF9BFFFFF03FF007F0000000000000000FFFFFCFFFCFFFFFF0000001FFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF
! FFFFFFFFFFFF0007FFFFFFFF01FFFFFF000003FF0000000000000000000000FF0000000000000000FFFFFFFF03FF0003
  FFFFFDFFFF7FFFFFFFFF003FFFFF1FFFFFFCFFFF007FFEFF0000000000000000FFFFFB7FB47FFFFF03FF00FFFFFFFDBF
! 01FB7FFFFFFF03FF0FFFFFFF000003FF0000000000000000000000000000000000000000000000000000000001FFFFFF
  FFFDFFFFC7FFFFFF07FFFFFF000000000000000000010000FFFFFFFF8003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  03FFFFFF000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF001F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFF0000000F000000000000000000000000000000000000000000000000000000000000000000000000
*************** FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
*** 3477,3523 ****
  00000000000000000000000000000000FFFFFFFF03FFFFFF000000000000000000000000000000000000000000000000
  FFFFFFFF01FFFFFF7FFFFFFFFFFFC3FFFFFFFFFF7FFFFFFFFFFF03FF003F3FFFFFFFFFFFFFFFFFFFFBFF003FE0FFFFFB
  0000FFFF0000000000000000000000000000000000000000FFFFFFFF03FFFFFF00000000000000000000000000000000
! 0000000000000000FFFFFFFFFFFFFFFF07FFFFFF000000000000000000000000FFFFFFFFFFFFFFFFFFFF87FFFFFFFFFF
! FFFF80FF00000000000000000003001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF003FFFFF80000000000001FF000000000000000000000000
! 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006FEF0000
! FFFFFFFF0004000700270000FFFF00F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1FFF07FFF3FF01FF000000000000000000000000
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFF000FFFFF0000000000000000FFFFFFFFFFFF3FFFFFFF007FFFFFFFFFFFFFFFFFFFFFFFFF0000000F00000000
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF003FFFFFFFFFFFFFFFFFFE7FFFFFFFFFF807FFFF
! FFFFFFFFFFFFFFFFFFFFFFFF000007FFFFFFFFFFFFFFFFFF0000003F000000000000000000000000000FFFFF000FFFFF
! FFFFFFFFFFFFFFFF007FFFFF01FFFFFF00000000000000000000000000000000FFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFF
! DFFFFFFFEBFFDE64FFFFFFEFFFFFFFFFDFDFE7BF7BFFFFFFFFFDFC5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8000FFF0000FFFE0000000000000000
! 7FFFFFFF000007E0000000000000000000000000000000000000000000000000F9FFFF7FFFFF07DBFFFFFFFF00003FFF
! 00008000000000000000000000000000FFFFFFFF3FFF1FFF0000C3FF0000000000000000000000000000000000000000
! 00000000000000000000000000000000FFFF000000007FFFFFFFFFFF83FFFFFF00000000000000000000000000000000
! 0000000000000000FFFF000003FFFFFF000000000000000000000000000000000000000000000000FFFF000087FFFFFF
  000000000000000000000000000000000000000000000000000000007FFF6F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFF007FFF9F00000000FFFFFFFFFFFFFFFFC3FF0FFF0000000000000000000000000000000000000000
  000000000000000000000000FFFE0000FFFFFFFF001FFFFF0000000000000000FFFFFFFE3FFFFFFF0000000000000000
  00000000000000000000000000000000FFFFFFEF0AF7FE96AA96EA845EF7F7960FFFFBFF0FFFFBEE0000000000030000
  FFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFF000FFFFFFFFE7FFFFFFEFFFE003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFF00003FFF00000000FFFFFFC0FFFF00070FFFFFFF000301FF0000003F00000000000000000000000000000000
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFF1FFF1FFFFFFFFFFFFFFFFFFFFFFFFFFFF87FFFFF
! FFFFFFFFFFFFFFFF03FFFFFF00010FFFFFFF0FFFFFFFFFFF03FF00FFFFFFFFFFFFFF00FF0FFF3FFF0000000300000000
! FFFFFFFFFFFFFFFF000FFFFF1FFF3FFFFFFF83FFFFFFFFFF9FFFC07F01FF03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFF7FFFFFFFFFFFFFFFFFFFF03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000
! FFFFFFFF03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0003FFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0001FFFFFFFFFFFFFFFF3FFFFFFF00000000
! 000000000000000000000000000000003FFFFFFF00000000000000000000000000000000000000000000000000000000
! FFFFFFFFFFFFFFFFFFFF07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFF0000FFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF
! 0000000000000000000000000000000000000000000000000000000000000000",
  );
! //4944 bytes
  enum nonCharacterTrieEntries = TrieEntry!(bool, 7, 4, 4, 6)(x"
! 000000000000002000000098000002A8",
  x"
! 00000080000000F00000042000004580",
  x"
  0302010007060504090801010B0B0B0A0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B
  0B0B0B0B0B0B0B0B0B0B0B0C0D0101010D01010100000000000000000000000000000000000000000000000000000000
--- 3528,3573 ----
  00000000000000000000000000000000FFFFFFFF03FFFFFF000000000000000000000000000000000000000000000000
  FFFFFFFF01FFFFFF7FFFFFFFFFFFC3FFFFFFFFFF7FFFFFFFFFFF03FF003F3FFFFFFFFFFFFFFFFFFFFBFF003FE0FFFFFB
  0000FFFF0000000000000000000000000000000000000000FFFFFFFF03FFFFFF00000000000000000000000000000000
! 0000000000000000FFFFFFFFFFFFFFFF07FFFFFFF9FFFFFF000FFFFF00000000FFFFFFFFFFFFFFFFFFFF87FFFFFFFFFF
! FFFF80FF0000000000000000007F001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF003FFFFF80000000
! 7FFFFFFF000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF0007FFFF00000000000000000000000000000000
! 0000000000000000000000006FEF0000FFFFFFFF0004000700270000FFFF00F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1FFF07FF
! F3FF01FF000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1FFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0FFFFF0001FFFF0001FFFFFFFFFFFFFFFF3FFFFFFF007FFFFFFFFF
! FFFFFFFFFFFFFFFF0000000F00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF003FFFFF
! FFFFFFFFFFFFFE7FFFFFFFFFF807FFFFFFFFFFFFFFFFFFFFFFFFFFFF000007FFFFFFFFFFFFFFFFFF0000003F00000000
! 0000000000000000000FFFFF000FFFFFFFFFFFFFFFFFFFFF007FFFFF01FFFFFF00000000000000000000000000000000
! FFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFDFFFFFFFEBFFDE64FFFFFFEFFFFFFFFFDFDFE7BF7BFFFFFFFFFDFC5FFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3FFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! F8000FFF0000FFFE00000000000000007FFFFFFF000007E0000000000000000000000000000000000000000000000000
! F9FFFF7FFFFF07DBFFFFFFFF00003FFF00008000000000000000000000000000FFFFFFFF3FFF1FFF0000C3FF00000000
! 0000000000000000000000000000000000000000000000000000000000000000FFFF000000007FFFFFFFFFFF83FFFFFF
! 000000000000000000000000000000000000000000000000FFFF000003FFFFFF00000000000000000000000000000000
! 0000000000000000FFFF000087FFFFFF0000000000000000000000000000000000000000000000007FFFFFFFC03FFFFF
  000000000000000000000000000000000000000000000000000000007FFF6F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFF007FFF9F00000000FFFFFFFFFFFFFFFFC3FF0FFF0000000000000000000000000000000000000000
  000000000000000000000000FFFE0000FFFFFFFF001FFFFF0000000000000000FFFFFFFE3FFFFFFF0000000000000000
  00000000000000000000000000000000FFFFFFEF0AF7FE96AA96EA845EF7F7960FFFFBFF0FFFFBEE0000000000030000
  FFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFF000FFFFFFFFE7FFFFFFEFFFE003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFF00003FFF00000000FFFFFFC0FFFF00070FFFFFFF000301FF0000003F00000000000000000000000000000000
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1FFFFFF1FFF1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFF03FFFFFF00010FFFFFFF0FFFFFFFFFFF03FF00FFFFFFFFFFFFFF00FF0FFF3FFF01FF000300000000
! FFFFFFFFFFFFFFFF00FFFFFF1FFF3FFFFFFFC7FFFFFFFFFF9FFFE17F01FF87FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFF7FFFFFFFFFFFFFFFFFFFF07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000
! 3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0001
! FFFFFFFFFFFFFFFF3FFFFFFF00000000000000000000000000000000000000003FFFFFFF000000000000000000000000
! 00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFF07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFF03FFFFFF00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000000000000000000000000000000000000000000000000000000000000000",
  );
! //4936 bytes
  enum nonCharacterTrieEntries = TrieEntry!(bool, 7, 4, 4, 6)(x"
! 00000000000000200000009800000298",
  x"
! 00000080000000F00000040000004740",
  x"
  0302010007060504090801010B0B0B0A0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B
  0B0B0B0B0B0B0B0B0B0B0B0C0D0101010D01010100000000000000000000000000000000000000000000000000000000
*************** x"
*** 3525,3636 ****
  00090008000B000A000D000C000D000D000D000D000D000D000D000D000D000D000D000D000D000D000D000D000D000D
  000D000D000D000D000D000D000D000D000E000D000D000F000D000D000D000D000D000D000D000D0010000D000D000D
  000D000D000D000D000D000D00120011001400130016001500180017001A0019001C001B001E001D001F000D000D000D
! 00210020001D001D001D001D001D001D001D002200240023000D000D000D000D0025000D0026000D001D001D001D001D
! 001D001D0027001D001D00280029001D001D001D002A001D002C002B002E002D0030002F0032003100340033001D0035
! 000D000D000D000D000D000D000D000D0036000D000D000D0037000D000D0038000D000D0039000D000D000D000D000D
! 000D000D003B003A001D001D001D003C000D000D000D000D000D003D000D000D001D003E001D001D001D001D001D001D
! 001D001D001D001D001D001D001D001D001D001D001D001D001D001D001D001D001D003F001D001D001D001D001D001D
! 001D001D001D001D001D001D001D001D000D000D000D000D000D000D000D000D000D000D000D000D000D000D0040000D
! 000D000D000D000D000D000D000D000D000D000D000D000D000D000D0040000D00000000000000000000000000000000
  0000000000000000000100000000000200000000000000000004000300060005000000000000000000080007000A0009
  000C000B0000000D00000000000F000E0011001000130012001500140017001600190018001B001A001D001C001F001E
  002100200023002200240000002600250000000000270000000000000000000000280000002A0029002C002B002E002D
  00000000000000000000000000000000000000000030002F00320031003300000030002D003500340037003600390038
  003B003A003D003C003E0000003F00000041004000430042000000000000000000000000000000000045004400470046
  00480000004A0049000000000000004B00000000000000000000000000000000004D004C000000000000000000000000
! 00000000000000000000000000000000000000000000000000000000000000000000000000000000004E00000000004F
! 000000000050000000520051005400530055000000570056000000000058000000590000000000040000005A005C005B
! 0000005D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 00000000005F005E00000000000000000000006000610000000000000062000000610063006400000065000000660000
! 00680067006900000038006A006B000000000000000000000000000000000000000000000000000000000000006D006C
! 00000000000000000000000000000000006E0000006F0000007100700072000000000000000000000000000000740073
! 0075002D007600000000005900780077007A0079007B00000000007C007E007D007F007F0080002F0082008100840083
! 000000000086008500880087005700890000000000000000008A0067007F008B004F008C008E008D007F008F00730090
! 009200910094009300960095007F009700980000009A0099009C009B007F009D009E007F00A0009F00A1008700A300A2
! 00A4000000A5000000A6004600A7000000A900A800AB00AA00AD00AC00AF00AE00B0000000B10000007F007F005500B2
! 00B3000000B500B400B700B6007F007F007F00B800BA00B900BC00BB00BE00BD00BF0000003000C0007F00C100C2007F
! 00C400C3007F00C500C700C6007F00C8007F007F00C9007F00CB00CA00CD00CC00000000000000000000000000000000
! 000000000000000000000000007F006F00CE00000000000000CF0000007F007F007F007F007F007F007F007F007F007F
! 007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F
! 007F007F007F007F007F007F009900D000D1000000000000000000000000000000000000000000000000000000000000
! 00000000000000000000000000000000000000000000000000000000007B000000000000000000000000000000000000
! 00B70000007F007F007F007F007F007F007F007F007F007F007F00B4007F007F007F007F007F007F007F007F007F007F
! 0000000000000000000000000000000000D2003000D3007700D40000007F00D5007F007F007F007F00B4007F007F007F
! 0000007F007F00CB00D6000000D800D70000000000000000000000000000000000000000000000000000000000610000
! 0000000000D90000007F0098007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F
! 007F007F007F007F007F007F00DA007F000000000000000000DC00DB000000000000000000B80000007F007F007F007F
! 00DD0000007F00DE007F007F007F007F007F007F007F007F007F007F007F007F0000000000B400000000000000000000
! 00000000007F0057005F006E00CF00000000000000350000000000DF00E0000000E1000000E2007F00E30000007F007F
! 00E4000000E600E500E800E70000000000000000000000E90000000000EA000000000000000000000000000000000000
! 00000000007F00EB007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F00EC007F007F
! 00EE00ED007F00EF00F100F0007F007F007F007F00F300F2007F007F007F007F007F007F00F4007F007F007F00F5007F
! 007F007F007F007F007F007F00F6007F0000000000F7000000F80000007F007F007F007F007F007F007F007F007F007F
! 00F9007F007F00FA007F00FB007F007F00FD00FC00FF00FE007F007F007F007F000000380101010000000000010200EE
! 01040103007F007F00000000000000000000000000000000000000000000000000000000010500000106000001070000
! 0108004B00A901090000000000000000010A0000010C010B0000000000B4010D00000000000000000000000000000000
! 00000000009300000000000000000000000000000000000000000000000000000000000000000000000000B400000000
! 0000010E0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000010F00000000000000000000000000000000000000000000000000000000000000000000000001100000
! 0000000000000000000000000000000000550000007F007F007F007F007F007F00000000000000000000000000000000
! 007F0055007F007F007F007F007F007F0000000000000000000000000000000000000000000000000111000000000000
! 00000000000000000000000000000000000000000000000000000000007F011200000113007F007F0000000001120000
! 007F007F007F007F007F007F007F007F0000000000000000000000000000000000000000000000000000000001140000
! 000000000000000000000000000000000000000000000000000000000114000000000000000000000000000003000000
! 0000280F000000040000000000010000018000000000000000011800000000000000FF00FFE078000000400000000000
! 000018000000000000000000FFFC00000000000018000000000000008000C000B00000000000F800007C800000000000
! 000660100C3A02004F7F866080000030000678112C920200A1FDC678FF80003F000440110C120200FFFEC44001FC0030
! 000660110C1202004F1FC660FF00003029C238133C0038E7FF7EC238F800003F000220000C000200D89FC220007F0030
! 000220000C1002009F9FC220FFF100300002200000000000000F02200000003003800011D004000000A07B80FFE3003F
! 0000000178000000F0000000FFFFFFFF00000829C00000500C0080A0FFFFFFFF000001000001E0000100000020000000
! F8002000FFFFFFFF0000DF4000000000C280C200000000000000C20080C20000008000C20000000000C2000000000000
! 18000000E0000000FC0000000000000000000000C0C00000E00000000000000000000000FE0000007FC00000FF800000
! FFF00000FFF22000C0000000FC00FC00000000000000F80000000000FFC0000080000000F000F0000000000EFFE0C000
! 000000000000F0003800FC000000000030000000000000008000000060000000FC00FC000000C000FFFF8000FFFFFFFF
! 0000200000000000000000000FF00000000000000700000000001C00000000000000F800180000000000FF00F8000000
! C0C00000000000005500C0C0C00000000000000000200000103000208023000000000000000C0020E000800000000000
! 0000FFFEFFFE00000000F0000000000000000000FFFFFC00FFFFF8000000000000000000003000000040000000000000
! 0000000001F00000000000000000DF40000000007FFE7F00FF800000808080808080808000000000C0000000FFFFFFFF
! 040000000000000000000000FFF00000FFC000000000FFFF00000001000000000000001F000100000000800000000000
! 0000000000007FC080000000000000000000E000000000000000FF800000000000000000FFFFF00000000000FF000000
! E014C0000003FFFF00000000FC00E000FC003FC0000000007FF00000E00000003C0040008000000000000000FF800000
! 0C00C0000000000007FFFFF8FF800000FF8181810000808000000000FC00C000000000000000FFF000000780F0000000
! 000000000000C000FC000000FFFFFFFF1F07FF80A080000000000024000000000007FFF8000000000003000000000000
! FFFF7F000000FFFF000800000020F08000000000600000000000000080000000E3030303C1FF80800000100048000080
! C000C000FFFFFFFF00000000F80000000000007800700000E0008000FFFFFFFE0000FFFFC0000000FFFFFFFFFFFFFFFF
! FFFE0000F00000000000000000001FF00000F800F80000004000000000000000FFC000F0FFFFFFFFC00000000000FC00
! 00F00000F0000000000000000000FF000000000008007FF000480800E4040004FFC00000FFFFFF0000000040F8020000
! 000002C06E40000080000000FFFF007FFFFFFFFF07C80000700000007C000000000000000F00000001100F9078C00000
! FE00FE000000000000000000FFFFFFFF00000000FF8007800000000001C0000000C0000000F80000E1FC0000FFFF01FF
! FFFFFE00FFFFFFFF00000000FFF800000000000003F8000000000000FC00FF0000000000000001C0FFFF3FC0FFFFFFFF
! FFFFFFFF8000000000000000FFFCC400FFFFFFE30FFFFFFFFC0000000000FFFFFFFFFC000000FFFFFFFFF000FF800000
! 0003C0007FC000000000DFF8FC00FE000000FF00FF80000000000000FFE000010004000000000000FFFFFFFCFFFFFFFF
! 400042800000FC0000000000FC00F80000066010041202001F7EC660FFE0E0300000B40000400000FE40085AFFFFFFF9
! 10000000FFFFFFFCFC00FF00FFFFFFFF0000000000C00000FC00FFE0FFFFE00000000000FC0000000000FC00FFFFFFF0
! 180000000000F000FFFFFF80FFFFFFFF00000000F0000000FFFFFFFF00000000000000007FF8000000900D8006400000
! FC00FF80FFFFFFFFFFFFFFFF0000030003000000FFFFFFE00000FF0000000000000000000000FFF8FFFFFC00FFFFFFFF
! 00000000FC00FFFC00000200008000000000FFC00000E00000030000FF800100000004804B800000FC00FF0000000240
! FE048000FFFFFC00FFFFFFFFFE0000000002000038000000F8000000FFFFFFFFFFFFFFFFFFFEFFFF000000007FFC0000
! 00000000FFE08000FFFFFFF0FFFFFFFF0000FFFF00000000FFC00000000000008000000000003C000000FC00FFC0C000
! 0400FFC01F000004FFFF0000FFFFFFFF000078000000000000007F00FFFFFFFFFFFFFFFFFFFCFFE0FFC000007FFFFFFF
! FFFFFFFF9010FFFF00000000FFFBFFF8FFD8FFFF0000FF0F00000000E000F8000C00FE00FFFFFFF00000000000000180
! 00000000FFFFF800FFFFFFC0FFFFFFFFFFF00000FFF00000FF800000FE0000000020000000000000200000001400219B
! 00000010000000002020184084000000000203A00000000000000000000000C0000030000000000007FFF000FFFF0001
! 80000000FFFFF81F060000800000F82400000000FFFFC000FFFF7FFFFFFFFFFF00000000C000E000FFFF3C00FFFFFFFF
! 0000FFFFFFFF8000000000007C0000000000FFFFFC0000000000FFFF78000000FFFFFFFF80009080FF800060FFFFFFFF
  3C00F000FFFFFFFFFFFFFFFF0001FFFF00000000FFE0000000000001C000000000000010F50801695569157BA1080869
  F0000400F0000411FFFFFFFFFFFCFFFFFFF000000001800000010001FFC00000FFFFFFFF0000003F0000FFF8F0000000
! FFFCFE00FFFFFFC00F000000E000E0000000000007800000FC000000FFFEF000FC00FF00000000000000FF00F000C000
! FFF00000E000C00000007C000000000060003F80FE00FC000008000000000000C000000000000000000000000000FFFC
! 000000000000FFFE0000F8000000000000000000FFFF0000FFFFFFFD0000000000000000C000000000000000C0000000",
  );
! enum MAX_SIMPLE_LOWER = 1460;
! enum MAX_SIMPLE_UPPER = 1477;
! enum MAX_SIMPLE_TITLE = 1481;
! //10752 bytes
  enum toUpperIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x"
  000000000000004000000280",
  x"
! 000001000000048000001000",
  x"
  020201000402030206020205070202020202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
--- 3575,3686 ----
  00090008000B000A000D000C000D000D000D000D000D000D000D000D000D000D000D000D000D000D000D000D000D000D
  000D000D000D000D000D000D000D000D000E000D000D000F000D000D000D000D000D000D000D000D0010000D000D000D
  000D000D000D000D000D000D00120011001400130016001500180017001A0019001C001B001E001D001F000D000D000D
! 00210020001D001D001D001D001D001D001D002200240023000D000D000D000D000D000D0025000D001D001D001D001D
! 001D001D0026001D001D00270028001D001D001D0029001D002B002A002D002C002F002E0031003000330032001D0034
! 000D000D000D000D000D000D000D000D0035000D000D000D000D000D000D0036000D000D0037000D000D000D000D000D
! 000D000D00390038001D001D001D003A000D000D000D000D000D003B000D000D000D000D000D000D003C000D001D001D
! 001D001D001D001D001D001D001D001D001D001D001D001D001D001D001D001D001D003D001D001D001D001D001D001D
! 001D001D001D001D001D001D001D001D000D000D000D000D000D000D000D000D000D000D000D000D000D000D003E000D
! 000D000D000D000D000D000D000D000D000D000D000D000D000D000D003E000D00000000000000000000000000000000
  0000000000000000000100000000000200000000000000000004000300060005000000000000000000080007000A0009
  000C000B0000000D00000000000F000E0011001000130012001500140017001600190018001B001A001D001C001F001E
  002100200023002200240000002600250000000000270000000000000000000000280000002A0029002C002B002E002D
  00000000000000000000000000000000000000000030002F00320031003300000030002D003500340037003600390038
  003B003A003D003C003E0000003F00000041004000430042000000000000000000000000000000000045004400470046
  00480000004A0049000000000000004B00000000000000000000000000000000004D004C000000000000000000000000
! 00000000000000000000000000000000000000000000000000000000000000000000000000000000004E000000000000
! 00000000004F0000005100500053005200540000005600550000000000570000005800000000000400000059005B005A
! 0000005C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 00000000005E005D00000000000000000000005F00600000000000000061000000600062006300000064000000650000
! 006700660068000000380069006A000000000000000000000000000000000000000000000000000000000000006C006B
! 00000000000000000000000000000000006D0000006E00000070006F0000000000000000000000000000000000710000
! 0072002D007300000000005800750074007700760078000000000079007B007A007C007C007D002F007F007E00810080
! 00000000008300820085008400560086000000000000000000870066007C0088008A0089008C008B006E008D008F008E
! 009100900093009200950094007C00960097000000990098009B009A007C009C009D007C009F009E00A0008400A200A1
! 00A3000000A4000000A5004600A6000000A800A700AA00A900AC00AB00AE00AD00AF000000B00000007C007C005400B1
! 00B2000000B400B300B600B5007C007C007C00B700B900B800BB00BA00BD00BC00BE0000003000BF00C100C000C2007C
! 00C400C3007C00C500C700C600C900C8007C007C00CA007C00CC00CB00CE00CD00000000000000000000000000000000
! 000000000000000000000000007C006E00CF00000000000000D00000007C007C007C007C007C007C007C007C007C007C
! 007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C
! 007C007C007C007C007C007C009800D100D2000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000000000000000000000000000000078000000000000000000000000000000000000
! 00B60000007C007C007C007C007C007C007C007C007C007C007C00B3007C007C007C007C007C007C007C007C007C007C
! 0000000000000000000000000000000000D3003000D4007400D50000007C00D6007C007C007C007C00B3007C007C007C
! 0000007C00D800D700D9000000DB00DA0000000000DC0000007C00DD00980000007C007C007C007C007C007C007C007C
! 007C007C007C007C007C007C007C007C007C007C007C007C007C007C00DE007C000000000000000000E000DF00000000
! 0000000000B70000007C007C007C007C00E10000007C00E2007C007C007C007C007C007C007C007C007C007C007C007C
! 0000000000E3000000000000000000000000000000E500E4005E006D00D000000000000000350000000000E600E70000
! 00E8000000E9007C00EA0000007C007C00EB000000ED00EC00EF00EE0000000000000000000000F00000000000F10000
! 0000000000000000000000000000000000000000007C00F2007C007C007C007C007C007C007C007C007C007C007C007C
! 007C007C007C007C007C00F3007C007C00F500F4007C00F600F800F7007C007C007C007C00FA00F9007C007C007C007C
! 007C007C00FB007C007C007C00FC007C007C007C00FD007C007C007C00FE007C0000000000FF000001000000007C007C
! 007C007C007C007C007C007C007C007C0101007C007C0102007C0103007C007C0105010401070106007C007C007C007C
! 000000380109010800000000010A00F5010C010B007C007C000000000000000000000000000000000000000000000000
! 00000000010D000000000000010E0000010F004B01110110000000000000000001120000011401130000000000780115
! 000000000000000000000000000000000000000000920000000000000000000000000116000000000000000000000000
! 0000000000000000000000000000000000000000000000000000000000000000000000000000006D0000000000000000
! 000000000000000000000000000000000000000000000000000000000117000000000000000000000000000000000000
! 00540000007C007C007C007C007C007C00000000000000000000000000000000007C0054007C007C007C007C007C007C
! 000000000000000000000000000000000000000000000000011800000000000000B30000007C007C007C007C007C007C
! 007C007C007C007C007C007C007C007C00000119007C007C00000000011A0000007C007C007C007C007C007C007C007C
! 00000000000000000000000000000000000000000000000000000000011B000000000000000000000000000000000000
! 000000000000000000000000011B0000000000000000000000000000030000000000280F000000040000000000010000
! 018000000000000000011800000000000000FF00FFE078000000400000000000000018000000000000000000FFFC0000
! 0000000018000000000000008000C000B00000000000F800007C000000000000000660100C3A02004F7F866080000030
! 000678112C920200A1FDC678FF80003F000440110C120200FFFEC44001FC0030000660110C1202004F1FC660FF000030
! 29C238133C0038E7FF7EC238F800003F000220000C000200C89FC220007F0030000220000C1002008F9FC220FFF10030
! 0002200000000000000F02200000003003800011D004000000A07B80FFE3003F0000000178000000F0000000FFFFFFFF
! 00000829C00000500C0080A0FFFFFFFF000001000001E0000100000020000000F8002000FFFFFFFF0000DF4000000000
! C280C200000000000000C20080C20000008000C20000000000C200000000000018000000E0000000FC00000000000000
! 00000000C0C00000E00000000000000000000000FE0000007FC00000FF800000FFF00000FFF22000C0000000FC00FC00
! 000000000000F80000000000FFC0000080000000F000F0000000000EFFE0C000000000000000F0003800FC0000000000
! 30000000000000008000000060000000FC00FC000000C000C0000000FFFFF0000000200000000000000000000FF00000
! 000000000700000000001C00000000000000F800180000000000FF00F8000000C0C00000000000005500C0C0C0000000
! 0000000000200000103000208023000000000000000C0020E0008000000000000000FFFCFFFE00000000F00000000000
! 00000000FFFFFC00FFFFF8000000000000000000003000000000000001F00000000000000000DF40000000007FFE7F00
! FF800000808080808080808000000000C0000000FFFFFFFF040000000000000000000000FFF00000FFC000000000FFFF
! 00000001000000000000001F0001000000008000000000000000000000007FC080000000000000000000E00000000000
! 0000FF800000000000000000FFFFF00000000000FF000000E00000000001FFFF00000000FC00E000FC003FC000000000
! 7FF00000E00000003C0040008000000000000000FF8000000C00C0000000000007FFFFF8FF800000FF81818100008080
! 00000000FC00C000000000000000FFF000000780F0000000000000000000C000FC000000FFFFFFFF1F07FF80A0800000
! 0000002400000000FFFF00000000FFFF000800000020F08000000000600000000000000080000000E3030303C1FF8080
! 0000100048000080C000C000FFFFFFFF00000000F80000000000007800700000E0008000FFFFFFFE0000FFFFC0000000
! FFFFFFFFFFFFFFFFFFFE0000F00000000000000000001FF00000F800F80000004000000000000000FFC000F0FFFFFFFF
! C00000000000FC0000F00000F0000000000000000000FF000000000008007FF000480800E4040004FFC00000FFFFFF00
! 00000040F8020000000002C06E400000004000000000000080000000FFFF007FFFFFFFFF07C80000700000007C000000
! 000000000F000000000300000000000001100F9078C00000FE00FE000000000000000000FFFFFFFF00000000FF800780
! 0000000001C0000000C0000000F80000E1FC0000FFFF01FFFFFFFE00FFFFFFFF00000000FFF800000000000003F80000
! 00000000FC00FF0000000000000001C0FFFF3FC0FFFFFFFFFFFFFFFF8000000000000000FFFCC400FE00FF0303FFFFFF
! FC0000000000FFFFFFFFFC000000FFFFFFFFF000FF8000000003C0007FC000000000DFF8FC00FE000000FF00FF800000
! 00000000FFE000010004000000000000FFFFFFFCFFFFFFFF400042800000FC0000000000FC00F8000006601004120200
! 1F7EC660FFE0E0300000B40000400000FE40085AFFFFFFF910000000FFFFFFFCFC00FF00FFFFFFFF0000000000C00000
! FC00FFE0FFFFE00000000000FC0000000000FC00FFFFFFF0180000000000F000FFFFFF80FFFFFFFF00000000F0000000
! FFFFFFFF00000000000000007FF8000000900D8006400000FC00FF80FFFFFFFFFFFFFFFF0000030003000000FFFFFFE0
! 0000FF0000000000000000000000FFF8FFFFFC00FFFFFFFFFFFFFFFFFFFFFF0000000000FC00FFFC0000020000800000
! 0000FFC00000E00000030000FF800100000004804B800000FC00FF0000000240FE0480000000FC00F0000000FFFFFC00
! FFFFFFFFFE0000000002000038000000F8000000FFFFFFFFFFFFFFFFFFFEFFFF000000007FFC000000000000FFE08000
! FFFFFFF0FFFFFFFF0000FFFF00000000FFC00000000000008000000000003C000000FC00FFC0C0000400FFC01F000004
! FFFF0000FFFFFFFFF800000006000000FFF00000FFFFFFFF000078000000000000007F00FFFFFFFFFFFFFFFFFF80FFE0
! FFC000007FFFFFFF80000000FFFFFFFFFFFFFFFF9010FFFF00000000FFFBFFF8FFD8FFFF0000FF0F00000000E000F800
! 0C00FE00FFFFFFF000000000E00000000000000003F00000FFFE0000FFFE0000000000000000018000000000FFFFF800
! FFFFFFC0FFFFFFFFFFF00000FFF00000FF800000FE0000000020000000000000200000001400219B0000001000000000
! 2020184084000000000203A00000000000000000000000C0000030000000000007FFF000FFFF000180000000FFFFF81F
! 060000800000F82400000000FFFFC000FFFF7FFFFFFFFFFF00000000C000E000FFFF3C00FFFFFFFF0000FFFFFFFF8000
! 000000007C0000000000FFFFFC0000000000FFFF78000000800000003FC00000FFFFFFFF80009080FF800060FFFFFFFF
  3C00F000FFFFFFFFFFFFFFFF0001FFFF00000000FFE0000000000001C000000000000010F50801695569157BA1080869
  F0000400F0000411FFFFFFFFFFFCFFFFFFF000000001800000010001FFC00000FFFFFFFF0000003F0000FFF8F0000000
! FFFCFE00FFFFFFC00E000000E000E000FC000000FFFEF000FC00FF00000000000000FF00F000C000FE00FFFCFFFFFFFF
! FF000000E000C000000038000000000060001E80FE0078000008000000000000C000000000000000000000000000FFFE
! 0000F80000000000FFFFFFFD0000000000000000FFFF000000000000C000000000000000C0000000",
  );
! enum MAX_SIMPLE_LOWER = 1488;
! enum MAX_SIMPLE_UPPER = 1505;
! enum MAX_SIMPLE_TITLE = 1509;
! //11008 bytes
  enum toUpperIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x"
  000000000000004000000280",
  x"
! 000001000000048000001080",
  x"
  020201000402030206020205070202020202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
*************** x"
*** 3671,3682 ****
  00000000003B000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 0000000000000000000000000000000000000000000000000000000000000000003C0000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 0000000000000000003E003D000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- 3721,3732 ----
  00000000003B000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 0000000000000000000000000000000000000000000000000000000000000000003C0000003E003D0000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 00000000000000000040003F000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
*************** FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF
*** 3694,3712 ****
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF001AFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05C5FFFF001C001B001E001D0020001F00220021
  002400230026002500280027002A0029002C002B002E002D0030002FFFFF003100330032003500340037003600390038
  003AFFFF003BFFFF003CFFFF003DFFFF003EFFFF003FFFFF0040FFFF0041FFFF0042FFFF0043FFFF0044FFFF0045FFFF
  0046FFFF0047FFFF0048FFFF0049FFFF004AFFFF004BFFFF004CFFFF004DFFFF004EFFFF004FFFFF0050FFFF0051FFFF
! 005205C70053FFFF0054FFFF0055FFFFFFFFFFFFFFFF0056FFFF0057FFFF0058FFFF0059FFFF005AFFFF005BFFFF005C
! 05E4005D005EFFFF005FFFFF0060FFFF0061FFFF0062FFFF0063FFFF0064FFFF0065FFFF0066FFFF0067FFFF0068FFFF
  0069FFFF006AFFFF006BFFFF006CFFFF006DFFFF006EFFFF006FFFFF0070FFFF0071FFFF0072FFFF0073FFFF0074FFFF
  FFFFFFFFFFFF0075FFFF007600780077FFFF0079007AFFFF007BFFFFFFFFFFFFFFFF007CFFFFFFFFFFFF007DFFFFFFFF
  FFFFFFFFFFFF007E007FFFFFFFFFFFFF0080FFFF00820081FFFFFFFFFFFF00830084FFFF0085FFFF0086FFFFFFFFFFFF
  FFFF0087FFFFFFFF0088FFFFFFFFFFFFFFFF0089FFFFFFFFFFFF008AFFFF008B008CFFFFFFFFFFFF008DFFFF008EFFFF
  FFFFFFFFFFFFFFFF008FFFFFFFFF0090009200910093FFFFFFFF0094FFFF0095FFFF0096FFFF0097FFFF0098FFFF0099
  FFFF009AFFFF009B009D009C009EFFFF009FFFFF00A0FFFF00A1FFFF00A2FFFF00A3FFFF00A4FFFF00A5FFFF00A6FFFF
! FFFF05EC00A800A700A9FFFFFFFFFFFF00AAFFFF00ABFFFF00ACFFFF00ADFFFF00AEFFFF00AFFFFF00B0FFFF00B1FFFF
  00B2FFFF00B3FFFF00B4FFFF00B5FFFF00B6FFFF00B7FFFF00B8FFFF00B9FFFF00BAFFFF00BBFFFF00BCFFFF00BDFFFF
  FFFFFFFF00BEFFFF00BFFFFF00C0FFFF00C1FFFF00C2FFFF00C3FFFF00C4FFFF00C5FFFF00C6FFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFF00C700C8FFFFFFFF00C9FFFF00CAFFFFFFFF00CBFFFF00CCFFFF00CDFFFF00CEFFFF00CFFFFF
--- 3744,3762 ----
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF001AFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05E1FFFF001C001B001E001D0020001F00220021
  002400230026002500280027002A0029002C002B002E002D0030002FFFFF003100330032003500340037003600390038
  003AFFFF003BFFFF003CFFFF003DFFFF003EFFFF003FFFFF0040FFFF0041FFFF0042FFFF0043FFFF0044FFFF0045FFFF
  0046FFFF0047FFFF0048FFFF0049FFFF004AFFFF004BFFFF004CFFFF004DFFFF004EFFFF004FFFFF0050FFFF0051FFFF
! 005205E30053FFFF0054FFFF0055FFFFFFFFFFFFFFFF0056FFFF0057FFFF0058FFFF0059FFFF005AFFFF005BFFFF005C
! 0600005D005EFFFF005FFFFF0060FFFF0061FFFF0062FFFF0063FFFF0064FFFF0065FFFF0066FFFF0067FFFF0068FFFF
  0069FFFF006AFFFF006BFFFF006CFFFF006DFFFF006EFFFF006FFFFF0070FFFF0071FFFF0072FFFF0073FFFF0074FFFF
  FFFFFFFFFFFF0075FFFF007600780077FFFF0079007AFFFF007BFFFFFFFFFFFFFFFF007CFFFFFFFFFFFF007DFFFFFFFF
  FFFFFFFFFFFF007E007FFFFFFFFFFFFF0080FFFF00820081FFFFFFFFFFFF00830084FFFF0085FFFF0086FFFFFFFFFFFF
  FFFF0087FFFFFFFF0088FFFFFFFFFFFFFFFF0089FFFFFFFFFFFF008AFFFF008B008CFFFFFFFFFFFF008DFFFF008EFFFF
  FFFFFFFFFFFFFFFF008FFFFFFFFF0090009200910093FFFFFFFF0094FFFF0095FFFF0096FFFF0097FFFF0098FFFF0099
  FFFF009AFFFF009B009D009C009EFFFF009FFFFF00A0FFFF00A1FFFF00A2FFFF00A3FFFF00A4FFFF00A5FFFF00A6FFFF
! FFFF060800A800A700A9FFFFFFFFFFFF00AAFFFF00ABFFFF00ACFFFF00ADFFFF00AEFFFF00AFFFFF00B0FFFF00B1FFFF
  00B2FFFF00B3FFFF00B4FFFF00B5FFFF00B6FFFF00B7FFFF00B8FFFF00B9FFFF00BAFFFF00BBFFFF00BCFFFF00BDFFFF
  FFFFFFFF00BEFFFF00BFFFFF00C0FFFF00C1FFFF00C2FFFF00C3FFFF00C4FFFF00C5FFFF00C6FFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFF00C700C8FFFFFFFF00C9FFFF00CAFFFFFFFF00CBFFFF00CCFFFF00CDFFFF00CEFFFF00CFFFFF
*************** FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
*** 3718,3725 ****
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00F7FFFF00F8FFFFFFFFFFFF00F9FFFF
  FFFFFFFF00FAFFFF00FC00FBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFF05E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFF00FE00FD010000FF010105E901030102010501040107010601090108010B010A010D010C010F010E
  0111011001130112011501140117011601190118011B011A011D011CFFFF011E0120011FFFFFFFFF0121FFFF01230122
  0124FFFF0125FFFF0126FFFF0127FFFF0128FFFF0129FFFF012AFFFF012BFFFF012CFFFF012DFFFF012EFFFF012FFFFF
  01310130013301320134FFFFFFFFFFFFFFFF01350136FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
--- 3768,3775 ----
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00F7FFFF00F8FFFFFFFFFFFF00F9FFFF
  FFFFFFFF00FAFFFF00FC00FBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFF0602FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFF00FE00FD010000FF0101060501030102010501040107010601090108010B010A010D010C010F010E
  0111011001130112011501140117011601190118011B011A011D011CFFFF011E0120011FFFFFFFFF0121FFFF01230122
  0124FFFF0125FFFF0126FFFF0127FFFF0128FFFF0129FFFF012AFFFF012BFFFF012CFFFF012DFFFF012EFFFF012FFFFF
  01310130013301320134FFFFFFFFFFFFFFFF01350136FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
*************** FFFF0196FFFF0197FFFF0198019A0199019BFFFF
*** 3738,3744 ****
  01C7FFFF01C8FFFF01C9FFFF01CAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01CBFFFF01CD01CC01CF01CE01D101D001D301D201D501D401D701D601D901D8
! 01DB01DA01DD01DC01DF01DE01E101E001E301E201E501E401E701E601E901E801EB01EA01ED01EC01EF01EE05D801F0
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
--- 3788,3794 ----
  01C7FFFF01C8FFFF01C9FFFF01CAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01CBFFFF01CD01CC01CF01CE01D101D001D301D201D501D401D701D601D901D8
! 01DB01DA01DD01DC01DF01DE01E101E001E301E201E501E401E701E601E901E801EB01EA01ED01EC01EF01EE05F401F0
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
*************** FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
*** 3760,3781 ****
  024EFFFF024FFFFF0250FFFF0251FFFF0252FFFF0253FFFF0254FFFF0255FFFF0256FFFF0257FFFF0258FFFF0259FFFF
  025AFFFF025BFFFF025CFFFF025DFFFF025EFFFF025FFFFF0260FFFF0261FFFF0262FFFF0263FFFF0264FFFF0265FFFF
  0266FFFF0267FFFF0268FFFF0269FFFF026AFFFF026BFFFF026CFFFF026DFFFF026EFFFF026FFFFF0270FFFF0271FFFF
! 0272FFFF0273FFFF0274FFFF0275FFFF0276FFFF0277FFFF0278FFFF0279FFFF027AFFFF027BFFFF027CFFFF05F005EE
! 05F405F2027D05F6FFFFFFFFFFFFFFFF027EFFFF027FFFFF0280FFFF0281FFFF0282FFFF0283FFFF0284FFFF0285FFFF
  0286FFFF0287FFFF0288FFFF0289FFFF028AFFFF028BFFFF028CFFFF028DFFFF028EFFFF028FFFFF0290FFFF0291FFFF
  0292FFFF0293FFFF0294FFFF0295FFFF0296FFFF0297FFFF0298FFFF0299FFFF029AFFFF029BFFFF029CFFFF029DFFFF
  029EFFFF029FFFFF02A0FFFF02A1FFFF02A2FFFF02A3FFFF02A4FFFF02A5FFFF02A6FFFF02A7FFFF02A8FFFF02A9FFFF
  02AAFFFF02ABFFFF02ACFFFF02ADFFFF02AF02AE02B102B002B302B202B502B4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  02B702B602B902B802BB02BAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02BD02BC02BF02BE02C102C002C302C2
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02C502C402C702C602C902C802CB02CAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 02CD02CC02CF02CE02D102D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02D205F802D305FA02D405FD02D50600
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02D702D602D902D802DB02DA02DD02DCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 02DF02DE02E102E002E302E202E502E402E702E602E902E802EB02EAFFFFFFFF0623062106270625062B0629062F062D
! 0633063106370635063B0639063F063D0643064106470645064B0649064F064D0653065106570655065B0659065F065D
! 0663066106670665066B0669066F066D0673067106770675067B0679067F067D030503040681068DFFFF068F06990603
! FFFFFFFFFFFFFFFFFFFF0683FFFF0307FFFFFFFF06850691FFFF0693069C0605FFFFFFFFFFFFFFFFFFFF0687FFFFFFFF
! 030A0309060A0607FFFFFFFF060F060DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF030C030B06150612030D0618061C061A
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06890695FFFF0697069F061FFFFFFFFFFFFFFFFFFFFF068BFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF030FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  0311031003130312031503140317031603190318031B031A031D031C031F031EFFFFFFFFFFFFFFFFFFFF0320FFFFFFFF
--- 3810,3831 ----
  024EFFFF024FFFFF0250FFFF0251FFFF0252FFFF0253FFFF0254FFFF0255FFFF0256FFFF0257FFFF0258FFFF0259FFFF
  025AFFFF025BFFFF025CFFFF025DFFFF025EFFFF025FFFFF0260FFFF0261FFFF0262FFFF0263FFFF0264FFFF0265FFFF
  0266FFFF0267FFFF0268FFFF0269FFFF026AFFFF026BFFFF026CFFFF026DFFFF026EFFFF026FFFFF0270FFFF0271FFFF
! 0272FFFF0273FFFF0274FFFF0275FFFF0276FFFF0277FFFF0278FFFF0279FFFF027AFFFF027BFFFF027CFFFF060C060A
! 0610060E027D0612FFFFFFFFFFFFFFFF027EFFFF027FFFFF0280FFFF0281FFFF0282FFFF0283FFFF0284FFFF0285FFFF
  0286FFFF0287FFFF0288FFFF0289FFFF028AFFFF028BFFFF028CFFFF028DFFFF028EFFFF028FFFFF0290FFFF0291FFFF
  0292FFFF0293FFFF0294FFFF0295FFFF0296FFFF0297FFFF0298FFFF0299FFFF029AFFFF029BFFFF029CFFFF029DFFFF
  029EFFFF029FFFFF02A0FFFF02A1FFFF02A2FFFF02A3FFFF02A4FFFF02A5FFFF02A6FFFF02A7FFFF02A8FFFF02A9FFFF
  02AAFFFF02ABFFFF02ACFFFF02ADFFFF02AF02AE02B102B002B302B202B502B4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  02B702B602B902B802BB02BAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02BD02BC02BF02BE02C102C002C302C2
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02C502C402C702C602C902C802CB02CAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 02CD02CC02CF02CE02D102D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02D2061402D3061602D4061902D5061C
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02D702D602D902D802DB02DA02DD02DCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 02DF02DE02E102E002E302E202E502E402E702E602E902E802EB02EAFFFFFFFF063F063D0643064106470645064B0649
! 064F064D0653065106570655065B0659065F065D0663066106670665066B0669066F066D0673067106770675067B0679
! 067F067D0683068106870685068B0689068F068D0693069106970695069B069903050304069D06A9FFFF06AB06B5061F
! FFFFFFFFFFFFFFFFFFFF069FFFFF0307FFFFFFFF06A106ADFFFF06AF06B80621FFFFFFFFFFFFFFFFFFFF06A3FFFFFFFF
! 030A030906260623FFFFFFFF062B0629FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF030C030B0631062E030D063406380636
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06A506B1FFFF06B306BB063BFFFFFFFFFFFFFFFFFFFF06A7FFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF030FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  0311031003130312031503140317031603190318031B031A031D031C031F031EFFFFFFFFFFFFFFFFFFFF0320FFFFFFFF
*************** FFFFFFFF03F5FFFF03F6FFFF03F7FFFF03F8FFFF
*** 3811,3867 ****
  041EFFFF041FFFFF0420FFFF0421FFFFFFFFFFFFFFFFFFFFFFFF0422FFFFFFFF0423FFFF0424FFFFFFFF04250426FFFF
  0427FFFF0428FFFF0429FFFF042AFFFF042BFFFF042CFFFF042DFFFF042EFFFF042FFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFF0430FFFF0431FFFF0432FFFF0433FFFF0434FFFF0435FFFF0436FFFF0437FFFFFFFFFFFFFFFFFFFF
! FFFF0438FFFF0439043AFFFFFFFFFFFF043BFFFFFFFFFFFFFFFFFFFF043CFFFF043DFFFF043EFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF043F
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFF0440FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04420441044404430446044504480447044A0449044C044B044E044D0450044F
! 04520451045404530456045504580457045A0459045C045B045E045D0460045F04620461046404630466046504680467
! 046A0469046C046B046E046D0470046F04720471047404730476047504780477047A0479047C047B047E047D0480047F
! 04820481048404830486048504880487048A0489048C048B048E048D0490048F05CA05C805CE05CC05D405D1FFFF05D6
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05DAFFFF05DE05DC05E205E0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0491FFFF04930492049504940497049604990498049B049A049D049C049F049E
! 04A104A004A304A204A504A404A704A604A904A8FFFF04AAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04AC04AB04AE04AD04B004AF04B204B1
! 04B404B304B604B504B804B704BA04B904BC04BB04BE04BD04C004BF04C204C104C404C304C604C504C804C704CA04C9
! 04CC04CB04CE04CD04D004CF04D204D1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04D404D304D604D504D804D704DA04D904DC04DB04DE04DD04E004DF04E204E1
! 04E404E304E604E504E804E704EA04E904EC04EB04EE04ED04F004EF04F204F104F404F304F604F5FFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04F7FFFF
! 04F904F804FB04FA04FD04FC04FF04FE050105000502FFFF050405030506050505080507050A0509050C050B050E050D
! 0510050F0511FFFF0513051205150514051705160518FFFFFFFF0519FFFFFFFF051B051A051D051C051F051E05210520
! 05230522052505240527052605290528052B052A052D052C052F052E0531053005330532053505340537053605390538
! 053B053A053D053C053F053E0541054005430542054505440547054605490548054B054AFFFF054CFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF054E054D0550054F05520551055405530556055505580557055A0559055C055B
! 055E055D0560055F05620561FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF056405630566056505680567056A0569
! 056C056B056E056D0570056F05720571057405730576057505780577057A0579057C057B057E057D0580057F05820581
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF058405830586058505880587058A0589
! 058C058B058E058D0590058F05920591059405930596059505980597059A0599059C059B059E059D05A0059F05A205A1
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
- FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05A405A305A605A505A805A705AA05A905AC05AB05AE05AD05B005AF
- 05B205B105B405B305B605B505B805B705BA05B905BC05BB05BE05BD05C005BF05C205C105C405C3FFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
  );
! //10240 bytes
  enum toLowerIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x"
  000000000000004000000280",
  x"
! 000001000000048000000F00",
  x"
  020201000402030206020205070202020202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
--- 3861,3923 ----
  041EFFFF041FFFFF0420FFFF0421FFFFFFFFFFFFFFFFFFFFFFFF0422FFFFFFFF0423FFFF0424FFFFFFFF04250426FFFF
  0427FFFF0428FFFF0429FFFF042AFFFF042BFFFF042CFFFF042DFFFF042EFFFF042FFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFF0430FFFF0431FFFF0432FFFF0433FFFF0434FFFF0435FFFF0436FFFF0437FFFFFFFFFFFFFFFFFFFF
! FFFF0438FFFF0439043AFFFF043BFFFF043CFFFF043DFFFF043EFFFF043FFFFF0440FFFF0441FFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0442
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFF0443FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF044504440447044604490448044B044A044D044C044F044E0451045004530452
! 045504540457045604590458045B045A045D045C045F045E0461046004630462046504640467046604690468046B046A
! 046D046C046F046E0471047004730472047504740477047604790478047B047A047D047C047F047E0481048004830482
! 048504840487048604890488048B048A048D048C048F048E049104900493049205E605E405EA05E805F005EDFFFF05F2
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05F6FFFF05FA05F805FE05FCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0494FFFF0496049504980497049A0499049C049B049E049D04A0049F04A204A1
! 04A404A304A604A504A804A704AA04A904AC04ABFFFF04ADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04AF04AE04B104B004B304B204B504B4
! 04B704B604B904B804BB04BA04BD04BC04BF04BE04C104C004C304C204C504C404C704C604C904C804CB04CA04CD04CC
! 04CF04CE04D104D004D304D204D504D4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04D704D604D904D804DB04DA04DD04DC04DF04DE04E104E004E304E204E504E4
! 04E704E604E904E804EB04EA04ED04EC04EF04EE04F104F004F304F204F504F404F704F604F904F8FFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04FAFFFF
! 04FC04FB04FE04FD050004FF05020501050405030505FFFF0507050605090508050B050A050D050C050F050E05110510
! 051305120514FFFF0516051505180517051A0519051BFFFFFFFF051CFFFFFFFF051E051D0520051F0522052105240523
! 0526052505280527052A0529052C052B052E052D0530052F05320531053405330536053505380537053A0539053C053B
! 053E053D0540053F05420541054405430546054505480547054A0549054C054B054E054DFFFF054FFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0551055005530552055505540557055605590558055B055A055D055C055F055E
! 056105600563056205650564FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0567056605690568056B056A056D056C
! 056F056E0571057005730572057505740577057605790578057B057A057D057C057F057E058105800583058205850584
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0587058605890588058B058A058D058C
! 058F058E0591059005930592059505940597059605990598059B059A059D059C059F059E05A105A005A305A205A505A4
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05A6FFFF05A805A705AA05A905AC05AB05AE05AD05B005AF05B205B1
+ 05B405B305B605B505B805B705BA05B905BC05BB05BE05BDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05C005BF05C205C105C405C3
+ 05C605C505C805C705CA05C905CC05CB05CE05CD05D005CF05D205D105D405D305D605D505D805D705DA05D905DC05DB
+ 05DE05DD05E005DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
  );
! //10368 bytes
  enum toLowerIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x"
  000000000000004000000280",
  x"
! 000001000000048000000F40",
  x"
  020201000402030206020205070202020202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
*************** x"
*** 3902,3913 ****
  000000000000003800000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000000000000000000000000000000000000000390000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 00000000000000000000003A000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- 3958,3969 ----
  000000000000003800000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 0000000000000000000000000000000000000000000000000000000000000000003900000000003A0000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 00000000000000000000003B000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
*************** FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
*** 3922,3940 ****
  0000FFFF00020001000400030006000500080007000A0009000C000B000E000D0010000F001200110014001300160015
  00180017FFFF0019FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF001B001A001D001C001F001E00210020
! 00230022002500240027002600290028002B002A002D002C002F002EFFFF003000320031003400330036003505B40037
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0038FFFF0039FFFF003AFFFF003BFFFF003CFFFF003DFFFF003EFFFF003F
  FFFF0040FFFF0041FFFF0042FFFF0043FFFF0044FFFF0045FFFF0046FFFF0047FFFF0048FFFF0049FFFF004AFFFF004B
! FFFF004CFFFF004DFFFF004EFFFF004FFFFF05B5FFFF0051FFFF0052FFFF00530054FFFF0055FFFF0056FFFF0057FFFF
! 0058FFFF0059FFFF005AFFFF005BFFFF05C4FFFFFFFF005CFFFF005DFFFF005EFFFF005FFFFF0060FFFF0061FFFF0062
  FFFF0063FFFF0064FFFF0065FFFF0066FFFF0067FFFF0068FFFF0069FFFF006AFFFF006BFFFF006CFFFF006DFFFF006E
  FFFF006FFFFF0070FFFF0071FFFF0072007400730075FFFF0076FFFFFFFFFFFF0077FFFFFFFF0078FFFF0079007B007A
  007CFFFF007E007DFFFFFFFF0080007F008200810083FFFFFFFF008400860085FFFF0087FFFFFFFF00890088008AFFFF
  FFFF008BFFFF008CFFFF008D008F008E0090FFFFFFFFFFFFFFFF0091009300920094FFFF009600950097FFFF0098FFFF
  FFFF0099FFFFFFFFFFFF009AFFFFFFFFFFFFFFFFFFFFFFFF009C009B009DFFFFFFFF009E00A0009F00A1FFFF00A2FFFF
  00A3FFFF00A4FFFF00A5FFFF00A6FFFF00A7FFFF00A8FFFFFFFFFFFFFFFF00A9FFFF00AAFFFF00ABFFFF00ACFFFF00AD
! FFFF00AEFFFF00AFFFFF00B0FFFF00B100B205C7FFFF00B3FFFF00B400B600B5FFFF00B7FFFF00B8FFFF00B9FFFF00BA
  FFFF00BBFFFF00BCFFFF00BDFFFF00BEFFFF00BFFFFF00C0FFFF00C1FFFF00C2FFFF00C3FFFF00C4FFFF00C5FFFF00C6
  FFFF00C7FFFF00C8FFFF00C9FFFF00CAFFFF00CBFFFF00CCFFFF00CDFFFF00CEFFFF00CFFFFF00D0FFFF00D1FFFF00D2
  FFFF00D3FFFF00D4FFFFFFFFFFFFFFFFFFFFFFFF00D600D500D7FFFFFFFF00D800D9FFFF00DAFFFF00DC00DBFFFF00DD
--- 3978,3996 ----
  0000FFFF00020001000400030006000500080007000A0009000C000B000E000D0010000F001200110014001300160015
  00180017FFFF0019FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF001B001A001D001C001F001E00210020
! 00230022002500240027002600290028002B002A002D002C002F002EFFFF003000320031003400330036003505D00037
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0038FFFF0039FFFF003AFFFF003BFFFF003CFFFF003DFFFF003EFFFF003F
  FFFF0040FFFF0041FFFF0042FFFF0043FFFF0044FFFF0045FFFF0046FFFF0047FFFF0048FFFF0049FFFF004AFFFF004B
! FFFF004CFFFF004DFFFF004EFFFF004FFFFF05D1FFFF0051FFFF0052FFFF00530054FFFF0055FFFF0056FFFF0057FFFF
! 0058FFFF0059FFFF005AFFFF005BFFFF05E0FFFFFFFF005CFFFF005DFFFF005EFFFF005FFFFF0060FFFF0061FFFF0062
  FFFF0063FFFF0064FFFF0065FFFF0066FFFF0067FFFF0068FFFF0069FFFF006AFFFF006BFFFF006CFFFF006DFFFF006E
  FFFF006FFFFF0070FFFF0071FFFF0072007400730075FFFF0076FFFFFFFFFFFF0077FFFFFFFF0078FFFF0079007B007A
  007CFFFF007E007DFFFFFFFF0080007F008200810083FFFFFFFF008400860085FFFF0087FFFFFFFF00890088008AFFFF
  FFFF008BFFFF008CFFFF008D008F008E0090FFFFFFFFFFFFFFFF0091009300920094FFFF009600950097FFFF0098FFFF
  FFFF0099FFFFFFFFFFFF009AFFFFFFFFFFFFFFFFFFFFFFFF009C009B009DFFFFFFFF009E00A0009F00A1FFFF00A2FFFF
  00A3FFFF00A4FFFF00A5FFFF00A6FFFF00A7FFFF00A8FFFFFFFFFFFFFFFF00A9FFFF00AAFFFF00ABFFFF00ACFFFF00AD
! FFFF00AEFFFF00AFFFFF00B0FFFF00B100B205E3FFFF00B3FFFF00B400B600B5FFFF00B7FFFF00B8FFFF00B9FFFF00BA
  FFFF00BBFFFF00BCFFFF00BDFFFF00BEFFFF00BFFFFF00C0FFFF00C1FFFF00C2FFFF00C3FFFF00C4FFFF00C5FFFF00C6
  FFFF00C7FFFF00C8FFFF00C9FFFF00CAFFFF00CBFFFF00CCFFFF00CDFFFF00CEFFFF00CFFFFF00D0FFFF00D1FFFF00D2
  FFFF00D3FFFF00D4FFFFFFFFFFFFFFFFFFFFFFFF00D600D500D7FFFFFFFF00D800D9FFFF00DAFFFF00DC00DBFFFF00DD
*************** FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
*** 3943,3951 ****
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00E2FFFF00E3FFFFFFFFFFFF00E4FFFFFFFFFFFFFFFFFFFFFFFF00E5FFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFF00E600E800E7FFFF00E9FFFF00EA00EC00EB00ED05C500EF00EE00F100F000F300F2
  00F500F400F700F600F900F800FB00FA00FD00FC00FEFFFF010000FF010201010104010301060105FFFFFFFFFFFFFFFF
! FFFF05C6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFF0107FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0108FFFF0109FFFF010AFFFF010B
  FFFF010CFFFF010DFFFF010EFFFF010FFFFF0110FFFF0111FFFF0112FFFF0113FFFFFFFFFFFFFFFFFFFF01140115FFFF
  0116FFFFFFFF01170118FFFF011A0119011C011B011E011D0120011F01220121012401230126012501280127012A0129
--- 3999,4007 ----
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00E2FFFF00E3FFFFFFFFFFFF00E4FFFFFFFFFFFFFFFFFFFFFFFF00E5FFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFF00E600E800E7FFFF00E9FFFF00EA00EC00EB00ED05E100EF00EE00F100F000F300F2
  00F500F400F700F600F900F800FB00FA00FD00FC00FEFFFF010000FF010201010104010301060105FFFFFFFFFFFFFFFF
! FFFF05E2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFF0107FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0108FFFF0109FFFF010AFFFF010B
  FFFF010CFFFF010DFFFF010EFFFF010FFFFF0110FFFF0111FFFF0112FFFF0113FFFFFFFFFFFFFFFFFFFF01140115FFFF
  0116FFFFFFFF01170118FFFF011A0119011C011B011E011D0120011F01220121012401230126012501280127012A0129
*************** FFFF01A3FFFF01A4FFFF01A5FFFF01A6FFFF01A7
*** 3964,3970 ****
  01AFFFFF01B101B001B301B201B501B401B701B601B901B801BB01BA01BD01BC01BF01BE01C101C001C301C201C501C4
  01C701C601C901C801CB01CA01CD01CC01CF01CE01D101D001D301D2FFFF01D4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05BEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
--- 4020,4026 ----
  01AFFFFF01B101B001B301B201B501B401B701B601B901B801BB01BA01BD01BC01BF01BE01C101C001C301C201C501C4
  01C701C601C901C801CB01CA01CD01CC01CF01CE01D101D001D301D2FFFF01D4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05DAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
*************** FFFF0296FFFF0297FFFF0298FFFF0299FFFF029A
*** 3986,3992 ****
  FFFF02A2FFFF02A3FFFF02A4FFFF02A5FFFF02A6FFFF02A7FFFF02A8FFFF02A9FFFF02AAFFFF02ABFFFF02ACFFFF02AD
  FFFF02AEFFFF02AFFFFF02B0FFFF02B1FFFF02B2FFFF02B3FFFF02B4FFFF02B5FFFF02B6FFFF02B7FFFF02B8FFFF02B9
  FFFF02BAFFFF02BBFFFF02BCFFFF02BDFFFF02BEFFFF02BFFFFF02C0FFFF02C1FFFF02C2FFFF02C3FFFF02C4FFFF02C5
! FFFF02C6FFFF02C7FFFF02C8FFFF02C9FFFF02CAFFFF02CBFFFF02CC05C905C805CB05CAFFFF05CCFFFFFFFFFFFF02CD
  FFFF02CEFFFF02CFFFFF02D0FFFF02D1FFFF02D2FFFF02D3FFFF02D4FFFF02D5FFFF02D6FFFF02D7FFFF02D8FFFF02D9
  FFFF02DAFFFF02DBFFFF02DCFFFF02DDFFFF02DEFFFF02DFFFFF02E0FFFF02E1FFFF02E2FFFF02E3FFFF02E4FFFF02E5
  FFFF02E6FFFF02E7FFFF02E8FFFF02E9FFFF02EAFFFF02EBFFFF02ECFFFF02EDFFFF02EEFFFF02EFFFFF02F0FFFF02F1
--- 4042,4048 ----
  FFFF02A2FFFF02A3FFFF02A4FFFF02A5FFFF02A6FFFF02A7FFFF02A8FFFF02A9FFFF02AAFFFF02ABFFFF02ACFFFF02AD
  FFFF02AEFFFF02AFFFFF02B0FFFF02B1FFFF02B2FFFF02B3FFFF02B4FFFF02B5FFFF02B6FFFF02B7FFFF02B8FFFF02B9
  FFFF02BAFFFF02BBFFFF02BCFFFF02BDFFFF02BEFFFF02BFFFFF02C0FFFF02C1FFFF02C2FFFF02C3FFFF02C4FFFF02C5
! FFFF02C6FFFF02C7FFFF02C8FFFF02C9FFFF02CAFFFF02CBFFFF02CC05E505E405E705E6FFFF05E8FFFFFFFFFFFF02CD
  FFFF02CEFFFF02CFFFFF02D0FFFF02D1FFFF02D2FFFF02D3FFFF02D4FFFF02D5FFFF02D6FFFF02D7FFFF02D8FFFF02D9
  FFFF02DAFFFF02DBFFFF02DCFFFF02DDFFFF02DEFFFF02DFFFFF02E0FFFF02E1FFFF02E2FFFF02E3FFFF02E4FFFF02E5
  FFFF02E6FFFF02E7FFFF02E8FFFF02E9FFFF02EAFFFF02EBFFFF02ECFFFF02EDFFFF02EEFFFF02EFFFFF02F0FFFF02F1
*************** FFFF02F2FFFF02F3FFFF02F4FFFF02F5FFFF02F6
*** 3994,4007 ****
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02FF02FE030103000303030203050304FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  0307030603090308030B030AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF030D030C030F030E0311031003130312
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF031503140317031603190318031B031AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 031D031C031F031E03210320FFFFFFFFFFFF05CDFFFF05CEFFFF05CFFFFF05D00322FFFF0323FFFF0324FFFF0325FFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0327032603290328032B032A032D032CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05DE05DD05E005DF05E205E105E405E305E605E505E805E705EA05E905EC05EB
! 05EE05ED05F005EF05F205F105F405F305F605F505F805F705FA05F905FC05FB05FE05FD060005FF0602060106040603
! 0606060506080607060A0609060C060BFFFFFFFF060D0613FFFF0614061905D10347034603490348FFFF060EFFFFFFFF
! FFFFFFFF060F0615FFFF0616061A05D2034C034B034E034DFFFF0610FFFFFFFFFFFFFFFF05D405D3FFFFFFFF05D605D5
! 0351035003530352FFFFFFFFFFFFFFFFFFFFFFFF05D805D7FFFF05D905DB05DA0355035403570356FFFF0358FFFFFFFF
! FFFFFFFF06110617FFFF0618061B05DC035A0359035C035BFFFF0612FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFF035EFFFFFFFF0360035FFFFFFFFFFFFFFFFFFFFFFFFFFFFF0361FFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
--- 4050,4063 ----
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02FF02FE030103000303030203050304FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  0307030603090308030B030AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF030D030C030F030E0311031003130312
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF031503140317031603190318031B031AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 031D031C031F031E03210320FFFFFFFFFFFF05E9FFFF05EAFFFF05EBFFFF05EC0322FFFF0323FFFF0324FFFF0325FFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0327032603290328032B032A032D032CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05FA05F905FC05FB05FE05FD060005FF06020601060406030606060506080607
! 060A0609060C060B060E060D0610060F06120611061406130616061506180617061A0619061C061B061E061D0620061F
! 06220621062406230626062506280627FFFFFFFF0629062FFFFF0630063505ED0347034603490348FFFF062AFFFFFFFF
! FFFFFFFF062B0631FFFF0632063605EE034C034B034E034DFFFF062CFFFFFFFFFFFFFFFF05F005EFFFFFFFFF05F205F1
! 0351035003530352FFFFFFFFFFFFFFFFFFFFFFFF05F405F3FFFF05F505F705F60355035403570356FFFF0358FFFFFFFF
! FFFFFFFF062D0633FFFF0634063705F8035A0359035C035BFFFF062EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFF035EFFFFFFFF0360035FFFFFFFFFFFFFFFFFFFFFFFFFFFFF0361FFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
*************** FFFF0444FFFF0445FFFF0446FFFF0447FFFF0448
*** 4039,4088 ****
  044CFFFF044DFFFF044EFFFFFFFF044FFFFF0450FFFF0451FFFF0452FFFF0453FFFFFFFF0454FFFF0455FFFFFFFFFFFF
  FFFF0456FFFF0457FFFFFFFFFFFF0458FFFF0459FFFF045AFFFF045BFFFF045CFFFF045DFFFF045EFFFF045FFFFF0460
  FFFF04610463046204650464FFFF046604680467046A0469FFFF046BFFFF046CFFFF046DFFFF046EFFFF046FFFFF0470
! FFFF0471FFFF047204740473047604750477FFFF0478FFFFFFFF0479FFFFFFFFFFFF047AFFFFFFFFFFFFFFFFFFFF047B
! FFFF047CFFFF047DFFFF047EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFF047FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05B805B705BA05B905BC05BBFFFF05BD
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05BFFFFF05C105C005C305C2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0480FFFF048204810484048304860485
! 04880487048A0489048C048B048E048D0490048F04920491049404930496049504980497FFFF0499FFFFFFFFFFFFFFFF
! 049B049A049D049C049F049E04A104A004A304A204A504A404A704A604A904A804AB04AA04AD04AC04AF04AE04B104B0
! 04B304B204B504B404B704B604B904B804BB04BA04BD04BC04BF04BE04C104C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04C304C204C504C404C704C604C904C8
! 04CB04CA04CD04CC04CF04CE04D104D004D304D204D504D404D704D604D904D804DB04DA04DD04DC04DF04DE04E104E0
! 04E304E204E504E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 04E704E604E904E804EB04EA04ED04EC04EF04EEFFFF04F004F204F104F404F304F604F504F804F704FA04F904FC04FB
! 04FE04FDFFFF04FF050105000503050205050504FFFF050605080507FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF050A0509050C050B050E050D0510050F05120511051405130516051505180517
! 051A0519051C051B051E051D0520051F05220521052405230526052505280527052A0529052C052B052E052D0530052F
! 05320531053405330536053505380537053A0539FFFF053BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF053D053C053F053E0541054005430542
! 054505440547054605490548054B054A054D054C054F054E05510550FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 05530552055505540557055605590558055B055A055D055C055F055E0561056005630562056505640567056605690568
! 056B056A056D056C056F056E0571057005730572057505740577057605790578057B057A057D057C057F057E05810580
! 05830582058505840587058605890588058B058A058D058C058F058E05910590FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
- 05930592059505940597059605990598059B059A059D059C059F059E05A105A005A305A205A505A405A705A605A905A8
- 05AB05AA05AD05AC05AF05AE05B105B005B305B2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
  );
! //10752 bytes
  enum toTitleIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x"
  000000000000004000000280",
  x"
! 000001000000048000001000",
  x"
  020201000402030206020205070202020202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
--- 4095,4146 ----
  044CFFFF044DFFFF044EFFFFFFFF044FFFFF0450FFFF0451FFFF0452FFFF0453FFFFFFFF0454FFFF0455FFFFFFFFFFFF
  FFFF0456FFFF0457FFFFFFFFFFFF0458FFFF0459FFFF045AFFFF045BFFFF045CFFFF045DFFFF045EFFFF045FFFFF0460
  FFFF04610463046204650464FFFF046604680467046A0469FFFF046BFFFF046CFFFF046DFFFF046EFFFF046FFFFF0470
! FFFF0471FFFF047204740473047604750477FFFF0478FFFFFFFF0479FFFF047AFFFF047BFFFF047CFFFF047DFFFF047E
! FFFF047FFFFF0480FFFF0481FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFF0482FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05D405D305D605D505D805D7FFFF05D9
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05DBFFFF05DD05DC05DF05DEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0483FFFF048504840487048604890488
! 048B048A048D048C048F048E0491049004930492049504940497049604990498049B049AFFFF049CFFFFFFFFFFFFFFFF
! 049E049D04A0049F04A204A104A404A304A604A504A804A704AA04A904AC04AB04AE04AD04B004AF04B204B104B404B3
! 04B604B504B804B704BA04B904BC04BB04BE04BD04C004BF04C204C104C404C3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04C604C504C804C704CA04C904CC04CB
! 04CE04CD04D004CF04D204D104D404D304D604D504D804D704DA04D904DC04DB04DE04DD04E004DF04E204E104E404E3
! 04E604E504E804E7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 04EA04E904EC04EB04EE04ED04F004EF04F204F1FFFF04F304F504F404F704F604F904F804FB04FA04FD04FC04FF04FE
! 05010500FFFF0502050405030506050505080507FFFF0509050B050AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF050D050C050F050E0511051005130512051505140517051605190518051B051A
! 051D051C051F051E0521052005230522052505240527052605290528052B052A052D052C052F052E0531053005330532
! 053505340537053605390538053B053A053D053CFFFF053EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0540053F054205410544054305460545
! 05480547054A0549054C054B054E054D0550054F0552055105540553FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 0556055505580557055A0559055C055B055E055D0560055F05620561056405630566056505680567056A0569056C056B
! 056E056D0570056F05720571057405730576057505780577057A0579057C057B057E057D0580057F0582058105840583
! 0586058505880587058A0589058C058B058E058D0590058F0592059105940593FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0596059505980597059A0599059C059B059E059D05A0059F05A205A105A405A3
+ 05A605A505A805A705AA05A905AC05ABFFFF05ADFFFFFFFFFFFFFFFFFFFFFFFF05AF05AE05B105B005B305B205B505B4
+ 05B705B605B905B805BB05BA05BD05BC05BF05BE05C105C005C305C205C505C405C705C605C905C805CB05CA05CD05CC
+ 05CF05CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
  );
! //11008 bytes
  enum toTitleIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x"
  000000000000004000000280",
  x"
! 000001000000048000001080",
  x"
  020201000402030206020205070202020202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
*************** x"
*** 4123,4134 ****
  00000000003B000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 0000000000000000000000000000000000000000000000000000000000000000003C0000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 0000000000000000003E003D000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- 4181,4192 ----
  00000000003B000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 0000000000000000000000000000000000000000000000000000000000000000003C0000003E003D0000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 00000000000000000040003F000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
*************** FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF
*** 4146,4164 ****
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF001AFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05C9FFFF001C001B001E001D0020001F00220021
  002400230026002500280027002A0029002C002B002E002D0030002FFFFF003100330032003500340037003600390038
  003AFFFF003BFFFF003CFFFF003DFFFF003EFFFF003FFFFF0040FFFF0041FFFF0042FFFF0043FFFF0044FFFF0045FFFF
  0046FFFF0047FFFF0048FFFF0049FFFF004AFFFF004BFFFF004CFFFF004DFFFF004EFFFF004FFFFF0050FFFF0051FFFF
! 005205CB0053FFFF0054FFFF0055FFFFFFFFFFFFFFFF0056FFFF0057FFFF0058FFFF0059FFFF005AFFFF005BFFFF005C
! 05E8005D005EFFFF005FFFFF0060FFFF0061FFFF0062FFFF0063FFFF0064FFFF0065FFFF0066FFFF0067FFFF0068FFFF
  0069FFFF006AFFFF006BFFFF006CFFFF006DFFFF006EFFFF006FFFFF0070FFFF0071FFFF0072FFFF0073FFFF0074FFFF
  FFFFFFFFFFFF0075FFFF007600780077FFFF0079007AFFFF007BFFFFFFFFFFFFFFFF007CFFFFFFFFFFFF007DFFFFFFFF
  FFFFFFFFFFFF007E007FFFFFFFFFFFFF0080FFFF00820081FFFFFFFFFFFF00830084FFFF0085FFFF0086FFFFFFFFFFFF
  FFFF0087FFFFFFFF0088FFFFFFFFFFFFFFFF0089FFFFFFFFFFFF008AFFFF008B008CFFFFFFFFFFFF008DFFFF008EFFFF
  FFFFFFFFFFFFFFFF0090008F009200910094009300960095FFFF0097FFFF0098FFFF0099FFFF009AFFFF009BFFFF009C
  FFFF009DFFFF009E00A0009F00A1FFFF00A2FFFF00A3FFFF00A4FFFF00A5FFFF00A6FFFF00A7FFFF00A8FFFF00A9FFFF
! 00AA05F000AC00AB00ADFFFFFFFFFFFF00AEFFFF00AFFFFF00B0FFFF00B1FFFF00B2FFFF00B3FFFF00B4FFFF00B5FFFF
  00B6FFFF00B7FFFF00B8FFFF00B9FFFF00BAFFFF00BBFFFF00BCFFFF00BDFFFF00BEFFFF00BFFFFF00C0FFFF00C1FFFF
  FFFFFFFF00C2FFFF00C3FFFF00C4FFFF00C5FFFF00C6FFFF00C7FFFF00C8FFFF00C9FFFF00CAFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFF00CB00CCFFFFFFFF00CDFFFF00CEFFFFFFFF00CFFFFF00D0FFFF00D1FFFF00D2FFFF00D3FFFF
--- 4204,4222 ----
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF001AFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05E5FFFF001C001B001E001D0020001F00220021
  002400230026002500280027002A0029002C002B002E002D0030002FFFFF003100330032003500340037003600390038
  003AFFFF003BFFFF003CFFFF003DFFFF003EFFFF003FFFFF0040FFFF0041FFFF0042FFFF0043FFFF0044FFFF0045FFFF
  0046FFFF0047FFFF0048FFFF0049FFFF004AFFFF004BFFFF004CFFFF004DFFFF004EFFFF004FFFFF0050FFFF0051FFFF
! 005205E70053FFFF0054FFFF0055FFFFFFFFFFFFFFFF0056FFFF0057FFFF0058FFFF0059FFFF005AFFFF005BFFFF005C
! 0604005D005EFFFF005FFFFF0060FFFF0061FFFF0062FFFF0063FFFF0064FFFF0065FFFF0066FFFF0067FFFF0068FFFF
  0069FFFF006AFFFF006BFFFF006CFFFF006DFFFF006EFFFF006FFFFF0070FFFF0071FFFF0072FFFF0073FFFF0074FFFF
  FFFFFFFFFFFF0075FFFF007600780077FFFF0079007AFFFF007BFFFFFFFFFFFFFFFF007CFFFFFFFFFFFF007DFFFFFFFF
  FFFFFFFFFFFF007E007FFFFFFFFFFFFF0080FFFF00820081FFFFFFFFFFFF00830084FFFF0085FFFF0086FFFFFFFFFFFF
  FFFF0087FFFFFFFF0088FFFFFFFFFFFFFFFF0089FFFFFFFFFFFF008AFFFF008B008CFFFFFFFFFFFF008DFFFF008EFFFF
  FFFFFFFFFFFFFFFF0090008F009200910094009300960095FFFF0097FFFF0098FFFF0099FFFF009AFFFF009BFFFF009C
  FFFF009DFFFF009E00A0009F00A1FFFF00A2FFFF00A3FFFF00A4FFFF00A5FFFF00A6FFFF00A7FFFF00A8FFFF00A9FFFF
! 00AA060C00AC00AB00ADFFFFFFFFFFFF00AEFFFF00AFFFFF00B0FFFF00B1FFFF00B2FFFF00B3FFFF00B4FFFF00B5FFFF
  00B6FFFF00B7FFFF00B8FFFF00B9FFFF00BAFFFF00BBFFFF00BCFFFF00BDFFFF00BEFFFF00BFFFFF00C0FFFF00C1FFFF
  FFFFFFFF00C2FFFF00C3FFFF00C4FFFF00C5FFFF00C6FFFF00C7FFFF00C8FFFF00C9FFFF00CAFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFF00CB00CCFFFFFFFF00CDFFFF00CEFFFFFFFF00CFFFFF00D0FFFF00D1FFFF00D2FFFF00D3FFFF
*************** FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
*** 4170,4177 ****
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FBFFFF00FCFFFFFFFFFFFF00FDFFFF
  FFFFFFFF00FEFFFF010000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFF05EAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFF0102010101040103010505ED0107010601090108010B010A010D010C010F010E0111011001130112
  011501140117011601190118011B011A011D011C011F011E01210120FFFF012201240123FFFFFFFF0125FFFF01270126
  0128FFFF0129FFFF012AFFFF012BFFFF012CFFFF012DFFFF012EFFFF012FFFFF0130FFFF0131FFFF0132FFFF0133FFFF
  01350134013701360138FFFFFFFFFFFFFFFF0139013AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
--- 4228,4235 ----
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FBFFFF00FCFFFFFFFFFFFF00FDFFFF
  FFFFFFFF00FEFFFF010000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFF0606FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFF0102010101040103010506090107010601090108010B010A010D010C010F010E0111011001130112
  011501140117011601190118011B011A011D011C011F011E01210120FFFF012201240123FFFFFFFF0125FFFF01270126
  0128FFFF0129FFFF012AFFFF012BFFFF012CFFFF012DFFFF012EFFFF012FFFFF0130FFFF0131FFFF0132FFFF0133FFFF
  01350134013701360138FFFFFFFFFFFFFFFF0139013AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
*************** FFFF019AFFFF019BFFFF019C019E019D019FFFFF
*** 4190,4196 ****
  01CBFFFF01CCFFFF01CDFFFF01CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01CFFFFF01D101D001D301D201D501D401D701D601D901D801DB01DA01DD01DC
! 01DF01DE01E101E001E301E201E501E401E701E601E901E801EB01EA01ED01EC01EF01EE01F101F001F301F205DC01F4
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
--- 4248,4254 ----
  01CBFFFF01CCFFFF01CDFFFF01CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01CFFFFF01D101D001D301D201D501D401D701D601D901D801DB01DA01DD01DC
! 01DF01DE01E101E001E301E201E501E401E701E601E901E801EB01EA01ED01EC01EF01EE01F101F001F301F205F801F4
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
*************** FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
*** 4212,4233 ****
  0252FFFF0253FFFF0254FFFF0255FFFF0256FFFF0257FFFF0258FFFF0259FFFF025AFFFF025BFFFF025CFFFF025DFFFF
  025EFFFF025FFFFF0260FFFF0261FFFF0262FFFF0263FFFF0264FFFF0265FFFF0266FFFF0267FFFF0268FFFF0269FFFF
  026AFFFF026BFFFF026CFFFF026DFFFF026EFFFF026FFFFF0270FFFF0271FFFF0272FFFF0273FFFF0274FFFF0275FFFF
! 0276FFFF0277FFFF0278FFFF0279FFFF027AFFFF027BFFFF027CFFFF027DFFFF027EFFFF027FFFFF0280FFFF05F405F2
! 05F805F6028105FAFFFFFFFFFFFFFFFF0282FFFF0283FFFF0284FFFF0285FFFF0286FFFF0287FFFF0288FFFF0289FFFF
  028AFFFF028BFFFF028CFFFF028DFFFF028EFFFF028FFFFF0290FFFF0291FFFF0292FFFF0293FFFF0294FFFF0295FFFF
  0296FFFF0297FFFF0298FFFF0299FFFF029AFFFF029BFFFF029CFFFF029DFFFF029EFFFF029FFFFF02A0FFFF02A1FFFF
  02A2FFFF02A3FFFF02A4FFFF02A5FFFF02A6FFFF02A7FFFF02A8FFFF02A9FFFF02AAFFFF02ABFFFF02ACFFFF02ADFFFF
  02AEFFFF02AFFFFF02B0FFFF02B1FFFF02B302B202B502B402B702B602B902B8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  02BB02BA02BD02BC02BF02BEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02C102C002C302C202C502C402C702C6
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02C902C802CB02CA02CD02CC02CF02CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 02D102D002D302D202D502D4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02D605FC02D705FE02D8060102D90604
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02DB02DA02DD02DC02DF02DE02E102E0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 02E302E202E502E402E702E602E902E802EB02EA02ED02EC02EF02EEFFFFFFFF0626062506280627062A0629062C062B
! 062E062D0630062F06320631063406330636063506380637063A0639063C063B063E063D0640063F0642064106440643
! 0646064506480647064A0649064C064B064E064D0650064F0652065106540653030903080655065BFFFF065D06670607
! FFFFFFFFFFFFFFFFFFFF0656FFFF030BFFFFFFFF0657065FFFFF0661066A0609FFFFFFFFFFFFFFFFFFFF0658FFFFFFFF
! 030E030D060E060BFFFFFFFF06130611FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0310030F061906160311061C0620061E
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06590663FFFF0665066D0623FFFFFFFFFFFFFFFFFFFF065AFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  031503140317031603190318031B031A031D031C031F031E0321032003230322FFFFFFFFFFFFFFFFFFFF0324FFFFFFFF
--- 4270,4291 ----
  0252FFFF0253FFFF0254FFFF0255FFFF0256FFFF0257FFFF0258FFFF0259FFFF025AFFFF025BFFFF025CFFFF025DFFFF
  025EFFFF025FFFFF0260FFFF0261FFFF0262FFFF0263FFFF0264FFFF0265FFFF0266FFFF0267FFFF0268FFFF0269FFFF
  026AFFFF026BFFFF026CFFFF026DFFFF026EFFFF026FFFFF0270FFFF0271FFFF0272FFFF0273FFFF0274FFFF0275FFFF
! 0276FFFF0277FFFF0278FFFF0279FFFF027AFFFF027BFFFF027CFFFF027DFFFF027EFFFF027FFFFF0280FFFF0610060E
! 0614061202810616FFFFFFFFFFFFFFFF0282FFFF0283FFFF0284FFFF0285FFFF0286FFFF0287FFFF0288FFFF0289FFFF
  028AFFFF028BFFFF028CFFFF028DFFFF028EFFFF028FFFFF0290FFFF0291FFFF0292FFFF0293FFFF0294FFFF0295FFFF
  0296FFFF0297FFFF0298FFFF0299FFFF029AFFFF029BFFFF029CFFFF029DFFFF029EFFFF029FFFFF02A0FFFF02A1FFFF
  02A2FFFF02A3FFFF02A4FFFF02A5FFFF02A6FFFF02A7FFFF02A8FFFF02A9FFFF02AAFFFF02ABFFFF02ACFFFF02ADFFFF
  02AEFFFF02AFFFFF02B0FFFF02B1FFFF02B302B202B502B402B702B602B902B8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  02BB02BA02BD02BC02BF02BEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02C102C002C302C202C502C402C702C6
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02C902C802CB02CA02CD02CC02CF02CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 02D102D002D302D202D502D4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02D6061802D7061A02D8061D02D90620
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02DB02DA02DD02DC02DF02DE02E102E0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 02E302E202E502E402E702E602E902E802EB02EA02ED02EC02EF02EEFFFFFFFF06420641064406430646064506480647
! 064A0649064C064B064E064D0650064F06520651065406530656065506580657065A0659065C065B065E065D0660065F
! 06620661066406630666066506680667066A0669066C066B066E066D0670066F0309030806710677FFFF067906830623
! FFFFFFFFFFFFFFFFFFFF0672FFFF030BFFFFFFFF0673067BFFFF067D06860625FFFFFFFFFFFFFFFFFFFF0674FFFFFFFF
! 030E030D062A0627FFFFFFFF062F062DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0310030F0635063203110638063C063A
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0675067FFFFF06810689063FFFFFFFFFFFFFFFFFFFFF0676FFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  031503140317031603190318031B031A031D031C031F031E0321032003230322FFFFFFFFFFFFFFFFFFFF0324FFFFFFFF
*************** FFFFFFFF03F9FFFF03FAFFFF03FBFFFF03FCFFFF
*** 4263,4319 ****
  0422FFFF0423FFFF0424FFFF0425FFFFFFFFFFFFFFFFFFFFFFFF0426FFFFFFFF0427FFFF0428FFFFFFFF0429042AFFFF
  042BFFFF042CFFFF042DFFFF042EFFFF042FFFFF0430FFFF0431FFFF0432FFFF0433FFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFF0434FFFF0435FFFF0436FFFF0437FFFF0438FFFF0439FFFF043AFFFF043BFFFFFFFFFFFFFFFFFFFF
! FFFF043CFFFF043D043EFFFFFFFFFFFF043FFFFFFFFFFFFFFFFFFFFF0440FFFF0441FFFF0442FFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0443
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFF0444FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0446044504480447044A0449044C044B044E044D0450044F0452045104540453
! 0456045504580457045A0459045C045B045E045D0460045F04620461046404630466046504680467046A0469046C046B
! 046E046D0470046F04720471047404730476047504780477047A0479047C047B047E047D0480047F0482048104840483
! 0486048504880487048A0489048C048B048E048D0490048F049204910494049305CE05CC05D205D005D805D5FFFF05DA
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05DEFFFF05E205E005E605E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0495FFFF0497049604990498049B049A049D049C049F049E04A104A004A304A2
! 04A504A404A704A604A904A804AB04AA04AD04ACFFFF04AEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04B004AF04B204B104B404B304B604B5
! 04B804B704BA04B904BC04BB04BE04BD04C004BF04C204C104C404C304C604C504C804C704CA04C904CC04CB04CE04CD
! 04D004CF04D204D104D404D304D604D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04D804D704DA04D904DC04DB04DE04DD04E004DF04E204E104E404E304E604E5
! 04E804E704EA04E904EC04EB04EE04ED04F004EF04F204F104F404F304F604F504F804F704FA04F9FFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04FBFFFF
! 04FD04FC04FF04FE0501050005030502050505040506FFFF05080507050A0509050C050B050E050D0510050F05120511
! 051405130515FFFF0517051605190518051B051A051CFFFFFFFF051DFFFFFFFF051F051E052105200523052205250524
! 0527052605290528052B052A052D052C052F052E0531053005330532053505340537053605390538053B053A053D053C
! 053F053E0541054005430542054505440547054605490548054B054A054D054C054F054EFFFF0550FFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05520551055405530556055505580557055A0559055C055B055E055D0560055F
! 056205610564056305660565FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05680567056A0569056C056B056E056D
! 0570056F05720571057405730576057505780577057A0579057C057B057E057D0580057F058205810584058305860585
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05880587058A0589058C058B058E058D
! 0590058F05920591059405930596059505980597059A0599059C059B059E059D05A0059F05A205A105A405A305A605A5
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05A805A705AA05A905AC05AB05AE05AD05B005AF05B205B105B405B3
! 05B605B505B805B705BA05B905BC05BB05BE05BD05C005BF05C205C105C405C305C605C505C805C7FFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
  );
! //10624 bytes
  enum toUpperSimpleIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x"
  000000000000004000000280",
  x"
! 000001000000048000000FC0",
  x"
  020201000402030206020205070202020202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
--- 4321,4383 ----
  0422FFFF0423FFFF0424FFFF0425FFFFFFFFFFFFFFFFFFFFFFFF0426FFFFFFFF0427FFFF0428FFFFFFFF0429042AFFFF
  042BFFFF042CFFFF042DFFFF042EFFFF042FFFFF0430FFFF0431FFFF0432FFFF0433FFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFF0434FFFF0435FFFF0436FFFF0437FFFF0438FFFF0439FFFF043AFFFF043BFFFFFFFFFFFFFFFFFFFF
! FFFF043CFFFF043D043EFFFF043FFFFF0440FFFF0441FFFF0442FFFF0443FFFF0444FFFF0445FFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0446
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFF0447FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04490448044B044A044D044C044F044E04510450045304520455045404570456
! 04590458045B045A045D045C045F045E0461046004630462046504640467046604690468046B046A046D046C046F046E
! 0471047004730472047504740477047604790478047B047A047D047C047F047E04810480048304820485048404870486
! 04890488048B048A048D048C048F048E0491049004930492049504940497049605EA05E805EE05EC05F405F1FFFF05F6
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05FAFFFF05FE05FC06020600FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0498FFFF049A0499049C049B049E049D04A0049F04A204A104A404A304A604A5
! 04A804A704AA04A904AC04AB04AE04AD04B004AFFFFF04B1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04B304B204B504B404B704B604B904B8
! 04BB04BA04BD04BC04BF04BE04C104C004C304C204C504C404C704C604C904C804CB04CA04CD04CC04CF04CE04D104D0
! 04D304D204D504D404D704D604D904D8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04DB04DA04DD04DC04DF04DE04E104E004E304E204E504E404E704E604E904E8
! 04EB04EA04ED04EC04EF04EE04F104F004F304F204F504F404F704F604F904F804FB04FA04FD04FCFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04FEFFFF
! 050004FF050205010504050305060505050805070509FFFF050B050A050D050C050F050E051105100513051205150514
! 051705160518FFFF051A0519051C051B051E051D051FFFFFFFFF0520FFFFFFFF05220521052405230526052505280527
! 052A0529052C052B052E052D0530052F05320531053405330536053505380537053A0539053C053B053E053D0540053F
! 05420541054405430546054505480547054A0549054C054B054E054D0550054F05520551FFFF0553FFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF055505540557055605590558055B055A055D055C055F055E0561056005630562
! 056505640567056605690568FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF056B056A056D056C056F056E05710570
! 05730572057505740577057605790578057B057A057D057C057F057E0581058005830582058505840587058605890588
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF058B058A058D058C058F058E05910590
! 05930592059505940597059605990598059B059A059D059C059F059E05A105A005A305A205A505A405A705A605A905A8
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05AAFFFF05AC05AB05AE05AD05B005AF05B205B105B405B305B605B5
! 05B805B705BA05B905BC05BB05BE05BD05C005BF05C205C1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05C405C305C605C505C805C7
+ 05CA05C905CC05CB05CE05CD05D005CF05D205D105D405D305D605D505D805D705DA05D905DC05DB05DE05DD05E005DF
+ 05E205E105E405E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
  );
! //10880 bytes
  enum toUpperSimpleIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x"
  000000000000004000000280",
  x"
! 000001000000048000001040",
  x"
  020201000402030206020205070202020202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
*************** x"
*** 4354,4365 ****
  00000000003A000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 0000000000000000000000000000000000000000000000000000000000000000003B0000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 0000000000000000003D003C000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- 4418,4429 ----
  00000000003A000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 0000000000000000000000000000000000000000000000000000000000000000003B0000003D003C0000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 0000000000000000003F003E000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
*************** FFFFFFFF03F5FFFF03F6FFFF03F7FFFF03F8FFFF
*** 4494,4548 ****
  041EFFFF041FFFFF0420FFFF0421FFFFFFFFFFFFFFFFFFFFFFFF0422FFFFFFFF0423FFFF0424FFFFFFFF04250426FFFF
  0427FFFF0428FFFF0429FFFF042AFFFF042BFFFF042CFFFF042DFFFF042EFFFF042FFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFF0430FFFF0431FFFF0432FFFF0433FFFF0434FFFF0435FFFF0436FFFF0437FFFFFFFFFFFFFFFFFFFF
! FFFF0438FFFF0439043AFFFFFFFFFFFF043BFFFFFFFFFFFFFFFFFFFF043CFFFF043DFFFF043EFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF043F
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFF0440FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04420441044404430446044504480447044A0449044C044B044E044D0450044F
! 04520451045404530456045504580457045A0459045C045B045E045D0460045F04620461046404630466046504680467
! 046A0469046C046B046E046D0470046F04720471047404730476047504780477047A0479047C047B047E047D0480047F
! 04820481048404830486048504880487048A0489048C048B048E048D0490048F0491FFFF049304920495049404970496
! 04990498049B049A049D049C049F049E04A104A004A304A204A504A404A704A604A904A8FFFF04AAFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 04AC04AB04AE04AD04B004AF04B204B104B404B304B604B504B804B704BA04B904BC04BB04BE04BD04C004BF04C204C1
! 04C404C304C604C504C804C704CA04C904CC04CB04CE04CD04D004CF04D204D1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04D404D304D604D504D804D704DA04D9
! 04DC04DB04DE04DD04E004DF04E204E104E404E304E604E504E804E704EA04E904EC04EB04EE04ED04F004EF04F204F1
! 04F404F304F604F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFF04F7FFFF04F904F804FB04FA04FD04FC04FF04FE050105000502FFFF0504050305060505
! 05080507050A0509050C050B050E050D0510050F0511FFFF0513051205150514051705160518FFFFFFFF0519FFFFFFFF
! 051B051A051D051C051F051E0521052005230522052505240527052605290528052B052A052D052C052F052E05310530
! 05330532053505340537053605390538053B053A053D053C053F053E0541054005430542054505440547054605490548
! 054B054AFFFF054CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF054E054D0550054F0552055105540553
! 0556055505580557055A0559055C055B055E055D0560055F05620561FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 056405630566056505680567056A0569056C056B056E056D0570056F05720571057405730576057505780577057A0579
! 057C057B057E057D0580057F05820581FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 058405830586058505880587058A0589058C058B058E058D0590058F05920591059405930596059505980597059A0599
! 059C059B059E059D05A0059F05A205A1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05A405A305A605A505A805A7
! 05AA05A905AC05AB05AE05AD05B005AF05B205B105B405B305B605B505B805B705BA05B905BC05BB05BE05BD05C005BF
! 05C205C105C405C3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
  );
! //9984 bytes
  enum toLowerSimpleIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x"
  000000000000004000000280",
  x"
! 000001000000048000000E80",
  x"
  020201000402030206020205070202020202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
--- 4558,4617 ----
  041EFFFF041FFFFF0420FFFF0421FFFFFFFFFFFFFFFFFFFFFFFF0422FFFFFFFF0423FFFF0424FFFFFFFF04250426FFFF
  0427FFFF0428FFFF0429FFFF042AFFFF042BFFFF042CFFFF042DFFFF042EFFFF042FFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFF0430FFFF0431FFFF0432FFFF0433FFFF0434FFFF0435FFFF0436FFFF0437FFFFFFFFFFFFFFFFFFFF
! FFFF0438FFFF0439043AFFFF043BFFFF043CFFFF043DFFFF043EFFFF043FFFFF0440FFFF0441FFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0442
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFF0443FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF044504440447044604490448044B044A044D044C044F044E0451045004530452
! 045504540457045604590458045B045A045D045C045F045E0461046004630462046504640467046604690468046B046A
! 046D046C046F046E0471047004730472047504740477047604790478047B047A047D047C047F047E0481048004830482
! 048504840487048604890488048B048A048D048C048F048E04910490049304920494FFFF0496049504980497049A0499
! 049C049B049E049D04A0049F04A204A104A404A304A604A504A804A704AA04A904AC04ABFFFF04ADFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 04AF04AE04B104B004B304B204B504B404B704B604B904B804BB04BA04BD04BC04BF04BE04C104C004C304C204C504C4
! 04C704C604C904C804CB04CA04CD04CC04CF04CE04D104D004D304D204D504D4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04D704D604D904D804DB04DA04DD04DC
! 04DF04DE04E104E004E304E204E504E404E704E604E904E804EB04EA04ED04EC04EF04EE04F104F004F304F204F504F4
! 04F704F604F904F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFF04FAFFFF04FC04FB04FE04FD050004FF05020501050405030505FFFF0507050605090508
! 050B050A050D050C050F050E05110510051305120514FFFF0516051505180517051A0519051BFFFFFFFF051CFFFFFFFF
! 051E051D0520051F05220521052405230526052505280527052A0529052C052B052E052D0530052F0532053105340533
! 0536053505380537053A0539053C053B053E053D0540053F05420541054405430546054505480547054A0549054C054B
! 054E054DFFFF054FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05510550055305520555055405570556
! 05590558055B055A055D055C055F055E056105600563056205650564FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 0567056605690568056B056A056D056C056F056E0571057005730572057505740577057605790578057B057A057D057C
! 057F057E058105800583058205850584FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 0587058605890588058B058A058D058C058F058E0591059005930592059505940597059605990598059B059A059D059C
! 059F059E05A105A005A305A205A505A4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05A6FFFF05A805A705AA05A9
+ 05AC05AB05AE05AD05B005AF05B205B105B405B305B605B505B805B705BA05B905BC05BB05BE05BDFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFF05C005BF05C205C105C405C305C605C505C805C705CA05C905CC05CB05CE05CD05D005CF05D205D105D405D3
! 05D605D505D805D705DA05D905DC05DB05DE05DD05E005DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
  );
! //10112 bytes
  enum toLowerSimpleIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x"
  000000000000004000000280",
  x"
! 000001000000048000000EC0",
  x"
  020201000402030206020205070202020202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
*************** x"
*** 4583,4594 ****
  000000000000003600000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000000000000000000000000000000000000000370000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000038000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- 4652,4663 ----
  000000000000003600000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000000000000000000000000000000000000000370000000000380000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000039000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
*************** FFFF0440FFFF0441FFFF0442FFFF0443FFFF0444
*** 4717,4763 ****
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF044CFFFF044DFFFF044EFFFFFFFF044FFFFF0450FFFF0451FFFF0452FFFF0453
  FFFFFFFF0454FFFF0455FFFFFFFFFFFFFFFF0456FFFF0457FFFFFFFFFFFF0458FFFF0459FFFF045AFFFF045BFFFF045C
  FFFF045DFFFF045EFFFF045FFFFF0460FFFF04610463046204650464FFFF046604680467046A0469FFFF046BFFFF046C
! FFFF046DFFFF046EFFFF046FFFFF0470FFFF0471FFFF047204740473047604750477FFFF0478FFFFFFFF0479FFFFFFFF
! FFFF047AFFFFFFFFFFFFFFFFFFFF047BFFFF047CFFFF047DFFFF047EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF047FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0480FFFF04820481048404830486048504880487048A0489048C048B048E048D
! 0490048F04920491049404930496049504980497FFFF0499FFFFFFFFFFFFFFFF049B049A049D049C049F049E04A104A0
! 04A304A204A504A404A704A604A904A804AB04AA04AD04AC04AF04AE04B104B004B304B204B504B404B704B604B904B8
! 04BB04BA04BD04BC04BF04BE04C104C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04C304C204C504C404C704C604C904C804CB04CA04CD04CC04CF04CE04D104D0
! 04D304D204D504D404D704D604D904D804DB04DA04DD04DC04DF04DE04E104E004E304E204E504E4FFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04E704E604E904E804EB04EA04ED04EC
! 04EF04EEFFFF04F004F204F104F404F304F604F504F804F704FA04F904FC04FB04FE04FDFFFF04FF0501050005030502
! 05050504FFFF050605080507FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 050A0509050C050B050E050D0510050F05120511051405130516051505180517051A0519051C051B051E051D0520051F
! 05220521052405230526052505280527052A0529052C052B052E052D0530052F05320531053405330536053505380537
! 053A0539FFFF053BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF053D053C053F053E0541054005430542054505440547054605490548054B054A
! 054D054C054F054E05510550FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05530552055505540557055605590558
! 055B055A055D055C055F055E0561056005630562056505640567056605690568056B056A056D056C056F056E05710570
! 05730572057505740577057605790578057B057A057D057C057F057E0581058005830582058505840587058605890588
! 058B058A058D058C058F058E05910590FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05930592059505940597059605990598
! 059B059A059D059C059F059E05A105A005A305A205A505A405A705A605A905A805AB05AA05AD05AC05AF05AE05B105B0
! 05B305B2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
  );
! //10624 bytes
  enum toTitleSimpleIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x"
  000000000000004000000280",
  x"
! 000001000000048000000FC0",
  x"
  020201000402030206020205070202020202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
--- 4786,4835 ----
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF044CFFFF044DFFFF044EFFFFFFFF044FFFFF0450FFFF0451FFFF0452FFFF0453
  FFFFFFFF0454FFFF0455FFFFFFFFFFFFFFFF0456FFFF0457FFFFFFFFFFFF0458FFFF0459FFFF045AFFFF045BFFFF045C
  FFFF045DFFFF045EFFFF045FFFFF0460FFFF04610463046204650464FFFF046604680467046A0469FFFF046BFFFF046C
! FFFF046DFFFF046EFFFF046FFFFF0470FFFF0471FFFF047204740473047604750477FFFF0478FFFFFFFF0479FFFF047A
! FFFF047BFFFF047CFFFF047DFFFF047EFFFF047FFFFF0480FFFF0481FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0482FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0483FFFF048504840487048604890488048B048A048D048C048F048E04910490
! 04930492049504940497049604990498049B049AFFFF049CFFFFFFFFFFFFFFFF049E049D04A0049F04A204A104A404A3
! 04A604A504A804A704AA04A904AC04AB04AE04AD04B004AF04B204B104B404B304B604B504B804B704BA04B904BC04BB
! 04BE04BD04C004BF04C204C104C404C3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04C604C504C804C704CA04C904CC04CB04CE04CD04D004CF04D204D104D404D3
! 04D604D504D804D704DA04D904DC04DB04DE04DD04E004DF04E204E104E404E304E604E504E804E7FFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04EA04E904EC04EB04EE04ED04F004EF
! 04F204F1FFFF04F304F504F404F704F604F904F804FB04FA04FD04FC04FF04FE05010500FFFF05020504050305060505
! 05080507FFFF0509050B050AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 050D050C050F050E0511051005130512051505140517051605190518051B051A051D051C051F051E0521052005230522
! 052505240527052605290528052B052A052D052C052F052E0531053005330532053505340537053605390538053B053A
! 053D053CFFFF053EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0540053F05420541054405430546054505480547054A0549054C054B054E054D
! 0550054F0552055105540553FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0556055505580557055A0559055C055B
! 055E055D0560055F05620561056405630566056505680567056A0569056C056B056E056D0570056F0572057105740573
! 0576057505780577057A0579057C057B057E057D0580057F05820581058405830586058505880587058A0589058C058B
! 058E058D0590058F0592059105940593FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 0596059505980597059A0599059C059B059E059D05A0059F05A205A105A405A305A605A505A805A705AA05A905AC05AB
! FFFF05ADFFFFFFFFFFFFFFFFFFFFFFFF05AF05AE05B105B005B305B205B505B405B705B605B905B805BB05BA05BD05BC
! 05BF05BE05C105C005C305C205C505C405C705C605C905C805CB05CA05CD05CC05CF05CEFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
  );
! //10880 bytes
  enum toTitleSimpleIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x"
  000000000000004000000280",
  x"
! 000001000000048000001040",
  x"
  020201000402030206020205070202020202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
*************** x"
*** 4798,4809 ****
  00000000003A000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 0000000000000000000000000000000000000000000000000000000000000000003B0000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 0000000000000000003D003C000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- 4870,4881 ----
  00000000003A000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 0000000000000000000000000000000000000000000000000000000000000000003B0000003D003C0000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 0000000000000000003F003E000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
*************** FFFFFFFF03F9FFFF03FAFFFF03FBFFFF03FCFFFF
*** 4938,4986 ****
  0422FFFF0423FFFF0424FFFF0425FFFFFFFFFFFFFFFFFFFFFFFF0426FFFFFFFF0427FFFF0428FFFFFFFF0429042AFFFF
  042BFFFF042CFFFF042DFFFF042EFFFF042FFFFF0430FFFF0431FFFF0432FFFF0433FFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFF0434FFFF0435FFFF0436FFFF0437FFFF0438FFFF0439FFFF043AFFFF043BFFFFFFFFFFFFFFFFFFFF
! FFFF043CFFFF043D043EFFFFFFFFFFFF043FFFFFFFFFFFFFFFFFFFFF0440FFFF0441FFFF0442FFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0443
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFF0444FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0446044504480447044A0449044C044B044E044D0450044F0452045104540453
! 0456045504580457045A0459045C045B045E045D0460045F04620461046404630466046504680467046A0469046C046B
! 046E046D0470046F04720471047404730476047504780477047A0479047C047B047E047D0480047F0482048104840483
! 0486048504880487048A0489048C048B048E048D0490048F04920491049404930495FFFF0497049604990498049B049A
! 049D049C049F049E04A104A004A304A204A504A404A704A604A904A804AB04AA04AD04ACFFFF04AEFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 04B004AF04B204B104B404B304B604B504B804B704BA04B904BC04BB04BE04BD04C004BF04C204C104C404C304C604C5
! 04C804C704CA04C904CC04CB04CE04CD04D004CF04D204D104D404D304D604D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04D804D704DA04D904DC04DB04DE04DD
! 04E004DF04E204E104E404E304E604E504E804E704EA04E904EC04EB04EE04ED04F004EF04F204F104F404F304F604F5
! 04F804F704FA04F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFF04FBFFFF04FD04FC04FF04FE0501050005030502050505040506FFFF05080507050A0509
! 050C050B050E050D0510050F05120511051405130515FFFF0517051605190518051B051A051CFFFFFFFF051DFFFFFFFF
! 051F051E0521052005230522052505240527052605290528052B052A052D052C052F052E053105300533053205350534
! 0537053605390538053B053A053D053C053F053E0541054005430542054505440547054605490548054B054A054D054C
! 054F054EFFFF0550FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05520551055405530556055505580557
! 055A0559055C055B055E055D0560055F056205610564056305660565FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 05680567056A0569056C056B056E056D0570056F05720571057405730576057505780577057A0579057C057B057E057D
! 0580057F058205810584058305860585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 05880587058A0589058C058B058E058D0590058F05920591059405930596059505980597059A0599059C059B059E059D
! 05A0059F05A205A105A405A305A605A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05A805A705AA05A905AC05AB
! 05AE05AD05B005AF05B205B105B405B305B605B505B805B705BA05B905BC05BB05BE05BD05C005BF05C205C105C405C3
! 05C605C505C805C7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
  );
  immutable(uint)[] toUpperTable() nothrow @nogc pure @safe {
  static immutable uint[] t =
--- 5010,5063 ----
  0422FFFF0423FFFF0424FFFF0425FFFFFFFFFFFFFFFFFFFFFFFF0426FFFFFFFF0427FFFF0428FFFFFFFF0429042AFFFF
  042BFFFF042CFFFF042DFFFF042EFFFF042FFFFF0430FFFF0431FFFF0432FFFF0433FFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFF0434FFFF0435FFFF0436FFFF0437FFFF0438FFFF0439FFFF043AFFFF043BFFFFFFFFFFFFFFFFFFFF
! FFFF043CFFFF043D043EFFFF043FFFFF0440FFFF0441FFFF0442FFFF0443FFFF0444FFFF0445FFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0446
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFF0447FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04490448044B044A044D044C044F044E04510450045304520455045404570456
! 04590458045B045A045D045C045F045E0461046004630462046504640467046604690468046B046A046D046C046F046E
! 0471047004730472047504740477047604790478047B047A047D047C047F047E04810480048304820485048404870486
! 04890488048B048A048D048C048F048E049104900493049204950494049704960498FFFF049A0499049C049B049E049D
! 04A0049F04A204A104A404A304A604A504A804A704AA04A904AC04AB04AE04AD04B004AFFFFF04B1FFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 04B304B204B504B404B704B604B904B804BB04BA04BD04BC04BF04BE04C104C004C304C204C504C404C704C604C904C8
! 04CB04CA04CD04CC04CF04CE04D104D004D304D204D504D404D704D604D904D8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04DB04DA04DD04DC04DF04DE04E104E0
! 04E304E204E504E404E704E604E904E804EB04EA04ED04EC04EF04EE04F104F004F304F204F504F404F704F604F904F8
! 04FB04FA04FD04FCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFF04FEFFFF050004FF050205010504050305060505050805070509FFFF050B050A050D050C
! 050F050E051105100513051205150514051705160518FFFF051A0519051C051B051E051D051FFFFFFFFF0520FFFFFFFF
! 05220521052405230526052505280527052A0529052C052B052E052D0530052F05320531053405330536053505380537
! 053A0539053C053B053E053D0540053F05420541054405430546054505480547054A0549054C054B054E054D0550054F
! 05520551FFFF0553FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF055505540557055605590558055B055A
! 055D055C055F055E0561056005630562056505640567056605690568FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 056B056A056D056C056F056E0571057005730572057505740577057605790578057B057A057D057C057F057E05810580
! 05830582058505840587058605890588FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 058B058A058D058C058F058E0591059005930592059505940597059605990598059B059A059D059C059F059E05A105A0
! 05A305A205A505A405A705A605A905A8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05AAFFFF05AC05AB05AE05AD
+ 05B005AF05B205B105B405B305B605B505B805B705BA05B905BC05BB05BE05BD05C005BF05C205C1FFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFF05C405C305C605C505C805C705CA05C905CC05CB05CE05CD05D005CF05D205D105D405D305D605D505D805D7
! 05DA05D905DC05DB05DE05DD05E005DF05E205E105E405E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
  );
  immutable(uint)[] toUpperTable() nothrow @nogc pure @safe {
  static immutable uint[] t =
*************** x"
*** 5075,5132 ****
  0000A7620000A7640000A7660000A7680000A76A0000A76C0000A76E0000A7790000A77B0000A77E0000A7800000A782
  0000A7840000A7860000A78B0000A7900000A7920000A7C40000A7960000A7980000A79A0000A79C0000A79E0000A7A0
  0000A7A20000A7A40000A7A60000A7A80000A7B40000A7B60000A7B80000A7BA0000A7BC0000A7BE0000A7C00000A7C2
! 0000A7C70000A7C90000A7CC0000A7D00000A7D60000A7D80000A7DA0000A7F50000A7B3000013A0000013A1000013A2
! 000013A3000013A4000013A5000013A6000013A7000013A8000013A9000013AA000013AB000013AC000013AD000013AE
! 000013AF000013B0000013B1000013B2000013B3000013B4000013B5000013B6000013B7000013B8000013B9000013BA
! 000013BB000013BC000013BD000013BE000013BF000013C0000013C1000013C2000013C3000013C4000013C5000013C6
! 000013C7000013C8000013C9000013CA000013CB000013CC000013CD000013CE000013CF000013D0000013D1000013D2
! 000013D3000013D4000013D5000013D6000013D7000013D8000013D9000013DA000013DB000013DC000013DD000013DE
! 000013DF000013E0000013E1000013E2000013E3000013E4000013E5000013E6000013E7000013E8000013E9000013EA
! 000013EB000013EC000013ED000013EE000013EF0000FF210000FF220000FF230000FF240000FF250000FF260000FF27
! 0000FF280000FF290000FF2A0000FF2B0000FF2C0000FF2D0000FF2E0000FF2F0000FF300000FF310000FF320000FF33
! 0000FF340000FF350000FF360000FF370000FF380000FF390000FF3A0001040000010401000104020001040300010404
! 00010405000104060001040700010408000104090001040A0001040B0001040C0001040D0001040E0001040F00010410
! 0001041100010412000104130001041400010415000104160001041700010418000104190001041A0001041B0001041C
! 0001041D0001041E0001041F0001042000010421000104220001042300010424000104250001042600010427000104B0
! 000104B1000104B2000104B3000104B4000104B5000104B6000104B7000104B8000104B9000104BA000104BB000104BC
! 000104BD000104BE000104BF000104C0000104C1000104C2000104C3000104C4000104C5000104C6000104C7000104C8
! 000104C9000104CA000104CB000104CC000104CD000104CE000104CF000104D0000104D1000104D2000104D300010570
! 0001057100010572000105730001057400010575000105760001057700010578000105790001057A0001057C0001057D
! 0001057E0001057F00010580000105810001058200010583000105840001058500010586000105870001058800010589
! 0001058A0001058C0001058D0001058E0001058F000105900001059100010592000105940001059500010C8000010C81
! 00010C8200010C8300010C8400010C8500010C8600010C8700010C8800010C8900010C8A00010C8B00010C8C00010C8D
! 00010C8E00010C8F00010C9000010C9100010C9200010C9300010C9400010C9500010C9600010C9700010C9800010C99
! 00010C9A00010C9B00010C9C00010C9D00010C9E00010C9F00010CA000010CA100010CA200010CA300010CA400010CA5
! 00010CA600010CA700010CA800010CA900010CAA00010CAB00010CAC00010CAD00010CAE00010CAF00010CB000010CB1
! 00010CB200010D5000010D5100010D5200010D5300010D5400010D5500010D5600010D5700010D5800010D5900010D5A
! 00010D5B00010D5C00010D5D00010D5E00010D5F00010D6000010D6100010D6200010D6300010D6400010D65000118A0
! 000118A1000118A2000118A3000118A4000118A5000118A6000118A7000118A8000118A9000118AA000118AB000118AC
! 000118AD000118AE000118AF000118B0000118B1000118B2000118B3000118B4000118B5000118B6000118B7000118B8
! 000118B9000118BA000118BB000118BC000118BD000118BE000118BF00016E4000016E4100016E4200016E4300016E44
! 00016E4500016E4600016E4700016E4800016E4900016E4A00016E4B00016E4C00016E4D00016E4E00016E4F00016E50
! 00016E5100016E5200016E5300016E5400016E5500016E5600016E5700016E5800016E5900016E5A00016E5B00016E5C
! 00016E5D00016E5E00016E5F0001E9000001E9010001E9020001E9030001E9040001E9050001E9060001E9070001E908
! 0001E9090001E90A0001E90B0001E90C0001E90D0001E90E0001E90F0001E9100001E9110001E9120001E9130001E914
! 0001E9150001E9160001E9170001E9180001E9190001E91A0001E91B0001E91C0001E91D0001E91E0001E91F0001E920
! 0001E92102000053000000530000013002000046000000460200004600000049020000460000004C0300004600000046
! 0000004903000046000000460000004C0200005300000054020000530000005402000535000005520200054400000546
! 0200054400000535020005440000053B0200054E00000546020005440000053D020002BC0000004E0300039900000308
! 00000301030003A500000308000003010200004A0000030C02000048000003310200005400000308020000570000030A
! 020000590000030A02000041000002BE020003A500000313030003A50000031300000300030003A50000031300000301
! 030003A50000031300000342020003910000034202000397000003420300039900000308000003000300039900000308
! 000003010200039900000342030003990000030800000342030003A50000030800000300030003A50000030800000301
! 020003A100000313020003A500000342030003A50000030800000342020003A90000034202001F080000039902001F09
! 0000039902001F0A0000039902001F0B0000039902001F0C0000039902001F0D0000039902001F0E0000039902001F0F
! 0000039902001F080000039902001F090000039902001F0A0000039902001F0B0000039902001F0C0000039902001F0D
! 0000039902001F0E0000039902001F0F0000039902001F280000039902001F290000039902001F2A0000039902001F2B
! 0000039902001F2C0000039902001F2D0000039902001F2E0000039902001F2F0000039902001F280000039902001F29
  0000039902001F2A0000039902001F2B0000039902001F2C0000039902001F2D0000039902001F2E0000039902001F2F
! 0000039902001F680000039902001F690000039902001F6A0000039902001F6B0000039902001F6C0000039902001F6D
! 0000039902001F6E0000039902001F6F0000039902001F680000039902001F690000039902001F6A0000039902001F6B
! 0000039902001F6C0000039902001F6D0000039902001F6E0000039902001F6F00000399020003910000039902000391
! 0000039902000397000003990200039700000399020003A900000399020003A90000039902001FBA0000039902000386
! 0000039902001FCA00000399020003890000039902001FFA000003990200038F00000399030003910000034200000399
! 030003970000034200000399030003A90000034200000399";
  return t;
  }
  immutable(uint)[] toLowerTable() nothrow @nogc pure @safe {
--- 5152,5211 ----
  0000A7620000A7640000A7660000A7680000A76A0000A76C0000A76E0000A7790000A77B0000A77E0000A7800000A782
  0000A7840000A7860000A78B0000A7900000A7920000A7C40000A7960000A7980000A79A0000A79C0000A79E0000A7A0
  0000A7A20000A7A40000A7A60000A7A80000A7B40000A7B60000A7B80000A7BA0000A7BC0000A7BE0000A7C00000A7C2
! 0000A7C70000A7C90000A7CC0000A7CE0000A7D00000A7D20000A7D40000A7D60000A7D80000A7DA0000A7F50000A7B3
! 000013A0000013A1000013A2000013A3000013A4000013A5000013A6000013A7000013A8000013A9000013AA000013AB
! 000013AC000013AD000013AE000013AF000013B0000013B1000013B2000013B3000013B4000013B5000013B6000013B7
! 000013B8000013B9000013BA000013BB000013BC000013BD000013BE000013BF000013C0000013C1000013C2000013C3
! 000013C4000013C5000013C6000013C7000013C8000013C9000013CA000013CB000013CC000013CD000013CE000013CF
! 000013D0000013D1000013D2000013D3000013D4000013D5000013D6000013D7000013D8000013D9000013DA000013DB
! 000013DC000013DD000013DE000013DF000013E0000013E1000013E2000013E3000013E4000013E5000013E6000013E7
! 000013E8000013E9000013EA000013EB000013EC000013ED000013EE000013EF0000FF210000FF220000FF230000FF24
! 0000FF250000FF260000FF270000FF280000FF290000FF2A0000FF2B0000FF2C0000FF2D0000FF2E0000FF2F0000FF30
! 0000FF310000FF320000FF330000FF340000FF350000FF360000FF370000FF380000FF390000FF3A0001040000010401
! 00010402000104030001040400010405000104060001040700010408000104090001040A0001040B0001040C0001040D
! 0001040E0001040F00010410000104110001041200010413000104140001041500010416000104170001041800010419
! 0001041A0001041B0001041C0001041D0001041E0001041F000104200001042100010422000104230001042400010425
! 0001042600010427000104B0000104B1000104B2000104B3000104B4000104B5000104B6000104B7000104B8000104B9
! 000104BA000104BB000104BC000104BD000104BE000104BF000104C0000104C1000104C2000104C3000104C4000104C5
! 000104C6000104C7000104C8000104C9000104CA000104CB000104CC000104CD000104CE000104CF000104D0000104D1
! 000104D2000104D300010570000105710001057200010573000105740001057500010576000105770001057800010579
! 0001057A0001057C0001057D0001057E0001057F00010580000105810001058200010583000105840001058500010586
! 0001058700010588000105890001058A0001058C0001058D0001058E0001058F00010590000105910001059200010594
! 0001059500010C8000010C8100010C8200010C8300010C8400010C8500010C8600010C8700010C8800010C8900010C8A
! 00010C8B00010C8C00010C8D00010C8E00010C8F00010C9000010C9100010C9200010C9300010C9400010C9500010C96
! 00010C9700010C9800010C9900010C9A00010C9B00010C9C00010C9D00010C9E00010C9F00010CA000010CA100010CA2
! 00010CA300010CA400010CA500010CA600010CA700010CA800010CA900010CAA00010CAB00010CAC00010CAD00010CAE
! 00010CAF00010CB000010CB100010CB200010D5000010D5100010D5200010D5300010D5400010D5500010D5600010D57
! 00010D5800010D5900010D5A00010D5B00010D5C00010D5D00010D5E00010D5F00010D6000010D6100010D6200010D63
! 00010D6400010D65000118A0000118A1000118A2000118A3000118A4000118A5000118A6000118A7000118A8000118A9
! 000118AA000118AB000118AC000118AD000118AE000118AF000118B0000118B1000118B2000118B3000118B4000118B5
! 000118B6000118B7000118B8000118B9000118BA000118BB000118BC000118BD000118BE000118BF00016E4000016E41
! 00016E4200016E4300016E4400016E4500016E4600016E4700016E4800016E4900016E4A00016E4B00016E4C00016E4D
! 00016E4E00016E4F00016E5000016E5100016E5200016E5300016E5400016E5500016E5600016E5700016E5800016E59
! 00016E5A00016E5B00016E5C00016E5D00016E5E00016E5F00016EA000016EA100016EA200016EA300016EA400016EA5
! 00016EA600016EA700016EA800016EA900016EAA00016EAB00016EAC00016EAD00016EAE00016EAF00016EB000016EB1
! 00016EB200016EB300016EB400016EB500016EB600016EB700016EB80001E9000001E9010001E9020001E9030001E904
! 0001E9050001E9060001E9070001E9080001E9090001E90A0001E90B0001E90C0001E90D0001E90E0001E90F0001E910
! 0001E9110001E9120001E9130001E9140001E9150001E9160001E9170001E9180001E9190001E91A0001E91B0001E91C
! 0001E91D0001E91E0001E91F0001E9200001E92102000053000000530000013002000046000000460200004600000049
! 020000460000004C03000046000000460000004903000046000000460000004C02000053000000540200005300000054
! 020005350000055202000544000005460200054400000535020005440000053B0200054E00000546020005440000053D
! 020002BC0000004E030003990000030800000301030003A500000308000003010200004A0000030C0200004800000331
! 0200005400000308020000570000030A020000590000030A02000041000002BE020003A500000313030003A500000313
! 00000300030003A50000031300000301030003A500000313000003420200039100000342020003970000034203000399
! 00000308000003000300039900000308000003010200039900000342030003990000030800000342030003A500000308
! 00000300030003A50000030800000301020003A100000313020003A500000342030003A50000030800000342020003A9
! 0000034202001F080000039902001F090000039902001F0A0000039902001F0B0000039902001F0C0000039902001F0D
! 0000039902001F0E0000039902001F0F0000039902001F080000039902001F090000039902001F0A0000039902001F0B
! 0000039902001F0C0000039902001F0D0000039902001F0E0000039902001F0F0000039902001F280000039902001F29
  0000039902001F2A0000039902001F2B0000039902001F2C0000039902001F2D0000039902001F2E0000039902001F2F
! 0000039902001F280000039902001F290000039902001F2A0000039902001F2B0000039902001F2C0000039902001F2D
! 0000039902001F2E0000039902001F2F0000039902001F680000039902001F690000039902001F6A0000039902001F6B
! 0000039902001F6C0000039902001F6D0000039902001F6E0000039902001F6F0000039902001F680000039902001F69
! 0000039902001F6A0000039902001F6B0000039902001F6C0000039902001F6D0000039902001F6E0000039902001F6F
! 000003990200039100000399020003910000039902000397000003990200039700000399020003A900000399020003A9
! 0000039902001FBA00000399020003860000039902001FCA00000399020003890000039902001FFA000003990200038F
! 00000399030003910000034200000399030003970000034200000399030003A90000034200000399";
  return t;
  }
  immutable(uint)[] toLowerTable() nothrow @nogc pure @safe {
*************** x"
*** 5227,5268 ****
  0000A7810000A7830000A7850000A7870000A78C000002650000A7910000A7930000A7970000A7990000A79B0000A79D
  0000A79F0000A7A10000A7A30000A7A50000A7A70000A7A9000002660000025C000002610000026C0000026A0000029E
  000002870000029D0000AB530000A7B50000A7B70000A7B90000A7BB0000A7BD0000A7BF0000A7C10000A7C30000A794
! 0000028200001D8E0000A7C80000A7CA000002640000A7CD0000A7D10000A7D70000A7D90000A7DB0000019B0000A7F6
! 0000FF410000FF420000FF430000FF440000FF450000FF460000FF470000FF480000FF490000FF4A0000FF4B0000FF4C
! 0000FF4D0000FF4E0000FF4F0000FF500000FF510000FF520000FF530000FF540000FF550000FF560000FF570000FF58
! 0000FF590000FF5A00010428000104290001042A0001042B0001042C0001042D0001042E0001042F0001043000010431
! 00010432000104330001043400010435000104360001043700010438000104390001043A0001043B0001043C0001043D
! 0001043E0001043F00010440000104410001044200010443000104440001044500010446000104470001044800010449
! 0001044A0001044B0001044C0001044D0001044E0001044F000104D8000104D9000104DA000104DB000104DC000104DD
! 000104DE000104DF000104E0000104E1000104E2000104E3000104E4000104E5000104E6000104E7000104E8000104E9
! 000104EA000104EB000104EC000104ED000104EE000104EF000104F0000104F1000104F2000104F3000104F4000104F5
! 000104F6000104F7000104F8000104F9000104FA000104FB0001059700010598000105990001059A0001059B0001059C
! 0001059D0001059E0001059F000105A0000105A1000105A3000105A4000105A5000105A6000105A7000105A8000105A9
! 000105AA000105AB000105AC000105AD000105AE000105AF000105B0000105B1000105B3000105B4000105B5000105B6
! 000105B7000105B8000105B9000105BB000105BC00010CC000010CC100010CC200010CC300010CC400010CC500010CC6
! 00010CC700010CC800010CC900010CCA00010CCB00010CCC00010CCD00010CCE00010CCF00010CD000010CD100010CD2
! 00010CD300010CD400010CD500010CD600010CD700010CD800010CD900010CDA00010CDB00010CDC00010CDD00010CDE
! 00010CDF00010CE000010CE100010CE200010CE300010CE400010CE500010CE600010CE700010CE800010CE900010CEA
! 00010CEB00010CEC00010CED00010CEE00010CEF00010CF000010CF100010CF200010D7000010D7100010D7200010D73
! 00010D7400010D7500010D7600010D7700010D7800010D7900010D7A00010D7B00010D7C00010D7D00010D7E00010D7F
! 00010D8000010D8100010D8200010D8300010D8400010D85000118C0000118C1000118C2000118C3000118C4000118C5
! 000118C6000118C7000118C8000118C9000118CA000118CB000118CC000118CD000118CE000118CF000118D0000118D1
! 000118D2000118D3000118D4000118D5000118D6000118D7000118D8000118D9000118DA000118DB000118DC000118DD
! 000118DE000118DF00016E6000016E6100016E6200016E6300016E6400016E6500016E6600016E6700016E6800016E69
! 00016E6A00016E6B00016E6C00016E6D00016E6E00016E6F00016E7000016E7100016E7200016E7300016E7400016E75
! 00016E7600016E7700016E7800016E7900016E7A00016E7B00016E7C00016E7D00016E7E00016E7F0001E9220001E923
! 0001E9240001E9250001E9260001E9270001E9280001E9290001E92A0001E92B0001E92C0001E92D0001E92E0001E92F
! 0001E9300001E9310001E9320001E9330001E9340001E9350001E9360001E9370001E9380001E9390001E93A0001E93B
! 0001E93C0001E93D0001E93E0001E93F0001E9400001E9410001E9420001E943000000DF02000069000003070000FB00
! 0000FB010000FB020000FB030000FB040000FB050000FB06000005870000FB130000FB140000FB150000FB160000FB17
! 0000014900000390000003B0000001F000001E9600001E9700001E9800001E9900001E9A00001F5000001F5200001F54
! 00001F5600001FB600001FC600001FD200001FD300001FD600001FD700001FE200001FE300001FE400001FE600001FE7
! 00001FF600001F8000001F8100001F8200001F8300001F8400001F8500001F8600001F8700001F8000001F8100001F82
! 00001F8300001F8400001F8500001F8600001F8700001F9000001F9100001F9200001F9300001F9400001F9500001F96
! 00001F9700001F9000001F9100001F9200001F9300001F9400001F9500001F9600001F9700001FA000001FA100001FA2
! 00001FA300001FA400001FA500001FA600001FA700001FA000001FA100001FA200001FA300001FA400001FA500001FA6
! 00001FA700001FB300001FB300001FC300001FC300001FF300001FF300001FB200001FB400001FC200001FC400001FF2
! 00001FF400001FB700001FC700001FF7";
  return t;
  }
  immutable(uint)[] toTitleTable() nothrow @nogc pure @safe {
--- 5306,5349 ----
  0000A7810000A7830000A7850000A7870000A78C000002650000A7910000A7930000A7970000A7990000A79B0000A79D
  0000A79F0000A7A10000A7A30000A7A50000A7A70000A7A9000002660000025C000002610000026C0000026A0000029E
  000002870000029D0000AB530000A7B50000A7B70000A7B90000A7BB0000A7BD0000A7BF0000A7C10000A7C30000A794
! 0000028200001D8E0000A7C80000A7CA000002640000A7CD0000A7CF0000A7D10000A7D30000A7D50000A7D70000A7D9
! 0000A7DB0000019B0000A7F60000FF410000FF420000FF430000FF440000FF450000FF460000FF470000FF480000FF49
! 0000FF4A0000FF4B0000FF4C0000FF4D0000FF4E0000FF4F0000FF500000FF510000FF520000FF530000FF540000FF55
! 0000FF560000FF570000FF580000FF590000FF5A00010428000104290001042A0001042B0001042C0001042D0001042E
! 0001042F000104300001043100010432000104330001043400010435000104360001043700010438000104390001043A
! 0001043B0001043C0001043D0001043E0001043F00010440000104410001044200010443000104440001044500010446
! 0001044700010448000104490001044A0001044B0001044C0001044D0001044E0001044F000104D8000104D9000104DA
! 000104DB000104DC000104DD000104DE000104DF000104E0000104E1000104E2000104E3000104E4000104E5000104E6
! 000104E7000104E8000104E9000104EA000104EB000104EC000104ED000104EE000104EF000104F0000104F1000104F2
! 000104F3000104F4000104F5000104F6000104F7000104F8000104F9000104FA000104FB000105970001059800010599
! 0001059A0001059B0001059C0001059D0001059E0001059F000105A0000105A1000105A3000105A4000105A5000105A6
! 000105A7000105A8000105A9000105AA000105AB000105AC000105AD000105AE000105AF000105B0000105B1000105B3
! 000105B4000105B5000105B6000105B7000105B8000105B9000105BB000105BC00010CC000010CC100010CC200010CC3
! 00010CC400010CC500010CC600010CC700010CC800010CC900010CCA00010CCB00010CCC00010CCD00010CCE00010CCF
! 00010CD000010CD100010CD200010CD300010CD400010CD500010CD600010CD700010CD800010CD900010CDA00010CDB
! 00010CDC00010CDD00010CDE00010CDF00010CE000010CE100010CE200010CE300010CE400010CE500010CE600010CE7
! 00010CE800010CE900010CEA00010CEB00010CEC00010CED00010CEE00010CEF00010CF000010CF100010CF200010D70
! 00010D7100010D7200010D7300010D7400010D7500010D7600010D7700010D7800010D7900010D7A00010D7B00010D7C
! 00010D7D00010D7E00010D7F00010D8000010D8100010D8200010D8300010D8400010D85000118C0000118C1000118C2
! 000118C3000118C4000118C5000118C6000118C7000118C8000118C9000118CA000118CB000118CC000118CD000118CE
! 000118CF000118D0000118D1000118D2000118D3000118D4000118D5000118D6000118D7000118D8000118D9000118DA
! 000118DB000118DC000118DD000118DE000118DF00016E6000016E6100016E6200016E6300016E6400016E6500016E66
! 00016E6700016E6800016E6900016E6A00016E6B00016E6C00016E6D00016E6E00016E6F00016E7000016E7100016E72
! 00016E7300016E7400016E7500016E7600016E7700016E7800016E7900016E7A00016E7B00016E7C00016E7D00016E7E
! 00016E7F00016EBB00016EBC00016EBD00016EBE00016EBF00016EC000016EC100016EC200016EC300016EC400016EC5
! 00016EC600016EC700016EC800016EC900016ECA00016ECB00016ECC00016ECD00016ECE00016ECF00016ED000016ED1
! 00016ED200016ED30001E9220001E9230001E9240001E9250001E9260001E9270001E9280001E9290001E92A0001E92B
! 0001E92C0001E92D0001E92E0001E92F0001E9300001E9310001E9320001E9330001E9340001E9350001E9360001E937
! 0001E9380001E9390001E93A0001E93B0001E93C0001E93D0001E93E0001E93F0001E9400001E9410001E9420001E943
! 000000DF02000069000003070000FB000000FB010000FB020000FB030000FB040000FB050000FB06000005870000FB13
! 0000FB140000FB150000FB160000FB170000014900000390000003B0000001F000001E9600001E9700001E9800001E99
! 00001E9A00001F5000001F5200001F5400001F5600001FB600001FC600001FD200001FD300001FD600001FD700001FE2
! 00001FE300001FE400001FE600001FE700001FF600001F8000001F8100001F8200001F8300001F8400001F8500001F86
! 00001F8700001F8000001F8100001F8200001F8300001F8400001F8500001F8600001F8700001F9000001F9100001F92
! 00001F9300001F9400001F9500001F9600001F9700001F9000001F9100001F9200001F9300001F9400001F9500001F96
! 00001F9700001FA000001FA100001FA200001FA300001FA400001FA500001FA600001FA700001FA000001FA100001FA2
! 00001FA300001FA400001FA500001FA600001FA700001FB300001FB300001FC300001FC300001FF300001FF300001FB2
! 00001FB400001FC200001FC400001FF200001FF400001FB700001FC700001FF7";
  return t;
  }
  immutable(uint)[] toTitleTable() nothrow @nogc pure @safe {
*************** x"
*** 5358,5411 ****
  0000A75A0000A75C0000A75E0000A7600000A7620000A7640000A7660000A7680000A76A0000A76C0000A76E0000A779
  0000A77B0000A77E0000A7800000A7820000A7840000A7860000A78B0000A7900000A7920000A7C40000A7960000A798
  0000A79A0000A79C0000A79E0000A7A00000A7A20000A7A40000A7A60000A7A80000A7B40000A7B60000A7B80000A7BA
! 0000A7BC0000A7BE0000A7C00000A7C20000A7C70000A7C90000A7CC0000A7D00000A7D60000A7D80000A7DA0000A7F5
! 0000A7B3000013A0000013A1000013A2000013A3000013A4000013A5000013A6000013A7000013A8000013A9000013AA
! 000013AB000013AC000013AD000013AE000013AF000013B0000013B1000013B2000013B3000013B4000013B5000013B6
! 000013B7000013B8000013B9000013BA000013BB000013BC000013BD000013BE000013BF000013C0000013C1000013C2
! 000013C3000013C4000013C5000013C6000013C7000013C8000013C9000013CA000013CB000013CC000013CD000013CE
! 000013CF000013D0000013D1000013D2000013D3000013D4000013D5000013D6000013D7000013D8000013D9000013DA
! 000013DB000013DC000013DD000013DE000013DF000013E0000013E1000013E2000013E3000013E4000013E5000013E6
! 000013E7000013E8000013E9000013EA000013EB000013EC000013ED000013EE000013EF0000FF210000FF220000FF23
! 0000FF240000FF250000FF260000FF270000FF280000FF290000FF2A0000FF2B0000FF2C0000FF2D0000FF2E0000FF2F
! 0000FF300000FF310000FF320000FF330000FF340000FF350000FF360000FF370000FF380000FF390000FF3A00010400
! 0001040100010402000104030001040400010405000104060001040700010408000104090001040A0001040B0001040C
! 0001040D0001040E0001040F000104100001041100010412000104130001041400010415000104160001041700010418
! 000104190001041A0001041B0001041C0001041D0001041E0001041F0001042000010421000104220001042300010424
! 000104250001042600010427000104B0000104B1000104B2000104B3000104B4000104B5000104B6000104B7000104B8
! 000104B9000104BA000104BB000104BC000104BD000104BE000104BF000104C0000104C1000104C2000104C3000104C4
! 000104C5000104C6000104C7000104C8000104C9000104CA000104CB000104CC000104CD000104CE000104CF000104D0
! 000104D1000104D2000104D3000105700001057100010572000105730001057400010575000105760001057700010578
! 000105790001057A0001057C0001057D0001057E0001057F000105800001058100010582000105830001058400010585
! 000105860001058700010588000105890001058A0001058C0001058D0001058E0001058F000105900001059100010592
! 000105940001059500010C8000010C8100010C8200010C8300010C8400010C8500010C8600010C8700010C8800010C89
! 00010C8A00010C8B00010C8C00010C8D00010C8E00010C8F00010C9000010C9100010C9200010C9300010C9400010C95
! 00010C9600010C9700010C9800010C9900010C9A00010C9B00010C9C00010C9D00010C9E00010C9F00010CA000010CA1
! 00010CA200010CA300010CA400010CA500010CA600010CA700010CA800010CA900010CAA00010CAB00010CAC00010CAD
! 00010CAE00010CAF00010CB000010CB100010CB200010D5000010D5100010D5200010D5300010D5400010D5500010D56
! 00010D5700010D5800010D5900010D5A00010D5B00010D5C00010D5D00010D5E00010D5F00010D6000010D6100010D62
! 00010D6300010D6400010D65000118A0000118A1000118A2000118A3000118A4000118A5000118A6000118A7000118A8
! 000118A9000118AA000118AB000118AC000118AD000118AE000118AF000118B0000118B1000118B2000118B3000118B4
! 000118B5000118B6000118B7000118B8000118B9000118BA000118BB000118BC000118BD000118BE000118BF00016E40
! 00016E4100016E4200016E4300016E4400016E4500016E4600016E4700016E4800016E4900016E4A00016E4B00016E4C
! 00016E4D00016E4E00016E4F00016E5000016E5100016E5200016E5300016E5400016E5500016E5600016E5700016E58
! 00016E5900016E5A00016E5B00016E5C00016E5D00016E5E00016E5F0001E9000001E9010001E9020001E9030001E904
! 0001E9050001E9060001E9070001E9080001E9090001E90A0001E90B0001E90C0001E90D0001E90E0001E90F0001E910
! 0001E9110001E9120001E9130001E9140001E9150001E9160001E9170001E9180001E9190001E91A0001E91B0001E91C
! 0001E91D0001E91E0001E91F0001E9200001E92102000053000000730000013002000046000000660200004600000069
! 020000460000006C03000046000000660000006903000046000000660000006C02000053000000740200005300000074
! 020005350000058202000544000005760200054400000565020005440000056B0200054E00000576020005440000056D
! 020002BC0000004E030003990000030800000301030003A500000308000003010200004A0000030C0200004800000331
! 0200005400000308020000570000030A020000590000030A02000041000002BE020003A500000313030003A500000313
! 00000300030003A50000031300000301030003A500000313000003420200039100000342020003970000034203000399
! 00000308000003000300039900000308000003010200039900000342030003990000030800000342030003A500000308
! 00000300030003A50000030800000301020003A100000313020003A500000342030003A50000030800000342020003A9
! 0000034200001F8800001F8900001F8A00001F8B00001F8C00001F8D00001F8E00001F8F00001F8800001F8900001F8A
! 00001F8B00001F8C00001F8D00001F8E00001F8F00001F9800001F9900001F9A00001F9B00001F9C00001F9D00001F9E
! 00001F9F00001F9800001F9900001F9A00001F9B00001F9C00001F9D00001F9E00001F9F00001FA800001FA900001FAA
! 00001FAB00001FAC00001FAD00001FAE00001FAF00001FA800001FA900001FAA00001FAB00001FAC00001FAD00001FAE
! 00001FAF00001FBC00001FBC00001FCC00001FCC00001FFC00001FFC02001FBA00000345020003860000034502001FCA
! 00000345020003890000034502001FFA000003450200038F000003450300039100000342000003450300039700000342
! 00000345030003A90000034200000345";
  return t;
  }
  
--- 5439,5494 ----
  0000A75A0000A75C0000A75E0000A7600000A7620000A7640000A7660000A7680000A76A0000A76C0000A76E0000A779
  0000A77B0000A77E0000A7800000A7820000A7840000A7860000A78B0000A7900000A7920000A7C40000A7960000A798
  0000A79A0000A79C0000A79E0000A7A00000A7A20000A7A40000A7A60000A7A80000A7B40000A7B60000A7B80000A7BA
! 0000A7BC0000A7BE0000A7C00000A7C20000A7C70000A7C90000A7CC0000A7CE0000A7D00000A7D20000A7D40000A7D6
! 0000A7D80000A7DA0000A7F50000A7B3000013A0000013A1000013A2000013A3000013A4000013A5000013A6000013A7
! 000013A8000013A9000013AA000013AB000013AC000013AD000013AE000013AF000013B0000013B1000013B2000013B3
! 000013B4000013B5000013B6000013B7000013B8000013B9000013BA000013BB000013BC000013BD000013BE000013BF
! 000013C0000013C1000013C2000013C3000013C4000013C5000013C6000013C7000013C8000013C9000013CA000013CB
! 000013CC000013CD000013CE000013CF000013D0000013D1000013D2000013D3000013D4000013D5000013D6000013D7
! 000013D8000013D9000013DA000013DB000013DC000013DD000013DE000013DF000013E0000013E1000013E2000013E3
! 000013E4000013E5000013E6000013E7000013E8000013E9000013EA000013EB000013EC000013ED000013EE000013EF
! 0000FF210000FF220000FF230000FF240000FF250000FF260000FF270000FF280000FF290000FF2A0000FF2B0000FF2C
! 0000FF2D0000FF2E0000FF2F0000FF300000FF310000FF320000FF330000FF340000FF350000FF360000FF370000FF38
! 0000FF390000FF3A00010400000104010001040200010403000104040001040500010406000104070001040800010409
! 0001040A0001040B0001040C0001040D0001040E0001040F000104100001041100010412000104130001041400010415
! 000104160001041700010418000104190001041A0001041B0001041C0001041D0001041E0001041F0001042000010421
! 000104220001042300010424000104250001042600010427000104B0000104B1000104B2000104B3000104B4000104B5
! 000104B6000104B7000104B8000104B9000104BA000104BB000104BC000104BD000104BE000104BF000104C0000104C1
! 000104C2000104C3000104C4000104C5000104C6000104C7000104C8000104C9000104CA000104CB000104CC000104CD
! 000104CE000104CF000104D0000104D1000104D2000104D3000105700001057100010572000105730001057400010575
! 000105760001057700010578000105790001057A0001057C0001057D0001057E0001057F000105800001058100010582
! 000105830001058400010585000105860001058700010588000105890001058A0001058C0001058D0001058E0001058F
! 000105900001059100010592000105940001059500010C8000010C8100010C8200010C8300010C8400010C8500010C86
! 00010C8700010C8800010C8900010C8A00010C8B00010C8C00010C8D00010C8E00010C8F00010C9000010C9100010C92
! 00010C9300010C9400010C9500010C9600010C9700010C9800010C9900010C9A00010C9B00010C9C00010C9D00010C9E
! 00010C9F00010CA000010CA100010CA200010CA300010CA400010CA500010CA600010CA700010CA800010CA900010CAA
! 00010CAB00010CAC00010CAD00010CAE00010CAF00010CB000010CB100010CB200010D5000010D5100010D5200010D53
! 00010D5400010D5500010D5600010D5700010D5800010D5900010D5A00010D5B00010D5C00010D5D00010D5E00010D5F
! 00010D6000010D6100010D6200010D6300010D6400010D65000118A0000118A1000118A2000118A3000118A4000118A5
! 000118A6000118A7000118A8000118A9000118AA000118AB000118AC000118AD000118AE000118AF000118B0000118B1
! 000118B2000118B3000118B4000118B5000118B6000118B7000118B8000118B9000118BA000118BB000118BC000118BD
! 000118BE000118BF00016E4000016E4100016E4200016E4300016E4400016E4500016E4600016E4700016E4800016E49
! 00016E4A00016E4B00016E4C00016E4D00016E4E00016E4F00016E5000016E5100016E5200016E5300016E5400016E55
! 00016E5600016E5700016E5800016E5900016E5A00016E5B00016E5C00016E5D00016E5E00016E5F00016EA000016EA1
! 00016EA200016EA300016EA400016EA500016EA600016EA700016EA800016EA900016EAA00016EAB00016EAC00016EAD
! 00016EAE00016EAF00016EB000016EB100016EB200016EB300016EB400016EB500016EB600016EB700016EB80001E900
! 0001E9010001E9020001E9030001E9040001E9050001E9060001E9070001E9080001E9090001E90A0001E90B0001E90C
! 0001E90D0001E90E0001E90F0001E9100001E9110001E9120001E9130001E9140001E9150001E9160001E9170001E918
! 0001E9190001E91A0001E91B0001E91C0001E91D0001E91E0001E91F0001E9200001E921020000530000007300000130
! 02000046000000660200004600000069020000460000006C03000046000000660000006903000046000000660000006C
! 02000053000000740200005300000074020005350000058202000544000005760200054400000565020005440000056B
! 0200054E00000576020005440000056D020002BC0000004E030003990000030800000301030003A50000030800000301
! 0200004A0000030C02000048000003310200005400000308020000570000030A020000590000030A02000041000002BE
! 020003A500000313030003A50000031300000300030003A50000031300000301030003A5000003130000034202000391
! 000003420200039700000342030003990000030800000300030003990000030800000301020003990000034203000399
! 0000030800000342030003A50000030800000300030003A50000030800000301020003A100000313020003A500000342
! 030003A50000030800000342020003A90000034200001F8800001F8900001F8A00001F8B00001F8C00001F8D00001F8E
! 00001F8F00001F8800001F8900001F8A00001F8B00001F8C00001F8D00001F8E00001F8F00001F9800001F9900001F9A
! 00001F9B00001F9C00001F9D00001F9E00001F9F00001F9800001F9900001F9A00001F9B00001F9C00001F9D00001F9E
! 00001F9F00001FA800001FA900001FAA00001FAB00001FAC00001FAD00001FAE00001FAF00001FA800001FA900001FAA
! 00001FAB00001FAC00001FAD00001FAE00001FAF00001FBC00001FBC00001FCC00001FCC00001FFC00001FFC02001FBA
! 00000345020003860000034502001FCA00000345020003890000034502001FFA000003450200038F0000034503000391
! 0000034200000345030003970000034200000345030003A90000034200000345";
  return t;
  }
  
*************** x"
*** 5440,5446 ****
  000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006
  0006000600060006000600060006000600060006000600060006000600060006000000000000000007FFFFFE00000000
  0420040000000000FF7FFFFF8000000055AAAAAAAAAAAAAAD4AAAAAAAAAAAB55E6512D2A4E243129AA29AAAAB5555240
! 93FAAAAAAAAAAAAAFFFFFFFFFFFFAA8501FFFFFFFFEFFFFF0000001F0000000300000000000000003C8A000000000020
  FFFFF00000010000192FAAAAAAE37FFFFFFF000000000000AAAAAAAAFFFFFFFFAAAAAAAAAAAAA802AAAAAAAAAAAAD554
  0000AAAAAAAAAAAAFFFFFFFF0000000000000000000001FF000000000000000000000000000000000000000000000000
  00000000000000000000000000000000000000000000000000000000000000000000000000000000F7FFFFFFFFFF0000
--- 5523,5529 ----
  000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006
  0006000600060006000600060006000600060006000600060006000600060006000000000000000007FFFFFE00000000
  0420040000000000FF7FFFFF8000000055AAAAAAAAAAAAAAD4AAAAAAAAAAAB55E6512D2A4E243129AA29AAAAB5555240
! 93FAAAAAAAAAAAAAFFFFFFFFFFFFAA8501FFFFFFFFCFFFFF0000001F0000000300000000000000003C8A000000000020
  FFFFF00000010000192FAAAAAAE37FFFFFFF000000000000AAAAAAAAFFFFFFFFAAAAAAAAAAAAA802AAAAAAAAAAAAD554
  0000AAAAAAAAAAAAFFFFFFFF0000000000000000000001FF000000000000000000000000000000000000000000000000
  00000000000000000000000000000000000000000000000000000000000000000000000000000000F7FFFFFFFFFF0000
*************** AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
*** 5451,5464 ****
  321080000008C400FFFF0000000043C00000000000000010000000000000000000000000000000000000000000000000
  0000000000000000000003FFFFFF0000FFFF0000000000003FDA1562FFFFFFFFAAAAAAAAAAAAAAAA0008501AAAAAAAAA
  000020BFFFFFFFFF000000000000000000000000000000000000000000000000000000000000000000002AAAAAAAAAAA
! 000000003AAAAAAA0000000000000000AAABAAA80000000095FFAAAAAAAAAAAAAAA082AAAABA50AA075C00000AAA250A
  FFFF000000000000FFFF03FFF7FFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000F8007F0000000000000000
  0000000000000000000000000000000000000000000000000000000007FFFFFE00000000000000000000000000000000
  FFFFFF0000000000000000000000FFFF00000000000000000FFFFFFFFF00000000000000000000000000000000000000
  1BFBFFFBFF80000000000000000000000000000000000000000000000000000007FDFFFFFFFFFFB90000000000000000
  0000000000000000000000000000000000000000000000000007FFFFFFFFFFFF0000000000000000FFFF000000000000
  000000000000003F000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFF
! 0000000000000000FFFFFFFF0000000000000000000000000000000000000000000FFFFFFC000000000000FFFFDFC000
  EBC000000FFFFFFCFFFFFC000000FFEF00FFFFFFC000000F00000FFFFFFC0000FC000000FFFFFFC0FFFFC000000FFFFF
  0FFFFFFC000000FF0000FFFFFFC000000000003FFFFFFC00F0000003F7FFFFFCFFC000000FDFFFFFFFFF0000003F7FFF
  FFFFFC000000FDFF0000000000000BF7000007E07FFFFBFF000000000000000000000000000000000000000000000000
--- 5534,5547 ----
  321080000008C400FFFF0000000043C00000000000000010000000000000000000000000000000000000000000000000
  0000000000000000000003FFFFFF0000FFFF0000000000003FDA1562FFFFFFFFAAAAAAAAAAAAAAAA0008501AAAAAAAAA
  000020BFFFFFFFFF000000000000000000000000000000000000000000000000000000000000000000002AAAAAAAAAAA
! 000000003AAAAAAA0000000000000000AAABAAA80000000095FFAAAAAAAAAAAAAAA082AAAABA50AA075E00000AAAA50A
  FFFF000000000000FFFF03FFF7FFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000F8007F0000000000000000
  0000000000000000000000000000000000000000000000000000000007FFFFFE00000000000000000000000000000000
  FFFFFF0000000000000000000000FFFF00000000000000000FFFFFFFFF00000000000000000000000000000000000000
  1BFBFFFBFF80000000000000000000000000000000000000000000000000000007FDFFFFFFFFFFB90000000000000000
  0000000000000000000000000000000000000000000000000007FFFFFFFFFFFF0000000000000000FFFF000000000000
  000000000000003F000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFF
! 0000000000000000FFFFFFFF00000000F80000000000000000000000000FFFFF000FFFFFFC000000000000FFFFDFC000
  EBC000000FFFFFFCFFFFFC000000FFEF00FFFFFFC000000F00000FFFFFFC0000FC000000FFFFFFC0FFFFC000000FFFFF
  0FFFFFFC000000FF0000FFFFFFC000000000003FFFFFFC00F0000003F7FFFFFCFFC000000FDFFFFFFFFF0000003F7FFF
  FFFFFC000000FDFF0000000000000BF7000007E07FFFFBFF000000000000000000000000000000000000000000000000
*************** E7FFFFFFFFFF0200000000000000000055555555
*** 5500,5522 ****
  FF00FF003F00FF000000FF00AA003F000F000000000000000F001F000F000F00C00F3D503E2738840000FFFF00000020
  0000000000000008000000000000000000000000000000000000000000000000FFC0000000000000000000000000FFFF
  0000FFFFFFFFFFFFC025EA9D000000005555555555555555000428055555555500000000000000000000155555555555
! 0000000005555555000000000000000055545554000000006A00555555555555555F7D55554528550020000015411AF5
  07FFFFFE00000000000000000000000000000000000000000000000000000000000000FFFFFFFFFF0000000000000000
  FFFF00000000000000000000000FFFFF0000000000000000F7FF000000000000000000000037F7FF0000000000000000
  000000000000000000000000000000000007FFFFFFFFFFFF000000000000000000000000000000000000003FFFFF0000
  0000000000000000000000000000000000000000000000000000000000000000FFFFFFFF000000000000000000000000
! 000000000000000000000000FFFFFFFF00000000000000000000000000000000FFF0000003FFFFFFFFFFFF0000003FFF
  003FDE64D0000003000003FFFFFF00007B0000001FDFE7B0FFFFF0000001FC5F03FFFFFF0000003F00003FFFFFF00000
  F0000003FFFFFF00FFFF0000003FFFFFFFFFFF00000003FF07FFFFFC00000001001FFFFFF000000000007FFFFFC00000
  000001FFFFFF0000000000000000040000000003FFFFFFFF000000000000000000000000000000000000000000000000
  FFFF000000000000FFFF03FFFFFF03FF00000000000003FF000000000000000000000000000000000000000000000000
  00000000000000000000000000000000",
  );
! //11904 bytes
  enum simpleCaseTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x"
  000000000000000000000000000000200000000000000140",
  x"
! 000000000000010000000000000004800000000000001240",
  x"
  040203020202010007020202060202050202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
--- 5583,5605 ----
  FF00FF003F00FF000000FF00AA003F000F000000000000000F001F000F000F00C00F3D503E2738840000FFFF00000020
  0000000000000008000000000000000000000000000000000000000000000000FFC0000000000000000000000000FFFF
  0000FFFFFFFFFFFFC025EA9D000000005555555555555555000428055555555500000000000000000000155555555555
! 0000000005555555000000000000000055545554000000006A00555555555555555F7D55554528550020000015555AF5
  07FFFFFE00000000000000000000000000000000000000000000000000000000000000FFFFFFFFFF0000000000000000
  FFFF00000000000000000000000FFFFF0000000000000000F7FF000000000000000000000037F7FF0000000000000000
  000000000000000000000000000000000007FFFFFFFFFFFF000000000000000000000000000000000000003FFFFF0000
  0000000000000000000000000000000000000000000000000000000000000000FFFFFFFF000000000000000000000000
! 000000000000000000000000FFFFFFFF01FFFFFF000000000000000000000000FFF0000003FFFFFFFFFFFF0000003FFF
  003FDE64D0000003000003FFFFFF00007B0000001FDFE7B0FFFFF0000001FC5F03FFFFFF0000003F00003FFFFFF00000
  F0000003FFFFFF00FFFF0000003FFFFFFFFFFF00000003FF07FFFFFC00000001001FFFFFF000000000007FFFFFC00000
  000001FFFFFF0000000000000000040000000003FFFFFFFF000000000000000000000000000000000000000000000000
  FFFF000000000000FFFF03FFFFFF03FF00000000000003FF000000000000000000000000000000000000000000000000
  00000000000000000000000000000000",
  );
! //12160 bytes
  enum simpleCaseTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x"
  000000000000000000000000000000200000000000000140",
  x"
! 0000000000000100000000000000048000000000000012C0",
  x"
  040203020202010007020202060202050202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
*************** x"
*** 5557,5568 ****
  004400430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000000000000000000000000000000000000000000000004500000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000004700460000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- 5640,5651 ----
  004400430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000000000000000000000000000000000000000470046004500000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000004900480000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
*************** x"
*** 5574,5777 ****
  00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 090D00820947FFFF093500BF032506110B61006D09FE0BD00B0400E2084606E105E705AA04750858019501820A6307A3
! FFFF030304EB0534FFFFFFFFFFFFFFFF090E00830948FFFF093600C0032606120B62006E09FF0BD10B0500E3084706E2
! 05E805AB04760859019601830A6407A4FFFF030404EC0535FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF098FFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0876011A05C4079903E7026109E70B0A0B83012A039B056F0321004903A30641
! 02A9008809050609FFFF00CD05A1072B0511021D09AC0B1609190A7508A0071B0877011B05C5079A03E8026209E80B0B
! 0B84012B039C05700322004A03A4064202AA00890906060AFFFF00CE05A2072C0512021E09AD0B1703760A7608A1071C
! 04DE04DD0A0D0A0C0B8E0B8D01D501D4074E074D020A020908D708D600D000CF062A0629005E005D0636063500540053
! 067B067A02BC02BB081F081E015C015B080508040BBF0BBE0A940A9304D004CF05A905A801BA01B90997099602260225
! 08990898FFFFFFFF0328032709630962071700970096FFFF083C00910090071807E80B670B66083D0A530123012207E9
! 04EE04EDFFFF0A540B9C0B9B07E307E20164016306D706D602B402B3069B069A000D000C0620061F0072007106590658
! 00D400D3085B085A01E901E80744074301A601A50BB70BB60A840A8304D804D7057C057B07ED07EC0A2B0A2A09A109A0
! 0023063C063B037705E90614061300240B4E0B4D06A006A9027F053C0274027301B308180B6F02800AF40787FFFF01B4
! 053608DD08DC0A7709BA0B3F02330285044704DB00990098033700D5091500AC06440643001B001A03DB056901070106
! FFFFFFFF09D203DC0777080C016B016A0542079D01AB07780AF2030C030B0543FFFFFFFF0260025F01B1FFFF094A0949
! FFFFFFFFFFFFFFFF05F60955095409530B190B1805F805F707B6051405130B1A07890A900A8F07B70AB20450044F078A
! 0567030803070AB30B8A0B8907880568016D016C066D066C02CA02C90610060F00F400F3065F065E0586058506C106C0
! 0AEE0AED0AECFFFF01B202340766076501F501F40BA40BA3099B099A0426042505B505B40861086008E608E5096A0969
! 08BC08BB03BA03B9042804270B480B470AC10AC0041704160547054602BE02BD080F080E016F016E086B086A05CD05CC
! 06E806E7FFFF00D60BB90BB800660065075C075B00C400C308AA08A9007B007A070F070E0590058FFFFFFFFFFFFFFFFF
! 07B40A3EFFFFFFFF098707DC04DC07B506AA014E014D02950A030A0202DD04290330032F0950094F0A270A26097E097D
! 06A102270B55040E08190B70FFFF053D0A78FFFF0AF5FFFFFFFFFFFFFFFF096B0286FFFF0B640537FFFF00B70BAC069E
! 065400FB0B4009BB00ADFFFFFFFF09B4FFFF091605B6FFFFFFFFFFFF0338FFFFFFFFFFFFFFFFFFFFFFFFFFFF0033FFFF
! 09D3052CFFFF056A035CFFFFFFFFFFFF079E01AC042A080DFFFFFFFFFFFF02DEFFFF0AF3FFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFF07290094FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF099CFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01D701D604B504B4020001FFFFFFFFFF
! 0A67FFFFFFFFFFFF038EFFFF088E0124FFFFFFFFFFFFFFFFFFFF02A3FFFFFFFFFFFF00ED084806F109F80BD6FFFF0810
! 017E04BE04C50392016801DA0AEF0A470B3D0B68099D05B0010803A7083E099006A2FFFF06450BA900AE0351061D0339
! 009C086C0714092700EE084906F202A4017F04BF04C609FC016901DB0AF00A480B3E0B69099E05B1010903A8083F0991
! 06A406A306460BAA00AF0352061E033A009D086D0715092809A209F90BD70811FFFFFFFF05B204C009A30BAB0353FFFF
! 04B904B8018E018D087F087E0ABB0ABA09B309B20598059703C803C70A0F0A0E08EA08E9030002FF036F036E04580457
! 038F01DE06470B6A0AB6FFFF0AF105B305F105F001DF0AB7088F01250A68FFFF0998029B0530050505C2009209B80B2B
! 092100A209230719039D009E0329060503CD05560B7B07390AE8028703DF070104C90128088A0ABE01BF0A4407C80828
! 02E90AA50527080A015D024F0B0009D00B910964067C0591005503CF06370A2003CE05570B7C073A0AE9028803E00702
! 04CA0129088B0ABF01C00A4507C9082902EA0AA60528080B015E02500B0109D10B920965067D0592005603D006380A21
! 0999029C0531050605C3009309B90B2C092200A30924071A039E009F032A060605E305E20AD50AD40B800B7F024E024D
! 03F203F1020402030879087809E209E10908090705B905B803A603A508EE08ED0961096008A808A70424042303EA03E9
! FFFFFFFF0B580B57FFFFFFFFFFFFFFFF05BD05BCFFFFFFFF00E800E7084B084A0060005F06EA06E90005000406320631
! 00CC00CB074C074B057E057D08D508D4010D010C06CF06CE01A401A305040503046604650A410A400BA60BA507D907D8
! 04130412085108500918091709EB09EA090209010332033103C403C30A290A28022906DD06DC02E5024105EF05EE022A
! 04B00A520A51024202E607B107B004B1057205710246024506FE06FD026C026B063E063D005A0059069106900020001F
! 068F068E011501140580057F0252025107C707C6011D011C0796079504AB04AA047804770AC30AC20B360B350240023F
! 043804370398039708F208F109380937094E094D0344034303E403E30A310A300AC70AC60845084401D101D007B907B8
! 02CE02CD0A4C0A4B01730172050004FF05D105D006BD06BC002E002D06650664003A00390651065000B600B50BA00B9F
! 0AFF0AFE075607550502050108AE08AD023101800BD8FFFF0ACC029D073304C7059F048D08720AF601350B9906EF03B3
! 030D035E06940390013709560696092D0B5D097306F305CA0517053A087A0A3602390A6D072F029FFFFF07A505F20186
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF023201810BD9FFFF0ACD029E073404C805A0048E08730AF701360B9A06F003B4
! 030E035F06950391013809570697092E0B5E097406F405CB0518053B087B0A37023A0A6E073002A0FFFF07A605F30187
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF052303F7084209E301B50BC4071001FA
! 01BD04A80495024B047B089C0AD00ACE0B2D06B8081C0581043D0660039F00F908EB06A7093302E30941068A03470151
! 03DD086E0A1A0B850ADAFFFF02EB010AFFFFFFFFFFFFFFFFFFFFFFFF0A87FFFF040806B10B1B0155095C0680043905DA
! 03D506070323002F09510B710A220027087C06CA0573008E043508A209D70B140A3A077F021F0515072D04E5025301E4
! 083809C20AE002AB070603D7059D03EDFFFF03AB01200B6B06AD092F000EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 036C00C5043F05EC095E006F083606DA0A2C0B5F038008B30341008008E306190A8D02D702010A9F05750139097F06D2
! 07E6058B0BB407F8077B0A1E04F1049B0666038402F1045D06BA09CA0143087008BF09430043046B064C031F00470BD2
! 0B9D0A10023D09DD075705590084027B079B07310A3C0B1004CB08DE01EE053E03BB06F50A2E029308320B5905CE0205
! 03660692035805F4095806C602B7013B039906390BBA004DFFFFFFFF04450063039A063A0BBB004EFFFFFFFF04460064
! 05290A460703055805E409660AA80AA7FFFF0825082406B5FFFFFFFFFFFFFFFF040906B20B1C0156095D0681043A05DB
! 03D606080324003009520B720A230028087D06CB0574008F043608A309D80B150A3B078002200516072E04E6025401E5
! 083909C30AE102AC070703D8059E03EEFFFF03AC01210B6C06AE0930000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFF051DFFFFFFFFFFFF0319FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0BC8FFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 04DA04D9070D070C0BBD0BBC079407930482048108210820026A026909AF09AE09320931058E058D0340033F091E091D
! 093E093D02D602D503E203E1046A046907E507E40B3A0B390A4E0A4D04F004EF05E105E001B001AF07480747024A0249
! 085F085E00DD00DC062C062B00620061062406230013001206AC06AB02AE02AD06D106D00160015F07BD07BC05C705C6
! 04A304A20A960A950B900B8F0212021103EC03EB02180217089B089A0970096F092A0929036103600389038808FA08F9
! 098C098B08A508A4020E020D03E603E501BC01BB0B740B730A720A710490048F05D905D807FB07FA0150014F082F082E
! 02B602B506750674004C004B06490648008B008A063406330555055408C708C60210020F0754075301D901D804D404D3
! 044E044D0A8C0A8BFFFFFFFF07EF07EE08A6FFFFFFFFFFFFFFFF091AFFFFFFFF0910090F0312031103B003AF09F709F6
! 0B0F0B0E025E025D08030802043C043B07CF07CE0A560A55073C073B04D604D5055C055B02240223071E071D009B009A
! 060E060D00A500A4066B066A0050004F0B300B2F012701260549054802FE02FD0790078F0119011807D307D204A704A6
! 040304020AA20AA10BB30BB202580257044A044903CA03C90920091F08FC08FB094C094B036B036A0562056109BF09BE
! 0AAA0AA908C908C8019C019B0460045F01DD01DC0A7A0A7900F000EF06FA06F90A32003703B5061B056B00F509790B77
! 0A33003803B6061C056C00F6097A0B780235019F0A65078BFFFFFFFF071204DF023601A00A66078CFFFFFFFF071304E0
! 0018030F061503A9017408900698091300190310061603AA017508910699091401840AFA0A6902EF01EA07AC04BA01A7
! 01850AFB0A6A02F001EB07AD04BB01A8036205F9035A0076FFFFFFFF08E7000A036305FA035B0077FFFFFFFF08E8000B
! 0A91FFFF01F0FFFF078DFFFF04E7FFFF0A92FFFF01F1FFFF078EFFFF04E8FFFF066E044B02CF09BC05FB0BC2002B03BF
! 066F044C02D009BD05FC0BC3002C03C00A0602DF02F70455042B05E502130AA30A890AE20008090BFFFFFFFF062F032D
! 03B1028F09920B51091B012C02CB067E03B2029009930B52091C012D02CC067F0A24029903C506FB05C8020708120B49
! 0A25029A03C606FC05C9020808130B4A00DE09DF0BB00A14007E028B075D05A600DF09E00BB10A15007F028C075E05A7
! 09A6FFFF0682037CFFFFFFFFFFFFFFFF02F804560683037DFFFF099FFFFF09A700F7FFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 02140AA40A0702E0FFFFFFFFFFFF00F80393FFFF036800BDFFFFFFFFFFFFFFFF042C05E6036900BEFFFFFFFFFFFFFFFF
! 09FDFFFF01C90178FFFFFFFF02A5FFFF0A8A0AE301CA0179FFFFFFFFFFFF02A603CBFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 0630032E0009090CFFFFFFFFFFFF03CCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0716FFFFFFFF
! 09E90B63FFFFFFFFFFFFFFFFFFFFFFFFFFFF097BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF097CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF046704A40AAB07D00A730A0A017A0785072302FB01F6054A084E045B00E00B1F
! 046804A50AAC07D10A740A0B017B0786072402FC01F7054B084F045C00E10B200894FFFFFFFFFFFFFFFFFFFFFFFF0895
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05AC0386FFFFFFFF0763083A00A80B5B08BD09FA0540040A
! 07D404970AC402190AD20737018F022B052E088002A70104096D067609A40B5300A90B5C05AD03870541040B0764083B
! 0AC5021A08BE09FB0190022C07D5049802A801050AD3073809A50B54052F0881FFFFFFFF096E0677FFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF010E0B21067003D30521045106CC084C
! 0AE401CE088C0A81022F0215077104AC0281054E0B95072509B000AA0418083005BA00310967071F08F7003D09850652
! 0896015303AD068803F305EA0B41069C0AD60116041007F0055001C102ED04CD010F0B22067103D40522045206CD084D
! 0AE501CF088D0A8202300216077204AD0282054F0B96072609B100AB0419083105BB00320968072008F8003E09860653
! 0897015403AE068903F405EB0B42069D0AD70117041107F1055101C202EE04CE031A0655003C003B0A0807DD0A3F0034
! 026F038B038A0A09040F05B70B5602700A4A0A49FFFF0228FFFF076C076BFFFFFFFFFFFFFFFFFFFF02960988FFFFFFFF
! 0346034502B002AF093C093B08F408F302C302C2037F037E047E047D09C109C00B8C0B8B081B081A04C204C107980797
! 01F301F20A980A9700D800D70584058300680067074607450022002108D108D0005C005B0640063F026E026D0B500B4F
! 0192019106D906D805D305D207DF07DE0A6C0A6B076E076D028A028904F404F303B803B70B380B37098209810480047F
! 0334033308FE08FD09ED09EC095B095A0853085205940593042E042D0ADF0ADE0A430A42022202210728072701AA01A9
! 0841084001110110FFFFFFFFFFFFFFFF0364FFFFFFFFFFFFFFFF03360335036506EC06EBFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF052403F8084309E401B60BC5071101FB01BE04A90496024C047C089D0AD10ACF
! 0B2E06B9081D0582043E066103A000FA08EC06A8093402E40942068B0348015203DE086F0A1B0B860ADBFFFF02EC010B
! FFFFFFFFFFFFFFFFFFFFFFFF0A88FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 0A500A4F01E101E007BB07BA0ACB0ACA06B706B601420141050A050902C502C4065B065A0040003F0663066205D505D4
! 075A0759007900780BA20BA10042004107A207A104FE04FD08B208B10B070B060AF90AF802D202D1FFFFFFFF017D017C
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02A202A1052B052A0A350A3409760975
! 0AB50AB407CD07CC018C018B0A700A6F00B100B0076807670545054408AC08AB0036003506020601FFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00070006FFFFFFFF00C800C708D308D2
! 00EA00E9070B070A006A006906260625015A0159FFFFFFFF0B820B810855085409EF09EE051A051902BA02B90A5C0A5B
! 098A0989089F089E03A203A109AB09AA087508740B940B93033C033B031E031D05BF05BE021C021B09B709B6041D041C
! 08890888053305320A580A5702480247068506840101010006BF06BE0B460B45067906780158015706B406B302F402F3
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04E907C107C0FFFF0BA80BA7051E04EA09E609E5059C059B086508640B030B02
! 0051FFFFFFFFFFFFFFFFFFFF0BAD0052025602550B440B4303BE03BDFFFF07AE04AF04AE07F707F60A130A1204070406
! 0284028305260525011F011E082D082C096C00B807220721FFFF00FC09B50B650B970095035D072A00A100A0060005FF
! 0140013F070006FF0298029705660565044204410823082207790BC9052D07AF069F01770176077AFFFFFFFF09C509C4
! FFFFFFFF03020301031C031BFFFFFFFF088708860B260B25FFFFFFFFFFFF0448FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A1D0A1CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B98FFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 036D00C6044005ED095F0070083706DB0A2D0B60038108B40342008108E4061A0A8E02D802020AA00576013A098006D3
! 07E7058C0BB507F9077C0A1F04F2049C0667038502F2045E06BB09CB0144087108C009440044046C064D032000480BD3
! 0B9E0A11023E09DE0758055A0085027C079C07320A3D0B1104CC08DF01EF053F03BC06F60A2F029408330B5A05CF0206
! 03670693035905F5095906C702B8013CFFFFFFFFFFFFFFFFFFFF082B082AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02710B2709F0FFFF0977065C05C001450BAE0791076904E1040C050B07E0013D
! 02F903F905630263019907C20AB80AE6FFFF0461061708EFFFFFFFFFFFFFFFFF02720B2809F1FFFF0978065D05C10146
! 0BAF0792076A04E2040D050C07E1013E02FA03FA05640264019A07C30AB90AE7FFFF0462061808F0FFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05D6077D076F0A9909DB0ADC0808013102E709C80B310983014707F204F5050F
! 08F5064E048900EB0378073D02D900450267055F041402DB038C068C0BC00149048B07AA0AFC0AAD0B87079F023B0493
! 05D7077E07700A9A09DC0ADD0809013202E809C90B320984014807F304F6051008F6064F048A00EC0379073E02DA0046
! 02680560041502DC038D068D0BC1014A048C07AB0AFD0AAE0B8807A0023C0494FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF075F07F40B080A7D0B3B09CE022D0587
! 07B20B7509F402370781049104B2025906C2034F05DC033D06E3028D01C50B6D066803D1029109D9062108FF002902F5
! 08D80A5F0A5D0773FFFFFFFFFFFFFFFF076007F50B090A7E0B3C09CF022E058807B30B7609F502380782049204B3025A
! 06C3035005DD033E06E4028E01C60B6E066903D2029209DA06220900002A02F608D90A600A5E0774FFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 027500A6047108AF025B01120B1D06C4FFFF00B909710B79092B00BB092505FD01330B7D07EA0826030903EF05770856
! FFFF02B1042F059904F9048707830A59FFFF03C106560A6108B0FFFF06ED02D306C5027600A704720B7A025C01130B1E
! 05FEFFFF00BA09720827092C00BC0926085701340B7E07EB059A030A03F005780A5AFFFF02B204300A6204FA04880784
! 02D4FFFF03C20657FFFFFFFFFFFF06EE014B0193049904E3058901EC08000BCA045305DE03F506AF03130A7F0ABC0806
! 00C909390BC6093F008C08B50749034D010209940892046F007C0372073508C1034B04D10538020B047307BE0B0C0A9B
! 05520479085C098D01C30BCC07040243FFFF06860A160305FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 014C0194049A04E4058A01ED08010BCB045405DF03F606B003140A800ABD080700CA093A0BC70940008D08B6074A034E
! 0103099508930470007D0373073608C2034C04D20539020C047407BF0B0D0A9C0553047A085D098E01C40BCD07050244
! FFFF06870A170306FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF075104BC01C7019708CA09F20B1201F8050D08CC09C60B230A7B074101D204F7
! 0627090300100483FFFFFFFF01B708B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF075204BD01C8019808CB09F30B1301F9
! 050E08CD09C70B240A7C074201D304F80628090400110484FFFFFFFF01B808BAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0BCE07C401E6059504FB04A001E201AD0862074F037A00D1046D086809A800F1
! 06A508B701610B4B064A090902E1035608660AEA0A9D037006D403D9056D04630BCF07C501E7059604FC04A101E301AE
! 08630750037B00D2046E086909A900F206A608B801620B4C064B090A02E2035708670AEB0A9E037106D503DA056E0464
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF032B073F0A000086041A060B041E0265057906F70945006B0A38062D03540016
! 01A107CA04C3048503170AD8070803150B2906E508CE0507051B07D60A180A85032C07400A010087041B060C041F0266
! 057A06F80946006C0A39062E0355001701A207CB04C4048603180AD9070903160B2A06E608CF0508051C07D70A190A86
! 08DA0057040406720443002509110603000000C1038205AE051F054C083407610775019D000207DA0AC80349045904B6
! 055D0170027D0B330A040BD409CC06C804050673001403740912060408DB0058038305AF0444002608350762000100C2
! 000307DB0520054D045A04B70776019E027E0B340AC9034A09CD06C9055E0171001503750A050BD5FFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
  );
! //11904 bytes
  enum fullCaseTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x"
  000000000000000000000000000000200000000000000140",
  x"
! 000000000000010000000000000004800000000000001240",
  x"
  040203020202010007020202060202050202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
--- 5657,5866 ----
  00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 09350084096FFFFF095D00C10337062F0B97006F0A2A0C080B3800E8086A06FF060505C6048F087C019F018C0A9507C5
! FFFF031305050550FFFFFFFFFFFFFFFF093600850970FFFF095E00C2033806300B9800700A2B0C090B3900E9086B0700
! 060605C70490087D01A0018D0A9607C6FFFF031405060551FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09BBFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF089C012405E007BB03FD026F0A130B3E0BB9013403B1058B0333004B03B9065F
! 02B9008A092D0627FFFF00CF05BD074D052B022909D80B4A09410AA708C6073B089D012505E107BC03FE02700A140B3F
! 0BBA013503B2058C0334004C03BA066002BA008B092E0628FFFF00D005BE074E052C022A09D90B4B03880AA808C7073C
! 04F804F70A390A380BC40BC301DF01DE0770076F0216021508FD08FC00D200D1064806470060005F0654065300560055
! 0699069802CC02CB0843084201660165082708260BF70BF60AC80AC704EA04E905C505C401C401C309C309C202320231
! 08BF08BEFFFFFFFF033A0339098B098A073700990098FFFF0860009300920738080A0B9D0B9C08610A85012D012C080B
! 05080507FFFF0A860BD20BD108050804016E016D06F506F402C402C306B906B8000D000C063E063D0074007306770676
! 00D600D5087F087E01F501F40766076501B001AF0BED0BEC0AB60AB504F204F105980597080F080E0A5D0A5C09CD09CC
! 0025065A0659038906070632063100260B840B8306BE06C7028F05580282028101BD083C0BA502900B2807A9FFFF01BE
! 0552090509040AA909E60B75023F0295045D04F5009B009A034900D7093D00AE06620661001B001A03F10585010F010E
! FFFFFFFF09FE03F20799082E01750174055E07BF01B5079A0B26031C031B055FFFFFFFFF026E026D01BBFFFF09720971
! FFFFFFFFFFFFFFFF0614097D097C097B0B4F0B4E0616061507D8052E052D0B5007AB0AC20AC107D90AE60466046507AC
! 0583031803170AE70BC00BBF07AA058401770176068B068A02DA02D9062E062D00FA00F9067D067C05A205A106DF06DE
! 0B220B210B20FFFF01BC024007880787020102000BDA0BD909C709C6043C043B05D105D008850884090E090D09920991
! 08E208E103D003CF043E043D0B7E0B7D0AF50AF4042D042C0563056202CE02CD0831083001790178088F088E05EB05EA
! 07080707FFFF00D80BEF0BEE00680067077E077D00C600C508D008CF007D007C072F072E05AC05ABFFFFFFFFFFFFFFFF
! 07D60A70FFFFFFFF09B307FE04F607D706C80158015702A50A2F0A2E02ED043F03420341097809770A590A5809AA09A9
! 06BF02330B8B0424083D0BA6FFFF05590AAAFFFF0B29FFFFFFFFFFFFFFFF09930296FFFF0B9A0553FFFF00B90BE206BC
! 067201010B7609E700AFFFFFFFFF09E0FFFF093E05D2FFFFFFFFFFFF034AFFFFFFFFFFFFFFFFFFFFFFFFFFFF0035FFFF
! 09FF0548FFFF0586036EFFFFFFFFFFFF07C001B60440082FFFFFFFFFFFFF02EEFFFF0B27FFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFF074B0096FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09C8FFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01E101E004CF04CE020C020BFFFFFFFF
! 0A99FFFFFFFFFFFF03A2FFFF08B4012EFFFFFFFFFFFFFFFFFFFF02B3FFFFFFFFFFFF00F3086C07110A240C0EFFFF0832
! 018804D804DF03A6017201E40B230A790B730B9E09C905CC011003BD086209BC06C0FFFF06630BDF00B00363063B034B
! 009E08920734094F00F4086D071202B4018904D904E00A28017301E50B240A7A0B740B9F09CA05CD011103BE086309BD
! 06C206C106640BE000B10364063C034C009F08930735095009CE0A250C0F0833FFFFFFFF05CE04DA09CF0BE10365FFFF
! 04D304D20198019708A508A40AEF0AEE09DF09DE05B405B303DE03DD0A3D0A3C091209110310030F03810380046E046D
! 03A301E806650BA00AEAFFFF0B2505CF060F060E01E90AEB08B5012F0A9AFFFF09C402AB054C051F05DE009409E40B61
! 094900A4094B073903B300A0033B062303E305720BB1075B0B1C029703F5072104E3013208B00AF201C90A7607EA084C
! 02F90AD90543082C0167025D0B3409FC0BC7098C069A05AD005703E506550A5003E405730BB2075C0B1D029803F60722
! 04E4013308B10AF301CA0A7707EB084D02FA0ADA0544082D0168025E0B3509FD0BC8098D069B05AE005803E606560A51
! 09C502AC054D052005DF009509E50B62094A00A5094C073A03B400A1033C0624060106000B090B080BB60BB5025C025B
! 040804070210020F089F089E0A0E0A0D0930092F05D505D403BC03BB091609150989098808CE08CD043A0439040003FF
! FFFFFFFF0B8E0B8DFFFFFFFFFFFFFFFF05D905D8FFFFFFFF00EE00ED086F086E00620061070A0709000500040650064F
! 00CE00CD076E076D059A059908FB08FA0115011406ED06EC01AE01AD051E051D047E047D0A730A720BDC0BDB07FB07FA
! 04290428087508740940093F0A170A16092A09290344034303DA03D90A5B0A5A023506FB06FA02F5024D060D060C0236
! 04CA0A840A83024E02F607D307D204CB058E058D02520251071E071D027A0279065C065B005C005B06AF06AE00220021
! 06AD06AC011F011E059C059B0260025F07E907E80127012607B807B704C504C4049204910AF70AF60B6C0B6B024C024B
! 044E044D03AC03AB091A09190960095F097609750356035503FA03F90A630A620AFB0AFA0869086801DB01DA07DB07DA
! 02DE02DD0A7E0A7D017D017C051A051905EF05EE06DB06DA0030002F06830682003C003B066F066E00B800B70BD60BD5
! 0B330B3207780777051C051B08D408D3023D018A0C10FFFF0B0002AD075504E105BB04A708980B2A013F0BCF070F03C9
! 031D037006B203A40141097E06B409550B93099D071305E60531055608A00A6802450A9F075102AFFFFF07C706100190
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF023E018B0C11FFFF0B0102AE075604E205BC04A808990B2B01400BD0071003CA
! 031E037106B303A50142097F06B509560B94099E071405E70532055708A10A6902460AA0075202B0FFFF07C806110191
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF053F040D08660A0F01BF0BFC07300206
! 01C704C204AF0259049508C20B040B020B6306D60840059D0453067E03B500FF091306C5095B02F3096906A80359015B
! 03F308940A4A0BBB0B0EFFFF02FB0112FFFFFFFFFFFFFFFFFFFFFFFF0AB9FFFF041E06CF0B51015F0984069E044F05F8
! 03EB06250335003109790BA70A54002908A206E8058F0090044B08C80A030B480A6C07A1022B052F074F04FF026101EE
! 085C09EE0B1402BB072603ED05B90403FFFF03C1012A0BA106CB0957000EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 037E00C70455060A09860071085A06F80A5E0B95039208D903530082090B06370ABF02E7020D0AD30591014309AF06F0
! 080805A70BEA081A079D0A4E050B04B5068403960301047306D809F6014D089608E5096B00450483066A033100490C0A
! 0BD30A3E02490A09077905750086028B07BD07530A6E0B4404E5090601FA055A03D107150A6002A308560B8F05EC0211
! 037806B0036A0612098006E402C7014503AD06570BF0004FFFFFFFFF045B006503AE06580BF10050FFFFFFFF045C0066
! 05450A78072305740602098E0ADC0ADBFFFF0849084806D3FFFFFFFFFFFFFFFF041F06D00B5201600985069F045005F9
! 03EC062603360032097A0BA80A55002A08A306E905900091044C08C90A040B490A6D07A2022C053007500500026201EF
! 085D09EF0B1502BC072703EE05BA0404FFFF03C2012B0BA206CC0958000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFF0537FFFFFFFFFFFF032BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C00FFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 04F404F3072D072C0BF30BF207B607B5049C049B084508440278027709DB09DA095A095905AA05A90352035109460945
! 0966096502E602E503F803F704820481080708060B700B6F0A800A7F050A050905FF05FE01BA01B9076A076902560255
! 0883088200E100E0064A064900640063064206410013001206CA06C902BE02BD06EF06EE016A016907DF07DE05E305E2
! 04BD04BC0ACA0AC90BC60BC5021E021D040204010224022308C108C0099809970952095103730372039B039A09220921
! 09B809B708CB08CA021A021903FC03FB01C601C50BAA0BA90AA40AA304AA04A905F705F6081D081C015A015908530852
! 02C602C506930692004E004D06670666008D008C065206510571057008ED08EC021C021B0776077501E301E204EE04ED
! 046404630ABE0ABDFFFFFFFF0811081008CCFFFFFFFFFFFFFFFF0942FFFFFFFF093809370322032103C603C50A230A22
! 0B430B42026C026B082508240452045107F107F00A880A87075E075D04F004EF057805770230022F073E073D009D009C
! 062C062B00A700A606890688005200510B660B650131013005650564030E030D07B207B10123012207F507F404C104C0
! 041904180AD60AD50BE90BE8026602650460045F03E003DF094809470924092309740973037D037C057E057D09EB09EA
! 0ADE0ADD08EF08EE01A601A50476047501E701E60AAC0AAB00F600F5071A07190A64003903CB0639058700FB09A50BAD
! 0A65003A03CC063A058800FC09A60BAE024101A90A9707ADFFFFFFFF073204F9024201AA0A9807AEFFFFFFFF073304FA
! 0018031F063303BF017E08B606B6093B00190320063403C0017F08B706B7093C018E0B2E0A9B02FF01F607CE04D401B1
! 018F0B2F0A9C030001F707CF04D501B203740617036C0078FFFFFFFF090F000A03750618036D0079FFFFFFFF0910000B
! 0AC5FFFF01FCFFFF07AFFFFF0501FFFF0AC6FFFF01FDFFFF07B0FFFF0502FFFF068C046102DF09E806190BFA002D03D5
! 068D046202E009E9061A0BFB002E03D60A3202EF0307046B04410603021F0AD70ABB0B1600080933FFFFFFFF064D033F
! 03C7029F09BE0B870943013602DB069C03C802A009BF0B880944013702DC069D0A5602A903DB071B05E4021308360B7F
! 0A5702AA03DC071C05E5021408370B8000E20A0B0BE60A440080029B077F05C200E30A0C0BE70A450081029C078005C3
! 09D2FFFF06A0038EFFFFFFFFFFFFFFFF0308046C06A1038FFFFF09CBFFFF09D300FDFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 02200AD80A3302F0FFFFFFFFFFFF00FE03A7FFFF037A00BFFFFFFFFFFFFFFFFF04420604037B00C0FFFFFFFFFFFFFFFF
! 0A29FFFF01D30182FFFFFFFF02B5FFFF0ABC0B1701D40183FFFFFFFFFFFF02B603E1FFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 064E034000090934FFFFFFFFFFFF03E2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0736FFFFFFFF
! 0A150B99FFFFFFFFFFFFFFFFFFFFFFFFFFFF09A7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09A8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF047F04BE0ADF07F20AA50A36018407A70743030B020205660872047100E60B55
! 048004BF0AE007F30AA60A37018507A80744030C020305670873047200E70B5608BAFFFFFFFFFFFFFFFFFFFFFFFF08BB
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05C80398FFFFFFFF0785085E00AA0B9108E30A26055C0420
! 07F604B10AF802250B06075901990237054A08A602B7010A0995069409D00B8900AB0B9205C90399055D04210786085F
! 0AF9022608E40A27019A023807F704B202B8010B0B07075A09D10B8A054B08A7FFFFFFFF09960695FFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01160B57068E03E9053D046706EA0870
! 0B1801D808B20AB3023B0221079304C60291056A0BCB074509DC00AC042E085405D60033098F073F091F003F09B10670
! 08BC015D03C306A6040906080B7706BA0B0A012004260812056C01CB02FD04E701170B58068F03EA053E046806EB0871
! 0B1901D908B30AB4023C0222079404C70292056B0BCC074609DD00AD042F085505D70034099007400920004009B20671
! 08BD015E03C406A7040A06090B7806BB0B0B012104270813056D01CC02FE04E8032C0673003E003D0A3407FF0A710036
! 027D039D039C0A35042505D30B8C027E0A7C0A7BFFFF0234FFFF078E078DFFFFFFFFFFFFFFFFFFFF02A609B4FFFFFFFF
! 0358035702C002BF09640963091C091B02D302D2039103900498049709ED09EC0BC20BC1083F083E04DC04DB07BA07B9
! 01FF01FE0ACC0ACB00DA00D905A0059F006A0069076807670024002308F708F6005E005D065E065D027C027B0B860B85
! 019C019B06F706F605F105F0080108000A9E0A9D0790078F029A0299050E050D03CE03CD0B6E0B6D09AE09AD049A0499
! 03460345092609250A190A18098309820877087605B005AF044404430B130B120A750A74022E022D0748074701B401B3
! 0865086401190118FFFFFFFFFFFFFFFF0376FFFFFFFFFFFFFFFF034803470377070C070BFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0540040E08670A1001C00BFD0731020701C804C304B0025A049608C30B050B03
! 0B6406D70841059E0454067F03B60100091406C6095C02F4096A06A9035A015C03F408950A4B0BBC0B0FFFFF02FC0113
! FFFFFFFFFFFFFFFFFFFFFFFF0ABAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 0A820A8101EB01EA07DD07DC0AFF0AFE06D506D4014C014B0524052302D502D406790678004200410681068005F305F2
! 077C077B007B007A0BD80BD70044004307C407C30518051708D808D70B3B0B3A0B2D0B2C02E202E1FFFFFFFF01870186
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02B202B1054705460A670A6609A209A1
! 0AE90AE807EF07EE019601950AA20AA100B300B2078A07890561056008D208D1003800370620061FFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00070006FFFFFFFF00CA00C908F908F8
! 00F000EF072B072A006C006B0644064301640163FFFFFFFF0BB80BB7087908780A1B0A1A0534053302CA02C90A8E0A8D
! 09B609B508C508C403B803B709D709D6089B089A0BCA0BC9034E034D0330032F05DB05DA0228022709E309E204330432
! 08AF08AE054F054E0A8A0A890254025306A306A20107010606DD06DC0B7C0B7B069706960162016106D206D103040303
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF050307E307E2FFFF0BDE0BDD053805040A120A1105B805B7088908880B370B36
! 0053FFFFFFFFFFFFFFFFFFFF0BE30054026402630B7A0B7903D403D3FFFF07D004C904C8081908180A430A42041D041C
! 02940293054205410129012808510850099400BA07420741FFFF010209E10B9B0BCD0097036F074C00A300A2061E061D
! 014A01490720071F02A802A7058205810458045708470846079B0C01054907D106BD01810180079C0274027309F109F0
! 09AC09AB03120311032E032D0A410A4008AD08AC0B5C0B5BFFFFFFFFFFFF045EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A4D0A4CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0BCEFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 037F00C80456060B09870072085B06F90A5F0B96039308DA03540083090C06380AC002E8020E0AD40592014409B006F1
! 080905A80BEB081B079E0A4F050C04B6068503970302047406D909F7014E089708E6096C00460484066B0332004A0C0B
! 0BD40A3F024A0A0A077A05760087028C07BE07540A6F0B4504E6090701FB055B03D207160A6102A408570B9005ED0212
! 037906B1036B0613098106E502C80146FFFFFFFFFFFFFFFFFFFF084F084EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF027F0B5D0A1CFFFF09A3067A05DC014F0BE407B3078B04FB0422052508020147
! 0309040F057F027101A307E40AEC0B1AFFFF047706350917FFFFFFFFFFFFFFFF02800B5E0A1DFFFF09A4067B05DD0150
! 0BE507B4078C04FC0423052608030148030A04100580027201A407E50AED0B1BFFFF047806360918FFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05F4079F07910ACD0A070B10082A013B02F709F40B6709B901510814050F0529
! 091D066C04A300F1038A075F02E900470275057B042A02EB03A006AA0BF8015304A507CC0B300AE10BBD07C1024704AD
! 05F507A007920ACE0A080B11082B013C02F809F50B6809BA015208150510052A091E066D04A400F2038B076002EA0048
! 0276057C042B02EC03A106AB0BF9015404A607CD0B310AE20BBE07C2024804AEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF078108160B3C0AAF0B7109FA023905A3
! 07D40BAB0A20024307A304AB04CC026706E0036105FA034F0701029D01CF0BA3068603E702A10A05063F0927002B0305
! 08FE0A910A8F0795FFFFFFFFFFFFFFFF078208170B3D0AB00B7209FB023A05A407D50BAC0A21024407A404AC04CD0268
! 06E1036205FB03500702029E01D00BA4068703E802A20A0606400928002C030608FF0A920A900796FFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 028500A8048908D50269011A0B5306E2FFFF00BB09990BAF095300BD094D061B013D0BB3080C084A031904050593087A
! FFFF02C1044505B5051304A107A50A8BFFFF03D706740A9308D6FFFF070D02E306E3028600A9048A0BB0026A011B0B54
! 061CFFFF00BC099A084B095400BE094E087B013E0BB4080D05B6031A040605940A8CFFFF02C204460A94051404A207A6
! 02E4FFFF03D80675FFFFFFFFFFFF070E0155019D04B304FD05A501F808220C02046905FC040B06CD03230AB10AF00828
! 00CB09610BFE0967008E08DB076B035F010809C008B80487007E0384075708E7035D04EB05540217048B07E00B400ACF
! 056E049308800A2C01CD0C040724024FFFFF06A40A460315FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 0156019E04B404FE05A601F908230C03046A05FD040C06CE03240AB20AF1082900CC09620BFF0968008F08DC076C0360
! 010909C108B90488007F0385075808E8035E04EC05550218048C07E10B410AD0056F049408810A2D01CE0C0507250250
! FFFF06A50A470316FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF077304D601D101A108F00A1E0B460204052708F209F20B590AAD076301DC0511
! 0645092B0010049DFFFFFFFF01C108DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF077404D701D201A208F10A1F0B470205
! 052808F309F30B5A0AAE076401DD05120646092C0011049EFFFFFFFF01C208E0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C0607E601F005B1051504BA01EC01B708860771038C00D30485088C09D400F7
! 06C308DD016B0B810668093102F10368088A0B1E0AD1038206F203EF058904790C0707E701F105B2051604BB01ED01B8
! 08870772038D00D40486088D09D500F806C408DE016C0B820669093202F20369088B0B1F0AD2038306F303F0058A047A
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF033D07610A520088043006290434028305950717096D006D0A6A064B03660016
! 01AB07EC04DD049F03290B0C072803250B5F070508F40521053507F80A480AB7033E07620A5300890431062A04350284
! 05960718096E006E0A6B064C0367001701AC07ED04DE04A0032A0B0D072903260B60070608F50522053607F90A490AB8
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0703039E00DB0A3A0BF4099F00E403AF0834025705E8048D08900B4C011C0902
! 07490000010C01F20539047B03270AC30A3BFFFFFFFF099B03B00704039F00DC048E0BF509A000E509030835025805E9
! 01F308910B4D011D0AC4074A0001010D099C053A047C0328FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09000059041A06900459002709390621001F00C3039405CA053B056808580783
! 079701A7000207FC0AFC035B046F04D00579017A028D0B690A300C0C09F806E6041B069100140386093A06220901005A
! 039505CB045A002808590784002000C4000307FD053C0569047004D1079801A8028E0B6A0AFD035C09F906E7057A017B
! 001503870A310C0DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
  );
! //12160 bytes
  enum fullCaseTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x"
  000000000000000000000000000000200000000000000140",
  x"
! 0000000000000100000000000000048000000000000012C0",
  x"
  040203020202010007020202060202050202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
*************** x"
*** 5812,5823 ****
  004400430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000000000000000000000000000000000000000000000004500000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000004700460000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- 5901,5912 ----
  004400430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000000000000000000000000000000000000000470046004500000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000004900480000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
*************** x"
*** 5829,6032 ****
  00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 09AC008C09E8FFFF09D600C90350066E0C2A00760AAA0CA00BC300F108D10750063F05FC04B408E301AE019B0B16081C
! FFFF032A0533057FFFFFFFFFFFFFFFFF09AD008D09E9FFFF09D700CA0351066F0C2B00770AAB0CA10BC400F208D20751
! 064005FD04B508E401AF019C0B17081DFFFF032B05340580FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A35FFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09030130061B0810041E02810A900BCC0C4E014003CD05BC034C005003D506A0
! 02CC009209A40666FFFF00D705F0079B0559023A0A540BDB0BD60B290931078B09040131061C0811041F02820A910BCD
! 0C4F014103CE05BD034D005103D606A102CD009309A50667FFFF00D805F1079C055A023B0A550BDC03A70B2A0932078C
! 052405230AB90AB80C590C5801EE01ED07C207C102270226096C096B00DA00D9068906880067006606950694005D005C
! 06DC06DB02E202E108A708A601750174088608850C8B0C8A0B4A0B490516051505FB05FA01D301D20A3E0A3D02430242
! 092A0929FFFF0402035303520A070A06078700A100A0FFFF08C7009B009A078808620C300C2F08C80B06013901380863
! 0536053503240B070C670C66085D085C017D017C0744074302DA02D907030702000F000E067F067E007B007A06B806B7
! 00DE00DD08E608E50205020407B807B701BF01BE0C830C820B3A0B39051E051D05C905C8086908680ADB0ADA0A480A47
! 0027069B069A03A806410671067000280C160C1507080711029F05870294029301CC089F0C3802A00BB307FEFFFF01CD
! 0581097709760B2B0A620C06025102A50482052100A300A2036200DF09B400B606A306A2001F001E041205B6011A0119
! FFFFFFFF0A7A041307EE089201840183058D081601C407EF0BB103330332058EFFFFFFFF0280027F01CAFFFF09EB09EA
! FFFFFFFFFFFFFFFF065109F909F809F70BDE0BDD065306520830055C055B0BDF08000B460B4508310B6B048B048A0801
! 05B4032F032E0B6C0C550C5407FF05B50186018506CE06CD02F002EF066D066C0103010206BE06BD05D305D2072C072B
! 0BAD0BAC0BAB094801CB025207DD07DC021102100C6F0C6E0A420A41046104600607060608EE08ED098309820A0E0A0D
! 0951095003ED03EC046304620C0F0C0E0B7A0B79045204510592059102E402E3089508940188018708F808F706250624
! 07570756FFFF00E00C850C84006F006E07D207D100CE00CD093B093A00840083077F077E05DF05DEFFFFFFFFFFFFFFFF
! 082E0AEEFFFFFFFF0A2D08560522082F07120167016602B70AAF0AAE03040464035B035A09F109F00AD70AD60A240A23
! 070902440C1E044708A00C39FFFF05880B2CFFFF0BB4FFFFFFFFFFFFFFFF0A0F02A6FFFF0C2D0582FFFF00C10C770706
! 06B3010B0C070A6300B7FFFFFFFF0A5CFFFF09B5060DFFFFFFFFFFFF0363FFFFFFFFFFFFFFFFFFFFFFFFFFFF0037FFFF
! 0A7B0575FFFF05B7038CFFFFFFFFFFFF081701C504650893FFFFFFFFFFFF0305FFFF0BB2FFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFF0799009EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A43FFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01F001EF04F404F3021C021BFFFFFFFF
! 0B1AFFFFFFFFFFFF03BFFFFF091F013AFFFFFFFFFFFFFFFFFFFF02C6FFFFFFFFFFFF00FC08D307600AA30CA6FFFF0896
! 01970501050B08A1018101F30BAE0AFA0C040C310A440602011B03D908C90A36070AFFFF06A40C7400B8037E067C0364
! 00A608F9078409C800FD08D4076102C701980502050C0AA7018201F40BAF0AFB0C050C320A450603011C03DA08CA0A37
! 070C070B06A50C7500B9037F067D036500A708FA078509C90A490AA40CA70897FFFFFFFF060405030A4A0C760380FFFF
! 04FC04FB01A701A60910090F0B740B730A5B0A5A05E705E603FC03FB0ABB0ABA098709860327032603A0039F04930492
! 03C001F706A60C330B6FFFFF0BB006050647064601F80B700920013B0B1BFFFF0A3F02BE057B054D0619009C0A600BF0
! 09C200AC09C4078903CF00A803540660040405A30C4407AA0BA402A704160771050F013E091B0B7701D80AF4084208B2
! 03100B5E057008900176026F0BBF0A780C5C0A0806DD05E0005E040806960ACD040505A40C4507AB0BA502A804170772
! 0510013F091C0B7801D90AF5084308B303110B5F05710891017702700BC00A790C5D0A0906DE05E1005F040906970ACE
! 0A4002BF057C054E061A009D0A610BF109C300AD09C5078A03D000A903550661063B063A0B8E0B8D0C490C48026E026D
! 042904280220021F090609050A8B0A8A09A709A6060C060B03D803D7098B098A0A050A0409390938045F045E04210420
! FFFFFFFF0C210C20FFFFFFFFFFFFFFFF06140613FFFFFFFF00F700F608D608D500690068075907580005000406910690
! 00D600D507C007BF05CB05CA096A09690120011F073C073B01BD01BC054C054B04A304A20AF10AF00C710C7008530852
! 044E044D08DC08DB09B709B60A940A93099F099E035D035C03F703F60AD90AD80246074C074B030C025F064906480247
! 04EF0B050B040260030D082B082A04F005BF05BE02640263076E076D028C028B069D069C0063006206F806F700240023
! 06F306F2012B012A05CD05CC027202710841084001330132080D080C04EA04E904B704B60B7C0B7B0BFB0BFA025E025D
! 0473047203CA03C9098F098E09D909D809EF09EE03710370041B041A0AE10AE00B800B7F08D008CF01EA01E908330832
! 02F502F40AFF0AFE018C018B0548054706290628072807270032003106C406C3003E003D06B006AF00C000BF0C6B0C6A
! 0BBE0BBD07CA07C9054A054909430942024F01990CA8FFFF0B8502C007A3050D05EE04CC08FF0BB5014C0C64075E03E6
! 0334038E06FC03C1014E09FA06FE09CE0C260A1707620622055F058509070AE602570B20079F02C2FFFF081E064D019F
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0250019A0CA9FFFF0B8602C107A4050E05EF04CD09000BB6014D0C65075F03E7
! 0335038F06FD03C2014F09FB06FF09CF0C270A18076306230560058609080AE702580B2107A002C30678081F064E01A0
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF056C042E08CD0A8C01CE0C9407800216
! 01D604E704D4026B04BA092D0B890B870BF2072308A405CE047806BF03D101090988070F09D4030A09E206EC0374016A
! 041408FB0AC70C500B93FFFF0312011DFFFFFFFFFFFFFFFFFFFFFFFF0B3DFFFF0441071A0BE0016E0A0006E204740632
! 040A0662034E003309F50C3A0AD1002B090B073705C00098047009330A7F0BD90AEA07F6023C055D079D052B027301FD
! 08C30A6A0B9A02CE0776040C05EC0424FFFF03DD01360C34071509D00010FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 039D00CF047A06440A02007808C107490ADC0C2803B1095F036E008E098006760B4302FE021D0B5605C201500A25073F
! 086005DA0C80087907F20ACB053904DA06C503B50318049807250A72015A08FD095409E4004C04A806AB034A004E0CA2
! 0C680ABC025B0A8507CD05A60096029B081407A10AEC0BD20511097B020A058903EE07640ADE02B508BD0C3E06260221
! 03A5072F0386064F09FC073302DD015203CB06980C860056FFFFFFFF0480006C03CC06990C870057FFFFFFFF0481006D
! 05720AF6077305A5063C0A0A0B610B60FFFF08AF08AE0720FFFFFFFFFFFFFFFF0442071B0BE1016F0A0106E304750633
! 040B0663034F003409F60C3B0AD2002C090C073805C10099047109340A800BDA0AEB07F7023D055E079E052C027401FE
! 08C40A6B0B9B02CF0777040D05ED0425FFFF03DE01370C35071609D10011FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFF0577FFFFFFFFFFFF0344FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C98FFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 0520051F077D077C0C890C88080B080A04C104C008A908A8028A02890A570A5609D309D205DD05DC036D036C09BF09BE
! 09DF09DE02FD02FC0419041804A704A6085F085E0BFF0BFE0B010B00053805370639063801C901C807BC07BB026A0269
! 08EA08E900E700E6068B068A006B006A06830682001500140714071302D102D0073E073D0179017808370836061E061D
! 04E204E10B4C0B4B0C5B0C5A022F022E0423042202350234092C092B0A140A1309CB09CA0391039003BA03B909970996
! 0A320A3109360935022B022A041D041C01D501D40C3D0C3C0B260B2504CF04CE06310630087C087B0169016808BA08B9
! 02DC02DB06D606D50053005206A806A7009500940693069205A205A1095C095B022D022C07C807C701F201F1051A0519
! 048904880B420B4100E10C92086B086A093704AC05D00406FFFF0BD7FFFFFFFF09AF09AE033B033A03E203E10AA20AA1
! 0BD10BD0027E027D0884088304770476084908480B090B0807AD07AC051C051B05A905A802410240078E078D00A500A4
! 066B066A00AF00AE06CC06CB005900580BF50BF4013D013C059405930331033008070806012F012E084D084C04E604E5
! 043C043B0B590B580C7F0C7E027802770485048403FE03FD09C109C00999099809ED09EC039C039B05AF05AE0A670A66
! 0B630B62095E095D01B501B4049B049A01F601F50B300B2F00FF00FE076907680AE2003B03E8067A05B801040A1D0C40
! 0AE3003C03E9067B05B901050A1E0C41025301B80B180802FFFFFFFF07820525025401B90B190803FFFFFFFF07830526
! 001A0336067203DB018D0921070009B2001B0337067303DC018E0922070109B3019D0BB90B1C03160206082504FD01C0
! 019E0BBA0B1D03170207082604FE01C103920654038A007FFFFFFFFF0984000C03930655038B0080FFFFFFFF0985000D
! 0B47090D020C008708040745052D0C220B48FFFF020DFFFF0805FFFF052EFFFF06CF048602F60A6406560C90002F03F2
! 06D0048702F70A6506570C91003003F30AB20306031E04900466063D02300B5C0B3F0B9C000A09AAFFFFFFFF068E0358
! 08740BA80AF70C1909BB0142060807AE08750BA90AF80C1A09BC0143060907AF0AD3064A03F8076A061F022309F20C10
! 0AD4064B03F9076B0620022409F30C110B510BC70C7B0AC00201056507D3096F0B520BC80C7C0AC10202056607D40970
! 0A4D049C06E403AD00410C79FFFF0340031F049106E503AEFFFF0A46FFFF0A4E0B22086CFFFFFFFF05310597FFFF0ACF
! 02310B5D0AB30307FFFFFFFFFFFF0B2308A2093E039900C709940664FFFFFFFF0467063E039A00C8FFFFFFFFFFFFFFFF
! 0AA8090901E2019104F5081202C80C4C0B400B9D01E30192FFFFFFFFFFFF02C907170A97FFFFFFFF06F0093CFFFF05E8
! 068F0359000B09ABFFFFFFFFFFFF0718FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0786FFFFFFFF
! 0A920C2CFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A21FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A22FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04A404E30B64084A0B270AB6019307FC079303220212059508D9049600ED0BE4
! 04A504E40B65084B0B280AB7019407FD079403230213059608DA049700EE0BE50925FFFFFFFFFFFFFFFFFFFFFFFF0926
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05FE03B7FFFFFFFF07DA08C500B20C2409520AA5058B0443
! 084E04D60B7D02360B8B07A801A8024B0579091102CA01170A1106D70A4B0C1C00B30C2505FF03B8058C044407DB08C6
! 0B7E023709530AA601A9024C084F04D702CB01180B8C07A90A4C0C1D057A0912FFFFFFFF0A1206D8FFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01210BE606D1040E056A048C073908D7
! 0B9E01E7091D0B37024D023207E804EB02A105990C6007950A5800B4045308BB060F00350A0B078F099C00470A2B06B1
! 0927016C03DF06EA042A06420C0807040B8F012C0449086E059B01DA0314051301220BE706D2040F056B048D073A08D8
! 0B9F01E8091E0B38024E023307E904EC02A2059A0C6107960A5900B5045408BC061000360A0C0790099D00480A2C06B2
! 0928016D03E006EB042B06430C0907050B90012D044A086F059C01DB03150514034506B40040003F0AB408570AEF0038
! 028F03BC03BB0AB50448060E0C1F02900AFD0AFCFFFF0245FFFF07E307E2FFFFFFFFFFFFFFFFFFFF02B80A2EFFFFFFFF
! 0373037202D302D209DD09DC0991099002E902E803B003AF04BD04BC0A690A680C570C5608AB08AA05050504080F080E
! 020F020E0B4E0B4D00F000EF05D505D40071007007BA07B9002600250966096500650064069F069E028E028D0C180C17
! 01AB01AA07480747062B062A085908580B1F0B1E07E507E402AA02A9053C053B03EB03EA0BFD0BFC0A280A2704BF04BE
! 035F035E099B099A0A960A9509FF09FE08DE08DD05E305E2046904680B990B980AF30AF2023F023E0798079701C301C2
! 08CC08CB01240123FFFFFFFFFFFFFFFF0397FFFFFFFFFFFFFFFF036103600398075B075AFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF056D042F08CE0A8D01CF0C950781021701D704E804D5026C04BB092E0B8A0B88
! 0BF3072408A505CF047906C003D2010A0989071009D5030B09E306ED0375016B041508FC0AC80C510B94FFFF0313011E
! FFFFFFFFFFFFFFFFFFFFFFFF0B3EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 0B030B0201FA01F9083508340B840B8307220721015901580552055102EB02EA06BA06B90044004306C206C1062D062C
! 07D007CF008200810C6D0C6C00460045081B081A05460545094709460BC60BC50BB80BB702F902F8FFFFFFFF01960195
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02C502C4057405730AE50AE40A1A0A19
! 0B6E0B6D0847084601A501A40B2E0B2D00BB00BA07DF07DE0590058F09410940003A0039065D065CFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00090008FFFFFFFF00D200D109680967
! 00F900F8077B077A007300720685068401730172FFFFFFFF0C4B0C4A08E008DF0A9C0A9B0562056102E002DF0B0F0B0E
! 0A300A2F0930092F03D403D30A530A52090209010C5F0C5E036903680349034806160615023902380A5F0A5E04580457
! 091A0919057E057D0B0B0B0A0266026506E706E601160115072A07290C0D0C0C06DA06D901710170071D071C031B031A
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF052F083B083AFFFF0C730C72057805300A8F0A8E05EB05EA08F208F10BC20BC1
! 005AFFFFFFFFFFFFFFFFFFFF0C78005B027602750C0B0C0A03F103F0FFFF084404EE04ED087808770ABF0ABE0440043F
! 02A402A3056F056E0135013408B808B70A1000C207920791FFFF010C0A5D0C2E0C62009F038D079A00AB00AA065B065A
! 015701560770076F02BA02B905B305B2047D047C08AD08AC07F00C990576084507070190018F07F1FFFFFFFF0A6D0A6C
! FFFFFFFF0329032803470346FFFFFFFF091809170BEB0BEAFFFFFFFFFFFF0483FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0ACA0AC9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C63FFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 039E00D0047B06450A03007908C2074A0ADD0C2903B20960036F008F098106770B4402FF021E0B5705C301510A260740
! 086105DB0C81087A07F30ACC053A04DB06C603B60319049907260A73015B08FE095509E5004D04A906AC034B004F0CA3
! 0C690ABD025C0A8607CE05A70097029C081507A20AED0BD30512097C020B058A03EF07650ADF02B608BE0C3F06270222
! 03A607300387065009FD073402DE01530611014A08E10C00FFFF0B960B950864FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 0A1FFFFFFFFFFFFF0366001604C206B5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02910BEC0A99FFFF0A1B06BB0617015C0C9C080807E0052704450553085A0154
! 0320043205B0028301B2083C0B710BA0FFFF049E0674098CFFFFFFFFFFFFFFFF02920BED0A9AFFFF0A1C06BC0618015D
! 0C9D080907E1052804460554085B01550321043305B1028401B3083D0B720BA1FFFF049F0675098DFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF062E07F407E60B4F0A830BA2088B0148030E0A700BF60A29015E0872053D0557
! 099206AD04C800FA03A907B103000054028705AC044F030203BD06EE0C8C016004CA08230BBB0B660C520818025904D2
! 062F07F507E70B500A840BA3088C0149030F0A710BF70A2A015F0873053E0558099306AE04C900FB03AA07B203010055
! 028805AD0450030303BE06EF0C8D016104CB08240BBC0B670C530819025A04D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07D608870BCA0B330C020A76026105D6
! 082C0C460A9D025507F804D004F10279072D037C0634036A075202AE01DE0C3606C9042C02B30A81068009A0002D031C
! 09720B120B1007EAFFFFFFFFFFFFFFFF07D708880BCB0B340C030A77026205D7082D0C470A9E025607F904D104F2027A
! 072E037D0635036B075302AF01DF0C3706CA042D02B40A82068109A1002E031D09730B130B1107EBFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 029500B004AE0944027B01250BE20731FFFF00C30A150C4209CC00C509C6065801620C8E086608B00338042605C408E7
! FFFF02D7046A05F2054104C607FA0B0CFFFF03F406C70B140945FFFF075C02FA0732029600B104AF0C43027C01260BE3
! 0659FFFF00C40A1608B109CD00C609C708E801630C8F086705F30339042705C50B0DFFFF02D8046B0B15054204C707FB
! 02FBFFFF03F506C8FFFFFFFFFFFF075D016401AC04D8052905D8020808810C9A048E06360430071E033C0B350B750889
! 00D309DA0C9609E000DB094A07BD037A01130A3B092304B2008503A307C30956037805170583022804B008380BCE0B5A
! 059F04B808EB0A3301DC000207740267FFFF06E80AC3032CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 016501AD04D9052A05D9020908820C9B048F06370431071F033D0B360B76088A00D409DB0C9709E100DC094B07BE037B
! 01140A3C092404B3008603A407C40957037905180584022904B108390BCF0B5B05A004B908EC0A3401DD000307750268
! FFFF06E90AC4032DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07C504FF01E001B009630A9F0BD40214055509610A6E0BE80B3107B501EB053F
! 068609A2001204C4FFFFFFFF01D0094EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07C6050001E101B109640AA00BD50215
! 055609620A6F0BE90B3207B601EC0540068709A3001304C5FFFFFFFF01D1094FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C9E083E01FF05E4054304DF01FB01C608EF07CB03AB00EB04AA08F50A500100
! 070D094C017A0C1306A909A80308038408F30BA60B5403A10741041005BA04A00C9F083F020005E5054404E001FC01C7
! 08F007CC03AC00EC04AB08F60A510101070E094D017B0C1406AA09A90309038508F40BA70B5503A20742041105BB04A1
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF035607B30AAC0090045506680459028505C6076609E600740AE8068C03880018
! 01BA0854050604F703420B910778033E0BEE0754096D054F056308500AC50B3B035707B40AAD009104560669045A0286
! 05C7076709E700750AE9068D0389001901BB0855050704F803430B920779033F0BEF0755096E0550056408510AC60B3C
! 09740060043D06D3047E002909B0065E000000CB03B306000568059D08BF07D807EC01B6000608700B810376049404F9
! 05AA0189029D0BF80AB00CA40A740735043E06D4001C044B09B1065F0975006103B40601047F002A08C007D9000100CC
! 000708710569059E049504FA07ED01B7029E0BF90B8203770A75073605AB018A001D044C0AB10CA5FFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
  );
! //5760 bytes
  enum alphaTrieEntries = TrieEntry!(bool, 8, 5, 8)(x"
  0000000000000000000000000000002000000000000000D0",
  x"
! 000000000000010000000000000002C00000000000008000",
  x"
  06050403030201000E0D0C0B0A09080711100F0303030303141414141414131214141414141414141414141414141414
  141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414
--- 5918,6127 ----
  00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 09D4008E0A10FFFF09FE00CB0360068C0C6000780AD60CD80BF700F508F5076E065D061804CE090701B801A50B48083E
! FFFF033A054D059BFFFFFFFFFFFFFFFF09D5008F0A11FFFF09FF00CC0361068D0C6100790AD70CD90BF800F608F6076F
! 065E061904CF090801B901A60B49083FFFFF033B054E059CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A61FFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0929013A063708320434028F0ABC0C000C84014A03E305D8035C005203EB06BE
! 02DC009409CC0684FFFF00D9060C07BD057302460A800C0F0C0A0B5B095707AB092A013B06380833043502900ABD0C01
! 0C85014B03E405D9035D005303EC06BF02DD009509CD0685FFFF00DA060D07BE057402470A810C1003B90B5C095807AC
! 053E053D0AE50AE40C8F0C8E01F801F707E407E3023302320992099100DC00DB06A706A60069006806B306B2005F005E
! 06FA06F902F202F108CB08CA017F017E08A808A70CC30CC20B7E0B7D0530052F0617061601DD01DC0A6A0A69024F024E
! 0950094FFFFF0418036303620A2F0A2E07A700A300A2FFFF08EB009D009C07A808840C660C6508EC0B38014301420885
! 0550054F03340B390C9D0C9C087F087E018701860762076102EA02E907210720000F000E069D069C007D007C06D606D5
! 00E000DF090A09090211021007DA07D901C901C80CB90CB80B6C0B6B0538053705E505E4088B088A0B0D0B0C0A740A73
! 002906B906B803BA065F068F068E002A0C4C0C4B0726072F02AF05A302A202A101D608C30C6E02B00BE70820FFFF01D7
! 059D099F099E0B5D0A8E0C3C025D02B50498053B00A500A4037200E109DC00B806C106C0001F001E042805D201220121
! FFFFFFFF0AA60429081008B4018E018D05A9083801CE08110BE50343034205AAFFFFFFFF028E028D01D4FFFF0A130A12
! FFFFFFFFFFFFFFFF066F0A210A200A1F0C140C13067106700852057605750C1508220B780B7708530B9F04A104A00823
! 05D0033F033E0BA00C8B0C8A082105D10190018F06EC06EB030002FF068B068A0109010806DC06DB05EF05EE074A0749
! 0BE10BE00BDF096E01D5025E07FF07FE021D021C0CA50CA40A6E0A6D04770476062306220912091109AB09AA0A360A35
! 0977097604030402047904780C450C440BAE0BAD0468046705AE05AD02F402F308B708B601920191091C091B06430642
! 07770776FFFF00E20CBB0CBA0071007007F407F300D000CF0961096000860085079F079E05FB05FAFFFFFFFFFFFFFFFF
! 08500B20FFFFFFFF0A590878053C085107300171017002C70ADB0ADA0314047A036B036A0A190A180B090B080A500A4F
! 072702500C54045D08C40C6FFFFF05A40B5EFFFF0BE8FFFFFFFFFFFFFFFF0A3702B6FFFF0C63059EFFFF00C30CAD0724
! 06D101110C3D0A8F00B9FFFFFFFF0A88FFFF09DD0629FFFFFFFFFFFF0373FFFFFFFFFFFFFFFFFFFFFFFFFFFF0039FFFF
! 0AA70591FFFF05D3039EFFFFFFFFFFFF083901CF047B08B5FFFFFFFFFFFF0315FFFF0BE6FFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFF07BB00A0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A6FFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01FA01F9050E050D02280227FFFFFFFF
! 0B4CFFFFFFFFFFFF03D3FFFF09450144FFFFFFFFFFFFFFFFFFFF02D6FFFFFFFFFFFF010208F707800ACF0CDEFFFF08B8
! 01A1051B052508C5018B01FD0BE20B2C0C3A0C670A70061E012303EF08ED0A620728FFFF06C20CAA00BA0390069A0374
! 00A8091F07A409F0010308F8078102D701A2051C05260AD3018C01FE0BE30B2D0C3B0C680A71061F012403F008EE0A63
! 072A072906C30CAB00BB0391069B037500A9092007A509F10A750AD00CDF08B9FFFFFFFF0620051D0A760CAC0392FFFF
! 0516051501B101B0093609350BA80BA70A870A8606030602041204110AE90AE809AF09AE0337033603B203B104A904A8
! 03D4020106C40C690BA3FFFF0BE406210665066402020BA4094601450B4DFFFF0A6B02CE059705670635009E0A8C0C26
! 09EA00AE09EC07A903E500AA0364067E041A05BF0C7A07CC0BD802B7042C07910529014809410BAB01E20B26086408D6
! 03200B92058C08B20180027D0BF30AA40C920A3006FB05FC0060041E06B40AFD041B05C00C7B07CD0BD902B8042D0792
! 052A014909420BAC01E30B27086508D703210B93058D08B30181027E0BF40AA50C930A3106FC05FD0061041F06B50AFE
! 0A6C02CF059805680636009F0A8D0C2709EB00AF09ED07AA03E600AB0365067F065906580BC20BC10C7F0C7E027C027B
! 043F043E022C022B092C092B0AB70AB609CF09CE0628062703EE03ED09B309B20A2D0A2C095F095E0475047404370436
! FFFFFFFF0C570C56FFFFFFFFFFFFFFFF0630062FFFFFFFFF00FB00FA08FA08F9006B006A077907780005000406AF06AE
! 00D800D707E207E105E705E60990098F01280127075A075901C701C60566056504B904B80B230B220CA70CA608750874
! 04640463090008FF09DF09DE0AC00ABF09C709C6036D036C040D040C0B0B0B0A0252076A0769031C026B066706660253
! 05090B370B36026C031D084D084C050A05DB05DA0270026F078E078D029A029906BB06BA006500640716071500260025
! 071107100135013405E905E80280027F08630862013D013C082F082E0504050304D104D00BB00BAF0C310C30026A0269
! 0489048803DE03DD09B709B60A010A000A170A1603810380043104300B130B120BB40BB308F408F301F401F308550854
! 030503040B310B30019601950562056106470646074607450034003306E206E10040003F06CE06CD00C200C10CA10CA0
! 0BF20BF107EC07EB0564056309690968025B01A30CE0FFFF0BB902D007C50527060A04E609250BE901560C9A077E03FC
! 034403A0071A03D501580A22071C09F60C5C0A410782063E057905A1092D0B1802630B5207C102D2FFFF0840066B01A9
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF025C01A40CE1FFFF0BBA02D107C60528060B04E709260BEA01570C9B077F03FD
! 034503A1071B03D601590A23071D09F70C5D0A420783063F057A05A2092E0B1902640B5307C202D306960841066C01AA
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0588044408F10AB801D80CCC07A00222
! 01E0050104EE027904D409530BBD0BBB0C28074108C805EA048E06DD03E7010F09B0072D09FC031A0A0A070A03860174
! 042A09210AF70C860BC7FFFF03220125FFFFFFFFFFFFFFFFFFFFFFFF0B6FFFFF045707380C1601780A280700048A0650
! 04200680035E00350A1D0C700B03002D0931075505DC009A048609590AAB0C0D0B1C08180248057707BF054502810207
! 08E70A960BCE02DE079604220608043AFFFF03F301400C6A073309F80010FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 03AF00D1049006620A2A007A08E507670B0E0C5E03C30985037E009009A806940B75030E02290B8A05DE015A0A55075D
! 088205F60CB6089B08140AFB055304F406E303C7032804AE07430A9E01640923097A0A0C004E04BE06C9035A00500CDA
! 0C9E0AEA02670AB107EF05C2009802AB083607C30B1E0C06052B09A3021605A5040407840B1002C508E10C740644022D
! 03B7074D0398066D0A24075102ED015C03DF06B60CBC0058FFFFFFFF0496006E03E006B70CBD0059FFFFFFFF0497006F
! 058E0B28079305C1065A0A320B950B94FFFF08D308D2073EFFFFFFFFFFFFFFFF045807390C1701790A290701048B0651
! 04210681035F00360A1E0C710B04002E0932075605DD009B0487095A0AAC0C0E0B1D08190249057807C0054602820208
! 08E80A970BCF02DF079704230609043BFFFF03F401410C6B073409F90011FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFF0593FFFFFFFFFFFF0354FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0CD0FFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 053A0539079D079C0CBF0CBE082D082C04DB04DA08CD08CC029802970A830A8209FB09FA05F905F8037D037C09E709E6
! 0A070A06030D030C042F042E04BD04BC088108800C350C340B330B32055205510657065601D301D207DE07DD02760275
! 090E090D00EB00EA06A906A8006D006C06A106A0001500140732073102E102E0075C075B0183018208590858063A0639
! 04FC04FB0B800B7F0C910C90023B023A0439043802410240095209510A3C0A3B09F309F203A303A203CC03CB09BF09BE
! 0A5E0A5D095C095B023702360433043201DF01DE0C730C720B580B5704E904E8064F064E089E089D0173017208DE08DD
! 02EC02EB06F406F30055005406C606C50097009606B106B005BE05BD098209810239023807EA07E901FC01FB05340533
! 049F049E0B740B7300E30CCA088D088C095D04C205EC041CFFFF0C0BFFFFFFFF09D709D6034B034A03F803F70ACE0ACD
! 0C050C04028C028B08A608A5048D048C086B086A0B3B0B3A07CF07CE0536053505C505C4024D024C07AE07AD00A700A6
! 0689068800B100B006EA06E9005B005A0C2B0C2A0147014605B005AF034103400829082801390138086F086E050004FF
! 045204510B8D0B8C0CB50CB402860285049B049A0414041309E909E809C109C00A150A1403AE03AD05CB05CA0A930A92
! 0B970B960984098301BF01BE04B104B0020001FF0B620B6101050104078907880B14003D03FE069805D4010A0A490C76
! 0B15003E03FF069905D5010B0A4A0C77025F01C20B4A0824FFFFFFFF07A2053F026001C30B4B0825FFFFFFFF07A30540
! 001A0346069003F101970947071E09DA001B0347069103F201980948071F09DB01A70BED0B4E032602120847051701CA
! 01A80BEE0B4F032702130848051801CB03A40672039C0081FFFFFFFF09AC000C03A50673039D0082FFFFFFFF09AD000D
! 0B7B0933021800890826076305470C580B7CFFFF0219FFFF0827FFFF0548FFFF06ED049C03060A9006740CC800310408
! 06EE049D03070A9106750CC9003204090ADE0316032E04A6047C065B023C0B900B710BD0000A09D2FFFFFFFF06AC0368
! 08960BDC0B290C4F09E3014C062407D008970BDD0B2A0C5009E4014D062507D10B050668040E078A063B022F0A1A0C46
! 0B060669040F078B063C02300A1B0C470B850BFB0CB10AF0020B057F07F509950B860BFC0CB20AF1020C058007F60996
! 0A7904B2070203BF00430CAFFFFF0350032F04A7070303C0FFFF0A72FFFF0A7A0B54088EFFFFFFFF054B05B3FFFF0AFF
! 023D0B910ADF0317FFFFFFFFFFFF0B5508C6096403AB00C909BC0682FFFFFFFF047D065C03AC00CAFFFFFFFFFFFFFFFF
! 0AD4092F01EC019B050F083402D80C820B720BD101ED019CFFFFFFFFFFFF02D907350AC3FFFFFFFF070E0962FFFF0604
! 06AD0369000B09D3FFFFFFFFFFFF0736FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07A6FFFFFFFF
! 0ABE0C62FFFFFFFFFFFFFFFFFFFFFFFFFFFF0A4DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A4EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04BA04FD0B98086C0B590AE2019D081E07B30332021E05B108FD04AC00F10C1A
! 04BB04FE0B99086D0B5A0AE3019E081F07B40333021F05B208FE04AD00F20C1B094BFFFFFFFFFFFFFFFFFFFFFFFF094C
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF061A03C9FFFFFFFF07FC08E900B40C5A09780AD105A70459
! 087004F00BB102420BBF07CA01B202570595093702DA011D0A3906F50A770C5200B50C5B061B03CA05A8045A07FD08EA
! 0BB2024309790AD201B30258087104F102DB011E0BC007CB0A780C5305960938FFFFFFFF0A3A06F6FFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01290C1C06EF0424058604A2075708FB
! 0BD201F109430B690259023E080A050502B105B50C9607B50A8400B6046908DF062B00370A3307AF09C400490A5706CF
! 094D017603F50708044006600C3E07220BC30136045F089005B701E40324052D012A0C1D06F00425058704A3075808FC
! 0BD301F209440B6A025A023F080B050602B205B60C9707B60A8500B7046A08E0062C00380A3407B009C5004A0A5806D0
! 094E017703F60709044106610C3F07230BC401370460089105B801E50325052E035506D2004200410AE008790B21003A
! 029D03CE03CD0AE1045E062A0C55029E0B2F0B2EFFFF0251FFFF08050804FFFFFFFFFFFFFFFFFFFF02C80A5AFFFFFFFF
! 0383038202E302E20A050A0409B909B802F902F803C203C104D704D60A950A940C8D0C8C08CF08CE051F051E08310830
! 021B021A0B820B8100F400F305F105F00073007207DC07DB00280027098C098B0067006606BD06BC029C029B0C4E0C4D
! 01B501B40766076506490648087B087A0B510B500807080602BA02B905560555040104000C330C320A540A5304D904D8
! 036F036E09C309C20AC20AC10A270A260902090105FF05FE047F047E0BCD0BCC0B250B24024B024A07B807B701CD01CC
! 08F008EF012C012BFFFFFFFFFFFFFFFF03A9FFFFFFFFFFFFFFFF0371037003AA077B077AFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0589044508F20AB901D90CCD07A1022301E1050204EF027A04D509540BBE0BBC
! 0C29074208C905EB048F06DE03E8011009B1072E09FD031B0A0B070B03870175042B09220AF80C870BC8FFFF03230126
! FFFFFFFFFFFFFFFFFFFFFFFF0B70FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 0B350B3402040203085708560BB80BB70740073F01630162056C056B02FB02FA06D806D70046004506E006DF064B064A
! 07F207F1008400830CA30CA200480047083D083C0560055F096D096C0BFA0BF90BEC0BEB03090308FFFFFFFF01A0019F
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02D502D40590058F0B170B160A460A45
! 0BA20BA10869086801AF01AE0B600B5F00BD00BC0801080005AC05AB09670966003C003B067B067AFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00090008FFFFFFFF00D400D3098E098D
! 00FD00FC079B079A0075007406A306A2017D017CFFFFFFFF0C810C80090409030AC80AC7057C057B02F002EF0B410B40
! 0A5C0A5B0956095503EA03E90A7F0A7E092809270C950C94037903780359035806320631024502440A8B0A8A046E046D
! 0940093F059A05990B3D0B3C0272027107050704011C011B074807470C430C4206F806F7017B017A073B073A032B032A
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0549085D085CFFFF0CA90CA80594054A0ABB0ABA06070606091609150BF60BF5
! 005CFFFFFFFFFFFFFFFFFFFF0CAE005D028402830C410C4004070406FFFF086605080507089A08990AEF0AEE04560455
! 02B402B3058B058A013F013E08DC08DB0A3800C407B207B1FFFF01120A890C640C9800A1039F07BC00AD00AC06790678
! 016101600790078F02CA02C905CF05CE0493049208D108D008120CD1059208670725019A01990813029402930A990A98
! 0A520A5103390338035703560AED0AEC093E093D0C210C20FFFFFFFFFFFF0499FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0AFA0AF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C99FFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 03B000D2049106630A2B007B08E607680B0F0C5F03C40986037F009109A906950B76030F022A0B8B05DF015B0A56075E
! 088305F70CB7089C08150AFC055404F506E403C8032904AF07440A9F01650924097B0A0D004F04BF06CA035B00510CDB
! 0C9F0AEB02680AB207F005C3009902AC083707C40B1F0C07052C09A4021705A6040507850B1102C608E20C750645022E
! 03B8074E0399066E0A25075202EE015D062D015409050C36FFFF0BCA0BC90886FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 0A4BFFFFFFFFFFFF0376001604DC06D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF029F0C220AC5FFFF0A4706D9063301660CD4082A08020541045B056D087C015E
! 0330044805CC029101BC085E0BA50BD4FFFF04B4069209B4FFFFFFFFFFFFFFFF02A00C230AC6FFFF0A4806DA06340167
! 0CD5082B08030542045C056E087D015F0331044905CD029201BD085F0BA60BD5FFFF04B5069309B5FFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF064C081608080B830AAF0BD608AD0152031E0A9C0C2C0A5F0168089405570571
! 09BA06CB04E200FE03BB07D303100056029505C80465031203D1070C0CC4016A04E408450BEF0B9A0C88083A026504EC
! 064D081708090B840AB00BD708AE0153031F0A9D0C2D0A60016908950558057209BB06CC04E300FF03BC07D403110057
! 029605C90466031303D2070D0CC5016B04E508460BF00B9B0C89083B026604EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07F808A90BFE0B650C380AA2026D05F2
! 084E0C7C0AC90261081A04EA050B0287074B038E0652037A077002BE01E80C6C06E7044202C30AAD069E09C8002F032C
! 09980B440B42080CFFFFFFFFFFFFFFFF07F908AA0BFF0B660C390AA3026E05F3084F0C7D0ACA0262081B04EB050C0288
! 074C038F0653037B077102BF01E90C6D06E8044302C40AAE069F09C90030032D09990B450B43080DFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 02A500B204C4096A0289012D0C18074FFFFF00C50A3D0C7809F400C709EE0676016C0CC6088808D40348043C05E0090B
! FFFF02E70480060E055B04E0081C0B3EFFFF040A06E50B46096BFFFF077C030A075002A600B304C50C79028A012E0C19
! 0677FFFF00C60A3E08D509F500C809EF090C016D0CC70889060F0349043D05E10B3FFFFF02E804810B47055C04E1081D
! 030BFFFF040B06E6FFFFFFFFFFFF077D016E01B604F2054305F4021408A30CD204A406540446073C034C0B670BA908AB
! 00D50A020CCE0A0800DD097007DF038C01190A67094904C8008703B507E5097C038A0531059F023404C6085A0C020B8E
! 05BB04D2090F0AD801E6000207940273FFFF07060AF3033CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 016F01B704F3054405F5021508A40CD304A506550447073D034D0B680BAA08AC00D60A030CCF0A0900DE097107E0038D
! 011A0A68094A04C9008803B607E6097D038B053205A0023504C7085B0C030B8F05BC04D309100AD901E7000307950274
! FFFF07070AF4033DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07E7051901EA01BA09890ACB0C080220056F09870A9A0C1E0B6307D701F50559
! 06A409CA001204DEFFFFFFFF01DA0974FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07E8051A01EB01BB098A0ACC0C090221
! 057009880A9B0C1F0B6407D801F6055A06A509CB001304DFFFFFFFFF01DB0975FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0CD6086002090600055D04F9020501D0091307ED03BD00EF04C009190A7C0106
! 072B097201840C4906C709D00318039609170BDA0B8803B3075F042605D604B60CD70861020A0601055E04FA020601D1
! 091407EE03BE00F004C1091A0A7D0107072C097301850C4A06C809D10319039709180BDB0B8903B40760042705D704B7
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF036607D50B010092046B0686046F02A305E207860A0E00760B1A06AA039A0018
! 01C408760520051103520BC50798034E0C24077409930569057D08720AF50B6D036707D60B020093046C0687047002A4
! 05E307870A0F00770B1B06AB039B001901C508770521051203530BC60799034F0C2507750994056A057E08730AF60B6E
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF077203CF00E50AE60CC00A43010003E108BA0277064004CA091D0C11012F099C
+ 07B90000011F020E058204CC03840B790AE7FFFFFFFF0A3F03E2077303D000E604CB0CC10A440101099D08BB02780641
+ 020F091E0C1201300B7A07BA000101200A40058304CD0385FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF099A0062045306F10494002B09D8067C002300CD03C5061C058405B908E307FA
+ 080E01C0000608920BB5038804AA051305C6019302AD0C2E0ADC0CDC0AA00753045406F2001C046109D9067D099B0063
+ 03C6061D0495002C08E407FB002400CE00070893058505BA04AB0514080F01C102AE0C2F0BB603890AA1075405C70194
+ 001D04620ADD0CDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
  );
! //5728 bytes
  enum alphaTrieEntries = TrieEntry!(bool, 8, 5, 8)(x"
  0000000000000000000000000000002000000000000000D0",
  x"
! 000000000000010000000000000002C00000000000007F00",
  x"
  06050403030201000E0D0C0B0A09080711100F0303030303141414141414131214141414141414141414141414141414
  141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414
*************** x"
*** 6048,6065 ****
  000100010001000100010001000100010058000100010001001F005900010001001F001F001F001F001F001F001F001F
  001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F005A001F001F001F001F001F
  005C005B00010001005F005E005D001F0001000100010001000100010001000100010001000100010001000100010001
! 000100010001000100600001000100010001000100010001001F001F00620061001F001F001F001F001F001F001F001F
! 001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F0063001F001F001F
! 001F006500640001001F001F001F001F001F001F001F001F001F001F001F0066001F001F001F001F001F001F001F001F
! 001F001F001F001F001F001F001F001F001F001F001F001F006A006900680067001F001F001F001F006B001F001F001F
! 001F006E006D006C0071001F0070006F001F001F00730072001F0074001F001F001F001F0075001F001F001F001F001F
  001F001F001F001F001F001F001F001F0001000100010001000100760001000100010001000100010001000100010001
! 000100010001000100770001000100010001000100010078000100010001000100010001000100010001000100010001
! 000100010001000100010079000100010001000100010001000100010001000100010001000100010001000100010001
! 00010001000100010001000100010001007A000100010001001F007B00010001001F001F001F001F001F001F001F001F
! 001F007C00010001001F001F001F001F0001000100010001000100010001000100010001000100010001000100010001
! 007D000100010001000100010001000100010001000100010001000100010001007E000100010001001F001F001F001F
! 001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F
  001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F
  001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F
  001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F000000000000000007FFFFFE07FFFFFE
--- 6143,6160 ----
  000100010001000100010001000100010058000100010001001F005900010001001F001F001F001F001F001F001F001F
  001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F005A001F001F001F001F001F
  005C005B00010001005F005E005D001F0001000100010001000100010001000100010001000100010001000100010001
! 000100010001000100010001000100010001000100010001001F001F00610060001F001F001F001F001F001F001F001F
! 001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F0062001F001F001F
! 001F006400630001001F001F001F001F001F001F001F001F001F001F001F0065001F001F001F001F001F001F001F001F
! 001F001F001F001F001F001F001F001F001F001F001F001F0069006800670066001F001F001F001F006A001F001F001F
! 001F006D006C006B00710070006F006E001F001F00730072001F0074001F001F001F001F0075001F001F001F001F001F
  001F001F001F001F001F001F001F001F0001000100010001000100760001000100010001000100010001000100010001
! 000100010001000100010001000100010001000100010077000100010001000100010001000100010001000100010001
! 000100010001000100010078000100010001000100010001000100010001000100010001000100010001000100010001
! 000100010001000100010001000100010079000100010001001F007A00010001001F001F001F001F001F001F001F001F
! 001F007B00010001001F001F001F001F0001000100010001000100010001000100010001000100010001000100010001
! 007C00010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001
! 000100010001000100010001000100010001000100010001001F001F001F007D001F001F001F001F001F001F001F001F
  001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F
  001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F
  001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F000000000000000007FFFFFE07FFFFFE
*************** FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
*** 6068,6077 ****
  FFFFFFFBFFFFD740FFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC03FFFFFFFFFFFFFFFF
  FFFEFFFFFFFFFFFFFFFFFFFF027FFFFFBFFF0000000001FF000787FFFFFF00B6FFFFFFFF07FF0000FFFFC000FEFFFFFF
  FFFFFFFFFFFFFFFF9C00E1FE1FEFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFE0000003FFFFFFFFFFFF043007FFFFFFFC00
! 00001FFFFCFFFFFFFFFF07FF01FFFFFFFFFFFFFF00807EFFFFFF03F8FFF003FFEFFFFFFFFFFFFFFFFFFE000FFFE1DFFF
  E3C5FDFFFFF99FEF1003000FB080599FC36DFDFFFFF987EE003F00005E021987E3EDFDFFFFFBBFEE1E00000F00011BBF
! E3EDFDFFFFF99FEE0002000FB0C0199FC3FFC718D63DC7EC0000000000811DC7E3FFFDFFFFFDDFFF0000000F27601DDF
! E3EFFDFFFFFDDFEF000E000F60601DDFE7FFFFFFFFFDDFFFFC00000F80F05DDF2FFBFFFFFC7FFFEE000C0000FF5F807F
  07FFFFFFFFFFFFFE000000000000207F3BFFFFAFFFFFF7D600000000F000205F0000000000000001FFFE1FFFFFFFFEFF
  1FFFFFFFFEFFFF0F0000000000000000F97FFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF3C00FFFFF7FFFFFFFFFF20BF
  FFFFFFFFFFFFFFFFFFFFFFFF3D7F3DFF7F3DFFFFFFFF3DFFFFFFFFFFFF7FFF3DFFFFFFFFFF3DFFFF0000000007FFFFFF
--- 6163,6172 ----
  FFFFFFFBFFFFD740FFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC03FFFFFFFFFFFFFFFF
  FFFEFFFFFFFFFFFFFFFFFFFF027FFFFFBFFF0000000001FF000787FFFFFF00B6FFFFFFFF07FF0000FFFFC000FEFFFFFF
  FFFFFFFFFFFFFFFF9C00E1FE1FEFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFE0000003FFFFFFFFFFFF043007FFFFFFFC00
! 00001FFFFCFFFFFFFFFF07FF01FFFFFFFFFFFFFF0080FEFFFFFF03F8FFF003FFEFFFFFFFFFFFFFFFFFFE000FFFE1DFFF
  E3C5FDFFFFF99FEF1003000FB080599FC36DFDFFFFF987EE003F00005E021987E3EDFDFFFFFBBFEE1E00000F00011BBF
! E3EDFDFFFFF99FEE0002000FB0C0199FC3FFC718D63DC7EC0000000000811DC7E3FFFDFFFFFDDFFF0000000F37601DDF
! E3EFFDFFFFFDDFEF000E000F70601DDFE7FFFFFFFFFDDFFFFC00000F80F05DDF2FFBFFFFFC7FFFEE000C0000FF5F807F
  07FFFFFFFFFFFFFE000000000000207F3BFFFFAFFFFFF7D600000000F000205F0000000000000001FFFE1FFFFFFFFEFF
  1FFFFFFFFEFFFF0F0000000000000000F97FFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF3C00FFFFF7FFFFFFFFFF20BF
  FFFFFFFFFFFFFFFFFFFFFFFF3D7F3DFF7F3DFFFFFFFF3DFFFFFFFFFFFF7FFF3DFFFFFFFFFF3DFFFF0000000007FFFFFF
*************** FFFFFFFFFFFFFFFF000C781FFFFFFFFFFFFF20BF
*** 6090,6096 ****
  FFFFFFFEE07FFFFFF7FFFFFFFFFFFFFFFFFEFFFFFFFFFFE0FFFFFFFFFFFFFFFFFFFFFFFF00007FFFFFFF000000000000
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  0000000000001FFF3FFFFFFFFFFF000000000C00FFFF1FFF8FF07FFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF
! FFFFFFFCFF800000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FFFFFC00001FEB3FFF000000FFFFFFFFBF000FFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFE8FC00000000002FFFFF07FFFFFFFC001FFFFFFF0007FFFFFFF7FFFFFFFFFFFF7C00FFFF00008000
  007FFFFFFFFFFFFFFC7FFFFF00003FFF7FFFFFFFFFFFFFFF003CFFFF38000005FFFF7F7F007E7E7EFFFF03FFF7FFFFFF
  FFFFFFFFFFFFFFFF000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFF0FFFFFFFFFFFF87F
--- 6185,6191 ----
  FFFFFFFEE07FFFFFF7FFFFFFFFFFFFFFFFFEFFFFFFFFFFE0FFFFFFFFFFFFFFFFFFFFFFFF00007FFFFFFF000000000000
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  0000000000001FFF3FFFFFFFFFFF000000000C00FFFF1FFF8FF07FFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF
! FFFFFFFCFF800000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FFFFFE00001FFFFFFF000000FFFFFFFFBF000FFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFE8FC00000000002FFFFF07FFFFFFFC001FFFFFFF0007FFFFFFF7FFFFFFFFFFFF7C00FFFF00008000
  007FFFFFFFFFFFFFFC7FFFFF00003FFF7FFFFFFFFFFFFFFF003CFFFF38000005FFFF7F7F007E7E7EFFFF03FFF7FFFFFF
  FFFFFFFFFFFFFFFF000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFF0FFFFFFFFFFFF87F
*************** FFFFFFFFFFFFFFFFFFFF3FFFFFFFFFFFFFFFFFFF
*** 6102,6112 ****
  FFFFFFFF1FFFFFFF000000000001FFFFFFFFE000FFFFFFFF07FFFFFFFFFF07FFFFFFFFFF3FFFFFFF00000000003EFF0F
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00003FFFFFFF0FFFFFFFFF0FFFFFFFFF00FFFFFFFFFFF7FF000FFFFFFFFF
  1BFBFFFBFFB7F7FF000FFFFFFFFFFFFF007FFFFFFFFFFFFF000000FF003FFFFF07FDFFFFFFFFFFBF0000000000000000
! 91BFFFFFFFFFFD3F007FFFFF003FFFFF000000007FFFFFFF0037FFFF0000000003FFFFFF003FFFFF0000000000000000
  C0FFFFFFFFFFFFFF0000000000000000003FFFFFFEEFF06F1FFFFFFF00000000000000001FFFFFFF0000001FFFFFFEFF
  003FFFFFFFFFFFFF0007FFFF003FFFFF000000000003FFFF0000000000000000FFFFFFFFFFFFFFFF00000000000001FF
  0007FFFFFFFFFFFF0007FFFFFFFFFFFF000000FFFFFFFFFFFFFF823FFFFFFC00000000000000003F0000000000000000
! 0000000000000000000000000000000000031BFFFFFFFFFF100000000000001CFFFF00801FFFFFFFFFFF00000000003F
  FFFF000000000003007FFFFF0000001FFFFFFFFFFFFFFFFF003E00000000003F01FFFFFFFFFFFFFF000001FFFFFF0004
  0007FFFFFFFFFFFF0047FFFFFFFF00F0FFFFFFFFFFFFFFFF000000001400C01EC09FFFFFFFFBFFFF0000000000000003
  FFFF01FFBFFFBD7F000001FFFFFFFFFFE3EDFDFFFFF99FEF0000000FE081199FFFBFFFFFFFFF4BFF00000000000A37A5
--- 6197,6207 ----
  FFFFFFFF1FFFFFFF000000000001FFFFFFFFE000FFFFFFFF07FFFFFFFFFF07FFFFFFFFFF3FFFFFFF00000000003EFF0F
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00003FFFFFFF0FFFFFFFFF0FFFFFFFFF00FFFFFFFFFFF7FF000FFFFFFFFF
  1BFBFFFBFFB7F7FF000FFFFFFFFFFFFF007FFFFFFFFFFFFF000000FF003FFFFF07FDFFFFFFFFFFBF0000000000000000
! 91BFFFFFFFFFFD3F007FFFFF003FFFFF000000007FFFFFFF0037FFFF0000000003FFFFFF003FFFFF0000000003FFFFFF
  C0FFFFFFFFFFFFFF0000000000000000003FFFFFFEEFF06F1FFFFFFF00000000000000001FFFFFFF0000001FFFFFFEFF
  003FFFFFFFFFFFFF0007FFFF003FFFFF000000000003FFFF0000000000000000FFFFFFFFFFFFFFFF00000000000001FF
  0007FFFFFFFFFFFF0007FFFFFFFFFFFF000000FFFFFFFFFFFFFF823FFFFFFC00000000000000003F0000000000000000
! 0000000000000000000000000000000000031BFFFFFFFFFF1C000000000000FCFFFF00801FFFFFFFFFFF00000000003F
  FFFF000000000003007FFFFF0000001FFFFFFFFFFFFFFFFF003E00000000003F01FFFFFFFFFFFFFF000001FFFFFF0004
  0007FFFFFFFFFFFF0047FFFFFFFF00F0FFFFFFFFFFFFFFFF000000001400C01EC09FFFFFFFFBFFFF0000000000000003
  FFFF01FFBFFFBD7F000001FFFFFFFFFFE3EDFDFFFFF99FEF0000000FE081199FFFBFFFFFFFFF4BFF00000000000A37A5
*************** FFFFFFFFFFFFFFFF00000003800007BBFFFFFFFF
*** 6114,6122 ****
  7F3FFFFFFFFFFFFF000000003F0000007FFFFFFFFFFFFFFF0000000000000011013FFFFFFFFFFFFF0000000000000000
  000007FFE7FFFFFF000000000000007F0000000000000000000000000000000001FFFFFFFFFFFFFF0000000000000000
  FFFFFFFF0000000080000000FFFFFFFF99BFFFFFFF6FF27F0000000000000007FFFFFCFF000000000000001AFCFFFFFF
! 7FE7FFFFFFFFFFFFFFFFFFFFFFFF0000FFFF000020FFFFFF01FFFFFFFFFFFFFF00000000000000000000000000000000
  000000000000000000000001FFFFFFFF7F7FFFFFFFFFFDFFFFFC000000000001007FFEFFFFFCFFFF0000000000000000
! B47FFFFFFFFFFB7FFFFFFDBF000000CB00000000017B7FFF000000000000000000000000000000000000000000000000
  0000000000000000007FFFFF00000000C7FFFFFFFFFDFFFF000000000000000100010000000000000000000000000000
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000003FFFFFF0000000000000000FFFFFFFFFFFFFFFF00007FFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000F00000000000000000000000000000000
--- 6209,6217 ----
  7F3FFFFFFFFFFFFF000000003F0000007FFFFFFFFFFFFFFF0000000000000011013FFFFFFFFFFFFF0000000000000000
  000007FFE7FFFFFF000000000000007F0000000000000000000000000000000001FFFFFFFFFFFFFF0000000000000000
  FFFFFFFF0000000080000000FFFFFFFF99BFFFFFFF6FF27F0000000000000007FFFFFCFF000000000000001AFCFFFFFF
! 7FE7FFFFFFFFFFFFFFFFFFFFFFFF0000FFFF000020FFFFFF01FFFFFFFFFFFFFF0000000000000000000000FF00000000
  000000000000000000000001FFFFFFFF7F7FFFFFFFFFFDFFFFFC000000000001007FFEFFFFFCFFFF0000000000000000
! B47FFFFFFFFFFB7FFFFFFDBF000000CBFFFF0000017B7FFF000000000FFFFFFF00000000000000000000000000000000
  0000000000000000007FFFFF00000000C7FFFFFFFFFDFFFF000000000000000100010000000000000000000000000000
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000003FFFFFF0000000000000000FFFFFFFFFFFFFFFF00007FFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000F00000000000000000000000000000000
*************** FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
*** 6125,6159 ****
  FFFFFFFFFFFFFFFF000000000000007F0000000000000000000000000000000000007FFFFFFFFFFF0000000000000000
  0000000000000000000000000000000001FFFFFFFFFFFFFFFFFF00007FFFFFFF7FFFFFFFFFFFFFFF00003FFFFFFF0000
  0000FFFFFFFFFFFFE0FFFFF80000000F000000000000FFFF0000000000000000000000000000000000001FFFFFFFFFFF
! 000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFF00000000000000000000000000000000
! FFFFFFFFFFFFFFFFFFFFFFFFFFFF87FF00000000FFFF80FF0003000B00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80000000003FFFFF
! 00000000000001FF00000000000000000000000000000000000000000000000000000000000000000000000000000000
! 00000000000000006FEF00000000000000040007FFFFFFFFFFFF00F000270000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1FFF07FFFFFFFFFF
! 0000000043FF01FF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFEBFFDE64DFFFFFFFFFFFFFFFFFFFFFEF
! 7BFFFFFFDFDFE7BFFFFFFFFFFFFDFC5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFF3FFFFFFFFFF7FFFFFFF7FFFFFDFFDFFFFFFFDFFFFFFFFF7FFFFFFF7FFFFFFFFDFFFFFFFDFF0000000000000FF7
! 000007E07FFFFFFF000000000000000000000000000000000000000000000000FFFF07DBF9FFFF7F00003FFFFFFFFFFF
! 000000000000800000000000000000003F801FFFFFFFFFFF000000000000400000000000000000000000000000000000
! 0000000000000000000000000000000000003FFFFFFF000000000FFFFFFFFFFF00000000000000000000000000000000
! 000000000000000000000FFFFFFF000000000000000000000000000000000000000000000000000000013FFFFFFF0000
  0000000000000000000000000000000000000000000000007FFF6F7F00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFF000000000000001FFFFFFFFFFFFFFFFF000000000000088F00000000000000000000000000000000
  0AF7FE96FFFFFFEF5EF7F796AA96EA840FFFFBEE0FFFFBFF0000000000000000FFFF000000000000FFFF03FFFFFF03FF
  00000000000003FF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFF
! 03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3FFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0003FFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0001FFFFFFFFFFFFFFFFFFFFFFFF000000003FFFFFFF
! 00000000000000000000000000000000000000003FFFFFFF000000000000000000000000000000000000000000000000
! FFFFFFFFFFFFFFFFFFFFFFFFFFFF07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 0000FFFFFFFFFFFF00000000000000000000000000000000000000000000000000000000000000000000000000000000",
  );
! //3456 bytes
  enum markTrieEntries = TrieEntry!(bool, 8, 5, 8)(x"
  000000000000000000000000000000200000000000000088",
  x"
! 000000000000010000000000000001A00000000000004A00",
  x"
  04020302020201000A090802070206050202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
--- 6220,6254 ----
  FFFFFFFFFFFFFFFF000000000000007F0000000000000000000000000000000000007FFFFFFFFFFF0000000000000000
  0000000000000000000000000000000001FFFFFFFFFFFFFFFFFF00007FFFFFFF7FFFFFFFFFFFFFFF00003FFFFFFF0000
  0000FFFFFFFFFFFFE0FFFFF80000000F000000000000FFFF0000000000000000000000000000000000001FFFFFFFFFFF
! 000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFF9FFFFFF0000000000000000000FFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFF87FF00000000FFFF80FF007F000B00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFF80000000003FFFFF000000007FFFFFFF0000000000000000FFFFFFFFFFFFFFFF0007FFFFFFFFFFFF
! 0000000000000000000000000000000000000000000000006FEF00000000000000040007FFFFFFFFFFFF00F000270000
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFF1FFF07FFFFFFFFFF0000000043FF01FF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFF
! EBFFDE64DFFFFFFFFFFFFFFFFFFFFFEF7BFFFFFFDFDFE7BFFFFFFFFFFFFDFC5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3FFFFFFFFFF7FFFFFFF7FFFFFDFFDFFFFFFFDFFFFFFFFF7FFFFFFF7FFF
! FFFFFDFFFFFFFDFF0000000000000FF7000007E07FFFFFFF000000000000000000000000000000000000000000000000
! FFFF07DBF9FFFF7F00003FFFFFFFFFFF000000000000800000000000000000003F801FFFFFFFFFFF0000000000004000
! 000000000000000000000000000000000000000000000000000000000000000000003FFFFFFF000000000FFFFFFFFFFF
! 00000000000000000000000000000000000000000000000000000FFFFFFF000000000000000000000000000000000000
! 000000000000000000013FFFFFFF0000000000000000000000000000000000000000000000000000C03FFFFF7FFFFFFF
  0000000000000000000000000000000000000000000000007FFF6F7F00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFF000000000000001FFFFFFFFFFFFFFFFF000000000000088F00000000000000000000000000000000
  0AF7FE96FFFFFFEF5EF7F796AA96EA840FFFFBEE0FFFFBFF0000000000000000FFFF000000000000FFFF03FFFFFF03FF
  00000000000003FF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFF
! FFFFFFFF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0001FFFFFFFF
! FFFFFFFFFFFFFFFF000000003FFFFFFF00000000000000000000000000000000000000003FFFFFFF0000000000000000
! 00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFF03FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000
! 00000000000000000000000000000000",
  );
! //3520 bytes
  enum markTrieEntries = TrieEntry!(bool, 8, 5, 8)(x"
  000000000000000000000000000000200000000000000088",
  x"
! 000000000000010000000000000001A00000000000004C00",
  x"
  04020302020201000A090802070206050202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
*************** x"
*** 6168,6181 ****
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000200000000000000000002100000000
  0024002300220000000000000000000000000025000000000028002700260000002C002B002A00290030002F002E002D
! 000000330032003100370036003500340000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000380000000000000000000000000000000000000000003900000000000000000000
! 003B003A00000000003C0000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 0000000000000000000000000000003D000000000000000000000000000000000000000000000000003E000000000000
! 00000040003F000000000000000000000000004100000000000000000000000000000043003B00420000000000450044
! 000000000047004600000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000048000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  00000000000000000000000000000000FFFFFFFFFFFFFFFF0000FFFFFFFFFFFF00000000000000000000000000000000
--- 6263,6276 ----
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000200000000000000000002100000000
  0024002300220000000000000000000000000025000000000028002700260000002C002B002A00290030002F002E002D
! 003400330032003100380037003600350000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000390000000000000000000000000000000000000000003A00000000000000000000
! 003C003B00000000003D0000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 0000000000000000000000000000003E000000000000000000000000000000000000000000000000003F000000000000
! 000000410040000000000000000000000000004200000000000000000000000000000044003C00430000004700460045
! 000000000049004800000000000000000000000000000000000000000000000000000000000000000000000000000000
! 00000000004A000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  00000000000000000000000000000000FFFFFFFFFFFFFFFF0000FFFFFFFFFFFF00000000000000000000000000000000
*************** D80000000000000F0000000C00803DDF00000000
*** 6190,6196 ****
  7FFFF80000000000001E3F9DC3C00000000000003C00BFFC0000000000000000000000000000000000000000E0000000
  00000000000000000000000000000000001C0000003C0000000C0000000C0000FFF000000000000000000000200FFFFF
  000000000000B8000000000000000000000002000000006000000000000000000FFF0FFF000000000000000000000000
! 00000000000000000000000000000000000000000F8000009FFFFFFF7FE00000FFFF0000000000000000000000007FFF
  FFF000000000001F000FF8000000001F00003FFE00000007000FFFC00000000000FFFFF0000000000000000000000000
  0000000000000000039021FFFFF70000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFF
  0000000000000000000000000000000000000000000000000001FFFFFFFF000000000000000000000000000000000000
--- 6285,6291 ----
  7FFFF80000000000001E3F9DC3C00000000000003C00BFFC0000000000000000000000000000000000000000E0000000
  00000000000000000000000000000000001C0000003C0000000C0000000C0000FFF000000000000000000000200FFFFF
  000000000000B8000000000000000000000002000000006000000000000000000FFF0FFF000000000000000000000000
! 00000000000000000000000000000000000000000F8000009FFFFFFF7FE00000FFFF00000000000000000FFF3FFFFFFF
  FFF000000000001F000FF8000000001F00003FFE00000007000FFFC00000000000FFFFF0000000000000000000000000
  0000000000000000039021FFFFF70000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFF
  0000000000000000000000000000000000000000000000000001FFFFFFFF000000000000000000000000000000000000
*************** C19D0000000000000060F8000000000200000000
*** 6204,6210 ****
  0000000000000000000000000000000000000000000000000000000100000000000000000000000007C0000000000000
  00000000000000000000000000000000870000000000F06E000000000000000000000000000000000000006000000000
  000000F00000000000003E00000000000000000000000000000000000000000000000000000000000000000000000000
! 0000180000000000F0000000000000000000000000000000000000000001FFC0000000000000003C0000000000000000
  FF00000000000007801900000000007F07FF0000000000070000000000000004001FFF80000000070008000000000060
  FFF8000000000007000000000000DE0140FFF0000000000000000000000000020000000000000000000007FF80000000
  D80000000000000F001F1FCC0080399FFF00000000000000000000060005F7A5FFE0000000000000000000004000007F
--- 6299,6305 ----
  0000000000000000000000000000000000000000000000000000000100000000000000000000000007C0000000000000
  00000000000000000000000000000000870000000000F06E000000000000000000000000000000000000006000000000
  000000F00000000000003E00000000000000000000000000000000000000000000000000000000000000000000000000
! 0000180000000000FC000000000000000000000000000000000000000001FFC0000000000000003C0000000000000000
  FF00000000000007801900000000007F07FF0000000000070000000000000004001FFF80000000070008000000000060
  FFF8000000000007000000000000DE0140FFF0000000000000000000000000020000000000000000000007FF80000000
  D80000000000000F001F1FCC0080399FFF00000000000000000000060005F7A5FFE0000000000000000000004000007F
*************** FFFF000000000000000000000000000F00000000
*** 6212,6238 ****
  FFFF000000000000000000000000000100FFF80000000000000000000000000000000FFFE00000000000000000000000
  0000000000000000000000000000000007FFF00000000000000000000000000000000000000000000000000000000000
  79BF000000000000000000000000000D000000000000000000000011FCFE00007BF80000000007FE000000000FFE0080
! 0000000003FFFC000000000000000000FF7F8000000000000000000000000000007FFEFFFFFC00000000000000000000
! B47E00000000000000000000000000BF0000000000FB7C00000000000000000000000000000000000000000000000000
! 00000000000000000078000000000000C7F000000000000B000000000400000700000000000000000000000000000000
! 000000000000000000000000003FFF81000000000000000000000000000000000000FFFFC00000000000000000000000
! 00000000000000000000000000000000000000000000000000000000000000000000000000000000001F000000000000
! 007F0000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFE8000
! 00000000000780FF00030010000000000000000000000000000000000000000000000000600000000000000000000000
! FFFF3FFFFFFFFFFF000000000000007F000000000000000000000000000000000000000000000000F807E3E000000000
! 00003C0000000FE700000000000000000000000000000000000000000000001C00000000000000000000000000000000
! F87FFFFFFFFFFFFF00201FFFFFFFFFFF0000FFFEF80000100000000000000000000007DBF9FFFF7F0000000000000000
! 000000000000800000000000000000000000000000000000000000000000000000004000000000000000F00000000000
! 0000000000000000000000000000000000000000000000000000F0000000000000000000000000000000000000000000
! 00000000000000000000C0000000000000000000000000000000000000000000000000000000000000000000007F0000
! 000000000000000000000000000007F000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000",
  );
! //2896 bytes
  enum numberTrieEntries = TrieEntry!(bool, 8, 6, 7)(x"
  0000000000000000000000000000002000000000000000D0",
  x"
! 000000000000010000000000000002C00000000000002680",
  x"
  040203020202010009080202070206050202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
--- 6307,6335 ----
  FFFF000000000000000000000000000100FFF80000000000000000000000000000000FFFE00000000000000000000000
  0000000000000000000000000000000007FFF00000000000000000000000000000000000000000000000000000000000
  79BF000000000000000000000000000D000000000000000000000011FCFE00007BF80000000007FE000000000FFE0080
! 0000000003FFFC0000000000000000000000000000000000000000FF0000000000000000000000000000000000000000
! FF7F8000000000000000000000000000007FFEFFFFFC00000000000000000000B47E00000000000000000000000000BF
! 0000000000FB7C0000000000000000000000000000000000000000000000000000000000000000000078000000000000
! C7F000000000000B000000000400000700000000000000000000000000000000000000000000000000000000003FFF81
! 000000000000000000000000000000000000FFFFC0000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000000000000000000000001F000000000000007F0000000000000000000000000000
! 000000000000000000000000000000000000000000000000FFFFFFFFFFFE800000000000000780FF0003001000000000
! 0000000000000000000000000000000000000000600000000000000000000000FFFF3FFFFFFFFFFF000000000000007F
! 000000000000000000000000000000000000000000000000F807E3E00000000000003C0000000FE70000000000000000
! 0000000000000000000000000000001C00000000000000000000000000000000F87FFFFFFFFFFFFF00201FFFFFFFFFFF
! 0000FFFEF80000100000000000000000000007DBF9FFFF7F000000000000000000000000000080000000000000000000
! 0000000000000000000000000000000000004000000000000000F0000000000000000000000000000000000000000000
! 00000000000000000000F000000000000000000000000000000000000000000000000000000000000000C00000000000
! 0000000000000000000000000000000000000000000000000020C0480000000000000000000000000000000000000000
! 000000000000000000000000007F0000000000000000000000000000000007F000000000000000000000000000000000
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF00000000000000000000000000000000
! 00000000000000000000000000000000",
  );
! //2928 bytes
  enum numberTrieEntries = TrieEntry!(bool, 8, 6, 7)(x"
  0000000000000000000000000000002000000000000000D0",
  x"
! 000000000000010000000000000002C00000000000002780",
  x"
  040203020202010009080202070206050202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
*************** x"
*** 6255,6270 ****
  0002000200020002000200020002000200020002000200020002000E000200020027002600020002002A002900280002
  00020002002300020002000200020002002E002D002C002B003200310030002F00020034003300020037003600020035
  003A003900040038000200020004000200020002000C000C0002003C003B000C0002000C003D00020004000200020002
! 0023000C0002003E003F000C000200020002000200020002000200020002000200020002000200400002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
! 000200000002000200020002000200020002000200020002000200020002000200020002000200020002004100050003
! 000200040002000200020002004200020002000200020002000200020002000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000400020002000200020002
! 000200020002000200020044004300020002000200020002004500020002000200020002000200020002000200020002
! 000200020002000200020002000200020002000500020002000200020004000200460002000400020002000200020002
! 0002000C0047000200020002000200020002004A0049004800020002000200020002004B000200020002000200020002
  000200020002000200020002000200020002000200020002000400020002000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
--- 6352,6367 ----
  0002000200020002000200020002000200020002000200020002000E000200020027002600020002002A002900280002
  00020002002300020002000200020002002E002D002C002B003200310030002F00020034003300020037003600020035
  003A003900040038000200020004000200020002000C000C0002003C003B000C0002000C003D00020004000200020002
! 003F000C0002003E0040000C000200020002000200020002000200020002000200020002000200410002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
! 000200000002000200020002000200020002000200020002000200020002000200020002000200020002004200050003
! 000200040002000200440002004300020002000200020002000200020002000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000400020002000200020002
! 000200020002000200020046004500020002000200020002004700020002000200020002000200020002000200020002
! 000200020002000200020002000200020002000500020002000200020004000200480002000400020002000200020002
! 0002000C0049000200020002000200020002004C004B004A00020002000200020002004D000200020002000200020002
  000200020002000200020002000200020002000200020002000400020002000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
*************** FFFE0000000003FF0000000000000000000003FF
*** 6289,6300 ****
  03FF00000000000000000000000003FF00000000000000007FFFFFFF000000000000007FE000000000000000001E0000
  00000000000000000000000000000FE000000000000000000000FFFFFFFC0000FFC00000000000000000000000000000
  0000000000000000001FFFFE03FF000000000000000000000000000FFFFF03FF0FFF0000000000000000000000000000
! 00000000000000000007FFFF00000000000000000000000000001FFFFFFF0000000000000000000000000000001FFFFF
! FFFFFFFFFFFFFFFF00007FFFFFFFFFFF000000000000000000000003FBFF000000000000007FFFFF0000000000000000
! 0000000000000000000FFFFF000FFFFF000000000000000001FFFFFF000000000000000000000000FFFFFFFFFFFFC000
! 000000000000000007FE0000000000000000000000000000000000000000FF800000000000000000FFFE000000000000
! 001EEFFFFFFFFFFF00000000000000003FFFBFFFFFFFFFFE00000000000000000000000000001FFF0000000000000000
! 000000000000000003FF000000000000",
  );
  //3488 bytes
  enum punctuationTrieEntries = TrieEntry!(bool, 8, 5, 8)(x"
--- 6386,6397 ----
  03FF00000000000000000000000003FF00000000000000007FFFFFFF000000000000007FE000000000000000001E0000
  00000000000000000000000000000FE000000000000000000000FFFFFFFC0000FFC00000000000000000000000000000
  0000000000000000001FFFFE03FF000000000000000000000000000FFFFF03FF0FFF0000000000000000000000000000
! 00000000000000000007FFFF00000000000000000000000000001FFFFFFF0000000003FF00000000000003FF00000000
! 000000000000000000000000001FFFFFFFFFFFFFFFFFFFFF00007FFFFFFFFFFF000000000000000000000003FBFF0000
! 00000000007FFFFF0000000000000000000000000000000000700000000000000000000000000000000FFFFF000FFFFF
! 000000000000000001FFFFFF000000000000000000000000FFFFFFFFFFFFC000000000000000000007FE000000000000
! 0000000000000000000000000000FF800000000000000000FFFE000000000000001EEFFFFFFFFFFF0000000000000000
! 3FFFBFFFFFFFFFFE00000000000000000000000000001FFF0000000000000000000000000000000003FF000000000000",
  );
  //3488 bytes
  enum punctuationTrieEntries = TrieEntry!(bool, 8, 5, 8)(x"
*************** C000000000000000000000000000000000000000
*** 6355,6361 ****
  000000000000000000000000008000000000000000000000000000000000000080000000800000000000000000000000
  0000000000000000000000000000000000000000000000008000000001FF00000000000000000000007F000000000000
  FE000000000000000000000000000000000000001E000000000000000000000000000000000000000000400000000000
! 000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000
  00000000000000000000000003E0000000000000000003C0000000000000000000000000000000000000000000003F80
  D80000000000000000000000000000030000000000000000003000000000000F000000000000000000000000E80021E0
  3F0000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000
--- 6452,6458 ----
  000000000000000000000000008000000000000000000000000000000000000080000000800000000000000000000000
  0000000000000000000000000000000000000000000000008000000001FF00000000000000000000007F000000000000
  FE000000000000000000000000000000000000001E000000000000000000000000000000000000000000400000000000
! 000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000010000
  00000000000000000000000003E0000000000000000003C0000000000000000000000000000000000000000000003F80
  D80000000000000000000000000000030000000000000000003000000000000F000000000000000000000000E80021E0
  3F0000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000
*************** D800000000000000000000000000000300000000
*** 6376,6386 ****
  00000000000000008000000000000000000000000000000000000000C000000000000000000000000000000000000000
  0000000000000000000000000000000000000000000000000000000000000000",
  );
! //3472 bytes
  enum symbolTrieEntries = TrieEntry!(bool, 8, 6, 7)(x"
  0000000000000000000000000000002000000000000000E0",
  x"
! 000000000000010000000000000003000000000000003480",
  x"
  05030403030201000A090803070303060303030303030303030303030303030303030303030303030303030303030303
  030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303
--- 6473,6483 ----
  00000000000000008000000000000000000000000000000000000000C000000000000000000000000000000000000000
  0000000000000000000000000000000000000000000000000000000000000000",
  );
! //3456 bytes
  enum symbolTrieEntries = TrieEntry!(bool, 8, 6, 7)(x"
  0000000000000000000000000000002000000000000000E0",
  x"
! 000000000000010000000000000003000000000000003400",
  x"
  05030403030201000A090803070303060303030303030303030303030303030303030303030303030303030303030303
  030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303
*************** x"
*** 6390,6410 ****
  00000000000000000000000000000000000200020001000000050004000300020007000200060002000A000200090008
  000C0002000B0002000F000E000D00020002001100020010001400130002001200020002001500020016000200020002
  00020002000200020018000200020017001A0019000200020002001B000200020002000200020002001C000200020002
! 0020001F001E001D00210022002100210021002100240023002600250021002100270021002100210029002800210021
! 00020002002A0002002D0021002C002B00300002002F002E002100210032003100020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
! 000200020002000200020002000200020002000200020002000200020002000200330002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
! 000200020002000200020002000200020002000200340002003600350002000200020002000200370002003900020038
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
! 00020002000200020002000200020002000200020002000200020002000200020002000200020002003B003A00020002
! 003D003C000200020040003F0002003E0042004100020002000200020002000200020002000200020002000200020002
! 000200020002004300020002004400020045000200020002000200020002000200020002000200020002000200020002
  000200020002000200020012000200020002000200020002000200020002000200020002000200020046000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002004700020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
--- 6487,6507 ----
  00000000000000000000000000000000000200020001000000050004000300020007000200060002000A000200090008
  000C0002000B0002000F000E000D00020002001100020010001400130002001200020002001500020016000200020002
  00020002000200020018000200020017001A0019000200020002001B000200020002000200020002001C000200020002
! 0020001F001E001D00210022002100210021002100240023002600250021002100270021002100210021002800210021
! 0002000200290002002C0021002B002A002F0002002E002D002100210031003000020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
! 000200020002000200020002000200020002000200020002000200020002000200320002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
! 000200020002000200020002000200020002000200330002003500340002000200020002000200360002003800020037
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
! 00020002000200020002000200020002000200020002000200020002000200020002000200020002003A003900020002
! 003C003B00020002003F003E0002003D0041004000020002000200020002000200020002000200020002000200020002
! 000200020002004200020002004300020044000200020002000200020045000200020002000200020002000200020002
  000200020002000200020012000200020002000200020002000200020002000200020002000200020046000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002004700020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
*************** x"
*** 6415,6422 ****
  000200020002000200020002000200020021002100490021004C004B004A0021004F004E004D00210002005100020050
  000200020002000200540053005200020021002100210021000200020056005500020002000200020002000200020002
  000200570002000200020002001000020002000200020002000200020002000200020002000200020002000200020002
! 000200590058000200020002005A0002005E005D005C005B002100210002005F00210021002100210062006100600021
! 002100210064006300670021006600650002000200020002000200020002000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
  00020002000200020002000200020002700008100000000050000001400000000113D37C000000000080000000800000
--- 6512,6519 ----
  000200020002000200020002000200020021002100490021004C004B004A0021004F004E004D00210002005100020050
  000200020002000200540053005200020021002100210021000200020056005500020002000200020002000200020002
  000200570002000200020002001000020002000200020002000200020002000200020002000200020002000200020002
! 000200590058000200020002005A0002005E005D005C005B002100210002005F00210021002100210061002100600021
! 002100210063006200660021006500640002000200020002000200020002000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
  000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002
  00020002000200020002000200020002700008100000000050000001400000000113D37C000000000080000000800000
*************** x"
*** 6429,6466 ****
  C0000000000000000000000001E0DFBF00000000C000000000000000000000000000000003FF00000000000000000000
  000000000000000000002000000000000000000000000000000000000800000000000000000000000000000000000001
  0000000000000000FFFFFFFFC000000000000000000000001FF007FE00000000A0000000000000006000E000E000E003
! 00000000000000001C00000000040010FFFFFFFF00001C0000000000000000010C0042AFC1D0037B000000000000BC1F
  FFFFFFFFFFFF0C00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FFFFFFF0FFFFFFFFFFFFFFFFFF
  000003FFFFFFFFFF00000000000007FFFFFFFFFFF0000000000003FFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFF
  FFFFFFFFFFF00000FFFF003FFFFFFF9FFFFFFFFFFE000007CFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFCFFFFFFFFFFFFF
! FFFFFFFFFFBFFFFFFFFFFFFFFFFFFFFF0000000000000000000007E00000000000000000000000000000000000030000
! FFFFFFFFFBFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000003FFFFFC0C00001000C00100000000000000000
! 0000000018000000000000000000000000000000FFC300000000803FFFFFFFFFFFFFFC007FFFFFFFFFFFFFFF000100FF
! 0001FFFFFFFFFC00FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000007F
! 00000003007FFFFF00000000000000000000000000000600000000000000000003C00F00000000000000000000000000
! 00000000000000000380000000000000000000000000000000000C000800000000000200000000000000000000000000
! FFFC00000000000000000000000000070000000000000000000000000000FFFF0000000000000000F000000000008000
! 0000000000000000000002740000000040000000700008100000000050000001000000000000000030007F7F00000000
! FF80000000000000FE00000000000000000000011FFF73FF1FFFFFFFFFFF000000000000000000000180000000000000
! 00000000000000000000000000000100000000000000C000000000000000000000000000000000000003FFFFFFE00000
! F000000000000000000000000000002000000000100000000000000000000000FFFFFFFFFFFFFFFF0000FFFFFFFFFFFF
! 000FFFFFFFFFFFFF00000000000000000000000000000000FFFFFFFFFFFF0000FFFFFFFFFFFFFFFF000000000000000F
  FFFFFFFFFFFFFFFF003FFFFFFFFFFFFFFFFFFE7FFFFFFFFF00001C1FFFFFFFFFFFFFC3FFFFFFF018000007FFFFFFFFFF
  FFFFFFFFFFFFFFFF0000000000000023FFFFFFFFFFFFFFFF00000000007FFFFF00000000000000000800000008000002
  00200000002000000000800000008000000002000000020000000000000000080780000000000000FFDFE00000000000
  000000000000006F00000000000000000000000000000000000000000000800000011000000000000000000000000000
  0000400000000000000000000000000000000000000000000003000000000000FFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFE7FFF000FFFFF003FFFFFFFFEFFFEFFFFFFFFFFFFE000FFFFFFFFFFFFFFFF00003FFFFFFFFFFFFFFFFFC000000000
! 0FFFFFFFFFFF00070000003F000301FFFFFFFFFFFFFFFFFF1FFF1FFFF0FFFFFFFFFFFFFFFFFFFFFFF87FFFFFFFFFFFFF
! FFFFFFFFFFFFFFFF00010FFF03FFFFFFFFFFFFFFFFFF0FFFFFFFFFFF03FF00FF0FFF3FFFFFFF00FF0000000000000003
! FFFFFFFFFFFFFFFF1FFF3FFF000FFFFFFFFFFFFFFFFF83FF01FF03FF9FFFC07FFFFFFFFFFFF7FFFF0000FFFFFFFFFFFF
! 00000000000000000000000000000000",
  );
! //6272 bytes
  enum graphicalTrieEntries = TrieEntry!(bool, 8, 5, 8)(x"
  0000000000000000000000000000002000000000000000D0",
  x"
! 000000000000010000000000000002C00000000000009000",
  x"
  05040302020201000D0C0B0A09080706100F0E0202020202131313131313121113131313131313131313131313131313
  131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313
--- 6526,6562 ----
  C0000000000000000000000001E0DFBF00000000C000000000000000000000000000000003FF00000000000000000000
  000000000000000000002000000000000000000000000000000000000800000000000000000000000000000000000001
  0000000000000000FFFFFFFFC000000000000000000000001FF007FE00000000A0000000000000006000E000E000E003
! 00000000000000001C00000000040010FFFFFFFF00001C0000000000000000030C0042AFC1D0037B000000000000BC1F
  FFFFFFFFFFFF0C00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FFFFFFF0FFFFFFFFFFFFFFFFFF
  000003FFFFFFFFFF00000000000007FFFFFFFFFFF0000000000003FFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFF
  FFFFFFFFFFF00000FFFF003FFFFFFF9FFFFFFFFFFE000007CFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFCFFFFFFFFFFFFF
! 0000000000000000000007E00000000000000000000000000000000000030000FFFFFFFFFBFFFFFF000FFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFF0000003FFFFFC0C00001000C0010000000000000000000000000180000000000000000000000
! 00000000FFC300000000803FFFFFFFFFFFFFFC007FFFFFFFFFFFFFFF000100FF0001FFFFFFFFFC00FFFFFFFFFFFFFFFF
! 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000007F00000003007FFFFF0000000000000000
! 0000000000000600000000000000000003C00F0000000000000000000000000000000000000000000380000000000000
! 000000000000000000000C000800000000000200000000000000000000000000FFFC000000000000000000000007FFFF
! 0000000000000000000000000000FFFF0000000000030000F00000000000FF0000000000000000000000027400000000
! 40000000700008100000000050000001000000000000000030007F7F00000000FF80000000000000FE00000000000000
! 000000011FFF73FF1FFFFFFFFFFF00000000000000000000018000000000000000000000000000000000000000000100
! 000000000000C000000000000000000000000000000000000000000001FE000000000000000000000003FFFFFFE00000
! F000000000000000000000000000002000000000100000000000000000000000FFFFFFFFFFFFFFFF1C00FFFFFFFFFFFF
! FC0FFFFFFFFFFFFF0001FFFF0001FFFF0000000000000000FFFFFFFFFFFF0000FFFFFFFFFFFFFFFF000000000000000F
  FFFFFFFFFFFFFFFF003FFFFFFFFFFFFFFFFFFE7FFFFFFFFF00001C1FFFFFFFFFFFFFC3FFFFFFF018000007FFFFFFFFFF
  FFFFFFFFFFFFFFFF0000000000000023FFFFFFFFFFFFFFFF00000000007FFFFF00000000000000000800000008000002
  00200000002000000000800000008000000002000000020000000000000000080780000000000000FFDFE00000000000
  000000000000006F00000000000000000000000000000000000000000000800000011000000000000000000000000000
  0000400000000000000000000000000000000000000000000003000000000000FFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFE7FFF000FFFFF003FFFFFFFFEFFFEFFFFFFFFFFFFE000FFFFFFFFFFFFFFFF00003FFFFFFFFFFFFFFFFFC000000000
! 0FFFFFFFFFFF00070000003F000301FFFFFFFFFFFFFFFFFF1FFF1FFFF1FFFFFFFFFFFFFFFFFFFFFF00010FFF03FFFFFF
! FFFFFFFFFFFF0FFFFFFFFFFF03FF00FF0FFF3FFFFFFF00FF0000000001FF0003FFFFFFFFFFFFFFFF1FFF3FFF00FFFFFF
! FFFFFFFFFFFFC7FF01FF87FF9FFFE17FFFFFFFFFFFF7FFFF0400FFFFFFFFFFFF00000000000000000000000000000000",
  );
! //6240 bytes
  enum graphicalTrieEntries = TrieEntry!(bool, 8, 5, 8)(x"
  0000000000000000000000000000002000000000000000D0",
  x"
! 000000000000010000000000000002C00000000000008F00",
  x"
  05040302020201000D0C0B0A09080706100F0E0202020202131313131313121113131313131313131313131313131313
  131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313
*************** x"
*** 6480,6509 ****
  002C002C002C002C0054002C002C002C0001000100010001000100010001005500010001000100010001000100010001
  0056000100010001002C005700010001002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C
  002C002C002C002C002C002C002C002C002C002C0058002C002C002C002C002C005A005900010001005D005C005B002C
! 00010001000100010001000100010001000100010001000100010001000100010001000100010001005E000100010001
! 0001000100010001002C002C0060005F002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C
! 002C002C002C002C002C002C002C002C002C002C002C002C0061002C002C002C002C006300620001002C002C002C002C
! 002C002C002C002C002C002C002C0064002C002C002C002C002C002C002C002C002C002C002C002C0067006600010065
! 006B006A00690068006F006E006D006C002C0070000100010071002C002C002C002C0074007300720077002C00760075
  002C002C00790078002C007C007B007A0001007F007E007D00810080000100010084008300010082002C002C002C002C
! 000100010001000100010085000100010001000100010001000100010001000100010001000100010086000100010001
! 000100010001008700010001000100010001000100010001000100010001000100010001000100010001008800010001
  000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001
! 0089000100010001002C008A00010001002C002C002C002C002C002C002C002C002C008B00010001002C002C002C002C
! 0001000100010001000100010001000100010001000100010001000100010001008C0001000100010001000100010001
! 00010001000100010001000100010001008D000100010001002C002C002C002C002C002C002C002C002C002C002C002C
! 002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C
  002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C
! 002C002C008E002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C
  002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C
  002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002CFFFFFFFF000000007FFFFFFFFFFFFFFF
  FFFFDFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFCFFFFFFFFFFFFFFFFFFFFFBFFFFD7F0FFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFE7FFFFF
  FFFFFFFFFFFEE7FF001F87FFFFFF00FFFFFFFFFFEFFFFFC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFF
  FFFFFFFFFFFF3FFFFFFFFFFFFFFFE7FF0003FFFFFFFFFFFFE7FFFFFFFFFFFFFF7FFF3FFFFFFFFFFFFFFF07FF4FFFFFFF
! FFFFFFFFFF807FFFFFFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C5FDFFFFF99FEF7FFFFFCFB080799F
  D36DFDFFFFF987EE007FFFC05E023987F3EDFDFFFFFBBFEEFE03FFCF00013BBFF3EDFDFFFFF99FEE00FFFFCFB0E0399F
! C3FFC718D63DC7EC07FFFFC000813DC7F3FFFDFFFFFDDFFFFF80FFCF27603DDFF3EFFDFFFFFDDFFF000EFFCF60603DDF
  FFFFFFFFFFFDDFFFFFFFFFCFFFF0FDDF2FFBFFFFFC7FFFEE001CFFC0FF5F847F87FFFFFFFFFFFFFE000000000FFFFFFF
  3FFFFFAFFFFFF7D600000000F3FF7F5FFFFFFFFFFFFFFFFFFFFE1FFFFFFFFEFFDFFFFFFFFEFFFFFF0000000007FFDFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20BFFFFFFFFFFFFFFFFFFFFFFFFF3D7F3DFF
--- 6576,6605 ----
  002C002C002C002C0054002C002C002C0001000100010001000100010001005500010001000100010001000100010001
  0056000100010001002C005700010001002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C
  002C002C002C002C002C002C002C002C002C002C0058002C002C002C002C002C005A005900010001005D005C005B002C
! 000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001
! 0001000100010001002C002C005F005E002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C
! 002C002C002C002C002C002C002C002C002C002C002C002C0060002C002C002C002C006200610001002C002C002C002C
! 002C002C002C002C002C002C002C0063002C002C002C002C002C002C002C002C002C002C002C002C0066006500010064
! 006A006900680067006E006D006C006B002C006F000100010070002C002C002C002C0073007200710077007600750074
  002C002C00790078002C007C007B007A0001007F007E007D00810080000100010084008300010082002C002C002C002C
! 000100010001000100010085000100010001000100010001000100010001000100010001000100010001000100010001
! 000100010001008600010001000100010001000100010001000100010001000100010001000100010001008700010001
  000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001
! 0088000100010001002C008900010001002C002C002C002C002C002C002C002C002C008A00010001002C002C002C002C
! 0001000100010001000100010001000100010001000100010001000100010001008B0001000100010001000100010001
! 000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001
! 0001000100010001002C002C002C008C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C
  002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C
! 002C002C008D002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C
  002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C
  002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002CFFFFFFFF000000007FFFFFFFFFFFFFFF
  FFFFDFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFCFFFFFFFFFFFFFFFFFFFFFBFFFFD7F0FFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFE7FFFFF
  FFFFFFFFFFFEE7FF001F87FFFFFF00FFFFFFFFFFEFFFFFC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFF
  FFFFFFFFFFFF3FFFFFFFFFFFFFFFE7FF0003FFFFFFFFFFFFE7FFFFFFFFFFFFFF7FFF3FFFFFFFFFFFFFFF07FF4FFFFFFF
! FFFFFFFFFF80FFFFFFFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C5FDFFFFF99FEF7FFFFFCFB080799F
  D36DFDFFFFF987EE007FFFC05E023987F3EDFDFFFFFBBFEEFE03FFCF00013BBFF3EDFDFFFFF99FEE00FFFFCFB0E0399F
! C3FFC718D63DC7EC07FFFFC000813DC7F3FFFDFFFFFDDFFFFF80FFCF37603DDFF3EFFDFFFFFDDFFF000EFFCF70603DDF
  FFFFFFFFFFFDDFFFFFFFFFCFFFF0FDDF2FFBFFFFFC7FFFEE001CFFC0FF5F847F87FFFFFFFFFFFFFE000000000FFFFFFF
  3FFFFFAFFFFFF7D600000000F3FF7F5FFFFFFFFFFFFFFFFFFFFE1FFFFFFFFEFFDFFFFFFFFEFFFFFF0000000007FFDFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20BFFFFFFFFFFFFFFFFFFFFFFFFF3D7F3DFF
*************** FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
*** 6511,6545 ****
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1FFFFFFF01FFFFFFFFFFFFFF007FFFFF803FFFFF000DDFFF000FFFFF
  FFFFFFFFFFFFFFFF03FF03FF3FFFFFFFFFFFFFFF03FFBFFF01FFFFFFFFFFFFFFFFFF07FFFFFFFFFF003FFFFFFFFFFFFF
  0FFF0FFF7FFFFFFF001F3FFFFFFFFFF1FFFF0FFFFFFFFFFFFFFFFFFFC7FF03FFFFFFFFFFCFFFFFFF9FFFFFFF7FFFFFFF
! FFFF3FFF03FF03FF0000000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFF
  F8FFFFFFFFFFFFFFFFFFFFFFFFFFE3FFE7FFFFFFFFFF07FF07FFFFFFFFFF00FFFFFFFFFF3F3FFFFF3FFFFFFFAAFF3F3F
! FFDFFFFFFFFFFFFF7FDCFFFFEFCFFFDFFFFF80FFFFFF07FFFFF30000FFFFFFFFFFFFFFFF1FFF7FFF0001FFFFFFFF0001
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFF000003FFFFFFFFFFFFFFFFFF000007FF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0FFFFFFFFFFFFFFFFF20BFFFFFFFFF800180FFFFFFFFFF
  7F7F7F7F007FFFFFFFFFFFFF7F7F7F7FFFFFFFFFFFFFFFFF000000003FFFFFFFFFFFFFFFFBFFFFFF000FFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE
  FFFFFFFFFE7FFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFE0FFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF803FFFFFFFFF
  FFFFFFFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFF1FFFFFFFFFFFFFFF007F00000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC00001FEB3FFF03FF1FFFFFFFFFFF00FFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFF03FFC03FFFFFFFFFFFFFFFFF1FFFFFFF800FFFFFFFFFFFFFFFFFFFFF7FFFFFFFC3FFBFFF
  007FFFFFFFFFFFFFFFFFFFFFF3FF3FFFFFFFFFFFFFFFFFFF007FFFFFF8000007FFFF7F7F007E7E7EFFFF0FFFFFFFFFFF
  FFFFFFFFFFFFFFFF03FF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFF0FFFFFFFFFFFF87F
  0000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFF3FFFFFFFFFFF
! FFFFFFFFFFFFFFFF0000000003FFFFFF5F7FFFFFE0F8007FFFFFFFFFFFFFFFDBFFFFFFFFFFFFFFFFFFFFFFFFFFF80007
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFFFFFF0000000080FFFFFFFFFF03FFFFFFFFDF0F7FFFF7FFFF
  FFFFFFFFFFFFFFFF1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF30007F7F1CFCFCFC
  B7FFFF7FFFFFEFFF000000003FFF3FFFFFFFFFFFFFFFFFFF07FFFFFFFFFFFFFFFF8FFFFFFFFFFF87FFFFFFFFFFFFFFFF
  000000011FFF7FFF3FFFFFFFFFFF000000000000000000000000000000000000FFFFFFFF1FFFFFFF0FFFFFFF0001FFFF
  FFFFE00FFFFFFFFF07FFFFFFFFFF07FFFFFFFFFFBFFFFFFF00000000003FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFF03FF3FFFFFFF0FFFFFFFFF0FFFFFFFFF00FFFFFFFFFFF7FF800FFFFFFFFF1BFBFFFBFFB7F7FF000FFFFFFFFFFFFF
  007FFFFFFFFFFFFF000000FF003FFFFF07FDFFFFFFFFFFBF000000000000000091BFFFFFFFFFFD3FFFFFFFFFFFBFFFFF
! 0000FF807FFFFFFFF837FFFF0000000083FFFFFF8FFFFFFF0000000000000000F0FFFFFFFFFFFFFFFFFFFFFFFFFCFFFF
  873FFFFFFEEFF06FFFFFFFFF01FF01FF00000000FFFFFFFF007FF87FFFFFFFFFFE3FFFFFFFFFFFFFFF07FFFFFF3FFFFF
  0000FE001E03FFFF0000000000000000FFFFFFFFFFFFFFFF00000000000001FF0007FFFFFFFFFFFFFC07FFFFFFFFFFFF
  03FF00FFFFFFFFFFFFFFFE3FFFFFFFFF000000000000C03F000000000000000000000000000000007FFFFFFF00000000
! 00033BFFFFFFFFFFF00000000000001CFFFF00FFFFFFFFFFFFFF000003FFFFFFFFFF0000000003FF007FFFFF00000FFF
  FFFFFFFFFFFFFFFF803FFFFFFFFC3FFFDFFFFFFFFFFFFFFF03FF01FFFFFF0007FFDFFFFFFFFFFFFF007FFFFFFFFF00FF
  FFFFFFFFFFFFFFFF001FFFFEFFFFFFFFFFFFFFFFFFFBFFFF0000000000000003FFFF03FFBFFFBD7F03FF07FFFFFFFFFF
  FBEDFDFFFFF99FEF001F1FCFE081399FFFBFFFFFFFFF4BFF0000000601BFF7A5FFFFFFFFFFFFFFFF00000003EFFFFFFF
--- 6607,6641 ----
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1FFFFFFF01FFFFFFFFFFFFFF007FFFFF803FFFFF000DDFFF000FFFFF
  FFFFFFFFFFFFFFFF03FF03FF3FFFFFFFFFFFFFFF03FFBFFF01FFFFFFFFFFFFFFFFFF07FFFFFFFFFF003FFFFFFFFFFFFF
  0FFF0FFF7FFFFFFF001F3FFFFFFFFFF1FFFF0FFFFFFFFFFFFFFFFFFFC7FF03FFFFFFFFFFCFFFFFFF9FFFFFFF7FFFFFFF
! FFFF3FFF03FF03FF00000FFF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFF
  F8FFFFFFFFFFFFFFFFFFFFFFFFFFE3FFE7FFFFFFFFFF07FF07FFFFFFFFFF00FFFFFFFFFF3F3FFFFF3FFFFFFFAAFF3F3F
! FFDFFFFFFFFFFFFF7FDCFFFFEFCFFFDFFFFF80FFFFFF07FFFFF30000FFFFFFFFFFFFFFFF1FFF7FFF0001FFFFFFFF0003
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFF000003FFFFFFFFFFFFFFFFFF000007FF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0FFFFFFFFFFFFFFFFF20BFFFFFFFFF800180FFFFFFFFFF
  7F7F7F7F007FFFFFFFFFFFFF7F7F7F7FFFFFFFFFFFFFFFFF000000003FFFFFFFFFFFFFFFFBFFFFFF000FFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE
  FFFFFFFFFE7FFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFE0FFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF803FFFFFFFFF
  FFFFFFFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFF1FFFFFFFFFFFFFFF007F00000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE00001FFFFFFF03FF1FFFFFFFFFFF00FFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFF03FFC03FFFFFFFFFFFFFFFFF1FFFFFFF800FFFFFFFFFFFFFFFFFFFFF7FFFFFFFC3FFBFFF
  007FFFFFFFFFFFFFFFFFFFFFF3FF3FFFFFFFFFFFFFFFFFFF007FFFFFF8000007FFFF7F7F007E7E7EFFFF0FFFFFFFFFFF
  FFFFFFFFFFFFFFFF03FF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFF0FFFFFFFFFFFF87F
  0000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFF3FFFFFFFFFFF
! FFFFFFFFFFFFFFFF0000000003FFFFFF5F7FFFFFE0F8007FFFFFFFFFFFFFFFDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFF03FFFFFFFFDF0F7FFFF7FFFF
  FFFFFFFFFFFFFFFF1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF30007F7F1CFCFCFC
  B7FFFF7FFFFFEFFF000000003FFF3FFFFFFFFFFFFFFFFFFF07FFFFFFFFFFFFFFFF8FFFFFFFFFFF87FFFFFFFFFFFFFFFF
  000000011FFF7FFF3FFFFFFFFFFF000000000000000000000000000000000000FFFFFFFF1FFFFFFF0FFFFFFF0001FFFF
  FFFFE00FFFFFFFFF07FFFFFFFFFF07FFFFFFFFFFBFFFFFFF00000000003FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFF03FF3FFFFFFF0FFFFFFFFF0FFFFFFFFF00FFFFFFFFFFF7FF800FFFFFFFFF1BFBFFFBFFB7F7FF000FFFFFFFFFFFFF
  007FFFFFFFFFFFFF000000FF003FFFFF07FDFFFFFFFFFFBF000000000000000091BFFFFFFFFFFD3FFFFFFFFFFFBFFFFF
! 0000FF807FFFFFFFF837FFFF0000000083FFFFFF8FFFFFFF0000000003FFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFCFFFF
  873FFFFFFEEFF06FFFFFFFFF01FF01FF00000000FFFFFFFF007FF87FFFFFFFFFFE3FFFFFFFFFFFFFFF07FFFFFF3FFFFF
  0000FE001E03FFFF0000000000000000FFFFFFFFFFFFFFFF00000000000001FF0007FFFFFFFFFFFFFC07FFFFFFFFFFFF
  03FF00FFFFFFFFFFFFFFFE3FFFFFFFFF000000000000C03F000000000000000000000000000000007FFFFFFF00000000
! 00033BFFFFFFFFFFFC00000001FF00FCFFFF00FFFFFFFFFFFFFF000003FFFFFFFFFF0000000003FF007FFFFF00000FFF
  FFFFFFFFFFFFFFFF803FFFFFFFFC3FFFDFFFFFFFFFFFFFFF03FF01FFFFFF0007FFDFFFFFFFFFFFFF007FFFFFFFFF00FF
  FFFFFFFFFFFFFFFF001FFFFEFFFFFFFFFFFFFFFFFFFBFFFF0000000000000003FFFF03FFBFFFBD7F03FF07FFFFFFFFFF
  FBEDFDFFFFF99FEF001F1FCFE081399FFFBFFFFFFFFF4BFF0000000601BFF7A5FFFFFFFFFFFFFFFF00000003EFFFFFFF
*************** FFFFFFFFFFFFFFFF0000000003FF00FF00000000
*** 6547,6555 ****
  FFFFFFFFFFFFFFFF00001FFF03FF001F03FFFFFFFFFFFFFF0000000FFFFF03FFFFFF0FFFE7FFFFFF000000000000007F
  000000000000000000000000000000000FFFFFFFFFFFFFFF0000000000000000FFFFFFFF000000008007FFFFFFFFFFFF
  F9BFFFFFFF6FF27F0000000003FF007FFFFFFCFF000000000000001FFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF
! FFFF0007FFFFFFFF01FFFFFFFFFFFFFF00000000000003FF0000000000000000000000000000000003FF0003FFFFFFFF
  FF7FFFFFFFFFFDFFFFFF1FFFFFFF003F007FFEFFFFFCFFFF0000000000000000B47FFFFFFFFFFB7FFFFFFDBF03FF00FF
! 000003FF01FB7FFF000000000000000000000000000000000000000000000000000000000000000001FFFFFF00000000
  C7FFFFFFFFFDFFFF0000000007FFFFFF00010000000000008003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  0000000003FFFFFF0000000000000000FFFFFFFFFFFFFFFF001F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFF000000000000000F0000000000000000000000000000000000000000000000000000000000000000
--- 6643,6651 ----
  FFFFFFFFFFFFFFFF00001FFF03FF001F03FFFFFFFFFFFFFF0000000FFFFF03FFFFFF0FFFE7FFFFFF000000000000007F
  000000000000000000000000000000000FFFFFFFFFFFFFFF0000000000000000FFFFFFFF000000008007FFFFFFFFFFFF
  F9BFFFFFFF6FF27F0000000003FF007FFFFFFCFF000000000000001FFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF
! FFFF0007FFFFFFFF01FFFFFFFFFFFFFF00000000000003FF000000FF00000000000000000000000003FF0003FFFFFFFF
  FF7FFFFFFFFFFDFFFFFF1FFFFFFF003F007FFEFFFFFCFFFF0000000000000000B47FFFFFFFFFFB7FFFFFFDBF03FF00FF
! FFFF03FF01FB7FFF000003FF0FFFFFFF00000000000000000000000000000000000000000000000001FFFFFF00000000
  C7FFFFFFFFFDFFFF0000000007FFFFFF00010000000000008003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  0000000003FFFFFF0000000000000000FFFFFFFFFFFFFFFF001F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFF000000000000000F0000000000000000000000000000000000000000000000000000000000000000
*************** FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
*** 6558,6604 ****
  0000000000000000000000000000000003FFFFFFFFFFFFFF000000000000000000000000000000000000000000000000
  01FFFFFFFFFFFFFFFFFFC3FF7FFFFFFF7FFFFFFFFFFFFFFF003F3FFFFFFF03FFFFFFFFFFFFFFFFFFE0FFFFFBFBFF003F
  000000000000FFFF0000000000000000000000000000000003FFFFFFFFFFFFFF00000000000000000000000000000000
! 0000000000000000FFFFFFFFFFFFFFFF0000000007FFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF87FF
! 00000000FFFF80FF0003001F00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80000000003FFFFF00000000000001FF0000000000000000
! 000000000000000000000000000000000000000000000000000000000000000000000000000000006FEF000000000000
! 00040007FFFFFFFFFFFF00F000270000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1FFF07FFFFFFFFFF00000000F3FF01FF0000000000000000
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 000FFFFFFFFFFFFF0000000000000000FFFF3FFFFFFFFFFFFFFFFFFFFFFF007FFFFFFFFFFFFFFFFF000000000000000F
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF003FFFFFFFFFFFFFFFFFFE7FFFFFFFFFF807FFFFFFFFFFFF
! FFFFFFFFFFFFFFFF000007FFFFFFFFFFFFFFFFFFFFFFFFFF000000000000003F0000000000000000000FFFFF000FFFFF
! FFFFFFFFFFFFFFFF01FFFFFF007FFFFF00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFF
! EBFFDE64DFFFFFFFFFFFFFFFFFFFFFEF7BFFFFFFDFDFE7BFFFFFFFFFFFFDFC5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFEF8000FFF0000000000000000
! 000007E07FFFFFFF000000000000000000000000000000000000000000000000FFFF07DBF9FFFF7F00003FFFFFFFFFFF
! 000000000000800000000000000000003FFF1FFFFFFFFFFF000000000000C3FF00000000000000000000000000000000
! 0000000000000000000000000000000000007FFFFFFF000083FFFFFFFFFFFFFF00000000000000000000000000000000
! 000000000000000003FFFFFFFFFF000000000000000000000000000000000000000000000000000087FFFFFFFFFF0000
  0000000000000000000000000000000000000000000000007FFF6F7F00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFF00000000007FFF9FFFFFFFFFFFFFFFFF00000000C3FF0FFF00000000000000000000000000000000
  0000000000000000FFFE000000000000001FFFFFFFFFFFFF00000000000000003FFFFFFFFFFFFFFE0000000000000000
  000000000000000000000000000000000AF7FE96FFFFFFEF5EF7F796AA96EA840FFFFBEE0FFFFBFF0003000000000000
  FFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7FFF000FFFFF003FFFFFFFFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  00003FFFFFFFFFFFFFFFFFC0000000000FFFFFFFFFFF00070000003F000301FF00000000000000000000000000000000
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1FFF1FFFF0FFFFFFFFFFFFFFFFFFFFFFF87FFFFFFFFFFFFF
! FFFFFFFFFFFFFFFF00010FFF03FFFFFFFFFFFFFFFFFF0FFFFFFFFFFF03FF00FF0FFF3FFFFFFF00FF0000000000000003
! FFFFFFFFFFFFFFFF1FFF3FFF000FFFFFFFFFFFFFFFFF83FF01FF03FF9FFFC07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFF7FFFF03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFF
! 03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3FFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0003FFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0001FFFFFFFFFFFFFFFFFFFFFFFF000000003FFFFFFF
! 00000000000000000000000000000000000000003FFFFFFF000000000000000000000000000000000000000000000000
! FFFFFFFFFFFFFFFFFFFFFFFFFFFF07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 0000FFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF
! 0000000000000000000000000000000000000000000000000000000000000000",
  );
! //4944 bytes
  enum nonCharacterTrieEntries = TrieEntry!(bool, 7, 4, 4, 6)(x"
! 00000000000000000000000000000010000000000000004C0000000000000154",
  x"
! 000000000000008000000000000000F000000000000004200000000000004580",
  x"
  07060504030201000B0B0B0A090801010B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B
  0B0B0B0B0B0B0B0B0D0101010B0B0B0C000000000D010101000000000000000000000000000000000000000000000000
--- 6654,6699 ----
  0000000000000000000000000000000003FFFFFFFFFFFFFF000000000000000000000000000000000000000000000000
  01FFFFFFFFFFFFFFFFFFC3FF7FFFFFFF7FFFFFFFFFFFFFFF003F3FFFFFFF03FFFFFFFFFFFFFFFFFFE0FFFFFBFBFF003F
  000000000000FFFF0000000000000000000000000000000003FFFFFFFFFFFFFF00000000000000000000000000000000
! 0000000000000000FFFFFFFFFFFFFFFFF9FFFFFF07FFFFFF00000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87FF
! 00000000FFFF80FF007F001F00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80000000003FFFFF
! 000000007FFFFFFF0000000000000000FFFFFFFFFFFFFFFF0007FFFFFFFFFFFF00000000000000000000000000000000
! 00000000000000006FEF00000000000000040007FFFFFFFFFFFF00F000270000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1FFF07FFFFFFFFFF
! 00000000F3FF01FF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1FFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFF0001FFFF0001FFFFFFFF3FFFFFFFFFFFFFFFFFFFFFFF007F
! FFFFFFFFFFFFFFFF000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF003FFFFFFFFFFFFF
! FFFFFE7FFFFFFFFFF807FFFFFFFFFFFFFFFFFFFFFFFFFFFF000007FFFFFFFFFFFFFFFFFFFFFFFFFF000000000000003F
! 0000000000000000000FFFFF000FFFFFFFFFFFFFFFFFFFFF01FFFFFF007FFFFF00000000000000000000000000000000
! FFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFEBFFDE64DFFFFFFFFFFFFFFFFFFFFFEF7BFFFFFFDFDFE7BFFFFFFFFFFFFDFC5F
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3FFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 0000FFFEF8000FFF0000000000000000000007E07FFFFFFF000000000000000000000000000000000000000000000000
! FFFF07DBF9FFFF7F00003FFFFFFFFFFF000000000000800000000000000000003FFF1FFFFFFFFFFF000000000000C3FF
! 000000000000000000000000000000000000000000000000000000000000000000007FFFFFFF000083FFFFFFFFFFFFFF
! 00000000000000000000000000000000000000000000000003FFFFFFFFFF000000000000000000000000000000000000
! 000000000000000087FFFFFFFFFF0000000000000000000000000000000000000000000000000000C03FFFFF7FFFFFFF
  0000000000000000000000000000000000000000000000007FFF6F7F00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFF00000000007FFF9FFFFFFFFFFFFFFFFF00000000C3FF0FFF00000000000000000000000000000000
  0000000000000000FFFE000000000000001FFFFFFFFFFFFF00000000000000003FFFFFFFFFFFFFFE0000000000000000
  000000000000000000000000000000000AF7FE96FFFFFFEF5EF7F796AA96EA840FFFFBEE0FFFFBFF0003000000000000
  FFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7FFF000FFFFF003FFFFFFFFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  00003FFFFFFFFFFFFFFFFFC0000000000FFFFFFFFFFF00070000003F000301FF00000000000000000000000000000000
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1FFF1FFFF1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFF00010FFF03FFFFFFFFFFFFFFFFFF0FFFFFFFFFFF03FF00FF0FFF3FFFFFFF00FF0000000001FF0003
! FFFFFFFFFFFFFFFF1FFF3FFF00FFFFFFFFFFFFFFFFFFC7FF01FF87FF9FFFE17FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFF7FFFF07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFF
! FFFFFFFF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0001FFFFFFFF
! FFFFFFFFFFFFFFFF000000003FFFFFFF00000000000000000000000000000000000000003FFFFFFF0000000000000000
! 00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFF03FFFFFFFFFFFFFF00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000",
  );
! //4936 bytes
  enum nonCharacterTrieEntries = TrieEntry!(bool, 7, 4, 4, 6)(x"
! 00000000000000000000000000000010000000000000004C000000000000014C",
  x"
! 000000000000008000000000000000F000000000000004000000000000004740",
  x"
  07060504030201000B0B0B0A090801010B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B
  0B0B0B0B0B0B0B0B0D0101010B0B0B0C000000000D010101000000000000000000000000000000000000000000000000
*************** x"
*** 6606,6717 ****
  000B000A00090008000D000D000D000C000D000D000D000D000D000D000D000D000D000D000D000D000D000D000D000D
  000D000D000D000D000D000D000D000D000D000F000E000D000D000D000D000D000D000D000D000D000D000D0010000D
  000D000D000D000D00120011000D000D0016001500140013001A001900180017001E001D001C001B000D000D001F000D
! 001D001D00210020001D001D001D001D00240023001D0022000D000D000D000D0026000D0025000D001D001D001D001D
! 0027001D001D001D0029001D001D0028002A001D001D001D002E002D002C002B003200310030002F001D003500340033
! 000D000D000D000D000D000D000D000D000D000D0036000D000D00380037000D0039000D000D000D000D000D000D000D
! 003B003A000D000D001D003C001D001D000D000D000D000D000D000D000D003D001D001D001D003E001D001D001D001D
! 001D001D001D001D001D001D001D001D001D001D001D001D001D001D001D001D001D001D001D003F001D001D001D001D
! 001D001D001D001D001D001D001D001D000D000D000D000D000D000D000D000D000D000D000D000D0040000D000D000D
! 000D000D000D000D000D000D000D000D000D000D000D000D0040000D000D000D00000000000000000000000000000000
  00000000000000000000000200010000000000000000000000060005000400030000000000000000000A000900080007
  0000000D000C000B000F000E0000000000130012001100100017001600150014001B001A00190018001F001E001D001C
  0023002200210020002600250024000000270000000000000000000000000000002A002900280000002E002D002C002B
  000000000000000000000000000000000030002F000000000033000000320031003500340030002D0039003800370036
  003D003C003B003A003F0000003E00000043004200410040000000000000000000000000000000000047004600450044
  004A0049004800000000004B000000000000000000000000000000000000000000000000004D004C0000000000000000
! 000000000000000000000000000000000000000000000000000000000000000000000000000000000000004F004E0000
! 00500000000000000054005300520051005700560055000000580000000000000000000400590000005C005B0000005A
! 000000000000005D00000000000000000000000000000000000000000000000000000000000000000000000000000000
! 005F005E0000000000000000000000000061000000000060006200000000000000640000006100630066000000650000
! 0069000000680067006B00000038006A000000000000000000000000000000000000000000000000006D006C00000000
! 00000000000000000000000000000000006F0000006E0000007200000071007000000000000000000074007300000000
! 007600000075002D0078007700000059007B0000007A0079007E007D0000007C0080002F007F007F0084008300820081
! 008600850000000000570089008800870000000000000000007F008B008A0067008E008D004F008C00730090007F008F
! 0094009300920091007F009700960095009A009900980000007F009D009C009B00A0009F009E007F00A300A200A10087
! 00A5000000A4000000A7000000A6004600AB00AA00A900A800AF00AE00AD00AC00B1000000B00000005500B2007F007F
! 00B500B400B30000007F007F00B700B600BA00B9007F00B800BE00BD00BC00BB003000C000BF000000C2007F007F00C1
! 007F00C500C400C3007F00C800C700C600C9007F007F007F00CD00CC00CB00CA00000000000000000000000000000000
! 0000000000000000007F006F000000000000000000CE0000007F007F00CF0000007F007F007F007F007F007F007F007F
! 007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F
! 007F007F007F007F009900D0007F007F0000000000D10000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000000000000000000000007B00000000000000000000000000000000000000000000
! 007F007F00B70000007F007F007F007F007F007F007F007F007F007F007F00B4007F007F007F007F007F007F007F007F
! 0000000000000000000000000000000000D3007700D20030007F00D500D40000007F007F007F007F007F007F00B4007F
! 007F00CB0000007F00D800D700D600000000000000000000000000000000000000000000000000000061000000000000
! 00D9000000000000007F007F007F0098007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F
! 007F007F007F007F00DA007F007F007F00000000000000000000000000DC00DB00B8000000000000007F007F007F007F
! 007F00DE00DD0000007F007F007F007F007F007F007F007F007F007F007F007F00B40000000000000000000000000000
! 007F00570000000000CF0000005F006E003500000000000000E00000000000DF00E2007F00E10000007F007F00E30000
! 00E600E500E400000000000000E800E7000000E90000000000EA00000000000000000000000000000000000000000000
! 007F00EB00000000007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F00EC
! 007F00EF00EE00ED007F007F00F100F000F300F2007F007F007F007F007F007F00F4007F007F007F00F5007F007F007F
! 007F007F007F007F00F6007F007F007F00F7000000000000007F007F00F80000007F007F007F007F007F007F007F007F
! 007F00FA00F9007F007F007F007F00FB00FF00FE00FD00FC007F007F007F007F0101010000000038010200EE00000000
! 007F007F0104010300000000000000000000000000000000000000000000000001050000000000000107000001060000
! 00A901090108004B0000000000000000010C010B010A000000B4010D0000000000000000000000000000000000000000
! 0093000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B4
! 000000000000010E00000000000000000000000000000000000000000000000000000000000000000000000000000000
! 0000010F0000000000000000000000000000000000000000000000000000000000000000000000000110000000000000
! 00000000000000000000000000000000007F007F00550000007F007F007F007F00000000000000000000000000000000
! 007F007F007F0055007F007F007F007F0000000000000000000000000000000000000000000000000000000001110000
! 000000000000000000000000000000000000000000000000007F011200000000007F007F000001130112000000000000
! 007F007F007F007F007F007F007F007F0000000000000000000000000000000000000000000000000114000000000000
! 000000000000000000000000000000000000000000000000011400000000000000000000000000000300000000000000
! 000000040000280F000100000000000000000000018000000000000000011800FFE078000000FF000000000000004000
! 0000000000001800FFFC00000000000018000000000000008000C000000000000000F800B000000000000000007C8000
! 0C3A020000066010800000304F7F86602C92020000067811FF80003FA1FDC6780C1202000004401101FC0030FFFEC440
! 0C12020000066011FF0000304F1FC6603C0038E729C23813F800003FFF7EC2380C00020000022000007F0030D89FC220
! 0C10020000022000FFF100309F9FC220000000000002200000000030000F0220D004000003800011FFE3003F00A07B80
! 7800000000000001FFFFFFFFF0000000C000005000000829FFFFFFFF0C0080A00001E000000001002000000001000000
! FFFFFFFFF8002000000000000000DF4000000000C280C20080C200000000C20000000000008000C20000000000C20000
! E00000001800000000000000FC000000C0C000000000000000000000E0000000FE00000000000000FF8000007FC00000
! FFF22000FFF00000FC00FC00C00000000000F80000000000FFC0000000000000F000F00080000000FFE0C0000000000E
! 0000F00000000000000000003800FC00000000003000000060000000800000000000C000FC00FC00FFFFFFFFFFFF8000
! 00000000000020000FF000000000000007000000000000000000000000001C00180000000000F800F80000000000FF00
! 00000000C0C00000C00000005500C0C000200000000000008023000010300020000C00200000000000000000E0008000
! FFFE00000000FFFE000000000000F000FFFFFC000000000000000000FFFFF80000300000000000000000000000400000
! 01F00000000000000000DF40000000007FFE7F000000000080808080FF8000000000000080808080FFFFFFFFC0000000
! 0000000004000000FFF00000000000000000FFFFFFC000000000000000000001000100000000001F0000000000008000
! 00007FC0000000000000000080000000000000000000E000000000000000FF80FFFFF00000000000FF00000000000000
! 0003FFFFE014C000FC00E0000000000000000000FC003FC0E00000007FF00000800000003C004000FF80000000000000
! 000000000C00C000FF80000007FFFFF800008080FF818181FC00C000000000000000FFF000000000F000000000000780
! 0000C00000000000FFFFFFFFFC000000A08000001F07FF800000000000000024000000000007FFF80000000000030000
! 0000FFFFFFFF7F000020F0800008000060000000000000008000000000000000C1FF8080E30303034800008000001000
! FFFFFFFFC000C000F8000000000000000070000000000078FFFFFFFEE0008000C00000000000FFFFFFFFFFFFFFFFFFFF
! F0000000FFFE000000001FF000000000F80000000000F8000000000040000000FFFFFFFFFFC000F00000FC00C0000000
! F000000000F000000000FF000000000008007FF000000000E404000400480800FFFFFF00FFC00000F802000000000040
! 6E400000000002C0FFFF007F8000000007C80000FFFFFFFF7C000000700000000F0000000000000078C0000001100F90
! 00000000FE00FE00FFFFFFFF00000000FF8007800000000001C000000000000000F8000000C00000FFFF01FFE1FC0000
! FFFFFFFFFFFFFE00FFF800000000000003F8000000000000FC00FF0000000000000001C000000000FFFFFFFFFFFF3FC0
! 80000000FFFFFFFFFFFCC400000000000FFFFFFFFFFFFFE30000FFFFFC0000000000FFFFFFFFFC00FF800000FFFFF000
! 7FC000000003C000FC00FE000000DFF8FF8000000000FF00FFE00001000000000000000000040000FFFFFFFFFFFFFFFC
! 0000FC0040004280FC00F800000000000412020000066010FFE0E0301F7EC660004000000000B400FFFFFFF9FE40085A
! FFFFFFFC10000000FFFFFFFFFC00FF0000C0000000000000FFFFE000FC00FFE0FC00000000000000FFFFFFF00000FC00
! 0000F00018000000FFFFFFFFFFFFFF80F00000000000000000000000FFFFFFFF7FF80000000000000640000000900D80
! FFFFFFFFFC00FF8000000300FFFFFFFFFFFFFFE003000000000000000000FF000000FFF800000000FFFFFFFFFFFFFC00
! FC00FFFC0000000000800000000002000000E0000000FFC0FF800100000300004B8000000000048000000240FC00FF00
! FFFFFC00FE048000FE000000FFFFFFFF3800000000020000FFFFFFFFF8000000FFFEFFFFFFFFFFFF7FFC000000000000
! FFE0800000000000FFFFFFFFFFFFFFF0000000000000FFFF00000000FFC0000000003C0080000000FFC0C0000000FC00
! 1F0000040400FFC0FFFFFFFFFFFF00000000000000007800FFFFFFFF00007F00FFFCFFE0FFFFFFFF7FFFFFFFFFC00000
! 9010FFFFFFFFFFFFFFFBFFF8000000000000FF0FFFD8FFFFE000F80000000000FFFFFFF00C00FE000000018000000000
! FFFFF80000000000FFFFFFFFFFFFFFC0FFF00000FFF00000FE000000FF80000000000000002000001400219B20000000
! 0000000000000010840000002020184000000000000203A0000000C0000000000000000000003000FFFF000107FFF000
! FFFFF81F800000000000F82406000080FFFFC00000000000FFFFFFFFFFFF7FFFC000E00000000000FFFFFFFFFFFF3C00
! FFFF80000000FFFF7C00000000000000FC0000000000FFFF780000000000FFFF80009080FFFFFFFFFFFFFFFFFF800060
  FFFFFFFF3C00F0000001FFFFFFFFFFFFFFE0000000000000C000000000000001F508016900000010A10808695569157B
  F0000411F0000400FFFCFFFFFFFFFFFF00018000FFF00000FFC00000000100010000003FFFFFFFFFF00000000000FFF8
! FFFFFFC0FFFCFE00E000E0000F0000000780000000000000FFFEF000FC00000000000000FC00FF00F000C0000000FF00
! E000C000FFF000000000000000007C00FE00FC0060003F80000000000008000000000000C00000000000FFFC00000000
! 0000FFFE00000000000000000000F800FFFF00000000000000000000FFFFFFFDC000000000000000C000000000000000",
  );
! enum MAX_SIMPLE_LOWER = 1460;
! enum MAX_SIMPLE_UPPER = 1477;
! enum MAX_SIMPLE_TITLE = 1481;
! //10752 bytes
  enum toUpperIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x"
  000000000000000000000000000000200000000000000140",
  x"
! 000000000000010000000000000004800000000000001000",
  x"
  040203020202010007020202060202050202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
--- 6701,6812 ----
  000B000A00090008000D000D000D000C000D000D000D000D000D000D000D000D000D000D000D000D000D000D000D000D
  000D000D000D000D000D000D000D000D000D000F000E000D000D000D000D000D000D000D000D000D000D000D0010000D
  000D000D000D000D00120011000D000D0016001500140013001A001900180017001E001D001C001B000D000D001F000D
! 001D001D00210020001D001D001D001D00240023001D0022000D000D000D000D0025000D000D000D001D001D001D001D
! 0026001D001D001D0028001D001D00270029001D001D001D002D002C002B002A00310030002F002E001D003400330032
! 000D000D000D000D000D000D000D000D000D000D0035000D000D0036000D000D0037000D000D000D000D000D000D000D
! 00390038000D000D001D003A001D001D000D000D000D000D000D000D000D003B000D000D000D000D001D001D003C000D
! 001D001D001D001D001D001D001D001D001D001D001D001D001D001D001D001D001D001D001D003D001D001D001D001D
! 001D001D001D001D001D001D001D001D000D000D000D000D000D000D000D000D000D000D000D000D003E000D000D000D
! 000D000D000D000D000D000D000D000D000D000D000D000D003E000D000D000D00000000000000000000000000000000
  00000000000000000000000200010000000000000000000000060005000400030000000000000000000A000900080007
  0000000D000C000B000F000E0000000000130012001100100017001600150014001B001A00190018001F001E001D001C
  0023002200210020002600250024000000270000000000000000000000000000002A002900280000002E002D002C002B
  000000000000000000000000000000000030002F000000000033000000320031003500340030002D0039003800370036
  003D003C003B003A003F0000003E00000043004200410040000000000000000000000000000000000047004600450044
  004A0049004800000000004B000000000000000000000000000000000000000000000000004D004C0000000000000000
! 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004E0000
! 004F0000000000000053005200510050005600550054000000570000000000000000000400580000005B005A00000059
! 000000000000005C00000000000000000000000000000000000000000000000000000000000000000000000000000000
! 005E005D000000000000000000000000006000000000005F006100000000000000630000006000620065000000640000
! 0068000000670066006A000000380069000000000000000000000000000000000000000000000000006C006B00000000
! 00000000000000000000000000000000006E0000006D0000000000000070006F00000000000000000071000000000000
! 007300000072002D00750074000000580078000000770076007B007A00000079007D002F007C007C00810080007F007E
! 008300820000000000560086008500840000000000000000007C008800870066008C008B008A0089008F008E006E008D
! 0093009200910090007C0096009500940099009800970000007C009C009B009A009F009E009D007C00A200A100A00084
! 00A4000000A3000000A6000000A5004600AA00A900A800A700AE00AD00AC00AB00B0000000AF0000005400B1007C007C
! 00B400B300B20000007C007C00B600B500B900B8007C00B700BD00BC00BB00BA003000BF00BE000000C2007C00C100C0
! 007C00C500C400C300C900C800C700C600CA007C007C007C00CE00CD00CC00CB00000000000000000000000000000000
! 0000000000000000007C006E000000000000000000CF0000007C007C00D00000007C007C007C007C007C007C007C007C
! 007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C
! 007C007C007C007C009800D1007C007C0000000000D20000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000000000000000000000007800000000000000000000000000000000000000000000
! 007C007C00B60000007C007C007C007C007C007C007C007C007C007C007C00B3007C007C007C007C007C007C007C007C
! 0000000000000000000000000000000000D4007400D30030007C00D600D50000007C007C007C007C007C007C00B3007C
! 00D800D70000007C00DB00DA00D9000000DC00000000000000980000007C00DD007C007C007C007C007C007C007C007C
! 007C007C007C007C007C007C007C007C007C007C007C007C00DE007C007C007C00000000000000000000000000E000DF
! 00B7000000000000007C007C007C007C007C00E200E10000007C007C007C007C007C007C007C007C007C007C007C007C
! 00E3000000000000000000000000000000E500E40000000000D00000005E006D003500000000000000E70000000000E6
! 00E9007C00E80000007C007C00EA000000ED00EC00EB00000000000000EF00EE000000F00000000000F1000000000000
! 00000000000000000000000000000000007C00F200000000007C007C007C007C007C007C007C007C007C007C007C007C
! 007C007C007C007C007C007C007C00F3007C00F600F500F4007C007C00F800F700FA00F9007C007C007C007C007C007C
! 00FB007C007C007C00FC007C007C007C00FD007C007C007C00FE007C007C007C00FF000000000000007C007C01000000
! 007C007C007C007C007C007C007C007C007C01020101007C007C007C007C01030107010601050104007C007C007C007C
! 0109010800000038010A00F500000000007C007C010C010B000000000000000000000000000000000000000000000000
! 010D000000000000010E00000000000001110110010F004B000000000000000001140113011200000078011500000000
! 000000000000000000000000000000000092000000000000000000000000000000000000000001160000000000000000
! 00000000000000000000000000000000000000000000000000000000000000000000006D000000000000000000000000
! 000000000000000000000000000000000000000000000000011700000000000000000000000000000000000000000000
! 007C007C00540000007C007C007C007C00000000000000000000000000000000007C007C007C0054007C007C007C007C
! 0000000000000000000000000000000000000000000000000000000001180000007C007C00B30000007C007C007C007C
! 007C007C007C007C007C007C007C007C007C007C00000119011A000000000000007C007C007C007C007C007C007C007C
! 000000000000000000000000000000000000000000000000011B00000000000000000000000000000000000000000000
! 0000000000000000011B00000000000000000000000000000300000000000000000000040000280F0001000000000000
! 00000000018000000000000000011800FFE078000000FF0000000000000040000000000000001800FFFC000000000000
! 18000000000000008000C000000000000000F800B000000000000000007C00000C3A020000066010800000304F7F8660
! 2C92020000067811FF80003FA1FDC6780C1202000004401101FC0030FFFEC4400C12020000066011FF0000304F1FC660
! 3C0038E729C23813F800003FFF7EC2380C00020000022000007F0030C89FC2200C10020000022000FFF100308F9FC220
! 000000000002200000000030000F0220D004000003800011FFE3003F00A07B807800000000000001FFFFFFFFF0000000
! C000005000000829FFFFFFFF0C0080A00001E000000001002000000001000000FFFFFFFFF8002000000000000000DF40
! 00000000C280C20080C200000000C20000000000008000C20000000000C20000E00000001800000000000000FC000000
! C0C000000000000000000000E0000000FE00000000000000FF8000007FC00000FFF22000FFF00000FC00FC00C0000000
! 0000F80000000000FFC0000000000000F000F00080000000FFE0C0000000000E0000F00000000000000000003800FC00
! 000000003000000060000000800000000000C000FC00FC00FFFFF000C000000000000000000020000FF0000000000000
! 07000000000000000000000000001C00180000000000F800F80000000000FF0000000000C0C00000C00000005500C0C0
! 00200000000000008023000010300020000C00200000000000000000E0008000FFFE00000000FFFC000000000000F000
! FFFFFC000000000000000000FFFFF800003000000000000001F00000000000000000DF40000000007FFE7F0000000000
! 80808080FF8000000000000080808080FFFFFFFFC00000000000000004000000FFF00000000000000000FFFFFFC00000
! 0000000000000001000100000000001F000000000000800000007FC0000000000000000080000000000000000000E000
! 000000000000FF80FFFFF00000000000FF000000000000000001FFFFE0000000FC00E0000000000000000000FC003FC0
! E00000007FF00000800000003C004000FF80000000000000000000000C00C000FF80000007FFFFF800008080FF818181
! FC00C000000000000000FFF000000000F0000000000007800000C00000000000FFFFFFFFFC000000A08000001F07FF80
! 00000000000000240000FFFFFFFF00000020F0800008000060000000000000008000000000000000C1FF8080E3030303
! 4800008000001000FFFFFFFFC000C000F8000000000000000070000000000078FFFFFFFEE0008000C00000000000FFFF
! FFFFFFFFFFFFFFFFF0000000FFFE000000001FF000000000F80000000000F8000000000040000000FFFFFFFFFFC000F0
! 0000FC00C0000000F000000000F000000000FF000000000008007FF000000000E404000400480800FFFFFF00FFC00000
! F8020000000000406E400000000002C00000000000400000FFFF007F8000000007C80000FFFFFFFF7C00000070000000
! 0F00000000000000000000000003000078C0000001100F9000000000FE00FE00FFFFFFFF00000000FF80078000000000
! 01C000000000000000F8000000C00000FFFF01FFE1FC0000FFFFFFFFFFFFFE00FFF800000000000003F8000000000000
! FC00FF0000000000000001C000000000FFFFFFFFFFFF3FC080000000FFFFFFFFFFFCC4000000000003FFFFFFFE00FF03
! 0000FFFFFC0000000000FFFFFFFFFC00FF800000FFFFF0007FC000000003C000FC00FE000000DFF8FF8000000000FF00
! FFE00001000000000000000000040000FFFFFFFFFFFFFFFC0000FC0040004280FC00F800000000000412020000066010
! FFE0E0301F7EC660004000000000B400FFFFFFF9FE40085AFFFFFFFC10000000FFFFFFFFFC00FF0000C0000000000000
! FFFFE000FC00FFE0FC00000000000000FFFFFFF00000FC000000F00018000000FFFFFFFFFFFFFF80F000000000000000
! 00000000FFFFFFFF7FF80000000000000640000000900D80FFFFFFFFFC00FF8000000300FFFFFFFFFFFFFFE003000000
! 000000000000FF000000FFF800000000FFFFFFFFFFFFFC00FFFFFF00FFFFFFFFFC00FFFC000000000080000000000200
! 0000E0000000FFC0FF800100000300004B8000000000048000000240FC00FF000000FC00FE048000FFFFFC00F0000000
! FE000000FFFFFFFF3800000000020000FFFFFFFFF8000000FFFEFFFFFFFFFFFF7FFC000000000000FFE0800000000000
! FFFFFFFFFFFFFFF0000000000000FFFF00000000FFC0000000003C0080000000FFC0C0000000FC001F0000040400FFC0
! FFFFFFFFFFFF000006000000F8000000FFFFFFFFFFF000000000000000007800FFFFFFFF00007F00FF80FFE0FFFFFFFF
! 7FFFFFFFFFC00000FFFFFFFF800000009010FFFFFFFFFFFFFFFBFFF8000000000000FF0FFFD8FFFFE000F80000000000
! FFFFFFF00C00FE00E00000000000000003F0000000000000FFFE0000FFFE00000000018000000000FFFFF80000000000
! FFFFFFFFFFFFFFC0FFF00000FFF00000FE000000FF80000000000000002000001400219B200000000000000000000010
! 840000002020184000000000000203A0000000C0000000000000000000003000FFFF000107FFF000FFFFF81F80000000
! 0000F82406000080FFFFC00000000000FFFFFFFFFFFF7FFFC000E00000000000FFFFFFFFFFFF3C00FFFF80000000FFFF
! 7C00000000000000FC0000000000FFFF780000000000FFFF3FC000008000000080009080FFFFFFFFFFFFFFFFFF800060
  FFFFFFFF3C00F0000001FFFFFFFFFFFFFFE0000000000000C000000000000001F508016900000010A10808695569157B
  F0000411F0000400FFFCFFFFFFFFFFFF00018000FFF00000FFC00000000100010000003FFFFFFFFFF00000000000FFF8
! FFFFFFC0FFFCFE00E000E0000E000000FFFEF000FC00000000000000FC00FF00F000C0000000FF00FFFFFFFFFE00FFFC
! E000C000FF0000000000000000003800FE00780060001E80000000000008000000000000C00000000000FFFE00000000
! 000000000000F80000000000FFFFFFFDFFFF000000000000C000000000000000C000000000000000",
  );
! enum MAX_SIMPLE_LOWER = 1488;
! enum MAX_SIMPLE_UPPER = 1505;
! enum MAX_SIMPLE_TITLE = 1509;
! //11008 bytes
  enum toUpperIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x"
  000000000000000000000000000000200000000000000140",
  x"
! 000000000000010000000000000004800000000000001080",
  x"
  040203020202010007020202060202050202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
*************** x"
*** 6752,6763 ****
  003B00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000000000000000000000000000000000000000000000003C00000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000003E003D0000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- 6847,6858 ----
  003B00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 0000000000000000000000000000000000000000000000000000000000000000003E003D003C00000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 0000000000000000000000000040003F0000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
*************** FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00020001
*** 6775,6793 ****
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF001AFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05C5FFFFFFFFFFFF001E001D001C001B002200210020001F
  0026002500240023002A002900280027002E002D002C002BFFFF00310030002F00350034003300320039003800370036
  003BFFFF003AFFFF003DFFFF003CFFFF003FFFFF003EFFFF0041FFFF0040FFFF0043FFFF0042FFFF0045FFFF0044FFFF
  0047FFFF0046FFFF0049FFFF0048FFFF004BFFFF004AFFFF004DFFFF004CFFFF004FFFFF004EFFFF0051FFFF0050FFFF
! 0053FFFF005205C70055FFFF0054FFFFFFFF0056FFFFFFFFFFFF0058FFFF0057FFFF005AFFFF0059FFFF005CFFFF005B
! 005EFFFF05E4005D0060FFFF005FFFFF0062FFFF0061FFFF0064FFFF0063FFFF0066FFFF0065FFFF0068FFFF0067FFFF
  006AFFFF0069FFFF006CFFFF006BFFFF006EFFFF006DFFFF0070FFFF006FFFFF0072FFFF0071FFFF0074FFFF0073FFFF
  FFFF0075FFFFFFFF00780077FFFF0076007AFFFFFFFF0079FFFFFFFF007BFFFFFFFFFFFFFFFF007CFFFFFFFFFFFF007D
  FFFF007EFFFFFFFFFFFFFFFF007FFFFF008200810080FFFFFFFF0083FFFFFFFF0085FFFF0084FFFFFFFFFFFF0086FFFF
  FFFFFFFFFFFF0087FFFFFFFF0088FFFFFFFFFFFFFFFF0089FFFF008BFFFF008AFFFFFFFF008CFFFF008EFFFF008DFFFF
  FFFFFFFFFFFFFFFFFFFF0090008FFFFF0093FFFF00920091FFFF0095FFFF0094FFFF0097FFFF0096FFFF0099FFFF0098
  FFFF009BFFFF009A009EFFFF009D009C00A0FFFF009FFFFF00A2FFFF00A1FFFF00A4FFFF00A3FFFF00A6FFFF00A5FFFF
! 00A800A7FFFF05ECFFFFFFFF00A9FFFF00ABFFFF00AAFFFF00ADFFFF00ACFFFF00AFFFFF00AEFFFF00B1FFFF00B0FFFF
  00B3FFFF00B2FFFF00B5FFFF00B4FFFF00B7FFFF00B6FFFF00B9FFFF00B8FFFF00BBFFFF00BAFFFF00BDFFFF00BCFFFF
  00BEFFFFFFFFFFFF00C0FFFF00BFFFFF00C2FFFF00C1FFFF00C4FFFF00C3FFFF00C6FFFF00C5FFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFF00C8FFFFFFFF00C7FFFF00CAFFFF00C900CBFFFFFFFFFFFF00CDFFFF00CCFFFF00CFFFFF00CEFFFF
--- 6870,6888 ----
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF001AFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05E1FFFFFFFFFFFF001E001D001C001B002200210020001F
  0026002500240023002A002900280027002E002D002C002BFFFF00310030002F00350034003300320039003800370036
  003BFFFF003AFFFF003DFFFF003CFFFF003FFFFF003EFFFF0041FFFF0040FFFF0043FFFF0042FFFF0045FFFF0044FFFF
  0047FFFF0046FFFF0049FFFF0048FFFF004BFFFF004AFFFF004DFFFF004CFFFF004FFFFF004EFFFF0051FFFF0050FFFF
! 0053FFFF005205E30055FFFF0054FFFFFFFF0056FFFFFFFFFFFF0058FFFF0057FFFF005AFFFF0059FFFF005CFFFF005B
! 005EFFFF0600005D0060FFFF005FFFFF0062FFFF0061FFFF0064FFFF0063FFFF0066FFFF0065FFFF0068FFFF0067FFFF
  006AFFFF0069FFFF006CFFFF006BFFFF006EFFFF006DFFFF0070FFFF006FFFFF0072FFFF0071FFFF0074FFFF0073FFFF
  FFFF0075FFFFFFFF00780077FFFF0076007AFFFFFFFF0079FFFFFFFF007BFFFFFFFFFFFFFFFF007CFFFFFFFFFFFF007D
  FFFF007EFFFFFFFFFFFFFFFF007FFFFF008200810080FFFFFFFF0083FFFFFFFF0085FFFF0084FFFFFFFFFFFF0086FFFF
  FFFFFFFFFFFF0087FFFFFFFF0088FFFFFFFFFFFFFFFF0089FFFF008BFFFF008AFFFFFFFF008CFFFF008EFFFF008DFFFF
  FFFFFFFFFFFFFFFFFFFF0090008FFFFF0093FFFF00920091FFFF0095FFFF0094FFFF0097FFFF0096FFFF0099FFFF0098
  FFFF009BFFFF009A009EFFFF009D009C00A0FFFF009FFFFF00A2FFFF00A1FFFF00A4FFFF00A3FFFF00A6FFFF00A5FFFF
! 00A800A7FFFF0608FFFFFFFF00A9FFFF00ABFFFF00AAFFFF00ADFFFF00ACFFFF00AFFFFF00AEFFFF00B1FFFF00B0FFFF
  00B3FFFF00B2FFFF00B5FFFF00B4FFFF00B7FFFF00B6FFFF00B9FFFF00B8FFFF00BBFFFF00BAFFFF00BDFFFF00BCFFFF
  00BEFFFFFFFFFFFF00C0FFFF00BFFFFF00C2FFFF00C1FFFF00C4FFFF00C3FFFF00C6FFFF00C5FFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFF00C8FFFFFFFF00C7FFFF00CAFFFF00C900CBFFFFFFFFFFFF00CDFFFF00CCFFFF00CFFFFF00CEFFFF
*************** FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
*** 6799,6806 ****
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00F8FFFF00F7FFFF00F9FFFFFFFFFFFF
  00FAFFFFFFFFFFFFFFFFFFFF00FC00FBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFF05E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFF010000FF00FE00FD01030102010105E90107010601050104010B010A01090108010F010E010D010C
  01130112011101100117011601150114011B011A01190118FFFF011E011D011CFFFFFFFF0120011F012301220121FFFF
  0125FFFF0124FFFF0127FFFF0126FFFF0129FFFF0128FFFF012BFFFF012AFFFF012DFFFF012CFFFF012FFFFF012EFFFF
  0133013201310130FFFFFFFF0134FFFF0136FFFFFFFF0135FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
--- 6894,6901 ----
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00F8FFFF00F7FFFF00F9FFFFFFFFFFFF
  00FAFFFFFFFFFFFFFFFFFFFF00FC00FBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFF0602FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFF010000FF00FE00FD01030102010106050107010601050104010B010A01090108010F010E010D010C
  01130112011101100117011601150114011B011A01190118FFFF011E011D011CFFFFFFFF0120011F012301220121FFFF
  0125FFFF0124FFFF0127FFFF0126FFFF0129FFFF0128FFFF012BFFFF012AFFFF012DFFFF012CFFFF012FFFFF012EFFFF
  0133013201310130FFFFFFFF0134FFFF0136FFFFFFFF0135FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
*************** FFFF0197FFFF0196019A0199FFFF0198019CFFFF
*** 6819,6825 ****
  01C8FFFF01C7FFFF01CAFFFF01C9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01CD01CC01CBFFFF01D101D001CF01CE01D501D401D301D201D901D801D701D6
! 01DD01DC01DB01DA01E101E001DF01DE01E501E401E301E201E901E801E701E601ED01EC01EB01EA05D801F001EF01EE
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
--- 6914,6920 ----
  01C8FFFF01C7FFFF01CAFFFF01C9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01CD01CC01CBFFFF01D101D001CF01CE01D501D401D301D201D901D801D701D6
! 01DD01DC01DB01DA01E101E001DF01DE01E501E401E301E201E901E801E701E601ED01EC01EB01EA05F401F001EF01EE
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
*************** FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
*** 6841,6862 ****
  024FFFFF024EFFFF0251FFFF0250FFFF0253FFFF0252FFFF0255FFFF0254FFFF0257FFFF0256FFFF0259FFFF0258FFFF
  025BFFFF025AFFFF025DFFFF025CFFFF025FFFFF025EFFFF0261FFFF0260FFFF0263FFFF0262FFFF0265FFFF0264FFFF
  0267FFFF0266FFFF0269FFFF0268FFFF026BFFFF026AFFFF026DFFFF026CFFFF026FFFFF026EFFFF0271FFFF0270FFFF
! 0273FFFF0272FFFF0275FFFF0274FFFF0277FFFF0276FFFF0279FFFF0278FFFF027BFFFF027AFFFF05F005EE027CFFFF
! 027D05F605F405F2FFFFFFFFFFFFFFFF027FFFFF027EFFFF0281FFFF0280FFFF0283FFFF0282FFFF0285FFFF0284FFFF
  0287FFFF0286FFFF0289FFFF0288FFFF028BFFFF028AFFFF028DFFFF028CFFFF028FFFFF028EFFFF0291FFFF0290FFFF
  0293FFFF0292FFFF0295FFFF0294FFFF0297FFFF0296FFFF0299FFFF0298FFFF029BFFFF029AFFFF029DFFFF029CFFFF
  029FFFFF029EFFFF02A1FFFF02A0FFFF02A3FFFF02A2FFFF02A5FFFF02A4FFFF02A7FFFF02A6FFFF02A9FFFF02A8FFFF
  02ABFFFF02AAFFFF02ADFFFF02ACFFFF02B102B002AF02AE02B502B402B302B2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  02B902B802B702B6FFFFFFFF02BB02BAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02BF02BE02BD02BC02C302C202C102C0
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02C702C602C502C402CB02CA02C902C8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 02CF02CE02CD02CCFFFFFFFF02D102D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02D305FA02D205F802D5060002D405FD
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02D902D802D702D602DD02DC02DB02DAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 02E102E002DF02DE02E502E402E302E202E902E802E702E6FFFFFFFF02EB02EA0627062506230621062F062D062B0629
! 0637063506330631063F063D063B06390647064506430641064F064D064B06490657065506530651065F065D065B0659
! 0667066506630661066F066D066B06690677067506730671067F067D067B06790681068D0305030406990603FFFF068F
! FFFFFFFFFFFFFFFFFFFF0307FFFF068306850691FFFFFFFF069C0605FFFF0693FFFFFFFFFFFFFFFFFFFFFFFFFFFF0687
! 060A0607030A0309060F060DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06150612030C030B061C061A030D0618
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06890695FFFFFFFF069F061FFFFF0697FFFFFFFFFFFFFFFFFFFFFFFFFFFF068B
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF030FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  03130312031103100317031603150314031B031A03190318031F031E031D031CFFFFFFFFFFFFFFFFFFFFFFFFFFFF0320
--- 6936,6957 ----
  024FFFFF024EFFFF0251FFFF0250FFFF0253FFFF0252FFFF0255FFFF0254FFFF0257FFFF0256FFFF0259FFFF0258FFFF
  025BFFFF025AFFFF025DFFFF025CFFFF025FFFFF025EFFFF0261FFFF0260FFFF0263FFFF0262FFFF0265FFFF0264FFFF
  0267FFFF0266FFFF0269FFFF0268FFFF026BFFFF026AFFFF026DFFFF026CFFFF026FFFFF026EFFFF0271FFFF0270FFFF
! 0273FFFF0272FFFF0275FFFF0274FFFF0277FFFF0276FFFF0279FFFF0278FFFF027BFFFF027AFFFF060C060A027CFFFF
! 027D06120610060EFFFFFFFFFFFFFFFF027FFFFF027EFFFF0281FFFF0280FFFF0283FFFF0282FFFF0285FFFF0284FFFF
  0287FFFF0286FFFF0289FFFF0288FFFF028BFFFF028AFFFF028DFFFF028CFFFF028FFFFF028EFFFF0291FFFF0290FFFF
  0293FFFF0292FFFF0295FFFF0294FFFF0297FFFF0296FFFF0299FFFF0298FFFF029BFFFF029AFFFF029DFFFF029CFFFF
  029FFFFF029EFFFF02A1FFFF02A0FFFF02A3FFFF02A2FFFF02A5FFFF02A4FFFF02A7FFFF02A6FFFF02A9FFFF02A8FFFF
  02ABFFFF02AAFFFF02ADFFFF02ACFFFF02B102B002AF02AE02B502B402B302B2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  02B902B802B702B6FFFFFFFF02BB02BAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02BF02BE02BD02BC02C302C202C102C0
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02C702C602C502C402CB02CA02C902C8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 02CF02CE02CD02CCFFFFFFFF02D102D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02D3061602D2061402D5061C02D40619
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02D902D802D702D602DD02DC02DB02DAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 02E102E002DF02DE02E502E402E302E202E902E802E702E6FFFFFFFF02EB02EA06430641063F063D064B064906470645
! 06530651064F064D065B06590657065506630661065F065D066B06690667066506730671066F066D067B067906770675
! 06830681067F067D068B06890687068506930691068F068D069B069906970695069D06A90305030406B5061FFFFF06AB
! FFFFFFFFFFFFFFFFFFFF0307FFFF069F06A106ADFFFFFFFF06B80621FFFF06AFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06A3
! 06260623030A0309062B0629FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0631062E030C030B06380636030D0634
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06A506B1FFFFFFFF06BB063BFFFF06B3FFFFFFFFFFFFFFFFFFFFFFFFFFFF06A7
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF030FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  03130312031103100317031603150314031B031A03190318031F031E031D031CFFFFFFFFFFFFFFFFFFFFFFFFFFFF0320
*************** FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
*** 6892,6948 ****
  041FFFFF041EFFFF0421FFFF0420FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04220424FFFF0423FFFF0426FFFFFFFF0425
  0428FFFF0427FFFF042AFFFF0429FFFF042CFFFF042BFFFF042EFFFF042DFFFFFFFFFFFF042FFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFF0431FFFF0430FFFF0433FFFF0432FFFF0435FFFF0434FFFF0437FFFF0436FFFFFFFFFFFFFFFFFFFF
! FFFF0439FFFF0438FFFFFFFF043AFFFFFFFFFFFF043BFFFF043CFFFFFFFFFFFF043EFFFF043DFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF043FFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 0440FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04440443044204410448044704460445044C044B044A04490450044F044E044D
! 04540453045204510458045704560455045C045B045A04590460045F045E045D04640463046204610468046704660465
! 046C046B046A04690470046F046E046D04740473047204710478047704760475047C047B047A04790480047F047E047D
! 04840483048204810488048704860485048C048B048A04890490048F048E048D05CE05CC05CA05C8FFFF05D605D405D1
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05DAFFFFFFFFFFFF05E205E005DE05DCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF049304920491FFFF0497049604950494049B049A04990498049F049E049D049C
! 04A304A204A104A004A704A604A504A4FFFF04AA04A904A8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04AE04AD04AC04AB04B204B104B004AF
! 04B604B504B404B304BA04B904B804B704BE04BD04BC04BB04C204C104C004BF04C604C504C404C304CA04C904C804C7
! 04CE04CD04CC04CB04D204D104D004CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04D604D504D404D304DA04D904D804D704DE04DD04DC04DB04E204E104E004DF
! 04E604E504E404E304EA04E904E804E704EE04ED04EC04EB04F204F104F004EF04F604F504F404F3FFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04F7FFFFFFFFFFFF
! 04FB04FA04F904F804FF04FE04FD04FC0502FFFF050105000506050505040503050A050905080507050E050D050C050B
! 0511FFFF0510050F05150514051305120518FFFF05170516FFFFFFFFFFFF0519051D051C051B051A05210520051F051E
! 05250524052305220529052805270526052D052C052B052A05310530052F052E05350534053305320539053805370536
! 053D053C053B053A05410540053F053E05450544054305420549054805470546FFFF054C054B054AFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0550054F054E054D05540553055205510558055705560555055C055B055A0559
! 0560055F055E055DFFFFFFFF05620561FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0566056505640563056A056905680567
! 056E056D056C056B057205710570056F0576057505740573057A057905780577057E057D057C057B058205810580057F
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0586058505840583058A058905880587
! 058E058D058C058B059205910590058F0596059505940593059A059905980597059E059D059C059B05A205A105A0059F
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
- FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05A405A3FFFFFFFF05A805A705A605A505AC05AB05AA05A905B005AF05AE05AD
- 05B405B305B205B105B805B705B605B505BC05BB05BA05B905C005BF05BE05BD05C405C305C205C1FFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
  );
! //10240 bytes
  enum toLowerIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x"
  000000000000000000000000000000200000000000000140",
  x"
! 000000000000010000000000000004800000000000000F00",
  x"
  040203020202010007020202060202050202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
--- 6987,7049 ----
  041FFFFF041EFFFF0421FFFF0420FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04220424FFFF0423FFFF0426FFFFFFFF0425
  0428FFFF0427FFFF042AFFFF0429FFFF042CFFFF042BFFFF042EFFFF042DFFFFFFFFFFFF042FFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFF0431FFFF0430FFFF0433FFFF0432FFFF0435FFFF0434FFFF0437FFFF0436FFFFFFFFFFFFFFFFFFFF
! FFFF0439FFFF0438043BFFFF043AFFFF043DFFFF043CFFFF043FFFFF043EFFFF0441FFFF0440FFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0442FFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 0443FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0447044604450444044B044A04490448044F044E044D044C0453045204510450
! 0457045604550454045B045A04590458045F045E045D045C04630462046104600467046604650464046B046A04690468
! 046F046E046D046C04730472047104700477047604750474047B047A04790478047F047E047D047C0483048204810480
! 0487048604850484048B048A04890488048F048E048D048C049304920491049005EA05E805E605E4FFFF05F205F005ED
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05F6FFFFFFFFFFFF05FE05FC05FA05F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF049604950494FFFF049A049904980497049E049D049C049B04A204A104A0049F
! 04A604A504A404A304AA04A904A804A7FFFF04AD04AC04ABFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04B104B004AF04AE04B504B404B304B2
! 04B904B804B704B604BD04BC04BB04BA04C104C004BF04BE04C504C404C304C204C904C804C704C604CD04CC04CB04CA
! 04D104D004CF04CE04D504D404D304D2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04D904D804D704D604DD04DC04DB04DA04E104E004DF04DE04E504E404E304E2
! 04E904E804E704E604ED04EC04EB04EA04F104F004EF04EE04F504F404F304F204F904F804F704F6FFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04FAFFFFFFFFFFFF
! 04FE04FD04FC04FB05020501050004FF0505FFFF050405030509050805070506050D050C050B050A05110510050F050E
! 0514FFFF051305120518051705160515051BFFFF051A0519FFFFFFFFFFFF051C0520051F051E051D0524052305220521
! 0528052705260525052C052B052A05290530052F052E052D05340533053205310538053705360535053C053B053A0539
! 0540053F053E053D05440543054205410548054705460545054C054B054A0549FFFF054F054E054DFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05530552055105500557055605550554055B055A05590558055F055E055D055C
! 0563056205610560FFFFFFFF05650564FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0569056805670566056D056C056B056A
! 05710570056F056E05750574057305720579057805770576057D057C057B057A05810580057F057E0585058405830582
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0589058805870586058D058C058B058A
! 05910590058F058E05950594059305920599059805970596059D059C059B059A05A105A0059F059E05A505A405A305A2
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05A6FFFFFFFFFFFF05AA05A905A805A705AE05AD05AC05AB05B205B105B005AF
+ 05B605B505B405B305BA05B905B805B705BE05BD05BC05BBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05C005BFFFFFFFFF05C405C305C205C1
+ 05C805C705C605C505CC05CB05CA05C905D005CF05CE05CD05D405D305D205D105D805D705D605D505DC05DB05DA05D9
+ 05E005DF05DE05DDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
  );
! //10368 bytes
  enum toLowerIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x"
  000000000000000000000000000000200000000000000140",
  x"
! 000000000000010000000000000004800000000000000F40",
  x"
  040203020202010007020202060202050202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
*************** x"
*** 6983,6994 ****
  000000380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000000000000000000000000000000000000000000000003900000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 0000000000000000000000000000003A0000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- 7084,7095 ----
  000000380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 00000000000000000000000000000000000000000000000000000000000000000000003A003900000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 0000000000000000000000000000003B0000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
*************** FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
*** 7003,7021 ****
  000200010000FFFF0006000500040003000A000900080007000E000D000C000B001200110010000F0016001500140013
  FFFF001900180017FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF001D001C001B001A00210020001F001E
! 00250024002300220029002800270026002D002C002B002AFFFF0030002F002E003400330032003105B4003700360035
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0039FFFF0038FFFF003BFFFF003AFFFF003DFFFF003CFFFF003FFFFF003E
  FFFF0041FFFF0040FFFF0043FFFF0042FFFF0045FFFF0044FFFF0047FFFF0046FFFF0049FFFF0048FFFF004BFFFF004A
! FFFF004DFFFF004CFFFF004FFFFF004EFFFF0051FFFF05B5FFFF0053FFFF00520055FFFF0054FFFF0057FFFF0056FFFF
! 0059FFFF0058FFFF005BFFFF005AFFFFFFFF005C05C4FFFFFFFF005EFFFF005DFFFF0060FFFF005FFFFF0062FFFF0061
  FFFF0064FFFF0063FFFF0066FFFF0065FFFF0068FFFF0067FFFF006AFFFF0069FFFF006CFFFF006BFFFF006EFFFF006D
  FFFF0070FFFF006FFFFF0072FFFF00710075FFFF00740073FFFFFFFF0076FFFFFFFF00780077FFFF007B007AFFFF0079
  007E007D007CFFFF0080007FFFFFFFFF0083FFFF0082008100860085FFFF0084FFFFFFFFFFFF0087008AFFFF00890088
  FFFF008CFFFF008B008F008EFFFF008DFFFFFFFF0090FFFF00930092FFFF0091009600950094FFFF0098FFFF0097FFFF
  FFFFFFFFFFFF0099FFFFFFFFFFFF009AFFFFFFFFFFFFFFFF009DFFFF009C009B00A0009FFFFF009E00A2FFFF00A1FFFF
  00A4FFFF00A3FFFF00A6FFFF00A5FFFF00A8FFFF00A7FFFFFFFF00A9FFFFFFFFFFFF00ABFFFF00AAFFFF00ADFFFF00AC
! FFFF00AFFFFF00AEFFFF00B1FFFF00B0FFFF00B300B205C700B600B5FFFF00B4FFFF00B8FFFF00B7FFFF00BAFFFF00B9
  FFFF00BCFFFF00BBFFFF00BEFFFF00BDFFFF00C0FFFF00BFFFFF00C2FFFF00C1FFFF00C4FFFF00C3FFFF00C6FFFF00C5
  FFFF00C8FFFF00C7FFFF00CAFFFF00C9FFFF00CCFFFF00CBFFFF00CEFFFF00CDFFFF00D0FFFF00CFFFFF00D2FFFF00D1
  FFFF00D4FFFF00D3FFFFFFFFFFFFFFFF00D600D5FFFFFFFFFFFF00D800D7FFFF00DAFFFF00D9FFFFFFFF00DD00DC00DB
--- 7104,7122 ----
  000200010000FFFF0006000500040003000A000900080007000E000D000C000B001200110010000F0016001500140013
  FFFF001900180017FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF001D001C001B001A00210020001F001E
! 00250024002300220029002800270026002D002C002B002AFFFF0030002F002E003400330032003105D0003700360035
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0039FFFF0038FFFF003BFFFF003AFFFF003DFFFF003CFFFF003FFFFF003E
  FFFF0041FFFF0040FFFF0043FFFF0042FFFF0045FFFF0044FFFF0047FFFF0046FFFF0049FFFF0048FFFF004BFFFF004A
! FFFF004DFFFF004CFFFF004FFFFF004EFFFF0051FFFF05D1FFFF0053FFFF00520055FFFF0054FFFF0057FFFF0056FFFF
! 0059FFFF0058FFFF005BFFFF005AFFFFFFFF005C05E0FFFFFFFF005EFFFF005DFFFF0060FFFF005FFFFF0062FFFF0061
  FFFF0064FFFF0063FFFF0066FFFF0065FFFF0068FFFF0067FFFF006AFFFF0069FFFF006CFFFF006BFFFF006EFFFF006D
  FFFF0070FFFF006FFFFF0072FFFF00710075FFFF00740073FFFFFFFF0076FFFFFFFF00780077FFFF007B007AFFFF0079
  007E007D007CFFFF0080007FFFFFFFFF0083FFFF0082008100860085FFFF0084FFFFFFFFFFFF0087008AFFFF00890088
  FFFF008CFFFF008B008F008EFFFF008DFFFFFFFF0090FFFF00930092FFFF0091009600950094FFFF0098FFFF0097FFFF
  FFFFFFFFFFFF0099FFFFFFFFFFFF009AFFFFFFFFFFFFFFFF009DFFFF009C009B00A0009FFFFF009E00A2FFFF00A1FFFF
  00A4FFFF00A3FFFF00A6FFFF00A5FFFF00A8FFFF00A7FFFFFFFF00A9FFFFFFFFFFFF00ABFFFF00AAFFFF00ADFFFF00AC
! FFFF00AFFFFF00AEFFFF00B1FFFF00B0FFFF00B300B205E300B600B5FFFF00B4FFFF00B8FFFF00B7FFFF00BAFFFF00B9
  FFFF00BCFFFF00BBFFFF00BEFFFF00BDFFFF00C0FFFF00BFFFFF00C2FFFF00C1FFFF00C4FFFF00C3FFFF00C6FFFF00C5
  FFFF00C8FFFF00C7FFFF00CAFFFF00C9FFFF00CCFFFF00CBFFFF00CEFFFF00CDFFFF00D0FFFF00CFFFFF00D2FFFF00D1
  FFFF00D4FFFF00D3FFFFFFFFFFFFFFFF00D600D5FFFFFFFFFFFF00D800D7FFFF00DAFFFF00D9FFFFFFFF00DD00DC00DB
*************** FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
*** 7024,7032 ****
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00E3FFFF00E2FFFF00E4FFFFFFFFFFFFFFFFFFFFFFFF00E5FFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFF00E6FFFFFFFFFFFF00E900E800E700EC00EBFFFF00EA00EF00EE00ED05C500F300F200F100F0
  00F700F600F500F400FB00FA00F900F800FEFFFF00FD00FC01020101010000FF0106010501040103FFFFFFFFFFFFFFFF
! FFFFFFFFFFFF05C6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFF0107FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0109FFFF0108FFFF010BFFFF010A
  FFFF010DFFFF010CFFFF010FFFFF010EFFFF0111FFFF0110FFFF0113FFFF0112FFFFFFFFFFFFFFFF0115FFFFFFFF0114
  FFFF01170116FFFF011A01190118FFFF011E011D011C011B012201210120011F0126012501240123012A012901280127
--- 7125,7133 ----
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00E3FFFF00E2FFFF00E4FFFFFFFFFFFFFFFFFFFFFFFF00E5FFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFF00E6FFFFFFFFFFFF00E900E800E700EC00EBFFFF00EA00EF00EE00ED05E100F300F200F100F0
  00F700F600F500F400FB00FA00F900F800FEFFFF00FD00FC01020101010000FF0106010501040103FFFFFFFFFFFFFFFF
! FFFFFFFFFFFF05E2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFF0107FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0109FFFF0108FFFF010BFFFF010A
  FFFF010DFFFF010CFFFF010FFFFF010EFFFF0111FFFF0110FFFF0113FFFF0112FFFFFFFFFFFFFFFF0115FFFFFFFF0114
  FFFF01170116FFFF011A01190118FFFF011E011D011C011B012201210120011F0126012501240123012A012901280127
*************** FFFF01A4FFFF01A3FFFF01A6FFFF01A5FFFF01A8
*** 7045,7051 ****
  01B101B001AFFFFF01B501B401B301B201B901B801B701B601BD01BC01BB01BA01C101C001BF01BE01C501C401C301C2
  01C901C801C701C601CD01CC01CB01CA01D101D001CF01CEFFFF01D401D301D2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05BEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
--- 7146,7152 ----
  01B101B001AFFFFF01B501B401B301B201B901B801B701B601BD01BC01BB01BA01C101C001BF01BE01C501C401C301C2
  01C901C801C701C601CD01CC01CB01CA01D101D001CF01CEFFFF01D401D301D2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05DAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
*************** FFFF0297FFFF0296FFFF0299FFFF0298FFFF029B
*** 7067,7073 ****
  FFFF02A3FFFF02A2FFFF02A5FFFF02A4FFFF02A7FFFF02A6FFFF02A9FFFF02A8FFFF02ABFFFF02AAFFFF02ADFFFF02AC
  FFFF02AFFFFF02AEFFFF02B1FFFF02B0FFFF02B3FFFF02B2FFFF02B5FFFF02B4FFFF02B7FFFF02B6FFFF02B9FFFF02B8
  FFFF02BBFFFF02BAFFFF02BDFFFF02BCFFFF02BFFFFF02BEFFFF02C1FFFF02C0FFFF02C3FFFF02C2FFFF02C5FFFF02C4
! FFFF02C7FFFF02C6FFFF02C9FFFF02C8FFFF02CBFFFF02CA05C905C8FFFF02CCFFFF05CC05CB05CAFFFF02CDFFFFFFFF
  FFFF02CFFFFF02CEFFFF02D1FFFF02D0FFFF02D3FFFF02D2FFFF02D5FFFF02D4FFFF02D7FFFF02D6FFFF02D9FFFF02D8
  FFFF02DBFFFF02DAFFFF02DDFFFF02DCFFFF02DFFFFF02DEFFFF02E1FFFF02E0FFFF02E3FFFF02E2FFFF02E5FFFF02E4
  FFFF02E7FFFF02E6FFFF02E9FFFF02E8FFFF02EBFFFF02EAFFFF02EDFFFF02ECFFFF02EFFFFF02EEFFFF02F1FFFF02F0
--- 7168,7174 ----
  FFFF02A3FFFF02A2FFFF02A5FFFF02A4FFFF02A7FFFF02A6FFFF02A9FFFF02A8FFFF02ABFFFF02AAFFFF02ADFFFF02AC
  FFFF02AFFFFF02AEFFFF02B1FFFF02B0FFFF02B3FFFF02B2FFFF02B5FFFF02B4FFFF02B7FFFF02B6FFFF02B9FFFF02B8
  FFFF02BBFFFF02BAFFFF02BDFFFF02BCFFFF02BFFFFF02BEFFFF02C1FFFF02C0FFFF02C3FFFF02C2FFFF02C5FFFF02C4
! FFFF02C7FFFF02C6FFFF02C9FFFF02C8FFFF02CBFFFF02CA05E505E4FFFF02CCFFFF05E805E705E6FFFF02CDFFFFFFFF
  FFFF02CFFFFF02CEFFFF02D1FFFF02D0FFFF02D3FFFF02D2FFFF02D5FFFF02D4FFFF02D7FFFF02D6FFFF02D9FFFF02D8
  FFFF02DBFFFF02DAFFFF02DDFFFF02DCFFFF02DFFFFF02DEFFFF02E1FFFF02E0FFFF02E3FFFF02E2FFFF02E5FFFF02E4
  FFFF02E7FFFF02E6FFFF02E9FFFF02E8FFFF02EBFFFF02EAFFFF02EDFFFF02ECFFFF02EFFFFF02EEFFFF02F1FFFF02F0
*************** FFFF02F3FFFF02F2FFFF02F5FFFF02F4FFFF02F7
*** 7075,7088 ****
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0301030002FF02FE0305030403030302FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  0309030803070306FFFFFFFF030B030AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF030F030E030D030C0313031203110310
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0317031603150314031B031A03190318FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 031F031E031D031CFFFFFFFF03210320FFFF05CEFFFF05CDFFFF05D0FFFF05CF0323FFFF0322FFFF0325FFFF0324FFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0329032803270326032D032C032B032AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05E005DF05DE05DD05E405E305E205E105E805E705E605E505EC05EB05EA05E9
! 05F005EF05EE05ED05F405F305F205F105F805F705F605F505FC05FB05FA05F9060005FF05FE05FD0604060306020601
! 0608060706060605060C060B060A0609060D0613FFFFFFFF061905D1FFFF06140349034803470346FFFFFFFFFFFF060E
! 060F0615FFFFFFFF061A05D2FFFF0616034E034D034C034BFFFFFFFFFFFF061005D405D3FFFFFFFF05D605D5FFFFFFFF
! 0353035203510350FFFFFFFFFFFFFFFF05D805D7FFFFFFFF05DB05DAFFFF05D90357035603550354FFFFFFFFFFFF0358
! 06110617FFFFFFFF061B05DCFFFF0618035C035B035A0359FFFFFFFFFFFF0612FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFF035EFFFFFFFF0360035FFFFFFFFFFFFFFFFFFFFFFFFFFFFF0361FFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
--- 7176,7189 ----
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0301030002FF02FE0305030403030302FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  0309030803070306FFFFFFFF030B030AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF030F030E030D030C0313031203110310
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0317031603150314031B031A03190318FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 031F031E031D031CFFFFFFFF03210320FFFF05EAFFFF05E9FFFF05ECFFFF05EB0323FFFF0322FFFF0325FFFF0324FFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0329032803270326032D032C032B032AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05FC05FB05FA05F9060005FF05FE05FD06040603060206010608060706060605
! 060C060B060A06090610060F060E060D06140613061206110618061706160615061C061B061A06190620061F061E061D
! 062406230622062106280627062606250629062FFFFFFFFF063505EDFFFF06300349034803470346FFFFFFFFFFFF062A
! 062B0631FFFFFFFF063605EEFFFF0632034E034D034C034BFFFFFFFFFFFF062C05F005EFFFFFFFFF05F205F1FFFFFFFF
! 0353035203510350FFFFFFFFFFFFFFFF05F405F3FFFFFFFF05F705F6FFFF05F50357035603550354FFFFFFFFFFFF0358
! 062D0633FFFFFFFF063705F8FFFF0634035C035B035A0359FFFFFFFFFFFF062EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFF035EFFFFFFFF0360035FFFFFFFFFFFFFFFFFFFFFFFFFFFFF0361FFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
*************** FFFF0445FFFF0444FFFF0447FFFF0446FFFF0449
*** 7120,7169 ****
  044DFFFF044CFFFFFFFF044F044EFFFFFFFF0451FFFF0450FFFF0453FFFF04520454FFFFFFFFFFFFFFFFFFFF0455FFFF
  FFFF0457FFFF0456FFFF0458FFFFFFFFFFFF045AFFFF0459FFFF045CFFFF045BFFFF045EFFFF045DFFFF0460FFFF045F
  04630462FFFF0461FFFF046604650464046A046904680467FFFF046CFFFF046BFFFF046EFFFF046DFFFF0470FFFF046F
! FFFF0472FFFF047104760475047404730478FFFF0477FFFFFFFFFFFFFFFF0479FFFFFFFFFFFF047AFFFF047BFFFFFFFF
! FFFF047DFFFF047CFFFFFFFFFFFF047EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFF047FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05BA05B905B805B7FFFF05BD05BC05BB
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05BFFFFFFFFFFFFF05C305C205C105C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF048204810480FFFF0486048504840483
! 048A048904880487048E048D048C048B049204910490048F0496049504940493FFFF049904980497FFFFFFFFFFFFFFFF
! 049D049C049B049A04A104A0049F049E04A504A404A304A204A904A804A704A604AD04AC04AB04AA04B104B004AF04AE
! 04B504B404B304B204B904B804B704B604BD04BC04BB04BA04C104C004BF04BEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04C504C404C304C204C904C804C704C6
! 04CD04CC04CB04CA04D104D004CF04CE04D504D404D304D204D904D804D704D604DD04DC04DB04DA04E104E004DF04DE
! 04E504E404E304E2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 04E904E804E704E604ED04EC04EB04EAFFFF04F004EF04EE04F404F304F204F104F804F704F604F504FC04FB04FA04F9
! FFFF04FF04FE04FD0503050205010500FFFF050605050504FFFFFFFF05080507FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF050C050B050A05090510050F050E050D05140513051205110518051705160515
! 051C051B051A05190520051F051E051D05240523052205210528052705260525052C052B052A05290530052F052E052D
! 05340533053205310538053705360535FFFF053B053A0539FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF053F053E053D053C0543054205410540
! 0547054605450544054B054A05490548054F054E054D054CFFFFFFFF05510550FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 05550554055305520559055805570556055D055C055B055A05610560055F055E05650564056305620569056805670566
! 056D056C056B056A05710570056F056E05750574057305720579057805770576057D057C057B057A05810580057F057E
! 05850584058305820589058805870586058D058C058B058A05910590058F058EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
- 05950594059305920599059805970596059D059C059B059A05A105A0059F059E05A505A405A305A205A905A805A705A6
- 05AD05AC05AB05AA05B105B005AF05AEFFFFFFFF05B305B2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
  );
! //10752 bytes
  enum toTitleIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x"
  000000000000000000000000000000200000000000000140",
  x"
! 000000000000010000000000000004800000000000001000",
  x"
  040203020202010007020202060202050202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
--- 7221,7272 ----
  044DFFFF044CFFFFFFFF044F044EFFFFFFFF0451FFFF0450FFFF0453FFFF04520454FFFFFFFFFFFFFFFFFFFF0455FFFF
  FFFF0457FFFF0456FFFF0458FFFFFFFFFFFF045AFFFF0459FFFF045CFFFF045BFFFF045EFFFF045DFFFF0460FFFF045F
  04630462FFFF0461FFFF046604650464046A046904680467FFFF046CFFFF046BFFFF046EFFFF046DFFFF0470FFFF046F
! FFFF0472FFFF047104760475047404730478FFFF0477FFFFFFFF047AFFFF0479FFFF047CFFFF047BFFFF047EFFFF047D
! FFFF0480FFFF047FFFFFFFFFFFFF0481FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFF0482FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05D605D505D405D3FFFF05D905D805D7
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05DBFFFFFFFFFFFF05DF05DE05DD05DCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF048504840483FFFF0489048804870486
! 048D048C048B048A04910490048F048E04950494049304920499049804970496FFFF049C049B049AFFFFFFFFFFFFFFFF
! 04A0049F049E049D04A404A304A204A104A804A704A604A504AC04AB04AA04A904B004AF04AE04AD04B404B304B204B1
! 04B804B704B604B504BC04BB04BA04B904C004BF04BE04BD04C404C304C204C1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04C804C704C604C504CC04CB04CA04C9
! 04D004CF04CE04CD04D404D304D204D104D804D704D604D504DC04DB04DA04D904E004DF04DE04DD04E404E304E204E1
! 04E804E704E604E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 04EC04EB04EA04E904F004EF04EE04EDFFFF04F304F204F104F704F604F504F404FB04FA04F904F804FF04FE04FD04FC
! FFFF0502050105000506050505040503FFFF050905080507FFFFFFFF050B050AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF050F050E050D050C05130512051105100517051605150514051B051A05190518
! 051F051E051D051C05230522052105200527052605250524052B052A05290528052F052E052D052C0533053205310530
! 0537053605350534053B053A05390538FFFF053E053D053CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF054205410540053F0546054505440543
! 054A054905480547054E054D054C054B055205510550054FFFFFFFFF05540553FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 0558055705560555055C055B055A05590560055F055E055D05640563056205610568056705660565056C056B056A0569
! 0570056F056E056D05740573057205710578057705760575057C057B057A05790580057F057E057D0584058305820581
! 0588058705860585058C058B058A05890590058F058E058D0594059305920591FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0598059705960595059C059B059A059905A0059F059E059D05A405A305A205A1
+ 05A805A705A605A505AC05AB05AA05A9FFFFFFFFFFFF05ADFFFFFFFFFFFFFFFF05B105B005AF05AE05B505B405B305B2
+ 05B905B805B705B605BD05BC05BB05BA05C105C005BF05BE05C505C405C305C205C905C805C705C605CD05CC05CB05CA
+ FFFFFFFF05CF05CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
  );
! //11008 bytes
  enum toTitleIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x"
  000000000000000000000000000000200000000000000140",
  x"
! 000000000000010000000000000004800000000000001080",
  x"
  040203020202010007020202060202050202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
*************** x"
*** 7204,7215 ****
  003B00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000000000000000000000000000000000000000000000003C00000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000003E003D0000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- 7307,7318 ----
  003B00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 0000000000000000000000000000000000000000000000000000000000000000003E003D003C00000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 0000000000000000000000000040003F0000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
*************** FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00020001
*** 7227,7245 ****
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF001AFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05C9FFFFFFFFFFFF001E001D001C001B002200210020001F
  0026002500240023002A002900280027002E002D002C002BFFFF00310030002F00350034003300320039003800370036
  003BFFFF003AFFFF003DFFFF003CFFFF003FFFFF003EFFFF0041FFFF0040FFFF0043FFFF0042FFFF0045FFFF0044FFFF
  0047FFFF0046FFFF0049FFFF0048FFFF004BFFFF004AFFFF004DFFFF004CFFFF004FFFFF004EFFFF0051FFFF0050FFFF
! 0053FFFF005205CB0055FFFF0054FFFFFFFF0056FFFFFFFFFFFF0058FFFF0057FFFF005AFFFF0059FFFF005CFFFF005B
! 005EFFFF05E8005D0060FFFF005FFFFF0062FFFF0061FFFF0064FFFF0063FFFF0066FFFF0065FFFF0068FFFF0067FFFF
  006AFFFF0069FFFF006CFFFF006BFFFF006EFFFF006DFFFF0070FFFF006FFFFF0072FFFF0071FFFF0074FFFF0073FFFF
  FFFF0075FFFFFFFF00780077FFFF0076007AFFFFFFFF0079FFFFFFFF007BFFFFFFFFFFFFFFFF007CFFFFFFFFFFFF007D
  FFFF007EFFFFFFFFFFFFFFFF007FFFFF008200810080FFFFFFFF0083FFFFFFFF0085FFFF0084FFFFFFFFFFFF0086FFFF
  FFFFFFFFFFFF0087FFFFFFFF0088FFFFFFFFFFFFFFFF0089FFFF008BFFFF008AFFFFFFFF008CFFFF008EFFFF008DFFFF
  FFFFFFFFFFFFFFFF009200910090008F0096009500940093FFFF0098FFFF0097FFFF009AFFFF0099FFFF009CFFFF009B
  FFFF009EFFFF009D00A1FFFF00A0009F00A3FFFF00A2FFFF00A5FFFF00A4FFFF00A7FFFF00A6FFFF00A9FFFF00A8FFFF
! 00AC00AB00AA05F0FFFFFFFF00ADFFFF00AFFFFF00AEFFFF00B1FFFF00B0FFFF00B3FFFF00B2FFFF00B5FFFF00B4FFFF
  00B7FFFF00B6FFFF00B9FFFF00B8FFFF00BBFFFF00BAFFFF00BDFFFF00BCFFFF00BFFFFF00BEFFFF00C1FFFF00C0FFFF
  00C2FFFFFFFFFFFF00C4FFFF00C3FFFF00C6FFFF00C5FFFF00C8FFFF00C7FFFF00CAFFFF00C9FFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFF00CCFFFFFFFF00CBFFFF00CEFFFF00CD00CFFFFFFFFFFFFF00D1FFFF00D0FFFF00D3FFFF00D2FFFF
--- 7330,7348 ----
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF001AFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05E5FFFFFFFFFFFF001E001D001C001B002200210020001F
  0026002500240023002A002900280027002E002D002C002BFFFF00310030002F00350034003300320039003800370036
  003BFFFF003AFFFF003DFFFF003CFFFF003FFFFF003EFFFF0041FFFF0040FFFF0043FFFF0042FFFF0045FFFF0044FFFF
  0047FFFF0046FFFF0049FFFF0048FFFF004BFFFF004AFFFF004DFFFF004CFFFF004FFFFF004EFFFF0051FFFF0050FFFF
! 0053FFFF005205E70055FFFF0054FFFFFFFF0056FFFFFFFFFFFF0058FFFF0057FFFF005AFFFF0059FFFF005CFFFF005B
! 005EFFFF0604005D0060FFFF005FFFFF0062FFFF0061FFFF0064FFFF0063FFFF0066FFFF0065FFFF0068FFFF0067FFFF
  006AFFFF0069FFFF006CFFFF006BFFFF006EFFFF006DFFFF0070FFFF006FFFFF0072FFFF0071FFFF0074FFFF0073FFFF
  FFFF0075FFFFFFFF00780077FFFF0076007AFFFFFFFF0079FFFFFFFF007BFFFFFFFFFFFFFFFF007CFFFFFFFFFFFF007D
  FFFF007EFFFFFFFFFFFFFFFF007FFFFF008200810080FFFFFFFF0083FFFFFFFF0085FFFF0084FFFFFFFFFFFF0086FFFF
  FFFFFFFFFFFF0087FFFFFFFF0088FFFFFFFFFFFFFFFF0089FFFF008BFFFF008AFFFFFFFF008CFFFF008EFFFF008DFFFF
  FFFFFFFFFFFFFFFF009200910090008F0096009500940093FFFF0098FFFF0097FFFF009AFFFF0099FFFF009CFFFF009B
  FFFF009EFFFF009D00A1FFFF00A0009F00A3FFFF00A2FFFF00A5FFFF00A4FFFF00A7FFFF00A6FFFF00A9FFFF00A8FFFF
! 00AC00AB00AA060CFFFFFFFF00ADFFFF00AFFFFF00AEFFFF00B1FFFF00B0FFFF00B3FFFF00B2FFFF00B5FFFF00B4FFFF
  00B7FFFF00B6FFFF00B9FFFF00B8FFFF00BBFFFF00BAFFFF00BDFFFF00BCFFFF00BFFFFF00BEFFFF00C1FFFF00C0FFFF
  00C2FFFFFFFFFFFF00C4FFFF00C3FFFF00C6FFFF00C5FFFF00C8FFFF00C7FFFF00CAFFFF00C9FFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFF00CCFFFFFFFF00CBFFFF00CEFFFF00CD00CFFFFFFFFFFFFF00D1FFFF00D0FFFF00D3FFFF00D2FFFF
*************** FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
*** 7251,7258 ****
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FCFFFF00FBFFFF00FDFFFFFFFFFFFF
  00FEFFFFFFFFFFFFFFFFFFFF010000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFF05EAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFF010401030102010101070106010505ED010B010A01090108010F010E010D010C0113011201110110
  0117011601150114011B011A01190118011F011E011D011CFFFF012201210120FFFFFFFF01240123012701260125FFFF
  0129FFFF0128FFFF012BFFFF012AFFFF012DFFFF012CFFFF012FFFFF012EFFFF0131FFFF0130FFFF0133FFFF0132FFFF
  0137013601350134FFFFFFFF0138FFFF013AFFFFFFFF0139FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
--- 7354,7361 ----
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FCFFFF00FBFFFF00FDFFFFFFFFFFFF
  00FEFFFFFFFFFFFFFFFFFFFF010000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFF0606FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFF01040103010201010107010601050609010B010A01090108010F010E010D010C0113011201110110
  0117011601150114011B011A01190118011F011E011D011CFFFF012201210120FFFFFFFF01240123012701260125FFFF
  0129FFFF0128FFFF012BFFFF012AFFFF012DFFFF012CFFFF012FFFFF012EFFFF0131FFFF0130FFFF0133FFFF0132FFFF
  0137013601350134FFFFFFFF0138FFFF013AFFFFFFFF0139FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
*************** FFFF019BFFFF019A019E019DFFFF019C01A0FFFF
*** 7271,7277 ****
  01CCFFFF01CBFFFF01CEFFFF01CDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01D101D001CFFFFF01D501D401D301D201D901D801D701D601DD01DC01DB01DA
! 01E101E001DF01DE01E501E401E301E201E901E801E701E601ED01EC01EB01EA01F101F001EF01EE05DC01F401F301F2
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
--- 7374,7380 ----
  01CCFFFF01CBFFFF01CEFFFF01CDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01D101D001CFFFFF01D501D401D301D201D901D801D701D601DD01DC01DB01DA
! 01E101E001DF01DE01E501E401E301E201E901E801E701E601ED01EC01EB01EA01F101F001EF01EE05F801F401F301F2
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
*************** FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
*** 7293,7314 ****
  0253FFFF0252FFFF0255FFFF0254FFFF0257FFFF0256FFFF0259FFFF0258FFFF025BFFFF025AFFFF025DFFFF025CFFFF
  025FFFFF025EFFFF0261FFFF0260FFFF0263FFFF0262FFFF0265FFFF0264FFFF0267FFFF0266FFFF0269FFFF0268FFFF
  026BFFFF026AFFFF026DFFFF026CFFFF026FFFFF026EFFFF0271FFFF0270FFFF0273FFFF0272FFFF0275FFFF0274FFFF
! 0277FFFF0276FFFF0279FFFF0278FFFF027BFFFF027AFFFF027DFFFF027CFFFF027FFFFF027EFFFF05F405F20280FFFF
! 028105FA05F805F6FFFFFFFFFFFFFFFF0283FFFF0282FFFF0285FFFF0284FFFF0287FFFF0286FFFF0289FFFF0288FFFF
  028BFFFF028AFFFF028DFFFF028CFFFF028FFFFF028EFFFF0291FFFF0290FFFF0293FFFF0292FFFF0295FFFF0294FFFF
  0297FFFF0296FFFF0299FFFF0298FFFF029BFFFF029AFFFF029DFFFF029CFFFF029FFFFF029EFFFF02A1FFFF02A0FFFF
  02A3FFFF02A2FFFF02A5FFFF02A4FFFF02A7FFFF02A6FFFF02A9FFFF02A8FFFF02ABFFFF02AAFFFF02ADFFFF02ACFFFF
  02AFFFFF02AEFFFF02B1FFFF02B0FFFF02B502B402B302B202B902B802B702B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  02BD02BC02BB02BAFFFFFFFF02BF02BEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02C302C202C102C002C702C602C502C4
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02CB02CA02C902C802CF02CE02CD02CCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 02D302D202D102D0FFFFFFFF02D502D4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02D705FE02D605FC02D9060402D80601
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02DD02DC02DB02DA02E102E002DF02DEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 02E502E402E302E202E902E802E702E602ED02EC02EB02EAFFFFFFFF02EF02EE0628062706260625062C062B062A0629
! 0630062F062E062D06340633063206310638063706360635063C063B063A06390640063F063E063D0644064306420641
! 0648064706460645064C064B064A06490650064F064E064D06540653065206510655065B0309030806670607FFFF065D
! FFFFFFFFFFFFFFFFFFFF030BFFFF06560657065FFFFFFFFF066A0609FFFF0661FFFFFFFFFFFFFFFFFFFFFFFFFFFF0658
! 060E060B030E030D06130611FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF061906160310030F0620061E0311061C
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06590663FFFFFFFF066D0623FFFF0665FFFFFFFFFFFFFFFFFFFFFFFFFFFF065A
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  0317031603150314031B031A03190318031F031E031D031C0323032203210320FFFFFFFFFFFFFFFFFFFFFFFFFFFF0324
--- 7396,7417 ----
  0253FFFF0252FFFF0255FFFF0254FFFF0257FFFF0256FFFF0259FFFF0258FFFF025BFFFF025AFFFF025DFFFF025CFFFF
  025FFFFF025EFFFF0261FFFF0260FFFF0263FFFF0262FFFF0265FFFF0264FFFF0267FFFF0266FFFF0269FFFF0268FFFF
  026BFFFF026AFFFF026DFFFF026CFFFF026FFFFF026EFFFF0271FFFF0270FFFF0273FFFF0272FFFF0275FFFF0274FFFF
! 0277FFFF0276FFFF0279FFFF0278FFFF027BFFFF027AFFFF027DFFFF027CFFFF027FFFFF027EFFFF0610060E0280FFFF
! 0281061606140612FFFFFFFFFFFFFFFF0283FFFF0282FFFF0285FFFF0284FFFF0287FFFF0286FFFF0289FFFF0288FFFF
  028BFFFF028AFFFF028DFFFF028CFFFF028FFFFF028EFFFF0291FFFF0290FFFF0293FFFF0292FFFF0295FFFF0294FFFF
  0297FFFF0296FFFF0299FFFF0298FFFF029BFFFF029AFFFF029DFFFF029CFFFF029FFFFF029EFFFF02A1FFFF02A0FFFF
  02A3FFFF02A2FFFF02A5FFFF02A4FFFF02A7FFFF02A6FFFF02A9FFFF02A8FFFF02ABFFFF02AAFFFF02ADFFFF02ACFFFF
  02AFFFFF02AEFFFF02B1FFFF02B0FFFF02B502B402B302B202B902B802B702B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  02BD02BC02BB02BAFFFFFFFF02BF02BEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02C302C202C102C002C702C602C502C4
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02CB02CA02C902C802CF02CE02CD02CCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 02D302D202D102D0FFFFFFFF02D502D4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02D7061A02D6061802D9062002D8061D
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02DD02DC02DB02DA02E102E002DF02DEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 02E502E402E302E202E902E802E702E602ED02EC02EB02EAFFFFFFFF02EF02EE06440643064206410648064706460645
! 064C064B064A06490650064F064E064D06540653065206510658065706560655065C065B065A06590660065F065E065D
! 06640663066206610668066706660665066C066B066A06690670066F066E066D067106770309030806830623FFFF0679
! FFFFFFFFFFFFFFFFFFFF030BFFFF06720673067BFFFFFFFF06860625FFFF067DFFFFFFFFFFFFFFFFFFFFFFFFFFFF0674
! 062A0627030E030D062F062DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF063506320310030F063C063A03110638
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0675067FFFFFFFFF0689063FFFFF0681FFFFFFFFFFFFFFFFFFFFFFFFFFFF0676
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  0317031603150314031B031A03190318031F031E031D031C0323032203210320FFFFFFFFFFFFFFFFFFFFFFFFFFFF0324
*************** FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
*** 7344,7400 ****
  0423FFFF0422FFFF0425FFFF0424FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04260428FFFF0427FFFF042AFFFFFFFF0429
  042CFFFF042BFFFF042EFFFF042DFFFF0430FFFF042FFFFF0432FFFF0431FFFFFFFFFFFF0433FFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFF0435FFFF0434FFFF0437FFFF0436FFFF0439FFFF0438FFFF043BFFFF043AFFFFFFFFFFFFFFFFFFFF
! FFFF043DFFFF043CFFFFFFFF043EFFFFFFFFFFFF043FFFFF0440FFFFFFFFFFFF0442FFFF0441FFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0443FFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 0444FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0448044704460445044C044B044A04490450044F044E044D0454045304520451
! 0458045704560455045C045B045A04590460045F045E045D04640463046204610468046704660465046C046B046A0469
! 0470046F046E046D04740473047204710478047704760475047C047B047A04790480047F047E047D0484048304820481
! 0488048704860485048C048B048A04890490048F048E048D049404930492049105D205D005CE05CCFFFF05DA05D805D5
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05DEFFFFFFFFFFFF05E605E405E205E0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF049704960495FFFF049B049A04990498049F049E049D049C04A304A204A104A0
! 04A704A604A504A404AB04AA04A904A8FFFF04AE04AD04ACFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04B204B104B004AF04B604B504B404B3
! 04BA04B904B804B704BE04BD04BC04BB04C204C104C004BF04C604C504C404C304CA04C904C804C704CE04CD04CC04CB
! 04D204D104D004CF04D604D504D404D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04DA04D904D804D704DE04DD04DC04DB04E204E104E004DF04E604E504E404E3
! 04EA04E904E804E704EE04ED04EC04EB04F204F104F004EF04F604F504F404F304FA04F904F804F7FFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04FBFFFFFFFFFFFF
! 04FF04FE04FD04FC05030502050105000506FFFF05050504050A050905080507050E050D050C050B051205110510050F
! 0515FFFF051405130519051805170516051CFFFF051B051AFFFFFFFFFFFF051D05210520051F051E0525052405230522
! 0529052805270526052D052C052B052A05310530052F052E05350534053305320539053805370536053D053C053B053A
! 05410540053F053E05450544054305420549054805470546054D054C054B054AFFFF0550054F054EFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05540553055205510558055705560555055C055B055A05590560055F055E055D
! 0564056305620561FFFFFFFF05660565FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF056A056905680567056E056D056C056B
! 057205710570056F0576057505740573057A057905780577057E057D057C057B058205810580057F0586058505840583
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF058A058905880587058E058D058C058B
! 059205910590058F0596059505940593059A059905980597059E059D059C059B05A205A105A0059F05A605A505A405A3
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
- FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05A805A7FFFFFFFF05AC05AB05AA05A905B005AF05AE05AD05B405B305B205B1
- 05B805B705B605B505BC05BB05BA05B905C005BF05BE05BD05C405C305C205C105C805C705C605C5FFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
  );
! //10624 bytes
  enum toUpperSimpleIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x"
  000000000000000000000000000000200000000000000140",
  x"
! 000000000000010000000000000004800000000000000FC0",
  x"
  040203020202010007020202060202050202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
--- 7447,7509 ----
  0423FFFF0422FFFF0425FFFF0424FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04260428FFFF0427FFFF042AFFFFFFFF0429
  042CFFFF042BFFFF042EFFFF042DFFFF0430FFFF042FFFFF0432FFFF0431FFFFFFFFFFFF0433FFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFF0435FFFF0434FFFF0437FFFF0436FFFF0439FFFF0438FFFF043BFFFF043AFFFFFFFFFFFFFFFFFFFF
! FFFF043DFFFF043C043FFFFF043EFFFF0441FFFF0440FFFF0443FFFF0442FFFF0445FFFF0444FFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0446FFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 0447FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF044B044A04490448044F044E044D044C04530452045104500457045604550454
! 045B045A04590458045F045E045D045C04630462046104600467046604650464046B046A04690468046F046E046D046C
! 04730472047104700477047604750474047B047A04790478047F047E047D047C04830482048104800487048604850484
! 048B048A04890488048F048E048D048C0493049204910490049704960495049405EE05EC05EA05E8FFFF05F605F405F1
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05FAFFFFFFFFFFFF0602060005FE05FCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF049A04990498FFFF049E049D049C049B04A204A104A0049F04A604A504A404A3
! 04AA04A904A804A704AE04AD04AC04ABFFFF04B104B004AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04B504B404B304B204B904B804B704B6
! 04BD04BC04BB04BA04C104C004BF04BE04C504C404C304C204C904C804C704C604CD04CC04CB04CA04D104D004CF04CE
! 04D504D404D304D204D904D804D704D6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04DD04DC04DB04DA04E104E004DF04DE04E504E404E304E204E904E804E704E6
! 04ED04EC04EB04EA04F104F004EF04EE04F504F404F304F204F904F804F704F604FD04FC04FB04FAFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04FEFFFFFFFFFFFF
! 05020501050004FF05060505050405030509FFFF05080507050D050C050B050A05110510050F050E0515051405130512
! 0518FFFF05170516051C051B051A0519051FFFFF051E051DFFFFFFFFFFFF052005240523052205210528052705260525
! 052C052B052A05290530052F052E052D05340533053205310538053705360535053C053B053A05390540053F053E053D
! 05440543054205410548054705460545054C054B054A05490550054F054E054DFFFF055305520551FFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0557055605550554055B055A05590558055F055E055D055C0563056205610560
! 0567056605650564FFFFFFFF05690568FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF056D056C056B056A05710570056F056E
! 05750574057305720579057805770576057D057C057B057A05810580057F057E05850584058305820589058805870586
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF058D058C058B058A05910590058F058E
! 05950594059305920599059805970596059D059C059B059A05A105A0059F059E05A505A405A305A205A905A805A705A6
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05AAFFFFFFFFFFFF05AE05AD05AC05AB05B205B105B005AF05B605B505B405B3
+ 05BA05B905B805B705BE05BD05BC05BB05C205C105C005BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05C405C3FFFFFFFF05C805C705C605C5
+ 05CC05CB05CA05C905D005CF05CE05CD05D405D305D205D105D805D705D605D505DC05DB05DA05D905E005DF05DE05DD
+ 05E405E305E205E1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
  );
! //10880 bytes
  enum toUpperSimpleIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x"
  000000000000000000000000000000200000000000000140",
  x"
! 000000000000010000000000000004800000000000001040",
  x"
  040203020202010007020202060202050202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
*************** x"
*** 7435,7446 ****
  003A00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000000000000000000000000000000000000000000000003B00000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000003D003C0000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- 7544,7555 ----
  003A00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 0000000000000000000000000000000000000000000000000000000000000000003D003C003B00000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000003F003E0000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
*************** FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
*** 7575,7629 ****
  041FFFFF041EFFFF0421FFFF0420FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04220424FFFF0423FFFF0426FFFFFFFF0425
  0428FFFF0427FFFF042AFFFF0429FFFF042CFFFF042BFFFF042EFFFF042DFFFFFFFFFFFF042FFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFF0431FFFF0430FFFF0433FFFF0432FFFF0435FFFF0434FFFF0437FFFF0436FFFFFFFFFFFFFFFFFFFF
! FFFF0439FFFF0438FFFFFFFF043AFFFFFFFFFFFF043BFFFF043CFFFFFFFFFFFF043EFFFF043DFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF043FFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 0440FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04440443044204410448044704460445044C044B044A04490450044F044E044D
! 04540453045204510458045704560455045C045B045A04590460045F045E045D04640463046204610468046704660465
! 046C046B046A04690470046F046E046D04740473047204710478047704760475047C047B047A04790480047F047E047D
! 04840483048204810488048704860485048C048B048A04890490048F048E048D049304920491FFFF0497049604950494
! 049B049A04990498049F049E049D049C04A304A204A104A004A704A604A504A4FFFF04AA04A904A8FFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 04AE04AD04AC04AB04B204B104B004AF04B604B504B404B304BA04B904B804B704BE04BD04BC04BB04C204C104C004BF
! 04C604C504C404C304CA04C904C804C704CE04CD04CC04CB04D204D104D004CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04D604D504D404D304DA04D904D804D7
! 04DE04DD04DC04DB04E204E104E004DF04E604E504E404E304EA04E904E804E704EE04ED04EC04EB04F204F104F004EF
! 04F604F504F404F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFF04F7FFFFFFFFFFFF04FB04FA04F904F804FF04FE04FD04FC0502FFFF050105000506050505040503
! 050A050905080507050E050D050C050B0511FFFF0510050F05150514051305120518FFFF05170516FFFFFFFFFFFF0519
! 051D051C051B051A05210520051F051E05250524052305220529052805270526052D052C052B052A05310530052F052E
! 05350534053305320539053805370536053D053C053B053A05410540053F053E05450544054305420549054805470546
! FFFF054C054B054AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0550054F054E054D0554055305520551
! 0558055705560555055C055B055A05590560055F055E055DFFFFFFFF05620561FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 0566056505640563056A056905680567056E056D056C056B057205710570056F0576057505740573057A057905780577
! 057E057D057C057B058205810580057FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 0586058505840583058A058905880587058E058D058C058B059205910590058F0596059505940593059A059905980597
! 059E059D059C059B05A205A105A0059FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05A405A3FFFFFFFF05A805A705A605A5
! 05AC05AB05AA05A905B005AF05AE05AD05B405B305B205B105B805B705B605B505BC05BB05BA05B905C005BF05BE05BD
! 05C405C305C205C1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
  );
! //9984 bytes
  enum toLowerSimpleIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x"
  000000000000000000000000000000200000000000000140",
  x"
! 000000000000010000000000000004800000000000000E80",
  x"
  040203020202010007020202060202050202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
--- 7684,7743 ----
  041FFFFF041EFFFF0421FFFF0420FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04220424FFFF0423FFFF0426FFFFFFFF0425
  0428FFFF0427FFFF042AFFFF0429FFFF042CFFFF042BFFFF042EFFFF042DFFFFFFFFFFFF042FFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFF0431FFFF0430FFFF0433FFFF0432FFFF0435FFFF0434FFFF0437FFFF0436FFFFFFFFFFFFFFFFFFFF
! FFFF0439FFFF0438043BFFFF043AFFFF043DFFFF043CFFFF043FFFFF043EFFFF0441FFFF0440FFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0442FFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 0443FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0447044604450444044B044A04490448044F044E044D044C0453045204510450
! 0457045604550454045B045A04590458045F045E045D045C04630462046104600467046604650464046B046A04690468
! 046F046E046D046C04730472047104700477047604750474047B047A04790478047F047E047D047C0483048204810480
! 0487048604850484048B048A04890488048F048E048D048C0493049204910490049604950494FFFF049A049904980497
! 049E049D049C049B04A204A104A0049F04A604A504A404A304AA04A904A804A7FFFF04AD04AC04ABFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 04B104B004AF04AE04B504B404B304B204B904B804B704B604BD04BC04BB04BA04C104C004BF04BE04C504C404C304C2
! 04C904C804C704C604CD04CC04CB04CA04D104D004CF04CE04D504D404D304D2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04D904D804D704D604DD04DC04DB04DA
! 04E104E004DF04DE04E504E404E304E204E904E804E704E604ED04EC04EB04EA04F104F004EF04EE04F504F404F304F2
! 04F904F804F704F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFF04FAFFFFFFFFFFFF04FE04FD04FC04FB05020501050004FF0505FFFF050405030509050805070506
! 050D050C050B050A05110510050F050E0514FFFF051305120518051705160515051BFFFF051A0519FFFFFFFFFFFF051C
! 0520051F051E051D05240523052205210528052705260525052C052B052A05290530052F052E052D0534053305320531
! 0538053705360535053C053B053A05390540053F053E053D05440543054205410548054705460545054C054B054A0549
! FFFF054F054E054DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05530552055105500557055605550554
! 055B055A05590558055F055E055D055C0563056205610560FFFFFFFF05650564FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 0569056805670566056D056C056B056A05710570056F056E05750574057305720579057805770576057D057C057B057A
! 05810580057F057E0585058405830582FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 0589058805870586058D058C058B058A05910590058F058E05950594059305920599059805970596059D059C059B059A
! 05A105A0059F059E05A505A405A305A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05A6FFFFFFFFFFFF05AA05A905A805A7
+ 05AE05AD05AC05AB05B205B105B005AF05B605B505B405B305BA05B905B805B705BE05BD05BC05BBFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 05C005BFFFFFFFFF05C405C305C205C105C805C705C605C505CC05CB05CA05C905D005CF05CE05CD05D405D305D205D1
! 05D805D705D605D505DC05DB05DA05D905E005DF05DE05DDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
  );
! //10112 bytes
  enum toLowerSimpleIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x"
  000000000000000000000000000000200000000000000140",
  x"
! 000000000000010000000000000004800000000000000EC0",
  x"
  040203020202010007020202060202050202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
*************** x"
*** 7664,7675 ****
  000000360000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000000000000000000000000000000000000000000000003700000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000380000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- 7778,7789 ----
  000000360000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000000000000000000000000000000000000000000038003700000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000390000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
*************** FFFF0441FFFF0440FFFF0443FFFF0442FFFF0445
*** 7798,7844 ****
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF044DFFFF044CFFFFFFFF044F044EFFFFFFFF0451FFFF0450FFFF0453FFFF0452
  0454FFFFFFFFFFFFFFFFFFFF0455FFFFFFFF0457FFFF0456FFFF0458FFFFFFFFFFFF045AFFFF0459FFFF045CFFFF045B
  FFFF045EFFFF045DFFFF0460FFFF045F04630462FFFF0461FFFF046604650464046A046904680467FFFF046CFFFF046B
! FFFF046EFFFF046DFFFF0470FFFF046FFFFF0472FFFF047104760475047404730478FFFF0477FFFFFFFFFFFFFFFF0479
! FFFFFFFFFFFF047AFFFF047BFFFFFFFFFFFF047DFFFF047CFFFFFFFFFFFF047EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF047FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF048204810480FFFF0486048504840483048A048904880487048E048D048C048B
! 049204910490048F0496049504940493FFFF049904980497FFFFFFFFFFFFFFFF049D049C049B049A04A104A0049F049E
! 04A504A404A304A204A904A804A704A604AD04AC04AB04AA04B104B004AF04AE04B504B404B304B204B904B804B704B6
! 04BD04BC04BB04BA04C104C004BF04BEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04C504C404C304C204C904C804C704C604CD04CC04CB04CA04D104D004CF04CE
! 04D504D404D304D204D904D804D704D604DD04DC04DB04DA04E104E004DF04DE04E504E404E304E2FFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04E904E804E704E604ED04EC04EB04EA
! FFFF04F004EF04EE04F404F304F204F104F804F704F604F504FC04FB04FA04F9FFFF04FF04FE04FD0503050205010500
! FFFF050605050504FFFFFFFF05080507FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 050C050B050A05090510050F050E050D05140513051205110518051705160515051C051B051A05190520051F051E051D
! 05240523052205210528052705260525052C052B052A05290530052F052E052D05340533053205310538053705360535
! FFFF053B053A0539FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF053F053E053D053C05430542054105400547054605450544054B054A05490548
! 054F054E054D054CFFFFFFFF05510550FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05550554055305520559055805570556
! 055D055C055B055A05610560055F055E05650564056305620569056805670566056D056C056B056A05710570056F056E
! 05750574057305720579057805770576057D057C057B057A05810580057F057E05850584058305820589058805870586
! 058D058C058B058A05910590058F058EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05950594059305920599059805970596
! 059D059C059B059A05A105A0059F059E05A505A405A305A205A905A805A705A605AD05AC05AB05AA05B105B005AF05AE
! FFFFFFFF05B305B2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
  );
! //10624 bytes
  enum toTitleSimpleIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x"
  000000000000000000000000000000200000000000000140",
  x"
! 000000000000010000000000000004800000000000000FC0",
  x"
  040203020202010007020202060202050202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
--- 7912,7961 ----
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF044DFFFF044CFFFFFFFF044F044EFFFFFFFF0451FFFF0450FFFF0453FFFF0452
  0454FFFFFFFFFFFFFFFFFFFF0455FFFFFFFF0457FFFF0456FFFF0458FFFFFFFFFFFF045AFFFF0459FFFF045CFFFF045B
  FFFF045EFFFF045DFFFF0460FFFF045F04630462FFFF0461FFFF046604650464046A046904680467FFFF046CFFFF046B
! FFFF046EFFFF046DFFFF0470FFFF046FFFFF0472FFFF047104760475047404730478FFFF0477FFFFFFFF047AFFFF0479
! FFFF047CFFFF047BFFFF047EFFFF047DFFFF0480FFFF047FFFFFFFFFFFFF0481FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0482FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF048504840483FFFF0489048804870486048D048C048B048A04910490048F048E
! 04950494049304920499049804970496FFFF049C049B049AFFFFFFFFFFFFFFFF04A0049F049E049D04A404A304A204A1
! 04A804A704A604A504AC04AB04AA04A904B004AF04AE04AD04B404B304B204B104B804B704B604B504BC04BB04BA04B9
! 04C004BF04BE04BD04C404C304C204C1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04C804C704C604C504CC04CB04CA04C904D004CF04CE04CD04D404D304D204D1
! 04D804D704D604D504DC04DB04DA04D904E004DF04DE04DD04E404E304E204E104E804E704E604E5FFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04EC04EB04EA04E904F004EF04EE04ED
! FFFF04F304F204F104F704F604F504F404FB04FA04F904F804FF04FE04FD04FCFFFF0502050105000506050505040503
! FFFF050905080507FFFFFFFF050B050AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 050F050E050D050C05130512051105100517051605150514051B051A05190518051F051E051D051C0523052205210520
! 0527052605250524052B052A05290528052F052E052D052C05330532053105300537053605350534053B053A05390538
! FFFF053E053D053CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF054205410540053F0546054505440543054A054905480547054E054D054C054B
! 055205510550054FFFFFFFFF05540553FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0558055705560555055C055B055A0559
! 0560055F055E055D05640563056205610568056705660565056C056B056A05690570056F056E056D0574057305720571
! 0578057705760575057C057B057A05790580057F057E057D05840583058205810588058705860585058C058B058A0589
! 0590058F058E058D0594059305920591FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 0598059705960595059C059B059A059905A0059F059E059D05A405A305A205A105A805A705A605A505AC05AB05AA05A9
! FFFFFFFFFFFF05ADFFFFFFFFFFFFFFFF05B105B005AF05AE05B505B405B305B205B905B805B705B605BD05BC05BB05BA
! 05C105C005BF05BE05C505C405C305C205C905C805C705C605CD05CC05CB05CAFFFFFFFF05CF05CEFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
  );
! //10880 bytes
  enum toTitleSimpleIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x"
  000000000000000000000000000000200000000000000140",
  x"
! 000000000000010000000000000004800000000000001040",
  x"
  040203020202010007020202060202050202020202020202020202020202020202020202020202020202020202020202
  020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202
*************** x"
*** 7879,7890 ****
  003A00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000000000000000000000000000000000000000000000000000003B00000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000003D003C0000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--- 7996,8007 ----
  003A00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 0000000000000000000000000000000000000000000000000000000000000000003D003C003B00000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
! 000000000000000000000000003F003E0000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
*************** FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
*** 8019,8067 ****
  0423FFFF0422FFFF0425FFFF0424FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04260428FFFF0427FFFF042AFFFFFFFF0429
  042CFFFF042BFFFF042EFFFF042DFFFF0430FFFF042FFFFF0432FFFF0431FFFFFFFFFFFF0433FFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFF0435FFFF0434FFFF0437FFFF0436FFFF0439FFFF0438FFFF043BFFFF043AFFFFFFFFFFFFFFFFFFFF
! FFFF043DFFFF043CFFFFFFFF043EFFFFFFFFFFFF043FFFFF0440FFFFFFFFFFFF0442FFFF0441FFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0443FFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 0444FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0448044704460445044C044B044A04490450044F044E044D0454045304520451
! 0458045704560455045C045B045A04590460045F045E045D04640463046204610468046704660465046C046B046A0469
! 0470046F046E046D04740473047204710478047704760475047C047B047A04790480047F047E047D0484048304820481
! 0488048704860485048C048B048A04890490048F048E048D0494049304920491049704960495FFFF049B049A04990498
! 049F049E049D049C04A304A204A104A004A704A604A504A404AB04AA04A904A8FFFF04AE04AD04ACFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 04B204B104B004AF04B604B504B404B304BA04B904B804B704BE04BD04BC04BB04C204C104C004BF04C604C504C404C3
! 04CA04C904C804C704CE04CD04CC04CB04D204D104D004CF04D604D504D404D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04DA04D904D804D704DE04DD04DC04DB
! 04E204E104E004DF04E604E504E404E304EA04E904E804E704EE04ED04EC04EB04F204F104F004EF04F604F504F404F3
! 04FA04F904F804F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFF04FBFFFFFFFFFFFF04FF04FE04FD04FC05030502050105000506FFFF05050504050A050905080507
! 050E050D050C050B051205110510050F0515FFFF051405130519051805170516051CFFFF051B051AFFFFFFFFFFFF051D
! 05210520051F051E05250524052305220529052805270526052D052C052B052A05310530052F052E0535053405330532
! 0539053805370536053D053C053B053A05410540053F053E05450544054305420549054805470546054D054C054B054A
! FFFF0550054F054EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05540553055205510558055705560555
! 055C055B055A05590560055F055E055D0564056305620561FFFFFFFF05660565FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 056A056905680567056E056D056C056B057205710570056F0576057505740573057A057905780577057E057D057C057B
! 058205810580057F0586058505840583FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 058A058905880587058E058D058C058B059205910590058F0596059505940593059A059905980597059E059D059C059B
! 05A205A105A0059F05A605A505A405A3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05A805A7FFFFFFFF05AC05AB05AA05A9
! 05B005AF05AE05AD05B405B305B205B105B805B705B605B505BC05BB05BA05B905C005BF05BE05BD05C405C305C205C1
! 05C805C705C605C5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
  );
  immutable(uint)[] toUpperTable() nothrow @nogc pure @safe {
  static immutable uint[] t =
--- 8136,8189 ----
  0423FFFF0422FFFF0425FFFF0424FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04260428FFFF0427FFFF042AFFFFFFFF0429
  042CFFFF042BFFFF042EFFFF042DFFFF0430FFFF042FFFFF0432FFFF0431FFFFFFFFFFFF0433FFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFF0435FFFF0434FFFF0437FFFF0436FFFF0439FFFF0438FFFF043BFFFF043AFFFFFFFFFFFFFFFFFFFF
! FFFF043DFFFF043C043FFFFF043EFFFF0441FFFF0440FFFF0443FFFF0442FFFF0445FFFF0444FFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0446FFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 0447FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF044B044A04490448044F044E044D044C04530452045104500457045604550454
! 045B045A04590458045F045E045D045C04630462046104600467046604650464046B046A04690468046F046E046D046C
! 04730472047104700477047604750474047B047A04790478047F047E047D047C04830482048104800487048604850484
! 048B048A04890488048F048E048D048C04930492049104900497049604950494049A04990498FFFF049E049D049C049B
! 04A204A104A0049F04A604A504A404A304AA04A904A804A704AE04AD04AC04ABFFFF04B104B004AFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 04B504B404B304B204B904B804B704B604BD04BC04BB04BA04C104C004BF04BE04C504C404C304C204C904C804C704C6
! 04CD04CC04CB04CA04D104D004CF04CE04D504D404D304D204D904D804D704D6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04DD04DC04DB04DA04E104E004DF04DE
! 04E504E404E304E204E904E804E704E604ED04EC04EB04EA04F104F004EF04EE04F504F404F304F204F904F804F704F6
! 04FD04FC04FB04FAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFF04FEFFFFFFFFFFFF05020501050004FF05060505050405030509FFFF05080507050D050C050B050A
! 05110510050F050E05150514051305120518FFFF05170516051C051B051A0519051FFFFF051E051DFFFFFFFFFFFF0520
! 05240523052205210528052705260525052C052B052A05290530052F052E052D05340533053205310538053705360535
! 053C053B053A05390540053F053E053D05440543054205410548054705460545054C054B054A05490550054F054E054D
! FFFF055305520551FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0557055605550554055B055A05590558
! 055F055E055D055C05630562056105600567056605650564FFFFFFFF05690568FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 056D056C056B056A05710570056F056E05750574057305720579057805770576057D057C057B057A05810580057F057E
! 05850584058305820589058805870586FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 058D058C058B058A05910590058F058E05950594059305920599059805970596059D059C059B059A05A105A0059F059E
! 05A505A405A305A205A905A805A705A6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05AAFFFFFFFFFFFF05AE05AD05AC05AB
+ 05B205B105B005AF05B605B505B405B305BA05B905B805B705BE05BD05BC05BB05C205C105C005BFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! 05C405C3FFFFFFFF05C805C705C605C505CC05CB05CA05C905D005CF05CE05CD05D405D305D205D105D805D705D605D5
! 05DC05DB05DA05D905E005DF05DE05DD05E405E305E205E1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
  );
  immutable(uint)[] toUpperTable() nothrow @nogc pure @safe {
  static immutable uint[] t =
*************** x"
*** 8156,8213 ****
  0000A7620000A7640000A7660000A7680000A76A0000A76C0000A76E0000A7790000A77B0000A77E0000A7800000A782
  0000A7840000A7860000A78B0000A7900000A7920000A7C40000A7960000A7980000A79A0000A79C0000A79E0000A7A0
  0000A7A20000A7A40000A7A60000A7A80000A7B40000A7B60000A7B80000A7BA0000A7BC0000A7BE0000A7C00000A7C2
! 0000A7C70000A7C90000A7CC0000A7D00000A7D60000A7D80000A7DA0000A7F50000A7B3000013A0000013A1000013A2
! 000013A3000013A4000013A5000013A6000013A7000013A8000013A9000013AA000013AB000013AC000013AD000013AE
! 000013AF000013B0000013B1000013B2000013B3000013B4000013B5000013B6000013B7000013B8000013B9000013BA
! 000013BB000013BC000013BD000013BE000013BF000013C0000013C1000013C2000013C3000013C4000013C5000013C6
! 000013C7000013C8000013C9000013CA000013CB000013CC000013CD000013CE000013CF000013D0000013D1000013D2
! 000013D3000013D4000013D5000013D6000013D7000013D8000013D9000013DA000013DB000013DC000013DD000013DE
! 000013DF000013E0000013E1000013E2000013E3000013E4000013E5000013E6000013E7000013E8000013E9000013EA
! 000013EB000013EC000013ED000013EE000013EF0000FF210000FF220000FF230000FF240000FF250000FF260000FF27
! 0000FF280000FF290000FF2A0000FF2B0000FF2C0000FF2D0000FF2E0000FF2F0000FF300000FF310000FF320000FF33
! 0000FF340000FF350000FF360000FF370000FF380000FF390000FF3A0001040000010401000104020001040300010404
! 00010405000104060001040700010408000104090001040A0001040B0001040C0001040D0001040E0001040F00010410
! 0001041100010412000104130001041400010415000104160001041700010418000104190001041A0001041B0001041C
! 0001041D0001041E0001041F0001042000010421000104220001042300010424000104250001042600010427000104B0
! 000104B1000104B2000104B3000104B4000104B5000104B6000104B7000104B8000104B9000104BA000104BB000104BC
! 000104BD000104BE000104BF000104C0000104C1000104C2000104C3000104C4000104C5000104C6000104C7000104C8
! 000104C9000104CA000104CB000104CC000104CD000104CE000104CF000104D0000104D1000104D2000104D300010570
! 0001057100010572000105730001057400010575000105760001057700010578000105790001057A0001057C0001057D
! 0001057E0001057F00010580000105810001058200010583000105840001058500010586000105870001058800010589
! 0001058A0001058C0001058D0001058E0001058F000105900001059100010592000105940001059500010C8000010C81
! 00010C8200010C8300010C8400010C8500010C8600010C8700010C8800010C8900010C8A00010C8B00010C8C00010C8D
! 00010C8E00010C8F00010C9000010C9100010C9200010C9300010C9400010C9500010C9600010C9700010C9800010C99
! 00010C9A00010C9B00010C9C00010C9D00010C9E00010C9F00010CA000010CA100010CA200010CA300010CA400010CA5
! 00010CA600010CA700010CA800010CA900010CAA00010CAB00010CAC00010CAD00010CAE00010CAF00010CB000010CB1
! 00010CB200010D5000010D5100010D5200010D5300010D5400010D5500010D5600010D5700010D5800010D5900010D5A
! 00010D5B00010D5C00010D5D00010D5E00010D5F00010D6000010D6100010D6200010D6300010D6400010D65000118A0
! 000118A1000118A2000118A3000118A4000118A5000118A6000118A7000118A8000118A9000118AA000118AB000118AC
! 000118AD000118AE000118AF000118B0000118B1000118B2000118B3000118B4000118B5000118B6000118B7000118B8
! 000118B9000118BA000118BB000118BC000118BD000118BE000118BF00016E4000016E4100016E4200016E4300016E44
! 00016E4500016E4600016E4700016E4800016E4900016E4A00016E4B00016E4C00016E4D00016E4E00016E4F00016E50
! 00016E5100016E5200016E5300016E5400016E5500016E5600016E5700016E5800016E5900016E5A00016E5B00016E5C
! 00016E5D00016E5E00016E5F0001E9000001E9010001E9020001E9030001E9040001E9050001E9060001E9070001E908
! 0001E9090001E90A0001E90B0001E90C0001E90D0001E90E0001E90F0001E9100001E9110001E9120001E9130001E914
! 0001E9150001E9160001E9170001E9180001E9190001E91A0001E91B0001E91C0001E91D0001E91E0001E91F0001E920
! 0001E92102000053000000530000013002000046000000460200004600000049020000460000004C0300004600000046
! 0000004903000046000000460000004C0200005300000054020000530000005402000535000005520200054400000546
! 0200054400000535020005440000053B0200054E00000546020005440000053D020002BC0000004E0300039900000308
! 00000301030003A500000308000003010200004A0000030C02000048000003310200005400000308020000570000030A
! 020000590000030A02000041000002BE020003A500000313030003A50000031300000300030003A50000031300000301
! 030003A50000031300000342020003910000034202000397000003420300039900000308000003000300039900000308
! 000003010200039900000342030003990000030800000342030003A50000030800000300030003A50000030800000301
! 020003A100000313020003A500000342030003A50000030800000342020003A90000034202001F080000039902001F09
! 0000039902001F0A0000039902001F0B0000039902001F0C0000039902001F0D0000039902001F0E0000039902001F0F
! 0000039902001F080000039902001F090000039902001F0A0000039902001F0B0000039902001F0C0000039902001F0D
! 0000039902001F0E0000039902001F0F0000039902001F280000039902001F290000039902001F2A0000039902001F2B
! 0000039902001F2C0000039902001F2D0000039902001F2E0000039902001F2F0000039902001F280000039902001F29
  0000039902001F2A0000039902001F2B0000039902001F2C0000039902001F2D0000039902001F2E0000039902001F2F
! 0000039902001F680000039902001F690000039902001F6A0000039902001F6B0000039902001F6C0000039902001F6D
! 0000039902001F6E0000039902001F6F0000039902001F680000039902001F690000039902001F6A0000039902001F6B
! 0000039902001F6C0000039902001F6D0000039902001F6E0000039902001F6F00000399020003910000039902000391
! 0000039902000397000003990200039700000399020003A900000399020003A90000039902001FBA0000039902000386
! 0000039902001FCA00000399020003890000039902001FFA000003990200038F00000399030003910000034200000399
! 030003970000034200000399030003A90000034200000399";
  return t;
  }
  immutable(uint)[] toLowerTable() nothrow @nogc pure @safe {
--- 8278,8337 ----
  0000A7620000A7640000A7660000A7680000A76A0000A76C0000A76E0000A7790000A77B0000A77E0000A7800000A782
  0000A7840000A7860000A78B0000A7900000A7920000A7C40000A7960000A7980000A79A0000A79C0000A79E0000A7A0
  0000A7A20000A7A40000A7A60000A7A80000A7B40000A7B60000A7B80000A7BA0000A7BC0000A7BE0000A7C00000A7C2
! 0000A7C70000A7C90000A7CC0000A7CE0000A7D00000A7D20000A7D40000A7D60000A7D80000A7DA0000A7F50000A7B3
! 000013A0000013A1000013A2000013A3000013A4000013A5000013A6000013A7000013A8000013A9000013AA000013AB
! 000013AC000013AD000013AE000013AF000013B0000013B1000013B2000013B3000013B4000013B5000013B6000013B7
! 000013B8000013B9000013BA000013BB000013BC000013BD000013BE000013BF000013C0000013C1000013C2000013C3
! 000013C4000013C5000013C6000013C7000013C8000013C9000013CA000013CB000013CC000013CD000013CE000013CF
! 000013D0000013D1000013D2000013D3000013D4000013D5000013D6000013D7000013D8000013D9000013DA000013DB
! 000013DC000013DD000013DE000013DF000013E0000013E1000013E2000013E3000013E4000013E5000013E6000013E7
! 000013E8000013E9000013EA000013EB000013EC000013ED000013EE000013EF0000FF210000FF220000FF230000FF24
! 0000FF250000FF260000FF270000FF280000FF290000FF2A0000FF2B0000FF2C0000FF2D0000FF2E0000FF2F0000FF30
! 0000FF310000FF320000FF330000FF340000FF350000FF360000FF370000FF380000FF390000FF3A0001040000010401
! 00010402000104030001040400010405000104060001040700010408000104090001040A0001040B0001040C0001040D
! 0001040E0001040F00010410000104110001041200010413000104140001041500010416000104170001041800010419
! 0001041A0001041B0001041C0001041D0001041E0001041F000104200001042100010422000104230001042400010425
! 0001042600010427000104B0000104B1000104B2000104B3000104B4000104B5000104B6000104B7000104B8000104B9
! 000104BA000104BB000104BC000104BD000104BE000104BF000104C0000104C1000104C2000104C3000104C4000104C5
! 000104C6000104C7000104C8000104C9000104CA000104CB000104CC000104CD000104CE000104CF000104D0000104D1
! 000104D2000104D300010570000105710001057200010573000105740001057500010576000105770001057800010579
! 0001057A0001057C0001057D0001057E0001057F00010580000105810001058200010583000105840001058500010586
! 0001058700010588000105890001058A0001058C0001058D0001058E0001058F00010590000105910001059200010594
! 0001059500010C8000010C8100010C8200010C8300010C8400010C8500010C8600010C8700010C8800010C8900010C8A
! 00010C8B00010C8C00010C8D00010C8E00010C8F00010C9000010C9100010C9200010C9300010C9400010C9500010C96
! 00010C9700010C9800010C9900010C9A00010C9B00010C9C00010C9D00010C9E00010C9F00010CA000010CA100010CA2
! 00010CA300010CA400010CA500010CA600010CA700010CA800010CA900010CAA00010CAB00010CAC00010CAD00010CAE
! 00010CAF00010CB000010CB100010CB200010D5000010D5100010D5200010D5300010D5400010D5500010D5600010D57
! 00010D5800010D5900010D5A00010D5B00010D5C00010D5D00010D5E00010D5F00010D6000010D6100010D6200010D63
! 00010D6400010D65000118A0000118A1000118A2000118A3000118A4000118A5000118A6000118A7000118A8000118A9
! 000118AA000118AB000118AC000118AD000118AE000118AF000118B0000118B1000118B2000118B3000118B4000118B5
! 000118B6000118B7000118B8000118B9000118BA000118BB000118BC000118BD000118BE000118BF00016E4000016E41
! 00016E4200016E4300016E4400016E4500016E4600016E4700016E4800016E4900016E4A00016E4B00016E4C00016E4D
! 00016E4E00016E4F00016E5000016E5100016E5200016E5300016E5400016E5500016E5600016E5700016E5800016E59
! 00016E5A00016E5B00016E5C00016E5D00016E5E00016E5F00016EA000016EA100016EA200016EA300016EA400016EA5
! 00016EA600016EA700016EA800016EA900016EAA00016EAB00016EAC00016EAD00016EAE00016EAF00016EB000016EB1
! 00016EB200016EB300016EB400016EB500016EB600016EB700016EB80001E9000001E9010001E9020001E9030001E904
! 0001E9050001E9060001E9070001E9080001E9090001E90A0001E90B0001E90C0001E90D0001E90E0001E90F0001E910
! 0001E9110001E9120001E9130001E9140001E9150001E9160001E9170001E9180001E9190001E91A0001E91B0001E91C
! 0001E91D0001E91E0001E91F0001E9200001E92102000053000000530000013002000046000000460200004600000049
! 020000460000004C03000046000000460000004903000046000000460000004C02000053000000540200005300000054
! 020005350000055202000544000005460200054400000535020005440000053B0200054E00000546020005440000053D
! 020002BC0000004E030003990000030800000301030003A500000308000003010200004A0000030C0200004800000331
! 0200005400000308020000570000030A020000590000030A02000041000002BE020003A500000313030003A500000313
! 00000300030003A50000031300000301030003A500000313000003420200039100000342020003970000034203000399
! 00000308000003000300039900000308000003010200039900000342030003990000030800000342030003A500000308
! 00000300030003A50000030800000301020003A100000313020003A500000342030003A50000030800000342020003A9
! 0000034202001F080000039902001F090000039902001F0A0000039902001F0B0000039902001F0C0000039902001F0D
! 0000039902001F0E0000039902001F0F0000039902001F080000039902001F090000039902001F0A0000039902001F0B
! 0000039902001F0C0000039902001F0D0000039902001F0E0000039902001F0F0000039902001F280000039902001F29
  0000039902001F2A0000039902001F2B0000039902001F2C0000039902001F2D0000039902001F2E0000039902001F2F
! 0000039902001F280000039902001F290000039902001F2A0000039902001F2B0000039902001F2C0000039902001F2D
! 0000039902001F2E0000039902001F2F0000039902001F680000039902001F690000039902001F6A0000039902001F6B
! 0000039902001F6C0000039902001F6D0000039902001F6E0000039902001F6F0000039902001F680000039902001F69
! 0000039902001F6A0000039902001F6B0000039902001F6C0000039902001F6D0000039902001F6E0000039902001F6F
! 000003990200039100000399020003910000039902000397000003990200039700000399020003A900000399020003A9
! 0000039902001FBA00000399020003860000039902001FCA00000399020003890000039902001FFA000003990200038F
! 00000399030003910000034200000399030003970000034200000399030003A90000034200000399";
  return t;
  }
  immutable(uint)[] toLowerTable() nothrow @nogc pure @safe {
*************** x"
*** 8308,8349 ****
  0000A7810000A7830000A7850000A7870000A78C000002650000A7910000A7930000A7970000A7990000A79B0000A79D
  0000A79F0000A7A10000A7A30000A7A50000A7A70000A7A9000002660000025C000002610000026C0000026A0000029E
  000002870000029D0000AB530000A7B50000A7B70000A7B90000A7BB0000A7BD0000A7BF0000A7C10000A7C30000A794
! 0000028200001D8E0000A7C80000A7CA000002640000A7CD0000A7D10000A7D70000A7D90000A7DB0000019B0000A7F6
! 0000FF410000FF420000FF430000FF440000FF450000FF460000FF470000FF480000FF490000FF4A0000FF4B0000FF4C
! 0000FF4D0000FF4E0000FF4F0000FF500000FF510000FF520000FF530000FF540000FF550000FF560000FF570000FF58
! 0000FF590000FF5A00010428000104290001042A0001042B0001042C0001042D0001042E0001042F0001043000010431
! 00010432000104330001043400010435000104360001043700010438000104390001043A0001043B0001043C0001043D
! 0001043E0001043F00010440000104410001044200010443000104440001044500010446000104470001044800010449
! 0001044A0001044B0001044C0001044D0001044E0001044F000104D8000104D9000104DA000104DB000104DC000104DD
! 000104DE000104DF000104E0000104E1000104E2000104E3000104E4000104E5000104E6000104E7000104E8000104E9
! 000104EA000104EB000104EC000104ED000104EE000104EF000104F0000104F1000104F2000104F3000104F4000104F5
! 000104F6000104F7000104F8000104F9000104FA000104FB0001059700010598000105990001059A0001059B0001059C
! 0001059D0001059E0001059F000105A0000105A1000105A3000105A4000105A5000105A6000105A7000105A8000105A9
! 000105AA000105AB000105AC000105AD000105AE000105AF000105B0000105B1000105B3000105B4000105B5000105B6
! 000105B7000105B8000105B9000105BB000105BC00010CC000010CC100010CC200010CC300010CC400010CC500010CC6
! 00010CC700010CC800010CC900010CCA00010CCB00010CCC00010CCD00010CCE00010CCF00010CD000010CD100010CD2
! 00010CD300010CD400010CD500010CD600010CD700010CD800010CD900010CDA00010CDB00010CDC00010CDD00010CDE
! 00010CDF00010CE000010CE100010CE200010CE300010CE400010CE500010CE600010CE700010CE800010CE900010CEA
! 00010CEB00010CEC00010CED00010CEE00010CEF00010CF000010CF100010CF200010D7000010D7100010D7200010D73
! 00010D7400010D7500010D7600010D7700010D7800010D7900010D7A00010D7B00010D7C00010D7D00010D7E00010D7F
! 00010D8000010D8100010D8200010D8300010D8400010D85000118C0000118C1000118C2000118C3000118C4000118C5
! 000118C6000118C7000118C8000118C9000118CA000118CB000118CC000118CD000118CE000118CF000118D0000118D1
! 000118D2000118D3000118D4000118D5000118D6000118D7000118D8000118D9000118DA000118DB000118DC000118DD
! 000118DE000118DF00016E6000016E6100016E6200016E6300016E6400016E6500016E6600016E6700016E6800016E69
! 00016E6A00016E6B00016E6C00016E6D00016E6E00016E6F00016E7000016E7100016E7200016E7300016E7400016E75
! 00016E7600016E7700016E7800016E7900016E7A00016E7B00016E7C00016E7D00016E7E00016E7F0001E9220001E923
! 0001E9240001E9250001E9260001E9270001E9280001E9290001E92A0001E92B0001E92C0001E92D0001E92E0001E92F
! 0001E9300001E9310001E9320001E9330001E9340001E9350001E9360001E9370001E9380001E9390001E93A0001E93B
! 0001E93C0001E93D0001E93E0001E93F0001E9400001E9410001E9420001E943000000DF02000069000003070000FB00
! 0000FB010000FB020000FB030000FB040000FB050000FB06000005870000FB130000FB140000FB150000FB160000FB17
! 0000014900000390000003B0000001F000001E9600001E9700001E9800001E9900001E9A00001F5000001F5200001F54
! 00001F5600001FB600001FC600001FD200001FD300001FD600001FD700001FE200001FE300001FE400001FE600001FE7
! 00001FF600001F8000001F8100001F8200001F8300001F8400001F8500001F8600001F8700001F8000001F8100001F82
! 00001F8300001F8400001F8500001F8600001F8700001F9000001F9100001F9200001F9300001F9400001F9500001F96
! 00001F9700001F9000001F9100001F9200001F9300001F9400001F9500001F9600001F9700001FA000001FA100001FA2
! 00001FA300001FA400001FA500001FA600001FA700001FA000001FA100001FA200001FA300001FA400001FA500001FA6
! 00001FA700001FB300001FB300001FC300001FC300001FF300001FF300001FB200001FB400001FC200001FC400001FF2
! 00001FF400001FB700001FC700001FF7";
  return t;
  }
  immutable(uint)[] toTitleTable() nothrow @nogc pure @safe {
--- 8432,8475 ----
  0000A7810000A7830000A7850000A7870000A78C000002650000A7910000A7930000A7970000A7990000A79B0000A79D
  0000A79F0000A7A10000A7A30000A7A50000A7A70000A7A9000002660000025C000002610000026C0000026A0000029E
  000002870000029D0000AB530000A7B50000A7B70000A7B90000A7BB0000A7BD0000A7BF0000A7C10000A7C30000A794
! 0000028200001D8E0000A7C80000A7CA000002640000A7CD0000A7CF0000A7D10000A7D30000A7D50000A7D70000A7D9
! 0000A7DB0000019B0000A7F60000FF410000FF420000FF430000FF440000FF450000FF460000FF470000FF480000FF49
! 0000FF4A0000FF4B0000FF4C0000FF4D0000FF4E0000FF4F0000FF500000FF510000FF520000FF530000FF540000FF55
! 0000FF560000FF570000FF580000FF590000FF5A00010428000104290001042A0001042B0001042C0001042D0001042E
! 0001042F000104300001043100010432000104330001043400010435000104360001043700010438000104390001043A
! 0001043B0001043C0001043D0001043E0001043F00010440000104410001044200010443000104440001044500010446
! 0001044700010448000104490001044A0001044B0001044C0001044D0001044E0001044F000104D8000104D9000104DA
! 000104DB000104DC000104DD000104DE000104DF000104E0000104E1000104E2000104E3000104E4000104E5000104E6
! 000104E7000104E8000104E9000104EA000104EB000104EC000104ED000104EE000104EF000104F0000104F1000104F2
! 000104F3000104F4000104F5000104F6000104F7000104F8000104F9000104FA000104FB000105970001059800010599
! 0001059A0001059B0001059C0001059D0001059E0001059F000105A0000105A1000105A3000105A4000105A5000105A6
! 000105A7000105A8000105A9000105AA000105AB000105AC000105AD000105AE000105AF000105B0000105B1000105B3
! 000105B4000105B5000105B6000105B7000105B8000105B9000105BB000105BC00010CC000010CC100010CC200010CC3
! 00010CC400010CC500010CC600010CC700010CC800010CC900010CCA00010CCB00010CCC00010CCD00010CCE00010CCF
! 00010CD000010CD100010CD200010CD300010CD400010CD500010CD600010CD700010CD800010CD900010CDA00010CDB
! 00010CDC00010CDD00010CDE00010CDF00010CE000010CE100010CE200010CE300010CE400010CE500010CE600010CE7
! 00010CE800010CE900010CEA00010CEB00010CEC00010CED00010CEE00010CEF00010CF000010CF100010CF200010D70
! 00010D7100010D7200010D7300010D7400010D7500010D7600010D7700010D7800010D7900010D7A00010D7B00010D7C
! 00010D7D00010D7E00010D7F00010D8000010D8100010D8200010D8300010D8400010D85000118C0000118C1000118C2
! 000118C3000118C4000118C5000118C6000118C7000118C8000118C9000118CA000118CB000118CC000118CD000118CE
! 000118CF000118D0000118D1000118D2000118D3000118D4000118D5000118D6000118D7000118D8000118D9000118DA
! 000118DB000118DC000118DD000118DE000118DF00016E6000016E6100016E6200016E6300016E6400016E6500016E66
! 00016E6700016E6800016E6900016E6A00016E6B00016E6C00016E6D00016E6E00016E6F00016E7000016E7100016E72
! 00016E7300016E7400016E7500016E7600016E7700016E7800016E7900016E7A00016E7B00016E7C00016E7D00016E7E
! 00016E7F00016EBB00016EBC00016EBD00016EBE00016EBF00016EC000016EC100016EC200016EC300016EC400016EC5
! 00016EC600016EC700016EC800016EC900016ECA00016ECB00016ECC00016ECD00016ECE00016ECF00016ED000016ED1
! 00016ED200016ED30001E9220001E9230001E9240001E9250001E9260001E9270001E9280001E9290001E92A0001E92B
! 0001E92C0001E92D0001E92E0001E92F0001E9300001E9310001E9320001E9330001E9340001E9350001E9360001E937
! 0001E9380001E9390001E93A0001E93B0001E93C0001E93D0001E93E0001E93F0001E9400001E9410001E9420001E943
! 000000DF02000069000003070000FB000000FB010000FB020000FB030000FB040000FB050000FB06000005870000FB13
! 0000FB140000FB150000FB160000FB170000014900000390000003B0000001F000001E9600001E9700001E9800001E99
! 00001E9A00001F5000001F5200001F5400001F5600001FB600001FC600001FD200001FD300001FD600001FD700001FE2
! 00001FE300001FE400001FE600001FE700001FF600001F8000001F8100001F8200001F8300001F8400001F8500001F86
! 00001F8700001F8000001F8100001F8200001F8300001F8400001F8500001F8600001F8700001F9000001F9100001F92
! 00001F9300001F9400001F9500001F9600001F9700001F9000001F9100001F9200001F9300001F9400001F9500001F96
! 00001F9700001FA000001FA100001FA200001FA300001FA400001FA500001FA600001FA700001FA000001FA100001FA2
! 00001FA300001FA400001FA500001FA600001FA700001FB300001FB300001FC300001FC300001FF300001FF300001FB2
! 00001FB400001FC200001FC400001FF200001FF400001FB700001FC700001FF7";
  return t;
  }
  immutable(uint)[] toTitleTable() nothrow @nogc pure @safe {
*************** x"
*** 8439,8492 ****
  0000A75A0000A75C0000A75E0000A7600000A7620000A7640000A7660000A7680000A76A0000A76C0000A76E0000A779
  0000A77B0000A77E0000A7800000A7820000A7840000A7860000A78B0000A7900000A7920000A7C40000A7960000A798
  0000A79A0000A79C0000A79E0000A7A00000A7A20000A7A40000A7A60000A7A80000A7B40000A7B60000A7B80000A7BA
! 0000A7BC0000A7BE0000A7C00000A7C20000A7C70000A7C90000A7CC0000A7D00000A7D60000A7D80000A7DA0000A7F5
! 0000A7B3000013A0000013A1000013A2000013A3000013A4000013A5000013A6000013A7000013A8000013A9000013AA
! 000013AB000013AC000013AD000013AE000013AF000013B0000013B1000013B2000013B3000013B4000013B5000013B6
! 000013B7000013B8000013B9000013BA000013BB000013BC000013BD000013BE000013BF000013C0000013C1000013C2
! 000013C3000013C4000013C5000013C6000013C7000013C8000013C9000013CA000013CB000013CC000013CD000013CE
! 000013CF000013D0000013D1000013D2000013D3000013D4000013D5000013D6000013D7000013D8000013D9000013DA
! 000013DB000013DC000013DD000013DE000013DF000013E0000013E1000013E2000013E3000013E4000013E5000013E6
! 000013E7000013E8000013E9000013EA000013EB000013EC000013ED000013EE000013EF0000FF210000FF220000FF23
! 0000FF240000FF250000FF260000FF270000FF280000FF290000FF2A0000FF2B0000FF2C0000FF2D0000FF2E0000FF2F
! 0000FF300000FF310000FF320000FF330000FF340000FF350000FF360000FF370000FF380000FF390000FF3A00010400
! 0001040100010402000104030001040400010405000104060001040700010408000104090001040A0001040B0001040C
! 0001040D0001040E0001040F000104100001041100010412000104130001041400010415000104160001041700010418
! 000104190001041A0001041B0001041C0001041D0001041E0001041F0001042000010421000104220001042300010424
! 000104250001042600010427000104B0000104B1000104B2000104B3000104B4000104B5000104B6000104B7000104B8
! 000104B9000104BA000104BB000104BC000104BD000104BE000104BF000104C0000104C1000104C2000104C3000104C4
! 000104C5000104C6000104C7000104C8000104C9000104CA000104CB000104CC000104CD000104CE000104CF000104D0
! 000104D1000104D2000104D3000105700001057100010572000105730001057400010575000105760001057700010578
! 000105790001057A0001057C0001057D0001057E0001057F000105800001058100010582000105830001058400010585
! 000105860001058700010588000105890001058A0001058C0001058D0001058E0001058F000105900001059100010592
! 000105940001059500010C8000010C8100010C8200010C8300010C8400010C8500010C8600010C8700010C8800010C89
! 00010C8A00010C8B00010C8C00010C8D00010C8E00010C8F00010C9000010C9100010C9200010C9300010C9400010C95
! 00010C9600010C9700010C9800010C9900010C9A00010C9B00010C9C00010C9D00010C9E00010C9F00010CA000010CA1
! 00010CA200010CA300010CA400010CA500010CA600010CA700010CA800010CA900010CAA00010CAB00010CAC00010CAD
! 00010CAE00010CAF00010CB000010CB100010CB200010D5000010D5100010D5200010D5300010D5400010D5500010D56
! 00010D5700010D5800010D5900010D5A00010D5B00010D5C00010D5D00010D5E00010D5F00010D6000010D6100010D62
! 00010D6300010D6400010D65000118A0000118A1000118A2000118A3000118A4000118A5000118A6000118A7000118A8
! 000118A9000118AA000118AB000118AC000118AD000118AE000118AF000118B0000118B1000118B2000118B3000118B4
! 000118B5000118B6000118B7000118B8000118B9000118BA000118BB000118BC000118BD000118BE000118BF00016E40
! 00016E4100016E4200016E4300016E4400016E4500016E4600016E4700016E4800016E4900016E4A00016E4B00016E4C
! 00016E4D00016E4E00016E4F00016E5000016E5100016E5200016E5300016E5400016E5500016E5600016E5700016E58
! 00016E5900016E5A00016E5B00016E5C00016E5D00016E5E00016E5F0001E9000001E9010001E9020001E9030001E904
! 0001E9050001E9060001E9070001E9080001E9090001E90A0001E90B0001E90C0001E90D0001E90E0001E90F0001E910
! 0001E9110001E9120001E9130001E9140001E9150001E9160001E9170001E9180001E9190001E91A0001E91B0001E91C
! 0001E91D0001E91E0001E91F0001E9200001E92102000053000000730000013002000046000000660200004600000069
! 020000460000006C03000046000000660000006903000046000000660000006C02000053000000740200005300000074
! 020005350000058202000544000005760200054400000565020005440000056B0200054E00000576020005440000056D
! 020002BC0000004E030003990000030800000301030003A500000308000003010200004A0000030C0200004800000331
! 0200005400000308020000570000030A020000590000030A02000041000002BE020003A500000313030003A500000313
! 00000300030003A50000031300000301030003A500000313000003420200039100000342020003970000034203000399
! 00000308000003000300039900000308000003010200039900000342030003990000030800000342030003A500000308
! 00000300030003A50000030800000301020003A100000313020003A500000342030003A50000030800000342020003A9
! 0000034200001F8800001F8900001F8A00001F8B00001F8C00001F8D00001F8E00001F8F00001F8800001F8900001F8A
! 00001F8B00001F8C00001F8D00001F8E00001F8F00001F9800001F9900001F9A00001F9B00001F9C00001F9D00001F9E
! 00001F9F00001F9800001F9900001F9A00001F9B00001F9C00001F9D00001F9E00001F9F00001FA800001FA900001FAA
! 00001FAB00001FAC00001FAD00001FAE00001FAF00001FA800001FA900001FAA00001FAB00001FAC00001FAD00001FAE
! 00001FAF00001FBC00001FBC00001FCC00001FCC00001FFC00001FFC02001FBA00000345020003860000034502001FCA
! 00000345020003890000034502001FFA000003450200038F000003450300039100000342000003450300039700000342
! 00000345030003A90000034200000345";
  return t;
  }
  
--- 8565,8620 ----
  0000A75A0000A75C0000A75E0000A7600000A7620000A7640000A7660000A7680000A76A0000A76C0000A76E0000A779
  0000A77B0000A77E0000A7800000A7820000A7840000A7860000A78B0000A7900000A7920000A7C40000A7960000A798
  0000A79A0000A79C0000A79E0000A7A00000A7A20000A7A40000A7A60000A7A80000A7B40000A7B60000A7B80000A7BA
! 0000A7BC0000A7BE0000A7C00000A7C20000A7C70000A7C90000A7CC0000A7CE0000A7D00000A7D20000A7D40000A7D6
! 0000A7D80000A7DA0000A7F50000A7B3000013A0000013A1000013A2000013A3000013A4000013A5000013A6000013A7
! 000013A8000013A9000013AA000013AB000013AC000013AD000013AE000013AF000013B0000013B1000013B2000013B3
! 000013B4000013B5000013B6000013B7000013B8000013B9000013BA000013BB000013BC000013BD000013BE000013BF
! 000013C0000013C1000013C2000013C3000013C4000013C5000013C6000013C7000013C8000013C9000013CA000013CB
! 000013CC000013CD000013CE000013CF000013D0000013D1000013D2000013D3000013D4000013D5000013D6000013D7
! 000013D8000013D9000013DA000013DB000013DC000013DD000013DE000013DF000013E0000013E1000013E2000013E3
! 000013E4000013E5000013E6000013E7000013E8000013E9000013EA000013EB000013EC000013ED000013EE000013EF
! 0000FF210000FF220000FF230000FF240000FF250000FF260000FF270000FF280000FF290000FF2A0000FF2B0000FF2C
! 0000FF2D0000FF2E0000FF2F0000FF300000FF310000FF320000FF330000FF340000FF350000FF360000FF370000FF38
! 0000FF390000FF3A00010400000104010001040200010403000104040001040500010406000104070001040800010409
! 0001040A0001040B0001040C0001040D0001040E0001040F000104100001041100010412000104130001041400010415
! 000104160001041700010418000104190001041A0001041B0001041C0001041D0001041E0001041F0001042000010421
! 000104220001042300010424000104250001042600010427000104B0000104B1000104B2000104B3000104B4000104B5
! 000104B6000104B7000104B8000104B9000104BA000104BB000104BC000104BD000104BE000104BF000104C0000104C1
! 000104C2000104C3000104C4000104C5000104C6000104C7000104C8000104C9000104CA000104CB000104CC000104CD
! 000104CE000104CF000104D0000104D1000104D2000104D3000105700001057100010572000105730001057400010575
! 000105760001057700010578000105790001057A0001057C0001057D0001057E0001057F000105800001058100010582
! 000105830001058400010585000105860001058700010588000105890001058A0001058C0001058D0001058E0001058F
! 000105900001059100010592000105940001059500010C8000010C8100010C8200010C8300010C8400010C8500010C86
! 00010C8700010C8800010C8900010C8A00010C8B00010C8C00010C8D00010C8E00010C8F00010C9000010C9100010C92
! 00010C9300010C9400010C9500010C9600010C9700010C9800010C9900010C9A00010C9B00010C9C00010C9D00010C9E
! 00010C9F00010CA000010CA100010CA200010CA300010CA400010CA500010CA600010CA700010CA800010CA900010CAA
! 00010CAB00010CAC00010CAD00010CAE00010CAF00010CB000010CB100010CB200010D5000010D5100010D5200010D53
! 00010D5400010D5500010D5600010D5700010D5800010D5900010D5A00010D5B00010D5C00010D5D00010D5E00010D5F
! 00010D6000010D6100010D6200010D6300010D6400010D65000118A0000118A1000118A2000118A3000118A4000118A5
! 000118A6000118A7000118A8000118A9000118AA000118AB000118AC000118AD000118AE000118AF000118B0000118B1
! 000118B2000118B3000118B4000118B5000118B6000118B7000118B8000118B9000118BA000118BB000118BC000118BD
! 000118BE000118BF00016E4000016E4100016E4200016E4300016E4400016E4500016E4600016E4700016E4800016E49
! 00016E4A00016E4B00016E4C00016E4D00016E4E00016E4F00016E5000016E5100016E5200016E5300016E5400016E55
! 00016E5600016E5700016E5800016E5900016E5A00016E5B00016E5C00016E5D00016E5E00016E5F00016EA000016EA1
! 00016EA200016EA300016EA400016EA500016EA600016EA700016EA800016EA900016EAA00016EAB00016EAC00016EAD
! 00016EAE00016EAF00016EB000016EB100016EB200016EB300016EB400016EB500016EB600016EB700016EB80001E900
! 0001E9010001E9020001E9030001E9040001E9050001E9060001E9070001E9080001E9090001E90A0001E90B0001E90C
! 0001E90D0001E90E0001E90F0001E9100001E9110001E9120001E9130001E9140001E9150001E9160001E9170001E918
! 0001E9190001E91A0001E91B0001E91C0001E91D0001E91E0001E91F0001E9200001E921020000530000007300000130
! 02000046000000660200004600000069020000460000006C03000046000000660000006903000046000000660000006C
! 02000053000000740200005300000074020005350000058202000544000005760200054400000565020005440000056B
! 0200054E00000576020005440000056D020002BC0000004E030003990000030800000301030003A50000030800000301
! 0200004A0000030C02000048000003310200005400000308020000570000030A020000590000030A02000041000002BE
! 020003A500000313030003A50000031300000300030003A50000031300000301030003A5000003130000034202000391
! 000003420200039700000342030003990000030800000300030003990000030800000301020003990000034203000399
! 0000030800000342030003A50000030800000300030003A50000030800000301020003A100000313020003A500000342
! 030003A50000030800000342020003A90000034200001F8800001F8900001F8A00001F8B00001F8C00001F8D00001F8E
! 00001F8F00001F8800001F8900001F8A00001F8B00001F8C00001F8D00001F8E00001F8F00001F9800001F9900001F9A
! 00001F9B00001F9C00001F9D00001F9E00001F9F00001F9800001F9900001F9A00001F9B00001F9C00001F9D00001F9E
! 00001F9F00001FA800001FA900001FAA00001FAB00001FAC00001FAD00001FAE00001FAF00001FA800001FA900001FAA
! 00001FAB00001FAC00001FAD00001FAE00001FAF00001FBC00001FBC00001FCC00001FCC00001FFC00001FFC02001FBA
! 00000345020003860000034502001FCA00000345020003890000034502001FFA000003450200038F0000034503000391
! 0000034200000345030003970000034200000345030003A90000034200000345";
  return t;
  }
  
diff -Nrcpad gcc-16-20260201/libphobos/src/std/math/operations.d gcc-16-20260208/libphobos/src/std/math/operations.d
*** gcc-16-20260201/libphobos/src/std/math/operations.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/src/std/math/operations.d	Sun Feb  8 22:32:16 2026
*************** real NaN(ulong payload) @trusted pure no
*** 158,163 ****
--- 158,170 ----
   * For 80-bit or 128-bit reals, it is 0x3FFF_FFFF_FFFF_FFFF.
   */
  ulong getNaNPayload(real x) @trusted pure nothrow @nogc
+ in
+ {
+     // Precondition: Input must be NaN
+     import std.math.traits : isNaN;
+     assert(isNaN(x), "getNaNPayload called on a non-NaN value");
+ }
+ do
  {
      import std.math.traits : floatTraits, RealFormat;
  
diff -Nrcpad gcc-16-20260201/libphobos/src/std/mathspecial.d gcc-16-20260208/libphobos/src/std/mathspecial.d
*** gcc-16-20260201/libphobos/src/std/mathspecial.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/src/std/mathspecial.d	Sun Feb  8 22:32:16 2026
***************
*** 37,42 ****
--- 37,43 ----
   *      SUB = $1<sub>$2</sub>
   *      BIGSUM = $(BIG &Sigma; <sup>$2</sup><sub>$(SMALL $1)</sub>)
   *      CHOOSE = $(BIG &#40;) <sup>$(SMALL $1)</sup><sub>$(SMALL $2)</sub> $(BIG &#41;)
+  *      CEIL = &#8968;$1&#8969;
   *      PLUSMN = &plusmn;
   *      MNPLUS = &mnplus;
   *      INFIN = &infin;
***************
*** 44,53 ****
   *      MNPLUSINF = &mnplus;&infin;
   *      PI = &pi;
   *      LT = &lt;
   *      GT = &gt;
   *      SQRT = &radic;
   *      HALF = &frac12;
!  *
   *
   * Copyright: Based on the CEPHES math library, which is
   *            Copyright (C) 1994 Stephen L. Moshier (moshier@world.std.com).
--- 45,55 ----
   *      MNPLUSINF = &mnplus;&infin;
   *      PI = &pi;
   *      LT = &lt;
+  *      LE = &le;
   *      GT = &gt;
   *      SQRT = &radic;
   *      HALF = &frac12;
!  *      COMPLEX = &#8450;
   *
   * Copyright: Based on the CEPHES math library, which is
   *            Copyright (C) 1994 Stephen L. Moshier (moshier@world.std.com).
*************** real logGamma(real x)
*** 114,172 ****
  
  /** The sign of $(GAMMA)(x).
   *
!  * Returns -1 if $(GAMMA)(x) < 0,  +1 if $(GAMMA)(x) > 0,
!  * $(NAN) if sign is indeterminate.
   *
!  * Note that this function can be used in conjunction with logGamma(x) to
!  * evaluate gamma for very large values of x.
   */
! real sgnGamma(real x)
  {
!     import core.math : rndtol;
!     /* Author: Don Clugston. */
!     if (isNaN(x)) return x;
!     if (x > 0) return 1.0;
!     if (x < -1/real.epsilon)
!     {
!         // Large negatives lose all precision
!         return real.nan;
!     }
!     long n = rndtol(x);
!     if (x == n)
!     {
!         return x == 0 ?  copysign(1, x) : real.nan;
!     }
!     return n & 1 ? 1.0 : -1.0;
  }
  
  @safe unittest
  {
!     assert(sgnGamma(5.0) == 1.0);
!     assert(isNaN(sgnGamma(-3.0)));
!     assert(sgnGamma(-0.1) == -1.0);
!     assert(sgnGamma(-55.1) == 1.0);
!     assert(isNaN(sgnGamma(-real.infinity)));
!     assert(isIdentical(sgnGamma(NaN(0xABC)), NaN(0xABC)));
  }
  
! /** Beta function
   *
!  * The beta function is defined as
   *
!  * beta(x, y) = ($(GAMMA)(x) * $(GAMMA)(y)) / $(GAMMA)(x + y)
   */
! real beta(real x, real y)
  {
!     if ((x+y)> MAXGAMMA)
!     {
!         return exp(logGamma(x) + logGamma(y) - logGamma(x+y));
!     } else return gamma(x) * gamma(y) / gamma(x+y);
  }
  
  @safe unittest
  {
      assert(isIdentical(beta(NaN(0xABC), 4), NaN(0xABC)));
!     assert(isIdentical(beta(2, NaN(0xABC)), NaN(0xABC)));
  }
  
  /** Digamma function, $(PSI)(x)
--- 116,204 ----
  
  /** The sign of $(GAMMA)(x).
   *
!  * Params:
!  *   x = the argument of $(GAMMA)
   *
!  * Returns:
!  *   -1 if $(GAMMA)(x) < 0, +1 if $(GAMMA)(x) > 0, and $(NAN) if $(GAMMA)(x)
!  *   does not exist.
!  *
!  * Note:
!  *   This function can be used in conjunction with `logGamma` to evaluate
!  *   $(GAMMA)(x) when `gamma(x)` is too large to be represented as a `real`.
   */
! pragma(inline, true) real sgnGamma(real x)
  {
!     return std.internal.math.gammafunction.sgnGamma(x);
  }
  
+ ///
  @safe unittest
  {
!     assert(sgnGamma(10_000) == 1);
  }
  
! /** Beta function, B(x,y)
   *
!  * Mathematically, if x $(GT) 0 and y $(GT) 0 then
!  * B(x,y) = $(INTEGRATE 0, 1)$(POWER t, x-1)$(POWER (l-t), y-1)dt. Through analytic continuation, it
!  * is extended to $(COMPLEX)$(SUP 2) where it can be expressed in terms of $(GAMMA)(z).
   *
!  * B(x,y) = $(GAMMA)(x)$(GAMMA)(y) / $(GAMMA)(x+y).
!  *
!  * This implementation restricts x and y to the set of real numbers.
!  *
!  * Params:
!  *   x = the first argument of B
!  *   y = the second argument of B
!  *
!  * Returns:
!  *   It returns B(x,y) if it can be computed, otherwise $(NAN).
!  *
!  * $(TABLE_SV
!  *   $(TR $(TH x)                                   $(TH y)                $(TH beta(x, y))   )
!  *   $(TR $(TD $(NAN))                              $(TD y)                $(TD $(NAN))       )
!  *   $(TR $(TD -$(INFIN))                           $(TD y)                $(TD $(NAN))       )
!  *   $(TR $(TD integer $(LT) 0)                     $(TD y)                $(TD $(NAN))       )
!  *   $(TR $(TD noninteger and x+y even $(LE) 0)     $(TD noninteger)       $(TD -0)           )
!  *   $(TR $(TD noninteger and x+y odd $(LE) 0)      $(TD noninteger)       $(TD +0)           )
!  *   $(TR $(TD +0)                                  $(TD positive finite)  $(TD +$(INFIN))    )
!  *   $(TR $(TD +0)                                  $(TD +$(INFIN))        $(TD $(NAN))       )
!  *   $(TR $(TD $(GT) 0)                             $(TD +$(INFIN))        $(TD +0)           )
!  *   $(TR $(TD -0)                                  $(TD +0)               $(TD $(NAN))       )
!  *   $(TR $(TD -0)                                  $(TD $(GT) 0)          $(TD -$(INFIN))    )
!  *   $(TR $(TD noninteger $(LT) 0, $(CEIL x) odd)   $(TD +$(INFIN))        $(TD -$(INFIN))    )
!  *   $(TR $(TD noninteger $(LT) 0, $(CEIL x) even)  $(TD +$(INFIN))        $(TD +$(INFIN))    )
!  *   $(TR $(TD noninteger $(LT) 0)                  $(TD $(PLUSMN)0)       $(TD $(PLUSMNINF)) )
!  * )
!  *
!  * Since B(x,y) = B(y,x), if the table states that beta(x, y) is a special value, then beta(y, x) is
!  * one as well.
   */
! pragma(inline, true) real beta(real x, real y)
  {
!     return std.internal.math.gammafunction.beta(x, y);
  }
  
+ ///
  @safe unittest
  {
+     assert(beta(1, 2) == 0.5);
      assert(isIdentical(beta(NaN(0xABC), 4), NaN(0xABC)));
!     assert(beta(3, 4) == beta(4, 3));
!     assert(isNaN(beta(-real.infinity, +0.)));
!     assert(isNaN(beta(-1, 2)));
!     assert(beta(-0.5, 0.5) is -0.0L);
!     assert(beta(-1.5, 0.5) is +0.0L);
!     assert(beta(+0., +0.) == +real.infinity);
!     assert(isNaN(beta(+0., +real.infinity)));
!     assert(beta(1, +real.infinity) is +0.0L);
!     assert(isNaN(beta(-0., +0.)));
!     assert(beta(-0., nextUp(+0.0L)) == -real.infinity);
!     assert(beta(-0.5, +real.infinity) == -real.infinity);
!     assert(beta(nextDown(-1.0L), real.infinity) == real.infinity);
!     assert(beta(nextDown(-0.0L), +0.) == +real.infinity);
!     assert(beta(-0.5, -0.) == -real.infinity);
  }
  
  /** Digamma function, $(PSI)(x)
*************** real logmdigammaInverse(real x)
*** 232,263 ****
      return std.internal.math.gammafunction.logmdigammaInverse(x);
  }
  
! /** Incomplete beta integral
   *
!  * Returns regularized incomplete beta integral of the arguments, evaluated
!  * from zero to x. The regularized incomplete beta function is defined as
   *
!  * betaIncomplete(a, b, x) = $(GAMMA)(a + b) / ( $(GAMMA)(a) $(GAMMA)(b) ) *
!  * $(INTEGRATE 0, x) $(POWER t, a-1)$(POWER (1-t), b-1) dt
   *
!  * and is the same as the cumulative distribution function of the Beta
!  * distribution.
   *
!  * The domain of definition is 0 <= x <= 1.  In this
!  * implementation a and b are restricted to positive values.
!  * The integral from x to 1 may be obtained by the symmetry
!  * relation
   *
!  *    betaIncompleteCompl(a, b, x )  =  betaIncomplete( b, a, 1-x )
   *
!  * The integral is evaluated by a continued fraction expansion
!  * or, when b * x is small, by a power series.
   */
  real betaIncomplete(real a, real b, real x )
  {
      return std.internal.math.gammafunction.betaIncomplete(a, b, x);
  }
  
  /** Inverse of incomplete beta integral
   *
   * Given y, the function finds x such that
--- 264,388 ----
      return std.internal.math.gammafunction.logmdigammaInverse(x);
  }
  
! /** Regularized incomplete beta function $(SUB I, x)(a,b)
   *
!  * Mathematically, if a and b are positive real numbers, and 0 $(LE) x $(LE) 1, then
!  * $(SUB I, x)(a,b) = $(INTEGRATE 0, x)$(POWER t, a-1)$(POWER (1-t), b-1)dt/B(a,b) where B is the
!  * beta function. It is also the cumulative distribution function of the beta distribution.
   *
!  * `betaIncomplete(a, b, x)` evaluates $(SUB I, `x`)(`a`,`b`).
   *
!  * Params:
!  *   a = the first argument of B, must be positive
!  *   b = the second argument of B, must be positive
!  *   x = the fraction of integration completion from below, 0 $(LE) x $(LE) 1
   *
!  * Returns:
!  *   It returns $(SUB I, x)(a,b), an element of [0,1].
   *
!   * $(TABLE_SV
!  *   $(TR $(TH a)         $(TH b)         $(TH x)        $(TH betaIncomplete(a, b, x)) )
!  *   $(TR $(TD negative)  $(TD b)         $(TD x)        $(TD $(NAN))                  )
!  *   $(TR $(TD a)         $(TD negative)  $(TD x)        $(TD $(NAN))                  )
!  *   $(TR $(TD a)         $(TD b)         $(TD $(LT) 0)  $(TD $(NAN))                  )
!  *   $(TR $(TD a)         $(TD b)         $(TD $(GT) 1)  $(TD $(NAN))                  )
!  *   $(TR $(TD +0)        $(TD +0)        $(TD (0,1))    $(TD $(NAN))                  )
!  *   $(TR $(TD $(INFIN))  $(TD $(INFIN))  $(TD (0,1))    $(TD $(NAN))                  )
!  * )
   *
!  * If one or more of the input parameters are $(NAN), the one with the largest payload is returned.
!  * For equal payloads but with possibly different signs, the order of preference is x, a, b.
!  *
!  * Note:
!  *   The integral is evaluated by a continued fraction expansion or, when `b * x` is small, by a
!  *   power series.
!  *
!  * See_Also: $(LREF beta) $(LREF betaIncompleteCompl)
   */
  real betaIncomplete(real a, real b, real x )
+ in
+ {
+     if (!isNaN(a) && !isNaN(b) && !isNaN(x))
+     {
+         assert(signbit(a) == 0, "a must be positive");
+         assert(signbit(b) == 0, "b must be positive");
+         assert(x >= 0 && x <= 1, "x must be in [0,1]");
+     }
+ }
+ out(i; isNaN(i) || (i >=0 && i <= 1))
+ do
  {
      return std.internal.math.gammafunction.betaIncomplete(a, b, x);
  }
  
+ ///
+ @safe unittest
+ {
+     assert(betaIncomplete(1, 1, .5) == .5);
+     assert(betaIncomplete(+0., +0., 0) == 0);
+     assert(isNaN(betaIncomplete(+0., +0., .5)));
+     assert(isNaN(betaIncomplete(real.infinity, real.infinity, .5)));
+     assert(betaIncomplete(real.infinity, real.infinity, 1) == 1);
+     assert(betaIncomplete(NaN(0x1), 1, NaN(0x2)) is NaN(0x2));
+     assert(betaIncomplete(1, NaN(0x3), -NaN(0x3)) is -NaN(0x3));
+ }
+ 
+ /** Regularized incomplete beta function complement $(SUB I$(SUP C), x)(a,b)
+  *
+  * Mathematically, if a $(GT) 0, b $(GT) 0, and 0 $(LE) x $(LE) 1, then
+  * $(SUB I$(SUP C), x)(a,b) = $(INTEGRATE x, 1)$(POWER t, a-1)$(POWER (1-t), b-1)dt/B(a,b) where B
+  * is the beta function. It is also the complement of the cumulative distribution function of the
+  * beta distribution. It can be shown that $(SUB I$(SUP C), x)(a,b) = $(SUB I, 1-x)(b,a).
+  *
+  * `betaIncompleteCompl(a, b, x)` evaluates $(SUB I$(SUP C), `x`)(`a`,`b`).
+  *
+  * Params:
+  *   a = the first argument of B, must be positive
+  *   b = the second argument of B, must be positive
+  *   x = the fraction of integration completion from above, 0 $(LE) x $(LE) 1
+  *
+  * Returns:
+  *   It returns $(SUB I$(SUP C), x)(a,b), an element of [0,1].
+  *
+    * $(TABLE_SV
+  *   $(TR $(TH a)         $(TH b)         $(TH x)        $(TH betaIncompleteCompl(a, b, x)) )
+  *   $(TR $(TD negative)  $(TD b)         $(TD x)        $(TD $(NAN))                       )
+  *   $(TR $(TD a)         $(TD negative)  $(TD x)        $(TD $(NAN))                       )
+  *   $(TR $(TD a)         $(TD b)         $(TD $(LT) 0)  $(TD $(NAN))                       )
+  *   $(TR $(TD a)         $(TD b)         $(TD $(GT) 1)  $(TD $(NAN))                       )
+  *   $(TR $(TD +0)        $(TD +0)        $(TD (0,1))    $(TD $(NAN))                       )
+  *   $(TR $(TD $(INFIN))  $(TD $(INFIN))  $(TD (0,1))    $(TD $(NAN))                       )
+  * )
+  *
+  * If one or more of the input parameters are $(NAN), the one with the largest payload is returned.
+  * For equal payloads but with possibly different signs, the order of preference is x, a, b.
+  *
+  * See_Also: $(LREF beta) $(LREF betaIncomplete)
+  */
+ real betaIncompleteCompl(real a, real b, real x)
+ in
+ {
+     // allow NaN input to pass through so that it can be addressed by the
+     // internal NaN payload propagation logic
+     if (!isNaN(a) && !isNaN(b) && !isNaN(x))
+     {
+         assert(signbit(a) == 0, "a must be positive");
+         assert(signbit(b) == 0, "b must be positive");
+         assert(x >= 0 && x <= 1, "x must be in [0, 1]");
+     }
+ }
+ out(i; isNaN(i) || (i >=0 && i <= 1))
+ do
+ {
+     return std.internal.math.gammafunction.betaIncomplete(b, a, 1-x);
+ }
+ 
+ ///
+ @safe unittest
+ {
+     assert(betaIncompleteCompl(.1, .2, 0) == betaIncomplete(.2, .1, 1));
+ }
+ 
  /** Inverse of incomplete beta integral
   *
   * Given y, the function finds x such that
diff -Nrcpad gcc-16-20260201/libphobos/src/std/mmfile.d gcc-16-20260208/libphobos/src/std/mmfile.d
*** gcc-16-20260201/libphobos/src/std/mmfile.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/src/std/mmfile.d	Sun Feb  8 22:32:16 2026
*************** class MmFile
*** 422,427 ****
--- 422,428 ----
          version (Windows)
          {
              FlushViewOfFile(data.ptr, data.length);
+             FlushFileBuffers(hFile);
          }
          else version (Posix)
          {
diff -Nrcpad gcc-16-20260201/libphobos/src/std/process.d gcc-16-20260208/libphobos/src/std/process.d
*** gcc-16-20260201/libphobos/src/std/process.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/src/std/process.d	Sun Feb  8 22:32:16 2026
*************** private Pid spawnProcessPosix(scope cons
*** 1247,1254 ****
      else
      {
          closePipeWriteEnds();
          auto status = InternalError.noerror;
!         auto readExecResult = core.sys.posix.unistd.read(forkPipe[0], &status, status.sizeof);
          // Save error number just in case if subsequent "waitpid" fails and overrides errno
          immutable lastError = .errno;
  
--- 1247,1265 ----
      else
      {
          closePipeWriteEnds();
+ 
+         T retryInterrupted(T)(scope T delegate() syscall)
+         {
+             import core.stdc.errno : errno, EINTR;
+             T result;
+             do
+                 result = syscall();
+             while (result == -1 && .errno == EINTR);
+             return result;
+         }
+ 
          auto status = InternalError.noerror;
!         auto readExecResult = retryInterrupted(() => core.sys.posix.unistd.read(forkPipe[0], &status, status.sizeof));
          // Save error number just in case if subsequent "waitpid" fails and overrides errno
          immutable lastError = .errno;
  
*************** private Pid spawnProcessPosix(scope cons
*** 1257,1263 ****
              // Forked child exits right after creating second fork. So it should be safe to wait here.
              import core.sys.posix.sys.wait : waitpid;
              int waitResult;
!             waitpid(id, &waitResult, 0);
          }
  
          if (readExecResult == -1)
--- 1268,1274 ----
              // Forked child exits right after creating second fork. So it should be safe to wait here.
              import core.sys.posix.sys.wait : waitpid;
              int waitResult;
!             retryInterrupted(() => waitpid(id, &waitResult, 0));
          }
  
          if (readExecResult == -1)
*************** private Pid spawnProcessPosix(scope cons
*** 1267,1273 ****
          if (status != InternalError.noerror)
          {
              int error;
!             readExecResult = read(forkPipe[0], &error, error.sizeof);
              string errorMsg;
              final switch (status)
              {
--- 1278,1284 ----
          if (status != InternalError.noerror)
          {
              int error;
!             readExecResult = retryInterrupted(() => read(forkPipe[0], &error, error.sizeof));
              string errorMsg;
              final switch (status)
              {
diff -Nrcpad gcc-16-20260201/libphobos/src/std/random.d gcc-16-20260208/libphobos/src/std/random.d
*** gcc-16-20260201/libphobos/src/std/random.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/src/std/random.d	Sun Feb  8 22:32:16 2026
*************** version (StdUnittest)
*** 247,269 ****
   *   $(LI it has a 'bool isUniformRandom' field readable in CTFE)
   * )
   */
! template isUniformRNG(Rng, ElementType)
! {
!     enum bool isUniformRNG = .isUniformRNG!Rng &&
!         is(std.range.primitives.ElementType!Rng == ElementType);
! }
  
  /**
   * ditto
   */
! template isUniformRNG(Rng)
! {
!     enum bool isUniformRNG = isInputRange!Rng &&
!         is(typeof(
!         {
!             static assert(Rng.isUniformRandom); //tag
!         }));
! }
  
  ///
  @safe unittest
--- 247,263 ----
   *   $(LI it has a 'bool isUniformRandom' field readable in CTFE)
   * )
   */
! enum isUniformRNG(Rng, ElementType) = .isUniformRNG!Rng &&
! 	is(std.range.primitives.ElementType!Rng == ElementType);
  
  /**
   * ditto
   */
! enum isUniformRNG(Rng) = isInputRange!Rng &&
! 	is(typeof(
! 	{
!         static assert(Rng.isUniformRandom); //tag
!     }));
  
  ///
  @safe unittest
*************** template isUniformRNG(Rng)
*** 311,339 ****
   *   $(LI it has a 'seed(ElementType)' function)
   * )
   */
! template isSeedable(Rng, SeedType)
! {
!     enum bool isSeedable = isUniformRNG!(Rng) &&
!         is(typeof(
!         {
!             Rng r = void;              // can define a Rng object
!             SeedType s = void;
!             r.seed(s); // can seed a Rng
!         }));
! }
  
  ///ditto
! template isSeedable(Rng)
! {
!     enum bool isSeedable = isUniformRNG!Rng &&
!         is(typeof(
!         {
!             Rng r = void;                     // can define a Rng object
!             alias SeedType = typeof(r.front);
!             SeedType s = void;
!             r.seed(s); // can seed a Rng
!         }));
! }
  
  ///
  @safe unittest
--- 305,327 ----
   *   $(LI it has a 'seed(ElementType)' function)
   * )
   */
! enum isSeedable(Rng, SeedType) = isUniformRNG!(Rng) &&
! 	is(typeof(
!     {
!         Rng r = void;              ///< can define a Rng object
!         SeedType s = void; ///< Dummy doc to silence D-scanner.
!         r.seed(s); // can seed a Rng
!     }));
  
  ///ditto
! enum isSeedable(Rng) = isUniformRNG!Rng &&
! 	is(typeof(
!     {
!         Rng r = void;                     ///< can define a Rng object
!         alias SeedType = typeof(r.front);
!         SeedType s = void; ///< Dummy doc to silence D-scanner.
!         r.seed(s); // can seed a Rng
!     }));
  
  ///
  @safe unittest
diff -Nrcpad gcc-16-20260201/libphobos/src/std/range/package.d gcc-16-20260208/libphobos/src/std/range/package.d
*** gcc-16-20260201/libphobos/src/std/range/package.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/src/std/range/package.d	Sun Feb  8 22:32:16 2026
*************** $(BOOKTABLE ,
*** 86,92 ****
          $(TD Creates the range that results from discarding
          the first element from the given range.
      ))
!     $(TR $(TD $(D $(LREF dropBackOne)))
          $(TD Creates the range that results from discarding
          the last element from the given range.
      ))
--- 86,92 ----
          $(TD Creates the range that results from discarding
          the first element from the given range.
      ))
!     $(TR $(TD $(LREF dropBackOne))
          $(TD Creates the range that results from discarding
          the last element from the given range.
      ))
*************** $(BOOKTABLE ,
*** 162,168 ****
          $(TD Similar to `recurrence`, except that a random-access range is
          created.
      ))
!     $(TR $(TD $(D $(LREF slide)))
          $(TD Creates a range that returns a fixed-size sliding window
          over the original range. Unlike chunks,
          it advances a configurable number of items at a time,
--- 162,168 ----
          $(TD Similar to `recurrence`, except that a random-access range is
          created.
      ))
!     $(TR $(TD $(LREF slide))
          $(TD Creates a range that returns a fixed-size sliding window
          over the original range. Unlike chunks,
          it advances a configurable number of items at a time,
*************** if (isForwardRange!R && !isInfinite!R)
*** 4446,4452 ****
              return _original[_index];
          }
  
!         static if (is(typeof((cast(const R)_original)[_index])))
          {
              /// ditto
              @property auto ref front() const
--- 4446,4452 ----
              return _original[_index];
          }
  
!         static if (__traits(compiles, (const R r) => r[0]))
          {
              /// ditto
              @property auto ref front() const
*************** if (isForwardRange!R && !isInfinite!R)
*** 4484,4491 ****
              return _original[(n + _index) % _original.length];
          }
  
!         static if (is(typeof((cast(const R)_original)[_index])) &&
!                    is(typeof((cast(const R)_original).length)))
          {
              /// ditto
              auto ref opIndex(size_t n) const
--- 4484,4491 ----
              return _original[(n + _index) % _original.length];
          }
  
!         static if (__traits(compiles, (const R r) => r[0]) &&
!             __traits(compiles, (const R r) => r.length))
          {
              /// ditto
              auto ref opIndex(size_t n) const
*************** if (isForwardRange!R && !isInfinite!R)
*** 4559,4565 ****
              return _current.front;
          }
  
!         static if (is(typeof((cast(const R)_current).front)))
          {
              /// ditto
              @property auto ref front() const
--- 4559,4565 ----
              return _current.front;
          }
  
!         static if (__traits(compiles, (const R r) => r.front))
          {
              /// ditto
              @property auto ref front() const
*************** pure @safe unittest
*** 4948,4953 ****
--- 4948,4970 ----
      }
  }
  
+ // https://github.com/dlang/phobos/issues/10852
+ @safe unittest
+ {
+     // forward range
+     struct R
+     {
+         int i;
+         int front() => i;
+         bool empty() => i == 0;
+         void popFront() {--i;}
+         R save() => this;
+     }
+ 
+     auto r = R(10).cycle.take(20);
+     assert(r.array == [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1]);
+ }
+ 
  private alias lengthType(R) = typeof(R.init.length.init);
  
  /**
*************** pure @safe nothrow unittest
*** 6830,6841 ****
     user-defined types that support `++`, the range is an input
     range.
  
!    An integral iota also supports `in` operator from the right. It takes
!    the stepping into account, the integral won't be considered
!    contained if it falls between two consecutive values of the range.
!    `contains` does the same as in, but from lefthand side.
  
      Example:
      ---
      void main()
      {
--- 6847,6861 ----
     user-defined types that support `++`, the range is an input
     range.
  
!    $(DDOC_SECTION_H `in` operator and `contains`:)
!    `iota` over an integral/pointer type defines the `in` operator from the right.
!    `val in iota(...)` is true when `val` occurs in the range. When present, it takes
!    `step` into account - `val` won't be considered
!    contained if it falls between two consecutive elements of the range.
!    The `contains` method does the same as `in`, but from the left-hand side.
  
      Example:
+     $(RUNNABLE_EXAMPLE
      ---
      void main()
      {
*************** pure @safe nothrow unittest
*** 6862,6867 ****
--- 6882,6888 ----
          writeln();
      }
      ---
+     )
  */
  auto iota(B, E, S)(B begin, E end, S step)
  if ((isIntegral!(CommonType!(B, E)) || isPointer!(CommonType!(B, E)))
diff -Nrcpad gcc-16-20260201/libphobos/src/std/socket.d gcc-16-20260208/libphobos/src/std/socket.d
*** gcc-16-20260201/libphobos/src/std/socket.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/src/std/socket.d	Sun Feb  8 22:32:16 2026
*************** abstract class Address
*** 1284,1290 ****
          // libraries shipped with DMD. Thus, we check for getnameinfo at
          // runtime in the shared module constructor, and use it if it's
          // available in the base class method. Classes for specific network
!         // families (e.g. InternetHost) override this method and use a
          // deprecated, albeit commonly-available method when getnameinfo()
          // is not available.
          // http://technet.microsoft.com/en-us/library/aa450403.aspx
--- 1284,1290 ----
          // libraries shipped with DMD. Thus, we check for getnameinfo at
          // runtime in the shared module constructor, and use it if it's
          // available in the base class method. Classes for specific network
!         // families (e.g. InternetAddress) override this method and use a
          // deprecated, albeit commonly-available method when getnameinfo()
          // is not available.
          // http://technet.microsoft.com/en-us/library/aa450403.aspx
*************** public:
*** 1863,1868 ****
--- 1863,1881 ----
          sin6 = addr;
      }
  
+     version (Posix)
+     {
+         /// Human readable string representing the IPv6 address in RFC 2373 form.
+         override string toAddrString() @trusted const
+         {
+             char[INET6_ADDRSTRLEN] buf;
+             string addrString = to!string(
+                 .inet_ntop(AddressFamily.INET6, &sin6.sin6_addr, buf.ptr, INET6_ADDRSTRLEN)
+             );
+             return addrString;
+         }
+     }
+ 
     /**
       * Parse an IPv6 host address string as described in RFC 2373, and return the
       * address.
diff -Nrcpad gcc-16-20260201/libphobos/src/std/sumtype.d gcc-16-20260208/libphobos/src/std/sumtype.d
*** gcc-16-20260201/libphobos/src/std/sumtype.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/src/std/sumtype.d	Sun Feb  8 22:32:16 2026
*************** public:
*** 842,847 ****
--- 842,860 ----
              return this.match!hashOf;
          }
      }
+ 
+     /**
+      * Returns the index of the current value's type in the `SumType`'s
+      * $(LREF Types).
+      *
+      * Note that $(LREF Types) does not include type qualifiers that are
+      * applied to the `SumType` itself. To obtain the properly-qualified type
+      * of a qualified `SumType`'s value, use $(REF CopyTypeQualifiers, std,traits).
+      */
+     size_t typeIndex() const
+     {
+         return tag;
+     }
  }
  
  // Construction
*************** version (D_BetterC) {} else
*** 1577,1582 ****
--- 1590,1648 ----
      static assert(SumType!int.sizeof == int.sizeof);
  }
  
+ // typeIndex
+ @safe unittest
+ {
+     alias MySum = SumType!(int, string);
+ 
+     MySum a = 42;
+     MySum b = "hello";
+ 
+     assert(a.typeIndex == IndexOf!(int, MySum.Types));
+     assert(b.typeIndex == IndexOf!(string, MySum.Types));
+ }
+ 
+ // typeIndex with qualified SumTypes
+ @safe unittest
+ {
+     alias MySum = SumType!(int[], const int[], immutable int[]);
+ 
+     int[] a;
+     const int[] ca;
+     immutable int[] ia;
+ 
+     MySum s1 = a;
+     MySum s2 = ca;
+     MySum s3 = ia;
+ 
+     const MySum cs1 = s1;
+     const MySum cs2 = s2;
+     const MySum cs3 = s3;
+ 
+     // Copying a SumType doesn't change its typeIndex
+     assert(cs1.typeIndex == s1.typeIndex);
+     assert(cs2.typeIndex == s2.typeIndex);
+     assert(cs3.typeIndex == s3.typeIndex);
+ 
+     static bool isIndexOf(Target, Types...)(size_t i)
+     {
+         switch (i)
+         {
+             static foreach (tid, T; Types)
+                 case tid: return is(T == Target);
+             default: return false;
+         }
+     }
+ 
+     // const(int[]) appears twice in ConstTypes.
+     // Both indices are valid return values for typeIndex.
+     alias ConstTypes = Map!(ConstOf, MySum.Types);
+ 
+     assert(isIndexOf!(const int[], ConstTypes)(cs1.typeIndex));
+     assert(isIndexOf!(const int[], ConstTypes)(cs2.typeIndex));
+     assert(isIndexOf!(immutable int[], ConstTypes)(cs3.typeIndex));
+ }
+ 
  /// True if `T` is an instance of the `SumType` template, otherwise false.
  private enum bool isSumTypeInstance(T) = is(T == SumType!Args, Args...);
  
*************** template has(T)
*** 2663,2675 ****
      bool has(Self)(auto ref Self self)
      if (isSumType!Self)
      {
!         return self.match!checkType;
!     }
  
!     // Helper to avoid redundant template instantiations
!     private bool checkType(Value)(ref Value value)
!     {
!         return is(Value == T);
      }
  }
  
--- 2729,2746 ----
      bool has(Self)(auto ref Self self)
      if (isSumType!Self)
      {
!         import std.meta : ApplyLeft;
!         import std.traits : CopyTypeQualifiers;
  
!         alias AddQualifiers = ApplyLeft!(CopyTypeQualifiers, Self);
!         alias ValueTypes = Map!(AddQualifiers, Self.Types);
! 
!         final switch (self.typeIndex)
!         {
!             static foreach (valueTid, Value; ValueTypes)
!                 case valueTid:
!                     return is(Value == T);
!         }
      }
  }
  
*************** template get(T)
*** 2769,2777 ****
          import std.typecons : No;
  
          static if (__traits(isRef, self))
!             return self.match!(getLvalue!(No.try_, T));
          else
!             return self.match!(getRvalue!(No.try_, T));
      }
  }
  
--- 2840,2848 ----
          import std.typecons : No;
  
          static if (__traits(isRef, self))
!             return self.getLvalue!(No.try_, T);
          else
!             return self.getRvalue!(No.try_, T);
      }
  }
  
*************** template tryGet(T)
*** 2879,2887 ****
          import std.typecons : Yes;
  
          static if (__traits(isRef, self))
!             return self.match!(getLvalue!(Yes.try_, T));
          else
!             return self.match!(getRvalue!(Yes.try_, T));
      }
  }
  
--- 2950,2958 ----
          import std.typecons : Yes;
  
          static if (__traits(isRef, self))
!             return self.getLvalue!(Yes.try_, T);
          else
!             return self.getRvalue!(Yes.try_, T);
      }
  }
  
*************** private template failedGetMessage(Expect
*** 3007,3054 ****
  
  private template getLvalue(Flag!"try_" try_, T)
  {
!     ref T getLvalue(Value)(ref Value value)
      {
!         static if (is(Value == T))
!         {
!             return value;
!         }
!         else
          {
!             static if (try_)
!                 throw new MatchException(failedGetMessage!(T, Value));
!             else
!                 assert(false, failedGetMessage!(T, Value));
          }
      }
  }
  
  private template getRvalue(Flag!"try_" try_, T)
  {
!     T getRvalue(Value)(ref Value value)
      {
!         static if (is(Value == T))
!         {
!             import core.lifetime : move;
  
!             // Move if possible; otherwise fall back to copy
!             static if (is(typeof(move(value))))
              {
!                 static if (isCopyable!Value)
!                     // Workaround for https://issues.dlang.org/show_bug.cgi?id=21542
!                     return __ctfe ? value : move(value);
!                 else
!                     return move(value);
              }
-             else
-                 return value;
-         }
-         else
-         {
-             static if (try_)
-                 throw new MatchException(failedGetMessage!(T, Value));
-             else
-                 assert(false, failedGetMessage!(T, Value));
          }
      }
  }
--- 3078,3158 ----
  
  private template getLvalue(Flag!"try_" try_, T)
  {
!     ref T getLvalue(Self)(ref Self self)
!     if (isSumType!Self)
      {
!         import std.meta : ApplyLeft;
!         import std.traits : CopyTypeQualifiers;
! 
!         alias AddQualifiers = ApplyLeft!(CopyTypeQualifiers, Self);
!         alias ValueTypes = Map!(AddQualifiers, Self.Types);
! 
!         final switch (self.typeIndex)
          {
!             static foreach (valueTid, Value; ValueTypes)
!             {
!                 case valueTid:
!                     static if (is(Value == T))
!                     {
!                         return self.getByIndex!valueTid;
!                     }
!                     else
!                     {
!                         static if (try_)
!                             throw new MatchException(failedGetMessage!(T, Value));
!                         else
!                             assert(false, failedGetMessage!(T, Value));
!                     }
!             }
          }
      }
  }
  
  private template getRvalue(Flag!"try_" try_, T)
  {
!     T getRvalue(Self)(ref Self self)
!     if (isSumType!Self)
      {
!         import std.meta : ApplyLeft;
!         import std.traits : CopyTypeQualifiers;
  
!         alias AddQualifiers = ApplyLeft!(CopyTypeQualifiers, Self);
!         alias ValueTypes = Map!(AddQualifiers, Self.Types);
! 
!         final switch (self.typeIndex)
!         {
!             static foreach (valueTid, Value; ValueTypes)
              {
!                 case valueTid:
!                     static if (is(Value == T))
!                     {
!                         import core.lifetime : move;
! 
!                         // Move if possible; otherwise fall back to copy
!                         static if (is(typeof(move(self.getByIndex!valueTid))))
!                         {
!                             static if (isCopyable!Value)
!                             {
!                                 // Workaround for https://issues.dlang.org/show_bug.cgi?id=21542
!                                 if (__ctfe)
!                                     return self.getByIndex!valueTid;
!                                 else
!                                     return move(self.getByIndex!valueTid);
!                             }
!                             else
!                                 return move(self.getByIndex!valueTid);
!                         }
!                         else
!                             return self.getByIndex!valueTid;
!                     }
!                     else
!                     {
!                         static if (try_)
!                             throw new MatchException(failedGetMessage!(T, Value));
!                         else
!                             assert(false, failedGetMessage!(T, Value));
!                     }
              }
          }
      }
  }
diff -Nrcpad gcc-16-20260201/libphobos/src/std/system.d gcc-16-20260208/libphobos/src/std/system.d
*** gcc-16-20260201/libphobos/src/std/system.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/src/std/system.d	Sun Feb  8 22:32:16 2026
***************
*** 1,4 ****
--- 1,6 ----
  // Written in the D programming language.
+ //
+ // NOTE: This must be kept in sync with phobos/sys/system.d
  
  /**
   * Information about the target operating system, environment, and CPU.
*************** immutable
*** 39,44 ****
--- 41,47 ----
          openBSD,   /// OpenBSD
          dragonFlyBSD, /// DragonFlyBSD
          solaris,   /// Solaris
+         haiku,     /// HaikuOS
          android,   /// Android
          otherPosix, /// Other Posix Systems
          unknown,   /// Unknown
*************** immutable
*** 57,62 ****
--- 60,67 ----
      else version (NetBSD)  OS os = OS.netBSD;
      else version (OpenBSD) OS os = OS.openBSD;
      else version (DragonFlyBSD) OS os = OS.dragonFlyBSD;
+     else version (Solaris) OS os = OS.solaris;
+     else version (Haiku) OS os = OS.haiku;
      else version (Posix)   OS os = OS.otherPosix;
      else OS os = OS.unknown;
  
*************** immutable
*** 123,128 ****
--- 128,136 ----
          sh, /// The SuperH architecture, 32-bit
          webAssembly, /// The WebAssembly virtual ISA (instruction set architecture), 32-bit
          alpha, /// The Alpha architecture
+         loongArch32, /// The LoongAtch architecture, 32-bit
+         loongArch64, /// The LoongArch architecture, 64-bit
+         xtensa, /// The Xtensa architecture, 32-bit
          unknown, /// Unknown
      }
  
*************** immutable
*** 153,158 ****
--- 161,169 ----
      else version (SH)       ISA instructionSetArchitecture = ISA.sh;
      else version (WebAssembly) ISA instructionSetArchitecture = ISA.webAssembly;
      else version (Alpha)    ISA instructionSetArchitecture = ISA.alpha;
+     else version (LoongArch32) ISA instructionSetArchitecture = ISA.loongArch32;
+     else version (loongArch64) ISA instructionSetArchitecture = ISA.loongArch64;
+     else version (Xtensa)   ISA instructionSetArchitecture = ISA.xtensa;
      else ISA instructionSetArchitecture = ISA.unknown;
  }
  
diff -Nrcpad gcc-16-20260201/libphobos/src/std/traits.d gcc-16-20260208/libphobos/src/std/traits.d
*** gcc-16-20260201/libphobos/src/std/traits.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/src/std/traits.d	Sun Feb  8 22:32:16 2026
*************** if (isCallable!func)
*** 1182,1195 ****
      static assert(pstc.length == 4); // number of parameters
      static assert(pstc[0] == STC.ref_);
      static assert(pstc[1] == STC.out_);
!     version (none)
!     {
!         // TODO: When the DMD PR (dlang/dmd#11474) gets merged,
!         // remove the versioning and the second test
!         static assert(pstc[2] == STC.in_);
!         // This is the current behavior, before `in` is fixed to not be an alias
!         static assert(pstc[2] == STC.scope_);
!     }
      static assert(pstc[3] == STC.none);
  }
  
--- 1182,1188 ----
      static assert(pstc.length == 4); // number of parameters
      static assert(pstc[0] == STC.ref_);
      static assert(pstc[1] == STC.out_);
!     static assert(pstc[2] == STC.in_);
      static assert(pstc[3] == STC.none);
  }
  
*************** enum bool isSomeFunction(alias T) =
*** 7609,7615 ****
  }
  
  /**
! Detect whether `T` is a callable object, which can be called with the
  function call operator `$(LPAREN)...$(RPAREN)`.
  
  $(NOTE Implicit Function Template Instantiation is *not* attempted - see below.)
--- 7602,7608 ----
  }
  
  /**
! Detect whether `callable` is a callable object, which can be called with the
  function call operator `$(LPAREN)...$(RPAREN)`.
  
  $(NOTE Implicit Function Template Instantiation is *not* attempted - see below.)
*************** $(NOTE Implicit Function Template Instan
*** 7617,7626 ****
  template isCallable(alias callable)
  {
      static if (is(typeof(&callable.opCall) == delegate))
!         // T is a object which has a member function opCall().
          enum bool isCallable = true;
      else static if (is(typeof(&callable.opCall) V : V*) && is(V == function))
!         // T is a type which has a static member function opCall().
          enum bool isCallable = true;
      else static if (is(typeof(&callable.opCall!()) TemplateInstanceType))
      {
--- 7610,7619 ----
  template isCallable(alias callable)
  {
      static if (is(typeof(&callable.opCall) == delegate))
!         // callable is a object which has a member function opCall().
          enum bool isCallable = true;
      else static if (is(typeof(&callable.opCall) V : V*) && is(V == function))
!         // callable is a type which has a static member function opCall().
          enum bool isCallable = true;
      else static if (is(typeof(&callable.opCall!()) TemplateInstanceType))
      {
*************** template isCallable(alias callable)
*** 7636,7642 ****
      }
  }
  
! /// Functions, function pointers, delegates, lambdas.
  @safe unittest
  {
      void f() { }
--- 7629,7635 ----
      }
  }
  
! /// Functions, function pointers, delegates, non-template function literals.
  @safe unittest
  {
      void f() { }
*************** template isCallable(alias callable)
*** 7651,7656 ****
--- 7644,7651 ----
  
      int x;
      static assert(!isCallable!x);
+     auto d = () => x;
+     static assert( isCallable!d);
  }
  
  /// Aggregate types with (static) opCall.
*************** template isCallable(alias callable)
*** 7665,7671 ****
      static assert( isCallable!(c.opCall));
      static assert( isCallable!S);
      static assert( isCallable!(I.value));
-     static assert( isCallable!((int a) { return a; }));
  
      static assert(!isCallable!I);
  }
--- 7660,7665 ----
*************** template isCallable(alias callable)
*** 7675,7685 ****
--- 7669,7681 ----
  {
      void f()() { }
      T g(T = int)(T x) { return x; }
+     int h(T)();
      struct S1 { static void opCall()() { } }
      struct S2 { static T opCall(T = int)(T x) {return x; } }
  
      static assert( isCallable!f);
      static assert( isCallable!g);
+     static assert(!isCallable!h);
      static assert( isCallable!S1);
      static assert( isCallable!S2);
  
*************** enum isType(alias X) = is(X);
*** 9150,9158 ****
  }
  
  /**
!  * Detect whether symbol or type `X` is a function. This is different that finding
!  * if a symbol is callable or satisfying `is(X == function)`, it finds
!  * specifically if the symbol represents a normal function declaration, i.e.
   * not a delegate or a function pointer.
   *
   * Returns:
--- 9146,9154 ----
  }
  
  /**
!  * Detect whether symbol or type `X` is a function.
!  * This is different from finding if a symbol is callable or satisfying `is(X == return)`.
!  * It finds specifically if the symbol represents a normal function (or method) declaration, i.e.
   * not a delegate or a function pointer.
   *
   * Returns:
*************** template isFunction(alias X)
*** 9170,9179 ****
          // x is a (nested) function symbol.
          enum isFunction = true;
      }
!     else static if (is(X T))
      {
!         // x is a type.  Take the type of it and examine.
!         enum isFunction = is(T == function);
      }
      else
          enum isFunction = false;
--- 9166,9175 ----
          // x is a (nested) function symbol.
          enum isFunction = true;
      }
!     else static if (is(X))
      {
!         // x is a type
!         enum isFunction = is(X == function);
      }
      else
          enum isFunction = false;
*************** template isFunction(alias X)
*** 9184,9189 ****
--- 9180,9193 ----
  {
      static void func(){}
      static assert(isFunction!func);
+     static assert(isFunction!(typeof(func)));
+ 
+     auto fp = &func; // function pointer
+     static assert(!isFunction!fp);
+ 
+     int i;
+     int f2() => i; // nested function
+     static assert(isFunction!f2);
  
      struct S
      {
diff -Nrcpad gcc-16-20260201/libphobos/src/std/typecons.d gcc-16-20260208/libphobos/src/std/typecons.d
*** gcc-16-20260201/libphobos/src/std/typecons.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/src/std/typecons.d	Sun Feb  8 22:32:16 2026
*************** $(TR $(TD Flags) $(TD
*** 21,30 ****
      $(LREF No)
      $(LREF Yes)
  ))
! $(TR $(TD Memory allocation) $(TD
      $(LREF SafeRefCounted)
      $(LREF safeRefCounted)
!     $(LREF RefCountedAutoInitialize)
      $(LREF scoped)
      $(LREF Unique)
  ))
--- 21,35 ----
      $(LREF No)
      $(LREF Yes)
  ))
! $(TR $(TD Reference Counting) $(TD
!     $(LREF borrow)
!     $(LREF RefCountedAutoInitialize)
!     $(LREF RefCounted)
!     $(LREF refCounted)
      $(LREF SafeRefCounted)
      $(LREF safeRefCounted)
! ))
! $(TR $(TD Memory allocation) $(TD
      $(LREF scoped)
      $(LREF Unique)
  ))
*************** $(TR $(TD Code generation) $(TD
*** 33,41 ****
--- 38,48 ----
      $(LREF BlackHole)
      $(LREF generateAssertTrap)
      $(LREF generateEmptyFunction)
+     $(LREF NotImplementedError)
      $(LREF WhiteHole)
  ))
  $(TR $(TD Nullable) $(TD
+     $(LREF apply)
      $(LREF Nullable)
      $(LREF nullable)
      $(LREF NullableRef)
*************** $(TR $(TD Proxies) $(TD
*** 45,56 ****
      $(LREF Proxy)
      $(LREF rebindable)
      $(LREF Rebindable)
-     $(LREF ReplaceType)
      $(LREF unwrap)
      $(LREF wrap)
  ))
  $(TR $(TD Types) $(TD
      $(LREF alignForSize)
      $(LREF Ternary)
      $(LREF Typedef)
      $(LREF TypedefType)
--- 52,64 ----
      $(LREF Proxy)
      $(LREF rebindable)
      $(LREF Rebindable)
      $(LREF unwrap)
      $(LREF wrap)
  ))
  $(TR $(TD Types) $(TD
      $(LREF alignForSize)
+     $(LREF ReplaceType)
+     $(LREF ReplaceTypeUnless)
      $(LREF Ternary)
      $(LREF Typedef)
      $(LREF TypedefType)
*************** struct Nullable(T)
*** 3814,3826 ****
          assert(e != 12);
      }
  
!     size_t toHash() const @safe nothrow
      {
!         static if (__traits(compiles, .hashOf(_value.payload)))
!             return _isNull ? 0 : .hashOf(_value.payload);
!         else
!             // Workaround for when .hashOf is not both @safe and nothrow.
!             return _isNull ? 0 : typeid(T).getHash(&_value.payload);
      }
  
      /**
--- 3822,3837 ----
          assert(e != 12);
      }
  
!     static if (!isAggregateType!T || hasMember!(T, "toHash"))
      {
!         size_t toHash() const @safe nothrow
!         {
!             static if (__traits(compiles, .hashOf(_value.payload)))
!                 return _isNull ? 0 : .hashOf(_value.payload);
!             else
!                 // Workaround for when .hashOf is not both @safe and nothrow.
!                 return _isNull ? 0 : typeid(T).getHash(&_value.payload);
!         }
      }
  
      /**
*************** auto nullable(T)(T t)
*** 4826,4831 ****
--- 4837,4854 ----
      auto result = cast(immutable(Nullable!(int*))) a;
  }
  
+ // https://github.com/dlang/phobos/issues/10758
+ @safe unittest
+ {
+     struct F
+     {
+         bool opEquals(ref const F rhs) const { return true; }
+     }
+ 
+     static assert(!__traits(compiles, bool[F]));
+     static assert(!__traits(compiles, bool[Nullable!F]));
+ }
+ 
  /**
  Just like `Nullable!T`, except that the null state is defined as a
  particular value. For example, $(D Nullable!(uint, uint.max)) is an
*************** if (is (typeof(nullValue) == T))
*** 5240,5246 ****
  
  // apply
  /**
! Unpacks the content of a `Nullable`, performs an operation and packs it again. Does nothing if isNull.
  
  When called on a `Nullable`, `apply` will unpack the value contained in the `Nullable`,
  pass it to the function you provide and wrap the result in another `Nullable` (if necessary).
--- 5263,5269 ----
  
  // apply
  /**
! Unpacks the content of a $(LREF Nullable), performs an operation and packs it again. Does nothing if $(LREF isNull).
  
  When called on a `Nullable`, `apply` will unpack the value contained in the `Nullable`,
  pass it to the function you provide and wrap the result in another `Nullable` (if necessary).
*************** template apply(alias fun)
*** 5260,5265 ****
--- 5283,5289 ----
  {
      import std.functional : unaryFun;
  
+     ///
      auto apply(T)(auto ref T t)
      if (isInstanceOf!(Nullable, T))
      {
*************** template borrow(alias fun)
*** 8311,8316 ****
--- 8335,8341 ----
  {
      import std.functional : unaryFun;
  
+     ///
      auto ref borrow(RC)(RC refCount)
      if
      (
diff -Nrcpad gcc-16-20260201/libphobos/src/std/uuid.d gcc-16-20260208/libphobos/src/std/uuid.d
*** gcc-16-20260201/libphobos/src/std/uuid.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/src/std/uuid.d	Sun Feb  8 22:32:16 2026
*************** $(TR $(TDNW Generating UUIDs)
*** 23,28 ****
--- 23,29 ----
       $(TD $(MYREF sha1UUID)
            $(MYREF randomUUID)
            $(MYREF md5UUID)
+           $(MYREF timestampRandomUUID)
            )
       )
  $(TR $(TDNW Using UUIDs)
*************** module std.uuid;
*** 119,124 ****
--- 120,129 ----
      assert(id.empty);
  }
  
+ import core.time : dur;
+ import std.bitmanip : bigEndianToNative, nativeToBigEndian;
+ import std.datetime.systime : SysTime;
+ import std.datetime : Clock, DateTime, UTC;
  import std.range.primitives;
  import std.traits;
  
*************** public struct UUID
*** 193,199 ****
              ///Version 4 (Random)
              randomNumberBased = 4,
              ///Version 5 (Name based + SHA-1)
!             nameBasedSHA1 = 5
          }
  
          union
--- 198,206 ----
              ///Version 4 (Random)
              randomNumberBased = 4,
              ///Version 5 (Name based + SHA-1)
!             nameBasedSHA1 = 5,
!             ///Version 7 (milliseconds since unix epoch + random)
!             timestampRandom = 7
          }
  
          union
*************** public struct UUID
*** 310,315 ****
--- 317,362 ----
          }
  
          /**
+          * UUID V7 constructor
+          *
+          * This implementation is not guaranteed to use a cryptographically secure PRNG.
+          * For more information please see: std.random.unpredictableSeed
+          *
+          * Params:
+          *   timestamp = the timestamp part of the UUID V7
+          *   random = UUID V7 has 74 bits of random data, which rounds to 10 ubyte's.
+          *    If no random data is given, random data is generated.
+          */
+         @safe pure this(SysTime timestamp, ubyte[10] random = generateRandomData!10)
+         {
+             ulong epoch = (timestamp - SysTime.fromUnixTime(0)).total!"msecs";
+             this(epoch, random);
+         }
+ 
+         /// ditto
+         @safe pure this(ulong epoch_msecs, ubyte[10] random = generateRandomData!10)
+         {
+             ubyte[8] epoch = epoch_msecs.nativeToBigEndian;
+ 
+             this.data[0 .. 6] = epoch[2 .. 8];
+             this.data[6 .. $] = random;
+ 
+             // version and variant
+             this.data[6] = (this.data[6] & 0x0F) | 0x70;
+             this.data[8] = (this.data[8] & 0x3F) | 0x80;
+         }
+ 
+         ///
+         @system unittest
+         {
+             import std.datetime : DateTime, SysTime;
+             SysTime st = DateTime(2025, 8, 19, 10, 38, 45);
+             UUID u = UUID(st);
+             SysTime o = u.v7Timestamp();
+             assert(o == st, st.toString() ~ " | " ~ o.toString());
+         }
+ 
+         /**
           * <a name="UUID(string)"></a>
           * Parse a UUID from its canonical string form. An UUID in its
           * canonical form looks like this: 8ab3060e-2cba-4f23-b74c-b52db3bdfb46
*************** public struct UUID
*** 516,521 ****
--- 563,609 ----
          }
  
          /**
+          * If the UUID is of version 7 it has a timestamp that this function
+          * returns, otherwise an UUIDParsingException is thrown.
+          */
+         SysTime v7Timestamp() const {
+             if (this.uuidVersion != Version.timestampRandom)
+             {
+                 throw new UUIDParsingException("The UUID is not of version" ~
+                     " v7 therefore no timestamp exist", 0);
+             }
+ 
+             import std.bitmanip : bigEndianToNative;
+ 
+             ubyte[8] tmp = void;
+             tmp[0 .. 2] = 0;
+             tmp[2 .. 8] = data[0 .. 6];
+ 
+             ulong milli = tmp.bigEndianToNative!ulong;
+ 
+             return SysTime(DateTime(1970, 1, 1), UTC()) + dur!"msecs"(milli);
+         }
+ 
+         /**
+          * If the UUID is of version 7 it has a timestamp that this function
+          * returns as described in RFC 9562 (Method 3), otherwise an
+          * UUIDParsingException is thrown.
+          */
+         SysTime v7Timestamp_method3() const {
+             auto ret = v7Timestamp();
+ 
+             const ubyte[2] rand_a = [
+                 data[6] & 0x0f, // masks version bits
+                 data[7]
+             ];
+ 
+             const float hnsecs = rand_a.bigEndianToNative!ushort / MonotonicUUIDsFactory.subMsecsPart;
+             ret += dur!"hnsecs"(cast(ulong) hnsecs);
+ 
+             return ret;
+         }
+ 
+         /**
           * RFC 4122 defines different internal data layouts for UUIDs.
           * Returns the format used by this UUID.
           *
*************** public struct UUID
*** 601,606 ****
--- 689,696 ----
                  return Version.randomNumberBased;
              else if ((octet9 & 0xF0) == 0x50)
                  return Version.nameBasedSHA1;
+             else if ((octet9 & 0xF0) == 0x70)
+                 return Version.timestampRandom;
              else
                  return Version.unknown;
          }
*************** public struct UUID
*** 622,628 ****
                  0x40 : UUID.Version.randomNumberBased,
                  0x50 : UUID.Version.nameBasedSHA1,
                  0x60 : UUID.Version.unknown,
!                 0x70 : UUID.Version.unknown,
                  0x80 : UUID.Version.unknown,
                  0x90 : UUID.Version.unknown,
                  0xa0 : UUID.Version.unknown,
--- 712,718 ----
                  0x40 : UUID.Version.randomNumberBased,
                  0x50 : UUID.Version.nameBasedSHA1,
                  0x60 : UUID.Version.unknown,
!                 0x70 : UUID.Version.timestampRandom,
                  0x80 : UUID.Version.unknown,
                  0x90 : UUID.Version.unknown,
                  0xa0 : UUID.Version.unknown,
*************** if (isInputRange!RNG && isIntegral!(Elem
*** 1317,1322 ****
--- 1407,1570 ----
      assert(u1.uuidVersion == UUID.Version.randomNumberBased);
  }
  
+ ///
+ class MonotonicUUIDsFactory
+ {
+     import core.sync.mutex : Mutex;
+     import core.time : Duration;
+     import std.datetime.stopwatch : StopWatch;
+ 
+     private shared Mutex mtx;
+     private StopWatch startTimePoint;
+ 
+     ///
+     this(in SysTime startTime = SysTime.fromUnixTime(0)) shared
+     {
+         this(Clock.currTime(UTC()) - startTime);
+     }
+ 
+     ///
+     this(in Duration timeElapsed, bool autostartDisabledForTesting = false) shared
+     {
+         mtx = new shared Mutex();
+ 
+         (cast() startTimePoint).setTimeElapsed = timeElapsed;
+ 
+         if (!autostartDisabledForTesting)
+             (cast() startTimePoint).start();
+     }
+ 
+     private auto peek() shared
+     {
+         mtx.lock();
+         scope(exit) mtx.unlock();
+ 
+         return (cast() startTimePoint).peek;
+     }
+ 
+     // hnsecs is 1/10_000 of millisecond
+     // rand_a size is 12 bits (4096 values)
+     private enum float subMsecsPart = 1.0f / 10_000 * 4096;
+ 
+     /**
+      * Returns a monotonic timestamp + random based UUIDv7
+      * as described in RFC 9562 (Method 3).
+      */
+     UUID createUUIDv7_method3(ubyte[8] externalRandom = generateRandomData!8) shared
+     {
+         const curr = peek.split!("msecs", "hnsecs");
+         const qhnsecs = cast(ushort) (curr.hnsecs * subMsecsPart);
+ 
+         ubyte[10] rand;
+ 
+         // Whole rand_a is 16 bit, but usable only 12 MSB.
+         // additional 4 less significant bits consumed
+         // by a version value
+         rand[0 .. 2] = qhnsecs.nativeToBigEndian;
+         rand[2 .. $] = externalRandom;
+ 
+         return UUID(curr.msecs, rand);
+     }
+ }
+ 
+ /// Generate monotone UUIDs
+ @system unittest
+ {
+     auto f = new shared MonotonicUUIDsFactory;
+ 
+     UUID[10] monotonic;
+ 
+     foreach (ref u; monotonic)
+         u = f.createUUIDv7_method3;
+ }
+ 
+ @system unittest
+ {
+     import std.conv : to;
+     import std.datetime;
+ 
+     const currTime = SysTime(DateTime(2025, 9, 12, 21, 38, 45), UTC());
+     Duration d = currTime - SysTime.fromUnixTime(0) + dur!"msecs"(123);
+ 
+     auto f = new shared MonotonicUUIDsFactory(d, true);
+ 
+     const u1 = f.createUUIDv7_method3();
+     assert(u1.uuidVersion == UUID.Version.timestampRandom);
+ 
+     // sub-millisecond part zeroed
+     assert((u1.data[6] & 0b0000_1111) == 0);
+     assert(u1.data[7] == 0);
+ 
+     const uuidv7_milli_1 = u1.v7Timestamp;
+ 
+     {
+         const st = u1.v7Timestamp_method3;
+         assert(cast(DateTime) st == cast(DateTime) currTime, st.to!string);
+ 
+         const sp = st.fracSecs.split!("msecs", "usecs", "hnsecs");
+         assert(sp.msecs == 123, sp.to!string);
+         assert(sp.usecs == 0, sp.to!string);
+     }
+ 
+     // 0.3 usecs, but Method 3 precision is only 0.25 of usec,
+     // thus, expected value is 2
+     d += dur!"hnsecs"(3);
+     f = new shared MonotonicUUIDsFactory(d, true);
+ 
+     const u2 = f.createUUIDv7_method3();
+     const uuidv7_milli_2 = u2.v7Timestamp;
+     assert(uuidv7_milli_1 == uuidv7_milli_2);
+ 
+     {
+         const st = u2.v7Timestamp_method3;
+         assert(cast(DateTime) st == cast(DateTime) currTime, st.to!string);
+ 
+         const sp = st.fracSecs.split!("msecs", "usecs", "hnsecs");
+         assert(sp.msecs == 123, sp.to!string);
+         assert(sp.usecs == 0, sp.to!string);
+         assert(sp.hnsecs == 2, sp.to!string);
+     }
+ }
+ 
+ @system unittest
+ {
+     import core.thread.osthread : Thread;
+     import std.datetime;
+ 
+     scope f = new shared MonotonicUUIDsFactory;
+ 
+     UUID[1000] uuids;
+ 
+     foreach (ref u; uuids)
+     {
+         // UUIDv7 Method 3 monotonicity is only guaranteed if UUIDs are
+         // generated slower than 2.5 microseconds
+         Thread.sleep(dur!("hnsecs")(25));
+         u = f.createUUIDv7_method3;
+     }
+ 
+     foreach (i; 1 .. uuids.length)
+     {
+         assert(uuids[i-1].v7Timestamp_method3 < uuids[i].v7Timestamp_method3);
+         assert(uuids[i-1].data[8 .. $] != uuids[i].data[8 .. $], "random parts are equal");
+     }
+ }
+ 
+ /**
+  * This function returns a timestamp + random based UUID aka. uuid v7.
+  */
+ UUID timestampRandomUUID()
+ {
+     return UUID(Clock.currTime(UTC()));
+ }
+ 
+ ///
+ @system unittest
+ {
+     UUID u = timestampRandomUUID();
+     assert(u.uuidVersion == UUID.Version.timestampRandom);
+ }
+ 
  /**
   * This is a less strict parser compared to the parser used in the
   * UUID constructor. It enforces the following rules:
*************** enum uuidRegex = "[a-fA-F0-9]{8}-[a-fA-F
*** 1718,1723 ****
--- 1966,1985 ----
      ]);
  }
  
+ private ubyte[Size] generateRandomData(ubyte Size)() {
+     import std.random : Random, uniform, unpredictableSeed;
+ 
+     auto rnd = Random(unpredictableSeed);
+ 
+     ubyte[Size] bytes;
+     foreach (idx; 0 .. bytes.length)
+     {
+         bytes[idx] = uniform!(ubyte)(rnd);
+         rnd.popFront();
+     }
+     return bytes;
+ }
+ 
  /**
   * This exception is thrown if an error occurs when parsing a UUID
   * from a string.
*************** public class UUIDParsingException : Exce
*** 1777,1779 ****
--- 2039,2078 ----
      assert(ex.position == 10);
      assert(ex.reason == UUIDParsingException.Reason.tooMuch);
  }
+ 
+ /// uuidv7
+ @system unittest
+ {
+     import std.datetime : DateTime, SysTime;
+ 
+     SysTime st = DateTime(2025, 8, 19, 10, 38, 45);
+     UUID u = UUID(st);
+     assert(u.uuidVersion == UUID.Version.timestampRandom);
+     SysTime o = u.v7Timestamp();
+     assert(o == st, st.toString() ~ " | " ~ o.toString());
+     string s = u.toString();
+     UUID u2 = UUID(s);
+     SysTime o2 = u2.v7Timestamp();
+     assert(o2 == st, st.toString() ~ " | " ~ o2.toString());
+ }
+ 
+ @system unittest
+ {
+     import std.datetime : SysTime;
+ 
+     UUID u = timestampRandomUUID();
+     assert(u.uuidVersion == UUID.Version.timestampRandom);
+ 
+     SysTime o = u.v7Timestamp();
+     assert(o.year > 2024);
+     assert(o.year < 3024);
+ }
+ 
+ /// uuid v7 generated by external tool
+ @system unittest
+ {
+     import std.datetime : DateTime, SysTime;
+     UUID u = UUID("0198c2b2-c5a8-7a0f-a1db-86aac7906c7b");
+     auto d = DateTime(2025,8,19);
+     assert((cast(DateTime) u.v7Timestamp()).year == d.year);
+ }
diff -Nrcpad gcc-16-20260201/libphobos/testsuite/libphobos.aa/test_aa.d gcc-16-20260208/libphobos/testsuite/libphobos.aa/test_aa.d
*** gcc-16-20260201/libphobos/testsuite/libphobos.aa/test_aa.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/testsuite/libphobos.aa/test_aa.d	Sun Feb  8 22:32:16 2026
*************** void main()
*** 7,14 ****
--- 7,16 ----
      testRequire1();
      testRequire2();
      testRequire3();
+     testRequire4();
      testUpdate1();
      testUpdate2();
+     testUpdate3();
      testByKey1();
      testByKey2();
      testByKey3();
*************** void main()
*** 43,48 ****
--- 45,51 ----
      testTypeInfoCollect();
      testNew();
      testAliasThis();
+     testAliasThis2();
  }
  
  void testKeysValues1()
*************** void testRequire3() pure
*** 227,232 ****
--- 230,249 ----
      assert("foo" in aa);
  }
  
+ void testRequire4() pure
+ {
+     int[int] aa;
+     try
+         aa.require(5, {
+             if (true)
+                 throw new Exception("oops");
+             else
+                 return 1;
+         }());
+     catch (Exception e) {}
+     assert(5 !in aa);
+ }
+ 
  
  void testUpdate1()
  {
*************** void testUpdate2()
*** 291,296 ****
--- 308,330 ----
      assert(updated);
  }
  
+ void testUpdate3() pure
+ {
+     int[int] aa;
+     try
+         aa.update(5, {
+             if (true)
+                 throw new Exception("oops");
+             else
+                 return 1;
+         }, (ref int v) {
+             throw new Exception("unexpected update");
+         });
+     catch (Exception e) {}
+     assert(5 !in aa);
+ }
+ 
+ 
  void testByKey1() @safe
  {
      static struct BadValue
*************** void testAliasThis()
*** 988,990 ****
--- 1022,1050 ----
      s.remove(1);
      assert(S.numCopies == 0);
  }
+ 
+ void testAliasThis2()
+ {
+     static struct A
+     {
+         bool extra;
+         uint id;
+     }
+ 
+     static struct B
+     {
+         uint id;
+ 
+         A toA() const pure nothrow
+         {
+             return A(false, id);
+         }
+ 
+         alias toA this;
+     }
+ 
+     bool[A] aa;
+     aa[B(5)] = true;
+     assert(B(5) in aa);
+     assert(A(false, 5) in aa);
+ }
diff -Nrcpad gcc-16-20260201/libphobos/testsuite/libphobos.gc/forkgc2.d gcc-16-20260208/libphobos/testsuite/libphobos.gc/forkgc2.d
*** gcc-16-20260201/libphobos/testsuite/libphobos.gc/forkgc2.d	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libphobos/testsuite/libphobos.gc/forkgc2.d	Thu Jan  1 00:00:00 1970
***************
*** 1,23 ****
- // { dg-skip-if "test hangs the testsuite PR103944" { *-*-darwin* } }
- import core.stdc.stdlib : exit;
- import core.sys.posix.sys.wait : waitpid;
- import core.sys.posix.unistd : fork;
- import core.thread : Thread;
- 
- void main()
- {
-     foreach (t; 0 .. 10)
-         new Thread({
-             foreach (n; 0 .. 100)
-             {
-                 foreach (x; 0 .. 100)
-                     new ubyte[x];
-                 auto f = fork();
-                 assert(f >= 0);
-                 if (f == 0)
-                     exit(0);
-                 else
-                     waitpid(f, null, 0);
-             }
-         }).start();
- }
--- 0 ----
diff -Nrcpad gcc-16-20260201/libphobos/testsuite/libphobos.thread/filterthrownglobal.d gcc-16-20260208/libphobos/testsuite/libphobos.thread/filterthrownglobal.d
*** gcc-16-20260201/libphobos/testsuite/libphobos.thread/filterthrownglobal.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/libphobos/testsuite/libphobos.thread/filterthrownglobal.d	Sun Feb  8 22:32:16 2026
***************
*** 0 ****
--- 1,31 ----
+ import core.exception;
+ import core.thread;
+ 
+ __gshared bool caught;
+ 
+ void main()
+ {
+     filterThreadThrowableHandler = (ref Throwable t) {
+         if (auto t2 = cast(AssertError) t)
+         {
+             if (t2.message != "Hey!")
+                 return;
+         }
+         else
+             return;
+ 
+         caught = true;
+         t = null;
+     };
+ 
+     Thread t = new Thread(&entry);
+     t.start();
+     t.join();
+ 
+     assert(caught);
+ }
+ 
+ void entry()
+ {
+     throw new AssertError("Hey!");
+ }
diff -Nrcpad gcc-16-20260201/libphobos/testsuite/libphobos.thread/filterthrownmethod.d gcc-16-20260208/libphobos/testsuite/libphobos.thread/filterthrownmethod.d
*** gcc-16-20260201/libphobos/testsuite/libphobos.thread/filterthrownmethod.d	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/libphobos/testsuite/libphobos.thread/filterthrownmethod.d	Sun Feb  8 22:32:16 2026
***************
*** 0 ****
--- 1,41 ----
+ import core.exception;
+ import core.thread;
+ 
+ __gshared bool caught;
+ 
+ void main()
+ {
+     Thread t = new MyThread(&entry);
+     t.start();
+     t.join();
+ 
+     assert(caught);
+ }
+ 
+ class MyThread : Thread
+ {
+     this( void function() fn, size_t sz = 0 ) @safe pure nothrow @nogc
+     {
+         super(fn, sz);
+     }
+ 
+     override void filterCaughtThrowable(ref Throwable t) @system nothrow
+     {
+         if (auto t2 = cast(AssertError) t)
+         {
+             if (t2.message == "Hey!")
+             {
+                 caught = true;
+                 t = null;
+                 return;
+             }
+         }
+ 
+         super.filterCaughtThrowable(t);
+     }
+ }
+ 
+ void entry()
+ {
+     throw new AssertError("Hey!");
+ }
diff -Nrcpad gcc-16-20260201/libstdc++-v3/ChangeLog gcc-16-20260208/libstdc++-v3/ChangeLog
*** gcc-16-20260201/libstdc++-v3/ChangeLog	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libstdc++-v3/ChangeLog	Sun Feb  8 22:32:17 2026
***************
*** 1,3 ****
--- 1,128 ----
+ 2026-02-06  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	* include/bits/hashtable.h (std::__heterogeneous_hash_key)
+ 	[__glibcxx_associative_heterogeneous_erasure]: Changed guard.
+ 	* include/bits/stl_tree.h (std::__heterogeneous_tree_key)
+ 	[__glibcxx_associative_heterogeneous_erasure]: Likewise.
+ 	* include/bits/stl_function.h: Add comment with C++ version
+ 	for __glibcxx_associative_heterogeneous_erasure guard.
+ 
+ 2026-02-06  Nathan Myers  <ncm@cantrip.org>
+ 
+ 	* include/bits/stl_function.h (concept __heterogeneous_key):
+ 	Guard with __glibcxx_associative_heterogeneous_erasure
+ 
+ 2026-02-06  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/120567
+ 	* acinclude.m4 (GLIBCXX_ENABLE_BACKTRACE): Include "__sync_" in
+ 	grep command to check for extern calls to libatomic.
+ 	* configure: Regenerate.
+ 
+ 2026-02-06  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* testsuite/Makefile.am (new-abi-baseline): Overwrite existing
+ 	file instead of creating baseline_symbols.txt.new.
+ 	* testsuite/Makefile.in: Regenerate.
+ 
+ 2026-02-06  Nathan Myers  <ncm@cantrip.org>
+ 
+ 	* include/bits/stl_function.h (__heterogeneous_key): Use
+ 	C++17-defined remove_cvref<>::type instead.
+ 
+ 2026-02-05  Caolán McNamara  <caolanm@gmail.com>
+ 
+ 	* include/bits/regex.tcc (regex_traits::lookup_collatename):
+ 	Make __collatenames array const.
+ 
+ 2026-02-05  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/std/contracts (contract_violation::location): Use
+ 	source_location default constructor and then set _M_impl.
+ 	* include/std/source_location (source_location(const void*)):
+ 	Remove constructor.
+ 	* testsuite/18_support/contracts/includes.cc: Move to...
+ 	* testsuite/18_support/contracts/srcloc.cc: ...here. Test for
+ 	ambiguity caused by new constructor.
+ 
+ 2026-02-05  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* python/libstdcxx/v6/printers.py (SharedPointerPrinter): Only
+ 	use gdb.Type.is_scalar if supported.
+ 	* testsuite/libstdc++-prettyprinters/compat.cc: Test printer for
+ 	old implementation of std::atomic<std::shared_ptr<T>>.
+ 
+ 2026-02-05  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* testsuite/28_regex/algorithms/regex_match/multiline.cc: Add
+ 	string to static_assert.
+ 	* testsuite/28_regex/sub_match/lwg3204.cc: Likewise.
+ 
+ 2026-02-04  Nathan Myers  <ncm@cantrip.org>
+ 
+ 	PR libstdc++/117404
+ 	* include/bits/version.def (associative_heterogeneous_erasure):
+ 	Define.
+ 	* include/bits/version.h: Regenerate.
+ 	* include/std/map: Request new feature from version.h.
+ 	* include/std/set: Same.
+ 	* include/std/unordered_map: Same.
+ 	* include/std/unordered_set: Same.
+ 	* include/bits/stl_map.h (extract, erase): Define overloads.
+ 	* include/bits/stl_set.h: Same.
+ 	* include/bits/stl_multimap.h: Same.
+ 	* include/bits/stl_multiset.h: Same.
+ 	* include/bits/unordered_map.h: Same, 2x.
+ 	* include/bits/unordered_set.h: Same, 2x.
+ 	* include/bits/stl_function.h (concepts __not_container_iterator,
+ 	__heterogeneous_key): Define.
+ 	* include/bits/hashtable.h (_M_find_before_node, _M_locate, extract):
+ 	Delegate to more-general _tr version.
+ 	(_M_find_before_node_tr, _M_locate_tr, _M_extract_tr, _M_erase_tr):
+ 	Add new members to support a heterogeneous key argument.
+ 	(_M_erase_some): Add new helper function.
+ 	(concept __heterogeneous_hash_key): Define.
+ 	* include/bits/stl_tree.h (_M_lower_bound_tr, _M_upper_bound_tr,
+ 	_M_erase_tr, _M_extract_tr): Add new members to support a
+ 	heterogeneous key argument.
+ 	(concept __heterogeneous_tree_key): Define.
+ 	* testsuite/23_containers/map/modifiers/hetero/erase.cc: New test.
+ 	* testsuite/23_containers/multimap/modifiers/hetero/erase.cc: Same.
+ 	* testsuite/23_containers/multiset/modifiers/hetero/erase.cc: Same.
+ 	* testsuite/23_containers/set/modifiers/hetero/erase.cc: Same.
+ 	* testsuite/23_containers/unordered_map/modifiers/hetero/erase.cc: Same.
+ 	* testsuite/23_containers/unordered_multimap/modifiers/hetero/erase.cc:
+ 	Same.
+ 	* testsuite/23_containers/unordered_multiset/modifiers/hetero/erase.cc:
+ 	Same.
+ 	* testsuite/23_containers/unordered_set/modifiers/hetero/erase.cc: Same.
+ 
+ 2026-02-03  Marek Polacek  <polacek@redhat.com>
+ 
+ 	* include/bits/new_allocator.h (__new_allocator::allocate,
+ 	__new_allocator::deallocate): Add missing constexpr.
+ 
+ 2026-02-03  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR libstdc++/123921
+ 	* include/bits/version.def (define_static): New with the
+ 	same values as reflection.
+ 	* include/bits/version.h: Regenerate.
+ 	* include/std/meta: Define also __glibcxx_want_define_static before
+ 	including bits/version.h.
+ 
+ 2026-02-02  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	* include/bits/regex_executor.tcc (_ExecutorFrameBase):
+ 	Zero-initialize _M_byte0.
+ 	(_ExecutorFrameBase::_M_end): Rename to ...
+ 	(_ExecutorFrameBase::_M_subexpr_end): ... this.
+ 	(_Executor::_M_handle_subexpr_begin): Remove now redundant
+ 	clearing of _M_subexpr_end.
+ 	(_Executor::_M_handle_subexpr_end): Adjust after renaming.
+ 	(_Executor::_M_dfs) <case _S_fopcode_restore_cur_results>:
+ 	Likewise.
+ 
  2026-01-31  Patrick Palka  <ppalka@redhat.com>
  
  	* include/bits/regex_executor.tcc (_ExecutorFrameBase): Add
diff -Nrcpad gcc-16-20260201/libstdc++-v3/acinclude.m4 gcc-16-20260208/libstdc++-v3/acinclude.m4
*** gcc-16-20260201/libstdc++-v3/acinclude.m4	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libstdc++-v3/acinclude.m4	Sun Feb  8 22:32:17 2026
*************** EOF
*** 5318,5324 ****
  
      AC_MSG_CHECKING([for atomic builtins for libbacktrace])
      if AC_TRY_EVAL(ac_compile); then
!       if grep __atomic_ conftest.s >/dev/null 2>&1 ; then
  	glibcxx_cv_libbacktrace_atomics=no
        else
  	glibcxx_cv_libbacktrace_atomics=yes
--- 5318,5324 ----
  
      AC_MSG_CHECKING([for atomic builtins for libbacktrace])
      if AC_TRY_EVAL(ac_compile); then
!       if grep -E '__atomic_|__sync_' conftest.s >/dev/null 2>&1 ; then
  	glibcxx_cv_libbacktrace_atomics=no
        else
  	glibcxx_cv_libbacktrace_atomics=yes
diff -Nrcpad gcc-16-20260201/libstdc++-v3/configure gcc-16-20260208/libstdc++-v3/configure
*** gcc-16-20260201/libstdc++-v3/configure	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libstdc++-v3/configure	Sun Feb  8 22:32:20 2026
*************** $as_echo_n "checking for atomic builtins
*** 54172,54178 ****
    ac_status=$?
    $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
    test $ac_status = 0; }; then
!       if grep __atomic_ conftest.s >/dev/null 2>&1 ; then
  	glibcxx_cv_libbacktrace_atomics=no
        else
  	glibcxx_cv_libbacktrace_atomics=yes
--- 54172,54178 ----
    ac_status=$?
    $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
    test $ac_status = 0; }; then
!       if grep -E '__atomic_|__sync_' conftest.s >/dev/null 2>&1 ; then
  	glibcxx_cv_libbacktrace_atomics=no
        else
  	glibcxx_cv_libbacktrace_atomics=yes
diff -Nrcpad gcc-16-20260201/libstdc++-v3/include/bits/hashtable.h gcc-16-20260208/libstdc++-v3/include/bits/hashtable.h
*** gcc-16-20260201/libstdc++-v3/include/bits/hashtable.h	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libstdc++-v3/include/bits/hashtable.h	Sun Feb  8 22:32:17 2026
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 853,859 ****
  
        // Find the node before the one matching the criteria.
        __node_base_ptr
!       _M_find_before_node(size_type, const key_type&, __hash_code) const;
  
        template<typename _Kt>
  	__node_base_ptr
--- 853,861 ----
  
        // Find the node before the one matching the criteria.
        __node_base_ptr
!       _M_find_before_node(
! 	size_type __bkt, const key_type& __k, __hash_code __code) const
!       { return _M_find_before_node_tr<key_type>(__bkt, __k, __code); }
  
        template<typename _Kt>
  	__node_base_ptr
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 902,909 ****
        // The _M_before pointer might point to _M_before_begin, so must not be
        // cast to __node_ptr, and it must not be used to modify *_M_before
        // except in non-const member functions, such as erase.
        __location_type
!       _M_locate(const key_type& __k) const;
  
        __node_ptr
        _M_find_node(size_type __bkt, const key_type& __key,
--- 904,917 ----
        // The _M_before pointer might point to _M_before_begin, so must not be
        // cast to __node_ptr, and it must not be used to modify *_M_before
        // except in non-const member functions, such as erase.
+ 
        __location_type
!       _M_locate(const key_type& __k) const
!       { return _M_locate_tr<key_type>(__k); }
! 
!       template <typename _Kt>
! 	__location_type
! 	_M_locate_tr(const _Kt& __k) const;
  
        __node_ptr
        _M_find_node(size_type __bkt, const key_type& __key,
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 1016,1021 ****
--- 1024,1032 ----
        iterator
        _M_erase(size_type __bkt, __node_base_ptr __prev_n, __node_ptr __n);
  
+       size_type
+       _M_erase_some(size_type __bkt, __node_base_ptr __prev_n, __node_ptr __n);
+ 
        template<typename _InputIterator>
  	void
  	_M_insert_range_multi(_InputIterator __first, _InputIterator __last);
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 1163,1168 ****
--- 1174,1183 ----
        size_type
        erase(const key_type& __k);
  
+       template <typename _Kt>
+ 	size_type
+ 	_M_erase_tr(const _Kt& __k);
+ 
        iterator
        erase(const_iterator, const_iterator);
  
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 1274,1287 ****
        /// Extract a node.
        node_type
        extract(const _Key& __k)
!       {
! 	node_type __nh;
! 	__hash_code __code = this->_M_hash_code(__k);
! 	std::size_t __bkt = _M_bucket_index(__code);
! 	if (__node_base_ptr __prev_node = _M_find_before_node(__bkt, __k, __code))
! 	  __nh = _M_extract_node(__bkt, __prev_node);
! 	return __nh;
!       }
  
        /// Merge from another container of the same type.
        void
--- 1289,1308 ----
        /// Extract a node.
        node_type
        extract(const _Key& __k)
!       { return _M_extract_tr<_Key>(__k); }
! 
!       template <typename _Kt>
! 	node_type
! 	_M_extract_tr(const _Kt& __k)
! 	{
! 	  node_type __nh;
! 	  __hash_code __code = this->_M_hash_code_tr(__k);
! 	  std::size_t __bkt = _M_bucket_index(__code);
! 	  if (__node_base_ptr __prev_node =
! 	      _M_find_before_node_tr(__bkt, __k, __code))
! 	    __nh = _M_extract_node(__bkt, __prev_node);
! 	  return __nh;
! 	}
  
        /// Merge from another container of the same type.
        void
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 2198,2232 ****
  	   typename _ExtractKey, typename _Equal,
  	   typename _Hash, typename _RangeHash, typename _Unused,
  	   typename _RehashPolicy, typename _Traits>
-     auto
-     _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
- 	       _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
-     _M_find_before_node(size_type __bkt, const key_type& __k,
- 			__hash_code __code) const
-     -> __node_base_ptr
-     {
-       __node_base_ptr __prev_p = _M_buckets[__bkt];
-       if (!__prev_p)
- 	return nullptr;
- 
-       for (__node_ptr __p = static_cast<__node_ptr>(__prev_p->_M_nxt);;
- 	   __p = __p->_M_next())
- 	{
- 	  if (this->_M_equals(__k, __code, *__p))
- 	    return __prev_p;
- 
- 	  if (__builtin_expect (!__p->_M_nxt || _M_bucket_index(*__p->_M_next()) != __bkt, 0))
- 	    break;
- 	  __prev_p = __p;
- 	}
- 
-       return nullptr;
-     }
- 
-   template<typename _Key, typename _Value, typename _Alloc,
- 	   typename _ExtractKey, typename _Equal,
- 	   typename _Hash, typename _RangeHash, typename _Unused,
- 	   typename _RehashPolicy, typename _Traits>
      template<typename _Kt>
        auto
        _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
--- 2219,2224 ----
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 2245,2251 ****
  	    if (this->_M_equals_tr(__k, __code, *__p))
  	      return __prev_p;
  
! 	    if (__builtin_expect (!__p->_M_nxt || _M_bucket_index(*__p->_M_next()) != __bkt, 0))
  	      break;
  	    __prev_p = __p;
  	  }
--- 2237,2244 ----
  	    if (this->_M_equals_tr(__k, __code, *__p))
  	      return __prev_p;
  
! 	    if (__builtin_expect (
! 		  !__p->_M_nxt || _M_bucket_index(*__p->_M_next()) != __bkt, 0))
  	      break;
  	    __prev_p = __p;
  	  }
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 2257,2293 ****
  	   typename _ExtractKey, typename _Equal,
  	   typename _Hash, typename _RangeHash, typename _Unused,
  	   typename _RehashPolicy, typename _Traits>
!     inline auto
!     _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
! 	       _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
!     _M_locate(const key_type& __k) const
!     -> __location_type
!     {
!       __location_type __loc;
!       const auto __size = size();
  
!       if (__size <= __small_size_threshold())
! 	{
! 	  __loc._M_before = pointer_traits<__node_base_ptr>::
! 	       pointer_to(const_cast<__node_base&>(_M_before_begin));
! 	  while (__loc._M_before->_M_nxt)
! 	    {
! 	      if (this->_M_key_equals(__k, *__loc._M_node()))
! 		return __loc;
! 	      __loc._M_before = __loc._M_before->_M_nxt;
! 	    }
! 	  __loc._M_before = nullptr; // Didn't find it.
! 	}
  
!       __loc._M_hash_code = this->_M_hash_code(__k);
!       __loc._M_bucket_index = _M_bucket_index(__loc._M_hash_code);
  
!       if (__size > __small_size_threshold())
! 	__loc._M_before = _M_find_before_node(__loc._M_bucket_index, __k,
! 					      __loc._M_hash_code);
  
!       return __loc;
!     }
  
    template<typename _Key, typename _Value, typename _Alloc,
  	   typename _ExtractKey, typename _Equal,
--- 2250,2287 ----
  	   typename _ExtractKey, typename _Equal,
  	   typename _Hash, typename _RangeHash, typename _Unused,
  	   typename _RehashPolicy, typename _Traits>
!     template <typename _Kt>
!       inline auto
!       _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
! 		 _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
!       _M_locate_tr(const _Kt& __k) const
! 	-> __location_type
!       {
! 	__location_type __loc;
! 	const auto __size = size();
  
! 	if (__size <= __small_size_threshold())
! 	  {
! 	    __loc._M_before = pointer_traits<__node_base_ptr>::
! 		 pointer_to(const_cast<__node_base&>(_M_before_begin));
! 	    while (__loc._M_before->_M_nxt)
! 	      {
! 		if (this->_M_key_equals_tr(__k, *__loc._M_node()))
! 		  return __loc;
! 		__loc._M_before = __loc._M_before->_M_nxt;
! 	      }
! 	    __loc._M_before = nullptr; // Didn't find it.
! 	  }
  
! 	__loc._M_hash_code = this->_M_hash_code_tr(__k);
! 	__loc._M_bucket_index = _M_bucket_index(__loc._M_hash_code);
  
! 	if (__size > __small_size_threshold())
! 	  __loc._M_before = _M_find_before_node_tr(
! 	    __loc._M_bucket_index, __k, __loc._M_hash_code);
  
! 	return __loc;
!       }
  
    template<typename _Key, typename _Value, typename _Alloc,
  	   typename _ExtractKey, typename _Equal,
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 2598,2603 ****
--- 2592,2598 ----
  
  #pragma GCC diagnostic push
  #pragma GCC diagnostic ignored "-Wc++17-extensions" // if constexpr
+ 
    template<typename _Key, typename _Value, typename _Alloc,
  	   typename _ExtractKey, typename _Equal,
  	   typename _Hash, typename _RangeHash, typename _Unused,
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 2617,2663 ****
        auto __bkt = __loc._M_bucket_index;
        if (__bkt == size_type(-1))
  	__bkt = _M_bucket_index(*__n);
- 
        if constexpr (__unique_keys::value)
  	{
  	  _M_erase(__bkt, __prev_n, __n);
  	  return 1;
  	}
        else
! 	{
! 	  // _GLIBCXX_RESOLVE_LIB_DEFECTS
! 	  // 526. Is it undefined if a function in the standard changes
! 	  // in parameters?
! 	  // We use one loop to find all matching nodes and another to
! 	  // deallocate them so that the key stays valid during the first loop.
! 	  // It might be invalidated indirectly when destroying nodes.
! 	  __node_ptr __n_last = __n->_M_next();
! 	  while (__n_last && this->_M_node_equals(*__n, *__n_last))
! 	    __n_last = __n_last->_M_next();
  
! 	  std::size_t __n_last_bkt
! 	    = __n_last ? _M_bucket_index(*__n_last) : __bkt;
  
! 	  // Deallocate nodes.
! 	  size_type __result = 0;
! 	  do
! 	    {
! 	      __node_ptr __p = __n->_M_next();
! 	      this->_M_deallocate_node(__n);
! 	      __n = __p;
! 	      ++__result;
! 	    }
! 	  while (__n != __n_last);
  
! 	  _M_element_count -= __result;
! 	  if (__prev_n == _M_buckets[__bkt])
! 	    _M_remove_bucket_begin(__bkt, __n_last, __n_last_bkt);
! 	  else if (__n_last_bkt != __bkt)
! 	    _M_buckets[__n_last_bkt] = __prev_n;
! 	  __prev_n->_M_nxt = __n_last;
! 	  return __result;
  	}
      }
  #pragma GCC diagnostic pop
  
    template<typename _Key, typename _Value, typename _Alloc,
--- 2612,2698 ----
        auto __bkt = __loc._M_bucket_index;
        if (__bkt == size_type(-1))
  	__bkt = _M_bucket_index(*__n);
        if constexpr (__unique_keys::value)
  	{
  	  _M_erase(__bkt, __prev_n, __n);
  	  return 1;
  	}
        else
! 	return _M_erase_some(__bkt, __prev_n, __n);
!     }
  
!   template<typename _Key, typename _Value, typename _Alloc,
! 	   typename _ExtractKey, typename _Equal,
! 	   typename _Hash, typename _RangeHash, typename _Unused,
! 	   typename _RehashPolicy, typename _Traits>
!     auto
!     _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
! 	       _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
!     _M_erase_some(size_type __bkt, __node_base_ptr __prev_n, __node_ptr __n)
!       -> size_type
!     {
!       // _GLIBCXX_RESOLVE_LIB_DEFECTS
!       // 526. Is it undefined if a function in the standard changes
!       // in parameters?
!       // We use one loop to find all matching nodes and another to
!       // deallocate them so that the key stays valid during the first loop.
!       // It might be invalidated indirectly when destroying nodes.
!       __node_ptr __n_last = __n->_M_next();
!       while (__n_last && this->_M_node_equals(*__n, *__n_last))
! 	__n_last = __n_last->_M_next();
  
!       std::size_t __n_last_bkt
! 	= __n_last ? _M_bucket_index(*__n_last) : __bkt;
  
!       // Deallocate nodes.
!       size_type __result = 0;
!       do
! 	{
! 	  __node_ptr __p = __n->_M_next();
! 	  this->_M_deallocate_node(__n);
! 	  __n = __p;
! 	  ++__result;
  	}
+       while (__n != __n_last);
+ 
+       _M_element_count -= __result;
+       if (__prev_n == _M_buckets[__bkt])
+ 	_M_remove_bucket_begin(__bkt, __n_last, __n_last_bkt);
+       else if (__n_last_bkt != __bkt)
+ 	_M_buckets[__n_last_bkt] = __prev_n;
+       __prev_n->_M_nxt = __n_last;
+       return __result;
      }
+ 
+   template<typename _Key, typename _Value, typename _Alloc,
+ 	   typename _ExtractKey, typename _Equal,
+ 	   typename _Hash, typename _RangeHash, typename _Unused,
+ 	   typename _RehashPolicy, typename _Traits>
+     template <typename _Kt>
+       auto
+       _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+ 		 _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+       _M_erase_tr(const _Kt& __k)
+ 	-> size_type
+       {
+ 	auto __loc = _M_locate_tr(__k);
+ 	if (!__loc)
+ 	  return 0;
+ 
+ 	__node_base_ptr __prev_n = __loc._M_before;
+ 	__node_ptr __n = __loc._M_node();
+ 	auto __bkt = __loc._M_bucket_index;
+ 	if (__bkt == size_type(-1))
+ 	  __bkt = _M_bucket_index(*__n);
+ 	if constexpr (__unique_keys::value)
+ 	  {
+ 	    _M_erase(__bkt, __prev_n, __n);
+ 	    return 1;
+ 	  }
+ 	else
+ 	  return _M_erase_some(__bkt, __prev_n, __n);
+       }
+ 
  #pragma GCC diagnostic pop
  
    template<typename _Key, typename _Value, typename _Alloc,
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 2977,2982 ****
--- 3012,3025 ----
        = __enable_if_t<!__or_<is_integral<_Hash>, __is_allocator<_Hash>>::value>;
  #endif
  
+ #ifdef __glibcxx_associative_heterogeneous_erasure // C++ >= 23
+ template <typename _Kt, typename _Container>
+   concept __heterogeneous_hash_key =
+     __transparent_comparator<typename _Container::hasher> &&
+     __transparent_comparator<typename _Container::key_equal> &&
+     __heterogeneous_key<_Kt, _Container>;
+ #endif
+ 
  /// @endcond
  _GLIBCXX_END_NAMESPACE_VERSION
  } // namespace std
diff -Nrcpad gcc-16-20260201/libstdc++-v3/include/bits/new_allocator.h gcc-16-20260208/libstdc++-v3/include/bits/new_allocator.h
*** gcc-16-20260201/libstdc++-v3/include/bits/new_allocator.h	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libstdc++-v3/include/bits/new_allocator.h	Sun Feb  8 22:32:17 2026
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 122,128 ****
  
        // NB: __n is permitted to be 0.  The C++ standard says nothing
        // about what the return value is when __n == 0.
!       _GLIBCXX_NODISCARD _Tp*
        allocate(size_type __n, const void* = static_cast<const void*>(0))
        {
  #if __cplusplus >= 201103L
--- 122,128 ----
  
        // NB: __n is permitted to be 0.  The C++ standard says nothing
        // about what the return value is when __n == 0.
!       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR _Tp*
        allocate(size_type __n, const void* = static_cast<const void*>(0))
        {
  #if __cplusplus >= 201103L
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 152,158 ****
        }
  
        // __p is not permitted to be a null pointer.
!       void
        deallocate(_Tp* __p, size_type __n __attribute__ ((__unused__)))
        {
  #if __cpp_sized_deallocation
--- 152,158 ----
        }
  
        // __p is not permitted to be a null pointer.
!       _GLIBCXX20_CONSTEXPR void
        deallocate(_Tp* __p, size_type __n __attribute__ ((__unused__)))
        {
  #if __cpp_sized_deallocation
diff -Nrcpad gcc-16-20260201/libstdc++-v3/include/bits/regex.tcc gcc-16-20260208/libstdc++-v3/include/bits/regex.tcc
*** gcc-16-20260201/libstdc++-v3/include/bits/regex.tcc	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libstdc++-v3/include/bits/regex.tcc	Sun Feb  8 22:32:17 2026
*************** namespace __detail
*** 125,131 ****
        typedef std::ctype<char_type> __ctype_type;
        const __ctype_type& __fctyp(use_facet<__ctype_type>(_M_locale));
  
!       static const char* __collatenames[] =
  	{
  	  "NUL",
  	  "SOH",
--- 125,131 ----
        typedef std::ctype<char_type> __ctype_type;
        const __ctype_type& __fctyp(use_facet<__ctype_type>(_M_locale));
  
!       static const char* const __collatenames[] =
  	{
  	  "NUL",
  	  "SOH",
diff -Nrcpad gcc-16-20260201/libstdc++-v3/include/bits/regex_executor.tcc gcc-16-20260208/libstdc++-v3/include/bits/regex_executor.tcc
*** gcc-16-20260201/libstdc++-v3/include/bits/regex_executor.tcc	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libstdc++-v3/include/bits/regex_executor.tcc	Sun Feb  8 22:32:17 2026
*************** _GLIBCXX_BEGIN_INLINE_ABI_NAMESPACE(_V2)
*** 79,90 ****
  
      _ExecutorFrameOpcode _M_op;
      union {
!       unsigned char _M_byte0;
        struct { // Used by restore_rep_count frame
  	unsigned char _M_count : 2;
        };
        struct { // Used by restore_cur_results frame
! 	unsigned char _M_end : 1;
  	unsigned char _M_matched : 1;
        };
      };
--- 79,90 ----
  
      _ExecutorFrameOpcode _M_op;
      union {
!       unsigned char _M_byte0 = 0;
        struct { // Used by restore_rep_count frame
  	unsigned char _M_count : 2;
        };
        struct { // Used by restore_cur_results frame
! 	unsigned char _M_subexpr_end : 1;
  	unsigned char _M_matched : 1;
        };
      };
*************** _GLIBCXX_BEGIN_INLINE_ABI_NAMESPACE(_V2)
*** 338,344 ****
        _M_frames.emplace_back(_S_fopcode_restore_cur_results,
  			     static_cast<_StateIdT>(__state._M_subexpr),
  			     __res.first);
-       _M_frames.back()._M_end = false;
        __res.first = _M_current;
        _M_frames.emplace_back(_S_fopcode_next, __state._M_next);
      }
--- 338,343 ----
*************** _GLIBCXX_BEGIN_INLINE_ABI_NAMESPACE(_V2)
*** 353,359 ****
        _M_frames.emplace_back(_S_fopcode_restore_cur_results,
  			     static_cast<_StateIdT>(__state._M_subexpr),
  			     __res.second);
!       _M_frames.back()._M_end = true;
        _M_frames.back()._M_matched = __res.matched;
        __res.second = _M_current;
        __res.matched = true;
--- 352,358 ----
        _M_frames.emplace_back(_S_fopcode_restore_cur_results,
  			     static_cast<_StateIdT>(__state._M_subexpr),
  			     __res.second);
!       _M_frames.back()._M_subexpr_end = true;
        _M_frames.back()._M_matched = __res.matched;
        __res.second = _M_current;
        __res.matched = true;
*************** _GLIBCXX_BEGIN_INLINE_ABI_NAMESPACE(_V2)
*** 670,676 ****
  	      break;
  
  	    case _S_fopcode_restore_cur_results:
! 	      if (!__frame._M_end)
  		_M_cur_results[__frame._M_state_id].first = __frame._M_pos;
  	      else
  		{
--- 669,675 ----
  	      break;
  
  	    case _S_fopcode_restore_cur_results:
! 	      if (!__frame._M_subexpr_end)
  		_M_cur_results[__frame._M_state_id].first = __frame._M_pos;
  	      else
  		{
diff -Nrcpad gcc-16-20260201/libstdc++-v3/include/bits/stl_function.h gcc-16-20260208/libstdc++-v3/include/bits/stl_function.h
*** gcc-16-20260201/libstdc++-v3/include/bits/stl_function.h	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libstdc++-v3/include/bits/stl_function.h	Sun Feb  8 22:32:17 2026
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 1525,1530 ****
--- 1525,1542 ----
  #endif
  #endif
  
+ #ifdef __glibcxx_associative_heterogeneous_erasure // C++ >= 23
+ template <typename _Kt, typename _Container>
+   concept __not_container_iterator =
+     (!is_convertible_v<_Kt&&, typename _Container::iterator> &&
+      !is_convertible_v<_Kt&&, typename _Container::const_iterator>);
+ 
+ template <typename _Kt, typename _Container>
+   concept __heterogeneous_key =
+     (!is_same_v<typename _Container::key_type, remove_cvref_t<_Kt>>) &&
+     __not_container_iterator<_Kt, _Container>;
+ #endif
+ 
  _GLIBCXX_END_NAMESPACE_VERSION
  } // namespace
  
diff -Nrcpad gcc-16-20260201/libstdc++-v3/include/bits/stl_map.h gcc-16-20260208/libstdc++-v3/include/bits/stl_map.h
*** gcc-16-20260201/libstdc++-v3/include/bits/stl_map.h	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libstdc++-v3/include/bits/stl_map.h	Sun Feb  8 22:32:17 2026
***************
*** 65,70 ****
--- 65,71 ----
  #if __glibcxx_containers_ranges // C++ >= 23
  # include <bits/ranges_base.h> // ranges::begin, ranges::distance etc.
  #endif
+ // #include <stl_tree.h>  // done in std/map
  
  namespace std _GLIBCXX_VISIBILITY(default)
  {
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 679,684 ****
--- 680,692 ----
        extract(const key_type& __x)
        { return _M_t.extract(__x); }
  
+ #ifdef __glibcxx_associative_heterogeneous_erasure // C++23
+       template <__heterogeneous_tree_key<map> _Kt>
+ 	node_type
+ 	extract(_Kt&& __key)
+ 	{ return _M_t._M_extract_tr(__key); }
+ #endif
+ 
        /// Re-insert an extracted node.
        insert_return_type
        insert(node_type&& __nh)
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 1143,1148 ****
--- 1151,1157 ----
        { _M_t.erase(__position); }
  #endif
  
+       ///@{
        /**
         *  @brief Erases elements according to the provided key.
         *  @param  __x  Key of element to be erased.
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 1158,1163 ****
--- 1167,1183 ----
        erase(const key_type& __x)
        { return _M_t._M_erase_unique(__x); }
  
+ #ifdef __glibcxx_associative_heterogeneous_erasure // C++23
+       // Note that for some types _Kt this may erase more than
+       // one element, such as if _Kt::operator< checks only part
+       // of the key.
+       template <__heterogeneous_tree_key<map> _Kt>
+ 	size_type
+ 	erase(_Kt&& __x)
+ 	{ return _M_t._M_erase_tr(__x); }
+ #endif
+       ///@}
+ 
  #if __cplusplus >= 201103L
        // _GLIBCXX_RESOLVE_LIB_DEFECTS
        // DR 130. Associative erase should return an iterator.
diff -Nrcpad gcc-16-20260201/libstdc++-v3/include/bits/stl_multimap.h gcc-16-20260208/libstdc++-v3/include/bits/stl_multimap.h
*** gcc-16-20260201/libstdc++-v3/include/bits/stl_multimap.h	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libstdc++-v3/include/bits/stl_multimap.h	Sun Feb  8 22:32:17 2026
***************
*** 63,68 ****
--- 63,69 ----
  #if __glibcxx_containers_ranges // C++ >= 23
  # include <bits/ranges_base.h> // ranges::begin, ranges::distance etc.
  #endif
+ // #include <bits/stl_tree.h>  // done in std/map
  
  namespace std _GLIBCXX_VISIBILITY(default)
  {
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 688,693 ****
--- 689,701 ----
        extract(const key_type& __x)
        { return _M_t.extract(__x); }
  
+ #ifdef __glibcxx_associative_heterogeneous_erasure // C++23
+       template <__heterogeneous_tree_key<multimap> _Kt>
+ 	node_type
+ 	extract(_Kt&& __key)
+ 	{ return _M_t._M_extract_tr(__key); }
+ #endif
+ 
        /// Re-insert an extracted node.
        iterator
        insert(node_type&& __nh)
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 787,792 ****
--- 795,807 ----
        erase(const key_type& __x)
        { return _M_t.erase(__x); }
  
+ #ifdef __glibcxx_associative_heterogeneous_erasure // C++23
+       template <__heterogeneous_tree_key<multimap> _Kt>
+ 	size_type
+ 	erase(_Kt&& __key)
+ 	{ return _M_t._M_erase_tr(__key); }
+ #endif
+ 
  #if __cplusplus >= 201103L
        // _GLIBCXX_RESOLVE_LIB_DEFECTS
        // DR 130. Associative erase should return an iterator.
diff -Nrcpad gcc-16-20260201/libstdc++-v3/include/bits/stl_multiset.h gcc-16-20260208/libstdc++-v3/include/bits/stl_multiset.h
*** gcc-16-20260201/libstdc++-v3/include/bits/stl_multiset.h	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libstdc++-v3/include/bits/stl_multiset.h	Sun Feb  8 22:32:17 2026
***************
*** 63,68 ****
--- 63,69 ----
  #if __glibcxx_containers_ranges // C++ >= 23
  # include <bits/ranges_base.h> // ranges::begin, ranges::distance etc.
  #endif
+ // #include <bits/stl_tree.h>  // done in std/set
  
  namespace std _GLIBCXX_VISIBILITY(default)
  {
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 621,626 ****
--- 622,634 ----
        extract(const key_type& __x)
        { return _M_t.extract(__x); }
  
+ #ifdef __glibcxx_associative_heterogeneous_erasure // C++23
+       template <__heterogeneous_tree_key<multiset> _Kt>
+ 	node_type
+ 	extract(_Kt&& __key)
+ 	{ return _M_t._M_extract_tr(__key); }
+ #endif
+ 
        /// Re-insert an extracted node.
        iterator
        insert(node_type&& __nh)
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 712,717 ****
--- 720,732 ----
        erase(const key_type& __x)
        { return _M_t.erase(__x); }
  
+ #ifdef __glibcxx_associative_heterogeneous_erasure // C++23
+       template <__heterogeneous_tree_key<multiset> _Kt>
+ 	size_type
+ 	erase(_Kt&& __key)
+ 	{ return _M_t._M_erase_tr(__key); }
+ #endif
+ 
  #if __cplusplus >= 201103L
        // _GLIBCXX_RESOLVE_LIB_DEFECTS
        // DR 130. Associative erase should return an iterator.
diff -Nrcpad gcc-16-20260201/libstdc++-v3/include/bits/stl_set.h gcc-16-20260208/libstdc++-v3/include/bits/stl_set.h
*** gcc-16-20260201/libstdc++-v3/include/bits/stl_set.h	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libstdc++-v3/include/bits/stl_set.h	Sun Feb  8 22:32:17 2026
***************
*** 63,68 ****
--- 63,69 ----
  #if __glibcxx_containers_ranges // C++ >= 23
  # include <bits/ranges_base.h> // ranges::begin, ranges::distance etc.
  #endif
+ // #include <bits/stl_tree.h>  // done in std/set
  
  namespace std _GLIBCXX_VISIBILITY(default)
  {
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 639,644 ****
--- 640,652 ----
        extract(const key_type& __x)
        { return _M_t.extract(__x); }
  
+ #ifdef __glibcxx_associative_heterogeneous_erasure // C++23
+       template <__heterogeneous_tree_key<set> _Kt>
+ 	node_type
+ 	extract(_Kt&& __key)
+ 	{ return _M_t._M_extract_tr(__key); }
+ #endif
+ 
        /// Re-insert an extracted node.
        insert_return_type
        insert(node_type&& __nh)
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 730,735 ****
--- 738,753 ----
        erase(const key_type& __x)
        { return _M_t._M_erase_unique(__x); }
  
+ #ifdef __glibcxx_associative_heterogeneous_erasure // C++23
+       // Note that for some types _Kt this may erase more than
+       // one element, such as if _Kt::operator< checks only part
+       // of the key.
+       template <__heterogeneous_tree_key<set> _Kt>
+ 	size_type
+ 	erase(_Kt&& __key)
+ 	{ return _M_t._M_erase_tr(__key); }
+ #endif
+ 
  #if __cplusplus >= 201103L
        // _GLIBCXX_RESOLVE_LIB_DEFECTS
        // DR 130. Associative erase should return an iterator.
diff -Nrcpad gcc-16-20260201/libstdc++-v3/include/bits/stl_tree.h gcc-16-20260208/libstdc++-v3/include/bits/stl_tree.h
*** gcc-16-20260201/libstdc++-v3/include/bits/stl_tree.h	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libstdc++-v3/include/bits/stl_tree.h	Sun Feb  8 22:32:17 2026
*************** namespace __rb_tree
*** 1400,1406 ****
  	  // Enforce this here with a user-friendly message.
  	  static_assert(
  	    __is_invocable<const _Compare&, const _Key&, const _Key&>::value,
! 	    "comparison object must be invocable with two arguments of key type"
  	  );
  #endif
  	  return _M_impl._M_key_compare(__k1, __k2);
--- 1400,1406 ----
  	  // Enforce this here with a user-friendly message.
  	  static_assert(
  	    __is_invocable<const _Compare&, const _Key&, const _Key&>::value,
! 	    "comparison object must be invocable with arguments of key_type"
  	  );
  #endif
  	  return _M_impl._M_key_compare(__k1, __k2);
*************** namespace __rb_tree
*** 1539,1548 ****
--- 1539,1556 ----
        _M_lower_bound(_Base_ptr __x, _Base_ptr __y,
  		     const _Key& __k) const;
  
+       template <typename _Kt>
+ 	_Base_ptr
+ 	_M_lower_bound_tr(_Base_ptr __x, _Base_ptr __y, const _Kt& __k) const;
+ 
        _Base_ptr
        _M_upper_bound(_Base_ptr __x, _Base_ptr __y,
  		     const _Key& __k) const;
  
+       template <typename _Kt>
+ 	_Base_ptr
+ 	_M_upper_bound_tr(_Base_ptr __x, _Base_ptr __y, const _Kt& __k) const;
+ 
      public:
        // allocation/deallocation
  #if __cplusplus < 201103L
*************** namespace __rb_tree
*** 1850,1855 ****
--- 1858,1867 ----
        size_type
        erase(const key_type& __x);
  
+       template <typename _Kt>
+ 	size_type
+ 	_M_erase_tr(const _Kt& __x);
+ 
        size_type
        _M_erase_unique(const key_type& __x);
  
*************** namespace __rb_tree
*** 2198,2203 ****
--- 2210,2226 ----
  	return __nh;
        }
  
+       template <typename _Kt>
+ 	node_type
+ 	_M_extract_tr(const _Kt& __k)
+ 	{
+ 	  node_type __nh;
+ 	  auto __pos = _M_find_tr(__k);
+ 	  if (__pos != end())
+ 	    __nh = extract(const_iterator(__pos));
+ 	  return __nh;
+ 	}
+ 
        template<typename _Compare2>
  	using _Compatible_tree
  	  = _Rb_tree<_Key, _Val, _KeyOfValue, _Compare2, _Alloc>;
*************** namespace __rb_tree
*** 2613,2618 ****
--- 2636,2656 ----
      }
  
    template<typename _Key, typename _Val, typename _KeyOfValue,
+ 	typename _Compare, typename _Alloc>
+     template <typename _Kt>
+       typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_Base_ptr
+       _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+       _M_lower_bound_tr(_Base_ptr __x, _Base_ptr __y, const _Kt& __k) const
+       {
+ 	while (__x)
+ 	  if (!_M_key_compare(_S_key(__x), __k))
+ 	    __y = __x, __x = _S_left(__x);
+ 	  else
+ 	    __x = _S_right(__x);
+ 	return __y;
+       }
+ 
+   template<typename _Key, typename _Val, typename _KeyOfValue,
  	   typename _Compare, typename _Alloc>
      typename _Rb_tree<_Key, _Val, _KeyOfValue,
  		      _Compare, _Alloc>::_Base_ptr
*************** namespace __rb_tree
*** 2630,2635 ****
--- 2668,2688 ----
  
    template<typename _Key, typename _Val, typename _KeyOfValue,
  	   typename _Compare, typename _Alloc>
+     template <typename _Kt>
+       typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_Base_ptr
+       _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+       _M_upper_bound_tr(_Base_ptr __x, _Base_ptr __y, const _Kt& __k) const
+       {
+ 	while (__x)
+ 	  if (_M_key_compare(__k, _S_key(__x)))
+ 	    __y = __x, __x = _S_left(__x);
+ 	  else
+ 	    __x = _S_right(__x);
+ 	return __y;
+       }
+ 
+   template<typename _Key, typename _Val, typename _KeyOfValue,
+ 	   typename _Compare, typename _Alloc>
      pair<typename _Rb_tree<_Key, _Val, _KeyOfValue,
  			   _Compare, _Alloc>::iterator,
  	 typename _Rb_tree<_Key, _Val, _KeyOfValue,
*************** namespace __rb_tree
*** 3144,3149 ****
--- 3197,3215 ----
  
    template<typename _Key, typename _Val, typename _KeyOfValue,
  	   typename _Compare, typename _Alloc>
+     template <typename _Kt>
+       typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::size_type
+       _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+       _M_erase_tr(const _Kt& __x)
+       {
+ 	pair<iterator, iterator> __p = _M_equal_range_tr(__x);
+ 	const size_type __old_size = size();
+ 	_M_erase_aux(__p.first, __p.second);
+ 	return __old_size - size();
+       }
+ 
+   template<typename _Key, typename _Val, typename _KeyOfValue,
+ 	   typename _Compare, typename _Alloc>
      typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::size_type
      _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
      _M_erase_unique(const _Key& __x)
*************** namespace __rb_tree
*** 3249,3254 ****
--- 3315,3327 ----
      };
  #endif // C++17
  
+ #ifdef __glibcxx_associative_heterogeneous_erasure // C++ >= 23
+ template <typename _Kt, typename _Container>
+   concept __heterogeneous_tree_key =
+     __transparent_comparator<typename _Container::key_compare> &&
+     __heterogeneous_key<_Kt, _Container>;
+ #endif
+ 
  _GLIBCXX_END_NAMESPACE_VERSION
  } // namespace
  
diff -Nrcpad gcc-16-20260201/libstdc++-v3/include/bits/unordered_map.h gcc-16-20260208/libstdc++-v3/include/bits/unordered_map.h
*** gcc-16-20260201/libstdc++-v3/include/bits/unordered_map.h	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libstdc++-v3/include/bits/unordered_map.h	Sun Feb  8 22:32:17 2026
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 501,506 ****
--- 501,513 ----
        extract(const key_type& __key)
        { return _M_h.extract(__key); }
  
+ #ifdef __glibcxx_associative_heterogeneous_erasure // C++23
+       template <__heterogeneous_hash_key<unordered_map> _Kt>
+ 	node_type
+ 	extract(_Kt&& __key)
+ 	{ return _M_h._M_extract_tr(__key); }
+ #endif
+ 
        /// Re-insert an extracted node.
        insert_return_type
        insert(node_type&& __nh)
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 848,853 ****
--- 855,867 ----
        erase(const key_type& __x)
        { return _M_h.erase(__x); }
  
+ #ifdef __glibcxx_associative_heterogeneous_erasure // C++23
+       template <__heterogeneous_hash_key<unordered_map> _Kt>
+ 	size_type
+ 	erase(_Kt&& __key)
+ 	{ return _M_h._M_erase_tr(__key); }
+ #endif
+ 
        /**
         *  @brief Erases a [__first,__last) range of elements from an
         *  %unordered_map.
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 1872,1877 ****
--- 1886,1898 ----
        extract(const key_type& __key)
        { return _M_h.extract(__key); }
  
+ #ifdef __glibcxx_associative_heterogeneous_erasure // C++23
+       template <__heterogeneous_hash_key<unordered_multimap> _Kt>
+ 	node_type
+ 	extract(_Kt&& __key)
+ 	{ return _M_h._M_extract_tr(__key); }
+ #endif
+ 
        /// Re-insert an extracted node.
        iterator
        insert(node_type&& __nh)
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 1922,1927 ****
--- 1943,1955 ----
        erase(const key_type& __x)
        { return _M_h.erase(__x); }
  
+ #ifdef __glibcxx_associative_heterogeneous_erasure // C++23
+       template <__heterogeneous_hash_key<unordered_multimap> _Kt>
+ 	size_type
+ 	erase(_Kt&& __key)
+ 	{ return _M_h._M_erase_tr(__key); }
+ #endif
+ 
        /**
         *  @brief Erases a [__first,__last) range of elements from an
         *  %unordered_multimap.
diff -Nrcpad gcc-16-20260201/libstdc++-v3/include/bits/unordered_set.h gcc-16-20260208/libstdc++-v3/include/bits/unordered_set.h
*** gcc-16-20260201/libstdc++-v3/include/bits/unordered_set.h	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libstdc++-v3/include/bits/unordered_set.h	Sun Feb  8 22:32:17 2026
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 581,586 ****
--- 581,593 ----
        extract(const key_type& __key)
        { return _M_h.extract(__key); }
  
+ #ifdef __glibcxx_associative_heterogeneous_erasure // C++23
+       template <__heterogeneous_hash_key<unordered_set> _Kt>
+ 	node_type
+ 	extract(_Kt&& __key)
+ 	{ return _M_h._M_extract_tr(__key); }
+ #endif
+ 
        /// Re-insert an extracted node.
        insert_return_type
        insert(node_type&& __nh)
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 632,637 ****
--- 639,651 ----
        erase(const key_type& __x)
        { return _M_h.erase(__x); }
  
+ #ifdef __glibcxx_associative_heterogeneous_erasure // C++23
+       template <__heterogeneous_hash_key<unordered_set> _Kt>
+ 	size_type
+ 	erase(_Kt&& __key)
+ 	{ return _M_h._M_erase_tr(__key); }
+ #endif
+ 
        /**
         *  @brief Erases a [__first,__last) range of elements from an
         *  %unordered_set.
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 1574,1579 ****
--- 1588,1600 ----
        extract(const key_type& __key)
        { return _M_h.extract(__key); }
  
+ #ifdef __glibcxx_associative_heterogeneous_erasure // C++23
+       template <__heterogeneous_hash_key<unordered_multiset> _Kt>
+ 	node_type
+ 	extract(_Kt&& __key)
+ 	{ return _M_h._M_extract_tr(__key); }
+ #endif
+ 
        /// Re-insert an extracted node.
        iterator
        insert(node_type&& __nh)
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 1627,1632 ****
--- 1648,1660 ----
        erase(const key_type& __x)
        { return _M_h.erase(__x); }
  
+ #ifdef __glibcxx_associative_heterogeneous_erasure // C++23
+       template <__heterogeneous_hash_key<unordered_multiset> _Kt>
+ 	size_type
+ 	erase(_Kt&& __key)
+ 	{ return _M_h._M_erase_tr(__key); }
+ #endif
+ 
        /**
         *  @brief Erases a [__first,__last) range of elements from an
         *  %unordered_multiset.
diff -Nrcpad gcc-16-20260201/libstdc++-v3/include/bits/version.def gcc-16-20260208/libstdc++-v3/include/bits/version.def
*** gcc-16-20260201/libstdc++-v3/include/bits/version.def	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libstdc++-v3/include/bits/version.def	Sun Feb  8 22:32:17 2026
*************** ftms = {
*** 1634,1639 ****
--- 1634,1647 ----
  };
  
  ftms = {
+   name = associative_heterogeneous_erasure;
+   values = {
+     v = 202110;
+     cxxmin = 23;
+   };
+ };
+ 
+ ftms = {
    name = is_scoped_enum;
    values = {
      v = 202011;
*************** ftms = {
*** 2266,2271 ****
--- 2274,2289 ----
    values = {
      v = 202506;
      cxxmin = 26;
+     extra_cond = "__cpp_impl_reflection >= 202506L";
+     cxx11abi = yes;
+   };
+ };
+ 
+ ftms = {
+   name = define_static;
+   values = {
+     v = 202506;
+     cxxmin = 26;
      extra_cond = "__cpp_impl_reflection >= 202506L";
      cxx11abi = yes;
    };
diff -Nrcpad gcc-16-20260201/libstdc++-v3/include/bits/version.h gcc-16-20260208/libstdc++-v3/include/bits/version.h
*** gcc-16-20260201/libstdc++-v3/include/bits/version.h	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libstdc++-v3/include/bits/version.h	Sun Feb  8 22:32:17 2026
***************
*** 1801,1806 ****
--- 1801,1816 ----
  #endif /* !defined(__cpp_lib_invoke_r) */
  #undef __glibcxx_want_invoke_r
  
+ #if !defined(__cpp_lib_associative_heterogeneous_erasure)
+ # if (__cplusplus >= 202100L)
+ #  define __glibcxx_associative_heterogeneous_erasure 202110L
+ #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_associative_heterogeneous_erasure)
+ #   define __cpp_lib_associative_heterogeneous_erasure 202110L
+ #  endif
+ # endif
+ #endif /* !defined(__cpp_lib_associative_heterogeneous_erasure) */
+ #undef __glibcxx_want_associative_heterogeneous_erasure
+ 
  #if !defined(__cpp_lib_is_scoped_enum)
  # if (__cplusplus >= 202100L)
  #  define __glibcxx_is_scoped_enum 202011L
***************
*** 2546,2551 ****
--- 2556,2571 ----
  #endif /* !defined(__cpp_lib_reflection) */
  #undef __glibcxx_want_reflection
  
+ #if !defined(__cpp_lib_define_static)
+ # if (__cplusplus >  202302L) && _GLIBCXX_USE_CXX11_ABI && (__cpp_impl_reflection >= 202506L)
+ #  define __glibcxx_define_static 202506L
+ #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_define_static)
+ #   define __cpp_lib_define_static 202506L
+ #  endif
+ # endif
+ #endif /* !defined(__cpp_lib_define_static) */
+ #undef __glibcxx_want_define_static
+ 
  #if !defined(__cpp_lib_is_implicit_lifetime)
  # if (__cplusplus >= 202100L) && (__has_builtin(__builtin_is_implicit_lifetime))
  #  define __glibcxx_is_implicit_lifetime 202302L
diff -Nrcpad gcc-16-20260201/libstdc++-v3/include/std/contracts gcc-16-20260208/libstdc++-v3/include/std/contracts
*** gcc-16-20260201/libstdc++-v3/include/std/contracts	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libstdc++-v3/include/std/contracts	Sun Feb  8 22:32:17 2026
*************** namespace contracts
*** 92,98 ****
      detection_mode mode() const noexcept { return _M_detection_mode; }
      const char* comment() const noexcept { return _M_comment; }
      std::source_location location() const noexcept {
!       return std::source_location (_M_src_loc_ptr);
      }
      bool is_terminating () const noexcept {
        return _M_evaluation_semantic == std::contracts::evaluation_semantic::enforce
--- 92,101 ----
      detection_mode mode() const noexcept { return _M_detection_mode; }
      const char* comment() const noexcept { return _M_comment; }
      std::source_location location() const noexcept {
!       std::source_location __loc;
!       __loc._M_impl
! 	   = static_cast<const source_location::__impl*>(_M_src_loc_ptr);
!       return __loc;
      }
      bool is_terminating () const noexcept {
        return _M_evaluation_semantic == std::contracts::evaluation_semantic::enforce
diff -Nrcpad gcc-16-20260201/libstdc++-v3/include/std/map gcc-16-20260208/libstdc++-v3/include/std/map
*** gcc-16-20260201/libstdc++-v3/include/std/map	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libstdc++-v3/include/std/map	Sun Feb  8 22:32:17 2026
***************
*** 79,84 ****
--- 79,85 ----
  #define __glibcxx_want_node_extract
  #define __glibcxx_want_nonmember_container_access
  #define __glibcxx_want_tuple_like
+ #define __glibcxx_want_associative_heterogeneous_erasure
  #include <bits/version.h>
  
  #if __cplusplus >= 201703L
diff -Nrcpad gcc-16-20260201/libstdc++-v3/include/std/meta gcc-16-20260208/libstdc++-v3/include/std/meta
*** gcc-16-20260201/libstdc++-v3/include/std/meta	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libstdc++-v3/include/std/meta	Sun Feb  8 22:32:17 2026
***************
*** 34,39 ****
--- 34,40 ----
  #endif
  
  #define __glibcxx_want_reflection
+ #define __glibcxx_want_define_static
  #include <bits/version.h>
  
  #if __glibcxx_reflection >= 202506L // C++ >= 26 && __cpp_impl_reflection
diff -Nrcpad gcc-16-20260201/libstdc++-v3/include/std/set gcc-16-20260208/libstdc++-v3/include/std/set
*** gcc-16-20260201/libstdc++-v3/include/std/set	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libstdc++-v3/include/std/set	Sun Feb  8 22:32:17 2026
***************
*** 77,82 ****
--- 77,83 ----
  #define __glibcxx_want_generic_associative_lookup
  #define __glibcxx_want_node_extract
  #define __glibcxx_want_nonmember_container_access
+ #define __glibcxx_want_associative_heterogeneous_erasure
  #include <bits/version.h>
  
  #if __cplusplus >= 201703L
diff -Nrcpad gcc-16-20260201/libstdc++-v3/include/std/source_location gcc-16-20260208/libstdc++-v3/include/std/source_location
*** gcc-16-20260201/libstdc++-v3/include/std/source_location	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libstdc++-v3/include/std/source_location	Sun Feb  8 22:32:17 2026
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 89,99 ****
    private:
      const __impl* _M_impl = nullptr;
  
-     constexpr source_location (const void *__t)
-       : _M_impl (static_cast <const __impl*>(__t)) {}
- 
  #ifdef __glibcxx_contracts
-     /* To enable use of the source __impl*.  */
      friend class std::contracts::contract_violation;
  #endif
    };
--- 89,95 ----
diff -Nrcpad gcc-16-20260201/libstdc++-v3/include/std/unordered_map gcc-16-20260208/libstdc++-v3/include/std/unordered_map
*** gcc-16-20260201/libstdc++-v3/include/std/unordered_map	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libstdc++-v3/include/std/unordered_map	Sun Feb  8 22:32:17 2026
***************
*** 56,61 ****
--- 56,62 ----
  #define __glibcxx_want_nonmember_container_access
  #define __glibcxx_want_unordered_map_try_emplace
  #define __glibcxx_want_tuple_like
+ #define __glibcxx_want_associative_heterogeneous_erasure
  #include <bits/version.h>
  
  #if __cplusplus >= 201703L
diff -Nrcpad gcc-16-20260201/libstdc++-v3/include/std/unordered_set gcc-16-20260208/libstdc++-v3/include/std/unordered_set
*** gcc-16-20260201/libstdc++-v3/include/std/unordered_set	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libstdc++-v3/include/std/unordered_set	Sun Feb  8 22:32:17 2026
***************
*** 54,59 ****
--- 54,60 ----
  #define __glibcxx_want_generic_unordered_lookup
  #define __glibcxx_want_node_extract
  #define __glibcxx_want_nonmember_container_access
+ #define __glibcxx_want_associative_heterogeneous_erasure
  #include <bits/version.h>
  
  #if __cplusplus >= 201703L
diff -Nrcpad gcc-16-20260201/libstdc++-v3/python/libstdcxx/v6/printers.py gcc-16-20260208/libstdc++-v3/python/libstdcxx/v6/printers.py
*** gcc-16-20260201/libstdc++-v3/python/libstdcxx/v6/printers.py	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libstdc++-v3/python/libstdcxx/v6/printers.py	Sun Feb  8 22:32:17 2026
*************** class SharedPointerPrinter(printer_base)
*** 292,300 ****
          if self._typename == 'std::atomic':
              # A tagged pointer is stored as uintptr_t.
              val = self._val['_M_refcount']['_M_val']
!             if val.type.is_scalar: # GCC 16 stores uintptr_t
                  ptr_val = val
!             else: # GCC 12-15 stores std::atomic<uintptr_t>
                  ptr_val = val['_M_i']
              ptr_val = ptr_val - (ptr_val % 2)  # clear lock bit
              ptr_type = find_type(self._val['_M_refcount'].type, 'pointer')
--- 292,306 ----
          if self._typename == 'std::atomic':
              # A tagged pointer is stored as uintptr_t.
              val = self._val['_M_refcount']['_M_val']
!             # GCC 16 stores it directly as uintptr_t
!             # GCC 12-15 stores std::atomic<uintptr_t>
!             if hasattr(val.type, 'is_scalar'): # Added in GDB 12.1
!                 val_is_uintptr = val.type.is_scalar
!             else:
!                 val_is_uintptr = val.type.tag is None
!             if val_is_uintptr:
                  ptr_val = val
!             else:
                  ptr_val = val['_M_i']
              ptr_val = ptr_val - (ptr_val % 2)  # clear lock bit
              ptr_type = find_type(self._val['_M_refcount'].type, 'pointer')
diff -Nrcpad gcc-16-20260201/libstdc++-v3/testsuite/18_support/contracts/includes.cc gcc-16-20260208/libstdc++-v3/testsuite/18_support/contracts/includes.cc
*** gcc-16-20260201/libstdc++-v3/testsuite/18_support/contracts/includes.cc	Sun Feb  1 22:32:17 2026
--- gcc-16-20260208/libstdc++-v3/testsuite/18_support/contracts/includes.cc	Thu Jan  1 00:00:00 1970
***************
*** 1,6 ****
- // { dg-options "-fcontracts" }
- // { dg-do compile { target c++26 } }
- 
- // We should not get errors from including this before <contracts>:
- #include <source_location>
- #include <contracts>
--- 0 ----
diff -Nrcpad gcc-16-20260201/libstdc++-v3/testsuite/18_support/contracts/srcloc.cc gcc-16-20260208/libstdc++-v3/testsuite/18_support/contracts/srcloc.cc
*** gcc-16-20260201/libstdc++-v3/testsuite/18_support/contracts/srcloc.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/libstdc++-v3/testsuite/18_support/contracts/srcloc.cc	Sun Feb  8 22:32:17 2026
***************
*** 0 ****
--- 1,19 ----
+ // { dg-options "-fcontracts" }
+ // { dg-do compile { target c++26 } }
+ 
+ // We should not get errors from including this before <contracts>:
+ #include <source_location>
+ #include <contracts>
+ 
+ // There should be no private std::source_location ctor that participates in
+ // the calls to f below.
+ struct S { S(char const *); };
+ void f(S);
+ void f(std::source_location);
+ 
+ void
+ test01()
+ {
+   f("");   // { dg-bogus "ambiguous" }
+   f({""}); // { dg-bogus "ambiguous" }
+ }
diff -Nrcpad gcc-16-20260201/libstdc++-v3/testsuite/23_containers/map/modifiers/hetero/erase.cc gcc-16-20260208/libstdc++-v3/testsuite/23_containers/map/modifiers/hetero/erase.cc
*** gcc-16-20260201/libstdc++-v3/testsuite/23_containers/map/modifiers/hetero/erase.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/libstdc++-v3/testsuite/23_containers/map/modifiers/hetero/erase.cc	Sun Feb  8 22:32:17 2026
***************
*** 0 ****
--- 1,95 ----
+ // { dg-do run { target c++23 } }
+ 
+ #include <map>
+ #include <string>
+ #include <string_view>
+ #include <utility>
+ #include <compare>
+ #include <cstring>
+ #include <testsuite_hooks.h>
+ 
+ struct X {
+   std::string s;
+   friend auto operator<=>(X const& a, X const& b) = default;
+ };
+ 
+ struct Y {
+   std::string_view s;
+   Y(std::string_view sv) : s(sv) {}
+   Y(std::string const& sv) : s(sv) {}
+   friend auto operator<=>(Y const& a, Y const& b) = default;
+   friend auto operator<=>(X const& a, Y const& b) { return a.s <=> b.s; }
+ };
+ 
+ using cmp = std::less<void>;
+ 
+ // uniform erase
+ void test1()
+ {
+   std::map<X, int, cmp> amap{cmp{}};
+   amap.insert({{X{"abc"}, 1}, {X{"def"}, 2}, {X{"ghi"}, 3}});
+   auto n = amap.erase(X{std::string{"def"}});
+   VERIFY(n == 1);
+   VERIFY(amap.size() == 2);
+ }
+ 
+ // heterogeneous erase
+ void test2()
+ {
+   std::map<X, int, cmp> amap{cmp{}};
+   amap.insert({{X{"abc"}, 1}, {X{"def"}, 2}, {X{"ghi"}, 3}});
+   auto n = amap.erase(Y{std::string_view{"def"}});
+   VERIFY(n == 1);
+   VERIFY(amap.size() == 2);
+ }
+ 
+ // uniform extract
+ void test3()
+ {
+   std::map<X, int, cmp> amap{cmp{}};
+   amap.insert({{X{"abc"}, 1}, {X{"def"}, 2}, {X{"ghi"}, 3}});
+   auto node = amap.extract(X{std::string{"def"}});
+   VERIFY(node.key().s == X{"def"}.s);
+   VERIFY(node.mapped() == 2);
+   VERIFY(amap.size() == 2);
+ }
+ 
+ // heterogeneous extract
+ void test4()
+ {
+   std::map<X, int, cmp> amap{cmp{}};
+   amap.insert({{X{"abc"}, 1}, {X{"def"}, 2}, {X{"ghi"}, 3}});
+   auto node = amap.extract(Y{std::string_view{"def"}});
+   VERIFY(node.key().s == X{"def"}.s);
+   VERIFY(node.mapped() == 2);
+   VERIFY(amap.size() == 2);
+ }
+ 
+ struct Z {
+   std::string_view s;
+   friend auto operator<=>(X const& a, Z const& b) {
+     int cmp = std::memcmp(a.s.data(), b.s.data(), 3);
+     return cmp < 0 ? std::strong_ordering::less :
+ 	   cmp == 0 ? std::strong_ordering::equal :
+ 	   std::strong_ordering::greater;
+   }
+ };
+ 
+ void test5()
+ {
+   std::map<X, int, cmp> amap{cmp{}};
+   amap.insert(
+     {{X{"abcdef"}, 1}, {X{"defghi"}, 2}, {X{"defjkl"}, 3}, {X{"jklmno"}, 4}});
+   auto n = amap.erase(Z{std::string_view{"def"}});
+   VERIFY(n == 2);
+   VERIFY(amap.size() == 2);
+ }
+ 
+ int main()
+ {
+   test1();
+   test2();
+   test3();
+   test4();
+   test5();
+ }
diff -Nrcpad gcc-16-20260201/libstdc++-v3/testsuite/23_containers/multimap/modifiers/hetero/erase.cc gcc-16-20260208/libstdc++-v3/testsuite/23_containers/multimap/modifiers/hetero/erase.cc
*** gcc-16-20260201/libstdc++-v3/testsuite/23_containers/multimap/modifiers/hetero/erase.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/libstdc++-v3/testsuite/23_containers/multimap/modifiers/hetero/erase.cc	Sun Feb  8 22:32:17 2026
***************
*** 0 ****
--- 1,95 ----
+ // { dg-do run { target c++23 } }
+ 
+ #include <map>
+ #include <string>
+ #include <string_view>
+ #include <utility>
+ #include <compare>
+ #include <cstring>
+ #include <testsuite_hooks.h>
+ 
+ struct X {
+   std::string s;
+   friend auto operator<=>(X const& a, X const& b) = default;
+ };
+ 
+ struct Y {
+   std::string_view s;
+   Y(std::string_view sv) : s(sv) {}
+   Y(std::string const& sv) : s(sv) {}
+   friend auto operator<=>(Y const& a, Y const& b) = default;
+   friend auto operator<=>(X const& a, Y const& b) { return a.s <=> b.s; }
+ };
+ 
+ using cmp = std::less<void>;
+ 
+ // uniform erase
+ void test1()
+ {
+   std::multimap<X, int, cmp> amap{cmp{}};
+   amap.insert({{X{"abc"}, 0}, {X{"def"}, 1}, {X{"def"}, 2}, {X{"ghi"}, 3}});
+   auto n = amap.erase(X{std::string{"def"}});
+   VERIFY(n == 2);
+   VERIFY(amap.size() == 2);
+ }
+ 
+ // heterogeneous erase
+ void test2()
+ {
+   std::multimap<X, int, cmp> amap{cmp{}};
+   amap.insert({{X{"abc"}, 0}, {X{"def"}, 1}, {X{"def"}, 2}, {X{"ghi"}, 3}});
+   auto n = amap.erase(Y{std::string_view{"def"}});
+   VERIFY(n == 2);
+   VERIFY(amap.size() == 2);
+ }
+ 
+ // uniform extract
+ void test3()
+ {
+   std::multimap<X, int, cmp> amap{cmp{}};
+   amap.insert({{X{"abc"}, 0}, {X{"def"}, 1}, {X{"def"}, 2}, {X{"ghi"}, 3}});
+   const auto node = amap.extract(X{std::string{"def"}});
+   VERIFY(node.key().s == "def");
+   VERIFY(node.mapped() == 1);
+   VERIFY(amap.size() == 3);
+ }
+ 
+ // heterogeneous extract
+ void test4()
+ {
+   std::multimap<X, int, cmp> amap{cmp{}};
+   amap.insert({{X{"abc"}, 0}, {X{"def"}, 1}, {X{"def"}, 2}, {X{"ghi"}, 3}});
+   const auto node = amap.extract(Y{std::string_view{"def"}});
+   VERIFY(node.key().s == "def");
+   VERIFY(node.mapped() == 1);
+   VERIFY(amap.size() == 3);
+ }
+ 
+ struct Z {
+   std::string_view s;
+   friend auto operator<=>(X const& a, Z const& b) {
+     int cmp = std::memcmp(a.s.data(), b.s.data(), 3);
+     return cmp < 0 ? std::strong_ordering::less :
+ 	   cmp == 0 ? std::strong_ordering::equal :
+ 	   std::strong_ordering::greater;
+   }
+ };
+ 
+ void test5()
+ {
+   std::map<X, int, cmp> amap{cmp{}};
+   amap.insert(
+     {{X{"abcdef"}, 1}, {X{"defghi"}, 2}, {X{"defjkl"}, 3}, {X{"jklmno"}, 4}});
+   auto n = amap.erase(Z{std::string_view{"def"}});
+   VERIFY(n == 2);
+   VERIFY(amap.size() == 2);
+ }
+ 
+ int main()
+ {
+   test1();
+   test2();
+   test3();
+   test4();
+   test5();
+ }
diff -Nrcpad gcc-16-20260201/libstdc++-v3/testsuite/23_containers/multiset/modifiers/hetero/erase.cc gcc-16-20260208/libstdc++-v3/testsuite/23_containers/multiset/modifiers/hetero/erase.cc
*** gcc-16-20260201/libstdc++-v3/testsuite/23_containers/multiset/modifiers/hetero/erase.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/libstdc++-v3/testsuite/23_containers/multiset/modifiers/hetero/erase.cc	Sun Feb  8 22:32:17 2026
***************
*** 0 ****
--- 1,88 ----
+ // { dg-do run { target c++23 } }
+ 
+ #include <set>
+ #include <string>
+ #include <string_view>
+ #include <utility>
+ #include <compare>
+ #include <cstring>
+ #include <testsuite_hooks.h>
+ 
+ struct X {
+   std::string s;
+   friend auto operator<=>(X const& a, X const& b) = default;
+ };
+ 
+ struct Y {
+   std::string_view s;
+   Y(std::string_view sv) : s(sv) {}
+   Y(std::string const& sv) : s(sv) {}
+   friend auto operator<=>(Y const& a, Y const& b) = default;
+   friend auto operator<=>(X const& a, Y const& b) { return a.s <=> b.s; }
+ };
+ 
+ using cmp = std::less<void>;
+ 
+ void test1() // uniform erase
+ {
+   std::multiset<X, cmp> aset{cmp{}};
+   aset.insert({X{"abc"}, X{"def"}, X{"def"}, X{"ghi"}});
+   auto n = aset.erase(X{std::string{"def"}});
+   VERIFY(n == 2);
+   VERIFY(aset.size() == 2);
+ }
+ 
+ void test2() // heterogeneous erase
+ {
+   std::multiset<X, cmp> aset{cmp{}};
+   aset.insert({X{"abc"}, X{"def"}, X{"def"}, X{"ghi"}});
+   auto n = aset.erase(Y{std::string_view{"def"}});
+   VERIFY(n == 2);
+   VERIFY(aset.size() == 2);
+ }
+ 
+ void test3() // uniform extract
+ {
+   std::multiset<X, cmp> aset{cmp{}};
+   aset.insert({X{"abc"}, X{"def"}, X{"def"}, X{"ghi"}});
+   const auto node = aset.extract(X{std::string{"def"}});
+   VERIFY(node.value().s == "def");
+   VERIFY(aset.size() == 3);
+ }
+ 
+ void test4() // heterogeneous extract
+ {
+   std::multiset<X, cmp> aset{cmp{}};
+   aset.insert({X{"abc"}, X{"def"}, X{"def"}, X{"ghi"}});
+   const auto node = aset.extract(Y{std::string_view{"def"}});
+   VERIFY(node.value().s == "def");
+   VERIFY(aset.size() == 3);
+ }
+ 
+ struct Z {
+   std::string_view s;
+   friend auto operator<=>(X const& a, Z const& b) {
+     int cmp = std::memcmp(a.s.data(), b.s.data(), 3);
+     return cmp < 0 ? std::strong_ordering::less :
+ 	   cmp == 0 ? std::strong_ordering::equal :
+ 	   std::strong_ordering::greater;
+   }
+ };
+ 
+ void test5()
+ {
+   std::multiset<X, cmp> aset{cmp{}};
+   aset.insert({X{"abcdef"}, X{"defghi"}, X{"defjkl"}, X{"jklmno"}});
+   auto n = aset.erase(Z{std::string_view{"def"}});
+   VERIFY(n == 2);
+   VERIFY(aset.size() == 2);
+ }
+ 
+ int main()
+ {
+   test1();
+   test2();
+   test3();
+   test4();
+   test5();
+ }
diff -Nrcpad gcc-16-20260201/libstdc++-v3/testsuite/23_containers/set/modifiers/hetero/erase.cc gcc-16-20260208/libstdc++-v3/testsuite/23_containers/set/modifiers/hetero/erase.cc
*** gcc-16-20260201/libstdc++-v3/testsuite/23_containers/set/modifiers/hetero/erase.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/libstdc++-v3/testsuite/23_containers/set/modifiers/hetero/erase.cc	Sun Feb  8 22:32:17 2026
***************
*** 0 ****
--- 1,88 ----
+ // { dg-do run { target c++23 } }
+ 
+ #include <set>
+ #include <string>
+ #include <string_view>
+ #include <utility>
+ #include <compare>
+ #include <cstring>
+ #include <testsuite_hooks.h>
+ 
+ struct X {
+   std::string s;
+   friend auto operator<=>(X const& a, X const& b) = default;
+ };
+ 
+ struct Y {
+   std::string_view s;
+   Y(std::string_view sv) : s(sv) {}
+   Y(std::string const& sv) : s(sv) {}
+   friend auto operator<=>(Y const& a, Y const& b) = default;
+   friend auto operator<=>(X const& a, Y const& b) { return a.s <=> b.s; }
+ };
+ 
+ using cmp = std::less<void>;
+ 
+ void test1()  // uniform erase
+ {
+   std::set<X, cmp> aset{cmp{}};
+   aset.insert({X{"abc"}, X{"def"}, X{"ghi"}});
+   auto n = aset.erase(X{std::string{"def"}});
+   VERIFY(n == 1);
+   VERIFY(aset.size() == 2);
+ }
+ 
+ void test2() // heterogeneous erase
+ {
+   std::set<X, cmp> aset{cmp{}};
+   aset.insert({X{"abc"}, X{"def"}, X{"ghi"}});
+   auto n = aset.erase(Y{std::string_view{"def"}});
+   VERIFY(n == 1);
+   VERIFY(aset.size() == 2);
+ }
+ 
+ void test3() // uniform extract
+ {
+   std::set<X, cmp> aset{cmp{}};
+   aset.insert({X{"abc"}, X{"def"}, X{"ghi"}});
+   auto node = aset.extract(X{std::string{"def"}});
+   VERIFY(node.value().s == X{"def"}.s);
+   VERIFY(aset.size() == 2);
+ }
+ 
+ void test4() // heterogeneous extract
+ {
+   std::set<X, cmp> aset{cmp{}};
+   aset.insert({X{"abc"}, X{"def"}, X{"ghi"}});
+   auto node = aset.extract(Y{std::string_view{"def"}});
+   VERIFY(node.value().s == X{"def"}.s);
+   VERIFY(aset.size() == 2);
+ }
+ 
+ struct Z {
+   std::string_view s;
+   friend auto operator<=>(X const& a, Z const& b) {
+     int cmp = std::memcmp(a.s.data(), b.s.data(), 3);
+     return cmp < 0 ? std::strong_ordering::less :
+ 	   cmp == 0 ? std::strong_ordering::equal :
+ 	   std::strong_ordering::greater;
+   }
+ };
+ 
+ void test5()
+ {
+   std::set<X, cmp> aset{cmp{}};
+   aset.insert({X{"abcdef"}, X{"defghi"}, X{"defjkl"}, X{"jklmno"}});
+   auto n = aset.erase(Z{std::string_view{"def"}});
+   VERIFY(n == 2);
+   VERIFY(aset.size() == 2);
+ }
+ 
+ int main()
+ {
+   test1();
+   test2();
+   test3();
+   test4();
+   test5();
+ }
diff -Nrcpad gcc-16-20260201/libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/hetero/erase.cc gcc-16-20260208/libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/hetero/erase.cc
*** gcc-16-20260201/libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/hetero/erase.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/hetero/erase.cc	Sun Feb  8 22:32:17 2026
***************
*** 0 ****
--- 1,76 ----
+ // { dg-do run { target c++23 } }
+ 
+ #include <unordered_map>
+ #include <string>
+ #include <string_view>
+ #include <utility>
+ #include <functional>
+ #include <compare>
+ #include <testsuite_hooks.h>
+ 
+ struct X {
+   std::string s;
+   friend bool operator==(X const& a, X const& b) = default;
+ };
+ 
+ struct Y {
+   std::string_view s;
+   Y(std::string_view sv) : s(sv) {}
+   Y(std::string const& sv) : s(sv) {}
+   friend bool operator==(Y const& a, Y const& b) = default;
+   friend bool operator==(X const& a, Y const& b) { return a.s == b.s; }
+ };
+ 
+ struct Hash {
+   using is_transparent = void;
+   template <typename T>
+     auto operator()(T const& t) const { return std::hash<decltype(T::s)>{}(t.s); }
+ };
+ 
+ using Equal = std::equal_to<void>;
+ 
+ void test1() // uniform erase
+ {
+   std::unordered_map<X, int, Hash, Equal> amap;
+   amap.insert({{X{"abc"}, 1}, {X{"def"}, 2}, {X{"ghi"}, 3}});
+   auto n = amap. erase(X{ std::string{"def"}});
+   VERIFY(n == 1);
+   VERIFY(amap.size() == 2);
+ }
+ 
+ void test2() // heterogeneous erase
+ {
+   std::unordered_map<X, int, Hash, Equal> amap;
+   amap.insert({{X{"abc"}, 1}, {X{"def"}, 2}, {X{"ghi"}, 3}});
+   auto n = amap. erase(Y{ std::string_view{"def"}});
+   VERIFY(n == 1);
+   VERIFY(amap.size() == 2);
+ }
+ 
+ void test3() // uniform extract
+ {
+   std::unordered_map<X, int, Hash, Equal> amap;
+   amap.insert({{X{"abc"}, 1}, {X{"def"}, 2}, {X{"ghi"}, 3}});
+   auto node = amap. extract(X{ std::string{"def"}});
+   VERIFY(node.key().s == X{"def"}.s);
+   VERIFY(node.mapped() == 2);
+   VERIFY(amap.size() == 2);
+ }
+ 
+ void test4() // heterogeneous extract
+ {
+   std::unordered_map<X, int, Hash, Equal> amap;
+   amap.insert({{X{"abc"}, 1}, {X{"def"}, 2}, {X{"ghi"}, 3}});
+   auto node = amap. extract(Y{ std::string_view{"def"}});
+   VERIFY(node.key().s == X{"def"}.s);
+   VERIFY(node.mapped() == 2);
+   VERIFY(amap.size() == 2);
+ }
+ 
+ int main()
+ {
+   test1();
+   test2();
+   test3();
+   test4();
+ }
diff -Nrcpad gcc-16-20260201/libstdc++-v3/testsuite/23_containers/unordered_multimap/modifiers/hetero/erase.cc gcc-16-20260208/libstdc++-v3/testsuite/23_containers/unordered_multimap/modifiers/hetero/erase.cc
*** gcc-16-20260201/libstdc++-v3/testsuite/23_containers/unordered_multimap/modifiers/hetero/erase.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/libstdc++-v3/testsuite/23_containers/unordered_multimap/modifiers/hetero/erase.cc	Sun Feb  8 22:32:17 2026
***************
*** 0 ****
--- 1,75 ----
+ // { dg-do run { target c++23 } }
+ 
+ #include <unordered_map>
+ #include <string>
+ #include <string_view>
+ #include <utility>
+ #include <functional>
+ #include <testsuite_hooks.h>
+ 
+ struct X {
+   std::string s;
+   friend bool operator==(X const& a, X const& b) = default;
+ };
+ 
+ struct Y {
+   std::string_view s;
+   Y(std::string_view sv) : s(sv) {}
+   Y(std::string const& sv) : s(sv) {}
+   friend bool operator==(Y const& a, Y const& b) = default;
+   friend bool operator==(X const& a, Y const& b) { return a.s == b.s; }
+ };
+ 
+ struct Hash {
+   using is_transparent = void;
+   template <typename T>
+     auto operator()(T const& t) const { return std::hash<decltype(T::s)>{}(t.s); }
+ };
+ 
+ using Equal = std::equal_to<void>;
+ 
+ void test1()  // uniform erase
+ {
+   std::unordered_multimap<X, int, Hash, Equal> amap;
+   amap.insert({{X{"abc"}, 1}, {X{"def"}, 2}, {X{"def"}, 3}, {X{"ghi"}, 4}});
+   auto n = amap. erase(X{ std::string{"def"}});
+   VERIFY(n == 2);
+   VERIFY(amap.size() == 2);
+ }
+ 
+ void test2()  // heterogeneous erase
+ {
+   std::unordered_multimap<X, int, Hash, Equal> amap;
+   amap.insert({{X{"abc"}, 1}, {X{"def"}, 2}, {X{"def"}, 3}, {X{"ghi"}, 4}});
+   auto n = amap. erase(Y{ std::string_view{"def"}});
+   VERIFY(n == 2);
+   VERIFY(amap.size() == 2);
+ }
+ 
+ void test3()  // uniform extract
+ {
+   std::unordered_multimap<X, int, Hash, Equal> amap;
+   amap.insert({{X{"abc"}, 1}, {X{"def"}, 2}, {X{"def"}, 3}, {X{"ghi"}, 4}});
+   auto node = amap. extract(X{ std::string{"def"}});
+   VERIFY(node.key().s == X{"def"}.s);
+   VERIFY(node.mapped() == 2 || node.mapped() == 3);
+   VERIFY(amap.size() == 3);
+ }
+ 
+ void test4()  // heterogeneous extract
+ {
+   std::unordered_multimap<X, int, Hash, Equal> amap;
+   amap.insert({{X{"abc"}, 1}, {X{"def"}, 2}, {X{"def"}, 3}, {X{"ghi"}, 4}});
+   auto node = amap. extract(Y{ std::string_view{"def"}});
+   VERIFY(node.key().s == X{"def"}.s);
+   VERIFY(node.mapped() == 2 || node.mapped() == 3);
+   VERIFY(amap.size() == 3);
+ }
+ 
+ int main()
+ {
+   test1();
+   test2();
+   test3();
+   test4();
+ }
diff -Nrcpad gcc-16-20260201/libstdc++-v3/testsuite/23_containers/unordered_multiset/modifiers/hetero/erase.cc gcc-16-20260208/libstdc++-v3/testsuite/23_containers/unordered_multiset/modifiers/hetero/erase.cc
*** gcc-16-20260201/libstdc++-v3/testsuite/23_containers/unordered_multiset/modifiers/hetero/erase.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/libstdc++-v3/testsuite/23_containers/unordered_multiset/modifiers/hetero/erase.cc	Sun Feb  8 22:32:17 2026
***************
*** 0 ****
--- 1,73 ----
+ // { dg-do run { target c++23 } }
+ 
+ #include <unordered_set>
+ #include <string>
+ #include <string_view>
+ #include <utility>
+ #include <functional>
+ #include <testsuite_hooks.h>
+ 
+ struct X {
+   std::string s;
+   friend bool operator==(X const& a, X const& b) = default;
+ };
+ 
+ struct Y {
+   std::string_view s;
+   Y(std::string_view sv) : s(sv) {}
+   Y(std::string const& sv) : s(sv) {}
+   friend bool operator==(Y const& a, Y const& b) = default;
+   friend bool operator==(X const& a, Y const& b) { return a.s == b.s; }
+ };
+ 
+ struct Hash {
+   using is_transparent = void;
+   template <typename T>
+     auto operator()(T const& t) const { return std::hash<decltype(T::s)>{}(t.s); }
+ };
+ 
+ using Equal = std::equal_to<void>;
+ 
+ void test1() // uniform erase
+ {
+   std::unordered_multiset<X, Hash, Equal> aset;
+   aset.insert({X{"abc"}, X{"def"}, X{"def"}, X{"ghi"}});
+   auto n = aset. erase(X{ std::string{"def"}});
+   VERIFY(n == 2);
+   VERIFY(aset.size() == 2);
+ }
+ 
+ void test2() // heterogeneous erase
+ {
+   std::unordered_multiset<X, Hash, Equal> aset;
+   aset.insert({X{"abc"}, X{"def"}, X{"def"}, X{"ghi"}});
+   auto n = aset. erase(Y{ std::string_view{"def"}});
+   VERIFY(n == 2);
+   VERIFY(aset.size() == 2);
+ }
+ 
+ void test3() // uniform extract
+ {
+   std::unordered_multiset<X, Hash, Equal> aset;
+   aset.insert({X{"abc"}, X{"def"}, X{"def"}, X{"ghi"}});
+   auto node = aset. extract(X{ std::string{"def"}});
+   VERIFY(node.value().s == X{"def"}.s);
+   VERIFY(aset.size() == 3);
+ }
+ 
+ void test4() // heterogeneous extract
+ {
+   std::unordered_multiset<X, Hash, Equal> aset;
+   aset.insert({X{"abc"}, X{"def"}, X{"def"}, X{"ghi"}});
+   auto node = aset. extract(Y{ std::string_view{"def"}});
+   VERIFY(node.value().s == X{"def"}.s);
+   VERIFY(aset.size() == 3);
+ }
+ 
+ int main()
+ {
+   test1();
+   test2();
+   test3();
+   test4();
+ }
diff -Nrcpad gcc-16-20260201/libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/hetero/erase.cc gcc-16-20260208/libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/hetero/erase.cc
*** gcc-16-20260201/libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/hetero/erase.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20260208/libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/hetero/erase.cc	Sun Feb  8 22:32:17 2026
***************
*** 0 ****
--- 1,73 ----
+ // { dg-do run { target c++23 } }
+ 
+ #include <unordered_set>
+ #include <string>
+ #include <string_view>
+ #include <utility>
+ #include <functional>
+ #include <testsuite_hooks.h>
+ 
+ struct X {
+   std::string s;
+   friend bool operator==(X const& a, X const& b) = default;
+ };
+ 
+ struct Y {
+   std::string_view s;
+   Y(std::string_view sv) : s(sv) {}
+   Y(std::string const& sv) : s(sv) {}
+   friend bool operator==(Y const& a, Y const& b) = default;
+   friend bool operator==(X const& a, Y const& b) { return a.s == b.s; }
+ };
+ 
+ struct Hash {
+   using is_transparent = void;
+   template <typename T>
+     auto operator()(T const& t) const { return std::hash<decltype(T::s)>{}(t.s); }
+ };
+ 
+ using Equal = std::equal_to<void>;
+ 
+ void test1()  // uniform erase
+ {
+   std::unordered_set<X, Hash, Equal> aset;
+   aset.insert({X{"abc"}, X{"def"}, X{"ghi"}});
+   auto n = aset.erase(X{std::string{"def"}});
+   VERIFY(n == 1);
+   VERIFY(aset.size() == 2);
+ }
+ 
+ void test2()  // heterogeneous erase
+ {
+   std::unordered_set<X, Hash, Equal> aset;
+   aset.insert({X{"abc"}, X{"def"}, X{"ghi"}});
+   auto n = aset.erase(Y{std::string_view{"def"}});
+   VERIFY(n == 1);
+   VERIFY(aset.size() == 2);
+ }
+ 
+ void test3() // uniform extract
+ {
+   std::unordered_set<X, Hash, Equal> aset;
+   aset.insert({X{"abc"}, X{"def"}, X{"ghi"}});
+   auto node = aset.extract(X{std::string{"def"}});
+   VERIFY(node.value().s == X{"def"}.s);
+   VERIFY(aset.size() == 2);
+ }
+ 
+ void test4()  // heterogeneous extract
+ {
+   std::unordered_set<X, Hash, Equal> aset;
+   aset.insert({X{"abc"}, X{"def"}, X{"ghi"}});
+   auto node = aset.extract(Y{std::string_view{"def"}});
+   VERIFY(node.value().s == X{"def"}.s);
+   VERIFY(aset.size() == 2);
+ }
+ 
+ int main()
+ {
+   test1();
+   test2();
+   test3();
+   test4();
+ }
diff -Nrcpad gcc-16-20260201/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/multiline.cc gcc-16-20260208/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/multiline.cc
*** gcc-16-20260201/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/multiline.cc	Sun Feb  1 22:32:18 2026
--- gcc-16-20260208/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/multiline.cc	Sun Feb  8 22:32:17 2026
***************
*** 3,10 ****
  #include <testsuite_hooks.h>
  
  #if __cplusplus >= 201703L || !defined __STRICT_ANSI__
! static_assert( std::regex_constants::multiline == std::regex::multiline );
! static_assert( std::regex_constants::__multiline == std::regex::multiline );
  #else
  namespace test { constexpr int multiline = 0; }
  namespace check {
--- 3,10 ----
  #include <testsuite_hooks.h>
  
  #if __cplusplus >= 201703L || !defined __STRICT_ANSI__
! static_assert( std::regex_constants::multiline == std::regex::multiline, "" );
! static_assert( std::regex_constants::__multiline == std::regex::multiline, "" );
  #else
  namespace test { constexpr int multiline = 0; }
  namespace check {
diff -Nrcpad gcc-16-20260201/libstdc++-v3/testsuite/28_regex/sub_match/lwg3204.cc gcc-16-20260208/libstdc++-v3/testsuite/28_regex/sub_match/lwg3204.cc
*** gcc-16-20260201/libstdc++-v3/testsuite/28_regex/sub_match/lwg3204.cc	Sun Feb  1 22:32:18 2026
--- gcc-16-20260208/libstdc++-v3/testsuite/28_regex/sub_match/lwg3204.cc	Sun Feb  8 22:32:17 2026
*************** struct iter
*** 33,38 ****
  };
  
  using CS = std::csub_match;
! static_assert( noexcept(std::declval<CS&>().swap(std::declval<CS&>())) );
  using IS = std::sub_match<iter>;
! static_assert( ! noexcept(std::declval<IS&>().swap(std::declval<IS&>())) );
--- 33,40 ----
  };
  
  using CS = std::csub_match;
! static_assert( noexcept(std::declval<CS&>().swap(std::declval<CS&>())),
! 	       "std::csub_match::swap is nothrow" );
  using IS = std::sub_match<iter>;
! static_assert( ! noexcept(std::declval<IS&>().swap(std::declval<IS&>())),
! 	       "std::sub_match<I>::swap is potentially throwing" );
diff -Nrcpad gcc-16-20260201/libstdc++-v3/testsuite/Makefile.am gcc-16-20260208/libstdc++-v3/testsuite/Makefile.am
*** gcc-16-20260201/libstdc++-v3/testsuite/Makefile.am	Sun Feb  1 22:32:18 2026
--- gcc-16-20260208/libstdc++-v3/testsuite/Makefile.am	Sun Feb  8 22:32:17 2026
*************** baseline_symbols:
*** 84,96 ****
  
  new-abi-baseline:
  	-@$(mkinstalldirs) ${baseline_dir}/${baseline_subdir}
! 	-@(output=${baseline_dir}/${baseline_subdir}/baseline_symbols.txt; \
! 	  if test -f $${output}; then \
! 	    output=$${output}.new; \
! 	    t=`echo $${output} | sed 's=.*config/abi/=='`; \
! 	    echo "Baseline file already exists, writing to $${t} instead."; \
! 	  fi; \
! 	  ${extract_symvers} ../src/.libs/libstdc++.so $${output})
  
  %/site.exp: site.exp
  	-@test -d $* || mkdir $*
--- 84,90 ----
  
  new-abi-baseline:
  	-@$(mkinstalldirs) ${baseline_dir}/${baseline_subdir}
! 	-@${extract_symvers} ../src/.libs/libstdc++.so ${baseline_dir}/${baseline_subdir}/baseline_symbols.txt
  
  %/site.exp: site.exp
  	-@test -d $* || mkdir $*
diff -Nrcpad gcc-16-20260201/libstdc++-v3/testsuite/Makefile.in gcc-16-20260208/libstdc++-v3/testsuite/Makefile.in
*** gcc-16-20260201/libstdc++-v3/testsuite/Makefile.in	Sun Feb  1 22:32:18 2026
--- gcc-16-20260208/libstdc++-v3/testsuite/Makefile.in	Sun Feb  8 22:32:17 2026
*************** baseline_symbols:
*** 645,657 ****
  
  new-abi-baseline:
  	-@$(mkinstalldirs) ${baseline_dir}/${baseline_subdir}
! 	-@(output=${baseline_dir}/${baseline_subdir}/baseline_symbols.txt; \
! 	  if test -f $${output}; then \
! 	    output=$${output}.new; \
! 	    t=`echo $${output} | sed 's=.*config/abi/=='`; \
! 	    echo "Baseline file already exists, writing to $${t} instead."; \
! 	  fi; \
! 	  ${extract_symvers} ../src/.libs/libstdc++.so $${output})
  
  %/site.exp: site.exp
  	-@test -d $* || mkdir $*
--- 645,651 ----
  
  new-abi-baseline:
  	-@$(mkinstalldirs) ${baseline_dir}/${baseline_subdir}
! 	-@${extract_symvers} ../src/.libs/libstdc++.so ${baseline_dir}/${baseline_subdir}/baseline_symbols.txt
  
  %/site.exp: site.exp
  	-@test -d $* || mkdir $*
diff -Nrcpad gcc-16-20260201/libstdc++-v3/testsuite/libstdc++-prettyprinters/compat.cc gcc-16-20260208/libstdc++-v3/testsuite/libstdc++-prettyprinters/compat.cc
*** gcc-16-20260201/libstdc++-v3/testsuite/libstdc++-prettyprinters/compat.cc	Sun Feb  1 22:32:18 2026
--- gcc-16-20260208/libstdc++-v3/testsuite/libstdc++-prettyprinters/compat.cc	Sun Feb  8 22:32:17 2026
*************** namespace std
*** 88,93 ****
--- 88,117 ----
  	this->_M_payload._M_engaged = true;
        }
      };
+ 
+   using uintptr_t = __UINTPTR_TYPE__;
+   template<typename T> struct shared_ptr;
+   template<typename T> struct atomic;
+   template<> struct atomic<uintptr_t> { uintptr_t _M_i; };
+   template<typename T> struct sp_atomic;
+   struct sp_counts { int _M_use_count; int _M_weak_count; };
+ 
+   // Old representation of std::atomic<std::shared_ptr<T>>, before GCC 16
+   template<typename T>
+     struct sp_atomic<shared_ptr<T>>
+     {
+       T* _M_ptr = nullptr;
+       struct Impl {
+ 	atomic<uintptr_t> _M_val;
+ 	using pointer = sp_counts*;
+       } _M_refcount;
+     };
+   template<typename T>
+     struct atomic<shared_ptr<T>>
+     {
+       sp_atomic<shared_ptr<T>> _M_impl;
+     };
+ 
  } // namespace std
  
  int
*************** main()
*** 110,115 ****
--- 134,149 ----
    optional<void*> op{nullptr};
  // { dg-final { note-test op {std::optional = {[contained value] = 0x0}} } }
  
+   std::atomic<std::shared_ptr<int>> aspe{};
+ // { dg-final { note-test aspe {std::atomic<std::shared_ptr<int>> (empty) = {get() = 0x0}} } }
+ 
+   std::sp_counts counts{ 1, 3 };
+   std::sp_atomic<std::shared_ptr<int>>::Impl::pointer p = &counts;
+   std::atomic<std::shared_ptr<int>> asp{};
+   asp._M_impl._M_ptr = reinterpret_cast<int*>(0x1234abcd);
+   asp._M_impl._M_refcount._M_val._M_i = reinterpret_cast<std::uintptr_t>(p);
+ // { dg-final { note-test asp {std::atomic<std::shared_ptr<int>> (use count 1, weak count 2) = {get() = 0x1234abcd}} } }
+ 
    __builtin_puts("");
    return 0;			// Mark SPOT
  }
