diff -Nrcpad gcc-17-20260614/LAST_UPDATED gcc-17-20260621/LAST_UPDATED
*** gcc-17-20260614/LAST_UPDATED	Sun Jun 14 22:32:21 2026
--- gcc-17-20260621/LAST_UPDATED	Sun Jun 21 22:32:20 2026
***************
*** 1 ****
! Obtained from git: master revision 3be38d59b2dda9d868ce5d9e1ec1218ce9a97129
--- 1 ----
! Obtained from git: master revision 4073a7927b1644f5b56b83f04f92e81b31f6517b
diff -Nrcpad gcc-17-20260614/MD5SUMS gcc-17-20260621/MD5SUMS
*** gcc-17-20260614/MD5SUMS	Sun Jun 14 22:32:27 2026
--- gcc-17-20260621/MD5SUMS	Sun Jun 21 22:32:25 2026
***************
*** 1,5 ****
  # This file contains the MD5 checksums of the files in the
! # gcc-17-20260614.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-17-20260621.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
*************** d32239bcb673463ab874e80d47fae504  COPYIN
*** 29,35 ****
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! 4593a7091bc91b8feef319b1abe19e94  LAST_UPDATED
  1880c45c9da11cb64c9dc58b606aed25  MAINTAINERS
  f1b0fe5b41f7272f173407bd21947846  Makefile.def
  fbda720c413d124746752b72dbcfff21  Makefile.in
--- 29,35 ----
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! 3c79c4bccb3a2ea5dbe17b649dd9ad82  LAST_UPDATED
  1880c45c9da11cb64c9dc58b606aed25  MAINTAINERS
  f1b0fe5b41f7272f173407bd21947846  Makefile.def
  fbda720c413d124746752b72dbcfff21  Makefile.in
*************** f15bc3c5de22eac0bdd4f611502139a0  gcc/AB
*** 532,538 ****
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! 1d3904086cfd5229d3fe957364ad2e7f  gcc/ChangeLog
  51281e73aa07fb62394bd72f3c9299ba  gcc/ChangeLog-1997
  f77af8c9ac412064886b00c5506123b5  gcc/ChangeLog-1998
  00a2e4ead1b289bf69bca0196fed6f9f  gcc/ChangeLog-1999
--- 532,538 ----
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! 249bac14b6c64f79e73eced1997d757b  gcc/ChangeLog
  51281e73aa07fb62394bd72f3c9299ba  gcc/ChangeLog-1997
  f77af8c9ac412064886b00c5506123b5  gcc/ChangeLog-1998
  00a2e4ead1b289bf69bca0196fed6f9f  gcc/ChangeLog-1999
*************** fb3fadb88e1d2b3b640cfaaa5ff11780  gcc/Ch
*** 570,588 ****
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! 71c5ea13d0cd8a4e00632d281135f57f  gcc/DATESTAMP
  deb513e591f23901188e22323bd3b1d4  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
  36698274bb69e2ada20f5cc434f3caa5  gcc/FSFChangeLog.11
  a817c5577f2b35f8d2481c787e3ff7e2  gcc/LANGUAGES
! caa6019a7bb42bef2376b6b7fd2bae69  gcc/Makefile.in
  ec6799501b2eb2923d5de6a66169dbd2  gcc/ONEWS
  c8c9dd1eaee4ffd4d5d9f3ab70fddd4b  gcc/README.Portability
! cbbaecdd6decdf00007bbdb344d2b282  gcc/acinclude.m4
  e74733ebf762151e601c9e0aa1461a20  gcc/aclocal.m4
  16a499934b71eb6cf7c0d6899cd6006a  gcc/ada/.gitignore
! 338640e58de97e22d1b7336847aaa878  gcc/ada/ChangeLog
  c2094c0d3135f9ac89917f162046ee04  gcc/ada/ChangeLog-2001
  fa410b57f5d814d5d3ac3b45f486cdcf  gcc/ada/ChangeLog-2002
  2dbefa7bdc8dc28ec746002028861278  gcc/ada/ChangeLog-2003
--- 570,588 ----
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! 922bb419f6a90a8463445d7dea5a2e54  gcc/DATESTAMP
  deb513e591f23901188e22323bd3b1d4  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
  36698274bb69e2ada20f5cc434f3caa5  gcc/FSFChangeLog.11
  a817c5577f2b35f8d2481c787e3ff7e2  gcc/LANGUAGES
! 6ea8b2e47589299bbb0a9f409e465831  gcc/Makefile.in
  ec6799501b2eb2923d5de6a66169dbd2  gcc/ONEWS
  c8c9dd1eaee4ffd4d5d9f3ab70fddd4b  gcc/README.Portability
! e05b8711bb51c17451a3e7f034cc4d95  gcc/acinclude.m4
  e74733ebf762151e601c9e0aa1461a20  gcc/aclocal.m4
  16a499934b71eb6cf7c0d6899cd6006a  gcc/ada/.gitignore
! 595afeb4fb022ba75e982a8199d16350  gcc/ada/ChangeLog
  c2094c0d3135f9ac89917f162046ee04  gcc/ada/ChangeLog-2001
  fa410b57f5d814d5d3ac3b45f486cdcf  gcc/ada/ChangeLog-2002
  2dbefa7bdc8dc28ec746002028861278  gcc/ada/ChangeLog-2003
*************** eea9961506181531b5f7f1a7f62fe428  gcc/ad
*** 612,620 ****
  2cf41efa2dee24b2dda73018b855edd3  gcc/ada/ChangeLog.tree-ssa
  1ddbf3755fbef2d964b15c7104b9937d  gcc/ada/Make-generated.in
  6c9c3b4249e781ed48c7ae55e8ef9999  gcc/ada/Makefile.in
! e3036b8607f7eefdbf796a5849c8bcd1  gcc/ada/Makefile.rtl
! 42d45da329180f7b887737f0e09d6391  gcc/ada/accessibility.adb
! 3e8c278617e0fab8c5975a1d1b431c1c  gcc/ada/accessibility.ads
  ae606358a99a7aabe5c0eb16329624b3  gcc/ada/ada_get_targ.adb
  c40d997c0c713985ad13faa6d354b016  gcc/ada/adabkend.adb
  8a0369e13d0752dfaddb77dfd08c3d14  gcc/ada/adabkend.ads
--- 612,620 ----
  2cf41efa2dee24b2dda73018b855edd3  gcc/ada/ChangeLog.tree-ssa
  1ddbf3755fbef2d964b15c7104b9937d  gcc/ada/Make-generated.in
  6c9c3b4249e781ed48c7ae55e8ef9999  gcc/ada/Makefile.in
! 3ebb03ee52f4fae5761923e2635f75c0  gcc/ada/Makefile.rtl
! a55c91bb79f5a5c57c59f615b6b54a38  gcc/ada/accessibility.adb
! 9d57247b96be39de99edf90f7eab072b  gcc/ada/accessibility.ads
  ae606358a99a7aabe5c0eb16329624b3  gcc/ada/ada_get_targ.adb
  c40d997c0c713985ad13faa6d354b016  gcc/ada/adabkend.adb
  8a0369e13d0752dfaddb77dfd08c3d14  gcc/ada/adabkend.ads
*************** a5f9ea1ee979426b1e19ed469160cf3e  gcc/ad
*** 631,637 ****
  5d8946c9a46c56a9c326d0e9d9d3d4d9  gcc/ada/argv-lynxos178-raven-cert.c
  c601b751c9d562150f8e9defec4660ce  gcc/ada/argv.c
  242f0f8e8fab3b3e0a9709998f39d504  gcc/ada/aspects.adb
! 7cc405de934fbfa09eba956e1fe10b5e  gcc/ada/aspects.ads
  6e1b6f3ca6da5c24f2b9c3e6637a1dbb  gcc/ada/atree.adb
  fd46d0d4940b9fd7cf5c96d9a66ed70a  gcc/ada/atree.ads
  6e0304e672e621021491b2c184e23f17  gcc/ada/atree.h
--- 631,637 ----
  5d8946c9a46c56a9c326d0e9d9d3d4d9  gcc/ada/argv-lynxos178-raven-cert.c
  c601b751c9d562150f8e9defec4660ce  gcc/ada/argv.c
  242f0f8e8fab3b3e0a9709998f39d504  gcc/ada/aspects.adb
! f8bdb554af8bb8f5512768bc1446c478  gcc/ada/aspects.ads
  6e1b6f3ca6da5c24f2b9c3e6637a1dbb  gcc/ada/atree.adb
  fd46d0d4940b9fd7cf5c96d9a66ed70a  gcc/ada/atree.ads
  6e0304e672e621021491b2c184e23f17  gcc/ada/atree.h
*************** b7678d8e7ea8aa0a70e24b3fb885db3c  gcc/ad
*** 680,687 ****
  68301a14436a8cd3e37cdce4d23ee231  gcc/ada/comperr.adb
  8b48cff165002adce60df535498f6650  gcc/ada/comperr.ads
  f21d3b1fb30a592ea0d55cc24e7ed262  gcc/ada/config-lang.in
! e2b0ca96d6c2bec9e3dc953201e6048e  gcc/ada/contracts.adb
! 74dca16001c24970dda556d1d088d05d  gcc/ada/contracts.ads
  a29b9edba17a642e68340d8d5b20dd6c  gcc/ada/csets.adb
  b3a5bb5354c2c4c1961b72fcee81f353  gcc/ada/csets.ads
  9b507518d5208bad11fd267d87dfa39a  gcc/ada/cstand.adb
--- 680,687 ----
  68301a14436a8cd3e37cdce4d23ee231  gcc/ada/comperr.adb
  8b48cff165002adce60df535498f6650  gcc/ada/comperr.ads
  f21d3b1fb30a592ea0d55cc24e7ed262  gcc/ada/config-lang.in
! a4b7c63ad31c275079d947f09311aa71  gcc/ada/contracts.adb
! 46bcf821810557435e16fb616c3df4b7  gcc/ada/contracts.ads
  a29b9edba17a642e68340d8d5b20dd6c  gcc/ada/csets.adb
  b3a5bb5354c2c4c1961b72fcee81f353  gcc/ada/csets.ads
  9b507518d5208bad11fd267d87dfa39a  gcc/ada/cstand.adb
*************** b2e701a565d6f7f9874142228be0e4dc  gcc/ad
*** 700,709 ****
  126af46980c709bfad54ec8cf873b1e0  gcc/ada/doc/gnat_rm/gnat_implementation_mode.rst
  e30abec9fafa50d63e5674b13debcfa9  gcc/ada/doc/gnat_rm/gnat_language_extensions.rst
  d18255d01b647c97e7cf2cbd3225f90d  gcc/ada/doc/gnat_rm/implementation_advice.rst
! 644dda2d15dc20aeb601b8eb7575e223  gcc/ada/doc/gnat_rm/implementation_defined_aspects.rst
  9049d3b299d7481521d14fab2ed136f1  gcc/ada/doc/gnat_rm/implementation_defined_attributes.rst
  239f1949e372a0d551e3056f536f2d12  gcc/ada/doc/gnat_rm/implementation_defined_characteristics.rst
! a384d500018143b8311c1d638a364a86  gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst
  f325ea14b0aae274cec66926227a9f24  gcc/ada/doc/gnat_rm/implementation_of_ada_2022_features.rst
  1ce2dc848df98bcbbb9d443501c48132  gcc/ada/doc/gnat_rm/implementation_of_specific_ada_features.rst
  b41ba2a36a4a1dc15e51faa9e84f9058  gcc/ada/doc/gnat_rm/interfacing_to_other_languages.rst
--- 700,709 ----
  126af46980c709bfad54ec8cf873b1e0  gcc/ada/doc/gnat_rm/gnat_implementation_mode.rst
  e30abec9fafa50d63e5674b13debcfa9  gcc/ada/doc/gnat_rm/gnat_language_extensions.rst
  d18255d01b647c97e7cf2cbd3225f90d  gcc/ada/doc/gnat_rm/implementation_advice.rst
! 0b495de70cb91f357d8a80fdad8d9508  gcc/ada/doc/gnat_rm/implementation_defined_aspects.rst
  9049d3b299d7481521d14fab2ed136f1  gcc/ada/doc/gnat_rm/implementation_defined_attributes.rst
  239f1949e372a0d551e3056f536f2d12  gcc/ada/doc/gnat_rm/implementation_defined_characteristics.rst
! 7eef77d20482715a56880c2dbaffc048  gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst
  f325ea14b0aae274cec66926227a9f24  gcc/ada/doc/gnat_rm/implementation_of_ada_2022_features.rst
  1ce2dc848df98bcbbb9d443501c48132  gcc/ada/doc/gnat_rm/implementation_of_specific_ada_features.rst
  b41ba2a36a4a1dc15e51faa9e84f9058  gcc/ada/doc/gnat_rm/interfacing_to_other_languages.rst
*************** c7da61a05156d50b4888cdfaae4241d0  gcc/ad
*** 735,744 ****
  0a025bfec2a94c0fcd11a19d18f6c0c5  gcc/ada/doc/share/gnu_free_documentation_license.rst
  f1c71b64e1c84e240c7b5aea7331a32a  gcc/ada/doc/share/latex_elements.py
  90adfcde2feb6d6c090c2b18a1578145  gcc/ada/doc/share/sphinx.sty
! 53ad5bbe1307592cb0b72abbd090be7c  gcc/ada/einfo-utils.adb
! 7d8424f0fa1f5c55e62289d1bb109135  gcc/ada/einfo-utils.ads
  97ce2e179e42e649dfe8affca8e3c302  gcc/ada/einfo.adb
! 7b1197ec1589e99d87033e5c412a1de0  gcc/ada/einfo.ads
  fef3bb4012357f98b9b104dfa3daee51  gcc/ada/elists.adb
  52dc293e77a753c73be5d02f2661369f  gcc/ada/elists.ads
  30a82f1a7c5bfcc4e8be8d79dc60e23e  gcc/ada/elists.h
--- 735,744 ----
  0a025bfec2a94c0fcd11a19d18f6c0c5  gcc/ada/doc/share/gnu_free_documentation_license.rst
  f1c71b64e1c84e240c7b5aea7331a32a  gcc/ada/doc/share/latex_elements.py
  90adfcde2feb6d6c090c2b18a1578145  gcc/ada/doc/share/sphinx.sty
! 131c5684aa0b748d5f313386f06d1105  gcc/ada/einfo-utils.adb
! da059a962474e91072338a8f8e212b3d  gcc/ada/einfo-utils.ads
  97ce2e179e42e649dfe8affca8e3c302  gcc/ada/einfo.adb
! ce197494ba7d66a9f8806615fe8b6cb6  gcc/ada/einfo.ads
  fef3bb4012357f98b9b104dfa3daee51  gcc/ada/elists.adb
  52dc293e77a753c73be5d02f2661369f  gcc/ada/elists.ads
  30a82f1a7c5bfcc4e8be8d79dc60e23e  gcc/ada/elists.h
*************** adb49f37416fce62d5759f9b4c733fe6  gcc/ad
*** 769,775 ****
  8d6933ec0ee945c50b4e8c114b1221b6  gcc/ada/exp_aggr.ads
  045a2ef4e4932ea2c0b17910db37af46  gcc/ada/exp_atag.adb
  2a027dfad5944cc346ee7c94c022d302  gcc/ada/exp_atag.ads
! 6fcbff476b55d43d38b9ef73fd60552c  gcc/ada/exp_attr.adb
  4b748ed1db282b666860ed488c4ff28d  gcc/ada/exp_attr.ads
  cda4ccedf4fc1e7d7dbe6864ee5bf8ad  gcc/ada/exp_cg.adb
  a188d43ef2eb5780d4b7f98731302640  gcc/ada/exp_cg.ads
--- 769,775 ----
  8d6933ec0ee945c50b4e8c114b1221b6  gcc/ada/exp_aggr.ads
  045a2ef4e4932ea2c0b17910db37af46  gcc/ada/exp_atag.adb
  2a027dfad5944cc346ee7c94c022d302  gcc/ada/exp_atag.ads
! c6258f9946c1129d79af9dd8379f0ba9  gcc/ada/exp_attr.adb
  4b748ed1db282b666860ed488c4ff28d  gcc/ada/exp_attr.ads
  cda4ccedf4fc1e7d7dbe6864ee5bf8ad  gcc/ada/exp_cg.adb
  a188d43ef2eb5780d4b7f98731302640  gcc/ada/exp_cg.ads
*************** a84d191dad3158db125ec48c285b9667  gcc/ad
*** 782,794 ****
  371cc0c543b5d2502352758eb7b73e8f  gcc/ada/exp_ch13.ads
  ace7dfdd53834601d964efef9557e0f4  gcc/ada/exp_ch2.adb
  aec86f795b370fca1379a25f37651fdf  gcc/ada/exp_ch2.ads
! 0f5646394aa403d5da742848179f2bfc  gcc/ada/exp_ch3.adb
  52ca7939bd6b0e1da9e20d902813d109  gcc/ada/exp_ch3.ads
! a714d09e2620cb4c720340116fc1e932  gcc/ada/exp_ch4.adb
  2d9cf8b148fdc7a07edde2cf9fbb59f8  gcc/ada/exp_ch4.ads
  f2ee63cc3c5f9f1809803f876187e83a  gcc/ada/exp_ch5.adb
  962c51f1fad8395553b843179ba06b79  gcc/ada/exp_ch5.ads
! be94ad218b63a5a5b17085a3c0975d69  gcc/ada/exp_ch6.adb
  06c642df831eac4b8b06e06e0cc2672b  gcc/ada/exp_ch6.ads
  209d78b894ee84003b9eb29efd6e6911  gcc/ada/exp_ch7.adb
  0328c88aa1134f7af3891cb24a0b27c8  gcc/ada/exp_ch7.ads
--- 782,794 ----
  371cc0c543b5d2502352758eb7b73e8f  gcc/ada/exp_ch13.ads
  ace7dfdd53834601d964efef9557e0f4  gcc/ada/exp_ch2.adb
  aec86f795b370fca1379a25f37651fdf  gcc/ada/exp_ch2.ads
! 56c0b56695ab0e16a29f022e8494d839  gcc/ada/exp_ch3.adb
  52ca7939bd6b0e1da9e20d902813d109  gcc/ada/exp_ch3.ads
! 4808d7da36856c92f5afa061365caf03  gcc/ada/exp_ch4.adb
  2d9cf8b148fdc7a07edde2cf9fbb59f8  gcc/ada/exp_ch4.ads
  f2ee63cc3c5f9f1809803f876187e83a  gcc/ada/exp_ch5.adb
  962c51f1fad8395553b843179ba06b79  gcc/ada/exp_ch5.ads
! fe531803d36f45fa8237cac8e12034e8  gcc/ada/exp_ch6.adb
  06c642df831eac4b8b06e06e0cc2672b  gcc/ada/exp_ch6.ads
  209d78b894ee84003b9eb29efd6e6911  gcc/ada/exp_ch7.adb
  0328c88aa1134f7af3891cb24a0b27c8  gcc/ada/exp_ch7.ads
*************** eed3a19516e7659bde4768b12a9c69e1  gcc/ad
*** 798,804 ****
  45a11420b5d0b55ee54b16d0aba80802  gcc/ada/exp_ch9.ads
  914abafc66aba1c22bfd983c48ee2d6a  gcc/ada/exp_code.adb
  8be63e29d5aeaf0a16ff7b4dc746e1a4  gcc/ada/exp_code.ads
! e837e02763d429cb690f4aa38c5c1da2  gcc/ada/exp_dbug.adb
  4aedf059cc4ede0c0c0d01a19e99d07d  gcc/ada/exp_dbug.ads
  f63626f667da542e69736ae15de0ff87  gcc/ada/exp_disp.adb
  4a4f2db1ce2689b32aa03195644a6fd0  gcc/ada/exp_disp.ads
--- 798,804 ----
  45a11420b5d0b55ee54b16d0aba80802  gcc/ada/exp_ch9.ads
  914abafc66aba1c22bfd983c48ee2d6a  gcc/ada/exp_code.adb
  8be63e29d5aeaf0a16ff7b4dc746e1a4  gcc/ada/exp_code.ads
! b171d3476227e3dc8a16f195b379b8b8  gcc/ada/exp_dbug.adb
  4aedf059cc4ede0c0c0d01a19e99d07d  gcc/ada/exp_dbug.ads
  f63626f667da542e69736ae15de0ff87  gcc/ada/exp_disp.adb
  4a4f2db1ce2689b32aa03195644a6fd0  gcc/ada/exp_disp.ads
*************** abc4adbcfcc5aec49e61dfe787dc8274  gcc/ad
*** 830,839 ****
  36837947cf32d9b44ffd59a3faf56050  gcc/ada/exp_unst.ads
  3f0705a62a425d5cb1237d0fcc4f791b  gcc/ada/exp_util.adb
  43d879ef4447d808c855fab353d66eb3  gcc/ada/exp_util.ads
! f51440b512c9ade5ec2b018b1126e40a  gcc/ada/expander.adb
  ca321269d17552e01fce3be99a0a3452  gcc/ada/expander.ads
  da666491b0d26eef3aa08ba31f054d9b  gcc/ada/expect.c
! 96ea1db659522f0433ba0ed3d7d3b6c6  gcc/ada/fe.h
  165030b8063a603329d4b5b61ab0dd45  gcc/ada/final.c
  c8c43a0fecaa61440e2baf650405cfdf  gcc/ada/fmap.adb
  32bf208558cc232d737f7a09cf4b8c9a  gcc/ada/fmap.ads
--- 830,839 ----
  36837947cf32d9b44ffd59a3faf56050  gcc/ada/exp_unst.ads
  3f0705a62a425d5cb1237d0fcc4f791b  gcc/ada/exp_util.adb
  43d879ef4447d808c855fab353d66eb3  gcc/ada/exp_util.ads
! da86db6b7d964bec3beb0995f66c2c49  gcc/ada/expander.adb
  ca321269d17552e01fce3be99a0a3452  gcc/ada/expander.ads
  da666491b0d26eef3aa08ba31f054d9b  gcc/ada/expect.c
! 513524ba29e86595d4d3ddf0cbae5071  gcc/ada/fe.h
  165030b8063a603329d4b5b61ab0dd45  gcc/ada/final.c
  c8c43a0fecaa61440e2baf650405cfdf  gcc/ada/fmap.adb
  32bf208558cc232d737f7a09cf4b8c9a  gcc/ada/fmap.ads
*************** aafcb91317d2b95ebf55c3e8bbc030e0  gcc/ad
*** 845,851 ****
  8a4878ab4881e98ec589708dfeabb6da  gcc/ada/fname.ads
  a631ccede5fe7f61c9176d983e58946e  gcc/ada/freeze.adb
  466eafe8c23a8bae84609ef5079ce927  gcc/ada/freeze.ads
! c8c5844ba2c26bdc1b7c004e5b806668  gcc/ada/frontend.adb
  03bc5c5bdf3e467c3fa035201ba507d2  gcc/ada/frontend.ads
  824ef47cefd79cf278ddd5d3571070d1  gcc/ada/gcc-interface/Make-lang.in
  3f59f3868f6c5ecd85d998234810fc5c  gcc/ada/gcc-interface/Makefile.in
--- 845,851 ----
  8a4878ab4881e98ec589708dfeabb6da  gcc/ada/fname.ads
  a631ccede5fe7f61c9176d983e58946e  gcc/ada/freeze.adb
  466eafe8c23a8bae84609ef5079ce927  gcc/ada/freeze.ads
! 477244fc65e5dfcdaaae0011d56505ef  gcc/ada/frontend.adb
  03bc5c5bdf3e467c3fa035201ba507d2  gcc/ada/frontend.ads
  824ef47cefd79cf278ddd5d3571070d1  gcc/ada/gcc-interface/Make-lang.in
  3f59f3868f6c5ecd85d998234810fc5c  gcc/ada/gcc-interface/Makefile.in
*************** ec10f477ad1d3dba6056061ede6ff919  gcc/ad
*** 868,879 ****
  80aa889cbda3eae1d793f281c543ec99  gcc/ada/gcc-interface/trans.cc
  9d36d8c03bd0a96c8694e0f4d47adf56  gcc/ada/gcc-interface/utils.cc
  61f921a0b83e0276983ebc2cfb11dc05  gcc/ada/gcc-interface/utils2.cc
! 92a8308c9fc1d84f1dca2aaaf80ccd21  gcc/ada/gen_il-fields.ads
! 3a4b9dde5d8848ba5fcce73c6ad2e40f  gcc/ada/gen_il-gen-gen_entities.adb
! 4015023ef953e8e24e123f1b6d62ce03  gcc/ada/gen_il-gen-gen_nodes.adb
! 7091bf4b26ab64fe3d88bd3feb79b94f  gcc/ada/gen_il-gen.adb
  ce980375550bc71a64634141fbbcf330  gcc/ada/gen_il-gen.ads
! 69c0994bcc9dc3ff0eb519a710c796f4  gcc/ada/gen_il-internals.adb
  13c279c3f7d8c512e493d39b07d73f55  gcc/ada/gen_il-internals.ads
  b1d2c753326cb490ddb2b49be7a3c3fe  gcc/ada/gen_il-main.adb
  74b13460ba8ec91b9fb5e513853a81f9  gcc/ada/gen_il-types.ads
--- 868,879 ----
  80aa889cbda3eae1d793f281c543ec99  gcc/ada/gcc-interface/trans.cc
  9d36d8c03bd0a96c8694e0f4d47adf56  gcc/ada/gcc-interface/utils.cc
  61f921a0b83e0276983ebc2cfb11dc05  gcc/ada/gcc-interface/utils2.cc
! 8d963d138d5f0baf938867c427038c61  gcc/ada/gen_il-fields.ads
! 8709b30c4725cf4de66d51da4a6eb5ec  gcc/ada/gen_il-gen-gen_entities.adb
! 8cfd0cc7c47e8f42b6d1c4a1578b4cf6  gcc/ada/gen_il-gen-gen_nodes.adb
! 4f2d5ebad38f5c8d8dc60e56a6264201  gcc/ada/gen_il-gen.adb
  ce980375550bc71a64634141fbbcf330  gcc/ada/gen_il-gen.ads
! efac73b8f0591f6ccda7a55122ae127c  gcc/ada/gen_il-internals.adb
  13c279c3f7d8c512e493d39b07d73f55  gcc/ada/gen_il-internals.ads
  b1d2c753326cb490ddb2b49be7a3c3fe  gcc/ada/gen_il-main.adb
  74b13460ba8ec91b9fb5e513853a81f9  gcc/ada/gen_il-types.ads
*************** b849854dad319fbe3b731250ec8bd396  gcc/ad
*** 884,890 ****
  087bcf710ff99554041ac9b656b7498d  gcc/ada/get_scos.ads
  c9a79d9a9ae90f3aa712a05fac2a292d  gcc/ada/get_targ.adb
  d6c10405a90333a12764946307dc0f65  gcc/ada/get_targ.ads
! 244a89202c0f9131cb5e14bf0070333c  gcc/ada/ghost.adb
  65a717e72149b03fce989eae4a597a62  gcc/ada/ghost.ads
  3e6d37543e1d3935a9987bbe1c5e7bf1  gcc/ada/gnat-style.texi
  c1f99a3d6e17232df36803792506b6f8  gcc/ada/gnat1drv.adb
--- 884,890 ----
  087bcf710ff99554041ac9b656b7498d  gcc/ada/get_scos.ads
  c9a79d9a9ae90f3aa712a05fac2a292d  gcc/ada/get_targ.adb
  d6c10405a90333a12764946307dc0f65  gcc/ada/get_targ.ads
! 9ecc8a29ced5278a91644bec81cbfbd1  gcc/ada/ghost.adb
  65a717e72149b03fce989eae4a597a62  gcc/ada/ghost.ads
  3e6d37543e1d3935a9987bbe1c5e7bf1  gcc/ada/gnat-style.texi
  c1f99a3d6e17232df36803792506b6f8  gcc/ada/gnat1drv.adb
*************** c1f99a3d6e17232df36803792506b6f8  gcc/ad
*** 892,898 ****
  917ea7311a30ec4c5cec3e610ca640c2  gcc/ada/gnat2.gpr
  635312af629edb6333cf662c55ae7a0b  gcc/ada/gnat_cuda.adb
  a930631c7c5fdabf12e2010079214e38  gcc/ada/gnat_cuda.ads
! e3755aeb2d0c3d7b09167ae08e024b62  gcc/ada/gnat_rm.texi
  ab379d61794fd806214bd7b948c41e10  gcc/ada/gnat_ugn.texi
  97a151562fa533cd370413751bd18564  gcc/ada/gnatbind.adb
  cf407dc104ddb2d242f8c79a9b8166ec  gcc/ada/gnatbind.ads
--- 892,898 ----
  917ea7311a30ec4c5cec3e610ca640c2  gcc/ada/gnat2.gpr
  635312af629edb6333cf662c55ae7a0b  gcc/ada/gnat_cuda.adb
  a930631c7c5fdabf12e2010079214e38  gcc/ada/gnat_cuda.ads
! 1e6a0fe31bdb50798501cd6a34aef992  gcc/ada/gnat_rm.texi
  ab379d61794fd806214bd7b948c41e10  gcc/ada/gnat_ugn.texi
  97a151562fa533cd370413751bd18564  gcc/ada/gnatbind.adb
  cf407dc104ddb2d242f8c79a9b8166ec  gcc/ada/gnatbind.ads
*************** eb3b6f429c0b93cc8e9788ea4ac4e8c6  gcc/ad
*** 929,935 ****
  18250f749f24e01ba1da7cf90a1d60c2  gcc/ada/indepsw.ads
  e90d589fb32fbd65ef6727e79d8ca1a8  gcc/ada/init.c
  bc9cb67c7c529d85eae0a62d8155e31e  gcc/ada/initialize.c
! 5d4395a48911c8ee727af86992fe4bc3  gcc/ada/inline.adb
  3dd5bae636367e30ea8d186d903cd54a  gcc/ada/inline.ads
  e9cdc0c5c27e9fc2f7c18857dde261a7  gcc/ada/itypes.adb
  f907b184de1987a24c20c953fa9d64ef  gcc/ada/itypes.ads
--- 929,935 ----
  18250f749f24e01ba1da7cf90a1d60c2  gcc/ada/indepsw.ads
  e90d589fb32fbd65ef6727e79d8ca1a8  gcc/ada/init.c
  bc9cb67c7c529d85eae0a62d8155e31e  gcc/ada/initialize.c
! 845001c6ac077af4b2ce75f1c1b0f196  gcc/ada/inline.adb
  3dd5bae636367e30ea8d186d903cd54a  gcc/ada/inline.ads
  e9cdc0c5c27e9fc2f7c18857dde261a7  gcc/ada/itypes.adb
  f907b184de1987a24c20c953fa9d64ef  gcc/ada/itypes.ads
*************** baa0b98c38f214ae12efbda6ae64d876  gcc/ad
*** 940,946 ****
  86b323e60815784ff0895117d4d41de0  gcc/ada/layout.adb
  16fd58323459ff08fde71a5df6b890d2  gcc/ada/layout.ads
  d38d84794d585011fdcb98c38e29abe0  gcc/ada/lib-list.adb
! dc629c2ad5605b0cd2bf533353334a40  gcc/ada/lib-load.adb
  2c37a4cd6a99e963c7143d8f6f0fab8e  gcc/ada/lib-load.ads
  ac639c21482870af6d4302fb4caee182  gcc/ada/lib-sort.adb
  d3274473132edf2a642cd08e5a593ee8  gcc/ada/lib-util.adb
--- 940,946 ----
  86b323e60815784ff0895117d4d41de0  gcc/ada/layout.adb
  16fd58323459ff08fde71a5df6b890d2  gcc/ada/layout.ads
  d38d84794d585011fdcb98c38e29abe0  gcc/ada/lib-list.adb
! 8f29e5c89abb5063891b2fe31e32e29f  gcc/ada/lib-load.adb
  2c37a4cd6a99e963c7143d8f6f0fab8e  gcc/ada/lib-load.ads
  ac639c21482870af6d4302fb4caee182  gcc/ada/lib-sort.adb
  d3274473132edf2a642cd08e5a593ee8  gcc/ada/lib-util.adb
*************** b8ab088a9f7e22d3ffa98107cea5f562  gcc/ad
*** 950,956 ****
  c9808ebcd9224107da699194023ce9a1  gcc/ada/lib-xref-spark_specific.adb
  927475a40f4689794ebb97e3d0e9588c  gcc/ada/lib-xref.adb
  95bf947a3a0d2c0c47d45fe004f1af67  gcc/ada/lib-xref.ads
! d997922c484b3ebfd335c332bfc47939  gcc/ada/lib.adb
  8e856a8dc8da57fb0656b8fdcbff8612  gcc/ada/lib.ads
  08bdbaf50f1e87c49cfcdbe0e84e5402  gcc/ada/libgnarl/a-astaco.adb
  c13d27ec688dfebb1965a8e9eaf55c2c  gcc/ada/libgnarl/a-astaco.ads
--- 950,956 ----
  c9808ebcd9224107da699194023ce9a1  gcc/ada/lib-xref-spark_specific.adb
  927475a40f4689794ebb97e3d0e9588c  gcc/ada/lib-xref.adb
  95bf947a3a0d2c0c47d45fe004f1af67  gcc/ada/lib-xref.ads
! 306b2b59e80b983c82e4b2f43357a09a  gcc/ada/lib.adb
  8e856a8dc8da57fb0656b8fdcbff8612  gcc/ada/lib.ads
  08bdbaf50f1e87c49cfcdbe0e84e5402  gcc/ada/libgnarl/a-astaco.adb
  c13d27ec688dfebb1965a8e9eaf55c2c  gcc/ada/libgnarl/a-astaco.ads
*************** aa8ee7a04e292a14d18da20ed5efb983  gcc/ad
*** 1203,1209 ****
  457b034b9c4584c13c18c5f2a233569e  gcc/ada/libgnat/a-cbhama.ads
  165d3e530f0d803babc9616be10f5268  gcc/ada/libgnat/a-cbhase.adb
  70c99263d65d2c51fbd0f81e9c9b1b51  gcc/ada/libgnat/a-cbhase.ads
! fd26529274277ef4d171db9e0ea45fca  gcc/ada/libgnat/a-cbinho.adb
  ed7f47c9a26fcdd4c58cad080f19cf05  gcc/ada/libgnat/a-cbinho.ads
  c838aeade3bfa5ba17350ceb65b09e00  gcc/ada/libgnat/a-cbmutr.adb
  d58f87c0492c3db9ca1a3678408eb206  gcc/ada/libgnat/a-cbmutr.ads
--- 1203,1209 ----
  457b034b9c4584c13c18c5f2a233569e  gcc/ada/libgnat/a-cbhama.ads
  165d3e530f0d803babc9616be10f5268  gcc/ada/libgnat/a-cbhase.adb
  70c99263d65d2c51fbd0f81e9c9b1b51  gcc/ada/libgnat/a-cbhase.ads
! a8c33bd0c3b067a905d1e86df608210e  gcc/ada/libgnat/a-cbinho.adb
  ed7f47c9a26fcdd4c58cad080f19cf05  gcc/ada/libgnat/a-cbinho.ads
  c838aeade3bfa5ba17350ceb65b09e00  gcc/ada/libgnat/a-cbmutr.adb
  d58f87c0492c3db9ca1a3678408eb206  gcc/ada/libgnat/a-cbmutr.ads
*************** fea63f0e6d1b1db917cb7e96cd814860  gcc/ad
*** 1557,1563 ****
  927837e686ac75668a6feb9078a47ba6  gcc/ada/libgnat/a-stzunb__shared.ads
  6adebe685c18087023cf46f0bbd2dfda  gcc/ada/libgnat/a-suecin.adb
  c672ebd601e0b7bf6158124aaff82c3b  gcc/ada/libgnat/a-suecin.ads
! 9f34d9d9471ac131bb6150bb08871175  gcc/ada/libgnat/a-suenco.adb
  24c625ef90e191bc1baa69c58ae2600f  gcc/ada/libgnat/a-suenco.ads
  7dcfd04ee223de76491809e49da78b22  gcc/ada/libgnat/a-suenst.adb
  5a81ae9196b241db71c16198169dbed7  gcc/ada/libgnat/a-suenst.ads
--- 1557,1563 ----
  927837e686ac75668a6feb9078a47ba6  gcc/ada/libgnat/a-stzunb__shared.ads
  6adebe685c18087023cf46f0bbd2dfda  gcc/ada/libgnat/a-suecin.adb
  c672ebd601e0b7bf6158124aaff82c3b  gcc/ada/libgnat/a-suecin.ads
! dc5b10aac17f7ce9aec9643354aa38d1  gcc/ada/libgnat/a-suenco.adb
  24c625ef90e191bc1baa69c58ae2600f  gcc/ada/libgnat/a-suenco.ads
  7dcfd04ee223de76491809e49da78b22  gcc/ada/libgnat/a-suenst.adb
  5a81ae9196b241db71c16198169dbed7  gcc/ada/libgnat/a-suenst.ads
*************** e6eb6e11844ac7b4b7dba50952a7dc64  gcc/ad
*** 1971,1978 ****
  71b8fcc7b39a14905998e321a4a768cf  gcc/ada/libgnat/g-tasloc.ads
  0e1fbfebc882b333c3573b5a5b6c568f  gcc/ada/libgnat/g-timsta.adb
  03fcc3502a8d17e8ccee01b9c03f8671  gcc/ada/libgnat/g-timsta.ads
! 1baf2f3da46c886099ba39a3d79b4496  gcc/ada/libgnat/g-traceb.adb
! 30d2549c3e9bf7bde65c1d53a9a390cb  gcc/ada/libgnat/g-traceb.ads
  b2f1938b3493c547521447626f8a4660  gcc/ada/libgnat/g-trasym.adb
  3662e6161b180f0c20bf51d0822e4641  gcc/ada/libgnat/g-trasym.ads
  d6dd6518f836308d5f8310791be32909  gcc/ada/libgnat/g-tty.adb
--- 1971,1978 ----
  71b8fcc7b39a14905998e321a4a768cf  gcc/ada/libgnat/g-tasloc.ads
  0e1fbfebc882b333c3573b5a5b6c568f  gcc/ada/libgnat/g-timsta.adb
  03fcc3502a8d17e8ccee01b9c03f8671  gcc/ada/libgnat/g-timsta.ads
! a6168981d874e9f81b351021c60ddb15  gcc/ada/libgnat/g-traceb.adb
! 2d2d78b6539a469d14f46408f217ae59  gcc/ada/libgnat/g-traceb.ads
  b2f1938b3493c547521447626f8a4660  gcc/ada/libgnat/g-trasym.adb
  3662e6161b180f0c20bf51d0822e4641  gcc/ada/libgnat/g-trasym.ads
  d6dd6518f836308d5f8310791be32909  gcc/ada/libgnat/g-tty.adb
*************** af9c8aea45dc595a84d279be37a6e65e  gcc/ad
*** 2015,2021 ****
  07ad4351f58361d1e8c9b345ba3966ae  gcc/ada/libgnat/interfac__2020.ads
  c2121d458a346c0b9d83825c544b9516  gcc/ada/libgnat/ioexcept.ads
  e793c8df6f0ffab52eef39bb5d82d97f  gcc/ada/libgnat/libada.gpr
! 3f06db23d4408a23b5b8739851a3847a  gcc/ada/libgnat/libgnat.gpr
  cf5fbbe7ae49ee16e33e55135bc15876  gcc/ada/libgnat/libgnat_common.gpr
  ed1b5d3179de47e97e497b15a5367eb3  gcc/ada/libgnat/machcode.ads
  9fd8db83a4a10b1f8eb2e5e5c726bcf8  gcc/ada/libgnat/memtrack.adb
--- 2015,2021 ----
  07ad4351f58361d1e8c9b345ba3966ae  gcc/ada/libgnat/interfac__2020.ads
  c2121d458a346c0b9d83825c544b9516  gcc/ada/libgnat/ioexcept.ads
  e793c8df6f0ffab52eef39bb5d82d97f  gcc/ada/libgnat/libada.gpr
! 057d5cf2426aa4db1f4c6429cf269c20  gcc/ada/libgnat/libgnat.gpr
  cf5fbbe7ae49ee16e33e55135bc15876  gcc/ada/libgnat/libgnat_common.gpr
  ed1b5d3179de47e97e497b15a5367eb3  gcc/ada/libgnat/machcode.ads
  9fd8db83a4a10b1f8eb2e5e5c726bcf8  gcc/ada/libgnat/memtrack.adb
*************** fb7d194bf2f03af117ec6954f2e05ed9  gcc/ad
*** 2651,2657 ****
  6527e336fa0cc373d39332cc4f653008  gcc/ada/libgnat/s-ststop.ads
  3d01ed47120ffd25fdc3ab6227db7fbb  gcc/ada/libgnat/s-tasloc.adb
  58ddb85039b1d4099734ac1ba86a4499  gcc/ada/libgnat/s-tasloc.ads
! 9f7b5a9ec1133418513130262d8ba10a  gcc/ada/libgnat/s-traceb.adb
  2e380399c2c18b676c4c5a94da4e45be  gcc/ada/libgnat/s-traceb.ads
  6019108bfbf541b812202d4a647e7dfd  gcc/ada/libgnat/s-traceb__hpux.adb
  1046e8e3ee8053c221d1af2458520035  gcc/ada/libgnat/s-traceb__mastop.adb
--- 2651,2657 ----
  6527e336fa0cc373d39332cc4f653008  gcc/ada/libgnat/s-ststop.ads
  3d01ed47120ffd25fdc3ab6227db7fbb  gcc/ada/libgnat/s-tasloc.adb
  58ddb85039b1d4099734ac1ba86a4499  gcc/ada/libgnat/s-tasloc.ads
! a06188053865bd525dea305aa6fcabfa  gcc/ada/libgnat/s-traceb.adb
  2e380399c2c18b676c4c5a94da4e45be  gcc/ada/libgnat/s-traceb.ads
  6019108bfbf541b812202d4a647e7dfd  gcc/ada/libgnat/s-traceb__hpux.adb
  1046e8e3ee8053c221d1af2458520035  gcc/ada/libgnat/s-traceb__mastop.adb
*************** f19111d9bc1c133486a49b6b78e36e53  gcc/ad
*** 2832,2839 ****
  e6e20209cad9c43a0c9e098f3429fdb6  gcc/ada/nlists.adb
  4fcbbba0f9690723f59ad615e6a0a017  gcc/ada/nlists.ads
  ede196142f051ce40a763d452c74c998  gcc/ada/nlists.h
! b7a4ce5c6e4753fcc4e09f7c8ef90b12  gcc/ada/opt.adb
! bb8a5264a87dde91dbb223da681d7caa  gcc/ada/opt.ads
  9df196852e294224ecf27a573848f3be  gcc/ada/osint-b.adb
  45a0f826bc919f6c3d5283a3970115d4  gcc/ada/osint-b.ads
  0c60ea9217bc90dfe2d9b4649b2f3915  gcc/ada/osint-c.adb
--- 2832,2839 ----
  e6e20209cad9c43a0c9e098f3429fdb6  gcc/ada/nlists.adb
  4fcbbba0f9690723f59ad615e6a0a017  gcc/ada/nlists.ads
  ede196142f051ce40a763d452c74c998  gcc/ada/nlists.h
! 3e8e8e000423812586d83a4f6e343a3c  gcc/ada/opt.adb
! e8035d22ffc988d09a310c3828433798  gcc/ada/opt.ads
  9df196852e294224ecf27a573848f3be  gcc/ada/osint-b.adb
  45a0f826bc919f6c3d5283a3970115d4  gcc/ada/osint-b.ads
  0c60ea9217bc90dfe2d9b4649b2f3915  gcc/ada/osint-c.adb
*************** c96543587e52ea7ab356a9719db298f9  gcc/ad
*** 2846,2871 ****
  85465cfceede147e236c7aa52a4ef6f6  gcc/ada/osint.ads
  6026a4ededfbea65e3264219c2df9584  gcc/ada/output.adb
  bf52dfdb3b0ad7b46acd6b6ec476611c  gcc/ada/output.ads
! 2dbb9d9240dc06e70a2f34a597a815c6  gcc/ada/par-ch10.adb
  69a2e7867057d08861c69638310a6144  gcc/ada/par-ch11.adb
  ba0e112ae1cbefadd145a4e7c06f1642  gcc/ada/par-ch12.adb
! 9f715bca934e45ee4db7bbd2858d54e1  gcc/ada/par-ch13.adb
  fc57966056b0077a0fadd4887212d6bd  gcc/ada/par-ch2.adb
! b1d4afc6808a25c1e061c645f6a9f98e  gcc/ada/par-ch3.adb
  63a2db0c45fffcb07ad9774a590ba474  gcc/ada/par-ch4.adb
  0585d7a7aad5f825e2f48c263b0e0ee8  gcc/ada/par-ch5.adb
! b7e65797088047c28c917ce1878a68ba  gcc/ada/par-ch6.adb
! 7487b885c869951f3e91c38a96428135  gcc/ada/par-ch7.adb
  8088c92c25aa6f8d485fa42b1326be8d  gcc/ada/par-ch8.adb
! 313af84513a1bfcd8cd6418c76eebe26  gcc/ada/par-ch9.adb
  1f70b7cd17a7598b624b2901c6cea77c  gcc/ada/par-endh.adb
  4631e5d0cb69105860231a799366b230  gcc/ada/par-labl.adb
  7d004b6b482794a85e318cb7452f55ef  gcc/ada/par-load.adb
! 1ab5f8bb9861c400169d377b2066f139  gcc/ada/par-prag.adb
  4f0a80ae4dcac15e0ae11b61ce2a351a  gcc/ada/par-sync.adb
  fd52cb07f6816c9f989d767432353844  gcc/ada/par-tchk.adb
  6a85b390d0cf809f2acc202c41a1e295  gcc/ada/par-util.adb
! e73dae35669f0fc6454371455d0d5064  gcc/ada/par.adb
  dec03d93846b2cf0f195f599e6ebe085  gcc/ada/par.ads
  397a8c4eaae8d55eb7e4accd4d09745f  gcc/ada/par_sco.adb
  a2fb0d304cec6a62b7a0096915bbacc4  gcc/ada/par_sco.ads
--- 2846,2871 ----
  85465cfceede147e236c7aa52a4ef6f6  gcc/ada/osint.ads
  6026a4ededfbea65e3264219c2df9584  gcc/ada/output.adb
  bf52dfdb3b0ad7b46acd6b6ec476611c  gcc/ada/output.ads
! 8426abd6df92901ee88cf9dc90afb3d5  gcc/ada/par-ch10.adb
  69a2e7867057d08861c69638310a6144  gcc/ada/par-ch11.adb
  ba0e112ae1cbefadd145a4e7c06f1642  gcc/ada/par-ch12.adb
! cb6fb30b0bafef175c164d6101fed9e4  gcc/ada/par-ch13.adb
  fc57966056b0077a0fadd4887212d6bd  gcc/ada/par-ch2.adb
! 72384ae4f876d171cf561494dcce5966  gcc/ada/par-ch3.adb
  63a2db0c45fffcb07ad9774a590ba474  gcc/ada/par-ch4.adb
  0585d7a7aad5f825e2f48c263b0e0ee8  gcc/ada/par-ch5.adb
! 956af2f3ecb912bdea2819ff321692b6  gcc/ada/par-ch6.adb
! 558ef22825b7a759e5b43d40e9566848  gcc/ada/par-ch7.adb
  8088c92c25aa6f8d485fa42b1326be8d  gcc/ada/par-ch8.adb
! f1e8c6c878d014498b8b3b88dd99b012  gcc/ada/par-ch9.adb
  1f70b7cd17a7598b624b2901c6cea77c  gcc/ada/par-endh.adb
  4631e5d0cb69105860231a799366b230  gcc/ada/par-labl.adb
  7d004b6b482794a85e318cb7452f55ef  gcc/ada/par-load.adb
! b2c03c72a91079047ebbca1e688fc038  gcc/ada/par-prag.adb
  4f0a80ae4dcac15e0ae11b61ce2a351a  gcc/ada/par-sync.adb
  fd52cb07f6816c9f989d767432353844  gcc/ada/par-tchk.adb
  6a85b390d0cf809f2acc202c41a1e295  gcc/ada/par-util.adb
! 54bb999c25a3cea53498fa6a59d25b17  gcc/ada/par.adb
  dec03d93846b2cf0f195f599e6ebe085  gcc/ada/par.ads
  397a8c4eaae8d55eb7e4accd4d09745f  gcc/ada/par_sco.adb
  a2fb0d304cec6a62b7a0096915bbacc4  gcc/ada/par_sco.ads
*************** aa1f862a7c4c214d577596fb157bd0f8  gcc/ad
*** 2885,2896 ****
  0bed3d3b816f589a4981a9623caea4b0  gcc/ada/repinfo.adb
  676810aa2170cb10ee36c56b2998eb84  gcc/ada/repinfo.ads
  589cb3f605f73641be06f0f0cc16d631  gcc/ada/repinfo.h
! e5010ee8b4286a5e99d1258267b68113  gcc/ada/restrict.adb
  3132f3889ff35b3b58965cf652b9f3d5  gcc/ada/restrict.ads
  6b9811e6ddf7d989b3ad01ebf5430e99  gcc/ada/rident.ads
  6741c00af04e8dce4efb35a65a842fe6  gcc/ada/rtfinal.c
  5934ee793c29da1585df983ea9f993e1  gcc/ada/rtinit.c
! c8acf6ac7093b282e3980ed88f489048  gcc/ada/rtsfind.adb
  607bb6d037f3ec4452ddf3801e54be81  gcc/ada/rtsfind.ads
  f2d824e32fdafcf6970c1e1e66ea59f8  gcc/ada/runtime.h
  5c68caea711566c64edb3308f5a70992  gcc/ada/s-oscons-tmplt.c
--- 2885,2896 ----
  0bed3d3b816f589a4981a9623caea4b0  gcc/ada/repinfo.adb
  676810aa2170cb10ee36c56b2998eb84  gcc/ada/repinfo.ads
  589cb3f605f73641be06f0f0cc16d631  gcc/ada/repinfo.h
! 424bbaa00cc3f7ff6cf3167670472dcc  gcc/ada/restrict.adb
  3132f3889ff35b3b58965cf652b9f3d5  gcc/ada/restrict.ads
  6b9811e6ddf7d989b3ad01ebf5430e99  gcc/ada/rident.ads
  6741c00af04e8dce4efb35a65a842fe6  gcc/ada/rtfinal.c
  5934ee793c29da1585df983ea9f993e1  gcc/ada/rtinit.c
! 541a319aaa4299017dbfce526f31696a  gcc/ada/rtsfind.adb
  607bb6d037f3ec4452ddf3801e54be81  gcc/ada/rtsfind.ads
  f2d824e32fdafcf6970c1e1e66ea59f8  gcc/ada/runtime.h
  5c68caea711566c64edb3308f5a70992  gcc/ada/s-oscons-tmplt.c
*************** acf67cc2ad3c40fe466a03f76c6450e1  gcc/ad
*** 2912,2918 ****
  65869457d1676879dc545835475f7421  gcc/ada/sem.ads
  1f1ea5b059ab31ee369cc51ba1071c8c  gcc/ada/sem_aggr.adb
  d5ddab4fcf440bf2f49a9a190fd12829  gcc/ada/sem_aggr.ads
! d1089a551a6dd24762fb0ab2af7e6e7b  gcc/ada/sem_attr.adb
  f5a25d26b815f5d376e2873f3ab69359  gcc/ada/sem_attr.ads
  39892cb912c9fe4b0d512cfc104e5bd7  gcc/ada/sem_aux.adb
  5df4642fb17b29da9f787e48f24551b9  gcc/ada/sem_aux.ads
--- 2912,2918 ----
  65869457d1676879dc545835475f7421  gcc/ada/sem.ads
  1f1ea5b059ab31ee369cc51ba1071c8c  gcc/ada/sem_aggr.adb
  d5ddab4fcf440bf2f49a9a190fd12829  gcc/ada/sem_aggr.ads
! 123516e551b0632b4e9939da0d585a20  gcc/ada/sem_attr.adb
  f5a25d26b815f5d376e2873f3ab69359  gcc/ada/sem_attr.ads
  39892cb912c9fe4b0d512cfc104e5bd7  gcc/ada/sem_aux.adb
  5df4642fb17b29da9f787e48f24551b9  gcc/ada/sem_aux.ads
*************** bd02733d13b54612fc6d4cd0e340b3ea  gcc/ad
*** 2924,2956 ****
  ad2bb60b9c4c67653f4da4b0e70277d7  gcc/ada/sem_ch10.ads
  e3dc2d270994bba222e70ec02479ac37  gcc/ada/sem_ch11.adb
  7efb6a0f371113d8b55b421ee56dd1dd  gcc/ada/sem_ch11.ads
! 6c5fd261341bc70e511f15fb05d369c4  gcc/ada/sem_ch12.adb
  2622dbf1c1774a89ada3cba34f1da316  gcc/ada/sem_ch12.ads
! 1e787d43f7088571b8e7a4f3cae0d2f2  gcc/ada/sem_ch13.adb
  ec60ecc54472eacb95e7a2bc99058514  gcc/ada/sem_ch13.ads
  260948dd8c7af25b5acaa288032c9327  gcc/ada/sem_ch2.adb
  ea86a0345845800d7aaf07f22bb4bf6c  gcc/ada/sem_ch2.ads
! 5b2f80d06b50e00b989fe35b5973698d  gcc/ada/sem_ch3.adb
  2d8f83bc46638356bc311ccd50015b1f  gcc/ada/sem_ch3.ads
  2656c66e51cd968130b08cd344827a00  gcc/ada/sem_ch4.adb
  fdd750bd30c3186d912dfed4717a2c0c  gcc/ada/sem_ch4.ads
  a9398364ab25c6bd5af8f323cb3a4763  gcc/ada/sem_ch5.adb
  0851668baacc82a6125a6cdd3254a804  gcc/ada/sem_ch5.ads
! 431665c8a9d9a12bededee164b3aead7  gcc/ada/sem_ch6.adb
  9ac8c4c57213097618cdb7c0b7b4f47b  gcc/ada/sem_ch6.ads
! 8086821850ed806d5f4d283e00da6ec3  gcc/ada/sem_ch7.adb
  b15ba6dec89e775b188e9d07764efc63  gcc/ada/sem_ch7.ads
! 50f3d574967de682b7cf73fc690bf063  gcc/ada/sem_ch8.adb
  5bcf24e9f3725dd07ba44097469a5101  gcc/ada/sem_ch8.ads
  705c86e7eb2e8956f7753dbcb1619557  gcc/ada/sem_ch9.adb
  11764389473d404a17921f767d1eadd4  gcc/ada/sem_ch9.ads
  f3bd7a2465fe64a8cce43f75b64830f2  gcc/ada/sem_dim.adb
  620c52688fb31336b46194dd14b591c5  gcc/ada/sem_dim.ads
! 8fc1f44cc94b142ab7fffd9442b7dd77  gcc/ada/sem_disp.adb
  c561e91cdb7fccdd5ca5feb341e3b60e  gcc/ada/sem_disp.ads
  9fde85ee11163049f614690191efa464  gcc/ada/sem_dist.adb
  59a3d1317e6d4dd1fdf74f377c86bb9a  gcc/ada/sem_dist.ads
! a48d59cfa56144da8759d8d431bd6fd2  gcc/ada/sem_elab.adb
  f4f58bc7c6b586440e37173fcc83a145  gcc/ada/sem_elab.ads
  7bd797b14c1442e801878ac792984728  gcc/ada/sem_elim.adb
  be5bd8727bcc81e7515f2a0386cf8af3  gcc/ada/sem_elim.ads
--- 2924,2956 ----
  ad2bb60b9c4c67653f4da4b0e70277d7  gcc/ada/sem_ch10.ads
  e3dc2d270994bba222e70ec02479ac37  gcc/ada/sem_ch11.adb
  7efb6a0f371113d8b55b421ee56dd1dd  gcc/ada/sem_ch11.ads
! e102106501ec17369ddacce53c1c6c05  gcc/ada/sem_ch12.adb
  2622dbf1c1774a89ada3cba34f1da316  gcc/ada/sem_ch12.ads
! a7cdba01724a5a0d104d93575163a3ea  gcc/ada/sem_ch13.adb
  ec60ecc54472eacb95e7a2bc99058514  gcc/ada/sem_ch13.ads
  260948dd8c7af25b5acaa288032c9327  gcc/ada/sem_ch2.adb
  ea86a0345845800d7aaf07f22bb4bf6c  gcc/ada/sem_ch2.ads
! 871ea8446a3c444c010ef12e6885dc15  gcc/ada/sem_ch3.adb
  2d8f83bc46638356bc311ccd50015b1f  gcc/ada/sem_ch3.ads
  2656c66e51cd968130b08cd344827a00  gcc/ada/sem_ch4.adb
  fdd750bd30c3186d912dfed4717a2c0c  gcc/ada/sem_ch4.ads
  a9398364ab25c6bd5af8f323cb3a4763  gcc/ada/sem_ch5.adb
  0851668baacc82a6125a6cdd3254a804  gcc/ada/sem_ch5.ads
! c86d18936d863882ec6446a79ec1f959  gcc/ada/sem_ch6.adb
  9ac8c4c57213097618cdb7c0b7b4f47b  gcc/ada/sem_ch6.ads
! f0e6feb2c279675d7b84790cc8c73c2e  gcc/ada/sem_ch7.adb
  b15ba6dec89e775b188e9d07764efc63  gcc/ada/sem_ch7.ads
! 90c7969914972d9a9f9e40436b94bba1  gcc/ada/sem_ch8.adb
  5bcf24e9f3725dd07ba44097469a5101  gcc/ada/sem_ch8.ads
  705c86e7eb2e8956f7753dbcb1619557  gcc/ada/sem_ch9.adb
  11764389473d404a17921f767d1eadd4  gcc/ada/sem_ch9.ads
  f3bd7a2465fe64a8cce43f75b64830f2  gcc/ada/sem_dim.adb
  620c52688fb31336b46194dd14b591c5  gcc/ada/sem_dim.ads
! 4916005f88041eb884417d60292e3f73  gcc/ada/sem_disp.adb
  c561e91cdb7fccdd5ca5feb341e3b60e  gcc/ada/sem_disp.ads
  9fde85ee11163049f614690191efa464  gcc/ada/sem_dist.adb
  59a3d1317e6d4dd1fdf74f377c86bb9a  gcc/ada/sem_dist.ads
! eb85b6767fe77e711e9e3e691767f95c  gcc/ada/sem_elab.adb
  f4f58bc7c6b586440e37173fcc83a145  gcc/ada/sem_elab.ads
  7bd797b14c1442e801878ac792984728  gcc/ada/sem_elim.adb
  be5bd8727bcc81e7515f2a0386cf8af3  gcc/ada/sem_elim.ads
*************** be5bd8727bcc81e7515f2a0386cf8af3  gcc/ad
*** 2960,2968 ****
  01d971c16ae04f83f122ff2b4854e30d  gcc/ada/sem_intr.ads
  60c61925626b00c286ee1c92562b17ef  gcc/ada/sem_mech.adb
  39b96f04803db97ae1f7376d30a0cfec  gcc/ada/sem_mech.ads
! be4b566896825626429b7d3975d0cead  gcc/ada/sem_prag.adb
! 61f67b82bf0abfa83eb7e4927498285c  gcc/ada/sem_prag.ads
! 747a66d605cecfc255c988ceb62e0ca4  gcc/ada/sem_res.adb
  e3b9f77c37497d7f7824085d3df8fde8  gcc/ada/sem_res.ads
  4e8a9bc2b398560942d0c08f4017fabb  gcc/ada/sem_scil.adb
  64ae38c93be63a67f143484eba77604b  gcc/ada/sem_scil.ads
--- 2960,2968 ----
  01d971c16ae04f83f122ff2b4854e30d  gcc/ada/sem_intr.ads
  60c61925626b00c286ee1c92562b17ef  gcc/ada/sem_mech.adb
  39b96f04803db97ae1f7376d30a0cfec  gcc/ada/sem_mech.ads
! ee6e41995c43f0c4420c529b33e9383b  gcc/ada/sem_prag.adb
! 74c910ce428c01e6523f86e202f26040  gcc/ada/sem_prag.ads
! fa731adc2024465e7c72134fa38ce4ea  gcc/ada/sem_res.adb
  e3b9f77c37497d7f7824085d3df8fde8  gcc/ada/sem_res.ads
  4e8a9bc2b398560942d0c08f4017fabb  gcc/ada/sem_scil.adb
  64ae38c93be63a67f143484eba77604b  gcc/ada/sem_scil.ads
*************** e3b9f77c37497d7f7824085d3df8fde8  gcc/ad
*** 2970,2978 ****
  21afb93e10bb9446fcbf7577bbf39c7f  gcc/ada/sem_smem.ads
  1de99683c6514c34448d2bbc7ddb8856  gcc/ada/sem_type.adb
  65653b347d1d3f800e49cd916a551d1c  gcc/ada/sem_type.ads
! 331d30a6890e6095b90bc0fb15d73009  gcc/ada/sem_util.adb
! b0c235c18760d7cef10dd854a924d2b0  gcc/ada/sem_util.ads
! 4bf398858e4692ff6bd88081ab99701c  gcc/ada/sem_warn.adb
  1952fbda97ea4c6506f452eac9934bb4  gcc/ada/sem_warn.ads
  75ee1e8bae201fd70d666856c4dbb8e5  gcc/ada/set_targ.adb
  9be350008098fd37edd51e4c3977c64d  gcc/ada/set_targ.ads
--- 2970,2978 ----
  21afb93e10bb9446fcbf7577bbf39c7f  gcc/ada/sem_smem.ads
  1de99683c6514c34448d2bbc7ddb8856  gcc/ada/sem_type.adb
  65653b347d1d3f800e49cd916a551d1c  gcc/ada/sem_type.ads
! 095eb1ddbe339bed2396358b45575316  gcc/ada/sem_util.adb
! 4be4a63392ef73c291b1a95cb8f92049  gcc/ada/sem_util.ads
! 9f2ddb5c1f96bfb925bc1c9fbbc0c3a5  gcc/ada/sem_warn.adb
  1952fbda97ea4c6506f452eac9934bb4  gcc/ada/sem_warn.ads
  75ee1e8bae201fd70d666856c4dbb8e5  gcc/ada/set_targ.adb
  9be350008098fd37edd51e4c3977c64d  gcc/ada/set_targ.ads
*************** c354c16b3d545f16b99be6618073100e  gcc/ad
*** 2991,2997 ****
  080aea4da0993c49dfd80c8789fed307  gcc/ada/sinfo-utils.adb
  34ff18d034a08b0c9d5d6d61fc92d189  gcc/ada/sinfo-utils.ads
  1cfe9bd70a04767965df45d859d8e7c1  gcc/ada/sinfo.adb
! 66f533dc906bd1ab885103e787fd7602  gcc/ada/sinfo.ads
  52e8a9630e4050f9cba2ab037d7a2019  gcc/ada/sinput-c.adb
  5f19ebc3c423ec457c4a3c90b841f631  gcc/ada/sinput-c.ads
  0faf319433a1ed69b9efdbcbdb4eac2c  gcc/ada/sinput-d.adb
--- 2991,2997 ----
  080aea4da0993c49dfd80c8789fed307  gcc/ada/sinfo-utils.adb
  34ff18d034a08b0c9d5d6d61fc92d189  gcc/ada/sinfo-utils.ads
  1cfe9bd70a04767965df45d859d8e7c1  gcc/ada/sinfo.adb
! d4388d375c232059a3a6238241f94e61  gcc/ada/sinfo.ads
  52e8a9630e4050f9cba2ab037d7a2019  gcc/ada/sinput-c.adb
  5f19ebc3c423ec457c4a3c90b841f631  gcc/ada/sinput-c.ads
  0faf319433a1ed69b9efdbcbdb4eac2c  gcc/ada/sinput-d.adb
*************** af6b93fe92dc2703693dbc958472e99d  gcc/ad
*** 3001,3013 ****
  4c47a09e0165de090d03fa2396d99a7a  gcc/ada/sinput.adb
  29e03402590e97abf9061944873aaacf  gcc/ada/sinput.ads
  83660dce94bca57b58843b48abc86554  gcc/ada/snames.adb-tmpl
! c462b89754486d1c3ee00e3ff884624d  gcc/ada/snames.ads-tmpl
  0eae6e077005b627eacdbc0d53788ac6  gcc/ada/snames.h-tmpl
  96b1e5efcfe4df7fd150f5a977046c58  gcc/ada/socket.c
  2b5db13cfe242efb9e224cb722660071  gcc/ada/spark_xrefs.adb
  59aee5038afe3acdfc11257232c8fd9b  gcc/ada/spark_xrefs.ads
  b5b62770606ca8dc474f59070cd4a35f  gcc/ada/sprint.adb
! b2471956e093001afd1b073590729f89  gcc/ada/sprint.ads
  2ce08b4ac1b7d7331da8a29d6e581d60  gcc/ada/stand.ads
  92b212203b4f1d5f4e7ff59f594e55e4  gcc/ada/standard.ads.h
  5664f8207eddb35eb806abe66748694f  gcc/ada/stringt.adb
--- 3001,3013 ----
  4c47a09e0165de090d03fa2396d99a7a  gcc/ada/sinput.adb
  29e03402590e97abf9061944873aaacf  gcc/ada/sinput.ads
  83660dce94bca57b58843b48abc86554  gcc/ada/snames.adb-tmpl
! 82526b31467c89f21c69ede060995c7a  gcc/ada/snames.ads-tmpl
  0eae6e077005b627eacdbc0d53788ac6  gcc/ada/snames.h-tmpl
  96b1e5efcfe4df7fd150f5a977046c58  gcc/ada/socket.c
  2b5db13cfe242efb9e224cb722660071  gcc/ada/spark_xrefs.adb
  59aee5038afe3acdfc11257232c8fd9b  gcc/ada/spark_xrefs.ads
  b5b62770606ca8dc474f59070cd4a35f  gcc/ada/sprint.adb
! e4d8b1968ab6e5ff4b98bf6953e190be  gcc/ada/sprint.ads
  2ce08b4ac1b7d7331da8a29d6e581d60  gcc/ada/stand.ads
  92b212203b4f1d5f4e7ff59f594e55e4  gcc/ada/standard.ads.h
  5664f8207eddb35eb806abe66748694f  gcc/ada/stringt.adb
*************** dd04be650bb81a915ab3d16cf03e1286  gcc/ad
*** 3017,3023 ****
  458b531985b04c11c0c7dc413d27aab9  gcc/ada/strub.ads
  6431b27526601811c32225c77c883f46  gcc/ada/style.adb
  d4c62c18b55de39b11cfe472a0e4561b  gcc/ada/style.ads
! 5a825504f6acc372f6b5377882b8f0b0  gcc/ada/styleg.adb
  381212335c0a20a7a6e9e41250393d9a  gcc/ada/styleg.ads
  900cbaf4a4ceb32a3ec64284eeb30b43  gcc/ada/stylesw.adb
  788b4e8961e327f221894cc404ea94a6  gcc/ada/stylesw.ads
--- 3017,3023 ----
  458b531985b04c11c0c7dc413d27aab9  gcc/ada/strub.ads
  6431b27526601811c32225c77c883f46  gcc/ada/style.adb
  d4c62c18b55de39b11cfe472a0e4561b  gcc/ada/style.ads
! 34f683603e4f9ff17d133c2be750ea86  gcc/ada/styleg.adb
  381212335c0a20a7a6e9e41250393d9a  gcc/ada/styleg.ads
  900cbaf4a4ceb32a3ec64284eeb30b43  gcc/ada/stylesw.adb
  788b4e8961e327f221894cc404ea94a6  gcc/ada/stylesw.ads
*************** e8253b4b684c1281f31c431c59801850  gcc/ad
*** 3033,3045 ****
  e661511abb592f89242772c88e81c985  gcc/ada/table.adb
  9980f2609e274e492a4fc7bc7e625779  gcc/ada/table.ads
  f01b6d7a338cac8484ebe76a4d10a29a  gcc/ada/targext.c
! 5ef3e383be54848c563cf6e54357fa00  gcc/ada/targparm.adb
  d39a228bc00567be8fb055d12f52ca9e  gcc/ada/targparm.ads
  7d3f0ad91a40c454a9bcf4bbcd5dee41  gcc/ada/tbuild.adb
  d9026bdc2cb7c2a1fdb52eefe1467c6c  gcc/ada/tbuild.ads
  a8c81c0efe5427a150cfb60b39a14bb0  gcc/ada/terminals.c
! 81c60cbc8e67f80af6f53afb5ca5e8e7  gcc/ada/tracebak.c
! 26a61859a2fbfb0cfeddfb6ec995fa4c  gcc/ada/treepr.adb
  b3bbe99b27a0b92b6a959b36cbc316ee  gcc/ada/treepr.ads
  98ac01399ba1a6f424fafb018f08a955  gcc/ada/ttypes.ads
  582d8467c1e9305aa54d36635379dff5  gcc/ada/types.adb
--- 3033,3045 ----
  e661511abb592f89242772c88e81c985  gcc/ada/table.adb
  9980f2609e274e492a4fc7bc7e625779  gcc/ada/table.ads
  f01b6d7a338cac8484ebe76a4d10a29a  gcc/ada/targext.c
! 82bb9251336716e149d5c80a4c21b531  gcc/ada/targparm.adb
  d39a228bc00567be8fb055d12f52ca9e  gcc/ada/targparm.ads
  7d3f0ad91a40c454a9bcf4bbcd5dee41  gcc/ada/tbuild.adb
  d9026bdc2cb7c2a1fdb52eefe1467c6c  gcc/ada/tbuild.ads
  a8c81c0efe5427a150cfb60b39a14bb0  gcc/ada/terminals.c
! b34a23fedc707e4631da4bef3ff73b7a  gcc/ada/tracebak.c
! e2442eee8e93362ce0a36da7e748378f  gcc/ada/treepr.adb
  b3bbe99b27a0b92b6a959b36cbc316ee  gcc/ada/treepr.ads
  98ac01399ba1a6f424fafb018f08a955  gcc/ada/ttypes.ads
  582d8467c1e9305aa54d36635379dff5  gcc/ada/types.adb
*************** d22c314f3748309f812d78f5217dda61  gcc/ad
*** 3075,3093 ****
  06b46bffb1b84e16a6f48b29177f42c4  gcc/ada/xutil.ads
  faeebcb240c1559aceb7d9c18c8e6b89  gcc/addresses.h
  ebd823843d8793364a7f82ee9f833c88  gcc/adjust-alignment.cc
! f24c15eead0489a23795970e520e9fb0  gcc/algol68/ChangeLog
  66ab60a51bd61854d9b2898856651b15  gcc/algol68/Make-lang.in
! 3d3f2f95b917d0f77d57d977f3eb93d8  gcc/algol68/README
  43ae40e82c1a7a144e905d40b101214e  gcc/algol68/a68-diagnostics.cc
  27119d3e1e8fce1677a27ca87cc9de1e  gcc/algol68/a68-exports.cc
  03c9c1d0f8621e44f9807e21e9191c07  gcc/algol68/a68-imports-archive.cc
! 0e7ad430224046471f25c7b53d0493ee  gcc/algol68/a68-imports.cc
  1dac1ca86874d9b7205cbcd76a3a083b  gcc/algol68/a68-lang.cc
  6430e67f3d47b364ff04181a73b26fea  gcc/algol68/a68-low-bits.cc
  284cf6c8827f78791575949cc1f634ef  gcc/algol68/a68-low-bools.cc
  421c70a781dc2c00722aa019bc39f683  gcc/algol68/a68-low-builtins.cc
  5d44e822782a85c6eb61eabc1a1b7105  gcc/algol68/a68-low-chars.cc
! 33c27b3651337f1436c4737ad94b6ef6  gcc/algol68/a68-low-clauses.cc
  b8582dd8bfb1b150fad9cafd7bbaa3c6  gcc/algol68/a68-low-coercions.cc
  5aa76e1c20ed5b89f9d01211f6bb6cc6  gcc/algol68/a68-low-complex.cc
  983308d754783adbc5c6514c63152bc9  gcc/algol68/a68-low-decls.cc
--- 3075,3093 ----
  06b46bffb1b84e16a6f48b29177f42c4  gcc/ada/xutil.ads
  faeebcb240c1559aceb7d9c18c8e6b89  gcc/addresses.h
  ebd823843d8793364a7f82ee9f833c88  gcc/adjust-alignment.cc
! 85126b8cefa884ee5f3fcdf75dae71f0  gcc/algol68/ChangeLog
  66ab60a51bd61854d9b2898856651b15  gcc/algol68/Make-lang.in
! b2f984d7f0c7122003e5ce03b3e8724e  gcc/algol68/README
  43ae40e82c1a7a144e905d40b101214e  gcc/algol68/a68-diagnostics.cc
  27119d3e1e8fce1677a27ca87cc9de1e  gcc/algol68/a68-exports.cc
  03c9c1d0f8621e44f9807e21e9191c07  gcc/algol68/a68-imports-archive.cc
! 0ba775e2350612831eb78c681330c00d  gcc/algol68/a68-imports.cc
  1dac1ca86874d9b7205cbcd76a3a083b  gcc/algol68/a68-lang.cc
  6430e67f3d47b364ff04181a73b26fea  gcc/algol68/a68-low-bits.cc
  284cf6c8827f78791575949cc1f634ef  gcc/algol68/a68-low-bools.cc
  421c70a781dc2c00722aa019bc39f683  gcc/algol68/a68-low-builtins.cc
  5d44e822782a85c6eb61eabc1a1b7105  gcc/algol68/a68-low-chars.cc
! 8b109b7ad93c549272545bcd3c2660c0  gcc/algol68/a68-low-clauses.cc
  b8582dd8bfb1b150fad9cafd7bbaa3c6  gcc/algol68/a68-low-coercions.cc
  5aa76e1c20ed5b89f9d01211f6bb6cc6  gcc/algol68/a68-low-complex.cc
  983308d754783adbc5c6514c63152bc9  gcc/algol68/a68-low-decls.cc
*************** a431e4aa975fc2574757ff62a2935acb  gcc/al
*** 3095,3101 ****
  060012b299f601a60e72193962d6699f  gcc/algol68/a68-low-holes.cc
  da7ad17dfeafca7ca00cffe0379b15a6  gcc/algol68/a68-low-ints.cc
  949d0f0a5f79da34ba44f79c6ebfe282  gcc/algol68/a68-low-misc.cc
! fb6d7ed8c342783f10da433ad4885f73  gcc/algol68/a68-low-moids.cc
  0b01a20ebf77b30b3726bc5df80d7944  gcc/algol68/a68-low-multiples.cc
  b57dea99a91f1c94bd6841eea163e827  gcc/algol68/a68-low-prelude.cc
  25a2f0c29aa7f6f9363cc0bd5c36719e  gcc/algol68/a68-low-procs.cc
--- 3095,3101 ----
  060012b299f601a60e72193962d6699f  gcc/algol68/a68-low-holes.cc
  da7ad17dfeafca7ca00cffe0379b15a6  gcc/algol68/a68-low-ints.cc
  949d0f0a5f79da34ba44f79c6ebfe282  gcc/algol68/a68-low-misc.cc
! 092b6baf292d95fe174f339d362e019f  gcc/algol68/a68-low-moids.cc
  0b01a20ebf77b30b3726bc5df80d7944  gcc/algol68/a68-low-multiples.cc
  b57dea99a91f1c94bd6841eea163e827  gcc/algol68/a68-low-prelude.cc
  25a2f0c29aa7f6f9363cc0bd5c36719e  gcc/algol68/a68-low-procs.cc
*************** aebb4c3b9e607164c25541593333b832  gcc/al
*** 3107,3113 ****
  778d47cffcd16d50f7105f7a8bd35d32  gcc/algol68/a68-low-strings.cc
  de4cb485173b396d55860a98e328be5b  gcc/algol68/a68-low-structs.cc
  7675b3dfcea25bedcbe52f98cecdf7e2  gcc/algol68/a68-low-unions.cc
! b718cd63af9a74f28042912657edfb4f  gcc/algol68/a68-low-units.cc
  5c0c66ed30007b50d34d279047ef4bc6  gcc/algol68/a68-low.cc
  57f5f332612b159fdee8fb6fb9d8ab16  gcc/algol68/a68-moids-diagnostics.cc
  c8f59e26255a9bc185068084b4135289  gcc/algol68/a68-moids-misc.cc
--- 3107,3113 ----
  778d47cffcd16d50f7105f7a8bd35d32  gcc/algol68/a68-low-strings.cc
  de4cb485173b396d55860a98e328be5b  gcc/algol68/a68-low-structs.cc
  7675b3dfcea25bedcbe52f98cecdf7e2  gcc/algol68/a68-low-unions.cc
! 8cfeddfa0b4320f1fa5ad5f98157333b  gcc/algol68/a68-low-units.cc
  5c0c66ed30007b50d34d279047ef4bc6  gcc/algol68/a68-low.cc
  57f5f332612b159fdee8fb6fb9d8ab16  gcc/algol68/a68-moids-diagnostics.cc
  c8f59e26255a9bc185068084b4135289  gcc/algol68/a68-moids-misc.cc
*************** c8f59e26255a9bc185068084b4135289  gcc/al
*** 3117,3123 ****
  9bdbc6f28f194a0713f8b2d2da7ff395  gcc/algol68/a68-parser-bottom-up.cc
  48b751158a244bb9aaa84fdd869539d4  gcc/algol68/a68-parser-brackets.cc
  06167f432b9437d0cc135868d1067782  gcc/algol68/a68-parser-debug.cc
! f9cdfe842db71e53d1378e8dae40d607  gcc/algol68/a68-parser-extract.cc
  fc7ae86022255700f5866b320d5b195d  gcc/algol68/a68-parser-keywords.cc
  5bbba75ebe9acd6ae6db622beca20818  gcc/algol68/a68-parser-modes.cc
  774cd52cc0e92f16e4f0ef07f921f74a  gcc/algol68/a68-parser-moids-check.cc
--- 3117,3123 ----
  9bdbc6f28f194a0713f8b2d2da7ff395  gcc/algol68/a68-parser-bottom-up.cc
  48b751158a244bb9aaa84fdd869539d4  gcc/algol68/a68-parser-brackets.cc
  06167f432b9437d0cc135868d1067782  gcc/algol68/a68-parser-debug.cc
! b7d75ff20865e4ec75580127ecb6bb4e  gcc/algol68/a68-parser-extract.cc
  fc7ae86022255700f5866b320d5b195d  gcc/algol68/a68-parser-keywords.cc
  5bbba75ebe9acd6ae6db622beca20818  gcc/algol68/a68-parser-modes.cc
  774cd52cc0e92f16e4f0ef07f921f74a  gcc/algol68/a68-parser-moids-check.cc
*************** eb200628692c30c1ade0eaeabcddf008  gcc/al
*** 3128,3137 ****
  7579b4ff69d8b1e981c1f7981f089889  gcc/algol68/a68-parser-scanner.cc
  31c1ad0a156b1f8ddff8568add436c78  gcc/algol68/a68-parser-scope.cc
  58e5a6738eeaab552950df71cf50d196  gcc/algol68/a68-parser-serial-dsa.cc
! effc2cf77a8c81af89b0ea44cc5bc160  gcc/algol68/a68-parser-taxes.cc
  e122741b2dfd6676fd42da92582f9088  gcc/algol68/a68-parser-top-down.cc
  595c3ac77d0431f5a193397bb1229b3e  gcc/algol68/a68-parser-victal.cc
! abb624eb426dd2c8e9a1de68c7d4ecca  gcc/algol68/a68-parser.cc
  bb6a9492686645cd8ede63a3aa41bb2e  gcc/algol68/a68-postulates.cc
  420834078dd6203b7dc8a72565747ced  gcc/algol68/a68-pretty-print.h
  614ee2f3c97cf1910484b4ba1b697352  gcc/algol68/a68-tree.def
--- 3128,3137 ----
  7579b4ff69d8b1e981c1f7981f089889  gcc/algol68/a68-parser-scanner.cc
  31c1ad0a156b1f8ddff8568add436c78  gcc/algol68/a68-parser-scope.cc
  58e5a6738eeaab552950df71cf50d196  gcc/algol68/a68-parser-serial-dsa.cc
! 2ecb898826a3cbba5b0001580ba56498  gcc/algol68/a68-parser-taxes.cc
  e122741b2dfd6676fd42da92582f9088  gcc/algol68/a68-parser-top-down.cc
  595c3ac77d0431f5a193397bb1229b3e  gcc/algol68/a68-parser-victal.cc
! 34b75fa5579bdf92f6bd034fc29439fc  gcc/algol68/a68-parser.cc
  bb6a9492686645cd8ede63a3aa41bb2e  gcc/algol68/a68-postulates.cc
  420834078dd6203b7dc8a72565747ced  gcc/algol68/a68-pretty-print.h
  614ee2f3c97cf1910484b4ba1b697352  gcc/algol68/a68-tree.def
*************** d70ae5781a204788596d281c20f889ac  gcc/al
*** 3140,3146 ****
  004c8ed84a6d3665dbac0ef8fa5351c6  gcc/algol68/a68.h
  cbc2ddca0589edc81c7df109b1a1927b  gcc/algol68/a68spec.cc
  ca4abac71b91773df74abdea22798551  gcc/algol68/config-lang.in
! de57cb0c251c683118113d7512fb484c  gcc/algol68/ga68-coding-guidelines.texi
  9c3d535a7da271c49e76b9709e556383  gcc/algol68/ga68-exports.pk
  f150e2c760036b980e94ec7bb14e1172  gcc/algol68/ga68-internals.texi
  9e575ac412a858aa8a5379d25d2c31f4  gcc/algol68/ga68.texi
--- 3140,3146 ----
  004c8ed84a6d3665dbac0ef8fa5351c6  gcc/algol68/a68.h
  cbc2ddca0589edc81c7df109b1a1927b  gcc/algol68/a68spec.cc
  ca4abac71b91773df74abdea22798551  gcc/algol68/config-lang.in
! 40eb5c0ad71bd0ee87a8434e92a226f2  gcc/algol68/ga68-coding-guidelines.texi
  9c3d535a7da271c49e76b9709e556383  gcc/algol68/ga68-exports.pk
  f150e2c760036b980e94ec7bb14e1172  gcc/algol68/ga68-internals.texi
  9e575ac412a858aa8a5379d25d2c31f4  gcc/algol68/ga68.texi
*************** c277cfbf6dc22b5e43687f22a6ef9adb  gcc/bb
*** 3299,3312 ****
  c6e78ac148b4eadc30dfea92c3414885  gcc/builtins.cc
  d5db4c3fd8f2f6328a72905271146ce0  gcc/builtins.def
  4f577c1f20985f1ba3c1672476f1a2da  gcc/builtins.h
! 2c61cb0d28bd7c28c8a2dd94c2e26bf4  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
  fba23d68ba623c33aef279b93a24ee01  gcc/c-family/c-attribs.cc
  abc75c3bf4cdfc2d9a6bb6075cf16204  gcc/c-family/c-common.cc
  6522339cd83ff225a1ff9e0eab971eab  gcc/c-family/c-common.def
! 37bf7c4b5fa17dd054423201b1566b5b  gcc/c-family/c-common.h
  bfd2965f7d480323f9543caf12c3ec8b  gcc/c-family/c-cppbuiltin.cc
  0b9194e38297d00cf3fac80365cc07af  gcc/c-family/c-dump.cc
  785b5f9c39e1d26ec0e4f70880e6202a  gcc/c-family/c-format.cc
--- 3299,3312 ----
  c6e78ac148b4eadc30dfea92c3414885  gcc/builtins.cc
  d5db4c3fd8f2f6328a72905271146ce0  gcc/builtins.def
  4f577c1f20985f1ba3c1672476f1a2da  gcc/builtins.h
! 4f5138cf5782686ea62268da0e82e183  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
  fba23d68ba623c33aef279b93a24ee01  gcc/c-family/c-attribs.cc
  abc75c3bf4cdfc2d9a6bb6075cf16204  gcc/c-family/c-common.cc
  6522339cd83ff225a1ff9e0eab971eab  gcc/c-family/c-common.def
! d8d1b26fe0f361bd790e9276ab8e5ae9  gcc/c-family/c-common.h
  bfd2965f7d480323f9543caf12c3ec8b  gcc/c-family/c-cppbuiltin.cc
  0b9194e38297d00cf3fac80365cc07af  gcc/c-family/c-dump.cc
  785b5f9c39e1d26ec0e4f70880e6202a  gcc/c-family/c-format.cc
*************** bfd2965f7d480323f9543caf12c3ec8b  gcc/c-
*** 3317,3323 ****
  4893d50b962d5e680a44bb72d2097469  gcc/c-family/c-lex.cc
  eb6a10cfada98679dc204a82e929e9e3  gcc/c-family/c-objc.h
  189b2e72aaba00910cfae87a0c0a8ee3  gcc/c-family/c-omp.cc
! 3c2598804be4bc165476dff153dde8bb  gcc/c-family/c-opts.cc
  a7304c009aa63ce6c8e80612b426724a  gcc/c-family/c-pch.cc
  cb9706138b571f810527200a1e24035c  gcc/c-family/c-ppoutput.cc
  1c45b9d8f8a674aa74dc09d32ee9a453  gcc/c-family/c-pragma.cc
--- 3317,3323 ----
  4893d50b962d5e680a44bb72d2097469  gcc/c-family/c-lex.cc
  eb6a10cfada98679dc204a82e929e9e3  gcc/c-family/c-objc.h
  189b2e72aaba00910cfae87a0c0a8ee3  gcc/c-family/c-omp.cc
! ad14806f3955cf38561572129b17ecab  gcc/c-family/c-opts.cc
  a7304c009aa63ce6c8e80612b426724a  gcc/c-family/c-pch.cc
  cb9706138b571f810527200a1e24035c  gcc/c-family/c-ppoutput.cc
  1c45b9d8f8a674aa74dc09d32ee9a453  gcc/c-family/c-pragma.cc
*************** ea821c9d267c64dd8b74aad9d0189834  gcc/c-
*** 3335,3348 ****
  eb0fcc324140f72001698df8e19f05c4  gcc/c-family/c-ubsan.cc
  298f1278576690ff4398c33310700f52  gcc/c-family/c-ubsan.h
  309adcb76e5a3c3f022c2d30b3bbda93  gcc/c-family/c-warn.cc
! 300e42a44dddd72ac08a890e4cbf3649  gcc/c-family/c.opt
  625ce108c3e61a98b26097f6e07f2a8b  gcc/c-family/c.opt.urls
  6453e733397a8ab931434f4f73ee7d7b  gcc/c-family/cppspec.cc
  58ecef7621a9577e43ac42cfceae8864  gcc/c-family/known-headers.cc
  377686cbbf62a7d61d251d3f74cddb5b  gcc/c-family/known-headers.h
  431045382c41554804be1959c1596be4  gcc/c-family/name-hint.h
  3bae9e281cc87b35f63e906373f3b446  gcc/c-family/stub-objc.cc
! 62c38179375bc7ba9fce359e20d5ca1b  gcc/c/ChangeLog
  cbffb341640e7c4b16792e0951fffeca  gcc/c/Make-lang.in
  3920e3ee16f5b5955d40584fea53c441  gcc/c/c-aux-info.cc
  cd5bab8a4deeaa0369ae59b9403d06a2  gcc/c/c-convert.cc
--- 3335,3348 ----
  eb0fcc324140f72001698df8e19f05c4  gcc/c-family/c-ubsan.cc
  298f1278576690ff4398c33310700f52  gcc/c-family/c-ubsan.h
  309adcb76e5a3c3f022c2d30b3bbda93  gcc/c-family/c-warn.cc
! 78fb08f9aa24bf5c984caf3bdda019df  gcc/c-family/c.opt
  625ce108c3e61a98b26097f6e07f2a8b  gcc/c-family/c.opt.urls
  6453e733397a8ab931434f4f73ee7d7b  gcc/c-family/cppspec.cc
  58ecef7621a9577e43ac42cfceae8864  gcc/c-family/known-headers.cc
  377686cbbf62a7d61d251d3f74cddb5b  gcc/c-family/known-headers.h
  431045382c41554804be1959c1596be4  gcc/c-family/name-hint.h
  3bae9e281cc87b35f63e906373f3b446  gcc/c-family/stub-objc.cc
! a4fac236517f9db616d18bc05b553b60  gcc/c/ChangeLog
  cbffb341640e7c4b16792e0951fffeca  gcc/c/Make-lang.in
  3920e3ee16f5b5955d40584fea53c441  gcc/c/c-aux-info.cc
  cd5bab8a4deeaa0369ae59b9403d06a2  gcc/c/c-convert.cc
*************** cbfdd140f14c43c01a6bdf8b1c24b317  gcc/c/
*** 3357,3363 ****
  f6b634d7c0204c419cf4fb7b48193fad  gcc/c/c-parser.h
  4db955734effe2d0c9aac0379d2e6a8c  gcc/c/c-tree.def
  3ee5aefcb5c9ebc5fed7991af22b0426  gcc/c/c-tree.h
! df79298b0d300ec63895bb8efebc3c3c  gcc/c/c-typeck.cc
  5804f7ee3eccdfb7c9a64e40b20ccc79  gcc/c/config-lang.in
  58370619d5c4739b7d81d5f899913a0c  gcc/c/gccspec.cc
  3006cd4ab743e1a8087fc267168774ce  gcc/c/gimple-parser.cc
--- 3357,3363 ----
  f6b634d7c0204c419cf4fb7b48193fad  gcc/c/c-parser.h
  4db955734effe2d0c9aac0379d2e6a8c  gcc/c/c-tree.def
  3ee5aefcb5c9ebc5fed7991af22b0426  gcc/c/c-tree.h
! 947f1a41132f4959712992150f01dfa3  gcc/c/c-typeck.cc
  5804f7ee3eccdfb7c9a64e40b20ccc79  gcc/c/config-lang.in
  58370619d5c4739b7d81d5f899913a0c  gcc/c/gccspec.cc
  3006cd4ab743e1a8087fc267168774ce  gcc/c/gimple-parser.cc
*************** b50dcacbe77c96809023aa599a556717  gcc/cg
*** 3394,3453 ****
  a9229e8ac3f0d366e296e57756becd23  gcc/cgraphunit.cc
  45b21ab7ea818c3a3ce60bf8d3cbd252  gcc/channels.h
  f2981f79a749a2269d7ea349ab37ca3e  gcc/cif-code.def
! 12f5921096cefbcb17cd8c9dd75b1108  gcc/cobol/ChangeLog
! 1381331b3789da665c6f58266e035819  gcc/cobol/Make-lang.in
  0a84e784d2bc4066654d2377fc6a2930  gcc/cobol/TODO
! 721fae29d54f2a632cdf024f72b079d3  gcc/cobol/cbldiag.h
  5fdc70643a73d31fa87ca25eb9bca477  gcc/cobol/cdf-copy.cc
! 65529d9fed05c2a9ccd7a0714b3b65ac  gcc/cobol/cdf.y
! 9e2d50bdc3077d698d2cd5c27a02cf08  gcc/cobol/cdfval.h
  39a7cc8aae37a642491e77796d652ebe  gcc/cobol/cobol-system.h
  6f0781c00ff23cb0dc92a545a8a9feb0  gcc/cobol/cobol1.cc
! 945916532b949c7f8e22fa515c1ed395  gcc/cobol/compare.cc
  30fe1e768a76bb15b7d6d2d12bb53a3a  gcc/cobol/compare.h
  8b7f26d4855e5bb69a66eecc586d9742  gcc/cobol/config-lang.in
  7e43ef597462b3ceabf3c197b4017e7c  gcc/cobol/convert.cc
! 73aabe0b0206b600444dad3b27e417d7  gcc/cobol/copybook.h
  d5c6387d56f84eecf1320e4209ae02fe  gcc/cobol/dts.h
  79fd5c6d108a5a1af2ebda2296d91440  gcc/cobol/except.cc
! 41ddde89db7edc684fadb0cba4d0e67f  gcc/cobol/exceptg.h
! 946ac0c941d437c329116221cf313838  gcc/cobol/gcobc
! 823e15969bf48eb2465696dd3b2fc1c3  gcc/cobol/gcobol.1
  7a73ffe93cdd304879a42f225aa554ee  gcc/cobol/gcobol.3
  21b840090e9923bdd5cb47e4468e3fd9  gcc/cobol/gcobolspec.cc
! e5a8ebed516330e1529b0dfaff1c4cf1  gcc/cobol/genapi.cc
! dcff1db7a3c5ad7ebe61a2cd1a9a43cc  gcc/cobol/genapi.h
  e84856f59c534c371a140bb307ff575f  gcc/cobol/gengen.cc
  8d0ab0fc1957927b07dd60145858e817  gcc/cobol/gengen.h
! df7a30acd01b4385a0a156b968940c44  gcc/cobol/genmath.cc
  78d263e35c67698f367e118c95157cb4  gcc/cobol/genmath.h
! 005798bea5aff0a2d0489daf5fab38ef  gcc/cobol/genutil.cc
! da8d699acb44e69c442ebfd2e21e5ace  gcc/cobol/genutil.h
  7b9c1ead6f9d3661133f7f732811719c  gcc/cobol/help.gen
  0c56a591cf166a8d83553c2afd4b3ce3  gcc/cobol/inspect.h
  05f191861e37d52870bb5257c188632f  gcc/cobol/lang-specs.h
! abf14a41da24b49f1ed7ace2b7002f0a  gcc/cobol/lang.opt
! 072e19d0d414c9e919d6cc2c811a3944  gcc/cobol/lang.opt.urls
! 0a7ca538b7588a3c6ae13c38480fe3c9  gcc/cobol/lexio.cc
! c691e8bb52e1a438ce2f510250bbf4d9  gcc/cobol/lexio.h
! 3a7636dc3c5f3bdc376ccf55cf668b11  gcc/cobol/messages.cc
! 923b5bfadd3bf6834f22c66bcd614c86  gcc/cobol/move.cc
! d1faeffc48ae783744a9ea43d0cb0d45  gcc/cobol/parse.y
! c41675cbbb5dbab3510fa2bfee9118cc  gcc/cobol/parse_ante.h
  658e59750efa818db284c44387330580  gcc/cobol/parse_util.h
! 52c1a2af86ace48e713840e3d7efa796  gcc/cobol/scan.l
! 790783bd96f52af3cede5d35fe031afe  gcc/cobol/scan_ante.h
! 77407320fb4e055c83519f2849472460  gcc/cobol/scan_post.h
  74a3f55d7d2740db3d3e1945335d4faa  gcc/cobol/show_parse.h
  75161ca42023dad15cbea413b6d34380  gcc/cobol/structs.cc
  e82b261f1753be53d32fb056a39f498b  gcc/cobol/structs.h
! 841253c34eb5a5b0983f87031b5dea49  gcc/cobol/symbols.cc
! 39a5ea8be6305f4a14e45d84c9390e13  gcc/cobol/symbols.h
  2052d3215a215928b26c5296b9e2eea1  gcc/cobol/symfind.cc
  2f32d8b900fd38fa259875ca2ca5c9a1  gcc/cobol/token_names.h
  434f4899280e27d0717b2e56d5bf12f2  gcc/cobol/udf/stored-char-length.cbl
! abb8d16a0003a257bec284675b52ca1f  gcc/cobol/util.cc
! fc1955f9aef8a51d52c932f6331d93a9  gcc/cobol/util.h
  8eceaeb8e762ac925b791d2a5d2a6e16  gcc/collect-utils.cc
  ac937838bf0c954b723fba6b6a088b4c  gcc/collect-utils.h
  38716fe5959af2b954c272008e158928  gcc/collect2-aix.cc
--- 3394,3453 ----
  a9229e8ac3f0d366e296e57756becd23  gcc/cgraphunit.cc
  45b21ab7ea818c3a3ce60bf8d3cbd252  gcc/channels.h
  f2981f79a749a2269d7ea349ab37ca3e  gcc/cif-code.def
! 8dafd976049096243d626337a41159b3  gcc/cobol/ChangeLog
! 7e9a5134b9a255eadbcb53d2153defa2  gcc/cobol/Make-lang.in
  0a84e784d2bc4066654d2377fc6a2930  gcc/cobol/TODO
! b070f3c6106cd3d724702c4cc3996f1a  gcc/cobol/cbldiag.h
  5fdc70643a73d31fa87ca25eb9bca477  gcc/cobol/cdf-copy.cc
! ee4d6e4c1e79091d054c200ed00073b8  gcc/cobol/cdf.y
! 314ba2fe46efd7508b3cd6ef99aa964f  gcc/cobol/cdfval.h
  39a7cc8aae37a642491e77796d652ebe  gcc/cobol/cobol-system.h
  6f0781c00ff23cb0dc92a545a8a9feb0  gcc/cobol/cobol1.cc
! b7fdf5b7df9733140ec9ca1b153cbf9c  gcc/cobol/compare.cc
  30fe1e768a76bb15b7d6d2d12bb53a3a  gcc/cobol/compare.h
  8b7f26d4855e5bb69a66eecc586d9742  gcc/cobol/config-lang.in
  7e43ef597462b3ceabf3c197b4017e7c  gcc/cobol/convert.cc
! 4be634bc3fbc0547c40c33fc31a8492e  gcc/cobol/copybook.h
  d5c6387d56f84eecf1320e4209ae02fe  gcc/cobol/dts.h
  79fd5c6d108a5a1af2ebda2296d91440  gcc/cobol/except.cc
! 5faeacdf9fba68f3991fa3a6f65be405  gcc/cobol/exceptg.h
! b14c53972a7aa91a15097c505f00473b  gcc/cobol/gcobc
! 8270363979a1301d5c5a68a78bf909a4  gcc/cobol/gcobol.1
  7a73ffe93cdd304879a42f225aa554ee  gcc/cobol/gcobol.3
  21b840090e9923bdd5cb47e4468e3fd9  gcc/cobol/gcobolspec.cc
! 6706b38ffb89e0e80c1b2fff552c98c3  gcc/cobol/genapi.cc
! 080b7c465c851dab0832fbd0f5cce8c7  gcc/cobol/genapi.h
  e84856f59c534c371a140bb307ff575f  gcc/cobol/gengen.cc
  8d0ab0fc1957927b07dd60145858e817  gcc/cobol/gengen.h
! 463a149c0c51397aaf084b9d67787fdc  gcc/cobol/genmath.cc
  78d263e35c67698f367e118c95157cb4  gcc/cobol/genmath.h
! 28732838782240d114e6b49eaf05dc35  gcc/cobol/genutil.cc
! 23bac852032c67691559774c157b64cc  gcc/cobol/genutil.h
  7b9c1ead6f9d3661133f7f732811719c  gcc/cobol/help.gen
  0c56a591cf166a8d83553c2afd4b3ce3  gcc/cobol/inspect.h
  05f191861e37d52870bb5257c188632f  gcc/cobol/lang-specs.h
! 113196853f880813f91d266fa26d968c  gcc/cobol/lang.opt
! 308db23ce9180bc0d0ed62e98f2b08ae  gcc/cobol/lang.opt.urls
! 1d207e469faf9e98edadff1362b88c6e  gcc/cobol/lexio.cc
! c4e48ed28c747d296af503552da42055  gcc/cobol/lexio.h
! e22025b8adf93c444f899af935b6c427  gcc/cobol/messages.cc
! 662462a808f43be69239f43b0d7a2ad5  gcc/cobol/move.cc
! e2ebe7a24b248ccf802836be6afbfec4  gcc/cobol/parse.y
! cef205dfd7af7182e8bc8908cf3437f1  gcc/cobol/parse_ante.h
  658e59750efa818db284c44387330580  gcc/cobol/parse_util.h
! b1ba7674e5b7a213da2e9950afdd7a35  gcc/cobol/scan.l
! dd7e70cf35b55cbc7261c701bbda9c5e  gcc/cobol/scan_ante.h
! 749730a2135b83da188daf4b17bfa5d4  gcc/cobol/scan_post.h
  74a3f55d7d2740db3d3e1945335d4faa  gcc/cobol/show_parse.h
  75161ca42023dad15cbea413b6d34380  gcc/cobol/structs.cc
  e82b261f1753be53d32fb056a39f498b  gcc/cobol/structs.h
! 8adbe13738cf3039ac90116ebe6696c6  gcc/cobol/symbols.cc
! 4adbb76938ce7cc9078da06487249df9  gcc/cobol/symbols.h
  2052d3215a215928b26c5296b9e2eea1  gcc/cobol/symfind.cc
  2f32d8b900fd38fa259875ca2ca5c9a1  gcc/cobol/token_names.h
  434f4899280e27d0717b2e56d5bf12f2  gcc/cobol/udf/stored-char-length.cbl
! e246fcd7bc99c38f9910d124f8add039  gcc/cobol/util.cc
! 395c97f0b12382690815b0e1c1702ec4  gcc/cobol/util.h
  8eceaeb8e762ac925b791d2a5d2a6e16  gcc/collect-utils.cc
  ac937838bf0c954b723fba6b6a088b4c  gcc/collect-utils.h
  38716fe5959af2b954c272008e158928  gcc/collect2-aix.cc
*************** b1b166d42b0cd3e8a21a0ad1a418bab7  gcc/co
*** 3505,3511 ****
  67a4e50b29a50485cecd1c144965e97d  gcc/common/config/pa/pa-common.cc
  500435c25f1e8769a7838c3e187195c1  gcc/common/config/pdp11/pdp11-common.cc
  3fe10d934c16b0a06d492096be6d8ee1  gcc/common/config/pru/pru-common.cc
! aa4c031bca8ea305d0c824ab328e4212  gcc/common/config/riscv/riscv-common.cc
  d0f5525bd704195674a68288e7443aad  gcc/common/config/riscv/riscv-ext-bitmask.def
  c5805e3cf6610b64324ce388e3f5f855  gcc/common/config/rs6000/rs6000-common.cc
  b6c011cb2596e87fbedc97081867b691  gcc/common/config/rx/rx-common.cc
--- 3505,3511 ----
  67a4e50b29a50485cecd1c144965e97d  gcc/common/config/pa/pa-common.cc
  500435c25f1e8769a7838c3e187195c1  gcc/common/config/pdp11/pdp11-common.cc
  3fe10d934c16b0a06d492096be6d8ee1  gcc/common/config/pru/pru-common.cc
! 44574d088132c471f634888a7570166f  gcc/common/config/riscv/riscv-common.cc
  d0f5525bd704195674a68288e7443aad  gcc/common/config/riscv/riscv-ext-bitmask.def
  c5805e3cf6610b64324ce388e3f5f855  gcc/common/config/rs6000/rs6000-common.cc
  b6c011cb2596e87fbedc97081867b691  gcc/common/config/rx/rx-common.cc
*************** c47b4191f7bac0196ab63ca2c66bfa98  gcc/co
*** 3529,3535 ****
  148fedc3acd410f7a82133d0e78b02df  gcc/config/aarch64/aarch64-abi-ms.h
  9b6ffa67b7e7f7cc2348fa0dc728072e  gcc/config/aarch64/aarch64-arches.def
  c8a924cfcb693679febdcde3a0cc0809  gcc/config/aarch64/aarch64-builtin-pairs.def
! 0cda4841b497fb5093947f252eb0c374  gcc/config/aarch64/aarch64-builtins.cc
  a1a7d26ecab3d6681a1d3f5c2cb77275  gcc/config/aarch64/aarch64-builtins.h
  e78b7b23b597b96f765584732788e2c2  gcc/config/aarch64/aarch64-c.cc
  5f567f76d6adf2e43af2f3a4704e87d6  gcc/config/aarch64/aarch64-coff.h
--- 3529,3535 ----
  148fedc3acd410f7a82133d0e78b02df  gcc/config/aarch64/aarch64-abi-ms.h
  9b6ffa67b7e7f7cc2348fa0dc728072e  gcc/config/aarch64/aarch64-arches.def
  c8a924cfcb693679febdcde3a0cc0809  gcc/config/aarch64/aarch64-builtin-pairs.def
! be19afb9fbd5d2090f0a7ed2fb55fc14  gcc/config/aarch64/aarch64-builtins.cc
  a1a7d26ecab3d6681a1d3f5c2cb77275  gcc/config/aarch64/aarch64-builtins.h
  e78b7b23b597b96f765584732788e2c2  gcc/config/aarch64/aarch64-c.cc
  5f567f76d6adf2e43af2f3a4704e87d6  gcc/config/aarch64/aarch64-coff.h
*************** a1f52502a32d1ceb3b7cf34c2a6c3e05  gcc/co
*** 3537,3543 ****
  cd1537928dd0fadfa53b88b278af0ed2  gcc/config/aarch64/aarch64-cost-tables.h
  5d9722001af118d5011d62beba0e3879  gcc/config/aarch64/aarch64-d.cc
  3d35dd7bbc8358248117e8edb6f6895f  gcc/config/aarch64/aarch64-d.h
! a0598a8d595ee9a5ab98ce05c46c365f  gcc/config/aarch64/aarch64-early-ra.cc
  0f04d4db0b98d93d624f6bf49c0b2c61  gcc/config/aarch64/aarch64-elf-metadata.cc
  3d5c9a06fc3373401b1a496b0c2d812a  gcc/config/aarch64/aarch64-elf-metadata.h
  cfe06f94751bf9d5dc61fd5b0184ba2c  gcc/config/aarch64/aarch64-elf-raw.h
--- 3537,3543 ----
  cd1537928dd0fadfa53b88b278af0ed2  gcc/config/aarch64/aarch64-cost-tables.h
  5d9722001af118d5011d62beba0e3879  gcc/config/aarch64/aarch64-d.cc
  3d35dd7bbc8358248117e8edb6f6895f  gcc/config/aarch64/aarch64-d.h
! 79671a5430aaab0dd5caaa8bc6b82f82  gcc/config/aarch64/aarch64-early-ra.cc
  0f04d4db0b98d93d624f6bf49c0b2c61  gcc/config/aarch64/aarch64-elf-metadata.cc
  3d5c9a06fc3373401b1a496b0c2d812a  gcc/config/aarch64/aarch64-elf-metadata.h
  cfe06f94751bf9d5dc61fd5b0184ba2c  gcc/config/aarch64/aarch64-elf-raw.h
*************** e101bed95b5d0264c364d8bcf1a7705f  gcc/co
*** 3597,3603 ****
  dec4c8fd03ac5636ba08d9523bee06be  gcc/config/aarch64/aarch64-tuning-enums.def
  95775c91d04e9c5cacdd63e6802ca879  gcc/config/aarch64/aarch64-tuning-flags.def
  0eec0dd3dbc5fa83349625d27ac091df  gcc/config/aarch64/aarch64-vxworks.h
! bc997b164d5bbc42b0f9be344e133f1c  gcc/config/aarch64/aarch64.cc
  753a74c5f9dbe74e4bb48a1c87e1f9b4  gcc/config/aarch64/aarch64.h
  f406cbc23fb4dfe94405d633070da548  gcc/config/aarch64/aarch64.md
  dabea943ce1adc1cd1db5e4de971fbeb  gcc/config/aarch64/aarch64.opt
--- 3597,3603 ----
  dec4c8fd03ac5636ba08d9523bee06be  gcc/config/aarch64/aarch64-tuning-enums.def
  95775c91d04e9c5cacdd63e6802ca879  gcc/config/aarch64/aarch64-tuning-flags.def
  0eec0dd3dbc5fa83349625d27ac091df  gcc/config/aarch64/aarch64-vxworks.h
! 438120e458df424ecbbb5484b8d107be  gcc/config/aarch64/aarch64.cc
  753a74c5f9dbe74e4bb48a1c87e1f9b4  gcc/config/aarch64/aarch64.h
  f406cbc23fb4dfe94405d633070da548  gcc/config/aarch64/aarch64.md
  dabea943ce1adc1cd1db5e4de971fbeb  gcc/config/aarch64/aarch64.opt
*************** b8dda5ab1f67b388debff95f4a66c82c  gcc/co
*** 3778,3784 ****
  e45971d867f7d95fe119724df8efe733  gcc/config/arm/arm-tables.opt
  f805d118929dd79f6bd4dc75c77c968b  gcc/config/arm/arm-tables.opt.urls
  e74714d2a15e81f4ec1c5945ec87763a  gcc/config/arm/arm-tune.md
! 325bfeab0e4d91c406b4cf65a60bdcca  gcc/config/arm/arm.cc
  0fac67e2d1f28320b6961fd81d196a57  gcc/config/arm/arm.h
  d198ecf523c5da8b33586452eeb8905b  gcc/config/arm/arm.md
  68b71bf902cc6c9290e847ce76a9fdea  gcc/config/arm/arm.opt
--- 3778,3784 ----
  e45971d867f7d95fe119724df8efe733  gcc/config/arm/arm-tables.opt
  f805d118929dd79f6bd4dc75c77c968b  gcc/config/arm/arm-tables.opt.urls
  e74714d2a15e81f4ec1c5945ec87763a  gcc/config/arm/arm-tune.md
! af7c04d0762916d504c099195a8bf8dd  gcc/config/arm/arm.cc
  0fac67e2d1f28320b6961fd81d196a57  gcc/config/arm/arm.h
  d198ecf523c5da8b33586452eeb8905b  gcc/config/arm/arm.md
  68b71bf902cc6c9290e847ce76a9fdea  gcc/config/arm/arm.opt
*************** e219596493ffcd798a48b24b22b5e077  gcc/co
*** 3880,3900 ****
  8bb1a840fb87b138c620682ccad6aee4  gcc/config/arm/x-arm
  80d9db7d6773ca2b0d423a9ba3a32fe3  gcc/config/arm/xgene1.md
  9511f4a9a7f32971f54f0124845dd263  gcc/config/avr/avr-arch.h
! 5a487f07fdc89eb23d5189e030286bc0  gcc/config/avr/avr-c.cc
  7e576974bac73c35660c3df419ddabf4  gcc/config/avr/avr-devices.cc
  6d6cb0cd00b1f0982b71a547d16c599b  gcc/config/avr/avr-dimode.md
  b35a61cad18471c12c8d298d86fb1aa3  gcc/config/avr/avr-fixed.md
! a003e2850cf677560132fd307ecee01f  gcc/config/avr/avr-log.cc
  c29ebb93bbe48714c53c5d397dedbe7f  gcc/config/avr/avr-mcus.def
  b05978bd2969a943265d3549c23b8b59  gcc/config/avr/avr-modes.def
  6c45ecfd28874e5791ad3e04448486e9  gcc/config/avr/avr-passes-fuse-move.h
  d893aaf4f67074e751cfdcb34f3a8fb9  gcc/config/avr/avr-passes.cc
  7694efecfa1a86f5d70c1dcee34a8ffd  gcc/config/avr/avr-passes.def
! 6033224c6e10fc0028d72d05ef4adc70  gcc/config/avr/avr-protos.h
  4ee8705558d223eb1da7a1266af8c799  gcc/config/avr/avr-stdint.h
! f772e39663262a701be4b9447775e077  gcc/config/avr/avr.cc
  7e4633dda230d367d9859c29b7534ae4  gcc/config/avr/avr.h
! 06738d1bbd4a98704147fbba73c74d54  gcc/config/avr/avr.md
  2c8e496ccc33a4c3b5ea998449a69941  gcc/config/avr/avr.opt
  f6cef551d36f0002a5f31e6f394d87af  gcc/config/avr/avr.opt.urls
  a2e6c4bc09c4af90d1c01745985baff7  gcc/config/avr/avrlibc.h
--- 3880,3900 ----
  8bb1a840fb87b138c620682ccad6aee4  gcc/config/arm/x-arm
  80d9db7d6773ca2b0d423a9ba3a32fe3  gcc/config/arm/xgene1.md
  9511f4a9a7f32971f54f0124845dd263  gcc/config/avr/avr-arch.h
! 388f30aa1ed9b88356f48b1392f109b7  gcc/config/avr/avr-c.cc
  7e576974bac73c35660c3df419ddabf4  gcc/config/avr/avr-devices.cc
  6d6cb0cd00b1f0982b71a547d16c599b  gcc/config/avr/avr-dimode.md
  b35a61cad18471c12c8d298d86fb1aa3  gcc/config/avr/avr-fixed.md
! 4b0f2e6eed1ea251598e926ddc1e28a1  gcc/config/avr/avr-log.cc
  c29ebb93bbe48714c53c5d397dedbe7f  gcc/config/avr/avr-mcus.def
  b05978bd2969a943265d3549c23b8b59  gcc/config/avr/avr-modes.def
  6c45ecfd28874e5791ad3e04448486e9  gcc/config/avr/avr-passes-fuse-move.h
  d893aaf4f67074e751cfdcb34f3a8fb9  gcc/config/avr/avr-passes.cc
  7694efecfa1a86f5d70c1dcee34a8ffd  gcc/config/avr/avr-passes.def
! 2c1245f6b00a23bda3f0127e56f015c5  gcc/config/avr/avr-protos.h
  4ee8705558d223eb1da7a1266af8c799  gcc/config/avr/avr-stdint.h
! 1cbfa1a4d89286b623a49a7055e9db94  gcc/config/avr/avr.cc
  7e4633dda230d367d9859c29b7534ae4  gcc/config/avr/avr.h
! ceaabfa9f3ad7f42cc0e5417e7599750  gcc/config/avr/avr.md
  2c8e496ccc33a4c3b5ea998449a69941  gcc/config/avr/avr.opt
  f6cef551d36f0002a5f31e6f394d87af  gcc/config/avr/avr.opt.urls
  a2e6c4bc09c4af90d1c01745985baff7  gcc/config/avr/avrlibc.h
*************** c40c01da4802f0f9431628ebe3d73752  gcc/co
*** 4243,4249 ****
  5d36c928833df6662f7ca00cd7ce93ff  gcc/config/i386/bmmintrin.h
  26cd4d7bf7e6af86bf03c11fa4c6d439  gcc/config/i386/bsd.h
  df838ea382d3d2da7371deb51180cf60  gcc/config/i386/btver2.md
! 32afd4d4e4e626f8212423d9a5eacddf  gcc/config/i386/c86-4g-m7.md
  4eed45e27bfe70305d922be37f809913  gcc/config/i386/c86-4g.md
  910cac3feca708c7269e72c17735ac87  gcc/config/i386/cet.h
  3af5d025bacebb10ac3eecc45363f3f5  gcc/config/i386/cetintrin.h
--- 4243,4249 ----
  5d36c928833df6662f7ca00cd7ce93ff  gcc/config/i386/bmmintrin.h
  26cd4d7bf7e6af86bf03c11fa4c6d439  gcc/config/i386/bsd.h
  df838ea382d3d2da7371deb51180cf60  gcc/config/i386/btver2.md
! bd9042674774f704d293f83b8ff37719  gcc/config/i386/c86-4g-m7.md
  4eed45e27bfe70305d922be37f809913  gcc/config/i386/c86-4g.md
  910cac3feca708c7269e72c17735ac87  gcc/config/i386/cet.h
  3af5d025bacebb10ac3eecc45363f3f5  gcc/config/i386/cetintrin.h
*************** a0261d6cc006fb86b99f338bdc94ae04  gcc/co
*** 4309,4315 ****
  e9c7eebd4e344796f248c93990aa5166  gcc/config/i386/i386-d.h
  fc2e9fb7c0b7126b23c7b1005dea314a  gcc/config/i386/i386-expand.cc
  386e1be7f608621b79970d4d036694f8  gcc/config/i386/i386-expand.h
! cbbdcb41e9dffee4c88904cd15c59226  gcc/config/i386/i386-features.cc
  52056c666db06e99d6978e69f82ed68d  gcc/config/i386/i386-features.h
  dca59d9c03f5b12366f9a926169f396d  gcc/config/i386/i386-isa.def
  848d1b1aa8faaad07d31b78764004e7f  gcc/config/i386/i386-jit.cc
--- 4309,4315 ----
  e9c7eebd4e344796f248c93990aa5166  gcc/config/i386/i386-d.h
  fc2e9fb7c0b7126b23c7b1005dea314a  gcc/config/i386/i386-expand.cc
  386e1be7f608621b79970d4d036694f8  gcc/config/i386/i386-expand.h
! 89f8d961f14839ac01947c10d6cddaeb  gcc/config/i386/i386-features.cc
  52056c666db06e99d6978e69f82ed68d  gcc/config/i386/i386-features.h
  dca59d9c03f5b12366f9a926169f396d  gcc/config/i386/i386-isa.def
  848d1b1aa8faaad07d31b78764004e7f  gcc/config/i386/i386-jit.cc
*************** d743703707286fafa2ce425b1d062ee0  gcc/co
*** 4323,4329 ****
  5b778b3296ea91dab0ca82338ca6828d  gcc/config/i386/i386-rust-and-jit.inc
  91b8b50cba997aef17a61929b5b55a87  gcc/config/i386/i386-rust.cc
  25b3947a11eb9ca52892133ddb36f3f2  gcc/config/i386/i386-rust.h
! 2b29265f867fbbb56d430e4a7da5bdf4  gcc/config/i386/i386.cc
  ea7ae4e75b096ab3c94baa5216e47601  gcc/config/i386/i386.h
  6258c4a4414f6ea1c91c89593a26d93a  gcc/config/i386/i386.md
  7f5e2eb20e3b7ca8af1b3ee7416e8eaf  gcc/config/i386/i386.opt
--- 4323,4329 ----
  5b778b3296ea91dab0ca82338ca6828d  gcc/config/i386/i386-rust-and-jit.inc
  91b8b50cba997aef17a61929b5b55a87  gcc/config/i386/i386-rust.cc
  25b3947a11eb9ca52892133ddb36f3f2  gcc/config/i386/i386-rust.h
! 633aad69fa1bd63557d9bf418fa36f57  gcc/config/i386/i386.cc
  ea7ae4e75b096ab3c94baa5216e47601  gcc/config/i386/i386.h
  6258c4a4414f6ea1c91c89593a26d93a  gcc/config/i386/i386.md
  7f5e2eb20e3b7ca8af1b3ee7416e8eaf  gcc/config/i386/i386.opt
*************** b4cde95b709fc93c90bf4d6b3edc7fd0  gcc/co
*** 4435,4441 ****
  c2cfb83eb28cbbc487a62ee85650286e  gcc/config/i386/x-mingw32
  5d8e585db0fd38674f683b0e8aafb897  gcc/config/i386/x-mingw32-utf8
  c98679993951718aa4177acc76b998b3  gcc/config/i386/x86-64.h
! 8ce818b2e733d163f5c260b2aa339949  gcc/config/i386/x86-tune-costs.h
  1a895f070eb6bb8cabffb78a3daa7738  gcc/config/i386/x86-tune-sched-atom.cc
  33b66e2688b9fbf775f4dc603512548f  gcc/config/i386/x86-tune-sched-bd.cc
  864e537089cc92c5002cefd76ede977a  gcc/config/i386/x86-tune-sched-core.cc
--- 4435,4441 ----
  c2cfb83eb28cbbc487a62ee85650286e  gcc/config/i386/x-mingw32
  5d8e585db0fd38674f683b0e8aafb897  gcc/config/i386/x-mingw32-utf8
  c98679993951718aa4177acc76b998b3  gcc/config/i386/x86-64.h
! 49c0e2f90999b761f88c9df6a6ac03a9  gcc/config/i386/x86-tune-costs.h
  1a895f070eb6bb8cabffb78a3daa7738  gcc/config/i386/x86-tune-sched-atom.cc
  33b66e2688b9fbf775f4dc603512548f  gcc/config/i386/x86-tune-sched-bd.cc
  864e537089cc92c5002cefd76ede977a  gcc/config/i386/x86-tune-sched-core.cc
*************** c7eeb48ab4223ecfdb09fa5e4ce61d71  gcc/co
*** 4559,4565 ****
  dadec2097ca9c4947a49a5766ac8ee89  gcc/config/loongarch/loongarch-str.h
  fc623524d75c7561f85f81615ecad0ac  gcc/config/loongarch/loongarch-target-attr.cc
  3cfb174db8bc99a9361e597a3e9bd35e  gcc/config/loongarch/loongarch-tune.h
! 202fdcf99b6e812c6a33e675a21a740b  gcc/config/loongarch/loongarch.cc
  ad66539c6bf3f1a1fe18304e126ac7fc  gcc/config/loongarch/loongarch.h
  1bee87f91939a40f1c758e1f7624494a  gcc/config/loongarch/loongarch.md
  62f9bea81246c3dac622d969dabefc1b  gcc/config/loongarch/loongarch.opt
--- 4559,4565 ----
  dadec2097ca9c4947a49a5766ac8ee89  gcc/config/loongarch/loongarch-str.h
  fc623524d75c7561f85f81615ecad0ac  gcc/config/loongarch/loongarch-target-attr.cc
  3cfb174db8bc99a9361e597a3e9bd35e  gcc/config/loongarch/loongarch-tune.h
! ee35709134b24a86a3c28cbd76458915  gcc/config/loongarch/loongarch.cc
  ad66539c6bf3f1a1fe18304e126ac7fc  gcc/config/loongarch/loongarch.h
  1bee87f91939a40f1c758e1f7624494a  gcc/config/loongarch/loongarch.md
  62f9bea81246c3dac622d969dabefc1b  gcc/config/loongarch/loongarch.opt
*************** f913aafadf901518cfbd1709bf303845  gcc/co
*** 5016,5022 ****
  f8ec88f62721861232564e0992e62a62  gcc/config/riscv/arch-canonicalize
  b7544a05ff53accc3d2defcb758626a9  gcc/config/riscv/arcv-rhx100.md
  4a634d8ec9f394f560c8538634cd937a  gcc/config/riscv/arcv-rmx100.md
! 70f82db81fb85e4c26c82abb99a6b1d1  gcc/config/riscv/autovec-opt.md
  ba4c660e0aeebd868870a318ae434e75  gcc/config/riscv/autovec.md
  18e8deb10c1d46dfbfb3ec75cf2ee584  gcc/config/riscv/bitmanip.md
  db5b3680a38178246dffb8a5874ebaf9  gcc/config/riscv/constraints.md
--- 5016,5022 ----
  f8ec88f62721861232564e0992e62a62  gcc/config/riscv/arch-canonicalize
  b7544a05ff53accc3d2defcb758626a9  gcc/config/riscv/arcv-rhx100.md
  4a634d8ec9f394f560c8538634cd937a  gcc/config/riscv/arcv-rmx100.md
! f49571de41621c4751ab6aefa9b372ee  gcc/config/riscv/autovec-opt.md
  ba4c660e0aeebd868870a318ae434e75  gcc/config/riscv/autovec.md
  18e8deb10c1d46dfbfb3ec75cf2ee584  gcc/config/riscv/bitmanip.md
  db5b3680a38178246dffb8a5874ebaf9  gcc/config/riscv/constraints.md
*************** bcda2f5a4a2728d5f6bc53cbbd26f90c  gcc/co
*** 5048,5054 ****
  5108deda32a010f8df8d518a2417ba81  gcc/config/riscv/riscv-builtins.cc
  5cb39713c38f481ef65328ccacfc067e  gcc/config/riscv/riscv-c.cc
  33dd09c63fb051a37d26d97469c451d9  gcc/config/riscv/riscv-cmo.def
! 4e120ea581fa4d76820ea419b77ca3fc  gcc/config/riscv/riscv-cores.def
  165a5d0020971e2616fa7c9198c56338  gcc/config/riscv/riscv-d.cc
  c5d537324bd78e2ade1cf59d04fc1f54  gcc/config/riscv/riscv-d.h
  289aa3beac20448eac0ca053c2652b37  gcc/config/riscv/riscv-ext-andes.def
--- 5048,5054 ----
  5108deda32a010f8df8d518a2417ba81  gcc/config/riscv/riscv-builtins.cc
  5cb39713c38f481ef65328ccacfc067e  gcc/config/riscv/riscv-c.cc
  33dd09c63fb051a37d26d97469c451d9  gcc/config/riscv/riscv-cmo.def
! 545caffff860e80de36e4ab2e510e9df  gcc/config/riscv/riscv-cores.def
  165a5d0020971e2616fa7c9198c56338  gcc/config/riscv/riscv-d.cc
  c5d537324bd78e2ade1cf59d04fc1f54  gcc/config/riscv/riscv-d.h
  289aa3beac20448eac0ca053c2652b37  gcc/config/riscv/riscv-ext-andes.def
*************** f345cbe9d8c50068508e75fe59e6b4a6  gcc/co
*** 5069,5075 ****
  7580ff2b6ee1a7e6e08368bacae2ac95  gcc/config/riscv/riscv-opts.h
  b8f6d36a9d7d3ef28a80c20bec990411  gcc/config/riscv/riscv-passes.def
  e1ac1647825642c1e551b9a174630bd6  gcc/config/riscv/riscv-profiles.def
! 578b3af4dd50a987973e67a87a005ab7  gcc/config/riscv/riscv-protos.h
  2b6774d7dd7980d9eb3f4f24ed1b3e45  gcc/config/riscv/riscv-scalar-crypto.def
  01798b6988317cc1d7a76908a68f458a  gcc/config/riscv/riscv-selftests.cc
  41d585e61cee0deacc33bd07c93e79e2  gcc/config/riscv/riscv-shorten-memrefs.cc
--- 5069,5075 ----
  7580ff2b6ee1a7e6e08368bacae2ac95  gcc/config/riscv/riscv-opts.h
  b8f6d36a9d7d3ef28a80c20bec990411  gcc/config/riscv/riscv-passes.def
  e1ac1647825642c1e551b9a174630bd6  gcc/config/riscv/riscv-profiles.def
! 90d461854d2e3adf0a5ba9438d84a546  gcc/config/riscv/riscv-protos.h
  2b6774d7dd7980d9eb3f4f24ed1b3e45  gcc/config/riscv/riscv-scalar-crypto.def
  01798b6988317cc1d7a76908a68f458a  gcc/config/riscv/riscv-selftests.cc
  41d585e61cee0deacc33bd07c93e79e2  gcc/config/riscv/riscv-shorten-memrefs.cc
*************** ee8122b7c30f11ad5dc682dad7cf7f55  gcc/co
*** 5094,5103 ****
  4dd506c7e0c9b67fb2b6c5acdf4f44b7  gcc/config/riscv/riscv-vector-switch.def
  3205f1e7859c9ef2f9de42d862780b0a  gcc/config/riscv/riscv-vsetvl.cc
  142fb9988d1433586e8fa0e3b072f655  gcc/config/riscv/riscv-vsetvl.def
! 6c148c7c35a1ff5e8c46457f8f3417e8  gcc/config/riscv/riscv-zicfilp.cc
! bba5d71f30ef7522aa1d0d8c2ad94450  gcc/config/riscv/riscv.cc
! 6c784bd0ee5e1b5a8990ada0c77b3101  gcc/config/riscv/riscv.h
! fd9d7795acefef4e29cfd8e45ac4c41d  gcc/config/riscv/riscv.md
  889bc6068f70f03b008968821d92ad40  gcc/config/riscv/riscv.opt
  712042d47c904acf7307129ab3a48df3  gcc/config/riscv/riscv.opt.urls
  68c8996d7ac73df46c6c1d49d8839ee0  gcc/config/riscv/riscv_bitmanip.h
--- 5094,5103 ----
  4dd506c7e0c9b67fb2b6c5acdf4f44b7  gcc/config/riscv/riscv-vector-switch.def
  3205f1e7859c9ef2f9de42d862780b0a  gcc/config/riscv/riscv-vsetvl.cc
  142fb9988d1433586e8fa0e3b072f655  gcc/config/riscv/riscv-vsetvl.def
! d87a1f40dfc9d93ed1ee9eb9243e12e3  gcc/config/riscv/riscv-zicfilp.cc
! d6b68b59721d1ba7ae4ef5f0236c7a55  gcc/config/riscv/riscv.cc
! 0b4d02debcffa4764cfdba37ddd0f549  gcc/config/riscv/riscv.h
! 4093ba6fa10059656cd832cf940d8726  gcc/config/riscv/riscv.md
  889bc6068f70f03b008968821d92ad40  gcc/config/riscv/riscv.opt
  712042d47c904acf7307129ab3a48df3  gcc/config/riscv/riscv.opt.urls
  68c8996d7ac73df46c6c1d49d8839ee0  gcc/config/riscv/riscv_bitmanip.h
*************** fe202105dd9e81b9ce8fdcc11d52c294  gcc/co
*** 5134,5140 ****
  dcbac9d3c6831ff1cd18effca9c7bb28  gcc/config/riscv/vector-bfloat16.md
  d321bd9f102b0926d5d2c56c36ad6853  gcc/config/riscv/vector-crypto.md
  a1ab9c2ceb56674539793f23371d6e4e  gcc/config/riscv/vector-iterators.md
! 65bcdc66e602b036eb0769530059cab8  gcc/config/riscv/vector.md
  18d213c106fe52eebc74017d5ff892ce  gcc/config/riscv/xiangshan.md
  a398dfa970d2d1459a986ec657c751a3  gcc/config/riscv/xt-c908.md
  39ba96197510d4ac114a827d7ffbf806  gcc/config/riscv/zc.md
--- 5134,5140 ----
  dcbac9d3c6831ff1cd18effca9c7bb28  gcc/config/riscv/vector-bfloat16.md
  d321bd9f102b0926d5d2c56c36ad6853  gcc/config/riscv/vector-crypto.md
  a1ab9c2ceb56674539793f23371d6e4e  gcc/config/riscv/vector-iterators.md
! 2e571cf04aba79dc70d590cce43da002  gcc/config/riscv/vector.md
  18d213c106fe52eebc74017d5ff892ce  gcc/config/riscv/xiangshan.md
  a398dfa970d2d1459a986ec657c751a3  gcc/config/riscv/xt-c908.md
  39ba96197510d4ac114a827d7ffbf806  gcc/config/riscv/zc.md
*************** d3a1c98fd13be04e1250b073cb8dcef2  gcc/co
*** 5264,5270 ****
  e6d989b64b588e3c16ea579031fed5ab  gcc/config/rs6000/rs6000-string.cc
  835f22c956cc4deb83970ee9a9b5b79b  gcc/config/rs6000/rs6000-tables.opt
  ce8de9a27f36b759a69194616c02eb38  gcc/config/rs6000/rs6000-tables.opt.urls
! 3963152905bdcf5b20f2cfac75fd44ba  gcc/config/rs6000/rs6000.cc
  4517b5e939c3d673f16baceb4e1a371a  gcc/config/rs6000/rs6000.h
  f25105f45029b1ea97f9b32a1041f7f6  gcc/config/rs6000/rs6000.md
  e407423336f12658b509205c3e8f7130  gcc/config/rs6000/rs6000.opt
--- 5264,5270 ----
  e6d989b64b588e3c16ea579031fed5ab  gcc/config/rs6000/rs6000-string.cc
  835f22c956cc4deb83970ee9a9b5b79b  gcc/config/rs6000/rs6000-tables.opt
  ce8de9a27f36b759a69194616c02eb38  gcc/config/rs6000/rs6000-tables.opt.urls
! 270659d587c12b567f28c54d6f3d3522  gcc/config/rs6000/rs6000.cc
  4517b5e939c3d673f16baceb4e1a371a  gcc/config/rs6000/rs6000.h
  f25105f45029b1ea97f9b32a1041f7f6  gcc/config/rs6000/rs6000.md
  e407423336f12658b509205c3e8f7130  gcc/config/rs6000/rs6000.opt
*************** ea440bcad8a276afecfcff0ce6aae6fe  gcc/co
*** 5363,5369 ****
  14c40f85d99aad740c052f55703baf70  gcc/config/s390/s390-opts.h
  aa396b24681954cbcd0cd64bf19d469c  gcc/config/s390/s390-passes.def
  4a9d0190b77f29fbb14fa9706732f297  gcc/config/s390/s390-protos.h
! f0ce858972acc6d00fe87e445b3c8ab8  gcc/config/s390/s390.cc
  ae1d48d5851707124525babf8404d97f  gcc/config/s390/s390.h
  f64e1697e0a9a67ef3020649b7e0d7cd  gcc/config/s390/s390.md
  ae1754efd7785ad08c6cc930dd08c7ae  gcc/config/s390/s390.opt
--- 5363,5369 ----
  14c40f85d99aad740c052f55703baf70  gcc/config/s390/s390-opts.h
  aa396b24681954cbcd0cd64bf19d469c  gcc/config/s390/s390-passes.def
  4a9d0190b77f29fbb14fa9706732f297  gcc/config/s390/s390-protos.h
! 502c060ec0d9f2a1f649ec6f36b1bade  gcc/config/s390/s390.cc
  ae1d48d5851707124525babf8404d97f  gcc/config/s390/s390.h
  f64e1697e0a9a67ef3020649b7e0d7cd  gcc/config/s390/s390.md
  ae1754efd7785ad08c6cc930dd08c7ae  gcc/config/s390/s390.opt
*************** eabefa7848e30cb14ae3473ccb4f1c5e  gcc/co
*** 5633,5640 ****
  ab92d7ead48857ad8dfb2fbadb7845ab  gcc/config/xtensa/xtensa.md
  411cab921f0a965cbb5411dc8b28fc82  gcc/config/xtensa/xtensa.opt
  107b37908c9eb8a26c5b7a6074ccb338  gcc/config/xtensa/xtensa.opt.urls
! d9cf40bf9b0df212db96e300ad061fdb  gcc/configure
! 72e5ce36df6c38a7dd57bae3ee513396  gcc/configure.ac
  a2bfe87830136c2d55b591b943cecd3f  gcc/configure.tgt
  8a46839a73059f70ef105be9706c2554  gcc/context.cc
  08023c1005def168a8b675813b95d9f4  gcc/context.h
--- 5633,5640 ----
  ab92d7ead48857ad8dfb2fbadb7845ab  gcc/config/xtensa/xtensa.md
  411cab921f0a965cbb5411dc8b28fc82  gcc/config/xtensa/xtensa.opt
  107b37908c9eb8a26c5b7a6074ccb338  gcc/config/xtensa/xtensa.opt.urls
! 8f8b790ef0ff1d714dea50e9c7a0afe6  gcc/configure
! 741d9d4b8a7689610a9644ff94a2b78b  gcc/configure.ac
  a2bfe87830136c2d55b591b943cecd3f  gcc/configure.tgt
  8a46839a73059f70ef105be9706c2554  gcc/context.cc
  08023c1005def168a8b675813b95d9f4  gcc/context.h
*************** c5ad0142a191862e3e81ecd3573754b3  gcc/co
*** 5645,5651 ****
  a424415c72a544d25e6518e1cf699300  gcc/coroutine-passes.cc
  11fc0e33834de003c7fdd80427589041  gcc/coverage.cc
  d27317cee558d7c78afbdb6529e36649  gcc/coverage.h
! d54d59dcf58b521fdbb4fd5643312d6f  gcc/cp/ChangeLog
  70c059f2b75a2fc1bb95a526b21b8cd7  gcc/cp/ChangeLog-1993
  7cbd106e10a0ba7c052bee3fe20671c2  gcc/cp/ChangeLog-1994
  3b1e3ed23ad4363f75e6fd2fbb583dee  gcc/cp/ChangeLog-1995
--- 5645,5651 ----
  a424415c72a544d25e6518e1cf699300  gcc/coroutine-passes.cc
  11fc0e33834de003c7fdd80427589041  gcc/coverage.cc
  d27317cee558d7c78afbdb6529e36649  gcc/coverage.h
! ce39b7b5bb370ff2a83c8eb8e5367f86  gcc/cp/ChangeLog
  70c059f2b75a2fc1bb95a526b21b8cd7  gcc/cp/ChangeLog-1993
  7cbd106e10a0ba7c052bee3fe20671c2  gcc/cp/ChangeLog-1994
  3b1e3ed23ad4363f75e6fd2fbb583dee  gcc/cp/ChangeLog-1995
*************** ffdd05782c93c0567486bb7ed7eee65a  gcc/cp
*** 5702,5718 ****
  461c8f732438052ea1ab7eabb72f0604  gcc/cp/cp-tree.def
  6ac64a8e849f6e2512915e2981815dd3  gcc/cp/cp-tree.h
  e2854dfa428fab45fc41bf58fef71e61  gcc/cp/cp-ubsan.cc
! 0f660920514d4f51007f6841a25e3af6  gcc/cp/cvt.cc
  f067718cf3d629084d8347c4e017afd4  gcc/cp/cxx-pretty-print.cc
  1d04eec9859d91686ca501e9221f30ac  gcc/cp/cxx-pretty-print.h
  82a41d873e1c90067158c89e6c1bd4bb  gcc/cp/cxxapi-data.csv
! badcfe2aaa160ad5df4867178af399b7  gcc/cp/decl.cc
  6b0c9433f7d3f129a44b59d54babb4eb  gcc/cp/decl.h
! 42202b0b377b7e5c09546d00532d188a  gcc/cp/decl2.cc
  12ccd5244973d74a0536adf58261b416  gcc/cp/dump.cc
  e5cd674ba89cede50da369b84db82527  gcc/cp/error.cc
  59d3d272a504a462c1f7081637e7f3e5  gcc/cp/except.cc
! 2e851309e83b69af8e26686d1973a6ac  gcc/cp/expr.cc
  447ddbe59eba62b9a389b9ba11701cfc  gcc/cp/friend.cc
  312df0090f34c36193263da66b5ecbd7  gcc/cp/g++spec.cc
  a29b3e9192657e81a1574fb99466348d  gcc/cp/gen-cxxapi-file.py
--- 5702,5718 ----
  461c8f732438052ea1ab7eabb72f0604  gcc/cp/cp-tree.def
  6ac64a8e849f6e2512915e2981815dd3  gcc/cp/cp-tree.h
  e2854dfa428fab45fc41bf58fef71e61  gcc/cp/cp-ubsan.cc
! 9f3892d82a5fde05b0ab9fd164ad7177  gcc/cp/cvt.cc
  f067718cf3d629084d8347c4e017afd4  gcc/cp/cxx-pretty-print.cc
  1d04eec9859d91686ca501e9221f30ac  gcc/cp/cxx-pretty-print.h
  82a41d873e1c90067158c89e6c1bd4bb  gcc/cp/cxxapi-data.csv
! 8e1f1cc3eaa4b9624b63890764c225f9  gcc/cp/decl.cc
  6b0c9433f7d3f129a44b59d54babb4eb  gcc/cp/decl.h
! f7fd6f8b2943baf2a508fd07e569c802  gcc/cp/decl2.cc
  12ccd5244973d74a0536adf58261b416  gcc/cp/dump.cc
  e5cd674ba89cede50da369b84db82527  gcc/cp/error.cc
  59d3d272a504a462c1f7081637e7f3e5  gcc/cp/except.cc
! f4c33376dcbcbb2b49c9a11ec2911ad9  gcc/cp/expr.cc
  447ddbe59eba62b9a389b9ba11701cfc  gcc/cp/friend.cc
  312df0090f34c36193263da66b5ecbd7  gcc/cp/g++spec.cc
  a29b3e9192657e81a1574fb99466348d  gcc/cp/gen-cxxapi-file.py
*************** e4ccdd9cbe95dde4cce27394a7613dd9  gcc/cp
*** 5729,5749 ****
  04fe5bec0bf79fcb3680aec9913ebc29  gcc/cp/metafns.h
  287c9e2e32dbcb7c0e31ade5b6075f26  gcc/cp/method.cc
  8e86eb6d046a3ca86dc6d33e08e4532e  gcc/cp/module.cc
! 5af1860ab3b911e2ca1f71f188d9d7eb  gcc/cp/name-lookup.cc
  94a0863bb5120d567c717d513ff59a1d  gcc/cp/name-lookup.h
  54cd670407c3fc4f1778f1561e89ae99  gcc/cp/operators.def
  9efebf39da56d681d4405dfb9e55e3f5  gcc/cp/optimize.cc
  d880956f1c03e6163f884d302199b1a9  gcc/cp/parser.cc
  fbc41b26ea2a336d3636c9d9c565d845  gcc/cp/parser.h
! 78b81d85ae83fa133b82bdae0768fd18  gcc/cp/pt.cc
  25322928eaff39cf167372554c639e02  gcc/cp/ptree.cc
! ba907560f0a0c2c4c1c303c34860c475  gcc/cp/reflect.cc
  6ae3f1ff3ba804579da14445501f9181  gcc/cp/rtti.cc
  e6a800b8f2f93cd8ed05ee026f824eca  gcc/cp/search.cc
  8c2076ff5230f0274ee92ce2321ffab5  gcc/cp/semantics.cc
  64c36b2ea66c9f8f477b19d24e06a2cb  gcc/cp/std-name-hint.gperf
  15cc409f13a8952feb90e94d99ecefa2  gcc/cp/std-name-hint.h
! 539f1909a97d0268fbb0e0148a12fc6e  gcc/cp/tree.cc
  01e9a381e6fcf3d016d0170ee0ad71d7  gcc/cp/type-utils.h
  f8acce2d62b5de5f6c73b511ce3dcf6e  gcc/cp/typeck.cc
  977a0037d150893837512a88f03fbdad  gcc/cp/typeck2.cc
--- 5729,5749 ----
  04fe5bec0bf79fcb3680aec9913ebc29  gcc/cp/metafns.h
  287c9e2e32dbcb7c0e31ade5b6075f26  gcc/cp/method.cc
  8e86eb6d046a3ca86dc6d33e08e4532e  gcc/cp/module.cc
! 36a03818ce45c595866cc280493ac112  gcc/cp/name-lookup.cc
  94a0863bb5120d567c717d513ff59a1d  gcc/cp/name-lookup.h
  54cd670407c3fc4f1778f1561e89ae99  gcc/cp/operators.def
  9efebf39da56d681d4405dfb9e55e3f5  gcc/cp/optimize.cc
  d880956f1c03e6163f884d302199b1a9  gcc/cp/parser.cc
  fbc41b26ea2a336d3636c9d9c565d845  gcc/cp/parser.h
! 5e3e0cc185af2831fc735ba9ada893f3  gcc/cp/pt.cc
  25322928eaff39cf167372554c639e02  gcc/cp/ptree.cc
! 7d361620c27bdc61cd0eeef0142cc71d  gcc/cp/reflect.cc
  6ae3f1ff3ba804579da14445501f9181  gcc/cp/rtti.cc
  e6a800b8f2f93cd8ed05ee026f824eca  gcc/cp/search.cc
  8c2076ff5230f0274ee92ce2321ffab5  gcc/cp/semantics.cc
  64c36b2ea66c9f8f477b19d24e06a2cb  gcc/cp/std-name-hint.gperf
  15cc409f13a8952feb90e94d99ecefa2  gcc/cp/std-name-hint.h
! 792a726043c3ff0c79b2c075e7efa243  gcc/cp/tree.cc
  01e9a381e6fcf3d016d0170ee0ad71d7  gcc/cp/type-utils.h
  f8acce2d62b5de5f6c73b511ce3dcf6e  gcc/cp/typeck.cc
  977a0037d150893837512a88f03fbdad  gcc/cp/typeck2.cc
*************** c7362bfcde6697a2d4479f37eb016010  gcc/db
*** 6027,6033 ****
  79fbd46fe51c7607d0a7100c8dd1c191  gcc/dce.cc
  3c4bc4a738f591bd4213d05099b35827  gcc/dce.h
  69f80a3dd4fda02b419159ce0fbac5ca  gcc/ddg.cc
! f03ba47b25bafaac3f55372667e49d7c  gcc/ddg.h
  fc9508a813d61f77432f8e52b0a237ee  gcc/debug.cc
  89780f934584ce7fe2539cb7ac5c8eb8  gcc/debug.h
  0afbf3ea5c8e19a3c7a80ff5fd51f85b  gcc/defaults.h
--- 6027,6033 ----
  79fbd46fe51c7607d0a7100c8dd1c191  gcc/dce.cc
  3c4bc4a738f591bd4213d05099b35827  gcc/dce.h
  69f80a3dd4fda02b419159ce0fbac5ca  gcc/ddg.cc
! 3e98a4ca217fc6f5c000ab031d6f8b30  gcc/ddg.h
  fc9508a813d61f77432f8e52b0a237ee  gcc/debug.cc
  89780f934584ce7fe2539cb7ac5c8eb8  gcc/debug.h
  0afbf3ea5c8e19a3c7a80ff5fd51f85b  gcc/defaults.h
*************** c467778ac808c70043fed1b27803d72a  gcc/do
*** 6124,6136 ****
  fe1e57cdb00aa5c5d132ea01fc2e1440  gcc/doc/configterms.texi
  0e05717a84a4459f53d155243f6ca0b5  gcc/doc/contrib.texi
  43c75b80852d2080f354a4ea82a17119  gcc/doc/contribute.texi
! 67b5d9fe9d30eee9c41c6aeaf2ac9398  gcc/doc/cpp.texi
  a0c8079a0b836c78e78f046d38b8eeff  gcc/doc/cppdiropts.texi
  ee65c9e3e7c3fb1fd0128c23f4130e51  gcc/doc/cppenv.texi
  301ed7e567732d1f0d5899a624068bdd  gcc/doc/cppinternals.texi
  421cc3b7d98386e0eb0abba4242dd54a  gcc/doc/cppopts.texi
  d8b2becdc7d9c570f256e19e1b1ac4f1  gcc/doc/cppwarnopts.texi
! 6150d94cabcc169963e53e4af5be221f  gcc/doc/extend.texi
  d4f889c42d5400f1d26328f8b49db9ba  gcc/doc/fragments.texi
  7fb1e4199b2e70228fda69b8065d83c4  gcc/doc/frontends.texi
  f0e190ef0119097dac4c73c2f9e34d9e  gcc/doc/gcc.texi
--- 6124,6136 ----
  fe1e57cdb00aa5c5d132ea01fc2e1440  gcc/doc/configterms.texi
  0e05717a84a4459f53d155243f6ca0b5  gcc/doc/contrib.texi
  43c75b80852d2080f354a4ea82a17119  gcc/doc/contribute.texi
! 42bf32394ff4b43eeca36017833db015  gcc/doc/cpp.texi
  a0c8079a0b836c78e78f046d38b8eeff  gcc/doc/cppdiropts.texi
  ee65c9e3e7c3fb1fd0128c23f4130e51  gcc/doc/cppenv.texi
  301ed7e567732d1f0d5899a624068bdd  gcc/doc/cppinternals.texi
  421cc3b7d98386e0eb0abba4242dd54a  gcc/doc/cppopts.texi
  d8b2becdc7d9c570f256e19e1b1ac4f1  gcc/doc/cppwarnopts.texi
! 2c75f285a23702023f1f9e98b12fa186  gcc/doc/extend.texi
  d4f889c42d5400f1d26328f8b49db9ba  gcc/doc/fragments.texi
  7fb1e4199b2e70228fda69b8065d83c4  gcc/doc/frontends.texi
  f0e190ef0119097dac4c73c2f9e34d9e  gcc/doc/gcc.texi
*************** ae0bcb2e6be7ae6b715e2c00eaf668e0  gcc/do
*** 6153,6161 ****
  37d898a82683588b62cca104098ad182  gcc/doc/include/gcc-common.texi
  95c90bf85d3eab67f348ee3ce0bf4050  gcc/doc/include/gpl_v3.texi
  e9b8122841fbfbbc30fee8ed6613c399  gcc/doc/include/texinfo.tex
! 58f82e9f80b79fbe5c244a149d11b764  gcc/doc/install.texi
  30a2209eee0a2bed76e2d9ff3bd646f2  gcc/doc/install.texi2html
! 8342f70a3494ee366e07c97af2c2d020  gcc/doc/invoke.texi
  dd9d4097ebfa9e936c41913343807268  gcc/doc/languages.texi
  46d2bbbd37002bb71569d0b1f27d7a5a  gcc/doc/libgcc.texi
  ef4f00c423089323edef1d3cff31a4a2  gcc/doc/libgdiagnostics/Makefile
--- 6153,6161 ----
  37d898a82683588b62cca104098ad182  gcc/doc/include/gcc-common.texi
  95c90bf85d3eab67f348ee3ce0bf4050  gcc/doc/include/gpl_v3.texi
  e9b8122841fbfbbc30fee8ed6613c399  gcc/doc/include/texinfo.tex
! aef5770b278fde5359d28cea926a8d4c  gcc/doc/install.texi
  30a2209eee0a2bed76e2d9ff3bd646f2  gcc/doc/install.texi2html
! 77260b924d9ab234f8c6090b428e9aba  gcc/doc/invoke.texi
  dd9d4097ebfa9e936c41913343807268  gcc/doc/languages.texi
  46d2bbbd37002bb71569d0b1f27d7a5a  gcc/doc/libgcc.texi
  ef4f00c423089323edef1d3cff31a4a2  gcc/doc/libgdiagnostics/Makefile
*************** ea1e82bfc6105050a63b50c8e40571c0  gcc/do
*** 6198,6213 ****
  8b826afc7f71e67445cf33bbcd457ab5  gcc/doc/optinfo.texi
  3abb75ff788f5434702f351bf7a279c9  gcc/doc/options.texi
  a7f516c3979d392e9372c2369c2b589a  gcc/doc/params.texi
! 4f849b8e491aa0fa8b80c3cefe9dc5ec  gcc/doc/passes.texi
  e54937e427a2584ac4045286c725fab1  gcc/doc/plugins.texi
  55ca097cff451ddbce4b20cdcbb9273e  gcc/doc/poly-int.texi
  213ccf5a355e5d07fc0dcef29825d6dd  gcc/doc/portability.texi
  76f8fc71e463a97ad4adf329a3a0c2d9  gcc/doc/riscv-ext.texi
! 80620d2d24043b189405087d14062574  gcc/doc/riscv-mcpu.texi
! 0a0e5a4479873eec073ad440f5a5ec5b  gcc/doc/riscv-mtune.texi
! 3a7211e2e52f65124ae991d190d3827b  gcc/doc/rtl.texi
  b12261ad56bcabd07b4a1b739f271527  gcc/doc/service.texi
! 04b23a5a86ee791de2d326582f7c6edd  gcc/doc/sourcebuild.texi
  9b58fbc10917d12008925e09d91cab55  gcc/doc/specs.texi
  d2b53a62ec4e23a8e4cbe16d2843c100  gcc/doc/standards.texi
  3338dcc5f4682632b9bc966730e82549  gcc/doc/tm.texi
--- 6198,6213 ----
  8b826afc7f71e67445cf33bbcd457ab5  gcc/doc/optinfo.texi
  3abb75ff788f5434702f351bf7a279c9  gcc/doc/options.texi
  a7f516c3979d392e9372c2369c2b589a  gcc/doc/params.texi
! fdecd23a17ae3f56f5e4f046f0bb157b  gcc/doc/passes.texi
  e54937e427a2584ac4045286c725fab1  gcc/doc/plugins.texi
  55ca097cff451ddbce4b20cdcbb9273e  gcc/doc/poly-int.texi
  213ccf5a355e5d07fc0dcef29825d6dd  gcc/doc/portability.texi
  76f8fc71e463a97ad4adf329a3a0c2d9  gcc/doc/riscv-ext.texi
! 8c633e11fbedfdfe3d0ba6fee84c7754  gcc/doc/riscv-mcpu.texi
! 557b50d4a124bed410e403a84cc46647  gcc/doc/riscv-mtune.texi
! d148d8e42c694bcabb267855d8c863fb  gcc/doc/rtl.texi
  b12261ad56bcabd07b4a1b739f271527  gcc/doc/service.texi
! 8ac5d323a53f7d2a2c1dc7a11e5453e2  gcc/doc/sourcebuild.texi
  9b58fbc10917d12008925e09d91cab55  gcc/doc/specs.texi
  d2b53a62ec4e23a8e4cbe16d2843c100  gcc/doc/standards.texi
  3338dcc5f4682632b9bc966730e82549  gcc/doc/tm.texi
*************** df86d4116f050c5e09b21441b286f26c  gcc/dw
*** 6234,6240 ****
  2d9cf6bbe6a4ec143049dcca966ba581  gcc/dwarf2codeview.h
  601de5b318a7738f96f4c04305c9e506  gcc/dwarf2ctf.cc
  6c4236fa6ead686398b8d5e7f89f8118  gcc/dwarf2ctf.h
! 16a220e980897414d87d5a6e30d772ed  gcc/dwarf2out.cc
  419729c0a6128770292e664ef9b6aac7  gcc/dwarf2out.h
  5f6d1c1c6b68b50c4051ffa41f4aed26  gcc/early-remat.cc
  a19db416e8ffd8223146373aec780a72  gcc/emit-rtl.cc
--- 6234,6240 ----
  2d9cf6bbe6a4ec143049dcca966ba581  gcc/dwarf2codeview.h
  601de5b318a7738f96f4c04305c9e506  gcc/dwarf2ctf.cc
  6c4236fa6ead686398b8d5e7f89f8118  gcc/dwarf2ctf.h
! 3bd0b8e41020a963f69a9e9804d9ea19  gcc/dwarf2out.cc
  419729c0a6128770292e664ef9b6aac7  gcc/dwarf2out.h
  5f6d1c1c6b68b50c4051ffa41f4aed26  gcc/early-remat.cc
  a19db416e8ffd8223146373aec780a72  gcc/emit-rtl.cc
*************** d61f76c4b55102abe0d6908ab60489e7  gcc/ex
*** 6249,6255 ****
  2af24b814afb179d911a33733d593eba  gcc/exec-tool.in
  218b6e1049518cb5651dfbf9f18e27a8  gcc/explow.cc
  e0ebf672695dc08e5686ca42b54e3a46  gcc/explow.h
! 17fe5dde50f0cda11f8aea8d206024a8  gcc/expmed.cc
  2431f17e1f416ef0b9c38b1b975942a4  gcc/expmed.h
  fb9d1e021a1661336badd57c751c239b  gcc/expr.cc
  ca4a759ee689223d3551cae34e997224  gcc/expr.h
--- 6249,6255 ----
  2af24b814afb179d911a33733d593eba  gcc/exec-tool.in
  218b6e1049518cb5651dfbf9f18e27a8  gcc/explow.cc
  e0ebf672695dc08e5686ca42b54e3a46  gcc/explow.h
! 0e0b224e5ea82e4e2f9c34acdb018201  gcc/expmed.cc
  2431f17e1f416ef0b9c38b1b975942a4  gcc/expmed.h
  fb9d1e021a1661336badd57c751c239b  gcc/expr.cc
  ca4a759ee689223d3551cae34e997224  gcc/expr.h
*************** b4a18c8d0dacb99b95b772e94f976754  gcc/fi
*** 6267,6276 ****
  edda8d107262aa360baaeafc0bd0d4a1  gcc/flags.h
  f8396c35f56710f2dd577b8f6644d380  gcc/fold-const-call.cc
  0b4405bca4b699887c6a47e1d25b216c  gcc/fold-const-call.h
! ea6b5c7ef50ff662d74bd41a1b063ebe  gcc/fold-const.cc
  52f12f5f49a400327788ee826a094b1e  gcc/fold-const.h
  503251519661f1768b70d9b424bdc12b  gcc/fold-mem-offsets.cc
! f6e58ee882dd941f9a6d4e020e137e3b  gcc/fortran/ChangeLog
  083c53fadafdcf3be46713838a51e36c  gcc/fortran/ChangeLog-2002
  2a4ca18d211fb2603139354fd16398ed  gcc/fortran/ChangeLog-2003
  e7462609ebd0dd7c874e0fc00e2833aa  gcc/fortran/ChangeLog-2004
--- 6267,6276 ----
  edda8d107262aa360baaeafc0bd0d4a1  gcc/flags.h
  f8396c35f56710f2dd577b8f6644d380  gcc/fold-const-call.cc
  0b4405bca4b699887c6a47e1d25b216c  gcc/fold-const-call.h
! 974aacaf134d3d80b85afee20c6ca71e  gcc/fold-const.cc
  52f12f5f49a400327788ee826a094b1e  gcc/fold-const.h
  503251519661f1768b70d9b424bdc12b  gcc/fold-mem-offsets.cc
! 7cacf28fa13a9069dfa075ca890df662  gcc/fortran/ChangeLog
  083c53fadafdcf3be46713838a51e36c  gcc/fortran/ChangeLog-2002
  2a4ca18d211fb2603139354fd16398ed  gcc/fortran/ChangeLog-2003
  e7462609ebd0dd7c874e0fc00e2833aa  gcc/fortran/ChangeLog-2004
*************** c0284e23f561f80398df460d7c477675  gcc/fo
*** 6322,6336 ****
  aabeb93bbe7fb46864a337bef3c2ade5  gcc/fortran/frontend-passes.cc
  c85c9309a4274609c6ff6466621c90f6  gcc/fortran/gfc-diagnostic.def
  afb07146daad7f36a59c52e053f6772f  gcc/fortran/gfc-internals.texi
! 17bde97b60110646c6d0cddd5c692cb6  gcc/fortran/gfortran.h
  13d7dc211e7c02525ba3c435e6ea201b  gcc/fortran/gfortran.texi
  11194f3565a8c394b76bd5117830b0ae  gcc/fortran/gfortranspec.cc
! 1f2777c26f9adeab6a6d4fb2a1f4f8ea  gcc/fortran/interface.cc
! f0794d2cccb59fb006917fd000971afb  gcc/fortran/intrinsic.cc
  d7ffa84de49936bfc22cdb2a7ef87800  gcc/fortran/intrinsic.h
  5c41fec8827bcc0e1e524b99ce4bfd71  gcc/fortran/intrinsic.texi
  d1270efc97a26916a776b4a7c77118e7  gcc/fortran/invoke.texi
! 63ef2841e3b8bc71e26098d85be8e799  gcc/fortran/io.cc
  02af2e093ad4f92649a6370fa6dc3215  gcc/fortran/ioparm.def
  1e9a62cdd76fcac49d91728090a8b2f6  gcc/fortran/iresolve.cc
  4983e51f5909bf7627062a5e3ace5455  gcc/fortran/iso-c-binding.def
--- 6322,6336 ----
  aabeb93bbe7fb46864a337bef3c2ade5  gcc/fortran/frontend-passes.cc
  c85c9309a4274609c6ff6466621c90f6  gcc/fortran/gfc-diagnostic.def
  afb07146daad7f36a59c52e053f6772f  gcc/fortran/gfc-internals.texi
! 5c208b951e0a3d78eb51747878e59e31  gcc/fortran/gfortran.h
  13d7dc211e7c02525ba3c435e6ea201b  gcc/fortran/gfortran.texi
  11194f3565a8c394b76bd5117830b0ae  gcc/fortran/gfortranspec.cc
! f7e292210a78addc2aa6af8409ece064  gcc/fortran/interface.cc
! 170e16c1bee9d328fc1e32760604b336  gcc/fortran/intrinsic.cc
  d7ffa84de49936bfc22cdb2a7ef87800  gcc/fortran/intrinsic.h
  5c41fec8827bcc0e1e524b99ce4bfd71  gcc/fortran/intrinsic.texi
  d1270efc97a26916a776b4a7c77118e7  gcc/fortran/invoke.texi
! c0fed3c5aa6158f9ef181003b31f9b4f  gcc/fortran/io.cc
  02af2e093ad4f92649a6370fa6dc3215  gcc/fortran/ioparm.def
  1e9a62cdd76fcac49d91728090a8b2f6  gcc/fortran/iresolve.cc
  4983e51f5909bf7627062a5e3ace5455  gcc/fortran/iso-c-binding.def
*************** e608b93ad2362c5630cb76e573f346ef  gcc/fo
*** 6344,6373 ****
  bf54232c4c950ed772f4964c4f79629e  gcc/fortran/matchexp.cc
  915f6b30a8c22a5fea18690269a5a4a4  gcc/fortran/mathbuiltins.def
  9687294592a5ccef5d0b8254ab33816b  gcc/fortran/misc.cc
! 301950f4d255f59000472dd89e4fe7ec  gcc/fortran/module.cc
! 8c5a98fa1963c4bf0007c4ca6bfde812  gcc/fortran/openmp.cc
  7baca4fc0a6fcd712dcbccab22987c74  gcc/fortran/options.cc
  f96b91fecd5db62c95bc50a661965b6d  gcc/fortran/parse.cc
  c97a1f016de974126c688bb9c805f323  gcc/fortran/parse.h
  d8018f6b8422ec272ff0ef8a7bd1d39d  gcc/fortran/primary.cc
! 0fea4ff05bc89aaf9912008d0372521c  gcc/fortran/resolve.cc
  e23f6eefa51bb3b4caa3d75c0409cfcd  gcc/fortran/scanner.cc
  18963b3f6aacca960fd6aa72b429a9d2  gcc/fortran/scanner.h
  664f19f5a29de9abc4642568f758c47c  gcc/fortran/simplify.cc
  2155dafc4405ccdc4c41df7a1a31a496  gcc/fortran/st.cc
! c7c594db0c4a65a9d2ca985e9b16fd26  gcc/fortran/symbol.cc
  4fa06f769be3f1b439a574ee842c82ca  gcc/fortran/target-memory.cc
  ea8837444e2a08a95a3ea747c94b8106  gcc/fortran/target-memory.h
! 37ff635937529ccac2d6069c38129001  gcc/fortran/trans-array.cc
  a0c40b654df0b5c5213047d26e48e97a  gcc/fortran/trans-array.h
  5c567026f9fbc4fea9b59c22743687c4  gcc/fortran/trans-common.cc
  98960d7450a15e1ecc9789bd0bde16a7  gcc/fortran/trans-const.cc
  0d5cf4117521dba2aea9c8fd7ac67888  gcc/fortran/trans-const.h
  6d304de80d4d8e67d353c979b108ce01  gcc/fortran/trans-decl.cc
  b6fb13afa4a1b71dec438bb5fc485f2c  gcc/fortran/trans-expr.cc
! 91234b8536ed771e30384ccba8947820  gcc/fortran/trans-intrinsic.cc
  269d2b121570a82898b133a3274071a7  gcc/fortran/trans-io.cc
! d33e602dc459641cb6375be1335ef501  gcc/fortran/trans-openmp.cc
  85a774b3580276912ca50b038f91e40b  gcc/fortran/trans-stmt.cc
  6fbc90714f9730e84515bbaadff313f9  gcc/fortran/trans-stmt.h
  f8cac5e2268c177aff676d2dbb690f51  gcc/fortran/trans-types.cc
--- 6344,6373 ----
  bf54232c4c950ed772f4964c4f79629e  gcc/fortran/matchexp.cc
  915f6b30a8c22a5fea18690269a5a4a4  gcc/fortran/mathbuiltins.def
  9687294592a5ccef5d0b8254ab33816b  gcc/fortran/misc.cc
! ba4a819765499ce29e3070e1ff83ed7b  gcc/fortran/module.cc
! 836b90f1c6fb115b5d1ccf96d7792193  gcc/fortran/openmp.cc
  7baca4fc0a6fcd712dcbccab22987c74  gcc/fortran/options.cc
  f96b91fecd5db62c95bc50a661965b6d  gcc/fortran/parse.cc
  c97a1f016de974126c688bb9c805f323  gcc/fortran/parse.h
  d8018f6b8422ec272ff0ef8a7bd1d39d  gcc/fortran/primary.cc
! 706aed7d77585110bf7515894034669e  gcc/fortran/resolve.cc
  e23f6eefa51bb3b4caa3d75c0409cfcd  gcc/fortran/scanner.cc
  18963b3f6aacca960fd6aa72b429a9d2  gcc/fortran/scanner.h
  664f19f5a29de9abc4642568f758c47c  gcc/fortran/simplify.cc
  2155dafc4405ccdc4c41df7a1a31a496  gcc/fortran/st.cc
! 7c0ce786abb30fa1b3dfd2c619faf5c3  gcc/fortran/symbol.cc
  4fa06f769be3f1b439a574ee842c82ca  gcc/fortran/target-memory.cc
  ea8837444e2a08a95a3ea747c94b8106  gcc/fortran/target-memory.h
! 68df8381b240157348e1186fcf73ce4e  gcc/fortran/trans-array.cc
  a0c40b654df0b5c5213047d26e48e97a  gcc/fortran/trans-array.h
  5c567026f9fbc4fea9b59c22743687c4  gcc/fortran/trans-common.cc
  98960d7450a15e1ecc9789bd0bde16a7  gcc/fortran/trans-const.cc
  0d5cf4117521dba2aea9c8fd7ac67888  gcc/fortran/trans-const.h
  6d304de80d4d8e67d353c979b108ce01  gcc/fortran/trans-decl.cc
  b6fb13afa4a1b71dec438bb5fc485f2c  gcc/fortran/trans-expr.cc
! 239bc2ec60f26ef7484e70d38222e6e8  gcc/fortran/trans-intrinsic.cc
  269d2b121570a82898b133a3274071a7  gcc/fortran/trans-io.cc
! 5d7c435eeb038b4b32efd30181a0b46b  gcc/fortran/trans-openmp.cc
  85a774b3580276912ca50b038f91e40b  gcc/fortran/trans-stmt.cc
  6fbc90714f9730e84515bbaadff313f9  gcc/fortran/trans-stmt.h
  f8cac5e2268c177aff676d2dbb690f51  gcc/fortran/trans-types.cc
*************** e4981e3b10513f53ed20b58620dfc56f  gcc/gc
*** 6395,6401 ****
  2e5199869e1ce8b2630e4784fbc6e5e6  gcc/gcc-urlifier.cc
  3ba51d67080efcd8791ea2eaf4103d72  gcc/gcc-urlifier.def
  9110b89a48e29f0f75e8c76eca85c6e2  gcc/gcc-urlifier.h
! e4d45606dfc85a899adc637c4f3fb81e  gcc/gcc.cc
  09d73a192ef597ac58c7300df5ae4eb3  gcc/gcc.h
  1edfbdaab776ee29780fe98d767e67ed  gcc/gcov-counter.def
  5254cb252da1522a0364a1ef41fa47b1  gcc/gcov-dump.cc
--- 6395,6401 ----
  2e5199869e1ce8b2630e4784fbc6e5e6  gcc/gcc-urlifier.cc
  3ba51d67080efcd8791ea2eaf4103d72  gcc/gcc-urlifier.def
  9110b89a48e29f0f75e8c76eca85c6e2  gcc/gcc-urlifier.h
! 8dd26bc648f973113bee686a27c741d5  gcc/gcc.cc
  09d73a192ef597ac58c7300df5ae4eb3  gcc/gcc.h
  1edfbdaab776ee29780fe98d767e67ed  gcc/gcov-counter.def
  5254cb252da1522a0364a1ef41fa47b1  gcc/gcov-dump.cc
*************** bb051bbc22b445b14ef4c250038f1dbf  gcc/gi
*** 6486,6496 ****
  47be556d1ffdffe8df16fdea25e9fe0e  gcc/gimple-predict.h
  507f851a06264c7415919c28e6afa3da  gcc/gimple-pretty-print.cc
  188a3366d8d8b4ba413f704fa241a1e2  gcc/gimple-pretty-print.h
! e7c15ad64690b26467dbd5a00225426e  gcc/gimple-range-cache.cc
  fed39c5b7ccbe9fef78cb20fe5a094d8  gcc/gimple-range-cache.h
  d69dec8fe89be66b09721beced1a6f07  gcc/gimple-range-edge.cc
  1001ed4a3c498c8d659f609b65b1b127  gcc/gimple-range-edge.h
! 34b6a38743116707c90085896a8a99e9  gcc/gimple-range-fold.cc
  c84294b3bbebf60858449ae953fae160  gcc/gimple-range-fold.h
  81b88dce3097e53655e2e56fcded19a4  gcc/gimple-range-gori.cc
  3f397ecbcf642d6d782fe5e774680054  gcc/gimple-range-gori.h
--- 6486,6496 ----
  47be556d1ffdffe8df16fdea25e9fe0e  gcc/gimple-predict.h
  507f851a06264c7415919c28e6afa3da  gcc/gimple-pretty-print.cc
  188a3366d8d8b4ba413f704fa241a1e2  gcc/gimple-pretty-print.h
! a4a39597524e3ba00876d10fd6c041e6  gcc/gimple-range-cache.cc
  fed39c5b7ccbe9fef78cb20fe5a094d8  gcc/gimple-range-cache.h
  d69dec8fe89be66b09721beced1a6f07  gcc/gimple-range-edge.cc
  1001ed4a3c498c8d659f609b65b1b127  gcc/gimple-range-edge.h
! f58f0b7333c819ce2d78ac8f471e9944  gcc/gimple-range-fold.cc
  c84294b3bbebf60858449ae953fae160  gcc/gimple-range-fold.h
  81b88dce3097e53655e2e56fcded19a4  gcc/gimple-range-gori.cc
  3f397ecbcf642d6d782fe5e774680054  gcc/gimple-range-gori.h
*************** a4932ff9aca9b1faf77d94e18d1a98dd  gcc/gi
*** 6507,6513 ****
  e45cb6aa50c3ff1d1592d7f2758cb778  gcc/gimple-range-trace.h
  a6fa6bdf95bbe8ce0cd55afe488296b9  gcc/gimple-range.cc
  b284f979b1dc05312e57543e7aa4d6c4  gcc/gimple-range.h
! 0440c0af18d2225994cea4de1db686ac  gcc/gimple-ssa-backprop.cc
  de05af775384560b7d73a320ca04b716  gcc/gimple-ssa-isolate-paths.cc
  841e25177d0ec3b994aade444aaf7d1f  gcc/gimple-ssa-nonnull-compare.cc
  c601c638b474c5f6fa902a24dc57b869  gcc/gimple-ssa-pta-constraints.cc
--- 6507,6513 ----
  e45cb6aa50c3ff1d1592d7f2758cb778  gcc/gimple-range-trace.h
  a6fa6bdf95bbe8ce0cd55afe488296b9  gcc/gimple-range.cc
  b284f979b1dc05312e57543e7aa4d6c4  gcc/gimple-range.h
! d1e29051831e84cf3322e13073e6e37c  gcc/gimple-ssa-backprop.cc
  de05af775384560b7d73a320ca04b716  gcc/gimple-ssa-isolate-paths.cc
  841e25177d0ec3b994aade444aaf7d1f  gcc/gimple-ssa-nonnull-compare.cc
  c601c638b474c5f6fa902a24dc57b869  gcc/gimple-ssa-pta-constraints.cc
*************** c6ca4c904385311cad5f96a840b597c6  gcc/in
*** 6678,6684 ****
  8a34b6abb2591b8c30c7fb4187261ee3  gcc/intl.cc
  22c5866f6858fea288e5e2f1adc96e40  gcc/intl.h
  a7d9dfb72122a917ffa9ee90152b059e  gcc/ipa-comdats.cc
! a9cc78592f8f3f62b20e2d7f8e3a5dcb  gcc/ipa-cp.cc
  bff71bc7b721a547da3a7ddc6b208fb9  gcc/ipa-cp.h
  0951d893930a76f52aa7e3f0fbd7201e  gcc/ipa-devirt.cc
  069cadb11f88729832aa5e2667ac73b8  gcc/ipa-fnsummary.cc
--- 6678,6684 ----
  8a34b6abb2591b8c30c7fb4187261ee3  gcc/intl.cc
  22c5866f6858fea288e5e2f1adc96e40  gcc/intl.h
  a7d9dfb72122a917ffa9ee90152b059e  gcc/ipa-comdats.cc
! 4383811dbb3eb6c93fc3153f23df988d  gcc/ipa-cp.cc
  bff71bc7b721a547da3a7ddc6b208fb9  gcc/ipa-cp.h
  0951d893930a76f52aa7e3f0fbd7201e  gcc/ipa-devirt.cc
  069cadb11f88729832aa5e2667ac73b8  gcc/ipa-fnsummary.cc
*************** a4332875948bce6b2c7fe2ddc85c9319  gcc/ip
*** 6704,6710 ****
  80b4cc7719c703dfe60955dfb86002ae  gcc/ipa-predicate.cc
  a25a62951e49120c7882ca20d2486581  gcc/ipa-predicate.h
  7e00759eeb8f2ddaa2f77da1db8adf24  gcc/ipa-profile.cc
! 1639296cba757f006f959f70c1ad35c7  gcc/ipa-prop.cc
  9b0c97913300d98c3ec78027b0857fae  gcc/ipa-prop.h
  14aace4627625a58b2f0a8aec7cd94f5  gcc/ipa-pure-const.cc
  f2d87c9921ca158119d238ee8d50abb6  gcc/ipa-ref.cc
--- 6704,6710 ----
  80b4cc7719c703dfe60955dfb86002ae  gcc/ipa-predicate.cc
  a25a62951e49120c7882ca20d2486581  gcc/ipa-predicate.h
  7e00759eeb8f2ddaa2f77da1db8adf24  gcc/ipa-profile.cc
! 70fb317f493a229644ed546dd47f0348  gcc/ipa-prop.cc
  9b0c97913300d98c3ec78027b0857fae  gcc/ipa-prop.h
  14aace4627625a58b2f0a8aec7cd94f5  gcc/ipa-pure-const.cc
  f2d87c9921ca158119d238ee8d50abb6  gcc/ipa-ref.cc
*************** b9fd89128c41f729b94b931067f8a18e  gcc/ir
*** 6730,6736 ****
  788d1861bee2322ed419d2c51e2f738e  gcc/ira.h
  9542ea2b8797fa5a935893fafae08ef3  gcc/is-a.h
  090239f8ee6f441be82d0c8cbeaa00de  gcc/iterator-utils.h
! aa6d5c63abf239c14ed3b254eb03f17e  gcc/jit/ChangeLog
  6071bdf04fb356c5ac99a99ec00c9a12  gcc/jit/ChangeLog.jit
  7228cd4eb7d36930c98343aa4d8186bb  gcc/jit/Make-lang.in
  f59cfd8b37a6dc29fc4889af89fcbec5  gcc/jit/TODO.rst
--- 6730,6736 ----
  788d1861bee2322ed419d2c51e2f738e  gcc/ira.h
  9542ea2b8797fa5a935893fafae08ef3  gcc/is-a.h
  090239f8ee6f441be82d0c8cbeaa00de  gcc/iterator-utils.h
! d6159f95cff2f920c31dd1df1da520a8  gcc/jit/ChangeLog
  6071bdf04fb356c5ac99a99ec00c9a12  gcc/jit/ChangeLog.jit
  7228cd4eb7d36930c98343aa4d8186bb  gcc/jit/Make-lang.in
  f59cfd8b37a6dc29fc4889af89fcbec5  gcc/jit/TODO.rst
*************** a5bfb674b6349229a3e5101c00c746ec  gcc/ji
*** 6783,6789 ****
  a715b5bfc0dc5899735d2ab4b8cf81a0  gcc/jit/docs/intro/tutorial04.rst
  701b132b6c9d27bdaf978c2614729041  gcc/jit/docs/intro/tutorial05.rst
  9ed69e3498858f6108906526c30ecee0  gcc/jit/docs/topics/asm.rst
! 2ac45448d0a458bae6e39faaec49785c  gcc/jit/docs/topics/compatibility.rst
  d30a79357cf7309b8e043c0336e190e4  gcc/jit/docs/topics/compilation.rst
  6b806e355b7724368b642acde3fd71f9  gcc/jit/docs/topics/contexts.rst
  5b524b918afaef8400ed74b72c23d026  gcc/jit/docs/topics/expressions.rst
--- 6783,6789 ----
  a715b5bfc0dc5899735d2ab4b8cf81a0  gcc/jit/docs/intro/tutorial04.rst
  701b132b6c9d27bdaf978c2614729041  gcc/jit/docs/intro/tutorial05.rst
  9ed69e3498858f6108906526c30ecee0  gcc/jit/docs/topics/asm.rst
! dce91a751023384af25fe2aedc1bc4bf  gcc/jit/docs/topics/compatibility.rst
  d30a79357cf7309b8e043c0336e190e4  gcc/jit/docs/topics/compilation.rst
  6b806e355b7724368b642acde3fd71f9  gcc/jit/docs/topics/contexts.rst
  5b524b918afaef8400ed74b72c23d026  gcc/jit/docs/topics/expressions.rst
*************** f836752d7153397c795e77dd91fcd605  gcc/ji
*** 6793,6800 ****
  20ffcdce82faff9562f8b4ab3c1db72d  gcc/jit/docs/topics/locations.rst
  dd3e557741686b66ca1167a20b54c8c4  gcc/jit/docs/topics/objects.rst
  3a786edd0f536917d48bb12ffaf61510  gcc/jit/docs/topics/performance.rst
! d8542f3f1c42a9fbfb0b720f0426fca1  gcc/jit/docs/topics/types.rst
! 35e3b2007081d7c76c5a3d771d4804a2  gcc/jit/dummy-frontend.cc
  3f2f71f74bbf4cee9c4b3fec16511821  gcc/jit/jit-builtins.cc
  f61f8d4d404f4ad8eb63bd8d2b20364b  gcc/jit/jit-builtins.h
  a62ea7fafe6471c52e3565175e67cf1e  gcc/jit/jit-common.h
--- 6793,6800 ----
  20ffcdce82faff9562f8b4ab3c1db72d  gcc/jit/docs/topics/locations.rst
  dd3e557741686b66ca1167a20b54c8c4  gcc/jit/docs/topics/objects.rst
  3a786edd0f536917d48bb12ffaf61510  gcc/jit/docs/topics/performance.rst
! 58e4b05e87db07c9831f92ffebcdf1c6  gcc/jit/docs/topics/types.rst
! 1fe38872812761200f989966fb706888  gcc/jit/dummy-frontend.cc
  3f2f71f74bbf4cee9c4b3fec16511821  gcc/jit/jit-builtins.cc
  f61f8d4d404f4ad8eb63bd8d2b20364b  gcc/jit/jit-builtins.h
  a62ea7fafe6471c52e3565175e67cf1e  gcc/jit/jit-common.h
*************** a62ea7fafe6471c52e3565175e67cf1e  gcc/ji
*** 6804,6810 ****
  979aba710b4513eb5c504c0109439623  gcc/jit/jit-playback.cc
  564278cb55710a40327feb824b49fb05  gcc/jit/jit-playback.h
  5ea379d9518786cdee67530fa3e4d9d6  gcc/jit/jit-recording.cc
! 4e30f5252891a0889cbd356188dab74b  gcc/jit/jit-recording.h
  0da592417dce91260cf30637da2c8a9a  gcc/jit/jit-result.cc
  74832bb1d0d115c99f86460a4575af73  gcc/jit/jit-result.h
  1433c3af63429eaf495e023075e44f02  gcc/jit/jit-spec.cc
--- 6804,6810 ----
  979aba710b4513eb5c504c0109439623  gcc/jit/jit-playback.cc
  564278cb55710a40327feb824b49fb05  gcc/jit/jit-playback.h
  5ea379d9518786cdee67530fa3e4d9d6  gcc/jit/jit-recording.cc
! 98c7f3d24216c2ce37e8641ccaaad15c  gcc/jit/jit-recording.h
  0da592417dce91260cf30637da2c8a9a  gcc/jit/jit-result.cc
  74832bb1d0d115c99f86460a4575af73  gcc/jit/jit-result.h
  1433c3af63429eaf495e023075e44f02  gcc/jit/jit-spec.cc
*************** bd3ed120f383a7c313a644defb0f5e85  gcc/ji
*** 6817,6826 ****
  06738451a256364b1635493756c9e63a  gcc/jit/jit-w32.cc
  dbe1c7cd9b6c2144785270d7d92b6d0a  gcc/jit/jit-w32.h
  356d828dc1d398757c009123394406c5  gcc/jit/libgccjit++.h
! 8ccc8b475c30ec463554a2a728081c13  gcc/jit/libgccjit.cc
! e4ece7cdc20696f99063180449232226  gcc/jit/libgccjit.exports
! 2b777b59e6eefa68b7ab578a140b89c0  gcc/jit/libgccjit.h
! 2231affe16b9511efa0fd9f7c8acc0ea  gcc/jit/libgccjit.map
  a683bef6f6721b574c76acc1efb5050c  gcc/jit/notes.txt
  d572540923b7254057dfb4b188fd1f5b  gcc/json-diagnostic.cc
  e0e5a496fd0a5916ecac553777ce07e4  gcc/json-diagnostic.h
--- 6817,6826 ----
  06738451a256364b1635493756c9e63a  gcc/jit/jit-w32.cc
  dbe1c7cd9b6c2144785270d7d92b6d0a  gcc/jit/jit-w32.h
  356d828dc1d398757c009123394406c5  gcc/jit/libgccjit++.h
! cef2d191c56e7c4362a6b5c9801a4556  gcc/jit/libgccjit.cc
! 9862f91343f25efbe0942195ed16b6f9  gcc/jit/libgccjit.exports
! d04aa0882974c869581cea83534f9b8f  gcc/jit/libgccjit.h
! 0cb80c9c3d024eddbabe397c4609a62b  gcc/jit/libgccjit.map
  a683bef6f6721b574c76acc1efb5050c  gcc/jit/notes.txt
  d572540923b7254057dfb4b188fd1f5b  gcc/json-diagnostic.cc
  e0e5a496fd0a5916ecac553777ce07e4  gcc/json-diagnostic.h
*************** a817f4a755c45e74106eccb676e0d5ab  gcc/lt
*** 6879,6886 ****
  83a38b1ef3670762d9336c0229c75127  gcc/lto-section-in.cc
  194f259575b70213773e1c8c0f8fcb5b  gcc/lto-section-names.h
  fa334f7be97c3e817d1992afa3d08ab9  gcc/lto-section-out.cc
! 4aa47048a12e0400a858dd6cf7a426b7  gcc/lto-streamer-in.cc
! 12db435d252d97ba57953664b1867063  gcc/lto-streamer-out.cc
  6c99c98c397a53a6a56da792d20092b0  gcc/lto-streamer.cc
  0fb9ed18ca0ba35bcf8d8a6fb2f5993d  gcc/lto-streamer.h
  7702efeef37dcb3b58fa693b40f46542  gcc/lto-wrapper.cc
--- 6879,6886 ----
  83a38b1ef3670762d9336c0229c75127  gcc/lto-section-in.cc
  194f259575b70213773e1c8c0f8fcb5b  gcc/lto-section-names.h
  fa334f7be97c3e817d1992afa3d08ab9  gcc/lto-section-out.cc
! d2e3dda71f1d4a248076a6d267924b9a  gcc/lto-streamer-in.cc
! 730bab590b01f7000cb672be1585fafd  gcc/lto-streamer-out.cc
  6c99c98c397a53a6a56da792d20092b0  gcc/lto-streamer.cc
  0fb9ed18ca0ba35bcf8d8a6fb2f5993d  gcc/lto-streamer.h
  7702efeef37dcb3b58fa693b40f46542  gcc/lto-wrapper.cc
*************** f9608e9005487c369e6c38949ab36fa1  gcc/m2
*** 7884,7890 ****
  89d79df4a8d2185bb8557998f075e087  gcc/machmode.h
  197298337dae14fdd7ab928a1f03bec6  gcc/main.cc
  21fa6a9b1a8a8dd382a659c9f3abe151  gcc/match-sat-alu.pd
! 19194a6d199456a096eb4b97b5484b8b  gcc/match.pd
  b106a08a1793a5495dd87c412456484b  gcc/mcf.cc
  897c541ca992e145ad451c98941c7647  gcc/mem-stats-traits.h
  14700e76d554c9699481337fa9886be6  gcc/mem-stats.h
--- 7884,7890 ----
  89d79df4a8d2185bb8557998f075e087  gcc/machmode.h
  197298337dae14fdd7ab928a1f03bec6  gcc/main.cc
  21fa6a9b1a8a8dd382a659c9f3abe151  gcc/match-sat-alu.pd
! 6214ace42cd0abc002f242b381a936e7  gcc/match.pd
  b106a08a1793a5495dd87c412456484b  gcc/mcf.cc
  897c541ca992e145ad451c98941c7647  gcc/mem-stats-traits.h
  14700e76d554c9699481337fa9886be6  gcc/mem-stats.h
*************** b106a08a1793a5495dd87c412456484b  gcc/mc
*** 7897,7909 ****
  b651f65860de6833efe242939d7edf33  gcc/modulo-sched.cc
  ab360f5772fb7a87b6119cf198a8246f  gcc/multiple_target.cc
  f98f5be75203b0e833e7bcf563eecf14  gcc/mux-utils.h
! a23e7e9366339e50140d0a9cca0d3866  gcc/objc/ChangeLog
  e00206160b117e3384f6e554cb06b174  gcc/objc/Make-lang.in
  f3dbb06248bf04272bf34751540a8844  gcc/objc/config-lang.in
  296b176173a1ff046cbb5bb721d9f576  gcc/objc/lang-specs.h
! 3825c2f27078a9f177d90718ff68a454  gcc/objc/objc-act.cc
  485833e401f6b31ddb9d19733e245cff  gcc/objc/objc-act.h
! 2016784e712e4790f47a560e52267c52  gcc/objc/objc-encoding.cc
  638ad042ad5712a6da28ea792d9e1853  gcc/objc/objc-encoding.h
  5592fb91591ac18459f377d882097ac2  gcc/objc/objc-gnu-runtime-abi-01.cc
  451fcdf975303c6769b13a34755053ad  gcc/objc/objc-lang.cc
--- 7897,7909 ----
  b651f65860de6833efe242939d7edf33  gcc/modulo-sched.cc
  ab360f5772fb7a87b6119cf198a8246f  gcc/multiple_target.cc
  f98f5be75203b0e833e7bcf563eecf14  gcc/mux-utils.h
! 9a434f95c594c20c3bedb571f100adda  gcc/objc/ChangeLog
  e00206160b117e3384f6e554cb06b174  gcc/objc/Make-lang.in
  f3dbb06248bf04272bf34751540a8844  gcc/objc/config-lang.in
  296b176173a1ff046cbb5bb721d9f576  gcc/objc/lang-specs.h
! ba64c07a510dfabface1184a0edaec64  gcc/objc/objc-act.cc
  485833e401f6b31ddb9d19733e245cff  gcc/objc/objc-act.h
! 5d0297127b71a7cb1df633c4778aa711  gcc/objc/objc-encoding.cc
  638ad042ad5712a6da28ea792d9e1853  gcc/objc/objc-encoding.h
  5592fb91591ac18459f377d882097ac2  gcc/objc/objc-gnu-runtime-abi-01.cc
  451fcdf975303c6769b13a34755053ad  gcc/objc/objc-lang.cc
*************** bea702966301b6b7e6294ef33ec8b443  gcc/pt
*** 8046,8052 ****
  f72a1e84c9facd65dc1c42ee67f21583  gcc/pub-sub.h
  baab0c2ad805d6d5d47b409b65c38351  gcc/range-op-float.cc
  ec6248ff9582260bb420197fc3bd33ab  gcc/range-op-mixed.h
! 69b841901021a7600a6c55aa08c8a6ab  gcc/range-op-ptr.cc
  b2f0028bcee9d79b936b6ab804e1c2ce  gcc/range-op.cc
  52c9ff8b4fcf2afdee9b9f331411b42e  gcc/range-op.h
  5224210104d440bc7bae81953ca2e7f1  gcc/range.cc
--- 8046,8052 ----
  f72a1e84c9facd65dc1c42ee67f21583  gcc/pub-sub.h
  baab0c2ad805d6d5d47b409b65c38351  gcc/range-op-float.cc
  ec6248ff9582260bb420197fc3bd33ab  gcc/range-op-mixed.h
! 9a57b405d17fbd04825aaddc4037376b  gcc/range-op-ptr.cc
  b2f0028bcee9d79b936b6ab804e1c2ce  gcc/range-op.cc
  52c9ff8b4fcf2afdee9b9f331411b42e  gcc/range-op.h
  5224210104d440bc7bae81953ca2e7f1  gcc/range.cc
*************** da5c82758bbb99130aa6287f7a6c1342  gcc/sc
*** 8658,8664 ****
  ebd9e973e52eba392362d3f86683d9fc  gcc/sel-sched-dump.cc
  3b84f3b6b449c883935ef347892e770c  gcc/sel-sched-dump.h
  14833ad25c22e7c51f5cb3c7b81f5d8f  gcc/sel-sched-ir.cc
! 72bbd36ab41f757ab772dc8c2c422836  gcc/sel-sched-ir.h
  cd57f647cf61d024543d4929a0ee9cdc  gcc/sel-sched.cc
  c8e14bcadd8fd37034a186ff2eed497c  gcc/sel-sched.h
  75125554eb32a562c567b40b674dceab  gcc/selftest-json.cc
--- 8658,8664 ----
  ebd9e973e52eba392362d3f86683d9fc  gcc/sel-sched-dump.cc
  3b84f3b6b449c883935ef347892e770c  gcc/sel-sched-dump.h
  14833ad25c22e7c51f5cb3c7b81f5d8f  gcc/sel-sched-ir.cc
! a12c4cbc5c590de0527d05f6da945df1  gcc/sel-sched-ir.h
  cd57f647cf61d024543d4929a0ee9cdc  gcc/sel-sched.cc
  c8e14bcadd8fd37034a186ff2eed497c  gcc/sel-sched.h
  75125554eb32a562c567b40b674dceab  gcc/selftest-json.cc
*************** fe7cc01d7dd25103bc61ab1a33dd54dc  gcc/ta
*** 8728,8738 ****
  5f6f168a092c141ef64501f44439df42  gcc/target-hooks-macros.h
  f24751f278bee1ac8dc861467d9f96a3  gcc/target-insns.def
  5fc83e2b266e1717268d6aca5c3983d3  gcc/target.def
! 9ca827d4a70bd09cb862e2583cb8500a  gcc/target.h
! 0cb420c86a7940020245f05da6f194fa  gcc/targhooks.cc
  b1068b0d3d77d5a55802a29a9f8a08d7  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! 55024bc8eef68f3ed11ebb6dba2fd165  gcc/testsuite/ChangeLog
  47e8e29b649ead73b8a1e4797da470ed  gcc/testsuite/ChangeLog-1993-2007
  35198a9e4fd31b935de8789faabf3351  gcc/testsuite/ChangeLog-2008
  0f19934540750356d1b91595cebfd9a8  gcc/testsuite/ChangeLog-2009
--- 8728,8738 ----
  5f6f168a092c141ef64501f44439df42  gcc/target-hooks-macros.h
  f24751f278bee1ac8dc861467d9f96a3  gcc/target-insns.def
  5fc83e2b266e1717268d6aca5c3983d3  gcc/target.def
! 4685fe9ae3053826ebb0e8a51092bb53  gcc/target.h
! e957b925f8c93e5ed31ef45f3d17d839  gcc/targhooks.cc
  b1068b0d3d77d5a55802a29a9f8a08d7  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! f3ff11099e36902a004501ee05bfface  gcc/testsuite/ChangeLog
  47e8e29b649ead73b8a1e4797da470ed  gcc/testsuite/ChangeLog-1993-2007
  35198a9e4fd31b935de8789faabf3351  gcc/testsuite/ChangeLog-2008
  0f19934540750356d1b91595cebfd9a8  gcc/testsuite/ChangeLog-2009
*************** ac3aed0ffb0459584e0d54861ead9da9  gcc/te
*** 17533,17538 ****
--- 17533,17539 ----
  1d06ebf7fbc01a467cfa1d3b4554cdd4  gcc/testsuite/algol68/execute/modules/module24.a68
  fb5d787363242153b6d326012dd39d7f  gcc/testsuite/algol68/execute/modules/module25a.a68
  f6c69601589675dd714d44f63d98560f  gcc/testsuite/algol68/execute/modules/module25b.a68
+ 9f7da13aa39a2f34aa95348c4fcfd8dc  gcc/testsuite/algol68/execute/modules/module26.a68
  9e0733a763fc93bd2c58a8ffca51301f  gcc/testsuite/algol68/execute/modules/module3.a68
  1225a4492a80b08cd38a8c74e25a7ab0  gcc/testsuite/algol68/execute/modules/module4.a68
  4ceb6b4c31b8b4abc32b8c6a92979888  gcc/testsuite/algol68/execute/modules/module5.a68
*************** a4cbfef7dd02cb406d5a8801cf55df5c  gcc/te
*** 17556,17561 ****
--- 17557,17563 ----
  43d51a35de25739abd7cf9304c134f34  gcc/testsuite/algol68/execute/modules/program-23.a68
  299c649a8c487402e3ec8d3ada8bdf8a  gcc/testsuite/algol68/execute/modules/program-24.a68
  c46ca2f86ebc5b629411801c164017bc  gcc/testsuite/algol68/execute/modules/program-25.a68
+ 1eadee51d6eaa2a6b3f5b16179d5d637  gcc/testsuite/algol68/execute/modules/program-26.a68
  b8f47f3c2df580248368a5c298a1b812  gcc/testsuite/algol68/execute/modules/program-3.a68
  7d433464d7d562ce9bd71eea28f40c03  gcc/testsuite/algol68/execute/modules/program-4.a68
  a00ad027485af688f31ddcf5b822ad9e  gcc/testsuite/algol68/execute/modules/program-5.a68
*************** d05ac6fedd74d96b8e1466d0110a8fdb  gcc/te
*** 21256,21267 ****
  9e254bdae56a5c8d106f6559999ae973  gcc/testsuite/cobol.dg/group1/simple-classes.cob
  0cc60851f56f7ed82c6a307ff07078c5  gcc/testsuite/cobol.dg/group1/simple-if.cob
  352864656e5132dd6192fdb77af9987a  gcc/testsuite/cobol.dg/group1/simple-perform.cob
- 03d9e0410a78ac1572fca647e641b070  gcc/testsuite/cobol.dg/group2/258_Nested_PERFORM.cob
- 1ab98bfe6cbef69dac2f301c94c9c93b  gcc/testsuite/cobol.dg/group2/258_Nested_PERFORM.out
- 26c1ac1d56c360477adc8efe577f1a5e  gcc/testsuite/cobol.dg/group2/259_PERFORM_VARYING_BY_-0.2.cob
- 79adac8c671790504a142ab2392cf927  gcc/testsuite/cobol.dg/group2/259_PERFORM_VARYING_BY_-0.2.out
- 291db84fb7e37ae587f8903785b25b1d  gcc/testsuite/cobol.dg/group2/338_Default_Arithmetic__1_.cob
- 2901c188067e745960930ae0bfdd4749  gcc/testsuite/cobol.dg/group2/338_Default_Arithmetic__1_.out
  f663b8c41900c43f8fb7a7d955d202c1  gcc/testsuite/cobol.dg/group2/37-digit_Initialization_of_fundamental_types.cob
  02bd2c24bf4d1dce298950f7b67c5344  gcc/testsuite/cobol.dg/group2/37-digit_Initialization_of_fundamental_types.out
  0c8262ef265dd1714f65d56d9efd8a4d  gcc/testsuite/cobol.dg/group2/88_level_with_FALSE_IS_clause.cob
--- 21258,21263 ----
*************** f7e4a3f2c5c85ddeb645aecc5792a186  gcc/te
*** 21385,21392 ****
  770e7f54918037f396938dcd095f8cf0  gcc/testsuite/cobol.dg/group2/Complex_EVALUATE__1_.out
  4ceb6523fae1934daa01b428e6d5b854  gcc/testsuite/cobol.dg/group2/Complex_EVALUATE__2_.cob
  33011658a399a6a9be5c37899eb4a306  gcc/testsuite/cobol.dg/group2/Complex_EVALUATE__2_.out
- 26032dd568fd1bfb10fc1b817396c802  gcc/testsuite/cobol.dg/group2/Complex_HEX__VALUE_and_MOVE.cob
- 7d1e4c4461dc538a7b081cd9ab9a781f  gcc/testsuite/cobol.dg/group2/Complex_HEX__VALUE_and_MOVE.out
  4885ad79dbcacea5aefc7b3c06a2e6a6  gcc/testsuite/cobol.dg/group2/Complex_HEX__VALUE_and_MOVE_-_ASCII_EBCDIC.cob
  bc9c3feaf3b8988ac971cb14aa62f9b4  gcc/testsuite/cobol.dg/group2/Complex_HEX__VALUE_and_MOVE_-_ASCII_EBCDIC.out
  6312604cdb1d5dce073186bdfd23ba0e  gcc/testsuite/cobol.dg/group2/Complex_HEX__VALUE_and_MOVE_-_UTF-16.cob
--- 21381,21386 ----
*************** e2d60c2db69ee22b6355d1e4f14b8a0f  gcc/te
*** 21444,21449 ****
--- 21438,21447 ----
  b6823d7dc09b85613f18938c657a010b  gcc/testsuite/cobol.dg/group2/DISPLAY_data_items_with_VALUE_clause.out
  c69954f56fcc483a81f9930ef5a010cc  gcc/testsuite/cobol.dg/group2/DISPLAY_literals__DECIMAL-POINT_is_COMMA.cob
  e1a5fc78e52a4348f53e9fcdcc6b849c  gcc/testsuite/cobol.dg/group2/DISPLAY_literals__DECIMAL-POINT_is_COMMA.out
+ 6f499a2f2e26dcb96cd3af34bfd134bd  gcc/testsuite/cobol.dg/group2/DIVIDE_binary-long_giving_remainder.cob
+ 656fb0b40dd02a16aae92b7518525a0d  gcc/testsuite/cobol.dg/group2/DIVIDE_binary-long_giving_remainder.out
+ 02d7d34ddc239ffea41af97d27d50785  gcc/testsuite/cobol.dg/group2/DIVIDE_numeric-display_giving_remainder.cob
+ 19a9d8d34878b16d09e509159ed751ec  gcc/testsuite/cobol.dg/group2/DIVIDE_numeric-display_giving_remainder.out
  a69b1d0d2c26ec9b018daf2998a7c4ba  gcc/testsuite/cobol.dg/group2/Default_Arithmetic__1_.cob
  2901c188067e745960930ae0bfdd4749  gcc/testsuite/cobol.dg/group2/Default_Arithmetic__1_.out
  9231024e09658f2c0b51c5863c9ff925  gcc/testsuite/cobol.dg/group2/Dynamic_reference_modification.cob
*************** cb3238068a66d1f1c4cf17dd75986fb7  gcc/te
*** 21647,21652 ****
--- 21645,21651 ----
  600f921cc49529f53c6714636fca2d19  gcc/testsuite/cobol.dg/group2/Fundamental_INSPECT_REPLACING.out
  77573e563a59f974731c8ddc35d7d1c6  gcc/testsuite/cobol.dg/group2/Fundamental_INSPECT_TALLYING.cob
  95455fd6c15aeba095d0f72ffc9376ef  gcc/testsuite/cobol.dg/group2/Fundamental_INSPECT_TALLYING.out
+ 225022165fdbcbe06b526ec6382738cc  gcc/testsuite/cobol.dg/group2/GCC_125616_RT3601_-_IBM_incorrect_DISPLAY_of_COMP-1_COMP-2_float.cob
  63ff422fa3042c8264e56b8bcb428dbc  gcc/testsuite/cobol.dg/group2/GLOBAL_FD__1_.cob
  95a7930c3a2d5a078ebb8e25a2a7694a  gcc/testsuite/cobol.dg/group2/GLOBAL_FD__2_.cob
  ed915c803fb3c38dcccb14bab74114d6  gcc/testsuite/cobol.dg/group2/GLOBAL_FD__3_.cob
*************** a232de1aac78a4e371769072e88acf40  gcc/te
*** 21725,21731 ****
  8978ba5d8b437c9717d7d721469acf1f  gcc/testsuite/cobol.dg/group2/Intrinsic_Function_DATE-YYYYMMDD.cob
  e4271dee35678c55c71bb9b9d80e87f8  gcc/testsuite/cobol.dg/group2/Intrinsic_Function_NUMVAL.cob
  1614a8c0648aca494c3ad94c63c244dd  gcc/testsuite/cobol.dg/group2/Intrinsic_Function_NUMVAL.out
- 21310f898eb7367c6b0b6e944a94b53d  gcc/testsuite/cobol.dg/group2/Intrinsics_without_FUNCTION_keyword__2_.cob
  21310f898eb7367c6b0b6e944a94b53d  gcc/testsuite/cobol.dg/group2/Intrinsics_without_FUNCTION_keyword__3_.cob
  f750c5313f8839990ad8464f01bac4c8  gcc/testsuite/cobol.dg/group2/LENGTH_OF_omnibus.cob
  9205da278ccf673e088502edc93ae569  gcc/testsuite/cobol.dg/group2/LENGTH_OF_omnibus.out
--- 21724,21729 ----
*************** d36f8f9425c4a8000ad9c4a97185aca5  gcc/te
*** 21758,21765 ****
  5ebd149ed7f04a25c51fa7d8de980d8c  gcc/testsuite/cobol.dg/group2/MOVE_indexes.cob
  97c01b68b11637098435c3a02e14bd02  gcc/testsuite/cobol.dg/group2/MOVE_integer_literal_to_alphanumeric.cob
  1e6c9ca775f50b1b92cdcb94da587ce1  gcc/testsuite/cobol.dg/group2/MOVE_integer_literal_to_alphanumeric.out
- b769d75207f79ebe3eb2563bb30dd3af  gcc/testsuite/cobol.dg/group2/MOVE_to_JUSTIFIED_item.cob
- 30919e1201a8434fdc9703fe9f44220e  gcc/testsuite/cobol.dg/group2/MOVE_to_JUSTIFIED_item.out
  ac0e6b18c807d4dc1e07b6501c8efc35  gcc/testsuite/cobol.dg/group2/MOVE_to_JUSTIFIED_items.cob
  0e11b94aaaa639c09162e4f6a884172f  gcc/testsuite/cobol.dg/group2/MOVE_to_JUSTIFIED_items.out
  76e9e3faeedd3093f630747e1e553d7e  gcc/testsuite/cobol.dg/group2/MOVE_to_edited_item__1_.cob
--- 21756,21761 ----
*************** f447900f3d80fb422f0e33541a0a216c  gcc/te
*** 21839,21844 ****
--- 21835,21841 ----
  a3a031c83f7e6f75afedffdeac38a3ee  gcc/testsuite/cobol.dg/group2/PIC_ZZZ-__ZZZ_.cob
  f81e4d1631666dc73cab672753a19f96  gcc/testsuite/cobol.dg/group2/POINTER__display.cob
  1a03d00f7a2dbbf286fe10017695b9e0  gcc/testsuite/cobol.dg/group2/POINTER__display.out
+ b39809d1c9370158865c2c0b5beb66d1  gcc/testsuite/cobol.dg/group2/PR39_RT3573_-_Parser_issue_w_concat._source_lines.cob
  9ed4dcbed0b57b655196739e4413e78a  gcc/testsuite/cobol.dg/group2/Preserve_collation_past_a_CALL.cob
  d2af8b51d78e3dbc2989b52264f76455  gcc/testsuite/cobol.dg/group2/Preserve_collation_past_a_CALL.out
  b998cc667e7bffb26d211ded81f2ea9a  gcc/testsuite/cobol.dg/group2/Program-to-program_parameters_and_retvals.cob
*************** ed5c320db3471d6e1070b74811413e2f  gcc/te
*** 21890,21897 ****
  551208604a39f8c738cb04d9f3974c15  gcc/testsuite/cobol.dg/group2/SORT__EBCDIC_table_sort__1_.cob
  5bf43d6c0e0a558aadbd49c154ddb2c2  gcc/testsuite/cobol.dg/group2/SORT__EBCDIC_table_sort__2_.cob
  67b7a6e377e56135eafa5ca5bee77713  gcc/testsuite/cobol.dg/group2/SORT__table_sort.cob
- 79c7d1cb85a494559fd0b684a57f9610  gcc/testsuite/cobol.dg/group2/SORT__table_sort__2_.cob
- 4c0be3d6a1647497be537a28be82aeff  gcc/testsuite/cobol.dg/group2/SORT__table_sort__2_.out
  854bc42a35ba8362ff2154a883ac0bae  gcc/testsuite/cobol.dg/group2/SORT__table_sort__2___ASCII_.cob
  3f29d9c1822ef4bc677614531eb26a08  gcc/testsuite/cobol.dg/group2/SORT__table_sort__2___ASCII_.out
  dc1472ddb4d47ed7333b131d4c324d4a  gcc/testsuite/cobol.dg/group2/SORT__table_sort__2___EBCDIC_.cob
--- 21887,21892 ----
*************** b420dc948722a4b2fc490a3babd17b7f  gcc/te
*** 21981,21987 ****
  6f257ad2abd428c7909f8ea323ccc168  gcc/testsuite/cobol.dg/group2/USING_Signed___NumericDisplay_BY_REFERENCE.out
  3153d2ffae3ff3b87ed8cadff567a8f5  gcc/testsuite/cobol.dg/group2/USING_Signed___NumericDisplay_BY_VALUE.cob
  6f257ad2abd428c7909f8ea323ccc168  gcc/testsuite/cobol.dg/group2/USING_Signed___NumericDisplay_BY_VALUE.out
- 8b384b3032fcac908a2fdc502dc156e8  gcc/testsuite/cobol.dg/group2/_-static__compilation.cob
  c324304c1c3854281aa227b869f73dbe  gcc/testsuite/cobol.dg/group2/access_to_OPTIONAL_LINKAGE_item_not_passed.cob
  e54e577d8de75b710938fa62794487fc  gcc/testsuite/cobol.dg/group2/access_to_OPTIONAL_LINKAGE_item_not_passed.out
  a5c9edf3aa903ad25bbe5266e1a161f3  gcc/testsuite/cobol.dg/group2/add_-1_to_negative_pic_S9999.cob
--- 21976,21981 ----
*************** f75f41e0c1359b56dd9a9190d3b7dbfc  gcc/te
*** 24709,24714 ****
--- 24703,24709 ----
  013461f339aafa92beaf749d69a672d1  gcc/testsuite/g++.dg/cpp0x/error8.C
  fd7ae1b35a49011d276e428736f4f11a  gcc/testsuite/g++.dg/cpp0x/error9.C
  04d26b3451de750c55737c07deb1b299  gcc/testsuite/g++.dg/cpp0x/explicit-inst1.C
+ 33b70d68db77ce7a66c85a94e74e9396  gcc/testsuite/g++.dg/cpp0x/explicit-inst2.C
  4832f2785046f753a4492ac893cbed61  gcc/testsuite/g++.dg/cpp0x/explicit1.C
  4dd1f6fb02b660c2afd73b2484741309  gcc/testsuite/g++.dg/cpp0x/explicit10.C
  3f2e186bcfdd6a4b2ef37c198e9d0592  gcc/testsuite/g++.dg/cpp0x/explicit11.C
*************** c22e1405c91d95d32ec012cae1f23ccc  gcc/te
*** 27416,27421 ****
--- 27411,27417 ----
  358ebedc9ef10722682a7bf350590dc2  gcc/testsuite/g++.dg/cpp1y/var-templ86.C
  2555b4c1ccdec6b7fca5b625f06840d3  gcc/testsuite/g++.dg/cpp1y/var-templ87.C
  6066c7bcfa1174f7783c52343cc9ad88  gcc/testsuite/g++.dg/cpp1y/var-templ88.C
+ f6e1fa73cb06627ba5d6b6645c0aab8a  gcc/testsuite/g++.dg/cpp1y/var-templ89.C
  c62c3c5ce4dabfb077ffd26896b1d204  gcc/testsuite/g++.dg/cpp1y/var-templ9.C
  f4cda3c2b66e752d0ad295596f517698  gcc/testsuite/g++.dg/cpp1y/var-templ90.C
  b6e6929ceb8f1f56fbd8782c837e9a5d  gcc/testsuite/g++.dg/cpp1y/var-templ91.C
*************** d69dac44671433f94358ee77163aef3c  gcc/te
*** 28353,28359 ****
  33afee43a2089a3e2bccd50e52d8faa6  gcc/testsuite/g++.dg/cpp26/constexpr-voidptr2.C
  6a32febab2200bb5e0fe63b6825c4e86  gcc/testsuite/g++.dg/cpp26/constexpr-voidptr3.C
  168d651e6bc6e15b97b816ebe762fd50  gcc/testsuite/g++.dg/cpp26/constexpr-voidptr4.C
! 54cc8d4706b3ab357055a709b5800258  gcc/testsuite/g++.dg/cpp26/cplusplus.C
  e6cd912bf923af3add3056c0b7235bab  gcc/testsuite/g++.dg/cpp26/decomp1.C
  6404fe1c41bc0435baaae5bf82009d36  gcc/testsuite/g++.dg/cpp26/decomp10.C
  0c6fcbc76ec6471803e93062f104892d  gcc/testsuite/g++.dg/cpp26/decomp11.C
--- 28349,28355 ----
  33afee43a2089a3e2bccd50e52d8faa6  gcc/testsuite/g++.dg/cpp26/constexpr-voidptr2.C
  6a32febab2200bb5e0fe63b6825c4e86  gcc/testsuite/g++.dg/cpp26/constexpr-voidptr3.C
  168d651e6bc6e15b97b816ebe762fd50  gcc/testsuite/g++.dg/cpp26/constexpr-voidptr4.C
! 20188ede023577bd2073b9615fb82cbe  gcc/testsuite/g++.dg/cpp26/cplusplus.C
  e6cd912bf923af3add3056c0b7235bab  gcc/testsuite/g++.dg/cpp26/decomp1.C
  6404fe1c41bc0435baaae5bf82009d36  gcc/testsuite/g++.dg/cpp26/decomp10.C
  0c6fcbc76ec6471803e93062f104892d  gcc/testsuite/g++.dg/cpp26/decomp11.C
*************** a3a8cba4fbee69e46ecf1bdb30c7d924  gcc/te
*** 28508,28513 ****
--- 28504,28511 ----
  5d383c46973350353b641060d830143f  gcc/testsuite/g++.dg/cpp26/variadic-comma4.C
  4fe3609f7385a1f131df362a10ee6065  gcc/testsuite/g++.dg/cpp26/variadic-comma5.C
  6ca56d56bbd9d4ac1e7cb5313516359b  gcc/testsuite/g++.dg/cpp26/variadic-friend1.C
+ bfd759702f3238655df26d94d570e2d2  gcc/testsuite/g++.dg/cpp29/cplusplus.C
+ 5f9461fbe9c24ae7cce25be680e7df13  gcc/testsuite/g++.dg/cpp29/feat-cxx29.C
  5bcb9d1194a35cf17a1a88005e7f5d01  gcc/testsuite/g++.dg/cpp2a/abbrev-fn1.C
  87d838f5781e95bc5519bc5cd029cd32  gcc/testsuite/g++.dg/cpp2a/abbrev-fn2.C
  2e791b293e77eea479b4f027aa624fcc  gcc/testsuite/g++.dg/cpp2a/abbrev-fn3.C
*************** d948ecca981f7c5de5ca48afc987ea36  gcc/te
*** 29480,29485 ****
--- 29478,29485 ----
  4e6a215ff567bf546d078f515d121c5b  gcc/testsuite/g++.dg/cpp2a/lambda-targ30.C
  388ca9dad4e8d5b2f29cb73ce9bbe716  gcc/testsuite/g++.dg/cpp2a/lambda-targ31.C
  84fae08cf9d05718e23ce6dc12c16360  gcc/testsuite/g++.dg/cpp2a/lambda-targ32.C
+ 8897fc1f192d0bf595cbfac633150e95  gcc/testsuite/g++.dg/cpp2a/lambda-targ33.C
+ a91eacc6ac45340bd8e3cae62088b172  gcc/testsuite/g++.dg/cpp2a/lambda-targ34.C
  21c4749dcabd9a286db03db935f9cd86  gcc/testsuite/g++.dg/cpp2a/lambda-targ4.C
  1bdabd816102bfabb23374bf0d68c1c1  gcc/testsuite/g++.dg/cpp2a/lambda-targ5.C
  0c3e8d283c44c1ced955539b772c1c69  gcc/testsuite/g++.dg/cpp2a/lambda-targ6.C
*************** e6de60b5642934aef50f416afd0dfef5  gcc/te
*** 37419,37424 ****
--- 37419,37425 ----
  0ad246e348b6ea4bf54b74b0d8e3dce0  gcc/testsuite/g++.dg/pr123383.C
  9b72294c06cceb517f37832e017f79c1  gcc/testsuite/g++.dg/pr123575.C
  97fa47fc1ee58971cfae4f9fdffd0b3f  gcc/testsuite/g++.dg/pr125642.C
+ c981f50108f29e9500f3baf51746f6a5  gcc/testsuite/g++.dg/pr125854.C
  2ac64817a39fe1a5c2dc328f4233cda1  gcc/testsuite/g++.dg/pr37742.C
  32b2fbda29ffd2ac2181c43c971f3a7d  gcc/testsuite/g++.dg/pr44328.C
  e43b4ea2d038b181b57782d5d56d22ba  gcc/testsuite/g++.dg/pr44486.C
*************** f31771b6d142554bef46d22e7ebe37ed  gcc/te
*** 37695,37700 ****
--- 37696,37702 ----
  cdfee9c92cd1c39030b9538abaa0bbc0  gcc/testsuite/g++.dg/reflect/bitfield1.C
  26489e1481d28e38679c10fb0945c3d0  gcc/testsuite/g++.dg/reflect/can_substitute1.C
  495b5815adcc239b485058f793eac47e  gcc/testsuite/g++.dg/reflect/can_substitute2.C
+ c6fda0fd6113b6039560cfce08ac3c46  gcc/testsuite/g++.dg/reflect/can_substitute3.C
  cf1ce97bd56b5845905e4696d6e21793  gcc/testsuite/g++.dg/reflect/class1.C
  7e1297bc870fe6904620a1d784bd3929  gcc/testsuite/g++.dg/reflect/class2.C
  92d9b5b1bf8f84c19d0b739b4cf4482c  gcc/testsuite/g++.dg/reflect/common_reference1.C
*************** d9fff53183f3cbc21c2786ee54aac085  gcc/te
*** 37846,37851 ****
--- 37848,37854 ----
  cb62b6f411eaa0edabe6a10520d7652c  gcc/testsuite/g++.dg/reflect/expr14.C
  7d931bd0fd71d114fa6a17dce607e802  gcc/testsuite/g++.dg/reflect/expr15.C
  f3f33f49043a48d1ae3edf4ed1f5e2f3  gcc/testsuite/g++.dg/reflect/expr16.C
+ 4febd7db9b876282dd12662957bcdf0c  gcc/testsuite/g++.dg/reflect/expr17.C
  8a9b940805893540797936869da281d7  gcc/testsuite/g++.dg/reflect/expr2.C
  4b1fb75674597a85fb0234f3b45e8f9e  gcc/testsuite/g++.dg/reflect/expr3.C
  6db5cf1cb9ce8e043687a3df14680bc3  gcc/testsuite/g++.dg/reflect/expr4.C
*************** e790c039e0e092e68f38b1726e16d237  gcc/te
*** 37942,37947 ****
--- 37945,37951 ----
  cf4b29f5a184c24c75624cfadbb6701c  gcc/testsuite/g++.dg/reflect/is_explicit1.C
  df9b3bf5132e39f8a09c99bc27987315  gcc/testsuite/g++.dg/reflect/is_explicit2.C
  bb48a0d872f20ef6d7a8880e98ad7086  gcc/testsuite/g++.dg/reflect/is_explicit_object_parameter1.C
+ b08d82d1fb01f51510284ea278990d9c  gcc/testsuite/g++.dg/reflect/is_explicit_object_parameter2.C
  0e60388c629805e49960eeff70b54b1b  gcc/testsuite/g++.dg/reflect/is_final1.C
  022e42914195fa993b27771e411ee773  gcc/testsuite/g++.dg/reflect/is_function1.C
  2ec721685f4dab9159ca7c561879cc8d  gcc/testsuite/g++.dg/reflect/is_function2.C
*************** c44e1d6dfaecfb4f263c78b17ed1b8c7  gcc/te
*** 38034,38039 ****
--- 38038,38044 ----
  623575016974295708d960e75d733062  gcc/testsuite/g++.dg/reflect/members_of12.C
  a2c5daff71c5cc0345db4bd0e912e669  gcc/testsuite/g++.dg/reflect/members_of13.C
  07a4631eea7fe0c6bdb296ca77c1d3a2  gcc/testsuite/g++.dg/reflect/members_of14.C
+ 6a2f357760584b04cfa1a4685abd70a0  gcc/testsuite/g++.dg/reflect/members_of15.C
  689453102e4425f8d2c4ff89cb939595  gcc/testsuite/g++.dg/reflect/members_of2.C
  80a032eb31d0998f2d288e303356773a  gcc/testsuite/g++.dg/reflect/members_of3.C
  5ececa99994de569abffae1671b71870  gcc/testsuite/g++.dg/reflect/members_of4.C
*************** da5ef12464e2e90dfdfbebc6048074af  gcc/te
*** 38162,38167 ****
--- 38167,38173 ----
  39dc9b081eff03a935ca3c033af42d20  gcc/testsuite/g++.dg/reflect/serialize2.C
  f42afa22be98b32fdbba8bc038b1565e  gcc/testsuite/g++.dg/reflect/serialize3.C
  acdd73b149c3c54aa0d80b81c86a5a4c  gcc/testsuite/g++.dg/reflect/size_of1.C
+ b639489bfb9c0b44bfbd5d2633ecb9f9  gcc/testsuite/g++.dg/reflect/size_of2.C
  b54591a1a4cb544aba9831eba6b8174b  gcc/testsuite/g++.dg/reflect/source_location_of1.C
  82420344ec3910dc9c675d2a50b6dd1a  gcc/testsuite/g++.dg/reflect/source_location_of2.C
  ae74f7e0fcb5cd481ffc4f5cdabaaea7  gcc/testsuite/g++.dg/reflect/splice1.C
*************** e48684fba8399ff995984d71ebc63e26  gcc/te
*** 40836,40842 ****
  8751bd4974a7134cbf8b6b4fa30f58e3  gcc/testsuite/g++.dg/tree-ssa/loop-cond-split-1.C
  2e94d74d37d26fff24ad120b1785858a  gcc/testsuite/g++.dg/tree-ssa/loop-split-1.C
  8a88746bf26b483b92bb27194cb12cb4  gcc/testsuite/g++.dg/tree-ssa/modref-1.C
! c3448bc4829aed087221e4cd1c4e09b4  gcc/testsuite/g++.dg/tree-ssa/mult-negate-zeroone-1.C
  4d1699f327183f18814c0d35c2a4daa5  gcc/testsuite/g++.dg/tree-ssa/mult-negate-zeroone-2.C
  c60f58c35051bdf33475572fe6676ded  gcc/testsuite/g++.dg/tree-ssa/new1.C
  15ab0ba34272a9b9cb6f26af6f24d6be  gcc/testsuite/g++.dg/tree-ssa/nonzero-1.C
--- 40842,40848 ----
  8751bd4974a7134cbf8b6b4fa30f58e3  gcc/testsuite/g++.dg/tree-ssa/loop-cond-split-1.C
  2e94d74d37d26fff24ad120b1785858a  gcc/testsuite/g++.dg/tree-ssa/loop-split-1.C
  8a88746bf26b483b92bb27194cb12cb4  gcc/testsuite/g++.dg/tree-ssa/modref-1.C
! 6ce393bedbae1d27f78bf96eb6b5d38b  gcc/testsuite/g++.dg/tree-ssa/mult-negate-zeroone-1.C
  4d1699f327183f18814c0d35c2a4daa5  gcc/testsuite/g++.dg/tree-ssa/mult-negate-zeroone-2.C
  c60f58c35051bdf33475572fe6676ded  gcc/testsuite/g++.dg/tree-ssa/new1.C
  15ab0ba34272a9b9cb6f26af6f24d6be  gcc/testsuite/g++.dg/tree-ssa/nonzero-1.C
*************** bb74b6c9495308ab73ce64ff3cfd9543  gcc/te
*** 46433,46438 ****
--- 46439,46445 ----
  979e78c5ed1d2ba91a46584480362b26  gcc/testsuite/g++.target/riscv/rvv/base/riscv_vector.h
  874d1adf030c6930443f00e75573b0e8  gcc/testsuite/g++.target/riscv/rvv/rvv.exp
  0f6d3519b642a314a2ed539fd0c405c3  gcc/testsuite/g++.target/riscv/rvv/xtheadvector/pr116593.C
+ 7706065bc90a41a722cf08ed55f9f4ce  gcc/testsuite/g++.target/riscv/zicfilp-thunk.C
  737eebb4901981753937ddcc65184708  gcc/testsuite/g++.target/s390/atomic-align-1.C
  a4ea51c05f73fa50108f4536f172c84a  gcc/testsuite/g++.target/s390/builtin-array-arg-1.C
  4c0f4d71038ac725005db5f6fb2c806e  gcc/testsuite/g++.target/s390/float16-1.C
*************** b3bfae55c6a3c438ecd775080b8b31bb  gcc/te
*** 49338,49349 ****
  d1600bd95a17ea4b6ccf940ce936c456  gcc/testsuite/gcc.c-torture/execute/builtins/memcmp-lib.c
  c977723dd39905b49b9e53dde1d32e73  gcc/testsuite/gcc.c-torture/execute/builtins/memcmp.c
  8e258d2fc5daa60d7007d842cf555b36  gcc/testsuite/gcc.c-torture/execute/builtins/memcpy-chk-lib.c
! 8cb3e8a66ba7ed597a522719a9fb9b0a  gcc/testsuite/gcc.c-torture/execute/builtins/memcpy-chk.c
  fe7676bacb8eb48ebb0b09886a345949  gcc/testsuite/gcc.c-torture/execute/builtins/memcpy-chk.x
  12d5271f2b0ee71140bbd923f27a8c94  gcc/testsuite/gcc.c-torture/execute/builtins/memmove-2-lib.c
  d967a23dc46c04f7d9929e01b6410b65  gcc/testsuite/gcc.c-torture/execute/builtins/memmove-2.c
  8e258d2fc5daa60d7007d842cf555b36  gcc/testsuite/gcc.c-torture/execute/builtins/memmove-chk-lib.c
! a1b0a5a4a54a0a53c8297599c3fc2a01  gcc/testsuite/gcc.c-torture/execute/builtins/memmove-chk.c
  2787503e5745bbe8beaec95f19bab5fb  gcc/testsuite/gcc.c-torture/execute/builtins/memmove-chk.x
  12d5271f2b0ee71140bbd923f27a8c94  gcc/testsuite/gcc.c-torture/execute/builtins/memmove-lib.c
  44fb33d720704bce79c5289fbaadfa38  gcc/testsuite/gcc.c-torture/execute/builtins/memmove.c
--- 49345,49356 ----
  d1600bd95a17ea4b6ccf940ce936c456  gcc/testsuite/gcc.c-torture/execute/builtins/memcmp-lib.c
  c977723dd39905b49b9e53dde1d32e73  gcc/testsuite/gcc.c-torture/execute/builtins/memcmp.c
  8e258d2fc5daa60d7007d842cf555b36  gcc/testsuite/gcc.c-torture/execute/builtins/memcpy-chk-lib.c
! 569393b74e31af4d619b2b09d3adf3c4  gcc/testsuite/gcc.c-torture/execute/builtins/memcpy-chk.c
  fe7676bacb8eb48ebb0b09886a345949  gcc/testsuite/gcc.c-torture/execute/builtins/memcpy-chk.x
  12d5271f2b0ee71140bbd923f27a8c94  gcc/testsuite/gcc.c-torture/execute/builtins/memmove-2-lib.c
  d967a23dc46c04f7d9929e01b6410b65  gcc/testsuite/gcc.c-torture/execute/builtins/memmove-2.c
  8e258d2fc5daa60d7007d842cf555b36  gcc/testsuite/gcc.c-torture/execute/builtins/memmove-chk-lib.c
! ca1715d5dc5787ffa55d2ec2f71750bc  gcc/testsuite/gcc.c-torture/execute/builtins/memmove-chk.c
  2787503e5745bbe8beaec95f19bab5fb  gcc/testsuite/gcc.c-torture/execute/builtins/memmove-chk.x
  12d5271f2b0ee71140bbd923f27a8c94  gcc/testsuite/gcc.c-torture/execute/builtins/memmove-lib.c
  44fb33d720704bce79c5289fbaadfa38  gcc/testsuite/gcc.c-torture/execute/builtins/memmove.c
*************** aa38fed4e25baaf1fc6bc02c0adbde78  gcc/te
*** 49413,49419 ****
  aa38fed4e25baaf1fc6bc02c0adbde78  gcc/testsuite/gcc.c-torture/execute/builtins/strlen-lib.c
  0af6d5c89f92fad72318d73f2abaef84  gcc/testsuite/gcc.c-torture/execute/builtins/strlen.c
  8e258d2fc5daa60d7007d842cf555b36  gcc/testsuite/gcc.c-torture/execute/builtins/strncat-chk-lib.c
! 523092b47352563b812e7ba1e3eb6a82  gcc/testsuite/gcc.c-torture/execute/builtins/strncat-chk.c
  97dffb77bfdc924b76a1c91809febb87  gcc/testsuite/gcc.c-torture/execute/builtins/strncat-chk.x
  d3ca6e4899e5e5ad6176ba06eb9a7df2  gcc/testsuite/gcc.c-torture/execute/builtins/strncat-lib.c
  d3b895a745371afb8ef9022a65f91525  gcc/testsuite/gcc.c-torture/execute/builtins/strncat.c
--- 49420,49426 ----
  aa38fed4e25baaf1fc6bc02c0adbde78  gcc/testsuite/gcc.c-torture/execute/builtins/strlen-lib.c
  0af6d5c89f92fad72318d73f2abaef84  gcc/testsuite/gcc.c-torture/execute/builtins/strlen.c
  8e258d2fc5daa60d7007d842cf555b36  gcc/testsuite/gcc.c-torture/execute/builtins/strncat-chk-lib.c
! e5ad23154bff58cd484f5a85bf1d581b  gcc/testsuite/gcc.c-torture/execute/builtins/strncat-chk.c
  97dffb77bfdc924b76a1c91809febb87  gcc/testsuite/gcc.c-torture/execute/builtins/strncat-chk.x
  d3ca6e4899e5e5ad6176ba06eb9a7df2  gcc/testsuite/gcc.c-torture/execute/builtins/strncat-lib.c
  d3b895a745371afb8ef9022a65f91525  gcc/testsuite/gcc.c-torture/execute/builtins/strncat.c
*************** a930dfc9679e654bd31bd4321b2dc728  gcc/te
*** 51122,51128 ****
  d95ad8c1dd5967bdc9c5dddf2ced088f  gcc/testsuite/gcc.dg/Wreturn-local-addr-6.c
  fa730b9c27f8bb9bf2ffba2e5f5eb6b3  gcc/testsuite/gcc.dg/Wreturn-local-addr-7.c
  5abe9ee55436dc7786de8e7b8e103f35  gcc/testsuite/gcc.dg/Wreturn-local-addr-8.c
! 1710ae940d1c034fe8d203bc32766332  gcc/testsuite/gcc.dg/Wreturn-local-addr-9.c
  273fe6c85c6f362c0ae3de1a2bf4755f  gcc/testsuite/gcc.dg/Wreturn-local-addr.c
  3db3d23177caeb428024e79f3ea0c249  gcc/testsuite/gcc.dg/Wreturn-mismatch-1.c
  fc2c3f694bc06efbd1718e0e1906cf5d  gcc/testsuite/gcc.dg/Wreturn-mismatch-1a.c
--- 51129,51135 ----
  d95ad8c1dd5967bdc9c5dddf2ced088f  gcc/testsuite/gcc.dg/Wreturn-local-addr-6.c
  fa730b9c27f8bb9bf2ffba2e5f5eb6b3  gcc/testsuite/gcc.dg/Wreturn-local-addr-7.c
  5abe9ee55436dc7786de8e7b8e103f35  gcc/testsuite/gcc.dg/Wreturn-local-addr-8.c
! 41a9aea29dd09a8fcbc25d2d3da66c8d  gcc/testsuite/gcc.dg/Wreturn-local-addr-9.c
  273fe6c85c6f362c0ae3de1a2bf4755f  gcc/testsuite/gcc.dg/Wreturn-local-addr.c
  3db3d23177caeb428024e79f3ea0c249  gcc/testsuite/gcc.dg/Wreturn-mismatch-1.c
  fc2c3f694bc06efbd1718e0e1906cf5d  gcc/testsuite/gcc.dg/Wreturn-mismatch-1a.c
*************** c20cea884b6dfc628cdcbf331fdb46b7  gcc/te
*** 52547,52553 ****
  d73809487a6380e4bf5ee924a6d4694e  gcc/testsuite/gcc.dg/builtin-dynamic-object-size-2.c
  7d5e7cb2f631513f4ad805a020ca50d0  gcc/testsuite/gcc.dg/builtin-dynamic-object-size-20.c
  001c24b070f852293e5cd274e34c3f23  gcc/testsuite/gcc.dg/builtin-dynamic-object-size-3.c
! 91201ec88edc61c263359c07559700ed  gcc/testsuite/gcc.dg/builtin-dynamic-object-size-4.c
  6a3bd76db06e1cef893e79790a2fbaf9  gcc/testsuite/gcc.dg/builtin-dynamic-object-size-5-main.c
  aa300b6138aca54a87382d73d77b9afd  gcc/testsuite/gcc.dg/builtin-dynamic-object-size-5.c
  a5e27521e31c487bc91f8281068f33c3  gcc/testsuite/gcc.dg/builtin-dynamic-object-size-6.c
--- 52554,52560 ----
  d73809487a6380e4bf5ee924a6d4694e  gcc/testsuite/gcc.dg/builtin-dynamic-object-size-2.c
  7d5e7cb2f631513f4ad805a020ca50d0  gcc/testsuite/gcc.dg/builtin-dynamic-object-size-20.c
  001c24b070f852293e5cd274e34c3f23  gcc/testsuite/gcc.dg/builtin-dynamic-object-size-3.c
! 3e9b40c9c4b7c1ba92d5f92f1a26620a  gcc/testsuite/gcc.dg/builtin-dynamic-object-size-4.c
  6a3bd76db06e1cef893e79790a2fbaf9  gcc/testsuite/gcc.dg/builtin-dynamic-object-size-5-main.c
  aa300b6138aca54a87382d73d77b9afd  gcc/testsuite/gcc.dg/builtin-dynamic-object-size-5.c
  a5e27521e31c487bc91f8281068f33c3  gcc/testsuite/gcc.dg/builtin-dynamic-object-size-6.c
*************** cf6f2769bab5f5e06b9751f69afb0b75  gcc/te
*** 52583,52589 ****
  6866a8187425ffe835c719a45992dae9  gcc/testsuite/gcc.dg/builtin-object-size-21.c
  cebfc0e53c1528723fa6284f1a8cafa1  gcc/testsuite/gcc.dg/builtin-object-size-22.c
  9c4af0611294f721a379c54693c0a30b  gcc/testsuite/gcc.dg/builtin-object-size-3.c
! f93ef0cccc28030d91ef7db3de43152e  gcc/testsuite/gcc.dg/builtin-object-size-4.c
  1154c87579fbeba4e04c1f1b8d7bc0f1  gcc/testsuite/gcc.dg/builtin-object-size-5.c
  03cc40092ecce666556484e4a8b00248  gcc/testsuite/gcc.dg/builtin-object-size-6.c
  199b74c72225c5f24af2cf2a68908cd0  gcc/testsuite/gcc.dg/builtin-object-size-7.c
--- 52590,52596 ----
  6866a8187425ffe835c719a45992dae9  gcc/testsuite/gcc.dg/builtin-object-size-21.c
  cebfc0e53c1528723fa6284f1a8cafa1  gcc/testsuite/gcc.dg/builtin-object-size-22.c
  9c4af0611294f721a379c54693c0a30b  gcc/testsuite/gcc.dg/builtin-object-size-3.c
! a7483ba70d8c9ebf7ec07e6ccd73a26d  gcc/testsuite/gcc.dg/builtin-object-size-4.c
  1154c87579fbeba4e04c1f1b8d7bc0f1  gcc/testsuite/gcc.dg/builtin-object-size-5.c
  03cc40092ecce666556484e4a8b00248  gcc/testsuite/gcc.dg/builtin-object-size-6.c
  199b74c72225c5f24af2cf2a68908cd0  gcc/testsuite/gcc.dg/builtin-object-size-7.c
*************** ca7e5de7ae44ae6b5bb729e4d9eadc6f  gcc/te
*** 53776,53781 ****
--- 53783,53789 ----
  f90b8d83aba1cc7359d672c46fd07a9a  gcc/testsuite/gcc.dg/counted-by-anonymous-2.c
  2e612baabc05d361cda086f6a663da17  gcc/testsuite/gcc.dg/counted-by-anonymous-3.c
  5b22fc4910c9bfeecd988a4d23f85456  gcc/testsuite/gcc.dg/counted-by-anonymous.c
+ 69bea97c9f3c6849e1179970d95d06dc  gcc/testsuite/gcc.dg/counted-by-unary.c
  c797c0159985b6cfaaf4ab160451c3a4  gcc/testsuite/gcc.dg/countof-compat.c
  cfd1e5fcba6e1e17d853d6d14a40057b  gcc/testsuite/gcc.dg/countof-compile.c
  608b1948fb6a190311fada69744220cd  gcc/testsuite/gcc.dg/countof-no-compat.c
*************** fbe375bf9288bf092b7cef1996c14a1f  gcc/te
*** 54756,54763 ****
  05dde46babff3ba7e4ea1940a11314c2  gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-uninit.c
  42c6c9570a94e44ac29201a8df0d4450  gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-3.c
  41463d28a9bbf97a554feb4c959fed01  gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-3.h
! dd6a86059bef2c1a18361b813858114b  gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro.c
! f09c62d83b52ca3742e4c0a363cfb023  gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro2.c
  65bc0a73f1d2baf8df24a74d9d5a98e2  gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2.exp
  362aa298514051f8a5b0ce8f2e1ee91a  gcc/testsuite/gcc.dg/debug/dwarf2/enum-loc1.c
  59c839cb709f2082c72d622c16f665f4  gcc/testsuite/gcc.dg/debug/dwarf2/fesd-any.c
--- 54764,54771 ----
  05dde46babff3ba7e4ea1940a11314c2  gcc/testsuite/gcc.dg/debug/dwarf2/dwarf-uninit.c
  42c6c9570a94e44ac29201a8df0d4450  gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-3.c
  41463d28a9bbf97a554feb4c959fed01  gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-3.h
! c953f4f96c108d4c737d549b9e88b27b  gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro.c
! 3747345878914a68d25233a567402ac8  gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro2.c
  65bc0a73f1d2baf8df24a74d9d5a98e2  gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2.exp
  362aa298514051f8a5b0ce8f2e1ee91a  gcc/testsuite/gcc.dg/debug/dwarf2/enum-loc1.c
  59c839cb709f2082c72d622c16f665f4  gcc/testsuite/gcc.dg/debug/dwarf2/fesd-any.c
*************** fc7c9c751d59b444d0ab30c4d9029491  gcc/te
*** 57062,57067 ****
--- 57070,57076 ----
  14b92f2fc7da514c37c13ede5f279655  gcc/testsuite/gcc.dg/ipa/pr122458.c
  888d33a20f8dcb2d65f085d84f66723e  gcc/testsuite/gcc.dg/ipa/pr123542.c
  187b807400791bf18a7a1f9f9ce8a4a7  gcc/testsuite/gcc.dg/ipa/pr123543.c
+ 1ad60a396b302c2970c25767a4f919eb  gcc/testsuite/gcc.dg/ipa/pr124128.c
  72900ba4925dafc06ee62e16c28d6287  gcc/testsuite/gcc.dg/ipa/pr124777.c
  c8295ff7fd7e271d17e7609620f5dfcb  gcc/testsuite/gcc.dg/ipa/pr42706.c
  e4887053c792f4f78b03804c148839ce  gcc/testsuite/gcc.dg/ipa/pr45644.c
*************** feb7653457a5455ad23c2e8cbfda5890  gcc/te
*** 57229,57235 ****
  bd95b8dcfe2066017e9ab3bf65e6e8ab  gcc/testsuite/gcc.dg/loop-versioning-10.c
  698864ba149cf54cee29fc9f1a7b4a41  gcc/testsuite/gcc.dg/loop-versioning-11.c
  1257deacf83923b37acba7e4a8901831  gcc/testsuite/gcc.dg/loop-versioning-12.c
! bfc67e7535e86e06549402899e8ac93f  gcc/testsuite/gcc.dg/loop-versioning-13.c
  9c32704b232ab3c8787f607b0cc42c3d  gcc/testsuite/gcc.dg/loop-versioning-14.c
  4454baafd2fef627abb5d4716c440431  gcc/testsuite/gcc.dg/loop-versioning-2.c
  85c4ff94e81682a9e8d76bd9b0191d28  gcc/testsuite/gcc.dg/loop-versioning-3.c
--- 57238,57244 ----
  bd95b8dcfe2066017e9ab3bf65e6e8ab  gcc/testsuite/gcc.dg/loop-versioning-10.c
  698864ba149cf54cee29fc9f1a7b4a41  gcc/testsuite/gcc.dg/loop-versioning-11.c
  1257deacf83923b37acba7e4a8901831  gcc/testsuite/gcc.dg/loop-versioning-12.c
! 6e15b3461e35fd3d4a0ca4f4afff5049  gcc/testsuite/gcc.dg/loop-versioning-13.c
  9c32704b232ab3c8787f607b0cc42c3d  gcc/testsuite/gcc.dg/loop-versioning-14.c
  4454baafd2fef627abb5d4716c440431  gcc/testsuite/gcc.dg/loop-versioning-2.c
  85c4ff94e81682a9e8d76bd9b0191d28  gcc/testsuite/gcc.dg/loop-versioning-3.c
*************** a03a5109c087726181cf7cc2241d1a9e  gcc/te
*** 57612,57624 ****
  46d188c0319bf02d664cc2c49c9df2ef  gcc/testsuite/gcc.dg/lto/simd-function_0.c
  eb3f74ee254d840e57e48daa509a2c8c  gcc/testsuite/gcc.dg/lto/tag-1_0.c
  0e59139568f3499106d8c9c073cb93a6  gcc/testsuite/gcc.dg/lto/tag-1_1.c
! f558c203a038b0e53626cf8d223ddb80  gcc/testsuite/gcc.dg/lto/toplevel-extended-asm-1_0.c
  0b8c0686fa89ada1fa46aaffc51ae2d6  gcc/testsuite/gcc.dg/lto/toplevel-extended-asm-1_1.c
  d879ca69386462507d34baeeaac6ff87  gcc/testsuite/gcc.dg/lto/toplevel-extended-asm-2_0.c
  fce9b0e78881985f76e0dd77bf2834f2  gcc/testsuite/gcc.dg/lto/toplevel-extended-asm-2_1.c
  6ced18e2b5e01709247b972ac330e680  gcc/testsuite/gcc.dg/lto/toplevel-extended-asm-3_0.c
  db7afbef19e4085f817f6d5503e94797  gcc/testsuite/gcc.dg/lto/toplevel-extended-asm-3_1.c
! 8989ba571f3f699420c0929683ae50e3  gcc/testsuite/gcc.dg/lto/toplevel-simple-asm-1_0.c
  06309190fd3e222a7f4615a1e35b909a  gcc/testsuite/gcc.dg/lto/toplevel-simple-asm-1_1.c
  fe37f244fa55d46efa4078f405290af2  gcc/testsuite/gcc.dg/lto/toplevel-simple-asm-2_0.c
  e37f3db6688d550dbb2243182e4579f0  gcc/testsuite/gcc.dg/lto/toplevel-simple-asm-2_1.c
--- 57621,57633 ----
  46d188c0319bf02d664cc2c49c9df2ef  gcc/testsuite/gcc.dg/lto/simd-function_0.c
  eb3f74ee254d840e57e48daa509a2c8c  gcc/testsuite/gcc.dg/lto/tag-1_0.c
  0e59139568f3499106d8c9c073cb93a6  gcc/testsuite/gcc.dg/lto/tag-1_1.c
! 674d806cbe662768e8ffb9fba5f86552  gcc/testsuite/gcc.dg/lto/toplevel-extended-asm-1_0.c
  0b8c0686fa89ada1fa46aaffc51ae2d6  gcc/testsuite/gcc.dg/lto/toplevel-extended-asm-1_1.c
  d879ca69386462507d34baeeaac6ff87  gcc/testsuite/gcc.dg/lto/toplevel-extended-asm-2_0.c
  fce9b0e78881985f76e0dd77bf2834f2  gcc/testsuite/gcc.dg/lto/toplevel-extended-asm-2_1.c
  6ced18e2b5e01709247b972ac330e680  gcc/testsuite/gcc.dg/lto/toplevel-extended-asm-3_0.c
  db7afbef19e4085f817f6d5503e94797  gcc/testsuite/gcc.dg/lto/toplevel-extended-asm-3_1.c
! aeaa7cb6307f31d03aa32152a08299d3  gcc/testsuite/gcc.dg/lto/toplevel-simple-asm-1_0.c
  06309190fd3e222a7f4615a1e35b909a  gcc/testsuite/gcc.dg/lto/toplevel-simple-asm-1_1.c
  fe37f244fa55d46efa4078f405290af2  gcc/testsuite/gcc.dg/lto/toplevel-simple-asm-2_0.c
  e37f3db6688d550dbb2243182e4579f0  gcc/testsuite/gcc.dg/lto/toplevel-simple-asm-2_1.c
*************** fef759074d2405b19218d52a2f1d4c87  gcc/te
*** 58659,58665 ****
  b4bb8ae97fc12f1c66b22b9149ca7a2b  gcc/testsuite/gcc.dg/pr109304.c
  26cb03e00d88f4257622852ed3e5369b  gcc/testsuite/gcc.dg/pr109327.c
  45f9003776530da05643fd2fcd9640b8  gcc/testsuite/gcc.dg/pr109392.c
! bfcc628fc6999e234d82894274b24215  gcc/testsuite/gcc.dg/pr109393.c
  c84c4385dc7b913c1ab044bf620d7696  gcc/testsuite/gcc.dg/pr109409.c
  e3305bd5445d5fff018b1f9ab0c905d3  gcc/testsuite/gcc.dg/pr109410-2.c
  8c5ddd68de1ed874eb52f91b7136909e  gcc/testsuite/gcc.dg/pr109410.c
--- 58668,58674 ----
  b4bb8ae97fc12f1c66b22b9149ca7a2b  gcc/testsuite/gcc.dg/pr109304.c
  26cb03e00d88f4257622852ed3e5369b  gcc/testsuite/gcc.dg/pr109327.c
  45f9003776530da05643fd2fcd9640b8  gcc/testsuite/gcc.dg/pr109392.c
! bd7a947b3388382849d8d47905c3273e  gcc/testsuite/gcc.dg/pr109393.c
  c84c4385dc7b913c1ab044bf620d7696  gcc/testsuite/gcc.dg/pr109409.c
  e3305bd5445d5fff018b1f9ab0c905d3  gcc/testsuite/gcc.dg/pr109410-2.c
  8c5ddd68de1ed874eb52f91b7136909e  gcc/testsuite/gcc.dg/pr109410.c
*************** d05e4c7e8a6e722440c3fa08495a5de7  gcc/te
*** 59035,59046 ****
  7b30511bd41fb50fefd587c42e5d984c  gcc/testsuite/gcc.dg/pr125252.c
  8fcad4427391662fae9297f1c3447a78  gcc/testsuite/gcc.dg/pr125261.c
  b9e821b448b2a7ca97d76e3b0edfe9cf  gcc/testsuite/gcc.dg/pr125375.c
  ab60b475998ea1ed92a9002d6336bfd6  gcc/testsuite/gcc.dg/pr125501.c
  81986438261d8b7deff16165747006c1  gcc/testsuite/gcc.dg/pr125579.c
  8c00b7615cb26255ca6f38542438e857  gcc/testsuite/gcc.dg/pr125588-1.c
  2145690aae63a443e6b20c904de8a496  gcc/testsuite/gcc.dg/pr125668.c
  cb2af6eb124c1d269b7aedc04681b314  gcc/testsuite/gcc.dg/pr125706.c
! 28b84977a9c78000d3bd028bdd0ee295  gcc/testsuite/gcc.dg/pr125707.c
  bc5ddfbbc46f4e0cce1629d1b58d3090  gcc/testsuite/gcc.dg/pr12603.c
  72a2fca76cb69617ae36bab93c7ec0d7  gcc/testsuite/gcc.dg/pr12625-1.c
  6f0ef61e5a12db5f11da839b2988c5e1  gcc/testsuite/gcc.dg/pr13519-1.c
--- 59044,59062 ----
  7b30511bd41fb50fefd587c42e5d984c  gcc/testsuite/gcc.dg/pr125252.c
  8fcad4427391662fae9297f1c3447a78  gcc/testsuite/gcc.dg/pr125261.c
  b9e821b448b2a7ca97d76e3b0edfe9cf  gcc/testsuite/gcc.dg/pr125375.c
+ 6d685000e22a0093c454ca73f9cd88fb  gcc/testsuite/gcc.dg/pr125405-bitint.c
  ab60b475998ea1ed92a9002d6336bfd6  gcc/testsuite/gcc.dg/pr125501.c
  81986438261d8b7deff16165747006c1  gcc/testsuite/gcc.dg/pr125579.c
  8c00b7615cb26255ca6f38542438e857  gcc/testsuite/gcc.dg/pr125588-1.c
+ 2f8d67606d854c1f456a4769dd7b1889  gcc/testsuite/gcc.dg/pr125641.c
  2145690aae63a443e6b20c904de8a496  gcc/testsuite/gcc.dg/pr125668.c
  cb2af6eb124c1d269b7aedc04681b314  gcc/testsuite/gcc.dg/pr125706.c
! 02b3b3267e793ecee19ba15f99518c3d  gcc/testsuite/gcc.dg/pr125707-1.c
! 5ab2cc7a06b876199ce2f02e0dd9b79b  gcc/testsuite/gcc.dg/pr125707.c
! 7113f605d92516b4ce0d7a828fecc304  gcc/testsuite/gcc.dg/pr125737.c
! 780a210a91e38b3b391cc7a869bbcfc8  gcc/testsuite/gcc.dg/pr125756.c
! 729e9d2c572b5740d1cb9d00d90885e9  gcc/testsuite/gcc.dg/pr125790-1.c
! 6a322f305e51f6120590c1de3c37495b  gcc/testsuite/gcc.dg/pr125857-1.c
  bc5ddfbbc46f4e0cce1629d1b58d3090  gcc/testsuite/gcc.dg/pr12603.c
  72a2fca76cb69617ae36bab93c7ec0d7  gcc/testsuite/gcc.dg/pr12625-1.c
  6f0ef61e5a12db5f11da839b2988c5e1  gcc/testsuite/gcc.dg/pr13519-1.c
*************** cf6adf4ec5a0e6eb5b11e830643ea604  gcc/te
*** 61397,61402 ****
--- 61413,61421 ----
  31d8133fa794f2c9dc7e6cc940c20eff  gcc/testsuite/gcc.dg/sms-9.c
  59676cf895a96b5df60c99dab32c2e77  gcc/testsuite/gcc.dg/sms-compare-debug-1.c
  29083ff7a74e33bf670767bdfe423cbb  gcc/testsuite/gcc.dg/sms-compare-debug-2.c
+ 04a8160afdb3ca573aac7dc290ac5fe0  gcc/testsuite/gcc.dg/spaceship_int_variants.c
+ 4c98155afa4b770797952c7936493327  gcc/testsuite/gcc.dg/spaceship_mixed_variants.c
+ 05e1e428748b7e0d993bdb2aef87f486  gcc/testsuite/gcc.dg/spaceship_uint_variants.c
  462ee539b38e672e3b24a7ae2268df8b  gcc/testsuite/gcc.dg/spec-barrier-3.c
  b5774d82d5e7a13f47820c57cf1db3ea  gcc/testsuite/gcc.dg/spec-barrier-3a.c
  9c080ca6c2427d1836ee0c8b3b4a07c7  gcc/testsuite/gcc.dg/spec-options.c
*************** e2a142dab1f38e7f7a8ffcdce454ce29  gcc/te
*** 62927,62935 ****
--- 62946,62957 ----
  5fd68126d95198e18114a17a92bae1c7  gcc/testsuite/gcc.dg/torture/pr125602.c
  e1cd2f943b1276d7edf0ad19d7f2af26  gcc/testsuite/gcc.dg/torture/pr125652.c
  f56a66971ef2360d1150ae851eb9f24c  gcc/testsuite/gcc.dg/torture/pr125653.c
+ 3846d71f952a8a48bea91f2256b1a576  gcc/testsuite/gcc.dg/torture/pr125730.c
  13a26b482c0abe9bba6de7ad78d38472  gcc/testsuite/gcc.dg/torture/pr125774-1.c
  459e4addcc4688257422fed8391988cd  gcc/testsuite/gcc.dg/torture/pr125776-1.c
  9b58e29ad15155e6fc7bf7dbad6bc468  gcc/testsuite/gcc.dg/torture/pr125776-2.c
+ 93bc071aaec418c0585a366bbff0fb37  gcc/testsuite/gcc.dg/torture/pr125786.c
+ 46daba547abe16cbd1c46548501b93f2  gcc/testsuite/gcc.dg/torture/pr125872.c
  ded4330fd1cd52783bd9b1761db038ef  gcc/testsuite/gcc.dg/torture/pr16104-1.c
  fc265ee05da2f29f0e92804661cd1f28  gcc/testsuite/gcc.dg/torture/pr17526.c
  01c583edb41b632b835aa892b9c1cb14  gcc/testsuite/gcc.dg/torture/pr17933-1.c
*************** df98e1f10e9362d780ceaf678d234d36  gcc/te
*** 64693,64698 ****
--- 64715,64724 ----
  3f5882cbab534644905ebbbd79ebda5a  gcc/testsuite/gcc.dg/tree-ssa/factor_op_phi-2.c
  55f3e8dbeed7eea712424e13a08b5569  gcc/testsuite/gcc.dg/tree-ssa/factor_op_phi-3.c
  bb540c6d2c9c55e38a37822530c0afa2  gcc/testsuite/gcc.dg/tree-ssa/factor_op_phi-4.c
+ d7f6676805ef97e4089df1fa8fade683  gcc/testsuite/gcc.dg/tree-ssa/factor_op_phi-load-offsets-1.c
+ 60c3fd4ef212339e0d486d7d6d140709  gcc/testsuite/gcc.dg/tree-ssa/factor_op_phi-load-offsets-2.c
+ 1d05301c8449a4196f4c86942a6c33f8  gcc/testsuite/gcc.dg/tree-ssa/factor_op_phi-load-offsets-3.c
+ b069caf152c3eca0e024d32d14335580  gcc/testsuite/gcc.dg/tree-ssa/factor_op_phi-load-stores-1.c
  33a3fcae747cee654667314a41d7dae6  gcc/testsuite/gcc.dg/tree-ssa/flatten-1.c
  5aa642235531b56fe71d129b3128e653  gcc/testsuite/gcc.dg/tree-ssa/flatten-2.c
  7013e9405bbea7d794f84d52c038fb91  gcc/testsuite/gcc.dg/tree-ssa/flatten-3.c
*************** f5cfea6a1b6fc4b038b869d0d5b623f1  gcc/te
*** 65395,65400 ****
--- 65421,65427 ----
  f129dd468dfe8a551c430253beea7ece  gcc/testsuite/gcc.dg/tree-ssa/pr125104.c
  20283de4958877c9f56821eb4c2d19cd  gcc/testsuite/gcc.dg/tree-ssa/pr125214.c
  fff67bd84df25cc9f3265a2fd89436d9  gcc/testsuite/gcc.dg/tree-ssa/pr125259.c
+ dc58edd505d49a41932e7cafece6a2d5  gcc/testsuite/gcc.dg/tree-ssa/pr125405.c
  dbbc66ce4aef2adea320e51207ff99b8  gcc/testsuite/gcc.dg/tree-ssa/pr125612-1.c
  78e6c5fe63f7305009c8a79840fe20dc  gcc/testsuite/gcc.dg/tree-ssa/pr13146.c
  eab19e0c04884cd782c9879cbe292109  gcc/testsuite/gcc.dg/tree-ssa/pr14341.c
*************** d66408c518c8dabc34c03159ce0ee317  gcc/te
*** 66092,66097 ****
--- 66119,66127 ----
  0d2c77f887c7650308ee4834b850c7f9  gcc/testsuite/gcc.dg/tree-ssa/restrict-9.c
  a16e6045a67747df1bbf4e0359c3ee89  gcc/testsuite/gcc.dg/tree-ssa/return-value-range-1.c
  688b8f762ac2c72c005673fa2d9c335c  gcc/testsuite/gcc.dg/tree-ssa/satd-hadamard.c
+ 310ffe1652a091173f8b7a52babddfb0  gcc/testsuite/gcc.dg/tree-ssa/scc-diamond-1.c
+ ab194d20bae6e8d51cf4ece7aea8d83f  gcc/testsuite/gcc.dg/tree-ssa/scc-diamond-3.c
+ 54c48e1a9bd511ada4416949d51ce815  gcc/testsuite/gcc.dg/tree-ssa/scc-diamond-4.c
  cd3e3a590031a7862742691f55854a22  gcc/testsuite/gcc.dg/tree-ssa/sccp-1.c
  f5f5b1ba3e8f4784cb58191b03eb37be  gcc/testsuite/gcc.dg/tree-ssa/sccp-16.c
  63d4e72c76cf7ed65099b2b2f48ab339  gcc/testsuite/gcc.dg/tree-ssa/sccp-2.c
*************** a2a31f73b067f86314a45763557dbbb3  gcc/te
*** 67311,67316 ****
--- 67341,67347 ----
  9c7f6add6d5a9e38d559986146f82f20  gcc/testsuite/gcc.dg/vect/bb-slp-call-3.c
  e1585b42cfd6432c0219b429481cdcfe  gcc/testsuite/gcc.dg/vect/bb-slp-cond-1.c
  b2a7701b9eeacd6cecdcda7c9036129a  gcc/testsuite/gcc.dg/vect/bb-slp-conditional_store_1.c
+ 27f95b854a1c51f7cb09eaab80c8ea3a  gcc/testsuite/gcc.dg/vect/bb-slp-dep-oracle.c
  1b5ff799161e9971d6bd28bec8d16440  gcc/testsuite/gcc.dg/vect/bb-slp-div-1.c
  d840a44aa42e8dbf05f710b4031b11a1  gcc/testsuite/gcc.dg/vect/bb-slp-div-2.c
  4e9145a07928809fe075b3bb341ee40f  gcc/testsuite/gcc.dg/vect/bb-slp-layout-1.c
*************** fca55cf03db9d8a5e743486b3427a96a  gcc/te
*** 68973,68978 ****
--- 69004,69010 ----
  e3f3a36d35d6f9ef525a93d5cb0eb94b  gcc/testsuite/gcc.dg/vect/vect-early-break_141-pr123089.c
  8f74fa2d62f970a3a928d0976fced17c  gcc/testsuite/gcc.dg/vect/vect-early-break_142-pr124034.c
  a3686e933f3ef959607d7c15f14f689b  gcc/testsuite/gcc.dg/vect/vect-early-break_143-pr124142.c
+ 846e23a92680430909579b63d2e1fac8  gcc/testsuite/gcc.dg/vect/vect-early-break_144-pr125804.c
  e90473e2ecf7c08db9278bdca5060773  gcc/testsuite/gcc.dg/vect/vect-early-break_15.c
  2232d395ceff11af9b28f269e86162c9  gcc/testsuite/gcc.dg/vect/vect-early-break_16.c
  74848a5e9be64a5356628885f52c286b  gcc/testsuite/gcc.dg/vect/vect-early-break_17.c
*************** a0e0a36f95b638628b96d2b6348ddfd2  gcc/te
*** 69916,69922 ****
  99ac2b624d533e40bd72e9c0bd306da4  gcc/testsuite/gcc.misc-tests/gcov-11.c
  7b48304ed6cf8db8ecbc3981066cdc48  gcc/testsuite/gcc.misc-tests/gcov-12.c
  e6b92539aad49fd864490cec7080b490  gcc/testsuite/gcc.misc-tests/gcov-13.c
! c7ac4a7ab73f1691f9b4a862572c231a  gcc/testsuite/gcc.misc-tests/gcov-14.c
  cbf6bf065ad255a035c8a4ecfef0b332  gcc/testsuite/gcc.misc-tests/gcov-15.c
  c7e8979eb7e4f7fb8c2e008a087966cd  gcc/testsuite/gcc.misc-tests/gcov-16.c
  40a4ab93d915ef5160ce00fc07f5df4c  gcc/testsuite/gcc.misc-tests/gcov-17.c
--- 69948,69954 ----
  99ac2b624d533e40bd72e9c0bd306da4  gcc/testsuite/gcc.misc-tests/gcov-11.c
  7b48304ed6cf8db8ecbc3981066cdc48  gcc/testsuite/gcc.misc-tests/gcov-12.c
  e6b92539aad49fd864490cec7080b490  gcc/testsuite/gcc.misc-tests/gcov-13.c
! 9b4eec0b214722716034bb25462ac1b8  gcc/testsuite/gcc.misc-tests/gcov-14.c
  cbf6bf065ad255a035c8a4ecfef0b332  gcc/testsuite/gcc.misc-tests/gcov-15.c
  c7e8979eb7e4f7fb8c2e008a087966cd  gcc/testsuite/gcc.misc-tests/gcov-16.c
  40a4ab93d915ef5160ce00fc07f5df4c  gcc/testsuite/gcc.misc-tests/gcov-17.c
*************** c6cf8bf0cb1b39440a64d8f476f6edc2  gcc/te
*** 70970,70975 ****
--- 71002,71008 ----
  a19c70499df83a0df6b609719e946240  gcc/testsuite/gcc.target/aarch64/avoid-store-forwarding-4.c
  47a568763e86163c952b5b17243e396a  gcc/testsuite/gcc.target/aarch64/avoid-store-forwarding-5.c
  7d031cd667cb44743e43f71332f66c73  gcc/testsuite/gcc.target/aarch64/avoid-store-forwarding-6.c
+ 035a6a8c08242aff1b11cf0dd7921f7d  gcc/testsuite/gcc.target/aarch64/avoid-store-forwarding-be-2.c
  702b2037dd57663f46b3925af934a1bf  gcc/testsuite/gcc.target/aarch64/avoid-store-forwarding-be.c
  2e34b4d658642fa31028e6c77888d89c  gcc/testsuite/gcc.target/aarch64/bb-slp-pr113091.c
  b46f641f0dcc38f3e3de3f9a90702753  gcc/testsuite/gcc.target/aarch64/bfloat16_scalar_1.c
*************** f278ce8788e95ff6c4d2d30e0e50237e  gcc/te
*** 71955,71960 ****
--- 71988,71994 ----
  3525a5777032197cdd1e39b2aad94c29  gcc/testsuite/gcc.target/aarch64/pr123294-1.c
  085f7e2087fb0cf8d5d9a44259bb616c  gcc/testsuite/gcc.target/aarch64/pr123548.c
  0234368499c1dadf9926fb014b16551a  gcc/testsuite/gcc.target/aarch64/pr123748.c
+ 1dc959e298f7afe3991001e3c511cd6b  gcc/testsuite/gcc.target/aarch64/pr123754.c
  def5c2749854b129e22c1e5c9a817159  gcc/testsuite/gcc.target/aarch64/pr123786.c
  b3ab989c7fd4a3722c72edff57ac7f9d  gcc/testsuite/gcc.target/aarch64/pr123791.c
  0fb432038c1a084913bbbe8d8d8b8bd8  gcc/testsuite/gcc.target/aarch64/pr123792.c
*************** a588c84982135f60225d2a017f7b53df  gcc/te
*** 71964,71969 ****
--- 71998,72004 ----
  96507a42a05f136a062f99a03b8ba35f  gcc/testsuite/gcc.target/aarch64/pr124713.c
  1ce51765be6403daef68bb844e13a7ec  gcc/testsuite/gcc.target/aarch64/pr125538.c
  2b9d8264fb91bce4c0404a56eed28b74  gcc/testsuite/gcc.target/aarch64/pr125597.c
+ b925908f19e4f112a6a854e9b34023c4  gcc/testsuite/gcc.target/aarch64/pr125795.c
  9adb42733d9f5e2b1f2dbb364b62100d  gcc/testsuite/gcc.target/aarch64/pr37780_1.c
  e668fb9e0d32efadd671247467dc90db  gcc/testsuite/gcc.target/aarch64/pr58460.c
  9023f817c07ddec673c5b546525fc184  gcc/testsuite/gcc.target/aarch64/pr60034.c
*************** dff5614a018a2765dcb90ecb31013713  gcc/te
*** 72117,72122 ****
--- 72152,72158 ----
  b2b9b4bede373ccce7eb9870526caf86  gcc/testsuite/gcc.target/aarch64/scalar-vca.c
  49520376acef3c7fb07d0bdd6ead705b  gcc/testsuite/gcc.target/aarch64/scalar_intrinsics.c
  2fc6ff8843a82335d82fabde33dbe9e5  gcc/testsuite/gcc.target/aarch64/scalar_shift_1.c
+ 059476a9f6100627691d9340512a8478  gcc/testsuite/gcc.target/aarch64/scc-diamond-2.c
  b0af57cfaade3214be10647c1c8b885d  gcc/testsuite/gcc.target/aarch64/sdiv_costs_1.c
  3e8ce149782bdd987aa781b057d78ceb  gcc/testsuite/gcc.target/aarch64/set_fpcr64_1.c
  a93f1f3ea917533aaecb0c213be0f4d9  gcc/testsuite/gcc.target/aarch64/set_fpsr64_1.c
*************** cbe63b7384f92925c6e39116fe7f79c6  gcc/te
*** 76978,76983 ****
--- 77014,77020 ----
  2f20cf370ca6fbaebfa9f5d929b67a4c  gcc/testsuite/gcc.target/aarch64/sve/pr123897.c
  91a4ca000e76de583f0631d5cb19a12a  gcc/testsuite/gcc.target/aarch64/sve/pr123898.c
  c06b169b4eff3395ec158f409f0e7c87  gcc/testsuite/gcc.target/aarch64/sve/pr125550.c
+ e2084744a641140626dd7d1a6b76fc00  gcc/testsuite/gcc.target/aarch64/sve/pr125794.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
*************** c2a0ae9f14c1928de3aea64ee37d1b25  gcc/te
*** 79106,79111 ****
--- 79143,79149 ----
  6699c8d574b87c7018fc5b494c65cb7f  gcc/testsuite/gcc.target/aarch64/sve2/gather_earlyclobber.c
  34c844ca053b9c871341786139fbf872  gcc/testsuite/gcc.target/aarch64/sve2/mulhrs_1.c
  0b91cc9cabeae09648d1f1532c0ecf1c  gcc/testsuite/gcc.target/aarch64/sve2/nbsl_nor_nand_neon.c
+ b2e2d8e5d1e43060388ebc800f05785b  gcc/testsuite/gcc.target/aarch64/sve2/niter-convert-range.c
  b360e0ac1da1500645df64fce4fab7dd  gcc/testsuite/gcc.target/aarch64/sve2/nlogic_1.c
  4446107d252cac5778f692095515b222  gcc/testsuite/gcc.target/aarch64/sve2/nlogic_2.c
  d58c6c7544d2d10908ad86e2a7eb5617  gcc/testsuite/gcc.target/aarch64/sve2/pfalse-binary.c
*************** b41d9e6002dd46f3c6c0d6d39dea37ee  gcc/te
*** 89305,89310 ****
--- 89343,89349 ----
  c8f91a97e3f4734a3595572bab26a3e7  gcc/testsuite/gcc.target/i386/builtin-unreachable.c
  5fa05e3eb27a2bfb180c0a1a14e3db07  gcc/testsuite/gcc.target/i386/builtin_target.c
  5502489cd371c4d2b333eee65153eec7  gcc/testsuite/gcc.target/i386/builtin_thread_pointer.c
+ db85164f6efc26aa5580771fd85c647d  gcc/testsuite/gcc.target/i386/c86-4g-m7-vect-load-cost-reduc.c
  4278b9cf349a82b327a03ec6fb2f2b43  gcc/testsuite/gcc.target/i386/cadd.c
  bcb496f917fb6dad4ebb0207c1334471  gcc/testsuite/gcc.target/i386/call-1.c
  03f91a577d4f6be3e4731c0a4c63e51e  gcc/testsuite/gcc.target/i386/call-2.c
*************** beabba7cdb57fe1b104d0ebda790dc72  gcc/te
*** 89516,89521 ****
--- 89555,89561 ----
  5851d1bb083c918f8c25f09169ed0c78  gcc/testsuite/gcc.target/i386/extract-insert-combining.c
  4ea9a85bc3f40b1ebeb0581bd96620de  gcc/testsuite/gcc.target/i386/f16c-check.h
  019f466ae9c955f33a105efa418493cf  gcc/testsuite/gcc.target/i386/fabsneg-1.c
+ 06ede510ad4b16259c5aa31e21f11ded  gcc/testsuite/gcc.target/i386/fabsneg-2.c
  45c5b062d943eec3fbf355c1cf1f80fb  gcc/testsuite/gcc.target/i386/falign-functions-2.c
  c22536f41904605ccd03ddaf7df141aa  gcc/testsuite/gcc.target/i386/falign-functions-3.c
  9684824da0283d003d291122f96b2299  gcc/testsuite/gcc.target/i386/falign-functions.c
*************** df76ec06f1f94b77cb1652a61b635dcd  gcc/te
*** 91288,91293 ****
--- 91328,91335 ----
  57561ff787e5008d8cbc12f15d3ef382  gcc/testsuite/gcc.target/i386/pr125351.c
  5e60669dc31220ebca3d33f2e3d79b71  gcc/testsuite/gcc.target/i386/pr125355-2.c
  0d5d3d25c881e920fd3309b334c0c58f  gcc/testsuite/gcc.target/i386/pr125355.c
+ 20e05cf993391a61cf15835793091a43  gcc/testsuite/gcc.target/i386/pr125614.c
+ 1f67cd0f9980b605cafe7d50af23cbf9  gcc/testsuite/gcc.target/i386/pr125883.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
*************** e70f44b248ae6fb211c33c6023159241  gcc/te
*** 100396,100402 ****
  d8e76b4cd45daa82499151eedc966298  gcc/testsuite/gcc.target/riscv/pr120659.c
  5209003e1af2c30db39a214e7aa84709  gcc/testsuite/gcc.target/riscv/pr120674.c
  0cdcf97373ed486ded9f3c10ef04348d  gcc/testsuite/gcc.target/riscv/pr120714.c
! f87f98ceea03639b9d09f120d310a5b9  gcc/testsuite/gcc.target/riscv/pr120811.c
  6437d8ec53cc1530c20baacd9ca47eba  gcc/testsuite/gcc.target/riscv/pr121113.c
  b0a08bcc636090d105d825a0a3d1b159  gcc/testsuite/gcc.target/riscv/pr121136.c
  25c459137bd9938c72fff727f3c7b5d4  gcc/testsuite/gcc.target/riscv/pr121160.c
--- 100438,100444 ----
  d8e76b4cd45daa82499151eedc966298  gcc/testsuite/gcc.target/riscv/pr120659.c
  5209003e1af2c30db39a214e7aa84709  gcc/testsuite/gcc.target/riscv/pr120674.c
  0cdcf97373ed486ded9f3c10ef04348d  gcc/testsuite/gcc.target/riscv/pr120714.c
! e8fbd03750cef52a8b92551ac7d6b860  gcc/testsuite/gcc.target/riscv/pr120811.c
  6437d8ec53cc1530c20baacd9ca47eba  gcc/testsuite/gcc.target/riscv/pr121113.c
  b0a08bcc636090d105d825a0a3d1b159  gcc/testsuite/gcc.target/riscv/pr121136.c
  25c459137bd9938c72fff727f3c7b5d4  gcc/testsuite/gcc.target/riscv/pr121160.c
*************** dbe7e01002e5a8097f16f6e89450e72f  gcc/te
*** 100440,100445 ****
--- 100482,100488 ----
  7f393994eaf6402baf4e43a673c3f1f5  gcc/testsuite/gcc.target/riscv/pr125152.c
  de7f2cc01b369ea994e72e2ba0a8b39a  gcc/testsuite/gcc.target/riscv/pr125320.c
  e7c81dc9311e0ed5e4c52e29259d2a41  gcc/testsuite/gcc.target/riscv/pr125387.c
+ 3cda93b1ee6ddd4ac653c7aade342f8d  gcc/testsuite/gcc.target/riscv/pr125405.c
  37a08389ba95284cc27832767dfc1430  gcc/testsuite/gcc.target/riscv/pr43644.c
  8eba488c3d26a288644785954ea86af2  gcc/testsuite/gcc.target/riscv/pr52345.c
  f035fac0dc9b5f42ec0a469a8391163c  gcc/testsuite/gcc.target/riscv/pr56096.c
*************** f2ec98071ccfe1a1f2bdf4df284cc4bf  gcc/te
*** 101342,101347 ****
--- 101385,101393 ----
  7d8cbc2b37ba78b4c9e24546d49e35a9  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123940.c
  bae2267e4176e92d1e66908110f5381f  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr124448.c
  7efbbc8153da873eb1b0fe1ac3321b7e  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr125215.c
+ 455f4d6d561c03a39a904e17bbb00820  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr125478.c
+ 6f0971d87cbc90246502d27273f008c2  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr125516.c
+ cfd8a75e04799147b00e32b4c36ce0e7  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr125670.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
*************** efa3b3358427b6e92bb3efc1cdeb6f0c  gcc/te
*** 102989,103006 ****
  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
--- 103035,103052 ----
  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
! 6e84082647b3f9ddbb1739b9346df1fe  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
! c0fa853c66bcc8e2b189800e3100e7ae  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
! 793656ed20adcbb5f770f756a692c7cb  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
! 00ce184c318bfa0a51f250f0c1c1bea2  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
*************** a8f53ad5180333afb72d569d125c3922  gcc/te
*** 105164,105170 ****
  fe865d9009af7551d830f6d4e3008ebe  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vlwu-vsw.c
  10c2fe61483d221e6648e72c6ff9f6a0  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vsext.c
  23788d7500abf7340ab20ef598d9da5e  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vzext.c
! c899d104a613d62b9c43f960982f58af  gcc/testsuite/gcc.target/riscv/sat/sat_arith.h
  89d90b13c13c2658dcc8319771cd755f  gcc/testsuite/gcc.target/riscv/sat/sat_arith_data.h
  e52f03a6378cd78f7ea04149c2b8215a  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i16.c
  1de70dbaccb7e9fe73b8e90ec7430b4d  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i32.c
--- 105210,105216 ----
  fe865d9009af7551d830f6d4e3008ebe  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vlwu-vsw.c
  10c2fe61483d221e6648e72c6ff9f6a0  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vsext.c
  23788d7500abf7340ab20ef598d9da5e  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vzext.c
! b501c2edc03a715242255e32b0a72f97  gcc/testsuite/gcc.target/riscv/sat/sat_arith.h
  89d90b13c13c2658dcc8319771cd755f  gcc/testsuite/gcc.target/riscv/sat/sat_arith_data.h
  e52f03a6378cd78f7ea04149c2b8215a  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i16.c
  1de70dbaccb7e9fe73b8e90ec7430b4d  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i32.c
*************** d315359993297dfad45328e5bf880374  gcc/te
*** 105547,105552 ****
--- 105593,105602 ----
  185a155c9d3ee44c75f1a74aca76453a  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-12-u8-from-u32.c
  8dc65a05268d36980daea0c420bcf616  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-12-u8-from-u64.rv32.c
  7125a8afc4840917e6e9d977bb933d2c  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-12-u8-from-u64.rv64.c
+ f7a55465c864810e6d146cef4094be15  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-13-u16.c
+ f7b6d151e3462dcc3d28d6d6c4b3af1f  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-13-u32.c
+ a9f1bddc78af52e2c03e4d296e66af83  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-13-u64.c
+ 6d5ce4e363d6dfbf84504a522a1cc84d  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-13-u8.c
  251cfaed4fc07574d958d0681d1dfec5  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-2-u16-from-u64.c
  5b0850fbdfe60f0c7b2f6b7451708398  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-2-u32-from-u64.c
  6543eb493f3a5de8524d7043324fb135  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-2-u8-from-u64.c
*************** e7593dc3e36ec4e8c9011341bd078062  gcc/te
*** 105660,105665 ****
--- 105710,105719 ----
  c5f780388275a98ca12b0a66ab737208  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-12-u8-from-u16.c
  4b29d83fe36c2bb0683a64baef5ede6b  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-12-u8-from-u32.c
  ad410a025682465e1431f5902fd4930e  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-12-u8-from-u64.c
+ add4817374ea0990431a6f569166cef7  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-13-u16.c
+ aca978c95a1e04df5ebdfa749fbbb524  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-13-u32.c
+ 6efe233f56877b7377ac58c56deaa34d  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-13-u64.c
+ a615bdbe96764c6cdaf6ab6b6b506565  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-13-u8.c
  6e4e3e7e8157d61d92fd2d57b879983c  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-3-u16.c
  7c4b9349b8740bc9b8a5febcbb96897c  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-3-u32.c
  4c1f4994dcf2fb5cd55247f60b8383f3  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-3-u64.c
*************** c0a4bee5eba1cce4e72b7fe92728426b  gcc/te
*** 106101,106106 ****
--- 106155,106161 ----
  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
+ 8cbdaea3ed315b788e2b1bede243011b  gcc/testsuite/gcc.target/riscv/test-equal.c
  eba52e984a37427da6fa1233257ff6a9  gcc/testsuite/gcc.target/riscv/tls_1.x
  dbe67905fc0f65b7be7d2f96a6c490e6  gcc/testsuite/gcc.target/riscv/tlsdesc.c
  29a602b7f814b2f1c3f0991f0e0525b8  gcc/testsuite/gcc.target/riscv/ventana-16122.c
*************** fb2bbe19adb120805523add355d1822d  gcc/te
*** 106313,106318 ****
--- 106368,106378 ----
  c6924cfcab740bd8de9296d509178f4d  gcc/testsuite/gcc.target/riscv/zfbfmin-bf16_integer_libcall_convert.c
  6eafc07562072676788badf18ac87198  gcc/testsuite/gcc.target/riscv/zi-ext.c
  5317b44a285fba7ff5b0d15770fd05c8  gcc/testsuite/gcc.target/riscv/zicfilp-call.c
+ 16cb1a2740a273da5a03e215175e77ad  gcc/testsuite/gcc.target/riscv/zicfilp-func-entry.c
+ cd278cfb79b54565e3bccc2b9830347d  gcc/testsuite/gcc.target/riscv/zicfilp-gpr-save.c
+ 9fa7ab5acb1c7f1093d8ebe73e9de0a2  gcc/testsuite/gcc.target/riscv/zicfilp-indirect-return.c
+ 5ac756af790dd11c1b9136b13a0a3ea8  gcc/testsuite/gcc.target/riscv/zicfilp-nonlocal-goto.c
+ efa65e1ac5910723edbf49ea512cb88b  gcc/testsuite/gcc.target/riscv/zicfilp-setjmp.c
  6a3cadb1f825d1f651694c6dccf8c9ce  gcc/testsuite/gcc.target/riscv/zicfilp-trampoline.c
  9e2b7d51508e711792db8a77e0ce0579  gcc/testsuite/gcc.target/riscv/zicond-ice-1.c
  f8f761b2e6d372567e0ea4eb9ae20fb4  gcc/testsuite/gcc.target/riscv/zicond-ice-2.c
*************** cbd03f59c658425aa443e870f7904e76  gcc/te
*** 113397,113402 ****
--- 113457,113463 ----
  e9f58df1de071d2b106b16b3af8f6764  gcc/testsuite/gfortran.dg/asan/associate_59.f90
  f3a2f2d532dfb58980122e4734146c0d  gcc/testsuite/gfortran.dg/asan/assumed_rank_26.f90
  32f63bfc5a1fd9dda988b63c860b03bd  gcc/testsuite/gfortran.dg/asan/finalize_1.f90
+ 08c0f919c44721b560036c804b8f4611  gcc/testsuite/gfortran.dg/asan/implied_do_alloc_comp_leak_1.f90
  66de6cb3bf07d14487491fac7d1ee72f  gcc/testsuite/gfortran.dg/asan/pointer_assign_16.f90
  68c306b7235f43b669fee04a590362d9  gcc/testsuite/gfortran.dg/asan/pr110415-2.f90
  5ba36953a293a48947580de915906563  gcc/testsuite/gfortran.dg/asan/pr110415-3.f90
*************** c3ff223c334c03e16db45ce26e2eea4a  gcc/te
*** 114598,114604 ****
  b3ff2dff195429e6641177e464dacd90  gcc/testsuite/gfortran.dg/coarray/associate_1.f90
  21f18575fa619cf0b7fba877cb8db97f  gcc/testsuite/gfortran.dg/coarray/atomic_1.f90
  70b6826ced0aac4e971ce971d39be3d3  gcc/testsuite/gfortran.dg/coarray/atomic_2.f90
! ad7091b1dd04bc290e97427ef774cf08  gcc/testsuite/gfortran.dg/coarray/caf.exp
  a1093e682d1d78384f50968f6210e05f  gcc/testsuite/gfortran.dg/coarray/class_1.f90
  efbd93f7ffe8fbf5291dda937b7e6f15  gcc/testsuite/gfortran.dg/coarray/co_reduce_string.f90
  88d3841a11fa3b39443f1e16cb47b9ec  gcc/testsuite/gfortran.dg/coarray/coarray_allocated.f90
--- 114659,114665 ----
  b3ff2dff195429e6641177e464dacd90  gcc/testsuite/gfortran.dg/coarray/associate_1.f90
  21f18575fa619cf0b7fba877cb8db97f  gcc/testsuite/gfortran.dg/coarray/atomic_1.f90
  70b6826ced0aac4e971ce971d39be3d3  gcc/testsuite/gfortran.dg/coarray/atomic_2.f90
! c0d713972b1526d7d40c449a9490670e  gcc/testsuite/gfortran.dg/coarray/caf.exp
  a1093e682d1d78384f50968f6210e05f  gcc/testsuite/gfortran.dg/coarray/class_1.f90
  efbd93f7ffe8fbf5291dda937b7e6f15  gcc/testsuite/gfortran.dg/coarray/co_reduce_string.f90
  88d3841a11fa3b39443f1e16cb47b9ec  gcc/testsuite/gfortran.dg/coarray/coarray_allocated.f90
*************** ea0c8f606b40e128514e68c437210991  gcc/te
*** 116679,116687 ****
  2fbe08279951fcf4d5378402ec69617f  gcc/testsuite/gfortran.dg/gomp/declare-mapper-6.f90
  c0f12c2cbdf05de833a7b126bba981ba  gcc/testsuite/gfortran.dg/gomp/declare-mapper-7.f90
  64e62b03ab3e24a3a50176ae4cc4d925  gcc/testsuite/gfortran.dg/gomp/declare-reduction-1.f90
! 8d6c8db1d619ede57ea9b994812619d0  gcc/testsuite/gfortran.dg/gomp/declare-reduction-2.f90
  50ccf43b00095b0ac8f7f40d24996595  gcc/testsuite/gfortran.dg/gomp/declare-reduction-3.f90
  13ba282a1d1cb06d04c43ebd7e4a4735  gcc/testsuite/gfortran.dg/gomp/declare-reduction-4.f90
  f771e918155eed02d90e026b9c163449  gcc/testsuite/gfortran.dg/gomp/declare-simd-1.f90
  57864e06c09c2a6cc2c1d34d921c8d24  gcc/testsuite/gfortran.dg/gomp/declare-simd-2.f90
  2a1d11803d89a25e412300a0b880260f  gcc/testsuite/gfortran.dg/gomp/declare-simd-3.f90
--- 116740,116749 ----
  2fbe08279951fcf4d5378402ec69617f  gcc/testsuite/gfortran.dg/gomp/declare-mapper-6.f90
  c0f12c2cbdf05de833a7b126bba981ba  gcc/testsuite/gfortran.dg/gomp/declare-mapper-7.f90
  64e62b03ab3e24a3a50176ae4cc4d925  gcc/testsuite/gfortran.dg/gomp/declare-reduction-1.f90
! 223baf5df5e1298dad4aff7b68bb5351  gcc/testsuite/gfortran.dg/gomp/declare-reduction-2.f90
  50ccf43b00095b0ac8f7f40d24996595  gcc/testsuite/gfortran.dg/gomp/declare-reduction-3.f90
  13ba282a1d1cb06d04c43ebd7e4a4735  gcc/testsuite/gfortran.dg/gomp/declare-reduction-4.f90
+ 06a13437c607741dd3f92cf549aa8ec7  gcc/testsuite/gfortran.dg/gomp/declare-reduction-5.f90
  f771e918155eed02d90e026b9c163449  gcc/testsuite/gfortran.dg/gomp/declare-simd-1.f90
  57864e06c09c2a6cc2c1d34d921c8d24  gcc/testsuite/gfortran.dg/gomp/declare-simd-2.f90
  2a1d11803d89a25e412300a0b880260f  gcc/testsuite/gfortran.dg/gomp/declare-simd-3.f90
*************** eb62c90a8f09d99ced7d11fdd2d9ee49  gcc/te
*** 117186,117195 ****
  e3f27671996dac00e345c87ba8a3f791  gcc/testsuite/gfortran.dg/gomp/tile-non-rectangular-3.f90
  87b149e776c19cccef9938aa4dfe72bf  gcc/testsuite/gfortran.dg/gomp/tile-unroll-1.f90
  100fa4f88e99d4b2628209ea7a8175f6  gcc/testsuite/gfortran.dg/gomp/tile-unroll-2.f90
! fb28001239de4cc56491de738193bb3d  gcc/testsuite/gfortran.dg/gomp/udr1.f90
! 6d6a60280162619a24ed1d28aa1eb877  gcc/testsuite/gfortran.dg/gomp/udr2.f90
! 6ddb9641f92715d3a3298771fab84b43  gcc/testsuite/gfortran.dg/gomp/udr3.f90
! e1349af3c0c1831ec4f3035a8539679a  gcc/testsuite/gfortran.dg/gomp/udr4.f90
  85dc0f63e4f8c72af7690c5b3e31232d  gcc/testsuite/gfortran.dg/gomp/udr5.f90
  4be69272338362c6a969ab47082c5fcc  gcc/testsuite/gfortran.dg/gomp/udr6.f90
  186f9bb4f37e50c00e5be84dc3319bb0  gcc/testsuite/gfortran.dg/gomp/udr7.f90
--- 117248,117257 ----
  e3f27671996dac00e345c87ba8a3f791  gcc/testsuite/gfortran.dg/gomp/tile-non-rectangular-3.f90
  87b149e776c19cccef9938aa4dfe72bf  gcc/testsuite/gfortran.dg/gomp/tile-unroll-1.f90
  100fa4f88e99d4b2628209ea7a8175f6  gcc/testsuite/gfortran.dg/gomp/tile-unroll-2.f90
! 7b9e7a6ee3b8022c2f81b69a0b8f7d78  gcc/testsuite/gfortran.dg/gomp/udr1.f90
! 8d12b1b3c921e4fd0ccdd515266e0aea  gcc/testsuite/gfortran.dg/gomp/udr2.f90
! 8d737ba39fd3b379528fca29919bbdac  gcc/testsuite/gfortran.dg/gomp/udr3.f90
! aa3ff1bd02d21e6b26854d92eed9a2f6  gcc/testsuite/gfortran.dg/gomp/udr4.f90
  85dc0f63e4f8c72af7690c5b3e31232d  gcc/testsuite/gfortran.dg/gomp/udr5.f90
  4be69272338362c6a969ab47082c5fcc  gcc/testsuite/gfortran.dg/gomp/udr6.f90
  186f9bb4f37e50c00e5be84dc3319bb0  gcc/testsuite/gfortran.dg/gomp/udr7.f90
*************** ab43a12e9d7dd4f0eed4d087fc19a84f  gcc/te
*** 118462,118467 ****
--- 118524,118530 ----
  33eb50db1247aefc95a8f0bcc1c23951  gcc/testsuite/gfortran.dg/namelist_100.f90
  6d976ec444b00238a9bfc57f681c6c05  gcc/testsuite/gfortran.dg/namelist_101.f90
  eff259516b93a9cda51eb967046a18bb  gcc/testsuite/gfortran.dg/namelist_102.f90
+ 08773389b8af2208d107b8db29ae24fc  gcc/testsuite/gfortran.dg/namelist_103.f90
  02a533763d199c5afa28bec631ca6b9e  gcc/testsuite/gfortran.dg/namelist_11.f
  fadabd8643639e650a8499262b9a767e  gcc/testsuite/gfortran.dg/namelist_12.f
  637100e10c22e1d286db1ce10741e289  gcc/testsuite/gfortran.dg/namelist_13.f90
*************** cb57540320d67acb41e7efaa7ba125d0  gcc/te
*** 121547,121552 ****
--- 121610,121616 ----
  56a3a5f8ff51a24ce353221e7324130b  gcc/testsuite/gfortran.dg/warn_undefined_vars_3.f90
  15546f4c6b4226c2e0d73ba60c0a5549  gcc/testsuite/gfortran.dg/warn_undefined_vars_4.f90
  0018d0733d18a0f47c6da784c3973fb6  gcc/testsuite/gfortran.dg/warn_unused_but_set_1.f90
+ c259ba3b6590fa830ea50bba33344f9a  gcc/testsuite/gfortran.dg/warn_unused_but_set_variable_2.f90
  6a3b31dd7967f719de6ae9da27ef1896  gcc/testsuite/gfortran.dg/warn_unused_but_set_variable_3.f90
  faef1baec47674d096569b4803422d64  gcc/testsuite/gfortran.dg/warn_unused_dummy_argument_1.f90
  9cdfca84c19b8b4bfd5f9be4a921f068  gcc/testsuite/gfortran.dg/warn_unused_dummy_argument_2.f90
*************** acc696967fd0d2302cfab5304ee3a970  gcc/te
*** 125624,125629 ****
--- 125688,125696 ----
  e4a127b46129811de1774562e29fb8fc  gcc/testsuite/gnat.dg/opt106_pkg2.ads
  9d150b19ff3791d45b239fbe539ca3ec  gcc/testsuite/gnat.dg/opt107.adb
  b639e95e2056957733aa779c0c757061  gcc/testsuite/gnat.dg/opt107_pkg.ads
+ af8caf054e9f24dae035badef90a8f2a  gcc/testsuite/gnat.dg/opt108.adb
+ da70c6518095833df6c7b3cb03570cb2  gcc/testsuite/gnat.dg/opt108_pkg.adb
+ ba997a6963d1723f3440798cec09d743  gcc/testsuite/gnat.dg/opt108_pkg.ads
  5d50fb38b1ab84c39760906cb103c522  gcc/testsuite/gnat.dg/opt10_pkg.ads
  603264d4afdd2fd2174ea9c4cf4653ed  gcc/testsuite/gnat.dg/opt11.adb
  53160585b3a5d820b653e1e0d5f14c75  gcc/testsuite/gnat.dg/opt11.ads
*************** d19a0449bac1fb497429a88904f3d658  gcc/te
*** 128949,128955 ****
  50c0f03762d429c13fd0302c79d90157  gcc/testsuite/go.test/test/varinit.go
  6447a99ae1e2eec266af1ceab6a7343c  gcc/testsuite/go.test/test/zerodivide.go
  340e08c9aef97a2da8f4cd4568d52675  gcc/testsuite/jit.dg/add-driver-options-testlib.c
! fef92b23b20b3d99fdd95fa493cfd0bb  gcc/testsuite/jit.dg/all-non-failing-tests.h
  7bc42e89ae77872c8fc581b4babf1832  gcc/testsuite/jit.dg/create-code-for-hello-world-executable.h
  6599d673695ac45c69f897e7b9643cdb  gcc/testsuite/jit.dg/harness.h
  c2ab8a50f6099a876788d5e2b281249b  gcc/testsuite/jit.dg/jit.exp
--- 129016,129022 ----
  50c0f03762d429c13fd0302c79d90157  gcc/testsuite/go.test/test/varinit.go
  6447a99ae1e2eec266af1ceab6a7343c  gcc/testsuite/go.test/test/zerodivide.go
  340e08c9aef97a2da8f4cd4568d52675  gcc/testsuite/jit.dg/add-driver-options-testlib.c
! 8f053514f1862f26b47e1fab201ed80a  gcc/testsuite/jit.dg/all-non-failing-tests.h
  7bc42e89ae77872c8fc581b4babf1832  gcc/testsuite/jit.dg/create-code-for-hello-world-executable.h
  6599d673695ac45c69f897e7b9643cdb  gcc/testsuite/jit.dg/harness.h
  c2ab8a50f6099a876788d5e2b281249b  gcc/testsuite/jit.dg/jit.exp
*************** fcf20b943f3e9affe23adec9277064a7  gcc/te
*** 128981,128986 ****
--- 129048,129054 ----
  a7c022c706c188b23540bad48fbc787e  gcc/testsuite/jit.dg/test-cast.c
  6bfe3202df4a59189a757d8df0af0d9d  gcc/testsuite/jit.dg/test-cold-attribute.c
  dc3f5924516f317d0e822022186a89d9  gcc/testsuite/jit.dg/test-combination.c
+ e645dc9f03bb27249fc2468d0450065a  gcc/testsuite/jit.dg/test-comparison.c
  2e035396a65d6176ba9798f667c5621a  gcc/testsuite/jit.dg/test-compile-to-assembler.c
  897c5ab27b1fd560e0e9f30525797a81  gcc/testsuite/jit.dg/test-compile-to-dynamic-library.c
  23693177964abb2770eacb1f629a77af  gcc/testsuite/jit.dg/test-compile-to-executable.c
*************** e1de260f2ea5cb4cf607c76292f03edc  gcc/te
*** 129113,129119 ****
  ce096ee573017f44e9c3cd0933f0d297  gcc/testsuite/jit.dg/test-quadratic.cc
  df424c268791473ace062ef873c388e2  gcc/testsuite/jit.dg/test-reading-struct.c
  7267a07ede9df92214d664d836747741  gcc/testsuite/jit.dg/test-readonly.c
! e167d73b7dc287235f76fda5c3d44a54  gcc/testsuite/jit.dg/test-reflection.c
  38693c5e37ab7f738ee4f05bc4688ec0  gcc/testsuite/jit.dg/test-register-variable.c
  47b4f4e3718b24cb9c37ddec1f3fb5c2  gcc/testsuite/jit.dg/test-restrict-attribute.c
  e75fb18f9aff909b3c6639a4dac3074c  gcc/testsuite/jit.dg/test-restrict.c
--- 129181,129187 ----
  ce096ee573017f44e9c3cd0933f0d297  gcc/testsuite/jit.dg/test-quadratic.cc
  df424c268791473ace062ef873c388e2  gcc/testsuite/jit.dg/test-reading-struct.c
  7267a07ede9df92214d664d836747741  gcc/testsuite/jit.dg/test-readonly.c
! d622d81b81294938e8fe6e604353ac6e  gcc/testsuite/jit.dg/test-reflection.c
  38693c5e37ab7f738ee4f05bc4688ec0  gcc/testsuite/jit.dg/test-register-variable.c
  47b4f4e3718b24cb9c37ddec1f3fb5c2  gcc/testsuite/jit.dg/test-restrict-attribute.c
  e75fb18f9aff909b3c6639a4dac3074c  gcc/testsuite/jit.dg/test-restrict.c
*************** d0856fd6384c8aaf331fc9c325f6769a  gcc/te
*** 129133,129139 ****
  1dbd5675d95a6e7aa3ff419392d6dedd  gcc/testsuite/jit.dg/test-threads.c
  23fe4e6ebca22d47798698e1a9eed222  gcc/testsuite/jit.dg/test-tls.c
  af7112223f23a060486e371aaa393e98  gcc/testsuite/jit.dg/test-trap.c
! adaaa89118d93ac8548b4a9b93d01b03  gcc/testsuite/jit.dg/test-types.c
  9904e17b6165343142ab782d4bf78127  gcc/testsuite/jit.dg/test-used-attribute.c
  e309c53b14c724939a1564046c6a5df2  gcc/testsuite/jit.dg/test-using-global.c
  87b9d64f8250158521cb3cae842ff2cb  gcc/testsuite/jit.dg/test-validly-unreachable-block.c
--- 129201,129207 ----
  1dbd5675d95a6e7aa3ff419392d6dedd  gcc/testsuite/jit.dg/test-threads.c
  23fe4e6ebca22d47798698e1a9eed222  gcc/testsuite/jit.dg/test-tls.c
  af7112223f23a060486e371aaa393e98  gcc/testsuite/jit.dg/test-trap.c
! 6c85955ca504c9dc707812133728fcc5  gcc/testsuite/jit.dg/test-types.c
  9904e17b6165343142ab782d4bf78127  gcc/testsuite/jit.dg/test-used-attribute.c
  e309c53b14c724939a1564046c6a5df2  gcc/testsuite/jit.dg/test-using-global.c
  87b9d64f8250158521cb3cae842ff2cb  gcc/testsuite/jit.dg/test-validly-unreachable-block.c
*************** fcbf8eb2a14541bdc9d966bf758cf488  gcc/te
*** 129163,129169 ****
  923e0b95cff5c76d4439a0242519f685  gcc/testsuite/lib/file-format.exp
  a1935fc2fb38938a9de4348b36350eda  gcc/testsuite/lib/fortran-modules.exp
  a0ed36c59884ca42f622cc1d30faff4d  gcc/testsuite/lib/fortran-torture.exp
! 999cfa769885f2a876551163115fe602  gcc/testsuite/lib/g++-dg.exp
  8f61c91e9ce681c3472f2a307c7d7f00  gcc/testsuite/lib/g++.exp
  2ebe67e0e1de7772a7339a397dba5dc4  gcc/testsuite/lib/gcc-defs.exp
  beea177adf92fe95e8df49c09e98fb22  gcc/testsuite/lib/gcc-dg.exp
--- 129231,129237 ----
  923e0b95cff5c76d4439a0242519f685  gcc/testsuite/lib/file-format.exp
  a1935fc2fb38938a9de4348b36350eda  gcc/testsuite/lib/fortran-modules.exp
  a0ed36c59884ca42f622cc1d30faff4d  gcc/testsuite/lib/fortran-torture.exp
! bf06b638a872ab614399c338e33da6af  gcc/testsuite/lib/g++-dg.exp
  8f61c91e9ce681c3472f2a307c7d7f00  gcc/testsuite/lib/g++.exp
  2ebe67e0e1de7772a7339a397dba5dc4  gcc/testsuite/lib/gcc-defs.exp
  beea177adf92fe95e8df49c09e98fb22  gcc/testsuite/lib/gcc-dg.exp
*************** d84a04f02b348b9b24a659413d60a25b  gcc/te
*** 129209,129215 ****
  cdfac88acd33dec95625eb0cca4bc571  gcc/testsuite/lib/sarif-schema-2.1.0.json
  808895f3fef94ae1653cf826a4c6c9de  gcc/testsuite/lib/sarif-schema-2.2-prerelease-2024-08-08.json
  5a6cedce32c4c01005adb940226eae62  gcc/testsuite/lib/sarif.py
! 1e5b0296ce2a04d178727e103e1feab1  gcc/testsuite/lib/scanasm.exp
  81addbeaa55d8c8d361049d045d21b6e  gcc/testsuite/lib/scandump.exp
  daccee9e5e177dcd385268830f15bd84  gcc/testsuite/lib/scanhtml.exp
  a33ed92a9095d29763dd3ba2493b26d7  gcc/testsuite/lib/scanipa.exp
--- 129277,129283 ----
  cdfac88acd33dec95625eb0cca4bc571  gcc/testsuite/lib/sarif-schema-2.1.0.json
  808895f3fef94ae1653cf826a4c6c9de  gcc/testsuite/lib/sarif-schema-2.2-prerelease-2024-08-08.json
  5a6cedce32c4c01005adb940226eae62  gcc/testsuite/lib/sarif.py
! 48d663ee59b30b58dbd6982840814e57  gcc/testsuite/lib/scanasm.exp
  81addbeaa55d8c8d361049d045d21b6e  gcc/testsuite/lib/scandump.exp
  daccee9e5e177dcd385268830f15bd84  gcc/testsuite/lib/scanhtml.exp
  a33ed92a9095d29763dd3ba2493b26d7  gcc/testsuite/lib/scanipa.exp
*************** de9eeadec9703aff96169206e31a3a22  gcc/te
*** 129225,129231 ****
  275f7eb9618e6b097a58c1fba25cdb9c  gcc/testsuite/lib/scanwpaipa.exp
  9bc4cbcf0cb4f1aa30a8cf3142d157eb  gcc/testsuite/lib/target-libpath.exp
  6f6a566231f79b409eb113cf2e7f5132  gcc/testsuite/lib/target-supports-dg.exp
! f28884427934d3652667ceffd91a5bb4  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
--- 129293,129299 ----
  275f7eb9618e6b097a58c1fba25cdb9c  gcc/testsuite/lib/scanwpaipa.exp
  9bc4cbcf0cb4f1aa30a8cf3142d157eb  gcc/testsuite/lib/target-libpath.exp
  6f6a566231f79b409eb113cf2e7f5132  gcc/testsuite/lib/target-supports-dg.exp
! 31f13b67afd050b5b9bb06ec7c98bc03  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
*** 132009,132015 ****
  7ae6e65fc4154cb546728c98d8ef8f9c  gcc/timevar.def
  160bb6626a9562507750456253c82eb4  gcc/timevar.h
  af430d420eee56a4d869b7421ddb08b9  gcc/topics/pass-events.h
! 74d9f2c00376136f1e480bf4efff7a36  gcc/toplev.cc
  4cc76bc48e83cd9bdd4f991959a6f230  gcc/toplev.h
  08a29208cd04c7f3a5f2b43bec77b277  gcc/tracer.cc
  461d12af5a299c303884d0d07511a6a9  gcc/tracer.h
--- 132077,132083 ----
  7ae6e65fc4154cb546728c98d8ef8f9c  gcc/timevar.def
  160bb6626a9562507750456253c82eb4  gcc/timevar.h
  af430d420eee56a4d869b7421ddb08b9  gcc/topics/pass-events.h
! 35d78a05799f4ad5feaaa1f036300c33  gcc/toplev.cc
  4cc76bc48e83cd9bdd4f991959a6f230  gcc/toplev.h
  08a29208cd04c7f3a5f2b43bec77b277  gcc/tracer.cc
  461d12af5a299c303884d0d07511a6a9  gcc/tracer.h
*************** ffbdc6cd519d8fe2b404591eecafac89  gcc/tr
*** 132054,132060 ****
  da9de571efa01bc66c1db48e416352ae  gcc/tree-logical-location.cc
  3fc6fceee69fd62a808aa84716a854b7  gcc/tree-logical-location.h
  171f3ff8f6df290bf7db7fd2eb70e077  gcc/tree-loop-distribution.cc
! b980e97059595b9c229e76799b1309df  gcc/tree-nested.cc
  7bdbfccebe0ea4963fd220c0676ad6a2  gcc/tree-nested.h
  d239500c752edeffb49a14623c8a522a  gcc/tree-nrv.cc
  8157c4cf3bda13c019a5c6784e7e9e70  gcc/tree-object-size.cc
--- 132122,132128 ----
  da9de571efa01bc66c1db48e416352ae  gcc/tree-logical-location.cc
  3fc6fceee69fd62a808aa84716a854b7  gcc/tree-logical-location.h
  171f3ff8f6df290bf7db7fd2eb70e077  gcc/tree-loop-distribution.cc
! 9481e12742d3ca76c5a21661a3b82130  gcc/tree-nested.cc
  7bdbfccebe0ea4963fd220c0676ad6a2  gcc/tree-nested.h
  d239500c752edeffb49a14623c8a522a  gcc/tree-nrv.cc
  8157c4cf3bda13c019a5c6784e7e9e70  gcc/tree-object-size.cc
*************** fd1bf671e636cb196f153568d80a7481  gcc/tr
*** 132096,132124 ****
  b1c1f1362ac401ede3373f8aa23c02f1  gcc/tree-ssa-live.cc
  7c36b95c9d109be3302936ceed49fb4f  gcc/tree-ssa-live.h
  8810d451bbe1958d41d972bc0224c156  gcc/tree-ssa-loop-ch.cc
! 31a81dd99f3d7b63e7f58b05fa41f5b2  gcc/tree-ssa-loop-im.cc
  972578d2900bb38415f9eb02b271096c  gcc/tree-ssa-loop-ivcanon.cc
! 0ff8b0d1d7dd766e7d9347fd91cff3cb  gcc/tree-ssa-loop-ivopts.cc
  73db7c26eb3c2afa63524b388a9849fd  gcc/tree-ssa-loop-ivopts.h
  9c2771407c6cb32b3d230d8b3c87a2b8  gcc/tree-ssa-loop-manip.cc
  d6013c7f2ea70d40b0d82c53eacccd45  gcc/tree-ssa-loop-manip.h
! 1f5fd3f718f384d0567fc90206033ead  gcc/tree-ssa-loop-niter.cc
  4b19cd267d749c27d7e2b616b46fe8d6  gcc/tree-ssa-loop-niter.h
  1b3164ae2d55cbf742ebf0774d0106cf  gcc/tree-ssa-loop-prefetch.cc
  f7b409734eec08cd9a87244dc663df3a  gcc/tree-ssa-loop-split.cc
  e095960ef0fe00db5db9f4a2e88515d1  gcc/tree-ssa-loop-unswitch.cc
  faa18178392bba086edee765e464318c  gcc/tree-ssa-loop.cc
  c1590659dad2b41a69adb7654db65644  gcc/tree-ssa-loop.h
! 09680ffb8471185727088b92d1154f46  gcc/tree-ssa-math-opts.cc
  fa83f982a805985b3a3da2ca5e10e43a  gcc/tree-ssa-math-opts.h
  56d25f9d7a5f35aa3637460c00b7eb7e  gcc/tree-ssa-operands.cc
  f83d0b12185538e6f679296bebfe3d2f  gcc/tree-ssa-operands.h
! 5d46e331259d2d1d4cbae7198810ddc1  gcc/tree-ssa-phiopt.cc
  fe5ca56c2551cb5cbd256cfafdcabecd  gcc/tree-ssa-phiprop.cc
  bc7a10fe1c5522f4d907263e36ac5945  gcc/tree-ssa-pre.cc
  f39acc236b21f9150a1ef4359aef585e  gcc/tree-ssa-propagate.cc
  d38017eb69a50f24b5e47ee97928afde  gcc/tree-ssa-propagate.h
! fd14a1fb7e916f0952a233f9c3dda4a8  gcc/tree-ssa-reassoc.cc
  9a67eb78dfcbdb36f2fbf9b5dd4ff29c  gcc/tree-ssa-reassoc.h
  eb3a66517ec5e91d910c12aead1a961d  gcc/tree-ssa-sccvn.cc
  969557a6ff2537ae4a6d36fde566e436  gcc/tree-ssa-sccvn.h
--- 132164,132192 ----
  b1c1f1362ac401ede3373f8aa23c02f1  gcc/tree-ssa-live.cc
  7c36b95c9d109be3302936ceed49fb4f  gcc/tree-ssa-live.h
  8810d451bbe1958d41d972bc0224c156  gcc/tree-ssa-loop-ch.cc
! f1057b330ee10c6234f1f927ffba2f4d  gcc/tree-ssa-loop-im.cc
  972578d2900bb38415f9eb02b271096c  gcc/tree-ssa-loop-ivcanon.cc
! 1bcce7949ea1ff7322a6dfc3db7e7755  gcc/tree-ssa-loop-ivopts.cc
  73db7c26eb3c2afa63524b388a9849fd  gcc/tree-ssa-loop-ivopts.h
  9c2771407c6cb32b3d230d8b3c87a2b8  gcc/tree-ssa-loop-manip.cc
  d6013c7f2ea70d40b0d82c53eacccd45  gcc/tree-ssa-loop-manip.h
! 2a09600087431bdcc8a3257287be029c  gcc/tree-ssa-loop-niter.cc
  4b19cd267d749c27d7e2b616b46fe8d6  gcc/tree-ssa-loop-niter.h
  1b3164ae2d55cbf742ebf0774d0106cf  gcc/tree-ssa-loop-prefetch.cc
  f7b409734eec08cd9a87244dc663df3a  gcc/tree-ssa-loop-split.cc
  e095960ef0fe00db5db9f4a2e88515d1  gcc/tree-ssa-loop-unswitch.cc
  faa18178392bba086edee765e464318c  gcc/tree-ssa-loop.cc
  c1590659dad2b41a69adb7654db65644  gcc/tree-ssa-loop.h
! ba282fb45d22dd7b9f51e27d263cda3d  gcc/tree-ssa-math-opts.cc
  fa83f982a805985b3a3da2ca5e10e43a  gcc/tree-ssa-math-opts.h
  56d25f9d7a5f35aa3637460c00b7eb7e  gcc/tree-ssa-operands.cc
  f83d0b12185538e6f679296bebfe3d2f  gcc/tree-ssa-operands.h
! d4e365d089d37e8c913c54062717c316  gcc/tree-ssa-phiopt.cc
  fe5ca56c2551cb5cbd256cfafdcabecd  gcc/tree-ssa-phiprop.cc
  bc7a10fe1c5522f4d907263e36ac5945  gcc/tree-ssa-pre.cc
  f39acc236b21f9150a1ef4359aef585e  gcc/tree-ssa-propagate.cc
  d38017eb69a50f24b5e47ee97928afde  gcc/tree-ssa-propagate.h
! 6e6117c73429cd3635e978bbc73398a5  gcc/tree-ssa-reassoc.cc
  9a67eb78dfcbdb36f2fbf9b5dd4ff29c  gcc/tree-ssa-reassoc.h
  eb3a66517ec5e91d910c12aead1a961d  gcc/tree-ssa-sccvn.cc
  969557a6ff2537ae4a6d36fde566e436  gcc/tree-ssa-sccvn.h
*************** f8119a019450befbbf3e3e40b010cf74  gcc/tr
*** 132152,132174 ****
  31edb0540b970325ae5c017fddf7eb02  gcc/tree-switch-conversion.cc
  fa20fc0102b6036d5fa58b953c127e15  gcc/tree-switch-conversion.h
  6a0f6268d598b3c59871ad41e01f33c1  gcc/tree-tailcall.cc
! 79d28d0d4ca64025fb1a08e9dcbcb5c1  gcc/tree-vect-data-refs.cc
  8d27b93ebf87d8bcc1776ea3342d49c8  gcc/tree-vect-generic.cc
! 5f1348375ddfc2de98732ac2e3b1c8d4  gcc/tree-vect-loop-manip.cc
! 34efe21571a370a41fad659539e4350e  gcc/tree-vect-loop.cc
  4fae14fe305cc80a323b06b7e7865c05  gcc/tree-vect-patterns.cc
  4eab6d0f40af2653170a2f7ecf2d6fc1  gcc/tree-vect-slp-patterns.cc
  f702e9e693012b61afb43981b59768cb  gcc/tree-vect-slp.cc
! 151339ea3bf2b1a62eac3aee470b8353  gcc/tree-vect-stmts.cc
  42032e04f389a2e0f43fbb46ac091dac  gcc/tree-vector-builder.cc
  4a1b4947e64a076fdca46d14aab2181f  gcc/tree-vector-builder.h
! 13e9cef2390dd1636d08ad094097b58f  gcc/tree-vectorizer.cc
! 6201aff3ee6195478897f3dfa1642cf8  gcc/tree-vectorizer.h
! 06edc6b7e3bcc27f8a1767c3a653e931  gcc/tree-vrp.cc
  c946b0d59b15393b95e356052c027eed  gcc/tree-vrp.h
! a2af3d8258859a2fe1149b921165f8be  gcc/tree.cc
  f88475a43ca5e7c59112c941875a762c  gcc/tree.def
! c3a5eefdeb05d9c92fae24654ea30d47  gcc/tree.h
  56652e612288132aa8395fdf720b0146  gcc/treestruct.def
  6c6350469a3dbb37f658f247d16ed872  gcc/tristate.cc
  704359710c2d40a58b6646b2da626443  gcc/tristate.h
--- 132220,132242 ----
  31edb0540b970325ae5c017fddf7eb02  gcc/tree-switch-conversion.cc
  fa20fc0102b6036d5fa58b953c127e15  gcc/tree-switch-conversion.h
  6a0f6268d598b3c59871ad41e01f33c1  gcc/tree-tailcall.cc
! 1e7175c3baf76e10f726ed4ce66e6c1c  gcc/tree-vect-data-refs.cc
  8d27b93ebf87d8bcc1776ea3342d49c8  gcc/tree-vect-generic.cc
! e831ebfca544eefb262286a3269fa8ce  gcc/tree-vect-loop-manip.cc
! 9de44d9b245ef555cc4d368457deb3a0  gcc/tree-vect-loop.cc
  4fae14fe305cc80a323b06b7e7865c05  gcc/tree-vect-patterns.cc
  4eab6d0f40af2653170a2f7ecf2d6fc1  gcc/tree-vect-slp-patterns.cc
  f702e9e693012b61afb43981b59768cb  gcc/tree-vect-slp.cc
! f8a1377e48953eeb14b43ce87ef96069  gcc/tree-vect-stmts.cc
  42032e04f389a2e0f43fbb46ac091dac  gcc/tree-vector-builder.cc
  4a1b4947e64a076fdca46d14aab2181f  gcc/tree-vector-builder.h
! a87f80d9a1405f816a0b6d544400beef  gcc/tree-vectorizer.cc
! b987fb068f5b37935b7a2ef6533c8149  gcc/tree-vectorizer.h
! ca9cb422fed204a85a3a1a56b3ca8812  gcc/tree-vrp.cc
  c946b0d59b15393b95e356052c027eed  gcc/tree-vrp.h
! 492567c5d0718a51da88ab34330c3fed  gcc/tree.cc
  f88475a43ca5e7c59112c941875a762c  gcc/tree.def
! 427b1240a6a25f018b52e245cb6aa7fd  gcc/tree.h
  56652e612288132aa8395fdf720b0146  gcc/treestruct.def
  6c6350469a3dbb37f658f247d16ed872  gcc/tristate.cc
  704359710c2d40a58b6646b2da626443  gcc/tristate.h
*************** c79610c0bd601062663853b8fcae475c  gcc/ty
*** 132183,132200 ****
  0102d3e99143514b227fb0552a6ed2f9  gcc/unique-argv.h
  df6e60fd226c010029982dccb67d2e71  gcc/valtrack.cc
  8e6c00c7b13e3ea0af5115a1da91a388  gcc/valtrack.h
- 4eda99869334c77f724a5630acdfb6cf  gcc/value-pointer-equiv.cc
- 87b8ea160aedd51d0b39987c651c19c5  gcc/value-pointer-equiv.h
  e904de1854afc7cd34a51dc8be49131d  gcc/value-prof.cc
  062dd0b6b7d499b7d7b9a11718fe3ecb  gcc/value-prof.h
! 1618d5795aa6fd02634fdfff4d2a0f39  gcc/value-query.cc
  c559980f2936e62bb80a512b1682d0fd  gcc/value-query.h
! 232e88bef5fe263fb56ac139fedbeff7  gcc/value-range-pretty-print.cc
! 4235b252ca8759d55215ee9cd42e1e93  gcc/value-range-pretty-print.h
! 7f5f741babee3f0d5e0344389149c759  gcc/value-range-storage.cc
! cb3570b7fb5f57093c5af7b1bf695f46  gcc/value-range-storage.h
! 09177461b21100d1fe07b2a443b95f3d  gcc/value-range.cc
! 407468c3950969dc8f1856a1d2cdd96e  gcc/value-range.h
  67666161e57e5be58fba9c1c031067b0  gcc/value-relation.cc
  ea7df3e5b6ab2e6e23e741431d583880  gcc/value-relation.h
  063ac1ec4666e86252dc7653bde86852  gcc/var-tracking.cc
--- 132251,132266 ----
  0102d3e99143514b227fb0552a6ed2f9  gcc/unique-argv.h
  df6e60fd226c010029982dccb67d2e71  gcc/valtrack.cc
  8e6c00c7b13e3ea0af5115a1da91a388  gcc/valtrack.h
  e904de1854afc7cd34a51dc8be49131d  gcc/value-prof.cc
  062dd0b6b7d499b7d7b9a11718fe3ecb  gcc/value-prof.h
! 94b23ebf78fac3c6088cda5028dd1b89  gcc/value-query.cc
  c559980f2936e62bb80a512b1682d0fd  gcc/value-query.h
! 5fbef6eb8dbca23654897ee8b82c0534  gcc/value-range-pretty-print.cc
! 2ac29a8fee451f101da64d0a64eefa26  gcc/value-range-pretty-print.h
! 036586a7b9d2ff4356b32777d11fcd29  gcc/value-range-storage.cc
! a53a9c85ab653caca9f26257daf5bfea  gcc/value-range-storage.h
! a7049b3fbb2204dbbdd431ca8a72a995  gcc/value-range.cc
! fbd4ea271a7976446cbfea46db271a89  gcc/value-range.h
  67666161e57e5be58fba9c1c031067b0  gcc/value-relation.cc
  ea7df3e5b6ab2e6e23e741431d583880  gcc/value-relation.h
  063ac1ec4666e86252dc7653bde86852  gcc/var-tracking.cc
*************** c4e8176c1964a5ebe0a55900f2141299  gotool
*** 132238,132251 ****
  eb2aeb3a6cffe7b26a8f1c8a2da23dcd  gotools/gofmt.1
  59530bdf33659b29e73d4adb9f9f6552  include/COPYING
  d32239bcb673463ab874e80d47fae504  include/COPYING3
! 95043aaff591525d3746625123ca5a4c  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
  dd6a82ec4242e8c91ef7d0acccd20244  include/demangle.h
  c981ff1b5b1036b8e70b3039532c357a  include/doubly-linked-list.h
  de08e3c7e21f36ea23bcc1e19ef0d81f  include/dwarf2.def
--- 132304,132317 ----
  eb2aeb3a6cffe7b26a8f1c8a2da23dcd  gotools/gofmt.1
  59530bdf33659b29e73d4adb9f9f6552  include/COPYING
  d32239bcb673463ab874e80d47fae504  include/COPYING3
! 32b171565e2e7562a2dc70032790943b  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
! 25d1c3a2dc34904f38d784ef666cec0a  include/cuda/cuda.h
  dd6a82ec4242e8c91ef7d0acccd20244  include/demangle.h
  c981ff1b5b1036b8e70b3039532c357a  include/doubly-linked-list.h
  de08e3c7e21f36ea23bcc1e19ef0d81f  include/dwarf2.def
*************** f26e462c6f89f856041d649e1dfa527e  includ
*** 132298,132304 ****
  46d6319e8ffc7eabf27cbecd6141a912  libada/configure
  ab9e00e84d092822a6cc241ba44f609b  libada/configure.ac
  46d3fe6da7a771cc2d5420c4137a6861  libatomic/.gitignore
! 12846730f6f986d5ab6cab5e78498f00  libatomic/ChangeLog
  7774b8df5edff5c25147dd50568e9695  libatomic/Makefile.am
  9d8df11efea7190e7628fd28505b1691  libatomic/Makefile.in
  7ff46642515d8d59f1f5f78b96cf1b91  libatomic/acinclude.m4
--- 132364,132370 ----
  46d6319e8ffc7eabf27cbecd6141a912  libada/configure
  ab9e00e84d092822a6cc241ba44f609b  libada/configure.ac
  46d3fe6da7a771cc2d5420c4137a6861  libatomic/.gitignore
! 1c03aaf22fe7bd009812808b64e6eaa9  libatomic/ChangeLog
  7774b8df5edff5c25147dd50568e9695  libatomic/Makefile.am
  9d8df11efea7190e7628fd28505b1691  libatomic/Makefile.in
  7ff46642515d8d59f1f5f78b96cf1b91  libatomic/acinclude.m4
*************** c2ba65aefa7f432b1b7da4bddfaf3862  libato
*** 132311,132317 ****
  2c2c0c76544d0cab278e1daa606d7bac  libatomic/config/arm/exch_n.c
  03721fea5b66271f6af702a80b072f47  libatomic/config/arm/host-config.h
  db43cf5a187a91251ef3198570679f95  libatomic/config/ia64/host-config.h
! ac236f5c9bf999f1b3751f6cbdff2746  libatomic/config/linux/aarch64/atomic_16.S
  b1dcad3b5f891781ba36847c97db9673  libatomic/config/linux/aarch64/host-config.h
  c9c90eb06e3ff9f716b28f94d5f5249c  libatomic/config/linux/arm/host-config.h
  900281f72479752d1787c692c18e43f8  libatomic/config/linux/arm/init.c
--- 132377,132383 ----
  2c2c0c76544d0cab278e1daa606d7bac  libatomic/config/arm/exch_n.c
  03721fea5b66271f6af702a80b072f47  libatomic/config/arm/host-config.h
  db43cf5a187a91251ef3198570679f95  libatomic/config/ia64/host-config.h
! f3361ce6cd81a105fde4c3ee77b8c2ca  libatomic/config/linux/aarch64/atomic_16.S
  b1dcad3b5f891781ba36847c97db9673  libatomic/config/linux/aarch64/host-config.h
  c9c90eb06e3ff9f716b28f94d5f5249c  libatomic/config/linux/arm/host-config.h
  900281f72479752d1787c692c18e43f8  libatomic/config/linux/arm/init.c
*************** cffdeae41b78da05839b193e90188f55  libcod
*** 132501,132507 ****
  6419dfc879387358e95288142e569914  libcody/packet.cc
  688ece05c8b9d378b3df186808162e76  libcody/resolver.cc
  c94add0032978604acf65591bb86d2d6  libcody/server.cc
! 9bfe5fc5e3a32308c035621e0b912b60  libcpp/ChangeLog
  2bd831b17997584e38305782cebe6948  libcpp/ChangeLog.jit
  4f1e80b433907c013fc6e4eaf2b0e8aa  libcpp/Makefile.in
  b07c7863f0e7ad4e6a0915d66fc9e582  libcpp/aclocal.m4
--- 132567,132573 ----
  6419dfc879387358e95288142e569914  libcody/packet.cc
  688ece05c8b9d378b3df186808162e76  libcody/resolver.cc
  c94add0032978604acf65591bb86d2d6  libcody/server.cc
! 4ad2de10f86f9932a7fc89dc018003c2  libcpp/ChangeLog
  2bd831b17997584e38305782cebe6948  libcpp/ChangeLog.jit
  4f1e80b433907c013fc6e4eaf2b0e8aa  libcpp/Makefile.in
  b07c7863f0e7ad4e6a0915d66fc9e582  libcpp/aclocal.m4
*************** e6648c5f8f4e111883be81dc9e8dd630  libcpp
*** 132516,132528 ****
  492ac13a792a1dcf2f9c99dae6140d14  libcpp/files.cc
  d7530c9a36bef9a00a690083401e3c83  libcpp/generated_cpp_wcwidth.h
  bf0c57c21ee2aeaa654ee6781e41cad5  libcpp/identifiers.cc
! 139a1133efad4d026c278b52d6564aa9  libcpp/include/cpplib.h
  a5730f5ab9435bb5d8446830fe8f3706  libcpp/include/label-text.h
  475c6ef3f91227b1431876de0297795a  libcpp/include/line-map.h
  6c27e4af6058e741469234cdf0f74c01  libcpp/include/mkdeps.h
  0c5086e2180aacc727c73843682f1fe9  libcpp/include/rich-location.h
  1e65760d4159f777cf02dedef8a52357  libcpp/include/symtab.h
! 90f6090ff30a4f51d68181db14195e5d  libcpp/init.cc
  ca76f744b252e5faf236d92d56037649  libcpp/internal.h
  cda6f5ee4a4fce0e35c8343e245f515d  libcpp/lex.cc
  6ebf32a89523ee7be621fc42417f913f  libcpp/line-map.cc
--- 132582,132594 ----
  492ac13a792a1dcf2f9c99dae6140d14  libcpp/files.cc
  d7530c9a36bef9a00a690083401e3c83  libcpp/generated_cpp_wcwidth.h
  bf0c57c21ee2aeaa654ee6781e41cad5  libcpp/identifiers.cc
! 9299aac8dd1cd3362d437636af62d120  libcpp/include/cpplib.h
  a5730f5ab9435bb5d8446830fe8f3706  libcpp/include/label-text.h
  475c6ef3f91227b1431876de0297795a  libcpp/include/line-map.h
  6c27e4af6058e741469234cdf0f74c01  libcpp/include/mkdeps.h
  0c5086e2180aacc727c73843682f1fe9  libcpp/include/rich-location.h
  1e65760d4159f777cf02dedef8a52357  libcpp/include/symtab.h
! 62fc2bcb89c7159858cf6eb3824b0f42  libcpp/init.cc
  ca76f744b252e5faf236d92d56037649  libcpp/internal.h
  cda6f5ee4a4fce0e35c8343e245f515d  libcpp/lex.cc
  6ebf32a89523ee7be621fc42417f913f  libcpp/line-map.cc
*************** a97c47969dfc92a7666dfe3c2e1e1448  libdec
*** 132629,132642 ****
  d4974701aea29eb07237c3fe5699033a  libdecnumber/dpd/decimal64.h
  0f6db29710e7075c2fd62bc4478b3b8d  libdecnumber/dpd/decimal64Symbols.h
  055606b47e85369c5d003f6e3a1b657e  libffi/.gitattributes
! 94e13a16da0226a6b0bd9c3afe598111  libffi/ChangeLog
  0e38ead823643c45765e5fe55e7ab16b  libffi/ChangeLog.libffi
  fbbc216bc25d759a72ea3e6d734af56b  libffi/ChangeLog.libgcj
  d946d2b97454ad50a1dbfbf48923c5be  libffi/ChangeLog.v1
  cc4552d9286c17a905988bf55f96def7  libffi/HOWTO_MERGE
  ce4763670c5b7756000561f9af1ab178  libffi/LICENSE
  631bc8750a749106cf625001c1d6efb0  libffi/LICENSE-BUILDTOOLS
! 41a13f5ef35ac0b70f33310c368b895c  libffi/LOCAL_PATCHES
  e8fb2211eb1a54025c66700803f54894  libffi/MERGE
  c11244a7c5b07a31c0ad1d1918de98d0  libffi/Makefile.am
  9f4314d027dec3754bdfdccdb2d0e546  libffi/Makefile.in
--- 132695,132708 ----
  d4974701aea29eb07237c3fe5699033a  libdecnumber/dpd/decimal64.h
  0f6db29710e7075c2fd62bc4478b3b8d  libdecnumber/dpd/decimal64Symbols.h
  055606b47e85369c5d003f6e3a1b657e  libffi/.gitattributes
! 60e7a9987f2fba6c2c79a12fa04b2a7e  libffi/ChangeLog
  0e38ead823643c45765e5fe55e7ab16b  libffi/ChangeLog.libffi
  fbbc216bc25d759a72ea3e6d734af56b  libffi/ChangeLog.libgcj
  d946d2b97454ad50a1dbfbf48923c5be  libffi/ChangeLog.v1
  cc4552d9286c17a905988bf55f96def7  libffi/HOWTO_MERGE
  ce4763670c5b7756000561f9af1ab178  libffi/LICENSE
  631bc8750a749106cf625001c1d6efb0  libffi/LICENSE-BUILDTOOLS
! 830e6401c7d8ddd5ef233aff429c4954  libffi/LOCAL_PATCHES
  e8fb2211eb1a54025c66700803f54894  libffi/MERGE
  c11244a7c5b07a31c0ad1d1918de98d0  libffi/Makefile.am
  9f4314d027dec3754bdfdccdb2d0e546  libffi/Makefile.in
*************** dce3aff6e79185f3a81f2eda4bd02ae1  libffi
*** 132673,132680 ****
  7487ea3d59873bb39dc4886eb3616d5c  libffi/msvcc.sh
  5d9bfa956941ba31ab3df7821bc130ba  libffi/src/aarch64/ffi.c
  f2fed788380f9e6a2b289189b9f53748  libffi/src/aarch64/ffitarget.h
! d52c1e8968d1912403160884d1d8a095  libffi/src/aarch64/internal.h
! 5478f38570afc203e8ca81c700b9c33a  libffi/src/aarch64/sysv.S
  dc58ba07aeb41fd359b53bcaca803126  libffi/src/aarch64/win64_armasm.S
  40e4bfc4ce20447e75683f85d1801954  libffi/src/alpha/ffi.c
  d602d6b1b71200f27c9c202731a55218  libffi/src/alpha/ffitarget.h
--- 132739,132746 ----
  7487ea3d59873bb39dc4886eb3616d5c  libffi/msvcc.sh
  5d9bfa956941ba31ab3df7821bc130ba  libffi/src/aarch64/ffi.c
  f2fed788380f9e6a2b289189b9f53748  libffi/src/aarch64/ffitarget.h
! 9f90417b2ebaf356b5fcaacb4dd213d4  libffi/src/aarch64/internal.h
! e301ba06011e7cfc7501d10c1f2d8989  libffi/src/aarch64/sysv.S
  dc58ba07aeb41fd359b53bcaca803126  libffi/src/aarch64/win64_armasm.S
  40e4bfc4ce20447e75683f85d1801954  libffi/src/alpha/ffi.c
  d602d6b1b71200f27c9c202731a55218  libffi/src/alpha/ffitarget.h
*************** fc49680d0c6e77e437523ea496a6b8c4  libga6
*** 133086,133092 ****
  095aff369c31681c96b933fbedd8e05f  libga68/posix.a68
  b0d017b83148520411f1c1ebdbf28b58  libga68/sppp.awk
  4ad0dcaa2eb0b81efb58d47400b0933d  libga68/standard.a68.in
! 26c54577fc56499da8c96dc21d81d4a5  libgcc/ChangeLog
  9ce0b8c50fec68eb0555ae800e4e457e  libgcc/Makefile.in
  229424d0e39b7ca6486e3f691d3d6c91  libgcc/config.host
  46412830a2ee8a02503ccc921912c3cf  libgcc/config.in
--- 133152,133158 ----
  095aff369c31681c96b933fbedd8e05f  libga68/posix.a68
  b0d017b83148520411f1c1ebdbf28b58  libga68/sppp.awk
  4ad0dcaa2eb0b81efb58d47400b0933d  libga68/standard.a68.in
! a17f86342c11041bc91ba03feac48f43  libgcc/ChangeLog
  9ce0b8c50fec68eb0555ae800e4e457e  libgcc/Makefile.in
  229424d0e39b7ca6486e3f691d3d6c91  libgcc/config.host
  46412830a2ee8a02503ccc921912c3cf  libgcc/config.in
*************** aee2000eefb98b188a6cd051fd4e1e72  libgcc
*** 133096,133102 ****
  3d191b7f750c01d46058e6ae0cf0319f  libgcc/config/aarch64/__arm_tpidr2_restore.S
  b558b0fe1c1f3450c92a793927788906  libgcc/config/aarch64/__arm_tpidr2_save.S
  d1dea04ccca0a3e0d8c326ec80ed9e0b  libgcc/config/aarch64/__arm_za_disable.S
! 6c2c3710b9c76f04f3343af5aa6c3492  libgcc/config/aarch64/aarch64-asm.h
  9f312c9f3db89426a0989d3893f9eff5  libgcc/config/aarch64/aarch64-unwind-def.h
  d8c6d1674d20f39198bf26d837ca394c  libgcc/config/aarch64/aarch64-unwind.h
  bd96de89003e020f3d23b68bd4e4eb93  libgcc/config/aarch64/cpuinfo.c
--- 133162,133168 ----
  3d191b7f750c01d46058e6ae0cf0319f  libgcc/config/aarch64/__arm_tpidr2_restore.S
  b558b0fe1c1f3450c92a793927788906  libgcc/config/aarch64/__arm_tpidr2_save.S
  d1dea04ccca0a3e0d8c326ec80ed9e0b  libgcc/config/aarch64/__arm_za_disable.S
! d9c95ed0b01267713410196d13c6a218  libgcc/config/aarch64/aarch64-asm.h
  9f312c9f3db89426a0989d3893f9eff5  libgcc/config/aarch64/aarch64-unwind-def.h
  d8c6d1674d20f39198bf26d837ca394c  libgcc/config/aarch64/aarch64-unwind.h
  bd96de89003e020f3d23b68bd4e4eb93  libgcc/config/aarch64/cpuinfo.c
*************** be1b06de574a22c34d2cf93d2d68a4f1  libgcc
*** 134316,134322 ****
  00d4a30e4ed4a68cd6ec53feb398914b  libgcc/config/sh/t-superh
  5313f3cf3169c9872e20b6d092407b1e  libgcc/config/sol2/crtp.c
  a53a8d082f61ca60930e36b41cbe0eba  libgcc/config/sol2/crtpg.c
! ef474ec06ef2d3574f6a26ca419bc3fa  libgcc/config/sol2/gmon.c
  f277367a8a0c7fa22a13d3d0ee3bd041  libgcc/config/sol2/t-sol2
  b62705a160cd1e8153449cac615ec515  libgcc/config/sparc/crtfastmath.c
  c4a7395ad108741782369983b34c3997  libgcc/config/sparc/crti.S
--- 134382,134388 ----
  00d4a30e4ed4a68cd6ec53feb398914b  libgcc/config/sh/t-superh
  5313f3cf3169c9872e20b6d092407b1e  libgcc/config/sol2/crtp.c
  a53a8d082f61ca60930e36b41cbe0eba  libgcc/config/sol2/crtpg.c
! 6b8b373e909c43bba4e11e310037252a  libgcc/config/sol2/gmon.c
  f277367a8a0c7fa22a13d3d0ee3bd041  libgcc/config/sol2/t-sol2
  b62705a160cd1e8153449cac615ec515  libgcc/config/sparc/crtfastmath.c
  c4a7395ad108741782369983b34c3997  libgcc/config/sparc/crti.S
*************** b7bdc64c03d62f87f61d3d8a61a75d2d  libgcc
*** 134664,134677 ****
  227525d7193394128a83ce15e7642842  libgcc/vtv_start.c
  23ad2a8d256ba5dca28382d64a20e8f2  libgcc/vtv_start_preinit.c
  e50c29294062dfe571c9c053a8ec217b  libgcobol/.gitignore
! d1c0fc46b931c1d5054f3890bf17600b  libgcobol/ChangeLog
  bec1e79fc8ada70ed4ac3dc61a33d576  libgcobol/LICENSE
  8b9a5263fc79d367bdafa609a2ac1363  libgcobol/Makefile.am
  d97f1f2b9efb3a8fa8c9db9a04ea78db  libgcobol/Makefile.in
  b0657c8d818882b87c44a17db46300df  libgcobol/README
  a69c3f28d1be90eb0b0287fa450c3684  libgcobol/acinclude.m4
  916ce15e68376e661a41f183252a74ec  libgcobol/aclocal.m4
! 1087a9f3e738d3decac9f6b01d71bc9b  libgcobol/charmaps.cc
  0cb43a94ed27462e331ab6c781721373  libgcobol/charmaps.h
  94c48aaa30cd3785160dfbdf56b68d0a  libgcobol/common-defs.h
  fba8f609927b913d1ca3d30a27d0febc  libgcobol/compat/README.md
--- 134730,134743 ----
  227525d7193394128a83ce15e7642842  libgcc/vtv_start.c
  23ad2a8d256ba5dca28382d64a20e8f2  libgcc/vtv_start_preinit.c
  e50c29294062dfe571c9c053a8ec217b  libgcobol/.gitignore
! 5979a35ecfa7995f37cb134187f08611  libgcobol/ChangeLog
  bec1e79fc8ada70ed4ac3dc61a33d576  libgcobol/LICENSE
  8b9a5263fc79d367bdafa609a2ac1363  libgcobol/Makefile.am
  d97f1f2b9efb3a8fa8c9db9a04ea78db  libgcobol/Makefile.in
  b0657c8d818882b87c44a17db46300df  libgcobol/README
  a69c3f28d1be90eb0b0287fa450c3684  libgcobol/acinclude.m4
  916ce15e68376e661a41f183252a74ec  libgcobol/aclocal.m4
! 963ceeaf037e6a880f70ad233da93150  libgcobol/charmaps.cc
  0cb43a94ed27462e331ab6c781721373  libgcobol/charmaps.h
  94c48aaa30cd3785160dfbdf56b68d0a  libgcobol/common-defs.h
  fba8f609927b913d1ca3d30a27d0febc  libgcobol/compat/README.md
*************** a5821ed24abf64b452f15f29da418d17  libgco
*** 134712,134725 ****
  649e793ce5ae15bd0f3dd1fe2ecfbea9  libgcobol/gcobolio.h
  882856d895b686fc355b61771cada120  libgcobol/gfileio.cc
  0ae92e32a618fa39e3ff18a50cbfff17  libgcobol/gfileio.h
! 52ddae301eb6ab2f0f4944d7f404ad54  libgcobol/gmath.cc
  484b264b1c8d844ef5989f4d7075f520  libgcobol/gmath.h
  c8404659b04d33ae6f2fbfbe89c15080  libgcobol/inspect.cc
  8e756bd6d6fe25a0f758f96daa9d31e2  libgcobol/intrinsic.cc
  16dfd5dc1d9f83d11546c8d442151225  libgcobol/io.cc
  fbd32f035f7b4e73896b3d489e50e747  libgcobol/io.h
  6fa2e26d11c71898dae520939b992484  libgcobol/libgcobol-fp.h
! 9769b7edba6eb55c45103e24398a7269  libgcobol/libgcobol.cc
  b484db78f4117c923c0753a07ea73ea0  libgcobol/libgcobol.h
  469e0f6e21e357ff8b53b9d17373a6c8  libgcobol/libgcobol.spec.in
  88c1134ff3ee63c326541ce3f35f6699  libgcobol/m4/autoconf.m4
--- 134778,134791 ----
  649e793ce5ae15bd0f3dd1fe2ecfbea9  libgcobol/gcobolio.h
  882856d895b686fc355b61771cada120  libgcobol/gfileio.cc
  0ae92e32a618fa39e3ff18a50cbfff17  libgcobol/gfileio.h
! 72c63fe79b2bdb5311dfa07fb32c9bcc  libgcobol/gmath.cc
  484b264b1c8d844ef5989f4d7075f520  libgcobol/gmath.h
  c8404659b04d33ae6f2fbfbe89c15080  libgcobol/inspect.cc
  8e756bd6d6fe25a0f758f96daa9d31e2  libgcobol/intrinsic.cc
  16dfd5dc1d9f83d11546c8d442151225  libgcobol/io.cc
  fbd32f035f7b4e73896b3d489e50e747  libgcobol/io.h
  6fa2e26d11c71898dae520939b992484  libgcobol/libgcobol-fp.h
! d185b41a6d6e82c29b1d1a295603487f  libgcobol/libgcobol.cc
  b484db78f4117c923c0753a07ea73ea0  libgcobol/libgcobol.h
  469e0f6e21e357ff8b53b9d17373a6c8  libgcobol/libgcobol.spec.in
  88c1134ff3ee63c326541ce3f35f6699  libgcobol/m4/autoconf.m4
*************** c057a9c0bf247b066e7de6f079edb2f6  libgco
*** 134751,134757 ****
  53ea3400302d55a6ef7d425b543e4646  libgcobol/posix/shim/fstat.cc
  a7b68930ae7325253870cb373c7849f6  libgcobol/posix/shim/localtime.cc
  cd58336ef952882f226b59a93565ff3a  libgcobol/posix/shim/lseek.cc
! 06d9e593735ac52f13d5e144f70d92ee  libgcobol/posix/shim/open.cc
  308a02a974673252b622e5bbca74784d  libgcobol/posix/shim/stat.cc
  0627b6b8874b55669b3c13b6a52ef590  libgcobol/posix/shim/stat.h
  feda976b2ecc3ba909f736aeb43feb48  libgcobol/posix/shim/tm.h
--- 134817,134823 ----
  53ea3400302d55a6ef7d425b543e4646  libgcobol/posix/shim/fstat.cc
  a7b68930ae7325253870cb373c7849f6  libgcobol/posix/shim/localtime.cc
  cd58336ef952882f226b59a93565ff3a  libgcobol/posix/shim/lseek.cc
! 51c9656a8295c396ec0b112f38b8bcb5  libgcobol/posix/shim/open.cc
  308a02a974673252b622e5bbca74784d  libgcobol/posix/shim/stat.cc
  0627b6b8874b55669b3c13b6a52ef590  libgcobol/posix/shim/stat.h
  feda976b2ecc3ba909f736aeb43feb48  libgcobol/posix/shim/tm.h
*************** fa11a6e56c666d0f6aed79e8a76ee830  libgco
*** 134773,134780 ****
  859336a5b2670d1679e68d9e00bec381  libgcobol/posix/udf/posix-stat.cbl
  9c2b0ac9c647bc3a9b65244797bb88d7  libgcobol/posix/udf/posix-unlink.cbl
  f7f3ede57639856878087542116a625d  libgcobol/posix/udf/posix-write.cbl
! df0869fbdcd7a132ac266d2b365bf481  libgcobol/stringbin.cc
! 89dfd764956cfbc2affbf93a401839c9  libgcobol/stringbin.h
  d77d00934ab6b213d8c526ae0673969c  libgcobol/valconv.cc
  3466db9e6fc5748c08c947e71a566c07  libgcobol/valconv.h
  8485adf73f6988a83d317bb42594aa15  libgcobol/xmlparse.cc
--- 134839,134846 ----
  859336a5b2670d1679e68d9e00bec381  libgcobol/posix/udf/posix-stat.cbl
  9c2b0ac9c647bc3a9b65244797bb88d7  libgcobol/posix/udf/posix-unlink.cbl
  f7f3ede57639856878087542116a625d  libgcobol/posix/udf/posix-write.cbl
! f77fe8bff424830ac79c8b2fec983268  libgcobol/stringbin.cc
! f49aafcc21e24a1ea3753658ab5250a9  libgcobol/stringbin.h
  d77d00934ab6b213d8c526ae0673969c  libgcobol/valconv.cc
  3466db9e6fc5748c08c947e71a566c07  libgcobol/valconv.h
  8485adf73f6988a83d317bb42594aa15  libgcobol/xmlparse.cc
*************** dd12c9337c5b8da315083627d633c703  libgfo
*** 135720,135726 ****
  3d6bdfad19038c8e5794b4f1d39dc010  libgfortran/io/inquire.c
  86f78d0a8d7fd3418de9e9f9a1cb384f  libgfortran/io/intrinsics.c
  951a0fb44143778514eae26164fc62b0  libgfortran/io/io.h
! ea635852033817b89d7cc5fa4cee5183  libgfortran/io/list_read.c
  908721400434528de210b0cbef37f603  libgfortran/io/lock.c
  601d86fd12148a4342e1ca9c4905714d  libgfortran/io/open.c
  33bad6f40ed7c20e9562f82b2f8387c3  libgfortran/io/read.c
--- 135786,135792 ----
  3d6bdfad19038c8e5794b4f1d39dc010  libgfortran/io/inquire.c
  86f78d0a8d7fd3418de9e9f9a1cb384f  libgfortran/io/intrinsics.c
  951a0fb44143778514eae26164fc62b0  libgfortran/io/io.h
! 8c6574875a8d296faff4aee7831e7f38  libgfortran/io/list_read.c
  908721400434528de210b0cbef37f603  libgfortran/io/lock.c
  601d86fd12148a4342e1ca9c4905714d  libgfortran/io/open.c
  33bad6f40ed7c20e9562f82b2f8387c3  libgfortran/io/read.c
*************** a3a7e9ca6057da9ca42e03e41e1c73f7  libgo/
*** 141366,141372 ****
  dcdf1b680b15b372bdb64cc5107d51b6  libgo/testsuite/libgo-test-support.exp.in
  bf162aa572f7b96b25dbd2b027845d32  libgo/testsuite/libgo.testmain/testmain.exp
  cc9d2a0e34e31ba866a8caf9f46f48f3  libgomp/.gitattributes
! c46b2da3f12e57724bbcf57f374dbbcd  libgomp/ChangeLog
  0d55aa862aee66efdc5f8d62c94ff8fb  libgomp/ChangeLog.graphite
  714e3b9c0810a61df01246c2a97e825a  libgomp/Makefile.am
  6687ddf350c549b16e165de0211f0471  libgomp/Makefile.in
--- 141432,141438 ----
  dcdf1b680b15b372bdb64cc5107d51b6  libgo/testsuite/libgo-test-support.exp.in
  bf162aa572f7b96b25dbd2b027845d32  libgo/testsuite/libgo.testmain/testmain.exp
  cc9d2a0e34e31ba866a8caf9f46f48f3  libgomp/.gitattributes
! 81058abd33992fdbb6dc091ef699b3e0  libgomp/ChangeLog
  0d55aa862aee66efdc5f8d62c94ff8fb  libgomp/ChangeLog.graphite
  714e3b9c0810a61df01246c2a97e825a  libgomp/Makefile.am
  6687ddf350c549b16e165de0211f0471  libgomp/Makefile.in
*************** c46b2da3f12e57724bbcf57f374dbbcd  libgom
*** 141374,141380 ****
  5e63b3cd1246f4c73a49880cad1844ee  libgomp/acinclude.m4
  5a46efd6e18e24c37640f51369238fe4  libgomp/aclocal.m4
  a518e5f5538c5ff629ba3a8f88128480  libgomp/affinity-fmt.c
! 06478025336afe5fce9b998b4c7710b1  libgomp/affinity.c
  44e82ee5e47677da6205a78497c6a566  libgomp/alloc.c
  0c08d5aa3b537038621b9e3d7c3f28df  libgomp/alloc_cache.h
  4eb87fef655de54484eccb7b204e5916  libgomp/allocator.c
--- 141440,141446 ----
  5e63b3cd1246f4c73a49880cad1844ee  libgomp/acinclude.m4
  5a46efd6e18e24c37640f51369238fe4  libgomp/aclocal.m4
  a518e5f5538c5ff629ba3a8f88128480  libgomp/affinity-fmt.c
! ea7c79b61ea2ff5a43a38e1ae139c083  libgomp/affinity.c
  44e82ee5e47677da6205a78497c6a566  libgomp/alloc.c
  0c08d5aa3b537038621b9e3d7c3f28df  libgomp/alloc_cache.h
  4eb87fef655de54484eccb7b204e5916  libgomp/allocator.c
*************** d41d8cd98f00b204e9800998ecf8427e  libgom
*** 141391,141396 ****
--- 141457,141463 ----
  d41d8cd98f00b204e9800998ecf8427e  libgomp/config/accel/oacc-host.c
  2b2b7c91197cb70b861c78a622ff5baf  libgomp/config/accel/oacc-init.c
  d41d8cd98f00b204e9800998ecf8427e  libgomp/config/accel/oacc-mem.c
+ d41d8cd98f00b204e9800998ecf8427e  libgomp/config/accel/oacc-parallel.c
  d41d8cd98f00b204e9800998ecf8427e  libgomp/config/accel/oacc-plugin.c
  7973e447504d3a02e64bae101b909b1a  libgomp/config/accel/omp-lock.h
  d49fc62104ba3fb644238a039f4977fd  libgomp/config/accel/openacc.f90
*************** fee40ff5bae715c87655e264184932b8  libgom
*** 141401,141407 ****
  d41d8cd98f00b204e9800998ecf8427e  libgomp/config/accel/sem.c
  608224c1f4b4ead6521fc3c45509dba0  libgomp/config/accel/sem.h
  20645342c25f4ad9302c803af100d314  libgomp/config/accel/target-cxa-dso-dtor.c
! 6829a1d019784084ce7d8921d0a91724  libgomp/config/accel/target-indirect.c
  3d70e537e5e29d3f75c715be8a805118  libgomp/config/accel/thread-stacksize.h
  78c49710d0875b9e59af97545af7a47d  libgomp/config/bsd/proc.c
  c6f86d1001c53a2af99a97c2afa9475f  libgomp/config/darwin/plugin-suffix.h
--- 141468,141475 ----
  d41d8cd98f00b204e9800998ecf8427e  libgomp/config/accel/sem.c
  608224c1f4b4ead6521fc3c45509dba0  libgomp/config/accel/sem.h
  20645342c25f4ad9302c803af100d314  libgomp/config/accel/target-cxa-dso-dtor.c
! b68fd35b806e96ba388e4f09485ca2bc  libgomp/config/accel/target-indirect.c
! c745b04e9a749c7bafebcab1952681bc  libgomp/config/accel/target-indirect.h
  3d70e537e5e29d3f75c715be8a805118  libgomp/config/accel/thread-stacksize.h
  78c49710d0875b9e59af97545af7a47d  libgomp/config/bsd/proc.c
  c6f86d1001c53a2af99a97c2afa9475f  libgomp/config/darwin/plugin-suffix.h
*************** c447ed13e1d693f4b983b83ca2478aa8  libgom
*** 141417,141427 ****
  7f08dd456ca307b6bb876ef0ceaa3df8  libgomp/config/gcn/simple-bar.h
  c4edbd7c2c1205e40ebb4fe0f1270559  libgomp/config/gcn/target.c
  55d3b1a161a020a1c6c18b3e41dd9420  libgomp/config/gcn/task.c
! 30c03d86dd2194693112dd251a92017b  libgomp/config/gcn/team.c
  c0f4bc26ad28bb0712bebfcae4c6a978  libgomp/config/gcn/teams.c
  de27fe416c22021c880c3ef4d002aa91  libgomp/config/gcn/time.c
  7bff56f23fd667518b0ce11825f3a66b  libgomp/config/hpux/plugin-suffix.h
! 7a0a6a6d5cb567d0de762d9dbe76d9be  libgomp/config/linux/affinity.c
  d77d4ae9962036bcecc3a3ba0cc10040  libgomp/config/linux/allocator.c
  29d574ec8d851693d9b472f7519c22d9  libgomp/config/linux/alpha/futex.h
  2a9f66d6adadccefb7a7d88d5445f143  libgomp/config/linux/bar.c
--- 141485,141495 ----
  7f08dd456ca307b6bb876ef0ceaa3df8  libgomp/config/gcn/simple-bar.h
  c4edbd7c2c1205e40ebb4fe0f1270559  libgomp/config/gcn/target.c
  55d3b1a161a020a1c6c18b3e41dd9420  libgomp/config/gcn/task.c
! 8c261f3d46bea4a014a7dc403f84226a  libgomp/config/gcn/team.c
  c0f4bc26ad28bb0712bebfcae4c6a978  libgomp/config/gcn/teams.c
  de27fe416c22021c880c3ef4d002aa91  libgomp/config/gcn/time.c
  7bff56f23fd667518b0ce11825f3a66b  libgomp/config/hpux/plugin-suffix.h
! 5fa45367d4769267b9dc4398d759b193  libgomp/config/linux/affinity.c
  d77d4ae9962036bcecc3a3ba0cc10040  libgomp/config/linux/allocator.c
  29d574ec8d851693d9b472f7519c22d9  libgomp/config/linux/alpha/futex.h
  2a9f66d6adadccefb7a7d88d5445f143  libgomp/config/linux/bar.c
*************** df59717b3bd8944894ab4397e77454f7  libgom
*** 141459,141469 ****
  dca18fe95a4086d6ff5853b4220d62db  libgomp/config/nvptx/error.c
  35b926973906eb1cf3beb0fa77d3c3d4  libgomp/config/nvptx/icv-device.c
  f0499683d858cdb2fa18624722532be0  libgomp/config/nvptx/libgomp-nvptx.h
- d41d8cd98f00b204e9800998ecf8427e  libgomp/config/nvptx/oacc-parallel.c
  ca14627edee8edaa51ae0d2606f17be4  libgomp/config/nvptx/simple-bar.h
  d4ef411ea34a5e21bbc28b10c1f3b9cf  libgomp/config/nvptx/target.c
  1ccc40324f0cdb57674db555b003e81d  libgomp/config/nvptx/task.c
! 9642f91b86f61638bcd7b93f1efa4c1c  libgomp/config/nvptx/team.c
  25e9242a0e4530902ae2914c443cea04  libgomp/config/nvptx/teams.c
  1e82aa2630626e511ff0d1341a76d2fb  libgomp/config/nvptx/time.c
  f71a2c1760df3cace4ad96cbc50e724c  libgomp/config/posix/bar.c
--- 141527,141536 ----
  dca18fe95a4086d6ff5853b4220d62db  libgomp/config/nvptx/error.c
  35b926973906eb1cf3beb0fa77d3c3d4  libgomp/config/nvptx/icv-device.c
  f0499683d858cdb2fa18624722532be0  libgomp/config/nvptx/libgomp-nvptx.h
  ca14627edee8edaa51ae0d2606f17be4  libgomp/config/nvptx/simple-bar.h
  d4ef411ea34a5e21bbc28b10c1f3b9cf  libgomp/config/nvptx/target.c
  1ccc40324f0cdb57674db555b003e81d  libgomp/config/nvptx/task.c
! 4e1466b25843542d995400bca06e4868  libgomp/config/nvptx/team.c
  25e9242a0e4530902ae2914c443cea04  libgomp/config/nvptx/teams.c
  1e82aa2630626e511ff0d1341a76d2fb  libgomp/config/nvptx/time.c
  f71a2c1760df3cace4ad96cbc50e724c  libgomp/config/posix/bar.c
*************** a4cc1480c8ee441a3ccf2c250c7c0cad  libgom
*** 141506,141525 ****
  e40f7f1dbaf7de3643dec21493aed6b5  libgomp/iter.c
  6d019b48c2311268a20cabe9f65f73ad  libgomp/iter_ull.c
  e59f9d9c4947a5f7d4bdd011da890930  libgomp/libgomp-plugin.c
! de76d04e58d67cc06f800530fdcc9839  libgomp/libgomp-plugin.h
! a5e03c4cc9129e015eaa866404421cb4  libgomp/libgomp.h
! 43269ed7f389c468d89e33445e5d1e0f  libgomp/libgomp.map
  8b2aa50aecad82171348a6918309afd6  libgomp/libgomp.spec.in
! a70f9743dfa45a0b0828c8d4a2ca9b50  libgomp/libgomp.texi
  1d54928ce4032885323fb921fd1df788  libgomp/libgomp_f.h.in
! ff283838501e7dccd0306ec2feeb4452  libgomp/libgomp_g.h
  26474764313104462f3252f8ce962c10  libgomp/lock.c
  83ae93ed86e28412cd75aa493fe04885  libgomp/loop.c
  80446fe6cd6193819bea8853c8dcc525  libgomp/loop_ull.c
  6688bf57d8344fc3ab514e0ca98629a5  libgomp/oacc-async.c
  7685edcf1f7e7bced0d4ea02b83aa067  libgomp/oacc-cuda.c
  61adf03be7b2d1afcc210f5648057a45  libgomp/oacc-host.c
! b5e3ea3391fe580b6b137f4bc8629034  libgomp/oacc-init.c
  051187f12f492968f6d4abb837e9d0c8  libgomp/oacc-int.h
  dd36fcbd7fd6cd40560a449ca272d054  libgomp/oacc-mem.c
  95f728aad5cd1db8eca4190fa88e52f2  libgomp/oacc-parallel.c
--- 141573,141592 ----
  e40f7f1dbaf7de3643dec21493aed6b5  libgomp/iter.c
  6d019b48c2311268a20cabe9f65f73ad  libgomp/iter_ull.c
  e59f9d9c4947a5f7d4bdd011da890930  libgomp/libgomp-plugin.c
! 86c5ee434cd811c606b407fed96ff39a  libgomp/libgomp-plugin.h
! 085e80e96ce71a845196f549250dd0f0  libgomp/libgomp.h
! 847dd5780ff3a61d09f88ea2a6f6690a  libgomp/libgomp.map
  8b2aa50aecad82171348a6918309afd6  libgomp/libgomp.spec.in
! f270c328e372f545a93d85b5391d3f65  libgomp/libgomp.texi
  1d54928ce4032885323fb921fd1df788  libgomp/libgomp_f.h.in
! e60f4fb3af97e19475db309ac38e933f  libgomp/libgomp_g.h
  26474764313104462f3252f8ce962c10  libgomp/lock.c
  83ae93ed86e28412cd75aa493fe04885  libgomp/loop.c
  80446fe6cd6193819bea8853c8dcc525  libgomp/loop_ull.c
  6688bf57d8344fc3ab514e0ca98629a5  libgomp/oacc-async.c
  7685edcf1f7e7bced0d4ea02b83aa067  libgomp/oacc-cuda.c
  61adf03be7b2d1afcc210f5648057a45  libgomp/oacc-host.c
! b3f833875984eab706157cc388a6e14a  libgomp/oacc-init.c
  051187f12f492968f6d4abb837e9d0c8  libgomp/oacc-int.h
  dd36fcbd7fd6cd40560a449ca272d054  libgomp/oacc-mem.c
  95f728aad5cd1db8eca4190fa88e52f2  libgomp/oacc-parallel.c
*************** dd36fcbd7fd6cd40560a449ca272d054  libgom
*** 141527,141535 ****
  a09ede7d3d21d275ef33da3aeef727b7  libgomp/oacc-plugin.h
  ccc59a273af5bb87bc4287e838131e91  libgomp/oacc-profiling.c
  6a2627e5d8a4e542cab7eddc96b53f37  libgomp/oacc-target.c
! 536deacfb1be236f1fa616a7701f5561  libgomp/omp.h.in
! 25dabc538fd6b197e354d49a325b5e32  libgomp/omp_lib.f90.in
! 36f01be7e8af6b4ebd7c35928d5157f4  libgomp/omp_lib.h.in
  3a0b904af6b419d48883939e83c1150c  libgomp/openacc.f90
  951da06c04766ca9e95dd4a2294b9b77  libgomp/openacc.h
  499db3818012abc0c973cf7887ad887b  libgomp/openacc_lib.h
--- 141594,141602 ----
  a09ede7d3d21d275ef33da3aeef727b7  libgomp/oacc-plugin.h
  ccc59a273af5bb87bc4287e838131e91  libgomp/oacc-profiling.c
  6a2627e5d8a4e542cab7eddc96b53f37  libgomp/oacc-target.c
! 55c1b72f5c30f9ae0e6e93903367f82b  libgomp/omp.h.in
! 65e5868dc0758ab95a4c383bae7e47df  libgomp/omp_lib.f90.in
! ce0e4f04d8d42bc2fabe8f2b00245356  libgomp/omp_lib.h.in
  3a0b904af6b419d48883939e83c1150c  libgomp/openacc.f90
  951da06c04766ca9e95dd4a2294b9b77  libgomp/openacc.h
  499db3818012abc0c973cf7887ad887b  libgomp/openacc_lib.h
*************** da2ae01cd3ee1b82927ed89b489413c4  libgom
*** 141538,141547 ****
  a19fe470b125fddc580e5e0bbeee471d  libgomp/plugin/Makefrag.am
  1b94d027e28b8b7e6f38e326d8412459  libgomp/plugin/build-target-indirect-htab.h
  fab10af27c836c7b90303245f3965cb8  libgomp/plugin/configfrag.ac
! 64303d9a5e264784832990b27405c4aa  libgomp/plugin/cuda-lib.def
  d024ec56acbc3411cedc7899b8bbdd02  libgomp/plugin/mutex.c
! 6908c1b3e29c68a7f9e59de034a4072f  libgomp/plugin/plugin-gcn.c
! 8b63f2359031b645d7462a465385b090  libgomp/plugin/plugin-nvptx.c
  575940d2b8e2a941f78af850aac28928  libgomp/priority_queue.c
  c88620bad36f9c420348d0508bd4b346  libgomp/priority_queue.h
  20aaa72861afa50254f90e9a0839d451  libgomp/scope.c
--- 141605,141614 ----
  a19fe470b125fddc580e5e0bbeee471d  libgomp/plugin/Makefrag.am
  1b94d027e28b8b7e6f38e326d8412459  libgomp/plugin/build-target-indirect-htab.h
  fab10af27c836c7b90303245f3965cb8  libgomp/plugin/configfrag.ac
! 471ff3e1b4f9a16cc006a5fa4c1542d3  libgomp/plugin/cuda-lib.def
  d024ec56acbc3411cedc7899b8bbdd02  libgomp/plugin/mutex.c
! 8205326e04eb4c5fa4326cc7be85be48  libgomp/plugin/plugin-gcn.c
! 2ed35f20b51021dd4a9ae2df371d6f48  libgomp/plugin/plugin-nvptx.c
  575940d2b8e2a941f78af850aac28928  libgomp/priority_queue.c
  c88620bad36f9c420348d0508bd4b346  libgomp/priority_queue.h
  20aaa72861afa50254f90e9a0839d451  libgomp/scope.c
*************** ed195dc04ac3e252f89029dee0bc9c05  libgom
*** 141552,141559 ****
  80878b96d4a2653d45e47682a81cb8b2  libgomp/splay-tree.c
  bbb8b404de421c08a4468a7c149897e3  libgomp/splay-tree.h
  1775f6ebbed5a9aef1882e66136d9e2b  libgomp/target-cxa-dso-dtor.c
! 30bc692f400225cbdf51ebfdb41b44c5  libgomp/target-indirect.c
! d14fdc9bd8c5a85955e77a27e9543ce0  libgomp/target.c
  9423c0473a15a8d13b93375561ef5058  libgomp/task.c
  7f9c7ebe470f1e58806b1136258bd786  libgomp/taskloop.c
  abb5e2202aa84d67c967b7dc176fc937  libgomp/team.c
--- 141619,141626 ----
  80878b96d4a2653d45e47682a81cb8b2  libgomp/splay-tree.c
  bbb8b404de421c08a4468a7c149897e3  libgomp/splay-tree.h
  1775f6ebbed5a9aef1882e66136d9e2b  libgomp/target-cxa-dso-dtor.c
! efc6f457ddec802a552a289c9f6cec1d  libgomp/target-indirect.c
! 51aa7cf9d8b8e212c9753b83f7da3581  libgomp/target.c
  9423c0473a15a8d13b93375561ef5058  libgomp/task.c
  7f9c7ebe470f1e58806b1136258bd786  libgomp/taskloop.c
  abb5e2202aa84d67c967b7dc176fc937  libgomp/team.c
*************** b077f988f391c816b0a921bdc5ee6cc9  libgom
*** 142653,142658 ****
--- 142720,142726 ----
  f7c21b673a353f09b2f8780a2e2cf556  libgomp/testsuite/libgomp.c/nestedfn-6.c
  9d67435bb7d23f87eb2527398f46dabe  libgomp/testsuite/libgomp.c/nqueens-1.c
  39ca1acef9d993585722946591256509  libgomp/testsuite/libgomp.c/omp-control-tools-1.c
+ 05b0a549c8453fd7684a4415e59cfae5  libgomp/testsuite/libgomp.c/omp-get-device-distances.c
  b2840419f7f70553698eb41dcd3bd6c6  libgomp/testsuite/libgomp.c/omp-loop01.c
  0e7290bdd83005d8b57e48c8fdbeee31  libgomp/testsuite/libgomp.c/omp-loop02.c
  8a9572f97bc43759a0119831329e9616  libgomp/testsuite/libgomp.c/omp-loop03.c
*************** e9e866d28e0c8de7982725a2b2235266  libgom
*** 143246,143251 ****
--- 143314,143320 ----
  8cedec7df37950bdeba4b745c84695e1  libgomp/testsuite/libgomp.fortran/omp-control-tools-1.f
  7b7659b1a064db3024d26805adb356e1  libgomp/testsuite/libgomp.fortran/omp-control-tools-1.f90
  308e04cf45923f0a4dc041fb8a3dd54c  libgomp/testsuite/libgomp.fortran/omp-default-device.f90
+ fc21390f4fa3f417d78b2aac989d9f24  libgomp/testsuite/libgomp.fortran/omp-get-device-distances.f90
  3ae700ee989ce700da4bcf6ebd575e7d  libgomp/testsuite/libgomp.fortran/omp-lock-hint-contended-dep.f90
  b674994b25171d5d1759c43b2277a422  libgomp/testsuite/libgomp.fortran/omp-lock-hint-none-dep.f90
  47cd36368ba8d4c47ba71a97d165ca30  libgomp/testsuite/libgomp.fortran/omp-lock-hint-speculative-dep.f90
*************** e52d95644dc6f186070f349a5903ca72  libibe
*** 145187,145193 ****
  6f774a92661ca4a067f1691a7925524b  libiberty/xstrerror.c
  82039c5e76badca485d7ec27bf160ba4  libiberty/xstrndup.c
  2052196fd1de9a9efa8722031398f544  libiberty/xvasprintf.c
! 5b821b4588002a95dbe8bbf55a2cb562  libitm/ChangeLog
  763fe82c2e5c5ae9547defb28107952a  libitm/Makefile.am
  4fb260790809cc0a691787692a7d2d92  libitm/Makefile.in
  86465895a9d654faded88bc3fa075117  libitm/aatree.cc
--- 145256,145262 ----
  6f774a92661ca4a067f1691a7925524b  libiberty/xstrerror.c
  82039c5e76badca485d7ec27bf160ba4  libiberty/xstrndup.c
  2052196fd1de9a9efa8722031398f544  libiberty/xvasprintf.c
! 4c8ac3eb3fc76599f96bc1926a08e49f  libitm/ChangeLog
  763fe82c2e5c5ae9547defb28107952a  libitm/Makefile.am
  4fb260790809cc0a691787692a7d2d92  libitm/Makefile.in
  86465895a9d654faded88bc3fa075117  libitm/aatree.cc
*************** c698cef271968e273f64e6524284df79  libitm
*** 145202,145208 ****
  e573073d18baec48b7c39413e8ab146d  libitm/clone.cc
  78d4beda32bd29ab6c8fcc32775f5aa0  libitm/common.h
  05ea82fd12c7b4a030b6310b862ff47d  libitm/config.h.in
! ff0afe23712c2e9c07c2c3f12b9d0520  libitm/config/aarch64/sjlj.S
  4d6025bd55415126769c608f6cdc4a2c  libitm/config/aarch64/target.h
  dac211ab56e95e318ab84880d41ac2a8  libitm/config/alpha/sjlj.S
  e0c2537afbd6d24052ed16f2db50b3d9  libitm/config/alpha/target.h
--- 145271,145277 ----
  e573073d18baec48b7c39413e8ab146d  libitm/clone.cc
  78d4beda32bd29ab6c8fcc32775f5aa0  libitm/common.h
  05ea82fd12c7b4a030b6310b862ff47d  libitm/config.h.in
! ca2866b74a263fcd5161224e3a659032  libitm/config/aarch64/sjlj.S
  4d6025bd55415126769c608f6cdc4a2c  libitm/config/aarch64/target.h
  dac211ab56e95e318ab84880d41ac2a8  libitm/config/alpha/sjlj.S
  e0c2537afbd6d24052ed16f2db50b3d9  libitm/config/alpha/target.h
*************** a73d560a3ba317c5ad0a7919d87b4b6d  libssp
*** 147024,147030 ****
  7d75fa0d30318408fe4cd91d9cbe3ac7  libssp/vsnprintf-chk.c
  e9ff0f4bdd1be75a507480ed1267459d  libssp/vsprintf-chk.c
  9e2de2e1f20ab0ffa2201164de02824f  libstdc++-v3/.editorconfig
! 2844d392d778db0cba19e1a692cdc6b5  libstdc++-v3/ChangeLog
  7aa6c40440a44fcf5ec94c066160c2f8  libstdc++-v3/ChangeLog-1998
  7aff86600b6a1ed3fa87305075a92db0  libstdc++-v3/ChangeLog-1999
  a6f28e8fc9bb07696a9e068b439a3a87  libstdc++-v3/ChangeLog-2000
--- 147093,147099 ----
  7d75fa0d30318408fe4cd91d9cbe3ac7  libssp/vsnprintf-chk.c
  e9ff0f4bdd1be75a507480ed1267459d  libssp/vsprintf-chk.c
  9e2de2e1f20ab0ffa2201164de02824f  libstdc++-v3/.editorconfig
! 3cd0b3242704dfd7b58dc4dadaf70ec2  libstdc++-v3/ChangeLog
  7aa6c40440a44fcf5ec94c066160c2f8  libstdc++-v3/ChangeLog-1998
  7aff86600b6a1ed3fa87305075a92db0  libstdc++-v3/ChangeLog-1999
  a6f28e8fc9bb07696a9e068b439a3a87  libstdc++-v3/ChangeLog-2000
*************** a0883d7f910b6fa8f72de9b7ff6c5e57  libstd
*** 147439,147445 ****
  67af75428c4b0fee1420d75c75421ab6  libstdc++-v3/doc/html/manual/using_concurrency.html
  f8898e59cc7155a01a17f15a3b853c30  libstdc++-v3/doc/html/manual/using_dual_abi.html
  11dd55e39edb8313b5563e53067c431e  libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html
! 292c099f5758d0403ebf7dceea801138  libstdc++-v3/doc/html/manual/using_exceptions.html
  91385600a9fbb5f8f29c666917403807  libstdc++-v3/doc/html/manual/using_headers.html
  106d80bfa1c180106be5dee024f8ea7b  libstdc++-v3/doc/html/manual/using_macros.html
  e8b86abd99dc9893dfa1bb7533fdc23d  libstdc++-v3/doc/html/manual/using_namespaces.html
--- 147508,147514 ----
  67af75428c4b0fee1420d75c75421ab6  libstdc++-v3/doc/html/manual/using_concurrency.html
  f8898e59cc7155a01a17f15a3b853c30  libstdc++-v3/doc/html/manual/using_dual_abi.html
  11dd55e39edb8313b5563e53067c431e  libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html
! 5532283753a5525d4531e5b8f59dbeda  libstdc++-v3/doc/html/manual/using_exceptions.html
  91385600a9fbb5f8f29c666917403807  libstdc++-v3/doc/html/manual/using_headers.html
  106d80bfa1c180106be5dee024f8ea7b  libstdc++-v3/doc/html/manual/using_macros.html
  e8b86abd99dc9893dfa1bb7533fdc23d  libstdc++-v3/doc/html/manual/using_namespaces.html
*************** cbd1ce02ad465e7f996671f14eee4ec9  libstd
*** 147681,147687 ****
  1c7dc4c765a2c1e49fdeec9af9ce0274  libstdc++-v3/doc/xml/manual/test.xml
  e2e099be3dd6a4b7a940a7232635ee2c  libstdc++-v3/doc/xml/manual/test_policy_data_structures.xml
  515cde4369acf7ba4041f832bc8a3bf3  libstdc++-v3/doc/xml/manual/using.xml
! 5245e9347bf064c48690e1ad9213f1ba  libstdc++-v3/doc/xml/manual/using_exceptions.xml
  bc0412a9556e7ed39afe5103b73f1f26  libstdc++-v3/doc/xml/manual/utilities.xml
  7b70f0f77a50b976605aef6dbeb1e282  libstdc++-v3/doc/xml/spine.xml
  bd966b4a0df6f2a84f9770525581d45c  libstdc++-v3/doc/xsl/customization.xsl.in
--- 147750,147756 ----
  1c7dc4c765a2c1e49fdeec9af9ce0274  libstdc++-v3/doc/xml/manual/test.xml
  e2e099be3dd6a4b7a940a7232635ee2c  libstdc++-v3/doc/xml/manual/test_policy_data_structures.xml
  515cde4369acf7ba4041f832bc8a3bf3  libstdc++-v3/doc/xml/manual/using.xml
! e77b5856d5f68e941f15e1aa31a95b2d  libstdc++-v3/doc/xml/manual/using_exceptions.xml
  bc0412a9556e7ed39afe5103b73f1f26  libstdc++-v3/doc/xml/manual/utilities.xml
  7b70f0f77a50b976605aef6dbeb1e282  libstdc++-v3/doc/xml/spine.xml
  bd966b4a0df6f2a84f9770525581d45c  libstdc++-v3/doc/xsl/customization.xsl.in
*************** cdfce2fa1d76af09cfdf0989501826ca  libstd
*** 148801,148807 ****
  74bc36f5cffd7626c78090061e4416a9  libstdc++-v3/src/c++17/ryu/generic_128.c
  fbb127f006c65ae37d591c627cc6235c  libstdc++-v3/src/c++17/ryu/generic_128.h
  85b9d2e407dc7113a97234b2c23e96dc  libstdc++-v3/src/c++17/ryu/ryu_generic_128.h
! 2773ff0feb499fbb952b5beae8ae5833  libstdc++-v3/src/c++17/string-inst.cc
  04669634e7d7f19fae4baadedc6d0908  libstdc++-v3/src/c++17/uint128_t.h
  b4fa33c3234234ee50ec148cb246a424  libstdc++-v3/src/c++20/Makefile.am
  350c996187175978ddbbd4e0635cd6a5  libstdc++-v3/src/c++20/Makefile.in
--- 148870,148876 ----
  74bc36f5cffd7626c78090061e4416a9  libstdc++-v3/src/c++17/ryu/generic_128.c
  fbb127f006c65ae37d591c627cc6235c  libstdc++-v3/src/c++17/ryu/generic_128.h
  85b9d2e407dc7113a97234b2c23e96dc  libstdc++-v3/src/c++17/ryu/ryu_generic_128.h
! fadb401a96099ecf52fe184af0fa13c4  libstdc++-v3/src/c++17/string-inst.cc
  04669634e7d7f19fae4baadedc6d0908  libstdc++-v3/src/c++17/uint128_t.h
  b4fa33c3234234ee50ec148cb246a424  libstdc++-v3/src/c++20/Makefile.am
  350c996187175978ddbbd4e0635cd6a5  libstdc++-v3/src/c++20/Makefile.in
diff -Nrcpad gcc-17-20260614/gcc/ChangeLog gcc-17-20260621/gcc/ChangeLog
*** gcc-17-20260614/gcc/ChangeLog	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ChangeLog	Sun Jun 21 22:32:05 2026
***************
*** 1,3 ****
--- 1,616 ----
+ 2026-06-20  Gerald Pfeifer  <gerald@pfeifer.com>
+ 
+ 	* doc/extend.texi (Integer Overflow Builtins): Spell compile time
+ 	without dash when a noun.
+ 	* doc/invoke.texi (Warning Options): Ditto.
+ 	* doc/passes.texi (Tree SSA passes): Ditto.
+ 	* doc/rtl.texi (Conversions): Ditto.
+ 
+ 2026-06-20  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	* config/avr/avr.cc (avr_progmem_p): Use strip_array_types to
+ 	peel off ARRAY_TYPEs.
+ 	(avr_nonconst_pointer_addrspace): Same.
+ 	(avr_insert_attributes): Same.
+ 	(avr_decl_maybe_lds_p): Same.
+ 
+ 2026-06-20  Roger Sayle  <roger@nextmovesoftware.com>
+ 	    Hongtao Liu  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/i386-features.cc (scalar_chain::convert_op): Check
+ 	if the (DImode) SUBREG being converted by STV has an original mode
+ 	that's tieable to the vector mode (V2DImode), if not (e.g. DDmode)
+ 	emit this "conversion" as a separate move for reload to handle.
+ 
+ 2026-06-20  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	* config/avr/avr.cc (avr_init_builtins): Use XALLOCAVEC
+ 	instead of alloca to locally alloc char[].
+ 	* config/avr/avr-c.cc (avr_cpu_cpp_builtins): Same.
+ 	* config/avr/avr-log.cc (avr_log_set_avr_log): Same.
+ 
+ 2026-06-19  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/125857
+ 	* ipa-prop.cc (ipa_record_return_value_range_1): Don't record
+ 	pranges which have non ipa-invariants in it.
+ 
+ 2026-06-19  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* config/aarch64/aarch64.cc
+ 	(aarch64_vector_costs::count_ops): Treat vec_deconstruct in the
+ 	same way as vec_construct.
+ 
+ 2026-06-19  Peter Bergner  <bergner@tenstorrent.com>
+ 
+ 	* config/riscv/riscv-cores.def (RISCV_TUNE)<tt-ascalon-d8>: Rename from
+ 	this...
+ 	(RISCV_TUNE)<tt-ascalon-x>: ...to this.
+ 	(RISCV_CORE)<tt-ascalon-d8>: Likewise.
+ 	(RISCV_CORE)<tt-ascalon-x>: Likewise.
+ 	(RISCV_CORE_ALIAS): Add tt-ascalon-d8 alias for tt-ascalon-x.
+ 	* doc/riscv-mcpu.texi: Document the name change.
+ 	* doc/riscv-mtune.texi: Likewise.
+ 
+ 2026-06-19  Peter Bergner  <bergner@tenstorrent.com>
+ 
+ 	* common/config/riscv/riscv-common.cc (struct riscv_cpu_alias_info):
+ 	New struct.
+ 	(riscv_cpu_alias_table): New.
+ 	(riscv_find_cpu): Add support for cpu alias names.
+ 	(riscv_get_valid_option_values): Likewise.
+ 	Add an early loop exit if we found a duplicate name.
+ 	* config/riscv/riscv-cores.def (RISCV_CORE_ALIAS): New macro.
+ 
+ 2026-06-19  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/122193
+ 	* tree-ssa-phiopt.cc (factor_out_conditional_load): Support non-zero
+ 	offsets.
+ 
+ 2026-06-19  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	* tree-ssa-phiopt.cc (is_factor_profitable): Change arg_op
+ 	to operands and opcount.
+ 	(factor_out_conditional_operation): Update call to
+ 	is_factor_profitable.
+ 	(factor_out_conditional_load): Support when merge has
+ 	a virtual phi. The load's vuse needs to be the arguments
+ 	to the virtual phi. Call is_factor_profitable on the new phi
+ 	arguments. Update the vuse on the new load to the virtual phi.
+ 
+ 2026-06-19  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 	    Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	PR tree-optimization/125557
+ 	* tree-ssa-phiopt.cc (factor_out_conditional_load): New function.
+ 	(factor_out_all):  Call factor_out_conditional_load.
+ 
+ 2026-06-19  Xin Wang  <yw987194828@gmail.com>
+ 
+ 	* tree-ssa-loop-im.cc (mem_ref_hasher::equal): Refactor
+ 	for clarity.
+ 
+ 2026-06-19  Arsen Arsenović  <aarsenovic@baylibre.com>
+ 
+ 	* doc/extend.texi: Move @anchor-s referring to tops of nodes
+ 	after their corresponding @node lines.
+ 	* doc/invoke.texi: Ditto.
+ 
+ 2026-06-19  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* acinclude.m4 (gcc_GAS_FLAGS): Set to --32 for abi32 targets.
+ 	* configure.ac (TLS support): Use 32-bit sequence for abi32 targets.
+ 	* configure: Regenerate.
+ 
+ 2026-06-19  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* tree-nested.cc (lookup_field_for_decl): In the non-pointer case,
+ 	clear DECL_NONADDRESSABLE_P if the DECL is of an aggregate type.
+ 
+ 2026-06-19  Kael Andrew Franco  <kaelfandrew@gmail.com>
+ 
+ 	PR tree-optimization/125641
+ 	PR tree-optimization/125641
+ 	* match.pd: Add bit_ior/bit_and {bit_not} rshift to min/max.
+ 
+ 2026-06-19  Léo Hardt  <leom.hardt@inf.ufrgs.br>
+ 
+ 	* ddg.h (GCC_DDG_H): Removed orphaned comment from 60393bbc
+ 	* sel-sched-ir.h (GCC_SEL_SCHED_IR_H): Removed orphaned comment from c7131fb
+ 
+ 2026-06-18  Milan Tripkovic  <Milan.Tripkovic@rt-rk.com>
+ 
+ 	PR target/125405
+ 	* match.pd: New pattern added.
+ 
+ 2026-06-18  Jeff Law  <jeffrey.law@oss.qualcomm.com>
+ 
+ 	* config/riscv/riscv.md (splitter for equality test): New splitter.
+ 
+ 2026-06-18  Paul Iannetta  <piannetta@kalrayinc.com>
+ 	    Thomas Schwinge  <tschwinge@baylibre.com>
+ 
+ 	* tree.h (ENCODE_QUAL_ADDR_SPACE): Add missing parentheses.
+ 
+ 2026-06-18  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* value-range.cc (prange::intersect): Points-to and away results
+ 	in undefined.
+ 
+ 2026-06-18  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* value-range.h (prange::pt_invariant_p): Return true or false.
+ 	(prange::pt_invariant_away_p): Likewise.
+ 
+ 2026-06-18  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* value-range.h (prange::zero_p): Assert that is zero_p is true,
+ 	points_to is unknown.
+ 
+ 2026-06-18  Richard Sandiford  <rdsandiford@googlemail.com>
+ 
+ 	PR tree-optimization/125872
+ 	* gimple-ssa-backprop.cc (backprop::execute): Don't try to delete
+ 	default definitions.
+ 
+ 2026-06-18  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range-fold.cc (fold_using_range::range_of_phi): Remove
+ 	extranous logical not from expression.
+ 
+ 2026-06-18  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/125854
+ 	* gimple-range-fold.cc (fold_using_range::fold_stmt): Check if the
+ 	range_query matches the current one before invoking fold.
+ 
+ 2026-06-18  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR ipa/124128
+ 	* ipa-cp.cc (ipa_vr_intersect_with_arith_jfunc): Move the check if
+ 	the final type conversion needs to happen before the conversion.
+ 
+ 2026-06-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	* config/i386/i386.cc (ix86_vector_costs::add_stmt_cost):
+ 	Use vector construction scaling also for mult-lane
+ 	VMAT_STRIDED_SLP but use vector composition type recorded
+ 	to avoid excessive over-costing.
+ 
+ 2026-06-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	* config/i386/i386.cc (ix86_vector_costs::add_stmt_cost):
+ 	Expect vec_deconstruct where formerly handling vec_to_scalar
+ 	for emulated gather/scatter, elementwise and strided accesses.
+ 
+ 2026-06-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	* config/i386/i386.cc (ix86_vector_cd_cost): New function,
+ 	enhanced and split out from ...
+ 	(ix86_default_vector_cost): ... here.
+ 
+ 2026-06-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	* target.h (vect_cost_for_stmt::vec_deconstruct): New kind.
+ 	* tree-vect-loop.cc (vect_model_reduction_cost): Use it.
+ 	* tree-vect-stmts.cc (vectorizable_store): Likewise.
+ 	(vectorizable_load): Likewise.
+ 	* tree-vectorizer.cc (dump_stmt_cost): Handle vec_deconstruct.
+ 	* config/aarch64/aarch64.cc (aarch64_builtin_vectorization_cost):
+ 	Handle vec_deconstruct like vec_construct.
+ 	* config/i386/i386.cc (ix86_default_vector_cost): Likewise.
+ 	* config/arm/arm.cc (arm_builtin_vectorization_cost): Likewise.
+ 	* config/loongarch/loongarch.cc (loongarch_builtin_vectorization_cost):
+ 	Likewise.
+ 	* config/riscv/riscv.cc (riscv_builtin_vectorization_cost):
+ 	Likewise.
+ 	* config/rs6000/rs6000.cc (rs6000_builtin_vectorization_cost):
+ 	Likewise.
+ 	* config/s390/s390.cc (s390_builtin_vectorization_cost): Likewise.
+ 	* targhooks.cc (default_builtin_vectorization_cost): Likewise.
+ 
+ 2026-06-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vectorizer.h (vect_load_store_data::ls_eltype): New field.
+ 	* tree-vect-stmts.cc (vectorizable_load): Record ltype
+ 	as ls_eltype for VMAT_STRIDED_SLP.
+ 	(vectorizable_store): Likewise.
+ 
+ 2026-06-17  James K. Lowden  <jklowden@cobolworx.com>
+ 
+ 	* doc/install.texi: COBOL requires Bison 3.8.2.
+ 
+ 2026-06-17  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR tree-optimization/125804
+ 	* tree-vect-loop-manip.cc (vect_do_peeling): Have
+ 	LOOP_VINFO_EARLY_BREAKS_VECT_PEELED require epilog.
+ 
+ 2026-06-17  Dhruv Chawla  <dhruvc@nvidia.com>
+ 
+ 	PR fortran/125717
+ 	* lto-streamer-in.cc (input_cfg): Stream loop->can_be_parallel in.
+ 	* lto-streamer-out.cc (output_cfg): Stream loop->can_be_parallel out.
+ 
+ 2026-06-17  Zhongjie Guo  <guozhongjie@hygon.cn>
+ 
+ 	* config/i386/x86-tune-costs.h (c86_4g_m7_cost): Increase
+ 	512-bit load/store and unaligned load/store costs.
+ 
+ 2026-06-17  Xin Liu  <liulxx@hygon.cn>
+ 
+ 	* config/i386/c86-4g-m7.md (c86_4g_m7_imov_xchg): Adjust
+ 	reservation units.
+ 	(c86_4g_m7_imov_xchg_load): Ditto.
+ 	(c86_4g_m7_call): Ditto.
+ 	(c86_4g_m7_branch): Ditto.
+ 	(c86_4g_m7_branch_load): Ditto.
+ 	(c86_4g_m7_fp_spc_direct): Add missing store unit.
+ 	(c86_4g_m7_sse_pinsr_reg): Adjust reservation units.
+ 	(c86_4g_m7_avx512_insertx_ymm): Ditto.
+ 	(c86_4g_m7_avx512_insertx_ymem): Ditto.
+ 	(c86_4g_m7_avx512_insertx_zxmm): Ditto.
+ 	(c86_4g_m7_avx512_insertx_zxmem): Ditto.
+ 	(c86_4g_m7_avx512_abs_load): Add missing store unit.
+ 	(c86_4g_m7_avx_sign): Use combined FPU reservation.
+ 	(c86_4g_m7_avx_sign_load): Ditto.
+ 	(c86_4g_m7_avx_aes): Ditto.
+ 	(c86_4g_m7_avx_aes_load): Ditto.
+ 	(c86_4g_m7_extr_load): Rename to ...
+ 	(c86_4g_m7_extr_store): ... this and restrict to store memory.
+ 	(c86_4g_m7_avx_imul): Use combined FPU reservation.
+ 	(c86_4g_m7_avx_imul_mem): Ditto.
+ 	(c86_4g_m7_avx512_vpmovx_y_load): Add missing store unit.
+ 	(c86_4g_m7_avx_vpmovx_xx_load): Ditto.
+ 	(c86_4g_m7_avx512_sseadd_maxmin_xy): Rename to ...
+ 	(c86_4g_m7_avx512_sseadd_maxmin): ... this and simplify
+ 	memory attribute check.
+ 	(c86_4g_m7_avx512_sseadd_maxmin_xy_load): Rename to ...
+ 	(c86_4g_m7_avx512_sseadd_maxmin_load): ... this and simplify
+ 	memory attribute check.
+ 	(c86_4g_m7_avx512_sseadd_xy): Rename to ...
+ 	(c86_4g_m7_avx512_sseadd): ... this.
+ 	(c86_4g_m7_avx512_sseadd_xy_load): Rename to ...
+ 	(c86_4g_m7_avx512_sseadd_load): ... this.
+ 	(c86_4g_m7_sse_sseiadd_sadbw): Use combined FPU reservation.
+ 	(c86_4g_m7_sse_sseiadd_sadbw_mem): Ditto.
+ 	(c86_4g_m7_avx512_ssecmp_vp_z): Adjust reservation units.
+ 	(c86_4g_m7_avx512_ssecmp_vp_z_load): Ditto.
+ 	(c86_4g_m7_avx512_ssecmp_test_load): Ditto.
+ 	(c86_4g_m7_avx512_mskmov_k_m): Adjust latency.
+ 
+ 2026-06-17  Robin Dapp  <rdapp.gcc@gmail.com>
+ 
+ 	PR target/125478
+ 	* config/riscv/vector.md: Set widen-alu mode_idx to 3.
+ 
+ 2026-06-17  Jeff Law  <jeffrey.law@oss.qualcomm.com>
+ 
+ 	Revert:
+ 	2026-06-15  Jim Tsung-Chun Lin  <jim@andestech.com>
+ 
+ 	* common/config/riscv/riscv-common.cc (riscv_select_multilib):
+ 	Don't set riscv_no_matched_multi_lib here; let the caller own
+ 	the flag.
+ 	(riscv_compute_multilib): Drop the early return that accepted
+ 	the generic-matched multilib_dir; always run the smart matcher
+ 	and set riscv_no_matched_multi_lib when it finds no candidate.
+ 
+ 2026-06-17  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range-cache.cc (ranger_cache::set_global_range): Nonzero
+ 	pointer ranges are no longer invariant.
+ 
+ 2026-06-17  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* Makefile.in (OBJS): Remove value-pointer-equiv.o.
+ 	* tree-vrp.cc (rvrp_folder::m_pta): Delete member.
+ 	(rvrp_folder::rvrp_folder): Remove m_pta allocation.
+ 	(rvrp_folder::~rvrp_folder): Delete.
+ 	(rvrp_folder::pre_fold_bb): Remove m_pta reference.
+ 	(rvrp_folder::post_fold_bb): Delete.
+ 	(rvrp_folder::pre_fold_stmt): Remove m_pta reference.
+ 	* value-pointer-equiv.cc: Delete.
+ 	* value-pointer-equiv.h: Delete.
+ 
+ 2026-06-17  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* tree-vrp.cc (rvrp_folder::value_of_expr): Use prange PTA info.
+ 	(value_on_edge): Likewise.
+ 
+ 2026-06-17  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range-fold.cc (x_fold_context): New.
+ 	(pta_valueize): New.
+ 	(fold_using_range::fold_stmt): Set PTA fields.
+ 	(fold_using_range::range_of_phi): Ditto.
+ 	* ipa-prop.cc (ipa_vr::ipa_vr): Allocate unshared range.
+ 	* range-op-ptr.cc (pointer_plus_operator::fold_range): Handle PTA.
+ 	(pointer_plus_operator::op2_range): Ditto.
+ 	(operator_pointer_diff::fold_range): Ditto.
+ 	(operator_cast::fold_range): Ditto.
+ 	(operator_cast::lhs_op1_relation): Ditto.
+ 	(operator_equal::fold_range): Ditto.
+ 	(operator_not_equal::fold_range): Ditto.
+ 	* value-query.cc (range_query::get_tree_range): Ditto.
+ 	* value-range-pretty-print.cc (vrange_printer::print_pt): New.
+ 	(vrange_printer::visit): Add print support.
+ 	* value-range-pretty-print.h (vrange_printer::print_pt): New prototype.
+ 	* value-range-storage.cc (vrange_allocator::clone): Allow unshared
+ 	expression allocation.
+ 	(vrange_storage::alloc): Likewise.
+ 	(prange_storage::alloc): Likewise.
+ 	(prange_storage::prange_format): Copy PTA.
+ 	(prange_storage::set_prange): Ditto.
+ 	(prange_storage::get_prange): Ditto.
+ 	(prange_storage::equal_p): Compare points-to data.
+ 	(ggc_alloc_vrange_storage): Allow unshared expression.
+ 	* value-range-storage.h (clone): Adjust param list.
+ 	(prange_storage::m_pt, m_points_to_p): New.
+ 	* value-range.cc (inchash::add_vrange): Add points-to to hash value.
+ 	(prange::set_pt): New.
+ 	(prange::pt_base): New.
+ 	(prange::pt_offset): New.
+ 	(prange::pt_size): New.
+ 	(prange::set): Initialize PTA field.
+ 	(prange::union_): Handle PTA cases.
+ 	(prange::intersect): Ditto.
+ 	(prange::operator=): Ditto.
+ 	(prange::operator==): Ditto.
+ 	(prange::invert): Handle PTA cases.
+ 	(prange::verify_range): Ditto.
+ 	* value-range.h (set_pt, set_pt_unknown, pt_unknown_p,
+ 	pt_invariant, pt_invariant_away, pt_invariant_p, pt_invariant_away_p,
+ 	pt_invert, pt_inverted_p, pt_base, pt_offset, pt_size,
+ 	pt_equal_p): New prange prototypes.
+ 	(prange::m_pt, prange::m_points_to_p): New members.
+ 	(prange::set_undefined): Clear PTA fields.
+ 	(prange::set_varying): Ditto.
+ 	(prange::set_nonzero): Ditto.
+ 	(prange::set_zero): Ditto.
+ 	(prange::zero_p): Check PTA fields.
+ 	(varying_compatible_p): Ditto.
+ 	(prange::set_pt): New.
+ 	(prange::set_pt_unknown): New.
+ 	(prange::pt_unknown_p): New.
+ 	(prange::pt_equal_p): New prange prototypes.
+ 	(prange::pt_inverted_p): New.
+ 	(prange::pt_invert): New.
+ 	(prange::pt_invariant): New.
+ 	(prange::pt_invariant_away): New.
+ 	(prange::pt_invariant_p): New.
+ 	(prange::pt_invariant_away_p): New.
+ 
+ 2026-06-16  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR c/125226
+ 	* targhooks.cc (default_stack_protect_guard): If UINTPTR_TYPE
+ 	isn't NULL, call unsigned_integer_tree_node_for_type with
+ 	UINTPTR_TYPE to get unsigned integer type for uintptr_t.
+ 	* tree.cc (unsigned_integer_tree_node_for_type): New function.
+ 	(build_common_tree_nodes): Call unsigned_integer_tree_node with
+ 	SIZE_TYPE to get unsigned integer type for size_t.
+ 	* tree.h (unsigned_integer_tree_node_for_type): New prototype.
+ 
+ 2026-06-16  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* doc/invoke.texi (-std=c++2d, -std=c++29, -std=gnu++2d,
+ 	-std=gnu++29): Document.
+ 	(-std=c++2c, -std=c++26, -std=gnu++2c, -std=gnu++26): Tweak so that
+ 	26 comes first and is meant as the supported option.
+ 	* doc/cpp.texi: Adjust expected __cplusplus value for -std=c++26,
+ 	document value for -std=c++29.
+ 	* dwarf2out.cc (highest_c_language): Handle C++29.
+ 	(gen_compile_unit_die): Likewise.  Adjust lversion for C++26.
+ 
+ 2026-06-16  Robin Dapp  <rdapp.gcc@gmail.com>
+ 
+ 	PR tree-optimization/125516
+ 	* tree-vect-data-refs.cc (vect_gather_scatter_fn_p): Set
+ 	supported_offset_vectype.
+ 	* tree-vect-stmts.cc (vectorizable_store): Skip nop conversions
+ 	when costing scatters.
+ 	(vectorizable_load): Ditto for gathers.
+ 
+ 2026-06-16  Abhishek Kaushik  <abhishek.kaushik@arm.com>
+ 
+ 	* tree-ssa-loop-niter.cc (determine_value_range): Query ranger
+ 	for integral expressions, not only SSA_NAMEs.  Query ranges on the
+ 	loop preheader edge.
+ 
+ 2026-06-16  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	* tree-vect-data-refs.cc (vect_slp_analyze_data_ref_dependence):
+ 	Return a three-way tree result (chrec_known when independent,
+ 	chrec_dont_know when the affine test cannot analyze the pair, the
+ 	dependence otherwise) instead of a bool.
+ 	(vect_slp_analyze_store_dependences): Resort to the alias oracle on
+ 	an unknown dependence as well as on a missing data reference; a
+ 	store is being moved so do not use TBAA.
+ 	(vect_slp_analyze_load_dependences): Likewise on the load-hoist
+ 	paths, using TBAA as a load is being hoisted; also record that the
+ 	ao_ref has been initialized in check_hoist.
+ 
+ 2026-06-16  Robin Dapp  <rdapp.gcc@gmail.com>
+ 
+ 	PR target/125670
+ 	* config/riscv/autovec-opt.md: Use avl_type operand number.
+ 
+ 2026-06-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/125730
+ 	* tree-ssa-loop-ivopts.cc (alloc_iv): Do not convert pointer
+ 	IVs to unsigned before canonicalizing.
+ 
+ 2026-06-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	* fold-const.cc (fold_plusminus_mult_expr): Use
+ 	wide_int for the case of two INTEGER_CST multiplicands.
+ 
+ 2026-06-16  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	PR target/125794
+ 	* config/aarch64/aarch64.cc (aarch64_simd_valid_imm): Do not fall
+ 	through to the replicating SVE immediate forms for a 128-bit
+ 	Advanced SIMD constant whose high 64 bits are zero (output_width
+ 	!= 0).
+ 
+ 2026-06-16  Avinash Jayakar  <avinashd@linux.ibm.com>
+ 
+ 	PR tree-optimization/59429
+ 	* match.pd: New match patterns to recognize spaceship variants.
+ 	* tree-ssa-math-opts.cc (gimple_spaceship): Match function declaration.
+ 	(match_spaceship): New function to recognize spaceship given phi node.
+ 	(math_opts_dom_walker::after_dom_children): Add match_spaceship check.
+ 
+ 2026-06-16  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/125614
+ 	* config/i386/i386-features.cc (replace_vector_const): Replace
+ 	gen_rtx_SUBREG with gen_lowpart.
+ 
+ 2026-06-15  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	* config/i386/i386.cc (ix86_insn_cost): Add a suitable penalty
+ 	for USE of a MEM in a PARALLEL (for *<absneg>[sd]f2_1 splitter).
+ 
+ 2026-06-15  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	PR target/125795
+ 	* config/aarch64/aarch64-early-ra.cc (early_ra::allocate_colors):
+ 	Compute the allocated-FPR mask as
+ 	((1ULL << color->group->size) - 1) << best.
+ 
+ 2026-06-15  Kael Andrew Franco  <kaelfandrew@gmail.com>
+ 
+ 	PR tree-optimization/125737
+ 	PR tree-optimization/125737
+ 	* match.pd: Use tree_expr_nonnegative_p for X % Y < Y to true.
+ 
+ 2026-06-15  Kael Andrew Franco  <kaelfandrew@gmail.com>
+ 
+ 	PR tree-optimization/125756
+ 	* match.pd: Use tree_expr_nonnegative_p for X < (typeof X)(X != 0) to false.
+ 
+ 2026-06-15  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	* tree-ssa-phiopt.cc (factor_out_all): New function.
+ 	(pass_phiopt::execute): Call factor_out_all isntead
+ 	of factor_out_conditional_operation and
+ 	cond_if_else_store_replacement_limited.
+ 
+ 2026-06-15  Konstantinos Eleftheriou  <konstantinos.eleftheriou@vrull.eu>
+ 
+ 	PR rtl-optimization/123754
+ 	* expmed.cc (store_integral_bit_field): When the SUBREG
+ 	narrowing fails, defer to store_split_bit_field instead of
+ 	asserting.
+ 
+ 2026-06-15  Jim Tsung-Chun Lin  <jim@andestech.com>
+ 
+ 	* common/config/riscv/riscv-common.cc (riscv_select_multilib):
+ 	Don't set riscv_no_matched_multi_lib here; let the caller own
+ 	the flag.
+ 	(riscv_compute_multilib): Drop the early return that accepted
+ 	the generic-matched multilib_dir; always run the smart matcher
+ 	and set riscv_no_matched_multi_lib when it finds no candidate.
+ 
+ 2026-06-15  Filip Kastl  <fkastl@suse.cz>
+ 
+ 	PR sanitizer/124206
+ 	* gcc.cc (driver::global_initializations): Ask for 128MB stack
+ 	instead of just 64MB when __SANITIZE_ADDRESS__ is defined.
+ 	* toplev.cc (toplev::main): Ditto.
+ 
+ 2026-06-15  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-ssa-reassoc.cc (ovce_extract_ops): Fixup
+ 	false value matching for the inverted comparison case.
+ 
+ 2026-06-15  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/125786
+ 	* tree-ssa-reassoc.cc (optimize_vec_cond_expr): Create a new
+ 	stmt instead of rewriting an existing possibly multi-use one.
+ 
+ 2026-06-15  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	* config/avr/avr-protos.h (avr_out_delay_loop): New proto.
+ 	* config/avr/avr.cc (avr_out_delay_loop): New function.
+ 	(avr_adjust_insn_length) [ADJUST_LEN_DELAY_LOOP]: Handle case.
+ 	(avr_expand_delay_cycles): Overhaul.  Allow loop counts of
+ 	zero; they represent a power of 2.
+ 	* config/avr/avr.md (adjust_len) [delay_loop]: Add.
+ 	(*delay_cycles_1): Use avr_out_delay_loop for asm out.
+ 	(*delay_cycles_4): Same.
+ 	(*delay_cycles_3): Same.
+ 	(*delay_cycles_2): Same.  Relax constraints to "d".
+ 	Use two QImode scratch regs instead of one HImode one.
+ 
+ 2026-06-15  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/125790
+ 	* match.pd (`(~x)>>x`): Reject truncation of shifter.
+ 
+ 2026-06-15  Monk Chiang  <62004175+monkchiang@users.noreply.github.com>
+ 
+ 	* config/riscv/riscv-zicfilp.cc (rest_of_insert_landing_pad):
+ 	Remove gen_lpad_align before non-local goto labels; LABEL_ALIGN
+ 	now handles their alignment.  Simplify gpr_save handling: the
+ 	pattern now outputs the full CFI sequence itself.
+ 	* config/riscv/riscv.cc (riscv_output_mi_thunk): Add
+ 	gen_lpad_align before entry lpad.
+ 	* config/riscv/riscv.h (LABEL_ALIGN): New macro; ensures 4-byte
+ 	alignment for Zicfilp non-local goto target labels.
+ 	* config/riscv/riscv.md (gpr_save): When is_zicfilp_p, output
+ 	.p2align 2, .option push/norelax/norvc, call, .option pop, lpad 0.
+ 
+ 2026-06-15  Monk Chiang  <monk.chiang@sifive.com>
+ 
+ 	* config/riscv/riscv-protos.h (riscv_call_needs_lpad_p): Declare.
+ 	* config/riscv/riscv.cc (riscv_gnu_attributes): Register new
+ 	indirect_return attribute for function declarations.
+ 	(riscv_call_needs_lpad_p): New function.
+ 	* config/riscv/riscv.md (call_internal_cfi): New insn pattern with
+ 	length attribute.
+ 	(call_value_internal_cfi): Likewise for call-with-return-value,
+ 	with comment and length attribute.
+ 	(define_expand "call"): Emit call_internal_cfi when
+ 	riscv_call_needs_lpad_p returns true.
+ 	(define_expand "call_value"): Likewise.
+ 
+ 2026-06-14  Stafford Horne  <shorne@gmail.com>
+ 
+ 	* config/or1k/or1k.md (cbranchsi4): Add clobber clause.
+ 
+ 2026-06-14  Stafford Horne  <shorne@gmail.com>
+ 
+ 	* config/or1k/or1k.h (SHIFT_COUNT_TRUNCATED): Define.
+ 	* config/or1k/or1k.md (rotrsi3): Rename reg_or_u6_operand to
+ 	reg_or_u5_operand.
+ 	(<shift_op>si3): Ditto.
+ 	* config/or1k/predicates.md (reg_or_u6_operand): Remove.
+ 	(reg_or_u5_operand): New predicate.
+ 
+ 2026-06-14  François-Xavier Coudert  <fxcoudert@gcc.gnu.org>
+ 
+ 	PR target/120645
+ 	* config/darwin-driver.cc: Account for latest macOS numbering
+ 	scheme.
+ 
+ 2026-06-14  Souradipto Das  <souradiptodas6@gmail.com>
+ 
+ 	* match.pd: Add simplification rules for
+ 	(a == 0) | ((a | b) == 0) -> (a == 0) and
+ 	(a != 0) & ((a | b) != 0) -> (a != 0).
+ 
+ 2026-06-14  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/125774
+ 	* gimple-range-fold.cc (fold_using_range::relation_fold_and_or): Use
+ 	relation_swap rather than relation_negate when the operands are exchanged.
+ 
  2026-06-13  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
  
  	PR tree-optimization/125776
diff -Nrcpad gcc-17-20260614/gcc/DATESTAMP gcc-17-20260621/gcc/DATESTAMP
*** gcc-17-20260614/gcc/DATESTAMP	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/DATESTAMP	Sun Jun 21 22:32:05 2026
***************
*** 1 ****
! 20260614
--- 1 ----
! 20260621
diff -Nrcpad gcc-17-20260614/gcc/Makefile.in gcc-17-20260621/gcc/Makefile.in
*** gcc-17-20260614/gcc/Makefile.in	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/Makefile.in	Sun Jun 21 22:32:05 2026
*************** OBJS = \
*** 1849,1855 ****
  	tristate.o \
  	typed-splay-tree.o \
  	valtrack.o \
- 	value-pointer-equiv.o \
  	value-query.o \
  	value-range.o \
  	value-range-pretty-print.o \
--- 1849,1854 ----
diff -Nrcpad gcc-17-20260614/gcc/acinclude.m4 gcc-17-20260621/gcc/acinclude.m4
*** gcc-17-20260614/gcc/acinclude.m4	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/acinclude.m4	Sun Jun 21 22:32:05 2026
*************** AC_DEFUN([gcc_GAS_FLAGS],
*** 511,516 ****
--- 511,519 ----
        x86_64-*-linux-gnux32*)
  	gcc_cv_as_flags=--x32
  	;;
+       x86_64-*-linux-gnuabi32 | x86_64-*-mingw32abi32)
+ 	gcc_cv_as_flags=--32
+ 	;;
        x86_64-*-* | sparcv9-*-* | sparc64-*-*)
  	gcc_cv_as_flags=--64
  	;;
diff -Nrcpad gcc-17-20260614/gcc/ada/ChangeLog gcc-17-20260621/gcc/ada/ChangeLog
*** gcc-17-20260614/gcc/ada/ChangeLog	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/ChangeLog	Sun Jun 21 22:32:05 2026
***************
*** 1,3 ****
--- 1,356 ----
+ 2026-06-19  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* exp_ch4.adb (Expand_N_Expression_With_Actions): Create a temporary
+ 	only for types that can be copied, and replace the EWA node by its
+ 	expression for other types.
+ 	* exp_ch6.adb (Expand_Ctrl_Function_Call): Bail out when the parent
+ 	is an EWA node.
+ 	* sem_ch3.adb (OK_For_Limited_Init_In_05): Recurse on the expression
+ 	of an EWA node.
+ 
+ 2026-06-19  Viljar Indus  <indus@adacore.com>
+ 
+ 	* fe.h: Define Error_Msg_Sloc for gigi.
+ 
+ 2026-06-19  Viljar Indus  <indus@adacore.com>
+ 
+ 	* styleg.adb (Check_Comment): use correct switch name in
+ 	error message.
+ 
+ 2026-06-19  Ronan Desplanques  <desplanques@adacore.com>
+ 
+ 	* exp_attr.adb (Spot, Spot_Kind): New types.
+ 	(Build_And_Insert_Type_Attr_Subp, Skip_Non_Source_Subps,
+ 	Find_Insertion_Point_For_Ancestor): Handle case of empty body
+ 	declaration list.
+ 
+ 2026-06-19  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* sem_res.adb (Check_Discriminant_Use): Rename PN local variable as
+ 	Par and apply minor formatting tweaks.
+ 	(Resolve_Allocator): For the subtype indication form, make sure to
+ 	take the constraints of a subtype into account instead of those of
+ 	the indication in order to implement the static accessibility check.
+ 
+ 2026-06-19  Olivier Hainque  <hainque@adacore.com>
+ 
+ 	* tracebak.c: Improve documentation of BASE_SKIP.
+ 	* libgnat/g-traceb.ads (Call_Chain procedure): Clarify the
+ 	expected behavior wrt Call_Chain itself.
+ 	* libgnat/g-traceb.adb (Call_Chain procedure): Propagate
+ 	a Skip_Frames value to System.TB.Call_Chain accordingly.
+ 	* libgnat/libgnat.gpr: Use the same special switches for
+ 	g-traceb.adb as for s-traceb.adb.
+ 	* Makefile.rtl: Likewise.
+ 	* libgnat/s-traceb.adb: Reword top comment on the need
+ 	to prevent optimizations. No need to specify how to do it
+ 	here.
+ 
+ 2026-06-19  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* expander.adb (Expand): Revert latest change.
+ 	* ghost.adb (Set_Ghost_Mode): Likewise.
+ 	* sem_ch3.adb (Analyze_Subtype_Declaration): Also copy the RM size
+ 	for floating-point types.
+ 	* sem_prag.adb (Analyze_Pragma) <Pragma_Check>: Do not mark the
+ 	pragma as Ghost when expander is active and the pragma is ignored.
+ 	Preanalyze it instead of analyzing it, and rewrite it as a null
+ 	statement at the end of the processing.
+ 
+ 2026-06-19  Viljar Indus  <indus@adacore.com>
+ 
+ 	* restrict.adb (Check_Restriction_No_Specification_Of_Aspect): add
+ 	Diagnostic_Id for error message.
+ 	(Check_Restriction_No_Use_Of_Attribute): Likewise.
+ 	(Check_Restriction_No_Use_Of_Pragma): Likewise.
+ 
+ 2026-06-19  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* libgnat/a-suenco.adb (Convert): Remove double space after comma.
+ 
+ 2026-06-19  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* sem_ch3.adb (Analyze_Object_Declaration): Streamline test.
+ 
+ 2026-06-19  Marc Poulhiès  <poulhies@adacore.com>
+ 
+ 	* par.adb (Pf_Rec.Pexp): Renamed to...
+ 	(Pf_Rec.Expf): ...this.
+ 	(Pf_Decl_Gins_Pbod_Rnam_Stub_Pexp): Renamed to...
+ 	(Pf_Decl_Gins_Pbod_Rnam_Stub_Expf): ... this.
+ 	(Pf_Decl_Gins_Pbod_Rnam_Stub_Pexp): Renamed to...
+ 	(Pf_Decl_Gins_Pbod_Rnam_Stub_Expf): ... this.
+ 	(Pf_Decl_Gins_Pbod_Rnam_Pexp): Renamed to ...
+ 	(Pf_Decl_Gins_Pbod_Rnam_Expf): ... this.
+ 	(Pf_Decl_Pbod_Pexp): Renamed to ...
+ 	(Pf_Decl_Pbod_Expf): ... this.
+ 	(Pf_Pbod_Pexp): Renamed to ...
+ 	(Pf_Pbod_Expf): ... this.
+ 	* par-ch6.adb (Rewrite_Entity_If_Direct_Attribute_Def)
+ 	(Likely_Expression_Function): Adjust.
+ 	* par-ch10.adb (P_Compilation_Unit, P_Subunit): Likewise.
+ 	* par-ch3.adb (P_Declarative_Item): Likewise.
+ 	* par-ch7.adb (P_Package): Likewise.
+ 	* par-ch9.adb (P_Entry_Or_Subprogram_With_Indicator)
+ 	(P_Protected_Operation_Items): Adjust.
+ 
+ 2026-06-19  Marc Poulhiès  <poulhies@adacore.com>
+ 
+ 	* exp_ch3.adb (Build_Implicit_Copy_Constructor)
+ 	(Build_Implicit_Parameterless_Constructor): Refactor how node is
+ 	discarded.
+ 
+ 2026-06-19  Ronan Desplanques  <desplanques@adacore.com>
+ 
+ 	* opt.ads (Init_Or_Norm_Scalars): Turn into expression function.
+ 	* opt.adb (Restore_Config_Switches, Set_Config_Switches): Remove
+ 	assignment.
+ 	* frontend.adb (Frontend): Remove assignment.
+ 	* sem_prag.adb (Do_Initialize_Scalars, Analyze_Pragma): Remove
+ 	assignment.
+ 	* targparm.adb (Get_Target_Parameters): Remove assignment.
+ 
+ 2026-06-19  Ronan Desplanques  <desplanques@adacore.com>
+ 
+ 	* opt.adb (Save_Config_Switches): Remove useless assignment.
+ 	* opt.ads (Config_Switches_Type): Remove unused component.
+ 
+ 2026-06-18  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* accessibility.ads (Apply_Accessibility_Check_For_Allocator):
+ 	Rename to...
+ 	(Apply_Accessibility_Check_For_Class_Wide_Allocator): ...this.
+ 	(Apply_Accessibility_Check_For_Discriminated_Allocator): New.
+ 	* accessibility.adb (Apply_Accessibility_Check_For_Allocator):
+ 	Rename to...
+ 	(Apply_Accessibility_Check_For_Class_Wide_Allocator): ...this.
+ 	Call Duplicate_Subexpr directly instead of reimplementing it.
+ 	(Apply_Accessibility_Check_For_Discriminated_Allocator): New.
+ 	(Apply_Accessibility_Check_For_Discriminated_Return): Streamline.
+ 	(Apply_Accessibility_Check_For_Return): Tweak comments.
+ 	* exp_ch4.adb (Expand_Allocator_Expression): Call
+ 	Apply_Accessibility_Check_For_Discriminated_Allocator and
+ 	adjust calls to Apply_Accessibility_Check_For_Allocator.
+ 	(Expand_N_Allocator): Likewise.
+ 
+ 2026-06-18  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_util.adb (Is_OK_Modifies_Context): Accept references in Modifies
+ 	clauses.
+ 
+ 2026-06-18  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* aspects.ads (Aspect_Id, Implementation_Defined_Aspect,
+ 	Aspect_Argument, Is_Representation_Aspect, Aspect_Names, Aspect_Delay):
+ 	Add new aspect and its basic characteristics.
+ 	* contracts.adb (Add_Contract_Item,
+ 	Analyze_Entry_Or_Subprogram_Contract,
+ 	Analyze_Entry_Or_Subprogram_Body_Contract,
+ 	Analyze_Subprogram_Body_Stub_Contract): Handle new aspect.
+ 	* contracts.ads (Add_Contract_Item,
+ 	Analyze_Entry_Or_Subprogram_Contract,
+ 	Analyze_Entry_Or_Subprogram_Body_Contract,
+ 	Analyze_Subprogram_Body_Stub_Contract): Likewise.
+ 	* doc/gnat_rm/implementation_defined_aspects.rst (Aspect Modifies):
+ 	Document new aspect.
+ 	* doc/gnat_rm/implementation_defined_pragmas.rst (Pragma Modifies):
+ 	Document corresponding pragma.
+ 	* einfo-utils.adb
+ 	(Get_Pragma): Handle new pragma
+ 	* einfo-utils.ads
+ 	(Get_Pragma): Likewise.
+ 	* inline.adb (Remove_Aspects_And_Pragmas): Handle new pragma.
+ 	* par-ch13.adb (P_Modifies_Specification): Parse special aspect syntax.
+ 	(Get_Aspect_Specifications): Parse new aspect.
+ 	* par-prag.adb (Prag): Temporarily accept new pragma.
+ 	* sem_ch12.adb (Implementation of Generic Contracts): Update list of
+ 	supported contracts.
+ 	* sem_ch13.adb (Analyze_One_Aspect, Analyze_Aspect_Specifications,
+ 	Check_Aspect_At_Freeze_Point): Analyze new aspect.
+ 	* sem_ch8.adb (In_Abstract_View_Pragma): Abstract states can appear in
+ 	new contract.
+ 	* sem_prag.adb (Contract_Freeze_Error, Ensure_Aggregate_Form): Update
+ 	list of supported contracts.
+ 	(Analyze_Modifies_In_Decl_Part, Analyze_Pragma): Analyze new pragma.
+ 	(Sig_Flags): Support new pragma.
+ 	* sem_prag.ads (Aspect_Specifying_Pragma, Assertion_Expression_Pragma,
+ 	Pragma_Significant_To_Subprograms, Find_Related_Declaration_Or_Body):
+ 	Handle new pragma.
+ 	(Analyze_Modifies_In_Decl_Part): Analyze new pragma.
+ 	* sem_util.adb, sem_util.ads (Is_Subprogram_Contract_Annotation):
+ 	Handle new contract.
+ 	* sinfo.ads (Is_Generic_Contract_Pragma, Contract): New contract is
+ 	a generic contract.
+ 	* snames.ads-tmpl: New contract name and new pragma.
+ 	* gnat_rm.texi: Regenerate.
+ 
+ 2026-06-18  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* doc/gnat_rm/implementation_defined_pragmas.rst
+ 	(Subprogram_Variant): Refill paragraph.
+ 	* sem_prag.adb (Analyze_Exceptional_Cases_In_Decl_Part): Fix header.
+ 	* gnat_rm.texi: Regenerate.
+ 
+ 2026-06-18  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* sem_util.ads (Get_Pool_Object_Or_Dereference): New function.
+ 	* sem_util.adb (Get_Pool_Object_Or_Dereference): Likewise, mostly
+ 	taken from...
+ 	* sem_ch13.adb (Analyze_Attribute_Definition_Clause) <Object_From>:
+ 	...here.
+ 	<Attribute_Storage_Pool>: Call Get_Pool_Object_Or_Dereference.
+ 	* exp_ch3.adb (Freeze_Type): Add missing checks of RM 13.11.4(24-27)
+ 	and apply them to all regular pools not statically descendants from
+ 	Root_Storage_Pool_With_Subpools when its unit has been loaded.
+ 
+ 2026-06-18  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* exp_ch4.adb (Expand_N_Type_Conversion): Do not apply again static
+ 	accessibility checks in instance bodies.
+ 	* sem_res.adb (Valid_Conversion): Insert the raise statements for
+ 	the failure of static accessibility checks in instance bodies.
+ 
+ 2026-06-18  Ronan Desplanques  <desplanques@adacore.com>
+ 	    Mathias Aparicio  <aparicio@adacore.com>
+ 
+ 	* gen_il-fields.ads (Declared_In_Package_Body): New field.
+ 	(Scope): Rename into...
+ 	(Scope_Gen_IL_Private): ...this.
+ 	* einfo-utils.ads (Scope, Set_Scope): New subprograms.
+ 	* einfo-utils.adb (Set_Scope): New subprogram.
+ 	* einfo.ads (In_Package_Body): Update documentation.
+ 	(Declared_In_Package_Body): Add documentation.
+ 	(Is_Package_Body_Entity): Remove.
+ 	* fe.h (Scope): New macro.
+ 	* gen_il-gen-gen_entities.adb (Gen_Entities): New field.
+ 	New contract. Remove Sm (Is_Package_Body_Entity).
+ 	* gen_il-gen-gen_nodes.adb (Gen_Nodes): Adapt to renaming.
+ 	* gen_il-gen.adb (Compute_Field_Offsets): Adapt to renaming.
+ 	* gen_il-internals.adb (Image): Adapt to renaming.
+ 	* lib-load.adb, lib.adb: Add with clauses.
+ 	* sem_ch3.adb (Analyze_Object_Declaration): Remove field update.
+ 	* sem_ch6.adb (Enter_Overloaded_Entity): Likewise.
+ 	* sem_util.adb (Collect_Primitive_Operations): Use new field.
+ 	(Enter_Name): Replace Is_Package_Body_Entity with
+ 	Declared_In_Package_Body.
+ 	* treepr.adb (Image): Add F_Scope_Gen_IL_Private alternative
+ 	that returns Scope.
+ 	* exp_dbug.adb (Is_BNPE): Replace Is_Package_Body_Entity with
+ 	Declared_In_Package_Body.
+ 	* sem_ch12.adb (Check_Generic_Actuals): Likewise.
+ 	* sem_warn.adb (Generic_Package_Spec_Entity): Likewise.
+ 	* sem_ch7.adb (Analyze_Package_Body_Helper): Replace
+ 	Set_Is_Package_Body_Entity with Set_Declared_In_Package_Body.
+ 
+ 2026-06-18  Viljar Indus  <indus@adacore.com>
+ 
+ 	* sem_disp.adb (Warn_On_Late_Primitive_After_Private_Extension):
+ 	apply warning character correctly.
+ 
+ 2026-06-18  Viljar Indus  <indus@adacore.com>
+ 
+ 	* sem_elab.adb (Output_Calls): Apply correct warning
+ 	characeter for each continuation message.
+ 	(Check_Internal_Call_Continue): Use regular warning
+ 	character in error messages.
+ 
+ 2026-06-18  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* accessibility.adb (Accessibility_Level): Also deal with SAOOAAATs
+ 	without extra accessibility object alongside formal parameters.
+ 	(Check_Return_Construct_Accessibility): Streamline the error message
+ 	and adjust it to expression functions.
+ 	* exp_ch4.adb (Expand_Allocator_Expression): Do not perform a static
+ 	accessibility check here.
+ 	* sem_res.adb (Resolve_Allocator): Streamline the implementation of
+ 	the static accessibility check of RM 4.8(5.3), use a more consistent
+ 	error message, adjust it to instantiation bodies, and specifically
+ 	deal with formal parameters.
+ 
+ 2026-06-18  Ronan Desplanques  <desplanques@adacore.com>
+ 
+ 	* exp_attr.adb (Skip_Non_Source_Subps): Move before local object
+ 	declarations and add formals.
+ 	(Build): Move before local object declarations.
+ 	(Find_Insertion_Point_For_Ancestor): New local function.
+ 	(Build_And_Insert_Type_Attr_Subp): Use new function.
+ 
+ 2026-06-18  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_attr.adb (Uneval_Old_Msg): Attribute Old never occurs outside of
+ 	a pragma.
+ 	* sem_ch13.adb (Analyze_One_Aspect): Attach expression copy of a
+ 	class-wide aspect to the corresponding pragma.
+ 	* sem_prag.adb (Analyze_Pre_Post_Condition): Likewise for a class-wide
+ 	pragma.
+ 
+ 2026-06-18  Viljar Indus  <indus@adacore.com>
+ 
+ 	* rtsfind.adb (Maybe_Add_With): Fix skipping implicit
+ 	withs when only an ignored implicit with exists.
+ 
+ 2026-06-18  Marc Poulhiès  <poulhies@adacore.com>
+ 
+ 	* sprint.ads (Sprint_Indented_List): Adjust comment.
+ 
+ 2026-06-18  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* sem_ch12.adb (Analyze_Generic_Package_Declaration): Do not set the
+ 	Body_Needed_For_Inlining flag on the current semantic unit if the
+ 	package is declared within an instance or does not require a body.
+ 	(Analyze_Generic_Subprogram_Declaration): Similarly, do not set the
+ 	Body_Needed_For_Inlining flag on the current semantic unit if the
+ 	subprogram is declared within an instance.
+ 
+ 2026-06-18  Javier Miranda  <miranda@adacore.com>
+ 
+ 	* exp_ch4.adb (Expand_N_Allocator): For a class-wide designated
+ 	type with a constructor initializer, add a type conversion to
+ 	the specific type to avoid a dispatching call (since contructors
+ 	are not dispatching primitives).
+ 	* sem_ch13.adb (Analyze_Aspect_Specifications)
+ 	<Aspect_Initialize>: Avoid reporting a spurious error.
+ 
+ 2026-06-18  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* accessibility.ads (Check_Return_Construct_Accessibility): Document
+ 	that it also implements the 6.8(5) rule.
+ 	* accessibility.adb (Accessibility_Message): Remove dead return.
+ 	(Apply_Accessibility_Check_For_Anonymous_Return): Do not apply the
+ 	static check of 6.5(5.9) here.
+ 	(Check_Return_Construct_Accessibility): Do not use "return object"
+ 	in the error message.  Do not reject synthesized return statements
+ 	when the function comes from source to handle expression funtions.
+ 	Robustify processing and explicitly deal with formal parameters.
+ 
+ 2026-06-18  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* sem_ch12.adb (Build_Structural_Instantiation): Temporarily disable
+ 	registration of tagged types when analyzing the instantiation.
+ 
+ 2026-06-18  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* libgnat/a-cbinho.adb (Clear): Deallocate the subpool even if the
+ 	container is empty.
+ 
+ 2026-06-18  Viljar Indus  <indus@adacore.com>
+ 
+ 	* restrict.adb (Process_Restriction_Synonyms): Fix continuation
+ 	message.
+ 	* sem_prag.adb (Analyze_Pragma): Likewise.
+ 
+ 2026-06-18  Javier Miranda  <miranda@adacore.com>
+ 
+ 	* sem_attr.adb (Analyze_Attribute): Report an error when the number
+ 	of actual parameters for a constructor do not match any available
+ 	constructor.
+ 	* exp_ch6.adb (Make_Init_Proc_Call): Add the _Init_Level accessibility
+ 	level formal when building a call to the init proc of a limited record
+ 	type.
+ 	(Prepend_Constructor_Procedure_Prologue): Restrict the initialization
+ 	of the _parent component to cases where a Super aspect is present
+ 	or a parameterless parent constructor exists.
+ 
  2026-06-09  Eric Botcazou  <ebotcazou@adacore.com>
  
  	PR ada/125695
diff -Nrcpad gcc-17-20260614/gcc/ada/Makefile.rtl gcc-17-20260621/gcc/ada/Makefile.rtl
*** gcc-17-20260614/gcc/ada/Makefile.rtl	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/Makefile.rtl	Sun Jun 21 22:32:05 2026
*************** system.o: system.ads
*** 3405,3418 ****
  	  $(ADA_TARGET_PROPERTIES) \
  	  $(OUTPUT_OPTION)
  
! # Force no sibling call optimization on s-traceb.o so the number of stack
! # frames to be skipped when computing a call chain is not modified by
! # optimization. We don't want inlining, either.
  
  s-traceb.o: s-traceb.adb s-traceb.ads
  	$(ADAC) -c $(ALL_ADAFLAGS) $(FORCE_DEBUG_ADAFLAGS) \
  	  $(NO_INLINE_ADAFLAGS) $(NO_SIBLING_ADAFLAGS) $(ADA_INCLUDES) $< \
  	  $(OUTPUT_OPTION)
  
  # Compile s-tasdeb.o without optimization and with debug info so that it is
  # always possible to set conditional breakpoints on tasks.
--- 3405,3423 ----
  	  $(ADA_TARGET_PROPERTIES) \
  	  $(OUTPUT_OPTION)
  
! # Force no sibling call optimization on s-traceb.o and g-traceb.o so the
! # number of stack frames to be skipped when computing a call chain is not
! # modified by optimization. We don't want inlining, either.
  
  s-traceb.o: s-traceb.adb s-traceb.ads
  	$(ADAC) -c $(ALL_ADAFLAGS) $(FORCE_DEBUG_ADAFLAGS) \
  	  $(NO_INLINE_ADAFLAGS) $(NO_SIBLING_ADAFLAGS) $(ADA_INCLUDES) $< \
  	  $(OUTPUT_OPTION)
+ 
+ g-traceb.o: g-traceb.adb g-traceb.ads
+ 	$(ADAC) -c $(ALL_ADAFLAGS) $(FORCE_DEBUG_ADAFLAGS) \
+ 	  $(NO_INLINE_ADAFLAGS) $(NO_SIBLING_ADAFLAGS) $(ADA_INCLUDES) $< \
+ 	  $(OUTPUT_OPTION)
  
  # Compile s-tasdeb.o without optimization and with debug info so that it is
  # always possible to set conditional breakpoints on tasks.
diff -Nrcpad gcc-17-20260614/gcc/ada/accessibility.adb gcc-17-20260621/gcc/ada/accessibility.adb
*** gcc-17-20260614/gcc/ada/accessibility.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/accessibility.adb	Sun Jun 21 22:32:05 2026
*************** package body Accessibility is
*** 111,117 ****
             Make_Raise_Program_Error (Loc,
               Reason => PE_Accessibility_Check_Failed));
           Set_Etype (N, Typ);
-          return;
  
        else
           Error_Msg_F ("non-local pointer cannot point to local object", P);
--- 111,116 ----
*************** package body Accessibility is
*** 669,691 ****
              then
                 return Make_Level_Literal (Scope_Depth (Standard_Standard));
  
-             --  Return the library level for formal parameters of an anonymous
-             --  access type without extra accessiblity formal. This may happen
-             --  for subprograms with foreign convention or when expansion is
-             --  disabled, see Sem_Ch6.Create_Extra_Formals.
- 
-             elsif Is_Formal (E)
-               and then Ekind (Etype (E)) = E_Anonymous_Access_Type
-               and then No (Get_Dynamic_Accessibility (E))
-             then
-                return Make_Level_Literal (Scope_Depth (Standard_Standard));
- 
              --  Formal parameters with an extra accessibility formal, as well
              --  as stand-alone objects of an anonymous access type (SAOOAAAT).
  
              elsif (Is_Formal (E) or else Ekind (E) in E_Constant | E_Variable)
                and then Present (Get_Dynamic_Accessibility (E))
!               and then (Level in Dynamic_Level | Zero_On_Dynamic_Level)
              then
                 if Level = Zero_On_Dynamic_Level then
                    return Make_Level_Literal (Scope_Depth (Standard_Standard));
--- 668,679 ----
              then
                 return Make_Level_Literal (Scope_Depth (Standard_Standard));
  
              --  Formal parameters with an extra accessibility formal, as well
              --  as stand-alone objects of an anonymous access type (SAOOAAAT).
  
              elsif (Is_Formal (E) or else Ekind (E) in E_Constant | E_Variable)
                and then Present (Get_Dynamic_Accessibility (E))
!               and then Level in Dynamic_Level | Zero_On_Dynamic_Level
              then
                 if Level = Zero_On_Dynamic_Level then
                    return Make_Level_Literal (Scope_Depth (Standard_Standard));
*************** package body Accessibility is
*** 719,724 ****
--- 707,725 ----
  
                 return New_Occurrence_Of (Get_Dynamic_Accessibility (E), Loc);
  
+             --  Return the library level for formal parameters or stand-alone
+             --  objects of an anonymous access type without extra accessibility
+             --  object. This may happen for subprograms with foreign convention
+             --  or when expansion is disabled, see Sem_Ch6.Create_Extra_Formals
+             --  and Exp_Ch3.Expand_N_Object_Declaration.
+ 
+             elsif (Is_Formal (E) or else Ekind (E) in E_Constant | E_Variable)
+               and then Is_Anonymous_Access_Type (Etype (E))
+               and then not Is_Local_Anonymous_Access (Etype (E))
+               and then Level in Dynamic_Level | Zero_On_Dynamic_Level
+             then
+                return Make_Level_Literal (Scope_Depth (Standard_Standard));
+ 
              --  Initialization procedures have a special extra accessibility
              --  parameter associated with the level at which the object
              --  being initialized exists
*************** package body Accessibility is
*** 989,999 ****
        end case;
     end Accessibility_Level;
  
!    ---------------------------------------------
!    -- Apply_Accessibility_Check_For_Allocator --
!    ---------------------------------------------
  
!    procedure Apply_Accessibility_Check_For_Allocator
       (N              : Node_Id;
        Exp            : Node_Id;
        Ref            : Node_Id;
--- 990,1000 ----
        end case;
     end Accessibility_Level;
  
!    --------------------------------------------------------
!    -- Apply_Accessibility_Check_For_Class_Wide_Allocator --
!    --------------------------------------------------------
  
!    procedure Apply_Accessibility_Check_For_Class_Wide_Allocator
       (N              : Node_Id;
        Exp            : Node_Id;
        Ref            : Node_Id;
*************** package body Accessibility is
*** 1024,1037 ****
           --  If the allocator was built in place, Ref is already a reference
           --  to the access object initialized to the result of the allocator
           --  (see Exp_Ch6.Make_Build_In_Place_Call_In_Allocator). We call
!          --  Remove_Side_Effects for cases where the build-in-place call may
           --  still be the prefix of the reference (to avoid generating
           --  duplicate calls). Otherwise, it is the entity associated with
           --  the object containing the address of the allocated object.
  
           if Built_In_Place then
!             Remove_Side_Effects (Ref);
!             Obj_Ref := New_Copy_Tree (Ref);
           else
              Obj_Ref := New_Occurrence_Of (Ref, Loc);
           end if;
--- 1025,1037 ----
           --  If the allocator was built in place, Ref is already a reference
           --  to the access object initialized to the result of the allocator
           --  (see Exp_Ch6.Make_Build_In_Place_Call_In_Allocator). We call
!          --  Duplicate_Subexpr for cases where the build-in-place call may
           --  still be the prefix of the reference (to avoid generating
           --  duplicate calls). Otherwise, it is the entity associated with
           --  the object containing the address of the allocated object.
  
           if Built_In_Place then
!             Obj_Ref := Duplicate_Subexpr (Ref);
           else
              Obj_Ref := New_Occurrence_Of (Ref, Loc);
           end if;
*************** package body Accessibility is
*** 1177,1183 ****
               Then_Statements => Stmts),
             Suppress => All_Checks);
        end if;
!    end Apply_Accessibility_Check_For_Allocator;
  
     ----------------------------------------------------
     -- Apply_Accessibility_Check_For_Anonymous_Return --
--- 1177,1183 ----
               Then_Statements => Stmts),
             Suppress => All_Checks);
        end if;
!    end Apply_Accessibility_Check_For_Class_Wide_Allocator;
  
     ----------------------------------------------------
     -- Apply_Accessibility_Check_For_Anonymous_Return --
*************** package body Accessibility is
*** 1239,1270 ****
        if Present (Extra_Accessibility_Of_Result (Func))
          and then not Has_Level_Tied_To_Explicitly_Aliased_Parameter (Exp)
        then
!          declare
!             Discrim_Level : constant Node_Id :=
!               Accessibility_Level (Expr              => Exp,
!                                    Level             => Dynamic_Level,
!                                    In_Return_Context => True);
! 
!          begin
!             if Nkind (Discrim_Level) = N_Integer_Literal
!               and then Intval (Discrim_Level) > Scope_Depth (Func)
!             then
!                Error_Msg_N
!                  ("level of type of access value of return expression "
!                   & "is statically too deep",
!                   Enclosing_Declaration_Or_Statement (Exp));
!             end if;
! 
!             Insert_Action (Insert_Node,
!               Make_Raise_Program_Error (Loc,
!                 Condition =>
!                   Make_Op_Gt (Loc,
!                     Left_Opnd  => Discrim_Level,
!                     Right_Opnd => New_Occurrence_Of
!                       (Extra_Accessibility_Of_Result (Func), Loc)),
!                 Reason    => PE_Accessibility_Check_Failed),
!               Suppress => Access_Check);
!          end;
        end if;
     end Apply_Accessibility_Check_For_Anonymous_Return;
  
--- 1239,1255 ----
        if Present (Extra_Accessibility_Of_Result (Func))
          and then not Has_Level_Tied_To_Explicitly_Aliased_Parameter (Exp)
        then
!          Insert_Action (Insert_Node,
!            Make_Raise_Program_Error (Loc,
!              Condition =>
!                Make_Op_Gt (Loc,
!                  Left_Opnd  =>
!                    Accessibility_Level
!                      (Exp, Dynamic_Level, In_Return_Context => True),
!                  Right_Opnd => New_Occurrence_Of
!                    (Extra_Accessibility_Of_Result (Func), Loc)),
!              Reason    => PE_Accessibility_Check_Failed),
!            Suppress => Access_Check);
        end if;
     end Apply_Accessibility_Check_For_Anonymous_Return;
  
*************** package body Accessibility is
*** 1381,1386 ****
--- 1366,1467 ----
        end if;
     end Apply_Accessibility_Check_For_Class_Wide_Return;
  
+    -----------------------------------------------------------
+    -- Apply_Accessibility_Check_For_Discriminated_Allocator --
+    -----------------------------------------------------------
+ 
+    procedure Apply_Accessibility_Check_For_Discriminated_Allocator
+      (N : Node_Id)
+    is
+       Loc     : constant Source_Ptr := Sloc (N);
+       Typ     : constant Entity_Id  := Etype (Expression (N));
+       Exp     : constant Node_Id    := Unqualify (Expression (N));
+       Exp_Typ : constant Entity_Id  := Etype (Exp);
+ 
+       Discr      : Entity_Id;
+       Discr_Elmt : Elmt_Id;
+       Discr_Exp  : Node_Id;
+ 
+    --  Start of Apply_Accessibility_Check_For_Discriminated_Allocator
+ 
+    begin
+       --  Return immediately if accessibility checks are suppressed for N
+ 
+       if Scope_Suppress.Suppress (Accessibility_Check)
+         or else No_Dynamic_Accessibility_Checks_Enabled (N)
+       then
+          return;
+ 
+       --  Check that the allocator's access discriminants do not designate
+       --  entities that the allocator could outlive (RM 4.8(10.1)).
+ 
+       elsif not Has_Anonymous_Access_Discriminant (Typ) then
+          return;
+ 
+       --  We ignore coextensions as they cannot be implemented under the
+       --  "small integer" model.
+ 
+       elsif Is_Static_Coextension (N) or else Is_Dynamic_Coextension (N) then
+          return;
+ 
+       --  If we are allocating a function result, then that function will
+       --  perform the check.
+ 
+       elsif Nkind (Exp) = N_Function_Call then
+          return;
+ 
+       --  When the value of the access discriminant is determined by
+       --  an object with an unconstrained nominal subtype, its level
+       --  is the accessibility level of the object (RM 3.10.2(12.4)).
+ 
+       elsif not Is_Constrained (Exp_Typ) then
+          Insert_Action (N,
+            Make_Raise_Program_Error (Loc,
+              Condition =>
+                Make_Op_Gt (Loc,
+                  Left_Opnd  => Accessibility_Level (Exp, Dynamic_Level),
+                  Right_Opnd => Accessibility_Level (N, Dynamic_Level)),
+              Reason    => PE_Accessibility_Check_Failed),
+            Suppress => Access_Check);
+ 
+          return;
+       end if;
+ 
+       Discr := First_Discriminant (Typ);
+       Discr_Elmt := First_Elmt (Discriminant_Constraint (Exp_Typ));
+ 
+       while Present (Discr) loop
+          if Is_Anonymous_Access_Type (Etype (Discr)) then
+             Discr_Exp := Node (Discr_Elmt);
+ 
+             --  The accessibility level of a function call whose result type is
+             --  an anonymous access type used to define the discriminant of an
+             --  object is the level of the object (RM 3.10.2(10.3, 14.1)).
+ 
+             if Nkind (Original_Node (Discr_Exp)) = N_Function_Call
+               and then
+                 Is_Anonymous_Access_Type (Etype (Original_Node (Discr_Exp)))
+             then
+                null;
+ 
+             else
+                Insert_Action (N,
+                  Make_Raise_Program_Error (Loc,
+                    Condition =>
+                      Make_Op_Gt (Loc,
+                        Left_Opnd  =>
+                          Accessibility_Level (Discr_Exp, Dynamic_Level),
+                        Right_Opnd => Accessibility_Level (N, Dynamic_Level)),
+                    Reason    => PE_Accessibility_Check_Failed),
+                  Suppress => Access_Check);
+             end if;
+          end if;
+ 
+          Next_Discriminant (Discr);
+          Next_Elmt (Discr_Elmt);
+       end loop;
+    end Apply_Accessibility_Check_For_Discriminated_Allocator;
+ 
     --------------------------------------------------------
     -- Apply_Accessibility_Check_For_Discriminated_Return --
     --------------------------------------------------------
*************** package body Accessibility is
*** 1403,1420 ****
     procedure Apply_Accessibility_Check_For_Discriminated_Return
       (Exp : Node_Id; Func : Entity_Id)
     is
-       Loc : constant Source_Ptr := Sloc (Exp);
- 
        function Constraint_Bearing_Subtype_If_Any
          (Exp : Node_Id) return Node_Id;
        --  If we can locate a constrained subtype whose constraint applies
        --  to Exp, then return that. Otherwise, return Etype (Exp).
  
-       function Discr_Expression
-         (Typ : Entity_Id; Discr_Index : Positive) return Node_Id;
-       --  Typ is a constrained discriminated subtype.
-       --  Return the constraint expression for the indexed discriminant.
- 
        ---------------------------------------
        -- Constraint_Bearing_Subtype_If_Any --
        ---------------------------------------
--- 1484,1494 ----
*************** package body Accessibility is
*** 1462,1492 ****
           return Etype (Exp);
        end Constraint_Bearing_Subtype_If_Any;
  
-       ----------------------
-       -- Discr_Expression --
-       ----------------------
- 
-       function Discr_Expression
-         (Typ : Entity_Id; Discr_Index : Positive) return Node_Id
-       is
-          Constraint_Elmt : Elmt_Id :=
-            First_Elmt (Discriminant_Constraint (Typ));
-       begin
-          for Skip in 1 .. Discr_Index - 1 loop
-             Next_Elmt (Constraint_Elmt);
-          end loop;
- 
-          return Node (Constraint_Elmt);
-       end Discr_Expression;
- 
        --  Local variables
  
!       Constrained_Subtype : constant Entity_Id :=
!                               Constraint_Bearing_Subtype_If_Any (Exp);
! 
!       Discr       : Entity_Id := First_Discriminant (Etype (Func));
!       Discr_Index : Positive  := 1;
!       Discr_Exp   : Node_Id;
  
     --  Start of Apply_Accessibility_Check_For_Discriminated_Return
  
--- 1536,1546 ----
           return Etype (Exp);
        end Constraint_Bearing_Subtype_If_Any;
  
        --  Local variables
  
!       Discr      : Entity_Id;
!       Discr_Elmt : Elmt_Id;
!       Exp_Typ    : Entity_Id;
  
     --  Start of Apply_Accessibility_Check_For_Discriminated_Return
  
*************** package body Accessibility is
*** 1500,1513 ****
  
        if Ada_Version <= Ada_95 then
           return;
-       end if;
  
!       --  If we are returning a function call then that function will
!       --  perform the needed check.
  
!       if Nkind (Unqualify (Exp)) = N_Function_Call then
           return;
-       end if;
  
       --  ??? Cope with the consequences of the Disable_Tagged_Cases flag
       --  in accessibility.adb (which can cause the extra formal parameter
--- 1554,1565 ----
  
        if Ada_Version <= Ada_95 then
           return;
  
!       --  If we are returning a function result, then that function will
!       --  perform the check.
  
!       elsif Nkind (Unqualify (Exp)) = N_Function_Call then
           return;
  
       --  ??? Cope with the consequences of the Disable_Tagged_Cases flag
       --  in accessibility.adb (which can cause the extra formal parameter
*************** package body Accessibility is
*** 1516,1548 ****
       --  prevent generation of a required check (or even a required
       --  legality check - see "statically too deep" check below).
  
!       if No (Extra_Accessibility_Of_Result (Func)) then
           return;
        end if;
  
!       Remove_Side_Effects (Exp);
  
!       while Present (Discr) loop
!          if Is_Anonymous_Access_Type (Etype (Discr)) then
!             if Is_Constrained (Constrained_Subtype) then
!                Discr_Exp :=
!                  New_Copy_Tree
!                    (Discr_Expression (Constrained_Subtype, Discr_Index));
!             else
!                Discr_Exp :=
!                  Make_Selected_Component (Loc,
!                    Prefix => New_Copy_Tree (Exp),
!                    Selector_Name => New_Occurrence_Of (Discr, Loc));
!             end if;
  
!             Analyze (Discr_Exp);
  
              Apply_Accessibility_Check_For_Anonymous_Return
!               (Discr_Exp, Func, Exp);
           end if;
  
           Next_Discriminant (Discr);
!          Discr_Index := Discr_Index + 1;
        end loop;
     end Apply_Accessibility_Check_For_Discriminated_Return;
  
--- 1568,1600 ----
       --  prevent generation of a required check (or even a required
       --  legality check - see "statically too deep" check below).
  
!       elsif No (Extra_Accessibility_Of_Result (Func)) then
           return;
        end if;
  
!       Exp_Typ := Constraint_Bearing_Subtype_If_Any (Exp);
  
!       --  When the value of the access discriminant is determined by
!       --  an object with an unconstrained nominal subtype, its level
!       --  is the accessibility level of the object (RM 3.10.2(12.4)).
  
!       if not Is_Constrained (Exp_Typ) then
!          Apply_Accessibility_Check_For_Anonymous_Return (Exp, Func, Exp);
! 
!          return;
!       end if;
  
+       Discr := First_Discriminant (Etype (Func));
+       Discr_Elmt := First_Elmt (Discriminant_Constraint (Exp_Typ));
+ 
+       while Present (Discr) loop
+          if Is_Anonymous_Access_Type (Etype (Discr)) then
              Apply_Accessibility_Check_For_Anonymous_Return
!               (Node (Discr_Elmt), Func, Exp);
           end if;
  
           Next_Discriminant (Discr);
!          Next_Elmt (Discr_Elmt);
        end loop;
     end Apply_Accessibility_Check_For_Discriminated_Return;
  
*************** package body Accessibility is
*** 1668,1674 ****
        Typ : constant Entity_Id := Etype (Func);
  
     begin
!       --  Return immediately if accessiblity checks are suppressed for Func
  
        if Accessibility_Checks_Suppressed (Func) then
           return;
--- 1720,1726 ----
        Typ : constant Entity_Id := Etype (Func);
  
     begin
!       --  Return immediately if accessibility checks are suppressed for Func
  
        if Accessibility_Checks_Suppressed (Func) then
           return;
*************** package body Accessibility is
*** 1689,1701 ****
           Apply_Accessibility_Check_For_Class_Wide_Return (Exp, Func);
  
        --  Check that the access result does not designate an entity that
!       --  the function result could outlive.
  
        elsif Ekind (Typ) = E_Anonymous_Access_Type then
           Apply_Accessibility_Check_For_Anonymous_Return (Exp, Func, Exp);
  
!       --  Check that result's access discriminants (if any) do not designate
!       --  entities that the function result could outlive.
  
        elsif Has_Anonymous_Access_Discriminant (Typ) then
           Apply_Accessibility_Check_For_Discriminated_Return (Exp, Func);
--- 1741,1753 ----
           Apply_Accessibility_Check_For_Class_Wide_Return (Exp, Func);
  
        --  Check that the access result does not designate an entity that
!       --  the result could outlive.
  
        elsif Ekind (Typ) = E_Anonymous_Access_Type then
           Apply_Accessibility_Check_For_Anonymous_Return (Exp, Func, Exp);
  
!       --  Check that the result's access discriminants do not designate
!       --  entities that the result could outlive (RM 6.5(21)).
  
        elsif Has_Anonymous_Access_Discriminant (Typ) then
           Apply_Accessibility_Check_For_Discriminated_Return (Exp, Func);
*************** package body Accessibility is
*** 1710,1723 ****
       (Return_Stmt : Node_Id;
        Stm_Entity  : Entity_Id)
     is
!       Scope_Id : constant Entity_Id  := Return_Applies_To (Stm_Entity);
  
!       R_Type : constant Entity_Id := Etype (Scope_Id);
!       --  Function result subtype
  
        function First_Selector (Assoc : Node_Id) return Node_Id;
        --  Obtain the first selector or choice from a given association
  
        --------------------
        -- First_Selector --
        --------------------
--- 1762,1810 ----
       (Return_Stmt : Node_Id;
        Stm_Entity  : Entity_Id)
     is
!       Scope_Id : constant Entity_Id := Return_Applies_To (Stm_Entity);
!       R_Type   : constant Entity_Id := Etype (Scope_Id);
  
!       procedure Accessibility_Error;
!       --  Give an error about the accessibility level of the return
  
        function First_Selector (Assoc : Node_Id) return Node_Id;
        --  Obtain the first selector or choice from a given association
  
+       -------------------------
+       -- Accessibility_Error --
+       -------------------------
+ 
+       procedure Accessibility_Error is
+          Suffix : constant String :=
+            (if Is_Expression_Function_Or_Completion (Scope_Id)
+             then "in expression function"
+             else "in return");
+          Message : constant String :=
+            "level of type of access discriminant is too deep " & Suffix;
+ 
+       begin
+          --  In an instance, this is a runtime check, but one we know will fail
+          --  so generate an appropriate warning. As usual, this kind of warning
+          --  is an error in SPARK mode or if No_Dynamic_Accessibility_Checks.
+ 
+          if In_Instance_Body then
+             Error_Msg_Warn := SPARK_Mode /= On
+                                 and then not
+                                   No_Dynamic_Accessibility_Checks_Enabled
+                                                                  (Return_Stmt);
+             Error_Msg_N (Message & "<<", Return_Stmt);
+             Error_Msg_F ("\Program_Error [<<", Return_Stmt);
+             Rewrite (Return_Stmt,
+               Make_Raise_Program_Error (Sloc (Return_Stmt),
+                 Reason => PE_Accessibility_Check_Failed));
+             Set_Etype (Return_Stmt, Standard_Void_Type);
+ 
+          else
+             Error_Msg_N (Message, Return_Stmt);
+          end if;
+       end Accessibility_Error;
+ 
        --------------------
        -- First_Selector --
        --------------------
*************** package body Accessibility is
*** 1737,1748 ****
  
        --  Local declarations
  
!       Assoc : Node_Id := Empty;
!       --  Assoc should perhaps be renamed and declared as a
!       --  Node_Or_Entity_Id since it encompasses not only component and
!       --  discriminant associations, but also discriminant components within
!       --  a type declaration or subtype indication ???
! 
        Assoc_Expr    : Node_Id;
        Assoc_Present : Boolean := False;
  
--- 1824,1830 ----
  
        --  Local declarations
  
!       Assoc         : Node_Or_Entity_Id;
        Assoc_Expr    : Node_Id;
        Assoc_Present : Boolean := False;
  
*************** package body Accessibility is
*** 1758,1794 ****
     --  Start of processing for Check_Return_Construct_Accessibility
  
     begin
        --  Only perform checks on record types with access discriminants and
!       --  non-internally generated functions.
  
        if not Is_Record_Type (R_Type)
          or else not Has_Anonymous_Access_Discriminant (R_Type)
!         or else not Comes_From_Source (Return_Stmt)
!       then
!          return;
!       end if;
! 
!       --  We are only interested in return statements
! 
!       if Nkind (Return_Stmt) not in
!            N_Extended_Return_Statement | N_Simple_Return_Statement
        then
           return;
        end if;
  
!       --  Fetch the object from the return statement, in the case of a
        --  simple return statement the expression is part of the node.
  
!       if Nkind (Return_Stmt) = N_Extended_Return_Statement then
           --  Obtain the object definition from the expanded extended return
  
!          Return_Con := First (Return_Object_Declarations (Return_Stmt));
           while Present (Return_Con) loop
              --  Inspect the original node to avoid object declarations
              --  expanded into renamings.
  
              if Nkind (Original_Node (Return_Con)) = N_Object_Declaration
!               and then Comes_From_Source (Original_Node (Return_Con))
              then
                 exit;
              end if;
--- 1840,1876 ----
     --  Start of processing for Check_Return_Construct_Accessibility
  
     begin
+       pragma Assert (Nkind (Return_Stmt) in N_Extended_Return_Statement
+                                           | N_Simple_Return_Statement);
+ 
        --  Only perform checks on record types with access discriminants and
!       --  functions present in the source.
  
        if not Is_Record_Type (R_Type)
          or else not Has_Anonymous_Access_Discriminant (R_Type)
!         or else not Comes_From_Source (Scope_Id)
        then
           return;
        end if;
  
!       --  Fetch the object from the original return statement, in the case of a
        --  simple return statement the expression is part of the node.
  
!       if Nkind (Original_Node (Return_Stmt)) = N_Extended_Return_Statement then
           --  Obtain the object definition from the expanded extended return
  
!          Return_Con :=
!            First (Return_Object_Declarations (Original_Node (Return_Stmt)));
           while Present (Return_Con) loop
              --  Inspect the original node to avoid object declarations
              --  expanded into renamings.
  
              if Nkind (Original_Node (Return_Con)) = N_Object_Declaration
!               and then
!                 (Comes_From_Source (Original_Node (Return_Con))
!                   or else
!                     Is_Return_Object
!                       (Defining_Identifier (Original_Node (Return_Con))))
              then
                 exit;
              end if;
*************** package body Accessibility is
*** 1798,1813 ****
  
           pragma Assert (Present (Return_Con));
  
-          --  Could be dealing with a renaming
- 
           Return_Con := Original_Node (Return_Con);
        else
!          Return_Con := Expression (Return_Stmt);
        end if;
  
        --  Obtain the accessibility levels of the expressions associated
!       --  with all anonymous access discriminants, then generate a
!       --  dynamic check or static error when relevant.
  
        --  Note the repeated use of Original_Node to avoid checking
        --  expanded code.
--- 1880,1893 ----
  
           pragma Assert (Present (Return_Con));
  
           Return_Con := Original_Node (Return_Con);
+ 
        else
!          Return_Con := Expression (Original_Node (Return_Stmt));
        end if;
  
        --  Obtain the accessibility levels of the expressions associated
!       --  with anonymous access discriminants and apply a static check.
  
        --  Note the repeated use of Original_Node to avoid checking
        --  expanded code.
*************** package body Accessibility is
*** 1817,1826 ****
        --  Get the corresponding declaration based on the return object's
        --  identifier.
  
!       if Nkind (Unqual) = N_Identifier
!         and then Nkind (Parent (Entity (Unqual)))
!                    in N_Object_Declaration
!                     | N_Object_Renaming_Declaration
        then
           Obj_Decl := Original_Node (Parent (Entity (Unqual)));
  
--- 1897,1906 ----
        --  Get the corresponding declaration based on the return object's
        --  identifier.
  
!       if Is_Entity_Name (Unqual)
!         and then
!           Nkind (Parent (Entity (Unqual))) in N_Object_Declaration
!                                             | N_Object_Renaming_Declaration
        then
           Obj_Decl := Original_Node (Parent (Entity (Unqual)));
  
*************** package body Accessibility is
*** 1835,1851 ****
  
        else
           Obj_Decl := Empty;
- 
        end if;
  
        --  Hop up object renamings when present
  
!       if Present (Obj_Decl)
!         and then Nkind (Obj_Decl) = N_Object_Renaming_Declaration
!       then
           while Nkind (Obj_Decl) = N_Object_Renaming_Declaration loop
! 
!             if Nkind (Name (Obj_Decl)) not in N_Entity then
                 --  We may be looking at the expansion of iterators or
                 --  some other internally generated construct, so it is safe
                 --  to ignore checks ???
--- 1915,1927 ----
  
        else
           Obj_Decl := Empty;
        end if;
  
        --  Hop up object renamings when present
  
!       if Present (Obj_Decl) then
           while Nkind (Obj_Decl) = N_Object_Renaming_Declaration loop
!             if not Is_Entity_Name (Name (Obj_Decl)) then
                 --  We may be looking at the expansion of iterators or
                 --  some other internally generated construct, so it is safe
                 --  to ignore checks ???
*************** package body Accessibility is
*** 1862,1868 ****
  
              else
                 Obj_Decl := Original_Node
!                              (Declaration_Node (Name (Obj_Decl)));
              end if;
           end loop;
        end if;
--- 1938,1944 ----
  
              else
                 Obj_Decl := Original_Node
!                              (Declaration_Node (Entity (Name (Obj_Decl))));
              end if;
           end loop;
        end if;
*************** package body Accessibility is
*** 1878,1883 ****
--- 1954,1971 ----
              Assoc := First (Component_Associations (Unqual));
           end if;
  
+       --  Apply the RM 3.10.2(12.4) rule to formal parameters
+ 
+       elsif Is_Entity_Name (Unqual) and then Is_Formal (Entity (Unqual)) then
+          if Static_Accessibility_Level
+               (Unqual, Zero_On_Dynamic_Level, In_Return_Context => True)
+                 > Subprogram_Access_Level (Scope_Id)
+          then
+             Accessibility_Error;
+          end if;
+ 
+          return;
+ 
        --  There is an object declaration for the return object
  
        elsif Present (Obj_Decl) then
*************** package body Accessibility is
*** 2124,2132 ****
                 (Assoc_Expr, Zero_On_Dynamic_Level, In_Return_Context => True)
                   > Subprogram_Access_Level (Scope_Id)
           then
!             Error_Msg_N
!               ("level of type of access discriminant value of return object"
!                & " is statically too deep", Return_Stmt);
           end if;
  
           --  Iterate over the discriminants, except when we have encountered
--- 2212,2218 ----
                 (Assoc_Expr, Zero_On_Dynamic_Level, In_Return_Context => True)
                   > Subprogram_Access_Level (Scope_Id)
           then
!             Accessibility_Error;
           end if;
  
           --  Iterate over the discriminants, except when we have encountered
diff -Nrcpad gcc-17-20260614/gcc/ada/accessibility.ads gcc-17-20260621/gcc/ada/accessibility.ads
*** gcc-17-20260614/gcc/ada/accessibility.ads	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/accessibility.ads	Sun Jun 21 22:32:05 2026
*************** package Accessibility is
*** 71,77 ****
     --  The Allow_Alt_Model parameter allows the alternative level calculation
     --  under the restriction No_Dynamic_Accessibility_Checks to be performed.
  
!    procedure Apply_Accessibility_Check_For_Allocator
       (N              : Node_Id;
        Exp            : Node_Id;
        Ref            : Node_Id;
--- 71,77 ----
     --  The Allow_Alt_Model parameter allows the alternative level calculation
     --  under the restriction No_Dynamic_Accessibility_Checks to be performed.
  
!    procedure Apply_Accessibility_Check_For_Class_Wide_Allocator
       (N              : Node_Id;
        Exp            : Node_Id;
        Ref            : Node_Id;
*************** package Accessibility is
*** 111,116 ****
--- 111,123 ----
     --  type of the object is not deeper than the level of Typ. Insert_Node
     --  indicates the node where the check should be inserted.
  
+    procedure Apply_Accessibility_Check_For_Discriminated_Allocator
+      (N : Node_Id);
+    --  If the subtype determined by the subtype indication or the qualified
+    --  expression of an allocator N has access discriminants, insert checks
+    --  that the accessibility level of each entity designated by an access
+    --  discriminant is not deeper than the level of the allocator.
+ 
     procedure Apply_Accessibility_Check_For_Return
       (Exp  : Node_Id;
        Func : Entity_Id);
*************** package Accessibility is
*** 120,127 ****
     procedure Check_Return_Construct_Accessibility
       (Return_Stmt : Node_Id;
        Stm_Entity  : Entity_Id);
!    --  Apply legality rule of 6.5 (5.9) to the access discriminants of an
!    --  aggregate in a return statement.
  
     function Deepest_Type_Access_Level
       (Typ             : Entity_Id;
--- 127,134 ----
     procedure Check_Return_Construct_Accessibility
       (Return_Stmt : Node_Id;
        Stm_Entity  : Entity_Id);
!    --  Apply legality rules of 6.5(5.9) and 6.8(5) to the access discriminants
!    --  of an identifier or aggregate in a return statement.
  
     function Deepest_Type_Access_Level
       (Typ             : Entity_Id;
diff -Nrcpad gcc-17-20260614/gcc/ada/aspects.ads gcc-17-20260621/gcc/ada/aspects.ads
*** gcc-17-20260614/gcc/ada/aspects.ads	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/aspects.ads	Sun Jun 21 22:32:05 2026
*************** package Aspects is
*** 120,125 ****
--- 120,126 ----
        Aspect_Machine_Radix,
        Aspect_Max_Entry_Queue_Length,
        Aspect_Max_Queue_Length,              -- GNAT
+       Aspect_Modifies,                      -- GNAT
        Aspect_Object_Size,
        Aspect_Obsolescent,                   -- GNAT
        Aspect_Output,
*************** package Aspects is
*** 328,333 ****
--- 329,335 ----
        Aspect_Local_Restrictions          => True,
        Aspect_Lock_Free                   => True,
        Aspect_Max_Queue_Length            => True,
+       Aspect_Modifies                    => True,
        Aspect_No_Caching                  => True,
        Aspect_No_Elaboration_Code_All     => True,
        Aspect_No_Inline                   => True,
*************** package Aspects is
*** 486,491 ****
--- 488,494 ----
        Aspect_Machine_Radix              => Expression,
        Aspect_Max_Entry_Queue_Length     => Expression,
        Aspect_Max_Queue_Length           => Expression,
+       Aspect_Modifies                   => Expression,
        Aspect_Object_Size                => Expression,
        Aspect_Obsolescent                => Optional_Expression,
        Aspect_Output                     => Name,
*************** package Aspects is
*** 593,598 ****
--- 596,602 ----
        Aspect_Machine_Radix                => True,
        Aspect_Max_Entry_Queue_Length       => False,
        Aspect_Max_Queue_Length             => False,
+       Aspect_Modifies                     => False,
        Aspect_Object_Size                  => True,
        Aspect_Obsolescent                  => False,
        Aspect_Output                       => False,
*************** package Aspects is
*** 787,792 ****
--- 791,797 ----
        Aspect_Machine_Radix                => Name_Machine_Radix,
        Aspect_Max_Entry_Queue_Length       => Name_Max_Entry_Queue_Length,
        Aspect_Max_Queue_Length             => Name_Max_Queue_Length,
+       Aspect_Modifies                     => Name_Modifies,
        Aspect_No_Caching                   => Name_No_Caching,
        Aspect_No_Controlled_Parts          => Name_No_Controlled_Parts,
        Aspect_No_Task_Parts                => Name_No_Task_Parts,
*************** package Aspects is
*** 1106,1111 ****
--- 1111,1117 ----
        Aspect_Invariant                    => Never_Delay,
        Aspect_Max_Entry_Queue_Length       => Never_Delay,
        Aspect_Max_Queue_Length             => Never_Delay,
+       Aspect_Modifies                     => Never_Delay,
        Aspect_No_Caching                   => Never_Delay,
        Aspect_No_Controlled_Parts          => Never_Delay,
        Aspect_No_Task_Parts                => Never_Delay,
diff -Nrcpad gcc-17-20260614/gcc/ada/contracts.adb gcc-17-20260621/gcc/ada/contracts.adb
*** gcc-17-20260614/gcc/ada/contracts.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/contracts.adb	Sun Jun 21 22:32:05 2026
*************** package body Contracts is
*** 230,235 ****
--- 230,236 ----
        --    Exceptional_Cases
        --    Extensions_Visible
        --    Global
+       --    Modifies
        --    Interrupt_Handler
        --    Postcondition
        --    Precondition
*************** package body Contracts is
*** 266,271 ****
--- 267,273 ----
                           | Name_Contract_Cases
                           | Name_Exceptional_Cases
                           | Name_Exit_Cases
+                          | Name_Modifies
                           | Name_Program_Exit
                           | Name_Subprogram_Variant
                           | Name_Test_Case
*************** package body Contracts is
*** 649,657 ****
        end if;
  
        --  Deal with preconditions, [refined] postconditions, Always_Terminates,
!       --  Contract_Cases, Exceptional_Cases, Program_Exit, Subprogram_Variant,
!       --  invariants and predicates associated with body and its spec. Do not
!       --  expand the contract of subprogram body stubs.
  
        if Nkind (Body_Decl) = N_Subprogram_Body then
           Expand_Subprogram_Contract (Body_Id);
--- 651,659 ----
        end if;
  
        --  Deal with preconditions, [refined] postconditions, Always_Terminates,
!       --  Contract_Cases, Exceptional_Cases, Modifies, Program_Exit,
!       --  Subprogram_Variant, invariants and predicates associated with body
!       --  and its spec. Do not expand the contract of subprogram body stubs.
  
        if Nkind (Body_Decl) = N_Subprogram_Body then
           Expand_Subprogram_Contract (Body_Id);
*************** package body Contracts is
*** 799,804 ****
--- 801,809 ----
              elsif Prag_Nam = Name_Exceptional_Cases then
                 Analyze_Exceptional_Cases_In_Decl_Part (Prag);
  
+             elsif Prag_Nam = Name_Modifies then
+                Analyze_Modifies_In_Decl_Part (Prag);
+ 
              elsif Prag_Nam = Name_Program_Exit then
                 Analyze_Program_Exit_In_Decl_Part (Prag);
  
*************** package body Contracts is
*** 1424,1429 ****
--- 1429,1435 ----
        --    Depends
        --    Exceptional_Cases
        --    Global
+       --    Modifies
        --    Postcondition
        --    Precondition
        --    Program_Exit
diff -Nrcpad gcc-17-20260614/gcc/ada/contracts.ads gcc-17-20260621/gcc/ada/contracts.ads
*** gcc-17-20260614/gcc/ada/contracts.ads	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/contracts.ads	Sun Jun 21 22:32:05 2026
*************** package Contracts is
*** 52,57 ****
--- 52,58 ----
     --    Initial_Condition
     --    Initializes
     --    Interrupt_Handler
+    --    Modifies
     --    No_Caching
     --    Part_Of
     --    Postcondition
*************** package Contracts is
*** 89,94 ****
--- 90,96 ----
     --    Depends            (stand alone subprogram body)
     --    Exceptional_Cases  (stand alone subprogram body)
     --    Global             (stand alone subprogram body)
+    --    Modifies           (stand alone subprogram body)
     --    Postcondition      (stand alone subprogram body)
     --    Precondition       (stand alone subprogram body)
     --    Program_Exit       (stand alone subprogram body)
*************** package Contracts is
*** 110,115 ****
--- 112,118 ----
     --    Depends
     --    Exceptional_Cases
     --    Global
+    --    Modifies
     --    Postcondition
     --    Precondition
     --    Program_Exit
*************** package Contracts is
*** 187,192 ****
--- 190,196 ----
     --    Depends
     --    Exceptional_Cases
     --    Global
+    --    Modifies
     --    Postcondition
     --    Precondition
     --    Program_Exit
diff -Nrcpad gcc-17-20260614/gcc/ada/doc/gnat_rm/implementation_defined_aspects.rst gcc-17-20260621/gcc/ada/doc/gnat_rm/implementation_defined_aspects.rst
*** gcc-17-20260614/gcc/ada/doc/gnat_rm/implementation_defined_aspects.rst	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/doc/gnat_rm/implementation_defined_aspects.rst	Sun Jun 21 22:32:05 2026
*************** Aspect Max_Queue_Length
*** 563,568 ****
--- 563,575 ----
  
  This aspect is equivalent to :ref:`pragma Max_Queue_Length<Pragma-Max_Queue_Length>`.
  
+ Aspect Modifies
+ ===============
+ .. index:: Modifies
+ 
+ For the syntax and semantics of this aspect, see the SPARK 2014 Reference
+ Manual, section TBD.
+ 
  Aspect No_Caching
  =================
  .. index:: No_Caching
diff -Nrcpad gcc-17-20260614/gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst gcc-17-20260621/gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst
*** gcc-17-20260614/gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst	Sun Jun 21 22:32:05 2026
*************** entry.
*** 3887,3892 ****
--- 3887,3926 ----
  
  A value of -1 represents no additional restriction on queue length.
  
+ Pragma Modifies
+ ===============
+ .. index:: Modifies
+ 
+ Syntax:
+ 
+ 
+ ::
+ 
+   pragma Modifies (MODIFIES_SPECIFICATION);
+ 
+   MODIFIES_SPECIFICATION ::=
+       MODIFIES_CLAUSE
+     | (MODIFIES_CLAUSE {, MODIFIES_CLAUSE});
+ 
+   MODIFIES_CLAUSE ::= MODIFIED_OBJECTS { when GUARD }
+ 
+   GUARD ::= boolean_EXPRESSION
+ 
+   MODIFIED_OBJECTS ::= MODIFIED_OBJECT | (MODIFIED_OBJECT {, MODIFIED_OBJECT})
+ 
+   MODIFIED_OBJECT ::=
+       name
+     | MODIFIED_OBJECT . all
+     | MODIFIED_OBJECT . component_selector_name
+     | MODIFIED_OBJECT (expression {, expression})
+ 
+ The ``Modifies`` pragma is intended to be an exact replacement for the
+ implementation-defined ``Modifies`` aspect, and shares its restrictions
+ and semantics.
+ 
+ This is an assertion kind pragma that can associate a set of its arguments
+ with an assertion level. See SPARK 2014 Reference Manual, section TBD.
+ 
  Pragma No_Body
  ==============
  
*************** the implementation-defined ``Subprogram_
*** 6638,6645 ****
  restrictions and semantics.
  
  This is an assertion kind pragma that can associate a set of its arguments
! with an assertion level. See SPARK 2014 Reference Manual, section
! 11.4.2.
  
  Pragma Subtitle
  ===============
--- 6672,6678 ----
  restrictions and semantics.
  
  This is an assertion kind pragma that can associate a set of its arguments
! with an assertion level. See SPARK 2014 Reference Manual, section 11.4.2.
  
  Pragma Subtitle
  ===============
diff -Nrcpad gcc-17-20260614/gcc/ada/einfo-utils.adb gcc-17-20260621/gcc/ada/einfo-utils.adb
*** gcc-17-20260614/gcc/ada/einfo-utils.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/einfo-utils.adb	Sun Jun 21 22:32:05 2026
*************** package body Einfo.Utils is
*** 1055,1060 ****
--- 1055,1061 ----
                    Id = Pragma_Contract_Cases            or else
                    Id = Pragma_Exceptional_Cases         or else
                    Id = Pragma_Exit_Cases                or else
+                   Id = Pragma_Modifies                  or else
                    Id = Pragma_Program_Exit              or else
                    Id = Pragma_Subprogram_Variant        or else
                    Id = Pragma_Test_Case;
*************** package body Einfo.Utils is
*** 3201,3206 ****
--- 3202,3223 ----
        end if;
     end Set_Is_Volatile;
  
+    ----------------
+    --  Set_Scope --
+    ----------------
+ 
+    procedure Set_Scope (N : N_Entity_Id; Val : Node_Id) is
+    begin
+       Set_Scope_Raw (N, Val);
+ 
+      --  Child units may appear on the entity list (e.g. if they appear
+      --  in the context of a subunit) but they are not body entities.
+ 
+       if Present (Val) and then not Is_Child_Unit (N) then
+          Set_Declared_In_Package_Body (N, In_Package_Body (Val));
+       end if;
+    end Set_Scope;
+ 
     -----------------------
     -- Write_Entity_Info --
     -----------------------
diff -Nrcpad gcc-17-20260614/gcc/ada/einfo-utils.ads gcc-17-20260621/gcc/ada/einfo-utils.ads
*** gcc-17-20260614/gcc/ada/einfo-utils.ads	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/einfo-utils.ads	Sun Jun 21 22:32:05 2026
*************** package Einfo.Utils is
*** 464,469 ****
--- 464,470 ----
     --    Initial_Condition
     --    Initializes
     --    Interrupt_Handler
+    --    Modifies
     --    No_Caching
     --    Part_Of
     --    Precondition
*************** package Einfo.Utils is
*** 563,568 ****
--- 564,575 ----
     --  Also, if the Etype of E is set and is an anonymous access type with
     --  no convention set, this anonymous type inherits the convention of E.
  
+    function Scope
+      (N : N_Entity_Id) return Node_Id  renames Scope_Raw;
+    procedure Set_Scope (N : N_Entity_Id; Val : Node_Id);
+    --  Same as Set_Scope_Raw, but set Declared_In_Package_Body if Val is a
+    --  package currently being analyzed
+ 
     ----------------------------------
     -- Debugging Output Subprograms --
     ----------------------------------
diff -Nrcpad gcc-17-20260614/gcc/ada/einfo.ads gcc-17-20260621/gcc/ada/einfo.ads
*** gcc-17-20260614/gcc/ada/einfo.ads	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/einfo.ads	Sun Jun 21 22:32:05 2026
*************** package Einfo is
*** 833,838 ****
--- 833,846 ----
  --       to the renamed entity. See Exp_Dbug.Debug_Renaming_Declaration for
  --       details of the use of this field.
  
+ --    Declared_In_Package_Body
+ --       Defined in all entities. Set if the declaration of the entity is
+ --       immediately enclosed by a package body. This is (perhaps
+ --       unfortunately) not the same thing as "Ekind (Scope (E)) =
+ --       E_Package_Body": an entity declared in a package body has its Scope
+ --       field pointing to the corresponding package spec (of Ekind
+ --       E_Package).
+ 
  --    Declaration_Node (synthesized)
  --       Applies to all entities. Returns the tree node for the construct that
  --       declared the entity. Normally this is just the Parent of the entity.
*************** package Einfo is
*** 2300,2311 ****
  --       to multiple subprogram entities).
  
  --    In_Package_Body
! --       Defined in all entities. Can be set only in package entities, objects
! --       and overloadable entities. For package entities, this flag is set to
! --       indicate that the body of the package is being analyzed. The flag is
! --       reset at the end of the package body. For objects and overloadable
! --       entities, indicates that the declaration of the entity occurs in the
! --       body of a package.
  
  --    In_Private_Part
  --       Defined in all entities. Can be set only in package entities, objects
--- 2308,2321 ----
  --       to multiple subprogram entities).
  
  --    In_Package_Body
! --       Defined in all entities. Can only be set in package entities. This
! --       flag is set to indicate that the body of the package is being
! --       analyzed. The flag is reset at the end of the package body. The reason
! --       why In_Package_Body is defined in all entities and not just packages
! --       is so In_Package_Body (E) is a convenient abbreviation of
! --          Ekind (E) in E_Package | E_Generic_Package and then
! --            In_Package_Body (E)
! --       .
  
  --    In_Private_Part
  --       Defined in all entities. Can be set only in package entities, objects
*************** package Einfo is
*** 3150,3159 ****
  --       Applies to all entities, true for ordinary fixed point types and
  --       subtypes.
  
- --    Is_Package_Body_Entity
- --       Defined in all entities. Set for entities defined at the top level
- --       of a package body. Used to control externally generated names.
- 
  --    Is_Package_Or_Generic_Package (synthesized)
  --       Applies to all entities. True for packages and generic packages.
  --       False for all other entities.
--- 3160,3165 ----
*************** package Einfo is
*** 5047,5053 ****
     --    Is_Link_Once
     --    Is_Loop_Parameter
     --    Is_Obsolescent
-    --    Is_Package_Body_Entity
     --    Is_Packed_Array_Impl_Type
     --    Is_Not_Self_Hidden
     --    Is_Potentially_Use_Visible
--- 5053,5058 ----
diff -Nrcpad gcc-17-20260614/gcc/ada/exp_attr.adb gcc-17-20260621/gcc/ada/exp_attr.adb
*** gcc-17-20260614/gcc/ada/exp_attr.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/exp_attr.adb	Sun Jun 21 22:32:05 2026
*************** package body Exp_Attr is
*** 2082,2099 ****
           Subp     : out Entity_Id;
           Attr_Ref : Node_Id)
        is
!          Ancestor        : Node_Id := Attr_Ref;
!          Insertion_Scope : Entity_Id := Empty;
!          Insertion_Point : Node_Id := Empty;
!          Insert_Before   : Boolean := False;
!          First_Typ       : constant Entity_Id := First_Subtype (Typ);
!          Typ_Comp_Unit   : Node_Id := Enclosing_Comp_Unit_Node (First_Typ);
  
           procedure Build;
           --  Call Build_Type_Attr_Subprogram with appropriate parameters.
  
!          procedure Skip_Non_Source_Subps;
!          --  Refine Insertion_Point choice (see comment inside procedure).
  
           procedure Build is
           begin
--- 2082,2124 ----
           Subp     : out Entity_Id;
           Attr_Ref : Node_Id)
        is
!          type Spot_Kind is (None, Before, After, In_Empty_List);
! 
!          type Spot (K : Spot_Kind := None) is record
!             case K is
!                when None =>
!                   null;
! 
!                when Before | After =>
!                   N : Node_Id;
! 
!                when In_Empty_List =>
!                   L     : List_Id;
!                   Scope : Scope_Kind_Id;
!             end case;
!          end record;
!          --  An object of type Spot represents a place where we can insert the
!          --  generated subprogram body. If K is Before, the place is right
!          --  before N. Similarly, if K is After, the place is right after N.
!          --  If K is In_Empty_List, L is an empty list and the place is inside
!          --  it; we additionally record the target scope in Scope because it
!          --  makes things more convenient.
  
           procedure Build;
           --  Call Build_Type_Attr_Subprogram with appropriate parameters.
  
!          function Find_Insertion_Point_For_Ancestor
!            (Ancestor : Node_Id; Previous_Insertion_Point : Spot) return Spot;
!          --  Return the most appropriate insertion point that's at the same
!          --  depth as Ancestor, if one exists. Otherwise return a null spot.
!          --  Ancestor is an ancestor node of the node we want to call the
!          --  subprogram from. Previous_Insertion_Point is the latest insertion
!          --  point we found walking up the tree.
! 
!          function Skip_Non_Source_Subps
!            (List : List_Id; Ancestor : Node_Id) return Spot;
!          --  Return the most appropriate place to insert the subprogram in List
!          --  (see comment inside body).
  
           procedure Build is
           begin
*************** package body Exp_Attr is
*** 2103,2109 ****
                 Subp => Subp);
           end Build;
  
!          procedure Skip_Non_Source_Subps is
              --  A hazard to avoid is use-before-definition
              --  errors that can result when we have two of these
              --  subprograms where one calls the other (e.g., given
--- 2128,2183 ----
                 Subp => Subp);
           end Build;
  
!          function Find_Insertion_Point_For_Ancestor
!            (Ancestor : Node_Id; Previous_Insertion_Point : Spot) return Spot
!          is
!             Ret : Spot := (K => None);
!          begin
!             if Is_List_Member (Ancestor) then
!                Ret :=
!                  Skip_Non_Source_Subps (List_Containing (Ancestor), Ancestor);
! 
!                pragma Assert (Ret.K in Before | After);
! 
!             --  A subprogram body usually occurs in a declaration list
!             --  (so we will take the preceding Is_List_Member = True path),
!             --  but not always. For a library unit subprogram, we want an
!             --  insertion point in the subprogram's declaration list
!             --  because later on we may need to see the inserted
!             --  declaration from within the declaration list. In the
!             --  preceding non-library-unit case, this visibility issue is
!             --  dealt with by choosing an insertion point outside of the
!             --  subprogram body, but that's not an option here. So if
!             --  Previous_Insertion_Point is a member of, for example, the
!             --  subprogram's statement list then it needs to be corrected.
! 
!             elsif Nkind (Ancestor) = N_Subprogram_Body
!               and then Present (Declarations (Ancestor))
!               and then
!                 (case Previous_Insertion_Point.K is
!                    when None           => True,
!                    when Before | After =>
!                      List_Containing (Previous_Insertion_Point.N)
!                      /= Declarations (Ancestor),
!                    when others         => False)
!               and then Nkind (Parent (Ancestor)) /= N_Subunit
!             then
!                Ret :=
!                  Skip_Non_Source_Subps (Declarations (Ancestor), Ancestor);
! 
!                if Ret.K = In_Empty_List then
!                   Ret.Scope := Unique_Defining_Entity (Ancestor);
!                end if;
! 
!                pragma Assert (Ret.K /= None);
!             end if;
! 
!             return Ret;
!          end Find_Insertion_Point_For_Ancestor;
! 
!          function Skip_Non_Source_Subps
!            (List : List_Id; Ancestor : Node_Id) return Spot
!          is
              --  A hazard to avoid is use-before-definition
              --  errors that can result when we have two of these
              --  subprograms where one calls the other (e.g., given
*************** package body Exp_Attr is
*** 2133,2149 ****
              --  decls list. No examples where this would result in more
              --  sharing and less duplication have been observed, so this
              --  is just speculation.
           begin
!             while Insertion_Point /= Ancestor
!               and then Nkind (Insertion_Point) = N_Subprogram_Body
!               and then not Comes_From_Source (Insertion_Point)
!               and then Present (Next (Insertion_Point))
              loop
!                Next (Insertion_Point);
              end loop;
!             pragma Assert (Present (Insertion_Point));
           end Skip_Non_Source_Subps;
  
        --  Start of processing for Build_And_Insert_Type_Attr_Subp
  
        begin
--- 2207,2244 ----
              --  decls list. No examples where this would result in more
              --  sharing and less duplication have been observed, so this
              --  is just speculation.
+ 
+             Cursor : Node_Id := First (List);
+ 
+             Ret : Spot;
           begin
!             if No (Cursor) then
!                --  We leave Scope to be initialized by the caller
!                return (K => In_Empty_List, L => List, Scope => <>);
!             end if;
! 
!             Ret := (K => Before, N => Cursor);
! 
!             while Cursor /= Ancestor
!               and then Nkind (Cursor) = N_Subprogram_Body
!               and then not Comes_From_Source (Cursor)
              loop
!                Ret := (K => After, N => Cursor);
!                Next (Cursor);
!                exit when No (Cursor);
              end loop;
! 
!             return Ret;
           end Skip_Non_Source_Subps;
  
+          --  Local variables
+ 
+          Ancestor        : Node_Id := Attr_Ref;
+          Insertion_Scope : Entity_Id;
+          Insertion_Point : Spot := (K => None);
+          First_Typ       : constant Entity_Id := First_Subtype (Typ);
+          Typ_Comp_Unit   : Node_Id := Enclosing_Comp_Unit_Node (First_Typ);
+ 
        --  Start of processing for Build_And_Insert_Type_Attr_Subp
  
        begin
*************** package body Exp_Attr is
*** 2167,2173 ****
              --  we want to hoist to the same scope as First_Typ.
  
              Insertion_Scope := Scope (First_Typ);
!             Insertion_Point := Freeze_Node (First_Typ);
           else
              --  Typ is declared in a different unit, so
              --  hoist to library level.
--- 2262,2268 ----
              --  we want to hoist to the same scope as First_Typ.
  
              Insertion_Scope := Scope (First_Typ);
!             Insertion_Point := (K => After, N => Freeze_Node (First_Typ));
           else
              --  Typ is declared in a different unit, so
              --  hoist to library level.
*************** package body Exp_Attr is
*** 2175,2207 ****
              pragma Assert (Is_Library_Level_Entity (First_Typ));
  
              while Present (Ancestor) loop
!                if Is_List_Member (Ancestor) then
!                   Insertion_Point := First (List_Containing (Ancestor));
!                   Skip_Non_Source_Subps;
! 
!                --  A subprogram body usually occurs in a declaration list
!                --  (so we will take the preceding Is_List_Member = True path),
!                --  but not always. For a library unit subprogram, we want an
!                --  insertion point in the subprogram's declaration list
!                --  because later on we may need to see the inserted
!                --  declaration from within the declaration list. In the
!                --  preceding non-library-unit case, this visibility issue is
!                --  dealt with by choosing an insertion point outside of the
!                --  subprogram body, but that's not an option here. So if
!                --  Insertion_Point is currently a member of, for example, the
!                --  subprogram's statement list then it needs to be corrected.
! 
!                elsif Nkind (Ancestor) = N_Subprogram_Body
!                  and then Present (Declarations (Ancestor))
!                  and then
!                    (No (Insertion_Point)
!                      or else List_Containing (Insertion_Point) /=
!                        Declarations (Ancestor))
!                  and then Nkind (Parent (Ancestor)) /= N_Subunit
!                then
!                   Insertion_Point := First (Declarations (Ancestor));
!                   Skip_Non_Source_Subps;
!                end if;
  
                 if Nkind (Ancestor) = N_Subunit then
                    Ancestor := Corresponding_Stub (Ancestor);
--- 2270,2284 ----
              pragma Assert (Is_Library_Level_Entity (First_Typ));
  
              while Present (Ancestor) loop
!                declare
!                   Res : constant Spot :=
!                     Find_Insertion_Point_For_Ancestor
!                       (Ancestor, Insertion_Point);
!                begin
!                   if Res.K /= None then
!                      Insertion_Point := Res;
!                   end if;
!                end;
  
                 if Nkind (Ancestor) = N_Subunit then
                    Ancestor := Corresponding_Stub (Ancestor);
*************** package body Exp_Attr is
*** 2210,2234 ****
                 end if;
              end loop;
  
!             if Present (Insertion_Point) then
!                Insert_Before := True;
!                Insertion_Scope :=
!                  Find_Enclosing_Scope (Insertion_Point);
!             end if;
           end if;
  
!          if Present (Insertion_Point)
!            and Present (Insertion_Scope)
!          then
              Push_Scope (Insertion_Scope);
              Build;
!             if Insert_Before then
!                Insert_Action
!                  (Insertion_Point, Ins_Action => Decl);
!             else
!                Insert_Action_After
!                  (Insertion_Point, Ins_Action => Decl);
!             end if;
              Pop_Scope;
           else
              --  Hoisting was unsuccessful, so no need to
--- 2287,2317 ----
                 end if;
              end loop;
  
!             Insertion_Scope :=
!               (case Insertion_Point.K is
!                  when None           => Empty,
!                  when Before | After =>
!                    Find_Enclosing_Scope (Insertion_Point.N),
!                  when In_Empty_List  => Insertion_Point.Scope);
           end if;
  
!          if Insertion_Point.K /= None and Present (Insertion_Scope) then
              Push_Scope (Insertion_Scope);
              Build;
!             case Insertion_Point.K is
!                when Before        =>
!                   Insert_Action (Insertion_Point.N, Ins_Action => Decl);
! 
!                when After         =>
!                   Insert_Action_After (Insertion_Point.N, Ins_Action => Decl);
! 
!                when In_Empty_List =>
!                   Append (Decl, To => Insertion_Point.L);
!                   Analyze (Decl);
! 
!                when None          =>
!                   pragma Assert (False);
!             end case;
              Pop_Scope;
           else
              --  Hoisting was unsuccessful, so no need to
diff -Nrcpad gcc-17-20260614/gcc/ada/exp_ch3.adb gcc-17-20260621/gcc/ada/exp_ch3.adb
*** gcc-17-20260614/gcc/ada/exp_ch3.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/exp_ch3.adb	Sun Jun 21 22:32:05 2026
*************** package body Exp_Ch3 is
*** 1974,1989 ****
        Set_Parameter_Specifications (Spec_Node, Parameters);
        Freeze_Extra_Formals (Copy_Id);
  
!       declare
!          Ignore : Node_Id;
!       begin
!          Ignore :=
!            Make_Subprogram_Body (Loc,
!              Specification => Spec_Node,
!              Aspect_Specifications => Aspect_Specs,
!              Handled_Statement_Sequence =>
!                Make_Handled_Sequence_Of_Statements (Loc, Body_Stmts));
!       end;
  
        Set_Is_Public (Copy_Id, Is_Public (Typ));
        Set_Is_Internal (Copy_Id);
--- 1974,1985 ----
        Set_Parameter_Specifications (Spec_Node, Parameters);
        Freeze_Extra_Formals (Copy_Id);
  
!       Discard_Node (
!         Make_Subprogram_Body (Loc,
!           Specification => Spec_Node,
!           Aspect_Specifications => Aspect_Specs,
!           Handled_Statement_Sequence =>
!                Make_Handled_Sequence_Of_Statements (Loc, Body_Stmts)));
  
        Set_Is_Public (Copy_Id, Is_Public (Typ));
        Set_Is_Internal (Copy_Id);
*************** package body Exp_Ch3 is
*** 2047,2053 ****
        --  Aspect Initialize enables default initialization
  
        declare
-          Ignore             : Node_Id;
           Default_Initialize : constant Node_Id :=
             Make_Aspect_Specification (Loc,
               Identifier => Make_Identifier (Loc, Name_Initialize),
--- 2043,2048 ----
*************** package body Exp_Ch3 is
*** 2059,2070 ****
                       Box_Present => True)),
                   Is_Parenthesis_Aggregate => True));
        begin
!          Ignore :=
             Make_Subprogram_Body (Loc,
               Specification => Spec_Node,
               Handled_Statement_Sequence =>
                 Make_Handled_Sequence_Of_Statements (Loc),
!              Aspect_Specifications => New_List (Default_Initialize));
        end;
  
        Set_Is_Public (Constructor_Id, Is_Public (Typ));
--- 2054,2065 ----
                       Box_Present => True)),
                   Is_Parenthesis_Aggregate => True));
        begin
!          Discard_Node (
             Make_Subprogram_Body (Loc,
               Specification => Spec_Node,
               Handled_Statement_Sequence =>
                 Make_Handled_Sequence_Of_Statements (Loc),
!              Aspect_Specifications => New_List (Default_Initialize)));
        end;
  
        Set_Is_Public (Constructor_Id, Is_Public (Typ));
*************** package body Exp_Ch3 is
*** 10014,10047 ****
              --    Rep Clause "for Def_Id'Storage_Pool use a_Pool_Object"
              --    ---> Storage Pool is the specified one
  
!             --  When compiling in Ada 2012 mode, ensure that the accessibility
!             --  level of the subpool access type is not deeper than that of the
!             --  pool_with_subpools.
  
              elsif Ada_Version >= Ada_2012
                and then Present (Associated_Storage_Pool (Def_Id))
                and then RTU_Loaded (System_Storage_Pools_Subpools)
              then
                 declare
!                   Loc   : constant Source_Ptr := Sloc (Def_Id);
!                   Pool  : constant Entity_Id :=
!                             Associated_Storage_Pool (Def_Id);
  
!                begin
!                   --  It is known that the accessibility level of the access
!                   --  type is deeper than that of the pool.
  
!                   if Type_Access_Level (Def_Id)
!                        > Static_Accessibility_Level (Pool, Object_Decl_Level)
!                     and then Is_Class_Wide_Type (Etype (Pool))
!                     and then not Accessibility_Checks_Suppressed (Def_Id)
!                     and then not Accessibility_Checks_Suppressed (Pool)
!                   then
!                      --  When the pool is of a class-wide type, it may or may
!                      --  not support subpools depending on the path of
!                      --  derivation. Generate:
  
!                      --    if Def_Id in RSPWS'Class then
                       --       raise Program_Error;
                       --    end if;
  
--- 10009,10071 ----
              --    Rep Clause "for Def_Id'Storage_Pool use a_Pool_Object"
              --    ---> Storage Pool is the specified one
  
!             --  When compiling in Ada 2012 mode, apply the RM 13.11.4(24-27)
!             --  rules, which are dynamic but can be applied statically for
!             --  the most part, and therefore are only concerned with pools
!             --  that have escaped the RM 13.11.4(22-23) legality checks and
!             --  thus are not descendants of Root_Storage_Pool_With_Subpools,
!             --  but may nevertheless have a tag that identifies them as such.
  
              elsif Ada_Version >= Ada_2012
+               and then not Accessibility_Checks_Suppressed (Def_Id)
                and then Present (Associated_Storage_Pool (Def_Id))
+               and then not
+                 Is_RTE (Associated_Storage_Pool (Def_Id), RE_RS_Pool)
+               and then not
+                 Is_RTE (Associated_Storage_Pool (Def_Id), RE_SS_Pool)
+               and then not
+                 Accessibility_Checks_Suppressed
+                   (Associated_Storage_Pool (Def_Id))
                and then RTU_Loaded (System_Storage_Pools_Subpools)
+               and then not
+                 Is_Ancestor (RTE (RE_Root_Storage_Pool_With_Subpools),
+                              Etype (Associated_Storage_Pool (Def_Id)))
              then
                 declare
!                   ADC  : constant Node_Id :=
!                            Get_Attribute_Definition_Clause
!                              (Def_Id, Attribute_Storage_Pool);
!                   Loc  : constant Source_Ptr := Sloc (ADC);
!                   Pool : constant Entity_Id :=
!                            Associated_Storage_Pool (Def_Id);
!                   Base : constant Node_Or_Entity_Id :=
!                            Get_Pool_Object_Or_Dereference (Pool);
  
!                   Is_Part_Of_Formal : constant Boolean :=
!                     Present (Base)
!                       and then Nkind (Base) = N_Defining_Identifier
!                       and then Is_Formal (Base);
!                   --  Whether the pool denotes part of a formal parameter
  
!                   Is_Part_Of_Dereference : constant Boolean :=
!                     Present (Base)
!                       and then Nkind (Base) = N_Explicit_Dereference
!                       and then
!                         Ekind (Etype (Prefix (Base))) = E_General_Access_Type
!                       and then not
!                         Is_Library_Level_Entity (Etype (Prefix (Base)));
!                   --  Whether the pool denotes part of a dereference of a
!                   --  value of a non-library-level general access type.
  
!                begin
!                   if Is_Part_Of_Formal
!                     or else Is_Part_Of_Dereference
!                     or else
!                       Type_Access_Level (Def_Id)
!                         > Static_Accessibility_Level (Pool, Object_Decl_Level)
!                   then
!                      --  Generate:
!                      --    if RSP'Class?(Def_Id) in RSPWS'Class then
                       --       raise Program_Error;
                       --    end if;
  
*************** package body Exp_Ch3 is
*** 10049,10055 ****
                         Make_If_Statement (Loc,
                           Condition       =>
                             Make_In (Loc,
!                              Left_Opnd  => New_Occurrence_Of (Pool, Loc),
                               Right_Opnd =>
                                 New_Occurrence_Of
                                   (Class_Wide_Type
--- 10073,10082 ----
                         Make_If_Statement (Loc,
                           Condition       =>
                             Make_In (Loc,
!                              Left_Opnd  =>
!                                OK_Convert_To
!                                  (Class_Wide_Type (RTE (RE_Root_Storage_Pool)),
!                                   New_Occurrence_Of (Pool, Loc)),
                               Right_Opnd =>
                                 New_Occurrence_Of
                                   (Class_Wide_Type
diff -Nrcpad gcc-17-20260614/gcc/ada/exp_ch4.adb gcc-17-20260621/gcc/ada/exp_ch4.adb
*** gcc-17-20260614/gcc/ada/exp_ch4.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/exp_ch4.adb	Sun Jun 21 22:32:05 2026
*************** package body Exp_Ch4 is
*** 794,799 ****
--- 794,803 ----
           return;
        end if;
  
+       --  Apply accessibility checks if access discriminants are present
+ 
+       Apply_Accessibility_Check_For_Discriminated_Allocator (N);
+ 
        --  If we have:
        --    type A is access T1;
        --    X : A := new T2'(...);
*************** package body Exp_Ch4 is
*** 832,869 ****
           return;
        end if;
  
-       --  Check that any anonymous access discriminants are suitable
-       --  for use in an allocator.
- 
-       --  Note: This check is performed here instead of during analysis
-       --  so that we can check against the fully resolved Etype of Exp.
- 
-       if Is_Entity_Name (Exp)
-         and then Has_Anonymous_Access_Discriminant (Etype (Exp))
-         and then Static_Accessibility_Level (Exp, Zero_On_Dynamic_Level)
-                    > Static_Accessibility_Level (N, Object_Decl_Level)
-       then
-          --  A dynamic check and a warning are generated when we are within
-          --  an instance.
- 
-          if In_Instance then
-             Insert_Action (N,
-               Make_Raise_Program_Error (Loc,
-                 Reason => PE_Accessibility_Check_Failed));
- 
-             Error_Msg_Warn := SPARK_Mode /= On;
-             Error_Msg_N ("anonymous access discriminant is too deep for use"
-                          & " in allocator<<", N);
-             Error_Msg_N ("\Program_Error [<<", N);
- 
-          --  Otherwise, make the error static
- 
-          else
-             Error_Msg_N ("anonymous access discriminant is too deep for use"
-                           & " in allocator", N);
-          end if;
-       end if;
- 
        Aggr_In_Place     := Is_Delayed_Aggregate (Exp);
        Delayed_Cond_Expr := Is_Delayed_Conditional_Expression (Exp);
  
--- 836,841 ----
*************** package body Exp_Ch4 is
*** 890,896 ****
  
           if Is_Build_In_Place_Function_Call (Exp) then
              Make_Build_In_Place_Call_In_Allocator (N, Exp);
!             Apply_Accessibility_Check_For_Allocator
                (N, Exp, N, Built_In_Place => True);
              return;
  
--- 862,868 ----
  
           if Is_Build_In_Place_Function_Call (Exp) then
              Make_Build_In_Place_Call_In_Allocator (N, Exp);
!             Apply_Accessibility_Check_For_Class_Wide_Allocator
                (N, Exp, N, Built_In_Place => True);
              return;
  
*************** package body Exp_Ch4 is
*** 903,909 ****
  
           elsif Present (Unqual_BIP_Iface_Function_Call (Exp)) then
              Make_Build_In_Place_Iface_Call_In_Allocator (N, Exp);
!             Apply_Accessibility_Check_For_Allocator
                (N, Exp, N, Built_In_Place => True);
              return;
           end if;
--- 875,881 ----
  
           elsif Present (Unqual_BIP_Iface_Function_Call (Exp)) then
              Make_Build_In_Place_Iface_Call_In_Allocator (N, Exp);
!             Apply_Accessibility_Check_For_Class_Wide_Allocator
                (N, Exp, N, Built_In_Place => True);
              return;
           end if;
*************** package body Exp_Ch4 is
*** 1132,1138 ****
           --  Note: the accessibility check must be inserted after the call to
           --  [Deep_]Adjust to ensure proper completion of the assignment.
  
!          Apply_Accessibility_Check_For_Allocator (N, Exp, Temp);
  
        --  Case of aggregate built in place
  
--- 1104,1110 ----
           --  Note: the accessibility check must be inserted after the call to
           --  [Deep_]Adjust to ensure proper completion of the assignment.
  
!          Apply_Accessibility_Check_For_Class_Wide_Allocator (N, Exp, Temp);
  
        --  Case of aggregate built in place
  
*************** package body Exp_Ch4 is
*** 4895,4900 ****
--- 4867,4876 ----
        --  that tasks get activated (see Build_Task_Allocate_Block for details).
  
        else
+          --  Apply accessibility checks if access discriminants are present
+ 
+          Apply_Accessibility_Check_For_Discriminated_Allocator (N);
+ 
           --  Apply constraint checks against designated subtype (RM 4.8(10/2)).
           --  Discriminant checks will be generated by the expansion below.
  
*************** package body Exp_Ch4 is
*** 4948,4953 ****
--- 4924,4941 ----
  
                 if Is_Incomplete_Or_Private_Type (Designated_Type (PtrT)) then
                    Deref := Unchecked_Convert_To (Etype (Init_Expr), Deref);
+ 
+                --  For a class-wide designated type with a constructor-based
+                --  initializer, convert to the specific type to avoid a
+                --  dispatching constructor call. Constructors are not
+                --  dispatching primitives, so the call must target the
+                --  specific type directly.
+ 
+                elsif Is_Class_Wide_Type (Designated_Type (PtrT))
+                  and then Nkind (Init_Expr) = N_Attribute_Reference
+                  and then Attribute_Name (Init_Expr) = Name_Make
+                then
+                   Deref := Unchecked_Convert_To (Etyp, Deref);
                 end if;
  
                 Stmt :=
*************** package body Exp_Ch4 is
*** 5612,5668 ****
     --------------------------------------
  
     procedure Expand_N_Expression_With_Actions (N : Node_Id) is
!       Acts : constant List_Id := Actions (N);
  
!       procedure Force_Boolean_Evaluation (Expr : Node_Id);
!       --  Force the evaluation of Boolean expression Expr
  
!       ------------------------------
!       -- Force_Boolean_Evaluation --
!       ------------------------------
  
!       procedure Force_Boolean_Evaluation (Expr : Node_Id) is
!          Loc       : constant Source_Ptr := Sloc (N);
!          Flag_Decl : Node_Id;
!          Flag_Id   : Entity_Id;
  
        begin
!          --  Relocate the expression to the actions list by capturing its value
!          --  in a Boolean flag. Generate:
!          --    Flag : constant Boolean := Expr;
  
!          Flag_Id := Make_Temporary (Loc, 'F');
  
!          Flag_Decl :=
!            Make_Object_Declaration (Loc,
!              Defining_Identifier => Flag_Id,
!              Constant_Present    => True,
!              Object_Definition   => New_Occurrence_Of (Standard_Boolean, Loc),
!              Expression          => Relocate_Node (Expr));
  
!          Append (Flag_Decl, Acts);
!          Analyze (Flag_Decl);
  
!          --  Replace the expression with a reference to the flag
  
!          Rewrite (Expression (N), New_Occurrence_Of (Flag_Id, Loc));
!          Analyze (Expression (N));
!       end Force_Boolean_Evaluation;
  
!    --  Start of processing for Expand_N_Expression_With_Actions
  
!    begin
!       --  Do not evaluate the expression when it denotes an entity because the
!       --  expression_with_actions node will be replaced by the reference.
  
!       if Is_Entity_Name (Expression (N)) then
!          null;
  
!       --  Do not evaluate the expression when there are no actions because the
!       --  expression_with_actions node will be replaced by the expression.
  
!       elsif Is_Empty_List (Acts) then
!          null;
  
        --  Force the evaluation of the expression by capturing its value in a
        --  temporary. This ensures that aliases of transient objects do not leak
--- 5600,5675 ----
     --------------------------------------
  
     procedure Expand_N_Expression_With_Actions (N : Node_Id) is
!       Acts : constant List_Id    := Actions (N);
!       Loc  : constant Source_Ptr := Sloc (N);
!       Typ  : constant Entity_Id  := Etype (N);
  
!       function Is_Copy_Type (Typ : Entity_Id) return Boolean;
!       --  Return True if we can copy objects of this type when expanding the
!       --  node. The function must return False for limited types for semantic
!       --  reasons, and more generally should do so for all by-reference types.
!       --  Of course the run-time performance of the copy operation should also
!       --  be taken into account, but the expansion of conditional expressions
!       --  may choose to create EWA nodes instead of conditional statements to
!       --  deal with the actions, in which case these EWA nodes also need to be
!       --  preserved for semantic reasons. In practice, this means that the
!       --  subset of types accepted by this Is_Copy_Type predicate must contain
!       --  the union of the subsets of types accepted by its homonyms in the
!       --  Expand_N_Case_Expression and Expand_N_If_Expression procedures, in
!       --  other words must return True when at least one of them returns true.
!       --  This implementation is that of Expand_N_If_Expression.Is_Copy_Type,
!       --  which already accepts a superset of the types accepted by its twin
!       --  Expand_N_Case_Expression.Is_Copy_Type predicate.
  
!       ------------------
!       -- Is_Copy_Type --
!       ------------------
  
!       function Is_Copy_Type (Typ : Entity_Id) return Boolean is
!          Utyp : constant Entity_Id := Underlying_Type (Typ);
  
        begin
!          return Is_Definite_Subtype (Utyp)
!            and then not Is_By_Reference_Type (Utyp);
!       end Is_Copy_Type;
  
!       --  Local variables
  
!       Temp_Decl : Node_Id;
!       Temp_Id   : Entity_Id;
!       Temp_Ref  : Node_Id;
  
!    --  Start of processing for Expand_N_Expression_With_Actions
  
!    begin
!       --  A check is first needed since the subtype of the EWA node and the
!       --  subtype of the expression may differ (for example, the EWA node
!       --  may have a null-excluding access subtype).
  
!       Apply_Constraint_Check (Expression (N), Typ);
  
!       --  Deal with case where there are no actions. In this case we simply
!       --  rewrite the node with its expression since we don't need the actions
!       --  and the specification of this node does not allow a null action list.
  
!       --  Note: we use Rewrite instead of Replace, because Codepeer is using
!       --  the expanded tree and relying on being able to retrieve the original
!       --  tree in cases like this. This raises a whole lot of issues of whether
!       --  we have problems elsewhere, which will be addressed in the future???
  
!       if Is_Empty_List (Acts) then
!          Rewrite (N, Relocate_Node (Expression (N)));
!          Analyze_And_Resolve (N, Typ);
  
!       --  Do not evaluate the expression when it denotes an entity because the
!       --  EWA node will simply be replaced by the reference. Likewise if it was
!       --  rewritten as a raise node. But nevertheless process transient objects
!       --  found within the actions of the EWA node.
  
!       elsif Is_Entity_Name (Expression (N))
!         or else Nkind (Expression (N)) in N_Raise_xxx_Error
!       then
!          Process_Transients_In_Expression (N, Acts);
  
        --  Force the evaluation of the expression by capturing its value in a
        --  temporary. This ensures that aliases of transient objects do not leak
*************** package body Exp_Ch4 is
*** 5688,5729 ****
        --  Once this transformation is performed, it is safe to finalize the
        --  transient object at the end of the actions list.
  
!       --  Note that Force_Evaluation does not remove side effects in operators
!       --  because it assumes that all operands are evaluated and side effect
!       --  free. This is not the case when an operand depends implicitly on the
!       --  transient object through the use of access types.
  
!       elsif Is_Boolean_Type (Etype (Expression (N))) then
!          Force_Boolean_Evaluation (Expression (N));
  
!       --  The expression of an expression_with_actions node may not necessarily
!       --  be Boolean when the node appears in an if expression. In this case do
!       --  the usual forced evaluation to encapsulate potential aliasing.
  
!       else
!          --  A check is also needed since the subtype of the EWA node and the
!          --  subtype of the expression may differ (for example, the EWA node
!          --  may have a null-excluding access subtype).
  
!          Apply_Constraint_Check (Expression (N), Etype (N));
!          Force_Evaluation (Expression (N));
!       end if;
  
!       --  Process transient objects found within the actions of the EWA node
  
!       Process_Transients_In_Expression (N, Acts);
  
!       --  Deal with case where there are no actions. In this case we simply
!       --  rewrite the node with its expression since we don't need the actions
!       --  and the specification of this node does not allow a null action list.
  
!       --  Note: we use Rewrite instead of Replace, because Codepeer is using
!       --  the expanded tree and relying on being able to retrieve the original
!       --  tree in cases like this. This raises a whole lot of issues of whether
!       --  we have problems elsewhere, which will be addressed in the future???
  
!       if Is_Empty_List (Acts) then
           Rewrite (N, Relocate_Node (Expression (N)));
        end if;
     end Expand_N_Expression_With_Actions;
  
--- 5695,5747 ----
        --  Once this transformation is performed, it is safe to finalize the
        --  transient object at the end of the actions list.
  
!       elsif Is_Copy_Type (Typ) then
!          --  Relocate the expression to the actions list by capturing its value
!          --  in a temporary. Generate:
!          --
!          --    Temp : constant Exp_Typ := Exp;
  
!          Temp_Id := Make_Temporary (Loc, 'F');
  
!          Temp_Decl :=
!            Make_Object_Declaration (Loc,
!              Defining_Identifier => Temp_Id,
!              Constant_Present    => True,
!              Object_Definition   =>
!                New_Occurrence_Of (Etype (Expression (N)), Loc),
!              Expression          => Relocate_Node (Expression (N)));
  
!          Append (Temp_Decl, Acts);
!          Analyze (Temp_Decl);
  
!          Temp_Ref := New_Occurrence_Of (Temp_Id, Loc);
  
!          --  Copy the Do_Range_Check flag that may have been set above
  
!          Set_Do_Range_Check (Temp_Ref, Do_Range_Check (Expression (N)));
  
!          --  Replace the expression with a reference to the temporary
  
!          Rewrite (Expression (N), Temp_Ref);
  
!          --  Process transient objects found within the actions of the EWA node
! 
!          Process_Transients_In_Expression (N, Acts);
! 
!       --  Otherwise insert the actions and replace the EWA by its expression.
!       --  This is necessary for limited types, and desirable for by-reference
!       --  types, because we cannot or should not create a temporary for them.
!       --  This means that the management of transient objects is deferred to
!       --  the enclosing context where the actions are inserted.
! 
!       else
!          Insert_Actions (N, Acts);
           Rewrite (N, Relocate_Node (Expression (N)));
+          Analyze_And_Resolve (N, Typ);
+ 
+          --  Note that the result is never static
+ 
+          Set_Is_Static_Expression (N, False);
        end if;
     end Expand_N_Expression_With_Actions;
  
*************** package body Exp_Ch4 is
*** 11521,11541 ****
        --  assignment to temporary. If there is no change of representation,
        --  then the conversion node is unchanged.
  
-       procedure Raise_Accessibility_Error;
-       --  Called when we know that an accessibility check will fail. Rewrites
-       --  node N to an appropriate raise statement and outputs warning msgs.
-       --  The Etype of the raise node is set to Target_Type. Note that in this
-       --  case the rest of the processing should be skipped (i.e. the call to
-       --  this procedure will be followed by "goto Done").
- 
        procedure Real_Range_Check;
        --  Handles generation of range check for real target value
  
-       function Statically_Deeper_Relation_Applies (Targ_Typ : Entity_Id)
-         return Boolean;
-       --  Given a target type for a conversion, determine whether the
-       --  statically deeper accessibility rules apply to it.
- 
        --------------------------
        -- Discrete_Range_Check --
        --------------------------
--- 11539,11547 ----
*************** package body Exp_Ch4 is
*** 11775,11796 ****
           end if;
        end Handle_Changed_Representation;
  
-       -------------------------------
-       -- Raise_Accessibility_Error --
-       -------------------------------
- 
-       procedure Raise_Accessibility_Error is
-       begin
-          Error_Msg_Warn := SPARK_Mode /= On;
-          Rewrite (N,
-            Make_Raise_Program_Error (Sloc (N),
-              Reason => PE_Accessibility_Check_Failed));
-          Set_Etype (N, Target_Type);
- 
-          Error_Msg_N ("accessibility check failure<<", N);
-          Error_Msg_N ("\Program_Error [<<", N);
-       end Raise_Accessibility_Error;
- 
        ----------------------
        -- Real_Range_Check --
        ----------------------
--- 11781,11786 ----
*************** package body Exp_Ch4 is
*** 12043,12067 ****
           Rewrite (Expr, New_Occurrence_Of (Tnn, Loc));
        end Real_Range_Check;
  
-       ----------------------------------------
-       -- Statically_Deeper_Relation_Applies --
-       ----------------------------------------
- 
-       function Statically_Deeper_Relation_Applies (Targ_Typ : Entity_Id)
-         return Boolean
-       is
-       begin
-          --  The case where the target type is an anonymous access type is
-          --  ignored since they have different semantics and get covered by
-          --  various runtime checks depending on context.
- 
-          --  Note, the current implementation of this predicate is incomplete
-          --  and doesn't fully reflect the rules given in RM 3.10.2 (19) and
-          --  (19.1) ???
- 
-          return Ekind (Targ_Typ) /= E_Anonymous_Access_Type;
-       end Statically_Deeper_Relation_Applies;
- 
     --  Start of processing for Expand_N_Type_Conversion
  
     begin
--- 12033,12038 ----
*************** package body Exp_Ch4 is
*** 12341,12384 ****
                 Apply_Accessibility_Check_For_Conversion
                   (Operand, Target_Type, Insert_Node => Operand);
              end if;
- 
-          --  If the level of the operand type is statically deeper than the
-          --  level of the target type, then force Program_Error. Note that this
-          --  can only occur for cases where the attribute is within the body of
-          --  an instantiation, otherwise the conversion will already have been
-          --  rejected as illegal.
- 
-          --  Note: warnings are issued by the analyzer for the instance cases,
-          --  and, since we are late in expansion, a check is performed to
-          --  verify that neither the target type nor the operand type are
-          --  internally generated - as this can lead to spurious errors when,
-          --  for example, the operand type is a result of BIP expansion.
- 
-          elsif In_Instance_Body
-            and then Statically_Deeper_Relation_Applies (Target_Type)
-            and then not Is_Internal (Target_Type)
-            and then not Is_Internal (Operand_Type)
-            and then
-              Type_Access_Level (Operand_Type) > Type_Access_Level (Target_Type)
-          then
-             Raise_Accessibility_Error;
-             goto Done;
- 
-          --  When the operand is a selected access discriminant the check needs
-          --  to be made against the level of the object denoted by the prefix
-          --  of the selected name. Force Program_Error for this case as well
-          --  (this accessibility violation can only happen if within the body
-          --  of an instantiation).
- 
-          elsif In_Instance_Body
-            and then Ekind (Operand_Type) = E_Anonymous_Access_Type
-            and then Nkind (Operand) = N_Selected_Component
-            and then Ekind (Entity (Selector_Name (Operand))) = E_Discriminant
-            and then Static_Accessibility_Level (Operand, Zero_On_Dynamic_Level)
-                       > Type_Access_Level (Target_Type)
-          then
-             Raise_Accessibility_Error;
-             goto Done;
           end if;
        end if;
  
--- 12312,12317 ----
diff -Nrcpad gcc-17-20260614/gcc/ada/exp_ch6.adb gcc-17-20260621/gcc/ada/exp_ch6.adb
*** gcc-17-20260614/gcc/ada/exp_ch6.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/exp_ch6.adb	Sun Jun 21 22:32:05 2026
*************** package body Exp_Ch6 is
*** 5374,5379 ****
--- 5374,5385 ----
       --  cause a temporary to be created.
  
     begin
+       --  The decision will be made after the EWA node is expanded
+ 
+       if Nkind (Par) = N_Expression_With_Actions then
+          return;
+       end if;
+ 
        --  Optimization: if the returned value is returned again, then no need
        --  to copy/readjust/finalize, we can just pass the value through (see
        --  Expand_Simple_Function_Return), and thus no attachment is needed.
*************** package body Exp_Ch6 is
*** 6043,6048 ****
--- 6049,6065 ----
                 Append (Make_Mode_Literal (Loc, Full_Init), Params);
              end if;
  
+             --  The init proc for a limited record type has an extra
+             --  accessibility level formal (_Init_Level) that must be
+             --  passed.
+ 
+             if Present (Init_Proc_Level_Formal (Init_Proc)) then
+                Append
+                  (Make_Integer_Literal
+                     (Loc, Scope_Depth (Standard_Standard)),
+                   Params);
+             end if;
+ 
              return Init_Proc_Call : constant Node_Id :=
                Make_Procedure_Call_Statement (Loc,
                  Name => New_Occurrence_Of (Init_Proc, Loc),
*************** package body Exp_Ch6 is
*** 6189,6194 ****
--- 6206,6214 ----
  
              elsif Chars (Component) = Name_uParent
                and then Needs_Construction (Etype (Component))
+               and then (Present (Find_Aspect (Body_Id, Aspect_Super))
+                           or else Has_Parameterless_Constructor
+                                     (Etype (Component)))
              then
                 Append_To (Parent_List,
                   Make_Parent_Constructor_Call
diff -Nrcpad gcc-17-20260614/gcc/ada/exp_dbug.adb gcc-17-20260621/gcc/ada/exp_dbug.adb
*** gcc-17-20260614/gcc/ada/exp_dbug.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/exp_dbug.adb	Sun Jun 21 22:32:05 2026
*************** package body Exp_Dbug is
*** 1324,1330 ****
  
        function Is_BNPE (S : Entity_Id) return Boolean is
        begin
!          return Ekind (S) = E_Package and then Is_Package_Body_Entity (S);
        end Is_BNPE;
  
        --------------------
--- 1324,1330 ----
  
        function Is_BNPE (S : Entity_Id) return Boolean is
        begin
!          return Ekind (S) = E_Package and then Declared_In_Package_Body (S);
        end Is_BNPE;
  
        --------------------
diff -Nrcpad gcc-17-20260614/gcc/ada/expander.adb gcc-17-20260621/gcc/ada/expander.adb
*** gcc-17-20260614/gcc/ada/expander.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/expander.adb	Sun Jun 21 22:32:05 2026
*************** package body Expander is
*** 537,544 ****
  
           if Scope_Is_Transient and then N = Node_To_Be_Wrapped then
              case Nkind (N) is
!                when N_Pragma
!                   | N_Procedure_Call_Statement
                    | N_Statement_Other_Than_Procedure_Call
                 =>
                    Wrap_Transient_Statement (N);
--- 537,543 ----
  
           if Scope_Is_Transient and then N = Node_To_Be_Wrapped then
              case Nkind (N) is
!                when N_Procedure_Call_Statement
                    | N_Statement_Other_Than_Procedure_Call
                 =>
                    Wrap_Transient_Statement (N);
diff -Nrcpad gcc-17-20260614/gcc/ada/fe.h gcc-17-20260621/gcc/ada/fe.h
*** gcc-17-20260614/gcc/ada/fe.h	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/fe.h	Sun Jun 21 22:32:05 2026
*************** extern void Set_Identifier_Casing	(void
*** 122,130 ****
--- 122,132 ----
  
  #define Error_Msg_Uint_1	err_vars__error_msg_uint_1
  #define Error_Msg_Uint_2	err_vars__error_msg_uint_2
+ #define Error_Msg_Sloc	err_vars__error_msg_sloc
  
  extern Uint Error_Msg_Uint_1;
  extern Uint Error_Msg_Uint_2;
+ extern Source_Ptr Error_Msg_Sloc;
  
  /* exp_ch11:  */
  
*************** extern Node_Id Renamed_Entity (N Node);
*** 535,540 ****
--- 537,545 ----
  #define Renamed_Object einfo__entities__renamed_or_alias
  extern Node_Id Renamed_Object (N Node);
  
+ #define Scope sinfo__nodes__scope_raw
+ extern Node_Id Scope (N Node);
+ 
  #ifdef __cplusplus
  }
  #endif
diff -Nrcpad gcc-17-20260614/gcc/ada/frontend.adb gcc-17-20260621/gcc/ada/frontend.adb
*** gcc-17-20260614/gcc/ada/frontend.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/frontend.adb	Sun Jun 21 22:32:05 2026
*************** begin
*** 381,387 ****
  
        if Initialize_Scalars and then Is_Predefined_Unit (Main_Unit) then
           Initialize_Scalars   := False;
-          Init_Or_Norm_Scalars := Normalize_Scalars;
        end if;
  
        --  Now on to the semantics. Skip if in syntax only mode
--- 381,386 ----
diff -Nrcpad gcc-17-20260614/gcc/ada/gen_il-fields.ads gcc-17-20260621/gcc/ada/gen_il-fields.ads
*** gcc-17-20260614/gcc/ada/gen_il-fields.ads	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/gen_il-fields.ads	Sun Jun 21 22:32:05 2026
*************** package Gen_IL.Fields is
*** 381,387 ****
        SCIL_Entity,
        SCIL_Tag_Value,
        SCIL_Target_Prim,
!       Scope,
        Scope_Link,
        Select_Alternatives,
        Selector_Name,
--- 381,387 ----
        SCIL_Entity,
        SCIL_Tag_Value,
        SCIL_Target_Prim,
!       Scope_Raw,
        Scope_Link,
        Select_Alternatives,
        Selector_Name,
*************** package Gen_IL.Fields is
*** 488,493 ****
--- 488,494 ----
        Current_Value,
        Debug_Info_Off,
        Debug_Renaming_Link,
+       Declared_In_Package_Body,
        Default_Aspect_Component_Value,
        Default_Aspect_Value,
        Default_Expressions_Processed,
*************** package Gen_IL.Fields is
*** 766,772 ****
        Is_Null_Init_Proc,
        Is_Obsolescent,
        Is_Only_Out_Parameter,
-       Is_Package_Body_Entity,
        Is_Packed,
        Is_Packed_Array_Impl_Type,
        Is_Not_Self_Hidden,
--- 767,772 ----
diff -Nrcpad gcc-17-20260614/gcc/ada/gen_il-gen-gen_entities.adb gcc-17-20260621/gcc/ada/gen_il-gen-gen_entities.adb
*** gcc-17-20260614/gcc/ada/gen_il-gen-gen_entities.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/gen_il-gen-gen_entities.adb	Sun Jun 21 22:32:05 2026
*************** begin -- Gen_IL.Gen.Gen_Entities
*** 54,59 ****
--- 54,60 ----
          Sm (Associated_Entity, Node_Id),
          Sm (Can_Never_Be_Null, Flag),
          Sm (Checks_May_Be_Suppressed, Flag),
+         Sm (Declared_In_Package_Body, Flag),
          Sm (Debug_Info_Off, Flag),
          Sm (Default_Expressions_Processed, Flag),
          Sm (Delay_Cleanups, Flag),
*************** begin -- Gen_IL.Gen.Gen_Entities
*** 116,122 ****
          Sm (Has_Yield_Aspect, Flag),
          Sm (Homonym, Node_Id),
          Sm (Incomplete_View, Node_Id),
!         Sm (In_Package_Body, Flag),
          Sm (In_Private_Part, Flag),
          Sm (In_Use, Flag),
          Sm (Is_Ada_2005_Only, Flag),
--- 117,125 ----
          Sm (Has_Yield_Aspect, Flag),
          Sm (Homonym, Node_Id),
          Sm (Incomplete_View, Node_Id),
!         Sm (In_Package_Body,
!            Flag,
!            Pre_Set => "Ekind (N) in E_Package | E_Generic_Package"),
          Sm (In_Private_Part, Flag),
          Sm (In_Use, Flag),
          Sm (Is_Ada_2005_Only, Flag),
*************** begin -- Gen_IL.Gen.Gen_Entities
*** 179,185 ****
          Sm (Is_Link_Once, Flag),
          Sm (Is_Loop_Parameter, Flag),
          Sm (Is_Obsolescent, Flag),
-         Sm (Is_Package_Body_Entity, Flag),
          Sm (Is_Packed, Flag, Impl_Base_Type_Only),
          Sm (Is_Packed_Array_Impl_Type, Flag),
          Sm (Is_Not_Self_Hidden, Flag),
--- 182,187 ----
diff -Nrcpad gcc-17-20260614/gcc/ada/gen_il-gen-gen_nodes.adb gcc-17-20260621/gcc/ada/gen_il-gen-gen_nodes.adb
*** gcc-17-20260614/gcc/ada/gen_il-gen-gen_nodes.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/gen_il-gen-gen_nodes.adb	Sun Jun 21 22:32:05 2026
*************** begin -- Gen_IL.Gen.Gen_Nodes
*** 135,141 ****
     Ab (N_Entity, N_Has_Etype,
         (Sy (Chars, Name_Id, Default_No_Name),
          Sm (Next_Entity, Node_Id),
!         Sm (Scope, Node_Id)));
  
     Cc (N_Defining_Character_Literal, N_Entity);
     Cc (N_Defining_Identifier, N_Entity);
--- 135,141 ----
     Ab (N_Entity, N_Has_Etype,
         (Sy (Chars, Name_Id, Default_No_Name),
          Sm (Next_Entity, Node_Id),
!         Sm (Scope_Raw, Node_Id)));
  
     Cc (N_Defining_Character_Literal, N_Entity);
     Cc (N_Defining_Identifier, N_Entity);
diff -Nrcpad gcc-17-20260614/gcc/ada/gen_il-gen.adb gcc-17-20260621/gcc/ada/gen_il-gen.adb
*** gcc-17-20260614/gcc/ada/gen_il-gen.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/gen_il-gen.adb	Sun Jun 21 22:32:05 2026
*************** package body Gen_IL.Gen is
*** 1212,1219 ****
           pragma Assert (Field_Table (Is_Potentially_Use_Visible).Offset = 18);
           Choose_Offset (Is_Generic_Instance);
           pragma Assert (Field_Table (Is_Generic_Instance).Offset = 19);
!          Choose_Offset (Scope);
!          pragma Assert (Field_Table (Scope).Offset = 2);
  
           --  Then loop through them all, skipping the ones we did above
  
--- 1212,1219 ----
           pragma Assert (Field_Table (Is_Potentially_Use_Visible).Offset = 18);
           Choose_Offset (Is_Generic_Instance);
           pragma Assert (Field_Table (Is_Generic_Instance).Offset = 19);
!          Choose_Offset (Scope_Raw);
!          pragma Assert (Field_Table (Scope_Raw).Offset = 2);
  
           --  Then loop through them all, skipping the ones we did above
  
diff -Nrcpad gcc-17-20260614/gcc/ada/gen_il-internals.adb gcc-17-20260621/gcc/ada/gen_il-internals.adb
*** gcc-17-20260614/gcc/ada/gen_il-internals.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/gen_il-internals.adb	Sun Jun 21 22:32:05 2026
*************** package body Gen_IL.Internals is
*** 341,346 ****
--- 341,348 ----
              return "SCIL_Tag_Value";
           when SCIL_Target_Prim =>
              return "SCIL_Target_Prim";
+          when Scope_Raw =>
+             return "Scope_Raw";
           when Shift_Count_OK =>
              return "Shift_Count_OK";
           when SPARK_Aux_Pragma =>
diff -Nrcpad gcc-17-20260614/gcc/ada/ghost.adb gcc-17-20260621/gcc/ada/ghost.adb
*** gcc-17-20260614/gcc/ada/ghost.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/ghost.adb	Sun Jun 21 22:32:05 2026
*************** package body Ghost is
*** 2907,2914 ****
           else
              if Is_Checked (N) then
                 Install_Ghost_Region (Check, N, Level);
-             elsif Is_Ignored (N) then
-                Install_Ghost_Region (Ignore, N, Level);
              else
                 Install_Ghost_Region (None, N, Level);
              end if;
--- 2907,2912 ----
diff -Nrcpad gcc-17-20260614/gcc/ada/gnat_rm.texi gcc-17-20260621/gcc/ada/gnat_rm.texi
*** gcc-17-20260614/gcc/ada/gnat_rm.texi	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/gnat_rm.texi	Sun Jun 21 22:32:05 2026
***************
*** 19,25 ****
  
  @copying
  @quotation
! GNAT Reference Manual , Jun 04, 2026
  
  AdaCore
  
--- 19,25 ----
  
  @copying
  @quotation
! GNAT Reference Manual , Jun 18, 2026
  
  AdaCore
  
*************** Implementation Defined Pragmas
*** 207,212 ****
--- 207,213 ----
  * Pragma Main:: 
  * Pragma Main_Storage:: 
  * Pragma Max_Queue_Length:: 
+ * Pragma Modifies:: 
  * Pragma No_Body:: 
  * Pragma No_Caching:: 
  * Pragma No_Component_Reordering:: 
*************** Implementation Defined Aspects
*** 341,346 ****
--- 342,348 ----
  * Aspect Local_Restrictions:: 
  * Aspect Lock_Free:: 
  * Aspect Max_Queue_Length:: 
+ * Aspect Modifies:: 
  * Aspect No_Caching:: 
  * Aspect No_Elaboration_Code_All:: 
  * Aspect No_Inline:: 
*************** consideration, the use of these pragmas
*** 1410,1415 ****
--- 1412,1418 ----
  * Pragma Main:: 
  * Pragma Main_Storage:: 
  * Pragma Max_Queue_Length:: 
+ * Pragma Modifies:: 
  * Pragma No_Body:: 
  * Pragma No_Caching:: 
  * Pragma No_Component_Reordering:: 
*************** MAIN_STORAGE_OPTION ::=
*** 5509,5515 ****
  This pragma is provided for compatibility with OpenVMS VAX Systems.  It has
  no effect in GNAT, other than being syntax checked.
  
! @node Pragma Max_Queue_Length,Pragma No_Body,Pragma Main_Storage,Implementation Defined Pragmas
  @anchor{gnat_rm/implementation_defined_pragmas id24}@anchor{a5}@anchor{gnat_rm/implementation_defined_pragmas pragma-max-queue-length}@anchor{a6}
  @section Pragma Max_Queue_Length
  
--- 5512,5518 ----
  This pragma is provided for compatibility with OpenVMS VAX Systems.  It has
  no effect in GNAT, other than being syntax checked.
  
! @node Pragma Max_Queue_Length,Pragma Modifies,Pragma Main_Storage,Implementation Defined Pragmas
  @anchor{gnat_rm/implementation_defined_pragmas id24}@anchor{a5}@anchor{gnat_rm/implementation_defined_pragmas pragma-max-queue-length}@anchor{a6}
  @section Pragma Max_Queue_Length
  
*************** entry.
*** 5527,5534 ****
  
  A value of -1 represents no additional restriction on queue length.
  
! @node Pragma No_Body,Pragma No_Caching,Pragma Max_Queue_Length,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-no-body}@anchor{a7}
  @section Pragma No_Body
  
  
--- 5530,5573 ----
  
  A value of -1 represents no additional restriction on queue length.
  
! @node Pragma Modifies,Pragma No_Body,Pragma Max_Queue_Length,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-modifies}@anchor{a7}
! @section Pragma Modifies
! 
! 
! @geindex Modifies
! 
! Syntax:
! 
! @example
! pragma Modifies (MODIFIES_SPECIFICATION);
! 
! MODIFIES_SPECIFICATION ::=
!     MODIFIES_CLAUSE
!   | (MODIFIES_CLAUSE @{, MODIFIES_CLAUSE@});
! 
! MODIFIES_CLAUSE ::= MODIFIED_OBJECTS @{ when GUARD @}
! 
! GUARD ::= boolean_EXPRESSION
! 
! MODIFIED_OBJECTS ::= MODIFIED_OBJECT | (MODIFIED_OBJECT @{, MODIFIED_OBJECT@})
! 
! MODIFIED_OBJECT ::=
!     name
!   | MODIFIED_OBJECT . all
!   | MODIFIED_OBJECT . component_selector_name
!   | MODIFIED_OBJECT (expression @{, expression@})
! @end example
! 
! The @code{Modifies} pragma is intended to be an exact replacement for the
! implementation-defined @code{Modifies} aspect, and shares its restrictions
! and semantics.
! 
! This is an assertion kind pragma that can associate a set of its arguments
! with an assertion level. See SPARK 2014 Reference Manual, section TBD.
! 
! @node Pragma No_Body,Pragma No_Caching,Pragma Modifies,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-no-body}@anchor{a8}
  @section Pragma No_Body
  
  
*************** dummy body with a No_Body pragma ensures
*** 5551,5557 ****
  earlier versions of the package body.
  
  @node Pragma No_Caching,Pragma No_Component_Reordering,Pragma No_Body,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id25}@anchor{a8}@anchor{gnat_rm/implementation_defined_pragmas pragma-no-caching}@anchor{a9}
  @section Pragma No_Caching
  
  
--- 5590,5596 ----
  earlier versions of the package body.
  
  @node Pragma No_Caching,Pragma No_Component_Reordering,Pragma No_Body,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id25}@anchor{a9}@anchor{gnat_rm/implementation_defined_pragmas pragma-no-caching}@anchor{aa}
  @section Pragma No_Caching
  
  
*************** For the semantics of this pragma, see th
*** 5565,5571 ****
  the SPARK 2014 Reference Manual, section 7.1.2.
  
  @node Pragma No_Component_Reordering,Pragma No_Elaboration_Code_All,Pragma No_Caching,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-no-component-reordering}@anchor{aa}
  @section Pragma No_Component_Reordering
  
  
--- 5604,5610 ----
  the SPARK 2014 Reference Manual, section 7.1.2.
  
  @node Pragma No_Component_Reordering,Pragma No_Elaboration_Code_All,Pragma No_Caching,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-no-component-reordering}@anchor{ab}
  @section Pragma No_Component_Reordering
  
  
*************** declared in units to which the pragma ap
*** 5584,5590 ****
  that this pragma be used consistently within a partition.
  
  @node Pragma No_Elaboration_Code_All,Pragma No_Heap_Finalization,Pragma No_Component_Reordering,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id26}@anchor{ab}@anchor{gnat_rm/implementation_defined_pragmas pragma-no-elaboration-code-all}@anchor{ac}
  @section Pragma No_Elaboration_Code_All
  
  
--- 5623,5629 ----
  that this pragma be used consistently within a partition.
  
  @node Pragma No_Elaboration_Code_All,Pragma No_Heap_Finalization,Pragma No_Component_Reordering,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id26}@anchor{ac}@anchor{gnat_rm/implementation_defined_pragmas pragma-no-elaboration-code-all}@anchor{ad}
  @section Pragma No_Elaboration_Code_All
  
  
*************** current unit, it must also have the @cit
*** 5603,5609 ****
  It may be applied to package or subprogram specs or their generic versions.
  
  @node Pragma No_Heap_Finalization,Pragma No_Inline,Pragma No_Elaboration_Code_All,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-no-heap-finalization}@anchor{ad}
  @section Pragma No_Heap_Finalization
  
  
--- 5642,5648 ----
  It may be applied to package or subprogram specs or their generic versions.
  
  @node Pragma No_Heap_Finalization,Pragma No_Inline,Pragma No_Elaboration_Code_All,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-no-heap-finalization}@anchor{ae}
  @section Pragma No_Heap_Finalization
  
  
*************** lose its @code{No_Heap_Finalization} pra
*** 5635,5641 ****
  appear at the library level.
  
  @node Pragma No_Inline,Pragma No_Raise,Pragma No_Heap_Finalization,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id27}@anchor{ae}@anchor{gnat_rm/implementation_defined_pragmas pragma-no-inline}@anchor{af}
  @section Pragma No_Inline
  
  
--- 5674,5680 ----
  appear at the library level.
  
  @node Pragma No_Inline,Pragma No_Raise,Pragma No_Heap_Finalization,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id27}@anchor{af}@anchor{gnat_rm/implementation_defined_pragmas pragma-no-inline}@anchor{b0}
  @section Pragma No_Inline
  
  
*************** in particular it is not subject to the u
*** 5653,5659 ****
  pragma @code{Inline_Always} for the same @code{NAME}.
  
  @node Pragma No_Raise,Pragma No_Return,Pragma No_Inline,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id28}@anchor{b0}@anchor{gnat_rm/implementation_defined_pragmas pragma-no-raise}@anchor{b1}
  @section Pragma No_Raise
  
  
--- 5692,5698 ----
  pragma @code{Inline_Always} for the same @code{NAME}.
  
  @node Pragma No_Raise,Pragma No_Return,Pragma No_Inline,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id28}@anchor{b1}@anchor{gnat_rm/implementation_defined_pragmas pragma-no-raise}@anchor{b2}
  @section Pragma No_Raise
  
  
*************** An implementation-defined check named @c
*** 5670,5676 ****
  pragma, and @cite{Program_Error} is raised upon its failure (see RM 11.5(19/5)).
  
  @node Pragma No_Return,Pragma No_Strict_Aliasing,Pragma No_Raise,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-no-return}@anchor{b2}
  @section Pragma No_Return
  
  
--- 5709,5715 ----
  pragma, and @cite{Program_Error} is raised upon its failure (see RM 11.5(19/5)).
  
  @node Pragma No_Return,Pragma No_Strict_Aliasing,Pragma No_Raise,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-no-return}@anchor{b3}
  @section Pragma No_Return
  
  
*************** available in all earlier versions of Ada
*** 5697,5703 ****
  pragma.
  
  @node Pragma No_Strict_Aliasing,Pragma No_Tagged_Streams,Pragma No_Return,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-no-strict-aliasing}@anchor{b3}
  @section Pragma No_Strict_Aliasing
  
  
--- 5736,5742 ----
  pragma.
  
  @node Pragma No_Strict_Aliasing,Pragma No_Tagged_Streams,Pragma No_Return,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-no-strict-aliasing}@anchor{b4}
  @section Pragma No_Strict_Aliasing
  
  
*************** in the @cite{GNAT User’s Guide}.
*** 5719,5725 ****
  This pragma currently has no effects on access to unconstrained array types.
  
  @node Pragma No_Tagged_Streams,Pragma Normalize_Scalars,Pragma No_Strict_Aliasing,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id29}@anchor{b4}@anchor{gnat_rm/implementation_defined_pragmas pragma-no-tagged-streams}@anchor{b5}
  @section Pragma No_Tagged_Streams
  
  
--- 5758,5764 ----
  This pragma currently has no effects on access to unconstrained array types.
  
  @node Pragma No_Tagged_Streams,Pragma Normalize_Scalars,Pragma No_Strict_Aliasing,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id29}@anchor{b5}@anchor{gnat_rm/implementation_defined_pragmas pragma-no-tagged-streams}@anchor{b6}
  @section Pragma No_Tagged_Streams
  
  
*************** with empty strings. This is useful to av
*** 5758,5764 ****
  level but has a negative impact on the debuggability of tagged types.
  
  @node Pragma Normalize_Scalars,Pragma Obsolescent,Pragma No_Tagged_Streams,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-normalize-scalars}@anchor{b6}
  @section Pragma Normalize_Scalars
  
  
--- 5797,5803 ----
  level but has a negative impact on the debuggability of tagged types.
  
  @node Pragma Normalize_Scalars,Pragma Obsolescent,Pragma No_Tagged_Streams,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-normalize-scalars}@anchor{b7}
  @section Pragma Normalize_Scalars
  
  
*************** will always generate an invalid value if
*** 5840,5846 ****
  @end table
  
  @node Pragma Obsolescent,Pragma Optimize_Alignment,Pragma Normalize_Scalars,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id30}@anchor{b7}@anchor{gnat_rm/implementation_defined_pragmas pragma-obsolescent}@anchor{b8}
  @section Pragma Obsolescent
  
  
--- 5879,5885 ----
  @end table
  
  @node Pragma Obsolescent,Pragma Optimize_Alignment,Pragma Normalize_Scalars,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id30}@anchor{b8}@anchor{gnat_rm/implementation_defined_pragmas pragma-obsolescent}@anchor{b9}
  @section Pragma Obsolescent
  
  
*************** So if you specify @code{Entity =>} for t
*** 5936,5942 ****
  argument is present, it must be preceded by @code{Message =>}.
  
  @node Pragma Optimize_Alignment,Pragma Ordered,Pragma Obsolescent,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-optimize-alignment}@anchor{b9}
  @section Pragma Optimize_Alignment
  
  
--- 5975,5981 ----
  argument is present, it must be preceded by @code{Message =>}.
  
  @node Pragma Optimize_Alignment,Pragma Ordered,Pragma Obsolescent,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-optimize-alignment}@anchor{ba}
  @section Pragma Optimize_Alignment
  
  
*************** latter are compiled by default in pragma
*** 6022,6028 ****
  pragma appears at the start of the file.
  
  @node Pragma Ordered,Pragma Overflow_Mode,Pragma Optimize_Alignment,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-ordered}@anchor{ba}
  @section Pragma Ordered
  
  
--- 6061,6067 ----
  pragma appears at the start of the file.
  
  @node Pragma Ordered,Pragma Overflow_Mode,Pragma Optimize_Alignment,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-ordered}@anchor{bb}
  @section Pragma Ordered
  
  
*************** For additional information please refer
*** 6114,6120 ****
  `-gnatw.u' switch in the GNAT User’s Guide.
  
  @node Pragma Overflow_Mode,Pragma Overriding_Renamings,Pragma Ordered,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-overflow-mode}@anchor{bb}
  @section Pragma Overflow_Mode
  
  
--- 6153,6159 ----
  `-gnatw.u' switch in the GNAT User’s Guide.
  
  @node Pragma Overflow_Mode,Pragma Overriding_Renamings,Pragma Ordered,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-overflow-mode}@anchor{bc}
  @section Pragma Overflow_Mode
  
  
*************** The pragma @code{Unsuppress (Overflow_Ch
*** 6153,6159 ****
  overflow checking, but does not affect the overflow mode.
  
  @node Pragma Overriding_Renamings,Pragma Part_Of,Pragma Overflow_Mode,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-overriding-renamings}@anchor{bc}
  @section Pragma Overriding_Renamings
  
  
--- 6192,6198 ----
  overflow checking, but does not affect the overflow mode.
  
  @node Pragma Overriding_Renamings,Pragma Part_Of,Pragma Overflow_Mode,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-overriding-renamings}@anchor{bd}
  @section Pragma Overriding_Renamings
  
  
*************** RM 8.3 (15) stipulates that an overridde
*** 6188,6194 ****
  declaration of the overriding operation.
  
  @node Pragma Part_Of,Pragma Partition_Elaboration_Policy,Pragma Overriding_Renamings,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id31}@anchor{bd}@anchor{gnat_rm/implementation_defined_pragmas pragma-part-of}@anchor{be}
  @section Pragma Part_Of
  
  
--- 6227,6233 ----
  declaration of the overriding operation.
  
  @node Pragma Part_Of,Pragma Partition_Elaboration_Policy,Pragma Overriding_Renamings,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id31}@anchor{be}@anchor{gnat_rm/implementation_defined_pragmas pragma-part-of}@anchor{bf}
  @section Pragma Part_Of
  
  
*************** For the semantics of this pragma, see th
*** 6204,6210 ****
  SPARK 2014 Reference Manual, section 7.2.6.
  
  @node Pragma Partition_Elaboration_Policy,Pragma Passive,Pragma Part_Of,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-partition-elaboration-policy}@anchor{bf}
  @section Pragma Partition_Elaboration_Policy
  
  
--- 6243,6249 ----
  SPARK 2014 Reference Manual, section 7.2.6.
  
  @node Pragma Partition_Elaboration_Policy,Pragma Passive,Pragma Part_Of,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-partition-elaboration-policy}@anchor{c0}
  @section Pragma Partition_Elaboration_Policy
  
  
*************** versions of Ada as an implementation-def
*** 6221,6227 ****
  See Ada 2012 Reference Manual for details.
  
  @node Pragma Passive,Pragma Persistent_BSS,Pragma Partition_Elaboration_Policy,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-passive}@anchor{c0}
  @section Pragma Passive
  
  
--- 6260,6266 ----
  See Ada 2012 Reference Manual for details.
  
  @node Pragma Passive,Pragma Persistent_BSS,Pragma Partition_Elaboration_Policy,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-passive}@anchor{c1}
  @section Pragma Passive
  
  
*************** For more information on the subject of p
*** 6245,6251 ****
  ‘Passive Task Optimization’ in the GNAT Users Guide.
  
  @node Pragma Persistent_BSS,Pragma Post,Pragma Passive,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id32}@anchor{c1}@anchor{gnat_rm/implementation_defined_pragmas pragma-persistent-bss}@anchor{c2}
  @section Pragma Persistent_BSS
  
  
--- 6284,6290 ----
  ‘Passive Task Optimization’ in the GNAT Users Guide.
  
  @node Pragma Persistent_BSS,Pragma Post,Pragma Passive,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id32}@anchor{c2}@anchor{gnat_rm/implementation_defined_pragmas pragma-persistent-bss}@anchor{c3}
  @section Pragma Persistent_BSS
  
  
*************** If this pragma is used on a target where
*** 6276,6282 ****
  then the pragma will be ignored. See also @code{pragma Linker_Section}.
  
  @node Pragma Post,Pragma Postcondition,Pragma Persistent_BSS,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-post}@anchor{c3}
  @section Pragma Post
  
  
--- 6315,6321 ----
  then the pragma will be ignored. See also @code{pragma Linker_Section}.
  
  @node Pragma Post,Pragma Postcondition,Pragma Persistent_BSS,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-post}@anchor{c4}
  @section Pragma Post
  
  
*************** with an assertion level. See SPARK 2014
*** 6305,6311 ****
  11.4.2.
  
  @node Pragma Postcondition,Pragma Post_Class,Pragma Post,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-postcondition}@anchor{c4}
  @section Pragma Postcondition
  
  
--- 6344,6350 ----
  11.4.2.
  
  @node Pragma Postcondition,Pragma Post_Class,Pragma Post,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-postcondition}@anchor{c5}
  @section Pragma Postcondition
  
  
*************** with an assertion level. See SPARK 2014
*** 6474,6480 ****
  11.4.2.
  
  @node Pragma Post_Class,Pragma Pre,Pragma Postcondition,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-post-class}@anchor{c5}
  @section Pragma Post_Class
  
  
--- 6513,6519 ----
  11.4.2.
  
  @node Pragma Post_Class,Pragma Pre,Pragma Postcondition,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-post-class}@anchor{c6}
  @section Pragma Post_Class
  
  
*************** with an assertion level. See SPARK 2014
*** 6513,6519 ****
  11.4.2.
  
  @node Pragma Pre,Pragma Precondition,Pragma Post_Class,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-pre}@anchor{c6}
  @section Pragma Pre
  
  
--- 6552,6558 ----
  11.4.2.
  
  @node Pragma Pre,Pragma Precondition,Pragma Post_Class,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-pre}@anchor{c7}
  @section Pragma Pre
  
  
*************** with an assertion level. See SPARK 2014
*** 6542,6548 ****
  11.4.2.
  
  @node Pragma Precondition,Pragma Predicate,Pragma Pre,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-precondition}@anchor{c7}
  @section Pragma Precondition
  
  
--- 6581,6587 ----
  11.4.2.
  
  @node Pragma Precondition,Pragma Predicate,Pragma Pre,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-precondition}@anchor{c8}
  @section Pragma Precondition
  
  
*************** with an assertion level. See SPARK 2014
*** 6605,6611 ****
  11.4.2.
  
  @node Pragma Predicate,Pragma Predicate_Failure,Pragma Precondition,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id33}@anchor{c8}@anchor{gnat_rm/implementation_defined_pragmas pragma-predicate}@anchor{c9}
  @section Pragma Predicate
  
  
--- 6644,6650 ----
  11.4.2.
  
  @node Pragma Predicate,Pragma Predicate_Failure,Pragma Precondition,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id33}@anchor{c9}@anchor{gnat_rm/implementation_defined_pragmas pragma-predicate}@anchor{ca}
  @section Pragma Predicate
  
  
*************** with an assertion level. See SPARK 2014
*** 6663,6669 ****
  11.4.2.
  
  @node Pragma Predicate_Failure,Pragma Preelaborable_Initialization,Pragma Predicate,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-predicate-failure}@anchor{ca}
  @section Pragma Predicate_Failure
  
  
--- 6702,6708 ----
  11.4.2.
  
  @node Pragma Predicate_Failure,Pragma Preelaborable_Initialization,Pragma Predicate,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-predicate-failure}@anchor{cb}
  @section Pragma Predicate_Failure
  
  
*************** the language-defined
*** 6680,6686 ****
  @code{Predicate_Failure} aspect, and shares its restrictions and semantics.
  
  @node Pragma Preelaborable_Initialization,Pragma Prefix_Exception_Messages,Pragma Predicate_Failure,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-preelaborable-initialization}@anchor{cb}
  @section Pragma Preelaborable_Initialization
  
  
--- 6719,6725 ----
  @code{Predicate_Failure} aspect, and shares its restrictions and semantics.
  
  @node Pragma Preelaborable_Initialization,Pragma Prefix_Exception_Messages,Pragma Predicate_Failure,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-preelaborable-initialization}@anchor{cc}
  @section Pragma Preelaborable_Initialization
  
  
*************** versions of Ada as an implementation-def
*** 6695,6701 ****
  See Ada 2012 Reference Manual for details.
  
  @node Pragma Prefix_Exception_Messages,Pragma Pre_Class,Pragma Preelaborable_Initialization,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-prefix-exception-messages}@anchor{cc}
  @section Pragma Prefix_Exception_Messages
  
  
--- 6734,6740 ----
  See Ada 2012 Reference Manual for details.
  
  @node Pragma Prefix_Exception_Messages,Pragma Pre_Class,Pragma Preelaborable_Initialization,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-prefix-exception-messages}@anchor{cd}
  @section Pragma Prefix_Exception_Messages
  
  
*************** prefixing in this case, you can always c
*** 6726,6732 ****
  @code{GNAT.Source_Info.Enclosing_Entity} and prepend the string manually.
  
  @node Pragma Pre_Class,Pragma Priority_Specific_Dispatching,Pragma Prefix_Exception_Messages,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-pre-class}@anchor{cd}
  @section Pragma Pre_Class
  
  
--- 6765,6771 ----
  @code{GNAT.Source_Info.Enclosing_Entity} and prepend the string manually.
  
  @node Pragma Pre_Class,Pragma Priority_Specific_Dispatching,Pragma Prefix_Exception_Messages,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-pre-class}@anchor{ce}
  @section Pragma Pre_Class
  
  
*************** with an assertion level. See SPARK 2014
*** 6765,6771 ****
  11.4.2.
  
  @node Pragma Priority_Specific_Dispatching,Pragma Profile,Pragma Pre_Class,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-priority-specific-dispatching}@anchor{ce}
  @section Pragma Priority_Specific_Dispatching
  
  
--- 6804,6810 ----
  11.4.2.
  
  @node Pragma Priority_Specific_Dispatching,Pragma Profile,Pragma Pre_Class,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-priority-specific-dispatching}@anchor{cf}
  @section Pragma Priority_Specific_Dispatching
  
  
*************** versions of Ada as an implementation-def
*** 6789,6795 ****
  See Ada 2012 Reference Manual for details.
  
  @node Pragma Profile,Pragma Profile_Warnings,Pragma Priority_Specific_Dispatching,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-profile}@anchor{cf}
  @section Pragma Profile
  
  
--- 6828,6834 ----
  See Ada 2012 Reference Manual for details.
  
  @node Pragma Profile,Pragma Profile_Warnings,Pragma Priority_Specific_Dispatching,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-profile}@anchor{d0}
  @section Pragma Profile
  
  
*************** conforming Ada constructs.  The profile
*** 7068,7074 ****
  @end itemize
  
  @node Pragma Profile_Warnings,Pragma Program_Exit,Pragma Profile,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-profile-warnings}@anchor{d0}
  @section Pragma Profile_Warnings
  
  
--- 7107,7113 ----
  @end itemize
  
  @node Pragma Profile_Warnings,Pragma Program_Exit,Pragma Profile,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-profile-warnings}@anchor{d1}
  @section Pragma Profile_Warnings
  
  
*************** violations of the profile generate warni
*** 7086,7092 ****
  of error messages.
  
  @node Pragma Program_Exit,Pragma Propagate_Exceptions,Pragma Profile_Warnings,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id34}@anchor{d1}@anchor{gnat_rm/implementation_defined_pragmas pragma-program-exit}@anchor{d2}
  @section Pragma Program_Exit
  
  
--- 7125,7131 ----
  of error messages.
  
  @node Pragma Program_Exit,Pragma Propagate_Exceptions,Pragma Profile_Warnings,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id34}@anchor{d2}@anchor{gnat_rm/implementation_defined_pragmas pragma-program-exit}@anchor{d3}
  @section Pragma Program_Exit
  
  
*************** For the semantics of this pragma, see th
*** 7100,7106 ****
  in the SPARK 2014 Reference Manual, section 6.1.10.
  
  @node Pragma Propagate_Exceptions,Pragma Provide_Shift_Operators,Pragma Program_Exit,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-propagate-exceptions}@anchor{d3}
  @section Pragma Propagate_Exceptions
  
  
--- 7139,7145 ----
  in the SPARK 2014 Reference Manual, section 6.1.10.
  
  @node Pragma Propagate_Exceptions,Pragma Provide_Shift_Operators,Pragma Program_Exit,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-propagate-exceptions}@anchor{d4}
  @section Pragma Propagate_Exceptions
  
  
*************** purposes. It used to be used in connecti
*** 7119,7125 ****
  a now-obsolete mechanism for implementation of exceptions.
  
  @node Pragma Provide_Shift_Operators,Pragma Psect_Object,Pragma Propagate_Exceptions,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-provide-shift-operators}@anchor{d4}
  @section Pragma Provide_Shift_Operators
  
  
--- 7158,7164 ----
  a now-obsolete mechanism for implementation of exceptions.
  
  @node Pragma Provide_Shift_Operators,Pragma Psect_Object,Pragma Propagate_Exceptions,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-provide-shift-operators}@anchor{d5}
  @section Pragma Provide_Shift_Operators
  
  
*************** including the function declarations for
*** 7139,7145 ****
  with the pragma Import (Intrinsic, …) statements.
  
  @node Pragma Psect_Object,Pragma Pure_Function,Pragma Provide_Shift_Operators,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-psect-object}@anchor{d5}
  @section Pragma Psect_Object
  
  
--- 7178,7184 ----
  with the pragma Import (Intrinsic, …) statements.
  
  @node Pragma Psect_Object,Pragma Pure_Function,Pragma Provide_Shift_Operators,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-psect-object}@anchor{d6}
  @section Pragma Psect_Object
  
  
*************** EXTERNAL_SYMBOL ::=
*** 7159,7165 ****
  This pragma is identical in effect to pragma @code{Common_Object}.
  
  @node Pragma Pure_Function,Pragma Rational,Pragma Psect_Object,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id35}@anchor{d6}@anchor{gnat_rm/implementation_defined_pragmas pragma-pure-function}@anchor{d7}
  @section Pragma Pure_Function
  
  
--- 7198,7204 ----
  This pragma is identical in effect to pragma @code{Common_Object}.
  
  @node Pragma Pure_Function,Pragma Rational,Pragma Psect_Object,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id35}@anchor{d7}@anchor{gnat_rm/implementation_defined_pragmas pragma-pure-function}@anchor{d8}
  @section Pragma Pure_Function
  
  
*************** unit is not a Pure unit in the categoriz
*** 7221,7227 ****
  thus marked is free to @code{with} non-pure units.
  
  @node Pragma Rational,Pragma Ravenscar,Pragma Pure_Function,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-rational}@anchor{d8}
  @section Pragma Rational
  
  
--- 7260,7266 ----
  thus marked is free to @code{with} non-pure units.
  
  @node Pragma Rational,Pragma Ravenscar,Pragma Pure_Function,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-rational}@anchor{d9}
  @section Pragma Rational
  
  
*************** pragma Profile (Rational);
*** 7239,7245 ****
  @end example
  
  @node Pragma Ravenscar,Pragma Refined_Depends,Pragma Rational,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-ravenscar}@anchor{d9}
  @section Pragma Ravenscar
  
  
--- 7278,7284 ----
  @end example
  
  @node Pragma Ravenscar,Pragma Refined_Depends,Pragma Rational,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-ravenscar}@anchor{da}
  @section Pragma Ravenscar
  
  
*************** pragma Profile (Ravenscar);
*** 7259,7265 ****
  which is the preferred method of setting the @code{Ravenscar} profile.
  
  @node Pragma Refined_Depends,Pragma Refined_Global,Pragma Ravenscar,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id36}@anchor{da}@anchor{gnat_rm/implementation_defined_pragmas pragma-refined-depends}@anchor{db}
  @section Pragma Refined_Depends
  
  
--- 7298,7304 ----
  which is the preferred method of setting the @code{Ravenscar} profile.
  
  @node Pragma Refined_Depends,Pragma Refined_Global,Pragma Ravenscar,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id36}@anchor{db}@anchor{gnat_rm/implementation_defined_pragmas pragma-refined-depends}@anchor{dc}
  @section Pragma Refined_Depends
  
  
*************** For the semantics of this pragma, see th
*** 7292,7298 ****
  the SPARK 2014 Reference Manual, section 6.1.5.
  
  @node Pragma Refined_Global,Pragma Refined_Post,Pragma Refined_Depends,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id37}@anchor{dc}@anchor{gnat_rm/implementation_defined_pragmas pragma-refined-global}@anchor{dd}
  @section Pragma Refined_Global
  
  
--- 7331,7337 ----
  the SPARK 2014 Reference Manual, section 6.1.5.
  
  @node Pragma Refined_Global,Pragma Refined_Post,Pragma Refined_Depends,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id37}@anchor{dd}@anchor{gnat_rm/implementation_defined_pragmas pragma-refined-global}@anchor{de}
  @section Pragma Refined_Global
  
  
*************** For the semantics of this pragma, see th
*** 7317,7323 ****
  the SPARK 2014 Reference Manual, section 6.1.4.
  
  @node Pragma Refined_Post,Pragma Refined_State,Pragma Refined_Global,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id38}@anchor{de}@anchor{gnat_rm/implementation_defined_pragmas pragma-refined-post}@anchor{df}
  @section Pragma Refined_Post
  
  
--- 7356,7362 ----
  the SPARK 2014 Reference Manual, section 6.1.4.
  
  @node Pragma Refined_Post,Pragma Refined_State,Pragma Refined_Global,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id38}@anchor{df}@anchor{gnat_rm/implementation_defined_pragmas pragma-refined-post}@anchor{e0}
  @section Pragma Refined_Post
  
  
*************** with an assertion level. See SPARK 2014
*** 7335,7341 ****
  11.4.2.
  
  @node Pragma Refined_State,Pragma Relative_Deadline,Pragma Refined_Post,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id39}@anchor{e0}@anchor{gnat_rm/implementation_defined_pragmas pragma-refined-state}@anchor{e1}
  @section Pragma Refined_State
  
  
--- 7374,7380 ----
  11.4.2.
  
  @node Pragma Refined_State,Pragma Relative_Deadline,Pragma Refined_Post,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id39}@anchor{e1}@anchor{gnat_rm/implementation_defined_pragmas pragma-refined-state}@anchor{e2}
  @section Pragma Refined_State
  
  
*************** For the semantics of this pragma, see th
*** 7361,7367 ****
  the SPARK 2014 Reference Manual, section 7.2.2.
  
  @node Pragma Relative_Deadline,Pragma Remote_Access_Type,Pragma Refined_State,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-relative-deadline}@anchor{e2}
  @section Pragma Relative_Deadline
  
  
--- 7400,7406 ----
  the SPARK 2014 Reference Manual, section 7.2.2.
  
  @node Pragma Relative_Deadline,Pragma Remote_Access_Type,Pragma Refined_State,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-relative-deadline}@anchor{e3}
  @section Pragma Relative_Deadline
  
  
*************** versions of Ada as an implementation-def
*** 7376,7382 ****
  See Ada 2012 Reference Manual for details.
  
  @node Pragma Remote_Access_Type,Pragma Rename_Pragma,Pragma Relative_Deadline,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id40}@anchor{e3}@anchor{gnat_rm/implementation_defined_pragmas pragma-remote-access-type}@anchor{e4}
  @section Pragma Remote_Access_Type
  
  
--- 7415,7421 ----
  See Ada 2012 Reference Manual for details.
  
  @node Pragma Remote_Access_Type,Pragma Rename_Pragma,Pragma Relative_Deadline,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id40}@anchor{e4}@anchor{gnat_rm/implementation_defined_pragmas pragma-remote-access-type}@anchor{e5}
  @section Pragma Remote_Access_Type
  
  
*************** pertaining to remote access to class-wid
*** 7402,7408 ****
  actual type must be a remote access to class-wide type.
  
  @node Pragma Rename_Pragma,Pragma Restricted_Run_Time,Pragma Remote_Access_Type,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-rename-pragma}@anchor{e5}
  @section Pragma Rename_Pragma
  
  
--- 7441,7447 ----
  actual type must be a remote access to class-wide type.
  
  @node Pragma Rename_Pragma,Pragma Restricted_Run_Time,Pragma Remote_Access_Type,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-rename-pragma}@anchor{e6}
  @section Pragma Rename_Pragma
  
  
*************** Pragma Inline_Only will not necessarily
*** 7441,7447 ****
  compiler; it’s up to you to make sure the semantics are close enough.
  
  @node Pragma Restricted_Run_Time,Pragma Restriction_Warnings,Pragma Rename_Pragma,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-restricted-run-time}@anchor{e6}
  @section Pragma Restricted_Run_Time
  
  
--- 7480,7486 ----
  compiler; it’s up to you to make sure the semantics are close enough.
  
  @node Pragma Restricted_Run_Time,Pragma Restriction_Warnings,Pragma Rename_Pragma,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-restricted-run-time}@anchor{e7}
  @section Pragma Restricted_Run_Time
  
  
*************** which is the preferred method of setting
*** 7462,7468 ****
  profile.
  
  @node Pragma Restriction_Warnings,Pragma Reviewable,Pragma Restricted_Run_Time,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-restriction-warnings}@anchor{e7}
  @section Pragma Restriction_Warnings
  
  
--- 7501,7507 ----
  profile.
  
  @node Pragma Restriction_Warnings,Pragma Reviewable,Pragma Restricted_Run_Time,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-restriction-warnings}@anchor{e8}
  @section Pragma Restriction_Warnings
  
  
*************** generating a warning, but any other use
*** 7500,7506 ****
  defined pragmas will cause a warning to be generated.
  
  @node Pragma Reviewable,Pragma Secondary_Stack_Size,Pragma Restriction_Warnings,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-reviewable}@anchor{e8}
  @section Pragma Reviewable
  
  
--- 7539,7545 ----
  defined pragmas will cause a warning to be generated.
  
  @node Pragma Reviewable,Pragma Secondary_Stack_Size,Pragma Restriction_Warnings,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-reviewable}@anchor{e9}
  @section Pragma Reviewable
  
  
*************** comprehensive messages identifying possi
*** 7604,7610 ****
  information.
  
  @node Pragma Secondary_Stack_Size,Pragma Share_Generic,Pragma Reviewable,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id41}@anchor{e9}@anchor{gnat_rm/implementation_defined_pragmas pragma-secondary-stack-size}@anchor{ea}
  @section Pragma Secondary_Stack_Size
  
  
--- 7643,7649 ----
  information.
  
  @node Pragma Secondary_Stack_Size,Pragma Share_Generic,Pragma Reviewable,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id41}@anchor{ea}@anchor{gnat_rm/implementation_defined_pragmas pragma-secondary-stack-size}@anchor{eb}
  @section Pragma Secondary_Stack_Size
  
  
*************** Note the pragma cannot appear when the r
*** 7640,7646 ****
  is in effect.
  
  @node Pragma Share_Generic,Pragma Shared,Pragma Secondary_Stack_Size,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-share-generic}@anchor{eb}
  @section Pragma Share_Generic
  
  
--- 7679,7685 ----
  is in effect.
  
  @node Pragma Share_Generic,Pragma Shared,Pragma Secondary_Stack_Size,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-share-generic}@anchor{ec}
  @section Pragma Share_Generic
  
  
*************** than to check that the given names are a
*** 7658,7664 ****
  generic instances.
  
  @node Pragma Shared,Pragma Short_Circuit_And_Or,Pragma Share_Generic,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id42}@anchor{ec}@anchor{gnat_rm/implementation_defined_pragmas pragma-shared}@anchor{ed}
  @section Pragma Shared
  
  
--- 7697,7703 ----
  generic instances.
  
  @node Pragma Shared,Pragma Short_Circuit_And_Or,Pragma Share_Generic,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id42}@anchor{ed}@anchor{gnat_rm/implementation_defined_pragmas pragma-shared}@anchor{ee}
  @section Pragma Shared
  
  
*************** This pragma is provided for compatibilit
*** 7666,7672 ****
  semantics are identical to pragma Atomic.
  
  @node Pragma Short_Circuit_And_Or,Pragma Short_Descriptors,Pragma Shared,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-short-circuit-and-or}@anchor{ee}
  @section Pragma Short_Circuit_And_Or
  
  
--- 7705,7711 ----
  semantics are identical to pragma Atomic.
  
  @node Pragma Short_Circuit_And_Or,Pragma Short_Descriptors,Pragma Shared,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-short-circuit-and-or}@anchor{ef}
  @section Pragma Short_Circuit_And_Or
  
  
*************** See also the pragma @code{Unevaluated_Us
*** 7705,7711 ****
  with @code{Short_Circuit_And_Or}.
  
  @node Pragma Short_Descriptors,Pragma Side_Effects,Pragma Short_Circuit_And_Or,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-short-descriptors}@anchor{ef}
  @section Pragma Short_Descriptors
  
  
--- 7744,7750 ----
  with @code{Short_Circuit_And_Or}.
  
  @node Pragma Short_Descriptors,Pragma Side_Effects,Pragma Short_Circuit_And_Or,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-short-descriptors}@anchor{f0}
  @section Pragma Short_Descriptors
  
  
*************** This pragma is provided for compatibilit
*** 7719,7725 ****
  is recognized but ignored by all current versions of GNAT.
  
  @node Pragma Side_Effects,Pragma Simple_Storage_Pool_Type,Pragma Short_Descriptors,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id43}@anchor{f0}@anchor{gnat_rm/implementation_defined_pragmas pragma-side-effects}@anchor{f1}
  @section Pragma Side_Effects
  
  
--- 7758,7764 ----
  is recognized but ignored by all current versions of GNAT.
  
  @node Pragma Side_Effects,Pragma Simple_Storage_Pool_Type,Pragma Short_Descriptors,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id43}@anchor{f1}@anchor{gnat_rm/implementation_defined_pragmas pragma-side-effects}@anchor{f2}
  @section Pragma Side_Effects
  
  
*************** For the semantics of this pragma, see th
*** 7733,7739 ****
  @code{Side_Effects} in the SPARK Reference Manual, section 6.1.12.
  
  @node Pragma Simple_Storage_Pool_Type,Pragma Source_File_Name,Pragma Side_Effects,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id44}@anchor{f2}@anchor{gnat_rm/implementation_defined_pragmas pragma-simple-storage-pool-type}@anchor{f3}
  @section Pragma Simple_Storage_Pool_Type
  
  
--- 7772,7778 ----
  @code{Side_Effects} in the SPARK Reference Manual, section 6.1.12.
  
  @node Pragma Simple_Storage_Pool_Type,Pragma Source_File_Name,Pragma Side_Effects,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id44}@anchor{f3}@anchor{gnat_rm/implementation_defined_pragmas pragma-simple-storage-pool-type}@anchor{f4}
  @section Pragma Simple_Storage_Pool_Type
  
  
*************** storage-management discipline).
*** 7787,7793 ****
  
  An object of a simple storage pool type can be associated with an access
  type by specifying the attribute
! @ref{f4,,Simple_Storage_Pool}. For example:
  
  @example
  My_Pool : My_Simple_Storage_Pool_Type;
--- 7826,7832 ----
  
  An object of a simple storage pool type can be associated with an access
  type by specifying the attribute
! @ref{f5,,Simple_Storage_Pool}. For example:
  
  @example
  My_Pool : My_Simple_Storage_Pool_Type;
*************** type Acc is access My_Data_Type;
*** 7797,7807 ****
  for Acc'Simple_Storage_Pool use My_Pool;
  @end example
  
! See attribute @ref{f4,,Simple_Storage_Pool}
  for further details.
  
  @node Pragma Source_File_Name,Pragma Source_File_Name_Project,Pragma Simple_Storage_Pool_Type,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id45}@anchor{f5}@anchor{gnat_rm/implementation_defined_pragmas pragma-source-file-name}@anchor{f6}
  @section Pragma Source_File_Name
  
  
--- 7836,7846 ----
  for Acc'Simple_Storage_Pool use My_Pool;
  @end example
  
! See attribute @ref{f5,,Simple_Storage_Pool}
  for further details.
  
  @node Pragma Source_File_Name,Pragma Source_File_Name_Project,Pragma Simple_Storage_Pool_Type,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id45}@anchor{f6}@anchor{gnat_rm/implementation_defined_pragmas pragma-source-file-name}@anchor{f7}
  @section Pragma Source_File_Name
  
  
*************** aware of these pragmas, and so other too
*** 7893,7912 ****
  be aware of the intended naming conventions. If you are using project files,
  file naming is controlled by Source_File_Name_Project pragmas, which are
  usually supplied automatically by the project manager. A pragma
! Source_File_Name cannot appear after a @ref{f7,,Pragma Source_File_Name_Project}.
  
  For more details on the use of the @code{Source_File_Name} pragma, see the
  sections on @cite{Using Other File Names} and @cite{Alternative File Naming Schemes}
  in the @cite{GNAT User’s Guide}.
  
  @node Pragma Source_File_Name_Project,Pragma Source_Reference,Pragma Source_File_Name,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id46}@anchor{f8}@anchor{gnat_rm/implementation_defined_pragmas pragma-source-file-name-project}@anchor{f7}
  @section Pragma Source_File_Name_Project
  
  
  This pragma has the same syntax and semantics as pragma Source_File_Name.
  It is only allowed as a stand-alone configuration pragma.
! It cannot appear after a @ref{f6,,Pragma Source_File_Name}, and
  most importantly, once pragma Source_File_Name_Project appears,
  no further Source_File_Name pragmas are allowed.
  
--- 7932,7951 ----
  be aware of the intended naming conventions. If you are using project files,
  file naming is controlled by Source_File_Name_Project pragmas, which are
  usually supplied automatically by the project manager. A pragma
! Source_File_Name cannot appear after a @ref{f8,,Pragma Source_File_Name_Project}.
  
  For more details on the use of the @code{Source_File_Name} pragma, see the
  sections on @cite{Using Other File Names} and @cite{Alternative File Naming Schemes}
  in the @cite{GNAT User’s Guide}.
  
  @node Pragma Source_File_Name_Project,Pragma Source_Reference,Pragma Source_File_Name,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id46}@anchor{f9}@anchor{gnat_rm/implementation_defined_pragmas pragma-source-file-name-project}@anchor{f8}
  @section Pragma Source_File_Name_Project
  
  
  This pragma has the same syntax and semantics as pragma Source_File_Name.
  It is only allowed as a stand-alone configuration pragma.
! It cannot appear after a @ref{f7,,Pragma Source_File_Name}, and
  most importantly, once pragma Source_File_Name_Project appears,
  no further Source_File_Name pragmas are allowed.
  
*************** Source_File_Name or Source_File_Name_Pro
*** 7918,7924 ****
  known to the project manager).
  
  @node Pragma Source_Reference,Pragma SPARK_Mode,Pragma Source_File_Name_Project,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-source-reference}@anchor{f9}
  @section Pragma Source_Reference
  
  
--- 7957,7963 ----
  known to the project manager).
  
  @node Pragma Source_Reference,Pragma SPARK_Mode,Pragma Source_File_Name_Project,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-source-reference}@anchor{fa}
  @section Pragma Source_Reference
  
  
*************** string expression other than a string li
*** 7942,7948 ****
  is needed for error messages issued by all phases of the compiler.
  
  @node Pragma SPARK_Mode,Pragma Static_Elaboration_Desired,Pragma Source_Reference,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id47}@anchor{fa}@anchor{gnat_rm/implementation_defined_pragmas pragma-spark-mode}@anchor{fb}
  @section Pragma SPARK_Mode
  
  
--- 7981,7987 ----
  is needed for error messages issued by all phases of the compiler.
  
  @node Pragma SPARK_Mode,Pragma Static_Elaboration_Desired,Pragma Source_Reference,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id47}@anchor{fb}@anchor{gnat_rm/implementation_defined_pragmas pragma-spark-mode}@anchor{fc}
  @section Pragma SPARK_Mode
  
  
*************** SPARK_Mode (@code{Off}), then that pragm
*** 8024,8030 ****
  the package body.
  
  @node Pragma Static_Elaboration_Desired,Pragma Stream_Convert,Pragma SPARK_Mode,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-static-elaboration-desired}@anchor{fc}
  @section Pragma Static_Elaboration_Desired
  
  
--- 8063,8069 ----
  the package body.
  
  @node Pragma Static_Elaboration_Desired,Pragma Stream_Convert,Pragma SPARK_Mode,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-static-elaboration-desired}@anchor{fd}
  @section Pragma Static_Elaboration_Desired
  
  
*************** construction of larger aggregates with s
*** 8048,8054 ****
  choice.)
  
  @node Pragma Stream_Convert,Pragma Style_Checks,Pragma Static_Elaboration_Desired,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-stream-convert}@anchor{fd}
  @section Pragma Stream_Convert
  
  
--- 8087,8093 ----
  choice.)
  
  @node Pragma Stream_Convert,Pragma Style_Checks,Pragma Static_Elaboration_Desired,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-stream-convert}@anchor{fe}
  @section Pragma Stream_Convert
  
  
*************** the pragma is silently ignored, and the
*** 8125,8131 ****
  attributes is used instead.
  
  @node Pragma Style_Checks,Pragma Subprogram_Variant,Pragma Stream_Convert,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-style-checks}@anchor{fe}
  @section Pragma Style_Checks
  
  
--- 8164,8170 ----
  attributes is used instead.
  
  @node Pragma Style_Checks,Pragma Subprogram_Variant,Pragma Stream_Convert,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-style-checks}@anchor{ff}
  @section Pragma Style_Checks
  
  
*************** Rf2 : Integer := ARG;      -- OK, no err
*** 8271,8277 ****
  @end example
  
  @node Pragma Subprogram_Variant,Pragma Subtitle,Pragma Style_Checks,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-subprogram-variant}@anchor{ff}
  @section Pragma Subprogram_Variant
  
  
--- 8310,8316 ----
  @end example
  
  @node Pragma Subprogram_Variant,Pragma Subtitle,Pragma Style_Checks,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-subprogram-variant}@anchor{100}
  @section Pragma Subprogram_Variant
  
  
*************** the implementation-defined @code{Subprog
*** 8303,8313 ****
  restrictions and semantics.
  
  This is an assertion kind pragma that can associate a set of its arguments
! with an assertion level. See SPARK 2014 Reference Manual, section
! 11.4.2.
  
  @node Pragma Subtitle,Pragma Suppress,Pragma Subprogram_Variant,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-subtitle}@anchor{100}
  @section Pragma Subtitle
  
  
--- 8342,8351 ----
  restrictions and semantics.
  
  This is an assertion kind pragma that can associate a set of its arguments
! with an assertion level. See SPARK 2014 Reference Manual, section 11.4.2.
  
  @node Pragma Subtitle,Pragma Suppress,Pragma Subprogram_Variant,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-subtitle}@anchor{101}
  @section Pragma Subtitle
  
  
*************** This pragma is recognized for compatibil
*** 8321,8327 ****
  but is ignored by GNAT.
  
  @node Pragma Suppress,Pragma Suppress_All,Pragma Subtitle,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-suppress}@anchor{101}
  @section Pragma Suppress
  
  
--- 8359,8365 ----
  but is ignored by GNAT.
  
  @node Pragma Suppress,Pragma Suppress_All,Pragma Subtitle,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-suppress}@anchor{102}
  @section Pragma Suppress
  
  
*************** Of course, run-time checks are omitted w
*** 8391,8397 ****
  that they will not fail, whether or not checks are suppressed.
  
  @node Pragma Suppress_All,Pragma Suppress_Debug_Info,Pragma Suppress,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-suppress-all}@anchor{102}
  @section Pragma Suppress_All
  
  
--- 8429,8435 ----
  that they will not fail, whether or not checks are suppressed.
  
  @node Pragma Suppress_All,Pragma Suppress_Debug_Info,Pragma Suppress,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-suppress-all}@anchor{103}
  @section Pragma Suppress_All
  
  
*************** The use of the standard Ada pragma @code
*** 8410,8416 ****
  as a normal configuration pragma is the preferred usage in GNAT.
  
  @node Pragma Suppress_Debug_Info,Pragma Suppress_Exception_Locations,Pragma Suppress_All,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id48}@anchor{103}@anchor{gnat_rm/implementation_defined_pragmas pragma-suppress-debug-info}@anchor{104}
  @section Pragma Suppress_Debug_Info
  
  
--- 8448,8454 ----
  as a normal configuration pragma is the preferred usage in GNAT.
  
  @node Pragma Suppress_Debug_Info,Pragma Suppress_Exception_Locations,Pragma Suppress_All,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id48}@anchor{104}@anchor{gnat_rm/implementation_defined_pragmas pragma-suppress-debug-info}@anchor{105}
  @section Pragma Suppress_Debug_Info
  
  
*************** for the specified entity. It is intended
*** 8425,8431 ****
  the debugger, and navigating around debugger problems.
  
  @node Pragma Suppress_Exception_Locations,Pragma Suppress_Initialization,Pragma Suppress_Debug_Info,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-suppress-exception-locations}@anchor{105}
  @section Pragma Suppress_Exception_Locations
  
  
--- 8463,8469 ----
  the debugger, and navigating around debugger problems.
  
  @node Pragma Suppress_Exception_Locations,Pragma Suppress_Initialization,Pragma Suppress_Debug_Info,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-suppress-exception-locations}@anchor{106}
  @section Pragma Suppress_Exception_Locations
  
  
*************** a partition, so it is fine to have some
*** 8448,8454 ****
  with this pragma and others compiled in normal mode without it.
  
  @node Pragma Suppress_Initialization,Pragma Task_Name,Pragma Suppress_Exception_Locations,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id49}@anchor{106}@anchor{gnat_rm/implementation_defined_pragmas pragma-suppress-initialization}@anchor{107}
  @section Pragma Suppress_Initialization
  
  
--- 8486,8492 ----
  with this pragma and others compiled in normal mode without it.
  
  @node Pragma Suppress_Initialization,Pragma Task_Name,Pragma Suppress_Exception_Locations,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id49}@anchor{107}@anchor{gnat_rm/implementation_defined_pragmas pragma-suppress-initialization}@anchor{108}
  @section Pragma Suppress_Initialization
  
  
*************** is suppressed, just as though its subtyp
*** 8493,8499 ****
  Suppress_Initialization, as described above.
  
  @node Pragma Task_Name,Pragma Task_Storage,Pragma Suppress_Initialization,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-task-name}@anchor{108}
  @section Pragma Task_Name
  
  
--- 8531,8537 ----
  Suppress_Initialization, as described above.
  
  @node Pragma Task_Name,Pragma Task_Storage,Pragma Suppress_Initialization,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-task-name}@anchor{109}
  @section Pragma Task_Name
  
  
*************** end;
*** 8549,8555 ****
  @end example
  
  @node Pragma Task_Storage,Pragma Test_Case,Pragma Task_Name,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-task-storage}@anchor{109}
  @section Pragma Task_Storage
  
  
--- 8587,8593 ----
  @end example
  
  @node Pragma Task_Storage,Pragma Test_Case,Pragma Task_Name,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-task-storage}@anchor{10a}
  @section Pragma Task_Storage
  
  
*************** created, depending on the target.  This
*** 8569,8575 ****
  type.
  
  @node Pragma Test_Case,Pragma Thread_Local_Storage,Pragma Task_Storage,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id50}@anchor{10a}@anchor{gnat_rm/implementation_defined_pragmas pragma-test-case}@anchor{10b}
  @section Pragma Test_Case
  
  
--- 8607,8613 ----
  type.
  
  @node Pragma Test_Case,Pragma Thread_Local_Storage,Pragma Task_Storage,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id50}@anchor{10b}@anchor{gnat_rm/implementation_defined_pragmas pragma-test-case}@anchor{10c}
  @section Pragma Test_Case
  
  
*************** postcondition. Mode @code{Robustness} in
*** 8625,8631 ****
  postcondition of the subprogram should be ignored for this test case.
  
  @node Pragma Thread_Local_Storage,Pragma Time_Slice,Pragma Test_Case,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id51}@anchor{10c}@anchor{gnat_rm/implementation_defined_pragmas pragma-thread-local-storage}@anchor{10d}
  @section Pragma Thread_Local_Storage
  
  
--- 8663,8669 ----
  postcondition of the subprogram should be ignored for this test case.
  
  @node Pragma Thread_Local_Storage,Pragma Time_Slice,Pragma Test_Case,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id51}@anchor{10d}@anchor{gnat_rm/implementation_defined_pragmas pragma-thread-local-storage}@anchor{10e}
  @section Pragma Thread_Local_Storage
  
  
*************** If this pragma is used on a system where
*** 8663,8669 ****
  then an error message will be generated and the program will be rejected.
  
  @node Pragma Time_Slice,Pragma Title,Pragma Thread_Local_Storage,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-time-slice}@anchor{10e}
  @section Pragma Time_Slice
  
  
--- 8701,8707 ----
  then an error message will be generated and the program will be rejected.
  
  @node Pragma Time_Slice,Pragma Title,Pragma Thread_Local_Storage,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-time-slice}@anchor{10f}
  @section Pragma Time_Slice
  
  
*************** It is ignored if it is used in a system
*** 8679,8685 ****
  or if it appears in other than the main program unit.
  
  @node Pragma Title,Pragma Type_Invariant,Pragma Time_Slice,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-title}@anchor{10f}
  @section Pragma Title
  
  
--- 8717,8723 ----
  or if it appears in other than the main program unit.
  
  @node Pragma Title,Pragma Type_Invariant,Pragma Time_Slice,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-title}@anchor{110}
  @section Pragma Title
  
  
*************** notation is used, and named and position
*** 8704,8710 ****
  following the normal rules for procedure calls in Ada.
  
  @node Pragma Type_Invariant,Pragma Type_Invariant_Class,Pragma Title,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-type-invariant}@anchor{110}
  @section Pragma Type_Invariant
  
  
--- 8742,8748 ----
  following the normal rules for procedure calls in Ada.
  
  @node Pragma Type_Invariant,Pragma Type_Invariant_Class,Pragma Title,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-type-invariant}@anchor{111}
  @section Pragma Type_Invariant
  
  
*************** with an assertion level. See SPARK 2014
*** 8729,8735 ****
  11.4.2.
  
  @node Pragma Type_Invariant_Class,Pragma Unchecked_Union,Pragma Type_Invariant,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id52}@anchor{111}@anchor{gnat_rm/implementation_defined_pragmas pragma-type-invariant-class}@anchor{112}
  @section Pragma Type_Invariant_Class
  
  
--- 8767,8773 ----
  11.4.2.
  
  @node Pragma Type_Invariant_Class,Pragma Unchecked_Union,Pragma Type_Invariant,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id52}@anchor{112}@anchor{gnat_rm/implementation_defined_pragmas pragma-type-invariant-class}@anchor{113}
  @section Pragma Type_Invariant_Class
  
  
*************** with an assertion level. See SPARK 2014
*** 8760,8766 ****
  11.4.2.
  
  @node Pragma Unchecked_Union,Pragma Unevaluated_Use_Of_Old,Pragma Type_Invariant_Class,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-unchecked-union}@anchor{113}
  @section Pragma Unchecked_Union
  
  
--- 8798,8804 ----
  11.4.2.
  
  @node Pragma Unchecked_Union,Pragma Unevaluated_Use_Of_Old,Pragma Type_Invariant_Class,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-unchecked-union}@anchor{114}
  @section Pragma Unchecked_Union
  
  
*************** version in all language modes (Ada 83, A
*** 8780,8786 ****
  details, consult the Ada 2012 Reference Manual, section B.3.3.
  
  @node Pragma Unevaluated_Use_Of_Old,Pragma User_Aspect_Definition,Pragma Unchecked_Union,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-unevaluated-use-of-old}@anchor{114}
  @section Pragma Unevaluated_Use_Of_Old
  
  
--- 8818,8824 ----
  details, consult the Ada 2012 Reference Manual, section B.3.3.
  
  @node Pragma Unevaluated_Use_Of_Old,Pragma User_Aspect_Definition,Pragma Unchecked_Union,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-unevaluated-use-of-old}@anchor{115}
  @section Pragma Unevaluated_Use_Of_Old
  
  
*************** uses up to the end of the corresponding
*** 8835,8841 ****
  sequence of package declarations.
  
  @node Pragma User_Aspect_Definition,Pragma Unimplemented_Unit,Pragma Unevaluated_Use_Of_Old,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-user-aspect-definition}@anchor{115}
  @section Pragma User_Aspect_Definition
  
  
--- 8873,8879 ----
  sequence of package declarations.
  
  @node Pragma User_Aspect_Definition,Pragma Unimplemented_Unit,Pragma Unevaluated_Use_Of_Old,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-user-aspect-definition}@anchor{116}
  @section Pragma User_Aspect_Definition
  
  
*************** pragma. If multiple definitions are visi
*** 8867,8873 ****
  then the definitions must agree. A predefined aspect cannot be redefined.
  
  @node Pragma Unimplemented_Unit,Pragma Universal_Aliasing,Pragma User_Aspect_Definition,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-unimplemented-unit}@anchor{116}
  @section Pragma Unimplemented_Unit
  
  
--- 8905,8911 ----
  then the definitions must agree. A predefined aspect cannot be redefined.
  
  @node Pragma Unimplemented_Unit,Pragma Universal_Aliasing,Pragma User_Aspect_Definition,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-unimplemented-unit}@anchor{117}
  @section Pragma Unimplemented_Unit
  
  
*************** The abort only happens if code is being
*** 8887,8893 ****
  specs of unimplemented packages in syntax or semantic checking mode.
  
  @node Pragma Universal_Aliasing,Pragma Unmodified,Pragma Unimplemented_Unit,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id53}@anchor{117}@anchor{gnat_rm/implementation_defined_pragmas pragma-universal-aliasing}@anchor{118}
  @section Pragma Universal_Aliasing
  
  
--- 8925,8931 ----
  specs of unimplemented packages in syntax or semantic checking mode.
  
  @node Pragma Universal_Aliasing,Pragma Unmodified,Pragma Unimplemented_Unit,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id53}@anchor{118}@anchor{gnat_rm/implementation_defined_pragmas pragma-universal-aliasing}@anchor{119}
  @section Pragma Universal_Aliasing
  
  
*************** they need to be suppressed, see the sect
*** 8905,8911 ****
  @code{Optimization and Strict Aliasing} in the @cite{GNAT User’s Guide}.
  
  @node Pragma Unmodified,Pragma Unreferenced,Pragma Universal_Aliasing,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id54}@anchor{119}@anchor{gnat_rm/implementation_defined_pragmas pragma-unmodified}@anchor{11a}
  @section Pragma Unmodified
  
  
--- 8943,8949 ----
  @code{Optimization and Strict Aliasing} in the @cite{GNAT User’s Guide}.
  
  @node Pragma Unmodified,Pragma Unreferenced,Pragma Universal_Aliasing,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id54}@anchor{11a}@anchor{gnat_rm/implementation_defined_pragmas pragma-unmodified}@anchor{11b}
  @section Pragma Unmodified
  
  
*************** Thus it is never necessary to use @code{
*** 8939,8945 ****
  variables, though it is harmless to do so.
  
  @node Pragma Unreferenced,Pragma Unreferenced_Objects,Pragma Unmodified,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id55}@anchor{11b}@anchor{gnat_rm/implementation_defined_pragmas pragma-unreferenced}@anchor{11c}
  @section Pragma Unreferenced
  
  
--- 8977,8983 ----
  variables, though it is harmless to do so.
  
  @node Pragma Unreferenced,Pragma Unreferenced_Objects,Pragma Unmodified,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id55}@anchor{11c}@anchor{gnat_rm/implementation_defined_pragmas pragma-unreferenced}@anchor{11d}
  @section Pragma Unreferenced
  
  
*************** Note that if a warning is desired for al
*** 8985,8991 ****
  regardless of whether they occur in the same unit as the subprogram
  declaration, then this pragma should not be used (calls from another
  unit would not be flagged); pragma Obsolescent can be used instead
! for this purpose, see @ref{b8,,Pragma Obsolescent}.
  
  The second form of pragma @code{Unreferenced} is used within a context
  clause. In this case the arguments must be unit names of units previously
--- 9023,9029 ----
  regardless of whether they occur in the same unit as the subprogram
  declaration, then this pragma should not be used (calls from another
  unit would not be flagged); pragma Obsolescent can be used instead
! for this purpose, see @ref{b9,,Pragma Obsolescent}.
  
  The second form of pragma @code{Unreferenced} is used within a context
  clause. In this case the arguments must be unit names of units previously
*************** Thus it is never necessary to use @code{
*** 9001,9007 ****
  variables, though it is harmless to do so.
  
  @node Pragma Unreferenced_Objects,Pragma Unreserve_All_Interrupts,Pragma Unreferenced,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id56}@anchor{11d}@anchor{gnat_rm/implementation_defined_pragmas pragma-unreferenced-objects}@anchor{11e}
  @section Pragma Unreferenced_Objects
  
  
--- 9039,9045 ----
  variables, though it is harmless to do so.
  
  @node Pragma Unreferenced_Objects,Pragma Unreserve_All_Interrupts,Pragma Unreferenced,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id56}@anchor{11e}@anchor{gnat_rm/implementation_defined_pragmas pragma-unreferenced-objects}@anchor{11f}
  @section Pragma Unreferenced_Objects
  
  
*************** compiler will automatically suppress unw
*** 9026,9032 ****
  not being referenced.
  
  @node Pragma Unreserve_All_Interrupts,Pragma Unsuppress,Pragma Unreferenced_Objects,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-unreserve-all-interrupts}@anchor{11f}
  @section Pragma Unreserve_All_Interrupts
  
  
--- 9064,9070 ----
  not being referenced.
  
  @node Pragma Unreserve_All_Interrupts,Pragma Unsuppress,Pragma Unreferenced_Objects,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-unreserve-all-interrupts}@anchor{120}
  @section Pragma Unreserve_All_Interrupts
  
  
*************** handled, see pragma @code{Interrupt_Stat
*** 9062,9068 ****
  of the @code{Unreserve_All_Interrupts} pragma.
  
  @node Pragma Unsuppress,Pragma Unused,Pragma Unreserve_All_Interrupts,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-unsuppress}@anchor{120}
  @section Pragma Unsuppress
  
  
--- 9100,9106 ----
  of the @code{Unreserve_All_Interrupts} pragma.
  
  @node Pragma Unsuppress,Pragma Unused,Pragma Unreserve_All_Interrupts,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-unsuppress}@anchor{121}
  @section Pragma Unsuppress
  
  
*************** number of implementation-defined check n
*** 9098,9104 ****
  @code{Suppress} for full details.
  
  @node Pragma Unused,Pragma Use_VADS_Size,Pragma Unsuppress,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id57}@anchor{121}@anchor{gnat_rm/implementation_defined_pragmas pragma-unused}@anchor{122}
  @section Pragma Unused
  
  
--- 9136,9142 ----
  @code{Suppress} for full details.
  
  @node Pragma Unused,Pragma Use_VADS_Size,Pragma Unsuppress,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id57}@anchor{122}@anchor{gnat_rm/implementation_defined_pragmas pragma-unused}@anchor{123}
  @section Pragma Unused
  
  
*************** Thus it is never necessary to use @code{
*** 9132,9138 ****
  variables, though it is harmless to do so.
  
  @node Pragma Use_VADS_Size,Pragma Validity_Checks,Pragma Unused,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-use-vads-size}@anchor{123}
  @section Pragma Use_VADS_Size
  
  
--- 9170,9176 ----
  variables, though it is harmless to do so.
  
  @node Pragma Use_VADS_Size,Pragma Validity_Checks,Pragma Unused,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-use-vads-size}@anchor{124}
  @section Pragma Use_VADS_Size
  
  
*************** as implemented in the VADS compiler.  Se
*** 9156,9162 ****
  attribute for further details.
  
  @node Pragma Validity_Checks,Pragma Volatile,Pragma Use_VADS_Size,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-validity-checks}@anchor{124}
  @section Pragma Validity_Checks
  
  
--- 9194,9200 ----
  attribute for further details.
  
  @node Pragma Validity_Checks,Pragma Volatile,Pragma Use_VADS_Size,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-validity-checks}@anchor{125}
  @section Pragma Validity_Checks
  
  
*************** A := C;                       -- C will
*** 9212,9218 ****
  @end example
  
  @node Pragma Volatile,Pragma Volatile_Full_Access,Pragma Validity_Checks,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id58}@anchor{125}@anchor{gnat_rm/implementation_defined_pragmas pragma-volatile}@anchor{126}
  @section Pragma Volatile
  
  
--- 9250,9256 ----
  @end example
  
  @node Pragma Volatile,Pragma Volatile_Full_Access,Pragma Validity_Checks,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id58}@anchor{126}@anchor{gnat_rm/implementation_defined_pragmas pragma-volatile}@anchor{127}
  @section Pragma Volatile
  
  
*************** implementation of pragma Volatile is upw
*** 9230,9236 ****
  implementation in DEC Ada 83.
  
  @node Pragma Volatile_Full_Access,Pragma Volatile_Function,Pragma Volatile,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id59}@anchor{127}@anchor{gnat_rm/implementation_defined_pragmas pragma-volatile-full-access}@anchor{128}
  @section Pragma Volatile_Full_Access
  
  
--- 9268,9274 ----
  implementation in DEC Ada 83.
  
  @node Pragma Volatile_Full_Access,Pragma Volatile_Function,Pragma Volatile,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id59}@anchor{128}@anchor{gnat_rm/implementation_defined_pragmas pragma-volatile-full-access}@anchor{129}
  @section Pragma Volatile_Full_Access
  
  
*************** is not to the whole object; the compiler
*** 9256,9262 ****
  access only part of the object in this case.
  
  @node Pragma Volatile_Function,Pragma Warning_As_Error,Pragma Volatile_Full_Access,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id60}@anchor{129}@anchor{gnat_rm/implementation_defined_pragmas pragma-volatile-function}@anchor{12a}
  @section Pragma Volatile_Function
  
  
--- 9294,9300 ----
  access only part of the object in this case.
  
  @node Pragma Volatile_Function,Pragma Warning_As_Error,Pragma Volatile_Full_Access,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id60}@anchor{12a}@anchor{gnat_rm/implementation_defined_pragmas pragma-volatile-function}@anchor{12b}
  @section Pragma Volatile_Function
  
  
*************** For the semantics of this pragma, see th
*** 9270,9276 ****
  in the SPARK 2014 Reference Manual, section 7.1.2.
  
  @node Pragma Warning_As_Error,Pragma Warnings,Pragma Volatile_Function,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-warning-as-error}@anchor{12b}
  @section Pragma Warning_As_Error
  
  
--- 9308,9314 ----
  in the SPARK 2014 Reference Manual, section 7.1.2.
  
  @node Pragma Warning_As_Error,Pragma Warnings,Pragma Volatile_Function,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-warning-as-error}@anchor{12c}
  @section Pragma Warning_As_Error
  
  
*************** you can use multiple pragma Warning_As_E
*** 9310,9316 ****
  
  The above use of patterns to match the message applies only to warning
  messages generated by the front end. This pragma can also be applied to
! warnings provided by the back end and mentioned in @ref{12c,,Pragma Warnings}.
  By using a single full `-Wxxx' switch in the pragma, such warnings
  can also be treated as errors.
  
--- 9348,9354 ----
  
  The above use of patterns to match the message applies only to warning
  messages generated by the front end. This pragma can also be applied to
! warnings provided by the back end and mentioned in @ref{12d,,Pragma Warnings}.
  By using a single full `-Wxxx' switch in the pragma, such warnings
  can also be treated as errors.
  
*************** the tag is changed from “warning:” t
*** 9360,9366 ****
  “[warning-as-error]” is appended to the end of the message.
  
  @node Pragma Warnings,Pragma Weak_External,Pragma Warning_As_Error,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id61}@anchor{12d}@anchor{gnat_rm/implementation_defined_pragmas pragma-warnings}@anchor{12c}
  @section Pragma Warnings
  
  
--- 9398,9404 ----
  “[warning-as-error]” is appended to the end of the message.
  
  @node Pragma Warnings,Pragma Weak_External,Pragma Warning_As_Error,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id61}@anchor{12e}@anchor{gnat_rm/implementation_defined_pragmas pragma-warnings}@anchor{12d}
  @section Pragma Warnings
  
  
*************** selectively for each tool, and as a cons
*** 9516,9522 ****
  Warnings with switch @code{-gnatw.w}.
  
  @node Pragma Weak_External,Pragma Wide_Character_Encoding,Pragma Warnings,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-weak-external}@anchor{12e}
  @section Pragma Weak_External
  
  
--- 9554,9560 ----
  Warnings with switch @code{-gnatw.w}.
  
  @node Pragma Weak_External,Pragma Wide_Character_Encoding,Pragma Warnings,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-weak-external}@anchor{12f}
  @section Pragma Weak_External
  
  
*************** end External_Module;
*** 9567,9573 ****
  @end example
  
  @node Pragma Wide_Character_Encoding,,Pragma Weak_External,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-wide-character-encoding}@anchor{12f}
  @section Pragma Wide_Character_Encoding
  
  
--- 9605,9611 ----
  @end example
  
  @node Pragma Wide_Character_Encoding,,Pragma Weak_External,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-wide-character-encoding}@anchor{130}
  @section Pragma Wide_Character_Encoding
  
  
*************** encoding within that file, and does not
*** 9598,9604 ****
  or subunits.
  
  @node Implementation Defined Aspects,Implementation Defined Attributes,Implementation Defined Pragmas,Top
! @anchor{gnat_rm/implementation_defined_aspects doc}@anchor{130}@anchor{gnat_rm/implementation_defined_aspects id1}@anchor{131}@anchor{gnat_rm/implementation_defined_aspects implementation-defined-aspects}@anchor{132}
  @chapter Implementation Defined Aspects
  
  
--- 9636,9642 ----
  or subunits.
  
  @node Implementation Defined Aspects,Implementation Defined Attributes,Implementation Defined Pragmas,Top
! @anchor{gnat_rm/implementation_defined_aspects doc}@anchor{131}@anchor{gnat_rm/implementation_defined_aspects id1}@anchor{132}@anchor{gnat_rm/implementation_defined_aspects implementation-defined-aspects}@anchor{133}
  @chapter Implementation Defined Aspects
  
  
*************** or attribute definition clause.
*** 9685,9690 ****
--- 9723,9729 ----
  * Aspect Local_Restrictions:: 
  * Aspect Lock_Free:: 
  * Aspect Max_Queue_Length:: 
+ * Aspect Modifies:: 
  * Aspect No_Caching:: 
  * Aspect No_Elaboration_Code_All:: 
  * Aspect No_Inline:: 
*************** or attribute definition clause.
*** 9730,9736 ****
  @end menu
  
  @node Aspect Abstract_State,Aspect Always_Terminates,,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-abstract-state}@anchor{133}
  @section Aspect Abstract_State
  
  
--- 9769,9775 ----
  @end menu
  
  @node Aspect Abstract_State,Aspect Always_Terminates,,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-abstract-state}@anchor{134}
  @section Aspect Abstract_State
  
  
*************** or attribute definition clause.
*** 9739,9745 ****
  This aspect is equivalent to @ref{1f,,pragma Abstract_State}.
  
  @node Aspect Always_Terminates,Aspect Annotate,Aspect Abstract_State,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-always-terminates}@anchor{134}
  @section Aspect Always_Terminates
  
  
--- 9778,9784 ----
  This aspect is equivalent to @ref{1f,,pragma Abstract_State}.
  
  @node Aspect Always_Terminates,Aspect Annotate,Aspect Abstract_State,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-always-terminates}@anchor{135}
  @section Aspect Always_Terminates
  
  
*************** This aspect is equivalent to @ref{1f,,pr
*** 9748,9754 ****
  This boolean aspect is equivalent to @ref{2a,,pragma Always_Terminates}.
  
  @node Aspect Annotate,Aspect Async_Readers,Aspect Always_Terminates,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-annotate}@anchor{135}
  @section Aspect Annotate
  
  
--- 9787,9793 ----
  This boolean aspect is equivalent to @ref{2a,,pragma Always_Terminates}.
  
  @node Aspect Annotate,Aspect Async_Readers,Aspect Always_Terminates,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-annotate}@anchor{136}
  @section Aspect Annotate
  
  
*************** Equivalent to @code{pragma Annotate (ID,
*** 9775,9781 ****
  @end table
  
  @node Aspect Async_Readers,Aspect Async_Writers,Aspect Annotate,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-async-readers}@anchor{136}
  @section Aspect Async_Readers
  
  
--- 9814,9820 ----
  @end table
  
  @node Aspect Async_Readers,Aspect Async_Writers,Aspect Annotate,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-async-readers}@anchor{137}
  @section Aspect Async_Readers
  
  
*************** Equivalent to @code{pragma Annotate (ID,
*** 9784,9790 ****
  This boolean aspect is equivalent to @ref{34,,pragma Async_Readers}.
  
  @node Aspect Async_Writers,Aspect Constant_After_Elaboration,Aspect Async_Readers,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-async-writers}@anchor{137}
  @section Aspect Async_Writers
  
  
--- 9823,9829 ----
  This boolean aspect is equivalent to @ref{34,,pragma Async_Readers}.
  
  @node Aspect Async_Writers,Aspect Constant_After_Elaboration,Aspect Async_Readers,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-async-writers}@anchor{138}
  @section Aspect Async_Writers
  
  
*************** This boolean aspect is equivalent to @re
*** 9793,9799 ****
  This boolean aspect is equivalent to @ref{36,,pragma Async_Writers}.
  
  @node Aspect Constant_After_Elaboration,Aspect Contract_Cases,Aspect Async_Writers,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-constant-after-elaboration}@anchor{138}
  @section Aspect Constant_After_Elaboration
  
  
--- 9832,9838 ----
  This boolean aspect is equivalent to @ref{36,,pragma Async_Writers}.
  
  @node Aspect Constant_After_Elaboration,Aspect Contract_Cases,Aspect Async_Writers,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-constant-after-elaboration}@anchor{139}
  @section Aspect Constant_After_Elaboration
  
  
*************** This boolean aspect is equivalent to @re
*** 9802,9808 ****
  This aspect is equivalent to @ref{46,,pragma Constant_After_Elaboration}.
  
  @node Aspect Contract_Cases,Aspect Depends,Aspect Constant_After_Elaboration,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-contract-cases}@anchor{139}
  @section Aspect Contract_Cases
  
  
--- 9841,9847 ----
  This aspect is equivalent to @ref{46,,pragma Constant_After_Elaboration}.
  
  @node Aspect Contract_Cases,Aspect Depends,Aspect Constant_After_Elaboration,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-contract-cases}@anchor{13a}
  @section Aspect Contract_Cases
  
  
*************** of clauses being enclosed in parentheses
*** 9813,9819 ****
  aggregate.
  
  @node Aspect Depends,Aspect Default_Initial_Condition,Aspect Contract_Cases,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-depends}@anchor{13a}
  @section Aspect Depends
  
  
--- 9852,9858 ----
  aggregate.
  
  @node Aspect Depends,Aspect Default_Initial_Condition,Aspect Contract_Cases,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-depends}@anchor{13b}
  @section Aspect Depends
  
  
*************** aggregate.
*** 9822,9828 ****
  This aspect is equivalent to @ref{58,,pragma Depends}.
  
  @node Aspect Default_Initial_Condition,Aspect Dimension,Aspect Depends,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-default-initial-condition}@anchor{13b}
  @section Aspect Default_Initial_Condition
  
  
--- 9861,9867 ----
  This aspect is equivalent to @ref{58,,pragma Depends}.
  
  @node Aspect Default_Initial_Condition,Aspect Dimension,Aspect Depends,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-default-initial-condition}@anchor{13c}
  @section Aspect Default_Initial_Condition
  
  
*************** This aspect is equivalent to @ref{58,,pr
*** 9831,9837 ****
  This aspect is equivalent to @ref{54,,pragma Default_Initial_Condition}.
  
  @node Aspect Dimension,Aspect Dimension_System,Aspect Default_Initial_Condition,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-dimension}@anchor{13c}
  @section Aspect Dimension
  
  
--- 9870,9876 ----
  This aspect is equivalent to @ref{54,,pragma Default_Initial_Condition}.
  
  @node Aspect Dimension,Aspect Dimension_System,Aspect Default_Initial_Condition,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-dimension}@anchor{13d}
  @section Aspect Dimension
  
  
*************** Note that when the dimensioned type is a
*** 9867,9873 ****
  dimension value must be an integer literal.
  
  @node Aspect Dimension_System,Aspect Disable_Controlled,Aspect Dimension,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-dimension-system}@anchor{13d}
  @section Aspect Dimension_System
  
  
--- 9906,9912 ----
  dimension value must be an integer literal.
  
  @node Aspect Dimension_System,Aspect Disable_Controlled,Aspect Dimension,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-dimension-system}@anchor{13e}
  @section Aspect Dimension_System
  
  
*************** See section ‘Performing Dimensionality
*** 9927,9933 ****
  Guide for detailed examples of use of the dimension system.
  
  @node Aspect Disable_Controlled,Aspect Effective_Reads,Aspect Dimension_System,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-disable-controlled}@anchor{13e}
  @section Aspect Disable_Controlled
  
  
--- 9966,9972 ----
  Guide for detailed examples of use of the dimension system.
  
  @node Aspect Disable_Controlled,Aspect Effective_Reads,Aspect Dimension_System,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-disable-controlled}@anchor{13f}
  @section Aspect Disable_Controlled
  
  
*************** where for example you might want a recor
*** 9940,9946 ****
  whether some run-time check is enabled or suppressed.
  
  @node Aspect Effective_Reads,Aspect Effective_Writes,Aspect Disable_Controlled,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-effective-reads}@anchor{13f}
  @section Aspect Effective_Reads
  
  
--- 9979,9985 ----
  whether some run-time check is enabled or suppressed.
  
  @node Aspect Effective_Reads,Aspect Effective_Writes,Aspect Disable_Controlled,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-effective-reads}@anchor{140}
  @section Aspect Effective_Reads
  
  
*************** whether some run-time check is enabled o
*** 9949,9955 ****
  This aspect is equivalent to @ref{5d,,pragma Effective_Reads}.
  
  @node Aspect Effective_Writes,Aspect Exceptional_Cases,Aspect Effective_Reads,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-effective-writes}@anchor{140}
  @section Aspect Effective_Writes
  
  
--- 9988,9994 ----
  This aspect is equivalent to @ref{5d,,pragma Effective_Reads}.
  
  @node Aspect Effective_Writes,Aspect Exceptional_Cases,Aspect Effective_Reads,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-effective-writes}@anchor{141}
  @section Aspect Effective_Writes
  
  
*************** This aspect is equivalent to @ref{5d,,pr
*** 9958,9964 ****
  This aspect is equivalent to @ref{5f,,pragma Effective_Writes}.
  
  @node Aspect Exceptional_Cases,Aspect Exit_Cases,Aspect Effective_Writes,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-exceptional-cases}@anchor{141}
  @section Aspect Exceptional_Cases
  
  
--- 9997,10003 ----
  This aspect is equivalent to @ref{5f,,pragma Effective_Writes}.
  
  @node Aspect Exceptional_Cases,Aspect Exit_Cases,Aspect Effective_Writes,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-exceptional-cases}@anchor{142}
  @section Aspect Exceptional_Cases
  
  
*************** For the syntax and semantics of this asp
*** 9973,9979 ****
  Manual, section 6.1.9.
  
  @node Aspect Exit_Cases,Aspect Extended_Access,Aspect Exceptional_Cases,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-exit-cases}@anchor{142}
  @section Aspect Exit_Cases
  
  
--- 10012,10018 ----
  Manual, section 6.1.9.
  
  @node Aspect Exit_Cases,Aspect Extended_Access,Aspect Exceptional_Cases,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-exit-cases}@anchor{143}
  @section Aspect Exit_Cases
  
  
*************** For the syntax and semantics of this asp
*** 9988,9994 ****
  Manual, section 6.1.10.
  
  @node Aspect Extended_Access,Aspect Extensions_Visible,Aspect Exit_Cases,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-extended-access}@anchor{143}
  @section Aspect Extended_Access
  
  
--- 10027,10033 ----
  Manual, section 6.1.10.
  
  @node Aspect Extended_Access,Aspect Extensions_Visible,Aspect Exit_Cases,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-extended-access}@anchor{144}
  @section Aspect Extended_Access
  
  
*************** Sneaky_2 : Small_Ptr := Make (Str => Big
*** 10085,10091 ****
  for the same reason given above in the case of an explicit type conversion.
  
  @node Aspect Extensions_Visible,Aspect Favor_Top_Level,Aspect Extended_Access,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-extensions-visible}@anchor{144}
  @section Aspect Extensions_Visible
  
  
--- 10124,10130 ----
  for the same reason given above in the case of an explicit type conversion.
  
  @node Aspect Extensions_Visible,Aspect Favor_Top_Level,Aspect Extended_Access,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-extensions-visible}@anchor{145}
  @section Aspect Extensions_Visible
  
  
*************** for the same reason given above in the c
*** 10094,10100 ****
  This aspect is equivalent to @ref{6f,,pragma Extensions_Visible}.
  
  @node Aspect Favor_Top_Level,Aspect Ghost,Aspect Extensions_Visible,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-favor-top-level}@anchor{145}
  @section Aspect Favor_Top_Level
  
  
--- 10133,10139 ----
  This aspect is equivalent to @ref{6f,,pragma Extensions_Visible}.
  
  @node Aspect Favor_Top_Level,Aspect Ghost,Aspect Extensions_Visible,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-favor-top-level}@anchor{146}
  @section Aspect Favor_Top_Level
  
  
*************** This aspect is equivalent to @ref{6f,,pr
*** 10103,10109 ****
  This boolean aspect is equivalent to @ref{74,,pragma Favor_Top_Level}.
  
  @node Aspect Ghost,Aspect Ghost_Predicate,Aspect Favor_Top_Level,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-ghost}@anchor{146}
  @section Aspect Ghost
  
  
--- 10142,10148 ----
  This boolean aspect is equivalent to @ref{74,,pragma Favor_Top_Level}.
  
  @node Aspect Ghost,Aspect Ghost_Predicate,Aspect Favor_Top_Level,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-ghost}@anchor{147}
  @section Aspect Ghost
  
  
*************** This boolean aspect is equivalent to @re
*** 10112,10118 ****
  This aspect is equivalent to @ref{78,,pragma Ghost}.
  
  @node Aspect Ghost_Predicate,Aspect Global,Aspect Ghost,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-ghost-predicate}@anchor{147}
  @section Aspect Ghost_Predicate
  
  
--- 10151,10157 ----
  This aspect is equivalent to @ref{78,,pragma Ghost}.
  
  @node Aspect Ghost_Predicate,Aspect Global,Aspect Ghost,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-ghost-predicate}@anchor{148}
  @section Aspect Ghost_Predicate
  
  
*************** For the detailed semantics of this aspec
*** 10125,10131 ****
  in the SPARK Reference Manual, section 3.2.4.
  
  @node Aspect Global,Aspect Initial_Condition,Aspect Ghost_Predicate,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-global}@anchor{148}
  @section Aspect Global
  
  
--- 10164,10170 ----
  in the SPARK Reference Manual, section 3.2.4.
  
  @node Aspect Global,Aspect Initial_Condition,Aspect Ghost_Predicate,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-global}@anchor{149}
  @section Aspect Global
  
  
*************** in the SPARK Reference Manual, section 3
*** 10134,10140 ****
  This aspect is equivalent to @ref{7a,,pragma Global}.
  
  @node Aspect Initial_Condition,Aspect Initializes,Aspect Global,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-initial-condition}@anchor{149}
  @section Aspect Initial_Condition
  
  
--- 10173,10179 ----
  This aspect is equivalent to @ref{7a,,pragma Global}.
  
  @node Aspect Initial_Condition,Aspect Initializes,Aspect Global,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-initial-condition}@anchor{14a}
  @section Aspect Initial_Condition
  
  
*************** This aspect is equivalent to @ref{7a,,pr
*** 10143,10149 ****
  This aspect is equivalent to @ref{87,,pragma Initial_Condition}.
  
  @node Aspect Initializes,Aspect Inline_Always,Aspect Initial_Condition,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-initializes}@anchor{14a}
  @section Aspect Initializes
  
  
--- 10182,10188 ----
  This aspect is equivalent to @ref{87,,pragma Initial_Condition}.
  
  @node Aspect Initializes,Aspect Inline_Always,Aspect Initial_Condition,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-initializes}@anchor{14b}
  @section Aspect Initializes
  
  
*************** This aspect is equivalent to @ref{87,,pr
*** 10152,10158 ****
  This aspect is equivalent to @ref{8a,,pragma Initializes}.
  
  @node Aspect Inline_Always,Aspect Invariant,Aspect Initializes,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-inline-always}@anchor{14b}
  @section Aspect Inline_Always
  
  
--- 10191,10197 ----
  This aspect is equivalent to @ref{8a,,pragma Initializes}.
  
  @node Aspect Inline_Always,Aspect Invariant,Aspect Initializes,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-inline-always}@anchor{14c}
  @section Aspect Inline_Always
  
  
*************** This aspect is equivalent to @ref{8a,,pr
*** 10161,10167 ****
  This boolean aspect is equivalent to @ref{8c,,pragma Inline_Always}.
  
  @node Aspect Invariant,Aspect Invariant’Class,Aspect Inline_Always,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-invariant}@anchor{14c}
  @section Aspect Invariant
  
  
--- 10200,10206 ----
  This boolean aspect is equivalent to @ref{8c,,pragma Inline_Always}.
  
  @node Aspect Invariant,Aspect Invariant’Class,Aspect Inline_Always,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-invariant}@anchor{14d}
  @section Aspect Invariant
  
  
*************** synonym for the language defined aspect
*** 10172,10189 ****
  that it is separately controllable using pragma @code{Assertion_Policy}.
  
  @node Aspect Invariant’Class,Aspect Iterable,Aspect Invariant,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-invariant-class}@anchor{14d}
  @section Aspect Invariant’Class
  
  
  @geindex Invariant'Class
  
! This aspect is equivalent to @ref{112,,pragma Type_Invariant_Class}. It is a
  synonym for the language defined aspect @code{Type_Invariant'Class} except
  that it is separately controllable using pragma @code{Assertion_Policy}.
  
  @node Aspect Iterable,Aspect Linker_Section,Aspect Invariant’Class,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-iterable}@anchor{14e}
  @section Aspect Iterable
  
  
--- 10211,10228 ----
  that it is separately controllable using pragma @code{Assertion_Policy}.
  
  @node Aspect Invariant’Class,Aspect Iterable,Aspect Invariant,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-invariant-class}@anchor{14e}
  @section Aspect Invariant’Class
  
  
  @geindex Invariant'Class
  
! This aspect is equivalent to @ref{113,,pragma Type_Invariant_Class}. It is a
  synonym for the language defined aspect @code{Type_Invariant'Class} except
  that it is separately controllable using pragma @code{Assertion_Policy}.
  
  @node Aspect Iterable,Aspect Linker_Section,Aspect Invariant’Class,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-iterable}@anchor{14f}
  @section Aspect Iterable
  
  
*************** function Element_Constant_Access (Cont :
*** 10286,10292 ****
  This aspect is used in the GNAT-defined formal container packages.
  
  @node Aspect Linker_Section,Aspect Local_Restrictions,Aspect Iterable,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-linker-section}@anchor{14f}
  @section Aspect Linker_Section
  
  
--- 10325,10331 ----
  This aspect is used in the GNAT-defined formal container packages.
  
  @node Aspect Linker_Section,Aspect Local_Restrictions,Aspect Iterable,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-linker-section}@anchor{150}
  @section Aspect Linker_Section
  
  
*************** This aspect is used in the GNAT-defined
*** 10295,10301 ****
  This aspect is equivalent to @ref{9c,,pragma Linker_Section}.
  
  @node Aspect Local_Restrictions,Aspect Lock_Free,Aspect Linker_Section,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-local-restrictions}@anchor{150}
  @section Aspect Local_Restrictions
  
  
--- 10334,10340 ----
  This aspect is equivalent to @ref{9c,,pragma Linker_Section}.
  
  @node Aspect Local_Restrictions,Aspect Lock_Free,Aspect Linker_Section,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-local-restrictions}@anchor{151}
  @section Aspect Local_Restrictions
  
  
*************** case of a declaration that occurs within
*** 10349,10355 ****
  a Local_Restrictions specification).
  
  @node Aspect Lock_Free,Aspect Max_Queue_Length,Aspect Local_Restrictions,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-lock-free}@anchor{151}
  @section Aspect Lock_Free
  
  
--- 10388,10394 ----
  a Local_Restrictions specification).
  
  @node Aspect Lock_Free,Aspect Max_Queue_Length,Aspect Local_Restrictions,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-lock-free}@anchor{152}
  @section Aspect Lock_Free
  
  
*************** a Local_Restrictions specification).
*** 10357,10364 ****
  
  This boolean aspect is equivalent to @ref{9e,,pragma Lock_Free}.
  
! @node Aspect Max_Queue_Length,Aspect No_Caching,Aspect Lock_Free,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-max-queue-length}@anchor{152}
  @section Aspect Max_Queue_Length
  
  
--- 10396,10403 ----
  
  This boolean aspect is equivalent to @ref{9e,,pragma Lock_Free}.
  
! @node Aspect Max_Queue_Length,Aspect Modifies,Aspect Lock_Free,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-max-queue-length}@anchor{153}
  @section Aspect Max_Queue_Length
  
  
*************** This boolean aspect is equivalent to @re
*** 10366,10421 ****
  
  This aspect is equivalent to @ref{a6,,pragma Max_Queue_Length}.
  
! @node Aspect No_Caching,Aspect No_Elaboration_Code_All,Aspect Max_Queue_Length,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-no-caching}@anchor{153}
  @section Aspect No_Caching
  
  
  @geindex No_Caching
  
! This boolean aspect is equivalent to @ref{a9,,pragma No_Caching}.
  
  @node Aspect No_Elaboration_Code_All,Aspect No_Inline,Aspect No_Caching,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-no-elaboration-code-all}@anchor{154}
  @section Aspect No_Elaboration_Code_All
  
  
  @geindex No_Elaboration_Code_All
  
! This aspect is equivalent to @ref{ac,,pragma No_Elaboration_Code_All}
  for a program unit.
  
  @node Aspect No_Inline,Aspect No_Raise,Aspect No_Elaboration_Code_All,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-no-inline}@anchor{155}
  @section Aspect No_Inline
  
  
  @geindex No_Inline
  
! This boolean aspect is equivalent to @ref{af,,pragma No_Inline}.
  
  @node Aspect No_Raise,Aspect No_Tagged_Streams,Aspect No_Inline,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-no-raise}@anchor{156}
  @section Aspect No_Raise
  
  
  @geindex No_Raise
  
! This boolean aspect is equivalent to @ref{b1,,pragma No_Raise}.
  
  @node Aspect No_Tagged_Streams,Aspect No_Task_Parts,Aspect No_Raise,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-no-tagged-streams}@anchor{157}
  @section Aspect No_Tagged_Streams
  
  
  @geindex No_Tagged_Streams
  
! This aspect is equivalent to @ref{b5,,pragma No_Tagged_Streams} with an
  argument specifying a root tagged type (thus this aspect can only be
  applied to such a type).
  
  @node Aspect No_Task_Parts,Aspect Object_Size,Aspect No_Tagged_Streams,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-no-task-parts}@anchor{158}
  @section Aspect No_Task_Parts
  
  
--- 10405,10470 ----
  
  This aspect is equivalent to @ref{a6,,pragma Max_Queue_Length}.
  
! @node Aspect Modifies,Aspect No_Caching,Aspect Max_Queue_Length,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-modifies}@anchor{154}
! @section Aspect Modifies
! 
! 
! @geindex Modifies
! 
! For the syntax and semantics of this aspect, see the SPARK 2014 Reference
! Manual, section TBD.
! 
! @node Aspect No_Caching,Aspect No_Elaboration_Code_All,Aspect Modifies,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-no-caching}@anchor{155}
  @section Aspect No_Caching
  
  
  @geindex No_Caching
  
! This boolean aspect is equivalent to @ref{aa,,pragma No_Caching}.
  
  @node Aspect No_Elaboration_Code_All,Aspect No_Inline,Aspect No_Caching,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-no-elaboration-code-all}@anchor{156}
  @section Aspect No_Elaboration_Code_All
  
  
  @geindex No_Elaboration_Code_All
  
! This aspect is equivalent to @ref{ad,,pragma No_Elaboration_Code_All}
  for a program unit.
  
  @node Aspect No_Inline,Aspect No_Raise,Aspect No_Elaboration_Code_All,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-no-inline}@anchor{157}
  @section Aspect No_Inline
  
  
  @geindex No_Inline
  
! This boolean aspect is equivalent to @ref{b0,,pragma No_Inline}.
  
  @node Aspect No_Raise,Aspect No_Tagged_Streams,Aspect No_Inline,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-no-raise}@anchor{158}
  @section Aspect No_Raise
  
  
  @geindex No_Raise
  
! This boolean aspect is equivalent to @ref{b2,,pragma No_Raise}.
  
  @node Aspect No_Tagged_Streams,Aspect No_Task_Parts,Aspect No_Raise,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-no-tagged-streams}@anchor{159}
  @section Aspect No_Tagged_Streams
  
  
  @geindex No_Tagged_Streams
  
! This aspect is equivalent to @ref{b6,,pragma No_Tagged_Streams} with an
  argument specifying a root tagged type (thus this aspect can only be
  applied to such a type).
  
  @node Aspect No_Task_Parts,Aspect Object_Size,Aspect No_Tagged_Streams,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-no-task-parts}@anchor{15a}
  @section Aspect No_Task_Parts
  
  
*************** away certain tasking-related code that w
*** 10431,10475 ****
  for T’Class, because descendants of T might contain tasks.
  
  @node Aspect Object_Size,Aspect Obsolescent,Aspect No_Task_Parts,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-object-size}@anchor{159}
  @section Aspect Object_Size
  
  
  @geindex Object_Size
  
! This aspect is equivalent to @ref{15a,,attribute Object_Size}.
  
  @node Aspect Obsolescent,Aspect Part_Of,Aspect Object_Size,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-obsolescent}@anchor{15b}
  @section Aspect Obsolescent
  
  
  @geindex Obsolescent
  
! This aspect is equivalent to @ref{b8,,pragma Obsolescent}. Note that the
  evaluation of this aspect happens at the point of occurrence, it is not
  delayed until the freeze point.
  
  @node Aspect Part_Of,Aspect Persistent_BSS,Aspect Obsolescent,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-part-of}@anchor{15c}
  @section Aspect Part_Of
  
  
  @geindex Part_Of
  
! This aspect is equivalent to @ref{be,,pragma Part_Of}.
  
  @node Aspect Persistent_BSS,Aspect Potentially_Invalid,Aspect Part_Of,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-persistent-bss}@anchor{15d}
  @section Aspect Persistent_BSS
  
  
  @geindex Persistent_BSS
  
! This boolean aspect is equivalent to @ref{c2,,pragma Persistent_BSS}.
  
  @node Aspect Potentially_Invalid,Aspect Predicate,Aspect Persistent_BSS,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-potentially-invalid}@anchor{15e}
  @section Aspect Potentially_Invalid
  
  
--- 10480,10524 ----
  for T’Class, because descendants of T might contain tasks.
  
  @node Aspect Object_Size,Aspect Obsolescent,Aspect No_Task_Parts,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-object-size}@anchor{15b}
  @section Aspect Object_Size
  
  
  @geindex Object_Size
  
! This aspect is equivalent to @ref{15c,,attribute Object_Size}.
  
  @node Aspect Obsolescent,Aspect Part_Of,Aspect Object_Size,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-obsolescent}@anchor{15d}
  @section Aspect Obsolescent
  
  
  @geindex Obsolescent
  
! This aspect is equivalent to @ref{b9,,pragma Obsolescent}. Note that the
  evaluation of this aspect happens at the point of occurrence, it is not
  delayed until the freeze point.
  
  @node Aspect Part_Of,Aspect Persistent_BSS,Aspect Obsolescent,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-part-of}@anchor{15e}
  @section Aspect Part_Of
  
  
  @geindex Part_Of
  
! This aspect is equivalent to @ref{bf,,pragma Part_Of}.
  
  @node Aspect Persistent_BSS,Aspect Potentially_Invalid,Aspect Part_Of,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-persistent-bss}@anchor{15f}
  @section Aspect Persistent_BSS
  
  
  @geindex Persistent_BSS
  
! This boolean aspect is equivalent to @ref{c3,,pragma Persistent_BSS}.
  
  @node Aspect Potentially_Invalid,Aspect Predicate,Aspect Persistent_BSS,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-potentially-invalid}@anchor{160}
  @section Aspect Potentially_Invalid
  
  
*************** For the syntax and semantics of this asp
*** 10479,10491 ****
  Manual, section 13.9.1.
  
  @node Aspect Predicate,Aspect Program_Exit,Aspect Potentially_Invalid,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-predicate}@anchor{15f}
  @section Aspect Predicate
  
  
  @geindex Predicate
  
! This aspect is equivalent to @ref{c9,,pragma Predicate}. It is thus
  similar to the language defined aspects @code{Dynamic_Predicate}
  and @code{Static_Predicate} except that whether the resulting
  predicate is static or dynamic is controlled by the form of the
--- 10528,10540 ----
  Manual, section 13.9.1.
  
  @node Aspect Predicate,Aspect Program_Exit,Aspect Potentially_Invalid,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-predicate}@anchor{161}
  @section Aspect Predicate
  
  
  @geindex Predicate
  
! This aspect is equivalent to @ref{ca,,pragma Predicate}. It is thus
  similar to the language defined aspects @code{Dynamic_Predicate}
  and @code{Static_Predicate} except that whether the resulting
  predicate is static or dynamic is controlled by the form of the
*************** expression. It is also separately contro
*** 10493,10553 ****
  @code{Assertion_Policy}.
  
  @node Aspect Program_Exit,Aspect Pure_Function,Aspect Predicate,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-program-exit}@anchor{160}
  @section Aspect Program_Exit
  
  
  @geindex Program_Exit
  
! This boolean aspect is equivalent to @ref{d2,,pragma Program_Exit}.
  
  @node Aspect Pure_Function,Aspect Refined_Depends,Aspect Program_Exit,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-pure-function}@anchor{161}
  @section Aspect Pure_Function
  
  
  @geindex Pure_Function
  
! This boolean aspect is equivalent to @ref{d7,,pragma Pure_Function}.
  
  @node Aspect Refined_Depends,Aspect Refined_Global,Aspect Pure_Function,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-refined-depends}@anchor{162}
  @section Aspect Refined_Depends
  
  
  @geindex Refined_Depends
  
! This aspect is equivalent to @ref{db,,pragma Refined_Depends}.
  
  @node Aspect Refined_Global,Aspect Refined_Post,Aspect Refined_Depends,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-refined-global}@anchor{163}
  @section Aspect Refined_Global
  
  
  @geindex Refined_Global
  
! This aspect is equivalent to @ref{dd,,pragma Refined_Global}.
  
  @node Aspect Refined_Post,Aspect Refined_State,Aspect Refined_Global,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-refined-post}@anchor{164}
  @section Aspect Refined_Post
  
  
  @geindex Refined_Post
  
! This aspect is equivalent to @ref{df,,pragma Refined_Post}.
  
  @node Aspect Refined_State,Aspect Relaxed_Initialization,Aspect Refined_Post,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-refined-state}@anchor{165}
  @section Aspect Refined_State
  
  
  @geindex Refined_State
  
! This aspect is equivalent to @ref{e1,,pragma Refined_State}.
  
  @node Aspect Relaxed_Initialization,Aspect Remote_Access_Type,Aspect Refined_State,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-relaxed-initialization}@anchor{166}
  @section Aspect Relaxed_Initialization
  
  
--- 10542,10602 ----
  @code{Assertion_Policy}.
  
  @node Aspect Program_Exit,Aspect Pure_Function,Aspect Predicate,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-program-exit}@anchor{162}
  @section Aspect Program_Exit
  
  
  @geindex Program_Exit
  
! This boolean aspect is equivalent to @ref{d3,,pragma Program_Exit}.
  
  @node Aspect Pure_Function,Aspect Refined_Depends,Aspect Program_Exit,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-pure-function}@anchor{163}
  @section Aspect Pure_Function
  
  
  @geindex Pure_Function
  
! This boolean aspect is equivalent to @ref{d8,,pragma Pure_Function}.
  
  @node Aspect Refined_Depends,Aspect Refined_Global,Aspect Pure_Function,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-refined-depends}@anchor{164}
  @section Aspect Refined_Depends
  
  
  @geindex Refined_Depends
  
! This aspect is equivalent to @ref{dc,,pragma Refined_Depends}.
  
  @node Aspect Refined_Global,Aspect Refined_Post,Aspect Refined_Depends,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-refined-global}@anchor{165}
  @section Aspect Refined_Global
  
  
  @geindex Refined_Global
  
! This aspect is equivalent to @ref{de,,pragma Refined_Global}.
  
  @node Aspect Refined_Post,Aspect Refined_State,Aspect Refined_Global,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-refined-post}@anchor{166}
  @section Aspect Refined_Post
  
  
  @geindex Refined_Post
  
! This aspect is equivalent to @ref{e0,,pragma Refined_Post}.
  
  @node Aspect Refined_State,Aspect Relaxed_Initialization,Aspect Refined_Post,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-refined-state}@anchor{167}
  @section Aspect Refined_State
  
  
  @geindex Refined_State
  
! This aspect is equivalent to @ref{e2,,pragma Refined_State}.
  
  @node Aspect Relaxed_Initialization,Aspect Remote_Access_Type,Aspect Refined_State,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-relaxed-initialization}@anchor{168}
  @section Aspect Relaxed_Initialization
  
  
*************** For the syntax and semantics of this asp
*** 10557,10638 ****
  Manual, section 6.10.
  
  @node Aspect Remote_Access_Type,Aspect Scalar_Storage_Order,Aspect Relaxed_Initialization,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-remote-access-type}@anchor{167}
  @section Aspect Remote_Access_Type
  
  
  @geindex Remote_Access_Type
  
! This aspect is equivalent to @ref{e4,,pragma Remote_Access_Type}.
  
  @node Aspect Scalar_Storage_Order,Aspect Secondary_Stack_Size,Aspect Remote_Access_Type,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-scalar-storage-order}@anchor{168}
  @section Aspect Scalar_Storage_Order
  
  
  @geindex Scalar_Storage_Order
  
! This aspect is equivalent to a @ref{169,,attribute Scalar_Storage_Order}.
  
  @node Aspect Secondary_Stack_Size,Aspect Shared,Aspect Scalar_Storage_Order,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-secondary-stack-size}@anchor{16a}
  @section Aspect Secondary_Stack_Size
  
  
  @geindex Secondary_Stack_Size
  
! This aspect is equivalent to @ref{ea,,pragma Secondary_Stack_Size}.
  
  @node Aspect Shared,Aspect Side_Effects,Aspect Secondary_Stack_Size,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-shared}@anchor{16b}
  @section Aspect Shared
  
  
  @geindex Shared
  
! This boolean aspect is equivalent to @ref{ed,,pragma Shared}
  and is thus a synonym for aspect @code{Atomic}.
  
  @node Aspect Side_Effects,Aspect Simple_Storage_Pool,Aspect Shared,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-side-effects}@anchor{16c}
  @section Aspect Side_Effects
  
  
  @geindex Side_Effects
  
! This aspect is equivalent to @ref{f1,,pragma Side_Effects}.
  
  @node Aspect Simple_Storage_Pool,Aspect Simple_Storage_Pool_Type,Aspect Side_Effects,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-simple-storage-pool}@anchor{16d}
  @section Aspect Simple_Storage_Pool
  
  
  @geindex Simple_Storage_Pool
  
! This aspect is equivalent to @ref{f4,,attribute Simple_Storage_Pool}.
  
  @node Aspect Simple_Storage_Pool_Type,Aspect SPARK_Mode,Aspect Simple_Storage_Pool,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-simple-storage-pool-type}@anchor{16e}
  @section Aspect Simple_Storage_Pool_Type
  
  
  @geindex Simple_Storage_Pool_Type
  
! This boolean aspect is equivalent to @ref{f3,,pragma Simple_Storage_Pool_Type}.
  
  @node Aspect SPARK_Mode,Aspect Subprogram_Variant,Aspect Simple_Storage_Pool_Type,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-spark-mode}@anchor{16f}
  @section Aspect SPARK_Mode
  
  
  @geindex SPARK_Mode
  
! This aspect is equivalent to @ref{fb,,pragma SPARK_Mode} and
  may be specified for either or both of the specification and body
  of a subprogram or package.
  
  @node Aspect Subprogram_Variant,Aspect Suppress_Debug_Info,Aspect SPARK_Mode,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-subprogram-variant}@anchor{170}
  @section Aspect Subprogram_Variant
  
  
--- 10606,10687 ----
  Manual, section 6.10.
  
  @node Aspect Remote_Access_Type,Aspect Scalar_Storage_Order,Aspect Relaxed_Initialization,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-remote-access-type}@anchor{169}
  @section Aspect Remote_Access_Type
  
  
  @geindex Remote_Access_Type
  
! This aspect is equivalent to @ref{e5,,pragma Remote_Access_Type}.
  
  @node Aspect Scalar_Storage_Order,Aspect Secondary_Stack_Size,Aspect Remote_Access_Type,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-scalar-storage-order}@anchor{16a}
  @section Aspect Scalar_Storage_Order
  
  
  @geindex Scalar_Storage_Order
  
! This aspect is equivalent to a @ref{16b,,attribute Scalar_Storage_Order}.
  
  @node Aspect Secondary_Stack_Size,Aspect Shared,Aspect Scalar_Storage_Order,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-secondary-stack-size}@anchor{16c}
  @section Aspect Secondary_Stack_Size
  
  
  @geindex Secondary_Stack_Size
  
! This aspect is equivalent to @ref{eb,,pragma Secondary_Stack_Size}.
  
  @node Aspect Shared,Aspect Side_Effects,Aspect Secondary_Stack_Size,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-shared}@anchor{16d}
  @section Aspect Shared
  
  
  @geindex Shared
  
! This boolean aspect is equivalent to @ref{ee,,pragma Shared}
  and is thus a synonym for aspect @code{Atomic}.
  
  @node Aspect Side_Effects,Aspect Simple_Storage_Pool,Aspect Shared,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-side-effects}@anchor{16e}
  @section Aspect Side_Effects
  
  
  @geindex Side_Effects
  
! This aspect is equivalent to @ref{f2,,pragma Side_Effects}.
  
  @node Aspect Simple_Storage_Pool,Aspect Simple_Storage_Pool_Type,Aspect Side_Effects,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-simple-storage-pool}@anchor{16f}
  @section Aspect Simple_Storage_Pool
  
  
  @geindex Simple_Storage_Pool
  
! This aspect is equivalent to @ref{f5,,attribute Simple_Storage_Pool}.
  
  @node Aspect Simple_Storage_Pool_Type,Aspect SPARK_Mode,Aspect Simple_Storage_Pool,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-simple-storage-pool-type}@anchor{170}
  @section Aspect Simple_Storage_Pool_Type
  
  
  @geindex Simple_Storage_Pool_Type
  
! This boolean aspect is equivalent to @ref{f4,,pragma Simple_Storage_Pool_Type}.
  
  @node Aspect SPARK_Mode,Aspect Subprogram_Variant,Aspect Simple_Storage_Pool_Type,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-spark-mode}@anchor{171}
  @section Aspect SPARK_Mode
  
  
  @geindex SPARK_Mode
  
! This aspect is equivalent to @ref{fc,,pragma SPARK_Mode} and
  may be specified for either or both of the specification and body
  of a subprogram or package.
  
  @node Aspect Subprogram_Variant,Aspect Suppress_Debug_Info,Aspect SPARK_Mode,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-subprogram-variant}@anchor{172}
  @section Aspect Subprogram_Variant
  
  
*************** For the syntax and semantics of this asp
*** 10642,10724 ****
  Manual, section 6.1.8.
  
  @node Aspect Suppress_Debug_Info,Aspect Suppress_Initialization,Aspect Subprogram_Variant,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-suppress-debug-info}@anchor{171}
  @section Aspect Suppress_Debug_Info
  
  
  @geindex Suppress_Debug_Info
  
! This boolean aspect is equivalent to @ref{104,,pragma Suppress_Debug_Info}.
  
  @node Aspect Suppress_Initialization,Aspect Test_Case,Aspect Suppress_Debug_Info,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-suppress-initialization}@anchor{172}
  @section Aspect Suppress_Initialization
  
  
  @geindex Suppress_Initialization
  
! This boolean aspect is equivalent to @ref{107,,pragma Suppress_Initialization}.
  
  @node Aspect Test_Case,Aspect Thread_Local_Storage,Aspect Suppress_Initialization,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-test-case}@anchor{173}
  @section Aspect Test_Case
  
  
  @geindex Test_Case
  
! This aspect is equivalent to @ref{10b,,pragma Test_Case}.
  
  @node Aspect Thread_Local_Storage,Aspect Universal_Aliasing,Aspect Test_Case,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-thread-local-storage}@anchor{174}
  @section Aspect Thread_Local_Storage
  
  
  @geindex Thread_Local_Storage
  
! This boolean aspect is equivalent to @ref{10d,,pragma Thread_Local_Storage}.
  
  @node Aspect Universal_Aliasing,Aspect Unmodified,Aspect Thread_Local_Storage,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-universal-aliasing}@anchor{175}
  @section Aspect Universal_Aliasing
  
  
  @geindex Universal_Aliasing
  
! This boolean aspect is equivalent to @ref{118,,pragma Universal_Aliasing}.
  
  @node Aspect Unmodified,Aspect Unreferenced,Aspect Universal_Aliasing,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-unmodified}@anchor{176}
  @section Aspect Unmodified
  
  
  @geindex Unmodified
  
! This boolean aspect is equivalent to @ref{11a,,pragma Unmodified}.
  
  @node Aspect Unreferenced,Aspect Unreferenced_Objects,Aspect Unmodified,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-unreferenced}@anchor{177}
  @section Aspect Unreferenced
  
  
  @geindex Unreferenced
  
! This boolean aspect is equivalent to @ref{11c,,pragma Unreferenced}.
  
  When using the @code{-gnat2022} switch, this aspect is also supported on formal
  parameters, which is in particular the only form possible for expression
  functions.
  
  @node Aspect Unreferenced_Objects,Aspect User_Aspect,Aspect Unreferenced,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-unreferenced-objects}@anchor{178}
  @section Aspect Unreferenced_Objects
  
  
  @geindex Unreferenced_Objects
  
! This boolean aspect is equivalent to @ref{11e,,pragma Unreferenced_Objects}.
  
  @node Aspect User_Aspect,Aspect Value_Size,Aspect Unreferenced_Objects,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-user-aspect}@anchor{179}
  @section Aspect User_Aspect
  
  
--- 10691,10773 ----
  Manual, section 6.1.8.
  
  @node Aspect Suppress_Debug_Info,Aspect Suppress_Initialization,Aspect Subprogram_Variant,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-suppress-debug-info}@anchor{173}
  @section Aspect Suppress_Debug_Info
  
  
  @geindex Suppress_Debug_Info
  
! This boolean aspect is equivalent to @ref{105,,pragma Suppress_Debug_Info}.
  
  @node Aspect Suppress_Initialization,Aspect Test_Case,Aspect Suppress_Debug_Info,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-suppress-initialization}@anchor{174}
  @section Aspect Suppress_Initialization
  
  
  @geindex Suppress_Initialization
  
! This boolean aspect is equivalent to @ref{108,,pragma Suppress_Initialization}.
  
  @node Aspect Test_Case,Aspect Thread_Local_Storage,Aspect Suppress_Initialization,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-test-case}@anchor{175}
  @section Aspect Test_Case
  
  
  @geindex Test_Case
  
! This aspect is equivalent to @ref{10c,,pragma Test_Case}.
  
  @node Aspect Thread_Local_Storage,Aspect Universal_Aliasing,Aspect Test_Case,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-thread-local-storage}@anchor{176}
  @section Aspect Thread_Local_Storage
  
  
  @geindex Thread_Local_Storage
  
! This boolean aspect is equivalent to @ref{10e,,pragma Thread_Local_Storage}.
  
  @node Aspect Universal_Aliasing,Aspect Unmodified,Aspect Thread_Local_Storage,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-universal-aliasing}@anchor{177}
  @section Aspect Universal_Aliasing
  
  
  @geindex Universal_Aliasing
  
! This boolean aspect is equivalent to @ref{119,,pragma Universal_Aliasing}.
  
  @node Aspect Unmodified,Aspect Unreferenced,Aspect Universal_Aliasing,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-unmodified}@anchor{178}
  @section Aspect Unmodified
  
  
  @geindex Unmodified
  
! This boolean aspect is equivalent to @ref{11b,,pragma Unmodified}.
  
  @node Aspect Unreferenced,Aspect Unreferenced_Objects,Aspect Unmodified,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-unreferenced}@anchor{179}
  @section Aspect Unreferenced
  
  
  @geindex Unreferenced
  
! This boolean aspect is equivalent to @ref{11d,,pragma Unreferenced}.
  
  When using the @code{-gnat2022} switch, this aspect is also supported on formal
  parameters, which is in particular the only form possible for expression
  functions.
  
  @node Aspect Unreferenced_Objects,Aspect User_Aspect,Aspect Unreferenced,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-unreferenced-objects}@anchor{17a}
  @section Aspect Unreferenced_Objects
  
  
  @geindex Unreferenced_Objects
  
! This boolean aspect is equivalent to @ref{11f,,pragma Unreferenced_Objects}.
  
  @node Aspect User_Aspect,Aspect Value_Size,Aspect Unreferenced_Objects,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-user-aspect}@anchor{17b}
  @section Aspect User_Aspect
  
  
*************** replicating the set of aspect specificat
*** 10731,10775 ****
  pragma-defined aspect.
  
  @node Aspect Value_Size,Aspect Volatile_Full_Access,Aspect User_Aspect,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-value-size}@anchor{17a}
  @section Aspect Value_Size
  
  
  @geindex Value_Size
  
! This aspect is equivalent to @ref{17b,,attribute Value_Size}.
  
  @node Aspect Volatile_Full_Access,Aspect Volatile_Function,Aspect Value_Size,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-volatile-full-access}@anchor{17c}
  @section Aspect Volatile_Full_Access
  
  
  @geindex Volatile_Full_Access
  
! This boolean aspect is equivalent to @ref{128,,pragma Volatile_Full_Access}.
  
  @node Aspect Volatile_Function,Aspect Warnings,Aspect Volatile_Full_Access,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-volatile-function}@anchor{17d}
  @section Aspect Volatile_Function
  
  
  @geindex Volatile_Function
  
! This boolean aspect is equivalent to @ref{12a,,pragma Volatile_Function}.
  
  @node Aspect Warnings,,Aspect Volatile_Function,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-warnings}@anchor{17e}
  @section Aspect Warnings
  
  
  @geindex Warnings
  
! This aspect is equivalent to the two argument form of @ref{12c,,pragma Warnings},
  where the first argument is @code{ON} or @code{OFF} and the second argument
  is the entity.
  
  @node Implementation Defined Attributes,Standard and Implementation Defined Restrictions,Implementation Defined Aspects,Top
! @anchor{gnat_rm/implementation_defined_attributes doc}@anchor{17f}@anchor{gnat_rm/implementation_defined_attributes id1}@anchor{180}@anchor{gnat_rm/implementation_defined_attributes implementation-defined-attributes}@anchor{8}
  @chapter Implementation Defined Attributes
  
  
--- 10780,10824 ----
  pragma-defined aspect.
  
  @node Aspect Value_Size,Aspect Volatile_Full_Access,Aspect User_Aspect,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-value-size}@anchor{17c}
  @section Aspect Value_Size
  
  
  @geindex Value_Size
  
! This aspect is equivalent to @ref{17d,,attribute Value_Size}.
  
  @node Aspect Volatile_Full_Access,Aspect Volatile_Function,Aspect Value_Size,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-volatile-full-access}@anchor{17e}
  @section Aspect Volatile_Full_Access
  
  
  @geindex Volatile_Full_Access
  
! This boolean aspect is equivalent to @ref{129,,pragma Volatile_Full_Access}.
  
  @node Aspect Volatile_Function,Aspect Warnings,Aspect Volatile_Full_Access,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-volatile-function}@anchor{17f}
  @section Aspect Volatile_Function
  
  
  @geindex Volatile_Function
  
! This boolean aspect is equivalent to @ref{12b,,pragma Volatile_Function}.
  
  @node Aspect Warnings,,Aspect Volatile_Function,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-warnings}@anchor{180}
  @section Aspect Warnings
  
  
  @geindex Warnings
  
! This aspect is equivalent to the two argument form of @ref{12d,,pragma Warnings},
  where the first argument is @code{ON} or @code{OFF} and the second argument
  is the entity.
  
  @node Implementation Defined Attributes,Standard and Implementation Defined Restrictions,Implementation Defined Aspects,Top
! @anchor{gnat_rm/implementation_defined_attributes doc}@anchor{181}@anchor{gnat_rm/implementation_defined_attributes id1}@anchor{182}@anchor{gnat_rm/implementation_defined_attributes implementation-defined-attributes}@anchor{8}
  @chapter Implementation Defined Attributes
  
  
*************** consideration, you should minimize the u
*** 10877,10883 ****
  @end menu
  
  @node Attribute Abort_Signal,Attribute Address_Size,,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-abort-signal}@anchor{181}
  @section Attribute Abort_Signal
  
  
--- 10926,10932 ----
  @end menu
  
  @node Attribute Abort_Signal,Attribute Address_Size,,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-abort-signal}@anchor{183}
  @section Attribute Abort_Signal
  
  
*************** completely outside the normal semantics
*** 10891,10897 ****
  intercept the abort exception).
  
  @node Attribute Address_Size,Attribute Asm_Input,Attribute Abort_Signal,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-address-size}@anchor{182}
  @section Attribute Address_Size
  
  
--- 10940,10946 ----
  intercept the abort exception).
  
  @node Attribute Address_Size,Attribute Asm_Input,Attribute Abort_Signal,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-address-size}@anchor{184}
  @section Attribute Address_Size
  
  
*************** reference to System.Address’Size is no
*** 10907,10913 ****
  is a private type.
  
  @node Attribute Asm_Input,Attribute Asm_Output,Attribute Address_Size,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-asm-input}@anchor{183}
  @section Attribute Asm_Input
  
  
--- 10956,10962 ----
  is a private type.
  
  @node Attribute Asm_Input,Attribute Asm_Output,Attribute Address_Size,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-asm-input}@anchor{185}
  @section Attribute Asm_Input
  
  
*************** to be a static expression, and is the co
*** 10921,10930 ****
  value to be used as the input argument.  The possible values for the
  constant are the same as those used in the RTL, and are dependent on
  the configuration file used to built the GCC back end.
! @ref{184,,Machine Code Insertions}
  
  @node Attribute Asm_Output,Attribute Atomic_Always_Lock_Free,Attribute Asm_Input,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-asm-output}@anchor{185}
  @section Attribute Asm_Output
  
  
--- 10970,10979 ----
  value to be used as the input argument.  The possible values for the
  constant are the same as those used in the RTL, and are dependent on
  the configuration file used to built the GCC back end.
! @ref{186,,Machine Code Insertions}
  
  @node Attribute Asm_Output,Attribute Atomic_Always_Lock_Free,Attribute Asm_Input,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-asm-output}@anchor{187}
  @section Attribute Asm_Output
  
  
*************** result.  The possible values for constra
*** 10940,10949 ****
  the RTL, and are dependent on the configuration file used to build the
  GCC back end.  If there are no output operands, then this argument may
  either be omitted, or explicitly given as @code{No_Output_Operands}.
! @ref{184,,Machine Code Insertions}
  
  @node Attribute Atomic_Always_Lock_Free,Attribute Bit,Attribute Asm_Output,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-atomic-always-lock-free}@anchor{186}
  @section Attribute Atomic_Always_Lock_Free
  
  
--- 10989,10998 ----
  the RTL, and are dependent on the configuration file used to build the
  GCC back end.  If there are no output operands, then this argument may
  either be omitted, or explicitly given as @code{No_Output_Operands}.
! @ref{186,,Machine Code Insertions}
  
  @node Attribute Atomic_Always_Lock_Free,Attribute Bit,Attribute Asm_Output,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-atomic-always-lock-free}@anchor{188}
  @section Attribute Atomic_Always_Lock_Free
  
  
*************** result indicates whether atomic operatio
*** 10954,10960 ****
  for the given type.
  
  @node Attribute Bit,Attribute Bit_Position,Attribute Atomic_Always_Lock_Free,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-bit}@anchor{187}
  @section Attribute Bit
  
  
--- 11003,11009 ----
  for the given type.
  
  @node Attribute Bit,Attribute Bit_Position,Attribute Atomic_Always_Lock_Free,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-bit}@anchor{189}
  @section Attribute Bit
  
  
*************** This attribute is designed to be compati
*** 10985,10991 ****
  and implementation of the @code{Bit} attribute.
  
  @node Attribute Bit_Position,Attribute Code_Address,Attribute Bit,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-bit-position}@anchor{188}
  @section Attribute Bit_Position
  
  
--- 11034,11040 ----
  and implementation of the @code{Bit} attribute.
  
  @node Attribute Bit_Position,Attribute Code_Address,Attribute Bit,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-bit-position}@anchor{18a}
  @section Attribute Bit_Position
  
  
*************** type `universal_integer'.  The value dep
*** 11000,11006 ****
  the containing record @code{R}.
  
  @node Attribute Code_Address,Attribute Compiler_Version,Attribute Bit_Position,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-code-address}@anchor{189}
  @section Attribute Code_Address
  
  
--- 11049,11055 ----
  the containing record @code{R}.
  
  @node Attribute Code_Address,Attribute Compiler_Version,Attribute Bit_Position,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-code-address}@anchor{18b}
  @section Attribute Code_Address
  
  
*************** the same value as is returned by the cor
*** 11043,11049 ****
  attribute.
  
  @node Attribute Compiler_Version,Attribute Constrained,Attribute Code_Address,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-compiler-version}@anchor{18a}
  @section Attribute Compiler_Version
  
  
--- 11092,11098 ----
  attribute.
  
  @node Attribute Compiler_Version,Attribute Constrained,Attribute Code_Address,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-compiler-version}@anchor{18c}
  @section Attribute Compiler_Version
  
  
*************** prefix) yields a static string identifyi
*** 11054,11060 ****
  being used to compile the unit containing the attribute reference.
  
  @node Attribute Constrained,Attribute Default_Bit_Order,Attribute Compiler_Version,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-constrained}@anchor{18b}
  @section Attribute Constrained
  
  
--- 11103,11109 ----
  being used to compile the unit containing the attribute reference.
  
  @node Attribute Constrained,Attribute Default_Bit_Order,Attribute Compiler_Version,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-constrained}@anchor{18d}
  @section Attribute Constrained
  
  
*************** record type without discriminants is alw
*** 11069,11075 ****
  compatible with older Ada compilers, including notably DEC Ada.
  
  @node Attribute Default_Bit_Order,Attribute Default_Scalar_Storage_Order,Attribute Constrained,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-default-bit-order}@anchor{18c}
  @section Attribute Default_Bit_Order
  
  
--- 11118,11124 ----
  compatible with older Ada compilers, including notably DEC Ada.
  
  @node Attribute Default_Bit_Order,Attribute Default_Scalar_Storage_Order,Attribute Constrained,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-default-bit-order}@anchor{18e}
  @section Attribute Default_Bit_Order
  
  
*************** as a @code{Pos} value (0 for @code{High_
*** 11086,11092 ****
  @code{Default_Bit_Order} in package @code{System}.
  
  @node Attribute Default_Scalar_Storage_Order,Attribute Deref,Attribute Default_Bit_Order,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-default-scalar-storage-order}@anchor{18d}
  @section Attribute Default_Scalar_Storage_Order
  
  
--- 11135,11141 ----
  @code{Default_Bit_Order} in package @code{System}.
  
  @node Attribute Default_Scalar_Storage_Order,Attribute Deref,Attribute Default_Bit_Order,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-default-scalar-storage-order}@anchor{18f}
  @section Attribute Default_Scalar_Storage_Order
  
  
*************** equal to @code{Default_Bit_Order} if uns
*** 11103,11109 ****
  @code{System.Bit_Order} value. This is a static attribute.
  
  @node Attribute Deref,Attribute Descriptor_Size,Attribute Default_Scalar_Storage_Order,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-deref}@anchor{18e}
  @section Attribute Deref
  
  
--- 11152,11158 ----
  @code{System.Bit_Order} value. This is a static attribute.
  
  @node Attribute Deref,Attribute Descriptor_Size,Attribute Default_Scalar_Storage_Order,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-deref}@anchor{190}
  @section Attribute Deref
  
  
*************** a named access-to-@cite{typ} type, excep
*** 11116,11122 ****
  used on the left side of an assignment.
  
  @node Attribute Descriptor_Size,Attribute Elaborated,Attribute Deref,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-descriptor-size}@anchor{18f}
  @section Attribute Descriptor_Size
  
  
--- 11165,11171 ----
  used on the left side of an assignment.
  
  @node Attribute Descriptor_Size,Attribute Elaborated,Attribute Deref,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-descriptor-size}@anchor{191}
  @section Attribute Descriptor_Size
  
  
*************** since @code{Positive} has an alignment o
*** 11145,11151 ****
  which yields a size of 32 bits, i.e. including 16 bits of padding.
  
  @node Attribute Elaborated,Attribute Elab_Body,Attribute Descriptor_Size,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-elaborated}@anchor{190}
  @section Attribute Elaborated
  
  
--- 11194,11200 ----
  which yields a size of 32 bits, i.e. including 16 bits of padding.
  
  @node Attribute Elaborated,Attribute Elab_Body,Attribute Descriptor_Size,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-elaborated}@anchor{192}
  @section Attribute Elaborated
  
  
*************** units has been completed.  An exception
*** 11160,11166 ****
  elaboration, the value is always False for such units.
  
  @node Attribute Elab_Body,Attribute Elab_Spec,Attribute Elaborated,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-elab-body}@anchor{191}
  @section Attribute Elab_Body
  
  
--- 11209,11215 ----
  elaboration, the value is always False for such units.
  
  @node Attribute Elab_Body,Attribute Elab_Spec,Attribute Elaborated,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-elab-body}@anchor{193}
  @section Attribute Elab_Body
  
  
*************** e.g., if it is necessary to do selective
*** 11176,11182 ****
  error.
  
  @node Attribute Elab_Spec,Attribute Elab_Subp_Body,Attribute Elab_Body,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-elab-spec}@anchor{192}
  @section Attribute Elab_Spec
  
  
--- 11225,11231 ----
  error.
  
  @node Attribute Elab_Spec,Attribute Elab_Subp_Body,Attribute Elab_Body,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-elab-spec}@anchor{194}
  @section Attribute Elab_Spec
  
  
*************** Ada code, e.g., if it is necessary to do
*** 11192,11198 ****
  some error.
  
  @node Attribute Elab_Subp_Body,Attribute Emax,Attribute Elab_Spec,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-elab-subp-body}@anchor{193}
  @section Attribute Elab_Subp_Body
  
  
--- 11241,11247 ----
  some error.
  
  @node Attribute Elab_Subp_Body,Attribute Emax,Attribute Elab_Spec,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-elab-subp-body}@anchor{195}
  @section Attribute Elab_Subp_Body
  
  
*************** elaboration procedure by the binder in C
*** 11206,11212 ****
  otherwise.
  
  @node Attribute Emax,Attribute Enabled,Attribute Elab_Subp_Body,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-emax}@anchor{194}
  @section Attribute Emax
  
  
--- 11255,11261 ----
  otherwise.
  
  @node Attribute Emax,Attribute Enabled,Attribute Elab_Subp_Body,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-emax}@anchor{196}
  @section Attribute Emax
  
  
*************** the Ada 83 reference manual for an exact
*** 11219,11225 ****
  this attribute.
  
  @node Attribute Enabled,Attribute Enum_Rep,Attribute Emax,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-enabled}@anchor{195}
  @section Attribute Enabled
  
  
--- 11268,11274 ----
  this attribute.
  
  @node Attribute Enabled,Attribute Enum_Rep,Attribute Emax,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-enabled}@anchor{197}
  @section Attribute Enabled
  
  
*************** a @code{pragma Suppress} or @code{pragma
*** 11243,11249 ****
  the package or subprogram, controlling whether the check will be present.
  
  @node Attribute Enum_Rep,Attribute Enum_Val,Attribute Enabled,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-enum-rep}@anchor{196}
  @section Attribute Enum_Rep
  
  
--- 11292,11298 ----
  the package or subprogram, controlling whether the check will be present.
  
  @node Attribute Enum_Rep,Attribute Enum_Val,Attribute Enabled,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-enum-rep}@anchor{198}
  @section Attribute Enum_Rep
  
  
*************** integer calculation is done at run time,
*** 11283,11289 ****
  may raise @code{Constraint_Error}.
  
  @node Attribute Enum_Val,Attribute Epsilon,Attribute Enum_Rep,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-enum-val}@anchor{197}
  @section Attribute Enum_Val
  
  
--- 11332,11338 ----
  may raise @code{Constraint_Error}.
  
  @node Attribute Enum_Val,Attribute Epsilon,Attribute Enum_Rep,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-enum-val}@anchor{199}
  @section Attribute Enum_Val
  
  
*************** absence of an enumeration representation
*** 11309,11315 ****
  attribute (i.e., the result is static if the argument is static).
  
  @node Attribute Epsilon,Attribute Fast_Math,Attribute Enum_Val,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-epsilon}@anchor{198}
  @section Attribute Epsilon
  
  
--- 11358,11364 ----
  attribute (i.e., the result is static if the argument is static).
  
  @node Attribute Epsilon,Attribute Fast_Math,Attribute Enum_Val,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-epsilon}@anchor{19a}
  @section Attribute Epsilon
  
  
*************** the Ada 83 reference manual for an exact
*** 11322,11328 ****
  this attribute.
  
  @node Attribute Fast_Math,Attribute Finalization_Size,Attribute Epsilon,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-fast-math}@anchor{199}
  @section Attribute Fast_Math
  
  
--- 11371,11377 ----
  this attribute.
  
  @node Attribute Fast_Math,Attribute Finalization_Size,Attribute Epsilon,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-fast-math}@anchor{19b}
  @section Attribute Fast_Math
  
  
*************** prefix) yields a static Boolean value th
*** 11333,11339 ****
  @code{Fast_Math} is active, and False otherwise.
  
  @node Attribute Finalization_Size,Attribute Fixed_Value,Attribute Fast_Math,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-finalization-size}@anchor{19a}
  @section Attribute Finalization_Size
  
  
--- 11382,11388 ----
  @code{Fast_Math} is active, and False otherwise.
  
  @node Attribute Finalization_Size,Attribute Fixed_Value,Attribute Fast_Math,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-finalization-size}@anchor{19c}
  @section Attribute Finalization_Size
  
  
*************** if a No_Finalization restriction is in e
*** 11353,11359 ****
  Note that only heap-allocated objects contain finalization data.
  
  @node Attribute Fixed_Value,Attribute From_Address,Attribute Finalization_Size,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-fixed-value}@anchor{19b}
  @section Attribute Fixed_Value
  
  
--- 11402,11408 ----
  Note that only heap-allocated objects contain finalization data.
  
  @node Attribute Fixed_Value,Attribute From_Address,Attribute Finalization_Size,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-fixed-value}@anchor{19d}
  @section Attribute Fixed_Value
  
  
*************** This attribute is primarily intended for
*** 11380,11386 ****
  input-output functions for fixed-point values.
  
  @node Attribute From_Address,Attribute From_Any,Attribute Fixed_Value,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-from-address}@anchor{19c}
  @section Attribute From_Address
  
  
--- 11429,11435 ----
  input-output functions for fixed-point values.
  
  @node Attribute From_Address,Attribute From_Any,Attribute Fixed_Value,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-from-address}@anchor{19e}
  @section Attribute From_Address
  
  
*************** end)
*** 11420,11426 ****
  @end example
  
  @node Attribute From_Any,Attribute Has_Access_Values,Attribute From_Address,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-from-any}@anchor{19d}
  @section Attribute From_Any
  
  
--- 11469,11475 ----
  @end example
  
  @node Attribute From_Any,Attribute Has_Access_Values,Attribute From_Address,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-from-any}@anchor{19f}
  @section Attribute From_Any
  
  
*************** This internal attribute is used for the
*** 11430,11436 ****
  stubs in the context of the Distributed Systems Annex.
  
  @node Attribute Has_Access_Values,Attribute Has_Discriminants,Attribute From_Any,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-has-access-values}@anchor{19e}
  @section Attribute Has_Access_Values
  
  
--- 11479,11485 ----
  stubs in the context of the Distributed Systems Annex.
  
  @node Attribute Has_Access_Values,Attribute Has_Discriminants,Attribute From_Any,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-has-access-values}@anchor{1a0}
  @section Attribute Has_Access_Values
  
  
*************** definitions.  If the attribute is applie
*** 11448,11454 ****
  indicates whether or not the corresponding actual type has access values.
  
  @node Attribute Has_Discriminants,Attribute Has_Tagged_Values,Attribute Has_Access_Values,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-has-discriminants}@anchor{19f}
  @section Attribute Has_Discriminants
  
  
--- 11497,11503 ----
  indicates whether or not the corresponding actual type has access values.
  
  @node Attribute Has_Discriminants,Attribute Has_Tagged_Values,Attribute Has_Access_Values,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-has-discriminants}@anchor{1a1}
  @section Attribute Has_Discriminants
  
  
*************** definitions.  If the attribute is applie
*** 11464,11470 ****
  indicates whether or not the corresponding actual type has discriminants.
  
  @node Attribute Has_Tagged_Values,Attribute Img,Attribute Has_Discriminants,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-has-tagged-values}@anchor{1a0}
  @section Attribute Has_Tagged_Values
  
  
--- 11513,11519 ----
  indicates whether or not the corresponding actual type has discriminants.
  
  @node Attribute Has_Tagged_Values,Attribute Img,Attribute Has_Discriminants,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-has-tagged-values}@anchor{1a2}
  @section Attribute Has_Tagged_Values
  
  
*************** definitions. If the attribute is applied
*** 11481,11487 ****
  indicates whether or not the corresponding actual type has access values.
  
  @node Attribute Img,Attribute Initialized,Attribute Has_Tagged_Values,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-img}@anchor{1a1}
  @section Attribute Img
  
  
--- 11530,11536 ----
  indicates whether or not the corresponding actual type has access values.
  
  @node Attribute Img,Attribute Initialized,Attribute Has_Tagged_Values,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-img}@anchor{1a3}
  @section Attribute Img
  
  
*************** that returns the appropriate string when
*** 11511,11517 ****
  in an instantiation as a function parameter.
  
  @node Attribute Initialized,Attribute Integer_Value,Attribute Img,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-initialized}@anchor{1a2}
  @section Attribute Initialized
  
  
--- 11560,11566 ----
  in an instantiation as a function parameter.
  
  @node Attribute Initialized,Attribute Integer_Value,Attribute Img,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-initialized}@anchor{1a4}
  @section Attribute Initialized
  
  
*************** For the syntax and semantics of this att
*** 11521,11527 ****
  Manual, section 6.10.
  
  @node Attribute Integer_Value,Attribute Invalid_Value,Attribute Initialized,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-integer-value}@anchor{1a3}
  @section Attribute Integer_Value
  
  
--- 11570,11576 ----
  Manual, section 6.10.
  
  @node Attribute Integer_Value,Attribute Invalid_Value,Attribute Initialized,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-integer-value}@anchor{1a5}
  @section Attribute Integer_Value
  
  
*************** This attribute is primarily intended for
*** 11549,11555 ****
  standard input-output functions for fixed-point values.
  
  @node Attribute Invalid_Value,Attribute Large,Attribute Integer_Value,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-invalid-value}@anchor{1a4}
  @section Attribute Invalid_Value
  
  
--- 11598,11604 ----
  standard input-output functions for fixed-point values.
  
  @node Attribute Invalid_Value,Attribute Large,Attribute Integer_Value,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-invalid-value}@anchor{1a6}
  @section Attribute Invalid_Value
  
  
*************** including the ability to modify the valu
*** 11563,11569 ****
  relevant environment variables at run time.
  
  @node Attribute Large,Attribute Library_Level,Attribute Invalid_Value,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-large}@anchor{1a5}
  @section Attribute Large
  
  
--- 11612,11618 ----
  relevant environment variables at run time.
  
  @node Attribute Large,Attribute Library_Level,Attribute Invalid_Value,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-large}@anchor{1a7}
  @section Attribute Large
  
  
*************** the Ada 83 reference manual for an exact
*** 11576,11582 ****
  this attribute.
  
  @node Attribute Library_Level,Attribute Loop_Entry,Attribute Large,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-library-level}@anchor{1a6}
  @section Attribute Library_Level
  
  
--- 11625,11631 ----
  this attribute.
  
  @node Attribute Library_Level,Attribute Loop_Entry,Attribute Large,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-library-level}@anchor{1a8}
  @section Attribute Library_Level
  
  
*************** end Gen;
*** 11602,11608 ****
  @end example
  
  @node Attribute Loop_Entry,Attribute Machine_Size,Attribute Library_Level,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-loop-entry}@anchor{1a7}
  @section Attribute Loop_Entry
  
  
--- 11651,11657 ----
  @end example
  
  @node Attribute Loop_Entry,Attribute Machine_Size,Attribute Library_Level,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-loop-entry}@anchor{1a9}
  @section Attribute Loop_Entry
  
  
*************** entry. This copy is not performed if the
*** 11635,11641 ****
  corresponding pragmas are ignored or disabled.
  
  @node Attribute Machine_Size,Attribute Mantissa,Attribute Loop_Entry,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-machine-size}@anchor{1a8}
  @section Attribute Machine_Size
  
  
--- 11684,11690 ----
  corresponding pragmas are ignored or disabled.
  
  @node Attribute Machine_Size,Attribute Mantissa,Attribute Loop_Entry,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-machine-size}@anchor{1aa}
  @section Attribute Machine_Size
  
  
*************** This attribute is identical to the @code
*** 11645,11651 ****
  provided for compatibility with the DEC Ada 83 attribute of this name.
  
  @node Attribute Mantissa,Attribute Maximum_Alignment,Attribute Machine_Size,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-mantissa}@anchor{1a9}
  @section Attribute Mantissa
  
  
--- 11694,11700 ----
  provided for compatibility with the DEC Ada 83 attribute of this name.
  
  @node Attribute Mantissa,Attribute Maximum_Alignment,Attribute Machine_Size,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-mantissa}@anchor{1ab}
  @section Attribute Mantissa
  
  
*************** the Ada 83 reference manual for an exact
*** 11658,11664 ****
  this attribute.
  
  @node Attribute Maximum_Alignment,Attribute Max_Integer_Size,Attribute Mantissa,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-maximum-alignment}@anchor{1aa}@anchor{gnat_rm/implementation_defined_attributes id2}@anchor{1ab}
  @section Attribute Maximum_Alignment
  
  
--- 11707,11713 ----
  this attribute.
  
  @node Attribute Maximum_Alignment,Attribute Max_Integer_Size,Attribute Mantissa,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-maximum-alignment}@anchor{1ac}@anchor{gnat_rm/implementation_defined_attributes id2}@anchor{1ad}
  @section Attribute Maximum_Alignment
  
  
*************** value dependent on the target, but may r
*** 11675,11681 ****
  are not needed up to @code{Standard'Maximum_Alignment}.
  
  @node Attribute Max_Integer_Size,Attribute Mechanism_Code,Attribute Maximum_Alignment,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-max-integer-size}@anchor{1ac}
  @section Attribute Max_Integer_Size
  
  
--- 11724,11730 ----
  are not needed up to @code{Standard'Maximum_Alignment}.
  
  @node Attribute Max_Integer_Size,Attribute Mechanism_Code,Attribute Maximum_Alignment,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-max-integer-size}@anchor{1ae}
  @section Attribute Max_Integer_Size
  
  
*************** prefix) provides the size of the largest
*** 11686,11692 ****
  the target. The result is a static constant.
  
  @node Attribute Mechanism_Code,Attribute Null_Parameter,Attribute Max_Integer_Size,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-mechanism-code}@anchor{1ad}
  @section Attribute Mechanism_Code
  
  
--- 11735,11741 ----
  the target. The result is a static constant.
  
  @node Attribute Mechanism_Code,Attribute Null_Parameter,Attribute Max_Integer_Size,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-mechanism-code}@anchor{1af}
  @section Attribute Mechanism_Code
  
  
*************** by reference
*** 11717,11723 ****
  @end table
  
  @node Attribute Null_Parameter,Attribute Object_Size,Attribute Mechanism_Code,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-null-parameter}@anchor{1ae}
  @section Attribute Null_Parameter
  
  
--- 11766,11772 ----
  @end table
  
  @node Attribute Null_Parameter,Attribute Object_Size,Attribute Mechanism_Code,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-null-parameter}@anchor{1b0}
  @section Attribute Null_Parameter
  
  
*************** There is no way of indicating this witho
*** 11742,11748 ****
  attribute.
  
  @node Attribute Object_Size,Attribute Old,Attribute Null_Parameter,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-object-size}@anchor{15a}@anchor{gnat_rm/implementation_defined_attributes id3}@anchor{1af}
  @section Attribute Object_Size
  
  
--- 11791,11797 ----
  attribute.
  
  @node Attribute Object_Size,Attribute Old,Attribute Null_Parameter,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-object-size}@anchor{15c}@anchor{gnat_rm/implementation_defined_attributes id3}@anchor{1b1}
  @section Attribute Object_Size
  
  
*************** Similar additional checks are performed
*** 11812,11818 ****
  statically matching subtypes.
  
  @node Attribute Old,Attribute Passed_By_Reference,Attribute Object_Size,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-old}@anchor{1b0}
  @section Attribute Old
  
  
--- 11861,11867 ----
  statically matching subtypes.
  
  @node Attribute Old,Attribute Passed_By_Reference,Attribute Object_Size,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-old}@anchor{1b2}
  @section Attribute Old
  
  
*************** definition are allowed under control of
*** 11827,11833 ****
  implementation defined pragma @code{Unevaluated_Use_Of_Old}.
  
  @node Attribute Passed_By_Reference,Attribute Pool_Address,Attribute Old,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-passed-by-reference}@anchor{1b1}
  @section Attribute Passed_By_Reference
  
  
--- 11876,11882 ----
  implementation defined pragma @code{Unevaluated_Use_Of_Old}.
  
  @node Attribute Passed_By_Reference,Attribute Pool_Address,Attribute Old,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-passed-by-reference}@anchor{1b3}
  @section Attribute Passed_By_Reference
  
  
*************** passed by copy in calls.  For scalar typ
*** 11843,11849 ****
  and is static.  For non-scalar types, the result is nonstatic.
  
  @node Attribute Pool_Address,Attribute Range_Length,Attribute Passed_By_Reference,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-pool-address}@anchor{1b2}
  @section Attribute Pool_Address
  
  
--- 11892,11898 ----
  and is static.  For non-scalar types, the result is nonstatic.
  
  @node Attribute Pool_Address,Attribute Range_Length,Attribute Passed_By_Reference,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-pool-address}@anchor{1b4}
  @section Attribute Pool_Address
  
  
*************** For an object created by @code{new}, @co
*** 11865,11871 ****
  what is passed to @code{Allocate} and returned from @code{Deallocate}.
  
  @node Attribute Range_Length,Attribute Ref,Attribute Pool_Address,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-range-length}@anchor{1b3}
  @section Attribute Range_Length
  
  
--- 11914,11920 ----
  what is passed to @code{Allocate} and returned from @code{Deallocate}.
  
  @node Attribute Range_Length,Attribute Ref,Attribute Pool_Address,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-range-length}@anchor{1b5}
  @section Attribute Range_Length
  
  
*************** applied to the index subtype of a one di
*** 11878,11884 ****
  same result as @code{Length} applied to the array itself.
  
  @node Attribute Ref,Attribute Restriction_Set,Attribute Range_Length,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-ref}@anchor{1b4}
  @section Attribute Ref
  
  
--- 11927,11933 ----
  same result as @code{Length} applied to the array itself.
  
  @node Attribute Ref,Attribute Restriction_Set,Attribute Range_Length,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-ref}@anchor{1b6}
  @section Attribute Ref
  
  
*************** equivalent to @code{System'To_Address},
*** 11887,11893 ****
  compilers.
  
  @node Attribute Restriction_Set,Attribute Result,Attribute Ref,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-restriction-set}@anchor{1b5}
  @section Attribute Restriction_Set
  
  
--- 11936,11942 ----
  compilers.
  
  @node Attribute Restriction_Set,Attribute Result,Attribute Ref,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-restriction-set}@anchor{1b7}
  @section Attribute Restriction_Set
  
  
*************** Restrictions pragma, they are not analyz
*** 11957,11963 ****
  so they do not have a type.
  
  @node Attribute Result,Attribute Round,Attribute Restriction_Set,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-result}@anchor{1b6}
  @section Attribute Result
  
  
--- 12006,12012 ----
  so they do not have a type.
  
  @node Attribute Result,Attribute Round,Attribute Restriction_Set,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-result}@anchor{1b8}
  @section Attribute Result
  
  
*************** For a further discussion of the use of t
*** 11970,11976 ****
  see the description of pragma Postcondition.
  
  @node Attribute Round,Attribute Safe_Emax,Attribute Result,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-round}@anchor{1b7}
  @section Attribute Round
  
  
--- 12019,12025 ----
  see the description of pragma Postcondition.
  
  @node Attribute Round,Attribute Safe_Emax,Attribute Result,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-round}@anchor{1b9}
  @section Attribute Round
  
  
*************** also permits the use of the @code{'Round
*** 11981,11987 ****
  fixed point types.
  
  @node Attribute Safe_Emax,Attribute Safe_Large,Attribute Round,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-safe-emax}@anchor{1b8}
  @section Attribute Safe_Emax
  
  
--- 12030,12036 ----
  fixed point types.
  
  @node Attribute Safe_Emax,Attribute Safe_Large,Attribute Round,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-safe-emax}@anchor{1ba}
  @section Attribute Safe_Emax
  
  
*************** the Ada 83 reference manual for an exact
*** 11994,12000 ****
  this attribute.
  
  @node Attribute Safe_Large,Attribute Safe_Small,Attribute Safe_Emax,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-safe-large}@anchor{1b9}
  @section Attribute Safe_Large
  
  
--- 12043,12049 ----
  this attribute.
  
  @node Attribute Safe_Large,Attribute Safe_Small,Attribute Safe_Emax,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-safe-large}@anchor{1bb}
  @section Attribute Safe_Large
  
  
*************** the Ada 83 reference manual for an exact
*** 12007,12013 ****
  this attribute.
  
  @node Attribute Safe_Small,Attribute Scalar_Storage_Order,Attribute Safe_Large,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-safe-small}@anchor{1ba}
  @section Attribute Safe_Small
  
  
--- 12056,12062 ----
  this attribute.
  
  @node Attribute Safe_Small,Attribute Scalar_Storage_Order,Attribute Safe_Large,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-safe-small}@anchor{1bc}
  @section Attribute Safe_Small
  
  
*************** the Ada 83 reference manual for an exact
*** 12020,12026 ****
  this attribute.
  
  @node Attribute Scalar_Storage_Order,Attribute Simple_Storage_Pool,Attribute Safe_Small,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-scalar-storage-order}@anchor{169}@anchor{gnat_rm/implementation_defined_attributes id4}@anchor{1bb}
  @section Attribute Scalar_Storage_Order
  
  
--- 12069,12075 ----
  this attribute.
  
  @node Attribute Scalar_Storage_Order,Attribute Simple_Storage_Pool,Attribute Safe_Small,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-scalar-storage-order}@anchor{16b}@anchor{gnat_rm/implementation_defined_attributes id4}@anchor{1bd}
  @section Attribute Scalar_Storage_Order
  
  
*************** Note that debuggers may be unable to dis
*** 12183,12189 ****
  components of a type for which the opposite storage order is specified.
  
  @node Attribute Simple_Storage_Pool,Attribute Small,Attribute Scalar_Storage_Order,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-simple-storage-pool}@anchor{f4}@anchor{gnat_rm/implementation_defined_attributes id5}@anchor{1bc}
  @section Attribute Simple_Storage_Pool
  
  
--- 12232,12238 ----
  components of a type for which the opposite storage order is specified.
  
  @node Attribute Simple_Storage_Pool,Attribute Small,Attribute Scalar_Storage_Order,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-simple-storage-pool}@anchor{f5}@anchor{gnat_rm/implementation_defined_attributes id5}@anchor{1be}
  @section Attribute Simple_Storage_Pool
  
  
*************** as defined in section 13.11.2 of the Ada
*** 12246,12252 ****
  term `simple storage pool' is substituted for `storage pool'.
  
  @node Attribute Small,Attribute Small_Denominator,Attribute Simple_Storage_Pool,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-small}@anchor{1bd}
  @section Attribute Small
  
  
--- 12295,12301 ----
  term `simple storage pool' is substituted for `storage pool'.
  
  @node Attribute Small,Attribute Small_Denominator,Attribute Simple_Storage_Pool,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-small}@anchor{1bf}
  @section Attribute Small
  
  
*************** the Ada 83 reference manual for an exact
*** 12262,12268 ****
  this attribute when applied to floating-point types.
  
  @node Attribute Small_Denominator,Attribute Small_Numerator,Attribute Small,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-small-denominator}@anchor{1be}
  @section Attribute Small_Denominator
  
  
--- 12311,12317 ----
  this attribute when applied to floating-point types.
  
  @node Attribute Small_Denominator,Attribute Small_Numerator,Attribute Small,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-small-denominator}@anchor{1c0}
  @section Attribute Small_Denominator
  
  
*************** denominator in the representation of @co
*** 12275,12281 ****
  with coprime factors (i.e. as an irreducible fraction).
  
  @node Attribute Small_Numerator,Attribute Storage_Unit,Attribute Small_Denominator,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-small-numerator}@anchor{1bf}
  @section Attribute Small_Numerator
  
  
--- 12324,12330 ----
  with coprime factors (i.e. as an irreducible fraction).
  
  @node Attribute Small_Numerator,Attribute Storage_Unit,Attribute Small_Denominator,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-small-numerator}@anchor{1c1}
  @section Attribute Small_Numerator
  
  
*************** numerator in the representation of @code
*** 12288,12294 ****
  with coprime factors (i.e. as an irreducible fraction).
  
  @node Attribute Storage_Unit,Attribute Stub_Type,Attribute Small_Numerator,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-storage-unit}@anchor{1c0}
  @section Attribute Storage_Unit
  
  
--- 12337,12343 ----
  with coprime factors (i.e. as an irreducible fraction).
  
  @node Attribute Storage_Unit,Attribute Stub_Type,Attribute Small_Numerator,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-storage-unit}@anchor{1c2}
  @section Attribute Storage_Unit
  
  
*************** with coprime factors (i.e. as an irreduc
*** 12298,12304 ****
  prefix) provides the same value as @code{System.Storage_Unit}.
  
  @node Attribute Stub_Type,Attribute System_Allocator_Alignment,Attribute Storage_Unit,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-stub-type}@anchor{1c1}
  @section Attribute Stub_Type
  
  
--- 12347,12353 ----
  prefix) provides the same value as @code{System.Storage_Unit}.
  
  @node Attribute Stub_Type,Attribute System_Allocator_Alignment,Attribute Storage_Unit,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-stub-type}@anchor{1c3}
  @section Attribute Stub_Type
  
  
*************** unit @code{System.Partition_Interface}.
*** 12322,12328 ****
  an implicit dependency on this unit.
  
  @node Attribute System_Allocator_Alignment,Attribute Target_Name,Attribute Stub_Type,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-system-allocator-alignment}@anchor{1c2}
  @section Attribute System_Allocator_Alignment
  
  
--- 12371,12377 ----
  an implicit dependency on this unit.
  
  @node Attribute System_Allocator_Alignment,Attribute Target_Name,Attribute Stub_Type,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-system-allocator-alignment}@anchor{1c4}
  @section Attribute System_Allocator_Alignment
  
  
*************** with alignment too large or to enable a
*** 12339,12345 ****
  alignment request is larger than this value.
  
  @node Attribute Target_Name,Attribute To_Address,Attribute System_Allocator_Alignment,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-target-name}@anchor{1c3}
  @section Attribute Target_Name
  
  
--- 12388,12394 ----
  alignment request is larger than this value.
  
  @node Attribute Target_Name,Attribute To_Address,Attribute System_Allocator_Alignment,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-target-name}@anchor{1c5}
  @section Attribute Target_Name
  
  
*************** standard gcc target name without the ter
*** 12352,12358 ****
  example, GNAT 5.0 on windows yields “i586-pc-mingw32msv”).
  
  @node Attribute To_Address,Attribute To_Any,Attribute Target_Name,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-to-address}@anchor{1c4}
  @section Attribute To_Address
  
  
--- 12401,12407 ----
  example, GNAT 5.0 on windows yields “i586-pc-mingw32msv”).
  
  @node Attribute To_Address,Attribute To_Any,Attribute Target_Name,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-to-address}@anchor{1c6}
  @section Attribute To_Address
  
  
*************** modular manner (e.g., -1 means the same
*** 12375,12381 ****
  a 32 bits machine).
  
  @node Attribute To_Any,Attribute Type_Class,Attribute To_Address,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-to-any}@anchor{1c5}
  @section Attribute To_Any
  
  
--- 12424,12430 ----
  a 32 bits machine).
  
  @node Attribute To_Any,Attribute Type_Class,Attribute To_Address,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-to-any}@anchor{1c7}
  @section Attribute To_Any
  
  
*************** This internal attribute is used for the
*** 12385,12391 ****
  stubs in the context of the Distributed Systems Annex.
  
  @node Attribute Type_Class,Attribute Type_Key,Attribute To_Any,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-type-class}@anchor{1c6}
  @section Attribute Type_Class
  
  
--- 12434,12440 ----
  stubs in the context of the Distributed Systems Annex.
  
  @node Attribute Type_Class,Attribute Type_Key,Attribute To_Any,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-type-class}@anchor{1c8}
  @section Attribute Type_Class
  
  
*************** applies to all concurrent types.  This a
*** 12415,12421 ****
  be compatible with the DEC Ada 83 attribute of the same name.
  
  @node Attribute Type_Key,Attribute TypeCode,Attribute Type_Class,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-type-key}@anchor{1c7}
  @section Attribute Type_Key
  
  
--- 12464,12470 ----
  be compatible with the DEC Ada 83 attribute of the same name.
  
  @node Attribute Type_Key,Attribute TypeCode,Attribute Type_Class,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-type-key}@anchor{1c9}
  @section Attribute Type_Key
  
  
*************** about the type or subtype. This provides
*** 12427,12433 ****
  other implementations that support this attribute.
  
  @node Attribute TypeCode,Attribute Unconstrained_Array,Attribute Type_Key,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-typecode}@anchor{1c8}
  @section Attribute TypeCode
  
  
--- 12476,12482 ----
  other implementations that support this attribute.
  
  @node Attribute TypeCode,Attribute Unconstrained_Array,Attribute Type_Key,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-typecode}@anchor{1ca}
  @section Attribute TypeCode
  
  
*************** This internal attribute is used for the
*** 12437,12443 ****
  stubs in the context of the Distributed Systems Annex.
  
  @node Attribute Unconstrained_Array,Attribute Universal_Literal_String,Attribute TypeCode,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-unconstrained-array}@anchor{1c9}
  @section Attribute Unconstrained_Array
  
  
--- 12486,12492 ----
  stubs in the context of the Distributed Systems Annex.
  
  @node Attribute Unconstrained_Array,Attribute Universal_Literal_String,Attribute TypeCode,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-unconstrained-array}@anchor{1cb}
  @section Attribute Unconstrained_Array
  
  
*************** still static, and yields the result of a
*** 12451,12457 ****
  generic actual.
  
  @node Attribute Universal_Literal_String,Attribute Unrestricted_Access,Attribute Unconstrained_Array,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-universal-literal-string}@anchor{1ca}
  @section Attribute Universal_Literal_String
  
  
--- 12500,12506 ----
  generic actual.
  
  @node Attribute Universal_Literal_String,Attribute Unrestricted_Access,Attribute Unconstrained_Array,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-universal-literal-string}@anchor{1cc}
  @section Attribute Universal_Literal_String
  
  
*************** end;
*** 12479,12485 ****
  @end example
  
  @node Attribute Unrestricted_Access,Attribute Update,Attribute Universal_Literal_String,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-unrestricted-access}@anchor{1cb}
  @section Attribute Unrestricted_Access
  
  
--- 12528,12534 ----
  @end example
  
  @node Attribute Unrestricted_Access,Attribute Update,Attribute Universal_Literal_String,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-unrestricted-access}@anchor{1cd}
  @section Attribute Unrestricted_Access
  
  
*************** In general this is a risky approach. It
*** 12666,12672 ****
  of GNAT to another, so are best avoided if possible.
  
  @node Attribute Update,Attribute Valid_Value,Attribute Unrestricted_Access,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-update}@anchor{1cc}
  @section Attribute Update
  
  
--- 12715,12721 ----
  of GNAT to another, so are best avoided if possible.
  
  @node Attribute Update,Attribute Valid_Value,Attribute Unrestricted_Access,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-update}@anchor{1ce}
  @section Attribute Update
  
  
*************** A := A'Update ((1, 2) => 20, (3, 4) => 3
*** 12747,12753 ****
  which changes element (1,2) to 20 and (3,4) to 30.
  
  @node Attribute Valid_Value,Attribute Valid_Scalars,Attribute Update,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-valid-value}@anchor{1cd}
  @section Attribute Valid_Value
  
  
--- 12796,12802 ----
  which changes element (1,2) to 20 and (3,4) to 30.
  
  @node Attribute Valid_Value,Attribute Valid_Scalars,Attribute Update,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-valid-value}@anchor{1cf}
  @section Attribute Valid_Value
  
  
*************** a function that takes a String, and retu
*** 12759,12765 ****
  returns True if and only if @code{T'Value (S)} would not raise Constraint_Error.
  
  @node Attribute Valid_Scalars,Attribute VADS_Size,Attribute Valid_Value,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-valid-scalars}@anchor{1ce}
  @section Attribute Valid_Scalars
  
  
--- 12808,12814 ----
  returns True if and only if @code{T'Value (S)} would not raise Constraint_Error.
  
  @node Attribute Valid_Scalars,Attribute VADS_Size,Attribute Valid_Value,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-valid-scalars}@anchor{1d0}
  @section Attribute Valid_Scalars
  
  
*************** write a function with a single use of th
*** 12793,12799 ****
  function from multiple places.
  
  @node Attribute VADS_Size,Attribute Value_Size,Attribute Valid_Scalars,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-vads-size}@anchor{1cf}
  @section Attribute VADS_Size
  
  
--- 12842,12848 ----
  function from multiple places.
  
  @node Attribute VADS_Size,Attribute Value_Size,Attribute Valid_Scalars,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-vads-size}@anchor{1d1}
  @section Attribute VADS_Size
  
  
*************** gives the result that would be obtained
*** 12813,12819 ****
  the corresponding type.
  
  @node Attribute Value_Size,Attribute Wchar_T_Size,Attribute VADS_Size,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-value-size}@anchor{17b}@anchor{gnat_rm/implementation_defined_attributes id6}@anchor{1d0}
  @section Attribute Value_Size
  
  
--- 12862,12868 ----
  the corresponding type.
  
  @node Attribute Value_Size,Attribute Wchar_T_Size,Attribute VADS_Size,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-value-size}@anchor{17d}@anchor{gnat_rm/implementation_defined_attributes id6}@anchor{1d2}
  @section Attribute Value_Size
  
  
*************** a value of the given subtype.  It is the
*** 12827,12833 ****
  but, unlike @code{Size}, may be set for non-first subtypes.
  
  @node Attribute Wchar_T_Size,Attribute Word_Size,Attribute Value_Size,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-wchar-t-size}@anchor{1d1}
  @section Attribute Wchar_T_Size
  
  
--- 12876,12882 ----
  but, unlike @code{Size}, may be set for non-first subtypes.
  
  @node Attribute Wchar_T_Size,Attribute Word_Size,Attribute Value_Size,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-wchar-t-size}@anchor{1d3}
  @section Attribute Wchar_T_Size
  
  
*************** primarily for constructing the definitio
*** 12839,12845 ****
  package @code{Interfaces.C}. The result is a static constant.
  
  @node Attribute Word_Size,,Attribute Wchar_T_Size,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-word-size}@anchor{1d2}
  @section Attribute Word_Size
  
  
--- 12888,12894 ----
  package @code{Interfaces.C}. The result is a static constant.
  
  @node Attribute Word_Size,,Attribute Wchar_T_Size,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-word-size}@anchor{1d4}
  @section Attribute Word_Size
  
  
*************** prefix) provides the value @code{System.
*** 12850,12856 ****
  a static constant.
  
  @node Standard and Implementation Defined Restrictions,Implementation Advice,Implementation Defined Attributes,Top
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions doc}@anchor{1d3}@anchor{gnat_rm/standard_and_implementation_defined_restrictions id1}@anchor{1d4}@anchor{gnat_rm/standard_and_implementation_defined_restrictions standard-and-implementation-defined-restrictions}@anchor{9}
  @chapter Standard and Implementation Defined Restrictions
  
  
--- 12899,12905 ----
  a static constant.
  
  @node Standard and Implementation Defined Restrictions,Implementation Advice,Implementation Defined Attributes,Top
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions doc}@anchor{1d5}@anchor{gnat_rm/standard_and_implementation_defined_restrictions id1}@anchor{1d6}@anchor{gnat_rm/standard_and_implementation_defined_restrictions standard-and-implementation-defined-restrictions}@anchor{9}
  @chapter Standard and Implementation Defined Restrictions
  
  
*************** language defined or GNAT-specific, are l
*** 12879,12885 ****
  @end menu
  
  @node Partition-Wide Restrictions,Program Unit Level Restrictions,,Standard and Implementation Defined Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions id2}@anchor{1d5}@anchor{gnat_rm/standard_and_implementation_defined_restrictions partition-wide-restrictions}@anchor{1d6}
  @section Partition-Wide Restrictions
  
  
--- 12928,12934 ----
  @end menu
  
  @node Partition-Wide Restrictions,Program Unit Level Restrictions,,Standard and Implementation Defined Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions id2}@anchor{1d7}@anchor{gnat_rm/standard_and_implementation_defined_restrictions partition-wide-restrictions}@anchor{1d8}
  @section Partition-Wide Restrictions
  
  
*************** then all compilation units in the partit
*** 12972,12978 ****
  @end menu
  
  @node Immediate_Reclamation,Max_Asynchronous_Select_Nesting,,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions immediate-reclamation}@anchor{1d7}
  @subsection Immediate_Reclamation
  
  
--- 13021,13027 ----
  @end menu
  
  @node Immediate_Reclamation,Max_Asynchronous_Select_Nesting,,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions immediate-reclamation}@anchor{1d9}
  @subsection Immediate_Reclamation
  
  
*************** deallocation, any storage reserved at ru
*** 12984,12990 ****
  immediately reclaimed when the object no longer exists.
  
  @node Max_Asynchronous_Select_Nesting,Max_Entry_Queue_Length,Immediate_Reclamation,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions max-asynchronous-select-nesting}@anchor{1d8}
  @subsection Max_Asynchronous_Select_Nesting
  
  
--- 13033,13039 ----
  immediately reclaimed when the object no longer exists.
  
  @node Max_Asynchronous_Select_Nesting,Max_Entry_Queue_Length,Immediate_Reclamation,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions max-asynchronous-select-nesting}@anchor{1da}
  @subsection Max_Asynchronous_Select_Nesting
  
  
*************** detected at compile time. Violations of
*** 12996,13002 ****
  other than zero cause Storage_Error to be raised.
  
  @node Max_Entry_Queue_Length,Max_Protected_Entries,Max_Asynchronous_Select_Nesting,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions max-entry-queue-length}@anchor{1d9}
  @subsection Max_Entry_Queue_Length
  
  
--- 13045,13051 ----
  other than zero cause Storage_Error to be raised.
  
  @node Max_Entry_Queue_Length,Max_Protected_Entries,Max_Asynchronous_Select_Nesting,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions max-entry-queue-length}@anchor{1db}
  @subsection Max_Entry_Queue_Length
  
  
*************** compatibility purposes (and a warning wi
*** 13017,13023 ****
  warnings on obsolescent features are activated).
  
  @node Max_Protected_Entries,Max_Select_Alternatives,Max_Entry_Queue_Length,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions max-protected-entries}@anchor{1da}
  @subsection Max_Protected_Entries
  
  
--- 13066,13072 ----
  warnings on obsolescent features are activated).
  
  @node Max_Protected_Entries,Max_Select_Alternatives,Max_Entry_Queue_Length,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions max-protected-entries}@anchor{1dc}
  @subsection Max_Protected_Entries
  
  
*************** bounds of every entry family of a protec
*** 13028,13034 ****
  defined by a discriminant of a subtype whose corresponding bound is static.
  
  @node Max_Select_Alternatives,Max_Storage_At_Blocking,Max_Protected_Entries,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions max-select-alternatives}@anchor{1db}
  @subsection Max_Select_Alternatives
  
  
--- 13077,13083 ----
  defined by a discriminant of a subtype whose corresponding bound is static.
  
  @node Max_Select_Alternatives,Max_Storage_At_Blocking,Max_Protected_Entries,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions max-select-alternatives}@anchor{1dd}
  @subsection Max_Select_Alternatives
  
  
*************** defined by a discriminant of a subtype w
*** 13037,13043 ****
  [RM D.7] Specifies the maximum number of alternatives in a selective accept.
  
  @node Max_Storage_At_Blocking,Max_Task_Entries,Max_Select_Alternatives,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions max-storage-at-blocking}@anchor{1dc}
  @subsection Max_Storage_At_Blocking
  
  
--- 13086,13092 ----
  [RM D.7] Specifies the maximum number of alternatives in a selective accept.
  
  @node Max_Storage_At_Blocking,Max_Task_Entries,Max_Select_Alternatives,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions max-storage-at-blocking}@anchor{1de}
  @subsection Max_Storage_At_Blocking
  
  
*************** Storage_Size that can be retained by a b
*** 13048,13054 ****
  restriction causes Storage_Error to be raised.
  
  @node Max_Task_Entries,Max_Tasks,Max_Storage_At_Blocking,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions max-task-entries}@anchor{1dd}
  @subsection Max_Task_Entries
  
  
--- 13097,13103 ----
  restriction causes Storage_Error to be raised.
  
  @node Max_Task_Entries,Max_Tasks,Max_Storage_At_Blocking,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions max-task-entries}@anchor{1df}
  @subsection Max_Task_Entries
  
  
*************** defined by a discriminant of a subtype w
*** 13061,13067 ****
  corresponding bound is static.
  
  @node Max_Tasks,No_Abort_Statements,Max_Task_Entries,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions max-tasks}@anchor{1de}
  @subsection Max_Tasks
  
  
--- 13110,13116 ----
  corresponding bound is static.
  
  @node Max_Tasks,No_Abort_Statements,Max_Task_Entries,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions max-tasks}@anchor{1e0}
  @subsection Max_Tasks
  
  
*************** zero are detected for library-level task
*** 13075,13081 ****
  not detected for local tasks at all.
  
  @node No_Abort_Statements,No_Access_Parameter_Allocators,Max_Tasks,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-abort-statements}@anchor{1df}
  @subsection No_Abort_Statements
  
  
--- 13124,13130 ----
  not detected for local tasks at all.
  
  @node No_Abort_Statements,No_Access_Parameter_Allocators,Max_Tasks,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-abort-statements}@anchor{1e1}
  @subsection No_Abort_Statements
  
  
*************** not detected for local tasks at all.
*** 13085,13091 ****
  no calls to Task_Identification.Abort_Task.
  
  @node No_Access_Parameter_Allocators,No_Access_Subprograms,No_Abort_Statements,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-access-parameter-allocators}@anchor{1e0}
  @subsection No_Access_Parameter_Allocators
  
  
--- 13134,13140 ----
  no calls to Task_Identification.Abort_Task.
  
  @node No_Access_Parameter_Allocators,No_Access_Subprograms,No_Abort_Statements,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-access-parameter-allocators}@anchor{1e2}
  @subsection No_Access_Parameter_Allocators
  
  
*************** occurrences of an allocator as the actua
*** 13096,13102 ****
  parameter.
  
  @node No_Access_Subprograms,No_Allocators,No_Access_Parameter_Allocators,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-access-subprograms}@anchor{1e1}
  @subsection No_Access_Subprograms
  
  
--- 13145,13151 ----
  parameter.
  
  @node No_Access_Subprograms,No_Allocators,No_Access_Parameter_Allocators,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-access-subprograms}@anchor{1e3}
  @subsection No_Access_Subprograms
  
  
*************** parameter.
*** 13106,13112 ****
  declarations of access-to-subprogram types.
  
  @node No_Allocators,No_Anonymous_Allocators,No_Access_Subprograms,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-allocators}@anchor{1e2}
  @subsection No_Allocators
  
  
--- 13155,13161 ----
  declarations of access-to-subprogram types.
  
  @node No_Allocators,No_Anonymous_Allocators,No_Access_Subprograms,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-allocators}@anchor{1e4}
  @subsection No_Allocators
  
  
*************** declarations of access-to-subprogram typ
*** 13116,13122 ****
  occurrences of an allocator.
  
  @node No_Anonymous_Allocators,No_Asynchronous_Control,No_Allocators,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-anonymous-allocators}@anchor{1e3}
  @subsection No_Anonymous_Allocators
  
  
--- 13165,13171 ----
  occurrences of an allocator.
  
  @node No_Anonymous_Allocators,No_Asynchronous_Control,No_Allocators,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-anonymous-allocators}@anchor{1e5}
  @subsection No_Anonymous_Allocators
  
  
*************** occurrences of an allocator.
*** 13126,13132 ****
  occurrences of an allocator of anonymous access type.
  
  @node No_Asynchronous_Control,No_Calendar,No_Anonymous_Allocators,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-asynchronous-control}@anchor{1e4}
  @subsection No_Asynchronous_Control
  
  
--- 13175,13181 ----
  occurrences of an allocator of anonymous access type.
  
  @node No_Asynchronous_Control,No_Calendar,No_Anonymous_Allocators,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-asynchronous-control}@anchor{1e6}
  @subsection No_Asynchronous_Control
  
  
*************** occurrences of an allocator of anonymous
*** 13136,13142 ****
  dependences on the predefined package Asynchronous_Task_Control.
  
  @node No_Calendar,No_Coextensions,No_Asynchronous_Control,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-calendar}@anchor{1e5}
  @subsection No_Calendar
  
  
--- 13185,13191 ----
  dependences on the predefined package Asynchronous_Task_Control.
  
  @node No_Calendar,No_Coextensions,No_Asynchronous_Control,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-calendar}@anchor{1e7}
  @subsection No_Calendar
  
  
*************** dependences on the predefined package As
*** 13146,13152 ****
  dependences on package Calendar.
  
  @node No_Coextensions,No_Default_Initialization,No_Calendar,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-coextensions}@anchor{1e6}
  @subsection No_Coextensions
  
  
--- 13195,13201 ----
  dependences on package Calendar.
  
  @node No_Coextensions,No_Default_Initialization,No_Calendar,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-coextensions}@anchor{1e8}
  @subsection No_Coextensions
  
  
*************** dependences on package Calendar.
*** 13156,13162 ****
  coextensions. See 3.10.2.
  
  @node No_Default_Initialization,No_Delay,No_Coextensions,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-default-initialization}@anchor{1e7}
  @subsection No_Default_Initialization
  
  
--- 13205,13211 ----
  coextensions. See 3.10.2.
  
  @node No_Default_Initialization,No_Delay,No_Coextensions,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-default-initialization}@anchor{1e9}
  @subsection No_Default_Initialization
  
  
*************** is to prohibit all cases of variables de
*** 13173,13179 ****
  initializer (including the case of OUT scalar parameters).
  
  @node No_Delay,No_Dependence,No_Default_Initialization,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-delay}@anchor{1e8}
  @subsection No_Delay
  
  
--- 13222,13228 ----
  initializer (including the case of OUT scalar parameters).
  
  @node No_Delay,No_Dependence,No_Default_Initialization,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-delay}@anchor{1ea}
  @subsection No_Delay
  
  
*************** initializer (including the case of OUT s
*** 13183,13189 ****
  delay statements and no semantic dependences on package Calendar.
  
  @node No_Dependence,No_Direct_Boolean_Operators,No_Delay,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dependence}@anchor{1e9}
  @subsection No_Dependence
  
  
--- 13232,13238 ----
  delay statements and no semantic dependences on package Calendar.
  
  @node No_Dependence,No_Direct_Boolean_Operators,No_Delay,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dependence}@anchor{1eb}
  @subsection No_Dependence
  
  
*************** to support specific constructs of the la
*** 13226,13232 ****
  @end itemize
  
  @node No_Direct_Boolean_Operators,No_Dispatch,No_Dependence,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-direct-boolean-operators}@anchor{1ea}
  @subsection No_Direct_Boolean_Operators
  
  
--- 13275,13281 ----
  @end itemize
  
  @node No_Direct_Boolean_Operators,No_Dispatch,No_Dependence,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-direct-boolean-operators}@anchor{1ec}
  @subsection No_Direct_Boolean_Operators
  
  
*************** protocol requires the use of short-circu
*** 13239,13245 ****
  composite boolean operations.
  
  @node No_Dispatch,No_Dispatching_Calls,No_Direct_Boolean_Operators,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dispatch}@anchor{1eb}
  @subsection No_Dispatch
  
  
--- 13288,13294 ----
  composite boolean operations.
  
  @node No_Dispatch,No_Dispatching_Calls,No_Direct_Boolean_Operators,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dispatch}@anchor{1ed}
  @subsection No_Dispatch
  
  
*************** composite boolean operations.
*** 13249,13255 ****
  occurrences of @code{T'Class}, for any (tagged) subtype @code{T}.
  
  @node No_Dispatching_Calls,No_Dynamic_Attachment,No_Dispatch,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dispatching-calls}@anchor{1ec}
  @subsection No_Dispatching_Calls
  
  
--- 13298,13304 ----
  occurrences of @code{T'Class}, for any (tagged) subtype @code{T}.
  
  @node No_Dispatching_Calls,No_Dynamic_Attachment,No_Dispatch,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dispatching-calls}@anchor{1ee}
  @subsection No_Dispatching_Calls
  
  
*************** end Example;
*** 13310,13316 ****
  @end example
  
  @node No_Dynamic_Attachment,No_Dynamic_Priorities,No_Dispatching_Calls,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-attachment}@anchor{1ed}
  @subsection No_Dynamic_Attachment
  
  
--- 13359,13365 ----
  @end example
  
  @node No_Dynamic_Attachment,No_Dynamic_Priorities,No_Dispatching_Calls,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-attachment}@anchor{1ef}
  @subsection No_Dynamic_Attachment
  
  
*************** compatibility purposes (and a warning wi
*** 13329,13335 ****
  warnings on obsolescent features are activated).
  
  @node No_Dynamic_Priorities,No_Entry_Calls_In_Elaboration_Code,No_Dynamic_Attachment,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-priorities}@anchor{1ee}
  @subsection No_Dynamic_Priorities
  
  
--- 13378,13384 ----
  warnings on obsolescent features are activated).
  
  @node No_Dynamic_Priorities,No_Entry_Calls_In_Elaboration_Code,No_Dynamic_Attachment,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-priorities}@anchor{1f0}
  @subsection No_Dynamic_Priorities
  
  
*************** warnings on obsolescent features are act
*** 13338,13344 ****
  [RM D.7] There are no semantic dependencies on the package Dynamic_Priorities.
  
  @node No_Entry_Calls_In_Elaboration_Code,No_Enumeration_Maps,No_Dynamic_Priorities,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-entry-calls-in-elaboration-code}@anchor{1ef}
  @subsection No_Entry_Calls_In_Elaboration_Code
  
  
--- 13387,13393 ----
  [RM D.7] There are no semantic dependencies on the package Dynamic_Priorities.
  
  @node No_Entry_Calls_In_Elaboration_Code,No_Enumeration_Maps,No_Dynamic_Priorities,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-entry-calls-in-elaboration-code}@anchor{1f1}
  @subsection No_Entry_Calls_In_Elaboration_Code
  
  
*************** restriction, the compiler can assume tha
*** 13350,13356 ****
  in a task can be executed at elaboration time.
  
  @node No_Enumeration_Maps,No_Exception_Handlers,No_Entry_Calls_In_Elaboration_Code,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-enumeration-maps}@anchor{1f0}
  @subsection No_Enumeration_Maps
  
  
--- 13399,13405 ----
  in a task can be executed at elaboration time.
  
  @node No_Enumeration_Maps,No_Exception_Handlers,No_Entry_Calls_In_Elaboration_Code,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-enumeration-maps}@anchor{1f2}
  @subsection No_Enumeration_Maps
  
  
*************** enumeration maps are used (that is Image
*** 13361,13367 ****
  to enumeration types).
  
  @node No_Exception_Handlers,No_Exception_Propagation,No_Enumeration_Maps,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-handlers}@anchor{1f1}
  @subsection No_Exception_Handlers
  
  
--- 13410,13416 ----
  to enumeration types).
  
  @node No_Exception_Handlers,No_Exception_Propagation,No_Enumeration_Maps,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-handlers}@anchor{1f3}
  @subsection No_Exception_Handlers
  
  
*************** the raise statement generated by the com
*** 13386,13392 ****
  represents the line number in the source program where the raise occurs.
  
  @node No_Exception_Propagation,No_Exception_Registration,No_Exception_Handlers,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-propagation}@anchor{1f2}
  @subsection No_Exception_Propagation
  
  
--- 13435,13441 ----
  represents the line number in the source program where the raise occurs.
  
  @node No_Exception_Propagation,No_Exception_Registration,No_Exception_Handlers,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-propagation}@anchor{1f4}
  @subsection No_Exception_Propagation
  
  
*************** the package GNAT.Current_Exception is no
*** 13403,13409 ****
  statements (raise with no operand) are not permitted.
  
  @node No_Exception_Registration,No_Exceptions,No_Exception_Propagation,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-registration}@anchor{1f3}
  @subsection No_Exception_Registration
  
  
--- 13452,13458 ----
  statements (raise with no operand) are not permitted.
  
  @node No_Exception_Registration,No_Exceptions,No_Exception_Propagation,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-registration}@anchor{1f5}
  @subsection No_Exception_Registration
  
  
*************** code is simplified by omitting the other
*** 13417,13423 ****
  of exceptions when they are declared.
  
  @node No_Exceptions,No_Finalization,No_Exception_Registration,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exceptions}@anchor{1f4}
  @subsection No_Exceptions
  
  
--- 13466,13472 ----
  of exceptions when they are declared.
  
  @node No_Exceptions,No_Finalization,No_Exception_Registration,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exceptions}@anchor{1f6}
  @subsection No_Exceptions
  
  
*************** raise statements and no exception handle
*** 13428,13434 ****
  generation of language-defined run-time checks.
  
  @node No_Finalization,No_Fixed_Point,No_Exceptions,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-finalization}@anchor{1f5}
  @subsection No_Finalization
  
  
--- 13477,13483 ----
  generation of language-defined run-time checks.
  
  @node No_Finalization,No_Fixed_Point,No_Exceptions,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-finalization}@anchor{1f7}
  @subsection No_Finalization
  
  
*************** object or a nested component, either dec
*** 13469,13475 ****
  deallocation of a controlled object no longer finalizes its contents.
  
  @node No_Fixed_Point,No_Floating_Point,No_Finalization,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-fixed-point}@anchor{1f6}
  @subsection No_Fixed_Point
  
  
--- 13518,13524 ----
  deallocation of a controlled object no longer finalizes its contents.
  
  @node No_Fixed_Point,No_Floating_Point,No_Finalization,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-fixed-point}@anchor{1f8}
  @subsection No_Fixed_Point
  
  
*************** deallocation of a controlled object no l
*** 13479,13485 ****
  occurrences of fixed point types and operations.
  
  @node No_Floating_Point,No_Implicit_Conditionals,No_Fixed_Point,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-floating-point}@anchor{1f7}
  @subsection No_Floating_Point
  
  
--- 13528,13534 ----
  occurrences of fixed point types and operations.
  
  @node No_Floating_Point,No_Implicit_Conditionals,No_Fixed_Point,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-floating-point}@anchor{1f9}
  @subsection No_Floating_Point
  
  
*************** occurrences of fixed point types and ope
*** 13489,13495 ****
  occurrences of floating point types and operations.
  
  @node No_Implicit_Conditionals,No_Implicit_Dynamic_Code,No_Floating_Point,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-conditionals}@anchor{1f8}
  @subsection No_Implicit_Conditionals
  
  
--- 13538,13544 ----
  occurrences of floating point types and operations.
  
  @node No_Implicit_Conditionals,No_Implicit_Dynamic_Code,No_Floating_Point,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-conditionals}@anchor{1fa}
  @subsection No_Implicit_Conditionals
  
  
*************** normal manner. Constructs generating imp
*** 13505,13511 ****
  of composite objects and the Max/Min attributes.
  
  @node No_Implicit_Dynamic_Code,No_Implicit_Heap_Allocations,No_Implicit_Conditionals,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-dynamic-code}@anchor{1f9}
  @subsection No_Implicit_Dynamic_Code
  
  
--- 13554,13560 ----
  of composite objects and the Max/Min attributes.
  
  @node No_Implicit_Dynamic_Code,No_Implicit_Heap_Allocations,No_Implicit_Conditionals,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-dynamic-code}@anchor{1fb}
  @subsection No_Implicit_Dynamic_Code
  
  
*************** foreign-language convention; primitive o
*** 13535,13541 ****
  types.
  
  @node No_Implicit_Heap_Allocations,No_Implicit_Protected_Object_Allocations,No_Implicit_Dynamic_Code,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-heap-allocations}@anchor{1fa}
  @subsection No_Implicit_Heap_Allocations
  
  
--- 13584,13590 ----
  types.
  
  @node No_Implicit_Heap_Allocations,No_Implicit_Protected_Object_Allocations,No_Implicit_Dynamic_Code,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-heap-allocations}@anchor{1fc}
  @subsection No_Implicit_Heap_Allocations
  
  
*************** types.
*** 13544,13550 ****
  [RM D.7] No constructs are allowed to cause implicit heap allocation.
  
  @node No_Implicit_Protected_Object_Allocations,No_Implicit_Task_Allocations,No_Implicit_Heap_Allocations,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-protected-object-allocations}@anchor{1fb}
  @subsection No_Implicit_Protected_Object_Allocations
  
  
--- 13593,13599 ----
  [RM D.7] No constructs are allowed to cause implicit heap allocation.
  
  @node No_Implicit_Protected_Object_Allocations,No_Implicit_Task_Allocations,No_Implicit_Heap_Allocations,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-protected-object-allocations}@anchor{1fd}
  @subsection No_Implicit_Protected_Object_Allocations
  
  
*************** types.
*** 13554,13560 ****
  protected object.
  
  @node No_Implicit_Task_Allocations,No_Initialize_Scalars,No_Implicit_Protected_Object_Allocations,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-task-allocations}@anchor{1fc}
  @subsection No_Implicit_Task_Allocations
  
  
--- 13603,13609 ----
  protected object.
  
  @node No_Implicit_Task_Allocations,No_Initialize_Scalars,No_Implicit_Protected_Object_Allocations,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-task-allocations}@anchor{1fe}
  @subsection No_Implicit_Task_Allocations
  
  
*************** protected object.
*** 13563,13569 ****
  [GNAT] No constructs are allowed to cause implicit heap allocation of a task.
  
  @node No_Initialize_Scalars,No_IO,No_Implicit_Task_Allocations,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-initialize-scalars}@anchor{1fd}
  @subsection No_Initialize_Scalars
  
  
--- 13612,13618 ----
  [GNAT] No constructs are allowed to cause implicit heap allocation of a task.
  
  @node No_Initialize_Scalars,No_IO,No_Implicit_Task_Allocations,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-initialize-scalars}@anchor{1ff}
  @subsection No_Initialize_Scalars
  
  
*************** code, and in particular eliminates dummy
*** 13575,13581 ****
  are otherwise generated for some record and array types.
  
  @node No_IO,No_Local_Allocators,No_Initialize_Scalars,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-io}@anchor{1fe}
  @subsection No_IO
  
  
--- 13624,13630 ----
  are otherwise generated for some record and array types.
  
  @node No_IO,No_Local_Allocators,No_Initialize_Scalars,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-io}@anchor{200}
  @subsection No_IO
  
  
*************** dependences on any of the library units
*** 13586,13592 ****
  Text_IO, Wide_Text_IO, Wide_Wide_Text_IO, or Stream_IO.
  
  @node No_Local_Allocators,No_Local_Protected_Objects,No_IO,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-allocators}@anchor{1ff}
  @subsection No_Local_Allocators
  
  
--- 13635,13641 ----
  Text_IO, Wide_Text_IO, Wide_Wide_Text_IO, or Stream_IO.
  
  @node No_Local_Allocators,No_Local_Protected_Objects,No_IO,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-allocators}@anchor{201}
  @subsection No_Local_Allocators
  
  
*************** occurrences of an allocator in subprogra
*** 13597,13603 ****
  and entry bodies.
  
  @node No_Local_Protected_Objects,No_Local_Tagged_Types,No_Local_Allocators,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-protected-objects}@anchor{200}
  @subsection No_Local_Protected_Objects
  
  
--- 13646,13652 ----
  and entry bodies.
  
  @node No_Local_Protected_Objects,No_Local_Tagged_Types,No_Local_Allocators,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-protected-objects}@anchor{202}
  @subsection No_Local_Protected_Objects
  
  
*************** and entry bodies.
*** 13607,13613 ****
  only declared at the library level.
  
  @node No_Local_Tagged_Types,No_Local_Timing_Events,No_Local_Protected_Objects,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-tagged-types}@anchor{201}
  @subsection No_Local_Tagged_Types
  
  
--- 13656,13662 ----
  only declared at the library level.
  
  @node No_Local_Tagged_Types,No_Local_Timing_Events,No_Local_Protected_Objects,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-tagged-types}@anchor{203}
  @subsection No_Local_Tagged_Types
  
  
*************** only declared at the library level.
*** 13617,13623 ****
  declared at the library level.
  
  @node No_Local_Timing_Events,No_Long_Long_Integers,No_Local_Tagged_Types,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-timing-events}@anchor{202}
  @subsection No_Local_Timing_Events
  
  
--- 13666,13672 ----
  declared at the library level.
  
  @node No_Local_Timing_Events,No_Long_Long_Integers,No_Local_Tagged_Types,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-timing-events}@anchor{204}
  @subsection No_Local_Timing_Events
  
  
*************** declared at the library level.
*** 13627,13633 ****
  declared at the library level.
  
  @node No_Long_Long_Integers,No_Multiple_Elaboration,No_Local_Timing_Events,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-long-long-integers}@anchor{203}
  @subsection No_Long_Long_Integers
  
  
--- 13676,13682 ----
  declared at the library level.
  
  @node No_Long_Long_Integers,No_Multiple_Elaboration,No_Local_Timing_Events,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-long-long-integers}@anchor{205}
  @subsection No_Long_Long_Integers
  
  
*************** implicit base type is Long_Long_Integer,
*** 13639,13645 ****
  Long_Integer’Size.
  
  @node No_Multiple_Elaboration,No_Nested_Finalization,No_Long_Long_Integers,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-multiple-elaboration}@anchor{204}
  @subsection No_Multiple_Elaboration
  
  
--- 13688,13694 ----
  Long_Integer’Size.
  
  @node No_Multiple_Elaboration,No_Nested_Finalization,No_Long_Long_Integers,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-multiple-elaboration}@anchor{206}
  @subsection No_Multiple_Elaboration
  
  
*************** possible, including non-Ada main program
*** 13655,13661 ****
  permitted and will be diagnosed by the binder.
  
  @node No_Nested_Finalization,No_Protected_Type_Allocators,No_Multiple_Elaboration,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-nested-finalization}@anchor{205}
  @subsection No_Nested_Finalization
  
  
--- 13704,13710 ----
  permitted and will be diagnosed by the binder.
  
  @node No_Nested_Finalization,No_Protected_Type_Allocators,No_Multiple_Elaboration,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-nested-finalization}@anchor{207}
  @subsection No_Nested_Finalization
  
  
*************** permitted and will be diagnosed by the b
*** 13664,13670 ****
  [RM D.7] All objects requiring finalization are declared at the library level.
  
  @node No_Protected_Type_Allocators,No_Protected_Types,No_Nested_Finalization,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-protected-type-allocators}@anchor{206}
  @subsection No_Protected_Type_Allocators
  
  
--- 13713,13719 ----
  [RM D.7] All objects requiring finalization are declared at the library level.
  
  @node No_Protected_Type_Allocators,No_Protected_Types,No_Nested_Finalization,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-protected-type-allocators}@anchor{208}
  @subsection No_Protected_Type_Allocators
  
  
*************** permitted and will be diagnosed by the b
*** 13674,13680 ****
  expressions that attempt to allocate protected objects.
  
  @node No_Protected_Types,No_Recursion,No_Protected_Type_Allocators,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-protected-types}@anchor{207}
  @subsection No_Protected_Types
  
  
--- 13723,13729 ----
  expressions that attempt to allocate protected objects.
  
  @node No_Protected_Types,No_Recursion,No_Protected_Type_Allocators,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-protected-types}@anchor{209}
  @subsection No_Protected_Types
  
  
*************** expressions that attempt to allocate pro
*** 13684,13690 ****
  declarations of protected types or protected objects.
  
  @node No_Recursion,No_Reentrancy,No_Protected_Types,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-recursion}@anchor{208}
  @subsection No_Recursion
  
  
--- 13733,13739 ----
  declarations of protected types or protected objects.
  
  @node No_Recursion,No_Reentrancy,No_Protected_Types,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-recursion}@anchor{20a}
  @subsection No_Recursion
  
  
*************** declarations of protected types or prote
*** 13694,13700 ****
  part of its execution.
  
  @node No_Reentrancy,No_Relative_Delay,No_Recursion,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-reentrancy}@anchor{209}
  @subsection No_Reentrancy
  
  
--- 13743,13749 ----
  part of its execution.
  
  @node No_Reentrancy,No_Relative_Delay,No_Recursion,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-reentrancy}@anchor{20b}
  @subsection No_Reentrancy
  
  
*************** part of its execution.
*** 13704,13710 ****
  two tasks at the same time.
  
  @node No_Relative_Delay,No_Requeue_Statements,No_Reentrancy,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-relative-delay}@anchor{20a}
  @subsection No_Relative_Delay
  
  
--- 13753,13759 ----
  two tasks at the same time.
  
  @node No_Relative_Delay,No_Requeue_Statements,No_Reentrancy,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-relative-delay}@anchor{20c}
  @subsection No_Relative_Delay
  
  
*************** relative statements and prevents express
*** 13715,13721 ****
  appearing in source code.
  
  @node No_Requeue_Statements,No_Secondary_Stack,No_Relative_Delay,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-requeue-statements}@anchor{20b}
  @subsection No_Requeue_Statements
  
  
--- 13764,13770 ----
  appearing in source code.
  
  @node No_Requeue_Statements,No_Secondary_Stack,No_Relative_Delay,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-requeue-statements}@anchor{20d}
  @subsection No_Requeue_Statements
  
  
*************** compatibility purposes (and a warning wi
*** 13733,13739 ****
  warnings on oNobsolescent features are activated).
  
  @node No_Secondary_Stack,No_Select_Statements,No_Requeue_Statements,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-secondary-stack}@anchor{20c}
  @subsection No_Secondary_Stack
  
  
--- 13782,13788 ----
  warnings on oNobsolescent features are activated).
  
  @node No_Secondary_Stack,No_Select_Statements,No_Requeue_Statements,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-secondary-stack}@anchor{20e}
  @subsection No_Secondary_Stack
  
  
*************** stack is used to implement functions ret
*** 13746,13752 ****
  secondary stacks for tasks (excluding the environment task) at run time.
  
  @node No_Select_Statements,No_Specific_Termination_Handlers,No_Secondary_Stack,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-select-statements}@anchor{20d}
  @subsection No_Select_Statements
  
  
--- 13795,13801 ----
  secondary stacks for tasks (excluding the environment task) at run time.
  
  @node No_Select_Statements,No_Specific_Termination_Handlers,No_Secondary_Stack,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-select-statements}@anchor{20f}
  @subsection No_Select_Statements
  
  
*************** secondary stacks for tasks (excluding th
*** 13756,13762 ****
  kind are permitted, that is the keyword @code{select} may not appear.
  
  @node No_Specific_Termination_Handlers,No_Specification_of_Aspect,No_Select_Statements,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-specific-termination-handlers}@anchor{20e}
  @subsection No_Specific_Termination_Handlers
  
  
--- 13805,13811 ----
  kind are permitted, that is the keyword @code{select} may not appear.
  
  @node No_Specific_Termination_Handlers,No_Specification_of_Aspect,No_Select_Statements,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-specific-termination-handlers}@anchor{210}
  @subsection No_Specific_Termination_Handlers
  
  
*************** kind are permitted, that is the keyword
*** 13766,13772 ****
  or to Ada.Task_Termination.Specific_Handler.
  
  @node No_Specification_of_Aspect,No_Standard_Allocators_After_Elaboration,No_Specific_Termination_Handlers,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-specification-of-aspect}@anchor{20f}
  @subsection No_Specification_of_Aspect
  
  
--- 13815,13821 ----
  or to Ada.Task_Termination.Specific_Handler.
  
  @node No_Specification_of_Aspect,No_Standard_Allocators_After_Elaboration,No_Specific_Termination_Handlers,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-specification-of-aspect}@anchor{211}
  @subsection No_Specification_of_Aspect
  
  
*************** specification, attribute definition clau
*** 13777,13783 ****
  given aspect.
  
  @node No_Standard_Allocators_After_Elaboration,No_Standard_Storage_Pools,No_Specification_of_Aspect,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-standard-allocators-after-elaboration}@anchor{210}
  @subsection No_Standard_Allocators_After_Elaboration
  
  
--- 13826,13832 ----
  given aspect.
  
  @node No_Standard_Allocators_After_Elaboration,No_Standard_Storage_Pools,No_Specification_of_Aspect,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-standard-allocators-after-elaboration}@anchor{212}
  @subsection No_Standard_Allocators_After_Elaboration
  
  
*************** library items of the partition has compl
*** 13789,13795 ****
  is raised.
  
  @node No_Standard_Storage_Pools,No_Stream_Optimizations,No_Standard_Allocators_After_Elaboration,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-standard-storage-pools}@anchor{211}
  @subsection No_Standard_Storage_Pools
  
  
--- 13838,13844 ----
  is raised.
  
  @node No_Standard_Storage_Pools,No_Stream_Optimizations,No_Standard_Allocators_After_Elaboration,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-standard-storage-pools}@anchor{213}
  @subsection No_Standard_Storage_Pools
  
  
*************** have an explicit Storage_Pool attribute
*** 13801,13807 ****
  user-defined storage pool.
  
  @node No_Stream_Optimizations,No_Streams,No_Standard_Storage_Pools,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-stream-optimizations}@anchor{212}
  @subsection No_Stream_Optimizations
  
  
--- 13850,13856 ----
  user-defined storage pool.
  
  @node No_Stream_Optimizations,No_Streams,No_Standard_Storage_Pools,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-stream-optimizations}@anchor{214}
  @subsection No_Stream_Optimizations
  
  
*************** due to their superior performance. When
*** 13814,13820 ****
  compiler performs all IO operations on a per-character basis.
  
  @node No_Streams,No_Tagged_Type_Registration,No_Stream_Optimizations,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-streams}@anchor{213}
  @subsection No_Streams
  
  
--- 13863,13869 ----
  compiler performs all IO operations on a per-character basis.
  
  @node No_Streams,No_Tagged_Type_Registration,No_Stream_Optimizations,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-streams}@anchor{215}
  @subsection No_Streams
  
  
*************** configuration pragmas to avoid exposing
*** 13841,13847 ****
  entire partition.
  
  @node No_Tagged_Type_Registration,No_Task_Allocators,No_Streams,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-tagged-type-registration}@anchor{214}
  @subsection No_Tagged_Type_Registration
  
  
--- 13890,13896 ----
  entire partition.
  
  @node No_Tagged_Type_Registration,No_Task_Allocators,No_Streams,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-tagged-type-registration}@anchor{216}
  @subsection No_Tagged_Type_Registration
  
  
*************** are declared. This restriction may be ne
*** 13856,13862 ****
  the No_Elaboration_Code restriction.
  
  @node No_Task_Allocators,No_Task_At_Interrupt_Priority,No_Tagged_Type_Registration,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-allocators}@anchor{215}
  @subsection No_Task_Allocators
  
  
--- 13905,13911 ----
  the No_Elaboration_Code restriction.
  
  @node No_Task_Allocators,No_Task_At_Interrupt_Priority,No_Tagged_Type_Registration,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-allocators}@anchor{217}
  @subsection No_Task_Allocators
  
  
*************** the No_Elaboration_Code restriction.
*** 13866,13872 ****
  or types containing task subcomponents.
  
  @node No_Task_At_Interrupt_Priority,No_Task_Attributes_Package,No_Task_Allocators,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-at-interrupt-priority}@anchor{216}
  @subsection No_Task_At_Interrupt_Priority
  
  
--- 13915,13921 ----
  or types containing task subcomponents.
  
  @node No_Task_At_Interrupt_Priority,No_Task_Attributes_Package,No_Task_Allocators,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-at-interrupt-priority}@anchor{218}
  @subsection No_Task_At_Interrupt_Priority
  
  
*************** a consequence, the tasks are always crea
*** 13878,13884 ****
  that an interrupt priority.
  
  @node No_Task_Attributes_Package,No_Task_Hierarchy,No_Task_At_Interrupt_Priority,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-attributes-package}@anchor{217}
  @subsection No_Task_Attributes_Package
  
  
--- 13927,13933 ----
  that an interrupt priority.
  
  @node No_Task_Attributes_Package,No_Task_Hierarchy,No_Task_At_Interrupt_Priority,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-attributes-package}@anchor{219}
  @subsection No_Task_Attributes_Package
  
  
*************** compatibility purposes (and a warning wi
*** 13895,13901 ****
  warnings on obsolescent features are activated).
  
  @node No_Task_Hierarchy,No_Task_Termination,No_Task_Attributes_Package,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-hierarchy}@anchor{218}
  @subsection No_Task_Hierarchy
  
  
--- 13944,13950 ----
  warnings on obsolescent features are activated).
  
  @node No_Task_Hierarchy,No_Task_Termination,No_Task_Attributes_Package,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-hierarchy}@anchor{21a}
  @subsection No_Task_Hierarchy
  
  
*************** warnings on obsolescent features are act
*** 13905,13911 ****
  directly on the environment task of the partition.
  
  @node No_Task_Termination,No_Tasking,No_Task_Hierarchy,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-termination}@anchor{219}
  @subsection No_Task_Termination
  
  
--- 13954,13960 ----
  directly on the environment task of the partition.
  
  @node No_Task_Termination,No_Tasking,No_Task_Hierarchy,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-termination}@anchor{21b}
  @subsection No_Task_Termination
  
  
*************** directly on the environment task of the
*** 13914,13920 ****
  [RM D.7] Tasks that terminate are erroneous.
  
  @node No_Tasking,No_Terminate_Alternatives,No_Task_Termination,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-tasking}@anchor{21a}
  @subsection No_Tasking
  
  
--- 13963,13969 ----
  [RM D.7] Tasks that terminate are erroneous.
  
  @node No_Tasking,No_Terminate_Alternatives,No_Task_Termination,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-tasking}@anchor{21c}
  @subsection No_Tasking
  
  
*************** and cause an error message to be output
*** 13927,13933 ****
  binder.
  
  @node No_Terminate_Alternatives,No_Unchecked_Access,No_Tasking,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-terminate-alternatives}@anchor{21b}
  @subsection No_Terminate_Alternatives
  
  
--- 13976,13982 ----
  binder.
  
  @node No_Terminate_Alternatives,No_Unchecked_Access,No_Tasking,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-terminate-alternatives}@anchor{21d}
  @subsection No_Terminate_Alternatives
  
  
*************** binder.
*** 13936,13942 ****
  [RM D.7] There are no selective accepts with terminate alternatives.
  
  @node No_Unchecked_Access,No_Unchecked_Conversion,No_Terminate_Alternatives,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-access}@anchor{21c}
  @subsection No_Unchecked_Access
  
  
--- 13985,13991 ----
  [RM D.7] There are no selective accepts with terminate alternatives.
  
  @node No_Unchecked_Access,No_Unchecked_Conversion,No_Terminate_Alternatives,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-access}@anchor{21e}
  @subsection No_Unchecked_Access
  
  
*************** binder.
*** 13946,13952 ****
  occurrences of the Unchecked_Access attribute.
  
  @node No_Unchecked_Conversion,No_Unchecked_Deallocation,No_Unchecked_Access,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-conversion}@anchor{21d}
  @subsection No_Unchecked_Conversion
  
  
--- 13995,14001 ----
  occurrences of the Unchecked_Access attribute.
  
  @node No_Unchecked_Conversion,No_Unchecked_Deallocation,No_Unchecked_Access,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-conversion}@anchor{21f}
  @subsection No_Unchecked_Conversion
  
  
*************** occurrences of the Unchecked_Access attr
*** 13956,13962 ****
  dependences on the predefined generic function Unchecked_Conversion.
  
  @node No_Unchecked_Deallocation,No_Use_Of_Attribute,No_Unchecked_Conversion,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-deallocation}@anchor{21e}
  @subsection No_Unchecked_Deallocation
  
  
--- 14005,14011 ----
  dependences on the predefined generic function Unchecked_Conversion.
  
  @node No_Unchecked_Deallocation,No_Use_Of_Attribute,No_Unchecked_Conversion,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-deallocation}@anchor{220}
  @subsection No_Unchecked_Deallocation
  
  
*************** dependences on the predefined generic fu
*** 13966,13972 ****
  dependences on the predefined generic procedure Unchecked_Deallocation.
  
  @node No_Use_Of_Attribute,No_Use_Of_Entity,No_Unchecked_Deallocation,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-attribute}@anchor{21f}
  @subsection No_Use_Of_Attribute
  
  
--- 14015,14021 ----
  dependences on the predefined generic procedure Unchecked_Deallocation.
  
  @node No_Use_Of_Attribute,No_Use_Of_Entity,No_Unchecked_Deallocation,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-attribute}@anchor{221}
  @subsection No_Use_Of_Attribute
  
  
*************** dependences on the predefined generic pr
*** 13976,13982 ****
  earlier versions of Ada.
  
  @node No_Use_Of_Entity,No_Use_Of_Pragma,No_Use_Of_Attribute,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-entity}@anchor{220}
  @subsection No_Use_Of_Entity
  
  
--- 14025,14031 ----
  earlier versions of Ada.
  
  @node No_Use_Of_Entity,No_Use_Of_Pragma,No_Use_Of_Attribute,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-entity}@anchor{222}
  @subsection No_Use_Of_Entity
  
  
*************** No_Use_Of_Entity => Ada.Text_IO.Put_Line
*** 13996,14002 ****
  @end example
  
  @node No_Use_Of_Pragma,Pure_Barriers,No_Use_Of_Entity,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-pragma}@anchor{221}
  @subsection No_Use_Of_Pragma
  
  
--- 14045,14051 ----
  @end example
  
  @node No_Use_Of_Pragma,Pure_Barriers,No_Use_Of_Entity,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-pragma}@anchor{223}
  @subsection No_Use_Of_Pragma
  
  
*************** No_Use_Of_Entity => Ada.Text_IO.Put_Line
*** 14006,14012 ****
  earlier versions of Ada.
  
  @node Pure_Barriers,Simple_Barriers,No_Use_Of_Pragma,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions pure-barriers}@anchor{222}
  @subsection Pure_Barriers
  
  
--- 14055,14061 ----
  earlier versions of Ada.
  
  @node Pure_Barriers,Simple_Barriers,No_Use_Of_Pragma,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions pure-barriers}@anchor{224}
  @subsection Pure_Barriers
  
  
*************** but still ensures absence of side effect
*** 14057,14063 ****
  during the evaluation of the barriers.
  
  @node Simple_Barriers,Static_Priorities,Pure_Barriers,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions simple-barriers}@anchor{223}
  @subsection Simple_Barriers
  
  
--- 14106,14112 ----
  during the evaluation of the barriers.
  
  @node Simple_Barriers,Static_Priorities,Pure_Barriers,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions simple-barriers}@anchor{225}
  @subsection Simple_Barriers
  
  
*************** compatibility purposes (and a warning wi
*** 14076,14082 ****
  warnings on obsolescent features are activated).
  
  @node Static_Priorities,Static_Storage_Size,Simple_Barriers,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions static-priorities}@anchor{224}
  @subsection Static_Priorities
  
  
--- 14125,14131 ----
  warnings on obsolescent features are activated).
  
  @node Static_Priorities,Static_Storage_Size,Simple_Barriers,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions static-priorities}@anchor{226}
  @subsection Static_Priorities
  
  
*************** are static, and that there are no depend
*** 14087,14093 ****
  @code{Ada.Dynamic_Priorities}.
  
  @node Static_Storage_Size,,Static_Priorities,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions static-storage-size}@anchor{225}
  @subsection Static_Storage_Size
  
  
--- 14136,14142 ----
  @code{Ada.Dynamic_Priorities}.
  
  @node Static_Storage_Size,,Static_Priorities,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions static-storage-size}@anchor{227}
  @subsection Static_Storage_Size
  
  
*************** are static, and that there are no depend
*** 14097,14103 ****
  in a Storage_Size pragma or attribute definition clause is static.
  
  @node Program Unit Level Restrictions,,Partition-Wide Restrictions,Standard and Implementation Defined Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions id3}@anchor{226}@anchor{gnat_rm/standard_and_implementation_defined_restrictions program-unit-level-restrictions}@anchor{227}
  @section Program Unit Level Restrictions
  
  
--- 14146,14152 ----
  in a Storage_Size pragma or attribute definition clause is static.
  
  @node Program Unit Level Restrictions,,Partition-Wide Restrictions,Standard and Implementation Defined Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions id3}@anchor{228}@anchor{gnat_rm/standard_and_implementation_defined_restrictions program-unit-level-restrictions}@anchor{229}
  @section Program Unit Level Restrictions
  
  
*************** other compilation units in the partition
*** 14128,14134 ****
  @end menu
  
  @node No_Elaboration_Code,No_Dynamic_Accessibility_Checks,,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-elaboration-code}@anchor{228}
  @subsection No_Elaboration_Code
  
  
--- 14177,14183 ----
  @end menu
  
  @node No_Elaboration_Code,No_Dynamic_Accessibility_Checks,,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-elaboration-code}@anchor{22a}
  @subsection No_Elaboration_Code
  
  
*************** associated with the unit. This counter i
*** 14184,14190 ****
  before elaboration and to control multiple elaboration attempts.
  
  @node No_Dynamic_Accessibility_Checks,No_Dynamic_Sized_Objects,No_Elaboration_Code,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-accessibility-checks}@anchor{229}
  @subsection No_Dynamic_Accessibility_Checks
  
  
--- 14233,14239 ----
  before elaboration and to control multiple elaboration attempts.
  
  @node No_Dynamic_Accessibility_Checks,No_Dynamic_Sized_Objects,No_Elaboration_Code,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-accessibility-checks}@anchor{22b}
  @subsection No_Dynamic_Accessibility_Checks
  
  
*************** In all other cases, the level of T is as
*** 14233,14239 ****
  @end itemize
  
  @node No_Dynamic_Sized_Objects,No_Entry_Queue,No_Dynamic_Accessibility_Checks,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-sized-objects}@anchor{22a}
  @subsection No_Dynamic_Sized_Objects
  
  
--- 14282,14288 ----
  @end itemize
  
  @node No_Dynamic_Sized_Objects,No_Entry_Queue,No_Dynamic_Accessibility_Checks,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-sized-objects}@anchor{22c}
  @subsection No_Dynamic_Sized_Objects
  
  
*************** access discriminants. It is often a good
*** 14251,14257 ****
  with No_Secondary_Stack.
  
  @node No_Entry_Queue,No_Implementation_Aspect_Specifications,No_Dynamic_Sized_Objects,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-entry-queue}@anchor{22b}
  @subsection No_Entry_Queue
  
  
--- 14300,14306 ----
  with No_Secondary_Stack.
  
  @node No_Entry_Queue,No_Implementation_Aspect_Specifications,No_Dynamic_Sized_Objects,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-entry-queue}@anchor{22d}
  @subsection No_Entry_Queue
  
  
*************** checked at compile time.  A program exec
*** 14264,14270 ****
  is made to queue a second task on such an entry.
  
  @node No_Implementation_Aspect_Specifications,No_Implementation_Attributes,No_Entry_Queue,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-aspect-specifications}@anchor{22c}
  @subsection No_Implementation_Aspect_Specifications
  
  
--- 14313,14319 ----
  is made to queue a second task on such an entry.
  
  @node No_Implementation_Aspect_Specifications,No_Implementation_Attributes,No_Entry_Queue,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-aspect-specifications}@anchor{22e}
  @subsection No_Implementation_Aspect_Specifications
  
  
*************** GNAT-defined aspects are present.  With
*** 14275,14281 ****
  aspects that can be used are those defined in the Ada Reference Manual.
  
  @node No_Implementation_Attributes,No_Implementation_Identifiers,No_Implementation_Aspect_Specifications,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-attributes}@anchor{22d}
  @subsection No_Implementation_Attributes
  
  
--- 14324,14330 ----
  aspects that can be used are those defined in the Ada Reference Manual.
  
  @node No_Implementation_Attributes,No_Implementation_Identifiers,No_Implementation_Aspect_Specifications,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-attributes}@anchor{22f}
  @subsection No_Implementation_Attributes
  
  
*************** attributes that can be used are those de
*** 14287,14293 ****
  Manual.
  
  @node No_Implementation_Identifiers,No_Implementation_Pragmas,No_Implementation_Attributes,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-identifiers}@anchor{22e}
  @subsection No_Implementation_Identifiers
  
  
--- 14336,14342 ----
  Manual.
  
  @node No_Implementation_Identifiers,No_Implementation_Pragmas,No_Implementation_Attributes,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-identifiers}@anchor{230}
  @subsection No_Implementation_Identifiers
  
  
*************** implementation-defined identifiers (mark
*** 14298,14304 ****
  occur within language-defined packages.
  
  @node No_Implementation_Pragmas,No_Implementation_Restrictions,No_Implementation_Identifiers,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-pragmas}@anchor{22f}
  @subsection No_Implementation_Pragmas
  
  
--- 14347,14353 ----
  occur within language-defined packages.
  
  @node No_Implementation_Pragmas,No_Implementation_Restrictions,No_Implementation_Identifiers,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-pragmas}@anchor{231}
  @subsection No_Implementation_Pragmas
  
  
*************** GNAT-defined pragmas are present.  With
*** 14309,14315 ****
  pragmas that can be used are those defined in the Ada Reference Manual.
  
  @node No_Implementation_Restrictions,No_Implementation_Units,No_Implementation_Pragmas,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-restrictions}@anchor{230}
  @subsection No_Implementation_Restrictions
  
  
--- 14358,14364 ----
  pragmas that can be used are those defined in the Ada Reference Manual.
  
  @node No_Implementation_Restrictions,No_Implementation_Units,No_Implementation_Pragmas,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-restrictions}@anchor{232}
  @subsection No_Implementation_Restrictions
  
  
*************** are present.  With this restriction, the
*** 14321,14327 ****
  that can be used are those defined in the Ada Reference Manual.
  
  @node No_Implementation_Units,No_Implicit_Aliasing,No_Implementation_Restrictions,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-units}@anchor{231}
  @subsection No_Implementation_Units
  
  
--- 14370,14376 ----
  that can be used are those defined in the Ada Reference Manual.
  
  @node No_Implementation_Units,No_Implicit_Aliasing,No_Implementation_Restrictions,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-units}@anchor{233}
  @subsection No_Implementation_Units
  
  
*************** mention in the context clause of any imp
*** 14332,14338 ****
  of packages Ada, Interfaces, or System.
  
  @node No_Implicit_Aliasing,No_Implicit_Loops,No_Implementation_Units,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-aliasing}@anchor{232}
  @subsection No_Implicit_Aliasing
  
  
--- 14381,14387 ----
  of packages Ada, Interfaces, or System.
  
  @node No_Implicit_Aliasing,No_Implicit_Loops,No_Implementation_Units,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-aliasing}@anchor{234}
  @subsection No_Implicit_Aliasing
  
  
*************** to be aliased, and in such cases, it can
*** 14347,14353 ****
  the standard attribute Unchecked_Access which is preferable.
  
  @node No_Implicit_Loops,No_Obsolescent_Features,No_Implicit_Aliasing,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-loops}@anchor{233}
  @subsection No_Implicit_Loops
  
  
--- 14396,14402 ----
  the standard attribute Unchecked_Access which is preferable.
  
  @node No_Implicit_Loops,No_Obsolescent_Features,No_Implicit_Aliasing,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-loops}@anchor{235}
  @subsection No_Implicit_Loops
  
  
*************** arrays larger than about 5000 scalar com
*** 14364,14370 ****
  is set in the spec of a package, it will not apply to its body.
  
  @node No_Obsolescent_Features,No_Wide_Characters,No_Implicit_Loops,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-obsolescent-features}@anchor{234}
  @subsection No_Obsolescent_Features
  
  
--- 14413,14419 ----
  is set in the spec of a package, it will not apply to its body.
  
  @node No_Obsolescent_Features,No_Wide_Characters,No_Implicit_Loops,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-obsolescent-features}@anchor{236}
  @subsection No_Obsolescent_Features
  
  
*************** is set in the spec of a package, it will
*** 14374,14380 ****
  features are used, as defined in Annex J of the Ada Reference Manual.
  
  @node No_Wide_Characters,Static_Dispatch_Tables,No_Obsolescent_Features,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-wide-characters}@anchor{235}
  @subsection No_Wide_Characters
  
  
--- 14423,14429 ----
  features are used, as defined in Annex J of the Ada Reference Manual.
  
  @node No_Wide_Characters,Static_Dispatch_Tables,No_Obsolescent_Features,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-wide-characters}@anchor{237}
  @subsection No_Wide_Characters
  
  
*************** appear in the program (that is literals
*** 14388,14394 ****
  type @code{Character}).
  
  @node Static_Dispatch_Tables,SPARK_05,No_Wide_Characters,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions static-dispatch-tables}@anchor{236}
  @subsection Static_Dispatch_Tables
  
  
--- 14437,14443 ----
  type @code{Character}).
  
  @node Static_Dispatch_Tables,SPARK_05,No_Wide_Characters,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions static-dispatch-tables}@anchor{238}
  @subsection Static_Dispatch_Tables
  
  
*************** type @code{Character}).
*** 14398,14404 ****
  associated with dispatch tables can be placed in read-only memory.
  
  @node SPARK_05,,Static_Dispatch_Tables,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions spark-05}@anchor{237}
  @subsection SPARK_05
  
  
--- 14447,14453 ----
  associated with dispatch tables can be placed in read-only memory.
  
  @node SPARK_05,,Static_Dispatch_Tables,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions spark-05}@anchor{239}
  @subsection SPARK_05
  
  
*************** gnatprove -P project.gpr --mode=check_al
*** 14421,14427 ****
  @end example
  
  @node Implementation Advice,GNAT Implementation Mode the -gnatg switch,Standard and Implementation Defined Restrictions,Top
! @anchor{gnat_rm/implementation_advice doc}@anchor{238}@anchor{gnat_rm/implementation_advice id1}@anchor{239}@anchor{gnat_rm/implementation_advice implementation-advice}@anchor{a}
  @chapter Implementation Advice
  
  
--- 14470,14476 ----
  @end example
  
  @node Implementation Advice,GNAT Implementation Mode the -gnatg switch,Standard and Implementation Defined Restrictions,Top
! @anchor{gnat_rm/implementation_advice doc}@anchor{23a}@anchor{gnat_rm/implementation_advice id1}@anchor{23b}@anchor{gnat_rm/implementation_advice implementation-advice}@anchor{a}
  @chapter Implementation Advice
  
  
*************** case the text describes what GNAT does a
*** 14519,14525 ****
  @end menu
  
  @node RM 1 1 3 20 Error Detection,RM 1 1 3 31 Child Units,,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-1-1-3-20-error-detection}@anchor{23a}
  @section RM 1.1.3(20): Error Detection
  
  
--- 14568,14574 ----
  @end menu
  
  @node RM 1 1 3 20 Error Detection,RM 1 1 3 31 Child Units,,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-1-1-3-20-error-detection}@anchor{23c}
  @section RM 1.1.3(20): Error Detection
  
  
*************** or diagnosed at compile time.
*** 14536,14542 ****
  @geindex Child Units
  
  @node RM 1 1 3 31 Child Units,RM 1 1 5 12 Bounded Errors,RM 1 1 3 20 Error Detection,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-1-1-3-31-child-units}@anchor{23b}
  @section RM 1.1.3(31): Child Units
  
  
--- 14585,14591 ----
  @geindex Child Units
  
  @node RM 1 1 3 31 Child Units,RM 1 1 5 12 Bounded Errors,RM 1 1 3 20 Error Detection,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-1-1-3-31-child-units}@anchor{23d}
  @section RM 1.1.3(31): Child Units
  
  
*************** Followed.
*** 14552,14558 ****
  @geindex Bounded errors
  
  @node RM 1 1 5 12 Bounded Errors,RM 2 8 16 Pragmas,RM 1 1 3 31 Child Units,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-1-1-5-12-bounded-errors}@anchor{23c}
  @section RM 1.1.5(12): Bounded Errors
  
  
--- 14601,14607 ----
  @geindex Bounded errors
  
  @node RM 1 1 5 12 Bounded Errors,RM 2 8 16 Pragmas,RM 1 1 3 31 Child Units,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-1-1-5-12-bounded-errors}@anchor{23e}
  @section RM 1.1.5(12): Bounded Errors
  
  
*************** runtime.
*** 14569,14575 ****
  @geindex Pragmas
  
  @node RM 2 8 16 Pragmas,RM 2 8 17-19 Pragmas,RM 1 1 5 12 Bounded Errors,Implementation Advice
! @anchor{gnat_rm/implementation_advice id2}@anchor{23d}@anchor{gnat_rm/implementation_advice rm-2-8-16-pragmas}@anchor{23e}
  @section RM 2.8(16): Pragmas
  
  
--- 14618,14624 ----
  @geindex Pragmas
  
  @node RM 2 8 16 Pragmas,RM 2 8 17-19 Pragmas,RM 1 1 5 12 Bounded Errors,Implementation Advice
! @anchor{gnat_rm/implementation_advice id2}@anchor{23f}@anchor{gnat_rm/implementation_advice rm-2-8-16-pragmas}@anchor{240}
  @section RM 2.8(16): Pragmas
  
  
*************** that this advice not be followed.  For d
*** 14682,14688 ****
  @ref{7,,Implementation Defined Pragmas}.
  
  @node RM 2 8 17-19 Pragmas,RM 3 5 2 5 Alternative Character Sets,RM 2 8 16 Pragmas,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-2-8-17-19-pragmas}@anchor{23f}
  @section RM 2.8(17-19): Pragmas
  
  
--- 14731,14737 ----
  @ref{7,,Implementation Defined Pragmas}.
  
  @node RM 2 8 17-19 Pragmas,RM 3 5 2 5 Alternative Character Sets,RM 2 8 16 Pragmas,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-2-8-17-19-pragmas}@anchor{241}
  @section RM 2.8(17-19): Pragmas
  
  
*************** replacing @code{library_items}.”
*** 14703,14716 ****
  @end itemize
  @end quotation
  
! See @ref{23e,,RM 2.8(16); Pragmas}.
  
  @geindex Character Sets
  
  @geindex Alternative Character Sets
  
  @node RM 3 5 2 5 Alternative Character Sets,RM 3 5 4 28 Integer Types,RM 2 8 17-19 Pragmas,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-3-5-2-5-alternative-character-sets}@anchor{240}
  @section RM 3.5.2(5): Alternative Character Sets
  
  
--- 14752,14765 ----
  @end itemize
  @end quotation
  
! See @ref{240,,RM 2.8(16); Pragmas}.
  
  @geindex Character Sets
  
  @geindex Alternative Character Sets
  
  @node RM 3 5 2 5 Alternative Character Sets,RM 3 5 4 28 Integer Types,RM 2 8 17-19 Pragmas,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-3-5-2-5-alternative-character-sets}@anchor{242}
  @section RM 3.5.2(5): Alternative Character Sets
  
  
*************** there is no such restriction.
*** 14738,14744 ****
  @geindex Integer types
  
  @node RM 3 5 4 28 Integer Types,RM 3 5 4 29 Integer Types,RM 3 5 2 5 Alternative Character Sets,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-3-5-4-28-integer-types}@anchor{241}
  @section RM 3.5.4(28): Integer Types
  
  
--- 14787,14793 ----
  @geindex Integer types
  
  @node RM 3 5 4 28 Integer Types,RM 3 5 4 29 Integer Types,RM 3 5 2 5 Alternative Character Sets,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-3-5-4-28-integer-types}@anchor{243}
  @section RM 3.5.4(28): Integer Types
  
  
*************** are supported for convenient interface t
*** 14757,14763 ****
  types of the machine are easily available.
  
  @node RM 3 5 4 29 Integer Types,RM 3 5 5 8 Enumeration Values,RM 3 5 4 28 Integer Types,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-3-5-4-29-integer-types}@anchor{242}
  @section RM 3.5.4(29): Integer Types
  
  
--- 14806,14812 ----
  types of the machine are easily available.
  
  @node RM 3 5 4 29 Integer Types,RM 3 5 5 8 Enumeration Values,RM 3 5 4 28 Integer Types,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-3-5-4-29-integer-types}@anchor{244}
  @section RM 3.5.4(29): Integer Types
  
  
*************** Followed.
*** 14773,14779 ****
  @geindex Enumeration values
  
  @node RM 3 5 5 8 Enumeration Values,RM 3 5 7 17 Float Types,RM 3 5 4 29 Integer Types,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-3-5-5-8-enumeration-values}@anchor{243}
  @section RM 3.5.5(8): Enumeration Values
  
  
--- 14822,14828 ----
  @geindex Enumeration values
  
  @node RM 3 5 5 8 Enumeration Values,RM 3 5 7 17 Float Types,RM 3 5 4 29 Integer Types,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-3-5-5-8-enumeration-values}@anchor{245}
  @section RM 3.5.5(8): Enumeration Values
  
  
*************** Followed.
*** 14793,14799 ****
  @geindex Float types
  
  @node RM 3 5 7 17 Float Types,RM 3 6 2 11 Multidimensional Arrays,RM 3 5 5 8 Enumeration Values,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-3-5-7-17-float-types}@anchor{244}
  @section RM 3.5.7(17): Float Types
  
  
--- 14842,14848 ----
  @geindex Float types
  
  @node RM 3 5 7 17 Float Types,RM 3 6 2 11 Multidimensional Arrays,RM 3 5 5 8 Enumeration Values,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-3-5-7-17-float-types}@anchor{246}
  @section RM 3.5.7(17): Float Types
  
  
*************** is a software rather than a hardware for
*** 14823,14829 ****
  @geindex multidimensional
  
  @node RM 3 6 2 11 Multidimensional Arrays,RM 9 6 30-31 Duration’Small,RM 3 5 7 17 Float Types,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-3-6-2-11-multidimensional-arrays}@anchor{245}
  @section RM 3.6.2(11): Multidimensional Arrays
  
  
--- 14872,14878 ----
  @geindex multidimensional
  
  @node RM 3 6 2 11 Multidimensional Arrays,RM 9 6 30-31 Duration’Small,RM 3 5 7 17 Float Types,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-3-6-2-11-multidimensional-arrays}@anchor{247}
  @section RM 3.6.2(11): Multidimensional Arrays
  
  
*************** Followed.
*** 14841,14847 ****
  @geindex Duration'Small
  
  @node RM 9 6 30-31 Duration’Small,RM 10 2 1 12 Consistent Representation,RM 3 6 2 11 Multidimensional Arrays,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-9-6-30-31-duration-small}@anchor{246}
  @section RM 9.6(30-31): Duration’Small
  
  
--- 14890,14896 ----
  @geindex Duration'Small
  
  @node RM 9 6 30-31 Duration’Small,RM 10 2 1 12 Consistent Representation,RM 3 6 2 11 Multidimensional Arrays,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-9-6-30-31-duration-small}@anchor{248}
  @section RM 9.6(30-31): Duration’Small
  
  
*************** it need not be the same time base as use
*** 14862,14868 ****
  Followed.
  
  @node RM 10 2 1 12 Consistent Representation,RM 11 4 1 19 Exception Information,RM 9 6 30-31 Duration’Small,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-10-2-1-12-consistent-representation}@anchor{247}
  @section RM 10.2.1(12): Consistent Representation
  
  
--- 14911,14917 ----
  Followed.
  
  @node RM 10 2 1 12 Consistent Representation,RM 11 4 1 19 Exception Information,RM 9 6 30-31 Duration’Small,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-10-2-1-12-consistent-representation}@anchor{249}
  @section RM 10.2.1(12): Consistent Representation
  
  
*************** advice without severely impacting effici
*** 14884,14890 ****
  @geindex Exception information
  
  @node RM 11 4 1 19 Exception Information,RM 11 5 28 Suppression of Checks,RM 10 2 1 12 Consistent Representation,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-11-4-1-19-exception-information}@anchor{248}
  @section RM 11.4.1(19): Exception Information
  
  
--- 14933,14939 ----
  @geindex Exception information
  
  @node RM 11 4 1 19 Exception Information,RM 11 5 28 Suppression of Checks,RM 10 2 1 12 Consistent Representation,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-11-4-1-19-exception-information}@anchor{24a}
  @section RM 11.4.1(19): Exception Information
  
  
*************** Pragma @code{Discard_Names}.
*** 14915,14921 ****
  @geindex suppression of
  
  @node RM 11 5 28 Suppression of Checks,RM 13 1 21-24 Representation Clauses,RM 11 4 1 19 Exception Information,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-11-5-28-suppression-of-checks}@anchor{249}
  @section RM 11.5(28): Suppression of Checks
  
  
--- 14964,14970 ----
  @geindex suppression of
  
  @node RM 11 5 28 Suppression of Checks,RM 13 1 21-24 Representation Clauses,RM 11 4 1 19 Exception Information,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-11-5-28-suppression-of-checks}@anchor{24b}
  @section RM 11.5(28): Suppression of Checks
  
  
*************** Followed.
*** 14930,14936 ****
  @geindex Representation clauses
  
  @node RM 13 1 21-24 Representation Clauses,RM 13 2 6-8 Packed Types,RM 11 5 28 Suppression of Checks,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-1-21-24-representation-clauses}@anchor{24a}
  @section RM 13.1 (21-24): Representation Clauses
  
  
--- 14979,14985 ----
  @geindex Representation clauses
  
  @node RM 13 1 21-24 Representation Clauses,RM 13 2 6-8 Packed Types,RM 11 5 28 Suppression of Checks,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-1-21-24-representation-clauses}@anchor{24c}
  @section RM 13.1 (21-24): Representation Clauses
  
  
*************** Followed.
*** 14982,14988 ****
  @geindex Packed types
  
  @node RM 13 2 6-8 Packed Types,RM 13 3 14-19 Address Clauses,RM 13 1 21-24 Representation Clauses,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-2-6-8-packed-types}@anchor{24b}
  @section RM 13.2(6-8): Packed Types
  
  
--- 15031,15037 ----
  @geindex Packed types
  
  @node RM 13 2 6-8 Packed Types,RM 13 3 14-19 Address Clauses,RM 13 1 21-24 Representation Clauses,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-2-6-8-packed-types}@anchor{24d}
  @section RM 13.2(6-8): Packed Types
  
  
*************** subcomponent of the packed type.
*** 15013,15019 ****
  @geindex Address clauses
  
  @node RM 13 3 14-19 Address Clauses,RM 13 3 29-35 Alignment Clauses,RM 13 2 6-8 Packed Types,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-3-14-19-address-clauses}@anchor{24c}
  @section RM 13.3(14-19): Address Clauses
  
  
--- 15062,15068 ----
  @geindex Address clauses
  
  @node RM 13 3 14-19 Address Clauses,RM 13 3 29-35 Alignment Clauses,RM 13 2 6-8 Packed Types,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-3-14-19-address-clauses}@anchor{24e}
  @section RM 13.3(14-19): Address Clauses
  
  
*************** Followed.
*** 15066,15072 ****
  @geindex Alignment clauses
  
  @node RM 13 3 29-35 Alignment Clauses,RM 13 3 42-43 Size Clauses,RM 13 3 14-19 Address Clauses,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-3-29-35-alignment-clauses}@anchor{24d}
  @section RM 13.3(29-35): Alignment Clauses
  
  
--- 15115,15121 ----
  @geindex Alignment clauses
  
  @node RM 13 3 29-35 Alignment Clauses,RM 13 3 42-43 Size Clauses,RM 13 3 14-19 Address Clauses,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-3-29-35-alignment-clauses}@anchor{24f}
  @section RM 13.3(29-35): Alignment Clauses
  
  
*************** Followed.
*** 15123,15129 ****
  @geindex Size clauses
  
  @node RM 13 3 42-43 Size Clauses,RM 13 3 50-56 Size Clauses,RM 13 3 29-35 Alignment Clauses,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-3-42-43-size-clauses}@anchor{24e}
  @section RM 13.3(42-43): Size Clauses
  
  
--- 15172,15178 ----
  @geindex Size clauses
  
  @node RM 13 3 42-43 Size Clauses,RM 13 3 50-56 Size Clauses,RM 13 3 29-35 Alignment Clauses,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-3-42-43-size-clauses}@anchor{250}
  @section RM 13.3(42-43): Size Clauses
  
  
*************** object’s @code{Alignment} (if the @cod
*** 15141,15147 ****
  Followed.
  
  @node RM 13 3 50-56 Size Clauses,RM 13 3 71-73 Component Size Clauses,RM 13 3 42-43 Size Clauses,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-3-50-56-size-clauses}@anchor{24f}
  @section RM 13.3(50-56): Size Clauses
  
  
--- 15190,15196 ----
  Followed.
  
  @node RM 13 3 50-56 Size Clauses,RM 13 3 71-73 Component Size Clauses,RM 13 3 42-43 Size Clauses,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-3-50-56-size-clauses}@anchor{251}
  @section RM 13.3(50-56): Size Clauses
  
  
*************** Followed.
*** 15192,15198 ****
  @geindex Component_Size clauses
  
  @node RM 13 3 71-73 Component Size Clauses,RM 13 4 9-10 Enumeration Representation Clauses,RM 13 3 50-56 Size Clauses,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-3-71-73-component-size-clauses}@anchor{250}
  @section RM 13.3(71-73): Component Size Clauses
  
  
--- 15241,15247 ----
  @geindex Component_Size clauses
  
  @node RM 13 3 71-73 Component Size Clauses,RM 13 4 9-10 Enumeration Representation Clauses,RM 13 3 50-56 Size Clauses,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-3-71-73-component-size-clauses}@anchor{252}
  @section RM 13.3(71-73): Component Size Clauses
  
  
*************** Followed.
*** 15226,15232 ****
  @geindex enumeration
  
  @node RM 13 4 9-10 Enumeration Representation Clauses,RM 13 5 1 17-22 Record Representation Clauses,RM 13 3 71-73 Component Size Clauses,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-4-9-10-enumeration-representation-clauses}@anchor{251}
  @section RM 13.4(9-10): Enumeration Representation Clauses
  
  
--- 15275,15281 ----
  @geindex enumeration
  
  @node RM 13 4 9-10 Enumeration Representation Clauses,RM 13 5 1 17-22 Record Representation Clauses,RM 13 3 71-73 Component Size Clauses,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-4-9-10-enumeration-representation-clauses}@anchor{253}
  @section RM 13.4(9-10): Enumeration Representation Clauses
  
  
*************** Followed.
*** 15248,15254 ****
  @geindex records
  
  @node RM 13 5 1 17-22 Record Representation Clauses,RM 13 5 2 5 Storage Place Attributes,RM 13 4 9-10 Enumeration Representation Clauses,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-5-1-17-22-record-representation-clauses}@anchor{252}
  @section RM 13.5.1(17-22): Record Representation Clauses
  
  
--- 15297,15303 ----
  @geindex records
  
  @node RM 13 5 1 17-22 Record Representation Clauses,RM 13 5 2 5 Storage Place Attributes,RM 13 4 9-10 Enumeration Representation Clauses,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-5-1-17-22-record-representation-clauses}@anchor{254}
  @section RM 13.5.1(17-22): Record Representation Clauses
  
  
*************** and all mentioned features are implement
*** 15308,15314 ****
  @geindex Storage place attributes
  
  @node RM 13 5 2 5 Storage Place Attributes,RM 13 5 3 7-8 Bit Ordering,RM 13 5 1 17-22 Record Representation Clauses,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-5-2-5-storage-place-attributes}@anchor{253}
  @section RM 13.5.2(5): Storage Place Attributes
  
  
--- 15357,15363 ----
  @geindex Storage place attributes
  
  @node RM 13 5 2 5 Storage Place Attributes,RM 13 5 3 7-8 Bit Ordering,RM 13 5 1 17-22 Record Representation Clauses,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-5-2-5-storage-place-attributes}@anchor{255}
  @section RM 13.5.2(5): Storage Place Attributes
  
  
*************** Followed.  There are no such components
*** 15328,15334 ****
  @geindex Bit ordering
  
  @node RM 13 5 3 7-8 Bit Ordering,RM 13 7 37 Address as Private,RM 13 5 2 5 Storage Place Attributes,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-5-3-7-8-bit-ordering}@anchor{254}
  @section RM 13.5.3(7-8): Bit Ordering
  
  
--- 15377,15383 ----
  @geindex Bit ordering
  
  @node RM 13 5 3 7-8 Bit Ordering,RM 13 7 37 Address as Private,RM 13 5 2 5 Storage Place Attributes,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-5-3-7-8-bit-ordering}@anchor{256}
  @section RM 13.5.3(7-8): Bit Ordering
  
  
*************** Followed.
*** 15346,15352 ****
  @geindex as private type
  
  @node RM 13 7 37 Address as Private,RM 13 7 1 16 Address Operations,RM 13 5 3 7-8 Bit Ordering,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-7-37-address-as-private}@anchor{255}
  @section RM 13.7(37): Address as Private
  
  
--- 15395,15401 ----
  @geindex as private type
  
  @node RM 13 7 37 Address as Private,RM 13 7 1 16 Address Operations,RM 13 5 3 7-8 Bit Ordering,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-7-37-address-as-private}@anchor{257}
  @section RM 13.7(37): Address as Private
  
  
*************** Followed.
*** 15364,15370 ****
  @geindex operations of
  
  @node RM 13 7 1 16 Address Operations,RM 13 9 14-17 Unchecked Conversion,RM 13 7 37 Address as Private,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-7-1-16-address-operations}@anchor{256}
  @section RM 13.7.1(16): Address Operations
  
  
--- 15413,15419 ----
  @geindex operations of
  
  @node RM 13 7 1 16 Address Operations,RM 13 9 14-17 Unchecked Conversion,RM 13 7 37 Address as Private,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-7-1-16-address-operations}@anchor{258}
  @section RM 13.7.1(16): Address Operations
  
  
*************** operation raises @code{Program_Error}, s
*** 15382,15388 ****
  @geindex Unchecked conversion
  
  @node RM 13 9 14-17 Unchecked Conversion,RM 13 11 23-25 Implicit Heap Usage,RM 13 7 1 16 Address Operations,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-9-14-17-unchecked-conversion}@anchor{257}
  @section RM 13.9(14-17): Unchecked Conversion
  
  
--- 15431,15437 ----
  @geindex Unchecked conversion
  
  @node RM 13 9 14-17 Unchecked Conversion,RM 13 11 23-25 Implicit Heap Usage,RM 13 7 1 16 Address Operations,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-9-14-17-unchecked-conversion}@anchor{259}
  @section RM 13.9(14-17): Unchecked Conversion
  
  
*************** Followed.
*** 15426,15432 ****
  @geindex implicit
  
  @node RM 13 11 23-25 Implicit Heap Usage,RM 13 11 2 17 Unchecked Deallocation,RM 13 9 14-17 Unchecked Conversion,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-11-23-25-implicit-heap-usage}@anchor{258}
  @section RM 13.11(23-25): Implicit Heap Usage
  
  
--- 15475,15481 ----
  @geindex implicit
  
  @node RM 13 11 23-25 Implicit Heap Usage,RM 13 11 2 17 Unchecked Deallocation,RM 13 9 14-17 Unchecked Conversion,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-11-23-25-implicit-heap-usage}@anchor{25a}
  @section RM 13.11(23-25): Implicit Heap Usage
  
  
*************** Followed.
*** 15477,15483 ****
  @geindex Unchecked deallocation
  
  @node RM 13 11 2 17 Unchecked Deallocation,RM 13 13 2 1 6 Stream Oriented Attributes,RM 13 11 23-25 Implicit Heap Usage,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-11-2-17-unchecked-deallocation}@anchor{259}
  @section RM 13.11.2(17): Unchecked Deallocation
  
  
--- 15526,15532 ----
  @geindex Unchecked deallocation
  
  @node RM 13 11 2 17 Unchecked Deallocation,RM 13 13 2 1 6 Stream Oriented Attributes,RM 13 11 23-25 Implicit Heap Usage,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-11-2-17-unchecked-deallocation}@anchor{25b}
  @section RM 13.11.2(17): Unchecked Deallocation
  
  
*************** Followed.
*** 15492,15498 ****
  @geindex Stream oriented attributes
  
  @node RM 13 13 2 1 6 Stream Oriented Attributes,RM A 1 52 Names of Predefined Numeric Types,RM 13 11 2 17 Unchecked Deallocation,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-13-2-1-6-stream-oriented-attributes}@anchor{25a}
  @section RM 13.13.2(1.6): Stream Oriented Attributes
  
  
--- 15541,15547 ----
  @geindex Stream oriented attributes
  
  @node RM 13 13 2 1 6 Stream Oriented Attributes,RM A 1 52 Names of Predefined Numeric Types,RM 13 11 2 17 Unchecked Deallocation,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-13-13-2-1-6-stream-oriented-attributes}@anchor{25c}
  @section RM 13.13.2(1.6): Stream Oriented Attributes
  
  
*************** scalar types. This XDR alternative can b
*** 15523,15529 ****
  @geindex Stream oriented attributes
  
  @node RM A 1 52 Names of Predefined Numeric Types,RM A 3 2 49 Ada Characters Handling,RM 13 13 2 1 6 Stream Oriented Attributes,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-a-1-52-names-of-predefined-numeric-types}@anchor{25b}
  @section RM A.1(52): Names of Predefined Numeric Types
  
  
--- 15572,15578 ----
  @geindex Stream oriented attributes
  
  @node RM A 1 52 Names of Predefined Numeric Types,RM A 3 2 49 Ada Characters Handling,RM 13 13 2 1 6 Stream Oriented Attributes,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-a-1-52-names-of-predefined-numeric-types}@anchor{25d}
  @section RM A.1(52): Names of Predefined Numeric Types
  
  
*************** Followed.
*** 15541,15547 ****
  @geindex Ada.Characters.Handling
  
  @node RM A 3 2 49 Ada Characters Handling,RM A 4 4 106 Bounded-Length String Handling,RM A 1 52 Names of Predefined Numeric Types,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-a-3-2-49-ada-characters-handling}@anchor{25c}
  @section RM A.3.2(49): @code{Ada.Characters.Handling}
  
  
--- 15590,15596 ----
  @geindex Ada.Characters.Handling
  
  @node RM A 3 2 49 Ada Characters Handling,RM A 4 4 106 Bounded-Length String Handling,RM A 1 52 Names of Predefined Numeric Types,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-a-3-2-49-ada-characters-handling}@anchor{25e}
  @section RM A.3.2(49): @code{Ada.Characters.Handling}
  
  
*************** Followed.  GNAT provides no such localiz
*** 15558,15564 ****
  @geindex Bounded-length strings
  
  @node RM A 4 4 106 Bounded-Length String Handling,RM A 5 2 46-47 Random Number Generation,RM A 3 2 49 Ada Characters Handling,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-a-4-4-106-bounded-length-string-handling}@anchor{25d}
  @section RM A.4.4(106): Bounded-Length String Handling
  
  
--- 15607,15613 ----
  @geindex Bounded-length strings
  
  @node RM A 4 4 106 Bounded-Length String Handling,RM A 5 2 46-47 Random Number Generation,RM A 3 2 49 Ada Characters Handling,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-a-4-4-106-bounded-length-string-handling}@anchor{25f}
  @section RM A.4.4(106): Bounded-Length String Handling
  
  
*************** Followed.  No implicit pointers or dynam
*** 15573,15579 ****
  @geindex Random number generation
  
  @node RM A 5 2 46-47 Random Number Generation,RM A 10 7 23 Get_Immediate,RM A 4 4 106 Bounded-Length String Handling,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-a-5-2-46-47-random-number-generation}@anchor{25e}
  @section RM A.5.2(46-47): Random Number Generation
  
  
--- 15622,15628 ----
  @geindex Random number generation
  
  @node RM A 5 2 46-47 Random Number Generation,RM A 10 7 23 Get_Immediate,RM A 4 4 106 Bounded-Length String Handling,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-a-5-2-46-47-random-number-generation}@anchor{260}
  @section RM A.5.2(46-47): Random Number Generation
  
  
*************** condition here to hold true.
*** 15602,15608 ****
  @geindex Get_Immediate
  
  @node RM A 10 7 23 Get_Immediate,RM A 18 Containers,RM A 5 2 46-47 Random Number Generation,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-a-10-7-23-get-immediate}@anchor{25f}
  @section RM A.10.7(23): @code{Get_Immediate}
  
  
--- 15651,15657 ----
  @geindex Get_Immediate
  
  @node RM A 10 7 23 Get_Immediate,RM A 18 Containers,RM A 5 2 46-47 Random Number Generation,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-a-10-7-23-get-immediate}@anchor{261}
  @section RM A.10.7(23): @code{Get_Immediate}
  
  
*************** this functionality.
*** 15626,15632 ****
  @geindex Containers
  
  @node RM A 18 Containers,RM B 1 39-41 Pragma Export,RM A 10 7 23 Get_Immediate,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-a-18-containers}@anchor{260}
  @section RM A.18: @code{Containers}
  
  
--- 15675,15681 ----
  @geindex Containers
  
  @node RM A 18 Containers,RM B 1 39-41 Pragma Export,RM A 10 7 23 Get_Immediate,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-a-18-containers}@anchor{262}
  @section RM A.18: @code{Containers}
  
  
*************** follow the implementation advice.
*** 15647,15653 ****
  @geindex Export
  
  @node RM B 1 39-41 Pragma Export,RM B 2 12-13 Package Interfaces,RM A 18 Containers,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-b-1-39-41-pragma-export}@anchor{261}
  @section RM B.1(39-41): Pragma @code{Export}
  
  
--- 15696,15702 ----
  @geindex Export
  
  @node RM B 1 39-41 Pragma Export,RM B 2 12-13 Package Interfaces,RM A 18 Containers,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-b-1-39-41-pragma-export}@anchor{263}
  @section RM B.1(39-41): Pragma @code{Export}
  
  
*************** Followed.
*** 15695,15701 ****
  @geindex Interfaces
  
  @node RM B 2 12-13 Package Interfaces,RM B 3 63-71 Interfacing with C,RM B 1 39-41 Pragma Export,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-b-2-12-13-package-interfaces}@anchor{262}
  @section RM B.2(12-13): Package @code{Interfaces}
  
  
--- 15744,15750 ----
  @geindex Interfaces
  
  @node RM B 2 12-13 Package Interfaces,RM B 3 63-71 Interfacing with C,RM B 1 39-41 Pragma Export,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-b-2-12-13-package-interfaces}@anchor{264}
  @section RM B.2(12-13): Package @code{Interfaces}
  
  
*************** Followed.  GNAT provides all the package
*** 15725,15731 ****
  @geindex interfacing with
  
  @node RM B 3 63-71 Interfacing with C,RM B 4 95-98 Interfacing with COBOL,RM B 2 12-13 Package Interfaces,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-b-3-63-71-interfacing-with-c}@anchor{263}
  @section RM B.3(63-71): Interfacing with C
  
  
--- 15774,15780 ----
  @geindex interfacing with
  
  @node RM B 3 63-71 Interfacing with C,RM B 4 95-98 Interfacing with COBOL,RM B 2 12-13 Package Interfaces,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-b-3-63-71-interfacing-with-c}@anchor{265}
  @section RM B.3(63-71): Interfacing with C
  
  
*************** Followed.
*** 15813,15819 ****
  @geindex interfacing with
  
  @node RM B 4 95-98 Interfacing with COBOL,RM B 5 22-26 Interfacing with Fortran,RM B 3 63-71 Interfacing with C,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-b-4-95-98-interfacing-with-cobol}@anchor{264}
  @section RM B.4(95-98): Interfacing with COBOL
  
  
--- 15862,15868 ----
  @geindex interfacing with
  
  @node RM B 4 95-98 Interfacing with COBOL,RM B 5 22-26 Interfacing with Fortran,RM B 3 63-71 Interfacing with C,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-b-4-95-98-interfacing-with-cobol}@anchor{266}
  @section RM B.4(95-98): Interfacing with COBOL
  
  
*************** Followed.
*** 15854,15860 ****
  @geindex interfacing with
  
  @node RM B 5 22-26 Interfacing with Fortran,RM C 1 3-5 Access to Machine Operations,RM B 4 95-98 Interfacing with COBOL,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-b-5-22-26-interfacing-with-fortran}@anchor{265}
  @section RM B.5(22-26): Interfacing with Fortran
  
  
--- 15903,15909 ----
  @geindex interfacing with
  
  @node RM B 5 22-26 Interfacing with Fortran,RM C 1 3-5 Access to Machine Operations,RM B 4 95-98 Interfacing with COBOL,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-b-5-22-26-interfacing-with-fortran}@anchor{267}
  @section RM B.5(22-26): Interfacing with Fortran
  
  
*************** Followed.
*** 15905,15911 ****
  @geindex Machine operations
  
  @node RM C 1 3-5 Access to Machine Operations,RM C 1 10-16 Access to Machine Operations,RM B 5 22-26 Interfacing with Fortran,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-c-1-3-5-access-to-machine-operations}@anchor{266}
  @section RM C.1(3-5): Access to Machine Operations
  
  
--- 15954,15960 ----
  @geindex Machine operations
  
  @node RM C 1 3-5 Access to Machine Operations,RM C 1 10-16 Access to Machine Operations,RM B 5 22-26 Interfacing with Fortran,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-c-1-3-5-access-to-machine-operations}@anchor{268}
  @section RM C.1(3-5): Access to Machine Operations
  
  
*************** object that is specified as exported.”
*** 15940,15946 ****
  Followed.
  
  @node RM C 1 10-16 Access to Machine Operations,RM C 3 28 Interrupt Support,RM C 1 3-5 Access to Machine Operations,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-c-1-10-16-access-to-machine-operations}@anchor{267}
  @section RM C.1(10-16): Access to Machine Operations
  
  
--- 15989,15995 ----
  Followed.
  
  @node RM C 1 10-16 Access to Machine Operations,RM C 3 28 Interrupt Support,RM C 1 3-5 Access to Machine Operations,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-c-1-10-16-access-to-machine-operations}@anchor{269}
  @section RM C.1(10-16): Access to Machine Operations
  
  
*************** Followed on any target supporting such o
*** 16001,16007 ****
  @geindex Interrupt support
  
  @node RM C 3 28 Interrupt Support,RM C 3 1 20-21 Protected Procedure Handlers,RM C 1 10-16 Access to Machine Operations,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-c-3-28-interrupt-support}@anchor{268}
  @section RM C.3(28): Interrupt Support
  
  
--- 16050,16056 ----
  @geindex Interrupt support
  
  @node RM C 3 28 Interrupt Support,RM C 3 1 20-21 Protected Procedure Handlers,RM C 1 10-16 Access to Machine Operations,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-c-3-28-interrupt-support}@anchor{26a}
  @section RM C.3(28): Interrupt Support
  
  
*************** of interrupt blocking.
*** 16019,16025 ****
  @geindex Protected procedure handlers
  
  @node RM C 3 1 20-21 Protected Procedure Handlers,RM C 3 2 25 Package Interrupts,RM C 3 28 Interrupt Support,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-c-3-1-20-21-protected-procedure-handlers}@anchor{269}
  @section RM C.3.1(20-21): Protected Procedure Handlers
  
  
--- 16068,16074 ----
  @geindex Protected procedure handlers
  
  @node RM C 3 1 20-21 Protected Procedure Handlers,RM C 3 2 25 Package Interrupts,RM C 3 28 Interrupt Support,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-c-3-1-20-21-protected-procedure-handlers}@anchor{26b}
  @section RM C.3.1(20-21): Protected Procedure Handlers
  
  
*************** Followed.  Compile time warnings are giv
*** 16045,16051 ****
  @geindex Interrupts
  
  @node RM C 3 2 25 Package Interrupts,RM C 4 14 Pre-elaboration Requirements,RM C 3 1 20-21 Protected Procedure Handlers,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-c-3-2-25-package-interrupts}@anchor{26a}
  @section RM C.3.2(25): Package @code{Interrupts}
  
  
--- 16094,16100 ----
  @geindex Interrupts
  
  @node RM C 3 2 25 Package Interrupts,RM C 4 14 Pre-elaboration Requirements,RM C 3 1 20-21 Protected Procedure Handlers,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-c-3-2-25-package-interrupts}@anchor{26c}
  @section RM C.3.2(25): Package @code{Interrupts}
  
  
*************** Followed.
*** 16063,16069 ****
  @geindex Pre-elaboration requirements
  
  @node RM C 4 14 Pre-elaboration Requirements,RM C 5 8 Pragma Discard_Names,RM C 3 2 25 Package Interrupts,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-c-4-14-pre-elaboration-requirements}@anchor{26b}
  @section RM C.4(14): Pre-elaboration Requirements
  
  
--- 16112,16118 ----
  @geindex Pre-elaboration requirements
  
  @node RM C 4 14 Pre-elaboration Requirements,RM C 5 8 Pragma Discard_Names,RM C 3 2 25 Package Interrupts,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-c-4-14-pre-elaboration-requirements}@anchor{26d}
  @section RM C.4(14): Pre-elaboration Requirements
  
  
*************** Followed.  Executable code is generated
*** 16079,16085 ****
  to initialize large arrays.
  
  @node RM C 5 8 Pragma Discard_Names,RM C 7 2 30 The Package Task_Attributes,RM C 4 14 Pre-elaboration Requirements,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-c-5-8-pragma-discard-names}@anchor{26c}
  @section RM C.5(8): Pragma @code{Discard_Names}
  
  
--- 16128,16134 ----
  to initialize large arrays.
  
  @node RM C 5 8 Pragma Discard_Names,RM C 7 2 30 The Package Task_Attributes,RM C 4 14 Pre-elaboration Requirements,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-c-5-8-pragma-discard-names}@anchor{26e}
  @section RM C.5(8): Pragma @code{Discard_Names}
  
  
*************** Followed.
*** 16097,16103 ****
  @geindex Task_Attributes
  
  @node RM C 7 2 30 The Package Task_Attributes,RM D 3 17 Locking Policies,RM C 5 8 Pragma Discard_Names,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-c-7-2-30-the-package-task-attributes}@anchor{26d}
  @section RM C.7.2(30): The Package Task_Attributes
  
  
--- 16146,16152 ----
  @geindex Task_Attributes
  
  @node RM C 7 2 30 The Package Task_Attributes,RM D 3 17 Locking Policies,RM C 5 8 Pragma Discard_Names,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-c-7-2-30-the-package-task-attributes}@anchor{26f}
  @section RM C.7.2(30): The Package Task_Attributes
  
  
*************** Not followed.  This implementation is no
*** 16118,16124 ****
  @geindex Locking Policies
  
  @node RM D 3 17 Locking Policies,RM D 4 16 Entry Queuing Policies,RM C 7 2 30 The Package Task_Attributes,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-d-3-17-locking-policies}@anchor{26e}
  @section RM D.3(17): Locking Policies
  
  
--- 16167,16173 ----
  @geindex Locking Policies
  
  @node RM D 3 17 Locking Policies,RM D 4 16 Entry Queuing Policies,RM C 7 2 30 The Package Task_Attributes,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-d-3-17-locking-policies}@anchor{270}
  @section RM D.3(17): Locking Policies
  
  
*************** whose names (@code{Inheritance_Locking}
*** 16135,16141 ****
  @geindex Entry queuing policies
  
  @node RM D 4 16 Entry Queuing Policies,RM D 6 9-10 Preemptive Abort,RM D 3 17 Locking Policies,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-d-4-16-entry-queuing-policies}@anchor{26f}
  @section RM D.4(16): Entry Queuing Policies
  
  
--- 16184,16190 ----
  @geindex Entry queuing policies
  
  @node RM D 4 16 Entry Queuing Policies,RM D 6 9-10 Preemptive Abort,RM D 3 17 Locking Policies,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-d-4-16-entry-queuing-policies}@anchor{271}
  @section RM D.4(16): Entry Queuing Policies
  
  
*************** Followed.  No such implementation-define
*** 16150,16156 ****
  @geindex Preemptive abort
  
  @node RM D 6 9-10 Preemptive Abort,RM D 7 21 Tasking Restrictions,RM D 4 16 Entry Queuing Policies,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-d-6-9-10-preemptive-abort}@anchor{270}
  @section RM D.6(9-10): Preemptive Abort
  
  
--- 16199,16205 ----
  @geindex Preemptive abort
  
  @node RM D 6 9-10 Preemptive Abort,RM D 7 21 Tasking Restrictions,RM D 4 16 Entry Queuing Policies,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-d-6-9-10-preemptive-abort}@anchor{272}
  @section RM D.6(9-10): Preemptive Abort
  
  
*************** Followed.
*** 16176,16182 ****
  @geindex Tasking restrictions
  
  @node RM D 7 21 Tasking Restrictions,RM D 8 47-49 Monotonic Time,RM D 6 9-10 Preemptive Abort,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-d-7-21-tasking-restrictions}@anchor{271}
  @section RM D.7(21): Tasking Restrictions
  
  
--- 16225,16231 ----
  @geindex Tasking restrictions
  
  @node RM D 7 21 Tasking Restrictions,RM D 8 47-49 Monotonic Time,RM D 6 9-10 Preemptive Abort,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-d-7-21-tasking-restrictions}@anchor{273}
  @section RM D.7(21): Tasking Restrictions
  
  
*************** pragma @code{Profile (Restricted)} for m
*** 16195,16201 ****
  @geindex monotonic
  
  @node RM D 8 47-49 Monotonic Time,RM E 5 28-29 Partition Communication Subsystem,RM D 7 21 Tasking Restrictions,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-d-8-47-49-monotonic-time}@anchor{272}
  @section RM D.8(47-49): Monotonic Time
  
  
--- 16244,16250 ----
  @geindex monotonic
  
  @node RM D 8 47-49 Monotonic Time,RM E 5 28-29 Partition Communication Subsystem,RM D 7 21 Tasking Restrictions,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-d-8-47-49-monotonic-time}@anchor{274}
  @section RM D.8(47-49): Monotonic Time
  
  
*************** Followed.
*** 16230,16236 ****
  @geindex PCS
  
  @node RM E 5 28-29 Partition Communication Subsystem,RM F 7 COBOL Support,RM D 8 47-49 Monotonic Time,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-e-5-28-29-partition-communication-subsystem}@anchor{273}
  @section RM E.5(28-29): Partition Communication Subsystem
  
  
--- 16279,16285 ----
  @geindex PCS
  
  @node RM E 5 28-29 Partition Communication Subsystem,RM F 7 COBOL Support,RM D 8 47-49 Monotonic Time,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-e-5-28-29-partition-communication-subsystem}@anchor{275}
  @section RM E.5(28-29): Partition Communication Subsystem
  
  
*************** should allow them to block until the cor
*** 16242,16248 ****
  returns.”
  @end quotation
  
! A separately supplied PCS that can be used with GNAT when combined with the PolyORB product (NB! See the note in @ref{274,,PolyORB} regarding the lifetime
  of this product).
  
  @quotation
--- 16291,16297 ----
  returns.”
  @end quotation
  
! A separately supplied PCS that can be used with GNAT when combined with the PolyORB product (NB! See the note in @ref{276,,PolyORB} regarding the lifetime
  of this product).
  
  @quotation
*************** write the @code{Item} into the stream.�
*** 16255,16261 ****
  @geindex COBOL support
  
  @node RM F 7 COBOL Support,RM F 1 2 Decimal Radix Support,RM E 5 28-29 Partition Communication Subsystem,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-f-7-cobol-support}@anchor{275}
  @section RM F(7): COBOL Support
  
  
--- 16304,16310 ----
  @geindex COBOL support
  
  @node RM F 7 COBOL Support,RM F 1 2 Decimal Radix Support,RM E 5 28-29 Partition Communication Subsystem,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-f-7-cobol-support}@anchor{277}
  @section RM F(7): COBOL Support
  
  
*************** Followed.
*** 16275,16281 ****
  @geindex Decimal radix support
  
  @node RM F 1 2 Decimal Radix Support,RM G Numerics,RM F 7 COBOL Support,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-f-1-2-decimal-radix-support}@anchor{276}
  @section RM F.1(2): Decimal Radix Support
  
  
--- 16324,16330 ----
  @geindex Decimal radix support
  
  @node RM F 1 2 Decimal Radix Support,RM G Numerics,RM F 7 COBOL Support,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-f-1-2-decimal-radix-support}@anchor{278}
  @section RM F.1(2): Decimal Radix Support
  
  
*************** representations.
*** 16291,16297 ****
  @geindex Numerics
  
  @node RM G Numerics,RM G 1 1 56-58 Complex Types,RM F 1 2 Decimal Radix Support,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-g-numerics}@anchor{277}
  @section RM G: Numerics
  
  
--- 16340,16346 ----
  @geindex Numerics
  
  @node RM G Numerics,RM G 1 1 56-58 Complex Types,RM F 1 2 Decimal Radix Support,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-g-numerics}@anchor{279}
  @section RM G: Numerics
  
  
*************** Followed.
*** 16311,16317 ****
  @geindex Complex types
  
  @node RM G 1 1 56-58 Complex Types,RM G 1 2 49 Complex Elementary Functions,RM G Numerics,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-g-1-1-56-58-complex-types}@anchor{278}
  @section RM G.1.1(56-58): Complex Types
  
  
--- 16360,16366 ----
  @geindex Complex types
  
  @node RM G 1 1 56-58 Complex Types,RM G 1 2 49 Complex Elementary Functions,RM G Numerics,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-g-1-1-56-58-complex-types}@anchor{27a}
  @section RM G.1.1(56-58): Complex Types
  
  
*************** Followed.
*** 16373,16379 ****
  @geindex Complex elementary functions
  
  @node RM G 1 2 49 Complex Elementary Functions,RM G 2 4 19 Accuracy Requirements,RM G 1 1 56-58 Complex Types,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-g-1-2-49-complex-elementary-functions}@anchor{279}
  @section RM G.1.2(49): Complex Elementary Functions
  
  
--- 16422,16428 ----
  @geindex Complex elementary functions
  
  @node RM G 1 2 49 Complex Elementary Functions,RM G 2 4 19 Accuracy Requirements,RM G 1 1 56-58 Complex Types,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-g-1-2-49-complex-elementary-functions}@anchor{27b}
  @section RM G.1.2(49): Complex Elementary Functions
  
  
*************** Followed.
*** 16395,16401 ****
  @geindex Accuracy requirements
  
  @node RM G 2 4 19 Accuracy Requirements,RM G 2 6 15 Complex Arithmetic Accuracy,RM G 1 2 49 Complex Elementary Functions,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-g-2-4-19-accuracy-requirements}@anchor{27a}
  @section RM G.2.4(19): Accuracy Requirements
  
  
--- 16444,16450 ----
  @geindex Accuracy requirements
  
  @node RM G 2 4 19 Accuracy Requirements,RM G 2 6 15 Complex Arithmetic Accuracy,RM G 1 2 49 Complex Elementary Functions,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-g-2-4-19-accuracy-requirements}@anchor{27c}
  @section RM G.2.4(19): Accuracy Requirements
  
  
*************** Followed.
*** 16419,16425 ****
  @geindex complex arithmetic
  
  @node RM G 2 6 15 Complex Arithmetic Accuracy,RM H 6 15/2 Pragma Partition_Elaboration_Policy,RM G 2 4 19 Accuracy Requirements,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-g-2-6-15-complex-arithmetic-accuracy}@anchor{27b}
  @section RM G.2.6(15): Complex Arithmetic Accuracy
  
  
--- 16468,16474 ----
  @geindex complex arithmetic
  
  @node RM G 2 6 15 Complex Arithmetic Accuracy,RM H 6 15/2 Pragma Partition_Elaboration_Policy,RM G 2 4 19 Accuracy Requirements,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-g-2-6-15-complex-arithmetic-accuracy}@anchor{27d}
  @section RM G.2.6(15): Complex Arithmetic Accuracy
  
  
*************** Followed.
*** 16437,16443 ****
  @geindex Sequential elaboration policy
  
  @node RM H 6 15/2 Pragma Partition_Elaboration_Policy,,RM G 2 6 15 Complex Arithmetic Accuracy,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-h-6-15-2-pragma-partition-elaboration-policy}@anchor{27c}
  @section RM H.6(15/2): Pragma Partition_Elaboration_Policy
  
  
--- 16486,16492 ----
  @geindex Sequential elaboration policy
  
  @node RM H 6 15/2 Pragma Partition_Elaboration_Policy,,RM G 2 6 15 Complex Arithmetic Accuracy,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-h-6-15-2-pragma-partition-elaboration-policy}@anchor{27e}
  @section RM H.6(15/2): Pragma Partition_Elaboration_Policy
  
  
*************** immediately terminated.”
*** 16452,16458 ****
  Not followed.
  
  @node GNAT Implementation Mode the -gnatg switch,Implementation Defined Characteristics,Implementation Advice,Top
! @anchor{gnat_rm/gnat_implementation_mode doc}@anchor{27d}@anchor{gnat_rm/gnat_implementation_mode gnat-implementation-mode}@anchor{b}@anchor{gnat_rm/gnat_implementation_mode gnat-implementation-mode-the-gnatg-switch}@anchor{27e}
  @chapter GNAT Implementation Mode (the @code{-gnatg} switch)
  
  
--- 16501,16507 ----
  Not followed.
  
  @node GNAT Implementation Mode the -gnatg switch,Implementation Defined Characteristics,Implementation Advice,Top
! @anchor{gnat_rm/gnat_implementation_mode doc}@anchor{27f}@anchor{gnat_rm/gnat_implementation_mode gnat-implementation-mode}@anchor{b}@anchor{gnat_rm/gnat_implementation_mode gnat-implementation-mode-the-gnatg-switch}@anchor{280}
  @chapter GNAT Implementation Mode (the @code{-gnatg} switch)
  
  
*************** It implies @code{-gnatw.ge} (extended wa
*** 16469,16475 ****
  @end menu
  
  @node Language & Semantic Changes,,,GNAT Implementation Mode the -gnatg switch
! @anchor{gnat_rm/gnat_implementation_mode language-semantic-changes}@anchor{27f}
  @section Language & Semantic Changes
  
  
--- 16518,16524 ----
  @end menu
  
  @node Language & Semantic Changes,,,GNAT Implementation Mode the -gnatg switch
! @anchor{gnat_rm/gnat_implementation_mode language-semantic-changes}@anchor{281}
  @section Language & Semantic Changes
  
  
*************** It implies @code{-gnatw.ge} (extended wa
*** 16484,16490 ****
  @end menu
  
  @node Ada Version and Identifier Rules,Limited Types,,Language & Semantic Changes
! @anchor{gnat_rm/gnat_implementation_mode ada-version-and-identifier-rules}@anchor{280}
  @subsection Ada Version and Identifier Rules
  
  
--- 16533,16539 ----
  @end menu
  
  @node Ada Version and Identifier Rules,Limited Types,,Language & Semantic Changes
! @anchor{gnat_rm/gnat_implementation_mode ada-version-and-identifier-rules}@anchor{282}
  @subsection Ada Version and Identifier Rules
  
  
*************** between global symbols in the runtime an
*** 16504,16510 ****
  @end itemize
  
  @node Limited Types,Preelaboration and Categorization,Ada Version and Identifier Rules,Language & Semantic Changes
! @anchor{gnat_rm/gnat_implementation_mode limited-types}@anchor{281}
  @subsection Limited Types
  
  
--- 16553,16559 ----
  @end itemize
  
  @node Limited Types,Preelaboration and Categorization,Ada Version and Identifier Rules,Language & Semantic Changes
! @anchor{gnat_rm/gnat_implementation_mode limited-types}@anchor{283}
  @subsection Limited Types
  
  
*************** Returning objects of limited types is `p
*** 16522,16528 ****
  @end itemize
  
  @node Preelaboration and Categorization,Overflow,Limited Types,Language & Semantic Changes
! @anchor{gnat_rm/gnat_implementation_mode preelaboration-and-categorization}@anchor{282}
  @subsection Preelaboration and Categorization
  
  
--- 16571,16577 ----
  @end itemize
  
  @node Preelaboration and Categorization,Overflow,Limited Types,Language & Semantic Changes
! @anchor{gnat_rm/gnat_implementation_mode preelaboration-and-categorization}@anchor{284}
  @subsection Preelaboration and Categorization
  
  
*************** predefined runtime manages its own elabo
*** 16552,16558 ****
  @end itemize
  
  @node Overflow,Miscellaneous,Preelaboration and Categorization,Language & Semantic Changes
! @anchor{gnat_rm/gnat_implementation_mode overflow}@anchor{283}
  @subsection Overflow
  
  
--- 16601,16607 ----
  @end itemize
  
  @node Overflow,Miscellaneous,Preelaboration and Categorization,Language & Semantic Changes
! @anchor{gnat_rm/gnat_implementation_mode overflow}@anchor{285}
  @subsection Overflow
  
  
*************** Overflow checks are `suppressed' but the
*** 16560,16566 ****
  `Strict' (for assertion purposes).
  
  @node Miscellaneous,ALI Files and Recompilation,Overflow,Language & Semantic Changes
! @anchor{gnat_rm/gnat_implementation_mode miscellaneous}@anchor{284}
  @subsection Miscellaneous
  
  
--- 16609,16615 ----
  `Strict' (for assertion purposes).
  
  @node Miscellaneous,ALI Files and Recompilation,Overflow,Language & Semantic Changes
! @anchor{gnat_rm/gnat_implementation_mode miscellaneous}@anchor{286}
  @subsection Miscellaneous
  
  
*************** rule set rather than the default @code{-
*** 16598,16604 ****
  @end itemize
  
  @node ALI Files and Recompilation,,Miscellaneous,Language & Semantic Changes
! @anchor{gnat_rm/gnat_implementation_mode ali-files-and-recompilation}@anchor{285}
  @subsection ALI Files and Recompilation
  
  
--- 16647,16653 ----
  @end itemize
  
  @node ALI Files and Recompilation,,Miscellaneous,Language & Semantic Changes
! @anchor{gnat_rm/gnat_implementation_mode ali-files-and-recompilation}@anchor{287}
  @subsection ALI Files and Recompilation
  
  
*************** to let GNAT compile its own predefined l
*** 16617,16623 ****
  @end itemize
  
  @node Implementation Defined Characteristics,Intrinsic Subprograms,GNAT Implementation Mode the -gnatg switch,Top
! @anchor{gnat_rm/implementation_defined_characteristics doc}@anchor{286}@anchor{gnat_rm/implementation_defined_characteristics id1}@anchor{287}@anchor{gnat_rm/implementation_defined_characteristics implementation-defined-characteristics}@anchor{c}
  @chapter Implementation Defined Characteristics
  
  
--- 16666,16672 ----
  @end itemize
  
  @node Implementation Defined Characteristics,Intrinsic Subprograms,GNAT Implementation Mode the -gnatg switch,Top
! @anchor{gnat_rm/implementation_defined_characteristics doc}@anchor{288}@anchor{gnat_rm/implementation_defined_characteristics id1}@anchor{289}@anchor{gnat_rm/implementation_defined_characteristics implementation-defined-characteristics}@anchor{c}
  @chapter Implementation Defined Characteristics
  
  
*************** may have been set by a call to @code{Ada
*** 17258,17264 ****
  “The mechanisms for building and running partitions.  See 10.2(24).”
  @end itemize
  
! GNAT itself supports programs with only a single partition. The PolyORB product (which also includes an implementation of the PCS) provides a completely flexible method for building and running programs consisting of multiple partitions. `NB!' See the note in @ref{274,,PolyORB} regarding the lifetime
  of this product.
  
  
--- 17307,17313 ----
  “The mechanisms for building and running partitions.  See 10.2(24).”
  @end itemize
  
! GNAT itself supports programs with only a single partition. The PolyORB product (which also includes an implementation of the PCS) provides a completely flexible method for building and running programs consisting of multiple partitions. `NB!' See the note in @ref{276,,PolyORB} regarding the lifetime
  of this product.
  
  
*************** implementation.  See 10.2(28).”
*** 17280,17286 ****
  @end itemize
  
  Passive partitions are supported on targets where shared memory is
! provided by the operating system. `NB!' See the note in @ref{274,,PolyORB} regarding the lifetime of this product.
  
  
  @itemize *
--- 17329,17335 ----
  @end itemize
  
  Passive partitions are supported on targets where shared memory is
! provided by the operating system. `NB!' See the note in @ref{276,,PolyORB} regarding the lifetime of this product.
  
  
  @itemize *
*************** See separate section on data representat
*** 17463,17469 ****
  such aspects and the legality rules for such aspects.  See 13.1.1(38).”
  @end itemize
  
! See @ref{132,,Implementation Defined Aspects}.
  
  
  @itemize *
--- 17512,17518 ----
  such aspects and the legality rules for such aspects.  See 13.1.1(38).”
  @end itemize
  
! See @ref{133,,Implementation Defined Aspects}.
  
  
  @itemize *
*************** When the @code{Pattern} parameter is not
*** 17907,17913 ****
  according to the syntax of regular expressions as defined in the
  @code{GNAT.Regexp} package.
  
! See @ref{288,,GNAT.Regexp (g-regexp.ads)}.
  
  
  @itemize *
--- 17956,17962 ----
  according to the syntax of regular expressions as defined in the
  @code{GNAT.Regexp} package.
  
! See @ref{28a,,GNAT.Regexp (g-regexp.ads)}.
  
  
  @itemize *
*************** programs.  See E(5).”
*** 18666,18672 ****
  @end itemize
  
  The PolyORB product provides means creating and executing
! distributed programs. `NB!' See the note in @ref{274,,PolyORB} regarding the lifetime of this product.
  
  
  @itemize *
--- 18715,18721 ----
  @end itemize
  
  The PolyORB product provides means creating and executing
! distributed programs. `NB!' See the note in @ref{276,,PolyORB} regarding the lifetime of this product.
  
  
  @itemize *
*************** inaccessible.  See E.1(7).”
*** 18677,18683 ****
  @end itemize
  
  See the PolyORB user guide for full details on such events.
! `NB!' Consider the note in @ref{274,,PolyORB} regarding the lifetime
  of this product.
  
  
--- 18726,18732 ----
  @end itemize
  
  See the PolyORB user guide for full details on such events.
! `NB!' Consider the note in @ref{276,,PolyORB} regarding the lifetime
  of this product.
  
  
*************** shared resources between partitions in c
*** 18689,18695 ****
  @end itemize
  
  See the PolyORB user guide for full details on these aspects of
! multi-partition execution. `NB!' Consider the note in @ref{274,,PolyORB} regarding the lifetime of this product.
  
  
  @itemize *
--- 18738,18744 ----
  @end itemize
  
  See the PolyORB user guide for full details on these aspects of
! multi-partition execution. `NB!' Consider the note in @ref{276,,PolyORB} regarding the lifetime of this product.
  
  
  @itemize *
*************** immediately aborted as a result of cance
*** 18700,18706 ****
  @end itemize
  
  See the PolyORB user guide for details on the effect of abort in
! a distributed application.  `NB!' Consider the note in @ref{274,,PolyORB} regarding the lifetime of this product.
  
  
  @itemize *
--- 18749,18755 ----
  @end itemize
  
  See the PolyORB user guide for details on the effect of abort in
! a distributed application.  `NB!' Consider the note in @ref{276,,PolyORB} regarding the lifetime of this product.
  
  
  @itemize *
*************** System.RPC.Partition_ID’Last is Intege
*** 18719,18725 ****
  @end itemize
  
  See the PolyORB user guide for a full description of all
! implementation defined interfaces.  `NB!' See the note in @ref{274,,PolyORB} regarding the lifetime of this product.
  
  
  @itemize *
--- 18768,18774 ----
  @end itemize
  
  See the PolyORB user guide for a full description of all
! implementation defined interfaces.  `NB!' See the note in @ref{276,,PolyORB} regarding the lifetime of this product.
  
  
  @itemize *
*************** Information on those subjects is not yet
*** 19007,19013 ****
  Execution is erroneous in that case.
  
  @node Intrinsic Subprograms,Representation Clauses and Pragmas,Implementation Defined Characteristics,Top
! @anchor{gnat_rm/intrinsic_subprograms doc}@anchor{289}@anchor{gnat_rm/intrinsic_subprograms id1}@anchor{28a}@anchor{gnat_rm/intrinsic_subprograms intrinsic-subprograms}@anchor{d}
  @chapter Intrinsic Subprograms
  
  
--- 19056,19062 ----
  Execution is erroneous in that case.
  
  @node Intrinsic Subprograms,Representation Clauses and Pragmas,Implementation Defined Characteristics,Top
! @anchor{gnat_rm/intrinsic_subprograms doc}@anchor{28b}@anchor{gnat_rm/intrinsic_subprograms id1}@anchor{28c}@anchor{gnat_rm/intrinsic_subprograms intrinsic-subprograms}@anchor{d}
  @chapter Intrinsic Subprograms
  
  
*************** Ada standard does not require Ada compil
*** 19045,19051 ****
  @end menu
  
  @node Intrinsic Operators,Compilation_ISO_Date,,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms id2}@anchor{28b}@anchor{gnat_rm/intrinsic_subprograms intrinsic-operators}@anchor{28c}
  @section Intrinsic Operators
  
  
--- 19094,19100 ----
  @end menu
  
  @node Intrinsic Operators,Compilation_ISO_Date,,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms id2}@anchor{28d}@anchor{gnat_rm/intrinsic_subprograms intrinsic-operators}@anchor{28e}
  @section Intrinsic Operators
  
  
*************** It is also possible to specify such oper
*** 19076,19082 ****
  full views are appropriate arithmetic types.
  
  @node Compilation_ISO_Date,Compilation_Date,Intrinsic Operators,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms compilation-iso-date}@anchor{28d}@anchor{gnat_rm/intrinsic_subprograms id3}@anchor{28e}
  @section Compilation_ISO_Date
  
  
--- 19125,19131 ----
  full views are appropriate arithmetic types.
  
  @node Compilation_ISO_Date,Compilation_Date,Intrinsic Operators,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms compilation-iso-date}@anchor{28f}@anchor{gnat_rm/intrinsic_subprograms id3}@anchor{290}
  @section Compilation_ISO_Date
  
  
*************** application program should simply call t
*** 19090,19096 ****
  the current compilation (in local time format YYYY-MM-DD).
  
  @node Compilation_Date,Compilation_Time,Compilation_ISO_Date,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms compilation-date}@anchor{28f}@anchor{gnat_rm/intrinsic_subprograms id4}@anchor{290}
  @section Compilation_Date
  
  
--- 19139,19145 ----
  the current compilation (in local time format YYYY-MM-DD).
  
  @node Compilation_Date,Compilation_Time,Compilation_ISO_Date,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms compilation-date}@anchor{291}@anchor{gnat_rm/intrinsic_subprograms id4}@anchor{292}
  @section Compilation_Date
  
  
*************** Same as Compilation_ISO_Date, except the
*** 19100,19106 ****
  MMM DD YYYY.
  
  @node Compilation_Time,Enclosing_Entity,Compilation_Date,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms compilation-time}@anchor{291}@anchor{gnat_rm/intrinsic_subprograms id5}@anchor{292}
  @section Compilation_Time
  
  
--- 19149,19155 ----
  MMM DD YYYY.
  
  @node Compilation_Time,Enclosing_Entity,Compilation_Date,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms compilation-time}@anchor{293}@anchor{gnat_rm/intrinsic_subprograms id5}@anchor{294}
  @section Compilation_Time
  
  
*************** application program should simply call t
*** 19114,19120 ****
  the current compilation (in local time format HH:MM:SS).
  
  @node Enclosing_Entity,Exception_Information,Compilation_Time,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms enclosing-entity}@anchor{293}@anchor{gnat_rm/intrinsic_subprograms id6}@anchor{294}
  @section Enclosing_Entity
  
  
--- 19163,19169 ----
  the current compilation (in local time format HH:MM:SS).
  
  @node Enclosing_Entity,Exception_Information,Compilation_Time,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms enclosing-entity}@anchor{295}@anchor{gnat_rm/intrinsic_subprograms id6}@anchor{296}
  @section Enclosing_Entity
  
  
*************** application program should simply call t
*** 19128,19134 ****
  the current subprogram, package, task, entry, or protected subprogram.
  
  @node Exception_Information,Exception_Message,Enclosing_Entity,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms exception-information}@anchor{295}@anchor{gnat_rm/intrinsic_subprograms id7}@anchor{296}
  @section Exception_Information
  
  
--- 19177,19183 ----
  the current subprogram, package, task, entry, or protected subprogram.
  
  @node Exception_Information,Exception_Message,Enclosing_Entity,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms exception-information}@anchor{297}@anchor{gnat_rm/intrinsic_subprograms id7}@anchor{298}
  @section Exception_Information
  
  
*************** so an application program should simply
*** 19142,19148 ****
  the exception information associated with the current exception.
  
  @node Exception_Message,Exception_Name,Exception_Information,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms exception-message}@anchor{297}@anchor{gnat_rm/intrinsic_subprograms id8}@anchor{298}
  @section Exception_Message
  
  
--- 19191,19197 ----
  the exception information associated with the current exception.
  
  @node Exception_Message,Exception_Name,Exception_Information,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms exception-message}@anchor{299}@anchor{gnat_rm/intrinsic_subprograms id8}@anchor{29a}
  @section Exception_Message
  
  
*************** so an application program should simply
*** 19156,19162 ****
  the message associated with the current exception.
  
  @node Exception_Name,File,Exception_Message,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms exception-name}@anchor{299}@anchor{gnat_rm/intrinsic_subprograms id9}@anchor{29a}
  @section Exception_Name
  
  
--- 19205,19211 ----
  the message associated with the current exception.
  
  @node Exception_Name,File,Exception_Message,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms exception-name}@anchor{29b}@anchor{gnat_rm/intrinsic_subprograms id9}@anchor{29c}
  @section Exception_Name
  
  
*************** so an application program should simply
*** 19170,19176 ****
  the name of the current exception.
  
  @node File,Line,Exception_Name,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms file}@anchor{29b}@anchor{gnat_rm/intrinsic_subprograms id10}@anchor{29c}
  @section File
  
  
--- 19219,19225 ----
  the name of the current exception.
  
  @node File,Line,Exception_Name,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms file}@anchor{29d}@anchor{gnat_rm/intrinsic_subprograms id10}@anchor{29e}
  @section File
  
  
*************** application program should simply call t
*** 19184,19190 ****
  file.
  
  @node Line,Shifts and Rotates,File,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms id11}@anchor{29d}@anchor{gnat_rm/intrinsic_subprograms line}@anchor{29e}
  @section Line
  
  
--- 19233,19239 ----
  file.
  
  @node Line,Shifts and Rotates,File,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms id11}@anchor{29f}@anchor{gnat_rm/intrinsic_subprograms line}@anchor{2a0}
  @section Line
  
  
*************** application program should simply call t
*** 19198,19204 ****
  source line.
  
  @node Shifts and Rotates,Source_Location,Line,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms id12}@anchor{29f}@anchor{gnat_rm/intrinsic_subprograms shifts-and-rotates}@anchor{2a0}
  @section Shifts and Rotates
  
  
--- 19247,19253 ----
  source line.
  
  @node Shifts and Rotates,Source_Location,Line,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms id12}@anchor{2a1}@anchor{gnat_rm/intrinsic_subprograms shifts-and-rotates}@anchor{2a2}
  @section Shifts and Rotates
  
  
*************** corresponding operator for modular type.
*** 19241,19247 ****
  number may change its sign bit to positive.
  
  @node Source_Location,,Shifts and Rotates,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms id13}@anchor{2a1}@anchor{gnat_rm/intrinsic_subprograms source-location}@anchor{2a2}
  @section Source_Location
  
  
--- 19290,19296 ----
  number may change its sign bit to positive.
  
  @node Source_Location,,Shifts and Rotates,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms id13}@anchor{2a3}@anchor{gnat_rm/intrinsic_subprograms source-location}@anchor{2a4}
  @section Source_Location
  
  
*************** application program should simply call t
*** 19255,19261 ****
  source file location.
  
  @node Representation Clauses and Pragmas,Standard Library Routines,Intrinsic Subprograms,Top
! @anchor{gnat_rm/representation_clauses_and_pragmas doc}@anchor{2a3}@anchor{gnat_rm/representation_clauses_and_pragmas id1}@anchor{2a4}@anchor{gnat_rm/representation_clauses_and_pragmas representation-clauses-and-pragmas}@anchor{e}
  @chapter Representation Clauses and Pragmas
  
  
--- 19304,19310 ----
  source file location.
  
  @node Representation Clauses and Pragmas,Standard Library Routines,Intrinsic Subprograms,Top
! @anchor{gnat_rm/representation_clauses_and_pragmas doc}@anchor{2a5}@anchor{gnat_rm/representation_clauses_and_pragmas id1}@anchor{2a6}@anchor{gnat_rm/representation_clauses_and_pragmas representation-clauses-and-pragmas}@anchor{e}
  @chapter Representation Clauses and Pragmas
  
  
*************** and this section describes the additiona
*** 19301,19307 ****
  @end menu
  
  @node Alignment Clauses,Size Clauses,,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas alignment-clauses}@anchor{2a5}@anchor{gnat_rm/representation_clauses_and_pragmas id2}@anchor{2a6}
  @section Alignment Clauses
  
  
--- 19350,19356 ----
  @end menu
  
  @node Alignment Clauses,Size Clauses,,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas alignment-clauses}@anchor{2a7}@anchor{gnat_rm/representation_clauses_and_pragmas id2}@anchor{2a8}
  @section Alignment Clauses
  
  
*************** For elementary types, the alignment is t
*** 19323,19329 ****
  objects of the type divided by @code{Storage_Unit},
  and the maximum default alignment supported by the target.
  (This maximum default alignment is given by the GNAT-specific attribute
! @code{Standard'Maximum_Alignment}; see @ref{1aa,,Attribute Maximum_Alignment}.)
  
  @geindex Maximum_Alignment attribute
  
--- 19372,19378 ----
  objects of the type divided by @code{Storage_Unit},
  and the maximum default alignment supported by the target.
  (This maximum default alignment is given by the GNAT-specific attribute
! @code{Standard'Maximum_Alignment}; see @ref{1ac,,Attribute Maximum_Alignment}.)
  
  @geindex Maximum_Alignment attribute
  
*************** assumption is non-portable, and other co
*** 19431,19437 ****
  alignments for the subtype @code{RS}.
  
  @node Size Clauses,Storage_Size Clauses,Alignment Clauses,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas id3}@anchor{2a7}@anchor{gnat_rm/representation_clauses_and_pragmas size-clauses}@anchor{2a8}
  @section Size Clauses
  
  
--- 19480,19486 ----
  alignments for the subtype @code{RS}.
  
  @node Size Clauses,Storage_Size Clauses,Alignment Clauses,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas id3}@anchor{2a9}@anchor{gnat_rm/representation_clauses_and_pragmas size-clauses}@anchor{2aa}
  @section Size Clauses
  
  
*************** if it is known that a Size value can be
*** 19508,19514 ****
  type Integer.
  
  @node Storage_Size Clauses,Size of Variant Record Objects,Size Clauses,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas id4}@anchor{2a9}@anchor{gnat_rm/representation_clauses_and_pragmas storage-size-clauses}@anchor{2aa}
  @section Storage_Size Clauses
  
  
--- 19557,19563 ----
  type Integer.
  
  @node Storage_Size Clauses,Size of Variant Record Objects,Size Clauses,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas id4}@anchor{2ab}@anchor{gnat_rm/representation_clauses_and_pragmas storage-size-clauses}@anchor{2ac}
  @section Storage_Size Clauses
  
  
*************** Of course in practice, there will not be
*** 19581,19587 ****
  case of such an access declaration.
  
  @node Size of Variant Record Objects,Biased Representation,Storage_Size Clauses,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas id5}@anchor{2ab}@anchor{gnat_rm/representation_clauses_and_pragmas size-of-variant-record-objects}@anchor{2ac}
  @section Size of Variant Record Objects
  
  
--- 19630,19636 ----
  case of such an access declaration.
  
  @node Size of Variant Record Objects,Biased Representation,Storage_Size Clauses,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas id5}@anchor{2ad}@anchor{gnat_rm/representation_clauses_and_pragmas size-of-variant-record-objects}@anchor{2ae}
  @section Size of Variant Record Objects
  
  
*************** the maximum size, regardless of the curr
*** 19691,19697 ****
  variant value.
  
  @node Biased Representation,Value_Size and Object_Size Clauses,Size of Variant Record Objects,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas biased-representation}@anchor{2ad}@anchor{gnat_rm/representation_clauses_and_pragmas id6}@anchor{2ae}
  @section Biased Representation
  
  
--- 19740,19746 ----
  variant value.
  
  @node Biased Representation,Value_Size and Object_Size Clauses,Size of Variant Record Objects,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas biased-representation}@anchor{2af}@anchor{gnat_rm/representation_clauses_and_pragmas id6}@anchor{2b0}
  @section Biased Representation
  
  
*************** biased representation can be used for al
*** 19729,19735 ****
  enumeration types for which a representation clause is given.
  
  @node Value_Size and Object_Size Clauses,Component_Size Clauses,Biased Representation,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas id7}@anchor{2af}@anchor{gnat_rm/representation_clauses_and_pragmas value-size-and-object-size-clauses}@anchor{2b0}
  @section Value_Size and Object_Size Clauses
  
  
--- 19778,19784 ----
  enumeration types for which a representation clause is given.
  
  @node Value_Size and Object_Size Clauses,Component_Size Clauses,Biased Representation,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas id7}@anchor{2b1}@anchor{gnat_rm/representation_clauses_and_pragmas value-size-and-object-size-clauses}@anchor{2b2}
  @section Value_Size and Object_Size Clauses
  
  
*************** definition clause forces biased represen
*** 20045,20051 ****
  warning can be turned off using @code{-gnatw.B}.
  
  @node Component_Size Clauses,Bit_Order Clauses,Value_Size and Object_Size Clauses,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas component-size-clauses}@anchor{2b1}@anchor{gnat_rm/representation_clauses_and_pragmas id8}@anchor{2b2}
  @section Component_Size Clauses
  
  
--- 20094,20100 ----
  warning can be turned off using @code{-gnatw.B}.
  
  @node Component_Size Clauses,Bit_Order Clauses,Value_Size and Object_Size Clauses,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas component-size-clauses}@anchor{2b3}@anchor{gnat_rm/representation_clauses_and_pragmas id8}@anchor{2b4}
  @section Component_Size Clauses
  
  
*************** and a pragma Pack for the same array typ
*** 20093,20099 ****
  clauses are given, the pragma Pack will be ignored.
  
  @node Bit_Order Clauses,Effect of Bit_Order on Byte Ordering,Component_Size Clauses,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas bit-order-clauses}@anchor{2b3}@anchor{gnat_rm/representation_clauses_and_pragmas id9}@anchor{2b4}
  @section Bit_Order Clauses
  
  
--- 20142,20148 ----
  clauses are given, the pragma Pack will be ignored.
  
  @node Bit_Order Clauses,Effect of Bit_Order on Byte Ordering,Component_Size Clauses,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas bit-order-clauses}@anchor{2b5}@anchor{gnat_rm/representation_clauses_and_pragmas id9}@anchor{2b6}
  @section Bit_Order Clauses
  
  
*************** if desired.  The following section conta
*** 20199,20205 ****
  details regarding the issue of byte ordering.
  
  @node Effect of Bit_Order on Byte Ordering,Pragma Pack for Arrays,Bit_Order Clauses,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas effect-of-bit-order-on-byte-ordering}@anchor{2b5}@anchor{gnat_rm/representation_clauses_and_pragmas id10}@anchor{2b6}
  @section Effect of Bit_Order on Byte Ordering
  
  
--- 20248,20254 ----
  details regarding the issue of byte ordering.
  
  @node Effect of Bit_Order on Byte Ordering,Pragma Pack for Arrays,Bit_Order Clauses,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas effect-of-bit-order-on-byte-ordering}@anchor{2b7}@anchor{gnat_rm/representation_clauses_and_pragmas id10}@anchor{2b8}
  @section Effect of Bit_Order on Byte Ordering
  
  
*************** to set the boolean constant @code{Master
*** 20456,20462 ****
  an appropriate manner.
  
  @node Pragma Pack for Arrays,Pragma Pack for Records,Effect of Bit_Order on Byte Ordering,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas id11}@anchor{2b7}@anchor{gnat_rm/representation_clauses_and_pragmas pragma-pack-for-arrays}@anchor{2b8}
  @section Pragma Pack for Arrays
  
  
--- 20505,20511 ----
  an appropriate manner.
  
  @node Pragma Pack for Arrays,Pragma Pack for Records,Effect of Bit_Order on Byte Ordering,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas id11}@anchor{2b9}@anchor{gnat_rm/representation_clauses_and_pragmas pragma-pack-for-arrays}@anchor{2ba}
  @section Pragma Pack for Arrays
  
  
*************** Here 31-bit packing is achieved as requi
*** 20576,20582 ****
  since in this case the programmer intention is clear.
  
  @node Pragma Pack for Records,Record Representation Clauses,Pragma Pack for Arrays,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas id12}@anchor{2b9}@anchor{gnat_rm/representation_clauses_and_pragmas pragma-pack-for-records}@anchor{2ba}
  @section Pragma Pack for Records
  
  
--- 20625,20631 ----
  since in this case the programmer intention is clear.
  
  @node Pragma Pack for Records,Record Representation Clauses,Pragma Pack for Arrays,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas id12}@anchor{2bb}@anchor{gnat_rm/representation_clauses_and_pragmas pragma-pack-for-records}@anchor{2bc}
  @section Pragma Pack for Records
  
  
*************** array that is longer than 64 bits, so it
*** 20660,20666 ****
  boundary, and takes an integral number of bytes, i.e., 72 bits.
  
  @node Record Representation Clauses,Handling of Records with Holes,Pragma Pack for Records,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas id13}@anchor{2bb}@anchor{gnat_rm/representation_clauses_and_pragmas record-representation-clauses}@anchor{2bc}
  @section Record Representation Clauses
  
  
--- 20709,20715 ----
  boundary, and takes an integral number of bytes, i.e., 72 bits.
  
  @node Record Representation Clauses,Handling of Records with Holes,Pragma Pack for Records,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas id13}@anchor{2bd}@anchor{gnat_rm/representation_clauses_and_pragmas record-representation-clauses}@anchor{2be}
  @section Record Representation Clauses
  
  
*************** end record;
*** 20739,20745 ****
  @end example
  
  @node Handling of Records with Holes,Enumeration Clauses,Record Representation Clauses,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas handling-of-records-with-holes}@anchor{2bd}@anchor{gnat_rm/representation_clauses_and_pragmas id14}@anchor{2be}
  @section Handling of Records with Holes
  
  
--- 20788,20794 ----
  @end example
  
  @node Handling of Records with Holes,Enumeration Clauses,Record Representation Clauses,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas handling-of-records-with-holes}@anchor{2bf}@anchor{gnat_rm/representation_clauses_and_pragmas id14}@anchor{2c0}
  @section Handling of Records with Holes
  
  
*************** for Hrec'Size use 64;
*** 20815,20821 ****
  @end example
  
  @node Enumeration Clauses,Address Clauses,Handling of Records with Holes,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas enumeration-clauses}@anchor{2bf}@anchor{gnat_rm/representation_clauses_and_pragmas id15}@anchor{2c0}
  @section Enumeration Clauses
  
  
--- 20864,20870 ----
  @end example
  
  @node Enumeration Clauses,Address Clauses,Handling of Records with Holes,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas enumeration-clauses}@anchor{2c1}@anchor{gnat_rm/representation_clauses_and_pragmas id15}@anchor{2c2}
  @section Enumeration Clauses
  
  
*************** the overhead of converting representatio
*** 20858,20864 ****
  positional values, (i.e., the value delivered by the @code{Pos} attribute).
  
  @node Address Clauses,Use of Address Clauses for Memory-Mapped I/O,Enumeration Clauses,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas address-clauses}@anchor{2c1}@anchor{gnat_rm/representation_clauses_and_pragmas id16}@anchor{2c2}
  @section Address Clauses
  
  
--- 20907,20913 ----
  positional values, (i.e., the value delivered by the @code{Pos} attribute).
  
  @node Address Clauses,Use of Address Clauses for Memory-Mapped I/O,Enumeration Clauses,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas address-clauses}@anchor{2c3}@anchor{gnat_rm/representation_clauses_and_pragmas id16}@anchor{2c4}
  @section Address Clauses
  
  
*************** then the program compiles without the wa
*** 21197,21203 ****
  the output @code{X was not clobbered}.
  
  @node Use of Address Clauses for Memory-Mapped I/O,Effect of Convention on Representation,Address Clauses,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas id17}@anchor{2c3}@anchor{gnat_rm/representation_clauses_and_pragmas use-of-address-clauses-for-memory-mapped-i-o}@anchor{2c4}
  @section Use of Address Clauses for Memory-Mapped I/O
  
  
--- 21246,21252 ----
  the output @code{X was not clobbered}.
  
  @node Use of Address Clauses for Memory-Mapped I/O,Effect of Convention on Representation,Address Clauses,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas id17}@anchor{2c5}@anchor{gnat_rm/representation_clauses_and_pragmas use-of-address-clauses-for-memory-mapped-i-o}@anchor{2c6}
  @section Use of Address Clauses for Memory-Mapped I/O
  
  
*************** provides the pragma @code{Volatile_Full_
*** 21255,21261 ****
  pragma @code{Atomic} and will give the additional guarantee.
  
  @node Effect of Convention on Representation,Conventions and Anonymous Access Types,Use of Address Clauses for Memory-Mapped I/O,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas effect-of-convention-on-representation}@anchor{2c5}@anchor{gnat_rm/representation_clauses_and_pragmas id18}@anchor{2c6}
  @section Effect of Convention on Representation
  
  
--- 21304,21310 ----
  pragma @code{Atomic} and will give the additional guarantee.
  
  @node Effect of Convention on Representation,Conventions and Anonymous Access Types,Use of Address Clauses for Memory-Mapped I/O,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas effect-of-convention-on-representation}@anchor{2c7}@anchor{gnat_rm/representation_clauses_and_pragmas id18}@anchor{2c8}
  @section Effect of Convention on Representation
  
  
*************** when one of these values is read, any no
*** 21333,21339 ****
  @end itemize
  
  @node Conventions and Anonymous Access Types,Determining the Representations chosen by GNAT,Effect of Convention on Representation,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas conventions-and-anonymous-access-types}@anchor{2c7}@anchor{gnat_rm/representation_clauses_and_pragmas id19}@anchor{2c8}
  @section Conventions and Anonymous Access Types
  
  
--- 21382,21388 ----
  @end itemize
  
  @node Conventions and Anonymous Access Types,Determining the Representations chosen by GNAT,Effect of Convention on Representation,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas conventions-and-anonymous-access-types}@anchor{2c9}@anchor{gnat_rm/representation_clauses_and_pragmas id19}@anchor{2ca}
  @section Conventions and Anonymous Access Types
  
  
*************** package ConvComp is
*** 21409,21415 ****
  @end example
  
  @node Determining the Representations chosen by GNAT,,Conventions and Anonymous Access Types,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas determining-the-representations-chosen-by-gnat}@anchor{2c9}@anchor{gnat_rm/representation_clauses_and_pragmas id20}@anchor{2ca}
  @section Determining the Representations chosen by GNAT
  
  
--- 21458,21464 ----
  @end example
  
  @node Determining the Representations chosen by GNAT,,Conventions and Anonymous Access Types,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas determining-the-representations-chosen-by-gnat}@anchor{2cb}@anchor{gnat_rm/representation_clauses_and_pragmas id20}@anchor{2cc}
  @section Determining the Representations chosen by GNAT
  
  
*************** generated by the compiler into the origi
*** 21561,21567 ****
  the actual representation to be used.
  
  @node Standard Library Routines,The Implementation of Standard I/O,Representation Clauses and Pragmas,Top
! @anchor{gnat_rm/standard_library_routines doc}@anchor{2cb}@anchor{gnat_rm/standard_library_routines id1}@anchor{2cc}@anchor{gnat_rm/standard_library_routines standard-library-routines}@anchor{f}
  @chapter Standard Library Routines
  
  
--- 21610,21616 ----
  the actual representation to be used.
  
  @node Standard Library Routines,The Implementation of Standard I/O,Representation Clauses and Pragmas,Top
! @anchor{gnat_rm/standard_library_routines doc}@anchor{2cd}@anchor{gnat_rm/standard_library_routines id1}@anchor{2ce}@anchor{gnat_rm/standard_library_routines standard-library-routines}@anchor{f}
  @chapter Standard Library Routines
  
  
*************** For packages in Interfaces and System, a
*** 22388,22394 ****
  available in GNAT, see the Ada 2012 RM for full details.
  
  @node The Implementation of Standard I/O,The GNAT Library,Standard Library Routines,Top
! @anchor{gnat_rm/the_implementation_of_standard_i_o doc}@anchor{2cd}@anchor{gnat_rm/the_implementation_of_standard_i_o id1}@anchor{2ce}@anchor{gnat_rm/the_implementation_of_standard_i_o the-implementation-of-standard-i-o}@anchor{10}
  @chapter The Implementation of Standard I/O
  
  
--- 22437,22443 ----
  available in GNAT, see the Ada 2012 RM for full details.
  
  @node The Implementation of Standard I/O,The GNAT Library,Standard Library Routines,Top
! @anchor{gnat_rm/the_implementation_of_standard_i_o doc}@anchor{2cf}@anchor{gnat_rm/the_implementation_of_standard_i_o id1}@anchor{2d0}@anchor{gnat_rm/the_implementation_of_standard_i_o the-implementation-of-standard-i-o}@anchor{10}
  @chapter The Implementation of Standard I/O
  
  
*************** these additional facilities are also des
*** 22440,22446 ****
  @end menu
  
  @node Standard I/O Packages,FORM Strings,,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o id2}@anchor{2cf}@anchor{gnat_rm/the_implementation_of_standard_i_o standard-i-o-packages}@anchor{2d0}
  @section Standard I/O Packages
  
  
--- 22489,22495 ----
  @end menu
  
  @node Standard I/O Packages,FORM Strings,,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o id2}@anchor{2d1}@anchor{gnat_rm/the_implementation_of_standard_i_o standard-i-o-packages}@anchor{2d2}
  @section Standard I/O Packages
  
  
*************** flush the common I/O streams and in part
*** 22511,22517 ****
  elaborating the Ada code.
  
  @node FORM Strings,Direct_IO,Standard I/O Packages,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o form-strings}@anchor{2d1}@anchor{gnat_rm/the_implementation_of_standard_i_o id3}@anchor{2d2}
  @section FORM Strings
  
  
--- 22560,22566 ----
  elaborating the Ada code.
  
  @node FORM Strings,Direct_IO,Standard I/O Packages,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o form-strings}@anchor{2d3}@anchor{gnat_rm/the_implementation_of_standard_i_o id3}@anchor{2d4}
  @section FORM Strings
  
  
*************** unrecognized keyword appears in a form s
*** 22537,22543 ****
  and not considered invalid.
  
  @node Direct_IO,Sequential_IO,FORM Strings,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o direct-io}@anchor{2d3}@anchor{gnat_rm/the_implementation_of_standard_i_o id4}@anchor{2d4}
  @section Direct_IO
  
  
--- 22586,22592 ----
  and not considered invalid.
  
  @node Direct_IO,Sequential_IO,FORM Strings,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o direct-io}@anchor{2d5}@anchor{gnat_rm/the_implementation_of_standard_i_o id4}@anchor{2d6}
  @section Direct_IO
  
  
*************** There is no limit on the size of Direct_
*** 22556,22562 ****
  necessary to accommodate whatever records are written to the file.
  
  @node Sequential_IO,Text_IO,Direct_IO,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o id5}@anchor{2d5}@anchor{gnat_rm/the_implementation_of_standard_i_o sequential-io}@anchor{2d6}
  @section Sequential_IO
  
  
--- 22605,22611 ----
  necessary to accommodate whatever records are written to the file.
  
  @node Sequential_IO,Text_IO,Direct_IO,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o id5}@anchor{2d7}@anchor{gnat_rm/the_implementation_of_standard_i_o sequential-io}@anchor{2d8}
  @section Sequential_IO
  
  
*************** using Stream_IO, and this is the preferr
*** 22603,22609 ****
  above program fragment rewritten to use Stream_IO will work correctly.
  
  @node Text_IO,Wide_Text_IO,Sequential_IO,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o id6}@anchor{2d7}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io}@anchor{2d8}
  @section Text_IO
  
  
--- 22652,22658 ----
  above program fragment rewritten to use Stream_IO will work correctly.
  
  @node Text_IO,Wide_Text_IO,Sequential_IO,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o id6}@anchor{2d9}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io}@anchor{2da}
  @section Text_IO
  
  
*************** the file.
*** 22686,22692 ****
  @end menu
  
  @node Stream Pointer Positioning,Reading and Writing Non-Regular Files,,Text_IO
! @anchor{gnat_rm/the_implementation_of_standard_i_o id7}@anchor{2d9}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning}@anchor{2da}
  @subsection Stream Pointer Positioning
  
  
--- 22735,22741 ----
  @end menu
  
  @node Stream Pointer Positioning,Reading and Writing Non-Regular Files,,Text_IO
! @anchor{gnat_rm/the_implementation_of_standard_i_o id7}@anchor{2db}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning}@anchor{2dc}
  @subsection Stream Pointer Positioning
  
  
*************** between two Ada files, then the differen
*** 22722,22728 ****
  situations.
  
  @node Reading and Writing Non-Regular Files,Get_Immediate,Stream Pointer Positioning,Text_IO
! @anchor{gnat_rm/the_implementation_of_standard_i_o id8}@anchor{2db}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files}@anchor{2dc}
  @subsection Reading and Writing Non-Regular Files
  
  
--- 22771,22777 ----
  situations.
  
  @node Reading and Writing Non-Regular Files,Get_Immediate,Stream Pointer Positioning,Text_IO
! @anchor{gnat_rm/the_implementation_of_standard_i_o id8}@anchor{2dd}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files}@anchor{2de}
  @subsection Reading and Writing Non-Regular Files
  
  
*************** to read data past that end of
*** 22773,22779 ****
  file indication, until another end of file indication is entered.
  
  @node Get_Immediate,Treating Text_IO Files as Streams,Reading and Writing Non-Regular Files,Text_IO
! @anchor{gnat_rm/the_implementation_of_standard_i_o get-immediate}@anchor{2dd}@anchor{gnat_rm/the_implementation_of_standard_i_o id9}@anchor{2de}
  @subsection Get_Immediate
  
  
--- 22822,22828 ----
  file indication, until another end of file indication is entered.
  
  @node Get_Immediate,Treating Text_IO Files as Streams,Reading and Writing Non-Regular Files,Text_IO
! @anchor{gnat_rm/the_implementation_of_standard_i_o get-immediate}@anchor{2df}@anchor{gnat_rm/the_implementation_of_standard_i_o id9}@anchor{2e0}
  @subsection Get_Immediate
  
  
*************** possible), it is undefined whether the F
*** 22791,22797 ****
  page mark.
  
  @node Treating Text_IO Files as Streams,Text_IO Extensions,Get_Immediate,Text_IO
! @anchor{gnat_rm/the_implementation_of_standard_i_o id10}@anchor{2df}@anchor{gnat_rm/the_implementation_of_standard_i_o treating-text-io-files-as-streams}@anchor{2e0}
  @subsection Treating Text_IO Files as Streams
  
  
--- 22840,22846 ----
  page mark.
  
  @node Treating Text_IO Files as Streams,Text_IO Extensions,Get_Immediate,Text_IO
! @anchor{gnat_rm/the_implementation_of_standard_i_o id10}@anchor{2e1}@anchor{gnat_rm/the_implementation_of_standard_i_o treating-text-io-files-as-streams}@anchor{2e2}
  @subsection Treating Text_IO Files as Streams
  
  
*************** skipped and the effect is similar to tha
*** 22807,22813 ****
  @code{Get_Immediate}.
  
  @node Text_IO Extensions,Text_IO Facilities for Unbounded Strings,Treating Text_IO Files as Streams,Text_IO
! @anchor{gnat_rm/the_implementation_of_standard_i_o id11}@anchor{2e1}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io-extensions}@anchor{2e2}
  @subsection Text_IO Extensions
  
  
--- 22856,22862 ----
  @code{Get_Immediate}.
  
  @node Text_IO Extensions,Text_IO Facilities for Unbounded Strings,Treating Text_IO Files as Streams,Text_IO
! @anchor{gnat_rm/the_implementation_of_standard_i_o id11}@anchor{2e3}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io-extensions}@anchor{2e4}
  @subsection Text_IO Extensions
  
  
*************** the string is to be read.
*** 22835,22841 ****
  @end itemize
  
  @node Text_IO Facilities for Unbounded Strings,,Text_IO Extensions,Text_IO
! @anchor{gnat_rm/the_implementation_of_standard_i_o id12}@anchor{2e3}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io-facilities-for-unbounded-strings}@anchor{2e4}
  @subsection Text_IO Facilities for Unbounded Strings
  
  
--- 22884,22890 ----
  @end itemize
  
  @node Text_IO Facilities for Unbounded Strings,,Text_IO Extensions,Text_IO
! @anchor{gnat_rm/the_implementation_of_standard_i_o id12}@anchor{2e5}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io-facilities-for-unbounded-strings}@anchor{2e6}
  @subsection Text_IO Facilities for Unbounded Strings
  
  
*************** files @code{a-szuzti.ads} and @code{a-sz
*** 22883,22889 ****
  @code{Wide_Wide_Text_IO} functionality for unbounded wide wide strings.
  
  @node Wide_Text_IO,Wide_Wide_Text_IO,Text_IO,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o id13}@anchor{2e5}@anchor{gnat_rm/the_implementation_of_standard_i_o wide-text-io}@anchor{2e6}
  @section Wide_Text_IO
  
  
--- 22932,22938 ----
  @code{Wide_Wide_Text_IO} functionality for unbounded wide wide strings.
  
  @node Wide_Text_IO,Wide_Wide_Text_IO,Text_IO,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o id13}@anchor{2e7}@anchor{gnat_rm/the_implementation_of_standard_i_o wide-text-io}@anchor{2e8}
  @section Wide_Text_IO
  
  
*************** input also causes Constraint_Error to be
*** 23130,23141 ****
  @end menu
  
  @node Stream Pointer Positioning<2>,Reading and Writing Non-Regular Files<2>,,Wide_Text_IO
! @anchor{gnat_rm/the_implementation_of_standard_i_o id14}@anchor{2e7}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-1}@anchor{2e8}
  @subsection Stream Pointer Positioning
  
  
  @code{Ada.Wide_Text_IO} is similar to @code{Ada.Text_IO} in its handling
! of stream pointer positioning (@ref{2d8,,Text_IO}).  There is one additional
  case:
  
  If @code{Ada.Wide_Text_IO.Look_Ahead} reads a character outside the
--- 23179,23190 ----
  @end menu
  
  @node Stream Pointer Positioning<2>,Reading and Writing Non-Regular Files<2>,,Wide_Text_IO
! @anchor{gnat_rm/the_implementation_of_standard_i_o id14}@anchor{2e9}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-1}@anchor{2ea}
  @subsection Stream Pointer Positioning
  
  
  @code{Ada.Wide_Text_IO} is similar to @code{Ada.Text_IO} in its handling
! of stream pointer positioning (@ref{2da,,Text_IO}).  There is one additional
  case:
  
  If @code{Ada.Wide_Text_IO.Look_Ahead} reads a character outside the
*************** to a normal program using @code{Wide_Tex
*** 23154,23160 ****
  can be observed if the wide text file shares a stream with another file.
  
  @node Reading and Writing Non-Regular Files<2>,,Stream Pointer Positioning<2>,Wide_Text_IO
! @anchor{gnat_rm/the_implementation_of_standard_i_o id15}@anchor{2e9}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files-1}@anchor{2ea}
  @subsection Reading and Writing Non-Regular Files
  
  
--- 23203,23209 ----
  can be observed if the wide text file shares a stream with another file.
  
  @node Reading and Writing Non-Regular Files<2>,,Stream Pointer Positioning<2>,Wide_Text_IO
! @anchor{gnat_rm/the_implementation_of_standard_i_o id15}@anchor{2eb}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files-1}@anchor{2ec}
  @subsection Reading and Writing Non-Regular Files
  
  
*************** treated as data characters), and @code{E
*** 23165,23171 ****
  it is possible to read beyond an end of file.
  
  @node Wide_Wide_Text_IO,Stream_IO,Wide_Text_IO,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o id16}@anchor{2eb}@anchor{gnat_rm/the_implementation_of_standard_i_o wide-wide-text-io}@anchor{2ec}
  @section Wide_Wide_Text_IO
  
  
--- 23214,23220 ----
  it is possible to read beyond an end of file.
  
  @node Wide_Wide_Text_IO,Stream_IO,Wide_Text_IO,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o id16}@anchor{2ed}@anchor{gnat_rm/the_implementation_of_standard_i_o wide-wide-text-io}@anchor{2ee}
  @section Wide_Wide_Text_IO
  
  
*************** input also causes Constraint_Error to be
*** 23334,23345 ****
  @end menu
  
  @node Stream Pointer Positioning<3>,Reading and Writing Non-Regular Files<3>,,Wide_Wide_Text_IO
! @anchor{gnat_rm/the_implementation_of_standard_i_o id17}@anchor{2ed}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-2}@anchor{2ee}
  @subsection Stream Pointer Positioning
  
  
  @code{Ada.Wide_Wide_Text_IO} is similar to @code{Ada.Text_IO} in its handling
! of stream pointer positioning (@ref{2d8,,Text_IO}).  There is one additional
  case:
  
  If @code{Ada.Wide_Wide_Text_IO.Look_Ahead} reads a character outside the
--- 23383,23394 ----
  @end menu
  
  @node Stream Pointer Positioning<3>,Reading and Writing Non-Regular Files<3>,,Wide_Wide_Text_IO
! @anchor{gnat_rm/the_implementation_of_standard_i_o id17}@anchor{2ef}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-2}@anchor{2f0}
  @subsection Stream Pointer Positioning
  
  
  @code{Ada.Wide_Wide_Text_IO} is similar to @code{Ada.Text_IO} in its handling
! of stream pointer positioning (@ref{2da,,Text_IO}).  There is one additional
  case:
  
  If @code{Ada.Wide_Wide_Text_IO.Look_Ahead} reads a character outside the
*************** to a normal program using @code{Wide_Wid
*** 23358,23364 ****
  can be observed if the wide text file shares a stream with another file.
  
  @node Reading and Writing Non-Regular Files<3>,,Stream Pointer Positioning<3>,Wide_Wide_Text_IO
! @anchor{gnat_rm/the_implementation_of_standard_i_o id18}@anchor{2ef}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files-2}@anchor{2f0}
  @subsection Reading and Writing Non-Regular Files
  
  
--- 23407,23413 ----
  can be observed if the wide text file shares a stream with another file.
  
  @node Reading and Writing Non-Regular Files<3>,,Stream Pointer Positioning<3>,Wide_Wide_Text_IO
! @anchor{gnat_rm/the_implementation_of_standard_i_o id18}@anchor{2f1}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files-2}@anchor{2f2}
  @subsection Reading and Writing Non-Regular Files
  
  
*************** treated as data characters), and @code{E
*** 23369,23375 ****
  it is possible to read beyond an end of file.
  
  @node Stream_IO,Text Translation,Wide_Wide_Text_IO,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o id19}@anchor{2f1}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-io}@anchor{2f2}
  @section Stream_IO
  
  
--- 23418,23424 ----
  it is possible to read beyond an end of file.
  
  @node Stream_IO,Text Translation,Wide_Wide_Text_IO,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o id19}@anchor{2f3}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-io}@anchor{2f4}
  @section Stream_IO
  
  
*************** manner described for stream attributes.
*** 23391,23397 ****
  @end itemize
  
  @node Text Translation,Shared Files,Stream_IO,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o id20}@anchor{2f3}@anchor{gnat_rm/the_implementation_of_standard_i_o text-translation}@anchor{2f4}
  @section Text Translation
  
  
--- 23440,23446 ----
  @end itemize
  
  @node Text Translation,Shared Files,Stream_IO,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o id20}@anchor{2f5}@anchor{gnat_rm/the_implementation_of_standard_i_o text-translation}@anchor{2f6}
  @section Text Translation
  
  
*************** mode. (corresponds to_O_U16TEXT).
*** 23425,23431 ****
  @end itemize
  
  @node Shared Files,Filenames encoding,Text Translation,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o id21}@anchor{2f5}@anchor{gnat_rm/the_implementation_of_standard_i_o shared-files}@anchor{2f6}
  @section Shared Files
  
  
--- 23474,23480 ----
  @end itemize
  
  @node Shared Files,Filenames encoding,Text Translation,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o id21}@anchor{2f7}@anchor{gnat_rm/the_implementation_of_standard_i_o shared-files}@anchor{2f8}
  @section Shared Files
  
  
*************** heterogeneous input-output.  Although th
*** 23488,23494 ****
  for this purpose (using the stream attributes).
  
  @node Filenames encoding,File content encoding,Shared Files,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o filenames-encoding}@anchor{2f7}@anchor{gnat_rm/the_implementation_of_standard_i_o id22}@anchor{2f8}
  @section Filenames encoding
  
  
--- 23537,23543 ----
  for this purpose (using the stream attributes).
  
  @node Filenames encoding,File content encoding,Shared Files,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o filenames-encoding}@anchor{2f9}@anchor{gnat_rm/the_implementation_of_standard_i_o id22}@anchor{2fa}
  @section Filenames encoding
  
  
*************** platform. On the other Operating Systems
*** 23528,23534 ****
  UTF-8 natively.
  
  @node File content encoding,Open Modes,Filenames encoding,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o file-content-encoding}@anchor{2f9}@anchor{gnat_rm/the_implementation_of_standard_i_o id23}@anchor{2fa}
  @section File content encoding
  
  
--- 23577,23583 ----
  UTF-8 natively.
  
  @node File content encoding,Open Modes,Filenames encoding,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o file-content-encoding}@anchor{2fb}@anchor{gnat_rm/the_implementation_of_standard_i_o id23}@anchor{2fc}
  @section File content encoding
  
  
*************** Unicode 8-bit encoding
*** 23561,23567 ****
  This encoding is only supported on the Windows platform.
  
  @node Open Modes,Operations on C Streams,File content encoding,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o id24}@anchor{2fb}@anchor{gnat_rm/the_implementation_of_standard_i_o open-modes}@anchor{2fc}
  @section Open Modes
  
  
--- 23610,23616 ----
  This encoding is only supported on the Windows platform.
  
  @node Open Modes,Operations on C Streams,File content encoding,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o id24}@anchor{2fd}@anchor{gnat_rm/the_implementation_of_standard_i_o open-modes}@anchor{2fe}
  @section Open Modes
  
  
*************** subsequently requires switching from rea
*** 23664,23670 ****
  then the file is reopened in @code{r+} mode to permit the required operation.
  
  @node Operations on C Streams,Interfacing to C Streams,Open Modes,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o id25}@anchor{2fd}@anchor{gnat_rm/the_implementation_of_standard_i_o operations-on-c-streams}@anchor{2fe}
  @section Operations on C Streams
  
  
--- 23713,23719 ----
  then the file is reopened in @code{r+} mode to permit the required operation.
  
  @node Operations on C Streams,Interfacing to C Streams,Open Modes,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o id25}@anchor{2ff}@anchor{gnat_rm/the_implementation_of_standard_i_o operations-on-c-streams}@anchor{300}
  @section Operations on C Streams
  
  
*************** end Interfaces.C_Streams;
*** 23824,23830 ****
  @end example
  
  @node Interfacing to C Streams,,Operations on C Streams,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o id26}@anchor{2ff}@anchor{gnat_rm/the_implementation_of_standard_i_o interfacing-to-c-streams}@anchor{300}
  @section Interfacing to C Streams
  
  
--- 23873,23879 ----
  @end example
  
  @node Interfacing to C Streams,,Operations on C Streams,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o id26}@anchor{301}@anchor{gnat_rm/the_implementation_of_standard_i_o interfacing-to-c-streams}@anchor{302}
  @section Interfacing to C Streams
  
  
*************** imported from a C program, allowing an A
*** 23917,23923 ****
  existing C file.
  
  @node The GNAT Library,Interfacing to Other Languages,The Implementation of Standard I/O,Top
! @anchor{gnat_rm/the_gnat_library doc}@anchor{301}@anchor{gnat_rm/the_gnat_library id1}@anchor{302}@anchor{gnat_rm/the_gnat_library the-gnat-library}@anchor{11}
  @chapter The GNAT Library
  
  
--- 23966,23972 ----
  existing C file.
  
  @node The GNAT Library,Interfacing to Other Languages,The Implementation of Standard I/O,Top
! @anchor{gnat_rm/the_gnat_library doc}@anchor{303}@anchor{gnat_rm/the_gnat_library id1}@anchor{304}@anchor{gnat_rm/the_gnat_library the-gnat-library}@anchor{11}
  @chapter The GNAT Library
  
  
*************** of GNAT, and will generate a warning mes
*** 24103,24109 ****
  @end menu
  
  @node Ada Characters Latin_9 a-chlat9 ads,Ada Characters Wide_Latin_1 a-cwila1 ads,,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-characters-latin-9-a-chlat9-ads}@anchor{303}@anchor{gnat_rm/the_gnat_library id2}@anchor{304}
  @section @code{Ada.Characters.Latin_9} (@code{a-chlat9.ads})
  
  
--- 24152,24158 ----
  @end menu
  
  @node Ada Characters Latin_9 a-chlat9 ads,Ada Characters Wide_Latin_1 a-cwila1 ads,,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-characters-latin-9-a-chlat9-ads}@anchor{305}@anchor{gnat_rm/the_gnat_library id2}@anchor{306}
  @section @code{Ada.Characters.Latin_9} (@code{a-chlat9.ads})
  
  
*************** is specifically authorized by the Ada Re
*** 24120,24126 ****
  (RM A.3.3(27)).
  
  @node Ada Characters Wide_Latin_1 a-cwila1 ads,Ada Characters Wide_Latin_9 a-cwila9 ads,Ada Characters Latin_9 a-chlat9 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-characters-wide-latin-1-a-cwila1-ads}@anchor{305}@anchor{gnat_rm/the_gnat_library id3}@anchor{306}
  @section @code{Ada.Characters.Wide_Latin_1} (@code{a-cwila1.ads})
  
  
--- 24169,24175 ----
  (RM A.3.3(27)).
  
  @node Ada Characters Wide_Latin_1 a-cwila1 ads,Ada Characters Wide_Latin_9 a-cwila9 ads,Ada Characters Latin_9 a-chlat9 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-characters-wide-latin-1-a-cwila1-ads}@anchor{307}@anchor{gnat_rm/the_gnat_library id3}@anchor{308}
  @section @code{Ada.Characters.Wide_Latin_1} (@code{a-cwila1.ads})
  
  
*************** is specifically authorized by the Ada Re
*** 24137,24143 ****
  (RM A.3.3(27)).
  
  @node Ada Characters Wide_Latin_9 a-cwila9 ads,Ada Characters Wide_Wide_Latin_1 a-chzla1 ads,Ada Characters Wide_Latin_1 a-cwila1 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-characters-wide-latin-9-a-cwila9-ads}@anchor{307}@anchor{gnat_rm/the_gnat_library id4}@anchor{308}
  @section @code{Ada.Characters.Wide_Latin_9} (@code{a-cwila9.ads})
  
  
--- 24186,24192 ----
  (RM A.3.3(27)).
  
  @node Ada Characters Wide_Latin_9 a-cwila9 ads,Ada Characters Wide_Wide_Latin_1 a-chzla1 ads,Ada Characters Wide_Latin_1 a-cwila1 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-characters-wide-latin-9-a-cwila9-ads}@anchor{309}@anchor{gnat_rm/the_gnat_library id4}@anchor{30a}
  @section @code{Ada.Characters.Wide_Latin_9} (@code{a-cwila9.ads})
  
  
*************** is specifically authorized by the Ada Re
*** 24154,24160 ****
  (RM A.3.3(27)).
  
  @node Ada Characters Wide_Wide_Latin_1 a-chzla1 ads,Ada Characters Wide_Wide_Latin_9 a-chzla9 ads,Ada Characters Wide_Latin_9 a-cwila9 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-characters-wide-wide-latin-1-a-chzla1-ads}@anchor{309}@anchor{gnat_rm/the_gnat_library id5}@anchor{30a}
  @section @code{Ada.Characters.Wide_Wide_Latin_1} (@code{a-chzla1.ads})
  
  
--- 24203,24209 ----
  (RM A.3.3(27)).
  
  @node Ada Characters Wide_Wide_Latin_1 a-chzla1 ads,Ada Characters Wide_Wide_Latin_9 a-chzla9 ads,Ada Characters Wide_Latin_9 a-cwila9 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-characters-wide-wide-latin-1-a-chzla1-ads}@anchor{30b}@anchor{gnat_rm/the_gnat_library id5}@anchor{30c}
  @section @code{Ada.Characters.Wide_Wide_Latin_1} (@code{a-chzla1.ads})
  
  
*************** is specifically authorized by the Ada Re
*** 24171,24177 ****
  (RM A.3.3(27)).
  
  @node Ada Characters Wide_Wide_Latin_9 a-chzla9 ads,Ada Containers Bounded_Holders a-coboho ads,Ada Characters Wide_Wide_Latin_1 a-chzla1 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-characters-wide-wide-latin-9-a-chzla9-ads}@anchor{30b}@anchor{gnat_rm/the_gnat_library id6}@anchor{30c}
  @section @code{Ada.Characters.Wide_Wide_Latin_9} (@code{a-chzla9.ads})
  
  
--- 24220,24226 ----
  (RM A.3.3(27)).
  
  @node Ada Characters Wide_Wide_Latin_9 a-chzla9 ads,Ada Containers Bounded_Holders a-coboho ads,Ada Characters Wide_Wide_Latin_1 a-chzla1 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-characters-wide-wide-latin-9-a-chzla9-ads}@anchor{30d}@anchor{gnat_rm/the_gnat_library id6}@anchor{30e}
  @section @code{Ada.Characters.Wide_Wide_Latin_9} (@code{a-chzla9.ads})
  
  
*************** is specifically authorized by the Ada Re
*** 24188,24194 ****
  (RM A.3.3(27)).
  
  @node Ada Containers Bounded_Holders a-coboho ads,Ada Command_Line Environment a-colien ads,Ada Characters Wide_Wide_Latin_9 a-chzla9 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-containers-bounded-holders-a-coboho-ads}@anchor{30d}@anchor{gnat_rm/the_gnat_library id7}@anchor{30e}
  @section @code{Ada.Containers.Bounded_Holders} (@code{a-coboho.ads})
  
  
--- 24237,24243 ----
  (RM A.3.3(27)).
  
  @node Ada Containers Bounded_Holders a-coboho ads,Ada Command_Line Environment a-colien ads,Ada Characters Wide_Wide_Latin_9 a-chzla9 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-containers-bounded-holders-a-coboho-ads}@anchor{30f}@anchor{gnat_rm/the_gnat_library id7}@anchor{310}
  @section @code{Ada.Containers.Bounded_Holders} (@code{a-coboho.ads})
  
  
*************** This child of @code{Ada.Containers} defi
*** 24200,24206 ****
  Indefinite_Holders that avoids heap allocation.
  
  @node Ada Command_Line Environment a-colien ads,Ada Command_Line Remove a-colire ads,Ada Containers Bounded_Holders a-coboho ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-command-line-environment-a-colien-ads}@anchor{30f}@anchor{gnat_rm/the_gnat_library id8}@anchor{310}
  @section @code{Ada.Command_Line.Environment} (@code{a-colien.ads})
  
  
--- 24249,24255 ----
  Indefinite_Holders that avoids heap allocation.
  
  @node Ada Command_Line Environment a-colien ads,Ada Command_Line Remove a-colire ads,Ada Containers Bounded_Holders a-coboho ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-command-line-environment-a-colien-ads}@anchor{311}@anchor{gnat_rm/the_gnat_library id8}@anchor{312}
  @section @code{Ada.Command_Line.Environment} (@code{a-colien.ads})
  
  
*************** provides a mechanism for obtaining envir
*** 24213,24219 ****
  where this concept makes sense.
  
  @node Ada Command_Line Remove a-colire ads,Ada Command_Line Response_File a-clrefi ads,Ada Command_Line Environment a-colien ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-command-line-remove-a-colire-ads}@anchor{311}@anchor{gnat_rm/the_gnat_library id9}@anchor{312}
  @section @code{Ada.Command_Line.Remove} (@code{a-colire.ads})
  
  
--- 24262,24268 ----
  where this concept makes sense.
  
  @node Ada Command_Line Remove a-colire ads,Ada Command_Line Response_File a-clrefi ads,Ada Command_Line Environment a-colien ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-command-line-remove-a-colire-ads}@anchor{313}@anchor{gnat_rm/the_gnat_library id9}@anchor{314}
  @section @code{Ada.Command_Line.Remove} (@code{a-colire.ads})
  
  
*************** to further calls to the subprograms in @
*** 24231,24237 ****
  will not see the removed argument.
  
  @node Ada Command_Line Response_File a-clrefi ads,Ada Direct_IO C_Streams a-diocst ads,Ada Command_Line Remove a-colire ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-command-line-response-file-a-clrefi-ads}@anchor{313}@anchor{gnat_rm/the_gnat_library id10}@anchor{314}
  @section @code{Ada.Command_Line.Response_File} (@code{a-clrefi.ads})
  
  
--- 24280,24286 ----
  will not see the removed argument.
  
  @node Ada Command_Line Response_File a-clrefi ads,Ada Direct_IO C_Streams a-diocst ads,Ada Command_Line Remove a-colire ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-command-line-response-file-a-clrefi-ads}@anchor{315}@anchor{gnat_rm/the_gnat_library id10}@anchor{316}
  @section @code{Ada.Command_Line.Response_File} (@code{a-clrefi.ads})
  
  
*************** Using a response file allow passing a se
*** 24251,24257 ****
  than the maximum allowed by the system on the command line.
  
  @node Ada Direct_IO C_Streams a-diocst ads,Ada Exceptions Is_Null_Occurrence a-einuoc ads,Ada Command_Line Response_File a-clrefi ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-direct-io-c-streams-a-diocst-ads}@anchor{315}@anchor{gnat_rm/the_gnat_library id11}@anchor{316}
  @section @code{Ada.Direct_IO.C_Streams} (@code{a-diocst.ads})
  
  
--- 24300,24306 ----
  than the maximum allowed by the system on the command line.
  
  @node Ada Direct_IO C_Streams a-diocst ads,Ada Exceptions Is_Null_Occurrence a-einuoc ads,Ada Command_Line Response_File a-clrefi ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-direct-io-c-streams-a-diocst-ads}@anchor{317}@anchor{gnat_rm/the_gnat_library id11}@anchor{318}
  @section @code{Ada.Direct_IO.C_Streams} (@code{a-diocst.ads})
  
  
*************** extracted from a file opened on the Ada
*** 24266,24272 ****
  can be constructed from a stream opened on the C side.
  
  @node Ada Exceptions Is_Null_Occurrence a-einuoc ads,Ada Exceptions Last_Chance_Handler a-elchha ads,Ada Direct_IO C_Streams a-diocst ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-exceptions-is-null-occurrence-a-einuoc-ads}@anchor{317}@anchor{gnat_rm/the_gnat_library id12}@anchor{318}
  @section @code{Ada.Exceptions.Is_Null_Occurrence} (@code{a-einuoc.ads})
  
  
--- 24315,24321 ----
  can be constructed from a stream opened on the C side.
  
  @node Ada Exceptions Is_Null_Occurrence a-einuoc ads,Ada Exceptions Last_Chance_Handler a-elchha ads,Ada Direct_IO C_Streams a-diocst ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-exceptions-is-null-occurrence-a-einuoc-ads}@anchor{319}@anchor{gnat_rm/the_gnat_library id12}@anchor{31a}
  @section @code{Ada.Exceptions.Is_Null_Occurrence} (@code{a-einuoc.ads})
  
  
*************** exception occurrence (@code{Null_Occurre
*** 24280,24286 ****
  an exception.
  
  @node Ada Exceptions Last_Chance_Handler a-elchha ads,Ada Exceptions Traceback a-exctra ads,Ada Exceptions Is_Null_Occurrence a-einuoc ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-exceptions-last-chance-handler-a-elchha-ads}@anchor{319}@anchor{gnat_rm/the_gnat_library id13}@anchor{31a}
  @section @code{Ada.Exceptions.Last_Chance_Handler} (@code{a-elchha.ads})
  
  
--- 24329,24335 ----
  an exception.
  
  @node Ada Exceptions Last_Chance_Handler a-elchha ads,Ada Exceptions Traceback a-exctra ads,Ada Exceptions Is_Null_Occurrence a-einuoc ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-exceptions-last-chance-handler-a-elchha-ads}@anchor{31b}@anchor{gnat_rm/the_gnat_library id13}@anchor{31c}
  @section @code{Ada.Exceptions.Last_Chance_Handler} (@code{a-elchha.ads})
  
  
*************** exceptions (hence the name last chance),
*** 24294,24300 ****
  terminating the program. Note that this subprogram never returns.
  
  @node Ada Exceptions Traceback a-exctra ads,Ada Sequential_IO C_Streams a-siocst ads,Ada Exceptions Last_Chance_Handler a-elchha ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-exceptions-traceback-a-exctra-ads}@anchor{31b}@anchor{gnat_rm/the_gnat_library id14}@anchor{31c}
  @section @code{Ada.Exceptions.Traceback} (@code{a-exctra.ads})
  
  
--- 24343,24349 ----
  terminating the program. Note that this subprogram never returns.
  
  @node Ada Exceptions Traceback a-exctra ads,Ada Sequential_IO C_Streams a-siocst ads,Ada Exceptions Last_Chance_Handler a-elchha ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-exceptions-traceback-a-exctra-ads}@anchor{31d}@anchor{gnat_rm/the_gnat_library id14}@anchor{31e}
  @section @code{Ada.Exceptions.Traceback} (@code{a-exctra.ads})
  
  
*************** give a traceback array of addresses base
*** 24307,24313 ****
  occurrence.
  
  @node Ada Sequential_IO C_Streams a-siocst ads,Ada Streams Stream_IO C_Streams a-ssicst ads,Ada Exceptions Traceback a-exctra ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-sequential-io-c-streams-a-siocst-ads}@anchor{31d}@anchor{gnat_rm/the_gnat_library id15}@anchor{31e}
  @section @code{Ada.Sequential_IO.C_Streams} (@code{a-siocst.ads})
  
  
--- 24356,24362 ----
  occurrence.
  
  @node Ada Sequential_IO C_Streams a-siocst ads,Ada Streams Stream_IO C_Streams a-ssicst ads,Ada Exceptions Traceback a-exctra ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-sequential-io-c-streams-a-siocst-ads}@anchor{31f}@anchor{gnat_rm/the_gnat_library id15}@anchor{320}
  @section @code{Ada.Sequential_IO.C_Streams} (@code{a-siocst.ads})
  
  
*************** extracted from a file opened on the Ada
*** 24322,24328 ****
  can be constructed from a stream opened on the C side.
  
  @node Ada Streams Stream_IO C_Streams a-ssicst ads,Ada Strings Unbounded Text_IO a-suteio ads,Ada Sequential_IO C_Streams a-siocst ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-streams-stream-io-c-streams-a-ssicst-ads}@anchor{31f}@anchor{gnat_rm/the_gnat_library id16}@anchor{320}
  @section @code{Ada.Streams.Stream_IO.C_Streams} (@code{a-ssicst.ads})
  
  
--- 24371,24377 ----
  can be constructed from a stream opened on the C side.
  
  @node Ada Streams Stream_IO C_Streams a-ssicst ads,Ada Strings Unbounded Text_IO a-suteio ads,Ada Sequential_IO C_Streams a-siocst ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-streams-stream-io-c-streams-a-ssicst-ads}@anchor{321}@anchor{gnat_rm/the_gnat_library id16}@anchor{322}
  @section @code{Ada.Streams.Stream_IO.C_Streams} (@code{a-ssicst.ads})
  
  
*************** extracted from a file opened on the Ada
*** 24337,24343 ****
  can be constructed from a stream opened on the C side.
  
  @node Ada Strings Unbounded Text_IO a-suteio ads,Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads,Ada Streams Stream_IO C_Streams a-ssicst ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-strings-unbounded-text-io-a-suteio-ads}@anchor{321}@anchor{gnat_rm/the_gnat_library id17}@anchor{322}
  @section @code{Ada.Strings.Unbounded.Text_IO} (@code{a-suteio.ads})
  
  
--- 24386,24392 ----
  can be constructed from a stream opened on the C side.
  
  @node Ada Strings Unbounded Text_IO a-suteio ads,Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads,Ada Streams Stream_IO C_Streams a-ssicst ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-strings-unbounded-text-io-a-suteio-ads}@anchor{323}@anchor{gnat_rm/the_gnat_library id17}@anchor{324}
  @section @code{Ada.Strings.Unbounded.Text_IO} (@code{a-suteio.ads})
  
  
*************** strings, avoiding the necessity for an i
*** 24354,24360 ****
  with ordinary strings.
  
  @node Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads,Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads,Ada Strings Unbounded Text_IO a-suteio ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-strings-wide-unbounded-wide-text-io-a-swuwti-ads}@anchor{323}@anchor{gnat_rm/the_gnat_library id18}@anchor{324}
  @section @code{Ada.Strings.Wide_Unbounded.Wide_Text_IO} (@code{a-swuwti.ads})
  
  
--- 24403,24409 ----
  with ordinary strings.
  
  @node Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads,Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads,Ada Strings Unbounded Text_IO a-suteio ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-strings-wide-unbounded-wide-text-io-a-swuwti-ads}@anchor{325}@anchor{gnat_rm/the_gnat_library id18}@anchor{326}
  @section @code{Ada.Strings.Wide_Unbounded.Wide_Text_IO} (@code{a-swuwti.ads})
  
  
*************** wide strings, avoiding the necessity for
*** 24371,24377 ****
  with ordinary wide strings.
  
  @node Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads,Ada Task_Initialization a-tasini ads,Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-strings-wide-wide-unbounded-wide-wide-text-io-a-szuzti-ads}@anchor{325}@anchor{gnat_rm/the_gnat_library id19}@anchor{326}
  @section @code{Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO} (@code{a-szuzti.ads})
  
  
--- 24420,24426 ----
  with ordinary wide strings.
  
  @node Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads,Ada Task_Initialization a-tasini ads,Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-strings-wide-wide-unbounded-wide-wide-text-io-a-szuzti-ads}@anchor{327}@anchor{gnat_rm/the_gnat_library id19}@anchor{328}
  @section @code{Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO} (@code{a-szuzti.ads})
  
  
*************** wide wide strings, avoiding the necessit
*** 24388,24394 ****
  with ordinary wide wide strings.
  
  @node Ada Task_Initialization a-tasini ads,Ada Text_IO C_Streams a-tiocst ads,Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-task-initialization-a-tasini-ads}@anchor{327}@anchor{gnat_rm/the_gnat_library id20}@anchor{328}
  @section @code{Ada.Task_Initialization} (@code{a-tasini.ads})
  
  
--- 24437,24443 ----
  with ordinary wide wide strings.
  
  @node Ada Task_Initialization a-tasini ads,Ada Text_IO C_Streams a-tiocst ads,Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-task-initialization-a-tasini-ads}@anchor{329}@anchor{gnat_rm/the_gnat_library id20}@anchor{32a}
  @section @code{Ada.Task_Initialization} (@code{a-tasini.ads})
  
  
*************** parameterless procedures. Note that such
*** 24400,24406 ****
  those tasks activated after the handler is set.
  
  @node Ada Text_IO C_Streams a-tiocst ads,Ada Text_IO Reset_Standard_Files a-tirsfi ads,Ada Task_Initialization a-tasini ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-text-io-c-streams-a-tiocst-ads}@anchor{329}@anchor{gnat_rm/the_gnat_library id21}@anchor{32a}
  @section @code{Ada.Text_IO.C_Streams} (@code{a-tiocst.ads})
  
  
--- 24449,24455 ----
  those tasks activated after the handler is set.
  
  @node Ada Text_IO C_Streams a-tiocst ads,Ada Text_IO Reset_Standard_Files a-tirsfi ads,Ada Task_Initialization a-tasini ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-text-io-c-streams-a-tiocst-ads}@anchor{32b}@anchor{gnat_rm/the_gnat_library id21}@anchor{32c}
  @section @code{Ada.Text_IO.C_Streams} (@code{a-tiocst.ads})
  
  
*************** extracted from a file opened on the Ada
*** 24415,24421 ****
  can be constructed from a stream opened on the C side.
  
  @node Ada Text_IO Reset_Standard_Files a-tirsfi ads,Ada Wide_Characters Unicode a-wichun ads,Ada Text_IO C_Streams a-tiocst ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-text-io-reset-standard-files-a-tirsfi-ads}@anchor{32b}@anchor{gnat_rm/the_gnat_library id22}@anchor{32c}
  @section @code{Ada.Text_IO.Reset_Standard_Files} (@code{a-tirsfi.ads})
  
  
--- 24464,24470 ----
  can be constructed from a stream opened on the C side.
  
  @node Ada Text_IO Reset_Standard_Files a-tirsfi ads,Ada Wide_Characters Unicode a-wichun ads,Ada Text_IO C_Streams a-tiocst ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-text-io-reset-standard-files-a-tirsfi-ads}@anchor{32d}@anchor{gnat_rm/the_gnat_library id22}@anchor{32e}
  @section @code{Ada.Text_IO.Reset_Standard_Files} (@code{a-tirsfi.ads})
  
  
*************** execution (for example a standard input
*** 24430,24436 ****
  interactive).
  
  @node Ada Wide_Characters Unicode a-wichun ads,Ada Wide_Text_IO C_Streams a-wtcstr ads,Ada Text_IO Reset_Standard_Files a-tirsfi ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-wide-characters-unicode-a-wichun-ads}@anchor{32d}@anchor{gnat_rm/the_gnat_library id23}@anchor{32e}
  @section @code{Ada.Wide_Characters.Unicode} (@code{a-wichun.ads})
  
  
--- 24479,24485 ----
  interactive).
  
  @node Ada Wide_Characters Unicode a-wichun ads,Ada Wide_Text_IO C_Streams a-wtcstr ads,Ada Text_IO Reset_Standard_Files a-tirsfi ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-wide-characters-unicode-a-wichun-ads}@anchor{32f}@anchor{gnat_rm/the_gnat_library id23}@anchor{330}
  @section @code{Ada.Wide_Characters.Unicode} (@code{a-wichun.ads})
  
  
*************** This package provides subprograms that a
*** 24443,24449 ****
  Wide_Character values according to Unicode categories.
  
  @node Ada Wide_Text_IO C_Streams a-wtcstr ads,Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads,Ada Wide_Characters Unicode a-wichun ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-wide-text-io-c-streams-a-wtcstr-ads}@anchor{32f}@anchor{gnat_rm/the_gnat_library id24}@anchor{330}
  @section @code{Ada.Wide_Text_IO.C_Streams} (@code{a-wtcstr.ads})
  
  
--- 24492,24498 ----
  Wide_Character values according to Unicode categories.
  
  @node Ada Wide_Text_IO C_Streams a-wtcstr ads,Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads,Ada Wide_Characters Unicode a-wichun ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-wide-text-io-c-streams-a-wtcstr-ads}@anchor{331}@anchor{gnat_rm/the_gnat_library id24}@anchor{332}
  @section @code{Ada.Wide_Text_IO.C_Streams} (@code{a-wtcstr.ads})
  
  
*************** extracted from a file opened on the Ada
*** 24458,24464 ****
  can be constructed from a stream opened on the C side.
  
  @node Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads,Ada Wide_Wide_Characters Unicode a-zchuni ads,Ada Wide_Text_IO C_Streams a-wtcstr ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-wide-text-io-reset-standard-files-a-wrstfi-ads}@anchor{331}@anchor{gnat_rm/the_gnat_library id25}@anchor{332}
  @section @code{Ada.Wide_Text_IO.Reset_Standard_Files} (@code{a-wrstfi.ads})
  
  
--- 24507,24513 ----
  can be constructed from a stream opened on the C side.
  
  @node Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads,Ada Wide_Wide_Characters Unicode a-zchuni ads,Ada Wide_Text_IO C_Streams a-wtcstr ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-wide-text-io-reset-standard-files-a-wrstfi-ads}@anchor{333}@anchor{gnat_rm/the_gnat_library id25}@anchor{334}
  @section @code{Ada.Wide_Text_IO.Reset_Standard_Files} (@code{a-wrstfi.ads})
  
  
*************** execution (for example a standard input
*** 24473,24479 ****
  interactive).
  
  @node Ada Wide_Wide_Characters Unicode a-zchuni ads,Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads,Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-wide-wide-characters-unicode-a-zchuni-ads}@anchor{333}@anchor{gnat_rm/the_gnat_library id26}@anchor{334}
  @section @code{Ada.Wide_Wide_Characters.Unicode} (@code{a-zchuni.ads})
  
  
--- 24522,24528 ----
  interactive).
  
  @node Ada Wide_Wide_Characters Unicode a-zchuni ads,Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads,Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-wide-wide-characters-unicode-a-zchuni-ads}@anchor{335}@anchor{gnat_rm/the_gnat_library id26}@anchor{336}
  @section @code{Ada.Wide_Wide_Characters.Unicode} (@code{a-zchuni.ads})
  
  
*************** This package provides subprograms that a
*** 24486,24492 ****
  Wide_Wide_Character values according to Unicode categories.
  
  @node Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads,Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads,Ada Wide_Wide_Characters Unicode a-zchuni ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-wide-wide-text-io-c-streams-a-ztcstr-ads}@anchor{335}@anchor{gnat_rm/the_gnat_library id27}@anchor{336}
  @section @code{Ada.Wide_Wide_Text_IO.C_Streams} (@code{a-ztcstr.ads})
  
  
--- 24535,24541 ----
  Wide_Wide_Character values according to Unicode categories.
  
  @node Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads,Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads,Ada Wide_Wide_Characters Unicode a-zchuni ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-wide-wide-text-io-c-streams-a-ztcstr-ads}@anchor{337}@anchor{gnat_rm/the_gnat_library id27}@anchor{338}
  @section @code{Ada.Wide_Wide_Text_IO.C_Streams} (@code{a-ztcstr.ads})
  
  
*************** extracted from a file opened on the Ada
*** 24501,24507 ****
  can be constructed from a stream opened on the C side.
  
  @node Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads,GNAT Altivec g-altive ads,Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-wide-wide-text-io-reset-standard-files-a-zrstfi-ads}@anchor{337}@anchor{gnat_rm/the_gnat_library id28}@anchor{338}
  @section @code{Ada.Wide_Wide_Text_IO.Reset_Standard_Files} (@code{a-zrstfi.ads})
  
  
--- 24550,24556 ----
  can be constructed from a stream opened on the C side.
  
  @node Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads,GNAT Altivec g-altive ads,Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-wide-wide-text-io-reset-standard-files-a-zrstfi-ads}@anchor{339}@anchor{gnat_rm/the_gnat_library id28}@anchor{33a}
  @section @code{Ada.Wide_Wide_Text_IO.Reset_Standard_Files} (@code{a-zrstfi.ads})
  
  
*************** change during execution (for example a s
*** 24516,24522 ****
  redefined to be interactive).
  
  @node GNAT Altivec g-altive ads,GNAT Altivec Conversions g-altcon ads,Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-altivec-g-altive-ads}@anchor{339}@anchor{gnat_rm/the_gnat_library id29}@anchor{33a}
  @section @code{GNAT.Altivec} (@code{g-altive.ads})
  
  
--- 24565,24571 ----
  redefined to be interactive).
  
  @node GNAT Altivec g-altive ads,GNAT Altivec Conversions g-altcon ads,Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-altivec-g-altive-ads}@anchor{33b}@anchor{gnat_rm/the_gnat_library id29}@anchor{33c}
  @section @code{GNAT.Altivec} (@code{g-altive.ads})
  
  
*************** definitions of constants and types commo
*** 24529,24535 ****
  binding.
  
  @node GNAT Altivec Conversions g-altcon ads,GNAT Altivec Vector_Operations g-alveop ads,GNAT Altivec g-altive ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-altivec-conversions-g-altcon-ads}@anchor{33b}@anchor{gnat_rm/the_gnat_library id30}@anchor{33c}
  @section @code{GNAT.Altivec.Conversions} (@code{g-altcon.ads})
  
  
--- 24578,24584 ----
  binding.
  
  @node GNAT Altivec Conversions g-altcon ads,GNAT Altivec Vector_Operations g-alveop ads,GNAT Altivec g-altive ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-altivec-conversions-g-altcon-ads}@anchor{33d}@anchor{gnat_rm/the_gnat_library id30}@anchor{33e}
  @section @code{GNAT.Altivec.Conversions} (@code{g-altcon.ads})
  
  
*************** binding.
*** 24540,24546 ****
  This package provides the Vector/View conversion routines.
  
  @node GNAT Altivec Vector_Operations g-alveop ads,GNAT Altivec Vector_Types g-alvety ads,GNAT Altivec Conversions g-altcon ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-altivec-vector-operations-g-alveop-ads}@anchor{33d}@anchor{gnat_rm/the_gnat_library id31}@anchor{33e}
  @section @code{GNAT.Altivec.Vector_Operations} (@code{g-alveop.ads})
  
  
--- 24589,24595 ----
  This package provides the Vector/View conversion routines.
  
  @node GNAT Altivec Vector_Operations g-alveop ads,GNAT Altivec Vector_Types g-alvety ads,GNAT Altivec Conversions g-altcon ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-altivec-vector-operations-g-alveop-ads}@anchor{33f}@anchor{gnat_rm/the_gnat_library id31}@anchor{340}
  @section @code{GNAT.Altivec.Vector_Operations} (@code{g-alveop.ads})
  
  
*************** library. The hard binding is provided as
*** 24554,24560 ****
  is common to both bindings.
  
  @node GNAT Altivec Vector_Types g-alvety ads,GNAT Altivec Vector_Views g-alvevi ads,GNAT Altivec Vector_Operations g-alveop ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-altivec-vector-types-g-alvety-ads}@anchor{33f}@anchor{gnat_rm/the_gnat_library id32}@anchor{340}
  @section @code{GNAT.Altivec.Vector_Types} (@code{g-alvety.ads})
  
  
--- 24603,24609 ----
  is common to both bindings.
  
  @node GNAT Altivec Vector_Types g-alvety ads,GNAT Altivec Vector_Views g-alvevi ads,GNAT Altivec Vector_Operations g-alveop ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-altivec-vector-types-g-alvety-ads}@anchor{341}@anchor{gnat_rm/the_gnat_library id32}@anchor{342}
  @section @code{GNAT.Altivec.Vector_Types} (@code{g-alvety.ads})
  
  
*************** This package exposes the various vector
*** 24566,24572 ****
  to AltiVec facilities.
  
  @node GNAT Altivec Vector_Views g-alvevi ads,GNAT Array_Split g-arrspl ads,GNAT Altivec Vector_Types g-alvety ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-altivec-vector-views-g-alvevi-ads}@anchor{341}@anchor{gnat_rm/the_gnat_library id33}@anchor{342}
  @section @code{GNAT.Altivec.Vector_Views} (@code{g-alvevi.ads})
  
  
--- 24615,24621 ----
  to AltiVec facilities.
  
  @node GNAT Altivec Vector_Views g-alvevi ads,GNAT Array_Split g-arrspl ads,GNAT Altivec Vector_Types g-alvety ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-altivec-vector-views-g-alvevi-ads}@anchor{343}@anchor{gnat_rm/the_gnat_library id33}@anchor{344}
  @section @code{GNAT.Altivec.Vector_Views} (@code{g-alvevi.ads})
  
  
*************** vector elements and provides a simple wa
*** 24581,24587 ****
  objects.
  
  @node GNAT Array_Split g-arrspl ads,GNAT AWK g-awk ads,GNAT Altivec Vector_Views g-alvevi ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-array-split-g-arrspl-ads}@anchor{343}@anchor{gnat_rm/the_gnat_library id34}@anchor{344}
  @section @code{GNAT.Array_Split} (@code{g-arrspl.ads})
  
  
--- 24630,24636 ----
  objects.
  
  @node GNAT Array_Split g-arrspl ads,GNAT AWK g-awk ads,GNAT Altivec Vector_Views g-alvevi ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-array-split-g-arrspl-ads}@anchor{345}@anchor{gnat_rm/the_gnat_library id34}@anchor{346}
  @section @code{GNAT.Array_Split} (@code{g-arrspl.ads})
  
  
*************** an array wherever the separators appear,
*** 24594,24600 ****
  to the resulting slices.
  
  @node GNAT AWK g-awk ads,GNAT Binary_Search g-binsea ads,GNAT Array_Split g-arrspl ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-awk-g-awk-ads}@anchor{345}@anchor{gnat_rm/the_gnat_library id35}@anchor{346}
  @section @code{GNAT.AWK} (@code{g-awk.ads})
  
  
--- 24643,24649 ----
  to the resulting slices.
  
  @node GNAT AWK g-awk ads,GNAT Binary_Search g-binsea ads,GNAT Array_Split g-arrspl ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-awk-g-awk-ads}@anchor{347}@anchor{gnat_rm/the_gnat_library id35}@anchor{348}
  @section @code{GNAT.AWK} (@code{g-awk.ads})
  
  
*************** or more files containing formatted data.
*** 24609,24615 ****
  where each record is a line and a field is a data element in this line.
  
  @node GNAT Binary_Search g-binsea ads,GNAT Bind_Environment g-binenv ads,GNAT AWK g-awk ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-binary-search-g-binsea-ads}@anchor{347}@anchor{gnat_rm/the_gnat_library id36}@anchor{348}
  @section @code{GNAT.Binary_Search} (@code{g-binsea.ads})
  
  
--- 24658,24664 ----
  where each record is a line and a field is a data element in this line.
  
  @node GNAT Binary_Search g-binsea ads,GNAT Bind_Environment g-binenv ads,GNAT AWK g-awk ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-binary-search-g-binsea-ads}@anchor{349}@anchor{gnat_rm/the_gnat_library id36}@anchor{34a}
  @section @code{GNAT.Binary_Search} (@code{g-binsea.ads})
  
  
*************** Allow binary search of a sorted array (o
*** 24621,24627 ****
  the generic does not reference the array directly).
  
  @node GNAT Bind_Environment g-binenv ads,GNAT Branch_Prediction g-brapre ads,GNAT Binary_Search g-binsea ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-bind-environment-g-binenv-ads}@anchor{349}@anchor{gnat_rm/the_gnat_library id37}@anchor{34a}
  @section @code{GNAT.Bind_Environment} (@code{g-binenv.ads})
  
  
--- 24670,24676 ----
  the generic does not reference the array directly).
  
  @node GNAT Bind_Environment g-binenv ads,GNAT Branch_Prediction g-brapre ads,GNAT Binary_Search g-binsea ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-bind-environment-g-binenv-ads}@anchor{34b}@anchor{gnat_rm/the_gnat_library id37}@anchor{34c}
  @section @code{GNAT.Bind_Environment} (@code{g-binenv.ads})
  
  
*************** These associations can be specified usin
*** 24634,24640 ****
  line switch.
  
  @node GNAT Branch_Prediction g-brapre ads,GNAT Bounded_Buffers g-boubuf ads,GNAT Bind_Environment g-binenv ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-branch-prediction-g-brapre-ads}@anchor{34b}@anchor{gnat_rm/the_gnat_library id38}@anchor{34c}
  @section @code{GNAT.Branch_Prediction} (@code{g-brapre.ads})
  
  
--- 24683,24689 ----
  line switch.
  
  @node GNAT Branch_Prediction g-brapre ads,GNAT Bounded_Buffers g-boubuf ads,GNAT Bind_Environment g-binenv ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-branch-prediction-g-brapre-ads}@anchor{34d}@anchor{gnat_rm/the_gnat_library id38}@anchor{34e}
  @section @code{GNAT.Branch_Prediction} (@code{g-brapre.ads})
  
  
*************** line switch.
*** 24645,24651 ****
  Provides routines giving hints to the branch predictor of the code generator.
  
  @node GNAT Bounded_Buffers g-boubuf ads,GNAT Bounded_Mailboxes g-boumai ads,GNAT Branch_Prediction g-brapre ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-bounded-buffers-g-boubuf-ads}@anchor{34d}@anchor{gnat_rm/the_gnat_library id39}@anchor{34e}
  @section @code{GNAT.Bounded_Buffers} (@code{g-boubuf.ads})
  
  
--- 24694,24700 ----
  Provides routines giving hints to the branch predictor of the code generator.
  
  @node GNAT Bounded_Buffers g-boubuf ads,GNAT Bounded_Mailboxes g-boumai ads,GNAT Branch_Prediction g-brapre ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-bounded-buffers-g-boubuf-ads}@anchor{34f}@anchor{gnat_rm/the_gnat_library id39}@anchor{350}
  @section @code{GNAT.Bounded_Buffers} (@code{g-boubuf.ads})
  
  
*************** useful directly or as parts of the imple
*** 24660,24666 ****
  such as mailboxes.
  
  @node GNAT Bounded_Mailboxes g-boumai ads,GNAT Bubble_Sort g-bubsor ads,GNAT Bounded_Buffers g-boubuf ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-bounded-mailboxes-g-boumai-ads}@anchor{34f}@anchor{gnat_rm/the_gnat_library id40}@anchor{350}
  @section @code{GNAT.Bounded_Mailboxes} (@code{g-boumai.ads})
  
  
--- 24709,24715 ----
  such as mailboxes.
  
  @node GNAT Bounded_Mailboxes g-boumai ads,GNAT Bubble_Sort g-bubsor ads,GNAT Bounded_Buffers g-boubuf ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-bounded-mailboxes-g-boumai-ads}@anchor{351}@anchor{gnat_rm/the_gnat_library id40}@anchor{352}
  @section @code{GNAT.Bounded_Mailboxes} (@code{g-boumai.ads})
  
  
*************** such as mailboxes.
*** 24673,24679 ****
  Provides a thread-safe asynchronous intertask mailbox communication facility.
  
  @node GNAT Bubble_Sort g-bubsor ads,GNAT Bubble_Sort_A g-busora ads,GNAT Bounded_Mailboxes g-boumai ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-bubble-sort-g-bubsor-ads}@anchor{351}@anchor{gnat_rm/the_gnat_library id41}@anchor{352}
  @section @code{GNAT.Bubble_Sort} (@code{g-bubsor.ads})
  
  
--- 24722,24728 ----
  Provides a thread-safe asynchronous intertask mailbox communication facility.
  
  @node GNAT Bubble_Sort g-bubsor ads,GNAT Bubble_Sort_A g-busora ads,GNAT Bounded_Mailboxes g-boumai ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-bubble-sort-g-bubsor-ads}@anchor{353}@anchor{gnat_rm/the_gnat_library id41}@anchor{354}
  @section @code{GNAT.Bubble_Sort} (@code{g-bubsor.ads})
  
  
*************** data items.  Exchange and comparison pro
*** 24688,24694 ****
  access-to-procedure values.
  
  @node GNAT Bubble_Sort_A g-busora ads,GNAT Bubble_Sort_G g-busorg ads,GNAT Bubble_Sort g-bubsor ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-bubble-sort-a-g-busora-ads}@anchor{353}@anchor{gnat_rm/the_gnat_library id42}@anchor{354}
  @section @code{GNAT.Bubble_Sort_A} (@code{g-busora.ads})
  
  
--- 24737,24743 ----
  access-to-procedure values.
  
  @node GNAT Bubble_Sort_A g-busora ads,GNAT Bubble_Sort_G g-busorg ads,GNAT Bubble_Sort g-bubsor ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-bubble-sort-a-g-busora-ads}@anchor{355}@anchor{gnat_rm/the_gnat_library id42}@anchor{356}
  @section @code{GNAT.Bubble_Sort_A} (@code{g-busora.ads})
  
  
*************** access-to-procedure values. This is an o
*** 24704,24710 ****
  compatibility. Usually @code{GNAT.Bubble_Sort} will be preferable.
  
  @node GNAT Bubble_Sort_G g-busorg ads,GNAT Byte_Order_Mark g-byorma ads,GNAT Bubble_Sort_A g-busora ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-bubble-sort-g-g-busorg-ads}@anchor{355}@anchor{gnat_rm/the_gnat_library id43}@anchor{356}
  @section @code{GNAT.Bubble_Sort_G} (@code{g-busorg.ads})
  
  
--- 24753,24759 ----
  compatibility. Usually @code{GNAT.Bubble_Sort} will be preferable.
  
  @node GNAT Bubble_Sort_G g-busorg ads,GNAT Byte_Order_Mark g-byorma ads,GNAT Bubble_Sort_A g-busora ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-bubble-sort-g-g-busorg-ads}@anchor{357}@anchor{gnat_rm/the_gnat_library id43}@anchor{358}
  @section @code{GNAT.Bubble_Sort_G} (@code{g-busorg.ads})
  
  
*************** if the procedures can be inlined, at the
*** 24720,24726 ****
  multiple instantiations.
  
  @node GNAT Byte_Order_Mark g-byorma ads,GNAT Byte_Swapping g-bytswa ads,GNAT Bubble_Sort_G g-busorg ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-byte-order-mark-g-byorma-ads}@anchor{357}@anchor{gnat_rm/the_gnat_library id44}@anchor{358}
  @section @code{GNAT.Byte_Order_Mark} (@code{g-byorma.ads})
  
  
--- 24769,24775 ----
  multiple instantiations.
  
  @node GNAT Byte_Order_Mark g-byorma ads,GNAT Byte_Swapping g-bytswa ads,GNAT Bubble_Sort_G g-busorg ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-byte-order-mark-g-byorma-ads}@anchor{359}@anchor{gnat_rm/the_gnat_library id44}@anchor{35a}
  @section @code{GNAT.Byte_Order_Mark} (@code{g-byorma.ads})
  
  
*************** the encoding of the string. The routine
*** 24736,24742 ****
  sequences for various UCS input formats.
  
  @node GNAT Byte_Swapping g-bytswa ads,GNAT C_Time g-c_time ads,GNAT Byte_Order_Mark g-byorma ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-byte-swapping-g-bytswa-ads}@anchor{359}@anchor{gnat_rm/the_gnat_library id45}@anchor{35a}
  @section @code{GNAT.Byte_Swapping} (@code{g-bytswa.ads})
  
  
--- 24785,24791 ----
  sequences for various UCS input formats.
  
  @node GNAT Byte_Swapping g-bytswa ads,GNAT C_Time g-c_time ads,GNAT Byte_Order_Mark g-byorma ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-byte-swapping-g-bytswa-ads}@anchor{35b}@anchor{gnat_rm/the_gnat_library id45}@anchor{35c}
  @section @code{GNAT.Byte_Swapping} (@code{g-bytswa.ads})
  
  
*************** General routines for swapping the bytes
*** 24750,24756 ****
  Machine-specific implementations are available in some cases.
  
  @node GNAT C_Time g-c_time ads,GNAT Calendar g-calend ads,GNAT Byte_Swapping g-bytswa ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-c-time-g-c-time-ads}@anchor{35b}@anchor{gnat_rm/the_gnat_library id46}@anchor{35c}
  @section @code{GNAT.C_Time} (@code{g-c_time.ads})
  
  
--- 24799,24805 ----
  Machine-specific implementations are available in some cases.
  
  @node GNAT C_Time g-c_time ads,GNAT Calendar g-calend ads,GNAT Byte_Swapping g-bytswa ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-c-time-g-c-time-ads}@anchor{35d}@anchor{gnat_rm/the_gnat_library id46}@anchor{35e}
  @section @code{GNAT.C_Time} (@code{g-c_time.ads})
  
  
*************** Provides the time_t, timeval and timespe
*** 24762,24768 ****
  types defined by the OS, as well as various conversion functions.
  
  @node GNAT Calendar g-calend ads,GNAT Calendar Time_IO g-catiio ads,GNAT C_Time g-c_time ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-calendar-g-calend-ads}@anchor{35d}@anchor{gnat_rm/the_gnat_library id47}@anchor{35e}
  @section @code{GNAT.Calendar} (@code{g-calend.ads})
  
  
--- 24811,24817 ----
  types defined by the OS, as well as various conversion functions.
  
  @node GNAT Calendar g-calend ads,GNAT Calendar Time_IO g-catiio ads,GNAT C_Time g-c_time ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-calendar-g-calend-ads}@anchor{35f}@anchor{gnat_rm/the_gnat_library id47}@anchor{360}
  @section @code{GNAT.Calendar} (@code{g-calend.ads})
  
  
*************** Extends the facilities provided by @code
*** 24774,24780 ****
  of days of the week, an extended @code{Split} and @code{Time_Of} capability.
  
  @node GNAT Calendar Time_IO g-catiio ads,GNAT CRC32 g-crc32 ads,GNAT Calendar g-calend ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-calendar-time-io-g-catiio-ads}@anchor{35f}@anchor{gnat_rm/the_gnat_library id48}@anchor{360}
  @section @code{GNAT.Calendar.Time_IO} (@code{g-catiio.ads})
  
  
--- 24823,24829 ----
  of days of the week, an extended @code{Split} and @code{Time_Of} capability.
  
  @node GNAT Calendar Time_IO g-catiio ads,GNAT CRC32 g-crc32 ads,GNAT Calendar g-calend ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-calendar-time-io-g-catiio-ads}@anchor{361}@anchor{gnat_rm/the_gnat_library id48}@anchor{362}
  @section @code{GNAT.Calendar.Time_IO} (@code{g-catiio.ads})
  
  
*************** of days of the week, an extended @code{S
*** 24785,24791 ****
  @geindex GNAT.Calendar.Time_IO (g-catiio.ads)
  
  @node GNAT CRC32 g-crc32 ads,GNAT Case_Util g-casuti ads,GNAT Calendar Time_IO g-catiio ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-crc32-g-crc32-ads}@anchor{361}@anchor{gnat_rm/the_gnat_library id49}@anchor{362}
  @section @code{GNAT.CRC32} (@code{g-crc32.ads})
  
  
--- 24834,24840 ----
  @geindex GNAT.Calendar.Time_IO (g-catiio.ads)
  
  @node GNAT CRC32 g-crc32 ads,GNAT Case_Util g-casuti ads,GNAT Calendar Time_IO g-catiio ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-crc32-g-crc32-ads}@anchor{363}@anchor{gnat_rm/the_gnat_library id49}@anchor{364}
  @section @code{GNAT.CRC32} (@code{g-crc32.ads})
  
  
*************** of this algorithm see
*** 24802,24808 ****
  Aug. 1988.  Sarwate, D.V.
  
  @node GNAT Case_Util g-casuti ads,GNAT CGI g-cgi ads,GNAT CRC32 g-crc32 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-case-util-g-casuti-ads}@anchor{363}@anchor{gnat_rm/the_gnat_library id50}@anchor{364}
  @section @code{GNAT.Case_Util} (@code{g-casuti.ads})
  
  
--- 24851,24857 ----
  Aug. 1988.  Sarwate, D.V.
  
  @node GNAT Case_Util g-casuti ads,GNAT CGI g-cgi ads,GNAT CRC32 g-crc32 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-case-util-g-casuti-ads}@anchor{365}@anchor{gnat_rm/the_gnat_library id50}@anchor{366}
  @section @code{GNAT.Case_Util} (@code{g-casuti.ads})
  
  
*************** without the overhead of the full casing
*** 24817,24823 ****
  in @code{Ada.Characters.Handling}.
  
  @node GNAT CGI g-cgi ads,GNAT CGI Cookie g-cgicoo ads,GNAT Case_Util g-casuti ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-cgi-g-cgi-ads}@anchor{365}@anchor{gnat_rm/the_gnat_library id51}@anchor{366}
  @section @code{GNAT.CGI} (@code{g-cgi.ads})
  
  
--- 24866,24872 ----
  in @code{Ada.Characters.Handling}.
  
  @node GNAT CGI g-cgi ads,GNAT CGI Cookie g-cgicoo ads,GNAT Case_Util g-casuti ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-cgi-g-cgi-ads}@anchor{367}@anchor{gnat_rm/the_gnat_library id51}@anchor{368}
  @section @code{GNAT.CGI} (@code{g-cgi.ads})
  
  
*************** builds a table whose index is the key an
*** 24832,24838 ****
  with this table.
  
  @node GNAT CGI Cookie g-cgicoo ads,GNAT CGI Debug g-cgideb ads,GNAT CGI g-cgi ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-cgi-cookie-g-cgicoo-ads}@anchor{367}@anchor{gnat_rm/the_gnat_library id52}@anchor{368}
  @section @code{GNAT.CGI.Cookie} (@code{g-cgicoo.ads})
  
  
--- 24881,24887 ----
  with this table.
  
  @node GNAT CGI Cookie g-cgicoo ads,GNAT CGI Debug g-cgideb ads,GNAT CGI g-cgi ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-cgi-cookie-g-cgicoo-ads}@anchor{369}@anchor{gnat_rm/the_gnat_library id52}@anchor{36a}
  @section @code{GNAT.CGI.Cookie} (@code{g-cgicoo.ads})
  
  
*************** Common Gateway Interface (CGI).  It expo
*** 24847,24853 ****
  cookies (piece of information kept in the Web client software).
  
  @node GNAT CGI Debug g-cgideb ads,GNAT Command_Line g-comlin ads,GNAT CGI Cookie g-cgicoo ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-cgi-debug-g-cgideb-ads}@anchor{369}@anchor{gnat_rm/the_gnat_library id53}@anchor{36a}
  @section @code{GNAT.CGI.Debug} (@code{g-cgideb.ads})
  
  
--- 24896,24902 ----
  cookies (piece of information kept in the Web client software).
  
  @node GNAT CGI Debug g-cgideb ads,GNAT Command_Line g-comlin ads,GNAT CGI Cookie g-cgicoo ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-cgi-debug-g-cgideb-ads}@anchor{36b}@anchor{gnat_rm/the_gnat_library id53}@anchor{36c}
  @section @code{GNAT.CGI.Debug} (@code{g-cgideb.ads})
  
  
*************** This is a package to help debugging CGI
*** 24859,24865 ****
  programs written in Ada.
  
  @node GNAT Command_Line g-comlin ads,GNAT Compiler_Version g-comver ads,GNAT CGI Debug g-cgideb ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-command-line-g-comlin-ads}@anchor{36b}@anchor{gnat_rm/the_gnat_library id54}@anchor{36c}
  @section @code{GNAT.Command_Line} (@code{g-comlin.ads})
  
  
--- 24908,24914 ----
  programs written in Ada.
  
  @node GNAT Command_Line g-comlin ads,GNAT Compiler_Version g-comver ads,GNAT CGI Debug g-cgideb ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-command-line-g-comlin-ads}@anchor{36d}@anchor{gnat_rm/the_gnat_library id54}@anchor{36e}
  @section @code{GNAT.Command_Line} (@code{g-comlin.ads})
  
  
*************** including the ability to scan for named
*** 24872,24878 ****
  and expand file names using wildcard notations.
  
  @node GNAT Compiler_Version g-comver ads,GNAT Ctrl_C g-ctrl_c ads,GNAT Command_Line g-comlin ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-compiler-version-g-comver-ads}@anchor{36d}@anchor{gnat_rm/the_gnat_library id55}@anchor{36e}
  @section @code{GNAT.Compiler_Version} (@code{g-comver.ads})
  
  
--- 24921,24927 ----
  and expand file names using wildcard notations.
  
  @node GNAT Compiler_Version g-comver ads,GNAT Ctrl_C g-ctrl_c ads,GNAT Command_Line g-comlin ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-compiler-version-g-comver-ads}@anchor{36f}@anchor{gnat_rm/the_gnat_library id55}@anchor{370}
  @section @code{GNAT.Compiler_Version} (@code{g-comver.ads})
  
  
*************** of the compiler if a consistent tool set
*** 24890,24896 ****
  of a partition).
  
  @node GNAT Ctrl_C g-ctrl_c ads,GNAT Current_Exception g-curexc ads,GNAT Compiler_Version g-comver ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-ctrl-c-g-ctrl-c-ads}@anchor{36f}@anchor{gnat_rm/the_gnat_library id56}@anchor{370}
  @section @code{GNAT.Ctrl_C} (@code{g-ctrl_c.ads})
  
  
--- 24939,24945 ----
  of a partition).
  
  @node GNAT Ctrl_C g-ctrl_c ads,GNAT Current_Exception g-curexc ads,GNAT Compiler_Version g-comver ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-ctrl-c-g-ctrl-c-ads}@anchor{371}@anchor{gnat_rm/the_gnat_library id56}@anchor{372}
  @section @code{GNAT.Ctrl_C} (@code{g-ctrl_c.ads})
  
  
*************** of a partition).
*** 24901,24907 ****
  Provides a simple interface to handle Ctrl-C keyboard events.
  
  @node GNAT Current_Exception g-curexc ads,GNAT Debug_Pools g-debpoo ads,GNAT Ctrl_C g-ctrl_c ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-current-exception-g-curexc-ads}@anchor{371}@anchor{gnat_rm/the_gnat_library id57}@anchor{372}
  @section @code{GNAT.Current_Exception} (@code{g-curexc.ads})
  
  
--- 24950,24956 ----
  Provides a simple interface to handle Ctrl-C keyboard events.
  
  @node GNAT Current_Exception g-curexc ads,GNAT Debug_Pools g-debpoo ads,GNAT Ctrl_C g-ctrl_c ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-current-exception-g-curexc-ads}@anchor{373}@anchor{gnat_rm/the_gnat_library id57}@anchor{374}
  @section @code{GNAT.Current_Exception} (@code{g-curexc.ads})
  
  
*************** This is particularly useful in simulatin
*** 24918,24924 ****
  obtaining information about exceptions provided by Ada 83 compilers.
  
  @node GNAT Debug_Pools g-debpoo ads,GNAT Debug_Utilities g-debuti ads,GNAT Current_Exception g-curexc ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-debug-pools-g-debpoo-ads}@anchor{373}@anchor{gnat_rm/the_gnat_library id58}@anchor{374}
  @section @code{GNAT.Debug_Pools} (@code{g-debpoo.ads})
  
  
--- 24967,24973 ----
  obtaining information about exceptions provided by Ada 83 compilers.
  
  @node GNAT Debug_Pools g-debpoo ads,GNAT Debug_Utilities g-debuti ads,GNAT Current_Exception g-curexc ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-debug-pools-g-debpoo-ads}@anchor{375}@anchor{gnat_rm/the_gnat_library id58}@anchor{376}
  @section @code{GNAT.Debug_Pools} (@code{g-debpoo.ads})
  
  
*************** problems.
*** 24935,24941 ****
  See @code{The GNAT Debug_Pool Facility} section in the @cite{GNAT User’s Guide}.
  
  @node GNAT Debug_Utilities g-debuti ads,GNAT Decode_String g-decstr ads,GNAT Debug_Pools g-debpoo ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-debug-utilities-g-debuti-ads}@anchor{375}@anchor{gnat_rm/the_gnat_library id59}@anchor{376}
  @section @code{GNAT.Debug_Utilities} (@code{g-debuti.ads})
  
  
--- 24984,24990 ----
  See @code{The GNAT Debug_Pool Facility} section in the @cite{GNAT User’s Guide}.
  
  @node GNAT Debug_Utilities g-debuti ads,GNAT Decode_String g-decstr ads,GNAT Debug_Pools g-debpoo ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-debug-utilities-g-debuti-ads}@anchor{377}@anchor{gnat_rm/the_gnat_library id59}@anchor{378}
  @section @code{GNAT.Debug_Utilities} (@code{g-debuti.ads})
  
  
*************** to and from string images of address val
*** 24948,24954 ****
  for hexadecimal literals.
  
  @node GNAT Decode_String g-decstr ads,GNAT Decode_UTF8_String g-deutst ads,GNAT Debug_Utilities g-debuti ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-decode-string-g-decstr-ads}@anchor{377}@anchor{gnat_rm/the_gnat_library id60}@anchor{378}
  @section @code{GNAT.Decode_String} (@code{g-decstr.ads})
  
  
--- 24997,25003 ----
  for hexadecimal literals.
  
  @node GNAT Decode_String g-decstr ads,GNAT Decode_UTF8_String g-deutst ads,GNAT Debug_Utilities g-debuti ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-decode-string-g-decstr-ads}@anchor{379}@anchor{gnat_rm/the_gnat_library id60}@anchor{37a}
  @section @code{GNAT.Decode_String} (@code{g-decstr.ads})
  
  
*************** Useful in conjunction with Unicode chara
*** 24972,24978 ****
  preinstantiation for UTF-8. See next entry.
  
  @node GNAT Decode_UTF8_String g-deutst ads,GNAT Directory_Operations g-dirope ads,GNAT Decode_String g-decstr ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-decode-utf8-string-g-deutst-ads}@anchor{379}@anchor{gnat_rm/the_gnat_library id61}@anchor{37a}
  @section @code{GNAT.Decode_UTF8_String} (@code{g-deutst.ads})
  
  
--- 25021,25027 ----
  preinstantiation for UTF-8. See next entry.
  
  @node GNAT Decode_UTF8_String g-deutst ads,GNAT Directory_Operations g-dirope ads,GNAT Decode_String g-decstr ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-decode-utf8-string-g-deutst-ads}@anchor{37b}@anchor{gnat_rm/the_gnat_library id61}@anchor{37c}
  @section @code{GNAT.Decode_UTF8_String} (@code{g-deutst.ads})
  
  
*************** preinstantiation for UTF-8. See next ent
*** 24993,24999 ****
  A preinstantiation of GNAT.Decode_Strings for UTF-8 encoding.
  
  @node GNAT Directory_Operations g-dirope ads,GNAT Directory_Operations Iteration g-diopit ads,GNAT Decode_UTF8_String g-deutst ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-directory-operations-g-dirope-ads}@anchor{37b}@anchor{gnat_rm/the_gnat_library id62}@anchor{37c}
  @section @code{GNAT.Directory_Operations} (@code{g-dirope.ads})
  
  
--- 25042,25048 ----
  A preinstantiation of GNAT.Decode_Strings for UTF-8 encoding.
  
  @node GNAT Directory_Operations g-dirope ads,GNAT Directory_Operations Iteration g-diopit ads,GNAT Decode_UTF8_String g-deutst ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-directory-operations-g-dirope-ads}@anchor{37d}@anchor{gnat_rm/the_gnat_library id62}@anchor{37e}
  @section @code{GNAT.Directory_Operations} (@code{g-dirope.ads})
  
  
*************** the current directory, making new direct
*** 25006,25012 ****
  directory.
  
  @node GNAT Directory_Operations Iteration g-diopit ads,GNAT Dynamic_HTables g-dynhta ads,GNAT Directory_Operations g-dirope ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-directory-operations-iteration-g-diopit-ads}@anchor{37d}@anchor{gnat_rm/the_gnat_library id63}@anchor{37e}
  @section @code{GNAT.Directory_Operations.Iteration} (@code{g-diopit.ads})
  
  
--- 25055,25061 ----
  directory.
  
  @node GNAT Directory_Operations Iteration g-diopit ads,GNAT Dynamic_HTables g-dynhta ads,GNAT Directory_Operations g-dirope ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-directory-operations-iteration-g-diopit-ads}@anchor{37f}@anchor{gnat_rm/the_gnat_library id63}@anchor{380}
  @section @code{GNAT.Directory_Operations.Iteration} (@code{g-diopit.ads})
  
  
*************** A child unit of GNAT.Directory_Operation
*** 25018,25024 ****
  for iterating through directories.
  
  @node GNAT Dynamic_HTables g-dynhta ads,GNAT Dynamic_Tables g-dyntab ads,GNAT Directory_Operations Iteration g-diopit ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-dynamic-htables-g-dynhta-ads}@anchor{37f}@anchor{gnat_rm/the_gnat_library id64}@anchor{380}
  @section @code{GNAT.Dynamic_HTables} (@code{g-dynhta.ads})
  
  
--- 25067,25073 ----
  for iterating through directories.
  
  @node GNAT Dynamic_HTables g-dynhta ads,GNAT Dynamic_Tables g-dyntab ads,GNAT Directory_Operations Iteration g-diopit ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-dynamic-htables-g-dynhta-ads}@anchor{381}@anchor{gnat_rm/the_gnat_library id64}@anchor{382}
  @section @code{GNAT.Dynamic_HTables} (@code{g-dynhta.ads})
  
  
*************** dynamic instances of the hash table, whi
*** 25036,25042 ****
  @code{GNAT.HTable} creates a single instance of the hash table.
  
  @node GNAT Dynamic_Tables g-dyntab ads,GNAT Encode_String g-encstr ads,GNAT Dynamic_HTables g-dynhta ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-dynamic-tables-g-dyntab-ads}@anchor{381}@anchor{gnat_rm/the_gnat_library id65}@anchor{382}
  @section @code{GNAT.Dynamic_Tables} (@code{g-dyntab.ads})
  
  
--- 25085,25091 ----
  @code{GNAT.HTable} creates a single instance of the hash table.
  
  @node GNAT Dynamic_Tables g-dyntab ads,GNAT Encode_String g-encstr ads,GNAT Dynamic_HTables g-dynhta ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-dynamic-tables-g-dyntab-ads}@anchor{383}@anchor{gnat_rm/the_gnat_library id65}@anchor{384}
  @section @code{GNAT.Dynamic_Tables} (@code{g-dyntab.ads})
  
  
*************** dynamic instances of the table, while an
*** 25056,25062 ****
  @code{GNAT.Table} creates a single instance of the table type.
  
  @node GNAT Encode_String g-encstr ads,GNAT Encode_UTF8_String g-enutst ads,GNAT Dynamic_Tables g-dyntab ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-encode-string-g-encstr-ads}@anchor{383}@anchor{gnat_rm/the_gnat_library id66}@anchor{384}
  @section @code{GNAT.Encode_String} (@code{g-encstr.ads})
  
  
--- 25105,25111 ----
  @code{GNAT.Table} creates a single instance of the table type.
  
  @node GNAT Encode_String g-encstr ads,GNAT Encode_UTF8_String g-enutst ads,GNAT Dynamic_Tables g-dyntab ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-encode-string-g-encstr-ads}@anchor{385}@anchor{gnat_rm/the_gnat_library id66}@anchor{386}
  @section @code{GNAT.Encode_String} (@code{g-encstr.ads})
  
  
*************** encoding method. Useful in conjunction w
*** 25078,25084 ****
  Note there is a preinstantiation for UTF-8. See next entry.
  
  @node GNAT Encode_UTF8_String g-enutst ads,GNAT Exception_Actions g-excact ads,GNAT Encode_String g-encstr ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-encode-utf8-string-g-enutst-ads}@anchor{385}@anchor{gnat_rm/the_gnat_library id67}@anchor{386}
  @section @code{GNAT.Encode_UTF8_String} (@code{g-enutst.ads})
  
  
--- 25127,25133 ----
  Note there is a preinstantiation for UTF-8. See next entry.
  
  @node GNAT Encode_UTF8_String g-enutst ads,GNAT Exception_Actions g-excact ads,GNAT Encode_String g-encstr ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-encode-utf8-string-g-enutst-ads}@anchor{387}@anchor{gnat_rm/the_gnat_library id67}@anchor{388}
  @section @code{GNAT.Encode_UTF8_String} (@code{g-enutst.ads})
  
  
*************** Note there is a preinstantiation for UTF
*** 25099,25105 ****
  A preinstantiation of GNAT.Encode_Strings for UTF-8 encoding.
  
  @node GNAT Exception_Actions g-excact ads,GNAT Exception_Traces g-exctra ads,GNAT Encode_UTF8_String g-enutst ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-exception-actions-g-excact-ads}@anchor{387}@anchor{gnat_rm/the_gnat_library id68}@anchor{388}
  @section @code{GNAT.Exception_Actions} (@code{g-excact.ads})
  
  
--- 25148,25154 ----
  A preinstantiation of GNAT.Encode_Strings for UTF-8 encoding.
  
  @node GNAT Exception_Actions g-excact ads,GNAT Exception_Traces g-exctra ads,GNAT Encode_UTF8_String g-enutst ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-exception-actions-g-excact-ads}@anchor{389}@anchor{gnat_rm/the_gnat_library id68}@anchor{38a}
  @section @code{GNAT.Exception_Actions} (@code{g-excact.ads})
  
  
*************** for specific exceptions, or when any exc
*** 25112,25118 ****
  can be used for instance to force a core dump to ease debugging.
  
  @node GNAT Exception_Traces g-exctra ads,GNAT Exceptions g-except ads,GNAT Exception_Actions g-excact ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-exception-traces-g-exctra-ads}@anchor{389}@anchor{gnat_rm/the_gnat_library id69}@anchor{38a}
  @section @code{GNAT.Exception_Traces} (@code{g-exctra.ads})
  
  
--- 25161,25167 ----
  can be used for instance to force a core dump to ease debugging.
  
  @node GNAT Exception_Traces g-exctra ads,GNAT Exceptions g-except ads,GNAT Exception_Actions g-excact ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-exception-traces-g-exctra-ads}@anchor{38b}@anchor{gnat_rm/the_gnat_library id69}@anchor{38c}
  @section @code{GNAT.Exception_Traces} (@code{g-exctra.ads})
  
  
*************** Provides an interface allowing to contro
*** 25126,25132 ****
  occurrences.
  
  @node GNAT Exceptions g-except ads,GNAT Expect g-expect ads,GNAT Exception_Traces g-exctra ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-exceptions-g-except-ads}@anchor{38b}@anchor{gnat_rm/the_gnat_library id70}@anchor{38c}
  @section @code{GNAT.Exceptions} (@code{g-except.ads})
  
  
--- 25175,25181 ----
  occurrences.
  
  @node GNAT Exceptions g-except ads,GNAT Expect g-expect ads,GNAT Exception_Traces g-exctra ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-exceptions-g-except-ads}@anchor{38d}@anchor{gnat_rm/the_gnat_library id70}@anchor{38e}
  @section @code{GNAT.Exceptions} (@code{g-except.ads})
  
  
*************** predefined exceptions, and for example a
*** 25147,25153 ****
  @code{Constraint_Error} with a message from a pure subprogram.
  
  @node GNAT Expect g-expect ads,GNAT Expect TTY g-exptty ads,GNAT Exceptions g-except ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-expect-g-expect-ads}@anchor{38d}@anchor{gnat_rm/the_gnat_library id71}@anchor{38e}
  @section @code{GNAT.Expect} (@code{g-expect.ads})
  
  
--- 25196,25202 ----
  @code{Constraint_Error} with a message from a pure subprogram.
  
  @node GNAT Expect g-expect ads,GNAT Expect TTY g-exptty ads,GNAT Exceptions g-except ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-expect-g-expect-ads}@anchor{38f}@anchor{gnat_rm/the_gnat_library id71}@anchor{390}
  @section @code{GNAT.Expect} (@code{g-expect.ads})
  
  
*************** It is not implemented for cross ports, a
*** 25163,25169 ****
  implemented for VxWorks or LynxOS.
  
  @node GNAT Expect TTY g-exptty ads,GNAT Float_Control g-flocon ads,GNAT Expect g-expect ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-expect-tty-g-exptty-ads}@anchor{38f}@anchor{gnat_rm/the_gnat_library id72}@anchor{390}
  @section @code{GNAT.Expect.TTY} (@code{g-exptty.ads})
  
  
--- 25212,25218 ----
  implemented for VxWorks or LynxOS.
  
  @node GNAT Expect TTY g-exptty ads,GNAT Float_Control g-flocon ads,GNAT Expect g-expect ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-expect-tty-g-exptty-ads}@anchor{391}@anchor{gnat_rm/the_gnat_library id72}@anchor{392}
  @section @code{GNAT.Expect.TTY} (@code{g-exptty.ads})
  
  
*************** ports. It is not implemented for cross p
*** 25175,25181 ****
  in particular is not implemented for VxWorks or LynxOS.
  
  @node GNAT Float_Control g-flocon ads,GNAT Formatted_String g-forstr ads,GNAT Expect TTY g-exptty ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-float-control-g-flocon-ads}@anchor{391}@anchor{gnat_rm/the_gnat_library id73}@anchor{392}
  @section @code{GNAT.Float_Control} (@code{g-flocon.ads})
  
  
--- 25224,25230 ----
  in particular is not implemented for VxWorks or LynxOS.
  
  @node GNAT Float_Control g-flocon ads,GNAT Formatted_String g-forstr ads,GNAT Expect TTY g-exptty ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-float-control-g-flocon-ads}@anchor{393}@anchor{gnat_rm/the_gnat_library id73}@anchor{394}
  @section @code{GNAT.Float_Control} (@code{g-flocon.ads})
  
  
*************** library calls may cause this mode to be
*** 25189,25195 ****
  in this package can be used to reestablish the required mode.
  
  @node GNAT Formatted_String g-forstr ads,GNAT Generic_Fast_Math_Functions g-gfmafu ads,GNAT Float_Control g-flocon ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-formatted-string-g-forstr-ads}@anchor{393}@anchor{gnat_rm/the_gnat_library id74}@anchor{394}
  @section @code{GNAT.Formatted_String} (@code{g-forstr.ads})
  
  
--- 25238,25244 ----
  in this package can be used to reestablish the required mode.
  
  @node GNAT Formatted_String g-forstr ads,GNAT Generic_Fast_Math_Functions g-gfmafu ads,GNAT Float_Control g-flocon ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-formatted-string-g-forstr-ads}@anchor{395}@anchor{gnat_rm/the_gnat_library id74}@anchor{396}
  @section @code{GNAT.Formatted_String} (@code{g-forstr.ads})
  
  
*************** derived from Integer, Float or enumerati
*** 25204,25210 ****
  formatted string.
  
  @node GNAT Generic_Fast_Math_Functions g-gfmafu ads,GNAT Heap_Sort g-heasor ads,GNAT Formatted_String g-forstr ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-generic-fast-math-functions-g-gfmafu-ads}@anchor{395}@anchor{gnat_rm/the_gnat_library id75}@anchor{396}
  @section @code{GNAT.Generic_Fast_Math_Functions} (@code{g-gfmafu.ads})
  
  
--- 25253,25259 ----
  formatted string.
  
  @node GNAT Generic_Fast_Math_Functions g-gfmafu ads,GNAT Heap_Sort g-heasor ads,GNAT Formatted_String g-forstr ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-generic-fast-math-functions-g-gfmafu-ads}@anchor{397}@anchor{gnat_rm/the_gnat_library id75}@anchor{398}
  @section @code{GNAT.Generic_Fast_Math_Functions} (@code{g-gfmafu.ads})
  
  
*************** have a vector implementation that can be
*** 25222,25228 ****
  compiler when auto-vectorization is enabled.
  
  @node GNAT Heap_Sort g-heasor ads,GNAT Heap_Sort_A g-hesora ads,GNAT Generic_Fast_Math_Functions g-gfmafu ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-heap-sort-g-heasor-ads}@anchor{397}@anchor{gnat_rm/the_gnat_library id76}@anchor{398}
  @section @code{GNAT.Heap_Sort} (@code{g-heasor.ads})
  
  
--- 25271,25277 ----
  compiler when auto-vectorization is enabled.
  
  @node GNAT Heap_Sort g-heasor ads,GNAT Heap_Sort_A g-hesora ads,GNAT Generic_Fast_Math_Functions g-gfmafu ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-heap-sort-g-heasor-ads}@anchor{399}@anchor{gnat_rm/the_gnat_library id76}@anchor{39a}
  @section @code{GNAT.Heap_Sort} (@code{g-heasor.ads})
  
  
*************** access-to-procedure values.  The algorit
*** 25236,25242 ****
  that performs approximately N*log(N) comparisons in the worst case.
  
  @node GNAT Heap_Sort_A g-hesora ads,GNAT Heap_Sort_G g-hesorg ads,GNAT Heap_Sort g-heasor ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-heap-sort-a-g-hesora-ads}@anchor{399}@anchor{gnat_rm/the_gnat_library id77}@anchor{39a}
  @section @code{GNAT.Heap_Sort_A} (@code{g-hesora.ads})
  
  
--- 25285,25291 ----
  that performs approximately N*log(N) comparisons in the worst case.
  
  @node GNAT Heap_Sort_A g-hesora ads,GNAT Heap_Sort_G g-hesorg ads,GNAT Heap_Sort g-heasor ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-heap-sort-a-g-hesora-ads}@anchor{39b}@anchor{gnat_rm/the_gnat_library id77}@anchor{39c}
  @section @code{GNAT.Heap_Sort_A} (@code{g-hesora.ads})
  
  
*************** This differs from @code{GNAT.Heap_Sort}
*** 25252,25258 ****
  interface, but may be slightly more efficient.
  
  @node GNAT Heap_Sort_G g-hesorg ads,GNAT HTable g-htable ads,GNAT Heap_Sort_A g-hesora ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-heap-sort-g-g-hesorg-ads}@anchor{39b}@anchor{gnat_rm/the_gnat_library id78}@anchor{39c}
  @section @code{GNAT.Heap_Sort_G} (@code{g-hesorg.ads})
  
  
--- 25301,25307 ----
  interface, but may be slightly more efficient.
  
  @node GNAT Heap_Sort_G g-hesorg ads,GNAT HTable g-htable ads,GNAT Heap_Sort_A g-hesora ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-heap-sort-g-g-hesorg-ads}@anchor{39d}@anchor{gnat_rm/the_gnat_library id78}@anchor{39e}
  @section @code{GNAT.Heap_Sort_G} (@code{g-hesorg.ads})
  
  
*************** if the procedures can be inlined, at the
*** 25266,25272 ****
  multiple instantiations.
  
  @node GNAT HTable g-htable ads,GNAT IO g-io ads,GNAT Heap_Sort_G g-hesorg ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-htable-g-htable-ads}@anchor{39d}@anchor{gnat_rm/the_gnat_library id79}@anchor{39e}
  @section @code{GNAT.HTable} (@code{g-htable.ads})
  
  
--- 25315,25321 ----
  multiple instantiations.
  
  @node GNAT HTable g-htable ads,GNAT IO g-io ads,GNAT Heap_Sort_G g-hesorg ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-htable-g-htable-ads}@anchor{39f}@anchor{gnat_rm/the_gnat_library id79}@anchor{3a0}
  @section @code{GNAT.HTable} (@code{g-htable.ads})
  
  
*************** data.  Provides two approaches, one a si
*** 25279,25285 ****
  allowing arbitrary dynamic hash tables.
  
  @node GNAT IO g-io ads,GNAT IO_Aux g-io_aux ads,GNAT HTable g-htable ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-io-g-io-ads}@anchor{39f}@anchor{gnat_rm/the_gnat_library id80}@anchor{3a0}
  @section @code{GNAT.IO} (@code{g-io.ads})
  
  
--- 25328,25334 ----
  allowing arbitrary dynamic hash tables.
  
  @node GNAT IO g-io ads,GNAT IO_Aux g-io_aux ads,GNAT HTable g-htable ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-io-g-io-ads}@anchor{3a1}@anchor{gnat_rm/the_gnat_library id80}@anchor{3a2}
  @section @code{GNAT.IO} (@code{g-io.ads})
  
  
*************** Standard_Input, and writing characters,
*** 25295,25301 ****
  Standard_Output or Standard_Error.
  
  @node GNAT IO_Aux g-io_aux ads,GNAT Lock_Files g-locfil ads,GNAT IO g-io ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-io-aux-g-io-aux-ads}@anchor{3a1}@anchor{gnat_rm/the_gnat_library id81}@anchor{3a2}
  @section @code{GNAT.IO_Aux} (@code{g-io_aux.ads})
  
  
--- 25344,25350 ----
  Standard_Output or Standard_Error.
  
  @node GNAT IO_Aux g-io_aux ads,GNAT Lock_Files g-locfil ads,GNAT IO g-io ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-io-aux-g-io-aux-ads}@anchor{3a3}@anchor{gnat_rm/the_gnat_library id81}@anchor{3a4}
  @section @code{GNAT.IO_Aux} (@code{g-io_aux.ads})
  
  
*************** Provides some auxiliary functions for us
*** 25309,25315 ****
  for whether a file exists, and functions for reading a line of text.
  
  @node GNAT Lock_Files g-locfil ads,GNAT MBBS_Discrete_Random g-mbdira ads,GNAT IO_Aux g-io_aux ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-lock-files-g-locfil-ads}@anchor{3a3}@anchor{gnat_rm/the_gnat_library id82}@anchor{3a4}
  @section @code{GNAT.Lock_Files} (@code{g-locfil.ads})
  
  
--- 25358,25364 ----
  for whether a file exists, and functions for reading a line of text.
  
  @node GNAT Lock_Files g-locfil ads,GNAT MBBS_Discrete_Random g-mbdira ads,GNAT IO_Aux g-io_aux ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-lock-files-g-locfil-ads}@anchor{3a5}@anchor{gnat_rm/the_gnat_library id82}@anchor{3a6}
  @section @code{GNAT.Lock_Files} (@code{g-locfil.ads})
  
  
*************** Provides a general interface for using f
*** 25323,25329 ****
  providing program level synchronization.
  
  @node GNAT MBBS_Discrete_Random g-mbdira ads,GNAT MBBS_Float_Random g-mbflra ads,GNAT Lock_Files g-locfil ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-mbbs-discrete-random-g-mbdira-ads}@anchor{3a5}@anchor{gnat_rm/the_gnat_library id83}@anchor{3a6}
  @section @code{GNAT.MBBS_Discrete_Random} (@code{g-mbdira.ads})
  
  
--- 25372,25378 ----
  providing program level synchronization.
  
  @node GNAT MBBS_Discrete_Random g-mbdira ads,GNAT MBBS_Float_Random g-mbflra ads,GNAT Lock_Files g-locfil ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-mbbs-discrete-random-g-mbdira-ads}@anchor{3a7}@anchor{gnat_rm/the_gnat_library id83}@anchor{3a8}
  @section @code{GNAT.MBBS_Discrete_Random} (@code{g-mbdira.ads})
  
  
*************** The original implementation of @code{Ada
*** 25335,25341 ****
  a modified version of the Blum-Blum-Shub generator.
  
  @node GNAT MBBS_Float_Random g-mbflra ads,GNAT MD5 g-md5 ads,GNAT MBBS_Discrete_Random g-mbdira ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-mbbs-float-random-g-mbflra-ads}@anchor{3a7}@anchor{gnat_rm/the_gnat_library id84}@anchor{3a8}
  @section @code{GNAT.MBBS_Float_Random} (@code{g-mbflra.ads})
  
  
--- 25384,25390 ----
  a modified version of the Blum-Blum-Shub generator.
  
  @node GNAT MBBS_Float_Random g-mbflra ads,GNAT MD5 g-md5 ads,GNAT MBBS_Discrete_Random g-mbdira ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-mbbs-float-random-g-mbflra-ads}@anchor{3a9}@anchor{gnat_rm/the_gnat_library id84}@anchor{3aa}
  @section @code{GNAT.MBBS_Float_Random} (@code{g-mbflra.ads})
  
  
*************** The original implementation of @code{Ada
*** 25347,25353 ****
  a modified version of the Blum-Blum-Shub generator.
  
  @node GNAT MD5 g-md5 ads,GNAT Memory_Dump g-memdum ads,GNAT MBBS_Float_Random g-mbflra ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-md5-g-md5-ads}@anchor{3a9}@anchor{gnat_rm/the_gnat_library id85}@anchor{3aa}
  @section @code{GNAT.MD5} (@code{g-md5.ads})
  
  
--- 25396,25402 ----
  a modified version of the Blum-Blum-Shub generator.
  
  @node GNAT MD5 g-md5 ads,GNAT Memory_Dump g-memdum ads,GNAT MBBS_Float_Random g-mbflra ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-md5-g-md5-ads}@anchor{3ab}@anchor{gnat_rm/the_gnat_library id85}@anchor{3ac}
  @section @code{GNAT.MD5} (@code{g-md5.ads})
  
  
*************** the HMAC-MD5 message authentication func
*** 25360,25366 ****
  FIPS PUB 198.
  
  @node GNAT Memory_Dump g-memdum ads,GNAT Most_Recent_Exception g-moreex ads,GNAT MD5 g-md5 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-memory-dump-g-memdum-ads}@anchor{3ab}@anchor{gnat_rm/the_gnat_library id86}@anchor{3ac}
  @section @code{GNAT.Memory_Dump} (@code{g-memdum.ads})
  
  
--- 25409,25415 ----
  FIPS PUB 198.
  
  @node GNAT Memory_Dump g-memdum ads,GNAT Most_Recent_Exception g-moreex ads,GNAT MD5 g-md5 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-memory-dump-g-memdum-ads}@anchor{3ad}@anchor{gnat_rm/the_gnat_library id86}@anchor{3ae}
  @section @code{GNAT.Memory_Dump} (@code{g-memdum.ads})
  
  
*************** standard output or standard error files.
*** 25373,25379 ****
  output.
  
  @node GNAT Most_Recent_Exception g-moreex ads,GNAT OS_Lib g-os_lib ads,GNAT Memory_Dump g-memdum ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-most-recent-exception-g-moreex-ads}@anchor{3ad}@anchor{gnat_rm/the_gnat_library id87}@anchor{3ae}
  @section @code{GNAT.Most_Recent_Exception} (@code{g-moreex.ads})
  
  
--- 25422,25428 ----
  output.
  
  @node GNAT Most_Recent_Exception g-moreex ads,GNAT OS_Lib g-os_lib ads,GNAT Memory_Dump g-memdum ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-most-recent-exception-g-moreex-ads}@anchor{3af}@anchor{gnat_rm/the_gnat_library id87}@anchor{3b0}
  @section @code{GNAT.Most_Recent_Exception} (@code{g-moreex.ads})
  
  
*************** various logging purposes, including dupl
*** 25387,25393 ****
  Ada 83 implementation dependent extensions.
  
  @node GNAT OS_Lib g-os_lib ads,GNAT Perfect_Hash_Generators g-pehage ads,GNAT Most_Recent_Exception g-moreex ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-os-lib-g-os-lib-ads}@anchor{3af}@anchor{gnat_rm/the_gnat_library id88}@anchor{3b0}
  @section @code{GNAT.OS_Lib} (@code{g-os_lib.ads})
  
  
--- 25436,25442 ----
  Ada 83 implementation dependent extensions.
  
  @node GNAT OS_Lib g-os_lib ads,GNAT Perfect_Hash_Generators g-pehage ads,GNAT Most_Recent_Exception g-moreex ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-os-lib-g-os-lib-ads}@anchor{3b1}@anchor{gnat_rm/the_gnat_library id88}@anchor{3b2}
  @section @code{GNAT.OS_Lib} (@code{g-os_lib.ads})
  
  
*************** including a portable spawn procedure, an
*** 25403,25409 ****
  and error return codes.
  
  @node GNAT Perfect_Hash_Generators g-pehage ads,GNAT Random_Numbers g-rannum ads,GNAT OS_Lib g-os_lib ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-perfect-hash-generators-g-pehage-ads}@anchor{3b1}@anchor{gnat_rm/the_gnat_library id89}@anchor{3b2}
  @section @code{GNAT.Perfect_Hash_Generators} (@code{g-pehage.ads})
  
  
--- 25452,25458 ----
  and error return codes.
  
  @node GNAT Perfect_Hash_Generators g-pehage ads,GNAT Random_Numbers g-rannum ads,GNAT OS_Lib g-os_lib ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-perfect-hash-generators-g-pehage-ads}@anchor{3b3}@anchor{gnat_rm/the_gnat_library id89}@anchor{3b4}
  @section @code{GNAT.Perfect_Hash_Generators} (@code{g-pehage.ads})
  
  
*************** hashcode are in the same order. These ha
*** 25421,25427 ****
  convenient for use with realtime applications.
  
  @node GNAT Random_Numbers g-rannum ads,GNAT Regexp g-regexp ads,GNAT Perfect_Hash_Generators g-pehage ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-random-numbers-g-rannum-ads}@anchor{3b3}@anchor{gnat_rm/the_gnat_library id90}@anchor{3b4}
  @section @code{GNAT.Random_Numbers} (@code{g-rannum.ads})
  
  
--- 25470,25476 ----
  convenient for use with realtime applications.
  
  @node GNAT Random_Numbers g-rannum ads,GNAT Regexp g-regexp ads,GNAT Perfect_Hash_Generators g-pehage ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-random-numbers-g-rannum-ads}@anchor{3b5}@anchor{gnat_rm/the_gnat_library id90}@anchor{3b6}
  @section @code{GNAT.Random_Numbers} (@code{g-rannum.ads})
  
  
*************** however NOT suitable for situations requ
*** 25435,25441 ****
  randomness.
  
  @node GNAT Regexp g-regexp ads,GNAT Registry g-regist ads,GNAT Random_Numbers g-rannum ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-regexp-g-regexp-ads}@anchor{288}@anchor{gnat_rm/the_gnat_library id91}@anchor{3b5}
  @section @code{GNAT.Regexp} (@code{g-regexp.ads})
  
  
--- 25484,25490 ----
  randomness.
  
  @node GNAT Regexp g-regexp ads,GNAT Registry g-regist ads,GNAT Random_Numbers g-rannum ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-regexp-g-regexp-ads}@anchor{28a}@anchor{gnat_rm/the_gnat_library id91}@anchor{3b7}
  @section @code{GNAT.Regexp} (@code{g-regexp.ads})
  
  
*************** simplest of the three pattern matching p
*** 25451,25457 ****
  suitable for ‘file globbing’ applications.
  
  @node GNAT Registry g-regist ads,GNAT Regpat g-regpat ads,GNAT Regexp g-regexp ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-registry-g-regist-ads}@anchor{3b6}@anchor{gnat_rm/the_gnat_library id92}@anchor{3b7}
  @section @code{GNAT.Registry} (@code{g-regist.ads})
  
  
--- 25500,25506 ----
  suitable for ‘file globbing’ applications.
  
  @node GNAT Registry g-regist ads,GNAT Regpat g-regpat ads,GNAT Regexp g-regexp ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-registry-g-regist-ads}@anchor{3b8}@anchor{gnat_rm/the_gnat_library id92}@anchor{3b9}
  @section @code{GNAT.Registry} (@code{g-regist.ads})
  
  
*************** registry API, but at a lower level of ab
*** 25465,25471 ****
  package provided with the Win32Ada binding
  
  @node GNAT Regpat g-regpat ads,GNAT Rewrite_Data g-rewdat ads,GNAT Registry g-regist ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-regpat-g-regpat-ads}@anchor{3b8}@anchor{gnat_rm/the_gnat_library id93}@anchor{3b9}
  @section @code{GNAT.Regpat} (@code{g-regpat.ads})
  
  
--- 25514,25520 ----
  package provided with the Win32Ada binding
  
  @node GNAT Regpat g-regpat ads,GNAT Rewrite_Data g-rewdat ads,GNAT Registry g-regist ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-regpat-g-regpat-ads}@anchor{3ba}@anchor{gnat_rm/the_gnat_library id93}@anchor{3bb}
  @section @code{GNAT.Regpat} (@code{g-regpat.ads})
  
  
*************** from the original V7 style regular expre
*** 25480,25486 ****
  Henry Spencer (and binary compatible with this C library).
  
  @node GNAT Rewrite_Data g-rewdat ads,GNAT Secondary_Stack_Info g-sestin ads,GNAT Regpat g-regpat ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-rewrite-data-g-rewdat-ads}@anchor{3ba}@anchor{gnat_rm/the_gnat_library id94}@anchor{3bb}
  @section @code{GNAT.Rewrite_Data} (@code{g-rewdat.ads})
  
  
--- 25529,25535 ----
  Henry Spencer (and binary compatible with this C library).
  
  @node GNAT Rewrite_Data g-rewdat ads,GNAT Secondary_Stack_Info g-sestin ads,GNAT Regpat g-regpat ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-rewrite-data-g-rewdat-ads}@anchor{3bc}@anchor{gnat_rm/the_gnat_library id94}@anchor{3bd}
  @section @code{GNAT.Rewrite_Data} (@code{g-rewdat.ads})
  
  
*************** full content to be processed is not load
*** 25494,25500 ****
  this interface usable for large files or socket streams.
  
  @node GNAT Secondary_Stack_Info g-sestin ads,GNAT Semaphores g-semaph ads,GNAT Rewrite_Data g-rewdat ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-secondary-stack-info-g-sestin-ads}@anchor{3bc}@anchor{gnat_rm/the_gnat_library id95}@anchor{3bd}
  @section @code{GNAT.Secondary_Stack_Info} (@code{g-sestin.ads})
  
  
--- 25543,25549 ----
  this interface usable for large files or socket streams.
  
  @node GNAT Secondary_Stack_Info g-sestin ads,GNAT Semaphores g-semaph ads,GNAT Rewrite_Data g-rewdat ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-secondary-stack-info-g-sestin-ads}@anchor{3be}@anchor{gnat_rm/the_gnat_library id95}@anchor{3bf}
  @section @code{GNAT.Secondary_Stack_Info} (@code{g-sestin.ads})
  
  
*************** Provides the capability to query the hig
*** 25506,25512 ****
  secondary stack.
  
  @node GNAT Semaphores g-semaph ads,GNAT Serial_Communications g-sercom ads,GNAT Secondary_Stack_Info g-sestin ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-semaphores-g-semaph-ads}@anchor{3be}@anchor{gnat_rm/the_gnat_library id96}@anchor{3bf}
  @section @code{GNAT.Semaphores} (@code{g-semaph.ads})
  
  
--- 25555,25561 ----
  secondary stack.
  
  @node GNAT Semaphores g-semaph ads,GNAT Serial_Communications g-sercom ads,GNAT Secondary_Stack_Info g-sestin ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-semaphores-g-semaph-ads}@anchor{3c0}@anchor{gnat_rm/the_gnat_library id96}@anchor{3c1}
  @section @code{GNAT.Semaphores} (@code{g-semaph.ads})
  
  
*************** secondary stack.
*** 25517,25523 ****
  Provides classic counting and binary semaphores using protected types.
  
  @node GNAT Serial_Communications g-sercom ads,GNAT SHA1 g-sha1 ads,GNAT Semaphores g-semaph ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-serial-communications-g-sercom-ads}@anchor{3c0}@anchor{gnat_rm/the_gnat_library id97}@anchor{3c1}
  @section @code{GNAT.Serial_Communications} (@code{g-sercom.ads})
  
  
--- 25566,25572 ----
  Provides classic counting and binary semaphores using protected types.
  
  @node GNAT Serial_Communications g-sercom ads,GNAT SHA1 g-sha1 ads,GNAT Semaphores g-semaph ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-serial-communications-g-sercom-ads}@anchor{3c2}@anchor{gnat_rm/the_gnat_library id97}@anchor{3c3}
  @section @code{GNAT.Serial_Communications} (@code{g-sercom.ads})
  
  
*************** Provides a simple interface to send and
*** 25529,25535 ****
  port. This is only supported on GNU/Linux and Windows.
  
  @node GNAT SHA1 g-sha1 ads,GNAT SHA224 g-sha224 ads,GNAT Serial_Communications g-sercom ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-sha1-g-sha1-ads}@anchor{3c2}@anchor{gnat_rm/the_gnat_library id98}@anchor{3c3}
  @section @code{GNAT.SHA1} (@code{g-sha1.ads})
  
  
--- 25578,25584 ----
  port. This is only supported on GNU/Linux and Windows.
  
  @node GNAT SHA1 g-sha1 ads,GNAT SHA224 g-sha224 ads,GNAT Serial_Communications g-sercom ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-sha1-g-sha1-ads}@anchor{3c4}@anchor{gnat_rm/the_gnat_library id98}@anchor{3c5}
  @section @code{GNAT.SHA1} (@code{g-sha1.ads})
  
  
*************** and RFC 3174, and the HMAC-SHA1 message
*** 25542,25548 ****
  in RFC 2104 and FIPS PUB 198.
  
  @node GNAT SHA224 g-sha224 ads,GNAT SHA256 g-sha256 ads,GNAT SHA1 g-sha1 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-sha224-g-sha224-ads}@anchor{3c4}@anchor{gnat_rm/the_gnat_library id99}@anchor{3c5}
  @section @code{GNAT.SHA224} (@code{g-sha224.ads})
  
  
--- 25591,25597 ----
  in RFC 2104 and FIPS PUB 198.
  
  @node GNAT SHA224 g-sha224 ads,GNAT SHA256 g-sha256 ads,GNAT SHA1 g-sha1 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-sha224-g-sha224-ads}@anchor{3c6}@anchor{gnat_rm/the_gnat_library id99}@anchor{3c7}
  @section @code{GNAT.SHA224} (@code{g-sha224.ads})
  
  
*************** and the HMAC-SHA224 message authenticati
*** 25555,25561 ****
  in RFC 2104 and FIPS PUB 198.
  
  @node GNAT SHA256 g-sha256 ads,GNAT SHA384 g-sha384 ads,GNAT SHA224 g-sha224 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-sha256-g-sha256-ads}@anchor{3c6}@anchor{gnat_rm/the_gnat_library id100}@anchor{3c7}
  @section @code{GNAT.SHA256} (@code{g-sha256.ads})
  
  
--- 25604,25610 ----
  in RFC 2104 and FIPS PUB 198.
  
  @node GNAT SHA256 g-sha256 ads,GNAT SHA384 g-sha384 ads,GNAT SHA224 g-sha224 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-sha256-g-sha256-ads}@anchor{3c8}@anchor{gnat_rm/the_gnat_library id100}@anchor{3c9}
  @section @code{GNAT.SHA256} (@code{g-sha256.ads})
  
  
*************** and the HMAC-SHA256 message authenticati
*** 25568,25574 ****
  in RFC 2104 and FIPS PUB 198.
  
  @node GNAT SHA384 g-sha384 ads,GNAT SHA512 g-sha512 ads,GNAT SHA256 g-sha256 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-sha384-g-sha384-ads}@anchor{3c8}@anchor{gnat_rm/the_gnat_library id101}@anchor{3c9}
  @section @code{GNAT.SHA384} (@code{g-sha384.ads})
  
  
--- 25617,25623 ----
  in RFC 2104 and FIPS PUB 198.
  
  @node GNAT SHA384 g-sha384 ads,GNAT SHA512 g-sha512 ads,GNAT SHA256 g-sha256 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-sha384-g-sha384-ads}@anchor{3ca}@anchor{gnat_rm/the_gnat_library id101}@anchor{3cb}
  @section @code{GNAT.SHA384} (@code{g-sha384.ads})
  
  
*************** and the HMAC-SHA384 message authenticati
*** 25581,25587 ****
  in RFC 2104 and FIPS PUB 198.
  
  @node GNAT SHA512 g-sha512 ads,GNAT Signals g-signal ads,GNAT SHA384 g-sha384 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-sha512-g-sha512-ads}@anchor{3ca}@anchor{gnat_rm/the_gnat_library id102}@anchor{3cb}
  @section @code{GNAT.SHA512} (@code{g-sha512.ads})
  
  
--- 25630,25636 ----
  in RFC 2104 and FIPS PUB 198.
  
  @node GNAT SHA512 g-sha512 ads,GNAT Signals g-signal ads,GNAT SHA384 g-sha384 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-sha512-g-sha512-ads}@anchor{3cc}@anchor{gnat_rm/the_gnat_library id102}@anchor{3cd}
  @section @code{GNAT.SHA512} (@code{g-sha512.ads})
  
  
*************** and the HMAC-SHA512 message authenticati
*** 25594,25600 ****
  in RFC 2104 and FIPS PUB 198.
  
  @node GNAT Signals g-signal ads,GNAT Sockets g-socket ads,GNAT SHA512 g-sha512 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-signals-g-signal-ads}@anchor{3cc}@anchor{gnat_rm/the_gnat_library id103}@anchor{3cd}
  @section @code{GNAT.Signals} (@code{g-signal.ads})
  
  
--- 25643,25649 ----
  in RFC 2104 and FIPS PUB 198.
  
  @node GNAT Signals g-signal ads,GNAT Sockets g-socket ads,GNAT SHA512 g-sha512 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-signals-g-signal-ads}@anchor{3ce}@anchor{gnat_rm/the_gnat_library id103}@anchor{3cf}
  @section @code{GNAT.Signals} (@code{g-signal.ads})
  
  
*************** Provides the ability to manipulate the b
*** 25606,25612 ****
  targets.
  
  @node GNAT Sockets g-socket ads,GNAT Source_Info g-souinf ads,GNAT Signals g-signal ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-sockets-g-socket-ads}@anchor{3ce}@anchor{gnat_rm/the_gnat_library id104}@anchor{3cf}
  @section @code{GNAT.Sockets} (@code{g-socket.ads})
  
  
--- 25655,25661 ----
  targets.
  
  @node GNAT Sockets g-socket ads,GNAT Source_Info g-souinf ads,GNAT Signals g-signal ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-sockets-g-socket-ads}@anchor{3d0}@anchor{gnat_rm/the_gnat_library id104}@anchor{3d1}
  @section @code{GNAT.Sockets} (@code{g-socket.ads})
  
  
*************** on all native GNAT ports and on VxWorks
*** 25621,25627 ****
  the LynxOS cross port.
  
  @node GNAT Source_Info g-souinf ads,GNAT Spelling_Checker g-speche ads,GNAT Sockets g-socket ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-source-info-g-souinf-ads}@anchor{3d0}@anchor{gnat_rm/the_gnat_library id105}@anchor{3d1}
  @section @code{GNAT.Source_Info} (@code{g-souinf.ads})
  
  
--- 25670,25676 ----
  the LynxOS cross port.
  
  @node GNAT Source_Info g-souinf ads,GNAT Spelling_Checker g-speche ads,GNAT Sockets g-socket ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-source-info-g-souinf-ads}@anchor{3d2}@anchor{gnat_rm/the_gnat_library id105}@anchor{3d3}
  @section @code{GNAT.Source_Info} (@code{g-souinf.ads})
  
  
*************** subprograms yielding the date and time o
*** 25635,25641 ****
  C macros @code{__DATE__} and @code{__TIME__})
  
  @node GNAT Spelling_Checker g-speche ads,GNAT Spelling_Checker_Generic g-spchge ads,GNAT Source_Info g-souinf ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-spelling-checker-g-speche-ads}@anchor{3d2}@anchor{gnat_rm/the_gnat_library id106}@anchor{3d3}
  @section @code{GNAT.Spelling_Checker} (@code{g-speche.ads})
  
  
--- 25684,25690 ----
  C macros @code{__DATE__} and @code{__TIME__})
  
  @node GNAT Spelling_Checker g-speche ads,GNAT Spelling_Checker_Generic g-spchge ads,GNAT Source_Info g-souinf ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-spelling-checker-g-speche-ads}@anchor{3d4}@anchor{gnat_rm/the_gnat_library id106}@anchor{3d5}
  @section @code{GNAT.Spelling_Checker} (@code{g-speche.ads})
  
  
*************** Provides a function for determining whet
*** 25647,25653 ****
  near misspelling of another string.
  
  @node GNAT Spelling_Checker_Generic g-spchge ads,GNAT Spitbol Patterns g-spipat ads,GNAT Spelling_Checker g-speche ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-spelling-checker-generic-g-spchge-ads}@anchor{3d4}@anchor{gnat_rm/the_gnat_library id107}@anchor{3d5}
  @section @code{GNAT.Spelling_Checker_Generic} (@code{g-spchge.ads})
  
  
--- 25696,25702 ----
  near misspelling of another string.
  
  @node GNAT Spelling_Checker_Generic g-spchge ads,GNAT Spitbol Patterns g-spipat ads,GNAT Spelling_Checker g-speche ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-spelling-checker-generic-g-spchge-ads}@anchor{3d6}@anchor{gnat_rm/the_gnat_library id107}@anchor{3d7}
  @section @code{GNAT.Spelling_Checker_Generic} (@code{g-spchge.ads})
  
  
*************** determining whether one string is a plau
*** 25660,25666 ****
  string.
  
  @node GNAT Spitbol Patterns g-spipat ads,GNAT Spitbol g-spitbo ads,GNAT Spelling_Checker_Generic g-spchge ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-spitbol-patterns-g-spipat-ads}@anchor{3d6}@anchor{gnat_rm/the_gnat_library id108}@anchor{3d7}
  @section @code{GNAT.Spitbol.Patterns} (@code{g-spipat.ads})
  
  
--- 25709,25715 ----
  string.
  
  @node GNAT Spitbol Patterns g-spipat ads,GNAT Spitbol g-spitbo ads,GNAT Spelling_Checker_Generic g-spchge ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-spitbol-patterns-g-spipat-ads}@anchor{3d8}@anchor{gnat_rm/the_gnat_library id108}@anchor{3d9}
  @section @code{GNAT.Spitbol.Patterns} (@code{g-spipat.ads})
  
  
*************** the SNOBOL4 dynamic pattern construction
*** 25676,25682 ****
  efficient algorithm developed by Robert Dewar for the SPITBOL system.
  
  @node GNAT Spitbol g-spitbo ads,GNAT Spitbol Table_Boolean g-sptabo ads,GNAT Spitbol Patterns g-spipat ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-spitbol-g-spitbo-ads}@anchor{3d8}@anchor{gnat_rm/the_gnat_library id109}@anchor{3d9}
  @section @code{GNAT.Spitbol} (@code{g-spitbo.ads})
  
  
--- 25725,25731 ----
  efficient algorithm developed by Robert Dewar for the SPITBOL system.
  
  @node GNAT Spitbol g-spitbo ads,GNAT Spitbol Table_Boolean g-sptabo ads,GNAT Spitbol Patterns g-spipat ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-spitbol-g-spitbo-ads}@anchor{3da}@anchor{gnat_rm/the_gnat_library id109}@anchor{3db}
  @section @code{GNAT.Spitbol} (@code{g-spitbo.ads})
  
  
*************** useful for constructing arbitrary mappin
*** 25691,25697 ****
  the SNOBOL4 TABLE function.
  
  @node GNAT Spitbol Table_Boolean g-sptabo ads,GNAT Spitbol Table_Integer g-sptain ads,GNAT Spitbol g-spitbo ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-spitbol-table-boolean-g-sptabo-ads}@anchor{3da}@anchor{gnat_rm/the_gnat_library id110}@anchor{3db}
  @section @code{GNAT.Spitbol.Table_Boolean} (@code{g-sptabo.ads})
  
  
--- 25740,25746 ----
  the SNOBOL4 TABLE function.
  
  @node GNAT Spitbol Table_Boolean g-sptabo ads,GNAT Spitbol Table_Integer g-sptain ads,GNAT Spitbol g-spitbo ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-spitbol-table-boolean-g-sptabo-ads}@anchor{3dc}@anchor{gnat_rm/the_gnat_library id110}@anchor{3dd}
  @section @code{GNAT.Spitbol.Table_Boolean} (@code{g-sptabo.ads})
  
  
*************** for type @code{Standard.Boolean}, giving
*** 25706,25712 ****
  string values.
  
  @node GNAT Spitbol Table_Integer g-sptain ads,GNAT Spitbol Table_VString g-sptavs ads,GNAT Spitbol Table_Boolean g-sptabo ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-spitbol-table-integer-g-sptain-ads}@anchor{3dc}@anchor{gnat_rm/the_gnat_library id111}@anchor{3dd}
  @section @code{GNAT.Spitbol.Table_Integer} (@code{g-sptain.ads})
  
  
--- 25755,25761 ----
  string values.
  
  @node GNAT Spitbol Table_Integer g-sptain ads,GNAT Spitbol Table_VString g-sptavs ads,GNAT Spitbol Table_Boolean g-sptabo ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-spitbol-table-integer-g-sptain-ads}@anchor{3de}@anchor{gnat_rm/the_gnat_library id111}@anchor{3df}
  @section @code{GNAT.Spitbol.Table_Integer} (@code{g-sptain.ads})
  
  
*************** for type @code{Standard.Integer}, giving
*** 25723,25729 ****
  from string to integer values.
  
  @node GNAT Spitbol Table_VString g-sptavs ads,GNAT SSE g-sse ads,GNAT Spitbol Table_Integer g-sptain ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-spitbol-table-vstring-g-sptavs-ads}@anchor{3de}@anchor{gnat_rm/the_gnat_library id112}@anchor{3df}
  @section @code{GNAT.Spitbol.Table_VString} (@code{g-sptavs.ads})
  
  
--- 25772,25778 ----
  from string to integer values.
  
  @node GNAT Spitbol Table_VString g-sptavs ads,GNAT SSE g-sse ads,GNAT Spitbol Table_Integer g-sptain ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-spitbol-table-vstring-g-sptavs-ads}@anchor{3e0}@anchor{gnat_rm/the_gnat_library id112}@anchor{3e1}
  @section @code{GNAT.Spitbol.Table_VString} (@code{g-sptavs.ads})
  
  
*************** a variable length string type, giving an
*** 25740,25746 ****
  maps from strings to strings.
  
  @node GNAT SSE g-sse ads,GNAT SSE Vector_Types g-ssvety ads,GNAT Spitbol Table_VString g-sptavs ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-sse-g-sse-ads}@anchor{3e0}@anchor{gnat_rm/the_gnat_library id113}@anchor{3e1}
  @section @code{GNAT.SSE} (@code{g-sse.ads})
  
  
--- 25789,25795 ----
  maps from strings to strings.
  
  @node GNAT SSE g-sse ads,GNAT SSE Vector_Types g-ssvety ads,GNAT Spitbol Table_VString g-sptavs ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-sse-g-sse-ads}@anchor{3e2}@anchor{gnat_rm/the_gnat_library id113}@anchor{3e3}
  @section @code{GNAT.SSE} (@code{g-sse.ads})
  
  
*************** targets.  It exposes vector component ty
*** 25752,25758 ****
  introduction to the binding contents and use.
  
  @node GNAT SSE Vector_Types g-ssvety ads,GNAT String_Hash g-strhas ads,GNAT SSE g-sse ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-sse-vector-types-g-ssvety-ads}@anchor{3e2}@anchor{gnat_rm/the_gnat_library id114}@anchor{3e3}
  @section @code{GNAT.SSE.Vector_Types} (@code{g-ssvety.ads})
  
  
--- 25801,25807 ----
  introduction to the binding contents and use.
  
  @node GNAT SSE Vector_Types g-ssvety ads,GNAT String_Hash g-strhas ads,GNAT SSE g-sse ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-sse-vector-types-g-ssvety-ads}@anchor{3e4}@anchor{gnat_rm/the_gnat_library id114}@anchor{3e5}
  @section @code{GNAT.SSE.Vector_Types} (@code{g-ssvety.ads})
  
  
*************** introduction to the binding contents and
*** 25761,25767 ****
  SSE vector types for use with SSE related intrinsics.
  
  @node GNAT String_Hash g-strhas ads,GNAT Strings g-string ads,GNAT SSE Vector_Types g-ssvety ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-string-hash-g-strhas-ads}@anchor{3e4}@anchor{gnat_rm/the_gnat_library id115}@anchor{3e5}
  @section @code{GNAT.String_Hash} (@code{g-strhas.ads})
  
  
--- 25810,25816 ----
  SSE vector types for use with SSE related intrinsics.
  
  @node GNAT String_Hash g-strhas ads,GNAT Strings g-string ads,GNAT SSE Vector_Types g-ssvety ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-string-hash-g-strhas-ads}@anchor{3e6}@anchor{gnat_rm/the_gnat_library id115}@anchor{3e7}
  @section @code{GNAT.String_Hash} (@code{g-strhas.ads})
  
  
*************** Provides a generic hash function working
*** 25773,25779 ****
  type and the hash result type are parameters.
  
  @node GNAT Strings g-string ads,GNAT String_Split g-strspl ads,GNAT String_Hash g-strhas ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-strings-g-string-ads}@anchor{3e6}@anchor{gnat_rm/the_gnat_library id116}@anchor{3e7}
  @section @code{GNAT.Strings} (@code{g-string.ads})
  
  
--- 25822,25828 ----
  type and the hash result type are parameters.
  
  @node GNAT Strings g-string ads,GNAT String_Split g-strspl ads,GNAT String_Hash g-strhas ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-strings-g-string-ads}@anchor{3e8}@anchor{gnat_rm/the_gnat_library id116}@anchor{3e9}
  @section @code{GNAT.Strings} (@code{g-string.ads})
  
  
*************** Common String access types and related s
*** 25783,25789 ****
  defines a string access and an array of string access types.
  
  @node GNAT String_Split g-strspl ads,GNAT Table g-table ads,GNAT Strings g-string ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-string-split-g-strspl-ads}@anchor{3e8}@anchor{gnat_rm/the_gnat_library id117}@anchor{3e9}
  @section @code{GNAT.String_Split} (@code{g-strspl.ads})
  
  
--- 25832,25838 ----
  defines a string access and an array of string access types.
  
  @node GNAT String_Split g-strspl ads,GNAT Table g-table ads,GNAT Strings g-string ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-string-split-g-strspl-ads}@anchor{3ea}@anchor{gnat_rm/the_gnat_library id117}@anchor{3eb}
  @section @code{GNAT.String_Split} (@code{g-strspl.ads})
  
  
*************** to the resulting slices. This package is
*** 25797,25803 ****
  @code{GNAT.Array_Split}.
  
  @node GNAT Table g-table ads,GNAT Task_Lock g-tasloc ads,GNAT String_Split g-strspl ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-table-g-table-ads}@anchor{3ea}@anchor{gnat_rm/the_gnat_library id118}@anchor{3eb}
  @section @code{GNAT.Table} (@code{g-table.ads})
  
  
--- 25846,25852 ----
  @code{GNAT.Array_Split}.
  
  @node GNAT Table g-table ads,GNAT Task_Lock g-tasloc ads,GNAT String_Split g-strspl ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-table-g-table-ads}@anchor{3ec}@anchor{gnat_rm/the_gnat_library id118}@anchor{3ed}
  @section @code{GNAT.Table} (@code{g-table.ads})
  
  
*************** while an instantiation of @code{GNAT.Dyn
*** 25817,25823 ****
  used to define dynamic instances of the table.
  
  @node GNAT Task_Lock g-tasloc ads,GNAT Time_Stamp g-timsta ads,GNAT Table g-table ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-task-lock-g-tasloc-ads}@anchor{3ec}@anchor{gnat_rm/the_gnat_library id119}@anchor{3ed}
  @section @code{GNAT.Task_Lock} (@code{g-tasloc.ads})
  
  
--- 25866,25872 ----
  used to define dynamic instances of the table.
  
  @node GNAT Task_Lock g-tasloc ads,GNAT Time_Stamp g-timsta ads,GNAT Table g-table ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-task-lock-g-tasloc-ads}@anchor{3ee}@anchor{gnat_rm/the_gnat_library id119}@anchor{3ef}
  @section @code{GNAT.Task_Lock} (@code{g-tasloc.ads})
  
  
*************** single global task lock.  Appropriate fo
*** 25834,25840 ****
  between tasks is very rarely expected.
  
  @node GNAT Time_Stamp g-timsta ads,GNAT Threads g-thread ads,GNAT Task_Lock g-tasloc ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-time-stamp-g-timsta-ads}@anchor{3ee}@anchor{gnat_rm/the_gnat_library id120}@anchor{3ef}
  @section @code{GNAT.Time_Stamp} (@code{g-timsta.ads})
  
  
--- 25883,25889 ----
  between tasks is very rarely expected.
  
  @node GNAT Time_Stamp g-timsta ads,GNAT Threads g-thread ads,GNAT Task_Lock g-tasloc ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-time-stamp-g-timsta-ads}@anchor{3f0}@anchor{gnat_rm/the_gnat_library id120}@anchor{3f1}
  @section @code{GNAT.Time_Stamp} (@code{g-timsta.ads})
  
  
*************** represents the current date and time in
*** 25849,25855 ****
  routine with minimal code and there are no dependencies on any other unit.
  
  @node GNAT Threads g-thread ads,GNAT Traceback g-traceb ads,GNAT Time_Stamp g-timsta ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-threads-g-thread-ads}@anchor{3f0}@anchor{gnat_rm/the_gnat_library id121}@anchor{3f1}
  @section @code{GNAT.Threads} (@code{g-thread.ads})
  
  
--- 25898,25904 ----
  routine with minimal code and there are no dependencies on any other unit.
  
  @node GNAT Threads g-thread ads,GNAT Traceback g-traceb ads,GNAT Time_Stamp g-timsta ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-threads-g-thread-ads}@anchor{3f2}@anchor{gnat_rm/the_gnat_library id121}@anchor{3f3}
  @section @code{GNAT.Threads} (@code{g-thread.ads})
  
  
*************** further details if your program has thre
*** 25866,25872 ****
  environment which then accesses Ada code.
  
  @node GNAT Traceback g-traceb ads,GNAT Traceback Symbolic g-trasym ads,GNAT Threads g-thread ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-traceback-g-traceb-ads}@anchor{3f2}@anchor{gnat_rm/the_gnat_library id122}@anchor{3f3}
  @section @code{GNAT.Traceback} (@code{g-traceb.ads})
  
  
--- 25915,25921 ----
  environment which then accesses Ada code.
  
  @node GNAT Traceback g-traceb ads,GNAT Traceback Symbolic g-trasym ads,GNAT Threads g-thread ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-traceback-g-traceb-ads}@anchor{3f4}@anchor{gnat_rm/the_gnat_library id122}@anchor{3f5}
  @section @code{GNAT.Traceback} (@code{g-traceb.ads})
  
  
*************** Provides a facility for obtaining non-sy
*** 25878,25884 ****
  in various debugging situations.
  
  @node GNAT Traceback Symbolic g-trasym ads,GNAT UTF_32 g-utf_32 ads,GNAT Traceback g-traceb ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-traceback-symbolic-g-trasym-ads}@anchor{3f4}@anchor{gnat_rm/the_gnat_library id123}@anchor{3f5}
  @section @code{GNAT.Traceback.Symbolic} (@code{g-trasym.ads})
  
  
--- 25927,25933 ----
  in various debugging situations.
  
  @node GNAT Traceback Symbolic g-trasym ads,GNAT UTF_32 g-utf_32 ads,GNAT Traceback g-traceb ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-traceback-symbolic-g-trasym-ads}@anchor{3f6}@anchor{gnat_rm/the_gnat_library id123}@anchor{3f7}
  @section @code{GNAT.Traceback.Symbolic} (@code{g-trasym.ads})
  
  
*************** in various debugging situations.
*** 25887,25893 ****
  @geindex Trace back facilities
  
  @node GNAT UTF_32 g-utf_32 ads,GNAT UTF_32_Spelling_Checker g-u3spch ads,GNAT Traceback Symbolic g-trasym ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-utf-32-g-utf-32-ads}@anchor{3f6}@anchor{gnat_rm/the_gnat_library id124}@anchor{3f7}
  @section @code{GNAT.UTF_32} (@code{g-utf_32.ads})
  
  
--- 25936,25942 ----
  @geindex Trace back facilities
  
  @node GNAT UTF_32 g-utf_32 ads,GNAT UTF_32_Spelling_Checker g-u3spch ads,GNAT Traceback Symbolic g-trasym ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-utf-32-g-utf-32-ads}@anchor{3f8}@anchor{gnat_rm/the_gnat_library id124}@anchor{3f9}
  @section @code{GNAT.UTF_32} (@code{g-utf_32.ads})
  
  
*************** lower case to upper case fold routine co
*** 25906,25912 ****
  the Ada 2005 rules for identifier equivalence.
  
  @node GNAT UTF_32_Spelling_Checker g-u3spch ads,GNAT Wide_Spelling_Checker g-wispch ads,GNAT UTF_32 g-utf_32 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-utf-32-spelling-checker-g-u3spch-ads}@anchor{3f8}@anchor{gnat_rm/the_gnat_library id125}@anchor{3f9}
  @section @code{GNAT.UTF_32_Spelling_Checker} (@code{g-u3spch.ads})
  
  
--- 25955,25961 ----
  the Ada 2005 rules for identifier equivalence.
  
  @node GNAT UTF_32_Spelling_Checker g-u3spch ads,GNAT Wide_Spelling_Checker g-wispch ads,GNAT UTF_32 g-utf_32 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-utf-32-spelling-checker-g-u3spch-ads}@anchor{3fa}@anchor{gnat_rm/the_gnat_library id125}@anchor{3fb}
  @section @code{GNAT.UTF_32_Spelling_Checker} (@code{g-u3spch.ads})
  
  
*************** near misspelling of another wide wide st
*** 25919,25925 ****
  using the UTF_32_String type defined in System.Wch_Cnv.
  
  @node GNAT Wide_Spelling_Checker g-wispch ads,GNAT Wide_String_Split g-wistsp ads,GNAT UTF_32_Spelling_Checker g-u3spch ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-wide-spelling-checker-g-wispch-ads}@anchor{3fa}@anchor{gnat_rm/the_gnat_library id126}@anchor{3fb}
  @section @code{GNAT.Wide_Spelling_Checker} (@code{g-wispch.ads})
  
  
--- 25968,25974 ----
  using the UTF_32_String type defined in System.Wch_Cnv.
  
  @node GNAT Wide_Spelling_Checker g-wispch ads,GNAT Wide_String_Split g-wistsp ads,GNAT UTF_32_Spelling_Checker g-u3spch ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-wide-spelling-checker-g-wispch-ads}@anchor{3fc}@anchor{gnat_rm/the_gnat_library id126}@anchor{3fd}
  @section @code{GNAT.Wide_Spelling_Checker} (@code{g-wispch.ads})
  
  
*************** Provides a function for determining whet
*** 25931,25937 ****
  near misspelling of another wide string.
  
  @node GNAT Wide_String_Split g-wistsp ads,GNAT Wide_Wide_Spelling_Checker g-zspche ads,GNAT Wide_Spelling_Checker g-wispch ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-wide-string-split-g-wistsp-ads}@anchor{3fc}@anchor{gnat_rm/the_gnat_library id127}@anchor{3fd}
  @section @code{GNAT.Wide_String_Split} (@code{g-wistsp.ads})
  
  
--- 25980,25986 ----
  near misspelling of another wide string.
  
  @node GNAT Wide_String_Split g-wistsp ads,GNAT Wide_Wide_Spelling_Checker g-zspche ads,GNAT Wide_Spelling_Checker g-wispch ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-wide-string-split-g-wistsp-ads}@anchor{3fe}@anchor{gnat_rm/the_gnat_library id127}@anchor{3ff}
  @section @code{GNAT.Wide_String_Split} (@code{g-wistsp.ads})
  
  
*************** to the resulting slices. This package is
*** 25945,25951 ****
  @code{GNAT.Array_Split}.
  
  @node GNAT Wide_Wide_Spelling_Checker g-zspche ads,GNAT Wide_Wide_String_Split g-zistsp ads,GNAT Wide_String_Split g-wistsp ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-wide-wide-spelling-checker-g-zspche-ads}@anchor{3fe}@anchor{gnat_rm/the_gnat_library id128}@anchor{3ff}
  @section @code{GNAT.Wide_Wide_Spelling_Checker} (@code{g-zspche.ads})
  
  
--- 25994,26000 ----
  @code{GNAT.Array_Split}.
  
  @node GNAT Wide_Wide_Spelling_Checker g-zspche ads,GNAT Wide_Wide_String_Split g-zistsp ads,GNAT Wide_String_Split g-wistsp ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-wide-wide-spelling-checker-g-zspche-ads}@anchor{400}@anchor{gnat_rm/the_gnat_library id128}@anchor{401}
  @section @code{GNAT.Wide_Wide_Spelling_Checker} (@code{g-zspche.ads})
  
  
*************** Provides a function for determining whet
*** 25957,25963 ****
  near misspelling of another wide wide string.
  
  @node GNAT Wide_Wide_String_Split g-zistsp ads,Interfaces C Extensions i-cexten ads,GNAT Wide_Wide_Spelling_Checker g-zspche ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-wide-wide-string-split-g-zistsp-ads}@anchor{400}@anchor{gnat_rm/the_gnat_library id129}@anchor{401}
  @section @code{GNAT.Wide_Wide_String_Split} (@code{g-zistsp.ads})
  
  
--- 26006,26012 ----
  near misspelling of another wide wide string.
  
  @node GNAT Wide_Wide_String_Split g-zistsp ads,Interfaces C Extensions i-cexten ads,GNAT Wide_Wide_Spelling_Checker g-zspche ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-wide-wide-string-split-g-zistsp-ads}@anchor{402}@anchor{gnat_rm/the_gnat_library id129}@anchor{403}
  @section @code{GNAT.Wide_Wide_String_Split} (@code{g-zistsp.ads})
  
  
*************** to the resulting slices. This package is
*** 25971,25977 ****
  @code{GNAT.Array_Split}.
  
  @node Interfaces C Extensions i-cexten ads,Interfaces C Streams i-cstrea ads,GNAT Wide_Wide_String_Split g-zistsp ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id130}@anchor{402}@anchor{gnat_rm/the_gnat_library interfaces-c-extensions-i-cexten-ads}@anchor{403}
  @section @code{Interfaces.C.Extensions} (@code{i-cexten.ads})
  
  
--- 26020,26026 ----
  @code{GNAT.Array_Split}.
  
  @node Interfaces C Extensions i-cexten ads,Interfaces C Streams i-cstrea ads,GNAT Wide_Wide_String_Split g-zistsp ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id130}@anchor{404}@anchor{gnat_rm/the_gnat_library interfaces-c-extensions-i-cexten-ads}@anchor{405}
  @section @code{Interfaces.C.Extensions} (@code{i-cexten.ads})
  
  
*************** for use with either manually or automati
*** 25982,25988 ****
  to C libraries.
  
  @node Interfaces C Streams i-cstrea ads,Interfaces Packed_Decimal i-pacdec ads,Interfaces C Extensions i-cexten ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id131}@anchor{404}@anchor{gnat_rm/the_gnat_library interfaces-c-streams-i-cstrea-ads}@anchor{405}
  @section @code{Interfaces.C.Streams} (@code{i-cstrea.ads})
  
  
--- 26031,26037 ----
  to C libraries.
  
  @node Interfaces C Streams i-cstrea ads,Interfaces Packed_Decimal i-pacdec ads,Interfaces C Extensions i-cexten ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id131}@anchor{406}@anchor{gnat_rm/the_gnat_library interfaces-c-streams-i-cstrea-ads}@anchor{407}
  @section @code{Interfaces.C.Streams} (@code{i-cstrea.ads})
  
  
*************** This package is a binding for the most c
*** 25995,26001 ****
  on C streams.
  
  @node Interfaces Packed_Decimal i-pacdec ads,Interfaces VxWorks i-vxwork ads,Interfaces C Streams i-cstrea ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id132}@anchor{406}@anchor{gnat_rm/the_gnat_library interfaces-packed-decimal-i-pacdec-ads}@anchor{407}
  @section @code{Interfaces.Packed_Decimal} (@code{i-pacdec.ads})
  
  
--- 26044,26050 ----
  on C streams.
  
  @node Interfaces Packed_Decimal i-pacdec ads,Interfaces VxWorks i-vxwork ads,Interfaces C Streams i-cstrea ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id132}@anchor{408}@anchor{gnat_rm/the_gnat_library interfaces-packed-decimal-i-pacdec-ads}@anchor{409}
  @section @code{Interfaces.Packed_Decimal} (@code{i-pacdec.ads})
  
  
*************** from a packed decimal format compatible
*** 26010,26016 ****
  mainframes.
  
  @node Interfaces VxWorks i-vxwork ads,Interfaces VxWorks IO i-vxwoio ads,Interfaces Packed_Decimal i-pacdec ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id133}@anchor{408}@anchor{gnat_rm/the_gnat_library interfaces-vxworks-i-vxwork-ads}@anchor{409}
  @section @code{Interfaces.VxWorks} (@code{i-vxwork.ads})
  
  
--- 26059,26065 ----
  mainframes.
  
  @node Interfaces VxWorks i-vxwork ads,Interfaces VxWorks IO i-vxwoio ads,Interfaces Packed_Decimal i-pacdec ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id133}@anchor{40a}@anchor{gnat_rm/the_gnat_library interfaces-vxworks-i-vxwork-ads}@anchor{40b}
  @section @code{Interfaces.VxWorks} (@code{i-vxwork.ads})
  
  
*************** mainframes.
*** 26024,26030 ****
  This package provides a limited binding to the VxWorks API.
  
  @node Interfaces VxWorks IO i-vxwoio ads,System Address_Image s-addima ads,Interfaces VxWorks i-vxwork ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id134}@anchor{40a}@anchor{gnat_rm/the_gnat_library interfaces-vxworks-io-i-vxwoio-ads}@anchor{40b}
  @section @code{Interfaces.VxWorks.IO} (@code{i-vxwoio.ads})
  
  
--- 26073,26079 ----
  This package provides a limited binding to the VxWorks API.
  
  @node Interfaces VxWorks IO i-vxwoio ads,System Address_Image s-addima ads,Interfaces VxWorks i-vxwork ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id134}@anchor{40c}@anchor{gnat_rm/the_gnat_library interfaces-vxworks-io-i-vxwoio-ads}@anchor{40d}
  @section @code{Interfaces.VxWorks.IO} (@code{i-vxwoio.ads})
  
  
*************** function codes. A particular use of this
*** 26047,26053 ****
  to enable the use of Get_Immediate under VxWorks.
  
  @node System Address_Image s-addima ads,System Assertions s-assert ads,Interfaces VxWorks IO i-vxwoio ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id135}@anchor{40c}@anchor{gnat_rm/the_gnat_library system-address-image-s-addima-ads}@anchor{40d}
  @section @code{System.Address_Image} (@code{s-addima.ads})
  
  
--- 26096,26102 ----
  to enable the use of Get_Immediate under VxWorks.
  
  @node System Address_Image s-addima ads,System Assertions s-assert ads,Interfaces VxWorks IO i-vxwoio ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id135}@anchor{40e}@anchor{gnat_rm/the_gnat_library system-address-image-s-addima-ads}@anchor{40f}
  @section @code{System.Address_Image} (@code{s-addima.ads})
  
  
*************** function that gives an (implementation d
*** 26063,26069 ****
  string which identifies an address.
  
  @node System Assertions s-assert ads,System Atomic_Counters s-atocou ads,System Address_Image s-addima ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id136}@anchor{40e}@anchor{gnat_rm/the_gnat_library system-assertions-s-assert-ads}@anchor{40f}
  @section @code{System.Assertions} (@code{s-assert.ads})
  
  
--- 26112,26118 ----
  string which identifies an address.
  
  @node System Assertions s-assert ads,System Atomic_Counters s-atocou ads,System Address_Image s-addima ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id136}@anchor{410}@anchor{gnat_rm/the_gnat_library system-assertions-s-assert-ads}@anchor{411}
  @section @code{System.Assertions} (@code{s-assert.ads})
  
  
*************** by an run-time assertion failure, as wel
*** 26079,26085 ****
  is used internally to raise this assertion.
  
  @node System Atomic_Counters s-atocou ads,System Memory s-memory ads,System Assertions s-assert ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id137}@anchor{410}@anchor{gnat_rm/the_gnat_library system-atomic-counters-s-atocou-ads}@anchor{411}
  @section @code{System.Atomic_Counters} (@code{s-atocou.ads})
  
  
--- 26128,26134 ----
  is used internally to raise this assertion.
  
  @node System Atomic_Counters s-atocou ads,System Memory s-memory ads,System Assertions s-assert ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id137}@anchor{412}@anchor{gnat_rm/the_gnat_library system-atomic-counters-s-atocou-ads}@anchor{413}
  @section @code{System.Atomic_Counters} (@code{s-atocou.ads})
  
  
*************** on most targets, including all Alpha, AA
*** 26093,26099 ****
  x86, and x86_64 platforms.
  
  @node System Memory s-memory ads,System Multiprocessors s-multip ads,System Atomic_Counters s-atocou ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id138}@anchor{412}@anchor{gnat_rm/the_gnat_library system-memory-s-memory-ads}@anchor{413}
  @section @code{System.Memory} (@code{s-memory.ads})
  
  
--- 26142,26148 ----
  x86, and x86_64 platforms.
  
  @node System Memory s-memory ads,System Multiprocessors s-multip ads,System Atomic_Counters s-atocou ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id138}@anchor{414}@anchor{gnat_rm/the_gnat_library system-memory-s-memory-ads}@anchor{415}
  @section @code{System.Memory} (@code{s-memory.ads})
  
  
*************** calls to this unit may be made for low l
*** 26111,26117 ****
  example see the body of @code{GNAT.Tables}).
  
  @node System Multiprocessors s-multip ads,System Multiprocessors Dispatching_Domains s-mudido ads,System Memory s-memory ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id139}@anchor{414}@anchor{gnat_rm/the_gnat_library system-multiprocessors-s-multip-ads}@anchor{415}
  @section @code{System.Multiprocessors} (@code{s-multip.ads})
  
  
--- 26160,26166 ----
  example see the body of @code{GNAT.Tables}).
  
  @node System Multiprocessors s-multip ads,System Multiprocessors Dispatching_Domains s-mudido ads,System Memory s-memory ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id139}@anchor{416}@anchor{gnat_rm/the_gnat_library system-multiprocessors-s-multip-ads}@anchor{417}
  @section @code{System.Multiprocessors} (@code{s-multip.ads})
  
  
*************** in GNAT we also make it available in Ada
*** 26124,26130 ****
  technically an implementation-defined addition).
  
  @node System Multiprocessors Dispatching_Domains s-mudido ads,System Partition_Interface s-parint ads,System Multiprocessors s-multip ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id140}@anchor{416}@anchor{gnat_rm/the_gnat_library system-multiprocessors-dispatching-domains-s-mudido-ads}@anchor{417}
  @section @code{System.Multiprocessors.Dispatching_Domains} (@code{s-mudido.ads})
  
  
--- 26173,26179 ----
  technically an implementation-defined addition).
  
  @node System Multiprocessors Dispatching_Domains s-mudido ads,System Partition_Interface s-parint ads,System Multiprocessors s-multip ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id140}@anchor{418}@anchor{gnat_rm/the_gnat_library system-multiprocessors-dispatching-domains-s-mudido-ads}@anchor{419}
  @section @code{System.Multiprocessors.Dispatching_Domains} (@code{s-mudido.ads})
  
  
*************** in GNAT we also make it available in Ada
*** 26137,26143 ****
  technically an implementation-defined addition).
  
  @node System Partition_Interface s-parint ads,System Pool_Global s-pooglo ads,System Multiprocessors Dispatching_Domains s-mudido ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id141}@anchor{418}@anchor{gnat_rm/the_gnat_library system-partition-interface-s-parint-ads}@anchor{419}
  @section @code{System.Partition_Interface} (@code{s-parint.ads})
  
  
--- 26186,26192 ----
  technically an implementation-defined addition).
  
  @node System Partition_Interface s-parint ads,System Pool_Global s-pooglo ads,System Multiprocessors Dispatching_Domains s-mudido ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id141}@anchor{41a}@anchor{gnat_rm/the_gnat_library system-partition-interface-s-parint-ads}@anchor{41b}
  @section @code{System.Partition_Interface} (@code{s-parint.ads})
  
  
*************** technically an implementation-defined ad
*** 26147,26157 ****
  
  This package provides facilities for partition interfacing.  It
  is used primarily in a distribution context when using Annex E
! with @code{PolyORB}.  `NB!' See the note in @ref{274,,PolyORB} regarding
  the lifetime of this product.
  
  @node System Pool_Global s-pooglo ads,System Pool_Local s-pooloc ads,System Partition_Interface s-parint ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id142}@anchor{41a}@anchor{gnat_rm/the_gnat_library system-pool-global-s-pooglo-ads}@anchor{41b}
  @section @code{System.Pool_Global} (@code{s-pooglo.ads})
  
  
--- 26196,26206 ----
  
  This package provides facilities for partition interfacing.  It
  is used primarily in a distribution context when using Annex E
! with @code{PolyORB}.  `NB!' See the note in @ref{276,,PolyORB} regarding
  the lifetime of this product.
  
  @node System Pool_Global s-pooglo ads,System Pool_Local s-pooloc ads,System Partition_Interface s-parint ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id142}@anchor{41c}@anchor{gnat_rm/the_gnat_library system-pool-global-s-pooglo-ads}@anchor{41d}
  @section @code{System.Pool_Global} (@code{s-pooglo.ads})
  
  
*************** declared. It uses malloc/free to allocat
*** 26168,26174 ****
  do any automatic reclamation.
  
  @node System Pool_Local s-pooloc ads,System Restrictions s-restri ads,System Pool_Global s-pooglo ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id143}@anchor{41c}@anchor{gnat_rm/the_gnat_library system-pool-local-s-pooloc-ads}@anchor{41d}
  @section @code{System.Pool_Local} (@code{s-pooloc.ads})
  
  
--- 26217,26223 ----
  do any automatic reclamation.
  
  @node System Pool_Local s-pooloc ads,System Restrictions s-restri ads,System Pool_Global s-pooglo ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id143}@anchor{41e}@anchor{gnat_rm/the_gnat_library system-pool-local-s-pooloc-ads}@anchor{41f}
  @section @code{System.Pool_Local} (@code{s-pooloc.ads})
  
  
*************** a list of allocated blocks, so that all
*** 26185,26191 ****
  be freed automatically when the pool is finalized.
  
  @node System Restrictions s-restri ads,System Rident s-rident ads,System Pool_Local s-pooloc ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id144}@anchor{41e}@anchor{gnat_rm/the_gnat_library system-restrictions-s-restri-ads}@anchor{41f}
  @section @code{System.Restrictions} (@code{s-restri.ads})
  
  
--- 26234,26240 ----
  be freed automatically when the pool is finalized.
  
  @node System Restrictions s-restri ads,System Rident s-rident ads,System Pool_Local s-pooloc ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id144}@anchor{420}@anchor{gnat_rm/the_gnat_library system-restrictions-s-restri-ads}@anchor{421}
  @section @code{System.Restrictions} (@code{s-restri.ads})
  
  
*************** compiler determined information on which
*** 26201,26207 ****
  are violated by one or more packages in the partition.
  
  @node System Rident s-rident ads,System Strings Stream_Ops s-ststop ads,System Restrictions s-restri ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id145}@anchor{420}@anchor{gnat_rm/the_gnat_library system-rident-s-rident-ads}@anchor{421}
  @section @code{System.Rident} (@code{s-rident.ads})
  
  
--- 26250,26256 ----
  are violated by one or more packages in the partition.
  
  @node System Rident s-rident ads,System Strings Stream_Ops s-ststop ads,System Restrictions s-restri ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id145}@anchor{422}@anchor{gnat_rm/the_gnat_library system-rident-s-rident-ads}@anchor{423}
  @section @code{System.Rident} (@code{s-rident.ads})
  
  
*************** since the necessary instantiation is inc
*** 26217,26223 ****
  package System.Restrictions.
  
  @node System Strings Stream_Ops s-ststop ads,System Unsigned_Types s-unstyp ads,System Rident s-rident ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id146}@anchor{422}@anchor{gnat_rm/the_gnat_library system-strings-stream-ops-s-ststop-ads}@anchor{423}
  @section @code{System.Strings.Stream_Ops} (@code{s-ststop.ads})
  
  
--- 26266,26272 ----
  package System.Restrictions.
  
  @node System Strings Stream_Ops s-ststop ads,System Unsigned_Types s-unstyp ads,System Rident s-rident ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id146}@anchor{424}@anchor{gnat_rm/the_gnat_library system-strings-stream-ops-s-ststop-ads}@anchor{425}
  @section @code{System.Strings.Stream_Ops} (@code{s-ststop.ads})
  
  
*************** stream attributes are applied to string
*** 26233,26239 ****
  package can be used directly by application programs.
  
  @node System Unsigned_Types s-unstyp ads,System Wch_Cnv s-wchcnv ads,System Strings Stream_Ops s-ststop ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id147}@anchor{424}@anchor{gnat_rm/the_gnat_library system-unsigned-types-s-unstyp-ads}@anchor{425}
  @section @code{System.Unsigned_Types} (@code{s-unstyp.ads})
  
  
--- 26282,26288 ----
  package can be used directly by application programs.
  
  @node System Unsigned_Types s-unstyp ads,System Wch_Cnv s-wchcnv ads,System Strings Stream_Ops s-ststop ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id147}@anchor{426}@anchor{gnat_rm/the_gnat_library system-unsigned-types-s-unstyp-ads}@anchor{427}
  @section @code{System.Unsigned_Types} (@code{s-unstyp.ads})
  
  
*************** also contains some related definitions f
*** 26246,26252 ****
  used by the compiler in connection with packed array types.
  
  @node System Wch_Cnv s-wchcnv ads,System Wch_Con s-wchcon ads,System Unsigned_Types s-unstyp ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id148}@anchor{426}@anchor{gnat_rm/the_gnat_library system-wch-cnv-s-wchcnv-ads}@anchor{427}
  @section @code{System.Wch_Cnv} (@code{s-wchcnv.ads})
  
  
--- 26295,26301 ----
  used by the compiler in connection with packed array types.
  
  @node System Wch_Cnv s-wchcnv ads,System Wch_Con s-wchcon ads,System Unsigned_Types s-unstyp ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id148}@anchor{428}@anchor{gnat_rm/the_gnat_library system-wch-cnv-s-wchcnv-ads}@anchor{429}
  @section @code{System.Wch_Cnv} (@code{s-wchcnv.ads})
  
  
*************** encoding method.  It uses definitions in
*** 26267,26273 ****
  package @code{System.Wch_Con}.
  
  @node System Wch_Con s-wchcon ads,,System Wch_Cnv s-wchcnv ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id149}@anchor{428}@anchor{gnat_rm/the_gnat_library system-wch-con-s-wchcon-ads}@anchor{429}
  @section @code{System.Wch_Con} (@code{s-wchcon.ads})
  
  
--- 26316,26322 ----
  package @code{System.Wch_Con}.
  
  @node System Wch_Con s-wchcon ads,,System Wch_Cnv s-wchcnv ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id149}@anchor{42a}@anchor{gnat_rm/the_gnat_library system-wch-con-s-wchcon-ads}@anchor{42b}
  @section @code{System.Wch_Con} (@code{s-wchcon.ads})
  
  
*************** in ordinary strings.  These definitions
*** 26279,26285 ****
  the package @code{System.Wch_Cnv}.
  
  @node Interfacing to Other Languages,Specialized Needs Annexes,The GNAT Library,Top
! @anchor{gnat_rm/interfacing_to_other_languages doc}@anchor{42a}@anchor{gnat_rm/interfacing_to_other_languages id1}@anchor{42b}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-other-languages}@anchor{12}
  @chapter Interfacing to Other Languages
  
  
--- 26328,26334 ----
  the package @code{System.Wch_Cnv}.
  
  @node Interfacing to Other Languages,Specialized Needs Annexes,The GNAT Library,Top
! @anchor{gnat_rm/interfacing_to_other_languages doc}@anchor{42c}@anchor{gnat_rm/interfacing_to_other_languages id1}@anchor{42d}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-other-languages}@anchor{12}
  @chapter Interfacing to Other Languages
  
  
*************** provided.
*** 26297,26303 ****
  @end menu
  
  @node Interfacing to C,Interfacing to C++,,Interfacing to Other Languages
! @anchor{gnat_rm/interfacing_to_other_languages id2}@anchor{42c}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-c}@anchor{42d}
  @section Interfacing to C
  
  
--- 26346,26352 ----
  @end menu
  
  @node Interfacing to C,Interfacing to C++,,Interfacing to Other Languages
! @anchor{gnat_rm/interfacing_to_other_languages id2}@anchor{42e}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-c}@anchor{42f}
  @section Interfacing to C
  
  
*************** of the length corresponding to the @code
*** 26437,26443 ****
  @end itemize
  
  @node Interfacing to C++,Interfacing to COBOL,Interfacing to C,Interfacing to Other Languages
! @anchor{gnat_rm/interfacing_to_other_languages id3}@anchor{4b}@anchor{gnat_rm/interfacing_to_other_languages id4}@anchor{42e}
  @section Interfacing to C++
  
  
--- 26486,26492 ----
  @end itemize
  
  @node Interfacing to C++,Interfacing to COBOL,Interfacing to C,Interfacing to Other Languages
! @anchor{gnat_rm/interfacing_to_other_languages id3}@anchor{4b}@anchor{gnat_rm/interfacing_to_other_languages id4}@anchor{430}
  @section Interfacing to C++
  
  
*************** builds an opaque @code{Type_Info_Ptr} to
*** 26654,26660 ****
  object at a given @code{System.Address}.
  
  @node Interfacing to COBOL,Interfacing to Fortran,Interfacing to C++,Interfacing to Other Languages
! @anchor{gnat_rm/interfacing_to_other_languages id5}@anchor{42f}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-cobol}@anchor{430}
  @section Interfacing to COBOL
  
  
--- 26703,26709 ----
  object at a given @code{System.Address}.
  
  @node Interfacing to COBOL,Interfacing to Fortran,Interfacing to C++,Interfacing to Other Languages
! @anchor{gnat_rm/interfacing_to_other_languages id5}@anchor{431}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-cobol}@anchor{432}
  @section Interfacing to COBOL
  
  
*************** Interfacing to COBOL is achieved as desc
*** 26662,26668 ****
  the Ada Reference Manual.
  
  @node Interfacing to Fortran,Interfacing to non-GNAT Ada code,Interfacing to COBOL,Interfacing to Other Languages
! @anchor{gnat_rm/interfacing_to_other_languages id6}@anchor{431}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-fortran}@anchor{432}
  @section Interfacing to Fortran
  
  
--- 26711,26717 ----
  the Ada Reference Manual.
  
  @node Interfacing to Fortran,Interfacing to non-GNAT Ada code,Interfacing to COBOL,Interfacing to Other Languages
! @anchor{gnat_rm/interfacing_to_other_languages id6}@anchor{433}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-fortran}@anchor{434}
  @section Interfacing to Fortran
  
  
*************** multi-dimensional array causes the array
*** 26672,26678 ****
  order as required for convenient interface to Fortran.
  
  @node Interfacing to non-GNAT Ada code,,Interfacing to Fortran,Interfacing to Other Languages
! @anchor{gnat_rm/interfacing_to_other_languages id7}@anchor{433}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-non-gnat-ada-code}@anchor{434}
  @section Interfacing to non-GNAT Ada code
  
  
--- 26721,26727 ----
  order as required for convenient interface to Fortran.
  
  @node Interfacing to non-GNAT Ada code,,Interfacing to Fortran,Interfacing to Other Languages
! @anchor{gnat_rm/interfacing_to_other_languages id7}@anchor{435}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-non-gnat-ada-code}@anchor{436}
  @section Interfacing to non-GNAT Ada code
  
  
*************** values or simple record types without va
*** 26696,26702 ****
  types with fixed bounds.
  
  @node Specialized Needs Annexes,Implementation of Specific Ada Features,Interfacing to Other Languages,Top
! @anchor{gnat_rm/specialized_needs_annexes doc}@anchor{435}@anchor{gnat_rm/specialized_needs_annexes id1}@anchor{436}@anchor{gnat_rm/specialized_needs_annexes specialized-needs-annexes}@anchor{13}
  @chapter Specialized Needs Annexes
  
  
--- 26745,26751 ----
  types with fixed bounds.
  
  @node Specialized Needs Annexes,Implementation of Specific Ada Features,Interfacing to Other Languages,Top
! @anchor{gnat_rm/specialized_needs_annexes doc}@anchor{437}@anchor{gnat_rm/specialized_needs_annexes id1}@anchor{438}@anchor{gnat_rm/specialized_needs_annexes specialized-needs-annexes}@anchor{13}
  @chapter Specialized Needs Annexes
  
  
*************** The Real-Time Systems Annex is fully imp
*** 26717,26723 ****
  
  Stub generation is fully implemented in the GNAT compiler.  In addition,
  a complete compatible PCS is available as part of @code{PolyORB},
! a separate product. `NB!' See the note in @ref{274,,PolyORB} regarding the lifetime of this product.
  
  @item `Information Systems (Annex F)'
  
--- 26766,26772 ----
  
  Stub generation is fully implemented in the GNAT compiler.  In addition,
  a complete compatible PCS is available as part of @code{PolyORB},
! a separate product. `NB!' See the note in @ref{276,,PolyORB} regarding the lifetime of this product.
  
  @item `Information Systems (Annex F)'
  
*************** in Ada 2005) is fully implemented.
*** 26734,26740 ****
  @end table
  
  @node Implementation of Specific Ada Features,Implementation of Ada 2022 Features,Specialized Needs Annexes,Top
! @anchor{gnat_rm/implementation_of_specific_ada_features doc}@anchor{437}@anchor{gnat_rm/implementation_of_specific_ada_features id1}@anchor{438}@anchor{gnat_rm/implementation_of_specific_ada_features implementation-of-specific-ada-features}@anchor{14}
  @chapter Implementation of Specific Ada Features
  
  
--- 26783,26789 ----
  @end table
  
  @node Implementation of Specific Ada Features,Implementation of Ada 2022 Features,Specialized Needs Annexes,Top
! @anchor{gnat_rm/implementation_of_specific_ada_features doc}@anchor{439}@anchor{gnat_rm/implementation_of_specific_ada_features id1}@anchor{43a}@anchor{gnat_rm/implementation_of_specific_ada_features implementation-of-specific-ada-features}@anchor{14}
  @chapter Implementation of Specific Ada Features
  
  
*************** facilities.
*** 26753,26759 ****
  @end menu
  
  @node Machine Code Insertions,GNAT Implementation of Tasking,,Implementation of Specific Ada Features
! @anchor{gnat_rm/implementation_of_specific_ada_features id2}@anchor{439}@anchor{gnat_rm/implementation_of_specific_ada_features machine-code-insertions}@anchor{184}
  @section Machine Code Insertions
  
  
--- 26802,26808 ----
  @end menu
  
  @node Machine Code Insertions,GNAT Implementation of Tasking,,Implementation of Specific Ada Features
! @anchor{gnat_rm/implementation_of_specific_ada_features id2}@anchor{43b}@anchor{gnat_rm/implementation_of_specific_ada_features machine-code-insertions}@anchor{186}
  @section Machine Code Insertions
  
  
*************** according to normal visibility rules. In
*** 26921,26927 ****
  qualification is required.
  
  @node GNAT Implementation of Tasking,GNAT Implementation of Shared Passive Packages,Machine Code Insertions,Implementation of Specific Ada Features
! @anchor{gnat_rm/implementation_of_specific_ada_features gnat-implementation-of-tasking}@anchor{43a}@anchor{gnat_rm/implementation_of_specific_ada_features id3}@anchor{43b}
  @section GNAT Implementation of Tasking
  
  
--- 26970,26976 ----
  qualification is required.
  
  @node GNAT Implementation of Tasking,GNAT Implementation of Shared Passive Packages,Machine Code Insertions,Implementation of Specific Ada Features
! @anchor{gnat_rm/implementation_of_specific_ada_features gnat-implementation-of-tasking}@anchor{43c}@anchor{gnat_rm/implementation_of_specific_ada_features id3}@anchor{43d}
  @section GNAT Implementation of Tasking
  
  
*************** to compliance with the Real-Time Systems
*** 26937,26943 ****
  @end menu
  
  @node Mapping Ada Tasks onto the Underlying Kernel Threads,Ensuring Compliance with the Real-Time Annex,,GNAT Implementation of Tasking
! @anchor{gnat_rm/implementation_of_specific_ada_features id4}@anchor{43c}@anchor{gnat_rm/implementation_of_specific_ada_features mapping-ada-tasks-onto-the-underlying-kernel-threads}@anchor{43d}
  @subsection Mapping Ada Tasks onto the Underlying Kernel Threads
  
  
--- 26986,26992 ----
  @end menu
  
  @node Mapping Ada Tasks onto the Underlying Kernel Threads,Ensuring Compliance with the Real-Time Annex,,GNAT Implementation of Tasking
! @anchor{gnat_rm/implementation_of_specific_ada_features id4}@anchor{43e}@anchor{gnat_rm/implementation_of_specific_ada_features mapping-ada-tasks-onto-the-underlying-kernel-threads}@anchor{43f}
  @subsection Mapping Ada Tasks onto the Underlying Kernel Threads
  
  
*************** support this functionality when the pare
*** 27006,27012 ****
  @geindex Forking a new process
  
  @node Ensuring Compliance with the Real-Time Annex,Support for Locking Policies,Mapping Ada Tasks onto the Underlying Kernel Threads,GNAT Implementation of Tasking
! @anchor{gnat_rm/implementation_of_specific_ada_features ensuring-compliance-with-the-real-time-annex}@anchor{43e}@anchor{gnat_rm/implementation_of_specific_ada_features id5}@anchor{43f}
  @subsection Ensuring Compliance with the Real-Time Annex
  
  
--- 27055,27061 ----
  @geindex Forking a new process
  
  @node Ensuring Compliance with the Real-Time Annex,Support for Locking Policies,Mapping Ada Tasks onto the Underlying Kernel Threads,GNAT Implementation of Tasking
! @anchor{gnat_rm/implementation_of_specific_ada_features ensuring-compliance-with-the-real-time-annex}@anchor{440}@anchor{gnat_rm/implementation_of_specific_ada_features id5}@anchor{441}
  @subsection Ensuring Compliance with the Real-Time Annex
  
  
*************** placed at the end.
*** 27057,27063 ****
  @c Support_for_Locking_Policies
  
  @node Support for Locking Policies,,Ensuring Compliance with the Real-Time Annex,GNAT Implementation of Tasking
! @anchor{gnat_rm/implementation_of_specific_ada_features support-for-locking-policies}@anchor{440}
  @subsection Support for Locking Policies
  
  
--- 27106,27112 ----
  @c Support_for_Locking_Policies
  
  @node Support for Locking Policies,,Ensuring Compliance with the Real-Time Annex,GNAT Implementation of Tasking
! @anchor{gnat_rm/implementation_of_specific_ada_features support-for-locking-policies}@anchor{442}
  @subsection Support for Locking Policies
  
  
*************** then ceiling locking is used.
*** 27091,27097 ****
  Otherwise, the @code{Ceiling_Locking} policy is ignored.
  
  @node GNAT Implementation of Shared Passive Packages,Code Generation for Array Aggregates,GNAT Implementation of Tasking,Implementation of Specific Ada Features
! @anchor{gnat_rm/implementation_of_specific_ada_features gnat-implementation-of-shared-passive-packages}@anchor{441}@anchor{gnat_rm/implementation_of_specific_ada_features id6}@anchor{442}
  @section GNAT Implementation of Shared Passive Packages
  
  
--- 27140,27146 ----
  Otherwise, the @code{Ceiling_Locking} policy is ignored.
  
  @node GNAT Implementation of Shared Passive Packages,Code Generation for Array Aggregates,GNAT Implementation of Tasking,Implementation of Specific Ada Features
! @anchor{gnat_rm/implementation_of_specific_ada_features gnat-implementation-of-shared-passive-packages}@anchor{443}@anchor{gnat_rm/implementation_of_specific_ada_features id6}@anchor{444}
  @section GNAT Implementation of Shared Passive Packages
  
  
*************** This is used to provide the required loc
*** 27189,27195 ****
  semantics for proper protected object synchronization.
  
  @node Code Generation for Array Aggregates,The Size of Discriminated Records with Default Discriminants,GNAT Implementation of Shared Passive Packages,Implementation of Specific Ada Features
! @anchor{gnat_rm/implementation_of_specific_ada_features code-generation-for-array-aggregates}@anchor{443}@anchor{gnat_rm/implementation_of_specific_ada_features id7}@anchor{444}
  @section Code Generation for Array Aggregates
  
  
--- 27238,27244 ----
  semantics for proper protected object synchronization.
  
  @node Code Generation for Array Aggregates,The Size of Discriminated Records with Default Discriminants,GNAT Implementation of Shared Passive Packages,Implementation of Specific Ada Features
! @anchor{gnat_rm/implementation_of_specific_ada_features code-generation-for-array-aggregates}@anchor{445}@anchor{gnat_rm/implementation_of_specific_ada_features id7}@anchor{446}
  @section Code Generation for Array Aggregates
  
  
*************** component values and static subtypes als
*** 27220,27226 ****
  @end menu
  
  @node Static constant aggregates with static bounds,Constant aggregates with unconstrained nominal types,,Code Generation for Array Aggregates
! @anchor{gnat_rm/implementation_of_specific_ada_features id8}@anchor{445}@anchor{gnat_rm/implementation_of_specific_ada_features static-constant-aggregates-with-static-bounds}@anchor{446}
  @subsection Static constant aggregates with static bounds
  
  
--- 27269,27275 ----
  @end menu
  
  @node Static constant aggregates with static bounds,Constant aggregates with unconstrained nominal types,,Code Generation for Array Aggregates
! @anchor{gnat_rm/implementation_of_specific_ada_features id8}@anchor{447}@anchor{gnat_rm/implementation_of_specific_ada_features static-constant-aggregates-with-static-bounds}@anchor{448}
  @subsection Static constant aggregates with static bounds
  
  
*************** Zero2: constant two_dim := (others => (o
*** 27267,27273 ****
  @end example
  
  @node Constant aggregates with unconstrained nominal types,Aggregates with static bounds,Static constant aggregates with static bounds,Code Generation for Array Aggregates
! @anchor{gnat_rm/implementation_of_specific_ada_features constant-aggregates-with-unconstrained-nominal-types}@anchor{447}@anchor{gnat_rm/implementation_of_specific_ada_features id9}@anchor{448}
  @subsection Constant aggregates with unconstrained nominal types
  
  
--- 27316,27322 ----
  @end example
  
  @node Constant aggregates with unconstrained nominal types,Aggregates with static bounds,Static constant aggregates with static bounds,Code Generation for Array Aggregates
! @anchor{gnat_rm/implementation_of_specific_ada_features constant-aggregates-with-unconstrained-nominal-types}@anchor{449}@anchor{gnat_rm/implementation_of_specific_ada_features id9}@anchor{44a}
  @subsection Constant aggregates with unconstrained nominal types
  
  
*************** Cr_Unc : constant One_Unc := (12,24,36);
*** 27282,27288 ****
  @end example
  
  @node Aggregates with static bounds,Aggregates with nonstatic bounds,Constant aggregates with unconstrained nominal types,Code Generation for Array Aggregates
! @anchor{gnat_rm/implementation_of_specific_ada_features aggregates-with-static-bounds}@anchor{449}@anchor{gnat_rm/implementation_of_specific_ada_features id10}@anchor{44a}
  @subsection Aggregates with static bounds
  
  
--- 27331,27337 ----
  @end example
  
  @node Aggregates with static bounds,Aggregates with nonstatic bounds,Constant aggregates with unconstrained nominal types,Code Generation for Array Aggregates
! @anchor{gnat_rm/implementation_of_specific_ada_features aggregates-with-static-bounds}@anchor{44b}@anchor{gnat_rm/implementation_of_specific_ada_features id10}@anchor{44c}
  @subsection Aggregates with static bounds
  
  
*************** end loop;
*** 27310,27316 ****
  @end example
  
  @node Aggregates with nonstatic bounds,Aggregates in assignment statements,Aggregates with static bounds,Code Generation for Array Aggregates
! @anchor{gnat_rm/implementation_of_specific_ada_features aggregates-with-nonstatic-bounds}@anchor{44b}@anchor{gnat_rm/implementation_of_specific_ada_features id11}@anchor{44c}
  @subsection Aggregates with nonstatic bounds
  
  
--- 27359,27365 ----
  @end example
  
  @node Aggregates with nonstatic bounds,Aggregates in assignment statements,Aggregates with static bounds,Code Generation for Array Aggregates
! @anchor{gnat_rm/implementation_of_specific_ada_features aggregates-with-nonstatic-bounds}@anchor{44d}@anchor{gnat_rm/implementation_of_specific_ada_features id11}@anchor{44e}
  @subsection Aggregates with nonstatic bounds
  
  
*************** have to be applied to sub-arrays individ
*** 27321,27327 ****
  compatible subtypes.
  
  @node Aggregates in assignment statements,,Aggregates with nonstatic bounds,Code Generation for Array Aggregates
! @anchor{gnat_rm/implementation_of_specific_ada_features aggregates-in-assignment-statements}@anchor{44d}@anchor{gnat_rm/implementation_of_specific_ada_features id12}@anchor{44e}
  @subsection Aggregates in assignment statements
  
  
--- 27370,27376 ----
  compatible subtypes.
  
  @node Aggregates in assignment statements,,Aggregates with nonstatic bounds,Code Generation for Array Aggregates
! @anchor{gnat_rm/implementation_of_specific_ada_features aggregates-in-assignment-statements}@anchor{44f}@anchor{gnat_rm/implementation_of_specific_ada_features id12}@anchor{450}
  @subsection Aggregates in assignment statements
  
  
*************** a temporary (created either by the front
*** 27363,27369 ****
  that temporary will be copied onto the target.
  
  @node The Size of Discriminated Records with Default Discriminants,Image Values For Nonscalar Types,Code Generation for Array Aggregates,Implementation of Specific Ada Features
! @anchor{gnat_rm/implementation_of_specific_ada_features id13}@anchor{44f}@anchor{gnat_rm/implementation_of_specific_ada_features the-size-of-discriminated-records-with-default-discriminants}@anchor{450}
  @section The Size of Discriminated Records with Default Discriminants
  
  
--- 27412,27418 ----
  that temporary will be copied onto the target.
  
  @node The Size of Discriminated Records with Default Discriminants,Image Values For Nonscalar Types,Code Generation for Array Aggregates,Implementation of Specific Ada Features
! @anchor{gnat_rm/implementation_of_specific_ada_features id13}@anchor{451}@anchor{gnat_rm/implementation_of_specific_ada_features the-size-of-discriminated-records-with-default-discriminants}@anchor{452}
  @section The Size of Discriminated Records with Default Discriminants
  
  
*************** say) must be consistent, so it is impera
*** 27443,27449 ****
  remain invariant.
  
  @node Image Values For Nonscalar Types,Strict Conformance to the Ada Reference Manual,The Size of Discriminated Records with Default Discriminants,Implementation of Specific Ada Features
! @anchor{gnat_rm/implementation_of_specific_ada_features id14}@anchor{451}@anchor{gnat_rm/implementation_of_specific_ada_features image-values-for-nonscalar-types}@anchor{452}
  @section Image Values For Nonscalar Types
  
  
--- 27492,27498 ----
  remain invariant.
  
  @node Image Values For Nonscalar Types,Strict Conformance to the Ada Reference Manual,The Size of Discriminated Records with Default Discriminants,Implementation of Specific Ada Features
! @anchor{gnat_rm/implementation_of_specific_ada_features id14}@anchor{453}@anchor{gnat_rm/implementation_of_specific_ada_features image-values-for-nonscalar-types}@anchor{454}
  @section Image Values For Nonscalar Types
  
  
*************** control of image text is required for so
*** 27463,27469 ****
  explicitly specified.
  
  @node Strict Conformance to the Ada Reference Manual,,Image Values For Nonscalar Types,Implementation of Specific Ada Features
! @anchor{gnat_rm/implementation_of_specific_ada_features id15}@anchor{453}@anchor{gnat_rm/implementation_of_specific_ada_features strict-conformance-to-the-ada-reference-manual}@anchor{454}
  @section Strict Conformance to the Ada Reference Manual
  
  
--- 27512,27518 ----
  explicitly specified.
  
  @node Strict Conformance to the Ada Reference Manual,,Image Values For Nonscalar Types,Implementation of Specific Ada Features
! @anchor{gnat_rm/implementation_of_specific_ada_features id15}@anchor{455}@anchor{gnat_rm/implementation_of_specific_ada_features strict-conformance-to-the-ada-reference-manual}@anchor{456}
  @section Strict Conformance to the Ada Reference Manual
  
  
*************** behavior (although at the cost of a sign
*** 27490,27496 ****
  infinite and NaN values are properly generated.
  
  @node Implementation of Ada 2022 Features,GNAT language extensions,Implementation of Specific Ada Features,Top
! @anchor{gnat_rm/implementation_of_ada_2022_features doc}@anchor{455}@anchor{gnat_rm/implementation_of_ada_2022_features id1}@anchor{456}@anchor{gnat_rm/implementation_of_ada_2022_features implementation-of-ada-2022-features}@anchor{15}
  @chapter Implementation of Ada 2022 Features
  
  
--- 27539,27545 ----
  infinite and NaN values are properly generated.
  
  @node Implementation of Ada 2022 Features,GNAT language extensions,Implementation of Specific Ada Features,Top
! @anchor{gnat_rm/implementation_of_ada_2022_features doc}@anchor{457}@anchor{gnat_rm/implementation_of_ada_2022_features id1}@anchor{458}@anchor{gnat_rm/implementation_of_ada_2022_features implementation-of-ada-2022-features}@anchor{15}
  @chapter Implementation of Ada 2022 Features
  
  
*************** RM references: 3.02.04 (31/5) 4.06 (51.1
*** 30937,30943 ****
  @end itemize
  
  @node GNAT language extensions,Security Hardening Features,Implementation of Ada 2022 Features,Top
! @anchor{gnat_rm/gnat_language_extensions doc}@anchor{457}@anchor{gnat_rm/gnat_language_extensions gnat-language-extensions}@anchor{458}@anchor{gnat_rm/gnat_language_extensions id1}@anchor{459}
  @chapter GNAT language extensions
  
  
--- 30986,30992 ----
  @end itemize
  
  @node GNAT language extensions,Security Hardening Features,Implementation of Ada 2022 Features,Top
! @anchor{gnat_rm/gnat_language_extensions doc}@anchor{459}@anchor{gnat_rm/gnat_language_extensions gnat-language-extensions}@anchor{45a}@anchor{gnat_rm/gnat_language_extensions id1}@anchor{45b}
  @chapter GNAT language extensions
  
  
*************** These features might be removed or heavi
*** 30969,30975 ****
  @end menu
  
  @node How to activate the extended GNAT Ada superset,Curated Extensions,,GNAT language extensions
! @anchor{gnat_rm/gnat_language_extensions how-to-activate-the-extended-gnat-ada-superset}@anchor{45a}
  @section How to activate the extended GNAT Ada superset
  
  
--- 31018,31024 ----
  @end menu
  
  @node How to activate the extended GNAT Ada superset,Curated Extensions,,GNAT language extensions
! @anchor{gnat_rm/gnat_language_extensions how-to-activate-the-extended-gnat-ada-superset}@anchor{45c}
  @section How to activate the extended GNAT Ada superset
  
  
*************** for use in playground experiments.
*** 31010,31016 ****
  @end cartouche
  
  @node Curated Extensions,Experimental Language Extensions,How to activate the extended GNAT Ada superset,GNAT language extensions
! @anchor{gnat_rm/gnat_language_extensions curated-extensions}@anchor{45b}@anchor{gnat_rm/gnat_language_extensions curated-language-extensions}@anchor{6c}
  @section Curated Extensions
  
  
--- 31059,31065 ----
  @end cartouche
  
  @node Curated Extensions,Experimental Language Extensions,How to activate the extended GNAT Ada superset,GNAT language extensions
! @anchor{gnat_rm/gnat_language_extensions curated-extensions}@anchor{45d}@anchor{gnat_rm/gnat_language_extensions curated-language-extensions}@anchor{6c}
  @section Curated Extensions
  
  
*************** Features activated via @code{-gnatX} or
*** 31033,31039 ****
  @end menu
  
  @node Local Declarations Without Block,Deep delta Aggregates,,Curated Extensions
! @anchor{gnat_rm/gnat_language_extensions local-declarations-without-block}@anchor{45c}
  @subsection Local Declarations Without Block
  
  
--- 31082,31088 ----
  @end menu
  
  @node Local Declarations Without Block,Deep delta Aggregates,,Curated Extensions
! @anchor{gnat_rm/gnat_language_extensions local-declarations-without-block}@anchor{45e}
  @subsection Local Declarations Without Block
  
  
*************** And as such the second `@w{`}A`@w{`} dec
*** 31126,31132 ****
  @end cartouche
  
  @node Deep delta Aggregates,Fixed lower bounds for array types and subtypes,Local Declarations Without Block,Curated Extensions
! @anchor{gnat_rm/gnat_language_extensions deep-delta-aggregates}@anchor{45d}
  @subsection Deep delta Aggregates
  
  
--- 31175,31181 ----
  @end cartouche
  
  @node Deep delta Aggregates,Fixed lower bounds for array types and subtypes,Local Declarations Without Block,Curated Extensions
! @anchor{gnat_rm/gnat_language_extensions deep-delta-aggregates}@anchor{45f}
  @subsection Deep delta Aggregates
  
  
*************** The syntax of delta aggregates in the ex
*** 31148,31154 ****
  @end menu
  
  @node Syntax,Legality Rules,,Deep delta Aggregates
! @anchor{gnat_rm/gnat_language_extensions syntax}@anchor{45e}
  @subsubsection Syntax
  
  
--- 31197,31203 ----
  @end menu
  
  @node Syntax,Legality Rules,,Deep delta Aggregates
! @anchor{gnat_rm/gnat_language_extensions syntax}@anchor{460}
  @subsubsection Syntax
  
  
*************** array_subcomponent_choice ::=
*** 31194,31200 ****
  @end example
  
  @node Legality Rules,Dynamic Semantics,Syntax,Deep delta Aggregates
! @anchor{gnat_rm/gnat_language_extensions legality-rules}@anchor{45f}
  @subsubsection Legality Rules
  
  
--- 31243,31249 ----
  @end example
  
  @node Legality Rules,Dynamic Semantics,Syntax,Deep delta Aggregates
! @anchor{gnat_rm/gnat_language_extensions legality-rules}@anchor{461}
  @subsubsection Legality Rules
  
  
*************** the object denoted by the base_expressio
*** 31231,31237 ****
  @end enumerate
  
  @node Dynamic Semantics,Examples,Legality Rules,Deep delta Aggregates
! @anchor{gnat_rm/gnat_language_extensions dynamic-semantics}@anchor{460}
  @subsubsection Dynamic Semantics
  
  
--- 31280,31286 ----
  @end enumerate
  
  @node Dynamic Semantics,Examples,Legality Rules,Deep delta Aggregates
! @anchor{gnat_rm/gnat_language_extensions dynamic-semantics}@anchor{462}
  @subsubsection Dynamic Semantics
  
  
*************** and assigned to the corresponding subcom
*** 31288,31294 ****
  @end itemize
  
  @node Examples,,Dynamic Semantics,Deep delta Aggregates
! @anchor{gnat_rm/gnat_language_extensions examples}@anchor{461}
  @subsubsection Examples
  
  
--- 31337,31343 ----
  @end itemize
  
  @node Examples,,Dynamic Semantics,Deep delta Aggregates
! @anchor{gnat_rm/gnat_language_extensions examples}@anchor{463}
  @subsubsection Examples
  
  
*************** end;
*** 31316,31322 ****
  @end example
  
  @node Fixed lower bounds for array types and subtypes,Prefixed-view notation for calls to primitive subprograms of untagged types,Deep delta Aggregates,Curated Extensions
! @anchor{gnat_rm/gnat_language_extensions fixed-lower-bounds-for-array-types-and-subtypes}@anchor{462}
  @subsection Fixed lower bounds for array types and subtypes
  
  
--- 31365,31371 ----
  @end example
  
  @node Fixed lower bounds for array types and subtypes,Prefixed-view notation for calls to primitive subprograms of untagged types,Deep delta Aggregates,Curated Extensions
! @anchor{gnat_rm/gnat_language_extensions fixed-lower-bounds-for-array-types-and-subtypes}@anchor{464}
  @subsection Fixed lower bounds for array types and subtypes
  
  
*************** lower bound of unconstrained array forma
*** 31367,31373 ****
  ranges with static fixed lower bounds.
  
  @node Prefixed-view notation for calls to primitive subprograms of untagged types,Expression defaults for generic formal functions,Fixed lower bounds for array types and subtypes,Curated Extensions
! @anchor{gnat_rm/gnat_language_extensions prefixed-view-notation-for-calls-to-primitive-subprograms-of-untagged-types}@anchor{463}
  @subsection Prefixed-view notation for calls to primitive subprograms of untagged types
  
  
--- 31416,31422 ----
  ranges with static fixed lower bounds.
  
  @node Prefixed-view notation for calls to primitive subprograms of untagged types,Expression defaults for generic formal functions,Fixed lower bounds for array types and subtypes,Curated Extensions
! @anchor{gnat_rm/gnat_language_extensions prefixed-view-notation-for-calls-to-primitive-subprograms-of-untagged-types}@anchor{465}
  @subsection Prefixed-view notation for calls to primitive subprograms of untagged types
  
  
*************** pragma Assert (V.Nth_Element(1) = 42);
*** 31417,31423 ****
  @end example
  
  @node Expression defaults for generic formal functions,String interpolation,Prefixed-view notation for calls to primitive subprograms of untagged types,Curated Extensions
! @anchor{gnat_rm/gnat_language_extensions expression-defaults-for-generic-formal-functions}@anchor{464}
  @subsection Expression defaults for generic formal functions
  
  
--- 31466,31472 ----
  @end example
  
  @node Expression defaults for generic formal functions,String interpolation,Prefixed-view notation for calls to primitive subprograms of untagged types,Curated Extensions
! @anchor{gnat_rm/gnat_language_extensions expression-defaults-for-generic-formal-functions}@anchor{466}
  @subsection Expression defaults for generic formal functions
  
  
*************** If the default is used (i.e. there is no
*** 31448,31454 ****
  then calls to Copy in the instance will simply return Item.
  
  @node String interpolation,Constrained attribute for generic objects,Expression defaults for generic formal functions,Curated Extensions
! @anchor{gnat_rm/gnat_language_extensions string-interpolation}@anchor{465}
  @subsection String interpolation
  
  
--- 31497,31503 ----
  then calls to Copy in the instance will simply return Item.
  
  @node String interpolation,Constrained attribute for generic objects,Expression defaults for generic formal functions,Curated Extensions
! @anchor{gnat_rm/gnat_language_extensions string-interpolation}@anchor{467}
  @subsection String interpolation
  
  
*************** a double quote is " and an open brace is
*** 31615,31621 ****
  @end example
  
  @node Constrained attribute for generic objects,Static aspect on intrinsic functions,String interpolation,Curated Extensions
! @anchor{gnat_rm/gnat_language_extensions constrained-attribute-for-generic-objects}@anchor{466}
  @subsection Constrained attribute for generic objects
  
  
--- 31664,31670 ----
  @end example
  
  @node Constrained attribute for generic objects,Static aspect on intrinsic functions,String interpolation,Curated Extensions
! @anchor{gnat_rm/gnat_language_extensions constrained-attribute-for-generic-objects}@anchor{468}
  @subsection Constrained attribute for generic objects
  
  
*************** The @code{Constrained} attribute is perm
*** 31623,31629 ****
  result indicates whether the corresponding actual is constrained.
  
  @node Static aspect on intrinsic functions,First Controlling Parameter,Constrained attribute for generic objects,Curated Extensions
! @anchor{gnat_rm/gnat_language_extensions static-aspect-on-intrinsic-functions}@anchor{467}
  @subsection @code{Static} aspect on intrinsic functions
  
  
--- 31672,31678 ----
  result indicates whether the corresponding actual is constrained.
  
  @node Static aspect on intrinsic functions,First Controlling Parameter,Constrained attribute for generic objects,Curated Extensions
! @anchor{gnat_rm/gnat_language_extensions static-aspect-on-intrinsic-functions}@anchor{469}
  @subsection @code{Static} aspect on intrinsic functions
  
  
*************** and the compiler will evaluate some of t
*** 31632,31638 ****
  particular the @code{Shift_Left} and @code{Shift_Right} intrinsics.
  
  @node First Controlling Parameter,Unsigned_Base_Range aspect,Static aspect on intrinsic functions,Curated Extensions
! @anchor{gnat_rm/gnat_language_extensions first-controlling-parameter}@anchor{468}
  @subsection First Controlling Parameter
  
  
--- 31681,31687 ----
  particular the @code{Shift_Left} and @code{Shift_Right} intrinsics.
  
  @node First Controlling Parameter,Unsigned_Base_Range aspect,Static aspect on intrinsic functions,Curated Extensions
! @anchor{gnat_rm/gnat_language_extensions first-controlling-parameter}@anchor{46a}
  @subsection First Controlling Parameter
  
  
*************** The result of a function is never a cont
*** 31732,31738 ****
  @end itemize
  
  @node Unsigned_Base_Range aspect,Generalized Finalization,First Controlling Parameter,Curated Extensions
! @anchor{gnat_rm/gnat_language_extensions unsigned-base-range-aspect}@anchor{469}
  @subsection @code{Unsigned_Base_Range} aspect
  
  
--- 31781,31787 ----
  @end itemize
  
  @node Unsigned_Base_Range aspect,Generalized Finalization,First Controlling Parameter,Curated Extensions
! @anchor{gnat_rm/gnat_language_extensions unsigned-base-range-aspect}@anchor{46b}
  @subsection @code{Unsigned_Base_Range} aspect
  
  
*************** It ensures that arithmetic operations of
*** 31758,31764 ****
  out using 64 bits.
  
  @node Generalized Finalization,,Unsigned_Base_Range aspect,Curated Extensions
! @anchor{gnat_rm/gnat_language_extensions generalized-finalization}@anchor{46a}
  @subsection Generalized Finalization
  
  
--- 31807,31813 ----
  out using 64 bits.
  
  @node Generalized Finalization,,Unsigned_Base_Range aspect,Curated Extensions
! @anchor{gnat_rm/gnat_language_extensions generalized-finalization}@anchor{46c}
  @subsection Generalized Finalization
  
  
*************** in this case.
*** 31830,31836 ****
  
  @item 
  The @code{Adjust} and @code{Finalize} procedures are automatically considered as
! having the @ref{46b,,No_Raise aspect} specified for them. In particular, the
  compiler has permission to enforce none of the guarantees specified by the
  RM 7.6.1 (14/1) and subsequent subclauses.
  @end itemize
--- 31879,31885 ----
  
  @item 
  The @code{Adjust} and @code{Finalize} procedures are automatically considered as
! having the @ref{46d,,No_Raise aspect} specified for them. In particular, the
  compiler has permission to enforce none of the guarantees specified by the
  RM 7.6.1 (14/1) and subsequent subclauses.
  @end itemize
*************** end P;
*** 31891,31897 ****
  @end menu
  
  @node Finalizable tagged types,Composite types,,Generalized Finalization
! @anchor{gnat_rm/gnat_language_extensions finalizable-tagged-types}@anchor{46c}
  @subsubsection Finalizable tagged types
  
  
--- 31940,31946 ----
  @end menu
  
  @node Finalizable tagged types,Composite types,,Generalized Finalization
! @anchor{gnat_rm/gnat_language_extensions finalizable-tagged-types}@anchor{46e}
  @subsubsection Finalizable tagged types
  
  
*************** dispatching whenever it makes sense, i.e
*** 31901,31907 ****
  class-wide type and the class includes at least one finalizable tagged type.
  
  @node Composite types,Interoperability with controlled types,Finalizable tagged types,Generalized Finalization
! @anchor{gnat_rm/gnat_language_extensions composite-types}@anchor{46d}
  @subsubsection Composite types
  
  
--- 31950,31956 ----
  class-wide type and the class includes at least one finalizable tagged type.
  
  @node Composite types,Interoperability with controlled types,Finalizable tagged types,Generalized Finalization
! @anchor{gnat_rm/gnat_language_extensions composite-types}@anchor{46f}
  @subsubsection Composite types
  
  
*************** in order to call the primitives of their
*** 31911,31917 ****
  the same as for controlled components of composite types.
  
  @node Interoperability with controlled types,,Composite types,Generalized Finalization
! @anchor{gnat_rm/gnat_language_extensions interoperability-with-controlled-types}@anchor{46e}
  @subsubsection Interoperability with controlled types
  
  
--- 31960,31966 ----
  the same as for controlled components of composite types.
  
  @node Interoperability with controlled types,,Composite types,Generalized Finalization
! @anchor{gnat_rm/gnat_language_extensions interoperability-with-controlled-types}@anchor{470}
  @subsubsection Interoperability with controlled types
  
  
*************** versa, but the stricter dynamic semantic
*** 31921,31927 ****
  types, is applied in this case.
  
  @node Experimental Language Extensions,,Curated Extensions,GNAT language extensions
! @anchor{gnat_rm/gnat_language_extensions experimental-language-extensions}@anchor{6d}@anchor{gnat_rm/gnat_language_extensions id2}@anchor{46f}
  @section Experimental Language Extensions
  
  
--- 31970,31976 ----
  types, is applied in this case.
  
  @node Experimental Language Extensions,,Curated Extensions,GNAT language extensions
! @anchor{gnat_rm/gnat_language_extensions experimental-language-extensions}@anchor{6d}@anchor{gnat_rm/gnat_language_extensions id2}@anchor{471}
  @section Experimental Language Extensions
  
  
*************** Features activated via @code{-gnatX0} or
*** 31947,31953 ****
  @end menu
  
  @node Conditional when constructs,Implicit With,,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions conditional-when-constructs}@anchor{470}
  @subsection Conditional when constructs
  
  
--- 31996,32002 ----
  @end menu
  
  @node Conditional when constructs,Implicit With,,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions conditional-when-constructs}@anchor{472}
  @subsection Conditional when constructs
  
  
*************** end;
*** 32016,32022 ****
  @end example
  
  @node Implicit With,Storage Model,Conditional when constructs,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions implicit-with}@anchor{471}
  @subsection Implicit With
  
  
--- 32065,32071 ----
  @end example
  
  @node Implicit With,Storage Model,Conditional when constructs,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions implicit-with}@anchor{473}
  @subsection Implicit With
  
  
*************** end;
*** 32033,32039 ****
  @end example
  
  @node Storage Model,Attribute Super,Implicit With,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions storage-model}@anchor{472}
  @subsection Storage Model
  
  
--- 32082,32088 ----
  @end example
  
  @node Storage Model,Attribute Super,Implicit With,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions storage-model}@anchor{474}
  @subsection Storage Model
  
  
*************** memory models, in particular to support
*** 32050,32056 ****
  @end menu
  
  @node Aspect Storage_Model_Type,Aspect Designated_Storage_Model,,Storage Model
! @anchor{gnat_rm/gnat_language_extensions aspect-storage-model-type}@anchor{473}
  @subsubsection Aspect Storage_Model_Type
  
  
--- 32099,32105 ----
  @end menu
  
  @node Aspect Storage_Model_Type,Aspect Designated_Storage_Model,,Storage Model
! @anchor{gnat_rm/gnat_language_extensions aspect-storage-model-type}@anchor{475}
  @subsubsection Aspect Storage_Model_Type
  
  
*************** end CUDA_Memory;
*** 32184,32190 ****
  @end example
  
  @node Aspect Designated_Storage_Model,Legacy Storage Pools,Aspect Storage_Model_Type,Storage Model
! @anchor{gnat_rm/gnat_language_extensions aspect-designated-storage-model}@anchor{474}
  @subsubsection Aspect Designated_Storage_Model
  
  
--- 32233,32239 ----
  @end example
  
  @node Aspect Designated_Storage_Model,Legacy Storage Pools,Aspect Storage_Model_Type,Storage Model
! @anchor{gnat_rm/gnat_language_extensions aspect-designated-storage-model}@anchor{476}
  @subsubsection Aspect Designated_Storage_Model
  
  
*************** begin
*** 32262,32268 ****
  @end example
  
  @node Legacy Storage Pools,,Aspect Designated_Storage_Model,Storage Model
! @anchor{gnat_rm/gnat_language_extensions legacy-storage-pools}@anchor{475}
  @subsubsection Legacy Storage Pools
  
  
--- 32311,32317 ----
  @end example
  
  @node Legacy Storage Pools,,Aspect Designated_Storage_Model,Storage Model
! @anchor{gnat_rm/gnat_language_extensions legacy-storage-pools}@anchor{477}
  @subsubsection Legacy Storage Pools
  
  
*************** type Acc is access Integer_Array with St
*** 32313,32319 ****
  can still be accepted as a shortcut for the new syntax.
  
  @node Attribute Super,Simpler Accessibility Model,Storage Model,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions attribute-super}@anchor{476}
  @subsection Attribute Super
  
  
--- 32362,32368 ----
  can still be accepted as a shortcut for the new syntax.
  
  @node Attribute Super,Simpler Accessibility Model,Storage Model,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions attribute-super}@anchor{478}
  @subsection Attribute Super
  
  
*************** end;
*** 32348,32354 ****
  @end example
  
  @node Simpler Accessibility Model,Case pattern matching,Attribute Super,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions simpler-accessibility-model}@anchor{477}
  @subsection Simpler Accessibility Model
  
  
--- 32397,32403 ----
  @end example
  
  @node Simpler Accessibility Model,Case pattern matching,Attribute Super,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions simpler-accessibility-model}@anchor{479}
  @subsection Simpler Accessibility Model
  
  
*************** All of the refined rules are compatible
*** 32379,32385 ****
  @end menu
  
  @node Stand-alone objects,Subprogram parameters,,Simpler Accessibility Model
! @anchor{gnat_rm/gnat_language_extensions stand-alone-objects}@anchor{478}
  @subsubsection Stand-alone objects
  
  
--- 32428,32434 ----
  @end menu
  
  @node Stand-alone objects,Subprogram parameters,,Simpler Accessibility Model
! @anchor{gnat_rm/gnat_language_extensions stand-alone-objects}@anchor{47a}
  @subsubsection Stand-alone objects
  
  
*************** of the RM 4.6 rule “The accessibility
*** 32427,32433 ****
  statically deeper than that of the target type …”.
  
  @node Subprogram parameters,Function results,Stand-alone objects,Simpler Accessibility Model
! @anchor{gnat_rm/gnat_language_extensions subprogram-parameters}@anchor{479}
  @subsubsection Subprogram parameters
  
  
--- 32476,32482 ----
  statically deeper than that of the target type …”.
  
  @node Subprogram parameters,Function results,Stand-alone objects,Simpler Accessibility Model
! @anchor{gnat_rm/gnat_language_extensions subprogram-parameters}@anchor{47b}
  @subsubsection Subprogram parameters
  
  
*************** end;
*** 32520,32526 ****
  @end example
  
  @node Function results,,Subprogram parameters,Simpler Accessibility Model
! @anchor{gnat_rm/gnat_language_extensions function-results}@anchor{47a}
  @subsubsection Function results
  
  
--- 32569,32575 ----
  @end example
  
  @node Function results,,Subprogram parameters,Simpler Accessibility Model
! @anchor{gnat_rm/gnat_language_extensions function-results}@anchor{47c}
  @subsubsection Function results
  
  
*************** end;
*** 32648,32654 ****
  @end example
  
  @node Case pattern matching,Mutably Tagged Types with Size’Class Aspect,Simpler Accessibility Model,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions case-pattern-matching}@anchor{47b}
  @subsection Case pattern matching
  
  
--- 32697,32703 ----
  @end example
  
  @node Case pattern matching,Mutably Tagged Types with Size’Class Aspect,Simpler Accessibility Model,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions case-pattern-matching}@anchor{47d}
  @subsection Case pattern matching
  
  
*************** message generated in such cases is usual
*** 32778,32784 ****
  case statement with composite selector type”.
  
  @node Mutably Tagged Types with Size’Class Aspect,No_Raise aspect,Case pattern matching,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions mutably-tagged-types-with-size-class-aspect}@anchor{47c}
  @subsection Mutably Tagged Types with Size’Class Aspect
  
  
--- 32827,32833 ----
  case statement with composite selector type”.
  
  @node Mutably Tagged Types with Size’Class Aspect,No_Raise aspect,Case pattern matching,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions mutably-tagged-types-with-size-class-aspect}@anchor{47e}
  @subsection Mutably Tagged Types with Size’Class Aspect
  
  
*************** parameter exists (that is, before leavin
*** 32949,32955 ****
  This is analogous to the RM 6.4.1(18) rule about discriminated parameters.
  
  @node No_Raise aspect,Inference of Dependent Types in Generic Instantiations,Mutably Tagged Types with Size’Class Aspect,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions id3}@anchor{47d}@anchor{gnat_rm/gnat_language_extensions no-raise-aspect}@anchor{46b}
  @subsection No_Raise aspect
  
  
--- 32998,33004 ----
  This is analogous to the RM 6.4.1(18) rule about discriminated parameters.
  
  @node No_Raise aspect,Inference of Dependent Types in Generic Instantiations,Mutably Tagged Types with Size’Class Aspect,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions id3}@anchor{47f}@anchor{gnat_rm/gnat_language_extensions no-raise-aspect}@anchor{46d}
  @subsection No_Raise aspect
  
  
*************** be raised during the execution of the su
*** 32959,32965 ****
  this execution and @code{Program_Error} is propagated to the caller.
  
  @node Inference of Dependent Types in Generic Instantiations,External_Initialization Aspect,No_Raise aspect,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions inference-of-dependent-types-in-generic-instantiations}@anchor{47e}
  @subsection Inference of Dependent Types in Generic Instantiations
  
  
--- 33008,33014 ----
  this execution and @code{Program_Error} is propagated to the caller.
  
  @node Inference of Dependent Types in Generic Instantiations,External_Initialization Aspect,No_Raise aspect,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions inference-of-dependent-types-in-generic-instantiations}@anchor{480}
  @subsection Inference of Dependent Types in Generic Instantiations
  
  
*************** package Int_Array_Operations is new Arra
*** 33036,33042 ****
  @end example
  
  @node External_Initialization Aspect,Finally construct,Inference of Dependent Types in Generic Instantiations,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions external-initialization-aspect}@anchor{47f}
  @subsection External_Initialization Aspect
  
  
--- 33085,33091 ----
  @end example
  
  @node External_Initialization Aspect,Finally construct,Inference of Dependent Types in Generic Instantiations,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions external-initialization-aspect}@anchor{481}
  @subsection External_Initialization Aspect
  
  
*************** The maximum size of loaded files is limi
*** 33077,33083 ****
  @end cartouche
  
  @node Finally construct,Continue statement,External_Initialization Aspect,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions finally-construct}@anchor{480}
  @subsection Finally construct
  
  
--- 33126,33132 ----
  @end cartouche
  
  @node Finally construct,Continue statement,External_Initialization Aspect,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions finally-construct}@anchor{482}
  @subsection Finally construct
  
  
*************** configuration that does not exist in sta
*** 33097,33103 ****
  @end menu
  
  @node Syntax<2>,Legality Rules<2>,,Finally construct
! @anchor{gnat_rm/gnat_language_extensions id4}@anchor{481}
  @subsubsection Syntax
  
  
--- 33146,33152 ----
  @end menu
  
  @node Syntax<2>,Legality Rules<2>,,Finally construct
! @anchor{gnat_rm/gnat_language_extensions id4}@anchor{483}
  @subsubsection Syntax
  
  
*************** handled_sequence_of_statements ::=
*** 33112,33118 ****
  @end example
  
  @node Legality Rules<2>,Dynamic Semantics<2>,Syntax<2>,Finally construct
! @anchor{gnat_rm/gnat_language_extensions id5}@anchor{482}
  @subsubsection Legality Rules
  
  
--- 33161,33167 ----
  @end example
  
  @node Legality Rules<2>,Dynamic Semantics<2>,Syntax<2>,Finally construct
! @anchor{gnat_rm/gnat_language_extensions id5}@anchor{484}
  @subsubsection Legality Rules
  
  
*************** to be transferred outside the finally pa
*** 33122,33128 ****
  Goto & exit where the target is outside of the finally’s @code{sequence_of_statements} are forbidden
  
  @node Dynamic Semantics<2>,,Legality Rules<2>,Finally construct
! @anchor{gnat_rm/gnat_language_extensions id6}@anchor{483}
  @subsubsection Dynamic Semantics
  
  
--- 33171,33177 ----
  Goto & exit where the target is outside of the finally’s @code{sequence_of_statements} are forbidden
  
  @node Dynamic Semantics<2>,,Legality Rules<2>,Finally construct
! @anchor{gnat_rm/gnat_language_extensions id6}@anchor{485}
  @subsubsection Dynamic Semantics
  
  
*************** execution, that is the finally block mus
*** 33137,33143 ****
  aborted, or if the control is transferred out of the block.
  
  @node Continue statement,Destructors,Finally construct,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions continue-statement}@anchor{484}
  @subsection Continue statement
  
  
--- 33186,33192 ----
  aborted, or if the control is transferred out of the block.
  
  @node Continue statement,Destructors,Finally construct,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions continue-statement}@anchor{486}
  @subsection Continue statement
  
  
*************** Note that @code{continue} is a keyword b
*** 33155,33161 ****
  configuration that does not exist in standard Ada.
  
  @node Destructors,Structural Generic Instantiation,Continue statement,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions destructors}@anchor{485}
  @subsection Destructors
  
  
--- 33204,33210 ----
  configuration that does not exist in standard Ada.
  
  @node Destructors,Structural Generic Instantiation,Continue statement,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions destructors}@anchor{487}
  @subsection Destructors
  
  
*************** When an object of type @code{T2} is fina
*** 33210,33216 ****
  @code{T2'Destructor}, and then a call to @code{T1'Destructor} on the object.
  
  @node Structural Generic Instantiation,,Destructors,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions structural-generic-instantiation}@anchor{486}
  @subsection Structural Generic Instantiation
  
  
--- 33259,33265 ----
  @code{T2'Destructor}, and then a call to @code{T1'Destructor} on the object.
  
  @node Structural Generic Instantiation,,Destructors,Experimental Language Extensions
! @anchor{gnat_rm/gnat_language_extensions structural-generic-instantiation}@anchor{488}
  @subsection Structural Generic Instantiation
  
  
*************** where a name is accepted by the language
*** 33236,33242 ****
  @end menu
  
  @node Syntax<3>,Legality Rules<3>,,Structural Generic Instantiation
! @anchor{gnat_rm/gnat_language_extensions id7}@anchor{487}
  @subsubsection Syntax
  
  
--- 33285,33291 ----
  @end menu
  
  @node Syntax<3>,Legality Rules<3>,,Structural Generic Instantiation
! @anchor{gnat_rm/gnat_language_extensions id7}@anchor{489}
  @subsubsection Syntax
  
  
*************** structural_generic_instance_name ::= nam
*** 33248,33254 ****
  @end example
  
  @node Legality Rules<3>,Static Semantics,Syntax<3>,Structural Generic Instantiation
! @anchor{gnat_rm/gnat_language_extensions id8}@anchor{488}
  @subsubsection Legality Rules
  
  
--- 33297,33303 ----
  @end example
  
  @node Legality Rules<3>,Static Semantics,Syntax<3>,Structural Generic Instantiation
! @anchor{gnat_rm/gnat_language_extensions id8}@anchor{48a}
  @subsubsection Legality Rules
  
  
*************** generic subprogram may be present in a s
*** 33274,33280 ****
  whole-partition optimization is performed (e.g., via LTO).
  
  @node Static Semantics,,Legality Rules<3>,Structural Generic Instantiation
! @anchor{gnat_rm/gnat_language_extensions static-semantics}@anchor{489}
  @subsubsection Static Semantics
  
  
--- 33323,33329 ----
  whole-partition optimization is performed (e.g., via LTO).
  
  @node Static Semantics,,Legality Rules<3>,Structural Generic Instantiation
! @anchor{gnat_rm/gnat_language_extensions static-semantics}@anchor{48b}
  @subsubsection Static Semantics
  
  
*************** end;
*** 33418,33424 ****
  @end example
  
  @node Security Hardening Features,Obsolescent Features,GNAT language extensions,Top
! @anchor{gnat_rm/security_hardening_features doc}@anchor{48a}@anchor{gnat_rm/security_hardening_features id1}@anchor{48b}@anchor{gnat_rm/security_hardening_features security-hardening-features}@anchor{16}
  @chapter Security Hardening Features
  
  
--- 33467,33473 ----
  @end example
  
  @node Security Hardening Features,Obsolescent Features,GNAT language extensions,Top
! @anchor{gnat_rm/security_hardening_features doc}@anchor{48c}@anchor{gnat_rm/security_hardening_features id1}@anchor{48d}@anchor{gnat_rm/security_hardening_features security-hardening-features}@anchor{16}
  @chapter Security Hardening Features
  
  
*************** These features are supported only by the
*** 33442,33448 ****
  @end menu
  
  @node Register Scrubbing,Stack Scrubbing,,Security Hardening Features
! @anchor{gnat_rm/security_hardening_features register-scrubbing}@anchor{48c}
  @section Register Scrubbing
  
  
--- 33491,33497 ----
  @end menu
  
  @node Register Scrubbing,Stack Scrubbing,,Security Hardening Features
! @anchor{gnat_rm/security_hardening_features register-scrubbing}@anchor{48e}
  @section Register Scrubbing
  
  
*************** programming languages, see @cite{Using t
*** 33478,33484 ****
  @c Stack Scrubbing:
  
  @node Stack Scrubbing,Hardened Conditionals,Register Scrubbing,Security Hardening Features
! @anchor{gnat_rm/security_hardening_features stack-scrubbing}@anchor{48d}
  @section Stack Scrubbing
  
  
--- 33527,33533 ----
  @c Stack Scrubbing:
  
  @node Stack Scrubbing,Hardened Conditionals,Register Scrubbing,Security Hardening Features
! @anchor{gnat_rm/security_hardening_features stack-scrubbing}@anchor{48f}
  @section Stack Scrubbing
  
  
*************** Bar_Callable_Ptr.
*** 33622,33628 ****
  @c Hardened Conditionals:
  
  @node Hardened Conditionals,Hardened Booleans,Stack Scrubbing,Security Hardening Features
! @anchor{gnat_rm/security_hardening_features hardened-conditionals}@anchor{48e}
  @section Hardened Conditionals
  
  
--- 33671,33677 ----
  @c Hardened Conditionals:
  
  @node Hardened Conditionals,Hardened Booleans,Stack Scrubbing,Security Hardening Features
! @anchor{gnat_rm/security_hardening_features hardened-conditionals}@anchor{490}
  @section Hardened Conditionals
  
  
*************** be used with other programming languages
*** 33712,33718 ****
  @c Hardened Booleans:
  
  @node Hardened Booleans,Control Flow Redundancy,Hardened Conditionals,Security Hardening Features
! @anchor{gnat_rm/security_hardening_features hardened-booleans}@anchor{48f}
  @section Hardened Booleans
  
  
--- 33761,33767 ----
  @c Hardened Booleans:
  
  @node Hardened Booleans,Control Flow Redundancy,Hardened Conditionals,Security Hardening Features
! @anchor{gnat_rm/security_hardening_features hardened-booleans}@anchor{491}
  @section Hardened Booleans
  
  
*************** and more details on that attribute, see
*** 33773,33779 ****
  @c Control Flow Redundancy:
  
  @node Control Flow Redundancy,,Hardened Booleans,Security Hardening Features
! @anchor{gnat_rm/security_hardening_features control-flow-redundancy}@anchor{490}
  @section Control Flow Redundancy
  
  
--- 33822,33828 ----
  @c Control Flow Redundancy:
  
  @node Control Flow Redundancy,,Hardened Booleans,Security Hardening Features
! @anchor{gnat_rm/security_hardening_features control-flow-redundancy}@anchor{492}
  @section Control Flow Redundancy
  
  
*************** see @cite{Using the GNU Compiler Collect
*** 33941,33947 ****
  can be used with other programming languages supported by GCC.
  
  @node Obsolescent Features,Compatibility and Porting Guide,Security Hardening Features,Top
! @anchor{gnat_rm/obsolescent_features doc}@anchor{491}@anchor{gnat_rm/obsolescent_features id1}@anchor{492}@anchor{gnat_rm/obsolescent_features obsolescent-features}@anchor{17}
  @chapter Obsolescent Features
  
  
--- 33990,33996 ----
  can be used with other programming languages supported by GCC.
  
  @node Obsolescent Features,Compatibility and Porting Guide,Security Hardening Features,Top
! @anchor{gnat_rm/obsolescent_features doc}@anchor{493}@anchor{gnat_rm/obsolescent_features id1}@anchor{494}@anchor{gnat_rm/obsolescent_features obsolescent-features}@anchor{17}
  @chapter Obsolescent Features
  
  
*************** historical compatibility purposes.
*** 33961,33967 ****
  @end menu
  
  @node PolyORB,pragma No_Run_Time,,Obsolescent Features
! @anchor{gnat_rm/obsolescent_features id2}@anchor{493}@anchor{gnat_rm/obsolescent_features polyorb}@anchor{274}
  @section PolyORB
  
  
--- 34010,34016 ----
  @end menu
  
  @node PolyORB,pragma No_Run_Time,,Obsolescent Features
! @anchor{gnat_rm/obsolescent_features id2}@anchor{495}@anchor{gnat_rm/obsolescent_features polyorb}@anchor{276}
  @section PolyORB
  
  
*************** release 28. After this release, there wi
*** 33970,33976 ****
  product. Contact AdaCore support to get recommendations for replacements.
  
  @node pragma No_Run_Time,pragma Ravenscar,PolyORB,Obsolescent Features
! @anchor{gnat_rm/obsolescent_features id3}@anchor{494}@anchor{gnat_rm/obsolescent_features pragma-no-run-time}@anchor{495}
  @section pragma No_Run_Time
  
  
--- 34019,34025 ----
  product. Contact AdaCore support to get recommendations for replacements.
  
  @node pragma No_Run_Time,pragma Ravenscar,PolyORB,Obsolescent Features
! @anchor{gnat_rm/obsolescent_features id3}@anchor{496}@anchor{gnat_rm/obsolescent_features pragma-no-run-time}@anchor{497}
  @section pragma No_Run_Time
  
  
*************** preferred usage is to use an appropriate
*** 33983,33989 ****
  includes just those features that are to be made accessible.
  
  @node pragma Ravenscar,pragma Restricted_Run_Time,pragma No_Run_Time,Obsolescent Features
! @anchor{gnat_rm/obsolescent_features id4}@anchor{496}@anchor{gnat_rm/obsolescent_features pragma-ravenscar}@anchor{497}
  @section pragma Ravenscar
  
  
--- 34032,34038 ----
  includes just those features that are to be made accessible.
  
  @node pragma Ravenscar,pragma Restricted_Run_Time,pragma No_Run_Time,Obsolescent Features
! @anchor{gnat_rm/obsolescent_features id4}@anchor{498}@anchor{gnat_rm/obsolescent_features pragma-ravenscar}@anchor{499}
  @section pragma Ravenscar
  
  
*************** The pragma @code{Ravenscar} has exactly
*** 33992,33998 ****
  is part of the new Ada 2005 standard.
  
  @node pragma Restricted_Run_Time,pragma Task_Info,pragma Ravenscar,Obsolescent Features
! @anchor{gnat_rm/obsolescent_features id5}@anchor{498}@anchor{gnat_rm/obsolescent_features pragma-restricted-run-time}@anchor{499}
  @section pragma Restricted_Run_Time
  
  
--- 34041,34047 ----
  is part of the new Ada 2005 standard.
  
  @node pragma Restricted_Run_Time,pragma Task_Info,pragma Ravenscar,Obsolescent Features
! @anchor{gnat_rm/obsolescent_features id5}@anchor{49a}@anchor{gnat_rm/obsolescent_features pragma-restricted-run-time}@anchor{49b}
  @section pragma Restricted_Run_Time
  
  
*************** preferred since the Ada 2005 pragma @cod
*** 34002,34008 ****
  this kind of implementation dependent addition.
  
  @node pragma Task_Info,package System Task_Info s-tasinf ads,pragma Restricted_Run_Time,Obsolescent Features
! @anchor{gnat_rm/obsolescent_features id6}@anchor{49a}@anchor{gnat_rm/obsolescent_features pragma-task-info}@anchor{49b}
  @section pragma Task_Info
  
  
--- 34051,34057 ----
  this kind of implementation dependent addition.
  
  @node pragma Task_Info,package System Task_Info s-tasinf ads,pragma Restricted_Run_Time,Obsolescent Features
! @anchor{gnat_rm/obsolescent_features id6}@anchor{49c}@anchor{gnat_rm/obsolescent_features pragma-task-info}@anchor{49d}
  @section pragma Task_Info
  
  
*************** in the spec of package System.Task_Info
*** 34028,34034 ****
  library.
  
  @node package System Task_Info s-tasinf ads,,pragma Task_Info,Obsolescent Features
! @anchor{gnat_rm/obsolescent_features package-system-task-info}@anchor{49c}@anchor{gnat_rm/obsolescent_features package-system-task-info-s-tasinf-ads}@anchor{49d}
  @section package System.Task_Info (@code{s-tasinf.ads})
  
  
--- 34077,34083 ----
  library.
  
  @node package System Task_Info s-tasinf ads,,pragma Task_Info,Obsolescent Features
! @anchor{gnat_rm/obsolescent_features package-system-task-info}@anchor{49e}@anchor{gnat_rm/obsolescent_features package-system-task-info-s-tasinf-ads}@anchor{49f}
  @section package System.Task_Info (@code{s-tasinf.ads})
  
  
*************** to support the @code{Task_Info} pragma.
*** 34038,34044 ****
  standard replacement for GNAT’s @code{Task_Info} functionality.
  
  @node Compatibility and Porting Guide,GNU Free Documentation License,Obsolescent Features,Top
! @anchor{gnat_rm/compatibility_and_porting_guide doc}@anchor{49e}@anchor{gnat_rm/compatibility_and_porting_guide compatibility-and-porting-guide}@anchor{18}@anchor{gnat_rm/compatibility_and_porting_guide id1}@anchor{49f}
  @chapter Compatibility and Porting Guide
  
  
--- 34087,34093 ----
  standard replacement for GNAT’s @code{Task_Info} functionality.
  
  @node Compatibility and Porting Guide,GNU Free Documentation License,Obsolescent Features,Top
! @anchor{gnat_rm/compatibility_and_porting_guide doc}@anchor{4a0}@anchor{gnat_rm/compatibility_and_porting_guide compatibility-and-porting-guide}@anchor{18}@anchor{gnat_rm/compatibility_and_porting_guide id1}@anchor{4a1}
  @chapter Compatibility and Porting Guide
  
  
*************** applications developed in other Ada envi
*** 34060,34066 ****
  @end menu
  
  @node Writing Portable Fixed-Point Declarations,Compatibility with Ada 83,,Compatibility and Porting Guide
! @anchor{gnat_rm/compatibility_and_porting_guide id2}@anchor{4a0}@anchor{gnat_rm/compatibility_and_porting_guide writing-portable-fixed-point-declarations}@anchor{4a1}
  @section Writing Portable Fixed-Point Declarations
  
  
--- 34109,34115 ----
  @end menu
  
  @node Writing Portable Fixed-Point Declarations,Compatibility with Ada 83,,Compatibility and Porting Guide
! @anchor{gnat_rm/compatibility_and_porting_guide id2}@anchor{4a2}@anchor{gnat_rm/compatibility_and_porting_guide writing-portable-fixed-point-declarations}@anchor{4a3}
  @section Writing Portable Fixed-Point Declarations
  
  
*************** If you follow this scheme you will be gu
*** 34182,34188 ****
  types will be portable.
  
  @node Compatibility with Ada 83,Compatibility between Ada 95 and Ada 2005,Writing Portable Fixed-Point Declarations,Compatibility and Porting Guide
! @anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-ada-83}@anchor{4a2}@anchor{gnat_rm/compatibility_and_porting_guide id3}@anchor{4a3}
  @section Compatibility with Ada 83
  
  
--- 34231,34237 ----
  types will be portable.
  
  @node Compatibility with Ada 83,Compatibility between Ada 95 and Ada 2005,Writing Portable Fixed-Point Declarations,Compatibility and Porting Guide
! @anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-ada-83}@anchor{4a4}@anchor{gnat_rm/compatibility_and_porting_guide id3}@anchor{4a5}
  @section Compatibility with Ada 83
  
  
*************** following subsections treat the most lik
*** 34210,34216 ****
  @end menu
  
  @node Legal Ada 83 programs that are illegal in Ada 95,More deterministic semantics,,Compatibility with Ada 83
! @anchor{gnat_rm/compatibility_and_porting_guide id4}@anchor{4a4}@anchor{gnat_rm/compatibility_and_porting_guide legal-ada-83-programs-that-are-illegal-in-ada-95}@anchor{4a5}
  @subsection Legal Ada 83 programs that are illegal in Ada 95
  
  
--- 34259,34265 ----
  @end menu
  
  @node Legal Ada 83 programs that are illegal in Ada 95,More deterministic semantics,,Compatibility with Ada 83
! @anchor{gnat_rm/compatibility_and_porting_guide id4}@anchor{4a6}@anchor{gnat_rm/compatibility_and_porting_guide legal-ada-83-programs-that-are-illegal-in-ada-95}@anchor{4a7}
  @subsection Legal Ada 83 programs that are illegal in Ada 95
  
  
*************** the fix is usually simply to add the @co
*** 34310,34316 ****
  @end itemize
  
  @node More deterministic semantics,Changed semantics,Legal Ada 83 programs that are illegal in Ada 95,Compatibility with Ada 83
! @anchor{gnat_rm/compatibility_and_porting_guide id5}@anchor{4a6}@anchor{gnat_rm/compatibility_and_porting_guide more-deterministic-semantics}@anchor{4a7}
  @subsection More deterministic semantics
  
  
--- 34359,34365 ----
  @end itemize
  
  @node More deterministic semantics,Changed semantics,Legal Ada 83 programs that are illegal in Ada 95,Compatibility with Ada 83
! @anchor{gnat_rm/compatibility_and_porting_guide id5}@anchor{4a8}@anchor{gnat_rm/compatibility_and_porting_guide more-deterministic-semantics}@anchor{4a9}
  @subsection More deterministic semantics
  
  
*************** which open select branches are executed.
*** 34338,34344 ****
  @end itemize
  
  @node Changed semantics,Other language compatibility issues,More deterministic semantics,Compatibility with Ada 83
! @anchor{gnat_rm/compatibility_and_porting_guide changed-semantics}@anchor{4a8}@anchor{gnat_rm/compatibility_and_porting_guide id6}@anchor{4a9}
  @subsection Changed semantics
  
  
--- 34387,34393 ----
  @end itemize
  
  @node Changed semantics,Other language compatibility issues,More deterministic semantics,Compatibility with Ada 83
! @anchor{gnat_rm/compatibility_and_porting_guide changed-semantics}@anchor{4aa}@anchor{gnat_rm/compatibility_and_porting_guide id6}@anchor{4ab}
  @subsection Changed semantics
  
  
*************** covers only the restricted range.
*** 34380,34386 ****
  @end itemize
  
  @node Other language compatibility issues,,Changed semantics,Compatibility with Ada 83
! @anchor{gnat_rm/compatibility_and_porting_guide id7}@anchor{4aa}@anchor{gnat_rm/compatibility_and_porting_guide other-language-compatibility-issues}@anchor{4ab}
  @subsection Other language compatibility issues
  
  
--- 34429,34435 ----
  @end itemize
  
  @node Other language compatibility issues,,Changed semantics,Compatibility with Ada 83
! @anchor{gnat_rm/compatibility_and_porting_guide id7}@anchor{4ac}@anchor{gnat_rm/compatibility_and_porting_guide other-language-compatibility-issues}@anchor{4ad}
  @subsection Other language compatibility issues
  
  
*************** include @code{pragma Interface} and the
*** 34413,34419 ****
  @end itemize
  
  @node Compatibility between Ada 95 and Ada 2005,Implementation-dependent characteristics,Compatibility with Ada 83,Compatibility and Porting Guide
! @anchor{gnat_rm/compatibility_and_porting_guide compatibility-between-ada-95-and-ada-2005}@anchor{4ac}@anchor{gnat_rm/compatibility_and_porting_guide id8}@anchor{4ad}
  @section Compatibility between Ada 95 and Ada 2005
  
  
--- 34462,34468 ----
  @end itemize
  
  @node Compatibility between Ada 95 and Ada 2005,Implementation-dependent characteristics,Compatibility with Ada 83,Compatibility and Porting Guide
! @anchor{gnat_rm/compatibility_and_porting_guide compatibility-between-ada-95-and-ada-2005}@anchor{4ae}@anchor{gnat_rm/compatibility_and_porting_guide id8}@anchor{4af}
  @section Compatibility between Ada 95 and Ada 2005
  
  
*************** can declare a function returning a value
*** 34485,34491 ****
  @end itemize
  
  @node Implementation-dependent characteristics,Compatibility with Other Ada Systems,Compatibility between Ada 95 and Ada 2005,Compatibility and Porting Guide
! @anchor{gnat_rm/compatibility_and_porting_guide id9}@anchor{4ae}@anchor{gnat_rm/compatibility_and_porting_guide implementation-dependent-characteristics}@anchor{4af}
  @section Implementation-dependent characteristics
  
  
--- 34534,34540 ----
  @end itemize
  
  @node Implementation-dependent characteristics,Compatibility with Other Ada Systems,Compatibility between Ada 95 and Ada 2005,Compatibility and Porting Guide
! @anchor{gnat_rm/compatibility_and_porting_guide id9}@anchor{4b0}@anchor{gnat_rm/compatibility_and_porting_guide implementation-dependent-characteristics}@anchor{4b1}
  @section Implementation-dependent characteristics
  
  
*************** transition from certain Ada 83 compilers
*** 34508,34514 ****
  @end menu
  
  @node Implementation-defined pragmas,Implementation-defined attributes,,Implementation-dependent characteristics
! @anchor{gnat_rm/compatibility_and_porting_guide id10}@anchor{4b0}@anchor{gnat_rm/compatibility_and_porting_guide implementation-defined-pragmas}@anchor{4b1}
  @subsection Implementation-defined pragmas
  
  
--- 34557,34563 ----
  @end menu
  
  @node Implementation-defined pragmas,Implementation-defined attributes,,Implementation-dependent characteristics
! @anchor{gnat_rm/compatibility_and_porting_guide id10}@anchor{4b2}@anchor{gnat_rm/compatibility_and_porting_guide implementation-defined-pragmas}@anchor{4b3}
  @subsection Implementation-defined pragmas
  
  
*************** avoiding compiler rejection of units tha
*** 34530,34536 ****
  relevant in a GNAT context and hence are not otherwise implemented.
  
  @node Implementation-defined attributes,Libraries,Implementation-defined pragmas,Implementation-dependent characteristics
! @anchor{gnat_rm/compatibility_and_porting_guide id11}@anchor{4b2}@anchor{gnat_rm/compatibility_and_porting_guide implementation-defined-attributes}@anchor{4b3}
  @subsection Implementation-defined attributes
  
  
--- 34579,34585 ----
  relevant in a GNAT context and hence are not otherwise implemented.
  
  @node Implementation-defined attributes,Libraries,Implementation-defined pragmas,Implementation-dependent characteristics
! @anchor{gnat_rm/compatibility_and_porting_guide id11}@anchor{4b4}@anchor{gnat_rm/compatibility_and_porting_guide implementation-defined-attributes}@anchor{4b5}
  @subsection Implementation-defined attributes
  
  
*************** Ada 83, GNAT supplies the attributes @co
*** 34544,34550 ****
  @code{Type_Class}.
  
  @node Libraries,Elaboration order,Implementation-defined attributes,Implementation-dependent characteristics
! @anchor{gnat_rm/compatibility_and_porting_guide id12}@anchor{4b4}@anchor{gnat_rm/compatibility_and_porting_guide libraries}@anchor{4b5}
  @subsection Libraries
  
  
--- 34593,34599 ----
  @code{Type_Class}.
  
  @node Libraries,Elaboration order,Implementation-defined attributes,Implementation-dependent characteristics
! @anchor{gnat_rm/compatibility_and_porting_guide id12}@anchor{4b6}@anchor{gnat_rm/compatibility_and_porting_guide libraries}@anchor{4b7}
  @subsection Libraries
  
  
*************** be preferable to retrofit the applicatio
*** 34573,34579 ****
  @end itemize
  
  @node Elaboration order,Target-specific aspects,Libraries,Implementation-dependent characteristics
! @anchor{gnat_rm/compatibility_and_porting_guide elaboration-order}@anchor{4b6}@anchor{gnat_rm/compatibility_and_porting_guide id13}@anchor{4b7}
  @subsection Elaboration order
  
  
--- 34622,34628 ----
  @end itemize
  
  @node Elaboration order,Target-specific aspects,Libraries,Implementation-dependent characteristics
! @anchor{gnat_rm/compatibility_and_porting_guide elaboration-order}@anchor{4b8}@anchor{gnat_rm/compatibility_and_porting_guide id13}@anchor{4b9}
  @subsection Elaboration order
  
  
*************** pragmas either globally (as an effect of
*** 34609,34615 ****
  @end itemize
  
  @node Target-specific aspects,,Elaboration order,Implementation-dependent characteristics
! @anchor{gnat_rm/compatibility_and_porting_guide id14}@anchor{4b8}@anchor{gnat_rm/compatibility_and_porting_guide target-specific-aspects}@anchor{4b9}
  @subsection Target-specific aspects
  
  
--- 34658,34664 ----
  @end itemize
  
  @node Target-specific aspects,,Elaboration order,Implementation-dependent characteristics
! @anchor{gnat_rm/compatibility_and_porting_guide id14}@anchor{4ba}@anchor{gnat_rm/compatibility_and_porting_guide target-specific-aspects}@anchor{4bb}
  @subsection Target-specific aspects
  
  
*************** on the robustness of the original design
*** 34622,34631 ****
  Ada 2005, Ada 2012, and Ada 2022) are sometimes
  incompatible with typical Ada 83 compiler practices regarding implicit
  packing, the meaning of the Size attribute, and the size of access values.
! GNAT’s approach to these issues is described in @ref{4ba,,Representation Clauses}.
  
  @node Compatibility with Other Ada Systems,Representation Clauses,Implementation-dependent characteristics,Compatibility and Porting Guide
! @anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-other-ada-systems}@anchor{4bb}@anchor{gnat_rm/compatibility_and_porting_guide id15}@anchor{4bc}
  @section Compatibility with Other Ada Systems
  
  
--- 34671,34680 ----
  Ada 2005, Ada 2012, and Ada 2022) are sometimes
  incompatible with typical Ada 83 compiler practices regarding implicit
  packing, the meaning of the Size attribute, and the size of access values.
! GNAT’s approach to these issues is described in @ref{4bc,,Representation Clauses}.
  
  @node Compatibility with Other Ada Systems,Representation Clauses,Implementation-dependent characteristics,Compatibility and Porting Guide
! @anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-other-ada-systems}@anchor{4bd}@anchor{gnat_rm/compatibility_and_porting_guide id15}@anchor{4be}
  @section Compatibility with Other Ada Systems
  
  
*************** far beyond this minimal set, as describe
*** 34668,34674 ****
  @end itemize
  
  @node Representation Clauses,Compatibility with HP Ada 83,Compatibility with Other Ada Systems,Compatibility and Porting Guide
! @anchor{gnat_rm/compatibility_and_porting_guide id16}@anchor{4bd}@anchor{gnat_rm/compatibility_and_porting_guide representation-clauses}@anchor{4ba}
  @section Representation Clauses
  
  
--- 34717,34723 ----
  @end itemize
  
  @node Representation Clauses,Compatibility with HP Ada 83,Compatibility with Other Ada Systems,Compatibility and Porting Guide
! @anchor{gnat_rm/compatibility_and_porting_guide id16}@anchor{4bf}@anchor{gnat_rm/compatibility_and_porting_guide representation-clauses}@anchor{4bc}
  @section Representation Clauses
  
  
*************** with thin pointers.
*** 34761,34767 ****
  @end itemize
  
  @node Compatibility with HP Ada 83,,Representation Clauses,Compatibility and Porting Guide
! @anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-hp-ada-83}@anchor{4be}@anchor{gnat_rm/compatibility_and_porting_guide id17}@anchor{4bf}
  @section Compatibility with HP Ada 83
  
  
--- 34810,34816 ----
  @end itemize
  
  @node Compatibility with HP Ada 83,,Representation Clauses,Compatibility and Porting Guide
! @anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-hp-ada-83}@anchor{4c0}@anchor{gnat_rm/compatibility_and_porting_guide id17}@anchor{4c1}
  @section Compatibility with HP Ada 83
  
  
*************** extension of package System.
*** 34791,34797 ****
  @end itemize
  
  @node GNU Free Documentation License,Index,Compatibility and Porting Guide,Top
! @anchor{share/gnu_free_documentation_license doc}@anchor{4c0}@anchor{share/gnu_free_documentation_license gnu-fdl}@anchor{1}@anchor{share/gnu_free_documentation_license gnu-free-documentation-license}@anchor{4c1}
  @chapter GNU Free Documentation License
  
  
--- 34840,34846 ----
  @end itemize
  
  @node GNU Free Documentation License,Index,Compatibility and Porting Guide,Top
! @anchor{share/gnu_free_documentation_license doc}@anchor{4c2}@anchor{share/gnu_free_documentation_license gnu-fdl}@anchor{1}@anchor{share/gnu_free_documentation_license gnu-free-documentation-license}@anchor{4c3}
  @chapter GNU Free Documentation License
  
  
diff -Nrcpad gcc-17-20260614/gcc/ada/inline.adb gcc-17-20260621/gcc/ada/inline.adb
*** gcc-17-20260614/gcc/ada/inline.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/inline.adb	Sun Jun 21 22:32:05 2026
*************** package body Inline is
*** 310,315 ****
--- 310,316 ----
     --    Depends
     --    Exceptional_Cases
     --    Exit_Cases
+    --    Modifies
     --    Postcondition
     --    Precondition
     --    Program_Exit
*************** package body Inline is
*** 5209,5214 ****
--- 5210,5216 ----
                                          | Name_Depends
                                          | Name_Exceptional_Cases
                                          | Name_Exit_Cases
+                                         | Name_Modifies
                                          | Name_Postcondition
                                          | Name_Precondition
                                          | Name_Program_Exit
diff -Nrcpad gcc-17-20260614/gcc/ada/lib-load.adb gcc-17-20260621/gcc/ada/lib-load.adb
*** gcc-17-20260614/gcc/ada/lib-load.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/lib-load.adb	Sun Jun 21 22:32:05 2026
*************** with Atree;          use Atree;
*** 27,32 ****
--- 27,33 ----
  with Debug;          use Debug;
  with Einfo;          use Einfo;
  with Einfo.Entities; use Einfo.Entities;
+ with Einfo.Utils;    use Einfo.Utils;
  with Errout;         use Errout;
  with Fname;          use Fname;
  with Fname.UF;       use Fname.UF;
diff -Nrcpad gcc-17-20260614/gcc/ada/lib.adb gcc-17-20260621/gcc/ada/lib.adb
*** gcc-17-20260614/gcc/ada/lib.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/lib.adb	Sun Jun 21 22:32:05 2026
*************** pragma Style_Checks (All_Checks);
*** 30,35 ****
--- 30,36 ----
  with Atree;          use Atree;
  with Csets;          use Csets;
  with Einfo.Entities; use Einfo.Entities;
+ with Einfo.Utils;    use Einfo.Utils;
  with Nlists;         use Nlists;
  with Opt;            use Opt;
  with Output;         use Output;
diff -Nrcpad gcc-17-20260614/gcc/ada/libgnat/a-cbinho.adb gcc-17-20260621/gcc/ada/libgnat/a-cbinho.adb
*** gcc-17-20260614/gcc/ada/libgnat/a-cbinho.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/libgnat/a-cbinho.adb	Sun Jun 21 22:32:05 2026
*************** package body Ada.Containers.Bounded_Inde
*** 75,87 ****
  
     procedure Clear (Container : in out Holder) is
     begin
!       if Is_Empty (Container) then
!          return; -- nothing to do
!       end if;
!       if Container.Busy /= 0 then
!          raise Program_Error with "attempt to tamper with elements";
        end if;
!       Free (Container.Element); -- finalize element
        Ada.Unchecked_Deallocate_Subpool (Container.Handle);
     end Clear;
  
--- 75,87 ----
  
     procedure Clear (Container : in out Holder) is
     begin
!       if not Is_Empty (Container) then
!          if Container.Busy /= 0 then
!             raise Program_Error with "attempt to tamper with elements";
!          end if;
!          Free (Container.Element); -- finalize element
        end if;
!       --  Unconditionally deallocate the subpool for Finalize, see below
        Ada.Unchecked_Deallocate_Subpool (Container.Handle);
     end Clear;
  
diff -Nrcpad gcc-17-20260614/gcc/ada/libgnat/a-suenco.adb gcc-17-20260621/gcc/ada/libgnat/a-suenco.adb
*** gcc-17-20260614/gcc/ada/libgnat/a-suenco.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/libgnat/a-suenco.adb	Sun Jun 21 22:32:05 2026
*************** package body Ada.Strings.UTF_Encoding.Co
*** 51,57 ****
  
        --  For remaining cases, one or other of the operands is UTF-16BE/LE
        --  encoded, or we have the UTF-8 to UTF-8 case where we must handle
!       --  overlong encodings. In all cases,  go through UTF-16 intermediate.
  
        else
           return Convert (UTF_16_Wide_String'(Convert (Item, Input_Scheme)),
--- 51,57 ----
  
        --  For remaining cases, one or other of the operands is UTF-16BE/LE
        --  encoded, or we have the UTF-8 to UTF-8 case where we must handle
!       --  overlong encodings. In all cases, go through UTF-16 intermediate.
  
        else
           return Convert (UTF_16_Wide_String'(Convert (Item, Input_Scheme)),
diff -Nrcpad gcc-17-20260614/gcc/ada/libgnat/g-traceb.adb gcc-17-20260621/gcc/ada/libgnat/g-traceb.adb
*** gcc-17-20260614/gcc/ada/libgnat/g-traceb.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/libgnat/g-traceb.adb	Sun Jun 21 22:32:05 2026
***************
*** 31,36 ****
--- 31,39 ----
  
  --  Run-time non-symbolic traceback support
  
+ --  As for System.Traceback, inlining and sibling call optimizations
+ --  must be prevented within this unit.
+ 
  with System.Traceback;
  
  package body GNAT.Traceback is
*************** package body GNAT.Traceback is
*** 44,50 ****
        Len       : out Natural)
     is
     begin
!       System.Traceback.Call_Chain (Traceback, Traceback'Length, Len);
     end Call_Chain;
  
     function Call_Chain
--- 47,55 ----
        Len       : out Natural)
     is
     begin
!       --  Request skipping this frame + that of our callee
!       System.Traceback.Call_Chain
!         (Traceback, Traceback'Length, Len, Skip_Frames => 2);
     end Call_Chain;
  
     function Call_Chain
diff -Nrcpad gcc-17-20260614/gcc/ada/libgnat/g-traceb.ads gcc-17-20260621/gcc/ada/libgnat/g-traceb.ads
*** gcc-17-20260614/gcc/ada/libgnat/g-traceb.ads	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/libgnat/g-traceb.ads	Sun Jun 21 22:32:05 2026
*************** package GNAT.Traceback is
*** 90,100 ****
  
     procedure Call_Chain (Traceback : out Tracebacks_Array; Len : out Natural);
     --  Store up to Traceback'Length tracebacks corresponding to the current
!    --  call chain. The first entry stored corresponds to the deepest level
!    --  of subprogram calls. Len shows the number of traceback entries stored.
!    --  It will be equal to Traceback'Length unless the entire traceback is
!    --  shorter, in which case positions in Traceback past the Len position
!    --  are undefined on return.
  
     function Call_Chain
       (Max_Len     : Positive;
--- 90,99 ----
  
     procedure Call_Chain (Traceback : out Tracebacks_Array; Len : out Natural);
     --  Store up to Traceback'Length tracebacks corresponding to the current
!    --  call chain. The first entry is for the caller of this subprogram and
!    --  Len conveys the number of entries stored. Len will be Traceback'Length
!    --  unless the entire traceback is shorter. Positions in Traceback beyond
!    --  Len are undefined on return.
  
     function Call_Chain
       (Max_Len     : Positive;
diff -Nrcpad gcc-17-20260614/gcc/ada/libgnat/libgnat.gpr gcc-17-20260621/gcc/ada/libgnat/libgnat.gpr
*** gcc-17-20260614/gcc/ada/libgnat/libgnat.gpr	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/libgnat/libgnat.gpr	Sun Jun 21 22:32:05 2026
*************** library project Libgnat is
*** 26,37 ****
        for Switches ("C") use Libgnat_Common.C_Flags;
        for Switches ("Ada") use Libgnat_Common.Ada_Flags;
  
!       for Switches ("s-traceb.adb") use
          Libgnat_Common.Ada_Flags & Libgnat_Common.Force_Debug &
          Libgnat_Common.No_Inline & Libgnat_Common.No_Sibling;
!       --  Force no sibling call optimization on s-traceb.o so the number of
!       --  stack frames to be skipped when computing a call chain is not
!       --  modified by optimization. We don.t want inlining, either.
  
        for Switches ("a-except.adb") use
          Libgnat_Common.Ada_Flags & ("-O1") &
--- 26,37 ----
        for Switches ("C") use Libgnat_Common.C_Flags;
        for Switches ("Ada") use Libgnat_Common.Ada_Flags;
  
!       for Switches ("?-traceb.adb") use
          Libgnat_Common.Ada_Flags & Libgnat_Common.Force_Debug &
          Libgnat_Common.No_Inline & Libgnat_Common.No_Sibling;
!       --  Prevent inlining and sibling call optimization on s-traceb.o and
!       --  g-traceb.o so the number of stack frames to be skipped when computing
!       --  a call chain is not modified by optimization.
  
        for Switches ("a-except.adb") use
          Libgnat_Common.Ada_Flags & ("-O1") &
diff -Nrcpad gcc-17-20260614/gcc/ada/libgnat/s-traceb.adb gcc-17-20260621/gcc/ada/libgnat/s-traceb.adb
*** gcc-17-20260614/gcc/ada/libgnat/s-traceb.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/libgnat/s-traceb.adb	Sun Jun 21 22:32:05 2026
***************
*** 31,38 ****
  
  --  This is the default version of this package
  
! --  Note: this unit must be compiled using -fno-optimize-sibling-calls.
! --  See comment below in body of Call_Chain for details on the reason.
  
  package body System.Traceback is
  
--- 31,40 ----
  
  --  This is the default version of this package
  
! --  Note: To preserve the correctness of "Skip_Frames" processing,
! --  subprogram calls here must materialize as subprogram calls (and
! --  frames) at the machine level, so inlining and sibling call
! --  optimizations must be prevented for this unit.
  
  package body System.Traceback is
  
diff -Nrcpad gcc-17-20260614/gcc/ada/opt.adb gcc-17-20260621/gcc/ada/opt.adb
*** gcc-17-20260614/gcc/ada/opt.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/opt.adb	Sun Jun 21 22:32:05 2026
*************** package body Opt is
*** 112,124 ****
        Uneval_Old                     := Save.Uneval_Old;
        Use_VADS_Size                  := Save.Use_VADS_Size;
        Warnings_As_Errors_Count       := Save.Warnings_As_Errors_Count;
- 
-       --  Update consistently the value of Init_Or_Norm_Scalars. The value of
-       --  Normalize_Scalars is not saved/restored because after set to True its
-       --  value is never changed. That is, if a compilation unit has pragma
-       --  Normalize_Scalars then it forces that value for all with'ed units.
- 
-       Init_Or_Norm_Scalars := Initialize_Scalars or Normalize_Scalars;
     end Restore_Config_Switches;
  
     --------------------------
--- 112,117 ----
*************** package body Opt is
*** 144,150 ****
           Fast_Math                      => Fast_Math,
           Initialize_Scalars             => Initialize_Scalars,
           No_Component_Reordering        => No_Component_Reordering,
-          Normalize_Scalars              => Normalize_Scalars,
           Optimize_Alignment             => Optimize_Alignment,
           Optimize_Alignment_Local       => Optimize_Alignment_Local,
           Persistent_BSS_Mode            => Persistent_BSS_Mode,
--- 137,142 ----
*************** package body Opt is
*** 242,255 ****
           Uneval_Old                  := Uneval_Old_Config;
           Use_VADS_Size               := Use_VADS_Size_Config;
           Warnings_As_Errors_Count    := Warnings_As_Errors_Count_Config;
- 
-          --  Update consistently the value of Init_Or_Norm_Scalars. The value
-          --  of Normalize_Scalars is not saved/restored because once set to
-          --  True its value is never changed. That is, if a compilation unit
-          --  has pragma Normalize_Scalars then it forces that value for all
-          --  with'ed units.
- 
-          Init_Or_Norm_Scalars := Initialize_Scalars or Normalize_Scalars;
        end if;
  
        --  Values set for all units
--- 234,239 ----
diff -Nrcpad gcc-17-20260614/gcc/ada/opt.ads gcc-17-20260621/gcc/ada/opt.ads
*** gcc-17-20260614/gcc/ada/opt.ads	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/opt.ads	Sun Jun 21 22:32:05 2026
*************** package Opt is
*** 845,859 ****
     --  allowed to cause implicit packing instead of generating an error
     --  message. Set by use of pragma Implicit_Packing.
  
-    Init_Or_Norm_Scalars : Boolean := False;
-    --  GNAT, GNATBIND
-    --  Set True if a pragma Initialize_Scalars applies to the current unit.
-    --  Also set True if a pragma Restriction (Normalize_Scalars) applies.
- 
     Initialize_Scalars : Boolean := False;
     --  GNAT
     --  Set True if a pragma Initialize_Scalars applies to the current unit.
-    --  Note that Init_Or_Norm_Scalars is also set to True if this is True.
  
     Initialize_Scalars_Mode1 : Character := 'I';
     Initialize_Scalars_Mode2 : Character := 'N';
--- 845,853 ----
*************** package Opt is
*** 1168,1174 ****
     Normalize_Scalars : Boolean := False;
     --  GNAT, GNATBIND
     --  Set True if a pragma Normalize_Scalars applies to the current unit.
-    --  Note that Init_Or_Norm_Scalars is also set to True if this is True.
  
     Object_Directory_Present : Boolean := False;
     --  GNATMAKE
--- 1162,1167 ----
*************** package Opt is
*** 1726,1731 ****
--- 1719,1728 ----
     --  Do no formatting (no title, no leading spaces, no empty lines) in
     --  auxiliary outputs (-e, -K, -l, -R).
  
+    function Init_Or_Norm_Scalars return Boolean
+    is (Initialize_Scalars or Normalize_Scalars);
+    --  A convenience shortcut for a common expression
+ 
     ----------------------------
     -- Configuration Settings --
     ----------------------------
*************** private
*** 2035,2041 ****
        Fast_Math                      : Boolean;
        Initialize_Scalars             : Boolean;
        No_Component_Reordering        : Boolean;
-       Normalize_Scalars              : Boolean;
        Optimize_Alignment             : Character;
        Optimize_Alignment_Local       : Boolean;
        Persistent_BSS_Mode            : Boolean;
--- 2032,2037 ----
diff -Nrcpad gcc-17-20260614/gcc/ada/par-ch10.adb gcc-17-20260621/gcc/ada/par-ch10.adb
*** gcc-17-20260614/gcc/ada/par-ch10.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/par-ch10.adb	Sun Jun 21 22:32:05 2026
*************** package body Ch10 is
*** 369,378 ****
              Error_Msg_BC -- CODEFIX
                ("keyword BODY expected here '[see file name']");
              Restore_Scan_State (Scan_State);
!             Set_Unit (Comp_Unit_Node, P_Package (Pf_Pbod_Pexp));
           else
              Restore_Scan_State (Scan_State);
!             Set_Unit (Comp_Unit_Node, P_Package (Pf_Decl_Gins_Pbod_Rnam_Pexp));
           end if;
  
        elsif Token = Tok_Generic then
--- 369,378 ----
              Error_Msg_BC -- CODEFIX
                ("keyword BODY expected here '[see file name']");
              Restore_Scan_State (Scan_State);
!             Set_Unit (Comp_Unit_Node, P_Package (Pf_Pbod_Expf));
           else
              Restore_Scan_State (Scan_State);
!             Set_Unit (Comp_Unit_Node, P_Package (Pf_Decl_Gins_Pbod_Rnam_Expf));
           end if;
  
        elsif Token = Tok_Generic then
*************** package body Ch10 is
*** 383,389 ****
  
        elsif Token in Tok_Function | Tok_Not | Tok_Overriding | Tok_Procedure
        then
!          Set_Unit (Comp_Unit_Node, P_Subprogram (Pf_Decl_Gins_Pbod_Rnam_Pexp));
  
           --  A little bit of an error recovery check here. If we just scanned
           --  a subprogram declaration (as indicated by an SIS entry being
--- 383,389 ----
  
        elsif Token in Tok_Function | Tok_Not | Tok_Overriding | Tok_Procedure
        then
!          Set_Unit (Comp_Unit_Node, P_Subprogram (Pf_Decl_Gins_Pbod_Rnam_Expf));
  
           --  A little bit of an error recovery check here. If we just scanned
           --  a subprogram declaration (as indicated by an SIS entry being
*************** package body Ch10 is
*** 1053,1062 ****
        Ignore (Tok_Semicolon);
  
        if Token in Tok_Function | Tok_Not | Tok_Overriding | Tok_Procedure then
!          Body_Node := P_Subprogram (Pf_Pbod_Pexp);
  
        elsif Token = Tok_Package then
!          Body_Node := P_Package (Pf_Pbod_Pexp);
  
        elsif Token = Tok_Protected then
           Scan; -- past PROTECTED
--- 1053,1062 ----
        Ignore (Tok_Semicolon);
  
        if Token in Tok_Function | Tok_Not | Tok_Overriding | Tok_Procedure then
!          Body_Node := P_Subprogram (Pf_Pbod_Expf);
  
        elsif Token = Tok_Package then
!          Body_Node := P_Package (Pf_Pbod_Expf);
  
        elsif Token = Tok_Protected then
           Scan; -- past PROTECTED
diff -Nrcpad gcc-17-20260614/gcc/ada/par-ch13.adb gcc-17-20260621/gcc/ada/par-ch13.adb
*** gcc-17-20260614/gcc/ada/par-ch13.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/par-ch13.adb	Sun Jun 21 22:32:05 2026
*************** package body Ch13 is
*** 36,41 ****
--- 36,42 ----
  
     function P_Component_Clause return Node_Id;
     function P_Mod_Clause return Node_Id;
+    function P_Modifies_Specification return Node_Id;
  
     -----------------------------------
     -- Aspect_Specifications_Present --
*************** package body Ch13 is
*** 510,519 ****
                    when others => null;
                 end case;
  
                 --  Parse the aspect definition depending on the expected
                 --  argument kind.
  
!                if Aspect_Argument (A_Id) = Name
                   or else Aspect_Argument (A_Id) = Optional_Name
                 then
                    Set_Expression (Aspect, P_Name);
--- 511,526 ----
                    when others => null;
                 end case;
  
+                --  Aspect Modifies requires dedicated parsing, because it is
+                --  unlike any valid expression.
+ 
+                if A_Id = Aspect_Modifies then
+                   Set_Expression (Aspect, P_Modifies_Specification);
+ 
                 --  Parse the aspect definition depending on the expected
                 --  argument kind.
  
!                elsif Aspect_Argument (A_Id) = Name
                   or else Aspect_Argument (A_Id) = Optional_Name
                 then
                    Set_Expression (Aspect, P_Name);
*************** package body Ch13 is
*** 996,1001 ****
--- 1003,1146 ----
     end P_Mod_Clause;
  
     ------------------------------
+    -- P_Modifies_Specification --
+    ------------------------------
+ 
+    --  MODIFIES_SPECIFICATION ::=
+    --      MODIFIES_CLAUSE
+    --    | (MODIFIES_CLAUSE {, MODIFIES_CLAUSE});
+    --
+    --  MODIFIES_CLAUSE ::= MODIFIED_OBJECTS { when GUARD }
+    --
+    --  GUARD ::= boolean_EXPRESSION
+    --
+    --  MODIFIED_OBJECTS ::=
+    --      MODIFIED_OBJECT
+    --    | (MODIFIED_OBJECT {, MODIFIED_OBJECT})
+    --
+    --  MODIFIED_OBJECT ::=
+    --      name
+    --    | MODIFIED_OBJECT . all
+    --    | MODIFIED_OBJECT . component_selector_name
+    --    | MODIFIED_OBJECT (expression {, expression})
+ 
+    function P_Modifies_Specification return Node_Id is
+ 
+       function P_Modifies_Clause return Node_Id;
+       --  Parse a single modifies clause. If there are multiple modified
+       --  objects or a guard, then a component association is returned where
+       --  modified objects become component choices and guard becomes component
+       --  expression; otherwise, a modified object is returned directly.
+ 
+       -----------------------
+       -- P_Modifies_Clause --
+       -----------------------
+ 
+       function P_Modifies_Clause return Node_Id is
+          Clause_Node    : Node_Id;
+          Object_Node    : Node_Id;
+          Condition_Node : Node_Id;
+       begin
+          if Token = Tok_Left_Paren then
+             Scan;  --  pase left paren
+ 
+             Clause_Node :=
+               New_Node (N_Component_Association, Token_Ptr);
+ 
+             loop
+                Object_Node := P_Name;
+ 
+                if Choices (Clause_Node) = No_List then
+                   Set_Choices (Clause_Node, New_List);
+                end if;
+ 
+                Append (Object_Node, Choices (Clause_Node));
+ 
+                if Token = Tok_Comma then
+                   Scan; --  past comma
+                elsif Token = Tok_Right_Paren then
+                   Scan; --  past right paren
+                   exit;
+                else
+                   raise Error_Resync;
+                end if;
+             end loop;
+ 
+             if Token = Tok_When then
+                Scan; --  past WHEN
+                Condition_Node := P_Expression;
+ 
+                Set_Expression (Clause_Node, Condition_Node);
+             end if;
+ 
+             return Clause_Node;
+          else
+             Object_Node := P_Name;
+ 
+             if Token = Tok_When then
+                Scan; --  past WHEN
+                Condition_Node := P_Expression;
+ 
+                Clause_Node :=
+                  New_Node (N_Component_Association, Sloc (Object_Node));
+ 
+                Set_Choices    (Clause_Node, New_List (Object_Node));
+                Set_Expression (Clause_Node, Condition_Node);
+ 
+                return Clause_Node;
+             else
+                return Object_Node;
+             end if;
+          end if;
+       end P_Modifies_Clause;
+ 
+       Modifies_Node : Node_Id;
+       Clause_Node   : Node_Id;
+ 
+    begin
+       Modifies_Node := New_Node (N_Aggregate, Token_Ptr);
+ 
+       if Token = Tok_Left_Paren then
+          Scan; --  past left paren
+          loop
+             Clause_Node := P_Modifies_Clause;
+             if Nkind (Clause_Node) = N_Component_Association then
+                if Component_Associations (Modifies_Node) = No_List then
+                   Set_Component_Associations (Modifies_Node, New_List);
+                end if;
+                Append (Clause_Node, Component_Associations (Modifies_Node));
+             else
+                if Expressions (Modifies_Node) = No_List then
+                   Set_Expressions (Modifies_Node, New_List);
+                end if;
+                Append (Clause_Node, Expressions (Modifies_Node));
+             end if;
+ 
+             if Token = Tok_Comma then
+                Scan; --  past comma
+             elsif Token = Tok_Right_Paren then
+                Scan; --  past right paren
+                exit;
+             else
+                raise Error_Resync;
+             end if;
+          end loop;
+       else
+          Clause_Node := P_Modifies_Clause;
+          if Nkind (Clause_Node) = N_Component_Association then
+             Set_Component_Associations (Modifies_Node, New_List (Clause_Node));
+          else
+             Set_Expressions (Modifies_Node, New_List (Clause_Node));
+          end if;
+       end if;
+ 
+       return Modifies_Node;
+    exception
+       when Error_Resync =>
+          return Error;
+    end P_Modifies_Specification;
+ 
+    ------------------------------
     -- 13.5.1  Component Clause --
     ------------------------------
  
diff -Nrcpad gcc-17-20260614/gcc/ada/par-ch3.adb gcc-17-20260621/gcc/ada/par-ch3.adb
*** gcc-17-20260614/gcc/ada/par-ch3.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/par-ch3.adb	Sun Jun 21 22:32:05 2026
*************** package body Ch3 is
*** 4566,4572 ****
              | Tok_Procedure
           =>
              Check_Bad_Layout;
!             Append (P_Subprogram (Pf_Decl_Gins_Pbod_Rnam_Stub_Pexp), Decls);
  
           when Tok_For =>
              Check_Bad_Layout;
--- 4566,4572 ----
              | Tok_Procedure
           =>
              Check_Bad_Layout;
!             Append (P_Subprogram (Pf_Decl_Gins_Pbod_Rnam_Stub_Expf), Decls);
  
           when Tok_For =>
              Check_Bad_Layout;
*************** package body Ch3 is
*** 4624,4630 ****
                 Error_Msg_SC ("\unit must be compiled with -gnat05 switch");
  
                 Token := Tok_Overriding;
!                Append (P_Subprogram (Pf_Decl_Gins_Pbod_Rnam_Stub_Pexp), Decls);
  
              --  Normal case, no overriding, or overriding followed by colon
  
--- 4624,4630 ----
                 Error_Msg_SC ("\unit must be compiled with -gnat05 switch");
  
                 Token := Tok_Overriding;
!                Append (P_Subprogram (Pf_Decl_Gins_Pbod_Rnam_Stub_Expf), Decls);
  
              --  Normal case, no overriding, or overriding followed by colon
  
*************** package body Ch3 is
*** 4638,4644 ****
  
           when Tok_Package =>
              Check_Bad_Layout;
!             Append (P_Package (Pf_Decl_Gins_Pbod_Rnam_Stub_Pexp), Decls);
  
           when Tok_Pragma =>
              --  If we see a pragma and In_Statements is true, we want to let
--- 4638,4644 ----
  
           when Tok_Package =>
              Check_Bad_Layout;
!             Append (P_Package (Pf_Decl_Gins_Pbod_Rnam_Stub_Expf), Decls);
  
           when Tok_Pragma =>
              --  If we see a pragma and In_Statements is true, we want to let
diff -Nrcpad gcc-17-20260614/gcc/ada/par-ch6.adb gcc-17-20260621/gcc/ada/par-ch6.adb
*** gcc-17-20260614/gcc/ada/par-ch6.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/par-ch6.adb	Sun Jun 21 22:32:05 2026
*************** package body Ch6 is
*** 338,348 ****
           --  declarations and bodies can occur. The Pf_Pbod case is for
           --  subunits.
  
!          if Pf_Flags /= Pf_Decl_Gins_Pbod_Rnam_Stub_Pexp
                and then
!             Pf_Flags /= Pf_Decl_Pbod_Pexp
                and then
!             Pf_Flags /= Pf_Pbod_Pexp
           then
              Error_Msg_SC ("overriding indicator not allowed here!");
  
--- 338,348 ----
           --  declarations and bodies can occur. The Pf_Pbod case is for
           --  subunits.
  
!          if Pf_Flags /= Pf_Decl_Gins_Pbod_Rnam_Stub_Expf
                and then
!             Pf_Flags /= Pf_Decl_Pbod_Expf
                and then
!             Pf_Flags /= Pf_Pbod_Expf
           then
              Error_Msg_SC ("overriding indicator not allowed here!");
  
*************** package body Ch6 is
*** 882,888 ****
                 then
                    --  Check expression function allowed here
  
!                   if not Pf_Flags.Pexp then
                       Error_Msg_SC ("expression function not allowed here!");
                    end if;
  
--- 882,888 ----
                 then
                    --  Check expression function allowed here
  
!                   if not Pf_Flags.Expf then
                       Error_Msg_SC ("expression function not allowed here!");
                    end if;
  
diff -Nrcpad gcc-17-20260614/gcc/ada/par-ch7.adb gcc-17-20260621/gcc/ada/par-ch7.adb
*** gcc-17-20260614/gcc/ada/par-ch7.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/par-ch7.adb	Sun Jun 21 22:32:05 2026
*************** package body Ch7 is
*** 118,124 ****
        --  Case of package body. Note that we demand a package body if that
        --  is the only possibility (even if the BODY keyword is not present)
  
!       if Token = Tok_Body or else Pf_Flags = Pf_Pbod_Pexp then
           if not Pf_Flags.Pbod then
              Error_Msg_SC ("package body cannot appear here!");
           end if;
--- 118,124 ----
        --  Case of package body. Note that we demand a package body if that
        --  is the only possibility (even if the BODY keyword is not present)
  
!       if Token = Tok_Body or else Pf_Flags = Pf_Pbod_Expf then
           if not Pf_Flags.Pbod then
              Error_Msg_SC ("package body cannot appear here!");
           end if;
diff -Nrcpad gcc-17-20260614/gcc/ada/par-ch9.adb gcc-17-20260621/gcc/ada/par-ch9.adb
*** gcc-17-20260614/gcc/ada/par-ch9.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/par-ch9.adb	Sun Jun 21 22:32:05 2026
*************** package body Ch9 is
*** 750,756 ****
                 Set_Must_Not_Override (Decl, Not_Overriding);
  
              elsif Token in Tok_Function | Tok_Procedure then
!                Decl := P_Subprogram (Pf_Decl_Pexp);
  
                 Set_Must_Override     (Specification (Decl), Is_Overriding);
                 Set_Must_Not_Override (Specification (Decl), Not_Overriding);
--- 750,756 ----
                 Set_Must_Not_Override (Decl, Not_Overriding);
  
              elsif Token in Tok_Function | Tok_Procedure then
!                Decl := P_Subprogram (Pf_Decl_Expf);
  
                 Set_Must_Override     (Specification (Decl), Is_Overriding);
                 Set_Must_Not_Override (Specification (Decl), Not_Overriding);
*************** package body Ch9 is
*** 790,796 ****
              when Tok_Function
                 | Tok_Procedure
              =>
!                Result := P_Subprogram (Pf_Decl_Pexp);
                 exit;
  
              when Tok_Identifier =>
--- 790,796 ----
              when Tok_Function
                 | Tok_Procedure
              =>
!                Result := P_Subprogram (Pf_Decl_Expf);
                 exit;
  
              when Tok_Identifier =>
*************** package body Ch9 is
*** 878,884 ****
                   or else
                 Token = Tok_Not or else Bad_Spelling_Of (Tok_Not)
           then
!             Append (P_Subprogram (Pf_Decl_Pbod_Pexp), Item_List);
  
           elsif Token = Tok_Pragma or else Bad_Spelling_Of (Tok_Pragma) then
              P_Pragmas_Opt (Item_List);
--- 878,884 ----
                   or else
                 Token = Tok_Not or else Bad_Spelling_Of (Tok_Not)
           then
!             Append (P_Subprogram (Pf_Decl_Pbod_Expf), Item_List);
  
           elsif Token = Tok_Pragma or else Bad_Spelling_Of (Tok_Pragma) then
              P_Pragmas_Opt (Item_List);
diff -Nrcpad gcc-17-20260614/gcc/ada/par-prag.adb gcc-17-20260621/gcc/ada/par-prag.adb
*** gcc-17-20260614/gcc/ada/par-prag.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/par-prag.adb	Sun Jun 21 22:32:05 2026
*************** begin
*** 1507,1512 ****
--- 1507,1513 ----
           | Pragma_Max_Entry_Queue_Length
           | Pragma_Max_Queue_Length
           | Pragma_Memory_Size
+          | Pragma_Modifies  --  ??? this pragma needs custom parsing
           | Pragma_No_Body
           | Pragma_No_Caching
           | Pragma_No_Component_Reordering
diff -Nrcpad gcc-17-20260614/gcc/ada/par.adb gcc-17-20260621/gcc/ada/par.adb
*** gcc-17-20260614/gcc/ada/par.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/par.adb	Sun Jun 21 22:32:05 2026
*************** function Par (Configuration_Pragmas : Bo
*** 382,399 ****
        Pbod : Boolean; -- True if proper body OK
        Rnam : Boolean; -- True if renaming declaration OK
        Stub : Boolean; -- True if body stub OK
!       Pexp : Boolean; -- True if parameterized expression OK
     end record;
     pragma Pack (Pf_Rec);
  
     function T return Boolean renames True;
     function F return Boolean renames False;
  
!    Pf_Decl_Gins_Pbod_Rnam_Stub_Pexp : constant Pf_Rec := (F, T, T, T, T, T, T);
!    Pf_Decl_Pexp                     : constant Pf_Rec := (F, T, F, F, F, F, T);
!    Pf_Decl_Gins_Pbod_Rnam_Pexp      : constant Pf_Rec := (F, T, T, T, T, F, T);
!    Pf_Decl_Pbod_Pexp                : constant Pf_Rec := (F, T, F, T, F, F, T);
!    Pf_Pbod_Pexp                     : constant Pf_Rec := (F, F, F, T, F, F, T);
     Pf_Spcn                          : constant Pf_Rec := (T, F, F, F, F, F, F);
     --  The above are the only allowed values of Pf_Rec arguments
  
--- 382,399 ----
        Pbod : Boolean; -- True if proper body OK
        Rnam : Boolean; -- True if renaming declaration OK
        Stub : Boolean; -- True if body stub OK
!       Expf : Boolean; -- True if expression function OK
     end record;
     pragma Pack (Pf_Rec);
  
     function T return Boolean renames True;
     function F return Boolean renames False;
  
!    Pf_Decl_Gins_Pbod_Rnam_Stub_Expf : constant Pf_Rec := (F, T, T, T, T, T, T);
!    Pf_Decl_Expf                     : constant Pf_Rec := (F, T, F, F, F, F, T);
!    Pf_Decl_Gins_Pbod_Rnam_Expf      : constant Pf_Rec := (F, T, T, T, T, F, T);
!    Pf_Decl_Pbod_Expf                : constant Pf_Rec := (F, T, F, T, F, F, T);
!    Pf_Pbod_Expf                     : constant Pf_Rec := (F, F, F, T, F, F, T);
     Pf_Spcn                          : constant Pf_Rec := (T, F, F, F, F, F, F);
     --  The above are the only allowed values of Pf_Rec arguments
  
diff -Nrcpad gcc-17-20260614/gcc/ada/restrict.adb gcc-17-20260621/gcc/ada/restrict.adb
*** gcc-17-20260614/gcc/ada/restrict.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/restrict.adb	Sun Jun 21 22:32:05 2026
*************** package body Restrict is
*** 651,657 ****
           Error_Msg_Warn := No_Specification_Of_Aspect_Warning (A_Id);
           Error_Msg_N
             ("<*<violation of restriction `No_Specification_Of_Aspect '='> &`#",
!             Id);
        end if;
     end Check_Restriction_No_Specification_Of_Aspect;
  
--- 651,658 ----
           Error_Msg_Warn := No_Specification_Of_Aspect_Warning (A_Id);
           Error_Msg_N
             ("<*<violation of restriction `No_Specification_Of_Aspect '='> &`#",
!             Id,
!             Rest_To_Diag_Mappping (No_Specification_Of_Aspect));
        end if;
     end Check_Restriction_No_Specification_Of_Aspect;
  
*************** package body Restrict is
*** 697,703 ****
           Error_Msg_Name_1 := Attr_Nam;
           Error_Msg_Warn   := No_Use_Of_Attribute_Warning (Attr_Id);
           Error_Msg_N
!            ("<*<violation of restriction `No_Use_Of_Attribute '='> %` #", N);
        end if;
     end Check_Restriction_No_Use_Of_Attribute;
  
--- 698,706 ----
           Error_Msg_Name_1 := Attr_Nam;
           Error_Msg_Warn   := No_Use_Of_Attribute_Warning (Attr_Id);
           Error_Msg_N
!            ("<*<violation of restriction `No_Use_Of_Attribute '='> %` #",
!             N,
!             Rest_To_Diag_Mappping (Rident.No_Use_Of_Attribute));
        end if;
     end Check_Restriction_No_Use_Of_Attribute;
  
*************** package body Restrict is
*** 826,832 ****
        if Error_Msg_Sloc /= No_Location then
           Error_Msg_Warn := No_Use_Of_Pragma_Warning (P_Id);
           Error_Msg_N
!            ("<*<violation of restriction `No_Use_Of_Pragma '='> &` #", Id);
        end if;
     end Check_Restriction_No_Use_Of_Pragma;
  
--- 829,837 ----
        if Error_Msg_Sloc /= No_Location then
           Error_Msg_Warn := No_Use_Of_Pragma_Warning (P_Id);
           Error_Msg_N
!            ("<*<violation of restriction `No_Use_Of_Pragma '='> &` #",
!             Id,
!             Rest_To_Diag_Mappping (Rident.No_Use_Of_Pragma));
        end if;
     end Check_Restriction_No_Use_Of_Pragma;
  
*************** package body Restrict is
*** 1049,1055 ****
           Error_Msg_Name_1 := Old_Name;
           Error_Msg_N ("restriction identifier % is obsolescent?j?", N);
           Error_Msg_Name_1 := New_Name;
!          Error_Msg_N ("|use restriction identifier % instead?j?", N);
        end if;
  
        return New_Name;
--- 1054,1060 ----
           Error_Msg_Name_1 := Old_Name;
           Error_Msg_N ("restriction identifier % is obsolescent?j?", N);
           Error_Msg_Name_1 := New_Name;
!          Error_Msg_N ("\use restriction identifier % instead?j?", N);
        end if;
  
        return New_Name;
diff -Nrcpad gcc-17-20260614/gcc/ada/rtsfind.adb gcc-17-20260621/gcc/ada/rtsfind.adb
*** gcc-17-20260614/gcc/ada/rtsfind.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/rtsfind.adb	Sun Jun 21 22:32:05 2026
*************** package body Rtsfind is
*** 1292,1298 ****
        begin
           Clause := U.First_Implicit_With;
           while Present (Clause) loop
!             if Parent (Clause) = Cunit (Current_Sem_Unit) then
                 return;
              end if;
  
--- 1292,1308 ----
        begin
           Clause := U.First_Implicit_With;
           while Present (Clause) loop
! 
!             if Parent (Clause) = Cunit (Current_Sem_Unit)
!               and then
!                 --  Skip when there is a non-ignored with clause already
!                 (not Is_Ignored_Ghost_Node (Clause)
!                  or else
!                    --  Skip if we are going to add a ignored with clause when
!                    --  we already have an ignored with clause.
!                    (Is_Ignored_Ghost_Node (Clause)
!                     and then Ghost_Config.Ghost_Mode = Ignore))
!             then
                 return;
              end if;
  
diff -Nrcpad gcc-17-20260614/gcc/ada/sem_attr.adb gcc-17-20260621/gcc/ada/sem_attr.adb
*** gcc-17-20260614/gcc/ada/sem_attr.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/sem_attr.adb	Sun Jun 21 22:32:05 2026
*************** package body Sem_Attr is
*** 3143,3148 ****
--- 3143,3149 ----
           --  from Opt.Uneval_Old. Perhaps this is due to a previous error?
  
           else
+             Check_Error_Detected;
              Uneval_Old_Setting := Opt.Uneval_Old;
           end if;
  
*************** package body Sem_Attr is
*** 5430,5435 ****
--- 5431,5492 ----
  
              if not Needs_Construction (Entity (P)) then
                 Error_Msg_NE ("no available constructor for&", N, Entity (P));
+ 
+             --  Verify that the provided arguments are compatible with at least
+             --  one constructor (checked by parameters count). Mismatched
+             --  actuals will be caught later during resolution.
+ 
+             elsif not Is_Copy_Constructor_Call (N)
+               and then Comes_From_Source (N)
+             then
+                declare
+                   Num_Args : constant Nat := List_Length (Exprs);
+ 
+                   function Is_Candidate
+                     (Constructor_Id : Entity_Id) return Boolean;
+                   --  Determine whether Num_Args is between the minimum and
+                   --  maximum number of actuals required to invoke this
+                   --  constructor.
+ 
+                   ------------------
+                   -- Is_Candidate --
+                   ------------------
+ 
+                   function Is_Candidate
+                     (Constructor_Id : Entity_Id) return Boolean
+                   is
+                      Formal      : Entity_Id;
+                      Max_Actuals : Nat := 0;
+                      Min_Actuals : Nat := 0;
+ 
+                   begin
+                      Formal := Next_Formal (First_Formal (Constructor_Id));
+                      while Present (Formal) loop
+                         Max_Actuals := Max_Actuals + 1;
+ 
+                         if No (Default_Value (Formal)) then
+                            Min_Actuals := Min_Actuals + 1;
+                         end if;
+ 
+                         Next_Formal (Formal);
+                      end loop;
+ 
+                      return Num_Args in Min_Actuals .. Max_Actuals;
+                   end Is_Candidate;
+ 
+                   function Find_Candidate is
+                     new Find_Matching_Constructor (Is_Candidate);
+ 
+                begin
+                   if No (Find_Candidate
+                            (Typ           => Entity (P),
+                             Allow_Removed => False))
+                   then
+                      Error_Msg_NE
+                        ("no constructor matching given arguments for&",
+                         N, Entity (P));
+                   end if;
+                end;
              end if;
  
           elsif not Needs_Construction (Entity (P))
diff -Nrcpad gcc-17-20260614/gcc/ada/sem_ch12.adb gcc-17-20260621/gcc/ada/sem_ch12.adb
*** gcc-17-20260614/gcc/ada/sem_ch12.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/sem_ch12.adb	Sun Jun 21 22:32:05 2026
*************** package body Sem_Ch12 is
*** 268,273 ****
--- 268,274 ----
     --                                Exit_Cases
     --                                Extensions_Visible
     --                                Global
+    --                                Modifies
     --     package body               Post
     --       Refined_State            Post_Class
     --                                Postcondition
*************** package body Sem_Ch12 is
*** 4605,4614 ****
        End_Package_Scope (Id);
        Exit_Generic_Scope (Id);
  
!       --  If the generic appears within a package unit, the body of that unit
!       --  has to be present for instantiation and inlining.
  
!       if Nkind (Unit (Cunit (Current_Sem_Unit))) = N_Package_Declaration then
           Set_Body_Needed_For_Inlining
             (Defining_Entity (Unit (Cunit (Current_Sem_Unit))));
        end if;
--- 4606,4618 ----
        End_Package_Scope (Id);
        Exit_Generic_Scope (Id);
  
!       --  If the generic appears directly within a package unit and requires a
!       --  body, the package body of that unit has to be present for inlining.
  
!       if Nkind (Unit (Cunit (Current_Sem_Unit))) = N_Package_Declaration
!         and then not In_Instance
!         and then Unit_Requires_Body (Id)
!       then
           Set_Body_Needed_For_Inlining
             (Defining_Entity (Unit (Cunit (Current_Sem_Unit))));
        end if;
*************** package body Sem_Ch12 is
*** 4806,4815 ****
           Set_Body_Required (Parent (N), Unit_Requires_Body (Id));
        end if;
  
!       --  If the generic appears within a package unit, the body of that unit
!       --  has to be present for instantiation and inlining.
  
        if Nkind (Unit (Cunit (Current_Sem_Unit))) = N_Package_Declaration
          and then Unit_Requires_Body (Id)
        then
           Set_Body_Needed_For_Inlining
--- 4810,4820 ----
           Set_Body_Required (Parent (N), Unit_Requires_Body (Id));
        end if;
  
!       --  If the generic appears directly within a package unit and requires a
!       --  body, the package body of that unit has to be present for inlining.
  
        if Nkind (Unit (Cunit (Current_Sem_Unit))) = N_Package_Declaration
+         and then not In_Instance
          and then Unit_Requires_Body (Id)
        then
           Set_Body_Needed_For_Inlining
*************** package body Sem_Ch12 is
*** 7418,7427 ****
        --  reasons pertaining to freezing (see the Freeze_Package_Instance and
        --  Freeze_Subprogram_Instance procedures).
  
!       Add_Local_Declaration (Inst, N, Scop => Empty);
!       if Error_Posted (Inst) then
!          return Empty;
!       end if;
  
        --  If the structural instance had already been created, this occurrence
        --  has been turned into a renaming of it.
--- 7423,7443 ----
        --  reasons pertaining to freezing (see the Freeze_Package_Instance and
        --  Freeze_Subprogram_Instance procedures).
  
!       --  We also need to temporarily disable registration of tagged types,
!       --  lest there be multiple instantiations in the partition, since it
!       --  is performed even though the generic unit is preelaborated.
! 
!       declare
!          S_Restrictions : constant Save_Cunit_Boolean_Restrictions :=
!                                      Cunit_Boolean_Restrictions_Save;
!       begin
!          Set_Restriction (No_Tagged_Type_Registration, N);
!          Add_Local_Declaration (Inst, N, Scop => Empty);
!          Cunit_Boolean_Restrictions_Restore (S_Restrictions);
!          if Error_Posted (Inst) then
!             return Empty;
!          end if;
!       end;
  
        --  If the structural instance had already been created, this occurrence
        --  has been turned into a renaming of it.
*************** package body Sem_Ch12 is
*** 8491,8497 ****
                 if Curr = Outer then
                    return True;
  
!                elsif Is_Package_Body_Entity (Curr) then
                    Curr := Scope (Curr);
  
                 else
--- 8507,8513 ----
                 if Curr = Outer then
                    return True;
  
!                elsif Declared_In_Package_Body (Curr) then
                    Curr := Scope (Curr);
  
                 else
diff -Nrcpad gcc-17-20260614/gcc/ada/sem_ch13.adb gcc-17-20260621/gcc/ada/sem_ch13.adb
*** gcc-17-20260614/gcc/ada/sem_ch13.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/sem_ch13.adb	Sun Jun 21 22:32:05 2026
*************** package body Sem_Ch13 is
*** 4901,4907 ****
  
              Typ := Etype (First_Entity (E));
  
!             if No (First_Entity (Typ)) then
                 Error_Msg_N
                   ("Initialize can only apply to contructors"
                     & " whose type has one or more components", N);
--- 4901,4909 ----
  
              Typ := Etype (First_Entity (E));
  
!             if Comes_From_Source (Aspect)
!               and then No (First_Entity (Typ))
!             then
                 Error_Msg_N
                   ("Initialize can only apply to contructors"
                     & " whose type has one or more components", N);
*************** package body Sem_Ch13 is
*** 5415,5421 ****
           --  Case 4: Aspects requiring special handling
  
           --  Pre/Post/Test_Case/Contract_Cases/Always_Terminates/
!          --  Exceptional_Cases/Exit_Cases/Program_Exit and
           --  Subprogram_Variant whose corresponding pragmas take care of
           --  the delay.
  
--- 5417,5423 ----
           --  Case 4: Aspects requiring special handling
  
           --  Pre/Post/Test_Case/Contract_Cases/Always_Terminates/
!          --  Exceptional_Cases/Exit_Cases/Modifies/Program_Exit and
           --  Subprogram_Variant whose corresponding pragmas take care of
           --  the delay.
  
*************** package body Sem_Ch13 is
*** 5429,5434 ****
--- 5431,5438 ----
           when Pre_Post_Aspects => Pre_Post : declare
              Pname : Name_Id;
  
+             Class_Wide_Expr : Node_Id := Empty;
+ 
           begin
              if A_Id in Aspect_Pre | Aspect_Precondition then
                 Pname := Name_Precondition;
*************** package body Sem_Ch13 is
*** 5465,5475 ****
                and then not Is_Ignored_Ghost_Entity_In_Codegen (E)
              then
                 if A_Id = Aspect_Pre then
                    if Is_Ignored_In_Codegen (Aspect) then
!                      Set_Ignored_Class_Preconditions (E,
!                        New_Copy_Tree (Expr));
                    else
!                      Set_Class_Preconditions (E, New_Copy_Tree (Expr));
                    end if;
  
                 --  Postconditions may split into separate aspects, and we
--- 5469,5479 ----
                and then not Is_Ignored_Ghost_Entity_In_Codegen (E)
              then
                 if A_Id = Aspect_Pre then
+                   Class_Wide_Expr := New_Copy_Tree (Expr);
                    if Is_Ignored_In_Codegen (Aspect) then
!                      Set_Ignored_Class_Preconditions (E, Class_Wide_Expr);
                    else
!                      Set_Class_Preconditions (E, Class_Wide_Expr);
                    end if;
  
                 --  Postconditions may split into separate aspects, and we
*************** package body Sem_Ch13 is
*** 5479,5489 ****
                 elsif No (Class_Postconditions (E))
                   and then No (Ignored_Class_Postconditions (E))
                 then
                    if Is_Ignored_In_Codegen (Aspect) then
!                      Set_Ignored_Class_Postconditions (E,
!                        New_Copy_Tree (Expr));
                    else
!                      Set_Class_Postconditions (E, New_Copy_Tree (Expr));
                    end if;
                 end if;
              end if;
--- 5483,5493 ----
                 elsif No (Class_Postconditions (E))
                   and then No (Ignored_Class_Postconditions (E))
                 then
+                   Class_Wide_Expr := New_Copy_Tree (Expr);
                    if Is_Ignored_In_Codegen (Aspect) then
!                      Set_Ignored_Class_Postconditions (E, Class_Wide_Expr);
                    else
!                      Set_Class_Postconditions (E, Class_Wide_Expr);
                    end if;
                 end if;
              end if;
*************** package body Sem_Ch13 is
*** 5501,5506 ****
--- 5505,5518 ----
                      Pragma_Name                => Pname);
              end;
  
+             --  If class-wide expression was copied, then attach it to the AST,
+             --  so that its original context can be retrieved by climbing the
+             --  chain of parents.
+ 
+             if Present (Class_Wide_Expr) then
+                Set_Parent (Class_Wide_Expr, Aitem);
+             end if;
+ 
              --  For Pre/Post cases, insert immediately after the entity
              --  declaration, since that is the required pragma placement.
              --  Note that for these aspects, we do not have to worry
*************** package body Sem_Ch13 is
*** 5604,5609 ****
--- 5616,5629 ----
                 Pragma_Name                  => Name_Exit_Cases);
              Insert_Aitem;
  
+          when Aspect_Modifies =>
+             Make_Aitem_Pragma
+               (Pragma_Argument_Associations => New_List (
+                  Make_Pragma_Argument_Association (Loc,
+                    Expression => Relocate_Node (Expr))),
+                Pragma_Name                  => Name_Modifies);
+             Insert_Aitem;
+ 
           when Aspect_Program_Exit =>
              Make_Aitem_Pragma
                (Pragma_Argument_Associations => New_List (
*************** package body Sem_Ch13 is
*** 5893,5902 ****
  
        --  Note that there is a special handling for Pre, Post, Test_Case,
        --  Contract_Cases, Always_Terminates, Exit_Cases, Exceptional_Cases,
!       --  Program_Exit and Subprogram_Variant aspects. In these cases, we do
!       --  not have to worry about delay issues, since the pragmas themselves
!       --  deal with delay of visibility for the expression analysis. Thus, we
!       --  just insert the pragma after the node N.
  
        Aspect : Node_Id := First (Aspect_Specifications (N));
  
--- 5913,5922 ----
  
        --  Note that there is a special handling for Pre, Post, Test_Case,
        --  Contract_Cases, Always_Terminates, Exit_Cases, Exceptional_Cases,
!       --  Modifies, Program_Exit and Subprogram_Variant aspects. In these
!       --  cases, we do not have to worry about delay issues, since the pragmas
!       --  themselves deal with delay of visibility for the expression analysis.
!       --  Thus, we just insert the pragma after the node N.
  
        Aspect : Node_Id := First (Aspect_Specifications (N));
  
*************** package body Sem_Ch13 is
*** 8043,8093 ****
              procedure Associate_Storage_Pool
                (Ent : Entity_Id; Pool : Entity_Id)
              is
!                function Object_From (Pool : Entity_Id) return Entity_Id;
!                --  Return the entity of which Pool is a part of
! 
!                -----------------
!                -- Object_From --
!                -----------------
! 
!                function Object_From
!                  (Pool : Entity_Id) return Entity_Id
!                is
!                   N : Node_Id := Pool;
!                begin
!                   if Present (Renamed_Object (Pool)) then
!                      N := Renamed_Object (Pool);
!                   end if;
! 
!                   while Present (N) loop
!                      case Nkind (N) is
!                         when N_Defining_Identifier =>
!                            return N;
! 
!                         when N_Identifier | N_Expanded_Name =>
!                            return Entity (N);
! 
!                         when N_Indexed_Component | N_Selected_Component |
!                              N_Explicit_Dereference
!                         =>
!                            N := Prefix (N);
! 
!                         when N_Type_Conversion =>
!                            N := Expression (N);
! 
!                         when others =>
!                            --  ??? we probably should handle more cases but
!                            --  this is good enough in practice for this check
!                            --  on a corner case.
! 
!                            return Empty;
!                      end case;
!                   end loop;
! 
!                   return Empty;
!                end Object_From;
! 
!                Obj : Entity_Id;
  
              begin
                 Set_Associated_Storage_Pool (Ent, Pool);
--- 8063,8069 ----
              procedure Associate_Storage_Pool
                (Ent : Entity_Id; Pool : Entity_Id)
              is
!                Base : Node_Or_Entity_Id;
  
              begin
                 Set_Associated_Storage_Pool (Ent, Pool);
*************** package body Sem_Ch13 is
*** 8126,8136 ****
                       return;
                    end if;
  
!                   Obj := Object_From (Pool);
  
                    --  check (C)
  
!                   if Present (Obj) and then Is_Formal (Obj) then
                       Error_Msg_N
                         ("subpool cannot be part of a parameter", Ent);
                       return;
--- 8102,8115 ----
                       return;
                    end if;
  
!                   Base := Get_Pool_Object_Or_Dereference (Pool);
  
                    --  check (C)
  
!                   if Present (Base)
!                     and then Nkind (Base) = N_Defining_Identifier
!                     and then Is_Formal (Base)
!                   then
                       Error_Msg_N
                         ("subpool cannot be part of a parameter", Ent);
                       return;
*************** package body Sem_Ch13 is
*** 8138,8146 ****
  
                    --  check (D)
  
!                   if Present (Obj)
!                     and then Ekind (Etype (Obj)) = E_General_Access_Type
!                     and then not Is_Library_Level_Entity (Etype (Obj))
                    then
                       Error_Msg_N
                         ("subpool cannot be part of the dereference of a " &
--- 8117,8128 ----
  
                    --  check (D)
  
!                   if Present (Base)
!                     and then Nkind (Base) = N_Explicit_Dereference
!                     and then
!                       Ekind (Etype (Prefix (Base))) = E_General_Access_Type
!                     and then not
!                       Is_Library_Level_Entity (Etype (Prefix (Base)))
                    then
                       Error_Msg_N
                         ("subpool cannot be part of the dereference of a " &
*************** package body Sem_Ch13 is
*** 12268,12273 ****
--- 12250,12256 ----
              | Aspect_Initializes
              | Aspect_Max_Entry_Queue_Length
              | Aspect_Max_Queue_Length
+             | Aspect_Modifies
              | Aspect_Obsolescent
              | Aspect_Part_Of
              | Aspect_Post
diff -Nrcpad gcc-17-20260614/gcc/ada/sem_ch3.adb gcc-17-20260621/gcc/ada/sem_ch3.adb
*** gcc-17-20260614/gcc/ada/sem_ch3.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/sem_ch3.adb	Sun Jun 21 22:32:05 2026
*************** package body Sem_Ch3 is
*** 4661,4669 ****
        --  set the link in both the anonymous base type and anonymous subtype
        --  that are built to represent the array type to point to the object.
  
!       if Nkind (Object_Definition (Declaration_Node (Id))) =
!                         N_Constrained_Array_Definition
!       then
           Set_Related_Array_Object (T, Id);
           Set_Related_Array_Object (Base_Type (T), Id);
        end if;
--- 4661,4667 ----
        --  set the link in both the anonymous base type and anonymous subtype
        --  that are built to represent the array type to point to the object.
  
!       if Nkind (Object_Definition (N)) = N_Constrained_Array_Definition then
           Set_Related_Array_Object (T, Id);
           Set_Related_Array_Object (Base_Type (T), Id);
        end if;
*************** package body Sem_Ch3 is
*** 5480,5489 ****
  
        Check_Eliminated (Id);
  
!       --  Deal with setting In_Package_Body and In_Private_Part flags
  
        if Ekind (Scope (Id)) = E_Package then
-          Set_In_Package_Body (Id, In_Package_Body (Scope (Id)));
           Set_In_Private_Part (Id, In_Private_Part (Scope (Id)));
        end if;
  
--- 5478,5486 ----
  
        Check_Eliminated (Id);
  
!       --  Deal with setting In_Private_Part flag
  
        if Ekind (Scope (Id)) = E_Package then
           Set_In_Private_Part (Id, In_Private_Part (Scope (Id)));
        end if;
  
*************** package body Sem_Ch3 is
*** 5959,5964 ****
--- 5956,5962 ----
                 Set_Is_Constrained       (Id, Is_Constrained     (T));
                 Set_Is_IEEE_Extended_Precision
                   (Id, Is_IEEE_Extended_Precision (T));
+                Copy_RM_Size             (To => Id, From => T);
  
                 --  If the floating point type has dimensions, these will be
                 --  inherited subsequently when Analyze_Dimensions is called.
*************** package body Sem_Ch3 is
*** 21052,21061 ****
        --  Ada 2005 (AI-287, AI-318): Relax the strictness of the front end in
        --  case of limited aggregates (including extension aggregates), and
        --  function calls. The function call may have been given in prefixed
!       --  notation, in which case the original node is an indexed component.
!       --  If the function is parameterless, the original node was an explicit
!       --  dereference. The function may also be parameterless, in which case
!       --  the source node is just an identifier.
  
        --  A branch of a conditional expression may have been removed if the
        --  condition is statically known. This happens during expansion, and
--- 21050,21059 ----
        --  Ada 2005 (AI-287, AI-318): Relax the strictness of the front end in
        --  case of limited aggregates (including extension aggregates), and
        --  function calls. The function call may have been given in prefixed
!       --  notation, in which case the original node is an indexed component,
!       --  or a selected component if the function is parameterless, or even
!       --  an explicit dereference. Finally, for a direct unprefixed call to
!       --  a parameterless function, the original node is just an identifier.
  
        --  A branch of a conditional expression may have been removed if the
        --  condition is statically known. This happens during expansion, and
*************** package body Sem_Ch3 is
*** 21080,21086 ****
              return Present (Entity (Original_Node (Exp)))
                and then Ekind (Entity (Original_Node (Exp))) = E_Function;
  
!          when N_Qualified_Expression =>
              return
                OK_For_Limited_Init_In_05
                  (Typ, Expression (Original_Node (Exp)));
--- 21078,21084 ----
              return Present (Entity (Original_Node (Exp)))
                and then Ekind (Entity (Original_Node (Exp))) = E_Function;
  
!          when N_Expression_With_Actions | N_Qualified_Expression =>
              return
                OK_For_Limited_Init_In_05
                  (Typ, Expression (Original_Node (Exp)));
diff -Nrcpad gcc-17-20260614/gcc/ada/sem_ch6.adb gcc-17-20260621/gcc/ada/sem_ch6.adb
*** gcc-17-20260614/gcc/ada/sem_ch6.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/sem_ch6.adb	Sun Jun 21 22:32:05 2026
*************** package body Sem_Ch6 is
*** 9703,9712 ****
           Append_Entity (S, Scope (S));
        end if;
  
!       --  Deal with setting In_Package_Body and In_Private_Part flags
  
        if Ekind (Scope (S)) = E_Package then
-          Set_In_Package_Body (S, In_Package_Body (Scope (S)));
           Set_In_Private_Part (S, In_Private_Part (Scope (S)));
        end if;
  
--- 9703,9711 ----
           Append_Entity (S, Scope (S));
        end if;
  
!       --  Deal with setting In_Private_Part flag
  
        if Ekind (Scope (S)) = E_Package then
           Set_In_Private_Part (S, In_Private_Part (Scope (S)));
        end if;
  
diff -Nrcpad gcc-17-20260614/gcc/ada/sem_ch7.adb gcc-17-20260621/gcc/ada/sem_ch7.adb
*** gcc-17-20260614/gcc/ada/sem_ch7.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/sem_ch7.adb	Sun Jun 21 22:32:05 2026
*************** package body Sem_Ch7 is
*** 1084,1097 ****
              Set_Is_Immediately_Visible (E, False);
              Set_Is_Potentially_Use_Visible (E, False);
              Set_Is_Hidden (E);
- 
-             --  Child units may appear on the entity list (e.g. if they appear
-             --  in the context of a subunit) but they are not body entities.
- 
-             if not Is_Child_Unit (E) then
-                Set_Is_Package_Body_Entity (E);
-             end if;
- 
              Next_Entity (E);
           end loop;
        end;
--- 1084,1089 ----
diff -Nrcpad gcc-17-20260614/gcc/ada/sem_ch8.adb gcc-17-20260621/gcc/ada/sem_ch8.adb
*** gcc-17-20260614/gcc/ada/sem_ch8.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/sem_ch8.adb	Sun Jun 21 22:32:05 2026
*************** package body Sem_Ch8 is
*** 7167,7172 ****
--- 7167,7173 ----
                       | Name_Depends
                       | Name_Global
                       | Name_Initializes
+                      | Name_Modifies
                       | Name_Refined_Depends
                       | Name_Refined_Global
                 then
diff -Nrcpad gcc-17-20260614/gcc/ada/sem_disp.adb gcc-17-20260621/gcc/ada/sem_disp.adb
*** gcc-17-20260614/gcc/ada/sem_disp.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/sem_disp.adb	Sun Jun 21 22:32:05 2026
*************** package body Sem_Disp is
*** 1243,1249 ****
                    Error_Msg_Sloc := Sloc (E);
                    Error_Msg_N
                      ("?.j?primitive of type % defined after private extension "
!                      & "% #?", Prim);
                    Error_Msg_Name_1 := Chars (Prim);
                    Error_Msg_Name_2 := Chars (E);
                    Error_Msg_N
--- 1243,1249 ----
                    Error_Msg_Sloc := Sloc (E);
                    Error_Msg_N
                      ("?.j?primitive of type % defined after private extension "
!                      & "% #", Prim);
                    Error_Msg_Name_1 := Chars (Prim);
                    Error_Msg_Name_2 := Chars (E);
                    Error_Msg_N
diff -Nrcpad gcc-17-20260614/gcc/ada/sem_elab.adb gcc-17-20260621/gcc/ada/sem_elab.adb
*** gcc-17-20260614/gcc/ada/sem_elab.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/sem_elab.adb	Sun Jun 21 22:32:05 2026
*************** package body Sem_Elab is
*** 16313,16327 ****
     function Is_Finalization_Procedure (Id : Entity_Id) return Boolean;
     --  Determine whether entity Id denotes a [Deep_]Finalize procedure
  
!    procedure Output_Calls
!      (N               : Node_Id;
!       Check_Elab_Flag : Boolean);
     --  Outputs chain of calls stored in the Elab_Call table. The caller has
     --  already generated the main warning message, so the warnings generated
     --  are all continuation messages. The argument is the call node at which
!    --  the messages are to be placed. When Check_Elab_Flag is set, calls are
!    --  enumerated only when flag Elab_Warning is set for the dynamic case or
!    --  when flag Elab_Info_Messages is set for the static case.
  
     function Same_Elaboration_Scope (Scop1, Scop2 : Entity_Id) return Boolean;
     --  Given two scopes, determine whether they are the same scope from an
--- 16313,16326 ----
     function Is_Finalization_Procedure (Id : Entity_Id) return Boolean;
     --  Determine whether entity Id denotes a [Deep_]Finalize procedure
  
!    procedure Output_Calls (N : Node_Id; Uncond_Msg : Boolean);
     --  Outputs chain of calls stored in the Elab_Call table. The caller has
     --  already generated the main warning message, so the warnings generated
     --  are all continuation messages. The argument is the call node at which
!    --  the messages are to be placed. When Uncond_Msg is set, calls are
!    --  unconditionally emitted. Otherwise calls are enumerated only when flag
!    --  Elab_Warning is set for the dynamic case or when flag Elab_Info_Messages
!    --  is set for the static case.
  
     function Same_Elaboration_Scope (Scop1, Scop2 : Entity_Id) return Boolean;
     --  Given two scopes, determine whether they are the same scope from an
*************** package body Sem_Elab is
*** 17159,17165 ****
           --  ensures the proper pairing of the main warning and the
           --  clarification messages generated by Output_Calls.
  
!          Output_Calls (N, Check_Elab_Flag => True);
  
           --  Set flag to prevent further warnings for same unit unless in
           --  All_Errors_Mode.
--- 17158,17164 ----
           --  ensures the proper pairing of the main warning and the
           --  clarification messages generated by Output_Calls.
  
!          Output_Calls (N, Uncond_Msg => False);
  
           --  Set flag to prevent further warnings for same unit unless in
           --  All_Errors_Mode.
*************** package body Sem_Elab is
*** 18683,18689 ****
  
              if Inst_Case then
                 Error_Msg_NE
!                  ("instantiation of& may occur before body is seen<l<",
                    N, Orig_Ent);
              else
                 --  A rather specific check: for Adjust/Finalize/Initialize, if
--- 18682,18688 ----
  
              if Inst_Case then
                 Error_Msg_NE
!                  ("instantiation of& may occur before body is seen<<",
                    N, Orig_Ent);
              else
                 --  A rather specific check: for Adjust/Finalize/Initialize, if
*************** package body Sem_Elab is
*** 18709,18727 ****
                 --  Go ahead and give warning if not this special case
  
                 Error_Msg_NE
!                  ("call to& may occur before body is seen<l<", N, Orig_Ent);
              end if;
  
!             Error_Msg_N ("\Program_Error ]<l<", N);
  
              --  There is no need to query the elaboration warning message flags
!             --  because the main message is an error, not a warning, therefore
!             --  all the clarification messages produces by Output_Calls must be
!             --  emitted unconditionally.
  
              <<Output>>
  
!             Output_Calls (N, Check_Elab_Flag => False);
           end if;
        end if;
     end Check_Internal_Call_Continue;
--- 18708,18726 ----
                 --  Go ahead and give warning if not this special case
  
                 Error_Msg_NE
!                  ("call to& may occur before body is seen<<", N, Orig_Ent);
              end if;
  
!             Error_Msg_N ("\Program_Error ]<<", N);
  
              --  There is no need to query the elaboration warning message flags
!             --  because the main message is an error or an unconditional
!             --  warning, therefore all the clarification messages produces by
!             --  Output_Calls must be emitted unconditionally.
  
              <<Output>>
  
!             Output_Calls (N, Uncond_Msg => True);
           end if;
        end if;
     end Check_Internal_Call_Continue;
*************** package body Sem_Elab is
*** 19397,19409 ****
     -- Output_Calls --
     ------------------
  
!    procedure Output_Calls
!      (N               : Node_Id;
!       Check_Elab_Flag : Boolean)
!    is
!       function Emit (Flag : Boolean) return Boolean;
        --  Determine whether to emit an error message based on the combination
!       --  of flags Check_Elab_Flag and Flag.
  
        function Is_Printable_Error_Name return Boolean;
        --  An internal function, used to determine if a name, stored in the
--- 19396,19405 ----
     -- Output_Calls --
     ------------------
  
!    procedure Output_Calls (N : Node_Id; Uncond_Msg : Boolean) is
!       function Emit return Boolean;
        --  Determine whether to emit an error message based on the combination
!       --  of flags Check_Elab_Flag and Flag
  
        function Is_Printable_Error_Name return Boolean;
        --  An internal function, used to determine if a name, stored in the
*************** package body Sem_Elab is
*** 19415,19426 ****
        -- Emit --
        ----------
  
!       function Emit (Flag : Boolean) return Boolean is
        begin
!          if Check_Elab_Flag then
!             return Flag;
!          else
              return True;
           end if;
        end Emit;
  
--- 19411,19432 ----
        -- Emit --
        ----------
  
!       function Emit return Boolean is
        begin
!          --  a regular elaboration warning or error
! 
!          if Uncond_Msg then
              return True;
+ 
+          --  Dynamic elaboration model, warnings controlled by -gnatwl
+ 
+          elsif Dynamic_Elaboration_Checks then
+             return Elab_Warnings;
+ 
+          --  Static elaboration model, info messages controlled by -gnatel
+ 
+          else
+             return Elab_Info_Messages;
           end if;
        end Emit;
  
*************** package body Sem_Elab is
*** 19446,19451 ****
--- 19452,19464 ----
  
        Ent : Entity_Id;
  
+       Prefix : constant String :=
+         (if Uncond_Msg
+          then "<<"
+          elsif Dynamic_Elaboration_Checks
+          then "?l?"
+          else "?$?");
+ 
     --  Start of processing for Output_Calls
  
     begin
*************** package body Sem_Elab is
*** 19455,19488 ****
           Ent := Elab_Call.Table (J).Ent;
           Get_Name_String (Chars (Ent));
  
!          --  Dynamic elaboration model, warnings controlled by -gnatwl
! 
!          if Dynamic_Elaboration_Checks then
!             if Emit (Elab_Warnings) then
!                if Is_Generic_Unit (Ent) then
!                   Error_Msg_NE ("\\?l?& instantiated #", N, Ent);
!                elsif Is_Init_Proc (Ent) then
!                   Error_Msg_N ("\\?l?initialization procedure called #", N);
!                elsif Is_Printable_Error_Name then
!                   Error_Msg_NE ("\\?l?& called #", N, Ent);
!                else
!                   Error_Msg_N ("\\?l?called #", N);
!                end if;
!             end if;
! 
!          --  Static elaboration model, info messages controlled by -gnatel
! 
!          else
!             if Emit (Elab_Info_Messages) then
!                if Is_Generic_Unit (Ent) then
!                   Error_Msg_NE ("\\?$?& instantiated #", N, Ent);
!                elsif Is_Init_Proc (Ent) then
!                   Error_Msg_N ("\\?$?initialization procedure called #", N);
!                elsif Is_Printable_Error_Name then
!                   Error_Msg_NE ("\\?$?& called #", N, Ent);
!                else
!                   Error_Msg_N ("\\?$?called #", N);
!                end if;
              end if;
           end if;
        end loop;
--- 19468,19483 ----
           Ent := Elab_Call.Table (J).Ent;
           Get_Name_String (Chars (Ent));
  
!          if Emit then
!             if Is_Generic_Unit (Ent) then
!                Error_Msg_NE ("\\" & Prefix & "& instantiated #", N, Ent);
!             elsif Is_Init_Proc (Ent) then
!                Error_Msg_N
!                  ("\\" & Prefix & "initialization procedure called #", N);
!             elsif Is_Printable_Error_Name then
!                Error_Msg_NE ("\\" & Prefix & "& called #", N, Ent);
!             else
!                Error_Msg_N ("\\" & Prefix & "called #", N);
              end if;
           end if;
        end loop;
diff -Nrcpad gcc-17-20260614/gcc/ada/sem_prag.adb gcc-17-20260621/gcc/ada/sem_prag.adb
*** gcc-17-20260614/gcc/ada/sem_prag.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/sem_prag.adb	Sun Jun 21 22:32:05 2026
*************** package body Sem_Prag is
*** 355,362 ****
       (Contract_Id : Entity_Id;
        Freeze_Id   : Entity_Id);
     --  Subsidiary to the analysis of pragmas Contract_Cases, Exceptional_Cases,
!    --  Part_Of, Post, Pre, Program_Exit and Subprogram_Variant. Emit a
!    --  freezing-related error message where Freeze_Id is the entity of a body
     --  which caused contract freezing and Contract_Id denotes the entity of the
     --  affected contstruct.
  
--- 355,362 ----
       (Contract_Id : Entity_Id;
        Freeze_Id   : Entity_Id);
     --  Subsidiary to the analysis of pragmas Contract_Cases, Exceptional_Cases,
!    --  Modifies, Part_Of, Post, Pre, Program_Exit and Subprogram_Variant. Emit
!    --  a freezing-related error message where Freeze_Id is the entity of a body
     --  which caused contract freezing and Contract_Id denotes the entity of the
     --  affected contstruct.
  
*************** package body Sem_Prag is
*** 2603,2609 ****
        Exceptional_Contract : Node_Id;
        Restore_Scope        : Boolean := False;
  
!    --  Start of processing for Analyze_Subprogram_Variant_In_Decl_Part
  
     begin
        --  Do not analyze the pragma multiple times
--- 2603,2609 ----
        Exceptional_Contract : Node_Id;
        Restore_Scope        : Boolean := False;
  
!    --  Start of processing for Analyze_Exceptional_Cases_In_Decl_Part
  
     begin
        --  Do not analyze the pragma multiple times
*************** package body Sem_Prag is
*** 4278,4283 ****
--- 4278,4562 ----
        Set_Is_Analyzed_Pragma (N);
     end Analyze_Initializes_In_Decl_Part;
  
+    -----------------------------------
+    -- Analyze_Modifies_In_Decl_Part --
+    -----------------------------------
+ 
+    --  WARNING: This routine manages Ghost regions. Return statements must be
+    --  replaced by gotos which jump to the end of the routine and restore the
+    --  Ghost mode.
+ 
+    procedure Analyze_Modifies_In_Decl_Part
+      (N         : Node_Id;
+       Freeze_Id : Entity_Id := Empty)
+    is
+       Subp_Decl : constant Node_Id   := Find_Related_Declaration_Or_Body (N);
+       Spec_Id   : constant Entity_Id := Unique_Defining_Entity (Subp_Decl);
+ 
+       procedure Analyze_Clause (Clause : Node_Id);
+       --  Verify legality of a single modifies clause
+ 
+       procedure Analyze_Object (Object : Node_Id);
+ 
+       --------------------
+       -- Analyze_Clause --
+       --------------------
+ 
+       procedure Analyze_Clause (Clause : Node_Id) is
+          Modified_Object : Node_Id;
+          Guard           : constant Node_Id := Expression (Clause);
+          Errors          : Nat;
+ 
+       begin
+          pragma Assert (Nkind (Clause) = N_Component_Association);
+ 
+          Modified_Object := First (Choices (Clause));
+          while Present (Modified_Object) loop
+             Analyze_Object (Modified_Object);
+             Next (Modified_Object);
+          end loop;
+ 
+          if Present (Guard) then
+ 
+             Errors := Serious_Errors_Detected;
+ 
+             Preanalyze_And_Resolve_Assert_Expression (Guard, Any_Boolean);
+ 
+             --  Emit a clarification message when the guard expression contains
+             --  at least one undefined reference, possibly due to contract
+             --  freezing.
+ 
+             if Errors /= Serious_Errors_Detected
+               and then Present (Freeze_Id)
+               and then Has_Undefined_Reference (Guard)
+             then
+                Contract_Freeze_Error (Spec_Id, Freeze_Id);
+             end if;
+          end if;
+       end Analyze_Clause;
+ 
+       --------------------
+       -- Analyze_Object --
+       --------------------
+ 
+       procedure Analyze_Object (Object : Node_Id) is
+          procedure Analyze_And_Resolve_State_Or_Expression (N : Node_Id);
+          --  Like preanalyze and resolve, but with a custom resolution that
+          --  works both for abstract states and expressions.
+ 
+          ---------------------------------------------
+          -- Analyze_And_Resolve_State_Or_Expression --
+          ---------------------------------------------
+ 
+          procedure Analyze_And_Resolve_State_Or_Expression (N : Node_Id) is
+          begin
+             Analyze (N);
+ 
+             --  Try to resolve expression as an abstract state (in particular,
+             --  this will pick abstract state when it is overloaded by a
+             --  function). If this doesn't work, then resolve it as an
+             --  expression.
+ 
+             Resolve_State (N);
+ 
+             if Is_Entity_Name (N)
+                and then Present (Entity (N))
+                and then Ekind (Entity (N)) = E_Abstract_State
+             then
+                null;
+             else
+                Resolve (N);
+             end if;
+          end Analyze_And_Resolve_State_Or_Expression;
+ 
+          Root    : Node_Id;
+          Root_Id : Entity_Id;
+ 
+       --  Start of processing for Analyze_Object
+ 
+       begin
+          --  This contract allows both abstract states (which must be resolved
+          --  like in Global/Depends) and parts of objects (which must be
+          --  resolved like assert expressions, including checks for
+          --  subexpressions inside array indexes). This requires processing
+          --  like in Preanalyze_And_Resolve_Assert_Expression, but with a
+          --  custom resolution. Unfortunately, the current API doesn't allow
+          --  us to build it from exising routines, so we duplicate code to get
+          --  the necessary behavior.
+ 
+          declare
+             Save_In_Spec_Expression : constant Boolean := In_Spec_Expression;
+             Save_Full_Analysis      : constant Boolean := Full_Analysis;
+          begin
+             In_Assertion_Expr := In_Assertion_Expr + 1;
+             In_Spec_Expression := True;
+ 
+             Full_Analysis := False;
+             Expander_Mode_Save_And_Set (False);
+ 
+             --  See previous version of Preanalyze_And_Resolve for similar
+             --  handling.
+ 
+             if GNATprove_Mode then
+                Analyze_And_Resolve_State_Or_Expression (Object);
+             else
+                declare
+                   Sva : constant Suppress_Array := Scope_Suppress.Suppress;
+                begin
+                   Scope_Suppress.Suppress := (others => True);
+                   Analyze_And_Resolve_State_Or_Expression (Object);
+                   Scope_Suppress.Suppress := Sva;
+                end;
+             end if;
+ 
+             Expander_Mode_Restore;
+             Full_Analysis := Save_Full_Analysis;
+             In_Spec_Expression := Save_In_Spec_Expression;
+             In_Assertion_Expr := In_Assertion_Expr - 1;
+          end;
+ 
+          Root := Object;
+          while Present (Root) loop
+             case Nkind (Root) is
+                when N_Identifier | N_Expanded_Name =>
+                   Root_Id := Entity (Root);
+ 
+                   --  Immutable discriminants might have been rewritten into
+                   --  literals and we want to complain about the original
+                   --  expression.
+ 
+                   if Is_Rewrite_Substitution (Root)
+                     and then Ekind (Root_Id) = E_Enumeration_Literal
+                   then
+                      Root := Original_Node (Root);
+                   else
+                      exit;
+                   end if;
+ 
+                when N_Selected_Component =>
+                   if Ekind (Entity (Selector_Name (Root))) = E_Discriminant
+                   then
+                      Error_Msg_N
+                        ("discriminant cannot appear in Modifies contract",
+                         Root);
+                      return;
+                   end if;
+ 
+                   Root := Prefix (Root);
+ 
+                when N_Explicit_Dereference | N_Indexed_Component =>
+                   Root := Prefix (Root);
+ 
+                when others =>
+                   --  Immutable discriminants might have been rewritten into
+                   --  literals and we want to complain about the original
+                   --  expression.
+ 
+                   if Is_Rewrite_Substitution (Root)
+                     and then Nkind (Root) in N_Character_Literal
+                                            | N_Integer_Literal
+                                            | N_Null
+                   then
+                      Root := Original_Node (Root);
+                   else
+                      Error_Msg_N
+                        ("modified expression must be a part " &
+                         "of subprogram output",
+                         Root);
+                      return;
+                   end if;
+ 
+             end case;
+          end loop;
+ 
+          if Is_Object (Root_Id) or else Ekind (Root_Id) = E_Abstract_State then
+             --  ??? check if named object is subprogram output
+             null;
+          else
+             Error_Msg_NE
+               ("& cannot appear in Modifies contract", Root, Root_Id);
+          end if;
+       end Analyze_Object;
+ 
+       --  Local variables
+ 
+       Clauses : constant Node_Id := Expression (Get_Argument (N, Spec_Id));
+ 
+       Saved_Ghost_Config : constant Ghost_Config_Type := Ghost_Config;
+       --  Save the Ghost-related attributes to restore on exit
+ 
+       Clause        : Node_Id;
+       Restore_Scope : Boolean := False;
+ 
+    --  Start of processing for Analyze_Modifies_In_Decl_Part
+ 
+    begin
+       --  Do not analyze the pragma multiple times
+ 
+       if Is_Analyzed_Pragma (N) then
+          return;
+       end if;
+ 
+       --  Set the Ghost mode in effect from the pragma. Due to the delayed
+       --  analysis of the pragma, the Ghost mode at point of declaration and
+       --  point of analysis may not necessarily be the same. Use the mode in
+       --  effect at the point of declaration.
+ 
+       Set_Ghost_Mode (N);
+ 
+       --  Parse represents the modifies specification as an aggregate
+       --  where clauses with guards or multiple objects become component
+       --  associations, while clauses with single objects and no guards
+       --  become expressions.
+ 
+       pragma Assert
+         (Present (Component_Associations (Clauses))
+            or
+          Present (Expressions (Clauses)));
+ 
+       --  Check that the expression is a proper aggregate (no parentheses)
+ 
+       if Paren_Count (Clauses) /= 0 then
+          Error_Msg_F -- CODEFIX
+            ("redundant parentheses", Clauses);
+       end if;
+ 
+       --  Ensure that the formal parameters are visible when analyzing all
+       --  clauses. This falls out of the general rule of aspects pertaining
+       --  to subprogram declarations.
+ 
+       if not In_Open_Scopes (Spec_Id) then
+          Restore_Scope := True;
+          Push_Scope (Spec_Id);
+ 
+          if Is_Generic_Subprogram (Spec_Id) then
+             Install_Generic_Formals (Spec_Id);
+          else
+             Install_Formals (Spec_Id);
+          end if;
+       end if;
+ 
+       Clause := First (Component_Associations (Clauses));
+       while Present (Clause) loop
+          Analyze_Clause (Clause);
+          Next (Clause);
+       end loop;
+ 
+       Clause := First (Expressions (Clauses));
+       while Present (Clause) loop
+          Analyze_Object (Clause);
+          Next (Clause);
+       end loop;
+ 
+       if Restore_Scope then
+          End_Scope;
+       end if;
+ 
+       Set_Is_Analyzed_Pragma (N);
+ 
+       Restore_Ghost_Region (Saved_Ghost_Config);
+    end Analyze_Modifies_In_Decl_Part;
+ 
     ---------------------
     -- Analyze_Part_Of --
     ---------------------
*************** package body Sem_Prag is
*** 5154,5160 ****
        procedure Ensure_Aggregate_Form (Arg : Node_Id);
        --  Subsidiary routine to the processing of pragmas Abstract_State,
        --  Contract_Cases, Depends, Exceptional_Cases, Global, Initializes,
!       --  Refined_Depends, Refined_Global, Refined_State and
        --  Subprogram_Variant. Transform argument Arg into an aggregate if not
        --  one already. N_Null is never transformed. Arg may denote an aspect
        --  specification or a pragma argument association.
--- 5433,5439 ----
        procedure Ensure_Aggregate_Form (Arg : Node_Id);
        --  Subsidiary routine to the processing of pragmas Abstract_State,
        --  Contract_Cases, Depends, Exceptional_Cases, Global, Initializes,
!       --  Modifies, Refined_Depends, Refined_Global, Refined_State and
        --  Subprogram_Variant. Transform argument Arg into an aggregate if not
        --  one already. N_Null is never transformed. Arg may denote an aspect
        --  specification or a pragma argument association.
*************** package body Sem_Prag is
*** 5933,5955 ****
              declare
                 Expr : constant Node_Id := Expression (Get_Argument (N));
  
              begin
                 if Pname = Name_Pre_Class then
                    if Is_Ignored_In_Codegen (N) then
                       Set_Ignored_Class_Preconditions (Subp_Id,
!                        New_Copy_Tree (Expr));
                    else
!                      Set_Class_Preconditions (Subp_Id, New_Copy_Tree (Expr));
                    end if;
  
                 else
                    if Is_Ignored_In_Codegen (N) then
                       Set_Ignored_Class_Postconditions (Subp_Id,
!                        New_Copy_Tree (Expr));
                    else
!                      Set_Class_Postconditions (Subp_Id, New_Copy_Tree (Expr));
                    end if;
                 end if;
              end;
           end if;
        end Analyze_Pre_Post_Condition;
--- 6212,6242 ----
              declare
                 Expr : constant Node_Id := Expression (Get_Argument (N));
  
+                Class_Wide_Expr : constant Node_Id := New_Copy_Tree (Expr);
+ 
              begin
                 if Pname = Name_Pre_Class then
                    if Is_Ignored_In_Codegen (N) then
                       Set_Ignored_Class_Preconditions (Subp_Id,
!                        Class_Wide_Expr);
                    else
!                      Set_Class_Preconditions (Subp_Id, Class_Wide_Expr);
                    end if;
  
                 else
                    if Is_Ignored_In_Codegen (N) then
                       Set_Ignored_Class_Postconditions (Subp_Id,
!                        Class_Wide_Expr);
                    else
!                      Set_Class_Postconditions (Subp_Id, Class_Wide_Expr);
                    end if;
                 end if;
+ 
+                --  Attach the copied class-wide expression to the AST, so that
+                --  its original context can be retrieved by climbing the chain
+                --  of parents.
+ 
+                Set_Parent (Class_Wide_Expr, N);
              end;
           end if;
        end Analyze_Pre_Post_Condition;
*************** package body Sem_Prag is
*** 15695,15714 ****
                 Preanalyze_And_Resolve (Arg_Message, Standard_String);
              end if;
  
!             if Expander_Active and Is_Ignored_In_Codegen (N) then
! 
!                --  Even though technically ignored assertions are not ghost
!                --  code they should behave the same way. Meaning that they
!                --  should be analyzed but they should not affect the generated
!                --  code. Use the ignored ghost mechanism here to ensure that
!                --  the original pragma and any expanded code is also removed.
!                --  Ideally these two cases should be separated in the
!                --  implementation ???
! 
!                Mark_Ghost_Pragma (N, Opt.Ignore);
  
                 In_Assertion_Expr := In_Assertion_Expr + 1;
!                Analyze_And_Resolve (Arg_Check, Any_Boolean);
                 In_Assertion_Expr := In_Assertion_Expr - 1;
  
                 --  Suppress any warnings on the condition we might get
--- 15982,15993 ----
                 Preanalyze_And_Resolve (Arg_Message, Standard_String);
              end if;
  
!             --  When expansion is active but check is not, only preanalyze the
!             --  boolean to avoid pulling useless dependencies.
  
+             if Expander_Active and Is_Ignored_In_Codegen (N) then
                 In_Assertion_Expr := In_Assertion_Expr + 1;
!                Preanalyze_And_Resolve (Arg_Check, Any_Boolean);
                 In_Assertion_Expr := In_Assertion_Expr - 1;
  
                 --  Suppress any warnings on the condition we might get
*************** package body Sem_Prag is
*** 15719,15724 ****
--- 15998,16008 ----
  
                 Check_Assertion_Failure (Arg_Check);
  
+                --  Rewrite the pragma as a null statement
+ 
+                Rewrite (N, Make_Null_Statement (Loc));
+                Analyze (N);
+ 
              --  Check is active or expansion not active. In these cases we can
              --  just go ahead and analyze the boolean with no worries.
  
*************** package body Sem_Prag is
*** 20522,20528 ****
                    Pop_Scope;
                 end if;
  
-                Init_Or_Norm_Scalars := True;
                 Initialize_Scalars   := True;
              end if;
           end Do_Initialize_Scalars;
--- 20806,20811 ----
*************** package body Sem_Prag is
*** 20746,20752 ****
                    Error_Msg_N
                      ("pragma Interface is an obsolescent feature?j?", N);
                    Error_Msg_N
!                     ("|use pragma Import instead?j?", N);
                 end if;
              end if;
  
--- 21029,21035 ----
                    Error_Msg_N
                      ("pragma Interface is an obsolescent feature?j?", N);
                    Error_Msg_N
!                     ("\use pragma Import instead?j?", N);
                 end if;
              end if;
  
*************** package body Sem_Prag is
*** 20783,20789 ****
                    Error_Msg_N
                      ("pragma Interface_Name is an obsolescent feature?j?", N);
                    Error_Msg_N
!                     ("|use pragma Import instead?j?", N);
                 end if;
              end if;
  
--- 21066,21072 ----
                    Error_Msg_N
                      ("pragma Interface_Name is an obsolescent feature?j?", N);
                    Error_Msg_N
!                     ("\use pragma Import instead?j?", N);
                 end if;
              end if;
  
*************** package body Sem_Prag is
*** 22189,22194 ****
--- 22472,22622 ----
              Check_Arg_Count (1);
              Check_Arg_Is_Integer_Literal (Arg1);
  
+          --------------
+          -- Modifies --
+          --------------
+ 
+          --  pragma Modifies ( SUBPROGRAM_VARIANT_LIST );
+ 
+          --  pragma Modifies (MODIFIES_SPECIFICATION);
+          --
+          --  MODIFIES_SPECIFICATION ::=
+          --      MODIFIES_CLAUSE
+          --    | (MODIFIES_CLAUSE {, MODIFIES_CLAUSE});
+          --
+          --  MODIFIES_CLAUSE ::= MODIFIED_OBJECTS { when GUARD }
+          --
+          --  GUARD ::= boolean_EXPRESSION
+          --
+          --  MODIFIED_OBJECTS ::=
+          --      MODIFIED_OBJECT
+          --    | (MODIFIED_OBJECT {, MODIFIED_OBJECT})
+          --
+          --  MODIFIED_OBJECT ::=
+          --      name
+          --    | MODIFIED_OBJECT . all
+          --    | MODIFIED_OBJECT . component_selector_name
+          --    | MODIFIED_OBJECT (expression {, expression})
+ 
+          --  Characteristics:
+ 
+          --    * Analysis - The annotation undergoes initial checks to verify
+          --    the legal placement and context. Secondary checks preanalyze the
+          --    expressions in:
+ 
+          --       Analyze_Modifies_In_Decl_Part
+ 
+          --    * Expansion - The annotation is expanded during the expansion of
+          --    the related subprogram [body] contract as performed in:
+ 
+          --       Expand_Subprogram_Contract
+ 
+          --    * Template - The annotation utilizes the generic template of the
+          --    related subprogram [body] when it is:
+ 
+          --       aspect on subprogram declaration
+          --       aspect on stand-alone subprogram body
+          --       pragma on stand-alone subprogram body
+ 
+          --    The annotation must prepare its own template when it is:
+ 
+          --       pragma on subprogram declaration
+ 
+          --    * Globals - Capture of global references must occur after full
+          --    analysis.
+ 
+          --    * Instance - The annotation is instantiated automatically when
+          --    the related generic subprogram [body] is instantiated except for
+          --    the "pragma on subprogram declaration" case. In that scenario
+          --    the annotation must instantiate itself.
+ 
+          when Pragma_Modifies => Modifies : declare
+             Spec_Id   : Entity_Id;
+             Subp_Decl : Node_Id;
+             Subp_Spec : Node_Id;
+ 
+          begin
+             GNAT_Pragma;
+             Check_No_Identifiers;
+             Check_Arg_Count (1);
+ 
+             --  Ensure the proper placement of the pragma. Modifies must be
+             --  associated with a subprogram declaration or a body that acts
+             --  as a spec.
+ 
+             Subp_Decl :=
+               Find_Related_Declaration_Or_Body (N, Do_Checks => True);
+ 
+             --  Generic subprogram
+ 
+             if Nkind (Subp_Decl) = N_Generic_Subprogram_Declaration then
+                null;
+ 
+             --  Body acts as spec
+ 
+             elsif Nkind (Subp_Decl) = N_Subprogram_Body
+               and then No (Corresponding_Spec (Subp_Decl))
+             then
+                null;
+ 
+             --  Body stub acts as spec
+ 
+             elsif Nkind (Subp_Decl) = N_Subprogram_Body_Stub
+               and then No (Corresponding_Spec_Of_Stub (Subp_Decl))
+             then
+                null;
+ 
+             --  Subprogram
+ 
+             elsif Nkind (Subp_Decl) = N_Subprogram_Declaration then
+                Subp_Spec := Specification (Subp_Decl);
+ 
+                --  Pragma Modifies is forbidden on null procedures, as this
+                --  may lead to potential ambiguities in behavior when interface
+                --  null procedures are involved. Also, it just wouldn't make
+                --  sense, because null procedure doesn't modify anything.
+ 
+                if Nkind (Subp_Spec) = N_Procedure_Specification
+                  and then Null_Present (Subp_Spec)
+                then
+                   Error_Msg_N (Fix_Error
+                     ("pragma % cannot apply to null procedure"), N);
+                   return;
+                end if;
+ 
+             else
+                Pragma_Misplaced;
+             end if;
+ 
+             Spec_Id := Unique_Defining_Entity (Subp_Decl);
+ 
+             --  A pragma that applies to a Ghost entity becomes Ghost for the
+             --  purposes of legality checks and removal of ignored Ghost code.
+ 
+             Mark_Ghost_Pragma (N, Spec_Id);
+             Ensure_Aggregate_Form (Get_Argument (N, Spec_Id));
+ 
+             --  Chain the pragma on the contract for further processing by
+             --  Analyze_Subprogram_Variant_In_Decl_Part.
+ 
+             Add_Contract_Item (N, Defining_Entity (Subp_Decl));
+ 
+             --  Fully analyze the pragma when it appears inside a subprogram
+             --  body because it cannot benefit from forward references.
+ 
+             if Nkind (Subp_Decl) in N_Subprogram_Body
+                                   | N_Subprogram_Body_Stub
+             then
+                --  The legality checks of pragma Modifies are affected by the
+                --  SPARK mode in effect and the volatility of the context.
+                --  Analyze all pragmas in a specific order.
+ 
+                Analyze_If_Present (Pragma_SPARK_Mode);
+                Analyze_If_Present (Pragma_Volatile_Function);
+                Analyze_Modifies_In_Decl_Part (N);
+             end if;
+          end Modifies;
+ 
           -------------
           -- No_Body --
           -------------
*************** package body Sem_Prag is
*** 22881,22887 ****
  
              if not (CodePeer_Mode or GNATprove_Mode) then
                 Normalize_Scalars := True;
-                Init_Or_Norm_Scalars := True;
              end if;
  
           -----------------
--- 23309,23314 ----
*************** package body Sem_Prag is
*** 25572,25578 ****
                 Error_Msg_N
                   ("pragma Ravenscar is an obsolescent feature?j?", N);
                 Error_Msg_N
!                  ("|use pragma Profile (Ravenscar) instead?j?", N);
              end if;
  
           -------------------------
--- 25999,26005 ----
                 Error_Msg_N
                   ("pragma Ravenscar is an obsolescent feature?j?", N);
                 Error_Msg_N
!                  ("\use pragma Profile (Ravenscar) instead?j?", N);
              end if;
  
           -------------------------
*************** package body Sem_Prag is
*** 25593,25599 ****
                   ("pragma Restricted_Run_Time is an obsolescent feature?j?",
                    N);
                 Error_Msg_N
!                  ("|use pragma Profile (Restricted) instead?j?", N);
              end if;
  
           ------------------
--- 26020,26026 ----
                   ("pragma Restricted_Run_Time is an obsolescent feature?j?",
                    N);
                 Error_Msg_N
!                  ("\use pragma Profile (Restricted) instead?j?", N);
              end if;
  
           ------------------
*************** package body Sem_Prag is
*** 34931,34936 ****
--- 35358,35364 ----
        Pragma_Max_Entry_Queue_Length         =>  0,
        Pragma_Max_Queue_Length               =>  0,
        Pragma_Memory_Size                    =>  0,
+       Pragma_Modifies                       => -1,
        Pragma_No_Body                        =>  0,
        Pragma_No_Caching                     =>  0,
        Pragma_No_Component_Reordering        => -1,
diff -Nrcpad gcc-17-20260614/gcc/ada/sem_prag.ads gcc-17-20260621/gcc/ada/sem_prag.ads
*** gcc-17-20260614/gcc/ada/sem_prag.ads	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/sem_prag.ads	Sun Jun 21 22:32:05 2026
*************** package Sem_Prag is
*** 81,86 ****
--- 81,87 ----
        Pragma_Invariant                    => True,
        Pragma_Linker_Section               => True,
        Pragma_Lock_Free                    => True,
+       Pragma_Modifies                     => True,
        Pragma_No_Elaboration_Code_All      => True,
        Pragma_No_Return                    => True,
        Pragma_Obsolescent                  => True,
*************** package Sem_Prag is
*** 148,153 ****
--- 149,155 ----
        Pragma_Exceptional_Cases         => True,
        Pragma_Initial_Condition         => True,
        Pragma_Invariant                 => True,
+       Pragma_Modifies                  => True,
        Pragma_Loop_Invariant            => True,
        Pragma_Loop_Variant              => True,
        Pragma_Post                      => True,
*************** package Sem_Prag is
*** 225,230 ****
--- 227,233 ----
        Pragma_Global              => True,
        Pragma_Inline              => True,
        Pragma_Inline_Always       => True,
+       Pragma_Modifies            => True,
        Pragma_Post                => True,
        Pragma_Post_Class          => True,
        Pragma_Postcondition       => True,
*************** package Sem_Prag is
*** 381,386 ****
--- 384,396 ----
     procedure Analyze_Initializes_In_Decl_Part (N : Node_Id);
     --  Perform full analysis of delayed pragma Initializes
  
+    procedure Analyze_Modifies_In_Decl_Part
+      (N         : Node_Id;
+       Freeze_Id : Entity_Id := Empty);
+    --  Perform full analysis of delayed pragma Modifies. Freeze_Id is the
+    --  entity of [generic] package body or [generic] subprogram body which
+    --  caused "freezing" of the related contract where the pragma resides.
+ 
     procedure Analyze_Part_Of_In_Decl_Part
       (N         : Node_Id;
        Freeze_Id : Entity_Id := Empty);
*************** package Sem_Prag is
*** 546,551 ****
--- 556,562 ----
     --    Initializes
     --    Max_Entry_Queue_Length
     --    Max_Queue_Length
+    --    Modifies
     --    Post
     --    Post_Class
     --    Postcondition
diff -Nrcpad gcc-17-20260614/gcc/ada/sem_res.adb gcc-17-20260621/gcc/ada/sem_res.adb
*** gcc-17-20260614/gcc/ada/sem_res.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/sem_res.adb	Sun Jun 21 22:32:05 2026
*************** package body Sem_Res is
*** 646,655 ****
     ----------------------------
  
     procedure Check_Discriminant_Use (N : Node_Id) is
!       PN   : constant Node_Id   := Parent (N);
        Disc : constant Entity_Id := Entity (N);
-       P    : Node_Id;
-       D    : Node_Id;
  
        procedure Check_Legality_In_Constraint (Alone : Boolean);
        --  RM 3.8(12/3): Check that the discriminant mentioned in a constraint
--- 646,653 ----
     ----------------------------
  
     procedure Check_Discriminant_Use (N : Node_Id) is
!       Par  : constant Node_Id   := Parent (N);
        Disc : constant Entity_Id := Entity (N);
  
        procedure Check_Legality_In_Constraint (Alone : Boolean);
        --  RM 3.8(12/3): Check that the discriminant mentioned in a constraint
*************** package body Sem_Res is
*** 669,685 ****
           end if;
        end Check_Legality_In_Constraint;
  
     begin
        --  Any use in a spec-expression is legal
  
        if In_Spec_Expression then
           null;
  
!       elsif Nkind (PN) = N_Range then
  
           --  Discriminant cannot be used to constrain a scalar type
  
!          P := Parent (PN);
  
           if Nkind (P) = N_Range_Constraint
             and then Nkind (Parent (P)) = N_Subtype_Indication
--- 667,690 ----
           end if;
        end Check_Legality_In_Constraint;
  
+       --  Local variables
+ 
+       P : Node_Id;
+       D : Node_Id;
+ 
+    --  Start of processing for Check_Discriminant_Use
+ 
     begin
        --  Any use in a spec-expression is legal
  
        if In_Spec_Expression then
           null;
  
!       elsif Nkind (Par) = N_Range then
  
           --  Discriminant cannot be used to constrain a scalar type
  
!          P := Parent (Par);
  
           if Nkind (P) = N_Range_Constraint
             and then Nkind (Parent (P)) = N_Subtype_Indication
*************** package body Sem_Res is
*** 761,767 ****
  
                 --  Check that it is the high bound
  
!                if N /= High_Bound (PN)
                   or else No (Discriminant_Default_Value (Disc))
                 then
                    goto No_Danger;
--- 766,772 ----
  
                 --  Check that it is the high bound
  
!                if N /= High_Bound (Par)
                   or else No (Discriminant_Default_Value (Disc))
                 then
                    goto No_Danger;
*************** package body Sem_Res is
*** 789,801 ****
                 while True
                   and then Present (TB)
                   and then Present (CB)
!                  and then CB /= PN
                 loop
                    Next_Index (TB);
                    Next (CB);
                 end loop;
  
!                if CB /= PN then
                    goto No_Danger;
                 end if;
  
--- 794,806 ----
                 while True
                   and then Present (TB)
                   and then Present (CB)
!                  and then CB /= Par
                 loop
                    Next_Index (TB);
                    Next (CB);
                 end loop;
  
!                if CB /= Par then
                    goto No_Danger;
                 end if;
  
*************** package body Sem_Res is
*** 817,824 ****
  
        --  Legal case is in index or discriminant constraint
  
!       elsif Nkind (PN) in N_Index_Or_Discriminant_Constraint
!                         | N_Discriminant_Association
        then
           Check_Legality_In_Constraint (Paren_Count (N) = 0);
  
--- 822,829 ----
  
        --  Legal case is in index or discriminant constraint
  
!       elsif Nkind (Par) in N_Index_Or_Discriminant_Constraint
!                          | N_Discriminant_Association
        then
           Check_Legality_In_Constraint (Paren_Count (N) = 0);
  
*************** package body Sem_Res is
*** 826,833 ****
        --  subexpression of) a constraint for a component.
  
        else
!          D := PN;
!          P := Parent (PN);
           while Nkind (P) not in
             N_Component_Declaration | N_Subtype_Indication | N_Entry_Declaration
           loop
--- 831,838 ----
        --  subexpression of) a constraint for a component.
  
        else
!          D := Par;
!          P := Parent (Par);
           while Nkind (P) not in
             N_Component_Declaration | N_Subtype_Indication | N_Entry_Declaration
           loop
*************** package body Sem_Res is
*** 5328,5341 ****
     -----------------------
  
     procedure Resolve_Allocator (N : Node_Id; Typ : Entity_Id) is
!       Desig_T  : constant Entity_Id := Designated_Type (Typ);
!       E        : constant Node_Id   := Expression (N);
!       Subtyp   : Entity_Id;
!       Discrim  : Entity_Id;
!       Constr   : Node_Id;
!       Aggr     : Node_Id;
!       Assoc    : Node_Id := Empty;
!       Disc_Exp : Node_Id;
  
        procedure Check_Allocator_Discrim_Accessibility
          (Disc_Exp  : Node_Id;
--- 5333,5343 ----
     -----------------------
  
     procedure Resolve_Allocator (N : Node_Id; Typ : Entity_Id) is
!       Desig_T : constant Entity_Id := Designated_Type (Typ);
!       E       : constant Node_Id   := Expression (N);
! 
!       procedure Accessibility_Error (Exp : Node_Id);
!       --  Give an error about the accessibility level of the allocator
  
        procedure Check_Allocator_Discrim_Accessibility
          (Disc_Exp  : Node_Id;
*************** package body Sem_Res is
*** 5343,5351 ****
        --  Check that accessibility level associated with an access discriminant
        --  initialized in an allocator by the expression Disc_Exp is not deeper
        --  than the level of the allocator type Alloc_Typ. An error message is
!       --  issued if this condition is violated. Specialized checks are done for
!       --  the cases of a constraint expression which is an access attribute or
!       --  an access discriminant.
  
        procedure Check_Allocator_Discrim_Accessibility_Exprs
          (Curr_Exp  : Node_Id;
--- 5345,5351 ----
        --  Check that accessibility level associated with an access discriminant
        --  initialized in an allocator by the expression Disc_Exp is not deeper
        --  than the level of the allocator type Alloc_Typ. An error message is
!       --  issued if this condition is violated.
  
        procedure Check_Allocator_Discrim_Accessibility_Exprs
          (Curr_Exp  : Node_Id;
*************** package body Sem_Res is
*** 5357,5362 ****
--- 5357,5394 ----
        --  If the allocator is an actual in a call, it is allowed to be class-
        --  wide when the context is not because it is a controlling actual.
  
+       -------------------------
+       -- Accessibility_Error --
+       -------------------------
+ 
+       procedure Accessibility_Error (Exp : Node_Id) is
+          Prefix : constant String :=
+            (if Nkind (Exp) = N_Attribute_Reference
+             then "prefix of attribute"
+             else "type of access discriminant");
+          Message : constant String :=
+            Prefix & " has deeper level than allocator type";
+ 
+       begin
+          --  In an instance, this is a runtime check, but one we know will fail
+          --  so generate an appropriate warning. As usual, this kind of warning
+          --  is an error in SPARK mode or if No_Dynamic_Accessibility_Checks.
+ 
+          if In_Instance_Body then
+             Error_Msg_Warn := SPARK_Mode /= On
+                                 and then not
+                                   No_Dynamic_Accessibility_Checks_Enabled (N);
+             Error_Msg_N (Message & "<<", Exp);
+             Error_Msg_F ("\Program_Error [<<", Exp);
+             Insert_Action (N,
+               Make_Raise_Program_Error (Sloc (N),
+                 Reason => PE_Accessibility_Check_Failed));
+ 
+          else
+             Error_Msg_N (Message, Exp);
+          end if;
+       end Accessibility_Error;
+ 
        -------------------------------------------
        -- Check_Allocator_Discrim_Accessibility --
        -------------------------------------------
*************** package body Sem_Res is
*** 5366,5408 ****
           Alloc_Typ : Entity_Id)
        is
        begin
!          if Type_Access_Level (Etype (Disc_Exp)) >
!             Deepest_Type_Access_Level (Alloc_Typ)
!          then
!             Error_Msg_N
!               ("operand type has deeper level than allocator type", Disc_Exp);
! 
!          --  When the expression is an Access attribute the level of the prefix
!          --  object must not be deeper than that of the allocator's type.
  
!          elsif Nkind (Disc_Exp) = N_Attribute_Reference
!            and then Get_Attribute_Id (Attribute_Name (Disc_Exp)) =
!                       Attribute_Access
!            and then Static_Accessibility_Level
!                       (Disc_Exp, Zero_On_Dynamic_Level)
!                         > Deepest_Type_Access_Level (Alloc_Typ)
           then
!             Error_Msg_N
!               ("prefix of attribute has deeper level than allocator type",
!                Disc_Exp);
! 
!          --  When the expression is an access discriminant the check is against
!          --  the level of the prefix object.
  
!          elsif Ekind (Etype (Disc_Exp)) = E_Anonymous_Access_Type
!            and then Nkind (Disc_Exp) = N_Selected_Component
!            and then Static_Accessibility_Level
!                       (Disc_Exp, Zero_On_Dynamic_Level)
!                         > Deepest_Type_Access_Level (Alloc_Typ)
           then
!             Error_Msg_N
!               ("access discriminant has deeper level than allocator type",
!                Disc_Exp);
! 
!          --  All other cases are legal
! 
!          else
!             null;
           end if;
        end Check_Allocator_Discrim_Accessibility;
  
--- 5398,5418 ----
           Alloc_Typ : Entity_Id)
        is
        begin
!          --  The accessibility level of a function call whose result type is
!          --  an anonymous access type used to define the discriminant of an
!          --  object is the level of the object (RM 3.10.2(10.3, 14.1)), and
!          --  this level is that of the access type for an allocator.
  
!          if Nkind (Disc_Exp) = N_Function_Call
!            and then Ekind (Etype (Disc_Exp)) = E_Anonymous_Access_Type
           then
!             return;
!          end if;
  
!          if Static_Accessibility_Level (Disc_Exp, Zero_On_Dynamic_Level)
!               > Deepest_Type_Access_Level (Alloc_Typ)
           then
!             Accessibility_Error (Disc_Exp);
           end if;
        end Check_Allocator_Discrim_Accessibility;
  
*************** package body Sem_Res is
*** 5475,5480 ****
--- 5485,5499 ----
             and then Is_Dispatching_Operation (Entity (Name (Par)));
        end In_Dispatching_Context;
  
+       --  Local variables
+ 
+       Assoc     : Node_Id;
+       Disc_Exp  : Node_Id;
+       Disc_Elmt : Elmt_Id;
+       Discrim   : Entity_Id;
+       Exp       : Node_Id;
+       Subtyp    : Entity_Id;
+ 
     --  Start of processing for Resolve_Allocator
  
     begin
*************** package body Sem_Res is
*** 5564,5592 ****
           --  deeper than the type of the allocator (in contrast to access
           --  parameters, where the level of the actual can be arbitrary).
  
!          --  We can't use Valid_Conversion to perform this check because in
!          --  general the type of the allocator is unrelated to the type of
!          --  the access discriminant.
  
           if Ekind (Typ) /= E_Anonymous_Access_Type
             or else Is_Local_Anonymous_Access (Typ)
           then
              Subtyp := Entity (Subtype_Mark (E));
  
!             Aggr := Original_Node (Expression (E));
  
!             if Has_Discriminants (Subtyp)
!               and then Nkind (Aggr) in N_Aggregate | N_Extension_Aggregate
              then
                 Discrim := First_Discriminant (Base_Type (Subtyp));
  
                 --  Get the first component expression of the aggregate
  
!                if Present (Expressions (Aggr)) then
!                   Disc_Exp := First (Expressions (Aggr));
  
!                elsif Present (Component_Associations (Aggr)) then
!                   Assoc := First (Component_Associations (Aggr));
  
                    if Present (Assoc) then
                       Disc_Exp := Expression (Assoc);
--- 5583,5613 ----
           --  deeper than the type of the allocator (in contrast to access
           --  parameters, where the level of the actual can be arbitrary).
  
!          --  We cannot use Valid_Conversion to perform this check because
!          --  in general the type of the allocator is unrelated to the type
!          --  of the access discriminant.
  
           if Ekind (Typ) /= E_Anonymous_Access_Type
             or else Is_Local_Anonymous_Access (Typ)
           then
              Subtyp := Entity (Subtype_Mark (E));
  
!             Exp := Original_Node (Expression (E));
  
!             if Has_Anonymous_Access_Discriminant (Subtyp)
!               and then Nkind (Exp) in N_Aggregate | N_Extension_Aggregate
              then
                 Discrim := First_Discriminant (Base_Type (Subtyp));
  
                 --  Get the first component expression of the aggregate
  
!                Assoc := Empty;
  
!                if Present (Expressions (Exp)) then
!                   Disc_Exp := First (Expressions (Exp));
! 
!                elsif Present (Component_Associations (Exp)) then
!                   Assoc := First (Component_Associations (Exp));
  
                    if Present (Assoc) then
                       Disc_Exp := Expression (Assoc);
*************** package body Sem_Res is
*** 5615,5621 ****
                          Next (Disc_Exp);
  
                       else
!                         Assoc := First (Component_Associations (Aggr));
  
                          if Present (Assoc) then
                             Disc_Exp := Expression (Assoc);
--- 5636,5642 ----
                          Next (Disc_Exp);
  
                       else
!                         Assoc := First (Component_Associations (Exp));
  
                          if Present (Assoc) then
                             Disc_Exp := Expression (Assoc);
*************** package body Sem_Res is
*** 5625,5630 ****
--- 5646,5661 ----
                       end if;
                    end if;
                 end loop;
+ 
+             --  Apply the RM 3.10.2(12.4) rule to formal parameters
+ 
+             elsif Has_Anonymous_Access_Discriminant (Subtyp)
+               and then Is_Entity_Name (Exp)
+               and then Is_Formal (Entity (Exp))
+               and then Static_Accessibility_Level (Exp, Zero_On_Dynamic_Level)
+                          > Deepest_Type_Access_Level (Typ)
+             then
+                Accessibility_Error (Exp);
              end if;
           end if;
  
*************** package body Sem_Res is
*** 5643,5677 ****
           --  expression used to constrain an access discriminant cannot be
           --  deeper than the type of the allocator (in contrast to access
           --  parameters, where the level of the actual can be arbitrary).
!          --  We can't use Valid_Conversion to perform this check because
           --  in general the type of the allocator is unrelated to the type
           --  of the access discriminant.
  
           if Nkind (Original_Node (E)) = N_Subtype_Indication
             and then (Ekind (Typ) /= E_Anonymous_Access_Type
                        or else Is_Local_Anonymous_Access (Typ))
           then
!             Subtyp := Entity (Subtype_Mark (Original_Node (E)));
  
!             if Has_Discriminants (Subtyp) then
!                Discrim := First_Discriminant (Base_Type (Subtyp));
!                Constr := First (Constraints (Constraint (Original_Node (E))));
!                while Present (Discrim) and then Present (Constr) loop
!                   if Ekind (Etype (Discrim)) = E_Anonymous_Access_Type then
!                      if Nkind (Constr) = N_Discriminant_Association then
!                         Disc_Exp := Expression (Constr);
!                      else
!                         Disc_Exp := Constr;
!                      end if;
  
!                      Check_Allocator_Discrim_Accessibility_Exprs
!                        (Disc_Exp, Typ);
!                   end if;
  
!                   Next_Discriminant (Discrim);
!                   Next (Constr);
!                end loop;
!             end if;
           end if;
        end if;
  
--- 5674,5711 ----
           --  expression used to constrain an access discriminant cannot be
           --  deeper than the type of the allocator (in contrast to access
           --  parameters, where the level of the actual can be arbitrary).
! 
!          --  We cannot use Valid_Conversion to perform this check because
           --  in general the type of the allocator is unrelated to the type
           --  of the access discriminant.
  
           if Nkind (Original_Node (E)) = N_Subtype_Indication
+            and then Has_Anonymous_Access_Discriminant
+                       (Entity (Subtype_Mark (Original_Node (E))))
             and then (Ekind (Typ) /= E_Anonymous_Access_Type
                        or else Is_Local_Anonymous_Access (Typ))
           then
!             --  We cannot directly use the constraints of a subtype indication
!             --  because they are not necessarily given in the expected order.
  
!             if Nkind (E) = N_Subtype_Indication then
!                Subtyp := Process_Subtype (E, N);
!             else
!                Subtyp := Etype (E);
!             end if;
  
!             Discrim := First_Discriminant (Base_Type (Subtyp));
!             Disc_Elmt := First_Elmt (Discriminant_Constraint (Subtyp));
  
!             while Present (Discrim) loop
!                if Ekind (Etype (Discrim)) = E_Anonymous_Access_Type then
!                   Disc_Exp := Node (Disc_Elmt);
!                   Check_Allocator_Discrim_Accessibility_Exprs (Disc_Exp, Typ);
!                end if;
! 
!                Next_Discriminant (Discrim);
!                Next_Elmt (Disc_Elmt);
!             end loop;
           end if;
        end if;
  
*************** package body Sem_Res is
*** 14442,14449 ****
                               = N_Component_Declaration)
              then
                 --  In an instance, this is a run-time check, but one we know
!                --  will fail, so generate an appropriate warning. The raise
!                --  will be generated by Expand_N_Type_Conversion.
  
                 if In_Instance_Body then
                    Error_Msg_Warn := SPARK_Mode /= On;
--- 14476,14482 ----
                               = N_Component_Declaration)
              then
                 --  In an instance, this is a run-time check, but one we know
!                --  will fail, so generate an appropriate warning.
  
                 if In_Instance_Body then
                    Error_Msg_Warn := SPARK_Mode /= On;
*************** package body Sem_Res is
*** 14451,14456 ****
--- 14484,14494 ----
                      ("cannot convert local pointer to non-local access type<<",
                       Operand, Report_Errs);
                    Report_Error_N ("\Program_Error [<<", Operand, Report_Errs);
+                   Rewrite (N,
+                     Make_Raise_Program_Error (Sloc (N),
+                       Reason => PE_Accessibility_Check_Failed));
+                   Set_Etype (N, Target_Type);
+                   return False;
  
                 --  If not in an instance body, this is a real error
  
*************** package body Sem_Res is
*** 14462,14468 ****
                        ("cannot convert local pointer to non-local access type",
                         Operand, Report_Errs);
                    end if;
- 
                    return False;
                 end if;
  
--- 14500,14505 ----
*************** package body Sem_Res is
*** 14483,14490 ****
                                > Deepest_Type_Access_Level (Target_Type)
                 then
                    --  In an instance, this is a run-time check, but one we know
!                   --  will fail, so generate an appropriate warning. The raise
!                   --  will be generated by Expand_N_Type_Conversion.
  
                    if In_Instance_Body then
                       Error_Msg_Warn := SPARK_Mode /= On;
--- 14520,14526 ----
                                > Deepest_Type_Access_Level (Target_Type)
                 then
                    --  In an instance, this is a run-time check, but one we know
!                   --  will fail, so generate an appropriate warning.
  
                    if In_Instance_Body then
                       Error_Msg_Warn := SPARK_Mode /= On;
*************** package body Sem_Res is
*** 14493,14498 ****
--- 14529,14539 ----
                          & "access type<<", Operand, Report_Errs);
                       Report_Error_N
                         ("\Program_Error [<<", Operand, Report_Errs);
+                      Rewrite (N,
+                        Make_Raise_Program_Error (Sloc (N),
+                          Reason => PE_Accessibility_Check_Failed));
+                      Set_Etype (N, Target_Type);
+                      return False;
  
                    --  If not in an instance body, this is a real error
  
diff -Nrcpad gcc-17-20260614/gcc/ada/sem_util.adb gcc-17-20260621/gcc/ada/sem_util.adb
*** gcc-17-20260614/gcc/ada/sem_util.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/sem_util.adb	Sun Jun 21 22:32:05 2026
*************** package body Sem_Util is
*** 5891,5897 ****
              --  predefined "=" operator.
  
              if Is_Overloadable (Id)
!               and then ((Is_Type_In_Pkg and then not In_Package_Body (Id))
                           or else Is_Primitive (Id)
                           or else not Comes_From_Source (Id))
  
--- 5891,5898 ----
              --  predefined "=" operator.
  
              if Is_Overloadable (Id)
!               and then ((Is_Type_In_Pkg
!                            and then not Declared_In_Package_Body (Id))
                           or else Is_Primitive (Id)
                           or else not Comes_From_Source (Id))
  
*************** package body Sem_Util is
*** 8260,8266 ****
           --  parent spec, and body entities are not visible.
  
           elsif Is_Child_Unit (Def_Id)
!            and then Is_Package_Body_Entity (E)
             and then not In_Package_Body (Current_Scope)
           then
              null;
--- 8261,8267 ----
           --  parent spec, and body entities are not visible.
  
           elsif Is_Child_Unit (Def_Id)
!            and then Declared_In_Package_Body (E)
             and then not In_Package_Body (Current_Scope)
           then
              null;
*************** package body Sem_Util is
*** 10596,10601 ****
--- 10597,10640 ----
        end if;
     end Get_Enclosing_Object;
  
+    ------------------------------------
+    -- Get_Pool_Object_Or_Dereference --
+    ------------------------------------
+ 
+    function Get_Pool_Object_Or_Dereference (Pool : Entity_Id)
+      return Node_Or_Entity_Id
+    is
+       N : Node_Or_Entity_Id;
+ 
+    begin
+       if Present (Renamed_Object (Pool)) then
+          N := Renamed_Object (Pool);
+       else
+          N := Pool;
+       end if;
+ 
+       while Present (N) loop
+          case Nkind (N) is
+             when N_Defining_Identifier | N_Explicit_Dereference =>
+                return N;
+ 
+             when N_Identifier | N_Expanded_Name =>
+                return Entity (N);
+ 
+             when N_Indexed_Component | N_Selected_Component | N_Slice =>
+                N := Prefix (N);
+ 
+             when N_Type_Conversion | N_Unchecked_Type_Conversion =>
+                N := Expression (N);
+ 
+             when others =>
+                exit;
+          end case;
+       end loop;
+ 
+       return Empty;
+    end Get_Pool_Object_Or_Dereference;
+ 
     ---------------------------
     -- Get_Enum_Lit_From_Pos --
     ---------------------------
*************** package body Sem_Util is
*** 20129,20134 ****
--- 20168,20177 ----
        Obj_Ref       : Node_Id;
        Check_Actuals : Boolean) return Boolean
     is
+       function Is_OK_Modifies_Context (Nod : Node_Id) return Boolean;
+       --  Determine whether an arbitrary node appears in the Modifies contract
+       --  as a modified object with no guard.
+ 
        function Is_Protected_Operation_Call (Nod : Node_Id) return Boolean;
        --  Determine whether an arbitrary node denotes a call to a protected
        --  entry, function, or procedure in prefixed form where the prefix is
*************** package body Sem_Util is
*** 20140,20145 ****
--- 20183,20222 ----
        function Within_Volatile_Function (Id : Entity_Id) return Boolean;
        --  Determine whether an arbitrary entity appears in a volatile function
  
+       ----------------------------
+       -- Is_OK_Modifies_Context --
+       ----------------------------
+ 
+       function Is_OK_Modifies_Context (Nod : Node_Id) return Boolean is
+          Aggregate  : Node_Id;
+          Pragma_Arg : Node_Id;
+          Pragma_Nod : Node_Id;
+ 
+       begin
+          Aggregate := Parent (Nod);
+ 
+          if Nkind (Aggregate) = N_Aggregate
+            and then List_Containing (Nod) = Expressions (Aggregate)
+          then
+             Pragma_Arg := Parent (Aggregate);
+          else
+             return False;
+          end if;
+ 
+          if Nkind (Pragma_Arg) = N_Pragma_Argument_Association
+            and then Aggregate = Expression (Pragma_Arg)
+          then
+             Pragma_Nod := Parent (Pragma_Arg);
+          else
+             return False;
+          end if;
+ 
+          return Nkind (Pragma_Nod) = N_Pragma
+            and then List_Containing (Pragma_Arg) =
+              Pragma_Argument_Associations (Pragma_Nod)
+            and then Get_Pragma_Id (Pragma_Nod) = Pragma_Modifies;
+       end Is_OK_Modifies_Context;
+ 
        ---------------------------------
        -- Is_Protected_Operation_Call --
        ---------------------------------
*************** package body Sem_Util is
*** 20395,20400 ****
--- 20472,20480 ----
           else
              return True;
           end if;
+ 
+       elsif Is_OK_Modifies_Context (Obj_Ref) then
+          return True;
        else
           return False;
        end if;
*************** package body Sem_Util is
*** 21711,21716 ****
--- 21791,21797 ----
          or else Nam = Name_Exceptional_Cases
          or else Nam = Name_Extensions_Visible
          or else Nam = Name_Global
+         or else Nam = Name_Modifies
          or else Nam = Name_Post
          or else Nam = Name_Post_Class
          or else Nam = Name_Postcondition
diff -Nrcpad gcc-17-20260614/gcc/ada/sem_util.ads gcc-17-20260621/gcc/ada/sem_util.ads
*** gcc-17-20260614/gcc/ada/sem_util.ads	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/sem_util.ads	Sun Jun 21 22:32:05 2026
*************** package Sem_Util is
*** 1295,1300 ****
--- 1295,1305 ----
     --  has not yet been rewritten as a package declaration, and the entity has
     --  to be retrieved from the Instance_Spec of the unit.
  
+    function Get_Pool_Object_Or_Dereference (Pool : Entity_Id)
+      return Node_Or_Entity_Id;
+    --  Return the entity or dereference of which Pool is a part, if it exists.
+    --  Otherwise return Empty.
+ 
     function Get_Pragma_Id (N : Node_Id) return Pragma_Id;
     pragma Inline (Get_Pragma_Id);
     --  Obtains the Pragma_Id from Pragma_Name_Unmapped (N)
*************** package Sem_Util is
*** 2557,2562 ****
--- 2562,2568 ----
     --    Exit_Cases
     --    Extensions_Visible
     --    Global
+    --    Modifies
     --    Post
     --    Post_Class
     --    Postcondition
diff -Nrcpad gcc-17-20260614/gcc/ada/sem_warn.adb gcc-17-20260621/gcc/ada/sem_warn.adb
*** gcc-17-20260614/gcc/ada/sem_warn.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/sem_warn.adb	Sun Jun 21 22:32:05 2026
*************** package body Sem_Warn is
*** 2872,2878 ****
        S : Entity_Id;
  
     begin
!       if Is_Package_Body_Entity (E) then
           return False;
  
        else
--- 2872,2878 ----
        S : Entity_Id;
  
     begin
!       if Declared_In_Package_Body (E) then
           return False;
  
        else
diff -Nrcpad gcc-17-20260614/gcc/ada/sinfo.ads gcc-17-20260621/gcc/ada/sinfo.ads
*** gcc-17-20260614/gcc/ada/sinfo.ads	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/sinfo.ads	Sun Jun 21 22:32:05 2026
*************** package Sinfo is
*** 1648,1653 ****
--- 1648,1654 ----
     --      Global
     --      Initial_Condition
     --      Initializes
+    --      Modifies
     --      Post
     --      Post_Class
     --      Postcondition
*************** package Sinfo is
*** 7985,7993 ****
        --  operation) are also in this list.
  
        --  Contract_Test_Cases contains a collection of pragmas that correspond
!       --  to aspects/pragmas Contract_Cases, Exceptional_Cases, Program_Exit,
!       --  Test_Case and Subprogram_Variant. The ordering in the list is in LIFO
!       --  fashion.
  
        --  Classifications contains pragmas that either declare, categorize, or
        --  establish dependencies between subprogram or package inputs and
--- 7986,7994 ----
        --  operation) are also in this list.
  
        --  Contract_Test_Cases contains a collection of pragmas that correspond
!       --  to aspects/pragmas Contract_Cases, Exceptional_Cases, Modifies,
!       --  Program_Exit, Test_Case and Subprogram_Variant. The ordering in the
!       --  list is in LIFO fashion.
  
        --  Classifications contains pragmas that either declare, categorize, or
        --  establish dependencies between subprogram or package inputs and
diff -Nrcpad gcc-17-20260614/gcc/ada/snames.ads-tmpl gcc-17-20260621/gcc/ada/snames.ads-tmpl
*** gcc-17-20260614/gcc/ada/snames.ads-tmpl	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/snames.ads-tmpl	Sun Jun 21 22:32:05 2026
*************** package Snames is
*** 627,632 ****
--- 627,633 ----
     Name_Max_Entry_Queue_Length         : constant Name_Id := N + $; -- Ada 12
     Name_Max_Queue_Length               : constant Name_Id := N + $; -- GNAT
     Name_Memory_Size                    : constant Name_Id := N + $; -- Ada 83
+    Name_Modifies                       : constant Name_Id := N + $; -- GNAT
     Name_No_Body                        : constant Name_Id := N + $; -- GNAT
     Name_No_Caching                     : constant Name_Id := N + $; -- GNAT
     Name_No_Elaboration_Code_All        : constant Name_Id := N + $; -- GNAT
*************** package Snames is
*** 1953,1958 ****
--- 1954,1960 ----
        Pragma_Max_Entry_Queue_Length,
        Pragma_Max_Queue_Length,
        Pragma_Memory_Size,
+       Pragma_Modifies,
        Pragma_No_Body,
        Pragma_No_Caching,
        Pragma_No_Elaboration_Code_All,
diff -Nrcpad gcc-17-20260614/gcc/ada/sprint.ads gcc-17-20260621/gcc/ada/sprint.ads
*** gcc-17-20260614/gcc/ada/sprint.ads	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/sprint.ads	Sun Jun 21 22:32:05 2026
*************** package Sprint is
*** 125,131 ****
     --  Like Sprint_Node_List, but prints nothing if List = No_List
  
     procedure Sprint_Indented_List (List : List_Id);
!    --  Like Sprint_Line_List, except that the indentation level is increased
     --  before outputting the list of items, and then decremented (back to its
     --  original level) before returning to the caller.
  
--- 125,131 ----
     --  Like Sprint_Node_List, but prints nothing if List = No_List
  
     procedure Sprint_Indented_List (List : List_Id);
!    --  Like Sprint_Node_List, except that the indentation level is increased
     --  before outputting the list of items, and then decremented (back to its
     --  original level) before returning to the caller.
  
diff -Nrcpad gcc-17-20260614/gcc/ada/styleg.adb gcc-17-20260621/gcc/ada/styleg.adb
*** gcc-17-20260614/gcc/ada/styleg.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/styleg.adb	Sun Jun 21 22:32:05 2026
*************** package body Styleg is
*** 499,505 ****
                      or else Style_Check_Comments_Spacing = 1
                    then
                       Error_Msg -- CODEFIX
!                        ("(style) space required?c?", Scan_Ptr + 2);
                    else
                       Error_Msg -- CODEFIX
                         ("(style) two spaces required?c?", Scan_Ptr + 2);
--- 499,505 ----
                      or else Style_Check_Comments_Spacing = 1
                    then
                       Error_Msg -- CODEFIX
!                        ("(style) space required?C?", Scan_Ptr + 2);
                    else
                       Error_Msg -- CODEFIX
                         ("(style) two spaces required?c?", Scan_Ptr + 2);
diff -Nrcpad gcc-17-20260614/gcc/ada/targparm.adb gcc-17-20260621/gcc/ada/targparm.adb
*** gcc-17-20260614/gcc/ada/targparm.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/targparm.adb	Sun Jun 21 22:32:05 2026
*************** package body Targparm is
*** 630,636 ****
  
           elsif Looking_At_Skip ("pragma Normalize_Scalars;") then
              Opt.Normalize_Scalars := True;
-             Opt.Init_Or_Norm_Scalars := True;
              goto Line_Loop_Continue;
  
           --  Partition_Elaboration_Policy
--- 630,635 ----
diff -Nrcpad gcc-17-20260614/gcc/ada/tracebak.c gcc-17-20260621/gcc/ada/tracebak.c
*** gcc-17-20260614/gcc/ada/tracebak.c	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/tracebak.c	Sun Jun 21 22:32:05 2026
*************** __gnat_backtrace (void **array,
*** 201,208 ****
     o FRAME_OFFSET, the offset, from a given frame address or frame pointer
       value, at which this layout will be found,
  
!    o FRAME_LEVEL, controls how many frames up we get at to start with,
!      from the initial frame pointer we compute by way of the GCC builtin,
  
       0 is most often the appropriate value. 1 may be necessary on targets
       where return addresses are saved by a function in it's caller's frame
--- 201,208 ----
     o FRAME_OFFSET, the offset, from a given frame address or frame pointer
       value, at which this layout will be found,
  
!    o FRAME_LEVEL, control how many stack frames up we start from, in
!      builtin_frame_address terms.
  
       0 is most often the appropriate value. 1 may be necessary on targets
       where return addresses are saved by a function in it's caller's frame
*************** __gnat_backtrace (void **array,
*** 237,255 ****
  		         |                |
  		         +----------------+
  
!    o BASE_SKIP,
  
!    Since we inherently deal with return addresses, there is an implicit shift
!    by at least one for the initial point we are able to observe in the chain.
  
!    On some targets (e.g. sparc-solaris), the first return address we can
!    easily get without special code is even our caller's return address, so
!    there is a initial shift of two.
  
!    BASE_SKIP represents this initial shift, which is the minimal "skip_frames"
!    value we support. We could add special code for the skip_frames < BASE_SKIP
!    cases. This is not done currently because there is virtually no situation
!    in which this would be useful.
  
     Finally, to account for some ABI specificities, a target may (but does
     not have to) define:
--- 237,254 ----
  		         |                |
  		         +----------------+
  
!    o BASE_SKIP represents the initial shift incurred by the initial
!      FRAME_LEVEL + the fact that what we find on the stack are return
!      addresses. One way to see it is: starting from
  
!        ptr = (struct layout *)__builtin_frame_address(FRAME_LEVEL);
  
!      in __gnat_backtrace, where does ptr->return_address land?
  
!      If this is within __gnat_backtrace, BASE_SKIP should be 0. If this
!      is within the caller of __gnat_backtrace, BASE_SKIP should be 1. etc.
! 
!      BASE_SKIP is the minimal "skip_frames" value we support.
  
     Finally, to account for some ABI specificities, a target may (but does
     not have to) define:
*************** struct layout
*** 411,416 ****
--- 410,417 ----
  #define STOP_FRAME(CURRENT, TOP_STACK) \
   ((CURRENT)->next == 0 || ((long)(CURRENT)->next % __alignof__(void*)) != 0)
  
+ /* builtin_frame_address(1) gets us the frame pointer of our caller,
+    where we store our own return address.  */
  #define BASE_SKIP 1
  
  /*-------------------------- SPARC Solaris or RTEMS --------------------*/
*************** struct layout
*** 497,502 ****
--- 498,505 ----
     || (void *) ((CURRENT)->next) < (TOP_STACK)  \
     || EXTRA_STOP_CONDITION(CURRENT))
  
+ /* builtin_frame_address(1) gets us the *frame* pointer of our caller, where
+    we'll find the return address from that caller to its own caller.  */
  #define BASE_SKIP (1+FRAME_LEVEL)
  
  /* On i386 architecture we check that at the call point we really have a call
diff -Nrcpad gcc-17-20260614/gcc/ada/treepr.adb gcc-17-20260621/gcc/ada/treepr.adb
*** gcc-17-20260614/gcc/ada/treepr.adb	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/ada/treepr.adb	Sun Jun 21 22:32:05 2026
*************** package body Treepr is
*** 270,276 ****
     begin
        case F is
           --  We special case the following; otherwise the compiler will use
!          --  the usual Mixed_Case convention.
  
           when F_Assignment_OK =>
              return "Assignment_OK";
--- 270,276 ----
     begin
        case F is
           --  We special case the following; otherwise the compiler will use
!          --  the usual Mixed_Case convention or we override the name entirely.
  
           when F_Assignment_OK =>
              return "Assignment_OK";
*************** package body Treepr is
*** 300,305 ****
--- 300,307 ----
              return "SCIL_Tag_Value";
           when F_SCIL_Target_Prim =>
              return "SCIL_Target_Prim";
+          when F_Scope_Raw =>
+             return "Scope";
           when F_Shift_Count_OK =>
              return "Shift_Count_OK";
           when F_TSS_Elist =>
diff -Nrcpad gcc-17-20260614/gcc/algol68/ChangeLog gcc-17-20260621/gcc/algol68/ChangeLog
*** gcc-17-20260614/gcc/algol68/ChangeLog	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/algol68/ChangeLog	Sun Jun 21 22:32:05 2026
***************
*** 1,3 ****
--- 1,64 ----
+ 2026-06-19  Kanishka Solanki  <kanishkasolanki456s@gmail.com>
+ 
+ 	* a68-low-clauses.cc (a68_lower_collateral_clause): Do not check
+ 	for rows before calling a68_low_dup.
+ 	* a68-low-units.cc (collect_call_arguments): Likewise.
+ 
+ 2026-06-16  Jose E. Marchesi  <jemarch@gnu.org>
+ 
+ 	* a68-imports.cc (a68_replace_equivalent_mode): Get a moif and
+ 	check extracts.
+ 	(a68_open_packet): Fix deduplication of in-moif modes and move
+ 	extract replacement code to a68_replace_equivalent_mode.
+ 	* a68-low-moids.cc (a68_lower_moids): Check that all known modes
+ 	have an associated ctype as part of the sanity checks.
+ 
+ 2026-06-16  Gerald Pfeifer  <gerald@pfeifer.com>
+ 
+ 	* README: Avoid redirect for web link to Algol 68 Jargon File.
+ 	* ga68-coding-guidelines.texi (Top): Ditto.
+ 
+ 2026-06-15  Jose E. Marchesi  <jemarch@gnu.org>
+ 
+ 	* a68-parser-taxes.cc (attr_descr): New function.
+ 	(already_declared): Use attr_descr for diagnostic.
+ 	(already_declared_hidden): Likewise.
+ 
+ 2026-06-15  Jose E. Marchesi  <jemarch@gnu.org>
+ 
+ 	* a68-imports.cc (INCLUDE_VECTOR): Define.
+ 	(a68_open_packet): Deduplicate within-moif modes while importing.
+ 
+ 2026-06-15  Jose E. Marchesi  <jemarch@gnu.org>
+ 
+ 	* a68-parser-extract.cc (a68_extract_indicants): Set PUBLICIZED in
+ 	the new tags for mode indicants.
+ 	* a68-parser.cc (a68_new_tag): Initialize PUBLICIZED to false.
+ 
+ 2026-06-14  Jose E. Marchesi  <jemarch@gnu.org>
+ 
+ 	* a68-parser-brackets.cc (INCLUDE_STRING): Define.
+ 	Do not include <string.
+ 	* a68-parser-bottom-up.cc (INCLUDE_STRING): Define.
+ 	Do not include <string>.
+ 	* a68-moids-diagnostics.cc (INCLUDE_STRING): Define.
+ 	Do not include <string>.
+ 	* a68-imports.cc (INCLUDE_STRING): Define.
+ 	Do not include <string>.
+ 	* a68-imports-archive.cc (INCLUDE_MAP): Define.
+ 	(INCLUDE_STRING): Likewise.
+ 	Do not include <string> nor <map>.
+ 
+ 2026-06-14  Jose E. Marchesi  <jemarch@gnu.org>
+ 
+ 	* a68-imports.cc (struct encoded_mode): Type of flex.sub_offset
+ 	shall be uint64_t.
+ 
+ 2026-06-14  Jose E. Marchesi  <jemarch@gnu.org>
+ 
+ 	* a68-parser-brackets.cc (bracket_check_error): Escape %< and
+ 	%> in call to printf.
+ 
  2026-06-13  Jose E. Marchesi  <jemarch@gnu.org>
  
  	* a68-parser-brackets.cc: Include <string>.
diff -Nrcpad gcc-17-20260614/gcc/algol68/README gcc-17-20260621/gcc/algol68/README
*** gcc-17-20260614/gcc/algol68/README	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/algol68/README	Sun Jun 21 22:32:05 2026
*************** Useful Resources
*** 118,124 ****
    indentation, pretty-printing of bold tags, an auto-stropping minor
    mode and other features.
  
! - The Algol 68 Jargon File at https://jemarch.net/a68-jargon provides
    a comprehensive list of definitions of many of the technical and
    non-technical terms used in the context of Algol 68.
  
--- 118,124 ----
    indentation, pretty-printing of bold tags, an auto-stropping minor
    mode and other features.
  
! - The Algol 68 Jargon File at https://jemarch.net/a68-jargon/ provides
    a comprehensive list of definitions of many of the technical and
    non-technical terms used in the context of Algol 68.
  
diff -Nrcpad gcc-17-20260614/gcc/algol68/a68-imports.cc gcc-17-20260621/gcc/algol68/a68-imports.cc
*** gcc-17-20260614/gcc/algol68/a68-imports.cc	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/algol68/a68-imports.cc	Sun Jun 21 22:32:05 2026
***************
*** 29,34 ****
--- 29,35 ----
  
  #define INCLUDE_MEMORY
  #define INCLUDE_STRING
+ #define INCLUDE_VECTOR
  #include "config.h"
  #include "system.h"
  #include "coretypes.h"
*************** a68_replace_submode (MOID_T *t, MOID_T *
*** 985,993 ****
     The entry for M in MODES_LIST is set to NO_MOID.  */
  
  static void
! a68_replace_equivalent_mode (vec<MOID_T*,va_gc> *mode_list,
  			     MOID_T *m, MOID_T *r)
  {
    for (size_t i = 0; i < mode_list->length (); ++i)
      {
        if ((*mode_list)[i] == m)
--- 986,996 ----
     The entry for M in MODES_LIST is set to NO_MOID.  */
  
  static void
! a68_replace_equivalent_mode (MOIF_T *moif,
  			     MOID_T *m, MOID_T *r)
  {
+   /* Handle the mode to be replaced.  */
+   vec<MOID_T*,va_gc> *mode_list = MODES (moif);
    for (size_t i = 0; i < mode_list->length (); ++i)
      {
        if ((*mode_list)[i] == m)
*************** a68_replace_equivalent_mode (vec<MOID_T*
*** 995,1000 ****
--- 998,1022 ----
        else if ((*mode_list)[i] != NO_MOID)
  	a68_replace_submode ((*mode_list)[i], m, r);
      }
+ 
+   /* Update extracts to reflect the replacement.  */
+   for (EXTRACT_T *e : INDICANTS (moif))
+     {
+       if (EXTRACT_MODE (e) == m)
+ 	EXTRACT_MODE (e) = r;
+     }
+ 
+   for (EXTRACT_T *e : IDENTIFIERS (moif))
+     {
+       if (EXTRACT_MODE (e) == m)
+ 	EXTRACT_MODE (e) = r;
+     }
+ 
+   for (EXTRACT_T *e : OPERATORS (moif))
+     {
+       if (EXTRACT_MODE (e) == m)
+ 	EXTRACT_MODE (e) = r;
+     }
  }
  
  /* Decode a modes table at DATA + POS.  */
*************** a68_open_packet (const char *module, con
*** 1470,1506 ****
      }
  
    /* If we got a moif, we need to make sure that it doesn't introduce new modes
!      that are equivalent to any mode in the compiler's mode list.  If it does,
!      we replace the mode everywhere in the moif.  */
  
    if (moif != NO_MOIF)
      {
        for (MOID_T *m : MODES (moif))
  	{
  	  MOID_T *r = a68_search_equivalent_mode (m);
! 	  if (r != NO_MOID)
  	    {
! 	      a68_replace_equivalent_mode (MODES (moif), m, r);
! 
! 	      /* Update extracts to reflect the replacement.  */
! 	      for (EXTRACT_T *e : INDICANTS (moif))
! 		{
! 		  if (EXTRACT_MODE (e) == m)
! 		    EXTRACT_MODE (e) = r;
! 		}
! 
! 	      for (EXTRACT_T *e : IDENTIFIERS (moif))
! 		{
! 		  if (EXTRACT_MODE (e) == m)
! 		    EXTRACT_MODE (e) = r;
! 		}
! 
! 	      for (EXTRACT_T *e : OPERATORS (moif))
  		{
! 		  if (EXTRACT_MODE (e) == m)
! 		    EXTRACT_MODE (e) = r;
  		}
  	    }
  	}
      }
  
--- 1492,1524 ----
      }
  
    /* If we got a moif, we need to make sure that it doesn't introduce new modes
!      that are equivalent to any mode in the compiler's mode list, nor modes
!      that are equivalent to other modes introduced in this same moif.  If it
!      does, we replace the mode everywhere in the moif. */
  
    if (moif != NO_MOIF)
      {
+       std::vector<MOID_T *> known_moids;
+ 
        for (MOID_T *m : MODES (moif))
  	{
  	  MOID_T *r = a68_search_equivalent_mode (m);
! 	  if (r == NO_MOID)
  	    {
! 	      for (size_t i = 0; i < known_moids.size (); ++i)
  		{
! 		  if (a68_prove_moid_equivalence (m, known_moids[i]))
! 		    {
! 		      r = known_moids[i];
! 		      break;
! 		    }
  		}
  	    }
+ 
+ 	  if (r == NO_MOID)
+ 	    known_moids.push_back (m);
+ 	  else if (r != m)
+ 	    a68_replace_equivalent_mode (moif, m, r);
  	}
      }
  
diff -Nrcpad gcc-17-20260614/gcc/algol68/a68-low-clauses.cc gcc-17-20260621/gcc/algol68/a68-low-clauses.cc
*** gcc-17-20260614/gcc/algol68/a68-low-clauses.cc	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/algol68/a68-low-clauses.cc	Sun Jun 21 22:32:05 2026
*************** a68_lower_collateral_clause (NODE_T *p A
*** 1137,1144 ****
  	  for (tree_stmt_iterator si = tsi_start (units); !tsi_end_p (si); tsi_next (&si))
  	    {
  	      tree unit = tsi_stmt (si);
! 	      if (A68_TYPE_HAS_ROWS_P (TREE_TYPE (unit)))
! 		unit = a68_low_dup (unit);
  	      CONSTRUCTOR_APPEND_ELT (ve, size_int (num_units), unit);
  	      num_units += 1;
  	    }
--- 1137,1143 ----
  	  for (tree_stmt_iterator si = tsi_start (units); !tsi_end_p (si); tsi_next (&si))
  	    {
  	      tree unit = tsi_stmt (si);
! 	      unit = a68_low_dup (unit);
  	      CONSTRUCTOR_APPEND_ELT (ve, size_int (num_units), unit);
  	      num_units += 1;
  	    }
diff -Nrcpad gcc-17-20260614/gcc/algol68/a68-low-moids.cc gcc-17-20260621/gcc/algol68/a68-low-moids.cc
*** gcc-17-20260614/gcc/algol68/a68-low-moids.cc	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/algol68/a68-low-moids.cc	Sun Jun 21 22:32:05 2026
*************** a68_lower_moids (MOID_T *mode)
*** 723,728 ****
--- 723,729 ----
    /* Sanity check.  */
    for (MOID_T *m = mode; m != NO_MOID; FORWARD (m))
      {
+       gcc_assert (CTYPE (m) != NULL_TREE);
        gcc_assert (COMPLETE_TYPE_P (CTYPE (m)));
        if (IS_UNION (m))
  	{
diff -Nrcpad gcc-17-20260614/gcc/algol68/a68-low-units.cc gcc-17-20260621/gcc/algol68/a68-low-units.cc
*** gcc-17-20260614/gcc/algol68/a68-low-units.cc	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/algol68/a68-low-units.cc	Sun Jun 21 22:32:05 2026
*************** collect_call_arguments (NODE_T *p, vec<t
*** 1133,1140 ****
  	  /* In Algol 68 parameters are passed via an identity declaration, so
  	     this must implement same semantics.  */
  	  tree arg = a68_lower_tree (p, ctx);
! 	  if (HAS_ROWS (MOID (p)))
! 	    arg = a68_low_dup (arg);
  	  arg = a68_consolidate_ref (MOID (p), arg);
  	  args->quick_push (arg);
  	}
--- 1133,1139 ----
  	  /* In Algol 68 parameters are passed via an identity declaration, so
  	     this must implement same semantics.  */
  	  tree arg = a68_lower_tree (p, ctx);
! 	  arg = a68_low_dup (arg);
  	  arg = a68_consolidate_ref (MOID (p), arg);
  	  args->quick_push (arg);
  	}
diff -Nrcpad gcc-17-20260614/gcc/algol68/a68-parser-extract.cc gcc-17-20260621/gcc/algol68/a68-parser-extract.cc
*** gcc-17-20260614/gcc/algol68/a68-parser-extract.cc	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/algol68/a68-parser-extract.cc	Sun Jun 21 22:32:05 2026
*************** a68_extract_indicants (NODE_T *p)
*** 485,492 ****
  		  /* Store in the symbol table, but also in the moid list.
  		     Position of definition (q) connects to this lexical
  		     level!  */
! 		  if (a68_add_tag (TABLE (p), INDICANT, q, NO_MOID, STOP) == NO_TAG)
  		    gcc_unreachable ();
  		  if (a68_add_mode (&TOP_MOID (&A68_JOB), INDICANT, 0, q, NO_MOID, NO_PACK) == NO_MOID)
  		    gcc_unreachable ();
  		  ATTRIBUTE (q) = DEFINING_INDICANT;
--- 485,494 ----
  		  /* Store in the symbol table, but also in the moid list.
  		     Position of definition (q) connects to this lexical
  		     level!  */
! 		  TAG_T *t = a68_add_tag (TABLE (p), INDICANT, q, NO_MOID, STOP);
! 		  if (t == NO_TAG)
  		    gcc_unreachable ();
+ 		  PUBLICIZED (t) = is_public;
  		  if (a68_add_mode (&TOP_MOID (&A68_JOB), INDICANT, 0, q, NO_MOID, NO_PACK) == NO_MOID)
  		    gcc_unreachable ();
  		  ATTRIBUTE (q) = DEFINING_INDICANT;
diff -Nrcpad gcc-17-20260614/gcc/algol68/a68-parser-taxes.cc gcc-17-20260621/gcc/algol68/a68-parser-taxes.cc
*** gcc-17-20260614/gcc/algol68/a68-parser-taxes.cc	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/algol68/a68-parser-taxes.cc	Sun Jun 21 22:32:05 2026
*************** a68_collect_taxes (NODE_T *p)
*** 635,647 ****
    test_firmly_related_ops_local (NO_NODE, OPERATORS (A68_STANDENV));
  }
  
  /* Whether tag has already been declared in this range.  */
  
  static void
  already_declared (NODE_T *n, int a)
  {
    if (find_tag_local (TABLE (n), a, NSYMBOL (n)) != NO_TAG)
!     a68_error (n, "multiple declaration of tag %qs", NSYMBOL (n));
  }
  
  /* Whether tag has already been declared in this range.  */
--- 635,663 ----
    test_firmly_related_ops_local (NO_NODE, OPERATORS (A68_STANDENV));
  }
  
+ /* Get a description text for attribute passed as the second argument to
+    already_declared and already-declared_hidden.  To be used in
+    diagnostics.  */
+ 
+ static const char *
+ attr_descr (int a)
+ {
+   return (a == OP_SYMBOL ? "operator"
+ 	  : a == PRIO_SYMBOL ? "priority for operator"
+ 	  : a == INDICANT ? "mode indicant"
+ 	  : a == LABEL ? "label"
+ 	  : a == IDENTIFIER ? "identifier"
+ 	  : "tag");
+ }
+ 
  /* Whether tag has already been declared in this range.  */
  
  static void
  already_declared (NODE_T *n, int a)
  {
    if (find_tag_local (TABLE (n), a, NSYMBOL (n)) != NO_TAG)
!     a68_error (n, "multiple declaration of %s %qs",
! 	       attr_descr (a), NSYMBOL (n));
  }
  
  /* Whether tag has already been declared in this range.  */
*************** static void
*** 650,656 ****
  already_declared_hidden (NODE_T *n, int a)
  {
    if (find_tag_local (TABLE (n), a, NSYMBOL (n)) != NO_TAG)
!     a68_error (n, "multiple declaration of tag %qs", NSYMBOL (n));
  
    TAG_T *s = a68_find_tag_global (PREVIOUS (TABLE (n)), a, NSYMBOL (n));
  
--- 666,673 ----
  already_declared_hidden (NODE_T *n, int a)
  {
    if (find_tag_local (TABLE (n), a, NSYMBOL (n)) != NO_TAG)
!     a68_error (n, "multiple declaration of %s %qs",
! 	       attr_descr (a), NSYMBOL (n));
  
    TAG_T *s = a68_find_tag_global (PREVIOUS (TABLE (n)), a, NSYMBOL (n));
  
*************** tax_variable_dec (NODE_T *p, int *q, MOI
*** 962,968 ****
  	    HEAP (entry) = STATIC_SYMBOL;
  	  else
  	    HEAP (entry) = *q;
! 	  
  	  if (HEAP (entry) == LOC_SYMBOL)
  	    {
  	      TAG_T *z = a68_add_tag (TABLE (p), ANONYMOUS, p, SUB (*m), GENERATOR);
--- 979,985 ----
  	    HEAP (entry) = STATIC_SYMBOL;
  	  else
  	    HEAP (entry) = *q;
! 
  	  if (HEAP (entry) == LOC_SYMBOL)
  	    {
  	      TAG_T *z = a68_add_tag (TABLE (p), ANONYMOUS, p, SUB (*m), GENERATOR);
*************** a68_mark_auxilliary (NODE_T *p)
*** 1698,1704 ****
  
  	  if (TAX (p) != NO_TAG)
  	    USE (TAX (p)) = true;
! 	  
  	  if ((z = a68_find_tag_global (TABLE (p), PRIO_SYMBOL, NSYMBOL (p))) != NO_TAG)
  	    USE (z) = true;
  	}
--- 1715,1721 ----
  
  	  if (TAX (p) != NO_TAG)
  	    USE (TAX (p)) = true;
! 
  	  if ((z = a68_find_tag_global (TABLE (p), PRIO_SYMBOL, NSYMBOL (p))) != NO_TAG)
  	    USE (z) = true;
  	}
diff -Nrcpad gcc-17-20260614/gcc/algol68/a68-parser.cc gcc-17-20260621/gcc/algol68/a68-parser.cc
*** gcc-17-20260614/gcc/algol68/a68-parser.cc	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/algol68/a68-parser.cc	Sun Jun 21 22:32:05 2026
*************** a68_new_tag (void)
*** 788,794 ****
    PORTABLE (z) = true;
    VARIABLE (z) = false;
    IS_RECURSIVE (z) = false;
!   PUBLICIZED (z) = true; /* XXX */
    ASCRIBED_ROUTINE_TEXT (z) = false;
    LOWERER (z) = NO_LOWERER;
    TAX_TREE_DECL (z) = NULL_TREE;
--- 788,794 ----
    PORTABLE (z) = true;
    VARIABLE (z) = false;
    IS_RECURSIVE (z) = false;
!   PUBLICIZED (z) = false;
    ASCRIBED_ROUTINE_TEXT (z) = false;
    LOWERER (z) = NO_LOWERER;
    TAX_TREE_DECL (z) = NULL_TREE;
diff -Nrcpad gcc-17-20260614/gcc/algol68/ga68-coding-guidelines.texi gcc-17-20260621/gcc/algol68/ga68-coding-guidelines.texi
*** gcc-17-20260614/gcc/algol68/ga68-coding-guidelines.texi	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/algol68/ga68-coding-guidelines.texi	Sun Jun 21 22:32:05 2026
*************** Jargon File provides definitions for man
*** 99,105 ****
  context of the Algol 68 programming language and associated
  technologies.  If you find yourself wondering about "frobyts" or
  "enclosed clauses", please look them up in the jargon
! file@footnote{@url{https://jemarch.net/a68-jargon}}.  The file is
  available online in the www and, in Gentoo, as manpages once you
  install the app-doc/a68-jargon package. Just type @command{man 7algol
  frobyt} in the terminal, for example.
--- 99,105 ----
  context of the Algol 68 programming language and associated
  technologies.  If you find yourself wondering about "frobyts" or
  "enclosed clauses", please look them up in the jargon
! file@footnote{@url{https://jemarch.net/a68-jargon/}}.  The file is
  available online in the www and, in Gentoo, as manpages once you
  install the app-doc/a68-jargon package. Just type @command{man 7algol
  frobyt} in the terminal, for example.
diff -Nrcpad gcc-17-20260614/gcc/c/ChangeLog gcc-17-20260621/gcc/c/ChangeLog
*** gcc-17-20260614/gcc/c/ChangeLog	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/c/ChangeLog	Sun Jun 21 22:32:05 2026
***************
*** 1,3 ****
--- 1,9 ----
+ 2026-06-19  Kees Cook  <kees@kernel.org>
+ 
+ 	PR c/125604
+ 	* c-typeck.cc (build_unary_op): Unwrap .ACCESS_WITH_SIZE
+ 	from the operand before further processing.
+ 
  2026-06-10  Jakub Jelinek  <jakub@redhat.com>
  
  	PR c/125694
diff -Nrcpad gcc-17-20260614/gcc/c/c-typeck.cc gcc-17-20260621/gcc/c/c-typeck.cc
*** gcc-17-20260614/gcc/c/c-typeck.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/c/c-typeck.cc	Sun Jun 21 22:32:06 2026
*************** build_unary_op (location_t location, enu
*** 5779,5784 ****
--- 5779,5796 ----
    tree eptype = NULL_TREE;
    const char *invalid_op_diag;
  
+   /* If ARG is wrapped in a call to .ACCESS_WITH_SIZE — created when the
+      C parser rvalue-converts a counted_by-annotated member access (see
+      PR123569) — unwrap it here.  Unary operators that consume an rvalue
+      (!, -, +) read the value itself rather than dereferencing into the
+      pointed-to data, so the bounds-checking wrapper is unnecessary and
+      would otherwise reach build_unary_op while it is not equipped to
+      handle the wrapped form.  PR123569 fixed the ++/-- side of this by
+      suppressing wrapper creation in the parser; the rvalue-consuming
+      ops still receive the wrapper and need to strip it here.  */
+   if (is_access_with_size_p (arg))
+     xarg = arg = get_ref_from_access_with_size (arg);
+ 
    gcc_checking_assert (!is_access_with_size_p (arg));
  
    bool int_operands = EXPR_INT_CONST_OPERANDS (xarg);
diff -Nrcpad gcc-17-20260614/gcc/c-family/ChangeLog gcc-17-20260621/gcc/c-family/ChangeLog
*** gcc-17-20260614/gcc/c-family/ChangeLog	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/c-family/ChangeLog	Sun Jun 21 22:32:05 2026
***************
*** 1,3 ****
--- 1,13 ----
+ 2026-06-16  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* c-common.h (enum cxx_dialect): Add cxx29.
+ 	* c-opts.cc (set_std_cxx29): New function.
+ 	(c_common_handle_option): Handle -std=c++2d, -std=c++29, -std=gnu++2d
+ 	and -std=gnu++29.
+ 	* c.opt (std=c++2d, std=c++29, std=gnu++2d, std=gnu++29): New.
+ 	(std=c++2c, std=c++26, std=gnu++2c, std=gnu++26): Move Undocumented
+ 	to the 2c cases, tweak description.
+ 
  2026-06-08  Zhou Qiankang  <wszqkzqk@qq.com>
  
  	PR c++/125642
diff -Nrcpad gcc-17-20260614/gcc/c-family/c-common.h gcc-17-20260621/gcc/c-family/c-common.h
*** gcc-17-20260614/gcc/c-family/c-common.h	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/c-family/c-common.h	Sun Jun 21 22:32:05 2026
*************** enum cxx_dialect {
*** 751,757 ****
    /* C++23 */
    cxx23,
    /* C++26 */
!   cxx26
  };
  
  /* The C++ dialect being used.  C++20 is the default.  */
--- 751,759 ----
    /* C++23 */
    cxx23,
    /* C++26 */
!   cxx26,
!   /* C++29 */
!   cxx29
  };
  
  /* The C++ dialect being used.  C++20 is the default.  */
diff -Nrcpad gcc-17-20260614/gcc/c-family/c-opts.cc gcc-17-20260621/gcc/c-family/c-opts.cc
*** gcc-17-20260614/gcc/c-family/c-opts.cc	Sun Jun 14 22:32:06 2026
--- gcc-17-20260621/gcc/c-family/c-opts.cc	Sun Jun 21 22:32:05 2026
*************** static void set_std_cxx17 (int);
*** 118,123 ****
--- 118,124 ----
  static void set_std_cxx20 (int);
  static void set_std_cxx23 (int);
  static void set_std_cxx26 (int);
+ static void set_std_cxx29 (int);
  static void set_std_c89 (int, int);
  static void set_std_c99 (int);
  static void set_std_c11 (int);
*************** c_common_handle_option (size_t scode, co
*** 701,706 ****
--- 702,713 ----
  	set_std_cxx26 (code == OPT_std_c__26 /* ISO */);
        break;
  
+     case OPT_std_c__29:
+     case OPT_std_gnu__29:
+       if (!preprocessing_asm_p)
+ 	set_std_cxx29 (code == OPT_std_c__29 /* ISO */);
+       break;
+ 
      case OPT_std_c90:
      case OPT_std_iso9899_199409:
        if (!preprocessing_asm_p)
*************** set_std_cxx26 (int iso)
*** 2095,2100 ****
--- 2102,2123 ----
    lang_hooks.name = "GNU C++26";
  }
  
+ /* Set the C++ 2029 standard (without GNU extensions if ISO).  */
+ static void
+ set_std_cxx29 (int iso)
+ {
+   cpp_set_lang (parse_in, iso ? CLK_CXX29 : CLK_GNUCXX29);
+   flag_no_gnu_keywords = iso;
+   flag_no_nonansi_builtin = iso;
+   flag_iso = iso;
+   /* C++29 includes the C11 standard library.  */
+   flag_isoc94 = 1;
+   flag_isoc99 = 1;
+   flag_isoc11 = 1;
+   cxx_dialect = cxx29;
+   lang_hooks.name = "GNU C++29";
+ }
+ 
  /* Args to -d specify what to dump.  Silently ignore
     unrecognized options; they may be aimed at toplev.cc.  */
  static void
diff -Nrcpad gcc-17-20260614/gcc/c-family/c.opt gcc-17-20260621/gcc/c-family/c.opt
*** gcc-17-20260614/gcc/c-family/c.opt	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/c-family/c.opt	Sun Jun 21 22:32:05 2026
*************** C++ ObjC++
*** 2669,2681 ****
  Conform to the ISO 2023 C++ standard (published in 2024; experimental and incomplete support).
  
  std=c++2c
! C++ ObjC++ Alias(std=c++26)
! Conform to the ISO 2026 C++ draft standard (experimental and incomplete support).
  
  std=c++26
! C++ ObjC++ Undocumented
  Conform to the ISO 2026 C++ draft standard (experimental and incomplete support).
  
  std=c11
  C ObjC
  Conform to the ISO 2011 C standard.
--- 2669,2689 ----
  Conform to the ISO 2023 C++ standard (published in 2024; experimental and incomplete support).
  
  std=c++2c
! C++ ObjC++ Alias(std=c++26) Undocumented
! Deprecated in favor of -std=c++26.
  
  std=c++26
! C++ ObjC++
  Conform to the ISO 2026 C++ draft standard (experimental and incomplete support).
  
+ std=c++2d
+ C++ ObjC++ Alias(std=c++29) Undocumented
+ Deprecated in favor of -std=c++29.
+ 
+ std=c++29
+ C++ ObjC++
+ Conform to the ISO 2029 C++ draft standard (experimental and incomplete support).
+ 
  std=c11
  C ObjC
  Conform to the ISO 2011 C standard.
*************** C++ ObjC++
*** 2771,2783 ****
  Conform to the ISO 2023 C++ standard with GNU extensions (published in 2024; experimental and incomplete support).
  
  std=gnu++2c
! C++ ObjC++ Alias(std=gnu++26)
! Conform to the ISO 2026 C++ draft standard with GNU extensions (experimental and incomplete support).
  
  std=gnu++26
! C++ ObjC++ Undocumented
  Conform to the ISO 2026 C++ draft standard with GNU extensions (experimental and incomplete support).
  
  std=gnu11
  C ObjC
  Conform to the ISO 2011 C standard with GNU extensions.
--- 2779,2799 ----
  Conform to the ISO 2023 C++ standard with GNU extensions (published in 2024; experimental and incomplete support).
  
  std=gnu++2c
! C++ ObjC++ Alias(std=gnu++26) Undocumented
! Deprecated in favor of -std=gnu++26.
  
  std=gnu++26
! C++ ObjC++
  Conform to the ISO 2026 C++ draft standard with GNU extensions (experimental and incomplete support).
  
+ std=gnu++2d
+ C++ ObjC++ Alias(std=gnu++29) Undocumented
+ Deprecated in favor of -std=gnu++29.
+ 
+ std=gnu++29
+ C++ ObjC++
+ Conform to the ISO 2029 C++ draft standard with GNU extensions (experimental and incomplete support).
+ 
  std=gnu11
  C ObjC
  Conform to the ISO 2011 C standard with GNU extensions.
diff -Nrcpad gcc-17-20260614/gcc/cobol/ChangeLog gcc-17-20260621/gcc/cobol/ChangeLog
*** gcc-17-20260614/gcc/cobol/ChangeLog	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/cobol/ChangeLog	Sun Jun 21 22:32:06 2026
***************
*** 1,3 ****
--- 1,284 ----
+ 2026-06-20  Robert Dubner  <rdubner@symas.com>
+ 
+ 	* genapi.cc (parser_enter_file): Establish a var_decl for the
+ 	common packed-decimal to binary conversion table.
+ 	* genutil.cc (digit): Divide-and conquer numeric-display converter.
+ 	(num_disp_dive): Likewise.
+ 	(pd_dive): Divide-and-conqure packed-decimal converter.
+ 	(get_pd_value): Likewise.
+ 	(get_binary_value_tree): Use the new routines.
+ 	(binary_from_FldNumericBinary):  Divide-and conquer numeric-display
+ 	converter.
+ 	* genutil.h: Declaration for var_decl_dp2bin.
+ 	* move.cc (mh_little_endian): Allow FldPacked as a source.
+ 
+ 2026-06-18  Robert Dubner  <rdubner@symas.com>
+ 
+ 	* cbldiag.h (current_program_index): Suppress cppcheck warning.
+ 	(struct cbl_loc_t): Likewise.
+ 	* genutil.cc (get_depending_on_value_from_odo): Check subscript
+ 	against occurs-depending-on value.
+ 	(get_data_offset): Likewise.
+ 	(digit): Fast string-to-binary routine.
+ 	(num_disp_dive): Likewise.
+ 	(get_binary_value_tree): Likewise.
+ 	(copy_little_endian_into_place): Move the function to move.cc.
+ 	(get_location): Normalize use of "data" pointer versus using the
+ 	address of a known variable.
+ 	* genutil.h (copy_little_endian_into_place): Remove declarations.
+ 	* move.cc (get_reference_to_data): Eliminate function.
+ 	(mh_identical): Simplify the logic that uses get_location.
+ 	(copy_little_endian_into_place):  Use the routine for both little-
+ 	and big-endian targets.  Take absolute value of signed inputs when
+ 	the target is unsigned.
+ 	(mh_little_endian): Handle both little- and big-endian targets.
+ 	* symbols.cc (cbl_alphabet_t::cbl_alphabet_t):  Suppress
+ 	cppcheck warning.
+ 
+ 2026-06-16  Robert Dubner  <rdubner@symas.com>
+ 
+ 	* compare.cc (numeric_alpha_compare): Use tree_type_from_refer().
+ 	* genapi.cc (file_static_variable): Eliminate function.
+ 	(psa_FldLiteralN): Use tree_type_from_field.
+ 	(parser_accept_command_line): Eliminate file-static variables.
+ 	(parser_accept_envar): Likewise.
+ 	(parser_assign): Likewise.
+ 	(parser_initialize_table): Likewise.
+ 	(parser_see_stop_run): Likewise.
+ 	(parser_file_write): Likewise.
+ 	(parser_file_start): Likewise.
+ 	(inspect_tally): Likewise.
+ 	(inspect_replacing): Likewise.
+ 	(field_increment): Likewise.
+ 	(parser_match_exception): Likewise.
+ 	* genapi.h (file_static_variable): Eliminate function.
+ 	* genmath.cc (largest_binary_term): Use tree_type_from_refer().
+ 	(fast_add):  Likewise.
+ 	(fast_subtract): Likewise.
+ 	(fast_multiply): Likewise.
+ 	(fast_divide): Likewise.
+ 	(parser_divide): Likewise.
+ 	* genutil.cc (tree_type_from_digits): Eliminate function.
+ 	(get_integer_value): Eliminate file-static variables.
+ 	(get_data_offset): Eliminate file-static variables.
+ 	(get_binary_value_tree): Eliminate file-static variables.
+ 	(tree_type_from_field): Updated function.
+ 	(tree_type_from_refer): New function.
+ 	(scale_by_power_of_ten): Eliminate file-static variables.
+ 	(tree_type_from_size): Eliminate function.
+ 	(copy_little_endian_into_place): Improve logic.
+ 	(build_array_of_size_t): Eliminate file-static variables.
+ 	(refer_refmod_length): Likewise.
+ 	(refer_fill_depends): Likewise.
+ 	(refer_size): Likewise.
+ 	(refer_size_source): Likewise.
+ 	* genutil.h (tree_type_from_digits): Eliminate function.
+ 	(tree_type_from_size): Eliminate function.
+ 	(tree_type_from_refer): New function.
+ 	* lang.opt: Updated documentation.
+ 	* lang.opt.urls: Updated documentation.
+ 	* move.cc (digits_to_bytes): Eliminate function.
+ 	(get_bytes_needed): Likewise.
+ 	(mh_source_is_literalN): Eliminate file-static variables; use
+ 	tree_type_from_refer().
+ 	(mh_numeric_display): Likewise.
+ 	(mh_little_endian): tree_type_from_refer().
+ 	(mh_numdisp_to_packed): Use get_location() function.
+ 	(mh_packed_to_packed): Likewise.
+ 	(mh_packed_to_numdisp): Likewise.
+ 	(move_helper): Likewise.
+ 
+ 2026-06-16  James K. Lowden  <jklowden@cobolworx.com>
+ 
+ 	* Make-lang.in: Report Bison version.
+ 	* cbldiag.h (defined): Define possibly missing macros.
+ 	(ATTRIBUTE_GCOBOL_DIAG): Define if missing.
+ 	(ATTRIBUTE_PRINTF_1): Same.
+ 	(ATTRIBUTE_PRINTF_3): Same.
+ 	(yyerror): Remove.
+ 	(struct YYLTYPE): Remove.
+ 	(enum cbl_gcobol_feature_t): Relocate from symbols.h.
+ 	(YYLTYPE_IS_DECLARED): Remove.
+ 	(YYLTYPE_IS_TRIVIAL): Remove.
+ 	(cobol_location): Relocate.
+ 	(cobol_gcobol_feature_set): Declare.
+ 	(struct YDFLTYPE): Remove.
+ 	(enum cbl_call_convention_t): Relocate from symbols.h.
+ 	(YDFLTYPE_IS_DECLARED): Remove.
+ 	(YDFLTYPE_IS_TRIVIAL): Remove.
+ 	(current_call_convention): Declare.
+ 	(cdf_push): Declare.
+ 	(cdf_push_call_convention): Declare.
+ 	(cdf_push_current_tokens): Declare.
+ 	(cdf_push_dictionary): Declare.
+ 	(cdf_push_enabled_exceptions): Declare.
+ 	(cdf_push_source_format): Declare.
+ 	(cdf_pop): Declare.
+ 	(cdf_pop_call_convention): Declare.
+ 	(cdf_pop_current_tokens): Declare.
+ 	(cdf_pop_dictionary): Declare.
+ 	(cdf_pop_source_format): Declare.
+ 	(cdf_pop_enabled_exceptions): Declare.
+ 	(current_program_index): Declare.
+ 	(struct cbl_loc_t): Derive from cbl_loc_base_t.
+ 	(struct cbl_loc_base_t): Define.
+ 	(cbl_err): Declare.
+ 	(cbl_errx): Declare.
+ 	(error_msg): Use cbl_loc_t.
+ 	(warn_msg): Same.
+ 	(cbl_unimplemented_at): Same.
+ 	(gcc_location_set): Same.
+ 	* cdf.y: Require Bison 3.8.2 and generate C++ in cdf namespace.
+ 	* cdfval.h (struct YDFLTYPE): Remove.
+ 	(struct cbl_loc_t): Forward declaration.
+ 	(struct cdfval_base_t): User-defined conversion from derived.
+ 	* copybook.h (gcc_assert): Use assert(3) within cdf.y.
+ 	(gcc_unreachable): Declare within cdf.y.
+ 	(class copybook_elem_t): Use cbl_loc_t.
+ 	(CTOUPPER): Use toupper(3) in uppername_t helper.
+ 	(TOUPPER): Same.
+ 	(class copybook_t): Use cbl_loc_t.
+ 	* exceptg.h (struct cbl_label_t): Declare cbl_label_t.
+ 	* gcobc: Support -fno-ec.
+ 	* gcobol.1: Reword -fsyntax-only slightly.
+ 	* genapi.cc (parser_label_label): Use cobol_location().
+ 	* lang.opt: Add comment in re lang.opt.urls.
+ 	* lexio.cc (struct replacing_term_t): Use cbl_loc_t.
+ 	(location_in): Same.
+ 	(parse_copy_directive): Same.
+ 	* lexio.h (struct filespan_t): Same.
+ 	* messages.cc (cbl_message): Same.
+ 	* parse.y: Same, and propagate location variously.
+ 	* parse_ante.h (current_data_section_set): Use cbl_loc_t.
+ 	(namcpy): Same.
+ 	(reject_refmod): Same.
+ 	(require_pointer): Same.
+ 	(require_integer): Same.
+ 	(ast_op): Same.
+ 	(perform_tgt_set): Same.
+ 	(label_add): Same.
+ 	(paragraph_reference): Same.
+ 	(tee_up_name): Same.
+ 	(ast_inspect): Same.
+ 	(ast_enter_section): Same.
+ 	(ast_enter_paragraph): Same.
+ 	(prototype_add): Same.
+ 	(verify_args): Same.
+ 	(subscript_dimension_error): Same.
+ 	(literal_subscripts_valid): Same.
+ 	(literal_refmod_valid): Same.
+ 	(struct cbl_fieldloc_t): Remove.
+ 	(intrinsic_call_1): Use cbl_loc_t.
+ 	(symbol_find): Same.
+ 	(valid_redefine): Same.
+ 	(field_add): Same.
+ 	(field_type_update): Same.
+ 	(field_capacity_error): Same.
+ 	(field_alloc): Same.
+ 	(file_add): Same.
+ 	(alphabet_add): Same.
+ 	(set_real_from_capacity): Same.
+ 	(procedure_division_ready): Same.
+ 	(file_section_fd_set): Same.
+ 	(ast_call): Same.
+ 	(field_binary_usage): Same.
+ 	(ast_end_program): Same.
+ 	(cobol_location): Same.
+ 	(location_set): Same.
+ 	(statement_begin): Same.
+ 	(ast_first_statement): Same.
+ 	* scan.l: Qualify tokens with new cdf namespace.
+ 	* scan_ante.h (ydfparse): Now static.
+ 	(cdf_context): Declare.
+ 	(ydfltype_of): Remove.
+ 	(update_location): Use cbl_loc_t.
+ 	(reset_location): Same.
+ 	(YY_USER_INIT): Same.
+ 	(class picture_t): Same.
+ 	* scan_post.h (ydfparse): Wrapper for cdf_parser::parse() method.
+ 	(ydfchar): Lookahead helper.
+ 	(ydfdebug): Same.
+ 	(run_cdf): Clearer debug messages.
+ 	(struct pending_token_t): Renamed to recent_token_t.
+ 	(struct recent_token_t): As above.
+ 	(PENDING): Renames to RECENT.
+ 	(RECENT): As above.
+ 	(next_token): Removed.
+ 	(recent_tokens_t): Capture abandoned lookahead tokens.
+ 	(prelex): Use recent_tokens queue.
+ 	(yylex): Drop normal parsing idea.
+ 	* symbols.cc (symbol_field_location): Use cbl_loc_t.
+ 	(symbol_alphabet): Same.
+ 	(cbl_alphabet_t::cbl_alphabet_t): Same.
+ 	(cbl_alphabet_t::assign): Same.
+ 	(cbl_alphabet_t::also): Same.
+ 	(symbol_temporary_location): Same.
+ 	(cbl_field_t::encode): Same.
+ 	* symbols.h (enum cbl_gcobol_feature_t): Remove.
+ 	(cobol_gcobol_feature_set): Remove.
+ 	(struct cbl_field_t): Use cbl_loc_t.
+ 	(struct cbl_refer_t): Same.
+ 	(struct cbl_alphabet_t): Same.
+ 	(struct cbl_perform_tgt_t): Same.
+ 	(struct cbl_nameloc_t): Same.
+ 	(class name_queue_t): Same.
+ 	(tee_up_name): Same.
+ 	(symbol_field_location): Same.
+ 	(enum cbl_call_convention_t): Remove
+ 	(class current_tokens_t):  Use cbl_loc_t.
+ 	(current_call_convention): Same.
+ 	(gcc_location_set): Same.
+ 	* util.cc (class cdf_directives_t): Use cbl_loc_t.
+ 	(cdf_unreachable): Define as gcc_unreachable.
+ 	(cdf_literalize): Do not handle location.
+ 	(cdf_file): New function.
+ 	(cdf_file_index): Same.
+ 	(cdf_file_name): Same.
+ 	(cdf_add_field): Same.
+ 	(cbl_field_t::encode_numeric): Remove unused parameter.
+ 	(cbl_field_t::report_invalid_initial_value): Use cbl_loc_t.
+ 	(match_proc): Namespace for local prototype-verification functions.
+ 	(DUMP_PROCEDURE_CALLS): Guard macro for debug function.
+ 	(procedure_calls_dump): New function to show uses of PERFORM.
+ 	(gcc_location_set_impl): Use cbl_loc_t.
+ 	(gcc_location_set): Same.
+ 	(class temp_loc_t): Same.
+ 	(error_msg): Same.
+ 	(warn_msg): Same.
+ 	(ydfdebug): Same.
+ 	(cobol_set_debugging): Same.
+ 	(cbl_unimplemented_at): Same.
+ 	* util.h (cbl_err): Remove declaration.
+ 	(cbl_errx): Same.
+ 	(cdf_push): Same.
+ 	(cdf_push_call_convention): Same.
+ 	(cdf_push_current_tokens): Same.
+ 	(cdf_push_dictionary): Same.
+ 	(cdf_push_enabled_exceptions): Same.
+ 	(cdf_push_source_format): Same.
+ 	(cdf_pop): Same.
+ 	(cdf_pop_call_convention): Same.
+ 	(cdf_pop_current_tokens): Same.
+ 	(cdf_pop_dictionary): Same.
+ 	(cdf_pop_source_format): Same.
+ 	(cdf_pop_enabled_exceptions): Same.
+ 
+ 2026-06-14  Robert Dubner  <rdubner@symas.com>
+ 
+ 	* move.cc (hex_of): Move the routine.
+ 	(hex_msg): Likewise.
+ 	(clear_negative_zero): New routine for clearing "negative zero"
+ 	after certain MOVEs.
+ 	(mh_numeric_display): Use clear_negative_zero().
+ 	(mh_packed_to_packed): Check for SIZE-ERROR; use
+ 	clear_negative_zero().
+ 	(mh_packed_to_numdisp): New routine.
+ 	(move_helper): Use mh_packed_to_numdisp().
+ 	(parser_move): Move the parser_move routine.
+ 	(parser_move_multi): Likewise.
+ 	(mh_numdisp_to_packed): Move routine; use clear_negative_zero;
+ 	* parse.y: Set separate_e for COMP-6 variables.
+ 
  2026-06-11  Robert Dubner  <rdubner@symas.com>
  
  	* move.cc (mh_packed_to_packed): Moved.
diff -Nrcpad gcc-17-20260614/gcc/cobol/Make-lang.in gcc-17-20260621/gcc/cobol/Make-lang.in
*** gcc-17-20260614/gcc/cobol/Make-lang.in	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/cobol/Make-lang.in	Sun Jun 21 22:32:06 2026
*************** gcobol-cross$(exeext): gcobol$(exeext)
*** 152,157 ****
--- 152,158 ----
  # First, files needed for parsing:
  
  cobol/parse.cc: cobol/parse.y
+ 	$(BISON) --version | grep ^bison
  	$(BISON) -o $@ $(YFLAGS)				\
  		--defines=cobol/parse.h			\
  		--report-file=cobol/parser.out $<
diff -Nrcpad gcc-17-20260614/gcc/cobol/cbldiag.h gcc-17-20260621/gcc/cobol/cbldiag.h
*** gcc-17-20260614/gcc/cobol/cbldiag.h	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/cobol/cbldiag.h	Sun Jun 21 22:32:06 2026
***************
*** 41,106 ****
  
  const char * cobol_filename();
  
  /*
!  *  These are user-facing messages.  They go through the gcc
!  *  diagnostic framework and use text that can be localized.
   */
- void yyerror( const char fmt[], ... ) ATTRIBUTE_GCOBOL_DIAG(1, 2);
  
! /* Location type.  Borrowed from parse.h as generated by Bison. */
! #if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED
! typedef struct YYLTYPE YYLTYPE;
! struct YYLTYPE
! {
!   int first_line;
!   int first_column;
!   int last_line;
!   int last_column;
  };
- # define YYLTYPE_IS_DECLARED 1
- # define YYLTYPE_IS_TRIVIAL 1
  
! const YYLTYPE& cobol_location();
! #endif
  
! #if ! defined YDFLTYPE && ! defined YDFLTYPE_IS_DECLARED
! typedef struct YDFLTYPE YDFLTYPE;
! struct YDFLTYPE
! {
!   int first_line;
!   int first_column;
!   int last_line;
!   int last_column;
  };
- # define YDFLTYPE_IS_DECLARED 1
- # define YDFLTYPE_IS_TRIVIAL 1
  
! #endif
  
! struct cbl_loc_t {
    int first_line;
    int first_column;
    int last_line;
    int last_column;
  
!   cbl_loc_t() 
!     : first_line(0)
!     , first_column(0)
!     , last_line(0)
!     , last_column(0)
    {}
!   cbl_loc_t( const YYLTYPE& loc ) 
!     : first_line(loc.first_line)
!     , first_column(loc.first_column)
!     , last_line(loc.last_line)
!     , last_column(loc.last_column)
    {}
! 
!   operator YYLTYPE() const {  //  cppcheck-suppress syntaxError
!     return { first_line, first_column, last_line, last_column };
!   } 
  };
  
  /*
   * Naming Convention: Names end with a letter that indicates 
   * their kind:
--- 41,136 ----
  
  const char * cobol_filename();
  
+ #if ! defined(ATTRIBUTE_GCOBOL_DIAG)
+ #define ATTRIBUTE_GCOBOL_DIAG(a, b)
+ #endif
+ #if ! defined(ATTRIBUTE_PRINTF_1)
+ #define ATTRIBUTE_PRINTF_1
+ #endif
+ #if ! defined(ATTRIBUTE_PRINTF_3)
+ #define ATTRIBUTE_PRINTF_3
+ #endif
+ 
  /*
!  * Enumerations do not depend on anything else. 
   */
  
! enum cbl_gcobol_feature_t {
!   feature_gcc_e = 0x00,
!   feature_internal_ebcdic_e = 0x01,
!   feature_embiggen_e        = 0x02, // widen numeric that redefine POINTER
  };
  
! bool cobol_gcobol_feature_set( cbl_gcobol_feature_t gcobol_feature,
!                                bool on = true );
  
! enum cbl_call_convention_t {
!   cbl_call_verbatim_e = 'V',
!   cbl_call_cobol_e = 'N', // native
  };
  
! void current_call_convention( cbl_call_convention_t convention);
! cbl_call_convention_t current_call_convention();
  
! 
! /*
!  * CDF state does not require types that would be defined in another file. 
!  */
! void cdf_push();
! void cdf_push_call_convention();
! void cdf_push_current_tokens();
! void cdf_push_dictionary();
! void cdf_push_enabled_exceptions();
! void cdf_push_source_format();
! 
! void cdf_pop();
! void cdf_pop_call_convention();
! void cdf_pop_current_tokens();
! void cdf_pop_dictionary();
! void cdf_pop_source_format();
! void cdf_pop_enabled_exceptions();
! 
! size_t current_program_index();
! 
! /*
!  *  These are user-facing messages.  They go through the gcc
!  *  diagnostic framework and use text that can be localized.
!  */
! // cppcheck-suppress syntaxError
! void yyerror( const char fmt[], ... ) ATTRIBUTE_GCOBOL_DIAG(1, 2);
! 
! struct cbl_loc_base_t {
    int first_line;
    int first_column;
    int last_line;
    int last_column;
+ };
+ struct cbl_loc_t : public cbl_loc_base_t {
  
!   cbl_loc_t() : cbl_loc_base_t{}
    {}
!   cbl_loc_t(   int first_line, int first_column,
!                int last_line,  int last_column ) 
!     : cbl_loc_base_t {
!         first_line , first_column,
!         last_line, last_column
!       }
    {}
!   cbl_loc_t( const cbl_loc_base_t& base ) : cbl_loc_base_t(base)   // cppcheck-suppress noExplicitConstructor
!   {}
! #if 0
!   cbl_loc_t(   int first_line, int first_column,
!                int last_line,  int last_column ) 
!     : first_line(first_line)
!     , first_column(first_column)
!     , last_line(last_line)
!     , last_column(last_column)
!   {}
! #endif
  };
  
+ const cbl_loc_t& cobol_location();
+ 
  /*
   * Naming Convention: Names end with a letter that indicates 
   * their kind:
*************** enum cbl_diag_id_t : uint64_t {
*** 176,187 ****
--- 206,223 ----
    DiagDiagDiag // always last
  };
  
+ void cbl_err(const char *format_string, ...) ATTRIBUTE_GCOBOL_DIAG(1, 2);
+ void cbl_errx(const char *format_string, ...) ATTRIBUTE_GCOBOL_DIAG(1, 2);
+ 
  bool cbl_message( cbl_diag_id_t id, const char msg[], ... )
    ATTRIBUTE_GCOBOL_DIAG(2, 3);
  
  bool cbl_message( cbl_loc_t loc, cbl_diag_id_t id, const char msg[], ... )
    ATTRIBUTE_GCOBOL_DIAG(3, 4);
  
+ [[noreturn]] void cbl_internal_error(const char *format_string, ...)
+   ATTRIBUTE_GCOBOL_DIAG(1, 2);
+ 
  bool
  dialect_ok( const cbl_loc_t& loc, cbl_diag_id_t id, const char term[], bool ok = true );
  
*************** dialect_not_ok( const cbl_loc_t& loc, cb
*** 192,202 ****
  
  // Diagnostic format specifiers are documented in gcc/pretty-print.cc
  // an error at a location, called from the parser for semantic errors
! void error_msg( const YYLTYPE& loc, const char gmsgid[], ... )
    ATTRIBUTE_GCOBOL_DIAG(2, 3);
  
  bool
! warn_msg( const YYLTYPE& loc, const char gmsgid[], ... )
    ATTRIBUTE_GCOBOL_DIAG(2, 3);
  
  // an error that uses token_location, not yylloc
--- 228,241 ----
  
  // Diagnostic format specifiers are documented in gcc/pretty-print.cc
  // an error at a location, called from the parser for semantic errors
! void error_msg( const cbl_loc_t& loc, const char gmsgid[], ... )
!   ATTRIBUTE_GCOBOL_DIAG(2, 3);
! 
! void error_msg( const cbl_loc_t& loc, const char gmsgid[], ... )
    ATTRIBUTE_GCOBOL_DIAG(2, 3);
  
  bool
! warn_msg( const cbl_loc_t& loc, const char gmsgid[], ... )
    ATTRIBUTE_GCOBOL_DIAG(2, 3);
  
  // an error that uses token_location, not yylloc
*************** void cbl_unimplementedw(cbl_diag_id_t id
*** 212,218 ****
    ATTRIBUTE_GCOBOL_DIAG(2, 3); // warning
  void cbl_unimplemented(const char *gmsgid, ...)
    ATTRIBUTE_GCOBOL_DIAG(1, 2);  // error
! void cbl_unimplemented_at( const  YYLTYPE& loc, const char *gmsgid, ... )
    ATTRIBUTE_GCOBOL_DIAG(2, 3);
  
  /*
--- 251,257 ----
    ATTRIBUTE_GCOBOL_DIAG(2, 3); // warning
  void cbl_unimplemented(const char *gmsgid, ...)
    ATTRIBUTE_GCOBOL_DIAG(1, 2);  // error
! void cbl_unimplemented_at( const  cbl_loc_t& loc, const char *gmsgid, ... )
    ATTRIBUTE_GCOBOL_DIAG(2, 3);
  
  /*
*************** void cbl_unimplemented_at( const  YYLTYP
*** 222,228 ****
   */
  void dbgmsg( const char fmt[], ... ) ATTRIBUTE_PRINTF_1;
  
! void gcc_location_set( const YYLTYPE& loc );
  
  void gcc_location_dump();
  
--- 261,267 ----
   */
  void dbgmsg( const char fmt[], ... ) ATTRIBUTE_PRINTF_1;
  
! void gcc_location_set( const cbl_loc_t& loc );
  
  void gcc_location_dump();
  
diff -Nrcpad gcc-17-20260614/gcc/cobol/cdf.y gcc-17-20260621/gcc/cobol/cdf.y
*** gcc-17-20260614/gcc/cobol/cdf.y	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/cobol/cdf.y	Sun Jun 21 22:32:06 2026
***************
*** 27,56 ****
   * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   */
  %{
  
! #include "cobol-system.h"
! #include <coretypes.h>
! #include <tree.h>
  
! #undef yy_flex_debug
  
- #include "../../libgcobol/ec.h"
- #include "../../libgcobol/common-defs.h"
- #include "util.h"
  #include "cbldiag.h"
- #include "symbols.h"
  #include "copybook.h"
  #include "../../libgcobol/exceptl.h"
  #include "exceptg.h"
  
  #define COUNT_OF(X) (sizeof(X) / sizeof(X[0]))
  
  copybook_t copybook;
  
  static inline bool
  is_word( int c ) {
!   return c == '_' || ISALNUM(c);
  }
  
  static std::pair<long long, bool>
--- 27,125 ----
   * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   */
+ 
  %{
  
! #include <cassert>
! #include <cctype>
! #include <cstdint>
! #include <cstdio>
! #include <cstdlib>
! #include <cstring>
  
! #include <algorithm>
! #include <deque>
! #include <list>
! #include <map>
! #include <iostream>
! #include <string>
! #include <vector>
! 
! #include <unistd.h>
! 
! #define HAVE_DECL_BASENAME 1
! #include <libiberty.h>
! 
! #define CDF_Y
  
  #include "cbldiag.h"
  #include "copybook.h"
+ #include "../../libgcobol/ec.h"
+ #include "../../libgcobol/common-defs.h"
  #include "../../libgcobol/exceptl.h"
  #include "exceptg.h"
  
+ // Quell warning: variable yynerrs_ set but not used
+ #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
+ 
+ std::ostream&
+ operator<<( std::ostream& os, cbl_loc_t const& loc ) {
+   os << "("
+      << loc.first_line
+      << ","
+      << loc.first_column 
+      << ") to ("
+      << loc.last_line 
+      << ","
+      << loc.last_column
+      << ")";
+   return os;
+ }
+ 
+ const char * keyword_str( int token );
+ 
+ namespace cdf {
+ static int current_token;
+ static int used_token( int token ) {
+   dbgmsg("%s: %s", __func__, keyword_str(token));
+   return current_token = token;
+ }
+ 
+ int used_token() { return current_token; }
+ }
+ #define USED_TOKEN(T) cdf::used_token(parser::token::YDF_ ##T)
+ 
+ %}
+                         
+ %code requires {
+     namespace cdf
+     {
+         class parser;
+     }
+ }
+ 
+ %code {    
+     // https://learnmoderncpp.com/2020/12/17/generating-c-programs-with-flex-and-bison-2/
+     namespace cdf
+     {
+         int cdflex( parser::semantic_type *value, cbl_loc_t *loc );
+     }
+ }
+ 
+ %define api.location.type {cbl_loc_t}
+                         
+ %{
  #define COUNT_OF(X) (sizeof(X) / sizeof(X[0]))
  
+ int keyword_tok( const char * text, bool include_intrinsics = false );
+ 
  copybook_t copybook;
  
+ std::ostream& operator<<(std::ostream& os, const cbl_loc_t& loc);
+ 
  static inline bool
  is_word( int c ) {
!   return c == '_' || ::isalnum(c);
  }
  
  static std::pair<long long, bool>
*************** integer_literal( const char input[] ) {
*** 66,80 ****
      'yynerrs', 'yylval', 'yylloc', 'yychar' and 'yydebug'.  [...] The
      renamed macros include 'YYSTYPE', 'YYLTYPE', and 'YYDEBUG'" */
  
! extern int yylineno, yyleng;
  extern char *yytext;
  
! static int ydflex(void);
  
  #define PROGRAM current_program_index()
  
! const YYLTYPE& cobol_location();
! static YYLTYPE location_set( const YYLTYPE& loc );
  void input_file_status_notify();
  
  #define YYLLOC_DEFAULT(Current, Rhs, N) 				\
--- 135,149 ----
      'yynerrs', 'yylval', 'yylloc', 'yychar' and 'yydebug'.  [...] The
      renamed macros include 'YYSTYPE', 'YYLTYPE', and 'YYDEBUG'" */
  
! extern int yylineno, yyleng, yydebug;
  extern char *yytext;
  
! extern size_t cbl_gcobol_features;
  
  #define PROGRAM current_program_index()
  
! const cbl_loc_t& cobol_location();
! static cbl_loc_t location_set( const cbl_loc_t& loc );
  void input_file_status_notify();
  
  #define YYLLOC_DEFAULT(Current, Rhs, N) 				\
*************** void input_file_status_notify();
*** 104,110 ****
  
  %code requires {
    #include "cdfval.h"
! 
    using std::map;
  
  #pragma GCC diagnostic push
--- 173,179 ----
  
  %code requires {
    #include "cdfval.h"
!   struct cbl_file_t;
    using std::map;
  
  #pragma GCC diagnostic push
*************** void input_file_status_notify();
*** 153,161 ****
    cdfval_t operator/( const cdfval_base_t& lhs, const cdfval_base_t& rhs );
    cdfval_t negate( cdfval_base_t lhs );
  
!   cbl_field_t
!   cdf_literalize( const cbl_loc_t& loc,
!                   const std::string& name, const cdfval_t& value, bool init = true );
  }
  
  %{
--- 222,232 ----
    cdfval_t operator/( const cdfval_base_t& lhs, const cdfval_base_t& rhs );
    cdfval_t negate( cdfval_base_t lhs );
  
!   void cdf_unreachable(); 
!   void cdf_field_add( const cbl_loc_t&, const std::string& name, const cdfval_t& value );
!   cbl_file_t * cdf_file( size_t program, const cbl_name_t name );
!   size_t cdf_file_index( const cbl_file_t *file );
!   const char * cdf_file_name(const cbl_file_t*);
  }
  
  %{
*************** apply_cdf_turn( const exception_turn_t&
*** 189,203 ****
      std::set<size_t> *files;
  }
  
! %printer { fprintf(yyo, "'%s'", $$? "true" : "false" ); } <boolean>
! %printer { fprintf(yyo, "'%s'", $$ ); } <string>
! %printer { fprintf(yyo, "%s '%s'",
  		   keyword_str($$.token),
  		   $$.string? $$.string : "<nil>" ); } <cdfarg>
! /* cppcheck-suppress invalidPrintfArgType_sint */
! %printer { fprintf(yyo, HOST_SIZE_T_PRINT_DEC " '%s'",
! 		   (fmt_size_t)$$.number, $$.string? $$.string : "" ); } <cdfval>
! 
  %type	<string>	NAME NUMSTR LITERAL PSEUDOTEXT
  %type	<string>	LSUB RSUB SUBSCRIPT
  %type	<cdfarg>	namelit name_any name_one
--- 260,274 ----
      std::set<size_t> *files;
  }
  
! %printer { fprintf(stderr, "'%s'", $$ ); } <string>
! %printer { fprintf(stderr, "'%s'", $$? "true" : "false" ); } <boolean>
! %printer { fprintf(stderr, "%s '%s'",
  		   keyword_str($$.token),
  		   $$.string? $$.string : "<nil>" ); } <cdfarg>
! // cppcheck-suppress invalidPrintfArgType_sint 
! %printer { fprintf(stderr, "%ld '%s'",
! 		   (long)$$.number, $$.string? $$.string : "" ); } <cdfval>
!                         
  %type	<string>	NAME NUMSTR LITERAL PSEUDOTEXT
  %type	<string>	LSUB RSUB SUBSCRIPT
  %type	<cdfarg>	namelit name_any name_one
*************** apply_cdf_turn( const exception_turn_t&
*** 265,271 ****
  %left '*'  '/'
  %right NEG 958
  
! %define api.prefix {ydf}
  %define api.token.prefix{YDF_}
  
  %locations
--- 336,345 ----
  %left '*'  '/'
  %right NEG 958
  
! %require "3.8.2"  // for C++ output
! %language "c++"
! 
! %define api.prefix {cdf}
  %define api.token.prefix{YDF_}
  
  %locations
*************** cdf_display:	CDF_DISPLAY strings {
*** 314,322 ****
--- 388,398 ----
  		}
  		;
  strings:	LITERAL {
+                   USED_TOKEN(LITERAL);
  		  display_msg = xstrdup($1);
  		}
  	|	strings LITERAL {
+                   USED_TOKEN(LITERAL);
  		  char *p = display_msg;
  		  display_msg = xasprintf("%s %s", p, $2);
  		  free(p);
*************** partials:	partial
*** 333,343 ****
  		}
  		;
  partial:	cdf_if            /* text */
! 	|	CDF_ELSE          { scanner_parsing_toggle(); }
! 	|	CDF_END_IF        { scanner_parsing_pop(); }
  	|	cdf_evaluate      /* text */
  	|	cdf_eval_when     /* text */
! 	|	CDF_END_EVALUATE  { scanner_parsing_pop(); }
  	;
  
  cdf_define:	CDF_DEFINE cdf_constant NAME as cdf_expr[value] override
--- 409,419 ----
  		}
  		;
  partial:	cdf_if            /* text */
! 	|	CDF_ELSE          { USED_TOKEN(CDF_ELSE);   scanner_parsing_toggle(); }
! 	|	CDF_END_IF        { USED_TOKEN(CDF_END_IF); scanner_parsing_pop(); }
  	|	cdf_evaluate      /* text */
  	|	cdf_eval_when     /* text */
! 	|	CDF_END_EVALUATE  { USED_TOKEN(CDF_END_EVALUATE); scanner_parsing_pop(); }
  	;
  
  cdf_define:	CDF_DEFINE cdf_constant NAME as cdf_expr[value] override
*************** cdf_define:	CDF_DEFINE cdf_constant NAME
*** 358,367 ****
  		    }
  		    YYERROR;
  		  }
!                   if( symbols_begin() < symbols_end() ) {
!                     cbl_field_t field = cdf_literalize(@NAME, $NAME, $value);
!                     symbol_field_add(current_program_index(), &field);                    
!                   }
  
  		}
  	|	CDF_DEFINE cdf_constant NAME EQ cdf_expr[value] override
--- 434,440 ----
  		    }
  		    YYERROR;
  		  }
!                   cdf_field_add( @NAME, $NAME, $value );
  
  		}
  	|	CDF_DEFINE cdf_constant NAME EQ cdf_expr[value] override
*************** cdf_define:	CDF_DEFINE cdf_constant NAME
*** 372,377 ****
--- 445,451 ----
  		}
  	|	CDF_DEFINE cdf_constant NAME as OFF
  		{
+                   USED_TOKEN(OFF);
  		  cdfval_off( $NAME);
  		}
  	|	CDF_DEFINE cdf_constant NAME as PARAMETER_kw override
*************** cdf_define:	CDF_DEFINE cdf_constant NAME
*** 390,395 ****
--- 464,470 ----
  		  }
  		}
  	|	CDF_DEFINE FEATURE as ON {
+                   USED_TOKEN(ON);
  		  auto feature = cbl_gcobol_feature_t($2);
  		  if( ! cobol_gcobol_feature_set(feature, true) ) {
  		    error_msg(@FEATURE,
*************** cdf_define:	CDF_DEFINE cdf_constant NAME
*** 397,402 ****
--- 472,478 ----
  		  }
  		}
  	|	CDF_DEFINE FEATURE as OFF {
+                   USED_TOKEN(OFF);
  		  auto feature = cbl_gcobol_feature_t($2);
  		  if( ! cobol_gcobol_feature_set(feature, false) ) {
  		    error_msg(@FEATURE,
*************** cdf_define:	CDF_DEFINE cdf_constant NAME
*** 405,414 ****
  		}
  		;
  cdf_constant:	%empty
! 	|	CONSTANT
! 		;
  override:	%empty   { $$ = false; }
! 	|	OVERRIDE { $$ = true; }
  		;
  
  cdf_turn:	TURN except_names except_check
--- 481,492 ----
  		}
  		;
  cdf_constant:	%empty
! 	|	CONSTANT { 
!                   USED_TOKEN(CONSTANT);
!                 }
!                 ;
  override:	%empty   { $$ = false; }
! 	|	OVERRIDE { $$ = true; USED_TOKEN(OVERRIDE); }
  		;
  
  cdf_turn:	TURN except_names except_check
*************** cdf_turn:	TURN except_names except_check
*** 420,460 ****
  
  cdf_call_convention:
                  CALL_COBOL {
                    current_call_convention(cbl_call_cobol_e);
                  }
          |       CALL_VERBATIM {
                    current_call_convention(cbl_call_verbatim_e);
                  }
                  ;
  
  cdf_push:       CDF_PUSH cdf_stackable {
  		  switch( $cdf_stackable ) {
!                   case YDF_ALL: 		cdf_push(); break;
!                   case YDF_CALL_CONVENTION: cdf_push_call_convention(); break;
!                   case YDF_CDF_DEFINE: 	cdf_push_dictionary(); break;
!                   case YDF_COBOL_WORDS: 	cdf_push_current_tokens(); break;
!                   case YDF_SOURCE_FORMAT:	cdf_push_source_format(); break;
!                   default: gcc_unreachable(); 
                    }
                  }
                  ;
  cdf_pop:        CDF_POP cdf_stackable {
  		  switch( $cdf_stackable ) {
!                   case YDF_ALL: 		cdf_pop(); break;
!                   case YDF_CALL_CONVENTION: cdf_pop_call_convention(); break;
!                   case YDF_CDF_DEFINE: 	cdf_pop_dictionary(); break;
!                   case YDF_COBOL_WORDS: 	cdf_pop_current_tokens(); break;
!                   case YDF_SOURCE_FORMAT:	cdf_pop_source_format(); break; 
!                   default: gcc_unreachable(); 
                    }
                  }
                  ;
  
! cdf_stackable:  ALL		{ $$ = YDF_ALL; }
!         |       CALL_CONVENTION	{ $$ = YDF_CALL_CONVENTION; }
!         |       COBOL_WORDS	{ $$ = YDF_COBOL_WORDS; }
!         |       CDF_DEFINE	{ $$ = YDF_CDF_DEFINE; }
!         |       SOURCE_FORMAT	{ $$ = YDF_SOURCE_FORMAT; }
                  ;
  
  except_names: 	except_name
--- 498,540 ----
  
  cdf_call_convention:
                  CALL_COBOL {
+                   USED_TOKEN(CALL_COBOL);
                    current_call_convention(cbl_call_cobol_e);
                  }
          |       CALL_VERBATIM {
+                   USED_TOKEN(CALL_VERBATIM);
                    current_call_convention(cbl_call_verbatim_e);
                  }
                  ;
  
  cdf_push:       CDF_PUSH cdf_stackable {
  		  switch( $cdf_stackable ) {
!                   case parser::token::YDF_ALL: 		cdf_push(); break;
!                   case parser::token::YDF_CALL_CONVENTION: cdf_push_call_convention(); break;
!                   case parser::token::YDF_CDF_DEFINE: 	cdf_push_dictionary(); break;
!                   case parser::token::YDF_COBOL_WORDS: 	cdf_push_current_tokens(); break;
!                   case parser::token::YDF_SOURCE_FORMAT:	cdf_push_source_format(); break;
!                   default: cdf_unreachable(); 
                    }
                  }
                  ;
  cdf_pop:        CDF_POP cdf_stackable {
  		  switch( $cdf_stackable ) {
!                   case parser::token::YDF_ALL: 		cdf_pop(); break;
!                   case parser::token::YDF_CALL_CONVENTION: cdf_pop_call_convention(); break;
!                   case parser::token::YDF_CDF_DEFINE: 	cdf_pop_dictionary(); break;
!                   case parser::token::YDF_COBOL_WORDS: 	cdf_pop_current_tokens(); break;
!                   case parser::token::YDF_SOURCE_FORMAT:	cdf_pop_source_format(); break; 
!                   default: cdf_unreachable(); 
                    }
                  }
                  ;
  
! cdf_stackable:  ALL		{ $$ = parser::token::YDF_ALL; }
!         |       CALL_CONVENTION	{ $$ = parser::token::YDF_CALL_CONVENTION; }
!         |       COBOL_WORDS	{ $$ = parser::token::YDF_COBOL_WORDS; }
!         |       CDF_DEFINE	{ $$ = parser::token::YDF_CDF_DEFINE; }
!         |       SOURCE_FORMAT	{ $$ = parser::token::YDF_SOURCE_FORMAT; }
                  ;
  
  except_names: 	except_name
*************** except_name:	EXCEPTION_NAME[ec] {
*** 472,519 ****
  		;
  
  except_check:	CHECKING on  { $$ = exception_turn.enable(true); }
! 	|	CHECKING OFF { $$ = exception_turn.enable(false); }
  	|	CHECKING on with LOCATION
  		{
  		  $$ = exception_turn.enable(true, true);
  		}
  		;
  
  filenames:      filename {
  		  $$ = new std::set<size_t>;
! 		  $$->insert(symbol_index(symbol_elem_of($1)));
  		}
          |       filenames filename {
  		  $$ = $1;
! 		  auto inserted = $$->insert(symbol_index(symbol_elem_of($2)));
  		  if( ! inserted.second ) {
! 		    error_msg(@2, "%s: No file-name shall be specified more than "
! 			      "once for one exception condition", $filename->name);
  		  }
  		}
                  ;
  filename:       NAME
                  {
!                   struct symbol_elem_t *e = symbol_file(PROGRAM, $1);
!                   if( !(e && e->type == SymFile) ) {
  		    error_msg(@NAME, "invalid file name '%s'", $NAME);
  		    YYERROR;
                    }
-                   $$ = cbl_file_of(e);
                  }
                  ;
  
  cdf_if:		CDF_IF cdf_cond_expr {
! 		  scanner_parsing(YDF_CDF_IF, $2);
  		}
  	|	CDF_IF error {
  		} CDF_END_IF { // not pushed, don't pop
  		  if( ! scanner_parsing() ) YYACCEPT;
  		}
  		;
  
  cdf_evaluate:   CDF_EVALUATE cdf_expr
! 	|	CDF_EVALUATE TRUE_kw
                  ;
  
  cdf_eval_when:	CDF_WHEN cdf_eval_obj
--- 552,606 ----
  		;
  
  except_check:	CHECKING on  { $$ = exception_turn.enable(true); }
! 	|	CHECKING OFF {
!                   USED_TOKEN(OFF);
!                   $$ = exception_turn.enable(false);
!                 }
  	|	CHECKING on with LOCATION
  		{
+                   USED_TOKEN(LOCATION);
  		  $$ = exception_turn.enable(true, true);
  		}
  		;
  
  filenames:      filename {
  		  $$ = new std::set<size_t>;
! 		  $$->insert(cdf_file_index($1));
  		}
          |       filenames filename {
  		  $$ = $1;
! 		  auto inserted = $$->insert(cdf_file_index($2));
  		  if( ! inserted.second ) {
! 		    error_msg(@2, "%s: No file-name shall be specified more than once "
! 			          "for one exception condition",
!                               cdf_file_name($filename));
  		  }
  		}
                  ;
  filename:       NAME
                  {
!                   USED_TOKEN(NAME);
!                   if( ($$ = cdf_file(PROGRAM, $1)) == nullptr ) {
  		    error_msg(@NAME, "invalid file name '%s'", $NAME);
  		    YYERROR;
                    }
                  }
                  ;
  
  cdf_if:		CDF_IF cdf_cond_expr {
! 		  scanner_parsing(parser::token::YDF_CDF_IF, $2);
  		}
  	|	CDF_IF error {
  		} CDF_END_IF { // not pushed, don't pop
+                   USED_TOKEN(CDF_END_IF);
  		  if( ! scanner_parsing() ) YYACCEPT;
  		}
  		;
  
  cdf_evaluate:   CDF_EVALUATE cdf_expr
! 	|	CDF_EVALUATE TRUE_kw {
!                   USED_TOKEN(TRUE_kw);
!                 }
                  ;
  
  cdf_eval_when:	CDF_WHEN cdf_eval_obj
*************** cdf_eval_when:	CDF_WHEN cdf_eval_obj
*** 521,540 ****
  
  cdf_eval_obj:	cdf_cond_expr
          |       cdf_expr THRU cdf_expr
!         |       OTHER
          ;
  
! cdf_cond_expr:	BOOL
  	|	NAME DEFINED
  		{
                    cdf_values_t& dictionary( cdf_dictionary() );
  		  auto p = dictionary.find($1);
  		  bool found = p != dictionary.end();
  		  if( !$DEFINED ) found = ! found;
  		  $$ = found;
  		  if( found ) {
! 		    dbgmsg("CDF: %s found in dictionary (result %s)",
! 			   $1, $$? "true" : "false");
  		  } else {
  		    dbgmsg("CDF: %s not found in dictionary (result %s)",
  			   $1, $$? "true" : "false");
--- 608,633 ----
  
  cdf_eval_obj:	cdf_cond_expr
          |       cdf_expr THRU cdf_expr
!         |       OTHER {
!                   USED_TOKEN(OTHER);
!                 }
          ;
  
! cdf_cond_expr:	BOOL {
!                   USED_TOKEN(BOOL);
!                 }
  	|	NAME DEFINED
  		{
+                   USED_TOKEN(DEFINED);
                    cdf_values_t& dictionary( cdf_dictionary() );
  		  auto p = dictionary.find($1);
  		  bool found = p != dictionary.end();
  		  if( !$DEFINED ) found = ! found;
  		  $$ = found;
  		  if( found ) {
!                     const char *aint = $DEFINED? "" : "not ";
! 		    dbgmsg("CDF: %s %sfound in dictionary (result %s)",
! 			   $1, aint, $$? "true" : "false");
  		  } else {
  		    dbgmsg("CDF: %s not found in dictionary (result %s)",
  			   $1, $$? "true" : "false");
*************** cdf_cond_expr:	BOOL
*** 542,547 ****
--- 635,641 ----
  		}
  	|	cdf_bool_expr { $$ = $1(@1) == 0? false : true; }
  	|	FEATURE DEFINED {
+                   USED_TOKEN(DEFINED);
  		  const auto& feature($1);
  		  $$ = (feature == int(feature & cbl_gcobol_features));
  		  dbgmsg("CDF: feature 0x%02x is %s", $1, $$? "ON" : "OFF");
*************** cdf_expr:	cdf_expr '+' cdf_expr { $$ = $
*** 609,614 ****
--- 703,709 ----
          ;
  
  cdf_factor:     NAME {
+                   USED_TOKEN(NAME);
                    cdf_values_t& dictionary( cdf_dictionary() );
  		  auto that = dictionary.find($1);
  		  if( that != dictionary.end() ) {
*************** cdf_factor:     NAME {
*** 623,631 ****
  		    $$ = cdfval_t();
  		  }
  		}
! 	|	NUMBER { $$ = cdfval_t($1); }
! 	|	LITERAL { $$ = cdfval_t($1); }
  	| 	NUMSTR {
  		  auto value = integer_literal($NUMSTR);
  		  if( !value.second ) {
  		    error_msg(@1, "CDF error: parsed %qs as %lld",
--- 718,734 ----
  		    $$ = cdfval_t();
  		  }
  		}
! 	|	NUMBER
!                 {
!                   USED_TOKEN(NUMBER);
!                   $$ = cdfval_t($1);
!                 }
! 	|	LITERAL {
!                   USED_TOKEN(LITERAL);
!                   $$ = cdfval_t($1);
!                  }
  	| 	NUMSTR {
+                   USED_TOKEN(NUMSTR);
  		  auto value = integer_literal($NUMSTR);
  		  if( !value.second ) {
  		    error_msg(@1, "CDF error: parsed %qs as %lld",
*************** replace_by:	name_any[a] BY name_any[b]
*** 669,684 ****
  		  bool add_whitespace = false;
  		  replace_type_t type = {};
  		  switch($a.token) {
! 		  case YDF_NUMSTR:
! 		  case YDF_LITERAL:
  		    type = string_e;
  		    break;
! 		  case YDF_NAME:
  		    type = token_e;
  		    break;
! 		  case YDF_PSEUDOTEXT:
  		    type = pseudo_e;
! 		    add_whitespace = $b.token != YDF_PSEUDOTEXT;
  		    break;
  		  default:
  		      cbl_err("%s:%d: logic error on token %s",
--- 772,787 ----
  		  bool add_whitespace = false;
  		  replace_type_t type = {};
  		  switch($a.token) {
! 		  case parser::token::YDF_NUMSTR:
! 		  case parser::token::YDF_LITERAL:
  		    type = string_e;
  		    break;
! 		  case parser::token::YDF_NAME:
  		    type = token_e;
  		    break;
! 		  case parser::token::YDF_PSEUDOTEXT:
  		    type = pseudo_e;
! 		    add_whitespace = $b.token != parser::token::YDF_PSEUDOTEXT;
  		    break;
  		  default:
  		      cbl_err("%s:%d: logic error on token %s",
*************** replace_by:	name_any[a] BY name_any[b]
*** 698,717 ****
  suppress:	%empty
  	|	SUPPRESS
  		{
  		  copybook.suppress();
  		}
  		;
  
  name_any:	namelit
  	|	PSEUDOTEXT {
! 		  $$ = cdf_arg_t{YDF_PSEUDOTEXT, $1};
  		}
  		;
  
  name_one:	NAME
  		{
                    cdf_values_t& dictionary( cdf_dictionary() );
! 		  cdf_arg_t arg = { YDF_NAME, $1 };
  		  auto p = dictionary.find($1);
  
  		  if( p != dictionary.end() ) {
--- 801,823 ----
  suppress:	%empty
  	|	SUPPRESS
  		{
+                   USED_TOKEN(SUPPRESS);
  		  copybook.suppress();
  		}
  		;
  
  name_any:	namelit
  	|	PSEUDOTEXT {
!                   USED_TOKEN(PSEUDOTEXT);
! 		  $$ = cdf_arg_t{parser::token::YDF_PSEUDOTEXT, $1};
  		}
  		;
  
  name_one:	NAME
  		{
+                   USED_TOKEN(NAME);
                    cdf_values_t& dictionary( cdf_dictionary() );
! 		  cdf_arg_t arg = { parser::token::YDF_NAME, $1 };
  		  auto p = dictionary.find($1);
  
  		  if( p != dictionary.end() ) {
*************** name_one:	NAME
*** 719,732 ****
  		  }
  		  $$ = arg;
  		}
! 	|	NUMSTR  { $$ = cdf_arg_t{YDF_NUMSTR, $1}; }
! 	|	LITERAL { $$ = cdf_arg_t{YDF_LITERAL, $1}; }
  		;
  
  namelit:	name
  		{
                    cdf_values_t& dictionary( cdf_dictionary() );
! 		  cdf_arg_t arg = { YDF_NAME, $1 };
  		  auto p = dictionary.find($1);
  
  		  if( p != dictionary.end() ) {
--- 825,844 ----
  		  }
  		  $$ = arg;
  		}
! 	|	NUMSTR {
!                   USED_TOKEN(NUMSTR);
!                   $$ = cdf_arg_t{parser::token::YDF_NUMSTR, $1};
!                 }
! 	|	LITERAL {
!                   USED_TOKEN(LITERAL);
!                   $$ = cdf_arg_t{parser::token::YDF_LITERAL, $1};
!                 }
  		;
  
  namelit:	name
  		{
                    cdf_values_t& dictionary( cdf_dictionary() );
! 		  cdf_arg_t arg = { parser::token::YDF_NAME, $1 };
  		  auto p = dictionary.find($1);
  
  		  if( p != dictionary.end() ) {
*************** namelit:	name
*** 740,755 ****
  		  free(const_cast<char*>($1));
  		  free(const_cast<char*>($2));
  
! 		  cdf_arg_t arg = { YDF_NAME, s };
  		  $$ = arg;
  		}
! 	|	NUMSTR  { $$ = cdf_arg_t{YDF_NUMSTR, $1}; }
! 	|	LITERAL { $$ = cdf_arg_t{YDF_LITERAL, $1}; }
  		;
  
! name:		NAME
  	|	name inof NAME
  		{
  		  char *s = xasprintf( "%s %s %s", $1, $2, $3 );
  		  assert($$ == $1);
  		  free(const_cast<char*>($1));
--- 852,870 ----
  		  free(const_cast<char*>($1));
  		  free(const_cast<char*>($2));
  
! 		  cdf_arg_t arg = { parser::token::YDF_NAME, s };
  		  $$ = arg;
  		}
! 	|	NUMSTR  { $$ = cdf_arg_t{parser::token::YDF_NUMSTR, $1}; }
! 	|	LITERAL { $$ = cdf_arg_t{parser::token::YDF_LITERAL, $1}; }
  		;
  
! name:		NAME {
!                   USED_TOKEN(NAME);
!                 }                  
  	|	name inof NAME
  		{
+                   USED_TOKEN(NAME);
  		  char *s = xasprintf( "%s %s %s", $1, $2, $3 );
  		  assert($$ == $1);
  		  free(const_cast<char*>($1));
*************** name:		NAME
*** 757,769 ****
  		  $$ = s;
  		}
                  ;
! inof:           IN { static const char in[] = "IN"; $$ = in; }
!         |       OF { static const char of[] = "OF"; $$ = of; }
                  ;
  
  subscripts:	subscript
! 	|	subscripts subscript
! 		{
  		  char *s = xasprintf("%s%s", $1, $2 );
  		  if( $$ != $1 ) free(const_cast<char*>($$));
  		  free(const_cast<char*>($1));
--- 872,889 ----
  		  $$ = s;
  		}
                  ;
! inof:           IN {
!                   USED_TOKEN(IN);
!                   static const char in[] = "IN"; $$ = in;
!                 }
!         |       OF {
!                   USED_TOKEN(OF);
!                   static const char of[] = "OF"; $$ = of;
!                 }
                  ;
  
  subscripts:	subscript
! 	|	subscripts subscript {
  		  char *s = xasprintf("%s%s", $1, $2 );
  		  if( $$ != $1 ) free(const_cast<char*>($$));
  		  free(const_cast<char*>($1));
*************** subscripts:	subscript
*** 771,779 ****
  		  $$ = s;
  		}
  		;
! subscript:	SUBSCRIPT
  	|	LSUB subscript RSUB
  		{
  		  char *s = xasprintf( "%s%s%s", $1, $2, $3 );
  		  free(const_cast<char*>($1));
  		  free(const_cast<char*>($2));
--- 891,902 ----
  		  $$ = s;
  		}
  		;
! subscript:	SUBSCRIPT {
!                   USED_TOKEN(SUBSCRIPT);
!                 }
  	|	LSUB subscript RSUB
  		{
+                   USED_TOKEN(RSUB);
  		  char *s = xasprintf( "%s%s%s", $1, $2, $3 );
  		  free(const_cast<char*>($1));
  		  free(const_cast<char*>($2));
*************** subscript:	SUBSCRIPT
*** 783,805 ****
  		;
  
  as:		%empty
! 	|	AS
  		;
  
  on:             %empty
!         |       ON
                  ;
  
  with:           %empty
!         |       WITH
                  ;
  
  %%
  
! static YYLTYPE cdf_location;
  
! static YYLTYPE
! location_set( const YYLTYPE& loc ) {
    return cdf_location = loc;
  }
  
--- 906,934 ----
  		;
  
  as:		%empty
! 	|	AS {
!                   USED_TOKEN(AS);
!                 }
  		;
  
  on:             %empty
!         |       ON {
!                   USED_TOKEN(ON);
!                 }
                  ;
  
  with:           %empty
!         |       WITH {
!                   USED_TOKEN(WITH);
!                 }
                  ;
  
  %%
  
! static cbl_loc_t cdf_location;
  
! static cbl_loc_t
! location_set( const cbl_loc_t& loc ) {
    return cdf_location = loc;
  }
  
*************** defined_cmd( const char arg[] )
*** 829,836 ****
  
    if( yydebug ) {
      if( cdf_name->second.is_numeric() ) {
!       dbgmsg("%s: added -D %s = " HOST_SIZE_T_PRINT_DEC,
!              __func__, name, (fmt_size_t)cdf_name->second.as_number());
      } else {
        dbgmsg("%s: added -D %s = \"%s\"", __func__, name, cdf_name->second.string);
      }
--- 958,965 ----
  
    if( yydebug ) {
      if( cdf_name->second.is_numeric() ) {
!       dbgmsg("%s: added -D %s = %ld",
!              __func__, name, (long)cdf_name->second.as_number());
      } else {
        dbgmsg("%s: added -D %s = \"%s\"", __func__, name, cdf_name->second.string);
      }
*************** cdfval_t negate( cdfval_base_t lhs ) {
*** 921,933 ****
    return lhs;
  }
  
- #undef yylex
- int yylex(void);
- 
- static int ydflex(void) {
-   return yylex();
- }
- 
  bool
  cdf_value( const char name[], const cdfval_t& value ) {
    cdf_values_t& dictionary( cdf_dictionary() );
--- 1050,1055 ----
*************** cdf_value( const char name[] ) {
*** 950,956 ****
  }
  
  static bool
! verify_integer( const YDFLTYPE& loc, const cdfval_base_t& val ) {
    if( val.string ) {
      error_msg(loc, "'%s' is not an integer", val.string);
      return false;
--- 1072,1078 ----
  }
  
  static bool
! verify_integer( const cbl_loc_t& loc, const cdfval_base_t& val ) {
    if( val.string ) {
      error_msg(loc, "'%s' is not an integer", val.string);
      return false;
*************** verify_integer( const YDFLTYPE& loc, con
*** 959,968 ****
  }
  
  const cdfval_base_t&
! cdfval_base_t::operator()( const YDFLTYPE& loc ) {
    static cdfval_t zero(0);
    // cppcheck-suppress returnTempReference
    return verify_integer(loc, *this) ? *this : zero;
  }
- 
    
--- 1081,1096 ----
  }
  
  const cdfval_base_t&
! cdfval_base_t::operator()( const cbl_loc_t& loc ) {
    static cdfval_t zero(0);
    // cppcheck-suppress returnTempReference
    return verify_integer(loc, *this) ? *this : zero;
  }
    
+ namespace cdf {
+   void
+   parser::error(cbl_loc_t const& loc, std::string const& msg) {
+       error_msg(loc, msg.c_str());
+   }
+ }
+ 
diff -Nrcpad gcc-17-20260614/gcc/cobol/cdfval.h gcc-17-20260621/gcc/cobol/cdfval.h
*** gcc-17-20260614/gcc/cobol/cdfval.h	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/cobol/cdfval.h	Sun Jun 21 22:32:06 2026
*************** bool scanner_parsing();
*** 46,57 ****
   * We use the derived type cdfval_t, which can be properly constructed and
   * operated on, but tell Bison only about its POD base class.
   */
! struct YDFLTYPE;
  struct cdfval_base_t {
    bool off;
    const char *string;
    int64_t number;
!   const cdfval_base_t& operator()( const YDFLTYPE& loc );
  };
  
  struct cdf_arg_t {
--- 46,59 ----
   * We use the derived type cdfval_t, which can be properly constructed and
   * operated on, but tell Bison only about its POD base class.
   */
! 
! struct cbl_loc_t;
! 
  struct cdfval_base_t {
    bool off;
    const char *string;
    int64_t number;
!   const cdfval_base_t& operator()( const cbl_loc_t& loc );
  };
  
  struct cdf_arg_t {
*************** struct cdfval_t : public cdfval_base_t {
*** 101,106 ****
--- 103,109 ----
      cdfval_base_t::string = NULL;
      cdfval_base_t::number = value;
    }
+ #if GCC_TYPES
    explicit cdfval_t( const REAL_VALUE_TYPE& r )
      : lineno(yylineno), filename(cobol_filename())
    {
*************** struct cdfval_t : public cdfval_base_t {
*** 109,114 ****
--- 112,118 ----
      HOST_WIDE_INT value = real_to_integer(&r);
      cdfval_base_t::number = value;
    }
+ #endif
    cdfval_t( const cdfval_base_t& value ) // cppcheck-suppress noExplicitConstructor
      : lineno(yylineno), filename(cobol_filename())
    {
diff -Nrcpad gcc-17-20260614/gcc/cobol/compare.cc gcc-17-20260621/gcc/cobol/compare.cc
*** gcc-17-20260614/gcc/cobol/compare.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/cobol/compare.cc	Sun Jun 21 22:32:06 2026
*************** numeric_alpha_compare(tree        &left,
*** 1101,1126 ****
  
      // The type of the variable should be straightforward.  It is not.  There
      // are various considerations in determining the type.
-     tree type;
-     size_t digits = left_side.field->data.digits;
      tree value;
!     if( digits == 0 )
!       {
!       // This is a pure binary type.
!       type = tree_type_from_size(left_side.field->data.capacity(),
!                                  left_side.field->attr & signable_e);
!       }
!     else
!       {
!       // There is some specified number of digits in the variable:
!       // But if the variable is scaled, we have to multiply by 10^N, where
!       // N is the number of zeroed P digits:
!       if( left_side.field->data.rdigits < 0 )
!         {
!         digits += -left_side.field->data.rdigits;
!         }
!       type = tree_type_from_digits(digits, left_side.field->attr&signable_e);
!       }
  
      // We have what we need to get the value:
      get_binary_value(value, left_side, type);
--- 1101,1108 ----
  
      // The type of the variable should be straightforward.  It is not.  There
      // are various considerations in determining the type.
      tree value;
!     tree type = tree_type_from_refer(left_side);
  
      // We have what we need to get the value:
      get_binary_value(value, left_side, type);
*************** numeric_alpha_compare(tree        &left,
*** 1197,1203 ****
                  "__gg__compare_numeric_all",
                  gg_get_address_of(left),
                  gg_cast(UINT128, value),
!                 build_int_cst_type(SIZE_T, digits),
                  build_string_literal(nbytes, converted),
                  build_int_cst_type(SIZE_T, nbytes),
                  build_int_cst_type(INT, left_side.field->codeset.encoding),
--- 1179,1185 ----
                  "__gg__compare_numeric_all",
                  gg_get_address_of(left),
                  gg_cast(UINT128, value),
!                 build_int_cst_type(SIZE_T, left_side.field->data.digits),
                  build_string_literal(nbytes, converted),
                  build_int_cst_type(SIZE_T, nbytes),
                  build_int_cst_type(INT, left_side.field->codeset.encoding),
*************** numeric_alpha_compare(tree        &left,
*** 1214,1220 ****
                  "__gg__compare_binary_to_string",
                  gg_get_address_of(left),
                  gg_cast(UINT128, value),
!                 build_int_cst_type(SIZE_T, digits),
                  location_right,
                  length_right,
                  build_int_cst_type(INT, right_side.field->codeset.encoding),
--- 1196,1202 ----
                  "__gg__compare_binary_to_string",
                  gg_get_address_of(left),
                  gg_cast(UINT128, value),
!                 build_int_cst_type(SIZE_T, left_side.field->data.digits),
                  location_right,
                  length_right,
                  build_int_cst_type(INT, right_side.field->codeset.encoding),
diff -Nrcpad gcc-17-20260614/gcc/cobol/copybook.h gcc-17-20260621/gcc/cobol/copybook.h
*** gcc-17-20260614/gcc/cobol/copybook.h	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/cobol/copybook.h	Sun Jun 21 22:32:06 2026
***************
*** 33,38 ****
--- 33,43 ----
  #else
  #define _COPYBOOK_H
  
+ #if defined(CDF_Y)
+ #define gcc_assert(x) assert(x)
+ void gcc_unreachable(void);
+ #endif
+ 
  FILE * copy_mode_start();
  
  const char * cobol_filename();
*************** class copybook_t;
*** 60,66 ****
  class copybook_elem_t {
    friend copybook_t;
    struct copybook_loc_t {
!     YYLTYPE loc;
      const char *name;
      copybook_loc_t() : loc(), name(NULL) {}
    } source, library;
--- 65,71 ----
  class copybook_elem_t {
    friend copybook_t;
    struct copybook_loc_t {
!     cbl_loc_t loc;
      const char *name;
      copybook_loc_t() : loc(), name(NULL) {}
    } source, library;
*************** private:
*** 126,131 ****
--- 131,141 ----
    char *regex_text;
  };
  
+ #ifndef TOUPPER
+ #define CTOUPPER(S) ::toupper(S)
+ #define TOUPPER(S) CTOUPPER(S)
+ #endif
+ 
  class uppername_t {
    std::string upper;
   public:
*************** class uppername_t {
*** 136,141 ****
--- 146,156 ----
    const char *data() const { return upper.data(); }
  };
  
+ #ifdef  CTOUPPER
+ #undef  CTOUPPER
+ #undef   TOUPPER
+ #endif
+ 
  class copybook_t {
    std::list<const char *> directories;
    copybook_elem_t book;
*************** class copybook_t {
*** 156,168 ****
  
    void suppress( bool tf = true  ) { book.suppress = tf; }
    bool suppressed()                { return book.suppress; }
!   void source( const YYLTYPE& loc, const char name[] ) {
      book.source.loc = loc;
      book.literally.source = copybook_elem_t::quoted(name);
      book.source.name = book.literally.source?
        copybook_elem_t::dequote(name) : transform_name(name);
    }
!   void library( const YYLTYPE& loc, const char name[] ) {
      book.library.loc = loc;
      book.literally.library = copybook_elem_t::quoted(name);
      book.library.name = book.literally.library?
--- 171,183 ----
  
    void suppress( bool tf = true  ) { book.suppress = tf; }
    bool suppressed()                { return book.suppress; }
!   void source( const cbl_loc_t& loc, const char name[] ) {
      book.source.loc = loc;
      book.literally.source = copybook_elem_t::quoted(name);
      book.source.name = book.literally.source?
        copybook_elem_t::dequote(name) : transform_name(name);
    }
!   void library( const cbl_loc_t& loc, const char name[] ) {
      book.library.loc = loc;
      book.literally.library = copybook_elem_t::quoted(name);
      book.library.name = book.literally.library?
*************** class copybook_t {
*** 177,183 ****
    const char *source() const { return book.source.name; }
    const char *library() const { return book.library.name; }
  
!   int open(YYLTYPE loc, const char name[]) {
      int fd = -1;
      book.clear();
      this->source(loc, name);
--- 192,198 ----
    const char *source() const { return book.source.name; }
    const char *library() const { return book.library.name; }
  
!   int open(cbl_loc_t loc, const char name[]) {
      int fd = -1;
      book.clear();
      this->source(loc, name);
diff -Nrcpad gcc-17-20260614/gcc/cobol/exceptg.h gcc-17-20260621/gcc/cobol/exceptg.h
*** gcc-17-20260614/gcc/cobol/exceptg.h	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/cobol/exceptg.h	Sun Jun 21 22:32:06 2026
***************
*** 36,41 ****
--- 36,43 ----
  extern const char * ec_type_str( ec_type_t type );
  extern ec_disposition_t ec_type_disposition( ec_type_t type );
  
+ struct cbl_label_t;
+ 
  extern void declarative_runtime_match( const std::list<cbl_declarative_t>& declaratives,
  				       cbl_label_t *lave );
  
diff -Nrcpad gcc-17-20260614/gcc/cobol/gcobc gcc-17-20260621/gcc/cobol/gcobc
*** gcc-17-20260614/gcc/cobol/gcobc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/cobol/gcobc	Sun Jun 21 22:32:06 2026
*************** do
*** 200,207 ****
          continue
      fi
  
-     #cho "next arg: $opt" >&2
- 
      case $opt in
  
          # pass next parameter to GCC
--- 200,205 ----
*************** do
*** 233,239 ****
          -echo) echo="echo"
                 ;;
  
!         -fec=*)
              opt="$(echo "$opt" | sed -E 's/-f(no-)?ec=/-f\1cobol-exceptions=EC-/g')"
               opts="$opts $opt"
               ;;
--- 231,237 ----
          -echo) echo="echo"
                 ;;
  
!         -fec=* | -fno-ec=*)
              opt="$(echo "$opt" | sed -E 's/-f(no-)?ec=/-f\1cobol-exceptions=EC-/g')"
               opts="$opts $opt"
               ;;
diff -Nrcpad gcc-17-20260614/gcc/cobol/gcobol.1 gcc-17-20260621/gcc/cobol/gcobol.1
*** gcc-17-20260614/gcc/cobol/gcobol.1	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/cobol/gcobol.1	Sun Jun 21 22:32:06 2026
*************** output to indicate where copybook files
*** 157,165 ****
  line-number consistency with the input, blank lines are retained.
  .Pp
  Unlike the C compiler, This option does not prevent compilation.
! To prevent compilation, use the option
! .D1 Fl Sy fsyntax-only
! also.
  .It Fl fdefaultbyte Ns Li = Ns Ar value
  Use
  .Ar value ,
--- 157,165 ----
  line-number consistency with the input, blank lines are retained.
  .Pp
  Unlike the C compiler, This option does not prevent compilation.
! To prevent compilation, use the
! .Fl Sy fsyntax-only
! option.
  .It Fl fdefaultbyte Ns Li = Ns Ar value
  Use
  .Ar value ,
diff -Nrcpad gcc-17-20260614/gcc/cobol/genapi.cc gcc-17-20260621/gcc/cobol/genapi.cc
*** gcc-17-20260614/gcc/cobol/genapi.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/cobol/genapi.cc	Sun Jun 21 22:32:06 2026
*************** line_tick()
*** 115,128 ****
  #define line_tick()
  #endif
  
- tree
- file_static_variable(tree type, const char *v)
-   {
-   // This routine returns a reference to an already-defined file_static
-   // variable. You need to know the type that was used for the definition.
-   return gg_declare_variable(type, v, NULL, vs_file_static);
-   }
- 
  // set using -f-trace-debug, defined in lang.opt
  int f_trace_debug;
  
--- 115,120 ----
*************** parser_enter_file(const char *filename)
*** 2793,2798 ****
--- 2785,2791 ----
      SET_VAR_DECL(var_decl_main_called             , INT                     , "__gg__main_called"     );
      SET_VAR_DECL(var_decl_entry_index             , SIZE_T                  , "__gg__entry_index"     );
      SET_VAR_DECL(var_decl_dialects                , INT                     , "__gg__dialects"        );
+     SET_VAR_DECL(var_decl_dp2bin                  , build_array_type(UCHAR, NULL), "__gg__dp2bin");
      }
    }
  
*************** psa_FldLiteralN(struct cbl_field_t *fiel
*** 3720,3727 ****
  
    // The value is 1, 2, 4, 8 or 16 bytes, so an ordinary constructor can be
    // used.
!   var_type = tree_type_from_size( field->data.capacity(),
!                                   field->attr & signable_e);
    tree new_var_decl = gg_define_variable( var_type,
                                            base_name,
                                            vs_static);
--- 3713,3719 ----
  
    // The value is 1, 2, 4, 8 or 16 bytes, so an ordinary constructor can be
    // used.
!   var_type = tree_type_from_field(field);
    tree new_var_decl = gg_define_variable( var_type,
                                            base_name,
                                            vs_static);
*************** parser_accept_command_line( const cbl_re
*** 3997,4003 ****
      SHOW_PARSE_END
      }
  
!   static tree erf = gg_define_variable(INT, "..pac_erf", vs_file_static);
  
    if( !source.field )
      {
--- 3989,3995 ----
      SHOW_PARSE_END
      }
  
!   tree erf = gg_define_variable(INT);
  
    if( !source.field )
      {
*************** parser_accept_envar(const struct cbl_ref
*** 4168,4174 ****
      TRACE1_END
      }
  
!   static tree erf = gg_define_variable(INT, "..pae_erf", vs_file_static);
  
    gg_assign(erf,
              gg_call_expr( INT,
--- 4160,4166 ----
      TRACE1_END
      }
  
!   tree erf = gg_define_variable(INT);
  
    gg_assign(erf,
              gg_call_expr( INT,
*************** parser_assign( size_t nC, cbl_num_result
*** 5227,5236 ****
      CHECK_FIELD(destref.field);
      CHECK_FIELD(sourceref.field);
  
!     // gg_printf("parser_assign: The compute_error_code is %d\n",
!     //            gg_cast(INT, compute_error->structs.compute_error->compute_error_code), NULL_TREE);
! 
!     static tree erf = gg_define_variable(INT, "..pa_erf", vs_file_static);
      if( on_error )
        {
        // There is an ON ERROR clause.  When there is an ON ERROR clause, and
--- 5219,5225 ----
      CHECK_FIELD(destref.field);
      CHECK_FIELD(sourceref.field);
  
!     tree erf = gg_define_variable(INT);
      if( on_error )
        {
        // There is an ON ERROR clause.  When there is an ON ERROR clause, and
*************** parser_initialize_table(size_t nelem,
*** 5477,5488 ****
      }
    typedef size_t span_t[2];
    static_assert(sizeof(spans[0]) == sizeof(span_t), "pair size wrong");
!   static tree tspans = gg_define_variable(SIZE_T_P,
!                                           "..pit_v1",
!                                           vs_file_static);
!   static tree ttbls  = gg_define_variable(SIZE_T_P,
!                                           "..pit_v2",
! vs_file_static);
    gg_assign(tspans,
              build_array_of_size_t(2*nspan,
                                    reinterpret_cast<const size_t *>(spans)));
--- 5466,5474 ----
      }
    typedef size_t span_t[2];
    static_assert(sizeof(spans[0]) == sizeof(span_t), "pair size wrong");
!   tree tspans = gg_define_variable(SIZE_T_P);
!   tree ttbls  = gg_define_variable(SIZE_T_P);
! 
    gg_assign(tspans,
              build_array_of_size_t(2*nspan,
                                    reinterpret_cast<const size_t *>(spans)));
*************** parser_see_stop_run(struct cbl_refer_t e
*** 7341,7347 ****
      }
  
    // It's a stop run.  Return return-code to the operating system:
!   static tree returned_value = gg_define_variable(INT, "..pssr_retval", vs_file_static);
  
    if( exit_status.field )
      {
--- 7327,7333 ----
      }
  
    // It's a stop run.  Return return-code to the operating system:
!   tree returned_value = gg_define_variable(INT);
  
    if( exit_status.field )
      {
*************** parser_see_stop_run(struct cbl_refer_t e
*** 7379,7385 ****
  void
  parser_label_label(struct cbl_label_t *label)
    {
!   label->lain = yylineno;
    Analyze();
    SHOW_PARSE
      {
--- 7365,7371 ----
  void
  parser_label_label(struct cbl_label_t *label)
    {
!   label->lain = cobol_location().first_line;
    Analyze();
    SHOW_PARSE
      {
*************** parser_file_write( cbl_file_t *file,
*** 9441,9450 ****
                          file->name);
      }
  
!   static tree t_advance = gg_define_variable(INT, "..pfw_advance", vs_file_static);
    if(advance.field)
      {
!     static tree value = gg_define_variable(INT, "..pfw_value", vs_file_static);
      get_binary_value( value,
                        NULL,
                        advance.field,
--- 9427,9436 ----
                          file->name);
      }
  
!   tree t_advance = gg_define_variable(INT);
    if(advance.field)
      {
!     tree value = gg_define_variable(INT);
      get_binary_value( value,
                        NULL,
                        advance.field,
*************** parser_file_start(struct cbl_file_t *fil
*** 9811,9817 ****
      flk = -1;
      }
  
!   static tree length = gg_define_variable(SIZE_T, "..pfs_length", vs_file_static);
    gg_assign(length, size_t_zero_node);
  
    if( flk > 0 && !length_ref.field )
--- 9797,9803 ----
      flk = -1;
      }
  
!   tree length = gg_define_variable(SIZE_T);
    gg_assign(length, size_t_zero_node);
  
    if( flk > 0 && !length_ref.field )
*************** inspect_tally(bool backward,
*** 9958,9965 ****
    // all the integers and cbl_inspect_bound_t values, in a strict sequence so
    // that the library routine can peel them off.
  
!   static tree int_size = gg_define_variable(INT,      "..pit_size", vs_file_static, 0);
!   static tree integers = gg_define_variable(SIZE_T_P, "..pit", vs_file_static, null_pointer_node);
  
    size_t n_integers = int_index;
  
--- 9944,9951 ----
    // all the integers and cbl_inspect_bound_t values, in a strict sequence so
    // that the library routine can peel them off.
  
!   tree int_size = gg_define_variable(INT, integer_zero_node);
!   tree integers = gg_define_variable(SIZE_T_P, null_pointer_node);
  
    size_t n_integers = int_index;
  
*************** inspect_replacing(int backward,
*** 10131,10140 ****
  
    size_t n_integers =   1                     // Room for operations[0].nbound()
                          + operations[0].nbound()  // Room for all the cbl_inspect_bound_t values
!                         + n_all_leading_first;  // Room for all of the n_identifier_3 counts
  
!   static tree int_size = gg_define_variable(INT,      "..pir_size", vs_file_static, 0);
!   static tree integers = gg_define_variable(SIZE_T_P, "..pir", vs_file_static, null_pointer_node);
  
    IF( build_int_cst_type(INT, n_integers), gt_op, int_size )
      {
--- 10117,10126 ----
  
    size_t n_integers =   1                     // Room for operations[0].nbound()
                          + operations[0].nbound()  // Room for all the cbl_inspect_bound_t values
!                         + n_all_leading_first;  // Room for all of the  n_identifier_3  counts
  
!   tree int_size = gg_define_variable(INT, integer_zero_node);
!   tree integers = gg_define_variable(SIZE_T_P, null_pointer_node);
  
    IF( build_int_cst_type(INT, n_integers), gt_op, int_size )
      {
*************** parser_intrinsic_call_4( cbl_field_t *tg
*** 11081,11090 ****
    }
  
  static void
! field_increment(cbl_field_t *fld)
    {
!   static tree value   = gg_define_variable(INT128, "..fi_value",   vs_file_static);
!   static tree rdigits = gg_define_variable(INT,    "..fi_rdigits", vs_file_static);
    get_binary_value(value, rdigits, fld, size_t_zero_node);
    gg_assign(  value,
                gg_add(value, gg_cast(SIZE_T, integer_one_node)));
--- 11067,11077 ----
    }
  
  static void
! field_increment(cbl_field_t *fld )
    {
!   static tree value   = gg_define_variable(INT128);
!   static tree rdigits = gg_define_variable(INT);
! 
    get_binary_value(value, rdigits, fld, size_t_zero_node);
    gg_assign(  value,
                gg_add(value, gg_cast(SIZE_T, integer_one_node)));
*************** parser_match_exception(cbl_field_t *inde
*** 13956,13962 ****
  
    TRACE1
      {
!     static tree index_val = gg_define_variable(INT, "..pme_index", vs_file_static);
      get_binary_value(index_val, NULL, index, size_t_zero_node);
      TRACE1_INDENT
      gg_printf("returned value is 0x%x (%d)", index_val, index_val, NULL_TREE);
--- 13943,13949 ----
  
    TRACE1
      {
!     tree index_val = gg_define_variable(INT);
      get_binary_value(index_val, NULL, index, size_t_zero_node);
      TRACE1_INDENT
      gg_printf("returned value is 0x%x (%d)", index_val, index_val, NULL_TREE);
diff -Nrcpad gcc-17-20260614/gcc/cobol/genapi.h gcc-17-20260621/gcc/cobol/genapi.h
*** gcc-17-20260614/gcc/cobol/genapi.h	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/cobol/genapi.h	Sun Jun 21 22:32:06 2026
*************** void parser_init_list_size(int count_of_
*** 617,624 ****
  void parser_init_list_element(cbl_field_t *field);
  void parser_init_list();
  
- tree file_static_variable(tree type, const char *name);
- 
  void parser_statement_begin( const cbl_name_t name, tree ecs, tree dcls );
  void parser_statement_end( const std::list<cbl_field_t*>& );
  
--- 617,622 ----
diff -Nrcpad gcc-17-20260614/gcc/cobol/genmath.cc gcc-17-20260621/gcc/cobol/genmath.cc
*** gcc-17-20260614/gcc/cobol/genmath.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/cobol/genmath.cc	Sun Jun 21 22:32:06 2026
*************** all_refers_integer(size_t nC, const cbl_
*** 357,368 ****
    }
  
  static tree
! largest_binary_term(size_t nA, cbl_refer_t *A)
    {
    tree retval = NULL_TREE;
-   uint32_t max_capacity = 0;
-   int      is_negative  = 0;
- 
    for(size_t i=0; i<nA; i++)
      {
      if( !is_pure_integer(A[i].field) || A[i].field->type == FldFloat )
--- 357,365 ----
    }
  
  static tree
! largest_binary_term(size_t nA, const cbl_refer_t *A)
    {
    tree retval = NULL_TREE;
    for(size_t i=0; i<nA; i++)
      {
      if( !is_pure_integer(A[i].field) || A[i].field->type == FldFloat )
*************** largest_binary_term(size_t nA, cbl_refer
*** 381,389 ****
          )
        {
        // This is an integer type that can be worked with quickly
!       is_negative |= ( A[i].field->attr & signable_e );
!       max_capacity = std::max(max_capacity, A[i].field->data.capacity());
!       retval = tree_type_from_size(max_capacity, is_negative);
        }
      else
        {
--- 378,384 ----
          )
        {
        // This is an integer type that can be worked with quickly
!       retval = tree_type_from_refer(A[i]);
        }
      else
        {
*************** fast_add( size_t nC, cbl_num_result_t *C
*** 418,425 ****
      tree term_type = largest_binary_term(nA, A);
      if( term_type )
        {
!       tree dest_type = tree_type_from_size(C[0].refer.field->data.capacity(),
!                                            0);
        // All the numbers are integers without rdigits
        if(    nC == 1
            && nA == 1
--- 413,419 ----
      tree term_type = largest_binary_term(nA, A);
      if( term_type )
        {
!       tree dest_type = tree_type_from_refer(C[0].refer);
        // All the numbers are integers without rdigits
        if(    nC == 1
            && nA == 1
*************** fast_subtract(size_t nC, cbl_num_result_
*** 637,645 ****
            )
          {
          // This is the simplest case of all.  Just subtract A from C.
!         tree dest_type = tree_type_from_size(
!                                           C[0].refer.field->data.capacity(),
!                                           0);
          tree A_value;
          if( refer_is_clean(A[0]) )
            {
--- 631,637 ----
            )
          {
          // This is the simplest case of all.  Just subtract A from C.
!         tree dest_type = tree_type_from_refer(C[0].refer);
          tree A_value;
          if( refer_is_clean(A[0]) )
            {
*************** fast_subtract(size_t nC, cbl_num_result_
*** 743,749 ****
          // We now either accumulate into C[n] or assign to C[n]:
          for(size_t i=0; i<nC; i++ )
            {
!           tree dest_type = tree_type_from_size(C[i].refer.field->data.capacity(), 0);
            tree dest_addr = gg_add(member(C[i].refer.field->var_decl_node, "data"),
                                    refer_offset(C[i].refer));
            tree ptr = gg_cast(build_pointer_type(dest_type), dest_addr);
--- 735,741 ----
          // We now either accumulate into C[n] or assign to C[n]:
          for(size_t i=0; i<nC; i++ )
            {
!           tree dest_type = tree_type_from_refer(C[i].refer);
            tree dest_addr = gg_add(member(C[i].refer.field->var_decl_node, "data"),
                                    refer_offset(C[i].refer));
            tree ptr = gg_cast(build_pointer_type(dest_type), dest_addr);
*************** fast_multiply(size_t nC, cbl_num_result_
*** 816,822 ****
        // We now either multiply into C[n] or assign A * B to C[n]:
        for(size_t i=0; i<nC; i++ )
          {
!         tree dest_type = tree_type_from_size(C[i].refer.field->data.capacity(), 0);
          tree dest_addr = gg_add(member(C[i].refer.field->var_decl_node, "data"),
                                  refer_offset(C[i].refer));
          tree ptr = gg_cast(build_pointer_type(dest_type), dest_addr);
--- 808,814 ----
        // We now either multiply into C[n] or assign A * B to C[n]:
        for(size_t i=0; i<nC; i++ )
          {
!         tree dest_type = tree_type_from_refer(C[i].refer);
          tree dest_addr = gg_add(member(C[i].refer.field->var_decl_node, "data"),
                                  refer_offset(C[i].refer));
          tree ptr = gg_cast(build_pointer_type(dest_type), dest_addr);
*************** fast_divide(size_t nC, cbl_num_result_t
*** 895,902 ****
        // We now either divide into C[n] or assign dividend/divisor to C[n]:
        for(size_t i=0; i<nC; i++ )
          {
!         tree dest_type =
!                        tree_type_from_size(C[i].refer.field->data.capacity(), 0);
          tree dest_addr = gg_add(member( C[i].refer.field->var_decl_node,
                                          "data"),
                                  refer_offset(C[i].refer));
--- 887,893 ----
        // We now either divide into C[n] or assign dividend/divisor to C[n]:
        for(size_t i=0; i<nC; i++ )
          {
!         tree dest_type = tree_type_from_refer(C[i].refer);
          tree dest_addr = gg_add(member( C[i].refer.field->var_decl_node,
                                          "data"),
                                  refer_offset(C[i].refer));
*************** fast_divide(size_t nC, cbl_num_result_t
*** 923,929 ****
            {
            dest_addr = gg_add( member(remainder.field->var_decl_node, "data"),
                                refer_offset(remainder));
!           dest_type = tree_type_from_size(remainder.field->data.capacity(), 0);
            ptr = gg_cast(build_pointer_type(dest_type), dest_addr);
  
            gg_assign(gg_indirect(ptr),
--- 914,920 ----
            {
            dest_addr = gg_add( member(remainder.field->var_decl_node, "data"),
                                refer_offset(remainder));
!           dest_type = tree_type_from_refer(remainder);
            ptr = gg_cast(build_pointer_type(dest_type), dest_addr);
  
            gg_assign(gg_indirect(ptr),
*************** parser_divide(  size_t nC, cbl_num_resul
*** 2329,2335 ****
                                            nB, B,
                                            remainder) )
      {
! 
      }
    else
      {
--- 2320,2326 ----
                                            nB, B,
                                            remainder) )
      {
!     // We were able to do a fast divide operation.
      }
    else
      {
diff -Nrcpad gcc-17-20260614/gcc/cobol/genutil.cc gcc-17-20260621/gcc/cobol/genutil.cc
*** gcc-17-20260614/gcc/cobol/genutil.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/cobol/genutil.cc	Sun Jun 21 22:32:06 2026
***************
*** 59,65 ****
  #include "exceptg.h"
  #include "dumpfile.h"
  
- 
  bool exception_location_active = true;
  bool skip_exception_processing = true;
  
--- 59,64 ----
*************** tree var_decl_call_parameter_lengths;
*** 95,100 ****
--- 94,103 ----
  // instruction, I instead gg_assign(var_decl_nop, integer_zero_node)
  tree var_decl_nop;                // int         __gg__nop;
  
+ // This table is used to access the table of packed-decimal->binary pairs
+ // of digits.
+ tree var_decl_dp2bin;  // unsigned char __gg__dp2bin[256]'
+ 
  // Indicates which routine main() called
  tree var_decl_main_called;        // int         __gg__main_called;
  
*************** get_scaled_digits(cbl_field_t *field)
*** 175,234 ****
    return retval;
    }
  
- tree
- tree_type_from_digits(size_t digits, uint64_t signable)
-   {
-   tree retval = NULL_TREE;
- 
-   if( signable )
-     {
-     if(digits <= 2 )
-       {
-       retval = CHAR;
-       }
-     else if (digits <= 4 )
-       {
-       retval = SHORT;
-       }
-     else if (digits <= 9 )
-       {
-       retval = INT;
-       }
-     else if (digits <= 18 )
-       {
-       retval = LONGLONG;
-       }
-     else
-       {
-       retval = INT128;
-       }
-     }
-   else
-     {
-     if(digits <= 2 )
-       {
-       retval = UCHAR;
-       }
-     else if (digits <= 4 )
-       {
-       retval = USHORT;
-       }
-     else if (digits <= 9 )
-       {
-       retval = UINT;
-       }
-     else if (digits <= 18 )
-       {
-       retval = ULONGLONG;
-       }
-     else
-       {
-       retval = UINT128;
-       }
-     }
-   return retval;
-   }
- 
  void
  get_integer_value(tree value, // We know this is a LONG
                    cbl_field_t *field,
--- 178,183 ----
*************** get_integer_value(tree value, // We know
*** 249,256 ****
    // If the field_i has rdigits, and if any of those rdigits are non-zero, we
    // return a 1 so that our caller can decide what to do.
  
!   static tree temp    = gg_define_variable(INT128, "..giv_temp",    vs_file_static);
!   static tree rdigits = gg_define_variable(INT,    "..giv_rdigits", vs_file_static);
  
    if( field->attr & intermediate_e )
      {
--- 198,205 ----
    // If the field_i has rdigits, and if any of those rdigits are non-zero, we
    // return a 1 so that our caller can decide what to do.
  
!   tree temp    = gg_define_variable(INT128);
!   tree rdigits = gg_define_variable(INT);
  
    if( field->attr & intermediate_e )
      {
*************** get_depending_on_value_from_odo(tree ret
*** 485,491 ****
  
    if( !enabled_exceptions.match(ec_bound_odo_e) )
      {
!     // With no exception testing, just pick up the value.  If there is a
      // the programmer will simply have to live with the consequences.
      get_integer_value(retval,
                        depending_on,
--- 434,440 ----
  
    if( !enabled_exceptions.match(ec_bound_odo_e) )
      {
!     // With no exception testing, just pick up the value.  If there is an error
      // the programmer will simply have to live with the consequences.
      get_integer_value(retval,
                        depending_on,
*************** get_data_offset(const cbl_refer_t &refer
*** 780,790 ****
          {
          if( parent->occurs.depending_on )
            {
!           static tree value64 = gg_define_variable( LONG,
!                                                     ".._gdos_value64",
!                                                     vs_file_static);
            cbl_field_t *odo = symbol_find_odo(parent);
            get_depending_on_value_from_odo(value64, odo);
            }
          }
  
--- 729,747 ----
          {
          if( parent->occurs.depending_on )
            {
!           tree value64 = gg_define_variable(LONG);
            cbl_field_t *odo = symbol_find_odo(parent);
            get_depending_on_value_from_odo(value64, odo);
+ 
+           IF( subscript, gt_op, value64 )
+             {
+             set_exception_code(ec_bound_odo_e);
+             }
+           ELSE
+             {
+             }
+           ENDIF
+ 
            }
          }
  
*************** get_data_offset(const cbl_refer_t &refer
*** 804,811 ****
      {
      REFER("refmod refstart");
      // We have a refmod to deal with
!     static tree refstart = gg_define_variable(LONG, "..gdo_refstart", vs_file_static);
!     static tree reflen   = gg_define_variable(LONG, "..gdo_reflen", vs_file_static);
      get_and_check_refstart_and_reflen(refstart, reflen, refer);
  
      gg_assign(retval, gg_add(retval, gg_cast(SIZE_T, refstart)));
--- 761,768 ----
      {
      REFER("refmod refstart");
      // We have a refmod to deal with
!     tree refstart = gg_define_variable(LONG);
!     tree reflen   = gg_define_variable(LONG);
      get_and_check_refstart_and_reflen(refstart, reflen, refer);
  
      gg_assign(retval, gg_add(retval, gg_cast(SIZE_T, refstart)));
*************** get_data_offset(const cbl_refer_t &refer
*** 819,824 ****
--- 776,1052 ----
    return retval;
    }
  
+ static tree
+ digit(tree location, int offset, int stride)
+   {
+   return gg_bitwise_and(gg_indirect(location,
+                                     build_int_cst_type(SIZE_T,
+                                                        offset*stride)),
+                         build_int_cst_type(UCHAR, 0x0F));
+   }
+ 
+ static const unsigned long pots[20] =
+   {
+   1ULL,                       // 00
+   10ULL,                      // 01
+   100ULL,                     // 02
+   1000ULL,                    // 03
+   10000ULL,                   // 04
+   100000ULL,                  // 05
+   1000000ULL,                 // 06
+   10000000ULL,                // 07
+   100000000ULL,               // 08
+   1000000000ULL,              // 09
+   10000000000ULL,             // 10
+   100000000000ULL,            // 11
+   1000000000000ULL,           // 12
+   10000000000000ULL,          // 13
+   100000000000000ULL,         // 14
+   1000000000000000ULL,        // 15
+   10000000000000000ULL,       // 16
+   100000000000000000ULL,      // 17
+   1000000000000000000ULL,     // 18
+   10000000000000000000ULL,    // 19
+   };
+ 
+ 
+ static tree
+ num_disp_dive(tree location,  // UCHAR_P to first digit
+               int  digits,    //
+               bool signable,
+               int stride)
+   {
+   tree retval;
+   tree type;
+   if( digits <= 9 )
+     {
+     type = signable ? INT : UINT;
+     }
+   else if( digits < 19 )
+     {
+     type = signable ? LONG : ULONG;
+     }
+   else
+     {
+     type = signable ? INT128 : UINT128;
+     }
+   retval = gg_define_variable(type);
+ 
+   switch(digits)
+     {
+     case 1:
+       {
+       gg_assign(retval, gg_cast(type, digit(location, 0, stride)));
+       break;
+       }
+     case 2:
+       {
+       tree term_a = gg_multiply(gg_cast(type, digit(location, 0, stride)),
+                                 build_int_cst_type(type, 10));
+       tree term_b = gg_cast(type, digit(location, 1, stride));
+       gg_assign(retval,
+                 gg_add(term_a,
+                        term_b));
+       break;
+       }
+     case 3:
+       {
+       tree term_a = gg_multiply(gg_cast(type, digit(location, 0, stride)),
+                                 build_int_cst_type(type, 100));
+       tree term_b = gg_multiply(gg_cast(type, digit(location, 1, stride)),
+                                 build_int_cst_type(type, 10));
+       tree term_c = gg_cast(type, digit(location, 2, stride));
+       gg_assign(retval,
+                 gg_add(term_a,
+                        gg_add(term_b,
+                               term_c)));
+       break;
+       }
+     case 4:
+       {
+       tree term_a = gg_multiply(gg_cast(type, digit(location, 0, stride)),
+                                 build_int_cst_type(type, 1000));
+       tree term_b = gg_multiply(gg_cast(type, digit(location, 1, stride)),
+                                 build_int_cst_type(type, 100));
+       tree term_c = gg_multiply(gg_cast(type, digit(location, 2, stride)),
+                                 build_int_cst_type(type, 10));
+       tree term_d = gg_cast(type, digit(location, 3, stride));
+       gg_assign(retval,
+                 gg_add(term_a,
+                 gg_add(term_b,
+                 gg_add(term_c,
+                        term_d))));
+       break;
+       }
+     default:
+       {
+       // digits is between 5 and 38
+       int nright = digits/2;
+       int nleft  = digits - nright;
+ 
+       int64_t right_factor = pots[nright];
+       tree term_a = gg_multiply(num_disp_dive(location,
+                                               nleft,
+                                               signable,
+                                               stride),
+                                 build_int_cst_type(type, right_factor));
+       tree term_b = num_disp_dive(gg_add(location,
+                                           build_int_cst_type(SIZE_T,
+                                                              nleft*stride)),
+                                   nright,
+                                   signable,
+                                   stride);
+       gg_assign(retval, gg_add(term_a, term_b));
+       break;
+       }
+     }
+ 
+   return retval;
+   }
+ 
+ static tree
+ pd_dive(tree location, int nbytes, bool signable)
+   {
+   tree type;
+   int digits = nbytes * 2;
+   if( digits < 10 )
+     {
+     type = signable ? INT : UINT;
+     }
+   else if(digits < 20 )
+     {
+     type = signable ? LONG : ULONG;
+     }
+   else
+     {
+     type = signable ? INT128 : UINT128;
+     }
+   tree retval = gg_define_variable(type);
+ 
+   tree ten2 = build_int_cst_type(type, 100);
+   tree ten4 = build_int_cst_type(type, 10000);
+   tree ten6 = build_int_cst_type(type, 1000000);
+ 
+   tree t1 = integer_one_node;
+   tree t2 = build_int_cst_type(INT, 2);
+   tree t3 = build_int_cst_type(INT, 3);
+ 
+   switch(nbytes)
+     {
+     case 0:
+       retval =   integer_zero_node;
+       break;
+     case 1:
+       gg_assign(retval,
+                 gg_cast(type,
+                         gg_array_value(var_decl_dp2bin,
+                                        gg_indirect(location))));
+       break;
+     case 2:
+       {
+       tree A = gg_multiply(gg_cast(type,
+                                    gg_array_value(var_decl_dp2bin,
+                                                   gg_indirect(location))),
+                            ten2);
+       tree B = gg_cast(type,
+                        gg_array_value(var_decl_dp2bin,
+                                       gg_indirect(location, t1)));
+       gg_assign(retval, gg_add(A, B));
+       break;
+       }
+     case 3:
+       {
+       tree A = gg_multiply(gg_cast(type,
+                            gg_array_value(var_decl_dp2bin,
+                                           gg_indirect(location))),
+                            ten4);
+       tree B = gg_multiply(gg_cast(type,
+                         gg_array_value(var_decl_dp2bin,
+                                        gg_indirect(location, t1))),
+                            ten2);
+       tree C = gg_cast(type,
+                        gg_array_value(var_decl_dp2bin,
+                                       gg_indirect(location, t2)));
+       gg_assign(retval, gg_add(A, gg_add(B, C)));
+       break;
+       }
+     case 4:
+       {
+       tree A = gg_multiply(gg_cast(type,
+                            gg_array_value(var_decl_dp2bin,
+                                           gg_indirect(location))),
+                            ten6);
+       tree B = gg_multiply(gg_cast(type,
+                         gg_array_value(var_decl_dp2bin,
+                                        gg_indirect(location, t1))),
+                            ten4);
+       tree C = gg_multiply(gg_cast(type,
+                         gg_array_value(var_decl_dp2bin,
+                                        gg_indirect(location, t2))),
+                            ten2);
+       tree D = gg_cast(type,
+                        gg_array_value(var_decl_dp2bin,
+                                       gg_indirect(location, t3)));
+       gg_assign(retval, gg_add(A, gg_add(B, gg_add(C, D))));
+       break;
+       }
+     default:
+       {
+       int nright = nbytes/2;
+       int nleft  = nbytes - nright;
+       tree A = gg_multiply( gg_cast(type, pd_dive(location, nleft, signable)),
+                             build_int_cst_type(type, pots[nright*2]));
+       tree B = gg_cast(type, pd_dive(gg_add(location,
+                                             build_int_cst_type(SIZE_T, nleft)),
+                                      nright,
+                                      signable));
+       gg_assign(retval, gg_add(A, B));
+       break;
+       }
+     }
+ 
+   return retval;
+   }
+ 
+ static tree
+ get_pd_value(tree return_type, cbl_field_t *field, tree location)
+   {
+   tree retval = gg_define_variable(return_type);
+   bool has_sign_nybble =  !(field->attr & separate_e);
+   bool signable        = !!(field->attr & signable_e);
+   int nbytes = field->data.capacity();
+ 
+   gg_assign(retval,
+             gg_cast(return_type,
+                     pd_dive(location,
+                             has_sign_nybble ? nbytes - 1 : nbytes,
+                             signable)));
+   if( has_sign_nybble )
+     {
+     gg_assign(retval,
+               gg_add(gg_multiply(retval,
+                                  build_int_cst_type(return_type, 10)),
+                      gg_cast(return_type,
+                              gg_rshift(gg_indirect(location,
+                                        build_int_cst_type(SIZE_T, nbytes-1)),
+                                        build_int_cst_type(SIZE_T, 4)))));
+ 
+     IF( gg_bitwise_and(gg_indirect(location, build_int_cst_type(SIZE_T, nbytes-1)),
+                                    build_int_cst_type(UCHAR, 0x0F)),
+         eq_op,
+         build_int_cst_type(UCHAR, 0x0D) )
+       {
+       gg_assign(retval, gg_negate(retval));
+       }
+     ELSE
+       {
+       }
+     ENDIF
+     }
+ 
+   return retval;
+   }
+ 
  tree
  get_binary_value_tree(tree return_type,
                        tree rdigits,
*************** get_binary_value_tree(tree return_type,
*** 827,833 ****
                        tree         hilo
                        )
    {
!   tree retval;
  
    if( hilo )
      {
--- 1055,1061 ----
                        tree         hilo
                        )
    {
!   tree retval = gg_define_variable(return_type);
  
    if( hilo )
      {
*************** get_binary_value_tree(tree return_type,
*** 840,846 ****
    // Very special case:
    if( strcmp(field->name, "ZEROS") == 0 )
      {
!     retval = gg_cast(return_type, integer_zero_node);
      if( rdigits )
        {
        gg_assign(rdigits, gg_cast(TREE_TYPE(rdigits), integer_zero_node));
--- 1068,1074 ----
    // Very special case:
    if( strcmp(field->name, "ZEROS") == 0 )
      {
!     gg_assign(retval, gg_cast(return_type, integer_zero_node));
      if( rdigits )
        {
        gg_assign(rdigits, gg_cast(TREE_TYPE(rdigits), integer_zero_node));
*************** get_binary_value_tree(tree return_type,
*** 848,854 ****
      return retval;
      }
  
-   tree pointer = gg_define_variable(UCHAR_P);
    switch(field->type)
      {
      case FldLiteralN:
--- 1076,1081 ----
*************** get_binary_value_tree(tree return_type,
*** 864,995 ****
            gg_assign(rdigits, build_int_cst_type(TREE_TYPE(rdigits),
                                                  field->data.rdigits));
            }
!         retval = gg_cast(return_type, field->data_decl_node);
          }
        break;
        }
  
      case FldNumericDisplay:
        {
!       const charmap_t *charmap = __gg__get_charmap(field->codeset.encoding);
        int stride = charmap->stride();
- 
        // Establish the source
!       tree source_address = get_data_address(field, field_offset);
  
!       // We need to check early on for HIGH-VALUE and LOW-VALUE
!       // Pick up the byte
!       tree digit = gg_get_indirect_reference(source_address, NULL_TREE);
!       IF( digit, eq_op, build_int_cst(UCHAR, DEGENERATE_HIGH_VALUE) )
          {
!         // We are dealing with HIGH-VALUE
!         if( hilo )
            {
!           gg_assign(hilo, integer_one_node);
            }
!         if( rdigits )
            {
!           gg_assign(rdigits,
!                     build_int_cst_type( TREE_TYPE(rdigits),
!                                         get_scaled_rdigits(field)));
            }
!         retval = build_int_cst_type(return_type, 0x7FFFFFFFFFFFFFFFUL);
!         }
!       ELSE
!         {
!         IF( digit, eq_op, build_int_cst(UCHAR, DEGENERATE_LOW_VALUE) )
            {
!           // We are dealing with LOW-VALUE
!           if( hilo )
!             {
!             gg_assign(hilo, integer_minus_one_node);
!             }
            }
!         ELSE
            {
!           // We are dealing with an ordinary NumericDisplay value
!           gg_assign(pointer, source_address);
! 
!           if( rdigits )
              {
!             gg_assign(rdigits,
!                       build_int_cst_type(TREE_TYPE(rdigits),
!                                          get_scaled_rdigits(field)));
              }
!           // This will be the 128-bit value of the character sequence
!           static tree val128 = gg_define_variable(INT128,
!                                                   "..gbv_val128",
!                                                   vs_file_static);
!           // This is a pointer to the sign byte
!           static tree signp = gg_define_variable(UCHAR_P,
!                                                   "..gbv_signp",
!                                                   vs_file_static);
!           // We need to figure out where the sign information, if any is to be
!           // found:
!           if( field->attr & signable_e )
              {
!             // The variable is signed
!             if( field->attr & separate_e )
                {
!               // The sign byte is separate
!               if( field->attr & leading_e)
!                 {
!                 // The first byte is '+' or '-'
!                 gg_assign(signp, source_address);
!                 // Increment pointer to point to the first actual digit
!                 gg_increment(pointer);
!                 }
!               else
!                 {
!                 // The final byte is '+' or '-'
!                 gg_assign(signp,
!                           gg_add(source_address,
!                                 build_int_cst_type(SIZE_T,
!                                                   field->data.digits*stride)));
!                 }
                }
!             else
                {
-               // The sign byte is internal
-               if( field->attr & leading_e)
-                 {
-                 // The first byte has the sign bit.
-                 gg_assign(signp, source_address);
-                 }
-               else
-                 {
-                 // The final byte has the sign bit.
-                 gg_assign(signp,
-                           gg_add(source_address,
-                                 build_int_cst_type( SIZE_T,
-                                               (field->data.digits-1)*stride)));
-                 }
                }
              }
            else
              {
!             // This value is unsigned, so just use the first location:
!             gg_assign(signp, source_address);
              }
- 
-           gg_assign(val128,
-                     gg_call_expr( INT128,
-                                   "__gg__numeric_display_to_binary",
-                                   signp,
-                                   pointer,
-                                   build_int_cst_type(INT, field->data.digits),
-                               build_int_cst_type(INT, field->codeset.encoding),
-                               NULL_TREE));
-           // Assign the value we got from the string to our "return" value:
- 
-           // Note that cppcheck can't understand the run-time IF()
-           // cppcheck-suppress redundantAssignment
-           retval = gg_cast(return_type, val128);
            }
-         ENDIF
          }
-       ENDIF
- 
        break;
        }
  
--- 1091,1208 ----
            gg_assign(rdigits, build_int_cst_type(TREE_TYPE(rdigits),
                                                  field->data.rdigits));
            }
!         gg_assign(retval, gg_cast(return_type, field->data_decl_node));
          }
        break;
        }
  
      case FldNumericDisplay:
        {
!       charmap_t *charmap = __gg__get_charmap(field->codeset.encoding);
        int stride = charmap->stride();
        // Establish the source
!       tree source_location = gg_define_variable(UCHAR_P);
!       gg_assign(source_location, get_data_address(field, field_offset));
!       tree sign_location;
!       if(    (field->attr & signable_e)
!           && (field->attr & leading_e)
!           && (field->attr & separate_e) )
!         {
!         sign_location = gg_define_variable(UCHAR_P);
!         gg_assign(sign_location, source_location);
!         gg_assign(source_location,
!                   gg_add(source_location,
!                          build_int_cst_type(SIZE_T, stride)));
!         }
!       // source_location points to the first digit.
  
!       tree dive_value = num_disp_dive(source_location,
!                                       field->data.digits,
!                                       !!(field->attr & signable_e),
!                                       stride);
!       gg_assign(retval, gg_cast(return_type, dive_value));
! 
!       // retval is the absolute value of the numeric-display string.
! 
!       if( field->attr & signable_e )
          {
!         // Because the source is signable, we have to check if it is flagged
!         // as negative:
!         if(   (field->attr & leading_e)
!            && (field->attr & separate_e) )
            {
!           // We already know that sign_location is established
            }
!         else if(   !(field->attr & leading_e)
!                 &&  (field->attr & separate_e) )
            {
!           sign_location = gg_define_variable(UCHAR_P);
!           gg_assign(sign_location,
!                     gg_add(source_location,
!                            build_int_cst_type(SIZE_T,
!                                               field->data.digits*stride)));
            }
!         else if(    (field->attr & leading_e)
!                 && !(field->attr & separate_e) )
            {
!           sign_location = gg_define_variable(UCHAR_P);
!           gg_assign(sign_location, source_location);
            }
!         else //if(   !(field->attr & leading_e)
!              //   && !(field->attr & separate_e) )
            {
!           sign_location = gg_define_variable(UCHAR_P);
!           gg_assign(sign_location,
!                     gg_add(source_location,
!                            build_int_cst_type(SIZE_T,
!                                             (field->data.digits-1)*stride)));
!           }
!         if( field->attr & separate_e )
!           {
!           IF( gg_indirect(sign_location),
!               eq_op,
!               build_int_cst_type(UCHAR,
!                                  charmap->mapped_character(ascii_minus)) )
              {
!             gg_assign(retval, gg_negate(retval));
              }
!           ELSE
              {
!             }
!           ENDIF
!           }
!         else
!           {
!           if( charmap->is_like_ebcdic() )
!             {
!             IF( gg_indirect(sign_location),
!                 lt_op,
!                 build_int_cst_type(UCHAR, 0xF0) )
                {
!               // The digit is less than the EBCDIC '0'
!               gg_assign(retval, gg_negate(retval));
                }
!             ELSE
                {
                }
+             ENDIF
              }
            else
              {
!             IF( gg_indirect(sign_location),
!                 gt_op,
!                 build_int_cst_type(UCHAR, 0x39) )
!               {
!               // The digit is greater than the ASCII '9'
!               gg_assign(retval, gg_negate(retval));
!               }
!             ELSE
!               {
!               }
!             ENDIF
              }
            }
          }
        break;
        }
  
*************** get_binary_value_tree(tree return_type,
*** 1029,1037 ****
          {
          // Destination is too big.  We'll need to fill the high-order bytes with
          // either 0x00 for positive numbers, or 0xFF for negative
!         static tree extension = gg_define_variable( UCHAR,
!                                                     "..gbv_extension",
!                                                     vs_file_static);
          if( field->attr & signable_e )
            {
            IF( gg_array_value(gg_cast(build_pointer_type(SCHAR), source)),
--- 1242,1248 ----
          {
          // Destination is too big.  We'll need to fill the high-order bytes with
          // either 0x00 for positive numbers, or 0xFF for negative
!         tree extension = gg_define_variable(UCHAR);
          if( field->attr & signable_e )
            {
            IF( gg_array_value(gg_cast(build_pointer_type(SCHAR), source)),
*************** get_binary_value_tree(tree return_type,
*** 1103,1110 ****
            }
          }
        tree source_address = get_data_address(field, field_offset);
!       tree source_type = tree_type_from_size( field->data.capacity(),
!                                               field->attr & signable_e);
        if( debugging && rdigits)
          {
          gg_printf("get_binary_value bin5 rdigits: %d\n", rdigits, NULL_TREE);
--- 1314,1320 ----
            }
          }
        tree source_address = get_data_address(field, field_offset);
!       tree source_type = tree_type_from_field(field);
        if( debugging && rdigits)
          {
          gg_printf("get_binary_value bin5 rdigits: %d\n", rdigits, NULL_TREE);
*************** get_binary_value_tree(tree return_type,
*** 1124,1139 ****
                    build_int_cst_type( TREE_TYPE(rdigits),
                                        get_scaled_rdigits(field)));
          }
!       tree value = gg_define_variable(return_type);
!       gg_assign(value, gg_cast(return_type,
!                                     gg_call_expr(INT128,
!                                     "__gg__packed_to_binary",
!                                     get_data_address( field,
!                                                       field_offset),
!                                     build_int_cst_type(INT,
!                                                       field->data.capacity()),
!                                     NULL_TREE)));
!       retval = value;
        break;
        }
  
--- 1334,1343 ----
                    build_int_cst_type( TREE_TYPE(rdigits),
                                        get_scaled_rdigits(field)));
          }
!       gg_assign(retval,
!                 get_pd_value(return_type,
!                              field,
!                              get_data_address( field, field_offset)));
        break;
        }
  
*************** get_binary_value( tree value,
*** 1233,1242 ****
  tree
  tree_type_from_field(const cbl_field_t *field)
    {
!   /*  This routine is used to determine what action is taken with type of a
!       CALL ... USING <var> and the matching PROCEDURE DIVISION USING <var> of
!       a PROGRAM-ID or FUNCTION-ID
!       */
    tree retval;
  
    switch(field->type)
--- 1437,1443 ----
  tree
  tree_type_from_field(const cbl_field_t *field)
    {
!   //  This routine comes up with a variable type compatible with the field.
    tree retval;
  
    switch(field->type)
*************** tree_type_from_field(const cbl_field_t *
*** 1254,1274 ****
      case FldNumericDisplay:
      case FldPacked:
        {
        if( field->attr & signable_e )
          {
!         if( field->data.digits > 18 )
            {
            retval = INT128;
            }
!         else if( field->data.digits > 9)
            {
            retval = LONG;
            }
!         else if( field->data.digits > 4)
            {
            retval = INT;
            }
!         else if( field->data.digits > 2)
            {
            retval = SHORT;
            }
--- 1455,1484 ----
      case FldNumericDisplay:
      case FldPacked:
        {
+       int digits = field->data.digits;
+       if(    (field->attr & scaled_e)
+           && field->data.rdigits < 0 )
+         {
+         // This is something like PIC 9999PPP, which means that we need a
+         // variable type that can hold those additional digits:
+         digits += -field->data.rdigits;
+         }
+ 
        if( field->attr & signable_e )
          {
!         if( digits > 18 )
            {
            retval = INT128;
            }
!         else if( digits > 9)
            {
            retval = LONG;
            }
!         else if( digits > 4)
            {
            retval = INT;
            }
!         else if( digits > 2)
            {
            retval = SHORT;
            }
*************** tree_type_from_field(const cbl_field_t *
*** 1279,1297 ****
          }
        else
          {
!         if( field->data.digits > 18 )
            {
            retval = UINT128;
            }
!         else if( field->data.digits > 9)
            {
            retval = ULONG;
            }
!         else if( field->data.digits > 4)
            {
            retval = UINT;
            }
!         else if( field->data.digits > 2)
            {
            retval = USHORT;
            }
--- 1489,1507 ----
          }
        else
          {
!         if( digits > 18 )
            {
            retval = UINT128;
            }
!         else if( digits > 9)
            {
            retval = ULONG;
            }
!         else if( digits > 4)
            {
            retval = UINT;
            }
!         else if( digits > 2)
            {
            retval = USHORT;
            }
*************** tree_type_from_field(const cbl_field_t *
*** 1395,1400 ****
--- 1605,1616 ----
    }
  
  tree
+ tree_type_from_refer(const cbl_refer_t &refer)
+   {
+   return tree_type_from_field(refer.field);
+   }
+ 
+ tree
  get_data_address( cbl_field_t *field,
                    tree         offset)  // Offset is SIZE_T
    {
*************** scale_by_power_of_ten(tree value,
*** 1513,1519 ****
                        bool check_for_fractional)
    {
    Analyze();
!   static tree retval = gg_define_variable(INT, "..sbpot2_retval", vs_file_static);
  
    if( check_for_fractional )
      {
--- 1729,1735 ----
                        bool check_for_fractional)
    {
    Analyze();
!   tree retval = gg_define_variable(INT);
  
    if( check_for_fractional )
      {
*************** hex_dump(tree data, size_t bytes)
*** 1623,1684 ****
      }
    }
  
- tree
- tree_type_from_size(size_t bytes, uint64_t signable)
-   {
-   tree retval = NULL_TREE;
- 
-   if( signable )
-     {
-     switch( bytes )
-       {
-       case 1:
-         retval = SCHAR;
-         break;
-       case 2:
-         retval = SHORT;
-         break;
-       case 4:
-         retval = INT;
-         break;
-       case 8:
-         retval = LONG;
-         break;
-       case 16:
-         retval = INT128;
-         break;
-       default:
-         gcc_unreachable();
-         break;
-       }
-     }
-   else
-     {
-     switch( bytes )
-       {
-       case 1:
-         retval = UCHAR;
-         break;
-       case 2:
-         retval = USHORT;
-         break;
-       case 4:
-         retval = UINT;
-         break;
-       case 8:
-         retval = ULONG;
-         break;
-       case 16:
-         retval = UINT128;
-         break;
-       default:
-         gcc_unreachable();
-         break;
-       }
-     }
-   return retval;
-   }
- 
  static
  bool
  refer_has_depends(const cbl_refer_t &refer, refer_type_t refer_type)
--- 1839,1844 ----
*************** rt_error(const char *msg)
*** 1821,1879 ****
    gg_abort();
    }
  
- void
- copy_little_endian_into_place(cbl_field_t *dest,
-                               tree         dest_offset,
-                               tree value,
-                               int rhs_rdigits,
-                               bool check_for_error,
-                         const tree &size_error)
-   {
-   if( check_for_error )
-     {
-     // We need to see if value can fit into destref
- 
-     // We do this by comparing value to 10^(lhs.ldigits + rhs_rdigits)
-     // Example:  rhs is 123.45, whichis 12345 with rdigits 2
-     // lhs is 99.999.  So, lhs.digits is 5, and lhs.rdigits is 3.
-     // 10^(5 - 3 + 2) is 10^4, which is 10000.  Because 12345 is >= 10000, the
-     // source can't fit into the destination.
- 
-     // Note:  I am not trying to avoid the use of stack variables, because I am
-     // not sure how to declare a file-static variable of unknown type.
-     tree abs_value = gg_define_variable(TREE_TYPE(value));
-     IF( value, lt_op, build_int_cst_type(TREE_TYPE(value), 0) )
-       {
-       gg_assign(abs_value, gg_negate(value));
-       }
-     ELSE
-       {
-       gg_assign(abs_value, value);
-       }
-     ENDIF
- 
-     FIXED_WIDE_INT(128) power_of_ten = get_power_of_ten(  dest->data.digits
-                                                         - dest->data.rdigits
-                                                         + rhs_rdigits );
-     IF( gg_cast(INT128, abs_value),
-         ge_op,
-         wide_int_to_tree(INT128, power_of_ten) )
-       {
-       // Flag the size error
-       gg_assign(size_error, integer_one_node);
-       }
-     ELSE
-       ENDIF
-     }
-   scale_by_power_of_ten_N(value, dest->data.rdigits - rhs_rdigits);
- 
-   tree dest_type = tree_type_from_size( dest->data.capacity(),
-                                         dest->attr & signable_e);
-   tree dest_pointer = gg_add(member(dest->var_decl_node, "data"),
-                              dest_offset);
-   gg_assign(gg_indirect(gg_cast(build_pointer_type(dest_type), dest_pointer)),
-             gg_cast(dest_type, value));
-   }
  
  tree
  build_array_of_referlets( size_t N,
--- 1981,1986 ----
*************** build_array_of_size_t( size_t  N,
*** 1948,1954 ****
    // This only works because it is used in but one spot.  If this routine is
    // called twice, be careful about how the first one is used.  It's a static
    // variable, you see.
!   static tree values_p = gg_define_variable(SIZE_T_P, "..baost_values_p", vs_file_static);
    if( N )
      {
      gg_assign(  values_p,
--- 2055,2061 ----
    // This only works because it is used in but one spot.  If this routine is
    // called twice, be careful about how the first one is used.  It's a static
    // variable, you see.
!   tree values_p = gg_define_variable(SIZE_T_P);
    if( N )
      {
      gg_assign(  values_p,
*************** refer_refmod_length(const cbl_refer_t &r
*** 2067,2074 ****
    {
    Analyze();
    REFER("refstart and reflen");
!   static tree refstart = gg_define_variable(LONG, "..rrl_refstart", vs_file_static);
!   static tree reflen   = gg_define_variable(LONG, "..rrl_reflen", vs_file_static);
  
    get_and_check_refstart_and_reflen( refstart, reflen, refer);
  
--- 2174,2181 ----
    {
    Analyze();
    REFER("refstart and reflen");
!   tree refstart = gg_define_variable(LONG);
!   tree reflen   = gg_define_variable(LONG);
  
    get_and_check_refstart_and_reflen( refstart, reflen, refer);
  
*************** refer_fill_depends(const cbl_refer_t &re
*** 2087,2093 ****
    Analyze();
    cbl_field_t *odo = symbol_find_odo(refer.field);
  
!   static tree value64 = gg_define_variable(LONG, "..rfd_value64", vs_file_static);
  
    get_depending_on_value(value64, refer);
  
--- 2194,2200 ----
    Analyze();
    cbl_field_t *odo = symbol_find_odo(refer.field);
  
!   tree value64 = gg_define_variable(LONG);
  
    get_depending_on_value(value64, refer);
  
*************** refer_size(const cbl_refer_t &refer, ref
*** 2145,2151 ****
      }
    else
      {
!     static tree retval = gg_define_variable(SIZE_T, "..rs_retval", vs_file_static);
  
      if( !refer.field )
        {
--- 2252,2258 ----
      }
    else
      {
!     tree retval = gg_define_variable(SIZE_T);
  
      if( !refer.field )
        {
*************** refer_size_source(const cbl_refer_t &ref
*** 2232,2238 ****
  
    // This assignment has to be here. Simply returning refer_size() results
    // in regression testing errors.
!   static tree retval = gg_define_variable(SIZE_T, "..rss_retval", vs_file_static);
    gg_assign(retval, refer_size(refer, refer_source));
    return retval;
    }
--- 2339,2346 ----
  
    // This assignment has to be here. Simply returning refer_size() results
    // in regression testing errors.
!   ////static tree retval = gg_define_variable(SIZE_T, "..rss_retval", vs_file_stactic);
!   tree retval = gg_define_variable(SIZE_T);
    gg_assign(retval, refer_size(refer, refer_source));
    return retval;
    }
*************** binary_from_FldNumericBinary(tree &value
*** 2448,2474 ****
    return retval;
    }
  
- static const unsigned long pots[17] =
-   {
-   1ULL,                       // 00
-   10ULL,                      // 01
-   100ULL,                     // 02
-   1000ULL,                    // 03
-   10000ULL,                   // 04
-   100000ULL,                  // 05
-   1000000ULL,                 // 06
-   10000000ULL,                // 07
-   100000000ULL,               // 08
-   1000000000ULL,              // 09
-   10000000000ULL,             // 10
-   100000000000ULL,            // 11
-   1000000000000ULL,           // 12
-   10000000000000ULL,          // 13
-   100000000000000ULL,         // 14
-   1000000000000000ULL,        // 15
-   10000000000000000ULL,       // 16
-   };
- 
  static void
  d_and_q_num_disp( tree  &retval,   // We define this return value
                    tree   loc,     // This is a UCHAR_P
--- 2556,2561 ----
*************** get_location(tree &retval, const cbl_ref
*** 3186,3219 ****
  
    if( refer_is_super_clean(refer) )
      {
!     // Working storage, not external, no refmods or subscripts:
!     // gg_assign(retval, member(refer.field->var_decl_node,"data"));
! 
! #if 0
!     /* This should work.  It doesn't.  This needs investigating.  */
!     // To prevent aliasing problems, we use a memcpy
!     gg_memcpy(gg_get_address_of(retval),
!              gg_get_address(refer.field->data_decl_node),
!               build_int_cst_type(SIZE_T, gg_sizeof(UCHAR_P)));
  
      if( refer.field->offset )
        {
!       tree offset = build_int_cst_type(SIZE_T, refer.field->offset);
!       gg_assign(retval, gg_add(retval, offset));
!       }
! #else
!     tree base   = gg_cast(UCHAR_P,
!                           gg_get_address(refer.field->data_decl_node));
!     if( refer.field->offset )
!       {
!       tree offset = build_int_cst_type(SIZE_T, refer.field->offset);
!       gg_assign(retval, gg_cast(UCHAR_P, gg_add(base, offset)));
        }
      else
        {
!       gg_assign(retval, base);
        }
- #endif
      }
    else
      {
--- 3273,3293 ----
  
    if( refer_is_super_clean(refer) )
      {
!     // Working storage, not external, no refmods or subscripts.  That means
!     // we can work with the actual data item, and save a level of indirection.
  
      if( refer.field->offset )
        {
!       gg_assign(retval,
!                 gg_add(gg_cast(UCHAR_P,
!                                gg_get_address(refer.field->data_decl_node)),
!                 build_int_cst_type(SIZE_T, refer.field->offset)));
        }
      else
        {
!       gg_assign(retval, gg_cast(UCHAR_P,
!                             gg_get_address(refer.field->data_decl_node)));
        }
      }
    else
      {
diff -Nrcpad gcc-17-20260614/gcc/cobol/genutil.h gcc-17-20260621/gcc/cobol/genutil.h
*** gcc-17-20260614/gcc/cobol/genutil.h	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/cobol/genutil.h	Sun Jun 21 22:32:06 2026
*************** extern tree var_decl_nop;         // int
*** 61,71 ****
  extern tree var_decl_main_called; // int __gg__main_called
  extern tree var_decl_entry_index; // void* __gg__entry_index
  extern tree var_decl_dialects;    // void* __gg__dialects
  
  int       get_scaled_rdigits(cbl_field_t *field);
  int       get_scaled_digits(cbl_field_t *field);
- tree      tree_type_from_digits(size_t digits, uint64_t signable);
- tree      tree_type_from_size(size_t bytes, uint64_t signable);
  
  void      get_binary_value( tree value,
                              tree rdigits,
--- 61,70 ----
  extern tree var_decl_main_called; // int __gg__main_called
  extern tree var_decl_entry_index; // void* __gg__entry_index
  extern tree var_decl_dialects;    // void* __gg__dialects
+ extern tree var_decl_dp2bin;      // unsigned char * ___gg__dp2bin
  
  int       get_scaled_rdigits(cbl_field_t *field);
  int       get_scaled_digits(cbl_field_t *field);
  
  void      get_binary_value( tree value,
                              tree rdigits,
*************** void      get_integer_value(tree value,
*** 108,119 ****
                              tree         offset=NULL,  // size_t
                              bool check_for_fractional_digits=false);
  void      rt_error(const char *msg);
- void      copy_little_endian_into_place(cbl_field_t *dest,
-                                         tree         dest_offset,
-                                         tree value,
-                                         int rhs_rdigits,
-                                         bool check_for_error,
-                                   const tree &size_error);
  tree      build_array_of_size_t( size_t  N,
                                   const size_t *values);
  void      parser_display_internal_field(tree file_descriptor,
--- 107,112 ----
*************** uint64_t  get_time_nanoseconds();
*** 142,147 ****
--- 135,141 ----
  bool      is_pure_integer(const cbl_field_t *field);
  
  tree      tree_type_from_field(const cbl_field_t *field);
+ tree      tree_type_from_refer(const cbl_refer_t &refer);
  
  bool      get_binary_value(tree &value, 
                       const cbl_refer_t &refer,
diff -Nrcpad gcc-17-20260614/gcc/cobol/lang.opt gcc-17-20260621/gcc/cobol/lang.opt
*** gcc-17-20260614/gcc/cobol/lang.opt	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/cobol/lang.opt	Sun Jun 21 22:32:06 2026
***************
*** 22,27 ****
--- 22,34 ----
  
  ; Please try to keep this file in ASCII collating order.
  
+ ; After modifying any *.opt file, including this one, also update the
+ ; documentation with: 
+ ;
+ ;    make regenerate-opt-urls
+ ;
+ ; and include the *.opt.urls changes in the patch.
+ 
  Language
  Cobol
  
*************** idirafter
*** 403,408 ****
--- 410,419 ----
  Cobol Joined Separate
  ; Documented in c.opt
  
+ imultilib
+ Cobol Joined Separate
+ ; Documented in c.opt
+ 
  main
  Cobol
  -main	The first program-id in the next source file is called by a generated main() entry point.
diff -Nrcpad gcc-17-20260614/gcc/cobol/lang.opt.urls gcc-17-20260621/gcc/cobol/lang.opt.urls
*** gcc-17-20260614/gcc/cobol/lang.opt.urls	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/cobol/lang.opt.urls	Sun Jun 21 22:32:06 2026
*************** UrlSuffix(gcc/Directory-Options.html#ind
*** 43,45 ****
--- 43,48 ----
  idirafter
  UrlSuffix(gcc/Directory-Options.html#index-idirafter) LangUrlSuffix_Fortran(gfortran/Preprocessing-Options.html#index-idirafter)
  
+ imultilib
+ UrlSuffix(gcc/Directory-Options.html#index-imultilib) LangUrlSuffix_D(gdc/Directory-Options.html#index-imultilib) LangUrlSuffix_Fortran(gfortran/Preprocessing-Options.html#index-imultilib)
+ 
diff -Nrcpad gcc-17-20260614/gcc/cobol/lexio.cc gcc-17-20260621/gcc/cobol/lexio.cc
*** gcc-17-20260614/gcc/cobol/lexio.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/cobol/lexio.cc	Sun Jun 21 22:32:06 2026
*************** struct replacing_term_t {
*** 520,526 ****
      {}
  };
  
! extern YYLTYPE yylloc;
  
  static const char *
  last_newline (const char *p, const char *pend ) {
--- 520,526 ----
      {}
  };
  
! extern cbl_loc_t yylloc;
  
  static const char *
  last_newline (const char *p, const char *pend ) {
*************** struct copy_descr_t {
*** 934,942 ****
      : parsed(false), fd(-1), nreplace(0), partial_line(line, eol) {}
  };
  
! static YYLTYPE
  location_in( const filespan_t& mfile, const csub_match& cm ) {
!   YYLTYPE loc {
      int(mfile.lineno() + 1), int(mfile.colno() + 1),
      int(mfile.lineno() + 1), int(mfile.colno() + 1)
    };
--- 934,942 ----
      : parsed(false), fd(-1), nreplace(0), partial_line(line, eol) {}
  };
  
! static cbl_loc_t
  location_in( const filespan_t& mfile, const csub_match& cm ) {
!   cbl_loc_t loc {
      int(mfile.lineno() + 1), int(mfile.colno() + 1),
      int(mfile.lineno() + 1), int(mfile.colno() + 1)
    };
*************** parse_copy_directive( filespan_t& mfile
*** 1024,1033 ****
      bool replacing = !cm[20].matched;
  
      if( library_name.matched ) {
!       YYLTYPE loc = location_in( mfile, library_name );
        copybook.library( loc, xstrndup(library_name.first, library_name.length()) );
      }
!     YYLTYPE loc = location_in( mfile, copybook_name );
      outcome.fd = copybook.open( loc, xstrndup(copybook_name.first,
                                                copybook_name.length()) );
      if( outcome.fd == -1 ) { // let parser report missing copybook
--- 1024,1033 ----
      bool replacing = !cm[20].matched;
  
      if( library_name.matched ) {
!       cbl_loc_t loc = location_in( mfile, library_name );
        copybook.library( loc, xstrndup(library_name.first, library_name.length()) );
      }
!     cbl_loc_t loc = location_in( mfile, copybook_name );
      outcome.fd = copybook.open( loc, xstrndup(copybook_name.first,
                                                copybook_name.length()) );
      if( outcome.fd == -1 ) { // let parser report missing copybook
diff -Nrcpad gcc-17-20260614/gcc/cobol/lexio.h gcc-17-20260621/gcc/cobol/lexio.h
*** gcc-17-20260614/gcc/cobol/lexio.h	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/cobol/lexio.h	Sun Jun 21 22:32:06 2026
*************** struct filespan_t : public bytespan_t {
*** 181,188 ****
      return p == eol;
    }
  
!   YYLTYPE as_location() const {
!     YYLTYPE loc;
  
      loc.first_line = loc.last_line = 1 + iline;
      loc.first_column = loc.last_column = 1 + icol;
--- 181,188 ----
      return p == eol;
    }
  
!   cbl_loc_t as_location() const {
!     cbl_loc_t loc;
  
      loc.first_line = loc.last_line = 1 + iline;
      loc.first_column = loc.last_column = 1 + icol;
diff -Nrcpad gcc-17-20260614/gcc/cobol/messages.cc gcc-17-20260621/gcc/cobol/messages.cc
*** gcc-17-20260614/gcc/cobol/messages.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/cobol/messages.cc	Sun Jun 21 22:32:06 2026
*************** cbl_diagnostic_option( cbl_diag_id_t id
*** 285,291 ****
   * the framework.
   */
  extern int yychar;
! extern YYLTYPE yylloc;
  
  static const diagnostics::option_id option_zero;
  
--- 285,291 ----
   * the framework.
   */
  extern int yychar;
! extern cbl_loc_t yylloc;
  
  static const diagnostics::option_id option_zero;
  
*************** bool cbl_message( cbl_loc_t loc, cbl_dia
*** 326,335 ****
  
        gcc_location_set(yylloc); // use lookahead location
      }
!     explicit temp_loc_t( const YYLTYPE& loc) : orig(current_token_location()) {
!       gcc_location_set(loc);
!     }
!     explicit temp_loc_t( const YDFLTYPE& loc) : orig(current_token_location()) {
        gcc_location_set(loc);
      }
      ~temp_loc_t() {
--- 326,332 ----
  
        gcc_location_set(yylloc); // use lookahead location
      }
!     explicit temp_loc_t( const cbl_loc_t& loc) : orig(current_token_location()) {
        gcc_location_set(loc);
      }
      ~temp_loc_t() {
diff -Nrcpad gcc-17-20260614/gcc/cobol/move.cc gcc-17-20260621/gcc/cobol/move.cc
*** gcc-17-20260614/gcc/cobol/move.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/cobol/move.cc	Sun Jun 21 22:32:06 2026
*************** is_figconst(const cbl_refer_t &sourceref
*** 92,249 ****
    return is_figconst_t(sourceref.field);
    }
  
- static int
- digits_to_bytes(int digits)
-   {
-   int retval;
-   if( digits <= 2 )
-     {
-     retval = 1;
-     }
-   else if( digits <= 4 )
-     {
-     retval = 2;
-     }
-   else if( digits <= 9 )
-     {
-     retval = 4;
-     }
-   else if( digits <= 18 )
-     {
-     retval = 8;
-     }
-   else
-     {
-     retval = 16;
-     }
-   return retval;
-   }
- 
- static tree
- get_reference_to_data(cbl_field_t *field)
-   {
-   // Given a field, we can derive the type of data the field needs to provide.
-   // That field has a field->data_decl_node, which is the starting point for
-   // the reference to the data we calculate.
-   tree retval = NULL_TREE;
-   tree field_type = data_decl_type_for(field);
-   tree data_type  = TREE_TYPE(field->data_decl_node);
-   bool field_is_array = TREE_CODE(field_type) == ARRAY_TYPE;
-   bool data_is_array  = TREE_CODE(data_type) == ARRAY_TYPE;
- 
-   int field_code = TREE_CODE(field_type);
-   int data_code  = TREE_CODE(data_type);
-   size_t field_size = TREE_INT_CST_LOW(TYPE_SIZE_UNIT(field_type));
-   size_t data_size  = TREE_INT_CST_LOW(TYPE_SIZE_UNIT(data_type));
- 
-   if( field_code == data_code && field_size == data_size )
-     {
-     if( !field_is_array )
-       {
-       // The two types are the same and are not ARRAY_TYPE
-       if( field->offset == 0 )
-         {
-         // This is an "ah, that feels good" moment.  Getting here means the
-         // field is something like "77 foo pic 9999" and that means the
-         // data_decl_node is exactly what is needed.
-         retval = field->data_decl_node;
-         }
-       else
-         {
-         // We have an offset.
-         if( (field->offset % field_size) == 0 )
-           {
-           // The offset is an integer number of bytes from data_decl_node:
-           size_t index = field->offset % field_size;
-           retval = gg_indirect( gg_cast(build_pointer_type(data_type),
-                                      gg_get_address_of(field->data_decl_node)),
-                                build_int_cst_type(SIZE_T, index));
-           }
-         else
-           {
-           // The offset is some random number of bytes.  We need to do a
-           // retval = *(data_type *)((char *)&data_decl_node + offset)
-           tree base = gg_get_address_of(field->data_decl_node);
-           base = gg_cast(UCHAR_P, base);
-           base = gg_add(base, build_int_cst_type(SIZE_T, field->offset));
-           retval = gg_cast(field_type, gg_indirect(base));
-           }
-         }
-       }
-     else
-       {
-       // The two types are the same ARRAY_TYPE
-       retval = gg_cast(UCHAR_P, gg_pointer_to_array(field->data_decl_node));
-       if( field->offset )
-         {
-         retval = gg_add(retval, build_int_cst_type(SIZE_T, field->offset));
-         }
-       }
-     }
-   else if( field_is_array && data_is_array )
-     {
-     // We have two different array types
-     retval = gg_cast(UCHAR_P, gg_pointer_to_array(field->data_decl_node));
-     if( field->offset )
-       {
-       retval = gg_add(retval, build_int_cst_type(SIZE_T, field->offset));
-       }
-     }
-   else if( !field_is_array && !data_is_array )
-     {
-     // The two data types are different, and neither is an array
-     if( field->offset == 0 )
-       {
-       if( field_size == data_size )
-         {
-         // The offset is zero, and the sizes are the same.
-         // This must be something like REDEFINES or the like:
-         retval = gg_cast(field_type, field->data_decl_node);
-         }
-       else
-         {
-         // The sizes are different:
-         // retval = *(data_type *)((char *)&data_decl_node)
-         tree base = gg_get_address_of(field->data_decl_node);
-         retval = gg_indirect(gg_cast(build_pointer_type(field_type), base));
-         }
-       }
-     else
-       {
-       // There is an offset
-       tree base = gg_get_address_of(field->data_decl_node);
-       base = gg_cast(UCHAR_P, base);
-       base = gg_add(base, build_int_cst_type(SIZE_T, field->offset));
-       retval = gg_indirect(gg_cast(build_pointer_type(field_type), base));
-       }
-     }
-   else if( !field_is_array && data_is_array )
-     {
-     // The return is a scalar, but we start from an array.
-     tree base = gg_pointer_to_array(field->data_decl_node);
-     base = gg_cast(UCHAR_P, base);
-     if( field->offset )
-       {
-       base = gg_add(base, build_int_cst_type(SIZE_T, field->offset));
-       }
-     base = gg_cast(build_pointer_type(field_type), base);
-     retval = gg_indirect(base);
-     }
-   else // if( field_is_array !data_is_array )
-     {
-     // The return is an array, but we start from a scalar
-     tree base = gg_get_address_of(field->data_decl_node);
-     base = gg_cast(UCHAR_P, base);
-     if( field->offset )
-       {
-       base = gg_add(base, build_int_cst_type(SIZE_T, field->offset));
-       }
-     retval = base;
-     }
- 
-   return retval;
-   }
- 
  static void
  conditional_abs(tree source, const cbl_field_t *field)
    {
--- 92,97 ----
*************** get_literalN_value(cbl_field_t *var)
*** 259,351 ****
    {
    // Get the literal N value from the integer var_decl
    tree retval = NULL_TREE;
!   tree var_type = tree_type_from_size(var->data.capacity(),
!                                       var->attr & signable_e);
    retval = gg_cast(var_type, var->data_decl_node);
    return retval;
    }
  
- static size_t
- get_bytes_needed(cbl_field_t *field)
-   {
-   size_t retval = 0;
-   switch(field->type)
-     {
-     case FldIndex:
-     case FldPointer:
-     case FldFloat:
-     case FldLiteralN:
-       retval = field->data.capacity();
-       break;
- 
-     case FldNumericDisplay:
-       {
-       int digits;
-       if( field->attr & scaled_e && field->data.rdigits<0)
-         {
-         digits = field->data.digits + -field->data.rdigits;
-         }
-       else
-         {
-         digits = field->data.digits;
-         }
-       retval = digits_to_bytes(digits);
-       break;
-       }
- 
-     case FldPacked:
-       {
-       int digits;
-       if( field->attr & scaled_e && field->data.rdigits<0)
-         {
-         digits = field->data.digits + -field->data.rdigits;
-         }
-       else
-         {
-         digits = field->data.digits;
-         }
-       if( !(field->attr & separate_e) )
-         {
-         // This is COMP-3, so there is a sign nybble.
-         digits += 1;
-         }
-       retval = (digits+1)/2;
-       break;
-       }
- 
-     case FldNumericBinary:
-     case FldNumericBin5:
-       {
-       if( field->data.digits )
-         {
-         int digits;
-         if( field->attr & scaled_e && field->data.rdigits<0)
-           {
-           digits = field->data.digits + -field->data.rdigits;
-           }
-         else
-           {
-           digits = field->data.digits;
-           }
-         retval = digits_to_bytes(digits);
-         }
-       else
-         {
-         retval = field->data.capacity();
-         }
-       break;
-       }
- 
-     default:
-       cbl_internal_error("%s: Knows not the variable type %s for %s",
-               __func__,
-               cbl_field_type_str(field->type),
-               field->name );
-       break;
-     }
-   return retval;
-   }
- 
  static void
  get_binary_value_from_float(tree         value,
                        const cbl_refer_t &dest,
--- 107,117 ----
    {
    // Get the literal N value from the integer var_decl
    tree retval = NULL_TREE;
!   tree var_type = tree_type_from_field(var);
    retval = gg_cast(var_type, var->data_decl_node);
    return retval;
    }
  
  static void
  get_binary_value_from_float(tree         value,
                        const cbl_refer_t &dest,
*************** mh_identical(const cbl_refer_t &destref,
*** 422,445 ****
        {
        // They are identical, and they have no subscripts
  
!       tree source = get_reference_to_data(sourceref.field);
!       tree dest   = get_reference_to_data(destref.field);
  
!       tree type = data_decl_type_for(destref.field);
!       if( TREE_CODE(type) == ARRAY_TYPE )
!         {
!         // We are dealing with pointers to UCHAR.
!         // The move has to be done with a copy:
!         gg_memcpy(dest,
!                   source,
!                   build_int_cst_type(SIZE_T,
!                                      destref.field->data.capacity()));
!         }
!       else
!         {
!         // We are dealing with scalars
!         gg_assign(dest, source);
!         }
        moved = true;
        }
      }
--- 188,202 ----
        {
        // They are identical, and they have no subscripts
  
!       tree source;
!       tree dest;
!       get_location(source, sourceref);
!       get_location(dest, destref);
  
!       gg_memcpy(dest,
!                 source,
!                 build_int_cst_type(SIZE_T,
!                                    destref.field->data.capacity()));
        moved = true;
        }
      }
*************** mh_source_is_literalN(cbl_refer_t &destr
*** 517,523 ****
            // There are too few bytes in sourceref
            if( sourceref.field->attr & signable_e )
              {
!             static tree highbyte = gg_define_variable(UCHAR, "..mh_litN_highbyte", vs_file_static);
              // Pick up the source byte that has the sign bit.
              gg_assign(highbyte,
                        gg_get_indirect_reference(gg_add(member(sourceref.field->var_decl_node,
--- 274,280 ----
            // There are too few bytes in sourceref
            if( sourceref.field->attr & signable_e )
              {
!             tree highbyte = gg_define_variable(UCHAR);
              // Pick up the source byte that has the sign bit.
              gg_assign(highbyte,
                        gg_get_indirect_reference(gg_add(member(sourceref.field->var_decl_node,
*************** mh_source_is_literalN(cbl_refer_t &destr
*** 576,623 ****
  
          // For now, we are ignoring intermediates:
          assert( !(destref.field->attr & intermediate_e) );
! 
!         int bytes_needed = std::max(destref.field->data.capacity(),
!                                     sourceref.field->data.capacity());
!         tree calc_type = tree_type_from_size(bytes_needed,
!                                             sourceref.field->attr & signable_e);
!         tree dest_type = tree_type_from_size( destref.field->data.capacity(),
!                                               destref.field->attr & signable_e);
  
          // Pick up the source data.
          tree source = gg_define_variable(calc_type);
          gg_assign(source, gg_cast(calc_type, sourceref.field->data_decl_node));
  
          // Take the absolute value, if the destination is not signable
          conditional_abs(source, destref.field);
  
          // See if it needs to be scaled:
          scale_by_power_of_ten_N(
!                      source,
!                      destref.field->data.rdigits-sourceref.field->data.rdigits);
  
          if( check_for_error && size_error )
            {
            Analyzer.Message("Check to see if result fits");
            if( destref.field->data.digits )
              {
!             FIXED_WIDE_INT(128) power_of_ten = get_power_of_ten(destref.field->data.digits);
!             IF( gg_abs(source), ge_op, wide_int_to_tree(calc_type,
!                                                         power_of_ten) )
                {
!               gg_assign(size_error, gg_bitwise_or(size_error, integer_one_node));
                }
              ELSE
                ENDIF
              }
            }
  
!         Analyzer.Message("Move to destination location");
!         tree dest_location = gg_indirect(
!                     gg_cast(build_pointer_type(dest_type),
!                             gg_add(member(destref.field->var_decl_node, "data"),
!                                    refer_offset(destref))));
!         gg_assign(dest_location, gg_cast(dest_type, source));
          moved = true;
          break;
          }
--- 333,379 ----
  
          // For now, we are ignoring intermediates:
          assert( !(destref.field->attr & intermediate_e) );
!         tree calc_type = tree_type_from_refer(sourceref);
!         tree dest_type = tree_type_from_refer(destref);
  
          // Pick up the source data.
          tree source = gg_define_variable(calc_type);
+         tree dest   = gg_define_variable(dest_type);
          gg_assign(source, gg_cast(calc_type, sourceref.field->data_decl_node));
  
          // Take the absolute value, if the destination is not signable
          conditional_abs(source, destref.field);
  
+         // Cast our source to the target:
+         gg_assign(dest, gg_cast(dest_type, source));
+ 
          // See if it needs to be scaled:
          scale_by_power_of_ten_N(
!                     dest,
!                     destref.field->data.rdigits-sourceref.field->data.rdigits);
  
          if( check_for_error && size_error )
            {
            Analyzer.Message("Check to see if result fits");
            if( destref.field->data.digits )
              {
!             FIXED_WIDE_INT(128) power_of_ten =
!                                  get_power_of_ten(destref.field->data.digits);
!             IF( dest, ge_op, wide_int_to_tree(calc_type, power_of_ten) )
                {
!               gg_assign(size_error,
!                         gg_bitwise_or(size_error, integer_one_node));
                }
              ELSE
                ENDIF
              }
            }
  
!         tree dest_location;
!         get_location(dest_location, destref);
!         gg_memcpy(dest_location,
!                   gg_get_address_of(dest),
!                   build_int_cst_type(SIZE_T, gg_sizeof(dest)));
          moved = true;
          break;
          }
*************** mh_source_is_literalN(cbl_refer_t &destr
*** 627,633 ****
        case FldNumericEdited:
        case FldPacked:
          {
!         static tree berror = gg_define_variable(INT, "..mh_litN_berror", vs_file_static);
          gg_assign(berror, integer_zero_node);
          SHOW_PARSE1
            {
--- 383,389 ----
        case FldNumericEdited:
        case FldPacked:
          {
!         tree berror = gg_define_variable(INT);
          gg_assign(berror, integer_zero_node);
          SHOW_PARSE1
            {
*************** mh_numeric_display( const cbl_refer_t &d
*** 1175,1201 ****
      charmap_t *charmap_dest   =
                         __gg__get_charmap(  destref.field->codeset.encoding);
  
!     static tree source_sign_loc  = gg_define_variable(UCHAR_P,
!                                                       "..mhnd_sign_loc",
!                                                       vs_file_static);
!     static tree dest_sign_loc = gg_define_variable(UCHAR_P,
!                                                       "..mhnd_dest_sign_loc",
!                                                       vs_file_static);
!     static tree source_sign      = gg_define_variable(INT,
!                                                       "..mhnd_sign",
!                                                       vs_file_static);
      // The destination data pointer
!     static tree dest_p    = gg_define_variable( UCHAR_P,
!                                                 "..mhnd_dest",
!                                                 vs_file_static);
      // The source data pointer
!     static tree source_p  = gg_define_variable( UCHAR_P,
!                                                 "..mhnd_source",
!                                                 vs_file_static);
      // When we need an end pointer
!     static tree source_ep = gg_define_variable( UCHAR_P,
!                                                 "..mhnd_source_e",
!                                                 vs_file_static);
  
      bool source_is_signable = sourceref.field->attr & signable_e;
      bool source_is_leading  = sourceref.field->attr & leading_e;
--- 931,945 ----
      charmap_t *charmap_dest   =
                         __gg__get_charmap(  destref.field->codeset.encoding);
  
!     tree source_sign_loc  = gg_define_variable(UCHAR_P);
!     tree dest_sign_loc = gg_define_variable(UCHAR_P);
!     tree source_sign      = gg_define_variable(INT);
      // The destination data pointer
!     tree dest_p    = gg_define_variable( UCHAR_P);
      // The source data pointer
!     tree source_p  = gg_define_variable( UCHAR_P);
      // When we need an end pointer
!     tree source_ep = gg_define_variable(UCHAR_P);
  
      bool source_is_signable = sourceref.field->attr & signable_e;
      bool source_is_leading  = sourceref.field->attr & leading_e;
*************** mh_numeric_display( const cbl_refer_t &d
*** 1524,1529 ****
--- 1268,1334 ----
    return moved;
    }
  
+ static void
+ copy_little_endian_into_place(cbl_field_t *dest,
+                               tree         dest_offset,
+                               tree value,
+                               int rhs_rdigits,
+                               bool check_for_error,
+                         const tree &size_error)
+   {
+   if( !(dest->attr & signable_e) )
+     {
+     gg_assign(value, gg_abs(value));
+     }
+ 
+   if( check_for_error )
+     {
+     // We need to see if value can fit into destref
+ 
+     // We do this by comparing value to 10^(lhs.ldigits + rhs_rdigits)
+     // Example:  rhs is 123.45, whichis 12345 with rdigits 2
+     // lhs is 99.999.  So, lhs.digits is 5, and lhs.rdigits is 3.
+     // 10^(5 - 3 + 2) is 10^4, which is 10000.  Because 12345 is >= 10000, the
+     // source can't fit into the destination.
+ 
+     tree abs_value = gg_define_variable(TREE_TYPE(value));
+     gg_assign(abs_value, gg_abs(value));
+ 
+     FIXED_WIDE_INT(128) power_of_ten = get_power_of_ten(  dest->data.digits
+                                                         - dest->data.rdigits
+                                                         + rhs_rdigits );
+     IF( gg_cast(INT128, abs_value),
+         ge_op,
+         wide_int_to_tree(INT128, power_of_ten) )
+       {
+       // Flag the size error
+       gg_assign(size_error, integer_one_node);
+       }
+     ELSE
+       ENDIF
+     }
+   scale_by_power_of_ten_N(value, dest->data.rdigits - rhs_rdigits);
+ 
+   // Create a variable of our target type.
+   tree dest_type = tree_type_from_field(dest);
+   tree target = gg_define_variable(dest_type);
+   // Cast the source to the target
+   gg_assign(target, gg_cast(dest_type, value));
+ 
+   tree dest_pointer = gg_define_variable(UCHAR_P);
+   gg_assign(dest_pointer, gg_add(member(dest->var_decl_node, "data"),
+                                  dest_offset));
+ 
+   if( dest->type == FldNumericBinary )
+     {
+     gg_assign(target, gg_bswap(target));
+     }
+   // Copy the target to the destination.
+   gg_memcpy(dest_pointer,
+             gg_get_address_of(target),
+             build_int_cst_type(SIZE_T, gg_sizeof(dest_type)));
+   }
+ 
  static bool
  mh_little_endian( const cbl_refer_t &destref,
                    const cbl_refer_t &sourceref,
*************** mh_little_endian( const cbl_refer_t &des
*** 1531,1550 ****
                          bool check_for_error,
                          tree size_error)
    {
    bool moved = false;
  
    cbl_figconst_t figconst = cbl_figconst_of( sourceref.field->data.original());
  
    if(     !figconst
        &&  !(destref.field->attr    & scaled_e)
-       &&  !(destref.field->attr    & (intermediate_e  ))
        &&  !(sourceref.field->attr  & (intermediate_e  ))
        &&  sourceref.field->type     != FldGroup
        &&  sourceref.field->type     != FldLiteralA
        &&  sourceref.field->type     != FldAlphanumeric
        &&  sourceref.field->type     != FldNumericEdited
-       &&  sourceref.field->type     != FldPacked
        &&  (     destref.field->type == FldNumericBin5
              ||  destref.field->type == FldPointer
              ||  destref.field->type == FldIndex ) )
      {
--- 1336,1357 ----
                          bool check_for_error,
                          tree size_error)
    {
+   // The name of this routine is misleading.  It also handles big-endian
+   // destinations.
+ 
    bool moved = false;
  
    cbl_figconst_t figconst = cbl_figconst_of( sourceref.field->data.original());
  
    if(     !figconst
        &&  !(destref.field->attr    & scaled_e)
        &&  !(sourceref.field->attr  & (intermediate_e  ))
        &&  sourceref.field->type     != FldGroup
        &&  sourceref.field->type     != FldLiteralA
        &&  sourceref.field->type     != FldAlphanumeric
        &&  sourceref.field->type     != FldNumericEdited
        &&  (     destref.field->type == FldNumericBin5
+             ||  destref.field->type == FldNumericBinary
              ||  destref.field->type == FldPointer
              ||  destref.field->type == FldIndex ) )
      {
*************** mh_little_endian( const cbl_refer_t &des
*** 1556,1569 ****
        SHOW_PARSE_END
        }
  
-     int bytes_needed = get_bytes_needed(sourceref.field);
-     tree source_type = tree_type_from_size(bytes_needed,
-                                            sourceref.field->attr
-                                                                 & signable_e) ;
-     tree source = gg_define_variable(source_type);
- 
      if( sourceref.field->type == FldFloat )
        {
        get_binary_value_from_float(source,
                                    destref,
                                    sourceref.field,
--- 1363,1384 ----
        SHOW_PARSE_END
        }
  
      if( sourceref.field->type == FldFloat )
        {
+       tree source = NULL_TREE;
+       switch( sourceref.field->data.capacity() )
+         {
+         case 4:
+           source = gg_define_variable(SHORT);
+           break;
+         case 8:
+           source = gg_define_variable(LONG);
+           break;
+         case 16:
+           source = gg_define_variable(INT128);
+           break;
+         }
+ 
        get_binary_value_from_float(source,
                                    destref,
                                    sourceref.field,
*************** mh_little_endian( const cbl_refer_t &des
*** 1581,1586 ****
--- 1396,1403 ----
        }
      else
        {
+       tree source_type = tree_type_from_refer(sourceref);
+       tree source = gg_define_variable(source_type);
        get_binary_value( source,
                          NULL,
                          sourceref.field,
*************** mh_numdisp_to_packed(const cbl_refer_t &
*** 2142,2159 ****
    tree umask = build_int_cst_type(UCHAR, 0x0F);
    tree ufour = build_int_cst_type(SIZE_T,   4);
  
!   tree source_location = gg_define_variable(UCHAR_P);
!   tree dest_location   = gg_define_variable(UCHAR_P);
    tree dest_p          = gg_define_variable(UCHAR_P);
    tree source_p        = gg_define_variable(UCHAR_P);
  
!   tree temp;
! 
!   get_location(temp, destref);
!   gg_assign(dest_location, temp);
    gg_assign(dest_p, dest_location);
!   get_location(temp, sourceref);
!   gg_assign(source_location, temp);
  
    int source_digits   = sourceref.field->data.digits;
    int source_rdigits  = sourceref.field->data.rdigits;
--- 1959,1972 ----
    tree umask = build_int_cst_type(UCHAR, 0x0F);
    tree ufour = build_int_cst_type(SIZE_T,   4);
  
!   tree source_location;
!   tree dest_location;
    tree dest_p          = gg_define_variable(UCHAR_P);
    tree source_p        = gg_define_variable(UCHAR_P);
  
!   get_location(dest_location, destref);
    gg_assign(dest_p, dest_location);
!   get_location(source_location, sourceref);
  
    int source_digits   = sourceref.field->data.digits;
    int source_rdigits  = sourceref.field->data.rdigits;
*************** mh_packed_to_packed(const cbl_refer_t &d
*** 2453,2469 ****
    // in the dest.  We fiddle with the leading digits, the trailing digits, and
    // the sign nybble as necessary.
  
!   tree source_location = gg_define_variable(UCHAR_P);
!   tree dest_location   = gg_define_variable(UCHAR_P);
    tree source_sign     = gg_define_variable(UCHAR_P);
    tree dest_sign       = gg_define_variable(UCHAR_P);
-   tree temp;
- 
-   get_location(temp, destref);
-   gg_assign(dest_location, temp);
  
!   get_location(temp, sourceref);
!   gg_assign(source_location, temp);
  
    if( check_for_error )
      {
--- 2266,2278 ----
    // in the dest.  We fiddle with the leading digits, the trailing digits, and
    // the sign nybble as necessary.
  
!   tree source_location;
!   tree dest_location;
    tree source_sign     = gg_define_variable(UCHAR_P);
    tree dest_sign       = gg_define_variable(UCHAR_P);
  
!   get_location(dest_location, destref);
!   get_location(source_location, sourceref);
  
    if( check_for_error )
      {
*************** mh_packed_to_numdisp(const cbl_refer_t &
*** 2799,2815 ****
    tree ufour = build_int_cst_type(SIZE_T,   4);
    tree uzero = build_int_cst_type(UCHAR,
                                    charmap->mapped_character(ascii_zero));
!   tree source_location = gg_define_variable(UCHAR_P);
!   tree dest_location   = gg_define_variable(UCHAR_P);
    tree dest_p          = gg_define_variable(UCHAR_P);
    tree source_p        = gg_define_variable(UCHAR_P);
  
!   tree temp;
!   get_location(temp, destref);
!   gg_assign(dest_location, temp);
    gg_assign(dest_p, dest_location);
!   get_location(temp, sourceref);
!   gg_assign(source_location, temp);
  
    // source_digits will be the number of digits extracted from the source that
    // find their way into the destination.
--- 2608,2621 ----
    tree ufour = build_int_cst_type(SIZE_T,   4);
    tree uzero = build_int_cst_type(UCHAR,
                                    charmap->mapped_character(ascii_zero));
!   tree source_location;
!   tree dest_location;
    tree dest_p          = gg_define_variable(UCHAR_P);
    tree source_p        = gg_define_variable(UCHAR_P);
  
!   get_location(dest_location, destref);
    gg_assign(dest_p, dest_location);
!   get_location(source_location, sourceref);
  
    // source_digits will be the number of digits extracted from the source that
    // find their way into the destination.
*************** move_helper(tree size_error,        // T
*** 3037,3043 ****
      gg_assign(size_error, integer_zero_node);
      }
  
!   static tree stash = gg_define_variable(UCHAR_P, "..mh_stash", vs_file_static);
  
    tree st_data = NULL_TREE;
    tree st_size = NULL_TREE;
--- 2843,2849 ----
      gg_assign(size_error, integer_zero_node);
      }
  
!   static tree stash = gg_define_variable(UCHAR_P);
  
    tree st_data = NULL_TREE;
    tree st_size = NULL_TREE;
diff -Nrcpad gcc-17-20260614/gcc/cobol/parse.y gcc-17-20260621/gcc/cobol/parse.y
*** gcc-17-20260614/gcc/cobol/parse.y	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/cobol/parse.y	Sun Jun 21 22:32:06 2026
*************** class locale_tgt_t {
*** 329,335 ****
--- 329,341 ----
  #include "inspect.h"
  }
  
+ %define api.location.type {cbl_loc_t}
+ 
  %{
+ // yyssa never freed: 
+ // https://lists.nongnu.org/archive/html/help-bison/2021-01/msg00021.html
+ #pragma GCC diagnostic ignored "-Wfree-nonheap-object"
+ 
  #include "config.h"
  #include <fstream>  // Before cobol-system because it uses poisoned functions
  #include "cobol-system.h"
*************** class locale_tgt_t {
*** 934,940 ****
             declarative_list_t* dcl_list_t;
             isym_list_t* isym_list;
      struct { bool is_float; radix_t radix; char *string; } numstr;
!     struct { YYLTYPE loc; int token; literal_t name; } prog_end;
      struct { int token; special_name_t id; } special_type;
      struct { char locale_type; const char * name; } locale_phrase;
               coll_alphanat_t char_class_locales;
--- 940,946 ----
             declarative_list_t* dcl_list_t;
             isym_list_t* isym_list;
      struct { bool is_float; radix_t radix; char *string; } numstr;
!     struct { cbl_loc_base_t loc; int token; literal_t name; } prog_end;
      struct { int token; special_name_t id; } special_type;
      struct { char locale_type; const char * name; } locale_phrase;
               coll_alphanat_t char_class_locales;
*************** class locale_tgt_t {
*** 1005,1017 ****
  
      struct cbl_ffi_arg_t *ffi_arg;
      struct ffi_args_t *ffi_args;
!     struct { YYLTYPE loc; cbl_refer_t *ffi_name, *ffi_returning;
               ffi_args_t *using_params; } ffi_impl;
  
      struct { bool common, initial, recursive; } comminit;
      struct { enum select_clause_t clause; cbl_file_t *file; } select_clause;
      struct { size_t clauses; cbl_file_t *file; } select_clauses;
!     struct { YYLTYPE loc; char *on, *off; } switches;
      struct { cbl_encoding_t encoding; cbl_domain_t *domain; } false_domain;
      struct { size_t also; unsigned char *low, *high; } colseq;
      struct { cbl_field_attr_t attr; int nbyte; } pic_part;
--- 1011,1023 ----
  
      struct cbl_ffi_arg_t *ffi_arg;
      struct ffi_args_t *ffi_args;
!     struct { cbl_loc_base_t loc; cbl_refer_t *ffi_name, *ffi_returning;
               ffi_args_t *using_params; } ffi_impl;
  
      struct { bool common, initial, recursive; } comminit;
      struct { enum select_clause_t clause; cbl_file_t *file; } select_clause;
      struct { size_t clauses; cbl_file_t *file; } select_clauses;
!     struct { cbl_loc_base_t loc; char *on, *off; } switches;
      struct { cbl_encoding_t encoding; cbl_domain_t *domain; } false_domain;
      struct { size_t also; unsigned char *low, *high; } colseq;
      struct { cbl_field_attr_t attr; int nbyte; } pic_part;
*************** class locale_tgt_t {
*** 1543,1549 ****
    cbl_field_t *
    new_literal( const cbl_loc_t loc, const literal_t& lit, enum cbl_field_attr_t attr );
  
!   static YYLTYPE first_line_of( YYLTYPE loc );
  %}
  
  %locations
--- 1549,1555 ----
    cbl_field_t *
    new_literal( const cbl_loc_t loc, const literal_t& lit, enum cbl_field_attr_t attr );
  
!   static cbl_loc_t first_line_of( cbl_loc_t loc );
  %}
  
  %locations
*************** file_descrs:    file_descr
*** 3308,3315 ****
          |       file_descrs file_descr
                  ;
  file_descr:     fd_name            '.' { field_done(); } fields
!         |       fd_name fd_clauses '.' { field_done(); }
!                 fields
                  ;
  
  fd_name:        FD NAME { $$ = file_section_fd_set(fd_e, $2, @2); }
--- 3314,3320 ----
          |       file_descrs file_descr
                  ;
  file_descr:     fd_name            '.' { field_done(); } fields
!         |       fd_name fd_clauses '.' { field_done(); } fields
                  ;
  
  fd_name:        FD NAME { $$ = file_section_fd_set(fd_e, $2, @2); }
*************** data_descr1:    level_name
*** 4383,4390 ****
                            $field->blank_initial($field->char_capacity());
                          }
                          $field->encode_numeric($field->data.original(), 
!                                                data_clause_locations[value_clause_e],
!                                                $field->data.original_numeric());
                        }
                      }
                    } else { // no VALUE clause
--- 4388,4394 ----
                            $field->blank_initial($field->char_capacity());
                          }
                          $field->encode_numeric($field->data.original(), 
!                                                data_clause_locations[value_clause_e]);
                        }
                      }
                    } else { // no VALUE clause
*************** declaratives:   %empty
*** 5526,5532 ****
                    parser_label_label($label);
                    enabled_exceptions = current.enabled_exception_cache;
                    current.enabled_exception_cache.clear();
! 		  ast_enter_section(implicit_section());
                  }
                  ;
  
--- 5530,5538 ----
                    parser_label_label($label);
                    enabled_exceptions = current.enabled_exception_cache;
                    current.enabled_exception_cache.clear();
!                   cbl_loc_t loc(@4); // the dot
!                   loc.first_line++;
! 		  ast_enter_section(loc, implicit_section());
                  }
                  ;
  
*************** sentences:      sentence {
*** 5542,5548 ****
                    if( !label ) {
                      YYERROR;
                    }
!                   ast_enter_paragraph(label);
                    current.new_paragraph(label);
                    apply_declaratives();
                  }
--- 5548,5554 ----
                    if( !label ) {
                      YYERROR;
                    }
!                   ast_enter_paragraph(@para, label);
                    current.new_paragraph(label);
                    apply_declaratives();
                  }
*************** sentences:      sentence {
*** 5559,5565 ****
                    if( !label ) {
                      YYERROR;
                    }
!                   ast_enter_paragraph(label);
                    current.new_paragraph(label);
                    apply_declaratives();
                  }
--- 5565,5571 ----
                    if( !label ) {
                      YYERROR;
                    }
!                   ast_enter_paragraph(@para, label);
                    current.new_paragraph(label);
                    apply_declaratives();
                  }
*************** section_name:	NAME section_kw '.'
*** 7905,7918 ****
                  {
                    statement_begin(@1, SECTION);
  		  $$ = label_add(@1, LblSection, $1);
!                   ast_enter_section($$);
                    apply_declaratives();
                  }
  	|	NAME section_kw // lexer swallows '.' before USE
                  <label>{
                    statement_begin(@1, SECTION);
  		  $$ = label_add(@1, LblSection, $1);
!                   ast_enter_section($$);
                    apply_declaratives();
                  } [label]
                  cdf_use dot
--- 7911,7924 ----
                  {
                    statement_begin(@1, SECTION);
  		  $$ = label_add(@1, LblSection, $1);
!                   ast_enter_section(@1, $$);
                    apply_declaratives();
                  }
  	|	NAME section_kw // lexer swallows '.' before USE
                  <label>{
                    statement_begin(@1, SECTION);
  		  $$ = label_add(@1, LblSection, $1);
!                   ast_enter_section(@1, $$);
                    apply_declaratives();
                  } [label]
                  cdf_use dot
*************** perform_when1:	WHEN perform_ec {
*** 8345,8351 ****
  				  []( const cbl_declarative_t *p ) {
  				    return *p;
  				  } );
! 		  ast_enter_paragraph(when);
  		}
  		statements {
  		  parser_exit_paragraph();
--- 8351,8357 ----
  				  []( const cbl_declarative_t *p ) {
  				    return *p;
  				  } );
! 		  ast_enter_paragraph(@WHEN, when);
  		}
  		statements {
  		  parser_exit_paragraph();
*************** except_files:	except_name[ec] FILE_KW fi
*** 8433,8444 ****
  perform_ec_other:
  		%empty %prec WHEN {
                    const auto& ec_labels( perform_current()->ec_labels );
! 		  ast_enter_paragraph(ec_labels.other);
  		  parser_exit_paragraph();
  		}
  	|	WHEN OTHER {
                    const auto& ec_labels( perform_current()->ec_labels );
! 		  ast_enter_paragraph(ec_labels.other);
  		}
  		exception statements %prec WHEN {
  		  parser_exit_paragraph();
--- 8439,8450 ----
  perform_ec_other:
  		%empty %prec WHEN {
                    const auto& ec_labels( perform_current()->ec_labels );
! 		  ast_enter_paragraph(@$, ec_labels.other);
  		  parser_exit_paragraph();
  		}
  	|	WHEN OTHER {
                    const auto& ec_labels( perform_current()->ec_labels );
! 		  ast_enter_paragraph(@$, ec_labels.other);
  		}
  		exception statements %prec WHEN {
  		  parser_exit_paragraph();
*************** perform_ec_other:
*** 8447,8458 ****
  perform_ec_common:
  		%empty {
  		  const auto& ec_labels( perform_current()->ec_labels );
! 		  ast_enter_paragraph(ec_labels.common);
  		  parser_exit_paragraph();
  		}
  	|	WHEN COMMON {
  		  const auto& ec_labels( perform_current()->ec_labels );
! 		  ast_enter_paragraph(ec_labels.common);
  		}
  		exception statements {
  		  parser_exit_paragraph();
--- 8453,8464 ----
  perform_ec_common:
  		%empty {
  		  const auto& ec_labels( perform_current()->ec_labels );
! 		  ast_enter_paragraph(@$, ec_labels.common);
  		  parser_exit_paragraph();
  		}
  	|	WHEN COMMON {
  		  const auto& ec_labels( perform_current()->ec_labels );
! 		  ast_enter_paragraph(@$, ec_labels.common);
  		}
  		exception statements {
  		  parser_exit_paragraph();
*************** perform_ec_common:
*** 8461,8473 ****
  perform_ec_finally:
  		%empty {
  		  const auto& ec_labels( perform_current()->ec_labels );
! 		  ast_enter_paragraph(ec_labels.finally);
  		  parser_exit_paragraph();
  		  parser_label_goto(ec_labels.fini);
  		}
  	|	FINALLY {
  		  const auto& ec_labels( perform_current()->ec_labels );
! 		  ast_enter_paragraph(ec_labels.finally);
  		}
  		exception statements {
  		  parser_exit_paragraph();
--- 8467,8479 ----
  perform_ec_finally:
  		%empty {
  		  const auto& ec_labels( perform_current()->ec_labels );
! 		  ast_enter_paragraph(@$, ec_labels.finally);
  		  parser_exit_paragraph();
  		  parser_label_goto(ec_labels.fini);
  		}
  	|	FINALLY {
  		  const auto& ec_labels( perform_current()->ec_labels );
! 		  ast_enter_paragraph(@$, ec_labels.finally);
  		}
  		exception statements {
  		  parser_exit_paragraph();
*************** label_1:        qname
*** 10744,10750 ****
                      isect = symbol_index(symbol_elem_of(sect));
                    }
  
!                   $$ = paragraph_reference(para, isect);
                    assert($$);
                    dbgmsg( "using procedure %s of line %d", $$->name, $$->line );
                  }
--- 10750,10756 ----
                      isect = symbol_index(symbol_elem_of(sect));
                    }
  
!                   $$ = paragraph_reference(@1, para, isect);
                    assert($$);
                    dbgmsg( "using procedure %s of line %d", $$->name, $$->line );
                  }
*************** function_call:  function intrinsic { //
*** 11037,11043 ****
  
                  ;
  function:       %empty   %prec FUNCTION
!                 { // typed_name in scan_ante.h allows FUNCTION keywod to be ommitted.
                    statement_begin(@$, FUNCTION);
                  }
          |       FUNCTION
--- 11043,11049 ----
  
                  ;
  function:       %empty   %prec FUNCTION
!                 { // typed_name in scan_ante.h allows FUNCTION keyword to be ommitted.
                    statement_begin(@$, FUNCTION);
                  }
          |       FUNCTION
*************** end_xml:        %empty     %prec XMLPARS
*** 12546,12553 ****
                  ;
  %%
  
! static YYLTYPE
! first_line_of( YYLTYPE loc ) {
      if( loc.first_line < loc.last_line ) loc.last_line = loc.first_line;
      if( loc.last_column < loc.first_column ) loc.last_column = loc.first_column;
      return loc;
--- 12552,12559 ----
                  ;
  %%
  
! static cbl_loc_t
! first_line_of( cbl_loc_t loc ) {
      if( loc.first_line < loc.last_line ) loc.last_line = loc.first_line;
      if( loc.last_column < loc.first_column ) loc.last_column = loc.first_column;
      return loc;
*************** verify_args( const YYLTYPE& loc,
*** 12712,12718 ****
    }
  }
  
! void ast_call( const YYLTYPE& loc, cbl_refer_t name, const cbl_refer_t& returning,
                 size_t narg, cbl_ffi_arg_t args[],
                 cbl_label_t *except,
                 cbl_label_t *not_except,
--- 12718,12725 ----
    }
  }
  
! static void
! ast_call( const cbl_loc_t& loc, cbl_refer_t name, const cbl_refer_t& returning,
                 size_t narg, cbl_ffi_arg_t args[],
                 cbl_label_t *except,
                 cbl_label_t *not_except,
*************** statement_prolog( int token ) {
*** 12789,12795 ****
   * parsed.
   */
  static void
! statement_begin( const YYLTYPE& loc, int token ) {
    static int prior_token = 0;
  
    if( statement_cleanup )  {
--- 12796,12802 ----
   * parsed.
   */
  static void
! statement_begin( const cbl_loc_t& loc, int token ) {
    static int prior_token = 0;
  
    if( statement_cleanup )  {
*************** typedef label_named<LblSection> section_
*** 13062,13068 ****
  typedef label_named<LblParagraph> paragraph_named;
  
  static struct cbl_label_t *
! label_add( const YYLTYPE& loc,
  	   enum cbl_label_type_t type, const char name[] ) {
    size_t parent = 0;
  
--- 13069,13075 ----
  typedef label_named<LblParagraph> paragraph_named;
  
  static struct cbl_label_t *
! label_add( const cbl_loc_t& loc,
  	   enum cbl_label_type_t type, const char name[] ) {
    size_t parent = 0;
  
*************** label_add( const YYLTYPE& loc,
*** 13108,13114 ****
   */
  static struct cbl_label_t *
  label_add( enum cbl_label_type_t type, const char name[], int line ) {
!   YYLTYPE loc { line, 1, line, 1 };
    return label_add(loc, type, name);
  }
  
--- 13115,13121 ----
   */
  static struct cbl_label_t *
  label_add( enum cbl_label_type_t type, const char name[], int line ) {
!   cbl_loc_t loc { line, 1, line, 1 };
    return label_add(loc, type, name);
  }
  
*************** perform_t::ec_labels_t::new_label( cbl_l
*** 13149,13155 ****
   * detects and corrects its misstep.
   */
  static struct cbl_label_t *
! paragraph_reference( const char name[], size_t section )
  {
    // A reference has line == 0.  It is LblParagraph if the section is
    // explicitly named, else LblNone (because we don't know).
--- 13156,13162 ----
   * detects and corrects its misstep.
   */
  static struct cbl_label_t *
! paragraph_reference( const cbl_loc_t& loc, const char name[], size_t section )
  {
    // A reference has line == 0.  It is LblParagraph if the section is
    // explicitly named, else LblNone (because we don't know).
*************** paragraph_reference( const char name[],
*** 13160,13167 ****
  
    p = symbol_label_add(PROGRAM, &label);
    assert(p);
! 
    const char *sect_name = section? cbl_label_of(symbol_at(section))->name : NULL;
    procedure_reference_add(sect_name, p->name, yylineno, current.program_section());
  
    return p;
--- 13167,13179 ----
  
    p = symbol_label_add(PROGRAM, &label);
    assert(p);
!   const char *para_name = p->name;
    const char *sect_name = section? cbl_label_of(symbol_at(section))->name : NULL;
+   
+   match_proc::statement_compose( loc.first_line,
+                                  current.program_section(),
+                                  para_name, sect_name );
+                    
    procedure_reference_add(sect_name, p->name, yylineno, current.program_section());
  
    return p;
*************** function_descr_t::init( int isym, bool p
*** 13308,13314 ****
    function_descr_t descr = { FUNCTION_UDF_0 };
    descr.ret_type = FldInvalid;
    const auto L = cbl_label_of(symbol_at(isym));
!   bool ok = namcpy(YYLTYPE(), descr.name, L->name);
    descr.prototype = prototype;
    gcc_assert(ok);
    return descr;
--- 13320,13326 ----
    function_descr_t descr = { FUNCTION_UDF_0 };
    descr.ret_type = FldInvalid;
    const auto L = cbl_label_of(symbol_at(isym));
!   bool ok = namcpy(cbl_loc_t(), descr.name, L->name);
    descr.prototype = prototype;
    gcc_assert(ok);
    return descr;
*************** cbl_key_t::operator=( const sort_key_t&
*** 13389,13395 ****
  }
  
  static cbl_refer_t *
! ast_op( YYLTYPE loc, cbl_refer_t *lhs, char op, cbl_refer_t *rhs ) {
    assert(lhs);
    assert(rhs);
    if( ! (is_numeric(lhs->field) && is_numeric(rhs->field)) ) {
--- 13401,13407 ----
  }
  
  static cbl_refer_t *
! ast_op( const cbl_loc_t& loc, cbl_refer_t *lhs, char op, cbl_refer_t *rhs ) {
    assert(lhs);
    assert(rhs);
    if( ! (is_numeric(lhs->field) && is_numeric(rhs->field)) ) {
*************** data_section_str( data_section_t section
*** 13580,13586 ****
  }
  
  static bool
! current_data_section_set(const YYLTYPE& loc,  data_section_t data_section ) {
    // order is mandatory
    if( data_section < current_data_section ) {
      error_msg(loc, "%s SECTION must precede %s SECTION",
--- 13592,13598 ----
  }
  
  static bool
! current_data_section_set(const cbl_loc_t& loc,  data_section_t data_section ) {
    // order is mandatory
    if( data_section < current_data_section ) {
      error_msg(loc, "%s SECTION must precede %s SECTION",
*************** lang_check_failed (const char* file, int
*** 13648,13655 ****
  
  #pragma GCC diagnostic pop
  
! void
! ast_inspect( YYLTYPE loc, cbl_refer_t& input, bool backward,
               cbl_inspect_opers_t& inspects )
  {
    if( yydebug ) {
--- 13660,13667 ----
  
  #pragma GCC diagnostic pop
  
! static void
! ast_inspect( cbl_loc_t loc, cbl_refer_t& input, bool backward,
               cbl_inspect_opers_t& inspects )
  {
    if( yydebug ) {
*************** initialize_one( cbl_num_result_t target,
*** 13959,13967 ****
  {
    cbl_refer_t& tgt( target.refer );
    if( ! valid_target(tgt) ) return false;
! #if 0
!   if( field_index(target.refer.field) == return_code_register() ) return true;
! #endif
    // Rule 1 c: is valid for VALUE, REPLACING, or DEFAULT
    // If no VALUE (category none), set to blank/zero.
    if( value_category == data_category_none && replacements.empty() ) {
--- 13971,13977 ----
  {
    cbl_refer_t& tgt( target.refer );
    if( ! valid_target(tgt) ) return false;
! 
    // Rule 1 c: is valid for VALUE, REPLACING, or DEFAULT
    // If no VALUE (category none), set to blank/zero.
    if( value_category == data_category_none && replacements.empty() ) {
*************** cobol_dialect_set( cbl_dialect_t dialect
*** 14548,14554 ****
      break;
    case dialect_gnu_e:
      if( 0 == (cbl_dialects & dialect) ) { // first time
!       cdf_tokens.equate(YYLTYPE(), "BINARY-DOUBLE", "BINARY-C-LONG");
      }
      break;
    }    
--- 14558,14564 ----
      break;
    case dialect_gnu_e:
      if( 0 == (cbl_dialects & dialect) ) { // first time
!       cdf_tokens.equate(cbl_loc_t(), "BINARY-DOUBLE", "BINARY-C-LONG");
      }
      break;
    }    
*************** cobol_gcobol_feature_set( cbl_gcobol_fea
*** 14575,14581 ****
  }
  
  static bool
! literal_refmod_valid( YYLTYPE loc, const cbl_refer_t& r ) {
    unsigned int nchar = r.field->char_capacity();
    const cbl_span_t& refmod(r.refmod);
  
--- 14585,14593 ----
  }
  
  static bool
! literal_refmod_valid( cbl_loc_t loc, const cbl_refer_t& r ) {
!   if( r.field->has_attr(any_length_e) ) return true;
! 
    unsigned int nchar = r.field->char_capacity();
    const cbl_span_t& refmod(r.refmod);
  
*************** const cbl_field_t *
*** 14646,14652 ****
  literal_subscript_oob( const cbl_refer_t& r, size_t& isub );
  
  static bool
! literal_subscripts_valid( YYLTYPE loc, const cbl_refer_t& name ) {
    size_t isub;
  
    // Report any out-of-bound subscript. 
--- 14658,14664 ----
  literal_subscript_oob( const cbl_refer_t& r, size_t& isub );
  
  static bool
! literal_subscripts_valid( cbl_loc_t loc, const cbl_refer_t& name ) {
    size_t isub;
  
    // Report any out-of-bound subscript. 
*************** literal_subscripts_valid( YYLTYPE loc, c
*** 14683,14689 ****
  }
  
  static void
! subscript_dimension_error( YYLTYPE loc, size_t nsub, const cbl_refer_t *scalar ) {
    if( 0 == dimensions(scalar->field) ) {
      error_msg(loc, "%zu subscripts provided for %s, "
                "which has no dimensions",
--- 14695,14701 ----
  }
  
  static void
! subscript_dimension_error( cbl_loc_t loc, size_t nsub, const cbl_refer_t *scalar ) {
    if( 0 == dimensions(scalar->field) ) {
      error_msg(loc, "%zu subscripts provided for %s, "
                "which has no dimensions",
*************** subscript_dimension_error( YYLTYPE loc,
*** 14696,14709 ****
  }
  
  static void
! reject_refmod( YYLTYPE loc, const cbl_refer_t& scalar ) {
    if( scalar.is_refmod_reference() ) {
      error_msg(loc, "%s cannot be reference-modified here", scalar.name());
    }
  }
  
  static bool
! require_pointer( YYLTYPE loc, const cbl_refer_t& scalar ) {
    if( scalar.field->type != FldPointer ) {
      error_msg(loc, "%s must have USAGE POINTER", scalar.name());
      return false;
--- 14708,14721 ----
  }
  
  static void
! reject_refmod( cbl_loc_t loc, const cbl_refer_t& scalar ) {
    if( scalar.is_refmod_reference() ) {
      error_msg(loc, "%s cannot be reference-modified here", scalar.name());
    }
  }
  
  static bool
! require_pointer( cbl_loc_t loc, const cbl_refer_t& scalar ) {
    if( scalar.field->type != FldPointer ) {
      error_msg(loc, "%s must have USAGE POINTER", scalar.name());
      return false;
*************** require_pointer( YYLTYPE loc, const cbl_
*** 14712,14718 ****
  }
  
  static bool
! require_numeric( YYLTYPE loc, const cbl_refer_t& scalar ) {
    if( ! is_numeric(scalar.field) ) {
      error_msg(loc, "%s must have numeric USAGE", scalar.name());
      return false;
--- 14724,14730 ----
  }
  
  static bool
! require_numeric( cbl_loc_t loc, const cbl_refer_t& scalar ) {
    if( ! is_numeric(scalar.field) ) {
      error_msg(loc, "%s must have numeric USAGE", scalar.name());
      return false;
*************** require_numeric( YYLTYPE loc, const cbl_
*** 14721,14727 ****
  }
  
  static bool
! require_integer( YYLTYPE loc, const cbl_refer_t& scalar ) {
    if( is_literal(scalar.field) ) {
      if( ! is_integer_literal(scalar.field) ) {
        error_msg(loc, "numeric literal '%s' must be an integer",
--- 14733,14739 ----
  }
  
  static bool
! require_integer( cbl_loc_t loc, const cbl_refer_t& scalar ) {
    if( is_literal(scalar.field) ) {
      if( ! is_integer_literal(scalar.field) ) {
        error_msg(loc, "numeric literal '%s' must be an integer",
*************** eval_subject_t::compare( const cbl_refer
*** 14865,14871 ****
   * Do not set initial value; that is up to PICTURE and VALUE.
   */
  static cbl_field_type_t
! field_binary_usage( YYLTYPE loc, cbl_field_t *field,
                      cbl_field_type_t type, uint32_t capacity,
                      bool signable )
  {
--- 14877,14883 ----
   * Do not set initial value; that is up to PICTURE and VALUE.
   */
  static cbl_field_type_t
! field_binary_usage( cbl_loc_t loc, cbl_field_t *field,
                      cbl_field_type_t type, uint32_t capacity,
                      bool signable )
  {
diff -Nrcpad gcc-17-20260614/gcc/cobol/parse_ante.h gcc-17-20260621/gcc/cobol/parse_ante.h
*** gcc-17-20260614/gcc/cobol/parse_ante.h	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/cobol/parse_ante.h	Sun Jun 21 22:32:06 2026
***************
*** 42,48 ****
  #pragma GCC diagnostic push
  #pragma GCC diagnostic ignored "-Wmissing-field-initializers"
  
! extern YYLTYPE yylloc;
  
  extern int yylineno, yyleng, yychar;
  extern char *yytext;
--- 42,48 ----
  #pragma GCC diagnostic push
  #pragma GCC diagnostic ignored "-Wmissing-field-initializers"
  
! extern cbl_loc_t yylloc;
  
  extern int yylineno, yyleng, yychar;
  extern char *yytext;
*************** enum data_section_t { // values reflect
*** 198,204 ****
    linkage_datasect_e,
  } current_data_section;
  
! static bool current_data_section_set( const YYLTYPE& loc, enum data_section_t );
  
  enum data_clause_t {
    picture_clause_e     = 0x0001,
--- 198,204 ----
    linkage_datasect_e,
  } current_data_section;
  
! static bool current_data_section_set( const cbl_loc_t& loc, enum data_section_t );
  
  enum data_clause_t {
    picture_clause_e     = 0x0001,
*************** static int
*** 261,267 ****
  intrinsic_token_of( const char name[] );
  
  static inline bool
! namcpy(const YYLTYPE& loc, cbl_name_t tgt, const char *src ) {
    // snprintf(3): writes at most size bytes (including the terminating NUL byte)
    auto len = snprintf(tgt, sizeof(cbl_name_t), "%s", src);
    if( ! (0 < len && len < int(sizeof(cbl_name_t))) ) {
--- 261,267 ----
  intrinsic_token_of( const char name[] );
  
  static inline bool
! namcpy(const cbl_loc_t& loc, cbl_name_t tgt, const char *src ) {
    // snprintf(3): writes at most size bytes (including the terminating NUL byte)
    auto len = snprintf(tgt, sizeof(cbl_name_t), "%s", src);
    if( ! (0 < len && len < int(sizeof(cbl_name_t))) ) {
*************** new_reference_like( const cbl_field_t& s
*** 285,293 ****
    return new cbl_refer_t( new_temporary_like(skel) );
  }
  
! static void reject_refmod( YYLTYPE loc, const cbl_refer_t& );
! static bool require_pointer( YYLTYPE loc, const cbl_refer_t& );
! static bool require_integer( YYLTYPE loc, const cbl_refer_t& );
  
  struct cbl_field_t * constant_of( size_t isym );
  
--- 285,293 ----
    return new cbl_refer_t( new_temporary_like(skel) );
  }
  
! static void reject_refmod( cbl_loc_t loc, const cbl_refer_t& );
! static bool require_pointer( cbl_loc_t loc, const cbl_refer_t& );
! static bool require_integer( cbl_loc_t loc, const cbl_refer_t& );
  
  struct cbl_field_t * constant_of( size_t isym );
  
*************** static class file_start_args_t {
*** 510,516 ****
    cbl_file_t *file;
  public:
    file_start_args_t() : file(NULL) {}
!   cbl_file_t * init( YYLTYPE loc, cbl_file_t *file ) {
      this->file = file;
      if( is_sequential(file) ) {
        error_msg(loc, "START invalid with sequential file %s", file->name);
--- 510,516 ----
    cbl_file_t *file;
  public:
    file_start_args_t() : file(NULL) {}
!   cbl_file_t * init( cbl_loc_t loc, cbl_file_t *file ) {
      this->file = file;
      if( is_sequential(file) ) {
        error_msg(loc, "START invalid with sequential file %s", file->name);
*************** struct arith_t {
*** 618,624 ****
    }
  };
  
! static cbl_refer_t * ast_op( YYLTYPE loc,
                               cbl_refer_t *lhs, char op, cbl_refer_t *rhs );
  
  static void ast_add( arith_t *arith );
--- 618,624 ----
    }
  };
  
! static cbl_refer_t * ast_op( const cbl_loc_t& loc,
                               cbl_refer_t *lhs, char op, cbl_refer_t *rhs );
  
  static void ast_add( arith_t *arith );
*************** perform_current(void) {
*** 874,882 ****
  }
  
  static inline perform_t *
!   perform_tgt_set( cbl_label_t *from, cbl_label_t *to = NULL ) {
    struct perform_t *perf = perform_current();
    perf->tgt = cbl_perform_tgt_t(from, to);
    return perf;
  }
  
--- 874,883 ----
  }
  
  static inline perform_t *
! perform_tgt_set( cbl_label_t *from, cbl_label_t *to = NULL ) {
    struct perform_t *perf = perform_current();
    perf->tgt = cbl_perform_tgt_t(from, to);
+   match_proc::statement_add();
    return perf;
  }
  
*************** struct tgt_list_t {
*** 934,945 ****
  };
  
  static struct cbl_label_t *
! label_add( const YYLTYPE& loc, enum cbl_label_type_t type, const char name[] );
  static struct cbl_label_t *
  label_add( enum cbl_label_type_t type, const char name[], int line );
  
  static struct cbl_label_t *
! paragraph_reference( const char name[], size_t section );
  
  static inline void
  list_add( list<cbl_num_result_t>& list, const cbl_refer_t& refer, int round ) {
--- 935,946 ----
  };
  
  static struct cbl_label_t *
! label_add( const cbl_loc_t& loc, enum cbl_label_type_t type, const char name[] );
  static struct cbl_label_t *
  label_add( enum cbl_label_type_t type, const char name[], int line );
  
  static struct cbl_label_t *
! paragraph_reference( const cbl_loc_t& loc, const char name[], size_t section );
  
  static inline void
  list_add( list<cbl_num_result_t>& list, const cbl_refer_t& refer, int round ) {
*************** tee_up_empty() {
*** 990,996 ****
    name_queue.allocate();
  }
  void
! tee_up_name( const YYLTYPE& loc, const char name[] ) {
    name_queue.push(loc, name);
  }
  cbl_namelist_t
--- 991,997 ----
    name_queue.allocate();
  }
  void
! tee_up_name( const cbl_loc_t& loc, const char name[] ) {
    name_queue.push(loc, name);
  }
  cbl_namelist_t
*************** struct refer_collection_t {
*** 1139,1146 ****
    }
  };
  
! void ast_inspect( YYLTYPE loc, cbl_refer_t& input, bool backward,
!                   cbl_inspect_opers_t& inspects );
  
  template <typename E>
  struct elem_list_t {
--- 1140,1148 ----
    }
  };
  
! static void
! ast_inspect( cbl_loc_t loc, cbl_refer_t& input, bool backward,
!              cbl_inspect_opers_t& inspects );
  
  template <typename E>
  struct elem_list_t {
*************** class log_expr_t {
*** 1696,1703 ****
    }
  };
  
! static void ast_enter_section( cbl_label_t * );
! static void ast_enter_paragraph( cbl_label_t * );
  
  static class current_t {
    friend cbl_options_t current_options();
--- 1698,1705 ----
    }
  };
  
! static void ast_enter_section( const cbl_loc_t& loc, cbl_label_t * );
! static void ast_enter_paragraph( const cbl_loc_t& loc, cbl_label_t * );
  
  static class current_t {
    friend cbl_options_t current_options();
*************** static class current_t {
*** 2026,2032 ****
      return __gg__encoding_iconv_name(encoding);
    }
  
!   bool new_program ( const YYLTYPE& loc, cbl_label_type_t type,
                       const char name[], const char os_name[],
                       bool common, bool initial, bool recursive,
                       bool prototype = false )
--- 2028,2034 ----
      return __gg__encoding_iconv_name(encoding);
    }
  
!   bool new_program ( const cbl_loc_t& loc, cbl_label_type_t type,
                       const char name[], const char os_name[],
                       bool common, bool initial, bool recursive,
                       bool prototype = false )
*************** static class current_t {
*** 2103,2109 ****
      return programs.empty()? NULL : programs.top().paragraph;
    }
  
!   bool is_first_statement( const YYLTYPE& loc )  {
      if( ! in_declaratives && first_statement == 0 ) {
        auto eval = programs.top().declaratives_eval;
        if( eval ) {
--- 2105,2111 ----
      return programs.empty()? NULL : programs.top().paragraph;
    }
  
!   bool is_first_statement( const cbl_loc_t& loc )  {
      if( ! in_declaratives && first_statement == 0 ) {
        auto eval = programs.top().declaratives_eval;
        if( eval ) {
*************** static class current_t {
*** 2137,2142 ****
--- 2139,2146 ----
  
      assert(!programs.empty());
  
+     match_proc::statements_verify();
+     
      const procref_t *ref = ambiguous_reference(program_index());
      std::set<std::string> externals = programs.top().external_targets();
  
*************** static class current_t {
*** 2151,2157 ****
  
      static std::unordered_set<size_t> callers_we_have_seen;
      if( programs.size() == 1 ) {
-       if( yydebug ) parser_call_targets_dump();
        for( size_t caller : symbol_program_programs() ) {
          // We are running through the entire growing list of called programs
          // at the point of each END PROGRAM.  This confuses the name changing
--- 2155,2160 ----
*************** static class current_t {
*** 2190,2196 ****
      error_clients.clear();
      exception_clients.clear();
  
!     if( ref ) {
        cbl_message(ParUnresolvedProcE,
                    "could not resolve paragraph (or section) '%s' at line %d",
                    ref->paragraph(), ref->line_number());
--- 2193,2199 ----
      error_clients.clear();
      exception_clients.clear();
  
!     if( false && ref ) {
        cbl_message(ParUnresolvedProcE,
                    "could not resolve paragraph (or section) '%s' at line %d",
                    ref->paragraph(), ref->line_number());
*************** static class current_t {
*** 2233,2239 ****
      eval_label = label_add(LblSection, eval, yylineno);
      struct cbl_label_t * lave_label = label_add(LblSection, lave, yylineno);
  
!     ast_enter_section(eval_label);
  
      declarative_runtime_match(declaratives.as_list(), lave_label);
  
--- 2236,2242 ----
      eval_label = label_add(LblSection, eval, yylineno);
      struct cbl_label_t * lave_label = label_add(LblSection, lave, yylineno);
  
!     ast_enter_section(cobol_location(), eval_label);
  
      declarative_runtime_match(declaratives.as_list(), lave_label);
  
*************** static bool is_allowed_name( size_t isym
*** 2433,2439 ****
  }
  
  static void // add self to prototype map
! prototype_add( const YYLTYPE& loc, const std::list<cbl_ffi_arg_t>& args ) {
    auto L = cbl_label_of(symbol_at(PROGRAM));
    if( is_allowed_name(PROGRAM, L) ) {
      // parser uses a list
--- 2436,2442 ----
  }
  
  static void // add self to prototype map
! prototype_add( const cbl_loc_t& loc, const std::list<cbl_ffi_arg_t>& args ) {
    auto L = cbl_label_of(symbol_at(PROGRAM));
    if( is_allowed_name(PROGRAM, L) ) {
      // parser uses a list
*************** prototype_args( const char *name, size_t
*** 2482,2488 ****
  }
  
  static void
! verify_args( const YYLTYPE& loc, 
               const char name[], size_t narg,
               const cbl_ffi_arg_t args[] );
  
--- 2485,2491 ----
  }
  
  static void
! verify_args( const cbl_loc_t& loc, 
               const char name[], size_t narg,
               const cbl_ffi_arg_t args[] );
  
*************** static relop_t relop_invert(relop_t op);
*** 2573,2579 ****
  
  static enum classify_t classify_of( int token );
  
! static void subscript_dimension_error( YYLTYPE loc, size_t, const cbl_refer_t *name );
  
  /*
   * Utility functions
--- 2576,2582 ----
  
  static enum classify_t classify_of( int token );
  
! static void subscript_dimension_error( cbl_loc_t loc, size_t, const cbl_refer_t *name );
  
  /*
   * Utility functions
*************** bool
*** 2607,2615 ****
  move_corresponding( cbl_refer_t& tgt, cbl_refer_t& src );
  
  static bool
! literal_subscripts_valid( YYLTYPE loc, const cbl_refer_t& name );
  static bool
! literal_refmod_valid( YYLTYPE loc, const cbl_refer_t& r );
  
  static bool
  is_integer_literal( const cbl_field_t *field ) {
--- 2610,2618 ----
  move_corresponding( cbl_refer_t& tgt, cbl_refer_t& src );
  
  static bool
! literal_subscripts_valid( cbl_loc_t loc, const cbl_refer_t& name );
  static bool
! literal_refmod_valid( cbl_loc_t loc, const cbl_refer_t& r );
  
  static bool
  is_integer_literal( const cbl_field_t *field ) {
*************** is_callable( const cbl_field_t *field )
*** 2712,2727 ****
  /*
   * intrinsic calls
   */
- struct cbl_fieldloc_t {
-   YYLTYPE loc;
-   cbl_field_t *field;
- 
-   cbl_fieldloc_t() : loc{ 1,1, 1,1 }, field(NULL) {}
-   cbl_fieldloc_t( const YYLTYPE& loc, cbl_field_t *field )
-     : loc(loc), field(field)
-   {}
- };
- 
  static size_t
  intrinsic_invalid_parameter( int token, const std::vector<cbl_refer_t>& args );
  
--- 2715,2720 ----
*************** intrinsic_call_0( cbl_field_t *output, i
*** 2738,2744 ****
  
  static bool
  intrinsic_call_1( cbl_field_t *output, int token,
!                   cbl_refer_t *r1, const YYLTYPE& loc ) {
    std::vector<cbl_refer_t> args { *r1 };
    if( 0 == intrinsic_invalid_parameter(token, args) ) {
      error_msg(loc, "invalid parameter '%s'", r1->field->name);
--- 2731,2737 ----
  
  static bool
  intrinsic_call_1( cbl_field_t *output, int token,
!                   cbl_refer_t *r1, const cbl_loc_t& loc ) {
    std::vector<cbl_refer_t> args { *r1 };
    if( 0 == intrinsic_invalid_parameter(token, args) ) {
      error_msg(loc, "invalid parameter '%s'", r1->field->name);
*************** field_find( cbl_loc_t loc, const std::li
*** 2878,2884 ****
  }
  
  static inline symbol_elem_t *
! symbol_find( const YYLTYPE& loc, const char *name ) {
    cbl_namelist_t names;
    if( ! name_queue.empty() ) {
      auto names = name_queue.pop_as_names();
--- 2871,2877 ----
  }
  
  static inline symbol_elem_t *
! symbol_find( const cbl_loc_t& loc, const char *name ) {
    cbl_namelist_t names;
    if( ! name_queue.empty() ) {
      auto names = name_queue.pop_as_names();
*************** register_find( const char *name ) {
*** 2900,2906 ****
  }
  
  static bool
! valid_redefine( const YYLTYPE& loc,
                  const cbl_field_t *field, const cbl_field_t *orig ) {
    // Must have same level.
    if( field->level != orig->level ) {
--- 2893,2899 ----
  }
  
  static bool
! valid_redefine( const cbl_loc_t& loc,
                  const cbl_field_t *field, const cbl_field_t *orig ) {
    // Must have same level.
    if( field->level != orig->level ) {
*************** group_attr( const cbl_field_t * field )
*** 3042,3048 ****
  }
  
  static struct cbl_field_t *
! field_add( const YYLTYPE& loc, cbl_field_t *field ) {
    switch(current_data_section) {
    case not_data_datasect_e:
    case file_datasect_e:
--- 3035,3041 ----
  }
  
  static struct cbl_field_t *
! field_add( const cbl_loc_t& loc, cbl_field_t *field ) {
    switch(current_data_section) {
    case not_data_datasect_e:
    case file_datasect_e:
*************** uniform_picture( const char *picture ) {
*** 3120,3126 ****
  
  static bool
  field_type_update( cbl_field_t *field, cbl_field_type_t type,
!                    YYLTYPE loc,
                     bool is_usage = false)
  {
    // preserve NumericEdited if already established
--- 3113,3119 ----
  
  static bool
  field_type_update( cbl_field_t *field, cbl_field_type_t type,
!                    cbl_loc_t loc,
                     bool is_usage = false)
  {
    // preserve NumericEdited if already established
*************** field_type_update( cbl_field_t *field, c
*** 3161,3167 ****
  }
  
  static bool
! field_capacity_error( const YYLTYPE& loc, const cbl_field_t *field ) {
    uint32_t parent_capacity = 0;
    if( field->parent ) {
      auto e = symbol_at(field->parent);
--- 3154,3160 ----
  }
  
  static bool
! field_capacity_error( const cbl_loc_t& loc, const cbl_field_t *field ) {
    uint32_t parent_capacity = 0;
    if( field->parent ) {
      auto e = symbol_at(field->parent);
*************** cbl_field_t::set_initial( const cbl_loc_
*** 3262,3268 ****
  #pragma GCC diagnostic ignored "-Wmissing-field-initializers"
  
  static struct cbl_field_t *
! field_alloc( const YYLTYPE& loc, cbl_field_type_t type, size_t parent, const char name[] ) {
    static const uint32_t level = 0;
    cbl_field_t *f, field = { type, 0, cbl_field_data_t(), level, name, yylineno };
    field.parent = parent;
--- 3255,3261 ----
  #pragma GCC diagnostic ignored "-Wmissing-field-initializers"
  
  static struct cbl_field_t *
! field_alloc( const cbl_loc_t& loc, cbl_field_type_t type, size_t parent, const char name[] ) {
    static const uint32_t level = 0;
    cbl_field_t *f, field = { type, 0, cbl_field_data_t(), level, name, yylineno };
    field.parent = parent;
*************** static const cbl_file_t protofile;
*** 3279,3285 ****
  #pragma GCC diagnostic push
  #pragma GCC diagnostic ignored "-Wformat-truncation"
  static cbl_file_t *
! file_add( YYLTYPE loc, cbl_file_t *file ) {
    gcc_assert(file);
    enum { level = 1 };
    struct cbl_field_t area{ FldAlphanumeric, level, yylineno },
--- 3272,3278 ----
  #pragma GCC diagnostic push
  #pragma GCC diagnostic ignored "-Wformat-truncation"
  static cbl_file_t *
! file_add( cbl_loc_t loc, cbl_file_t *file ) {
    gcc_assert(file);
    enum { level = 1 };
    struct cbl_field_t area{ FldAlphanumeric, level, yylineno },
*************** alphabet_add( const cbl_alphabet_t& alph
*** 3316,3322 ****
    return cbl_alphabet_of(e);
  }
  static cbl_alphabet_t *
! alphabet_add( const YYLTYPE& loc, cbl_encoding_t encoding ) {
    cbl_alphabet_t alphabet(loc, encoding);
    return alphabet_add(alphabet);
  }
--- 3309,3315 ----
    return cbl_alphabet_of(e);
  }
  static cbl_alphabet_t *
! alphabet_add( const cbl_loc_t& loc, cbl_encoding_t encoding ) {
    cbl_alphabet_t alphabet(loc, encoding);
    return alphabet_add(alphabet);
  }
*************** current_field(cbl_field_t * field = NULL
*** 3353,3359 ****
  }
  
  static void
! set_real_from_capacity( const YYLTYPE& loc,
  			cbl_field_t *field,
  			REAL_VALUE_TYPE *r ) {
    if( field == current_field() ) {
--- 3346,3352 ----
  }
  
  static void
! set_real_from_capacity( const cbl_loc_t& loc,
  			cbl_field_t *field,
  			REAL_VALUE_TYPE *r ) {
    if( field == current_field() ) {
*************** ast_enter_exit_section( cbl_label_t * se
*** 3527,3535 ****
  }
  
  static inline void
! ast_enter_section( cbl_label_t * section ) {
    assert(section);
!   section->lain = yylineno;
    ast_enter_exit_section( section );
  }
  
--- 3520,3528 ----
  }
  
  static inline void
! ast_enter_section( const cbl_loc_t& loc, cbl_label_t * section ) {
    assert(section);
!   section->lain = loc.first_line;
    ast_enter_exit_section( section );
  }
  
*************** ast_exit_section() {
*** 3539,3546 ****
  }
  
  static void
! ast_enter_paragraph( cbl_label_t * para ) {
!   para->lain = yylineno;
    cbl_label_t *prior  = current.new_paragraph(para);
    if( prior ) {
      parser_leave_paragraph(prior);
--- 3532,3539 ----
  }
  
  static void
! ast_enter_paragraph( const cbl_loc_t& loc, cbl_label_t * para ) {
!   para->lain = loc.first_line;;
    cbl_label_t *prior  = current.new_paragraph(para);
    if( prior ) {
      parser_leave_paragraph(prior);
*************** anybody_redefines( const cbl_field_t *tr
*** 3609,3615 ****
    }
  
  static bool
! procedure_division_ready( YYLTYPE loc, cbl_field_t *returning, ffi_args_t *ffi_args ) {
    auto prog = cbl_label_of(symbols_begin(current.program_index()));
  
    if( prog->type == LblFunction ) {
--- 3602,3608 ----
    }
  
  static bool
! procedure_division_ready( const cbl_loc_t& loc, cbl_field_t *returning, ffi_args_t *ffi_args ) {
    auto prog = cbl_label_of(symbols_begin(current.program_index()));
  
    if( prog->type == LblFunction ) {
*************** procedure_division_ready( YYLTYPE loc, c
*** 3753,3764 ****
    parser_label_goto(tini_label);
  
    // And here we create the initialization section:
!   ast_enter_section(init_label);  // _INITIALIZE_PROGRAM section.
  
    parser_init_list();
  
    // Lay down an implicit section to end the init_label
!   ast_enter_section(implicit_section());
  
    // This is the end of the island
    parser_label_label(tini_label);
--- 3746,3757 ----
    parser_label_goto(tini_label);
  
    // And here we create the initialization section:
!   ast_enter_section(loc, init_label);  // _INITIALIZE_PROGRAM section.
  
    parser_init_list();
  
    // Lay down an implicit section to end the init_label
!   ast_enter_section(loc, implicit_section());
  
    // This is the end of the island
    parser_label_label(tini_label);
*************** static size_t file_section_fd;
*** 3774,3780 ****
  static size_t current_sort_file;
  
  static size_t
! file_section_fd_set( file_entry_type_t type, char name[], const YYLTYPE& loc ) {
    static std::set<size_t> has_fd;
  
    // File must have been uniquely created by SELECT.
--- 3767,3773 ----
  static size_t current_sort_file;
  
  static size_t
! file_section_fd_set( file_entry_type_t type, char name[], const cbl_loc_t& loc ) {
    static std::set<size_t> has_fd;
  
    // File must have been uniquely created by SELECT.
*************** file_section_parent_set( cbl_field_t *fi
*** 3829,3840 ****
    return file_section_fd > 0;
  }
  
! void ast_call(const YYLTYPE& loc, cbl_refer_t name,
!                   const cbl_refer_t& returning,
!                   size_t narg, cbl_ffi_arg_t args[],
!                   cbl_label_t *except,
!                   cbl_label_t *not_except,
!                   bool is_function );
  
  cbl_field_t *
  ast_file_status_between( file_status_t lower, file_status_t upper );
--- 3822,3834 ----
    return file_section_fd > 0;
  }
  
! static void
! ast_call(const cbl_loc_t& loc, cbl_refer_t name,
!          const cbl_refer_t& returning,
!          size_t narg, cbl_ffi_arg_t args[],
!          cbl_label_t *except,
!          cbl_label_t *not_except,
!          bool is_function );
  
  cbl_field_t *
  ast_file_status_between( file_status_t lower, file_status_t upper );
*************** void internal_ebcdic_lock();
*** 3843,3861 ****
  void internal_ebcdic_unlock();
  
  static cbl_field_type_t
! field_binary_usage( YYLTYPE loc, cbl_field_t *field,
                      cbl_field_type_t type, uint32_t capacity,
                      bool signable ); 
  
  void
  ast_end_program(const char name[]  ) {
    std::for_each( symbols_begin(), symbols_end(),
                   []( const auto& elem ) {
                     if( elem.type == SymLabel ) {
                       auto& L( *cbl_label_of(&elem) );
                       if( L.used )  {
                         if( ! L.lain ) {
!                          YYLTYPE loc { L.line, 1, L.line, 1 };
                           error_msg(loc, "line %d: %s "
                                     "is used on line %d and never defined",
                                     L.line, L.name, L.used );
--- 3837,3856 ----
  void internal_ebcdic_unlock();
  
  static cbl_field_type_t
! field_binary_usage( cbl_loc_t loc, cbl_field_t *field,
                      cbl_field_type_t type, uint32_t capacity,
                      bool signable ); 
  
  void
  ast_end_program(const char name[]  ) {
+   dbgmsg("%s:%d: program labels:", __func__, __LINE__);
    std::for_each( symbols_begin(), symbols_end(),
                   []( const auto& elem ) {
                     if( elem.type == SymLabel ) {
                       auto& L( *cbl_label_of(&elem) );
                       if( L.used )  {
                         if( ! L.lain ) {
!                          cbl_loc_t loc { L.line, 1, L.line, 1 };
                           error_msg(loc, "line %d: %s "
                                     "is used on line %d and never defined",
                                     L.line, L.name, L.used );
*************** goodnight_gracie() {
*** 3897,3919 ****
  
  // false after USE statement, to enter Declarative with EC intact.
  static bool statement_cleanup = true;
! static YYLTYPE current_location;
  
  static void statement_epilog( int token );
  
  const char * keyword_str( int token );
  
! const YYLTYPE& cobol_location() { return current_location; }
  
  static inline void
! location_set( const YYLTYPE& loc ) {
    current_location = loc;
    gcc_location_set(loc);
  }
  
! static void statement_begin( const YYLTYPE& loc, int token );
  
! static void ast_first_statement( const YYLTYPE& loc ) {
    if( current.is_first_statement( loc ) ) {
      parser_first_statement(loc.first_line);
    }
--- 3892,3914 ----
  
  // false after USE statement, to enter Declarative with EC intact.
  static bool statement_cleanup = true;
! static cbl_loc_t current_location;
  
  static void statement_epilog( int token );
  
  const char * keyword_str( int token );
  
! const cbl_loc_t& cobol_location() { return current_location; }
  
  static inline void
! location_set( const cbl_loc_t& loc ) {
    current_location = loc;
    gcc_location_set(loc);
  }
  
! static void statement_begin( const cbl_loc_t& loc, int token );
  
! static void ast_first_statement( const cbl_loc_t& loc ) {
    if( current.is_first_statement( loc ) ) {
      parser_first_statement(loc.first_line);
    }
diff -Nrcpad gcc-17-20260614/gcc/cobol/scan.l gcc-17-20260621/gcc/cobol/scan.l
*** gcc-17-20260614/gcc/cobol/scan.l	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/cobol/scan.l	Sun Jun 21 22:32:06 2026
*************** LINE_DIRECTIVE ^[#]line{SPC}[[:alnum:]]+
*** 210,216 ****
    [''""]/[01]
    [01]+/[''""]		{ if( copy_state == YY_START ) {
  			    ydflval.boolean = ((*yytext == 1) ^ is_not);
! 			    return YDF_BOOL;
  			  }
  			  yylval.numstr.radix = boolean_e;
  			  yylval.numstr.string = xstrdup(yytext);
--- 210,216 ----
    [''""]/[01]
    [01]+/[''""]		{ if( copy_state == YY_START ) {
  			    ydflval.boolean = ((*yytext == 1) ^ is_not);
! 			    return cdf::parser::token::YDF_BOOL;
  			  }
  			  yylval.numstr.radix = boolean_e;
  			  yylval.numstr.string = xstrdup(yytext);
*************** LINE_DIRECTIVE ^[#]line{SPC}[[:alnum:]]+
*** 230,236 ****
    [''""]/{hdseq}
    {hdseq}/[''""]	{ if( copy_state == YY_START ) {
  			    ydflval.number = integer_of(yytext, true);
! 			    return YDF_NUMBER;
  			  }
  			  if( 0 == yyleng % 2 ) {
                              yylval.literal.set_data( yyleng/2, hex_decode(yytext) );
--- 230,236 ----
    [''""]/{hdseq}
    {hdseq}/[''""]	{ if( copy_state == YY_START ) {
  			    ydflval.number = integer_of(yytext, true);
! 			    return cdf::parser::token::YDF_NUMBER;
  			  }
  			  if( 0 == yyleng % 2 ) {
                              yylval.literal.set_data( yyleng/2, hex_decode(yytext) );
*************** USE({SPC}FOR)?		{ return USE; }
*** 1431,1437 ****
    [+-]?{INTEGERZ}       { int value;
  			  if( is_integer_token(&value) ) {
  			    ydflval.number = value;
! 			    return YDF_NUMBER;
  			  }
  			  dbgmsg("%s not an integer = %d",
  				   yytext, value);
--- 1431,1437 ----
    [+-]?{INTEGERZ}       { int value;
  			  if( is_integer_token(&value) ) {
  			    ydflval.number = value;
! 			    return cdf::parser::token::YDF_NUMBER;
  			  }
  			  dbgmsg("%s not an integer = %d",
  				   yytext, value);
diff -Nrcpad gcc-17-20260614/gcc/cobol/scan_ante.h gcc-17-20260621/gcc/cobol/scan_ante.h
*** gcc-17-20260614/gcc/cobol/scan_ante.h	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/cobol/scan_ante.h	Sun Jun 21 22:32:06 2026
*************** int repeat_count( const char picture[] )
*** 64,70 ****
  
  size_t program_level();
  
! int ydfparse(void);
  
  FILE * copy_mode_start();
  
--- 64,70 ----
  
  size_t program_level();
  
! static int ydfparse(void);
  
  FILE * copy_mode_start();
  
*************** static const char * start_condition_is()
*** 118,123 ****
--- 118,130 ----
  
  static bool nonspace( char ch ) { return !ISSPACE(ch); }
  
+ cdf::parser cdf_parser;
+ cdf::parser::symbol_type cdf_symbol_type;
+ cdf::parser::context cdf_context(cdf_parser, cdf_symbol_type);
+ 
+ cdf::parser::value_type ydflval;
+ cdf::parser::location_type ydflloc;
+ 
  static int
  numstr_of( const char string[], radix_t radix = decimal_e ) {
    yylval.numstr.is_float = false;
*************** null_trim( char name[] ) {
*** 206,213 ****
  /*
   * CDF management
   */
- static int final_token;
- 
  static inline const char *
  boolalpha( bool tf ) { return tf? "True" : "False"; }
  
--- 213,218 ----
*************** static input_file_status_t input_file_st
*** 439,470 ****
  void input_file_status_notify() { input_file_status.notify(); }
  
  /*
-  * parse.y and cdf.y each define a 4-integer struct to hold a token's location. 
-  * parse.y uses   YYLTYPE  yylloc;
-  * cdf.y   uses YDFLLTYPE ydflloc;
-  * 
-  * The structs have identical definitions with different types and of course
-  * names.  We define "conversion" between them for convenience. 
-  * 
-  * Each parser expects its location value to be updated whenever it calls
-  * yylex().  Therefore, here in the lexer we set both locations as each token
-  * is scanned, so that both parsers see the same location.
-  */
- static YDFLTYPE
- ydfltype_of( const YYLTYPE& loc ) {
-   YDFLTYPE output { 
-     loc.first_line,   loc.first_column,
-     loc.last_line,    loc.last_column };
-   return output;
- }
- 
- /*
   * After the input filename and yylineno are set, update the location of the
   * scanned token.
   */
  static void
! update_location( const YYLTYPE *ploc = nullptr ) {
!   YYLTYPE loc = {
      yylloc.last_line, yylloc.last_column,
      yylineno,         yylloc.last_column + yyleng
    };
--- 444,455 ----
  void input_file_status_notify() { input_file_status.notify(); }
  
  /*
   * After the input filename and yylineno are set, update the location of the
   * scanned token.
   */
  static void
! update_location( const cbl_loc_t *ploc = nullptr ) {
!   cbl_loc_t loc = {
      yylloc.last_line, yylloc.last_column,
      yylineno,         yylloc.last_column + yyleng
    };
*************** update_location( const YYLTYPE *ploc = n
*** 475,482 ****
      loc.last_column = (yytext + yyleng) - p;
    }
  
!   yylloc = loc;
!   ydflloc = ydfltype_of(yylloc);
  
    dbgmsg("  SC: %s location (%d,%d) to (%d,%d)",
           start_condition_is(),
--- 460,466 ----
      loc.last_column = (yytext + yyleng) - p;
    }
  
!   ydflloc = yylloc = loc;
  
    dbgmsg("  SC: %s location (%d,%d) to (%d,%d)",
           start_condition_is(),
*************** update_location( const YYLTYPE *ploc = n
*** 486,492 ****
  
  static void
  reset_location() {
!   static const YYLTYPE loc { yylineno, 1, yylineno, 1 };
    update_location(&loc);
  }
  
--- 470,476 ----
  
  static void
  reset_location() {
!   static const cbl_loc_t loc { yylineno, 1, yylineno, 1 };
    update_location(&loc);
  }
  
*************** update_location_col( const char str[], i
*** 536,544 ****
  #define not_implemented(...) cbl_unimplemented_at(yylloc, __VA_ARGS__)
  
  #define YY_USER_INIT do {			\
!     static YYLTYPE ones = {1,1, 1,1};		\
!     yylloc = ones;                              \
!     ydflloc = ydfltype_of(yylloc);              \
    } while(0)
  
  /*
--- 520,527 ----
  #define not_implemented(...) cbl_unimplemented_at(yylloc, __VA_ARGS__)
  
  #define YY_USER_INIT do {			\
!     static cbl_loc_t ones = {1,1, 1,1};		\
!     ydflloc = yylloc = ones;                    \
    } while(0)
  
  /*
*************** class picture_t {
*** 808,814 ****
        : crdb(0), currency(0), dot(0), pluses(0), minuses(0), stars(0)
      {}
    } exclusions;
!   YYLTYPE loc;
    
    bool is_crdb() const { // input must be uppercase for CR/DB
      if( p[0] == 'C' || p[0] == 'D' ) {
--- 791,797 ----
        : crdb(0), currency(0), dot(0), pluses(0), minuses(0), stars(0)
      {}
    } exclusions;
!   cbl_loc_t loc;
    
    bool is_crdb() const { // input must be uppercase for CR/DB
      if( p[0] == 'C' || p[0] == 'D' ) {
*************** class picture_t {
*** 856,862 ****
      if( !ch ) ch = *p;   // use current character unless overridden
      auto valid = followers.find(TOUPPER(ch));
      if( valid == followers.end() ) {
!       YYLTYPE loc(yylloc);
        loc.first_column += int(p - begin);
        error_msg( loc, "PICTURE: strange character %qc, giving up", ch );
        return nullptr;
--- 839,845 ----
      if( !ch ) ch = *p;   // use current character unless overridden
      auto valid = followers.find(TOUPPER(ch));
      if( valid == followers.end() ) {
!       cbl_loc_t loc(yylloc);
        loc.first_column += int(p - begin);
        error_msg( loc, "PICTURE: strange character %qc, giving up", ch );
        return nullptr;
diff -Nrcpad gcc-17-20260614/gcc/cobol/scan_post.h gcc-17-20260621/gcc/cobol/scan_post.h
*** gcc-17-20260614/gcc/cobol/scan_post.h	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/cobol/scan_post.h	Sun Jun 21 22:32:06 2026
*************** valid_conditional_context( int token ) {
*** 202,207 ****
--- 202,221 ----
    return true; // all other CDF tokens valid regardless of context
  }
  
+ static int ydfparse() {
+   return cdf_parser.parse();
+ }
+ 
+ static inline int ydfchar() {
+   auto kind_type = cdf_context.lookahead().kind();
+   return kind_type;
+ }
+ 
+ void
+ ydfdebug( bool yn ) {
+   cdf_parser.set_debug_level(yn? 1 : 0);
+ }
+ 
  static bool
  run_cdf( int token ) {
    if( ! valid_conditional_context(token) ) {
*************** run_cdf( int token ) {
*** 211,217 ****
  
    parsing.inject_token(token); // because it will be needed by CDF parser
  
!   if( yy_flex_debug ) dbgmsg("CDF parser start with '%s'", keyword_str(token));
  
    parsing.parser_save(ydfparse);
  
--- 225,232 ----
  
    parsing.inject_token(token); // because it will be needed by CDF parser
  
!   if( yy_flex_debug )
!     dbgmsg("%s: CDF parser start with '%s'", __func__, keyword_str(token));
  
    parsing.parser_save(ydfparse);
  
*************** run_cdf( int token ) {
*** 222,249 ****
    if( YY_START == cdf_state ) yy_pop_state();
  
    if( yy_flex_debug ) {
!     dbgmsg("CDF parser returned %d, scanner SC <%s>", erc, start_condition_is());
    }
  
    return  0 == erc;
  }
  
  #include <queue>
! struct pending_token_t {
    int token;
    YYSTYPE value;
!   pending_token_t( int token, YYSTYPE value ) : token(token), value(value) {}
  };
! #define PENDING(T) pending_token_t( (T), yylval )
  
! static std::queue<pending_token_t> pending_tokens;
  
! int next_token() {
    int token = lexer();
    return token;
  }
  
- extern int ydfchar;
  bool in_procedure_division(void);
  
  // act on CDF tokens
--- 237,327 ----
    if( YY_START == cdf_state ) yy_pop_state();
  
    if( yy_flex_debug ) {
!     dbgmsg("%s: CDF parser returned %d, scanner SC <%s>", __func__, 
!            erc, start_condition_is());
    }
  
    return  0 == erc;
  }
  
  #include <queue>
! struct recent_token_t {
    int token;
    YYSTYPE value;
!   cbl_loc_t loc;
!   recent_token_t( int token, YYSTYPE value, cbl_loc_t loc )
!     : token(token), value(value), loc(loc) {}
  };
! #define RECENT(T) recent_token_t( (T), yylval )
  
! namespace cdf {
!   int used_token();
! }
  
! /*
!  * Each time the generated scanner returns a token from lexer(), it's pushed on
!  * the recent_tokens queue.  The queue is 2 deep, representing the CDF parser's
!  * current and lookahead tokens. 
!  */
! static struct recent_tokens_t : protected std::queue<recent_token_t>
! {
!   const recent_token_t& operator<<(int token) {
!     while( 1 < size() ) pop();
!     push( recent_token_t(token, yylval, yylloc) );
!     return front();
!   }
! 
!   bool eof() const {
!     return size() == 1 && front().token == YYEOF;
!   }
!   
!   int next() {
!     int end_token = cdf::used_token();
!     
!     switch( size() ) {
!     default: gcc_unreachable();
!     case 0:
!       dbgmsg("%s:%d: 0 recent tokens []",  __func__, __LINE__);
!       break;
!     case 1: 
!       dbgmsg("%s:%d: 1 recent token  [%s]",  __func__, __LINE__,
!              keyword_str(back().token));
!       break;
!     case 2:
!       dbgmsg("%s:%d: 2 recent tokens  [%s, %s]", __func__, __LINE__,
!              keyword_str(front().token),
!              keyword_str(back().token));
!       break;
!     }      
! 
!     /*
!      * Clear any used tokens.  Return the unused token, if extant, which was
!      * the lookahead token.  Because it was the last one returned by lexer(),
!      * the location is accurate.  Else return the next token.
!      */
!     if( ! empty() && front().token == end_token ) pop();
!     if( ! empty() && back().token == end_token ) c.clear();
! 
!     end_token = 0;
! 
!     if( ! empty() ) {
!       end_token = front().token;
!       if( ! eof() ) {
!         pop();
!         assert(empty());
!       }
!     }
! 
!     return end_token;
!   }
! } recent_tokens;
! 
! static int next_token() {
    int token = lexer();
+   recent_tokens << token;
    return token;
  }
  
  bool in_procedure_division(void);
  
  // act on CDF tokens
*************** prelex() {
*** 262,274 ****
    while( is_cdf_token(token) ) {
  
      if( ! run_cdf(token) ) {
!       dbgmsg( ">>CDF parser failed, ydfchar %d", ydfchar );
      }
!     // Return the CDF's discarded lookahead token, if extant.
!     token = ydfchar > 0? ydfchar : next_token();
      if( token == NO_CONDITION && parsing.at_eof() ) {
        return YYEOF;
      }
  
      // Reenter cdf parser only if next token could affect parsing state.
      if( ! parsing.on() && ! is_cdf_condition_token(token) ) break;
--- 340,362 ----
    while( is_cdf_token(token) ) {
  
      if( ! run_cdf(token) ) {
!       dbgmsg( ">>CDF parser failed, ydfchar %d", ydfchar() );
      }
!     
!     token = recent_tokens.next();
!     
!     if( recent_tokens.eof() ) {
!       dbgmsg("lexer() returned EOF (%d)", token);
!       return YYEOF;
!     }
! 
!     if( token == 0 ) token = next_token();
!  
      if( token == NO_CONDITION && parsing.at_eof() ) {
+       dbgmsg("scanner at EOF, apparently (%d)", token);
        return YYEOF;
      }
+     dbgmsg("next token  %s", keyword_str(token));
  
      // Reenter cdf parser only if next token could affect parsing state.
      if( ! parsing.on() && ! is_cdf_condition_token(token) ) break;
*************** prelex() {
*** 298,304 ****
        yylval.number = level_of(yylval.numstr.string);
        token = LEVEL;
        break;
!     case YDF_NUMBER:
        dbgmsg("final token is YDF_NUMBER");
        yylval.number = ydflval.number;
        token = LEVEL;
--- 386,392 ----
        yylval.number = level_of(yylval.numstr.string);
        token = LEVEL;
        break;
!     case cdf::parser::token::YDF_NUMBER:
        dbgmsg("final token is YDF_NUMBER");
        yylval.number = ydflval.number;
        token = LEVEL;
*************** prelex() {
*** 319,328 ****
      }
    }
  
!   dbgmsg( ">>CDF parser done, %s returning "
!           "%s (because final_token %s, lookhead %d) on line %d", __func__,
!           keyword_str(token), keyword_str(final_token),
!           ydfchar, yylineno );
    in_cdf = false;
    return token;
  }
--- 407,415 ----
      }
    }
  
!   dbgmsg( ">>CDF parser done, %s returning %s, conditional compilation %s", __func__,
!           keyword_str(token), 
!           parsing.on()? "TRUE" : "FALSE" );
    in_cdf = false;
    return token;
  }
*************** prelex() {
*** 333,352 ****
   *             prelex calls lexer, the scanner produced by flex.
   *                          lexer reads input from yyin via lexer_input.
   *
!  * prelex intercepts CDF statements, each of which it parses with ydfparse.
!  * ydfparse affects CDF variables, which may affect how yylex treats
   * the input stream.
   *
   * Because the lexer is called recursively:
   *
!  *   yyparse -> yylex -> ydfparse -> yylex
   *
!  * the global state of the scanner has changed when ydfparse returns.  Part of
!  * that state is the unused lookahead token that ydfparse discarded, stored in
!  * final_token.  prelex then returns final_token as its own, which is duly
!  * returned to yyparse.
   */
- 
  int
  yylex(void) {
    static bool produce_next_sentence_target = false;
--- 420,464 ----
   *             prelex calls lexer, the scanner produced by flex.
   *                          lexer reads input from yyin via lexer_input.
   *
!  * prelex intercepts CDF statements, each of which it parses with cdf::parser::parse.
!  * cdf::parser::parse affects CDF variables, which may affect how yylex treats
   * the input stream.
   *
   * Because the lexer is called recursively:
   *
!  *   yyparse -> yylex -> cdf::parser::parse -> yylex
   *
!  * the global state of the scanner has to be managed, both before and after the
!  * CDF parser runs.
!  *
!  * Before invoking the CDF parser, run_cdf() stashes the CDF token with
!  * inject_token().  When the CDF parser turns around and calls yylex, the first
!  * token returned is that stashed one, because it is the reason the CDF parser
!  * was invoked.
!  *
!  * While the CDF parser is active, the scanner saves each token returned by
!  * lexer() in the recent_tokens queue.  As the CDF parser uses a token, it
!  * records it such that it can be fetched with used_token().  A token fetched
!  * and *not* used was a lookahead token, and will be directed to the main
!  * parser.
!  *
!  * When the CDF parser returns, recent_tokens.next() compares the last two
!  * tokens fetched with the last one one used.  If there's a recent token in the
!  * queue after the last one used, that's a lookahead token.  It is returned to
!  * the main parser, which started the whole thing by calling yylex().
!  *
!  * It's not really necessary to keep the last two tokens for the post-parsing
!  * logic to work.  It's enough to compare the last fetched token with the last
!  * used token.
!  *
!  * It *is* really necessary to for the CDF parser to record the tokens it
!  * actually uses, at least as things stand.  The Bison C++ parser (which the
!  * CDF parser uses) records any token values that it doesn't define as -2,
!  * "invalid token".  If the lookahead token is, say, MOVE, it cannot be
!  * retrieved from the CDF parser.  That's why it's kept in the recent_tokens
!  * queue, where it's preceded by the last valid, used token, as recorded by the
!  * CDF parser.
   */
  int
  yylex(void) {
    static bool produce_next_sentence_target = false;
*************** yylex(void) {
*** 390,399 ****
      produce_next_sentence_target = true;
    }
  
-   if( parsing.normal() ) {
-     final_token = token;
-   }
- 
    if( token == YYEOF && parsing.in_cdf() ) {
      if( yy_flex_debug) dbgmsg("deflecting EOF");
      parsing.at_eof(true);
--- 502,507 ----
*************** yylex(void) {
*** 404,409 ****
--- 512,536 ----
  }
  
  /*
+  * The CDF parser is a C++ parser.  It passes pointers to the semantic value
+  * and location as parameters to the lexer.  The generated lexer OTOH does not
+  * accept those parameters; rather it works with global variables in the
+  * old-fashioned C-style.
+  *
+  * Below we define the function the CDF parser calls to acquire a token.  It
+  * calls the lexer, which writes to its global variables, copies that output to
+  * the passed parameters, and returns the token.
+  */
+ namespace cdf {
+   int cdflex( parser::value_type *value, cbl_loc_t *loc ) {
+     int tok = ::yylex();
+     *value = ydflval;
+     *loc = yylloc;
+     return tok;
+   }
+ }
+ 
+ /*
   * Token name<->string utilities
   */
  
diff -Nrcpad gcc-17-20260614/gcc/cobol/symbols.cc gcc-17-20260621/gcc/cobol/symbols.cc
*** gcc-17-20260614/gcc/cobol/symbols.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/cobol/symbols.cc	Sun Jun 21 22:32:06 2026
*************** public:
*** 74,86 ****
    }
  };
  
! static std::map<size_t, YYLTYPE> field_locs;
  
  void
! symbol_field_location( size_t ifield, const YYLTYPE& loc ) {
    field_locs[ifield] = loc;
  }
! YYLTYPE
  symbol_field_location( size_t ifield ) {
    auto p = field_locs.find(ifield);
    gcc_assert(p != field_locs.end());
--- 74,86 ----
    }
  };
  
! static std::map<size_t, cbl_loc_t> field_locs;
  
  void
! symbol_field_location( size_t ifield, const cbl_loc_t& loc ) {
    field_locs[ifield] = loc;
  }
! cbl_loc_t
  symbol_field_location( size_t ifield ) {
    auto p = field_locs.find(ifield);
    gcc_assert(p != field_locs.end());
*************** symbol_locale( size_t program, const cha
*** 730,736 ****
  struct symbol_elem_t *
  symbol_alphabet( size_t program, const char name[] )
  {
!   cbl_alphabet_t alphabet(YYLTYPE(), custom_encoding_e); // cppcheck-suppress syntaxError
    assert(strlen(name) < sizeof alphabet.name);
    strcpy(alphabet.name, name);
  
--- 730,736 ----
  struct symbol_elem_t *
  symbol_alphabet( size_t program, const char name[] )
  {
!   cbl_alphabet_t alphabet(cbl_loc_t(), custom_encoding_e); // cppcheck-suppress syntaxError
    assert(strlen(name) < sizeof alphabet.name);
    strcpy(alphabet.name, name);
  
*************** cbl_locale_t::cbl_locale_t( const cbl_na
*** 3411,3417 ****
    }
  }
  
! cbl_alphabet_t::cbl_alphabet_t(const YYLTYPE& loc, size_t locale, cbl_name_t name )
    : loc(loc)
    , locale(locale)
    , low_index(0)
--- 3411,3419 ----
    }
  }
  
! cbl_alphabet_t::cbl_alphabet_t(const cbl_loc_t& loc,
!                                size_t locale,
!                                cbl_name_t name ) // cppcheck-suppress constParameter
    : loc(loc)
    , locale(locale)
    , low_index(0)
*************** cbl_alphabet_t::reencode( const cbl_loc_
*** 3528,3534 ****
  }
  
  bool
! cbl_alphabet_t::assign( const YYLTYPE& loc, unsigned char ch, unsigned char high_value ) {
    if( collation_sequence[ch] == 0xFF || collation_sequence[ch] == high_value) {
      collation_sequence[ch] = high_value;
      last_index = ch;
--- 3530,3536 ----
  }
  
  bool
! cbl_alphabet_t::assign( const cbl_loc_t& loc, unsigned char ch, unsigned char high_value ) {
    if( collation_sequence[ch] == 0xFF || collation_sequence[ch] == high_value) {
      collation_sequence[ch] = high_value;
      last_index = ch;
*************** cbl_alphabet_t::assign( const YYLTYPE& l
*** 3545,3551 ****
  }
  
  void
! cbl_alphabet_t::also( const YYLTYPE& loc, size_t ch ) {
    if( ch < 256 ) {
      collation_sequence[ch] = collation_sequence[last_index];
      if( ch == high_index ) high_index--;
--- 3547,3553 ----
  }
  
  void
! cbl_alphabet_t::also( const cbl_loc_t& loc, size_t ch ) {
    if( ch < 256 ) {
      collation_sequence[ch] = collation_sequence[last_index];
      if( ch == high_index ) high_index--;
*************** symbol_temporary_location( const cbl_fie
*** 3770,3776 ****
  
  cbl_loc_t
  symbol_temporary_location( const cbl_field_t *field ) {
!   extern YYLTYPE yylloc;
    auto p = temporaries.locs.find(field);
    return p == temporaries.locs.end()? cbl_loc_t(yylloc) : p->second;
  }
--- 3772,3778 ----
  
  cbl_loc_t
  symbol_temporary_location( const cbl_field_t *field ) {
!   extern cbl_loc_t yylloc;
    auto p = temporaries.locs.find(field);
    return p == temporaries.locs.end()? cbl_loc_t(yylloc) : p->second;
  }
*************** cbl_field_t::encode( size_t srclen, cbl_
*** 4209,4218 ****
      return data.original();
      }
  
!   extern YYLTYPE yylloc;
    const char *bad_boy = data.original();
    if( 0 == loc.first_line )
!     loc = level == 0 ? yylloc : symbol_field_location(field_index(this));
  
    /*
     * Hex-encoded means we don't convert.  data.initial should be long enough to
--- 4211,4221 ----
      return data.original();
      }
  
!   extern cbl_loc_t yylloc;
!   
    const char *bad_boy = data.original();
    if( 0 == loc.first_line )
!     loc = level == 0 ? cbl_loc_t(yylloc) : symbol_field_location(field_index(this));
  
    /*
     * Hex-encoded means we don't convert.  data.initial should be long enough to
*************** cbl_field_t::encode( size_t srclen, cbl_
*** 4319,4325 ****
      // else try again
    }
    if( 0 == loc.first_line )
!     loc = level == 0 ? yylloc : symbol_field_location(field_index(this));
    error_msg( loc, "%<%c%> of %qs could not be converted from %s to %s: %s",
               *bad_boy, data.original(),
               cbl_encoding_str(
--- 4322,4328 ----
      // else try again
    }
    if( 0 == loc.first_line )
!     loc = level == 0 ? cbl_loc_t(yylloc) : symbol_field_location(field_index(this));
    error_msg( loc, "%<%c%> of %qs could not be converted from %s to %s: %s",
               *bad_boy, data.original(),
               cbl_encoding_str(
diff -Nrcpad gcc-17-20260614/gcc/cobol/symbols.h gcc-17-20260621/gcc/cobol/symbols.h
*** gcc-17-20260614/gcc/cobol/symbols.h	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/cobol/symbols.h	Sun Jun 21 22:32:06 2026
*************** bool cbl_diagnostic_kind( cbl_diag_id_t
*** 95,108 ****
  bool cbl_dialect_kind( cbl_dialect_t dialect, diagnostics::kind kind );
  #endif
  
- enum cbl_gcobol_feature_t {
-   feature_gcc_e = 0x00,
-   feature_internal_ebcdic_e = 0x01,
-   feature_embiggen_e        = 0x02, // widen numeric that redefine POINTER
- };
- 
  extern size_t cbl_gcobol_features;
- bool cobol_gcobol_feature_set( cbl_gcobol_feature_t gcobol_feature, bool on = true );
  
  static inline bool gcobol_feature_internal_ebcdic() {
    return feature_internal_ebcdic_e ==
--- 95,101 ----
*************** struct cbl_field_t {
*** 926,932 ****
      return *this;
    }
  
!   bool report_invalid_initial_value(const YYLTYPE& loc) const;
  
    bool is_ascii() const;
    bool is_integer() const { return is_numeric(type) && data.rdigits == 0; }
--- 919,925 ----
      return *this;
    }
  
!   bool report_invalid_initial_value(const cbl_loc_t& loc) const;
  
    bool is_ascii() const;
    bool is_integer() const { return is_numeric(type) && data.rdigits == 0; }
*************** struct cbl_field_t {
*** 976,983 ****
    void set_initial( size_t nchar, const cbl_loc_t& loc = cbl_loc_t() );
    size_t source_code_check(const void *initial, size_t length);
    const char * encode( size_t, cbl_loc_t loc = cbl_loc_t());
!   void encode_numeric( const char input[], cbl_loc_t loc,
!                        const REAL_VALUE_TYPE& rvt = {});
    const char *value_str() const;
  
    bool is_key_name() const { return has_attr(record_key_e); }
--- 969,975 ----
    void set_initial( size_t nchar, const cbl_loc_t& loc = cbl_loc_t() );
    size_t source_code_check(const void *initial, size_t length);
    const char * encode( size_t, cbl_loc_t loc = cbl_loc_t());
!   void encode_numeric( const char input[], cbl_loc_t loc );
    const char *value_str() const;
  
    bool is_key_name() const { return has_attr(record_key_e); }
*************** struct cbl_span_t {
*** 1025,1031 ****
  
  
  struct cbl_refer_t {
!   YYLTYPE loc;
    cbl_field_t *field;
    cbl_label_t *prog_func;
    bool all, addr_of;
--- 1017,1023 ----
  
  
  struct cbl_refer_t {
!   cbl_loc_t loc;
    cbl_field_t *field;
    cbl_label_t *prog_func;
    bool all, addr_of;
*************** struct cbl_refer_t {
*** 1043,1049 ****
      , all(all), addr_of(false)
      , refmod(NULL)
    {}
!   cbl_refer_t( const YYLTYPE& loc, cbl_field_t *field, bool all = false )
      : loc(loc), field(field), prog_func(NULL)
      , all(all), addr_of(false)
      , refmod(NULL)
--- 1035,1041 ----
      , all(all), addr_of(false)
      , refmod(NULL)
    {}
!   cbl_refer_t( const cbl_loc_t& loc, cbl_field_t *field, bool all = false )
      : loc(loc), field(field), prog_func(NULL)
      , all(all), addr_of(false)
      , refmod(NULL)
*************** char * hex_decode( const char text[] );
*** 1894,1900 ****
   * If the encoding is EBCDIC CP1140, then 'A' is 193 and collation_sequence[193] == 1.
   */
  struct cbl_alphabet_t {
!   YYLTYPE loc;
    cbl_name_t name;
    cbl_encoding_t encoding;
    size_t locale;  // index to cbl_locale_t symbol
--- 1886,1892 ----
   * If the encoding is EBCDIC CP1140, then 'A' is 193 and collation_sequence[193] == 1.
   */
  struct cbl_alphabet_t {
!   cbl_loc_t loc;
    cbl_name_t name;
    cbl_encoding_t encoding;
    size_t locale;  // index to cbl_locale_t symbol
*************** struct cbl_alphabet_t {
*** 1915,1921 ****
      memset(collation_sequence, 0xFF, sizeof(collation_sequence));
    }
  
!   cbl_alphabet_t(const YYLTYPE& loc, cbl_encoding_t enc)
      : loc(loc)
      , encoding(enc)
      , locale(0)
--- 1907,1913 ----
      memset(collation_sequence, 0xFF, sizeof(collation_sequence));
    }
  
!   cbl_alphabet_t(const cbl_loc_t& loc, cbl_encoding_t enc)
      : loc(loc)
      , encoding(enc)
      , locale(0)
*************** struct cbl_alphabet_t {
*** 1929,1937 ****
      memset(collation_sequence, 0xFF, sizeof(collation_sequence));
    }
  
!   cbl_alphabet_t(const YYLTYPE& loc, size_t locale, cbl_name_t name );
  
!   cbl_alphabet_t( const YYLTYPE& loc, const cbl_name_t name,
                    unsigned char low_index, unsigned char high_index,
                    unsigned char collation_sequence[] )
      : loc(loc)
--- 1921,1929 ----
      memset(collation_sequence, 0xFF, sizeof(collation_sequence));
    }
  
!   cbl_alphabet_t(const cbl_loc_t& loc, size_t locale, cbl_name_t name );
  
!   cbl_alphabet_t( const cbl_loc_t& loc, const cbl_name_t name,
                    unsigned char low_index, unsigned char high_index,
                    unsigned char collation_sequence[] )
      : loc(loc)
*************** struct cbl_alphabet_t {
*** 1957,1963 ****
    }
  
    void
!   add_sequence( const YYLTYPE& loc, const unsigned char seq[] ) {
      if( low_index == 0 ) low_index = seq[0];
  
      unsigned char last = last_index > 0? collation_sequence[last_index] + 1 : 0;
--- 1949,1955 ----
    }
  
    void
!   add_sequence( const cbl_loc_t& loc, const unsigned char seq[] ) {
      if( low_index == 0 ) low_index = seq[0];
  
      unsigned char last = last_index > 0? collation_sequence[last_index] + 1 : 0;
*************** struct cbl_alphabet_t {
*** 1968,1974 ****
    }
  
    void
!   add_interval( const YYLTYPE& loc, unsigned char low, unsigned char high ) {
      if( low_index == 0 ) low_index = low;
  
      unsigned char last = collation_sequence[last_index];
--- 1960,1966 ----
    }
  
    void
!   add_interval( const cbl_loc_t& loc, unsigned char low, unsigned char high ) {
      if( low_index == 0 ) low_index = low;
  
      unsigned char last = collation_sequence[last_index];
*************** struct cbl_alphabet_t {
*** 1978,1985 ****
      }
    }
  
!   void also( const YYLTYPE& loc, size_t ch );
!   bool assign( const YYLTYPE& loc, unsigned char ch, unsigned char value );
    bool reencode( const cbl_loc_t& loc );
  
    static const char *
--- 1970,1977 ----
      }
    }
  
!   void also( const cbl_loc_t& loc, size_t ch );
!   bool assign( const cbl_loc_t& loc, unsigned char ch, unsigned char value );
    bool reencode( const cbl_loc_t& loc );
  
    static const char *
*************** struct cbl_perform_tgt_t {
*** 2675,2681 ****
  
    cbl_perform_tgt_t() : addresses(), ifrom(0), ito(0) {}
    explicit cbl_perform_tgt_t( cbl_label_t * from, cbl_label_t *to = NULL )
!     : addresses(), ifrom( from? symbol_index(symbol_elem_of(from)) : 0 )
      , ito( to? symbol_index(symbol_elem_of(to)) : 0 )
    {}
  
--- 2667,2674 ----
  
    cbl_perform_tgt_t() : addresses(), ifrom(0), ito(0) {}
    explicit cbl_perform_tgt_t( cbl_label_t * from, cbl_label_t *to = NULL )
!     : addresses()
!     , ifrom( from? symbol_index(symbol_elem_of(from)) : 0 )
      , ito( to? symbol_index(symbol_elem_of(to)) : 0 )
    {}
  
*************** size_t current_program_index();
*** 2791,2801 ****
  const char * current_declarative_section_name();
  
  struct cbl_nameloc_t {
!   YYLTYPE loc;
    const char *name;
  
    cbl_nameloc_t() : loc{ 1,1, 1,1 }, name(NULL) {}
!   cbl_nameloc_t( const YYLTYPE& loc, const char *name )
      : loc(loc), name(name)
    {}
  };
--- 2784,2794 ----
  const char * current_declarative_section_name();
  
  struct cbl_nameloc_t {
!   cbl_loc_t loc;
    const char *name;
  
    cbl_nameloc_t() : loc{ 1,1, 1,1 }, name(NULL) {}
!   cbl_nameloc_t( const cbl_loc_t& loc, const char *name )
      : loc(loc), name(name)
    {}
  };
*************** class name_queue_t : private std::queue<
*** 2828,2840 ****
                      } );
      return names;
    }
!   size_t push( const YYLTYPE& loc, const char name[] ) {
      assert( !empty() );
      back().push_front( cbl_nameloc_t(loc, name) );
      dump(__func__);
      return size();
    }
!   void qualify( const YYLTYPE& loc, const char name[] ) {
      if( empty() ) {
        allocate();
        push(loc, name);
--- 2821,2833 ----
                      } );
      return names;
    }
!   size_t push( const cbl_loc_t& loc, const char name[] ) {
      assert( !empty() );
      back().push_front( cbl_nameloc_t(loc, name) );
      dump(__func__);
      return size();
    }
!   void qualify( const cbl_loc_t& loc, const char name[] ) {
      if( empty() ) {
        allocate();
        push(loc, name);
*************** const std::string& keyword_alias_add( co
*** 2868,2874 ****
  int binary_integer_usage_of( const char name[] );
    
  void tee_up_empty();
! void tee_up_name( const YYLTYPE& loc, const char name[] );
  cbl_namelist_t teed_up_names();
  
  size_t end_of_group( size_t igroup );
--- 2861,2867 ----
  int binary_integer_usage_of( const char name[] );
    
  void tee_up_empty();
! void tee_up_name( const cbl_loc_t& loc, const char name[] );
  cbl_namelist_t teed_up_names();
  
  size_t end_of_group( size_t igroup );
*************** symbol_elem_t * symbol_section_add( size
*** 2948,2955 ****
  
  void symbol_registers_add();
  
! void symbol_field_location( size_t ifield, const YYLTYPE& loc );
! YYLTYPE symbol_field_location( size_t ifield );
  
  bool symbol_label_section_exists( size_t program );
  
--- 2941,2948 ----
  
  void symbol_registers_add();
  
! void symbol_field_location( size_t ifield, const cbl_loc_t& loc );
! cbl_loc_t symbol_field_location( size_t ifield );
  
  bool symbol_label_section_exists( size_t program );
  
*************** static inline size_t upsi_register() {
*** 2968,2978 ****
  void wsclear( uint32_t ch);
  const uint32_t *wsclear();
  
- enum cbl_call_convention_t {
-   cbl_call_verbatim_e = 'V',
-   cbl_call_cobol_e = 'N', // native
- };
- 
  int keyword_tok( const char * text, bool include_intrinsics = false );
  int redefined_token( const cbl_name_t name );
  
--- 2961,2966 ----
*************** class current_tokens_t {
*** 3000,3006 ****
      tokenset_t();
      int find( const cbl_name_t name, bool include_intrinsics );
  
!     bool equate( const YYLTYPE& loc, int token,
                   const cbl_name_t name, const cbl_name_t verb = "EQUATE") {
        auto lname( lowercase(name) );
        auto cw = cobol_words.insert(lname);
--- 2988,2994 ----
      tokenset_t();
      int find( const cbl_name_t name, bool include_intrinsics );
  
!     bool equate( const cbl_loc_t& loc, int token,
                   const cbl_name_t name, const cbl_name_t verb = "EQUATE") {
        auto lname( lowercase(name) );
        auto cw = cobol_words.insert(lname);
*************** class current_tokens_t {
*** 3018,3024 ****
        }
        return fOK;
      }
!     bool undefine( const YYLTYPE& loc,
                     const cbl_name_t name, const cbl_name_t verb = "UNDEFINE" ) {
        auto lname( lowercase(name) );
        auto cw = cobol_words.insert(lname);
--- 3006,3012 ----
        }
        return fOK;
      }
!     bool undefine( const cbl_loc_t& loc,
                     const cbl_name_t name, const cbl_name_t verb = "UNDEFINE" ) {
        auto lname( lowercase(name) );
        auto cw = cobol_words.insert(lname);
*************** class current_tokens_t {
*** 3044,3057 ****
        return fOK;
      }
    
!     bool substitute( const YYLTYPE& loc,
                       const cbl_name_t extant, int token, const cbl_name_t name ) {
        return
          equate( loc, token, name, "SUBSTITUTE" )
          &&
          undefine( loc, extant, "SUBSTITUTE" );
      }
!     bool reserve( const YYLTYPE& loc, const cbl_name_t name ) {
        auto lname( lowercase(name) );
        auto cw = cobol_words.insert(lname);
        if( ! cw.second ) {
--- 3032,3045 ----
        return fOK;
      }
    
!     bool substitute( const cbl_loc_t& loc,
                       const cbl_name_t extant, int token, const cbl_name_t name ) {
        return
          equate( loc, token, name, "SUBSTITUTE" )
          &&
          undefine( loc, extant, "SUBSTITUTE" );
      }
!     bool reserve( const cbl_loc_t& loc, const cbl_name_t name ) {
        auto lname( lowercase(name) );
        auto cw = cobol_words.insert(lname);
        if( ! cw.second ) {
*************** class current_tokens_t {
*** 3084,3090 ****
    int find( const cbl_name_t name, bool include_intrinsics ) {
      return tokens.find(name, include_intrinsics);
    }
!   bool equate( const YYLTYPE& loc, const cbl_name_t keyword, const cbl_name_t alias ) {
      int token; 
      if( 0 == (token = binary_integer_usage_of(keyword)) ) {
        if( 0 == (token = keyword_tok(keyword)) ) {
--- 3072,3078 ----
    int find( const cbl_name_t name, bool include_intrinsics ) {
      return tokens.find(name, include_intrinsics);
    }
!   bool equate( const cbl_loc_t& loc, const cbl_name_t keyword, const cbl_name_t alias ) {
      int token; 
      if( 0 == (token = binary_integer_usage_of(keyword)) ) {
        if( 0 == (token = keyword_tok(keyword)) ) {
*************** class current_tokens_t {
*** 3100,3109 ****
      } 
      return tokens.equate(loc, token, alias);
    }
!   bool undefine( const YYLTYPE& loc, cbl_name_t keyword ) {
      return tokens.undefine(loc, keyword);
    }
!   bool substitute( const YYLTYPE& loc, const cbl_name_t keyword, const cbl_name_t alias ) {
      int token; 
      if( 0 == (token = binary_integer_usage_of(keyword)) ) {
        if( 0 == (token = keyword_tok(keyword)) ) {
--- 3088,3097 ----
      } 
      return tokens.equate(loc, token, alias);
    }
!   bool undefine( const cbl_loc_t& loc, cbl_name_t keyword ) {
      return tokens.undefine(loc, keyword);
    }
!   bool substitute( const cbl_loc_t& loc, const cbl_name_t keyword, const cbl_name_t alias ) {
      int token; 
      if( 0 == (token = binary_integer_usage_of(keyword)) ) {
        if( 0 == (token = keyword_tok(keyword)) ) {
*************** class current_tokens_t {
*** 3121,3127 ****
      dbgmsg("%s:%d: %s (%d) will have alias %s", __func__, __LINE__, keyword, token, alias);
      return tokens.substitute(loc, keyword, token, alias);
    }
!   bool reserve( const YYLTYPE& loc, const cbl_name_t name ) {
      return tokens.reserve(loc, name);
    }
    int redefined_as( const cbl_name_t name ) {
--- 3109,3115 ----
      dbgmsg("%s:%d: %s (%d) will have alias %s", __func__, __LINE__, keyword, token, alias);
      return tokens.substitute(loc, keyword, token, alias);
    }
!   bool reserve( const cbl_loc_t& loc, const cbl_name_t name ) {
      return tokens.reserve(loc, name);
    }
    int redefined_as( const cbl_name_t name ) {
*************** class current_tokens_t {
*** 3132,3143 ****
    }
  };
  
- cbl_call_convention_t current_call_convention();
  current_tokens_t& cdf_current_tokens();
  
- void
- current_call_convention( cbl_call_convention_t convention);
- 
  class procref_base_t {
  private:
    const char *section_name, *paragraph_name;
--- 3120,3127 ----
*************** public:
*** 3177,3182 ****
--- 3161,3169 ----
    }
  
    int line_number() const { return line; }
+   const char *called_from() const {
+     return context? cbl_label_of(symbol_at(context))->name : "";
+   }
  };
  
  void procedure_definition_add( size_t program, const cbl_label_t *procedure );
*************** int rdigits_of_picture(const char *pictu
*** 3217,3224 ****
  int  digits_of_picture(const char *picture, bool for_rdigits);
  bool is_picture_scaled(const char *picture);
  
! template <typename LOC>
! void gcc_location_set( const LOC& loc );
  
  // This is slightly oddball.  This is an entry point in the charutf8.cc module.
  // It's the only entry point in the module, and so it seemed to me wasteful to
--- 3204,3210 ----
  int  digits_of_picture(const char *picture, bool for_rdigits);
  bool is_picture_scaled(const char *picture);
  
! void gcc_location_set( const cbl_loc_t& loc );
  
  // This is slightly oddball.  This is an entry point in the charutf8.cc module.
  // It's the only entry point in the module, and so it seemed to me wasteful to
diff -Nrcpad gcc-17-20260614/gcc/cobol/util.cc gcc-17-20260621/gcc/cobol/util.cc
*** gcc-17-20260614/gcc/cobol/util.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/cobol/util.cc	Sun Jun 21 22:32:06 2026
*************** class cdf_directives_t
*** 160,166 ****
      }
      void pop() {
        if( empty() ) {
!         error_msg(YYLTYPE(), "CDF stack empty"); // cppcheck-suppress syntaxError
          return;
        }
        current_value = top();
--- 160,166 ----
      }
      void pop() {
        if( empty() ) {
!         error_msg(cbl_loc_t(), "CDF stack empty"); // cppcheck-suppress syntaxError
          return;
        }
        current_value = top();
*************** void cdf_pop_source_format() {
*** 314,326 ****
           cdf_directives.source_format.value().description());
  }
  
  /*
   * Construct a cbl_field_t from a CDF literal, to be installed in the symbol table.
   */
! cbl_field_t
  cdf_literalize( const cbl_loc_t& loc,
                  const std::string& name, const cdfval_t& value,
!                 bool set_initial ) {
      cbl_field_t field;
  
      if( value.is_numeric() ) {
--- 314,328 ----
           cdf_directives.source_format.value().description());
  }
  
+ void cdf_unreachable() { gcc_unreachable(); }
+ 
  /*
   * Construct a cbl_field_t from a CDF literal, to be installed in the symbol table.
   */
! static cbl_field_t
  cdf_literalize( const cbl_loc_t& loc,
                  const std::string& name, const cdfval_t& value,
!                 bool set_initial = true ) {
      cbl_field_t field;
  
      if( value.is_numeric() ) {
*************** cdf_literalize( const cbl_loc_t& loc,
*** 345,350 ****
--- 347,380 ----
      return field;
  }
  
+ cbl_file_t *
+ cdf_file( size_t program, const cbl_name_t name ) {
+   symbol_elem_t *e = symbol_file(program, name);
+   if( e && e->type == SymFile ) {
+     return cbl_file_of(e);
+   }
+   return nullptr;
+ } 
+ 
+ size_t
+ cdf_file_index( const cbl_file_t *file ) {
+   return symbol_index(symbol_elem_of(file));
+ }
+ 
+ const char *
+ cdf_file_name( const cbl_file_t *file ) {
+   return file->name;
+ }
+ 
+ 
+ void
+ cdf_field_add( const cbl_loc_t& loc, const std::string& name, const cdfval_t& value ) {
+   if( symbols_begin() < symbols_end() ) {
+     cbl_field_t field = cdf_literalize(loc, name, value);
+     symbol_field_add(current_program_index(), &field);                    
+   }
+ }
+ 
  const std::list<cbl_field_t>
  cdf_literalize() {
    std::list<cbl_field_t> fields;
*************** binary_initial( char *retval,
*** 1436,1443 ****
   */
  
  void
! cbl_field_t::encode_numeric( const char input[], cbl_loc_t loc,
!                              const REAL_VALUE_TYPE& /*rvt*/ ) {
    gcc_assert(input);
    gcc_assert(is_numeric(this) || type == FldNumericEdited);
  
--- 1466,1472 ----
   */
  
  void
! cbl_field_t::encode_numeric( const char input[], cbl_loc_t loc ) {
    gcc_assert(input);
    gcc_assert(is_numeric(this) || type == FldNumericEdited);
  
*************** size_t parse_error_inc();
*** 1892,1898 ****
  size_t parse_error_count();
  
  bool // true if error reported
! cbl_field_t::report_invalid_initial_value(const YYLTYPE& loc) const {
  
    if( ! data.original() ) return false;
  
--- 1921,1927 ----
  size_t parse_error_count();
  
  bool // true if error reported
! cbl_field_t::report_invalid_initial_value(const cbl_loc_t& loc) const {
  
    if( ! data.original() ) return false;
  
*************** public:
*** 2532,2537 ****
--- 2561,2880 ----
  };
  
  /*
+  * Use a namespace to define sets of names.  Use relational algebra to
+  * determine uniqueness or ambiguity of each PERFORM reference.
+  */
+ namespace match_proc {
+   std::string
+   lcase( std::string name ) {
+     std::transform(name.begin(), name.end(), name.begin(), ftolower);
+     return name;
+   }
+ 
+   // PERFORM targets are captured by parser
+   struct stmt_t {
+     int line;
+     size_t curr;  // current section of the PERFORM statement, else 0
+     struct tgt_t {
+       std::string name, qual;
+       bool empty() const { return name.empty(); }
+       bool operator==(const tgt_t& that) const {
+         return name == that.name && qual == that.qual;
+       }
+       tgt_t lcase() const {
+         tgt_t output{ match_proc::lcase(name), match_proc::lcase(qual) };
+         return output;
+       }
+     };
+     std::pair<tgt_t, tgt_t> tgts;
+ 
+     stmt_t() : line(0), curr(0) {}
+     stmt_t( int line, size_t isym,
+             std::string name,
+             const char qual[] )
+       : line(line), curr(isym)
+     {
+       tgts.first = tgt_t{name, qual? std::string(qual) : std::string() };
+     }
+     stmt_t& thru( std::string name, const char qual[] ) {
+       tgts.second = tgt_t{name, qual? std::string(qual) : std::string() };
+       return *this;
+     }
+     struct found_t {
+       size_t n, isym;
+       found_t() : n(0), isym(0) {}
+       found_t(size_t n, size_t isym) : n(n), isym(isym) {}
+     };
+     void error(const cbl_name_t program_name,
+                const tgt_t&tgt,
+                const found_t& found) const 
+     {
+       const char *clause = tgt == tgts.first? "" : "THRU ";
+           
+       switch( found.n ) {
+       case 1:
+         gcc_unreachable();
+         break;
+       case 0:
+         // error: not found
+         dbgmsg("%s:%d PERFORM %s%s not resolved",
+                program_name, line, clause, tgt.name.c_str());
+         break;
+       default:        
+         assert( 1 < found.n );
+         // error: ambiguous
+         dbgmsg("%s:%d PERFORM %s%s ambiguous",
+                program_name, line, clause, tgt.name.c_str());
+         break;
+       }
+     }
+   };
+ 
+   struct sect_t {
+     size_t isym;
+     std::string name;
+     sect_t( size_t isym ) : isym(isym) {
+       auto L = cbl_label_of(symbol_at(isym));
+       name = lcase(L->name);
+     }
+     bool operator<( const sect_t& that ) const {
+       return name < that.name;
+     }
+   };
+   struct para_t {
+     size_t isym, parent;
+     std::string name;
+     para_t( size_t isym ) : isym(isym) {
+       auto L = cbl_label_of(symbol_at(isym));
+       parent = L->parent;
+       name = lcase(L->name);
+     }
+     bool operator<( const para_t& that ) const {
+       if( name == that.name ) {
+         return parent < that.parent;
+       }
+       return name < that.name;
+     }
+     std::string parent_name() const {
+       if( ! parent ) return std::string();
+       const auto f = cbl_label_of(symbol_at(parent));
+       return lcase(f->name);
+     }
+   };
+   struct proc_t {
+     size_t n, isym; // index of first of n matching pairs
+     std::string para, sect;
+     proc_t( size_t n, size_t isym,
+             const std::string& para,
+             const std::string& sect )
+       : n(n), isym(isym), para(para), sect(sect)
+     {}
+     bool operator<( const proc_t& that ) const {
+       if( para == that.para ) {
+         return sect < that.sect;
+       }
+       return para < that.para;
+     }
+   };
+ 
+   class procedures_t {
+     std::set<sect_t> sects;
+     std::set<para_t> paras;
+     std::set<proc_t> procs;
+     friend bool statements_verify();
+   public:
+     procedures_t( size_t program ) {
+       // find sections and paragraphs
+       for( symbol_elem_t *e = symbols_begin(program+1); e->program == program; e++ ) {
+         if( e->type == SymLabel ) {
+           const auto& L = *cbl_label_of(e);
+           auto isym = e - symbols_begin();
+           switch(L.type) {
+           case LblSection: 
+             sects.insert(isym);
+             break;
+           case LblParagraph:
+             paras.insert(isym);
+             break;
+           default:
+             continue;
+           }
+         }
+       }
+       // join sections and paragraphs, unreduced
+       std::list<proc_t> all;
+       for( const auto& para : paras ) {
+         std::set<sect_t> parents;
+         std::copy_if( sects.begin(), sects.end(), std::inserter(parents, parents.begin()),
+                       [para]( const auto& sect ) {
+                         return para.parent_name() == sect.name;
+                       } );
+         std::transform( parents.begin(), parents.end(), std::back_inserter(all), 
+                         [para]( const auto& sect ) {
+                           proc_t proc(1, para.isym, para.name, sect.name);
+                           return proc;
+                         } );
+       }
+       // insert paragraph procedures
+       struct stat_t {
+         size_t n, isym;
+         stat_t() : n(0), isym(0) {}
+         stat_t update( size_t isym ) {
+           this->isym = this->isym == 0 ? isym : std::min(this->isym, isym);
+           n++;
+           return *this;
+         }
+       };
+       std::map<proc_t, stat_t> nprocs;
+       for( const auto& proc : all ) {
+         auto& stat = nprocs[proc];
+         stat.update( proc.isym );
+       }
+       std::transform(nprocs.begin(), nprocs.end(), std::inserter(procs, procs.begin()),
+                      []( const auto& elem ) {
+                        proc_t proc ( elem.second.n, elem.second.isym,
+                                      elem.first.para, elem.first.sect );
+                        return proc;
+                      } );
+       // insert section procedures
+       std::map<sect_t, stat_t> nsects;
+       for( const auto& sect : sects ) {
+         auto& stat = nsects[sect];
+         stat.update( sect.isym );
+       }
+       std::transform(nsects.begin(), nsects.end(), std::inserter(procs, procs.begin()),
+                      []( const auto& elem ) {
+                        proc_t proc ( elem.second.n, elem.second.isym,
+                                      std::string(), elem.first.name );
+                        return proc;
+                      } );
+     }
+ 
+     stmt_t::found_t
+     find( const stmt_t& stmt, const stmt_t::tgt_t& tgt ) {
+       if( tgt.empty() ) return stmt_t::found_t();
+       std::string curr ( lcase( cbl_label_of(symbol_at(stmt.curr))->name ) );
+ 
+       auto p = std::find_if(procs.cbegin(), procs.cend(),
+                             [curr, tgt](auto proc) {
+                               return match(proc, tgt, curr);
+                             });
+       size_t n = std::count_if(p, procs.end(),
+                                [curr, tgt](const auto& proc) {
+                                  return match(proc, tgt, curr);
+                                });
+       stmt_t::found_t found = {n, 0};
+       if( n ) {
+         assert(p != procs.end());
+         found.isym = p->isym;
+       }
+       return found;
+     }
+   protected:
+     static bool match( const proc_t& proc, const stmt_t::tgt_t& tgt, const std::string& curr ) {
+       return ( proc.para == tgt.name && tgt.qual.empty() )
+         ||   ( proc.sect == tgt.name && tgt.qual.empty() )
+         ||   ( proc.para == tgt.name && proc.sect == tgt.qual )
+         ||   ( proc.para == tgt.name && proc.sect == curr );
+     }    
+ 
+     void dump(const stmt_t& stmt) {
+       std::string target( stmt.tgts.first.name );
+       if( ! stmt.tgts.first.qual.empty() ) {
+         target += " of " + stmt.tgts.first.qual;
+       }
+       if( ! stmt.tgts.second.name.empty() ) {
+         target += " THRU " + stmt.tgts.second.name;
+       }
+       if( ! stmt.tgts.second.qual.empty() ) {
+         target += " of " + stmt.tgts.second.qual;
+       }
+ 
+       fprintf(stderr, "line %d in section #%lu: PERFORM %s\n",
+               stmt.line, (unsigned long)stmt.curr, target.c_str());
+       fprintf(stderr, "%lu Sections:\n", (unsigned long)sects.size());
+       for( auto sect : sects ) {
+         fprintf(stderr, "\t" "#%lu %s\n", (unsigned long)sect.isym, sect.name.c_str());
+       }
+       fprintf(stderr, "%lu Paragraphs:\n", (unsigned long)paras.size());
+       for( auto para : paras ) {
+         fprintf(stderr, "\t" "#%lu %s of #%lu\n",
+                 (unsigned long)para.isym, para.name.c_str(), (unsigned long)para.parent);
+       }
+       fprintf(stderr, "%lu Procedures:\n", (unsigned long)procs.size());
+       for( auto proc : procs ) {
+         std::string section("");
+         if( ! proc.sect.empty() ) section += "of " + proc.sect;
+         fprintf(stderr, "\t" "n=%lu %s %s\n",
+                 (unsigned long)proc.isym, proc.para.c_str(), section.c_str());
+       }
+       return;
+     }
+   }; // procedures
+ 
+ 
+   static stmt_t prototype;
+   static std::list<stmt_t> stmts;
+ 
+   bool
+   statements_verify() {
+     size_t nerr = 0;
+     size_t iprog = current_program_index();
+     const char *program_name = cbl_label_of(symbol_at(iprog))->name;
+     // instantiate procedure targets for current program from the symbol table
+     procedures_t procedures(iprog);
+ 
+     // Verify each PERFORM statement target is a unique reference
+     for( const auto& stmt : stmts ) {
+       stmt_t::found_t found = procedures.find(stmt, stmt.tgts.first.lcase());
+       stmt_t::found_t thru  = procedures.find(stmt, stmt.tgts.second.lcase());
+ 
+       if( found.n == 1 && (thru.n == 1 || stmt.tgts.second.empty()) ) {
+         // update proc call list
+         if( stmt.tgts.first.qual.empty() ) {
+           dbgmsg("%s:%d PERFORM %s is ok", program_name, stmt.line,
+                  stmt.tgts.first.name.c_str());
+         } else {
+           dbgmsg("%s:%d PERFORM %s of %s is ok", program_name, stmt.line,
+                  stmt.tgts.first.name.c_str(),
+                  stmt.tgts.first.qual.c_str());
+         }
+         continue;
+       }
+       nerr++;
+       
+       if( found.n != 1 ) {
+         stmt.error(program_name, stmt.tgts.first, found);
+         if( nerr == 1 && yydebug ) {
+           procedures.dump(stmt);
+         }
+       }
+       if( thru.n != 1 && ! stmt.tgts.second.empty() ) {
+         stmt.error(program_name, stmt.tgts.second, thru);
+       }
+     }
+     return nerr == 0;
+   }
+   
+   void statement_add() {
+     stmts.push_back(prototype);
+     prototype = stmt_t();
+   }
+   void
+   statement_compose( int line, size_t isection, // isection is where the PERFORM is
+                        const cbl_name_t para,
+                        const cbl_name_t qual ) {
+     std::string qual_name;
+     if( qual ) qual_name = qual;
+     if( prototype.tgts.first.name.empty() ) {
+       prototype = stmt_t( line, isection, para, qual );
+     } else {
+       prototype.thru( para, qual );
+     }
+   }
+ } // end match_proc namespace
+ 
+ /*
   * Every reference occurs in a {program,section,paragraph} context,
   * even if they're implicit.
   */
*************** public:
*** 2635,2654 ****
    }
  };
  
  procref_t *
  ambiguous_reference( size_t program ) {
    procedures_t& procedures = programs[program];
  
    for( const auto& proc : procedures ) {
      procedures_t::mapped_type::const_iterator
        ambiguous = find_if_not( proc.second.begin(), proc.second.end(),
                                 is_unique(program, proc.first) );
      if( proc.second.end() != ambiguous ) {
        if( yydebug ) {
!         dbgmsg("%s: %s of '%s' has " HOST_SIZE_T_PRINT_UNSIGNED
!                "potential matches", __func__,
                 ambiguous->paragraph(), ambiguous->section(),
                 (fmt_size_t)procedures.count(procdef_t(*ambiguous)));
        }
        return new procref_t(*ambiguous);
      }
--- 2978,3031 ----
    }
  };
  
+ #define DUMP_PROCEDURE_CALLS 0
+ #if DUMP_PROCEDURE_CALLS
+ static void procedure_calls_dump( size_t program ) {
+   procedures_t& procedures = programs[program];
+   for( const auto& proc : procedures ) {
+     const procdef_t& def(proc.first);
+     const auto& refs(proc.second);
+     auto L = def.label_of();
+     if( L ) {
+       fprintf(stderr, "call to %s", L->name);
+       if( L->parent ) {
+         auto S = cbl_label_of(symbol_at(L->parent));
+         fprintf(stderr, " of %s", S->name);
+       }
+       fprintf(stderr, ":\n");
+       for( const procref_t& ref : refs ) {
+         fprintf(stderr, "\t" "from %s ", ref.paragraph());
+         if( ref.section()[0] ) fprintf(stderr, "of %s", ref.section());
+         fprintf(stderr, "on line %d\n", ref.line_number());
+       }
+     }
+   }
+ }
+ #endif
+ 
  procref_t *
  ambiguous_reference( size_t program ) {
    procedures_t& procedures = programs[program];
  
+ #if DUMP_PROCEDURE_CALLS
+   procedure_calls_dump(program);
+ #endif
    for( const auto& proc : procedures ) {
      procedures_t::mapped_type::const_iterator
        ambiguous = find_if_not( proc.second.begin(), proc.second.end(),
                                 is_unique(program, proc.first) );
      if( proc.second.end() != ambiguous ) {
        if( yydebug ) {
!         dbgmsg("%s: %s of '%s' has " HOST_SIZE_T_PRINT_UNSIGNED " "
!                "potential matches among references", __func__,
                 ambiguous->paragraph(), ambiguous->section(),
                 (fmt_size_t)procedures.count(procdef_t(*ambiguous)));
+         for( const auto& ref : proc.second ) {
+           fprintf(stderr, "\tline %d from {%s}: %s",
+                   ref.line_number(), ref.called_from(), ref.paragraph());
+           if( ref.section()[0] ) fprintf(stderr, "of %s", ref.section());
+           fprintf(stderr, "\n");
+         }
        }
        return new procref_t(*ambiguous);
      }
*************** void current_location_minus_one_clear()
*** 3104,3112 ****
   * with start and caret at the first line/column of LOC, and finishing at the
   * last line/column of LOC.
   */
- template <typename LOC>
  static void
! gcc_location_set_impl( const LOC& loc ) {
    // Set the position to the first line & column in the location.
   static location_t loc_m_1 = 0;
   const location_t
--- 3481,3488 ----
   * with start and caret at the first line/column of LOC, and finishing at the
   * last line/column of LOC.
   */
  static void
! gcc_location_set_impl( const cbl_loc_t& loc ) {
    // Set the position to the first line & column in the location.
   static location_t loc_m_1 = 0;
   const location_t
*************** gcc_location_set_impl( const LOC& loc )
*** 3132,3144 ****
    location_dump(__func__, __LINE__, "parser", loc);
  }
  
! void gcc_location_set( const YYLTYPE& loc ) {
    gcc_location_set_impl(loc);
  }
  
  void gcc_location_set( const YDFLTYPE& loc ) {
    gcc_location_set_impl(loc);
  }
  
  #ifdef NDEBUG
  # define verify_format(M)
--- 3508,3522 ----
    location_dump(__func__, __LINE__, "parser", loc);
  }
  
! void gcc_location_set( const cbl_loc_t& loc ) {
    gcc_location_set_impl(loc);
  }
  
+ #if 0
  void gcc_location_set( const YDFLTYPE& loc ) {
    gcc_location_set_impl(loc);
  }
+ #endif
  
  #ifdef NDEBUG
  # define verify_format(M)
*************** ydferror( const char gmsgid[], ... ) {
*** 3193,3199 ****
  }
  
  extern int yychar;
! extern YYLTYPE yylloc;
  
  /*
   * temp_loc_t is a hack in lieu of "%define parse.error custom".  When
--- 3571,3577 ----
  }
  
  extern int yychar;
! extern cbl_loc_t yylloc;
  
  /*
   * temp_loc_t is a hack in lieu of "%define parse.error custom".  When
*************** class temp_loc_t {
*** 3209,3218 ****
  
      gcc_location_set(yylloc); // use lookahead location
    }
!   explicit temp_loc_t( const YYLTYPE& loc) : orig(token_location) {
!     gcc_location_set(loc);
!   }
!   explicit temp_loc_t( const YDFLTYPE& loc) : orig(token_location) {
      gcc_location_set(loc);
    }
    ~temp_loc_t() {
--- 3587,3593 ----
  
      gcc_location_set(yylloc); // use lookahead location
    }
!   explicit temp_loc_t( const cbl_loc_t& loc) : orig(token_location) {
      gcc_location_set(loc);
    }
    ~temp_loc_t() {
*************** class temp_loc_t {
*** 3249,3267 ****
    global_dc->end_group();
  
  
! void error_msg( const YYLTYPE& loc, const char gmsgid[], ... ) {
    ERROR_MSG_BODY
  }
  
! void error_msg( const YDFLTYPE& loc, const char gmsgid[], ... )
    ATTRIBUTE_GCOBOL_DIAG(2, 3);
  
- void error_msg( const YDFLTYPE& loc, const char gmsgid[], ... ) {
-   ERROR_MSG_BODY
- }
- 
  bool
! warn_msg( const YYLTYPE& loc, const char gmsgid[], ... ) {
    temp_loc_t looker(loc);
    verify_format(gmsgid);
    auto_diagnostic_group d;
--- 3624,3639 ----
    global_dc->end_group();
  
  
! void error_msg( const cbl_loc_t& loc, const char gmsgid[], ... ) {
    ERROR_MSG_BODY
  }
  
! bool
! warn_msg( const cbl_loc_t& loc, const char gmsgid[], ... )
    ATTRIBUTE_GCOBOL_DIAG(2, 3);
  
  bool
! warn_msg( const cbl_loc_t& loc, const char gmsgid[], ... ) {
    temp_loc_t looker(loc);
    verify_format(gmsgid);
    auto_diagnostic_group d;
*************** parse_file( const char filename[] )
*** 3441,3456 ****
  
  #pragma GCC diagnostic pop
  
! extern int yy_flex_debug, yydebug, ydfdebug;
  extern int f_trace_debug;
  
  void cobol_set_indicator_column( int column );
  
  void
  cobol_set_debugging( bool flex, bool yacc, bool parser )
  {
    yy_flex_debug = flex? 1 : 0;
!   ydfdebug = yydebug = yacc? 1 : 0;
    f_trace_debug = parser? 1 : 0;
  }
  
--- 3813,3830 ----
  
  #pragma GCC diagnostic pop
  
! extern int yy_flex_debug, yydebug;
  extern int f_trace_debug;
  
  void cobol_set_indicator_column( int column );
+ void ydfdebug( bool yn );
  
  void
  cobol_set_debugging( bool flex, bool yacc, bool parser )
  {
    yy_flex_debug = flex? 1 : 0;
!   yydebug = yacc? 1 : 0;
!   ydfdebug( yacc );
    f_trace_debug = parser? 1 : 0;
  }
  
*************** cbl_unimplemented(const char *gmsgid, ..
*** 3531,3537 ****
  }
  
  void
! cbl_unimplemented_at( const YYLTYPE& loc, const char *gmsgid, ... ) {
    temp_loc_t looker(loc);
    verify_format(gmsgid);
    auto_diagnostic_group d;
--- 3905,3911 ----
  }
  
  void
! cbl_unimplemented_at( const cbl_loc_t& loc, const char *gmsgid, ... ) {
    temp_loc_t looker(loc);
    verify_format(gmsgid);
    auto_diagnostic_group d;
diff -Nrcpad gcc-17-20260614/gcc/cobol/util.h gcc-17-20260621/gcc/cobol/util.h
*** gcc-17-20260614/gcc/cobol/util.h	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/cobol/util.h	Sun Jun 21 22:32:06 2026
***************
*** 31,42 ****
  #ifndef _UTIL_H_
  #define _UTIL_H_
  
- [[noreturn]] void cbl_internal_error(const char *format_string, ...)
-   ATTRIBUTE_GCOBOL_DIAG(1, 2);
- 
- void cbl_err(const char *format_string, ...) ATTRIBUTE_GCOBOL_DIAG(1, 2);
- void cbl_errx(const char *format_string, ...) ATTRIBUTE_GCOBOL_DIAG(1, 2);
- 
  bool fisdigit(int c);
  bool fisspace(int c);
  int  ftolower(int c);
--- 31,36 ----
*************** public:
*** 111,128 ****
  }; 
  
  
! void cdf_push();
! void cdf_push_call_convention();
! void cdf_push_current_tokens();
! void cdf_push_dictionary();
! void cdf_push_enabled_exceptions();
! void cdf_push_source_format();
  
! void cdf_pop();
! void cdf_pop_call_convention();
! void cdf_pop_current_tokens();
! void cdf_pop_dictionary();
! void cdf_pop_source_format();
! void cdf_pop_enabled_exceptions();
  
  #endif
--- 105,123 ----
  }; 
  
  
! /*
!  * Functions that validate every PERFORM calls a unique reference.
!  */
! namespace match_proc {
!   typedef char cbl_name_t[64];
  
!   // Supply each target as it's mentioned.
!   void statement_compose( int iline, size_t isection,
!                           const cbl_name_t para, const cbl_name_t qual );
!   // Add PERFORM to statement list.
!   void statement_add();
!   // Verify all statements and report problems. 
!   bool statements_verify();
! }
  
  #endif
diff -Nrcpad gcc-17-20260614/gcc/common/config/riscv/riscv-common.cc gcc-17-20260621/gcc/common/config/riscv/riscv-common.cc
*** gcc-17-20260614/gcc/common/config/riscv/riscv-common.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/common/config/riscv/riscv-common.cc	Sun Jun 21 22:32:06 2026
*************** static const riscv_profiles riscv_profil
*** 279,284 ****
--- 279,301 ----
      {NULL, NULL}
  };
  
+ /* Alternate/alias name for a CPU we know about.  */
+ struct riscv_cpu_alias_info {
+   /* This CPU's canonical name.  */
+   const char *name;
+ 
+   /* This CPU's alternate name.  */
+   const char *alias;
+ };
+ 
+ static const riscv_cpu_alias_info riscv_cpu_alias_table[] =
+ {
+ #define RISCV_CORE_ALIAS(CANONICAL_NAME, ALIAS_NAME) \
+     {CANONICAL_NAME, ALIAS_NAME},
+ #include "../../../config/riscv/riscv-cores.def"
+     {NULL, NULL}
+ };
+ 
  static const riscv_cpu_info riscv_cpu_tables[] =
  {
  #define RISCV_CORE(CORE_NAME, ARCH, TUNE) \
*************** riscv_find_cpu (const char *cpu)
*** 1699,1704 ****
--- 1716,1729 ----
        if (strcmp (cpu, name) == 0)
  	return cpu_info;
      }
+ 
+   /* We did not find CPU, check if CPU is a core's alias name and look it
+      up using its canonical name.  */
+   const riscv_cpu_alias_info *alias_info = &riscv_cpu_alias_table[0];
+   for (; alias_info->alias != NULL; alias_info++)
+     if (strcmp (cpu, alias_info->alias) == 0)
+       return riscv_find_cpu (alias_info->name);
+ 
    return NULL;
  }
  
*************** riscv_get_valid_option_values (int optio
*** 2220,2232 ****
  	    int i;
  	    const char *str;
  	    FOR_EACH_VEC_ELT (v, i, str)
! 	      {
! 		if (!strcmp (str, cpu_info->name))
  		  skip = true;
! 	      }
  	    if (!skip)
  	      v.safe_push (cpu_info->name);
  	  }
        }
        break;
      case OPT_mcpu_:
--- 2245,2275 ----
  	    int i;
  	    const char *str;
  	    FOR_EACH_VEC_ELT (v, i, str)
! 	      if (!strcmp (str, cpu_info->name))
! 		{
  		  skip = true;
! 		  break;
! 		}
  	    if (!skip)
  	      v.safe_push (cpu_info->name);
  	  }
+ 
+ 	const riscv_cpu_alias_info *alias_info = &riscv_cpu_alias_table[0];
+ 	for (; alias_info->alias; alias_info++)
+ 	  {
+ 	    /* Skip duplicates.  */
+ 	    bool skip = false;
+ 	    int i;
+ 	    const char *str;
+ 	    FOR_EACH_VEC_ELT (v, i, str)
+ 	      if (!strcmp (str, alias_info->alias))
+ 		{
+ 		  skip = true;
+ 		  break;
+ 		}
+ 	    if (!skip)
+ 	      v.safe_push (alias_info->alias);
+ 	  }
        }
        break;
      case OPT_mcpu_:
*************** riscv_get_valid_option_values (int optio
*** 2234,2239 ****
--- 2277,2286 ----
  	const riscv_cpu_info *cpu_info = &riscv_cpu_tables[0];
  	for (;cpu_info->name; ++cpu_info)
  	  v.safe_push (cpu_info->name);
+ 
+ 	const riscv_cpu_alias_info *alias_info = &riscv_cpu_alias_table[0];
+ 	for (; alias_info->alias; alias_info++)
+ 	  v.safe_push (alias_info->alias);
        }
        break;
      default:
diff -Nrcpad gcc-17-20260614/gcc/config/aarch64/aarch64-builtins.cc gcc-17-20260621/gcc/config/aarch64/aarch64-builtins.cc
*** gcc-17-20260614/gcc/config/aarch64/aarch64-builtins.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/config/aarch64/aarch64-builtins.cc	Sun Jun 21 22:32:06 2026
*************** aarch64_expand_prefetch_range_builtin (t
*** 3794,3800 ****
  	   non-negative integer.  However it is meaningless for
  	   values less than 2^15 or greater than 2^29.  */
  	uint64_t reuse_distance = require_const_argument (exp, argno++, 0,
! 							  LONG_LONG_MAX);
  
  	if (seen_error ())
  	  return;
--- 3794,3800 ----
  	   non-negative integer.  However it is meaningless for
  	   values less than 2^15 or greater than 2^29.  */
  	uint64_t reuse_distance = require_const_argument (exp, argno++, 0,
! 							  LLONG_MAX);
  
  	if (seen_error ())
  	  return;
diff -Nrcpad gcc-17-20260614/gcc/config/aarch64/aarch64-early-ra.cc gcc-17-20260621/gcc/config/aarch64/aarch64-early-ra.cc
*** gcc-17-20260614/gcc/config/aarch64/aarch64-early-ra.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/config/aarch64/aarch64-early-ra.cc	Sun Jun 21 22:32:06 2026
*************** early_ra::allocate_colors ()
*** 3038,3044 ****
        if (dump_file && (dump_flags & TDF_DETAILS))
  	fprintf (dump_file, "  Allocating [v%d:v%d] to color %d\n",
  		 best, best + color->group->size - 1, color->id);
!       m_allocated_fprs |= ((1U << color->group->size) - 1) << best;
      }
  }
  
--- 3038,3050 ----
        if (dump_file && (dump_flags & TDF_DETAILS))
  	fprintf (dump_file, "  Allocating [v%d:v%d] to color %d\n",
  		 best, best + color->group->size - 1, color->id);
!       // Mark the COLOR's FPRs as allocated.  A full-width color can have
!       // size == 32, so shift a wide enough value: "1U << 32" is undefined,
!       // as is "1UL << 32" on hosts with 32-bit long.  unsigned long long is
!       // at least 64 bits everywhere.  best + size <= 32 (from the candidate
!       // search) keeps the result within the 32-bit mask.
!       gcc_assert (best + color->group->size <= 32);
!       m_allocated_fprs |= ((1ULL << color->group->size) - 1) << best;
      }
  }
  
diff -Nrcpad gcc-17-20260614/gcc/config/aarch64/aarch64.cc gcc-17-20260621/gcc/config/aarch64/aarch64.cc
*** gcc-17-20260614/gcc/config/aarch64/aarch64.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/config/aarch64/aarch64.cc	Sun Jun 21 22:32:06 2026
*************** aarch64_builtin_vectorization_cost (enum
*** 17766,17771 ****
--- 17766,17772 ----
  		  : simd_costs->int_stmt_cost;
  
        case vec_construct:
+       case vec_deconstruct:
  	elements = estimated_poly_value (TYPE_VECTOR_SUBPARTS (vectype));
  	return elements / 2 + 1;
  
*************** aarch64_vector_costs::count_ops (unsigne
*** 18383,18388 ****
--- 18384,18390 ----
      case vec_perm:
      case vec_promote_demote:
      case vec_construct:
+     case vec_deconstruct:
      case vec_to_scalar:
      case scalar_to_vec:
      case vector_stmt:
*************** aarch64_simd_valid_imm (rtx op, simd_imm
*** 24733,24738 ****
--- 24735,24746 ----
        return true;
      }
  
+   /* A constant with zero high 64 bits (output_width == 64) must be formed
+      by a 64-bit Advanced SIMD MOVI/FMOV; it must not fall through to the
+      SVE forms below, which replicate it across the whole vector.  */
+   if (output_width != 0)
+     return false;
+ 
    if (TARGET_SVE)
      return aarch64_sve_valid_immediate (ival, imode, info, which);
    return false;
diff -Nrcpad gcc-17-20260614/gcc/config/arm/arm.cc gcc-17-20260621/gcc/config/arm/arm.cc
*** gcc-17-20260614/gcc/config/arm/arm.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/config/arm/arm.cc	Sun Jun 21 22:32:06 2026
*************** arm_builtin_vectorization_cost (enum vec
*** 12732,12737 ****
--- 12732,12738 ----
          return current_tune->vec_costs->vec_stmt_cost;
  
        case vec_construct:
+       case vec_deconstruct:
  	elements = TYPE_VECTOR_SUBPARTS (vectype);
  	return elements / 2 + 1;
  
diff -Nrcpad gcc-17-20260614/gcc/config/avr/avr-c.cc gcc-17-20260621/gcc/config/avr/avr-c.cc
*** gcc-17-20260614/gcc/config/avr/avr-c.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/config/avr/avr-c.cc	Sun Jun 21 22:32:06 2026
*************** avr_cpu_cpp_builtins (cpp_reader *pfile)
*** 529,535 ****
  	    && avr_addr_space_supported_p ((addr_space_t) i))
  	  {
  	    const char *name = avr_addrspace[i].name;
! 	    char *Name = (char*) alloca (1 + strlen (name));
  
  	    cpp_define (pfile, avr_toupper (Name, name));
  	  }
--- 529,535 ----
  	    && avr_addr_space_supported_p ((addr_space_t) i))
  	  {
  	    const char *name = avr_addrspace[i].name;
! 	    char *Name = XALLOCAVEC (char, 1 + strlen (name));
  
  	    cpp_define (pfile, avr_toupper (Name, name));
  	  }
diff -Nrcpad gcc-17-20260614/gcc/config/avr/avr-log.cc gcc-17-20260621/gcc/config/avr/avr-log.cc
*** gcc-17-20260614/gcc/config/avr/avr-log.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/config/avr/avr-log.cc	Sun Jun 21 22:32:06 2026
*************** avr_log_set_avr_log (void)
*** 348,354 ****
      {
        /* Adding , at beginning and end of string makes searching easier.  */
  
!       char *str = (char*) alloca (3 + strlen (avropt_log_details));
        bool info;
  
        str[0] = ',';
--- 348,354 ----
      {
        /* Adding , at beginning and end of string makes searching easier.  */
  
!       char *str = XALLOCAVEC (char, 3 + strlen (avropt_log_details));
        bool info;
  
        str[0] = ',';
diff -Nrcpad gcc-17-20260614/gcc/config/avr/avr-protos.h gcc-17-20260621/gcc/config/avr/avr-protos.h
*** gcc-17-20260614/gcc/config/avr/avr-protos.h	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/config/avr/avr-protos.h	Sun Jun 21 22:32:06 2026
*************** extern const char* avr_out_xload (rtx_in
*** 119,124 ****
--- 119,125 ----
  extern const char* avr_out_fload (rtx_insn *, rtx*, int*);
  extern const char* avr_out_cpymem (rtx_insn *, rtx*, int*);
  extern const char* avr_out_insert_bits (rtx*, int*);
+ extern const char* avr_out_delay_loop (rtx_insn*, rtx*, int*);
  extern bool avr_popcount_each_byte (rtx, int, int);
  extern bool avr_xor_noclobber_dconst (rtx, int);
  extern bool avr_has_nibble_0xf (rtx);
diff -Nrcpad gcc-17-20260614/gcc/config/avr/avr.cc gcc-17-20260621/gcc/config/avr/avr.cc
*** gcc-17-20260614/gcc/config/avr/avr.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/config/avr/avr.cc	Sun Jun 21 22:32:06 2026
*************** avr_adjust_insn_length (rtx_insn *insn,
*** 11489,11494 ****
--- 11489,11495 ----
      case ADJUST_LEN_ADD_GE0: avr_out_add_msb (insn, op, GE, &len); break;
      case ADJUST_LEN_ADD_LT0: avr_out_add_msb (insn, op, LT, &len); break;
  
+     case ADJUST_LEN_DELAY_LOOP: avr_out_delay_loop (insn, op, &len); break;
      case ADJUST_LEN_INSV_NOTBIT: avr_out_insert_notbit (insn, op, &len); break;
  
      default:
*************** avr_progmem_p (tree decl, tree attribute
*** 11897,11907 ****
        != lookup_attribute ("progmem", attributes))
      return -1;
  
!   tree a = decl;
! 
!   do
!     a = TREE_TYPE (a);
!   while (TREE_CODE (a) == ARRAY_TYPE);
  
    if (a == error_mark_node)
      return 0;
--- 11898,11904 ----
        != lookup_attribute ("progmem", attributes))
      return -1;
  
!   tree a = strip_array_types (TREE_TYPE (decl));
  
    if (a == error_mark_node)
      return 0;
*************** avr_decl_absdata_p (tree decl, tree attr
*** 11932,11939 ****
  static addr_space_t
  avr_nonconst_pointer_addrspace (tree typ)
  {
!   while (ARRAY_TYPE == TREE_CODE (typ))
!     typ = TREE_TYPE (typ);
  
    if (POINTER_TYPE_P (typ))
      {
--- 11929,11935 ----
  static addr_space_t
  avr_nonconst_pointer_addrspace (tree typ)
  {
!   typ = strip_array_types (typ);
  
    if (POINTER_TYPE_P (typ))
      {
*************** avr_nonconst_pointer_addrspace (tree typ
*** 11946,11953 ****
  
        /* "Ordinary" pointers... */
  
!       while (TREE_CODE (target) == ARRAY_TYPE)
! 	target = TREE_TYPE (target);
  
        /* Pointers to non-generic address space must be const.  */
  
--- 11942,11948 ----
  
        /* "Ordinary" pointers... */
  
!       target = strip_array_types (target);
  
        /* Pointers to non-generic address space must be const.  */
  
*************** avr_insert_attributes (tree node, tree *
*** 12170,12183 ****
        && (TREE_STATIC (node) || DECL_EXTERNAL (node))
        && avr_progmem_p (node, *attributes))
      {
-       tree node0 = node;
- 
        /* For C++, we have to peel arrays in order to get correct
  	 determination of readonlyness.  */
  
!       do
! 	node0 = TREE_TYPE (node0);
!       while (TREE_CODE (node0) == ARRAY_TYPE);
  
        if (error_mark_node == node0)
  	return;
--- 12165,12174 ----
        && (TREE_STATIC (node) || DECL_EXTERNAL (node))
        && avr_progmem_p (node, *attributes))
      {
        /* For C++, we have to peel arrays in order to get correct
  	 determination of readonlyness.  */
  
!       tree node0 = strip_array_types (TREE_TYPE (node));
  
        if (error_mark_node == node0)
  	return;
*************** avr_decl_maybe_lds_p (tree node)
*** 12451,12459 ****
  
    // C++ requires peeling arrays.
  
!   do
!     node = TREE_TYPE (node);
!   while (ARRAY_TYPE == TREE_CODE (node));
  
    return (node != error_mark_node
  	  && !TYPE_READONLY (node));
--- 12442,12448 ----
  
    // C++ requires peeling arrays.
  
!   node = strip_array_types (TREE_TYPE (node));
  
    return (node != error_mark_node
  	  && !TYPE_READONLY (node));
*************** static void
*** 15800,15861 ****
  avr_expand_delay_cycles (rtx operands0)
  {
    unsigned HOST_WIDE_INT cycles = UINTVAL (operands0) & GET_MODE_MASK (SImode);
!   unsigned HOST_WIDE_INT cycles_used;
!   unsigned HOST_WIDE_INT loop_count;
  
!   if (IN_RANGE (cycles, 83886082, 0xFFFFFFFF))
      {
!       loop_count = ((cycles - 9) / 6) + 1;
!       cycles_used = ((loop_count - 1) * 6) + 9;
!       emit_insn (gen_delay_cycles_4 (gen_int_mode (loop_count, SImode),
! 				     avr_mem_clobber ()));
!       cycles -= cycles_used;
      }
! 
!   if (IN_RANGE (cycles, 262145, 83886081))
      {
!       loop_count = ((cycles - 7) / 5) + 1;
!       if (loop_count > 0xFFFFFF)
! 	loop_count = 0xFFFFFF;
!       cycles_used = ((loop_count - 1) * 5) + 7;
!       emit_insn (gen_delay_cycles_3 (gen_int_mode (loop_count, SImode),
! 				     avr_mem_clobber ()));
!       cycles -= cycles_used;
      }
! 
!   if (IN_RANGE (cycles, 768, 262144))
      {
!       loop_count = ((cycles - 5) / 4) + 1;
!       if (loop_count > 0xFFFF)
! 	loop_count = 0xFFFF;
!       cycles_used = ((loop_count - 1) * 4) + 5;
!       emit_insn (gen_delay_cycles_2 (gen_int_mode (loop_count, HImode),
! 				     avr_mem_clobber ()));
!       cycles -= cycles_used;
      }
  
!   if (IN_RANGE (cycles, 6, 767))
      {
!       loop_count = cycles / 3;
!       if (loop_count > 255)
! 	loop_count = 255;
!       cycles_used = loop_count * 3;
!       emit_insn (gen_delay_cycles_1 (gen_int_mode (loop_count, QImode),
! 				     avr_mem_clobber ()));
!       cycles -= cycles_used;
      }
  
!   while (cycles >= 2)
      {
!       emit_insn (gen_nopv (GEN_INT (2)));
!       cycles -= 2;
      }
  
!   if (cycles == 1)
      {
!       emit_insn (gen_nopv (GEN_INT (1)));
!       cycles--;
      }
  }
  
  
--- 15789,15926 ----
  avr_expand_delay_cycles (rtx operands0)
  {
    unsigned HOST_WIDE_INT cycles = UINTVAL (operands0) & GET_MODE_MASK (SImode);
!   rtx memv = avr_mem_clobber ();
  
!   if (cycles <= 6)
      {
!       // No loop needed, a sequence of NOPs will do it.
      }
!   // Including LDIs, an N-byte loop takes
!   //
!   //    N + loop_count * (N + 2) - 1  cycles
!   //
!   // where loop_count denotes the start value of the N-byte loop counter.
!   // The maximum value that can be loaded into loop_count is  2^{8 * N},
!   // where the maxmium value is realized by loop_count = 0.
!   // Up to  N + 2 - 1  cycles can be added by trailing NOPs without
!   // impeding the loop_count calculation, so that we arrive at a
!   // condition of
!   //
!   //    cycles < ((N + 2) << (8 * N)) + 2 * N + 1
!   //
!   // for the maximal delay that can be achieved with an N-byte loop.
!   else if (cycles < (3u << 8) + 0 + 3)
      {
!       uint64_t loop_count = cycles / 3;
!       cycles -= 3 * loop_count;
!       emit_insn (gen_delay_cycles_1 (gen_int_mode (loop_count, QImode), memv));
      }
!   else if (cycles < (4u << 16) + 1 + 4)
      {
!       uint64_t loop_count = (cycles - 1) / 4;
!       cycles -= 4 * loop_count + 1;
!       emit_insn (gen_delay_cycles_2 (gen_int_mode (loop_count, HImode), memv));
!     }
!   else if (cycles < (5u << 24) + 2 + 5)
!     {
!       uint64_t loop_count = (cycles - 2) / 5;
!       cycles -= 5 * loop_count + 2;
!       emit_insn (gen_delay_cycles_3 (gen_int_mode (loop_count, SImode), memv));
!     }
!   else if (cycles < ((uint64_t) 6u << 32) + 3 + 6)
!     {
!       uint64_t loop_count = (cycles - 3) / 6;
!       cycles -= 6 * loop_count + 3;
!       emit_insn (gen_delay_cycles_4 (gen_int_mode (loop_count, SImode), memv));
      }
  
!   for (; cycles >= 2; cycles -= 2)
!     emit_insn (gen_nopv (GEN_INT (2)));
! 
!   if (cycles == 1)
!     emit_insn (gen_nopv (GEN_INT (1)));
! }
! 
! 
! /* Output a delay loop generated by __builtin_avr_delay_cycles.
!    XOP[0] is the loop count.  A loop count of 0 represents a power of 2.
!    XOP[1] is a volatile memory tag and unused here.
!    XOP[2]... are QImode scratch regs >= R16.
!    INSN is a PARALLEL with an UNSPECV_DELAY_CYCLES as its first element.
!    The 2nd element of that unspecv is a CONST_INT specifying the number
!    of loop bytes.   Returns "".
!    PLEN != 0: Set *PLEN to the code length in words.  Don't output anything.
!    PLEN == 0: Output instructions.  */
! 
! const char *
! avr_out_delay_loop (rtx_insn *insn, rtx *xop, int *plen)
! {
!   rtx xunspecv = XVECEXP (PATTERN (insn), 0, 0);
!   rtx xbytes = XVECEXP (xunspecv, 0, 1);
!   gcc_assert (XINT (xunspecv, 1) == UNSPECV_DELAY_CYCLES);
!   const int n_bytes = INTVAL (xbytes);
! 
!   // Gather the scratch regs until rmask's bits represent all of them.
!   unsigned rmask = 0;
!   for (int i = 2; popcount_hwi (rmask) < n_bytes; ++i)
!     for (auto regno = REGNO (xop[i]); regno < END_REGNO (xop[i]); ++regno)
!       rmask |= 1u << regno;
! 
!   // Set xregs[] to the scratch regs such that SBIW becomes more likely.
!   rtx xregs[4];
! 
!   // Go search a reg that can do SBIW.
!   bool sbiw_p = false;
!   for (int regno = REG_24; regno < REG_32; regno += 2)
!     if (AVR_HAVE_ADIW && (3 & (rmask >> regno)) == 3)
!       {
! 	rmask &= ~(3u << regno);
! 	xregs[0] = all_regs_rtx[regno];
! 	xregs[1] = all_regs_rtx[regno + 1];
! 	sbiw_p = true;
! 	break;
!       }
! 
!   // Also gather the remaining regs into xregs[].
!   for (int i = 2 * sbiw_p; rmask != 0; ++i)
      {
!       gcc_assert (i < n_bytes);
!       const int regno = ctz_hwi (rmask);
!       xregs[i] = all_regs_rtx[regno];
!       rmask &= ~(1u << regno);
      }
  
!   // Now we have all the information needed for instruction output.
! 
!   if (plen)
!     *plen = 0;
! 
!   // Print the number of cycles consumed by the LDIs and the loop.
!   if (flag_verbose_asm || flag_print_asm_name)
      {
!       const auto n_loops = xop[0] == const0_rtx
! 	? (unsigned HOST_WIDE_INT) 1 << (8 * n_bytes)
! 	: UINTVAL (xop[0]);
!       const uint64_t n_cycles = n_bytes + n_loops * (2 + n_bytes) - 1;
!       rtx xcycles = gen_int_mode (n_cycles, DImode);
!       avr_asm_len (";; cycles = %0", &xcycles, plen, 0);
      }
  
!   // Load the loop count into them scratch regs.
!   for (int i = 0; i < n_bytes; ++i)
      {
!       rtx op[2] = { xregs[i], avr_byte (xop[0], i) };
!       avr_asm_len ("ldi %0,%1", op, plen, 1);
      }
+ 
+   // Loop body: xregs[] -= 1.
+   avr_asm_len (sbiw_p
+ 	       ? "1: sbiw %0,1"
+ 	       : "1: subi %0,1", xregs, plen, 1);
+   for (int i = 1 + sbiw_p; i < n_bytes; ++i)
+     avr_asm_len ("sbci %0,0", &xregs[i], plen, 1);
+ 
+   return avr_asm_len ("brne 1b", xop, plen, 1);
  }
  
  
*************** avr_init_builtins (void)
*** 16452,16458 ****
    {									\
      int id = AVR_BUILTIN_ ## NAME;					\
      const char *Name = "__builtin_avr_" #NAME;				\
!     char *name = (char *) alloca (1 + strlen (Name));			\
  									\
      gcc_assert (id < AVR_BUILTIN_COUNT);				\
      avr_bdesc[id].fndecl						\
--- 16517,16523 ----
    {									\
      int id = AVR_BUILTIN_ ## NAME;					\
      const char *Name = "__builtin_avr_" #NAME;				\
!     char *name = XALLOCAVEC (char, 1 + strlen (Name));			\
  									\
      gcc_assert (id < AVR_BUILTIN_COUNT);				\
      avr_bdesc[id].fndecl						\
diff -Nrcpad gcc-17-20260614/gcc/config/avr/avr.md gcc-17-20260621/gcc/config/avr/avr.md
*** gcc-17-20260614/gcc/config/avr/avr.md	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/config/avr/avr.md	Sun Jun 21 22:32:06 2026
***************
*** 170,176 ****
     ashlsi, ashrsi, lshrsi,
     ashlpsi, ashrpsi, lshrpsi,
     add_lt0, add_ge0,
!    insert_bits, insv_notbit, insv, set_some,
     add_set_ZN, add_set_N, cmp_uext, cmp_sext, cmp_lsr,
     no"
    (const_string "no"))
--- 170,176 ----
     ashlsi, ashrsi, lshrsi,
     ashlpsi, ashrpsi, lshrpsi,
     add_lt0, add_ge0,
!    insert_bits, insv_notbit, insv, set_some, delay_loop,
     add_set_ZN, add_set_N, cmp_uext, cmp_sext, cmp_lsr,
     no"
    (const_string "no"))
***************
*** 8312,8350 ****
     (clobber (match_scratch:QI 2 "=&d"))
     (clobber (reg:CC REG_CC))]
    "reload_completed"
!   "ldi %2,lo8(%0)
! 1:	dec %2
! 	brne 1b"
!   [(set_attr "length" "3")])
  
  (define_insn_and_split "delay_cycles_2"
!   [(unspec_volatile [(match_operand:HI 0 "const_int_operand" "n,n")
                       (const_int 2)]
                      UNSPECV_DELAY_CYCLES)
     (set (match_operand:BLK 1 "" "")
          (unspec_volatile:BLK [(match_dup 1)] UNSPECV_MEMORY_BARRIER))
!    (clobber (match_scratch:HI 2 "=&w,&d"))]
    ""
    "#"
    "&& reload_completed"
    [(scratch)]
!   { DONE_ADD_CCC }
!   [(set_attr "isa" "adiw,no_adiw")])
  
  (define_insn "*delay_cycles_2"
!   [(unspec_volatile [(match_operand:HI 0 "const_int_operand" "n,n")
                       (const_int 2)]
                      UNSPECV_DELAY_CYCLES)
     (set (match_operand:BLK 1 "" "")
          (unspec_volatile:BLK [(match_dup 1)] UNSPECV_MEMORY_BARRIER))
!    (clobber (match_scratch:HI 2 "=&w,&d"))
     (clobber (reg:CC REG_CC))]
    "reload_completed"
!   "@
! 	ldi %A2,lo8(%0)\;ldi %B2,hi8(%0)\n1:	sbiw %A2,1\;brne 1b
! 	ldi %A2,lo8(%0)\;ldi %B2,hi8(%0)\n1:	subi %A2,1\;sbci %B2,0\;brne 1b"
!   [(set_attr "length" "4,5")
!    (set_attr "isa" "adiw,no_adiw")])
  
  (define_insn_and_split "delay_cycles_3"
    [(unspec_volatile [(match_operand:SI 0 "const_int_operand" "n")
--- 8312,8350 ----
     (clobber (match_scratch:QI 2 "=&d"))
     (clobber (reg:CC REG_CC))]
    "reload_completed"
!   {
!     return avr_out_delay_loop (insn, operands, nullptr);
!   }
!   [(set_attr "adjust_len" "delay_loop")])
  
  (define_insn_and_split "delay_cycles_2"
!   [(unspec_volatile [(match_operand:HI 0 "const_int_operand" "n")
                       (const_int 2)]
                      UNSPECV_DELAY_CYCLES)
     (set (match_operand:BLK 1 "" "")
          (unspec_volatile:BLK [(match_dup 1)] UNSPECV_MEMORY_BARRIER))
!    (clobber (match_scratch:QI 2 "=&d"))
!    (clobber (match_scratch:QI 3 "=&d"))]
    ""
    "#"
    "&& reload_completed"
    [(scratch)]
!   { DONE_ADD_CCC })
  
  (define_insn "*delay_cycles_2"
!   [(unspec_volatile [(match_operand:HI 0 "const_int_operand" "n")
                       (const_int 2)]
                      UNSPECV_DELAY_CYCLES)
     (set (match_operand:BLK 1 "" "")
          (unspec_volatile:BLK [(match_dup 1)] UNSPECV_MEMORY_BARRIER))
!    (clobber (match_scratch:QI 2 "=&d"))
!    (clobber (match_scratch:QI 3 "=&d"))
     (clobber (reg:CC REG_CC))]
    "reload_completed"
!   {
!     return avr_out_delay_loop (insn, operands, nullptr);
!   }
!   [(set_attr "adjust_len" "delay_loop")])
  
  (define_insn_and_split "delay_cycles_3"
    [(unspec_volatile [(match_operand:SI 0 "const_int_operand" "n")
***************
*** 8372,8385 ****
     (clobber (match_scratch:QI 4 "=&d"))
     (clobber (reg:CC REG_CC))]
    "reload_completed"
!   "ldi %2,lo8(%0)
! 	ldi %3,hi8(%0)
! 	ldi %4,hlo8(%0)
! 1:	subi %2,1
! 	sbci %3,0
! 	sbci %4,0
! 	brne 1b"
!   [(set_attr "length" "7")])
  
  (define_insn_and_split "delay_cycles_4"
    [(unspec_volatile [(match_operand:SI 0 "const_int_operand" "n")
--- 8372,8381 ----
     (clobber (match_scratch:QI 4 "=&d"))
     (clobber (reg:CC REG_CC))]
    "reload_completed"
!   {
!     return avr_out_delay_loop (insn, operands, nullptr);
!   }
!   [(set_attr "adjust_len" "delay_loop")])
  
  (define_insn_and_split "delay_cycles_4"
    [(unspec_volatile [(match_operand:SI 0 "const_int_operand" "n")
***************
*** 8409,8424 ****
     (clobber (match_scratch:QI 5 "=&d"))
     (clobber (reg:CC REG_CC))]
    "reload_completed"
!   "ldi %2,lo8(%0)
! 	ldi %3,hi8(%0)
! 	ldi %4,hlo8(%0)
! 	ldi %5,hhi8(%0)
! 1:	subi %2,1
! 	sbci %3,0
! 	sbci %4,0
! 	sbci %5,0
! 	brne 1b"
!   [(set_attr "length" "9")])
  
  
  ;; __builtin_avr_insert_bits
--- 8405,8414 ----
     (clobber (match_scratch:QI 5 "=&d"))
     (clobber (reg:CC REG_CC))]
    "reload_completed"
!   {
!     return avr_out_delay_loop (insn, operands, nullptr);
!   }
!   [(set_attr "adjust_len" "delay_loop")])
  
  
  ;; __builtin_avr_insert_bits
diff -Nrcpad gcc-17-20260614/gcc/config/i386/c86-4g-m7.md gcc-17-20260621/gcc/config/i386/c86-4g-m7.md
*** gcc-17-20260614/gcc/config/i386/c86-4g-m7.md	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/config/i386/c86-4g-m7.md	Sun Jun 21 22:32:06 2026
***************
*** 117,130 ****
  			     (and (eq_attr "type" "imov")
  				  (and (eq_attr "c86_decode" "vector")
  				       (eq_attr "memory" "none"))))
! 			 "c86-4g-m7-direct")
  
  (define_insn_reservation "c86_4g_m7_imov_xchg_load" 5
  			(and (eq_attr "cpu" "c86_4g_m7")
  			     (and (eq_attr "type" "imov")
  				  (and (eq_attr "c86_decode" "vector")
  				       (eq_attr "memory" "!none"))))
! 			 "c86-4g-m7-direct,c86-4g-m7-load")
  
  (define_insn_reservation "c86_4g_m7_imovx_cwde" 2
  			(and (eq_attr "cpu" "c86_4g_m7")
--- 117,130 ----
  			     (and (eq_attr "type" "imov")
  				  (and (eq_attr "c86_decode" "vector")
  				       (eq_attr "memory" "none"))))
! 			 "c86-4g-m7-vector")
  
  (define_insn_reservation "c86_4g_m7_imov_xchg_load" 5
  			(and (eq_attr "cpu" "c86_4g_m7")
  			     (and (eq_attr "type" "imov")
  				  (and (eq_attr "c86_decode" "vector")
  				       (eq_attr "memory" "!none"))))
! 			 "c86-4g-m7-vector,c86-4g-m7-load")
  
  (define_insn_reservation "c86_4g_m7_imovx_cwde" 2
  			(and (eq_attr "cpu" "c86_4g_m7")
***************
*** 322,341 ****
  (define_insn_reservation "c86_4g_m7_call" 1
  			 (and (eq_attr "cpu" "c86_4g_m7")
  			      (eq_attr "type" "call,callv"))
! 			 "c86-4g-m7-double,c86-4g-m7-ieu0|c86-4g-m7-bru0,c86-4g-m7-store")
  
  ;; IBR
  (define_insn_reservation "c86_4g_m7_branch" 1
  			 (and (eq_attr "cpu" "c86_4g_m7")
  			      (and (eq_attr "type" "ibr")
  				   (eq_attr "memory" "none")))
! 			  "c86-4g-m7-direct,c86-4g-m7-ieu0|c86-4g-m7-bru0")
  
  (define_insn_reservation "c86_4g_m7_branch_load" 5
  			 (and (eq_attr "cpu" "c86_4g_m7")
  			      (and (eq_attr "type" "ibr")
  				   (eq_attr "memory" "load")))
! 			  "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-ieu0|c86-4g-m7-bru0")
  
  ;; LEA
  (define_insn_reservation "c86_4g_m7_lea" 1
--- 322,341 ----
  (define_insn_reservation "c86_4g_m7_call" 1
  			 (and (eq_attr "cpu" "c86_4g_m7")
  			      (eq_attr "type" "call,callv"))
! 			 "c86-4g-m7-double,c86-4g-m7-store,c86-4g-m7-bru0")
  
  ;; IBR
  (define_insn_reservation "c86_4g_m7_branch" 1
  			 (and (eq_attr "cpu" "c86_4g_m7")
  			      (and (eq_attr "type" "ibr")
  				   (eq_attr "memory" "none")))
! 			  "c86-4g-m7-direct,c86-4g-m7-bru0")
  
  (define_insn_reservation "c86_4g_m7_branch_load" 5
  			 (and (eq_attr "cpu" "c86_4g_m7")
  			      (and (eq_attr "type" "ibr")
  				   (eq_attr "memory" "load")))
! 			  "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-bru0")
  
  ;; LEA
  (define_insn_reservation "c86_4g_m7_lea" 1
***************
*** 451,457 ****
  				   (and (eq_attr "c86_decode" "direct")
  				    (and (eq_attr "c86_attr" "other")
  					 (eq_attr "memory" "store")))))
! 			 "c86-4g-m7-direct,c86-4g-m7-fpu3")
  
  (define_insn_reservation "c86_4g_m7_fp_spc" 6
  			 (and (eq_attr "cpu" "c86_4g_m7")
--- 451,457 ----
  				   (and (eq_attr "c86_decode" "direct")
  				    (and (eq_attr "c86_attr" "other")
  					 (eq_attr "memory" "store")))))
! 			 "c86-4g-m7-direct,c86-4g-m7-store,c86-4g-m7-fpu3")
  
  (define_insn_reservation "c86_4g_m7_fp_spc" 6
  			 (and (eq_attr "cpu" "c86_4g_m7")
***************
*** 632,638 ****
  				   (and (eq_attr "c86_attr" "insr")
  				    (and (eq_attr "prefix" "orig")
  					 (eq_attr "memory" "none")))))
! 			 "c86-4g-m7-double,c86-4g-m7-ieu2,c86-4g-m7-fpu")
  
  (define_insn_reservation "c86_4g_m7_sse_pinsr_reg_load" 3
  			 (and (eq_attr "cpu" "c86_4g_m7")
--- 632,638 ----
  				   (and (eq_attr "c86_attr" "insr")
  				    (and (eq_attr "prefix" "orig")
  					 (eq_attr "memory" "none")))))
! 			 "c86-4g-m7-direct,c86-4g-m7-fpu")
  
  (define_insn_reservation "c86_4g_m7_sse_pinsr_reg_load" 3
  			 (and (eq_attr "cpu" "c86_4g_m7")
***************
*** 755,761 ****
  				    (and (eq_attr "mode" "V8SF,V4DF,OI")
  				     (and (eq_attr "prefix" "evex")
  					  (eq_attr "memory" "none"))))))
! 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_2x2,c86-4g-m7-fpu_0_2x2")
  
  (define_insn_reservation "c86_4g_m7_avx512_insertx_ymem" 10
  			 (and (eq_attr "cpu" "c86_4g_m7")
--- 755,761 ----
  				    (and (eq_attr "mode" "V8SF,V4DF,OI")
  				     (and (eq_attr "prefix" "evex")
  					  (eq_attr "memory" "none"))))))
! 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_2,c86-4g-m7-fpu_0_2")
  
  (define_insn_reservation "c86_4g_m7_avx512_insertx_ymem" 10
  			 (and (eq_attr "cpu" "c86_4g_m7")
***************
*** 764,770 ****
  				    (and (eq_attr "mode" "V8SF,V4DF,OI")
  				     (and (eq_attr "prefix" "evex")
  					  (eq_attr "memory" "load,both"))))))
! 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_2x2,c86-4g-m7-fpu_0_2x2")
  
  (define_insn_reservation "c86_4g_m7_avx512_insertx_zxmm" 5
  			 (and (eq_attr "cpu" "c86_4g_m7")
--- 764,770 ----
  				    (and (eq_attr "mode" "V8SF,V4DF,OI")
  				     (and (eq_attr "prefix" "evex")
  					  (eq_attr "memory" "load,both"))))))
! 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-store,c86-4g-m7-fpu_0_2,c86-4g-m7-fpu_0_2")
  
  (define_insn_reservation "c86_4g_m7_avx512_insertx_zxmm" 5
  			 (and (eq_attr "cpu" "c86_4g_m7")
***************
*** 773,779 ****
  				    (and (eq_attr "mode" "V16SF,V8DF,XI")
  				    (and (match_test "GET_MODE_SIZE (GET_MODE (operands[2]))==16")
  					 (match_operand 2 "register_operand"))))))
! 			 "c86-4g-m7-double,c86-4g-m7-fpu_0_2x4,c86-4g-m7-fpu_0_2x4")
  
  (define_insn_reservation "c86_4g_m7_avx512_insertx_zxmem" 12
  			 (and (eq_attr "cpu" "c86_4g_m7")
--- 773,779 ----
  				    (and (eq_attr "mode" "V16SF,V8DF,XI")
  				    (and (match_test "GET_MODE_SIZE (GET_MODE (operands[2]))==16")
  					 (match_operand 2 "register_operand"))))))
! 			 "c86-4g-m7-double,c86-4g-m7-fpu_0_2x2,c86-4g-m7-fpu_0_2x2")
  
  (define_insn_reservation "c86_4g_m7_avx512_insertx_zxmem" 12
  			 (and (eq_attr "cpu" "c86_4g_m7")
***************
*** 782,788 ****
  				    (and (eq_attr "mode" "V16SF,V8DF,XI")
  				    (and (match_test "GET_MODE_SIZE (GET_MODE (operands[2]))==16")
  					  (match_operand 2 "memory_operand"))))))
! 			 "c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu_0_2x4,c86-4g-m7-fpu_0_2x4")
  
  (define_insn_reservation "c86_4g_m7_avx512_insertx_zymm" 1
  			 (and (eq_attr "cpu" "c86_4g_m7")
--- 782,788 ----
  				    (and (eq_attr "mode" "V16SF,V8DF,XI")
  				    (and (match_test "GET_MODE_SIZE (GET_MODE (operands[2]))==16")
  					  (match_operand 2 "memory_operand"))))))
! 			 "c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu_0_2x2,c86-4g-m7-fpu_0_2x2")
  
  (define_insn_reservation "c86_4g_m7_avx512_insertx_zymm" 1
  			 (and (eq_attr "cpu" "c86_4g_m7")
***************
*** 945,951 ****
  				   (and (eq_attr "c86_attr" "abs")
  				    (and (eq_attr "prefix" "evex")
  					 (eq_attr "memory" "load,both")))))
! 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu")
  
  ;; SIGN
  (define_insn_reservation "c86_4g_m7_avx_sign" 1
--- 945,951 ----
  				   (and (eq_attr "c86_attr" "abs")
  				    (and (eq_attr "prefix" "evex")
  					 (eq_attr "memory" "load,both")))))
! 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-store,c86-4g-m7-fpu")
  
  ;; SIGN
  (define_insn_reservation "c86_4g_m7_avx_sign" 1
***************
*** 953,966 ****
  			      (and (eq_attr "type" "sselog1")
  				   (and (eq_attr "c86_attr" "sign")
  					(eq_attr "memory" "none"))))
! 			 "c86-4g-m7-direct,c86-4g-m7-fpu0|c86-4g-m7-fpu3")
  
  (define_insn_reservation "c86_4g_m7_avx_sign_load" 8
  			 (and (eq_attr "cpu" "c86_4g_m7")
  			      (and (eq_attr "type" "sselog1")
  				   (and (eq_attr "c86_attr" "sign")
  					(eq_attr "memory" "!none"))))
! 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu0|c86-4g-m7-fpu3")
  
  ;; BLEND/ABS/AES
  (define_insn_reservation "c86_4g_m7_avx_blend" 1
--- 953,966 ----
  			      (and (eq_attr "type" "sselog1")
  				   (and (eq_attr "c86_attr" "sign")
  					(eq_attr "memory" "none"))))
! 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_3")
  
  (define_insn_reservation "c86_4g_m7_avx_sign_load" 8
  			 (and (eq_attr "cpu" "c86_4g_m7")
  			      (and (eq_attr "type" "sselog1")
  				   (and (eq_attr "c86_attr" "sign")
  					(eq_attr "memory" "!none"))))
! 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_3")
  
  ;; BLEND/ABS/AES
  (define_insn_reservation "c86_4g_m7_avx_blend" 1
***************
*** 1001,1007 ****
  				   (and (eq_attr "c86_attr" "aes")
  				    (and (eq_attr "prefix" "!evex")
  					 (eq_attr "memory" "none")))))
! 			 "c86-4g-m7-direct,c86-4g-m7-fpu0|c86-4g-m7-fpu1")
  
  (define_insn_reservation "c86_4g_m7_avx_aes_load" 10
  			 (and (eq_attr "cpu" "c86_4g_m7")
--- 1001,1007 ----
  				   (and (eq_attr "c86_attr" "aes")
  				    (and (eq_attr "prefix" "!evex")
  					 (eq_attr "memory" "none")))))
! 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_1")
  
  (define_insn_reservation "c86_4g_m7_avx_aes_load" 10
  			 (and (eq_attr "cpu" "c86_4g_m7")
***************
*** 1009,1015 ****
  				   (and (eq_attr "c86_attr" "aes")
  				    (and (eq_attr "prefix" "!evex")
  					 (eq_attr "memory" "load")))))
! 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu0|c86-4g-m7-fpu1")
  
  ;; EXTR
  (define_insn_reservation "c86_4g_m7_extr" 5
--- 1009,1015 ----
  				   (and (eq_attr "c86_attr" "aes")
  				    (and (eq_attr "prefix" "!evex")
  					 (eq_attr "memory" "load")))))
! 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_1")
  
  ;; EXTR
  (define_insn_reservation "c86_4g_m7_extr" 5
***************
*** 1019,1029 ****
  					(eq_attr "memory" "none"))))
  			 "c86-4g-m7-double,c86-4g-m7-fpu1,c86-4g-m7-fpu_0_1")
  
! (define_insn_reservation "c86_4g_m7_extr_load" 12
  			 (and (eq_attr "cpu" "c86_4g_m7")
  			      (and (eq_attr "type" "sselog1,sselog,mmxcvt")
  				   (and (eq_attr "c86_attr" "extr")
! 					(eq_attr "memory" "!none"))))
  			 "c86-4g-m7-double,c86-4g-m7-store,c86-4g-m7-fpu1,c86-4g-m7-fpu_0_1")
  
  ;; SSECOMI
--- 1019,1029 ----
  					(eq_attr "memory" "none"))))
  			 "c86-4g-m7-double,c86-4g-m7-fpu1,c86-4g-m7-fpu_0_1")
  
! (define_insn_reservation "c86_4g_m7_extr_store" 12
  			 (and (eq_attr "cpu" "c86_4g_m7")
  			      (and (eq_attr "type" "sselog1,sselog,mmxcvt")
  				   (and (eq_attr "c86_attr" "extr")
! 					(eq_attr "memory" "store"))))
  			 "c86-4g-m7-double,c86-4g-m7-store,c86-4g-m7-fpu1,c86-4g-m7-fpu_0_1")
  
  ;; SSECOMI
***************
*** 1075,1088 ****
  			      (and (eq_attr "type" "sseimul")
  				   (and (eq_attr "prefix" "!evex")
  					(eq_attr "memory" "none"))))
! 			 "c86-4g-m7-direct,c86-4g-m7-fpu0|c86-4g-m7-fpu3")
  
  (define_insn_reservation "c86_4g_m7_avx_imul_mem" 10
  			 (and (eq_attr "cpu" "c86_4g_m7")
  			      (and (eq_attr "type" "sseimul")
  				   (and (eq_attr "prefix" "!evex")
  					(eq_attr "memory" "load"))))
! 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu0|c86-4g-m7-fpu3")
  
  ;; SSEMOV
  (define_insn_reservation "c86_4g_m7_avx512_mov_vmov" 1
--- 1075,1088 ----
  			      (and (eq_attr "type" "sseimul")
  				   (and (eq_attr "prefix" "!evex")
  					(eq_attr "memory" "none"))))
! 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_3")
  
  (define_insn_reservation "c86_4g_m7_avx_imul_mem" 10
  			 (and (eq_attr "cpu" "c86_4g_m7")
  			      (and (eq_attr "type" "sseimul")
  				   (and (eq_attr "prefix" "!evex")
  					(eq_attr "memory" "load"))))
! 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_3")
  
  ;; SSEMOV
  (define_insn_reservation "c86_4g_m7_avx512_mov_vmov" 1
***************
*** 1122,1128 ****
  				    (and (eq_attr "prefix" "evex")
  				     (and (eq_attr "mode" "OI,V8SF,V4DF")
  					  (eq_attr "memory" "load,both"))))))
! 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_2x2")
  
  (define_insn_reservation "c86_4g_m7_avx512_vpmovx_z" 5
  			 (and (eq_attr "cpu" "c86_4g_m7")
--- 1122,1128 ----
  				    (and (eq_attr "prefix" "evex")
  				     (and (eq_attr "mode" "OI,V8SF,V4DF")
  					  (eq_attr "memory" "load,both"))))))
! 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-store,c86-4g-m7-fpu_0_2x2")
  
  (define_insn_reservation "c86_4g_m7_avx512_vpmovx_z" 5
  			 (and (eq_attr "cpu" "c86_4g_m7")
***************
*** 1172,1178 ****
  				   (and (eq_attr "c86_attr" "vpmovx")
  				    (and (eq_attr "prefix" "!evex")
  					 (eq_attr "memory" "load,both")))))
! 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu1|c86-4g-m7-fpu2")
  
  ;; EXPAND
  (define_insn_reservation "c86_4g_m7_avx512_expand" 3
--- 1172,1178 ----
  				   (and (eq_attr "c86_attr" "vpmovx")
  				    (and (eq_attr "prefix" "!evex")
  					 (eq_attr "memory" "load,both")))))
! 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-store,c86-4g-m7-fpu1|c86-4g-m7-fpu2")
  
  ;; EXPAND
  (define_insn_reservation "c86_4g_m7_avx512_expand" 3
***************
*** 1301,1322 ****
  
  
  ;; SSEADD
! (define_insn_reservation "c86_4g_m7_avx512_sseadd_maxmin_xy" 1
  			 (and (eq_attr "cpu" "c86_4g_m7")
  			      (and (eq_attr "type" "sseadd,sse")
  				   (and (eq_attr "c86_attr" "maxmin")
  				    (and (eq_attr "prefix" "evex")
! 				      (and (eq_attr "memory" "none")
! 					   (eq_attr "memory" "none"))))))
  			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_2")
  
! (define_insn_reservation "c86_4g_m7_avx512_sseadd_maxmin_xy_load" 8
  			 (and (eq_attr "cpu" "c86_4g_m7")
  			      (and (eq_attr "type" "sseadd,sse")
  				   (and (eq_attr "c86_attr" "maxmin")
  				    (and (eq_attr "prefix" "evex")
! 				      (ior (eq_attr "memory" "load")
! 					   (eq_attr "memory" "load"))))))
  			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_2")
  
  (define_insn_reservation "c86_4g_m7_avx_sseadd_maxmin" 1
--- 1301,1320 ----
  
  
  ;; SSEADD
! (define_insn_reservation "c86_4g_m7_avx512_sseadd_maxmin" 1
  			 (and (eq_attr "cpu" "c86_4g_m7")
  			      (and (eq_attr "type" "sseadd,sse")
  				   (and (eq_attr "c86_attr" "maxmin")
  				    (and (eq_attr "prefix" "evex")
! 				      (eq_attr "memory" "none")))))
  			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_2")
  
! (define_insn_reservation "c86_4g_m7_avx512_sseadd_maxmin_load" 8
  			 (and (eq_attr "cpu" "c86_4g_m7")
  			      (and (eq_attr "type" "sseadd,sse")
  				   (and (eq_attr "c86_attr" "maxmin")
  				    (and (eq_attr "prefix" "evex")
! 				      (eq_attr "memory" "load")))))
  			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_2")
  
  (define_insn_reservation "c86_4g_m7_avx_sseadd_maxmin" 1
***************
*** 1352,1365 ****
  			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu2|c86-4g-m7-fpu3")
  
  ;; SUB/ADD
! (define_insn_reservation "c86_4g_m7_avx512_sseadd_xy" 3
  			 (and (eq_attr "cpu" "c86_4g_m7")
  			      (and (eq_attr "type" "sseadd")
  				   (and (eq_attr "c86_attr" "other")
  					  (eq_attr "memory" "none"))))
  			 "c86-4g-m7-direct,c86-4g-m7-fpu_1_3")
  
! (define_insn_reservation "c86_4g_m7_avx512_sseadd_xy_load" 10
  			 (and (eq_attr "cpu" "c86_4g_m7")
  			      (and (eq_attr "type" "sseadd")
  				   (and (eq_attr "c86_attr" "other")
--- 1350,1363 ----
  			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu2|c86-4g-m7-fpu3")
  
  ;; SUB/ADD
! (define_insn_reservation "c86_4g_m7_avx512_sseadd" 3
  			 (and (eq_attr "cpu" "c86_4g_m7")
  			      (and (eq_attr "type" "sseadd")
  				   (and (eq_attr "c86_attr" "other")
  					  (eq_attr "memory" "none"))))
  			 "c86-4g-m7-direct,c86-4g-m7-fpu_1_3")
  
! (define_insn_reservation "c86_4g_m7_avx512_sseadd_load" 10
  			 (and (eq_attr "cpu" "c86_4g_m7")
  			      (and (eq_attr "type" "sseadd")
  				   (and (eq_attr "c86_attr" "other")
***************
*** 1424,1430 ****
  				   (and (eq_attr "c86_attr" "sadbw")
  				    (and (eq_attr "prefix" "orig")
  					 (eq_attr "memory" "none")))))
! 			 "c86-4g-m7-direct,c86-4g-m7-fpu0|c86-4g-m7-fpu3")
  
  (define_insn_reservation "c86_4g_m7_sse_sseiadd_sadbw_mem" 10
  			 (and (eq_attr "cpu" "c86_4g_m7")
--- 1422,1428 ----
  				   (and (eq_attr "c86_attr" "sadbw")
  				    (and (eq_attr "prefix" "orig")
  					 (eq_attr "memory" "none")))))
! 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_3")
  
  (define_insn_reservation "c86_4g_m7_sse_sseiadd_sadbw_mem" 10
  			 (and (eq_attr "cpu" "c86_4g_m7")
***************
*** 1432,1438 ****
  				   (and (eq_attr "c86_attr" "sadbw")
  				    (and (eq_attr "prefix" "orig")
  					 (eq_attr "memory" "load")))))
! 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu0|c86-4g-m7-fpu3")
  
  (define_insn_reservation "c86_4g_m7_sse_sseiadd_madd" 3
  			 (and (eq_attr "cpu" "c86_4g_m7")
--- 1430,1436 ----
  				   (and (eq_attr "c86_attr" "sadbw")
  				    (and (eq_attr "prefix" "orig")
  					 (eq_attr "memory" "load")))))
! 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_3")
  
  (define_insn_reservation "c86_4g_m7_sse_sseiadd_madd" 3
  			 (and (eq_attr "cpu" "c86_4g_m7")
***************
*** 1611,1617 ****
  				    (and (eq_attr "mode" "XI")
  				     (and (eq_attr "c86_attr" "other,ptest")
  					  (eq_attr "memory" "none"))))))
! 			 "c86-4g-m7-double,c86-4g-m7-fpu,c86-4g-m7-fpu_1_3")
  
  (define_insn_reservation "c86_4g_m7_avx512_ssecmp_vp_z_load" 12
  			 (and (eq_attr "cpu" "c86_4g_m7")
--- 1609,1615 ----
  				    (and (eq_attr "mode" "XI")
  				     (and (eq_attr "c86_attr" "other,ptest")
  					  (eq_attr "memory" "none"))))))
! 			 "c86-4g-m7-vector,c86-4g-m7-fpu,c86-4g-m7-fpu_1_3")
  
  (define_insn_reservation "c86_4g_m7_avx512_ssecmp_vp_z_load" 12
  			 (and (eq_attr "cpu" "c86_4g_m7")
***************
*** 1620,1626 ****
  				    (and (eq_attr "mode" "XI")
  				     (and (eq_attr "c86_attr" "other,ptest")
  					  (eq_attr "memory" "load"))))))
! 			 "c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu,c86-4g-m7-fpu_1_3x2")
  
  (define_insn_reservation "c86_4g_m7_avx_ssecmp_vp" 1
  			 (and (eq_attr "cpu" "c86_4g_m7")
--- 1618,1624 ----
  				    (and (eq_attr "mode" "XI")
  				     (and (eq_attr "c86_attr" "other,ptest")
  					  (eq_attr "memory" "load"))))))
! 			 "c86-4g-m7-vector,c86-4g-m7-load,c86-4g-m7-fpu,c86-4g-m7-fpu_1_3x2")
  
  (define_insn_reservation "c86_4g_m7_avx_ssecmp_vp" 1
  			 (and (eq_attr "cpu" "c86_4g_m7")
***************
*** 1651,1657 ****
  				    (and (eq_attr "mode" "TI,OI")
  				     (and (eq_attr "c86_attr" "ptest")
  					  (eq_attr "memory" "load")))))
! 			 "c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu1,c86-4g-m7-fpu_1_3")
  
  ;; SSECVT
  (define_insn_reservation "c86_4g_m7_avx512_ssecvt_xy" 4
--- 1649,1655 ----
  				    (and (eq_attr "mode" "TI,OI")
  				     (and (eq_attr "c86_attr" "ptest")
  					  (eq_attr "memory" "load")))))
! 			 "c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu,c86-4g-m7-fpu_1_3")
  
  ;; SSECVT
  (define_insn_reservation "c86_4g_m7_avx512_ssecvt_xy" 4
***************
*** 2055,2061 ****
  				       (match_operand 1 "register_operand" "r"))))
  			 "c86-4g-m7-double,c86-4g-m7-fpu1,c86-4g-m7-fpu_1_3")
  
! (define_insn_reservation "c86_4g_m7_avx512_mskmov_k_m" 8
  			 (and (eq_attr "cpu" "c86_4g_m7")
  			      (and (eq_attr "type" "mskmov")
  				  (and (match_operand 0 "register_operand" "k")
--- 2053,2059 ----
  				       (match_operand 1 "register_operand" "r"))))
  			 "c86-4g-m7-double,c86-4g-m7-fpu1,c86-4g-m7-fpu_1_3")
  
! (define_insn_reservation "c86_4g_m7_avx512_mskmov_k_m" 9
  			 (and (eq_attr "cpu" "c86_4g_m7")
  			      (and (eq_attr "type" "mskmov")
  				  (and (match_operand 0 "register_operand" "k")
diff -Nrcpad gcc-17-20260614/gcc/config/i386/i386-features.cc gcc-17-20260621/gcc/config/i386/i386-features.cc
*** gcc-17-20260614/gcc/config/i386/i386-features.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/config/i386/i386-features.cc	Sun Jun 21 22:32:06 2026
*************** scalar_chain::convert_op (rtx *op, rtx_i
*** 1169,1175 ****
      {
        gcc_assert (SUBREG_P (*op));
        if (GET_MODE (*op) != vmode)
! 	*op = gen_lowpart (vmode, *op);
      }
  }
  
--- 1169,1187 ----
      {
        gcc_assert (SUBREG_P (*op));
        if (GET_MODE (*op) != vmode)
! 	{
! 	  rtx inner = SUBREG_REG (*op);
! 	  poly_uint64 byte = SUBREG_BYTE (*op);
! 	  if (targetm.modes_tieable_p (vmode, GET_MODE (inner))
! 	      && validate_subreg (vmode, GET_MODE (inner), inner, byte))
! 	    *op = gen_lowpart (vmode, *op);
! 	  else
! 	    {
! 	      tmp = gen_reg_rtx (GET_MODE (*op));
! 	      emit_insn_before (gen_rtx_SET (tmp, *op), insn);
! 	      *op = gen_rtx_SUBREG (vmode, tmp, 0);
! 	    }
! 	}
      }
  }
  
*************** replace_vector_const (machine_mode vecto
*** 3806,3812 ****
        SET_SRC (set) = replace;
        if (CONST_INT_P (replace))
  	{
! 	  dest = gen_rtx_SUBREG (scalar_mode, dest, 0);
  	  SET_DEST (set) = dest;
  	}
        /* Drop possible dead definitions.  */
--- 3818,3824 ----
        SET_SRC (set) = replace;
        if (CONST_INT_P (replace))
  	{
! 	  dest = gen_lowpart (scalar_mode, dest);
  	  SET_DEST (set) = dest;
  	}
        /* Drop possible dead definitions.  */
*************** ix86_broadcast_inner (rtx op, machine_mo
*** 4031,4036 ****
--- 4043,4053 ----
      return nullptr;
  
    rtx_insn *insn = DF_REF_INSN (ref);
+ 
+   /* Skip JUMP which happens with asm goto.  */
+   if (JUMP_P (insn))
+     return nullptr;
+ 
    rtx set = single_set (insn);
    if (!set)
      return nullptr;
diff -Nrcpad gcc-17-20260614/gcc/config/i386/i386.cc gcc-17-20260621/gcc/config/i386/i386.cc
*** gcc-17-20260614/gcc/config/i386/i386.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/config/i386/i386.cc	Sun Jun 21 22:32:06 2026
*************** ix86_insn_cost (rtx_insn *insn, bool spe
*** 22462,22468 ****
        == AVX_PARTIAL_XMM_UPDATE_TRUE)
      insn_cost += COSTS_N_INSNS (3);
  
!   return insn_cost + pattern_cost (PATTERN (insn), speed);
  }
  
  /* Return cost of SSE/AVX FP->FP conversion (extensions and truncates).  */
--- 22462,22483 ----
        == AVX_PARTIAL_XMM_UPDATE_TRUE)
      insn_cost += COSTS_N_INSNS (3);
  
!   rtx pat = PATTERN (insn);
!   /* A USE of a memory is more expensive than a use of a REG.
!      For example *<absneg>mode2_1's use of a signbit mask.  */
!   if (GET_CODE (pat) == PARALLEL)
!     {
!       for (int i = 0; i < XVECLEN (pat, 0); i++)
! 	{
! 	  rtx x = XVECEXP (pat, 0, i);
! 	  if (GET_CODE (x) == USE && MEM_P (XEXP (x, 0)))
! 	    insn_cost += !speed ? COSTS_N_BYTES (4)
! 				: TARGET_64BIT ? COSTS_N_INSNS (1) + 1
! 					       : COSTS_N_INSNS (3) + 1;
! 	}
!     }
! 
!   return insn_cost + pattern_cost (pat, speed);
  }
  
  /* Return cost of SSE/AVX FP->FP conversion (extensions and truncates).  */
*************** asm_preferred_eh_data_format (int code,
*** 25594,25599 ****
--- 25609,25639 ----
    return DW_EH_PE_absptr;
  }
  
+ /* Cost of constructing or destructing a vector in VECMODE from/to elements
+    of ELMODE.  */
+ static int
+ ix86_vector_cd_cost (machine_mode vecmode, machine_mode elmode)
+ {
+   if (GET_MODE_BITSIZE (vecmode) < 128)
+     return ((GET_MODE_BITSIZE (vecmode) / GET_MODE_BITSIZE (elmode) - 1)
+ 	    * ix86_cost->sse_op);
+ 
+   int n = GET_MODE_BITSIZE (vecmode) / 128;
+   int cost = 0;
+   /* Element inserts/extracts into/from N SSE vectors, the possible
+      GPR <-> XMM moves have to be accounted for elsewhere.  */
+   if (GET_MODE_BITSIZE (elmode) < 128)
+     cost += n * (128 / GET_MODE_BITSIZE (elmode) - 1) * ix86_cost->sse_op;
+   if (GET_MODE_BITSIZE (vecmode) >= 256
+       && GET_MODE_BITSIZE (elmode) < 256)
+     /* N/2 vinserti128/vextracti128 for SSE <-> AVX256.  */
+     cost += n * ix86_vec_cost (V32QImode, ix86_cost->sse_op) / 2;
+   if (GET_MODE_BITSIZE (vecmode) == 512)
+     /* One vinserti64x4/vextracti64x4 for AVX256 <-> AVX512.  */
+     cost += ix86_vec_cost (vecmode, ix86_cost->sse_op);
+   return cost;
+ }
+ 
  /* Worker for ix86_builtin_vectorization_cost and the fallback calls
     from ix86_vector_costs::add_stmt_cost.  */
  static int
*************** ix86_default_vector_cost (enum vect_cost
*** 25684,25712 ****
          return ix86_vec_cost (mode, ix86_cost->sse_op);
  
        case vec_construct:
! 	{
! 	  int n = GET_MODE_NUNITS (mode);
! 	  /* N - 1 element inserts into an SSE vector, the possible
! 	     GPR -> XMM move is accounted for in add_stmt_cost.  */
! 	  if (GET_MODE_BITSIZE (mode) <= 128)
! 	    return (n - 1) * ix86_cost->sse_op;
! 	  /* One vinserti128 for combining two SSE vectors for AVX256.  */
! 	  else if (GET_MODE_BITSIZE (mode) == 256)
! 	    return ((n - 2) * ix86_cost->sse_op
! 		    + ix86_vec_cost (mode, ix86_cost->sse_op));
! 	  /* One vinserti64x4 and two vinserti128 for combining SSE
! 	     and AVX256 vectors to AVX512.  */
! 	  else if (GET_MODE_BITSIZE (mode) == 512)
! 	    {
! 	      machine_mode half_mode
! 		= mode_for_vector (GET_MODE_INNER (mode),
! 				   GET_MODE_NUNITS (mode) / 2).require ();
! 	      return ((n - 4) * ix86_cost->sse_op
! 		      + 2 * ix86_vec_cost (half_mode, ix86_cost->sse_op)
! 		      + ix86_vec_cost (mode, ix86_cost->sse_op));
! 	    }
! 	  gcc_unreachable ();
! 	}
  
        default:
          gcc_unreachable ();
--- 25724,25731 ----
          return ix86_vec_cost (mode, ix86_cost->sse_op);
  
        case vec_construct:
!       case vec_deconstruct:
! 	return ix86_vector_cd_cost (mode, GET_MODE_INNER (mode));
  
        default:
          gcc_unreachable ();
*************** ix86_vector_costs::add_stmt_cost (int co
*** 26709,26726 ****
       latency and execution resources for the many scalar loads
       (AGU and load ports).  Try to account for this by scaling the
       construction cost by the number of elements involved.  */
!   if ((kind == vec_construct || kind == vec_to_scalar)
        && ((node
  	   && (((SLP_TREE_MEMORY_ACCESS_TYPE (node) == VMAT_ELEMENTWISE
! 		 || (SLP_TREE_MEMORY_ACCESS_TYPE (node) == VMAT_STRIDED_SLP
! 		     && SLP_TREE_LANES (node) == 1))
  		&& (TREE_CODE (DR_STEP (STMT_VINFO_DATA_REF
  					(SLP_TREE_REPRESENTATIVE (node))))
  		    != INTEGER_CST))
  	       || mat_gather_scatter_p (SLP_TREE_MEMORY_ACCESS_TYPE (node))))))
      {
!       stmt_cost = ix86_default_vector_cost (kind, mode);
!       stmt_cost *= (TYPE_VECTOR_SUBPARTS (vectype) + 1);
      }
    else if ((kind == vec_construct || kind == scalar_to_vec)
  	   && node
--- 26728,26750 ----
       latency and execution resources for the many scalar loads
       (AGU and load ports).  Try to account for this by scaling the
       construction cost by the number of elements involved.  */
!   if ((kind == vec_construct || kind == vec_deconstruct)
        && ((node
  	   && (((SLP_TREE_MEMORY_ACCESS_TYPE (node) == VMAT_ELEMENTWISE
! 		 || SLP_TREE_MEMORY_ACCESS_TYPE (node) == VMAT_STRIDED_SLP)
  		&& (TREE_CODE (DR_STEP (STMT_VINFO_DATA_REF
  					(SLP_TREE_REPRESENTATIVE (node))))
  		    != INTEGER_CST))
  	       || mat_gather_scatter_p (SLP_TREE_MEMORY_ACCESS_TYPE (node))))))
      {
!       auto lsdata = static_cast<vect_load_store_data *> (node->data);
!       tree ls_type = lsdata->ls_type ? lsdata->ls_type : vectype;
!       tree ls_eltype
! 	= lsdata->ls_eltype ? lsdata->ls_eltype : TREE_TYPE (ls_type);
!       stmt_cost = ix86_vector_cd_cost (TYPE_MODE (ls_type),
! 				       TYPE_MODE (ls_eltype));
!       stmt_cost *= (GET_MODE_BITSIZE (TYPE_MODE (ls_type))
! 		    / GET_MODE_BITSIZE (TYPE_MODE (ls_eltype)) + 1);
      }
    else if ((kind == vec_construct || kind == scalar_to_vec)
  	   && node
diff -Nrcpad gcc-17-20260614/gcc/config/i386/x86-tune-costs.h gcc-17-20260621/gcc/config/i386/x86-tune-costs.h
*** gcc-17-20260614/gcc/config/i386/x86-tune-costs.h	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/config/i386/x86-tune-costs.h	Sun Jun 21 22:32:06 2026
*************** struct processor_costs c86_4g_m7_cost =
*** 4612,4620 ****
  					   in SImode and DImode.  */
    2, 2, 3,				/* cost of moving XMM,YMM,ZMM
  					   register.  */
!   {6, 6, 10, 10, 12},			/* cost of loading SSE registers
  					   in 32,64,128,256 and 512-bit.  */
!   {8, 8, 8, 12, 12},			/* cost of storing SSE registers
  					   in 32,64,128,256 and 512-bit.  */
    6, 8,					/* SSE->integer and integer->SSE
  					   moves.  */
--- 4612,4620 ----
  					   in SImode and DImode.  */
    2, 2, 3,				/* cost of moving XMM,YMM,ZMM
  					   register.  */
!   {6, 6, 10, 10, 20},			/* cost of loading SSE registers
  					   in 32,64,128,256 and 512-bit.  */
!   {8, 8, 8, 12, 24},			/* cost of storing SSE registers
  					   in 32,64,128,256 and 512-bit.  */
    6, 8,					/* SSE->integer and integer->SSE
  					   moves.  */
*************** struct processor_costs c86_4g_m7_cost =
*** 4654,4665 ****
  					   Relative to reg-reg move (2).  */
    {8, 8, 8},				/* cost of storing integer
  					   registers.  */
!   {6, 6, 10, 10, 12},			/* cost of loading SSE registers
  					   in 32bit, 64bit, 128bit, 256bit and 512bit */
!   {8, 8, 8, 12, 12},			/* cost of storing SSE register
  					   in 32bit, 64bit, 128bit, 256bit and 512bit */
!   {6, 6, 10, 10, 12},			/* cost of unaligned loads.  */
!   {8, 8, 8, 12, 12},			/* cost of unaligned stores.  */
    2, 2, 3,				/* cost of moving XMM,YMM,ZMM
  					   register.  */
    6,					/* cost of moving SSE register to integer.  */
--- 4654,4665 ----
  					   Relative to reg-reg move (2).  */
    {8, 8, 8},				/* cost of storing integer
  					   registers.  */
!   {6, 6, 10, 10, 20},			/* cost of loading SSE registers
  					   in 32bit, 64bit, 128bit, 256bit and 512bit */
!   {8, 8, 8, 12, 24},			/* cost of storing SSE register
  					   in 32bit, 64bit, 128bit, 256bit and 512bit */
!   {6, 6, 10, 10, 20},			/* cost of unaligned loads.  */
!   {8, 8, 8, 12, 24},			/* cost of unaligned stores.  */
    2, 2, 3,				/* cost of moving XMM,YMM,ZMM
  					   register.  */
    6,					/* cost of moving SSE register to integer.  */
diff -Nrcpad gcc-17-20260614/gcc/config/loongarch/loongarch.cc gcc-17-20260621/gcc/config/loongarch/loongarch.cc
*** gcc-17-20260614/gcc/config/loongarch/loongarch.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/config/loongarch/loongarch.cc	Sun Jun 21 22:32:06 2026
*************** loongarch_builtin_vectorization_cost (en
*** 4547,4552 ****
--- 4547,4553 ----
  	return 2;
  
        case vec_construct:
+       case vec_deconstruct:
  	elements = TYPE_VECTOR_SUBPARTS (vectype);
  	if (LASX_SUPPORTED_MODE_P (mode) && !LSX_SUPPORTED_MODE_P (mode))
  	  return elements / 2 + 3;
diff -Nrcpad gcc-17-20260614/gcc/config/riscv/autovec-opt.md gcc-17-20260621/gcc/config/riscv/autovec-opt.md
*** gcc-17-20260614/gcc/config/riscv/autovec-opt.md	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/config/riscv/autovec-opt.md	Sun Jun 21 22:32:06 2026
***************
*** 53,59 ****
    {
      emit_insn (gen_pred_mov (<MODE>mode, operands[0], CONST1_RTX (<MODE>mode),
  			     RVV_VUNDEF (<MODE>mode), operands[3],
! 			     operands[4], operands[5]));
      DONE;
    }
  )
--- 53,59 ----
    {
      emit_insn (gen_pred_mov (<MODE>mode, operands[0], CONST1_RTX (<MODE>mode),
  			     RVV_VUNDEF (<MODE>mode), operands[3],
! 			     operands[4], operands[6]));
      DONE;
    }
  )
diff -Nrcpad gcc-17-20260614/gcc/config/riscv/riscv-cores.def gcc-17-20260621/gcc/config/riscv/riscv-cores.def
*** gcc-17-20260614/gcc/config/riscv/riscv-cores.def	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/config/riscv/riscv-cores.def	Sun Jun 21 22:32:06 2026
*************** RISCV_TUNE("sifive-5-series", generic, r
*** 40,46 ****
  RISCV_TUNE("sifive-7-series", sifive_7, sifive_7_tune_info)
  RISCV_TUNE("sifive-p400-series", sifive_p400, sifive_p400_tune_info)
  RISCV_TUNE("sifive-p600-series", sifive_p600, sifive_p600_tune_info)
! RISCV_TUNE("tt-ascalon-d8", tt_ascalon_d8, tt_ascalon_d8_tune_info)
  RISCV_TUNE("thead-c906", generic, thead_c906_tune_info)
  RISCV_TUNE("xt-c908", xt_c908, xt_c908_tune_info)
  RISCV_TUNE("xt-c908v", generic, generic_ooo_tune_info)
--- 40,46 ----
  RISCV_TUNE("sifive-7-series", sifive_7, sifive_7_tune_info)
  RISCV_TUNE("sifive-p400-series", sifive_p400, sifive_p400_tune_info)
  RISCV_TUNE("sifive-p600-series", sifive_p600, sifive_p600_tune_info)
! RISCV_TUNE("tt-ascalon-x", tt_ascalon_d8, tt_ascalon_d8_tune_info)
  RISCV_TUNE("thead-c906", generic, thead_c906_tune_info)
  RISCV_TUNE("xt-c908", xt_c908, xt_c908_tune_info)
  RISCV_TUNE("xt-c908v", generic, generic_ooo_tune_info)
*************** RISCV_TUNE("arc-v-rmx-100-series", arcv_
*** 73,83 ****
     The ARCH is the default arch of the core, represented as a string,
     can be NULL if no default arch.
     The MICRO_ARCH is the name of the core for which scheduling decisions
!    will be made, represented as an identifier.  */
  
  #ifndef RISCV_CORE
  #define RISCV_CORE(CORE_NAME, ARCH, MICRO_ARCH)
  #endif
  
  RISCV_CORE("sifive-e20",      "rv32imc",    "rocket")
  RISCV_CORE("sifive-e21",      "rv32imac",   "rocket")
--- 73,95 ----
     The ARCH is the default arch of the core, represented as a string,
     can be NULL if no default arch.
     The MICRO_ARCH is the name of the core for which scheduling decisions
!    will be made, represented as an identifier.
! 
!    If the core has an alternate name(s), an alias(es) can be created to map
!    an alternate name to the core's canonical name.  Before using #include
!    to read this file, define a macro:
! 
!       RISCV_CORE_ALIAS(CANONICAL_NAME, ALIAS_NAME)
! 
!    CANONICAL_NAME is the normal name of the core, represented as a string.
!    ALIAS_NAME is the alternate name for the core, represented as a string.  */
  
  #ifndef RISCV_CORE
  #define RISCV_CORE(CORE_NAME, ARCH, MICRO_ARCH)
  #endif
+ #ifndef RISCV_CORE_ALIAS
+ #define RISCV_CORE_ALIAS(CANONICAL_NAME, ALIAS_NAME)
+ #endif
  
  RISCV_CORE("sifive-e20",      "rv32imc",    "rocket")
  RISCV_CORE("sifive-e21",      "rv32imac",   "rocket")
*************** RISCV_CORE("xt-c9501fdvt",    "rva23s64_
*** 160,169 ****
  			      "svadu_svvptc",
  			      "xt-c9501fdvt")
  
! RISCV_CORE("tt-ascalon-d8",   "rva23s64_zfbfmin_zfh_zkr_zvbc_zvfbfmin_zvfbfwma_"
  			      "zvfh_zvkng_zvl256b_smaia_smmpm_smnpm_smrnmi_"
  			      "smstateen_ssaia_ssstrict_svadu",
! 			      "tt-ascalon-d8")
  
  RISCV_CORE("xiangshan-nanhu",      "rv64imafdc_zba_zbb_zbc_zbs_"
  			      "zbkb_zbkc_zbkx_zknd_zkne_zknh_zksed_zksh_"
--- 172,182 ----
  			      "svadu_svvptc",
  			      "xt-c9501fdvt")
  
! RISCV_CORE("tt-ascalon-x",    "rva23s64_zfbfmin_zfh_zkr_zvbc_zvfbfmin_zvfbfwma_"
  			      "zvfh_zvkng_zvl256b_smaia_smmpm_smnpm_smrnmi_"
  			      "smstateen_ssaia_ssstrict_svadu",
! 			      "tt-ascalon-x")
! RISCV_CORE_ALIAS("tt-ascalon-x", "tt-ascalon-d8")
  
  RISCV_CORE("xiangshan-nanhu",      "rv64imafdc_zba_zbb_zbc_zbs_"
  			      "zbkb_zbkc_zbkx_zknd_zkne_zknh_zksed_zksh_"
*************** RISCV_CORE("spacemit-x60",    "rv64imafd
*** 209,211 ****
--- 222,225 ----
  			      "spacemit-x60")
  
  #undef RISCV_CORE
+ #undef RISCV_CORE_ALIAS
diff -Nrcpad gcc-17-20260614/gcc/config/riscv/riscv-protos.h gcc-17-20260621/gcc/config/riscv/riscv-protos.h
*** gcc-17-20260614/gcc/config/riscv/riscv-protos.h	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/config/riscv/riscv-protos.h	Sun Jun 21 22:32:06 2026
*************** extern rtx riscv_emit_binary (enum rtx_c
*** 156,161 ****
--- 156,162 ----
  #endif
  extern bool riscv_expand_conditional_move (rtx, rtx, rtx, rtx);
  extern rtx riscv_legitimize_call_address (rtx);
+ extern bool riscv_call_needs_lpad_p (rtx);
  extern bool riscv_expand_zilsd_misaligned_move (rtx, rtx);
  extern bool riscv_zilsd_valid_mem_p (rtx, machine_mode);
  extern void riscv_set_return_address (rtx, rtx);
diff -Nrcpad gcc-17-20260614/gcc/config/riscv/riscv-zicfilp.cc gcc-17-20260621/gcc/config/riscv/riscv-zicfilp.cc
*** gcc-17-20260614/gcc/config/riscv/riscv-zicfilp.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/config/riscv/riscv-zicfilp.cc	Sun Jun 21 22:32:06 2026
*************** rest_of_insert_landing_pad (void)
*** 107,122 ****
  	       && (LABEL_PRESERVE_P (insn)
  		   || bb->flags & BB_NON_LOCAL_GOTO_TARGET))
  	    {
- 	      emit_insn_before (gen_lpad_align (), insn);
  	      emit_insn_after (gen_lpad (const0_rtx), insn);
  	      continue;
  	    }
  
  	  if (INSN_P (insn) && INSN_CODE (insn) == CODE_FOR_gpr_save)
  	    {
  	      emit_move_insn (RISCV_CALL_ADDRESS_LPAD (Pmode), const0_rtx);
- 	      emit_insn_before (gen_lpad_align (), insn);
- 	      emit_insn_after (gen_lpad (const0_rtx), insn);
  	      continue;
  	    }
  
--- 107,122 ----
  	       && (LABEL_PRESERVE_P (insn)
  		   || bb->flags & BB_NON_LOCAL_GOTO_TARGET))
  	    {
  	      emit_insn_after (gen_lpad (const0_rtx), insn);
  	      continue;
  	    }
  
+ 	  /* gpr_save outputs the full CFI sequence when Zicfilp is active
+ 	     Reset t2 to 0 so the hardware lpad check passes on return from
+ 	     __riscv_save_N.  */
  	  if (INSN_P (insn) && INSN_CODE (insn) == CODE_FOR_gpr_save)
  	    {
  	      emit_move_insn (RISCV_CALL_ADDRESS_LPAD (Pmode), const0_rtx);
  	      continue;
  	    }
  
diff -Nrcpad gcc-17-20260614/gcc/config/riscv/riscv.cc gcc-17-20260621/gcc/config/riscv/riscv.cc
*** gcc-17-20260614/gcc/config/riscv/riscv.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/config/riscv/riscv.cc	Sun Jun 21 22:32:06 2026
*************** static const attribute_spec riscv_gnu_at
*** 1030,1035 ****
--- 1030,1039 ----
      standard vector calling convention variant.  Syntax:
      __attribute__((norelax)). */
    {"norelax", 0, 0, true, false, false, false, NULL, NULL},
+   /* Marks functions that may return indirectly.  With Zicfilp, the compiler
+      inserts a landing-pad after calls to such functions.  Syntax:
+      __attribute__ ((indirect_return)).  */
+   {"indirect_return", 0, 0, false, true, true, true, NULL, NULL},
  };
  
  static const scoped_attribute_specs riscv_gnu_attribute_table  =
*************** riscv_legitimize_call_address (rtx addr)
*** 8076,8081 ****
--- 8080,8108 ----
    return addr;
  }
  
+ /* Return true if a Zicfilp landing-pad must follow a call to ADDR.
+    Indirect calls to returns_twice or indirect_return functions are not
+    covered.  */
+ 
+ bool
+ riscv_call_needs_lpad_p (rtx addr)
+ {
+   if (!is_zicfilp_p () || GET_CODE (addr) != SYMBOL_REF)
+     return false;
+ 
+   tree decl = SYMBOL_REF_DECL (addr);
+   if (!decl || TREE_CODE (decl) != FUNCTION_DECL)
+     return false;
+ 
+   /* Use setjmp_call_p to cover both ECF_RETURNS_TWICE builtins (e.g.  the
+      C-library setjmp) and explicit __attribute__ ((returns_twice)).  */
+   if (setjmp_call_p (decl))
+     return true;
+ 
+   tree fntype = TREE_TYPE (decl);
+   return lookup_attribute ("indirect_return", TYPE_ATTRIBUTES (fntype)) != NULL;
+ }
+ 
  /* Print symbolic operand OP, which is part of a HIGH or LO_SUM
     in context CONTEXT.  HI_RELOC indicates a high-part reloc.  */
  
*************** riscv_output_mi_thunk (FILE *file, tree
*** 11807,11813 ****
    emit_note (NOTE_INSN_PROLOGUE_END);
  
    if (is_zicfilp_p ())
!     emit_insn (gen_lpad (const0_rtx));
  
    /* Determine if we can use a sibcall to call FUNCTION directly.  */
    fnaddr = gen_rtx_MEM (FUNCTION_MODE, XEXP (DECL_RTL (function), 0));
--- 11834,11843 ----
    emit_note (NOTE_INSN_PROLOGUE_END);
  
    if (is_zicfilp_p ())
!     {
!       emit_insn (gen_lpad_align ());
!       emit_insn (gen_lpad (const0_rtx));
!     }
  
    /* Determine if we can use a sibcall to call FUNCTION directly.  */
    fnaddr = gen_rtx_MEM (FUNCTION_MODE, XEXP (DECL_RTL (function), 0));
*************** riscv_builtin_vectorization_cost (enum v
*** 14035,14040 ****
--- 14065,14071 ----
        return fp ? common_costs->fp_stmt_cost : common_costs->int_stmt_cost;
  
      case vec_construct:
+     case vec_deconstruct:
  	{
  	  /* TODO: This is too pessimistic in case we can splat.  */
  	  int regmove_cost = fp ? get_fr2vr_cost () : get_gr2vr_cost ();
diff -Nrcpad gcc-17-20260614/gcc/config/riscv/riscv.h gcc-17-20260621/gcc/config/riscv/riscv.h
*** gcc-17-20260614/gcc/config/riscv/riscv.h	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/config/riscv/riscv.h	Sun Jun 21 22:32:06 2026
*************** extern enum riscv_cc get_riscv_cc (const
*** 1105,1110 ****
--- 1105,1117 ----
    fprintf (STREAM, "\t.word\t%sL%d-%sL%d\n",				\
  	   LOCAL_LABEL_PREFIX, VALUE, LOCAL_LABEL_PREFIX, REL)
  
+ /* For Zicfilp, labels that may be indirect jump targets need 4-byte
+    alignment so that the lpad instruction after them is properly aligned.  */
+ #define LABEL_ALIGN(LABEL)						\
+   (TARGET_ZICFILP && LABEL_PRESERVE_P (LABEL)				\
+    ? ((align_labels.levels[0].log > 2) ? align_labels : align_flags (2)) \
+    : align_labels)
+ 
  /* This is how to output an assembler line
     that says to advance the location counter
     to a multiple of 2**LOG bytes.  */
diff -Nrcpad gcc-17-20260614/gcc/config/riscv/riscv.md gcc-17-20260621/gcc/config/riscv/riscv.md
*** gcc-17-20260614/gcc/config/riscv/riscv.md	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/config/riscv/riscv.md	Sun Jun 21 22:32:06 2026
***************
*** 4190,4197 ****
  	      (use (match_operand 2 ""))])]
    ""
  {
!   rtx target = riscv_legitimize_call_address (XEXP (operands[0], 0));
!   emit_call_insn (gen_call_internal (target, operands[1]));
    DONE;
  })
  
--- 4190,4201 ----
  	      (use (match_operand 2 ""))])]
    ""
  {
!   rtx addr = XEXP (operands[0], 0);
!   rtx target = riscv_legitimize_call_address (addr);
!   if (riscv_call_needs_lpad_p (addr))
!     emit_call_insn (gen_call_internal_cfi (target, operands[1]));
!   else
!     emit_call_insn (gen_call_internal (target, operands[1]));
    DONE;
  })
  
***************
*** 4206,4211 ****
--- 4210,4246 ----
     call\t%0@plt"
    [(set_attr "type" "call")])
  
+ ;; Zicfilp-protected call: .option push/pop guards prevent c.jal compression
+ ;; and jal linker relaxation from moving the return address off the lpad.
+ ;; .p2align 2 ensures the lpad is 4-byte aligned.
+ (define_insn "call_internal_cfi"
+   [(call (mem:SI (match_operand 0 "call_insn_operand" "l,S,U"))
+ 	 (match_operand 1 "" ""))
+    (clobber (reg:SI RETURN_ADDR_REGNUM))]
+   "TARGET_ZICFILP"
+   {
+     output_asm_insn (".p2align\t2", operands);
+     output_asm_insn (".option push", operands);
+     output_asm_insn (".option norelax", operands);
+     output_asm_insn (".option norvc", operands);
+     switch (which_alternative)
+       {
+       case 0:
+ 	output_asm_insn ("jalr\t%0", operands);
+ 	break;
+       case 1:
+ 	output_asm_insn ("call\t%0", operands);
+ 	break;
+       default:
+ 	output_asm_insn ("call\t%0@plt", operands);
+ 	break;
+       }
+     output_asm_insn (".option pop", operands);
+     return "lpad\t0";
+   }
+   [(set_attr "type" "call")
+    (set_attr "length" "8,12,12")])
+ 
  (define_expand "call_value"
    [(parallel [(set (match_operand 0 "")
  		   (call (match_operand 1 "")
***************
*** 4213,4220 ****
  	      (use (match_operand 3 ""))])]
    ""
  {
!   rtx target = riscv_legitimize_call_address (XEXP (operands[1], 0));
!   emit_call_insn (gen_call_value_internal (operands[0], target, operands[2]));
    DONE;
  })
  
--- 4248,4260 ----
  	      (use (match_operand 3 ""))])]
    ""
  {
!   rtx addr = XEXP (operands[1], 0);
!   rtx target = riscv_legitimize_call_address (addr);
!   if (riscv_call_needs_lpad_p (addr))
!     emit_call_insn (gen_call_value_internal_cfi (operands[0], target,
! 						 operands[2]));
!   else
!     emit_call_insn (gen_call_value_internal (operands[0], target, operands[2]));
    DONE;
  })
  
***************
*** 4230,4235 ****
--- 4270,4307 ----
     call\t%1@plt"
    [(set_attr "type" "call")])
  
+ ;; Zicfilp-protected call: .option push/pop guards prevent c.jal compression
+ ;; and jal linker relaxation from moving the return address off the lpad.
+ ;; .p2align 2 ensures the lpad is 4-byte aligned.
+ (define_insn "call_value_internal_cfi"
+   [(set (match_operand 0 "" "")
+ 	(call (mem:SI (match_operand 1 "call_insn_operand" "l,S,U"))
+ 	      (match_operand 2 "" "")))
+    (clobber (reg:SI RETURN_ADDR_REGNUM))]
+   "TARGET_ZICFILP"
+   {
+     output_asm_insn (".p2align\t2", operands);
+     output_asm_insn (".option push", operands);
+     output_asm_insn (".option norelax", operands);
+     output_asm_insn (".option norvc", operands);
+     switch (which_alternative)
+       {
+       case 0:
+ 	output_asm_insn ("jalr\t%1", operands);
+ 	break;
+       case 1:
+ 	output_asm_insn ("call\t%1", operands);
+ 	break;
+       default:
+ 	output_asm_insn ("call\t%1@plt", operands);
+ 	break;
+       }
+     output_asm_insn (".option pop", operands);
+     return "lpad\t0";
+   }
+   [(set_attr "type" "call")
+    (set_attr "length" "8,12,12")])
+ 
  ;; Call subroutine returning any type.
  
  (define_expand "untyped_call"
***************
*** 4275,4282 ****
       [(unspec_volatile [(match_operand 0 "const_int_operand")]
  	               UNSPECV_GPR_SAVE)])]
    ""
!   "call\tt0,__riscv_save_%0"
!   [(set_attr "type" "call")])
  
  (define_insn "gpr_restore"
    [(unspec_volatile [(match_operand 0 "const_int_operand")] UNSPECV_GPR_RESTORE)]
--- 4347,4369 ----
       [(unspec_volatile [(match_operand 0 "const_int_operand")]
  	               UNSPECV_GPR_SAVE)])]
    ""
!   {
!     if (is_zicfilp_p ())
!       {
! 	output_asm_insn (".p2align\t2", operands);
! 	output_asm_insn (".option push", operands);
! 	output_asm_insn (".option norelax", operands);
! 	output_asm_insn (".option norvc", operands);
! 	output_asm_insn ("call\tt0,__riscv_save_%0", operands);
! 	output_asm_insn (".option pop", operands);
! 	return "lpad\t0";
!       }
!     return "call\tt0,__riscv_save_%0";
!   }
!   [(set_attr "type" "call")
!    (set (attr "length") (if_then_else (match_test "is_zicfilp_p ()")
! 				      (const_string "12")
! 				      (const_string "8")))])
  
  (define_insn "gpr_restore"
    [(unspec_volatile [(match_operand 0 "const_int_operand")] UNSPECV_GPR_RESTORE)]
***************
*** 5251,5256 ****
--- 5338,5361 ----
    operands[7] = gen_lowpart (SImode, operands[6]);
  })
  
+ ;; If through a series of combinations/simplifications we ultimately
+ ;; recover an equality test against a small constant we can win because
+ ;; that's a 2 instruction sequence.  addi to set a zero/nonzero status
+ ;; followed be seqz/snez to canonicalize into 0/1.
+ ;;
+ ;; Since we're going to use the negated constant in an addi to get the
+ ;; zero/nonzero status we need to verify the negated constant is a
+ ;; small operand, not the original constant.
+ (define_split
+   [(set (match_operand:X 0 "register_operand")
+ 	(any_eq:X (match_operand:X 1 "register_operand")
+ 		  (match_operand 2 "const_int_operand")))]
+   "(SMALL_OPERAND (-UINTVAL (operands[2]))
+     && operands[2] != CONST0_RTX (GET_MODE (operands[1])))"
+   [(set (match_dup 0) (plus:X (match_dup 1) (match_dup 2)))
+    (set (match_dup 0) (any_eq:X (match_dup 0) (const_int 0)))]
+ { operands[2] = GEN_INT (-UINTVAL (operands[2])); })
+ 
  (include "bitmanip.md")
  (include "crypto.md")
  (include "sync.md")
diff -Nrcpad gcc-17-20260614/gcc/config/riscv/vector.md gcc-17-20260621/gcc/config/riscv/vector.md
*** gcc-17-20260614/gcc/config/riscv/vector.md	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/config/riscv/vector.md	Sun Jun 21 22:32:06 2026
***************
*** 858,867 ****
  	       (const_int 2)
  
  	       (eq_attr "type" "vstux,vstox,vssegts,vssegtux,vssegtox,vfcvtftoi,vfwcvtitof,vfwcvtftoi,
! 				vfwcvtftof,vmsfs,vired,viwred,vfredu,vfredo,vfwredu,vfwredo,vwsll")
  	       (const_int 3)
  
! 	       (eq_attr "type" "viwalu,viwmul,viwmuladd,vfwalu,vfwmul,vfwmuladd")
  	       (const_int 4)]
  	(const_int INVALID_ATTRIBUTE)))
  
--- 858,867 ----
  	       (const_int 2)
  
  	       (eq_attr "type" "vstux,vstox,vssegts,vssegtux,vssegtox,vfcvtftoi,vfwcvtitof,vfwcvtftoi,
! 				vfwcvtftof,vmsfs,vired,viwred,vfredu,vfredo,vfwredu,vfwredo,vwsll,viwalu,vfwalu,viwmul,vfwmul")
  	       (const_int 3)
  
! 	       (eq_attr "type" "viwmuladd,vfwmuladd")
  	       (const_int 4)]
  	(const_int INVALID_ATTRIBUTE)))
  
***************
*** 4256,4262 ****
    "TARGET_VECTOR"
    "vw<plus_minus:insn><any_extend:u>.wx\t%0,%3,%z4%p1"
    [(set_attr "type" "vi<widen_binop_insn_type>")
-    (set_attr "mode_idx" "3")
     (set_attr "mode" "<V_DOUBLE_TRUNC>")])
  
  (define_insn "@pred_single_widen_add<any_extend:su><mode>_extended_scalar"
--- 4256,4261 ----
***************
*** 4279,4285 ****
    "TARGET_VECTOR"
    "vwadd<any_extend:u>.wx\t%0,%3,%z4%p1"
    [(set_attr "type" "viwalu")
-    (set_attr "mode_idx" "3")
     (set_attr "mode" "<V_DOUBLE_TRUNC>")])
  
  (define_insn "@pred_single_widen_sub<any_extend:su><mode>_extended_scalar"
--- 4278,4283 ----
***************
*** 4302,4308 ****
    "TARGET_VECTOR"
    "vwsub<any_extend:u>.wx\t%0,%3,%z4%p1"
    [(set_attr "type" "viwalu")
-    (set_attr "mode_idx" "3")
     (set_attr "mode" "<V_DOUBLE_TRUNC>")])
  
  (define_insn "@pred_widen_mulsu<mode>"
--- 4300,4305 ----
***************
*** 4523,4529 ****
    "TARGET_VECTOR"
    "v<insn>.vx\t%0,%3,%4%p1"
    [(set_attr "type" "<int_binop_insn_type>")
-    (set_attr "mode_idx" "3")
     (set_attr "mode" "<MODE>")])
  
  (define_insn "@pred_<optab><mode>_scalar"
--- 4520,4525 ----
***************
*** 4545,4551 ****
    "TARGET_VECTOR"
    "v<insn>.vx\t%0,%3,%4%p1"
    [(set_attr "type" "<int_binop_insn_type>")
-    (set_attr "mode_idx" "3")
     (set_attr "mode" "<MODE>")])
  
  (define_expand "@pred_<optab><mode>_scalar"
--- 4541,4546 ----
***************
*** 4600,4606 ****
    "TARGET_VECTOR"
    "v<insn>.vx\t%0,%3,%4%p1"
    [(set_attr "type" "<int_binop_insn_type>")
-    (set_attr "mode_idx" "3")
     (set_attr "mode" "<MODE>")])
  
  (define_insn "*pred_<optab><mode>_extended_scalar"
--- 4595,4600 ----
***************
*** 4623,4629 ****
    "TARGET_VECTOR && !TARGET_64BIT"
    "v<insn>.vx\t%0,%3,%4%p1"
    [(set_attr "type" "<int_binop_insn_type>")
-    (set_attr "mode_idx" "3")
     (set_attr "mode" "<MODE>")])
  
  (define_expand "@pred_<optab><mode>_scalar"
--- 4617,4622 ----
***************
*** 4678,4684 ****
    "TARGET_VECTOR"
    "v<insn>.vx\t%0,%3,%z4%p1"
    [(set_attr "type" "<int_binop_insn_type>")
-    (set_attr "mode_idx" "3")
     (set_attr "mode" "<MODE>")])
  
  (define_insn "*pred_<optab><mode>_extended_scalar"
--- 4671,4676 ----
***************
*** 4701,4707 ****
    "TARGET_VECTOR && !TARGET_64BIT"
    "v<insn>.vx\t%0,%3,%z4%p1"
    [(set_attr "type" "<int_binop_insn_type>")
-    (set_attr "mode_idx" "3")
     (set_attr "mode" "<MODE>")])
  
  (define_insn "@pred_<sat_op><mode>"
--- 4693,4698 ----
***************
*** 4747,4753 ****
    "TARGET_VECTOR"
    "v<sat_op>.vx\t%0,%3,%z4%p1"
    [(set_attr "type" "<sat_insn_type>")
-    (set_attr "mode_idx" "3")
     (set_attr "mode" "<MODE>")])
  
  (define_insn "@pred_<sat_op><mode>_scalar"
--- 4738,4743 ----
***************
*** 7352,7358 ****
    [(set_attr "type" "vf<widen_binop_insn_type>")
     (set_attr "mode" "<V_DOUBLE_TRUNC>")
     (set (attr "frm_mode")
! 	(symbol_ref "riscv_vector::get_frm_mode (operands[9])"))])
  
  (define_insn "@pred_single_widen_add<mode>"
    [(set (match_operand:VWEXTF 0 "register_operand"                  "=&vr,  &vr")
--- 7342,7348 ----
    [(set_attr "type" "vf<widen_binop_insn_type>")
     (set_attr "mode" "<V_DOUBLE_TRUNC>")
     (set (attr "frm_mode")
!    (symbol_ref "riscv_vector::get_frm_mode (operands[9])"))])
  
  (define_insn "@pred_single_widen_add<mode>"
    [(set (match_operand:VWEXTF 0 "register_operand"                  "=&vr,  &vr")
diff -Nrcpad gcc-17-20260614/gcc/config/rs6000/rs6000.cc gcc-17-20260621/gcc/config/rs6000/rs6000.cc
*** gcc-17-20260614/gcc/config/rs6000/rs6000.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/config/rs6000/rs6000.cc	Sun Jun 21 22:32:06 2026
*************** rs6000_builtin_vectorization_cost (enum
*** 5113,5118 ****
--- 5113,5119 ----
  	return 2;
  
        case vec_construct:
+       case vec_deconstruct:
  	/* This is a rough approximation assuming non-constant elements
  	   constructed into a vector via element insertion.  FIXME:
  	   vec_construct is not granular enough for uniformly good
diff -Nrcpad gcc-17-20260614/gcc/config/s390/s390.cc gcc-17-20260621/gcc/config/s390/s390.cc
*** gcc-17-20260614/gcc/config/s390/s390.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/config/s390/s390.cc	Sun Jun 21 22:32:06 2026
*************** s390_builtin_vectorization_cost (enum ve
*** 4385,4390 ****
--- 4385,4391 ----
  	return 3;
  
        case vec_construct:
+       case vec_deconstruct:
  	return TYPE_VECTOR_SUBPARTS (vectype) - 1;
  
        default:
diff -Nrcpad gcc-17-20260614/gcc/configure gcc-17-20260621/gcc/configure
*** gcc-17-20260614/gcc/configure	Sun Jun 14 22:32:20 2026
--- gcc-17-20260621/gcc/configure	Sun Jun 21 22:32:18 2026
*************** else
*** 26256,26261 ****
--- 26256,26264 ----
        x86_64-*-linux-gnux32*)
  	gcc_cv_as_flags=--x32
  	;;
+       x86_64-*-linux-gnuabi32 | x86_64-*-mingw32abi32)
+ 	gcc_cv_as_flags=--32
+ 	;;
        x86_64-*-* | sparcv9-*-* | sparc64-*-*)
  	gcc_cv_as_flags=--64
  	;;
*************** $as_echo "#define TLS_SECTION_ASM_FLAG '
*** 28108,28114 ****
      conftest_s='
        .section .tdata,"aw'$tls_section_flag'",@progbits'
      case "$target" in
!       i?86-*-*)
  	tls_as_opt="$tls_as_opt $as_32_opt"
  	conftest_s="$conftest_s
  foo:	.long	25
--- 28111,28117 ----
      conftest_s='
        .section .tdata,"aw'$tls_section_flag'",@progbits'
      case "$target" in
!       i?86-*-* | x86_64-*-linux-gnuabi32 | x86_64-*-mingw32abi32)
  	tls_as_opt="$tls_as_opt $as_32_opt"
  	conftest_s="$conftest_s
  foo:	.long	25
diff -Nrcpad gcc-17-20260614/gcc/configure.ac gcc-17-20260621/gcc/configure.ac
*** gcc-17-20260614/gcc/configure.ac	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/configure.ac	Sun Jun 21 22:32:06 2026
*************** changequote(,)dnl
*** 4005,4011 ****
      conftest_s='
        .section .tdata,"aw'$tls_section_flag'",@progbits'
      case "$target" in
!       i?86-*-*)
  	tls_as_opt="$tls_as_opt $as_32_opt"
  	conftest_s="$conftest_s
  foo:	.long	25
--- 4005,4011 ----
      conftest_s='
        .section .tdata,"aw'$tls_section_flag'",@progbits'
      case "$target" in
!       i?86-*-* | x86_64-*-linux-gnuabi32 | x86_64-*-mingw32abi32)
  	tls_as_opt="$tls_as_opt $as_32_opt"
  	conftest_s="$conftest_s
  foo:	.long	25
diff -Nrcpad gcc-17-20260614/gcc/cp/ChangeLog gcc-17-20260621/gcc/cp/ChangeLog
*** gcc-17-20260614/gcc/cp/ChangeLog	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/cp/ChangeLog	Sun Jun 21 22:32:06 2026
***************
*** 1,3 ****
--- 1,57 ----
+ 2026-06-18  Marek Polacek  <polacek@redhat.com>
+ 
+ 	* decl.cc (check_initializer): Don't call
+ 	build_aggr_init_full_exprs for {} of an aggregate.
+ 
+ 2026-06-17  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/125764
+ 	* reflect.cc (eval_can_substitute): Don't call
+ 	convert_from_reference on types.
+ 
+ 2026-06-17  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/125759
+ 	* reflect.cc (get_reflection): Do STRIP_REFERENCE_REF.
+ 
+ 2026-06-17  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/125492
+ 	* reflect.cc (eval_size_of): Add a separate throw_exception for
+ 	function types.
+ 
+ 2026-06-17  Wang Jinghao  <zheng.xianyuwang@gmail.com>
+ 
+ 	* reflect.cc (eval_is_explicit_object_parameter): Call
+ 	maybe_update_function_parm before checking the parameter
+ 	against DECL_ARGUMENTS.
+ 
+ 2026-06-17  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/125613
+ 	* pt.cc (check_explicit_specialization): Detect mismatches in
+ 	exception specifications in explicit instantiations.
+ 
+ 2026-06-17  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR c++/125851
+ 	* name-lookup.cc (get_cxx_dialect_name): Handle cxx29.
+ 
+ 2026-06-16  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/125770
+ 	* decl2.cc (mark_used): Check complain & tf_error before giving
+ 	an error.
+ 
+ 2026-06-16  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/125539
+ 	* cvt.cc (ocp_convert): In a template, always call
+ 	perform_implicit_conversion.  Pass flags to
+ 	perform_implicit_conversion_flags.
+ 	* decl.cc (check_initializer): Remove a call to
+ 	build_implicit_conv_flags.
+ 
  2026-06-12  Jakub Jelinek  <jakub@redhat.com>
  
  	PR c++/125674
diff -Nrcpad gcc-17-20260614/gcc/cp/cvt.cc gcc-17-20260621/gcc/cp/cvt.cc
*** gcc-17-20260614/gcc/cp/cvt.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/cp/cvt.cc	Sun Jun 21 22:32:06 2026
*************** ocp_convert (tree type, tree expr, int c
*** 968,975 ****
        if (abstract_virtuals_error (NULL_TREE, type, complain))
  	return error_mark_node;
  
!       if (BRACE_ENCLOSED_INITIALIZER_P (ctor))
! 	ctor = perform_implicit_conversion (type, ctor, complain);
        else if ((flags & LOOKUP_ONLYCONVERTING)
  	       && ! (CLASS_TYPE_P (dtype) && DERIVED_FROM_P (type, dtype)))
  	/* For copy-initialization, first we create a temp of the proper type
--- 968,978 ----
        if (abstract_virtuals_error (NULL_TREE, type, complain))
  	return error_mark_node;
  
!       if (BRACE_ENCLOSED_INITIALIZER_P (ctor)
! 	  /* We don't want to create a TARGET_EXPR in a template by the
! 	     build_cplus_new below.  */
! 	  || processing_template_decl)
! 	ctor = perform_implicit_conversion_flags (type, ctor, complain, flags);
        else if ((flags & LOOKUP_ONLYCONVERTING)
  	       && ! (CLASS_TYPE_P (dtype) && DERIVED_FROM_P (type, dtype)))
  	/* For copy-initialization, first we create a temp of the proper type
diff -Nrcpad gcc-17-20260614/gcc/cp/decl.cc gcc-17-20260621/gcc/cp/decl.cc
*** gcc-17-20260614/gcc/cp/decl.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/cp/decl.cc	Sun Jun 21 22:32:06 2026
*************** check_initializer (tree decl, tree init,
*** 8587,8601 ****
  
        if (((type_build_ctor_call (type) || CLASS_TYPE_P (type))
  	   && !(flags & LOOKUP_ALREADY_DIGESTED)
! 	   && !(init && BRACE_ENCLOSED_INITIALIZER_P (init)
! 		&& CP_AGGREGATE_TYPE_P (type)
! 		&& (CLASS_TYPE_P (type)
! 		    /* The call to build_aggr_init below could end up
! 		       calling build_vec_init, which may break when we
! 		       are processing a template.  */
! 		    || processing_template_decl
! 		    || !TYPE_NEEDS_CONSTRUCTING (type)
! 		    || type_has_extended_temps (type))))
  	  || (DECL_DECOMPOSITION_P (decl) && TREE_CODE (type) == ARRAY_TYPE))
  	{
  	  init_code = build_aggr_init_full_exprs (decl, init, flags);
--- 8587,8595 ----
  
        if (((type_build_ctor_call (type) || CLASS_TYPE_P (type))
  	   && !(flags & LOOKUP_ALREADY_DIGESTED)
! 	   && !(init
! 		&& BRACE_ENCLOSED_INITIALIZER_P (init)
! 		&& CP_AGGREGATE_TYPE_P (type)))
  	  || (DECL_DECOMPOSITION_P (decl) && TREE_CODE (type) == ARRAY_TYPE))
  	{
  	  init_code = build_aggr_init_full_exprs (decl, init, flags);
*************** check_initializer (tree decl, tree init,
*** 8625,8636 ****
  	      /* In C++20, the call to build_aggr_init could have created
  		 an INIT_EXPR with a CONSTRUCTOR as the RHS to handle
  		 A(1, 2).  */
! 	      tree rhs = TREE_OPERAND (init_code, 1);
! 	      if (processing_template_decl && TREE_CODE (rhs) == TARGET_EXPR)
! 		/* Avoid leaking TARGET_EXPR into template trees.  */
! 		rhs = build_implicit_conv_flags (type, init, flags);
! 	      init = rhs;
! 
  	      init_code = NULL_TREE;
  	      /* Don't call digest_init; it's unnecessary and will complain
  		 about aggregate initialization of non-aggregate classes.  */
--- 8619,8625 ----
  	      /* In C++20, the call to build_aggr_init could have created
  		 an INIT_EXPR with a CONSTRUCTOR as the RHS to handle
  		 A(1, 2).  */
! 	      init = TREE_OPERAND (init_code, 1);
  	      init_code = NULL_TREE;
  	      /* Don't call digest_init; it's unnecessary and will complain
  		 about aggregate initialization of non-aggregate classes.  */
diff -Nrcpad gcc-17-20260614/gcc/cp/decl2.cc gcc-17-20260621/gcc/cp/decl2.cc
*** gcc-17-20260614/gcc/cp/decl2.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/cp/decl2.cc	Sun Jun 21 22:32:06 2026
*************** mark_used (tree decl, tsubst_flags_t com
*** 6818,6825 ****
  
    if (builtin_pack_fn_p (decl))
      {
!       error ("use of built-in parameter pack %qD outside of a template",
! 	     DECL_NAME (decl));
        return false;
      }
  
--- 6818,6826 ----
  
    if (builtin_pack_fn_p (decl))
      {
!       if (complain & tf_error)
! 	error ("use of built-in parameter pack %qD outside of a template",
! 	       DECL_NAME (decl));
        return false;
      }
  
diff -Nrcpad gcc-17-20260614/gcc/cp/expr.cc gcc-17-20260621/gcc/cp/expr.cc
*** gcc-17-20260614/gcc/cp/expr.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/cp/expr.cc	Sun Jun 21 22:32:06 2026
*************** mark_use (tree expr, bool rvalue_p, bool
*** 186,192 ****
  	    return error_mark_node;
  	  if (r != ref)
  	    {
! 	      if (!rvalue_p)
  		{
  		  /* Make sure we still return an lvalue.  */
  		  gcc_assert (TREE_CODE (r) == NOP_EXPR);
--- 186,192 ----
  	    return error_mark_node;
  	  if (r != ref)
  	    {
! 	      if (DECL_P (ref) && !lvalue_p (r))
  		{
  		  /* Make sure we still return an lvalue.  */
  		  gcc_assert (TREE_CODE (r) == NOP_EXPR);
diff -Nrcpad gcc-17-20260614/gcc/cp/name-lookup.cc gcc-17-20260621/gcc/cp/name-lookup.cc
*** gcc-17-20260614/gcc/cp/name-lookup.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/cp/name-lookup.cc	Sun Jun 21 22:32:06 2026
*************** get_cxx_dialect_name (enum cxx_dialect d
*** 7555,7560 ****
--- 7555,7562 ----
        return "C++23";
      case cxx26:
        return "C++26";
+     case cxx29:
+       return "C++29";
      }
  }
  
diff -Nrcpad gcc-17-20260614/gcc/cp/pt.cc gcc-17-20260621/gcc/cp/pt.cc
*** gcc-17-20260614/gcc/cp/pt.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/cp/pt.cc	Sun Jun 21 22:32:06 2026
*************** check_explicit_specialization (tree decl
*** 3276,3285 ****
--- 3276,3314 ----
  		  targs = new_targs;
  		}
  
+ 	      tree e1;
  	      tree inst = instantiate_template (tmpl, targs, tf_error);
  	      if (variable_template_p (tmpl)
  		  && !check_explicit_inst_of_var_template (inst, decl))
  		return error_mark_node;
+ 	      /* [except.spec] In an explicit instantiation
+ 		 a noexcept-specifier may be specified, but is not required.
+ 		 If a noexcept-specifier is specified in an explicit
+ 		 instantiation, the exception specification shall be the same
+ 		 as the exception specification of all other declarations of
+ 		 that function.  */
+ 	      else if (DECL_FUNCTION_TEMPLATE_P (tmpl)
+ 		       && (e1 = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)))
+ 		       /* This could be the implicit noexcept(true) given
+ 			  to destructors, but here we are interested only
+ 			  in user-written noexcept-specs which would have
+ 			  been evaluated by now.  */
+ 		       && !UNEVALUATED_NOEXCEPT_SPEC_P (e1)
+ 		       && maybe_instantiate_noexcept (inst))
+ 		{
+ 		  tree e2 = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (inst));
+ 		  if (!comp_except_specs (e1, e2, ce_normal))
+ 		    {
+ 		      auto_diagnostic_group d;
+ 		      error ("exception specification %qX in explicit "
+ 			     "instantiation does not match the instantiated "
+ 			     "one %qX", e1, e2 ? e2 : noexcept_false_spec);
+ 		      inform (DECL_SOURCE_LOCATION (tmpl),
+ 			      "template declared here");
+ 		      return error_mark_node;
+ 		    }
+ 		}
+ 
  	      return inst;
  	    }
  
diff -Nrcpad gcc-17-20260614/gcc/cp/reflect.cc gcc-17-20260621/gcc/cp/reflect.cc
*** gcc-17-20260614/gcc/cp/reflect.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/cp/reflect.cc	Sun Jun 21 22:32:06 2026
*************** tree
*** 135,140 ****
--- 135,141 ----
  get_reflection (location_t loc, tree t, reflect_kind kind/*=REFLECT_UNDEF*/)
  {
    STRIP_ANY_LOCATION_WRAPPER (t);
+   t = STRIP_REFERENCE_REF (t);
  
    /* Constant template parameters and pack-index-expressions cannot
       appear as operands of the reflection operator.  */
*************** eval_is_data_member_spec (const_tree r,
*** 1828,1838 ****
     object parameter.  Otherwise, false.  */
  
  static tree
! eval_is_explicit_object_parameter (const_tree r, reflect_kind kind)
  {
!   if (eval_is_function_parameter (r, kind) == boolean_true_node
!       && r == DECL_ARGUMENTS (DECL_CONTEXT (r))
!       && DECL_XOBJ_MEMBER_FUNCTION_P (DECL_CONTEXT (r)))
      return boolean_true_node;
    else
      return boolean_false_node;
--- 1829,1841 ----
     object parameter.  Otherwise, false.  */
  
  static tree
! eval_is_explicit_object_parameter (tree r, reflect_kind kind)
  {
!   if (eval_is_function_parameter (r, kind) == boolean_false_node)
!     return boolean_false_node;
!   r = maybe_update_function_parm (r);
!   tree fn = DECL_CONTEXT (r);
!   if (r == DECL_ARGUMENTS (fn) && DECL_XOBJ_MEMBER_FUNCTION_P (fn))
      return boolean_true_node;
    else
      return boolean_false_node;
*************** eval_size_of (location_t loc, const cons
*** 3322,3332 ****
    else
      type = type_of (r, kind);
    tree ret;
!   if (!complete_type_or_maybe_complain (type, NULL_TREE, tf_none)
!       /* No special casing of references needed, c_sizeof_or_alignof_type
! 	 returns the same size for POINTER_TYPE and REFERENCE_TYPE.  */
!       || ((ret = c_sizeof_or_alignof_type (loc, type, true, false, 0))
! 	  == error_mark_node))
      return throw_exception (loc, ctx,
  			    "reflection with incomplete type in size_of",
  			    fun, non_constant_p, jump_target);
--- 3325,3339 ----
    else
      type = type_of (r, kind);
    tree ret;
!   if (FUNC_OR_METHOD_TYPE_P (type))
!     return throw_exception (loc, ctx,
! 			    "reflection of function type in size_of",
! 			    fun, non_constant_p, jump_target);
!   else if (!complete_type_or_maybe_complain (type, NULL_TREE, tf_none)
! 	   /* No special casing of references needed, c_sizeof_or_alignof_type
! 	      returns the same size for POINTER_TYPE and REFERENCE_TYPE.  */
! 	   || ((ret = c_sizeof_or_alignof_type (loc, type, true, false, 0))
! 	       == error_mark_node))
      return throw_exception (loc, ctx,
  			    "reflection with incomplete type in size_of",
  			    fun, non_constant_p, jump_target);
*************** eval_can_substitute (location_t loc, con
*** 5517,5523 ****
  	return throw_exception (loc, ctx,
  				"invalid argument to can_substitute",
  				fun, non_constant_p, jump_target);
!       a = convert_from_reference (a);
        TREE_VEC_ELT (rvec, i) = a;
      }
    if (DECL_TYPE_TEMPLATE_P (r) || DECL_TEMPLATE_TEMPLATE_PARM_P (r))
--- 5524,5531 ----
  	return throw_exception (loc, ctx,
  				"invalid argument to can_substitute",
  				fun, non_constant_p, jump_target);
!       if (!TYPE_P (a))
! 	a = convert_from_reference (a);
        TREE_VEC_ELT (rvec, i) = a;
      }
    if (DECL_TYPE_TEMPLATE_P (r) || DECL_TEMPLATE_TEMPLATE_PARM_P (r))
diff -Nrcpad gcc-17-20260614/gcc/cp/tree.cc gcc-17-20260621/gcc/cp/tree.cc
*** gcc-17-20260614/gcc/cp/tree.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/cp/tree.cc	Sun Jun 21 22:32:06 2026
*************** cp_walk_subtrees (tree *tp, int *walk_su
*** 6407,6412 ****
--- 6407,6416 ----
  	  WALK_SUBTREE (DECL_SIZE (decl));
  	  WALK_SUBTREE (DECL_SIZE_UNIT (decl));
  	}
+       if (is_typedef_decl (TREE_OPERAND (t, 0)))
+ 	/* We avoid walking into typedefs above, but we do want to walk
+ 	   into them if we're looking at the actual declaration.  */
+ 	WALK_SUBTREE (DECL_ORIGINAL_TYPE (TREE_OPERAND (t, 0)));
        break;
  
      case LAMBDA_EXPR:
diff -Nrcpad gcc-17-20260614/gcc/ddg.h gcc-17-20260621/gcc/ddg.h
*** gcc-17-20260614/gcc/ddg.h	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/ddg.h	Sun Jun 21 22:32:06 2026
*************** along with GCC; see the file COPYING3.
*** 21,28 ****
  #ifndef GCC_DDG_H
  #define GCC_DDG_H
  
- /* For sbitmap.  */
- 
  typedef struct ddg_node *ddg_node_ptr;
  typedef struct ddg_edge *ddg_edge_ptr;
  typedef struct ddg *ddg_ptr;
--- 21,26 ----
diff -Nrcpad gcc-17-20260614/gcc/doc/cpp.texi gcc-17-20260621/gcc/doc/cpp.texi
*** gcc-17-20260614/gcc/doc/cpp.texi	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/doc/cpp.texi	Sun Jun 21 22:32:06 2026
*************** selected, the value of the macro is
*** 1912,1920 ****
  @code{201703L} for the 2017 C++ standard,
  @code{202002L} for the 2020 C++ standard,
  @code{202302L} for the 2023 C++ standard,
! or an unspecified value strictly larger than @code{202302L} for the
! experimental languages enabled by @option{-std=c++26} and
! @option{-std=gnu++26}.
  
  @item __OBJC__
  This macro is defined, with value 1, when the Objective-C compiler is in
--- 1912,1921 ----
  @code{201703L} for the 2017 C++ standard,
  @code{202002L} for the 2020 C++ standard,
  @code{202302L} for the 2023 C++ standard,
! @code{202603L} for the 2026 C++ standard,
! or an unspecified value strictly larger than @code{202603L} for the
! experimental languages enabled by @option{-std=c++29} and
! @option{-std=gnu++29}.
  
  @item __OBJC__
  This macro is defined, with value 1, when the Objective-C compiler is in
diff -Nrcpad gcc-17-20260614/gcc/doc/extend.texi gcc-17-20260621/gcc/doc/extend.texi
*** gcc-17-20260614/gcc/doc/extend.texi	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/doc/extend.texi	Sun Jun 21 22:32:06 2026
*************** strcpy_irom (buf, IROM_message);
*** 1658,1670 ****
  strcpy_irom (alt_buf, "placed within read-only RAM area.");
  @end smallexample
  
  @anchor{Function Attributes}
  @anchor{Variable Attributes}
  @anchor{Type Attributes}
  @anchor{Label Attributes}
  @anchor{Enumerator Attributes}
  @anchor{Statement Attributes}
- @node Attributes
  @section Attributes Specific to GCC
  @cindex attributes
  @cindex declaring attributes
--- 1658,1670 ----
  strcpy_irom (alt_buf, "placed within read-only RAM area.");
  @end smallexample
  
+ @node Attributes
  @anchor{Function Attributes}
  @anchor{Variable Attributes}
  @anchor{Type Attributes}
  @anchor{Label Attributes}
  @anchor{Enumerator Attributes}
  @anchor{Statement Attributes}
  @section Attributes Specific to GCC
  @cindex attributes
  @cindex declaring attributes
*************** ordinary functions or C++ member functio
*** 1847,1856 ****
  * Attribute Syntax::            Formal syntax for traditional GNU attributes.
  @end menu
  
  @anchor{Common Function Attributes}
  @anchor{Common Variable Attributes}
  @anchor{Common Type Attributes}
- @node Common Attributes
  @subsection Common Attributes
  
  The following GNU-specific attributes are supported on most targets in
--- 1847,1856 ----
  * Attribute Syntax::            Formal syntax for traditional GNU attributes.
  @end menu
  
+ @node Common Attributes
  @anchor{Common Function Attributes}
  @anchor{Common Variable Attributes}
  @anchor{Common Type Attributes}
  @subsection Common Attributes
  
  The following GNU-specific attributes are supported on most targets in
*************** The default for the attribute is control
*** 5771,5778 ****
  * Xtensa Attributes::
  @end menu
  
- @anchor{AArch64 Function Attributes}
  @node AArch64 Attributes
  @subsubsection AArch64 Attributes
  
  The following target-specific function attributes are available for the
--- 5771,5778 ----
  * Xtensa Attributes::
  @end menu
  
  @node AArch64 Attributes
+ @anchor{AArch64 Function Attributes}
  @subsubsection AArch64 Attributes
  
  The following target-specific function attributes are available for the
*************** architectural feature rules specified ab
*** 5994,6001 ****
  
  @end table
  
- @anchor{AMD GCN Function Attributes}
  @node AMD GCN Attributes
  @subsubsection AMD GCN Attributes
  
  These attributes are supported by the AMD GCN back end:
--- 5994,6001 ----
  
  @end table
  
  @node AMD GCN Attributes
+ @anchor{AMD GCN Function Attributes}
  @subsubsection AMD GCN Attributes
  
  These attributes are supported by the AMD GCN back end:
*************** OpenACC/OpenMP).
*** 6087,6096 ****
  @end table
  @end table
  
  @anchor{ARC Function Attributes}
  @anchor{ARC Type Attributes}
  @anchor{ARC Variable Attributes}
- @node ARC Attributes
  @subsubsection ARC Attributes
  
  These attributes are supported by the ARC back end:
--- 6087,6096 ----
  @end table
  @end table
  
+ @node ARC Attributes
  @anchor{ARC Function Attributes}
  @anchor{ARC Type Attributes}
  @anchor{ARC Variable Attributes}
  @subsubsection ARC Attributes
  
  These attributes are supported by the ARC back end:
*************** without involving the additional semanti
*** 6185,6193 ****
  loads and stores of data declared @code{uncached}.
  @end table
  
  @anchor{ARM Function Attributes}
  @anchor{ARM Type Attributes}
- @node ARM Attributes
  @subsubsection ARM Attributes
  
  These attributes are supported for ARM targets:
--- 6185,6193 ----
  loads and stores of data declared @code{uncached}.
  @end table
  
+ @node ARM Attributes
  @anchor{ARM Function Attributes}
  @anchor{ARM Type Attributes}
  @subsubsection ARM Attributes
  
  These attributes are supported for ARM targets:
*************** most Symbian OS code uses @code{__declsp
*** 6366,6374 ****
  
  @end table
  
  @anchor{AVR Function Attributes}
  @anchor{AVR Variable Attributes}
- @node AVR Attributes
  @subsubsection AVR Attributes
  
  These attributes are supported by the AVR back end:
--- 6366,6374 ----
  
  @end table
  
+ @node AVR Attributes
  @anchor{AVR Function Attributes}
  @anchor{AVR Variable Attributes}
  @subsubsection AVR Attributes
  
  These attributes are supported by the AVR back end:
*************** See also the @option{-mabsdata} @ref{AVR
*** 6711,6719 ****
  
  @end table
  
  @anchor{Blackfin Function Attributes}
  @anchor{Blackfin Variable Attributes}
- @node Blackfin Attributes
  @subsubsection Blackfin Attributes
  
  These attributes are supported by the Blackfin back end:
--- 6711,6719 ----
  
  @end table
  
+ @node Blackfin Attributes
  @anchor{Blackfin Function Attributes}
  @anchor{Blackfin Variable Attributes}
  @subsubsection Blackfin Attributes
  
  These attributes are supported by the Blackfin back end:
*************** the specific section named @code{.l1.dat
*** 6829,6837 ****
  attribute are put into the specific section named @code{.l1.data.B}.
  @end table
  
  @anchor{BPF Function Attributes}
  @anchor{BPF Type Attributes}
- @node BPF Attributes
  @subsubsection BPF Attributes
  
  These attributes are supported by the BPF back end:
--- 6829,6837 ----
  attribute are put into the specific section named @code{.l1.data.B}.
  @end table
  
+ @node BPF Attributes
  @anchor{BPF Function Attributes}
  @anchor{BPF Type Attributes}
  @subsubsection BPF Attributes
  
  These attributes are supported by the BPF back end:
*************** of that type. The behavior is equivalent
*** 6863,6870 ****
  wrapping every such access with @code{__builtin_preserve_access_index}.
  @end table
  
- @anchor{C-SKY Function Attributes}
  @node C-SKY Attributes
  @subsubsection C-SKY Attributes
  
  These attributes are supported by the C-SKY back end:
--- 6863,6870 ----
  wrapping every such access with @code{__builtin_preserve_access_index}.
  @end table
  
  @node C-SKY Attributes
+ @anchor{C-SKY Function Attributes}
  @subsubsection C-SKY Attributes
  
  These attributes are supported by the C-SKY back end:
*************** are ignored with a warning otherwise.  @
*** 6887,6894 ****
  @end table
  
  
- @anchor{Epiphany Function Attributes}
  @node Epiphany Attributes
  @subsubsection Epiphany Attributes
  
  These attributes are supported by the Epiphany back end:
--- 6887,6894 ----
  @end table
  
  
  @node Epiphany Attributes
+ @anchor{Epiphany Function Attributes}
  @subsubsection Epiphany Attributes
  
  These attributes are supported by the Epiphany back end:
*************** command-line switch and @code{#pragma lo
*** 6969,6977 ****
  @end table
  
  
  @anchor{H8/300 Function Attributes}
  @anchor{H8/300 Variable Attributes}
- @node H8/300 Attributes
  @subsubsection H8/300 Attributes
  
  These attributes are available for H8/300 targets:
--- 6969,6977 ----
  @end table
  
  
+ @node H8/300 Attributes
  @anchor{H8/300 Function Attributes}
  @anchor{H8/300 Variable Attributes}
  @subsubsection H8/300 Attributes
  
  These attributes are available for H8/300 targets:
*************** on data in the tiny data section.  Note
*** 7046,7054 ****
  slightly under 32KB of data.
  @end table
  
  @anchor{IA-64 Function Attributes}
  @anchor{IA-64 Variable Attributes}
- @node IA-64 Attributes
  @subsubsection IA-64 Attributes
  
  These attributes are supported on IA-64 targets:
--- 7046,7054 ----
  slightly under 32KB of data.
  @end table
  
+ @node IA-64 Attributes
  @anchor{IA-64 Function Attributes}
  @anchor{IA-64 Variable Attributes}
  @subsubsection IA-64 Attributes
  
  These attributes are supported on IA-64 targets:
*************** independent and hence this attribute mus
*** 7093,7101 ****
  defined by shared libraries.
  @end table
  
  @anchor{LoongArch Function Attributes}
  @anchor{LoongArch Variable Attributes}
- @node LoongArch Attributes
  @subsubsection LoongArch Attributes
  
  The following attributes are supported by the LoongArch back end:
--- 7093,7101 ----
  defined by shared libraries.
  @end table
  
+ @node LoongArch Attributes
  @anchor{LoongArch Function Attributes}
  @anchor{LoongArch Variable Attributes}
  @subsubsection LoongArch Attributes
  
  The following attributes are supported by the LoongArch back end:
*************** specially.  Currently the only supported
*** 7423,7431 ****
  @code{normal} and @code{extreme}.
  @end table
  
  @anchor{M32R/D Function Attributes}
  @anchor{M32R/D Variable Attributes}
- @node M32R/D Attributes
  @subsubsection M32R/D Attributes
  
  These attributes are supported by the M32R/D back end:
--- 7423,7431 ----
  @code{normal} and @code{extreme}.
  @end table
  
+ @node M32R/D Attributes
  @anchor{M32R/D Function Attributes}
  @anchor{M32R/D Variable Attributes}
  @subsubsection M32R/D Attributes
  
  These attributes are supported by the M32R/D back end:
*************** and may not be reachable with the @code{
*** 7465,7472 ****
  generates the much slower @code{seth/add3/jl} instruction sequence).
  @end table
  
- @anchor{m68k Function Attributes}
  @node m68k Attributes
  @subsubsection m68k Attributes
  
  These attributes are supported by the m68k back end:
--- 7465,7472 ----
  generates the much slower @code{seth/add3/jl} instruction sequence).
  @end table
  
  @node m68k Attributes
+ @anchor{m68k Function Attributes}
  @subsubsection m68k Attributes
  
  These attributes are supported by the m68k back end:
*************** sequences and replaces the return instru
*** 7494,7501 ****
  instruction.  This attribute is available only on fido.
  @end table
  
- @anchor{MicroBlaze Function Attributes}
  @node MicroBlaze Attributes
  @subsubsection MicroBlaze Attributes
  
  These attributes are supported on MicroBlaze targets:
--- 7494,7501 ----
  instruction.  This attribute is available only on fido.
  @end table
  
  @node MicroBlaze Attributes
+ @anchor{MicroBlaze Function Attributes}
  @subsubsection MicroBlaze Attributes
  
  These attributes are supported on MicroBlaze targets:
*************** emits appropriate prologue code and gene
*** 7540,7548 ****
  using @code{rtid} instead of @code{rtsd}.
  @end table
  
  @anchor{Microsoft Windows Function Attributes}
  @anchor{Microsoft Windows Variable Attributes}
- @node Microsoft Windows Attributes
  @subsubsection Microsoft Windows Attributes
  
  @cindex @code{__declspec}
--- 7540,7548 ----
  using @code{rtid} instead of @code{rtsd}.
  @end table
  
+ @node Microsoft Windows Attributes
  @anchor{Microsoft Windows Function Attributes}
  @anchor{Microsoft Windows Variable Attributes}
  @subsubsection Microsoft Windows Attributes
  
  @cindex @code{__declspec}
*************** linkers work.  See @code{section} attrib
*** 7701,7708 ****
  The @code{shared} attribute is only available on Microsoft Windows@.
  @end table
  
- @anchor{MIPS Function Attributes}
  @node MIPS Attributes
  @subsubsection MIPS Attributes
  
  These attributes are supported by the MIPS back end:
--- 7701,7708 ----
  The @code{shared} attribute is only available on Microsoft Windows@.
  @end table
  
  @node MIPS Attributes
+ @anchor{MIPS Function Attributes}
  @subsubsection MIPS Attributes
  
  These attributes are supported by the MIPS back end:
*************** The function can read the instruction st
*** 7871,7879 ****
  If there is no argument supplied, the default of @code{"yes"} applies.
  @end table
  
  @anchor{MSP430 Function Attributes}
  @anchor{MSP430 Variable Attributes}
- @node MSP430 Attributes
  @subsubsection MSP430 Attributes
  
  These attributes are supported by the MSP430 back end:
--- 7871,7879 ----
  If there is no argument supplied, the default of @code{"yes"} applies.
  @end table
  
+ @node MSP430 Attributes
  @anchor{MSP430 Function Attributes}
  @anchor{MSP430 Variable Attributes}
  @subsubsection MSP430 Attributes
  
  These attributes are supported by the MSP430 back end:
*************** is used, and the @code{.lower} prefix is
*** 7977,7984 ****
  
  @end table
  
- @anchor{NDS32 Function Attributes}
  @node NDS32 Attributes
  @subsubsection NDS32 Attributes
  
  These attributes are supported by the NDS32 back end:
--- 7977,7984 ----
  
  @end table
  
  @node NDS32 Attributes
+ @anchor{NDS32 Function Attributes}
  @subsubsection NDS32 Attributes
  
  These attributes are supported by the NDS32 back end:
*************** Provide a user-defined function to handl
*** 8042,8050 ****
  @end table
  @end table
  
  @anchor{Nvidia PTX Function Attributes}
  @anchor{Nvidia PTX Variable Attributes}
- @node Nvidia PTX Attributes
  @subsubsection Nvidia PTX Attributes
  
  These attributes are supported by the Nvidia PTX back end:
--- 8042,8050 ----
  @end table
  @end table
  
+ @node Nvidia PTX Attributes
  @anchor{Nvidia PTX Function Attributes}
  @anchor{Nvidia PTX Variable Attributes}
  @subsubsection Nvidia PTX Attributes
  
  These attributes are supported by the Nvidia PTX back end:
*************** within one thread block refer to the sam
*** 8071,8080 ****
  The runtime does not initialize variables in this memory space.
  @end table
  
  @anchor{PowerPC Function Attributes}
  @anchor{PowerPC Type Attributes}
  @anchor{PowerPC Variable Attributes}
- @node PowerPC Attributes
  @subsubsection PowerPC Attributes
  
  These attributes are supported by the PowerPC back end:
--- 8071,8080 ----
  The runtime does not initialize variables in this memory space.
  @end table
  
+ @node PowerPC Attributes
  @anchor{PowerPC Function Attributes}
  @anchor{PowerPC Type Attributes}
  @anchor{PowerPC Variable Attributes}
  @subsubsection PowerPC Attributes
  
  These attributes are supported by the PowerPC back end:
*************** These attributes mainly are intended to
*** 8303,8310 ****
  @code{__pixel}, and @code{__bool} AltiVec keywords.
  @end table
  
- @anchor{RISC-V Function Attributes}
  @node RISC-V Attributes
  @subsubsection RISC-V Attributes
  
  These attributes are supported by the RISC-V back end:
--- 8303,8310 ----
  @code{__pixel}, and @code{__bool} AltiVec keywords.
  @end table
  
  @node RISC-V Attributes
+ @anchor{RISC-V Function Attributes}
  @subsubsection RISC-V Attributes
  
  These attributes are supported by the RISC-V back end:
*************** and @code{zbb} extensions and tunes it f
*** 8417,8425 ****
  
  @end table
  
  @anchor{RL78 Function Attributes}
  @anchor{RL78 Variable Attributes}
- @node RL78 Attributes
  @subsubsection RL78 Attributes
  
  These attributes are supported by the RL78 back end:
--- 8417,8425 ----
  
  @end table
  
+ @node RL78 Attributes
  @anchor{RL78 Function Attributes}
  @anchor{RL78 Variable Attributes}
  @subsubsection RL78 Attributes
  
  These attributes are supported by the RL78 back end:
*************** which can be accessed more efficiently t
*** 8450,8457 ****
  
  @end table
  
- @anchor{RX Function Attributes}
  @node RX Attributes
  @subsubsection RX Attributes
  
  These attributes are supported by the RX back end:
--- 8450,8457 ----
  
  @end table
  
  @node RX Attributes
+ @anchor{RX Function Attributes}
  @subsubsection RX Attributes
  
  These attributes are supported by the RX back end:
*************** function (i.e.@: it retains the normal C
*** 8507,8514 ****
  @code{interrupt} attribute for a description of its arguments.
  @end table
  
- @anchor{S/390 Function Attributes}
  @node S/390 Attributes
  @subsubsection S/390 Attributes
  
  These attributes are supported on the S/390:
--- 8507,8514 ----
  @code{interrupt} attribute for a description of its arguments.
  @end table
  
  @node S/390 Attributes
+ @anchor{S/390 Function Attributes}
  @subsubsection S/390 Attributes
  
  These attributes are supported on the S/390:
*************** change any feature macros.  For example,
*** 8577,8584 ****
  does not undefine the @code{__VEC__} macro.
  @end table
  
- @anchor{SH Function Attributes}
  @node SH Attributes
  @subsubsection SH Attributes
  
  These attributes are supported on the SH family of processors:
--- 8577,8584 ----
  does not undefine the @code{__VEC__} macro.
  @end table
  
  @node SH Attributes
+ @anchor{SH Function Attributes}
  @subsubsection SH Attributes
  
  These attributes are supported on the SH family of processors:
*************** On SH targets this attribute is similar
*** 8674,8689 ****
  but it does not save and restore all registers.
  @end table
  
- @anchor{Symbian OS Function Attributes}
  @node Symbian OS Attributes
  @subsubsection Symbian OS Attributes
  
  @xref{Microsoft Windows Attributes}, for discussion of the
  @code{dllexport} and @code{dllimport} attributes.
  
  @anchor{V850 Function Attributes}
  @anchor{V850 Variable Attributes}
- @node V850 Attributes
  @subsubsection V850 Attributes
  
  The V850 back end supports these attributes:
--- 8674,8689 ----
  but it does not save and restore all registers.
  @end table
  
  @node Symbian OS Attributes
+ @anchor{Symbian OS Function Attributes}
  @subsubsection Symbian OS Attributes
  
  @xref{Microsoft Windows Attributes}, for discussion of the
  @code{dllexport} and @code{dllimport} attributes.
  
+ @node V850 Attributes
  @anchor{V850 Function Attributes}
  @anchor{V850 Variable Attributes}
  @subsubsection V850 Attributes
  
  The V850 back end supports these attributes:
*************** Use it to explicitly place a variable in
*** 8722,8729 ****
  of memory.
  @end table
  
- @anchor{Visium Function Attributes}
  @node Visium Attributes
  @subsubsection Visium Attributes
  
  These attributes are supported by the Visium back end:
--- 8722,8729 ----
  of memory.
  @end table
  
  @node Visium Attributes
+ @anchor{Visium Function Attributes}
  @subsubsection Visium Attributes
  
  These attributes are supported by the Visium back end:
*************** function entry and exit sequences suitab
*** 8739,8748 ****
  when this attribute is present.
  @end table
  
  @anchor{x86 Function Attributes}
  @anchor{x86 Type Attributes}
  @anchor{x86 Variable Attributes}
- @node x86 Attributes
  @subsubsection x86 Attributes
  
  These attributes are supported by the x86 back end:
--- 8739,8748 ----
  when this attribute is present.
  @end table
  
+ @node x86 Attributes
  @anchor{x86 Function Attributes}
  @anchor{x86 Type Attributes}
  @anchor{x86 Variable Attributes}
  @subsubsection x86 Attributes
  
  These attributes are supported by the x86 back end:
*************** see @ref{x86 Options}, for details of ho
*** 9750,9758 ****
  @end table
  
  
  @anchor{Xstormy16 Function Attributes}
  @anchor{Xstormy16 Variable Attributes}
- @node Xstormy16 Attributes
  @subsubsection Xstormy16 Attributes
  
  These attributes are supported by the Xstormy16 back end:
--- 9750,9758 ----
  @end table
  
  
+ @node Xstormy16 Attributes
  @anchor{Xstormy16 Function Attributes}
  @anchor{Xstormy16 Variable Attributes}
  @subsubsection Xstormy16 Attributes
  
  These attributes are supported by the Xstormy16 back end:
*************** precision and signedness of the given bi
*** 16330,16336 ****
  of the underlying type.
  
  For example, the following macro can be used to portably check, at
! compile-time, whether or not adding two constant integers will overflow,
  and perform the addition only when it is known to be safe and not to trigger
  a @option{-Woverflow} warning.
  
--- 16330,16336 ----
  of the underlying type.
  
  For example, the following macro can be used to portably check, at
! compile time, whether or not adding two constant integers will overflow,
  and perform the addition only when it is known to be safe and not to trigger
  a @option{-Woverflow} warning.
  
diff -Nrcpad gcc-17-20260614/gcc/doc/install.texi gcc-17-20260621/gcc/doc/install.texi
*** gcc-17-20260614/gcc/doc/install.texi	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/doc/install.texi	Sun Jun 21 22:32:06 2026
*************** section.
*** 294,302 ****
  @item @anchor{GCOBOL-prerequisite}GCOBOL
  
  The COBOL compiler, gcobol, first appeared in GCC 15.  To build the
! COBOL parser, you need GNU Bison 3.5.1 or later (but not 3.8.0). To build
! the lexer requires GNU Flex 2.6.4, the current version as of this writing,
! released on 2017-05-06.
  
  The gcobol documentation is maintained as manpages using troff
  mdoc. GNU groff is required to convert them to PDF format.  Conversion
--- 294,303 ----
  @item @anchor{GCOBOL-prerequisite}GCOBOL
  
  The COBOL compiler, gcobol, first appeared in GCC 15.  To build the
! COBOL parser, you need GNU Bison 3.8.2, the current version of as of
! this writing, released 2021-09-25. To build the lexer requires GNU
! Flex 2.6.4, also the current version as of this writing, released on
! 2017-05-06.
  
  The gcobol documentation is maintained as manpages using troff
  mdoc. GNU groff is required to convert them to PDF format.  Conversion
*************** Necessary to build GCC during developmen
*** 598,604 ****
  files are not included in the version-controlled source repository.
  They are included in releases.
  
! @item Bison version 3.5.1 or later (but not 3.8.0)
  
  Necessary when modifying @file{*.y} files in the COBOL front end.
  
--- 599,605 ----
  files are not included in the version-controlled source repository.
  They are included in releases.
  
! @item Bison version 3.8.2 (or later)
  
  Necessary when modifying @file{*.y} files in the COBOL front end.
  
diff -Nrcpad gcc-17-20260614/gcc/doc/invoke.texi gcc-17-20260621/gcc/doc/invoke.texi
*** gcc-17-20260614/gcc/doc/invoke.texi	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/doc/invoke.texi	Sun Jun 21 22:32:06 2026
*************** Support is experimental, and could chang
*** 2637,2651 ****
  future releases.
  The name @samp{gnu++2b} is deprecated.
  
! @item c++2c
! @itemx c++26
  The next revision of the ISO C++ standard, planned for
  2026.  Support is highly experimental, and will almost certainly
  change in incompatible ways in future releases.
  
! @item gnu++2c
! @itemx gnu++26
! GNU dialect of @option{-std=c++2c}.  Support is highly experimental,
  and will almost certainly change in incompatible ways in future
  releases.
  @end table
--- 2637,2663 ----
  future releases.
  The name @samp{gnu++2b} is deprecated.
  
! @item c++26
! @itemx c++2c
  The next revision of the ISO C++ standard, planned for
  2026.  Support is highly experimental, and will almost certainly
  change in incompatible ways in future releases.
  
! @item gnu++26
! @itemx gnu++2c
! GNU dialect of @option{-std=c++26}.  Support is highly experimental,
! and will almost certainly change in incompatible ways in future
! releases.
! 
! @item c++29
! @itemx c++2d
! The upcoming revision of the ISO C++ standard, planned for
! 2029.  Support is highly experimental, and will almost certainly
! change in incompatible ways in future releases.
! 
! @item gnu++29
! @itemx gnu++2d
! GNU dialect of @option{-std=c++29}.  Support is highly experimental,
  and will almost certainly change in incompatible ways in future
  releases.
  @end table
*************** requires an unsigned argument and the ar
*** 7393,7399 ****
  Warn about calls to formatted input/output functions such as @code{snprintf}
  and @code{vsnprintf} that might result in output truncation.  When the exact
  number of bytes written by a format directive cannot be determined at
! compile-time it is estimated based on heuristics that depend on
  the @var{level} argument and on optimization.  While enabling optimization
  will in most cases improve the accuracy of the warning, it may also result
  in false positives.  Except as noted otherwise, the option uses the same
--- 7405,7411 ----
  Warn about calls to formatted input/output functions such as @code{snprintf}
  and @code{vsnprintf} that might result in output truncation.  When the exact
  number of bytes written by a format directive cannot be determined at
! compile time it is estimated based on heuristics that depend on
  the @var{level} argument and on optimization.  While enabling optimization
  will in most cases improve the accuracy of the warning, it may also result
  in false positives.  Except as noted otherwise, the option uses the same
*************** problems or, in some cases, to provide w
*** 21265,21272 ****
  for documentation of these internal parameters.
  @end table
  
- @anchor{Submodel Options}
  @node Target-Specific Options
  @section Target-Specific Options
  @cindex submodel options
  @cindex hardware-specific options
--- 21277,21284 ----
  for documentation of these internal parameters.
  @end table
  
  @node Target-Specific Options
+ @anchor{Submodel Options}
  @section Target-Specific Options
  @cindex submodel options
  @cindex hardware-specific options
diff -Nrcpad gcc-17-20260614/gcc/doc/passes.texi gcc-17-20260621/gcc/doc/passes.texi
*** gcc-17-20260614/gcc/doc/passes.texi	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/doc/passes.texi	Sun Jun 21 22:32:06 2026
*************** pass is located in @code{tree-nrv.cc} an
*** 796,802 ****
  
  This is a propagation pass similar to CCP that tries to remove calls to
  @code{__builtin_object_size} when the upper or lower bound for the size
! of the object can be computed at compile-time.  It also tries to replace
  calls to @code{__builtin_dynamic_object_size} with an expression that
  evaluates the upper or lower bound for the size of the object.  This
  pass is located in @file{tree-object-size.cc} and is described by
--- 796,802 ----
  
  This is a propagation pass similar to CCP that tries to remove calls to
  @code{__builtin_object_size} when the upper or lower bound for the size
! of the object can be computed at compile time.  It also tries to replace
  calls to @code{__builtin_dynamic_object_size} with an expression that
  evaluates the upper or lower bound for the size of the object.  This
  pass is located in @file{tree-object-size.cc} and is described by
diff -Nrcpad gcc-17-20260614/gcc/doc/riscv-mcpu.texi gcc-17-20260621/gcc/doc/riscv-mcpu.texi
*** gcc-17-20260614/gcc/doc/riscv-mcpu.texi	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/doc/riscv-mcpu.texi	Sun Jun 21 22:32:06 2026
*************** by particular CPU name.  Permissible val
*** 62,68 ****
  
  @samp{xt-c9501fdvt},
  
! @samp{tt-ascalon-d8},
  
  @samp{xiangshan-nanhu},
  
--- 62,68 ----
  
  @samp{xt-c9501fdvt},
  
! @samp{tt-ascalon-x},
  
  @samp{xiangshan-nanhu},
  
diff -Nrcpad gcc-17-20260614/gcc/doc/riscv-mtune.texi gcc-17-20260621/gcc/doc/riscv-mtune.texi
*** gcc-17-20260614/gcc/doc/riscv-mtune.texi	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/doc/riscv-mtune.texi	Sun Jun 21 22:32:06 2026
*************** particular CPU name.  Permissible values
*** 30,36 ****
  
  @samp{sifive-p600-series},
  
! @samp{tt-ascalon-d8},
  
  @samp{thead-c906},
  
--- 30,36 ----
  
  @samp{sifive-p600-series},
  
! @samp{tt-ascalon-x},
  
  @samp{thead-c906},
  
diff -Nrcpad gcc-17-20260614/gcc/doc/rtl.texi gcc-17-20260621/gcc/doc/rtl.texi
*** gcc-17-20260614/gcc/doc/rtl.texi	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/doc/rtl.texi	Sun Jun 21 22:32:06 2026
*************** to do it.
*** 2996,3002 ****
  
  For all conversion operations, @var{x} must not be @code{VOIDmode}
  because the mode in which to do the conversion would not be known.
! The conversion must either be done at compile-time or @var{x}
  must be placed into a register.
  
  @table @code
--- 2996,3002 ----
  
  For all conversion operations, @var{x} must not be @code{VOIDmode}
  because the mode in which to do the conversion would not be known.
! The conversion must either be done at compile time or @var{x}
  must be placed into a register.
  
  @table @code
diff -Nrcpad gcc-17-20260614/gcc/doc/sourcebuild.texi gcc-17-20260621/gcc/doc/sourcebuild.texi
*** gcc-17-20260614/gcc/doc/sourcebuild.texi	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/doc/sourcebuild.texi	Sun Jun 21 22:32:06 2026
*************** included, in this file you should guard
*** 876,884 ****
  inside appropriate @code{#ifdef RTX_CODE} or @code{#ifdef TREE_CODE}
  conditional code segments.
  
! If the backend uses shared data structures that require @code{GTY} markers 
  for garbage collection (@pxref{Type Information}), you must declare those
! in @file{@var{machine}.h} rather than @file{@var{machine}-protos.h}.  
  Any definitions required for building libgcc must also go in
  @file{@var{machine}.h}.
  
--- 876,884 ----
  inside appropriate @code{#ifdef RTX_CODE} or @code{#ifdef TREE_CODE}
  conditional code segments.
  
! If the backend uses shared data structures that require @code{GTY} markers
  for garbage collection (@pxref{Type Information}), you must declare those
! in @file{@var{machine}.h} rather than @file{@var{machine}-protos.h}.
  Any definitions required for building libgcc must also go in
  @file{@var{machine}.h}.
  
*************** By convention, keywords ending in @code{
*** 1506,1511 ****
--- 1506,1530 ----
  specified for the particular test in an earlier @code{dg-options} or
  @code{dg-add-options} directive.
  
+ @subsubsection Object file format
+ 
+ This identifies the object file format emitted by the compiler. Matching
+ assembler output often depends on content that differs between file formats.
+ 
+ @table @code
+ 
+ @item elf
+ Target uses the ELF file format (note that ELFv2 is matched specifically for
+ the powerpc platform, below).
+ 
+ @item macho
+ Target uses the Mach-O file format (currently applies only to Darwin / macOS).
+ 
+ @item pe
+ Target uses the PE/COFF file format (e.g. for Windows).
+ 
+ @end table
+ 
  @subsubsection Endianness
  
  @table @code
diff -Nrcpad gcc-17-20260614/gcc/dwarf2out.cc gcc-17-20260621/gcc/dwarf2out.cc
*** gcc-17-20260614/gcc/dwarf2out.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/dwarf2out.cc	Sun Jun 21 22:32:06 2026
*************** static char *producer_string;
*** 25640,25645 ****
--- 25640,25647 ----
  static const char *
  highest_c_language (const char *lang1, const char *lang2)
  {
+   if (strcmp ("GNU C++29", lang1) == 0 || strcmp ("GNU C++29", lang2) == 0)
+     return "GNU C++29";
    if (strcmp ("GNU C++26", lang1) == 0 || strcmp ("GNU C++26", lang2) == 0)
      return "GNU C++26";
    if (strcmp ("GNU C++23", lang1) == 0 || strcmp ("GNU C++23", lang2) == 0)
*************** gen_compile_unit_die (const char *filena
*** 25794,25800 ****
  	    {
  	      language = DW_LANG_C_plus_plus_14;
  	      lname = DW_LNAME_C_plus_plus;
! 	      lversion = 202400;
  	    }
  	}
      }
--- 25796,25808 ----
  	    {
  	      language = DW_LANG_C_plus_plus_14;
  	      lname = DW_LNAME_C_plus_plus;
! 	      lversion = 202603;
! 	    }
! 	  else if (strcmp (language_string, "GNU C++29") == 0)
! 	    {
! 	      language = DW_LANG_C_plus_plus_14;
! 	      lname = DW_LNAME_C_plus_plus;
! 	      lversion = 202700;
  	    }
  	}
      }
diff -Nrcpad gcc-17-20260614/gcc/expmed.cc gcc-17-20260621/gcc/expmed.cc
*** gcc-17-20260614/gcc/expmed.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/expmed.cc	Sun Jun 21 22:32:06 2026
*************** store_integral_bit_field (rtx op0, opt_s
*** 1064,1072 ****
  				 value, value_mode, reverse);
  	  return true;
  	}
!       op0 = simplify_gen_subreg (word_mode, op0, op0_mode.require (),
! 				 bitnum / BITS_PER_WORD * UNITS_PER_WORD);
!       gcc_assert (op0);
        op0_mode = word_mode;
        bitnum %= BITS_PER_WORD;
      }
--- 1064,1084 ----
  				 value, value_mode, reverse);
  	  return true;
  	}
!       rtx new_op0
! 	= simplify_gen_subreg (word_mode, op0, op0_mode.require (),
! 			       bitnum / BITS_PER_WORD * UNITS_PER_WORD);
!       if (!new_op0)
! 	{
! 	  /* No valid word-mode SUBREG of op0 at this offset.  Defer to
! 	     store_split_bit_field, which addresses op0 a word at a time.  */
! 	  if (!fallback_p)
! 	    return false;
! 	  store_split_bit_field (op0, op0_mode, bitsize, bitnum,
! 				 bitregion_start, bitregion_end,
! 				 value, value_mode, reverse);
! 	  return true;
! 	}
!       op0 = new_op0;
        op0_mode = word_mode;
        bitnum %= BITS_PER_WORD;
      }
diff -Nrcpad gcc-17-20260614/gcc/fold-const.cc gcc-17-20260621/gcc/fold-const.cc
*** gcc-17-20260614/gcc/fold-const.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/fold-const.cc	Sun Jun 21 22:32:06 2026
*************** fold_plusminus_mult_expr (location_t loc
*** 7275,7302 ****
    /* No identical multiplicands; see if we can find a common
       power-of-two factor in non-power-of-two multiplies.  This
       can help in multi-dimensional array access.  */
!   else if (tree_fits_shwi_p (arg01) && tree_fits_shwi_p (arg11))
      {
!       HOST_WIDE_INT int01 = tree_to_shwi (arg01);
!       HOST_WIDE_INT int11 = tree_to_shwi (arg11);
!       HOST_WIDE_INT tmp;
        bool swap = false;
        tree maybe_same;
  
        /* Move min of absolute values to int11.  */
!       if (absu_hwi (int01) < absu_hwi (int11))
          {
! 	  tmp = int01, int01 = int11, int11 = tmp;
! 	  alt0 = arg00, arg00 = arg10, arg10 = alt0;
  	  maybe_same = arg01;
  	  swap = true;
  	}
        else
  	maybe_same = arg11;
  
!       const unsigned HOST_WIDE_INT factor = absu_hwi (int11);
!       if (factor > 1
! 	  && pow2p_hwi (factor)
  	  && (int01 & (factor - 1)) == 0
  	  /* The remainder should not be a constant, otherwise we
  	     end up folding i * 4 + 2 to (i * 2 + 1) * 2 which has
--- 7275,7302 ----
    /* No identical multiplicands; see if we can find a common
       power-of-two factor in non-power-of-two multiplies.  This
       can help in multi-dimensional array access.  */
!   else if (TREE_CODE (arg01) == INTEGER_CST
! 	   && TREE_CODE (arg11) == INTEGER_CST)
      {
!       wide_int int01 = wi::to_wide (arg01);
!       wide_int int11 = wi::to_wide (arg11);
        bool swap = false;
        tree maybe_same;
  
        /* Move min of absolute values to int11.  */
!       if (wi::ltu_p (wi::abs (int01), wi::abs (int11)))
          {
! 	  std::swap (int01, int11);
! 	  std::swap (arg00, arg10);
  	  maybe_same = arg01;
  	  swap = true;
  	}
        else
  	maybe_same = arg11;
  
!       wide_int factor = wi::abs (int11);
!       if (wi::gtu_p (factor, 1u)
! 	  && wi::exact_log2 (factor) != -1
  	  && (int01 & (factor - 1)) == 0
  	  /* The remainder should not be a constant, otherwise we
  	     end up folding i * 4 + 2 to (i * 2 + 1) * 2 which has
*************** fold_plusminus_mult_expr (location_t loc
*** 7304,7315 ****
  	  && TREE_CODE (arg10) != INTEGER_CST)
          {
  	  alt0 = fold_build2_loc (loc, MULT_EXPR, TREE_TYPE (arg00), arg00,
! 			      build_int_cst (TREE_TYPE (arg00),
! 					     int01 / int11));
  	  alt1 = arg10;
  	  same = maybe_same;
  	  if (swap)
! 	    maybe_same = alt0, alt0 = alt1, alt1 = maybe_same;
  	}
      }
  
--- 7304,7316 ----
  	  && TREE_CODE (arg10) != INTEGER_CST)
          {
  	  alt0 = fold_build2_loc (loc, MULT_EXPR, TREE_TYPE (arg00), arg00,
! 				  wide_int_to_tree (TREE_TYPE (arg00),
! 						    wi::sdiv_trunc (int01,
! 								    int11)));
  	  alt1 = arg10;
  	  same = maybe_same;
  	  if (swap)
! 	    std::swap (alt0, alt1);
  	}
      }
  
diff -Nrcpad gcc-17-20260614/gcc/fortran/ChangeLog gcc-17-20260621/gcc/fortran/ChangeLog
*** gcc-17-20260614/gcc/fortran/ChangeLog	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/fortran/ChangeLog	Sun Jun 21 22:32:06 2026
***************
*** 1,3 ****
--- 1,68 ----
+ 2026-06-19  Léo Hardt  <leom.hardt@inf.ufrgs.br>
+ 
+ 	* trans-intrinsic.cc: Removed orphaned comment from 69f293c
+ 
+ 2026-06-18  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/125535
+ 	* trans-array.cc (gfc_constructor_is_owned_alloc_comp): New function.
+ 	(gfc_trans_array_constructor_value): Add OWNED_SWEEP parameter and,
+ 	when set, suppress the per-element finalization.  Pass it through the
+ 	recursive call.
+ 	(trans_array_constructor): Compute OWNED_SWEEP and, when set,
+ 	deallocate the allocatable components of the whole temporary in one
+ 	sweep.
+ 
+ 2026-06-18  Thomas Koenig  <tkoenig@gcc.gnu.org>
+ 
+ 	PR fortran/30438
+ 	* gfortran.h (gfc_value_set_at): Remove default argument.
+ 	(gfc_expr_set_at): Add prototype.
+ 	* interface.cc (gfc_compare_actual_formal): Use gfc_expr_set_at.
+ 	* intrinsic.cc (mark_args_as_used): Likewise.
+ 	* io.cc (resolve_tag): Likewise.
+ 	(gfc_resolve_dt): Likewise.
+ 	(gfc_resolve_inquire): Likewise.
+ 	* resolve.cc (resolve_transfer): Likewise.
+ 	(mark_lhs_assignments_set): Likewise.
+ 	* symbol.cc (gfc_lvalue_allocated_at): Add comment, fix formatting.
+ 	(gfc_expr_set_at): New fuction.
+ 
+ 2026-06-18  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR fortran/125860
+ 	* interface.cc (gfc_procedure_use): Check a->expr is not NULL before
+ 	calling gfc_value_set_and_used.
+ 
+ 2026-06-17  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	* gfortran.h (struct gfc_omp_udm): Add comment.
+ 	(struct gfc_omp_namelist_udm): Likewise; rename members
+ 	mapper_id to requested_mapper_id and usm to resolved_usm.
+ 	* module.cc (load_omp_udms, write_omp_udm): Update accordingly.
+ 	* openmp.cc (gfc_match_omp_clauses, resolve_omp_clauses): Likewise.
+ 	* trans-openmp.cc (gfc_trans_omp_clauses): Likewise.
+ 
+ 2026-06-17  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	* openmp.cc (match_udr_expr, gfc_match_omp_declare_reduction,
+ 	gfc_resolve_omp_udr): Improve diagnostic.
+ 
+ 2026-06-14  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/125782
+ 	* trans-stmt.cc (trans_associate_var): Only free the associate
+ 	name's backend decl for a deferred-length character function
+ 	result when the result is a POINTER, not when it is
+ 	ALLOCATABLE, since the latter is already freed by the
+ 	procedure call's cleanup.
+ 
+ 2026-06-14  Thomas Koenig  <tkoenig@gcc.gnu.org>
+ 
+ 	PR fortran/30438
+ 	* resolve.cc (find_unused_vs_set): Exclude variables from
+ 	cwarnings if use_assoc, volatile_ or asynchronous are set.
+ 
  2026-06-12  Tobias Burnus  <tburnus@baylibre.com>
  
  	* openmp.cc (gfc_omp_udm_find, gfc_omp_udr_find): Fix
diff -Nrcpad gcc-17-20260614/gcc/fortran/gfortran.h gcc-17-20260621/gcc/fortran/gfortran.h
*** gcc-17-20260614/gcc/fortran/gfortran.h	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/fortran/gfortran.h	Sun Jun 21 22:32:06 2026
*************** typedef struct gfc_omp_namelist_udr
*** 1900,1906 ****
  gfc_omp_namelist_udr;
  #define gfc_get_omp_namelist_udr() XCNEW (gfc_omp_namelist_udr)
  
! 
  typedef struct gfc_omp_udm
  {
    struct gfc_omp_udm *next;
--- 1900,1906 ----
  gfc_omp_namelist_udr;
  #define gfc_get_omp_namelist_udr() XCNEW (gfc_omp_namelist_udr)
  
! /* Store list of user-defined mapper (created by 'omp declare mapper').  */
  typedef struct gfc_omp_udm
  {
    struct gfc_omp_udm *next;
*************** typedef struct gfc_omp_udm
*** 1922,1931 ****
  gfc_omp_udm;
  #define gfc_get_omp_udm() XCNEW (gfc_omp_udm)
  
  typedef struct gfc_omp_namelist_udm
  {
!   const char *mapper_id;
!   struct gfc_omp_udm *udm;
  }
  gfc_omp_namelist_udm;
  #define gfc_get_omp_namelist_udm() XCNEW (gfc_omp_namelist_udm)
--- 1922,1932 ----
  gfc_omp_udm;
  #define gfc_get_omp_udm() XCNEW (gfc_omp_udm)
  
+ /* Mapper data for a MAP or TO/FROM list item.  */
  typedef struct gfc_omp_namelist_udm
  {
!   const char *requested_mapper_id;
!   struct gfc_omp_udm *resolved_udm;
  }
  gfc_omp_namelist_udm;
  #define gfc_get_omp_namelist_udm() XCNEW (gfc_omp_namelist_udm)
*************** void gfc_warn_intrinsic_shadow (const gf
*** 4004,4012 ****
  bool gfc_check_intrinsic_standard (const gfc_intrinsic_sym*, const char**,
  				      bool, locus);
  
! bool gfc_value_set_at (gfc_symbol *, locus *loc = NULL,
! 		       enum value_set = VALUE_VARDEF);
! 
  bool gfc_lvalue_allocated_at (gfc_symbol *, locus *);
  void gfc_mark_lhs_as_used (gfc_expr *, locus *);
  
--- 4005,4012 ----
  bool gfc_check_intrinsic_standard (const gfc_intrinsic_sym*, const char**,
  				      bool, locus);
  
! bool gfc_value_set_at (gfc_symbol *, locus *loc,
! 		       enum value_set);
  bool gfc_lvalue_allocated_at (gfc_symbol *, locus *);
  void gfc_mark_lhs_as_used (gfc_expr *, locus *);
  
*************** void gfc_value_used_expr (gfc_expr *, en
*** 4014,4019 ****
--- 4014,4021 ----
  void gfc_value_set_and_used (gfc_expr *, locus *loc,
  			     enum value_set, enum value_used);
  void gfc_used_in_allocate_expr (gfc_expr *, locus *loc);
+ void gfc_expr_set_at (gfc_expr *, locus *loc, enum value_set);
+ 
  
  /* match.cc -- FIXME */
  void gfc_free_iterator (gfc_iterator *, int);
diff -Nrcpad gcc-17-20260614/gcc/fortran/interface.cc gcc-17-20260621/gcc/fortran/interface.cc
*** gcc-17-20260614/gcc/fortran/interface.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/fortran/interface.cc	Sun Jun 21 22:32:06 2026
*************** gfc_compare_actual_formal (gfc_actual_ar
*** 4270,4276 ****
  	      case INTENT_OUT:
  		{
  		  gfc_symbol *s = e->symtree->n.sym;
! 		  gfc_value_set_at (s, &e->where, VALUE_INTENT_OUT);
  
  		  /* INTENT(OUT) allocates variables as far as we know.  */
  		  if (s->attr.allocatable)
--- 4270,4276 ----
  	      case INTENT_OUT:
  		{
  		  gfc_symbol *s = e->symtree->n.sym;
! 		  gfc_expr_set_at (e, &e->where, VALUE_INTENT_OUT);
  
  		  /* INTENT(OUT) allocates variables as far as we know.  */
  		  if (s->attr.allocatable)
*************** gfc_procedure_use (gfc_symbol *sym, gfc_
*** 4714,4721 ****
  
        if (implicit)
  	for (a = *ap; a; a = a->next)
! 	  gfc_value_set_and_used (a->expr, &a->expr->where, VALUE_ARG,
! 				  VALUE_MAYBE_USED);
  
        return true;
      }
--- 4714,4722 ----
  
        if (implicit)
  	for (a = *ap; a; a = a->next)
! 	  if (a->expr)
! 	    gfc_value_set_and_used (a->expr, &a->expr->where, VALUE_ARG,
! 				    VALUE_MAYBE_USED);
  
        return true;
      }
diff -Nrcpad gcc-17-20260614/gcc/fortran/intrinsic.cc gcc-17-20260621/gcc/fortran/intrinsic.cc
*** gcc-17-20260614/gcc/fortran/intrinsic.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/fortran/intrinsic.cc	Sun Jun 21 22:32:06 2026
*************** mark_args_as_used (gfc_intrinsic_arg *f,
*** 5031,5037 ****
  	      if (a->expr->expr_type == EXPR_VARIABLE)
  		{
  		  gfc_symbol *s = a->expr->symtree->n.sym;
! 		  gfc_value_set_at (s, &a->expr->where, VALUE_INTENT_OUT);
  		  if (s->attr.allocatable)
  		    s->attr.allocated = 1;
  		}
--- 5031,5037 ----
  	      if (a->expr->expr_type == EXPR_VARIABLE)
  		{
  		  gfc_symbol *s = a->expr->symtree->n.sym;
! 		  gfc_expr_set_at (a->expr, &a->expr->where, VALUE_INTENT_OUT);
  		  if (s->attr.allocatable)
  		    s->attr.allocated = 1;
  		}
diff -Nrcpad gcc-17-20260614/gcc/fortran/io.cc gcc-17-20260621/gcc/fortran/io.cc
*** gcc-17-20260614/gcc/fortran/io.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/fortran/io.cc	Sun Jun 21 22:32:06 2026
*************** resolve_tag (const io_tag *tag, gfc_expr
*** 1922,1928 ****
        if (!gfc_check_vardef_context (e, false, false, false, context))
  	return false;
  
!       gfc_value_set_at (e->symtree->n.sym, &e->where, VALUE_VARDEF);
      }
    else
      gfc_value_used_expr (e, VALUE_USED);
--- 1922,1928 ----
        if (!gfc_check_vardef_context (e, false, false, false, context))
  	return false;
  
!       gfc_expr_set_at (e, &e->where, VALUE_VARDEF);
      }
    else
      gfc_value_used_expr (e, VALUE_USED);
*************** gfc_resolve_dt (gfc_code *dt_code, gfc_d
*** 3410,3416 ****
  					_("internal unit in WRITE")))
  	    return false;
  
! 	  gfc_value_set_at (e->symtree->n.sym, &e->where);
  	}
      }
  
--- 3410,3416 ----
  					_("internal unit in WRITE")))
  	    return false;
  
! 	  gfc_expr_set_at (e, &e->where, VALUE_VARDEF);
  	}
      }
  
*************** gfc_resolve_dt (gfc_code *dt_code, gfc_d
*** 3455,3461 ****
  			     dt->namelist->name, loc, n->sym->name);
  		  return false;
  		}
! 	      gfc_value_set_at (n->sym, NULL);
  	    }
  
  	  t = dtio_procs_present (n->sym, k);
--- 3455,3461 ----
  			     dt->namelist->name, loc, n->sym->name);
  		  return false;
  		}
! 	      gfc_value_set_at (n->sym, NULL, VALUE_VARDEF);
  	    }
  
  	  t = dtio_procs_present (n->sym, k);
*************** gfc_resolve_inquire (gfc_inquire *inquir
*** 4793,4799 ****
        if (gfc_check_vardef_context ((expr), false, false, false, \
  				    context) == false) \
  	return false; \
!       gfc_value_set_at (expr->symtree->n.sym, &expr->where); \
      }
    INQUIRE_RESOLVE_TAG (&tag_iomsg, inquire->iomsg);
    INQUIRE_RESOLVE_TAG (&tag_iostat, inquire->iostat);
--- 4793,4799 ----
        if (gfc_check_vardef_context ((expr), false, false, false, \
  				    context) == false) \
  	return false; \
!       gfc_expr_set_at (expr, &expr->where, VALUE_VARDEF);	\
      }
    INQUIRE_RESOLVE_TAG (&tag_iomsg, inquire->iomsg);
    INQUIRE_RESOLVE_TAG (&tag_iostat, inquire->iostat);
diff -Nrcpad gcc-17-20260614/gcc/fortran/module.cc gcc-17-20260621/gcc/fortran/module.cc
*** gcc-17-20260614/gcc/fortran/module.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/fortran/module.cc	Sun Jun 21 22:32:06 2026
*************** load_omp_udms (void)
*** 5565,5576 ****
  	  if (peek_atom () != ATOM_RPAREN)
  	    {
  	      n->u3.udm = gfc_get_omp_namelist_udm ();
! 	      mio_pool_string (&n->u3.udm->mapper_id);
  
! 	      if (n->u3.udm->mapper_id == NULL)
! 		n->u3.udm->mapper_id = gfc_get_string ("%s", "");
  
! 	      mio_pointer_ref (&n->u3.udm->udm);
  	    }
  
  	  mio_rparen ();
--- 5565,5576 ----
  	  if (peek_atom () != ATOM_RPAREN)
  	    {
  	      n->u3.udm = gfc_get_omp_namelist_udm ();
! 	      mio_pool_string (&n->u3.udm->requested_mapper_id);
  
! 	      if (n->u3.udm->requested_mapper_id == NULL)
! 		n->u3.udm->requested_mapper_id = gfc_get_string ("%s", "");
  
! 	      mio_pointer_ref (&n->u3.udm->resolved_udm);
  	    }
  
  	  mio_rparen ();
*************** write_omp_udm (gfc_omp_udm *udm)
*** 6687,6694 ****
  
        if (n->u3.udm)
  	{
! 	  mio_pool_string (&n->u3.udm->mapper_id);
! 	  mio_pointer_ref (&n->u3.udm->udm);
  	}
  
        mio_rparen ();
--- 6687,6694 ----
  
        if (n->u3.udm)
  	{
! 	  mio_pool_string (&n->u3.udm->requested_mapper_id);
! 	  mio_pointer_ref (&n->u3.udm->resolved_udm);
  	}
  
        mio_rparen ();
diff -Nrcpad gcc-17-20260614/gcc/fortran/openmp.cc gcc-17-20260621/gcc/fortran/openmp.cc
*** gcc-17-20260614/gcc/fortran/openmp.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/fortran/openmp.cc	Sun Jun 21 22:32:06 2026
*************** gfc_match_omp_clauses (gfc_omp_clauses *
*** 3940,3946 ****
  		      if (mapper_id[0] != '\0')
  			{
  			  n->u3.udm = gfc_get_omp_namelist_udm ();
! 			  n->u3.udm->mapper_id
  			    = gfc_get_string ("%s", mapper_id);
  			}
  		      n->u2.ns = ns_iter;
--- 3940,3946 ----
  		      if (mapper_id[0] != '\0')
  			{
  			  n->u3.udm = gfc_get_omp_namelist_udm ();
! 			  n->u3.udm->requested_mapper_id
  			    = gfc_get_string ("%s", mapper_id);
  			}
  		      n->u2.ns = ns_iter;
*************** failure:
*** 6138,6143 ****
--- 6138,6146 ----
    return MATCH_ERROR;
  }
  
+ /* For 'declare reduction', matches either the combiner or initializer
+    expression, either can be an assignment of 'omp_sym1 = ...'
+    or a subroutine call, i.e. 'subroutine-name(argument-list)'.  */
  
  static bool
  match_udr_expr (gfc_symtree *omp_sym1, gfc_symtree *omp_sym2)
*************** match_udr_expr (gfc_symtree *omp_sym1, g
*** 6172,6191 ****
  
    m = gfc_match (" %n", sname);
    if (m != MATCH_YES)
!     return false;
  
    if (strcmp (sname, omp_sym1->name) == 0
        || strcmp (sname, omp_sym2->name) == 0)
!     return false;
  
    gfc_current_ns = ns->parent;
    if (gfc_get_ha_sym_tree (sname, &st))
!     return false;
  
    sym = st->n.sym;
    if (sym->attr.flavor != FL_PROCEDURE
        && sym->attr.flavor != FL_UNKNOWN)
!     return false;
  
    if (!sym->attr.generic
        && !sym->attr.subroutine
--- 6175,6194 ----
  
    m = gfc_match (" %n", sname);
    if (m != MATCH_YES)
!     goto syntax;
  
    if (strcmp (sname, omp_sym1->name) == 0
        || strcmp (sname, omp_sym2->name) == 0)
!     goto syntax;
  
    gfc_current_ns = ns->parent;
    if (gfc_get_ha_sym_tree (sname, &st))
!     goto syntax;
  
    sym = st->n.sym;
    if (sym->attr.flavor != FL_PROCEDURE
        && sym->attr.flavor != FL_UNKNOWN)
!     goto syntax;
  
    if (!sym->attr.generic
        && !sym->attr.subroutine
*************** match_udr_expr (gfc_symtree *omp_sym1, g
*** 6196,6202 ****
  	  /* ...create a symbol in this scope...  */
  	  if (sym->ns != gfc_current_ns
  	      && gfc_get_sym_tree (sname, NULL, &st, false) == 1)
! 	    return false;
  
  	  if (sym != st->n.sym)
  	    sym = st->n.sym;
--- 6199,6205 ----
  	  /* ...create a symbol in this scope...  */
  	  if (sym->ns != gfc_current_ns
  	      && gfc_get_sym_tree (sname, NULL, &st, false) == 1)
! 	    goto syntax;
  
  	  if (sym != st->n.sym)
  	    sym = st->n.sym;
*************** match_udr_expr (gfc_symtree *omp_sym1, g
*** 6204,6230 ****
  
        /* ...and then to try to make the symbol into a subroutine.  */
        if (!gfc_add_subroutine (&sym->attr, sym->name, NULL))
! 	return false;
      }
  
    gfc_set_sym_referenced (sym);
    gfc_gobble_whitespace ();
    if (gfc_peek_ascii_char () != '(')
!     return false;
  
    gfc_current_ns = ns;
    m = gfc_match_actual_arglist (1, &arglist);
    if (m != MATCH_YES)
!     return false;
  
    if (gfc_match_char (')') != MATCH_YES)
!     return false;
  
    ns->code = gfc_get_code (EXEC_CALL);
    ns->code->symtree = st;
    ns->code->ext.actual = arglist;
    ns->code->loc = old_loc;
    return true;
  }
  
  static bool
--- 6207,6239 ----
  
        /* ...and then to try to make the symbol into a subroutine.  */
        if (!gfc_add_subroutine (&sym->attr, sym->name, NULL))
! 	goto syntax;
      }
  
    gfc_set_sym_referenced (sym);
    gfc_gobble_whitespace ();
    if (gfc_peek_ascii_char () != '(')
!     goto syntax;
  
    gfc_current_ns = ns;
    m = gfc_match_actual_arglist (1, &arglist);
    if (m != MATCH_YES)
!     goto syntax;
  
    if (gfc_match_char (')') != MATCH_YES)
!     goto syntax;
  
+   gfc_clear_error ();
    ns->code = gfc_get_code (EXEC_CALL);
    ns->code->symtree = st;
    ns->code->ext.actual = arglist;
    ns->code->loc = old_loc;
    return true;
+ syntax:
+   gfc_clear_error ();
+   gfc_error ("Expected either %<%s = expr%> or %<subroutine-name(argument-list)"
+ 	     "%> followed by %<)%> at %L", omp_sym1->name, &old_loc);
+   return false;
  }
  
  static bool
*************** gfc_match_omp_declare_reduction (void)
*** 6364,6370 ****
    gfc_omp_reduction_op rop = OMP_REDUCTION_NONE;
  
    if (gfc_match_char ('(') != MATCH_YES)
!     return MATCH_ERROR;
  
    m = gfc_match (" %o : ", &op);
    if (m == MATCH_ERROR)
--- 6373,6382 ----
    gfc_omp_reduction_op rop = OMP_REDUCTION_NONE;
  
    if (gfc_match_char ('(') != MATCH_YES)
!     {
!       gfc_error ("Expected %<(%> at %C");
!       return MATCH_ERROR;
!     }
  
    m = gfc_match (" %o : ", &op);
    if (m == MATCH_ERROR)
*************** gfc_match_omp_declare_reduction (void)
*** 6384,6402 ****
  	  name[0] = '.';
  	  strcat (name, ".");
  	  if (gfc_match (" : ") != MATCH_YES)
! 	    return MATCH_ERROR;
  	}
        else
  	{
  	  if (gfc_match (" %n : ", name) != MATCH_YES)
! 	    return MATCH_ERROR;
  	}
        rop = OMP_REDUCTION_USER;
      }
  
    m = gfc_match_type_spec (&ts);
    if (m != MATCH_YES)
!     return MATCH_ERROR;
    /* Treat len=: the same as len=*.  */
    if (ts.type == BT_CHARACTER)
      ts.deferred = false;
--- 6396,6424 ----
  	  name[0] = '.';
  	  strcat (name, ".");
  	  if (gfc_match (" : ") != MATCH_YES)
! 	    {
! 	      gfc_error ("Expected %<:%> at %C");
! 	      return MATCH_ERROR;
! 	    }
  	}
        else
  	{
  	  if (gfc_match (" %n : ", name) != MATCH_YES)
! 	    {
! 	      gfc_error ("Expected an identfifier or operator as reduction "
! 			 "identifier followed by a colon at %C");
! 	      return MATCH_ERROR;
! 	    }
  	}
        rop = OMP_REDUCTION_USER;
      }
  
    m = gfc_match_type_spec (&ts);
    if (m != MATCH_YES)
!     {
!       gfc_error ("Expected type spec at %C");
!       return MATCH_ERROR;
!     }
    /* Treat len=: the same as len=*.  */
    if (ts.type == BT_CHARACTER)
      ts.deferred = false;
*************** gfc_match_omp_declare_reduction (void)
*** 6406,6416 ****
      {
        m = gfc_match_type_spec (&ts);
        if (m != MATCH_YES)
! 	return MATCH_ERROR;
        tss.safe_push (ts);
      }
    if (gfc_match_char (':') != MATCH_YES)
!     return MATCH_ERROR;
  
    st = gfc_find_symtree (gfc_current_ns->omp_udr_root, name);
    for (i = 0; i < tss.length (); i++)
--- 6428,6444 ----
      {
        m = gfc_match_type_spec (&ts);
        if (m != MATCH_YES)
! 	{
! 	  gfc_error ("Expected type spec at %C");
! 	  return MATCH_ERROR;
! 	}
        tss.safe_push (ts);
      }
    if (gfc_match_char (':') != MATCH_YES)
!     {
!       gfc_error ("Expected %<:%> or %<,%> at %C");
!       return MATCH_ERROR;
!     }
  
    st = gfc_find_symtree (gfc_current_ns->omp_udr_root, name);
    for (i = 0; i < tss.length (); i++)
*************** gfc_match_omp_declare_reduction (void)
*** 6449,6455 ****
        if (!match_udr_expr (omp_out, omp_in))
  	{
  	 syntax:
- 	  gfc_current_locus = old_loc;
  	  gfc_current_ns = combiner_ns->parent;
  	  gfc_undo_symbols ();
  	  gfc_free_omp_udr (omp_udr);
--- 6477,6482 ----
*************** gfc_match_omp_declare_reduction (void)
*** 6498,6516 ****
  	  && (rop != OMP_REDUCTION_USER || name[0] == '.'))
  	{
  	  if (predef_name)
! 	    gfc_error_now ("Redefinition of predefined %s "
  			   "!$OMP DECLARE REDUCTION at %L",
  			   predef_name, &where);
  	  else
! 	    gfc_error_now ("Redefinition of predefined "
! 			   "!$OMP DECLARE REDUCTION at %L", &where);
  	}
        else if (prev_udr)
  	{
! 	  gfc_error_now ("Redefinition of !$OMP DECLARE REDUCTION at %L",
! 			 &where);
! 	  gfc_error_now ("Previous !$OMP DECLARE REDUCTION at %L",
! 			 &prev_udr->where);
  	}
        else if (st)
  	{
--- 6525,6545 ----
  	  && (rop != OMP_REDUCTION_USER || name[0] == '.'))
  	{
  	  if (predef_name)
! 	    gfc_error_now ("Redefinition of predefined %qs in "
  			   "!$OMP DECLARE REDUCTION at %L",
  			   predef_name, &where);
  	  else
! 	    gfc_error_now ("Redefinition of predefined %qs in "
! 			   "!$OMP DECLARE REDUCTION at %L", name, &where);
! 	  goto syntax;
  	}
        else if (prev_udr)
  	{
! 	  gfc_error_now ("Redefinition of %qs in !$OMP DECLARE REDUCTION at %L",
! 			 name, &where);
! 	  inform (gfc_get_location (&prev_udr->where),
! 		  "Previous !$OMP DECLARE REDUCTION");
! 	  goto syntax;
  	}
        else if (st)
  	{
*************** gfc_match_omp_declare_reduction (void)
*** 6529,6542 ****
        gfc_current_locus = end_loc;
        if (gfc_match_omp_eos () != MATCH_YES)
  	{
! 	  gfc_error ("Unexpected junk after !$OMP DECLARE REDUCTION at %C");
! 	  gfc_current_locus = where;
  	  return MATCH_ERROR;
  	}
- 
        return MATCH_YES;
      }
-   gfc_clear_error ();
    return MATCH_ERROR;
  }
  
--- 6558,6568 ----
        gfc_current_locus = end_loc;
        if (gfc_match_omp_eos () != MATCH_YES)
  	{
! 	  gfc_error ("Unexpected junk at %C");
  	  return MATCH_ERROR;
  	}
        return MATCH_YES;
      }
    return MATCH_ERROR;
  }
  
*************** resolve_omp_clauses (gfc_code *code, gfc
*** 10478,10485 ****
  
  		    if (ts->type == BT_DERIVED || ts->type == BT_CLASS)
  		      {
! 			const char *mapper_id = (n->u3.udm
! 						 ? n->u3.udm->mapper_id : "");
  			gfc_omp_udm *udm = gfc_find_omp_udm (gfc_current_ns,
  							     mapper_id, ts);
  			if (mapper_id[0] != '\0' && !udm)
--- 10504,10511 ----
  
  		    if (ts->type == BT_DERIVED || ts->type == BT_CLASS)
  		      {
! 			const char *mapper_id
! 			   = (n->u3.udm ? n->u3.udm->requested_mapper_id : "");
  			gfc_omp_udm *udm = gfc_find_omp_udm (gfc_current_ns,
  							     mapper_id, ts);
  			if (mapper_id[0] != '\0' && !udm)
*************** resolve_omp_clauses (gfc_code *code, gfc
*** 10491,10499 ****
  			      {
  				gcc_assert (mapper_id[0] == '\0');
  				n->u3.udm = gfc_get_omp_namelist_udm ();
! 				n->u3.udm->mapper_id = mapper_id;
  			      }
! 			    n->u3.udm->udm = udm;
  			  }
  		      }
  		  }
--- 10517,10525 ----
  			      {
  				gcc_assert (mapper_id[0] == '\0');
  				n->u3.udm = gfc_get_omp_namelist_udm ();
! 				n->u3.udm->requested_mapper_id = mapper_id;
  			      }
! 			    n->u3.udm->resolved_udm = udm;
  			  }
  		      }
  		  }
*************** gfc_resolve_omp_udr (gfc_omp_udr *omp_ud
*** 14061,14072 ****
  			  &omp_udr->ts, &predef_name))
      {
        if (predef_name)
! 	gfc_error_now ("Redefinition of predefined %s "
! 		       "!$OMP DECLARE REDUCTION at %L",
! 		       predef_name, &omp_udr->where);
        else
! 	gfc_error_now ("Redefinition of predefined "
! 		       "!$OMP DECLARE REDUCTION at %L", &omp_udr->where);
        return;
      }
  
--- 14087,14099 ----
  			  &omp_udr->ts, &predef_name))
      {
        if (predef_name)
! 	gfc_error ("Redefinition of predefined %qs in "
! 		   "!$OMP DECLARE REDUCTION at %L",
! 		   predef_name, &omp_udr->where);
        else
! 	gfc_error ("Redefinition of predefined %qs in "
! 		   "!$OMP DECLARE REDUCTION at %L", omp_udr->name,
! 		   &omp_udr->where);
        return;
      }
  
*************** gfc_resolve_omp_udr (gfc_omp_udr *omp_ud
*** 14074,14080 ****
        && omp_udr->ts.u.cl->length
        && omp_udr->ts.u.cl->length->expr_type != EXPR_CONSTANT)
      {
!       gfc_error ("CHARACTER length in !$OMP DECLARE REDUCTION %s not "
  		 "constant at %L", omp_udr->name, &omp_udr->where);
        return;
      }
--- 14101,14107 ----
        && omp_udr->ts.u.cl->length
        && omp_udr->ts.u.cl->length->expr_type != EXPR_CONSTANT)
      {
!       gfc_error ("CHARACTER length in !$OMP DECLARE REDUCTION %qs not "
  		 "constant at %L", omp_udr->name, &omp_udr->where);
        return;
      }
diff -Nrcpad gcc-17-20260614/gcc/fortran/resolve.cc gcc-17-20260621/gcc/fortran/resolve.cc
*** gcc-17-20260614/gcc/fortran/resolve.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/fortran/resolve.cc	Sun Jun 21 22:32:06 2026
*************** success:
*** 9753,9759 ****
    gfc_used_in_allocate_expr (e, &e->where);
  
    if (code->expr3)
!     gfc_value_set_at (e->symtree->n.sym, &code->expr3->where);
  
    return true;
  
--- 9753,9759 ----
    gfc_used_in_allocate_expr (e, &e->where);
  
    if (code->expr3)
!     gfc_value_set_at (e->symtree->n.sym, &code->expr3->where, VALUE_VARDEF);
  
    return true;
  
*************** resolve_transfer (gfc_code *code)
*** 11784,11790 ****
  				     _("item in READ")))
  	return;
  
!       gfc_value_set_at (exp->symtree->n.sym, &exp->where, VALUE_READ);
      }
  
    const gfc_typespec *ts = exp->expr_type == EXPR_STRUCTURE
--- 11784,11790 ----
  				     _("item in READ")))
  	return;
  
!       gfc_expr_set_at (exp, &exp->where, VALUE_READ);
      }
  
    const gfc_typespec *ts = exp->expr_type == EXPR_STRUCTURE
*************** mark_lhs_assignments_set (gfc_code *code
*** 20588,20594 ****
  
  	  gcc_fallthrough();
  	case EXEC_POINTER_ASSIGN:
! 	  gfc_value_set_at (lvalue->symtree->n.sym, &rvalue->where);
  	default:
  	  break;
  	}
--- 20588,20594 ----
  
  	  gcc_fallthrough();
  	case EXEC_POINTER_ASSIGN:
! 	  gfc_expr_set_at (lvalue, &rvalue->where, VALUE_VARDEF);
  	default:
  	  break;
  	}
diff -Nrcpad gcc-17-20260614/gcc/fortran/symbol.cc gcc-17-20260621/gcc/fortran/symbol.cc
*** gcc-17-20260614/gcc/fortran/symbol.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/fortran/symbol.cc	Sun Jun 21 22:32:06 2026
*************** gfc_used_in_allocate_expr (gfc_expr *exp
*** 5915,5922 ****
      sym->extra_loc = *loc;
  }
  
  
! bool gfc_lvalue_allocated_at (gfc_symbol *sym, locus *loc)
  {
    if (sym->other_loc.nextc == 0)
      sym->other_loc = *loc;
--- 5915,5924 ----
      sym->extra_loc = *loc;
  }
  
+ /* Mark a symbol to allocated.  */
  
! bool
! gfc_lvalue_allocated_at (gfc_symbol *sym, locus *loc)
  {
    if (sym->other_loc.nextc == 0)
      sym->other_loc = *loc;
*************** bool gfc_lvalue_allocated_at (gfc_symbol
*** 5924,5926 ****
--- 5926,5953 ----
    sym->attr.allocated = 1;
    return true;
  }
+ 
+ /* Mark the variable of an expression in a vardef context as
+    set and mark everything in the references as used.  */
+ 
+ void
+ gfc_expr_set_at (gfc_expr *expr, locus *loc, enum value_set how_set)
+ {
+   enum value_used prev_used;
+   gfc_symbol *sym;
+   locus prev_loc;
+ 
+   if (!expr)
+     return;
+ 
+   if (expr->expr_type != EXPR_VARIABLE)
+     return;
+ 
+   sym = expr->symtree->n.sym;
+   gfc_value_set_at (sym, loc, how_set);
+   prev_used = sym->attr.value_used;
+   prev_loc = sym->other_loc;
+   gfc_value_used_expr (expr, VALUE_USED);
+   sym->other_loc = prev_loc;
+   sym->attr.value_used = prev_used;
+ }
diff -Nrcpad gcc-17-20260614/gcc/fortran/trans-array.cc gcc-17-20260621/gcc/fortran/trans-array.cc
*** gcc-17-20260614/gcc/fortran/trans-array.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/fortran/trans-array.cc	Sun Jun 21 22:32:06 2026
*************** gfc_trans_array_constructor_subarray (st
*** 2143,2159 ****
  }
  
  
  /* Assign the values to the elements of an array constructor.  DYNAMIC
     is true if descriptor DESC only contains enough data for the static
     size calculated by gfc_get_array_constructor_size.  When true, memory
!    for the dynamic parts must be allocated using realloc.  */
  
  static void
  gfc_trans_array_constructor_value (stmtblock_t * pblock,
  				   stmtblock_t * finalblock,
  				   tree type, tree desc,
  				   gfc_constructor_base base, tree * poffset,
! 				   tree * offsetvar, bool dynamic)
  {
    tree tmp;
    tree start = NULL_TREE;
--- 2143,2198 ----
  }
  
  
+ /* Return true if every leaf element of an array constructor is a function
+    reference returning derived type DER, which has allocatable components.
+    Such results are moved (shallow-copied) into the constructor temporary, so
+    the temporary owns their allocatable components and they can all be freed
+    in a single sweep over the whole temporary.  Returns false as soon as an
+    element is anything else - notably a variable, whose allocatable components
+    are aliased rather than owned by the temporary and must not be freed.  */
+ 
+ static bool
+ gfc_constructor_is_owned_alloc_comp (gfc_constructor_base base,
+ 				     gfc_symbol *der)
+ {
+   gfc_constructor *c;
+ 
+   if (base == NULL)
+     return false;
+ 
+   for (c = gfc_constructor_first (base); c; c = gfc_constructor_next (c))
+     {
+       gfc_expr *e = c->expr;
+       if (e->expr_type == EXPR_ARRAY)
+ 	{
+ 	  if (!gfc_constructor_is_owned_alloc_comp (e->value.constructor, der))
+ 	    return false;
+ 	}
+       else if (!(e->expr_type == EXPR_FUNCTION
+ 		 && e->ts.type == BT_DERIVED
+ 		 && e->ts.u.derived == der))
+ 	return false;
+     }
+   return true;
+ }
+ 
+ 
  /* Assign the values to the elements of an array constructor.  DYNAMIC
     is true if descriptor DESC only contains enough data for the static
     size calculated by gfc_get_array_constructor_size.  When true, memory
!    for the dynamic parts must be allocated using realloc.  OWNED_SWEEP is
!    true when the caller will free the allocatable components of every
!    constructor element in one sweep over the whole temporary; in that case
!    the per-element finalization built here is suppressed to avoid a double
!    free.  */
  
  static void
  gfc_trans_array_constructor_value (stmtblock_t * pblock,
  				   stmtblock_t * finalblock,
  				   tree type, tree desc,
  				   gfc_constructor_base base, tree * poffset,
! 				   tree * offsetvar, bool dynamic,
! 				   bool owned_sweep)
  {
    tree tmp;
    tree start = NULL_TREE;
*************** gfc_trans_array_constructor_value (stmtb
*** 2221,2227 ****
  	  /* Array constructors can be nested.  */
  	  gfc_trans_array_constructor_value (&body, finalblock, type,
  					     desc, c->expr->value.constructor,
! 					     poffset, offsetvar, dynamic);
  	}
        else if (c->expr->rank > 0)
  	{
--- 2260,2267 ----
  	  /* Array constructors can be nested.  */
  	  gfc_trans_array_constructor_value (&body, finalblock, type,
  					     desc, c->expr->value.constructor,
! 					     poffset, offsetvar, dynamic,
! 					     owned_sweep);
  	}
        else if (c->expr->rank > 0)
  	{
*************** gfc_trans_array_constructor_value (stmtb
*** 2257,2263 ****
  	      *poffset = fold_build2_loc (input_location, PLUS_EXPR,
  					  gfc_array_index_type,
  					  *poffset, gfc_index_one_node);
! 	      if (finalblock)
  		gfc_add_block_to_block (finalblock, &se.finalblock);
  	    }
  	  else
--- 2297,2307 ----
  	      *poffset = fold_build2_loc (input_location, PLUS_EXPR,
  					  gfc_array_index_type,
  					  *poffset, gfc_index_one_node);
! 	      /* Unless the whole temporary is being swept by the caller, add
! 		 the per-element finalization.  The sweep is used when every
! 		 element is an owned function result, which is the only way to
! 		 correctly free elements produced inside an implied-do loop.  */
! 	      if (finalblock && !owned_sweep)
  		gfc_add_block_to_block (finalblock, &se.finalblock);
  	    }
  	  else
*************** trans_array_constructor (gfc_ss * ss, lo
*** 2910,2915 ****
--- 2954,2960 ----
    char *msg;
    stmtblock_t finalblock;
    bool finalize_required;
+   bool owned_sweep = false;
  
    /* Save the old values for nested checking.  */
    old_first_len = first_len;
*************** trans_array_constructor (gfc_ss * ss, lo
*** 3095,3104 ****
    if (IS_PDT (expr))
     finalize_required = true;
  
    gfc_trans_array_constructor_value (&outer_loop->pre,
  				     finalize_required ? &finalblock : NULL,
  				     type, desc, c, &offset, &offsetvar,
! 				     dynamic);
  
    /* If the array grows dynamically, the upper bound of the loop variable
       is determined by the array's final upper bound.  */
--- 3140,3164 ----
    if (IS_PDT (expr))
     finalize_required = true;
  
+   /* If every element of the constructor is a function result with allocatable
+      components, those components are owned by the temporary and are freed in a
+      single sweep over the whole array below.  This is the only way to free the
+      elements produced inside an implied-do loop, where a single compile-time
+      element stands for many runtime elements.  */
+   owned_sweep = finalize_required
+     && expr->ts.type == BT_DERIVED
+     && expr->ts.u.derived->attr.alloc_comp
+     && gfc_constructor_is_owned_alloc_comp (c, expr->ts.u.derived);
+ 
    gfc_trans_array_constructor_value (&outer_loop->pre,
  				     finalize_required ? &finalblock : NULL,
  				     type, desc, c, &offset, &offsetvar,
! 				     dynamic, owned_sweep);
! 
!   if (owned_sweep)
!     gfc_add_expr_to_block (&finalblock,
! 			   gfc_deallocate_alloc_comp_no_caf (expr->ts.u.derived,
! 							     desc, 1, true));
  
    /* If the array grows dynamically, the upper bound of the loop variable
       is determined by the array's final upper bound.  */
diff -Nrcpad gcc-17-20260614/gcc/fortran/trans-intrinsic.cc gcc-17-20260621/gcc/fortran/trans-intrinsic.cc
*** gcc-17-20260614/gcc/fortran/trans-intrinsic.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/fortran/trans-intrinsic.cc	Sun Jun 21 22:32:06 2026
*************** along with GCC; see the file COPYING3.
*** 44,51 ****
  #include "realmpfr.h"
  #include "constructor.h"
  
- /* Only for gfc_trans_assign and gfc_trans_pointer_assign.  */
- 
  /* This maps Fortran intrinsic math functions to external library or GCC
     builtin functions.  */
  typedef struct GTY(()) gfc_intrinsic_map_t {
--- 44,49 ----
diff -Nrcpad gcc-17-20260614/gcc/fortran/trans-openmp.cc gcc-17-20260621/gcc/fortran/trans-openmp.cc
*** gcc-17-20260614/gcc/fortran/trans-openmp.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/fortran/trans-openmp.cc	Sun Jun 21 22:32:06 2026
*************** gfc_trans_omp_clauses (stmtblock_t *bloc
*** 4343,4350 ****
  		  if (n->u3.udm)
  		    gfc_error ("Sorry, declared mapper %qs, used for %qs at %L, "
  			       "is not yet supported",
! 			       n->u3.udm->mapper_id[0] != '\0'
! 			       ? n->u3.udm->mapper_id : "default",
  			       n->sym->name, &n->where);
  
  		  // Remove duplicates
--- 4343,4350 ----
  		  if (n->u3.udm)
  		    gfc_error ("Sorry, declared mapper %qs, used for %qs at %L, "
  			       "is not yet supported",
! 			       n->u3.udm->requested_mapper_id[0] != '\0'
! 			       ? n->u3.udm->requested_mapper_id : "default",
  			       n->sym->name, &n->where);
  
  		  // Remove duplicates
diff -Nrcpad gcc-17-20260614/gcc/gcc.cc gcc-17-20260621/gcc/gcc.cc
*** gcc-17-20260614/gcc/gcc.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/gcc.cc	Sun Jun 21 22:32:06 2026
*************** driver::global_initializations ()
*** 8517,8523 ****
--- 8517,8527 ----
  
    /* Parsing and gimplification sometimes need quite large stack.
       Increase stack size limits if possible.  */
+ #ifdef __SANITIZE_ADDRESS__
+   stack_limit_increase (128 * 1024 * 1024);
+ #else
    stack_limit_increase (64 * 1024 * 1024);
+ #endif
  
    /* Allocate the argument vector.  */
    alloc_args ();
diff -Nrcpad gcc-17-20260614/gcc/gimple-range-cache.cc gcc-17-20260621/gcc/gimple-range-cache.cc
*** gcc-17-20260614/gcc/gimple-range-cache.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/gimple-range-cache.cc	Sun Jun 21 22:32:06 2026
*************** ranger_cache::set_global_range (tree nam
*** 1171,1178 ****
    // Timestamp must always be updated, or dependent calculations may
    // not include this latest value. PR 100774.
  
!   if (r.singleton_p ()
!       || (POINTER_TYPE_P (TREE_TYPE (name)) && r.nonzero_p ()))
      gori_ssa ()->set_range_invariant (name);
    m_temporal->set_timestamp (name);
  }
--- 1171,1181 ----
    // Timestamp must always be updated, or dependent calculations may
    // not include this latest value. PR 100774.
  
!   // With Points_to info in prange now, it is no longer acceptable to make
!   // [1, +INF] invariant, as most points to values will have that range,
!   // and then we lose the ability to propagate points to info.
! 
!   if (r.singleton_p ())
      gori_ssa ()->set_range_invariant (name);
    m_temporal->set_timestamp (name);
  }
diff -Nrcpad gcc-17-20260614/gcc/gimple-range-fold.cc gcc-17-20260621/gcc/gimple-range-fold.cc
*** gcc-17-20260614/gcc/gimple-range-fold.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/gimple-range-fold.cc	Sun Jun 21 22:32:06 2026
*************** gimple_range_adjustment (vrange &res, co
*** 651,656 ****
--- 651,675 ----
      }
  }
  
+ // Provide context to the gimple fold callback.
+ 
+ static struct
+ {
+   gimple *m_stmt;
+   range_query *m_query;
+ } x_fold_context;
+ 
+ // Gimple fold callback.
+ 
+ static tree
+ pta_valueize (tree name)
+ {
+   tree ret
+     = x_fold_context.m_query->value_of_expr (name, x_fold_context.m_stmt);
+ 
+   return ret ? ret : name;
+ }
+ 
  // Calculate a range for statement S and return it in R. If NAME is provided it
  // represents the SSA_NAME on the LHS of the statement. It is only required
  // if there is more than one lhs/output.  If a range cannot
*************** fold_using_range::fold_stmt (vrange &r,
*** 721,726 ****
--- 740,775 ----
        gcc_checking_assert (range_compatible_p (r.type (), TREE_TYPE (name)));
        range_cast (r, TREE_TYPE (name));
      }
+ 
+   // IF this is not a prange, we are done.
+   if (!is_a <prange> (r))
+     return true;
+ 
+   prange &p = as_a <prange> (r);
+   // Check to see if points_to should be set.
+   if (p.pt_unknown_p () && name && gimple_code (s) == GIMPLE_ASSIGN)
+     {
+       tree rhs = gimple_assign_rhs1 (s);
+       tree_code code = gimple_assign_rhs_code (s);
+       // If code is SSA_NAME, any points to would already be copied.
+       if (code != SSA_NAME && get_gimple_rhs_class (code) == GIMPLE_SINGLE_RHS
+ 	  && TREE_CODE (rhs) == ADDR_EXPR)
+ 	{
+ 	  p.set_pt (rhs, true);
+ 	}
+       // PR 125854 - Do not attempt to invoke the fold machinery unless this
+       // query is the same as the current query (which fold may invoke).
+       else if (src.query () == get_range_query (cfun))
+ 	{
+ 	  // If we couldn't find anything, try fold.
+ 	  x_fold_context = { s, src.query () };
+ 	  rhs = gimple_fold_stmt_to_constant_1 (s, pta_valueize, pta_valueize);
+ 	  if (rhs && TREE_CODE (rhs) == ADDR_EXPR)
+ 	    {
+ 	      p.set_pt (rhs, true);
+ 	    }
+ 	}
+     }
    return true;
  }
  
*************** fold_using_range::range_of_phi (vrange &
*** 1172,1178 ****
  	  seen_arg = true;
  	  single_arg = arg;
  	}
!       else if (single_arg != arg)
  	single_arg = NULL_TREE;
  
        // Once the value reaches varying, stop looking.
--- 1221,1227 ----
  	  seen_arg = true;
  	  single_arg = arg;
  	}
!       else if (!vrp_operand_equal_p (single_arg, arg))
  	single_arg = NULL_TREE;
  
        // Once the value reaches varying, stop looking.
*************** fold_using_range::range_of_phi (vrange &
*** 1210,1223 ****
  	  if (single_arg)
  	    src.register_relation (phi, VREL_EQ, phi_def, single_arg);
  	}
!       else if (src.get_operand (arg_range, single_arg)
! 	       && arg_range.singleton_p ())
  	{
  	  // Numerical arguments that are a constant can be returned as
  	  // the constant. This can help fold later cases where even this
  	  // constant might have been UNDEFINED via an unreachable edge.
! 	  r = arg_range;
! 	  return true;
  	}
      }
  
--- 1259,1284 ----
  	  if (single_arg)
  	    src.register_relation (phi, VREL_EQ, phi_def, single_arg);
  	}
!       else if (src.get_operand (arg_range, single_arg))
  	{
+ 	  // Check if the single argument points to a specific object.
+ 	  if (is_a <prange> (arg_range))
+ 	    {
+ 	      prange &ptr = as_a <prange> (arg_range);
+ 	      // If it doesn't already point at something, set points to.
+ 	      if (ptr.pt_unknown_p () && TREE_CODE (single_arg) == ADDR_EXPR)
+ 		ptr.set_pt (single_arg, true);
+ 	      r = ptr;
+ 	      return true;
+ 	    }
  	  // Numerical arguments that are a constant can be returned as
  	  // the constant. This can help fold later cases where even this
  	  // constant might have been UNDEFINED via an unreachable edge.
! 	  if (arg_range.singleton_p ())
! 	    {
! 	      r = arg_range;
! 	      return true;
! 	    }
  	}
      }
  
diff -Nrcpad gcc-17-20260614/gcc/gimple-ssa-backprop.cc gcc-17-20260621/gcc/gimple-ssa-backprop.cc
*** gcc-17-20260614/gcc/gimple-ssa-backprop.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/gimple-ssa-backprop.cc	Sun Jun 21 22:32:06 2026
*************** backprop::execute ()
*** 1137,1142 ****
--- 1137,1143 ----
    for (unsigned int i = 0; i < m_vars.length (); ++i)
      if (var_info *v = m_vars[i])
        if (TREE_CODE (v->new_value) == SSA_NAME
+ 	  && !SSA_NAME_IS_DEFAULT_DEF (v->new_value)
  	  && has_zero_uses (v->new_value)
  	  && bitmap_set_bit (deleted_vars, SSA_NAME_VERSION (v->new_value)))
  	{
diff -Nrcpad gcc-17-20260614/gcc/ipa-cp.cc gcc-17-20260621/gcc/ipa-cp.cc
*** gcc-17-20260614/gcc/ipa-cp.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/ipa-cp.cc	Sun Jun 21 22:32:06 2026
*************** ipa_vr_intersect_with_arith_jfunc (vrang
*** 1818,1838 ****
  	  if (!ipa_vr_operation_and_type_effects (op_res, src_vr, operation,
  						  operation_type, src_type))
  	    return;
- 	  if (src_type == dst_type)
- 	    {
- 	      vr.intersect (op_res);
- 	      return;
- 	    }
  	  inter_vr = &op_res;
  	  src_type = operation_type;
  	}
        else
  	inter_vr = &src_vr;
  
!       value_range tmp_res (dst_type);
!       if (ipa_vr_operation_and_type_effects (tmp_res, *inter_vr, NOP_EXPR,
! 					     dst_type, src_type))
! 	vr.intersect (tmp_res);
        return;
      }
  
--- 1818,1839 ----
  	  if (!ipa_vr_operation_and_type_effects (op_res, src_vr, operation,
  						  operation_type, src_type))
  	    return;
  	  inter_vr = &op_res;
  	  src_type = operation_type;
  	}
        else
  	inter_vr = &src_vr;
  
!       if (src_type != dst_type)
! 	{
! 	  value_range tmp_res (dst_type);
! 	  if (!ipa_vr_operation_and_type_effects (tmp_res, *inter_vr, NOP_EXPR,
! 						  dst_type, src_type))
! 	    return;
! 	  vr.intersect (tmp_res);
! 	}
!       else
! 	vr.intersect (*inter_vr);
        return;
      }
  
diff -Nrcpad gcc-17-20260614/gcc/ipa-prop.cc gcc-17-20260621/gcc/ipa-prop.cc
*** gcc-17-20260614/gcc/ipa-prop.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/ipa-prop.cc	Sun Jun 21 22:32:06 2026
*************** ipa_vr::ipa_vr ()
*** 148,154 ****
  }
  
  ipa_vr::ipa_vr (const vrange &r)
!   : m_storage (ggc_alloc_vrange_storage (r)),
      m_type (r.type ())
  {
  }
--- 148,154 ----
  }
  
  ipa_vr::ipa_vr (const vrange &r)
!   : m_storage (ggc_alloc_vrange_storage (r, false /* shared_p */)),
      m_type (r.type ())
  {
  }
*************** ipa_prop_write_jump_functions (void)
*** 5986,5991 ****
--- 5986,6008 ----
  static void
  ipa_record_return_value_range_1 (cgraph_node *n, value_range val)
  {
+   // Remove local invariant from return values.
+   if (is_a<prange> (val))
+     {
+       const prange &pr = as_a <prange> (val);
+       tree t = pr.pt_invariant ();
+       if (t && !is_gimple_ip_invariant (t))
+         {
+ 	  if (dump_file && (dump_flags & TDF_DETAILS))
+ 	    {
+ 	      fprintf (dump_file, "Could not record return range of %s:", n->dump_name ());
+ 	      val.dump (dump_file);
+ 	      fprintf (dump_file, "\n");
+ 	      fprintf (dump_file, "Because uses non ipa invariant\n");
+ 	    }
+ 	  return;
+         }
+     }
    if (!ipa_return_value_sum)
      {
        if (!ipa_vr_hash_table)
diff -Nrcpad gcc-17-20260614/gcc/jit/ChangeLog gcc-17-20260621/gcc/jit/ChangeLog
*** gcc-17-20260614/gcc/jit/ChangeLog	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/jit/ChangeLog	Sun Jun 21 22:32:06 2026
***************
*** 1,3 ****
--- 1,28 ----
+ 2026-06-17  Antoni Boucher  <bouanto@zoho.com>
+ 	    Robert Zakrzewski  <robert.zakrzewski1@stellantis.com>
+ 
+ 	* docs/topics/compatibility.rst (LIBGCCJIT_ABI_38): New ABI tag.
+ 	* docs/topics/types.rst: Document gcc_jit_type_is_floating_point.
+ 	* libgccjit.cc (gcc_jit_type_is_floating_point): New function.
+ 	* libgccjit.h (gcc_jit_type_is_floating_point): New function.
+ 	* libgccjit.map: New function.
+ 	* libgccjit.exports: New function.
+ 
+ 2026-06-17  Robert Zakrzewski  <robert.zakrzewski1@stellantis.com>
+ 	    Antoni Boucher  <bouanto@zoho.com>
+ 
+ 	* jit-recording.h: Fix float comparison.
+ 	* libgccjit.cc: Fix type check in gcc_jit_context_new_comparison.
+ 
+ 2026-06-17  Robert Zakrzewski  <robert.zakrzewski1@stellantis.com>
+ 	    Antoni Boucher  <bouanto@zoho.com>
+ 
+ 	* jit-recording.h: Fix type comparison.
+ 
+ 2026-06-17  Antoni Boucher  <bouanto@zoho.com>
+ 
+ 	* dummy-frontend.cc: Handle new types in jit_langhook_type_for_mode.
+ 
  2026-06-09  Antoni Boucher  <bouanto@zoho.com>
  
  	* libgccjit.cc: Allow cast between integers and pointers in
diff -Nrcpad gcc-17-20260614/gcc/jit/docs/topics/compatibility.rst gcc-17-20260621/gcc/jit/docs/topics/compatibility.rst
*** gcc-17-20260614/gcc/jit/docs/topics/compatibility.rst	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/jit/docs/topics/compatibility.rst	Sun Jun 21 22:32:06 2026
*************** information:
*** 481,483 ****
--- 481,491 ----
  --------------------
  ``LIBGCCJIT_ABI_37`` covers the addition of
  :func:`gcc_jit_context_new_array_type_u64`
+ 
+ .. _LIBGCCJIT_ABI_38:
+ 
+ ``LIBGCCJIT_ABI_38``
+ --------------------
+ ``LIBGCCJIT_ABI_38`` covers the addition of
+ 
+  * :func:`gcc_jit_type_is_floating_point`
diff -Nrcpad gcc-17-20260614/gcc/jit/docs/topics/types.rst gcc-17-20260621/gcc/jit/docs/topics/types.rst
*** gcc-17-20260614/gcc/jit/docs/topics/types.rst	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/jit/docs/topics/types.rst	Sun Jun 21 22:32:06 2026
*************** Reflection API
*** 456,461 ****
--- 456,473 ----
  
       Return non-zero if the type is an integral.
  
+ .. function::  int\
+                gcc_jit_type_is_floating_point (gcc_jit_type *type)
+ 
+      Return non-zero if the type is floating point.
+ 
+    This entrypoint was added in :ref:`LIBGCCJIT_ABI_38`; you can test for
+    its presence using
+ 
+    .. code-block:: c
+ 
+       #ifdef LIBGCCJIT_HAVE_gcc_jit_type_is_floating_point
+ 
  .. function::  gcc_jit_type *\
                 gcc_jit_type_is_pointer (gcc_jit_type *type)
  
diff -Nrcpad gcc-17-20260614/gcc/jit/dummy-frontend.cc gcc-17-20260621/gcc/jit/dummy-frontend.cc
*** gcc-17-20260614/gcc/jit/dummy-frontend.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/jit/dummy-frontend.cc	Sun Jun 21 22:32:06 2026
*************** jit_langhook_type_for_mode (machine_mode
*** 1166,1171 ****
--- 1166,1175 ----
  	return complex_integer_type_node;
      }
  
+   for (int i = 0; i < NUM_FLOATN_NX_TYPES; i++)
+     if (FLOATN_NX_TYPE_NODE (i) != NULL_TREE
+ 	&& mode == TYPE_MODE (FLOATN_NX_TYPE_NODE (i)))
+       return FLOATN_NX_TYPE_NODE (i);
    /* gcc_unreachable */
    return NULL;
  }
diff -Nrcpad gcc-17-20260614/gcc/jit/jit-recording.h gcc-17-20260621/gcc/jit/jit-recording.h
*** gcc-17-20260614/gcc/jit/jit-recording.h	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/jit/jit-recording.h	Sun Jun 21 22:32:06 2026
*************** public:
*** 653,660 ****
  
    virtual bool is_same_type_as (type *other)
    {
!     if (is_int ()
! 		 && other->is_int ()
  		 && get_size () == other->get_size ()
  		 && is_signed () == other->is_signed ())
      {
--- 653,659 ----
  
    virtual bool is_same_type_as (type *other)
    {
!     if (((is_int () && other->is_int ()) || (is_float () && other->is_float ()))
  		 && get_size () == other->get_size ()
  		 && is_signed () == other->is_signed ())
      {
*************** public:
*** 1026,1032 ****
      if (other_vec_type == NULL)
        return false;
      return get_num_units () == other_vec_type->get_num_units ()
!       && get_element_type () == other_vec_type->get_element_type ();
    }
  
    vector_type *is_vector () final override { return this; }
--- 1025,1032 ----
      if (other_vec_type == NULL)
        return false;
      return get_num_units () == other_vec_type->get_num_units ()
!       && get_element_type ()->is_same_type_as (
! 	other_vec_type->get_element_type ());
    }
  
    vector_type *is_vector () final override { return this; }
diff -Nrcpad gcc-17-20260614/gcc/jit/libgccjit.cc gcc-17-20260621/gcc/jit/libgccjit.cc
*** gcc-17-20260614/gcc/jit/libgccjit.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/jit/libgccjit.cc	Sun Jun 21 22:32:06 2026
*************** gcc_jit_type_is_integral (gcc_jit_type *
*** 640,645 ****
--- 640,662 ----
  /* Public entrypoint.  See description in libgccjit.h.
  
     After error-checking, the real work is done by the
+    gcc::jit::recording::type::is_float method, in
+    jit-recording.cc.  */
+ 
+ int
+ gcc_jit_type_is_floating_point (gcc_jit_type *type)
+ {
+   RETURN_VAL_IF_FAIL (type, FALSE, NULL, NULL, "NULL type");
+ 
+   if (type->is_vector ())
+     return false;
+ 
+   return type->is_float ();
+ }
+ 
+ /* Public entrypoint.  See description in libgccjit.h.
+ 
+    After error-checking, the real work is done by the
     gcc::jit::recording::type::is_vector method, in
     jit-recording.cc.  */
  
*************** gcc_jit_context_new_comparison (gcc_jit_
*** 2306,2312 ****
    RETURN_NULL_IF_FAIL (a, ctxt, loc, "NULL a");
    RETURN_NULL_IF_FAIL (b, ctxt, loc, "NULL b");
    RETURN_NULL_IF_FAIL_PRINTF4 (
!     a->get_type ()->unqualified () == b->get_type ()->unqualified (),
      ctxt, loc,
      "mismatching types for comparison:"
      " a: %s (type: %s) b: %s (type: %s)",
--- 2323,2330 ----
    RETURN_NULL_IF_FAIL (a, ctxt, loc, "NULL a");
    RETURN_NULL_IF_FAIL (b, ctxt, loc, "NULL b");
    RETURN_NULL_IF_FAIL_PRINTF4 (
!     compatible_types (a->get_type ()->unqualified (),
! 		      b->get_type ()->unqualified ()),
      ctxt, loc,
      "mismatching types for comparison:"
      " a: %s (type: %s) b: %s (type: %s)",
diff -Nrcpad gcc-17-20260614/gcc/jit/libgccjit.exports gcc-17-20260621/gcc/jit/libgccjit.exports
*** gcc-17-20260614/gcc/jit/libgccjit.exports	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/jit/libgccjit.exports	Sun Jun 21 22:32:06 2026
*************** _gcc_jit_context_set_abort_on_unsupporte
*** 264,266 ****
--- 264,269 ----
  
  # LIBGCCJIT_ABI_37
  _gcc_jit_context_new_array_type_u64
+ 
+ # LIBGCCJIT_ABI_38
+ _gcc_jit_type_is_floating_point
diff -Nrcpad gcc-17-20260614/gcc/jit/libgccjit.h gcc-17-20260621/gcc/jit/libgccjit.h
*** gcc-17-20260614/gcc/jit/libgccjit.h	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/jit/libgccjit.h	Sun Jun 21 22:32:06 2026
*************** gcc_jit_function_type_get_param_type (gc
*** 2094,2099 ****
--- 2094,2105 ----
  extern int
  gcc_jit_type_is_integral (gcc_jit_type *type);
  
+ /* Return non-zero if the type is floating point.  */
+ extern int
+ gcc_jit_type_is_floating_point (gcc_jit_type * type);
+ 
+ #define LIBGCCJIT_HAVE_gcc_jit_type_is_floating_point
+ 
  /* Return the type pointed by the pointer type or NULL if it's not a
   * pointer.  */
  extern gcc_jit_type *
diff -Nrcpad gcc-17-20260614/gcc/jit/libgccjit.map gcc-17-20260621/gcc/jit/libgccjit.map
*** gcc-17-20260614/gcc/jit/libgccjit.map	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/jit/libgccjit.map	Sun Jun 21 22:32:06 2026
*************** LIBGCCJIT_ABI_37 {
*** 344,346 ****
--- 344,351 ----
    global:
      gcc_jit_context_new_array_type_u64;
  } LIBGCCJIT_ABI_36;
+ 
+ LIBGCCJIT_ABI_38 {
+   global:
+     gcc_jit_type_is_floating_point;
+ } LIBGCCJIT_ABI_37;
diff -Nrcpad gcc-17-20260614/gcc/lto-streamer-in.cc gcc-17-20260621/gcc/lto-streamer-in.cc
*** gcc-17-20260614/gcc/lto-streamer-in.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/lto-streamer-in.cc	Sun Jun 21 22:32:06 2026
*************** input_cfg (class lto_input_block *ib, cl
*** 1140,1145 ****
--- 1140,1146 ----
        loop->dont_vectorize = streamer_read_hwi (ib);
        loop->force_vectorize = streamer_read_hwi (ib);
        loop->finite_p = streamer_read_hwi (ib);
+       loop->can_be_parallel = streamer_read_hwi (ib);
        loop->simduid = stream_read_tree (ib, data_in);
  
        place_new_loop (fn, loop);
diff -Nrcpad gcc-17-20260614/gcc/lto-streamer-out.cc gcc-17-20260621/gcc/lto-streamer-out.cc
*** gcc-17-20260614/gcc/lto-streamer-out.cc	Sun Jun 14 22:32:07 2026
--- gcc-17-20260621/gcc/lto-streamer-out.cc	Sun Jun 21 22:32:06 2026
*************** output_cfg (struct output_block *ob, str
*** 2220,2225 ****
--- 2220,2226 ----
        streamer_write_hwi (ob, loop->dont_vectorize);
        streamer_write_hwi (ob, loop->force_vectorize);
        streamer_write_hwi (ob, loop->finite_p);
+       streamer_write_hwi (ob, loop->can_be_parallel);
        stream_write_tree (ob, loop->simduid, true);
      }
  
diff -Nrcpad gcc-17-20260614/gcc/match.pd gcc-17-20260621/gcc/match.pd
*** gcc-17-20260614/gcc/match.pd	Sun Jun 14 22:32:08 2026
--- gcc-17-20260621/gcc/match.pd	Sun Jun 21 22:32:07 2026
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 236,241 ****
--- 236,259 ----
        && !TYPE_UNSIGNED (TREE_TYPE (@0)))
    (abs @0)))
  
+ /* Following match patterns are used by the match_spaceship function to detect
+    all possible spaceship combinations.  */
+ #if GIMPLE
+ (if (INTEGRAL_TYPE_P (type))
+   (for op (lt ne)
+   (match (spaceship @0 @1)
+     (cond^ (le @0 @1) (negate (convert? (op @0 @1))) integer_onep)))
+   (for op (lt ne)
+   (match (spaceship @0 @1)
+     (cond^ (le @1 @0) (convert? (op @1 @0)) integer_minus_onep)))
+   (for op (gt ne)
+   (match (spaceship @0 @1)
+     (cond^ (ge @0 @1) (convert? (op @0 @1)) integer_minus_onep))))
+   (for op (gt ne)
+   (match (spaceship @0 @1)
+     (cond^ (ge @1 @0) (negate (convert? (op @1 @0))) integer_onep)))
+ #endif
+ 
  /* Simplifications of operations with one constant operand and
     simplifications to constants or single values.  */
  
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 1715,1723 ****
  /* X % Y is smaller than Y.  */
  (for cmp (lt ge)
   (simplify
!   (cmp:c (trunc_mod @0 @1) @1)
!   (if (TYPE_UNSIGNED (TREE_TYPE (@0)))
!    { constant_boolean_node (cmp == LT_EXPR, type); })))
  
  /* x | ~0 -> ~0  */
  (simplify
--- 1733,1740 ----
  /* X % Y is smaller than Y.  */
  (for cmp (lt ge)
   (simplify
!   (cmp:c (trunc_mod tree_expr_nonnegative_p@0 tree_expr_nonnegative_p@1) @1)
!   { constant_boolean_node (cmp == LT_EXPR, type); }))
  
  /* x | ~0 -> ~0  */
  (simplify
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 1832,1842 ****
  					      SIGNED))
      (minus (plus @1 { build_minus_one_cst (type); }) @0))))
  
! /* (~X) >> X -> -1 for signed X.  */
  (simplify
!  (rshift (bit_not @0) (convert? @0))
   (if (INTEGRAL_TYPE_P (type)
!       && !TYPE_UNSIGNED (type))
    { build_minus_one_cst (type); }))
  #endif
  
--- 1849,1861 ----
  					      SIGNED))
      (minus (plus @1 { build_minus_one_cst (type); }) @0))))
  
! /* (~X) >> (type1)X -> -1 for signed X.
!    The cast needs not to be truncating cast.  */
  (simplify
!  (rshift (bit_not @0) (convert?@1 @0))
   (if (INTEGRAL_TYPE_P (type)
!       && !TYPE_UNSIGNED (type)
!       && TYPE_PRECISION (type) <= TYPE_PRECISION (TREE_TYPE (@1)))
    { build_minus_one_cst (type); }))
  #endif
  
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 4939,4944 ****
--- 4958,4980 ----
       (if (stype && (width == 1 || type_has_mode_precision_p (stype)))
        (convert (convert:stype @0))))))))
  
+ /* PR125405: (x & ((1 << (N - 1)) - 1)) - (x & (1 << (N - 1)))
+    -> sign_extend<N> (x). */
+ (simplify
+  (minus (bit_and @0 INTEGER_CST@1) (bit_and @0 integer_pow2p@2))
+  (if (INTEGRAL_TYPE_P (type)
+       && TYPE_PRECISION (type) <= MAX_FIXED_MODE_SIZE
+       && wi::to_wide (@1) + 1 == wi::to_wide (@2))
+   (with {
+     int width = wi::exact_log2 (wi::to_wide (@2)) + 1;
+     tree ntype = NULL_TREE;
+ 
+     if (width > 0 && width < TYPE_PRECISION (type))
+       ntype = build_nonstandard_integer_type (width, SIGNED);
+    }
+    (if (ntype && type_has_mode_precision_p (ntype))
+     (convert (convert:ntype @0))))))
+ 
  /* Optimize x >> x into 0 */
  (simplify
   (rshift @0 @0)
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 5055,5060 ****
--- 5091,5119 ----
          (op @0 { build_int_cst (TREE_TYPE (@1), prec - 1); })))
        (op @0 { build_int_cst (TREE_TYPE (@1), low); })))))))
  
+ /* Fold x | (x >> (TYPE_PRECISION (type) - 1)) to max (x, -1)
+    Fold x | (~ (x >> (TYPE_PRECISION (type) - 1))) to min (x, -1)
+    Fold x & (x >> (TYPE_PRECISION (type) - 1)) to min (x, 0)
+    Fold x & (~ (x >> (TYPE_PRECISION (type) - 1))) to max (x, 0)
+ */
+ #ifdef GIMPLE
+ (for bitop (bit_ior bit_and)
+      result (max min)
+      rresult (min max)
+  (simplify
+   (bitop:c @0 (rshift @0 INTEGER_CST@1))
+   (if (INTEGRAL_TYPE_P (type)
+        && !TYPE_UNSIGNED (type)
+        && wi::eq_p (wi::to_wide (@1), TYPE_PRECISION (type) - 1))
+    (result @0 { build_int_cst (type, bitop == BIT_IOR_EXPR ? -1 : 0); })))
+  (simplify
+   (bitop:c @0 (bit_not (rshift @0 INTEGER_CST@1)))
+   (if (INTEGRAL_TYPE_P (type)
+        && !TYPE_UNSIGNED (type)
+        && wi::eq_p (wi::to_wide (@1), TYPE_PRECISION (type) - 1))
+    (rresult @0 { build_int_cst (type, bitop == BIT_IOR_EXPR ? -1 : 0); }))))
+ #endif
+ 
  /* Fold `1 >> a` into `a == 0` for scalar integral types. */
  (simplify
   (rshift integer_onep @2)
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 8270,8280 ****
  	 (if (cmp == GT_EXPR)
  	  (lt (view_convert:st @0) { build_zero_cst (st); })))))))))))
  
! /* unsigned < (typeof unsigned)(unsigned != 0) is always false.  */
  (simplify
!  (lt:c @0 (convert (ne @0 integer_zerop)))
!  (if (TYPE_UNSIGNED (TREE_TYPE (@0)))
!   { constant_boolean_node (false, type); }))
  
  /* x != (typeof x)(x == CST) -> CST == 0 ? 1 : (CST == 1 ? (x!=0&&x!=1) : x != 0) */
  /* x != (typeof x)(x != CST) -> CST == 1 ? 1 : (CST == 0 ? (x!=0&&x!=1) : x != 1) */
--- 8329,8338 ----
  	 (if (cmp == GT_EXPR)
  	  (lt (view_convert:st @0) { build_zero_cst (st); })))))))))))
  
! /* For nonnegative x, x < (typeof x)(x != 0) is always false.  */
  (simplify
!  (lt:c @0 (convert (ne tree_expr_nonnegative_p@0 integer_zerop)))
!  { constant_boolean_node (false, type); })
  
  /* x != (typeof x)(x == CST) -> CST == 0 ? 1 : (CST == 1 ? (x!=0&&x!=1) : x != 0) */
  /* x != (typeof x)(x != CST) -> CST == 1 ? 1 : (CST == 0 ? (x!=0&&x!=1) : x != 1) */
diff -Nrcpad gcc-17-20260614/gcc/objc/ChangeLog gcc-17-20260621/gcc/objc/ChangeLog
*** gcc-17-20260614/gcc/objc/ChangeLog	Sun Jun 14 22:32:08 2026
--- gcc-17-20260621/gcc/objc/ChangeLog	Sun Jun 21 22:32:07 2026
***************
*** 1,3 ****
--- 1,8 ----
+ 2026-06-19  Léo Hardt  <leom.hardt@inf.ufrgs.br>
+ 
+ 	* objc-act.cc: Removed orphaned comment from 69f293c
+ 	* objc-encoding.cc: Removed orphaned comment from 69f293c
+ 
  2026-05-30  Dhruv Chawla  <dhruvc@nvidia.com>
  
  	* objc-act.cc (objc_compare_types): Fix typos.
diff -Nrcpad gcc-17-20260614/gcc/objc/objc-act.cc gcc-17-20260621/gcc/objc/objc-act.cc
*** gcc-17-20260614/gcc/objc/objc-act.cc	Sun Jun 14 22:32:08 2026
--- gcc-17-20260621/gcc/objc/objc-act.cc	Sun Jun 21 22:32:07 2026
*************** along with GCC; see the file COPYING3.
*** 50,56 ****
  #include "objc-runtime-hooks.h"
  /* Routines used mainly by the runtimes.  */
  #include "objc-runtime-shared-support.h"
- /* For default_tree_printer ().  */
  
  /* For enum gimplify_status */
  #include "gimple-expr.h"
--- 50,55 ----
diff -Nrcpad gcc-17-20260614/gcc/objc/objc-encoding.cc gcc-17-20260621/gcc/objc/objc-encoding.cc
*** gcc-17-20260614/gcc/objc/objc-encoding.cc	Sun Jun 14 22:32:08 2026
--- gcc-17-20260621/gcc/objc/objc-encoding.cc	Sun Jun 21 22:32:07 2026
*************** along with GCC; see the file COPYING3.
*** 40,47 ****
  /* For my_build_string().  */
  #include "objc-runtime-shared-support.h"
  
- /* For BITS_PER_UNIT.  */
- 
  /* When building Objective-C++, we are not linking against the C front-end
     and so need to replicate the C tree-construction functions in some way.  */
  #ifdef OBJCPLUS
--- 40,45 ----
*************** along with GCC; see the file COPYING3.
*** 49,56 ****
  #include "objcp-decl.h"
  #endif  /* OBJCPLUS */
  
- /* Set up for use of obstacks.  */
- 
  /* This obstack is used to accumulate the encoding of a data type.  */
  static struct obstack util_obstack;
  
--- 47,52 ----
diff -Nrcpad gcc-17-20260614/gcc/range-op-ptr.cc gcc-17-20260621/gcc/range-op-ptr.cc
*** gcc-17-20260614/gcc/range-op-ptr.cc	Sun Jun 14 22:32:08 2026
--- gcc-17-20260621/gcc/range-op-ptr.cc	Sun Jun 21 22:32:07 2026
*************** pointer_plus_operator::fold_range (prang
*** 370,393 ****
    else
     r.set_varying (type);
  
    update_known_bitmask (r, POINTER_PLUS_EXPR, op1, op2);
    return true;
  }
  
  bool
  pointer_plus_operator::op2_range (irange &r, tree type,
! 				  const prange &lhs ATTRIBUTE_UNUSED,
! 				  const prange &op1 ATTRIBUTE_UNUSED,
  				  relation_trio trio) const
  {
    relation_kind rel = trio.lhs_op1 ();
    r.set_varying (type);
  
    // If the LHS and OP1 are equal, the op2 must be zero.
!   if (rel == VREL_EQ)
      r.set_zero (type);
    // If the LHS and OP1 are not equal, the offset must be non-zero.
!   else if (rel == VREL_NE)
      r.set_nonzero (type);
    else
      return false;
--- 370,398 ----
    else
     r.set_varying (type);
  
+   // If op1 refers to an object, op1 + 0 will also refer to the object.
+   if (rh_lb == rh_ub && rh_lb == 0)
+     r.set_pt (op1);
+ 
    update_known_bitmask (r, POINTER_PLUS_EXPR, op1, op2);
    return true;
  }
  
  bool
  pointer_plus_operator::op2_range (irange &r, tree type,
! 				  const prange &lhs,
! 				  const prange &op1,
  				  relation_trio trio) const
  {
    relation_kind rel = trio.lhs_op1 ();
    r.set_varying (type);
  
    // If the LHS and OP1 are equal, the op2 must be zero.
!   if (rel == VREL_EQ || lhs.pt_invariant_p (op1))
      r.set_zero (type);
    // If the LHS and OP1 are not equal, the offset must be non-zero.
!   // AWM: Check if aliasing may mean we can't do the not_equal check.
!   else if (rel == VREL_NE || lhs.pt_inverted_p (op1))
      r.set_nonzero (type);
    else
      return false;
*************** operator_pointer_diff::fold_range (irang
*** 490,495 ****
--- 495,503 ----
    r.set_varying (type);
    relation_kind rel = trio.op1_op2 ();
    op1_op2_relation_effect (r, type, op1, op2, rel);
+   // if op1 and op2 point to the same object, the diff is 0.
+   if (op1.pt_invariant_p (op2))
+     r.set_zero (type);
    update_bitmask (r, op1, op2);
    return true;
  }
*************** operator_cast::fold_range (prange &r, tr
*** 564,569 ****
--- 572,581 ----
      return true;
  
    r.set (type, inner.lower_bound (), inner.upper_bound ());
+ 
+   // The resulting pointer still points to the same object.
+   r.set_pt (inner);
+ 
    r.update_bitmask (inner.get_bitmask ());
    return true;
  }
*************** operator_cast::lhs_op1_relation (const p
*** 725,730 ****
--- 737,751 ----
  	return VREL_VARYING;
      }
  
+   // If the pointer precisions are the same, check for equality and
+   // inequality in the points to fields.
+   if (lhs_prec == op1_prec)
+     {
+       if (lhs.pt_invariant_p (op1))
+ 	return VREL_EQ;
+       if (lhs.pt_inverted_p (op1))
+ 	return VREL_NE;
+     }
    unsigned prec = MIN (lhs_prec, op1_prec);
    return bits_to_pe (prec);
  }
*************** operator_equal::fold_range (irange &r, t
*** 878,884 ****
    // consist of a single value, and then compare them.
    bool op1_const = wi::eq_p (op1.lower_bound (), op1.upper_bound ());
    bool op2_const = wi::eq_p (op2.lower_bound (), op2.upper_bound ());
!   if (op1_const && op2_const)
      {
        if (wi::eq_p (op1.lower_bound (), op2.upper_bound()))
  	r = range_true (type);
--- 899,910 ----
    // consist of a single value, and then compare them.
    bool op1_const = wi::eq_p (op1.lower_bound (), op1.upper_bound ());
    bool op2_const = wi::eq_p (op2.lower_bound (), op2.upper_bound ());
!   // Check for points to equality and inequality first.
!   if (op1.pt_invariant_p (op2))
!     r = range_true (type);
!   else if (op1.pt_inverted_p (op2))
!     r = range_false (type);
!   else if (op1_const && op2_const)
      {
        if (wi::eq_p (op1.lower_bound (), op2.upper_bound()))
  	r = range_true (type);
*************** operator_not_equal::fold_range (irange &
*** 977,983 ****
    // consist of a single value, and then compare them.
    bool op1_const = wi::eq_p (op1.lower_bound (), op1.upper_bound ());
    bool op2_const = wi::eq_p (op2.lower_bound (), op2.upper_bound ());
!   if (op1_const && op2_const)
      {
        if (wi::ne_p (op1.lower_bound (), op2.upper_bound()))
  	r = range_true (type);
--- 1003,1014 ----
    // consist of a single value, and then compare them.
    bool op1_const = wi::eq_p (op1.lower_bound (), op1.upper_bound ());
    bool op2_const = wi::eq_p (op2.lower_bound (), op2.upper_bound ());
!   // Check for points to equality and inequality first.
!   if (op1.pt_inverted_p (op2))
!     r = range_true (type);
!   else if (op1.pt_invariant_p (op2))
!     r = range_false (type);
!   else if (op1_const && op2_const)
      {
        if (wi::ne_p (op1.lower_bound (), op2.upper_bound()))
  	r = range_true (type);
diff -Nrcpad gcc-17-20260614/gcc/sel-sched-ir.h gcc-17-20260621/gcc/sel-sched-ir.h
*** gcc-17-20260614/gcc/sel-sched-ir.h	Sun Jun 14 22:32:08 2026
--- gcc-17-20260621/gcc/sel-sched-ir.h	Sun Jun 21 22:32:07 2026
*************** along with GCC; see the file COPYING3.
*** 21,29 ****
  #ifndef GCC_SEL_SCHED_IR_H
  #define GCC_SEL_SCHED_IR_H
  
- /* For state_t.  */
- /* For reg_note.  */
- 
  /* tc_t is a short for target context.  This is a state of the target
     backend.  */
  typedef void *tc_t;
--- 21,26 ----
diff -Nrcpad gcc-17-20260614/gcc/target.h gcc-17-20260621/gcc/target.h
*** gcc-17-20260614/gcc/target.h	Sun Jun 14 22:32:08 2026
--- gcc-17-20260621/gcc/target.h	Sun Jun 21 22:32:07 2026
*************** enum vect_cost_for_stmt
*** 212,218 ****
    cond_branch_taken,
    vec_perm,
    vec_promote_demote,
!   vec_construct
  };
  
  /* Separate locations for which the vectorizer cost model should
--- 212,219 ----
    cond_branch_taken,
    vec_perm,
    vec_promote_demote,
!   vec_construct,
!   vec_deconstruct
  };
  
  /* Separate locations for which the vectorizer cost model should
diff -Nrcpad gcc-17-20260614/gcc/targhooks.cc gcc-17-20260621/gcc/targhooks.cc
*** gcc-17-20260614/gcc/targhooks.cc	Sun Jun 14 22:32:08 2026
--- gcc-17-20260621/gcc/targhooks.cc	Sun Jun 21 22:32:07 2026
*************** default_builtin_vectorization_cost (enum
*** 777,782 ****
--- 777,783 ----
          return 3;
  
        case vec_construct:
+       case vec_deconstruct:
  	return estimated_poly_value (TYPE_VECTOR_SUBPARTS (vectype)) - 1;
  
        default:
*************** default_stack_protect_guard (void)
*** 941,948 ****
      {
        rtx x;
  
!       if (targetm.stack_protect_guard_symbol_p ())
! 	t = lang_hooks.types.type_for_mode (ptr_mode, 1);
        else
  	t = ptr_type_node;
        t = build_decl (UNKNOWN_LOCATION,
--- 942,950 ----
      {
        rtx x;
  
!       if (UINTPTR_TYPE && targetm.stack_protect_guard_symbol_p ())
! 	/* Get unsigned integer type for uintptr_t.  */
! 	t = unsigned_integer_tree_node_for_type (UINTPTR_TYPE);
        else
  	t = ptr_type_node;
        t = build_decl (UNKNOWN_LOCATION,
diff -Nrcpad gcc-17-20260614/gcc/testsuite/ChangeLog gcc-17-20260621/gcc/testsuite/ChangeLog
*** gcc-17-20260614/gcc/testsuite/ChangeLog	Sun Jun 14 22:32:08 2026
--- gcc-17-20260621/gcc/testsuite/ChangeLog	Sun Jun 21 22:32:07 2026
***************
*** 1,3 ****
--- 1,415 ----
+ 2026-06-20  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* gcc.dg/debug/dwarf2/dwarf2-macro.c: Skip for Darwin23+.
+ 	* gcc.dg/debug/dwarf2/dwarf2-macro2.c: Likewise.
+ 
+ 2026-06-20  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	PR testsuite/112728
+ 	* lib/scanasm.exp (remove_lto_sections): New.
+ 
+ 2026-06-20  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR testsuite/125871
+ 	* gcc.dg/vect/vect-early-break_144-pr125804.c: New test.
+ 
+ 2026-06-19  Kees Cook  <kees@kernel.org>
+ 
+ 	PR c/125604
+ 	* gcc.dg/counted-by-unary.c: New test.
+ 
+ 2026-06-19  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/125857
+ 	* gcc.dg/pr125857-1.c: New test.
+ 
+ 2026-06-19  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/122193
+ 	* gcc.dg/tree-ssa/factor_op_phi-load-offsets-1.c: New test.
+ 	* gcc.dg/tree-ssa/factor_op_phi-load-offsets-2.c: New test.
+ 	* gcc.dg/tree-ssa/factor_op_phi-load-offsets-3.c: New test.
+ 
+ 2026-06-19  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	* gcc.dg/tree-ssa/factor_op_phi-load-stores-1.c: New test.
+ 
+ 2026-06-19  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 	    Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	PR tree-optimization/125557
+ 	* gcc.dg/tree-ssa/scc-diamond-1.c: New test.
+ 	* gcc.dg/tree-ssa/scc-diamond-3.c: New test.
+ 	* gcc.dg/tree-ssa/scc-diamond-4.c: New test.
+ 	* gcc.target/aarch64/scc-diamond-2.c: New test.
+ 
+ 2026-06-19  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/opt108.adb: New test.
+ 	* gnat.dg/opt108_pkg.ads, gnat.dg/opt108_pkg.adb: New helper.
+ 
+ 2026-06-19  Kael Andrew Franco  <kaelfandrew@gmail.com>
+ 
+ 	PR tree-optimization/125641
+ 	PR tree-optimization/125641
+ 	* gcc.dg/pr125641.c: New test.
+ 
+ 2026-06-18  Milan Tripkovic  <Milan.Tripkovic@rt-rk.com>
+ 
+ 	PR target/125405
+ 	* gcc.dg/pr125405-bitint.c: New test.
+ 	* gcc.dg/tree-ssa/pr125405.c: New test.
+ 	* gcc.target/riscv/pr125405.c: New test.
+ 
+ 2026-06-18  Jeff Law  <jeffrey.law@oss.qualcomm.com>
+ 
+ 	* gcc.target/riscv/test-equal.c: New test.
+ 
+ 2026-06-18  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/125535
+ 	* gfortran.dg/asan/implied_do_alloc_comp_leak_1.f90: New test.
+ 
+ 2026-06-18  Thomas Koenig  <tkoenig@gcc.gnu.org>
+ 
+ 	PR fortran/30438
+ 	* gfortran.dg/warn_unused_but_set_variable_2.f90: New test.
+ 
+ 2026-06-18  Richard Sandiford  <rdsandiford@googlemail.com>
+ 
+ 	PR tree-optimization/125872
+ 	* gcc.dg/torture/pr125872.c: New test.
+ 
+ 2026-06-18  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/125854
+ 	* g++.dg/pr125854.C: New.
+ 
+ 2026-06-18  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR ipa/124128
+ 	* gcc.dg/ipa/pr124128.c: New test.
+ 
+ 2026-06-17  Robert Dubner  <rdubner@symas.com>
+ 
+ 	* cobol.dg/group2/258_Nested_PERFORM.cob: Removed.
+ 	* cobol.dg/group2/258_Nested_PERFORM.out: Removed.
+ 	* cobol.dg/group2/259_PERFORM_VARYING_BY_-0.2.cob: Removed.
+ 	* cobol.dg/group2/259_PERFORM_VARYING_BY_-0.2.out: Removed.
+ 	* cobol.dg/group2/338_Default_Arithmetic__1_.cob: Removed.
+ 	* cobol.dg/group2/338_Default_Arithmetic__1_.out: Removed.
+ 	* cobol.dg/group2/Complex_HEX__VALUE_and_MOVE.cob: Removed.
+ 	* cobol.dg/group2/Complex_HEX__VALUE_and_MOVE.out: Removed.
+ 	* cobol.dg/group2/Intrinsics_without_FUNCTION_keyword__2_.cob: Removed.
+ 	* cobol.dg/group2/MOVE_to_JUSTIFIED_item.cob: Removed.
+ 	* cobol.dg/group2/MOVE_to_JUSTIFIED_item.out: Removed.
+ 	* cobol.dg/group2/SORT__table_sort__2_.cob: Removed.
+ 	* cobol.dg/group2/SORT__table_sort__2_.out: Removed.
+ 	* cobol.dg/group2/_-static__compilation.cob: Removed.
+ 
+ 2026-06-17  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/125764
+ 	* g++.dg/reflect/can_substitute3.C: New test.
+ 
+ 2026-06-17  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/125759
+ 	* g++.dg/reflect/expr17.C: New test.
+ 
+ 2026-06-17  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/125492
+ 	* g++.dg/reflect/size_of2.C: New test.
+ 
+ 2026-06-17  Wang Jinghao  <zheng.xianyuwang@gmail.com>
+ 
+ 	* g++.dg/reflect/is_explicit_object_parameter2.C: New test.
+ 
+ 2026-06-17  Antoni Boucher  <bouanto@zoho.com>
+ 	    Robert Zakrzewski  <robert.zakrzewski1@stellantis.com>
+ 
+ 	* jit.dg/test-reflection.c: Add test for
+ 	gcc_jit_type_is_floating_point.
+ 
+ 2026-06-17  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/125613
+ 	* g++.dg/cpp0x/explicit-inst2.C: New test.
+ 
+ 2026-06-17  Robert Zakrzewski  <robert.zakrzewski1@stellantis.com>
+ 	    Antoni Boucher  <bouanto@zoho.com>
+ 
+ 	* jit.dg/all-non-failing-tests.h: Mention new test.
+ 	* jit.dg/test-comparison.c: New test.
+ 
+ 2026-06-17  Robert Zakrzewski  <robert.zakrzewski1@stellantis.com>
+ 	    Antoni Boucher  <bouanto@zoho.com>
+ 
+ 	* jit.dg/test-types.c: Add vector type comparison in test.
+ 
+ 2026-06-17  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR tree-optimization/125804
+ 	* gcc.dg/vect/vect-early-break_144-pr125804.c: New test.
+ 
+ 2026-06-17  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	* gfortran.dg/gomp/declare-reduction-2.f90: Update dg-error.
+ 	* gfortran.dg/gomp/udr1.f90: Likewise.
+ 	* gfortran.dg/gomp/udr2.f90: Likewise.
+ 	* gfortran.dg/gomp/udr3.f90: Likewise.
+ 	* gfortran.dg/gomp/udr4.f90: Likewise.
+ 	* gfortran.dg/gomp/declare-reduction-5.f90: New test.
+ 
+ 2026-06-17  Zhongjie Guo  <guozhongjie@hygon.cn>
+ 
+ 	* gcc.target/i386/c86-4g-m7-vect-load-cost-reduc.c: New test.
+ 
+ 2026-06-17  Robin Dapp  <rdapp.gcc@gmail.com>
+ 
+ 	PR target/125478
+ 	* gcc.target/riscv/rvv/autovec/pr125478.c: New test.
+ 
+ 2026-06-17  Jeff Law  <jeffrey.law@oss.qualcomm.com>
+ 
+ 	Revert:
+ 	2026-06-17  Jim Tsung-Chun Lin  <jim@andestech.com>
+ 
+ 	* gcc.target/riscv/multilib.exp: New test.
+ 
+ 2026-06-17  Jeff Law  <jeffrey.law@oss.qualcomm.com>
+ 
+ 	* gcc.target/riscv/pr120811.c: Add missing escapes and xfail.
+ 
+ 2026-06-17  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gcc.c-torture/execute/builtins/memcpy-chk.c: Adjust.
+ 	* gcc.c-torture/execute/builtins/memmove-chk.c: Adjust.
+ 	* gcc.dg/builtin-object-size-4.c: XFAIL until pr123160 is fixed.
+ 	* gcc.dg/builtin-dynamic-object-size-4.c: Likewise.
+ 	* gcc.misc-tests/gcov-14.c: Add noipa.
+ 
+ 2026-06-17  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gcc.dg/Wreturn-local-addr-9.c: Remove xfail.
+ 	* gcc.c-torture/execute/builtins/strncat-chk.c: Adjust for new
+ 	prange points_to capabilities.
+ 
+ 2026-06-16  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* gcc.target/i386/fabsneg-2.c: Allow for lC* in Mach-O.
+ 
+ 2026-06-16  Robert Dubner  <rdubner@symas.com>
+ 
+ 	* cobol.dg/group2/DIVIDE_binary-long_giving_remainder.cob: New test.
+ 	* cobol.dg/group2/DIVIDE_binary-long_giving_remainder.out: New test.
+ 	* cobol.dg/group2/DIVIDE_numeric-display_giving_remainder.cob: New test.
+ 	* cobol.dg/group2/DIVIDE_numeric-display_giving_remainder.out: New test.
+ 	* cobol.dg/group2/GCC_125616_RT3601_-_IBM_incorrect_DISPLAY_of_COMP-1_COMP-2_float.cob:
+ 	New test.
+ 	* cobol.dg/group2/PR39_RT3573_-_Parser_issue_w_concat._source_lines.cob: New test.
+ 
+ 2026-06-16  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* g++.dg/cpp26/cplusplus.C: Expect __cplusplus == 202603L.
+ 	* g++.dg/cpp29/cplusplus.C: New test.
+ 	* g++.dg/cpp29/feat-cxx29.C: New test.
+ 	* lib/target-supports.exp (check_effective_target_c++26): Also
+ 	true for C++29.
+ 	(check_effective_target_c++26_down, check_effective_target_c++29_only,
+ 	check_effective_target_c++29): New procedures.
+ 	* lib/g++-dg.exp (g++-std-flags): Replace 26 with 29 in the list
+ 	and add 26 to the end.
+ 
+ 2026-06-16  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/125770
+ 	* g++.dg/reflect/members_of15.C: New test.
+ 
+ 2026-06-16  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/125539
+ 	* g++.dg/cpp1y/var-templ89.C: New test.
+ 
+ 2026-06-16  Robin Dapp  <rdapp.gcc@gmail.com>
+ 
+ 	PR tree-optimization/125516
+ 	* gcc.target/riscv/rvv/autovec/pr125516.c: New test.
+ 
+ 2026-06-16  Abhishek Kaushik  <abhishek.kaushik@arm.com>
+ 
+ 	* gcc.target/aarch64/sve2/niter-convert-range.c: New test.
+ 
+ 2026-06-16  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	* gcc.dg/vect/bb-slp-dep-oracle.c: New test.
+ 
+ 2026-06-16  Robin Dapp  <rdapp.gcc@gmail.com>
+ 
+ 	PR target/125670
+ 	* gcc.target/riscv/rvv/autovec/pr125670.c: New test.
+ 
+ 2026-06-16  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	PR testsuite/125584
+ 	* gfortran.dg/coarray/caf.exp: Default GFORTRAN_SHARED_MEMORY_SIZE
+ 	to 2 MB unless running expensive tests.
+ 
+ 2026-06-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/125730
+ 	* gcc.dg/torture/pr125730.c: New testcase.
+ 
+ 2026-06-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	* gcc.dg/loop-versioning-13.c: XFAIL one transfor for ilp32.
+ 	* gcc.dg/pr109393.c: Remove XFAIL for ilp32.
+ 
+ 2026-06-16  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	PR target/125794
+ 	* gcc.target/aarch64/sve/pr125794.c: New test.
+ 
+ 2026-06-16  Avinash Jayakar  <avinashd@linux.ibm.com>
+ 
+ 	PR tree-optimization/59429
+ 	* lib/target-supports.exp (check_effective_target_spaceship): Add new
+ 	proc for spaceship optab. x86, aarch64 and s390 included.
+ 	* gcc.dg/spaceship_int_variants.c: New test.
+ 	* gcc.dg/spaceship_uint_variants.c: New test.
+ 	* gcc.dg/spaceship_mixed_variants.c: New test.
+ 
+ 2026-06-16  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/125614
+ 	* gcc.target/i386/pr125614.c: New file.
+ 
+ 2026-06-16  Zhongyao Chen  <chen.zhongyao@zte.com.cn>
+ 
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i16.c: Expect vadd.vx,
+ 	vmul.vx, vsadd.vx and vssub.vx.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i8.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i16.c: Likewise.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i8.c: Likewise.
+ 
+ 2026-06-15  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	* gcc.target/i386/fabsneg-2.c: New test case.
+ 
+ 2026-06-15  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	PR target/125795
+ 	* gcc.target/aarch64/pr125795.c: New test.
+ 
+ 2026-06-15  Jose E. Marchesi  <jemarch@gnu.org>
+ 
+ 	* algol68/execute/modules/module26.a68: New file.
+ 	* algol68/execute/modules/program-26.a68: New test.
+ 
+ 2026-06-15  Kael Andrew Franco  <kaelfandrew@gmail.com>
+ 
+ 	PR tree-optimization/125737
+ 	PR tree-optimization/125737
+ 	* gcc.dg/pr125737.c: New test.
+ 
+ 2026-06-15  Kael Andrew Franco  <kaelfandrew@gmail.com>
+ 
+ 	PR tree-optimization/125756
+ 	* gcc.dg/pr125756.c: New test.
+ 
+ 2026-06-15  Konstantinos Eleftheriou  <konstantinos.eleftheriou@vrull.eu>
+ 
+ 	PR rtl-optimization/123754
+ 	* gcc.target/aarch64/pr123754.c: New test.
+ 	* gcc.target/aarch64/avoid-store-forwarding-be-2.c: New test.
+ 
+ 2026-06-15  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/sat/sat_arith.h: Add test helper macros.
+ 	* gcc.target/riscv/sat/sat_u_mul-13-u16.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-13-u32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-13-u64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-13-u8.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-13-u16.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-13-u32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-13-u64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-13-u8.c: New test.
+ 
+ 2026-06-15  Jim Tsung-Chun Lin  <jim@andestech.com>
+ 
+ 	* gcc.target/riscv/multilib.exp: New test.
+ 
+ 2026-06-15  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	* gcc.dg/lto/toplevel-extended-asm-1_0.c: Skip on 64-bit
+ 	Solaris/SPARC.
+ 	* gcc.dg/lto/toplevel-simple-asm-1_0.c: Likewise.
+ 
+ 2026-06-15  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	PR tree-optimization/125750
+ 	* g++.dg/tree-ssa/mult-negate-zeroone-1.C: Fix escaping.
+ 
+ 2026-06-15  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/125786
+ 	* gcc.dg/torture/pr125786.c: New testcase.
+ 
+ 2026-06-15  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/125790
+ 	* gcc.dg/pr125707.c: Move the long over to pr125707-1.c.
+ 	* gcc.dg/pr125707-1.c: New test; xfailed.
+ 	* gcc.dg/pr125790-1.c: New test.
+ 
+ 2026-06-15  Monk Chiang  <62004175+monkchiang@users.noreply.github.com>
+ 
+ 	* g++.target/riscv/zicfilp-thunk.C: New test.
+ 	* gcc.target/riscv/zicfilp-func-entry.c: New test.
+ 	* gcc.target/riscv/zicfilp-gpr-save.c: New test.
+ 	* gcc.target/riscv/zicfilp-nonlocal-goto.c: New test.
+ 
+ 2026-06-15  Monk Chiang  <monk.chiang@sifive.com>
+ 
+ 	* gcc.target/riscv/zicfilp-indirect-return.c: New test.
+ 	* gcc.target/riscv/zicfilp-setjmp.c: New test.
+ 
+ 2026-06-14  Robert Dubner  <rdubner@symas.com>
+ 
+ 	* cobol.dg/group2/COMP-3_to_COMP-3_size_error.cob: New test.
+ 	* cobol.dg/group2/COMP-3_to_COMP-3_size_error.out: New test.
+ 	* cobol.dg/group2/COMP-3_to_numeric-display_size_error.cob: New test.
+ 	* cobol.dg/group2/COMP-3_to_numeric-display_size_error.out: New test.
+ 	* cobol.dg/group2/Clear_negative_zero_after_truncated_MOVE.cob: New test.
+ 	* cobol.dg/group2/Clear_negative_zero_after_truncated_MOVE.out: New test.
+ 	* cobol.dg/group2/numeric-display_to_COMP-3_size_error.cob: New test.
+ 	* cobol.dg/group2/numeric-display_to_COMP-3_size_error.out: New test.
+ 
+ 2026-06-14  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/125782
+ 	* gfortran.dg/associate_82.f90: New test.
+ 
+ 2026-06-14  François-Xavier Coudert  <fxcoudert@gcc.gnu.org>
+ 
+ 	* gcc.dg/darwin-minversion-link.c: Account for macOS 27.
+ 
+ 2026-06-14  Thomas Koenig  <tkoenig@gcc.gnu.org>
+ 
+ 	PR fortran/30438
+ 	* gfortran.dg/warn_unused_but_set_variable_3.f90: New test.
+ 
+ 2026-06-14  Souradipto Das  <souradiptodas6@gmail.com>
+ 
+ 	* gcc.dg/int-bwise-opt-3.c: New test.
+ 	* gcc.dg/int-bwise-opt-4.c: New test.
+ 
+ 2026-06-14  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/125774
+ 	* gcc.dg/torture/pr125774-1.c: New test.
+ 
  2026-06-13  Jose E. Marchesi  <jemarch@gnu.org>
  
  	* algol68/execute/modules/program-1.a68: Fix test.
diff -Nrcpad gcc-17-20260614/gcc/testsuite/algol68/execute/modules/module26.a68 gcc-17-20260621/gcc/testsuite/algol68/execute/modules/module26.a68
*** gcc-17-20260614/gcc/testsuite/algol68/execute/modules/module26.a68	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/algol68/execute/modules/module26.a68	Sun Jun 21 22:32:08 2026
***************
*** 0 ****
--- 1,15 ----
+ { The way union unraveling works in parser-modes, the union(Foo,Bar)
+   below triggers the emission of two entries with the same modes in
+   the resulting module interface. }
+ 
+ module Module_26 =
+ def
+     pub int public;
+     int private;
+     pub mode Baz = union(Foo,Bar);
+     pub mode Foo = union (int,bool,real);
+     mode Bar = union (int,bool);
+     mode Je = struct (int lele);
+ 
+     skip
+ fed
diff -Nrcpad gcc-17-20260614/gcc/testsuite/algol68/execute/modules/program-26.a68 gcc-17-20260621/gcc/testsuite/algol68/execute/modules/program-26.a68
*** gcc-17-20260614/gcc/testsuite/algol68/execute/modules/program-26.a68	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/algol68/execute/modules/program-26.a68	Sun Jun 21 22:32:08 2026
***************
*** 0 ****
--- 1,6 ----
+ { dg-modules "module26" }
+ access Module_26
+ begin
+       Baz x = 10, y = false, z = 3.14;
+       skip
+ end
diff -Nrcpad gcc-17-20260614/gcc/testsuite/cobol.dg/group2/258_Nested_PERFORM.cob gcc-17-20260621/gcc/testsuite/cobol.dg/group2/258_Nested_PERFORM.cob
*** gcc-17-20260614/gcc/testsuite/cobol.dg/group2/258_Nested_PERFORM.cob	Sun Jun 14 22:32:09 2026
--- gcc-17-20260621/gcc/testsuite/cobol.dg/group2/258_Nested_PERFORM.cob	Thu Jan  1 00:00:00 1970
***************
*** 1,16 ****
-        *> { dg-do run }
-        *> { dg-output-file "group2/258_Nested_PERFORM.out" }
- 
-        IDENTIFICATION   DIVISION.
-        PROGRAM-ID.      prog.
-        PROCEDURE        DIVISION.
-            PERFORM 2 TIMES
-              DISPLAY "X" NO ADVANCING
-              END-DISPLAY
-              PERFORM 2 TIMES
-                DISPLAY "Y" NO ADVANCING
-                END-DISPLAY
-              END-PERFORM
-            END-PERFORM.
-            STOP RUN.
- 
--- 0 ----
diff -Nrcpad gcc-17-20260614/gcc/testsuite/cobol.dg/group2/258_Nested_PERFORM.out gcc-17-20260621/gcc/testsuite/cobol.dg/group2/258_Nested_PERFORM.out
*** gcc-17-20260614/gcc/testsuite/cobol.dg/group2/258_Nested_PERFORM.out	Sun Jun 14 22:32:09 2026
--- gcc-17-20260621/gcc/testsuite/cobol.dg/group2/258_Nested_PERFORM.out	Thu Jan  1 00:00:00 1970
***************
*** 1 ****
- XYYXYY
--- 0 ----
diff -Nrcpad gcc-17-20260614/gcc/testsuite/cobol.dg/group2/259_PERFORM_VARYING_BY_-0.2.cob gcc-17-20260621/gcc/testsuite/cobol.dg/group2/259_PERFORM_VARYING_BY_-0.2.cob
*** gcc-17-20260614/gcc/testsuite/cobol.dg/group2/259_PERFORM_VARYING_BY_-0.2.cob	Sun Jun 14 22:32:09 2026
--- gcc-17-20260621/gcc/testsuite/cobol.dg/group2/259_PERFORM_VARYING_BY_-0.2.cob	Thu Jan  1 00:00:00 1970
***************
*** 1,19 ****
-        *> { dg-do run }
-        *> { dg-output-file "group2/259_PERFORM_VARYING_BY_-0.2.out" }
- 
-        IDENTIFICATION   DIVISION.
-        PROGRAM-ID.      prog.
-        DATA             DIVISION.
-        WORKING-STORAGE  SECTION.
-           77 X             PIC 9v9.
-        PROCEDURE        DIVISION.
-            PERFORM VARYING X FROM 0.8 BY -0.2
-                    UNTIL   X < 0.4
-              DISPLAY "X" NO ADVANCING
-              END-DISPLAY
-            END-PERFORM.
-        IF X NOT = 0.2
-          DISPLAY "WRONG X: " X END-DISPLAY
-        END-IF
-            STOP RUN.
- 
--- 0 ----
diff -Nrcpad gcc-17-20260614/gcc/testsuite/cobol.dg/group2/259_PERFORM_VARYING_BY_-0.2.out gcc-17-20260621/gcc/testsuite/cobol.dg/group2/259_PERFORM_VARYING_BY_-0.2.out
*** gcc-17-20260614/gcc/testsuite/cobol.dg/group2/259_PERFORM_VARYING_BY_-0.2.out	Sun Jun 14 22:32:09 2026
--- gcc-17-20260621/gcc/testsuite/cobol.dg/group2/259_PERFORM_VARYING_BY_-0.2.out	Thu Jan  1 00:00:00 1970
***************
*** 1 ****
- XXX
--- 0 ----
diff -Nrcpad gcc-17-20260614/gcc/testsuite/cobol.dg/group2/338_Default_Arithmetic__1_.cob gcc-17-20260621/gcc/testsuite/cobol.dg/group2/338_Default_Arithmetic__1_.cob
*** gcc-17-20260614/gcc/testsuite/cobol.dg/group2/338_Default_Arithmetic__1_.cob	Sun Jun 14 22:32:09 2026
--- gcc-17-20260621/gcc/testsuite/cobol.dg/group2/338_Default_Arithmetic__1_.cob	Thu Jan  1 00:00:00 1970
***************
*** 1,75 ****
-        *> { dg-do run }
-        *> { dg-output-file "group2/338_Default_Arithmetic__1_.out" }
- 
-        IDENTIFICATION DIVISION.
-        PROGRAM-ID. prog.
-        DATA DIVISION.
-        WORKING-STORAGE SECTION.
-        01 NUM-A   PIC 9(3) VALUE 399.
-        01 NUM-B   PIC 9(3) VALUE 211.
-        01 NUM-C   PIC 9(3)V99 VALUE 212.34.
-        01 NUMV1   PIC 9(3)V9.
-        01 PICX    PIC X VALUE 'A'.
-        01 RSLT    PIC 9(3).
-        01 RSLTV1  PIC 9(3).9.
-        01 RSLTV2  PIC 9(3).99.
-       *
-        PROCEDURE DIVISION.
-        MAIN.
-            COMPUTE RSLT = NUM-A + 1.1.
-            DISPLAY 'Simple Compute  RSLT IS ' RSLT
-            COMPUTE RSLT = ((NUM-A / 100) - (NUM-B / 100)) * 100
-            DISPLAY 'Single Variable RSLT IS ' RSLT
-            COMPUTE RSLTV2, RSLT = ((NUM-A / 100) - (NUM-B / 100)) * 100
-            DISPLAY 'Compute  RSLT    IS ' RSLT
-            DISPLAY 'Compute  RSLTv99 IS ' RSLTV2
-            COMPUTE RSLTV1, RSLT = ((NUM-A / 100) - (NUM-B / 100)) * 100
-            DISPLAY 'Compute  RSLT    IS ' RSLT
-            DISPLAY 'Compute  RSLTv9  IS ' RSLTV1
-            MOVE 0 TO RSLT
-            ADD NUM-C TO RSLT.
-            DISPLAY 'Add      RSLT    IS ' RSLT.
-            MOVE 0 TO RSLT
-            ADD NUM-A NUM-C 10 TO RSLT.
-            DISPLAY 'Add      RSLT    IS ' RSLT.
-            SUBTRACT NUM-C FROM RSLT.
-            DISPLAY 'Subtract RSLT    IS ' RSLT.
-            SUBTRACT NUM-A -10 FROM RSLT.
-            DISPLAY 'Subtract RSLT    IS ' RSLT.
-            MOVE 0 TO RSLT
-            ADD NUM-A NUM-C TO RSLT GIVING RSLTV1.
-            DISPLAY 'Add      RSLTv9  IS ' RSLTV1
-            MULTIPLY NUM-A BY NUM-C GIVING RSLT.
-            DISPLAY 'Multiply RSLT    IS ' RSLT.
-            MULTIPLY RSLT BY NUM-C.
-            DISPLAY 'Multiply RSLT    IS ' RSLT.
-            DIVIDE NUM-A BY 10 GIVING RSLT.
-            DISPLAY 'Divide   RSLT    IS ' RSLT.
-            DIVIDE RSLT BY 4 GIVING RSLTV1.
-            DISPLAY 'Divide   RSLTv9  IS ' RSLTV1.
-            DIVIDE RSLT BY 4 GIVING RSLT.
-            DISPLAY 'Divide   RSLT    IS ' RSLT.
- 
-            COMPUTE RSLTV1, RSLT = ((NUM-A / 100) - (NUM-B / 100)) * 100
-            DISPLAY 'Simple   RSLT    IS ' RSLT
-                            ' RSLTv9  IS ' RSLTV1.
- 
-            COMPUTE RSLTV1, RSLT = ((NUM-A / (100.55 + -0.550))
-                                 -  (NUM-B / (10.11 * 10 - 1.1)))
-                                   * (220 / 2.2)
-            DISPLAY 'Complex  RSLT    IS ' RSLT
-                            ' RSLTv9  IS ' RSLTV1.
- 
-            COMPUTE RSLTV1, RSLT = ((NUM-A / (101 - 1))
-                                 -  (NUM-B / (10 * 10))) * (200 / 2)
-            DISPLAY 'Reduced  RSLT    IS ' RSLT
-                            ' RSLTv9  IS ' RSLTV1.
-            MOVE NUM-A TO NUMV1.
-            IF ((NUMV1 / (101 - 1))
-               -  (NUM-B / (10 * 10))) * (200 / 2) EQUAL 188
-               DISPLAY "Not Using ARITHMETIC-OSVS"
-            ELSE
-               DISPLAY "Using ARITHMETIC-OSVS"
-            END-IF.
-            STOP RUN.
- 
--- 0 ----
diff -Nrcpad gcc-17-20260614/gcc/testsuite/cobol.dg/group2/338_Default_Arithmetic__1_.out gcc-17-20260621/gcc/testsuite/cobol.dg/group2/338_Default_Arithmetic__1_.out
*** gcc-17-20260614/gcc/testsuite/cobol.dg/group2/338_Default_Arithmetic__1_.out	Sun Jun 14 22:32:09 2026
--- gcc-17-20260621/gcc/testsuite/cobol.dg/group2/338_Default_Arithmetic__1_.out	Thu Jan  1 00:00:00 1970
***************
*** 1,21 ****
- Simple Compute  RSLT IS 400
- Single Variable RSLT IS 188
- Compute  RSLT    IS 188
- Compute  RSLTv99 IS 188.00
- Compute  RSLT    IS 188
- Compute  RSLTv9  IS 188.0
- Add      RSLT    IS 212
- Add      RSLT    IS 621
- Subtract RSLT    IS 408
- Subtract RSLT    IS 019
- Add      RSLTv9  IS 611.3
- Multiply RSLT    IS 723
- Multiply RSLT    IS 723
- Divide   RSLT    IS 039
- Divide   RSLTv9  IS 009.7
- Divide   RSLT    IS 009
- Simple   RSLT    IS 188 RSLTv9  IS 188.0
- Complex  RSLT    IS 188 RSLTv9  IS 188.0
- Reduced  RSLT    IS 188 RSLTv9  IS 188.0
- Not Using ARITHMETIC-OSVS
- 
--- 0 ----
diff -Nrcpad gcc-17-20260614/gcc/testsuite/cobol.dg/group2/Complex_HEX__VALUE_and_MOVE.cob gcc-17-20260621/gcc/testsuite/cobol.dg/group2/Complex_HEX__VALUE_and_MOVE.cob
*** gcc-17-20260614/gcc/testsuite/cobol.dg/group2/Complex_HEX__VALUE_and_MOVE.cob	Sun Jun 14 22:32:09 2026
--- gcc-17-20260621/gcc/testsuite/cobol.dg/group2/Complex_HEX__VALUE_and_MOVE.cob	Thu Jan  1 00:00:00 1970
***************
*** 1,76 ****
-        *> { dg-do run }
-        *> { dg-output-file "group2/Complex_HEX__VALUE_and_MOVE.out" }
- 
-         identification division.
-         program-id. hex-init.
-         data division.
-         working-storage section.
-         01  var-01020304.
-             05 filler1.
-                 10 filler2      pic x(2) VALUE "33".
-                 10 as-value     pic x(4) VALUE  X'01020304'.
-                 10 filler3      pic x(2) VALUE "33".
-             05 as-pointer redefines filler1 usage pointer.
- 
-         01  var-low.
-             05 filler1.
-                 10 filler2      pic x(2) VALUE "33".
-                 10 as-value     pic x(4) VALUE  LOW-VALUES.
-                 10 filler3      pic x(2) VALUE "33".
-             05 as-pointer redefines filler1 usage pointer.
-         01  var-space.
-             05 filler1.
-                 10 filler2      pic x(2) VALUE "33".
-                 10 as-value     pic x(4) VALUE  SPACE.
-                 10 filler3      pic x(2) VALUE "33".
-             05 as-pointer redefines filler1 usage pointer.
-         01  var-quote.
-             05 filler1.
-                 10 filler2      pic x(2) VALUE "33".
-                 10 as-value     pic x(4) VALUE  QUOTE.
-                 10 filler3      pic x(2) VALUE "33".
-             05 as-pointer redefines filler1 usage pointer.
-         01  var-zero.
-             05 filler1.
-                 10 filler2      pic x(2) VALUE "33".
-                 10 as-value     pic x(4) VALUE  ZERO.
-                 10 filler3      pic x(2) VALUE "33".
-             05 as-pointer redefines filler1 usage pointer.
-         01  var-high.
-             05 filler1.
-                 10 filler2      pic x(2) VALUE "33".
-                 10 as-value     pic x(4) VALUE  HIGH-VALUES.
-                 10 filler3      pic x(2) VALUE "33".
-             05 as-pointer redefines filler1 usage pointer.
-         01  move-target.
-             05 filler1.
-                 10 filler2      pic x(2) VALUE "33".
-                 10 as-value     pic x(4) VALUE "3333".
-                 10 filler3      pic x(2) VALUE "33".
-             05 as-pointer redefines filler1 usage pointer.
-         procedure division.
-         display "the value is    " as-pointer of var-01020304.
-         display "should be       0x3333040302013333"
-         display "var-low  :      " as-pointer of var-low
-         display "var-space:      " as-pointer of var-space
-         display "var-quote:      " as-pointer of var-quote
-         display "var-zero :      " as-pointer of var-zero
-         display "var-high :      " as-pointer of var-high
-         display "initial         " as-pointer of move-target
-         move low-value to as-value of move-target
-         display "low-value       " as-pointer of move-target
-         move space to as-value of move-target
-         display "space           " as-pointer of move-target
-         move quote to as-value of move-target
-         display "quote           " as-pointer of move-target
-         move zeroes to as-value of move-target
-         display "zeroes          " as-pointer of move-target
-         move high-value to as-value of move-target
-         display "high-value      " as-pointer of move-target
-         move X'01020304' to as-value of move-target
-         display "01020304        " as-pointer of move-target
-         move "33333333" to move-target
-         move X'00' to filler3 of move-target(1:1)
-         display "ref-mod         " as-pointer of move-target
-         stop run.
- 
--- 0 ----
diff -Nrcpad gcc-17-20260614/gcc/testsuite/cobol.dg/group2/Complex_HEX__VALUE_and_MOVE.out gcc-17-20260621/gcc/testsuite/cobol.dg/group2/Complex_HEX__VALUE_and_MOVE.out
*** gcc-17-20260614/gcc/testsuite/cobol.dg/group2/Complex_HEX__VALUE_and_MOVE.out	Sun Jun 14 22:32:09 2026
--- gcc-17-20260621/gcc/testsuite/cobol.dg/group2/Complex_HEX__VALUE_and_MOVE.out	Thu Jan  1 00:00:00 1970
***************
*** 1,16 ****
- the value is    0x3333040302013333
- should be       0x3333040302013333
- var-low  :      0x3333000000003333
- var-space:      0x3333202020203333
- var-quote:      0x3333222222223333
- var-zero :      0x3333303030303333
- var-high :      0x3333ffffffff3333
- initial         0x3333333333333333
- low-value       0x3333000000003333
- space           0x3333202020203333
- quote           0x3333222222223333
- zeroes          0x3333303030303333
- high-value      0x3333ffffffff3333
- 01020304        0x3333040302013333
- ref-mod         0x3300333333333333
- 
--- 0 ----
diff -Nrcpad gcc-17-20260614/gcc/testsuite/cobol.dg/group2/DIVIDE_binary-long_giving_remainder.cob gcc-17-20260621/gcc/testsuite/cobol.dg/group2/DIVIDE_binary-long_giving_remainder.cob
*** gcc-17-20260614/gcc/testsuite/cobol.dg/group2/DIVIDE_binary-long_giving_remainder.cob	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/cobol.dg/group2/DIVIDE_binary-long_giving_remainder.cob	Sun Jun 21 22:32:08 2026
***************
*** 0 ****
--- 1,26 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/DIVIDE_binary-long_giving_remainder.out" }
+         identification              division.
+         program-id.                 prog.
+         data                        division.
+         working-storage             section.
+         01 var1     binary-long.
+         01 var2     binary-long.
+         01 Q        binary-long.
+         01 r        binary-long.
+         procedure                   division.
+             move  11 to var1 move  2 to var2
+                 divide var1 by var2 giving Q remainder R
+                 display Q space R
+             move -11 to var1 move  2 to var2
+                 divide var1 by var2 giving Q remainder R
+                 display Q space R
+             move  11 to var1 move -2 to var2
+                 divide var1 by var2 giving Q remainder R
+                 display Q space R
+             move -11 to var1 move -2 to var2
+                 divide var1 by var2 giving Q remainder R
+                 display Q space R
+             goback.
+         end program                 prog.
+ 
diff -Nrcpad gcc-17-20260614/gcc/testsuite/cobol.dg/group2/DIVIDE_binary-long_giving_remainder.out gcc-17-20260621/gcc/testsuite/cobol.dg/group2/DIVIDE_binary-long_giving_remainder.out
*** gcc-17-20260614/gcc/testsuite/cobol.dg/group2/DIVIDE_binary-long_giving_remainder.out	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/cobol.dg/group2/DIVIDE_binary-long_giving_remainder.out	Sun Jun 21 22:32:08 2026
***************
*** 0 ****
--- 1,5 ----
+ +0000000005 +0000000001
+ -0000000005 -0000000001
+ -0000000005 +0000000001
+ +0000000005 -0000000001
+ 
diff -Nrcpad gcc-17-20260614/gcc/testsuite/cobol.dg/group2/DIVIDE_numeric-display_giving_remainder.cob gcc-17-20260621/gcc/testsuite/cobol.dg/group2/DIVIDE_numeric-display_giving_remainder.cob
*** gcc-17-20260614/gcc/testsuite/cobol.dg/group2/DIVIDE_numeric-display_giving_remainder.cob	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/cobol.dg/group2/DIVIDE_numeric-display_giving_remainder.cob	Sun Jun 21 22:32:08 2026
***************
*** 0 ****
--- 1,26 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/DIVIDE_numeric-display_giving_remainder.out" }
+         identification              division.
+         program-id.                 prog.
+         data                        division.
+         working-storage             section.
+         01 var1     pic s999.
+         01 var2     pic s999.
+         01 Q        pic s999.
+         01 r        pic s999.
+         procedure                   division.
+             move  11 to var1 move  2 to var2
+                 divide var1 by var2 giving Q remainder R
+                 display Q space R
+             move -11 to var1 move  2 to var2
+                 divide var1 by var2 giving Q remainder R
+                 display Q space R
+             move  11 to var1 move -2 to var2
+                 divide var1 by var2 giving Q remainder R
+                 display Q space R
+             move -11 to var1 move -2 to var2
+                 divide var1 by var2 giving Q remainder R
+                 display Q space R
+             goback.
+         end program                 prog.
+ 
diff -Nrcpad gcc-17-20260614/gcc/testsuite/cobol.dg/group2/DIVIDE_numeric-display_giving_remainder.out gcc-17-20260621/gcc/testsuite/cobol.dg/group2/DIVIDE_numeric-display_giving_remainder.out
*** gcc-17-20260614/gcc/testsuite/cobol.dg/group2/DIVIDE_numeric-display_giving_remainder.out	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/cobol.dg/group2/DIVIDE_numeric-display_giving_remainder.out	Sun Jun 21 22:32:08 2026
***************
*** 0 ****
--- 1,5 ----
+ +005 +001
+ -005 -001
+ -005 +001
+ +005 -001
+ 
diff -Nrcpad gcc-17-20260614/gcc/testsuite/cobol.dg/group2/GCC_125616_RT3601_-_IBM_incorrect_DISPLAY_of_COMP-1_COMP-2_float.cob gcc-17-20260621/gcc/testsuite/cobol.dg/group2/GCC_125616_RT3601_-_IBM_incorrect_DISPLAY_of_COMP-1_COMP-2_float.cob
*** gcc-17-20260614/gcc/testsuite/cobol.dg/group2/GCC_125616_RT3601_-_IBM_incorrect_DISPLAY_of_COMP-1_COMP-2_float.cob	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/cobol.dg/group2/GCC_125616_RT3601_-_IBM_incorrect_DISPLAY_of_COMP-1_COMP-2_float.cob	Sun Jun 21 22:32:08 2026
***************
*** 0 ****
--- 1,20 ----
+        *> { dg-do run }
+        *> { dg-options "-dialect ibm" }
+ 
+        IDENTIFICATION DIVISION.
+        PROGRAM-ID. FLTDISP.
+        DATA DIVISION.
+        WORKING-STORAGE SECTION.
+        01  F1 COMP-1 VALUE 1.5.
+        01  F2 COMP-1 VALUE 0.1.
+        01  F3 COMP-1 VALUE -2.75.
+        01  F4 COMP-1 VALUE 1500.
+        01  D1 COMP-2 VALUE 2.71828.
+        PROCEDURE DIVISION.
+            DISPLAY F1
+            DISPLAY F2
+            DISPLAY F3
+            DISPLAY F4
+            DISPLAY D1
+            STOP RUN.
+ 
diff -Nrcpad gcc-17-20260614/gcc/testsuite/cobol.dg/group2/Intrinsics_without_FUNCTION_keyword__2_.cob gcc-17-20260621/gcc/testsuite/cobol.dg/group2/Intrinsics_without_FUNCTION_keyword__2_.cob
*** gcc-17-20260614/gcc/testsuite/cobol.dg/group2/Intrinsics_without_FUNCTION_keyword__2_.cob	Sun Jun 14 22:32:09 2026
--- gcc-17-20260621/gcc/testsuite/cobol.dg/group2/Intrinsics_without_FUNCTION_keyword__2_.cob	Thu Jan  1 00:00:00 1970
***************
*** 1,17 ****
-        *> { dg-do run }
- 
-        IDENTIFICATION   DIVISION.
-        PROGRAM-ID.      prog.
-        ENVIRONMENT      DIVISION.
-        CONFIGURATION    SECTION.
-        REPOSITORY.
-            FUNCTION     PI INTRINSIC
-            FUNCTION     E  INTRINSIC.
-        DATA             DIVISION.
-        WORKING-STORAGE  SECTION.
-        01  Z            PIC 99V99.
-        PROCEDURE        DIVISION.
-            MOVE PI TO Z.
-            MOVE E TO Z.
-            STOP RUN.
- 
--- 0 ----
diff -Nrcpad gcc-17-20260614/gcc/testsuite/cobol.dg/group2/MOVE_to_JUSTIFIED_item.cob gcc-17-20260621/gcc/testsuite/cobol.dg/group2/MOVE_to_JUSTIFIED_item.cob
*** gcc-17-20260614/gcc/testsuite/cobol.dg/group2/MOVE_to_JUSTIFIED_item.cob	Sun Jun 14 22:32:09 2026
--- gcc-17-20260621/gcc/testsuite/cobol.dg/group2/MOVE_to_JUSTIFIED_item.cob	Thu Jan  1 00:00:00 1970
***************
*** 1,31 ****
-        *> { dg-do run }
-        *> { dg-output-file "group2/MOVE_to_JUSTIFIED_item.out" }
- 
-        IDENTIFICATION   DIVISION.
-        PROGRAM-ID.      prog.
-        DATA             DIVISION.
-        WORKING-STORAGE  SECTION.
-        01  SRC-1        PIC S9(04)          VALUE  11.
-        01  SRC-2        PIC S9(04) COMP     VALUE  22.
-        01  SRC-3        PIC S9(04) COMP-5   VALUE  33.
-        01  SRC-4        PIC S9(04)PP        VALUE  4400.
-        01  SRC-5        PIC S9(04)PPPPP     VALUE  55500000.
-        01  EDT-FLD      PIC X(07)           JUSTIFIED RIGHT.
-        PROCEDURE        DIVISION.
-            MOVE SRC-1   TO EDT-FLD.
-            DISPLAY '>' EDT-FLD '<'
-            END-DISPLAY.
-            MOVE SRC-2   TO EDT-FLD.
-            DISPLAY '>' EDT-FLD '<'
-            END-DISPLAY.
-            MOVE SRC-3   TO EDT-FLD.
-            DISPLAY '>' EDT-FLD '<'
-            END-DISPLAY.
-            MOVE SRC-4   TO EDT-FLD.
-            DISPLAY '>' EDT-FLD '<'
-            END-DISPLAY.
-            MOVE SRC-5   TO EDT-FLD.
-            DISPLAY '>' EDT-FLD '<'
-            END-DISPLAY.
-            STOP RUN.
- 
--- 0 ----
diff -Nrcpad gcc-17-20260614/gcc/testsuite/cobol.dg/group2/MOVE_to_JUSTIFIED_item.out gcc-17-20260621/gcc/testsuite/cobol.dg/group2/MOVE_to_JUSTIFIED_item.out
*** gcc-17-20260614/gcc/testsuite/cobol.dg/group2/MOVE_to_JUSTIFIED_item.out	Sun Jun 14 22:32:09 2026
--- gcc-17-20260621/gcc/testsuite/cobol.dg/group2/MOVE_to_JUSTIFIED_item.out	Thu Jan  1 00:00:00 1970
***************
*** 1,6 ****
- >   0011<
- >   0022<
- >   0033<
- > 004400<
- >5500000<
- 
--- 0 ----
diff -Nrcpad gcc-17-20260614/gcc/testsuite/cobol.dg/group2/PR39_RT3573_-_Parser_issue_w_concat._source_lines.cob gcc-17-20260621/gcc/testsuite/cobol.dg/group2/PR39_RT3573_-_Parser_issue_w_concat._source_lines.cob
*** gcc-17-20260614/gcc/testsuite/cobol.dg/group2/PR39_RT3573_-_Parser_issue_w_concat._source_lines.cob	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/cobol.dg/group2/PR39_RT3573_-_Parser_issue_w_concat._source_lines.cob	Sun Jun 21 22:32:08 2026
***************
*** 0 ****
--- 1,10 ----
+       *> { dg-do compile }
+ 
+             >>SOURCE FORMAT IS FREE
+         IDENTIFICATION DIVISION.  PROGRAM-ID. issue4.  DATA DIVISION.
+         WORKING-STORAGE SECTION.
+         1 hello-string PIC X(12) VALUE "Hello string".
+         PROCEDURE DIVISION.
+         DISPLAY hello-string.
+         EXIT PROGRAM.
+ 
diff -Nrcpad gcc-17-20260614/gcc/testsuite/cobol.dg/group2/SORT__table_sort__2_.cob gcc-17-20260621/gcc/testsuite/cobol.dg/group2/SORT__table_sort__2_.cob
*** gcc-17-20260614/gcc/testsuite/cobol.dg/group2/SORT__table_sort__2_.cob	Sun Jun 14 22:32:09 2026
--- gcc-17-20260621/gcc/testsuite/cobol.dg/group2/SORT__table_sort__2_.cob	Thu Jan  1 00:00:00 1970
***************
*** 1,96 ****
-        *> { dg-do run }
-        *> { dg-output-file "group2/SORT__table_sort__2_.out" }
- 
-        IDENTIFICATION DIVISION.
-        PROGRAM-ID. prog.
-        ENVIRONMENT DIVISION.
-        DATA DIVISION.
-        WORKING-STORAGE SECTION.
-        01 K                 PIC 9(2).
- 
-        01 CNT1              PIC 9(9) COMP-5 VALUE 4.
-        01 TAB1.
-           05 ROW1 OCCURS 1 TO 4 DEPENDING CNT1
-                                  DESCENDING TAB1-NR.
-              10 TAB1-NR     PIC 99.
- 
-        01 TAB2.
-           05 CNT2           PIC 9(9) COMP-5 VALUE 4.
-           05 ROW2 OCCURS 1 TO 4 DEPENDING CNT2
-                                  DESCENDING TAB2-NR.
-              10 TAB2-NR PIC 99.
- 
-        01 TAB3.
-           05 CNT3           PIC 9(9) COMP-5 VALUE 10.
-           05 ROW3 OCCURS 1 TO 10 DEPENDING CNT3
-                                   DESCENDING TAB3-NR
-                                   ASCENDING TAB3-DATA.
-              10 TAB3-NR     PIC 99.
-              10 FILLER      PIC X(2).
-              10 TAB3-DATA   PIC X(5).
-              10 FILLER      PIC X(2).
-              10 TAB3-DATA2  PIC X(5).
- 
- 
-        PROCEDURE DIVISION.
-        A.
-            PERFORM VARYING K FROM 1 BY 1 UNTIL K > 4
-              MOVE K TO TAB1-NR(K), TAB2-NR(K)
-            END-PERFORM
- 
-            MOVE 1 TO TAB3-NR(1).
-            MOVE 1 TO TAB3-NR(8).
-            MOVE 1 TO TAB3-NR(4).
-            MOVE 6 TO TAB3-NR(2).
-            MOVE 5 TO TAB3-NR(3).
-            MOVE 5 TO TAB3-NR(9).
-            MOVE 2 TO TAB3-NR(5).
-            MOVE 2 TO TAB3-NR(10).
-            MOVE 4 TO TAB3-NR(6).
-            MOVE 3 TO TAB3-NR(7).
- 
-            MOVE "abcde" TO TAB3-DATA(1).
-            MOVE "AbCde" TO TAB3-DATA(2).
-            MOVE "abcde" TO TAB3-DATA(3).
-            MOVE "zyx" TO TAB3-DATA(4).
-            MOVE "12345" TO TAB3-DATA(5).
-            MOVE "zyx" TO TAB3-DATA(6).
-            MOVE "abcde" TO TAB3-DATA(7).
-            MOVE "AbCde" TO TAB3-DATA(8).
-            MOVE "abc" TO TAB3-DATA(9).
-            MOVE "12346" TO TAB3-DATA(10).
- 
-            MOVE "day" TO TAB3-DATA2(1).
-            MOVE "The" TO TAB3-DATA2(2).
-            MOVE "eats" TO TAB3-DATA2(3).
-            MOVE "." TO TAB3-DATA2(4).
-            MOVE "mooos" TO TAB3-DATA2(5).
-            MOVE "grass" TO TAB3-DATA2(6).
-            MOVE "and" TO TAB3-DATA2(7).
-            MOVE "whole" TO TAB3-DATA2(8).
-            MOVE "cow" TO TAB3-DATA2(9).
-            MOVE "the" TO TAB3-DATA2(10).
- 
-            SORT ROW1 DESCENDING TAB1-NR
-            SORT ROW2 DESCENDING TAB2-NR
- 
-            DISPLAY "SINGLE TABLE" END-DISPLAY
-            PERFORM VARYING K FROM 1 BY 1 UNTIL K > 4
-              DISPLAY TAB1-NR(K) END-DISPLAY
-            END-PERFORM
- 
-            DISPLAY "LOWER LEVEL TABLE" END-DISPLAY
-            PERFORM VARYING K FROM 1 BY 1 UNTIL K > 4
-              DISPLAY  TAB2-NR(K) END-DISPLAY
-            END-PERFORM
- 
-            SORT ROW3 DESCENDING TAB3-NR ASCENDING TAB3-DATA
- 
-            DISPLAY "MULTY KEY SORT" END-DISPLAY
-            PERFORM VARYING K FROM 1 BY 1 UNTIL K > 10
-              DISPLAY  FUNCTION TRIM(ROW3(K))
-              END-DISPLAY
-            END-PERFORM
- 
-            STOP RUN.
- 
--- 0 ----
diff -Nrcpad gcc-17-20260614/gcc/testsuite/cobol.dg/group2/SORT__table_sort__2_.out gcc-17-20260621/gcc/testsuite/cobol.dg/group2/SORT__table_sort__2_.out
*** gcc-17-20260614/gcc/testsuite/cobol.dg/group2/SORT__table_sort__2_.out	Sun Jun 14 22:32:09 2026
--- gcc-17-20260621/gcc/testsuite/cobol.dg/group2/SORT__table_sort__2_.out	Thu Jan  1 00:00:00 1970
***************
*** 1,22 ****
- SINGLE TABLE
- 04
- 03
- 02
- 01
- LOWER LEVEL TABLE
- 04
- 03
- 02
- 01
- MULTY KEY SORT
- 06  AbCde  The
- 05  abc    cow
- 05  abcde  eats
- 04  zyx    grass
- 03  abcde  and
- 02  12345  mooos
- 02  12346  the
- 01  AbCde  whole
- 01  abcde  day
- 01  zyx    .
- 
--- 0 ----
diff -Nrcpad gcc-17-20260614/gcc/testsuite/cobol.dg/group2/_-static__compilation.cob gcc-17-20260621/gcc/testsuite/cobol.dg/group2/_-static__compilation.cob
*** gcc-17-20260614/gcc/testsuite/cobol.dg/group2/_-static__compilation.cob	Sun Jun 14 22:32:09 2026
--- gcc-17-20260621/gcc/testsuite/cobol.dg/group2/_-static__compilation.cob	Thu Jan  1 00:00:00 1970
***************
*** 1,10 ****
-        *> { dg-do run }
-        *> { dg-options "-static" }
-        *> { dg-prune-output {warning} }
-        *> { dg-output {hello, world} }
-        IDENTIFICATION DIVISION.
-        PROGRAM-ID. prog.
-        PROCEDURE DIVISION.
-        DISPLAY "hello, world".
-        end program prog.
- 
--- 0 ----
diff -Nrcpad gcc-17-20260614/gcc/testsuite/g++.dg/cpp0x/explicit-inst2.C gcc-17-20260621/gcc/testsuite/g++.dg/cpp0x/explicit-inst2.C
*** gcc-17-20260614/gcc/testsuite/g++.dg/cpp0x/explicit-inst2.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/g++.dg/cpp0x/explicit-inst2.C	Sun Jun 21 22:32:08 2026
***************
*** 0 ****
--- 1,81 ----
+ // PR c++/125613
+ // { dg-do compile { target c++11 } }
+ 
+ template<typename T>
+ void fn1 (T) {}
+ template void fn1<int>(int); // OK
+ 
+ template<typename T>
+ void fn2 (T) noexcept {}
+ template void fn2<int>(int) noexcept; // OK
+ 
+ template<typename T>
+ void fn3 (T) {}
+ template void fn3<int>(int) noexcept; // { dg-error "exception specification .noexcept. in explicit instantiation does not match the instantiated one .noexcept \\(false\\)." }
+ 
+ template<typename T>
+ void fn4 (T) noexcept {}
+ template void fn4<int>(int); // OK
+ 
+ template<typename T, bool B>
+ void fn5 (T) noexcept (B) {}
+ template void fn5<int, true>(int) noexcept; // OK
+ 
+ template<typename T, bool B>
+ void fn6 (T) noexcept (B) {}
+ template void fn6<int, false>(int) noexcept; // { dg-error "exception specification .noexcept. in explicit instantiation does not match the instantiated one .noexcept \\(false\\)." }
+ 
+ template<typename T, bool B>
+ void fn7 (T) noexcept (B) {}
+ template void fn7<int, true>(int) noexcept(true); // OK
+ 
+ template<typename T, bool B>
+ void fn8 (T) noexcept (B) {}
+ template void fn8<int, false>(int) noexcept(false); // OK
+ 
+ template<typename T, bool B>
+ void fn9 (T) noexcept (B) {}
+ template void fn9<int, true>(int) noexcept(false); // { dg-error "exception specification .noexcept \\(false\\). in explicit instantiation does not match the instantiated one .noexcept." }
+ 
+ template<typename T>
+ void fn10 (T) noexcept {}
+ template void fn10<int>(int) noexcept(false); // { dg-error "exception specification .noexcept \\(false\\). in explicit instantiation does not match the instantiated one .noexcept." }
+ 
+ template<typename T>
+ struct S {
+   void mfn1 () noexcept { }
+   void mfn2 () { }
+   template<bool B>
+   void mfn3 () noexcept (B) { }
+   template<bool B>
+   void mfn4 () noexcept (B) { }
+ };
+ 
+ template void S<int>::mfn1 () noexcept;
+ template void S<int>::mfn2 () noexcept; // { dg-error "exception specification .noexcept. in explicit instantiation does not match the instantiated one .noexcept \\(false\\)." }
+ template void S<int>::mfn3<true>() noexcept;
+ template void S<int>::mfn4<false>() noexcept; // { dg-error "exception specification .noexcept. in explicit instantiation does not match the instantiated one .noexcept \\(false\\)." }
+ 
+ template<typename>
+ struct X {
+   X() {}
+   ~X() {}
+ };
+ template X<int>::X();
+ template X<int>::~X();
+ 
+ template<typename>
+ struct Y {
+   Y() {}
+   ~Y() {}
+ };
+ template Y<int>::Y() noexcept; // { dg-error "exception specification .noexcept. in explicit instantiation does not match the instantiated one .noexcept \\(false\\)." }
+ template Y<int>::~Y() noexcept;
+ 
+ template<typename>
+ struct Z {
+   Z() noexcept {}
+   ~Z() {}
+ };
+ template Z<int>::Z() noexcept;
+ template Z<int>::~Z() noexcept(false); // { dg-error "exception specification .noexcept \\(false\\). in explicit instantiation does not match the instantiated one .noexcept." }
diff -Nrcpad gcc-17-20260614/gcc/testsuite/g++.dg/cpp1y/var-templ89.C gcc-17-20260621/gcc/testsuite/g++.dg/cpp1y/var-templ89.C
*** gcc-17-20260614/gcc/testsuite/g++.dg/cpp1y/var-templ89.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/g++.dg/cpp1y/var-templ89.C	Sun Jun 21 22:32:08 2026
***************
*** 0 ****
--- 1,32 ----
+ // PR c++/125539
+ // { dg-do compile { target c++14 } }
+ 
+ struct A {};
+ struct B { int i; };
+ constexpr void foo () {}
+ 
+ template<typename T>
+ constexpr static A a1 = (foo (), A {});
+ template<typename T>
+ constexpr static A a2 = (A{}, A{});
+ template<typename T>
+ constexpr static A a3 = A{};
+ template<typename T>
+ constexpr static A a4 = {};
+ template<typename T>
+ constexpr static A a5{};
+ template<typename T>
+ constexpr static A a6 = (A{}, A{}, A{}, A{}, A{}, A{}, A{});
+ template<int N>
+ constexpr static B b1 = B{N};
+ template<int N>
+ constexpr static B b2 = (B{N}, B{N});
+ 
+ template const A a1<int>;
+ template const A a2<int>;
+ template const A a3<int>;
+ template const A a4<int>;
+ template const A a5<int>;
+ template const A a6<int>;
+ template const B b1<42>;
+ template const B b2<42>;
diff -Nrcpad gcc-17-20260614/gcc/testsuite/g++.dg/cpp26/cplusplus.C gcc-17-20260621/gcc/testsuite/g++.dg/cpp26/cplusplus.C
*** gcc-17-20260614/gcc/testsuite/g++.dg/cpp26/cplusplus.C	Sun Jun 14 22:32:09 2026
--- gcc-17-20260621/gcc/testsuite/g++.dg/cpp26/cplusplus.C	Sun Jun 21 22:32:08 2026
***************
*** 1,3 ****
  // { dg-do compile { target c++26_only } }
  
! static_assert(__cplusplus > 202302L);
--- 1,3 ----
  // { dg-do compile { target c++26_only } }
  
! static_assert(__cplusplus == 202603L);
diff -Nrcpad gcc-17-20260614/gcc/testsuite/g++.dg/cpp29/cplusplus.C gcc-17-20260621/gcc/testsuite/g++.dg/cpp29/cplusplus.C
*** gcc-17-20260614/gcc/testsuite/g++.dg/cpp29/cplusplus.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/g++.dg/cpp29/cplusplus.C	Sun Jun 21 22:32:08 2026
***************
*** 0 ****
--- 1,3 ----
+ // { dg-do compile { target c++29_only } }
+ 
+ static_assert(__cplusplus > 202603L);
diff -Nrcpad gcc-17-20260614/gcc/testsuite/g++.dg/cpp29/feat-cxx29.C gcc-17-20260621/gcc/testsuite/g++.dg/cpp29/feat-cxx29.C
*** gcc-17-20260614/gcc/testsuite/g++.dg/cpp29/feat-cxx29.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/g++.dg/cpp29/feat-cxx29.C	Sun Jun 21 22:32:08 2026
***************
*** 0 ****
--- 1,660 ----
+ // { dg-options "-std=c++29 -I${srcdir}/g++.dg/cpp1y -I${srcdir}/g++.dg/cpp1y/testinc" }
+ // { dg-skip-if "requires hosted libstdc++ for complex" { ! hostedlib } }
+ 
+ //  C++98 features:
+ 
+ #ifndef __cpp_rtti
+ #  error "__cpp_rtti"
+ #elif  __cpp_rtti != 199711
+ #  error "__cpp_rtti != 199711"
+ #endif
+ 
+ #ifndef __cpp_exceptions
+ #  error "__cpp_exceptions"
+ #elif  __cpp_exceptions != 199711
+ #  error "__cpp_exceptions != 199711"
+ #endif
+ 
+ //  C++11 features:
+ 
+ #ifndef __cpp_raw_strings
+ #  error "__cpp_raw_strings"
+ #elif __cpp_raw_strings != 200710
+ #  error "__cpp_raw_strings != 200710"
+ #endif
+ 
+ #ifndef __cpp_unicode_literals
+ #  error "__cpp_unicode_literals"
+ #elif __cpp_unicode_literals != 200710
+ #  error "__cpp_unicode_literals != 200710"
+ #endif
+ 
+ #ifndef __cpp_user_defined_literals
+ #  error "__cpp_user_defined_literals"
+ #elif __cpp_user_defined_literals != 200809
+ #  error "__cpp_user_defined_literals != 200809"
+ #endif
+ 
+ #ifndef __cpp_lambdas
+ #  error "__cpp_lambdas"
+ #elif __cpp_lambdas != 200907
+ #  error "__cpp_lambdas != 200907"
+ #endif
+ 
+ #ifndef __cpp_range_based_for
+ #  error "__cpp_range_based_for"
+ #elif __cpp_range_based_for != 202211
+ #  error "__cpp_range_based_for != 202211"
+ #endif
+ 
+ #ifndef __cpp_decltype
+ #  error "__cpp_decltype"
+ #elif __cpp_decltype != 200707
+ #  error "__cpp_decltype != 200707"
+ #endif
+ 
+ #ifndef __cpp_attributes
+ #  error "__cpp_attributes"
+ #elif __cpp_attributes != 200809
+ #  error "__cpp_attributes != 200809"
+ #endif
+ 
+ #ifndef __cpp_rvalue_references
+ #  error "__cpp_rvalue_references"
+ #elif __cpp_rvalue_references != 200610
+ #  error "__cpp_rvalue_references != 200610"
+ #endif
+ 
+ #ifndef __cpp_variadic_templates
+ #  error "__cpp_variadic_templates"
+ #elif __cpp_variadic_templates != 200704
+ #  error "__cpp_variadic_templates != 200704"
+ #endif
+ 
+ #ifndef __cpp_initializer_lists
+ #  error "__cpp_initializer_lists"
+ #elif __cpp_initializer_lists != 200806
+ #  error "__cpp_initializer_lists != 200806"
+ #endif
+ 
+ #ifndef __cpp_delegating_constructors
+ #  error "__cpp_delegating_constructors"
+ #elif __cpp_delegating_constructors != 200604
+ #  error "__cpp_delegating_constructors != 200604"
+ #endif
+ 
+ #ifndef __cpp_nsdmi
+ #  error "__cpp_nsdmi"
+ #elif __cpp_nsdmi != 200809
+ #  error "__cpp_nsdmi != 200809"
+ #endif
+ 
+ #ifndef __cpp_inheriting_constructors
+ #  error "__cpp_inheriting_constructors"
+ #elif  __cpp_inheriting_constructors!= 201511
+ #  error "__cpp_inheriting_constructors != 201511"
+ #endif
+ 
+ #ifndef __cpp_ref_qualifiers
+ #  error "__cpp_ref_qualifiers"
+ #elif __cpp_ref_qualifiers != 200710
+ #  error "__cpp_ref_qualifiers != 200710"
+ #endif
+ 
+ #ifndef __cpp_alias_templates
+ #  error "__cpp_alias_templates"
+ #elif __cpp_alias_templates != 200704
+ #  error "__cpp_alias_templates != 200704"
+ #endif
+ 
+ #ifndef __cpp_threadsafe_static_init
+ #  error "__cpp_threadsafe_static_init"
+ #elif __cpp_threadsafe_static_init != 200806
+ #  error "__cpp_threadsafe_static_init != 200806"
+ #endif
+ 
+ //  C++14 features:
+ 
+ #ifndef __cpp_binary_literals
+ #  error "__cpp_binary_literals"
+ #elif __cpp_binary_literals != 201304
+ #  error "__cpp_binary_literals != 201304"
+ #endif
+ 
+ #ifndef __cpp_init_captures
+ #  error "__cpp_init_captures"
+ #elif __cpp_init_captures != 201803
+ #  error "__cpp_init_captures != 201803"
+ #endif
+ 
+ #ifndef __cpp_generic_lambdas
+ #  error "__cpp_generic_lambdas"
+ #elif __cpp_generic_lambdas != 201707
+ #  error "__cpp_generic_lambdas != 201707"
+ #endif
+ 
+ #ifndef __cpp_constexpr
+ #  error "__cpp_constexpr"
+ #elif __cpp_constexpr != 202406L
+ #  error "__cpp_constexpr != 202406L"
+ #endif
+ 
+ #ifndef __cpp_decltype_auto
+ #  error "__cpp_decltype_auto"
+ #elif __cpp_decltype_auto != 201304
+ #  error "__cpp_decltype_auto != 201304"
+ #endif
+ 
+ #ifndef __cpp_return_type_deduction
+ #  error "__cpp_return_type_deduction"
+ #elif __cpp_return_type_deduction != 201304
+ #  error "__cpp_return_type_deduction != 201304"
+ #endif
+ 
+ #ifndef __cpp_aggregate_nsdmi
+ #  error "__cpp_aggregate_nsdmi"
+ #elif __cpp_aggregate_nsdmi != 201304
+ #  error "__cpp_aggregate_nsdmi != 201304"
+ #endif
+ 
+ #ifndef __cpp_variable_templates
+ #  error "__cpp_variable_templates"
+ #elif __cpp_variable_templates != 201304
+ #  error "__cpp_variable_templates != 201304"
+ #endif
+ 
+ #ifndef __cpp_digit_separators
+ #  error "__cpp_digit_separators"
+ #elif __cpp_digit_separators != 201309
+ #  error "__cpp_digit_separators != 201309"
+ #endif
+ 
+ #ifndef __cpp_sized_deallocation
+ #  error "__cpp_sized_deallocation"
+ #elif __cpp_sized_deallocation != 201309
+ #  error "__cpp_sized_deallocation != 201309"
+ #endif
+ 
+ //  GNU VLA support:
+ 
+ #ifndef __cpp_runtime_arrays
+ #  error "__cpp_runtime_arrays"
+ #elif __cpp_runtime_arrays != 198712
+ #  error "__cpp_runtime_arrays != 198712"
+ #endif
+ 
+ //  C++11 attributes:
+ 
+ #ifdef __has_cpp_attribute
+ #  if ! __has_cpp_attribute(noreturn)
+ #    error "__has_cpp_attribute(noreturn)"
+ #  elif __has_cpp_attribute(noreturn) != 200809
+ #    error "__has_cpp_attribute(noreturn) != 200809"
+ #  endif
+ #else
+ #  error "__has_cpp_attribute"
+ #endif
+ 
+ //  Attribute carries_dependency not in yet.
+ //#ifdef __has_cpp_attribute
+ //#  if ! __has_cpp_attribute(carries_dependency)
+ //#    error "__has_cpp_attribute(carries_dependency)"
+ //#  elif __has_cpp_attribute(carries_dependency) != 200809
+ //#    error "__has_cpp_attribute(carries_dependency) != 200809"
+ //#  endif
+ //#else
+ //#  error "__has_cpp_attribute"
+ //#endif
+ 
+ //  C++14 attributes:
+ 
+ #ifdef __has_cpp_attribute
+ #  if ! __has_cpp_attribute(deprecated)
+ #    error "__has_cpp_attribute(deprecated)"
+ #  elif __has_cpp_attribute(deprecated) != 201309
+ #    error "__has_cpp_attribute(deprecated) != 201309"
+ #  endif
+ #else
+ #  error "__has_cpp_attribute"
+ #endif
+ 
+ //  Include checks:
+ 
+ //  Check for __has_include macro.
+ #ifndef __has_include
+ #  error "__has_include"
+ #endif
+ 
+ //  Try known bracket header (use operator).
+ #if __has_include (<complex>)
+ #else
+ #  error "<complex>"
+ #endif
+ 
+ //  Define and use a macro to invoke the operator.
+ #define sluggo(TXT) __has_include(TXT)
+ 
+ #if sluggo(<complex>)
+ #else
+ #  error "<complex>"
+ #endif
+ 
+ #if ! sluggo(<complex>)
+ #  error "<complex>"
+ #else
+ #endif
+ 
+ //  Quoted complex.h should find at least the bracket version.
+ #if __has_include("complex.h")
+ #else
+ #  error "complex.h"
+ #endif
+ 
+ //  Try known local quote header.
+ #if __has_include("complex_literals.h")
+ #else
+ #  error "\"complex_literals.h\""
+ #endif
+ 
+ //  Try nonexistent bracket header.
+ #if __has_include(<stuff>)
+ #  error "<stuff>"
+ #else
+ #endif
+ 
+ //  Try nonexistent quote header.
+ #if __has_include("phlegm")
+ #  error "\"phlegm\""
+ #else
+ #endif
+ 
+ //  Test __has_include_next.
+ #if __has_include("phoobhar.h")
+ #  include "phoobhar.h"
+ #else
+ #  error "__has_include(\"phoobhar.h\")"
+ #endif
+ 
+ //  Try a macro.
+ #define COMPLEX_INC "complex.h"
+ #if __has_include(COMPLEX_INC)
+ #else
+ #  error COMPLEX_INC
+ #endif
+ 
+ //  Realistic use of __has_include.
+ #if __has_include(<array>)
+ #  define STD_ARRAY 1
+ #  include <array>
+   template<typename _Tp, std::size_t _Num>
+     using array = std::array<_Tp, _Num>;
+ #elif __has_include(<tr1/array>)
+ #  define TR1_ARRAY 1
+ #  include <tr1/array>
+   template<typename _Tp, std::size_t _Num>
+     typedef std::tr1::array<_Tp, _Num> array;
+ #endif
+ 
+ // C++17 features:
+ 
+ #ifndef __cpp_unicode_characters
+ #  error "__cpp_unicode_characters"
+ #elif __cpp_unicode_characters != 201411
+ #  error "__cpp_unicode_characters != 201411"
+ #endif
+ 
+ #ifndef __cpp_static_assert
+ #  error "__cpp_static_assert"
+ #elif __cpp_static_assert != 202306
+ #  error "__cpp_static_assert != 202306"
+ #endif
+ 
+ #ifndef __cpp_namespace_attributes
+ #  error "__cpp_namespace_attributes"
+ #elif __cpp_namespace_attributes != 201411
+ #  error "__cpp_namespace_attributes != 201411"
+ #endif
+ 
+ #ifndef __cpp_enumerator_attributes
+ #  error "__cpp_enumerator_attributes"
+ #elif __cpp_enumerator_attributes != 201411
+ #  error "__cpp_enumerator_attributes != 201411"
+ #endif
+ 
+ #ifndef __cpp_nested_namespace_definitions
+ #  error "__cpp_nested_namespace_definitions"
+ #elif __cpp_nested_namespace_definitions != 201411
+ #  error "__cpp_nested_namespace_definitions != 201411"
+ #endif
+ 
+ #ifndef __cpp_fold_expressions
+ #  error "__cpp_fold_expressions"
+ #elif __cpp_fold_expressions != 201603
+ #  error "__cpp_fold_expressions != 201603"
+ #endif
+ 
+ #ifndef __cpp_nontype_template_args
+ #  error "__cpp_nontype_template_args"
+ #elif __cpp_nontype_template_args != 201911
+ #  error "__cpp_nontype_template_args != 201911"
+ #endif
+ 
+ #ifndef __cpp_hex_float
+ #  error "__cpp_hex_float"
+ #elif __cpp_hex_float != 201603
+ #  error "__cpp_hex_float != 201603"
+ #endif
+ 
+ #ifndef __cpp_aggregate_bases
+ #  error "__cpp_aggregate_bases"
+ #elif __cpp_aggregate_bases != 201603
+ #  error "__cpp_aggregate_bases != 201603"
+ #endif
+ 
+ #ifndef __cpp_deduction_guides
+ #  error "__cpp_deduction_guides"
+ #elif __cpp_deduction_guides != 202207
+ #  error "__cpp_deduction_guides != 202207"
+ #endif
+ 
+ #ifndef __cpp_if_constexpr
+ #  error "__cpp_if_constexpr"
+ #elif __cpp_if_constexpr != 201606
+ #  error "__cpp_if_constexpr != 201606"
+ #endif
+ 
+ #ifndef __cpp_aligned_new
+ #  error "__cpp_aligned_new"
+ #elif __cpp_aligned_new != 201606
+ #  error "__cpp_aligned_new != 201606"
+ #endif
+ 
+ #ifndef __cpp_template_auto
+ #  error "__cpp_template_auto"
+ #elif __cpp_template_auto != 201606
+ #  error "__cpp_template_auto != 201606"
+ #endif
+ 
+ #ifndef __cpp_inline_variables
+ #  error "__cpp_inline_variables"
+ #elif __cpp_inline_variables != 201606
+ #  error "__cpp_inline_variables != 201606"
+ #endif
+ 
+ #ifndef __cpp_capture_star_this
+ #  error "__cpp_capture_star_this"
+ #elif __cpp_capture_star_this != 201603
+ #  error "__cpp_capture_star_this != 201603"
+ #endif
+ 
+ #ifndef __cpp_noexcept_function_type
+ #  error "__cpp_noexcept_function_type"
+ #elif __cpp_noexcept_function_type != 201510
+ #  error "__cpp_noexcept_function_type != 201510"
+ #endif
+ 
+ #ifndef __cpp_structured_bindings
+ #  error "__cpp_structured_bindings"
+ #elif __cpp_structured_bindings != 202411
+ #  error "__cpp_structured_bindings != 202411"
+ #endif
+ 
+ #ifndef __cpp_template_template_args
+ #  error "__cpp_template_template_args"
+ #elif __cpp_template_template_args != 201611
+ #  error "__cpp_template_template_args != 201611"
+ #endif
+ 
+ #ifndef __cpp_variadic_using
+ #  error "__cpp_variadic_using"
+ #elif __cpp_variadic_using != 201611
+ #  error "__cpp_variadic_using != 201611"
+ #endif
+ 
+ #ifndef __cpp_guaranteed_copy_elision
+ #  error "__cpp_guaranteed_copy_elision"
+ #elif __cpp_guaranteed_copy_elision != 201606
+ #  error "__cpp_guaranteed_copy_elision != 201606"
+ #endif
+ 
+ #ifndef __cpp_nontype_template_parameter_auto
+ #  error "__cpp_nontype_template_parameter_auto"
+ #elif __cpp_nontype_template_parameter_auto != 201606
+ #  error "__cpp_nontype_template_parameter_auto != 201606"
+ #endif
+ 
+ // C++20 features:
+ 
+ #ifndef __cpp_conditional_explicit
+ #  error "__cpp_conditional_explicit"
+ #elif __cpp_conditional_explicit != 201806
+ #  error "__cpp_conditional_explicit != 201806"
+ #endif
+ 
+ #ifndef __cpp_nontype_template_parameter_class
+ #  error "__cpp_nontype_template_parameter_class"
+ #elif __cpp_nontype_template_parameter_class != 201806
+ #  error "__cpp_nontype_template_parameter_class != 201806"
+ #endif
+ 
+ #ifndef __cpp_impl_destroying_delete
+ #  error "__cpp_impl_destroying_delete"
+ #elif __cpp_impl_destroying_delete != 201806
+ #  error "__cpp_impl_destroying_delete != 201806"
+ #endif
+ 
+ #ifndef __cpp_constinit
+ #  error "__cpp_constinit"
+ #elif __cpp_constinit != 201907
+ #  error "__cpp_constinit != 201907"
+ #endif
+ 
+ #ifndef __cpp_constexpr_dynamic_alloc
+ #  error "__cpp_constexpr_dynamic_alloc"
+ #elif __cpp_constexpr_dynamic_alloc != 201907
+ #  error "__cpp_constexpr_dynamic_alloc != 201907"
+ #endif
+ 
+ #ifndef __cpp_aggregate_paren_init
+ #  error "__cpp_aggregate_paren_init"
+ #elif __cpp_aggregate_paren_init != 201902
+ #  error "__cpp_aggregate_paren_init != 201902"
+ #endif
+ 
+ #ifndef __cpp_char8_t
+ #  error "__cpp_char8_t"
+ #elif __cpp_char8_t != 202207
+ #  error "__cpp_char8_t != 202207"
+ #endif
+ 
+ #ifndef __cpp_designated_initializers
+ #  error "__cpp_designated_initializers"
+ #elif __cpp_designated_initializers != 201707
+ #  error "__cpp_designated_initializers != 201707"
+ #endif
+ 
+ #ifndef __cpp_constexpr_in_decltype
+ #  error "__cpp_constexpr_in_decltype"
+ #elif __cpp_constexpr_in_decltype != 201711
+ #  error "__cpp_constexpr_in_decltype != 201711"
+ #endif
+ 
+ #ifndef __cpp_consteval
+ #  error "__cpp_consteval"
+ #elif __cpp_consteval != 202211L
+ #  error "__cpp_consteval != 202211L"
+ #endif
+ 
+ #ifndef __cpp_concepts
+ #  error "__cpp_concepts"
+ #elif __cpp_concepts != 202002
+ #  error "__cpp_concepts != 202002"
+ #endif
+ 
+ #ifndef __cpp_using_enum
+ #  error "__cpp_using_enum"
+ #elif __cpp_using_enum != 201907
+ #  error "__cpp_using_enum != 201907"
+ #endif
+ 
+ // C++20 attributes:
+ 
+ #ifdef __has_cpp_attribute
+ 
+ #  if ! __has_cpp_attribute(maybe_unused)
+ #    error "__has_cpp_attribute(maybe_unused)"
+ #  elif __has_cpp_attribute(maybe_unused) != 201603
+ #    error "__has_cpp_attribute(maybe_unused) != 201603"
+ #  endif
+ 
+ #  if ! __has_cpp_attribute(nodiscard)
+ #    error "__has_cpp_attribute(nodiscard)"
+ #  elif __has_cpp_attribute(nodiscard) != 201907
+ #    error "__has_cpp_attribute(nodiscard) != 201907"
+ #  endif
+ 
+ #  if ! __has_cpp_attribute(fallthrough)
+ #    error "__has_cpp_attribute(fallthrough)"
+ #  elif __has_cpp_attribute(fallthrough) != 201603
+ #    error "__has_cpp_attribute(fallthrough) != 201603"
+ #  endif
+ 
+ #  if ! __has_cpp_attribute(no_unique_address)
+ #    error "__has_cpp_attribute(no_unique_address)"
+ #  elif __has_cpp_attribute(no_unique_address) != 201803
+ #    error "__has_cpp_attribute(no_unique_address) != 201803"
+ #  endif
+ 
+ #  if ! __has_cpp_attribute(likely)
+ #    error "__has_cpp_attribute(likely)"
+ #  elif __has_cpp_attribute(likely) != 201803
+ #    error "__has_cpp_attribute(likely) != 201803"
+ #  endif
+ 
+ #  if ! __has_cpp_attribute(unlikely)
+ #    error "__has_cpp_attribute(unlikely)"
+ #  elif __has_cpp_attribute(unlikely) != 201803
+ #    error "__has_cpp_attribute(unlikely) != 201803"
+ #  endif
+ 
+ #else
+ #  error "__has_cpp_attribute"
+ #endif
+ 
+ // C++23 features:
+ 
+ #ifndef __cpp_size_t_suffix
+ #  error "__cpp_size_t_suffix"
+ #elif __cpp_size_t_suffix != 202011
+ #  error "__cpp_size_t_suffix != 202011"
+ #endif
+ 
+ #ifndef __cpp_if_consteval
+ #  error "__cpp_if_consteval"
+ #elif __cpp_if_consteval != 202106
+ #  error "__cpp_if_consteval != 202106"
+ #endif
+ 
+ #ifndef __cpp_multidimensional_subscript
+ #  error "__cpp_multidimensional_subscript"
+ #elif __cpp_multidimensional_subscript != 202211
+ #  error "__cpp_multidimensional_subscript != 202211"
+ #endif
+ 
+ #ifndef __cpp_named_character_escapes
+ #  error "__cpp_named_character_escapes"
+ #elif __cpp_named_character_escapes != 202207
+ #  error "__cpp_named_character_escapes != 202207"
+ #endif
+ 
+ #ifndef __cpp_static_call_operator
+ #  error "__cpp_static_call_operator"
+ #elif __cpp_static_call_operator != 202207
+ #  error "__cpp_static_call_operator != 202207"
+ #endif
+ 
+ #ifndef __cpp_implicit_move
+ #  error "__cpp_implicit_move"
+ #elif __cpp_implicit_move != 202207
+ #  error "__cpp_implicit_move != 202207"
+ #endif
+ 
+ #ifndef __cpp_explicit_this_parameter
+ #  error "__cpp_explicit_this_parameter"
+ #elif __cpp_explicit_this_parameter != 202110
+ #  error "__cpp_explicit_this_parameter != 202110"
+ #endif
+ 
+ #ifndef __cpp_auto_cast
+ #  error "__cpp_auto_cast"
+ #elif __cpp_auto_cast != 202110
+ #  error "__cpp_auto_cast != 202110"
+ #endif
+ 
+ // C++23 attributes:
+ 
+ #ifdef __has_cpp_attribute
+ #  if ! __has_cpp_attribute(assume)
+ #    error "__has_cpp_attribute(assume)"
+ #  elif __has_cpp_attribute(assume) != 202207
+ #    error "__has_cpp_attribute(assume) != 202207"
+ #  endif
+ #else
+ #  error "__has_cpp_attribute"
+ #endif
+ 
+ // C++26 features:
+ 
+ #ifndef __cpp_placeholder_variables
+ #  error "__cpp_placeholder_variables"
+ #elif __cpp_placeholder_variables != 202306
+ #  error "__cpp_placeholder_variables != 202306"
+ #endif
+ 
+ #ifndef __cpp_deleted_function
+ #  error "__cpp_deleted_function"
+ #elif __cpp_deleted_function != 202403
+ #  error "__cpp_deleted_function != 202403"
+ #endif
+ 
+ #ifndef __cpp_variadic_friend
+ #  error "__cpp_variadic_friend"
+ #elif __cpp_variadic_friend != 202403
+ #  error "__cpp_variadic_friend != 202403"
+ #endif
+ 
+ #ifndef __cpp_pack_indexing
+ #  error "__cpp_pack_indexing"
+ #elif __cpp_pack_indexing != 202311
+ #  error "__cpp_pack_indexing != 202311"
+ #endif
+ 
+ #ifndef __cpp_pp_embed
+ #  error "__cpp_pp_embed"
+ #elif __cpp_pp_embed != 202502
+ #  error "__cpp_pp_embed != 202502"
+ #endif
+ 
+ #ifndef __cpp_constexpr_virtual_inheritance
+ #  error "__cpp_constexpr_virtual_inheritance"
+ #elif __cpp_constexpr_virtual_inheritance != 202506
+ #  error "__cpp_constexpr_virtual_inheritance != 202506"
+ #endif
+ 
+ #ifndef __cpp_constexpr_exceptions
+ #  error "__cpp_constexpr_exceptions"
+ #elif __cpp_constexpr_exceptions != 202411
+ #  error "__cpp_constexpr_exceptions != 202411"
+ #endif
+ 
+ #ifndef __cpp_expansion_statements
+ #  error "__cpp_expansion_statements"
+ #elif __cpp_expansion_statements != 202506
+ #  error "__cpp_expansion_statements != 202506"
+ #endif
+ 
+ #ifndef __cpp_trivial_union
+ #  error "__cpp_trivial_union"
+ #elif __cpp_trivial_union != 202502
+ #  error "__cpp_trivial_union != 202502"
+ #endif
diff -Nrcpad gcc-17-20260614/gcc/testsuite/g++.dg/cpp2a/lambda-targ33.C gcc-17-20260621/gcc/testsuite/g++.dg/cpp2a/lambda-targ33.C
*** gcc-17-20260614/gcc/testsuite/g++.dg/cpp2a/lambda-targ33.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/g++.dg/cpp2a/lambda-targ33.C	Sun Jun 21 22:32:08 2026
***************
*** 0 ****
--- 1,24 ----
+ // PR c++/125408
+ // { dg-do compile { target c++20 } }
+ 
+ struct Role {
+     long id;
+ };
+ 
+ template <typename T> T Obj;
+ template<int... I> struct A { };
+ void sink(...);
+ 
+ template <auto Ptr, typename Table>
+ constexpr int find_member_index() {
+   constexpr auto& t = Obj<Table>;
+   []<int... Idx>(A<Idx...>) {
+     sink([]() {
+       using T1 = decltype(&(t.*Ptr));
+       return Idx;
+     }() ...);
+   }(A<1,2>{});
+   return 42;
+ }
+ 
+ auto i = find_member_index<&Role::id, Role>();
diff -Nrcpad gcc-17-20260614/gcc/testsuite/g++.dg/cpp2a/lambda-targ34.C gcc-17-20260621/gcc/testsuite/g++.dg/cpp2a/lambda-targ34.C
*** gcc-17-20260614/gcc/testsuite/g++.dg/cpp2a/lambda-targ34.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/g++.dg/cpp2a/lambda-targ34.C	Sun Jun 21 22:32:08 2026
***************
*** 0 ****
--- 1,31 ----
+ // PR c++/125408
+ // { dg-do compile { target c++20 } }
+ 
+ struct Role {
+   long id;
+ };
+ 
+ template <typename T>
+ struct StaticObj {
+   inline static T obj;
+ };
+ 
+ template<int... I> struct A { };
+ 
+ template <auto Ptr, typename Table>
+ constexpr int find_member_index() {
+   constexpr auto& t = StaticObj<Table>::obj;
+ 
+   [&]<int... Idx>(A<Idx...>) {
+     ([&]{
+       using T1 = decltype(&(t.*Ptr));
+       auto p = &(t.*Ptr);
+       return Idx;
+     }(), ...);
+   }(A<0,1>{});
+   return 42;
+ }
+ 
+ auto p = find_member_index<&Role::id, Role>();
+ 
+ int main() {}
diff -Nrcpad gcc-17-20260614/gcc/testsuite/g++.dg/pr125854.C gcc-17-20260621/gcc/testsuite/g++.dg/pr125854.C
*** gcc-17-20260614/gcc/testsuite/g++.dg/pr125854.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/g++.dg/pr125854.C	Sun Jun 21 22:32:08 2026
***************
*** 0 ****
--- 1,30 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -Wno-stringop-overread -std=c++11" } */
+ 
+ int *__distance___last;
+ long move___trans_tmp_9;
+ void move(int *__first, int *__result) {
+   move___trans_tmp_9 = __distance___last - __first;
+   if (__builtin_expect(move___trans_tmp_9, true))
+     __builtin_memmove(__result, __first, move___trans_tmp_9);
+ }
+ struct SmallVectorTemplateCommon {
+   void operator[](long);
+ };
+ struct SmallVectorTemplateBase : SmallVectorTemplateCommon {};
+ void erase(int *CI) { move(CI + 1, CI); }
+ struct : SmallVectorTemplateBase {
+ } FindInOperandList_Ops;
+ int Op, ReassociatePassOptimizeAdd___trans_tmp_1;
+ unsigned FindInOperandList(unsigned i) {
+   for (unsigned j = i + 1;;)
+     if (FindInOperandList_Ops[j], Op)
+       return j;
+ }
+ void ReassociatePassOptimizeAdd() {
+   for (unsigned i;; ++i) {
+     FindInOperandList(i);
+     erase(&ReassociatePassOptimizeAdd___trans_tmp_1 + i);
+   }
+ }
+ 
diff -Nrcpad gcc-17-20260614/gcc/testsuite/g++.dg/reflect/can_substitute3.C gcc-17-20260621/gcc/testsuite/g++.dg/reflect/can_substitute3.C
*** gcc-17-20260614/gcc/testsuite/g++.dg/reflect/can_substitute3.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/g++.dg/reflect/can_substitute3.C	Sun Jun 21 22:32:09 2026
***************
*** 0 ****
--- 1,10 ----
+ // PR c++/125764
+ // { dg-do compile { target c++26 } }
+ // { dg-additional-options "-freflection" }
+ 
+ #include <meta>
+ 
+ template <typename T>
+ struct S {};
+ 
+ static_assert(can_substitute(^^S, {^^int&()}));
diff -Nrcpad gcc-17-20260614/gcc/testsuite/g++.dg/reflect/expr17.C gcc-17-20260621/gcc/testsuite/g++.dg/reflect/expr17.C
*** gcc-17-20260614/gcc/testsuite/g++.dg/reflect/expr17.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/g++.dg/reflect/expr17.C	Sun Jun 21 22:32:09 2026
***************
*** 0 ****
--- 1,7 ----
+ // PR c++/125759
+ // { dg-do compile { target c++26 } }
+ // { dg-additional-options "-freflection" }
+ 
+ consteval auto foo(auto&&... xs) { return (^^xs, ...); }
+ constexpr auto r1 = foo (0);
+ constexpr auto r2 = foo (0, 1u);
diff -Nrcpad gcc-17-20260614/gcc/testsuite/g++.dg/reflect/is_explicit_object_parameter2.C gcc-17-20260621/gcc/testsuite/g++.dg/reflect/is_explicit_object_parameter2.C
*** gcc-17-20260614/gcc/testsuite/g++.dg/reflect/is_explicit_object_parameter2.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/g++.dg/reflect/is_explicit_object_parameter2.C	Sun Jun 21 22:32:09 2026
***************
*** 0 ****
--- 1,17 ----
+ // { dg-do compile { target c++26 } }
+ // { dg-additional-options "-freflection" }
+ // Test std::meta::is_explicit_object_parameter.
+ 
+ #include <meta>
+ 
+ using namespace std::meta;
+ 
+ struct S {
+   void f (this S, int);
+ };
+ 
+ constexpr auto p = parameters_of (^^S::f)[0];
+ 
+ void S::f (this S, int) {}
+ 
+ static_assert (is_explicit_object_parameter (p));
diff -Nrcpad gcc-17-20260614/gcc/testsuite/g++.dg/reflect/members_of15.C gcc-17-20260621/gcc/testsuite/g++.dg/reflect/members_of15.C
*** gcc-17-20260614/gcc/testsuite/g++.dg/reflect/members_of15.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/g++.dg/reflect/members_of15.C	Sun Jun 21 22:32:09 2026
***************
*** 0 ****
--- 1,9 ----
+ // PR c++/125770
+ // { dg-do compile { target c++26 } }
+ // { dg-additional-options "-freflection" }
+ 
+ #include <meta>
+ 
+ consteval {
+     members_of(^^::, std::meta::access_context::unchecked());
+ }
diff -Nrcpad gcc-17-20260614/gcc/testsuite/g++.dg/reflect/size_of2.C gcc-17-20260621/gcc/testsuite/g++.dg/reflect/size_of2.C
*** gcc-17-20260614/gcc/testsuite/g++.dg/reflect/size_of2.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/g++.dg/reflect/size_of2.C	Sun Jun 21 22:32:09 2026
***************
*** 0 ****
--- 1,12 ----
+ // PR c++/125492
+ // { dg-do compile { target c++26 } }
+ // { dg-additional-options "-freflection" }
+ 
+ #include <meta>
+ 
+ struct S {
+   void memfn ();
+ };
+ 
+ constexpr auto a = std::meta::size_of(^^void()); // { dg-error "uncaught exception of type 'std::meta::exception'; 'what\\\(\\\)': 'reflection of function type in size_of'" }
+ constexpr auto b = std::meta::size_of(type_of(^^S::memfn)); // { dg-error "uncaught exception of type 'std::meta::exception'; 'what\\\(\\\)': 'reflection of function type in size_of'" }
diff -Nrcpad gcc-17-20260614/gcc/testsuite/g++.dg/tree-ssa/mult-negate-zeroone-1.C gcc-17-20260621/gcc/testsuite/g++.dg/tree-ssa/mult-negate-zeroone-1.C
*** gcc-17-20260614/gcc/testsuite/g++.dg/tree-ssa/mult-negate-zeroone-1.C	Sun Jun 14 22:32:10 2026
--- gcc-17-20260621/gcc/testsuite/g++.dg/tree-ssa/mult-negate-zeroone-1.C	Sun Jun 21 22:32:09 2026
*************** long f2 (long x, long y) { return (long)
*** 8,12 ****
  unsigned f3 (unsigned x, unsigned y) { return (x > 5u) * -(unsigned) (y > 5u); }
  int f4 (int x, int y) { return -(y > 5) * (x > 5); }
  
! // { dg-final { scan-tree-dump-not " \* " "optimized" } }
  // { dg-final { scan-tree-dump-times " & " 4 "optimized" } }
--- 8,12 ----
  unsigned f3 (unsigned x, unsigned y) { return (x > 5u) * -(unsigned) (y > 5u); }
  int f4 (int x, int y) { return -(y > 5) * (x > 5); }
  
! // { dg-final { scan-tree-dump-not { \* } "optimized" } }
  // { dg-final { scan-tree-dump-times " & " 4 "optimized" } }
diff -Nrcpad gcc-17-20260614/gcc/testsuite/g++.target/riscv/zicfilp-thunk.C gcc-17-20260621/gcc/testsuite/g++.target/riscv/zicfilp-thunk.C
*** gcc-17-20260614/gcc/testsuite/g++.target/riscv/zicfilp-thunk.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/g++.target/riscv/zicfilp-thunk.C	Sun Jun 21 22:32:09 2026
***************
*** 0 ****
--- 1,36 ----
+ /* Test RISC-V Zicfilp C++ thunk LPAD.  */
+ /* { dg-do compile { target { riscv64*-*-* } } } */
+ /* { dg-options "-O2 -march=rv64gc_zicfilp -mabi=lp64d -fcf-protection=none -fcf-protection=branch" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" "-g" "-flto" } } */
+ /* { dg-final { check-function-bodies "**" "" {\.align|lpad} } } */
+ 
+ class Base1 {
+ public:
+   virtual int method1 (int x) { return x + 1; }
+   int data1;
+ };
+ 
+ class Base2 {
+ public:
+   virtual int method2 (int x) { return x + 2; }
+   int data2;
+ };
+ 
+ class Derived : public Base1, public Base2 {
+ public:
+   virtual int method2 (int x) override { return x + 10; }
+ };
+ 
+ Derived global_derived;
+ 
+ int call_method2 (Base2 *p)
+ {
+   return p->method2 (42);
+ }
+ 
+ /*
+ ** _ZThn16_N7Derived7method2Ei:
+ **	\.align	2
+ **	lpad	\d+
+ **	...
+ */
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.c-torture/execute/builtins/memcpy-chk.c gcc-17-20260621/gcc/testsuite/gcc.c-torture/execute/builtins/memcpy-chk.c
*** gcc-17-20260614/gcc/testsuite/gcc.c-torture/execute/builtins/memcpy-chk.c	Sun Jun 14 22:32:10 2026
--- gcc-17-20260621/gcc/testsuite/gcc.c-torture/execute/builtins/memcpy-chk.c	Sun Jun 21 22:32:09 2026
*************** test2_sub (long *buf3, char *buf4, char
*** 146,152 ****
       call.  */
  
    /* buf3 points to an unknown object, so __memcpy_chk should not be done.  */
!   if (memcpy ((char *) buf3 + 4, buf5, n + 6) != (char *) buf1 + 4
        || memcmp (buf1, "aBcdRSTUVWklmnopq\0", 19))
      abort ();
  
--- 146,152 ----
       call.  */
  
    /* buf3 points to an unknown object, so __memcpy_chk should not be done.  */
!   if (memcpy ((char *) buf3 + 4, buf5, 6) != (char *) buf1 + 4
        || memcmp (buf1, "aBcdRSTUVWklmnopq\0", 19))
      abort ();
  
*************** test2_sub (long *buf3, char *buf4, char
*** 158,164 ****
        || i != 3)
      abort ();
  
!   if (memcpy ((char *) buf3 + 14, buf6, n + 2) != (char *) buf1 + 14
        || memcmp (buf1, "aBcdRSTUVWkSmnrsq\0", 19))
      abort ();
  
--- 158,164 ----
        || i != 3)
      abort ();
  
!   if (memcpy ((char *) buf3 + 14, buf6, 2) != (char *) buf1 + 14
        || memcmp (buf1, "aBcdRSTUVWkSmnrsq\0", 19))
      abort ();
  
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.c-torture/execute/builtins/memmove-chk.c gcc-17-20260621/gcc/testsuite/gcc.c-torture/execute/builtins/memmove-chk.c
*** gcc-17-20260614/gcc/testsuite/gcc.c-torture/execute/builtins/memmove-chk.c	Sun Jun 14 22:32:10 2026
--- gcc-17-20260621/gcc/testsuite/gcc.c-torture/execute/builtins/memmove-chk.c	Sun Jun 21 22:32:09 2026
*************** test2_sub (long *buf3, char *buf4, char
*** 149,155 ****
       call.  */
  
    /* buf3 points to an unknown object, so __memmove_chk should not be done.  */
!   if (memmove ((char *) buf3 + 4, buf5, n + 6) != (char *) buf1 + 4
        || memcmp (buf1, "aBcdRSTUVWklmnopq\0", 19))
      abort ();
  
--- 149,155 ----
       call.  */
  
    /* buf3 points to an unknown object, so __memmove_chk should not be done.  */
!   if (memmove ((char *) buf3 + 4, buf5, 6) != (char *) buf1 + 4
        || memcmp (buf1, "aBcdRSTUVWklmnopq\0", 19))
      abort ();
  
*************** test2_sub (long *buf3, char *buf4, char
*** 161,167 ****
        || i != 3)
      abort ();
  
!   if (memmove ((char *) buf3 + 14, buf6, n + 2) != (char *) buf1 + 14
        || memcmp (buf1, "aBcdRSTUVWkSmnrsq\0", 19))
      abort ();
  
--- 161,167 ----
        || i != 3)
      abort ();
  
!   if (memmove ((char *) buf3 + 14, buf6, 2) != (char *) buf1 + 14
        || memcmp (buf1, "aBcdRSTUVWkSmnrsq\0", 19))
      abort ();
  
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.c-torture/execute/builtins/strncat-chk.c gcc-17-20260621/gcc/testsuite/gcc.c-torture/execute/builtins/strncat-chk.c
*** gcc-17-20260614/gcc/testsuite/gcc.c-torture/execute/builtins/strncat-chk.c	Sun Jun 14 22:32:10 2026
--- gcc-17-20260621/gcc/testsuite/gcc.c-torture/execute/builtins/strncat-chk.c	Sun Jun 21 22:32:09 2026
*************** test1 (void)
*** 67,86 ****
      abort ();
    strcat_disallowed = 0;
  
-   /* These __strncat_chk calls should be optimized into __strcat_chk,
-      as strlen (src) <= len.  */
-   strcpy (dst, s1);
-   if (strncat (dst, "foo", 3) != dst || strcmp (dst, "hello worldfoo"))
-     abort ();
-   strcpy (dst, s1);
-   if (strncat (dst, "foo", 100) != dst || strcmp (dst, "hello worldfoo"))
-     abort ();
-   strcpy (dst, s1);
-   if (strncat (dst, s1, 100) != dst || strcmp (dst, "hello worldhello world"))
-     abort ();
-   if (chk_calls != 3)
-     abort ();
- 
    chk_calls = 0;
    /* The following calls have side-effects in dest, so are not checked.  */
    strcpy (dst, s1); d2 = dst;
--- 67,72 ----
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.dg/Wreturn-local-addr-9.c gcc-17-20260621/gcc/testsuite/gcc.dg/Wreturn-local-addr-9.c
*** gcc-17-20260614/gcc/testsuite/gcc.dg/Wreturn-local-addr-9.c	Sun Jun 14 22:32:10 2026
--- gcc-17-20260621/gcc/testsuite/gcc.dg/Wreturn-local-addr-9.c	Sun Jun 21 22:32:09 2026
*************** struct S* g (int i)
*** 44,50 ****
       }
  
       which leads to:  */
!   return p;         /* { dg-bogus "may return address of local variable" "" { xfail *-*-* } } */
  
    /* Whereas as -O2 the pass sees:
  
--- 44,50 ----
       }
  
       which leads to:  */
!   return p;
  
    /* Whereas as -O2 the pass sees:
  
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.dg/builtin-dynamic-object-size-4.c gcc-17-20260621/gcc/testsuite/gcc.dg/builtin-dynamic-object-size-4.c
*** gcc-17-20260614/gcc/testsuite/gcc.dg/builtin-dynamic-object-size-4.c	Sun Jun 14 22:32:10 2026
--- gcc-17-20260621/gcc/testsuite/gcc.dg/builtin-dynamic-object-size-4.c	Sun Jun 21 22:32:09 2026
***************
*** 1,6 ****
--- 1,7 ----
  /* { dg-do run } */
  /* { dg-options "-O2 -Wno-stringop-overread" } */
  /* { dg-additional-options "-DSKIP_STRNDUP" { target { ! strndup } } } */
+ /* { dg-xfail-run-if "PTA now triggers PR123160" { "*-*-*" } } */
  
  #define __builtin_object_size __builtin_dynamic_object_size
  #include "builtin-object-size-4.c"
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.dg/builtin-object-size-4.c gcc-17-20260621/gcc/testsuite/gcc.dg/builtin-object-size-4.c
*** gcc-17-20260614/gcc/testsuite/gcc.dg/builtin-object-size-4.c	Sun Jun 14 22:32:10 2026
--- gcc-17-20260621/gcc/testsuite/gcc.dg/builtin-object-size-4.c	Sun Jun 21 22:32:09 2026
***************
*** 1,6 ****
--- 1,7 ----
  /* { dg-do run } */
  /* { dg-options "-O2 -Wno-stringop-overread" } */
  /* { dg-additional-options "-DSKIP_STRNDUP" { target { ! strndup } } } */
+ /* { dg-xfail-run-if "PTA now triggers PR123160" { "*-*-*" } } */
  
  #include "builtin-object-size-common.h"
  
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.dg/counted-by-unary.c gcc-17-20260621/gcc/testsuite/gcc.dg/counted-by-unary.c
*** gcc-17-20260614/gcc/testsuite/gcc.dg/counted-by-unary.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.dg/counted-by-unary.c	Sun Jun 21 22:32:09 2026
***************
*** 0 ****
--- 1,32 ----
+ /* Verify that unary operators that rvalue-convert a counted_by-annotated
+    pointer access do not ICE.  The original PR123569 fix suppressed the
+    .ACCESS_WITH_SIZE wrapper creation for ++/-- (which keep an lvalue);
+    the rvalue-consuming ops (!, -, +) still receive the wrapper and must
+    strip it in build_unary_op.  */
+ /* { dg-do run } */
+ /* { dg-options "-std=c99" } */
+ 
+ struct s {
+     int n;
+     char *p __attribute__((__counted_by__(n)));
+ };
+ 
+ int test_not (struct s *o)    { return !o->p; }
+ __INTPTR_TYPE__ test_neg (struct s *o)   { return -(__INTPTR_TYPE__)o->p; }
+ __INTPTR_TYPE__ test_plus (struct s *o)  { return +(__INTPTR_TYPE__)o->p; }
+ 
+ extern void abort (void);
+ 
+ int main (void) {
+     char buf[4] = { 0 };
+     struct s s = { .n = 4, .p = buf };
+     if (test_not (&s) != 0)  abort ();    /* p is non-null */
+ 
+     struct s e = { .n = 0, .p = (void*)0 };
+     if (test_not (&e) != 1)  abort ();    /* p is null */
+ 
+     /* test_neg / test_plus must just compile and run without ICE.  */
+     (void) test_neg (&s);
+     (void) test_plus (&s);
+     return 0;
+ }
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro.c gcc-17-20260621/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro.c
*** gcc-17-20260614/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro.c	Sun Jun 14 22:32:10 2026
--- gcc-17-20260621/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro.c	Sun Jun 21 22:32:09 2026
***************
*** 1,7 ****
  /* Test to make sure the mcaro info includes a start file command for the main source */
  /* { dg-do compile } */
  /* { dg-options "-g3 -gdwarf -dA -fverbose-asm" } */
! /* { dg-final { scan-assembler "Start new file"  { xfail *-*-darwin23* } } } */
  
  #define ADD(x) (M + x)
  
--- 1,7 ----
  /* Test to make sure the mcaro info includes a start file command for the main source */
  /* { dg-do compile } */
  /* { dg-options "-g3 -gdwarf -dA -fverbose-asm" } */
! /* { dg-final { scan-assembler "Start new file"  { xfail *-*-darwin2[3-5]* } } } */
  
  #define ADD(x) (M + x)
  
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro2.c gcc-17-20260621/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro2.c
*** gcc-17-20260614/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro2.c	Sun Jun 14 22:32:10 2026
--- gcc-17-20260621/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro2.c	Sun Jun 21 22:32:09 2026
***************
*** 1,7 ****
  /* Test to make sure the macro info includes the predefined macros with line number 0.  */
  /* { dg-do compile } */
  /* { dg-options "-g3 -gdwarf -dA -fverbose-asm" } */
! /* { dg-final { scan-assembler "At line number 0" { xfail *-*-darwin23* } } } */
  
  #define FOO 1
  int i;
--- 1,7 ----
  /* Test to make sure the macro info includes the predefined macros with line number 0.  */
  /* { dg-do compile } */
  /* { dg-options "-g3 -gdwarf -dA -fverbose-asm" } */
! /* { dg-final { scan-assembler "At line number 0" { xfail *-*-darwin2[3-5]* } } } */
  
  #define FOO 1
  int i;
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.dg/ipa/pr124128.c gcc-17-20260621/gcc/testsuite/gcc.dg/ipa/pr124128.c
*** gcc-17-20260614/gcc/testsuite/gcc.dg/ipa/pr124128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.dg/ipa/pr124128.c	Sun Jun 21 22:32:10 2026
***************
*** 0 ****
--- 1,19 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fno-early-inlining" } */
+ 
+ typedef int blasint;
+ void blas_level1_thread(long);
+ void cblas_sscal(blasint, float, float, blasint incx) {
+   blas_level1_thread(incx);
+ }
+ blasint c_api_check_saxpby_n;
+ float c_api_check_saxpby_beta;
+ long labs(long);
+ static void c_api_check_saxpby(blasint incy) {
+   blasint incy_abs = labs(incy);
+   cblas_sscal(c_api_check_saxpby_n, c_api_check_saxpby_beta, 0, incy_abs);
+ }
+ void __ctest_saxpby_c_api_inc_x_2_inc_y_1_N_100_run() {
+   c_api_check_saxpby(1);
+   c_api_check_saxpby(2);
+ }
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.dg/loop-versioning-13.c gcc-17-20260621/gcc/testsuite/gcc.dg/loop-versioning-13.c
*** gcc-17-20260614/gcc/testsuite/gcc.dg/loop-versioning-13.c	Sun Jun 14 22:32:11 2026
--- gcc-17-20260621/gcc/testsuite/gcc.dg/loop-versioning-13.c	Sun Jun 21 22:32:10 2026
*************** g5 (int stepx, int n)
*** 105,109 ****
      }
  }
  
! /* { dg-final { scan-tree-dump-times {want to version containing loop} 10 "lversion" } } */
! /* { dg-final { scan-tree-dump-times {versioned this loop} 10 "lversion" } } */
--- 105,113 ----
      }
  }
  
! /* { dg-final { scan-tree-dump-times {want to version containing loop} 10 "lversion" { target lp64 } } } */
! /* { dg-final { scan-tree-dump-times {want to version containing loop} 10 "lversion" { xfail { ilp32 } } } } */
! /* { dg-final { scan-tree-dump-times {want to version containing loop} 9 "lversion" { target ilp32 } } } */
! /* { dg-final { scan-tree-dump-times {versioned this loop} 10 "lversion" { target lp64 } } } */
! /* { dg-final { scan-tree-dump-times {versioned this loop} 10 "lversion" { xfail ilp32 } } } */
! /* { dg-final { scan-tree-dump-times {versioned this loop} 9 "lversion" { target ilp32 } } } */
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.dg/lto/toplevel-extended-asm-1_0.c gcc-17-20260621/gcc/testsuite/gcc.dg/lto/toplevel-extended-asm-1_0.c
*** gcc-17-20260614/gcc/testsuite/gcc.dg/lto/toplevel-extended-asm-1_0.c	Sun Jun 14 22:32:11 2026
--- gcc-17-20260621/gcc/testsuite/gcc.dg/lto/toplevel-extended-asm-1_0.c	Sun Jun 21 22:32:10 2026
***************
*** 1,5 ****
--- 1,6 ----
  /* { dg-lto-do link } */
  /* { dg-lto-options {{-O2 -flto -flto-partition=1to1 -no-pie} } } */
+ /* { dg-skip-if "SPARC relocation overflow" { sparc*-*-solaris2* && lp64 } } */
  
  void asm_fn();
  void asm_fn_used();
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.dg/lto/toplevel-simple-asm-1_0.c gcc-17-20260621/gcc/testsuite/gcc.dg/lto/toplevel-simple-asm-1_0.c
*** gcc-17-20260614/gcc/testsuite/gcc.dg/lto/toplevel-simple-asm-1_0.c	Sun Jun 14 22:32:11 2026
--- gcc-17-20260621/gcc/testsuite/gcc.dg/lto/toplevel-simple-asm-1_0.c	Sun Jun 21 22:32:10 2026
***************
*** 1,5 ****
--- 1,6 ----
  /* { dg-lto-do link } */
  /* { dg-lto-options { {-O2 -flto -flto-toplevel-asm-heuristics -flto-partition=1to1 -no-pie} {-O2 -flto -flto-toplevel-asm-heuristics -flto-partition=max -no-pie} {-O2 -flto -flto-toplevel-asm-heuristics -flto-partition=cache -no-pie}} } */
+ /* { dg-skip-if "SPARC relocation overflow" { sparc*-*-solaris2* && lp64 } } */
  
  void asm_fn();
  void asm_fn_used();
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.dg/pr109393.c gcc-17-20260621/gcc/testsuite/gcc.dg/pr109393.c
*** gcc-17-20260614/gcc/testsuite/gcc.dg/pr109393.c	Sun Jun 14 22:32:11 2026
--- gcc-17-20260621/gcc/testsuite/gcc.dg/pr109393.c	Sun Jun 21 22:32:10 2026
*************** int bar(int *a, int j)
*** 20,24 ****
    return (&a[j + 1] - 2) == &a[k];
  }
  
! /* The pattern is not applied on ilp32 targets (PR116845).  */
! /* { dg-final { scan-tree-dump-times "return 1;" 3 "optimized" { xfail { ilp32 } } } } */
--- 20,23 ----
    return (&a[j + 1] - 2) == &a[k];
  }
  
! /* { dg-final { scan-tree-dump-times "return 1;" 3 "optimized" } } */
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.dg/pr125405-bitint.c gcc-17-20260621/gcc/testsuite/gcc.dg/pr125405-bitint.c
*** gcc-17-20260614/gcc/testsuite/gcc.dg/pr125405-bitint.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.dg/pr125405-bitint.c	Sun Jun 21 22:32:10 2026
***************
*** 0 ****
--- 1,36 ----
+ /* PR tree-optimization/125405 */
+ /* { dg-do compile { target bitint } } */
+ /* { dg-options "-O2 -fdump-tree-optimized" } */
+ 
+ unsigned _BitInt(32)
+ sext8_bitint32 (unsigned _BitInt(32) x)
+ {
+   return (x & (unsigned _BitInt(32)) 0x7f)
+          - (x & (unsigned _BitInt(32)) 0x80);
+ }
+ 
+ unsigned _BitInt(32)
+ sext16_bitint32 (unsigned _BitInt(32) x)
+ {
+   return (x & (unsigned _BitInt(32)) 0x7fff)
+          - (x & (unsigned _BitInt(32)) 0x8000);
+ }
+ 
+ unsigned _BitInt(32)
+ no_sext_bad_masks (unsigned _BitInt(32) x)
+ {
+   return (x & (unsigned _BitInt(32)) 0x7e)
+          - (x & (unsigned _BitInt(32)) 0x80);
+ }
+ 
+ unsigned _BitInt(32)
+ no_sext_bad_pair (unsigned _BitInt(32) x)
+ {
+   return (x & (unsigned _BitInt(32)) 0xff)
+          - (x & (unsigned _BitInt(32)) 0x80);
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "\\(signed char\\)" 1 "optimized" } } */
+ /* { dg-final { scan-tree-dump-times "\\(signed short\\)" 1 "optimized" } } */
+ /* { dg-final { scan-tree-dump " & 126" "optimized" } } */
+ /* { dg-final { scan-tree-dump " & 255" "optimized" } } */
\ No newline at end of file
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.dg/pr125641.c gcc-17-20260621/gcc/testsuite/gcc.dg/pr125641.c
*** gcc-17-20260614/gcc/testsuite/gcc.dg/pr125641.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.dg/pr125641.c	Sun Jun 21 22:32:10 2026
***************
*** 0 ****
--- 1,42 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-tree-optimized" } */
+ 
+ static int int_prec = sizeof (int) * __CHAR_BIT__ - 1;
+ 
+ int
+ max_i32 (int x, int k)
+ {
+   return x < k ? k : x;
+ }
+ 
+ int
+ min_i32 (int x, int k)
+ {
+   return x > k ? k : x;
+ }
+ 
+ _Bool
+ x_bit_ior_rshift_x (int x)
+ {
+   return (x | (x >> int_prec)) == max_i32 (x, -1);
+ }
+ 
+ _Bool
+ x_bit_ior_bit_not_rshift_x (int x)
+ {
+   return (x | ~(x >> int_prec)) == min_i32 (x, -1);
+ }
+ 
+ _Bool
+ x_bit_and_rshift_x (int x)
+ {
+   return (x & (x >> int_prec)) == min_i32 (x, 0);
+ }
+ 
+ _Bool
+ x_bit_and_bit_not_rshift_x (int x)
+ {
+   return (x & ~(x >> int_prec)) == max_i32 (x, 0);
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "return 1;" 4 "optimized" } } */
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.dg/pr125707-1.c gcc-17-20260621/gcc/testsuite/gcc.dg/pr125707-1.c
*** gcc-17-20260614/gcc/testsuite/gcc.dg/pr125707-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.dg/pr125707-1.c	Sun Jun 21 22:32:10 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-tree-optimized" } */
+ 
+ long long
+ rshift_bit_not_long_x_x (long long x)
+ {
+   return (~x) >> x;
+ }
+ 
+ /* xfailed because gimplifier introduces a truncation.  */
+ /* { dg-final { scan-tree-dump-times "return -1;" 1 "optimized" { xfail *-*-* } } } */
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.dg/pr125707.c gcc-17-20260621/gcc/testsuite/gcc.dg/pr125707.c
*** gcc-17-20260614/gcc/testsuite/gcc.dg/pr125707.c	Sun Jun 14 22:32:11 2026
--- gcc-17-20260621/gcc/testsuite/gcc.dg/pr125707.c	Sun Jun 21 22:32:10 2026
*************** rshift_bit_not_int_x_x (int x)
*** 7,16 ****
    return (~x) >> x;
  }
  
! long
! rshift_bit_not_long_x_x (long x)
! {
!   return (~x) >> x;
! }
! 
! /* { dg-final { scan-tree-dump-times "return -1;" 2 "optimized" } } */
--- 7,10 ----
    return (~x) >> x;
  }
  
! /* { dg-final { scan-tree-dump-times "return -1;" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.dg/pr125737.c gcc-17-20260621/gcc/testsuite/gcc.dg/pr125737.c
*** gcc-17-20260614/gcc/testsuite/gcc.dg/pr125737.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.dg/pr125737.c	Sun Jun 21 22:32:10 2026
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-tree-optimized" } */
+ 
+ int
+ f (unsigned short a, unsigned short b) {
+   int aa = a;
+   int bb = b;
+   int c = aa % bb;
+   return c < bb;
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "return 1;" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.dg/pr125756.c gcc-17-20260621/gcc/testsuite/gcc.dg/pr125756.c
*** gcc-17-20260614/gcc/testsuite/gcc.dg/pr125756.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.dg/pr125756.c	Sun Jun 21 22:32:10 2026
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-tree-optimized" } */
+ 
+ bool
+ f1 (unsigned short aa)
+ {
+   int a = aa;
+   bool t = a != 0;
+   int tu = t;
+   return a < tu;
+ }
+ 
+ bool
+ f2 (unsigned short a)
+ {
+   bool t = a != 0;
+   unsigned short tu = t;
+   return a < tu;
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "return 0;" 2 "optimized" } } */
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.dg/pr125790-1.c gcc-17-20260621/gcc/testsuite/gcc.dg/pr125790-1.c
*** gcc-17-20260614/gcc/testsuite/gcc.dg/pr125790-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.dg/pr125790-1.c	Sun Jun 21 22:32:10 2026
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do run { target int32 } } */
+ /* { dg-options "-O1" } */
+ 
+ 
+ __attribute__((noipa))
+ long long
+ rshift (long long x)
+ {
+   return (~x) >> (unsigned char)x;
+ }
+ 
+ int
+ main(void)
+ {
+   if (rshift(0xffffffff0000003fLL) != 0)
+     __builtin_abort();
+   return 0;
+ }
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.dg/pr125857-1.c gcc-17-20260621/gcc/testsuite/gcc.dg/pr125857-1.c
*** gcc-17-20260614/gcc/testsuite/gcc.dg/pr125857-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.dg/pr125857-1.c	Sun Jun 21 22:32:10 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ /* PR tree-optimization/125857 */
+ 
+ /* Make sure we don't ICE when returning the address to a local variable
+    and using it in the other function.  */
+ int *a, **b = &a, c;
+ int *d() {
+   int e, *f = &e;
+   for (; c; c++)
+     __builtin_abort();
+   if (!b)
+     __builtin_abort();
+   return f; /* { dg-warning "function may return address of local variable" } */
+ }
+ int main() { *b = d(); }
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.dg/spaceship_int_variants.c gcc-17-20260621/gcc/testsuite/gcc.dg/spaceship_int_variants.c
*** gcc-17-20260614/gcc/testsuite/gcc.dg/spaceship_int_variants.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.dg/spaceship_int_variants.c	Sun Jun 21 22:32:10 2026
***************
*** 0 ****
--- 1,101 ----
+ /* { dg-do compile } */
+ /* { dg-require-effective-target spaceship } */
+ /* { dg-options "-O2 -fdump-tree-optimized" } */
+ /* { dg-final { scan-tree-dump-times {\.SPACESHIP \([^,]+, [^,]+, -1\)} 24 optimized } } */
+ 
+ int sp1 (int a, int b)
+ {
+     return a < b ? -1 : a > b ? 1 : 0;
+ }
+ int sp1_1 (int a, int b)
+ {
+     return a < b ? -1 : a == b ? 0 : 1;
+ }
+ int sp1_2 (int a, int b)
+ {
+     return a < b ? -1 : a != b ? 1 : 0;
+ }
+ int sp1_3 (int a, int b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ int sp2 (int a, int b)
+ {
+     return a == b ? 0 : a > b ? 1 : -1;
+ }
+ int sp2_1 (int a, int b)
+ {
+     return a == b ? 0 : a < b ? -1 : 1;
+ }
+ int sp2_2 (int a, int b)
+ {
+     return a == b ? 0 : a >= b ? 1 : -1;
+ }
+ int sp2_3 (int a, int b)
+ {
+     return a == b ? 0 : a <= b ? -1 : 1;
+ }
+ int sp3 (int a, int b)
+ {
+     return a != b ? (a > b ? 1 : -1) : 0;
+ }
+ int sp3_1 (int a, int b)
+ {
+     return a != b ? (a < b ? -1 : 1) : 0;
+ }
+ int sp3_2 (int a, int b)
+ {
+     return a != b ? (a >= b ? 1 : -1) : 0;
+ }
+ int sp3_3 (int a, int b)
+ {
+     return a != b ? (a <= b ? -1 : 1) : 0;
+ }
+ int sp4 (int a, int b)
+ {
+     return a > b ? 1 : a == b ? 0 : -1;
+ }
+ int sp4_1 (int a, int b)
+ {
+     return a > b ? 1 : a < b ? -1 : 0;
+ }
+ int sp4_2 (int a, int b)
+ {
+     return a > b ? 1 : a != b ? -1 : 0;
+ }
+ int sp4_3 (int a, int b)
+ {
+     return a > b ? 1 : a >= b ? 0 : -1;
+ }
+ int sp5 (int a, int b)
+ {
+     return a <= b ? (a == b ? 0 : -1) : 1;
+ }
+ int sp5_1 (int a, int b)
+ {
+     return a <= b ? (a >= b ? 0 : -1) : 1;
+ }
+ int sp5_2 (int a, int b)
+ {
+     return a <= b ? (a != b ? -1 : 0) : 1;
+ }
+ int sp5_3 (int a, int b)
+ {
+     return a <= b ? (a < b ? -1 : 0) : 1;
+ }
+ int sp6 (int a, int b)
+ {
+     return a >= b ? (a == b ? 0 : 1) : -1;
+ }
+ int sp6_1 (int a, int b)
+ {
+     return a >= b ? (a != b ? 1 : 0) : -1;
+ }
+ int sp6_2 (int a, int b)
+ {
+     return a >= b ? (a <= b ? 0 : 1) : -1;
+ }
+ int sp6_3 (int a, int b)
+ {
+     return a >= b ? (a > b ? 1 : 0) : -1;
+ }
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.dg/spaceship_mixed_variants.c gcc-17-20260621/gcc/testsuite/gcc.dg/spaceship_mixed_variants.c
*** gcc-17-20260614/gcc/testsuite/gcc.dg/spaceship_mixed_variants.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.dg/spaceship_mixed_variants.c	Sun Jun 21 22:32:10 2026
***************
*** 0 ****
--- 1,324 ----
+ /* { dg-do compile } */
+ /* { dg-require-effective-target spaceship } */
+ /* { dg-options "-O2 -fdump-tree-optimized" } */
+ /* { dg-final { scan-tree-dump-times {\.SPACESHIP \([^,]+, [^,]+, -1\)} 64 optimized } } */
+ 
+ signed char sp1_1 (signed char a, signed char b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ signed char sp1_2 (signed char a, short b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ signed char sp1_3 (signed char a, int b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ signed char sp1_4 (signed char a, long long b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ signed char sp1_5 (short a, signed char b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ signed char sp1_6 (short a, short b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ signed char sp1_7 (short a, int b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ signed char sp1_8 (short a, long long b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ signed char sp1_9 (int a, signed char b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ signed char sp1_10 (int a, short b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ signed char sp1_11 (int a, int b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ signed char sp1_12 (int a, long long b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ signed char sp1_13 (long long a, signed char b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ signed char sp1_14 (long long a, short b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ signed char sp1_15 (long long a, int b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ signed char sp1_16 (long long a, long long b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ short sp2_1 (signed char a, signed char b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ short sp2_2 (signed char a, short b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ short sp2_3 (signed char a, int b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ short sp2_4 (signed char a, long long b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ short sp2_5 (short a, signed char b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ short sp2_6 (short a, short b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ short sp2_7 (short a, int b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ short sp2_8 (short a, long long b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ short sp2_9 (int a, signed char b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ short sp2_10 (int a, short b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ short sp2_11 (int a, int b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ short sp2_12 (int a, long long b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ short sp2_13 (long long a, signed char b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ short sp2_14 (long long a, short b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ short sp2_15 (long long a, int b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ short sp2_16 (long long a, long long b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ int sp3_1 (signed char a, signed char b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ int sp3_2 (signed char a, short b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ int sp3_3 (signed char a, int b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ int sp3_4 (signed char a, long long b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ int sp3_5 (short a, signed char b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ int sp3_6 (short a, short b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ int sp3_7 (short a, int b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ int sp3_8 (short a, long long b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ int sp3_9 (int a, signed char b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ int sp3_10 (int a, short b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ int sp3_11 (int a, int b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ int sp3_12 (int a, long long b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ int sp3_13 (long long a, signed char b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ int sp3_14 (long long a, short b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ int sp3_15 (long long a, int b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ int sp3_16 (long long a, long long b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ long long sp4_1 (signed char a, signed char b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ long long sp4_2 (signed char a, short b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ long long sp4_3 (signed char a, int b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ long long sp4_4 (signed char a, long long b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ long long sp4_5 (short a, signed char b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ long long sp4_6 (short a, short b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ long long sp4_7 (short a, int b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ long long sp4_8 (short a, long long b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ long long sp4_9 (int a, signed char b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ long long sp4_10 (int a, short b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ long long sp4_11 (int a, int b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ long long sp4_12 (int a, long long b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ long long sp4_13 (long long a, signed char b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ long long sp4_14 (long long a, short b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ long long sp4_15 (long long a, int b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ long long sp4_16 (long long a, long long b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.dg/spaceship_uint_variants.c gcc-17-20260621/gcc/testsuite/gcc.dg/spaceship_uint_variants.c
*** gcc-17-20260614/gcc/testsuite/gcc.dg/spaceship_uint_variants.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.dg/spaceship_uint_variants.c	Sun Jun 21 22:32:10 2026
***************
*** 0 ****
--- 1,101 ----
+ /* { dg-do compile } */
+ /* { dg-require-effective-target spaceship } */
+ /* { dg-options "-O2 -fdump-tree-optimized" } */
+ /* { dg-final { scan-tree-dump-times {\.SPACESHIP \([^,]+, [^,]+, 1\)} 24 optimized } } */
+ 
+ int sp1 (unsigned int a, unsigned int b)
+ {
+     return a < b ? -1 : a > b ? 1 : 0;
+ }
+ int sp1_1 (unsigned int a, unsigned int b)
+ {
+     return a < b ? -1 : a == b ? 0 : 1;
+ }
+ int sp1_2 (unsigned int a, unsigned int b)
+ {
+     return a < b ? -1 : a != b ? 1 : 0;
+ }
+ int sp1_3 (unsigned int a, unsigned int b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ int sp2 (unsigned int a, unsigned int b)
+ {
+     return a == b ? 0 : a > b ? 1 : -1;
+ }
+ int sp2_1 (unsigned int a, unsigned int b)
+ {
+     return a == b ? 0 : a < b ? -1 : 1;
+ }
+ int sp2_2 (unsigned int a, unsigned int b)
+ {
+     return a == b ? 0 : a >= b ? 1 : -1;
+ }
+ int sp2_3 (unsigned int a, unsigned int b)
+ {
+     return a == b ? 0 : a <= b ? -1 : 1;
+ }
+ int sp3 (unsigned int a, unsigned int b)
+ {
+     return a != b ? (a > b ? 1 : -1) : 0;
+ }
+ int sp3_1 (unsigned int a, unsigned int b)
+ {
+     return a != b ? (a < b ? -1 : 1) : 0;
+ }
+ int sp3_2 (unsigned int a, unsigned int b)
+ {
+     return a != b ? (a >= b ? 1 : -1) : 0;
+ }
+ int sp3_3 (unsigned int a, unsigned int b)
+ {
+     return a != b ? (a <= b ? -1 : 1) : 0;
+ }
+ int sp4 (unsigned int a, unsigned int b)
+ {
+     return a > b ? 1 : a == b ? 0 : -1;
+ }
+ int sp4_1 (unsigned int a, unsigned int b)
+ {
+     return a > b ? 1 : a < b ? -1 : 0;
+ }
+ int sp4_2 (unsigned int a, unsigned int b)
+ {
+     return a > b ? 1 : a != b ? -1 : 0;
+ }
+ int sp4_3 (unsigned int a, unsigned int b)
+ {
+     return a > b ? 1 : a >= b ? 0 : -1;
+ }
+ int sp5 (unsigned int a, unsigned int b)
+ {
+     return a <= b ? (a == b ? 0 : -1) : 1;
+ }
+ int sp5_1 (unsigned int a, unsigned int b)
+ {
+     return a <= b ? (a >= b ? 0 : -1) : 1;
+ }
+ int sp5_2 (unsigned int a, unsigned int b)
+ {
+     return a <= b ? (a != b ? -1 : 0) : 1;
+ }
+ int sp5_3 (unsigned int a, unsigned int b)
+ {
+     return a <= b ? (a < b ? -1 : 0) : 1;
+ }
+ int sp6 (unsigned int a, unsigned int b)
+ {
+     return a >= b ? (a == b ? 0 : 1) : -1;
+ }
+ int sp6_1 (unsigned int a, unsigned int b)
+ {
+     return a >= b ? (a != b ? 1 : 0) : -1;
+ }
+ int sp6_2 (unsigned int a, unsigned int b)
+ {
+     return a >= b ? (a <= b ? 0 : 1) : -1;
+ }
+ int sp6_3 (unsigned int a, unsigned int b)
+ {
+     return a >= b ? (a > b ? 1 : 0) : -1;
+ }
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.dg/torture/pr125730.c gcc-17-20260621/gcc/testsuite/gcc.dg/torture/pr125730.c
*** gcc-17-20260614/gcc/testsuite/gcc.dg/torture/pr125730.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.dg/torture/pr125730.c	Sun Jun 21 22:32:10 2026
***************
*** 0 ****
--- 1,40 ----
+ /* { dg-do run } */
+ 
+ char *key;
+ char *value;
+ char **name_regex = &key;
+ 
+ __attribute__ ((noipa)) void
+ dict_get_item_ref (char ***result)
+ {
+   *result = &value;
+ }
+ 
+ __attribute__ ((noinline)) static void
+ parse_keyword_dict (char ***argnames, char ***values,
+ 		    int num_posargs, int num_kwargs)
+ {
+   char ***first_kw_arg = argnames + num_posargs;
+   char ***name = first_kw_arg;
+ 
+   while (*name && num_kwargs > 0)
+     {
+       char **fetched_value;
+       dict_get_item_ref (&fetched_value);
+       values[name - argnames] = fetched_value;
+       name++;
+     }
+ }
+ 
+ int
+ main ()
+ {
+   char **fetched_values[] = { 0 };
+   char **argnames[] = { name_regex, 0 };
+   parse_keyword_dict (argnames, fetched_values, 0, 1);
+ 
+   if (fetched_values[0] != &value)
+     __builtin_abort ();
+ 
+   return 0;
+ }
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.dg/torture/pr125786.c gcc-17-20260621/gcc/testsuite/gcc.dg/torture/pr125786.c
*** gcc-17-20260614/gcc/testsuite/gcc.dg/torture/pr125786.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.dg/torture/pr125786.c	Sun Jun 21 22:32:10 2026
***************
*** 0 ****
--- 1,30 ----
+ /* { dg-do run } */
+ 
+ #define length 16
+ typedef int type;
+ typedef type v8i64 __attribute__((vector_size(sizeof(type)*length)));
+ v8i64 g6, g27;
+ _Bool main_c14;
+ 
+ __attribute__((noipa))
+ static
+ void f(v8i64 *a)
+ {
+   for(int i =0;i<length;i++)
+     if ((*a)[i] != -1)
+       __builtin_abort();
+ }
+ 
+ int main()
+ {
+   if (main_c14) goto lbl_br43;
+ lbl_bf7:
+   g6 = 0 <= g27;
+   g27 = g27 <= g27;
+   g27 = g6 > g27;
+ lbl_br43:
+   g6 = g6 | g27;
+   if (main_c14) goto lbl_bf7;
+   g6 = g6 * g27 == 0;
+   f(&g6);
+ }
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.dg/torture/pr125872.c gcc-17-20260621/gcc/testsuite/gcc.dg/torture/pr125872.c
*** gcc-17-20260614/gcc/testsuite/gcc.dg/torture/pr125872.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.dg/torture/pr125872.c	Sun Jun 21 22:32:10 2026
***************
*** 0 ****
--- 1,7 ----
+ /* { dg-additional-options "-fno-tree-dce" } */
+ 
+ void
+ foo(float f)
+ {
+   for(;;) f *= (char)255;
+ }
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.dg/tree-ssa/factor_op_phi-load-offsets-1.c gcc-17-20260621/gcc/testsuite/gcc.dg/tree-ssa/factor_op_phi-load-offsets-1.c
*** gcc-17-20260614/gcc/testsuite/gcc.dg/tree-ssa/factor_op_phi-load-offsets-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.dg/tree-ssa/factor_op_phi-load-offsets-1.c	Sun Jun 21 22:32:10 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-tree-phiopt-details" } */
+ 
+ /* Support offsets that are different but the same base. */
+ int test2(const int* data, bool b) {
+     if (b)
+         return data[1];
+     return data[0];
+ }
+ /* { dg-final { scan-tree-dump-times "was created for the index." 1 "phiopt2" } } */
+ /* { dg-final { scan-tree-dump-times "changed to factor out load from" 1 "phiopt2" } } */
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.dg/tree-ssa/factor_op_phi-load-offsets-2.c gcc-17-20260621/gcc/testsuite/gcc.dg/tree-ssa/factor_op_phi-load-offsets-2.c
*** gcc-17-20260614/gcc/testsuite/gcc.dg/tree-ssa/factor_op_phi-load-offsets-2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.dg/tree-ssa/factor_op_phi-load-offsets-2.c	Sun Jun 21 22:32:10 2026
***************
*** 0 ****
--- 1,13 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-tree-phiopt-details" } */
+ 
+ /* Support different offsets and different bases.  */
+ 
+ int test2(const int* data, const int *data1, bool b) {
+     if (b)
+         return data1[1];
+     return data[2];
+ }
+ /* { dg-final { scan-tree-dump-times "was created due to different offsets" 1 "phiopt2" } } */
+ /* { dg-final { scan-tree-dump-times "changed to factor out load from" 1 "phiopt2" } } */
+ /* { dg-final { scan-tree-dump-times "was created for the pointers" 1 "phiopt2" } } */
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.dg/tree-ssa/factor_op_phi-load-offsets-3.c gcc-17-20260621/gcc/testsuite/gcc.dg/tree-ssa/factor_op_phi-load-offsets-3.c
*** gcc-17-20260614/gcc/testsuite/gcc.dg/tree-ssa/factor_op_phi-load-offsets-3.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.dg/tree-ssa/factor_op_phi-load-offsets-3.c	Sun Jun 21 22:32:10 2026
***************
*** 0 ****
--- 1,13 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-tree-phiopt-details" } */
+ 
+ /* Support of non-0 offsets. */
+ 
+ int test2(const int* data, const int *data1, bool b) {
+     if (b)
+         return data1[1];
+     return data[1];
+ }
+ /* { dg-final { scan-tree-dump-not "was created due to different offsets" "phiopt2" } } */
+ /* { dg-final { scan-tree-dump-times "changed to factor out load from" 1 "phiopt2" } } */
+ /* { dg-final { scan-tree-dump-times "was created for the pointers" 1 "phiopt2" } } */
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.dg/tree-ssa/factor_op_phi-load-stores-1.c gcc-17-20260621/gcc/testsuite/gcc.dg/tree-ssa/factor_op_phi-load-stores-1.c
*** gcc-17-20260614/gcc/testsuite/gcc.dg/tree-ssa/factor_op_phi-load-stores-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.dg/tree-ssa/factor_op_phi-load-stores-1.c	Sun Jun 21 22:32:10 2026
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-tree-phiopt-details" } */
+ int f(int *a, int *c, int *d, int e)
+ {
+   int t;
+   if (e)
+   {
+     *a = 1;
+     t = *c;
+   }
+   else
+   {
+     *a = 0;
+     t = *d;
+   }
+   return t;
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "changed to factor out load from" 1 "phiopt2" } } */
+ /* { dg-final { scan-tree-dump-times "factoring out stores" 1 "phiopt2" } } */
+ 
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.dg/tree-ssa/pr125405.c gcc-17-20260621/gcc/testsuite/gcc.dg/tree-ssa/pr125405.c
*** gcc-17-20260614/gcc/testsuite/gcc.dg/tree-ssa/pr125405.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.dg/tree-ssa/pr125405.c	Sun Jun 21 22:32:10 2026
***************
*** 0 ****
--- 1,24 ----
+ /* PR tree-optimization/125405 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-tree-optimized" } */
+ 
+ typedef unsigned long xlen_t;
+ 
+ xlen_t
+ sext8_hd (xlen_t x)
+ {
+   return (x & 0x7fUL) - (x & 0x80UL);
+ }
+ 
+ xlen_t
+ sext16_hd (xlen_t x)
+ {
+   return (x & 0x7fffUL) - (x & 0x8000UL);
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "\\(signed char\\)" 1 "optimized" } } */
+ /* { dg-final { scan-tree-dump-times "\\(signed short\\)" 1 "optimized" } } */
+ /* { dg-final { scan-tree-dump-not " & 127" "optimized" } } */
+ /* { dg-final { scan-tree-dump-not " & 128" "optimized" } } */
+ /* { dg-final { scan-tree-dump-not " & 32767" "optimized" } } */
+ /* { dg-final { scan-tree-dump-not " & 32768" "optimized" } } */
\ No newline at end of file
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.dg/tree-ssa/scc-diamond-1.c gcc-17-20260621/gcc/testsuite/gcc.dg/tree-ssa/scc-diamond-1.c
*** gcc-17-20260614/gcc/testsuite/gcc.dg/tree-ssa/scc-diamond-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.dg/tree-ssa/scc-diamond-1.c	Sun Jun 21 22:32:10 2026
***************
*** 0 ****
--- 1,40 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-tree-phiopt-details" } */
+ 
+ /* PR tree-optimization/125557.  The loop selects, from the just-read byte, the
+    offset of the next load and advances a pointer -- a data-dependent load
+    address recurrence (the loaded value feeds its own next address).  Such a
+    loop cannot vectorise, so sink_common_computations_to_bb commons the two
+    conditional loads into one reg-offset load and if-converts the diamond into
+    branchless selects.  In a loop this fires only at the late sink, after the
+    vectorisers have run (gated on fold_before_rtl_expansion_p), so a
+    vectorisable loop is vectorised first and left alone.  */
+ 
+ #include <stddef.h>
+ #include <stdint.h>
+ 
+ const uint8_t *
+ advance (const uint8_t *ip, size_t tag, const uint8_t *end)
+ {
+   while (ip < end)
+     {
+       size_t type = tag & 3;
+       if (type == 0)
+ 	{
+ 	  size_t nlt = (tag >> 2) + 1;
+ 	  tag = ip[nlt];
+ 	  ip += nlt + 1;
+ 	}
+       else
+ 	{
+ 	  tag = ip[type];
+ 	  ip += type + 1;
+ 	}
+     }
+   return ip;
+ }
+ 
+ /* The diamond is if-converted (branchless): one selected-offset load remains.  */
+ /* { dg-final { scan-tree-dump-times "changed to factor out load from" 1 "phiopt4" } } */
+ /* { dg-final { scan-tree-dump-times "changed to factor operation out from" 1 "phiopt4" } } */
+ /* { dg-final { scan-tree-dump-times "changed to factor operation out from" 2 "phiopt1" } } */
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.dg/tree-ssa/scc-diamond-3.c gcc-17-20260621/gcc/testsuite/gcc.dg/tree-ssa/scc-diamond-3.c
*** gcc-17-20260614/gcc/testsuite/gcc.dg/tree-ssa/scc-diamond-3.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.dg/tree-ssa/scc-diamond-3.c	Sun Jun 21 22:32:10 2026
***************
*** 0 ****
--- 1,51 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fstrict-aliasing -fdump-tree-phiopt-details" } */
+ 
+ /* PR tree-optimization/125557.  Alias-type merging in factor_out_conditional_load.
+ 
+    Same data-dependent load-address recurrence as scc-diamond-1.c, but the two
+    arms read the next tag through pointers with *different* TBAA alias types: a
+    plain "const unsigned char" load in one arm and a may_alias load in the other.
+    The two MEM_REFs have the same value type (unsigned char) but different
+    operand-1 (alias-ptr) types.  Rather than refusing to common loads with
+    mismatched alias types, factor_out_conditional_load merges them the way
+    get_alias_type_for_stmts does: since the types are incompatible the combined
+    load is given ptr_type_node (the alias-everything type) and the dependence
+    clique/base are dropped, so it conservatively conflicts with any store either
+    original arm could.  The two conditional loads are therefore commoned into a
+    single reg-offset load and the diamond is if-converted.  */
+ 
+ #include <stddef.h>
+ #include <stdint.h>
+ 
+ typedef uint8_t alias_u8 __attribute__((may_alias));
+ 
+ const uint8_t *
+ advance (const uint8_t *ip, size_t tag, const uint8_t *end)
+ {
+   while (ip < end)
+     {
+       size_t type = tag & 3;
+       if (type == 0)
+ 	{
+ 	  size_t nlt = (tag >> 2) + 1;
+ 	  /* Plain alias type: operand-1 type is "const unsigned char *".  */
+ 	  tag = ip[nlt];
+ 	  ip += nlt + 1;
+ 	}
+       else
+ 	{
+ 	  /* may_alias: operand-1 type is the alias-everything pointer.  Same
+ 	     value type (unsigned char), different operand-1 type.  */
+ 	  tag = *(const alias_u8 *) (ip + type);
+ 	  ip += type + 1;
+ 	}
+     }
+   return ip;
+ }
+ 
+ /* The mismatched alias types are merged to the alias-everything type, so the
+    loads are commoned and the diamond is if-converted.  */
+ /* { dg-final { scan-tree-dump-times "changed to factor out load from" 1 "phiopt4" } } */
+ /* { dg-final { scan-tree-dump-times "changed to factor operation out from" 1 "phiopt4" } } */
+ /* { dg-final { scan-tree-dump-times "changed to factor operation out from" 2 "phiopt1" } } */
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.dg/tree-ssa/scc-diamond-4.c gcc-17-20260621/gcc/testsuite/gcc.dg/tree-ssa/scc-diamond-4.c
*** gcc-17-20260614/gcc/testsuite/gcc.dg/tree-ssa/scc-diamond-4.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.dg/tree-ssa/scc-diamond-4.c	Sun Jun 21 22:32:10 2026
***************
*** 0 ****
--- 1,23 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-tree-phiopt2-details" } */
+ 
+ /* PR tree-optimization/125557: outside any loop, a diamond that selects between
+    two loads PHI <*p, *q> is if-converted by the sink pass
+    (sink_common_computations_to_bb): the two conditional loads are commoned into
+    a single load of a run-time-selected pointer and the branch is removed.  Out
+    of any loop there is nothing to vectorise, so this fires already at the early
+    sink.  */
+ 
+ int
+ f (int *p, int *q, int c)
+ {
+   int x;
+   if (c)
+     x = *p;
+   else
+     x = *q;
+   return x;
+ }
+ 
+ /* The two arm loads collapse to a single selected-pointer load, branchless.  */
+ /* { dg-final { scan-tree-dump "changed to factor out load from COND_EXPR" "phiopt2" } } */
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.dg/vect/bb-slp-dep-oracle.c gcc-17-20260621/gcc/testsuite/gcc.dg/vect/bb-slp-dep-oracle.c
*** gcc-17-20260614/gcc/testsuite/gcc.dg/vect/bb-slp-dep-oracle.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.dg/vect/bb-slp-dep-oracle.c	Sun Jun 21 22:32:10 2026
***************
*** 0 ****
--- 1,40 ----
+ /* BB SLP must not abandon a vectorizable group when the classical (affine)
+    data-dependence test cannot analyze a runtime array subscript but the alias
+    oracle can still prove the two references do not alias.
+ 
+    The per-lane reciprocals are discovered as an SLP group, then the group is
+    torn down by vect_slp_analyze_data_ref_dependence reporting "can't determine
+    dependence" between the restrict output store and a runtime-indexed input
+    load, even though the distinct restrict objects provably do not alias.  */
+ 
+ /* { dg-do compile } */
+ /* { dg-require-effective-target vect_double } */
+ /* { dg-additional-options "-O3 -ffast-math -fno-trapping-math" } */
+ 
+ struct VA { double data[8]; };
+ struct Tensor { struct VA comp[4]; };
+ 
+ /* Opaque: the returned index is a runtime value the affine subscript test
+    cannot analyze.  */
+ unsigned __attribute__((noipa)) pick (unsigned k) { return k & 3; }
+ 
+ void f (const struct Tensor *in, double *__restrict out,
+         unsigned nq, unsigned base)
+ {
+   for (unsigned q = 0; q < nq; q++)
+     {
+       const struct VA *rho = &in[q].comp[0];     /* divisor: contiguous .data[i] */
+       double inv[8];
+       for (unsigned i = 0; i < 8; i++)
+         inv[i] = 1.0 / rho->data[i];             /* reciprocal group, reused below */
+       for (unsigned d = 0; d < 3; d++)
+         {
+           const struct VA *mom = &in[q].comp[pick (base + d)];  /* runtime-indexed numerator */
+           for (unsigned i = 0; i < 8; i++)
+             out[(q * 3 + d) * 8 + i] = mom->data[i] * inv[i];
+         }
+     }
+ }
+ 
+ /* The reciprocal group must survive the dependence check and vectorize.  */
+ /* { dg-final { scan-tree-dump "basic block part vectorized" "slp1" } } */
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.dg/vect/vect-early-break_144-pr125804.c gcc-17-20260621/gcc/testsuite/gcc.dg/vect/vect-early-break_144-pr125804.c
*** gcc-17-20260614/gcc/testsuite/gcc.dg/vect/vect-early-break_144-pr125804.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.dg/vect/vect-early-break_144-pr125804.c	Sun Jun 21 22:32:10 2026
***************
*** 0 ****
--- 1,51 ----
+ /* { dg-add-options vect_early_break } */
+ /* { dg-do run } */
+ /* { dg-require-effective-target vect_early_break_hw } */
+ /* { dg-require-effective-target vect_long } */
+ 
+ /* { dg-additional-options "-mavx512f" { target { i?86-*-* x86_64-*-* } } } */
+ /* { dg-require-effective-target avx512f_runtime { target i?86-*-* x86_64-*-* } } */
+ 
+ #include "tree-vect.h"
+ 
+ typedef struct {
+   unsigned b;
+   long long bits[2];
+ } c;
+ typedef struct {
+   c *d;
+ } e, *bitmap;
+ e f;
+ int g;
+ 
+ __attribute__((noipa))
+ int h(bitmap i) {
+   c j = *i->d;
+   unsigned k = 0, l = j.b < 4;
+   for (; l < 2; l++) {
+     long long m = j.bits[l];
+     for (; k < 64; k++) {
+       long long n = (long long)(1ull << k);
+       if (m & n)
+         goto o;
+     }
+     k = 0;
+   }
+   return 0;
+ o:
+   return 1;
+ }
+ 
+ int main() {
+ 
+   check_vect ();
+ 
+   c a = { 4, { 0, 0 } };
+   a.bits[0] = -0x7fffffffffffffffLL - 1;
+   f.d = &a;
+   g = h(&f);
+   return g == 0;
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "LOOP VECTORIZED" 1 "vect" { target { ! arm*-*-* } } } } */
+ /* { dg-final { scan-tree-dump "early break does not require epilog" "vect" { target { ! arm*-*-* } } } } */
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.misc-tests/gcov-14.c gcc-17-20260621/gcc/testsuite/gcc.misc-tests/gcov-14.c
*** gcc-17-20260614/gcc/testsuite/gcc.misc-tests/gcov-14.c	Sun Jun 14 22:32:12 2026
--- gcc-17-20260621/gcc/testsuite/gcc.misc-tests/gcov-14.c	Sun Jun 21 22:32:10 2026
*************** extern __inline int Foo ()
*** 15,21 ****
    return 0; /* count(-) */
  }
  
! int (* __attribute__ ((noinline)) Bar ()) ()
  {
    return Foo; /* count(1) */
  }
--- 15,21 ----
    return 0; /* count(-) */
  }
  
! int (* __attribute__ ((noinline,noipa)) Bar ()) ()
  {
    return Foo; /* count(1) */
  }
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.target/aarch64/avoid-store-forwarding-be-2.c gcc-17-20260621/gcc/testsuite/gcc.target/aarch64/avoid-store-forwarding-be-2.c
*** gcc-17-20260614/gcc/testsuite/gcc.target/aarch64/avoid-store-forwarding-be-2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.target/aarch64/avoid-store-forwarding-be-2.c	Sun Jun 21 22:32:11 2026
***************
*** 0 ****
--- 1,41 ----
+ /* PR rtl-optimization/123754 */
+ /* { dg-do run } */
+ /* { dg-require-effective-target aarch64_big_endian } */
+ /* { dg-require-effective-target int128 } */
+ /* { dg-options "-O2 -favoid-store-forwarding" } */
+ 
+ typedef unsigned __int128 u128;
+ 
+ union u {
+   u128 v;
+   unsigned char b[16];
+ };
+ 
+ u128 __attribute__ ((noinline))
+ foo (unsigned char x, unsigned char y, u128 init)
+ {
+   union u u;
+   u.v = init;
+   u.b[0] = x;
+   u.b[15] = y;
+   return u.v;
+ }
+ 
+ int
+ main (void)
+ {
+   u128 init = ((u128) 0xfedcba9876543210ULL << 64) | 0x0123456789abcdefULL;
+   u128 r = foo (0xAA, 0xBB, init);
+ 
+   unsigned char *p = (unsigned char *) &r;
+   unsigned char *q = (unsigned char *) &init;
+ 
+   if (p[0] != 0xAA || p[15] != 0xBB)
+     __builtin_abort ();
+ 
+   for (int i = 1; i < 15; i++)
+     if (p[i] != q[i])
+       __builtin_abort ();
+ 
+   return 0;
+ }
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.target/aarch64/pr123754.c gcc-17-20260621/gcc/testsuite/gcc.target/aarch64/pr123754.c
*** gcc-17-20260614/gcc/testsuite/gcc.target/aarch64/pr123754.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.target/aarch64/pr123754.c	Sun Jun 21 22:32:11 2026
***************
*** 0 ****
--- 1,15 ----
+ /* PR rtl-optimization/123754 */
+ /* { dg-do compile } */
+ /* { dg-require-effective-target aarch64_big_endian } */
+ /* { dg-options "-O2 -favoid-store-forwarding" } */
+ 
+ typedef __attribute__((__vector_size__(32))) int V;
+ long long i;
+ V g;
+ 
+ void
+ foo (V *v)
+ {
+   __builtin_memcpy (v, &i, 5);
+   g *= *v;
+ }
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.target/aarch64/pr125795.c gcc-17-20260621/gcc/testsuite/gcc.target/aarch64/pr125795.c
*** gcc-17-20260614/gcc/testsuite/gcc.target/aarch64/pr125795.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.target/aarch64/pr125795.c	Sun Jun 21 22:32:11 2026
***************
*** 0 ****
--- 1,47 ----
+ /* PR target/125795 */
+ /* { dg-do run } */
+ /* { dg-options "-O2 -funroll-loops" } */
+ 
+ /* This loop is vectorized with LD2 (deinterleave) and TBL (lane reversal),
+    then unrolled.  The unrolled body builds a full-width (32 FPR) early-ra
+    color group, which used to trigger a "1U << 32" undefined shift in
+    early_ra::allocate_colors.  As a result the long-lived TBL permute index
+    was wrongly allocated to the same FPR as an LD2 tuple destination and got
+    clobbered, so the result was miscomputed.  */
+ 
+ extern void abort (void);
+ 
+ #define N 256
+ 
+ static int __attribute__ ((noipa))
+ foo (void)
+ {
+   int k[N];
+   int k2[N];
+   int i;
+ 
+   for (i = 0; i < N; i++)
+     k2[i] = i;
+ 
+   for (i = 0; i < 64; i++)
+     {
+       k[i] = k2[2 * i + 0];
+       k[255 - i] = k2[2 * i + 1];
+       k[64 + i] = k2[2 * i + 128];
+       k[191 - i] = k2[2 * i + 129];
+     }
+ 
+   for (i = 0; i < N; i++)
+     if (k[i] != ((i < 128) ? (2 * i) : (511 - 2 * i)))
+       return 1;
+ 
+   return 0;
+ }
+ 
+ int
+ main (void)
+ {
+   if (foo ())
+     abort ();
+   return 0;
+ }
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.target/aarch64/scc-diamond-2.c gcc-17-20260621/gcc/testsuite/gcc.target/aarch64/scc-diamond-2.c
*** gcc-17-20260614/gcc/testsuite/gcc.target/aarch64/scc-diamond-2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.target/aarch64/scc-diamond-2.c	Sun Jun 21 22:32:11 2026
***************
*** 0 ****
--- 1,34 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -march=armv8.2-a+sve -fdump-tree-phiopt-details -fdump-tree-vect-details" } */
+ 
+ /* Counterpart to scc-diamond-1.c, showing why sink_common_computations_to_bb
+    defers in-loop if-conversion until after vectorisation.  The conditional
+    loads a[i] / b[i] are affine in the induction variable and do NOT depend on
+    any loaded value, so the loop vectorises (masked/blended contiguous loads).
+    The late-sink gate (fold_before_rtl_expansion_p) only runs after the
+    vectorisers, so the loop is vectorised first; were the diamond instead
+    if-converted into one selected-address load it would become a gather and lose
+    the cheap contiguous vectorisation.  */
+ 
+ void
+ f (int *__restrict r, const int *__restrict a, const int *__restrict b,
+    const int *__restrict c, int n)
+ {
+   for (int i = 0; i < n; i++)
+     {
+       int x;
+       if (c[i])
+ 	x = a[i];
+       else
+ 	x = b[i];
+       r[i] = x;
+     }
+ }
+ 
+ /* The loop vectorises, so by the late sink there is no scalar diamond to
+    if-convert ... */
+ /* { dg-final { scan-tree-dump-not "changed to factor out load from" "phiopt1" } } */
+ /* { dg-final { scan-tree-dump-not "changed to factor out load from" "phiopt2" } } */
+ /* { dg-final { scan-tree-dump-not "changed to factor out load from" "phiopt3" } } */
+ /* ... and it vectorises with cheap contiguous loads instead of a gather.  */
+ /* { dg-final { scan-tree-dump "LOOP VECTORIZED" "vect" } } */
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.target/aarch64/sve/pr125794.c gcc-17-20260621/gcc/testsuite/gcc.target/aarch64/sve/pr125794.c
*** gcc-17-20260614/gcc/testsuite/gcc.target/aarch64/sve/pr125794.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.target/aarch64/sve/pr125794.c	Sun Jun 21 22:32:11 2026
***************
*** 0 ****
--- 1,22 ----
+ /* { dg-do run { target aarch64_sve_hw } } */
+ /* { dg-additional-options "-O2" } */
+ 
+ /* PR target/125794: a 128-bit Advanced SIMD integer constant whose high 64
+    bits are zero (here { 0, 1, 0, 0 }) must be materialised with a 64-bit MOVI
+    that zeroes the upper half of the register.  It was wrongly emitted as a
+    replicating SVE "mov zN.d, #imm", which set the high 64 bits to a non-zero
+    value and produced wrong code.  */
+ 
+ typedef unsigned V __attribute__((__vector_size__ (32)));
+ 
+ V x;
+ 
+ int
+ main ()
+ {
+   x[5] = 1;
+   for (unsigned i = 0; i < 8; i++)
+     if (x[i] != (i == 5))
+       __builtin_abort ();
+   return 0;
+ }
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.target/aarch64/sve2/niter-convert-range.c gcc-17-20260621/gcc/testsuite/gcc.target/aarch64/sve2/niter-convert-range.c
*** gcc-17-20260614/gcc/testsuite/gcc.target/aarch64/sve2/niter-convert-range.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.target/aarch64/sve2/niter-convert-range.c	Sun Jun 21 22:32:11 2026
***************
*** 0 ****
--- 1,68 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=armv8.3-a+sve2 -fdump-tree-vect-details" } */
+ 
+ #include <stdint.h>
+ 
+ int
+ foo (char *buf, uint8_t len)
+ {
+   int x = 0;
+ 
+   for (int16_t i = 0, y = 0; i < len; i++, y = i * 10)
+     x += (int) y * (buf[i] - '0');
+ 
+   return x;
+ }
+ 
+ int
+ masked_len_foo (unsigned char *buf, uint16_t len)
+ {
+   uint16_t n = len & 255;
+   int x = 0;
+ 
+   for (int16_t i = 0, y = 0; i < n; i++, y = i * 10)
+     x += (int) y * (buf[i] - '0');
+ 
+   return x;
+ }
+ 
+ int
+ guarded_len_foo (char *buf, uint16_t len)
+ {
+   if (len > 255)
+     return 0;
+ 
+   int x = 0;
+ 
+   for (int16_t i = 0, y = 0; i < len; i++, y = i * 10)
+     x += (int) y * (buf[i] - '0');
+ 
+   return x;
+ }
+ 
+ int
+ non_value_preserving (unsigned char *buf, uint8_t len)
+ {
+   int x = 0;
+ 
+   for (int16_t i = 0, y = 0; i < (int) (int8_t) len; i++, y = i * 10)
+     x += (int) y * (buf[i] - '0');
+ 
+   return x;
+ }
+ 
+ unsigned
+ niter_convert_range_wrap (unsigned char *buf, uint8_t len)
+ {
+   unsigned x = 0;
+ 
+   for (unsigned i = 0, y = 0; i < (unsigned) len - 1; i++, y = i * 10)
+     x += y * (buf[i] - '0');
+ 
+   return x;
+ }
+ 
+ /* { dg-final { scan-tree-dump-times {bounds on difference of bases: 0 [.][.][.] 126} 3 "vect" } } */
+ /* { dg-final { scan-tree-dump-times {bounds on difference of bases: 0 [.][.][.] 254} 9 "vect" } } */
+ /* { dg-final { scan-tree-dump-times {bounds on difference of bases: -1 [.][.][.] 4294967294} 3 "vect" } } */
+ /* { dg-final { scan-tree-dump-times "loop vectorized using variable length vectors" 5 "vect" } } */
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.target/i386/c86-4g-m7-vect-load-cost-reduc.c gcc-17-20260621/gcc/testsuite/gcc.target/i386/c86-4g-m7-vect-load-cost-reduc.c
*** gcc-17-20260614/gcc/testsuite/gcc.target/i386/c86-4g-m7-vect-load-cost-reduc.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.target/i386/c86-4g-m7-vect-load-cost-reduc.c	Sun Jun 21 22:32:11 2026
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -march=c86-4g-m7 -mprefer-vector-width=512 -ffast-math -fdump-tree-vect-details" } */
+ 
+ #define N 1024
+ 
+ void foo (double *__restrict a, double *__restrict b, double *out)
+ {
+   double sum = 1.0;
+ 
+   for (int i = 0; i < N; ++i)
+     sum += a[i] * b[i];
+ 
+   out[0] = sum;
+ }
+ 
+ /* On c86-4g-m7, 512-bit memory costs should model two 256-bit operations on
+    split-regs targets.  This loop exercises the load side of that model: once
+    the normalized body cost no longer favors 64-byte vectors, the reduction
+    epilogue cost makes 32-byte vectorization preferable.  */
+ /* { dg-final { scan-tree-dump-times "optimized: loop vectorized using 32 byte vectors" 1 "vect" } } */
+ /* { dg-final { scan-tree-dump-not "optimized: loop vectorized using 64 byte vectors" "vect" } } */
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.target/i386/fabsneg-2.c gcc-17-20260621/gcc/testsuite/gcc.target/i386/fabsneg-2.c
*** gcc-17-20260614/gcc/testsuite/gcc.target/i386/fabsneg-2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.target/i386/fabsneg-2.c	Sun Jun 21 22:32:11 2026
***************
*** 0 ****
--- 1,23 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mfpmath=sse -march=skylake" } */
+ 
+ float x;
+ float y;
+ float z;
+ 
+ void foo()
+ {
+   x = -x;
+   y = -y;
+   z = -z;
+ }
+ 
+ void bar()
+ {
+   x = __builtin_fabsf(x);
+   y = __builtin_fabsf(y);
+   z = __builtin_fabsf(z);
+ }
+ 
+ /* { dg-final { scan-assembler-times "\[lL\]C0\[,(\]" 1 } } */
+ /* { dg-final { scan-assembler-times "\[lL\]C1\[,(\]" 1 } } */
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.target/i386/pr125614.c gcc-17-20260621/gcc/testsuite/gcc.target/i386/pr125614.c
*** gcc-17-20260614/gcc/testsuite/gcc.target/i386/pr125614.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.target/i386/pr125614.c	Sun Jun 21 22:32:12 2026
***************
*** 0 ****
--- 1,27 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fno-dce -fno-tree-fre -march=x86-64" } */
+ 
+ int b, c;
+ int
+ a (void)
+ {
+   char d[8];
+   int e = 0;
+   if (b)
+     goto f;
+   if (c)
+     {
+       for (int g = 0; g < 8; ++g)
+         d[g] = g;
+       a ();
+       d[0] = -d[0];
+       d[1] = -d[1];
+     f:
+       int h;
+       if (h)
+         __builtin_abort ();
+       e = d[0];
+       e = d[1] + e;
+     }
+   return e;
+ }
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.target/i386/pr125883.c gcc-17-20260621/gcc/testsuite/gcc.target/i386/pr125883.c
*** gcc-17-20260614/gcc/testsuite/gcc.target/i386/pr125883.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.target/i386/pr125883.c	Sun Jun 21 22:32:12 2026
***************
*** 0 ****
--- 1,13 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -march=x86-64" } */
+ 
+ int a, b;
+ int c[0], d[0];
+ void
+ foo (void)
+ {
+   __asm__ goto("" : "=r"(a) : : : f);
+ f:
+   for (; b; b++)
+     c[b] = d[b] = c[b] + a;
+ }
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.target/riscv/pr120811.c gcc-17-20260621/gcc/testsuite/gcc.target/riscv/pr120811.c
*** gcc-17-20260614/gcc/testsuite/gcc.target/riscv/pr120811.c	Sun Jun 14 22:32:14 2026
--- gcc-17-20260621/gcc/testsuite/gcc.target/riscv/pr120811.c	Sun Jun 21 22:32:12 2026
*************** void q() {
*** 38,41 ****
  }
  /* { dg-final { scan-rtl-dump-not "const_sum_of_two_s12" "reload" } } */
  /* { dg-final { scan-rtl-dump-not "const_sum_of_two_s12" "late_combine2" } } */
! /* { dg-final { scan-assembler "addi.*\[ats\]\[0-9\]*,sp,\[0-9\]*\n\tld\t.*,2047\(.*\).*" } } */
--- 38,41 ----
  }
  /* { dg-final { scan-rtl-dump-not "const_sum_of_two_s12" "reload" } } */
  /* { dg-final { scan-rtl-dump-not "const_sum_of_two_s12" "late_combine2" } } */
! /* { dg-final { scan-assembler "addi.*\[ats\]\[0-9\]*,sp,\[0-9\]*\n\tld\t.*,2047\\(.*\\).*" { xfail *-*-* } } } */
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.target/riscv/pr125405.c gcc-17-20260621/gcc/testsuite/gcc.target/riscv/pr125405.c
*** gcc-17-20260614/gcc/testsuite/gcc.target/riscv/pr125405.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.target/riscv/pr125405.c	Sun Jun 21 22:32:12 2026
***************
*** 0 ****
--- 1,22 ----
+ /* PR tree-optimization/125405 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=rv64gc -mabi=lp64d" } */
+ 
+ typedef unsigned long xlen_t;
+ 
+ xlen_t
+ sext8_hd (xlen_t x)
+ {
+   return (x & 0x7fUL) - (x & 0x80UL);
+ }
+ 
+ xlen_t
+ sext16_hd (xlen_t x)
+ {
+   return (x & 0x7fffUL) - (x & 0x8000UL);
+ }
+ 
+ /* { dg-final { scan-assembler-times "\\mslliw\\M" 2 } } */
+ /* { dg-final { scan-assembler-times "\\msraiw\\M" 2 } } */
+ /* { dg-final { scan-assembler-not "\\mandi\\M" } } */
+ /* { dg-final { scan-assembler-not "\\msub\\M" } } */
\ No newline at end of file
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr125478.c gcc-17-20260621/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr125478.c
*** gcc-17-20260614/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr125478.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr125478.c	Sun Jun 21 22:32:12 2026
***************
*** 0 ****
--- 1,23 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -mrvv-vector-bits=zvl -fdump-rtl-avlprop-details" } */
+ 
+ long long a;
+ long b;
+ char c[169];
+ int d;
+ 
+ int main() {
+   for (long g=0; g<13; ++g)
+     for (long h=0; h<13; ++h)
+       c[g*13 +h] = 8;
+ 
+   for (unsigned g=0; g<13; g++)
+     for (int h=0; h<13; h +=3)
+       b += (c[g*13+h]) >> c[g*13 +9];
+ 
+   a = (int)b;
+   if (a != 0)
+     __builtin_abort ();
+ }
+ 
+ /* { dg-final { scan-rtl-dump-not "Propagating AVL: \\(const_int 1 \\\[0x1\\\]\\)" "avlprop" } } */
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr125516.c gcc-17-20260621/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr125516.c
*** gcc-17-20260614/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr125516.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr125516.c	Sun Jun 21 22:32:12 2026
***************
*** 0 ****
--- 1,24 ----
+ /* { dg-do run { target riscv_v } } */
+ /* { dg-additional-options "-fdump-tree-optimized" } */
+ 
+ char a;
+ long long b;
+ short d[18][18][18][18];
+ short (*e)[18][18][18] = d;
+ 
+ int main ()
+ {
+   for (long h = 0; h < 4; ++h)
+     for (long i = 0; i < 18; ++i)
+       for (long j = 0; j < 18; ++j)
+ 	for (long k = 0; k < 18; ++k)
+ 	  d[h][i][j][k] = j;
+ 
+   for (short i = 0; i < 8; i++)
+     for (unsigned char j = 0; j < 18; j++)
+       a = e[3][i][i][j] ? e[j][i][i][3] : 0;
+ 
+   b = (int) a;
+   if (b != 0)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr125670.c gcc-17-20260621/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr125670.c
*** gcc-17-20260614/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr125670.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr125670.c	Sun Jun 21 22:32:12 2026
***************
*** 0 ****
--- 1,51 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3  -mcpu=spacemit-x60 -mabi=lp64d -w -std=gnu89" } */
+ 
+ unsigned int
+ f1 (int diff)
+ {
+   return ((unsigned int) (diff < 0 ? -diff : diff));
+ }
+ 
+ unsigned int
+ f2 (unsigned int diff)
+ {
+   return ((unsigned int) ((signed int) diff < 0 ? -diff : diff));
+ }
+ 
+ unsigned long long
+ f3 (long long diff)
+ {
+   return ((unsigned long long) (diff < 0 ? -diff : diff));
+ }
+ 
+ unsigned long long
+ f4 (unsigned long long diff)
+ {
+   return ((unsigned long long) ((signed long long) diff < 0 ? -diff : diff));
+ }
+ 
+ main ()
+ {
+   int i;
+   for (i = 0; i <= 10; i++)
+     {
+       if (f1 (i) != i)
+ 	abort ();
+       if (f1 (-i) != i)
+ 	abort ();
+       if (f2 (i) != i)
+ 	abort ();
+       if (f2 (-i) != i)
+ 	abort ();
+       if (f3 ((long long) i) != i)
+ 	abort ();
+       if (f3 ((long long) -i) != i)
+ 	abort ();
+       if (f4 ((long long) i) != i)
+ 	abort ();
+       if (f4 ((long long) -i) != i)
+ 	abort ();
+     }
+   exit (0);
+ }
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i16.c gcc-17-20260621/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i16.c
*** gcc-17-20260614/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i16.c	Sun Jun 14 22:32:14 2026
--- gcc-17-20260621/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i16.c	Sun Jun 21 22:32:12 2026
*************** DEF_VX_BINARY_CASE_3_WRAP(T, SAT_S_SUB_F
*** 23,41 ****
  DEF_VX_BINARY_CASE_3_WRAP(T, AVG_FLOOR_FUNC_WRAP(T), avg_floor, VX_BINARY_FUNC_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, AVG_CEIL_FUNC_WRAP(T), avg_ceil, VX_BINARY_FUNC_BODY_X8)
  
! /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
  /* { dg-final { scan-assembler {vrsub.vx} } } */
  /* { dg-final { scan-assembler {vand.vx} } } */
  /* { dg-final { scan-assembler {vor.vx} } } */
  /* { dg-final { scan-assembler {vxor.vx} } } */
! /* { dg-final { scan-assembler-not {vmul.vx} } } */
  /* { dg-final { scan-assembler {vdiv.vx} } } */
  /* { 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"
--- 23,41 ----
  DEF_VX_BINARY_CASE_3_WRAP(T, AVG_FLOOR_FUNC_WRAP(T), avg_floor, VX_BINARY_FUNC_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, AVG_CEIL_FUNC_WRAP(T), avg_ceil, VX_BINARY_FUNC_BODY_X8)
  
! /* { dg-final { scan-assembler {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
  /* { dg-final { scan-assembler {vrsub.vx} } } */
  /* { dg-final { scan-assembler {vand.vx} } } */
  /* { dg-final { scan-assembler {vor.vx} } } */
  /* { dg-final { scan-assembler {vxor.vx} } } */
! /* { dg-final { scan-assembler {vmul.vx} } } */
  /* { dg-final { scan-assembler {vdiv.vx} } } */
  /* { 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"
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i8.c gcc-17-20260621/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i8.c
*** gcc-17-20260614/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i8.c	Sun Jun 14 22:32:14 2026
--- gcc-17-20260621/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i8.c	Sun Jun 21 22:32:12 2026
*************** DEF_VX_BINARY_CASE_3_WRAP(T, SAT_S_SUB_F
*** 23,41 ****
  DEF_VX_BINARY_CASE_3_WRAP(T, AVG_FLOOR_FUNC_WRAP(T), avg_floor, VX_BINARY_FUNC_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, AVG_CEIL_FUNC_WRAP(T), avg_ceil, VX_BINARY_FUNC_BODY_X8)
  
! /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
  /* { dg-final { scan-assembler {vrsub.vx} } } */
  /* { dg-final { scan-assembler {vand.vx} } } */
  /* { dg-final { scan-assembler {vor.vx} } } */
  /* { dg-final { scan-assembler {vxor.vx} } } */
! /* { dg-final { scan-assembler-not {vmul.vx} } } */
  /* { dg-final { scan-assembler {vdiv.vx} } } */
  /* { 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"
--- 23,41 ----
  DEF_VX_BINARY_CASE_3_WRAP(T, AVG_FLOOR_FUNC_WRAP(T), avg_floor, VX_BINARY_FUNC_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, AVG_CEIL_FUNC_WRAP(T), avg_ceil, VX_BINARY_FUNC_BODY_X8)
  
! /* { dg-final { scan-assembler {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
  /* { dg-final { scan-assembler {vrsub.vx} } } */
  /* { dg-final { scan-assembler {vand.vx} } } */
  /* { dg-final { scan-assembler {vor.vx} } } */
  /* { dg-final { scan-assembler {vxor.vx} } } */
! /* { dg-final { scan-assembler {vmul.vx} } } */
  /* { dg-final { scan-assembler {vdiv.vx} } } */
  /* { 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"
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i16.c gcc-17-20260621/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i16.c
*** gcc-17-20260614/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i16.c	Sun Jun 14 22:32:14 2026
--- gcc-17-20260621/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i16.c	Sun Jun 21 22:32:12 2026
*************** DEF_VX_BINARY_CASE_3_WRAP(T, SAT_S_SUB_F
*** 23,41 ****
  DEF_VX_BINARY_CASE_3_WRAP(T, AVG_FLOOR_FUNC_WRAP(T), avg_floor, VX_BINARY_FUNC_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, AVG_CEIL_FUNC_WRAP(T), avg_ceil, VX_BINARY_FUNC_BODY_X8)
  
! /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
  /* { dg-final { scan-assembler {vrsub.vx} } } */
  /* { dg-final { scan-assembler {vand.vx} } } */
  /* { dg-final { scan-assembler {vor.vx} } } */
  /* { dg-final { scan-assembler {vxor.vx} } } */
! /* { dg-final { scan-assembler-not {vmul.vx} } } */
  /* { dg-final { scan-assembler {vdiv.vx} } } */
  /* { 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"
--- 23,41 ----
  DEF_VX_BINARY_CASE_3_WRAP(T, AVG_FLOOR_FUNC_WRAP(T), avg_floor, VX_BINARY_FUNC_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, AVG_CEIL_FUNC_WRAP(T), avg_ceil, VX_BINARY_FUNC_BODY_X8)
  
! /* { dg-final { scan-assembler {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
  /* { dg-final { scan-assembler {vrsub.vx} } } */
  /* { dg-final { scan-assembler {vand.vx} } } */
  /* { dg-final { scan-assembler {vor.vx} } } */
  /* { dg-final { scan-assembler {vxor.vx} } } */
! /* { dg-final { scan-assembler {vmul.vx} } } */
  /* { dg-final { scan-assembler {vdiv.vx} } } */
  /* { 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"
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i8.c gcc-17-20260621/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i8.c
*** gcc-17-20260614/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i8.c	Sun Jun 14 22:32:14 2026
--- gcc-17-20260621/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i8.c	Sun Jun 21 22:32:12 2026
*************** DEF_VX_BINARY_CASE_3_WRAP(T, SAT_S_SUB_F
*** 23,41 ****
  DEF_VX_BINARY_CASE_3_WRAP(T, AVG_FLOOR_FUNC_WRAP(T), avg_floor, VX_BINARY_FUNC_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, AVG_CEIL_FUNC_WRAP(T), avg_ceil, VX_BINARY_FUNC_BODY_X8)
  
! /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
  /* { dg-final { scan-assembler {vrsub.vx} } } */
  /* { dg-final { scan-assembler {vand.vx} } } */
  /* { dg-final { scan-assembler {vor.vx} } } */
  /* { dg-final { scan-assembler {vxor.vx} } } */
! /* { dg-final { scan-assembler-not {vmul.vx} } } */
  /* { dg-final { scan-assembler {vdiv.vx} } } */
  /* { 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"
--- 23,41 ----
  DEF_VX_BINARY_CASE_3_WRAP(T, AVG_FLOOR_FUNC_WRAP(T), avg_floor, VX_BINARY_FUNC_BODY_X8)
  DEF_VX_BINARY_CASE_3_WRAP(T, AVG_CEIL_FUNC_WRAP(T), avg_ceil, VX_BINARY_FUNC_BODY_X8)
  
! /* { dg-final { scan-assembler {vadd.vx} } } */
  /* { dg-final { scan-assembler {vsub.vx} } } */
  /* { dg-final { scan-assembler {vrsub.vx} } } */
  /* { dg-final { scan-assembler {vand.vx} } } */
  /* { dg-final { scan-assembler {vor.vx} } } */
  /* { dg-final { scan-assembler {vxor.vx} } } */
! /* { dg-final { scan-assembler {vmul.vx} } } */
  /* { dg-final { scan-assembler {vdiv.vx} } } */
  /* { 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"
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.target/riscv/sat/sat_arith.h gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_arith.h
*** gcc-17-20260614/gcc/testsuite/gcc.target/riscv/sat/sat_arith.h	Sun Jun 14 22:32:14 2026
--- gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_arith.h	Sun Jun 21 22:32:12 2026
*************** sat_u_mul_##NT##_from_##WT##_fmt_11 (NT
*** 838,841 ****
--- 838,856 ----
    sat_u_mul_##NT##_from_##WT##_fmt_11 (a, b)
  #define RUN_SAT_U_MUL_FMT_11_WRAP(NT, WT, a, b) RUN_SAT_U_MUL_FMT_11(NT, WT, a, b)
  
+ #define DEF_SAT_U_MUL_FMT_12(T)               \
+ T __attribute__((noinline))                   \
+ sat_u_mul_##T##_fmt_12 (T a, T b)             \
+ {                                             \
+   T result;                                   \
+   if (!__builtin_mul_overflow(a, b, &result)) \
+     return result;                            \
+   else                                        \
+     return -1;                                \
+ }
+ 
+ #define DEF_SAT_U_MUL_FMT_12_WRAP(T) DEF_SAT_U_MUL_FMT_12(T)
+ #define RUN_SAT_U_MUL_FMT_12(T, a, b) sat_u_mul_##T##_fmt_12(a, b)
+ #define RUN_SAT_U_MUL_FMT_12_WRAP(T, a, b) RUN_SAT_U_MUL_FMT_12(T, a, b)
+ 
  #endif
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-13-u16.c gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-13-u16.c
*** gcc-17-20260614/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-13-u16.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-13-u16.c	Sun Jun 21 22:32:12 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define T uint16_t
+ 
+ DEF_SAT_U_MUL_FMT_12_WRAP(T)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-13-u32.c gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-13-u32.c
*** gcc-17-20260614/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-13-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-13-u32.c	Sun Jun 21 22:32:12 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define T uint32_t
+ 
+ DEF_SAT_U_MUL_FMT_12_WRAP(T)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-13-u64.c gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-13-u64.c
*** gcc-17-20260614/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-13-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-13-u64.c	Sun Jun 21 22:32:12 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define T uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_12_WRAP(T)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-13-u8.c gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-13-u8.c
*** gcc-17-20260614/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-13-u8.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-13-u8.c	Sun Jun 21 22:32:12 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define T uint8_t
+ 
+ DEF_SAT_U_MUL_FMT_12_WRAP(T)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
+ /* { dg-final { scan-assembler-not "\.L\[0-9\]+" } } */
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-13-u16.c gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-13-u16.c
*** gcc-17-20260614/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-13-u16.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-13-u16.c	Sun Jun 21 22:32:12 2026
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint16_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_12_WRAP(NT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_12_WRAP(NT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-13-u32.c gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-13-u32.c
*** gcc-17-20260614/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-13-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-13-u32.c	Sun Jun 21 22:32:12 2026
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint32_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_12_WRAP(NT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_12_WRAP(NT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-13-u64.c gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-13-u64.c
*** gcc-17-20260614/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-13-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-13-u64.c	Sun Jun 21 22:32:12 2026
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint64_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_12_WRAP(NT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_12_WRAP(NT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-13-u8.c gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-13-u8.c
*** gcc-17-20260614/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-13-u8.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-13-u8.c	Sun Jun 21 22:32:12 2026
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint8_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_12_WRAP(NT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_12_WRAP(NT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.target/riscv/test-equal.c gcc-17-20260621/gcc/testsuite/gcc.target/riscv/test-equal.c
*** gcc-17-20260614/gcc/testsuite/gcc.target/riscv/test-equal.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.target/riscv/test-equal.c	Sun Jun 21 22:32:12 2026
***************
*** 0 ****
--- 1,24 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcbv_zicond -mabi=lp64d" { target rv64 } } */
+ /* { dg-options "-march=rv32gcbv_zicond -mabi=ilp32" { target rv32 } } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" "-Og"} } */
+ 
+ enum machine_mode
+ {
+   VOIDmode,
+   MAX_MACHINE_MODE,
+   NUM_MACHINE_MODES = MAX_MACHINE_MODE
+ };
+ extern unsigned char mode_size[NUM_MACHINE_MODES];
+ void oof (enum machine_mode);
+ void
+ init_emit_once (enum machine_mode double_mode, enum machine_mode mode)
+ {
+       if (((unsigned short) (((unsigned short) mode_size[mode]) * 8)) == 64
+           && double_mode == VOIDmode)
+         double_mode = mode;
+   oof (double_mode);
+ }
+ /* { dg-final { scan-assembler-not "addi\t\[a-x0-9\]+,\[a-x0-9\]+,-64" } } */
+ /* { dg-final { scan-assembler "addi\t\[a-x0-9\]+,\[a-x0-9\]+,-8" } } */
+ 
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.target/riscv/zicfilp-func-entry.c gcc-17-20260621/gcc/testsuite/gcc.target/riscv/zicfilp-func-entry.c
*** gcc-17-20260614/gcc/testsuite/gcc.target/riscv/zicfilp-func-entry.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.target/riscv/zicfilp-func-entry.c	Sun Jun 21 22:32:12 2026
***************
*** 0 ****
--- 1,15 ----
+ /* Test RISC-V Zicfilp function entry LPAD.  */
+ /* { dg-do compile { target { riscv64*-*-* } } } */
+ /* { dg-options "-O2 -march=rv64gc_zicfilp -mabi=lp64d -fcf-protection=none -fcf-protection=branch" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" "-g" "-flto" } } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ /*
+ ** public_function:
+ **	lpad	\d+
+ **	...
+ */
+ int public_function (int a, int b)
+ {
+   return a + b;
+ }
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.target/riscv/zicfilp-gpr-save.c gcc-17-20260621/gcc/testsuite/gcc.target/riscv/zicfilp-gpr-save.c
*** gcc-17-20260614/gcc/testsuite/gcc.target/riscv/zicfilp-gpr-save.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.target/riscv/zicfilp-gpr-save.c	Sun Jun 21 22:32:12 2026
***************
*** 0 ****
--- 1,27 ----
+ /* Test RISC-V Zicfilp gpr_save LPAD alignment with .option norelax.  */
+ /* { dg-do compile { target { riscv64*-*-* } } } */
+ /* { dg-options "-O2 -msave-restore -fomit-frame-pointer -march=rv64gc_zicfilp -mabi=lp64d -fcf-protection=none -fcf-protection=branch" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" "-g" "-flto" } } */
+ /* { dg-final { check-function-bodies "**" "" {\.p2align|\.option|call|lpad} } } */
+ 
+ extern void bar (void);
+ 
+ /*
+ ** foo:
+ **	...
+ **	.p2align	2
+ **	.option push
+ **	.option norelax
+ **	.option norvc
+ **	call	t0,__riscv_save_[0-9]+
+ **	.option pop
+ **	lpad	\d+
+ **	...
+ */
+ void foo (void)
+ {
+   register long s0 asm ("s0");
+   asm volatile ("li s0, 0x87654321" : "=r"(s0));
+   bar ();
+   asm volatile ("" : : "r"(s0));
+ }
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.target/riscv/zicfilp-indirect-return.c gcc-17-20260621/gcc/testsuite/gcc.target/riscv/zicfilp-indirect-return.c
*** gcc-17-20260614/gcc/testsuite/gcc.target/riscv/zicfilp-indirect-return.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.target/riscv/zicfilp-indirect-return.c	Sun Jun 21 22:32:12 2026
***************
*** 0 ****
--- 1,30 ----
+ /* Test RISC-V Zicfilp indirect_return attribute functionality.  */
+ /* { dg-do compile { target { riscv64*-*-* } } } */
+ /* { dg-options "-O2 -march=rv64gc_zicfilp -mabi=lp64d -fcf-protection=none -fcf-protection=branch -fno-inline" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" "-g" "-flto" } } */
+ /* { dg-final { check-function-bodies "**" "" {\.p2align|\.option|call|lpad} } } */
+ 
+ /* Function marked with indirect_return attribute.  */
+ int __attribute__((indirect_return, noinline)) indirect_func (int x)
+ {
+   return x * 2 + 1;
+ }
+ 
+ /*
+ ** test_indirect_call:
+ **	...
+ **	.p2align	2
+ **	.option push
+ **	.option norelax
+ **	.option norvc
+ **	call	indirect_func.*
+ **	.option pop
+ **	lpad	\d+
+ **	...
+ */
+ int test_indirect_call (int x)
+ {
+   /* Use the result to prevent tail call optimization.  */
+   int result = indirect_func (x);
+   return result + 1;
+ }
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.target/riscv/zicfilp-nonlocal-goto.c gcc-17-20260621/gcc/testsuite/gcc.target/riscv/zicfilp-nonlocal-goto.c
*** gcc-17-20260614/gcc/testsuite/gcc.target/riscv/zicfilp-nonlocal-goto.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.target/riscv/zicfilp-nonlocal-goto.c	Sun Jun 21 22:32:12 2026
***************
*** 0 ****
--- 1,31 ----
+ /* Test RISC-V Zicfilp non-local goto LPAD with proper alignment.  */
+ /* { dg-do compile { target { riscv64*-*-* } } } */
+ /* { dg-options "-march=rv64gc_zicfilp -mabi=lp64d -fcf-protection=none -fcf-protection=branch" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" "-O2" "-O3" "-Os" "-Oz" "-Og" "-g" "-flto" } } */
+ /* { dg-final { check-function-bodies "**" "" {\.align|\.L[0-9]+:} } } */
+ 
+ extern void do_something (void);
+ 
+ /*
+ ** outer_function:
+ **	lpad	\d+
+ **	...
+ **	\.align	2
+ **	\.L[0-9]+:
+ **	lpad	\d+
+ **	...
+ */
+ void outer_function (void *label_addr)
+ {
+   __label__ target_label;
+ 
+   if (label_addr)
+     goto *label_addr;
+ 
+   do_something ();
+ 
+ target_label:
+   do_something ();
+ 
+   outer_function (&&target_label);
+ }
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gcc.target/riscv/zicfilp-setjmp.c gcc-17-20260621/gcc/testsuite/gcc.target/riscv/zicfilp-setjmp.c
*** gcc-17-20260614/gcc/testsuite/gcc.target/riscv/zicfilp-setjmp.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gcc.target/riscv/zicfilp-setjmp.c	Sun Jun 21 22:32:12 2026
***************
*** 0 ****
--- 1,26 ----
+ /* Test RISC-V Zicfilp setjmp call protection functionality.  */
+ /* { dg-do compile { target { riscv64*-*-* } } } */
+ /* { dg-options "-O2 -march=rv64gc_zicfilp -mabi=lp64d -fcf-protection=none -fcf-protection=branch" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" "-g" "-flto" } } */
+ /* { dg-final { check-function-bodies "**" "" {\.p2align|\.option|call|lpad} } } */
+ 
+ #include <setjmp.h>
+ 
+ jmp_buf test_env;
+ 
+ /*
+ ** test_setjmp_call:
+ **	...
+ **	.p2align	2
+ **	.option push
+ **	.option norelax
+ **	.option norvc
+ **	call	_?setjmp.*
+ **	.option pop
+ **	lpad	\d+
+ **	...
+ */
+ int test_setjmp_call (void)
+ {
+   return setjmp (test_env);
+ }
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gfortran.dg/asan/implied_do_alloc_comp_leak_1.f90 gcc-17-20260621/gcc/testsuite/gfortran.dg/asan/implied_do_alloc_comp_leak_1.f90
*** gcc-17-20260614/gcc/testsuite/gfortran.dg/asan/implied_do_alloc_comp_leak_1.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gfortran.dg/asan/implied_do_alloc_comp_leak_1.f90	Sun Jun 21 22:32:13 2026
***************
*** 0 ****
--- 1,45 ----
+ !{ dg-do run }
+ 
+ ! PR fortran/125535
+ 
+ ! An array constructor with an implied-do whose element is a function result
+ ! of derived type with allocatable components moves the result into the
+ ! constructor temporary, which then owns those components.  The per-element
+ ! finalization only freed the last slot written by the loop, leaking the
+ ! allocatable components of every other element.  Checked under -fsanitize=address.
+ 
+ module m
+   implicit none
+   type :: t
+     real, allocatable :: v(:)
+   end type
+ contains
+   pure function make (x) result (r)
+     real, intent(in) :: x(:)
+     type(t) :: r
+     r%v = x
+   end function
+ end module
+ 
+ program implied_do_alloc_comp_leak_1
+   use m
+   implicit none
+   integer, parameter :: n = 4
+   type(t), allocatable :: a(:), b(:,:)
+   real :: h(2, n)
+   integer :: i, j
+ 
+   do i = 1, n
+     h(:, i) = [real(i), real(2 * i)]
+   end do
+ 
+   ! Flat implied-do of function results.
+   a = [(make (h(:, i)), i = 1, n)]
+   if (any (a(n)%v /= h(:, n))) stop 1
+   deallocate (a)
+ 
+   ! Nested implied-do feeding a transformational intrinsic.
+   b = reshape ([([(make (h(:, i)), j = 1, 1)], i = 1, n)], [1, n])
+   if (any (b(1, 2)%v /= h(:, 2))) stop 2
+   deallocate (b)
+ end program
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gfortran.dg/coarray/caf.exp gcc-17-20260621/gcc/testsuite/gfortran.dg/coarray/caf.exp
*** gcc-17-20260614/gcc/testsuite/gfortran.dg/coarray/caf.exp	Sun Jun 14 22:32:14 2026
--- gcc-17-20260621/gcc/testsuite/gfortran.dg/coarray/caf.exp	Sun Jun 21 22:32:13 2026
*************** if { [getenv GFORTRAN_NUM_IMAGES] == ""
*** 82,87 ****
--- 82,92 ----
    setenv GFORTRAN_NUM_IMAGES 8
  }
  
+ if { [getenv GCC_TEST_RUN_EXPENSIVE] == "" } {
+   # Lower caf_shmem shared memory block size to avoid excessive VM consumption.
+   setenv GFORTRAN_SHARED_MEMORY_SIZE 2M
+ }
+ 
  # Main loop.
  foreach test [lsort [glob -nocomplain $srcdir/$subdir/*.\[fF\]{,90,95,03,08} ]] {
      # If we're only testing specific files and this isn't one of them, skip it.
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gfortran.dg/gomp/declare-reduction-2.f90 gcc-17-20260621/gcc/testsuite/gfortran.dg/gomp/declare-reduction-2.f90
*** gcc-17-20260614/gcc/testsuite/gfortran.dg/gomp/declare-reduction-2.f90	Sun Jun 14 22:32:14 2026
--- gcc-17-20260621/gcc/testsuite/gfortran.dg/gomp/declare-reduction-2.f90	Sun Jun 21 22:32:13 2026
***************
*** 3,10 ****
  type t
  end type t
  !$omp declare reduction(+:t)
! ! { dg-error "28: Syntax error in statement at .1." "" { target *-*-* } .-1 }
  ! { dg-bogus "Unclassifiable OpenMP directive" "" { target *-*-* } .-2 }
  
- 
  end
--- 3,9 ----
  type t
  end type t
  !$omp declare reduction(+:t)
! ! { dg-error "28: Expected ':' or ',' at .1." "" { target *-*-* } .-1 }
  ! { dg-bogus "Unclassifiable OpenMP directive" "" { target *-*-* } .-2 }
  
  end
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gfortran.dg/gomp/declare-reduction-5.f90 gcc-17-20260621/gcc/testsuite/gfortran.dg/gomp/declare-reduction-5.f90
*** gcc-17-20260614/gcc/testsuite/gfortran.dg/gomp/declare-reduction-5.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gfortran.dg/gomp/declare-reduction-5.f90	Sun Jun 21 22:32:13 2026
***************
*** 0 ****
--- 1,90 ----
+ module m
+ implicit none
+ contains
+  integer function my_add(x,y)
+    integer, value, intent(in) :: x, y
+    my_add = x + y
+  end
+ end module
+ 
+ use m
+ implicit none
+ 
+ type t
+   integer :: x
+ end type t
+ 
+ !$omp declare reduction ! { dg-error "Expected '\\('" }
+ 
+ !$omp declare reduction initializer() ! { dg-error "Expected '\\('" }
+ 
+ 
+ !$omp declare reduction ( ! { dg-error "Expected an identfifier or operator as reduction identifier followed by a colon" }
+ 
+ !$omp declare reduction (+      ! { dg-error "Expected an identfifier or operator as reduction identifier followed by a colon" }
+ !$omp declare reduction (.or.   ! { dg-error "The name 'or' cannot be used as a defined operator" }
+ !$omp declare reduction (myName ! { dg-error "Expected an identfifier or operator as reduction identifier followed by a colon" }
+ 
+ !$omp declare reduction (+  :     ! { dg-error "Expected type spec" }
+ !$omp declare reduction (.or. :   ! { dg-error "Expected type spec" }
+ !$omp declare reduction (myName : ! { dg-error "Expected type spec" }
+ 
+ !$omp declare reduction (+      : t               ! { dg-error "Expected ':' or ','" }
+ !$omp declare reduction (.or.   : integer         ! { dg-error "Expected ':' or ','" }
+ !$omp declare reduction (myName : integer(kind=4) ! { dg-error "Expected ':' or ','" }
+ 
+ !$omp declare reduction (foo : integer(1),  integer(kind=2),  ! { dg-error "Expected type spec at" }
+ !$omp declare reduction (foo : integer(1),  integer(kind=2)   ! { dg-error "Expected ':' or ','" }
+ 
+ !$omp declare reduction (+      : t               : ! { dg-error "Expected either 'omp_out = expr' or 'subroutine-name\\(argument-list\\)' followed by '\\)' at .1." }
+ 
+ !$omp declare reduction (.or.   : integer         : ! { dg-error "Expected either 'omp_out = expr' or 'subroutine-name\\(argument-list\\)' followed by '\\)' at .1." }
+ !$omp declare reduction (myName : integer(kind=4) : ! { dg-error "Expected either 'omp_out = expr' or 'subroutine-name\\(argument-list\\)' followed by '\\)' at .1." }
+ 
+ !$omp declare reduction (+      : t               : omp_in   ! { dg-error "Expected either 'omp_out = expr' or 'subroutine-name\\(argument-list\\)' followed by '\\)' at .1." }
+ !$omp declare reduction (.or.   : integer         : omp_priv ! { dg-error "Expected either 'omp_out = expr' or 'subroutine-name\\(argument-list\\)' followed by '\\)' at .1." }
+ !$omp declare reduction (myName : integer(kind=4) : omp_orig ! { dg-error "Expected either 'omp_out = expr' or 'subroutine-name\\(argument-list\\)' followed by '\\)' at .1." }
+ 
+ !$omp declare reduction (+      : t               : omp_out ! { dg-error "Expected either 'omp_out = expr' or 'subroutine-name\\(argument-list\\)' followed by '\\)' at .1." }
+ !$omp declare reduction (.or.   : integer         : omp_out ! { dg-error "Expected either 'omp_out = expr' or 'subroutine-name\\(argument-list\\)' followed by '\\)' at .1." }
+ !$omp declare reduction (myName : integer(kind=4) : omp_out ! { dg-error "Expected either 'omp_out = expr' or 'subroutine-name\\(argument-list\\)' followed by '\\)' at .1." }
+ 
+ !$omp declare reduction (+      : t               : omp_out%x = ! { dg-error "Expected either 'omp_out = expr' or 'subroutine-name\\(argument-list\\)' followed by '\\)' at .1." }
+ !$omp declare reduction (.or.   : integer         : omp_out =   ! { dg-error "Expected either 'omp_out = expr' or 'subroutine-name\\(argument-list\\)' followed by '\\)' at .1." }
+ !$omp declare reduction (myName : integer(kind=4) : omp_out =   ! { dg-error "Expected either 'omp_out = expr' or 'subroutine-name\\(argument-list\\)' followed by '\\)' at .1." }
+ 
+ !$omp declare reduction (+      : t               : omp_out%x = 1 ! { dg-error "Expected either 'omp_out = expr' or 'subroutine-name\\(argument-list\\)' followed by '\\)' at .1." }
+ !$omp declare reduction (.or.   : integer         : omp_out =   1 ! { dg-error "Expected either 'omp_out = expr' or 'subroutine-name\\(argument-list\\)' followed by '\\)' at .1." }
+ !$omp declare reduction (myName : integer(kind=4) : omp_out =   1 ! { dg-error "Expected either 'omp_out = expr' or 'subroutine-name\\(argument-list\\)' followed by '\\)' at .1." }
+ 
+ ! Odd in terms of semantic but valid
+ !$omp declare reduction (+      : t               : omp_out%x = 1 ) ! { dg-error "Missing INITIALIZER clause for !.OMP DECLARE REDUCTION of derived type without default initializer" }
+ !$omp declare reduction (.or.   : integer         : omp_out =   1 )
+ !$omp declare reduction (myName : integer(kind=4) : omp_out =   1 )
+ 
+ !$omp declare reduction (myName5    : t               : omp_out%x = omp_in%x + omp_out%x ) ! { dg-error "Missing INITIALIZER clause for !.OMP DECLARE REDUCTION of derived type without default initializer" }
+ !$omp declare reduction (.and.   : integer         : omp_out =   0 + omp_out + omp_in )
+ !$omp declare reduction (myName2 : integer(kind=4) : omp_out =   omp_out + omp_in )
+ 
+ !$omp declare reduction (myName4      : t               : omp_out%x = my_add(omp_in%x , omp_out%x) + 0 ) ! { dg-error "Missing INITIALIZER clause for !.OMP DECLARE REDUCTION of derived type without default initializer" }
+ !$omp declare reduction (myName6   : integer         : omp_out =   0 + my_add(omp_out,omp_in) )
+ !$omp declare reduction (myName3 : integer(kind=4) : omp_out =   my_add(omp_out , omp_in ) )
+ 
+ !$omp declare reduction (* : integer : omp_out = omp_in * omp_out) ! { dg-error "Redefinition of predefined 'operator \\*' in !.OMP DECLARE REDUCTION" }
+ !$omp declare reduction (max : integer : omp_out = omp_in * omp_out) ! { dg-error "Redefinition of predefined 'max' in !.OMP DECLARE REDUCTIO" }
+ 
+ !$omp declare reduction (my : integer : omp_out = omp_in * omp_out) ! { dg-note "Previous !.OMP DECLARE REDUCTION" }
+ !$omp declare reduction (my : integer : omp_out = omp_in * omp_out) ! { dg-error "Redefinition of 'my' in !.OMP DECLARE REDUCTION" }
+ 
+ !$omp declare reduction (foo : integer(1),  integer(kind=2), real(kind=8) : omp_out = omp_in * omp_out) nowait ! { dg-error "Unexpected junk at .1." }
+ !$omp declare reduction (bar : integer : omp_out = omp_in * omp_out) initializer ! { dg-error "Unexpected junk at .1." }
+ 
+ !$omp declare reduction (bar2 : integer : omp_out = omp_in * omp_out) initializer( ! { dg-error "Expected either 'omp_priv = expr' or 'subroutine-name\\(argument-list\\)' followed by '\\)' at .1." }
+ 
+ !$omp declare reduction (bar3 : integer : omp_out = omp_in * omp_out) initializer( omp_priv = ! { dg-error "Expected either 'omp_priv = expr' or 'subroutine-name\\(argument-list\\)' followed by '\\)' at .1." }
+ 
+ !$omp declare reduction (bar3 : integer : omp_out = omp_in * omp_out) initializer( omp_priv = 1! { dg-error "Expected either 'omp_priv = expr' or 'subroutine-name\\(argument-list\\)' followed by '\\)' at .1." }
+ 
+ !$omp declare reduction (bar3 : integer : omp_out = omp_in * omp_out) initializer( omp_priv = 1) nowait ! { dg-error "Unexpected junk at .1." }
+ 
+ end
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gfortran.dg/gomp/udr1.f90 gcc-17-20260621/gcc/testsuite/gfortran.dg/gomp/udr1.f90
*** gcc-17-20260614/gcc/testsuite/gfortran.dg/gomp/udr1.f90	Sun Jun 14 22:32:14 2026
--- gcc-17-20260621/gcc/testsuite/gfortran.dg/gomp/udr1.f90	Sun Jun 21 22:32:13 2026
*************** subroutine f2
*** 22,33 ****
    end do
  end subroutine f2
  subroutine f3
! !$omp declare reduction (foo:blah:omp_out=omp_out + omp_in) ! { dg-error "30: Syntax error in statement at .1." }
  end subroutine f3
  subroutine f4
! !$omp declare reduction (foo:integer:a => null()) ! { dg-error "Invalid character in name" }
  !$omp declare reduction (foo:integer:omp_out = omp_in + omp_out) &
! !$omp & initializer(a => null()) ! { dg-error "Invalid character in name" }
  end subroutine f4
  subroutine f5
    integer :: a, b
--- 22,33 ----
    end do
  end subroutine f2
  subroutine f3
! !$omp declare reduction (foo:blah:omp_out=omp_out + omp_in) ! { dg-error "30: Expected type spec at .1." }
  end subroutine f3
  subroutine f4
! !$omp declare reduction (foo:integer:a => null()) ! { dg-error "Expected either 'omp_out = expr' or 'subroutine-name\\(argument-list\\)' followed by '\\)' at .1." }
  !$omp declare reduction (foo:integer:omp_out = omp_in + omp_out) &
! !$omp & initializer(a => null()) ! { dg-error "Expected either 'omp_priv = expr' or 'subroutine-name\\(argument-list\\)' followed by '\\)' at .1." }
  end subroutine f4
  subroutine f5
    integer :: a, b
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gfortran.dg/gomp/udr2.f90 gcc-17-20260621/gcc/testsuite/gfortran.dg/gomp/udr2.f90
*** gcc-17-20260614/gcc/testsuite/gfortran.dg/gomp/udr2.f90	Sun Jun 14 22:32:14 2026
--- gcc-17-20260621/gcc/testsuite/gfortran.dg/gomp/udr2.f90	Sun Jun 21 22:32:13 2026
***************
*** 1,13 ****
  ! { dg-do compile }
  
  subroutine f6
! !$omp declare reduction (foo:real:omp_out (omp_in)) ! { dg-error "35: Syntax error in statement at .1." }
! !$omp declare reduction (bar:real:omp_out = omp_in * omp_out) & ! { dg-error "35: Syntax error in statement at .1." }
! !$omp & initializer (omp_priv (omp_orig))
  end subroutine f6
  subroutine f7
    integer :: a
! !$omp declare reduction (foo:integer:a (omp_out, omp_in)) ! { dg-error "38: Syntax error in statement at .1." }
  !$omp declare reduction (bar:real:omp_out = omp_out.or.omp_in) ! { dg-error "Operands of logical operator" }
  !$omp declare reduction (baz:real:omp_out = omp_out + omp_in)
  !$omp & initializer (a (omp_priv, omp_orig)) ! { dg-error "Unclassifiable OpenMP directive" }
--- 1,13 ----
  ! { dg-do compile }
  
  subroutine f6
! !$omp declare reduction (foo:real:omp_out (omp_in)) ! { dg-error "34: Expected either 'omp_out = expr' or 'subroutine-name\\(argument-list\\)' followed by '\\)' at .1." }
! !$omp declare reduction (bar:real:omp_out = omp_in * omp_out) &
! !$omp & initializer (omp_priv (omp_orig)) ! { dg-error "Expected either 'omp_priv = expr' or 'subroutine-name\\(argument-list\\)' followed by '\\)' at .1." }
  end subroutine f6
  subroutine f7
    integer :: a
! !$omp declare reduction (foo:integer:a (omp_out, omp_in)) ! { dg-error "37: Expected either 'omp_out = expr' or 'subroutine-name\\(argument-list\\)' followed by '\\)' at .1." }
  !$omp declare reduction (bar:real:omp_out = omp_out.or.omp_in) ! { dg-error "Operands of logical operator" }
  !$omp declare reduction (baz:real:omp_out = omp_out + omp_in)
  !$omp & initializer (a (omp_priv, omp_orig)) ! { dg-error "Unclassifiable OpenMP directive" }
*************** subroutine f8
*** 24,32 ****
    end interface
  !$omp declare reduction (baz:integer:omp_out = omp_out + omp_in) &
  !$omp & initializer (f8a (omp_orig)) ! { dg-error "One of actual subroutine arguments in INITIALIZER clause" }
! !$omp declare reduction (foo:integer:f8a) ! { dg-error "is not a variable" }
  !$omp declare reduction (bar:integer:omp_out = omp_out - omp_in) &
! !$omp & initializer (f8a) ! { dg-error "is not a variable" }
  end subroutine f8
  subroutine f9
    type dt	! { dg-error "which is not consistent with the CALL" }
--- 24,32 ----
    end interface
  !$omp declare reduction (baz:integer:omp_out = omp_out + omp_in) &
  !$omp & initializer (f8a (omp_orig)) ! { dg-error "One of actual subroutine arguments in INITIALIZER clause" }
! !$omp declare reduction (foo:integer:f8a) ! { dg-error "Expected either 'omp_out = expr' or 'subroutine-name\\(argument-list\\)' followed by '\\)' at .1." }
  !$omp declare reduction (bar:integer:omp_out = omp_out - omp_in) &
! !$omp & initializer (f8a) ! { dg-error "Expected either 'omp_priv = expr' or 'subroutine-name\\(argument-list\\)' followed by '\\)' at .1." }
  end subroutine f8
  subroutine f9
    type dt	! { dg-error "which is not consistent with the CALL" }
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gfortran.dg/gomp/udr3.f90 gcc-17-20260621/gcc/testsuite/gfortran.dg/gomp/udr3.f90
*** gcc-17-20260614/gcc/testsuite/gfortran.dg/gomp/udr3.f90	Sun Jun 14 22:32:14 2026
--- gcc-17-20260621/gcc/testsuite/gfortran.dg/gomp/udr3.f90	Sun Jun 21 22:32:13 2026
*************** subroutine f1
*** 7,27 ****
    type dt2
      logical :: l = .false.
    end type
! !$omp declare reduction (foo:integer(kind = 4) & ! { dg-error "Previous !.OMP DECLARE REDUCTION" }
  !$omp & :omp_out = omp_out + omp_in)
! !$omp declare reduction (foo:integer(kind = 4) : & ! { dg-error "Redefinition of !.OMP DECLARE REDUCTION" }
  !$omp & omp_out = omp_out + omp_in)
  !$omp declare reduction (bar:integer, &
  !$omp & real:omp_out = omp_out + omp_in)
! !$omp declare reduction (baz:integer,real,integer & ! { dg-error "Redefinition of !.OMP DECLARE REDUCTION|Previous" }
  !$omp & : omp_out = omp_out + omp_in)
  !$omp declare reduction (id1:dt,dt2:omp_out%l=omp_out%l &
  !$omp & .or.omp_in%l)
! !$omp declare reduction (id2:dt,dt:omp_out%l=omp_out%l & ! { dg-error "Redefinition of !.OMP DECLARE REDUCTION|Previous" }
  !$omp & .or.omp_in%l)
! !$omp declare reduction (id3:dt2,dt:omp_out%l=omp_out%l & ! { dg-error "Previous !.OMP DECLARE REDUCTION" }
  !$omp & .or.omp_in%l)
! !$omp declare reduction (id3:dt2:omp_out%l=omp_out%l & ! { dg-error "Redefinition of !.OMP DECLARE REDUCTION" }
  !$omp & .or.omp_in%l)
  end subroutine f1
  subroutine f2
--- 7,27 ----
    type dt2
      logical :: l = .false.
    end type
! !$omp declare reduction (foo:integer(kind = 4) & ! { dg-note "Previous !.OMP DECLARE REDUCTION" }
  !$omp & :omp_out = omp_out + omp_in)
! !$omp declare reduction (foo:integer(kind = 4) : & ! { dg-error "Redefinition of 'foo' in !.OMP DECLARE REDUCTION at .1." }
  !$omp & omp_out = omp_out + omp_in)
  !$omp declare reduction (bar:integer, &
  !$omp & real:omp_out = omp_out + omp_in)
! !$omp declare reduction (baz:integer,real,integer & ! { dg-error "Redefinition of 'baz' in !.OMP DECLARE REDUCTION|Previous !.OMP DECLARE REDUCTION" }
  !$omp & : omp_out = omp_out + omp_in)
  !$omp declare reduction (id1:dt,dt2:omp_out%l=omp_out%l &
  !$omp & .or.omp_in%l)
! !$omp declare reduction (id2:dt,dt:omp_out%l=omp_out%l & ! { dg-error "Redefinition of 'id2' in !.OMP DECLARE REDUCTION|Previous !.OMP DECLARE REDUCTION" }
  !$omp & .or.omp_in%l)
! !$omp declare reduction (id3:dt2,dt:omp_out%l=omp_out%l & ! { dg-note "Previous !.OMP DECLARE REDUCTION" }
  !$omp & .or.omp_in%l)
! !$omp declare reduction (id3:dt2:omp_out%l=omp_out%l & ! { dg-error "Redefinition of 'id3' in !.OMP DECLARE REDUCTION" }
  !$omp & .or.omp_in%l)
  end subroutine f1
  subroutine f2
*************** subroutine f2
*** 56,68 ****
  !$omp declare reduction (baz:character(len=6): &
  !$omp & f2a (omp_out, omp_in, .false.)) &
  !$omp & initializer (f2a (omp_priv, omp_orig, .true.))
! !$omp declare reduction (id:character(len=*): & ! { dg-error "Previous !.OMP DECLARE REDUCTION" }
  !$omp & f2a (omp_out, omp_in, .false.)) &
  !$omp & initializer (f2a (omp_priv, omp_orig, .true.))
! !$omp declare reduction (id: & ! { dg-error "Redefinition of !.OMP DECLARE REDUCTION" }
  !$omp & character(len=:) : f2a (omp_out, omp_in, .false.)) &
  !$omp & initializer (f2a (omp_priv, omp_orig, .true.))
! !$omp declare reduction & ! { dg-error "Redefinition of !.OMP DECLARE REDUCTION|Previous" }
  !$omp (id2:character(len=*), character(len=:): &
  !$omp f2a (omp_out, omp_in, .false.)) &
  !$omp & initializer (f2a (omp_priv, omp_orig, .true.))
--- 56,68 ----
  !$omp declare reduction (baz:character(len=6): &
  !$omp & f2a (omp_out, omp_in, .false.)) &
  !$omp & initializer (f2a (omp_priv, omp_orig, .true.))
! !$omp declare reduction (id:character(len=*): & ! { dg-note "Previous !.OMP DECLARE REDUCTION" }
  !$omp & f2a (omp_out, omp_in, .false.)) &
  !$omp & initializer (f2a (omp_priv, omp_orig, .true.))
! !$omp declare reduction (id: & ! { dg-error "Redefinition of 'id' in !.OMP DECLARE REDUCTION" }
  !$omp & character(len=:) : f2a (omp_out, omp_in, .false.)) &
  !$omp & initializer (f2a (omp_priv, omp_orig, .true.))
! !$omp declare reduction & ! { dg-error "Redefinition of 'id2' in !.OMP DECLARE REDUCTION|Previous !.OMP DECLARE REDUCTION" }
  !$omp (id2:character(len=*), character(len=:): &
  !$omp f2a (omp_out, omp_in, .false.)) &
  !$omp & initializer (f2a (omp_priv, omp_orig, .true.))
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gfortran.dg/gomp/udr4.f90 gcc-17-20260621/gcc/testsuite/gfortran.dg/gomp/udr4.f90
*** gcc-17-20260614/gcc/testsuite/gfortran.dg/gomp/udr4.f90	Sun Jun 14 22:32:14 2026
--- gcc-17-20260621/gcc/testsuite/gfortran.dg/gomp/udr4.f90	Sun Jun 21 22:32:13 2026
***************
*** 1,12 ****
  ! { dg-do compile }
  
  subroutine f3
! !$omp declare reduction ! { dg-error "24: Syntax error in statement at .1." }
! !$omp declare reduction foo ! { dg-error "24: Syntax error in statement at .1." }
! !$omp declare reduction (foo) ! { dg-error "26: Syntax error in statement at .1." }
! !$omp declare reduction (foo:integer) ! { dg-error "37: Syntax error in statement at .1." }
  !$omp declare reduction (foo:integer:omp_out=omp_out+omp_in) &
! !$omp & initializer(omp_priv=0) initializer(omp_priv=0) ! { dg-error "Unexpected junk after" }
  end subroutine f3
  subroutine f4
    implicit integer (o)
--- 1,12 ----
  ! { dg-do compile }
  
  subroutine f3
! !$omp declare reduction ! { dg-error "24: Expected '\\(' at .1." }
! !$omp declare reduction foo ! { dg-error "24: Expected '\\(' at .1." }
! !$omp declare reduction (foo) ! { dg-error "26: Expected an identfifier or operator as reduction identifier followed by a colon at .1." }
! !$omp declare reduction (foo:integer) ! { dg-error "37: Expected ':' or ',' at .1." }
  !$omp declare reduction (foo:integer:omp_out=omp_out+omp_in) &
! !$omp & initializer(omp_priv=0) initializer(omp_priv=0) ! { dg-error "32: Unexpected junk at .1." }
  end subroutine f3
  subroutine f4
    implicit integer (o)
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gfortran.dg/namelist_103.f90 gcc-17-20260621/gcc/testsuite/gfortran.dg/namelist_103.f90
*** gcc-17-20260614/gcc/testsuite/gfortran.dg/namelist_103.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gfortran.dg/namelist_103.f90	Sun Jun 21 22:32:13 2026
***************
*** 0 ****
--- 1,27 ----
+ ! { dg-do run }
+ ! PR fortran/82086 - namelist read of derived-type array component
+ ! with a repeat count must set all addressed elements.
+ program pr82086
+   implicit none
+   type t
+      character(64) :: c = ''
+   end type t
+   type(t), dimension(16) :: ta
+   integer :: i
+   namelist /n/ ta
+ 
+   open (10, status="scratch", delim="apostrophe")
+   write (10, '(a)') "&n"
+   write (10, '(a)') " ta(1:8)%c = 8*'bogus'"
+   write (10, '(a)') "/"
+   rewind (10)
+   read (10, nml=n)
+   close (10)
+ 
+   do i = 1, 8
+     if (ta(i)%c /= 'bogus') stop i
+   end do
+   do i = 9, 16
+     if (ta(i)%c /= '') stop 10+i
+   end do
+ end program pr82086
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gfortran.dg/warn_unused_but_set_variable_2.f90 gcc-17-20260621/gcc/testsuite/gfortran.dg/warn_unused_but_set_variable_2.f90
*** gcc-17-20260614/gcc/testsuite/gfortran.dg/warn_unused_but_set_variable_2.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gfortran.dg/warn_unused_but_set_variable_2.f90	Sun Jun 21 22:32:13 2026
***************
*** 0 ****
--- 1,16 ----
+ ! { dg-do compile }
+ ! { dg-additional-options "-Wunused-but-set-variable" }
+ program main
+   integer :: i,j, k
+   real, dimension(100) :: a
+   integer, dimension(50) :: ios
+   i = 42
+   j = 42
+   read (*,*) a(i)
+   print *, a(j)
+ 
+   k = 42
+   read (*,*,iostat=ios(k)) a(10)
+   print *,ios(42)
+ end program main
+   
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gnat.dg/opt108.adb gcc-17-20260621/gcc/testsuite/gnat.dg/opt108.adb
*** gcc-17-20260614/gcc/testsuite/gnat.dg/opt108.adb	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gnat.dg/opt108.adb	Sun Jun 21 22:32:13 2026
***************
*** 0 ****
--- 1,10 ----
+ -- { dg-do run }
+ -- { dg-options "-O2 -gnatp" }
+ 
+ with Opt108_Pkg; use Opt108_Pkg;
+ 
+ procedure Opt108 is
+ begin
+    Set;
+    Put;
+ end;
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gnat.dg/opt108_pkg.adb gcc-17-20260621/gcc/testsuite/gnat.dg/opt108_pkg.adb
*** gcc-17-20260614/gcc/testsuite/gnat.dg/opt108_pkg.adb	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gnat.dg/opt108_pkg.adb	Sun Jun 21 22:32:13 2026
***************
*** 0 ****
--- 1,38 ----
+ with Interfaces;
+ 
+ package body Opt108_Pkg is
+ 
+    procedure Put is
+    begin
+       if Val.X /= 1 then
+          raise Program_Error;
+       end if;
+    end;
+ 
+    procedure Set is
+       type Array_Type is array (Index_Type) of Test_Type;
+ 
+       New_Val : Array_Type := (others => (X => 0));
+ 
+       procedure Next
+         (Index :        Index_Type;
+          T     : in out Test_Type)
+       is
+       begin
+          T := (X => T.X + 1);
+          New_Val (Index) := T;
+       end Next;
+ 
+       Cur : Test_Type;
+ 
+    begin
+       Cur := (X => 0);
+ 
+       if not Flag then
+          Next (Index => Cur_Index, T => Cur);
+       end if;
+ 
+       Val := New_Val (1);
+    end;
+ 
+ end Opt108_Pkg;
diff -Nrcpad gcc-17-20260614/gcc/testsuite/gnat.dg/opt108_pkg.ads gcc-17-20260621/gcc/testsuite/gnat.dg/opt108_pkg.ads
*** gcc-17-20260614/gcc/testsuite/gnat.dg/opt108_pkg.ads	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/gnat.dg/opt108_pkg.ads	Sun Jun 21 22:32:13 2026
***************
*** 0 ****
--- 1,21 ----
+ package Opt108_Pkg is
+ 
+    procedure Set;
+ 
+    procedure Put;
+ 
+ private
+ 
+    type Test_Type is record
+       X : Integer;
+    end record;
+ 
+    type Index_Type is range 1 .. 1;
+ 
+    Cur_Index : Index_Type := 1;
+ 
+    Flag : Boolean := False;
+ 
+    Val : Test_Type;
+ 
+ end Opt108_Pkg;
diff -Nrcpad gcc-17-20260614/gcc/testsuite/jit.dg/all-non-failing-tests.h gcc-17-20260621/gcc/testsuite/jit.dg/all-non-failing-tests.h
*** gcc-17-20260614/gcc/testsuite/jit.dg/all-non-failing-tests.h	Sun Jun 14 22:32:15 2026
--- gcc-17-20260621/gcc/testsuite/jit.dg/all-non-failing-tests.h	Sun Jun 21 22:32:14 2026
***************
*** 138,143 ****
--- 138,150 ----
  #undef create_code
  #undef verify_code
  
+ /* test-comparison.c */
+ #define create_code create_code_comparison
+ #define verify_code verify_code_comparison
+ #include "test-comparison.c"
+ #undef create_code
+ #undef verify_code
+ 
  /* test-compound-assignment.c */
  #define create_code create_code_compound_assignment
  #define verify_code verify_code_compound_assignment
*************** const struct testcase testcases[] = {
*** 558,563 ****
--- 565,573 ----
    {"cast",
     create_code_cast,
     verify_code_cast},
+   {"comparison",
+    create_code_comparison,
+    verify_code_comparison},
    {"compound_assignment",
     create_code_compound_assignment,
     verify_code_compound_assignment},
diff -Nrcpad gcc-17-20260614/gcc/testsuite/jit.dg/test-comparison.c gcc-17-20260621/gcc/testsuite/jit.dg/test-comparison.c
*** gcc-17-20260614/gcc/testsuite/jit.dg/test-comparison.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/gcc/testsuite/jit.dg/test-comparison.c	Sun Jun 21 22:32:14 2026
***************
*** 0 ****
--- 1,79 ----
+ #include <stdlib.h>
+ #include <stdio.h>
+ #include <string.h>
+ 
+ #include "libgccjit.h"
+ 
+ #include "harness.h"
+ 
+ void
+ create_code (gcc_jit_context *ctxt, void *user_data)
+ {
+   /* Let's try to inject the equivalent of:
+ int
+ func ()
+ {
+     _Float32 float32_val = 2.3;
+     float float = 4.5;
+     if (float == float32_val)
+         return 1;
+     return 0;
+ }
+    */
+   gcc_jit_type *int_type =
+     gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_INT);
+   gcc_jit_type *float_type =
+     gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_FLOAT);
+   gcc_jit_type *float32_type;
+ 
+   gcc_jit_context *info_ctxt = gcc_jit_context_acquire ();
+   gcc_jit_target_info* target_info = gcc_jit_context_get_target_info (info_ctxt);
+   if (gcc_jit_target_info_supports_target_dependent_type (target_info,
+ 							  GCC_JIT_TYPE_FLOAT32))
+   {
+     gcc_jit_type *sized_float_type =
+       gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_FLOAT32);
+     float32_type = gcc_jit_type_get_aligned (sized_float_type, 4);
+   }
+   else
+     float32_type = gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_FLOAT);
+ 
+   gcc_jit_function *func =
+     gcc_jit_context_new_function (ctxt,
+ 				  NULL,
+ 				  GCC_JIT_FUNCTION_EXPORTED,
+ 				  int_type,
+ 				  "func",
+ 				  0, NULL, 0);
+ 
+   gcc_jit_block *initial =
+     gcc_jit_function_new_block (func, "initial");
+   gcc_jit_block *if_block =
+     gcc_jit_function_new_block (func, "if");
+   gcc_jit_block *else_block =
+     gcc_jit_function_new_block (func, "else");
+ 
+   gcc_jit_rvalue *zero = gcc_jit_context_zero (ctxt, int_type);
+   gcc_jit_rvalue *one = gcc_jit_context_one (ctxt, int_type);
+ 
+   gcc_jit_rvalue *float32_val =
+     gcc_jit_context_new_rvalue_from_double (ctxt, float32_type, 2.3);
+   gcc_jit_rvalue *float_val =
+     gcc_jit_context_new_rvalue_from_double (ctxt, float_type, 4.5);
+ 
+   gcc_jit_rvalue *comparison = gcc_jit_context_new_comparison (ctxt,
+     NULL, GCC_JIT_COMPARISON_EQ, float_val, float32_val);
+ 
+   gcc_jit_block_end_with_conditional (initial,
+     NULL, comparison, if_block, else_block);
+ 
+   gcc_jit_block_end_with_return(if_block, NULL, one);
+ 
+   gcc_jit_block_end_with_return(else_block, NULL, zero);
+ }
+ 
+ void
+ verify_code (gcc_jit_context *ctxt, gcc_jit_result *result)
+ {
+   CHECK_NON_NULL (result);
+ }
diff -Nrcpad gcc-17-20260614/gcc/testsuite/jit.dg/test-reflection.c gcc-17-20260621/gcc/testsuite/jit.dg/test-reflection.c
*** gcc-17-20260614/gcc/testsuite/jit.dg/test-reflection.c	Sun Jun 14 22:32:15 2026
--- gcc-17-20260621/gcc/testsuite/jit.dg/test-reflection.c	Sun Jun 21 22:32:14 2026
*************** verify_code (gcc_jit_context *ctxt, gcc_
*** 24,38 ****
      gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_DOUBLE);
    CHECK_VALUE (gcc_jit_function_get_return_type(builtin_sin), double_type);
    CHECK (!gcc_jit_type_is_integral(double_type));
  
    gcc_jit_type *bool_type =
      gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_BOOL);
!   CHECK (gcc_jit_type_is_bool(bool_type));
!   CHECK (!gcc_jit_type_is_integral(bool_type));
  
    gcc_jit_type *aligned_bool_type =
      gcc_jit_type_get_aligned(gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_BOOL), 8);
!   CHECK (gcc_jit_type_is_bool(aligned_bool_type));
    CHECK (bool_type != aligned_bool_type);
    CHECK_VALUE (gcc_jit_type_unqualified(aligned_bool_type), bool_type);
  
--- 24,91 ----
      gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_DOUBLE);
    CHECK_VALUE (gcc_jit_function_get_return_type(builtin_sin), double_type);
    CHECK (!gcc_jit_type_is_integral(double_type));
+   CHECK (gcc_jit_type_is_floating_point (double_type));
+ 
+   gcc_jit_type *float_type =
+     gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_FLOAT);
+   CHECK (!gcc_jit_type_is_bool (float_type));
+   CHECK (!gcc_jit_type_is_integral (float_type));
+   CHECK (gcc_jit_type_is_floating_point (float_type));
+ 
+   gcc_jit_target_info *target_info = gcc_jit_context_get_target_info (ctxt);
+   if (target_info != NULL &&
+     gcc_jit_target_info_supports_target_dependent_type (target_info,
+       GCC_JIT_TYPE_FLOAT16))
+   {
+     gcc_jit_type *float16_type
+       = gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_FLOAT16);
+     CHECK (!gcc_jit_type_is_bool (float16_type));
+     CHECK (!gcc_jit_type_is_integral (float16_type));
+     CHECK (gcc_jit_type_is_floating_point (float16_type));
+   }
+ 
+   if (target_info != NULL &&
+     gcc_jit_target_info_supports_target_dependent_type (target_info,
+       GCC_JIT_TYPE_FLOAT32))
+   {
+     gcc_jit_type *float32_type
+       = gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_FLOAT32);
+     CHECK (!gcc_jit_type_is_bool (float32_type));
+     CHECK (!gcc_jit_type_is_integral (float32_type));
+     CHECK (gcc_jit_type_is_floating_point (float32_type));
+   }
+ 
+   if (target_info != NULL &&
+     gcc_jit_target_info_supports_target_dependent_type (target_info,
+       GCC_JIT_TYPE_FLOAT64))
+   {
+     gcc_jit_type *float64_type
+       = gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_FLOAT64);
+     CHECK (!gcc_jit_type_is_bool (float64_type));
+     CHECK (!gcc_jit_type_is_integral (float64_type));
+     CHECK (gcc_jit_type_is_floating_point (float64_type));
+   }
+ 
+   if (target_info != NULL &&
+     gcc_jit_target_info_supports_target_dependent_type (target_info,
+       GCC_JIT_TYPE_FLOAT128))
+   {
+     gcc_jit_type *float128_type
+       = gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_FLOAT128);
+     CHECK (!gcc_jit_type_is_bool (float128_type));
+     CHECK (!gcc_jit_type_is_integral (float128_type));
+     CHECK (gcc_jit_type_is_floating_point (float128_type));
+   }
  
    gcc_jit_type *bool_type =
      gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_BOOL);
!   CHECK (gcc_jit_type_is_bool (bool_type));
!   CHECK (!gcc_jit_type_is_integral (bool_type));
!   CHECK (!gcc_jit_type_is_floating_point (bool_type));
  
    gcc_jit_type *aligned_bool_type =
      gcc_jit_type_get_aligned(gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_BOOL), 8);
!   CHECK (gcc_jit_type_is_bool (aligned_bool_type));
    CHECK (bool_type != aligned_bool_type);
    CHECK_VALUE (gcc_jit_type_unqualified(aligned_bool_type), bool_type);
  
*************** verify_code (gcc_jit_context *ctxt, gcc_
*** 42,56 ****
--- 95,113 ----
    gcc_jit_type *int64 =
      gcc_jit_context_get_int_type(ctxt, 8, 1);
    CHECK (gcc_jit_type_is_integral(int64));
+   CHECK (!gcc_jit_type_is_floating_point(int64));
    gcc_jit_type *uint64 =
      gcc_jit_context_get_int_type(ctxt, 8, 0);
    CHECK (gcc_jit_type_is_integral(uint64));
+   CHECK (!gcc_jit_type_is_floating_point(uint64));
    gcc_jit_type *int8 =
      gcc_jit_context_get_int_type(ctxt, 1, 1);
    CHECK (gcc_jit_type_is_integral(int8));
+   CHECK (!gcc_jit_type_is_floating_point(int8));
    gcc_jit_type *uint8 =
      gcc_jit_context_get_int_type(ctxt, 1, 0);
    CHECK (gcc_jit_type_is_integral(uint8));
+   CHECK (!gcc_jit_type_is_floating_point(uint8));
  
    CHECK (!gcc_jit_type_dyncast_vector(double_type));
    gcc_jit_type *vec_type = gcc_jit_type_get_vector (double_type, 4);
diff -Nrcpad gcc-17-20260614/gcc/testsuite/jit.dg/test-types.c gcc-17-20260621/gcc/testsuite/jit.dg/test-types.c
*** gcc-17-20260614/gcc/testsuite/jit.dg/test-types.c	Sun Jun 14 22:32:15 2026
--- gcc-17-20260621/gcc/testsuite/jit.dg/test-types.c	Sun Jun 21 22:32:14 2026
***************
*** 9,14 ****
--- 9,16 ----
  
  #include "harness.h"
  
+ typedef int v4si __attribute__ ((__vector_size__ (16)));
+ 
  struct zoo
  {
    void *m_void_ptr;
*************** struct zoo
*** 56,61 ****
--- 58,65 ----
  
    size_t m_size_t;
  
+   v4si m_vector;
+ 
    FILE *m_FILE_ptr;
  };
  
*************** create_code (gcc_jit_context *ctxt, void
*** 78,83 ****
--- 82,89 ----
    */
    gcc_jit_type *void_type =
      gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_VOID);
+   gcc_jit_type *int_type =
+     gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_INT);
  
  #define CREATE_FIELD(TYPE, NAME) \
    gcc_jit_context_new_field ( \
*************** create_code (gcc_jit_context *ctxt, void
*** 163,168 ****
--- 169,178 ----
    gcc_jit_field *field_m_size_t =
      CREATE_FIELD (GCC_JIT_TYPE_SIZE_T, "m_size_t");
  
+   gcc_jit_type *vector_type = gcc_jit_type_get_vector (int_type, 4);
+   gcc_jit_field *field_m_vector =
+     gcc_jit_context_new_field ( ctxt, NULL, vector_type, "m_vector");
+ 
    gcc_jit_field *field_m_FILE_ptr =
      CREATE_FIELD (GCC_JIT_TYPE_FILE_PTR, "m_FILE_ptr");
  
*************** create_code (gcc_jit_context *ctxt, void
*** 214,219 ****
--- 224,231 ----
  
      field_m_size_t,
  
+     field_m_vector,
+ 
      field_m_FILE_ptr
    };
  
*************** create_code (gcc_jit_context *ctxt, void
*** 411,416 ****
--- 423,444 ----
        gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_SIZE_T),
        sizeof (struct zoo)))
  
+   gcc_jit_type *aligned_int = gcc_jit_type_get_aligned (int_type, 4);
+   gcc_jit_type *aligned_vector_type = gcc_jit_type_get_vector (aligned_int, 4);
+   gcc_jit_rvalue *value = gcc_jit_context_new_rvalue_from_int (
+       ctxt,
+       aligned_int, 40);
+   gcc_jit_rvalue* array[4] = {
+       value, value, value, value,
+   };
+   ASSIGN(field_m_vector,
+     gcc_jit_context_new_rvalue_from_vector (
+       ctxt,
+       NULL,
+       aligned_vector_type,
+       4,
+       array))
+ 
    ASSIGN(field_m_FILE_ptr,
      gcc_jit_context_new_rvalue_from_ptr (
        ctxt,
diff -Nrcpad gcc-17-20260614/gcc/testsuite/lib/g++-dg.exp gcc-17-20260621/gcc/testsuite/lib/g++-dg.exp
*** gcc-17-20260614/gcc/testsuite/lib/g++-dg.exp	Sun Jun 14 22:32:15 2026
--- gcc-17-20260621/gcc/testsuite/lib/g++-dg.exp	Sun Jun 21 22:32:14 2026
*************** proc g++-std-flags { test } {
*** 78,84 ****
  	    # The order of this list is significant: first $cxx_default,
  	    # then the oldest and newest, then others in rough order of
  	    # importance based on test coverage and usage.
! 	    foreach ver { 20 98 26 17 11 14 23 } {
  		set cmpver $ver
  		if { $ver == 98 } { set cmpver 03 }
  		if { [llength $std_list] < 3
--- 78,84 ----
  	    # The order of this list is significant: first $cxx_default,
  	    # then the oldest and newest, then others in rough order of
  	    # importance based on test coverage and usage.
! 	    foreach ver { 20 98 29 17 11 14 23 26 } {
  		set cmpver $ver
  		if { $ver == 98 } { set cmpver 03 }
  		if { [llength $std_list] < 3
diff -Nrcpad gcc-17-20260614/gcc/testsuite/lib/scanasm.exp gcc-17-20260621/gcc/testsuite/lib/scanasm.exp
*** gcc-17-20260614/gcc/testsuite/lib/scanasm.exp	Sun Jun 14 22:32:15 2026
--- gcc-17-20260621/gcc/testsuite/lib/scanasm.exp	Sun Jun 21 22:32:14 2026
*************** proc append_encoding_arg { args enc } {
*** 37,42 ****
--- 37,57 ----
      return $args
  }
  
+ # Remove LTO-prefixed sections from TEXT.
+ 
+ proc remove_lto_sections { text } {
+     set p1 {(^|\n)[[:space:]]*\.section[[:space:]]*"?}
+     set lto_sect_prefix {\.gnu\.lto_}
+     set p3 {(?:[^\n]*\n(?![[:space:]]*\.(section|text|data|bss)))*[^\n]*\n}
+     if { [istarget *-*-darwin*] } {
+         # Darwin/Mach-O LTO sections are in the __GNU_LTO segment.
+         set lto_sect_prefix {__GNU_LTO}
+     }
+     set patt ${p1}${lto_sect_prefix}${p3}
+     regsub -all ${patt} $text {\1} text
+     return $text
+ }
+ 
  # Scan the OUTPUT_FILE for a pattern.  If it is present and POSITIVE
  # is non-zero, or it is not present and POSITIVE is zero, the test
  # passes.  The ORIG_ARGS is the list of arguments provided by dg-final
*************** proc dg-scan { name positive testcase ou
*** 80,89 ****
      set text [read $fd]
      close $fd
      if { [string compare -length 14 $name scan-assembler] == 0 } {
!       # Remove LTO sections.
!       # ??? Somehow, .*? is still greedy.
!       # regsub -all {(^|\n)[[:space:]]*\.section[[:space:]]*"?\.gnu\.lto_.*?\n(?=[[:space:]]*\.text\n)} $text {\1} text
!       regsub -all {(^|\n)[[:space:]]*\.section[[:space:]]*"?\.gnu\.lto_(?:[^\n]*\n(?![[:space:]]*\.(section|text|data|bss)))*[^\n]*\n} $text {\1} text
      }
  
      set match [regexp -- $pattern $text]
--- 95,102 ----
      set text [read $fd]
      close $fd
      if { [string compare -length 14 $name scan-assembler] == 0 } {
!         # Remove LTO sections.
!         set text [remove_lto_sections $text]
      }
  
      set match [regexp -- $pattern $text]
*************** proc scan-assembler-times { args } {
*** 550,557 ****
      set fd [open $output_file r]
      set text [read $fd]
      close $fd
!     regsub -all {(^|\n)[[:space:]]*\.section[[:space:]]*"?\.gnu\.lto_(?:[^\n]*\n(?![[:space:]]*\.(section|text|data|bss)))*[^\n]*\n} $text {\1} text
! 
      set result_count [regexp -all -- $pattern $text]
      if {$result_count == $times} {
  	pass "$testcase scan-assembler-times $pp_pattern $times"
--- 563,570 ----
      set fd [open $output_file r]
      set text [read $fd]
      close $fd
!     # Remove LTO sections.
!     set text [remove_lto_sections $text]
      set result_count [regexp -all -- $pattern $text]
      if {$result_count == $times} {
  	pass "$testcase scan-assembler-times $pp_pattern $times"
*************** proc scan-assembler-bound { args } {
*** 614,620 ****
      set fd [open $output_file r]
      set text [read $fd]
      close $fd
!     regsub -all {(^|\n)[[:space:]]*\.section[[:space:]]*"?\.gnu\.lto_(?:[^\n]*\n(?![[:space:]]*\.(section|text|data|bss)))*[^\n]*\n} $text {\1} text
  
      set result_count [regexp -all -- $pattern $text]
      if [expr $result_count $cmp $bound] {
--- 627,633 ----
      set fd [open $output_file r]
      set text [read $fd]
      close $fd
!     set text [remove_lto_sections $text]
  
      set result_count [regexp -all -- $pattern $text]
      if [expr $result_count $cmp $bound] {
*************** proc scan-assembler-dem { args } {
*** 676,682 ****
  
      set output [remote_exec host "$cxxfilt" "" "$output_file"]
      set text [lindex $output 1]
!     regsub -all {(^|\n)[[:space:]]*\.section[[:space:]]*"?\.gnu\.lto_(?:[^\n]*\n(?![[:space:]]*\.(section|text|data|bss)))*[^\n]*\n} $text {\1} text
  
      if [regexp -- $pattern $text] {
  	pass "$testcase scan-assembler-dem $pp_pattern"
--- 689,695 ----
  
      set output [remote_exec host "$cxxfilt" "" "$output_file"]
      set text [lindex $output 1]
!     set text [remove_lto_sections $text]
  
      if [regexp -- $pattern $text] {
  	pass "$testcase scan-assembler-dem $pp_pattern"
*************** proc scan-assembler-dem-not { args } {
*** 733,739 ****
  
      set output [remote_exec host "$cxxfilt" "" "$output_file"]
      set text [lindex $output 1]
!     regsub -all {(^|\n)[[:space:]]*\.section[[:space:]]*"?\.gnu\.lto_(?:[^\n]*\n(?![[:space:]]*\.(section|text|data|bss)))*[^\n]*\n} $text {\1} text
  
      if ![regexp -- $pattern $text] {
  	pass "$testcase scan-assembler-dem-not $pp_pattern"
--- 746,752 ----
  
      set output [remote_exec host "$cxxfilt" "" "$output_file"]
      set text [lindex $output 1]
!     set text [remove_lto_sections $text]
  
      if ![regexp -- $pattern $text] {
  	pass "$testcase scan-assembler-dem-not $pp_pattern"
diff -Nrcpad gcc-17-20260614/gcc/testsuite/lib/target-supports.exp gcc-17-20260621/gcc/testsuite/lib/target-supports.exp
*** gcc-17-20260614/gcc/testsuite/lib/target-supports.exp	Sun Jun 14 22:32:15 2026
--- gcc-17-20260621/gcc/testsuite/lib/target-supports.exp	Sun Jun 21 22:32:14 2026
*************** proc check_weak_available { } {
*** 335,341 ****
  
      # VxWorks supports it only since VxWorks 7 (assumed >= r2) for RTPs.
      # Kernel mode works fine as well for our testsuite's purposes.
!  
      if { [istarget *-*-vxworks*] } {
  	return [istarget *-*-vxworks7*]
      }
--- 335,341 ----
  
      # VxWorks supports it only since VxWorks 7 (assumed >= r2) for RTPs.
      # Kernel mode works fine as well for our testsuite's purposes.
! 
      if { [istarget *-*-vxworks*] } {
  	return [istarget *-*-vxworks7*]
      }
*************** proc check_effective_target_elf { } {
*** 560,565 ****
--- 560,575 ----
      }
  }
  
+ # Returns 1 if the target uses the Mach-O object format, 0 otherwise.
+ 
+ proc check_effective_target_macho { } {
+     if { [gcc_target_object_format] == "mach-o" } {
+ 	return 1;
+     } else {
+ 	return 0;
+     }
+ }
+ 
  # Returns 1 if the target uses the PE/COFF object format, 0 otherwise.
  
  proc check_effective_target_pe { } {
*************** foreach { armfunc armflag armdefs } {
*** 6336,6342 ****
  #        /* { dg-add-options arm_cpu_xscale } */
  #	 /* { dg-require-effective-target arm_xscale_multilib } */
  
! # NOTE: -mcpu does not override -mtune, so to ensure the tuning is consistent 
  # for tests using these flags all entries should set -mcpu and -mtune explicitly
  
  # This table should only be used to set -mcpu= (and associated
--- 6346,6352 ----
  #        /* { dg-add-options arm_cpu_xscale } */
  #	 /* { dg-require-effective-target arm_xscale_multilib } */
  
! # NOTE: -mcpu does not override -mtune, so to ensure the tuning is consistent
  # for tests using these flags all entries should set -mcpu and -mtune explicitly
  
  # This table should only be used to set -mcpu= (and associated
*************** proc check_effective_target_popcount { }
*** 10409,10414 ****
--- 10419,10434 ----
      } "" ]
  }
  
+ 
+ # Return 1 if target supports spaceship optab
+ 
+ proc check_effective_target_spaceship { } {
+   return [expr { [check_effective_target_x86]
+                    || [istarget aarch64*-*-*]
+                    || [check_effective_target_s390_mvx] }]
+ }
+ 
+ 
  # Return 1 if the target supports clz on int.
  
  proc check_effective_target_clz { } {
*************** proc check_effective_target_c++26_only {
*** 12540,12546 ****
  }
  
  proc check_effective_target_c++26 { } {
!     return [check_effective_target_c++26_only]
  }
  
  # Check for C++ Concepts support, i.e. -fconcepts flag.
--- 12560,12594 ----
  }
  
  proc check_effective_target_c++26 { } {
!     if [check_effective_target_c++26_only] {
! 	return 1
!     }
!     return [check_effective_target_c++29]
! }
! 
! proc check_effective_target_c++26_down { } {
!     if ![check_effective_target_c++] {
! 	return 0
!     }
!     return [expr ![check_effective_target_c++29] ]
! }
! 
! proc check_effective_target_c++29_only { } {
!     global cxx_default
!     if ![check_effective_target_c++] {
! 	return 0
!     }
!     if [check-flags { { } { } { -std=c++29 -std=gnu++29 -std=c++2d -std=gnu++2d } }] {
! 	return 1
!     }
!     if { $cxx_default == "c++29" && [check-flags { { } { } { } { -std=* } }] } {
! 	return 1
!     }
!     return 0
! }
! 
! proc check_effective_target_c++29 { } {
!     return [check_effective_target_c++29_only]
  }
  
  # Check for C++ Concepts support, i.e. -fconcepts flag.
*************** proc check_effective_target_autoincdec {
*** 13737,13743 ****
  #
  proc check_effective_target_supports_stack_clash_protection { } {
  
!     if { [check_effective_target_x86] 
  	  || [istarget powerpc*-*-*] || [istarget rs6000*-*-*]
  	  || [istarget aarch64*-**] || [istarget s390*-*-*]
  	  || [istarget loongarch64*-**] || [istarget riscv64*-**] } {
--- 13785,13791 ----
  #
  proc check_effective_target_supports_stack_clash_protection { } {
  
!     if { [check_effective_target_x86]
  	  || [istarget powerpc*-*-*] || [istarget rs6000*-*-*]
  	  || [istarget aarch64*-**] || [istarget s390*-*-*]
  	  || [istarget loongarch64*-**] || [istarget riscv64*-**] } {
*************** proc check_nvptx_default_ptx_isa_version
*** 14752,14758 ****
  	     "#error unsupported" \
  	     "#endif"]
      set src [join $src "\n"]
!     
      set res [check_no_compiler_messages $name assembly $src ""]
  
      return $res
--- 14800,14806 ----
  	     "#error unsupported" \
  	     "#endif"]
      set src [join $src "\n"]
! 
      set res [check_no_compiler_messages $name assembly $src ""]
  
      return $res
*************** proc check_nvptx_default_ptx_isa_target_
*** 14787,14793 ****
  	     "#error unsupported" \
  	     "#endif"]
      set src [join $src "\n"]
!     
      set res [check_no_compiler_messages $name assembly $src ""]
  
      return $res
--- 14835,14841 ----
  	     "#error unsupported" \
  	     "#endif"]
      set src [join $src "\n"]
! 
      set res [check_no_compiler_messages $name assembly $src ""]
  
      return $res
*************** proc check_effective_target_alarm { } {
*** 14902,14908 ****
  	#include <stdlib.h>
  	#include <unistd.h>
  	void do_exit(int i) { exit (0); }
! 	int main (void) { 
  	  struct sigaction s;
  	  sigemptyset (&s.sa_mask);
  	  s.sa_handler = exit;
--- 14950,14956 ----
  	#include <stdlib.h>
  	#include <unistd.h>
  	void do_exit(int i) { exit (0); }
! 	int main (void) {
  	  struct sigaction s;
  	  sigemptyset (&s.sa_mask);
  	  s.sa_handler = exit;
diff -Nrcpad gcc-17-20260614/gcc/toplev.cc gcc-17-20260621/gcc/toplev.cc
*** gcc-17-20260614/gcc/toplev.cc	Sun Jun 14 22:32:15 2026
--- gcc-17-20260621/gcc/toplev.cc	Sun Jun 21 22:32:14 2026
*************** toplev::main (int argc, char **argv)
*** 2304,2310 ****
--- 2304,2314 ----
  {
    /* Parsing and gimplification sometimes need quite large stack.
       Increase stack size limits if possible.  */
+ #ifdef __SANITIZE_ADDRESS__
+   stack_limit_increase (128 * 1024 * 1024);
+ #else
    stack_limit_increase (64 * 1024 * 1024);
+ #endif
  
    /* Stash a copy of the original argv before expansion
       for use by SARIF output.  */
diff -Nrcpad gcc-17-20260614/gcc/tree-nested.cc gcc-17-20260621/gcc/tree-nested.cc
*** gcc-17-20260614/gcc/tree-nested.cc	Sun Jun 14 22:32:15 2026
--- gcc-17-20260621/gcc/tree-nested.cc	Sun Jun 21 22:32:14 2026
*************** lookup_field_for_decl (struct nesting_in
*** 411,417 ****
  	  SET_DECL_ALIGN (field, DECL_ALIGN (decl));
  	  DECL_USER_ALIGN (field) = DECL_USER_ALIGN (decl);
  	  DECL_IGNORED_P (field) = DECL_IGNORED_P (decl);
! 	  DECL_NONADDRESSABLE_P (field) = !TREE_ADDRESSABLE (decl);
  	  TREE_THIS_VOLATILE (field) = TREE_THIS_VOLATILE (decl);
  	  copy_warning (field, decl);
  
--- 411,421 ----
  	  SET_DECL_ALIGN (field, DECL_ALIGN (decl));
  	  DECL_USER_ALIGN (field) = DECL_USER_ALIGN (decl);
  	  DECL_IGNORED_P (field) = DECL_IGNORED_P (decl);
! 	  /* Even if the address of the DECL is not needed, when it is of an
! 	     aggregate type, it may contain addressable fields whose address
! 	     will be taken later.  */
! 	  DECL_NONADDRESSABLE_P (field)
! 	    = !TREE_ADDRESSABLE (decl) && !AGGREGATE_TYPE_P (TREE_TYPE (decl));
  	  TREE_THIS_VOLATILE (field) = TREE_THIS_VOLATILE (decl);
  	  copy_warning (field, decl);
  
diff -Nrcpad gcc-17-20260614/gcc/tree-ssa-loop-im.cc gcc-17-20260621/gcc/tree-ssa-loop-im.cc
*** gcc-17-20260614/gcc/tree-ssa-loop-im.cc	Sun Jun 14 22:32:15 2026
--- gcc-17-20260621/gcc/tree-ssa-loop-im.cc	Sun Jun 21 22:32:14 2026
*************** mem_ref_hasher::hash (const im_mem_ref *
*** 202,235 ****
  inline bool
  mem_ref_hasher::equal (const im_mem_ref *mem1, const ao_ref *obj2)
  {
!   if (obj2->max_size_known_p ())
!     return (mem1->ref_decomposed
! 	    && ((TREE_CODE (mem1->mem.base) == MEM_REF
! 		 && TREE_CODE (obj2->base) == MEM_REF
! 		 && operand_equal_p (TREE_OPERAND (mem1->mem.base, 0),
! 				     TREE_OPERAND (obj2->base, 0), 0)
! 		 && known_eq (mem_ref_offset (mem1->mem.base) * BITS_PER_UNIT + mem1->mem.offset,
! 			      mem_ref_offset (obj2->base) * BITS_PER_UNIT + obj2->offset))
! 		|| (operand_equal_p (mem1->mem.base, obj2->base, 0)
! 		    && known_eq (mem1->mem.offset, obj2->offset)))
! 	    && known_eq (mem1->mem.size, obj2->size)
! 	    && known_eq (mem1->mem.max_size, obj2->max_size)
! 	    && mem1->mem.volatile_p == obj2->volatile_p
! 	    && (mem1->mem.ref_alias_set == obj2->ref_alias_set
! 		/* We are not canonicalizing alias-sets but for the
! 		   special-case we didn't canonicalize yet and the
! 		   incoming ref is a alias-set zero MEM we pick
! 		   the correct one already.  */
! 		|| (!mem1->ref_canonical
! 		    && (TREE_CODE (obj2->ref) == MEM_REF
! 			|| TREE_CODE (obj2->ref) == TARGET_MEM_REF)
! 		    && obj2->ref_alias_set == 0)
! 		/* Likewise if there's a canonical ref with alias-set zero.  */
! 		|| (mem1->ref_canonical && mem1->mem.ref_alias_set == 0))
! 	    && types_compatible_p (TREE_TYPE (mem1->mem.ref),
! 				   TREE_TYPE (obj2->ref)));
!   else
      return operand_equal_p (mem1->mem.ref, obj2->ref, 0);
  }
  
  
--- 202,244 ----
  inline bool
  mem_ref_hasher::equal (const im_mem_ref *mem1, const ao_ref *obj2)
  {
!   if (!obj2->max_size_known_p ())
      return operand_equal_p (mem1->mem.ref, obj2->ref, 0);
+ 
+   if (!mem1->ref_decomposed)
+     return false;
+ 
+   /* obj2 is now known decomposable and the hash is based on offset,
+      size and base, matching gather_mem_refs_stmt.  */
+   bool refs_equal
+     = ((TREE_CODE (mem1->mem.base) == MEM_REF
+ 	&& TREE_CODE (obj2->base) == MEM_REF
+ 	&& operand_equal_p (TREE_OPERAND (mem1->mem.base, 0),
+ 			    TREE_OPERAND (obj2->base, 0), 0)
+ 	&& known_eq (mem_ref_offset (mem1->mem.base) * BITS_PER_UNIT
+ 		     + mem1->mem.offset,
+ 		     mem_ref_offset (obj2->base) * BITS_PER_UNIT
+ 		     + obj2->offset))
+        || (operand_equal_p (mem1->mem.base, obj2->base, 0)
+ 	   && known_eq (mem1->mem.offset, obj2->offset)));
+ 
+   return (refs_equal
+ 	  && known_eq (mem1->mem.size, obj2->size)
+ 	  && known_eq (mem1->mem.max_size, obj2->max_size)
+ 	  && mem1->mem.volatile_p == obj2->volatile_p
+ 	  && (mem1->mem.ref_alias_set == obj2->ref_alias_set
+ 	      /* We are not canonicalizing alias-sets but for the
+ 		 special-case we didn't canonicalize yet and the
+ 		 incoming ref is a alias-set zero MEM we pick
+ 		 the correct one already.  */
+ 	      || (!mem1->ref_canonical
+ 		  && (TREE_CODE (obj2->ref) == MEM_REF
+ 		      || TREE_CODE (obj2->ref) == TARGET_MEM_REF)
+ 		  && obj2->ref_alias_set == 0)
+ 	      /* Likewise if there's a canonical ref with alias-set zero.  */
+ 	      || (mem1->ref_canonical && mem1->mem.ref_alias_set == 0))
+ 	  && types_compatible_p (TREE_TYPE (mem1->mem.ref),
+ 				 TREE_TYPE (obj2->ref)));
  }
  
  
*************** make_pass_lim (gcc::context *ctxt)
*** 3866,3869 ****
    return new pass_lim (ctxt);
  }
  
- 
--- 3875,3877 ----
diff -Nrcpad gcc-17-20260614/gcc/tree-ssa-loop-ivopts.cc gcc-17-20260621/gcc/tree-ssa-loop-ivopts.cc
*** gcc-17-20260614/gcc/tree-ssa-loop-ivopts.cc	Sun Jun 14 22:32:15 2026
--- gcc-17-20260621/gcc/tree-ssa-loop-ivopts.cc	Sun Jun 21 22:32:14 2026
*************** alloc_iv (struct ivopts_data *data, tree
*** 1162,1169 ****
  					      sizeof (struct iv));
    gcc_assert (step != NULL_TREE);
  
!   /* Canonicalize the address expression in base if it were an unsigned
!       computation. That leads to more equalities being detected and results in:
  
         1) More accurate cost can be computed for address expressions;
         2) Duplicate candidates won't be created for bases in different
--- 1162,1169 ----
  					      sizeof (struct iv));
    gcc_assert (step != NULL_TREE);
  
!   /* Canonicalize the address expression in base.
!      That leads to more equalities being detected and results in:
  
         1) More accurate cost can be computed for address expressions;
         2) Duplicate candidates won't be created for bases in different
*************** alloc_iv (struct ivopts_data *data, tree
*** 1171,1180 ****
         3) Duplicate candidates won't be created for IV expressions that differ
  	  only in their sign.  */
    aff_tree comb;
-   STRIP_NOPS (expr);
-   expr = fold_convert (unsigned_type_for (TREE_TYPE (expr)), expr);
    tree_to_aff_combination (expr, TREE_TYPE (expr), &comb);
!   base = fold_convert (TREE_TYPE (base), aff_combination_to_tree (&comb));
  
    iv->base = base;
    iv->base_object = determine_base_object (data, base);
--- 1171,1178 ----
         3) Duplicate candidates won't be created for IV expressions that differ
  	  only in their sign.  */
    aff_tree comb;
    tree_to_aff_combination (expr, TREE_TYPE (expr), &comb);
!   base = aff_combination_to_tree (&comb);
  
    iv->base = base;
    iv->base_object = determine_base_object (data, base);
diff -Nrcpad gcc-17-20260614/gcc/tree-ssa-loop-niter.cc gcc-17-20260621/gcc/tree-ssa-loop-niter.cc
*** gcc-17-20260614/gcc/tree-ssa-loop-niter.cc	Sun Jun 14 22:32:15 2026
--- gcc-17-20260621/gcc/tree-ssa-loop-niter.cc	Sun Jun 21 22:32:14 2026
*************** end:
*** 332,339 ****
    mpz_clear (offc1);
  }
  
! /* Stores estimate on the minimum/maximum value of the expression VAR + OFF
!    in TYPE to MIN and MAX.  */
  
  static void
  determine_value_range (class loop *loop, tree type, tree var, mpz_t off,
--- 332,340 ----
    mpz_clear (offc1);
  }
  
! /* Stores estimates of the minimum and maximum values of the expression
!    VAR + OFF in TYPE to MIN and MAX.  The estimates are valid on entry
!    to LOOP, i.e. on the loop preheader edge.  */
  
  static void
  determine_value_range (class loop *loop, tree type, tree var, mpz_t off,
*************** determine_value_range (class loop *loop,
*** 356,362 ****
    get_type_static_bounds (type, min, max);
  
    /* See if we have some range info from VRP.  */
!   if (TREE_CODE (var) == SSA_NAME && INTEGRAL_TYPE_P (type))
      {
        edge e = loop_preheader_edge (loop);
        signop sgn = TYPE_SIGN (type);
--- 357,363 ----
    get_type_static_bounds (type, min, max);
  
    /* See if we have some range info from VRP.  */
!   if (INTEGRAL_TYPE_P (type))
      {
        edge e = loop_preheader_edge (loop);
        signop sgn = TYPE_SIGN (type);
*************** determine_value_range (class loop *loop,
*** 364,370 ****
  
        /* Either for VAR itself...  */
        int_range_max var_range (TREE_TYPE (var));
!       get_range_query (cfun)->range_of_expr (var_range, var);
        if (var_range.varying_p () || var_range.undefined_p ())
  	rtype = VR_VARYING;
        else
--- 365,371 ----
  
        /* Either for VAR itself...  */
        int_range_max var_range (TREE_TYPE (var));
!       get_range_query (cfun)->range_on_edge (var_range, e, var);
        if (var_range.varying_p () || var_range.undefined_p ())
  	rtype = VR_VARYING;
        else
*************** determine_value_range (class loop *loop,
*** 382,389 ****
  	{
  	  gphi *phi = gsi.phi ();
  	  if (PHI_ARG_DEF_FROM_EDGE (phi, e) == var
! 	      && get_range_query (cfun)->range_of_expr (phi_range,
! 						    gimple_phi_result (phi))
  	      && !phi_range.varying_p ()
  	      && !phi_range.undefined_p ())
  	    {
--- 383,390 ----
  	{
  	  gphi *phi = gsi.phi ();
  	  if (PHI_ARG_DEF_FROM_EDGE (phi, e) == var
! 	      && get_range_query (cfun)->range_on_edge (phi_range,
! 						    e, gimple_phi_result (phi))
  	      && !phi_range.varying_p ()
  	      && !phi_range.undefined_p ())
  	    {
*************** determine_value_range (class loop *loop,
*** 404,410 ****
  		  if (wi::gt_p (minv, maxv, sgn))
  		    {
  		      int_range_max vr (TREE_TYPE (var));
! 		      get_range_query (cfun)->range_of_expr (vr, var);
  		      if (vr.varying_p () || vr.undefined_p ())
  			rtype = VR_VARYING;
  		      else
--- 405,411 ----
  		  if (wi::gt_p (minv, maxv, sgn))
  		    {
  		      int_range_max vr (TREE_TYPE (var));
! 		      get_range_query (cfun)->range_on_edge (vr, e, var);
  		      if (vr.varying_p () || vr.undefined_p ())
  			rtype = VR_VARYING;
  		      else
diff -Nrcpad gcc-17-20260614/gcc/tree-ssa-math-opts.cc gcc-17-20260621/gcc/tree-ssa-math-opts.cc
*** gcc-17-20260614/gcc/tree-ssa-math-opts.cc	Sun Jun 14 22:32:15 2026
--- gcc-17-20260621/gcc/tree-ssa-math-opts.cc	Sun Jun 21 22:32:14 2026
*************** along with GCC; see the file COPYING3.
*** 115,120 ****
--- 115,121 ----
  #include "domwalk.h"
  #include "tree-ssa-math-opts.h"
  #include "dbgcnt.h"
+ #include "langhooks.h"
  #include "cfghooks.h"
  
  /* This structure represents one basic block that either computes a
*************** extern bool gimple_unsigned_integer_sat_
*** 4124,4129 ****
--- 4125,4131 ----
  extern bool gimple_unsigned_integer_sat_sub (tree, tree*, tree (*)(tree));
  extern bool gimple_unsigned_integer_sat_trunc (tree, tree*, tree (*)(tree));
  extern bool gimple_unsigned_integer_sat_mul (tree, tree*, tree (*)(tree));
+ extern bool gimple_spaceship (tree, tree*, tree (*)(tree));
  
  extern bool gimple_signed_integer_sat_add (tree, tree*, tree (*)(tree));
  extern bool gimple_signed_integer_sat_sub (tree, tree*, tree (*)(tree));
*************** match_saturation_mul (gimple_stmt_iterat
*** 4333,4338 ****
--- 4335,4444 ----
  							ops[1]);
  }
  
+ /* Try to match variants of spaceship operation:
+    <bb 2>
+    if (a_3(D) >= b_4(D)) -- CMP_1
+      goto <bb 3>;
+    else
+      goto <bb 4>;
+ 
+    <bb 3>
+    _1 = a_3(D) > b_4(D); -- CMP_2
+    _5 = (int) _1;
+ 
+    <bb 4>
+    # _2 = PHI <-1(2), _5(3)>
+    =>
+    _2 = .SPACESHIP (a_3(D), b_4(D), -1);
+ 
+    All possible canonical variants of the comparison operator in CMP_1 and
+    CMP_2 has been included in gimple_spaceship function.  */
+ static bool
+ match_spaceship (gimple_stmt_iterator *gsi, gphi *phi)
+ {
+   if (gimple_phi_num_args (phi) != 2)
+     return false;
+   tree ops[2];
+   tree phi_result = gimple_phi_result (phi);
+ 
+   if (!gimple_spaceship (phi_result, ops, NULL))
+     return false;
+ 
+   /* Allow different modes as long as both are integral types.  */
+   if (!INTEGRAL_TYPE_P (TREE_TYPE (phi_result))
+       || !INTEGRAL_TYPE_P (TREE_TYPE (ops[0])))
+     return false;
+ 
+   tree ops_type = TREE_TYPE (ops[0]);
+   machine_mode ops_mode = TYPE_MODE (ops_type);
+   machine_mode promoted_mode = ops_mode;
+   tree promoted_type = ops_type;
+   bool is_unsigned = TYPE_UNSIGNED (ops_type);
+ 
+   /* Check if spaceship optab is available for the operand mode.
+      If not, try promoting to a wider mode that is supported.  */
+   if (optab_handler (spaceship_optab, ops_mode) == CODE_FOR_nothing)
+     {
+       /* Try promoting to wider modes (e.g., QI/HI -> SI -> DI).  */
+       machine_mode wider_mode;
+       FOR_EACH_WIDER_MODE_FROM (wider_mode, ops_mode)
+ 	{
+ 	  if (optab_handler (spaceship_optab, wider_mode)
+ 	      != CODE_FOR_nothing)
+ 	    {
+ 	      /* Check if we can get a type for this mode with matching
+ 		 signedness.  */
+ 	      promoted_type = lang_hooks.types.type_for_mode (wider_mode,
+ 							      is_unsigned);
+ 	      if (promoted_type != NULL_TREE && INTEGRAL_TYPE_P (promoted_type))
+ 		{
+ 		  promoted_mode = wider_mode;
+ 		  break;
+ 		}
+ 	    }
+ 	}
+ 
+       // If no suitable promoted mode found, give up.
+       if (promoted_mode == ops_mode)
+ 	return false;
+     }
+ 
+   /* If promotion is needed, insert conversion statements.
+      We must use GIMPLE assignments rather than fold_convert because
+      gimple_call arguments must be valid GIMPLE values (SSA names or
+      constants), not tree expressions.  */
+   ops[0] = gimple_convert (gsi, true, GSI_SAME_STMT, UNKNOWN_LOCATION,
+ 			   promoted_type, ops[0]);
+   ops[1] = gimple_convert (gsi, true, GSI_SAME_STMT, UNKNOWN_LOCATION,
+ 			   promoted_type, ops[1]);
+ 
+   tree spaceship_arg_3 = is_unsigned ? build_one_cst (integer_type_node)
+     : build_minus_one_cst (integer_type_node);
+ 
+   gcall *call = gimple_build_call_internal (IFN_SPACESHIP, 3, ops[0], ops[1],
+ 					    spaceship_arg_3);
+ 
+   /* SPACESHIP optab always returns signed int (SI mode).
+      Cast to phi_result's type if needed.  */
+   tree call_result_type = integer_type_node;
+   if (!types_compatible_p (TREE_TYPE (phi_result), call_result_type))
+     {
+       tree call_result = make_ssa_name (call_result_type);
+       gimple_call_set_lhs (call, call_result);
+       gsi_insert_before (gsi, call, GSI_SAME_STMT);
+       gassign *cast_stmt = gimple_build_assign (phi_result, NOP_EXPR,
+ 						call_result);
+       gsi_insert_before (gsi, cast_stmt, GSI_SAME_STMT);
+     }
+   else
+     {
+       gimple_call_set_lhs (call, phi_result);
+       gsi_insert_before (gsi, call, GSI_SAME_STMT);
+     }
+   return true;
+ }
+ 
+ 
  /*
   * Try to match saturation unsigned sub.
   *  <bb 2> [local count: 1073741824]:
*************** math_opts_dom_walker::after_dom_children
*** 6515,6521 ****
        if (match_saturation_add (&gsi, phi)
  	  || match_saturation_sub (&gsi, phi)
  	  || match_saturation_trunc (&gsi, phi)
! 	  || match_saturation_mul (&gsi, phi))
  	remove_phi_node (&psi, /* release_lhs_p */ false);
      }
  
--- 6621,6628 ----
        if (match_saturation_add (&gsi, phi)
  	  || match_saturation_sub (&gsi, phi)
  	  || match_saturation_trunc (&gsi, phi)
! 	  || match_saturation_mul (&gsi, phi)
! 	  || match_spaceship (&gsi, phi))
  	remove_phi_node (&psi, /* release_lhs_p */ false);
      }
  
diff -Nrcpad gcc-17-20260614/gcc/tree-ssa-phiopt.cc gcc-17-20260621/gcc/tree-ssa-phiopt.cc
*** gcc-17-20260614/gcc/tree-ssa-phiopt.cc	Sun Jun 14 22:32:15 2026
--- gcc-17-20260621/gcc/tree-ssa-phiopt.cc	Sun Jun 21 22:32:14 2026
*************** along with GCC; see the file COPYING3.
*** 54,59 ****
--- 54,60 ----
  #include "tree-ssa-dce.h"
  #include "tree-ssa-loop-niter.h"
  #include "gimple-predict.h"
+ #include "alias.h"
  
  /* Return the singleton PHI in the SEQ of PHIs for edges E0 and E1. */
  
*************** replace_phi_edge_with_variable (basic_bl
*** 221,231 ****
  	      bb->index);
  }
  
! /* Returns true if the operands of arg_op defined from DEF_STMT is profitable to move
     to the usage into the basic block MERGE where the new statement
     will be located.  */
  static bool
! is_factor_profitable (gimple *def_stmt, basic_block merge, const gimple_match_op &arg_op)
  {
    /* The defining statement should be conditional.  */
    if (dominated_by_p (CDI_DOMINATORS, merge,
--- 222,232 ----
  	      bb->index);
  }
  
! /* Returns true if the OPERANDS (OPCOUNTED) defined from DEF_STMT is profitable to move
     to the usage into the basic block MERGE where the new statement
     will be located.  */
  static bool
! is_factor_profitable (gimple *def_stmt, basic_block merge, tree *operands, unsigned opcount)
  {
    /* The defining statement should be conditional.  */
    if (dominated_by_p (CDI_DOMINATORS, merge,
*************** is_factor_profitable (gimple *def_stmt,
*** 283,291 ****
      return true;
  
    /* Loop over all of the operands to see if all are used after anyways.  */
!   for (unsigned i = 0; i < arg_op.num_ops; i++)
      {
!       tree arg = arg_op.ops[i];
        /* If the arg is invariant, then there is
  	 no extending of the live range. */
        if (is_gimple_min_invariant (arg))
--- 284,292 ----
      return true;
  
    /* Loop over all of the operands to see if all are used after anyways.  */
!   for (unsigned i = 0; i < opcount; i++)
      {
!       tree arg = operands[i];
        /* If the arg is invariant, then there is
  	 no extending of the live range. */
        if (is_gimple_min_invariant (arg))
*************** factor_out_conditional_operation (edge e
*** 421,429 ****
  	return false;
  
        /* Check to make sure extending the lifetimes of all operands is ok.  */
!       if (!is_factor_profitable (arg0_def_stmt, merge, arg0_op))
  	return false;
!       if (!is_factor_profitable (arg1_def_stmt, merge, arg1_op))
  	return false;
  
        /* If this was a division and the operand is the divisor
--- 422,432 ----
  	return false;
  
        /* Check to make sure extending the lifetimes of all operands is ok.  */
!       if (!is_factor_profitable (arg0_def_stmt, merge,
! 				 arg0_op.ops, arg0_op.num_ops))
  	return false;
!       if (!is_factor_profitable (arg1_def_stmt, merge,
! 				 arg1_op.ops, arg1_op.num_ops))
  	return false;
  
        /* If this was a division and the operand is the divisor
*************** factor_out_conditional_operation (edge e
*** 492,498 ****
        /* TODO: handle more than just casts here. */
        if (!gimple_assign_cast_p (arg0_def_stmt))
  	return false;
!       if (!is_factor_profitable (arg0_def_stmt, merge, arg0_op))
  	return false;
  
        /* If arg1 is an INTEGER_CST, fold it to new type if it fits, or else
--- 495,501 ----
        /* TODO: handle more than just casts here. */
        if (!gimple_assign_cast_p (arg0_def_stmt))
  	return false;
!       if (!is_factor_profitable (arg0_def_stmt, merge, arg0_op.ops, arg0_op.num_ops))
  	return false;
  
        /* If arg1 is an INTEGER_CST, fold it to new type if it fits, or else
*************** cond_if_else_store_replacement (basic_bl
*** 3651,3656 ****
--- 3654,3938 ----
    return ok;
  }
  
+ /* If PHI at MERGE is a "load PHI", PHI <*P, *Q> whose two arguments are
+    single-use, non-volatile scalar MEM_REF loads reading the same memory state
+    (same VUSE), factor the load out: introduce P' = PHI <P, Q> and a single
+    load *P' replacing the PHI.  No speculative load is introduced (the load uses
+    whichever pointer the taken edge selected).
+    E0/E1 are the middle bbs to MERGE edges.
+    EARLY_P is set when the first phiopt is run.
+    BEFORE_VECT is true if this is before vectorization, where some extra checks
+    are needed for profitability.
+    Returns true if a load was factored out.  */
+ 
+ static bool
+ factor_out_conditional_load (edge e0, edge e1, basic_block merge, gphi *phi,
+ 			     bool early_p, bool before_vect)
+ {
+   /* Factoring out a load during the first phi means we can't
+      trust if this is inside a loop or not; due to before inlining.  */
+   if (early_p)
+     return false;
+ 
+   /* Before vectorization, we don't want to factor out loads unless not inside a loop.  */
+   if (before_vect && bb_loop_depth (merge) != 0)
+     return false;
+ 
+   /* Not a virtual operand. */
+   if (virtual_operand_p (gimple_phi_result (phi))
+       /* can only handle the merge bb having 2 predecessors.  */
+       || gimple_phi_num_args (phi) != 2)
+     return false;
+ 
+   tree arg0 = gimple_phi_arg_def (phi, e0->dest_idx);
+   tree arg1 = gimple_phi_arg_def (phi, e1->dest_idx);
+   /* The load needs to be only used in the phi.  */
+   if (TREE_CODE (arg0) != SSA_NAME || TREE_CODE (arg1) != SSA_NAME
+       || !has_single_use (arg0) || !has_single_use (arg1))
+     return false;
+ 
+   /* Re-derive the loads and pointers validated by the predicate above.  */
+   gimple *load0 = SSA_NAME_DEF_STMT (arg0);
+   gimple *load1 = SSA_NAME_DEF_STMT (arg1);
+ 
+   /* Load have to need to be in the middle bbs.  */
+   if (gimple_bb (load0) != e0->src
+       || gimple_bb (load1) != e1->src)
+     return false;
+ 
+   /* The load needs to be a load with NO volatile ops.  */
+   if (!gimple_assign_load_p (load0) || !gimple_assign_load_p (load1)
+       || gimple_has_volatile_ops (load0) || gimple_has_volatile_ops (load1))
+     return false;
+ 
+   /* Allow for stores/calls before the load.  */
+   if (gphi *vphi = get_virtual_phi (merge))
+     {
+       if (gimple_vuse (load0) != gimple_phi_arg_def (vphi, e0->dest_idx)
+ 	  || gimple_vuse (load1) != gimple_phi_arg_def (vphi, e1->dest_idx))
+ 	return false;
+     }
+   else
+     gcc_assert (gimple_vuse (load0) == gimple_vuse (load1));
+ 
+   tree ref0 = gimple_assign_rhs1 (load0);
+   tree ref1 = gimple_assign_rhs1 (load1);
+ 
+   /* Both must be *P loads of a compatible value type.  The
+      TBAA alias-ptr type carried by MEM_REF operand 1 need not match; it is
+      merged the way get_alias_type_for_stmts does when the load is built.  */
+   if (TREE_CODE (ref0) != MEM_REF || TREE_CODE (ref1) != MEM_REF
+       || !types_compatible_p (TREE_TYPE (ref0), TREE_TYPE (ref1)))
+     return false;
+ 
+   /* The alignment of the two accesses need to be the same.  */
+   if (TYPE_ALIGN (TREE_TYPE (ref0)) != TYPE_ALIGN (TREE_TYPE (ref1)))
+     return false;
+ 
+   tree p0 = TREE_OPERAND (ref0, 0);
+   tree p1 = TREE_OPERAND (ref1, 0);
+   if (!is_factor_profitable (load0, merge, &p0, 1))
+     return false;
+   if (!is_factor_profitable (load1, merge, &p1, 1))
+     return false;
+ 
+   /* Merge the two arms' TBAA info as get_alias_type_for_stmts does: keep the
+      common alias-ptr type and dependence clique/base when the arms agree,
+      otherwise fall back to ptr_type_node (alias-everything) and drop the
+      clique/base, so the combined load conservatively conflicts with any store
+      either original arm could.  */
+   unsigned short clique = MR_DEPENDENCE_CLIQUE (ref0);
+   unsigned short base = MR_DEPENDENCE_BASE (ref0);
+   if (clique != MR_DEPENDENCE_CLIQUE (ref1) || base != MR_DEPENDENCE_BASE (ref1))
+     clique = base = 0;
+   tree atype = TREE_TYPE (TREE_OPERAND (ref0, 1));
+   if (!alias_ptr_types_compatible_p (atype, TREE_TYPE (TREE_OPERAND (ref1, 1))))
+     {
+       atype = ptr_type_node;
+       clique = base = 0;
+     }
+ 
+   tree index0 = TREE_OPERAND (ref0, 1);
+   tree index1 = TREE_OPERAND (ref1, 1);
+   tree newindex;
+   gimple_stmt_iterator gsi;
+   gsi = gsi_after_labels (merge);
+ 
+   /* Try to handle different indices.  */
+   if (operand_equal_p (index0, index1))
+     newindex = fold_convert (atype, index0);
+   /* FIXME: right now non ssa names with different indices are not handled.  */
+   else if (TREE_CODE (p0) != SSA_NAME || TREE_CODE (p1) != SSA_NAME)
+     return false;
+   /* If we have the same base already, just create a phi for the index
+      and the pointer plus will be done in the merge.  */
+   else if (p0 == p1)
+     {
+       index0 = fold_convert (sizetype, index0);
+       index1 = fold_convert (sizetype, index1);
+       tree index = make_ssa_name (sizetype);
+       gphi *pphi = create_phi_node (index, merge);
+       add_phi_arg (pphi, index0, e0, gimple_phi_arg_location (phi, e0->dest_idx));
+       add_phi_arg (pphi, index1, e1, gimple_phi_arg_location (phi, e1->dest_idx));
+       p0 = gimple_build (&gsi, true, GSI_SAME_STMT,
+ 			 UNKNOWN_LOCATION,
+ 			 POINTER_PLUS_EXPR, atype, p0, index);
+       /* Since we already have the same pointer for both, just set that way.
+ 	 Also the index offset is already 0 because we just did the add.  */
+       p1 = p0;
+       newindex = build_zero_cst (atype);
+       if (dump_file && (dump_flags & TDF_DETAILS))
+ 	{
+ 	  fprintf (dump_file, "new PHI ");
+ 	  print_generic_expr (dump_file, index);
+ 	  fprintf (dump_file,
+ 		   " was created for the index.\n");
+ 	}
+     }
+   else
+     {
+       gimple_stmt_iterator gsi_index;
+       /* When the indices are different create 2 new pointers on each
+ 	 of the middle bb right after the original load.
+ 	 Note in the case of 0 index, gimple_build just returns
+ 	 the original pointer.  */
+       gsi_index = gsi_for_stmt (load0);
+       index0 = fold_convert (sizetype, index0);
+       p0 = gimple_build (&gsi_index, false, GSI_SAME_STMT,
+ 			 gimple_location (load0),
+ 			 POINTER_PLUS_EXPR, atype, p0, index0);
+ 
+       gsi_index = gsi_for_stmt (load1);
+       index1 = fold_convert (sizetype, index1);
+       p1 = gimple_build (&gsi_index, false, GSI_SAME_STMT,
+ 			 gimple_location (load1),
+ 			 POINTER_PLUS_EXPR, atype, p1, index1);
+       newindex = build_zero_cst (atype);
+       if (dump_file && (dump_flags & TDF_DETAILS))
+ 	{
+ 	  fprintf (dump_file, "new ptrs ");
+ 	  print_generic_expr (dump_file, p0);
+ 	  fprintf (dump_file, " and ");
+ 	  print_generic_expr (dump_file, p1);
+ 	  fprintf (dump_file,
+ 		   " was created due to different offsets.\n");
+ 	}
+     }
+ 
+   tree newptr;
+   if (p0 != p1)
+     {
+       /* We can't factor out a non-ssa named based load
+ 	 as it might cause a variable not taken an
+ 	 address to become needing the address taken.
+ 	 An example is in go.
+ 	 Were we produce:
+ 	 _24 = PHI <&crypto/tls.cipherSuitesPreferenceOrder(36), &crypto/tls.cipherSuitesPreferenceOrderNoAES(37)>
+ 	 And &crypto/tls.cipherSuitesPreferenceOrder address bit was not set.
+ 	 FIXME: Refine to check ADDRESSABLE bit.  */
+       if (TREE_CODE (p0) != SSA_NAME || TREE_CODE (p1) != SSA_NAME)
+ 	return false;
+       /* Build P' = PHI <P, Q> and the single load result = *P'.  */
+       newptr = make_ssa_name (TREE_TYPE (p0));
+       gphi *pphi = create_phi_node (newptr, merge);
+       add_phi_arg (pphi, p0, e0, gimple_phi_arg_location (phi, e0->dest_idx));
+       add_phi_arg (pphi, p1, e1, gimple_phi_arg_location (phi, e1->dest_idx));
+     }
+    else
+      newptr = p0;
+ 
+   /* Build the combined load RES = *PTR, reusing the PHI result so any range
+      info on it is preserved (as factor_out_conditional_operation does).  */
+   tree nref = build2 (MEM_REF, TREE_TYPE (ref0), newptr, newindex);
+   MR_DEPENDENCE_CLIQUE (nref) = clique;
+   MR_DEPENDENCE_BASE (nref) = base;
+   tree res = gimple_phi_result (phi);
+   gassign *load = gimple_build_assign (res, nref);
+   if (gphi *vphi = get_virtual_phi (merge))
+     gimple_set_vuse (load, gimple_phi_result (vphi));
+   else
+     gimple_set_vuse (load, gimple_vuse (load0));
+   gsi_insert_before (&gsi, load, GSI_SAME_STMT);
+ 
+   /* RES is now defined by the load; drop the original PHI.  */
+   gsi = gsi_for_stmt (phi);
+   gsi_remove (&gsi, true);
+ 
+   /* The two arm loads are now dead.  */
+   gsi = gsi_for_stmt (load0);
+   gsi_remove (&gsi, true);
+   release_defs (load0);
+   gsi = gsi_for_stmt (load1);
+   gsi_remove (&gsi, true);
+   release_defs (load1);
+ 
+   if (dump_file && (dump_flags & TDF_DETAILS))
+     {
+       fprintf (dump_file, "PHI ");
+       print_generic_expr (dump_file, res);
+       fprintf (dump_file,
+ 	       " changed to factor out load from COND_EXPR.\n");
+       if (p0 != p1)
+ 	{
+ 	  fprintf (dump_file, "new PHI ");
+ 	  print_generic_expr (dump_file, newptr);
+ 	  fprintf (dump_file,
+ 		   " was created for the pointers.\n");
+ 	}
+     }
+ 
+   statistics_counter_event (cfun, "factored load out of COND_EXPR", 1);
+   return true;
+ }
+ 
+ /* Factor out operations and stores from the phi of the MERGE block coming
+    in from the edges E1 and E2 if possible. COND_STMT is the conditional
+    statement of the origin block. DIAMOND_P says that both E1 and E2 src
+    are not the origin block but rather 2 middle BBs. EARLY_P is true if
+    this was the early phi-opt.
+    Returns true if a factoring happened. */
+ static bool
+ factor_out_all (edge e1, edge e2, basic_block merge,
+ 		gcond *cond_stmt, bool diamond_p, bool early_p)
+ {
+   bool changed = false;
+   bool do_over;
+   basic_block bb1 = e1->src;
+   basic_block bb2 = e2->src;
+   do
+     {
+       do_over = false;
+       if (diamond_p && get_virtual_phi (merge))
+ 	{
+ 	  if (cond_if_else_store_replacement_limited (bb1, bb2, merge))
+ 	    {
+ 	      changed = true;
+ 	      do_over = true;
+ 	      continue;
+ 	    }
+ 	}
+       if (!single_pred_p (bb1))
+ 	break;
+       gphi_iterator gsi;
+       for (gsi = gsi_start_phis (merge); !gsi_end_p (gsi); gsi_next (&gsi))
+ 	{
+ 	  gphi *phi = *gsi;
+ 	  /* Conditional load elimination can only be on a diamond.  */
+ 	  if ((diamond_p
+ 	       && factor_out_conditional_load (e1, e2, merge, phi, early_p,
+ 					       !fold_before_rtl_expansion_p ()))
+ 	      || factor_out_conditional_operation (e1, e2, merge, phi,
+ 						   cond_stmt, early_p))
+ 	    {
+ 	      changed = true;
+ 	      do_over = true;
+ 	      break;
+ 	    }
+ 	}
+     } while (do_over);
+   return changed;
+ }
+ 
  /* Return TRUE if STMT has a VUSE whose corresponding VDEF is in BB.  */
  
  static bool
*************** pass_phiopt::execute (function *)
*** 4153,4197 ****
  	      && !predictable_edge_p (EDGE_SUCC (bb, 0))
  	      && !predictable_edge_p (EDGE_SUCC (bb, 1)))
  	    hoist_adjacent_loads (bb, bb1, bb2, bb3);
- 
- 	  /* Try to see if there are only store in each side of the if
- 	     and try to remove that; don't do this for -Og.
- 	     With sinking the stores we might end up with empty blocks.  */
- 	  if (EDGE_COUNT (bb3->preds) == 2 && !optimize_debug)
- 	    while (cond_if_else_store_replacement_limited (bb1, bb2, bb3))
- 	      cfgchanged = true;
  	}
  
        gimple_stmt_iterator gsi;
  
        /* Check that we're looking for nested phis.  */
        basic_block merge = diamond_p ? EDGE_SUCC (bb2, 0)->dest : bb2;
        gimple_seq phis = phi_nodes (merge);
  
        if (gimple_seq_empty_p (phis))
  	return;
  
-       /* Factor out operations from the phi if possible. */
-       if (single_pred_p (bb1)
- 	  && EDGE_COUNT (merge->preds) == 2
- 	  && !optimize_debug)
- 	{
- 	  for (gsi = gsi_start (phis); !gsi_end_p (gsi); )
- 	    {
- 	      gphi *phi = as_a <gphi *> (gsi_stmt (gsi));
- 
- 	      if (factor_out_conditional_operation (e1, e2, merge, phi,
- 		  cond_stmt, early_p))
- 		{
- 		  /* Start over if there was an operation that was factored out because the new phi might have another opportunity.  */
- 		  phis = phi_nodes (merge);
- 		  gsi = gsi_start (phis);
- 		}
- 	      else
- 		gsi_next (&gsi);
- 	    }
- 	}
- 
        /* Value replacement can work with more than one PHI
  	 so try that first. */
        if (!early_p && !diamond_p)
--- 4435,4457 ----
  	      && !predictable_edge_p (EDGE_SUCC (bb, 0))
  	      && !predictable_edge_p (EDGE_SUCC (bb, 1)))
  	    hoist_adjacent_loads (bb, bb1, bb2, bb3);
  	}
  
        gimple_stmt_iterator gsi;
  
        /* Check that we're looking for nested phis.  */
        basic_block merge = diamond_p ? EDGE_SUCC (bb2, 0)->dest : bb2;
+ 
+       /* Factor out operations from the phi if possible. */
+       if (EDGE_COUNT (merge->preds) == 2
+ 	  && !optimize_debug && factor_out_all (e1, e2, merge, cond_stmt, diamond_p, early_p))
+ 	cfgchanged = true;
+ 
        gimple_seq phis = phi_nodes (merge);
  
        if (gimple_seq_empty_p (phis))
  	return;
  
        /* Value replacement can work with more than one PHI
  	 so try that first. */
        if (!early_p && !diamond_p)
diff -Nrcpad gcc-17-20260614/gcc/tree-ssa-reassoc.cc gcc-17-20260621/gcc/tree-ssa-reassoc.cc
*** gcc-17-20260614/gcc/tree-ssa-reassoc.cc	Sun Jun 14 22:32:15 2026
--- gcc-17-20260621/gcc/tree-ssa-reassoc.cc	Sun Jun 21 22:32:14 2026
*************** ovce_extract_ops (tree var, gassign **re
*** 4207,4213 ****
      }
    else
      return ERROR_MARK;
!   if (!integer_zerop (f))
      return ERROR_MARK;
  
    /* Success!  */
--- 4207,4213 ----
      }
    else
      return ERROR_MARK;
!   if (!integer_zerop (inv ? t : f))
      return ERROR_MARK;
  
    /* Success!  */
*************** optimize_vec_cond_expr (tree_code opcode
*** 4234,4240 ****
  
    for (i = 0; i < length; ++i)
      {
!       tree elt0 = (*ops)[i]->op;
  
        gassign *stmt0, *vcond0;
        bool invert;
--- 4234,4240 ----
  
    for (i = 0; i < length; ++i)
      {
!       tree &elt0 = (*ops)[i]->op;
  
        gassign *stmt0, *vcond0;
        bool invert;
*************** optimize_vec_cond_expr (tree_code opcode
*** 4282,4292 ****
  	  gimple_stmt_iterator gsi = gsi_for_stmt (vcond0);
  	  tree exp = force_gimple_operand_gsi (&gsi, comb, true, NULL_TREE,
  					       true, GSI_SAME_STMT);
! 	  if (invert)
! 	    swap_ssa_operands (vcond0, gimple_assign_rhs2_ptr (vcond0),
! 			       gimple_assign_rhs3_ptr (vcond0));
! 	  gimple_assign_set_rhs1 (vcond0, exp);
! 	  update_stmt (vcond0);
  
  	  elt1 = error_mark_node;
  	  any_changes = true;
--- 4282,4294 ----
  	  gimple_stmt_iterator gsi = gsi_for_stmt (vcond0);
  	  tree exp = force_gimple_operand_gsi (&gsi, comb, true, NULL_TREE,
  					       true, GSI_SAME_STMT);
! 	  tree res = gimple_build (&gsi, true, GSI_SAME_STMT, UNKNOWN_LOCATION,
! 				   VEC_COND_EXPR, TREE_TYPE (elt0), exp,
! 				   constant_boolean_node (true,
! 							  TREE_TYPE (elt0)),
! 				   constant_boolean_node (false,
! 							  TREE_TYPE (elt0)));
! 	  elt0 = res;
  
  	  elt1 = error_mark_node;
  	  any_changes = true;
diff -Nrcpad gcc-17-20260614/gcc/tree-vect-data-refs.cc gcc-17-20260621/gcc/tree-vect-data-refs.cc
*** gcc-17-20260614/gcc/tree-vect-data-refs.cc	Sun Jun 14 22:32:15 2026
--- gcc-17-20260621/gcc/tree-vect-data-refs.cc	Sun Jun 21 22:32:14 2026
*************** vect_analyze_data_ref_dependences (loop_
*** 973,984 ****
  
  /* Function vect_slp_analyze_data_ref_dependence.
  
!    Return TRUE if there (might) exist a dependence between a memory-reference
!    DRA and a memory-reference DRB for VINFO.  When versioning for alias
!    may check a dependence at run-time, return FALSE.  Adjust *MAX_VF
!    according to the data dependence.  */
  
! static bool
  vect_slp_analyze_data_ref_dependence (vec_info *vinfo,
  				      struct data_dependence_relation *ddr)
  {
--- 973,985 ----
  
  /* Function vect_slp_analyze_data_ref_dependence.
  
!    Classify the dependence between the memory-references DRA and DRB of DDR
!    for VINFO using the classical (affine) data-dependence test.  Return
!    chrec_known if they are provably independent, chrec_dont_know if the test
!    cannot analyze them (in which case the caller can still try to disambiguate
!    them with the alias oracle), and the dependence (NULL_TREE) otherwise.  */
  
! static tree
  vect_slp_analyze_data_ref_dependence (vec_info *vinfo,
  				      struct data_dependence_relation *ddr)
  {
*************** vect_slp_analyze_data_ref_dependence (ve
*** 992,1012 ****
  
    /* Independent data accesses.  */
    if (DDR_ARE_DEPENDENT (ddr) == chrec_known)
!     return false;
  
    if (dra == drb)
!     return false;
  
    /* Read-read is OK.  */
    if (DR_IS_READ (dra) && DR_IS_READ (drb))
!     return false;
  
    /* If dra and drb are part of the same interleaving chain consider
       them independent.  */
    if (STMT_VINFO_GROUPED_ACCESS (dr_info_a->stmt)
        && (DR_GROUP_FIRST_ELEMENT (dr_info_a->stmt)
  	  == DR_GROUP_FIRST_ELEMENT (dr_info_b->stmt)))
!     return false;
  
    /* Unknown data dependence.  */
    if (DDR_ARE_DEPENDENT (ddr) == chrec_dont_know)
--- 993,1013 ----
  
    /* Independent data accesses.  */
    if (DDR_ARE_DEPENDENT (ddr) == chrec_known)
!     return chrec_known;
  
    if (dra == drb)
!     return chrec_known;
  
    /* Read-read is OK.  */
    if (DR_IS_READ (dra) && DR_IS_READ (drb))
!     return chrec_known;
  
    /* If dra and drb are part of the same interleaving chain consider
       them independent.  */
    if (STMT_VINFO_GROUPED_ACCESS (dr_info_a->stmt)
        && (DR_GROUP_FIRST_ELEMENT (dr_info_a->stmt)
  	  == DR_GROUP_FIRST_ELEMENT (dr_info_b->stmt)))
!     return chrec_known;
  
    /* Unknown data dependence.  */
    if (DDR_ARE_DEPENDENT (ddr) == chrec_dont_know)
*************** vect_slp_analyze_data_ref_dependence (ve
*** 1021,1027 ****
  		     "determined dependence between %T and %T\n",
  		     DR_REF (dra), DR_REF (drb));
  
!   return true;
  }
  
  
--- 1022,1028 ----
  		     "determined dependence between %T and %T\n",
  		     DR_REF (dra), DR_REF (drb));
  
!   return DDR_ARE_DEPENDENT (ddr);
  }
  
  
*************** vect_slp_analyze_store_dependences (vec_
*** 1052,1080 ****
  	  if (! gimple_vuse (stmt))
  	    continue;
  
! 	  /* If we couldn't record a (single) data reference for this
! 	     stmt we have to resort to the alias oracle.  */
  	  stmt_vec_info stmt_info = vinfo->lookup_stmt (stmt);
  	  data_reference *dr_b = STMT_VINFO_DATA_REF (stmt_info);
! 	  if (!dr_b)
  	    {
! 	      /* We are moving a store - this means
! 		 we cannot use TBAA for disambiguation.  */
! 	      if (!ref_initialized_p)
! 		ao_ref_init (&ref, DR_REF (dr_a));
! 	      if (stmt_may_clobber_ref_p_1 (stmt, &ref, false)
! 		  || ref_maybe_used_by_stmt_p (stmt, &ref, false))
  		return false;
! 	      continue;
  	    }
  
! 	  gcc_assert (!gimple_visited_p (stmt));
! 
! 	  ddr_p ddr = initialize_data_dependence_relation (dr_a,
! 							   dr_b, vNULL);
! 	  bool dependent = vect_slp_analyze_data_ref_dependence (vinfo, ddr);
! 	  free_dependence_relation (ddr);
! 	  if (dependent)
  	    return false;
  	}
      }
--- 1053,1087 ----
  	  if (! gimple_vuse (stmt))
  	    continue;
  
! 	  /* If we couldn't record a (single) data reference for this stmt,
! 	     or the classical dependence test cannot analyze it, we have to
! 	     resort to the alias oracle.  */
  	  stmt_vec_info stmt_info = vinfo->lookup_stmt (stmt);
  	  data_reference *dr_b = STMT_VINFO_DATA_REF (stmt_info);
! 	  if (dr_b)
  	    {
! 	      gcc_assert (!gimple_visited_p (stmt));
! 
! 	      ddr_p ddr = initialize_data_dependence_relation (dr_a,
! 							       dr_b, vNULL);
! 	      tree dep = vect_slp_analyze_data_ref_dependence (vinfo, ddr);
! 	      free_dependence_relation (ddr);
! 	      if (dep == chrec_known)
! 		continue;
! 	      if (dep != chrec_dont_know)
  		return false;
! 	      /* Unknown dependence - fall through to the alias oracle.  */
  	    }
  
! 	  /* We are moving a store - this means we cannot use TBAA for
! 	     disambiguation.  */
! 	  if (!ref_initialized_p)
! 	    {
! 	      ao_ref_init (&ref, DR_REF (dr_a));
! 	      ref_initialized_p = true;
! 	    }
! 	  if (stmt_may_clobber_ref_p_1 (stmt, &ref, false)
! 	      || ref_maybe_used_by_stmt_p (stmt, &ref, false))
  	    return false;
  	}
      }
*************** vect_slp_analyze_load_dependences (vec_i
*** 1131,1140 ****
  		  data_reference *store_dr = STMT_VINFO_DATA_REF (store_info);
  		  ddr_p ddr = initialize_data_dependence_relation
  				(dr_a, store_dr, vNULL);
! 		  bool dependent
  		    = vect_slp_analyze_data_ref_dependence (vinfo, ddr);
  		  free_dependence_relation (ddr);
! 		  if (dependent)
  		    return false;
  		}
  	      continue;
--- 1138,1159 ----
  		  data_reference *store_dr = STMT_VINFO_DATA_REF (store_info);
  		  ddr_p ddr = initialize_data_dependence_relation
  				(dr_a, store_dr, vNULL);
! 		  tree dep
  		    = vect_slp_analyze_data_ref_dependence (vinfo, ddr);
  		  free_dependence_relation (ddr);
! 		  if (dep == chrec_known)
! 		    continue;
! 		  if (dep != chrec_dont_know)
! 		    return false;
! 		  /* The classical dependence test cannot analyze this;
! 		     resort to the alias oracle.  We are hoisting a load
! 		     so TBAA may be used for disambiguation.  */
! 		  if (!ref_initialized_p)
! 		    {
! 		      ao_ref_init (&ref, DR_REF (dr_a));
! 		      ref_initialized_p = true;
! 		    }
! 		  if (stmt_may_clobber_ref_p_1 (store_info->stmt, &ref, true))
  		    return false;
  		}
  	      continue;
*************** vect_slp_analyze_load_dependences (vec_i
*** 1145,1151 ****
  	      /* We are hoisting a load - this means we can use TBAA for
  		 disambiguation.  */
  	      if (!ref_initialized_p)
! 		ao_ref_init (&ref, DR_REF (dr_a));
  	      if (stmt_may_clobber_ref_p_1 (stmt_info->stmt, &ref, true))
  		{
  		  /* If we couldn't record a (single) data reference for this
--- 1164,1173 ----
  	      /* We are hoisting a load - this means we can use TBAA for
  		 disambiguation.  */
  	      if (!ref_initialized_p)
! 		{
! 		  ao_ref_init (&ref, DR_REF (dr_a));
! 		  ref_initialized_p = true;
! 		}
  	      if (stmt_may_clobber_ref_p_1 (stmt_info->stmt, &ref, true))
  		{
  		  /* If we couldn't record a (single) data reference for this
*************** vect_slp_analyze_load_dependences (vec_i
*** 1155,1164 ****
  		    return false;
  		  ddr_p ddr = initialize_data_dependence_relation (dr_a,
  								   dr_b, vNULL);
! 		  bool dependent
  		    = vect_slp_analyze_data_ref_dependence (vinfo, ddr);
  		  free_dependence_relation (ddr);
! 		  if (dependent)
  		    return false;
  		}
  	      /* No dependence.  */
--- 1177,1189 ----
  		    return false;
  		  ddr_p ddr = initialize_data_dependence_relation (dr_a,
  								   dr_b, vNULL);
! 		  tree dep
  		    = vect_slp_analyze_data_ref_dependence (vinfo, ddr);
  		  free_dependence_relation (ddr);
! 		  /* The alias oracle above could not rule out a conflict;
! 		     only a proven-independent (chrec_known) result lets us
! 		     hoist the load past this store.  */
! 		  if (dep != chrec_known)
  		    return false;
  		}
  	      /* No dependence.  */
*************** vect_gather_scatter_fn_p (vec_info *vinf
*** 4727,4732 ****
--- 4752,4762 ----
  	  *ifn_out = configs[i].ifn;
  	  *offset_vectype_out = configs[i].offset_vectype;
  	  *supported_scale = configs[i].scale;
+ 	  /* Only set SUPPORTED_OFFSET_VECTYPE if this is a real
+ 	     conversion.  */
+ 	  if (!useless_type_conversion_p (offset_vectype,
+ 					  configs[i].offset_vectype))
+ 	    *supported_offset_vectype = configs[i].offset_vectype;
  	  if (elsvals)
  	    *elsvals = configs[i].elsvals;
  	  return true;
diff -Nrcpad gcc-17-20260614/gcc/tree-vect-loop-manip.cc gcc-17-20260621/gcc/tree-vect-loop-manip.cc
*** gcc-17-20260614/gcc/tree-vect-loop-manip.cc	Sun Jun 14 22:32:15 2026
--- gcc-17-20260621/gcc/tree-vect-loop-manip.cc	Sun Jun 21 22:32:14 2026
*************** vect_do_peeling (loop_vec_info loop_vinf
*** 3320,3326 ****
    /* For early breaks the scalar loop needs to execute at most VF times
       to find the element that caused the break.  */
    if (LOOP_VINFO_EARLY_BREAKS (loop_vinfo)
!       && LOOP_VINFO_EARLY_BRK_NEEDS_EPILOG (loop_vinfo))
      bound_epilog = vf;
  
    bool epilog_peeling = maybe_ne (bound_epilog, 0U);
--- 3320,3327 ----
    /* For early breaks the scalar loop needs to execute at most VF times
       to find the element that caused the break.  */
    if (LOOP_VINFO_EARLY_BREAKS (loop_vinfo)
!       && (LOOP_VINFO_EARLY_BRK_NEEDS_EPILOG (loop_vinfo)
! 	  || LOOP_VINFO_EARLY_BREAKS_VECT_PEELED (loop_vinfo)))
      bound_epilog = vf;
  
    bool epilog_peeling = maybe_ne (bound_epilog, 0U);
diff -Nrcpad gcc-17-20260614/gcc/tree-vect-loop.cc gcc-17-20260621/gcc/tree-vect-loop.cc
*** gcc-17-20260614/gcc/tree-vect-loop.cc	Sun Jun 14 22:32:15 2026
--- gcc-17-20260621/gcc/tree-vect-loop.cc	Sun Jun 21 22:32:14 2026
*************** vect_model_reduction_cost (loop_vec_info
*** 4752,4761 ****
  					node, 0, vect_body);
        else
  	{
! 	  /* Use NELEMENTS extracts and NELEMENTS scalar ops.  */
  	  unsigned int nelements = ncopies * vect_nunits_for_cost (vectype);
! 	  inside_cost = record_stmt_cost (cost_vec, nelements,
! 					  vec_to_scalar, node, 0,
  					  vect_body);
  	  inside_cost += record_stmt_cost (cost_vec, nelements,
  					   scalar_stmt, node, 0,
--- 4752,4761 ----
  					node, 0, vect_body);
        else
  	{
! 	  /* Use NCOPIES deconstructs and NELEMENTS scalar ops.  */
  	  unsigned int nelements = ncopies * vect_nunits_for_cost (vectype);
! 	  inside_cost = record_stmt_cost (cost_vec, ncopies,
! 					  vec_deconstruct, node, 0,
  					  vect_body);
  	  inside_cost += record_stmt_cost (cost_vec, nelements,
  					   scalar_stmt, node, 0,
*************** vect_model_reduction_cost (loop_vec_info
*** 4817,4825 ****
  	{
  	  unsigned estimated_nunits = vect_nunits_for_cost (vectype);
  	  /* Extraction of scalar elements.  */
! 	  epilogue_cost += record_stmt_cost (cost_vec,
! 					     2 * estimated_nunits,
! 					     vec_to_scalar, node, 0,
  					     vect_epilogue);
  	  /* Scalar max reductions via COND_EXPR / MAX_EXPR.  */
  	  epilogue_cost += record_stmt_cost (cost_vec,
--- 4817,4824 ----
  	{
  	  unsigned estimated_nunits = vect_nunits_for_cost (vectype);
  	  /* Extraction of scalar elements.  */
! 	  epilogue_cost += record_stmt_cost (cost_vec, 2,
! 					     vec_deconstruct, node, 0,
  					     vect_epilogue);
  	  /* Scalar max reductions via COND_EXPR / MAX_EXPR.  */
  	  epilogue_cost += record_stmt_cost (cost_vec,
diff -Nrcpad gcc-17-20260614/gcc/tree-vect-stmts.cc gcc-17-20260621/gcc/tree-vect-stmts.cc
*** gcc-17-20260614/gcc/tree-vect-stmts.cc	Sun Jun 14 22:32:15 2026
--- gcc-17-20260621/gcc/tree-vect-stmts.cc	Sun Jun 21 22:32:14 2026
*************** vectorizable_store (vec_info *vinfo,
*** 8536,8545 ****
  	}
  
        if (costing_p)
! 	/* Record the decomposition type for target access during costing.  */
! 	ls.ls_type = lvectype;
        else
! 	gcc_assert (ls.ls_type == lvectype);
  
        unsigned align;
        if (alignment_support_scheme == dr_aligned)
--- 8536,8548 ----
  	}
  
        if (costing_p)
! 	{
! 	  /* Record the decomposition type for target access during costing.  */
! 	  ls.ls_type = lvectype;
! 	  ls.ls_eltype = ltype;
! 	}
        else
! 	gcc_assert (ls.ls_type == lvectype && ls.ls_eltype == ltype);
  
        unsigned align;
        if (alignment_support_scheme == dr_aligned)
*************** vectorizable_store (vec_info *vinfo,
*** 8651,8662 ****
  		inside_cost
  		  += record_stmt_cost (cost_vec, n_adjacent_stores,
  				       scalar_store, slp_node, 0, vect_body);
! 	      /* Only need vector extracting when there are more
! 		 than one stores.  */
  	      if (nstores > 1)
  		inside_cost
! 		  += record_stmt_cost (cost_vec, n_adjacent_stores,
! 				       vec_to_scalar, slp_node, 0, vect_body);
  	    }
  	  if (dump_enabled_p ())
  	    dump_printf_loc (MSG_NOTE, vect_location,
--- 8654,8665 ----
  		inside_cost
  		  += record_stmt_cost (cost_vec, n_adjacent_stores,
  				       scalar_store, slp_node, 0, vect_body);
! 	      /* Only need vector deconstruction when there is more
! 		 than one store.  */
  	      if (nstores > 1)
  		inside_cost
! 		  += record_stmt_cost (cost_vec, ncopies,
! 				       vec_deconstruct, slp_node, 0, vect_body);
  	    }
  	  if (dump_enabled_p ())
  	    dump_printf_loc (MSG_NOTE, vect_location,
*************** vectorizable_store (vec_info *vinfo,
*** 8981,8987 ****
  	    {
  	      if (costing_p)
  		{
! 		  if (ls.supported_offset_vectype)
  		    inside_cost
  		      += record_stmt_cost (cost_vec, 1, vector_stmt,
  					   slp_node, 0, vect_body);
--- 8984,8992 ----
  	    {
  	      if (costing_p)
  		{
! 		  if (ls.supported_offset_vectype
! 		      && !tree_nop_conversion_p (ls.supported_offset_vectype,
! 						 vec_offset))
  		    inside_cost
  		      += record_stmt_cost (cost_vec, 1, vector_stmt,
  					   slp_node, 0, vect_body);
*************** vectorizable_store (vec_info *vinfo,
*** 9217,9227 ****
  		     (we assume the scalar scaling and ptr + offset add is
  		     consumed by the load).  */
  		  inside_cost
! 		    += record_stmt_cost (cost_vec, cnunits, vec_to_scalar,
  					 slp_node, 0, vect_body);
  		  /* N scalar stores plus extracting the elements.  */
  		  inside_cost
! 		    += record_stmt_cost (cost_vec, cnunits, vec_to_scalar,
  					 slp_node, 0, vect_body);
  		  inside_cost
  		    += record_stmt_cost (cost_vec, cnunits, scalar_store,
--- 9222,9232 ----
  		     (we assume the scalar scaling and ptr + offset add is
  		     consumed by the load).  */
  		  inside_cost
! 		    += record_stmt_cost (cost_vec, 1, vec_deconstruct,
  					 slp_node, 0, vect_body);
  		  /* N scalar stores plus extracting the elements.  */
  		  inside_cost
! 		    += record_stmt_cost (cost_vec, 1, vec_deconstruct,
  					 slp_node, 0, vect_body);
  		  inside_cost
  		    += record_stmt_cost (cost_vec, cnunits, scalar_store,
*************** vectorizable_load (vec_info *vinfo,
*** 10333,10342 ****
  	}
  
        if (costing_p)
! 	/* Record the composition type for target access during costing.  */
! 	ls.ls_type = lvectype;
        else
! 	gcc_assert (ls.ls_type == lvectype);
  
        /* For SLP permutation support we need to load the whole group,
  	 not only the number of vector stmts the permutation result
--- 10338,10350 ----
  	}
  
        if (costing_p)
! 	{
! 	  /* Record the composition type for target access during costing.  */
! 	  ls.ls_type = lvectype;
! 	  ls.ls_eltype = ltype;
! 	}
        else
! 	gcc_assert (ls.ls_type == lvectype && ls.ls_eltype == ltype);
  
        /* For SLP permutation support we need to load the whole group,
  	 not only the number of vector stmts the permutation result
*************** vectorizable_load (vec_info *vinfo,
*** 10953,10959 ****
  	    {
  	      if (costing_p)
  		{
! 		  if (ls.supported_offset_vectype)
  		    inside_cost
  		      += record_stmt_cost (cost_vec, 1, vector_stmt,
  					   slp_node, 0, vect_body);
--- 10961,10969 ----
  	    {
  	      if (costing_p)
  		{
! 		  if (ls.supported_offset_vectype
! 		      && !tree_nop_conversion_p (ls.supported_offset_vectype,
! 						 vec_offset))
  		    inside_cost
  		      += record_stmt_cost (cost_vec, 1, vector_stmt,
  					   slp_node, 0, vect_body);
*************** vectorizable_load (vec_info *vinfo,
*** 11191,11198 ****
  		{
  		  /* For emulated gathers N offset vector element
  		     offset add is consumed by the load).  */
! 		  inside_cost = record_stmt_cost (cost_vec, const_nunits,
! 						  vec_to_scalar,
  						  slp_node, 0, vect_body);
  		  /* N scalar loads plus gathering them into a
  		     vector.  */
--- 11201,11207 ----
  		{
  		  /* For emulated gathers N offset vector element
  		     offset add is consumed by the load).  */
! 		  inside_cost = record_stmt_cost (cost_vec, 1, vec_deconstruct,
  						  slp_node, 0, vect_body);
  		  /* N scalar loads plus gathering them into a
  		     vector.  */
diff -Nrcpad gcc-17-20260614/gcc/tree-vectorizer.cc gcc-17-20260621/gcc/tree-vectorizer.cc
*** gcc-17-20260614/gcc/tree-vectorizer.cc	Sun Jun 14 22:32:15 2026
--- gcc-17-20260621/gcc/tree-vectorizer.cc	Sun Jun 21 22:32:14 2026
*************** dump_stmt_cost (FILE *f, int count, enum
*** 169,174 ****
--- 169,177 ----
      case vec_construct:
        ks = "vec_construct";
        break;
+     case vec_deconstruct:
+       ks = "vec_deconstruct";
+       break;
      }
    fprintf (f, "%s ", ks);
    if (kind == unaligned_load || kind == unaligned_store)
diff -Nrcpad gcc-17-20260614/gcc/tree-vectorizer.h gcc-17-20260621/gcc/tree-vectorizer.h
*** gcc-17-20260614/gcc/tree-vectorizer.h	Sun Jun 14 22:32:15 2026
--- gcc-17-20260621/gcc/tree-vectorizer.h	Sun Jun 21 22:32:14 2026
*************** struct vect_load_store_data : vect_data
*** 293,299 ****
    } gs;
    tree strided_offset_vectype; // VMAT_GATHER_SCATTER_IFN, originally strided
    /* Load/store type with larger element mode used for punning the vectype.  */
!   tree ls_type; // VMAT_GATHER_SCATTER_IFN
    /* This is set to a supported offset vector type if we don't support the
       originally requested offset type, otherwise NULL.
       If nonzero there will be an additional offset conversion before
--- 293,302 ----
    } gs;
    tree strided_offset_vectype; // VMAT_GATHER_SCATTER_IFN, originally strided
    /* Load/store type with larger element mode used for punning the vectype.  */
!   tree ls_type; // VMAT_GATHER_SCATTER_IFN, VMAT_STRIDED_SLP
!   /* Load/store element type used for punning the vectype.  Relevant when
!      that is a vector type.  */
!   tree ls_eltype; // VMAT_STRIDED_SLP
    /* This is set to a supported offset vector type if we don't support the
       originally requested offset type, otherwise NULL.
       If nonzero there will be an additional offset conversion before
diff -Nrcpad gcc-17-20260614/gcc/tree-vrp.cc gcc-17-20260621/gcc/tree-vrp.cc
*** gcc-17-20260614/gcc/tree-vrp.cc	Sun Jun 14 22:32:15 2026
--- gcc-17-20260621/gcc/tree-vrp.cc	Sun Jun 21 22:32:14 2026
*************** along with GCC; see the file COPYING3.
*** 48,54 ****
  #include "gimple-array-bounds.h"
  #include "gimple-range.h"
  #include "gimple-range-path.h"
- #include "value-pointer-equiv.h"
  #include "gimple-fold.h"
  #include "tree-dfa.h"
  #include "tree-ssa-dce.h"
--- 48,53 ----
*************** public:
*** 964,986 ****
        m_simplifier (r, r->non_executable_edge_flag)
    {
      m_ranger = r;
-     m_pta = new pointer_equiv_analyzer (m_ranger);
      m_last_bb_stmt = NULL;
    }
  
-   ~rvrp_folder ()
-   {
-     delete m_pta;
-   }
- 
    tree value_of_expr (tree name, gimple *s = NULL) override
    {
      // Shortcircuit subst_and_fold callbacks for abnormal ssa_names.
      if (TREE_CODE (name) == SSA_NAME && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (name))
!       return NULL;
!     tree ret = m_ranger->value_of_expr (name, s);
!     if (!ret && supported_pointer_equiv_p (name))
!       ret = m_pta->get_equiv (name);
      return ret;
    }
  
--- 963,1001 ----
        m_simplifier (r, r->non_executable_edge_flag)
    {
      m_ranger = r;
      m_last_bb_stmt = NULL;
    }
  
    tree value_of_expr (tree name, gimple *s = NULL) override
    {
      // Shortcircuit subst_and_fold callbacks for abnormal ssa_names.
      if (TREE_CODE (name) == SSA_NAME && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (name))
!       return NULL_TREE;
!     if (!value_range::supports_type_p (TREE_TYPE (name)))
!       return NULL_TREE;
! 
!     value_range r (TREE_TYPE (name));
!     if (!m_ranger->range_of_expr (r, name, s))
!       return NULL_TREE;
! 
!     // A constant used in an unreachable block often returns as UNDEFINED.
!     // If the result is undefined, check the global value for a constant.
!     if (r.undefined_p ())
!       range_of_expr (r, name);
! 
!     tree ret;
!     if (r.singleton_p (&ret))
!       return ret;
!     else
!       ret = NULL_TREE;
!     if (is_a <prange> (r))
!       {
! 	prange &p = as_a <prange> (r);
! 	ret = p.pt_invariant ();
! 	// A const points has to be gimple_min_invariant.
! 	gcc_checking_assert (!ret || is_gimple_min_invariant (ret));
!       }
! 
      return ret;
    }
  
*************** public:
*** 989,997 ****
      // Shortcircuit subst_and_fold callbacks for abnormal ssa_names.
      if (TREE_CODE (name) == SSA_NAME && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (name))
        return NULL;
!     tree ret = m_ranger->value_on_edge (e, name);
!     if (!ret && supported_pointer_equiv_p (name))
!       ret = m_pta->get_equiv (name);
      return ret;
    }
  
--- 1004,1034 ----
      // Shortcircuit subst_and_fold callbacks for abnormal ssa_names.
      if (TREE_CODE (name) == SSA_NAME && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (name))
        return NULL;
!     if (!value_range::supports_type_p (TREE_TYPE (name)))
!       return NULL_TREE;
! 
!     value_range r (TREE_TYPE (name));
!     if (!m_ranger->range_on_edge (r, e, name))
!       return NULL_TREE;
! 
!     // A constant used in an unreachable block often returns as UNDEFINED.
!     // If the result is undefined, check the global value for a constant.
!     if (r.undefined_p ())
!       range_of_expr (r, name);
! 
!     tree ret;
!     if (r.singleton_p (&ret))
!       return ret;
!     else
!       ret = NULL_TREE;
!     if (is_a <prange> (r))
!       {
! 	prange &p = as_a <prange> (r);
! 	ret = p.pt_invariant ();
! 	// A const points has to be gimple_min_invariant.
! 	gcc_checking_assert (!ret || is_gimple_min_invariant (ret));
!       }
! 
      return ret;
    }
  
*************** public:
*** 1005,1025 ****
  
    void pre_fold_bb (basic_block bb) override
    {
-     m_pta->enter (bb);
      for (gphi_iterator gsi = gsi_start_phis (bb); !gsi_end_p (gsi);
  	 gsi_next (&gsi))
        m_ranger->register_inferred_ranges (gsi.phi ());
      m_last_bb_stmt = last_nondebug_stmt (bb);
    }
  
-   void post_fold_bb (basic_block bb) override
-   {
-     m_pta->leave (bb);
-   }
- 
    void pre_fold_stmt (gimple *stmt) override
    {
-     m_pta->visit_stmt (stmt);
      // If this is the last stmt and there are inferred ranges, reparse the
      // block for transitive inferred ranges that occur earlier in the block.
      if (stmt == m_last_bb_stmt)
--- 1042,1055 ----
*************** private:
*** 1045,1051 ****
    DISABLE_COPY_AND_ASSIGN (rvrp_folder);
    gimple_ranger *m_ranger;
    simplify_using_ranges m_simplifier;
-   pointer_equiv_analyzer *m_pta;
    gimple *m_last_bb_stmt;
  };
  
--- 1075,1080 ----
diff -Nrcpad gcc-17-20260614/gcc/tree.cc gcc-17-20260621/gcc/tree.cc
*** gcc-17-20260614/gcc/tree.cc	Sun Jun 14 22:32:15 2026
--- gcc-17-20260621/gcc/tree.cc	Sun Jun 21 22:32:14 2026
*************** build_atomic_base (tree type, unsigned i
*** 9618,9623 ****
--- 9618,9663 ----
    return t;
  }
  
+ /* Return unsigned integer tree node for TYPE.  */
+ 
+ tree
+ unsigned_integer_tree_node_for_type (const char *type)
+ {
+   tree type_node;
+ 
+   if (strcmp (type, "unsigned int") == 0)
+     type_node = unsigned_type_node;
+   else if (strcmp (type, "long unsigned int") == 0)
+     type_node = long_unsigned_type_node;
+   else if (strcmp (type, "long long unsigned int") == 0)
+     type_node = long_long_unsigned_type_node;
+   else if (strcmp (type, "short unsigned int") == 0)
+     type_node = short_unsigned_type_node;
+   else
+     {
+       int i;
+ 
+       type_node = nullptr;
+       for (i = 0; i < NUM_INT_N_ENTS; i++)
+ 	if (int_n_enabled_p[i])
+ 	  {
+ 	    char name[50], altname[50];
+ 	    sprintf (name, "__int%d unsigned", int_n_data[i].bitsize);
+ 	    sprintf (altname, "__int%d__ unsigned", int_n_data[i].bitsize);
+ 
+ 	    if (strcmp (name, type) == 0
+ 		|| strcmp (altname, type) == 0)
+ 	      {
+ 		type_node = int_n_trees[i].unsigned_type;
+ 	      }
+ 	  }
+       if (type_node == nullptr)
+ 	gcc_unreachable ();
+     }
+ 
+   return type_node;
+ }
+ 
  /* Information about the _FloatN and _FloatNx types.  This must be in
     the same order as the corresponding TI_* enum values.  */
  const floatn_type_info floatn_nx_types[NUM_FLOATN_NX_TYPES] =
*************** build_common_tree_nodes (bool signed_cha
*** 9688,9722 ****
    TYPE_MAX_VALUE (boolean_type_node) = build_int_cst (boolean_type_node, 1);
  
    /* Define what type to use for size_t.  */
!   if (strcmp (SIZE_TYPE, "unsigned int") == 0)
!     size_type_node = unsigned_type_node;
!   else if (strcmp (SIZE_TYPE, "long unsigned int") == 0)
!     size_type_node = long_unsigned_type_node;
!   else if (strcmp (SIZE_TYPE, "long long unsigned int") == 0)
!     size_type_node = long_long_unsigned_type_node;
!   else if (strcmp (SIZE_TYPE, "short unsigned int") == 0)
!     size_type_node = short_unsigned_type_node;
!   else
!     {
!       int i;
! 
!       size_type_node = NULL_TREE;
!       for (i = 0; i < NUM_INT_N_ENTS; i++)
! 	if (int_n_enabled_p[i])
! 	  {
! 	    char name[50], altname[50];
! 	    sprintf (name, "__int%d unsigned", int_n_data[i].bitsize);
! 	    sprintf (altname, "__int%d__ unsigned", int_n_data[i].bitsize);
! 
! 	    if (strcmp (name, SIZE_TYPE) == 0
! 		|| strcmp (altname, SIZE_TYPE) == 0)
! 	      {
! 		size_type_node = int_n_trees[i].unsigned_type;
! 	      }
! 	  }
!       if (size_type_node == NULL_TREE)
! 	gcc_unreachable ();
!     }
  
    /* Define what type to use for ptrdiff_t.  */
    if (strcmp (PTRDIFF_TYPE, "int") == 0)
--- 9728,9734 ----
    TYPE_MAX_VALUE (boolean_type_node) = build_int_cst (boolean_type_node, 1);
  
    /* Define what type to use for size_t.  */
!   size_type_node = unsigned_integer_tree_node_for_type (SIZE_TYPE);
  
    /* Define what type to use for ptrdiff_t.  */
    if (strcmp (PTRDIFF_TYPE, "int") == 0)
diff -Nrcpad gcc-17-20260614/gcc/tree.h gcc-17-20260621/gcc/tree.h
*** gcc-17-20260614/gcc/tree.h	Sun Jun 14 22:32:15 2026
--- gcc-17-20260621/gcc/tree.h	Sun Jun 21 22:32:14 2026
*************** extern tree vector_element_bits_tree (co
*** 2542,2548 ****
  
  /* Encode/decode the named memory support as part of the qualifier.  If more
     than 8 qualifiers are added, these macros need to be adjusted.  */
! #define ENCODE_QUAL_ADDR_SPACE(NUM) ((NUM & 0xFF) << 8)
  #define DECODE_QUAL_ADDR_SPACE(X) (((X) >> 8) & 0xFF)
  
  /* Return all qualifiers except for the address space qualifiers.  */
--- 2542,2548 ----
  
  /* Encode/decode the named memory support as part of the qualifier.  If more
     than 8 qualifiers are added, these macros need to be adjusted.  */
! #define ENCODE_QUAL_ADDR_SPACE(NUM) (((NUM) & 0xFF) << 8)
  #define DECODE_QUAL_ADDR_SPACE(X) (((X) >> 8) & 0xFF)
  
  /* Return all qualifiers except for the address space qualifiers.  */
*************** extern void init_ttree (void);
*** 5929,5934 ****
--- 5929,5935 ----
  extern void build_common_tree_nodes (bool);
  extern void build_common_builtin_nodes (void);
  extern void tree_cc_finalize (void);
+ extern tree unsigned_integer_tree_node_for_type (const char *);
  extern tree build_nonstandard_integer_type (unsigned HOST_WIDE_INT, int);
  extern tree build_nonstandard_boolean_type (unsigned HOST_WIDE_INT);
  extern tree build_bitint_type (unsigned HOST_WIDE_INT, int);
diff -Nrcpad gcc-17-20260614/gcc/value-pointer-equiv.cc gcc-17-20260621/gcc/value-pointer-equiv.cc
*** gcc-17-20260614/gcc/value-pointer-equiv.cc	Sun Jun 14 22:32:15 2026
--- gcc-17-20260621/gcc/value-pointer-equiv.cc	Thu Jan  1 00:00:00 1970
***************
*** 1,319 ****
- /* Context-aware pointer equivalence tracker.
-    Copyright (C) 2020-2026 Free Software Foundation, Inc.
-    Contributed by Aldy Hernandez <aldyh@redhat.com>
- 
- 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/>.  */
- 
- #include "config.h"
- #include "system.h"
- #include "coretypes.h"
- #include "backend.h"
- #include "tree.h"
- #include "gimple.h"
- #include "tree-pass.h"
- #include "ssa.h"
- #include "gimple-pretty-print.h"
- #include "cfganal.h"
- #include "gimple-iterator.h"
- #include "gimple-fold.h"
- #include "tree-eh.h"
- #include "tree-cfg.h"
- #include "tree-ssa-loop-manip.h"
- #include "tree-ssa-loop.h"
- #include "cfgloop.h"
- #include "tree-scalar-evolution.h"
- #include "tree-ssa-propagate.h"
- #include "alloc-pool.h"
- #include "domwalk.h"
- #include "tree-cfgcleanup.h"
- #include "vr-values.h"
- #include "gimple-range.h"
- #include "fold-const.h"
- #include "value-pointer-equiv.h"
- 
- // Unwindable SSA equivalence table for pointers.
- //
- // The main query point is get_replacement() which returns what a
- // given SSA can be replaced with in the current scope.
- 
- class ssa_equiv_stack
- {
- public:
-   ssa_equiv_stack ();
-   void enter (basic_block);
-   void leave (basic_block);
-   void push_replacement (tree name, tree replacement);
-   tree get_replacement (tree name);
- 
- private:
-   auto_vec<std::pair <tree, tree>> m_stack;
-   auto_vec<tree> m_replacements;
-   const std::pair <tree, tree> m_marker = std::make_pair (NULL_TREE, NULL_TREE);
- };
- 
- ssa_equiv_stack::ssa_equiv_stack ()
- {
-   m_replacements.safe_grow_cleared (num_ssa_names + 1);
- }
- 
- // Pushes a marker at the given point.
- 
- void
- ssa_equiv_stack::enter (basic_block)
- {
-   m_stack.safe_push (m_marker);
- }
- 
- // Pops the stack to the last marker, while performing replacements
- // along the way.
- 
- void
- ssa_equiv_stack::leave (basic_block)
- {
-   gcc_checking_assert (!m_stack.is_empty ());
-   while (m_stack.last () != m_marker)
-     {
-       std::pair<tree, tree> e = m_stack.pop ();
-       m_replacements[SSA_NAME_VERSION (e.first)] = e.second;
-     }
-   m_stack.pop ();
- }
- 
- // Set the equivalence of NAME to REPLACEMENT.
- 
- void
- ssa_equiv_stack::push_replacement (tree name, tree replacement)
- {
-   unsigned v = SSA_NAME_VERSION (name);
- 
-   if (v >= m_replacements.length ())
-     m_replacements.safe_grow_cleared (num_ssa_names + 1);
- 
-   tree old = m_replacements[v];
-   m_replacements[v] = replacement;
-   m_stack.safe_push (std::make_pair (name, old));
- }
- 
- // Return the equivalence of NAME.
- 
- tree
- ssa_equiv_stack::get_replacement (tree name)
- {
-   unsigned v = SSA_NAME_VERSION (name);
- 
-   if (v >= m_replacements.length ())
-     m_replacements.safe_grow_cleared (num_ssa_names + 1);
- 
-   return m_replacements[v];
- }
- 
- pointer_equiv_analyzer::pointer_equiv_analyzer (gimple_ranger *r)
- {
-   m_ranger = r;
-   m_global_points.safe_grow_cleared (num_ssa_names + 1);
-   m_cond_points = new ssa_equiv_stack;
- }
- 
- pointer_equiv_analyzer::~pointer_equiv_analyzer ()
- {
-   delete m_cond_points;
- }
- 
- // Set the global pointer equivalency for SSA to POINTEE.
- 
- void
- pointer_equiv_analyzer::set_global_equiv (tree ssa, tree pointee)
- {
-   unsigned v = SSA_NAME_VERSION (ssa);
- 
-   if (v >= m_global_points.length ())
-     m_global_points.safe_grow_cleared (num_ssa_names + 1);
- 
-   m_global_points[v] = pointee;
- }
- 
- // Set the conditional pointer equivalency for SSA to POINTEE.
- 
- void
- pointer_equiv_analyzer::set_cond_equiv (tree ssa, tree pointee)
- {
-   m_cond_points->push_replacement (ssa, pointee);
- }
- 
- // Return the current pointer equivalency info for SSA, or NULL if
- // none is available.  Note that global info takes priority over
- // conditional info.
- 
- tree
- pointer_equiv_analyzer::get_equiv (tree ssa)
- {
-   unsigned v = SSA_NAME_VERSION (ssa);
- 
-   if (v >= m_global_points.length ())
-     m_global_points.safe_grow_cleared (num_ssa_names + 1);
- 
-   tree ret = m_global_points[v];
-   if (ret)
-     return ret;
-   return m_cond_points->get_replacement (ssa);
- }
- 
- // Method to be called on entry to a BB.
- 
- void
- pointer_equiv_analyzer::enter (basic_block bb)
- {
-   m_cond_points->enter (bb);
- 
-   for (gphi_iterator iter = gsi_start_phis (bb);
-        !gsi_end_p (iter);
-        gsi_next (&iter))
-     {
-       gphi *phi = iter.phi ();
-       tree lhs = gimple_phi_result (phi);
-       if (!POINTER_TYPE_P (TREE_TYPE (lhs)))
- 	continue;
-       tree arg0 = gimple_phi_arg_def (phi, 0);
-       if (TREE_CODE (arg0) == SSA_NAME && !is_gimple_min_invariant (arg0))
- 	arg0 = get_equiv (arg0);
-       if (arg0 && is_gimple_min_invariant (arg0))
- 	{
- 	  // If all the PHI args point to the same place, set the
- 	  // pointer equivalency info for the PHI result.  This can
- 	  // happen for passes that create redundant PHIs like
- 	  // PHI<&foo, &foo> or PHI<&foo>.
- 	  for (size_t i = 1; i < gimple_phi_num_args (phi); ++i)
- 	    {
- 	      tree argi = gimple_phi_arg_def (phi, i);
- 	      if (TREE_CODE (argi) == SSA_NAME
- 		  && !is_gimple_min_invariant (argi))
- 		argi = get_equiv (argi);
- 	      if (!argi || !operand_equal_p (arg0, argi))
- 		return;
- 	    }
- 	  set_global_equiv (lhs, arg0);
- 	}
-     }
- 
-   edge pred = single_pred_edge_ignoring_loop_edges (bb, false);
-   if (pred)
-     visit_edge (pred);
- }
- 
- // Method to be called on exit from a BB.
- 
- void
- pointer_equiv_analyzer::leave (basic_block bb)
- {
-   m_cond_points->leave (bb);
- }
- 
- // Helper function to return the pointer equivalency information for
- // EXPR from a gimple statement with CODE.  This returns either the
- // cached pointer equivalency info for an SSA, or an invariant in case
- // EXPR is one (i.e. &foo).  Returns NULL if EXPR is neither an SSA
- // nor an invariant.
- 
- tree
- pointer_equiv_analyzer::get_equiv_expr (tree_code code, tree expr)
- {
-   if (code == SSA_NAME)
-     return get_equiv (expr);
- 
-   if (get_gimple_rhs_class (code) == GIMPLE_SINGLE_RHS
-       && is_gimple_min_invariant (expr))
-     return expr;
- 
-   return NULL;
- }
- 
- // Hack to provide context to the gimple fold callback.
- static struct
- {
-   gimple *m_stmt;
-   gimple_ranger *m_ranger;
-   pointer_equiv_analyzer *m_pta;
- } x_fold_context;
- 
- // Gimple fold callback.
- static tree
- pta_valueize (tree name)
- {
-   tree ret
-     = x_fold_context.m_ranger->value_of_expr (name, x_fold_context.m_stmt);
- 
-   if (!ret && supported_pointer_equiv_p (name))
-     ret = x_fold_context.m_pta->get_equiv (name);
- 
-   return ret ? ret : name;
- }
- 
- // Method to be called on gimple statements during traversal of the IL.
- 
- void
- pointer_equiv_analyzer::visit_stmt (gimple *stmt)
- {
-   if (gimple_code (stmt) != GIMPLE_ASSIGN)
-     return;
- 
-   tree lhs = gimple_assign_lhs (stmt);
-   if (!supported_pointer_equiv_p (lhs))
-     return;
- 
-   tree rhs = gimple_assign_rhs1 (stmt);
-   rhs = get_equiv_expr (gimple_assign_rhs_code (stmt), rhs);
-   if (rhs)
-     {
-       set_global_equiv (lhs, rhs);
-       return;
-     }
- 
-   // If we couldn't find anything, try fold.
-   x_fold_context = { stmt, m_ranger, this};
-   rhs = gimple_fold_stmt_to_constant_1 (stmt, pta_valueize, pta_valueize);
-   if (rhs)
-     {
-       rhs = get_equiv_expr (TREE_CODE (rhs), rhs);
-       if (rhs)
- 	{
- 	  set_global_equiv (lhs, rhs);
- 	  return;
- 	}
-     }
- }
- 
- // If the edge in E is a conditional that sets a pointer equality, set the
- // conditional pointer equivalency information.
- 
- void
- pointer_equiv_analyzer::visit_edge (edge e)
- {
-   gcond *stmt = safe_dyn_cast <gcond *> (*gsi_last_bb (e->src));
-   tree lhs;
-   // Recognize: x_13 [==,!=] &foo.
-   if (stmt
-       && ((lhs = gimple_cond_lhs (stmt)), true)
-       && TREE_CODE (lhs) == SSA_NAME
-       && POINTER_TYPE_P (TREE_TYPE (lhs))
-       && TREE_CODE (gimple_cond_rhs (stmt)) == ADDR_EXPR)
-     {
-       tree_code code = gimple_cond_code (stmt);
-       if ((code == EQ_EXPR && e->flags & EDGE_TRUE_VALUE)
- 	  || ((code == NE_EXPR && e->flags & EDGE_FALSE_VALUE)))
- 	set_cond_equiv (lhs, gimple_cond_rhs (stmt));
-     }
- }
--- 0 ----
diff -Nrcpad gcc-17-20260614/gcc/value-pointer-equiv.h gcc-17-20260621/gcc/value-pointer-equiv.h
*** gcc-17-20260614/gcc/value-pointer-equiv.h	Sun Jun 14 22:32:15 2026
--- gcc-17-20260621/gcc/value-pointer-equiv.h	Thu Jan  1 00:00:00 1970
***************
*** 1,62 ****
- /* Header file for the context-aware pointer equivalence tracker.
-    Copyright (C) 2020-2026 Free Software Foundation, Inc.
-    Contributed by Aldy Hernandez <aldyh@redhat.com>
- 
- 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_VALUE_POINTER_EQUIV_H
- #define GCC_VALUE_POINTER_EQUIV_H
- 
- // Simple context-aware pointer equivalency analyzer that returns what
- // a pointer SSA name is equivalent to at a given point during a walk
- // of the IL.
- //
- // Note that global equivalency take priority over conditional
- // equivalency.  That is, p = &q takes priority over a later p == &t.
- //
- // This class is meant to be called during a DOM walk.
- 
- class pointer_equiv_analyzer
- {
- public:
-   pointer_equiv_analyzer (gimple_ranger *r);
-   ~pointer_equiv_analyzer ();
-   void enter (basic_block);
-   void leave (basic_block);
-   void visit_stmt (gimple *stmt);
-   tree get_equiv (tree ssa);
- 
- private:
-   void visit_edge (edge e);
-   tree get_equiv_expr (tree_code code, tree expr);
-   void set_global_equiv (tree ssa, tree pointee);
-   void set_cond_equiv (tree ssa, tree pointee);
- 
-   gimple_ranger *m_ranger;
-   // Global pointer equivalency indexed by SSA_NAME_VERSION.
-   auto_vec<tree> m_global_points;
-   // Conditional pointer equivalency.
-   class ssa_equiv_stack *m_cond_points;
- };
- 
- inline bool
- supported_pointer_equiv_p (tree expr)
- {
-   return TREE_CODE (expr) == SSA_NAME && POINTER_TYPE_P (TREE_TYPE (expr));
- }
- 
- #endif // GCC_VALUE_POINTER_EQUIV_H
--- 0 ----
diff -Nrcpad gcc-17-20260614/gcc/value-query.cc gcc-17-20260621/gcc/value-query.cc
*** gcc-17-20260614/gcc/value-query.cc	Sun Jun 14 22:32:15 2026
--- gcc-17-20260621/gcc/value-query.cc	Sun Jun 21 22:32:14 2026
*************** range_query::get_tree_range (vrange &r,
*** 388,400 ****
  
      case ADDR_EXPR:
        {
! 	// Handle &var which can show up in phi arguments.
  	if (tree_single_nonzero_p (expr))
! 	  {
! 	    r.set_nonzero (type);
! 	    return true;
! 	  }
! 	break;
        }
  
      default:
--- 388,403 ----
  
      case ADDR_EXPR:
        {
! 	// Handle &expr, and set points to.
  	if (tree_single_nonzero_p (expr))
! 	 r.set_nonzero (type);
! 	else
! 	  r.set_varying (type);
! 	// Set points to field.
! 	gcc_checking_assert (is_a <prange> (r));
! 	prange &ptr = as_a <prange> (r);
! 	ptr.set_pt (expr, true);
! 	return true;
        }
  
      default:
diff -Nrcpad gcc-17-20260614/gcc/value-range-pretty-print.cc gcc-17-20260621/gcc/value-range-pretty-print.cc
*** gcc-17-20260614/gcc/value-range-pretty-print.cc	Sun Jun 14 22:32:15 2026
--- gcc-17-20260621/gcc/value-range-pretty-print.cc	Sun Jun 21 22:32:14 2026
*************** vrange_printer::visit (const irange &r)
*** 113,118 ****
--- 113,161 ----
  }
  
  void
+ vrange_printer::print_pt (const prange &r) const
+ {
+   bool points_to_p = false;
+   tree pt = r.pt_invariant ();
+   if (pt)
+     points_to_p = true;
+   else
+     pt = r.pt_invariant_away ();
+ 
+   if (pt)
+     {
+       if (points_to_p)
+ 	pp_string (pp, " -> ");
+       else
+ 	pp_string (pp, " ! -> ");
+       dump_generic_node (pp, pt, 0, TDF_NONE | TDF_NOUID, false);
+       if (points_to_p)
+ 	{
+ 	  int_range_max sz;
+ 	  int_range_max off;
+ 	  tree b;
+ 	  b = r.pt_base ();
+ 	  r.pt_offset(off);
+ 	  r.pt_size (sz);
+ 	  pp_string (pp, " { Base: ");
+ 	  dump_generic_node (pp, b, 0, TDF_NONE | TDF_NOUID, false);
+ 	  if (!off.varying_p () && !off.undefined_p () && !off.zero_p ())
+ 	    {
+ 	      pp_string (pp, " ; Off: ");
+ 	      visit (off);
+ 	    }
+ 	  if (!sz.varying_p () && !sz.undefined_p ())
+ 	      {
+ 		pp_string (pp, " ; Size: ");
+ 		visit (sz);
+ 	      }
+ 	  pp_string (pp, " }");
+ 	}
+ 
+     }
+ }
+ 
+ void
  vrange_printer::visit (const prange &r) const
  {
    pp_string (pp, "[prange] ");
*************** vrange_printer::visit (const prange &r)
*** 135,140 ****
--- 178,185 ----
    print_int_bound (pp, r.upper_bound (), r.type ());
    pp_character (pp, ']');
    print_irange_bitmasks (pp, r.m_bitmask);
+   // Dump the points to field if there is one.
+   print_pt (r);
  }
  
  void
diff -Nrcpad gcc-17-20260614/gcc/value-range-pretty-print.h gcc-17-20260621/gcc/value-range-pretty-print.h
*** gcc-17-20260614/gcc/value-range-pretty-print.h	Sun Jun 14 22:32:15 2026
--- gcc-17-20260621/gcc/value-range-pretty-print.h	Sun Jun 21 22:32:14 2026
*************** public:
*** 30,35 ****
--- 30,36 ----
    void visit (const prange &) const override;
    void visit (const frange &) const override;
  private:
+   void print_pt (const prange &) const;
    void print_frange_nan (const frange &) const;
    void print_real_value (tree type, const REAL_VALUE_TYPE &r) const;
  
diff -Nrcpad gcc-17-20260614/gcc/value-range-storage.cc gcc-17-20260621/gcc/value-range-storage.cc
*** gcc-17-20260614/gcc/value-range-storage.cc	Sun Jun 14 22:32:15 2026
--- gcc-17-20260621/gcc/value-range-storage.cc	Sun Jun 21 22:32:14 2026
*************** along with GCC; see the file COPYING3.
*** 24,29 ****
--- 24,30 ----
  #include "backend.h"
  #include "tree.h"
  #include "gimple.h"
+ #include "gimplify.h"
  #include "ssa.h"
  #include "tree-pretty-print.h"
  #include "fold-const.h"
*************** vrange_allocator::free (void *p)
*** 108,116 ****
  // it.
  
  vrange_storage *
! vrange_allocator::clone (const vrange &r)
  {
!   return vrange_storage::alloc (*m_alloc, r);
  }
  
  vrange_storage *
--- 109,117 ----
  // it.
  
  vrange_storage *
! vrange_allocator::clone (const vrange &r, bool shared_p)
  {
!   return vrange_storage::alloc (*m_alloc, r, shared_p);
  }
  
  vrange_storage *
*************** vrange_allocator::clone_undefined (tree
*** 141,152 ****
  // it.  Return NULL if R is unsupported.
  
  vrange_storage *
! vrange_storage::alloc (vrange_internal_alloc &allocator, const vrange &r)
  {
    if (is_a <irange> (r))
      return irange_storage::alloc (allocator, as_a <irange> (r));
    if (is_a <prange> (r))
!     return prange_storage::alloc (allocator, as_a <prange> (r));
    if (is_a <frange> (r))
      return frange_storage::alloc (allocator, as_a <frange> (r));
    return NULL;
--- 142,154 ----
  // it.  Return NULL if R is unsupported.
  
  vrange_storage *
! vrange_storage::alloc (vrange_internal_alloc &allocator, const vrange &r,
! 		       bool shared_p)
  {
    if (is_a <irange> (r))
      return irange_storage::alloc (allocator, as_a <irange> (r));
    if (is_a <prange> (r))
!     return prange_storage::alloc (allocator, as_a <prange> (r), shared_p);
    if (is_a <frange> (r))
      return frange_storage::alloc (allocator, as_a <frange> (r));
    return NULL;
*************** frange_storage::fits_p (const frange &)
*** 591,597 ****
  //============================================================================
  
  prange_storage *
! prange_storage::alloc (vrange_internal_alloc &allocator, const prange &r)
  {
    unsigned num_words;
    prange_format (r, num_words);
--- 593,600 ----
  //============================================================================
  
  prange_storage *
! prange_storage::alloc (vrange_internal_alloc &allocator, const prange &r,
! 		       bool shared_p)
  {
    unsigned num_words;
    prange_format (r, num_words);
*************** prange_storage::alloc (vrange_internal_a
*** 606,611 ****
--- 609,617 ----
    size_t size = sizeof (prange_storage) + extra_size;
    prange_storage *p = static_cast <prange_storage *> (allocator.alloc (size));
    new (p) prange_storage (r);
+   if (p->m_pt && !shared_p)
+     p->m_pt = unshare_expr_without_location (p->m_pt);
+ 
    return p;
  }
  
*************** prange_storage::prange_format (const pra
*** 657,663 ****
      num_words += 2;
  
    // PR_FULL must have a bitmask or points to, or it should be PR_VARYING.
!   gcc_checking_assert (kind != PR_FULL || !r.get_bitmask ().unknown_p ());
    return kind;
  }
  
--- 663,670 ----
      num_words += 2;
  
    // PR_FULL must have a bitmask or points to, or it should be PR_VARYING.
!   gcc_checking_assert (kind != PR_FULL || !r.get_bitmask ().unknown_p ()
! 		       || r.m_pt != NULL_TREE);
    return kind;
  }
  
*************** prange_storage::set_prange (const prange
*** 667,672 ****
--- 674,681 ----
    unsigned num_words;
    m_kind = prange_format (r, num_words);
    m_has_bitmask = !r.get_bitmask ().unknown_p ();
+   m_pt = r.m_pt;
+   m_points_to_p = r.m_points_to_p;
  
    unsigned index = 0;
  
*************** prange_storage::get_prange (prange &r, t
*** 751,756 ****
--- 760,768 ----
    else
      r.m_bitmask.set_unknown (TYPE_PRECISION (type));
  
+   r.m_points_to_p = m_points_to_p;
+   r.m_pt = m_pt;
+ 
    if (flag_checking)
      r.verify_range ();
  }
*************** prange_storage::equal_p (const prange &r
*** 803,808 ****
--- 815,825 ----
      if (!r.m_bitmask.unknown_p ())
        return false;
  
+   if (m_pt != r.m_pt)
+     return false;
+   if (m_points_to_p != r.m_points_to_p)
+     return false;
+ 
    return true;
  }
  
*************** vrange_storage *ggc_alloc_vrange_storage
*** 827,833 ****
    return ggc_vrange_allocator.clone_varying (type);
  }
  
! vrange_storage *ggc_alloc_vrange_storage (const vrange &r)
  {
!   return ggc_vrange_allocator.clone (r);
  }
--- 844,850 ----
    return ggc_vrange_allocator.clone_varying (type);
  }
  
! vrange_storage *ggc_alloc_vrange_storage (const vrange &r, bool shared_p)
  {
!   return ggc_vrange_allocator.clone (r, shared_p);
  }
diff -Nrcpad gcc-17-20260614/gcc/value-range-storage.h gcc-17-20260621/gcc/value-range-storage.h
*** gcc-17-20260614/gcc/value-range-storage.h	Sun Jun 14 22:32:15 2026
--- gcc-17-20260621/gcc/value-range-storage.h	Sun Jun 21 22:32:14 2026
*************** public:
*** 30,36 ****
    // Use GC memory when GC is true, otherwise use obstacks.
    vrange_allocator (bool gc = false);
    ~vrange_allocator ();
!   class vrange_storage *clone (const vrange &r);
    vrange_storage *clone_varying (tree type);
    vrange_storage *clone_undefined (tree type);
    void *alloc (size_t size);
--- 30,36 ----
    // Use GC memory when GC is true, otherwise use obstacks.
    vrange_allocator (bool gc = false);
    ~vrange_allocator ();
!   class vrange_storage *clone (const vrange &r, bool shared_p = true);
    vrange_storage *clone_varying (tree type);
    vrange_storage *clone_undefined (tree type);
    void *alloc (size_t size);
*************** private:
*** 49,55 ****
  class GTY((desc ("%h.m_discriminator"), tag("VR_UNKNOWN"))) vrange_storage
  {
  public:
!   static vrange_storage *alloc (vrange_internal_alloc &, const vrange &);
    void get_vrange (vrange &r, tree type) const;
    void set_vrange (const vrange &r);
    bool fits_p (const vrange &r) const;
--- 49,56 ----
  class GTY((desc ("%h.m_discriminator"), tag("VR_UNKNOWN"))) vrange_storage
  {
  public:
!   static vrange_storage *alloc (vrange_internal_alloc &, const vrange &,
! 				bool shared_p = true);
    void get_vrange (vrange &r, tree type) const;
    void set_vrange (const vrange &r);
    bool fits_p (const vrange &r) const;
*************** public:
*** 121,127 ****
    friend void gt_pch_nx_vrange_storage(void *);
    friend void gt_pch_p_14vrange_storage(void *, void *, gt_pointer_operator,
  					void *);
!   static prange_storage *alloc (vrange_internal_alloc &, const prange &);
    void set_prange (const prange &r);
    void get_prange (prange &r, tree type) const;
    bool equal_p (const prange &r) const;
--- 122,129 ----
    friend void gt_pch_nx_vrange_storage(void *);
    friend void gt_pch_p_14vrange_storage(void *, void *, gt_pointer_operator,
  					void *);
!   static prange_storage *alloc (vrange_internal_alloc &, const prange &,
! 				bool shared_p = true);
    void set_prange (const prange &r);
    void get_prange (prange &r, tree type) const;
    bool equal_p (const prange &r) const;
*************** private:
*** 135,140 ****
--- 137,144 ----
  
    enum prange_kind m_kind;
    bool m_has_bitmask;
+   bool m_points_to_p;
+   tree m_pt;
  
    // We don't use TRAILING_WIDE_INT_ACCESSOR because the getters here
    // must be const.  Perhaps TRAILING_WIDE_INT_ACCESSOR could be made
*************** class GTY((tag ("VR_FRANGE"))) frange_st
*** 170,175 ****
  };
  
  extern vrange_storage *ggc_alloc_vrange_storage (tree type);
! extern vrange_storage *ggc_alloc_vrange_storage (const vrange &);
  
  #endif // GCC_VALUE_RANGE_STORAGE_H
--- 174,180 ----
  };
  
  extern vrange_storage *ggc_alloc_vrange_storage (tree type);
! extern vrange_storage *ggc_alloc_vrange_storage (const vrange &,
! 						 bool shared_p = true);
  
  #endif // GCC_VALUE_RANGE_STORAGE_H
diff -Nrcpad gcc-17-20260614/gcc/value-range.cc gcc-17-20260621/gcc/value-range.cc
*** gcc-17-20260614/gcc/value-range.cc	Sun Jun 14 22:32:15 2026
--- gcc-17-20260621/gcc/value-range.cc	Sun Jun 21 22:32:14 2026
*************** along with GCC; see the file COPYING3.
*** 30,35 ****
--- 30,37 ----
  #include "value-range-pretty-print.h"
  #include "fold-const.h"
  #include "gimple-range.h"
+ #include "tree-dfa.h"
+ #include "tree-affine.h"
  
  // Return the bitmask inherent in a range :   TYPE [MIN, MAX].
  // This used to be get_bitmask_from_range ().
*************** add_vrange (const vrange &v, inchash::ha
*** 458,463 ****
--- 460,473 ----
  	  irange_bitmask bm = r.get_bitmask ();
  	  hstate.add_wide_int (bm.value ());
  	  hstate.add_wide_int (bm.mask ());
+ 	  bool flag = false;
+ 	  tree tmp = r.pt_invariant ();
+ 	  if (tmp)
+ 	    flag = true;
+ 	  else
+ 	    tmp = r.pt_invariant_away ();
+ 	  hstate.add_ptr (tmp);
+ 	  hstate.add_flag (flag);
  	}
        return;
      }
*************** irange::set_nonnegative (tree type)
*** 516,521 ****
--- 526,626 ----
         wi::to_wide (TYPE_MAX_VALUE (type)));
  }
  
+ 
+ // Set the points to info for EXPR if possible.  POINTS_TO_P is true if it
+ // points to EXPR, and FALSE if it points away.
+ 
+ void
+ prange::set_pt (tree expr, bool points_to_p)
+ {
+   gcc_checking_assert (m_kind != VR_UNDEFINED);
+   gcc_checking_assert (!expr || TREE_CODE (expr) != SSA_NAME);
+ 
+   m_pt = NULL_TREE;
+   m_points_to_p = false;
+ 
+   // No points to initially may make this VARYING.
+   if (varying_compatible_p ())
+     set_varying (type ());
+   else
+     m_kind = VR_RANGE;
+ 
+   if (!expr)
+     return;
+ 
+   gcc_checking_assert (TREE_CODE (expr) == ADDR_EXPR);
+ 
+   // Ensure only constants get through for now.
+   if (!is_gimple_min_invariant (expr))
+     return;
+ 
+   aff_tree offset;
+   poly_widest_int size;
+   tree obj = TREE_OPERAND (expr, 0);
+   tree base = get_inner_reference_aff (obj, &offset, &size);
+ 
+   if (!base)
+     return;
+   if (!offset.offset.is_constant ())
+     return;
+   if (!size.is_constant ())
+     return;
+ 
+   m_pt = expr;
+   m_points_to_p = points_to_p;
+   m_kind = VR_RANGE;
+ }
+ 
+ // Return object/allocation the pointer refers into, otherwise NULL_TREE.
+ 
+ tree
+ prange::pt_base () const
+ {
+   if (!m_pt)
+     return NULL_TREE;
+ 
+   aff_tree off;
+   poly_widest_int sz;
+ 
+   gcc_checking_assert (m_pt);
+   return get_inner_reference_aff (m_pt, &off, &sz);
+ }
+ 
+ // Return possible byte offset range from BASE.
+ 
+ void
+ prange::pt_offset (irange &r) const
+ {
+   aff_tree off;
+   poly_widest_int sz;
+ 
+   gcc_checking_assert (m_pt);
+ 
+   get_inner_reference_aff (m_pt, &off, &sz);
+   gcc_checking_assert (off.offset.is_constant ());
+ 
+   widest_int w = off.offset.coeffs[0];
+   wide_int w2 = wi::to_wide (wide_int_to_tree (sizetype, w));
+   r.set (sizetype, w2, w2);
+ }
+ 
+ // Return possible size range of the referenced object.
+ 
+ void
+ prange::pt_size (irange &r) const
+ {
+   aff_tree off;
+   poly_widest_int sz;
+ 
+   gcc_checking_assert (m_pt);
+ 
+   get_inner_reference_aff (m_pt, &off, &sz);
+   gcc_checking_assert (sz.is_constant ());
+ 
+   widest_int w = sz.coeffs[0];
+   wide_int w2 = wi::to_wide (wide_int_to_tree (sizetype, w));
+   r.set (sizetype, w2, w2);
+ }
  // Prange implementation.
  
  void
*************** prange::set (tree type, const wide_int &
*** 561,566 ****
--- 666,673 ----
    m_type = type;
    m_min = min;
    m_max = max;
+   set_pt_unknown ();
+ 
    if (m_min == 0 && m_max == -1)
      {
        m_kind = VR_VARYING;
*************** prange::union_ (const vrange &v)
*** 640,645 ****
--- 747,758 ----
    prange new_range (type (), new_lb, new_ub);
    new_range.m_bitmask.union_ (m_bitmask);
    new_range.m_bitmask.union_ (r.m_bitmask);
+ 
+   // Keep it simple, either both point to the same thing or both
+   // do not point to the same thing, or we drop the points to info.
+   if (pt_equal_p (r))
+     new_range.set_pt (*this);
+ 
    if (new_range.varying_compatible_p ())
      {
        set_varying (type ());
*************** prange::intersect (const vrange &v)
*** 675,680 ****
--- 788,800 ----
        return true;
      }
  
+   // If this points to and away, results are undefined,
+   if (pt_inverted_p (r))
+     {
+       set_undefined ();
+       return true;
+     }
+ 
    prange save = *this;
    m_min = wi::max (r.lower_bound (), lower_bound (), UNSIGNED);
    m_max = wi::min (r.upper_bound (), upper_bound (), UNSIGNED);
*************** prange::intersect (const vrange &v)
*** 690,695 ****
--- 810,830 ----
      set_undefined ();
    else if (!m_bitmask.intersect (r.m_bitmask))
      set_undefined ();
+   // If only one object points to something, that is the intersection.
+   else if (pt_unknown_p () && !r.pt_unknown_p ())
+     set_pt (r);
+   else if (!pt_unknown_p () && !r.pt_unknown_p ())
+     {
+       // If both point to something, we want to be careful.  Without aliasing
+       // 2 different values can point to the same thing, so UNDEFINED is
+       // not appropriate, but we want to keep the rule that intersection
+       // never becomes larger.
+       // If the other object points to something specific, and this one does
+       // not, use the specific one. Otherwise leave the range as is.
+       if (pt_invariant_away () && r.pt_invariant ())
+ 	set_pt (r);
+     }
+ 
    if (varying_compatible_p ())
      {
        set_varying (type ());
*************** prange::operator= (const prange &src)
*** 711,716 ****
--- 846,852 ----
    m_min = src.m_min;
    m_max = src.m_max;
    m_bitmask = src.m_bitmask;
+   set_pt (src);
    if (flag_checking)
      verify_range ();
    return *this;
*************** prange::operator== (const prange &src) c
*** 727,743 ****
--- 863,889 ----
        if (varying_p ())
  	return types_compatible_p (type (), src.type ());
  
+       if (!pt_equal_p (src))
+ 	return false;
+ 
        return (m_min == src.m_min && m_max == src.m_max
  	      && m_bitmask == src.m_bitmask);
      }
    return false;
  }
  
+ 
  void
  prange::invert ()
  {
    gcc_checking_assert (!undefined_p () && !varying_p ());
  
+   // Invert the points_to object. If that worked, this is done.
+   if (pt_invert ())
+     return;
+   else
+     set_pt_unknown ();
+ 
    wide_int new_lb, new_ub;
    unsigned prec = TYPE_PRECISION (type ());
    wide_int type_min = wi::zero (prec);
*************** prange::verify_range () const
*** 771,777 ****
    gcc_checking_assert (m_discriminator == VR_PRANGE);
  
    if (m_kind == VR_UNDEFINED)
!     return;
  
    gcc_checking_assert (supports_p (type ()));
  
--- 917,926 ----
    gcc_checking_assert (m_discriminator == VR_PRANGE);
  
    if (m_kind == VR_UNDEFINED)
!     {
!       gcc_checking_assert (pt_unknown_p ());
!       return;
!     }
  
    gcc_checking_assert (supports_p (type ()));
  
diff -Nrcpad gcc-17-20260614/gcc/value-range.h gcc-17-20260621/gcc/value-range.h
*** gcc-17-20260614/gcc/value-range.h	Sun Jun 14 22:32:15 2026
--- gcc-17-20260621/gcc/value-range.h	Sun Jun 21 22:32:14 2026
*************** public:
*** 440,445 ****
--- 440,484 ----
    virtual void verify_range () const final override;
    irange_bitmask get_bitmask () const final override;
    void update_bitmask (const irange_bitmask &) final override;
+ 
+   // prange interface to points to information.
+   // It can point_to or point_away from an object.  This represents both
+   // sides of a conditional. ie:
+   //   if (p == &foo)
+   //     // p points to foo.
+   //   else
+   //     // p points away from foo.
+   // pt_invariant () and pt_invariant_away () - Return pt if this is invariant.
+   void set_pt (const prange &r);
+   void set_pt (tree ptr, bool points_to_p = true);
+ 
+   // unknown_p () is true if no object is pointed to.
+   void set_pt_unknown ();
+   bool pt_unknown_p () const;
+ 
+   // Invariant points-to are is_gimple_min_invariant_p ().
+   // Return expression or NULL_TREE for points-to or away
+   tree pt_invariant () const;
+   tree pt_invariant_away () const;
+ 
+   // Return true if THIS and R both point to the same object.
+   bool pt_invariant_p (const prange &r) const;
+   // Return true if THIS and R both point away from the same object.
+   bool pt_invariant_away_p (const prange &r) const;
+   // Return true if THIS and R refer to the same object, and one is inverted
+   // from the other,  Ie, both to and away.
+   bool pt_inverted_p (const prange &r) const;
+ 
+   // Invert THIS if it points either to or away from an object.
+   bool pt_invert ();
+ 
+   // pt_base () - object/allocation the pointer refers into.
+   tree pt_base () const;
+   // pt_offset () - possible byte offset range from BASE.
+   void pt_offset (irange &) const;
+   // pt_size () - possible size range of the referenced object.
+   void pt_size (irange &) const;
+ 
  protected:
    bool varying_compatible_p () const;
  
*************** protected:
*** 447,452 ****
--- 486,497 ----
    wide_int m_min;
    wide_int m_max;
    irange_bitmask m_bitmask;
+ 
+    // A prange can point to an object, or NOT point to an object.
+   tree m_pt;		// object points-to refers to.
+   bool m_points_to_p;	// Does it point to it (TRUE), or not (FALSE).
+   // If P has the same points to fields as THIS.
+   bool pt_equal_p (const class prange &p) const;
  };
  
  // Unsupported temporaries may be created by ranger before it's known
*************** inline void
*** 1329,1334 ****
--- 1374,1380 ----
  prange::set_undefined ()
  {
    m_kind = VR_UNDEFINED;
+   set_pt_unknown ();
  }
  
  inline void
*************** prange::set_varying (tree type)
*** 1339,1344 ****
--- 1385,1391 ----
    m_min = wi::zero (TYPE_PRECISION (type));
    m_max = wi::max_value (TYPE_PRECISION (type), UNSIGNED);
    m_bitmask.set_unknown (TYPE_PRECISION (type));
+   set_pt_unknown ();
  
    if (flag_checking)
      verify_range ();
*************** prange::set_nonzero (tree type)
*** 1352,1357 ****
--- 1399,1405 ----
    m_min = wi::one (TYPE_PRECISION (type));
    m_max = wi::max_value (TYPE_PRECISION (type), UNSIGNED);
    m_bitmask.set_unknown (TYPE_PRECISION (type));
+   set_pt_unknown ();
  
    if (flag_checking)
      verify_range ();
*************** prange::set_zero (tree type)
*** 1365,1370 ****
--- 1413,1419 ----
    wide_int zero = wi::zero (TYPE_PRECISION (type));
    m_min = m_max = zero;
    m_bitmask = irange_bitmask (zero, zero);
+   set_pt_unknown ();
  
    if (flag_checking)
      verify_range ();
*************** prange::contains_p (tree cst) const
*** 1379,1385 ****
  inline bool
  prange::zero_p () const
  {
!   return m_kind == VR_RANGE && m_min == 0 && m_max == 0;
  }
  
  inline bool
--- 1428,1437 ----
  inline bool
  prange::zero_p () const
  {
!   bool ret = m_kind == VR_RANGE && m_min == 0 && m_max == 0;
!   // if zero_p is true, there should be no points to info.
!   gcc_checking_assert (!ret || pt_unknown_p ());
!   return ret;
  }
  
  inline bool
*************** prange::upper_bound () const
*** 1412,1419 ****
  inline bool
  prange::varying_compatible_p () const
  {
!   return (!undefined_p ()
! 	  && m_min == 0 && m_max == -1 && get_bitmask ().unknown_p ());
  }
  
  inline irange_bitmask
--- 1464,1471 ----
  inline bool
  prange::varying_compatible_p () const
  {
!   return (!undefined_p () && m_min == 0 && m_max == -1
! 	  && get_bitmask ().unknown_p () && pt_unknown_p ());
  }
  
  inline irange_bitmask
*************** prange::fits_p (const vrange &) const
*** 1428,1433 ****
--- 1480,1579 ----
    return true;
  }
  
+ // Set this range's point-to object to PTR, and POINTS_TO_P is TRUE if it
+ // does point to it, and FALSE if it does not point to it.
+ 
+ inline void
+ prange::set_pt (const prange &r)
+ {
+   m_pt = r.m_pt;
+   m_points_to_p = r.m_points_to_p;
+ 
+   if (r.undefined_p ())
+     return;
+   // Check whether this is now VARYING or not.
+   if (varying_compatible_p ())
+     set_varying (type ());
+   else
+     m_kind = VR_RANGE;
+ }
+ 
+ // prange_pt methods.
+ // ------------------------------------------------------------------
+ 
+ inline void
+ prange::set_pt_unknown ()
+ {
+   m_pt = NULL_TREE;
+   m_points_to_p = false;
+ }
+ 
+ inline bool
+ prange::pt_unknown_p () const
+ {
+   return (m_pt == NULL_TREE);
+ }
+ 
+ inline bool
+ prange::pt_equal_p (const prange &p) const
+ {
+   return (m_points_to_p == p.m_points_to_p && m_pt == p.m_pt);
+ }
+ 
+ inline bool
+ prange::pt_inverted_p (const prange &r) const
+ {
+   return m_pt && vrp_operand_equal_p (m_pt, r.m_pt)
+ 	 && m_points_to_p != r.m_points_to_p;
+ }
+ 
+ inline bool
+ prange::pt_invert ()
+ {
+   if (m_pt)
+     {
+       m_points_to_p = !m_points_to_p;
+       return true;
+     }
+   return false;
+ }
+ 
+ inline tree
+ prange::pt_invariant () const
+ {
+   if (m_pt && m_points_to_p)
+     return m_pt;
+   return NULL_TREE;
+ }
+ 
+ inline tree
+ prange::pt_invariant_away () const
+ {
+   if (m_pt && !m_points_to_p)
+     return m_pt;
+   return NULL_TREE;
+ }
+ 
+ inline bool
+ prange::pt_invariant_p (const prange &r) const
+ {
+   if (m_pt && m_points_to_p && vrp_operand_equal_p (r.m_pt, m_pt)
+       && m_points_to_p == r.m_points_to_p)
+     return true;
+   return false;
+ }
+ 
+ inline bool
+ prange::pt_invariant_away_p (const prange &r) const
+ {
+   if (m_pt && !m_points_to_p && vrp_operand_equal_p (r.m_pt, m_pt)
+       && m_points_to_p == r.m_points_to_p)
+     return true;
+   return false;
+ }
+ 
+ 
+ // -----------------------------------------------------------------------
  
  inline
  frange::frange ()
diff -Nrcpad gcc-17-20260614/include/ChangeLog gcc-17-20260621/include/ChangeLog
*** gcc-17-20260614/include/ChangeLog	Sun Jun 14 22:32:15 2026
--- gcc-17-20260621/include/ChangeLog	Sun Jun 21 22:32:14 2026
***************
*** 1,3 ****
--- 1,8 ----
+ 2026-06-19  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	PR libgomp/125877
+ 	* cuda/cuda.h (cuDeviceGetPCIBusId): Declare.
+ 
  2026-06-13  Sunil Dora  <sunilkumar.dora@windriver.com>
  
  	PR driver/111527
diff -Nrcpad gcc-17-20260614/include/cuda/cuda.h gcc-17-20260621/include/cuda/cuda.h
*** gcc-17-20260614/include/cuda/cuda.h	Sun Jun 14 22:32:15 2026
--- gcc-17-20260621/include/cuda/cuda.h	Sun Jun 21 22:32:14 2026
*************** CUresult cuDeviceTotalMem (size_t *, CUd
*** 237,242 ****
--- 237,243 ----
  CUresult cuDeviceGetAttribute (int *, CUdevice_attribute, CUdevice);
  CUresult cuDeviceGetCount (int *);
  CUresult cuDeviceGetName (char *, int, CUdevice);
+ CUresult cuDeviceGetPCIBusId (char *, int, CUdevice);
  CUresult cuEventCreate (CUevent *, unsigned);
  #define cuEventDestroy cuEventDestroy_v2
  CUresult cuEventDestroy (CUevent);
diff -Nrcpad gcc-17-20260614/libatomic/ChangeLog gcc-17-20260621/libatomic/ChangeLog
*** gcc-17-20260614/libatomic/ChangeLog	Sun Jun 14 22:32:15 2026
--- gcc-17-20260621/libatomic/ChangeLog	Sun Jun 21 22:32:14 2026
***************
*** 1,3 ****
--- 1,9 ----
+ 2026-06-17  Muhammad Kamran  <muhammad.kamran@arm.com>
+ 
+ 	* config/linux/aarch64/atomic_16.S (FEATURE_1_AND_MARK): Define.
+ 	Use AArch64 build attributes when __ARM_BUILDATTR64_FV is
+ 	available, otherwise emit a GNU property note.
+ 
  2026-06-01  Dhruv Chawla  <dhruvc@nvidia.com>
  
  	* config/mingw/lock.c: Fix typos.
diff -Nrcpad gcc-17-20260614/libatomic/config/linux/aarch64/atomic_16.S gcc-17-20260621/libatomic/config/linux/aarch64/atomic_16.S
*** gcc-17-20260614/libatomic/config/linux/aarch64/atomic_16.S	Sun Jun 14 22:32:15 2026
--- gcc-17-20260621/libatomic/config/linux/aarch64/atomic_16.S	Sun Jun 21 22:32:14 2026
*************** END_FEAT (compare_exchange_16, LSE)
*** 796,802 ****
  # define GCS_FLAG 0
  #endif
  
- /* Add a NT_GNU_PROPERTY_TYPE_0 note.  */
  #define GNU_PROPERTY(type, value)	\
    .section .note.gnu.property, "a";     \
    .p2align 3;				\
--- 796,801 ----
*************** END_FEAT (compare_exchange_16, LSE)
*** 809,819 ****
    .word value;				\
    .word 0;
  
  #if defined(__linux__) || defined(__FreeBSD__)
  .section .note.GNU-stack, "", %progbits
  
! /* Add GNU property note if built with branch protection.  */
  # if (BTI_FLAG|PAC_FLAG|GCS_FLAG) != 0
! GNU_PROPERTY (FEATURE_1_AND, BTI_FLAG|PAC_FLAG|GCS_FLAG)
  # endif
  #endif
--- 808,842 ----
    .word value;				\
    .word 0;
  
+ #ifdef __ARM_BUILDATTR64_FV
+ /* Add AArch64 feature bits build attributes.  */
+ # define FEATURE_1_AND_MARK(value)					\
+     .aeabi_subsection aeabi_feature_and_bits, optional, ULEB128;	\
+     .if ((value) & FEATURE_1_BTI);					\
+     .aeabi_attribute Tag_Feature_BTI, 1;				\
+     .else;								\
+     .aeabi_attribute Tag_Feature_BTI, 0;				\
+     .endif;								\
+     .if ((value) & FEATURE_1_PAC);					\
+     .aeabi_attribute Tag_Feature_PAC, 1;				\
+     .else;								\
+     .aeabi_attribute Tag_Feature_PAC, 0;				\
+     .endif;								\
+     .if ((value) & FEATURE_1_GCS);					\
+     .aeabi_attribute Tag_Feature_GCS, 1;				\
+     .else;								\
+     .aeabi_attribute Tag_Feature_GCS, 0;				\
+     .endif;
+ #else
+ /* Add a NT_GNU_PROPERTY_TYPE_0 note.  */
+ # define FEATURE_1_AND_MARK(value) GNU_PROPERTY (FEATURE_1_AND, value)
+ #endif
+ 
  #if defined(__linux__) || defined(__FreeBSD__)
  .section .note.GNU-stack, "", %progbits
  
! /* Add markings if built with branch protection.  */
  # if (BTI_FLAG|PAC_FLAG|GCS_FLAG) != 0
! FEATURE_1_AND_MARK (BTI_FLAG|PAC_FLAG|GCS_FLAG)
  # endif
  #endif
diff -Nrcpad gcc-17-20260614/libcpp/ChangeLog gcc-17-20260621/libcpp/ChangeLog
*** gcc-17-20260614/libcpp/ChangeLog	Sun Jun 14 22:32:15 2026
--- gcc-17-20260621/libcpp/ChangeLog	Sun Jun 21 22:32:14 2026
***************
*** 1,3 ****
--- 1,18 ----
+ 2026-06-16  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* include/cpplib.h (enum c_lang): Add CLK_GNUCXX29 and CLK_CXX29.
+ 	* init.cc (lang_defaults): Add CLK_GNUCXX29 and CLK_CXX29 row.
+ 	(cpp_init_builtins): Change __cplusplus value for C++26 from 202400L
+ 	to 202603L and set __cplusplus value for C++29 to 202700L.
+ 
+ 2026-06-14  Ben Boeckel  <ben.boeckel@kitware.com>
+ 
+ 	* init.cc (cpp_finish): Remove unnecessary `struct` keyword.
+ 
+ 2026-06-14  Ben Boeckel  <ben.boeckel@kitware.com>
+ 
+ 	* mkdeps.cc (fdeps_add_target): Fix indentation.
+ 
  2026-05-30  Dhruv Chawla  <dhruvc@nvidia.com>
  
  	* files.cc (_cpp_stack_translated_file): Fix typos.
diff -Nrcpad gcc-17-20260614/libcpp/include/cpplib.h gcc-17-20260621/libcpp/include/cpplib.h
*** gcc-17-20260614/libcpp/include/cpplib.h	Sun Jun 14 22:32:15 2026
--- gcc-17-20260621/libcpp/include/cpplib.h	Sun Jun 21 22:32:14 2026
*************** enum c_lang {CLK_GNUC89 = 0, CLK_GNUC99,
*** 183,189 ****
  	     CLK_GNUCXX, CLK_CXX98, CLK_GNUCXX11, CLK_CXX11,
  	     CLK_GNUCXX14, CLK_CXX14, CLK_GNUCXX17, CLK_CXX17,
  	     CLK_GNUCXX20, CLK_CXX20, CLK_GNUCXX23, CLK_CXX23,
! 	     CLK_GNUCXX26, CLK_CXX26, CLK_ASM};
  
  /* Payload of a NUMBER, STRING, CHAR or COMMENT token.  */
  struct GTY(()) cpp_string {
--- 183,190 ----
  	     CLK_GNUCXX, CLK_CXX98, CLK_GNUCXX11, CLK_CXX11,
  	     CLK_GNUCXX14, CLK_CXX14, CLK_GNUCXX17, CLK_CXX17,
  	     CLK_GNUCXX20, CLK_CXX20, CLK_GNUCXX23, CLK_CXX23,
! 	     CLK_GNUCXX26, CLK_CXX26, CLK_GNUCXX29, CLK_CXX29,
! 	     CLK_ASM};
  
  /* Payload of a NUMBER, STRING, CHAR or COMMENT token.  */
  struct GTY(()) cpp_string {
diff -Nrcpad gcc-17-20260614/libcpp/init.cc gcc-17-20260621/libcpp/init.cc
*** gcc-17-20260614/libcpp/init.cc	Sun Jun 14 22:32:15 2026
--- gcc-17-20260621/libcpp/init.cc	Sun Jun 21 22:32:14 2026
*************** static const struct lang_flags lang_defa
*** 151,156 ****
--- 151,158 ----
    /* CXX23    */ { 1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1 },
    /* GNUCXX26 */ { 1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,0,1,1,0,1 },
    /* CXX26    */ { 1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,0,1,1,0,1 },
+   /* GNUCXX29 */ { 1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,0,1,1,0,1 },
+   /* CXX29    */ { 1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,0,1,1,0,1 },
    /* ASM      */ { 0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }
  };
  
*************** cpp_init_builtins (cpp_reader *pfile, in
*** 599,609 ****
  
    if (CPP_OPTION (pfile, cplusplus))
      {
!       /* C++26 is not yet a standard.  For now, use an invalid
! 	 year/month, 202400L, which is larger than 202302L.  */
!       if (CPP_OPTION (pfile, lang) == CLK_CXX26
! 	  || CPP_OPTION (pfile, lang) == CLK_GNUCXX26)
! 	_cpp_define_builtin (pfile, "__cplusplus 202400L");
        else if (CPP_OPTION (pfile, lang) == CLK_CXX23
  	  || CPP_OPTION (pfile, lang) == CLK_GNUCXX23)
  	_cpp_define_builtin (pfile, "__cplusplus 202302L");
--- 601,614 ----
  
    if (CPP_OPTION (pfile, cplusplus))
      {
!       /* C++29 is not yet a standard.  For now, use an invalid
! 	 year/month, 202700L, which is larger than 202603L.  */
!       if (CPP_OPTION (pfile, lang) == CLK_CXX29
! 	  || CPP_OPTION (pfile, lang) == CLK_GNUCXX29)
! 	_cpp_define_builtin (pfile, "__cplusplus 202700L");
!       else if (CPP_OPTION (pfile, lang) == CLK_CXX26
! 	       || CPP_OPTION (pfile, lang) == CLK_GNUCXX26)
! 	_cpp_define_builtin (pfile, "__cplusplus 202603L");
        else if (CPP_OPTION (pfile, lang) == CLK_CXX23
  	  || CPP_OPTION (pfile, lang) == CLK_GNUCXX23)
  	_cpp_define_builtin (pfile, "__cplusplus 202302L");
diff -Nrcpad gcc-17-20260614/libffi/ChangeLog gcc-17-20260621/libffi/ChangeLog
*** gcc-17-20260614/libffi/ChangeLog	Sun Jun 14 22:32:15 2026
--- gcc-17-20260621/libffi/ChangeLog	Sun Jun 21 22:32:14 2026
***************
*** 1,3 ****
--- 1,18 ----
+ 2026-06-17  Wilco Dijkstra  <wilco.dijkstra@arm.com>
+ 
+ 	* LOCAL_PATCHES: Add commit 94c5f47d21aa5f144a690189222cc08b86a00505.
+ 
+ 2026-06-17  Muhammad Kamran  <muhammad.kamran@arm.com>
+ 
+ 	* src/aarch64/internal.h (AARCH64_POINTER_AUTH): Rename from
+ 	GNU_PROPERTY_AARCH64_POINTER_AUTH.
+ 	* src/aarch64/sysv.S (AARCH64_BTI): Rename from
+ 	GNU_PROPERTY_AARCH64_BTI.
+ 	(GNU_PROPERTY): New macro.
+ 	(FEATURE_1_AND_MARK): Likewise.
+ 	Emit BTI and PAC feature build attributes when
+ 	__ARM_BUILDATTR64_FV is defined.
+ 
  2026-05-26  Pietro Monteiro  <pietro@sociotechnical.xyz>
  
  	PR libffi/125417
diff -Nrcpad gcc-17-20260614/libffi/LOCAL_PATCHES gcc-17-20260621/libffi/LOCAL_PATCHES
*** gcc-17-20260614/libffi/LOCAL_PATCHES	Sun Jun 14 22:32:15 2026
--- gcc-17-20260621/libffi/LOCAL_PATCHES	Sun Jun 21 22:32:14 2026
***************
*** 2,4 ****
--- 2,5 ----
  8b5cb5bfeaeb64c232fe0147cb430f22d3f5e18d
  922414dd0975bd556059a65963f7e2a222849442
  c2fbaa4da5f2c46032109925fa8ae26f5f185ab1
+ 94c5f47d21aa5f144a690189222cc08b86a00505
diff -Nrcpad gcc-17-20260614/libffi/src/aarch64/internal.h gcc-17-20260621/libffi/src/aarch64/internal.h
*** gcc-17-20260614/libffi/src/aarch64/internal.h	Sun Jun 14 22:32:15 2026
--- gcc-17-20260621/libffi/src/aarch64/internal.h	Sun Jun 21 22:32:14 2026
*************** SOFTWARE OR THE USE OR OTHER DEALINGS IN
*** 91,100 ****
    #define SIGN_LR_LINUX_ONLY
    #define BRANCH_TO_REG braaz
    #define PAC_CFI_WINDOW_SAVE
!   #define GNU_PROPERTY_AARCH64_POINTER_AUTH 0
    /* Linux PAC Support */
    #elif defined(__ARM_FEATURE_PAC_DEFAULT)
!     #define GNU_PROPERTY_AARCH64_POINTER_AUTH (1 << 1)
      #define PAC_CFI_WINDOW_SAVE cfi_window_save
      #define TMP_REG x9
      #define BRANCH_TO_REG br
--- 91,100 ----
    #define SIGN_LR_LINUX_ONLY
    #define BRANCH_TO_REG braaz
    #define PAC_CFI_WINDOW_SAVE
!   #define AARCH64_POINTER_AUTH 0
    /* Linux PAC Support */
    #elif defined(__ARM_FEATURE_PAC_DEFAULT)
!     #define AARCH64_POINTER_AUTH (1 << 1)
      #define PAC_CFI_WINDOW_SAVE cfi_window_save
      #define TMP_REG x9
      #define BRANCH_TO_REG br
*************** SOFTWARE OR THE USE OR OTHER DEALINGS IN
*** 141,146 ****
      #define SIGN_LR_LINUX_ONLY
      #define BRANCH_TO_REG br
      #define PAC_CFI_WINDOW_SAVE
!     #define GNU_PROPERTY_AARCH64_POINTER_AUTH 0
    #endif /* HAVE_ARM64E_PTRAUTH */
  #endif /* LIBFFI_ASM */
--- 141,146 ----
      #define SIGN_LR_LINUX_ONLY
      #define BRANCH_TO_REG br
      #define PAC_CFI_WINDOW_SAVE
!     #define AARCH64_POINTER_AUTH 0
    #endif /* HAVE_ARM64E_PTRAUTH */
  #endif /* LIBFFI_ASM */
diff -Nrcpad gcc-17-20260614/libffi/src/aarch64/sysv.S gcc-17-20260621/libffi/src/aarch64/sysv.S
*** gcc-17-20260614/libffi/src/aarch64/sysv.S	Sun Jun 14 22:32:15 2026
--- gcc-17-20260621/libffi/src/aarch64/sysv.S	Sun Jun 21 22:32:14 2026
*************** SOFTWARE OR THE USE OR OTHER DEALINGS IN
*** 70,76 ****
   * The ELF Notes section needs to indicate if BTI is supported, as the first ELF loaded that doesn't
   * declare this support disables it for memory region containing the loaded library.
   */
! # define GNU_PROPERTY_AARCH64_BTI (1 << 0)         /* Has Branch Target Identification */
  	.text
  	.align 4
  
--- 70,76 ----
   * The ELF Notes section needs to indicate if BTI is supported, as the first ELF loaded that doesn't
   * declare this support disables it for memory region containing the loaded library.
   */
! # define AARCH64_BTI (1 << 0)         /* Has Branch Target Identification */
  	.text
  	.align 4
  
*************** CNAME(ffi_go_closure_SYSV):
*** 681,699 ****
  #endif /* FFI_CLOSURES */
  #endif /* __arm64__ */
  
  #if defined __ELF__ && defined __linux__
  	.section .note.GNU-stack,"",%progbits
! 
! 	.pushsection .note.gnu.property, "a";
! 	.balign 8;
! 	.long 4;
! 	.long 0x10;
! 	.long 0x5;
! 	.asciz "GNU";
! 	.long 0xc0000000; /* GNU_PROPERTY_AARCH64_FEATURE_1_AND */
! 	.long 4;
! 	.long GNU_PROPERTY_AARCH64_BTI | GNU_PROPERTY_AARCH64_POINTER_AUTH;
! 	.long 0;
! 	.popsection;
  #endif
- 
--- 681,719 ----
  #endif /* FFI_CLOSURES */
  #endif /* __arm64__ */
  
+ #define GNU_PROPERTY(value)						\
+ 	.pushsection .note.gnu.property, "a";				\
+ 	.balign 8;							\
+ 	.long 4;							\
+ 	.long 0x10;							\
+ 	.long 0x5;							\
+ 	.asciz "GNU";							\
+ 	.long 0xc0000000; /* GNU_PROPERTY_AARCH64_FEATURE_1_AND */	\
+ 	.long 4;							\
+ 	.long value;							\
+ 	.long 0;							\
+ 	.popsection;
+ 
+ #ifdef __ARM_BUILDATTR64_FV
+ /* Add AArch64 feature bits build attributes.  */
+ # define FEATURE_1_AND_MARK(value)					\
+     .aeabi_subsection aeabi_feature_and_bits, optional, ULEB128;	\
+     .if ((value) & AARCH64_BTI);					\
+     .aeabi_attribute Tag_Feature_BTI, 1;				\
+     .else;								\
+     .aeabi_attribute Tag_Feature_BTI, 0;				\
+     .endif;								\
+     .if ((value) & AARCH64_POINTER_AUTH);				\
+     .aeabi_attribute Tag_Feature_PAC, 1;				\
+     .else;								\
+     .aeabi_attribute Tag_Feature_PAC, 0;				\
+     .endif;
+ #else
+ /* Add a NT_GNU_PROPERTY_TYPE_0 note.  */
+ # define FEATURE_1_AND_MARK(value) GNU_PROPERTY (value)
+ #endif /* __ARM_BUILDATTR64_FV */
+ 
  #if defined __ELF__ && defined __linux__
  	.section .note.GNU-stack,"",%progbits
! FEATURE_1_AND_MARK(AARCH64_BTI | AARCH64_POINTER_AUTH)
  #endif
diff -Nrcpad gcc-17-20260614/libgcc/ChangeLog gcc-17-20260621/libgcc/ChangeLog
*** gcc-17-20260614/libgcc/ChangeLog	Sun Jun 14 22:32:15 2026
--- gcc-17-20260621/libgcc/ChangeLog	Sun Jun 21 22:32:14 2026
***************
*** 1,3 ****
--- 1,24 ----
+ 2026-06-17  Muhammad Kamran  <muhammad.kamran@arm.com>
+ 
+ 	* config/aarch64/aarch64-asm.h (FEATURE_1_AND_MARK): Define.
+ 	Use AArch64 build attributes when __ARM_BUILDATTR64_FV is
+ 	available, otherwise emit a GNU property note.
+ 
+ 2026-06-15  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	PR target/38239
+ 	* config/sol2/gmon.c [__i386__] (_mcount): Pass selfpc, frompc to
+ 	internal_mcount.
+ 	(internal_mcount): Remove already_setup.
+ 	Remove obsolete comment.
+ 	(moncontrol): Disable profil(2) deprecation warning.
+ 
+ 2026-06-14  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	* config/avr/asm-defs.h (REGNO): Recognize: x, y, z, X, Y, Z.
+ 	(PC_SIZE): New define.
+ 	* config/avr/lib1funcs.S (__mulpsi3, __mulsi3): Use it.
+ 
  2026-06-12  Ramin Moussavi  <lordrasmus@gmail.com>
  
  	* config.host (microblaze*-linux*): Set md_unwind_header.
diff -Nrcpad gcc-17-20260614/libgcc/config/aarch64/aarch64-asm.h gcc-17-20260621/libgcc/config/aarch64/aarch64-asm.h
*** gcc-17-20260614/libgcc/config/aarch64/aarch64-asm.h	Sun Jun 14 22:32:15 2026
--- gcc-17-20260621/libgcc/config/aarch64/aarch64-asm.h	Sun Jun 21 22:32:14 2026
***************
*** 78,84 ****
  #define SYMBOL_TYPE(name, _type)
  #endif
  
- /* Add a NT_GNU_PROPERTY_TYPE_0 note.  */
  #define GNU_PROPERTY(type, value)	\
    .section .note.gnu.property, "a";	\
    .p2align 3;				\
--- 78,83 ----
***************
*** 92,105 ****
    .word 0;				\
    .previous
  
  #if defined(__linux__) || defined(__FreeBSD__)
  /* Do not require executable stack.  */
  .section .note.GNU-stack, "", %progbits
  .previous
  
! /* Add GNU property note if built with branch protection.  */
  # if (BTI_FLAG|PAC_FLAG|GCS_FLAG) != 0
! GNU_PROPERTY (FEATURE_1_AND, BTI_FLAG|PAC_FLAG|GCS_FLAG)
  # endif
  #endif
  
--- 91,129 ----
    .word 0;				\
    .previous
  
+ #ifdef __ARM_BUILDATTR64_FV
+ /* Add AArch64 feature bits build attributes.  */
+ # define FEATURE_1_AND_MARK(value)					\
+     .aeabi_subsection aeabi_feature_and_bits, optional, ULEB128;	\
+     .if ((value) & FEATURE_1_BTI);					\
+     .aeabi_attribute Tag_Feature_BTI, 1;				\
+     .else;								\
+     .aeabi_attribute Tag_Feature_BTI, 0;				\
+     .endif;								\
+     .if ((value) & FEATURE_1_PAC);					\
+     .aeabi_attribute Tag_Feature_PAC, 1;				\
+     .else;								\
+     .aeabi_attribute Tag_Feature_PAC, 0;				\
+     .endif;								\
+     .if ((value) & FEATURE_1_GCS);					\
+     .aeabi_attribute Tag_Feature_GCS, 1;				\
+     .else;								\
+     .aeabi_attribute Tag_Feature_GCS, 0;				\
+     .endif;								\
+     .previous
+ #else
+ /* Add a NT_GNU_PROPERTY_TYPE_0 note.  */
+ # define FEATURE_1_AND_MARK(value) GNU_PROPERTY (FEATURE_1_AND, value)
+ #endif
+ 
  #if defined(__linux__) || defined(__FreeBSD__)
  /* Do not require executable stack.  */
  .section .note.GNU-stack, "", %progbits
  .previous
  
! /* Add marking if built with branch protection.  */
  # if (BTI_FLAG|PAC_FLAG|GCS_FLAG) != 0
! FEATURE_1_AND_MARK (BTI_FLAG|PAC_FLAG|GCS_FLAG)
  # endif
  #endif
  
diff -Nrcpad gcc-17-20260614/libgcc/config/sol2/gmon.c gcc-17-20260621/libgcc/config/sol2/gmon.c
*** gcc-17-20260614/libgcc/config/sol2/gmon.c	Sun Jun 14 22:32:16 2026
--- gcc-17-20260621/libgcc/config/sol2/gmon.c	Sun Jun 21 22:32:14 2026
*************** asm(".globl _mcount\n"
*** 225,233 ****
      "	pushl	%eax\n"
      "	pushl	%ecx\n"
      "	pushl	%edx\n"
!     "	movl	12(%esp), %edx\n"
!     "	movl	4(%ebp), %eax\n"
      "	call	internal_mcount\n"
      "	popl	%edx\n"
      "	popl	%ecx\n"
      "	popl	%eax\n"
--- 225,236 ----
      "	pushl	%eax\n"
      "	pushl	%ecx\n"
      "	pushl	%edx\n"
!     /* Get SELFPC (pushed by the call to this function) and
!        FROMPCINDEX (via the frame pointer).  */
!     "	pushl	4(%ebp)\n"
!     "	pushl	16(%esp)\n"
      "	call	internal_mcount\n"
+     "	addl	$8, %esp\n"
      "	popl	%edx\n"
      "	popl	%ecx\n"
      "	popl	%eax\n"
*************** internal_mcount (char *selfpc, unsigned
*** 311,320 ****
    struct tostruct *top;
    struct tostruct *prevtop;
    long toindex;
-   static char already_setup;
- 
- /* Only necessary without the Solaris CRTs or a proper gcrt1.o, otherwise
-    crtpg.o or gcrt1.o take care of that.
  
    /* Check that we are profiling and that we aren't recursively invoked.  */
    if (profiling) {
--- 314,319 ----
*************** internal_mcount (char *selfpc, unsigned
*** 398,403 ****
--- 397,405 ----
    goto out;
  }
  
+ /* Disable profil(2) deprecation warning.  */
+ #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+ 
  /* Control profiling.  Profiling is what mcount checks to see if all the
     data structures are ready.  */
  static void
diff -Nrcpad gcc-17-20260614/libgcobol/ChangeLog gcc-17-20260621/libgcobol/ChangeLog
*** gcc-17-20260614/libgcobol/ChangeLog	Sun Jun 14 22:32:16 2026
--- gcc-17-20260621/libgcobol/ChangeLog	Sun Jun 21 22:32:14 2026
***************
*** 1,3 ****
--- 1,36 ----
+ 2026-06-20  Robert Dubner  <rdubner@symas.com>
+ 
+ 	* charmaps.cc: Eliminate rt_encoding_t.
+ 	* libgcobol.cc (console_init): Change how __gg__console_encoding is
+ 	established.
+ 	(initialize_program_state): Likewise.
+ 	(get_binary_value_local): Use new conversion algorithms.
+ 	(__gg__move): Likewise.
+ 	* stringbin.cc (__gg__numeric_display_to_binary):  Likewise.
+ 	(digit_rt): Likewise.
+ 	(num_disp_dive_rt): Likewise.
+ 	(pd_dive_rt): Likewise.
+ 	(__gg__packed_to_binary): Likewise.
+ 	* stringbin.h (STRINGBIN_H_): Declaration for __gg__dp2bin.
+ 	(__gg__numeric_display_to_binary): Use new algorithms.
+ 	(__gg__packed_to_binary): Likewise.
+ 
+ 2026-06-16  Robert Dubner  <rdubner@symas.com>
+ 
+ 	* gmath.cc (multiply_int256_by_int64): Comment.
+ 	(int256_as_decimal): Handle negative values.
+ 	(__gg__dividef45): Repair remainder logic when numeric-display
+ 	parameters are negative.
+ 
+ 2026-06-16  James K. Lowden  <jklowden@cobolworx.com>
+ 
+ 	* posix/shim/open.cc (defined): Honor _GNU_SOURCE and _POSIX_C_SOURCE.
+ 
+ 2026-06-14  Robert Dubner  <rdubner@symas.com>
+ 
+ 	* libgcobol.cc (int128_to_field): Set packed-decimal sign nybble to
+ 	"positive" when value is zero.
+ 
  2026-06-11  Robert Dubner  <rdubner@symas.com>
  
  	* intrinsic.cc (__gg__char_national): New function.
diff -Nrcpad gcc-17-20260614/libgcobol/charmaps.cc gcc-17-20260621/libgcobol/charmaps.cc
*** gcc-17-20260614/libgcobol/charmaps.cc	Sun Jun 14 22:32:16 2026
--- gcc-17-20260621/libgcobol/charmaps.cc	Sun Jun 21 22:32:14 2026
*************** static encodings_t encodings[] = {
*** 1417,1445 ****
    { false, iconv_YU_e, "YU" },
  };
  
- /*
-  * Because this variable is static, the constructor runs before main and is
-  * guaranteed to run.
-  */
- static class rt_encoding_t
-   {
-   const char *ctype, *lc_ctype;
-   public:
-   rt_encoding_t() : ctype( setlocale(LC_CTYPE, "") )
-     {
-     lc_ctype =  nl_langinfo(CODESET);
-     // Let's learn what the computer is using for the console:
-     // We need to establish the codeset used by the system console:
-   __gg__console_encoding = use_locale();
-     }
-   cbl_encoding_t use_locale() const
-     {
-     auto encoding = strstr(ctype, "UTF-8") ?
-       iconv_UTF_8_e : __gg__encoding_iconv_type(lc_ctype);
-     return encoding;
-     }
-   } rt_encoding;
- 
  static const encodings_t *
  encoding_descr( cbl_encoding_t encoding ) {
    static encodings_t *eoencodings = encodings + COUNT_OF(encodings);
--- 1417,1422 ----
diff -Nrcpad gcc-17-20260614/libgcobol/gmath.cc gcc-17-20260621/libgcobol/gmath.cc
*** gcc-17-20260614/libgcobol/gmath.cc	Sun Jun 14 22:32:16 2026
--- gcc-17-20260621/libgcobol/gmath.cc	Sun Jun 21 22:32:14 2026
*************** typedef struct int128
*** 363,373 ****
      };
    }int128;
  
  static int
  multiply_int256_by_int64(int256 &product, const uint64_t multiplier)
    {
    // Typical use of this routine is multiplying a temporary value by
!   // a factor of ten.  This is effectively left-shifting by decimal
    // digits.  See scale_int256_by_digits
    uint64_t overflows[5] = {};
    int128 temp;
--- 363,374 ----
      };
    }int128;
  
+ 
  static int
  multiply_int256_by_int64(int256 &product, const uint64_t multiplier)
    {
    // Typical use of this routine is multiplying a temporary value by
!   // a power of ten.  This is effectively left-shifting by decimal
    // digits.  See scale_int256_by_digits
    uint64_t overflows[5] = {};
    int128 temp;
*************** int256_as_decimal(int256 val)
*** 1531,1536 ****
--- 1532,1552 ----
    memset(ach, 0, sizeof(ach));
    strcpy(ach, "0");
    int index = 0;
+   bool is_negative = false;
+ 
+   if( val.data[31] & 0x80 )
+     {
+     // One's complement:
+     val.i128[0] = ~val.i128[0];
+     val.i128[1] = ~val.i128[1];
+     // Two's complement:
+     if( ++val.i128[0] == 0 )
+       {
+       ++val.i128[1];
+       }
+     is_negative = true;
+     }
+ 
    while(val.i128[0] || val.i128[1])
      {
      int256 before;
*************** int256_as_decimal(int256 val)
*** 1543,1548 ****
--- 1559,1568 ----
      ach[index++] = digit + '0';
      divide_int256_by_int64(val, 10);
      }
+   if( is_negative )
+     {
+     ach[index++] = '-';
+     }
    if( !index )
      {
      index = 1;
*************** __gg__dividef45(cbl_arith_format_t ,
*** 2081,2086 ****
--- 2101,2107 ----
                              compute_error);
  
      *compute_error |= squeeze_int256(quotient, quotient_rdigits);
+ 
      if( !*compute_error )
        {
        // We are going to need the unrounded quotient to calculate the remainder
*************** __gg__dividef45(cbl_arith_format_t ,
*** 2154,2159 ****
--- 2175,2185 ----
          temp_rdigits = unrounded_quotient_digits + divisor_rdigits;
  
          int256 odividend = {};
+         if( dividend < 0 )
+           {
+           memset(&odividend, 0xFF, sizeof(odividend));
+           }
+ 
          memcpy(&odividend, &dividend, sizeof(dividend));
  
          // We need to line up the rdigits so that we can subtract temp from
diff -Nrcpad gcc-17-20260614/libgcobol/libgcobol.cc gcc-17-20260621/libgcobol/libgcobol.cc
*** gcc-17-20260614/libgcobol/libgcobol.cc	Sun Jun 14 22:32:16 2026
--- gcc-17-20260621/libgcobol/libgcobol.cc	Sun Jun 21 22:32:14 2026
*************** __gg__get_default_currency_string()
*** 546,554 ****
--- 546,566 ----
    }
  
  static void
+ console_init() {
+   const char *ctype = setlocale(LC_CTYPE, "");
+   const char *lc_ctype =  nl_langinfo(CODESET);
+ 
+   // Establish the codeset used by the system console:
+   auto encoding = strstr(ctype, "UTF-8") ?
+     iconv_UTF_8_e : __gg__encoding_iconv_type(lc_ctype);
+   __gg__console_encoding = encoding;
+ }
+ 
+ static void
  initialize_program_state()
    {
    // This routine gets called exactly once for a COBOL executable
+   console_init();
    program_state initial_value = {};
    program_states.push_back(initial_value);
    __gg__currency_signs = program_states.back().rt_currency_signs;
*************** get_binary_value_local(  int
*** 883,889 ****
          retval = __gg__numeric_display_to_binary(sign_byte_location,
                                                   digits,
                                                   ndigits,
!                                                  resolved_var->encoding);
          }
        break;
        }
--- 895,901 ----
          retval = __gg__numeric_display_to_binary(sign_byte_location,
                                                   digits,
                                                   ndigits,
!                                                  stride);
          }
        break;
        }
*************** __gg__move( cblc_field_t        *fdest,
*** 6405,6418 ****
                                                              fsource,
                                                              source_offset,
                                                              source_size);
!             __gg__int128_to_qualified_field(
!                                        fdest,
!                                        dest_offset,
!                                        dest_size,
!                                        value,
!                                        rdigits,
!                                        rounded,
!                                        &size_error );
              break;
              }
  
--- 6417,6429 ----
                                                              fsource,
                                                              source_offset,
                                                              source_size);
!            __gg__int128_to_qualified_field( fdest,
!                                             dest_offset,
!                                             dest_size,
!                                             value,
!                                             rdigits,
!                                             rounded,
!                                             &size_error );
              break;
              }
  
diff -Nrcpad gcc-17-20260614/libgcobol/posix/shim/open.cc gcc-17-20260621/libgcobol/posix/shim/open.cc
*** gcc-17-20260614/libgcobol/posix/shim/open.cc	Sun Jun 14 22:32:16 2026
--- gcc-17-20260621/libgcobol/posix/shim/open.cc	Sun Jun 21 22:32:14 2026
*************** posix_open(const char *pathname, int cbl
*** 35,53 ****
      { cbl::PSX_O_APPEND, O_APPEND },
      { cbl::PSX_O_NONBLOCK, O_NONBLOCK },
      { cbl::PSX_O_DSYNC, O_DSYNC },
!     { cbl::PSX_O_DIRECT, O_DIRECT },
!     { cbl::PSX_O_DIRECTORY, O_DIRECTORY },
!     { cbl::PSX_O_NOFOLLOW, O_NOFOLLOW },
!     { cbl::PSX_O_CLOEXEC, O_CLOEXEC },
!     { cbl::PSX_O_SYNC, O_SYNC },
!     { cbl::PSX_O_PATH, O_PATH },
! #if 0
!     // Linux, not POSIX
!     { cbl::PSX_O_LARGEFILE, O_LARGEFILE },
!     { cbl::PSX_O_NOATIME, O_NOATIME },
!     { cbl::PSX_O_TMPFILE, O_TMPFILE },
  #endif
!   };
  
    static const std::map<int, int> mode_bits {
      { cbl::PSX_S_IXOTH, S_IXOTH },
--- 35,71 ----
      { cbl::PSX_O_APPEND, O_APPEND },
      { cbl::PSX_O_NONBLOCK, O_NONBLOCK },
      { cbl::PSX_O_DSYNC, O_DSYNC },
!     { cbl::PSX_O_LARGEFILE, O_LARGEFILE }, 
!     { cbl::PSX_O_SYNC, O_SYNC }, 
!     /*
!      * The O_CLOEXEC, O_DIRECTORY, and O_NOFOLLOW flags are not specified in
!      * POSIX.1-2001, but are specified in POSIX.1-2008.  See open(2). 
!      */
! #if defined(_POSIX_C_SOURCE) && 200809L <= (_POSIX_C_SOURCE - 0)
!     { cbl::PSX_O_CLOEXEC, O_CLOEXEC }, 
!     { cbl::PSX_O_DIRECTORY, O_DIRECTORY }, 
!     { cbl::PSX_O_NOFOLLOW, O_NOFOLLOW }, 
! #else
!     { cbl::PSX_O_CLOEXEC, 0 }, 
!     { cbl::PSX_O_DIRECTORY, 0 }, 
!     { cbl::PSX_O_NOFOLLOW, 0 },     
  #endif
!     /*
!      * The O_DIRECT, O_NOATIME, O_PATH, and O_TMPFILE flags are Linux-
!      * specific.  One must define _GNU_SOURCE to obtain their definitions.
!      */
! #if defined(_GNU_SOURCE)
!     { cbl::PSX_O_DIRECT, O_DIRECT }, 
!     { cbl::PSX_O_NOATIME, O_NOATIME }, 
!     { cbl::PSX_O_PATH, O_PATH }, 
!     { cbl::PSX_O_TMPFILE, O_TMPFILE }, 
! #else
!     { cbl::PSX_O_DIRECT, 0 }, 
!     { cbl::PSX_O_NOATIME, 0 }, 
!     { cbl::PSX_O_PATH, 0 }, 
!     { cbl::PSX_O_TMPFILE, 0 }, 
! #endif    
!   };    
  
    static const std::map<int, int> mode_bits {
      { cbl::PSX_S_IXOTH, S_IXOTH },
diff -Nrcpad gcc-17-20260614/libgcobol/stringbin.cc gcc-17-20260621/libgcobol/stringbin.cc
*** gcc-17-20260614/libgcobol/stringbin.cc	Sun Jun 14 22:32:16 2026
--- gcc-17-20260621/libgcobol/stringbin.cc	Sun Jun 21 22:32:14 2026
*************** __gg__binary_to_packed( unsigned char *r
*** 504,854 ****
    memcpy(result, combined_string, length);
    }
  
- extern "C"
- __int128
- __gg__numeric_display_to_binary(unsigned char *signp,
-                           const unsigned char *pdigits,
-                                 int            ndigits,
-                                 cbl_encoding_t encoding)
-   {
-   /*  This is specific to numeric display values.
- 
-       Such values can be unsigned, or they can have leading or trailing
-       internal sign information, or they can have leading or trailing external
-       sign information.
- 
-       In ASCII, digits are 030; internal sign is has the zone 0x70.
  
!       In EBDIC, normal digits are 0xF0.  The sign byte in for a positive
!       signable number has the zone 0xC0; a negative value has the zone 0xD0.
! 
!       A further complication is that it is legal for NumericDisplay values to
!       have non-digit characters.  This is because of REDEFINES, and whatnot.
!       Some COBOL implementations just look at the bottom four bits of
!       characters regardless of their legality.  I am choosing to have non-legal
!       characters come back as zero.  I do this with tables, so the cost is low.
!       */
! 
!   /*  We are assuming that 64-bit arithmetic is faster than 128-bit arithmetic,
!       and so we build up a 128-bit result in three 64-bit pieces, and assemble
!       them at the end.  */
!   size_t digit_index = 0;
!   cbl_char_t ch;
! 
!   charmap_t *charmap = __gg__get_charmap(encoding);
!   cbl_char_t minus = charmap->mapped_character(ascii_minus);
! 
!   bool is_ebcdic = charmap->is_like_ebcdic();
! 
!   static const uint8_t lookup[] =
!     {
!      0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0,0,0,0,0,0,
!     10,11,12,13,14,15,16,17,18,19, 0,0,0,0,0,0,
!     20,21,22,23,24,25,26,27,28,29, 0,0,0,0,0,0,
!     30,31,32,33,34,35,36,37,38,39, 0,0,0,0,0,0,
!     40,41,42,43,44,45,46,47,48,49, 0,0,0,0,0,0,
!     50,51,52,53,54,55,56,57,58,59, 0,0,0,0,0,0,
!     60,61,62,63,64,65,66,67,68,69, 0,0,0,0,0,0,
!     70,71,72,73,74,75,76,77,78,79, 0,0,0,0,0,0,
!     80,81,82,83,84,85,86,87,88,89, 0,0,0,0,0,0,
!     90,91,92,93,94,95,96,97,98,99, 0,0,0,0,0,0,
!     };
! 
!   static const uint8_t from_ebcdic[256] =
!     {
!     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 0x00
!     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 0x10
!     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 0x20
!     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 0x30
!     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 0x40
!     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 0x50
!     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 0x60
!     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 0x70
!     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 0x80
!     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 0x90
!     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 0xa0
!     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 0xb0
!     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 0xc0
!     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 0xd0
!     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 0xe0
!     0,1,2,3,4,5,6,7,8,9,0,0,0,0,0,0, // 0xf0
!     };
! 
!   static const uint8_t from_ascii[256] =
!     {
!     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 0x00
!     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 0x10
!     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 0x20
!     0,1,2,3,4,5,6,7,8,9,0,0,0,0,0,0, // 0x30
!     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 0x40
!     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 0x50
!     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 0x60
!     0,1,2,3,4,5,6,7,8,9,0,0,0,0,0,0, // 0x70
!     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 0x80
!     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 0x90
!     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 0xa0
!     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 0xb0
!     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 0xc0
!     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 0xd0
!     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 0xe0
!     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 0xf0
!     };
  
    __int128 retval;
! 
!   uint64_t top = 0;
!   uint64_t middle = 0;
!   uint64_t bottom = 0;
! 
!   int count_bottom;
!   int count_middle;
!   int count_top;
! 
!   bool is_negative = false;
! 
!   // Pick up the original sign byte:
!   cbl_char_t sign_byte = charmap->getch(signp, (size_t)0);
! 
!   const unsigned char *mapper;
!   if( is_ebcdic )
      {
!     mapper = from_ebcdic;
!     if( sign_byte == minus )
!       {
!       is_negative = true;
!       }
!     else if( (sign_byte & 0xF0) == 0xD0 )
        {
!       is_negative = true;
        }
-     // No matter what the digit, force it to be a valid positive digit by
-     // forcing the zone to 0xF0.  Note that this is harmless if redundant, and
-     // harmless as well if the data SIGN IS SEPARATE.  Whatever we do to this
-     // byte will be undone at the end of the routine.
-     charmap->putch(sign_byte|0xF0, signp, (size_t)0);
      }
!   else
!     {
!     mapper = from_ascii;
!     if( sign_byte == minus )
!       {
!       is_negative = true;
!       }
!     else if( (sign_byte & 0xF0) == 0x70 )
!       {
!       is_negative = true;
  
!       // Make it a valid positive digit by turning the zone to 0x30
!       charmap->putch(sign_byte&0x3F, signp, (size_t)0);
!       }
!     }
  
!   // Digits 1 through 18 come from the bottom:
!   if( ndigits <= 18 )
!     {
!     count_bottom = ndigits;
!     count_middle = 0;
!     count_top = 0;
!     }
!   else if( ndigits<= 36 )
      {
!     count_bottom = 18;
!     count_middle = ndigits - 18;
!     count_top = 0;
      }
    else
      {
!     count_bottom = 18;
!     count_middle = 18;
!     count_top = ndigits - 36;
!     }
! 
!   if( ndigits & 1 )
!     {
!     // We are dealing with an odd number of digits
!     if( count_top )
!       {
!       ch = charmap->getch(pdigits, &digit_index);
!       top = mapper[ch];
!       count_top -= 1;
!       }
!     else if( count_middle )
!       {
!       ch = charmap->getch(pdigits, &digit_index);
!       middle = mapper[ch];
!       count_middle -= 1;
!       }
!     else
        {
!       ch = charmap->getch(pdigits, &digit_index);
!       bottom = mapper[ch];
!       count_bottom -= 1;
        }
      }
  
!   uint8_t add_me;
! 
!   while( count_top )
!     {
!     ch = charmap->getch(pdigits, &digit_index);
!     add_me  = mapper[ch] << 4;
!     ch = charmap->getch(pdigits, &digit_index);
!     add_me += mapper[ch];
!     top *= 100 ;
!     top += lookup[add_me];
!     count_top -= 2;
!     }
! 
!   while( count_middle )
!     {
!     ch = charmap->getch(pdigits, &digit_index);
!     add_me  = mapper[ch] << 4;
!     ch = charmap->getch(pdigits, &digit_index);
!     add_me += mapper[ch];
!     middle *= 100 ;
!     middle += lookup[add_me];
!     count_middle -= 2;
!     }
! 
!   while( count_bottom )
!     {
!     ch = charmap->getch(pdigits, &digit_index);
!     add_me  = mapper[ch] << 4;
!     ch = charmap->getch(pdigits, &digit_index);
!     add_me += mapper[ch];
!     bottom *= 100 ;
!     bottom += lookup[add_me];
!     count_bottom -= 2;
!     }
! 
!   retval = top;
!   retval *= 1000000000000000000ULL; // 10E18
  
!   retval += middle;
!   retval *= 1000000000000000000ULL;
  
!   retval += bottom;
  
!   if( is_negative )
      {
!     retval = -retval;
      }
  
-   // Replace the original sign byte:
-   charmap->putch(sign_byte, signp, (size_t)0);
    return retval;
    }
  
  extern "C"
  __int128
  __gg__packed_to_binary(const unsigned char *psz,
!                              int            nplaces )
    {
!   // See the comments in __gg__numeric_display_to_binary() above.
! 
!   __int128 retval = 0;
! 
!   static const unsigned char dp2bin[160] =
!     {
!     // This may not be the weirdest table I've ever created, but it is
!     // certainly a contender.  Given the packed decimal byte 0x23, it
!     // returns the equivalent decimal value of 23.  Note that the final
!     // entries in each line are intended to handle the final place of
!     // signed values.  0x2D, for example, gets picked up as 20.
!     00, 01, 02, 03, 04, 05, 06, 07,  8,  9,  0,  0,  0,  0,  0,  0, // 0x00
!     10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 10, 10, 10, 10, 10, 10, // 0x10
!     20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 20, 20, 20, 20, 20, 20, // 0x20
!     30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 30, 30, 30, 30, 30, 30, // 0x30
!     40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 40, 40, 40, 40, 40, 40, // 0x40
!     50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 50, 50, 50, 50, 50, 50, // 0x50
!     60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 60, 60, 60, 60, 60, 60, // 0x60
!     70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 70, 70, 70, 70, 70, 70, // 0x70
!     80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 80, 80, 80, 80, 80, 80, // 0x80
!     90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 90, 90, 90, 90, 90, 90, // 0x90
!     };
! 
!   uint64_t top = 0;
!   uint64_t middle = 0;
!   uint64_t bottom = 0;
! 
!   int count_bottom;
!   int count_middle;
!   int count_top;
! 
!   // Turn places into n digits
!   int n = nplaces * 2;
  
!   // Digits 1 through 18 come from the bottom:
!   if( n <= 18 )
!     {
!     count_bottom = n;
!     count_middle = 0;
!     count_top = 0;
!     }
!   else if( n<= 36 )
      {
!     count_bottom = 18;
!     count_middle = n - 18;
!     count_top = 0;
      }
    else
      {
!     count_bottom = 18;
!     count_middle = 18;
!     count_top = n - 36;
!     }
! 
!   while( count_top )
!     {
!     top *= 100 ;
!     top += dp2bin[*psz++];
!     count_top -= 2;
!     }
! 
!   while( count_middle )
!     {
!     middle *= 100 ;
!     middle += dp2bin[*psz++];
!     count_middle -= 2;
!     }
! 
!   while( count_bottom )
!     {
!     bottom *= 100 ;
!     bottom += dp2bin[*psz++];
!     count_bottom -= 2;
      }
! 
!   retval = top;
!   retval *= 1000000000000000000ULL; // 10E18
! 
!   retval += middle;
!   retval *= 1000000000000000000ULL;
! 
!   retval += bottom;
! 
!   // retval is now the binary value of the packed decimal number.
! 
!   // back up one byte to fetch the sign nybble.
!   uint8_t sign_nybble = *(psz-1) & 0x0F;
!   enum{ PACKED_NYBBLE_MINUS= 0x0D};
! 
!   if( sign_nybble > 9 )
      {
!     // There is a sign nybble.  We have to divide the result by ten to offset
!     // left shift due place taken up by the sign nybble.
!     retval /= 10;
! 
!     if( sign_nybble == PACKED_NYBBLE_MINUS )
!       {
!       retval = -retval ;
!       }
      }
- 
    return retval;
    }
- 
- 
- 
- 
- 
--- 504,673 ----
    memcpy(result, combined_string, length);
    }
  
  
! #define digit_rt(loc, offset) (((loc)[(offset) * stride]) & 0x0F)
  
+ static __int128
+ num_disp_dive_rt(const unsigned char *pdigits,
+                     int            ndigits,
+                     int            stride)
+   {
    __int128 retval;
!   switch(ndigits)
      {
!     case 1:
!       retval =  digit_rt(pdigits, 0);
!       break;
!     case 2:
!       retval =  digit_rt(pdigits, 0)*10
!               + digit_rt(pdigits, 1);
!       break;
!     case 3:
!       retval =  digit_rt(pdigits, 0)*100
!               + digit_rt(pdigits, 1)*10
!               + digit_rt(pdigits, 2);
!       break;
!     case 4:
!       retval =  digit_rt(pdigits, 0)*1000
!               + digit_rt(pdigits, 1)*100
!               + digit_rt(pdigits, 2)*10
!               + digit_rt(pdigits, 3);
!       break;
!     default:
        {
!       int nright = ndigits/2;
!       int nleft  = ndigits - nright;
!       __int128 pot = __gg__power_of_ten(nright);
!       retval =   num_disp_dive_rt(pdigits,               nleft, stride) * pot
!                + num_disp_dive_rt(pdigits+nleft*stride, nright, stride);
!       break;
        }
      }
!   return retval;
!   }
  
! extern "C"
! __int128
! __gg__numeric_display_to_binary(const unsigned char *signp,
!                                 const unsigned char *pdigits,
!                                       int            ndigits,
!                                       int            stride)
!   {
!   __int128 retval;
  
!   retval = num_disp_dive_rt(pdigits, ndigits, stride);
! 
!   // For speed, we assume this value is well-formed:
!   if( *signp == ascii_minus )
      {
!     retval = -retval;
      }
    else
      {
!     unsigned int sbyte = *signp & 0xF0;
!     switch(sbyte)
        {
!       case 0x60: // EBCDIC '-' is 0x60, and no other 0x6z characters matter.
!       case 0x70: // ASCII internal negative
!       case 0xD0: // EBDIC internal negative
!         retval = -retval;
!       break;
        }
      }
  
!   return retval;
!   }
  
! const unsigned char __gg__dp2bin[256] =
!   {
!   // This table is used both by the compile-time and the run-time.  Given the
!   // packed decimal byte 0x23, it provides s the equivalent decimal value of
!   // 23.  This table is not used on the final byte of COMP-3 values; that
!   // digit has to be extracted specifically.
  
! // 0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F
! //--------------------------------------------------------------
!   00, 01, 02, 03, 04, 05, 06, 07,  8,  9,  0,  0,  0,  0,  0,  0, // 0x00
!   10, 11, 12, 13, 14, 15, 16, 17, 18, 19,  0,  0,  0,  0,  0,  0, // 0x10
!   20, 21, 22, 23, 24, 25, 26, 27, 28, 29,  0,  0,  0,  0,  0,  0, // 0x20
!   30, 31, 32, 33, 34, 35, 36, 37, 38, 39,  0,  0,  0,  0,  0,  0, // 0x30
!   40, 41, 42, 43, 44, 45, 46, 47, 48, 49,  0,  0,  0,  0,  0,  0, // 0x40
!   50, 51, 52, 53, 54, 55, 56, 57, 58, 59,  0,  0,  0,  0,  0,  0, // 0x50
!   60, 61, 62, 63, 64, 65, 66, 67, 68, 69,  0,  0,  0,  0,  0,  0, // 0x60
!   70, 71, 72, 73, 74, 75, 76, 77, 78, 79,  0,  0,  0,  0,  0,  0, // 0x70
!   80, 81, 82, 83, 84, 85, 86, 87, 88, 89,  0,  0,  0,  0,  0,  0, // 0x80
!   90, 91, 92, 93, 94, 95, 96, 97, 98, 99,  0,  0,  0,  0,  0,  0, // 0x90
!    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, // 0xA0
!    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, // 0xB0
!    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, // 0xC0
!    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, // 0xD0
!    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, // 0xE0
!    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, // 0xF0
!   };
  
! static
! __int128
! pd_dive_rt(const unsigned char *psz, int nplaces)
!   {
!   __int128 retval;
!   switch(nplaces)
      {
!     case 0:
!       retval =   0;
!       break;
!     case 1:
!       retval =   __gg__dp2bin[psz[0]];
!       break;
!     case 2:
!       retval =   __gg__dp2bin[psz[0]] * 100
!                + __gg__dp2bin[psz[1]];
!       break;
!     case 3:
!       retval =   __gg__dp2bin[psz[0]] * 10000
!                + __gg__dp2bin[psz[1]] * 100
!                + __gg__dp2bin[psz[2]];
!       break;
!     case 4:
!       retval =   __gg__dp2bin[psz[0]] * 1000000
!                + __gg__dp2bin[psz[1]] * 10000
!                + __gg__dp2bin[psz[2]] * 100
!                + __gg__dp2bin[psz[3]];
!       break;
!     default:
!       {
!       int nright = nplaces/2;
!       int nleft  = nplaces - nright;
!       __int128 pot = __gg__power_of_ten(nright*2);
!       retval =   pd_dive_rt(psz,       nleft) * pot
!                + pd_dive_rt(psz+nleft, nright);
!       break;
!       }
      }
  
    return retval;
    }
  
  extern "C"
  __int128
  __gg__packed_to_binary(const unsigned char *psz,
!                              int            nplaces) // Number of bytes
    {
!   __int128 retval;
!   // Check to see if the final nybble is a sign bit:
!   bool signable = (psz[nplaces-1] & 0x0F) >= 0x0C;
  
!   if( signable )
      {
!     retval = pd_dive_rt(psz, nplaces-1) * 10 + (psz[nplaces-1] >> 4);
      }
    else
      {
!     retval = pd_dive_rt(psz, nplaces);
      }
!   if(     signable
!       && (psz[nplaces-1] & 0x0F) == 0x0D )
      {
!     retval = -retval;
      }
    return retval;
    }
diff -Nrcpad gcc-17-20260614/libgcobol/stringbin.h gcc-17-20260621/libgcobol/stringbin.h
*** gcc-17-20260614/libgcobol/stringbin.h	Sun Jun 14 22:32:16 2026
--- gcc-17-20260621/libgcobol/stringbin.h	Sun Jun 21 22:32:14 2026
***************
*** 30,35 ****
--- 30,37 ----
  #ifndef STRINGBIN_H_
  #define STRINGBIN_H_
  
+ extern const unsigned char __gg__dp2bin[256];
+ 
  extern "C"
  bool __gg__binary_to_string_ascii(char *result,
                                    int digits,
*************** void __gg__binary_to_packed( unsigned ch
*** 46,59 ****
                               __int128 value);
  
  extern "C"
! __int128 __gg__numeric_display_to_binary( unsigned char *sign_byte,
!                                     const unsigned char *digits,
!                                           int ndigits,
!                                           cbl_encoding_t encoding);
  
  extern "C"
  __int128
  __gg__packed_to_binary(const unsigned char *psz,
!                              int            nplaces );
  
  #endif
--- 48,61 ----
                               __int128 value);
  
  extern "C"
! __int128 __gg__numeric_display_to_binary(const unsigned char *sign_byte,
!                                          const unsigned char *digits,
!                                                int ndigits,
!                                                int    stride);
  
  extern "C"
  __int128
  __gg__packed_to_binary(const unsigned char *psz,
!                              int            nplaces);
  
  #endif
diff -Nrcpad gcc-17-20260614/libgfortran/io/list_read.c gcc-17-20260621/libgfortran/io/list_read.c
*** gcc-17-20260614/libgfortran/io/list_read.c	Sun Jun 14 22:32:16 2026
--- gcc-17-20260621/libgfortran/io/list_read.c	Sun Jun 21 22:32:14 2026
*************** calls:
*** 2652,2658 ****
        static void nml_touch_nodes (namelist_info *nl)
        static int nml_read_obj (namelist_info *nl, index_type offset,
  			       namelist_info **prev_nl, char *, size_t,
! 			       index_type clow, index_type chigh)
  calls:
        -itself-  */
  
--- 2652,2659 ----
        static void nml_touch_nodes (namelist_info *nl)
        static int nml_read_obj (namelist_info *nl, index_type offset,
  			       namelist_info **prev_nl, char *, size_t,
! 			       index_type clow, index_type chigh,
! 			       bool is_component)
  calls:
        -itself-  */
  
*************** query_return:
*** 3123,3129 ****
  static bool
  nml_read_obj (st_parameter_dt *dtp, namelist_info *nl, index_type offset,
  	      namelist_info **pprev_nl, char *nml_err_msg,
! 	      size_t nml_err_msg_size, index_type clow, index_type chigh)
  {
    namelist_info *cmp;
    char *obj_name;
--- 3124,3131 ----
  static bool
  nml_read_obj (st_parameter_dt *dtp, namelist_info *nl, index_type offset,
  	      namelist_info **pprev_nl, char *nml_err_msg,
! 	      size_t nml_err_msg_size, index_type clow, index_type chigh,
! 	      bool is_component)
  {
    namelist_info *cmp;
    char *obj_name;
*************** nml_read_obj (st_parameter_dt *dtp, name
*** 3142,3148 ****
      return true;
  
    dtp->u.p.item_count++;  /* Used in error messages.  */
!   dtp->u.p.repeat_count = 0;
    eat_spaces (dtp);
  
    len = nl->len;
--- 3144,3151 ----
      return true;
  
    dtp->u.p.item_count++;  /* Used in error messages.  */
!   if (!is_component)
!     dtp->u.p.repeat_count = 0;
    eat_spaces (dtp);
  
    len = nl->len;
*************** nml_read_obj (st_parameter_dt *dtp, name
*** 3196,3204 ****
  	      * GFC_DESCRIPTOR_STRIDE(nl,dim) * nl->size);
  	}
  
        /* If we are finished with the repeat count, try to read next value.  */
  
-       nml_carry = 0;
        if (--dtp->u.p.repeat_count <= 0)
  	{
  	  if (dtp->u.p.input_complete)
--- 3199,3258 ----
  	      * GFC_DESCRIPTOR_STRIDE(nl,dim) * nl->size);
  	}
  
+       nml_carry = 0;
+ 
+       /* A default (non-DTIO) derived type does not itself hold a value to
+ 	 read; only its components do.  Recurse into the components on
+ 	 every iteration of the array loop, independently of the repeat
+ 	 count, so that a repeat count parsed while reading one component
+ 	 (e.g. "ta(1:8)%c = 8*'bogus'") gets applied to that component for
+ 	 each addressed array element.  */
+ 
+       if ((nl->type == BT_DERIVED || nl->type == BT_CLASS)
+ 	  && nl->dtio_sub == NULL)
+ 	{
+ 	  obj_name_len = strlen (nl->var_name) + 1;
+ 	  obj_name = xmalloc (obj_name_len+1);
+ 	  memcpy (obj_name, nl->var_name, obj_name_len-1);
+ 	  memcpy (obj_name + obj_name_len - 1, "%", 2);
+ 
+ 	  /* If reading a derived type, disable the expanded read warning
+ 	     since a single object can have multiple reads.  */
+ 	  dtp->u.p.expanded_read = 0;
+ 
+ 	  /* Now loop over the components.  */
+ 
+ 	  for (cmp = nl->next;
+ 	       cmp &&
+ 		 !strncmp (cmp->var_name, obj_name, obj_name_len);
+ 	       cmp = cmp->next)
+ 	    {
+ 	      /* Jump over nested derived type by testing if the potential
+ 		 component name contains '%'.  */
+ 	      if (strchr (cmp->var_name + obj_name_len, '%'))
+ 		  continue;
+ 
+ 	      if (!nml_read_obj (dtp, cmp, (index_type)(pdata - nl->mem_pos),
+ 				pprev_nl, nml_err_msg, nml_err_msg_size,
+ 				clow, chigh, true))
+ 		{
+ 		  free (obj_name);
+ 		  return false;
+ 		}
+ 
+ 	      if (dtp->u.p.input_complete)
+ 		{
+ 		  free (obj_name);
+ 		  return true;
+ 		}
+ 	    }
+ 
+ 	  free (obj_name);
+ 	  goto incr_idx;
+ 	}
+ 
        /* If we are finished with the repeat count, try to read next value.  */
  
        if (--dtp->u.p.repeat_count <= 0)
  	{
  	  if (dtp->u.p.input_complete)
*************** nml_read_obj (st_parameter_dt *dtp, name
*** 3241,3248 ****
  
  	  case BT_DERIVED:
  	  case BT_CLASS:
! 	    /* If this object has a User Defined procedure, call it.  */
! 	    if (nl->dtio_sub != NULL)
  	      {
  		GFC_INTEGER_4 unit = dtp->u.p.current_unit->unit_number;
  		char iotype[] = "NAMELIST";
--- 3295,3302 ----
  
  	  case BT_DERIVED:
  	  case BT_CLASS:
! 	    /* This object has a User Defined I/O procedure; objects
! 	       without one were already handled above.  */
  	      {
  		GFC_INTEGER_4 unit = dtp->u.p.current_unit->unit_number;
  		char iotype[] = "NAMELIST";
*************** nml_read_obj (st_parameter_dt *dtp, name
*** 3302,3347 ****
  		goto incr_idx;
  	      }
  
- 	    /* Must be default derived type namelist read.  */
- 	    obj_name_len = strlen (nl->var_name) + 1;
- 	    obj_name = xmalloc (obj_name_len+1);
- 	    memcpy (obj_name, nl->var_name, obj_name_len-1);
- 	    memcpy (obj_name + obj_name_len - 1, "%", 2);
- 
- 	    /* If reading a derived type, disable the expanded read warning
- 	       since a single object can have multiple reads.  */
- 	    dtp->u.p.expanded_read = 0;
- 
- 	    /* Now loop over the components.  */
- 
- 	    for (cmp = nl->next;
- 		 cmp &&
- 		   !strncmp (cmp->var_name, obj_name, obj_name_len);
- 		 cmp = cmp->next)
- 	      {
- 		/* Jump over nested derived type by testing if the potential
- 		   component name contains '%'.  */
- 		if (strchr (cmp->var_name + obj_name_len, '%'))
- 		    continue;
- 
- 		if (!nml_read_obj (dtp, cmp, (index_type)(pdata - nl->mem_pos),
- 				  pprev_nl, nml_err_msg, nml_err_msg_size,
- 				  clow, chigh))
- 		  {
- 		    free (obj_name);
- 		    return false;
- 		  }
- 
- 		if (dtp->u.p.input_complete)
- 		  {
- 		    free (obj_name);
- 		    return true;
- 		  }
- 	      }
- 
- 	    free (obj_name);
- 	    goto incr_idx;
- 
            default:
  	    snprintf (nml_err_msg, nml_err_msg_size,
  		      "Bad type for namelist object %s", nl->var_name);
--- 3356,3361 ----
*************** incr_idx:
*** 3456,3462 ****
          }
      } while (!nml_carry);
  
!   if (dtp->u.p.repeat_count > 1)
      {
        snprintf (nml_err_msg, nml_err_msg_size,
  		"Repeat count too large for namelist object %s", nl->var_name);
--- 3470,3476 ----
          }
      } while (!nml_carry);
  
!   if (!is_component && dtp->u.p.repeat_count > 1)
      {
        snprintf (nml_err_msg, nml_err_msg_size,
  		"Repeat count too large for namelist object %s", nl->var_name);
*************** get_name:
*** 3780,3786 ****
  
    dtp->u.p.nml_read_error = 0;
    if (!nml_read_obj (dtp, nl, 0, pprev_nl, nml_err_msg, nml_err_msg_size,
! 		    clow, chigh))
      goto nml_err_ret;
  
    return true;
--- 3794,3800 ----
  
    dtp->u.p.nml_read_error = 0;
    if (!nml_read_obj (dtp, nl, 0, pprev_nl, nml_err_msg, nml_err_msg_size,
! 		    clow, chigh, false))
      goto nml_err_ret;
  
    return true;
diff -Nrcpad gcc-17-20260614/libgomp/ChangeLog gcc-17-20260621/libgomp/ChangeLog
*** gcc-17-20260614/libgomp/ChangeLog	Sun Jun 14 22:32:16 2026
--- gcc-17-20260621/libgomp/ChangeLog	Sun Jun 21 22:32:15 2026
***************
*** 1,3 ****
--- 1,67 ----
+ 2026-06-19  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	PR libgomp/125877
+ 	* affinity.c (gomp_get_current_numa_node,
+ 	gomp_get_numa_distance): New functions.
+ 	* config/linux/affinity.c (gomp_get_current_numa_node,
+ 	gomp_get_numa_distance): Likewise.
+ 	* libgomp-plugin.h (GOMP_OFFLOAD_get_numa_node): Declare.
+ 	* libgomp.h (gomp_get_current_numa_node,
+ 	gomp_get_numa_distance): Declare.
+ 	(struct gomp_device_descr): Add get_numa_node_func.
+ 	* libgomp.map (OMP_6.1): Add.
+ 	* libgomp.texi (omp_get_device_distances): Add routine.
+ 	* omp.h.in (omp_get_device_distances): Declare.
+ 	* omp_lib.f90.in (omp_get_device_distances): Add interface.
+ 	* omp_lib.h.in (omp_get_device_distances): Likewise.
+ 	* plugin/cuda-lib.def (cuDeviceGetPCIBusId): Add.
+ 	* plugin/plugin-gcn.c (struct agent_info): Add numa_node.
+ 	(GOMP_OFFLOAD_get_numa_node): New.
+ 	* plugin/plugin-nvptx.c (struct ptx_device): Add numa_node.
+ 	(GOMP_OFFLOAD_get_numa_node): New.
+ 	* target.c (omp_get_device_distances): New function.
+ 	(gomp_load_plugin_for_device): Load get_numa_node symbol.
+ 	* testsuite/libgomp.c/omp-get-device-distances.c: New test.
+ 	* testsuite/libgomp.fortran/omp-get-device-distances.f90: New test.
+ 
+ 2026-06-18  Thomas Schwinge  <tschwinge@baylibre.com>
+ 
+ 	* config/accel/target-indirect.h (GOMP_INDIRECT_ADDR_MAP)
+ 	(GOMP_INDIRECT_ADDR_HMAP): Prototype.
+ 	* config/gcn/team.c: Adjust.
+ 	* config/nvptx/team.c: Likewise.
+ 
+ 2026-06-18  Thomas Schwinge  <tschwinge@baylibre.com>
+ 
+ 	* config/accel/target-indirect.h: New.
+ 	* config/accel/target-indirect.c: Adjust.
+ 	* config/gcn/team.c: Likewise.
+ 	* config/nvptx/team.c: Likewise.
+ 
+ 2026-06-18  Thomas Schwinge  <tschwinge@baylibre.com>
+ 
+ 	* target-indirect.c: '#include "libgomp.h"'.
+ 
+ 2026-06-18  Thomas Schwinge  <tschwinge@baylibre.com>
+ 
+ 	* libgomp_g.h (GOMP_target_map_indirect_ptr): Sort correctly.
+ 
+ 2026-06-18  Thomas Schwinge  <tschwinge@baylibre.com>
+ 
+ 	* libgomp_g.h (GOMP_atomic_start, GOMP_atomic_end): Sort correctly.
+ 
+ 2026-06-18  Thomas Schwinge  <tschwinge@baylibre.com>
+ 
+ 	* oacc-init.c (acc_init, acc_shutdown, acc_get_num_devices)
+ 	(acc_set_device_type, acc_get_device_type, acc_get_device_num)
+ 	(acc_set_device_num, acc_get_property, acc_get_property_string)
+ 	(acc_on_device): Drop 'ialias'es.
+ 
+ 2026-06-18  Thomas Schwinge  <tschwinge@baylibre.com>
+ 
+ 	* config/nvptx/oacc-parallel.c: Move...
+ 	* config/accel/oacc-parallel.c: ... here.
+ 
  2026-06-12  Thomas Schwinge  <tschwinge@baylibre.com>
  
  	* config/linux/allocator.c: De-duplicate '#define _GNU_SOURCE'.
diff -Nrcpad gcc-17-20260614/libgomp/affinity.c gcc-17-20260621/libgomp/affinity.c
*** gcc-17-20260614/libgomp/affinity.c	Sun Jun 14 22:32:16 2026
--- gcc-17-20260621/libgomp/affinity.c	Sun Jun 21 22:32:15 2026
*************** gomp_display_affinity_place (char *buffe
*** 152,156 ****
--- 152,170 ----
    gomp_display_string (buffer, size, ret, buf, strlen (buf));
  }
  
+ int
+ gomp_get_current_numa_node ()
+ {
+   return -1;
+ }
+ 
+ int
+ gomp_get_numa_distance (int node1, int node2)
+ {
+   (void) node1;
+   (void) node2;
+   return -1;
+ }
+ 
  ialias(omp_get_place_num_procs)
  ialias(omp_get_place_proc_ids)
diff -Nrcpad gcc-17-20260614/libgomp/config/accel/target-indirect.c gcc-17-20260621/libgomp/config/accel/target-indirect.c
*** gcc-17-20260614/libgomp/config/accel/target-indirect.c	Sun Jun 14 22:32:16 2026
--- gcc-17-20260621/libgomp/config/accel/target-indirect.c	Sun Jun 21 22:32:15 2026
***************
*** 26,31 ****
--- 26,32 ----
  
  #include <assert.h>
  #include "libgomp.h"
+ #include "target-indirect.h"
  
  void *GOMP_INDIRECT_ADDR_MAP = NULL;
  
diff -Nrcpad gcc-17-20260614/libgomp/config/accel/target-indirect.h gcc-17-20260621/libgomp/config/accel/target-indirect.h
*** gcc-17-20260614/libgomp/config/accel/target-indirect.h	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/libgomp/config/accel/target-indirect.h	Sun Jun 21 22:32:15 2026
***************
*** 0 ****
--- 1,36 ----
+ /* Copyright (C) 2023-2026 Free Software Foundation, Inc.
+ 
+    This file is part of the GNU Offloading and Multi Processing Library
+    (libgomp).
+ 
+    Libgomp 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.
+ 
+    Libgomp 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.
+ 
+    Under Section 7 of GPL version 3, you are granted additional
+    permissions described in the GCC Runtime Library Exception, version
+    3.1, as published by the Free Software Foundation.
+ 
+    You should have received a copy of the GNU General Public License and
+    a copy of the GCC Runtime Library Exception along with this program;
+    see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+    <http://www.gnu.org/licenses/>.  */
+ 
+ #ifndef GOMP_TARGET_INDIRECT_H
+ #define GOMP_TARGET_INDIRECT_H 1
+ 
+ #include "libgomp.h"
+ 
+ extern void *GOMP_INDIRECT_ADDR_MAP;
+ 
+ extern void *GOMP_INDIRECT_ADDR_HMAP;
+ 
+ extern void build_indirect_map (void);
+ 
+ #endif /* GOMP_TARGET_INDIRECT_H */
diff -Nrcpad gcc-17-20260614/libgomp/config/gcn/team.c gcc-17-20260621/libgomp/config/gcn/team.c
*** gcc-17-20260614/libgomp/config/gcn/team.c	Sun Jun 14 22:32:16 2026
--- gcc-17-20260621/libgomp/config/gcn/team.c	Sun Jun 21 22:32:15 2026
***************
*** 27,32 ****
--- 27,33 ----
  #include <assert.h>
  
  #include "libgomp.h"
+ #include "target-indirect.h"
  #include <stdlib.h>
  #include <string.h>
  
***************
*** 35,47 ****
  
  #define UNLIKELY(x) (__builtin_expect ((x), 0))
  
- extern void *GOMP_INDIRECT_ADDR_MAP;
- 
  /* Defined in basic-allocator.c via config/amdgcn/allocator.c.  */
  void __gcn_lowlat_init (void *heap, size_t size);
  
  static void gomp_thread_start (struct gomp_thread_pool *);
- extern void build_indirect_map (void);
  
  /* This externally visible function handles target region entry.  It
     sets up a per-team thread pool and transfers control by returning to
--- 36,45 ----
diff -Nrcpad gcc-17-20260614/libgomp/config/linux/affinity.c gcc-17-20260621/libgomp/config/linux/affinity.c
*** gcc-17-20260614/libgomp/config/linux/affinity.c	Sun Jun 14 22:32:16 2026
--- gcc-17-20260621/libgomp/config/linux/affinity.c	Sun Jun 21 22:32:15 2026
***************
*** 30,41 ****
--- 30,43 ----
  #endif
  #include "libgomp.h"
  #include "proc.h"
+ #include <dirent.h>
  #include <errno.h>
  #include <stdlib.h>
  #include <stdio.h>
  #include <string.h>
  #include <unistd.h>
  #include <limits.h>
+ #include <sys/syscall.h>
  
  #ifdef HAVE_PTHREAD_AFFINITY_NP
  
*************** ialias(omp_get_place_proc_ids)
*** 624,626 ****
--- 626,694 ----
  #include "../../affinity.c"
  
  #endif
+ 
+ static int num_numa_nodes = 0;
+ static int *numa_distances = NULL;
+ 
+ int
+ gomp_get_current_numa_node ()
+ {
+   int node;
+   syscall (SYS_getcpu, NULL /* cpu */, &node, NULL /* no longer used */);
+   return node;
+ }
+ 
+ int
+ gomp_get_numa_distance (int node1, int node2)
+ {
+   if (node1 < 0 || node2 < 0 || num_numa_nodes < 0)
+     return -1;
+ 
+   if (numa_distances == NULL)
+     {
+       num_numa_nodes = -1;
+       DIR *dir = opendir ("/sys/devices/system/node");
+       if (!dir)
+         return -1;
+       struct dirent *dp;
+       int cnt = 0;
+       errno = 0;
+       while ((dp = readdir(dir)) != NULL)
+ 	if (strncmp ("node", dp->d_name, 4 /* strlen ("node") */) == 0)
+ 	  cnt++;
+ 	else if (errno)
+ 	  {
+ 	    closedir (dir);
+ 	    return -1;
+ 	  }
+       closedir (dir);
+       numa_distances = (int *) gomp_malloc (sizeof (int) * cnt * cnt);
+ 
+       constexpr int len = sizeof ("/sys/devices/system/node/node12345/"
+                                   "distance");
+       char filename[len];
+ 
+       for (int i = 0; i < cnt; i++)
+ 	{
+ 	  if (len < snprintf (filename, sizeof (filename),
+ 			      "/sys/devices/system/node/node%d/distance", i))
+ 	    return -1;
+ 	  int distance = -1;
+ 	  FILE *in = fopen (filename, "r");
+ 	  for (int j = 0; j < cnt; j++)
+ 	    {
+ 	      fscanf (in, "%d", &distance);
+ 	      if (distance == -1)
+ 		{
+ 		  fclose (in);
+ 		  free (numa_distances);
+ 		  return -1;
+ 		}
+ 	      numa_distances[i * cnt + j] = distance;
+ 	    }
+ 	  fclose (in);
+ 	}
+       num_numa_nodes = cnt;
+     }
+   return numa_distances[node1 * num_numa_nodes + node2];
+ }
diff -Nrcpad gcc-17-20260614/libgomp/config/nvptx/team.c gcc-17-20260621/libgomp/config/nvptx/team.c
*** gcc-17-20260614/libgomp/config/nvptx/team.c	Sun Jun 14 22:32:16 2026
--- gcc-17-20260621/libgomp/config/nvptx/team.c	Sun Jun 21 22:32:15 2026
***************
*** 28,45 ****
  #if defined __nvptx_softstack__ && defined __nvptx_unisimt__
  
  #include "libgomp.h"
  #include <stdlib.h>
  #include <string.h>
  
  #define UNLIKELY(x) (__builtin_expect ((x), 0))
  
- extern void *GOMP_INDIRECT_ADDR_MAP;
- 
  struct gomp_thread *nvptx_thrs __attribute__((shared,nocommon));
  int __gomp_team_num __attribute__((shared,nocommon));
  
  static void gomp_thread_start (struct gomp_thread_pool *);
- extern void build_indirect_map (void);
  
  /* There should be some .shared space reserved for us.  There's no way to
     express this magic extern sizeless array in C so use asm.  */
--- 28,43 ----
  #if defined __nvptx_softstack__ && defined __nvptx_unisimt__
  
  #include "libgomp.h"
+ #include "target-indirect.h"
  #include <stdlib.h>
  #include <string.h>
  
  #define UNLIKELY(x) (__builtin_expect ((x), 0))
  
  struct gomp_thread *nvptx_thrs __attribute__((shared,nocommon));
  int __gomp_team_num __attribute__((shared,nocommon));
  
  static void gomp_thread_start (struct gomp_thread_pool *);
  
  /* There should be some .shared space reserved for us.  There's no way to
     express this magic extern sizeless array in C so use asm.  */
diff -Nrcpad gcc-17-20260614/libgomp/libgomp-plugin.h gcc-17-20260621/libgomp/libgomp-plugin.h
*** gcc-17-20260614/libgomp/libgomp-plugin.h	Sun Jun 14 22:32:16 2026
--- gcc-17-20260621/libgomp/libgomp-plugin.h	Sun Jun 21 22:32:15 2026
*************** extern void GOMP_PLUGIN_target_rev (uint
*** 159,164 ****
--- 159,166 ----
  /* Prototypes for functions implemented by libgomp plugins.  */
  extern const char *GOMP_OFFLOAD_get_name (void);
  extern const char *GOMP_OFFLOAD_get_uid (int);
+ extern const int GOMP_OFFLOAD_get_numa_node (int);
+ 
  extern unsigned int GOMP_OFFLOAD_get_caps (void);
  extern int GOMP_OFFLOAD_get_type (void);
  extern int GOMP_OFFLOAD_get_num_devices (unsigned int);
diff -Nrcpad gcc-17-20260614/libgomp/libgomp.h gcc-17-20260621/libgomp/libgomp.h
*** gcc-17-20260614/libgomp/libgomp.h	Sun Jun 14 22:32:16 2026
--- gcc-17-20260621/libgomp/libgomp.h	Sun Jun 21 22:32:15 2026
*************** extern int gomp_debug_var;
*** 613,618 ****
--- 613,620 ----
  extern bool gomp_display_affinity_var;
  extern char *gomp_affinity_format_var;
  extern size_t gomp_affinity_format_len;
+ extern int gomp_get_current_numa_node ();
+ extern int gomp_get_numa_distance (int, int);
  extern uintptr_t gomp_def_allocator;
  extern const struct gomp_default_icv gomp_default_icv_values;
  extern struct gomp_icv_list *gomp_initial_icv_list;
*************** struct gomp_device_descr
*** 1446,1451 ****
--- 1448,1454 ----
    /* Function handlers.  */
    __typeof (GOMP_OFFLOAD_get_name) *get_name_func;
    __typeof (GOMP_OFFLOAD_get_uid) *get_uid_func;
+   __typeof (GOMP_OFFLOAD_get_numa_node) *get_numa_node_func;
    __typeof (GOMP_OFFLOAD_get_caps) *get_caps_func;
    __typeof (GOMP_OFFLOAD_get_type) *get_type_func;
    __typeof (GOMP_OFFLOAD_get_num_devices) *get_num_devices_func;
diff -Nrcpad gcc-17-20260614/libgomp/libgomp.map gcc-17-20260621/libgomp/libgomp.map
*** gcc-17-20260614/libgomp/libgomp.map	Sun Jun 14 22:32:16 2026
--- gcc-17-20260621/libgomp/libgomp.map	Sun Jun 21 22:32:15 2026
*************** OMP_6.0 {
*** 247,252 ****
--- 247,257 ----
  	omp_control_tool_8_;
  } OMP_5.2;
  
+ OMP_6.1 {
+   global:
+ 	omp_get_device_distances;
+ } OMP_6.0;
+ 
  GOMP_1.0 {
    global:
  	GOMP_atomic_end;
diff -Nrcpad gcc-17-20260614/libgomp/libgomp.texi gcc-17-20260621/libgomp/libgomp.texi
*** gcc-17-20260614/libgomp/libgomp.texi	Sun Jun 14 22:32:16 2026
--- gcc-17-20260621/libgomp/libgomp.texi	Sun Jun 21 22:32:15 2026
*************** They have C linkage and do not throw exc
*** 1740,1745 ****
--- 1740,1746 ----
  @c * omp_set_device_num_teams::  <fixme>/TR13
  @c * omp_get_device_teams_thread_limit::  <fixme>/TR13
  @c * omp_set_device_teams_thread_limit::  <fixme>/TR13
+ * omp_get_device_distances:: Obtain the NUMA distance of a device
  @end menu
  
  
*************** to @code{omp_initial_device}; and otherw
*** 2018,2023 ****
--- 2019,2073 ----
  @end table
  
  
+ @node omp_get_device_distances
+ @subsection @code{omp_get_device_distances} -- Obtain the NUMA distance of a device
+ @table @asis
+ @item @emph{Description}:
+ The routine takes two arrays, @var{devs} and @var{distances}, that have at least
+ the size @var{ndevs}.  For each element of @var{devs}, the corresponding element
+ of @var{distances} is set to an implementation-defined non-negative distance
+ between the place on which the routine was invoked and the device number
+ specified in @var{devs}. For the host device, the distance is zero.
+ 
+ The routine must be executed on the host device and all values of @var{devs}
+ must be conforming devices numbers other than @code{omp_invalid_device}.
+ 
+ In GCC the distance is the value returned by the operating system for the
+ NUMA distance between the node on which the routine was executed and the node
+ to which the device is attached to. There are two exceptions: As required by
+ the specification, for the host device @code{0} is returned.  Additionally,
+ when either the operating system reports a negative number or when GCC runtime
+ cannot obtain the distance, the fixed value @code{10} is returned.  The former
+ is in particular the case when the system is virtualized.  The values the
+ operating system returns are usually based on the SLIT (System Locality Distance
+ Information Table) of ACPI (Advanced Configuration and Power Interface) and have
+ values between @code{10} and @code{254}.  If an invalid device number is
+ specified, GCC returns @code{-1}.
+ 
+ Fortran note: In GCC, this routine does not support passing default-kind integer
+ arguments with @code{-fdefault-integer-8}.
+ 
+ @item @emph{C/C++}
+ @multitable @columnfractions .20 .80
+ @item @emph{Prototype}: @tab @code{void omp_get_device_distances (int ndevs, const int *devs, int *distances)}
+ @end multitable
+ 
+ @item @emph{Fortran}:
+ @multitable @columnfractions .20 .80
+ @item @emph{Interface}: @tab @code{subroutine omp_get_device_distances (ndevs, devs, distances)}
+ @item                   @tab @code{integer, intent(in) :: ndevs, devs(*)}
+ @item                   @tab @code{integer, intent(out) :: distances(*)}
+ @end multitable
+ 
+ @item @emph{See also}:
+ @ref{omp_get_num_devices}
+ 
+ @item @emph{Reference}:
+ @c TODO: Update once OpenMP 6.1 is released
+ @uref{https://www.openmp.org, OpenMP specification Technical Report 15}, Section 3.16
+ @end table
+ 
+ 
  
  @node Device Memory Routines
  @section Device Memory Routines
diff -Nrcpad gcc-17-20260614/libgomp/libgomp_g.h gcc-17-20260621/libgomp/libgomp_g.h
*** gcc-17-20260614/libgomp/libgomp_g.h	Sun Jun 14 22:32:16 2026
--- gcc-17-20260621/libgomp/libgomp_g.h	Sun Jun 21 22:32:15 2026
***************
*** 33,38 ****
--- 33,43 ----
  #include <stddef.h>
  #include <stdint.h>
  
+ /* atomic.c */
+ 
+ extern void GOMP_atomic_start (void);
+ extern void GOMP_atomic_end (void);
+ 
  /* barrier.c */
  
  extern void GOMP_barrier (void);
*************** extern void GOMP_critical_start (void);
*** 44,51 ****
  extern void GOMP_critical_end (void);
  extern void GOMP_critical_name_start (void **);
  extern void GOMP_critical_name_end (void **);
- extern void GOMP_atomic_start (void);
- extern void GOMP_atomic_end (void);
  
  /* loop.c */
  
--- 49,54 ----
*************** extern void GOMP_target_enter_exit_data
*** 357,368 ****
  					 void **);
  extern void GOMP_teams (unsigned int, unsigned int);
  extern bool GOMP_teams4 (unsigned int, unsigned int, unsigned int, bool);
- extern void *GOMP_target_map_indirect_ptr (void *);
  struct interop_obj_t;
  extern void GOMP_interop (int, int, struct interop_obj_t ***, const int *,
  			  const char **, int, struct interop_obj_t **, int,
  			  struct interop_obj_t ***, unsigned, void **);
  
  /* teams.c */
  
  extern void GOMP_teams_reg (void (*) (void *), void *, unsigned, unsigned,
--- 360,374 ----
  					 void **);
  extern void GOMP_teams (unsigned int, unsigned int);
  extern bool GOMP_teams4 (unsigned int, unsigned int, unsigned int, bool);
  struct interop_obj_t;
  extern void GOMP_interop (int, int, struct interop_obj_t ***, const int *,
  			  const char **, int, struct interop_obj_t **, int,
  			  struct interop_obj_t ***, unsigned, void **);
  
+ /* target-indirect.c */
+ 
+ extern void *GOMP_target_map_indirect_ptr (void *);
+ 
  /* teams.c */
  
  extern void GOMP_teams_reg (void (*) (void *), void *, unsigned, unsigned,
diff -Nrcpad gcc-17-20260614/libgomp/oacc-init.c gcc-17-20260621/libgomp/oacc-init.c
*** gcc-17-20260614/libgomp/oacc-init.c	Sun Jun 14 22:32:16 2026
--- gcc-17-20260621/libgomp/oacc-init.c	Sun Jun 21 22:32:15 2026
*************** acc_init (acc_device_t d)
*** 559,566 ****
    goacc_attach_host_thread_to_device (-1);
  }
  
- ialias (acc_init)
- 
  void
  acc_shutdown (acc_device_t d)
  {
--- 559,564 ----
*************** acc_shutdown (acc_device_t d)
*** 576,583 ****
    gomp_mutex_unlock (&acc_device_lock);
  }
  
- ialias (acc_shutdown)
- 
  int
  acc_get_num_devices (acc_device_t d)
  {
--- 574,579 ----
*************** acc_get_num_devices (acc_device_t d)
*** 606,613 ****
    return n;
  }
  
- ialias (acc_get_num_devices)
- 
  /* Set the device type for the current thread only (using the current global
     default device number), initialising that device if necessary.  Also set the
     default device type for new threads to D.  */
--- 602,607 ----
*************** acc_set_device_type (acc_device_t d)
*** 659,666 ****
      }
  }
  
- ialias (acc_set_device_type)
- 
  static bool
  self_initializing_p (void)
  {
--- 653,658 ----
*************** acc_get_device_type (void)
*** 717,724 ****
    return res;
  }
  
- ialias (acc_get_device_type)
- 
  int
  acc_get_device_num (acc_device_t d)
  {
--- 709,714 ----
*************** acc_get_device_num (acc_device_t d)
*** 752,759 ****
    return goacc_device_num;
  }
  
- ialias (acc_get_device_num)
- 
  void
  acc_set_device_num (int ord, acc_device_t d)
  {
--- 742,747 ----
*************** acc_set_device_num (int ord, acc_device_
*** 799,806 ****
    goacc_device_num = ord;
  }
  
- ialias (acc_set_device_num)
- 
  static union goacc_property_value
  get_property_any (int ord, acc_device_t d, acc_device_property_t prop)
  {
--- 787,792 ----
*************** acc_get_property (int ord, acc_device_t
*** 845,852 ****
      return get_property_any (ord, d, prop).val;
  }
  
- ialias (acc_get_property)
- 
  const char *
  acc_get_property_string (int ord, acc_device_t d, acc_device_property_t prop)
  {
--- 831,836 ----
*************** acc_get_property_string (int ord, acc_de
*** 859,866 ****
      return NULL;
  }
  
- ialias (acc_get_property_string)
- 
  /* For -O and higher, the compiler always attempts to expand acc_on_device, but
     if the user disables the builtin, or calls it via a pointer, we'll need this
     version.
--- 843,848 ----
*************** acc_on_device (acc_device_t dev)
*** 877,884 ****
    return __builtin_acc_on_device (dev);
  }
  
- ialias (acc_on_device)
- 
  attribute_hidden void
  goacc_runtime_initialize (void)
  {
--- 859,864 ----
diff -Nrcpad gcc-17-20260614/libgomp/omp.h.in gcc-17-20260621/libgomp/omp.h.in
*** gcc-17-20260614/libgomp/omp.h.in	Sun Jun 14 22:32:16 2026
--- gcc-17-20260621/libgomp/omp.h.in	Sun Jun 21 22:32:15 2026
*************** extern const char *omp_get_interop_rc_de
*** 449,454 ****
--- 449,455 ----
  					    omp_interop_rc_t) __GOMP_NOTHROW;
  
  extern int omp_get_device_from_uid (const char *) __GOMP_NOTHROW;
+ extern void omp_get_device_distances(int, const int *, int *) __GOMP_NOTHROW;
  extern const char *omp_get_uid_from_device (int) __GOMP_NOTHROW;
  
  extern omp_control_tool_result_t omp_control_tool (omp_control_tool_t, int,
diff -Nrcpad gcc-17-20260614/libgomp/omp_lib.f90.in gcc-17-20260621/libgomp/omp_lib.f90.in
*** gcc-17-20260614/libgomp/omp_lib.f90.in	Sun Jun 14 22:32:16 2026
--- gcc-17-20260621/libgomp/omp_lib.f90.in	Sun Jun 21 22:32:15 2026
***************
*** 1071,1076 ****
--- 1071,1088 ----
            end function omp_get_uid_from_device_8
          end interface omp_get_uid_from_device
  
+         interface
+           ! This function only supports integer(4) for simplicity.
+           ! Contrary to OpenMP 6.1, it also uses bind(C) and value
+           ! and an explicit-size instead of assumed-size array.
+           subroutine omp_get_device_distances (ndevs, devs, distances) bind(C)
+             use iso_c_binding
+             integer(c_int), value, intent(in) :: ndevs
+             integer(c_int), intent(in) :: devs(ndevs)
+             integer(c_int), intent(out) :: distances(ndevs)
+           end subroutine omp_get_device_distances
+         end interface
+ 
          interface omp_control_tool
            integer (kind=omp_control_tool_result_kind) function &
                omp_control_tool (command, modifier)
diff -Nrcpad gcc-17-20260614/libgomp/omp_lib.h.in gcc-17-20260621/libgomp/omp_lib.h.in
*** gcc-17-20260614/libgomp/omp_lib.h.in	Sun Jun 14 22:32:16 2026
--- gcc-17-20260621/libgomp/omp_lib.h.in	Sun Jun 21 22:32:15 2026
***************
*** 687,692 ****
--- 687,705 ----
          end function omp_get_uid_from_device_8
        end interface omp_get_uid_from_device
  
+       interface
+ !       This function only supports integer(4) for simplicity.
+ !       Contrary to OpenMP 6.1, it also uses bind(C) and value
+ !       and an explicit-size instead of assumed-size array.
+         subroutine omp_get_device_distances (ndevs, devs, distances)            &
+      &      bind(C)
+           use iso_c_binding
+           integer(c_int), value, intent(in) :: ndevs
+           integer(c_int), intent(in) :: devs(ndevs)
+           integer(c_int), intent(out) :: distances(ndevs)
+         end subroutine omp_get_device_distances
+       end interface
+ 
        interface omp_control_tool
          integer (kind=omp_control_tool_result_kind) function                    &
       &      omp_control_tool (command, modifier)
diff -Nrcpad gcc-17-20260614/libgomp/plugin/cuda-lib.def gcc-17-20260621/libgomp/plugin/cuda-lib.def
*** gcc-17-20260614/libgomp/plugin/cuda-lib.def	Sun Jun 14 22:32:16 2026
--- gcc-17-20260621/libgomp/plugin/cuda-lib.def	Sun Jun 21 22:32:15 2026
*************** CUDA_ONE_CALL (cuDeviceGet)
*** 10,15 ****
--- 10,16 ----
  CUDA_ONE_CALL (cuDeviceGetAttribute)
  CUDA_ONE_CALL (cuDeviceGetCount)
  CUDA_ONE_CALL (cuDeviceGetName)
+ CUDA_ONE_CALL_MAYBE_NULL (cuDeviceGetPCIBusId)
  CUDA_ONE_CALL_MAYBE_NULL (cuDeviceGetUuid)
  CUDA_ONE_CALL_MAYBE_NULL (cuDeviceGetUuid_v2)
  CUDA_ONE_CALL (cuDeviceTotalMem)
diff -Nrcpad gcc-17-20260614/libgomp/plugin/plugin-gcn.c gcc-17-20260621/libgomp/plugin/plugin-gcn.c
*** gcc-17-20260614/libgomp/plugin/plugin-gcn.c	Sun Jun 14 22:32:16 2026
--- gcc-17-20260621/libgomp/plugin/plugin-gcn.c	Sun Jun 21 22:32:15 2026
*************** struct agent_info
*** 503,513 ****
       thread should have locked agent->module_rwlock for reading before
       acquiring it.  */
    pthread_mutex_t prog_mutex;
    /* Flag whether the HSA program that consists of all the modules has been
       finalized.  */
    bool prog_finalized;
-   /* HSA executable - the finalized program that is used to locate kernels.  */
-   hsa_executable_t executable;
  };
  
  /* Information required to identify, finalize and run any given kernel.  */
--- 503,516 ----
       thread should have locked agent->module_rwlock for reading before
       acquiring it.  */
    pthread_mutex_t prog_mutex;
+   /* HSA executable - the finalized program that is used to locate kernels.  */
+   hsa_executable_t executable;
+   /* NUMA node; 0 = not initialized, < 0 N/A (error or virtualized machine);
+      if > 0: actual node is 'numa_node - 1' (range: 0...(num-nodes -1)).  */
+   int numa_node;
    /* Flag whether the HSA program that consists of all the modules has been
       finalized.  */
    bool prog_finalized;
  };
  
  /* Information required to identify, finalize and run any given kernel.  */
*************** GOMP_OFFLOAD_get_uid (int ord)
*** 3727,3732 ****
--- 3730,3778 ----
    return str;
  }
  
+ /* Return the NUMA node of the GPU identified by ORD; returns -1 when
+    an error occurred; this value might also be returned if on
+    virtualized systems.
+    The implementation assumes that the Linux /sys is available.  */
+ 
+ int
+ GOMP_OFFLOAD_get_numa_node (int ord)
+ {
+   hsa_status_t status, status2;
+   uint32_t domain, bdfid;
+   struct agent_info *agent = get_agent_info (ord);
+ 
+   /* Initialized to 0; to distinguish, save with offset.  */
+   if (agent->numa_node != 0)
+     return agent->numa_node > 0 ? agent->numa_node - 1 : agent->numa_node;
+ 
+   agent->numa_node = -1;
+ 
+   status = hsa_fns.hsa_agent_get_info_fn (agent->id, HSA_AMD_AGENT_INFO_DOMAIN,
+ 					  &domain);
+   status2 = hsa_fns.hsa_agent_get_info_fn (agent->id, HSA_AMD_AGENT_INFO_BDFID,
+ 					   &bdfid);
+   if (status != HSA_STATUS_SUCCESS || status2 != HSA_STATUS_SUCCESS)
+     return -1;
+ 
+   constexpr int len = sizeof ("/sys/bus/pci/devices/0000:00:00.00/numa_node");
+   char filename[len];
+   if (len < snprintf (filename, sizeof (filename),
+ 		      "/sys/bus/pci/devices/%04x:%02x:%02x.0/numa_node",
+ 		      domain, bdfid >> 8, bdfid & 0xFF))
+     return -1;
+ 
+   FILE *in = fopen (filename, "r");
+   if (!in)
+     return -1;
+   int numa_node = -1;
+   fscanf (in, "%d", &numa_node);
+   fclose (in);
+ 
+   agent->numa_node = numa_node >= 0 ? numa_node + 1 : numa_node;
+   return numa_node;
+ }
+ 
  /* Return the specific capabilities the HSA accelerator have.  */
  
  unsigned int
diff -Nrcpad gcc-17-20260614/libgomp/plugin/plugin-nvptx.c gcc-17-20260621/libgomp/plugin/plugin-nvptx.c
*** gcc-17-20260614/libgomp/plugin/plugin-nvptx.c	Sun Jun 14 22:32:16 2026
--- gcc-17-20260621/libgomp/plugin/plugin-nvptx.c	Sun Jun 21 22:32:15 2026
*************** struct ptx_device
*** 328,333 ****
--- 328,334 ----
    int warp_size;
    int max_threads_per_block;
    int max_threads_per_multiprocessor;
+   int numa_node;
    int default_dims[GOMP_DIM_MAX];
  
    /* Length as used by the CUDA Runtime API ('struct cudaDeviceProp').  */
*************** GOMP_OFFLOAD_get_uid (int ord)
*** 1340,1345 ****
--- 1341,1388 ----
    return str;
  }
  
+ /* Return the NUMA node of the GPU identified by ORD; returns -1 when
+    an error occurred; this value might also be returned if on
+    virtualized systems.
+    The implementation assumes that the Linux /sys is available.  */
+ 
+ int
+ GOMP_OFFLOAD_get_numa_node (int ord)
+ {
+   CUresult r = CUDA_ERROR_NOT_FOUND;
+   char bus_id[14] = {};
+   struct ptx_device *dev = ptx_devices[ord];
+ 
+   /* Initialized to 0; to distinguish, save with offset.  */
+   if (dev->numa_node != 0)
+     return dev->numa_node > 0 ? dev->numa_node - 1 : dev->numa_node;
+ 
+   dev->numa_node = -1;
+ 
+   if (CUDA_CALL_EXISTS (cuDeviceGetPCIBusId))
+     r = CUDA_CALL_NOCHECK (cuDeviceGetPCIBusId, bus_id, sizeof (bus_id)-1,
+ 			   dev->dev);
+   if (bus_id[0] == '\0' || r != CUDA_SUCCESS)
+     return -1;
+ 
+   constexpr int len = (sizeof("/sys/bus/pci/devices//numa_node")
+ 		       + sizeof (bus_id));
+   char filename[len];
+   if (len < snprintf (filename, sizeof (filename),
+ 		     "/sys/bus/pci/devices/%s/numa_node", bus_id))
+     return -1;
+ 
+   FILE *in = fopen (filename, "r");
+   if (!in)
+     return -1;
+   int numa_node = -1;
+   fscanf (in, "%d", &numa_node);
+   fclose (in);
+ 
+   dev->numa_node = numa_node >= 0 ? numa_node + 1 : numa_node;
+   return numa_node;
+ }
+ 
  unsigned int
  GOMP_OFFLOAD_get_caps (void)
  {
diff -Nrcpad gcc-17-20260614/libgomp/target-indirect.c gcc-17-20260621/libgomp/target-indirect.c
*** gcc-17-20260614/libgomp/target-indirect.c	Sun Jun 14 22:32:16 2026
--- gcc-17-20260621/libgomp/target-indirect.c	Sun Jun 21 22:32:15 2026
***************
*** 24,29 ****
--- 24,31 ----
     see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
     <http://www.gnu.org/licenses/>.  */
  
+ #include "libgomp.h"
+ 
  void *
  GOMP_target_map_indirect_ptr (void *ptr)
  {
diff -Nrcpad gcc-17-20260614/libgomp/target.c gcc-17-20260621/libgomp/target.c
*** gcc-17-20260614/libgomp/target.c	Sun Jun 14 22:32:16 2026
--- gcc-17-20260621/libgomp/target.c	Sun Jun 21 22:32:15 2026
*************** omp_get_device_from_uid (const char *uid
*** 6085,6092 ****
--- 6085,6144 ----
    return omp_invalid_device;
  }
  
+ /* Return the numa distance between the numa node of the calling host
+    thread and each of the NDEV devices in DEVICES.
+    Special values:
+    - Invalid device number: undefined, GCC uses -1.
+    - Host device: OpenMP defines this to be 0
+    - Nonhost device:  >= 0. If not available use 10 (= lowest ACPI
+      distance).
+    Note: Not available can mean either not a supported system
+    (e.g non Linux) or the value is not known (virtualized system). */
+ 
+ void
+ omp_get_device_distances (int ndevs, const int *devs, int *distances)
+ {
+   if (ndevs < 1)
+     return;
+   int num_devices = gomp_get_num_devices ();
+   int node = gomp_get_current_numa_node ();
+   if (node < 0) /* Not supported. */
+     {
+       for (int i = 0; i < ndevs; i++)
+ 	if (devs[i] < omp_initial_device || devs[i] > num_devices)
+ 	  distances[i] = -1;  /* invalid */
+ 	else if (devs[i] == omp_initial_device || devs[i] == num_devices)
+ 	  distances[i] = 0;
+ 	else
+ 	  distances[i] = 10;
+       return;
+     }
+   for (int i = 0; i < ndevs; i++)
+     {
+       int device_num = (devs[i] == omp_default_device
+ 			? gomp_get_default_device () : devs[i]);
+       if (device_num < omp_initial_device || device_num > num_devices)
+ 	distances[i] = -1;  /* invalid */
+       else if (device_num == omp_initial_device || device_num == num_devices)
+ 	distances[i] = 0;
+       else
+ 	{
+ 	  int dist = 10;
+ 	  struct gomp_device_descr *devicep = resolve_device (device_num,
+ 							      false);
+ 	  if (devicep && devicep->get_numa_node_func)
+ 	    {
+ 	      int node2 = devicep->get_numa_node_func (devicep->target_id);
+ 	      dist = gomp_get_numa_distance (node, node2);
+ 	    }
+ 	  distances[i] = dist >= 0 ? dist : 10;
+ 	}
+     }
+ }
+ 
  ialias (omp_get_uid_from_device)
  ialias (omp_get_device_from_uid)
+ ialias (omp_get_device_distances)
  
  #ifdef PLUGIN_SUPPORT
  
*************** gomp_load_plugin_for_device (struct gomp
*** 6131,6136 ****
--- 6183,6189 ----
  
    DLSYM (get_name);
    DLSYM_OPT (get_uid, get_uid);
+   DLSYM_OPT (get_numa_node, get_numa_node);
    DLSYM (get_caps);
    DLSYM (get_type);
    DLSYM (get_num_devices);
diff -Nrcpad gcc-17-20260614/libgomp/testsuite/libgomp.c/omp-get-device-distances.c gcc-17-20260621/libgomp/testsuite/libgomp.c/omp-get-device-distances.c
*** gcc-17-20260614/libgomp/testsuite/libgomp.c/omp-get-device-distances.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/libgomp/testsuite/libgomp.c/omp-get-device-distances.c	Sun Jun 21 22:32:15 2026
***************
*** 0 ****
--- 1,101 ----
+ #include <omp.h>
+ 
+ int
+ main ()
+ {
+   int dev, dist;
+   int dev2, dist2;
+ 
+   // GCC specific: invalid numbers return -1
+   dev = omp_invalid_device; dist = -99;
+   omp_get_device_distances (1, &dev, &dist);
+   if (dev != omp_invalid_device || dist != -1)
+     __builtin_abort ();
+ 
+   dev = -99; dist = -99;
+   omp_get_device_distances (1, &dev, &dist);
+   if (dev != -99 || dist != -1)
+     __builtin_abort ();
+ 
+   dev = omp_get_num_devices () + 1; dist = -99;
+   omp_get_device_distances (1, &dev, &dist);
+   if (dev != omp_get_num_devices () + 1 || dist != -1)
+     __builtin_abort ();
+ 
+   // The following two need to yield idential results
+   dev = omp_default_device; dist = -99;
+   omp_get_device_distances (1, &dev, &dist);
+   if (dev != omp_default_device || dist < 0)
+     __builtin_abort ();
+ 
+   dev2 = omp_get_default_device (); dist2 = -99;
+   omp_get_device_distances (1, &dev2, &dist2);
+   if (dev2 != omp_get_default_device () || dist2 != dist)
+     __builtin_abort ();
+ 
+   // The following two need to yield idential results
+   dev = omp_initial_device; dist = -99;
+   omp_get_device_distances (1, &dev, &dist);
+   if (dev != omp_initial_device || dist != 0)
+     __builtin_abort ();
+ 
+   dev2 = omp_get_num_devices (); dist2 = -99;
+   omp_get_device_distances (1, &dev2, &dist2);
+   if (dev2 != omp_get_num_devices () || dist2 != 0)
+     __builtin_abort ();
+ 
+   for (int i = omp_initial_device; i <= omp_get_num_devices (); i++)
+     {
+       dev = i; dist = -99;
+       omp_get_device_distances (1, &dev, &dist);
+       if (dev != i)
+ 	__builtin_abort ();
+       // Host == 0 per definition
+       // GCC specific: All others (unknown or not) should have > 0
+       // the spec only requires >= 0
+       if (i == omp_initial_device || i == omp_get_num_devices ())
+ 	{
+ 	  if (dist != 0)
+ 	    __builtin_abort ();
+ 	}
+       else
+ 	{
+ 	  if (dist <= 0)
+ 	    __builtin_abort ();
+ 	}
+      }
+ 
+   int *devs, *dists;
+   int size = 1 + 1 + omp_get_num_devices ();
+   devs = (int *) __builtin_malloc (sizeof (int) * size * size);
+   dists = (int *) __builtin_malloc (sizeof (int) * size * size);
+   for (int i = 0; i < size; i++)
+     {
+       int dev = i - 1; // -1 (initial), 0, ... num_dev
+       devs[i] = dev;
+       dists[i] = -99;
+     }
+ 
+   omp_get_device_distances (size, devs, dists);
+ 
+   for (int i = 0; i < size; i++)
+     {
+       int dev = i - 1; // -1 (initial), 0, ... num_dev
+       if (devs[i] != dev)
+ 	__builtin_abort ();
+       // Host == 0 per definition
+       // GCC specific: All others (unknown or not) should have > 0
+       // the spec only requires >= 0
+       if (devs[i] == omp_initial_device || devs[i] == omp_get_num_devices ())
+ 	{
+ 	  if (dists[i] != 0)
+ 	    __builtin_abort ();
+ 	}
+       else
+ 	{
+ 	  if (dists[i] <= 0)
+ 	    __builtin_abort ();
+ 	}
+       __builtin_printf ("Device%3d: distance %d\n", dev, dists[i]);
+     }
+ }
diff -Nrcpad gcc-17-20260614/libgomp/testsuite/libgomp.fortran/omp-get-device-distances.f90 gcc-17-20260621/libgomp/testsuite/libgomp.fortran/omp-get-device-distances.f90
*** gcc-17-20260614/libgomp/testsuite/libgomp.fortran/omp-get-device-distances.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260621/libgomp/testsuite/libgomp.fortran/omp-get-device-distances.f90	Sun Jun 21 22:32:15 2026
***************
*** 0 ****
--- 1,53 ----
+ use omp_lib
+ implicit none (type, external)
+ integer :: devs(1), dists(1)
+ integer, allocatable :: a_devs(:), a_dists(:)
+ integer :: i
+ 
+ ! GCC specific: invalid numbers return -1
+ devs(1) = omp_invalid_device; dists(1) = -99
+ call omp_get_device_distances (size(devs), devs, dists)
+ if (devs(1) /= omp_invalid_device .or. dists(1) /= -1) stop 1
+ 
+ devs(1) = -123; dists(1) = -99
+ call omp_get_device_distances (size(devs), devs, dists)
+ if (devs(1) /= -123 .or. dists(1) /= -1) stop 2
+ 
+ devs(1) = omp_get_num_devices () + 1; dists(1) = -99
+ call omp_get_device_distances (size(devs), devs, dists)
+ if (devs(1) /= omp_get_num_devices () + 1 .or. dists(1) /= -1) stop 3
+ 
+ do i = omp_initial_device, omp_get_num_devices ()
+   devs(1) = i; dists(1) = -99
+   call omp_get_device_distances (size(devs), devs, dists)
+   if (devs(1) /= i) stop 4
+   ! Host == 0 per definition
+   ! GCC specific: All others (unknown or not) should have > 0
+   ! the spec only requires >= 0
+   if (i == omp_initial_device .or. i == omp_get_num_devices ()) then
+     if (dists(1) /= 0) stop 5
+   else
+     if (dists(1) <= 0) stop 6
+   end if
+ end do
+ 
+ allocate(a_devs(omp_initial_device:omp_get_num_devices ()))
+ a_devs = [(i, i = omp_initial_device, omp_get_num_devices ())]
+ allocate(a_dists, mold=a_devs)
+ a_dists = -99
+ 
+ call omp_get_device_distances (size(a_devs), a_devs, a_dists)
+ 
+ do i = lbound (a_devs, 1), ubound (a_devs, 1)
+   if (a_devs(i) /= i) stop 7
+   ! Host == 0 per definition
+   ! GCC specific: All others (unknown or not) should have > 0
+   if (i == omp_initial_device .or. i == omp_get_num_devices ()) then
+     if (a_dists(i) /= 0) stop 8
+   else
+     if (a_dists(i) <= 0) stop 9
+   end if
+   print '(a,i3,a,i0)', 'device', i, ': distance ', a_dists(i)
+ end do
+ 
+ end
diff -Nrcpad gcc-17-20260614/libitm/ChangeLog gcc-17-20260621/libitm/ChangeLog
*** gcc-17-20260614/libitm/ChangeLog	Sun Jun 14 22:32:17 2026
--- gcc-17-20260621/libitm/ChangeLog	Sun Jun 21 22:32:15 2026
***************
*** 1,3 ****
--- 1,9 ----
+ 2026-06-17  Muhammad Kamran  <muhammad.kamran@arm.com>
+ 
+ 	* config/aarch64/sjlj.S (FEATURE_1_AND_MARK): Define.  Use
+ 	AArch64 build attributes when __ARM_BUILDATTR64_FV is available,
+ 	otherwise emit a GNU property note.
+ 
  2026-06-01  Dhruv Chawla  <dhruvc@nvidia.com>
  
  	* config/linux/futex_bits.h: Fix typo.
diff -Nrcpad gcc-17-20260614/libitm/config/aarch64/sjlj.S gcc-17-20260621/libitm/config/aarch64/sjlj.S
*** gcc-17-20260614/libitm/config/aarch64/sjlj.S	Sun Jun 14 22:32:17 2026
--- gcc-17-20260621/libitm/config/aarch64/sjlj.S	Sun Jun 21 22:32:15 2026
*************** GTM_longjmp:
*** 146,152 ****
  # define PAC_FLAG 0
  #endif
  
- /* Add a NT_GNU_PROPERTY_TYPE_0 note.  */
  #define GNU_PROPERTY(type, value)	\
    .section .note.gnu.property, "a";	\
    .p2align 3;				\
--- 146,151 ----
*************** GTM_longjmp:
*** 159,169 ****
    .word value;				\
    .word 0;
  
  #if defined(__linux__) || defined(__FreeBSD__)
  .section .note.GNU-stack, "", %progbits
  
! /* Add GNU property note if built with branch protection.  */
  # if (BTI_FLAG|PAC_FLAG) != 0
! GNU_PROPERTY (FEATURE_1_AND, BTI_FLAG|PAC_FLAG)
  # endif
  #endif
--- 158,187 ----
    .word value;				\
    .word 0;
  
+ #ifdef __ARM_BUILDATTR64_FV
+ /* Add AArch64 feature bits build attributes.  */
+ # define FEATURE_1_AND_MARK(value)					\
+     .aeabi_subsection aeabi_feature_and_bits, optional, ULEB128;	\
+     .if ((value) & FEATURE_1_BTI);					\
+     .aeabi_attribute Tag_Feature_BTI, 1;				\
+     .else;								\
+     .aeabi_attribute Tag_Feature_BTI, 0;				\
+     .endif;								\
+     .if ((value) & FEATURE_1_PAC);					\
+     .aeabi_attribute Tag_Feature_PAC, 1;				\
+     .else;								\
+     .aeabi_attribute Tag_Feature_PAC, 0;				\
+     .endif;
+ #else
+ /* Add a NT_GNU_PROPERTY_TYPE_0 note.  */
+ # define FEATURE_1_AND_MARK(value) GNU_PROPERTY (FEATURE_1_AND, value)
+ #endif
+ 
  #if defined(__linux__) || defined(__FreeBSD__)
  .section .note.GNU-stack, "", %progbits
  
! /* Add markings if built with branch protection.  */
  # if (BTI_FLAG|PAC_FLAG) != 0
! FEATURE_1_AND_MARK (BTI_FLAG|PAC_FLAG)
  # endif
  #endif
diff -Nrcpad gcc-17-20260614/libstdc++-v3/ChangeLog gcc-17-20260621/libstdc++-v3/ChangeLog
*** gcc-17-20260614/libstdc++-v3/ChangeLog	Sun Jun 14 22:32:17 2026
--- gcc-17-20260621/libstdc++-v3/ChangeLog	Sun Jun 21 22:32:16 2026
***************
*** 1,3 ****
--- 1,13 ----
+ 2026-06-17  Marek Polacek  <polacek@redhat.com>
+ 
+ 	* src/c++17/string-inst.cc (basic_string::data): Remove noexcept.
+ 
+ 2026-06-15  Gerald Pfeifer  <gerald@pfeifer.com>
+ 
+ 	* doc/xml/manual/using_exceptions.xml: Switch link to
+ 	www.opengroup.org to https.
+ 	* doc/html/manual/using_exceptions.html: Regenerate.
+ 
  2026-06-13  Tomasz Kamiński  <tkaminsk@redhat.com>
  
  	* include/bits/version.def (constant_wrapper): Bump to 202606L.
diff -Nrcpad gcc-17-20260614/libstdc++-v3/doc/html/manual/using_exceptions.html gcc-17-20260621/libstdc++-v3/doc/html/manual/using_exceptions.html
*** gcc-17-20260614/libstdc++-v3/doc/html/manual/using_exceptions.html	Sun Jun 14 22:32:17 2026
--- gcc-17-20260621/libstdc++-v3/doc/html/manual/using_exceptions.html	Sun Jun 21 22:32:16 2026
*************** is called.
*** 321,327 ****
    catch(...)
    { this-&gt;_M_setstate(ios_base::badbit); }
  </pre></div></div><div class="bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="using.exceptions.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry"><a id="id-1.3.3.4.9.10.2"></a><p><span class="title"><em>
! 	<a class="link" href="http://www.opengroup.org/austin/" target="_top">
  	System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
  	</a>
        </em>. </span><span class="pagenums">
--- 321,327 ----
    catch(...)
    { this-&gt;_M_setstate(ios_base::badbit); }
  </pre></div></div><div class="bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="using.exceptions.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry"><a id="id-1.3.3.4.9.10.2"></a><p><span class="title"><em>
! 	<a class="link" href="https://www.opengroup.org/austin/" target="_top">
  	System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
  	</a>
        </em>. </span><span class="pagenums">
diff -Nrcpad gcc-17-20260614/libstdc++-v3/doc/xml/manual/using_exceptions.xml gcc-17-20260621/libstdc++-v3/doc/xml/manual/using_exceptions.xml
*** gcc-17-20260614/libstdc++-v3/doc/xml/manual/using_exceptions.xml	Sun Jun 14 22:32:17 2026
--- gcc-17-20260621/libstdc++-v3/doc/xml/manual/using_exceptions.xml	Sun Jun 21 22:32:16 2026
*************** is called.
*** 507,513 ****
    <biblioentry>
        <title>
  	<link xmlns:xlink="http://www.w3.org/1999/xlink"
! 	      xlink:href="http://www.opengroup.org/austin/">
  	System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
  	</link>
        </title>
--- 507,513 ----
    <biblioentry>
        <title>
  	<link xmlns:xlink="http://www.w3.org/1999/xlink"
! 	      xlink:href="https://www.opengroup.org/austin/">
  	System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
  	</link>
        </title>
diff -Nrcpad gcc-17-20260614/libstdc++-v3/src/c++17/string-inst.cc gcc-17-20260621/libstdc++-v3/src/c++17/string-inst.cc
*** gcc-17-20260614/libstdc++-v3/src/c++17/string-inst.cc	Sun Jun 14 22:32:17 2026
--- gcc-17-20260621/libstdc++-v3/src/c++17/string-inst.cc	Sun Jun 21 22:32:16 2026
*************** template basic_string<char>::basic_strin
*** 42,55 ****
  template basic_string<char>::__sv_wrapper::__sv_wrapper(string_view);
  template string_view basic_string<char>::_S_to_string_view(string_view);
  template basic_string<char>::operator string_view() const noexcept;
! template char* basic_string<char>::data() noexcept;
  
  #ifdef _GLIBCXX_USE_WCHAR_T
  template basic_string<wchar_t>::basic_string(__sv_wrapper, const allocator_type&);
  template basic_string<wchar_t>::__sv_wrapper::__sv_wrapper(wstring_view);
  template wstring_view basic_string<wchar_t>::_S_to_string_view(wstring_view);
  template basic_string<wchar_t>::operator wstring_view() const noexcept;
! template wchar_t* basic_string<wchar_t>::data() noexcept;
  #endif
  
  _GLIBCXX_END_NAMESPACE_VERSION
--- 42,55 ----
  template basic_string<char>::__sv_wrapper::__sv_wrapper(string_view);
  template string_view basic_string<char>::_S_to_string_view(string_view);
  template basic_string<char>::operator string_view() const noexcept;
! template char* basic_string<char>::data();
  
  #ifdef _GLIBCXX_USE_WCHAR_T
  template basic_string<wchar_t>::basic_string(__sv_wrapper, const allocator_type&);
  template basic_string<wchar_t>::__sv_wrapper::__sv_wrapper(wstring_view);
  template wstring_view basic_string<wchar_t>::_S_to_string_view(wstring_view);
  template basic_string<wchar_t>::operator wstring_view() const noexcept;
! template wchar_t* basic_string<wchar_t>::data();
  #endif
  
  _GLIBCXX_END_NAMESPACE_VERSION
